]> git.ipfire.org Git - thirdparty/bash.git/commitdiff
bash-5.2 distribution sources and documentation bash-5.2
authorChet Ramey <chet.ramey@case.edu>
Mon, 26 Sep 2022 15:49:46 +0000 (11:49 -0400)
committerChet Ramey <chet.ramey@case.edu>
Mon, 26 Sep 2022 15:49:46 +0000 (11:49 -0400)
532 files changed:
CHANGES
COMPAT
CWRU/changelog
CWRU/misc/bison [changed mode: 0755->0644]
ChangeLog [changed from symlink to file mode: 0644]
INSTALL
MANIFEST
Makefile.in
NEWS
POSIX
RBASH
README
aclocal.m4
alias.c
array.c
array.h
array2.c [new file with mode: 0644]
arrayfunc.c
arrayfunc.h
assoc.c
assoc.h
bashansi.h
bashhist.c
bashjmp.h
bashline.c
bashline.h
builtins.h
builtins/Makefile.in
builtins/bashgetopt.c
builtins/bashgetopt.h
builtins/bind.def
builtins/cd.def
builtins/command.def
builtins/common.c
builtins/common.h
builtins/complete.def
builtins/declare.def
builtins/enable.def
builtins/evalstring.c
builtins/exec.def
builtins/exit.def
builtins/fc.def
builtins/gen-helpfiles.c
builtins/hash.def
builtins/help.def
builtins/history.def
builtins/mapfile.def
builtins/mkbuiltins.c
builtins/printf.def
builtins/read.def
builtins/reserved.def
builtins/set.def
builtins/setattr.def
builtins/shopt.def
builtins/suspend.def
builtins/trap.def
builtins/ulimit.def
builtins/wait.def
command.h
config-bot.h
config-top.h
config.h.in
configure
configure.ac
doc/FAQ
doc/Makefile.in
doc/article.txt
doc/bash.0
doc/bash.1
doc/bash.html
doc/bash.info
doc/bash.pdf
doc/bash.ps
doc/bashbug.0
doc/bashbug.ps
doc/bashref.dvi
doc/bashref.html
doc/bashref.info
doc/bashref.pdf
doc/bashref.ps
doc/bashref.texi
doc/builtins.0
doc/builtins.1
doc/builtins.ps
doc/rbash.0
doc/rbash.1
doc/rbash.ps
doc/version.texi
error.c
error.h
eval.c
examples/functions/autoload.v4
examples/functions/csh-compat
examples/loadables/Makefile.in
examples/loadables/Makefile.inc.in
examples/loadables/Makefile.sample.in [new file with mode: 0644]
examples/loadables/README
examples/loadables/accept.c
examples/loadables/cat.c
examples/loadables/csv.c
examples/loadables/cut.c
examples/loadables/dsv.c [new file with mode: 0644]
examples/loadables/fdflags.c
examples/loadables/getconf.c [new file with mode: 0644]
examples/loadables/getconf.h [new file with mode: 0644]
examples/loadables/head.c
examples/loadables/mkdir.c
examples/loadables/perl/bperl.c
examples/loadables/perl/iperl.c
examples/loadables/print.c
examples/loadables/realpath.c
examples/loadables/rm.c
examples/loadables/seq.c
examples/loadables/sleep.c
examples/loadables/stat.c
examples/loadables/tee.c
examples/loadables/tty.c
examples/misc/aliasconv.bash [changed mode: 0755->0644]
examples/misc/aliasconv.sh [changed mode: 0755->0644]
examples/misc/cshtobash [changed mode: 0755->0644]
examples/scripts/bcalc [new file with mode: 0644]
examples/scripts/inpath [changed mode: 0755->0644]
examples/scripts/shprompt [changed mode: 0755->0644]
examples/scripts/xterm_title [changed mode: 0755->0644]
examples/scripts/zprintf [changed mode: 0755->0644]
examples/shellmath/LICENSE [new file with mode: 0644]
examples/shellmath/README.md [new file with mode: 0644]
examples/shellmath/assert.sh [new file with mode: 0644]
examples/shellmath/faster_e_demo.sh [new file with mode: 0644]
examples/shellmath/image.png [new file with mode: 0644]
examples/shellmath/runTests.sh [new file with mode: 0644]
examples/shellmath/shellmath.sh [new file with mode: 0644]
examples/shellmath/slower_e_demo.sh [new file with mode: 0644]
examples/shellmath/testCases.in [new file with mode: 0644]
examples/shellmath/timingData.txt [new file with mode: 0644]
execute_cmd.c
expr.c
externs.h
findcmd.c
flags.c
general.c
general.h
hashcmd.c
include/chartypes.h
include/posixdir.h
include/posixtime.h
include/shmbchar.h
include/shmbutil.h
include/stdc.h
include/timer.h [new file with mode: 0644]
include/typemax.h
input.c
jobs.c
jobs.h
lib/glob/Makefile.in
lib/glob/glob.c
lib/glob/glob.h
lib/glob/sm_loop.c
lib/glob/smatch.c
lib/glob/strmatch.h
lib/intl/VERSION
lib/intl/ref-add.sin [changed mode: 0755->0644]
lib/intl/ref-del.sin [changed mode: 0755->0644]
lib/malloc/Makefile.in
lib/malloc/imalloc.h
lib/malloc/malloc.c
lib/malloc/mstats.h
lib/readline/Makefile.in
lib/readline/bind.c
lib/readline/callback.c
lib/readline/chardefs.h
lib/readline/colors.c
lib/readline/compat.c
lib/readline/complete.c
lib/readline/display.c
lib/readline/doc/Makefile
lib/readline/doc/history.texi
lib/readline/doc/hstech.texi
lib/readline/doc/hsuser.texi
lib/readline/doc/rlman.texi
lib/readline/doc/rltech.texi
lib/readline/doc/rluser.texi
lib/readline/doc/rluserman.texi
lib/readline/doc/version.texi
lib/readline/examples/excallback.c
lib/readline/examples/histexamp.c
lib/readline/examples/rl-callbacktest.c
lib/readline/examples/rl.c
lib/readline/examples/rlcat.c
lib/readline/examples/rltest.c
lib/readline/funmap.c
lib/readline/histexpand.c
lib/readline/histfile.c
lib/readline/histlib.h
lib/readline/history.c
lib/readline/history.h
lib/readline/histsearch.c
lib/readline/input.c
lib/readline/isearch.c
lib/readline/keymaps.h
lib/readline/kill.c
lib/readline/macro.c
lib/readline/mbutil.c
lib/readline/misc.c
lib/readline/nls.c
lib/readline/parens.c
lib/readline/posixdir.h
lib/readline/posixtime.h [new file with mode: 0644]
lib/readline/readline.c
lib/readline/readline.h
lib/readline/rldefs.h
lib/readline/rlmbutil.h
lib/readline/rlprivate.h
lib/readline/rlshell.h
lib/readline/rltty.c
lib/readline/rltypedefs.h
lib/readline/search.c
lib/readline/shell.c
lib/readline/signals.c
lib/readline/terminal.c
lib/readline/text.c
lib/readline/tilde.h
lib/readline/undo.c
lib/readline/util.c
lib/readline/vi_mode.c
lib/readline/xmalloc.h
lib/sh/Makefile.in
lib/sh/casemod.c
lib/sh/fmtullong.c
lib/sh/input_avail.c
lib/sh/oslib.c
lib/sh/setlinebuf.c
lib/sh/shmatch.c
lib/sh/shquote.c
lib/sh/snprintf.c
lib/sh/strdup.c
lib/sh/strftime.c
lib/sh/strtoimax.c
lib/sh/strtol.c
lib/sh/strtoll.c
lib/sh/strtoull.c
lib/sh/strtoumax.c
lib/sh/strvis.c [new file with mode: 0644]
lib/sh/timers.c [new file with mode: 0644]
lib/sh/unicode.c
lib/sh/winsize.c
lib/sh/zgetline.c
lib/sh/zmapfd.c
lib/sh/zread.c
lib/termcap/termcap.c
lib/tilde/Makefile.in
lib/tilde/tilde.h
locale.c
m4/gettext.m4
m4/strtoimax.m4 [new file with mode: 0644]
m4/threadlib.m4
make_cmd.c
nojobs.c
parse.y
parser-built
parser.h
patchlevel.h
pathexp.c
pathexp.h
pcomplete.c
pcomplib.c
po/af.gmo
po/af.po
po/bash.pot
po/bg.gmo
po/bg.po
po/ca.gmo
po/ca.po
po/cs.gmo
po/cs.po
po/da.gmo
po/da.po
po/de.gmo
po/de.po
po/el.gmo
po/el.po
po/en@boldquot.gmo
po/en@boldquot.po
po/en@quot.gmo
po/en@quot.po
po/eo.gmo
po/eo.po
po/es.gmo
po/es.po
po/et.gmo
po/et.po
po/fi.gmo
po/fi.po
po/fr.gmo
po/fr.po
po/ga.gmo
po/ga.po
po/gl.gmo
po/gl.po
po/hr.gmo
po/hr.po
po/hu.gmo
po/hu.po
po/id.gmo
po/id.po
po/it.gmo
po/it.po
po/ja.gmo
po/ja.po
po/ko.gmo
po/ko.po
po/lt.gmo
po/lt.po
po/nb.gmo
po/nb.po
po/nl.gmo
po/nl.po
po/pl.gmo
po/pl.po
po/pt.gmo
po/pt.po
po/pt_BR.gmo
po/pt_BR.po
po/ro.gmo
po/ro.po
po/ru.gmo
po/ru.po
po/sk.gmo
po/sk.po
po/sl.gmo
po/sl.po
po/sr.gmo
po/sr.po
po/sv.gmo
po/sv.po
po/tr.gmo
po/tr.po
po/uk.gmo
po/uk.po
po/vi.gmo
po/vi.po
po/zh_CN.gmo
po/zh_CN.po
po/zh_TW.gmo
po/zh_TW.po
print_cmd.c
quit.h
redir.c
redir.h
shell.c
shell.h
sig.c
sig.h
siglist.c
stringlib.c
subst.c
subst.h
support/Makefile.in
support/bashbug.sh
support/bashbug.sh.in
support/bashversion.c
support/config.guess [changed mode: 0755->0644]
support/config.sub [changed mode: 0755->0644]
support/shobj-conf
support/signames.c
test.c
test.h
tests/alias.right
tests/alias.tests
tests/alias6.sub [new file with mode: 0644]
tests/arith.right
tests/arith.tests
tests/array-at-star [changed mode: 0755->0644]
tests/array.right
tests/array.tests
tests/array15.sub
tests/array27.sub
tests/array29.sub [new file with mode: 0644]
tests/array30.sub [new file with mode: 0644]
tests/assoc.right
tests/assoc.tests
tests/assoc11.sub
tests/assoc12.sub [new file with mode: 0644]
tests/assoc13.sub [new file with mode: 0644]
tests/assoc14.sub [new file with mode: 0644]
tests/assoc15.sub [new file with mode: 0644]
tests/assoc16.sub [new file with mode: 0644]
tests/assoc17.sub [new file with mode: 0644]
tests/assoc18.sub [new file with mode: 0644]
tests/assoc9.sub
tests/builtins.right
tests/builtins.tests
tests/builtins5.sub
tests/case.right
tests/case.tests
tests/complete.right
tests/comsub-eof.right
tests/comsub-eof0.sub
tests/comsub-eof5.sub
tests/comsub-posix.right
tests/comsub-posix.tests
tests/comsub-posix1.sub
tests/comsub-posix5.sub [new file with mode: 0644]
tests/comsub-posix6.sub [new file with mode: 0644]
tests/comsub.right
tests/comsub.tests
tests/comsub5.sub [new file with mode: 0644]
tests/comsub6.sub [new file with mode: 0644]
tests/cond.right
tests/cond.tests
tests/cprint.right
tests/dollar-at-star [changed mode: 0755->0644]
tests/dollar-at-star10.sub [new file with mode: 0644]
tests/dollar-at-star11.sub [new file with mode: 0644]
tests/dollar.right
tests/dynvar.tests
tests/errors.right
tests/errors.tests
tests/errors7.sub
tests/errors9.sub [new file with mode: 0644]
tests/exec.right
tests/exec14.sub
tests/exec3.sub
tests/exp.right
tests/exp.tests
tests/exp13.sub [new file with mode: 0644]
tests/exp8.sub
tests/exportfunc.right
tests/exportfunc.tests
tests/extglob.right
tests/extglob.tests
tests/extglob2.sub
tests/extglob6.sub [new file with mode: 0644]
tests/extglob7.sub [new file with mode: 0644]
tests/func.tests
tests/getopts10.sub
tests/glob.right
tests/glob.tests
tests/glob10.sub [new file with mode: 0644]
tests/glob2.sub
tests/glob5.sub
tests/glob6.sub
tests/heredoc.right
tests/heredoc.tests
tests/heredoc6.sub [new file with mode: 0644]
tests/heredoc7.sub [new file with mode: 0644]
tests/herestr.tests
tests/history.right
tests/history.tests
tests/history6.sub [new file with mode: 0644]
tests/intl.tests
tests/intl2.sub
tests/jobs.right
tests/jobs4.sub
tests/jobs5.sub
tests/jobs7.sub
tests/lastpipe.right
tests/lastpipe.tests
tests/lastpipe3.sub [new file with mode: 0644]
tests/mapfile.right
tests/mapfile.tests
tests/misc/run-r2.sh [changed mode: 0755->0644]
tests/misc/sigint-1.sh [changed mode: 0755->0644]
tests/misc/sigint-2.sh [changed mode: 0755->0644]
tests/misc/sigint-3.sh [changed mode: 0755->0644]
tests/misc/sigint-4.sh [changed mode: 0755->0644]
tests/nameref.right
tests/nameref15.sub
tests/nameref18.sub
tests/nameref19.sub
tests/nameref22.sub [new file with mode: 0644]
tests/nameref23.sub [new file with mode: 0644]
tests/new-exp.right
tests/new-exp.tests
tests/new-exp10.sub
tests/new-exp14.sub
tests/new-exp16.sub [new file with mode: 0644]
tests/nquote.right
tests/nquote.tests
tests/nquote4.sub [new file with mode: 0644]
tests/nquote5.sub [new file with mode: 0644]
tests/posix2.right
tests/posix2.tests
tests/posixexp.right
tests/posixexp7.sub
tests/precedence.tests [changed mode: 0755->0644]
tests/printf1.sub
tests/printf2.sub
tests/quotearray.right [new file with mode: 0644]
tests/quotearray.tests [new file with mode: 0644]
tests/quotearray1.sub [new file with mode: 0644]
tests/quotearray2.sub [new file with mode: 0644]
tests/quotearray3.sub [new file with mode: 0644]
tests/quotearray4.sub [new file with mode: 0644]
tests/quotearray5.sub [new file with mode: 0644]
tests/read.right
tests/read.tests
tests/read1.sub
tests/read2.sub
tests/read3.sub
tests/read7.sub [new file with mode: 0644]
tests/read8.sub [new file with mode: 0644]
tests/rsh.right
tests/run-all
tests/run-execscript
tests/run-intl
tests/run-minimal
tests/run-quotearray [new file with mode: 0644]
tests/shopt.right
tests/test.right
tests/test.tests
tests/tilde.tests
tests/tilde2.right
tests/tilde2.tests
tests/tilde3.sub [new file with mode: 0644]
tests/type.right
tests/unicode1.sub
tests/varenv.right
tests/varenv.tests
tests/varenv13.sub
tests/varenv22.sub [new file with mode: 0644]
tests/vredir.right
tests/vredir.tests
tests/vredir8.sub [new file with mode: 0644]
trap.c
trap.h
unwind_prot.c
variables.c
variables.h
version.c
y.tab.c
y.tab.h

diff --git a/CHANGES b/CHANGES
index 7a47c7c57a8899e55d57204791d247a2a041f5bc..e4e0124f28021078caafe7a183cd6de13b19c71f 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,549 @@
+This document details the changes between this version, bash-5.2-release, and
+the previous version, bash-5.2-rc4.
+
+1. Changes to Bash
+
+2. Changes to Readline
+
+a. When replacing a history entry, make sure the existing entry has a non-NULL
+   timestamp before copying it; it may have been added by the application, not
+   the history library.
+
+3. New Features in Bash
+
+4. New Features in Readline
+
+------------------------------------------------------------------------------
+This document details the changes between this version, bash-5.2-rc4, and
+the previous version, bash-5.2-rc3.
+
+1. Changes to Bash
+
+a. Changed how the compatibility mode enabling of extglob works in conjunction
+   with parsing conditional commands.
+
+b. Fixed a problem with aliases containing command substitutions.
+
+2. Changes to Readline
+
+3. New Features in Bash
+
+4. New Features in Readline
+
+------------------------------------------------------------------------------
+This document details the changes between this version, bash-5.2-rc3, and
+the previous version, bash-5.2-rc2.
+
+1. Changes to Bash
+
+a. Added a compatibility mode feature that causes the parser to parse command
+   substitutions as if extglob were enabled. If it is enabled before execution,
+   parse at execution will succeed. If not, the subsequent execution parse will
+   fail.
+
+b. Fixed an issue with handling a `return' executed in a trap action if the
+   trap is executed while running in a shell function.
+
+2. Changes to Readline
+
+3. New Features in Bash
+
+4. New Features in Readline
+
+a. Readline now checks for changes to locale settings (LC_ALL/LC_CTYPE/LANG)
+   each time it is called, and modifies the appropriate locale-specific display
+   and key binding variables when the locale changes.
+
+------------------------------------------------------------------------------
+This document details the changes between this version, bash-5.2-rc2, and
+the previous version, bash-5.2-rc1.
+
+1. Changes to Bash
+
+a. Fixed a bug that could disable history saving after a compound array
+   assignment in an interactive shell.
+
+b. Fixed a bug that could cause incorrect error messages when running a DEBUG
+   trap during a conditional or arithmetic command.
+
+c. Fixed a bug that caused test to print an error message when given ! ! arg
+   as arguments.
+
+d. Fixed a bug that resulted in incorrect error messages when completing a
+   backquoted command substitution.
+
+e. Changed command substitution parsing to reproduce the original text more
+   closely when reconsituting the command string from the parsed command.
+
+f. Fixed a bug that could cause an EXIT trap to use the wrong variable context
+   when the errexit option is set.
+
+g. Fixed a bug that could cause the parser to incorrectly delimit a token when
+   an alias expansion ended with a multibyte character.
+
+2. Changes to Readline
+
+3. New Features in Bash
+
+a. Since there is no `declare -' equivalent of `local -', make sure to use
+   `local -' in the output of `local -p'.
+
+b. Null anchored matches in pattern substitution now process `&' in the
+   replacement string, like sed.
+
+4. New Features in Readline
+
+------------------------------------------------------------------------------
+This document details the changes between this version, bash-5.2-rc1, and
+the previous version, bash-5.2-beta.
+
+1. Changes to Bash
+
+a. Changes to `wait -p' and how it sets the variable name in the presence of
+   valid and invalid PID arguments.
+
+b. Fixed a bug that caused compgen to dump core if the completion engine was
+   not initialized.
+
+c. Fixed a memory leak in the variable name programmable completion code.
+
+d. Here-documents and here-strings use tempfiles if the shell compatibility
+   level is 50 or lower.
+
+e. Non-interactive shells exit on a syntax error encountered while parsing a
+   command substitution.
+
+f. Fixed a bug with inherited parser state while parsing a command substitution.
+
+g. Fixed a bug that caused the shell not to check for terminating signals
+   after executing the command_string supplied with `-c' and before executing
+   the exit trap.
+
+h. Changes to avoid a make race condition while generating builtins.c.
+
+i. Make it explicit that BASH_REMATCH is always a global variable, and that
+   local copies are (currently) ignored.
+
+j. Fixed a bug that caused an ambiguous redirection (>&word) to be printed
+   incorrectly (>&word) if no file descriptor was supplied.
+
+2. Changes to Readline
+
+a. Fixed a bug that caused rl_eof_found to be set prematurely while reading a
+   multi-character key sequence in callback mode.
+
+3. New Features in Bash
+
+a. In posix mode, the `printf' builtin checks for the `L' length modifier and
+   uses long double for floating point conversion specifiers if it's present,
+   double otherwise.
+
+b. The `globbing' completion code now takes the `globstar' option into account.
+
+c. `suspend -f' now forces the shell to suspend even if job control is not
+   currently enabled.
+
+4. New Features in Readline
+
+------------------------------------------------------------------------------
+This document details the changes between this version, bash-5.2-beta, and
+the previous version, bash-5.2-alpha.
+
+1. Changes to Bash
+
+a. Fixed a problem with command-oriented history and multi-line commands that
+   caused embedded blank lines to be run together.
+
+b. Changed the way `&' is quoted when performing pattern substitution and
+   `patsub_replacement' is enabled.
+
+c. Fixed some integer overflows when expanding strings or reading the output
+   of command substitution larger than 2GB.
+
+d. `wait -p' without the `-n' option now does something useful if there are no
+   jobs.
+
+e. Fixed an issue with read timeouts in posix mode.
+
+f. Changed here-document processing to process $'...' and $"..." only when they
+   appear in the WORD portion of ${PARAM OP WORD} in the here-document body
+   and the body is being expanded.
+
+g. Changed alias expansion in command substitution to be posix-conformant
+   (performed while initially parsing the command substitution) when in posix
+   mode.
+
+h. Bash optimizes away more forks in subshells.
+
+i. Here-document construction now performs quote removal on the here-document
+   delimiter only if it's marked as quoted, which prevents quote characters in
+   command substitutions from being removed.
+
+j. Prompt string expansion now gives invisible characters in the expansion of
+   the \w, \W, and \s escape sequences a visible representation to avoid
+   problems with redisplay.
+
+k. Fixed a problem with SIGINT during the execution of a command bound with
+   `bind -x' affecting the saved terminal settings.
+
+l. Fixed an inconsistency with how $@ expands in a construct like ${@:+set}
+   or ${array[@]:+set} in the presence of null positional parameters or
+   array elements.
+
+2. Changes to Readline
+
+a. Prevent some display problems when running a command as the result of a
+   trap or one bound using `bind -x' and the command generates output.
+
+b. Fixed an issue with multi-line prompt strings that have one or more
+   invisible characters at the end of a physical line.
+
+c. Fixed an issue that caused a history line's undo list to be cleared when
+   it should not have been.
+
+3. New Features in Bash
+
+a. There is a new bindable readline command name: `vi-edit-and-execute-command'.
+
+4. New Features in Readline
+
+a. Two new bindable string variables: active-region-start-color and
+   active-region-end-color. The first sets the color used to display the
+   active region; the second turns it off. If set, these are used in place
+   of terminal standout mode.
+
+b. New readline state (RL_STATE_EOF) and application-visible variable
+   (rl_eof_found) to allow applications to detect when readline reads EOF
+   before calling the deprep-terminal hook.
+
+c. There is a new configuration option: --with-shared-termcap-library, which
+   forces linking the shared readline library with the shared termcap (or
+   curses/ncurses/termlib) library so applications don't have to do it.
+
+------------------------------------------------------------------------------
+This document details the changes between this version, bash-5.2-alpha, and
+the previous version, bash-5.1-release.
+
+1. Changes to Bash
+
+a. Fixed a bug that assigned a value to the variable name supplied as an
+   argument to `wait -p' when there were no jobs.
+
+b. Fixed a bug that resulted in performing incorrect word expansion on the
+   key/value pairs in a compound array assignment.
+
+c. Fixed a bug that could put the child forked to run a command substitution
+   into the wrong process group.
+
+d. Fixed a problem that could cause the lastpipe option to work incorrectly if
+   file descriptor 0 was closed.
+
+e. Bash tries to suppress traps if a forked child receives a trapped signal
+   before it has a chance to reset its signal handlers.
+
+f. Fixed several memory leaks in compound array assignments.
+
+g. Fixed a problem with performing an assignment with `+=' to an array element
+   that was the value of a nameref.
+
+h. Fixed a bug that could cause a nameref containing an array reference using
+   `@' or `*' not to expand to multiple words.
+
+i. Fixed a bug where extended glob functions could match `.' or `..' when it
+   wasn't explicitly specified, even if dotglob was set.
+
+j. Fixed a bug that caused non-interactive posix-mode shells not to exit on a
+   variable assignment error while assigning into the temporary environment.
+
+k. Fixed a bug that caused parsing errors if an alias contained a compound
+   array assignment.
+
+l. Fixed a couple of instances where bash checked syntax too aggressively when
+   trying to determine how to add a partial command to command-oriented
+   history.
+
+m. Fixed a parser problem that caused it not to allow reserved words to follow
+   the `((' and `[[' commands.
+
+n. Fixed a bad offset calculation when using negative offsets to `history -d'.
+
+o. Fixed an off-by-one error that caused a read past the end of a buffer when
+   reading a multibyte character from the output of a command substitution.
+
+p. Fixed a problem with a failed `exec' command not setting $? to the right
+   value for an exit trap.
+
+q. Fixed a problem that caused bash not to unlink FIFOs created as part of
+   expanding redirections for an external command.
+
+r. Fixed a bug that could cause aliases not to be expanded in case statements.
+
+s. Fixed a bug that could cause word completion to attempt programmable
+   completion for the target of a redirection, instead of filename completion.
+
+t. Fixed a bug that could result in errors after rebinding a key sequence with
+   `bind -x' multiple times.
+
+u. Fixed a problem that could result in not quoting the result when performing
+   command name completion with a glob pattern in the command name.
+
+v. `mapfile' now uses fully-buffered reads in more cases, which should improve
+   bulk read performance.
+
+w. Fixed a bug that caused `wait -n' to not reset its internal state when
+   interrupted by a signal, resulting in subsequent calls failing.
+
+x. Fixed a bug with parsing numeric arguments to readline key sequences
+   installed with `bind -x'.
+
+y. Bash suppresses forking in several additional cases, including most uses
+   of $(<file).
+
+z. If there are multiple `!' tokens in a [[ command, toggle the invert state
+   instead of setting it unconditionally.
+
+aa. Fixed a bug where running `fc' on an empty history list would cause the
+    shell to crash.
+
+bb. Word completion now checks whether or not a quote character closes a
+    quoted string begun on a previous line, so readline doesn't interpret the
+    quote as starting a new quoted string.
+
+cc. Fixed a typo that translated \UNNNNNNNN characters that were not valid in
+    the current locale encoding as \uNNNNNNNN.
+
+dd. Fixed an issue that could cause bash to print timing statistics for the
+    wrong command when `set -e' causes a command to fail.
+
+ee. Bash now runs the exit trap in function context if a failed command in
+    the function causes the shell to exit.
+
+ff. Some fixes to how subshells modify $SHLVL.
+
+gg. Fixed a bug that caused `mapfile -t' not to remove the delimiter when the
+    delimiter is > 128 in the current encoding.
+
+hh. Fixed a problem that could cause the shell to attempt to free unallocated
+    memory if an expansion error occurred.
+
+ii. Fixed a bug in the bash malloc implementation of malloc_usable_size. Bash
+    did not use it, but it could cause problems with library functions that
+    did.
+
+jj. If the `exec' builtin fails, and the shell does not exit, it restores
+    trapped signals to their trapped state.
+
+kk. Fixed a bug that could cause variable assignment arguments to `declare' to
+    expand variables using attributes that the call to declare was turning off.
+
+ll. Fixed a bug with LINENO and arithmetic for commands.
+
+mm. Fixed a posix-mode bug that caused tildes not to be expanded after an
+    unquoted colon on the right side of an assignment statement.
+
+nn. Fixed a problem with `caller' and line numbers when executing an ERR trap.
+
+oo. Fixed a problem that could make the value returned by ${a:=b} not be the
+    final value assigned to a (e.g., if `a' has an attribute that modifies
+    the value on assignment).
+
+pp. Fixed a problem with saving multi-line here-documents to the history list
+    where the here-document delimiter does not appear on the first line.
+
+qq. Fixed a bug with using += to assign to dynamic variables like RANDOM.
+
+rr. Fixed a bug that caused `set -n' to modify $? if set after execution had
+    started.
+
+ss. Builtins like printf/read/wait now behave more consistently when assigning
+    arbitrary keys to associative arrays (like `]'. when appropriately quoted).
+
+tt. Fixed a problem with here-document collection printing the wrong prompt
+    when parsing a compound list in an interactive shell.
+
+uu. Fixed a problem with quoting shell expansion characters (like `$') when
+    they appear in a tab-completed word along with characters that do need
+    quoting (e.g.. $HOME/VirtualBox VMs).
+
+2. Changes to Readline
+
+a. Fixed a problem with cleaning up active marks when using callback mode.
+
+b. Fixed a problem with arithmetic comparison operators checking the version.
+
+c. Fixed a problem that could cause readline not to build on systems without
+   POSIX signal functions.
+
+d. Fixed a bug that could cause readline to crash if the application removed
+   the callback line handler before readline read all typeahead.
+
+e. Added additional checks for read errors in the middle of readline commands.
+
+f. Fixed a redisplay problem that occurred when switching from the digit-
+   argument prompt `(arg: N)' back to the regular prompt and the regular
+   prompt contained invisible characters.
+
+g. Fixed a problem with restoring the prompt when aborting an incremental
+   search.
+
+h. Fix a problem with characters > 128 not being displayed correctly in certain
+   single-byte encodings.
+
+i. Fixed a problem with unix-filename-rubout that caused it to delete too much
+   when applied to a pathname consisting only of one or more slashes.
+
+j. Fixed a display problem that caused the prompt to be wrapped incorrectly if
+   the screen changed dimensions during a call to readline() and the prompt
+   became longer than the screen width.
+
+k. Fixed a problem that caused the \r output by turning off bracketed paste
+   to overwrite the line if terminal echo was disabled.
+
+l. Fixed a bug that could cause colored-completion-prefix to not display if
+   completion-prefix-display-length was set.
+
+m. Fixed a problem with line wrapping prompts when a group of invisible
+   characters runs to the right edge of the screen and the prompt extends
+   longer then the screen width.
+
+n. Fixed a couple problems that could cause rl_end to be set incorrectly by
+   transpose-words.
+
+3. New Features in Bash
+
+a. The bash malloc returns memory that is aligned on 16-byte boundaries.
+
+b. There is a new internal timer framework used for read builtin timeouts.
+
+c. Rewrote the command substitution parsing code to call the parser recursively
+   and rebuild the command string from the parsed command. This allows better
+   syntax checking and catches errors much earlier. Along with this, if
+   command substitution parsing completes with here-documents remaining to be
+   read, the shell prints a warning message and reads the here-document bodies
+   from the current input stream.
+
+d. The `ulimit' builtin now treats an operand remaining after all of the options
+   and arguments are parsed as an argument to the last command specified by
+   an option. This is for POSIX compatibility.
+
+e. Here-document parsing now handles $'...' and $"..." quoting when reading the
+   here-document body.
+
+f. The `shell-expand-line' and `history-and-alias-expand-line' bindable readline
+   commands now understand $'...' and $"..." quoting.
+
+g. There is a new `spell-correct-word' bindable readline command to perform
+   spelling correction on the current word.
+
+h. The `unset' builtin now attempts to treat arguments as array subscripts
+   without parsing or expanding the subscript, even when `assoc_expand_once'
+   is not set.
+
+i. There is a default value for $BASH_LOADABLES_PATH in config-top.h.
+
+j. Associative array assignment and certain instances of referencing (e.g.,
+   `test -v') now allow `@' and `*' to be used as keys.
+
+k. Bash attempts to expand indexed and associative array subscripts only
+   once when executing shell constructs and word expansions.
+
+l. The `unset' builtin allows a subscript of `@' or `*' to unset a key with
+   that value for associative arrays instead of unsetting the entire array
+   (which you can still do with `unset arrayname'). For indexed arrays, it
+   removes all elements of the array without unsetting it (like `A=()').
+
+m. Additional builtins (printf/test/read/wait) do a better job of not
+   parsing array subscripts if array_expand_once is set.
+
+n. New READLINE_ARGUMENT variable set to numeric argument for readline commands
+   defined using `bind -x'.
+
+o. The new `varredir_close' shell option causes bash to automatically close
+   file descriptors opened with {var}<fn and other styles of varassign
+   redirection unless they're arguments to the `exec' builtin.
+
+p. The `$0' special parameter is now set to the name of the script when running
+   any (non-interactive) startup files such as $BASH_ENV.
+
+q. The `enable' builtin tries to load a loadable builtin using the default
+   search path if `enable name' (without any options) attempts to enable a
+   non-existent builtin.
+
+r. The `printf' builtin has a new format specifier: %Q. This acts like %q but
+   applies any specified precision to the original unquoted argument, then
+   quotes and outputs the result.
+
+s. The new `noexpand_translations' option controls whether or not the translated
+   output of $"..." is single-quoted.
+
+t. There is a new parameter transformation operator: @k. This is like @K, but
+   expands the result to separate words after word splitting.
+
+u. There is an alternate array implementation, selectable at `configure' time,
+   that optimizes access speed over memory use (use the new configure
+    --enable-alt-array-implementation option).
+
+v. If an [N]<&WORD- or [N]>&WORD- redirection has WORD expand to the empty
+   string, treat the redirection as [N]<&- or [N]>&- and close file descriptor
+   N (default 0).
+
+w. Invalid parameter transformation operators are now invalid word expansions,
+   and so cause fatal errors in non-interactive shells.
+
+x. New shell option: patsub_replacement. When enabled, a `&' in the replacement
+   string of the pattern substitution expansion is replaced by the portion of
+   the string that matched the pattern. Backslash will escape the `&' and
+   insert a literal `&'.
+
+y. `command -p' no longer looks in the hash table for the specified command.
+
+z. The new `--enable-translatable-strings' option to `configure' allows $"..."
+   support to be compiled in or out.
+
+aa. The new `globskipdots' shell option forces pathname expansion never to
+    return `.' or `..' unless explicitly matched. It is enabled by default.
+
+bb. Array references using `@' and `*' that are the value of nameref variables
+    (declare -n ref='v[@]' ; echo $ref) no longer cause the shell to exit if
+    set -u is enabled and the array (v) is unset.
+
+4. New Features in Readline
+
+a. There is now an HS_HISTORY_VERSION containing the version number of the
+   history library for applications to use.
+
+b. History expansion better understands multiple history expansions that may
+   contain strings that would ordinarily inhibit history expansion (e.g.,
+   `abc!$!$').
+
+c. There is a new framework for readline timeouts, including new public
+   functions to set timeouts and query how much time is remaining before a
+   timeout hits, and a hook function that can trigger when readline times
+   out. There is a new state value to indicate a timeout.
+
+d. Automatically bind termcap key sequences for page-up and page-down to
+   history-search-backward and history-search-forward, respectively.
+
+e. There is a new `fetch-history' bindable command that retrieves the history
+   entry corresponding to its numeric argument. Negative arguments count back
+   from the end of the history.
+
+f. `vi-undo' is now a bindable command.
+
+g. There is a new option: `enable-active-region'. This separates control of
+   the active region and bracketed-paste. It has the same default value as
+   bracketed-paste, and enabling bracketed paste enables the active region.
+   Users can now turn off the active region while leaving bracketed paste
+   enabled.
+
+h. rl_completer_word_break_characters is now `const char *' like
+   rl_basic_word_break_characters.
+
+i. Readline looks in $LS_COLORS for a custom filename extension
+   (*.readline-colored-completion-prefix) and uses that as the default color
+   for the common prefix displayed when `colored-completion-prefix' is set.
+
+------------------------------------------------------------------------------
 This document details the changes between this version, bash-5.1-rc3, and
 the previous version, bash-5.1-rc2.
 
@@ -4024,7 +4570,7 @@ l.  There is a new configuration option (in config-top.h) that forces bash to
 m.  A new variable $BASHOPTS to export shell options settable using `shopt' to
     child processes.
 
-n.  There is a new confgure option that forces the extglob option to be
+n.  There is a new configure option that forces the extglob option to be
     enabled by default.
 
 o.  New variable $BASH_XTRACEFD; when set to an integer bash will write xtrace
@@ -4065,7 +4611,7 @@ d.  New bindable function: skip-csi-sequence.  Can be used as a default to
     to bind all keys.
 
 e.  New application-settable function: rl_filename_rewrite_hook.  Can be used
-    to rewite or modify filenames read from the file system before they are
+    to rewrite or modify filenames read from the file system before they are
     compared to the word to be completed.
 
 f.  New bindable variable: skip-completed-text, active when completing in the
@@ -4147,7 +4693,7 @@ and the previous version, bash-4.0-beta2.
 1.  Changes to Bash
 
 a.  Fixed a bug that caused parsing errors when a $()-style command
-    substitution was follwed immediately by a quoted newline.
+    substitution was followed immediately by a quoted newline.
 
 b.  Fixed a bug that caused extended shell globbing patterns beginning with
     `*(' to not work when used with pattern substitution word expansions.
@@ -9083,7 +9629,7 @@ gg. `alias' and `unalias' now print error messages when passed an argument
     not interactive, as POSIX.2 specifies.
 
 hh. `alias' and `alias -p' now return a status of 0 when no aliases are
-    defined, as POSIX.2 specifes.
+    defined, as POSIX.2 specifies.
 
 ii. `cd -' now prints the pathname of the new working directory if the shell
     is interactive.
diff --git a/COMPAT b/COMPAT
index 5cfb83600c51a93ce58ec5ef4974028645427c73..9fda7fb8fc06f0ab18e3c39fcdd1a0907ec6c6d9 100644 (file)
--- a/COMPAT
+++ b/COMPAT
@@ -2,11 +2,11 @@ Compatibility with previous versions
 ====================================
 
 This document details the incompatibilities between this version of bash,
-bash-5.1, and the previous widely-available versions, bash-3.2 (which is
+bash-5.2, and the previous widely-available versions, bash-3.2 (which is
 still the `standard' version for Mac OS X), 4.2/4.3 (which are still
-standard on a few Linux distributions), and bash-4.4/bash-5.0, the current
-widely-available versions.  These were discovered by users of bash-2.x
-through 5.x, so this list is not comprehensive.  Some of these
+standard on a few Linux distributions), and bash-4.4/bash-5.0/bash-5.1,
+the current widely-available versions.  These were discovered by users of
+bash-2.x through 5.x, so this list is not comprehensive.  Some of these
 incompatibilities occur between the current version and versions 2.0 and
 above. 
 
@@ -419,6 +419,14 @@ above.
     options that posix mode modifies to the state they had before enabling
     posix mode. Previous versions restored these options to default values.
 
+66. Bash-5.2 attempts to prevent double-expansion of array subscripts under
+    certain circumstances, especially arithmetic evaluation, by acting as if
+    the `assoc_expand_once' shell option were set.
+
+67. The `unset' builtin in bash-5.2 treats array subscripts `@' and `*'
+    differently than previous versions, and differently depending on whether
+    the array is indexed or associative.
+
 
 Shell Compatibility Level
 =========================
@@ -542,7 +550,43 @@ compat50 (set using BASH_COMPAT)
          printed an informational message to that effect even when writing
          output in a format that can be reused as input (-l). Bash-5.1
          suppresses that message if -l is supplied
-
+       - Bash-5.1 and later use pipes for here-documents and here-strings if
+         they are smaller than the pipe capacity. If the shell compatibility
+         level is set to 50 or lower, it reverts to using temporary files.
+
+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
+       - indexed and associative array subscripts used as arguments to the
+         operators in the [[ conditional command (e.g., `[[ -v') can be
+         expanded more than once. Bash-5.2 behaves as if the
+         `assoc_expand_once' option were enabled.
+       - 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 a key named `@';
+       - the ${param[:]=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, as POSIX specifies;
+       - Parsing command substitutions will act as if extended glob 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.
 
 -------------------------------------------------------------------------------
 
index 27f62c0260202a37836372757fe86bd5f8109472..da6d4aa1c36207626e9c7dc7cba546dcb196e3ae 100644 (file)
 
-                                9/15/2016
+                                12/6/2020
                                 ---------
-[bash-4.4 released]
 
-                                  9/17
-                                  ----
-builtins/common.c
-       - display_signal_list: if 0 is supplied as an argument to kill -l,
-         display a signal-out-of-range error.  Fixes bug reported by
-         Martijn Dekker <martijn@inlv.org>
-
-                                  9/18
-                                  ----
-print_cmd.c
-       - print_heredoc_bodies: take a list of redirections, all here documents,
-         and print the here-document bodies including the ending delimiter,
-         followed by a newline
-       - print_redirection_list: print the heredoc headers the first time
-         through the list of redirections so we print them in the same left-
-         to-right order they're supplied; print the bodies and delimiters with
-         print_heredoc_bodies after we print all the redirections if we're
-         not printing a list of commands (printing_connection == 0).  Fix for
-         problem reported by Isabella Parakiss <izaberina@gmail.com>
-       - print_deferred_heredocs: don't print heredoc headers, since they're
-         now printed in print_redirection_list
-       - print_deferred_heredocs: use print_heredoc_bodies
-
-                                  9/20
-                                  ----
-builtins/mapfile.def
-       - readarray: update usage synopsis to include -d delim.  Report and
-         fix from jhankins@homewood.k12.al.us
-
-test.c
-       - test_binop: if op[0] == '-', make sure op[1] != 0 before checking
-         op[2] or op[3].  Fixes out-of-bounds read reported by Franco
-         Costantini <franco.costantini.20@gmail.com>
-
-parse.y
-       - cond_term: if yylval.word->word[0] == '-' make sure word[1] != 0
-         before checking word[2] and calling test_unop.  Fixes out-of-bounds
-         read reported by Franco Costantini <franco.costantini.20@gmail.com>
-       - make sure to check all instances of the return value of the
-         simple_command production before trying to hook redirections onto it,
-         since it can potentially return NULL.
-         Reported by Franco Costantini <franco.costantini.20@gmail.com>
-
-                                  9/21
-                                  ----
-parse.y
-       - token_is_assignment: make sure to check that the return value from
-         assignment() finds the `=' we just added at index I to avoid false
-         positives from g=g=g=g=g=g=().  Reported by Franco Costantini
-         <franco.costantini.20@gmail.com>
-
-                                  9/22
-                                  ----
-parse.y
-       - token_is_assignment: if we're not using the bash malloc (which has
-         guard bytes after the requested allocation size), use a new
-         buffer so we can make sure it's big enough to hold the current
-         token and at least two additional characters.  Reported by
-         Franco Costantini <franco.costantini.20@gmail.com>
-
-                                  9/23
-                                  ----
-execute_cmd.c
-       - execute_in_subshell: call without_job_control for both job control
-         and non-job-control builds to avoid waiting for last_made_pid
-         inherited from parent shell.  Related to fix from 8/4 to
-         initialize_subshell.  Fixes bug reported by Martijn Dekker
-         <martijn@inlv.org>
-
-builtins/declare.def
-       - local_builtin: allow `local --help' to work even when not executing
-         a function. Suggestion from Norm Abramovitz <norm@starkandwayne.com>
-
-                                  9/25
-                                  ----
-builtins/printf.def
-       - bexpand: if passed a null or empty string, return a newly-allocated
-         empty string (so the return value can always be freed) instead of
-         NULL.
-       - printstr: if passed a null string, treat it as if it were an empty
-         string so any precision or fieldwidth arguments are handled
-         correctly.  Report from isabella parakiss <izaberina@gmail.com>
-
-subst.c
-       - skip_matched_pair: make the flags argument of 1 affect whether or
-         not backslash can quote characters in the string, so it affects
-         all quoting mechanisms
-
-arrayfunc.c
-       - unbind_array_element: now takes a third (flags) argument; flags&1
-         means to not expand an associative array index. This is only called
-         from a shell builtin context, which means the argument should have
-         already undergone word expansion, so it should be ok.  Will still
-         be a problem for uses like "unset -v 'var[$ind]'", quoted to avoid
-         globbing
-       - valid_array_reference: pass second flags argument to skipsubscript;
-         still set to 0 by all callers
-
-arrayfunc.h
-       - unbind_array_element: updated prototype
-
-builtins/set.def
-       - unset_builtin: add third argument of 1 to unbind_array_element calls
-         [TEMPORARILY DISABLED]
-       - unset_builtin: call valid_array_reference with second arg of 1 to
-         handle unmatched pairs of quotes and [/]
-
-array.c
-       - array_reference: optimize access locality as well as sequential
-         access by adding ability to start from last-accessed element and move
-         backwards or forwards depending on the desired index.  Inspired by
-         report from Tom McCurdy <tom.j.mccurdy@gmail.com> and followup from
-         Christian Franke <Christian.Franke@t-online.de>
-
-variables.c
-       - all_array_variables: include associative arrays, not just indexed
-         arrays.  Reported by Grisha Levit <grishalevit@gmail.com>
-
-execute_cmd.c
-       - execute_disk_command: if we're optimizing out the fork (CMD_NO_FORK),
-         decrement the shell level so we don't end up incrementing it twice.
-         We should decrement the shell level for an implicit exec like an
-         explicit one.  Reported by Stephane Chazelas
-         <stephane.chazelas@gmail.com>
-
-builtins/exec.def
-       - exec_builtin: don't bother to decrement the shell level if we are
-         already in a `(command)' subshell.  Reported by Stephane Chazelas
-         <stephane.chazelas@gmail.com>
-
-lib/readline/macro.c
-       - macro_level: count of macro nesting level, maintained by
-         _rl_push_executing_macro and _rl_pop_executing macro
-       - _rl_with_macro_input: if current nesting level exceeds
-         MAX_MACRO_LEVEL, abort the current command line with _rl_abort_internal
-         and return to the top level.  Reported by Christian Klomp
-         <christianklomp@gmail.com>
-
-lib/readine/history.c
-       - add_history: if allocating the history list for the first time,
-         make sure the max history list size isn't so large that it will
-         cause allocation errors.  Cap it at MAX_HISTORY_INITIAL_SIZE
-         (8192).  Reported by Sean Zha <freeman_cha@hotmail.com>
-
-jobs.c
-       - wait_for: if a foreground job with job control enabled is killed by a
-         SIGINT and sourcelevel != 0, act as if we received the SIGINT so the
-         file sourcing can be terminated.  Reported by PePa
-         <peterkelly@passchier.net>
-
-                                  9/26
-                                  ----
-subst.c
-       - read_comsub: only warn once for null bytes in command substitution
-         output, instead of once for every null byte
-
-arrayfunc.c
-       - array_variable_part: now takes a `flags' argument; changed all callers
-         to initially pass 0
-       - array_variable_name: now takes a `flags' argument; changed all callers
-         to initially pass 0
-       - array_variable_name: pass `flags' argument to skipsubscript instead
-         of just passing 0
-
-arrayfunc.h
-       - array_variable_{name,part}: added new argument to prototypes
-
-                                  9/29
-                                  ----
-bashline.c
-       - bash_directory_completion_hook: don't bother to try and expand a
-         ${ or $( that isn't complete; expand_prompt_string will complain.
-         Fixes reports from John Passaro <john.a.passaro@gmail.com> and
-         Valentin Bajrami <valentin.bajrami@gmail.com>
-
-lib/readline/history.c
-       - _hs_append_history_line: use a strategy that attempts to avoid
-         realloc copying memory to a newly-allocated block if the history
-         line we're appending to gets `too long' (currently 256 bytes).
-         We reallocate in powers of 2 starting at 512, and rely on realloc
-         not allocating a new block and copying into it if the size is the
-         same as the last call to realloc.  Addresses issue raised by
-         Hubert Schmid <h.schmid@gmx.de>
-
-trap.h
-       - check_signals: new extern declaration
-       - trapped_signal_received: new extern declaration
-
-builtins/read.def
-       - read_builtin: if one of the zread* functions returns < 0 (which
-         usually only happens in Posix mode), make sure we call check_signals()
-         before eventually calling run_pending_traps() because zread() isn't
-         going to call it
-       - include trap.h for correct extern functions and variable declarations
-
-lib/sh/zread.c
-       - zread: if executing a builtin, call check_signals_and_traps() for
-         backwards compatibility.  If not, call check_signals() only, because
-         we don't want to run traps during, for instance, reading command
-         substitution output.  Fixes race condition bug reported by Luiz Angelo
-         Daros de Luca <luizluca@gmail.com>
-
-                                  9/30
-                                  ----
-subst.c
-       - command_substitute: reset parse_and_execute_level to 0 in the child
-         process, since it's independent of the other parse_and_execute
-         calls.  Adds command substitution inside other parse_and_execute
-         calls optimizations to suppress forks, as suggested by
-         Martijn Dekker <martijn@inlv.org>
-
-                                  10/3
-                                  ----
-configure.ac
-       - SHOBJ_STATUS: make sure it defaults to unsupported and is substituted
-         if the shobj-conf script isn't run.  Fixes `make install' bug with
-         a minimal config reported by Andrew Tomazos <andrewtomazos@gmail.com>
-
-                                  10/5
-                                  ----
-support/shobj-conf
-       - darwin: set compatibility_version for a shared build of the readline
-         library (the standalone readline distribution shares this file) to
-         $(SHLIB_MAJOR)$(SHLIB_MINOR).  Recommendation from Max Horn
-         <max@quendi.de>
-
-                                  10/6
-                                  ----
-array.h
-       - array_first_index: new convenience define
-
-array.c
-       - ADD_AFTER: new define, complement of ADD_BEFORE
-       - UNSET_LASTREF: now takes an array as an argument, prepping for move
-         of lastref pointer into the array struct
-       - array_insert: check whether we are adding at the beginning of the
-         array and take a fast path if so
-       - array_insert: use same strategy as array_reference to find the place
-         to insert, starting from the last-referenced element and moving
-         forward or back from there; use ADD_AFTER if moving backward
-       - array_insert: if replacing an existing element, just replace the
-         value with new->value instead of the entire element
-       - array_reference: short-circuit quickly if looking for an element
-         before the first assigned index
-       - array_reference: if we don't find the element, leave lastref pointing
-         to the closest element under the assumption we will be assigning or
-         looking for something close
-       - array_reference: take advantage of ordered indexes to short-circuit
-         when looking for element that is not set
-
-                                  10/7
-                                  ----
-array.c
-       - array_remove: short-circuit if asked to remove index after max
-         index or before first index
-
-                                  10/10
-                                  -----
-lib/malloc/malloc.c
-       - internal_realloc: if we are requesting reallocation to the same size
-         as the block's current size, short-circuit and return `mem' right
-         after doing bounds check
-       - internal_realloc: if we are reducing the size of an allocation, and
-         the new size fits in the next lower bin, just keep the same block
-         and adjust the size, so we can avoid some copies
-
-parse.y
-       - set_line_mbstate: keep track of the allocated size of
-         shell_input_line_property, only request reallocation if the size
-         increases, but don't let it get too big
-
-                                  10/11
-                                  -----
-jobs.c
-       - wait_for_background_pids: make sure we wait for pid in
-         last_procsub_child since it's not found in any job -- still needs
-         more work to wait for multiple process substitutions
-
-subst.c
-       - process_substitute: if make_child fails, make sure we call
-         restore_pipeline to undo the previous save_pipeline()
-
-                                  10/15
-                                  -----
-subst.c
-       - process_substitute,command_substitute: leave subshell_level (reflected
-         as $BASH_SUBSHELL) intact for any exit trap instead of decrementing
-         it.  Suggested by Martijn Dekker <martijn@inlv.org>
-
-builtins/evalstring.c
-       - optimize_subshell_command: new function, framework for optimizing
-         out forks for command that have already forked and are executing
-         in a subshell. Not used yet
-
-expr.c
-       - readtok: if we have a post-increment or post-decrement, and the
-         previous token is not a string, check whether the previous token is
-         a number that results from a pre-increment or pre-decrement, and
-         make that an error.  Report from Conrad Hoffmann <ch@bitfehler.net>
-
-                                  10/16
-                                  -----
-aclocal.m4
-       - BASH_JOB_CONTROL_MISSING: convert from AC_TRY_RUN to AC_TRY_COMPILE
-         with existing set of preprocessor defines, so it can work when
-         cross-compiling.  Suggested by Felix Janda <felix.janda@posteo.de>
-
-                                  10/19
-                                  -----
-variables.c
-       - get_bashpid: BASHPID is no longer readonly; assignments to it are
-         just ignored.
-
-doc/{bash.1,bashref.texi}
-       - BASHPID: note that assignments are ignored and unsetting BASHPID
-         causes it to lose its special properties
-
-                                  10/28
-                                  -----
-builtins/pushd.def
-       - popd_builtin: make sure to check the normalized stack offset
-         (i.e., negatives counting back from the end of the stack) is within
-         bounds before trying to free that stack entry.  Report from
-         Fernando Muñoz <fernando@null-life.com>
-
-lib/readline/histfile.c
-       - chown: protect calls with HAVE_CHOWN.  Fixes for MinGW{64,32} from
-         J. Peter Mugaas <jpmugaas@suddenlink.net>
-
-lib/readline/colors.c
-       - S_ISDIR: add define if missing
-       - S_ISUID, S_ISGID, S_ISLNK, S_ISSOCK: don't use unless defined.
-         Fixes for MinGW{64,32} from J. Peter Mugaas <jpmugaas@suddenlink.net>
-
-bashhist.c
-       - current_command_line_comment: set to the most recent line in a
-         possibly multi-line command that contains a shell comment; set in
-         maybe_add_history and bash_add_history to either the current
-         command number or -2
-       - maybe_add_history: set current_command_line_comment for first line
-         of command
-       - bash_add_history: chars_to_add set to "\n" if the current command line
-         is one greater than the previous line containing a comment
-         (current_command_line_comment).  Fixes complaint from back in
-         January, 2016 from Dave Rutherford <dave@evilpettingzoo.com>
-
-array.h
-       - lastref: move last-referenced pointer into each array struct, so all
-         arrays can have reference locality
-
-array.c
-       - array_create: set lastref element to 0
-       - array_copy: if copying the lastref in array a, set the new lastref
-         in the copy to the same element
-       - IS_LASTREF, LASTREF_START, LASTREF, INVALIDATE_LASTREF, SET_LASTREF,
-         UNSET_LASTREF: change to use new array `lastref' member
-
-pathexp.c
-       - quote_string_for_globbing: if quoting for a regexp, make sure to
-         skip and copy a leading `^' in a bracket expression, and skip and
-         copy a subsequent `]' (after an optional `^'), so that leading
-         bracket doesn't close the bracket expression.  Report from
-         Stephane Chazelas <stephane.chazelas@gmail.com>
-
-                                  10/29
-                                  -----
-subst.c
-       - extract_delimited_string: add calls to CHECK_STRING_OVERRUN for
-         $( inside $((, nested OPENERs, nested ALT_OPENERs, and backquotes
-       - skip_to_delim: add calls to CHECK_STRING_OVERRUN for $(, ${,
-         process substitution
-       - extract_dollar_brace_string: add calls to CHECK_STRING_OVERRUN for
-         $(
-       - extract_dollar_brace_string: use skipsubscript to skip over the
-         array subscript in ${var[sub]} (non-quoted case uses string_extract,
-         which already uses skipsubscript).  Tagged for bash-5.0
-
-                                  10/30
-                                  -----
-variables.c
-       - EPOCHSECONDS: new dynamic variable, time in seconds since Unix
-         epoch; assignments are ignored.  Can be used on systems where
-         strftime() doesn't support '%s'
-       - EPOCHREALTIME: new dynamic variable, time in seconds since Unix
-         epoch with microsecond granularity
-
-doc/{bash.1,bashref.texi}
-       - EPOCHSECONDS documentation
-       - EPOCHREALTIME documentation
-
-execute_cmd.c
-       - decpoint: moved to locale.c, renamed locale_decpoint; changed callers
-
-{bashintl,externs}.h
-       - locale_decpoint: extern declaration or #define if support for
-         localeconv() not there
-
-                                  10/31
-                                  -----
-lib/malloc/malloc.c
-       - posix_memalign: add new posix-mandated interface
-
-examples/loadables/rm.c
-       - rm: minimal loadable builtin, removes files and directories, only
-         handles -r and -f options.  Original from Tim Ruehsen
-         <tim.ruehsen@gmx.de>, heavily rewritten for inclusion as loadable
-
-examples/loadables/Makefile.in
-       - rm: add rules to build rm as one of the `other' targets
-
-examples/loadables/stat.c
-       - stat: new loadable builtin that takes a filename and loads the info
-         returned by stat(2) into an associative array specified by the -A
-         argument (default STAT)
-
-                                  11/1
-                                  ----
-variables.c
-       - BASH_ARGV0: new dynamic variable, returns $0 on reference and sets
-         $0 on assignment.  From a suggestion from  Rocky Bernstein <rocky@gnu.org>
-         a few years ago
-
-doc/{bash.1,bashref.texi}
-       - BASH_ARGV0: document
-
-                                  11/2
-                                  ----
-lib/glob/sm_loop.c
-       - parse_collsym: make sure to not return an out-of-bounds read if a
-         collating symbol is unterminated.  Fixes OOB read reported by
-         Jerzy Kramarz <op7ica@gmail.com>
-       - brackmatch: after incrementing p, before checking whether it's a
-         character range, check whether *p was NULL before the increment
-         and short-circuit the bracket expression if it is
-
-jobs.c
-       - discard_last_procsub_child: new function, safely discards
-         last_procsub_child and sets it to NULL
-
-subst.c
-       - process_substitute: call discard_last_procsub_child instead of
-         calling discard_pipeline directly.  Fixes bug reported by
-         Christian Weisgerber <naddy@mips.inka.de>
-
-                                  11/3
-                                  ----
-shell.h
-       - EX_DISKFALLBACK: new special return status available to builtins;
-         means to attempt to execute a disk command with the same name as
-         the builtin
-
-examples/loadables/rm.c
-       - if we see the -i option, return EX_DISKFALLBACK
-
-execute_cmd.c
-       - execute_simple_command: if executing a builtin returns EX_DISKFALLBACK,
-         try running execute_disk_command instead 
-
-bashline.c
-       - shell_expand_line: use expand_word to expand the readline line
-         buffer, which allows us to pass flags with the word. If a numeric
-         argument is supplied, do not perform quote removal (pass
-         Q_HERE_DOCUMENT since here-doc quoting does the right thing) and
-         do not perform command or process subsitution.  From a suggestion
-         by Dabrien 'Dabe' Murphy <dabe@dabe.com> based on an old bug-bash
-         discussion
-
-subst.c
-       - expand_word_internal: note that we have added a quoted IFS char to
-         istring by setting sentinel has_quoted_ifs.  Usually we only add
-         one if we are not going to be performing word splitting, but we
-         will not perform word splitting if there's no expansion, so we need
-         to take care of that case
-       - expand_word_internal: when performing final word split, if there are
-         no expansions but has_quoted_ifs is non-zero, call remove_quoted_ifs()
-         to remove any quoted ifs characters we added while processing
-       - remove_quoted_ifs: new function, removes CTLESC chars preceding
-         (single-byte) chars in IFS. Used when we are not performing word
-         splitting.  Fixes bug reported by Martijn Dekker <martijn@inlv.org>
-
-                                  11/4
-                                  ----
-lib/readline/macro.c
-       - _rl_peek_macro_key: return the next character from the current
-         keyboard macro; the next character from the `next' keyboard macro,
-         if there is one, if at the end of the current macro; or 0 to
-         indicate that we are at the end of a keyboard macro sequence
-
-lib/readline/rlprivate.h
-       - _rl_peek_macro_key: extern declaration
-
-lib/readline/readline.c
-       - _rl_dispatch_subseq: add test for ESC at the end of a keyboard macro,
-         which should cause the keyboard timeout for ESC to kick in.  The
-         previous test didn't run the timeout code if executing from a macro,
-         even if we had read the last character of the macro.  Fixes bug
-         reported by Clark Wang <clarkw@vmware.com>
-
-lib/glob/sm_loop.c
-       - GMATCH: allow trailing backslash in pattern to explicitly match a
-         backslash that is the last character in the string.  Bug report from
-         Stephane Chazelas <stephane.chazelas@gmail.com>
-
-                                  11/5
-                                  ----
-builtins/common.c
-       - display_signal_list: if displaying a signal name corresponding to an
-         exit status > 128, don't display the SIG prefix at all.  Old code
-         made displaying the SIG prefix dependent on JOB_CONTROL define.
-         Report and fix from Martijn Dekker <martijn@inlv.org>
-
-execute_cmd.c
-       - execute_subshell_builtin_or_function: call without_job_control even
-         if JOB_CONTROL is not defined. Similar to fix from 9/23.
-         Report from Martijn Dekker <martijn@inlv.org>
-
-execute_cmd.c
-       - execute_simple_command: free memory allocated and passed to
-         make_child in the child process if JOB_CONTROL is defined
-       - execute_command_internal: free memory allocated and passed to
-         make_child in the child process created to run a () subshell or a
-         compound command within a pipeline if JOB_CONTROL is defined
-       - execute_coproc: free memory allocated and passed to make_child in
-         the child process if JOB_CONTROL is defined
-       - execute_disk_command: free memory allocated and passed to
-         make_child in the child process if JOB_CONTROL is defined.  This
-         series of fixes is the result of reports from
-         Eduardo A. Bustamante López <dualbus@gmail.com>
-
-                                  11/6
-                                  ----
-lib/sh/unicode.c
-       - u32toutf16: fix to prevent outputting broken surrogate pairs for
-         Japanese locales (ja_JP.UTF-8) on cygwin (which uses UTF-16 natively).
-         Report and fix from Koichi MURASE <myoga.murase@gmail.com>
-
-builtins/trap.def
-       - trap_builtin: if OP is `-' (revert), set the SIGINT signal handler
-         to sigint_sighandler if the shell is interactive and sourcing a
-         file (interactive_shell && sourcelevel) or running a trap
-         (interactive_shell && running_trap) even if it's not currently
-         interactive.  Report from Martijn Dekker <martijn@inlv.org>
-
-builtins/read.def
-       - check for and read multibyte characters in all cases, not just when
-         we are reading a specific number of characters, as long as
-         mb_cur_max > 1
-
-subst.c
-       - expand_word_internal: some improvements to code that converts istring
-         into a WORD_LIST * to avoid multiple allocations and copies of
-         istring, which is already malloc'ed memory -- reduce number of malloc
-         and free calls
-
-test.c
-       - unary_test: make sure if we test -v array[@] or array[*] that we
-         free the return value from array_value
-
-                                  11/8
-                                  ----
-expr.c
-       - expcond: make sure to set `noeval' before reading tokens depending on
-         the result of the conditional test, since readtok() can evaluate
-         identifiers (and recursively those containing expressions).  Report
-         and fix from Koichi MURASE <myoga.murase@gmail.com>
-
-builtins/evalstring.c
-       - should_suppress_fork: make sure to check for traps on EXIT and
-         ERR, since any_signals_trapped() only checks for `real' signals,
-         not the fake shell ones.  Fixes bug reported by Werner Fink
-         <werner@suse.de>
-       - optimize_subshell_command: ditto
-
-                                  11/9
-                                  ----
-eval.c
-       - reader_loop: change so that we don't reset the SIGINT handler every
-         time through the command loop in an interactive shell if the signal
-         is trapped (as the comment noted).  Reported by Report from Martijn
-         Dekker <martijn@inlv.org>
-
-subst.c
-       - parameter_brace_{patsub,remove_pattern,transform,casemod}: save and
-         restore this_command_name while temporarily setting it for use in
-         error messages.  Fixes use-after-free error reported by
-         Jerzy Kramarz <op7ica@gmail.com>
-       - string_extract_verbatim: make sure when we increment i by 2 due to
-         a CTLESC or CTLESC-CTLNUL that we don't read past the end of the
-         string. This can happen if the string ends with an odd number of
-         CTLESC chars. Fixes oob-read error reported by
-         Jerzy Kramarz <op7ica@gmail.com>
-
-                                  11/11
-                                  -----
-configure.ac,aclocal.m4
-       - BASH_FUNC_SBRK: make sure sbrk actually works, instead of being just
-         a stub function like on several Linux distributions
-
-lib/malloc/malloc.c
-       - malloc_usable_size: return the maximum number of bytes available for
-         a particular memory allocation (size of block allocated for it)
-
-                                  11/12
-                                  -----
-configure.ac
-       - changes to make --enable-profiling work on Linux (-pg, no static link,
-         no -static in LDFLAGS)
-
-Makefile.in
-       - changes to make --enable-profiling work on Linux (take
-         ${PROFILE_FLAGS} out of  BASE_CCFLAGS, add to CCFLAGS instead; add
-         BASE_LDFLAGS define that doesn't include -pg or -static; use
-         BASE_LDFLAGS in LDFLAGS; move ${PROFILE_FLAGS} and ${STATIC_LD} to
-         LDFLAGS)
-
-tests/run-gprof
-       - changes to make profiling test suite with gprof work on Linux (set
-         GMON_OUT_PREFIX to handle multiple profiled processes per test;
-         change default filename to gmon.out from bash.gmon; look for
-         gprof output files in ${TMPDIR} instead of /tmp; handle multiple
-         profiling files starting with $GMON_OUT_PREFIX)
-
-locale.c
-       - locale_isutf8: use locale_charset() if it's available and nl_langinfo
-         isn't
-       - locale_isutf8: add code to parse a locale specification and determine
-         whether the encoding is UTF-8 (or utf8) in the absence of
-         nl_langinfo and locale_charset
-       - set_default_locale: make sure to set locale_utf8locale early on
-       - locale_utf8locale: set via call to locale_isutf8 wherever LANG,
-         LC_ALL, or LC_CTYPE is set
-
-                                  11/13
-                                  -----
-lib/readline/display.c
-       - rl_redisplay: handle report of potential integer overflow in
-         horizontal display mode from Mateusz Lenik <mlen@mlen.pl>
-
-lib/sh/mbschr.c
-       - mbschr: if in a UTF-8 locale (locale_utf8locale) and we are looking
-         for an ASCII character, use (essentially) strchr as a shortcut
-
-lib/sh/shmbchar.c
-       - utf8_{mbstrlen,mblen,mbsmbchar,mbsnlen}: UTF-8-specific replacement
-         functions (should also be able to use utf8_mblen in subst.c:
-         string_extract_verbatim)
-       - mbsmbchar: if locale_utf8locale is true, call utf8_mbsmbchar
-       - mbsmbchar: in UTF-8 locale, use utf8_mblen instead of mbrlen (not
-         used if earlier shortcut taken)
-
-lib/sh/unicode.c
-       - u32cconv: don't use nl_langinfo early to call u32toutf8()
-       - u32cconv: use locale_utf8locale to set utf8locale
-       - u32cconv: when initializing (u32init == 0), use locale_charset, then
-         nl_langinfo, then stub_charset to determine the charset
-       - u32cconv: even if we don't have iconv, if locale_utf8locale is non-
-         zero, return u32toutf8
-
-                                  11/15
-                                  -----
-lib/readline/nls.c
-       - _rl_init_locale: new function, split off code that determines current
-         locale from _rl_init_eightbit, use it to set _rl_utf8locale
-
-lib/readiline/rlprivate.h
-       - _rl_init_locale: new extern declaration
-
-lib/readline/readline.c
-       - rl_initialize: if not initializing everything the first time, call
-         _rl_init_locale to check current locale and set _rl_utf8locale
-
-lib/readline/text.c
-       - _rl_insert_char: optimize cases where we are inserting a single-byte
-         character in a locale with multibyte characters
-       - _rl_insert_char: check whether character is single byte if we know
-         we are in a UTF-8 locale, optimize single-byte case to avoid calls
-         to mbrtowc and memmove/memcpy
-
-lib/readline/mbutil.c
-       - _rl_char_value: if we are in a UTF-8 locale (_rl_utf8locale) and the
-         current character does not have the eighth bit set ((c & 0x80) == 0),
-         return that char without bothering to call mbrtowc
-       - _rl_adjust_point: don't bother calling mbrlen if we are in a UTF-8
-         locale and the current character is not a multibyte character
-       - _rl_find_next_mbchar_internal: if we are in a UTF-8 locale, use that
-         to avoid calls to mbrtowc
-
-lib/readline/display.c
-       - _rl_col_width: if in a UTF-8 locale, take advantage of that to avoid
-         calls to mbrlen and mbrtowc
-       - rl_redisplay: if in a UTF-8 locale, take advantage of that to avoid
-         calls to mbrtowc
-
-                                  11/17
-                                  -----
-lib/readline/histlib.h
-       - PATTERN_SEARCH: new flag for history search interfaces, means to
-         search for a pattern as Posix specifies
-
-lib/readline/histsearch.c
-       - history_search_internal: now takes a `flags' argument instead of just
-         an `anchored' argument to accommodate PATTERN_SEARCH
-       - _hs_history_patsearch: new internal interface to use when flags
-         specify PATTERN_SEARCH
-
-lib/readline/rlprivate.h
-       - SF_PATTERN: new flag for non-incremental search contexts, means to
-         treat search string as a pattern (maps to PATTERN_SEARCH)
-
-lib/readline/search.c
-       - noninc_dosearch: takes an additional `flags' argument for SF_PATTERN
-       - noninc_search_from_pos: takes an additional `flags' argument for
-         SF_PATTERN
-       - noninc_dosearch: pass flags argument through to noninc_search_from_pos
-       - _rl_nsearch_init: if we are in vi command mode, and `pchar' (key used
-         to invoke the search) is `?' or `/', add SF_PATTERN to the flags
-         to conform to Posix spec for vi-mode editing
-       - _rl_nsearch_dosearch: if cxt->sflags indicates that we should do a
-         pattern search, pass SF_PATTERN to noninc_search_from_pos
-       - rl_noninc_forward_search_again: if in vi command mode and key == `N',
-         make sure flags arg passed to noninc_dosearch includes SF_PATTERN
-       - rl_noninc_reverse_search_again: if in vi command mode and key == `n',
-         make sure flags arg passed to noninc_dosearch includes SF_PATTERN
-       - rl_history_search_internal: pass extra flags arg to noninc_search_from_pos
-
-                                  11/18
-                                  -----
-lib/readline/search.c
-       - noninc_search_from_pos: takes a new argument, a pointer to int where
-         it stores the offset of the match in the history line (if non-NULL),
-         modified callers
-       - rl_history_search_internal: pass newcol pointer to
-         noninc_search_from_pos to avoid having to recompute the match offset
-         in the matching history entry
-
-config.h.in
-       - define HAVE_FNMATCH if we have the fnmatch function (configure was
-         already checking for it)
-
-lib/readline/histsearch.c
-       - _hs_history_patsearch: transform the pattern into one ending in a
-         `*' to avoid having to perform multiple match attempts from each
-         index in the history line
-       - history_search_internal: changes to handle pattern matching if
-         PATTERN_SEARCH is in the flags and HAVE_FNMATCH is defined.  This
-         makes vi-mode history searching treat the user-specified search
-         string as an fnmatch pattern, as Posix requires.  Fixes issue
-         reported by <jwdevel@gmail.com>
-
-                                  11/19
-                                  -----
-builtins/shopt.def
-       - shopt_enable_hostname_completion: only declare this if READLINE
-         defined, since that's the only time it's used.  Reported by
-         isabella parakiss <izaberina@gmail.com>
-
-                                  11/20
-                                  -----
-builtins/common.c
-       - display_signal_list: make `kill -l 0' print `EXIT', modifying change
-         from 9/17
-
-                                  11/21
-                                  -----
-subst.c
-       - expand_word_internal: when the shell encounters a backslash as the
-         last character of the string, don't try to add a '\'0' to the end
-         of the string if the string is quoted, just add a <CTLESC><\> and
-         skip to the end of string processing.  Fixes oob-read error
-         reported by Jerzy Kramarz <op7ica@gmail.com>
-
-test.c
-       - two_arguments: check argv[pos][1] before checking argv[pos][2] when
-         looking for a unary argument.  Fixes oob-read error on single `-'
-         in unary operator position reported by Jerzy Kramarz
-         <op7ica@gmail.com>
-       - ANDOR: check s[1] before checking s[2] in case s[1] == end of string.
-         Fixes oob-read error reported by Jerzy Kramarz <op7ica@gmail.com>
-
-subst.c
-       - command_substitute: now takes additional flags argument, changed one
-         caller (param_expand) to pass through PF_ASSIGNRHS flag; other callers
-         pass 0
-       - command_substitute: pass through flags argument to read_comsub
-       - read_comsub: now takes additional new flags argument to indicate
-         whether or not the word is in a context where word splitting will
-         eventually be performed
-       - read_comsub: if we are running in a context where word splitting
-         will not take place (PF_ASSIGNRHS), we read a CTLESC, and CTLESC is
-         in $IFS, add a CTLESC to make sure it gets through a round of
-         dequoting
-
-                                  11/23
-                                  -----
-parse.y
-       - xparse_dolparen: since reset_parser frees the pushed string list,
-         and this is supposed to be a separate parsing context, we need to
-         save and restore pushed_string_list around the call to parse_string
-         and reset_parser.  Fixes bug reported by Dan Douglas
-         <ormaaj@gmail.com>
-
-bashhist.h
-       - HISTEXPAND_DEFAULT: default value of history_expansion, moved here
-         from flags.c
-
-flags.[ch]
-       - histexp_flag: new variable, this is what set -H/set -o histexpand
-         sets; history_expansion set to value of this variable; defaults to 0
-       - history_expansion: now set to HISTEXPAND_DEFAULT
-
-bashhist.c
-       - bash_history_reinit: if interact == 0, set history_expansion to the
-         value of histexp_flag, to allow -H option to enable history
-         expansion
-       - bash_history_reinit: if interact == 0, make sure
-         history_expansion_inhibited is set opposite of histexp_flag, so
-         enabling history expansion with -H invocation option turns off
-         inhibited expansion. If interactive shell, we turn it off so
-         history_expansion controls whether or not history expansion takes
-         place. In practice, this function is always called with interact == 0,
-         and -c command still doesn't perform history expansion
-
-shell.c
-       - init_interactive: make sure histexp_flag and history_expansion are
-         identical in an interactive shell; allows both -H/+H option and
-         default compilation options (HISTEXPAND_DEFAULT) to work
-
-                                  11/24
-                                  -----
-subst.c
-       - get_word_from_string: take advantage of the fact that SEPARATORS is
-         always a (possibly local) copy of IFS, so build a local charmap of
-         separators and use it instead of the (cached and possibly stale)
-         ifs_cmap map and isifs macro.  Fixes bug with -N stripping leading
-         whitespace reported by Clark Wang <clarkw@vmware.com>
-
-                                  11/25
-                                  -----
-builtins/read.def
-       - read_builtin: make `i' volatile, since auto variables are technically
-         undefined after a longjmp, and a timeout on SIGALRM causes one.
-         Fix suggested by Dmitry Goncharov <dgoncharov@users.sf.net>
-
-                                  11/27
-                                  -----
-parse.y
-       - shell_getc: if we are reading input from a string, and we get the
-         ending '\0', and we are not expanding an alias, return EOF right
-         away.  It might be an eval'ed string that has a syntax error.
-         Fixes bug reported by Dan Douglas <ormaaj@gmail.com>
-
-                                  11/28
-                                  -----
-subst.c
-       - expand_word_internal: if we're expanding a quoted string containing
-         a tilde as the first character of a word, only expand the tilde if
-         we're expanding an array subscript (Q_ARRAYSUB), not if we're
-         expanding any arithmetic expression (Q_ARITH).  This fixes a
-         backwards compatibility issue with expressions like ~0 reported by
-         Bize Ma <binaryzebra@gmail.com>
-
-subst.c
-       - parameter_brace_expand_indir: if the variable is not special and
-         the indirect variable is unset (!variable where variable is unset),
-         report an error.  This is a slight incompatibility with previous
-         versions, which did not differentiate between indirecting an unset
-         variable and an indirect expansion resulting in an unset variable.
-         Fixes omission reported by otenba@protonmail.com
-
-                                  11/30
-                                  -----
-lib/readline/doc/{rluser.texi,readline.3},doc/bash.1
-       - do-uppercase-version: since this doesn't actually exist, replace it
-         with do-lowercase-version, with the caveat that do-lowercase-version
-         results in undefined behavior if bound to a character that's
-         already lowercase.  Suggested by Branden Robinson
-         <g.branden.robinson@gmail.com>
-
-lib/readline/doc/rluser.texi
-       - history-substring-search-forward: was misspelled as "substr-search";
-         ditto for search-backward
-
-doc/bash.1
-       - history-substring-search-{backward,forward}: add documentation, text
-         straight from readline.3
-
-jobs.c
-       - initialize_job_control: if the terminal's process group is valid,
-         but the shell is not the foreground process, check for terminating
-         signals (like SIGHUP, which the kernel would send if the process
-         group were orphaned) during the loop where we try to stop the shell
-         if it's not in the foreground.  Not a perfect solution; the kernel
-         might not send SIGHUP
-
-                                  12/1
-                                  ----
-jobs.c
-       - initialize_job_control: only go through the SIGTTIN loop 16 times at
-         most before deciding we're in the background and probably a member of
-         an orphaned process group; set original_pgrp to the terminal's pgrp
-         (so the eventual give_terminal_to doesn't leave the terminal in the
-         wrong pgrp); and bail on job control initialization
-
-tests/run-all
-       - unset SHELLOPTS to avoid its options `polluting' the test
-         environment.  Suggestion from Vladimir Marek
-         <Vladimir.Marek@oracle.com>
-
-tests/execscript
-       - use $PWD/exec8.sub to protect against someone who has a cd command
-         in his bashrc.  Report from  Vladimir Marek
-         <Vladimir.Marek@oracle.com> 
-
-                                  12/2
-                                  ----
-shell.c
-       - open_shell_script: call end_job_control before exiting the shell in
-         case we were run as `bash -i script' and there is a problem with
-         executing `script'.  If we don't, the terminal ends up in the wrong
-         process group.  Fix from Clark Wang <clarkw@vmware.com>
-
-                                  12/3
-                                  ----
-parse.y
-       - read_comsub: if we look for a character following a `<' and it's
-         not `<' (indicating that we don't have to read a here-document),
-         make sure we push that character back and go through the loop again
-         so we note the right word start location.  Fixes bug reported by
-         parasite parasite <42parasite@gmail.com>
-
-subst.c
-       - parameter_brace_expand_indir: clean up checks for unset variables to
-         minimize incompatibilities with previous versions
-
-                                  12/5
-                                  ----
-lib/readline/history.c
-       - add_history: don't update history_length until all of the updates to
-         the_history are complete, so history_length is always consistent.
-         Report and fix from Hong Cho <hong.cho@citrix.com>
-
-bashline.c
-       - bash_backward_shellword: fix to work better at the end of the line,
-         with multiple trailing whitespace characters.  Inspired by report
-         from Kirill Timofeev <kt97679@gmail.com>
-
-Makefile.in
-       - bashbug: use `^' as the sed delimiter instead of `%'; some compilers
-         use `%' in CFLAGS.  Report from  Vladimir Marek
-         <Vladimir.Marek@oracle.com> 
-
-                                  12/6
-                                  ----
-test.c
-       - test_unop: make sure op[1] != 0 before testing op[2]
-       - term: make sure argv[pos][1] != 0 before testing argv[pos][2].  Fixes
-         oob-read reported by Jerzy Kramarz <op7ica@gmail.com>
-
-                                  12/7
-                                  ----
-lib/glob/glob.c
-       - glob_filename: assign the return value of realloc (results, ...) to
-         a temp pointer, so if realloc returns NULL, we make sure we free
-         results.  Report from Kirill Timofeev <kt97679@gmail.com>
-
-                                  12/12
-                                  -----
-lib/sh/shquote.c
-       - sh_backslash_quote: if FLAGS&2, backslash-quote other single-byte
-         characters that are in the current locale's <blank> character class
-
-builtins/printf.def
-       - printf_builtin: when processing the `%q' format, make sure to
-         backslash quote all <blank> characters by making sure that FLAGS
-         passed to sh_backslash_quote includes 2.  Fixes issue for certain
-         iso-8859-1 locales where character 160 (octal 240, hex 0xa0) is a
-         non-breaking space. Report from Stephane Chazelas
-         <stephane.chazelas@gmail.com>
-
-lib/sh/eaccess.c
-       - sh_stat: if DEV_FD_STAT_BROKEN is defined, take /dev/fd/N and turn
-         it into a stat on file descriptor N, as if /dev/fd were not
-         available.  This is the case on some old versions of SunOS.  Report
-         and patch from Dmitry Goncharov <dgoncharov@users.sf.net>
-
-config.h.in
-       - DEV_FD_STAT_BROKEN: add define
-
-configure.ac
-       - --enable-dev-fd-stat-broken: new command-line option, defines
-         DEV_FD_STAT_BROKEN if supplied at configure time
-
-doc/bashref.texi
-       - --enable-dev-fd-stat-broken: document new command-line option for
-         configure
-
-arrayfunc.c
-       - assoc_expand_once: new variable, declared here just because
-
-arrayfunc.h
-       - assoc_expand_once: extern declaration
-       - AV_NOEXPAND: new flag value for the array_value family of functions:
-         means to not run associative array subscripts through word expansion
-
-builtins/set.def
-       - unset_builtin: call unbind_array_element with assoc_expand_once as
-         third arg, controls whether we expand associative array subscripts
-         (if 1, we suppress the usual expansion).  With accompanying shopt,
-         provides backwards compatible option to solve problem with quotes
-         and other characters in associative array subscripts pointed out
-         most recently by Mingye Wang (Arthur2e5) <arthur200126@gmail.com>
-
-builtins/shopt.def
-       - assoc_expand_once: new option, controls value of internal variable
-         with the same name. Currently undocumented because I'm not completely
-         sold on the name
-
-expr.c
-       - evalexp: now takes a second argument, flags. Changed all callers in
-         multiple other files (builtins/let.def,execute_cmd.c,arrayfunc.c,
-         subst.c,test.c,variables.c)
-
-externs.h
-       - EXP_EXPANDED, new flag for second argument to evalexp
-
-builtins/let.def
-       - let_builtin: add EXP_EXPANDED to flags passed to evalexp
-
-execute_cmd.c
-       - execute_arith_command: add EXP_EXPANDED to flags passed to evalexp,
-         since the command string is run through expand_words_no_vars before
-         being evaluated
-
-expr.c
-       - set expression-global variable already_expanded if flags arg to
-         evalexp contains EXP_EXPANDED
-       - if assoc_expand_once option set and already_expanded flag set, pass
-         1 in flags to array_variable_part to skip over quotes and expansions
-         in the subscript
-       - if those two variables set, pass AV_NOEXPAND as flag to
-         get_array_value to prevent word expansions on the subscript
-
-arrayfunc.c
-       - if flags passed to unbind_array_element includes 1, pass flag on to
-         skipsubscript so we don't expect matched quotes or process
-         expansions in the subscript
-       - if flags to array_value_internal include AV_NOEXPAND, pass 1 as flag
-         to array_variable_part to pass along to skipsubscript
-       - if flags to array_value_internal include AV_NOEXPAND, don't call
-         expand_assignment_string_to_string; just use the unexpanded subscript
-         to produce the key [THIS IS A WORK IN PROGRESS]
-
-                                  12/14
-                                  -----
-subst.h
-       - ASS_NOEXPAND: assignment flag that inhibits expansion of associative
-         array subscripts
-
-variables.c
-       - bind_int_variable: takes new flags arg; flags are taken from the
-         ASS_ set of assignment flags, changed callers (bashline.c, expr.c,
-         pcomplete.c)
-       - bind_int_variable: if flags includes ASS_NOEXPAND, pass 1 as flag to
-         valid_array_reference and array_variable_part to pass along to
-         skipsubscript, so we don't try to skip over quoted strings in the
-         subscript
-       - bind_int_variable: pass flags along to assign_array_element
-
-variables.h
-       - bind_int_variable: updated extern declaration with new flags arg
-
-expr.c
-       - expr_bind_variable: if the assoc_expand_once option is enabled, and
-         the flags to evalexp indicate that we have already run the expression
-         through word expansion, pass ASS_NOEXPAND as flag to bind_int_variable
-
-arrayfunc.c
-       - assign_array_element: if flags includes ASS_NOEXPAND, pass 1 as flag
-         to array_variable_name to pass along to skipsubscript
-       - assign_array_element: if flags includes ASS_NOEXPAND, don't run an
-         associative array subscript through word expansion, just use as-is
-
-subst.c
-       - param_expand: call evalexp with EXP_EXPANDED flag for arithmetic
-         substitution because the string has already been expanded with
-         expand_arith_string
-
-                                  12/15
-                                  -----
-builtins/read.def
-       - read_builtin: use value of assoc_expand_once for valid_array_reference
-         as with other uses
-       - bind_read_variable: if assoc_expand_once is set, pass ASS_NOEXPAND
-         to assign_array_element
-
-general.c
-       - assignment: instead of checking whether flags == 0 to allow a `[',
-         explicitly check for (flags&1) to disallow it.  This leaves the door
-         open for additional flag values
-
-builtins/printf.def
-       - printf_builtin: use value of assoc_expand_once for
-         valid_array_reference as with other uses
-       - bind_printf_variable: if assoc_expand_once is set, pass ASS_NOEXPAND
-         to assign_array_element
-
-                                  12/16
-                                  -----
-builtins/history.def
-       - change history -d option to handle negative arguments; negative
-         arguments offset from the end of the history list (last_position + 1
-         so history -d -1 deletes the history -d command that just got
-         added).  Original patch from Piotr Grzybowski <narsil.pl@gmail.com>
-
-doc/bash.1,lib/readline/doc/hsuser.texi
-       - documented new behavior of negative offsets for `history -d'
-
-                                  12/17
-                                  -----
-lib/readline/history.c
-       - remove_history: use memmove to move the history list around instead
-         of a loop that copies pointers one at a time, similar to add_history
-
-                                  12/19
-                                  -----
-configure.ac
-       - linux: make sure PGRP_PIPE is defined unconditionally for all kernel
-         versions greater than 2.3.*
-
-lib/readline/history.c
-       - clear_history: when clearing the history, reset history_base to 1
-         (its default)
-       - remove_history_range: new function, removes a set of history entries
-         and returns them all for deallocation
-
-lib/readline/history.h
-       - remove_history_range: extern declaration
-
-                                  12/20
-                                  -----
-execute_cmd.c
-       - eval_arith_for_expr: pass EXP_EXPANDED to evalexp, since we run the
-         expression through expand_words_no_vars
-
-                                  12/21
-                                  -----
-input.c
-       - b_fill_buffer: when read returns EOF or error, and we reset the
-         buffer and pointers, reset the input pointer to 0.  Fixes issue
-         reported by Stephane Chazelas <stephane.chazelas@gmail.com>
-
-                                  12/22
-                                  -----
-arrayfunc.[ch],subst.c
-       - array_expand_index: added new FLAGS argument, reserved for future use,
-         changed callers
-
-
-                                  12/24
-                                  -----
-variables.c
-       - can_optimize_assignment,optimized_assignment: see if we can detect
-         whether or not we're trying to append a string to a string variable,
-         and optimize that using realloc/strcpy.  Based on a log-ago
-         suggestion from Aharon Robbins <arnold@skeeve.com>
-
-                                  12/27
-                                  -----
-builtins/help.def
-       - help_builtin: don't pass return value from ngettext() directly to
-         printf
-
-                                  12/28
-                                  -----
-sig.c
-       - set_signal_handler: set SA_RESTART for SIGWINCH, so window size
-         changes don't interrupt open/read/write.  Suggested by
-         Andriy Prystupa <andriy.prystupa@globallogic.com> back in 10/2016
-
-                                  12/30
-                                  -----
-execute_cmd.c
-       - coproc_pidchk: if MULTIPLE_COPROCS, call cpl_search to find coproc
-         associated with pid, don't remove it from the list with cpl_delete.
-         Just mark as dead and wait for coproc_reap/cpl_reap to take care
-         of disposing it
-       - execute_coproc: NEW FEATURE: run the coproc name through word
-         expansion before creating the coproc; this allows unique coprocs
-         to be created in loops. Originally requested way back in 2012 by
-         Erik Brandsberg <ebrandsberg@juniper.net>
-
-command.h
-       - subshell_com: now has a line number member: line
-
-make_cmd.c
-       - make_subshell_command: assign current line number (line number of the
-         ending right paren) to `line' member
-
-copy_cmd.c
-       - copy_subshell_command: copy the `line' member
-
-execute_command.c
-       - execute_command_internal: when executing a user subshell (`(command)'),
-         set the line number and line number for the ERR trap from the line
-         number saved in the subshell command struct.  Fix from
-         Eduardo A. Bustamante López <dualbus@gmail.com>
-       - execute_arith_command: set line number for ERR trap from line number
-         saved in the arith command struct.  Fix from
-         Eduardo A. Bustamante López <dualbus@gmail.com>
-       - execute_cond_command: set line number for ERR trap from line number
-         saved in the cond command struct.  Fix from
-         Eduardo A. Bustamante López <dualbus@gmail.com>
-
-variables.c
-       - bind_variable_internal: move can_optimize_assignment call to the
-         right place
-
-                                  12/31
-                                  -----
-variables.c
-       - find_variable_nameref: treat a circular variable reference as
-         referring to a variable of that name in the global scope (for now),
-         if one exists.  PROVISIONAL change: inspired by suggestion back in
-         6/2016 by Grisha Levit <grishalevit@gmail.com>
-
-                                1/2/2017
-                                --------
-{expr,general,hashcmd}.c
-       - include flags.h for flag values
-
-make_cmd.c
-       - include shell.h instead of the files it includes
-
-flags.h
-       - new extern declarations for want_pending_command, read_from_stdin
-
-subst.h
-       - add extern declaration for expanding_redir, assigning_in_environment
-
-trap.h
-       - add extern declaration for running_trap
-
-execute_cmd.h
-       - added extern declarations for variables declared in execute_cmd.c,
-         changed files that declare lots of extern variables
-
-shell.h
-       - added extern declarations for variables declared in shell.c,
-         changed files that declare lots of extern variables 
-
-parser.h
-       - added extern declarations for variables declared in parse.y,
-         changed files that declare lots of extern variables 
-
-[lots of changes to reduce the number of extern declarations in C and DEF files]
-
-parse.y
-       - xparse_dolparen: need ALIAS or DPAREN_ARITHMETIC to be defined to
-         use STRING_SAVER
-
-                                   1/3
-                                   ---
-sig.c
-       - termsig_handler: don't call end_job_control if subshell_environment
-         indicates that we're in a command or process substitution.
-         Provisional fix for bug reported by Russell King <rmk@armlinux.org.uk>
-
-jobs.c
-       - end_job_control: only attempt to give the terminal back to
-         original_pgrp if job_control != 0; don't test interactive_shell
-
-execute_cmd.c
-       - execute_disk_command: call QUIT after search_for_command, since
-         the only time QUIT gets called is when the path is actually
-         searched.  It doesn't happen for an absolute pathname.  Fix for
-         bug reported by Russell King <rmk@armlinux.org.uk>
-
-                                  1/16
-                                  ----
-lib/glob/glob.c
-       - extglob_skipname,wextglob_skipname: if we don't find a reason to
-         not skip the name in any subpattern (r returns 0 for any subpattern),
-         return 1 because we should skip the name
-       - extglob_skipname,wextglob_skipname: if we don't find a reason to
-         not skip the name in any subpattern, but the first part of the extglob
-         pattern is a wildcard (`*(pat)'), check the rest of the pattern, if
-         any, to decide whether or not to skip the name. Fixes bug reported
-         by Grisha Levit <grishalevit@gmail.com>
-
-lib/glob/glob_loop.c
-       - CHAR -> GCHAR (unsigned char); change uses of CHAR to GCHAR
-
-lib/glob/glob.c
-       - wchkname -> wskipname
-       - wskipname: now takes a third `flags' argument, like the other variants
-         of skipname
-
-                                  1/17
-                                  ----
-redir.c
-       - here_document_to_fd: set the file descriptor open for writing to the
-         here document to be close-on-exec.  Fixes bug reported by
-         Siteshwar Vashisht <svashisht@redhat.com>
-
-                                  1/18
-                                  ----
-{gmisc,gm_loop}.c
-       - match_pattern_char,match_pattern_wchar: moved to gm_loop.c (new file),
-         compile twice for single and wide characters as with the rest of
-         the functions
-       - umatchlen,wmatchlen: ditto
-       - extglob_pattern_p: move to gm_loop.c, generalize for regular and
-         wide-char versions
-
-                                  1/19
-                                  ----
-lib/readline/complete.c
-       - stat_char: fix small memory leak if stat/lstat returns -1
-
-bashline.c
-       - bash_filename_stat_hook,bash_directory_completion_hook: make sure
-         expand_prompt_string is caled wth W_NOPROCSUB flag
-       - directory_exists: don't dequote the filename passed as an argument;
-         this function should never get quoted pathnames
-
-subst.c
-       - expand_word_internal: when calling expand_word_internal recursively
-         after reading a double-quoted string, make sure the W_NOCOMSUB and
-         W_NOPROCSUB flags make it to the recursive invocation.  Fixes bug
-         reported by Jens Heyens <jens.heyens@cispa.saarland>
-
-                                  1/23
-                                  ----
-lib/readline/signals.c
-       - _rl_orig_sigset: original signal mask, set and restored by
-         rl_set_signals (rl_clear_signals doesn't block signals).  If we
-         are not installing signal handlers, just save signal mask each
-         time rl_set_signals is called
-
-lib/readline/input.c
-       - rl_getc: use _rl_orig_sigmask in the call to pselect(), so we block
-         the set of signals originally blocked by the calling application.
-         Fixes bug reported by Frédéric Brière <fbriere@fbriere.net>
-
-parse.y
-       - yy_readline_get: try to unset NONBLOCK mode on readline's input
-         file descriptor before calling readline(). Inspired by report from
-         Siteshwar Vashisht <svashisht@redhat.com>
-
-                                  1/30
-                                  ----
-parse.y
-       - parse_comsub: don't unconditionally set the LEX_WASDOL flag when we
-         see a `$'; we should toggle it to accommodate things like $$.
-         Fixes bug reported by Christian Weisgerber <naddy@mips.inka.de>
-       - parse_matched_pair: do the same thing with LEX_WASDOL
-
-                                   2/1
-                                   ---
-jobs.h
-       - JWAIT_PERROR,JWAIT_FORCE: new defines for the wait_for_ family of
-         functions
-
-jobs.c
-       - wait_for_job, wait_for_any_job: take new flags argument for use by
-         the wait builtin
-       - wait_for_job: if JWAIT_FORCE flag supplied, loop waiting for job to
-         terminate instead of change state
-       - wait_for_single_pid: if JWAIT_FORCE flag supplied, loop waiting for
-         child process to terminate instead of change state
-
-builtins/wait.def
-       - takes a new `-f' option, signifying to wait until the specified job 
-         or process terminates, instead of changes state
-
-doc/{bash.1,bashref.texi}
-       - wait: document the new -f option and its behavior when job control
-         is enabled
-       - job control: add a paragraph describing how the wait builtin changes
-         behavior when job control is enabled: it returns when a job changes
-         state
-
-                                   2/2
-                                   ---
-examples/loadables/fdflags.c
-       - fdflags: new loadable builtin to set and unset file descriptor flags
-         (such as non-blocking, though bash undoes that) for descriptors bash
-         has open. Developed in consultation with Christos Zoulas
-         <christos@zoulas.com>
-
-                                   2/3
-                                   ---
-
-lib/readline/text.c
-       - rl_previous_screen_line: attempt to move to the same column on the
-         previous screen line of the current readline buffer by moving back
-         a number of characters equal to the screen width
-       - rl_next_screen_line: attempt to move to the same column on the
-         next screen line of the current readline buffer by moving forward
-         a number of characters equal to the screen width. Both originally
-         suggested by Hans Ginzel <hans@matfyz.cz>
-
-lib/readline/readline.h
-       - rl_{next,previous}_screen_line: extern declarations
-
-lib/readline/funmap.c
-       - {next,previous}-screen-line: new bindable command names
-
-lib/readline/doc/{rluser.texi,readline.3}
-       - {next,previous}-screen-line: document behavior, including limitations
-
-                                   2/5
-                                   ---
-lib/readline/input.c
-       - rl_read_key: when reading input from a macro, make sure to return
-         the next character as an unsigned char, so we handle multibyte
-         character sequences correctly.  Report and fix from Grisha Levit
-         <grishalevit@gmail.com>
-
-                                   2/6
-                                   ---
-shell.c
-       - --pretty-print: new invocation option, currently undocumented, dumps
-         a pretty-printed version of a shell script given as an argument to
-         stdout
-       - main: call pretty_print_loop() if we're in pretty-printing mode in
-         a non-interactive shell
-
-eval.c
-       - pretty_print_loop: new function, similar to reader_loop, reads
-         commands and prints them by displaying the result from
-         make_command_string()
-
-externs.h
-       - pretty_print_loop: new extern declaration
-
-                                   2/9
-                                   ---
-doc/{bash.1,bashref.texi}
-       - here strings: correct documentation to note they do not undergo
-         brace expansion. Report from Conor McCarthy <mr.spuratic@gmail.com>
-
-                                   2/9
-                                   ---
-lib/readline/display.c
-       - expand_prompt: instead of recomputing the line break offsets for
-         prompts that span multiple screen lines on every call to rl_redisplay,
-         do it here. Manage a local array local_prompt_newlines; set an offset
-         every time `physchars' hits a multiple of the screen width.  Inspired
-         by https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=843819
-       - rl_redisplay: don't calculate multi-line prompt line break indices
-         here; use the values calculated by expand_prompt
-       - rl_{save,restore}_prompt: save and restore local_prompt_newlines
-
-                                  2/11
-                                  ----
-lib/readline/mbutil.c
-       - _rl_find_prev_mbchar_internal: since we're traversing the string
-         from the beginning, shortcut non-multibyte characters in a UTF-8
-         locale
-
-parse.y
-       - parse_comsub: if we are parsing a here document with a quoted
-         delimiter (LEX_QUOTEDDOC), we should not remove <backslash><newline>
-         pairs from the body of the here document.  Need to add LEX_QUOTEDDOC
-         to the values in tflags when calling shell_getc.  Fixes bug reported
-         by Michael Homer <michael.homer@ecs.vuw.ac.nz>, patch was originally
-         contributed by Geir Hauge <geir.hauge@gmail.com>
-
-                                  2/15
-                                  ----
-jobs.c
-       - bgp_add: if hashed pid collides with bgpids.head index, print a
-         warning and move to the next index.  Attempt to avoid collision
-         problem reported by Graham Northup <northug@clarkson.edu>
-
-                                  2/17
-                                  ----
-subst.c
-       - process_substitute: call remove_quoted_escapes on the command string
-         like command substitution does, since the string will be run through
-         the parser again.  Fixes bug reported by David Simmons
-         <bug-bash@tmp.davidsimmons.com>
-
-config-top.h
-       - STATIC_PATH_VALUE: new config variable, undefined by default
-
-variables.c
-       - shell_initialize: if STATIC_PATH_VALUE is defined, use it to set the
-         PATH variable at shell startup, overriding the environment and any
-         value for DEFAULT_PATH_VALUE.  Based on a suggestion from
-         Lonnie Abelbeck <lonnie@abelbeck.com>
-
-                                  2/18
-                                  ----
-shell.c
-       - maybe_make_restricted: clear the hash table before making the PATH
-         variable read-only by calling stupidly_hack_special_variables.
-         Suggestion from Lonnie Abelbeck <lonnie@abelbeck.com>
-
-subst.c
-       - expand_string_for_pat: change expansion of WORD in ${param[%[%]][#[#]]word}
-         to use this new function, initially identical to
-         expand_string_for_rhs
-       - getpattern: use expand_string_for_pat to expand the pattern
-
-                                  2/19
-                                  ----
-subst.c
-       - expand_string_for_rhs: now that this is only used to expand the RHS
-         of the various non-pattern ${paramOPword} expansions, set
-         expand_no_split_dollar_star depending on whether or not the entire
-         brace expansion is going to be subjected to word splitting: if it's
-         quoted or if IFS is set but null, we will not be splitting so we set
-         this to 1 and let $* expand to separate fields separated by a space.
-         This was heavily debated back in October 2014 and resulted in Posix
-         interp 888. Reported by Martijn Dekker <martijn@inlv.org>
-
-                                  2/20
-                                  ----
-subst.c
-       - expand_string_for_rhs: now takes `op' (brace expansion operator) as
-         an additional argument; changed call in parameter_brace_expand_rhs
-       - expand_string_for_rhs: make sure to set expand_no_split_dollar_star
-         if `op' is `=', since we are supposed to preserve the assignment
-         statement expansion semantics on the RHS of ${param=word}
-
-jobs.c
-       - bgp_delindex: make sure to set ps->pid to NO_PID so we more
-         effectively remove it from the hash table. It shouldn't matter as
-         long as nothing in pidstat_table points to it, but better to be safe
-       - bgp_delete,bgp_search: generalize previous collision detection to
-         loop detection: abort search if we are going to go back to the
-         first index we tried
-
-                                  2/21
-                                  ----
-lib/readline/vi_mode.c
-       - rl_vi_bword: if we're trying to move backward to non-whitespace
-         in a line that begins with whitespace, make sure we don't move
-         point to 0 and test memory locations before the start of the
-         buffer. Report and fix from Jason Hood <jadoxa@yahoo.com.au>
-
-lib/readline/display.c
-       - expand_prompt: if _rl_screenwith == 0, call rl_reset_screen_size to
-         initialize it. If it's still 0 after that, guess that the screen
-         width is 80 and use that to guess how many screen lines the prompt
-         consumes
-
-lib/readline/readline.c
-       - readline_internal_setup: if in emacs editing mode, and we are
-         showing the editing mode in the prompt, call _rl_reset_prompt() to
-         make sure that the updated setting of _rl_show_mode_in_prompt
-         (presumably set in an inputrc file) is reflected in the redisplay
-         performed by rl_callback_newline via readline_internal_setup.
-         Fix from Jason Hood <jadoxa@yahoo.com.au>
-
-                                  2/22
-                                  ----
-builtins/complete.def
-       - print_one_completion,print_compopts: make sure to display the
-         `nosort' and `noquote' options if they've been set for a particular
-         compspec.  Fix from Grisha Levit <grishalevit@gmail.com>
-
-builtins/read.def
-       - read_builtin: if -e is supplied, read needs to free rlbuf before
-         returning, since it uses discard_unwind_frame at that point. Bug
-         and fix from ZhangXiao <xiao.zhang@windriver.com>
-
-execute_cmd.c
-       - execute_for_command: when using a nameref as the for loop control
-         variable, make sure we check for readonly namerefs and make sure
-         that we force bind_variable to enforce restrictions on nameref
-         assignments. Fix from Grisha Levit <grishalevit@gmail.com>
-
-                                  2/23
-                                  ----
-general.c
-       - make_absolute: convert deprecated cygwin_conv_to_full_posix_path
-         to cygwin_conv_path (CCP_WIN_A_TO_POSIX, ...)
-
-{shell,variables}.c,config-top.h
-       - modify change from 2/17: rename STATIC_PATH_VALUE to RBASH_STATIC_PATH_VALUE;
-         don't use it in shell_initialize; set PATH to it just before
-         imposing restricted shell restrictions
-
-                                  2/24
-                                  ----
-subst.c
-       - expand_string_for_rhs: revert change from 2/19 concerning setting
-         expand_no_split_dollar_star so we are consistent with the Posix
-         examples. This anticipates Martijn Dekker initiating an austin
-         group discussion about this case
-
-                                  2/25
-                                  ----
-pcomplete.c
-       - gen_shell_function_matches: if COMPREPLY is an associative array,
-         don't coerce it to an indexed array, which will fail to produce any
-         matches anyway.  Report from Grisha Levit <grishalevit@gmail.com>
-       - bind_comp_words: if COMP_WORDS exists as a nameref variable, ignore
-         the nameref attribute. Report from Grisha Levit
-         <grishalevit@gmail.com>
-
-subst.c
-       - parameter_brace_expand: if expand_no_split_dollar_star is set, make
-         sure chk_atstar treats ${var[*]} as quoted by passing Q_DOUBLE_QUOTES
-         as the second argument.  Fixes differing treatment of $* and ${v[*]}
-         reported by Grisha Levit <grishalevit@gmail.com>, because otherwise
-         *contains_dollar_at gets set to 1 and the word is inappropriately
-         split
-
-                                   3/1
-                                   ---
-subst.c
-       - expand_word_list_internal: if a variable assignment fails (e.g., due
-         to a readonly variable) in a non-interactive posix mode shell, don't
-         abort the shell if the assignment is being performed by the command
-         builtin, even if it's something like `command eval v=1'.  Fixes
-         RedHat bug https://bugzilla.redhat.com/show_bug.cgi?id=1389838
-         (reported by Denys Vlasenko)
-
-                                   3/3
-                                   ---
-builtins/shopt.def
-       - set_compatibility_level: make sure that changing the compatibility
-         level sets or modifies BASH_COMPAT. Fixes bug reported by
-         Stephane Chazelas <stephane.chazelas@gmail.com>
-
-lib/glob/smatch.c
-       - is_cclass: broke into two functions: is_valid_cclass and cclass_test,
-         for future expansion. No functionality change
-
-lib/glob/sm_loop.c
-       - BRACKMATCH: when testing a character against a character class name,
-         use the unfolded (original) character, since we're not performing a
-         comparison. This is what glibc does.  Fixes bug reported by
-         Lukáš BaÅinka <lukas.barinka@boxtrap.net>
-
-                                   3/4
-                                   ---
-doc/{bash.1,bashref.texi}
-       - note that the arguments to -eq and the rest of the arithmetic
-         operators are evaluated as expressions when using [[.  Report from
-         Rob la Lau <rob@ohreally.nl>
-
-
-                                   3/7
-                                   ---
-lib/readline/display.c
-       - update_line: completely rewrote the code that handles line wrapping
-         in the presence of multibyte/double-width characters; punts to a
-         dumb update in cases where the number of screen positions doesn't
-         match
-       - update_line: in one case, where we are deleting characters from the
-         line, if we are writing a non-space into the last screen character
-         position, note that we are no longer using a space as a placeholder
-         for a line wrap where there is a multi-width character that won't
-         fit on the screen line (wrapped_line[current_line+1] = 0)
-
-                                  3/10
-                                  ----
-lib/readline/readline.c
-       - bind_arrow_keys_internal: add default key bindings for control-
-         arrow keys, suggested by Per Bothner <per@bothner.com>
-
-                                  3/13
-                                  ----
-doc/{bash.1,bashref.texi}
-       - clarify the prompt strings the undergo expansion (PS0, PS1, PS2, and
-         PS4) before being displayed.  Based on a report from Grisha Levit
-         <grishalevit@gmail.com>
-
-                                  3/14
-                                  ----
-input.c
-       - bufstream_ungetc: return EOF if being asked to unget a character to
-         a NULL buffer
-       - buffered_getchar: check buffered_fd is valid and buffers[buffered_fd]
-         is non-NULL before trying to dereference. Fixes bug reported by
-         floyd <floyd@floyd.ch>
-
-execute_cmd.c
-       - execute_null_command: if we fork to execute the command, the subshell
-         is not interactive
-       - execute_null_command: for safety's sake, if a redirection attached
-         to a null command affects fd 0 or the fd the shell is reading for
-         input, and the redirection can potentially change or close that file
-         descriptor, force a fork so the redirection is done in a subshell
-
-                                  3/15
-                                  ----
-lib/readline/display.c
-       - update_line: if we have to output some bytes, and we are outputting
-         the prompt string, make sure we correct _rl_last_c_pos if we are
-         at the wrap offset -- what if all of the characters in the prompt
-         are invisible, so the visible length is 0?  Fixes display bug
-         reported by Grisha Levit <grishalevit@gmail.com>
-
-execute_cmd.c
-       - undo_partial_redirects: new function, performs redirections specified
-         in redirection_undo_list and disposes of them. Intended to be used
-         to unwind redirections performed before a redirection error
-       - dispose_partial_redirects: new function, disposes of
-         redirection_undo_list and nulls the list
-       - execute_command_internal: use undo_partial_redirects
-
-execute_cmd.h
-       - undo_partial_redirects: extern declaration
-       - dispose_partial_redirects: extern declaration
-
-subst.c
-       - exp_jump_to_top_level: if we are throwing an expansion error while
-         expanding a redirection (expanding_redir != 0), undo any undoable
-         redirections by calling undo_partial_redirects() so we don't leave
-         any in place
-
-variables.c
-       - initialize_shell_variables: if SHELLOPTS is in the environment,
-         unset the readonly attribute on any existing variable with that
-         name. It may have been created by processing a -o option on the
-         command line.  Fixes issue reported by Stephane Chazelas
-         <stephane.chazelas@gmail.com>
-
-                                  3/16
-                                  ----
-lib/readline/histfile.c
-       - read_history_range: short-circuit and do nothing if the history file
-         is of 0 size
-       - read_history_range: make sure the buffer is zero-terminated so the
-         timestamp tests work right for history files of 1 character.  Report
-         and recommended fix from Denis Martinez <denis.martinez@gmx.com>
-
-lib/readline/complete.c
-       - compute_lcd_of_matches: when trying to compute the common prefix
-         of a set of matches while performing case-insensitive completion
-         matching, don't sort the match list unless rl_sort_completion_matches
-         is non-zero.  Fixes problem reported by Roee Bar <roee@arista.com>
-
-                                  3/18
-                                  ----
-subst.c
-       - extract_dollar_brace_string: handle process substitution embedded in
-         a ${...} expansion in the same way as command substitution.  Reported
-         by D630 <d630@posteo.net>
-
-parse.y
-       - LEX_GTLT: new flag, set by parse_matched_pair when a `<' or '>' is
-         read
-       - parse_matched_pair: handle an embedded process substitution like an
-         embedded command substitution if we are parsing an array index or
-         a dollar-brace expansion.  Reported by D630 <d630@posteo.net>
-
-                                  3/21
-                                  ----
-subst.h
-       - ASS_NOEVAL, ASS_NOLONGJMP: new values for assignments, used by
-         make_variable_value
-
-variables.c
-       - make_variable_value: ASS_NOEVAL: if this is set, don't attempt
-         arithmetic evaluation or case modification, just produce the value
-         (still honor ASS_APPEND)
-       - make_variable_value: ASS_NOLONGJMP: don't longjmp back to top_level
-         if arithmetic evaluation fails due to a syntax error
-       - bind_variable_internal: make sure aflags is passed to all calls to
-         make_variable_value
-       - push_temp_var: add ASS_NOLONGJMP to the flags passed to
-         bind_variable_internal.  Fixes bug reported by D630 <d630@posteo.net>
-
-bashline.c
-       - bash_execute_unix_command: don't bother to attempt optimization by
-         checking whether the call to parse_and_execute changes $READLINE_LINE;
-         it can be defeated by the new code that optimizes appends to string
-         variables. Bug reported by Grisha Levit <grishalevit@gmail.com>
-
-                                  3/22
-                                  ----
-subst.c
-       - expand_string_for_rhs: re-apply change from 2/19 based on discussion
-         on the austin-group mailing list about how unquoted ${var-$*}
-         expands when IFS is null.  Originally reported by Martijn Dekker
-         <martijn@inlv.org>
-
-                                  3/25
-                                  ----
-parse.y
-       - read_token_word: if we read a WORD immediately after a CASE, FOR, or
-         SELECT, increment `expecting_in_token' to note that we're going to
-         be reading IN as the next non-newline token
-       - special_case_tokens: if we're expecting an IN (expecting_in_token > 0)
-         and we have an "in", return IN and decrement expecting_in_token. This
-         is a better implementation of Posix grammar rule 6 than the previous
-         code in that function (which is still there for posterity, but should
-         eventually be removed).  Fixes bug reported by Torka Noda
-         <kanito.tasoga@gmail.com>
-
-subst.c
-       - string_list_pos_params: if the expansion is not quoted, and IFS is
-         null, return a string containing the quoted positional parameters
-         separated by spaces.  Callers know what to do with the string
-       - parameter_brace_substring,parameter_brace_remove_pattern,
-         parameter_brace_transform,parameter_brace_patsub,parameter_brace_casemod:
-         for the VT_POSPARMS case, after calling the operator-specific
-         expansion function, which eventually calls string_list_pos_params,
-         leave the returned string alone, since it's already quoted properly
-       - parameter_brace_expand: after calling the above functions to perform
-         expansions, if the expansion is being performed on an unquoted $*
-         when IFS is null, set the W_SPLITSPACE flag in the return WORD_DESC
-         so that splitting on spaces is performed on the already-quoted word.
-         Fixes bug reported by Grisha Levit <grishalevit@gmail.com>
-
-                                  3/28
-                                  ----
-subst.c
-       - process_substitute: change so the subshell doesn't inherit the 'v'
-         option, like command substitution now does (as of bash-4.4).
-         Suggested by Grisha Levit <grishalevit@gmail.com>
-
-                                  3/30
-                                  ----
-subst.c
-       - parameter_brace_casemod: now takes a pflags parameter, like
-         parameter_brace_patsub; changed callers
-       - parameter_brace_transform: now takes a pflags parameter, like
-         parameter_brace_patsub; changed callers
-       - pos_params_pat_subst,pos_params_modcase: if mflags indicates we're
-         on the rhs of an assignment statement and not going to perform
-         word splitting, we're expanding $*, and $IFS is null, make sure
-         string_list_pos_params treats the expansion as double-quoted, so
-         the positional parameters will be concatenated.  Fixes bug reported
-         by Grisha Levit <grishalevit@gmail.com>
-
-                                  3/31
-                                  ----
-doc/{bash.1,bashref.texi}
-       - add notes to the description of pipelines emphasizing that each
-         element of a pipeline is executed in a subshell, referring to the
-         description of a command execution environment, and that the
-         lastpipe option can modify that behavior. From a discussion with
-         Jean Delvare <jdelvare@suse.de>
-
-                                   4/1
-                                   ---
-subst.c
-       - expand_word_internal: set had_quoted_null to note for later if we
-         expand '', "", or "$x" when x is unset
-       - expand_word_internal: if we expand "$param" (or "${param}") and we
-         come back with a single word with the W_HAVEQUOTEDNULL flag set,
-         make sure we set had_quoted_null to remember it for later. In this
-         case, if we already have seen a quoted null and we expanded $@ in
-         this (sub)string expansion, we don't want to do any of the special
-         $@ handling. In particular, we don't want to set *expanded_something,
-         because that will result in word splitting and quoted null removal.
-         Fixes bug reported by Grisha Levit <grishalevit@gmail.com>
-       - parameter_brace_patsub: when expanding ${*/pat/sub} in the case
-         where ifs_is_null != 0 and (pflags & PF_NOSPLIT2) (meaning we aren't
-         going to be doing word splitting), pass MATCH_ASSIGNRHS so we do
-         the right thing in this case. Part of a set of cases inspired by
-         Grisha Levit <grishalevit@gmail.com>
-       - param_expand: case '*': if we are on the rhs of an assignment
-         (PF_ASSIGNRHS) and ifs is unset, and $1 == " ", we need to make sure
-         string_list_dollar_at gets called with Q_DOUBLE_QUOTES so it quotes
-         the positional parameters before joining them into a string with
-         string_list_internal.  Otherwise, that first space gets removed by
-         the implicit word splitting that gets performed.  Reported by
-         Grisha Levit <grishalevit@gmail.com>
-
-array.c
-       - array_patsub,array_modcase: handle ${A[*]} identically to $* when
-         not quoted and IFS is null (separate with spaces).  Makes things
-         like ${A[*]/x/y} behave the same as ${*/x/y} when IFS is null
-
-subst.c
-       - parameter_brace_patsub,parameter_brace_casemod: if expanding ${A[*]}
-         when the match is on the rhs of an assignment statement (PF_ASSIGNRHS)
-         and ifs is null, make sure the match is performed as if it were
-         quoted
-       - parameter_brace_substring: now takes a PFLAGS argument
-       - parameter_brace_substring: if expanding $* in a context where we
-         don't want to do word splitting (expand_no_split_dollar_star &&
-         PF_NOSPLIT2), make sure we expand $* as if it were quoted
-       - parameter_brace_substring: if expanding an unquoted $* on the rhs of
-         an assignment statement when IFS is null, make sure we expand the $*
-         as if it were quoted
-
-                                   4/4
-                                   ---
-doc/{bash.1,bashref.texi}
-       - read: document that a delim argument of '' terminates each line when
-         a NUL character appears
-
-                                   4/5
-                                   ---
-subst.c
-       - parameter_brace_expand_word: handle case where unquoted $@ is
-         expanded in a context where word splitting is not performed (PF_NOSPLIT2)
-         and IFS is not equal to the standard value
-       - param_expand: handle case where unquoted $@ is expanded in a context
-         where word splitting is not performed (PF_NOSPLIT2) and IFS is not
-         equal to the standard value.  Fixes bug with IFS == $1 when expanding
-         unquoted $@ reported by Grisha Levit <grishalevit@gmail.com>
-
-                                   4/7
-                                   ---
-subst.c
-       - pos_params_pat_subst: if MATCH_ASSIGNRHS is set, don't expand $*
-         as quoted unless expand_no_split_dollar_star is also set. Fixes
-         expansion bug reported on 4/4 by Grisha Levit <grishalevit@gmail.com>
-       - parameter_brace_transform: if we transform unquoted A[@] or A[*]
-         when IFS is null, don't quote the result of array_transform in the
-         same way we don't quote the result of parameter_list_transform,
-         since it will come back quoted.  Fixes bug reported by
-         Grisha Levit <grishalevit@gmail.com>
-       - list_transform: if we transform unquoted $* or ${a[*]} when IFS is
-         null and expand_no_split_dollar_star is non-zero, call
-         string_list_pos_params with Q_DOUBLE_QUOTES to inhibit splitting.
-         We do this in all cases except @Q, which is inconsistent but more
-         intuitive.
-         Fixes bug reported by Grisha Levit <grishalevit@gmail.com>
-
-                                   4/8
-                                   ---
-builtins/read.def
-       - read_mbchar: if unbuffered == 2, we are running read -N and need to
-         use zreadn to read the rest of the multibyte char, since the
-         previous call to zreadn may have buffered characters.  Fixes bug
-         reported by Stephane Chazelas <stephane.chazelas@gmail.com>
-
-pathexp.h
-       - QGLOB_CTLESC: new flag for quote_string_for_globbing: means to turn
-         CTLESC CTLESC (quoted CTLESC that's usually removed as part of
-         word splitting or quote removal) into CTLESC
-
-pathexp.c
-       - quote_string_for_globbing: if QGLOB_CTLESC is present in flags,
-         turn CTLESC CTLESC into CTLESC, even if the first CTLESC is preceded
-         by a backslash. Callers can't do this because the remaining CTLESC
-         will be treated as a quoting character and turned into a backslash
-
-execute_cmd.c
-       - execute_case_command: if the pattern is not quoted, make sure to tell
-         quote_string_for_globbing to turn CTLESC CTLESC into CTLESC by
-         passing QGLOB_CTLESC.  Fixes bug reported 4/2 by Martijn Dekker
-         <martijn@inlv.org>
-
-                                   4/9
-                                   ---
-subst.c
-       - string_transform: after calling ansiexpand for the `E' transformation,
-         need to call dequote_escapes because ansiexpand assumes it is being
-         called by the parser and arranges for ansicstr to quote CTLESC and
-         CTLNUL with CTLESC.  Reported by Grisha Levit <grishalevit@gmail.com>
-
-variables.c
-       - mk_env_string: when exporting functions, run them through
-         dequote_escapes because any strings containing CTLESC or CTLNUL are
-         still quoted with CTLESC.  Reported by Grisha Levit
-         <grishalevit@gmail.com>
-
-subst.[ch]
-       - quote_escapes,dequote_escapes: now take const char * argument
-
-execute_cmd.c
-       - execute_intern_function: if the function name contains CTLESC, run
-         it through dequote_escapes just in case it got CTLESC quoting
-         CTLESC or CTLNUL from the parser
-
-                                  4/11
-                                  ----
-eval.c
-       - reader_loop: make sure PS0 is expanded and displayed before
-         incrementing the command number
-
-parse.y
-       - prompt_history_number:  function to make history number as reported
-         by \!, or posix mode !!, be the same index that the (possibly multi-
-         line) command will be stored with. The history library increments
-         history_offset as soon as a new line is entered, and it's up to the
-         history code to store the second and subsequent lines of a command
-         in the same history entry.  If we are expanding PS0 or PS4, or
-         a ${var@P} expansion, we're already past the history entry no
-         matter what.  Inspired by patch from Grisha Levit
-         <grishalevit@gmail.com>
-       - decode_prompt_string: call prompt_history_number
-       - decode_prompt_string: if expanding PS4 or ${var@P}, make the
-         command number the same as reported by PS0/PS1/PS2
-
-                                  4/12
-                                  ----
-support/Makefile.in
-       - clean: remove man2html.o as part of this production instead of
-         waiting until `distclean'. Reported by chrlis <chrlis@sbrella.com>
-
-subst.c
-       - string_list_pos_params: if we are expanding $* in a context where
-         IFS is null and expand_no_split_dollar_star is set (no word
-         splitting), use string_list_dollar_star to force the positional
-         parameters to be joined without first separating them into a list
-         and attempting to join them later.  Fixes problem with constructs
-         like ${var=${*:1}}, pointed out by Grisha Levit
-         <grishalevit@gmail.com>. This undoes change to @Q from 4/7, so
-         list_transform change reverted
-
-                                  4/19
-                                  ----
-builtins.h
-       - added BUILTINS_H include guard
-
-examples/loadables/Makefile.in
-       - install loadables.h as sample include file, along with Makefile.inc
-
-                                  4/23
-                                  ----
-bashline.c
-       - maybe_make_readline_line: don't try to do anything if the passed
-         NEW_LINE is NULL.  Report from Jaren Stangret <sirjaren@gmail.com>,
-         fix from Eduardo Bustamante <dualbus@gmail.com>
-
-                                  4/24
-                                  ----
-parse.y
-       - xparse_dolparen: if the current token (the last thing read_token
-         returned to yylex) is shell_eof_token, assume that it is the new
-         bison lookahead token and clear it. Fixes bug reported by
-         Werner Fink <werner@suse.de>
-
-                                  4/25
-                                  ----
-doc/{bash.1,bashref.texi}
-       - cmdhist: clarify that this option only has an effect if history is
-         enabled. Suggested by Matthew Braun <matthew@powerplug.com>
-
-                                  4/26
-                                  ----
-jobs.c
-       - wait_for: if a non-interactive shell with job control enabled (set -m)
-         detects that a foreground job died due to SIGINT, act as if the shell
-         also received the SIGINT. Prompted by an austin-group-l discussion
-       - waitchld: run SIGCHLD trap for each child exited even if job control
-         is not enabled when in Posix mode. Prompted by an austin-group-l
-         discussion
-
-                                  4/27
-                                  ----
-lib/readline/histfile.c
-       - read_history_range: if the history file is empty, free the history
-         filename before returning. Report and fix from Eduardo Bustamante
-         <dualbus@gmail.com>
-
-lib/readline/bind.c
-       - rl_parse_and_bind: make sure there is something, even if it's a
-         quoted empty string, before the `:' in a key binding.  Report from
-         Eduardo Bustamante <dualbus@gmail.com>
-       - rl_parse_and_bind: if the right side of a key binding starts with a
-         quote, make sure there's a matching close quote before treating it
-         as a macro definition
-       - rl_translate_keyseq: if a key sequence ends with \C- or \M- (or
-         \C-\M-) make sure we break out of the loop if moving to the character
-         to be translated is a NUL. Old code did this only in the \C-\M-
-         case. Report from Eduardo Bustamante <dualbus@gmail.com>
-
-                                  4/28
-                                  ----
-lib/glob/sm_loop.c
-       - GMATCH: implement a clever technique from glibc that avoids
-         backtracking past a `*' if we've already chosen to use it and need
-         matches beyond it.  Look at https://research.swtch.com/glob for a
-         longer explanation. This results in a significant speedup for globs
-         with multiple instances of `*', especially with more than 4.
-
-                                   5/2
-                                   ---
-lib/readline/bind.c
-       - rl_translate_keyseq: make sure a trailing backslash in the key
-         sequence is preserved. Report from Eduardo Bustamante
-         <dualbus@gmail.com>
-
-                                   5/3
-                                   ---
-builtins/builtin.def
-       - builtin_builtin: make sure to set  this_shell_builtin to the builtin
-         command being executed, overwriting `builtin'. Leave
-         last_shell_builtin alone.  Fixes bug reported by Luiz Angelo Daros
-         de Luca <luizluca@gmail.com>
-
-jobs.c
-       - waitchld: modify change of 4/26 to run SIGCHLD traps even if job
-         control is not enabled
-
-lib/readline/misc.c
-       - rl_get_previous_history: if we didn't find a previous history entry
-         to use, call rl_maybe_unsave_line before returning because we
-         aren't going to use the saved line, and it has the same undo list
-         as rl_undo_list.  Fixes fuzzing bug reported by Eduardo Bustamante
-         <dualbus@gmail.com>
-       - rl_get_{next,previous}_history: if there is no history list, don't
-         bother doing anything
-
-                                   5/4
-                                   ---
-expr.c
-       - popexp: if we error out due to stack underflow, make sure to zero out
-         expression and lasttp; they may contain undefined values we don't
-         want evalerror to print
-       - expr_unwind: handle expr_depth decrementing below zero
-       - evalexp: restore the old value of evalbuf even if we error and
-         longjmp; we may have called evalexp recursively
-       - evalerror: make sure expression is non-NULL before trying to print it.
-         These fix fuzzing bug reported by Eduardo Bustamante
-         <dualbus@gmail.com>, happens only in cases where we don't longjmp on
-         a fatal expansion error
-
-                                   5/5
-                                   ---
-parse.y
-       - read_token_word: when checking for a word that's a target of a
-         redirection, we can potentially call valid_array_reference, which
-         can end up calling the parser recursively. If it does that, we
-         need to make sure that yylval.word doesn't change, so we set it back
-         to the_word. Fixes another fuzzing bug
-
-parse.y
-       - arith_for_command: make syntax errors in the arithmetic for command
-         (signaled by make_arith_for_command returning NULL) more like
-         language syntax errors by calling YYERROR. Avoids complicated
-         attempts at error recovery and dealing with NULL returns from
-         command productions. Pointed out by Eduardo Bustamante
-         <dualbus@gmail.com>
-
-lib/readline/kill.c
-       - _rl_copy_to_kill_ring: make sure the current slot in the kill ring
-         has something in it, even if the last command was a kill, before
-         trying to modify it. Another fuzzing bug
-
-                                   5/6
-                                   ---
-builtins/read.def
-       - read_builtin: if we see a backslash when not in raw mode (not -r),
-         only back up `i' when we read the next character if we know we added
-         a CTLESC the last time through the loop (skip_ctlesc == 0),
-         especially if i == 0. Another fuzzing bug from Eduardo Bustamante
-         <dualbus@gmail.com>
-
-                                   5/8
-                                   ---
-builtins/read.def
-       - read_mbchar: handle zreadn/zreadc/zread returning EOF in the middle
-         of an incomplete multibyte sequence.  Fixes another fuzzing bug
-       - read_builtin: use mb_cur_max instead of constant 4 when deciding
-         whether the next character can exceed the number of bytes available
-         in input_string
-
-lib/readline/input.c
-       - MinGW: include <conio.h> before <io.h>. Fix from Eli Zaretskii
-         <eliz@gnu.org>
-
-builtins/read.def
-       - read_builtin: if we get input from readline, we need to get the
-         remainder of a multibyte character from rlbuf instead of calling
-         read_mbchar. Bug reported by Eduardo Bustamante <dualbus@gmail.com>
-
-                                   5/9
-                                   ---
-parse.y
-       - token_is_assignment: use the allocated buffer approach in all cases,
-         not just if we're not using bash malloc. This avoids the assignment
-         to t[i+1] writing beyond the end of the allocated token if
-         i == token_buffer_size - 1. Another fuzzing bug
-       - xparse_dolparen: if parse_string returns < 0, we clear out the
-         current shell_input_line before performing a longjmp, since we're
-         abandoning parsing of this command.  This is consistent with how
-         the parser resynchronizes after other syntax errors
-       - GRAMMAR: add 'error yacc_EOF' production to handle a syntax error
-         that's immediately followed by an EOF after resynchronization.
-         Fixes another fuzzing bug
-
-                                  5/10
-                                  ----
-lib/readline/text.c
-       - _rl_set_mark_at_pos: don't let the mark be set to a position < 0.
-         Fixes a fuzzing bug
-       - rl_exchange_point_and_mark: don't do anything if the mark is already
-         less than 0
-
-                                  5/12
-                                  ----
-lib/readline/rlmbutil.h
-       - wchar_t: make sure this is defined as int if multibyte characters
-         aren't supported
-
-lib/readline/text.c
-       - _rl_change_case: don't force use of ascii toupper and tolower if
-         isascii returns true; it's not defined to work on characters outside
-         the 0..255 (really 0..127) range.  Bug reported by
-         Eduardo Bustamante <dualbus@gmail.com>
-
-                                  5/14
-                                  ----
-lib/readline/text.c
-       - rl_change_case: handle case where the old and new characters (after
-         the case change) are not the same number of bytes. Pointed out in
-         http://lists.gnu.org/archive/html/bug-bash/2015-01/msg00091.html
-
-lib/readline/display.c
-       - expand_prompt: use `ret' as first parameter to _rl_find_prev_mbchar
-         since that needs the base of the array. Bug from fuzzing reported by
-         Eduardo Bustamante <dualbus@gmail.com>
-
-                                  5/15
-                                  ----
-execute_cmd.c
-       - execute_simple_command, execute_arith_command, execute_cond_command,
-         execute_arith_for_command: adjust the line number when executing a
-         function interactively so that the first command in the function is
-         line 1, not line 0, as Posix requires.  Reported by Robert Elz
-         <kre@bmunnari.OZ.AU>
-       - execute_simple_command, execute_arith_command, execute_cond_command,
-         execute_arith_for_command: ony adjust the line number when executing
-         a function interactively if we are not sourcing a file
-         (sourcelevel == 0), so this is consistent everywhere we adjust the
-         line number
-
-                                  5/16
-                                  ----
-bashline.c
-       - bash_directory_completion_hook: when calling split_at_delims to see
-         whether a ${ or $( is closed, use the right value for `start' relative
-         to the substring beginning at `$'.  Bug from fuzzing reported by
-         Eduardo Bustamante <dualbus@gmail.com>
-
-expr.c
-       - expassign: if the call to expcond generates a syntax error in a
-         context when the shell won't longjmp (like when evaluating $PS1),
-         it will end up NULL and we need to catch it before calling strlen.
-         Bug from fuzzing reported by Eduardo Bustamante <dualbus@gmail.com>
-
-examples/bash-completion/
-       - new place to include a current or recent version of the
-         bash-completion package
-
-                                  5/19
-                                  ----
-lib/readline/display.c
-       - CHECK_INV_LBREAKS: new versions for multibyte and single-byte chars,
-         so the multibyte version can check and increase the size of
-         line_state_invisible->wbsize and line_state_invisible->wrapped_line,
-         callers who call CHECK_INV_LBREAKS must update
-         wrapped_line[newlines] when in HANDLE_MULTIBYTE mode. Fuzzing bug
-         reported by Eduardo Bustamante <dualbus@gmail.com>
-
-                                  5/24
-                                  ----
-lib/readline/search.c
-       - _rl_nsearch_callback,noninc_search: handle _rl_search_getchar
-         returning -1 (EOF or read error) by aborting the search.
-         Fuzzing bug reported by Eduardo Bustamante <dualbus@gmail.com>
-
-                                  5/25
-                                  ----
-variables.c
-       - localvar_inherit: new variable, controlled by shopt localvar_inherit
-         option
-       - make_local_variable: if localvar_inherit is set, the new local
-         variable inherits a previous scope's variable's value, attributes
-         (except nameref), and dynamic variable information. If a local
-         variable inherits a value, the local is not invisible
-
-builtins/shopt.def
-       - localvar_inherit: new option
-
-doc/{bash.1,bashref.texi}
-       - localvar_inherit: document new shopt option
-
-                                  5/29
-                                  ----
-lib/readline/readline.c
-       - _rl_subseq_result: only return -1 and back up the chain if we are
-         dealing with a result (r) that's already < 0 and we are at the end
-         of a multi-key sequence. Otherwise, a failing readline command (e.g.,
-         delete-char at the end of a line) could cause this code to be
-         executed.  Report from Nuzhna Pomoshch <nuzhna_pomoshch@yahoo.com>
-
-lib/readline/histfile.c
-       - read_history_range: if the file isn't a regular file, return an
-         error. Bug report from Eduardo Bustamante <dualbus@gmail.com>,
-         relaying from IRC
-
-                                  5/30
-                                  ----
-variables.c
-       - set_pwd: if in Posix mode, and PWD appears in initial environment as
-         an absolute pathname to the current directory, set PWD to the result
-         of canonicalizing the environment value, or to the physical path if
-         canonicalization fails. From a suggestion by Eduardo Bustamante
-         <dualbus@gmail.com>
-
-                                  5/31
-                                  ----
-builtins/read.def
-       - read_builtin: if -n or -N option is supplied with a 0 argument,
-         don't attempt to read any characters; bail out right away. Reported
-         by Eduardo Bustamante <dualbus@gmail.com>, relaying from IRC
-
-                                   6/3
-                                   ---
-config.h.in
-       - HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC: add define, used by stat-time.h
-         to construct a timespec from struct stat. Report and fix from
-         Siteshwar Vashisht <svashisht@redhat.com>
-
-variables.h
-       - att_regenerate: new internal variable attribute: if set, regenerate
-         dynamic variable's value when it's exported and we are creating the
-         export environment
-
-variables.c
-       - init_dynamic_variables: LINENO, EPOCHSECONDS, EPOCHREALTIME: set
-         internal regenerate attribute for these dynamic variables
-       - make_env_array_from_var_list: if a dynamic variable has the
-         regenerate attribute set, call the dynamic value function to generate
-         an updated value before placing it in the environment.  From a report
-         about exporting LINENO from Robert Elz <kre@bmunnari.OZ.AU>
-
-                                   6/4
-                                   ---
-lib/glob/sm_loop.c
-       - BRACKMATCH: at the matched: label, make sure we get the bracket
-         character we're looking for (char class, collating symbol. etc.)
-         before we decrement the count of braces we're looking for. Eventually
-         we could do something about badly-formed bracket expressions
-
-                                   6/7
-                                   ---
-lib/readline/histlib.h
-       - strchr: only declare if  __STDC__ is not defined, since we already
-         include <string.h>.  Report from Chi-Hsuan Yen <yan12125@gmail.com>
-
-                                   6/9
-                                   ---
-lib/readline/display.c
-       - update_line: when wrapping lines with multibyte chars at the end of
-         the new line being wrapped, make sure we copy the NULL byte in old
-         when moving the contents of old around. Fuzzing bug reported by
-         Eduardo Bustamante <dualbus@gmail.com>
-
-lib/readline/mbutil.c
-       - _rl_get_char_len: use MB_CUR_MAX in the call to mbrlen; there's no
-         need to look at the rest of the string when we're just interested in
-         the length of a single character
-
-                                  6/12
-                                  ----
-jobs.c
-       - wait_for: when waiting for the next child to exit (ANY_PID), make
-         sure to restore the old SIGINT handler before returning.  Fixes
-         https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=864649
-
-                                  6/14
-                                  ----
-lib/readline/display.c
-       - expand_prompt: make sure `ret' is NULL-terminated before calling
-         _rl_prev_mbchar_internal, since that calls strlen, which requires
-         the passed string to be NULL-terminated. Another fuzzing bug.
-
-                                  6/15
-                                  ----
-lib/readline/isearch.c
-       - _rl_isearch_fini: use rl_replace_line instead of strcpy so rl_end
-         gets set right
-       - _rl_isearch_fini: after restoring rl_point, call _rl_fix_point so
-         we don't set rl_point > rl_end. Fixes a fuzzing bug
-
-lib/readline/mbutil.c
-       - _rl_find_next_mbchar_internal: if _rl_adjust_point returns < 0,
-         just punt, treat the value as a byte, and advance point by 1
-
-lib/readline/util.c
-       - rl_tilde_expand: rearrange code in the whitespace loop so that
-         `start' gets tested first and we don't try to dereference
-         rl_line_buffer[-1]. Another fuzzing bug from dualbus@gmail.com
-
-bashline.c
-       - bash_dequote_filename: make sure that pointers that are used as
-         indices into sh_syntaxtab are cast to unsigned char first, to
-         avoid problems with signed chars > 128. Fixes a fuzzing bug.
-
-lib/readline/kill.c
-       - _rl_copy_to_kill_ring: when reallocating the kill ring, make sure to
-         allocate one more than the max number of kills so the loop that
-         copies the kill ring entries down runs right (and to mirror the
-         initial allocation). Fixes a fuzzing bug.
-
-lib/readline/isearch.c
-       - _rl_isearch_dispatch: make sure that cxt->sline_index never goes < 0
-         even when searching a line in reverse. Fixes a fuzzing bug
-
-                                  6/16
-                                  ----
-parse.y
-       - xparse_dolparen: short-circuit immediately if passed a empty string
-
-lib/readline/display.c
-       - update_line: when wrapping multibyte characters, make sure we deal
-         with WCWIDTH returning -1. Fixes a fuzzing bug
-
-                                  6/17
-                                  ----
-execute_cmd.c
-       - execute_coproc: make sure `invert' is set before trying to use it
-         when returning failure on invalid coproc name.  Report and fix from
-         Eduardo Bustamante <dualbus@gmail.com>
-       - execute_command_internal: make sure execute_coproc sets
-         last_command_exit_value if it returns failure, so an invalid name
-         can set $? = 1.  Report and fix from Eduardo Bustamante
-         <dualbus@gmail.com>
-
-lib/readline/display.c
-       - update_line: make sure all references to `wrapped_line' are wrapped
-         with #ifdef HANDLE_MULTIBYTE.  Report and fix from Eduardo Bustamante
-         <dualbus@gmail.com>
-
-lib/readline/vi_mode.c
-       - _rl_vi_change_char: don't use rl_point++ when you mean to move
-         forward a character; use _rl_vi_append_forward to account for
-         multibyte characters and take vi end of line handling into account
-       - _rl_vi_last_replacement: now an array of chars whether we are
-         using multibyte chars or not. If we're not, the character we read
-         to use as the replacement is saved as the first element of the array
-       - rl_vi_change_char,_rl_vi_callback_change_char: changes to deal with
-         _rl_vi_last_replacement being an array.  Fixes bug reported by
-         Eduardo Bustamante <dualbus@gmail.com>
-
-lib/readline/mbutil.c
-       - _rl_get_char_len: look at at most MB_CUR_MAX characters, but maybe
-         fewer if the length of the string is less
-
-builtins/bind.def
-       - unbind_keyseq: new function for the -r option; checks whether the
-         key sequence is actually bound before trying to bind it to NULL.
-         Partial fix for https://savannah.gnu.org/support/?109329
-
-parse.y
-       - augment `error yacc_EOF' production to call YYABORT in non-interactive
-         shells or calls to parse_and_execute (eval, command substitution,
-         etc.) Fixes bug reported by Martijn Dekker <martijn@inlv.org>
-
-                                  6/19
-                                  ----
-bashline.c
-       - edit_and_execute_command: don't add rl_line_buffer to the history
-         list if it's empty; consistent with how other code treats an empty
-         line
-
-execute_cmd.c
-       - execute_builtin: make sure to preserve the temporary env across the
-         execution of the `read' builtin or `fc' builtin if HISTORY is
-         defined, in case `read -e' calls edit-and-execute-command.  Should
-         have no side effects. Reported by Eduardo Bustamante
-         <dualbus@gmail.com>
-
-general.c
-       - line_isblank: new function: returns true if passed string is composed
-         entirely of blanks
-
-general.h
-       - line_isblank: new extern declaration
-
-parse.y
-       - history_delimiting_chars: return "" for a blank line, since there's
-         nothing to delimit with `;'
-
-                                  6/21
-                                  ----
-jobs.c
-       - wait_for: make sure to call restore_sigint_handler before returning
-         if we return out of the loop due to no children. Report from
-         Eduardo Bustamante <dualbus@gmail.com>
-
-subst.c
-       - expand_word_internal: if split_on_spaces is set, and the word is
-         unquoted, and IFS is null, split the results of the previous steps
-         on $' \t\n' instead of just ' '. This relies on the previous steps
-         quoting the portions of the word that should not be split.  Fixes
-         bug reported by Kevin Brodsky <corax26@gmail.com>
-
-expr.c
-       - evalexp: after running expr_unwind, make sure we reset expr_depth
-         to 0 for the next call
-       - expr_streval: if after a call to get_array_value (which can call
-         the expression evaluator recursively) we discover that expr_depth
-         is less than it was before we called it, we assume there has been
-         some kind of error and an expr_unwind, so we treat it as an
-         error and either longjmp back to the expression top level or return
-         0 immediately. Fixes bug reported by Eduardo Bustamante
-         <dualbus@gmail.com>
-
-                                  6/23
-                                  ----
-doc/{bash.1,bashref.texi}
-       - add text noting that $* and ${array[*]} (unquoted) can also expand
-         to multiple words
-
-                                  6/29
-                                  ----
-general.[ch]
-       - default_columns: new function, returns the value of COLUMNS, or
-         refreshes it if check_window_size is set and COLUMNS is unset. By
-         default, it returns 80
-
-execute_cmd.c
-       - select_query: use default_columns() instead of fetching value of
-         COLUMNS directly
-
-builtins/help.def
-       - show_builtin_command_help: use default_columns() instead of fetching
-         value of COLUMNS directly
-
-                                  6/30
-                                  ----
-builtins/read.def
-       - read_builtin: call QUIT during the read loop, just in case we get a
-         signal we should act on that didn't cause read to be interrupted.
-         Fixes https://bugzilla.redhat.com/show_bug.cgi?id=1466737
-       - read_builtin: if -n or -N is supplied with a 0 argument, try a zero-
-         length read to detect errors and return failure if that read returns
-         a value < 0. Suggested by dualbus@gmail.com
-
-                                   7/4
-                                   ---
-bashhist.c
-       - maybe_add_history: keep track of whether the current line is a shell
-         comment, even if we're not adding it because it's in a multi-line
-         command, so we use appropriate delimiters between it and any
-         subsequent lines. Fixes bug reported by Grisha Levit
-         <grishalevit@gmail.com> back on 2/28/2017
-
-bashline.c
-       - operate_and_get_next: if given an explicit argument, use that to
-         choose which line in the history to use.
-
-lib/readline/doc/rluser.texi,doc/bash.1
-       - operate-and-get-next: document new effect of explicit numeric arg
-
-lib/readline/complete.c
-       - fnprint: make sure print_len is initialized before using it on
-         systems without multibyte character support.  Report and fix from
-         Juan Manuel Guerrero <juan.guerrero@gmx.de>
-
-                                   7/6
-                                   ---
-builtins/printf.def
-       - PRETURN,printf_builtin: check variable returned by bind_printf_variable,
-         return failure if that indicates we can't perform an assignment
-         because the variable is marked readonly or noassign. Fixes bug
-         reported by Arnaud Gaillard <arnaud.mgaillard@gmail.com>
-
-                                   7/7
-                                   ---
-lib/readline/text.c
-       - rl_quoted_insert: new feature: a negative argument means to insert
-         the next -COUNT characters using quoted-insert. Original feature
-         from Jason Hood <jadoxa@yahoo.com.au>. Still needs work on
-         redisplay
-       - _rl_insert_next_callback: implement support for negative arguments
-         similar to rl_quoted_insert: we just insert one at a time and keep
-         increasing the count until it hits 0
-
-lib/readline/misc.c
-       - _rl_arg_callback: if the return value from _rl_arg_dispatch indicates
-         we should keep reading a numeric argument, update the message with
-         the new arg value
-
-                                   7/8
-                                   ---
-lib/readline/signals.c
-       - _rl_handle_signal: make sure all uses of any of the job control
-         signals are protected by a check for SIGTSTP being defined.  Report
-         from Juan Manuel Guerrero <juan.guerrero@gmx.de>
-
-                                  7/11
-                                  ----
-lib/readline/vi_mode.c
-       - rl_vi_replace: when making the new keymap for vi replacement mode,
-         make sure that ANYOTHERKEY is set correctly, otherwise some input
-         will cause _rl_dispatch to return -2 to the top level.  Fixes fuzzing
-         bug reported by Ben Wong <benjamin.a.wong@gmail.com>
-
-                                  7/19
-                                  ----
-builtins/read.def
-       - struct ttsave: make the attrs member a struct, not a pointer, to force
-         a structure copy that will survive a longjmp to another context.
-         Leaving it as a pointer to a local struct is not portable
-
-                                  9/10
-                                  ----
-execute_cmd.c
-       - execute_builtin: make sure that we set up the unwind-protect for
-         pop_scope (temporary_env is non-zero) so that the temporary env
-         is propagated to the current environment only for special builtins
-         (source/eval/unset) not run by the command builtin
-         (flags & CMD_COMMAND_BUILTIN == 0).  Fixes bug reported by
-         Martijn Dekker <martijn@inlv.org>
-
-                                  9/17
-                                  ----
-builtins/printf.def
-       - asciicode: don't use mblen to check whether or not a character is a
-         valid multibyte character; use mbtowc right away and then inspect
-         the return value.  Fixes bug reported by Stephane Chazelas
-         <stephane.chazelas@gmail.com>
-
-                                  9/27
-                                  ----
-{jobs,subst}.h
-       - move declaration of last_command_subst_pid to subst.h, since it's
-         declared in subst.c and doesn't depend on job control. Reported by
-         Martijn Dekker <martijn@inlv.org>
-
-builtins/read.def,variables.c
-       - fixed a couple of problems (READLINE, ARRAY_VARS) that prevented
-         the minimal config from building
-
-                                  10/1
-                                  ----
-parse.y
-       - special_case_tokens: if we are returning DO in a case where the last
-         two tokens read are `FOR' and `WORD' make sure we decrement
-         expecting_in_token.  Fixes bug reported by Martijn Dekker
-         <martijn@inlv.org>
-
-                                  10/4
-                                  ----
-subst.c
-       - expand_string_for_rhs: now takes an additional PFLAGS argument from
-         its caller (one so far); passes that through to call_expand_word_internal
-         as W_ASSIGNRHS. Fixes bug reported by Martijn Dekker
-         <martijn@inlv.org>
-       - expand_string_for_rhs: expanding b in ${a[:]=b} is now done as if
-         b were the rhs of an assignment statement. This means that splitting
-         isn't done, but tilde expansion is performed as if the statement
-         were `a=b'. Fixes splitting bug with $* reported by Martijn Dekker
-         <martijn@inlv.org>
-
-command.h
-       - W_NOASSNTILDE: new word flag, means to not perform tilde expansion
-         following a `:' even if the word has the W_ASSIGNRHS flag enabled
-
-subst.c
-       - expand_word_internal: if we see a `:' with the W_NOASSNTILDE flag
-         set, just add the character and inhibit any subsequent tilde
-         expansion. Currently not set anywhere, but it could be set in
-         expand_string_for_rhs to satisfy its peculiar semantics
-
-                                  10/6
-                                  ----
-lib/sh/casemod.c
-       - sh_modcase: convert even single-byte wide characters to wide upper
-         or lowercase equivalents to accommodate locales where single-byte
-         characters have multibyte upper and lower case conversions. Bug
-         reported by Stephane Chazelas <stephane.chazelas@gmail.com>
-
-                                  10/7
-                                  ----
-doc/{bash.1,bashref.texi}
-       - slight changes to the description of command_not_found_handle to
-         clarify that it's executed in a separate execution environment,
-         just like if the command was found. Reported by Martijn Dekker
-         <martijn@inlv.org>
-
-                                  10/8
-                                  ----
-lib/readline/doc/{history.3,hstech.texi}
-       - history_get: clarify the range of valid values for the OFFSET
-         argument. From a report by Kevin Ryde <user42_kevin@yahoo.com.au>
-
-                                  10/21
-                                  -----
-subst.c
-       - expand_string_for_rhs: set W_NOASSNTILDE if the operator is `='
-         for backwards compatibility with bash-4.4
-
-shell.c
-       - main: set positional parameters before running the startup files,
-         so the startup files can inspect $@.  Often-requested feature,
-         most recently from Stephane Chazelas <stephane.chazelas@gmail.com>
-
-                                  10/27
-                                  -----
-doc/{bash.1,bashref.texi}
-       - Arrays: add some clarifying language to make it clear that array
-         references that don't use the ${a[s]} syntax are subject to
-         globbing when passed as arguments to commands such as unset, and
-         should be quoted for safety. Change prompted by a report from
-         Eli Barzilay <eli@barzilay.org>
-
-parse.y
-       - parse_comsub: make sure we don't run off the end of the `ret'
-         buffer when checking for the here doc delimiter.  Report from
-         Jakub Wilk <jwilk@jwilk.net>, the result of a fuzzing test. Pointer
-         to place for the fix from Eduardo Bustamante <dualbus@gmail.com>
-
-                                  10/30
-                                  -----
-builtins/pushd.def
-       - get_directory_stack: make sure the current directory (element 0 of
-         the stack) is passed to polite_directory_format under the same
-         conditions as the rest of the stack entries (flags & 1). Otherwise
-         something like `cd ${DIRSTACK[0]}' will fail. Fixes bug reported
-         by Steve Jones <sjml@slohj.org>
-
-builtins/declare.def
-       - declare_internal: when checking for a `[' to see whether or not this
-         is an array variable declaration (declare -a foo[12]), make sure
-         we don't do the check if we're just dealing with shell functions.
-         Bug and pointer to fix from PJ Eby <pje@telecommunity.com>
-
-                                  11/1
-                                  ----
-parse.y
-       - parse_comsub: if we read a four-character word followed by a break
-         character, and that word is not one of the reserved words, set
-         lex_rwlen to 0 since we are no longer in a reserved word. It only
-         hurts if another break character immediately follows, so that test
-         succeeds again. Turn off the RESWDOK flag only if it's not a shell
-         metacharacter, too. Fixes bug reported by Kjetil Torgrim Homme
-         <kjetilho@scribus.ms.redpill-linpro.com>
-
-                                  11/3
-                                  ----
-lib/readline/isearch.c
-       - _rl_isearch_dispatch: if we are searching in reverse order, let
-         sline_index go to -1 to avoid searching the same line twice. It
-         gets reset right after that, so there's no danger of indexing into
-         the history line with a negative index.
-
-                                  11/7
-                                  ----
-execute_cmd.c
-       - time_command: only restore command->flags if CODE indicates we didn't
-         perform a longjmp back to top_level. If we did, `command' has already
-         been freed. Fixes bug reported on savannah by 
-         ukuvbu oibws <xyzdr4gon333@googlemail.com>
-         https://savannah.gnu.org/support/?109403
-
-                                  11/10
-                                  -----
-lib/sh/unicode.c
-       - u32cconv: make sure to initialize localconv to -1 (error) in case
-         we switch from a utf-8 locale to something else and call
-         iconv_close. Report from Egmont Koblinger <egmont@gmail.com>; fix
-         from Eduardo Bustamante <dualbus@gmail.com>
-
-                                  11/16
-                                  -----
-subst.c
-       - parse_comsub: istring_index should be a size_t to avoid integer
-         overflow when allocating large pieces of memory. Report and fix
-         from Siteshwar Vashisht <svashisht@redhat.com>, originally based on
-         http://lists.gnu.org/archive/html/bug-bash/2017-11/msg00047.html
-
-                                  11/24
-                                  -----
-lib/readline/bind.c
-       - rl_empty_keymap: new public function, returns non-zero if there are
-         no keys bound in the keymap passed as an argument
-
-lib/readline/readline.h
-       - rl_empty_keymap: new public extern declaration
-
-lib/readline/doc/rltech.texi
-       - rl_empty_keymap: document new function
-
-lib/readline/bind.c
-       - rl_generic_bind: keep track of the previous keymap and previous
-         index in a multi-key key sequence so we can remove an empty terminal
-         keymap and remove a previous override to ANYOTHERKEY. Right now,
-         this only works for one previous keymap level. Inspired by a report
-         from Clark Wang <dearvoid@gmail.com>
-
-                                  11/25
-                                  -----
-lib/readline/display.c
-       - _rl_update_final: make sure that computing the length of the visible
-         bottom line (botline_length) takes any invisible characters in the
-         prompt into account (woff). This value is used as part of the check
-         whether or not we want to remove the line-wrapping indicator on
-         terminals like xterm
-       - _rl_update_final: when removing the line-wrapping indicator on xterm,
-         make sure we take invisible characters in the prompt (woff) into
-         account when computing the character in the rightmost physical
-         screen position. Fixes cosmetic line-wrapping issue reported by
-         Egmont Koblinger <egmont@gmail.com>
-
-                                  11/27
-                                  -----
-lib/sh/ufuncs.c
-       - fsleep: if using select to implement sleep, use restart after
-         a signal interrupts the select and handle pending signals. If
-         pselect is available, use that instead and block SIGCHLD while
-         pselect is executing.
-         Fixes report from Thiruvadi Rajaraman <trajaraman@mvista.com>
-
-                                  11/28
-                                  -----
-lib/readline/signals.c
-       - rl_check_signals: new public function: a wrapper for RL_CHECK_SIGNALS
-         that can be used by applications that install a wrapper for
-         rl_getc (rl_getc_function) so they can respond to signals that
-         arrive while waiting for input in the same way as rl_getc. The app
-         can use rl_pending_signal() to get the most recently-received
-         signal. From a discussion about Gnuplot initiated by
-         Rin Okuyama <rokuyama@rk.phys.keio.ac.jp>
-
-lib/readline/readline.h
-       - rl_check_signals: new extern declaration
-
-lib/readline/doc/rltech.texi
-       - rl_check_signals: document new public function
-
-variables.c
-       - set_pwd: test for and force an inherited OLDPWD to be a directory
-         if OLDPWD_CHECK_DIRECTORY is defined in config-top.h (it is by
-         default). Issue raised by Mikulas Patocka <mikulas@twibright.com>
-
-config-top.h
-       - OLDPWD_CHECK_DIRECTORY: new define, defined to 1 by default
-
-                                  11/29
-                                  -----
-Makefile.in
-       - pathexp.o: add dependencies on libintl.h.  Reported by
-         Ross Burton <ross@burtonini.com>
-
-                                  12/1
-                                  ----
-lib/sh/ufuncs.c
-       - fsleep: add blocking and releasing SIGCHLD using sigprocmask
-         around call to select(2) even if pselect(2) is not available
-
-                                  12/3
-                                  ----
-execute_cmd.c
-       - coproc_setstatus: new utility function, take a pointer to a coproc
-         and a status and mark the coproc as dead and having been reaped
-         with that status. Used by child processes who want to invalidate
-         the coproc's pid
-
-                                  12/5
-                                  ----
-subst.c
-       - process_substitute: instead of just having a flag to denote that a
-         file descriptor is connected to a process substitution, store the
-         pid of the child process (still needs work)
-       - find_procsub_child,set_procsub_status,reap_procsubs: utility
-         functions to allow the job control code to detect that a process
-         substitution child has died and deallocate the file descriptors
-         or pathname
-
-subst.h
-       - find_procsub_child,set_procsub_status,reap_procsubs: extern
-         declarations
-
-nojobs.c
-       - set_pid_status: if we are reaping a process substitution, call
-         set_procsub_status to record the fact
-
-jobs.c
-       - waitchld: if we are reaping a process substitution, call
-         set_procsub_status to record the fact. Doesn't really do anything
-         yet
-
-                                  12/6
-                                  ----
-execute_cmd.c
-       - execute_command: don't call unlink_fifo_list if we're in the
-         middle of executing a list of commands (executing_list != 0).
-         Partial fix for bug reported by Stephane Chazelas
-         <stephane.chazelas@gmail.com>
-       - execute_simple_command: don't close process substitution file
-         descriptors in the parent after forking children in a pipeline;
-         defer until pipeline completes, since parent may have inherited
-         fds from a calling scope (e.g., via `.'). EXPERIMENTAL
-       - execute_disk_command: don't close process substitution file
-         descriptors in the parent after forking the child. EXPERIMENTAL
-
-                                  12/7
-                                  ----
-doc/bash.1,lib/readline/doc/{readline.3,rluser.texi}
-       - show-mode-in-prompt: clarify that this must be enabled before the
-         vi and emacs mode strings are prefixed to the prompt.  Report from
-         Rob Foehl <rwf@loonybin.net>
-
-                                  12/8
-                                  ----
-execute_cmd.c
-       - execute_coproc: don't warn about an existing coproc if the write and
-         read file descriptors are unusable (-1), as they will be after a
-         call to coproc_closeall in a subshell. Fixes spurious warning
-         reported by Tobias Hoffmann <lfile-list@thax.hardliners.org>
-
-jobs.c
-       - bgp_resize: avoid overflow when calculating the new size if the
-         child process limit is something ridiculously large. Report and
-         fix from Natanael Copa <ncopa@alpinelinux.org>
-
-execute_cmd.c
-       - execute_builtin_or_function: if we return via the return builtin, we
-         don't get a chance to free the saved fifo list, so add an unwind-
-         protect to make sure it happens. Part of fix for leak reported by
-         Oyvind Hvidsten <oyvind.hvidsten@dhampir.no>
-       - execute_command_internal: if we unwind via the return builtin (e.g.,
-         we execute a function which then returns via the return builtin to
-         a previous function), we don't free the saved fifo list, so add an
-         unwind-protect to make sure the free happens. Rest of fix for leak
-         reported by Oyvind Hvidsten <oyvind.hvidsten@dhampir.no>
-
-subst.c
-       - add_fifo_list: for the FIFO case (no /dev/fd), make sure we
-         initialize the new members of the fifo list after xrealloc
-
-                                  12/9
-                                  ----
-subst.c
-       - dev_fd_list: now a list of type `pid_t' so we can store process
-         associated with the pipe fd into the right element; change all
-         necessary functions (copy_fifo_list, add_fifo_list)
-       - process_substitute: store pid of child process into the right
-         index in dev_fd_list after opening the pipe. Process ID of -1 means
-         process has been reaped and fd needs to be closed (or FIFO needs to
-         be unlinked); value of 0 means slot is unused
-
-jobs.c
-       - wait_for_background_pids: call reap_procsubs to make sure we clean
-         up all reaped process substitutions before trying to wait for
-         everything (still needs work)
-
-tests/{run-procsub,procsub.{tests,right}}
-       - new file, tests of process substitution that have failed in the past
-
-                                  12/10
-                                  -----
-jobs.c
-       - wait_for_background_pids: warn if one of the jobs is stopped
-
-subst.c
-       - wait_procsubs: new function, call wait_for for every "live" process
-         substitution
-
-jobs.c
-       - wait_for_background_pids: call wait_procsubs to reap any living
-         process subsitutions
-
-                                  12/13
-                                  -----
-lib/readline/bind.c
-       - parser_if: add support for testing the readline version, using the
-         full set of arithmetic comparison operators (and supporting both
-         = and ==), using version numbers of the form major[.[minor]]
-
-                                  12/14
-                                  -----
-subst.[ch]
-       - string_list_dollar_star: now takes QUOTED and PFLAGS arguments like
-         string_list_dollar_at, changed all callers. Not used yet.
-
-                                  12/16
-                                  -----
-subst.c
-       - param_expand: broke out cases of expanding unquoted (quoted == 0)
-         $* on the rhs of an assignment statement (pflags & PF_ASSIGNRHS)
-         with various values of IFS (unset, null, set to non-null value) to
-         capture the expansion subtleties. From a report back on 11/24 by
-         Martijn Dekker <martijn@inlv.org>
-
-                                  12/17
-                                  -----
-array.h
-       - set_element_value: new define, sets array element AE to VALUE
-
-variables.c
-       - set_pipestatus_array: use set_element_value where appropriate
-
-                                  12/18
-                                  -----
-subst.c
-       - parameter_brace_find_indir: when expanding the indirect parameter
-         to find the eventual variable name, we don't perform word splitting.
-         Make sure this does the right thing for * and @.  Fixes bug
-         reported by isabella parakiss <izaberina@gmail.com>
-
-                                  12/19
-                                  -----
-doc/{bash.1,bashref.texi}
-       - indirect expansion: make sure to note that the value of the indirect
-         variable does not undergo word splitting as one of its expansions,
-         as in fix from 12/18
-
-                                  12/22
-                                  -----
-subst.c
-       - parameter_brace_expand_rhs: make sure the value this function returns
-         when OP is `=' is quoted appropriately, as the callers expect. More
-         changes from Posix interp 221. Fixes report from Martijn Dekker
-         <martijn@inlv.org>
-
-variables.c
-       - assign_hashcmd: if running in a restricted shell, make sure the
-         target of the hash assignment can be found via a $PATH search, to
-         prevent users assigning commands to the hash table they would not
-         ordinarily have access to. Fixes issue raised by Drew Parker
-         <andrew.s.parker2@gmail.com>
-
-builtins/hash.def
-       - hash_builtin: if running in a restricted shell, make sure the
-         pathname target of `hash -p' can be found via a $PATH search, to
-         prevent users assigning commands to the hash table they would not
-         ordinarily have access to.
-
-                                  12/27
-                                  -----
-array.c,arrayfunc.c,...
-       - many changes to clean up unused variables and functions. From a
-         report from Siteshwar Vashisht <svashisht@redhat.com>
-
-                                  12/28
-                                  -----
-lib/readline/terminal.c
-       - _rl_term_clrscroll: save the `E3' termcap capability, which clears
-         the scrollback buffer where supported. Unused right now
-
-lib/readline/rlprivate.h
-       - _rl_term_clrscroll: extern declaration
-
-lib/readline/bind.c
-       - parser_if: added simple variable comparison capability. Allowable
-         operators are `=', `==', and `!='; boolean variables must be
-         compared to either `on' or `off'; variable names must be separated
-         from the operator by whitespace
-
-doc/bash.1,lib/readline/doc/{rluser.texi,readline.3}
-       - document new `if variable comparison value' construct
-
-                                1/2/2018
-                                --------
-lib/glob/sm_loop.c
-       - EXTMATCH: when matching against !(patlist), if a filename beginning
-         with a `.' does not match any of the patterns in patlist, don't
-         return it as a match if leading dots need to be matched explicitly
-         (flags & FNM_PERIOD). Report from Eric Cook <llua@gmx.com>
-
-                                   1/3
-                                   ---
-variables.[ch]
-       - bind_function_def: takes an additional flags argument. If FLAGS&1,
-         overwrite any existing function_def hash table entry; if FLAGS==0,
-         leave any existing function_def alone.
-
-make_cmd.c
-       - make_function_def: call bind_function_def with flags == 0
-
-execute_cmd.c
-       - execute_intern_function: call bind_function_def with flags == 1 so
-         we have function_def information that's correct for where the
-         function is defined, not just where it's last parsed. Fixes report
-         from Bruno Vasselle <bruno.vasselle@laposte.net>; final piece of
-         fix from 12/15/2011
-
-                                   1/4
-                                   ---
-subst.c
-       - param_expand: deal with string_list_dollar_star returning NULL.
-         Fixes bug reported by Martijn Dekker <martijn@inlv.org>
-
-builtins/history.def
-       - history_builtin: enabled code that performs range deletion
-
-                                   1/5
-                                   ---
-subst.c
-       - do_assignment_internal: if performing a compound assignment, make
-         sure to pass ASS_CHKLOCAL flag to do_compound_assignment if the
-         assignment word has the W_CHKLOCAL flag set
-       - do_compound_assignment: honor ASS_CHKLOCAL flag and check for an
-         existing local variable before creating or modifying a global
-         variable
-
-builtins/declare.def
-       - declare_internal: new (undocumented so far) option: -G. Means to
-         act on global variables (create, modify) if no local variable is
-         found with the specified name
-       - declare_find_variable: new declare-specific wrapper functon for
-         declare builtin; obeys -g and -G options in one place
-       - declare_internal: if no variable is found after following any nameref
-         chain, look up the variable using declare_find_variable to honor the
-         -G option. XXX - so far, this is the only place that function is used
-
-subst.c
-       - shell_expand_word_list: before calling make_internal_declare, add
-         'G' to the options list if W_CHKLOCAL is set in the word's flags.
-         This makes builtins like `readonly' that modify local variables in
-         a function behave the same for scalar and array variables
-
-                                  1/11
-                                  ----
-parse.y
-       - shell_getc: move code that decides whether to append a space to an
-         alias expansion here from mk_alexpansion, so we can inhibit adding
-         a space if we're currently parsing a single or double quoted string
-
-                                  1/12
-                                  ----
-
-parse.y
-       - clear_string_list_expander: take a pointer to an alias that's about
-         to be freed and make sure there aren't any pointers to it in the
-         list of pushed strings. If there are, zero it out in the pushed
-         string list to avoid referencing freed memory in pop_string()
-
-alias.c
-       - free_alias_data: if an alias being freed is currently being expanded,
-         call clear_string_list_expander to remove references to it from the
-         list of pushed strings
-
-                                  1/14
-                                  ----
-pcomplib.c
-       - progcomp_search: add code to look up an alias for the CMD argument
-         and return the completions for the first word of that alias if one
-         is found. Just a start at completing aliases, a much-requested
-         feature
-
-pcomplete.h
-       - COPT_LASTUSER: last flag value used by user-settable completion
-         options
-       - PCOMP_RETRYFAIL, PCOMP_NOTFOUND: new #defines, possible return values
-         from programmable_completions in FOUNDP argument. Moved RETRYFAIL
-         define here from pcomplete.c to avoid collisions with user-settable
-         option values (COPT_*)
-
-                                  1/15
-                                  ----
-pcomplete.c
-       - programmable_completions: if we don't find any completions for a
-         command, and RETRY is 0, see if the command is a defined alias,
-         expand it, and try to expand the first word of the value as a
-         command, and find any programmable completions for it. Here right
-         now, could be moved to attempt_shell_completion later if we need
-         to do more analysis of the expanded line. We'll see how it works
-         in practice. (Disabled for now.)
-
-                                  1/16
-                                  ----
-parse.y
-       - grammar: when timing the null command, make sure to turn off the
-         flags in parser_state (PST_REDIRLIST) that make_simple_command sets
-         when given a NULL second argument, since it assumes that it's going
-         to turn those off when it gets the next word of the simple command
-         (which it never gets in this case).  Fixes bug reported by
-         Anti Räis <antirais@gmail.com>
-
-                                  1/19
-                                  ----
-lib/readline/rltty.c
-       - prepare_terminal_settings (termios/termio): if there is a function
-         bound to the VDISCARD character in the current keymap, set VDISCARD
-         to _POSIX_VDISABLE while readline is active. From a report from
-         Rhialto <rhialto@falu.nl>
-
-                                  1/22
-                                  ----
-builtins/history.def
-       - histtime: check whether or not localtime() returns NULL, and make
-         sure we only call strftime() with a valid struct tm. This can happen
-         when the timestamps in the history file overflow a time_t. Fixes bug
-         reported by Luke Dashjr <luke@dashjr.org>
-
-bashline.c
-       - edit_and_execute_command: if we're in vi editing mode, make sure
-         we end up in insert mode after executing the commands from the
-         edited file. This seems to be what other shells do. Report from
-         Stan Marsh <gazelle@xmission.com>
-
-                                  1/26
-                                  ----
-bashline.c
-       - command_word_completion_function: match alias and shell function
-         names case-insensitively if the readline completion-ignore-case
-         variable is set. Inspired by report from <odnehel@gmail.com>
-
-lib/readline/display.c
-       - update_line: when performing a dumb update after wrapping the line
-         (usually due to printing the prompt), make sure we adjust
-         _rl_last_c_pos if there are invisible characters in prompt lines
-         other than the first (we assume those invisible characters are in
-         the last line, which is nearly always the case). We adjust by the
-         total number of invisible chars less the number of invisible chars
-         in the first prompt line. From a report in
-         https://bugs.launchpad.net/ubuntu/+source/bash/+bug/1745273
-
-execute_cmd.c
-       - execute_command_internal: if redirections attached to a compound
-         command fail, make sure we discard the `internal_fifos' unwind-
-         protect frame after freeing the copied fifo_list and before returning
-
-                                  1/30
-                                  ----
-lib/readline/rlprivate.h
-       - BRACK_PASTE_FINI: add \r to the end of the string to avoid problems
-         with the tty driver thinking the cursor was in the wrong position.
-         Fixes issue reported by Egmont Koblinger <egmont@gmail.com>
-
-                                  1/31
-                                  ----
-lib/sh/zread.c
-       - zread,zreadintr: call check_signals() before calling read() to
-         minimize the race window between signal delivery, signal handling,
-         and a blocking read(2). Partial fix for FIFO read issue reported by
-         Oyvind Hvidsten <oyvind.hvidsten@dhampir.no>
-
-doc/{bash.1,bashref.texi}
-       - shopt: document `assoc_expand_once' shell option
-
-                                   2/1
-                                   ---
-config-top.h
-       - DONT_REPORT_SIGTERM: define, so non-interactive shells will no
-         longer print termination messages for child processes killed by
-         SIGTERM
-
-                                   2/6
-                                   ---
-lib/readline/text.c
-       - rl_insert: don't attempt to optimize typeahead if we are only reading
-         a fixed number of characters (rl_num_chars_to_read > 0)
-
-redir.c
-       - redir_special_open: if the shell is restricted, return a
-         RESTRICTED_REDIRECT error for attempts to open /dev/tcp and /dev/udp
-         sockets.  Inspired by report from Blake Burkhart <bburky@bburky.com>
-       - do_redirection_internal: if redir_open returns RESTRICTED_REDIRECT,
-         return that right away (instead of errno) so we can print a better
-         error message
-
-                                  2/11
-                                  ----
-jobs.c
-       - bgp_resize: fix problems with (pid_t) overflow when calculating new
-         size for table when js.c_childmax is near the limit of a pid_t
-         (e.g., 2**31 - 1 on a 32-bit system, or 2**63-1 on a system with
-         32-bit pid_t). Fixes hang reported by Natanael Copa
-         <ncopa@alpinelinux.org> based on his patch from 12/8.
-       - bgp_resize: cap max table size for bgpids at MAX_CHILD_MAX (32768)
-
-include/typemax.h
-       - TYPE_MINIMUM, TYPE_MAXIMUM: updated definitions from coreutils-8.29,
-         silences some compiler warnings
-
-                                  2/14
-                                  ----
-Makefile.in
-       - maybe-clean: use cd and pwd -P to test whether or not two directory
-         names identical, since topdir = '.' and BUILD_DIR = full pathname
-         when you use something like `bash ./configure'. Problem reported by
-         Michael Felt <aixtools@gmail.com>
-
-subst.c
-       - split_at_delims: if SD_NOQUOTEDELIM is in the flags argument, don't
-         treat `'' and `"' as candidates for possible sequences of delimiters,
-         even if they're part of the delimiter set (the delims argument).
-         Fixes problem with completing lines like `foo --bar='quux baz' xx'
-         reported by Nick Patavalis <npat@efault.net>
-
-                                  2/15
-                                  ----
-copy_cmd.c
-       - copy_word_list: build the list in the right order, avoiding having
-         to reverse it at the end. Helps with long argument lists
-
-shell.c
-       - bind_args: build the argument list in the right order, avoiding
-         having to reverse it at the end.
-       - bind_args: only call push_args to save argc and argv as BASH_ARGC
-         and BASH_ARGV if debugging mode is enabled (debugging_mode != 0).
-         Inspired by report from Ambrose Feinstein <ambrose@google.com>
-       - bind_args: note that we've saved BASH_ARGC and BASH_ARGV by setting
-         bash_argv_initialized
-       - shell_reinitialize: reset bash_argv_initialized back to 0 so
-         BASH_ARGV and BASH_ARGC will be recreated if we're in debugging mode
-
-variables.c
-       - save_bash_argv: new function, initializes BASH_ARGV and BASH_ARGC
-         from the saved positional parameters
-       - init_bash_argv: initialize BASH_ARGV and BASH_ARGC if
-         bash_argv_initialized == 0
-
-builtins/shopt.def
-       - shopt_set_debug_mode: if we're turning on debug mode, initialize
-         BASH_ARGC and BASH_ARGV if bash_argv_initialized == 0
-
-                                  2/16
-                                  ----
-execute_cmd.c
-       - execute_function: make sure BASH_ARGV and BASH_ARGC are initialized
-         before calling push_args (and before calling remember_args)
-
-builtins/source.def
-       - source_builtin: make sure BASH_ARGV and BASH_ARGC are initialized
-         before calling push_args (and before calling remember_args)
-
-builtins/evalfile.c
-       - _evalfile: if the shell compatibility level is 44 or lower, make
-         sure BASH_ARGV and BASH_ARGC are initialized before calling
-         array_push
-
-builtins/shopt.def
-       - compat44: new shell option. This will be the last compatXX option
-
-doc/{bash.1,bashref.texi}
-       - compat44: document new shell option
-
-                                  2/21
-                                  ----
-builtins/common.h
-       - ISOPTION: check s[1] before s[2] to avoid out of bound reads. Fixes
-         bug reported by jeremy@feusi.co
-
-input.h
-       - B_SHAREDBUF: new flag for buffered input fds, indicates that this
-         fd shares its b_buffer with another fd
-
-input.c
-       - duplicate_buffered_stream: when duplicating *from* the buffer
-         corresponding to bash input, make sure the new buffer has B_SHAREDBUF
-         in the flags, because copy_buffered_stream copies pointers
-       - duplicate_buffered_stream: if the buffer being copied to has the
-         B_SHAREDBUF flag set, make sure the b_buffer doesn't get freed.
-         Fixes use-after-free bug reported by jeremy@feusi.co
-       - save_bash_input,close_buffered_stream: make sure a buffer with
-         B_SHAREDBUF set has its b_buffer set to NULL before calling
-         free_buffered_stream
-
-                                  2/24
-                                  ----
-subst.c
-       - parameter_brace_expand_error: add parameter saying whether or not
-         we are checking whether value is null, so we can have different
-         error messages for ${x:?} and ${x?}. Report and fix from
-         don fong <dfong@dfong.com>
-
-                                   3/5
-                                   ---
-lib/readline/bind.c
-       - _rl_read_file: instead of calling stat/open on the passed filename,
-         use open/fstat to avoid one possible filename translation and close
-         a small (benign) race condition. Report and fix from Roy Ivy
-         <roy.ivy.iii@gmail.com>
-
-                                  3/11
-                                  ----
-variables.c
-       - makunbound: if new variable localvar_unset is non-zero, mark local
-         vars in previous scopes as invisible and unset so they will show
-         up as unset until that previous scope returns (similar to how local
-         variables in the current local scope are handled). localvar_unset
-         is currently set to 0 with no way for a script to change its value.
-         Eventually there will be an option to modify it.  From a bug-bash
-         discussion started by Nikolai Kondrashov <spbnick@gmail.com> back
-         on 2/11/2018
-
-                                  3/13
-                                  ----
-subst.c
-       - expand_word_list_internal: short-circuit and exit right away if a
-         variable assignment preceding a special builtin fails in posix mode
-       - expand_word_list_internal: if a variable assignment precedes an
-         empty command name (after expansion), fix to exit right away when
-         the shell is in posix mode
-
-                                  3/15
-                                  ----
-doc/{bash.1,bashref.texi}
-       - Add text to Pathname Expansion clarifying that a slash must be
-         matched by a slash in the pattern when matching pathnames, but
-         not in other matching contexts. Suggested by <stormy1777@yahoo.com>
-
-builtins/common.c
-       - read_octal: allow octal numbers greater than 777 to accommodate
-         modes and umasks that include sticky/setuid/setgid bits. Report
-         and fix from Martijn Dekker <martijn@inlv.org>
-
-                                  3/19
-                                  ----
-lib/readline/bind.c
-       - rl_generic_bind: make sure we only assign to prevkey in the loop
-         if the key sequence index is > 0, so ic is valid. Fixes bug
-         reported by Koichi Murase <myoga.murase@gmail.com>
-
-builtins/read.def
-       - read_builtin: be slightly less aggressive checking for timeouts and
-         SIGALRM: if we successfully read a character, don't check for a
-         timeout until we store or process it. Fixes timing problem
-         reported by Rob Foehl <rwf@loonybin.net>
-
-                                  3/22
-                                  ----
-sig.c
-       - termsig_handler: add a call to exit(1) after the kill, just in case
-         there are circumstances where the SIG_DFL signal handler is
-         ignored.  Report from Andrei Vagin <avagin@gmail.com>
-
-                                  3/25
-                                  ----
-lib/readline/bind.c
-       - _rl_function_of_keyseq_internal: new internal function that takes a
-         length parameter to accommodate NUL in the key sequence. Patch from
-         Koichi Murase <myoga.murase@gmail.com>
-       - rl_function_of_keyseq_len: new application-callable function that
-         takes a length parameter; otherwise equivalent to rl_function_of_keyseq.
-
-lib/readline/readline.h
-       - rl_function_of_keyseq_len: add extern declaration for new function
-
-lib/readline/doc/rltech.texi
-       - rl_function_of_keyseq_len: document new function interface
-
-bashline.c
-       - bash_execute_unix_command: use rl_function_of_keyseq_len to handle
-         key sequences with embedded NULs (\C-@). Fix from Koichi Murase
-         <myoga.murase@gmail.com>
-
-lib/readline/bind.c
-       - rl_bind_key_if_unbound,rl_bind_key_if_unbound_in_map: run the KEY
-         argument through rl_untranslate_keyseq to produce a symbolic sequence
-         that can encode \C-@.
-       - rl_bind_keyseq_if_unbound_in_map: translate the key sequence in order
-         to accommodate symbolic key sequences; should be a no-op for `raw'
-         key sequences such as the arrow key seqeunces from terminfo. Change
-         from Koichi Murase <myoga.murase@gmail.com>
-
-                                   4/2
-                                   ---
-jobs.c
-       - wait_for: when setting the SIGINT signal handler to wait_sigint_handler
-         make sure we're not setting old_sigint_handler recursively, as we
-         can when running an external command in a trap we took after a
-         command exited due to SIGINT. We don't want to overwrite
-         old_sigint_handler here. Fixes bug reported by Dr. Werner Fink
-         <werner@suse.de>
-
-execute_cmd.c
-       - execute_disk_command: when there is a command_not_found_hook, make
-         sure the subshell turns off job control before running it, in case
-         it runs processes. We don't want it to manipulate process groups.
-         Fixes bug reported by ÐиÑиллов Ðима <dk.1997-fast@yandex.ru>
-       - execute_command_internal: make sure the command run by the `command'
-         builtin doesn't cause the ERR trap to be executed; wait for the
-         status to be returned by the command builtin. Fixes bug reported by
-         Martijn Dekker <martijn@inlv.org>
-
-                                   4/4
-                                   ---
-subst.c
-       - process_substitute: handle longjmp back to top_level and function
-         returns (return_catch) in the child process, like command
-         substitution, so we don't longjmp back to some arbitrary spot from
-         the `exit' or `return' builtins, or on an expansion error, like
-         the command timing code. Fixes bug reported by Basin Ilya
-         <basinilya@gmail.com>
-
-                                   4/6
-                                   ---
-parse.y
-       - read_token_word: when reading a matched pair of backquotes as part
-         of a word, treat it as quoted so the characters are read as a single
-         word, but do not let the presence of the backquote mark the word as
-         quoted. Fixes here-document delimiter bug reported by Denys Vlasenko
-         <dvlasenk@redhat.com>
-
-                                   4/7
-                                   ---
-execute_cmd.c
-       - execute_case_command: call quote_string_for_globbing with the
-         QGLOB_CTLESC flag for both quoted and unquoted words, so it will
-         remove CTLESC/CTLESC in all cases while converting other quoted
-         characters to use a preceding backslash. Bug reported by
-         Martijn Dekker <martijn@inlv.org>
-
-                                   4/9
-                                   ---
-smatch.c
-       - posix_cclass_only: helper function that checks whether a pattern has
-         only posix single-byte character classes ([:alpha:], etc.) or has
-         none at all
-       - xstrmatch: if running in a multibyte locale, make sure to short-
-         circuit to the single-byte matching code only if there are no
-         unrecognized character class names, since the wide character ctype
-         functions allow locales to define their own character class names
-         (e.g., "hyphen"). Fixes issue reported by yangyajing <yyj_cqu@163.com>
-
-                                  4/10
-                                  ----
-configure.ac,cross-build/qnx.cache
-       - qnx: add a configure cache file for cross-building, treat qnx 7 like
-         qnx 6 in terms of cpp options. Fix from Brian Carnes
-         <bcarnes@google.com>
-
-aclocal.m4
-       - BASH_CHECK_DEV_STDIN: experimental change to test for /dev/stdin
-         independently of /dev/fd or /proc/self/fd. Suggested for QNX by
-         Brian Carnes <bcarnes@google.com>
-
-
-                                  4/11
-                                  ----
-lib/glob/glob.c
-       - glob_testdir: return -2 if DIR is a symlink, to differentiate it from
-         any other kind of non-directory file
-       - glob_vector: if we have GX_ALLDIRS (globstar), we want to skip over
-         symlinks to directories, since we will pick up the real directory
-         later. Fixes incompatibility reported by Murukesh Mohanan
-         <murukesh.mohanan@gmail.com>
-
-bashline.c
-       - bash_execute_unix_command: changes to make READLINE_POINT apply to
-         characters instead of bytes when in a multibyte locale. Report and
-         fix from Koichi Murase <myoga.murase@gmail.com>
-
-                                  4/12
-                                  ----
-builtins/evalstring.c
-       - parse_and_execute_cleanup: now takes an argument which is the value
-         of running_trap at some point before parse_and_execute was called;
-         changed callers in sig.c, builtins/evalfile.c
-
-builtins/common.h
-       - parse_and_execute_cleanup: changed prototype
-
-                                  4/13
-                                  ----
-builtins/evalstring.c
-       - parse_and_execute_cleanup: if the argument holding the previous state
-         of running_trap is the same value as the current running_trap state,
-         don't call run_trap_cleanup: assume that there is a caller who will
-         take care of the cleanup after this returns. Fixes recursive trap
-         call on "eval return" reported by Martijn Dekker <martijn@inlv.org>
-
-parse.y
-       - read_a_line: if remove_quoted_newline is non-zero, indicating the
-         here-document delimiter is unquoted, we will be running the contents
-         of the here-document through word expansion and need to quote CTLESC
-         and CTLNUL in the input. Fixes bug with ^A in here document reported
-         by Jorge Alberto Baca Garcia <bacagarcia@me.com>
-
-                                  4/18
-                                  ----
-pathexp.c
-       - quote_string_for_globbing: make sure the QGLOB_CTLESC code handles
-         both CTLESC CTLESC and CTLESC CTLNUL in the same way. Fixes bug
-         reported by Martijn Dekker <martijn@inlv.org>
-
-                                  4/19
-                                  ----
-execute_cmd.c
-       - execute_command_internal: before executing any command in the current
-         shell, and before copying any existing FIFO list, call
-         reap_procsubs to unlink or close any process substitution pipes
-         associated with processes that have exited. Fixes hang in test suite
-         when trying to open a FIFO with no process having it open for
-         reading
-
-                                  4/26
-                                  ----
-parse.y
-       - read_token_word: if returning REDIR_WORD for a {id}>foo construct,
-         for example, make sure to assign the_word to yylval.word before
-         returning, in case a recursive call to the parser overwrites it
-         (e.g., when evaluating array indexes). From a message to
-         austin-group-l from Stephane Chazelas <stephane.chazelas@gmail.com>
-
-lib/glob/sm_loop.c
-       - BRACKMATCH: if we have an invalid character class in an otherwise
-         well-formed bracket expression, don't try to match each character
-         of the (invalid) class individually; just skip over the class and
-         move on.  From a message on the austin-group list from
-         Stephane Chazelas <stephane.chazelas@gmail.com>
-
-                                  4/27
-                                  ----
-variables.c
-       - push_exported_var,push_func_var,push_temp_var: make sure to set the
-         context correctly in the variable we bind in the previous (non-temp)
-         scope. Report from Martijn Dekker <martijn@inlv.org>
-
-pathexp.c
-       - unquoted_glob_pattern_p: a pattern that contains a backslash can
-         have it removed by the matching engine (since backslash is special
-         in pattern matching), so if the pattern contains a backslash, and
-         does not end in a backslash, we need to return true. Fixes bug
-         reported by Robert Elz <kre@bmunnari.OZ.AU>
-
-lib/glob/glob_loop.c
-       - INTERNAL_GLOB_PATTERN_P: same change to return TRUE for a backslash
-         that doesn't end the pattern
-
-lib/sh/timeval.c
-       - print_timeval: use locale_decpoint() instead of fixed `.' to print
-         decimal point. Bug report in austin-group email from Joerg Schilling
-         <Joerg.Schilling@fokus.fraunhofer.de>
-
-lib/sh/clock.c
-       - print_clock_t: use locale_depoint() in the same way as print_timeval
-
-                                  4/29
-                                  ----
-subst.c
-       - expand_cond_node: if special != 0, make sure to add QGLOB_CTLESC
-         to the flags passed to quote_string_for_globbing. Same issue as the
-         one with `case' fixed on 4/7, report from Martijn Dekker
-         <martijn@inlv.org>
-
-                                  4/30
-                                  ----
-redir.c
-       - do_redirection_internal: r_close_this: if the file descriptor is
-         already closed before the shell is asked to close it, make sure to
-         add an undo list redirect to make sure it stays closed. Report from
-         Martijn Dekker <martijn@inlv.org>
-
-                                   5/2
-                                   ---
-variables.c
-       - push_posix_temp_var: new function, takes the SHELL_VAR * passed as
-         an argument and uses the name and value to create a global variable
-       - merge_temporary_env: if posixly_correct is set, call
-         push_posix_temp_var to create global variables, otherwise call
-         push_temp_var to preserve the old behavior. Right now, it's only
-         called when in posix mode, but that might change. This undoes the
-         change from 4/27 when in posix mode
-
-                                   5/3
-                                   ---
-sig.c
-       - struct that holds the terminating signal information has a new
-         field: whether that signal is expected to cause a core dump
-       - termsig_handler: if the call to kill(2) doesn't kill the process,
-         we have a problem. If our pid is not 1, we just exit with status
-         128+sig (fake the sig exit status). If the pid is 1, we assume
-         we're in a Linux pid namespace and aren't allowed to send a signal
-         to ourselves. If we need to generate a core dump, we try to get
-         the kernel to SIGSEGV us by dereferencing location 0. If not, we
-         just exit with 128+sig. From a report and patch from Andrei Vagin
-         <avagin@virtuozzo.com>
-
-                                   5/4
-                                   ---
-bashline.c
-       - bash_execute_unix_command: make sure that parse_and_execute is called
-         with newly-allocated memory to avoid prematurely freeing the
-         command. Report and fix from Koichi Murase <myoga.murase@gmail.com>
-
-                                   5/7
-                                   ---
-builtins/shopt.def
-       - syslog_history: a shell option to control whether history is logged
-         to syslog; can be modified at runtime. Original patch from
-         Siteshwar Vashisht <svashisht@redhat.com>
-
-config-top.h
-       - SYSLOG_SHOPT: new configurable option, determines whether there is a
-         shell option to control syslogging history lines at runtime and sets
-         the default value of the option
-
-bashline.c
-       - syslog_history: new variable to control whether history lines are
-         sent to syslog; default value is the value of SYSLOG_SHOPT (or 1
-         if that's not defined)
-       - bash_add_history: send history lines to syslog if syslog_history is
-         non-zero
-
-                                  5/10
-                                  ----
-
-variables.c
-       - push_var_context: if we are in Posix mode and manipulating the
-         temporary environment (temporary_env), implement behavior specified
-         in Posix interp 1009 and make sure that temporary assignments
-         preceding function calls modify the current environment *before*
-         the function is executed.
-
-[bash-5.0-alpha frozen]
-
-                                  5/12
-                                  ----
-execute_cmd.c
-       - execute_in_subshell: subshells should set loop_level == 0, since
-         they are no longer "enclosed" by the loop, according to posix.
-         Report from Aeron.E. Wang <aeron.e.wang@gmail.com>
-
-                                  5/24
-                                  ----
-Makefile.in
-       - pkgconfigdir: don't fail installing bash.pc if this directory doesn't
-         exist or isn't writable -- there's no error in failing to install
-         something nothing will use
-       - install-headers-dirs: creat $(pkgconfigdir) if it doesn't exist
-
-lib/sh/shmbchar.c
-       - utf8_mblen: replace with version from gnulib
-       - utf8_mbstrlen: reimplement using utf8_mblen so it handles invalid
-         multibyte sequences in the same way as mbstrlen
-
-lib/readline/mbutil.c
-       - _rl_utf8_mblen: utf-8 specific version of mblen from gnulib
-
-include/shmbutil.h
-       - ADVANCE_CHAR,COPY_CHAR_P: do better job detecting end of string in
-         UTF-8 locales (should not be called with an empty string, but to
-         be safe)
-
-                                  5/25
-                                  ----
-lib/sh/utf8.c
-       - new file, utf-8-specific functions collected from other files
-
-externs.h
-       - extern declarations moved around for utf8.c
-
-include/shmbutil.h
-       - SADD_MBCHAR, SADD_MBQCHAR_BODY, ADVANCE_CHAR_P: if the locale is a
-         UTF-8 locale, don't bother with a call to mbrlen if the current
-         character cannot start a multibyte character
-
-variables.c
-       - push_var_context: only merge the temporary environment in posix mode
-         if we are executing a shell function (flags & VC_FUNCENV). Report
-         from Martijn Dekker <martijn@inlv.org>
-
-lib/readline/mbutil.c
-       - _rl_get_char_len: don't call mbrlen if we are in a UTF-8 locale and
-         the character cannot start a multibyte sequence
-
-builtins/read.def
-       - read_builtin: if mb_cur_max > 1, call read_mbchar only if we're not
-         in a utf-8 locale or, if we are, the character we just read indicates
-         the start of a multibyte sequence
-
-subst.c
-       - string_extract_verbatim: don't call MBRLEN if we're in a utf-8
-         locale and the current character can't start a multibyte sequence
-       - setifs: don't call MBRLEN if we're in a utf-8 locale and the first
-         character of $IFS can't start a multibyte sequence
-
-lib/readline/kill.c
-       - rl_bracketed_paste_begin: make sure we return 0 here if rl_insert_text
-         returns the right number of characters inserted to be consistent
-         with other functions. Returns 1 otherwise. Report and fix from
-         Gabe Krabbe <gabe@rtfs.de> back in March, 2018
-
-lib/readline/readline.c
-       - rl_subseq_result: make sure r is < 0 before checking map[ANYOTHERKEY]
-         to see if we shadowed a key that should now be tried
-
-                                  5/27
-                                  ----
-variables.c
-       - assign_aliasvar: perform same validity check on subscript assignment
-         as alias builtin performs on name argument. Bug report from
-         Mike Jonkmans <bashbug@jonkmans.nl>
-
-                                  5/29
-                                  ----
-builtins/setattr.def
-       - set_var_attribute: we should not propagate a variable assignment
-         preceding a builtin back to the calling environment unless the
-         shell is in posix mode. Since previous versions of the shell do
-         this, setting the shell compatibility level to 44 or less will
-         continue the propagation behavior
-
-                                   6/1
-                                   ---
-lib/readline/histexpand.c
-       - history_tokenize_word: as part of teaching history tokenization more
-         and more about shell syntax, allow command and process subsitution
-         and extended globbing patterns to appear within a word being
-         tokenized and not just at the beginning. Fixes bug reported back in
-         2/2017 by ecki@tofex.de
-
-bashhist.c
-       - load_history: use HISTSIZE_DEFAULT (still defaults to "500") to set
-         the initial value of $HISTSIZE. HISTSIZE_DEFAULT can be overridden
-         in config-top.h
-
-                                   6/4
-                                   ---
-configure.ac
-       - make sure we link against an external readline library that's at
-         least version 8
-
-                                   6/8
-                                   ---
-pcomplete.h
-       - INITIALWORD: internal compspec name for programmable completion on
-         the initial (usually the command) word
-
-bashline.c
-       - attempt_shell_completion: if we are in a command position and the
-         user has defined a compspec for INITIALWORD, use programmable
-         completion to complete command words. Original patch from
-         Luca Boccassi <bluca@debian.org>
-
-lib/readline/doc/rluser.texi,builtins/complete.def,doc/bash.1
-       - make it clearer that -D takes precedence over -E when supplied as
-         options to `complete', not when they are applied during completion
-
-builtins/complete.def
-       - complete_builtin,compgen_builtin: add support for -I option
-       - print_one_completion,print_compopts: display -I when appropriate
-
-lib/readline/doc/rluser.texi,doc/bash.1
-       - complete,compgen: document new -I option and its effect
-
-                                  6/10
-                                  ----
-lib/readline/histfile.c
-       - read_history_range: don't apply the heuristic and try to append a
-         history line to an existing history entry if we don't have any
-         history entries. Bug and fix from Edward Huff <ejhuff@gmail.com>
-
-                                  6/12
-                                  ----
-bashline.c
-       - attempt_shell_completion: don't all the programmable completion for
-         INITIALWORD if programmable completion is disabled
-       - attempt_shell_completion: make sure in_command_position remains set
-         for an empty command word on an otherwise blank line, making the
-         presence of assignment statements optional.  Report from
-         Luca Boccassi <bluca@debian.org>
-
-                                  6/20
-                                  ----
-lib/malloc/malloc.c
-       - morecore,internal_malloc,internal_free: requests for more than
-         128K bytes (defined as MMAP_THRESHOLD and saved in the new
-         malloc_mmap_threshold variable) are now satisfied via mmap and
-         freed via munmap. We only use mmap if we have mmap and MAP_ANON
-         (or MAP_ANONYMOUS). These blocks are not available for splitting
-         or coalescing, so every request for 128K bytes or smaller is
-         satisfied via sbrk(). We don't use mremap for realloc yet, but
-         we could in the future
-
-lib/malloc/mstats.h
-       - malloc_stats: the malloc stats now include the number of calls to
-         mmap and the total number of bytes requested via mmap. The number
-         of calls to munmap is captured in each bucket's lesscore count
-
-lib/malloc/stats.c
-       - print_malloc_stats: now prints an indication of where the change from
-         sbrk to mmap takes place, and prints number of mmap calls and total
-         number of bytes allocated using mmap
-
-                                  6/22
-                                  ----
-variables.c
-       - get_bashargcv: new dynamic "fetch" variable for BASH_ARGV and
-         BASH_ARGC, for backwards compatibility: if a script makes a
-         reference to either variable at the top level (not in a shell
-         function) without enabling debugging mode and not having initialized
-         the variable previously (using a simple semaphore), create the
-         variables
-
-                                  6/25
-                                  ----
-configure.ac
-       - opt_bash_malloc: bash malloc no longer disabled for systems that
-         require eight-bit alignment; the bash malloc has had this for a
-         long time
-
-                                   7/4
-                                   ---
-bashline.c
-       - pre_process_line: if command-oriented history is enabled, and the
-         line being expanded is the second or later in a multi-line command,
-         and we know the command is being saved as the current history entry,
-         decrease history_length before calling history_expand so references
-         like !! refer to the previous history entry as usual
-
-lib/readline/histexpand.c
-       - history_quoting_state: new variable, can be set by calling
-         application before calling history_expand to note that the string
-         being expanded is part of a quoted string. Can be set to a single
-         quote, a double quote, or 0 (no quoting)
-       - history_expand: look at history_quoting_state and honor the
-         single-quote setting by not expanding any initial portion of the
-         line before the closing single quote. This allows history expansions
-         to be performed on a line containing a closing single quote if they
-         appear after the single quote
-
-lib/readline/history.h
-       - history_quoting_state: extern declaration
-
-bashhist.c
-       - bash_history_inhibit_expansion: if history_quoting_state indicates
-         that this string is single-quoted, skip over the single-quoted
-         portion and determine whether or not the portion after the
-         quoted string needs to be inhibited from history expansion
-
-parse.y
-       - shell_getc: set history_quoting_state based on the contents of the
-         current delimiter before calling pre_process_line
-
-                                   7/6
-                                   ---
-lib/readline/doc/hsuser.texi
-       - describe the default behavior of backslash and single and double
-         quotes
-
-lib/readline/doc/hstech.texi
-       - history_quoting_state: describe effect of setting this variable
-       - history_quotes_inihibit_expansion: expand the description to include
-         the default quoting behavior that setting this variable enables
-
-                                   7/9
-                                   ---
-support/man2html.c
-       - unescape: use memmove instead of strcpy to handle overlapping strings
-         Report and fix from Bernhard M. Wiedemann <bwiedemann@suse.de>
-
-lib/sh/getenv.c
-       - getenv: check that environ is non-NULL before looking through it.
-         Report and fix from Keeley Hoek <keeley@hoek.io>
-
-                                  7/12
-                                  ----
-braces.c
-       - mkseq: use better integer overflow handling for systems with 32-bit
-         ints and 64-bit intmax_ts. Bug reported by Simon Wörner
-         <mail@simon-woerner.de> as the result of fuzzing
-
-builtins/declare.def
-       - declare_internal: make sure bind_variable returns non-NULL when
-         setting attributes for a variable named as an argument to declare
-         that also appears in the temporary environment (and is a nameref).
-         Bug reported by Simon Wörner <mail@simon-woerner.de as the
-         result of fuzzing
-
-variables.c
-       - bind_variable_internal: if we're assigning through a nameref, don't
-         create a variable with an invalid name under any circumstances
-
-builtins/common.c
-       - get_job_spec: make sure to return NO_JOB if atoi() returns < 0 due
-         to integer overflow.
-         Bug reported by Simon Wörner <mail@simon-woerner.de as the
-         result of fuzzing
-
-                                  7/13
-                                  ----
-execute_cmd.c
-       - execute_in_subshell: don't call set_sigint_handler if the subshell
-         is asynchronous, since it undoes the signal handler installed by
-         setup_async_signals. Fixes bug reported by Daniel Mills
-         <danielmills1@gmail.com>
-
-parse.y,externs.h
-       - reset_readahead_token: new convenience function for the rest of
-         the shell, resets token_to_read if it's a newline (as it will be
-         after reset_parser is called)
-
-eval.c
-       - reader_loop: if we're just going to execute one command, make sure
-         the read-ahead token isn't set to something that will result in a
-         NULL command (by calling reset_readahead_token), since the code
-         will take that as the one command and set EOF_Reached
-
-                                  7/15
-                                  ----
-doc/{bash.1,bashref.texi}
-       - indirect expansion: clarify that the expansion works on parameters,
-         not just variables (NAMEs). Suggested by konsolebox
-         <konsolebox@gmail.com>
-
-                                  7/16
-                                  ----
-doc/{bash.1,bashref.texi}
-       - INSIDE_EMACS: document its effect on line editing
-
-                                  7/17
-                                  ----
-lib/readline/{readline.c,rlprivate.h}
-       - _rl_eof_found: new variable, private to the readline library, that
-         indicates whether the current call to readline() will return NULL
-         because we read EOF
-
-lib/readline/rltty.c
-       - rl_deprep_terminal: if bracketed paste mode is active, the last
-         character of the string to disable it is \r (to avoid confusing
-         the terminal driver about where the cursor is). In this case,
-         output a newline before returning so subsequent text (like the
-         `exit' bash prints) doesn't overwrite the prompt. Bug from
-         https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=903936
-
-variables.c
-       - make_local_assoc_variable: add second argument like corresponding
-         local array function, to allow this function to return an existing
-         local array variable to the caller for the caller to handle
-
-variables.h
-       - make_local_assoc_variable: change function prototype to add second
-         arg
-
-{subst.c,variables.c}
-       - make_local_assoc_variable: change callers
-
-builtins/declare.def
-       - declare_internal: call make_local_assoc_variable with a non-zero
-         second arg to have it return an existing local array variable to be
-         flagged as an error. Fixes bug reported by Grisha Levit
-         <grishalevit@gmail.com>
-       - declare_internal: call make_local_array_variable with unconditional
-         second argument of 1 for the same reason as above
-
-                                  7/18
-                                  ----
-variables.c
-       - bind_invalid_envvar: new function, takes invalid names from the
-         initial environment (names that are not valid shell identifiers) and
-         stores them in a separate hash table (invalid_env)
-       - maybe_make_export_env: make sure to add names from invalid_env to
-         the export env
-       - assign_in_env: for now, prevent variable names that aren't shell
-         identifiers from being added to the temporary environment. Addresses
-         issue raised by Grisha Levit <grishalevit@gmail.com>
-
-test.c
-       - unary_test: rearrange code slightly to avoid a wasted variable lookup
-         if the argument to -v is a subscripted array reference
-
-                                  7/19
-                                  ----
-variables.c
-       - nameref_transform_name: if a name doesn't resolve to a shell variable,
-         this function will check whether it resolves to a nameref that
-         points to a variable that hasn't been created yet
-
-variables.h
-       - nameref_transform_name: extern declaration
-
-subst.c
-       - do_compound_assignment: make sure that we follow any nameref chain
-         if the name passed resolves to a nameref that points to a variable
-         that doesn't exist. Fixes issue raised by Grisha Levit
-         <grishalevit@gmail.com>
-
-builtins/declare.def
-       - declare_internal: before calling any variant of make_local_variable,
-         make sure to perform any transformation of the name indicated by an
-         existing nameref. Fixes issue raised by Grisha Levit
-         <grishalevit@gmail.com>
-
-                                  7/20
-                                  ----
-builtins/declare.def
-       - declare_internal: if we are creating a global variable with -g, even
-         if we're not giving it a value, check for namerefs at the global
-         scope to avoid confusion with namerefs at the local (function) scope.
-
-subst.c
-       - expand_word_internal: if a double-quoted string expands to nothing,
-         make sure we note that for later by setting had_quoted_null, just
-         as we do for single-quoted empty strings
-
-subst.[ch]
-       - W_SAWQUOTEDNULL: new flag (replaces W_HASCTLESC, which is unused),
-         means that we saw a possibly-discarded quoted null while expanding
-         this word
-
-subst.c
-       - expand_word_internal: if expansion results in a non-empty word but
-         we saw a quoted null during expansion (had_quoted_null == 1), set
-         W_SAWQUOTED_NULL in the returned word
-       - expand_word_internal: if a recursive call to param_expand comes back
-         with W_SAWQUOTEDNULL set in the resulting word, set had_quoted_null
-         to note it
-       - parameter_brace_expand_rhs: if a recursive call to expand_word_internal
-         returns a non-quoted-null string (after an optional call to
-         string_list) make sure we pass the W_SAWQUOTEDNULL flag back to the
-         caller
-       - word_list_split: if a word expands to nothing after expansion and
-         splitting, but we saw a quoted null during the expansion
-         (W_SAWQUOTEDNULL), return an empty word
-
-                                  7/25
-                                  ----
-
-subst.c
-       - do_compound_assignment: if creating a local variable, make sure to
-         set `newname' to the name of the variable returned from find_variable,
-         since that follows namerefs. Fixes issue raised by Grisha Levit
-         <grishalevit@gmail.com>
-
-                                  7/29
-                                  ----
-subst.c
-       - get_var_and_type: if VALUE is NULL, check before calling dequote_string.
-         Report and fix from Grisha Levit <grishalevit@gmail.com>
-
-                                  7/30
-                                  ----
-variables.c
-       - make_local_{array,assoc}_variable: make sure we're not trying to
-         inherit a value from an incompatible array type. Fixes issue raised
-         by Grisha Levit <grishalevit@gmail.com>
-       - nameref_transform_name: if we're trying to resolve a nameref that
-         will be used to create a local variable, make sure the nameref is
-         at the same variable scope. Report from Grisha Levit
-         <grishalevit@gmail.com>
-
-                                   8/2
-                                   ---
-array.c
-       - array_subrange: change to use string_list_pos_params after creating a
-         WORD_LIST from the array slice, like assoc_subrange does
-
-subst.c
-       - parameter_brace_substring: since assoc_subrange and array_subrange
-         both call string_list_pos_params now, treat the results the same as
-         the VT_POSPARAMS case (pos_params also calls string_list_pos_params).
-         Fixes behavior difference between ${a[@]:sub} and ${@:sub} reported
-         by Ilkka Virta <itvirta@iki.fi>
-
-                                   8/3
-                                   ---
-array.c
-       - array_patsub: rewrite to work in terms of a WORD_LIST * and call
-         string_list_pos_params on the result to be consistent with the
-         expansions of ${@/pat/rep} and ${*/pat/rep}
-
-assoc.c
-       - assoc_patsub: rewrite to work in terms of a WORD_LIST * and call
-         string_list_pos_params on the result to be consistent with the
-         expansions of ${@/pat/rep} and ${*/pat/rep}
-
-subst.c
-       - parameter_brace_patsub: change how return value of {array,assoc}_patsub
-         is treated to make it identical to pos_params_pat_subst, since they
-         all call string_list_pos_params now
-       - expand_string_for_pat: make sure we preserve the value of
-         expand_no_split_dollar_star instead of just unconditionally setting
-         it back to 0 in case it was 1 before this function was called
-
-                                   8/6
-                                   ---
-array.c
-       - array_modcase: rewrite to work in terms of a WORD_LIST * and call
-         string_list_pos_params on the result to be consistent with the
-         expansions of ${@,,} and ${*,,}
-
-assoc.c
-       - assoc_modcase: rewrite to work in terms of a WORD_LIST * and call
-         string_list_pos_params on the result to be consistent with the
-         expansions of ${@,,} and ${*,,}
-
-subst.c
-       - parameter_brace_casemod: change how return value of {array,assoc}_modcase
-         is treated to make it identical to pos_params_modcase, since they
-         all call string_list_pos_params now
-
-                                   8/8
-                                   ---
-builtins/declare.def
-       - declare_internal: if we are making local variables, and not dealing
-         with the nameref attribute, make sure that any nameref variable we
-         followed when resolving the name given was at the same variable
-         context. If not, we just want to make or use a local variable with
-         the name passed; if so, we want to use the nameref value as the
-         variable name. Report from Grisha Levit <grishalevit@gmail.com>
-
-                                   8/9
-                                   ---
-configure.ac
-       - globasciiranges: RRI now on by default, must be turned off explicitly
-         at configure time or runtime with `shopt -u globasciiranges'
-
-                                  8/14
-                                  ----
-variables.c
-       - dispose_saved_dollar_vars: decrement stack pointer before looking
-         for saved positional parameters to dispose; stack pointer always
-         points to the first unused slot
-
-                                  8/15
-                                  ----
-variables.c
-       - dollar_arg_stack: now a stack of struct saved_dollar_vars, which has
-         an array for the first ten (dollar_vars) and a WORD_LIST * for the
-         remaining (rest_of_args). Fixes performance issue with function calls
-         and large numbers of positional parameters raised by
-         Bize Ma <binaryzebra@gmail.com>
-       - {save,restore,free,free_saved}_dollar_vars: new functions to manage
-         dollar_vars and dollar_arg_stack members. Need to keep these in sync
-         with whatever remember_args does
-       - push_dollar_vars: use save_dollar_vars, which just copies pointers,
-         and directly assign rest_of_args, without copying the words, to the
-         dollar_arg_stack entry. Have to clear dollar_vars and rest_of_args
-         with the assumption that callers will call remember_args(args, 1)
-         immediately following
-       - pop_dollar_vars: free current positional parameters and restore old
-         ones from pointers saved in dollar_arg_stack, making sure to
-         invalidate any cached value for "$@"
-       - dispose_saved_dollar_vars: free saved pointers from current index
-         into dollar_arg_stack
-
-doc/{bash.1,bashref.texi}
-       - POSIXLY_CORRECT: make sure to note that bash makes sure this variable
-         is set when posix mode is enabled
-
-                                  8/17
-                                  ----
-{jobs,nojobs}.c
-       - set_jobs_list_frozen: set jobs_list_frozen to a particular value.
-         Intended to save and restore the value around code sections instead
-         of unconditionally unfreezing it.
-
-jobs.h
-       - set_jobs_list_frozen: extern declaration
-
-execute_cmd.c
-       - execute_pipeline: if lastpipe is enabled, save and restore the
-         value of jobs_list_frozen using freeze_jobs_list/set_jobs_list_frozen
-         to avoid problems with race conditions and nested pipelines
-         causing jobs to be removed from the jobs table. Fixes savannah issue
-         https://savannah.gnu.org/support/index.php?109541 reported by
-         Björn Kautler <vampire0>
-
-                                  8/24
-                                  ----
-execute_cmd.c
-       - lastpipe_cleanup: call set_jobs_list_frozen instead of
-         unfreeze_jobs_list
-       - execute_pipeline: set up lastpipe_cleanup with old value of
-         jobs_list_frozen
-
-                                   9/3
-                                   ---
-builtins/printf.def
-       - getuintmax,getfloatmax: on a conversion error, return as much of the
-         value as we were able to convert instead of 0. Fixes bug reported
-         by Robert Elz <kre@bmunnari.OZ.AU>
-
-                                   9/4
-                                   ---
-lib/readline/text.c,lib/readline/rlprivate.h
-       - _rl_backward_char_internal: new function, guts of rl_backward_char
-         and rl_backward_byte, not currently used there
-
-lib/readline/vi_mode.c
-       - _rl_vi_advance_point: new function, move point forward by one
-         character, handling multibyte locales and characters and the end
-         of line semantics
-       - _rl_vi_backup_point: new function, move point backward by one
-         character, handling multibyte locales and characters
-       - rl_vi_eword,rl_vi_eWord: use rl_vi_advance_point instead of a simple
-         increment to handle multibyte characters.  Fixes bug reported by
-         Enrico Maria De Angelis <enricomaria.dean6elis@gmail.com>
-
-                                   9/5
-                                   ---
-lib/readline/vi_mode.c
-       - rl_vi_fword,rl_vi_fWord: use rl_vi_advance_point instead of a simple
-         increment to handle multibyte characters
-       - rl_vi_bword,rl_vi_bWord: use rl_vi_backup_point instead of a simple
-         decrement (and _rl_vi_advance_point where necessary) to handle
-         multibyte characters
-       - rl_vi_complete,_rl_vi_change_mbchar_case,_rl_vi_domove_motion_cleanup:
-         use _rl_vi_advance_point instead of simple rl_point increment
-       - vi_delete_dispatch,vi_change_dispatch,vi_yank_dispatch: use
-         INCREMENT_POS instead of a simple increment to rl_mark to handle
-         multibyte characters
-       - rl_vi_column: use _rl_forward_char_internal, starting with
-         rl_point == 0, to handle multibyte characters (Posix says `character
-         position', not index)
-
-                                   9/7
-                                   ---
-configure.ac
-       - changed release status to `beta'
-
-                                   9/9
-                                   ---
-lib/readline/display.c
-       - _rl_update_final: if the bottom line has zero characters and we are
-         on that line at column 0, don't bother with an additional \r\n.
-         Fixes redisplay nit reported by Per Bothner <per@bothner.com>
-
-
-configure.ac
-       - openbsd needs DEV_FD_STAT_BROKEN defined
-
-[bash-5.0-beta frozen]
-
-                                  9/11
-                                  ----
-builtins/exec.def
-       - exec_builtin: make sure to sync the buffered stream where bash is
-         reading input (especially if it's fd 0) so a command exec'd by the
-         script can read the rest of stdin after the exec
-
-                                  9/15
-                                  ----
-lib/readline/histexpand.c
-       - history_tokenize_internal: if the event contains embedded newlines
-         (e.g., bash with command-oriented history and lithist), use them as
-         word delimiters, equivalent to space and tab, so they don't end up
-         as separate words. Fixes issue pointed out by Viktor Dukhovni
-         <ietf-dane@dukhovni.org>
-       - history_tokenize_word: don't break if we get a newline (though we
-         shouldn't get one due to the loop in history_tokenize_internal
-       - history_expand_internal: use newline as a whitespace character when
-         expanding by words, as we do with history_tokenize_internal
-
-jobs.h
-       - J_PIPEFAIL: new flag for `flags' element of job struct
-
-jobs.c
-       - stop_pipeline: if pipefail_opt set, newjob gets J_PIPEFAIL in its
-         flags word
-       - raw_job_exit_status: use J_PIPEFAIL (setting of pipefail when job
-         created) instead of current setting of pipefail status to determine
-         how to compute exit status of pipeline. Tentative implementation of
-         Posix proposal
-
-expr.c
-       - exp0: don't call expr_bind_variable with a NULL string.  Fixes
-         fuzzing bug reported by Eduardo Bustamante <dualbus@gmail.com>
-       - expr_bind_variable: don't try to do anything with a NULL or empty
-         LHS
-
-                                  9/16
-                                  ----
-lib/readline/undo.c
-       - rl_do_undo: before we release the undo list entry we've just
-         processed, make sure we avoid any pointer aliasing issues caused
-         by having the entry being removed as part of the undo list in
-         _rl_saved_line_for_history. Fixes fuzzing bug reported by
-         Eduardo Bustamante <dualbus@gmail.com>
-
-                                  9/17
-                                  ----
-[bash-5.0-beta released]
-
-                                  9/18
-                                  ----
-lib/readline/bind.c
-       - name_and_keymap: new struct for keymap names and maps
-       - builtin_keymap_names: static array of builtin keymap names and
-         maps; preparing for allowing applications to set the names of
-         keymaps they create; keymap_names is initially a pointer to
-         this array
-       - _rl_get_keymap_by_name,_rl_get_keymap_by_map: new functions for
-         searching the keymap_names array and returning an index
-       - rl_get_keymap_by_name, rl_get_keymap_name: rewritten in terms of
-         new functions above
-       - rl_set_keymap_name (char *name, Keymap map): new function, set
-         name of MAP to NAME. NAME must not be builtin; MAP must not be one
-         of the builtin keymaps. Request and initial implementation from
-         Tom Tromey <tom@tromey.com>
-
-lib/readline/readline.h
-       - rl_set_keymap_name: new extern declaration for new public function
-
-lib/readline/doc/rltech.texi
-       - rl_set_keymap_name: add documentation
-
-lib/readline/doc/rluser.texi
-       - add text to `set keymap' description to note that applications
-         can add keymap names that can be used there
-
-                                  9/20
-                                  ----
-parse.y
-       - shell_getc: don't execute the alias hack (returning a space at the
-         end of the string) if we are parsing a command substitution that
-         starts with a double paren (subshell inside a comsub), in which
-         case the flags are PSH_DPAREN. Fixes fuzzing bug reported by
-         Eduardo Bustamante <dualbus@gmail.com>
-
-lib/readline/isearch.c
-       - _rl_isearch_dispatch: default case: make sure we check multibyte
-         char length when deciding whether to enlarge the search string
-         buffer, instead of using the old assumption. Fixes fuzzing bug
-         reported by Eduardo Bustamante <dualbus@gmail.com>
-
-builtins/fc.def,execute_cmd.c
-       - fixed some missing free()s uncovered by coverity. Report from
-         Siteshwar Vashisht <svashisht@redhat.com>
-
-lib/glob/glob.c
-       - glob_vector: make sure name_vector is initialized to NULL
-
-lib/sh/{pathcanon,pathphys}.c
-       - {pathcanon,pathphys}: use memmove instead of strcpy on a possibly-
-         overlapping region of memory
-
-subst.c
-       - parameter_list_transform: make sure to dispose the word list in all
-         cases before returning
-       - parameter_brace_expand_rhs: make sure t1 is freed before returning
-         due to an invalid name resulting from an indirect expansion
-
-support/man2html.c
-       - fixed a couple of memory leaks
-
-                                  9/21
-                                  ----
-subst.c
-       - process_substitute: if we are part of a job control process chain
-         (pipeline_pgrp != shell_pgrp), have the child shell forked to run
-         the process substitution set pipeline_pgrp to its own PID,
-         effectively becoming a process group leader without changing
-         its own process group. Fixes stray SIGHUP issue reported by
-         Jeremy Townshend <jeremy.townshend@gmail.com>
-                                  9/23
-                                  ----
-arrayfunc.c
-       - assign_array_element: if we are assigning to an existing associative
-         array, and assoc_expand_once is set, allow `*' and `@' as subscripts.
-         Partial fix for report from Grisha Levit <grishalevit@gmail.com>
-
-variables.c
-       - bind_int_variable: if valid_array_reference (lhs) is not true,
-         make sure that the lhs is a valid identifier before assigning the
-         value
-
-arrayfunc.c
-       - valid_array_reference: allow blank subscripts. They are treated as
-         `normal' keys for associative arrays and evaluate to 0 for indexed
-         arrays. More of fix for report from Grisha Levit
-         <grishalevit@gmail.com>
-
-                                  9/24
-                                  ----
-bashline.c
-       - restore_tilde: if the expanded length (xl) is longer than vl
-         we end up requesting a negative amount of memory (an extremely
-         large unsigned number). Just punt and return val in this case.
-         Fuzzing bug reported by Eduardo Bustamante <dualbus@gmail.com>
-       - restore_tilde: make sure we return what the user typed if tilde
-         expansion fails
-
-                                  9/29
-                                  ----
-builtins/shopt.def
-       - uncomment `localvar_unset' option definition
-
-doc/{bash.1,bashref.texi}
-       - document `localvar_unset' shell option
-
-arrayfunc.c
-       - valid_array_reference: if we are parsing a subscript for an existing
-         associative array, the `assoc_expand_once' option is set, and the
-         VA_ONEWORD flag is set in FLAGS (meaning there should be nothing
-         following the closing `]'), don't call skipsubscript to find the
-         closing `]', use one that is at the end of the word. Part of fix for
-         issue reported by Grisha Levit <grishalevit@gmail.com>
-
-builtins/{printf,set}.def
-       - pass VA_ONEWORD as part of flags value everywhere valid_array_reference
-         is used
-
-config-top.h
-       - CHECKWINSIZE_DEFAULT: now 1, so check_window_size is on by default
-       - HISTEXPAND_DEFAULT: new define, allows builder to enable or disable
-         history expansion by default at build time
-
-doc/{bash.1,bashref.texi}
-       - checkwinsize: document new default value
-
-bashhist.h
-       - HISTEXPAND_DEFAULT: don't define if it's already defined. Strict
-         POSIX mode continues to default to off
-
-                                  9/30
-                                  ----
-lib/readline/input.c
-       - win32_isatty: win32-specific changes from GDB. Patch submitted by
-         Tom Tromey <tom@tromey.com>, originally from Eli Zaretskii
-         <eliz@gnu.org>
-
-                                  10/1
-                                  ----
-lib/readline/vi_mode.c
-       - rl_vi_start_inserting: start an undo group so we can grab the text
-         inserted here as a single unit, avoiding any insert coalescing
-         performed by rl_insert_text. Report and fix from Richard Todd
-         <richard.w.todd@outlook.com>
-
-                                  10/3
-                                  ----
-subst.c
-       - parameter_brace_transform: if we're asked to display the attributes
-         of an unset variable, check that the variable exists even if
-         get_var_and_type returns NULL (it checks invisible_p). Requested by
-         Michal Pesa <pesathem@gmail.com>
-
-lib/readline/kill.c
-       - _rl_bracketed_text: new function, collects the text pasted in
-         bracketed paste mode and consumes the bracketed paste end marker;
-         returns the pasted text and its length
-       - rl_bracketed_paste_begin: call _rl_bracketed_text to collect the
-         text
-
-lib/readline/isearch.c
-       - _rl_isearch_dispatch: set cxt->lastc to -7 if the input resolves to
-         rl_bracketed_paste_begin
-       - _rl_isearch_dispatch: if cxt->lastc == -7, call _rl_bracketed_text
-         to collect the pasted text and add it to the accumulating search
-         string. Only works if ESC is not one of the isearch terminators.
-         Fixes issue reported in Debian bug report 891780,
-         https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=891780
-
-                                  10/5
-                                  ----
-variables.c
-       - push_posix_tempvar_internal: new function, body of push_func_var
-         with additional argument saying whether it's being called from a
-         function or (special) builtin code path
-       - push_builtin_var: new function, calls push_posix_tempvar_internal
-         with second argument indicating builtin code path
-       - push_func_var: now a stub that calls push_posix_tempvar_internal
-         with second argument indicating function code path
-       - pop_scope: if called from a special builtin, call push_builtin_var
-         instead of push_func_var to do the right variable propagation
-
-builtins/shopt.def
-       - progcomp_alias: uncomment, make available to users
-
-doc/{bash.1,bashref.texi},lib/readline/doc/rluser.texi
-       - progcomp_alias: document shopt option, describe its use in
-         the section on programmable completion
-
-trap.c
-       - decode_signal: handle SIGRTMIN+n at runtime, with the `SIG' prefix
-         or without, case-insensitively if requested, and return SIGRTMIN+n.
-         These values could be different than what was available at compile
-         time. Report and patch from Rasmus Villemoes <rv@rasumsvillemoes.dk>
-
-                                  10/8
-                                  ----
-execute_cmd.c
-       - execute_command_internal: only set line_number from command->value.Subshell
-         if the type == cm_subshell; otherwise defer and set later
-
-                                  10/10
-                                  -----
-examples/loadables/seq.c
-       - seq: new loadable builtin, derived originally from coreutils:seq.c
-         but with very little of that code remaining
-
-                                  10/12
-                                  -----
-trap.c
-       - run_pending_traps,_run_trap_internal: honor evalnest_max and
-         increment/decrement evalnest accordingly, since trap actions
-         are processed as if run by `eval'. Feature suggsted by Mike
-         Gerwitz <mtg@gnu.org>
-
-                                  10/16
-                                  -----
-expr.c
-       - expr_skipsubscript: new function, calls skipsubscript with flags
-         similar to arrayfunc.c:valid_array_subscript if assoc_expand_once
-         is set and it looks like we've already expanded the subscript of
-         an associative array. Reported back on 8/27 by Grisha Levit
-         <grishalevit@gmail.com>
-       - readtok: call expr_skipsubscript instead of skipsubscript
-
-arrayfunc.c
-       - valid_array_reference: call skipsubscript with a third arg computed
-         from the VA_NOEXPAND flag only if we're expanding an associative
-         array subscript -- we already figure out whether or not we are
-
-[bumped release status to beta2]
-
-                                  10/20
-                                  -----
-builtins/setattr.def
-       - set_or_show_attributes: after isolating NAME, make sure to restore
-         the "[+]=" in case we need the word later. Issue pointed out by
-         Grisha Levit <grishalevit@gmail.com>
-
-                                  10/21
-                                  -----
-lib/readline/search.c
-       - noninc_search_from_pos: if we are supposed to be searching for a
-         pattern (vi mode), make sure to pass S to _hs_history_patsearch,
-         since that has any leading `^' stripped
-
-lib/readline/histsearch.c
-       - _hs_history_patsearch: if the search isn't anchored, put a `*' at
-         the beginning to force fnmatch to match anywhere in the line (could
-         look at this later to make a change to history_search_internal that
-         would avoid the need to add the leading `*')
-
-subst.c
-       - parameter_brace_expand_rhs: treat a failure to assign a variable with
-         a ${param:=value} expansion as an expansion error, and, in a non-
-         interactive posix-mode shell, exit the shell
-       - param_expand: don't set W_SPLITSPACE for $* unless IFS is NULL;
-         consistent with other uses of W_SPLITSPACE
-
-                                  10/22
-                                  -----
-doc/{bash.1,bashref.texi}
-       - tweak description of bash conditional expressions to note that the
-         test and [ commands determine their behavior based on the number of
-         arguments. Suggested by Ilkka Virta <itvirta@iki.fi>
-
-                                  10/24
-                                  -----
-execute_cmd.c
-       - execute_simple_command: don't set $_ to NULL when executing a
-         command that forks; just leave it unchanged. Tweaked the documentation
-         slightly as a result. Inspired by report from Ricky Tigg
-         <ricky.tigg@gmail.com>
-
-                                  10/28
-                                  -----
-redir.c
-       - here_document_to_fd: make sure the temp files used to store here
-         documents are readable (and writable, where necessary) by the user.
-         This can happen in the unlikely case that someone decides to shoot
-         himself in the foot by setting the umask to 400. Issue originally
-         raised back in March by Stephane Chazelas
-         <stephane.chazelas@gmail.com>; fix inspired by Martijn Dekker
-         <martijn@inlv.org>
-
-                                  10/29
-                                  -----
-lib/readline/terminal.c
-       - bind_termcap_arrow_keys: bind the "kI" capability (what the Insert
-         keypad key outputs) to overwrite mode. Patch from Xose Vazquez Perez
-         <xose.vazquez@gmail.com>
-
-                                  10/30
-                                  -----
-braces.c
-       - mkseq: make sure to terminate result array before passing it to
-         strvec_dispose on an interrupt. Report and fix from Corbin Souffrant
-         <corbin.souffrant@gmail.com>
-
-                                  11/6
-                                  ----
-trap.c
-       - _run_trap_internal: if the signal shows up as SIG_CHANGED after
-         running the trap handler, check for terminating signals and run any
-         terminating signal handler indicates. Fixes issue reported by
-         Owen Stephens <owen@owenstephens.co.uk>
-
-                                  11/7
-                                  ----
-execute_cmd.c
-       - execute_builtin: don't merge the temporary environment when the
-         `return' builtin is being executed if it's being executed by the
-         `command' builtin, since that's supposed to inhibit the special
-         builtin properties. Part of POSIX conformance problems reported
-         by Martin Rehak <martin.rehak@oracle.com>
-
-builtins/cd.def
-       - bindpwd: if canonicalization fails when -P is specified (e.g. if the
-         directory name length exceeds PATH_MAX), reset dirname ($PWD value) =
-         to the_current_working_directory (Posix cd description, step 10.)
-         Part of POSIX conformance problems reported by Martin Rehak
-         <martin.rehak@oracle.com>
-
-builtins/kill.def
-       - kill_builtin: support -sSIG and -nSIG without requiring them to be
-         separate arguments. POSIX says a "conforming implementation" should
-         accept them.
-         Part of POSIX conformance problems reported by Martin Rehak
-         <martin.rehak@oracle.com>
-
-                                  11/8
-                                  ----
-arrayfunc.c
-       - array_value_internal: return NULL for invisible array variables.
-         Fixes issue with FUNCNAME sometimes returning invalid value reported
-         by Great Big Dot <greatbigdot@gmail.com>
-
-builtins/cd.def
-       - change_to_directory: if we are in posix mode, and the chdir to the
-         absolute pathname ($PWD/dirname) fails, return an error without
-         trying to use just `dirname' (posix cd step 10).
-         Part of POSIX conformance problems reported by Martin Rehak
-         <martin.rehak@oracle.com>
-
-execute_cmd.c
-       - execute_case_command: use expand_word_leave_quoted to expand the
-         word, then dequote the resulting string. This performs the
-         expansions in the order posix specifies.
-         Part of POSIX conformance problems reported by Martin Rehak
-         <martin.rehak@oracle.com>
-
-subst.c
-       - expand_word_unsplit: rewrite in terms of expand_word_leave_quoted
-       - ifs_whitespace: new macro, Posix ifs whitespace (ISSPACE; member
-         of current locale's space char class)
-       - ifs_whitesep: new macro, whitespace that is a member of $IFS; used
-         by list_string and get_word_from_string
-       - list_string: use ifs_whitesep instead of spctabnl in case $IFS
-         contains whitespace characters that are not space, tab, or newline
-       - get_word_from_string: use ifs_whitesep instead of spctabnl in case
-         $IFS contains whitespace characters that are not space, tab, or
-         newline.
-         Part of POSIX conformance problems reported by Martin Rehak
-         <martin.rehak@oracle.com>
-
-                                  11/9
-                                  ----
-general.c
-       - posix_initialize: enable the shift_verbose option when turning on
-         posix mode, and disable it when posix mode is disabled. From a
-         report by Eric Blake <eblake@redhat.com>
-
-doc/bashref.texi
-       - posix mode: note the effect of posix mode on shift_verbose
-
-                                  11/12
-                                  -----
-subst.c
-       - parameter_brace_expand: if parameter_brace_expand_word returns an
-         error, make sure to set TEMP = 0 (to note that the variable is unset).
-         From a report by Grisha Levit <grishalevit@gmail.com>
-       - param_expand: if expanding $! when set -u is enabled, honor the
-         PF_IGNUNBOUND flag and just return NULL, relying on the caller to
-         take care of understanding that the variable is unset
-         From a report by Grisha Levit <grishalevit@gmail.com> 
-       - parameter_brace_expand: if we are checking nullness, and we have a
-         valid array expansion, a quoted null string resulting from the array
-         expansion of a * or @ subscript satisfies the nullness check.
-         From a report by Grisha Levit <grishalevit@gmail.com>
-
-                                  11/14
-                                  -----
-aclocal.m4
-       - BASH_CHECK_LIB_TERMCAP: add last-ditch check for libncursesw, since
-         it's apparently the only curses library on some distributions.
-         Report from John Frankish <john.frankish@outlook.com>
-
-                                  11/16
-                                  -----
-bashline.c
-       - attempt_shell_completion: allow an initial word completion to
-         complete a partial first word (point appears in the middle of
-         the word) before resorting to command completion. Report and fix
-         from Luca Boccassi <bluca@debian.org>
-
-[bash-5.0-beta2 frozen]
-
-                                  11/27
-                                  -----
-bashline.c
-       - attempt_shell_completion: better fix for problems with fix from
-         11/16. Report and fix from Tom Ryder <tom@sanctum.geek.nz>
-
-expr.c
-       - expr_skipsubscript: fix return type. Report and fix from
-         Andreas Schwab <schwab@linux-m68k.org>
-
-                                  11/29
-                                  -----
-subst.c
-       - quote_escapes_internal: refactored quote_escapes into a function
-         that takes an additional flag saying whether or not we are going
-         to split the result. If we are not, and CTLESC is in IFS, we quote
-         the CTLESC (ditto for CTLNUL) to prevent it being removed when the
-         string is dequoted.
-       - quote_escapes: call quote_escapes_internal with FLAGS == 0
-       - quote_rhs: new function, calls quote_escapes with FLAGS == PF_NOSPLIT2
-         so that a CTLESC will be quoted if CTLESC is in $IFS
-       - parameter_brace_expand_word: call quote_rhs on the value of a variable
-         if PFLAGS includes PF_ASSIGNRHS, indicating that we will not be
-         splitting the word, but we will be dequoting it. Fixes bug reported
-         by Martijn Dekker <martijn@inlv.org>
-       - param_expand: same change as for parameter_brace_expand_word
-
-execute_cmd.c
-       - execute_in_subshell: if we are running a trap (running_trap > 0),
-         turn off the SIG_INPROGRESS and SIG_CHANGED flags for that signal
-         by calling run_trap_cleanup and reset running_trap to 0 (watch the
-         second part!). Tagged for bash-5.1.
-
-                                  11/30
-                                  -----
-lib/readline/doc/rltech.texi
-       - rl_set_keymap_name: correct typo in the name; some updates to the
-         description that clarify usage. Report from <hirooih@gmail.com>
-
-                                  12/4
-                                  ----
-aclocal.m4
-       - BASH_FUNC_FNMATCH_EQUIV_FALLBACK: a test of whether fnmatch(3)
-         understands bracket equivalence classes ([=c=]) for characters
-         that collate with equal weights but are not identical
-
-configure.ac,config.h.in
-       - call BASH_FUNC_FNMATCH_EQUIV_FALLBACK and define
-         FNMATCH_EQUIV_FALLBACK to 1 if it can be used for equivalence
-         classes
-
-                                  12/5
-                                  ----
-execute_cmd.c
-       - eval_arith_for_expr,execute_arith_command,execute_cond_command: make
-         sure running_trap == 0 before we reset the_printed_command_except_trap
-         Report from Peng Yu <pengyu.ut@gmail.com>
-
-lib/glob/smatch.c
-       - _fnmatch_fallback_wc: new function, takes two wide characters c1 and
-         c2, converts them to a pattern ([[=c2=]]) and a string (c1) for
-         fnmatch to determine whether or not they are members of the same
-         equivalence class
-       - collequiv_wc: call _fnmatch_fallback_wc if rangecmp_wc returns
-         non-zero if FNMATCH_EQUIV_FALLBACK is defined, so we know that
-         fnmatch understands equivalence classes. Another Posix test suite
-         issue from Martin Rehak <martin.rehak@oracle.com>
-
-                                  12/6
-                                  ----
-redir.c
-       - add missing cases to switch statements to shut up gcc
+[bash-5.1 released]
 
                                   12/7
                                   ----
-builtins/set.def
-       - find_minus_o_option: new helper function, returns index into
-         o_options given option name
-       - minus_o_option_value,set_minus_o_option: use find_minus_o_option
-
-general.c
-       - new table of variables (currently all shopt options) that are
-         modified by going into and out of posix mode; num_posix_options()
-         returns the number of variables
-       - get_posix_options: fill in a bitmap passed as an argument (or return
-         a new one) of values of posix-mode-modified variables in the table
-       - set_posix_options: set values of posix-mode-modified variables from
-         the table using the passed bitmap for values
-
-builtins/set.def
-       - get_current_options: make the bitmap large enough to hold the options
-         in the set table and the table of posix-mode-modified variables; call
-         get_posix_options to fill in those values after the values from the
-         o_options table
-       - set_current_options: call set_posix_options to reset the values of
-         the posix-mode-modified variables at the end of the bitmap, after
-         the o_options values. Fixes issue reported by PJ Eby
-         <pje@telecommunity.com>
-
-                                  12/9
-                                  ----
-parse.y
-       - select_command: add two additional productions to support select
-         commands without a word_list following the `in'. Fixes omission
-         reported by Martijn Dekker <martijn@inlv.org>
+Makefile.in
+       - bashline.o: add dependency on ${DEFDIR}/builtext.h. Report from
+         Fazal Majid <fazal@majid.org>
 
                                   12/11
                                   -----
-variables.c
-       - assign_in_env: don't allow namerefs in temporary environment
-         assignments to create variables with invalid names for export. Fixes
-         bug reported by Grisha Levit <grishalevit@gmail.com>
-
-                                  12/14
-                                  -----
-parse.y
-       - don't change last_command_exit_value in the 'error yacc_EOF' production
-         if the parser sets it to something non-zero; just make sure it
-         indicates an error. Fixes problem with unexpected EOF in eval
-         reported by Martijn Dekker <martijn@inlv.org>
+builtins/wait.def
+       - wait_builtin: don't assign the variable given with -p if there are no
+         jobs to wait for. Report and fix from OÄuz <oguzismailuysal@gmail.com>
 
-                                  12/17
-                                  -----
-expr.c
-       - exp2 -> expmuldiv
+arrayfunc.c
+       - kvpair_assignment_p: return non-zero if argument L appears to be a
+         key-value pair associative array compound assignment
+       - expand_and_quote_kvpair_word: run a single word in a key-value pair
+         associative array compound assignment through the appropriate
+         expansions and single-quote the result
 
-lib/sh/smatch.c
-       - fnmatch: add extern declaration if FNMATCH_EQUIV_FALLBACK is being
-         used
+arrayfunc.h
+       - kvpair_assignment_p, expand_and_quote_kvpair_word: extern declarations
 
-hashlib.c
-       - hash_string: add FNV offset as initial value for hash instead of
-         starting at 0, changes hash for associative arrays and requires a
-         bunch of changes to the "right" test suite files
+subst.c
+       - expand_oneword: detect whether VALUE appears to be a key-value
+         pair compound assignment and call the appropriate function to expand
+         each word in the resulting list. Fixes inconsistency reported by
+         oguzismailuysal@gmail.com
 
-variables.c
-       - rseed: make it explicitly 32 bits; that's all we're interested in
-         anyway
+                                  12/12
+                                  -----
+subst.c
+       - command_substitute: don't reset pipeline_pgrp to shell_pgrp if we
+         are already forked to run a command (SUBSHELL_FORK). Fixes SIGINT
+         in command substitution in here-document in forked child issue
+         reported by oguzismailuysal@gmail.com
 
                                   12/18
                                   -----
-
-variables.c
-       - brand: add some comments, make the constants explicitly 32 bits;
-         use signed 32-bit values for the intermediate calculations. The
-         algorithm is still minstd
-
-[bash-5.0-rc1 frozen]
+execute_cmd.c
+       - execute_pipeline: execute the lastpipe code even if prev == 0. It
+         can only be 0 here if stdin was closed when this function was
+         executed
+       - execute_pipeline: if prev == 0, set lstdin to a sentinel (-1) that
+         means to close fd 0 after executing the command, and call close(prev)
+         before restoring stdin. restore_stdin now understands -1, and closes
+         fd 0. Fixes issue reported by Tomas Janousek <tomi@nomi.cz>
 
                                   12/21
                                   -----
-doc/bash.1
-       - }1: remove macro definition; it's outlived its bugfix purpose.
-         Report from Derek Schrock <dereks@lifeofadishwasher.com>
-
-                                  12/22
-                                  -----
-subst.c
-       - expand_arith_string: set W_NOTILDE in the flags so we don't perform
-         tilde expansion at all, even for the previously-special-case array
-         subscript expansion. Report from Bize Ma <binaryzebra@gmail.com>
-       - expand_word_internal: take out Q_ARRAYSUB check for tilde expansion
+doc/bashref.texi
+       - PROMPT_COMMANDS: clean up a couple of remaining instances of this
+         name. Report from Eli Schwartz <eschwartz@archlinux.org>
 
                                   12/26
                                   -----
-builtins/evalstring.c
-       - parse_and_execute: if the eval builtin gets a parser error while
-         parsing a  string in posix mode, don't exit the shell if the eval
-         was run by the command builtin. report from Martijn Dekker
-         <martijn@inlv.org>
-
-examples/loadables/{basename,dirname}.c
-       - dirname_builtin: skip over any `--' ending the options.  Report from
-         Peng Yu <pengyu.ut@gmail.com>
+subst.c
+       - command_substitute: make sure that the child process always has
+         pipeline_pgrp == shell_pgrp: if pipeline_pgrp is non-zero when we
+         get to the child, meaning that we're part of an already-forked
+         child that is, for instance, running redirections, we need to reset
+         shell_pgrp to it to preserve the invariant. Fixes bug with terminal
+         being set to the incorrect pgrp reported by oguzismailuysal@gmail.com
 
-                                  12/27
+                                  12/29
                                   -----
-examples/loadables/mkdir.c
-       - make_path: add argument noting whether or not the user specified -m;
-         only attempt the chmod on an existing directory if the user did so
-       - make_path: when creating intermediate directories, perform the
-         mkdir (path, 0) and chmod separately as the posix text recommends
+configure.ac,builtins/shobj-conf,m4/threadlib.m4
+       - midnightbsd: update auto-configuration to treat MidnightBSD like
+         FreeBSD. From https://savannah.gnu.org/patch/?10006
 
-                                  12/28
+                                  12/30
                                   -----
-parser.h
-       - PST_COMMENT: new state, set when the shell is reading characters
-         until newline as part of comment processing
+examples/loadables/stat.c
+       - stattime: use strftime with a default format or the format supplied
+         with the -F option to format the file time information
+       - stat_builtin: now takes a -F fmt option for a strftime format string;
+         change to function calling sequences to pass the format down to
+         stattime
 
-parse.y
-       - shell_getc: don't return a space at the end of a token if the parser
-         is consuming a comment. Fixes bug reported by Harald van Dijk
-         <harald@gigawatt.nl>
+examples/loadables/Makefile.in
+       - stat: now built and installed by default
 
                                   12/31
                                   -----
-lib/glob/glob_loop.c
-       - INTERNAL_GLOB_PATTERN_P: revert change from 4/27 that makes this
-         function return non-zero for a backslash in the string. Based on a
-         report from Tom Ryder <tom@sanctum.geek.nz>
-
-[bash-5.0 frozen]
-
-[bash-5.0 released]
-
-                                1/6/2019
-                                --------
-
-examples/loadables/basename.c
-       - make sure to include bashgetopt.h. Reported by Angel 
-         <angel@16bits.net>
+command.h
+       - SUBSHELL_IGNTRAP: new flag value
 
-lib/malloc/malloc.c
-       - stdlib.h: include if botch isn't defined to provide a declaration
-         for abort()
+jobs.c
+       - make_child: set SUBSHELL_IGNTRAP in subshell_environment in the
+         child process, meaning that we should not execute trap handlers for
+         trapped signals
 
-hashlib.c,Makefile.in
-       - fixes to make hash library testing work for others from
-         Eduardo Bustamante <dualbus@gmail.com>
+execute_cmd.c
+       - execute_in_subshell, execute_simple_command, execute_disk_command:
+         make sure to unset SUBSHELL_IGNTRAP after a child process restores
+         the original signal dispositions
+       - execute_simple_command: make sure to set SUBSHELL_IGNTRAP after
+         make_child returns and we're setting subshell_environment directly
 
-lib/readline/unicode.c
-       - u32toutf16: correct the second argument to be wchar_t *, and treat
-         it as such, even though it doesn't make a difference in practice.
-         Report and fix from Eduardo Bustamante <dualbus@gmail.com>
+subst.c
+       - command_substitute,process_substitute: unset SUBSHELL_IGNTRAP after
+         the child process has reset the trapped signal dispositions
 
-                                   1/8
-                                   ---
+trap.c
+       - trap_handler: if we get a signal for which we have set a trap, but
+         SUBSHELL_IGNTRAP is set in subshell_environmnent, make sure we
+         restore the original signal disposition and resend the signal to
+         ourselves. Fixes issue reported by Nikolay Borisov <nborisov@suse.com>
+         (or at least makes the race window much smaller)
 
-builtins/return.def
-       - return_builtin: return EX_USAGE if we're not executing a shell
-         function or sourcing a script, so a posix-mode shell exits. Fixes
-         bug reported by Robert Hailey <bash@osndok.com>
+sig.c
+       - initialize_terminating_signal: set the original signal handler from
+         the return value from sigaction; a minor optimization that saves a
+         system call or two
 
+                                1/5/2021
+                                --------
 builtins/declare.def
-       - declare_internal: don't let `declare -f +f' turn off the function
-         attribute. Fix from Grisha Levit <grishalevit@gmail.com>
-       - declare_internal: reject attempts to add the -A or -a attributes
-         to functions. Report from Grisha Levit <grishalevit@gmail.com>
+       - declare_internal: make some option combinations that don't make
+         sense errors (e.g., -f and -a/-A/-i/-n)
+       - declare_internal: if we build a new variable name by expanding the
+         value of a nameref variable, make sure to chop the `+' in a `+='
+         off before going on
 
-                                   1/9
+                                   1/7
                                    ---
-bashline.c
-       - completion_glob_pattern: new function, returns true if the passed
-         string contains a glob pattern that should be process by the glob
-         completion code. Completion glob patterns don't pay attention to
-         backslashes unless they're the last character in the string. This
-         is a different, more self-contained, fix for the problem reported
-         by Tom Ryder <tom@sanctum.geek.nz>
-
-lib/glob/glob_loop.c
-       - INTERNAL_GLOB_PATTERN_P: restore change from 4/27 and make this
-         function return non-zero if it encounters a backslash in the string.
-         It needs to match pathexp.c:unquoted_glob_pattern_p(). Adds fix
-         back for issue reported by axel@freakout.de
-
-test.c
-       - arithcomp: when calling evalexp, make sure to call it with the
-         EXP_EXPANDED flag, since all arguments here have been evaluated
-         already
-
-arrayfunc.c
-       - array_expand_index: call evalexp with EXP_EXPANDED flag, since we
-         have run the string through expand_arith_string already
-
-                                  1/11
-                                  ----
-parser.h
-       - PST_ENDALIAS: new state, means we just consumed the last character
-         of an alias expansion and returned the fake space
-
-parse.y
-       - shell_getc: add PST_ENDALIAS to parser_state before returning the
-         fake space that marks the end of the alias, making sure to do it
-         only once. With that set, fall through to the pop_string(), making
-         sure to unset PST_ENDALIAS. Fixes alias bug reported by
-         Ante Peric <synthmeat@gmail.com>
+doc/{bash.1,bashref.texi}
+       - bind: add an example to the synopsis making it clear that you can
+         use any readline command line as a non-option argument, as it says
+         in the text. From a report from Dan Jacobson <jidanni@jidanni.org>
 
                                   1/12
                                   ----
-lib/glob/glob.c
-       - {extglob,wextglob}_skipname: make sure we check the rest of the
-         pattern if the extglob pattern is null, and therefore won't match
-         anything. If that is followed by a `.', quoted or unquoted, we can
-         match a leading `.' in the pathname. This code is currently not
-         active.
+locale.c
+       - local_shiftstates -> locale_shiftsates in the non-multibyte code
+         branch. Reported by Henry Bent <henry.r.bent@gmail.com>
 
-builtins/hash.def
-       - hash_builtin: if -d is supplied without an argument, print an error
-         message and return failure, just like -t without an argument. Fixes
-         inconsistency reported by Dan Jacobson <jidanni@jidanni.org>
+subst.c
+       - expand_compound_assignment_word: make sure to call dispose_words on
+         the WORD_LIST * returned from expand_oneword after turning it back
+         into a string. Fixes memory leak reported by Alexander Mescheryakov
+         <alexander.s.m@gmail.com>
 
                                   1/13
                                   ----
-parse.y
-       - shell_getc: use shellblank when testing the last character of an
-         alias to determine whether or not to add a trailing space instead
-         of testing against a space only. These are the non-shell-metacharacters
-         that can delimit words. Used together with PST_ENDALIAS
-
-                                  1/17
-                                  ----
-parse.y
-       - shell_getc: keep track of whether the last character read from
-         shell_input_line is an unquoted backslash and don't add a space to
-         the end of an alias if the alias value ends in an unquoted backslash.
-         From an austin-group mailing list discussion message from
-         Harald van Dijk <ag@gigawatt.nl>
-
-                                  1/20
-                                  ----
-general.c
-       - check_identifier: make sure CHECK_WORD is non-zero before we check
-         whether or not the word consists of all digits. This allows function
-         names to consist solely of digits when not in posix mode. From a
-         report by Andrey Butirsky <butirsky@gmail.com>
-
-                                  1/22
-                                  ----
-bashline.c
-       - initialize_readline: only unbind ^E in vi_movement_keymap if it's
-         still bound to the default rl_emacs_editing_mode. Fixes bug
-         reported by Greg Bell <gbell_spamless@yahoo.com>
-
-                                  1/23
-                                  ----
-builtins/shopt.def
-       - we need the extern declaration for syslog_history if SYSLOG_HISTORY
-         is defined, since it's used even if SYSLOG_SHOPT is not defined.
-         From a Gentoo Linux bug report, eventually reported to bug-bash by
-         Tomas Mozes <hydrapolic@gmail.com>
-
-                                  1/25
-                                  ----
-command.h
-       - CMD_TRY_OPTIMIZING: new command flag, means this (simple) command is
-         a candidate for fork optimization (suppression)
-
-builtins/evalstring.c
-       - can_optimize_connection: new function, takes an AND_OR list (&& or
-         ||) from parse_and_execute, makes sure it's the last in a possibly
-         multi-command list, and returns non-zero if it's a simple command,
-         indicating that it's a candidate for fork optimization.
-       - parse_and_execute: if we have a cm_connection command, call
-         can_optimize_connection to determine if it's a suitable candidate
-         and set CMD_TRY_OPTIMIZING if that returns non-zero
-       - optimize_fork: don't bother unless the rhs of the && or || command
-         has the CMD_TRY_OPTIMIZING flag set. These fix the bug reported by
-         Brad Spencer <bspencer@blackberry.com>
-
-execute_cmd.c
-       - execute_connection: case AND_AND and OR_OR: call optimize_fork on
-         the right side of the command before executing `second'. This will
-         safely restore the fork optimization we removed from
-         parse_and_execute()
-
-builtins/complete.def
-       - build_actions: make sure the function name argument to -F is a
-         valid shell function name: it doesn't contain any invalid posix-
-         mode characters and doesn't contain any shell break characters that
-         would need to be quoted when defining a function. Fixes issue
-         reported by Great Big Dot <greatbigdot@gmail.com>
-
-                                  1/28
-                                  ----
 variables.c
-       - dispose_temporary_env: make sure to save temporary_env to a temp
-         pointer and set temporary_env to NULL before trying to dispose it,
-         so no flush function ever tries to add a temporary variable back
-         into the table (e.g., bind_variable())
+       - bind_variable_internal: when performing an assignment to a subscripted
+         array variable that was the value of a nameref (used in the original
+         assignment), don't call make_variable_value on the value, since that
+         messes up +=. Just call assign_array_element and let that take care
+         of calling make_variable_value appropriately. Fixes bug reported by
+         Oguz <oguzismailuysal@gmail.com>
 
-                                  1/29
+                                  1/14
                                   ----
-builtins/evalstring.c
-       - can_optimize_connection,optimize_fork: add the last command in lists
-         separated by `;' to the list of candidates for fork optimization
+findcmd.c
+       - search_for_command: if `checkhash' is set, don't add non-executable
+         files to the command hash table, since we will just remove them
+         later
 
-                                  1/30
-                                  ----
-examples/loadables/strftime.c
-       - strftime_builtin: try to extend the buffer longer than tbsize*3,
-         which is a minimum of 24 characters, in case some of the formats
-         (e.g., %c) expand to something longer than that. Fixes bug
-         reported by Stan Marsh <gazelle@xmission.com>
+lib/sh/winsize.c
+       - get_new_window_size: set *rp and *cp even if READLINE is not defined
 
-                                  1/31
+                                  1/15
                                   ----
-lib/readline/undo.c
-       - rl_do_undo: before inserting text while undoing UNDO_DELETE, or
-         performing a deletion while undoing UNDO_INSERT, make sure that
-         rl_point is valid by calling _rl_fix_point. Fuzzing bug and fix
-         from Eduardo Bustamante <dualbus@gmail.com>
-
-lib/readline/search.c
-       - _rl_nsearch_abort: validate new values for rl_point and rl_mark by
-         calling _rl_fix_point(). Fuzzing bug and fix from
-         Eduardo Bustamante <dualbus@gmail.com>
-
-subst.c
-       - string_extract_double_quoted: if we parse a syntactically-incorrect
-         $( expression while extracting a double-quoted string, si will
-         appear to go `backward'. Just skip over the rest of the string and
-         continue. Fuzzing bug from Eduardo Bustamante <dualbus@gmail.com>
-
-lib/readline/text.c
-       - rl_change_case: if towupper or towlower returns a valid wide char
-         that can't be converted back to a valid multibyte character, use
-         the original character and go on. Fuzzing bug from
-         Eduardo Bustamante <dualbus@gmail.com>
-
-lib/glob/glob.c
-       - wdequote_pathname: if there are no multibyte characters in pathname,
-         just call udequote_pathname and don't bother converting it to wide
-         characters
-       - glob_pattern_p: if there are no multibyte characters in the pattern,
-         just call internal_glob_pattern_p right away
-
-lib/glob/glob_loop.c
-       - INTERNAL_GLOB_PATTERN_P: return 2 if we see only backslash-quoted
-         characters without any other unquoted glob pattern characters, so
-         interested callers can shortcut and just dequote the pathname
-
-pathexp.c
-       - unquoted_glob_pattern_p: return 2 if we see only backslash-quoted
-         characters without any other unquoted glob pattern characters,
-         consistent with the glob library
-       - unquoted_glob_pattern_p: don't count a backslash quoting a slash as
-         a backslash that will trigger a call to shell_glob_filename, since
-         backslashes at the end of patterns (pathname components) will always
-         fail to match. XXX - this is provisional
-
-lib/glob/glob.c
-       - glob_filename: if we have a directory name that has no unquoted
-         special glob chars, but has backslashes, just dequote it and return
-         it without going through the rest of the glob expansions. Partial
-         fix for issue with unreadable directories reported by
-         Andrew Church <achurch+bash@achurch.org>
-
-                                   2/2
-                                   ---
-lib/readline/readline.c
-       - readline_internal_teardown: if revert-all-at-newline is set, make
-         sure that the history position is at the end of the history before
-         calling _rl_revert_all_lines(). Fixes bug reported by
-         johnlinp@gmail.com and frederik@ofb.net
-
-                                   2/4
-                                   ---
-builtins/complete.def
-       - complete_builtin: fix check for argument to -F to use strpbrk
-         instead of incomplete use of strcspn. Fix from Grisha Levit
-         <grishalevit@gmail.com>
+lib/sh/winsize.c
+       - get_new_window_size: call rl_set_window_size only if we can determine
+         we're using readline: an interactive shell without no-line-editing,
+         or if we've already initialized readline, presumably in a non-
+         interactive shell 
 
-                                   2/5
-                                   ---
-lib/readline/readline.c
-       - rl_parse_and_bind: change parsing of boolean variable values to
-         look for and consume an optional whitespace-delimited word. This
-         allows trailing spaces and everything that follows to work. Idea
-         from Bize Ma <binaryzebra@gmail.com>
-       - rl_parse_and_bind: print error message about unknown variable names
-         instead of calling rl_variable_bind to do it
-       - rl_variable_bind: report error if setting string variable returns
-         non-zero
-
-                                   2/6
-                                   ---
-lib/readline/histfile.c
-       - read_history_range: close FILE before returning if the history file
-         size is 0
+support/Makefile.in
+       - man2html: add LDFLAGS_FOR_BUILD to the recipe. Report from
+         Jeffrey Walton <noloader@gmail.com>
 
-                                  2/11
+                                  1/17
                                   ----
-bashline.c
-       - edit_and_execute_command: add the current line buffer to the history
-         list even if it's empty and rely on other code in bash_add_history
-         to take care to not add multiple semicolons with multiple blank
-         lines and command_oriented_history. Live with the blank lines as
-         history entries for now. Fixes problem reported by
-         Johannes Hielscher <jhielscher@posteo.de>
-
 lib/readline/misc.c
-       - _rl_revert_all_lines: renamed to _rl_revert_previous_lines, since
-         that is basically what it does
-       - _rl_revert_all_lines: now just makes sure the history offset is at
-         the end of the history and calls _rl_revert_previous_lines. Inspired
-         by a suggestion from johnlinp@gmail.com
+       - rl_operate_and_get_next: fix old K&R function declaration. Report
+         from Tom Tromey <tom@tromey.com>
 
 lib/readline/readline.c
-       - readline_internal_teardown: revert change of 2/2, moved that code
-         into the (new) _rl_revert_all_lines
-
-lib/readline/rlprivate.h
-       - _rl_revert_previous_lines: new extern declaration
-
-builtins/bind.def
-       - bind_builtin: make sure the unwind-protect gets run when the --help
-         option is used, so use `case GETOPT_HELP:' instead of `CASE_HELPOPT;'.
-         Report and fix from Koichi Murase <myoga.murase@gmail.com>
-
-                                  2/12
-                                  ----
-lib/readline/util.c
-       - _rl_abort_internal: don't just turn off the MACRODEF state, call
-         _rl_kill_kbd_macro to delete any traces of an in-progress macro
-         definition before turning it off. Fixes fuzzing bug.
-
-                                  2/13
-                                  ----
-examples/loadables/Makefile.in
-       - CCFLAGS: add $(CPPFLAGS) to value, based on a report from
-         Christian Weisgerber <naddy@mips.inka.de>
-
-                                  2/15
-                                  ----
-bashline.c
-       - posix_readline_initialize: keep track of the vi insertion keymap
-         binding for TAB, since we change it in this function. Save the
-         old binding before we change it when turning posix mode on, and
-         restore that old binding when turning posix mode off, as long as
-         the current binding is still rl_insert. Suggested by a report from
-         Koichi Murase <myoga.murase@gmail.com>
-
-                                  2/17
-                                  ----
-builtins/exec.def
-       - exec_builtin: save value of job_control; use it to restore the value
-         of job_control if an exec fails in an interactive shell instead of
-         enabling it by default in an interactive shell. Report from
-         Grisha Levit <grishalevit@gmail.com>
+       - _rl_internal_char_cleanup: move code that cleans up the active region
+         and deactivates the mark inside this function so callback mode
+         applications get the intended functionality. Report and fix from
+         sparrowhawk996@gmail.com
 
 lib/readline/bind.c
-       - _rl_function_of_keyseq_internal: make sure to use checks against LEN
-         instead of a NULL character in KEYSEQ to determine the length of the
-         key sequence.
-         Report and fix from Koichi Murase <myoga.murase@gmail.com>
-       - rl_bind_key: make sure the KEY argument is not larger than the
-         largest unsigned character.
-         Report and fix from Koichi Murase <myoga.murase@gmail.com>
-       - rl_translate_keyseq: make sure that M-x correctly adds "\ex" to the
-         key sequence array when convert-meta is set.
-         Report and fix from Koichi Murase <myoga.murase@gmail.com>
-       - rl_translate_keyseq: now unconditionally converts meta characters to
-         ESC-prefixed key sequences when processing \0nnn \Xnnn and \[char]
-         escape sequences that resolve to meta characters and for `normal'
-         characters that have the meta bit set
-         Report and fix from Koichi Murase <myoga.murase@gmail.com>
-
-jobs.c
-       - end_job_control: if the terminal pgrp (terminal_pgrp) is not the same
-         as the original pgrp (original_pgrp), set the terminal's pgrp to the
-         original pgrp so when we reset the shell's pgrp to original_pgrp,
-         we'll continue to be able to read from the terminal if the shell is
-         interactive. Fixes bug with turning off job control before starting
-         an interactive shell reported by Grisha Levit
-         <grishalevit@gmail.com>
+       - rl_parse_and_bind: when using the arithmetic comparison operators on
+         the version, make sure to invert the tests so that we stop parsing
+         if the test fails. Report and fix from Tom Tromey <tom@tromey.com>
 
-                                  2/19
+                                  1/19
                                   ----
+Makefile.in
+       - pipesize.h: add dependency on ${BUILTINS_LIBRARY} to avoid parallel
+         makes trying to create it twice. Report and fix from
+         Richard Purdie <richard.purdie@linuxfoundation.org>
 
-jobs.c
-       - end_job_control: if the setpgid(0, ...) succeeds, reset the value of
-         shell_pgrp. Fixes pgrp mismatch after failed exec in an interactive
-         login shell reported by Grisha Levit <grishalevit@gmail.com>
-
-                                  2/20
+                                  1/21
                                   ----
-bashhist.c
-       - pre_process_line: save history_length before calling history_expand,
-         and after possibly decrementing history_length, just restore the old
-         value instead of incrementing it.  Fixes bug reported by
-         Michael Albinus <michael.albinus@gmx.de>
-       - bash_add_history: don't bother calling really_add_history if the
-         history is stifled and the max number of entries is 0
-
-aclocal.m4,configure.ac,m4/*.m4
-       - replace the old set of gettext m4 macros with the latest m4 files
-         from the gnulib and gettext distributions
+subst.c
+       - param_expand: if a nameref expands to array[@] or array[*], make sure
+         to call chk_atstar so the right variables are set to split the
+         result. Report from Oguz <oguzismailuysal@gmail.com>
 
-                                  2/21
+                                  1/22
                                   ----
-builtins/cd.def
-       - bindpwd: initialize canon_failed to 0 to prevent `cd -e' from always
-         failing
+builtins/declare.def
+       - Rewrote to reduce complexity. Still needs some work.
 
-command.h
-       - W_EXPANDRHS: new flag, set when expanding WORD in ${paramOPword}
+lib/readline/*.h, lib/tilde/tilde.h
+       - PARAMS: remove, rely on compilers understanding function prototypes
 
-subst.c
-       - expand_string_for_rhs: set W_EXPANDRHS in word to be expanded
+lib/readline/{undo.c,histlib.h}
+        - _hs_replace_history_data: move extern declaration to histlib.h
 
-subst.c
-       - expand_word_internal: when encountering a single or double quoted
-         string that expands to nothing, add a CTLNUL if the W_EXPANDRHS
-         flag is set and the word isn't quoted, indicating that the word
-         will eventually be split and we need to preserve the null to
-         produce an empty word. From a discussion on bug-bash started by
-         sunnycemetery@gmail.com
+lib/readline/readline.c
+       - _rl_parse_colors: instead of an extern declaration for this, include
+         "parse-colors.h" for it
 
-                                  2/22
-                                  ----
-bashline.c
-       - completion_glob_pattern: make sure to skip over a character quoted
-         by a backslash. Fixes bug reported by John Van Sickle
-         <john.vansickle@gmail.com>
+lib/readline/{histfile.c,histlib.h}
+       - _hs_append_history_line: move extern declaration to histlib.h
 
-                                  2/23
-                                  ----
-lib/readline/complete.c
-       - last_completion_failed: keep track of whether the last completion
-         attempt generated any matches
-       - rl_complete: if the last readline command was completion, but the
-         completion attempt didn't generate any matches, don't regenerate
-         and display the match list. Treat it as a new completion attempt.
-         Suggested by Richard Stallman <rms@gnu.org>
+lib/readline/history.h
+       - HS_HISTORY_VERSION: define to 0x0801 (current library version) if
+         it's not already defined. We conditionally define it in case an
+         application has (unwisely) chosen to use it, since the history
+         library doesn't do anything with it yet
 
-bashhist.c
-       - maybe_append_history: try to handle the case where the number of
-         history entries in the current shell session is greater than the
-         number of entries in the history list. Based on a report from
-         <airat_vi@mail.ru>
+lib/readine/{rlprivate.h,{search,misc,readline}.c}
+       - _rl_free_history_entry: add extern declaration to rlprivate.h, remove
+         extern declaration from c source files. Use HS_HISTORY_VERSION as a
+         sentinel that it's ok to use HIST_ENTRY in rlprivate.h
 
-                                  2/25
+lib/readline/{rlprivate.h,{isearch,search,undo}.c}
+       - _rl_saved_line_for_history: add extern declaration to rlprivate.h,
+         remove extern declaration from c source files, using HS_HISTORY_VERSION
+         in the same way
+
+                                  1/24
                                   ----
-aclocal.m4
-       - BASH_FUNC_FNMATCH_EQUIV_FALLBACK: use en_US.UTF-8 instead of
-         de_DE.UTF-8; it's more likely to be installed
+lib/readline/signals.c
+       - _rl_handle_signal: make sure that all sigprocmask calls are protected
+         by HAVE_POSIX_SIGNALS. Report and fix from Tom Tromey <tom@tromey.com>
 
-                                  2/26
+                                  1/26
                                   ----
-doc/{bash.1,bashref.texi}
-       - extdebug: make sure to note that setting this option in a startup
-         file causes an attempt to start the debugger. Noted by Linda
-         Walsh <bash@tlinx.org>
+lib/readline/callback.c
+       - rl_callback_read_char: make sure rl_linefunc is non-NULL before
+         calling through the pointer. The line function could have been
+         removed by the application before readline processes any typeahead
+         input. Bug reported by Matthias Klose <doko@debian.org>, pointer
+         to root cause from Koichi Murase <myoga.murase@gmail.com>
 
-builtins/fc.def
-       - fc_builtin: if we are not listing, and delete the last history entry,
-         make sure that histbeg or histend, whichever is greater, is clamped
-         at the value of last_hist to avoid dereferencing the just-removed
-         history index. Fixes bug reported by Chris King-Parra
-         <chris@kingparra.work>
+lib/glob/glob.c
+       - skipname,wskipname: put in some additional checks for `.' to ensure
+         that we don't get false positives (or incomplete tests) that can 
+         affect the results of extglob patterns. Reported by
+         gregrwm <rhn-users@greatlakedata.com>
 
-                                  2/27
+                                  1/27
                                   ----
-shell.c
-       - init_interactive: assignment to histexp_flag should be protected by
-         #ifdef BANG_HISTORY. https://savannah.gnu.org/patch/?9759
-
-subst.c
-       - list_string: if we have a non-null string, but quoted null character
-         removal leaves an empty string, set W_SAWQUOTEDNULL in the returned
-         word flags so the caller can deal with it
-       - parameter_brace_expand_rhs: deal with word with null or empty word
-         and W_SAWQUOTEDNULL in the flags coming back from expand_string_for_rhs
-         by turning it into a quoted null word and modifying the flags. Part
-         of fix for bug report from Grisha Levit <grishalevit@gmail.com>
-       - expand_word_internal: if a double-quoted string comes back with a
-         quoted null as the expansion of "$@", note that we saw it, but still
-         add a quoted null into the result string instead of short-circuiting.
-         Part of fix for bug report from Grisha Levit <grishalevit@gmail.com>
+lib/glob/glob.c
+       - extglob_skipname,wextglob_skipname: fixed an off-by-one error (SE
+         was being set to one character before the end of the pattern string,
+         not the null character at the end of the pattern string like other
+         callers of glob_patscan) that caused the last character of the last
+         subpattern to be cut off when calling skipname
+       - extglob_skipname,wextglob_skipname: some cleanups so the code is
+         closer to identical for the single-byte and wide character versions
 
-                                   3/1
+                                   2/1
                                    ---
-examples/loadables/fdflags.c
-       - O_CLOEXEC: instead of not using it, synthesize a definition for it
-         from unused bits in the file status word. It's only used as a
-         placeholder anyway. Fix from code by Robert Elz <kre@bmunnari.oz.au>
-
 execute_cmd.c
-       - execute_connection: call optimize_fork on the rhs of a `;' connection
-         to attempt to optimize the last simple command in a list
-
-                                   3/4
-                                   ---
-subst.c
-       - parameter_brace_expand: add `@' to the list of operators that cause
-         unbound parameter errors. Fixes oversight bug reported by
-         Martin Schulte <gnu@schrader-schulte.de>
+       - execute_simple_command: in posix mode, if we have a variable
+         assignment error while assigning into the temporary environment (e.g.,
+         assigning to a readonly variable), a non-interactive shell running a
+         special builtin exits; a non-interactive shell running anything else
+         jumps back to the top level. A shell compiled with -DSTRICT_POSIX
+         exits unconditionally.
+       - execute_simple_command: make sure posix mode sets $? to non-zero
+         if a variable assignment error occurs preceding a non-special builtin
 
-                                   3/5
-                                   ---
 subst.c
-       - expand_word_internal: update to fix from 2/21 and 2/27 to accommodate
-         contexts when word splitting will not take place (W_ASSIGNRHS). Fix
-         from Grisha Levit <grishalevit@gmail.com>
-       - param_expand: if IFS is unset, and we are expanding $* in a context
-         where we're not going to be performing word splitting, just treat it
-         as if IFS=" " and don't set W_SPLITSPACE. Report and hint at fix
-         from Grisha Levit <grishalevit@gmail.com>
-       - param_expand: if IFS is not null, and we are expanding $* in a
-         context where we're not going to be performing word splitting, and
-         we quote a null string (resulting in a quoted null), make sure we
-         set W_SAWQUOTEDNULL to note this for the caller
-       - parameter_brace_expand_rhs: make sure to remove any W_SAWQUOTEDNULL
-         flag for a the word on the rhs of the `=' operator if the original
-         string is null or the original string is not null and the returned
-         string (after dequoting) is not null. For instance ${v= ''} should
-         not have the SAWQUOTEDNULL flag set because it is " " after
-         expansion and dequoting, even though we saw a quoted null there
-
-                                   3/6
-                                   ---
-lib/sh/eaccess.c
-       - sh_eaccess: AIX needs the same kind of additional checks as FreeBSD
-         and Solaris when running as root and checking whether or not a file
-         is executable. Report and fix from REIX, Tony <tony.reix@atos.net>
+       - do_assignment_statements: take the code from expand_word_list_internal
+         that performs assignment statements, either standalone or preceding 
+         simple command names, and factor it out into this function
+       - expand_word_list_internal: call do_assignment_statements where
+         appropriate
 
-                                   3/7
+                                   2/2
                                    ---
-lib/glob/glob.h
-       - GX_RECURSE: new flag, indicates internal call to glob_filename
-
 lib/glob/glob.c
-       - glob_filename: add GX_RECURSE to recursive call to glob_filename
-       - glob_filename: dequote a directory name (in the absence of a
-         filename) only if this is not a recursive call to glob_filename
-         ((flags & GX_RECURSE) == 0). Fixes bug reported by Dr. Werner Fink
-         <werner@suse.de>
-
-                                   3/8
-                                   ---
-parse.y
-       - handle_eof_input_unit: before calling exit_builtin, set
-         last_shell_builtin and this_shell_builtin appropriately, since the
-         exit builtin uses them to determine whether or not to exit
-         immediately. Fixes bug reported by Tom Levy <tomlevy93@gmail.com>
-
-lib/sh/shquote.c
-       - sh_double_quote,sh_mkdoublequoted,sh_backslash_quote_for_double_quotes:
-         make sure to handle multibyte characters that may contain characters
-         that need to be quoted in double quotes; adding a spurious double
-         quote may turn them into different characters or uncover characters
-         that are special in double quotes. Fixes bug reported by
-         Stephane Chazelas <stephane.chazelas@gmail.com>
-       - sh_backslash_quote: don't call COPY_CHAR_P if we're in a UTF-8
-         locale and the current character doesn't have its eighth bit set;
-         only check mb_cur_max and is_basic if we're not in a UTF-8 character
-         set
-
-                                   3/9
-                                   ---
-subst.c
-       - read_comsub: if it looks like we're starting a multibyte character,
-         read a whole multibyte character from buf and add it all at once,
-         so we don't quote each byte in a multibyte character sequence. Fixes
-         bug uncovered by shquote changes from 3/8
-
-                                  3/11
-                                  ----
-subst.c
-       - expand_word_internal: if we are in a context where word splitting
-         will not occur, but one where we need to make sure we eventually
-         expand "$@" to multiple words, add a space as quoted so we can still
-         split on the space separator in $@. Fixes bug reported by
-         Grisha Levit <grishalevit@gmail.com>
+       - dequote_pathname: fix function definition for non-multibyte systems.
+         Report and fix from Marc Aurèle La France <tsi@tuyoix.net>
 
-                                  3/13
-                                  ----
-subst.c
-       - parameter_brace_substring, parameter_brace_patsub: treat the case
-         where pflags includes PF_ASSIGNRHS the same as if IFS is null, since
-         word splitting will not take place
+Makefile.in,doc/Makefile.in
+       - for certain targets, remove files before creating them to deal with
+         symlinked build trees.
+         Report and fix from Marc Aurèle La France <tsi@tuyoix.net>
 
-{subst,array,assoc}.c,subst.h
-       - string_list_pos_params: add a fourth argument: pflags; change all
-         callers to initially pass 0 as fourth arg
+examples/loadables/accept.c
+       - include limits.h before typemax.h
+         Report and fix from Marc Aurèle La France <tsi@tuyoix.net>
 
-                                  3/14
-                                  ----
-subst.c
-       - expand_word_internal: split words with W_ASSIGNRHS flag set specially.
-         These and subsequent changes fix expansion bugs reported by
-         Grisha Levit <grishalevit@gmail.com>
+builtins/gen-helpfiles.c
+       - if USING_BASH_MALLOC is defined, make sure to undefine malloc as well
+         as free. Fixes bug reported by George R Goffe <grgoffe@yahoo.com>
 
-subst.c
-       - string_list_pos_params: if we are expanding `@', make sure we honor
-         PFLAGS including PF_ASSIGNRHS and use string_list_dollar_at to make
-         sure the positional parameters are separated by spaces
-       - string_list_pos_params: if we are expanding `*', make sure we honor
-         PFLAGS including PF_ASSIGNRHS and separate the positional parameters
-         with the first character of $IFS
-       - pos_params_pat_subst,pos_params_modcase: calculate appropriate value
-         for PFLAGS depending on match flags value, and pass right value to
-         string_list_pos_params (affects @, * expansion)
-       - pos_params: now takes PFLAGS as argument to pass to string_list_pos_params;
-         changed caller
-
-array.c
-       - array_pat_subst,array_modcase: calculate appropriate value for
-         PFLAGS depending on match flags value, and pass right value to
-         string_list_pos_params (affects @, * subscript expansion)
+builtins/Makefile.in
+       - install-help: now depends on $(HELPFILES_TARGET) so we make sure the
+         separate helpfiles are created before we try to install them if we
+         don't go through the `all' makefile target
 
-array.[ch]
-       - array_subrange: now takes additional PFLAGS argument to pass to
-         string_list_pos_params
+configure.ac
+       - HELPDIR: now ${datadir}/bash/helpfiles
 
-assoc.c
-       - assoc_pat_subst,assoc_modcase: calculate appropriate value for
-         PFLAGS depending on match flags value, and pass right value to
-         string_list_pos_params (affects @, * subscript expansion)
-         STILL NEED TO DO SUBRANGE
+                                   2/3
+                                   ---
+parse.y
+       - parse_string_to_word_list: before expanding a compound assignment
+         statement body, make sure to save any alias that's currently being
+         expanded. Restore the alias after the compound assignment is parsed.
+         Reported back in 11/2020 by Alex fxmbsw7 Ratchev <fxmbsw7@gmail.com>
 
-subst.c
-       - parameter_brace_substring: add PFLAGS argument to array_subrange
+                                   2/4
+                                   ---
+lib/readline/histexpand.c
+       - history_expand_internal: when calling the history_inhibit_expansion
+         function, make sure to call it using the string as we've expanded it
+         to that point (RESULT), adding the expansion and next characters
+         temporarily, since we make expansion decisions based on what we've
+         accumulated, not what we started with. This makes things like
+         echo abc!$!$ work, where before the second `!' inhibited expansion
+         because bash_history_inhibit_expansion mistakenly took it as the
+         second character in a `$!' word expansion. Fixes bug reported back
+         in 10/2020 by Paul Fox <paul.d.fox@gmail.com>
 
-arrayfunc.c
-       - array_keys: use string_list_pos_params instead of calling
-         string_list_dollar_{star,at} directly.
+array.h
+       - array_pop: instead of calling array_dispose_element from this macro,
+         just call array_shift with the AS_DISPOSE flag
 
-arrayfunc.[ch]
-       - array_keys: now takes a PFLAGS argument, passes to string_list_pos_params
+                                   2/5
+                                   ---
+bashhist.c
+       - shell_comment: move condition to return 0 if the delimiter stack is
+         not empty or the shell is parsing a here document into the function
+         itself, don't have the callers check so the check is in one place.
+         Fixes bug reported by Oguz <oguzismailuysal@gmail.com>
 
-subst.c
-       - parameter_brace_expand: add PFLAGS argument to call to array_keys
+array.h,variables.c
+       - ARRAY_ELEMENT_REPLACE: convenience define for modifying an array
+         element's value
 
-subst.c
-       - parameter_brace_expand_indir: now takes a PFLAGS argument and uses it
-         in the call to parameter_brace_expand_word
-       - parameter_brace_expand: add PFLAGS argument to call to
-         parameter_brace_expand_indir
+variables.c
+       - pop_args: a couple of code simplifications
 
-                                  3/15
-                                  ----
-subst.c
-       - chk_atstar: now takes a PFLAGS parameter, changed callers. Will
-         eventually affect whether or not we saw $@
-       - chk_atstar: if we see "$*" don't note that we saw $@ unless
-         expand_no_split_dollar_star is unset. This is what param_expand
-         does
+                                   2/7
+                                   ---
+lib/malloc/malloc.c
+       - pagesz: at least MALLOC_PAGESIZE_MIN (4096) bytes
+       - union mhead: now 16-byte aligned on all systems, 32-bit and 64-bit
+         pointers
+       - binsizes: since the smallest allocation overhead is now 16 bytes,
+         redo the buckets so binsizes[0] == 32; adjust the thresholds for
+         split/coalesce/prepopulate/mmap (NBUCKETS = 28; STARTBUCK = 0).
+         Sizes stay pretty much the same; indices change
+       - consistently use MALLOC_SIZE_T instead of long/unsigned int/int
+       - use MAGIC8_NUMBYTES as the length of the mh_magic8 buffer, in case
+         it changes later for alignment
+       - internal_remap: new function, calls mremap to reallocate a chunk of
+         memory allocated using mmap(); called from internal_realloc if the
+         old size and new size are both bigger than the mmap threshold
+       - internal_realloc: call internal_remap if the old size and new size
+         are both above the threshold where we use mmap for allocation
 
-                                  3/18
+                                  2/10
                                   ----
-lib/readline/misc.c
-       - rl_get_previous_history: if we are trying to go back from the
-         beginning of the history, or if we are trying to go back before the
-         beginning of the history, call _rl_free_saved_history_line to just
-         get rid of the history line we saved instead of using
-         rl_maybe_unsave_line, which modifies the current line buffer.
-         Fixes bug reported by lessbug <lessbug@qq.com>
+include/timer.h
+       - new file, declaration for a timer struct to be used by a set of
+         functions to implement timers using SIGALRM or select/pselect
 
-                                  3/20
-                                  ----
-execute_cmd.c
-       - execute_command_internal: save and restore line_number around
-         user_subshell setting it to the line number saved in the command.
-         Fixes bug reported in https://bugzilla.novell.com/show_bug.cgi?id=1128936
+lib/sh/timers.c
+       - new file, set of functions to manipulate timer objects and timeouts
+         using SIGALRM or select/pselect. Inspired by a patch from
+         Koichi Murase <myoga.murase@gmail.com>. Not used yet
 
-                                  3/21
+                                  2/11
                                   ----
-lib/sh/strtrans.c
-       - ansicstr: handle multibyte characters that are not preceded by a
-         backslash so we skip over potential escapes in characters whose
-         multibyte representation contains a backslash. Fixes issue reported by
-         Stephane Chazelas <stephane.chazelas@gmail.com>
+builtins/read.def
+       - read_builtin: if there is a timeout set, block SIGCHLD around calls
+         to zread and its siblings, or calls to readline for `read -e', so
+         SIGCHLD (and the consequent waitpid) doesn't interrupt the read.
+         Fixes bug reported by Koichi Murase <myoga.murase@gmail.com>, but
+         there may be a different fix coming
 
-subst.c
-       - reap_some_procsubs: reap_procsubs, but parameterized to take the
-         max index to check -- general function for future use
-       - reap_procsubs: now just calls reap_some_procsubs with the right arg
+Makefile.in,builtins/Makefile.in
+       - fix up dependencies, especially on builtins.h and builtext.h
 
-execute_cmd.c
-       - execute_command_internal: if we are using /dev/fd for process
-         substitution, reap the procsubs at the end of this function (FIFOs
-         do it at the beginning -- look at this more closely). Only do it
-         for loops to avoid fd exhaustion. Fixes bug reported by
-         sunnycemetery@gmail.com
 
-                                  3/22
+                                  2/12
                                   ----
-lib/readline/{rlprivate.h,signals.c}
-       - _rl_interrupt_immediately: removed as no longer used
-
-redir.c
-       - heredoc_expand: new function, called for both here-documents and
-         here-strings, takes care of expanding the document and returns a
-         string
-       - write_here_document: use heredoc_expand, call write(2) once on the
-         entire document; structure is now very similar to write_here_string
+lib/readline/input.c
+       - rl_read_key: if we set rl_done == 1, set RL_STATE_DONE as well
+         Reported by Koichi Murase <myoga.murase@gmail.com>
 
-                                  3/23
-                                  ----
-redir.c
-       - here_document_to_fd: expand the here document/here string first,
-         using heredoc_expand, then decide what to do; remove calls to
-         write_here_document/write_here_string in favor of calling
-         heredoc_write directly
-       - here_document_to_fd: if the expanded document is of zero length,
-         just open /dev/null right away and return it -- idea from yash
-       - here_document_to_fd: if the length of the expanded document is
-         between 1 and PIPESIZE (pipe capacity, computed by builtins/psize.aux
-         and stored in builtins/pipesize.h), try to use a pipe: write
-         the document to the write end and return the read end. Prompted by a
-         report from Daniel Kahn Gillmor <dkg@fifthhorseman.net>
+lib/readline/isearch.c
+       - _rl_search_getchar: only call _rl_read_mbstring if rl_read_key returns
+         >= 0, avoid some work
 
-builtins/enable.def
-       - dyn_load_builtin: add warning if dynamic builtin with a load function
-         is loaded more than once, before running the load function a second
-         time. From a suggestion by Stan Marsh <gazelle@xmission.com>
+lib/readline/vi_mode.c
+       - _rl_vi_callback_change_char,_rl_vi_change_char: don't overwrite the
+         last replacement string if _rl_vi_callback_getchar returns -1.
+         It will likely make no difference, since the next read will return
+         an error or EOF, but being careful
+       - rl_vi_overstrike: if _rl_overwrite_char doesn't return 0, break out
+         of the loop
 
-                                  3/25
-                                  ----
-jobs.[ch]
-       - wait_for_any_job: takes a new argument, a struct procstat * that
-         gets the PID of the exited job's process leader (the one that
-         contributes the status) and the same status we return from the
-         function
+lib/readline/text.c
+       - _rl_overwrite_char: return 1 if _rl_read_mbstring returns < 0 so
+         we don't try to insert garbage
 
-builtins/wait.def
-       - wait_builtin: pass a struct procstat * to wait_for_any_job to get
-         the pid of the job's process leader (and the same status the
-         function returns). We don't do anything with it yet
+bashline.c
+       - posix_edit_macros: handle rl_read_key() returning <= 0
 
-                                  3/28
+                                  2/15
                                   ----
-variable.c
-       - seedrand: add a couple more variables to the random seed
+parse.y
+       - read_comsub: make sure to turn on the LEX_RESWDOK flag if we are in
+         a case statement and read a `)', since we can get a valid `esac'.
+         Fixes bug reported by Oguz <oguzismailuysal@gmail.com>
+       - read_comsub: if we're in a case statement, recognize `}' as a
+         reserved word and set the LEX_RESWDOK flag for the next word, since
+         we can get an esac (or another reserved word) after it
 
-lib/sh/tmpfile.c
-       - sh_mktmpdir: new function, makes a temporary directory using
-         mkdtemp if it's available, and generates a filename using
-         sh_mktmpname (which uses mktemp, if available) and makes a
-         directory with it if not
+                                  2/16
+                                  ----
+parse.y
+       - reserved_word_acceptable: add ARITH_CMD and COND_END to the list of
+         tokens that can precede a reserved word, so you can use reserved
+         words after ((...)) and [[...]].
+         Reported by Koichi Murase <myoga.murase@gmail.com>
 
-config-{top,bot}.h
-       - set up to use mkdtemp if available
+                                  2/17
+                                  ----
+parse.y
+       - parse_comsub: use new LEX_CASEWD flag to track when we are reading
+         the WORD in `case WORD in' and turn on the LEX_RESWDOK flag when
+         that word ends. This allows $(case x in esac), which no one uses.
+       - parse_comsub: use LEX_PATLIST flag to track when we are reading a
+         case pattern list so `|' doesn't turn on the LES_RESWDOK flag
+       - parse_comsub: case_level: simple counter to count the number of esacs
+         we need to see before we're no longer in a case statement; analog of
+         esacs_needed_count from the lexer
 
-externs.h
-       - sh_mktmpdir: extern declaration
-       - MT_TEMPFILE: new flag for the tempfile functions; means to use the
-         value in the NAMEROOT argument as a template for the mktemp/mkstemp/
-         mkdtemp functions. Not used in mainline shell code
+                                  2/19
+                                  ----
+parse.y
+       - CHECK_FOR_RESERVED_WORD: don't return ESAC if we read `esac' after a
+         left paren in a case pattern list. From an austingroup-bugs discussion
+         about https://www.austingroupbugs.net/view.php?id=1454
+       - parse_comsub: if we read a `(' while looking for a case pattern list
+         and LEX_CKESAC is set, we have a leading left paren in the pattern
+         list and should turn off LEX_CKESAC so (esac) doesn't prematurely
+         terminate the case command. From an austingroup-bugs discussion
+         about https://www.austingroupbugs.net/view.php?id=1454
 
-examples/loadables/mktemp.c
-       - mktemp: new loadable builtin, with BSD options and basic semantics
+                                  2/26
+                                  ----
+builtins/history.def
+       - history_builtin: when checking negative offsets to -d, which are
+         supposed to count back from the end of the history list, check the
+         range against 0 instead of history_base, because the calculation is
+         done against history_length, which is independent of history_base.
+         Report and fix from Christopher Gurnee <chris@gurneeconsulting.net>
 
-                                  3/29
+                                  2/28
                                   ----
-builtins/common.c,builtins/printf.def
-       - builtin_bind_variable: moved bind_printf_variable to common.c from
-         printf.def, renamed to builtin_bind_variable, made global for other
-         builtins to use
+doc/bashref.texi
+       - replaced a number of uses of @var with a mixture of @env and @dfn
+         to better match up with the texinfo standards
 
-builtins/read.def
-       - bind_read_variable: now uses builtin_bind_variable
+doc/{bash.1,bashref.texi}
+       - clarify some aspects of the coproc description, especially the
+         use of NAME and when it's optional
 
-                                   4/4
+                                   3/1
                                    ---
-lib/readline/histfile.c
-       - history_rename: wrapper function for rename(2) to deal with the Win32
-         refusal to rename over an existing file; changed callers. Bug and fix
-         from <john.david.donoghue@gmail.com>
+subst.c
+       - read_comsub: fix off-by-one error in mbrtowc that causes a read one
+         character past the end of buf. Report and fix from
+         Platon Pronko <platon7pronko@gmail.com> in
+         https://savannah.gnu.org/patch/?10035
 
-                                   4/8
+                                   3/3
                                    ---
-builtins/trap.def
-       - display_traps,showtrap: take an additional int argument, that, if
-         non-zero, means to print a trap command for a signal whose disposition
-         is SIG_DFL
-       - trap_builtin: if the -p option is given, and posix mode is enabled,
-         pass the `show every signal' flag to display_traps so SIG_DFL signals
-         are displayed as `trap -- - <signal>'. From an austin-group
-         interpretation (1212) initiated by Robert Elz <kre@bmunnari.oz.au>.
-         Tagged for bash-5.1
-
-                                   4/9
+builtins/ulimit.def
+       - ulimit_builtin: Posix compatibility: if the last command specified
+         by an option does not have an option argument, but there is an
+         operand remaining after all the options are parsed, treat the
+         operand as an argument to that last command. From an austin-group
+         discussion and a Geoff Clare suggestion back in November, 2020.
+         Austin Group interpretation 1418
+
+examples/shellmath
+       - a package of shell functions to perform floating-point math entirely
+         in bash. Contributed by Michael Wood <mawood20@gmail.com>. Available
+         at https://github.com/clarity20/shellmath
+
+                                   3/4
                                    ---
-jobs.c
-       - list_one_job: printing one job counts as notifying the user about
-         it, so add a call to cleanup_dead_jobs like in the other job display
-         functions. Fixes https://savannah.gnu.org/support/?109667 reported
-         by "Brian K. White"
+support/shobj-conf
+       - darwin: take out the -arch-only option in SHOBJ_XLDFLAGS and
+         SHOBJ_ARCHFLAGS; no longer needed
 
-                                  4/10
-                                  ----
-redir.c
-       - HEREDOC_PIPESIZE: define to PIPESIZE if not defined, allow it to be
-         specified at build time; used in here_document_to_fd to determine
-         whether or not a pipe is used
-       - HEREDOC_PIPEMAX: allow build-time definition of the max heredoc size
-         that will be written to a pipe
-       - here_document_to_fd: if F_GETPIPE_SZ is defined (Linux), ensure that
-         the document is shorter than the possibly-dynamic max pipe size,
-         and fall back to the tempfile implementation if it is not
-       - HEREDOC_PARANOID: if this is defined to a non-zero value,
-         here_document_to_fd ensures that both file descriptors opened on
-         the temporary file refer to the same file
+doc/{bash.1,bashref.texi}
+       - coprocesses: suggested changes from rms@gnu.org; recommend the
+         `coproc NAME { commands; }' form as the simplest and most flexible
 
-lib/sh/zmapfd.c
-       - zmapfd: increased the default allocation sizes
+                                   3/5
+                                   ---
+builtins/exec.def
+       - exec_builtin: set last_command_exit_value before calling exit_shell
+         so any exit trap gets the right value for $?. From Matthew Bauer
+         <mjbauer95@gmail.com> via https://savannah.gnu.org/patch/?10039
 
-lib/sh/zcatfd.c
-       - zcatfd: increased the default allocation sizes
+                                   3/8
+                                   ---
+include/timer.h
+       - SHTIMER_ALRMSET: new flag, indicates that there is an active alarm
+         associated with this timer (falarm() was called)
 
-input.c
-       - localbuf: increased the default buffer size for reads
+lib/sh/timers.c
+       - shtimer_set: set the SHTIMER_ALRMSET flag after calling falarm
+       - shtimer_unset: don't call falarm(0,0) unless the SHTIMER_ALRMSET flag
+         is set
 
-                                  4/11
-                                  ----
-subst.c
-       - cond_expand_word: like expand_word_unsplit, we need to peform
-         quoted null character removal on both the LHS and RHS of the
-         operator, since we are not performing word splitting. Fixes bug
-         reported by Matt Whitlock in https://savannah.gnu.org/support/?109671
+                                   3/9
+                                   ---
+include/posixtime.h
+       - added some BSD convenience defines if they are not present
 
-                                  4/12
-                                  ----
-jobs.c
-       - wait_for_background_pids: don't bother with the loop that waits for
-         and reaps all children of the shell in the case that it's inherited
-         some children it doesn't care about. Report from Daniel Kahn Gillmor
-         <dkg@fifthhorseman.net>
+parse.y,shell.h
+       - {save,restore}_parser_state: save and restore shell_eof_token and
+         pushed_string_list; change callers (e.g., xparse_dolparen) so they
+         don't have to manage them
 
-                                  4/14
+                                  3/10
                                   ----
-subst.c
-       - command_substitute: add an unwind-protect to make sure the read end
-         of the pipe gets closed in the parent on a SIGINT that interrupts
-         the zread. Fixes fast SIGINT fd leak reported by Tycho Kirchner
-         <tychokirchner@mail.de>
-
-bashhist.c
-       - history_number: if enable_history_list is set (`set -o history' has
-         been executed), return the current history number even if we're
-         not currently saving commands in the history list
-         (remember_on_history == 0). Prompted by report from Paul Wise
-         <pabs3@bonedaddy.net>
+builtins/common.h
+       - extern declarations for moving to timers (sh_timer) for read builtin
+         timeouts
 
-                                  4/20
-                                  ----
-doc/bash.1,lib/readline/doc/rluser.texi
-       - make it clear that the `bind' builtin can be used to set readline
-         keybindings and variables. Suggestion from Dan Jacobson
-         <jidanni@jidanni.org>
+quit.h
+       - CHECK_ALRM: remove, no longer used
 
-                                  4/22
-                                  ----
-lib/glob/glob.h
-       - GX_SYMLINK: new internal flag denoting we are processing a symlink to
-         a directory. If GX_GLOBSTAR is active, we should not `descend' into
-         that directory
+trap.c
+       - check_signals: call check_read_timeout instead of CHECK_ALRM
 
-lib/glob/glob.c
-       - glob_filename: if the directory portion of the pattern is `**'
-         (all_starstar), we have globbed all of the directories corresponding
-         to that pattern, and we encounter a name that is a symlink to a
-         directory, don't descend into it: if the filename portion is null,
-         return that name only; if the filename portion is non-null, skip over
-         it because we will pick it up when we process the `real' directory.
-         This is a better fix for the issue originally reported by
-         Murukesh Mohanan <murukesh.mohanan@gmail.com> back in 4/2018 and
-         addresses the issue raised by Eli Schwartz <eschwartz@archlinux.org>
-       - glob_dir_to_array: slight optimization: if array[i] is the empty
-         string, don't bother to strcpy it or check the result for a directory
-         for GX_MARKDIRS support
-
-                                  4/23
-                                  ----
 bashline.c
-       - test_for_canon_directory: test a pathname for a directory, but
-         expand and canonicalize it first using bash_filename_stat_hook()
-         before calling stat(2)
-       - bash_progcomp_ignore_filenames: strip non-directories out of a match
-         list, but use the function above that canonicalizes the pathname to
-         expand the name before testing
-       - bash_directory_completion_matches: use bash_progcomp_ignore_filenames
-         to strip out non-directories so we get consistent results between
-         programmable completion and tab completion. Fixes bug reported by
-         Ville Skyttä <ville.skytta@iki.fi>
+       - bash_event_hook: use read_timeout instead of checking `sigalrm_seen';
+         that no longer exists
+       - bash_event_hook: accommodate readline timing out (not used yet)
 
+lib/sh/zread.c
+       - zread: call read_builtin_timeout() to check for a timeout before
+         calling a blocking read()
+         
 builtins/read.def
-       - read_builtin: allow read -e and read -u N to be used together, by
-         calling fdopen(fd) if fd != 0. Save and restore rl_instream. Fixes
-         https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=927768
+       - sigalrm,reset_timeout,check_read_timeout,read_builtin_timeout: new
+         and modified functions to use sh_timers for timeouts instead of
+         SIGALRM. Based on work contributed by Koichi Murase
+         <myoga.murase@gmail.com>
+       - read_builtin: use sh_timers for read timeouts (-t N) instead of
+         using SIGALRM
+       - edit_line: simulate receiving SIGALRM if readline times out (not
+         used yet)
 
-                                  4/24
+                                  3/11
                                   ----
-lib/readline/input.c
-       - rl_getc: if readline catches SIGTSTP, the calling application must
-         not have had it ignored. Run the signal handler and set the signal
-         hook in case the application wants to handle it. Report from
-         Robert Elz <kre@bmunnari.oz.au>
+lib/readline/readline.c
+       - rl_initialize: call _rl_timeout_init to set things up for any timeout 
+         that was set with rl_set_timeout
+       - readline_internal_charloop: if we longjmped because of a timeout,
+         make sure to set rl_done/RL_STATE_DONE and return; we are
+         abandoning this call to readline(). The readline timeout changes
+         were based on work contributed by Koichi Murase
+         <myoga.murase@gmail.com>
 
-                                  4/26
-                                  ----
-parse.y
-       - parser_will_prompt: check and return true if we have consumed the
-         entire readline line buffer and will have to go back to readline for
-         more input, printing a prompt as a consequence
+lib/readline/readline.h
+       - extern declarations for new timeout functions and hook
+       - rl_clear_timeout: new define
 
-eval.c
-       - parse_command: if parser_will_prompt() returns 0, indicating that we
-         still have unconsumed input in the readline line buffer, don't
-         execute PROMPT_COMMAND. TENTATIVE fix prompted by report from
-         Matteo Landi <matteo@matteolandi.net>
+lib/readline/callback.c
+       - rl_callback_read_char: if we longjmped because of a timeout,
+         make sure to set rl_done/RL_STATE_DONE and return; we are
+         abandoning this call to readline()
 
-builtins/read.def
-       - set_eol_delim: save the old values before changing the bindings for
-         RETURN and the delimiter character, in case the delimiter is RETURN.
-         Fixes bug report from Stephane Chazelas <stephane.chazelas@gmail.com>
-       - read_builtin: if the delimiter is '\0' and we are using readline,
-         don't terminate the buffer and go back to read another character;
-         allow the NULL to pass through and terminate the read.
-         Fixes bug report from Stephane Chazelas <stephane.chazelas@gmail.com>
+lib/readline/util.c
+       - _rl_abort_internal: if we time out, don't ring the bell; let the
+         caller handle it
 
-                                   5/9
-                                   ---
-bashhist.c
-       - bash_delete_histent: decrement history_lines_this_session only if
-         remove_history returns a non-null history entry, and return failure
-         if it does return a null entry
+lib/readline/input.c
+       - extern declarations for public and readline-library-private functions
+         and hooks to implement timeouts
+       - rl_set_timeout,rl_timeout_remaining: new public functions
+       - _rl_timeout_select: new function, uses select/pselect to implement
+         read timeouts that take timeouts set with rl_set_timeout into account;
+         calling hook function if a timeout occurs
+       - rl_gather_tyi, _rl_input_available: use _rl_timeout_select, taking
+         any existing timeout into consideration if it expires before the
+         timeout passed as an argument
+       - rl_getc: use _rl_timeout_select and handle any timeouts by calling
+         _rl_timehout_handle
+       - set_alarm,reset_alarm: new functions to implement timeouts using
+         SIGALRM for systems that lack a working select/pselect
+       - _rl_timeout_init: new function, sets things up for reading input
+         with a specified timeout
+       - _rl_timeout_handle: a timeout handler; calls any event hook and
+         sets up to abort the current readline() call
+       - _rl_timeout_handle_sigalrm: a timeout handler for systems using
+         SIGALRM to implement timeouts
+
+lib/readline/parens.c
+       - rl_insert_close: use _rl_timeout_select to take timeouts into account
 
-builtins/history.def
-       - history_builtin: when checking the argument to -d, display an error
-         if the argument is >= history_base + history_length, since that's
-         what history_get and remove_history check. Fixes issue reported by
-         <jr@saturn.site>
+lib/readline/rlprivate.h
+       - extern declarations for readline-library-private timeout functions
 
-support/shobj-conf
-       - hpux11: change stanza to create shared libraries on later versions of
-         HPUX 11. Contributed by Michael Osipov <michael.osipov@siemens.com>
+lib/readline/rltty.c
+       - rl_deprep_terminal: don't print a newline after the bracketed paste
+         disable sequence if we timed out
 
-lib/readline/terminal.c
-       - _rl_init_terminal_io: assume TGETENT_BROKEN defined means that tgetent
-         returns 0 on success, as on HPUX 11. Bug reported by Michael Osipov
-         <michael.osipov@siemens.com>
+lib/readline/signals.c
+       - _rl_handle_signal: if sig is SIGALRM, call _rl_timeout_handle_sigalrm()
 
-configure.ac
-       - hpux: add -DTGETENT_BROKEN to LOCAL_CFLAGS
+lib/readline/doc/rltech.texi
+       - rl_set_timeout,rl_timeout_remaining: document new public functions
+       - RL_STATE_TIMEOUT: document new possible state value for rl_readline_state
+       - rl_timeout_event_hook: document new hook function, called when
+         readline times out
 
-execute_cmd.c
-       - select_builtin: set executing_builtin around the call to read_builtin
-         so we can run traps if the read call is interrupted. From a report
-         from Andreas Kusalananda Kähäri <andreas.kahari@abc.se>
+builtins/read.def
+       - read_builtin: changes to use the readline timeout functions to
+         implement timeouts with `read -e'; these use rl_set_timeout and
+         sh_timer structs together
 
-                                  5/12
+                                  3/12
                                   ----
-doc/bashref.texi
-       - The Restricted Shell: add some language detailing the weaknesses of
-         the restricted shell mode in isolation, inspired by a discussion on
-         the zsh mailing list
+subst.c
+       - expand_string_dollar_quote: new function, expands $'...' and $"..."
+         in a string for those code paths that don't expand it themselves
 
-                                  5/15
-                                  ----
-xmalloc.h
-       - malloc: define to sh_malloc to get file and line information from
-         malloc (not xmalloc) calls. From a suggestion by achurch@achurch.org
-         (Andrew Church)
+subst.h
+       - expand_string_dollar_quote: extern declaration
 
-builtins/evalstring.c
-       - parse_and_execute: make sure the parser is not expanding an alias
-         before terminating the loop that processes characters in the string.
-         Fixes problem with -c commands that end with an alias reported by
-         Yu Kou <ckyoog@gmail.com>
-       - should_suppress_fork: make sure that we don't try to optimize out a
-         fork if the parser is still expanding an alias
+parse.y
+       - read_secondary_line: if $'...' or $"..." appears in the line, call
+         expand_string_dollar_quote to expand them. This now returns new
+         memory, need to change callers
 
-                                  5/16
-                                  ----
-lib/readline/misc.c
-       - rl_get_previous_history: if previous_history() returns NULL, only
-         free the saved history if we were the ones who saved it; leave any
-         existing saved history entry alone. Fixes problem with ^N not working
-         at the end of the history if we previously moved back to the start
-         of history
-
-lib/readline/histfile.c
-       - read_history_range: when reading until FROM lines with a history
-         file that has timestamps, make sure to skip to the end of the command
-         line corresponding to the FROMth line instead of leaving line_start
-         pointing to it, and keep track of the start of the last timestamp in
-         last_ts for use by the loop below. Fix for history -n bug reported
-         by HIROSE Masaaki <hirose31@gmail.com>
+make_cmd.c
+       - make_here_document: account for read_secondary_line returning newly
+         allocated memory, free `full_line' appropriately
 
-lib/readline/display.c
-       - init_line_structures: if, for some reason, _rl_screenwidth ends up
-         bigger than the line_size default of 1024 (e.g., gdb's setting the
-         terminal width to 0), make sure line_size is at least _rl_screenwidth.
-         From a report by Tom de Vries <tdevries@suse.de>
+bashline.c
+       - shell_expand_line,history_and_alias_expand_line: expand $'...' and
+         $"..." in the line by calling expand_string_dollar_quote, since
+         that happens after history expansion and before alias expansion in
+         normal processing 
 
-                                  5/17
+                                  3/15
                                   ----
-variables.c
-       - brand: split the code into a function that generates a 32-bit value
-         given the last value in the sequence (intrand32) and a function that
-         returns a 16-bit random number (brand)
-       - seedrand: small change in hopes of adding slightly more entropy
-       - brand: modify the 16-bit version to XOR the top 16 bits of the 32-bit
-         seed with the bottom 16 bits and return the lower 15 bits of that
-         result as before. Based on an analysis by Andrew Church
-         <achurch+bash@achurch.org>
+subst.c
+       - expand_string_dollar_quote: fix out-of-order initialization
 
-                                  5/18
-                                  ----
-variables.c
-       - genseed: break code that generates the 32-bit seed for the RNG into
-         a separate function; call from seedrand
-       - {brand32,sbrand32,seedrand32}: new 32-bit versions of the random
-         number generator functions that use the entire 32-bit internal value.
-         Prep for systems that don't have /dev/urandom or arc4random()
-       - perturb_rand32: shake up the 32-bit LCRNG in subshells
+Makefile.in
+       - {TAGS,tags}: add ETAGS/ETAGSFLAGS/CTAGS/CTAGS flags; make sure to
+         cd to the source directory before running them to get source files
+         that don't have absolute paths. Fix from Mike Jonkmans
+         <bashbug@jonkmans.nl>
 
-                                  5/19
+parse.y
+       - xparse_dolparen: don't longjmp if FLAGS includes SX_NOLONGJMP. From
+         a report by Xu Lu <oliver_lew@outlook.com>
+
+                                  3/16
                                   ----
-variables.c
-       - get_urandom32: get a 32-bit random number by using the first one of
-         these that succeeds: reading from /dev/urandom (if available),
-         calling arc4random (if available), and using the internal 32-bit
-         RNG (always available)
-       - SRANDOM: expand to a 32-bit random number. This is not a LCRNG, so
-         the numbers shouldn't have any relationship to previous returned
-         values. Assignments are accepted but have no effect on the sequence.
-         Not documented yet
+subst.c
+       - process_substitute: set startup_state and parse_and_execute_level
+         to see if we can avoid a fork()
+
+bashline.c
+       - bash_spell_correct_word: bindable command (spell-correct-word) to
+         perform spelling correction on the current `shellword', using the
+         same code as the `cdspell' option and directory spelling correction
+         during completion. Feature suggested by in 10/2020 by
+         Karl Kleinpaste <karl@kleinpaste.org>
+       - bash_spell_correct_word: bound to "C-x s" by default in emacs mode
+
+lib/readline/display.c
+       - rl_redisplay: fix redisplay problem that occurs when switching from
+         the rl-digit-argument prompt "(arg: N)" back to the regular prompt,
+         and the regular prompt contains invisible characters
+
+doc/bash.1,lib/readline/doc/rluser.texi
+       - spell-correct-word: document new function and its default binding
 
-                                  5/20
+                                  3/17
                                   ----
 doc/{bash.1,bashref.texi}
-       - SRANDOM: document new special variable
+       - cd: slight changes to specify that it sets PWD and OLDPWD
+       - {pushd,popd}: make it clear that these builtins use cd to change
+         the current working directory; change wording to simplify the
+         description and clarify the exit status
 
-                                  5/22
+                                  3/18
                                   ----
-jobs.c
-       - find_pid_in_pipeline: abstract some code from find_pipeline to look
-         for a PID in a specific pipline passed as an argument
-       - find_pipeline: if we have some saved pipeline(s), look there to find
-         the PID instead of returning failure. This process could have been
-         started from a DEBUG trap that saved the_pipeline. Fixes Linux bug
-         reported by Hengyang Zhao <hzhao877502@gmail.com>
+execute_cmd.c
+       - execute_disk_command: after performing redirections, call
+         unlink_all_fifos() to remove the FIFOs created as part of
+         expanding redirections. They should have been opened by then, and
+         we're going to call shell_execve right away anyway, so we won't be
+         around to remove the FIFOs. From a report from
+         Michael Felt <aixtools@gmail.com>
 
-builtins/bind.def
-       - unbind_keyseq: use rl_function_of_keyseq_len so you can unbind ^@
-         (which translates to 0). Fixes bug reported by
-         Dennis Williamson <dennistwilliamson@gmail.com>
+                                  3/22
+                                  ----
+parse.y
+       - alias_expand_token: slight tweak to check for alias expansion: perform
+         expansion unconditionally if PST_ALEXPNEXT is set, and disable it
+         in case statement pattern lists if the previous token indicates a
+         command name is acceptable.
+         From a report by Oguz <oguzismailuysal@gmail.com>
+
+config-bot.h
+       - HAVE_MKDTEMP: fix typo
 
-                                  5/23
+                                  3/25
                                   ----
-lib/readline/display.c
-       - rl_redisplay: make sure that the line structures can hold up to
-         _rl_screenwidth characters, to support applications like gdb that
-         set the screen width to huge values. Report and fix from
-         Tom de Vries <tdevries@suse.de>
+lib/readline/terminal.c
+       - look in terminfo for key sequences for page up (kP) and page down
+         (kN) and bind them to history-search-{backward,forward},
+         respectively. From a patch from Xose Vazquez Perez
+         <xose.vazquez@gmail.com>
 
-                                  5/24
+                                  3/30
                                   ----
-lib/readline/bind.c
-       - rl_generic_bind: move `ic' from block scope to function scope to
-         avoid problems with compilers that destroy and recreate it every
-         time through the loop. Report and fix from Adam Richter
-         <adamrichter4@gmail.com>
+doc/bashref.texi
+       - expand the node describing $"..." string translation with additional
+         details and examples
 
-                                  5/30
+                                  3/31
                                   ----
-jobs.c
-       - wait_for_job: now takes an additional struct procstat * argument,
-         and returns the pid and status of the job's `controlling process'
-         to the caller
+misc.c
+       - rl_fetch_history: moved here from vi_mode.c
+       - rl_fetch_history: negative arguments count back from the end of
+         the history, instead of taking you to the beginning of the history
+         list
+       - rl_fetch_history: in vi mode, an out-of-range argument rings the
+         bell and doesn't change the line
 
-{jobs,nojobs}.c
-       - wait_for_background_pids: take a struct proctstat * argument and fill
-         it in with pid and status of the last process to terminate
+vi_mode.c
+       - rl_vi_fetch_history: call rl_fetch_history
 
-jobs.h
-       - wait_for_job, wait_for_background_pids: add additional argument to
-         declaration
+readline.h
+       - rl_fetch_history: new extern declaration
 
-builtins/wait.def
-       - wait_builtin: set pstat.{pid,status} each time through the pid-or-job
-         loop and for wait without arguments
+doc/bash.1,lib/readline/doc/{readline.3,rluser.texi}
+       - rl_fetch_history: add description
+
+builtins/setattr.def
+       - show_var_attributes: if a variable's value indicates that it should
+         be ANSI-C quoted, use ansic_quote instead of sh_double_quote to
+         format the value string. From proposal by Greg Wooledge
+         <greg@wooledge.org>
 
-                                   6/4
+                                   4/5
                                    ---
-sig.c
-       - termsig_handler: clean up last_procsub_child before exiting, after
-         unlinking all FIFOs or closing FDs to all the pipes. Might need to
-         send it a SIGTERM too. Fixes issue reported by mwnx <mwnx@gmx.com>
+arrayfunc.c
+       - unbind_array_element: if FLAGS includes VA_ONEWORD, don't use
+         skipsubscript to parse the subscript, just assume the entire SUB is
+         the subcript and that it contains the closing `]', so we just want
+         everything in SUB except the last character.
 
-config-top.h
-       - CASEMOD_CAPCASE: no longer defined by default
+parse.y:
+       - select_command: use compound_list instead of list, like for_command.
+         Report by Greywolf <greywolf@starwolf.com>
+       - list: move this into compound_list (replacing the instance of `list'
+         in the compound_list production), remove from the grammar
 
-                                   6/5
+                                   4/6
                                    ---
-lib/glob/glob.c
-       - glob_always_skip_dot_and_dotdot: new global variable, if set to
-         a non-zero value, no glob pattern will ever match `.' or `..'.
-         Disabled by default
+arrayfunc.c
+       - unbind_array_element: use VA_NOEXPAND instead of literal 1
 
-                                   6/7
+                                   4/7
                                    ---
-bashline.c
-       - cmd_xmap: changes to support multiple cmd_xmaps, one per editing
-         mode keymap (one each for vi insert and command modes). Changes from
-         Koichi Murase <myoga.murase@gmail.com>
+lib/readline/funmap.c
+       - default_funmap: add missing `vi-undo' to the list of vi-mode bindable
+         functions. Reported by Xirui Zhao <quinean@icloud.com>
 
-execute_cmd.c
-       - execute_arith_command: change from expanding the expression using
-         expand_words_no_vars to use expand_arith_string, with the accompanying
-         conversion from a WORD_LIST into a string. This makes it more
-         consistent with other arithmetic expansions. Inspired by a
-         discussion begun by Nils Emmerich <nemmerich@ernw.de>
+                                   4/8
+                                   ---
 
-                                  6/10
-                                  ----
-jobs.c
-       - waitchld: since process substitutions are asynchronous, save the
-         status of one that exits (that we still know about) in the bgpids
-         list
+config-top.h
+       - DEFAULT_LOADABLE_BUILTINS_PATH: default value for BASH_LOADABLES_PATH
+
+doc/{bash.1,bashref.texi}
+       - enable: note that it uses $BASH_LOADABLES_PATH, and that the default
+         is system-dependent
 
-                                  6/12
+variables.c
+       - initialize_shell_variables: initialize BASH_LOADABLES_PATH to the
+         default given in DEFAULT_LOADABLE_BUILTINS_PATH
+
+                                  4/12
                                   ----
-jobs.c
-       - wait_for_background_pids: wait for the last procsub only if it's the
-         same as last_asynchronous_pid
+doc/{bash.1,bashref.texi}
+       - add link to git master tar file as a place to get the current version
 
+                                  4/14
+                                  ----
 bashline.c
-       - bash_backward_shellword: changes to behave better when at the
-         beginning of the last character on the line and to leave point at
-         the beginning of the shellword, like backward-word. Fixes from
-         Andrew Gaylard <a.gaylard@gmail.com>
+       - attempt_shell_completion: use -1 as a sentinel value for
+         in_command_position indicating that we cannot be in a command position
+         (e.g., because we're the target of a redirection) and should not
+         check for a programmable command completion or tell the programmable
+         completion code to use command completion. Report and fix from
+         Marc Aurèle La France <tsi@tuyoix.net>
 
-                                  6/13
+                                  4/16
                                   ----
-bashline.c
-       - __P: Replaced with PARAMS. First of many
-       - bash_transpose_shellwords: transpose-words, but using `shellword'
-         word boundaries like shell-forward-word and shell-backward-word.
-         Contributed by Andrew Gaylard <a.gaylard@gmail.com>
-       - "shell-transpose-words": new name binding for bash_transpose_shellwords
-       - bash_readline_initialize: add default bindings for shell-forward-word,
-         shell-backward-word, shell-transpose-words, and shell-kill-word.
-         Suggested by Andrew Gaylard <a.gaylard@gmail.com>
-
-lib/readline/doc/rluser.texi
-       - shell-transpose-words: document
-       - {shell-forward-word,shell-backward-word,shell-kill-word,shell-transpose-words}:
-         document new default bindings bash now adds
+builtins/bind.def
+       - bind_builtin: reverse sense of strvec_search return value when
+         deciding whether or not to remove a unix-command binding from the
+         cmd keymap. Bug report by Dale Sedivec <dale@codefu.org>
 
-variables.c
-       - set_argv0: function to assign argv0 if it's found in the initial
-         shell environment. Suggested by Cuong Manh Le
-         <coung.manhle.vn@gmail.com>
-       - initialize_shell_variables: call set_argv0() as part of shell
-         initialization
+lib/readline/doc/rltech.texi
+       - RL_PROMPT_{START,END}_IGNORE: document current values of \001 and
+         \002. Report from Mingye Wang <arthur200126@gmail.com>
 
-                                  6/14
+                                  4/19
                                   ----
-execute_cmd.c
-       - execute_for_command: make sure to call stupidly_hack_special_variables
-         on the index variable each time bind_variable is called on it. If
-         someone does something nonsensical like `for OPTIND in ...' we want
-         the side effects to happen. Reported by Stephane Chazelas
-         <stephane.chazelas@gmail.com>
-       - execute_select_command: do the same thing for the selection variable
-         after calling bind_variable
+arrayfunc.c
+       - assign_assoc_from_kvlist: fix memory leak reported by konsolebox
+         <konsolebox@gmail.com>
 
-                                  6/15
+                                  4/20
                                   ----
-builtins/set.def
-       - unset_builtin: if neither -f nor -v is supplied, and a NAME cannot
-         be a shell variable because it's not a shell identifier, try to
-         unset a shell function whether we're in posix mode or not. Suggested
-         back in 1/2019 by PePa65 <solusos@passchier.net> and Robert Elz       
-         <kre@bmunnari.oz.au>
+command.h,subst.c
+       - W_ITILDE: remove, replace with a variable since it's only used inside
+         a single call to expand_word_internal
 
-execute_cmd.c
-       - execute_simple_command: if this is being executed by the command
-         builtin (flags&CMD_COMMAND_BUILTIN), don't bother to print the
-         command words if set -x is enabled. From a report by Martijn Dekker
-         <martijn@inlv.org> back in 4/2018
+                                  4/21
+                                  ----
+{subst.c,make_cmd.c,parse.y}
+       - W_DQUOTE: no longer used, use W_NOPROCSUB and W_NOTILDE directly
+         (for arithmetic commands and words in arithmetic for commands)
 
-                                  6/19
+                                  4/24
                                   ----
-lib/glob/glob.c
-       - glob_filename: if we are not being called recursively, and there is
-         only a directory name, dequote the passed pathname and see if it
-         names an existing directory. If it does, return it; otherwise return
-         failure ((char **)&glob_error_return). This is what makes backslash
-         escaped-characters in pathnames in shell variables work the same as
-         the same value passed directly. From an anonymous comment on
-         https://savannah.gnu.org/support/?109629 and a discussion on the
-         austin-group list.
+bashline.c
+       - executable_completion: since this function gets an unquoted filename
+         from rl_filename_completion_function, we need to quote special
+         characters before passing it to bash_directory_completion_hook.
+         Report from Alex fxmbsw7 Ratchev <fxmbsw7@gmail.com>
+
+                                  4/26
+                                  ----
+lib/readline/search.c
+       - _rl_nsearch_abort: move function calls around so _rl_restore_prompt
+         happens before rl_clear_message, like when aborting an incremental
+         search. Suggested by sparrowhawk996@gmail.com
+
+subst.h
+       - ASS_ALLOWALLSUB: new assignment flag value, means to allow @ and * as
+         valid array subscripts when assigning to existing associative arrays
+
+arrayfunc.c
+       - assign_array_element: allow assignment of key `@' to an existing
+         associative array if the caller passes ASS_ALLOWALLSUB
+       - assign_compound_array_list: allow ( [@]=value ) to an existing
+         associative array
+
+builtins/declare.def
+       - declare_internal: allow assignment of key `@' to an existing
+         associative array by passing ASS_ALLOWALLSUB to assign_array_element
+         as part of local_aflags. This affects declare, local, and typeset
+
+subst.c
+       - do_assignment_internal: allow a[@]=value to an existing associative
+         array by passing ASS_ALLOWALLSUB to assign_array_element
+
+                                  4/27
+                                  ----
+builtins/common.[ch]
+       - builtin_bind_var_to_int: wrapper for bind_var_to_int to be used by
+         builtin commands; placeholder for future work
+
+builtins/wait.def
+       - builtin_bind_var_to_int: use instead of bind_var_to_int
 
-                                  6/20
-                                  ----
-pathexp.c,lib/glob/glob.c
-       - posix_glob_backslash: variable to control whether or not pathname
-         expansion handles backslashes in the pattern the way Posix says it
-         should. Enabled by default
+builtins/common.c
+       - builtin_bind_variable: allow assignment of key `@' to an existing
+         associative array by passing ASS_ALLOWALLSUB to assign_array_element.
+         This affects printf and read
 
-pathexp.h
-       - posix_glob_backslash: new extern declaration
+builtins/variables.[ch]
+       - bind_var_to_int: add third `flags' argument to pass to bind_variable
+         instead of always passing 0
 
-builtins/shopt.def
-       - posixglob: new option, reflects the value of posix_glob_backslash
+redir.c,builtins/common.c,builtins/printf.def
+       - bind_var_to_int: change callers, add third flags argument
 
-general.c
-       - posix_vars: add posix_glob_backslash to the table
-       - posix_initialize: set posix_glob_backslash to 1 when turning on
-         posix mode
+builtins/common.c
+       - builtin_bind_var_to_int: pass ASS_ALLOWALLSUB to bind_var_to_int so
+         builtins like wait can assign to assoc[@] and assoc[*]
 
-                                  6/21
+                                  4/28
                                   ----
-doc/{bash.1,bashref.texi}
-       - pathname expansion: note that under some circumstances the shell
-         will invoke the matching engine for words with unquoted backslashes
-       - posixglob: document the new shell option and its effects
+bashline.c
+       - command_word_completion_function: make sure to initialize
+         old_glob_ignore_case before trying to restore from it
+       - command_word_completion_function: if we are completing a glob
+         pattern, make sure to set rl_filename_completion_desired, so we get
+         quoting and appending -- we are completing a filename, after all.
+         From a report from Manuel Boni <ziosombrero@gmail.com>
 
-                                  6/27
-                                  ----
-{config.h.in,configure.ac}
-       - setresuid,setresgid: check and set HAVE_{DECL,}_SETRES[UG]ID as
-         appropriate
+lib/readline/bind.c
+       - enable-active-region: separate control of the active region and
+         bracketed paste. Still set to the same default value as bracketed
+         paste, and enabling bracketed paste enables the active region.
+         Now you can enable bracketed paste and then turn off the active
+         region.
 
-shell.c
-       - disable_priv_mode: if we have setres[ug]id, use them over
-         set[ug]id, which only set the save user-id and group-id if the
-         process is running as root. From Ian Eldred Pudney
-         in https://savannah.gnu.org/patch/?9822
+doc/bash.1,lib/readline/doc/{readline.3,rltech.texi}
+       - enable-active-region: document new bindable readline variable and
+         its effects
 
-                                  6/28
+                                  4/30
                                   ----
-lib/glob/glob.c
-       - glob_vector: don't bother trying to read the directory if the filename
-         pattern doesn't have any globbing characters except backslash; just
-         dequote the pattern and try to lstat(2) it as if there were no
-         globbing characters at all. From an austingroup-bugs discussion
-         message from Stephane Chazelas <stephane.chazelas@gmail.com>
+command.h
+       - W_ARRAYREF: new flag, meaning the word is a valid array reference
+         with subscript, replaces W_DOLLARSTAR, which was unused
 
-bashline.c
-       - completion_glob_pattern: just call glob_pattern_p and make sure it
-         returns 1 (non-backslash globbing characters)
+subst.c        
+       - expand_subscript_string,expand_array_subscript: new functions to
+         parse and expand-and-quote array subscripts. For future use
 
-builtins/help.def
-       - help_builtin: don't try pattern matching the help topic argument
-         unless glob_pattern_p returns 1
+                                   5/3
+                                   ---
+builtins/mapfile.def
+       - mapfile: if the delimiter is a newline, set unbuffered_read = 1
+         for any file descriptor that isn't seekable and lseek sets errno
+         to ESPIPE (pipes, FIFOs, maybe terminal devices). If it's not a
+         newline, only allow buffered reads if the file descriptor is a
+         regular file. Report from Koichi Murase <myoga.murase@gmail.com>
 
-pathexp.c
-       - unquoted_glob_pattern_p: when in a bracket expression (open > 0),
-         don't allow an unquoted slash as part of the bracket expression.
-         Report from Stephane Chazelas <stephane.chazelas@gmail.com>
+builtins/read.def
+       - read_builtin: only set unbuffered_read = 1 if the input is coming
+         from a pipe (which we can't seek on) or the input is a terminal and
+         we want to read a specified number of characters or we're using a
+         non-standard delimiter
 
-                                   7/1
+                                   5/4
                                    ---
-print_cmd.c
-       - print_function_def,named_function_string: make sure to call
-         PRINT_DEFERRED_HEREDOCS to finish printing any here documents and
-         delimiters before printing the function closing brace. Fixes bug
-         reported by Denis McKeon <dmckeon@swcp.com>
 
-execute_cmd.c
-       - execute_command_internal: call reap_procsubs at the end of executing
-         a group command on systems that have /dev/fd. Fixes bug reported by
-         kfm@plushkava.net
+builtins/mapfile.def
+       - mapfile: call zsyncfd before calling the callback. Suggested by
+         Koichi Murase <myoga.murase@gmail.com>; we'll see how it goes
 
-                                   7/3
+                                   5/5
                                    ---
-jobs.c
-       - waitchld: this is in the potential SIGCHLD path, so don't call
-         bgp_add, which can potentially call malloc. The glibc malloc doesn't
-         handle that well. Report from howaboutsynergy@protonmail.com
+subst.h
+       - expand_subscript_string: extern declaration
 
-                                   7/5
-                                   ---
-builtins/bind.def
-       - bind_builtin: make sure return_code is >= 0 before returning it.
-         Fixes bug with bind -x and invalid key sequences reported by
-         bashbug@jonkmans.nl
+{arrayfunc,subst}.c
+       - expand_subscript_string: replace expand_assignment_string_to_string
+         with calls to this when expanding array subscripts
 
-                                   7/8
-                                   ---
-doc/{bash.1,bashref.texi}
-       - unset: fixed up list of special variables that lose their special
-         properties if they are unset. Report and fix from Edward Huff
-         <ejhuff@gmail.com>
+subst.c
+       - cond_expand_word: call expand_word_internal with Q_ARITH if `special'
+         says we should quote for an arithmetic expression context
+       - expand_word_internal: call expand_array_subscript when we see `[' in
+         arithmetic or array subscript contexts, make conditional on the
+         compatibility level later
+       - expand_word_internal: make sure W_ARRAYREF makes it through this
+         function and into the returned word
 
-                                   7/9
+                                   5/6
                                    ---
-test.c
-       - unary_test: update the `-N' test to use timespecs and nanosecond
-         granularity if available, and use mtime > atime instead of the
-         old mtime >= atime. Fixes bug reported by kfm@plushkava.net
 
-lib/sh/strtod.c
-       - strtod: make sure to use locale_decpoint() to determine the radix
-         character
+arrayfunc.c
+       - array_expand_index: call evalexp with a flag of 0 since we call
+         expand_arith_string with Q_ARITH and we want evalexp to remove
+         the quotes
+
+execute_cmd.c
+       - eval_arith_for_expr,execute_arith_command: now that Q_ARITH has an
+         effect on array subscripts (it quotes the special expansion
+         characters), call evalexp with 0 as the flags arg so quote removal
+         is performed on this quoted argument. Make this conditional on the
+         shell compatibility level later
+       - execute_cond_command: make sure to expand the argument to -v by
+         calling cond_expand_node with Q_ARITH, and correspondingly turn off
+         assoc_expand_once when calling unary_test with that argument, since
+         we want it to be expanded again to remove the quotes
+       - execute_cond_command: expand the arguments to the arithmetic operators
+         with Q_ARITH and pass TEST_ARITHEXP to binary_test to ensure that
+         it lets evalexp expand the arguments to remove the quoting
 
-                                  7/11
-                                  ----
-lib/sh/utf8.c
-       - utf8_mblen: return -2 if the UTF-8 sequence is incomplete
-       - utf8_mblen: 4-byte UTF-8 characters start with a byte <= 0xf4; limit
-         to 4-byte UTF-8 (since 5- and 6-byte code points were removed in 2003)
+test.c
+       - arithcomp: if TEST_ARITHEXP is in FLAGS, call evalexp with a flag
+         if 0 to force evalexp to expand the arguments to remove the quoting
 
-                                  7/12
-                                  ----
-parse.y,shell.h
-       - sh_input_line_state_t: if HANDLE_MULTIBYTE is defined, add members
-         for saving shell_input_line_property and its associated size; let
-         save_line_state and restore_line_state manage it. This means
-         restore_line_state no longer calls set_line_mbstate. From a report
-         from astian <astian@e-nautia.com>
+subst.c
+       - param_expand: since we call expand_arith_string with Q_ARITH, we need
+         to call evalexp with 0 instead of EXP_EXPANDED for $((...)) expansion
+       - expand_word_internal: if we recursively call expand_word_internal to
+         expand the contents of a double-quoted string, make sure we pass
+         through Q_ARITH if it appears in QUOTED
+       - verify_substring_values: call expand_arith_string with Q_ARITH and
+         correspondingly call evalexp with 0 instead of EXP_EXPANDED
 
-parse.y
-       - set_line_mbstate: if the current locale is not multibyte, just set
-         everything in the property array to 1
-       - set_line_mbstate: use locale_utf8locale to optimize away calls to
-         mbrlen; just use utf8_mblen
+execute_cmd.c
+       - execute_cond_node: if -v is the operator, and the operand is a valid
+         array reference, pass TEST_ARRAYEXP flag to unary_test
 
-                                  7/14
-                                  ----
-variables.c
-       - sv_tz: remake the export env if TZ is being unset. Fixes bug
-         reported by Travis Everett <travis.a.everett@gmail.com>
+                                   5/7
+                                   ---
+builtins/common.[ch]
+       - set_expand_once: set array_expand_once to the value passed as the
+         first argument, returning the original value
 
-lib/readline/display.c
-       - rl_expand_prompt: if the prompt contains embedded newlines, compute
-         local_prompt_prefix before local_prompt because each call sets
-         local_prompt_newlines, and we want the values computed in the call
-         that uses local_prompt to be the ones that we use. Fixes prompt
-         wrapping bug reported by Tianon Gravi <admwiggin@gmail.com>
+builtins.h
+       - ARRAYREF_BUILTIN: new flag for shell builtins, means that the builtin
+         can take array references, with subscripts, as arguments
 
-                                  7/16
-                                  ----
-Makefile.in
-       - added a number of dependencies from Vemake Vemake
-         <vemakereporter@gmail.com> as reported in
-         http://savannah.gnu.org/patch/download.php?file_id=47219
+builtins/mkbuiltins.c
+       - set ARRAYREF_BUILTIN flag on builtins given in the arrayvar_builtins
+         array
 
-                                  7/19
-                                  ----
-lib/sh/utf8.c
-       - utf8_mblen: changes to handle invalid multibyte sequences better,
-         even when N means that the sequence would be too short anyway
+execute_cmd.c
+       - execute_cond_node: use set_expand_once to set array_expand_once to 0
+         before calling unary_test with -v (see change from 5/6)
 
 arrayfunc.c
-       - bind_assoc_var_internal: new convenience function to assign a
-         key-value pair to an associative array. It gets the SHELL_VAR * AND
-         a HASH_TABLE *, which may or may not correspond to the assoc_cell
-         of the variable, and performs the insertion into the hash table.
-         Callers take care of passing the right values.
-       - bind_assoc_variable: call bind_assoc_var_internal to do the real
-         work
-       - assign_compound_array_list: change to assign associative array
-         key-value pairs into a new hash table (NHASH), so we can still use
-         the old value for expansion. We do this in place of clearing out
-         the contents of the associative array before performing the expansion
-         and assignments. After doing all the assignments into NHASH, we swap
-         NHASH into the variable as its value and dispose of the old value.
-         Fixes inconsistency reported by Darren 'Tadgy' Austin
-         <darren@afterdark.org.uk>
+       - unbind_array_element: allow the caller to choose whether or not a
+         subscript of `*' or `@' unsets the entire array by passing
+         VA_ALLOWALL in FLAGS. Right now, since the unset builtin doesn't
+         pass VA_ALLOWALL, those subscripts unset individual elements for
+         associative arrays. We preserve the old behavior of unsetting
+         indexed arrays for the time being with new indexed-array-specific
+         code
 
-                                  7/20
-                                  ----
-aclocal.m4
-       - include bashansi.h in a bunch of AC_TRY_RUN recipies to avoid
-         exit() being flagged as an implicit declaration. Report and fix
-         from Chris Yungmann <yungmann.chris@gmail.com>
+                                   5/9
+                                   ---
 
-shell.c
-       - set_exit_status: set last_command_exit_value to the argument and make
-         sure to set PIPESTATUS from that exit value
+builtins/shopt.def
+       - expand_once_flag: "assoc_expand_once" option now sets this flag,
+         calls set_assoc_expand on change
+       - set_assoc_expand: sets assoc_expand_once to mirror expand_once_flag;
+         placeholder for future changes
 
-shell.h
-       - set_exit_status: extern declaration
+builtins/common.h
+       - expand_once_flag: extern declaration
 
-parse.y
-       - report_syntax_error: make sure to set PIPESTATUS if we set
-         last_command_exit_value on a syntax error
-       - parse_string_to_word_list,parse_compound_assignment: set PIPESTATUS
-         when we set last_command_exit_value
+                                  5/10
+                                  ----
+doc/{bash.1,bashref.texi}
+       - note that case patterns undergo quote removal. Reported by
+         AlvinSeville7cf <alvinseville7cf@gmail.com>
 
-sig.c
-       - throw_to_top_level,sigint_sighandler: set PIPESTATUS when we set
-         last_command_exit_value
+                                  5/11
+                                  ----
 
-variables.c
-       - sv_locale: call set_exit_status to set PIPESTATUS and last_command_exit_value
+builtins/bashgetopt.c
+       - list_optflags: flags associated with the word corresponding to
+         list_optarg, assuming list_optarg is a separate argument
 
-arrayfunc.c
-       - find_or_make_array_variable,array_expand_index,assign_compound_array_list:
-         call set_exit_status to set PIPESTATUS and last_command_exit_value
+builtins/bashgetopt.h
+       - list_optflags: extern declaration
 
-builtins/evalstring.c
-       - parse_and_execute: set PIPESTATUS when we set last_command_exit_value
+builtins/set.def
+       - unset_builtin: set VFLAGS each time through the loop, since we take
+         whether or not the word has W_ARRAYREF set into account
+       - unset_builtin: don't pass VA_ALLOWALL to unbind_array_element for
+         now
 
-braces.c
-       - brace_expand: call set_exit_status to set PIPESTATUS and last_command_exit_value
+test.c
+       - unary_test: in the -v case, use assoc_expand_once in the first call
+         to valid_array_reference ()
 
-eval.c
-       - reader_loop: call set_exit_status to set PIPESTATUS and last_command_exit_value
+builtins/printf.def
+       - printf_builtin: only set VA_ONEWORD if the option argument to -v has
+         W_ARRAYREF set (look at list_optflags)
 
-make_cmd.c
-       - set PIPESTATUS when setting $? due to syntax errors or constructs
-         not being available
+                                  5/12
+                                  ----
+
+subst.c
+       - expand_array_subscript: don't quote @ or * in the expanded subscript
+         at all, even when they are the only character in the subscript. See
+         how this works out -- it might uncover places where we need to allow
+         `*' and `@' as subscripts where they are not allowed now
 
 expr.c
-       - expr_streval: set PIPESTATUS when setting $? due to syntax errors
+       - expr_bind_variable: pass ASS_ALLOWALLSUB to bind_int_variable so we
+         can allow (( A[@]=value )) when A is an existing associative array
 
-subst.c
-       - extract_delimited_string,extract_dollar_brace_string,do_assignment_internal,
-         call_expand_word_internal,array_length_reference,param_expand,
-         parameter_brace_expand_word,parameter_brace_expand_rhs,
-         parameter_brace_expand_error,parameter_brace_expand,err_unboundvar:
-         set PIPESTATUS when setting last_command_exit_value on error
-         conditions
+arrayfunc.h
+       - AV_ATSTARKEYS: new flag value, means to accept a[@] and a[*] but
+         treat them as keys/expressions and not special values
 
-redir.c
-       - REDIRECTION_ERROR: set PIPESTATUS when setting last_command_exit_value
-         on error conditions
+arrayfunc.c
+       - array_value_internal: check AV_ATSTARKEYS and don't treat them as
+         ALL_ELEMENT_SUB values; they fall through to use as keys/indices
 
-subst.c
-       - match_upattern,match_wpattern: if the match length is greater than the
-         string length, short-circuit and return failure.  Fixes bug
-         reported by Eduardo Bustamante <dualbus@gmail.com>
+test.c
+       - unary_test: if -v is passed an array reference, add AV_ATSTARKEYS to
+         the flags passed to array_value so we treat @ and * as keys for an
+         existing associative array
 
-                                  7/22
+                                  5/13
                                   ----
-lib/glob/sm_loop.c
-       - BRACKMATCH: if we think we've matched, tighten up the rules for
-         the closing right bracket in the bracket expression to be correct
-         in the presence of invalid character classes, collating symbols,
-         and equivalence classes. If they're invalid, they shouldn't require
-         additional right brackets to close them
 
-                                  7/25
-                                  ----
-builtins/colon.def
-       - add the right includes so colon_builtin and false_builtin can take
-         a WORD_LIST * argument like the prototype says they do
+subst.c
+       - expand_cond_word: if SPECIAL == 3 (arithmetic expression), dequote the
+         resulting WORD_LIST * as if special == 0, because we don't want to
+         quote the list for pattern matching. Report from
+         Adjudicator Darren <adjudicatordarren@protonmail.com>
 
-                                  7/29
+                                  5/14
                                   ----
-lib/readline/kill.c
-       - _rl_read_bracketed_paste_prefix: read the character prefix that
-         indicates a pasted string in bracketed paste mode. If we don't
-         read a valid bracketed paste prefix, push the other characters
-         back onto the input stack with _rl_unget_char
-       - _rl_bracketed_read_key: handle reading pasted input when bracketed
-         paste mode is enabled, including reading multibyte characters; push
-         anything beyond a single byte back onto the input stack where it
-         can be read by _rl_read_mbstring or subsequent input
-       - _rl_bracketed_read_mbstring: handle reading pasted input in bracketed
-         paste mode, using _rl_bracketed_read_key to get the pasted text,
-         then call _rl_read_mbstring to get the rest of any multibyte char
-
+subst.c
+       - expand_array_subscript: add double quote (") to the list of characters
+         that are backslash-quoted in subscripts after word expansion.
+         skipsubscript treats them specially, so you have to quote them to
+         do things like `key='"' ; array[$key]=1 ; [[ -v array[$key] ]]'
 
-lib/readline/vi_mode.c
-       - _rl_vi_callback_getchar: call _rl_bracketed_read_mbstring to handle
-         bracketed paste mode input. Fixes issue with vi-change-char reported
-         by <vampyrebat@gmail.com>
-       - rl_vi_domove_getchar: just call _rl_bracketed_read_key and return
-         the result -- we're not interested in multibyte-character input here
-         yet
-       - rl_vi_replace: bind BRACK_PASTE_PREF key sequence if bracketed paste
-         mode has been enabled
-       - _rl_overstrike_bracketed_paste: key binding function for the bracketed
-         paste prefix key sequence in overwrite mode; reads the pasted text
-         and uses rl_vi_overstrike to add each character in overwrite mode.
-         Fixes issue reported by <vampyrebat@gmail.com>
-
-                                  7/31
+                                  5/16
                                   ----
-lib/readline/input.c
-       - _rl_read_mbchar: the first time through the loop (mb_len == 0), call
-         _rl_bracketed_read_key to process any bracketed paste characters
 
-lib/readline/text.c
-       - _rl_char_search: use _rl_bracketed_read_key in the non-multibyte
-         character case
+builtins/wait.def
+       - wait_builtin: if we longjmp to wait_intr_buf, call unset_waitlist if
+         we have called set_waitlist (wflags & JWAIT_WAITING). Fixes bug with
+         wait -n interrupted by a trapped signal (not SIGINT) reported by
+         Jonas Alfredsson <jonas.alfredsson@protonmail.com>
 
-lib/readline/misc.c
-       - _rl_arg_dispatch: use _rl_bracketed_read_key in place of rl_read_key
+jobs.c
+       - wait_sigint_cleanup: restore the old sigint handler before we longjmp
+         out by calling restore_sigint_handler()
 
-subst.c
-       - list_string: if string_extract_verbatim returns something, just make
-         a WORD_DESC * and add current_word directly to it, noting that we
-         don't want to free current_word (free_word = 0)
-       - string_extract_verbatim: if the separator string is the empty
-         string, don't bother with the loop -- just savestring the string,
-         update *sindex, and return the copy
-       - read_comsub: make the string we use to save the output from the pipe
-         512 bytes instead of 128 (same size as the buffer used to read from
-         the pipe); fewer calls to xrealloc in the worst case
-       - parameter_brace_expand_length: optimize the common case (non-dynamic
-         scalar variable without `set -u' in effect) and just call MB_STRLEN
-         on the variable value in that case. From a report from
-         Alkis Georgopoulos <alkisg@gmail.com>
-
-                                  8/13
+                                  5/17
                                   ----
-execute_cmd.c
-       - execute_subshell_builtin_or_function: call subshell_exit() instead of
-         sh_exit() or exit() so the exit trap gets run. Fixes issue reported
-         in https://savannah.gnu.org/support/?109840
-       - replace __P with PARAMS
-
-lib/readline/colors.c
-       - _rl_print_color_indicator: eliminate one use of S_ISLNK.
-         Report and fix from Christian Biesinger <cbiesinger@google.com>
+builtins/read.def
+       - bind_read_variable: now takes an additional argument, flags to pass
+         to builtin_bind_variable; change callers
+       - SET_VFLAGS: set vflags and bindflags
+       - read_builtin: call SET_VFLAGS to set vflags and bindflags from each
+         word before calling valid_array_reference and bind_read_variable
 
-                                  8/22
-                                  ----
-variables.c
-       - push_posix_temp_var: change to use bind_variable and modify variables
-         at the current local scope or create and modify variables at the
-         global scope, as if a standalone assignment statement had been
-         executed. This restores some bash-4.4 backwards compatibility with
-         respect to posix-mode assignment statements preceding special
-         builtins and shell functions. The bash-5.0 behavior, while perhaps
-         defensible, caused too many compatibility problems. Originally
-         prompted by several discussions with Martijn Dekker; the current
-         incarnation and tests based on a report to Debian BTS from
-         Thorsten Glaser <tg@mirbsd.de>
-
-                                  8/26
-                                  ----
-shell.c,bashhist.c
-       - __P -> PARAMS
+builtins/common.c
+       - builtin_bind_variable: set vflags (for valid_array_reference) and
+         bindflags (for bind_variable/assign_array_element) separately for
+         clarity
 
-shell.c
-       - set_option_defaults,reset_option_defaults: before calling
-         list_minus_o_options at invocation, call set_option_defaults to
-         set the options that are initialized to -1 to either 1 or 0, as
-         appropriate; then call reset_option_defaults to set them back to -1
-         after list_minus_o_options returns
-       - init_interactive: if enable_history_list == -1, set it to 1, then
-         set remember_on_history to enable_history_list. Fixes bug reported
-         by Alex Kerzner <alex.j.kerzner@gmail.com>
-       - init_noninteractive: if enable_history_list == -1, set it to 0, let
-         bash_history_reinit take care of setting remember_on_history
-       - init_interactive_script: if enable_history_list == -1, set it to 1,
-         then set remember_on_history to enable_history_list
+arrayfunc.c
+       - assign_array_element: sanity check: make sure that the subscript
+         returned by array_variable_name consumes the entire NAME, otherwise
+         flag it as a subscript error. This keeps things like
+         `KEY=' ]'; read assoc[$KEY] <<< hello' from assigning to incomplete
+         subscripts
 
-bashhist.c
-       - enable_history_list: initialize to -1 to note when it gets changed
-         by -o history or +o history at invocation
+builtins/printf.def
+       - printf_builtin: if LIST_OPTFLAGS includes W_ARRAYREF, set VA_NOEXPAND
+         in VFLAGS
 
-                                  8/28
+                                  5/17
                                   ----
-lib/readline/terminal.c
-       - TGETENT_SUCCESS, TGETFLAG_SUCCESS: defines to represent successful
-         returns from tgetent and tgetflag, since HPUX manages to get them
-         wrong. New patch from Osipov, Michael <michael.osipov@siemens.com>
-       - TGETFLAG: new define, make sure tgetflag returns TGETENT_SUCCESS
-       - _rl_init_terminal_io: use TGETENT_SUCCESS and TGETFLAG
 
-configure.ac
-       - hpux: make sure to define TGETFLAG_BROKEN
+lib/readline/complete.c
+       - compute_lcd_of_matches: move a couple of strlen calls out of a loop
+         in calls to mbrtowc; performance improvement only. Report and fix
+         from sparrowhawk996@gmail.com
 
-                                  8/30
-                                  ----
-tests
-       - add copyright notices to all scripts longer than 15 lines at the
-         request of the FSF
+lib/readline/bind.c
+       - rl_trim_arg_from_keyseq: take a key sequence and its length and
+         return the index into the key sequence following any initial numeric
+         argument. Return -1 if there is no numeric argument (the caller is
+         expected to make sure) or if the key sequence consists *only* of
+         the numeric argument. The caller should use the remainder of the
+         key sequence to look up the desired key binding.
 
-                                   9/1
-                                   ---
-lib/readline/complete.c
-       - _rl_complete_internal: move logic that checks whether the last
-         completion attempt failed and the current attempt returned a single
-         match and insert the single completion here. A better implementation
-         of Richard Stallman's suggestion of 2/23.
+lib/readline/readline.h
+       - rl_trim_arg_from_keyseq: extern declaration
 
-                                   9/3
-                                   ---
 bashline.c
-       - edit_and_execute_command: reset the readahead token after calling
-         restore_parser_state, in case some call to reset_parser set
-         token_to_read. Fixes bug reported by null <avalonvales@protonmail.com>
+       - bash_execute_unix_command: if the argument count is > 1 or we have
+         an explicit argument, call rl_trim_arg_from_keyseq to get past the
+         numeric argument and deal with the rest of the key sequence. We still
+         need a way to pass it to the invoked program or function. From
+         a report from Jesper Nygards <jesper.nygards@gmail.com>
 
-                                   9/9
-                                   ---
-execute_cmd.c
-       - execute_command_internal: if we're executing a command list
-         (executing_list != 0), save the old fifo list and close any new
-         FIFOs that the command opens. Fixes bug reported by
-         Kamil Cukrowski <kamilcukrowski@gmail.com>
-
-                                  9/10
+                                  5/18
                                   ----
-aclocal.m4,m4/intdiv0.m4
-       - make sure `exit' is used consistently with <stdlib.h> included
-       - make sure `main' isn't declared to implicitly return int
-       - include <ulimit.h> before using ulimit
-       - include <string.h> before testing string functions
-       - fixes from Florian Weimer <fweimer@redhat.com>
 
-configure.ac
-       - setresuid,setresgid: use AC_CHECK_FUNCS instead of AC_CHECK_DECL,
-         which always fails
+bashline.c
+       - bash_execute_unix_command: if the user supplied a numeric argument
+         when invoking bash_execute_unix_command, pass it to the command in
+         the READLINE_ARGUMENT variable
 
-shell.c
-       - disable_priv_mode: use HAVE_SETRESUID and HAVE_SETRESGID instead of
-         the HAVE_DECL variants, which always fail configure tests
+lib/readline/readline.[ch]
+       - _rl_del_executing_keyseq: convenience function to `delete' the last
+         character added to the executing key sequence. Intended to be used
+         before calling rl_execute_next or similar functions that push input
+         back to be re-read
 
-m4/intl.m4
-       - gt_INTL_SUBDIR_CORE: add back check for localeconv, removed in
-         newer gettext releases
+doc/{bash.1,bashref.texi}
+       - READLINE_ARGUMENT: documented new variable available for commands
+         defined using `bind -x' keybindings
 
-                                  9/16
-                                  ----
-builtins/help.def
-       - help_builtin: make the closing quote printed after the argument list
-         for a glob pattern argument a translatable string to ease translation
-         for certain languages. Report from Roland Illig <roland.illig@gmx.de>
+lib/readline/doc/rltech.texi
+       - rl_trim_arg_from_keyseq: documented new function
 
-builtins/{reserved,complete,exec,getopts}.def
-       - minor typographical fixes from Roland Illig <roland.illig@gmx.de>
+                                  5/19
+                                  ----
 
-siglist.c
-       - include general.h for INT_STRLEN_BOUND
-       - initialize_siglist: use the same string for the strlen and xmalloc
-         for the message about an unknown signal number; use INT_STRLEN_BOUND
-         instead of a fixed 10 for the number
+builtins/evalstring.c
+       - should_suppress_fork: suppress the fork if we're in a process
+         substitution subshell, in addition to being a simple command
+         without redirections. From a report back in 10/2020 from
+         Hyunho Cho <mug896@gmail.com>
 
-builtins/getopts.def,doc/{bash.1,bashref.texi}
-       - getopts: minor changes to the description of the effect of supplying
-         additional arguments. Report from Roland Illig <roland.illig@gmx.de>
+bashline.c
+       - command_word_completion_function: if we're trying to complete an
+         absolute program (one containing a slash), don't run strcmp or
+         strcasecmp on the return value from rl_filename_completion_function,
+         since that duplicates work the filename completion function already
+         does. From a report back in 1/2021 by awa54@cdak.net
 
-                                  9/17
+                                  5/22
                                   ----
-jobs.[ch]
-       - save_proc_status: external interface to bgp_add, takes care of
-         blocking and unblocking SIGCHLD
-       - __P -> PARAMS
+parse.y
+       - CHECK_FOR_RESERVED_WORD: if we are returning an ESAC and unsetting
+         PST_CASESTMT, decrement esacs_needed_count
 
-                                  9/18
-                                  ----
-jobs.[ch]
-       - procsub_{free,add,search,delete,waitpid,waitall,clear,prune}: new
-         functions to keep track of the list of active process substitutions
-         and their statuses. Implementation is currently a singly-linked list
-         of PROCESS *, so functions that expect a PROCESS * to manipulate
-         continue to work. Inspired by report from leo.dalecki@ntymail.com
-       - find_pipeline,cleanup_dead_jobs,wait_for_background_pids: call new
-         procsub_* functions to manage procsub list; don't call the functions
-         in subst.c any more
+parse.y,shell.h
+       - sh_parser_state_t: save and restore esacs_needed_count and
+         expecting_in_token in the shell parser state struct and
+         save_parser_state/restore_parser_state
 
-subst.c
-       - process_substitute: call procsub_add with the PROCESS * returned
-         from make_child; let the functions in jobs.c manage the list.
-         waitchld continues to set the pid field in the fifo list as a hint
-         that a particular fd or FIFO is no longer used and can be reaped
-       - process_substitute: let the child process clear out any existing
-         procsub pid list
-       - wait_procsubs: no longer compiled in
+print_cmd.c
+       - print_simple_command: don't bother to call command_print_word_list
+         with an empty list
+       - print_simple_command: don't print a space before a redirection list
+         if there weren't any command words to print
 
-sig.c
-       - termsig_handler: replace discard_last_procsub_child with call to
-         procsub_clear
+                                  5/24
+                                  ----
 
-lib/readline/display.c
-       - init_line_structures: fix a problem which results in references to
-         uninitialized memory when gdb sets the number of columns to 32767
-         (their `unlimited'). Modification of change from 5/23. Report and
-         fix from Andrew Burgess <andrew.burgess@embecosm.com>
+lib/sh/input_avail.c
+       - nchars_avail: make sure SET and OSET are declared on systems with
+         select(2). Reported by Larkin Nickle <me@larbob.org>
 
-                                  9/19
-                                  ----
 parse.y
-       - xparse_dolparen: after calling parse_string to consume input, make
-         sure to reset the parser (reset_parser()) before restoring the EOF
-         token and the parser_state variable. Fixes issue with nested traps
-         running command substitutions in command lines with command
-         substitutions reported by Travis Everett <travis.a.everett@gmail.com>
+       - cond_term: if we read a `!' toggle CMD_INVERT_RETURN instead of
+         setting it unconditionally. Report and patch from
+         Vincent Menegaux <vincent.menegaux@gmail.com> via
+         https://savannah.gnu.org/patch/?10070
 
-                                  9/20
-                                  ----
-doc/{bashref.texi,bash.1}
-       - fixed a typo in the example for the =~ operator: the ? should follow
-         the (a), not precede it. Report from hk <hkadeveloper@gmail.com>
-       - some changes to the text describing regular expression matching for
-         the =~ operator
-
-                                  9/25
+                                  5/25
                                   ----
-general.c,builtins/shopt.def
-       - posix_glob_backslash: remove references to this variable and the
-         `posixglob' shell option
-
 doc/{bash.1,bashref.texi}
-       - remove references to the `posixglob' shell option
+       - test: add the ( $2 $3 ) case to the description of the four-argument
+         behavior. Inspired by a discussion with Christoph Anton Mitterer
+         <calestyo@scientia.net>
 
-                                  9/26
+                                  5/27
                                   ----
-{jobs,nojobs}.c
-       - DEFAULT_MAX_CHILD: bump this up to 4096
-       - set_maxchild: set lmaxchild to MAX_CHILD_MAX if getmaxchild returns
-         -1 without changing errno (assume that sysconf returns -1 meaning
-         unlimited)
-       - initialize_job_control: call set_maxchild instead of inline code
-       - mark_dead_jobs_as_notified: call set_maxchild to set js.c_childmax
-         if it hasn't been set yet
+doc/bashref.texi
+       - replace most of the GNU parallel section with a reference to the
+         tutorial on gnu.org
 
-                                  9/30
-                                  ----
-lib/glob/xmbsrtowcs.c
-       - xwcsrtombs: implementation of wcsrtombs from gnulib, modified to
-         treat invalid wide characters (or wide characters that can't be
-         converted to multibyte character sequences) as bytes. Should be
-         used only in unusual circumstances where wcsrtombs fails.
+lib/glob/glob.h
+       - GX_NEGATE: new flag; indicates whether the pattern is being negated
+         as part of an extglob pattern. Not used yet
 
 lib/glob/glob.c
-       - wdequote_pathname: if wcsrtombs fails to convert the dequoted wide
-         character pathname back to a sequence of multibyte characters, call
-         xwcsrtombs to try to treat the invalid wide characters as bytes --
-         the call to xdupmbstowcs treats bytes that don't convert to wide
-         characters as just bytes, which kind of causes this problem in the
-         first place. Inspired by report from Geoff Kuenning <geoff@cs.hmc.edu>
+       - extglob_skipname,wextglob_skipname: pass GX_NEGATE to the skipname
+         functions if the pattern is being negated. Not checked yet
 
-lib/readline/complete.c
-       - compute_lcd_of_matches: use the case-folding code (which performs
-          character-by-character checking and compares invalid multibyte
-          sequences as bytes) instead of the old case-sensitive code (which
-         used _rl_compare_chars), converting characters to lowercase as
-         needed. Fixes bug with invalid sequences in common filename prefixes
-         reported by Grisha Levit <grishalevit@gmail.com>
-
-                                  10/1
+                                  5/28
                                   ----
-builtins/shopt.def
-       - reset_shopt_options: add in resets for some missing shopt options.
-         Report and fix from Grisha Levit <grishalevit@gmail.com>
+doc/{bash.1,bashref.texi}
+       - dotglob: add text to clarify that `.' and `..' have to be matched by
+         a pattern beginning with `.' or -- and this is the sketchy part --
+         that a pattern beginning with `.' has to be one of the patterns in
+         an extended glob expression
 
-execute_cmd.c
-       - execute_command_internal: make sure a failed attempt to define a
-         shell function causes the shell to exit if -e is enabled. Report
-         from Andreas Kusalananda Kähäri <andreas.kahari@abc.se>
-       - execute_command_internal: combine cm_function_def, cm_arith, and
-         cm_cond cases into one switch case, since the code is virtually
-         identical across all three
+lib/glob/glob.c
+       - skipname,wskipname: perform the special checks for `.' only if the
+         pattern is not being negated
 
-                                  10/3
-                                  ----
-pathexp.[ch],lib/glob/glob.c,lib/glob/glob_loop.c
-       - remove all references to posix_glob_backslash in preparation for
-         implementing austin group interpretation #1234
+                                   6/3
+                                   ---
+parse.y,shell.h
+       - eol_ungetc_lookahead: save and restore as part of the parser state
+         included in {save,restore}_parser_state
 
-pathexp.c
-       - unquoted_glob_pattern_p: revert to bash-4.4 behavior of returning 1
-         only if there is an unquoted `*', `?', or bracket expression, as
-         per austin group interpretation #1234
+                                   6/7
+                                   ---
+lib/readline/display.c
+       - puts_face: make sure to cast each member of STR to unsigned char, so
+         it's not misinterpreted as EOF, which putc_face does not display.
+         Report and fix from Volodymyr Prodan <vovcat@gmail.com> in
+         https://savannah.gnu.org/patch/?10076
 
-lib/glob/glob_loop.c
-       - INTERNAL_GLOB_PATTERN_P: revert to bash-4.4 behavior of returning 1
-         only if there is an unquoted `*', `?', or bracket expression, as
-         per austin group interpretation #1234
+examples/shobj-conf
+       - aix*gcc: change SHOBJ_LD to ${CC}, prefix the SHOBJ_LDFLAGS flags
+         with -Wl, so gcc will pass them to the linker. Report from
+         lehel@maxer.hu in https://savannah.gnu.org/support/?110505
 
-                                  10/4
+                                  6/11
                                   ----
-variables.c
-       - assign_seconds,get_seconds: use the tv_sec value returned from
-         gettimeofday() instead of time() to get a better approximation of
-         the number of seconds since the epoch for future calculations.
-         From a report by Stephane Chazelas <stephane.chazelas@gmail.com>
+doc/{bash.1,bashref.texi}
+       - cd: additional arguments are not ignored; they raise an error.
+         Report from Douglas McIlroy <douglas.mcilroy@dartmouth.edu>
+
+lib/glob/strmatch.h
+       - FNM_DOTDOT: enable special handling for `.' and `..': if FNM_PERIOD
+         is not set, `.' and `..' at the start of a string or as a pathname
+         component need to be matched by a `.' in the pattern and cannot be
+         matched by `?', `*', or a bracket expression
+       
+lib/glob/glob.c
+       - glob_vector: pass FNM_DOTDOT to strmatch() if noglob_dot_filenames
+         is not set to enable special handling of `.' and `..'. Prompted by a
+         discussion with Nora Platiel <nplatiel@gmx.us>
+       - skipname,wskipname: remove special checks for `.' and (disabled)
+         checks for `..'
 
-pathexp.[ch],{bashline,subst}.c
-       - shell_glob_filename: now takes an additional flags argument to pass
-         to quote_string_for_globbing
+lib/glob/sm_loop.c
+       - GMATCH: implement special handling for FNM_DOTDOT and `.' and `..':
+         make sure they can't be matched by any special glob characters at
+         the start of the string or as a pathname component (if FNM_PATHNAME
+         is set). This also means that !(pattern) won't return `.' or `..'
+         if dotglob is set
+       - GMATCH,EXTMATCH: don't pass FNM_DOTDOT down to recursive calls, like
+         FNM_PERIOD, once we process the first character in the string or
+         pathname component
 
-                                  10/6
-                                  ----
-subst.c
-       - glob_expand_word_list: call shell_glob_filename with QGLOB_CTLESC
-         because quote removal hasn't been performed yet
+lib/glob/smatch.c
+       - ISDIRSEP,PATHSEP,SDOT_OR_DOTDOT,PDOT_OR_DOTDOT: provide definitions
+         for single-byte or wide character strings for sm_loop.c to use
 
-                                  10/7
+                                  6/16
                                   ----
-pathexp.c
-       - quote_string_for_globbing: if we have an unquoted backslash followed
-         by a CTLESC-quoted character (not CTLESC-CTLESC), just perform the
-         usual CTLESC-to-backslash conversion instead of skipping over it.
-         Fixes issue raised in austin-group discussion about globbing by
-         Geoff Clare <gwc@opengroup.org> (austin-group issue 1234), though
-         it's still inherently ambiguous
 
-                                  10/8
-                                  ----
-include/shmbutil.h
-       - xwcsrtombs: extern declaration, to match other functions in that file
+doc/{bash.1,bashref.texi},lib/readline/doc/{rluser,rltech}.texi
+       - slight wording changes to rewrite gender-specific language. From a
+         report by Vipul Kumar <kumar+bug-bash@onenetbeyond.org>, suggested
+         language from G. Branden Robinson <g.branden.robinson@gmail.com>,
+         Lawrence Velázquez <vq@larryv.me>,
+         and Andrew Church <achurch+bash@achurch.org>
 
-lib/glob/glob.c
-       - wcdequote_pathname: new function, actual backslash quote removal code
-         from wdequote_pathname; wdequote_pathname calls it
+builtins/fc.def
+       - fc_builtin: make sure an entry in the history list is non-null
+         before trying to write it to stdout or the temporary file. From a
+         report from Sibo Dong <sibo.dong@outlook.com>
 
-lib/glob/glob.c
-       - {udequote,wcdequote}_pathname: now public void functions
+builtins/common.[ch]
+       - builtin_arrayref_flags: given a WORD_DESC * (which includes flags)
+         and a base set of flags, return a set of flags to pass to
+         valid_array_reference and similar functions
 
-lib/glob/smatch.c
-       - DEQUOTE_PATHNAME: defined appropriately to udequote_pathname or
-         wcdequote_pathname
+builtins/set.def
+       - unset_builtin: call builtin_arrayref_flags to set vflags
 
-lib/glob/sm_loop.c
-       - DEQUOTE_PATHNAME: appropriate extern declaration
-       - BRACKMATCH: call DEQUOTE_PATHNAME to dequote a character class name
-         in a bracket expression. This is the result of a discussion on the
-         austin-group mailing list, from Geoff Clare <gwc@opengroup.org> and
-         Robert Elz <kre@bmunnari.oz.au>
+                                  6/19
+                                  ----
 
-                                  10/10
-                                  -----
-execute_cmd.[ch]
-       - async_redirect_stdin: now a global function
+parse.y
+       - parse_comsub: rewrite to recursively call the parser (yyparse()) and
+         return a string constructed from the resulting parse tree. Probably
+         will only work with bison. Error reporting is more accurate about
+         line numbers and invalid tokens, and command substitution errors 
+         are caught earlier, before expansion
+       - DOLPAREN: new token, never created by yylex; only ever set by
+         parse_comsub and xparse_dolparen to indicate we're recursively
+         calling the parser for a command substitution
+       - comsub: new grammar production that's triggered by DOLPAREN and
+         parses a command substitution, returning a <command>. It's one of
+         the possible end states for the top-level parser
+       - grammar: only call rewind_input_string if the shell's input is
+         coming from a string
+       - shell_ungets: push a string back onto the shell input; only used by
+         make_here_document for backwards compatibility -- allowing a here-
+         document to be terminated by a token at the end of a command
+         substitution
+       - yylex: don't need any more special handling when returning
+         shell_eof_token, but we keep the clause for future work
+       - read_token_word: don't handle backslashes (leave them in the input
+         stream) if we are reading a command substitution (PST_NOEXPAND)
+       - reserved_word_acceptable: allow reserved words after DOLPAREN
+       - report_syntax_error: better error handling if we hit EOF while
+         looking for the ending right paren in a command substitution
+       - parse_string_to_word_list,parse_compound_assignment: make sure to
+         turn off parse_comsub sentinel temporarily
 
-subst.c
-       - process_substitute: call async_redirect_stdin in the child to keep
-         it from having stdin connected to the terminal, since it's not a
-         job control process
+make_cmd.c
+       - make_here_document: backwards compatibility: if we end a here
+         document on the same line as the end of a command substitution,
+         allow the token to terminate the here document (without requiring
+         a newline) and push the remainder of the line back for the parser
+         to consume and terminate the command substitution
 
-                                  10/11
-                                  -----
-subst.c
-       - process_substitute: in the child process, set interactive = 0, since
-         an asynchronous process substitution process is not interactive.
-         Seems to fix issue reported by Grisha Levit <grishalevit@gmail.com>
+builtins/evalstring.c
+       - parse_string: if we read shell_eof_token and use it to terminate a
+         command, rewind the input string here before returning, instead of
+         guessing where to rewind it in the caller
 
-lib/sh/shmatch.c
-       - sh_regmatch: implement a suggestion from Grisha Levit
-         <grishalevit@gmail.com> and don't allow nocaseglob to enable case-
-         insensitive regexp matching. It hasn't been documented that way
-         in years
+                                  6/22
+                                  ----
 
-                                  10/30
-                                  -----
-bashhist.c
-       - bash_add_history: fix a couple of problems with adding extra blank
-         lines to history entries containing here-documents. Fixes bug
-         reported by Oguz <oguzismailuysal@gmail.com>
+redir.c
+       - do_redirection_internal: if VARASSIGN_REDIR_AUTOCLOSE is non-zero,
+         add a redirect to automatically close {var}<fn and other styles of
+         varassign redirection. It's zero by default
 
-lib/sh/shmatch.c
-       - BASH_REMATCH: no longer set to readonly. From a suggestion from
-         Rocky Bernstein <rocky@gnu.org>
+builtins/shopt.def
+       - varredir_close: new shell option, mirrors the value of
+         varassign_redir_autoclose. Suggested multiple times by multiple
+         people
 
 doc/{bash.1,bashref.texi}
-       - BASH_REMATCH: document that it's no longer set to readonly
-
-subst.c
-       - getpattern: since expand_string_for_pat leaves the pattern quoted,
-         we need to remove quoted nulls before running the string through
-         string_list (and then quote_string_for_globbing, since QGLOB_CVTNULL
-         only handles pat[0] == CTLNUL). Fixes bug reported by Oguz
-         <oguzismailuysal@gmail.com>
-
-                                  11/4
-                                  ----
-configure.ac,config.h.in
-       - AC_HEADER_MAJOR: look for `major' and `minor' in various header files
-         and define MAJOR_IN_MAKEDEV or MAJOR_IN_SYSMACROS as appropriate.
-         From a patch from Eli Schwartz <eschwartz@archlinux.org>
+       - varredir_close: document new shell option (the name is tentative)
 
-examples/loadables/finfo.c
-       - include <sys/mkdev.h> and <sys/sysmacros.h> as appropriate for
-         definitions of major/minor
-
-                                  11/6
+                                  6/24
                                   ----
-redir.c
-       - heredoc_expand: if we are expanding the WORD in a here-string, use
-         expand_assignment_string_to_string so the expansions are consistent
-         in contexts where word splitting is not performed. From a bug report
-         by Robin A. Meade <robin.a.meade@gmail.com>
 
-                                  11/7
-                                  ----
 parse.y
-       - xparse_dolparen: if the command substitution is incomplete or doesn't
-         end in `)', print an error message instead of allowing EOS to
-         terminate the comsub. From a bug report from
-         Oguz <oguzismailuysal@gmail.com>
-
-                                  11/11
-                                  -----
-lib/sh/unicode.c
-       - u32toutf8: fix a typo that assigned the wrong value to the first
-         byte of a six-byte UTF-8 character. Report and fix from
-         István Pásztor <pasztorpisti@gmail.com>
+       - yylex: if read_token returns a value < 0, return YYerror to the
+         parser
+       - parse_comsub: if the current_token is not shell_eof_token when
+         yyparse returns, return an error to read_token_word instead of
+         trying to keep parsing. Fixes interactive-only (?) bug reported by
+         Koichi Murase <myoga.murase@gmail.com>
 
-                                  11/15
-                                  -----
-doc/bash.1,lib/readline/doc/{history.3,hsuser.texi}
-       - quick substitution: make it clear that ^s1^s2^ is equivalent to
-         !!:s^s1^s2^, since that's the internal transformation we perform.
-         Reported by Jim Monte <jim.monte01@gmail.com>
-       - note that the `q' and `x' modifiers are mutually exclusive; last
-         one wins. Reported by Jim Monte <jim.monte01@gmail.com>
-       - note that the `G' modifier can work with `&' as well as `s'.
-         Reported by Jim Monte <jim.monte01@gmail.com>
-       - note that a word designator of `-' is equivalent to `0-'.
-         Reported by Jim Monte <jim.monte01@gmail.com>
-       - note that a missing `new' in a substitution modifier causes
-         instances of `old' to be deleted
+parser.h
+       - PST_NOERROR: don't print error messages in yyerror(), just reset
+         the parser and return
 
-lib/readline/histexpand.c
-       - history_expand_internal: make multiple :p modifiers work to suppress
-         execution. Reported by Jim Monte <jim.monte01@gmail.com>
-       - get_history_word_specifier: fix so a `^' word designator works as
-         the second part of a range.
-         Reported by Jim Monte <jim.monte01@gmail.com>
-       - hist_error: make sure we don't blindly copy a null character into
-         the error string (e.g., if there is a missing word designator
-         following `:'). Reported by Jim Monte <jim.monte01@gmail.com>
-       - get_history_event: if the history event specifier (!) is followed
-         immediately by a `-' and a non-digit (e.g. !-a), make sure the - is
-         treated as part of a search string instead of making it an offset of
-         0. Reported by Jim Monte <jim.monte01@gmail.com>
-
-                                  11/19
-                                  -----
-lib/readline/{colors,complete,histfile,input}.c,support/shobj-conf
-       - fixes to make readline compile on the latest HPE Nonstop (Tandem)
-         releases. From Randall S. Becker <rsbecker@nexbridge.com>
+parse.y
+       - yyerror: if parser_state & PST_NOERROR, don't print an error message
+       - xparse_dolparen: if the flags includes SX_COMPLETE, add PST_NOERROR
+         to parser_state, to inhibit error messages. Fixes bug with adding
+         lines with incomplete command substitutions to the history list
+         reported by Koichi Murase <myoga.murase@gmail.com>
 
 subst.c
-       - pat_subst: if we have a null match, make sure we advance by one
-         character, not one byte. Bug reported by Chris Carlen
-         <crobc@sbcglobal.net>
-
-                                  11/22
-                                  -----
-jobs.[ch],nojobs.c,builtins/jobs.def
-       - get_job_by_pid: now takes a PROCESS ** third argument; if non-null,
-         it gets a pointer to the PROCESS struct corresponding to the PID
-         argument. A convenience, not used by any caller yet
+       - skip_matched_pair: make sure to pass the SX_COMPLETE flag to
+         extract_delimited_string
 
-builtins/wait.def
-       - interrupt_immediately: remove any uses, no longer used anywheren
+                                  6/28
+                                  ----
 
-variables.c
-       - check_unbind_variable: return -2 if the variable name is readonly
-         (change) or non-unsettable (new) to differentiate the return value
-         from -1 from makunbound (which means variable not found)
+lib/readline/bind.c
+       - rl_trim_arg_from_keyseq: handle rl_vi_arg_digit if VI_MODE is
+         defined. Report and fix from Koichi Murase <myoga.murase@gmail.com>
+       - rl_trim_arg_from_keyseq: rework to handle case where the digit
+         argument is given as a discrete sequence of multiple rl_digit_argument
+         commands (e.g, "M-1 M-2" instead of "M-1 2"). Report and fix from
+         Koichi Murase <myoga.murase@gmail.com>
 
-builtins/common.[ch]
-       - builtin_unbind_variable: identical to check_unbind_variable but calls
-         builtin_error; for use by builtin commands
+subst.c
+       - pat_subst: avoid calling RESIZE_MALLOCED_BUFFER with STRLEN(s) as an
+         argument, since it ends up going into a loop. Report and fix from
+         Koichi Murase <myoga.murase@gmail.com>
 
-buitins/wait.def
-       - wait_builtin: now has -p VARNAME option, which takes the pid
-         returned by `wait -n' or wait without arguments and assigns it to
-         VARNAME, unsetting VARNAME first. Requested by Robert Elz
-         <kre@bmunnari.oz.au> after a similar feature in netbsd sh (not
-         completely compatible yet)
+lib/sh/casemod.c
+       - cval: take the string length as an argument, to avoid having to call
+         strlen every time (in HANDLE_MULTIBYTE mode). The caller already has
+         this info. Report and fix from Koichi Murase <myoga.murase@gmail.com>
 
-doc/{bash.1,bashref.texi}
-       - wait: document new -p option
+builtins/complete.def
+       - print_cmd_name: single-quote the command name if it contains any
+         shell metacharacters
+       - print_one_completion: call print_arg with a second arg of 1 if the
+         function name contains shell metacharacters. Report and fix from
+         Koichi Murase <myoga.murase@gmail.com>
 
-                                  11/25
-                                  -----
-lib/readline/display.c
-       - rl_redisplay: auto-set horizontal scrolling if the terminal has
-         only one line; disable it if we auto-set it if the terminal grows
-         to more than one line. Fix from Sören Tempel
-         <soeren@soeren-tempel.net>
+                                  6/30
+                                  ----
 
-lib/readline/doc/{readline.3,rluser.texi},doc/bash.1
-       - horizontal-scroll-mode: document auto-setting behavior
+configure.ac
+       - substitute BASE_CFLAGS_FOR_BUILD and STYLE_CFLAGS into Makefile
+         targets
+       - take STYLE_CFLAGS out of the CFLAGS_FOR_BUILD variable that gets
+         substituted
+       - remove STYLE_CFLAGS from CFLAGS
+       - use `:+' expansion to set variables based on whether $GCC is set
+         or null, since configure can do GCC=
 
-builtins/set.def
-       - set_posix_mode: make setting posix mode when it's already set, or
-         unsetting it when it's not set, a no-op. Inspired by a report
-         from Ulrich Mueller <ulm@gentoo.org>
+support/Makefile.in
+       - man2html: remove CCFLAGS_FOR_BUILD from the recipe, leaving only
+         LDFLAGS_FOR_BUILD. Report from Jay K <jayk123@hotmail.com>
+       - gen-helpfiles: remove CCFLAGS_FOR_BUILD from the recipe, leaving
+         only LDFLAGS_FOR_BUILD
+       - man2html: use $(STYLE_CFLAGS) in BASE_CCFLAGS variable for C file
+         compilation options
 
-                                  11/26
-                                  -----
-doc/{bash.1,bashref.texi}
-       - functions: clarify that when in default mode, function names are not
-         limited to shell identifiers.
-         Suggested by Reuti <reuti@staff.uni-marburg.de>
+{,builtins}/Makefile.in, lib/{sh,readline,malloc,glob}/Makefile.in
+       - use STYLE_CFLAGS so specifying CFLAGS=-g to make doesn't clutter the
+         output with warnings about parens and format strings
 
-                                  11/27
-                                  -----
-lib/readline/display.c
-       - _rl_optimize_redisplay: tell the redisplay routines to not worry
-         about calculating differences between the lines and just draw the
-         new one. Right now, it just sets the _rl_quick_redisplay flag
-       - rl_redisplay: if _rl_quick_redisplay is set, just draw NEW onto
-         the screen at column 0 with a dumb update and clear the rest of
-         the line. Intended to be used when the caller knows the new line is
-         sufficiently different from the old one (e.g., when drawing the
-         i-search prompt for the first time) that it doesn't pay off to do
-         the calculations. As a side effect, fixes the bug reported by
-         ÐлекÑей Ð¨Ð¸Ð»Ð¸Ð½ <rootlexx@mail.ru>
+                                   7/9
+                                   ---
+lib/readline/search.c
+       - make_history_line_current: call _rl_free_saved_history_line to clean
+         up _rl_saved_line_from_history and get all the code that frees it
+         into one place
 
-lib/readline/isearch.c
-       - rl_display_search: if there isn't a search string, assume this is
-         the first time this is called and call _rl_optimize_redisplay to
-         give the redisplay code a hint
+lib/readline/misc.c
+       - _rl_free_saved_history_line: if rl_undo_list points to the data
+         member of _rl_saved_line_from_history, set it to NULL to avoid having
+         it point to freed memory, since the next thing we do now is to free
+         the undo list the data member points to
+       - _rl_start_using_history: call _rl_free_saved_history_line instead of
+         calling _rl_free_history_entry directly. Fixes memory leak reported
+         by Trung Dam <trungdam@yahoo.com>
 
-                                  12/2
+                                  7/12
                                   ----
-builtins/wait.def
-       - wait_builtin: allow argument to -p to be a  valid array subscript
+lib/readline/search.c
+       - make_history_line_current: free rl_undo_list before replacing the
+         current line with the line from history, since it is a private
+         undo list from reading the search string
 
-                                  12/3
-                                  ----
-lib/readline/isearch.c
-       - _rl_isearch_fini: add call to _rl_optimize_redisplay because we are
-         switching the prompt back again and it's safer to redraw everything
-         (even though part of the line is the same) to deal with differences
-         in the prompt strings. Fixes additional problem reported by
-         ÐлекÑей Ð¨Ð¸Ð»Ð¸Ð½ <rootlexx@mail.ru>
+lib/readline/rlmbutil.h
+       - Since wchar_t/mbrtowc/wcrtomb are limited to 16 bits on Windows
+         with MSVC, start abstracting the differences using WCHAR_T/
+         MBRTOWC/WCRTOMB
 
-lib/readline/display.c
-       - update_line: quick redisplay no longer sets cpos_adjusted before
-         the dumb update
-       - update_line: adjust _rl_last_c_pos in the case of a dumb update if we
-         are redrawing the prompt that includes invisible characters, since
-         _rl_col_width does not. We adjust by the count of invisible chars in
-         the first line of the prompt
-       - update_line: make sure to clear the rest of the line if it looks like
-         the number of visible characters on the new line is less than the
-         number of visible characters on the current line; the old calculation
-         does that just for the number of bytes (which is also useful)
-
-                                  12/4
-                                  ----
-lib/readline/display.c
-       - rl_redisplay: if we are changing from one line to multiple lines,
-         don't try quick redisplay
-       - update_line: changes to quick redisplay to take advantage of knowing
-         the physical length of the prompt to avoid having to compute column
-         widths of the prompt string again; moved code to call clear screen
-         to the quick update section; no longer performs `goto dumb_update'
-       - update_line: try to take advantage of prompt_physical_chars when we
-         know we have written the prompt string (several places) to set
-         _rl_last_c_pos and calculate column widths
-       - update_line: if the spot where the old and new lines are the same is
-         before the end of the prompt string, adjust NLS and OLS so we write
-         the entire prompt string (as long as it's all on one line) and can
-         take advantage of already knowing prompt_physical_chars so we don't
-         have to compute column widths
-       - update_line: when copying chars from first diff to last match, adjust
-         _rl_last_c_pos by prompt_invis_chars_first_line, not wrap offset,
-         since we are on the first line, and only do this if we inserted more
-         bytes than wrap_offset (old code checked _rl_last_c_pos, which is
-         wrong in the presence of multibyte characters)
-
-                                  12/5
+                                  7/13
                                   ----
-lib/readline/display.c
-       - ADJUST_CPOS: define macro and use it in places where _rl_last_c_pos
-         is changed
 
-                                  12/12
-                                  -----
-lib/readline/isearch.c
-       - _rl_isearch_dispatch: check for multibyte characters mapped to one
-         of the editing functions we treat specially to modify the search
-         string
+lib/readline/{complete,display,input,text,util,vi_mode}.c
+       - use WCHAR_T/MBRTOWC/WCRTOMB. Part of a set of Windows MSVC fixes
+         from sparrowhawk996@gmail.com
 
-                                  12/13
-                                  -----
-support/shobj-conf
-       - FreeBSD and Dragonfly are ELF-only and can use the same code as
-         Linux, so add those to the linux stanza and remove the old FreeBSD
-         version-specific sections. Report and fix from Baptiste Daroussin
-         <bapt@FreeBSD.org>
+builtins/{enable,hash,help}.def
+       - enable_builtin: use sh_chkwrite after output to check for write errors
+
+                                  7/16
+                                  ----
+arrayfunc.c
+       - quote_compound_array_word: free SUB and VALUE after assigning from
+         sh_single_quote(). From a coverity report from
+         Siteshwar Vashisht <svashisht@redhat.com>
 
-bashline.[ch]
-       - bash_execute_unix_command: no longer static, available for other
-         parts of the shell to use
+bashhist.c
+       - bash_remove_history_range: free DISCARD_LIST after freeing its
+         elements
 
 bashline.c
-       - unbind_unix_command: take a key sequence as an argument, and unbind
-         it in the appropriate unix command keymap
+       - bash_directory_expansion: add code to free D as a separate branch,
+         though it's never hit in practice
 
-builtins/bind.def
-       - unbind_keyseq: if we are unbinding a key sequence bound to
-         bash_execute_unix_command, which means it was added by `bind -x',
-         call unbind_unix_command() to remove it from the appropriate unix
-         command keymap. Fixes issue originally raised by
-         Koichi Murase <myoga.murase@gmail.com> and recently by
-         Šimon Let <simon.a.let@gmail.com>
-       - bind_builtin: check the number of bindings to bash_execute_unix_command
-         before and after a call to rl_parse_and_bind and if there are fewer
-         after binding, we know that the bind has re-bound one of the key
-         sequences that was bound to execute a shell command. We unbind any
-         key sequences from the list before the call to rl_parse_and_bind that
-         don't appear in the list after the call using unbind_unix_command
-
-                                  12/19
-                                  -----
-include/posixstat.h
-       - added some definitions for MinGW. Report and patch from
-         Eli Zaretskii <eliz@gnu.org>
+builtins/trap.def
+       - showtrap: free T even if show_default == 1 if it's a non-default
+         trap string
 
-                                  12/20
-                                  -----
-lib/readline/display.c
-       - update_line: when wrapping lines containing multibyte characters at
-         the wrap point, and the number of screen positions consumed by the
-         first character on the new line isn't the same as the old line,
-         make sure we set OE before the `goto dumb_update;' since clearing
-         the rest of the line may use it. Tentative fix for bug reported by
-         Kirill Chibisov <wchibisovkirill@gmail.com>
+                                  7/17
+                                  ----
+execute_cmd.c
+       - execute_coproc: free NAME on invalid identifier error
 
-lib/readline/signals.c
-       - _rl_signal_handler: set RL_STATE_SIGHANDLER around SIGWINCH code,
-         like _rl_handle_signal does
+lib/glob/glob.c
+       - glob_vector: make sure NEXTLINK is allocated using malloc before
+         passing it to free()
+       - glob_filename: free RESULT before returning glob_error_return when
+         there is only a filename
 
-                                  12/26
-                                  -----
-lib/sh/stringvec.c
-       - strvec_posixcmp: new function that conforms to posix requirement for
-         sorting globs: perform a bytewise comparison if the two strings
-         collate equally. Posix interp 963 and 1070
-       - strvec_sort: take a new flags argument, if non-zero use the posix
-         string comparison function
+print_cmd.c
+       - indirection_level_string: make sure we free PS4 after calling
+         decode_prompt_string if *ps4 == 0
 
-pathexp.c
-       - shell_glob_filename: call strvec_sort with the flag value to be
-         posix conformant
+subst.c
+       - parameter_brace_transform: if vtype == VT_VARIABLE, we need to free
+         a non-null VAL
 
-lib/sh/stringlist.c
-       - strvec_sort: change callers
+variables.c
+       - assign_in_env: if NAME is not a valid shell identifier, free it
+         after printing the error message and before returning. These are
+         the rest of the fixes from Siteshwar Vashisht <svashisht@redhat.com>
 
-                                  12/29
-                                  -----
-sig.c
-       - throw_to_top_level: set running_trap to 0 after calling run_trap_cleanup.
-         This avoids spurious (in non-release versions) warnings from
-         run_pending_traps the next time a trap handler for that signal
-         runs. Bug report from Martijn Dekker <martijn@inlv.org>
+                                  7/22
+                                  ----
+shell.c
+       - main: set dollar_vars[0] to shell_script_filename before calling
+         run_startup_files() in the non-interactive case. Restore it after
+         run_startup_files returns so we can get better error messages if
+         we can't open a script file. Suggested by several people, originally
+         by Marc Aurèle La France <tsi@tuyoix.net> back in 2/2021 (in a
+         different form) and most recently by Tapani Tarvainen
+         <bash@tapanitarvainen.fi>
 
-                                1/14/2020
-                                ---------
-bashline.c
-       - find_cmd_start: don't treat the open brace in brace expansion as a
-         command start character; only treat open brace specially if it can
-         be a reserved word. Fixes bug reported back in October, 2019 in
-         https://savannah.gnu.org/support/index.php?110063
+                                  7/28
+                                  ----
+trap.c
+       - any_signals_trapped: return that a signal is trapped only if it's
+         not ignored. This is an additional opportunity for optimization,
+         reported in https://bugzilla.redhat.com/show_bug.cgi?id=1981926
 
-                                  1/15
+                                  7/30
                                   ----
-lib/readline/readline.c
-       - _rl_dispatch_subseq,_rl_subseq_result: if we push back a character
-         with _rl_unget_char or otherwise go back up the chain without a
-         sequence match, make sure we back up in rl_executing_keyseq.
-         Report and fix from Koichi Murase <myoga.murase@gmail.com>
+examples/loadables/sleep.c
+       - main: if the uconvert conversion fails, but the argument appears to
+         contain a GNU-like interval specifier like "1m30s", return
+         EX_DISKFALLBACK so the execute_builtin code tries to run the
+         external version
 
-builtins/bind.def
-       - unbind_keyseq: if we unbind something that ends up pointing to a
-         shadow keymap, restore the ANYOTHERKEY binding that we used when
-         binding it.
-         Report and fix from Koichi Murase <myoga.murase@gmail.com>
+builtins/enable.def
+       - enable_shell_builtin: if the builtin isn't found, return EX_NOTFOUND
+         to allow the caller (enable_builtin) to react differently if it
+         wants to
+       - dyn_load_builtin: if the shared object isn't found, return EX_NOTFOUND,
+         change enable_builtin to deal with it
+       - enable_builtin: if there are no supplied options, and we attempt to
+         enable a non-existent builtin, try modifying `enable name' to the
+         equivalent of `enable -f name name' and return success if we
+         successfully load a builtin from a shared object. Proposed several
+         times, most recently by Robert Elz <kre@munnari.OZ.AU>
 
-bashline.c
-       - bash_execute_unix_command: if we walked cmd_xmap for rl_executing_keyseq
-         and ended up pointing to a keymap (type == ISKMAP) we want the
-         binding for ANYOTHERKEY instead.
-         Report and fix from Koichi Murase <myoga.murase@gmail.com>
+doc/{bash.1,bashref.texi}
+       - enable: document new behavior of `enable NAME' when NAME is not a
+         current shell builtin
 
-lib/readline/bind.c
-       - rl_bind_key: if we're trying to bind a key sequence containing '\0'
-         using the old-style binding syntax (C-SPC), make sure we quote the
-         NULL so it will make it through rl_translate_keyseq().
-         Report and fix from Koichi Murase <myoga.murase@gmail.com>
-       - rl_bind_key: if we're overwriting a binding for a macro, make sure to
-         free the old macro value.
-         Report and fix from Koichi Murase <myoga.murase@gmail.com>
-       - rl_generic_bind: if we're overwriting a macro saved to ANYOTHERKEY in
-         a shadow keymap created by rl_generic_bind, make sure to free the
-         macro data.
-         Report and fix from Koichi Murase <myoga.murase@gmail.com>
+                                   8/3
+                                   ---
+lib/glob/sm_loop.c
+       - GMATCH: check for interrupts or terminating signals each time through
+         the loop and return FNM_NOMATCH immediately if received. Let the
+         higher layers deal with interrupting the match and jumping out.
+         Inspired by a report from andrej@podzimek.org
 
-trap.c
-       - run_pending_traps: save and restore the value of running_trap around
-         cycle through pending signals so recursive trap handler calls don't
-         set running_trap to 0
-       - _run_trap_internal: allow some signals the shell treats specially
-         (e.g., SIGINT) to run recursive handlers
-       - _run_trap_internal: don't turn off SIG_INPROGRESS flag if it was on
-         for this signal when _run_trap_internal was called
-       - _run_trap_internal: save and restore the value of running_trap around
-         running the trap handler, except for SIGCHLD. Fixes bug reported by
-         Martijn Dekker <martijn@inlv.org>
+                                   8/6
+                                   ---
+subst.c
+       - {parameter_brace_remove_pattern,parameter_brace_transform,
+          parameter_brace_substring,parameter_brace_casemod,
+          parameter_brace_patsub}: make sure the IND argument is of type
+          arrayind_t to handle the full range of subscripts. Reported by
+          felix@f-hauri.ch
 
-                                  1/16
-                                  ----
-general.c
-       - posix_initialize: if turning posix mode off, restore settings from
-         any saved set, if one exists, instead of setting a default environment
+builtins/printf.def
+       - printf_builtin: take new format specifier: %Q. This acts like %q
+         but applies any supplied precision to the original unquoted
+         argument, then quotes that result and outputs the entire quoted
+         string, preserving the original field width. Originally suggested
+         back in 4/2020 by Sam Liddicott <sam@liddicott.com>
 
-                                  1/17
-                                  ----
+subst.c
+       - char_is_quoted: check whether or not we are on the second or later
+         line of a command with an unclosed quoted string from a previous
+         line. If we are, see if it's closed before the character we're
+         checking, so we don't interpret a closing quote as starting a new
+         quoted string. Reported several times, most recently by
+         Phi Debian <phi.debian@gmail.com> in 6/2021.
+
+                                   8/9
+                                   ---
 parse.y,subst.c
-       - process_substitution: now available in POSIX mode. Most recently
-         requested by Martijn Dekker <martijn@inlv.org>; requested several
-         times in the past
+       - locale_expand: if the variable SINGLEQUOTE_TRANSLATIONS is non-zero,
+         single-quote the translated result of $"..." (if it's different from
+         the untranslated string)
 
-doc/bashref.texi
-       - posix mode: remove restriction that posix mode is not available
+builtins/shopt.def
+       - noexpand_translation: new option to expose the value of
+         SINGLEQUOTE_TRANSLATIONS
 
-lib/readline/vi_mode.c
-       - rl_domove_motion_callback: make sure to extend rl_line_buffer so it
-         can hold the dummy blank character we're appending. From a fuzzing
-         report by Tillmann Osswald <tosswald@ernw.de>
-       - vi_yank_dispatch: after we do an undo, make sure to fix point to be
-         less than the (new) rl_end
+                                  8/10
+                                  ----
+doc/{bash.1,bashref.texi}
+       - noexpand_translation: add description of new option
 
-lib/readline/text.c
-       - rl_forward_word: make sure that MB_NEXTCHAR doesn't go past rl_end on
-         invalid multibyte sequences
+                                  8/16
+                                  ----
+builtins/printf.def
+       - printf_builtin: initialize retval after parsing arguments, since we
+         use it for the `v' option. Bug report from Keith Thompson
+         <Keith.S.Thompson@gmail.com>
 
-                                  1/18
+lib/sh/unicode.c
+       - u32tocesc: fix typo that returned \uXXXXXXXX instead of \UXXXXXXXX.
+         From https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=992257 by
+         <nabijaczleweli@nabijaczleweli.xyz>
+
+                                  8/17
                                   ----
-test.c
-       - for the `-v' operator, use a clever trick from Martijn Dekker and
-         just test whether N is between 0 and $#.
+siglist.c
+       - include command.h before general.h for PARAMS and prototypes. Report
+         from Osipov, Michael (LDA IT PLM) <michael.osipov@siemens.com>
 
-                                  1/21
+                                  8/18
                                   ----
-lib/readline/text.c
-       - rl_change_case: fix argument to rl_extend_line_buffer; make sure to
-         reset s and e after call in case rl_line_buffer was reallocated
+lib/readline/colors.c
+       - S_ISBLK: make sure it's defined before we use it, like in complete.c
 
-lib/readline/vi_mode.c
-       - _rl_vi_save_replace: if start ends up being less than zero, make
-         sure we don't read before the start of rl_line_buffer
-       - rl_vi_overstrike_kill_line,rl_vi_overstrike_kill_word: replacement
-         functions for ^U and ^W in vi overstrike mode, to keep right value
-         for vi_replace_count.
-       - rl_vi_overstrike_yank: similar for ^Y and rl_yank
+lib/readline/complete.c,{bashline,variables}.c
+       - minor changes to prep for making rl_completer_word_break_characters
+         `const'
 
-                                  1/22
-                                  ----
-lib/readline/display.c
-       - update_line: if we're trying to wrap lines on an autowrap terminal,
-         punt and do a dumb update if the number of bytes in the first char
-         on the new line is greater than the number of bytes in the first char
-         of the old line. There's no guarantee we'll be able to extend the
-         old line buffer enough to accommodate the new bytes
-       - update_line: try to avoid some operations when wrapping lines if the
-         number of bytes in the first characters of the old and new lines is
-         the same
-       - update_line: when updating vis_lbreaks after fixing up the lines when
-         wrapping, make sure we don't exceed an index of _rl_vis_botlin when
-         updating the line break offsets
+subst.[ch],pcomplete.c
+       - split_at_delims: the DELIMS argument is now `const'; change callers
 
-lib/readline/text.c
-       - rl_delete_text: if deleting text leaves the mark past rl_end, adjust
-         it to rl_end
+lib/readline/rlmbutil.h
+       - _rl_wcwidth: add function prototype for inline function declaration
 
-lib/readline/vi_mode.c
-       - _rl_vi_goto_mark: make sure to call _rl_fix_point after setting
-         rl_point to rl_mark
+lib/readline/bind.c
+       - _rl_get_keyname: print keys greater than 160 (which are valid UTF-8)
+         as octal escape sequences
 
-                                  1/23
+lib/readline/text.c
+       - do_lowercase_version: return 99999 to prevent the linker from
+         combining it with _rl_null_function and optimizing away the separate
+         copy. That messes with function pointer comparisons. Part of this
+         batch of fixes from sparrowhawk996@gmail.com
+
+                                  8/19
                                   ----
-lib/readline/kill.c
-       - rl_kill_region,region_kill_internal: call _rl_fix_point
+complete.c,readline.c,readline.h
+       - rl_completer_word_break_characters: now const char * like
+         rl_basic_word_break_characters; element of readline state struct
+         used to save it also const. THIS IS AN API CHANGE
 
-lib/readline/text.c,lib/readline/rlprivate.h
-       - _rl_fix_mark: new function to clamp rl_mark between 0 and rl_end
+bashline.c
+       - orig_rl_completer_word_break_characters: now const char * like
+         rl_completer_word_break_characters
 
-                                  1/24
-                                  ----
-lib/readline/bind.c
-       - rl_translate_keyseq: rework how key sequences are translated with
-         the intent of normalizing backslash treatment. Since the current
-         behavior of, e.g., \C-\\, is inconsistent, this change chooses to
-         effectively treat and display \\ as \\ instead of \C-\. This is not
-         completely backwards compatible, but it seems like the most reasonable
-         choice. This allows things like \M-\a but is not compatible with
-         pre-bash-4.4 (readline 7.0) handling of \C-\, which is now treated
-         like \C-\0. If that proves to be a problem, we can add code to
-         understand \C-\ as equivalent to \C-\\. Since attempting to bind
-         "\C-\" has generated an error for a long time, it doesn't seem like
-         it will be too much of a problem.
-         Fixes from Koichi Murase <myoga.murase@gmail.com>
-       - rl_invoking_keyseqs_in_map: make sure to consistently output
-         backslash as `\\' instead of producing `\C-\'
-         Fixes from Koichi Murase <myoga.murase@gmail.com>
-
-                                  1/29
+                                  8/20
                                   ----
 bashline.c
-       - readline_get_char_offset: translate a readline buffer offset
-         (rl_point, rl_mark, rl_end) into a number of (possibly multibyte)
-         characters
-       - readline_set_char_offset: translate a number of (possibly multibyte)
-         characters into a buffer offset in rl_line_buffer. Uses a private
-         readline function to do it, which is bad
-       - bash_execute_unix_command: use readline_{get,set}_char_offset to
-         translate the rl_point to a character offset
-       - bash_execute_unix_command: bind READLINE_MARK variable, exposing
-         the value of rl_mark to `bind -x' functions
+       - bash_directory_completion_hook: if direxpand and dirspell are both
+         set while trying to complete an absolute pathname as a command, don't
+         take a spell-corrected directory name that is shorter than the
+         original hint. https://bugzilla.redhat.com/show_bug.cgi?id=1782809
+
+builtins/common.[ch]
+       - sh_noassign: convenience function to print an error message when a
+         user attempts an assignment to a "noassign" variable. Not used yet
+
+assoc.[ch]
+       - assoc_to_kvpair_list: new function, returns a WORD_LIST containing
+         key-value pairs as separate words
+
+array.[ch]
+       - array_to_kvpair_list: new function, returns a WORD_LIST containing
+         index-value pairs as separate words
+
+subst.c
+       - string_transform: handle '@k' transform like '@K'
+       - valid_parameter_transform: 'k' is a valid transform operator
+       - array_transform: handle '@k' transformation by calling one of
+         array_to_kvpair_list or assoc_to_kvpair_list and treating the
+         result as if expanding the array depending on whether the index is
+         `@' or `*' with the usual meanings
 
 doc/{bash.1,bashref.texi}
-       - READLINE_MARK: document new variable set by the shell
+       - document new '@k' parameter transformation operator
 
-                                  1/31
+                                  8/27
                                   ----
-examples/loadables/accept.c
-       - accept: new loadable builtin that will accept a TCP connection on a
-         specified port. Inspired by Stan Marsh <gazelle@xmission.com>
-
-                                   2/1
-                                   ---
-lib/readline/histfile.c
-       - history_do_write,history_truncate_file: translate the return value rv
-         to errno when histfile_restore returns -1 (e.g., if rename() fails).
-         Report and fix from A <auroralanes@protonmail.ch>
+lib/readline/kill.c
+       - rl_unix_filename_rubout: handle pathnames that consist only of one
+         or more slashes. The old code went too far and deleted the previous
+         word as well. From dabe@dabe.com
 
-                                   2/3
-                                   ---
-lib/sh/ufuncs.c
-       - fsleep: if pselect/select is interrupted by a signal, return -1 and
-         let the caller deal with it
+                                  8/31
+                                  ----
+parse.y
+       - STRING_SAVER: now save and restore shell_input_line_len; not sure
+         why it wasn't done before; fix push_string and pop_string accordingly
+       - prompt_again: now takes a parameter FORCE; not used yet (every
+         caller passes 0), needs more thought
 
-lib/sh/timeval.c
-       - multimeval: new function, multiply a timeval by a constant integer
-       - divtimeval: new function, divide a timeval by a constant integer
+builtins/evalstring.h
+       - open_redir_file: broke code that expands the redirection and opens
+         the resultant filename into a new function, called from cat_file
 
-lib/sh/uconvert.c
-       - uconvert: new additional argument: EP. If non-null, it gets the
-         address of the first non-digit that ends conversion (like strtod);
-         we try to do as much of the conversion as possible if EP is set so
-         the caller can clean up
+redir.h
+       - open_redir_file: extern declaration here for now
 
-                                   2/4
-                                   ---
-examples/loadables/mkfifo.c
-       - mkfifo: new loadable builtin
+builtins/evalstring.c
+       - parse_string: takes a new argument: COMMAND **cmdp; if non-null, saves
+         the parsed command to *cmdp and lets the caller manage it itself.
+         global_command is still not modified. Changed callers in parse.y
 
-                                   2/6
+                                   9/1
                                    ---
-variables.c
-       - make_local_variable: make sure local variables that have the same
-         names as variables found in the temporary environment are marked as
-         local. From Grisha Levit <grishalevit@gmail.com> back in 12/2018
+parse.y
+       - parse_string_to_command: stripped-down version of xparse_dolparen
+         that takes a string, runs it through the parser, and returns the
+         resultant COMMAND *; uses parse_string with the new argument
 
-                                   2/7
-                                   ---
-sig.[ch]
-       - restore_sigmask: function to restore top-level signal mask using
-         sigprocmask
+externs.h
+       - parse_string_to_command: extern declaration
 
-{sig,eval,jobs,nojobs}.c
-       - replace calls to sigprocmask with restore_sigmask(); remove extern
-         declarations of top_level_mask
+builtins/evalstring.c
+       - can_optimize_cat_file: new function, takes a COMMAND * argument and
+         returns true if the command can be optimized like $(<file); changed
+         parse_and_execute to call it
 
-sig.c
-       - initialize_shell_signals: if SIGCHLD is blocked at shell startup,
-         not only remove it from top_level_mask but make sure it's unblocked
+subst.c
+       - optimize_cat_file: new function, optimizes $(<file) without creating
+         a new process. Uses redir_open to open the redirection file, after
+         expansion, and calls read_comsub to read from it directly
+       - read_comsub: now reads into a 4096 byte buffer (COMSUB_PIPEBUF)
+       - command_substitute: if the string begins with a `<' and isn't followed
+         by any of "<>&", see if we can optimize the command and call
+         optimize_cat_file to do it if we can. 
 
-execute_cmd.c
-       - execute_pipeline: if lastpipe is enabled and we're executing the
-         rightmost pipeline element in the current shell, make sure to unblock
-         SIGCHLD before calling execute_command, in case `return' or `exec'
-         is run and that call doesn't return. From a report by
-         Harald van Dijk <harald@gigawatt.nl> following up to a report
-         by Martijn Dekker <martijn@inlv.org>
+                                   9/2
+                                   ---
+configure.ac,config.h.in,lib/sh/setlinebuf.c
+       - SETVBUF_REVERSED: remove all references
 
-                                  2/10
-                                  ----
-builtins/trap.def
-       - trap_builtin: in posix mode, when trap is run with -p, show
-         the disposition of all signals, even those that are still in the
-         default state, including signals that were ignored when the shell
-         starts up and haven't been reset. Don't do it in default mode.
-         From an austin-group discussion back in April, 2019 (interp 1211)
+configure.ac,aclocal.m4
+       - AC_OUTPUT: move created files and commands to AC_CONFIG_FILES and
+         AC_CONFIG_COMMANDS; call AC_OUTPUT without any arguments
+       - require autoconf version 2.63
+       - AC_HELP_STRING -> AS_HELP_STRING
+       - replace references to $ac_cv_prog_gcc with $GCC
+       - AC_C_LONG_DOUBLE -> AC_TYPE_LONG_DOUBLE
+       - enable-alt-array-implementation: new configure option, placeholder
+         for later
 
-findcmd.c
-       - search_for_command: don't add commands without the execute bit set
-         to the command hash table. From https://savannah.gnu.org/patch/?9789
-         contributed by michaeljs1990
+unwind_prot.c
+       - stddef.h: include if HAVE_STDDEF_H is defined, not STDC_HEADERS
 
-                                  2/11
-                                  ----
-expr.c
-       - strlong: require `base#' to be followed by an integer constant;
-         otherwise throw an error. From a report from Jeremy Townshend
-         <jeremy.townshend@gmail.com> back in June, 2019
+bashansi.h
+       - memory.h: don't include any more; assume <string.h> has all the
+         necessary defines
 
-test.c
-       - unary_test: allow -v N to test whether or not positional parameter
-         N is set. Most recently suggested by Peng Yu <pengyu.ut@gmail.com>
-         and Martijn Dekker <martijn@inlv.org>
+aclocal.m4
+       - AC_HEADER_STDC: remove AC_REQUIRE calls to this; change tests to use
+         appropriate checks instead of STDC_HEADERS
 
-builtins/getopts.def
-       - dogetopts: use number_of_args() to compute the number of positional
-         parameters
+                                   9/3
+                                   ---
+configure.ac,config.h.in
+       - AC_TYPE_SIGNAL,BASH_TYPE_SIGHANDLER: remove calls, remove mention of
+         RETSIGTYPE and VOID_SIGHANDLER
+       - AC_USE_SYSTEM_EXTENSIONS: use this instead of AC_ISC_POSIX (which is
+         well and truly obsolete) and AC_MINIX (which just calls it anyway).
+         All the right defines are already present
+       - AC_HEADER_TIME: removed
+       - AC_HEADER_STDC: removed
+       - AC_DECL_SYS_SIGLIST: replaced with BASH_DECL_SYS_SIGLIST
+       - BASH_FUNC_CTYPE_NONASCII: removed
+
+sig.h,lib/readline/signals.c
+       - RETSIGTYPE -> void, SIGHANDLER_RETURN -> return
+
+include/posixtime.h
+       - don't bother with TIME_WITH_SYS_TIME, just include <sys/times.h> if
+         we have it and include <time.h> unconditionally
+
+include/chartypes.h,lib/readline/chardefs.h
+       - IN_CTYPE_DOMAIN: no longer uses STDC_HEADERS define, checks against
+         CHAR_MAX for non-C89 systems, still a no-op on C89 systems
+
+lib/readline/chardefs.h
+       - memory.h: don't include, no need for STDC_HEADERS; assume the mem*
+         functions are defined in <string.h> as in C89
+       - now that we assume IN_CTYPE_DOMAIN bounds its argument to unsigned
+         chars, we don't need NON_NEGATIVE checks at all
+
+lib/readline/chardefs.h,util.c
+       - ALPHABETIC -> _rl_alphabetic_p
 
-{findcmd,variables,subst,trap,sig}.h,builtins/common.h
-       - __P --> PARAMS
+                                   9/8
+                                   ---
 
-builtins/shift.def,builtins/common.c
-       - shift_builtin: moved code that modifies dollar_vars and rest_of_args
-         to common.c:shift_args(int times), part of move to localize changes
-         to positional parameters
+lib/sh/strftime.c
+       - include <posixtime.h> after reworking above; include <sys/types.h>
+         unconditionally in case it defines time_t. From a report by
+         Ori Sky Farrell <bash@ori.mx>
 
-builtins/common.c,variables.c
-       - posparam_count: keep a running count of the number of posititional
-         parameters when dollar_vars and rest_of_args are set
+                                   9/9
+                                   ---
+lib/readline/search.c
+       - rl_history_search_internal: set rl_undo_list to NULL after calling
+         rl_maybe_save_line, since it will be restored one way or another
+         after the search completes, and we don't want it to be freed twice
+       - rl_history_search_internal: leave the current history offset at the
+         position of the last matching history entry. This means that things
+         like ^P will start back from that history entry, ^N will move
+         forward from there, and operate-and-get-next will work like it does
+         with incremental searches. Reported by Vandrus Zoltán
+         <vandrus.zoltan@gmail.com>
 
-                                  2/12
+                                  9/10
                                   ----
-subst.c
-       - number_of_args: just return posparam_count
+aclocal.m4
+       - BASH_C_LONG_LONG: removed
+       - BASH_TYPE_LONG_DOUBLE: removed
+       - BASH_TYPE_LONG_LONG,BASH_TYPE_UNSIGNED_LONG_LONG: removed
+       - BASH_FUNC_CTYPE_NONASCII: removed
+       - BASH_SYS_SIGNAL_VINTAGE,BASH_SYS_REINSTALL_SIGHANDLERS: don't
+         require AC_TYPE_SIGNAL, use void instead of RETSIGTYPE
+       - BASH_TYPE_SIGHANDLER: removed
+
+configure.ac,aclocal.m4,config.h.in
+       - BASH_TYPE_LONG_LONG: removed, call AC_TYPE_LONG_LONG_INT directly,
+         change #define to HAVE_LONG_LONG_INT
+       - BASH_TYPE_UNSIGNED_LONG_LONG: removed, call AC_TYPE_UNSIGNED_LONG_LONG_INT
+         directly, change #define to HAVE_UNSIGNED_LONG_LONG_INT
+
+externs.h,include/typemax.h,lib/sh/{fmtullong,snprintf,strtoimax,strtoll,
+strtoull,strtoumax}.c
+       - HAVE_LONG_LONG -> HAVE_LONG_LONG_INT
+       - HAVE_UNSIGNED_LONG_LONG -> HAVE_UNSIGNED_LONG_LONG_INT
 
-builtins/shift.def
-       - shift_builtin: if asked to clear the positional parameters with
-         something like `shift $#', just call clear_dollar_vars instead of
-         iterating through them, unsetting them one by one
+configure.ac
+       - AC_TRY_COMPILE -> AC_COMPILE_IFELSE
+       - BASH_CHECK_TYPE (intmax_t) -> AC_TYPE_INTMAX_T
+       - BASH_CHECK_TYPE (uintmax_t) -> AC_TYPE_UINTMAX_T
+       - BASH_CHECK_TYPE (sig_atomic_t): removed
 
-subst.[ch],builtins/common.[ch]
-       - number_of_args: moved to builtins/common.c
+aclocal.m4
+       - BASH_FUNC_STRSIGNAL: changed to use AC_LINK_IFELSE
+       - BASH_FUNC_LSTAT: changed to use AC_LINK_IFELSE
+       - BASH_FUNC_SBRK: changed to use AC_LINK_IFELSE and AC_RUN_IFELSE,
+         fixed typo
+       - BASH_CHECK_SPEED_T: changed to use AC_COMPILE_IFELSE
+       - BASH_TYPE_SIG_ATOMIC_T: use BASH_CHECK_TYPE instead of AC_CHECK_TYPE
+       - BASH_STRUCT_DIRENT: new macro, like _AC_STRUCT_DIRENT but public and
+         sets a different bash-specific shell variable
+       - BASH_STRUCT_DIRENT_D_{INO,FILENO,NAMLEN}: call BASH_STRUCT_DIRENT
+         with a different first argument instead of using inline code and
+         AC_TRY_COMPILE
 
-                                  2/14
+                                  9/11
                                   ----
-subst.c
-       - clear_fifo_list: when using named pipes, clear out the FIFO list
-         without unlinking anything and set NFIFO to 0
+[prayers for the victims of 9/11/2001]
 
-execute_cmd.c
-       - execute_disk_command: in the child, clear out the FIFO list, since
-         we haven't created any FIFOs yet
-       - execute_in_subshell: clear out the FIFO list, since we haven't
-         created any FIFOs yet
+aclocal.m4
+       - BASH_CHECK_DECL: just call AC_CHECK_DECLS and use the default
+         includes, which includes the files we used to specify
+       - BASH_FUNC_INET_ATON: changed to use AC_LINK_IFELSE
+       - BASH_STRUCT_WEXITSTATUS_OFFSET: changed to use AC_RUN_IFELSE
+       - BASH_FUNC_OPENDIR_CHECK: changed to use AC_RUN_IFELSE
+       - BASH_FUNC_ULIMIT_MAXFDS: changed to use AC_RUN_IFELSE
+       - BASH_UNDER_SYS_SIGLIST: changed to use AC_RUN_IFELSE
+       - BASH_SYS_SIGLIST: changed to use AC_RUN_IFELSE
+       - BASH_FUNC_DUP2_CLOEXEC_CHECK: changed to use AC_RUN_IFELSE
+       - BASH_FUNC_GETENV: changed to use AC_RUN_IFELSE
+       - BASH_FUNC_GETCWD: changed to use AC_RUN_IFELSE
+       - BASH_FUNC_FNMATCH_EXTMATCH: changed to use AC_RUN_IFELSE
+       - BASH_FUNC_POSIX_SETJMP: changed to use AC_RUN_IFELSE
+       - BASH_FUNC_STRCOLL: changed to use AC_RUN_IFELSE
+       - BASH_FUNC_PRINTF_A_FORMAT: changed to use AC_RUN_IFELSE
+       - BASH_SYS_PGRP_SYNC: changed to use AC_RUN_IFELSE
+       - BASH_SYS_SIGNAL_VINTAGE: changed to use AC_RUN_IFELSE
+       - BASH_SYS_NAMED_PIPES: changed to use AC_RUN_IFELSE
+       - BASH_CHECK_RTSIGS: changed to use AC_RUN_IFELSE
+       - BASH_CHECK_MULTIBYTE: changed to use AC_RUN_IFELSE
+       - RL_LIB_READLINE_VERSION: changed to use AC_RUN_IFELSE
+       - BASH_CHECK_WCONTINUED: changed to use AC_RUN_IFELSE
+       - BASH_FUNC_SNPRINTF: changed to use AC_RUN_IFELSE
+       - BASH_FUNC_VSNPRINTF: changed to use AC_RUN_IFELSE
+       - BASH_FUNC_FNMATCH_EQUIV_FALLBACK: changed to use AC_RUN_IFELSE
+       - BASH_DECL_PRINTF: changed to use AC_RUN_IFELSE
+       - BASH_TYPE_RLIMIT: rewrote to avoid quad_t, now uses AC_COMPILE_IFELSE
+         to determine whether rlim_t is available, otherwise determines the
+         value of RLIMTYPE based on sizeof(rlim.rlim_cur): int, long, or
+         long long
+       - BASH_SIZEOF_RLIMIT,BASH_SIZEOF_QUAD_T: helper macros for
+         BASH_TYPE_RLIMIT in the case that rlim_t is not present
 
-parse.y
-       - special_case_tokens: allow `time -- command'
+configure.ac
+       - BASH_CHECK_DECL -> AC_CHECK_DECLS
+       - quad_t: use AC_CHECK_TYPE (new style) instead of BASH_CHECK_TYPE
 
-                                  2/21
-                                  ----
-subst.c
-       - get_var_and_type: if an unset variable (not an array) is supplied
-         with the `[@]' subscript, don't return "". Fix to bug reported by
-         Arfrever Frehtes Taifersar Arahesis <arfrever.fta@gmail.com>;
-         original bug introduced 7/29/2018
-       - array_transform: take a STARSUB argument instead of VARNAME, since
-         we've already computed what kind of index the array reference uses
-         in get_var_and_type, and passing VARNAME to figure out the index
-         type doesn't do the right thing when we're using indirect variable
-         expansion. Fixes bug reported by 
-         Arfrever Frehtes Taifersar Arahesis <arfrever.fta@gmail.com>
-       - array_remove_pattern: take the same new STARSUB argument for the
-         same reason
-       - parameter_brace_transform,parameter_brace_remove_pattern: change
-         callers to pass STARSUB instead of VARNAME
-
-                                  2/22
+                                  
+                                  9/14
                                   ----
 execute_cmd.c
-       - fix_assignment_words: if an assignment is supplied to a builtin that
-         creates or modifies local variables while a function is executing,
-         set the W_FORCELOCAL flag for that word in addition to any of the
-         various assignment flags
+       - time_command: if we longjmp back to the top_level we saved, make sure
+         we're in the same subshell environment before printing the timing
+         stats. We could have longjmped back from a child process of the
+         command or pipeline we want to time. From a report by
+         Sergej Alikov <sergej@alikov.com>
+       - time_command: restore command->flags even if we longjmp back
 
-subst.c
-       - shell_expand_word_list: while processing a list of assignments that
-         are arguments to a builtin that creates or modifies local variables,
-         if make_internal_declare fails while attempting to create the local
-         variable (or give it attributes), skip attempting the assignment but
-         otherwise do not make this a fatal error. This results in two error
-         messages: one to create the variable or modify its attributes, and
-         one while attempting to assign the value, but the errors to not
-         cause the function to return immediately. Fixes inconsistency
-         reported by Arfrever Frehtes Taifersar Arahesis <arfrever.fta@gmail.com>
-         
+general.c
+       - check_binary_file: if the first line of the ENOEXEC file starts with
+         a `#!', check the rest of the buffer for NULs to determine whether
+         this is a binary file. Since we only check the first line, a #! line
+         followed by binary data could be confused for a shell script
 
-                                  2/23
+                                  9/16
                                   ----
-trap.c
-       - first_pending_trap: generalize into first_pending_trap and
-         next_pending_trap
-
-wait.def
-       - wait_builtin: close up the trapped-signal-arrives hole a little more
-         by looking for a signal that arrived between the last check for
-         pending traps and setting wait_intr_flag and behaving as if it
-         arrived while wait was executing. Use first_pending_trap and
-         next_pending_trap to find a pending trap that is not SIGCHLD
-
-trap.c
-       - trap_handler: longjmp to wait_intr_buf unconditionally if
-         wait_intr_flag is set; don't bother with interrupt_immediately any
-         more
-
-variables.c
-       - all_local_variables: now takes an arg saying whether to restrict
-         return value to visible variables or return all local variables,
-         even those that are unset (the new default)
-       - visible_variable_in_context: new function, restricts return values
-         to set local variables in the current context; variable_in_context
-         now returns all local variables in the current context, even the
-         unset ones
-
-variables.h
-       - all_local_variables: change extern function declaration
-
-builtins/setattr.def
-       - show_local_var_attributes: show all local variables at the current
-         variable context, including unset ones, and their attributes
-       - show_localname_attributes: show attributes for NAME as long as NAME
-         resolves to a local variable at the current variable context, even
-         if NAME is unset
+bashjmp.h
+       - EXITBLTIN: new longjmp `code' value: used by the exit builtin
 
-builtins/common.h
-       - show_local_var_attributes, show_localname_attributes: new extern
-         declarations
+{execute_cmd,shell,subst,trap}.c,builtins/evalstring.c
+       - treat EXITBLTIN exactly the same as EXITPROG (for now)
 
-builtins/declare.def
-       - declare_internal: allow `-p' option for `local' builtin
-       - declare_internal: if `local' is supplied without options, or with
-         the `-p' option, but no variable name arguments, display all local
-         variables at the current variable context by calling
-         show_local_var_attributes
-       - declare_internal: if `local -p' is supplied with variable name
-         arguments, call show_localname_attributes to display the attributes
-         for that name if it resolves to a local variable at the current
-         variable context. Fixes issue reported by
-         pepa65 <solusos@passchier.net>
+builtins/exit.def
+       - exit_builtin: jump_to_top_level with value EXITBLTIN
 
-subst.c
-       - array_var_assignment: if VAR is unset, print the declare command
-         without the assignment statement, just with the attributes
-       - array_transform: special-case the 'a' attribute and return the
-         attribute string even if the array variable is unset.  Feature request
-         from Arfrever Frehtes Taifersar Arahesis <arfrever.fta@gmail.com>
-       - parameter_brace_transform: if asked to display the attributes and
-         value ('A') of an unset variable, make sure we pass the variable, if
-         it exists with attributes but without a value, to string_transform
-       - string_transform: if we don't have a value but the operator is 'A',
-         pass the variable through to string_var_assignment
-       - string_var_assignment: if we have an unset variable with attributes,
-         return a declare command that just sets the attributes. Feature request
-         from Arfrever Frehtes Taifersar Arahesis <arfrever.fta@gmail.com>
+builtins/evalstring.c
+       - parse_and_execute: EXITBLTIN has its own case, with the same contents
+         as EXITPROG
 
-                                  2/24
+                                  9/17
                                   ----
-locale.c
-       - mblen: don't try to use unless HANDLE_MULITBYTE is defined. From
-         https://savannah.gnu.org/support/?110200
-       - set_default_locale: if HAVE_SETLOCALE isn't defined, set the default
-         locale to "C"
+builtins/evalstring.c
+       - parse_and_execute: change EXITBLTIN case to avoid running the
+         unwind-protect stack to the `pe_dispose' tag (which has the effect
+         of running all the unwind-protects installed by the commands in
+         the string) if we're executing in a function and EXIT is trapped.
+         This has the effect of running the EXIT trap in the function context,
+         which is what we do when we're not in parse_and_execute (eval,
+         bash -c, command substitution, etc.)
 
-                                  2/25
+                                  9/18
                                   ----
-general.c
-       - interrupt_immediately: remove all references to this that are
-         already commented out
-
-                                   3/2
-                                   ---
-variables.c
-       - push_var_context,push_posix_tempvar_internal: assignment statements
-         preceding shell functions no longer persist after the function
-         completes in posix mode. POSIX interp #654, was in P1003.1-2017
-       - push_posix_temp_var: variable assignments preceding special builtins
-         now act as if an assignment statement had been executed in posix mode
-         (the Posix `current execution environment') instead of unconditionally
-         creating a global variable
-
-trap.c
-       - clear_pending_traps: new function, just clears the pending traps flag
-         for all signals
-
-                                   3/6
-                                   ---
-execute_cmd.c
-       - execute_in_subshell: check for interrupts and terminating signals
-         before resetting the terminating signal handlers, and clear all
-         pending traps -- they're not pending for us and we should not run a
-         trap handler for them
-       - execute_in_subshell: enable bash-5.1 change from 11/29/2018 that
-         resets the signal-in-progress flag if we're running a command in
-         a subshell, since we're not running the trap command (we are the
-         trap command)
+arrayfunc.c
+       - expand_and_quote_kvpair_word,quote_compound_array_word,
+         expand_and_quote_assoc_word,quote_compound_array_list: make sure
+         the value has CTLESC characters doubled even when being single-
+         quoted, since that's what the parser does with standalone assignment
+         statements. From https://savannah.gnu.org/support/?110538
 
-                                  3/10
+                                  9/19
                                   ----
-subst.c
-       - parameter_brace_expand: if we assign the empty string to a variable
-         using the [:]= expansion in a quoted expansion, make sure we note
-         we are returning a quoted null string to the caller by setting
-         W_HASQUOTEDNULL. Fixes bug reported by Martin Castillo
-         <castilma@uni-bremen.de>
+aclocal.m4
+       - AC_TRY_COMPILE -> AC_COMPILE_IFELSE (AC_TRY_LINK calls left to
+         modify to avoid obsolete warnings)
+       - BASH_STRUCT_WINSIZE: broke out checks for separate headers into new
+         macros, call them and work with the results; needed to avoid two
+         calls to AC_TRY_COMPILE
+       - BASH_CHECK_KERNEL_RLIMIT: avoid multiple calls to AC_TRY_COMPILE by
+         breaking basic test for RLIMIT_ defines into a separate test and
+         calling the HPUX-specific _KERNEL test only if that fails
+
+m4/gettext.m4,configure.ac
+       - AM_GNU_GETTEXT -> BASH_GNU_GETTEXT: remove deprecation warning, since
+         [no-libtool] is how we use this; rename to avoid someone's local
+         copy from overriding ours
 
-                                  3/17
+                                  9/20
                                   ----
-lib/readline/histfile.c
-       - history_truncate_file: only chown the file if we really need to. From
-         alex@lisas.de via https://savannah.gnu.org/support/?110207
+aclocal.m4
+       - BASH_CHECK_MULTIBYTE: take out code that checks for nl_langinfo(CODESET)
+         since that's already provided by AM_LANGINFO_CODESET, which is
+         called by BASH_GNU_GETTEXT. We AC_REQUIRE it here, though, to avoid
+         problems from future changes
+       - BASH_SYS_SIGNAL_VINTAGE: broke the code that checks for the different
+         signal vintages into different AC_DEFUNed macros, changed
+         BASH_SYS_SIGNAL_VINTAGE to stitch them together with shell code
+         testing the cached variables
+       - AC_TRY_LINK -> AC_LINK_IFELSE: there are no more autoconf warnings
 
-lib/readline/bind.c
-       - rl_unbind_function_in_map: since we are looking for functions, not
-         key sequences, descend into keymaps attached to the keymap passed
-         as an argument. From a report from lockywolf@gmail.com back on 2/27,
-         TENTATIVE CHANGE
+                                  9/21
+                                  ----
+array.[ch]
+       - array_from_argv: new convenience function
 
-variables.h
-       - MKLOC_ARRAYOK,MKLOC_ASSOCOK: new flags values for
-         make_local_{array,assoc}_variable so we can avoid hard-coded values
-         of 1 and make it possible to eventually pass in additional flags
+array.h
+       - num_elements: now an arrayind_t, since that's the type of indices, it
+         makes sense to allow that many elements
 
-builtins/declare.def
-       - declare_internal: make_local_array_variable: pass MKLOC_ASSOCOK
-       - declare_internal: make_local_assoc_variable: pass MKLOC_ARRAYOK
+                                  9/22
+                                  ----
+lib/readline/terminal.c
+       - rl_term_kP: fix typo. Fix from Koichi Murase <myoga.murase@gmail.com>
 
-variables.c
-       - make_local_{array,assoc}_variable: understand new flags, pass
-         MKLOC_INHERIT to make_local_variable if it appears in the flags
-         argument
+                                  9/25
+                                  ----
+lib/readline/display.c
+       - rl_clear_visible_line: call _rl_clear_to_eol with _rl_screenwidth as
+         the argument so we clear out the entire line even if the terminal
+         doesn't have a clear-to-eol sequence; make sure to add a call to
+         rl_cr after that so we know we're always in column 0
+       - _rl_redisplay_after_sigwinch: just call rl_clear_visible_line instead 
+         of erasing the last line of the display
+       - _rl_redisplay_after_sigwinch: if the prompt is longer than the screen
+         width, make sure to call _rl_reset_prompt to recalculate the
+         local_prompt_newlines array. Should fix issue from
+         https://savannah.gnu.org/support/index.php?110543
 
-builtins/declare.def
-       - declare_internal: add a new -I option for local and declare that
-         inherits attributes and value from a variable with the same name
-         at a previous scope. Inspired by netbsd sh
-       - if -I option is supplied, pass MKLOC_INHERIT to make_local_variable
-         and its array counterparts make_local_{array,assoc}_variable
+redir.c
+       - do_redirection_internal: if given [N]<&WORD- or [N]>&WORD- and WORD
+         expands to null, make it identical to <&- or >&- and close file
+         descriptor N (default 0). From a discussion back in 5/2021
 
-subst.c
-       - shell_expand_word_list: pass -I to declare if constructing a declare
-         command with make_local_declare, meaning we have an array or assoc
-         compound assignment. (Slighty unsatisfactory, but ok for now) Fix
-         for bug report from Kevin Locke <kevin@kevinlocke.name>,
-         https://savannah.gnu.org/support/index.php?109669
+                                  9/27
+                                  ----
+arrayfunc.c
+       - expand_compound_array_assignment: since we run the string through
+         the parser to turn it into a list (so we can make sure all shell
+         metacharacters are properly quoted), we need to remove the CTLESC
+         the parser uses to quote CTLESC and CTLNUL in *unquoted* words.
+         The rest of the code assumes this has been done, and assumes that
+         any CTLESC characters passed to expansion are part of the original
+         word and should themselves be quoted, doubling the number of CTLESCs
 
-                                  3/18
+                                  9/28
                                   ----
-examples/loadables/basename.c
-       - basename_builtin: handle -- option without crashing. Report by Peng Yu
-         <pengyu.ut@gmail.com>
+arrayfunc.c
+       - expand_and_quote_kvpair_word,quote_compound_array_word,
+         expand_and_quote_assoc_word,quote_compound_array_list: if we are
+         single-quoting associative array subscripts and associative and
+         indexed array values, we need to quote CTLESC characters, because
+         that's how they come out of the parser and how the assignment
+         statement code expects to see them.
+         Fixes https://savannah.gnu.org/support/index.php?110538
 
-jobs.c
-       - notify_of_job_status: if in posix-mode shell is started with -c,
-         jobs should print the status of completed jobs. From a report by
-         Robert Elz <kre@munnari.oz.au> back in 12/18
+                                  9/29
+                                  ----
+subst.c
+       - parameter_brace_transform: invalid transformation operators are now
+         fatal errors in non-interactive shells, as with the other word
+         expansions. Reported by Martin Schulte <gnu@schrader-schulte.de> in
+         https://lists.gnu.org/archive/html/bug-bash/2020-10/msg00026.html
+
+execute_cmd.c
+       - execute_disk_command: if we're optimizing out the fork (nofork) and
+         not directly in a pipeline (pipe_in == pipe_out == NO_PIPE), only
+         modify shell_level if subshell_environment says we're not already in
+         a pipeline. Reported by Paul Smith <psmith@gnu.org> 10/11/2020
+         against GNU make
 
-                                  3/19
+evalstring.c
+       - should_suppress_fork: remove #if 1 for code that tries to suppress
+         the fork in a process substitution subshell
+
+                                  9/30
                                   ----
-variables.c
-       - assign_in_env: if we're assigning POSIXLY_CORRECT or POSIX_PEDANTIC
-         in the temporary environment, save the values of the options
-         affected by posix mode so we can restore them when we restore the
-         old value of the variable after the command executes. Suggested by
-         Martijn Dekker <martijn@inlv.org>
+builtins/mapfile.def
+       - do_chop: make sure we're comparing unsigned chars when checking
+         whether the delim is the last character on the line. Reported by
+         Greg Wooledge <greg@wooledge.org>
 
-                                  3/20
+                                  10/1
                                   ----
-syntax.h
-       - slashify_in_here_document: add `"' to this list, since POSIX says
-         that backslashes in here documents behave like backslashes in
-         double quotes, and backslash can quote a double quote in a double-
-         quoted string. This means that given P=A,
+lib/readline/rltty.c
+       - rl_deprep_terminal: if we're not echoing to the terminal
+         (_rl_echoing_p == 0), and we just output the bracketed paste end
+         sequence, output a newline to compensate for the \r at the end of
+         BRACK_PASTE_FINI, since redisplay didn't do it for us. Reported by
+         Siteshwar Vashisht <svashisht@redhat.com>
 
-               cat <<EOF
-               ${P+\"$P\"}
-               EOF
+shell.h
+       - MATCH_EXPREP: new matching flag, understood only by pattern
+         substitution; means to expand unquoted `&' in the replacement
+         STRING to the match of PATTERN
 
-               and
+subst.c
+       - shouldexp_replacement: uncommented
+       - pat_subst: we expand & in the replacement string if MATCH_EXPREP
+         appears in MFLAGS
+       - parameter_brace_patsub: push call to shouldexp_replacement out here,
+         after the replacement string is expanded; set MATCH_EXPREP if there
+         is an unquoted `&' (by backslash) in the expanded replacement
+         string
 
-               echo "${P+\"$P\"}"
+doc/{bash.1,bashref.texi}
+       - pattern substitution: overhauled the description, moved each of the
+         possible forms to be tags in the tagged paragraph. The description
+         now specifies the expansions that the replacement string undergoes
+       - pattern substitution: documented new behavior of unquoted & in the
+         replacement string
 
-         should output the same thing. From a report from Dan Jacobson
-         <jidanni@jidanni.org> back in 1/2019.
+                                  10/4
+                                  ----
+shell.c
+       - include <malloc/shmalloc.h> if we're debugging malloc (MALLOC_DEBUG)
+         so we can get an extern declaration of trace_malloc_stats
 
-                                  3/23
+                                  10/5
                                   ----
 subst.c
-       - string_transform: add `U' (convert to uppercase), `u' (convert
-         first character to uppercase), and `L' (convert to lowercase)
-         transformations. Inspired by a discussion with Phil Smith
-         <phil@philsmith.com> back in May, 2019
-       - parameter_brace_transform: make sure `u', `U', and `L' are valid
-         transform operators
+       - expand_subscript_string: allocate new memory for td.word, copying
+         STRING, in case it gets freed on error by expand_word_internal.
+         Report and fix from Koichi Murase <myoga.murase@gmail.com>
 
-doc/{bash.1,bashref.texi}
-       - parameter transformation: document new `U', `u', and `L' operators
+lib/malloc/malloc.c
+       - malloc_usable_size: return the allocated size instead of the chunk
+         size, since writing over the bounds checking will cause fatal errors.
+         Reported by Julien Moutinho <julm+bash@sourcephile.fr>, fix from
+         Dominique Martinet <asmadeus@codewreck.org>
 
-eval.c
-       - execute_prompt_command: if an array variable PROMPT_COMMANDS exists,
-         prefer it to PROMPT_COMMAND and execute all of the commands contained
-         as array elements in index order. From a proposal by Daniel
-         Colascione <dancol@google.com> back in 1/2018
-       - execute_array_command: function for array_walk to use when executing
-         commands in PROMPT_COMMANDS
+arrayfunc.c
+       - unbind_array_elememnt: pass (flags&VA_NOEXPAND) to skipsubscript(),
+         instead of unconditionally passing 1 if we're operating on an
+         associative array. This is consistent with how valid_array_reference
+         determines the length of the subscript.
+         Report and fix from Koichi Murase <myoga.murase@gmail.com>
 
-doc/{bash.1,bashref.texi}
-       - PROMPT_COMMANDS: new array variable
+                                  10/6
+                                  ----
+
+subst.c
+       - skip_to_delim: add a new value for FLAGS. If FLAGS&2, we assume that
+         START is one character after the opening OPEN. If not, we assume that
+         START is at OPEN, and needs to be incremented past it. Part of fix
+         from Koichi Murase <myoga.murase@gmail.com>
 
-                                  3/24
+arrayfunc.c
+       - unbind_array_element: make sure to pass FLAGS to skipsubscript with
+         bit 2 set, since we are passed a SUB index that's one past the
+         opening bracket. Rest of fix from
+         Koichi Murase <myoga.murase@gmail.com>
+       - array_variable_name: make sure we pass (FLAGS&1) to skipsubscript, so
+         we don't inadvertently pass a value with bit 2 set, which would
+         cause an off-by-one error in subscript parsing
+
+                                  10/8
                                   ----
-builtins/ulimit.def
-       - new -R option, for RLIMIT_RTTIME (max time a real-time process can
-         run without blocking). Patch from Maciej Wolny
-         <maciekwolny123@gmail.com> back in 7/2017
+trap.c
+       - restore_traps: inverse of reset_signal_handlers. This understands
+         how reset_signal_handlers changes the signal disposition while
+         leaving the trap string in place, and knows how to restore flags
+         and state based on that preserved trap string and whether or not
+         the signal is "special" to the shell.
 
-doc/{bash.1,bashref.texi}
-       - ulimit: document new -R option
+builtins/exec.def
+       - exec_builtin: instead of using restore_original_signals to completely
+         cancel the traps, call reset_signal_handlers so the trap strings are
+         preserved. Then if the exec fails (and we're not exiting) we can
+         look at the trap strings and see how to restore the trap state.
+         This calls restore_traps after reinitializing the shell signal
+         handlers, using the trap strings saved by reset_signal_handlers.
+         Fixes issue with not exiting after a failed exec clearing the EXIT
+         trap reported by Mark March <march@systempad.org>, using the
+         approach suggested by Robert Elz <kre@munnari.OZ.AU>
+
+subst.c
+       - expand_declaration_argument: when parsing options that modify
+         attributes that affect how the value is handled (i, c, u, etc.),
+         make sure to create an option string and call make_internal_declare
+         with options that start with a `+' so the attribute is off when
+         the assignment is performed and changes how the value is expanded.
+         From a report by Léa Gris <lea.gris@noiraude.net>
 
-lib/readline/{display.c,rlprivate.h}
-       - _rl_clear_screen: now takes an argument saying whether to attempt to
-         clear the terminal scrollback buffer if the right termcap capability
-         exists
+lib/readline/complete.c
+       - rl_display_match_list: even if _rl_completion_prefix_display_length
+         is set to a non-zero value, pass the common prefix length to
+         fnprint if we've turned on colored completion prefixes; passes
+         through to fnprint via print_filename
+       - fnprint: add the ellipsis if prefix_bytes exceeds the
+         _rl_completion_prefix_display_length, add explicit check for
+         prefix_bytes being longer since print_filename passes it through
+         if colored-completion-prefix is set. This means that while
+         completion-prefix-display-length still has precedence over
+         colored-completion-prefix, it doesn't override it if both are set
+         and the common prefix length is shorter than
+         completion-prefix-display-length. From a report by
+         Christoph Anton Mitterer <calestyo@scientia.net>
 
-lib/readline/{text.c,readline.h}
-       - rl_clear_display: new bindable command that clears the screen and
-         scrollback buffer
+                                  10/10
+                                  -----
+parse.y
+       - parse_dparen: if the last token is FOR, increment word_top and assign
+         word_lineno like for other for loops. Fixes bug with LINENO after
+         arithmetic for commands reported by
+         Tom Coleman <thomas.james.coleman@gmail.com>
 
-lib/readline/funmap.c
-       - clear-display: new bindable command name
+                                  10/11
+                                  -----
+execute_cmd.c
+       - shell_execve: if execve fails with ENOENT, but executable_file()
+         succeeds, display a slightly more descriptive error message. Prompted
+         by a report from Andrea Monaco <andrea.monaco@autistici.org>
 
-lib/readline/emacs_keymap.c
-       - emacs mode M-C-l now bound to clear-display
+stringlib.c
+       - strcreplace: allow backslash to escape a backslash, since we allow it
+         to escape a `&'
 
-doc/bash.1,lib/readline/doc/{readline.3,rluser.texi}
-       - clear-display: document new function and default emacs mode binding
+                                  10/14
+                                  -----
+pcomplib.c
+       - COMPLETE_HASH_BUCKETS: double to 512
 
-arrayfunc.c
-       - assign_assoc_from_kvlist: allow compound assignments to associative
-         arrays that do not contain words of the form `[key]=value', assume
-         such lists are of the form (key1 value1 key2 value2). A missing or
-         empty key is an error; a missing value is treated as NULL. You
-         cannot mix the two forms. Inspired by a suggestion from Sebastian
-         Gniazdowski <sgniazdowski@gmail.com> back in 7/2019
+stringlib.c
+       - strcreplace: the last argument is now a flags argument. 1 has its
+         previous meaning (glob); 2 means to allow backslash to escape a
+         backslash (as added on 10/11)
 
-doc/{bash.1,bashref.texi}
-       - documented new associative array assignment syntax
+subst.c
+       - pat_subst: call strcreplace with 2 as the flags value
 
-assoc.[ch]
-       - assoc_to_kvpair: new function that returns a string with quoted
-         key/value pairs from given associative array
+                                  10/15
+                                  -----
+doc/bashref.texi
+       - updates to Installation section
 
-array.[ch]
-       - array_to_kvpair: new function that returns a string with quoted
-         key/value pairs from given indexed array (for completeness)
+doc/{mkposix,mkinst,mkrbash},doc/Makefile.in
+       - changes to allow scripts to be run outside the source directory
 
+                                  10/18
+                                  -----
 subst.c
-       - parameter_brace_transform: new operator `K': produces the (possibly
-         quoted) value of a variable, except for arrays, where it expands to
-         indexed or associative array assignments in key/value pair form
-       - string_transform,parameter_list_transform: expand `K' to (possibly
-         quoted) values
-       - array_var_assignment: take a new fourth argument saying which kind
-         of assoc assignment statement to produce; calls array_to_kvpair or
-         assoc_to_kvpair as appropriate and just returns that value if
-         necessary without creating a declare command
-       - array_transform: if the operator is `K', call array_var_assignment
-         with new argument that will produce a list of key/value pairs
+       - patsub_replacement: controls whether pattern substitution expands `&'
+         in the replacement string. Initialized to 1 by default
 
+                                  10/19
+                                  -----
 doc/{bash.1,bashref.texi}
-       - document new 'K' parameter transformation operator
-
-                                  3/25
-                                  ----
-doc/bash.1,lib/readline/doc/{history.3,readline.3}
-       - some text and formatting cleanups from Bjarni Ingi Gislason
-         <bjarniig@rhi.hi.is>
+       - document bash's WCE SIGINT behavior when job control is not enabled
+         and the shell receives a SIGINT while waiting for the foreground
+         command to complete. Added at Red Hat's request. A complete
+         discussion is at https://www.cons.org/cracauer/sigint.html
 
-bashhist.c
-       - SYSLOG_MAXLEN: increase to 1024, since that seems to be what most
-         syslog daemons handle
-       - bash_syslog_history: if the line is longer than SYSLOG_MAXLEN minus
-         the header length, log it in multiple message with a sequence number
-         instead of truncating. Inspired by a report from
-         <sunhuilin@unionpay.com> back in 7/2018
+                                  10/25
+                                  -----
+builtins/shopt.def
+       - patsub_replacement: new shell option, exposes patsub_replacement
+         variable controlling whether pattern substitution expands `&' in
+         the replacement string. Still enabled by default.
 
-lib/readline/text.c
-       - rl_activate_mark,rl_deactivate_mark,rl_mark_is_active_p,
-         rl_keep_mark_active: new functions to manage an active region. We
-         don't do anything with an active region yet. Part of a large patch
-         for active regions from Daniel Colascione <dancol@google.com>
-         originally back in 3/2018
-       - rl_clear_screen: call rl_keep_mark_active to keep the region active
-         across the screen refresh
-       - rl_newline: make sure to deactivate the region even though we don't
-         do any redisplay with it yet
+doc/{bash.1,bashref.texi}
+       - patsub_replacement: document new shopt option
 
-lib/readline/readline.h
-       - rl_activate_mark,rl_deactivate_mark,rl_mark_is_active_p,
-         rl_keep_mark_active: new extern function declarations. They are
-         public functions for now
+                                  10/26
+                                  -----
+lib/readline/display.c
+       - expand_prompt: group runs of invisible characters at the right edge
+         of the screen with the previous physical characters when setting
+         local_prompt_newlines, since that's how update_line() expects to
+         get it. Fix from sparrowhawk996@gmail.com.
 
-lib/readline/readline.c
-       - readline_internal_setup: make sure the region starts out as not
-         active
-       - readline_internal_charloop: make sure to deactivate the mark after
-         a command, unless the command calls rl_keep_mark_active keep it
-         active
+lib/readline/macro.c
+       - rl_end_kbd_macro: make sure current_macro_index is > 0 after
+         subtracting the key sequence length, clamp it to 0 before writing
+         the ending NULL. From a fuzzing report by
+         Tillmann Osswald <tosswald@ernw.de>
 
-lib/readline/kill.c
-       - rl_bracketed_paste_begin: set rl_mark before inserting the pasted
-         text, so the pasted text defines the region
-       - rl_bracketed_paste_begin: set the region as active after inserting
-         the pasted text
+lib/readline/isearch.c
+       - _rl_isearch_dispatch: in the bracketed paste case, don't assume the
+         pasted text is null-terminated, so use memcpy instead of strcpy for
+         the length of the pasted text, then make sure the search string is
+         null-terminated. From a fuzzing report by
+         Tillmann Osswald <tosswald@ernw.de>
 
-lib/readline/util.c
-       - _rl_abort_internal: make sure we deactivate the region
+lib/readline/text.c
+       - rl_transpose_words: make sure to preserve the value of rl_end from
+         the beginning to the end of the function. From a fuzzing report by
+         Tillmann Osswald <tosswald@ernw.de>
 
-lib/readline/{terminal.c,rlprivate.h}
-       - _rl_cr: new function to just output the term_cr (or '\r'). Part of
-         the active region patch
+lib/readline/vi_mode.c
+       - rl_vi_delete_to,rl_vi_change_to,rl_vi_yank_to: if we are redoing a
+         command (_rl_vi_redoing == 1), save the old _rl_vimvcxt, allocate a
+         new one, and restore the old one before returning. Prevents some
+         pointer aliasing problems. From a fuzzing report by
+         Tillmann Osswald <tosswald@ernw.de>
 
-lib/readline/display.c
-       - _rl_cr: use where appropriate to replace MSDOS-dependent code and
-         calls to tputs
+                                  10/29
+                                  -----
+arrayfunc.c
+       - tokenize_array_reference: take valid_array_reference and add a third
+         argument (char **SUBP), which, if non-NULL, gets the null-terminated
+         subscript parsed from the NAME argument. If it's NULL, the caller
+         gets the old valid_array_reference behavior. Fix from
+         Koichi Murase <myoga.murase@gmail.com>
+       - valid_array_reference: just call tokenize_array_reference with a
+         NULL third argument
+       - unbind_array_element: assume the caller (unset_builtin) passes a
+         null-terminated SUB that's already been validated by a call to
+         tokenize_array_reference so we don't need to call skipsubscript() or
+         check VA_ONEWORD. Fix from Koichi Murase <myoga.murase@gmail.com>
 
-lib/readline/terminal.c
-       - get and store the terminal sequences to enter and exit standout
-         (usually some background color) mode
+arrayfunc.h
+       - tokenize_array_reference: extern declaration
 
-                                  3/26
-                                  ----
-subst.[ch]
-       - copy_fifo_list: now returns void *
-       - close_new_fifos: now takes a void * as the first argument, since it's
-         usually the return value from copy_fifo_list
-       - close_new_fifos: (named pipes): cast first argument to a char *,
-         since copy_fifo_list will (someday) return a bitmap
-       - close_new_fifos: (HAVE_DEV_FD): cast first argument to a pid_t *,
-         since it takes a copy of dev_fd_list; use that in the loop to
-         determine whether or not to close file descriptors. First half of
-         fix for bug reported by Valentin Lab <valentin.lab@kalysto.org>
-       - unlink_fifo_list: (named pipes): when compacting the list, make sure
-         to avoid the copy if i == j, and, after copying fifo_list[i] to
-         fifo_list[j], null out fifo_list[i] so we don't try to access it
-         later
+builtins/set.def
+       - unset_builtin: use tokenize_array_reference to figure out T and pass
+         that to unbind_array_element. Fix from
+         Koichi Murase <myoga.murase@gmail.com>
+       - unset_builtin: pass non-null argument to array_variable_part to get
+         the length of the subscript (T), then cut off any final `]' before
+         passing it to unbind_array_element, since that's what it now
+         expects
 
-execute_cmd.c
-       - execute_command_internal: don't call reap_procsubs after executing
-         the command. Rest of fix for bug reported by Valentin Lab
-         <valentin.lab@kalysto.org>
-       - execute_command_internal,execute_builtin_or_function: ofifo_list is
-         now a void * instead of a char *
+subst.c
+       - expand_string_for_rhs,expand_string_for_pat: assign td.word from
+         newly-allocated memory in case it gets freed on error during the
+         call to call_expand_word_internal(); free it manually when that
+         call returns
 
-                                  3/30
+                                  11/1
                                   ----
-lib/readline/{terminal.c,rlprivate.h}
-       - _rl_standout_{on,off}: new functions, to enter and exit terminal
-         standout mode
+findcmd.c
+       - search_for_command: if FLAGS includes CMDSRCH_STDPATH, don't look in
+         the hash table for the command name. Prompted by a report from
+         Roger Morris <roger.morris@gmail.com>
 
-lib/readline/rlprivate.h
-       - _rl_refresh_line: new extern declaration
+aclocal.m4
+       - BASH_FUNC_POSIX_SETJMP: add a check by fetching the signal mask
+         after the siglongjmp and making sure that SIGINT is not blocked,
+         indicating we restored the original signal mask
 
-lib/readline/display.c
-       - visible and invisible lines: added members to deal with tracking the
-         `current face'
-       - realloc_line: broke code to manage visible_line and invisible_line
-         allocation out of init_line_structures, added code to manage arrays
-         of visible and invisible line face info per character
-       - invis_{addc,adds,nul}: new functions to add characters to the
-         invisible line and keep the invisible face data updated with whatever
-         the current face is
-       - set_active_region: keep track of the display region that should be
-         in standout mode
-       - rl_redisplay: use invis_addc/adds/nul to update the invisible line
-         buffer instead of modifying invisible_line directly
-       - _rl_refresh_line: moved body of function here from text.c
+                                  11/2
+                                  ----
+subst.c
+       - expand_string_assignment: make sure to add W_TILDEEXP to the flags so
+         expand_word_internal performs the right tilde expansion on tildes
+         following an unquoted colon. Report from Anders Kaseorg
+         <andersk@mit.edu>
 
-lib/readline/text.c
-       - rl_refresh_line: now just calls _rl_refresh_line and marks the display
-         as fixed
 
-                                  3/31
+                                  11/3
                                   ----
-variables.c
-       - bind_variable_internal: dynamic variables with assignment functions
-         now honor the readonly attribute by giving an error. Fixes issue
-         reported by Rob Landley <rob@landley.net>
-       - assign_seconds: allow seconds to be assigned using an arithmetic
-         expression
-       - assign_random: allow RANDOM to be assigned using an arithmetic
-         expression
-
-doc/{bash.1,bashref.texi}
-       - HISTCMD: note that assignments to HISTCMD have no effect
+aclocal.m4
+       - BASH_FUNC_POSIX_SETJMP: if cross-compiling, default to `present' if
+         we've determined we have posix signal functions
 
-                                   4/2
-                                   ---
+                                  11/4
+                                  ----
 execute_cmd.c
-       - execute_in_subshell: make sure we note that we're not reading our
-         command input from a buffered stream any more, so we don't
-         sync the buffered stream backwards in subsequent commands this
-         subshell runs. Fixes bug reported by OÄuz <oguzismailuysal@gmail.com>
+       - SET_LINE_NUMBER: set line_number, but don't set line_number_for_err_trap
+         if we're already running the ERR trap
+       - GET_LINE_NUMBER: evaluates to line_number_for_err_trap if we're
+         running the ERR trap and executing_line_number() otherwise
+       - execute_function: use GET_LINE_NUMBER to push the value for the line
+         number into the BASH_LINENO array
+       - execute_command_internal,execute_arith_command,execute_cond_command:
+         use SET_LINE_NUMBER to avoid overwriting line_number_for_err trap
+         while executing the ERR trap. Tentative fix for `caller' problem
+         reported by Quinn Grier <quinn@quinngrier.com>
+
+configure.ac,patchlevel.h
+       - set bash version to 5.2-devel, meaning shell_compatibility_level = 52,
+         which required updating tests (array.tests, array21.sub,
+         quotearray3.sub, new-exp10.sub, history2.sub). The first three are
+         because bash-5.2 flushes an indexed array but does not unset the
+         variable when given `unset a[@]' or `unset[*]' (that is, it acts
+         like `a=()' instead of `unset a'); the other two are because the
+         version number changed
 
-                                   4/3
-                                   ---
-builtins/read.def
-       - read_builtin: if a read in posix mode is interrupted by a signal,
-         make sure to preserve the value of errno around calls to
-         check_signals and run_pending_traps so any error message isn't quite
-         as confusing. Issue reported by Stan Marsh <gazelle@xmission.com>
-
-lib/sh/zread.c
-       - zread: preserve value of errno (always EINTR) around calls to
-         check_signals or check_signals_and_traps
+                                  11/8
+                                  ----
+doc/Makefile.in
+       - bash.info: use `makeinfo -o' instead of calling infopost.sh to edit
+         the filename, since the tags table includes absolute byte offsets to
+         nodes. From https://savannah.gnu.org/support/?110557
 
-trap.c
-       - run_debug_trap: allow suppress_debug_trap_verbose being set to
-         turn off `set -v' temporarily while executing the DEBUG trap (if
-         it's set)
+                                  11/15
+                                  -----
+examples/loadables/realpath.c
+       - add -a NAME argument to put canonicalized pathnames into an indexed
+         array instead of displaying them on stdout. Suggested by
+         felix@f-hauri.ch
 
-builtins/fc.def
-       - set suppress_debug_trap_verbose so set -v won't be in effect while
-         the DEBUG trap runs. Most recently reported by Ami Fischman
-         <ami@fischman.org>; originally raised by Boruch Baum
-         <boruch_baum@gmx.com> back in 10/2017
+lib/readline/colors.c
+       - _rl_custom_readline_prefix: new function, looks in $LS_COLORS for a
+         custom extension (*.readline-colored-completion-prefix) and uses that,
+         if found, as the default color for the common prefix displayed when
+         `colored-completion-prefix' is set. Suggested by
+         Christoph Anton Mitterer <calestyo@scientia.net>
+       - _rl_print_prefix_color: try the return value from _rl_custom_readline_prefix
+         before defaulting to the C_PREFIX (C_SOCK) color. Suggested by
+         Christoph Anton Mitterer <calestyo@scientia.net>
 
-                                   4/6
-                                   ---
-lib/readline/display.c
-       - puts_face,putc_face: new functions to write strings or characters to
-         the display while handling standout mode
-       - update_line,_rl_move_cursor_relative: take additional argument(s)
-         describing the visible and invisible faces corresponding to the
-         visible and invisible lines, respectively
+lib/readline/doc/{readline.3,rluser.texi},doc/bash.1
+       - readline-colored-completion-prefix: document new custom suffix for
+         readline's colored-completion-prefix color
 
-lib/readline/readline.c
-       - _rl_enable_bracketed_paste: for the time being, initialize to 1 (on
-         by default)
+                                  11/16
+                                  -----
+doc/{bash.1,bashref.texi},builtins/set.def
+       - set: modify usage synopsis slightly, based on
+         https://bugzilla.redhat.com/show_bug.cgi?id=2022324
 
-trap.c
-       - run_interrupt_trap: set pending_sigs[SIGINT] and catch_flag to 0
-         since run_pending_trap usually does these things
+builtins/set.def
+       - unset_builtin: add shell compatibility level check <= bash-5.1 to
+         force `unset a[@]' to unset array variable `a', like in previous
+         versions, instead of unsetting associative array element `@' or
+         removing all elements of an indexed array without unsetting the
+         variable itself
 
-sig.c
-       - throw_to_top_level: only call the SIGINT trap if there is a SIGINT
-         trap pending (shouldn't matter, just a check)
+builtins/common.c
+       - set_expand_once: now a no-op if the shell compatibility level is
+         <= bash-5.1, preserving the previous versions' behavior for [[ -v
+         (dependent on assoc_expand_once instead of forcing it)
 
-bashline.c
-       - bash_event_hook: try to identify the signal of interest we've
-         received
-       - bash_event_hook: if in posix mode running the read builtin, and we
-         get a (trappped) SIGINT, throw to top level so we can interrupt
-         the read. From a report by Robert Elz <kre@munnari.oz.au>
+subst.c
+       - parameter_brace_expand_rhs: make sure that the final value assigned
+         is always returned from ${a:=b}, even when `a' has a variable
+         attribute that modifies the value on assignment. Reported back on
+         1/20/2021 by oguzismailuysal@gmail.com; bash-5.2 tag removed
 
-                                   4/7
-                                   ---
-lib/readline/display.c
-       - update_line: make sure to update and compare face data at the same
-         time as comparing old and new line data: the lines are only the same
-         if the face information and character information are identical
-         (ofd, ols, etc.)
-       - update_line: make sure to copy face data along with line data
-       - update_line: use puts_face in place of _rl_output_some_chars to
-         output face data along with line data
-       - _rl_move_cursor_relative: when we write characters, make sure to take
-         the face data into account using puts_face
-         [END OF INTEGRATION OF ACTIVE MARK AND FACE PATCHES from
-         Daniel Colascione <dancol@google.com>]
-
-{jobs,nojobs}.c
-       - make_child: to avoid installing a handler for SIGTERM in interactive
-         shells, and avoid race conditions with child processes resetting the
-         SIGTERM signal handler to the default, block SIGTERM and then
-         reset the SIGTERM handler to SIG_DFL before fork, then reset the
-         handler to SIG_IGN and unblock it in the parent after fork() returns.
-         Fix for readline and SIGTERM handling reported by Chris Down
-         <chris@chrisdown.name> (original change was back in 2/2013) that
-         allows a bash waiting in readline() for input to be killed with a
-         SIGTERM sent by another process
-       - take out calls to RESET_SIGTERM, no longer needed
+                                  11/22
+                                  -----
+doc/{bashref.texi,bash.1}
+       - unset: change the description of `unset name[@]' (unset name[*])
+         to reflect the new behavior (unset associative array subscripts or
+         remove all elements from an indexed array) and the difference from
+         previous versions
+       - set: document -r for restricted shell mode
+       - restricted shell: change occurrences of `set +o restricted' to
+         `shopt -u restricted_shell'. From a report from
+         Jin Xiang <jxiang.sd@gmail.com>
+       - read: note that read -t0 may return 0 if a subsequent read will
+         return EOF. From a suggestion by Dale R. Worley
+         <worley@alum.mit.edu>
 
 execute_cmd.c
-       - execute_in_subshell,execute_simple_command,execute_disk_command:
-         remove calls to CHECK_SIGTERM, since we don't install a handler
-         any more
-
-lib/readline/readline.c
-       - _rl_enable_bracketed_paste: enabled by default for the time being
-
-                                   4/9
-                                   ---
-jobs.h
-       - JWAIT_WAITING: new flag for wait functions; means only wait for jobs
-         with the J_WAITING flag set
-       - J_WAITING: new job flag, part of arg list to `wait -n'
-       - IS_WAITING(i): job i has the J_WAITING flag set
-
-jobs.c
-       - wait_for_any_job: if the flags includes JWAIT_WAITING, we only return
-         jobs with the J_WAITING flag already set; otherwise we skip them.
-         For `wait -n args' support
-
-builtins/wait.def
-       - set_waitlist: take a list of jobspecs and set the J_WAITING flag in
-         each valid job from the list
-       - unset_waitlist: turn off the J_WAITING flag for all jobs where it's
-         set
-       - wait_builtin: if -n is supplied with a list of arguments, set the
-         J_WAITING flag in each job in the list, call wait_for_any_job with
-         the JWAIT_WAITING flag, and clean up by calling unset_waitlist().
-         From a suggestion from Robert Elz <kre@munnari.oz.au> back in 3/2019
-         (originally in 10/2017)
+       - execute_arith_command,eval_arith_for_expr: don't pass EXP_EXPANDED
+         to evalexp if shell_compatibility_level > 5.1, assuming that the
+         expression has been quoted by Q_ARITH handling
 
-                                  4/11
-                                  ----
-lib/readline/display.c
-       - update_line: in step 5b of the line wrapping prompt code, make sure
-         OFDF and NFDF are set before performing a dumb update
+test.c
+       - test_arithcomp: if we're being called by the conditional command
+         code and treating the arguments to the arithmetic operators as
+         expressions, don't pass EXP_EXPANDED to evalexp if the shell
+         compatibility level is > 5.1, assuming that the expression has been
+         quoted by Q_ARITH handling
 
-                                  4/12
-                                  ----
-sig.c
-       - termsig_handler: make sure to restore TOP_LEVEL_SIGMASK before
-         resending a terminating signal to ourselves, in the event that this
-         is called in a signal handler context with the terminating signal
-         blocked. Inspired by a report from <gentoo_eshoes@tutanota.com>
+                                  11/29
+                                  -----
+examples/loadables/getconf.[ch]
+       - getconf: new implementation of loadable builtin, based on glibc
+         getconf
 
-                                  4/13
-                                  ----
+examples/loadables/sleep.c
+       - parse_gnutimefmt: parse GNU interval format (2m30s), returning
+         seconds and microseconds like uconvert
+       - sleep: use parse_gnutimefmt if uconvert can't parse the format right
+         away and "dhms" appears in the format string. Don't return
+         EX_DISKFALLBACK under any circumstances
 
-lib/readline/text.c
-       - rl_newline: if the region is active, call rl_redisplay to clear
-         standout mode before returning
+                                  11/30
+                                  -----
 
-lib/readline/display.c
-       - norm_face: new function to mark a portion of the invisible face
-         buffer as normal text (no standout)
-       - rl_redisplay: if the line consumes more than a screen's worth of
-         lines, mark the lines that are off the top of the display as having
-         a `normal' face
+builtins/wait.def
+       - wait_builtin: refer to unset_waitlist only if JOB_CONTROL is enabled.
+         Report from Joel Ebel <jbebel@google.com>
 
-                                  4/14
-                                  ----
-variables.c
-       - LINENO: no longer has the integer attribute, since it does not take
-         arithmetic expressions on assignment (use $((expr)) instead)
-
-lib/readline/mbutil.c
-       - _rl_find_prev_utf8char: new function, uses the structure of UTF-8
-         characters to find the start of the previous one no matter where we
-         start: at the beginning of the next character, at the end of a
-         multibyte character, or in the middle of a multibyte character.
-         EXPERIMENTAL
-       - _rl_find_prev_mbchar_internal: for now, call _rl_find_prev_utf8char
-         if we are in a UTF-8 locale. EXPERIMENTAL
-                                  
-                                  4/15
-                                  ----
-lib/readline/mbutil.c
-       - _rl_utf8_mblen: changes to handle invalid multibyte sequences better,
-         even when N means that the sequence would be too short anyway
+parse.y,builtins/set.def
+       - changes for minimal config restrictions
 
-examples/loadables/csv.c
-       - csv: new loadable builtin to parse a line of csv data and store it
-         into an array supplied as an argument
+configure.ac,config.h.in
+       - --enable-translatable-strings: new configuration option to allow
+         $"..." support to be compiled in or out; not included in the minimal
+         shell configuration
 
-                                  4/16
-                                  ----
-examples/loadables/cut.c
-       - cut: new loadable builtin
-       - lcut: new builtin that does what cut does but on a string supplied
-         as an argument (only one string for now)
+shell.c
+       - main: don't include any of the dump-strings options if
+         TRANSLATABLE_STRINGS is not defined
 
-                                  4/17
-                                  ----
-jobs.h
-       - FORK_SYNC,FORK_ASYNC,FORK_NOJOB: new flag values for the second
-         argument to make_child
+lib/sh/shquote.c
+       - sh_backslash_quote_for_double_quotes: needed for translatable strings
 
-jobs.c
-       - make_child: now takes a set of flags as the second argument
+parse.y
+       - support for translating $"..." strings now conditional on
+         TRANSLATABLE_STRINGS
 
-execute_cmd.c
-       - make_child: change callers to pass FORK_ASYNC instead of a non-zero
-         value as the second argument
+locale.c
+       - locale_expand: now conditional on TRANSLATABLE_STRINGS
 
 subst.c
-       - make_child: change callers to pass FORK_ASYNC instead of a non-zero
-         value as the second argument
+       - expand_string_dollar_quote: support for $"..." now conditional on
+         TRANSLATABLE_STRINGS
 
-doc/{bash.1,bashref.texi}
-       - document that the words in a compound array assignment undergo all
-         the shell word expansions, including filename generation and word
-         splitting. From a report from E. Choroba <choroba@matfyz.cz>
+doc/bashref.texi
+       - --enable-translatable-strings: document new configuration option
 
-                                  4/18
+                                  12/2
                                   ----
 subst.c
-       - command_substitute: use JOB_CONTROL instead of INTERACTIVE in the
-         test to determine whether or not to give the terminal back to
-         pipeline_pgrp
-
-jobs.c
-       - make_child: if FORK_NOTERM is set in the flags argument, don't call
-         give_terminal_to
+       - verify_substring_values: now that the default compatibility level is
+         52, and the Q_ARITH code is enabled, make the EXP_EXPANDED flag for
+         evalexp() dependent on the compatibility level
+       - param_expand: arithmetic substitution: make EXP_EXPANDED flag
+         for evalexp() dependent on the compatibility level
+       - expand_word_internal: don't call expand_array_subscript if the
+         shell compatibility level is 51 or below (Q_ARITH)
 
-{jobs,nojobs}.c,jobs.h
-       - wait_for: now takes a second argument, a flags word
+test.c
+       - test_unop: if the shell compatibility level is > 51, using [@] with
+         an existing associative array will report on a key of `@'
 
-{execute_cmd,subst}.c
-       - wait_for: change all callers to add second argument to wait_for
+arrayfunc.c
+       - array_expand_index: if the compatibility level is > 51, Q_ARITH is
+         used and we don't pass EXP_EXPANDED to evalexp()
 
-jobs.c
-       - wait_for: if JWAIT_NOTERM is set in the flags argument, don't call
-         give_terminal_to
+COMPAT,doc/bashref.texi
+       - shell compatibility mode: document effects of setting the
+         compatibility mode to 51
 
-                                  4/19
+                                  12/3
                                   ----
-subst.c
-       - command_substitute: block SIGINT around call to read_comsub, so we
-         let any interrupts affect the command substitution. Fixes issue
-         reported by DALECKI Léo <leo.dalecki@ntymail.com>
+lib/malloc/malloc.c
+       - mremap: only use if MREMAP_MAYMOVE is defined, since we use the Linux
+         version of the function signature
 
-hashcmd.h
-       - FILENAME_HASH_BUCKETS: increase to 256
+                                  12/6
+                                  ----
+bashhist.c
+       - bash_add_history: if we're parsing a here-document (PST_HEREDOC), only
+         suppress adding the newline between lines if we're not at the first
+         line of the here-document (here_doc_first_line != 0). From a report
+         by S0AndS0 <strangerthanbland@gmail.com>
 
-assoc.h
-       - ASSOC_HASH_BUCKETS: new define, set to 1024
+                                  12/8
+                                  ----
+lib/readline/colors.c
+       - _rl_custom_readline_prefix: use STREQN to check for the extension
+         string in $LS_COLORS, since it's not necessarily null-terminated.
+         From https://savannah.gnu.org/patch/?10158
 
+                                  12/10
+                                  -----
 variables.c
-       - make_new_assoc_variable,make_local_assoc_variable: call assoc_create
-         with ASSOC_HASH_BUCKETS as argument. This changes the hash function
-         and how the array keys are ordered (which is not guaranteed)
-
-builtins/read.def
-       - read_builtin: in posix mode, or if the read call returns -1/EINTR,
-         don't call run_pending_traps until the read command returns. This
-         allows a trap action to see the same exit status that the read
-         builtin would return when it exits on a signal (e.g., SIGINT == 130).
-         From a suggestion by <gentoo_eshoes@tutanota.com>
-
-                                  4/20
-                                  ----
-hashlib.c 
-       - hash_rehash: function to rehash a table, after increasing or decreasing
-         the number of buckets. From patches from Thomas Kremer
-         (https://savannah.gnu.org/patch/?9850) and Koichi Murase
-         <myoga.murase@gmail.com>
-       - hash_grow,hash_shrink: grow or shrink a hash table by a factor of
-         HASH_REHASH_MULTIPLIER (4)
-       - hash_insert,hash_search: call hash_grow if necessary
+       - set_int_value,set_string_value: broke common code for setting int
+         and string dynamic variable values out into separate functions;
+         changed all callers to use them where appropriate. set_int_value
+         takes a flags argument saying whether or not to force the integer
+         attribute on
+       - assign_random: store the value assigned as the variable value so
+         things like RANDOM=42; RANDOM+=7 generate consistent sequences
+         like in ksh93
+       - assign_seconds: store the value assigned as the variable value so
+         things like SECONDS=42 ; SECONDS+=7 generate what's expected
+
+doc/Makefile.in
+       - changes to allow man pages that include others (.so FN) to be built
+         outside the source tree
 
+                                  12/13
+                                  -----
 arrayfunc.c
-       - convert_var_to_{array,assoc}: if the original variable had no value
-         (it was unset), the array variable should be unset as well. Reported
-         by andrej@podzimek.org
+       - assign_array_element_internal: take an additional argument: char **NVALP.
+         If non-null, it gets the value eventually assigned to the array
+         element
+       - assign_array_element: take an additional NVALP argument; pass it to
+         assign_array_element_internal
 
-                                  4/21
-                                  ----
-bashline.c
-       - set_saved_history: change logic used to decide where in the history
-         operate_and_get_next should start by using a logical offset into the
-         history list that is an offset from history_base. This avoids having
-         to take whether or not the history is stifled and full into account.
-         Report and fix from Greg Price <gnprice@gmail.com>
-       - operate_and_get_next: just calculate the logical offset of where we
-         should be in the history instead of an absolute offset
+arrayfunc.h
+       - assign_array_element: new extern function declaration
 
-lib/readline/input.c
-       - _rl_nchars_available: new function, returns the number of characters
-         available to be read if FIONREAD is available
+{subst,variables}.c,builtins/{common.c,declare.def}
+       - assign_array_element: change callers
 
-                                  4/22
-                                  ----
-lib/readline/{readline.c,rlprivate.h}
-       - _rl_pending_command: new struct to hold information about a pending
-         command for readline to execute when the current command completes.
-         A command can set this up so that it gets executed like a
-         continuation before redisplay
+subst.c
+       - parameter_brace_expand_rhs: for the ${param:=value}, use the value
+         returned by assign_array_element in NVALP as the return value, since
+         it's the value ultimately assigned to the variable after possible
+         modification (e.g., arithmetic evaluation). Reported by
+         oguzismailuysal@gmail.com after flawed fix applied 11/16
 
-lib/readline/readline.c
-       - readline_internal_charloop: after _rl_dispatch returns, check
-         _rl_command_to_execute, and, if it's non-zero, redisplay and then
-         execute it as a command
-       - added a small set of library-private functions for managing the
-         executing key sequence (not used yet)
+                                  12/14
+                                  -----
+arrayfunc.h
+       - array_eltstate_t: an object that encapsulates an array element's
+         state (type, index, key, value) whether it's an indexed or
+         associative array
 
-lib/readline/isearch.c
-       - _rl_isearch_dispatch: if we have found an opcode or have added a
-         character to the search string and searched for it, reset the keymap
-         and okeymap members of the search context in preparation for reading
-         another key sequence/opcode
-       - _rl_isearch_dispatch: if we read a key sequence bound to an editing
-         command that is not an `opcode', set up _rl_command_to_execute to
-         execute it after the searching returns and arrange to break out of
-         the search
-       - _rl_isearch_dispatch: if we paste in text from bracketed paste, set
-         the mark as active so we can highlight it when we display the search
-         string
-       - _rl_isearch_dispatch: if we've found the search string, activate the
-         mark and set rl_point and rl_mark so the search string is highlighted
-         when we display the search results
-       - _rl_isearch_dispatch: do translation for keys that map to
-         rl_do_lowercase_version like we do when dispatching while reading a
-         key sequence
+arrayfunc.c
+       - {init,flush}_eltstate: new functions to initialize and flush any
+         allocated memory from array_eltstate_t objects. No allocation/
+         deallocation functions yet; the only use is with a static instance
+       - assign_array_element_internal: take an array_eltstate_t * instead of
+         a char ** as the final argument, so we can return keys/indices and
+         values depending on the type of array; populates it with the
+         appropriate values
+       - assign_array_element: take array_eltstate_t * as final argument
+         instead of a char **; pass it to assign_array_element_internal
+
+{subst,variables}.c,builtins/{common.c,declare.def}
+       - assign_array_element: change callers to modify final argument
 
-                                  4/23
-                                  ----
-lib/readline/isearch.c
-       - _rl_isearch_dispatch: if bracketed paste mode is enabled and there are
-         enough characters waiting in the terminal's input queue, try to read
-         the bracketed paste prefix and jump straight to the opcode execution
-         if we read it. Otherwise, just go on with the ESC. Inspired by report
-         from <gentoo_eshoes@tutanota.com>
+                                  12/15
+                                  -----
+arrayfunc.c
+       - array_value_internal: now takes an array_eltstate_t * as the final
+         argument; there is no more `rtype' argument in favor of the
+         `subtype' member; returns the appropriate values in its members
+       - array_value: changed to pass array_eltstate_t to array_value_internal,
+         saves and fetches its `ind' member into *indp; saves `subtype'
+         member into *rtype
+       - get_arrary_value: changed to take array_eltstate_t as third argument,
+         passes it to array_value_internal
+
+{redir,expr}.c
+       - get_array_value: changed callers; initializing the array_eltstate_t
+         argument as necessary
 
-parse.y
-       - parse_comsub: posix-mode shells don't allow a closing right paren to
-         delimit a pending here-document -- it requires the newline
+test.c
+       - test_builtin: changed to use get_array_value, adding AV_ALLOWALL to
+         the flags, since it didn't use any QUOTED argument. Pass
+         array_eltstate_t * as final argument and get subtype from it (the
+         only thing we're interested in, to deallocate memory)
 
-doc/bashref.texi
-       - POSIX mode: updated posix mode description with the new here-document
-         delimiter requirement
+                                  12/16
+                                  -----
+arrayfunc.c
+       - array_value: now takes a final argument of array_eltstate_t *, which
+         it passes to array_value_internal; no more rtype and indp args.
+         Callers are responsible for marshalling values into estatep
 
-lib/readline/search.c
-       - _rl_nsearch_dispatch: if bracketed paste mode is enabled, and we read
-         an ESC, try to see if we have a bracketed paste op and insert the
-         pasted next. If we don't, go on with the ESC
-       - _rl_nsearch_dosearch: experimental code to highlight the search string
-         when displaying the line found in the history. Only done when we are
-         not searching for a pattern, since we don't have information on the
-         end of the matching portion of the line. Experimental because it
-         changes where we put point and mark if searching is successful
+arrayfunc.h
+       - array_value: changed function signature
 
-expr.c
-       - expr_streval: if find_variable for the case where the string is not
-         an array reference doesn't find anything, see if we can find
-         something by using find_variable_last_nameref and use the value
-         from there in the call to expr_streval, kind of using the expression
-         recursion to complement the nameref recursion. Report from
-         Daniel Molina <lluvia@autistici.org>
+subst.c
+       - get_var_and_type,parameter_brace_expand_word: changed calls to
+         array_value to use array_eltstate_t argument and initialize it
+         appropriately. Copy values back from it to the parameters we need
+         to modify
 
-                                  4/24
-                                  ----
-jobs.c
-       - {start,stop}_pipeline: don't reset pipeline_pgrp to 0 if it's already
-         the same as shell_pgrp, since we don't want to reset it in the middle
-         of a shell started to run a command or process substitution (after
-         forking a child to run one command, but before forking another, for
-         instance). Reported by Rob Landley <rob@landley.net>
+variables.c
+       - assign_lineno: call set_int_value to store the value, like with
+         RANDOM and SECONDS (from 12/10)
 
-                                  4/27
-                                  ----
-parse.y
-       - function_def: break the productions starting with `function' without
-         `()' into two productions to avoid a shift-reduce conflict. Report
-         and patch from Dale R. Worley <worley@alum.mit.edu>
+                                  12/17
+                                  -----
+{eval,execute_cmd}.c
+       - when bypassing a parsed command because read_but_dont_execute is
+         set, don't modify last_command_exit_value. From a report by
+         Robert Elz <kre@munnari.OZ.AU>
 
-variables.h
-       - localvar_inherit: add extern declaration here
+parse.y
+       - parse_comsub: make sure the first call to shell_getc to check whether
+         or not it's an arithmetic expansion skips a quoted newline. From a
+         report by Robert Elz <kre@munnari.OZ.AU>
 
+                                  12/21
+                                  -----
 subst.c
-       - shell_expand_word_list: take out change from 3/17 to pass -I to
-         make_internal_declare; it generates errors the user will find
-         confusing if there is a variable with the same name but a different
-         type at a previous scope
-       - shell_expand_word_list: check for and note whether or not -I is
-         supplied to the declaration command, since it changes the default
-         behavior of a compound assignment without -a or -A
-       - shell_expand_word_list: if we have a compound assignment that is an
-         argument to a declaration command, but there are no options supplied
-         to the command that determine the type of the array, make sure we
-         call make_internal_declare with either -a (no localvar_inherit or -I)
-         or at least -- (if we are inheriting), because  we don't want the
-         declare to get skipped before we perform the word assignment. Fixes
-         bug reported by Ross Goldberg <ross.goldberg@gmail.com>
+       - parameter_brace_remove_pattern,parameter_brace_patsub,parameter_brace_casemod,
+         parameter_brace_transform,parameter_brace_substring: now take an
+         array_eltstate_t * argument in place of the arrayind_t argument, pass
+         it to get_var_and_type; this generalizes the indexed array behavior
+         of expanding array subscripts once to associative arrays via an
+         eventual call to array_value_internal with a non-null KEY member
+       - get_var_and_type: now takes an array_eltstate_t * argument in place
+         of the arrayind_t argument; use it in calls to array_value so we
+         can only expand array subscripts once whether they are indexed or
+         associative arrays
+       - parameter_brace_expand_word: take an array_eltstate_t * argument in
+         place of the arrayind_t * argument; pass it to array_value; use a
+         static version (which we init and flush) if the argument passed is
+         NULL so we can get the right state passed back and forth
+       - parameter_brace_expand: pass a pointer to a static array_eltstate_t
+         to parameter_brace_expand_word, and use that in the various calls to
+         parameter_brace_XXX functions that perform specific expansions in
+         place of the old arrayind_t argument; make sure to flush it before
+         returning, even on errors
 
-                                  4/28
-                                  ----
-subst.c
-       - expand_declaration_argument: new function, broke code that handles
-         compound assignments that are arguments to declaration commands out
-         of shell_expand_word_list into this function. No functional change
-         yet
+                                  12/22
+                                  -----
+{trap,variables}.c
+       - internal_warning: calls changed to use translatable strings
+         consistently
 
-                                  4/29
-                                  ----
-subst.c
-       - expand_compound_assignment_word: helper function for
-         expand_declaration_argument: takes NAME[+]=( VALUE ), converts VALUE
-         to a list of words, then single-quotes each word and reconstructs
-         the original word. This assumes the result will go to
-         do_word_assignment, which will remove the single quotes
-       - expand_oneword: helper function for expand_compound_assignment_word,
-         takes VALUE and performs the splitting into words, and then the
-         expansion and single-quoting of each individual word. Indexed and
-         associative arrays take different code paths, because they undergo
-         different expansions and associative arrays need special handling to
-         avoid having to scan for the end of the subscript multiple times
-       - expand_declaration_argument: call expand_compound_assignment_word to
-         get the expansion-before-calling-builtins word expansion sequence
-         correct. Better fix for for bug report from Kevin Locke
-         <kevin@kevinlocke.name>,
-         https://savannah.gnu.org/support/index.php?109669
+error.[ch]
+       - internal_debug: new function, prints a message like internal_warning,
+         no-op if DEBUG is not defined
+       - INTERNAL_DEBUG: macro that expands to internal_debug when DEBUG is
+         defined, and nothing otherwise
 
-arrayfunc.c
-       - quote_array_compound_word: take [IND]=VALUE and convert it to
-         ['IND']='VALUE'. Called by quote_compound_array_list for each word
-         in the list
-       - expand_and_quote_assoc_qword: take [KEY]=VALUE and convert it to
-         ['expanded-key']='expanded-value' (or VALUE to 'expanded-value').
-         Called by subst.c:expand_oneword() for each word in the list
-       - quote_compound_array_list: take a list of words and convert each
-         [IND]=VALUE to ['IND']='VALUE' (or just 'VALUE' if there is no
-         [IND]=). Used for indexed arrays
+{jobs,trap}.c
+       - changed some internal_warning and internal_inform calls to use
+         internal_debug, since they were active only when DEBUG is defined
 
-arrayfunc.h
-       - expand_and_quote_assoc_word,quote_compound_array_list: new extern
-         declarations
+parse.y
+       - parse_comsub: add internal_debug call when a command substitution
+         ends with unterminated here-documents
 
-                                  4/30
-                                  ----
-doc/{bashref.texi,bash.1}
-       - rework description of reserved words a little; add a reserved words
-         node to bashref.texi. Based on a report from Dale R. Worley
-         <worley@alum.mit.edu>
+builtins/common.c
+       - number_of_args: unconditionally return posparam_count
 
-builtins/history.def
-       - history_builtin: if the shell is restricted, don't allow pathnames
-         with slashes to be read or written. From a report from
-         Diffie <nano@mm.st>
+{jobs,execute_cmd,subst}.c,parse.y,builtins/{command.def,evalstring.c}
+       - INTERNAL_DEBUG: use instead of calls to itrace protected by #ifdef
+         DEBUG
 
-shell.c
-       - maybe_make_restricted: add HISTFILE to the list of readonly variables
+                                  12/26
+                                  -----
+lib/glob/glob.c
+       - glob_always_skip_dot_and_dotdot: initialize to 1 (enabled)
 
-doc/{bashref.texi,bash.1}
-       - document new restricted shell restrictions
+builtins/shopt.def
+       - globskipdots: new shell option, exposes glob_always_skip_dot_and_dotdot
 
-                                   5/1
-                                   ---
-jobs.c
-       - wait_for: don't try to give the terminal to shell_pgrp if JWAIT_NOTERM
-         is set in the flags argument
+doc/{bash.1,bashref.texi}
+       - globskipdots: document new shell option
+
+execute_cmd.c
+       - fix_arrayref_words: call valid_array_reference with 0 for third arg
+         because the words have not undergone any word expansions yet and
+         the quotes are still present. This makes things like
+               A=[\[]=set
+               unset A[\[]
+         work
 
 subst.c
-       - command_substitute: call make_child with FORK_NOTERM flag so it
-         doesn't try to set the terminal's process group
-       - command_substitute: call wait_for with JWAIT_NOTERM so it doesn't
-         try to set the terminal's process group
-       - command_substitute: now that wait_for doesn't try to reset the
-         terminal's process group, remove the code that tries to clean up
-         after that
+       - word_list_split: if a word undergoes word splitting but is not
+         changed, preserve any W_ARRAYREF flag into the new word. This makes
+         things like
+               rkey=']'
+               unset A[$rkey]
+         work because the unset builtin sees the W_ARRAYREF flag on its
+         argument
 
-                                   5/4
-                                   ---
-doc/bash.1
-       - make sure to mention /etc/inputrc as the ultimate default readline
-         init file, like other documentation does. Update from
-         Greg Price <gnprice@gmail.com>
+                                  12/29
+                                  -----
+builtins/common.h
+       - SET_VFLAGS: take a set of word flags, and set flags for use with
+         valid_array_reference (vflags) and assign_array_element/bind_int_variable
+         (bindflags) based on those flags and the setting of assoc_expand_once
+         (moved from read.def and generalized)
 
-lib/readline/readline.c
-       - if the private startup hook function variable _rl_internal_startup_hook
-         is set, execute that after any user-specified startup hook
+arrayfunc.c
+       - array_variable_name: now exclusively takes AV_xxx flags; understands
+         how to translate AV_NOEXPAND to the right flag for skipsubscript;
+         understands AV_ONEWORD and AV_NOEXPAND
+       - array_variable_part: just passes the FLAGS arg to array_variable_name
+       - assign_array_element: translates ASS_ flags to AV_ flags for
+         array_variable_name
+       - array_value_internal: now just passes flags straight through to
+         array_variable_part (which sends them to array_variable_name)
 
-lib/readline/rlprivate.h
-       - _rl_internal_startup_hook: new extern declaration
+builtins/common.[ch]
+       - builtin_bind_var_to_int: now takes a new FLAGS third argument; passes
+         it to bind_var_to_int
 
-bashline.c,lib/readline/{misc.c,readline.h}
-       - operate_and_get_next: moved to rl_operate_and_get_next so it's
-         available to all readline programs, uses _rl_internal_startup_hook.
-         Based on patch from Greg Price <gnprice@gmail.com>
+builtins/printf.def
+       - printf_builtin: use SET_VFLAGS to set flags for builtin_bind_variable
+         (bindflags); makes things like
+               declare -A A; key=']' ; printf -v A[$key] "foo"
+         work without a subscript error as long as assoc_expand_once is defined
 
-lib/readline/funmap.c
-       - "operate-and-get-next": now a bindable readline command
+builtins/read.def
+       - read_builtin: use new common version of SET_VFLAGS instead of
+         private version; changed to use new calling sequence; makes things like
+               declare -A A; key=']' ; read A[$key] <<<"foo"
+         work without a subscript error as long as assoc_expand_once is defined
 
-lib/readline/emacs_keymap.c
-       - rl_operate_and_get_next: bound to ^O in emacs mode by default
+builtins/wait.def
+       - wait_builtin: use SET_VFLAGS for variable name with -p option
+       - wait_builtin: call builtin_bind_var_to_int with new bindflags third
+         argument
 
-doc/bash.1,lib/readline/{readline.3,rluser.texi}
-       - operate-and-get-next: move to readline section of the manuals, out of
-         bash-specific functions section
+expr.c
+       - expr_streval: just pass TFLAG (AV_xxx flags) straight through to
+         array_variable_part
 
-                                   5/5
-                                   ---
-hashlib.c
-       - hash_string: use a series of shifts and adds to avoid a multiply by
-         FNV_PRIME. From Landon Curt Noll's FNV web page
+variables.c
+       - bind_int_variable: translate the assignment flags (ASS_xxx) to
+         VA_xxx flags for valid_array_reference calls (ASS_ONEWORD); translate
+         assignment flags to AV_xxx flags for array_variable_part
 
-builtins/fc.def
-       - fc_gethist,fc_gethnum: now take an additional argument indicating the
-         operating mode: if the arg is 1, fc is listing commands; if it is 0,
-         fc is executing commands. Affects how -0 is handled (fc_gethnum
-         returns -1). Changed callers to handle the return value appropriately.
-         Report from Jason Franklin <jason.franklin@quoininc.com> about
-         seg fault and core dump
-       - fc_builtin: if fc_gethnum returns < 0 when setting histbeg or histend,
-         report a range error
-
-doc/bash.1,lib/readline/doc/hsuser.texi
-       - fc: document how 0 and -0 are treated for listing and executing
+                                  12/30
+                                  -----
+subst.c
+       - parameter_brace_expand: when expanding an indirect variable, extend
+         the special case for array[@] and array[*] (set -u/no positional
+         parameters, obeying the baroque quoting rules) to the value of the
+         indirection. Report and fix from konsolebox <konsolebox@gmail.com>
 
-shell.c
-       - run_one_command: call parse_and_execute with SEVAL_RESETLINE so the
-         line number gets set to 1. Reported by Rob Landley <rob@landley.net>
+                                  12/31
+                                  -----
+parse.y
+       - compound_list: when parsing a compound_list production, collect any
+         pending here-documents after reading a newline, not after reading
+         any command terminator. Fixes interactive-only prompting bug
+         reported back in 8/2021 by Hyunho Cho <mug896@gmail.com>
 
-                                   5/8
+                                1/1/2022
+                                --------
+bashline.c
+       - set_filename_quote_chars: break code that modifies
+         rl_filename_quote_characters based on whether DIRNAME needs to be
+         expanded from bash_directory_completion_hook into its own function
+       - bash_check_expchar: break code that checks whether DIRNAME will be
+         word expanded from bash_directory_completion_hook into its own
+         function 
+       - bashline_reset,attempt_shell_completion: make sure complete_fullquote
+         is set to 1 (as it is by default) in case a completion modifies it
+       - bash_quote_filename: if we are completing (but not expanding --
+         direxpand is unset) and backslash-quoting a filename with expansion
+         characters as determined by bash_check_expchar, make sure
+         filename_bstab is set not to include the expansion char (and any
+         following char and closer) and set complete_fullquote to 0 so
+         sh_backslash_quote uses filename_bstab. Fixes the longstanding issue
+         of quoting a `$', for instance, if the rest of the filename contains
+         any characters that need quoting in filenames. This assumes that the
+         filename is unquoted (*QCP == 0) so the word will be expanded and is
+         not part of the filename (if needed, we can use file_exists to check
+         whether the expansion characters are actually part of the filename)
+
+                                   1/7
                                    ---
-support/config.{guess,sub}
-       - update to latest versions
+examples/loadables/accept.c
+       - new -b bindaddr option to bind to a specific IP address
+       - move setsockopt calls before bind() to avoid TIME_WAIT issues. Fixes
+         from Dzogovic Vehbo <dzove855@gmail.com>
 
+                                  1/10
+                                  ----
 configure.ac
-       - add support for `genode' from Emery Hemingway <ehmry@posteo.net>
+       - bumped version to 5.2-alpha.
 
-                                  5/14
+                                  1/16
                                   ----
-test.c
-       - term: fix case where an argument that looks like a unary operator,
-         but doesn't have enough tokens left to have an argument to that
-         operator, was not being treated as a one-argument test. Affects
-         only uses of test with four and greater arguments, which posix says
-         are unspecified. This is a bug, or at least an incompatibility, at
-         least 30 years old.
-       - test_command: if there are unconsumed arguments, call test_syntax_error
-         with a `syntax error' argument if the first remaining argument starts
-         with a `-'. Better than a generic `too many arguments' error
 
-                                  5/19
+tests/{unicode1,glob2,intl2}.sub, tests/run-intl
+       - minor changes to add warnings for missing locales that cause test
+         failures
+
+                                  1/17
                                   ----
-configure.ac,config.h.in
-       - getrandom: add test, define HAVE_GETRANDOM
-       - getentropy: add test, define HAVE_GETENTROPY
+parse.y
+       - history_delimiting_chars: if we have a blank line by the time we
+         hit the end of the tests, return a semicolon for the first blank
+         line to avoid running lines of a multi-line command together.
+         Fixes bug reported by Joakim Lindblad <joakim@cb.uu.se>
+
+subst.c
+       - expand_string_for_patsub: expand the replacement string for pattern
+         substitution assuming that it will eventually be passed to
+         strcreplace to replace `&' with the matched portion of the string.
+         This calls expand_string_for_pat(), which leaves the string quoted
+         and does not perform word splitting, then calls
+         quote_string_for_repl to post-process the expanded string.
+       - quote_string_for_repl: perform quote removal on passed string while
+         replacing CTLESC escaping a `&' or a backslash with a backslash. The
+         result must be passed to strcreplace
+       - parameter_brace_patsub: call expand_string_for_patsub if
+         patsub_replacement is set to quote 
 
-variables.c
-       - get_urand32: use getrandom; provide imperfect emulation that uses
-         getentropy if available, and falls back to reading /dev/urandom if
-         that's not available. The idea is to use /dev/urandom as little as
-         possible
+                                  1/18
+                                  ----
+subst.c
+       - read_comsub: make istring_index a size_t to avoid overflow with very
+         large values of istring_size.
+         From https://savannah.gnu.org/support/index.php?110596
+       - expand_word_internal: make istring_index a size_t
 
-                                  5/20
+                                  1/20
                                   ----
-configure.ac
-       - updated version to 5.1-alpha
+buitins/cd.def
+       - add a description of `cd -' to the help text. Suggested by
+         Rob Landley <rob@landley.net>
 
-lib/readline/readline.h
-       - updated defines to readline version 8.1
+                                  1/21
+                                  ----
+lib/glob/glob.c
+       - glob_vector: if we allocate NEXTLINK using malloc, and free it due to
+         some allocation failure, reset FIRSTMALLOC to avoid duplicate frees
+         later on
 
-variables.c
-       - brand: if shell_compatibility_level is 50 or below, don't xor the
-         top and bottom halves of the 32-bit random number together, since
-         previous versions did not
+subst.[ch]
+       - sub_append_string: the INDX parameter is now a size_t to avoid
+         overflow
 
-                                  5/21
-                                  ----
-COMPAT
-       - overhauled and updated the descriptions of the various shopt compatNN
-         options
+parse.y
+       - decode_prompt_string: RESULT_INDEX is now a size_t to pass to
+         sub_append_string
 
-doc/bashref.texi
-       - Shell Compatibility Mode: new section, describes compatibility levels,
-         BASH_COMPAT, and the various compatNN shopt options
+jobs.[ch],nojobs.c
+       - wait_for_background_pids: now returns the number of jobs/processes
+         reaped
 
-                                  5/23
-                                  ----
-doc/bash.1
-       - added Shell Compatibility mode section
+builtins/wait.def
+       - wait_builtin: if -p pid supplied without -n, make sure we do something
+         useful if no job/pid arguments are supplied and there are no jobs.
+         Reported by Oguz <oguzismailuysal@gmail.com>
 
-doc/{bash.1,bashref.texi}
-       - changed shopt section to list the compatibility options and refer
-         to Shell Compatibility Mode section
-       - BASH_COMPAT: overhauled the text, refers to Shell Compatibility Mode
-         section
+builtins/read.def
+       - read_builtin: if we have a timeout, use SIGALRM instead of select
+         when in posix mode, since we use read instead of zread. Fixes bug
+         reported by Andreas Schwab <schwab@linux-m68k.org>
 
-                                  5/27
+subst.c
+       - expand_string_dollar_quote: handle single-quoted and double-quoted
+         strings that might include $' and $" without attempting translation;
+         do more error checking for unterminated $' and $" that leaves those
+         characters unmodified. This is for use by readline's various line
+         expansion functions (shell_expand_line)
+
+                                  1/23
                                   ----
-variables.c,/lib/sh/random.c
-       - moved functions that manage 16-bit and 32-bit random values to
-         lib/sh/random.c
+parse.y,make_cmd.c
+       - revert change that unconditionally processes $'...' and $"..." in
+         here-document bodies; there are only a couple of cases where they
+         should be processed in a double-quote environment
 
-alias.c
-       - add_alias: don't bother checking null alias values for ending in
-         space or tab
+                                  1/24
+                                  ----
 
-braces.c,include/typemax.h
-       - move sh_imaxabs and overflow and underflow detection to typemax.h
-         so the expression evaluation code can use it in the future
+subst.c
+       - extract_dollar_brace_string: if we see another `${' on the rhs of
+         the operator, reset the dolbrace_state to DOLBRACE_PARAM while we
+         read this new ${...} string
+       - extract_heredoc_dolbrace_string: new function, variant of
+         extract_dollar_brace_string, to process the WORD in ${PARAM OP WORD}
+         while expanding lines of here-document data. It's complicated by the
+         requirement to add to the result string as we go along, since we
+         need to change the contents of the input string with ansi expansion
+         or locale translation.
+       - string_extract_single_quoted: take a new third argument: ALLOWESC.
+         This allows backslash to escape an embedded single quote, needed by
+         extract_heredoc_dolbrace_string to process $'...'; changed callers
 
-                                  5/28
+                                  1/25
                                   ----
-lib/readline/kill.c
-       - _rl_bracketed_read_mbstring: make sure to fill in mb[0] even if
-         the locale says MB_CUR_MAX == 1 in case a caller uses it. Partial
-         fix for bug reported by Phi Debian <phi.debian@gmail.com>
+parse.y
+       - parse_matched_pair: ansi-expand $'...' in WORD for ${PARAM OP WORD}
+         and single-quote the result if dolbrace_state == DOLBRACE_QUOTE
+         (posix pattern removal operators) even if extended_quote == 0
 
-lib/readline/vi_mode.c
-       - rl_vi_change_char: make sure _rl_vi_last_replacement gets filled in
-         in the case where MB_CUR_MAX == 1. Rest of fix for bug reported by
-         Phi Debian <phi.debian@gmail.com>
-       - _rl_vi_callback_change_char: same fix for _rl_vi_last_replacement
+subst.c
+       - extract_heredoc_dolbrace_string: add logic to align with parse.y:
+         parse_matched_pair and its $'...' expansion, including handling
+         extended_quote
 
-                                  5/29
+                                  1/27
                                   ----
-lib/malloc/malloc.c
-       - __P -> PARAMS
-       - union mhead: now 16 bytes to force 16-byte alignment; extra 8 bytes
-         at the end of struct minfo to use for guard bytes. Enabled if
-         pointers are 64 bits (SIZEOF_CHAR_P == 8)
-       - if we have 64-bit pointers, prepopulate the 64-byte bin first instead
-         of the 32-byte bin (pointers and WORD_DESCs still fit into 32 bytes,
-         but WORD_LISTs are now 36 bytes with malloc overhead). We can still
-         split 64-byte blocks to satisfy 32-byte requests
-       - internal_malloc: fill in the new 8 mh_magic8 bytes with MAGIC1 guard
-         bytes
-       - internal_malloc: print a warning message if the returned pointer is
-         not aligned according to MALIGN_MASK
-       - internal_free: detect underflow by checking that mh_magic8 is full
-         of MAGIC1 bytes
-       - internal_realloc: detect underflow by checking that mh_magic8 is full
-         of MAGIC1 bytes
-
-lib/malloc/stats.c
-       - _print_malloc_stats: slight adjustment for better column alignment
-
-                                   6/1
-                                   ---
+builtins/evalstring.c
+       - should_optimize_fork: broke conditions for optimizing away the fork
+         for a simple command out of optimize_fork into new function, call
+         from should_suppress_fork and optimize_subshell_command. Call from
+         optimize_fork if (subshell_environment & SUBSHELL_PAREN), relying
+         on fact that CMD_TRY_OPTIMIZING is only set in a couple of specific
+         conditions
+       - optimize_fork: call should_suppress_fork only if startup_state == 2;
+         it does the extra checks for that specific case
+       - optimize_fork: call should_optimize_fork if we're in a (list)
+         subshell (subshell_environment & SUBSHELL_PAREN)
+       - optimize_subshell_command: set CMD_TRY_OPTIMIZING on the right side
+         of a `&&', `||', or `;' list as long as it's a simple command so
+         we can check with optimize_fork() when it's time to execute it
+
 execute_cmd.c
-       - execute_command_internal: treat a redirection failure with errexit
-         set as a command failure that exits the shell. Bug report from
-         Hyunho Cho <mug896@naver.com>
+       - execute_in_subshell: call optimize_subshell_command for (list)
+         subshells to either set CMD_NO_FORK for simple commands or set
+         CMD_TRY_OPTIMIZING for likely candidates for later optimization
 
-                                   6/3
-                                   ---
-redir.c
-       - redirection_error: takes a new argument, FN, which if non-NULL is
-         the filename to be used in the error message.
+builtins/common.h,builtins/evalstring.c
+       - optimize_fork: renamed to optimize_connection_fork; changed callers
+
+                                  1/31
+                                  ----
+include/shmbutil.h
+       - COPY_CHAR_I,SCOPY_CHAR_I: add check for locale_utf8locale and
+         (c & 0x80) as in other macros
 
-redir.[ch],builtins/evalstring.c
-       - redirection_error: changed extern declaration and callers
+lib/sh/shquote.c
+       - sh_backslash_quote_for_double_quotes: rewrote to use array indexing
+         and COPY_CHAR_I to make it easier to drop in future calls to
+         charvis() to make `unsafe' characters visible if FLAGS == 1
 
-redir.c
-       - do_redirection_internal: takes a new third parameter, FNP, a char **
-         to use (*FNP, if non-NULL) to store and return the expanded filename
-         for those redirections that take one
-       - do_redirections: pass a char ** (&fn) to do_redirection_internal to
-         get a pointer to the expanded filename; pass it to redirection_error
-         if appropriate. Free FN in any case, since do_redirection_internal
-         won't. Fix for double expansion of filename in certain redirections
-         reported by OÄuz <oguzismailuysal@gmail.com>
-
-                                   6/4
+                                   2/1
                                    ---
 parse.y
-       - parse_comsub: while we're reading a here-document, don't perform any
-         history expansion (set history_expansion_inhibited). Fixes issue
-         reported by "ladyrick" <ladyrick@qq.com>
+       - parse_comsub: if we are currently expanding aliases, temporarily
+         turn off alias expansion if we are not in posix mode so we defer
+         alias expansion until command_substitute(). Fixes double-expansion
+         bug reported by Martijn Dekker <martijn@inlv.org> and aligns with
+         https://www.austingroupbugs.net/view.php?id=1342
+       - xparse_dolparen: turn off alias expansion entirely while running the
+         parser: either we do it in parse_comsub (posix mode) or in
+         command_substitute (default mode)
+       - parse_string_to_command: ditto
+
+subst.c
+       - command_substitute: if we are expanding aliases, temporarily turn
+         off alias expansion if we are in posix mode, since we already
+         performed it in parse_comsub() and are using the command string
+         reconstituted from the parse result
 
-general.h,parse.y
-       - __P -> PARAMS
+doc/bashref.texi
+       - bash posix mode: add description of alias expansion and command
+         substitution parsing and execution
 
-shell.c
-       - shellstart: struct timeval used to initialize shell starting time;
-         shell_start_time now initialized from shellstart.tv_sec
+                                   2/4
+                                   ---
+lib/readline/rltty.c
+       - rl_deprep_terminal: set _rl_last_c_pos to 0 after outputting
+         BRACK_PASTE_FINI, since the last character in that is \r. Partially
+         address issue raised by Markus Schwarzenberg <markus.schwarzenberg@freenet.de>
+         in https://lists.gnu.org/archive/html/bug-bash/2022-02/msg00056.html
 
-variables.c
-       - assign_seconds: reset shellstart to set shell starting time
+                                   2/5
+                                   ---
+doc/{bash.1,bashref.texi}
+       - minor typo fixes from Helge Kreutzmann <debian@helgefjell.de>
 
-pcomplete.c
-       - include posixtime.h instead of <sys/time.h>
+                                   2/7
+                                   ---
+{arrayfunc,variables}.c
+       - ARRAY_EXPORT: changes to encode array and assoc variables using a
+         scheme similar to shell functions so we can export arrays and
+         differentiate them from scalar variables and differentiate array
+         and assoc variables. Still not enabled by default.
 
-lib/sh/{ufuncs,uconvert}.c
-       - include posixtime.h instead of the inline conditional includes
+variables.c
+       - mk_env_string: third argument is now the variable's attributes or 0,
+         with all the attributes we can export arrays
 
-aclocal.m4
-       - BASH_STRUCT_TIMEVAL: convert to use AC_COMPILE_IFELSE instead of the
-         deprecated AC_HEADER_EGREP
+lib/readline/bind.c
+       - active-region-start-color,active-region-end-color: new bindable
+         string variables, one to set the active region color (instead of
+         standout mode) and one to turn it off (instead of the "se" terminal
+         capability). They set _rl_active_region_start_color and
+         _rl_active_region_end_color variables via functions
 
-posixtime.h
-       - struct timeval: if HAVE_TIMEVAL is not defined, provide a replacement
-         definition
+lib/readline/display.c
+       - putc_face: if setting standout mode, check for both the start color
+         and end color variables and output the start color string. If turning
+         off standout mode (normal face), output the end color string. Both
+         variables must be set
 
-lib/sh/gettimeofday.c
-       - gettimeofday: replacement function, so we don't have to use
-         HAVE_GETTIMEOFDAY in the rest of the code
+lib/readline/{readline.c,rlprivate.h}
+       - declarations for _rl_active_region_start_color and
+         _rl_active_region_end_color
 
-                                   6/5
+                                   2/8
                                    ---
-{lots of files}.[ch]
-builtins/{lots of files}.{c,h,def}
-lib/glob/{lots of files}.[ch]
-lib/malloc/{lots of files}.[ch]
-lib/sh/{lots of files}.c
-include/{lots of files}.h
-examples/loadables/{lots of files}.c
-       - __P -> PARAMS
+bashline.c
+       - initialize_readline: add bindable name `vi-edit-and-execute-command'
 
-doc/{bash.1,bashref.texi}
-       - SECONDS: clarify that the number of seconds is always determined by
-         querying the system clock
+shell.c
+       - subshell_exit: make sure to set last_command_exit_value before
+         calling the exit trap. Fixes bug reported by Greg Edwards
+         <gedwards@ddn.com>
 
-                                   6/8
+                                   2/9
                                    ---
-configure.ac
-       - if CFLAGS is not supplied in the environment or on the command line,
-         add the gcc options that suppress warnings about parens and print
-         formats in a slightly different way that will avoid some collisions
-
-lib/readline/readline.c
-       - _rl_dispatch_subseq: don't set rl_last_func to rl_vi_arg_digit, just
-         the same as if it were rl_digit_argument. This allows functions like
-         rl_yank_last_arg, which behave differently when called multiple times
-         in a row, to work closer to what is expected. This allows what
-         Leo Alekseyev <dnquark@gmail.com> reported to work, with caveats
+lib/readline/{terminal.c,rlprivate.h}
+       - _rl_region_color_on,_rl_region_color_off: functions to output the
+         _rl_active_region_start_color and _rl_active_region_end_color
+       - _rl_reset_region_color: function to encapsulate setting the region
+         color to an arbitrary string, including doing memory management
 
-lib/readline/vi_mode.c
-       - rl_vi_yank_arg: make sure to pass `key' to rl_yank_nth_arg, in case
-         it needs to use it later
-       - rl_vi_redo: suppress attempts to redo `.' when the current keymap is
-         vi_movement_keymap, since that will recursively call vi_redo
+lib/readline/display.c
+       - putc_face: call _rl_region_color_on and _rl_region_color_off instead
+         of _rl_standout_on and _rl_standout_off
 
-                                  6/11
-                                  ----
-redir.c
-       - limit HEREDOC_PIPESIZE to 4096 on FreeBSD; that is where it can
-         handle atomic writes without hanging. Tested on FreeBSD 13
+lib/readline/terminal.c
+       - _rl_init_terminal_io: initialize _rl_active_region_start_color and
+         _rl_active_region_end_color from _rl_term_so and _rl_term_se,
+         respectively; reset every time the terminal is changed
+       - _rl_init_terminal_io: turn off the active region for a dumb terminal
 
-[bash-5.1-alpha frozen]
+lib/readline/bind.c
+       - sv_region_{start,end}_color: call _rl_reset_region_color with the
+         appropriate value for WHICH
 
-                                  6/15
+                                  2/10
                                   ----
-subst.c
-       - do_assignment_internal: call stupidly_hack_special_variables on the
-         name returned from the variable assignment, in case there was a
-         nameref expansion, and on the original name only if the assignment
-         returned NULL. Fixes bug reported by James D. Lin <jamesdlin@gmail.com>
+lib/readline/doc/{rluser.texi,readline.3},doc/bash.1
+       - active-region-start-color,active-region-end-color: documented new
+         bindable readline variables
+       - enable-active-region: document using active-region-start-color to
+         highlight the text in the region
 
-                                  6/16
+                                  2/11
                                   ----
-builtins/hash.def
-       - hash_builtin: don't print anything if the hash table is empty when
-         listing portably (-l) unless the shell compatibility level is <= 50
-         Issue originally raised by <beluro@web.de>
+parse.y
+       - read_token,read_token_word: make sure characters read by shell_getc
+         are protected by appropriate calls to MBTEST when testing for shell
+         metacharacters and operators
 
-                                  6/17
+                                  2/14
                                   ----
-pathexp.c
-       - glob_name_is_acceptable: extend GLOBIGNORE to ignore `.' and `..'
-         as a terminal pathname component instead of just ignoring filenames
-         that are `.' or `..'. From a suggestion by Ilkka Virta
-         <itvirta@iki.fi>
+builtins/shopt.def
+       - set_compatibility_level: if the current compatibility level is outside
+         the range of the compatNN options, just leave it alone when
+         unsetting one of the options (which by definition was already
+         unset). Fixes issue reported by Mihai Moldovan <ionic@ionic.de>
 
-                                  6/18
+                                  2/16
                                   ----
-po/Makefile.in.in
-       - MKINSTALLDIRS: deprecated, no longer in AM_INTL_SUBDIR, so we have
-         to create the variable manually
+lib/readline/search.c
+       - rl_history_search_{pos,len,flags}: rename to have a leading `_'
+       - _rl_history_search_pos: no longer static so other parts of readline
+         can see it
 
-lib/readline/doc/rltech.texi
-       - add descriptions of the active mark functions that are available to
-         applications. I guess they will remain public
+lib/readline/rlprivate.h
+       - _rl_history_search_pos: extern declaration
 
-subst.c
-       - valid_parameter_transform: new function, reject transformations
-         longer than a single character or invalid transformation operators
-       - parameter_brace_transform: call valid_parameter_transform
+lib/readline/readline.c
+       - readline_internal_teardown: don't run the undo list against the
+         current history entry if the non-incremental search functions have
+         set _rl_history_search_pos to it, since it doesn't reflect the
+         current contents of the line buffer. Fixes issue reported by
+         Andreas Schwab <schwab@linux-m68k.org>
 
-                                  6/22
+lib/readline/misc.c
+       - _rl_start_using_history: initialize _rl_history_search_pos to
+         something invalid so it doesn't match where_history()
+
+                                  2/17
                                   ----
-lib/sh/zread.c
-       - lbuf: bump size up to ZBUFSIZ (default 4096). From a report by
-         Jason A. Donenfeld <Jason@zx2c4.com>
+lib/readline/callback.c
+       - rl_callback_read_char: make sure _rl_eof_found is set to the value
+         of eof before calling the deprep terminal function, so it can do
+         different things based on whether the input code read EOF (or the
+         user entered the EOF character). From a gdb discussion started by
+         Andrew Burgess <aburgess@redhat.com> (still more to do, since this
+         is not part of the public API)
 
-lib/sh/zcatfd.c
-       - zcatfd: lbuf: bump size up to ZBUFSIZ (default 4096)
+                                  2/18
+                                  ----
+lib/readline/readline.h
+       - RL_STATE_EOF: new readline state value; set when readline reads an
+         EOF character on an empty line or a read returns an error
+       - rl_eof_found: new public variable
 
-lib/sh/zmapfd.c
-       - zmapfd: lbuf: bump size up to ZBUFSIZ (default 4096)
+lib/readline/rprivate.h
+       - _rl_eof_found: renamed to rl_eof_found, so not declared here
 
-                                  6/29
-                                  ----
-aclocal.m4
-       - BASH_FUNC_SBRK: changes for cross-compiling on FreeBSD variants,
-         from Jessica Clarke <jrtc27@jrtc27.com>
+lib/readline/{callback,readline}.c
+       - RL_STATE_EOF: set appropriately when readline gets an EOF. Suggested
+         by Andrew Burgess <aburgess@redhat.com>
+       - RL_STATE_EOF: make sure it's not set when readline starts
+       - rl_eof_found: set appropriately when readline gets an EOF
 
-xmalloc.c
-       - HAVE_SBRK: use #if instead of #ifdef so we only use it if we think
-         it works
+lib/readline/{callback,readline,rltty}.c
+       - rl_eof_found: new name for _rl_eof_found
 
-examples/loadables/finfo.c
-       - st_dev,st_nlink: cast to unsigned long, report from Jessica Clarke
-         <jrtc27@jrtc27.com> 
+lib/readline/doc/rltech.texi
+       - RL_STATE_EOF: document
 
-unwind_prot.c
-       - unwind_protect_mem_internal: make sure we allocate at least as many
-         bytes for an entire UNWIND_ELT. Fix from Jessica Clarke
-         <jrtc27@jrtc27.com>
+                                  2/19
+                                  ----
+parse.y
+       - parse_comsub: turn off parser state flags we don't want to inherit
+         into this call to the parser (PST_REGEXP, PST_EXTPAT, PST_CONDCMD,
+         PST_CONDEXPR for now). Fixes bug reported by konsolebox
+         <konsolebox@gmail.com>
 
-                                   7/1
-                                   ---
-eval.c
-       - alrm_catcher: use write(2) instead of fprintf to print the
-         auto-logout message to the terminal
+                                  2/23
+                                  ----
+findcmd.c,builtins/hash.def
+       - replace calls to is_directory with file_isdir, which only performs a
+         stat and doesn't do the eaccess call to check for an executable file
 
-jobs.c
-       - UNQUEUE_SIGCHLD: set queue_sigchld to 1 around call to waitchld(),
-         since it is not being called from a signal handler and so SIGCHLD is
-         not blocked. Fixes report by Godmar Back <godmar@gmail.com>
+findcmd.c
+       - find_in_path_element: takes a new RFLAGSP argument, an int * where
+         the status flags for the returned pathname are returned; saves
+         additional calls to stat/eaccess
+       - search_for_command: get the returned flags from
+         find_user_command_in_path so we don't need any additional calls to
+         file_status after we find the command in $PATH
 
-                                   7/2
-                                   ---
+                                  2/24
+                                  ----
 doc/{bash.1,bashref.texi}
-       - read: clarify that without any name arguments, the line assigned to
-         REPLY is not modified. From a question by M. Nejat AYDIN
-         <mnaydin@yahoo.com> with input from Eli Schwartz
-         <eschwartz@archlinux.org>
+       - FUNCTIONS: some small changes to the description of local variables
+         and dynamic scoping, with emphasis on how that affects `unset'
+         behavior. Inspired by a discussion with
+         Christoph Anton Mitterer <calestyo@scientia.net>
 
-                                   7/5
-                                   ---
-lib/readline/vi_mode.c
-       - _rl_vi_done_inserting: make sure to close out all undo groups when
-         leaving insert mode, so we don't have anything dangling.
-         Report and fix from David Fries <David@Fries.net>
+                                  2/25
+                                  ----
+examples/loadables/realpath.c
+       - renamed -s option to -q to align with other versions
+       - perform array assignment for `-a varname' even if -q option supplied  
+       - renamed -S option to -s for Linux compatibility
 
-                                   7/6
-                                   ---
-lib/readline/vi_mode.c
-       - _rl_vi_domove_motion_cleanup: the `c' and `C' commands should enter
-         insert mode even if the motion command doesn't delete any text.
-         From a report by David Fries <David@Fries.net>
-       - _rl_vi_done_inserting: add a missing rl_end_undo_group when
-         _rl_vi_doing_insert is set: there should be one begun by
-         rl_vi_start_inserting and one begun by the command (change or replace).
-         From a report by David Fries <David@Fries.net>
-       - rl_vi_replace: set _rl_vi_last_key_before_insert to 'R' explicitly,
-         since other code checks that and we want to allow users to rebind
-         this function
-
-                                   7/7
+                                  2/28
+                                  ----
+lib/readline/misc.c
+       - _rl_free_saved_history_line: call rl_free_undo_list, saving and
+         setting rl_undo_list to the saved history line's data, so the right
+         call to _hs_replace_history_data happens and we don't end up with
+         a pointer aliasing problem. Fixes core dump reported by 
+         Andreas Schwab <schwab@linux-m68k.org>, but does not make his
+         scenario equivalent to incremental search
+
+                                   3/1
                                    ---
-lib/readline/vi_mode.c
-       - rl_vi_{delete,change,yank}_to: if we have a non-null _rl_vimvcxt,
-         just reinitialize it so we don't have to allocate a new one. This is
-         a change primarily for callback mode, and fixes a memory leak
+lib/readline/search.c
+       - make_history_line_current: save the current line before replacing it
+         with the found history entry using rl_maybe_save_line
+       - noninc_dosearch: we don't want the saved history line, so free it
+         after calling make_history_line_current
+       - _rl_history_search_internal: call rl_maybe_replace_line after making
+         changes to the line buffer with make_history_line_current so we can
+         save the undo list we constructed before we set the history position
 
-builtins/evalstring.c
-       - optimize_shell_function: try to optimize away the fork in the last
-         command in a shell function body, under certain conditions
+                                   3/2
+                                   ---
+lib/readline/display.c
+       - expand_prompt: add missing piece to patch from 10/26/2021: if we are
+         recalculating the number of invisible characters on the first line
+         of the prompt, we need to update INVFL, even if we already set it
+         when we hit the number of physical characters. This ends up being
+         assigned to prompt_invis_chars_first_line, and is used in several
+         subsequent calculations. Reported by
+         Andreas Schwab <schwab@linux-m68k.org>
 
-execute_cmd.c
-       - execute_function: attempt to optimize away forks in a shell function
-         that is already marked NO_FORK and being executed in a command
-         substitution
+lib/readline/doc/{readline.3,rluser.texi},doc/bash.1
+       - enable-bracketed-paste: add some language making it clearer that
+         bracketed paste prevents the pasted text from being interpreted as
+         editing commands. Suggested by Karl O. Pinc <kop@karlpinc.com>
 
-                                   7/8
+                                   3/4
                                    ---
-{jobs,nojobs,trap,unwind_prot}.c,lib/malloc/{malloc,table}.c
-       - interrupt_immediately: remove, no longer used
+make_cmd.c
+       - make_here_document: perform quote removal on the here-doc delimiter
+         only if it's marked as quoted, which prevents quotes from inside a
+         command substitution from being removed (they're supposed to begin a
+         new quoting context) when the word itself isn't flagged as quoted
+         (which means the body of the here-document gets expanded). You can't
+         perform quote removal *and* expand the here-document lines. From an
+         austin-group discussion back in early February
+
+lib/sh/strvis.c
+       - charvis -> sh_charvis; change caller
+       - sh_charvis: now take an additional SLEN argument to avoid having to
+         compute the string length every time; change callers
+       - sh_charvis: add a utf-8 locale-specific check before calling
+         COPY_CHAR_I (in practice, doesn't make any real difference)
+
+                                  3/10
+                                  ----
+arrayfunc.c
+       - convert_var_to_array: if we're being asked to create an associative
+         array (flags & 2), and we have an existing variable that is not an
+         assoc array (and not an existing indexed array), call
+         convert_var_to_assoc to make it one
 
+                                  3/11
+                                  ----
 jobs.c
-       - waitchld: don't perform asynchronous notification if we are currently
-         executing a builtin (executing_builtin != 0). Inspired by a report
-         from Godmar Back <godmar@gmail.com>
+       - wait_for: don't call get_tty_state() if readline is dispatching
+         (RL_STATE_DISPATCHING) with the terminal settings changed
+         (RL_STATE_TERMPREPPED), the same way we don't if we are running a
+         command for programmable completion. Fixes bug with SIGINT reverting
+         to the saved readline terminal settings reported by
+         Markus Napierkowski <markus.napierkowski@cyberus-technology.de>
 
-                                   7/9
-                                   ---
-lib/readline/signals.c
-       - _rl_handle_signal: block SIGTTOU while handling a SIGTTOU, since we
-         no longer run this in a signal handling context where SIGTTOIU would
-         be blocked
+parse.y
+       - decode_prompt_string: make sure the expansion of \w, \W, and \s
+         are all run through sh_strvis before calling
+         sh_backslash_quote_for_double_quotes or just through sh_strvis if
+         we're not running the prompt string through word expansions.
+         Fixes issue reported by Josh Harcome <joshharc@gmail.com> back
+         in mid-January
 
-                                  7/14
+                                  3/16
                                   ----
-execute_cmd.c
-       - execute_simple_command: use new variable `cmdflags' instead of using
-         simple_command->flags directly; initialize from simple_command->flags
-       - check_command_builtin: take a simple command list of words starting
-         with `command' and including a command_word argument, and peel off
-         the `command' and any instances of `-p' and `--' and return the
-         updated list
-       - execute_simple_command: if the first word of the simple command is
-         `command', call check_command_builtin to peel off any `command' and
-         `-p' and `--' and go on to execute the rest of the words as a simple
-         command. If we're in posix mode, we've got the special builtins
-         handled before this runs. Fixes complaint about `command' in the
-         background running an extra bash process from Dmitry Alexandrov
-         <dag@gnui.org>
+bashline.c
+       - bash_quote_filename: if we have a word to complete that contains
+         characters that introduce a word expansion, make sure the passed
+         string does *not* exist as a filename before removing those
+         characters from the set that must be backslash-quoted. See change
+         from 1/1/2022
 
-                                  7/17
+                                  3/18
                                   ----
-doc/bash.1
-lib/readline/doc/{rltech,hstech,rluser}.texi
-lib/readline/doc/{readline,history}.3
-       - a few small tweaks to make the language gender-neutral
+lib/readline/search.c
+       - make_history_line_current: don't free rl_undo_list or
+         _rl_saved_line_for_history; don't unconditionally save the history
+         line. This reverts some of the changes to support setting the
+         history position in history-search-backward
+       - rl_history_search_internal: only free the saved history line if we
+         were the ones who created it
 
-                                  7/18
+                                  3/21
                                   ----
-subst.c
-       - expand_word_internal: case `:' make sure the shell is either not in
-         posix mode or W_TILDEEXP is set before turning on W_ITILDE. The old
-         code would turn it on unconditionally if the W_ASSIGNMENT flag was
-         set. Fixes bug reported by OÄuz <oguzismailuysal@gmail.com>
+lib/readline/nls.c
+       - xmalloc.h: include for systems without setlocale(), so xfree has a
+         prototype. Report and fix from András Kucsma <r0maikx02b@gmail.com>
 
-                                  7/20
-                                  ----
-builtins/complete.def
-       - replace macros used to print compspec actions, options, and other
-         info with a small set of functions that traverse the structs used
-         to hold that information and print everything instead of eumerating
-         each option and action separately. From a patch submitted by
-         Martin Kealey <martin@kurahaupo.gen.nz>
+lib/readline/search.c
+       - _rl_history_search_internal: use previous-history/next-history to
+         move to the found history line instead of directly calling
+         history_set_pos. This makes the behavior more similar to incremental
+         search
+       - rl_history_search_internal: make sure to set rl_undo_list to the
+         current history undo list around the calls to rl_get_previous_history
+         or rl_get_next_history, in order to fool the call to
+         maybe_replace_line they make
 
-                                  7/27
-                                  ----
-variables.c
-       - push_posix_tempvar_internal: restore $SHELLOPTS after restoring the
-         values of shell options saved by `local -' by calling set_shellopts().
-         Report from Grisha Levit <grishalevit@gmail.com>
+lib/readline/readline.c
+       - _rl_executing_func: the currently-executing readline command function
 
-flags.c
-       - reset_shell_flags: set histexp_flag to 0 and let bash_history_reinit
-         take care of setting history_expansion appropriately. Report and fix
-         from Grisha Levit <grishalevit@gmail.com>
+lib/readline/rlprivate.h
+       - _rl_executing_func: extern declaration
 
-                                  7/28
+lib/readline/search.c
+       - _rl_history_search_internal: removed (commented out) code that sets
+         the current history entry to the found history entry, too much
+         assumes that the current undo list should be applied to the current
+         history entry (where_history())
+
+                                  3/23
                                   ----
-general.c
-       - assignment: if (FLAGS & 1), we are parsing the contents of a compound
-         assignment, and a word must begin with a `[' and have a valid
-         subscript terminated by `]' before the `=' to be considered an
-         assignment statemen and subsequently expanded like one. Report from 
-         Alexey Izbyshev <izbyshev@ispras.ru>
+subst.c
+       - parameter_brace_expand_word: if we have double-quoted ${*} or ${@},
+         make sure we are setting W_HASQUOTEDNULL in the flags we return to
+         the caller if we are returning QUOTED_NULL(word)
+       - parameter_brace_expand_word: if we have a double-quoted associative
+         array reference using `*' or `@', make sure we are setting
+         W_HASQUOTEDNULL in the flags we return to the caller if we are
+         returning QUOTED_NULL(word)
+       - parameter_brace_expand: if we're using the `[:]+' word expansion
+         operator, we need to note a quoted null string and pass the
+         W_QUOTEDNULL flag back to the caller
+       - expand_word_internal: make sure to return a QUOTED_NULL
+         (word[0] == CTLNUL) back to the caller if HAD_QUOTED_NULL is set,
+         regardless of whether or not we see a quoted dollar at. Fix for bug
+         reported by Andreas Luik <andreas.luik@innovative-navigation.de>
 
-                                  7/30
+arrayfunc.c
+       - array_value_internal: fix typo and set estatep->type to ARRAY_INDEXED
+         for indexed arrays
+
+                                  3/31
                                   ----
-lib/glob/sm_loop.c
-       - BRACKMATCH: if the bracket expression is matching simple characters
-         and not a range, compare the character from the string and the
-         pattern directly, as required by Posix interp 948
+lib/readline/{history.c,histlib.h}
+       - _hs_at_end_of_history: convenience function to tell whether or not
+         the current history position is at the end of the history list
 
-lib/glob/smatch.c
-       - charcmp_wc: split off code that calls wcscoll from rangecmp_wc,
-         just return the results of wcscoll
-       - rangecmp_wc: call charcmp_wc and impose a total ordering
-         by performing a byte comparison (or wint_t comparison) of C1 and C2
-         as required by Posix interp 948 (charcmp_wc takes care of the
-         behavior of FORCECOLL)
-       - collequiv_wc: call charcmp_wc instead of rangecmp_wc
-       - charcmp: character comparison code from rangecmp
-       - rangecmp: call charcmp and impose total ordering as required by
-         Posix interp 948
-       - collequiv: call charcmp instead of rangecmp
-       - _fnmatch_fallback: ASCII version of fallback for equivalence classes
-         when there are no multibyte characters in the pattern; just calls
-         fnmatch with a reconstructed equivalence class pattern
-       - collequiv: call _fnmatch_fallback if charcmp returns non-zero and
-         the configure check indicates fnmatch has character class support.
-         Fixes issue reported by Harald van Dijk <harald@gigawatt.nl>
-
-                                   8/2
+                                   4/1
                                    ---
-lib/readline/signals.c
-       - _rl_handle_signal: since we're not called in a signal handler context
-         any more, we don't need to explicitly unblock the signal we received
-         so the application's signal handler will get it when we resend the
-         signal to ourselves. It doesn't hurt anything to do it, but we don't
-         have to
-       - _rl_handle_signal: Set up a framework for any signals that need to
-         be blocked during cleanup: add the signal to SET (initialized to the
-         existing set of blocked signals) and set BLOCK_SIG to 1. We block
-         that set around the call to rl_cleanup_after_signal().
-       - _rl_handle_signal: on AIX, if the signal is SIGHUP, make sure we
-         block SIGHUP while running rl_cleanup_after_signal()
+lib/readline/search.c
+       - make_history_line_current: don't free rl_undo_list if it is equal to
+         _rl_saved_line_for_history->data, since we will need to restore it
+        later if we got it from a history entry. Fixes issue dating back to
+        7/2021 and changes to _rl_free_saved_line_for_history, current issue
+        reported by Andreas Schwab <schwab@linux-m68k.org>
 
-                                   8/3
+                                   4/5
                                    ---
-jobs.c
-       - start_job: don't allow `fg' or `bg' in a command substitution to
-         attempt to start a parent's jobs. Suggested by  OÄuz 
-         <oguzismailuysal@gmail.com>
+lib/readline/{complete,histfile,histsearch,isearch,terminal}.c
+       - xfree: use instead of free
 
-builtins/set.def
-       - set_current_options: only call change_flag or SET_BINARY_O_OPTION_VALUE
-         if the value has changed from what is stored in the bitmap, to avoid
-         any side effects from setting the options and save time on any
-         unnecessary function calls. Inspired by report from Grisha Levit
-         <grishalevit@gmail.com>
+                                   4/7
+                                   ---
+configure.ac
+       - bumped version to bash-5.2-beta
 
-parse.y
-       - xparse_dolparen: before we jump to top level, check whether we are
-         still reading from the string (we might have run all the unwind-
-         protects) and turn off PST_CMDSUBST if we are not. Fixes fuzzing
-         bug reported by Jakub Wilk <jwilk@jwilk.net>
+[bash-5.2-beta frozen]
 
-                                   8/4
+                                   4/8
                                    ---
-subst.c
-       - process_substitute: set subshell_environment to include SUBSHELL_ASYNC
-         in the child process, since we passed FORK_ASYNC to make_child. Fixes
-         DEBUG trap problem reported by Jonathan Rascher <jon@bcat.name>
+lib/readline/input.c
+       - _rl_orig_sigset: need extern declaration if HAVE_SELECT is defined.
+         From https://savannah.gnu.org/support/?110634
 
-subst.c
-       - unlink_all_fifos: new function, just unconditionally closes and
-         unlinks (if using FIFOs) each pipe used for process substitution.
-         There is an open to unblock any child processes sleeping on the
-         FIFO first. Inspired by a suggestion from "CHIGOT, CLEMENT"
-         <clement.chigot@atos.net>
+examples/loadables/seq.c
+       - PRIdMAX: redefine if PRI_MACROS_BROKEN is defined.
+         From https://savannah.gnu.org/support/index.php?110635
 
-shell.c
-       - exit_shell: call unlink_all_fifos() instead of unlink_fifo_list()
+                                  4/11
+                                  ----
+configure.ac
+       - BASH_FUNC_STRTOIMAX: replace strtoimax if the system doesn't provide
+         a declaration in a standard header file. Uses new m4/strtoimax.m4.
+         From https://savannah.gnu.org/support/index.php?110633
 
-sig.c
-       - termsig_handler: call unlink_all_fifos() instead of
-         unlink_fifo_list()
+builtins/printf.def
+       - getdouble: new function, parses string into `double' using strtod
+       - printf_builtin: check for the `L' length modifier and use long
+         doubles for the floating point conversion specifiers. If it's not
+         supplied, use `double' when in posix mode (as posix specifies) and
+         long double (if it's available, double if not) in default mode.
+         From a report from Paul Eggert <eggert@cs.ucla.edu>
 
-                                   8/5
-                                   ---
-arrayfunc.c
-       - quote_compound_array_list: turn empty strings into '' instead of
-         leaving them unmodified. Fixes bug in changes from 4/29 reported
-         by andy_bash <andy_bash@objectmail.com>
+                                  4/12
+                                  ----
+lib/sh/oslib.c
+       - bzero: update function signature to modern BSD version
 
-                                  8/10
+                                  4/14
                                   ----
-bashline.c
-       - edit_and_execute_command,bash_execute_unix_command: restore the bash
-         signal handlers before running parse_and_execute() so bash will catch
-         and handle signals, instead of letting readline catch them without
-         any opportunity to run _rl_handle_signal(). Fixes bug reported by
-         Stan Marsh <gazelle@xmission.com>
+lib/sh/oslib.c
+       - bcopy, gethostname, mkfifo: update function signatures to modern
+         versions
 
-                                  8/11
+                                  4/15
                                   ----
-builtins/fc.def
-       - fc_gethnum: return HIST_INVALID for -0 if not in listing mode
-       - fc_builtin: throw an out-of-range error if histbeg or histend gets
-         set to HIST_INVALID
-       - fc_builtin: don't throw errors for other out-of-range history
-         specifications, clamp them at the beginning or end of the history
-         list, as appropriate, per POSIX. Report and fix from Martijn Dekker
-         <martijn@inlv.org>
+jobs.c,nojobs.c
+       - wait_for_single_pid: if the pid or job argument is invalid -- isn't
+         a child of this shell -- return 257, which is out of the range of
+         valid 8-bit status values
+
+execute_cmd.c
+       - execute_pipeline: if wait_for_single_pid returns > 256, set it to
+         127 (invalid process)
 
-                                  8/12
+jobs.c
+       - wait_for_background_pids: if wait_for_single_pid returns > 256, set
+         the status we return in PS to 127 (what it was before)
+
+builtins/wait.def
+       - wait_builtin: if wait_for_single_pid returns > 256, treat it as an
+         error and set pstat.pid to NO_PID
+       - wait_builtin: if -p supplied, and we get to the end of the argument
+         list with PSTAT.PID != NO_PID (which we assume means that the return
+         value is set from PSTAT.STATUS), set the variable name to PSTAT.PID.
+         From a report by Robert Elz <kre@munnari.OZ.AU>
+       - wait_builtin: for compatibility with the netbsd sh, leave the variable
+         name specified with `-p' unset if there are no PID arguments.
+         From a report by Robert Elz <kre@munnari.OZ.AU>
+
+                                  4/17
                                   ----
-builtins/fc.def
-       - fc_gethnum: return HIST_NOTFOUND (new error) if the string is not a
-         number and doesn't correspond to any command in the history list
-       - fc_builtin: print a "no command found" error message if fc_gethnum
-         returns HIST_NOTFOUND
+parse.y
+       - xparse_dolparen: if (flags & SX_NOLONGJMP), don't call
+         jump_to_top_level() on errors
+
+bashline.c
+       - bash_quote_filename: don't call quote_word_break_chars() unless we
+         have word break chars initialized. Fixes bug reported by
+         Sam James <sam@gentoo.org>
 
-                                  8/14
+                                  4/18
                                   ----
-flags.c
-       - no_invisible_vars: removed undocumented `-I' flag
+pcomplete.c
+       - gen_globpat_matches: call glob_filename with the GX_GLOBSTAR flag if
+         the `globstar' shell option is enabled. From a report by
+         Steve <bash@lonetwin.net>
 
-{flags,variables}.c,flags.h,builtins/{declare,setattr.def}
-       - no_invisible_vars: remove all references
+lib/malloc/malloc.c
+       - internal_free: remove the GLIBC21 code (!)
+       - internal_free: make the code that tests against memtop and calls
+         lesscore depend on USE_LESSCORE being defined, which it is by
+         default
 
-command.h
-       - PF_ALLINDS: new flag, means to expand an array variable name without
-         a subscript as if it were subscripted by `@' instead of `0'
+lib/malloc/imalloc.h
+       - USE_LESSCORE: define
 
-subst.c
-       - parameter_brace_expand_word: if PFLAGS contains PF_ALLINDS, expand
-         an array variable name as if it were subscripted by "@" instead of
-         0/"0": a string with the element values separated by " ". Little
-         nuance; we're just interested in whether or not there are any
-         values at all
-       - parameter_brace_expand: if we are expanding something like ${foo@a},
-         pass PF_ALLINDS to parameter_brace_expand_word and
-         parameter_brace_expand_indir so we don't get tripped up on `nounset'
-         if foo has an assigned subscript other than 0/"0". Inspired by a
-         report from Andrew Neff <andrew.neff@visionsystemsinc.com>
+parse.y,shell.h
+       - token_buffer_size and its corresponding saved value in the shell's
+         parser state are now size_t instead of int
 
-                                  8/17
+stringlib.c
+       - strsub,strcreplace: use size_t instead of int for local length and
+         indexing variables
+
+lib/sh/zmapfd.c
+       - zmapfd: use size_t instead of int for local length and indexing
+         variables
+
+lib/sh/zgetline.c
+       - zgetline: use size_t instead of int for local length and indexing
+         variables
+
+                                  4/20
                                   ----
-bashhist.c
-       - bash_add_history,maybe_add_history: don't need to call shell_comment
-         if we are in the middle of adding a here-document, since it may
-         call the parser recursively on data that is not guaranteed to be
-         valid input. From a report by Hyunho Cho <mug896@gmail.com>
+pcomplete.c
+       - init_itemlist_from_varlist: free VLIST after assigning it from
+         *SVFUNC and after we get the variable names and values out of it.
+         Report from Robert E. Griffith <bobg@junga.com>
 
-                                  8/24
+                                  4/25
                                   ----
-lib/readline/complete.c
-       - compare_match: compare TEXT from the line buffer and MATCH, a
-         possible completion for TEXT, after dequoting TEXT if necessary
-       - rl_complete_internal,rl_menu_complete : if show-all-if-unmodified is
-         set, use compare_match instead of a straight strcmp to determine if
-         the match has changed the text to complete, so we can use it for
-         filenames that require quoting. Report and pointer to fix from
-         Abon B <gnuabonbon@gmail.com>
+redir.c
+       - here_document_to_fd: if the shell compatibility level is bash-5.0 or
+         earlier, use tempfiles for all here-documents and here-strings. From
+         a bug-bash discussion started by Sam Liddicott <sam@liddicott.com>
 
-                                  8/25
+                                  4/26
                                   ----
-eval.c
-       - execute_prompt_command: PROMPT_COMMAND can now be an array, subsuming
-         PROMPT_COMMANDS, which bash no longer looks for. Prompted by a
-         suggestion from Martijn Dekker <martijn@inlv.org>
+parse.y
+       - parse_comsub: non-interactive shells exit on a syntax error while
+         parsing the command substitution
+       - parse_comsub: unset additional PARSER_STATE flags before calling
+         yyparse(). Inspired by https://bugs.gentoo.org/837203; unsetting
+         PST_COMPASSIGN is the fix for that bug
+       - parse_string_to_word_list: use save_parser_state/restore_parser_state
+         instead of saving pieces of the shell state in individual variables
+       - parse_compound_assignment: use save_parser_state/restore_parser_state
+         instead of saving pieces of the shell state in individual variables
+       - parse_compound_assignment: unset additional PARSER_STATE flags before
+         calling read_token(); set esacs_needed_count and expecting_in_token
+         to 0 like in parse_comsub() since read_token can use them
 
-                                  8/26
+                                  4/27
                                   ----
-builtins/fc.def
-       - fc_gethnum: now takes a flags word as the third argument, with two
-         current flag values: HN_LISTING, which means we are listing history
-         entries, and HN_FIRST, which means we are parsing the first in a
-         first,last range of history entries
-       - fc_gethnum: if we have a number >= 0, and it's out of range, return
-         different values (0 or last history) depending on whether we are
-         parsing the first or last in a range argument. Based on a report from
-         Martijn Dekker <martijn@inlv.org>
+lib/sh/strvis.c
+       - sh_charvis: changes to handle being compiled without multibyte support
 
-                                  8/31
+                                  4/29
                                   ----
-parse.y
-       - grammar: call handle_eof_input_unit from the eof-after-error
-         production only from interactive top-level shells, so a syntax error
-         in `eval' doesn't exit an interactive shell. Report and fix from
-         Koichi Murase <myoga.murase@gmail.com>
+lib/readline/callback.c
+       - rl_callback_read_char: don't set rl_eof_found unless eof is > 0,
+         since it can be -3 if we need to read more input in a multi-key
+         sequence. Report from Andrew Burgess <aburgess@redhat.com>
 
-bashline.c
-       - bash_execute_unix_command: if we call parse_and_execute with allocated
-         memory, make sure not to include SEVAL_NOFREE in the flags so it will
-         free that command string before returning. Report and fix from
-         Koichi Murase <myoga.murase@gmail.com>
+examples/loadables/Makefile.sample.in
+       - new file, containing the rules to build the example shared object
+       - includes Makefile.inc from wherever it's installed. Suggested by
+         Robert E. Griffith <bobg@junga.com>
 
-array.[ch]
-       - array_to_argv: now takes a second argument: COUNTP; returns the number
-         of elements stored in the strvec
-       - array_to_argv: don't store array elements with null values; it makes
-         it hard for callers to walk the whole array reliably
+examples/loadables/Makefile.inc.in
+       - remove rules that create the example shared object
 
-pcomplete.c
-       - gen_shell_function_matches: change call to array_to_argv
+                                  4/30
+                                  ----
+builtins/evalstring.c
+       - parse_and_execute: check for terminating signals before returning,
+         after any longjmp, to improve responsiveness and fix the -c code
+         path before running any exit trap. Report from
+         Emanuele Torre <torreemanuele6@gmail.com>
 
-array.h
-       - execute_array_command: now takes the entire ARRAY * as the first
-         parameter
+                                  5/17
+                                  ----
+builtins/suspend.def
+       - suspend_builtin: the -f option now forces a suspend even if job
+         control is not enabled. Inspired by a discussion with
+         Robert Elz <kre@munnari.OZ.AU>
 
-eval.c
-       - execute_array_command: now takes the entire array, puts the elements
-         into a strvec, and executes each element of the strvevc as a command.
-         This protects against a command from PROMPT_COMMAND[n] unsetting the
-         corresponding element of PROMPT_COMMAND.
-         From a report from Koichi Murase <myoga.murase@gmail.com>
+doc/{bash.1,bashref.texi}
+       - suspend: updated description to include expanded -f behavior
 
-                                   9/7
+                                  5/25
+                                  ----
+builtins/mkbuiltins.c
+       - -includefile: new argument, specifies extern filename to insert
+         into the #include statement in the structfile (builtins.c) and
+         the filename in the comment in the extern file (builtext.h).
+         From Alexander Kanavin <alex.kanavin@gmail.com> via
+         https://savannah.gnu.org/patch/?10210
+
+builtins/Makefile.in
+       - builtins.c: change call to mkbuiltins to add -includefile option
+       - builtins.c: change recipe to run all the commands in the same shell
+         invocation
+       - builtins.c: change recipe to specify new filenames in the call to
+         mkbuiltins and move them onto builtins.c/builtext.h if the new ones
+         are different; make the new filenames use the current make recipe
+         shell pid in the filename ($$RECPID).
+         Inspired by Alexander Kanavin <alex.kanavin@gmail.com> via
+         https://savannah.gnu.org/patch/?10210
+
+                                   6/2
                                    ---
-[bash-5.1-beta frozen]
+builtins/common.c
+       - builtin_find_indexed_array: new function, factored common code out
+         of mapfile and read builtins to find an in-scope indexed array or
+         create one 
 
-                                   9/8
-                                   ---
-lib/readline/display.c
-       - _rl_update_final: don't bother doing anything if the line structures
-         have not been initialized. Report and fix from gary@catalyst.net.nz
+builtins/common.h
+       - builtin_find_indexed_array: extern declaration
+
+builtins/{mapfile,read}.def
+       - change callers to use builtin_find_indexed_array
 
 variables.c
-       - get_histcmd: perform the same adjustment as in prompt_history_number;
-         make sure to subtract one if we're doing this while executing a
-         command that has already been saved to the history list. Inspired
-         by a report from L A Walsh <bash@tlinx.org>
+       - unbind_global_variable, unbind_global_variable_noref: new functions
+         that remove variables from the global_variables table
 
-                                  9/14
-                                  ----
-aclocal.m4
-       - BASH_STRUCT_WEXITSTATUS_OFFSET: fix typo in loop condition reported
-         by Andreas K. Hüttel <dilfridge@gentoo.org>
+lib/sh/shmatch.c
+       - sh_regmatch: use unbind_global_variable_noref to make sure we act on
+         the copy of BASH_REMATCH in the global scope all the time, ignoring
+         any local variables that might exist. Tentative fix for memory leak
+         report from Emanuele Torre <torreemanuele6@gmail.com>
 
-syntax.h
-       - slashify_in_here_document: restore previous value that doesn't
-         include double quote, since it's only special in certain cases
+doc/{bash.1,bashref.texi}
+       - BASH_REMATCH: add caveat about making it a local variable
 
-subst.c
-       - expand_word_internal: when processing backslash-double quote inside
-         a ${...} construct inside a here documemt, treat it the same as if
-         it were double-quoted, as posix says. Fixes report from
-         Andreas Schwab <schwab@linux-m68k.org>
+                                   6/6
+                                   ---
+print_cmd.c
+       - print_redirection: if the redirectee for r_duplicating_output_word
+         (r_duplicating_input_word) is 1 (0), don't print it; only print a
+         non-default file descriptor number
+       - print_redirection_list: remove the code that tries to temporarily
+         translate a >&word redirection to >&word now that we won't print a
+         non-default file descriptor number. Fixes issue with `declare -f' and
+         function export reported by Namikaze Minato <lloydsensei@gmail.com>
 
-                                  9/15
+                                  6/13
                                   ----
-support/signames.c
-       - added a number of more esoteric signal names from AIX and Solaris
+configure.ac
+       - bumped version to bash-5.2-rc1
 
-parse.y
-       - report_syntax_error: make sure that the exit status is only set to
-         one of the special builtin exit statuses if we are really executing
-         a builtin here, not just if parse_and_execute_level > 0. Reported by
-         Rob Landley <rob@landley.net>
+[bash-5.2-rc1 released]
 
-execute_cmd.c
-       - EX_BADSYNTAX: make sure that gets translated into EX_BADUSAGE (2)
-       - execute_simple_command: if a function returns a value greater than
-         EX_SHERRBASE, use builtin_status to translate it, as if a builtin
-         were being executed
-       - builtin_status: make sure a status > EX_SHERRBASE gets translated to
-         EXECUTION_FAILURE
+                                  6/15
+                                  ----
+parse.y
+       - parse_string_to_word_list: save the parser state before any state-
+         changing functions like bash_history_disable(). Reported by
+         Clark Wang <dearvoid@gmail.com>
 
-                                  9/21
+                                  6/16
                                   ----
-subst.c
-       - process_substitute: set up input from /dev/null (standard for an
-         asynchronous process) only if the shell is interactive and reading
-         input from the terminal. This allows scripts to use process
-         substitution to filter stdin. From a report from
-         Andreas Schwab <schwab@linux-m68k.org>
+doc/bash.1
+       - play tricks with the value of the zZ number register to refer to
+         `bash(1)' instead of `above' or `below' when creating the builtins
+         man page
 
-                                  9/23
+                                  6/17
                                   ----
 doc/{bash.1,bashref.texi}
-       - ENV: a couple of changes clarifying that it's only used when an
-         interactive shell is started in posix mode. Report from
-         Reuben Thomas <rrt@sc3d.org>
+       - wait: note that wait will return > 128 if interrupted by a signal.
+         Reported by AA <aathan_github@memeplex.com>
 
-examples/loadables/asort.c
-       - asort: loadable builtin to sort an array. Contributed by
-         Geir Hauge <geir.hauge@gmail.com>
+execute_cmd.c
+       - {execute_cond_node,execute_arith_command,eval_arith_for_expr}: make
+         sure to reset this_command_name after running any DEBUG trap so the
+         DEBUG trap doesn't overwrite it.
+         Reported by Emanuele Torre <torreemanuele6@gmail.com>.
+       - execute_select_command: set this_command_name to NULL after running
+         any DEBUG trap like execute_for_command does
 
-                                  10/1
+                                  6/23
                                   ----
+test.c
+       - three_arguments: when given [ ! ! arg ], make sure to advance POS
+         after calling two_arguments to avoid a `too many arguments' error.
+         Report from Steffen Nurpmeso <steffen@sdaoden.eu>
 
-[bash-5.1-rc1 frozen]
-
-                                  10/7
+                                  6/27
                                   ----
 subst.c
-       - process_substitute: try it without setting the stdin for a process
-         substitution started from an interactive shell to /dev/null. We will
-         have to see if this causes problems like those reported back in
-         9/2019 by Grisha Levit. From a report by Hyunho Cho <mug896@gmail.com>
+       - expand_word_internal: when expanding backquoted command substitution,
+         call string_extract with the SX_REQMATCH flag (closing backquote
+         required) only if the word flags don't contain W_COMPLETE,
+         indicating that we're doing this for completion, probably to
+         determine whether or not to append something to the word. Fixes bug
+         reported by Emanuele Torre <torreemanuele6@gmail.com>.
 
-lib/readline/terminal.c
-       - _rl_init_terminal_io: if the terminal is unknown, disable bracketed
-         paste on the assumption it can't handle the enable/disable escape
-         sequences
+                                   7/5
+                                   ---
+execute_cmd.c
+       - execute_connection: treat a connector of '\n' the same as ';'
 
-                                  10/8
+print_cmd.c
+       - print_comsub: new function, sets flag noting we are printing a
+         command substitution and calls make_command_string
+       - make_command_string_internal: add '\n' to the ';' case; print command
+         list with newline connector appropriately
+
+parse.y
+       - parse_comsub: call print_comsub instead of make_command_string
+       - list1 production (part of compound_list): if a list is separated by
+         newlines, and the parser is parsing a command substitution, make
+         the connection command with a '\n' connector. Makes the text
+         output of parse_comsub closer to the original source text. From a
+         report from Martijn Dekker <martijn@inlv.org>
+
+                                   7/6
+                                   ---
+doc/bash.1,lib/readline/doc/rluser.texi
+       - complete: add note about arguments passed to command specified by
+         `complete -C'; suggested by Mark Chandler <mcp@synq.so>
+
+builtins/setattr.def
+       - show_local_var_attributes: special-case `local -', since there is
+         no `declare -' equivalent.
+         Reported by Emanuele Torre <torreemanuele6@gmail.com>.
+       - show_all_var_attributes: use `local -' when printing a variable named
+         `-' at the current non-zero variable context
+
+parse.y
+       - shell_getc: if we are at the end of an alias, returning a space,
+         make sure we mark the previous character as single-byte by modifying
+         shell_input_line_property so the space we return is properly
+         recognized. This would fail before if the last character of the
+         alias was a multi-byte character. Reported by
+         Vangelis Natsios <vnatsios@gmail.com>
+
+                                  7/12
                                   ----
-lib/readline/terminal.c
-       - _rl_init_terminal_io: if the terminal name is "dumb", disable
-         bracketed paste mode. Suggested by
-         Andreas Schwab <schwab@linux-m68k.org>
+lib/readline/isearch.c
+       - rl_display_search: don't call rl_redisplay_function before returning;
+         rl_message already calls it. Reported by
+         Frédéric Moulins <frederic@moulins.org>
 
-                                  10/13
-                                  -----
-trap.[ch]
-       - set_trap_state: new function to allow other signal handlers to set
-         the internal state that trap_handler would set to note that the
-         shell received a trapped signal. Used by sigint_sighandler().
+configure.ac
+       - bumped version to bash-5.2-rc2
 
-sig.c
-       - sigint_sighandler: call set_trap_state to set the pending trap state
-         for SIGINT if trap_handler is not called. Needed because
-         throw_to_top_level now checks whether a signal is pending before
-         running the trap (change from 4/2020)
+                                  7/18
+                                  ----
+jobs.c
+       - set_job_control: don't bother calling tcgetpgrp if shell_tty < 0,
+         since it will just fail
 
-builtins/trap.def
-       - trap_builtin: if the shell is interactive (interactive_shell != 0)
-         but running something like PROMPT_COMMAND that sets
-         parse_and_execute_level > 0 but interactive == 0, make sure to set
-         the signal handler to the default interactive shell SIGINT handler
-         (sigint_sighandler) instead of the default non-interactive one.
-         Fixes bug reported by Daniel Farina <daniel@fdr.io> with a hint
-         from felix <felix@f-hauri.ch>
+variables.c
+       - reset_local_contexts: new function, delete all context tables
+         associated with shell functions and set variable_context to 0.
+         Called when we want to stop executing in a shell function without
+         going through the pop_context chain with its side effects
 
-                                  10/26
-                                  -----
+variables.h
+       - reset_local_contexts: extern declaration
 
-lib/readline/{readline.c,rlprivate.h}
-       - _rl_enable_active_region: new variable, mirrors value of
-         _rl_enable_bracketed_paste
-       - BRACKETED_PASTE_DEFAULT: new define, default initial value of
-         _rl_enable_bracketed_paste and _rl_enable_active_region
+builtins/evalstring.c
+       - parse_and_execute: call reset_local_contexts instead of setting
+         variable_context to 0
 
-lib/readline/bind.c
-       - hack_special_boolean_var: make sure that _rl_enable_active_region
-         is set appropriately when "enable-bracketed-paste" is modified
+eval.c
+       - reader_loop: call reset_local_contexts in cases where the shell has
+         longjmped for a fatal error and errexit is enabled (ERREXIT), but
+         not for other cases, and especially not for the exit builtin,
+         instead of just setting variable_context to 0. Fixes issue originally
+         reported by Robert Stoll <robert.stoll@tegonal.com>
 
-lib/readline/isearch.c
-       - _rl_isearch_dispatch: make sure that we activate the mark on finding
-         the search string only if _rl_enable_active_region is non-zero, even
-         if bracketed paste is enabled
+subst.c
+       - pat_subst: implement sed-like behavior when presented with a null
+         pattern that's anchored at the start or end of the string, or when
+         presented with a null string: process the replacement string for `&'
+         and `\&' and substitute in the result as before. Patch from
+         Koichi Murase <myoga.murase@gmail.com>
 
-lib/readline/search.c
-       - noninc_dosearch: make sure that we activate the mark on finding
-         the search string only if _rl_enable_active_region is non-zero, even
-         if bracketed paste is enabled
+                                  7/20
+                                  ----
 
-lib/readline/kill.c
-       - rl_bracketed_paste_begin: make sure we activate the mark only if
-         _rl_enable_active_region is enabled
+[bash-5.2-rc2 frozen]
 
-lib/readline/isearch.c
-       - _rl_isearch_dispatch: the requirement for number of available unread
-         characters (bytes) to trigger the bracketed paste test is now
-         BRACK_PASTE_SLEN-1, like for non-incremental searches
+                                  7/27
+                                  ----
+parse.y
+       - reset_parser: set need_here_doc, esacs_needed_count, expecting_in_token
+         all to 0, since jumping back to a top-level parse needs that
+       - parse_comsub: make sure to reset expand_aliases and shell_eof_token
+         if we're not going to exit immediately out of this function
 
-                                  10/29
-                                  -----
+                                  7/28
+                                  ----
+parse.y
+       - parse_comsub: if the compatibility level is <= 51, set extglob while
+         parsing the command substitution, so bad pattern errors can still be
+         caught but valid patterns are let through and can be evaluated at
+         runtime, when extglob may have been set. If it isn't set, it will
+         still be a parser error when the command substitution is executed.
+         Fixes report from Sam James <sam@gentoo.org> about gentoo scripts.
+       - reset_parser: set extended_glob from global_extglob if the parser
+         state includes PST_CMDSUBST
+       - xparse_dolparen: set global_extglob but don't modify extended_glob,
+         so parse errors can be caught before forking a child for command
+         substitution, as part of word expansion, but after extglob may have
+         been set by command execution (e.g., in a shell function)
 
-doc/bash.1,lib/readline/rluser.texi
-       - enable-bracketed-paste: change to note the the current default is `On'
+                                   8/5
+                                   ---
+[bump version to bash-5.2-rc3]
 
-                                  10/30
-                                  -----
-lib/glob/glob.c
-       - wdequote_pathname: if wcsrtombs fails, make sure to check whether it
-         leaves wpathname set to a non-NULL value before checking whether or
-         not *wpathname is a null character (indicating an incomplete
-         conversion). Fixes https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=972286
-         with an assist from Bernhard Übelacker <bernhardu@mailbox.org>
+                                   8/6
+                                   ---
+trap.c
+       - run_pending_traps: move code from evalstring() so we call
+         parse_and_execute() directly and handle any `return' invocations so
+         we can restore the value of running_trap. Otherwise, if we longjmp
+         past this function, we will think we're running a trap after we
+         finish. Prompted by post from Koichi Murase <myoga.murase@gmail.com>
 
-                                  11/1
+                                   8/9
+                                   ---
+
+lib/readline/nls.c
+       - _rl_current_locale: private variable, stores the value of the
+         LC_CTYPE locale category, as determined by _rl_init_locale; set
+         to allocated memory in _rl_init_locale()
+       - _rl_set_localevars: new function, code from _rl_init_eightbit that
+         checks the current locale (passed as an argument) and sets the
+         various locale-aware variables based on it. It accepts a second
+         argument: FORCE. If non-zero, it means to restore the default "C"
+         locale values if the locale is "C" or "POSIX", now that this
+         function can be called multiple times
+       - _rl_init_eightbit: now just calls _rl_init_locale and
+         _rl_set_localevars
+       - _rl_reset_locale: new function, checks whether our the locale has
+         changed since we last called _rl_init_locale to set our internal
+         idea of its value. If it has changed, call _rl_set_localevars with
+         the new locale and a FORCE argument of 1 to change the
+         locale-dependent variables.
+
+lib/readline/rlprivate.h
+       - _rl_reset_locale: extern declaration
+
+lib/readline/readline.c
+       - rl_initialize: call _rl_reset_locale instead of _rl_init_locale so
+         the internal readline variables get set when we move from a non-
+         multibyte locale ("C") to a multibyte one ("en_US.UTF-8"). Report
+         from Alan Coopersmith <alan.coopersmith@oracle.com>
+
+                                  8/16
                                   ----
-lib/readline/isearch.c
-       - _rl_isearch_dispatch: when checking whether the current character is
-         one of the isearch `opcodes', only check the multibyte character
-         member of CXT if we're currently running in a multibyte locale. Don't
-         assume that other parts of the code will set mb[0] = c and mb[1] = 0.
-         Report from Detlef Vollmann <dv@vollmann.ch>
+lib/sh/setlinebuf.c
+       - sh_setlinebuf: allocate buffers for line-buffering stdout and stderr
+         only once, the first time it is requested. Only allocate memory if
+         we're using setvbuf (we usually are). Double the buffer size to 2016
+         if we're using the bash malloc. Otherwise, let stdio handle it.
+
+                                  8/17
+                                  ----
+builtins/exec.def
+       - exec_builtin: make sure to initialize orig_job_control in case the
+         command is not found by search_for_command. Report and fix from
+         Xiami <i@f2light.com>
 
-[bash-5.1-rc2 frozen]
+[bash-5.2-rc3 frozen]
 
-                                  11/10
-                                  -----
-lib/readline/isearch.c
-       - _rl_isearch_dispatch: if we are aborting the search, make sure to
-         call _rl_fix_point and to make sure the point and mark are less
-         than the new rl_end, in case they got out of sync. Report and fix
-         from Tillmann Osswald <tosswald@ernw.de>
+                                  8/27
+                                  ----
+parse.y
+       - parse_comsub: restore extended_glob to a local copy (local_extglob)
+         only if we changed it; a safer way to do it. Fixes extglob change
+         issue reported by Kerin Millar <kfm@plushkava.net>
+       - cond_term: restore extended_glob to a local copy; safer than using
+         global_extglob, which we will reserve for error recovery
 
-test.c
-       - unary_test: assume the argument has already been expanded (the code
-         paths for [[ and [ expand it) and add AV_NOEXPAND to the flags passed
-         to array_value if assoc_expand_once is enabled. Prompted by a report
-         from Greg Wooledge <wooledg@eeg.ccf.org>
+                                  8/30
+                                  ----
+parse.y
+       - parse_comsub: don't clear the pushed string list; we might need it to
+         consume additional input to satisfy this command substitution. When
+         we restore the parser state, don't restore the pushed string list in
+         case we used it. From
+         https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1018727
+       - parse_comsub: don't modify extended_glob if parser_state includes
+         PST_EXTPAT, in which case we've already set extended_glob and
+         global_extglob appropriately. Only matters in compatibility mode.
 
-[bash-5.1-rc3 frozen]
+                                  8/31
+                                  ----
+subst.c
+       - parameter_brace_transform: make sure we return an error if *xform
+         is '\0'. Report from Ivan Kapranov <koltiradw@yandex.ru>
 
-                                  11/18
-                                  -----
-doc/{bash.1,bashref.texi}
-       - small tweaks to the ulimit description to make it more consistent with
-         the Posix standard's terminology
+                                   9/7
+                                   ---
+[bump version to bash-5.2-rc4]
+
+                                   9/8
+                                   ---
+[bash-5.2-rc4 frozen]
 
-                                  12/4
+                                  9/20
                                   ----
+lib/readline/history.c
+       - replace_history_entry: check for a NULL timestamp before trying to
+         copy it. Report from nov.ondrej@gmail.com
 
-[bash-5.1-release frozen]
+                                  9/23
+                                  ----
+[bash-5.2 frozen]
old mode 100755 (executable)
new mode 100644 (file)
deleted file mode 120000 (symlink)
index 12c9a285d48e0603776af5053538e41e4bcd9cae..0000000000000000000000000000000000000000
--- a/ChangeLog
+++ /dev/null
@@ -1 +0,0 @@
-CWRU/changelog
\ No newline at end of file
new file mode 100644 (file)
index 0000000000000000000000000000000000000000..da6d4aa1c36207626e9c7dc7cba546dcb196e3ae
--- /dev/null
+++ b/ChangeLog
+
+                                12/6/2020
+                                ---------
+
+[bash-5.1 released]
+
+                                  12/7
+                                  ----
+Makefile.in
+       - bashline.o: add dependency on ${DEFDIR}/builtext.h. Report from
+         Fazal Majid <fazal@majid.org>
+
+                                  12/11
+                                  -----
+builtins/wait.def
+       - wait_builtin: don't assign the variable given with -p if there are no
+         jobs to wait for. Report and fix from OÄuz <oguzismailuysal@gmail.com>
+
+arrayfunc.c
+       - kvpair_assignment_p: return non-zero if argument L appears to be a
+         key-value pair associative array compound assignment
+       - expand_and_quote_kvpair_word: run a single word in a key-value pair
+         associative array compound assignment through the appropriate
+         expansions and single-quote the result
+
+arrayfunc.h
+       - kvpair_assignment_p, expand_and_quote_kvpair_word: extern declarations
+
+subst.c
+       - expand_oneword: detect whether VALUE appears to be a key-value
+         pair compound assignment and call the appropriate function to expand
+         each word in the resulting list. Fixes inconsistency reported by
+         oguzismailuysal@gmail.com
+
+                                  12/12
+                                  -----
+subst.c
+       - command_substitute: don't reset pipeline_pgrp to shell_pgrp if we
+         are already forked to run a command (SUBSHELL_FORK). Fixes SIGINT
+         in command substitution in here-document in forked child issue
+         reported by oguzismailuysal@gmail.com
+
+                                  12/18
+                                  -----
+execute_cmd.c
+       - execute_pipeline: execute the lastpipe code even if prev == 0. It
+         can only be 0 here if stdin was closed when this function was
+         executed
+       - execute_pipeline: if prev == 0, set lstdin to a sentinel (-1) that
+         means to close fd 0 after executing the command, and call close(prev)
+         before restoring stdin. restore_stdin now understands -1, and closes
+         fd 0. Fixes issue reported by Tomas Janousek <tomi@nomi.cz>
+
+                                  12/21
+                                  -----
+doc/bashref.texi
+       - PROMPT_COMMANDS: clean up a couple of remaining instances of this
+         name. Report from Eli Schwartz <eschwartz@archlinux.org>
+
+                                  12/26
+                                  -----
+subst.c
+       - command_substitute: make sure that the child process always has
+         pipeline_pgrp == shell_pgrp: if pipeline_pgrp is non-zero when we
+         get to the child, meaning that we're part of an already-forked
+         child that is, for instance, running redirections, we need to reset
+         shell_pgrp to it to preserve the invariant. Fixes bug with terminal
+         being set to the incorrect pgrp reported by oguzismailuysal@gmail.com
+
+                                  12/29
+                                  -----
+configure.ac,builtins/shobj-conf,m4/threadlib.m4
+       - midnightbsd: update auto-configuration to treat MidnightBSD like
+         FreeBSD. From https://savannah.gnu.org/patch/?10006
+
+                                  12/30
+                                  -----
+examples/loadables/stat.c
+       - stattime: use strftime with a default format or the format supplied
+         with the -F option to format the file time information
+       - stat_builtin: now takes a -F fmt option for a strftime format string;
+         change to function calling sequences to pass the format down to
+         stattime
+
+examples/loadables/Makefile.in
+       - stat: now built and installed by default
+
+                                  12/31
+                                  -----
+command.h
+       - SUBSHELL_IGNTRAP: new flag value
+
+jobs.c
+       - make_child: set SUBSHELL_IGNTRAP in subshell_environment in the
+         child process, meaning that we should not execute trap handlers for
+         trapped signals
+
+execute_cmd.c
+       - execute_in_subshell, execute_simple_command, execute_disk_command:
+         make sure to unset SUBSHELL_IGNTRAP after a child process restores
+         the original signal dispositions
+       - execute_simple_command: make sure to set SUBSHELL_IGNTRAP after
+         make_child returns and we're setting subshell_environment directly
+
+subst.c
+       - command_substitute,process_substitute: unset SUBSHELL_IGNTRAP after
+         the child process has reset the trapped signal dispositions
+
+trap.c
+       - trap_handler: if we get a signal for which we have set a trap, but
+         SUBSHELL_IGNTRAP is set in subshell_environmnent, make sure we
+         restore the original signal disposition and resend the signal to
+         ourselves. Fixes issue reported by Nikolay Borisov <nborisov@suse.com>
+         (or at least makes the race window much smaller)
+
+sig.c
+       - initialize_terminating_signal: set the original signal handler from
+         the return value from sigaction; a minor optimization that saves a
+         system call or two
+
+                                1/5/2021
+                                --------
+builtins/declare.def
+       - declare_internal: make some option combinations that don't make
+         sense errors (e.g., -f and -a/-A/-i/-n)
+       - declare_internal: if we build a new variable name by expanding the
+         value of a nameref variable, make sure to chop the `+' in a `+='
+         off before going on
+
+                                   1/7
+                                   ---
+doc/{bash.1,bashref.texi}
+       - bind: add an example to the synopsis making it clear that you can
+         use any readline command line as a non-option argument, as it says
+         in the text. From a report from Dan Jacobson <jidanni@jidanni.org>
+
+                                  1/12
+                                  ----
+locale.c
+       - local_shiftstates -> locale_shiftsates in the non-multibyte code
+         branch. Reported by Henry Bent <henry.r.bent@gmail.com>
+
+subst.c
+       - expand_compound_assignment_word: make sure to call dispose_words on
+         the WORD_LIST * returned from expand_oneword after turning it back
+         into a string. Fixes memory leak reported by Alexander Mescheryakov
+         <alexander.s.m@gmail.com>
+
+                                  1/13
+                                  ----
+variables.c
+       - bind_variable_internal: when performing an assignment to a subscripted
+         array variable that was the value of a nameref (used in the original
+         assignment), don't call make_variable_value on the value, since that
+         messes up +=. Just call assign_array_element and let that take care
+         of calling make_variable_value appropriately. Fixes bug reported by
+         Oguz <oguzismailuysal@gmail.com>
+
+                                  1/14
+                                  ----
+findcmd.c
+       - search_for_command: if `checkhash' is set, don't add non-executable
+         files to the command hash table, since we will just remove them
+         later
+
+lib/sh/winsize.c
+       - get_new_window_size: set *rp and *cp even if READLINE is not defined
+
+                                  1/15
+                                  ----
+lib/sh/winsize.c
+       - get_new_window_size: call rl_set_window_size only if we can determine
+         we're using readline: an interactive shell without no-line-editing,
+         or if we've already initialized readline, presumably in a non-
+         interactive shell 
+
+support/Makefile.in
+       - man2html: add LDFLAGS_FOR_BUILD to the recipe. Report from
+         Jeffrey Walton <noloader@gmail.com>
+
+                                  1/17
+                                  ----
+lib/readline/misc.c
+       - rl_operate_and_get_next: fix old K&R function declaration. Report
+         from Tom Tromey <tom@tromey.com>
+
+lib/readline/readline.c
+       - _rl_internal_char_cleanup: move code that cleans up the active region
+         and deactivates the mark inside this function so callback mode
+         applications get the intended functionality. Report and fix from
+         sparrowhawk996@gmail.com
+
+lib/readline/bind.c
+       - rl_parse_and_bind: when using the arithmetic comparison operators on
+         the version, make sure to invert the tests so that we stop parsing
+         if the test fails. Report and fix from Tom Tromey <tom@tromey.com>
+
+                                  1/19
+                                  ----
+Makefile.in
+       - pipesize.h: add dependency on ${BUILTINS_LIBRARY} to avoid parallel
+         makes trying to create it twice. Report and fix from
+         Richard Purdie <richard.purdie@linuxfoundation.org>
+
+                                  1/21
+                                  ----
+subst.c
+       - param_expand: if a nameref expands to array[@] or array[*], make sure
+         to call chk_atstar so the right variables are set to split the
+         result. Report from Oguz <oguzismailuysal@gmail.com>
+
+                                  1/22
+                                  ----
+builtins/declare.def
+       - Rewrote to reduce complexity. Still needs some work.
+
+lib/readline/*.h, lib/tilde/tilde.h
+       - PARAMS: remove, rely on compilers understanding function prototypes
+
+lib/readline/{undo.c,histlib.h}
+        - _hs_replace_history_data: move extern declaration to histlib.h
+
+lib/readline/readline.c
+       - _rl_parse_colors: instead of an extern declaration for this, include
+         "parse-colors.h" for it
+
+lib/readline/{histfile.c,histlib.h}
+       - _hs_append_history_line: move extern declaration to histlib.h
+
+lib/readline/history.h
+       - HS_HISTORY_VERSION: define to 0x0801 (current library version) if
+         it's not already defined. We conditionally define it in case an
+         application has (unwisely) chosen to use it, since the history
+         library doesn't do anything with it yet
+
+lib/readine/{rlprivate.h,{search,misc,readline}.c}
+       - _rl_free_history_entry: add extern declaration to rlprivate.h, remove
+         extern declaration from c source files. Use HS_HISTORY_VERSION as a
+         sentinel that it's ok to use HIST_ENTRY in rlprivate.h
+
+lib/readline/{rlprivate.h,{isearch,search,undo}.c}
+       - _rl_saved_line_for_history: add extern declaration to rlprivate.h,
+         remove extern declaration from c source files, using HS_HISTORY_VERSION
+         in the same way
+
+                                  1/24
+                                  ----
+lib/readline/signals.c
+       - _rl_handle_signal: make sure that all sigprocmask calls are protected
+         by HAVE_POSIX_SIGNALS. Report and fix from Tom Tromey <tom@tromey.com>
+
+                                  1/26
+                                  ----
+lib/readline/callback.c
+       - rl_callback_read_char: make sure rl_linefunc is non-NULL before
+         calling through the pointer. The line function could have been
+         removed by the application before readline processes any typeahead
+         input. Bug reported by Matthias Klose <doko@debian.org>, pointer
+         to root cause from Koichi Murase <myoga.murase@gmail.com>
+
+lib/glob/glob.c
+       - skipname,wskipname: put in some additional checks for `.' to ensure
+         that we don't get false positives (or incomplete tests) that can 
+         affect the results of extglob patterns. Reported by
+         gregrwm <rhn-users@greatlakedata.com>
+
+                                  1/27
+                                  ----
+lib/glob/glob.c
+       - extglob_skipname,wextglob_skipname: fixed an off-by-one error (SE
+         was being set to one character before the end of the pattern string,
+         not the null character at the end of the pattern string like other
+         callers of glob_patscan) that caused the last character of the last
+         subpattern to be cut off when calling skipname
+       - extglob_skipname,wextglob_skipname: some cleanups so the code is
+         closer to identical for the single-byte and wide character versions
+
+                                   2/1
+                                   ---
+execute_cmd.c
+       - execute_simple_command: in posix mode, if we have a variable
+         assignment error while assigning into the temporary environment (e.g.,
+         assigning to a readonly variable), a non-interactive shell running a
+         special builtin exits; a non-interactive shell running anything else
+         jumps back to the top level. A shell compiled with -DSTRICT_POSIX
+         exits unconditionally.
+       - execute_simple_command: make sure posix mode sets $? to non-zero
+         if a variable assignment error occurs preceding a non-special builtin
+
+subst.c
+       - do_assignment_statements: take the code from expand_word_list_internal
+         that performs assignment statements, either standalone or preceding 
+         simple command names, and factor it out into this function
+       - expand_word_list_internal: call do_assignment_statements where
+         appropriate
+
+                                   2/2
+                                   ---
+lib/glob/glob.c
+       - dequote_pathname: fix function definition for non-multibyte systems.
+         Report and fix from Marc Aurèle La France <tsi@tuyoix.net>
+
+Makefile.in,doc/Makefile.in
+       - for certain targets, remove files before creating them to deal with
+         symlinked build trees.
+         Report and fix from Marc Aurèle La France <tsi@tuyoix.net>
+
+examples/loadables/accept.c
+       - include limits.h before typemax.h
+         Report and fix from Marc Aurèle La France <tsi@tuyoix.net>
+
+builtins/gen-helpfiles.c
+       - if USING_BASH_MALLOC is defined, make sure to undefine malloc as well
+         as free. Fixes bug reported by George R Goffe <grgoffe@yahoo.com>
+
+builtins/Makefile.in
+       - install-help: now depends on $(HELPFILES_TARGET) so we make sure the
+         separate helpfiles are created before we try to install them if we
+         don't go through the `all' makefile target
+
+configure.ac
+       - HELPDIR: now ${datadir}/bash/helpfiles
+
+                                   2/3
+                                   ---
+parse.y
+       - parse_string_to_word_list: before expanding a compound assignment
+         statement body, make sure to save any alias that's currently being
+         expanded. Restore the alias after the compound assignment is parsed.
+         Reported back in 11/2020 by Alex fxmbsw7 Ratchev <fxmbsw7@gmail.com>
+
+                                   2/4
+                                   ---
+lib/readline/histexpand.c
+       - history_expand_internal: when calling the history_inhibit_expansion
+         function, make sure to call it using the string as we've expanded it
+         to that point (RESULT), adding the expansion and next characters
+         temporarily, since we make expansion decisions based on what we've
+         accumulated, not what we started with. This makes things like
+         echo abc!$!$ work, where before the second `!' inhibited expansion
+         because bash_history_inhibit_expansion mistakenly took it as the
+         second character in a `$!' word expansion. Fixes bug reported back
+         in 10/2020 by Paul Fox <paul.d.fox@gmail.com>
+
+array.h
+       - array_pop: instead of calling array_dispose_element from this macro,
+         just call array_shift with the AS_DISPOSE flag
+
+                                   2/5
+                                   ---
+bashhist.c
+       - shell_comment: move condition to return 0 if the delimiter stack is
+         not empty or the shell is parsing a here document into the function
+         itself, don't have the callers check so the check is in one place.
+         Fixes bug reported by Oguz <oguzismailuysal@gmail.com>
+
+array.h,variables.c
+       - ARRAY_ELEMENT_REPLACE: convenience define for modifying an array
+         element's value
+
+variables.c
+       - pop_args: a couple of code simplifications
+
+                                   2/7
+                                   ---
+lib/malloc/malloc.c
+       - pagesz: at least MALLOC_PAGESIZE_MIN (4096) bytes
+       - union mhead: now 16-byte aligned on all systems, 32-bit and 64-bit
+         pointers
+       - binsizes: since the smallest allocation overhead is now 16 bytes,
+         redo the buckets so binsizes[0] == 32; adjust the thresholds for
+         split/coalesce/prepopulate/mmap (NBUCKETS = 28; STARTBUCK = 0).
+         Sizes stay pretty much the same; indices change
+       - consistently use MALLOC_SIZE_T instead of long/unsigned int/int
+       - use MAGIC8_NUMBYTES as the length of the mh_magic8 buffer, in case
+         it changes later for alignment
+       - internal_remap: new function, calls mremap to reallocate a chunk of
+         memory allocated using mmap(); called from internal_realloc if the
+         old size and new size are both bigger than the mmap threshold
+       - internal_realloc: call internal_remap if the old size and new size
+         are both above the threshold where we use mmap for allocation
+
+                                  2/10
+                                  ----
+include/timer.h
+       - new file, declaration for a timer struct to be used by a set of
+         functions to implement timers using SIGALRM or select/pselect
+
+lib/sh/timers.c
+       - new file, set of functions to manipulate timer objects and timeouts
+         using SIGALRM or select/pselect. Inspired by a patch from
+         Koichi Murase <myoga.murase@gmail.com>. Not used yet
+
+                                  2/11
+                                  ----
+builtins/read.def
+       - read_builtin: if there is a timeout set, block SIGCHLD around calls
+         to zread and its siblings, or calls to readline for `read -e', so
+         SIGCHLD (and the consequent waitpid) doesn't interrupt the read.
+         Fixes bug reported by Koichi Murase <myoga.murase@gmail.com>, but
+         there may be a different fix coming
+
+Makefile.in,builtins/Makefile.in
+       - fix up dependencies, especially on builtins.h and builtext.h
+
+
+                                  2/12
+                                  ----
+lib/readline/input.c
+       - rl_read_key: if we set rl_done == 1, set RL_STATE_DONE as well
+         Reported by Koichi Murase <myoga.murase@gmail.com>
+
+lib/readline/isearch.c
+       - _rl_search_getchar: only call _rl_read_mbstring if rl_read_key returns
+         >= 0, avoid some work
+
+lib/readline/vi_mode.c
+       - _rl_vi_callback_change_char,_rl_vi_change_char: don't overwrite the
+         last replacement string if _rl_vi_callback_getchar returns -1.
+         It will likely make no difference, since the next read will return
+         an error or EOF, but being careful
+       - rl_vi_overstrike: if _rl_overwrite_char doesn't return 0, break out
+         of the loop
+
+lib/readline/text.c
+       - _rl_overwrite_char: return 1 if _rl_read_mbstring returns < 0 so
+         we don't try to insert garbage
+
+bashline.c
+       - posix_edit_macros: handle rl_read_key() returning <= 0
+
+                                  2/15
+                                  ----
+parse.y
+       - read_comsub: make sure to turn on the LEX_RESWDOK flag if we are in
+         a case statement and read a `)', since we can get a valid `esac'.
+         Fixes bug reported by Oguz <oguzismailuysal@gmail.com>
+       - read_comsub: if we're in a case statement, recognize `}' as a
+         reserved word and set the LEX_RESWDOK flag for the next word, since
+         we can get an esac (or another reserved word) after it
+
+                                  2/16
+                                  ----
+parse.y
+       - reserved_word_acceptable: add ARITH_CMD and COND_END to the list of
+         tokens that can precede a reserved word, so you can use reserved
+         words after ((...)) and [[...]].
+         Reported by Koichi Murase <myoga.murase@gmail.com>
+
+                                  2/17
+                                  ----
+parse.y
+       - parse_comsub: use new LEX_CASEWD flag to track when we are reading
+         the WORD in `case WORD in' and turn on the LEX_RESWDOK flag when
+         that word ends. This allows $(case x in esac), which no one uses.
+       - parse_comsub: use LEX_PATLIST flag to track when we are reading a
+         case pattern list so `|' doesn't turn on the LES_RESWDOK flag
+       - parse_comsub: case_level: simple counter to count the number of esacs
+         we need to see before we're no longer in a case statement; analog of
+         esacs_needed_count from the lexer
+
+                                  2/19
+                                  ----
+parse.y
+       - CHECK_FOR_RESERVED_WORD: don't return ESAC if we read `esac' after a
+         left paren in a case pattern list. From an austingroup-bugs discussion
+         about https://www.austingroupbugs.net/view.php?id=1454
+       - parse_comsub: if we read a `(' while looking for a case pattern list
+         and LEX_CKESAC is set, we have a leading left paren in the pattern
+         list and should turn off LEX_CKESAC so (esac) doesn't prematurely
+         terminate the case command. From an austingroup-bugs discussion
+         about https://www.austingroupbugs.net/view.php?id=1454
+
+                                  2/26
+                                  ----
+builtins/history.def
+       - history_builtin: when checking negative offsets to -d, which are
+         supposed to count back from the end of the history list, check the
+         range against 0 instead of history_base, because the calculation is
+         done against history_length, which is independent of history_base.
+         Report and fix from Christopher Gurnee <chris@gurneeconsulting.net>
+
+                                  2/28
+                                  ----
+doc/bashref.texi
+       - replaced a number of uses of @var with a mixture of @env and @dfn
+         to better match up with the texinfo standards
+
+doc/{bash.1,bashref.texi}
+       - clarify some aspects of the coproc description, especially the
+         use of NAME and when it's optional
+
+                                   3/1
+                                   ---
+subst.c
+       - read_comsub: fix off-by-one error in mbrtowc that causes a read one
+         character past the end of buf. Report and fix from
+         Platon Pronko <platon7pronko@gmail.com> in
+         https://savannah.gnu.org/patch/?10035
+
+                                   3/3
+                                   ---
+builtins/ulimit.def
+       - ulimit_builtin: Posix compatibility: if the last command specified
+         by an option does not have an option argument, but there is an
+         operand remaining after all the options are parsed, treat the
+         operand as an argument to that last command. From an austin-group
+         discussion and a Geoff Clare suggestion back in November, 2020.
+         Austin Group interpretation 1418
+
+examples/shellmath
+       - a package of shell functions to perform floating-point math entirely
+         in bash. Contributed by Michael Wood <mawood20@gmail.com>. Available
+         at https://github.com/clarity20/shellmath
+
+                                   3/4
+                                   ---
+support/shobj-conf
+       - darwin: take out the -arch-only option in SHOBJ_XLDFLAGS and
+         SHOBJ_ARCHFLAGS; no longer needed
+
+doc/{bash.1,bashref.texi}
+       - coprocesses: suggested changes from rms@gnu.org; recommend the
+         `coproc NAME { commands; }' form as the simplest and most flexible
+
+                                   3/5
+                                   ---
+builtins/exec.def
+       - exec_builtin: set last_command_exit_value before calling exit_shell
+         so any exit trap gets the right value for $?. From Matthew Bauer
+         <mjbauer95@gmail.com> via https://savannah.gnu.org/patch/?10039
+
+                                   3/8
+                                   ---
+include/timer.h
+       - SHTIMER_ALRMSET: new flag, indicates that there is an active alarm
+         associated with this timer (falarm() was called)
+
+lib/sh/timers.c
+       - shtimer_set: set the SHTIMER_ALRMSET flag after calling falarm
+       - shtimer_unset: don't call falarm(0,0) unless the SHTIMER_ALRMSET flag
+         is set
+
+                                   3/9
+                                   ---
+include/posixtime.h
+       - added some BSD convenience defines if they are not present
+
+parse.y,shell.h
+       - {save,restore}_parser_state: save and restore shell_eof_token and
+         pushed_string_list; change callers (e.g., xparse_dolparen) so they
+         don't have to manage them
+
+                                  3/10
+                                  ----
+builtins/common.h
+       - extern declarations for moving to timers (sh_timer) for read builtin
+         timeouts
+
+quit.h
+       - CHECK_ALRM: remove, no longer used
+
+trap.c
+       - check_signals: call check_read_timeout instead of CHECK_ALRM
+
+bashline.c
+       - bash_event_hook: use read_timeout instead of checking `sigalrm_seen';
+         that no longer exists
+       - bash_event_hook: accommodate readline timing out (not used yet)
+
+lib/sh/zread.c
+       - zread: call read_builtin_timeout() to check for a timeout before
+         calling a blocking read()
+         
+builtins/read.def
+       - sigalrm,reset_timeout,check_read_timeout,read_builtin_timeout: new
+         and modified functions to use sh_timers for timeouts instead of
+         SIGALRM. Based on work contributed by Koichi Murase
+         <myoga.murase@gmail.com>
+       - read_builtin: use sh_timers for read timeouts (-t N) instead of
+         using SIGALRM
+       - edit_line: simulate receiving SIGALRM if readline times out (not
+         used yet)
+
+                                  3/11
+                                  ----
+lib/readline/readline.c
+       - rl_initialize: call _rl_timeout_init to set things up for any timeout 
+         that was set with rl_set_timeout
+       - readline_internal_charloop: if we longjmped because of a timeout,
+         make sure to set rl_done/RL_STATE_DONE and return; we are
+         abandoning this call to readline(). The readline timeout changes
+         were based on work contributed by Koichi Murase
+         <myoga.murase@gmail.com>
+
+lib/readline/readline.h
+       - extern declarations for new timeout functions and hook
+       - rl_clear_timeout: new define
+
+lib/readline/callback.c
+       - rl_callback_read_char: if we longjmped because of a timeout,
+         make sure to set rl_done/RL_STATE_DONE and return; we are
+         abandoning this call to readline()
+
+lib/readline/util.c
+       - _rl_abort_internal: if we time out, don't ring the bell; let the
+         caller handle it
+
+lib/readline/input.c
+       - extern declarations for public and readline-library-private functions
+         and hooks to implement timeouts
+       - rl_set_timeout,rl_timeout_remaining: new public functions
+       - _rl_timeout_select: new function, uses select/pselect to implement
+         read timeouts that take timeouts set with rl_set_timeout into account;
+         calling hook function if a timeout occurs
+       - rl_gather_tyi, _rl_input_available: use _rl_timeout_select, taking
+         any existing timeout into consideration if it expires before the
+         timeout passed as an argument
+       - rl_getc: use _rl_timeout_select and handle any timeouts by calling
+         _rl_timehout_handle
+       - set_alarm,reset_alarm: new functions to implement timeouts using
+         SIGALRM for systems that lack a working select/pselect
+       - _rl_timeout_init: new function, sets things up for reading input
+         with a specified timeout
+       - _rl_timeout_handle: a timeout handler; calls any event hook and
+         sets up to abort the current readline() call
+       - _rl_timeout_handle_sigalrm: a timeout handler for systems using
+         SIGALRM to implement timeouts
+
+lib/readline/parens.c
+       - rl_insert_close: use _rl_timeout_select to take timeouts into account
+
+lib/readline/rlprivate.h
+       - extern declarations for readline-library-private timeout functions
+
+lib/readline/rltty.c
+       - rl_deprep_terminal: don't print a newline after the bracketed paste
+         disable sequence if we timed out
+
+lib/readline/signals.c
+       - _rl_handle_signal: if sig is SIGALRM, call _rl_timeout_handle_sigalrm()
+
+lib/readline/doc/rltech.texi
+       - rl_set_timeout,rl_timeout_remaining: document new public functions
+       - RL_STATE_TIMEOUT: document new possible state value for rl_readline_state
+       - rl_timeout_event_hook: document new hook function, called when
+         readline times out
+
+builtins/read.def
+       - read_builtin: changes to use the readline timeout functions to
+         implement timeouts with `read -e'; these use rl_set_timeout and
+         sh_timer structs together
+
+                                  3/12
+                                  ----
+subst.c
+       - expand_string_dollar_quote: new function, expands $'...' and $"..."
+         in a string for those code paths that don't expand it themselves
+
+subst.h
+       - expand_string_dollar_quote: extern declaration
+
+parse.y
+       - read_secondary_line: if $'...' or $"..." appears in the line, call
+         expand_string_dollar_quote to expand them. This now returns new
+         memory, need to change callers
+
+make_cmd.c
+       - make_here_document: account for read_secondary_line returning newly
+         allocated memory, free `full_line' appropriately
+
+bashline.c
+       - shell_expand_line,history_and_alias_expand_line: expand $'...' and
+         $"..." in the line by calling expand_string_dollar_quote, since
+         that happens after history expansion and before alias expansion in
+         normal processing 
+
+                                  3/15
+                                  ----
+subst.c
+       - expand_string_dollar_quote: fix out-of-order initialization
+
+Makefile.in
+       - {TAGS,tags}: add ETAGS/ETAGSFLAGS/CTAGS/CTAGS flags; make sure to
+         cd to the source directory before running them to get source files
+         that don't have absolute paths. Fix from Mike Jonkmans
+         <bashbug@jonkmans.nl>
+
+parse.y
+       - xparse_dolparen: don't longjmp if FLAGS includes SX_NOLONGJMP. From
+         a report by Xu Lu <oliver_lew@outlook.com>
+
+                                  3/16
+                                  ----
+subst.c
+       - process_substitute: set startup_state and parse_and_execute_level
+         to see if we can avoid a fork()
+
+bashline.c
+       - bash_spell_correct_word: bindable command (spell-correct-word) to
+         perform spelling correction on the current `shellword', using the
+         same code as the `cdspell' option and directory spelling correction
+         during completion. Feature suggested by in 10/2020 by
+         Karl Kleinpaste <karl@kleinpaste.org>
+       - bash_spell_correct_word: bound to "C-x s" by default in emacs mode
+
+lib/readline/display.c
+       - rl_redisplay: fix redisplay problem that occurs when switching from
+         the rl-digit-argument prompt "(arg: N)" back to the regular prompt,
+         and the regular prompt contains invisible characters
+
+doc/bash.1,lib/readline/doc/rluser.texi
+       - spell-correct-word: document new function and its default binding
+
+                                  3/17
+                                  ----
+doc/{bash.1,bashref.texi}
+       - cd: slight changes to specify that it sets PWD and OLDPWD
+       - {pushd,popd}: make it clear that these builtins use cd to change
+         the current working directory; change wording to simplify the
+         description and clarify the exit status
+
+                                  3/18
+                                  ----
+execute_cmd.c
+       - execute_disk_command: after performing redirections, call
+         unlink_all_fifos() to remove the FIFOs created as part of
+         expanding redirections. They should have been opened by then, and
+         we're going to call shell_execve right away anyway, so we won't be
+         around to remove the FIFOs. From a report from
+         Michael Felt <aixtools@gmail.com>
+
+                                  3/22
+                                  ----
+parse.y
+       - alias_expand_token: slight tweak to check for alias expansion: perform
+         expansion unconditionally if PST_ALEXPNEXT is set, and disable it
+         in case statement pattern lists if the previous token indicates a
+         command name is acceptable.
+         From a report by Oguz <oguzismailuysal@gmail.com>
+
+config-bot.h
+       - HAVE_MKDTEMP: fix typo
+
+                                  3/25
+                                  ----
+lib/readline/terminal.c
+       - look in terminfo for key sequences for page up (kP) and page down
+         (kN) and bind them to history-search-{backward,forward},
+         respectively. From a patch from Xose Vazquez Perez
+         <xose.vazquez@gmail.com>
+
+                                  3/30
+                                  ----
+doc/bashref.texi
+       - expand the node describing $"..." string translation with additional
+         details and examples
+
+                                  3/31
+                                  ----
+misc.c
+       - rl_fetch_history: moved here from vi_mode.c
+       - rl_fetch_history: negative arguments count back from the end of
+         the history, instead of taking you to the beginning of the history
+         list
+       - rl_fetch_history: in vi mode, an out-of-range argument rings the
+         bell and doesn't change the line
+
+vi_mode.c
+       - rl_vi_fetch_history: call rl_fetch_history
+
+readline.h
+       - rl_fetch_history: new extern declaration
+
+doc/bash.1,lib/readline/doc/{readline.3,rluser.texi}
+       - rl_fetch_history: add description
+
+builtins/setattr.def
+       - show_var_attributes: if a variable's value indicates that it should
+         be ANSI-C quoted, use ansic_quote instead of sh_double_quote to
+         format the value string. From proposal by Greg Wooledge
+         <greg@wooledge.org>
+
+                                   4/5
+                                   ---
+arrayfunc.c
+       - unbind_array_element: if FLAGS includes VA_ONEWORD, don't use
+         skipsubscript to parse the subscript, just assume the entire SUB is
+         the subcript and that it contains the closing `]', so we just want
+         everything in SUB except the last character.
+
+parse.y:
+       - select_command: use compound_list instead of list, like for_command.
+         Report by Greywolf <greywolf@starwolf.com>
+       - list: move this into compound_list (replacing the instance of `list'
+         in the compound_list production), remove from the grammar
+
+                                   4/6
+                                   ---
+arrayfunc.c
+       - unbind_array_element: use VA_NOEXPAND instead of literal 1
+
+                                   4/7
+                                   ---
+lib/readline/funmap.c
+       - default_funmap: add missing `vi-undo' to the list of vi-mode bindable
+         functions. Reported by Xirui Zhao <quinean@icloud.com>
+
+                                   4/8
+                                   ---
+
+config-top.h
+       - DEFAULT_LOADABLE_BUILTINS_PATH: default value for BASH_LOADABLES_PATH
+
+doc/{bash.1,bashref.texi}
+       - enable: note that it uses $BASH_LOADABLES_PATH, and that the default
+         is system-dependent
+
+variables.c
+       - initialize_shell_variables: initialize BASH_LOADABLES_PATH to the
+         default given in DEFAULT_LOADABLE_BUILTINS_PATH
+
+                                  4/12
+                                  ----
+doc/{bash.1,bashref.texi}
+       - add link to git master tar file as a place to get the current version
+
+                                  4/14
+                                  ----
+bashline.c
+       - attempt_shell_completion: use -1 as a sentinel value for
+         in_command_position indicating that we cannot be in a command position
+         (e.g., because we're the target of a redirection) and should not
+         check for a programmable command completion or tell the programmable
+         completion code to use command completion. Report and fix from
+         Marc Aurèle La France <tsi@tuyoix.net>
+
+                                  4/16
+                                  ----
+builtins/bind.def
+       - bind_builtin: reverse sense of strvec_search return value when
+         deciding whether or not to remove a unix-command binding from the
+         cmd keymap. Bug report by Dale Sedivec <dale@codefu.org>
+
+lib/readline/doc/rltech.texi
+       - RL_PROMPT_{START,END}_IGNORE: document current values of \001 and
+         \002. Report from Mingye Wang <arthur200126@gmail.com>
+
+                                  4/19
+                                  ----
+arrayfunc.c
+       - assign_assoc_from_kvlist: fix memory leak reported by konsolebox
+         <konsolebox@gmail.com>
+
+                                  4/20
+                                  ----
+command.h,subst.c
+       - W_ITILDE: remove, replace with a variable since it's only used inside
+         a single call to expand_word_internal
+
+                                  4/21
+                                  ----
+{subst.c,make_cmd.c,parse.y}
+       - W_DQUOTE: no longer used, use W_NOPROCSUB and W_NOTILDE directly
+         (for arithmetic commands and words in arithmetic for commands)
+
+                                  4/24
+                                  ----
+bashline.c
+       - executable_completion: since this function gets an unquoted filename
+         from rl_filename_completion_function, we need to quote special
+         characters before passing it to bash_directory_completion_hook.
+         Report from Alex fxmbsw7 Ratchev <fxmbsw7@gmail.com>
+
+                                  4/26
+                                  ----
+lib/readline/search.c
+       - _rl_nsearch_abort: move function calls around so _rl_restore_prompt
+         happens before rl_clear_message, like when aborting an incremental
+         search. Suggested by sparrowhawk996@gmail.com
+
+subst.h
+       - ASS_ALLOWALLSUB: new assignment flag value, means to allow @ and * as
+         valid array subscripts when assigning to existing associative arrays
+
+arrayfunc.c
+       - assign_array_element: allow assignment of key `@' to an existing
+         associative array if the caller passes ASS_ALLOWALLSUB
+       - assign_compound_array_list: allow ( [@]=value ) to an existing
+         associative array
+
+builtins/declare.def
+       - declare_internal: allow assignment of key `@' to an existing
+         associative array by passing ASS_ALLOWALLSUB to assign_array_element
+         as part of local_aflags. This affects declare, local, and typeset
+
+subst.c
+       - do_assignment_internal: allow a[@]=value to an existing associative
+         array by passing ASS_ALLOWALLSUB to assign_array_element
+
+                                  4/27
+                                  ----
+builtins/common.[ch]
+       - builtin_bind_var_to_int: wrapper for bind_var_to_int to be used by
+         builtin commands; placeholder for future work
+
+builtins/wait.def
+       - builtin_bind_var_to_int: use instead of bind_var_to_int
+
+builtins/common.c
+       - builtin_bind_variable: allow assignment of key `@' to an existing
+         associative array by passing ASS_ALLOWALLSUB to assign_array_element.
+         This affects printf and read
+
+builtins/variables.[ch]
+       - bind_var_to_int: add third `flags' argument to pass to bind_variable
+         instead of always passing 0
+
+redir.c,builtins/common.c,builtins/printf.def
+       - bind_var_to_int: change callers, add third flags argument
+
+builtins/common.c
+       - builtin_bind_var_to_int: pass ASS_ALLOWALLSUB to bind_var_to_int so
+         builtins like wait can assign to assoc[@] and assoc[*]
+
+                                  4/28
+                                  ----
+bashline.c
+       - command_word_completion_function: make sure to initialize
+         old_glob_ignore_case before trying to restore from it
+       - command_word_completion_function: if we are completing a glob
+         pattern, make sure to set rl_filename_completion_desired, so we get
+         quoting and appending -- we are completing a filename, after all.
+         From a report from Manuel Boni <ziosombrero@gmail.com>
+
+lib/readline/bind.c
+       - enable-active-region: separate control of the active region and
+         bracketed paste. Still set to the same default value as bracketed
+         paste, and enabling bracketed paste enables the active region.
+         Now you can enable bracketed paste and then turn off the active
+         region.
+
+doc/bash.1,lib/readline/doc/{readline.3,rltech.texi}
+       - enable-active-region: document new bindable readline variable and
+         its effects
+
+                                  4/30
+                                  ----
+command.h
+       - W_ARRAYREF: new flag, meaning the word is a valid array reference
+         with subscript, replaces W_DOLLARSTAR, which was unused
+
+subst.c        
+       - expand_subscript_string,expand_array_subscript: new functions to
+         parse and expand-and-quote array subscripts. For future use
+
+                                   5/3
+                                   ---
+builtins/mapfile.def
+       - mapfile: if the delimiter is a newline, set unbuffered_read = 1
+         for any file descriptor that isn't seekable and lseek sets errno
+         to ESPIPE (pipes, FIFOs, maybe terminal devices). If it's not a
+         newline, only allow buffered reads if the file descriptor is a
+         regular file. Report from Koichi Murase <myoga.murase@gmail.com>
+
+builtins/read.def
+       - read_builtin: only set unbuffered_read = 1 if the input is coming
+         from a pipe (which we can't seek on) or the input is a terminal and
+         we want to read a specified number of characters or we're using a
+         non-standard delimiter
+
+                                   5/4
+                                   ---
+
+builtins/mapfile.def
+       - mapfile: call zsyncfd before calling the callback. Suggested by
+         Koichi Murase <myoga.murase@gmail.com>; we'll see how it goes
+
+                                   5/5
+                                   ---
+subst.h
+       - expand_subscript_string: extern declaration
+
+{arrayfunc,subst}.c
+       - expand_subscript_string: replace expand_assignment_string_to_string
+         with calls to this when expanding array subscripts
+
+subst.c
+       - cond_expand_word: call expand_word_internal with Q_ARITH if `special'
+         says we should quote for an arithmetic expression context
+       - expand_word_internal: call expand_array_subscript when we see `[' in
+         arithmetic or array subscript contexts, make conditional on the
+         compatibility level later
+       - expand_word_internal: make sure W_ARRAYREF makes it through this
+         function and into the returned word
+
+                                   5/6
+                                   ---
+
+arrayfunc.c
+       - array_expand_index: call evalexp with a flag of 0 since we call
+         expand_arith_string with Q_ARITH and we want evalexp to remove
+         the quotes
+
+execute_cmd.c
+       - eval_arith_for_expr,execute_arith_command: now that Q_ARITH has an
+         effect on array subscripts (it quotes the special expansion
+         characters), call evalexp with 0 as the flags arg so quote removal
+         is performed on this quoted argument. Make this conditional on the
+         shell compatibility level later
+       - execute_cond_command: make sure to expand the argument to -v by
+         calling cond_expand_node with Q_ARITH, and correspondingly turn off
+         assoc_expand_once when calling unary_test with that argument, since
+         we want it to be expanded again to remove the quotes
+       - execute_cond_command: expand the arguments to the arithmetic operators
+         with Q_ARITH and pass TEST_ARITHEXP to binary_test to ensure that
+         it lets evalexp expand the arguments to remove the quoting
+
+test.c
+       - arithcomp: if TEST_ARITHEXP is in FLAGS, call evalexp with a flag
+         if 0 to force evalexp to expand the arguments to remove the quoting
+
+subst.c
+       - param_expand: since we call expand_arith_string with Q_ARITH, we need
+         to call evalexp with 0 instead of EXP_EXPANDED for $((...)) expansion
+       - expand_word_internal: if we recursively call expand_word_internal to
+         expand the contents of a double-quoted string, make sure we pass
+         through Q_ARITH if it appears in QUOTED
+       - verify_substring_values: call expand_arith_string with Q_ARITH and
+         correspondingly call evalexp with 0 instead of EXP_EXPANDED
+
+execute_cmd.c
+       - execute_cond_node: if -v is the operator, and the operand is a valid
+         array reference, pass TEST_ARRAYEXP flag to unary_test
+
+                                   5/7
+                                   ---
+builtins/common.[ch]
+       - set_expand_once: set array_expand_once to the value passed as the
+         first argument, returning the original value
+
+builtins.h
+       - ARRAYREF_BUILTIN: new flag for shell builtins, means that the builtin
+         can take array references, with subscripts, as arguments
+
+builtins/mkbuiltins.c
+       - set ARRAYREF_BUILTIN flag on builtins given in the arrayvar_builtins
+         array
+
+execute_cmd.c
+       - execute_cond_node: use set_expand_once to set array_expand_once to 0
+         before calling unary_test with -v (see change from 5/6)
+
+arrayfunc.c
+       - unbind_array_element: allow the caller to choose whether or not a
+         subscript of `*' or `@' unsets the entire array by passing
+         VA_ALLOWALL in FLAGS. Right now, since the unset builtin doesn't
+         pass VA_ALLOWALL, those subscripts unset individual elements for
+         associative arrays. We preserve the old behavior of unsetting
+         indexed arrays for the time being with new indexed-array-specific
+         code
+
+                                   5/9
+                                   ---
+
+builtins/shopt.def
+       - expand_once_flag: "assoc_expand_once" option now sets this flag,
+         calls set_assoc_expand on change
+       - set_assoc_expand: sets assoc_expand_once to mirror expand_once_flag;
+         placeholder for future changes
+
+builtins/common.h
+       - expand_once_flag: extern declaration
+
+                                  5/10
+                                  ----
+doc/{bash.1,bashref.texi}
+       - note that case patterns undergo quote removal. Reported by
+         AlvinSeville7cf <alvinseville7cf@gmail.com>
+
+                                  5/11
+                                  ----
+
+builtins/bashgetopt.c
+       - list_optflags: flags associated with the word corresponding to
+         list_optarg, assuming list_optarg is a separate argument
+
+builtins/bashgetopt.h
+       - list_optflags: extern declaration
+
+builtins/set.def
+       - unset_builtin: set VFLAGS each time through the loop, since we take
+         whether or not the word has W_ARRAYREF set into account
+       - unset_builtin: don't pass VA_ALLOWALL to unbind_array_element for
+         now
+
+test.c
+       - unary_test: in the -v case, use assoc_expand_once in the first call
+         to valid_array_reference ()
+
+builtins/printf.def
+       - printf_builtin: only set VA_ONEWORD if the option argument to -v has
+         W_ARRAYREF set (look at list_optflags)
+
+                                  5/12
+                                  ----
+
+subst.c
+       - expand_array_subscript: don't quote @ or * in the expanded subscript
+         at all, even when they are the only character in the subscript. See
+         how this works out -- it might uncover places where we need to allow
+         `*' and `@' as subscripts where they are not allowed now
+
+expr.c
+       - expr_bind_variable: pass ASS_ALLOWALLSUB to bind_int_variable so we
+         can allow (( A[@]=value )) when A is an existing associative array
+
+arrayfunc.h
+       - AV_ATSTARKEYS: new flag value, means to accept a[@] and a[*] but
+         treat them as keys/expressions and not special values
+
+arrayfunc.c
+       - array_value_internal: check AV_ATSTARKEYS and don't treat them as
+         ALL_ELEMENT_SUB values; they fall through to use as keys/indices
+
+test.c
+       - unary_test: if -v is passed an array reference, add AV_ATSTARKEYS to
+         the flags passed to array_value so we treat @ and * as keys for an
+         existing associative array
+
+                                  5/13
+                                  ----
+
+subst.c
+       - expand_cond_word: if SPECIAL == 3 (arithmetic expression), dequote the
+         resulting WORD_LIST * as if special == 0, because we don't want to
+         quote the list for pattern matching. Report from
+         Adjudicator Darren <adjudicatordarren@protonmail.com>
+
+                                  5/14
+                                  ----
+subst.c
+       - expand_array_subscript: add double quote (") to the list of characters
+         that are backslash-quoted in subscripts after word expansion.
+         skipsubscript treats them specially, so you have to quote them to
+         do things like `key='"' ; array[$key]=1 ; [[ -v array[$key] ]]'
+
+                                  5/16
+                                  ----
+
+builtins/wait.def
+       - wait_builtin: if we longjmp to wait_intr_buf, call unset_waitlist if
+         we have called set_waitlist (wflags & JWAIT_WAITING). Fixes bug with
+         wait -n interrupted by a trapped signal (not SIGINT) reported by
+         Jonas Alfredsson <jonas.alfredsson@protonmail.com>
+
+jobs.c
+       - wait_sigint_cleanup: restore the old sigint handler before we longjmp
+         out by calling restore_sigint_handler()
+
+                                  5/17
+                                  ----
+builtins/read.def
+       - bind_read_variable: now takes an additional argument, flags to pass
+         to builtin_bind_variable; change callers
+       - SET_VFLAGS: set vflags and bindflags
+       - read_builtin: call SET_VFLAGS to set vflags and bindflags from each
+         word before calling valid_array_reference and bind_read_variable
+
+builtins/common.c
+       - builtin_bind_variable: set vflags (for valid_array_reference) and
+         bindflags (for bind_variable/assign_array_element) separately for
+         clarity
+
+arrayfunc.c
+       - assign_array_element: sanity check: make sure that the subscript
+         returned by array_variable_name consumes the entire NAME, otherwise
+         flag it as a subscript error. This keeps things like
+         `KEY=' ]'; read assoc[$KEY] <<< hello' from assigning to incomplete
+         subscripts
+
+builtins/printf.def
+       - printf_builtin: if LIST_OPTFLAGS includes W_ARRAYREF, set VA_NOEXPAND
+         in VFLAGS
+
+                                  5/17
+                                  ----
+
+lib/readline/complete.c
+       - compute_lcd_of_matches: move a couple of strlen calls out of a loop
+         in calls to mbrtowc; performance improvement only. Report and fix
+         from sparrowhawk996@gmail.com
+
+lib/readline/bind.c
+       - rl_trim_arg_from_keyseq: take a key sequence and its length and
+         return the index into the key sequence following any initial numeric
+         argument. Return -1 if there is no numeric argument (the caller is
+         expected to make sure) or if the key sequence consists *only* of
+         the numeric argument. The caller should use the remainder of the
+         key sequence to look up the desired key binding.
+
+lib/readline/readline.h
+       - rl_trim_arg_from_keyseq: extern declaration
+
+bashline.c
+       - bash_execute_unix_command: if the argument count is > 1 or we have
+         an explicit argument, call rl_trim_arg_from_keyseq to get past the
+         numeric argument and deal with the rest of the key sequence. We still
+         need a way to pass it to the invoked program or function. From
+         a report from Jesper Nygards <jesper.nygards@gmail.com>
+
+                                  5/18
+                                  ----
+
+bashline.c
+       - bash_execute_unix_command: if the user supplied a numeric argument
+         when invoking bash_execute_unix_command, pass it to the command in
+         the READLINE_ARGUMENT variable
+
+lib/readline/readline.[ch]
+       - _rl_del_executing_keyseq: convenience function to `delete' the last
+         character added to the executing key sequence. Intended to be used
+         before calling rl_execute_next or similar functions that push input
+         back to be re-read
+
+doc/{bash.1,bashref.texi}
+       - READLINE_ARGUMENT: documented new variable available for commands
+         defined using `bind -x' keybindings
+
+lib/readline/doc/rltech.texi
+       - rl_trim_arg_from_keyseq: documented new function
+
+                                  5/19
+                                  ----
+
+builtins/evalstring.c
+       - should_suppress_fork: suppress the fork if we're in a process
+         substitution subshell, in addition to being a simple command
+         without redirections. From a report back in 10/2020 from
+         Hyunho Cho <mug896@gmail.com>
+
+bashline.c
+       - command_word_completion_function: if we're trying to complete an
+         absolute program (one containing a slash), don't run strcmp or
+         strcasecmp on the return value from rl_filename_completion_function,
+         since that duplicates work the filename completion function already
+         does. From a report back in 1/2021 by awa54@cdak.net
+
+                                  5/22
+                                  ----
+parse.y
+       - CHECK_FOR_RESERVED_WORD: if we are returning an ESAC and unsetting
+         PST_CASESTMT, decrement esacs_needed_count
+
+parse.y,shell.h
+       - sh_parser_state_t: save and restore esacs_needed_count and
+         expecting_in_token in the shell parser state struct and
+         save_parser_state/restore_parser_state
+
+print_cmd.c
+       - print_simple_command: don't bother to call command_print_word_list
+         with an empty list
+       - print_simple_command: don't print a space before a redirection list
+         if there weren't any command words to print
+
+                                  5/24
+                                  ----
+
+lib/sh/input_avail.c
+       - nchars_avail: make sure SET and OSET are declared on systems with
+         select(2). Reported by Larkin Nickle <me@larbob.org>
+
+parse.y
+       - cond_term: if we read a `!' toggle CMD_INVERT_RETURN instead of
+         setting it unconditionally. Report and patch from
+         Vincent Menegaux <vincent.menegaux@gmail.com> via
+         https://savannah.gnu.org/patch/?10070
+
+                                  5/25
+                                  ----
+doc/{bash.1,bashref.texi}
+       - test: add the ( $2 $3 ) case to the description of the four-argument
+         behavior. Inspired by a discussion with Christoph Anton Mitterer
+         <calestyo@scientia.net>
+
+                                  5/27
+                                  ----
+doc/bashref.texi
+       - replace most of the GNU parallel section with a reference to the
+         tutorial on gnu.org
+
+lib/glob/glob.h
+       - GX_NEGATE: new flag; indicates whether the pattern is being negated
+         as part of an extglob pattern. Not used yet
+
+lib/glob/glob.c
+       - extglob_skipname,wextglob_skipname: pass GX_NEGATE to the skipname
+         functions if the pattern is being negated. Not checked yet
+
+                                  5/28
+                                  ----
+doc/{bash.1,bashref.texi}
+       - dotglob: add text to clarify that `.' and `..' have to be matched by
+         a pattern beginning with `.' or -- and this is the sketchy part --
+         that a pattern beginning with `.' has to be one of the patterns in
+         an extended glob expression
+
+lib/glob/glob.c
+       - skipname,wskipname: perform the special checks for `.' only if the
+         pattern is not being negated
+
+                                   6/3
+                                   ---
+parse.y,shell.h
+       - eol_ungetc_lookahead: save and restore as part of the parser state
+         included in {save,restore}_parser_state
+
+                                   6/7
+                                   ---
+lib/readline/display.c
+       - puts_face: make sure to cast each member of STR to unsigned char, so
+         it's not misinterpreted as EOF, which putc_face does not display.
+         Report and fix from Volodymyr Prodan <vovcat@gmail.com> in
+         https://savannah.gnu.org/patch/?10076
+
+examples/shobj-conf
+       - aix*gcc: change SHOBJ_LD to ${CC}, prefix the SHOBJ_LDFLAGS flags
+         with -Wl, so gcc will pass them to the linker. Report from
+         lehel@maxer.hu in https://savannah.gnu.org/support/?110505
+
+                                  6/11
+                                  ----
+doc/{bash.1,bashref.texi}
+       - cd: additional arguments are not ignored; they raise an error.
+         Report from Douglas McIlroy <douglas.mcilroy@dartmouth.edu>
+
+lib/glob/strmatch.h
+       - FNM_DOTDOT: enable special handling for `.' and `..': if FNM_PERIOD
+         is not set, `.' and `..' at the start of a string or as a pathname
+         component need to be matched by a `.' in the pattern and cannot be
+         matched by `?', `*', or a bracket expression
+       
+lib/glob/glob.c
+       - glob_vector: pass FNM_DOTDOT to strmatch() if noglob_dot_filenames
+         is not set to enable special handling of `.' and `..'. Prompted by a
+         discussion with Nora Platiel <nplatiel@gmx.us>
+       - skipname,wskipname: remove special checks for `.' and (disabled)
+         checks for `..'
+
+lib/glob/sm_loop.c
+       - GMATCH: implement special handling for FNM_DOTDOT and `.' and `..':
+         make sure they can't be matched by any special glob characters at
+         the start of the string or as a pathname component (if FNM_PATHNAME
+         is set). This also means that !(pattern) won't return `.' or `..'
+         if dotglob is set
+       - GMATCH,EXTMATCH: don't pass FNM_DOTDOT down to recursive calls, like
+         FNM_PERIOD, once we process the first character in the string or
+         pathname component
+
+lib/glob/smatch.c
+       - ISDIRSEP,PATHSEP,SDOT_OR_DOTDOT,PDOT_OR_DOTDOT: provide definitions
+         for single-byte or wide character strings for sm_loop.c to use
+
+                                  6/16
+                                  ----
+
+doc/{bash.1,bashref.texi},lib/readline/doc/{rluser,rltech}.texi
+       - slight wording changes to rewrite gender-specific language. From a
+         report by Vipul Kumar <kumar+bug-bash@onenetbeyond.org>, suggested
+         language from G. Branden Robinson <g.branden.robinson@gmail.com>,
+         Lawrence Velázquez <vq@larryv.me>,
+         and Andrew Church <achurch+bash@achurch.org>
+
+builtins/fc.def
+       - fc_builtin: make sure an entry in the history list is non-null
+         before trying to write it to stdout or the temporary file. From a
+         report from Sibo Dong <sibo.dong@outlook.com>
+
+builtins/common.[ch]
+       - builtin_arrayref_flags: given a WORD_DESC * (which includes flags)
+         and a base set of flags, return a set of flags to pass to
+         valid_array_reference and similar functions
+
+builtins/set.def
+       - unset_builtin: call builtin_arrayref_flags to set vflags
+
+                                  6/19
+                                  ----
+
+parse.y
+       - parse_comsub: rewrite to recursively call the parser (yyparse()) and
+         return a string constructed from the resulting parse tree. Probably
+         will only work with bison. Error reporting is more accurate about
+         line numbers and invalid tokens, and command substitution errors 
+         are caught earlier, before expansion
+       - DOLPAREN: new token, never created by yylex; only ever set by
+         parse_comsub and xparse_dolparen to indicate we're recursively
+         calling the parser for a command substitution
+       - comsub: new grammar production that's triggered by DOLPAREN and
+         parses a command substitution, returning a <command>. It's one of
+         the possible end states for the top-level parser
+       - grammar: only call rewind_input_string if the shell's input is
+         coming from a string
+       - shell_ungets: push a string back onto the shell input; only used by
+         make_here_document for backwards compatibility -- allowing a here-
+         document to be terminated by a token at the end of a command
+         substitution
+       - yylex: don't need any more special handling when returning
+         shell_eof_token, but we keep the clause for future work
+       - read_token_word: don't handle backslashes (leave them in the input
+         stream) if we are reading a command substitution (PST_NOEXPAND)
+       - reserved_word_acceptable: allow reserved words after DOLPAREN
+       - report_syntax_error: better error handling if we hit EOF while
+         looking for the ending right paren in a command substitution
+       - parse_string_to_word_list,parse_compound_assignment: make sure to
+         turn off parse_comsub sentinel temporarily
+
+make_cmd.c
+       - make_here_document: backwards compatibility: if we end a here
+         document on the same line as the end of a command substitution,
+         allow the token to terminate the here document (without requiring
+         a newline) and push the remainder of the line back for the parser
+         to consume and terminate the command substitution
+
+builtins/evalstring.c
+       - parse_string: if we read shell_eof_token and use it to terminate a
+         command, rewind the input string here before returning, instead of
+         guessing where to rewind it in the caller
+
+                                  6/22
+                                  ----
+
+redir.c
+       - do_redirection_internal: if VARASSIGN_REDIR_AUTOCLOSE is non-zero,
+         add a redirect to automatically close {var}<fn and other styles of
+         varassign redirection. It's zero by default
+
+builtins/shopt.def
+       - varredir_close: new shell option, mirrors the value of
+         varassign_redir_autoclose. Suggested multiple times by multiple
+         people
+
+doc/{bash.1,bashref.texi}
+       - varredir_close: document new shell option (the name is tentative)
+
+                                  6/24
+                                  ----
+
+parse.y
+       - yylex: if read_token returns a value < 0, return YYerror to the
+         parser
+       - parse_comsub: if the current_token is not shell_eof_token when
+         yyparse returns, return an error to read_token_word instead of
+         trying to keep parsing. Fixes interactive-only (?) bug reported by
+         Koichi Murase <myoga.murase@gmail.com>
+
+parser.h
+       - PST_NOERROR: don't print error messages in yyerror(), just reset
+         the parser and return
+
+parse.y
+       - yyerror: if parser_state & PST_NOERROR, don't print an error message
+       - xparse_dolparen: if the flags includes SX_COMPLETE, add PST_NOERROR
+         to parser_state, to inhibit error messages. Fixes bug with adding
+         lines with incomplete command substitutions to the history list
+         reported by Koichi Murase <myoga.murase@gmail.com>
+
+subst.c
+       - skip_matched_pair: make sure to pass the SX_COMPLETE flag to
+         extract_delimited_string
+
+                                  6/28
+                                  ----
+
+lib/readline/bind.c
+       - rl_trim_arg_from_keyseq: handle rl_vi_arg_digit if VI_MODE is
+         defined. Report and fix from Koichi Murase <myoga.murase@gmail.com>
+       - rl_trim_arg_from_keyseq: rework to handle case where the digit
+         argument is given as a discrete sequence of multiple rl_digit_argument
+         commands (e.g, "M-1 M-2" instead of "M-1 2"). Report and fix from
+         Koichi Murase <myoga.murase@gmail.com>
+
+subst.c
+       - pat_subst: avoid calling RESIZE_MALLOCED_BUFFER with STRLEN(s) as an
+         argument, since it ends up going into a loop. Report and fix from
+         Koichi Murase <myoga.murase@gmail.com>
+
+lib/sh/casemod.c
+       - cval: take the string length as an argument, to avoid having to call
+         strlen every time (in HANDLE_MULTIBYTE mode). The caller already has
+         this info. Report and fix from Koichi Murase <myoga.murase@gmail.com>
+
+builtins/complete.def
+       - print_cmd_name: single-quote the command name if it contains any
+         shell metacharacters
+       - print_one_completion: call print_arg with a second arg of 1 if the
+         function name contains shell metacharacters. Report and fix from
+         Koichi Murase <myoga.murase@gmail.com>
+
+                                  6/30
+                                  ----
+
+configure.ac
+       - substitute BASE_CFLAGS_FOR_BUILD and STYLE_CFLAGS into Makefile
+         targets
+       - take STYLE_CFLAGS out of the CFLAGS_FOR_BUILD variable that gets
+         substituted
+       - remove STYLE_CFLAGS from CFLAGS
+       - use `:+' expansion to set variables based on whether $GCC is set
+         or null, since configure can do GCC=
+
+support/Makefile.in
+       - man2html: remove CCFLAGS_FOR_BUILD from the recipe, leaving only
+         LDFLAGS_FOR_BUILD. Report from Jay K <jayk123@hotmail.com>
+       - gen-helpfiles: remove CCFLAGS_FOR_BUILD from the recipe, leaving
+         only LDFLAGS_FOR_BUILD
+       - man2html: use $(STYLE_CFLAGS) in BASE_CCFLAGS variable for C file
+         compilation options
+
+{,builtins}/Makefile.in, lib/{sh,readline,malloc,glob}/Makefile.in
+       - use STYLE_CFLAGS so specifying CFLAGS=-g to make doesn't clutter the
+         output with warnings about parens and format strings
+
+                                   7/9
+                                   ---
+lib/readline/search.c
+       - make_history_line_current: call _rl_free_saved_history_line to clean
+         up _rl_saved_line_from_history and get all the code that frees it
+         into one place
+
+lib/readline/misc.c
+       - _rl_free_saved_history_line: if rl_undo_list points to the data
+         member of _rl_saved_line_from_history, set it to NULL to avoid having
+         it point to freed memory, since the next thing we do now is to free
+         the undo list the data member points to
+       - _rl_start_using_history: call _rl_free_saved_history_line instead of
+         calling _rl_free_history_entry directly. Fixes memory leak reported
+         by Trung Dam <trungdam@yahoo.com>
+
+                                  7/12
+                                  ----
+lib/readline/search.c
+       - make_history_line_current: free rl_undo_list before replacing the
+         current line with the line from history, since it is a private
+         undo list from reading the search string
+
+lib/readline/rlmbutil.h
+       - Since wchar_t/mbrtowc/wcrtomb are limited to 16 bits on Windows
+         with MSVC, start abstracting the differences using WCHAR_T/
+         MBRTOWC/WCRTOMB
+
+                                  7/13
+                                  ----
+
+lib/readline/{complete,display,input,text,util,vi_mode}.c
+       - use WCHAR_T/MBRTOWC/WCRTOMB. Part of a set of Windows MSVC fixes
+         from sparrowhawk996@gmail.com
+
+builtins/{enable,hash,help}.def
+       - enable_builtin: use sh_chkwrite after output to check for write errors
+
+                                  7/16
+                                  ----
+arrayfunc.c
+       - quote_compound_array_word: free SUB and VALUE after assigning from
+         sh_single_quote(). From a coverity report from
+         Siteshwar Vashisht <svashisht@redhat.com>
+
+bashhist.c
+       - bash_remove_history_range: free DISCARD_LIST after freeing its
+         elements
+
+bashline.c
+       - bash_directory_expansion: add code to free D as a separate branch,
+         though it's never hit in practice
+
+builtins/trap.def
+       - showtrap: free T even if show_default == 1 if it's a non-default
+         trap string
+
+                                  7/17
+                                  ----
+execute_cmd.c
+       - execute_coproc: free NAME on invalid identifier error
+
+lib/glob/glob.c
+       - glob_vector: make sure NEXTLINK is allocated using malloc before
+         passing it to free()
+       - glob_filename: free RESULT before returning glob_error_return when
+         there is only a filename
+
+print_cmd.c
+       - indirection_level_string: make sure we free PS4 after calling
+         decode_prompt_string if *ps4 == 0
+
+subst.c
+       - parameter_brace_transform: if vtype == VT_VARIABLE, we need to free
+         a non-null VAL
+
+variables.c
+       - assign_in_env: if NAME is not a valid shell identifier, free it
+         after printing the error message and before returning. These are
+         the rest of the fixes from Siteshwar Vashisht <svashisht@redhat.com>
+
+                                  7/22
+                                  ----
+shell.c
+       - main: set dollar_vars[0] to shell_script_filename before calling
+         run_startup_files() in the non-interactive case. Restore it after
+         run_startup_files returns so we can get better error messages if
+         we can't open a script file. Suggested by several people, originally
+         by Marc Aurèle La France <tsi@tuyoix.net> back in 2/2021 (in a
+         different form) and most recently by Tapani Tarvainen
+         <bash@tapanitarvainen.fi>
+
+                                  7/28
+                                  ----
+trap.c
+       - any_signals_trapped: return that a signal is trapped only if it's
+         not ignored. This is an additional opportunity for optimization,
+         reported in https://bugzilla.redhat.com/show_bug.cgi?id=1981926
+
+                                  7/30
+                                  ----
+examples/loadables/sleep.c
+       - main: if the uconvert conversion fails, but the argument appears to
+         contain a GNU-like interval specifier like "1m30s", return
+         EX_DISKFALLBACK so the execute_builtin code tries to run the
+         external version
+
+builtins/enable.def
+       - enable_shell_builtin: if the builtin isn't found, return EX_NOTFOUND
+         to allow the caller (enable_builtin) to react differently if it
+         wants to
+       - dyn_load_builtin: if the shared object isn't found, return EX_NOTFOUND,
+         change enable_builtin to deal with it
+       - enable_builtin: if there are no supplied options, and we attempt to
+         enable a non-existent builtin, try modifying `enable name' to the
+         equivalent of `enable -f name name' and return success if we
+         successfully load a builtin from a shared object. Proposed several
+         times, most recently by Robert Elz <kre@munnari.OZ.AU>
+
+doc/{bash.1,bashref.texi}
+       - enable: document new behavior of `enable NAME' when NAME is not a
+         current shell builtin
+
+                                   8/3
+                                   ---
+lib/glob/sm_loop.c
+       - GMATCH: check for interrupts or terminating signals each time through
+         the loop and return FNM_NOMATCH immediately if received. Let the
+         higher layers deal with interrupting the match and jumping out.
+         Inspired by a report from andrej@podzimek.org
+
+                                   8/6
+                                   ---
+subst.c
+       - {parameter_brace_remove_pattern,parameter_brace_transform,
+          parameter_brace_substring,parameter_brace_casemod,
+          parameter_brace_patsub}: make sure the IND argument is of type
+          arrayind_t to handle the full range of subscripts. Reported by
+          felix@f-hauri.ch
+
+builtins/printf.def
+       - printf_builtin: take new format specifier: %Q. This acts like %q
+         but applies any supplied precision to the original unquoted
+         argument, then quotes that result and outputs the entire quoted
+         string, preserving the original field width. Originally suggested
+         back in 4/2020 by Sam Liddicott <sam@liddicott.com>
+
+subst.c
+       - char_is_quoted: check whether or not we are on the second or later
+         line of a command with an unclosed quoted string from a previous
+         line. If we are, see if it's closed before the character we're
+         checking, so we don't interpret a closing quote as starting a new
+         quoted string. Reported several times, most recently by
+         Phi Debian <phi.debian@gmail.com> in 6/2021.
+
+                                   8/9
+                                   ---
+parse.y,subst.c
+       - locale_expand: if the variable SINGLEQUOTE_TRANSLATIONS is non-zero,
+         single-quote the translated result of $"..." (if it's different from
+         the untranslated string)
+
+builtins/shopt.def
+       - noexpand_translation: new option to expose the value of
+         SINGLEQUOTE_TRANSLATIONS
+
+                                  8/10
+                                  ----
+doc/{bash.1,bashref.texi}
+       - noexpand_translation: add description of new option
+
+                                  8/16
+                                  ----
+builtins/printf.def
+       - printf_builtin: initialize retval after parsing arguments, since we
+         use it for the `v' option. Bug report from Keith Thompson
+         <Keith.S.Thompson@gmail.com>
+
+lib/sh/unicode.c
+       - u32tocesc: fix typo that returned \uXXXXXXXX instead of \UXXXXXXXX.
+         From https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=992257 by
+         <nabijaczleweli@nabijaczleweli.xyz>
+
+                                  8/17
+                                  ----
+siglist.c
+       - include command.h before general.h for PARAMS and prototypes. Report
+         from Osipov, Michael (LDA IT PLM) <michael.osipov@siemens.com>
+
+                                  8/18
+                                  ----
+lib/readline/colors.c
+       - S_ISBLK: make sure it's defined before we use it, like in complete.c
+
+lib/readline/complete.c,{bashline,variables}.c
+       - minor changes to prep for making rl_completer_word_break_characters
+         `const'
+
+subst.[ch],pcomplete.c
+       - split_at_delims: the DELIMS argument is now `const'; change callers
+
+lib/readline/rlmbutil.h
+       - _rl_wcwidth: add function prototype for inline function declaration
+
+lib/readline/bind.c
+       - _rl_get_keyname: print keys greater than 160 (which are valid UTF-8)
+         as octal escape sequences
+
+lib/readline/text.c
+       - do_lowercase_version: return 99999 to prevent the linker from
+         combining it with _rl_null_function and optimizing away the separate
+         copy. That messes with function pointer comparisons. Part of this
+         batch of fixes from sparrowhawk996@gmail.com
+
+                                  8/19
+                                  ----
+complete.c,readline.c,readline.h
+       - rl_completer_word_break_characters: now const char * like
+         rl_basic_word_break_characters; element of readline state struct
+         used to save it also const. THIS IS AN API CHANGE
+
+bashline.c
+       - orig_rl_completer_word_break_characters: now const char * like
+         rl_completer_word_break_characters
+
+                                  8/20
+                                  ----
+bashline.c
+       - bash_directory_completion_hook: if direxpand and dirspell are both
+         set while trying to complete an absolute pathname as a command, don't
+         take a spell-corrected directory name that is shorter than the
+         original hint. https://bugzilla.redhat.com/show_bug.cgi?id=1782809
+
+builtins/common.[ch]
+       - sh_noassign: convenience function to print an error message when a
+         user attempts an assignment to a "noassign" variable. Not used yet
+
+assoc.[ch]
+       - assoc_to_kvpair_list: new function, returns a WORD_LIST containing
+         key-value pairs as separate words
+
+array.[ch]
+       - array_to_kvpair_list: new function, returns a WORD_LIST containing
+         index-value pairs as separate words
+
+subst.c
+       - string_transform: handle '@k' transform like '@K'
+       - valid_parameter_transform: 'k' is a valid transform operator
+       - array_transform: handle '@k' transformation by calling one of
+         array_to_kvpair_list or assoc_to_kvpair_list and treating the
+         result as if expanding the array depending on whether the index is
+         `@' or `*' with the usual meanings
+
+doc/{bash.1,bashref.texi}
+       - document new '@k' parameter transformation operator
+
+                                  8/27
+                                  ----
+lib/readline/kill.c
+       - rl_unix_filename_rubout: handle pathnames that consist only of one
+         or more slashes. The old code went too far and deleted the previous
+         word as well. From dabe@dabe.com
+
+                                  8/31
+                                  ----
+parse.y
+       - STRING_SAVER: now save and restore shell_input_line_len; not sure
+         why it wasn't done before; fix push_string and pop_string accordingly
+       - prompt_again: now takes a parameter FORCE; not used yet (every
+         caller passes 0), needs more thought
+
+builtins/evalstring.h
+       - open_redir_file: broke code that expands the redirection and opens
+         the resultant filename into a new function, called from cat_file
+
+redir.h
+       - open_redir_file: extern declaration here for now
+
+builtins/evalstring.c
+       - parse_string: takes a new argument: COMMAND **cmdp; if non-null, saves
+         the parsed command to *cmdp and lets the caller manage it itself.
+         global_command is still not modified. Changed callers in parse.y
+
+                                   9/1
+                                   ---
+parse.y
+       - parse_string_to_command: stripped-down version of xparse_dolparen
+         that takes a string, runs it through the parser, and returns the
+         resultant COMMAND *; uses parse_string with the new argument
+
+externs.h
+       - parse_string_to_command: extern declaration
+
+builtins/evalstring.c
+       - can_optimize_cat_file: new function, takes a COMMAND * argument and
+         returns true if the command can be optimized like $(<file); changed
+         parse_and_execute to call it
+
+subst.c
+       - optimize_cat_file: new function, optimizes $(<file) without creating
+         a new process. Uses redir_open to open the redirection file, after
+         expansion, and calls read_comsub to read from it directly
+       - read_comsub: now reads into a 4096 byte buffer (COMSUB_PIPEBUF)
+       - command_substitute: if the string begins with a `<' and isn't followed
+         by any of "<>&", see if we can optimize the command and call
+         optimize_cat_file to do it if we can. 
+
+                                   9/2
+                                   ---
+configure.ac,config.h.in,lib/sh/setlinebuf.c
+       - SETVBUF_REVERSED: remove all references
+
+configure.ac,aclocal.m4
+       - AC_OUTPUT: move created files and commands to AC_CONFIG_FILES and
+         AC_CONFIG_COMMANDS; call AC_OUTPUT without any arguments
+       - require autoconf version 2.63
+       - AC_HELP_STRING -> AS_HELP_STRING
+       - replace references to $ac_cv_prog_gcc with $GCC
+       - AC_C_LONG_DOUBLE -> AC_TYPE_LONG_DOUBLE
+       - enable-alt-array-implementation: new configure option, placeholder
+         for later
+
+unwind_prot.c
+       - stddef.h: include if HAVE_STDDEF_H is defined, not STDC_HEADERS
+
+bashansi.h
+       - memory.h: don't include any more; assume <string.h> has all the
+         necessary defines
+
+aclocal.m4
+       - AC_HEADER_STDC: remove AC_REQUIRE calls to this; change tests to use
+         appropriate checks instead of STDC_HEADERS
+
+                                   9/3
+                                   ---
+configure.ac,config.h.in
+       - AC_TYPE_SIGNAL,BASH_TYPE_SIGHANDLER: remove calls, remove mention of
+         RETSIGTYPE and VOID_SIGHANDLER
+       - AC_USE_SYSTEM_EXTENSIONS: use this instead of AC_ISC_POSIX (which is
+         well and truly obsolete) and AC_MINIX (which just calls it anyway).
+         All the right defines are already present
+       - AC_HEADER_TIME: removed
+       - AC_HEADER_STDC: removed
+       - AC_DECL_SYS_SIGLIST: replaced with BASH_DECL_SYS_SIGLIST
+       - BASH_FUNC_CTYPE_NONASCII: removed
+
+sig.h,lib/readline/signals.c
+       - RETSIGTYPE -> void, SIGHANDLER_RETURN -> return
+
+include/posixtime.h
+       - don't bother with TIME_WITH_SYS_TIME, just include <sys/times.h> if
+         we have it and include <time.h> unconditionally
+
+include/chartypes.h,lib/readline/chardefs.h
+       - IN_CTYPE_DOMAIN: no longer uses STDC_HEADERS define, checks against
+         CHAR_MAX for non-C89 systems, still a no-op on C89 systems
+
+lib/readline/chardefs.h
+       - memory.h: don't include, no need for STDC_HEADERS; assume the mem*
+         functions are defined in <string.h> as in C89
+       - now that we assume IN_CTYPE_DOMAIN bounds its argument to unsigned
+         chars, we don't need NON_NEGATIVE checks at all
+
+lib/readline/chardefs.h,util.c
+       - ALPHABETIC -> _rl_alphabetic_p
+
+                                   9/8
+                                   ---
+
+lib/sh/strftime.c
+       - include <posixtime.h> after reworking above; include <sys/types.h>
+         unconditionally in case it defines time_t. From a report by
+         Ori Sky Farrell <bash@ori.mx>
+
+                                   9/9
+                                   ---
+lib/readline/search.c
+       - rl_history_search_internal: set rl_undo_list to NULL after calling
+         rl_maybe_save_line, since it will be restored one way or another
+         after the search completes, and we don't want it to be freed twice
+       - rl_history_search_internal: leave the current history offset at the
+         position of the last matching history entry. This means that things
+         like ^P will start back from that history entry, ^N will move
+         forward from there, and operate-and-get-next will work like it does
+         with incremental searches. Reported by Vandrus Zoltán
+         <vandrus.zoltan@gmail.com>
+
+                                  9/10
+                                  ----
+aclocal.m4
+       - BASH_C_LONG_LONG: removed
+       - BASH_TYPE_LONG_DOUBLE: removed
+       - BASH_TYPE_LONG_LONG,BASH_TYPE_UNSIGNED_LONG_LONG: removed
+       - BASH_FUNC_CTYPE_NONASCII: removed
+       - BASH_SYS_SIGNAL_VINTAGE,BASH_SYS_REINSTALL_SIGHANDLERS: don't
+         require AC_TYPE_SIGNAL, use void instead of RETSIGTYPE
+       - BASH_TYPE_SIGHANDLER: removed
+
+configure.ac,aclocal.m4,config.h.in
+       - BASH_TYPE_LONG_LONG: removed, call AC_TYPE_LONG_LONG_INT directly,
+         change #define to HAVE_LONG_LONG_INT
+       - BASH_TYPE_UNSIGNED_LONG_LONG: removed, call AC_TYPE_UNSIGNED_LONG_LONG_INT
+         directly, change #define to HAVE_UNSIGNED_LONG_LONG_INT
+
+externs.h,include/typemax.h,lib/sh/{fmtullong,snprintf,strtoimax,strtoll,
+strtoull,strtoumax}.c
+       - HAVE_LONG_LONG -> HAVE_LONG_LONG_INT
+       - HAVE_UNSIGNED_LONG_LONG -> HAVE_UNSIGNED_LONG_LONG_INT
+
+configure.ac
+       - AC_TRY_COMPILE -> AC_COMPILE_IFELSE
+       - BASH_CHECK_TYPE (intmax_t) -> AC_TYPE_INTMAX_T
+       - BASH_CHECK_TYPE (uintmax_t) -> AC_TYPE_UINTMAX_T
+       - BASH_CHECK_TYPE (sig_atomic_t): removed
+
+aclocal.m4
+       - BASH_FUNC_STRSIGNAL: changed to use AC_LINK_IFELSE
+       - BASH_FUNC_LSTAT: changed to use AC_LINK_IFELSE
+       - BASH_FUNC_SBRK: changed to use AC_LINK_IFELSE and AC_RUN_IFELSE,
+         fixed typo
+       - BASH_CHECK_SPEED_T: changed to use AC_COMPILE_IFELSE
+       - BASH_TYPE_SIG_ATOMIC_T: use BASH_CHECK_TYPE instead of AC_CHECK_TYPE
+       - BASH_STRUCT_DIRENT: new macro, like _AC_STRUCT_DIRENT but public and
+         sets a different bash-specific shell variable
+       - BASH_STRUCT_DIRENT_D_{INO,FILENO,NAMLEN}: call BASH_STRUCT_DIRENT
+         with a different first argument instead of using inline code and
+         AC_TRY_COMPILE
+
+                                  9/11
+                                  ----
+[prayers for the victims of 9/11/2001]
+
+aclocal.m4
+       - BASH_CHECK_DECL: just call AC_CHECK_DECLS and use the default
+         includes, which includes the files we used to specify
+       - BASH_FUNC_INET_ATON: changed to use AC_LINK_IFELSE
+       - BASH_STRUCT_WEXITSTATUS_OFFSET: changed to use AC_RUN_IFELSE
+       - BASH_FUNC_OPENDIR_CHECK: changed to use AC_RUN_IFELSE
+       - BASH_FUNC_ULIMIT_MAXFDS: changed to use AC_RUN_IFELSE
+       - BASH_UNDER_SYS_SIGLIST: changed to use AC_RUN_IFELSE
+       - BASH_SYS_SIGLIST: changed to use AC_RUN_IFELSE
+       - BASH_FUNC_DUP2_CLOEXEC_CHECK: changed to use AC_RUN_IFELSE
+       - BASH_FUNC_GETENV: changed to use AC_RUN_IFELSE
+       - BASH_FUNC_GETCWD: changed to use AC_RUN_IFELSE
+       - BASH_FUNC_FNMATCH_EXTMATCH: changed to use AC_RUN_IFELSE
+       - BASH_FUNC_POSIX_SETJMP: changed to use AC_RUN_IFELSE
+       - BASH_FUNC_STRCOLL: changed to use AC_RUN_IFELSE
+       - BASH_FUNC_PRINTF_A_FORMAT: changed to use AC_RUN_IFELSE
+       - BASH_SYS_PGRP_SYNC: changed to use AC_RUN_IFELSE
+       - BASH_SYS_SIGNAL_VINTAGE: changed to use AC_RUN_IFELSE
+       - BASH_SYS_NAMED_PIPES: changed to use AC_RUN_IFELSE
+       - BASH_CHECK_RTSIGS: changed to use AC_RUN_IFELSE
+       - BASH_CHECK_MULTIBYTE: changed to use AC_RUN_IFELSE
+       - RL_LIB_READLINE_VERSION: changed to use AC_RUN_IFELSE
+       - BASH_CHECK_WCONTINUED: changed to use AC_RUN_IFELSE
+       - BASH_FUNC_SNPRINTF: changed to use AC_RUN_IFELSE
+       - BASH_FUNC_VSNPRINTF: changed to use AC_RUN_IFELSE
+       - BASH_FUNC_FNMATCH_EQUIV_FALLBACK: changed to use AC_RUN_IFELSE
+       - BASH_DECL_PRINTF: changed to use AC_RUN_IFELSE
+       - BASH_TYPE_RLIMIT: rewrote to avoid quad_t, now uses AC_COMPILE_IFELSE
+         to determine whether rlim_t is available, otherwise determines the
+         value of RLIMTYPE based on sizeof(rlim.rlim_cur): int, long, or
+         long long
+       - BASH_SIZEOF_RLIMIT,BASH_SIZEOF_QUAD_T: helper macros for
+         BASH_TYPE_RLIMIT in the case that rlim_t is not present
+
+configure.ac
+       - BASH_CHECK_DECL -> AC_CHECK_DECLS
+       - quad_t: use AC_CHECK_TYPE (new style) instead of BASH_CHECK_TYPE
+
+                                  
+                                  9/14
+                                  ----
+execute_cmd.c
+       - time_command: if we longjmp back to the top_level we saved, make sure
+         we're in the same subshell environment before printing the timing
+         stats. We could have longjmped back from a child process of the
+         command or pipeline we want to time. From a report by
+         Sergej Alikov <sergej@alikov.com>
+       - time_command: restore command->flags even if we longjmp back
+
+general.c
+       - check_binary_file: if the first line of the ENOEXEC file starts with
+         a `#!', check the rest of the buffer for NULs to determine whether
+         this is a binary file. Since we only check the first line, a #! line
+         followed by binary data could be confused for a shell script
+
+                                  9/16
+                                  ----
+bashjmp.h
+       - EXITBLTIN: new longjmp `code' value: used by the exit builtin
+
+{execute_cmd,shell,subst,trap}.c,builtins/evalstring.c
+       - treat EXITBLTIN exactly the same as EXITPROG (for now)
+
+builtins/exit.def
+       - exit_builtin: jump_to_top_level with value EXITBLTIN
+
+builtins/evalstring.c
+       - parse_and_execute: EXITBLTIN has its own case, with the same contents
+         as EXITPROG
+
+                                  9/17
+                                  ----
+builtins/evalstring.c
+       - parse_and_execute: change EXITBLTIN case to avoid running the
+         unwind-protect stack to the `pe_dispose' tag (which has the effect
+         of running all the unwind-protects installed by the commands in
+         the string) if we're executing in a function and EXIT is trapped.
+         This has the effect of running the EXIT trap in the function context,
+         which is what we do when we're not in parse_and_execute (eval,
+         bash -c, command substitution, etc.)
+
+                                  9/18
+                                  ----
+arrayfunc.c
+       - expand_and_quote_kvpair_word,quote_compound_array_word,
+         expand_and_quote_assoc_word,quote_compound_array_list: make sure
+         the value has CTLESC characters doubled even when being single-
+         quoted, since that's what the parser does with standalone assignment
+         statements. From https://savannah.gnu.org/support/?110538
+
+                                  9/19
+                                  ----
+aclocal.m4
+       - AC_TRY_COMPILE -> AC_COMPILE_IFELSE (AC_TRY_LINK calls left to
+         modify to avoid obsolete warnings)
+       - BASH_STRUCT_WINSIZE: broke out checks for separate headers into new
+         macros, call them and work with the results; needed to avoid two
+         calls to AC_TRY_COMPILE
+       - BASH_CHECK_KERNEL_RLIMIT: avoid multiple calls to AC_TRY_COMPILE by
+         breaking basic test for RLIMIT_ defines into a separate test and
+         calling the HPUX-specific _KERNEL test only if that fails
+
+m4/gettext.m4,configure.ac
+       - AM_GNU_GETTEXT -> BASH_GNU_GETTEXT: remove deprecation warning, since
+         [no-libtool] is how we use this; rename to avoid someone's local
+         copy from overriding ours
+
+                                  9/20
+                                  ----
+aclocal.m4
+       - BASH_CHECK_MULTIBYTE: take out code that checks for nl_langinfo(CODESET)
+         since that's already provided by AM_LANGINFO_CODESET, which is
+         called by BASH_GNU_GETTEXT. We AC_REQUIRE it here, though, to avoid
+         problems from future changes
+       - BASH_SYS_SIGNAL_VINTAGE: broke the code that checks for the different
+         signal vintages into different AC_DEFUNed macros, changed
+         BASH_SYS_SIGNAL_VINTAGE to stitch them together with shell code
+         testing the cached variables
+       - AC_TRY_LINK -> AC_LINK_IFELSE: there are no more autoconf warnings
+
+                                  9/21
+                                  ----
+array.[ch]
+       - array_from_argv: new convenience function
+
+array.h
+       - num_elements: now an arrayind_t, since that's the type of indices, it
+         makes sense to allow that many elements
+
+                                  9/22
+                                  ----
+lib/readline/terminal.c
+       - rl_term_kP: fix typo. Fix from Koichi Murase <myoga.murase@gmail.com>
+
+                                  9/25
+                                  ----
+lib/readline/display.c
+       - rl_clear_visible_line: call _rl_clear_to_eol with _rl_screenwidth as
+         the argument so we clear out the entire line even if the terminal
+         doesn't have a clear-to-eol sequence; make sure to add a call to
+         rl_cr after that so we know we're always in column 0
+       - _rl_redisplay_after_sigwinch: just call rl_clear_visible_line instead 
+         of erasing the last line of the display
+       - _rl_redisplay_after_sigwinch: if the prompt is longer than the screen
+         width, make sure to call _rl_reset_prompt to recalculate the
+         local_prompt_newlines array. Should fix issue from
+         https://savannah.gnu.org/support/index.php?110543
+
+redir.c
+       - do_redirection_internal: if given [N]<&WORD- or [N]>&WORD- and WORD
+         expands to null, make it identical to <&- or >&- and close file
+         descriptor N (default 0). From a discussion back in 5/2021
+
+                                  9/27
+                                  ----
+arrayfunc.c
+       - expand_compound_array_assignment: since we run the string through
+         the parser to turn it into a list (so we can make sure all shell
+         metacharacters are properly quoted), we need to remove the CTLESC
+         the parser uses to quote CTLESC and CTLNUL in *unquoted* words.
+         The rest of the code assumes this has been done, and assumes that
+         any CTLESC characters passed to expansion are part of the original
+         word and should themselves be quoted, doubling the number of CTLESCs
+
+                                  9/28
+                                  ----
+arrayfunc.c
+       - expand_and_quote_kvpair_word,quote_compound_array_word,
+         expand_and_quote_assoc_word,quote_compound_array_list: if we are
+         single-quoting associative array subscripts and associative and
+         indexed array values, we need to quote CTLESC characters, because
+         that's how they come out of the parser and how the assignment
+         statement code expects to see them.
+         Fixes https://savannah.gnu.org/support/index.php?110538
+
+                                  9/29
+                                  ----
+subst.c
+       - parameter_brace_transform: invalid transformation operators are now
+         fatal errors in non-interactive shells, as with the other word
+         expansions. Reported by Martin Schulte <gnu@schrader-schulte.de> in
+         https://lists.gnu.org/archive/html/bug-bash/2020-10/msg00026.html
+
+execute_cmd.c
+       - execute_disk_command: if we're optimizing out the fork (nofork) and
+         not directly in a pipeline (pipe_in == pipe_out == NO_PIPE), only
+         modify shell_level if subshell_environment says we're not already in
+         a pipeline. Reported by Paul Smith <psmith@gnu.org> 10/11/2020
+         against GNU make
+
+evalstring.c
+       - should_suppress_fork: remove #if 1 for code that tries to suppress
+         the fork in a process substitution subshell
+
+                                  9/30
+                                  ----
+builtins/mapfile.def
+       - do_chop: make sure we're comparing unsigned chars when checking
+         whether the delim is the last character on the line. Reported by
+         Greg Wooledge <greg@wooledge.org>
+
+                                  10/1
+                                  ----
+lib/readline/rltty.c
+       - rl_deprep_terminal: if we're not echoing to the terminal
+         (_rl_echoing_p == 0), and we just output the bracketed paste end
+         sequence, output a newline to compensate for the \r at the end of
+         BRACK_PASTE_FINI, since redisplay didn't do it for us. Reported by
+         Siteshwar Vashisht <svashisht@redhat.com>
+
+shell.h
+       - MATCH_EXPREP: new matching flag, understood only by pattern
+         substitution; means to expand unquoted `&' in the replacement
+         STRING to the match of PATTERN
+
+subst.c
+       - shouldexp_replacement: uncommented
+       - pat_subst: we expand & in the replacement string if MATCH_EXPREP
+         appears in MFLAGS
+       - parameter_brace_patsub: push call to shouldexp_replacement out here,
+         after the replacement string is expanded; set MATCH_EXPREP if there
+         is an unquoted `&' (by backslash) in the expanded replacement
+         string
+
+doc/{bash.1,bashref.texi}
+       - pattern substitution: overhauled the description, moved each of the
+         possible forms to be tags in the tagged paragraph. The description
+         now specifies the expansions that the replacement string undergoes
+       - pattern substitution: documented new behavior of unquoted & in the
+         replacement string
+
+                                  10/4
+                                  ----
+shell.c
+       - include <malloc/shmalloc.h> if we're debugging malloc (MALLOC_DEBUG)
+         so we can get an extern declaration of trace_malloc_stats
+
+                                  10/5
+                                  ----
+subst.c
+       - expand_subscript_string: allocate new memory for td.word, copying
+         STRING, in case it gets freed on error by expand_word_internal.
+         Report and fix from Koichi Murase <myoga.murase@gmail.com>
+
+lib/malloc/malloc.c
+       - malloc_usable_size: return the allocated size instead of the chunk
+         size, since writing over the bounds checking will cause fatal errors.
+         Reported by Julien Moutinho <julm+bash@sourcephile.fr>, fix from
+         Dominique Martinet <asmadeus@codewreck.org>
+
+arrayfunc.c
+       - unbind_array_elememnt: pass (flags&VA_NOEXPAND) to skipsubscript(),
+         instead of unconditionally passing 1 if we're operating on an
+         associative array. This is consistent with how valid_array_reference
+         determines the length of the subscript.
+         Report and fix from Koichi Murase <myoga.murase@gmail.com>
+
+                                  10/6
+                                  ----
+
+subst.c
+       - skip_to_delim: add a new value for FLAGS. If FLAGS&2, we assume that
+         START is one character after the opening OPEN. If not, we assume that
+         START is at OPEN, and needs to be incremented past it. Part of fix
+         from Koichi Murase <myoga.murase@gmail.com>
+
+arrayfunc.c
+       - unbind_array_element: make sure to pass FLAGS to skipsubscript with
+         bit 2 set, since we are passed a SUB index that's one past the
+         opening bracket. Rest of fix from
+         Koichi Murase <myoga.murase@gmail.com>
+       - array_variable_name: make sure we pass (FLAGS&1) to skipsubscript, so
+         we don't inadvertently pass a value with bit 2 set, which would
+         cause an off-by-one error in subscript parsing
+
+                                  10/8
+                                  ----
+trap.c
+       - restore_traps: inverse of reset_signal_handlers. This understands
+         how reset_signal_handlers changes the signal disposition while
+         leaving the trap string in place, and knows how to restore flags
+         and state based on that preserved trap string and whether or not
+         the signal is "special" to the shell.
+
+builtins/exec.def
+       - exec_builtin: instead of using restore_original_signals to completely
+         cancel the traps, call reset_signal_handlers so the trap strings are
+         preserved. Then if the exec fails (and we're not exiting) we can
+         look at the trap strings and see how to restore the trap state.
+         This calls restore_traps after reinitializing the shell signal
+         handlers, using the trap strings saved by reset_signal_handlers.
+         Fixes issue with not exiting after a failed exec clearing the EXIT
+         trap reported by Mark March <march@systempad.org>, using the
+         approach suggested by Robert Elz <kre@munnari.OZ.AU>
+
+subst.c
+       - expand_declaration_argument: when parsing options that modify
+         attributes that affect how the value is handled (i, c, u, etc.),
+         make sure to create an option string and call make_internal_declare
+         with options that start with a `+' so the attribute is off when
+         the assignment is performed and changes how the value is expanded.
+         From a report by Léa Gris <lea.gris@noiraude.net>
+
+lib/readline/complete.c
+       - rl_display_match_list: even if _rl_completion_prefix_display_length
+         is set to a non-zero value, pass the common prefix length to
+         fnprint if we've turned on colored completion prefixes; passes
+         through to fnprint via print_filename
+       - fnprint: add the ellipsis if prefix_bytes exceeds the
+         _rl_completion_prefix_display_length, add explicit check for
+         prefix_bytes being longer since print_filename passes it through
+         if colored-completion-prefix is set. This means that while
+         completion-prefix-display-length still has precedence over
+         colored-completion-prefix, it doesn't override it if both are set
+         and the common prefix length is shorter than
+         completion-prefix-display-length. From a report by
+         Christoph Anton Mitterer <calestyo@scientia.net>
+
+                                  10/10
+                                  -----
+parse.y
+       - parse_dparen: if the last token is FOR, increment word_top and assign
+         word_lineno like for other for loops. Fixes bug with LINENO after
+         arithmetic for commands reported by
+         Tom Coleman <thomas.james.coleman@gmail.com>
+
+                                  10/11
+                                  -----
+execute_cmd.c
+       - shell_execve: if execve fails with ENOENT, but executable_file()
+         succeeds, display a slightly more descriptive error message. Prompted
+         by a report from Andrea Monaco <andrea.monaco@autistici.org>
+
+stringlib.c
+       - strcreplace: allow backslash to escape a backslash, since we allow it
+         to escape a `&'
+
+                                  10/14
+                                  -----
+pcomplib.c
+       - COMPLETE_HASH_BUCKETS: double to 512
+
+stringlib.c
+       - strcreplace: the last argument is now a flags argument. 1 has its
+         previous meaning (glob); 2 means to allow backslash to escape a
+         backslash (as added on 10/11)
+
+subst.c
+       - pat_subst: call strcreplace with 2 as the flags value
+
+                                  10/15
+                                  -----
+doc/bashref.texi
+       - updates to Installation section
+
+doc/{mkposix,mkinst,mkrbash},doc/Makefile.in
+       - changes to allow scripts to be run outside the source directory
+
+                                  10/18
+                                  -----
+subst.c
+       - patsub_replacement: controls whether pattern substitution expands `&'
+         in the replacement string. Initialized to 1 by default
+
+                                  10/19
+                                  -----
+doc/{bash.1,bashref.texi}
+       - document bash's WCE SIGINT behavior when job control is not enabled
+         and the shell receives a SIGINT while waiting for the foreground
+         command to complete. Added at Red Hat's request. A complete
+         discussion is at https://www.cons.org/cracauer/sigint.html
+
+                                  10/25
+                                  -----
+builtins/shopt.def
+       - patsub_replacement: new shell option, exposes patsub_replacement
+         variable controlling whether pattern substitution expands `&' in
+         the replacement string. Still enabled by default.
+
+doc/{bash.1,bashref.texi}
+       - patsub_replacement: document new shopt option
+
+                                  10/26
+                                  -----
+lib/readline/display.c
+       - expand_prompt: group runs of invisible characters at the right edge
+         of the screen with the previous physical characters when setting
+         local_prompt_newlines, since that's how update_line() expects to
+         get it. Fix from sparrowhawk996@gmail.com.
+
+lib/readline/macro.c
+       - rl_end_kbd_macro: make sure current_macro_index is > 0 after
+         subtracting the key sequence length, clamp it to 0 before writing
+         the ending NULL. From a fuzzing report by
+         Tillmann Osswald <tosswald@ernw.de>
+
+lib/readline/isearch.c
+       - _rl_isearch_dispatch: in the bracketed paste case, don't assume the
+         pasted text is null-terminated, so use memcpy instead of strcpy for
+         the length of the pasted text, then make sure the search string is
+         null-terminated. From a fuzzing report by
+         Tillmann Osswald <tosswald@ernw.de>
+
+lib/readline/text.c
+       - rl_transpose_words: make sure to preserve the value of rl_end from
+         the beginning to the end of the function. From a fuzzing report by
+         Tillmann Osswald <tosswald@ernw.de>
+
+lib/readline/vi_mode.c
+       - rl_vi_delete_to,rl_vi_change_to,rl_vi_yank_to: if we are redoing a
+         command (_rl_vi_redoing == 1), save the old _rl_vimvcxt, allocate a
+         new one, and restore the old one before returning. Prevents some
+         pointer aliasing problems. From a fuzzing report by
+         Tillmann Osswald <tosswald@ernw.de>
+
+                                  10/29
+                                  -----
+arrayfunc.c
+       - tokenize_array_reference: take valid_array_reference and add a third
+         argument (char **SUBP), which, if non-NULL, gets the null-terminated
+         subscript parsed from the NAME argument. If it's NULL, the caller
+         gets the old valid_array_reference behavior. Fix from
+         Koichi Murase <myoga.murase@gmail.com>
+       - valid_array_reference: just call tokenize_array_reference with a
+         NULL third argument
+       - unbind_array_element: assume the caller (unset_builtin) passes a
+         null-terminated SUB that's already been validated by a call to
+         tokenize_array_reference so we don't need to call skipsubscript() or
+         check VA_ONEWORD. Fix from Koichi Murase <myoga.murase@gmail.com>
+
+arrayfunc.h
+       - tokenize_array_reference: extern declaration
+
+builtins/set.def
+       - unset_builtin: use tokenize_array_reference to figure out T and pass
+         that to unbind_array_element. Fix from
+         Koichi Murase <myoga.murase@gmail.com>
+       - unset_builtin: pass non-null argument to array_variable_part to get
+         the length of the subscript (T), then cut off any final `]' before
+         passing it to unbind_array_element, since that's what it now
+         expects
+
+subst.c
+       - expand_string_for_rhs,expand_string_for_pat: assign td.word from
+         newly-allocated memory in case it gets freed on error during the
+         call to call_expand_word_internal(); free it manually when that
+         call returns
+
+                                  11/1
+                                  ----
+findcmd.c
+       - search_for_command: if FLAGS includes CMDSRCH_STDPATH, don't look in
+         the hash table for the command name. Prompted by a report from
+         Roger Morris <roger.morris@gmail.com>
+
+aclocal.m4
+       - BASH_FUNC_POSIX_SETJMP: add a check by fetching the signal mask
+         after the siglongjmp and making sure that SIGINT is not blocked,
+         indicating we restored the original signal mask
+
+                                  11/2
+                                  ----
+subst.c
+       - expand_string_assignment: make sure to add W_TILDEEXP to the flags so
+         expand_word_internal performs the right tilde expansion on tildes
+         following an unquoted colon. Report from Anders Kaseorg
+         <andersk@mit.edu>
+
+
+                                  11/3
+                                  ----
+aclocal.m4
+       - BASH_FUNC_POSIX_SETJMP: if cross-compiling, default to `present' if
+         we've determined we have posix signal functions
+
+                                  11/4
+                                  ----
+execute_cmd.c
+       - SET_LINE_NUMBER: set line_number, but don't set line_number_for_err_trap
+         if we're already running the ERR trap
+       - GET_LINE_NUMBER: evaluates to line_number_for_err_trap if we're
+         running the ERR trap and executing_line_number() otherwise
+       - execute_function: use GET_LINE_NUMBER to push the value for the line
+         number into the BASH_LINENO array
+       - execute_command_internal,execute_arith_command,execute_cond_command:
+         use SET_LINE_NUMBER to avoid overwriting line_number_for_err trap
+         while executing the ERR trap. Tentative fix for `caller' problem
+         reported by Quinn Grier <quinn@quinngrier.com>
+
+configure.ac,patchlevel.h
+       - set bash version to 5.2-devel, meaning shell_compatibility_level = 52,
+         which required updating tests (array.tests, array21.sub,
+         quotearray3.sub, new-exp10.sub, history2.sub). The first three are
+         because bash-5.2 flushes an indexed array but does not unset the
+         variable when given `unset a[@]' or `unset[*]' (that is, it acts
+         like `a=()' instead of `unset a'); the other two are because the
+         version number changed
+
+                                  11/8
+                                  ----
+doc/Makefile.in
+       - bash.info: use `makeinfo -o' instead of calling infopost.sh to edit
+         the filename, since the tags table includes absolute byte offsets to
+         nodes. From https://savannah.gnu.org/support/?110557
+
+                                  11/15
+                                  -----
+examples/loadables/realpath.c
+       - add -a NAME argument to put canonicalized pathnames into an indexed
+         array instead of displaying them on stdout. Suggested by
+         felix@f-hauri.ch
+
+lib/readline/colors.c
+       - _rl_custom_readline_prefix: new function, looks in $LS_COLORS for a
+         custom extension (*.readline-colored-completion-prefix) and uses that,
+         if found, as the default color for the common prefix displayed when
+         `colored-completion-prefix' is set. Suggested by
+         Christoph Anton Mitterer <calestyo@scientia.net>
+       - _rl_print_prefix_color: try the return value from _rl_custom_readline_prefix
+         before defaulting to the C_PREFIX (C_SOCK) color. Suggested by
+         Christoph Anton Mitterer <calestyo@scientia.net>
+
+lib/readline/doc/{readline.3,rluser.texi},doc/bash.1
+       - readline-colored-completion-prefix: document new custom suffix for
+         readline's colored-completion-prefix color
+
+                                  11/16
+                                  -----
+doc/{bash.1,bashref.texi},builtins/set.def
+       - set: modify usage synopsis slightly, based on
+         https://bugzilla.redhat.com/show_bug.cgi?id=2022324
+
+builtins/set.def
+       - unset_builtin: add shell compatibility level check <= bash-5.1 to
+         force `unset a[@]' to unset array variable `a', like in previous
+         versions, instead of unsetting associative array element `@' or
+         removing all elements of an indexed array without unsetting the
+         variable itself
+
+builtins/common.c
+       - set_expand_once: now a no-op if the shell compatibility level is
+         <= bash-5.1, preserving the previous versions' behavior for [[ -v
+         (dependent on assoc_expand_once instead of forcing it)
+
+subst.c
+       - parameter_brace_expand_rhs: make sure that the final value assigned
+         is always returned from ${a:=b}, even when `a' has a variable
+         attribute that modifies the value on assignment. Reported back on
+         1/20/2021 by oguzismailuysal@gmail.com; bash-5.2 tag removed
+
+                                  11/22
+                                  -----
+doc/{bashref.texi,bash.1}
+       - unset: change the description of `unset name[@]' (unset name[*])
+         to reflect the new behavior (unset associative array subscripts or
+         remove all elements from an indexed array) and the difference from
+         previous versions
+       - set: document -r for restricted shell mode
+       - restricted shell: change occurrences of `set +o restricted' to
+         `shopt -u restricted_shell'. From a report from
+         Jin Xiang <jxiang.sd@gmail.com>
+       - read: note that read -t0 may return 0 if a subsequent read will
+         return EOF. From a suggestion by Dale R. Worley
+         <worley@alum.mit.edu>
+
+execute_cmd.c
+       - execute_arith_command,eval_arith_for_expr: don't pass EXP_EXPANDED
+         to evalexp if shell_compatibility_level > 5.1, assuming that the
+         expression has been quoted by Q_ARITH handling
+
+test.c
+       - test_arithcomp: if we're being called by the conditional command
+         code and treating the arguments to the arithmetic operators as
+         expressions, don't pass EXP_EXPANDED to evalexp if the shell
+         compatibility level is > 5.1, assuming that the expression has been
+         quoted by Q_ARITH handling
+
+                                  11/29
+                                  -----
+examples/loadables/getconf.[ch]
+       - getconf: new implementation of loadable builtin, based on glibc
+         getconf
+
+examples/loadables/sleep.c
+       - parse_gnutimefmt: parse GNU interval format (2m30s), returning
+         seconds and microseconds like uconvert
+       - sleep: use parse_gnutimefmt if uconvert can't parse the format right
+         away and "dhms" appears in the format string. Don't return
+         EX_DISKFALLBACK under any circumstances
+
+                                  11/30
+                                  -----
+
+builtins/wait.def
+       - wait_builtin: refer to unset_waitlist only if JOB_CONTROL is enabled.
+         Report from Joel Ebel <jbebel@google.com>
+
+parse.y,builtins/set.def
+       - changes for minimal config restrictions
+
+configure.ac,config.h.in
+       - --enable-translatable-strings: new configuration option to allow
+         $"..." support to be compiled in or out; not included in the minimal
+         shell configuration
+
+shell.c
+       - main: don't include any of the dump-strings options if
+         TRANSLATABLE_STRINGS is not defined
+
+lib/sh/shquote.c
+       - sh_backslash_quote_for_double_quotes: needed for translatable strings
+
+parse.y
+       - support for translating $"..." strings now conditional on
+         TRANSLATABLE_STRINGS
+
+locale.c
+       - locale_expand: now conditional on TRANSLATABLE_STRINGS
+
+subst.c
+       - expand_string_dollar_quote: support for $"..." now conditional on
+         TRANSLATABLE_STRINGS
+
+doc/bashref.texi
+       - --enable-translatable-strings: document new configuration option
+
+                                  12/2
+                                  ----
+subst.c
+       - verify_substring_values: now that the default compatibility level is
+         52, and the Q_ARITH code is enabled, make the EXP_EXPANDED flag for
+         evalexp() dependent on the compatibility level
+       - param_expand: arithmetic substitution: make EXP_EXPANDED flag
+         for evalexp() dependent on the compatibility level
+       - expand_word_internal: don't call expand_array_subscript if the
+         shell compatibility level is 51 or below (Q_ARITH)
+
+test.c
+       - test_unop: if the shell compatibility level is > 51, using [@] with
+         an existing associative array will report on a key of `@'
+
+arrayfunc.c
+       - array_expand_index: if the compatibility level is > 51, Q_ARITH is
+         used and we don't pass EXP_EXPANDED to evalexp()
+
+COMPAT,doc/bashref.texi
+       - shell compatibility mode: document effects of setting the
+         compatibility mode to 51
+
+                                  12/3
+                                  ----
+lib/malloc/malloc.c
+       - mremap: only use if MREMAP_MAYMOVE is defined, since we use the Linux
+         version of the function signature
+
+                                  12/6
+                                  ----
+bashhist.c
+       - bash_add_history: if we're parsing a here-document (PST_HEREDOC), only
+         suppress adding the newline between lines if we're not at the first
+         line of the here-document (here_doc_first_line != 0). From a report
+         by S0AndS0 <strangerthanbland@gmail.com>
+
+                                  12/8
+                                  ----
+lib/readline/colors.c
+       - _rl_custom_readline_prefix: use STREQN to check for the extension
+         string in $LS_COLORS, since it's not necessarily null-terminated.
+         From https://savannah.gnu.org/patch/?10158
+
+                                  12/10
+                                  -----
+variables.c
+       - set_int_value,set_string_value: broke common code for setting int
+         and string dynamic variable values out into separate functions;
+         changed all callers to use them where appropriate. set_int_value
+         takes a flags argument saying whether or not to force the integer
+         attribute on
+       - assign_random: store the value assigned as the variable value so
+         things like RANDOM=42; RANDOM+=7 generate consistent sequences
+         like in ksh93
+       - assign_seconds: store the value assigned as the variable value so
+         things like SECONDS=42 ; SECONDS+=7 generate what's expected
+
+doc/Makefile.in
+       - changes to allow man pages that include others (.so FN) to be built
+         outside the source tree
+
+                                  12/13
+                                  -----
+arrayfunc.c
+       - assign_array_element_internal: take an additional argument: char **NVALP.
+         If non-null, it gets the value eventually assigned to the array
+         element
+       - assign_array_element: take an additional NVALP argument; pass it to
+         assign_array_element_internal
+
+arrayfunc.h
+       - assign_array_element: new extern function declaration
+
+{subst,variables}.c,builtins/{common.c,declare.def}
+       - assign_array_element: change callers
+
+subst.c
+       - parameter_brace_expand_rhs: for the ${param:=value}, use the value
+         returned by assign_array_element in NVALP as the return value, since
+         it's the value ultimately assigned to the variable after possible
+         modification (e.g., arithmetic evaluation). Reported by
+         oguzismailuysal@gmail.com after flawed fix applied 11/16
+
+                                  12/14
+                                  -----
+arrayfunc.h
+       - array_eltstate_t: an object that encapsulates an array element's
+         state (type, index, key, value) whether it's an indexed or
+         associative array
+
+arrayfunc.c
+       - {init,flush}_eltstate: new functions to initialize and flush any
+         allocated memory from array_eltstate_t objects. No allocation/
+         deallocation functions yet; the only use is with a static instance
+       - assign_array_element_internal: take an array_eltstate_t * instead of
+         a char ** as the final argument, so we can return keys/indices and
+         values depending on the type of array; populates it with the
+         appropriate values
+       - assign_array_element: take array_eltstate_t * as final argument
+         instead of a char **; pass it to assign_array_element_internal
+
+{subst,variables}.c,builtins/{common.c,declare.def}
+       - assign_array_element: change callers to modify final argument
+
+                                  12/15
+                                  -----
+arrayfunc.c
+       - array_value_internal: now takes an array_eltstate_t * as the final
+         argument; there is no more `rtype' argument in favor of the
+         `subtype' member; returns the appropriate values in its members
+       - array_value: changed to pass array_eltstate_t to array_value_internal,
+         saves and fetches its `ind' member into *indp; saves `subtype'
+         member into *rtype
+       - get_arrary_value: changed to take array_eltstate_t as third argument,
+         passes it to array_value_internal
+
+{redir,expr}.c
+       - get_array_value: changed callers; initializing the array_eltstate_t
+         argument as necessary
+
+test.c
+       - test_builtin: changed to use get_array_value, adding AV_ALLOWALL to
+         the flags, since it didn't use any QUOTED argument. Pass
+         array_eltstate_t * as final argument and get subtype from it (the
+         only thing we're interested in, to deallocate memory)
+
+                                  12/16
+                                  -----
+arrayfunc.c
+       - array_value: now takes a final argument of array_eltstate_t *, which
+         it passes to array_value_internal; no more rtype and indp args.
+         Callers are responsible for marshalling values into estatep
+
+arrayfunc.h
+       - array_value: changed function signature
+
+subst.c
+       - get_var_and_type,parameter_brace_expand_word: changed calls to
+         array_value to use array_eltstate_t argument and initialize it
+         appropriately. Copy values back from it to the parameters we need
+         to modify
+
+variables.c
+       - assign_lineno: call set_int_value to store the value, like with
+         RANDOM and SECONDS (from 12/10)
+
+                                  12/17
+                                  -----
+{eval,execute_cmd}.c
+       - when bypassing a parsed command because read_but_dont_execute is
+         set, don't modify last_command_exit_value. From a report by
+         Robert Elz <kre@munnari.OZ.AU>
+
+parse.y
+       - parse_comsub: make sure the first call to shell_getc to check whether
+         or not it's an arithmetic expansion skips a quoted newline. From a
+         report by Robert Elz <kre@munnari.OZ.AU>
+
+                                  12/21
+                                  -----
+subst.c
+       - parameter_brace_remove_pattern,parameter_brace_patsub,parameter_brace_casemod,
+         parameter_brace_transform,parameter_brace_substring: now take an
+         array_eltstate_t * argument in place of the arrayind_t argument, pass
+         it to get_var_and_type; this generalizes the indexed array behavior
+         of expanding array subscripts once to associative arrays via an
+         eventual call to array_value_internal with a non-null KEY member
+       - get_var_and_type: now takes an array_eltstate_t * argument in place
+         of the arrayind_t argument; use it in calls to array_value so we
+         can only expand array subscripts once whether they are indexed or
+         associative arrays
+       - parameter_brace_expand_word: take an array_eltstate_t * argument in
+         place of the arrayind_t * argument; pass it to array_value; use a
+         static version (which we init and flush) if the argument passed is
+         NULL so we can get the right state passed back and forth
+       - parameter_brace_expand: pass a pointer to a static array_eltstate_t
+         to parameter_brace_expand_word, and use that in the various calls to
+         parameter_brace_XXX functions that perform specific expansions in
+         place of the old arrayind_t argument; make sure to flush it before
+         returning, even on errors
+
+                                  12/22
+                                  -----
+{trap,variables}.c
+       - internal_warning: calls changed to use translatable strings
+         consistently
+
+error.[ch]
+       - internal_debug: new function, prints a message like internal_warning,
+         no-op if DEBUG is not defined
+       - INTERNAL_DEBUG: macro that expands to internal_debug when DEBUG is
+         defined, and nothing otherwise
+
+{jobs,trap}.c
+       - changed some internal_warning and internal_inform calls to use
+         internal_debug, since they were active only when DEBUG is defined
+
+parse.y
+       - parse_comsub: add internal_debug call when a command substitution
+         ends with unterminated here-documents
+
+builtins/common.c
+       - number_of_args: unconditionally return posparam_count
+
+{jobs,execute_cmd,subst}.c,parse.y,builtins/{command.def,evalstring.c}
+       - INTERNAL_DEBUG: use instead of calls to itrace protected by #ifdef
+         DEBUG
+
+                                  12/26
+                                  -----
+lib/glob/glob.c
+       - glob_always_skip_dot_and_dotdot: initialize to 1 (enabled)
+
+builtins/shopt.def
+       - globskipdots: new shell option, exposes glob_always_skip_dot_and_dotdot
+
+doc/{bash.1,bashref.texi}
+       - globskipdots: document new shell option
+
+execute_cmd.c
+       - fix_arrayref_words: call valid_array_reference with 0 for third arg
+         because the words have not undergone any word expansions yet and
+         the quotes are still present. This makes things like
+               A=[\[]=set
+               unset A[\[]
+         work
+
+subst.c
+       - word_list_split: if a word undergoes word splitting but is not
+         changed, preserve any W_ARRAYREF flag into the new word. This makes
+         things like
+               rkey=']'
+               unset A[$rkey]
+         work because the unset builtin sees the W_ARRAYREF flag on its
+         argument
+
+                                  12/29
+                                  -----
+builtins/common.h
+       - SET_VFLAGS: take a set of word flags, and set flags for use with
+         valid_array_reference (vflags) and assign_array_element/bind_int_variable
+         (bindflags) based on those flags and the setting of assoc_expand_once
+         (moved from read.def and generalized)
+
+arrayfunc.c
+       - array_variable_name: now exclusively takes AV_xxx flags; understands
+         how to translate AV_NOEXPAND to the right flag for skipsubscript;
+         understands AV_ONEWORD and AV_NOEXPAND
+       - array_variable_part: just passes the FLAGS arg to array_variable_name
+       - assign_array_element: translates ASS_ flags to AV_ flags for
+         array_variable_name
+       - array_value_internal: now just passes flags straight through to
+         array_variable_part (which sends them to array_variable_name)
+
+builtins/common.[ch]
+       - builtin_bind_var_to_int: now takes a new FLAGS third argument; passes
+         it to bind_var_to_int
+
+builtins/printf.def
+       - printf_builtin: use SET_VFLAGS to set flags for builtin_bind_variable
+         (bindflags); makes things like
+               declare -A A; key=']' ; printf -v A[$key] "foo"
+         work without a subscript error as long as assoc_expand_once is defined
+
+builtins/read.def
+       - read_builtin: use new common version of SET_VFLAGS instead of
+         private version; changed to use new calling sequence; makes things like
+               declare -A A; key=']' ; read A[$key] <<<"foo"
+         work without a subscript error as long as assoc_expand_once is defined
+
+builtins/wait.def
+       - wait_builtin: use SET_VFLAGS for variable name with -p option
+       - wait_builtin: call builtin_bind_var_to_int with new bindflags third
+         argument
+
+expr.c
+       - expr_streval: just pass TFLAG (AV_xxx flags) straight through to
+         array_variable_part
+
+variables.c
+       - bind_int_variable: translate the assignment flags (ASS_xxx) to
+         VA_xxx flags for valid_array_reference calls (ASS_ONEWORD); translate
+         assignment flags to AV_xxx flags for array_variable_part
+
+                                  12/30
+                                  -----
+subst.c
+       - parameter_brace_expand: when expanding an indirect variable, extend
+         the special case for array[@] and array[*] (set -u/no positional
+         parameters, obeying the baroque quoting rules) to the value of the
+         indirection. Report and fix from konsolebox <konsolebox@gmail.com>
+
+                                  12/31
+                                  -----
+parse.y
+       - compound_list: when parsing a compound_list production, collect any
+         pending here-documents after reading a newline, not after reading
+         any command terminator. Fixes interactive-only prompting bug
+         reported back in 8/2021 by Hyunho Cho <mug896@gmail.com>
+
+                                1/1/2022
+                                --------
+bashline.c
+       - set_filename_quote_chars: break code that modifies
+         rl_filename_quote_characters based on whether DIRNAME needs to be
+         expanded from bash_directory_completion_hook into its own function
+       - bash_check_expchar: break code that checks whether DIRNAME will be
+         word expanded from bash_directory_completion_hook into its own
+         function 
+       - bashline_reset,attempt_shell_completion: make sure complete_fullquote
+         is set to 1 (as it is by default) in case a completion modifies it
+       - bash_quote_filename: if we are completing (but not expanding --
+         direxpand is unset) and backslash-quoting a filename with expansion
+         characters as determined by bash_check_expchar, make sure
+         filename_bstab is set not to include the expansion char (and any
+         following char and closer) and set complete_fullquote to 0 so
+         sh_backslash_quote uses filename_bstab. Fixes the longstanding issue
+         of quoting a `$', for instance, if the rest of the filename contains
+         any characters that need quoting in filenames. This assumes that the
+         filename is unquoted (*QCP == 0) so the word will be expanded and is
+         not part of the filename (if needed, we can use file_exists to check
+         whether the expansion characters are actually part of the filename)
+
+                                   1/7
+                                   ---
+examples/loadables/accept.c
+       - new -b bindaddr option to bind to a specific IP address
+       - move setsockopt calls before bind() to avoid TIME_WAIT issues. Fixes
+         from Dzogovic Vehbo <dzove855@gmail.com>
+
+                                  1/10
+                                  ----
+configure.ac
+       - bumped version to 5.2-alpha.
+
+                                  1/16
+                                  ----
+
+tests/{unicode1,glob2,intl2}.sub, tests/run-intl
+       - minor changes to add warnings for missing locales that cause test
+         failures
+
+                                  1/17
+                                  ----
+parse.y
+       - history_delimiting_chars: if we have a blank line by the time we
+         hit the end of the tests, return a semicolon for the first blank
+         line to avoid running lines of a multi-line command together.
+         Fixes bug reported by Joakim Lindblad <joakim@cb.uu.se>
+
+subst.c
+       - expand_string_for_patsub: expand the replacement string for pattern
+         substitution assuming that it will eventually be passed to
+         strcreplace to replace `&' with the matched portion of the string.
+         This calls expand_string_for_pat(), which leaves the string quoted
+         and does not perform word splitting, then calls
+         quote_string_for_repl to post-process the expanded string.
+       - quote_string_for_repl: perform quote removal on passed string while
+         replacing CTLESC escaping a `&' or a backslash with a backslash. The
+         result must be passed to strcreplace
+       - parameter_brace_patsub: call expand_string_for_patsub if
+         patsub_replacement is set to quote 
+
+                                  1/18
+                                  ----
+subst.c
+       - read_comsub: make istring_index a size_t to avoid overflow with very
+         large values of istring_size.
+         From https://savannah.gnu.org/support/index.php?110596
+       - expand_word_internal: make istring_index a size_t
+
+                                  1/20
+                                  ----
+buitins/cd.def
+       - add a description of `cd -' to the help text. Suggested by
+         Rob Landley <rob@landley.net>
+
+                                  1/21
+                                  ----
+lib/glob/glob.c
+       - glob_vector: if we allocate NEXTLINK using malloc, and free it due to
+         some allocation failure, reset FIRSTMALLOC to avoid duplicate frees
+         later on
+
+subst.[ch]
+       - sub_append_string: the INDX parameter is now a size_t to avoid
+         overflow
+
+parse.y
+       - decode_prompt_string: RESULT_INDEX is now a size_t to pass to
+         sub_append_string
+
+jobs.[ch],nojobs.c
+       - wait_for_background_pids: now returns the number of jobs/processes
+         reaped
+
+builtins/wait.def
+       - wait_builtin: if -p pid supplied without -n, make sure we do something
+         useful if no job/pid arguments are supplied and there are no jobs.
+         Reported by Oguz <oguzismailuysal@gmail.com>
+
+builtins/read.def
+       - read_builtin: if we have a timeout, use SIGALRM instead of select
+         when in posix mode, since we use read instead of zread. Fixes bug
+         reported by Andreas Schwab <schwab@linux-m68k.org>
+
+subst.c
+       - expand_string_dollar_quote: handle single-quoted and double-quoted
+         strings that might include $' and $" without attempting translation;
+         do more error checking for unterminated $' and $" that leaves those
+         characters unmodified. This is for use by readline's various line
+         expansion functions (shell_expand_line)
+
+                                  1/23
+                                  ----
+parse.y,make_cmd.c
+       - revert change that unconditionally processes $'...' and $"..." in
+         here-document bodies; there are only a couple of cases where they
+         should be processed in a double-quote environment
+
+                                  1/24
+                                  ----
+
+subst.c
+       - extract_dollar_brace_string: if we see another `${' on the rhs of
+         the operator, reset the dolbrace_state to DOLBRACE_PARAM while we
+         read this new ${...} string
+       - extract_heredoc_dolbrace_string: new function, variant of
+         extract_dollar_brace_string, to process the WORD in ${PARAM OP WORD}
+         while expanding lines of here-document data. It's complicated by the
+         requirement to add to the result string as we go along, since we
+         need to change the contents of the input string with ansi expansion
+         or locale translation.
+       - string_extract_single_quoted: take a new third argument: ALLOWESC.
+         This allows backslash to escape an embedded single quote, needed by
+         extract_heredoc_dolbrace_string to process $'...'; changed callers
+
+                                  1/25
+                                  ----
+parse.y
+       - parse_matched_pair: ansi-expand $'...' in WORD for ${PARAM OP WORD}
+         and single-quote the result if dolbrace_state == DOLBRACE_QUOTE
+         (posix pattern removal operators) even if extended_quote == 0
+
+subst.c
+       - extract_heredoc_dolbrace_string: add logic to align with parse.y:
+         parse_matched_pair and its $'...' expansion, including handling
+         extended_quote
+
+                                  1/27
+                                  ----
+builtins/evalstring.c
+       - should_optimize_fork: broke conditions for optimizing away the fork
+         for a simple command out of optimize_fork into new function, call
+         from should_suppress_fork and optimize_subshell_command. Call from
+         optimize_fork if (subshell_environment & SUBSHELL_PAREN), relying
+         on fact that CMD_TRY_OPTIMIZING is only set in a couple of specific
+         conditions
+       - optimize_fork: call should_suppress_fork only if startup_state == 2;
+         it does the extra checks for that specific case
+       - optimize_fork: call should_optimize_fork if we're in a (list)
+         subshell (subshell_environment & SUBSHELL_PAREN)
+       - optimize_subshell_command: set CMD_TRY_OPTIMIZING on the right side
+         of a `&&', `||', or `;' list as long as it's a simple command so
+         we can check with optimize_fork() when it's time to execute it
+
+execute_cmd.c
+       - execute_in_subshell: call optimize_subshell_command for (list)
+         subshells to either set CMD_NO_FORK for simple commands or set
+         CMD_TRY_OPTIMIZING for likely candidates for later optimization
+
+builtins/common.h,builtins/evalstring.c
+       - optimize_fork: renamed to optimize_connection_fork; changed callers
+
+                                  1/31
+                                  ----
+include/shmbutil.h
+       - COPY_CHAR_I,SCOPY_CHAR_I: add check for locale_utf8locale and
+         (c & 0x80) as in other macros
+
+lib/sh/shquote.c
+       - sh_backslash_quote_for_double_quotes: rewrote to use array indexing
+         and COPY_CHAR_I to make it easier to drop in future calls to
+         charvis() to make `unsafe' characters visible if FLAGS == 1
+
+                                   2/1
+                                   ---
+parse.y
+       - parse_comsub: if we are currently expanding aliases, temporarily
+         turn off alias expansion if we are not in posix mode so we defer
+         alias expansion until command_substitute(). Fixes double-expansion
+         bug reported by Martijn Dekker <martijn@inlv.org> and aligns with
+         https://www.austingroupbugs.net/view.php?id=1342
+       - xparse_dolparen: turn off alias expansion entirely while running the
+         parser: either we do it in parse_comsub (posix mode) or in
+         command_substitute (default mode)
+       - parse_string_to_command: ditto
+
+subst.c
+       - command_substitute: if we are expanding aliases, temporarily turn
+         off alias expansion if we are in posix mode, since we already
+         performed it in parse_comsub() and are using the command string
+         reconstituted from the parse result
+
+doc/bashref.texi
+       - bash posix mode: add description of alias expansion and command
+         substitution parsing and execution
+
+                                   2/4
+                                   ---
+lib/readline/rltty.c
+       - rl_deprep_terminal: set _rl_last_c_pos to 0 after outputting
+         BRACK_PASTE_FINI, since the last character in that is \r. Partially
+         address issue raised by Markus Schwarzenberg <markus.schwarzenberg@freenet.de>
+         in https://lists.gnu.org/archive/html/bug-bash/2022-02/msg00056.html
+
+                                   2/5
+                                   ---
+doc/{bash.1,bashref.texi}
+       - minor typo fixes from Helge Kreutzmann <debian@helgefjell.de>
+
+                                   2/7
+                                   ---
+{arrayfunc,variables}.c
+       - ARRAY_EXPORT: changes to encode array and assoc variables using a
+         scheme similar to shell functions so we can export arrays and
+         differentiate them from scalar variables and differentiate array
+         and assoc variables. Still not enabled by default.
+
+variables.c
+       - mk_env_string: third argument is now the variable's attributes or 0,
+         with all the attributes we can export arrays
+
+lib/readline/bind.c
+       - active-region-start-color,active-region-end-color: new bindable
+         string variables, one to set the active region color (instead of
+         standout mode) and one to turn it off (instead of the "se" terminal
+         capability). They set _rl_active_region_start_color and
+         _rl_active_region_end_color variables via functions
+
+lib/readline/display.c
+       - putc_face: if setting standout mode, check for both the start color
+         and end color variables and output the start color string. If turning
+         off standout mode (normal face), output the end color string. Both
+         variables must be set
+
+lib/readline/{readline.c,rlprivate.h}
+       - declarations for _rl_active_region_start_color and
+         _rl_active_region_end_color
+
+                                   2/8
+                                   ---
+bashline.c
+       - initialize_readline: add bindable name `vi-edit-and-execute-command'
+
+shell.c
+       - subshell_exit: make sure to set last_command_exit_value before
+         calling the exit trap. Fixes bug reported by Greg Edwards
+         <gedwards@ddn.com>
+
+                                   2/9
+                                   ---
+lib/readline/{terminal.c,rlprivate.h}
+       - _rl_region_color_on,_rl_region_color_off: functions to output the
+         _rl_active_region_start_color and _rl_active_region_end_color
+       - _rl_reset_region_color: function to encapsulate setting the region
+         color to an arbitrary string, including doing memory management
+
+lib/readline/display.c
+       - putc_face: call _rl_region_color_on and _rl_region_color_off instead
+         of _rl_standout_on and _rl_standout_off
+
+lib/readline/terminal.c
+       - _rl_init_terminal_io: initialize _rl_active_region_start_color and
+         _rl_active_region_end_color from _rl_term_so and _rl_term_se,
+         respectively; reset every time the terminal is changed
+       - _rl_init_terminal_io: turn off the active region for a dumb terminal
+
+lib/readline/bind.c
+       - sv_region_{start,end}_color: call _rl_reset_region_color with the
+         appropriate value for WHICH
+
+                                  2/10
+                                  ----
+lib/readline/doc/{rluser.texi,readline.3},doc/bash.1
+       - active-region-start-color,active-region-end-color: documented new
+         bindable readline variables
+       - enable-active-region: document using active-region-start-color to
+         highlight the text in the region
+
+                                  2/11
+                                  ----
+parse.y
+       - read_token,read_token_word: make sure characters read by shell_getc
+         are protected by appropriate calls to MBTEST when testing for shell
+         metacharacters and operators
+
+                                  2/14
+                                  ----
+builtins/shopt.def
+       - set_compatibility_level: if the current compatibility level is outside
+         the range of the compatNN options, just leave it alone when
+         unsetting one of the options (which by definition was already
+         unset). Fixes issue reported by Mihai Moldovan <ionic@ionic.de>
+
+                                  2/16
+                                  ----
+lib/readline/search.c
+       - rl_history_search_{pos,len,flags}: rename to have a leading `_'
+       - _rl_history_search_pos: no longer static so other parts of readline
+         can see it
+
+lib/readline/rlprivate.h
+       - _rl_history_search_pos: extern declaration
+
+lib/readline/readline.c
+       - readline_internal_teardown: don't run the undo list against the
+         current history entry if the non-incremental search functions have
+         set _rl_history_search_pos to it, since it doesn't reflect the
+         current contents of the line buffer. Fixes issue reported by
+         Andreas Schwab <schwab@linux-m68k.org>
+
+lib/readline/misc.c
+       - _rl_start_using_history: initialize _rl_history_search_pos to
+         something invalid so it doesn't match where_history()
+
+                                  2/17
+                                  ----
+lib/readline/callback.c
+       - rl_callback_read_char: make sure _rl_eof_found is set to the value
+         of eof before calling the deprep terminal function, so it can do
+         different things based on whether the input code read EOF (or the
+         user entered the EOF character). From a gdb discussion started by
+         Andrew Burgess <aburgess@redhat.com> (still more to do, since this
+         is not part of the public API)
+
+                                  2/18
+                                  ----
+lib/readline/readline.h
+       - RL_STATE_EOF: new readline state value; set when readline reads an
+         EOF character on an empty line or a read returns an error
+       - rl_eof_found: new public variable
+
+lib/readline/rprivate.h
+       - _rl_eof_found: renamed to rl_eof_found, so not declared here
+
+lib/readline/{callback,readline}.c
+       - RL_STATE_EOF: set appropriately when readline gets an EOF. Suggested
+         by Andrew Burgess <aburgess@redhat.com>
+       - RL_STATE_EOF: make sure it's not set when readline starts
+       - rl_eof_found: set appropriately when readline gets an EOF
+
+lib/readline/{callback,readline,rltty}.c
+       - rl_eof_found: new name for _rl_eof_found
+
+lib/readline/doc/rltech.texi
+       - RL_STATE_EOF: document
+
+                                  2/19
+                                  ----
+parse.y
+       - parse_comsub: turn off parser state flags we don't want to inherit
+         into this call to the parser (PST_REGEXP, PST_EXTPAT, PST_CONDCMD,
+         PST_CONDEXPR for now). Fixes bug reported by konsolebox
+         <konsolebox@gmail.com>
+
+                                  2/23
+                                  ----
+findcmd.c,builtins/hash.def
+       - replace calls to is_directory with file_isdir, which only performs a
+         stat and doesn't do the eaccess call to check for an executable file
+
+findcmd.c
+       - find_in_path_element: takes a new RFLAGSP argument, an int * where
+         the status flags for the returned pathname are returned; saves
+         additional calls to stat/eaccess
+       - search_for_command: get the returned flags from
+         find_user_command_in_path so we don't need any additional calls to
+         file_status after we find the command in $PATH
+
+                                  2/24
+                                  ----
+doc/{bash.1,bashref.texi}
+       - FUNCTIONS: some small changes to the description of local variables
+         and dynamic scoping, with emphasis on how that affects `unset'
+         behavior. Inspired by a discussion with
+         Christoph Anton Mitterer <calestyo@scientia.net>
+
+                                  2/25
+                                  ----
+examples/loadables/realpath.c
+       - renamed -s option to -q to align with other versions
+       - perform array assignment for `-a varname' even if -q option supplied  
+       - renamed -S option to -s for Linux compatibility
+
+                                  2/28
+                                  ----
+lib/readline/misc.c
+       - _rl_free_saved_history_line: call rl_free_undo_list, saving and
+         setting rl_undo_list to the saved history line's data, so the right
+         call to _hs_replace_history_data happens and we don't end up with
+         a pointer aliasing problem. Fixes core dump reported by 
+         Andreas Schwab <schwab@linux-m68k.org>, but does not make his
+         scenario equivalent to incremental search
+
+                                   3/1
+                                   ---
+lib/readline/search.c
+       - make_history_line_current: save the current line before replacing it
+         with the found history entry using rl_maybe_save_line
+       - noninc_dosearch: we don't want the saved history line, so free it
+         after calling make_history_line_current
+       - _rl_history_search_internal: call rl_maybe_replace_line after making
+         changes to the line buffer with make_history_line_current so we can
+         save the undo list we constructed before we set the history position
+
+                                   3/2
+                                   ---
+lib/readline/display.c
+       - expand_prompt: add missing piece to patch from 10/26/2021: if we are
+         recalculating the number of invisible characters on the first line
+         of the prompt, we need to update INVFL, even if we already set it
+         when we hit the number of physical characters. This ends up being
+         assigned to prompt_invis_chars_first_line, and is used in several
+         subsequent calculations. Reported by
+         Andreas Schwab <schwab@linux-m68k.org>
+
+lib/readline/doc/{readline.3,rluser.texi},doc/bash.1
+       - enable-bracketed-paste: add some language making it clearer that
+         bracketed paste prevents the pasted text from being interpreted as
+         editing commands. Suggested by Karl O. Pinc <kop@karlpinc.com>
+
+                                   3/4
+                                   ---
+make_cmd.c
+       - make_here_document: perform quote removal on the here-doc delimiter
+         only if it's marked as quoted, which prevents quotes from inside a
+         command substitution from being removed (they're supposed to begin a
+         new quoting context) when the word itself isn't flagged as quoted
+         (which means the body of the here-document gets expanded). You can't
+         perform quote removal *and* expand the here-document lines. From an
+         austin-group discussion back in early February
+
+lib/sh/strvis.c
+       - charvis -> sh_charvis; change caller
+       - sh_charvis: now take an additional SLEN argument to avoid having to
+         compute the string length every time; change callers
+       - sh_charvis: add a utf-8 locale-specific check before calling
+         COPY_CHAR_I (in practice, doesn't make any real difference)
+
+                                  3/10
+                                  ----
+arrayfunc.c
+       - convert_var_to_array: if we're being asked to create an associative
+         array (flags & 2), and we have an existing variable that is not an
+         assoc array (and not an existing indexed array), call
+         convert_var_to_assoc to make it one
+
+                                  3/11
+                                  ----
+jobs.c
+       - wait_for: don't call get_tty_state() if readline is dispatching
+         (RL_STATE_DISPATCHING) with the terminal settings changed
+         (RL_STATE_TERMPREPPED), the same way we don't if we are running a
+         command for programmable completion. Fixes bug with SIGINT reverting
+         to the saved readline terminal settings reported by
+         Markus Napierkowski <markus.napierkowski@cyberus-technology.de>
+
+parse.y
+       - decode_prompt_string: make sure the expansion of \w, \W, and \s
+         are all run through sh_strvis before calling
+         sh_backslash_quote_for_double_quotes or just through sh_strvis if
+         we're not running the prompt string through word expansions.
+         Fixes issue reported by Josh Harcome <joshharc@gmail.com> back
+         in mid-January
+
+                                  3/16
+                                  ----
+bashline.c
+       - bash_quote_filename: if we have a word to complete that contains
+         characters that introduce a word expansion, make sure the passed
+         string does *not* exist as a filename before removing those
+         characters from the set that must be backslash-quoted. See change
+         from 1/1/2022
+
+                                  3/18
+                                  ----
+lib/readline/search.c
+       - make_history_line_current: don't free rl_undo_list or
+         _rl_saved_line_for_history; don't unconditionally save the history
+         line. This reverts some of the changes to support setting the
+         history position in history-search-backward
+       - rl_history_search_internal: only free the saved history line if we
+         were the ones who created it
+
+                                  3/21
+                                  ----
+lib/readline/nls.c
+       - xmalloc.h: include for systems without setlocale(), so xfree has a
+         prototype. Report and fix from András Kucsma <r0maikx02b@gmail.com>
+
+lib/readline/search.c
+       - _rl_history_search_internal: use previous-history/next-history to
+         move to the found history line instead of directly calling
+         history_set_pos. This makes the behavior more similar to incremental
+         search
+       - rl_history_search_internal: make sure to set rl_undo_list to the
+         current history undo list around the calls to rl_get_previous_history
+         or rl_get_next_history, in order to fool the call to
+         maybe_replace_line they make
+
+lib/readline/readline.c
+       - _rl_executing_func: the currently-executing readline command function
+
+lib/readline/rlprivate.h
+       - _rl_executing_func: extern declaration
+
+lib/readline/search.c
+       - _rl_history_search_internal: removed (commented out) code that sets
+         the current history entry to the found history entry, too much
+         assumes that the current undo list should be applied to the current
+         history entry (where_history())
+
+                                  3/23
+                                  ----
+subst.c
+       - parameter_brace_expand_word: if we have double-quoted ${*} or ${@},
+         make sure we are setting W_HASQUOTEDNULL in the flags we return to
+         the caller if we are returning QUOTED_NULL(word)
+       - parameter_brace_expand_word: if we have a double-quoted associative
+         array reference using `*' or `@', make sure we are setting
+         W_HASQUOTEDNULL in the flags we return to the caller if we are
+         returning QUOTED_NULL(word)
+       - parameter_brace_expand: if we're using the `[:]+' word expansion
+         operator, we need to note a quoted null string and pass the
+         W_QUOTEDNULL flag back to the caller
+       - expand_word_internal: make sure to return a QUOTED_NULL
+         (word[0] == CTLNUL) back to the caller if HAD_QUOTED_NULL is set,
+         regardless of whether or not we see a quoted dollar at. Fix for bug
+         reported by Andreas Luik <andreas.luik@innovative-navigation.de>
+
+arrayfunc.c
+       - array_value_internal: fix typo and set estatep->type to ARRAY_INDEXED
+         for indexed arrays
+
+                                  3/31
+                                  ----
+lib/readline/{history.c,histlib.h}
+       - _hs_at_end_of_history: convenience function to tell whether or not
+         the current history position is at the end of the history list
+
+                                   4/1
+                                   ---
+lib/readline/search.c
+       - make_history_line_current: don't free rl_undo_list if it is equal to
+         _rl_saved_line_for_history->data, since we will need to restore it
+        later if we got it from a history entry. Fixes issue dating back to
+        7/2021 and changes to _rl_free_saved_line_for_history, current issue
+        reported by Andreas Schwab <schwab@linux-m68k.org>
+
+                                   4/5
+                                   ---
+lib/readline/{complete,histfile,histsearch,isearch,terminal}.c
+       - xfree: use instead of free
+
+                                   4/7
+                                   ---
+configure.ac
+       - bumped version to bash-5.2-beta
+
+[bash-5.2-beta frozen]
+
+                                   4/8
+                                   ---
+lib/readline/input.c
+       - _rl_orig_sigset: need extern declaration if HAVE_SELECT is defined.
+         From https://savannah.gnu.org/support/?110634
+
+examples/loadables/seq.c
+       - PRIdMAX: redefine if PRI_MACROS_BROKEN is defined.
+         From https://savannah.gnu.org/support/index.php?110635
+
+                                  4/11
+                                  ----
+configure.ac
+       - BASH_FUNC_STRTOIMAX: replace strtoimax if the system doesn't provide
+         a declaration in a standard header file. Uses new m4/strtoimax.m4.
+         From https://savannah.gnu.org/support/index.php?110633
+
+builtins/printf.def
+       - getdouble: new function, parses string into `double' using strtod
+       - printf_builtin: check for the `L' length modifier and use long
+         doubles for the floating point conversion specifiers. If it's not
+         supplied, use `double' when in posix mode (as posix specifies) and
+         long double (if it's available, double if not) in default mode.
+         From a report from Paul Eggert <eggert@cs.ucla.edu>
+
+                                  4/12
+                                  ----
+lib/sh/oslib.c
+       - bzero: update function signature to modern BSD version
+
+                                  4/14
+                                  ----
+lib/sh/oslib.c
+       - bcopy, gethostname, mkfifo: update function signatures to modern
+         versions
+
+                                  4/15
+                                  ----
+jobs.c,nojobs.c
+       - wait_for_single_pid: if the pid or job argument is invalid -- isn't
+         a child of this shell -- return 257, which is out of the range of
+         valid 8-bit status values
+
+execute_cmd.c
+       - execute_pipeline: if wait_for_single_pid returns > 256, set it to
+         127 (invalid process)
+
+jobs.c
+       - wait_for_background_pids: if wait_for_single_pid returns > 256, set
+         the status we return in PS to 127 (what it was before)
+
+builtins/wait.def
+       - wait_builtin: if wait_for_single_pid returns > 256, treat it as an
+         error and set pstat.pid to NO_PID
+       - wait_builtin: if -p supplied, and we get to the end of the argument
+         list with PSTAT.PID != NO_PID (which we assume means that the return
+         value is set from PSTAT.STATUS), set the variable name to PSTAT.PID.
+         From a report by Robert Elz <kre@munnari.OZ.AU>
+       - wait_builtin: for compatibility with the netbsd sh, leave the variable
+         name specified with `-p' unset if there are no PID arguments.
+         From a report by Robert Elz <kre@munnari.OZ.AU>
+
+                                  4/17
+                                  ----
+parse.y
+       - xparse_dolparen: if (flags & SX_NOLONGJMP), don't call
+         jump_to_top_level() on errors
+
+bashline.c
+       - bash_quote_filename: don't call quote_word_break_chars() unless we
+         have word break chars initialized. Fixes bug reported by
+         Sam James <sam@gentoo.org>
+
+                                  4/18
+                                  ----
+pcomplete.c
+       - gen_globpat_matches: call glob_filename with the GX_GLOBSTAR flag if
+         the `globstar' shell option is enabled. From a report by
+         Steve <bash@lonetwin.net>
+
+lib/malloc/malloc.c
+       - internal_free: remove the GLIBC21 code (!)
+       - internal_free: make the code that tests against memtop and calls
+         lesscore depend on USE_LESSCORE being defined, which it is by
+         default
+
+lib/malloc/imalloc.h
+       - USE_LESSCORE: define
+
+parse.y,shell.h
+       - token_buffer_size and its corresponding saved value in the shell's
+         parser state are now size_t instead of int
+
+stringlib.c
+       - strsub,strcreplace: use size_t instead of int for local length and
+         indexing variables
+
+lib/sh/zmapfd.c
+       - zmapfd: use size_t instead of int for local length and indexing
+         variables
+
+lib/sh/zgetline.c
+       - zgetline: use size_t instead of int for local length and indexing
+         variables
+
+                                  4/20
+                                  ----
+pcomplete.c
+       - init_itemlist_from_varlist: free VLIST after assigning it from
+         *SVFUNC and after we get the variable names and values out of it.
+         Report from Robert E. Griffith <bobg@junga.com>
+
+                                  4/25
+                                  ----
+redir.c
+       - here_document_to_fd: if the shell compatibility level is bash-5.0 or
+         earlier, use tempfiles for all here-documents and here-strings. From
+         a bug-bash discussion started by Sam Liddicott <sam@liddicott.com>
+
+                                  4/26
+                                  ----
+parse.y
+       - parse_comsub: non-interactive shells exit on a syntax error while
+         parsing the command substitution
+       - parse_comsub: unset additional PARSER_STATE flags before calling
+         yyparse(). Inspired by https://bugs.gentoo.org/837203; unsetting
+         PST_COMPASSIGN is the fix for that bug
+       - parse_string_to_word_list: use save_parser_state/restore_parser_state
+         instead of saving pieces of the shell state in individual variables
+       - parse_compound_assignment: use save_parser_state/restore_parser_state
+         instead of saving pieces of the shell state in individual variables
+       - parse_compound_assignment: unset additional PARSER_STATE flags before
+         calling read_token(); set esacs_needed_count and expecting_in_token
+         to 0 like in parse_comsub() since read_token can use them
+
+                                  4/27
+                                  ----
+lib/sh/strvis.c
+       - sh_charvis: changes to handle being compiled without multibyte support
+
+                                  4/29
+                                  ----
+lib/readline/callback.c
+       - rl_callback_read_char: don't set rl_eof_found unless eof is > 0,
+         since it can be -3 if we need to read more input in a multi-key
+         sequence. Report from Andrew Burgess <aburgess@redhat.com>
+
+examples/loadables/Makefile.sample.in
+       - new file, containing the rules to build the example shared object
+       - includes Makefile.inc from wherever it's installed. Suggested by
+         Robert E. Griffith <bobg@junga.com>
+
+examples/loadables/Makefile.inc.in
+       - remove rules that create the example shared object
+
+                                  4/30
+                                  ----
+builtins/evalstring.c
+       - parse_and_execute: check for terminating signals before returning,
+         after any longjmp, to improve responsiveness and fix the -c code
+         path before running any exit trap. Report from
+         Emanuele Torre <torreemanuele6@gmail.com>
+
+                                  5/17
+                                  ----
+builtins/suspend.def
+       - suspend_builtin: the -f option now forces a suspend even if job
+         control is not enabled. Inspired by a discussion with
+         Robert Elz <kre@munnari.OZ.AU>
+
+doc/{bash.1,bashref.texi}
+       - suspend: updated description to include expanded -f behavior
+
+                                  5/25
+                                  ----
+builtins/mkbuiltins.c
+       - -includefile: new argument, specifies extern filename to insert
+         into the #include statement in the structfile (builtins.c) and
+         the filename in the comment in the extern file (builtext.h).
+         From Alexander Kanavin <alex.kanavin@gmail.com> via
+         https://savannah.gnu.org/patch/?10210
+
+builtins/Makefile.in
+       - builtins.c: change call to mkbuiltins to add -includefile option
+       - builtins.c: change recipe to run all the commands in the same shell
+         invocation
+       - builtins.c: change recipe to specify new filenames in the call to
+         mkbuiltins and move them onto builtins.c/builtext.h if the new ones
+         are different; make the new filenames use the current make recipe
+         shell pid in the filename ($$RECPID).
+         Inspired by Alexander Kanavin <alex.kanavin@gmail.com> via
+         https://savannah.gnu.org/patch/?10210
+
+                                   6/2
+                                   ---
+builtins/common.c
+       - builtin_find_indexed_array: new function, factored common code out
+         of mapfile and read builtins to find an in-scope indexed array or
+         create one 
+
+builtins/common.h
+       - builtin_find_indexed_array: extern declaration
+
+builtins/{mapfile,read}.def
+       - change callers to use builtin_find_indexed_array
+
+variables.c
+       - unbind_global_variable, unbind_global_variable_noref: new functions
+         that remove variables from the global_variables table
+
+lib/sh/shmatch.c
+       - sh_regmatch: use unbind_global_variable_noref to make sure we act on
+         the copy of BASH_REMATCH in the global scope all the time, ignoring
+         any local variables that might exist. Tentative fix for memory leak
+         report from Emanuele Torre <torreemanuele6@gmail.com>
+
+doc/{bash.1,bashref.texi}
+       - BASH_REMATCH: add caveat about making it a local variable
+
+                                   6/6
+                                   ---
+print_cmd.c
+       - print_redirection: if the redirectee for r_duplicating_output_word
+         (r_duplicating_input_word) is 1 (0), don't print it; only print a
+         non-default file descriptor number
+       - print_redirection_list: remove the code that tries to temporarily
+         translate a >&word redirection to >&word now that we won't print a
+         non-default file descriptor number. Fixes issue with `declare -f' and
+         function export reported by Namikaze Minato <lloydsensei@gmail.com>
+
+                                  6/13
+                                  ----
+configure.ac
+       - bumped version to bash-5.2-rc1
+
+[bash-5.2-rc1 released]
+
+                                  6/15
+                                  ----
+parse.y
+       - parse_string_to_word_list: save the parser state before any state-
+         changing functions like bash_history_disable(). Reported by
+         Clark Wang <dearvoid@gmail.com>
+
+                                  6/16
+                                  ----
+doc/bash.1
+       - play tricks with the value of the zZ number register to refer to
+         `bash(1)' instead of `above' or `below' when creating the builtins
+         man page
+
+                                  6/17
+                                  ----
+doc/{bash.1,bashref.texi}
+       - wait: note that wait will return > 128 if interrupted by a signal.
+         Reported by AA <aathan_github@memeplex.com>
+
+execute_cmd.c
+       - {execute_cond_node,execute_arith_command,eval_arith_for_expr}: make
+         sure to reset this_command_name after running any DEBUG trap so the
+         DEBUG trap doesn't overwrite it.
+         Reported by Emanuele Torre <torreemanuele6@gmail.com>.
+       - execute_select_command: set this_command_name to NULL after running
+         any DEBUG trap like execute_for_command does
+
+                                  6/23
+                                  ----
+test.c
+       - three_arguments: when given [ ! ! arg ], make sure to advance POS
+         after calling two_arguments to avoid a `too many arguments' error.
+         Report from Steffen Nurpmeso <steffen@sdaoden.eu>
+
+                                  6/27
+                                  ----
+subst.c
+       - expand_word_internal: when expanding backquoted command substitution,
+         call string_extract with the SX_REQMATCH flag (closing backquote
+         required) only if the word flags don't contain W_COMPLETE,
+         indicating that we're doing this for completion, probably to
+         determine whether or not to append something to the word. Fixes bug
+         reported by Emanuele Torre <torreemanuele6@gmail.com>.
+
+                                   7/5
+                                   ---
+execute_cmd.c
+       - execute_connection: treat a connector of '\n' the same as ';'
+
+print_cmd.c
+       - print_comsub: new function, sets flag noting we are printing a
+         command substitution and calls make_command_string
+       - make_command_string_internal: add '\n' to the ';' case; print command
+         list with newline connector appropriately
+
+parse.y
+       - parse_comsub: call print_comsub instead of make_command_string
+       - list1 production (part of compound_list): if a list is separated by
+         newlines, and the parser is parsing a command substitution, make
+         the connection command with a '\n' connector. Makes the text
+         output of parse_comsub closer to the original source text. From a
+         report from Martijn Dekker <martijn@inlv.org>
+
+                                   7/6
+                                   ---
+doc/bash.1,lib/readline/doc/rluser.texi
+       - complete: add note about arguments passed to command specified by
+         `complete -C'; suggested by Mark Chandler <mcp@synq.so>
+
+builtins/setattr.def
+       - show_local_var_attributes: special-case `local -', since there is
+         no `declare -' equivalent.
+         Reported by Emanuele Torre <torreemanuele6@gmail.com>.
+       - show_all_var_attributes: use `local -' when printing a variable named
+         `-' at the current non-zero variable context
+
+parse.y
+       - shell_getc: if we are at the end of an alias, returning a space,
+         make sure we mark the previous character as single-byte by modifying
+         shell_input_line_property so the space we return is properly
+         recognized. This would fail before if the last character of the
+         alias was a multi-byte character. Reported by
+         Vangelis Natsios <vnatsios@gmail.com>
+
+                                  7/12
+                                  ----
+lib/readline/isearch.c
+       - rl_display_search: don't call rl_redisplay_function before returning;
+         rl_message already calls it. Reported by
+         Frédéric Moulins <frederic@moulins.org>
+
+configure.ac
+       - bumped version to bash-5.2-rc2
+
+                                  7/18
+                                  ----
+jobs.c
+       - set_job_control: don't bother calling tcgetpgrp if shell_tty < 0,
+         since it will just fail
+
+variables.c
+       - reset_local_contexts: new function, delete all context tables
+         associated with shell functions and set variable_context to 0.
+         Called when we want to stop executing in a shell function without
+         going through the pop_context chain with its side effects
+
+variables.h
+       - reset_local_contexts: extern declaration
+
+builtins/evalstring.c
+       - parse_and_execute: call reset_local_contexts instead of setting
+         variable_context to 0
+
+eval.c
+       - reader_loop: call reset_local_contexts in cases where the shell has
+         longjmped for a fatal error and errexit is enabled (ERREXIT), but
+         not for other cases, and especially not for the exit builtin,
+         instead of just setting variable_context to 0. Fixes issue originally
+         reported by Robert Stoll <robert.stoll@tegonal.com>
+
+subst.c
+       - pat_subst: implement sed-like behavior when presented with a null
+         pattern that's anchored at the start or end of the string, or when
+         presented with a null string: process the replacement string for `&'
+         and `\&' and substitute in the result as before. Patch from
+         Koichi Murase <myoga.murase@gmail.com>
+
+                                  7/20
+                                  ----
+
+[bash-5.2-rc2 frozen]
+
+                                  7/27
+                                  ----
+parse.y
+       - reset_parser: set need_here_doc, esacs_needed_count, expecting_in_token
+         all to 0, since jumping back to a top-level parse needs that
+       - parse_comsub: make sure to reset expand_aliases and shell_eof_token
+         if we're not going to exit immediately out of this function
+
+                                  7/28
+                                  ----
+parse.y
+       - parse_comsub: if the compatibility level is <= 51, set extglob while
+         parsing the command substitution, so bad pattern errors can still be
+         caught but valid patterns are let through and can be evaluated at
+         runtime, when extglob may have been set. If it isn't set, it will
+         still be a parser error when the command substitution is executed.
+         Fixes report from Sam James <sam@gentoo.org> about gentoo scripts.
+       - reset_parser: set extended_glob from global_extglob if the parser
+         state includes PST_CMDSUBST
+       - xparse_dolparen: set global_extglob but don't modify extended_glob,
+         so parse errors can be caught before forking a child for command
+         substitution, as part of word expansion, but after extglob may have
+         been set by command execution (e.g., in a shell function)
+
+                                   8/5
+                                   ---
+[bump version to bash-5.2-rc3]
+
+                                   8/6
+                                   ---
+trap.c
+       - run_pending_traps: move code from evalstring() so we call
+         parse_and_execute() directly and handle any `return' invocations so
+         we can restore the value of running_trap. Otherwise, if we longjmp
+         past this function, we will think we're running a trap after we
+         finish. Prompted by post from Koichi Murase <myoga.murase@gmail.com>
+
+                                   8/9
+                                   ---
+
+lib/readline/nls.c
+       - _rl_current_locale: private variable, stores the value of the
+         LC_CTYPE locale category, as determined by _rl_init_locale; set
+         to allocated memory in _rl_init_locale()
+       - _rl_set_localevars: new function, code from _rl_init_eightbit that
+         checks the current locale (passed as an argument) and sets the
+         various locale-aware variables based on it. It accepts a second
+         argument: FORCE. If non-zero, it means to restore the default "C"
+         locale values if the locale is "C" or "POSIX", now that this
+         function can be called multiple times
+       - _rl_init_eightbit: now just calls _rl_init_locale and
+         _rl_set_localevars
+       - _rl_reset_locale: new function, checks whether our the locale has
+         changed since we last called _rl_init_locale to set our internal
+         idea of its value. If it has changed, call _rl_set_localevars with
+         the new locale and a FORCE argument of 1 to change the
+         locale-dependent variables.
+
+lib/readline/rlprivate.h
+       - _rl_reset_locale: extern declaration
+
+lib/readline/readline.c
+       - rl_initialize: call _rl_reset_locale instead of _rl_init_locale so
+         the internal readline variables get set when we move from a non-
+         multibyte locale ("C") to a multibyte one ("en_US.UTF-8"). Report
+         from Alan Coopersmith <alan.coopersmith@oracle.com>
+
+                                  8/16
+                                  ----
+lib/sh/setlinebuf.c
+       - sh_setlinebuf: allocate buffers for line-buffering stdout and stderr
+         only once, the first time it is requested. Only allocate memory if
+         we're using setvbuf (we usually are). Double the buffer size to 2016
+         if we're using the bash malloc. Otherwise, let stdio handle it.
+
+                                  8/17
+                                  ----
+builtins/exec.def
+       - exec_builtin: make sure to initialize orig_job_control in case the
+         command is not found by search_for_command. Report and fix from
+         Xiami <i@f2light.com>
+
+[bash-5.2-rc3 frozen]
+
+                                  8/27
+                                  ----
+parse.y
+       - parse_comsub: restore extended_glob to a local copy (local_extglob)
+         only if we changed it; a safer way to do it. Fixes extglob change
+         issue reported by Kerin Millar <kfm@plushkava.net>
+       - cond_term: restore extended_glob to a local copy; safer than using
+         global_extglob, which we will reserve for error recovery
+
+                                  8/30
+                                  ----
+parse.y
+       - parse_comsub: don't clear the pushed string list; we might need it to
+         consume additional input to satisfy this command substitution. When
+         we restore the parser state, don't restore the pushed string list in
+         case we used it. From
+         https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1018727
+       - parse_comsub: don't modify extended_glob if parser_state includes
+         PST_EXTPAT, in which case we've already set extended_glob and
+         global_extglob appropriately. Only matters in compatibility mode.
+
+                                  8/31
+                                  ----
+subst.c
+       - parameter_brace_transform: make sure we return an error if *xform
+         is '\0'. Report from Ivan Kapranov <koltiradw@yandex.ru>
+
+                                   9/7
+                                   ---
+[bump version to bash-5.2-rc4]
+
+                                   9/8
+                                   ---
+[bash-5.2-rc4 frozen]
+
+                                  9/20
+                                  ----
+lib/readline/history.c
+       - replace_history_entry: check for a NULL timestamp before trying to
+         copy it. Report from nov.ondrej@gmail.com
+
+                                  9/23
+                                  ----
+[bash-5.2 frozen]
diff --git a/INSTALL b/INSTALL
index 91f1dd9a7db5a066c90bd8311a089bd5dfa21eea..2033143a18c2715eeab7dff449d80d37d583f7f2 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -20,20 +20,28 @@ The simplest way to compile Bash is:
   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.
+     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', 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.
+(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
@@ -64,7 +72,7 @@ considered for the next release.
 The file 'configure.ac' is used to create 'configure' by a program
 called Autoconf.  You only need 'configure.ac' if you want to change it
 or regenerate 'configure' using a newer version of Autoconf.  If you do
-this, make sure you are using Autoconf version 2.50 or newer.
+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
@@ -101,7 +109,7 @@ need to supply the '--srcdir=PATH' argument to tell 'configure' where
 the source files are.  'configure' automatically checks for the source
 code in the directory that 'configure' is in and in '..'.
 
-If you have to use a 'make' that does not supports the 'VPATH' variable,
+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.
@@ -122,10 +130,13 @@ Installation Names
 ==================
 
 By default, 'make install' will install into '/usr/local/bin',
-'/usr/local/man', etc.  You can specify an installation prefix other
-than '/usr/local' by giving 'configure' the option '--prefix=PATH', or
-by specifying a value for the 'DESTDIR' 'make' variable when running
-'make install'.
+'/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
@@ -133,11 +144,35 @@ 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.
+
 Specifying the System Type
 ==========================
 
 There may be some features 'configure' can not figure out automatically,
-but need to determine by the type of host Bash will run on.  Usually
+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
@@ -235,16 +270,20 @@ the Bash 'configure' recognizes.
      subdirectories of that directory (include files in PREFIX/'include'
      and the library in PREFIX/'lib').
 
-'--with-purify'
-     Define this to use the Purify memory allocation checker from
-     Rational Software.
+'--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
-and linked, rather than changing run-time features.
+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
@@ -257,6 +296,10 @@ and linked, rather than changing run-time features.
      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.
@@ -265,14 +308,21 @@ The 'minimal-config' option can be used to disable all of the following
 options, but it is processed first, so individual options may be enabled
 using 'enable-FEATURE'.
 
-All of the following options except for 'disabled-builtins',
-'direxpand-default', and 'xpg-echo-default' are enabled by default,
-unless the operating system does not provide the necessary support.
+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
@@ -292,7 +342,7 @@ unless the operating system does not provide the necessary support.
 
 '--enable-casemod-attributes'
      Include support for case-modifying attributes in the 'declare'
-     builtin and assignment statements.  Variables with the UPPERCASE
+     builtin and assignment statements.  Variables with the 'uppercase'
      attribute, for example, will have their values converted to
      uppercase upon assignment.
 
@@ -351,7 +401,7 @@ unless the operating system does not provide the necessary support.
      described above under *note Pattern Matching::.
 
 '--enable-extended-glob-default'
-     Set the default value of the EXTGLOB shell option described above
+     Set the default value of the 'extglob' shell option described above
      under *note The Shopt Builtin:: to be enabled.
 
 '--enable-function-import'
@@ -360,10 +410,10 @@ unless the operating system does not provide the necessary support.
      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.
+     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
@@ -414,10 +464,6 @@ unless the operating system does not provide the necessary support.
      Include the 'select' compound command, which allows the generation
      of simple menus (*note Conditional Constructs::).
 
-'--enable-separate-helpfiles'
-     Use external files for the documentation displayed by the 'help'
-     builtin instead of storing the text internally.
-
 '--enable-single-help-strings'
      Store the text displayed by the 'help' builtin as a single string
      for each help topic.  This aids in translating the text to
@@ -427,6 +473,10 @@ unless the operating system does not provide the necessary support.
 '--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'.
 
index 54f327cf409eee5b1fc526bc62cea2beb78ad8c4..a45b3cfc27869b495e55faa6d6fdbadbeb6a46d4 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -22,6 +22,7 @@ examples/startup-files d
 examples/misc  d
 examples/loadables d
 examples/loadables/perl        d
+examples/shellmath     d
 include                d
 lib            d
 lib/glob       d
@@ -40,7 +41,7 @@ support               d
 tests          d
 tests/misc     d
 ABOUT-NLS      f
-ChangeLog      s       CWRU/changelog
+ChangeLog      c CWRU/changelog
 CHANGES                f
 COMPAT         f
 COPYING                f
@@ -61,6 +62,7 @@ config-bot.h  f
 config.h.in    f
 aclocal.m4     f
 array.c                f
+array2.c       f
 arrayfunc.c    f
 assoc.c                f
 eval.c         f
@@ -146,10 +148,11 @@ redir.h           f
 bashtypes.h    f
 mailcheck.h    f
 xmalloc.h      f
-y.tab.c                f
-y.tab.h                f
-parser-built   f
 pathnames.h.in f
+# order is important here
+y.tab.c                F
+y.tab.h                F
+parser-built   F
 builtins/Makefile.in   f
 builtins/alias.def     f
 builtins/bind.def      f
@@ -203,11 +206,11 @@ builtins/umask.def        f
 builtins/wait.def      f
 builtins/psize.c       f
 builtins/psize.sh      f
-builtins/inlib.def     f
+#builtins/inlib.def    f
 builtins/bashgetopt.c  f
 builtins/common.h      f
 builtins/bashgetopt.h  f
-cross-build/cygwin32.cache     f
+#cross-build/cygwin32.cache    f
 cross-build/x86-beos.cache     f
 cross-build/opennt.cache       f
 cross-build/qnx.cache  f
@@ -230,6 +233,7 @@ include/shtty.h             f
 include/stat-time.h    f
 include/stdc.h         f
 include/systimes.h     f
+include/timer.h                f
 include/typemax.h      f
 include/unionwait.h    f
 lib/glob/Makefile.in   f
@@ -366,6 +370,7 @@ lib/readline/posixdir.h     f
 lib/readline/posixjmp.h        f
 lib/readline/posixselect.h     f
 lib/readline/posixstat.h       f
+lib/readline/posixtime.h       f
 lib/readline/ansi_stdlib.h     f
 lib/readline/rlstdc.h  f
 lib/readline/rlprivate.h       f
@@ -449,6 +454,8 @@ lib/sh/strtoul.c    f
 lib/sh/strtoull.c      f
 lib/sh/strtoumax.c     f
 lib/sh/strtrans.c      f
+lib/sh/strvis.c                f
+lib/sh/timers.c                f
 lib/sh/times.c         f
 lib/sh/timeval.c       f
 lib/sh/tmpfile.c       f
@@ -477,6 +484,7 @@ lib/tilde/Makefile.in       f
 lib/tilde/tilde.c      f
 lib/tilde/tilde.h      f
 lib/tilde/shell.c      f
+m4/strtoimax.m4                f
 m4/stat-time.m4                f
 m4/timespec.m4         f
 m4/codeset.m4          f
@@ -631,7 +639,6 @@ doc/bashref.info    f
 doc/bash.info  f
 doc/article.ms f
 doc/htmlpost.sh        f       755
-doc/infopost.sh        f       755
 doc/fdl.texi   f
 doc/fdl.txt    f
 #
@@ -710,6 +717,7 @@ examples/loadables/template.c       f
 examples/loadables/loadables.h f
 examples/loadables/Makefile.in f
 examples/loadables/Makefile.inc.in     f
+examples/loadables/Makefile.sample.in  f
 examples/loadables/necho.c     f
 examples/loadables/hello.c     f
 examples/loadables/asort.c     f
@@ -721,12 +729,13 @@ examples/loadables/setpgid.c      f
 examples/loadables/sleep.c     f
 examples/loadables/strftime.c  f
 examples/loadables/truefalse.c f
-#examples/loadables/getconf.h  f
-#examples/loadables/getconf.c  f
+examples/loadables/getconf.h   f
+examples/loadables/getconf.c   f
 examples/loadables/fdflags.c   f
 examples/loadables/finfo.c     f
 examples/loadables/cat.c       f
 examples/loadables/csv.c       f
+examples/loadables/dsv.c       f
 examples/loadables/cut.c       f
 examples/loadables/logname.c   f
 examples/loadables/basename.c  f
@@ -819,6 +828,7 @@ examples/functions/which    f
 #examples/scripts/adventure.sh f
 #examples/scripts/bash-hexdump.sh      f
 #examples/scripts/bcsh.sh      f
+examples/scripts/bcalc         f
 examples/scripts/cat.sh                f
 examples/scripts/center                f
 #examples/scripts/dd-ex.sh     f
@@ -862,6 +872,16 @@ examples/startup-files/bashrc      f
 examples/misc/aliasconv.sh     f
 examples/misc/aliasconv.bash   f
 examples/misc/cshtobash        f
+examples/shellmath/LICENSE     f
+examples/shellmath/README.md   f
+examples/shellmath/assert.sh   f
+examples/shellmath/faster_e_demo.sh    f
+examples/shellmath/image.png   f
+examples/shellmath/runTests.sh f
+examples/shellmath/shellmath.sh        f
+examples/shellmath/slower_e_demo.sh    f
+examples/shellmath/testCases.in        f
+examples/shellmath/timingData.txt      f
 tests/README           f
 tests/COPYRIGHT                f
 tests/test-glue-functions      f
@@ -871,6 +891,7 @@ tests/alias2.sub    f
 tests/alias3.sub       f
 tests/alias4.sub       f
 tests/alias5.sub       f
+tests/alias6.sub       f
 tests/alias.right      f
 tests/appendop.tests   f
 tests/appendop1.sub    f
@@ -918,6 +939,8 @@ tests/array25.sub   f
 tests/array26.sub      f
 tests/array27.sub      f
 tests/array28.sub      f
+tests/array29.sub      f
+tests/array30.sub      f
 tests/array-at-star    f
 tests/array2.right     f
 tests/assoc.tests      f
@@ -933,6 +956,13 @@ tests/assoc8.sub   f
 tests/assoc9.sub       f
 tests/assoc10.sub      f
 tests/assoc11.sub      f
+tests/assoc12.sub      f
+tests/assoc13.sub      f
+tests/assoc14.sub      f
+tests/assoc15.sub      f
+tests/assoc16.sub      f
+tests/assoc17.sub      f
+tests/assoc18.sub      f
 tests/attr.tests       f
 tests/attr.right       f
 tests/attr1.sub                f
@@ -971,6 +1001,8 @@ tests/comsub1.sub  f
 tests/comsub2.sub      f
 tests/comsub3.sub      f
 tests/comsub4.sub      f
+tests/comsub5.sub      f
+tests/comsub6.sub      f
 tests/comsub-eof.tests f
 tests/comsub-eof0.sub  f
 tests/comsub-eof1.sub  f
@@ -985,6 +1017,8 @@ tests/comsub-posix.right   f
 tests/comsub-posix1.sub        f
 tests/comsub-posix2.sub        f
 tests/comsub-posix3.sub        f
+tests/comsub-posix5.sub        f
+tests/comsub-posix6.sub        f
 tests/cond.tests       f
 tests/cond.right       f
 tests/cond-regexp1.sub f
@@ -1010,6 +1044,8 @@ tests/dollar-at-star6.sub f
 tests/dollar-at-star7.sub      f
 tests/dollar-at-star8.sub      f
 tests/dollar-at-star9.sub      f
+tests/dollar-at-star10.sub     f
+tests/dollar-at-star11.sub     f
 tests/dollar-at1.sub   f
 tests/dollar-at2.sub   f
 tests/dollar-at3.sub   f
@@ -1044,6 +1080,7 @@ tests/errors5.sub f
 tests/errors6.sub      f
 tests/errors7.sub      f
 tests/errors8.sub      f
+tests/errors9.sub      f
 tests/execscript       f
 tests/exec.right       f
 tests/exec1.sub                f       755
@@ -1074,6 +1111,7 @@ tests/exp9.sub            f
 tests/exp10.sub                f
 tests/exp11.sub                f
 tests/exp12.sub                f
+tests/exp13.sub                f
 tests/exportfunc.tests f
 tests/exportfunc.right f
 tests/exportfunc1.sub  f
@@ -1091,6 +1129,8 @@ tests/extglob3.tests      f
 tests/extglob3.right   f
 tests/extglob4.sub     f
 tests/extglob5.sub     f
+tests/extglob6.sub     f
+tests/extglob7.sub     f
 tests/func.tests       f
 tests/func.right       f
 tests/func1.sub                f
@@ -1119,6 +1159,7 @@ tests/glob6.sub           f
 tests/glob7.sub                f
 tests/glob8.sub                f
 tests/glob9.sub                f
+tests/glob10.sub       f
 tests/glob.right       f
 tests/globstar.tests   f
 tests/globstar.right   f
@@ -1132,6 +1173,8 @@ tests/heredoc2.sub        f
 tests/heredoc3.sub     f
 tests/heredoc4.sub     f
 tests/heredoc5.sub     f
+tests/heredoc6.sub     f
+tests/heredoc7.sub     f
 tests/herestr.tests    f
 tests/herestr.right    f
 tests/herestr1.sub     f
@@ -1152,6 +1195,7 @@ tests/history2.sub        f
 tests/history3.sub     f
 tests/history4.sub     f
 tests/history5.sub     f
+tests/history6.sub     f
 tests/ifs.tests                f
 tests/ifs.right                f
 tests/ifs1.sub         f
@@ -1183,6 +1227,7 @@ tests/lastpipe.right      f
 tests/lastpipe.tests   f
 tests/lastpipe1.sub    f
 tests/lastpipe2.sub    f
+tests/lastpipe3.sub    f
 tests/mapfile.data     f
 tests/mapfile.right    f
 tests/mapfile.tests    f
@@ -1212,6 +1257,8 @@ tests/nameref18.sub       f
 tests/nameref19.sub    f
 tests/nameref20.sub    f
 tests/nameref21.sub    f
+tests/nameref22.sub    f
+tests/nameref23.sub    f
 tests/nameref.right    f
 tests/new-exp.tests    f
 tests/new-exp1.sub     f
@@ -1229,12 +1276,15 @@ tests/new-exp12.sub     f
 tests/new-exp13.sub    f
 tests/new-exp14.sub    f
 tests/new-exp15.sub    f
+tests/new-exp16.sub    f
 tests/new-exp.right    f
 tests/nquote.tests     f
 tests/nquote.right     f
 tests/nquote1.sub      f
 tests/nquote2.sub      f
 tests/nquote3.sub      f
+tests/nquote4.sub      f
+tests/nquote5.sub      f
 tests/nquote1.tests    f
 tests/nquote1.right    f
 tests/nquote2.tests    f
@@ -1285,6 +1335,13 @@ tests/quote1.sub f
 tests/quote2.sub       f
 tests/quote3.sub       f
 tests/quote4.sub       f
+tests/quotearray.right f
+tests/quotearray.tests f
+tests/quotearray1.sub  f
+tests/quotearray2.sub  f
+tests/quotearray3.sub  f
+tests/quotearray4.sub  f
+tests/quotearray5.sub  f
 tests/read.tests       f
 tests/read.right       f
 tests/read1.sub                f
@@ -1293,6 +1350,8 @@ tests/read3.sub           f
 tests/read4.sub                f
 tests/read5.sub                f
 tests/read6.sub                f
+tests/read7.sub                f
+tests/read8.sub                f
 tests/redir.tests      f
 tests/redir.right      f
 tests/redir1.sub       f
@@ -1385,6 +1444,7 @@ tests/run-precedence      f
 tests/run-printf       f
 tests/run-procsub      f
 tests/run-quote                f
+tests/run-quotearray   f
 tests/run-read         f
 tests/run-redir                f
 tests/run-rhs-exp      f
@@ -1421,6 +1481,7 @@ tests/tilde.tests f
 tests/tilde.right      f
 tests/tilde2.tests     f
 tests/tilde2.right     f
+tests/tilde3.sub       f
 tests/trap.tests       f
 tests/trap.right       f
 tests/trap1.sub                f       755
@@ -1463,6 +1524,7 @@ tests/varenv18.sub        f
 tests/varenv19.sub     f
 tests/varenv20.sub     f
 tests/varenv21.sub     f
+tests/varenv22.sub     f
 tests/version          f
 tests/version.mini     f
 tests/vredir.tests     f
@@ -1474,6 +1536,7 @@ tests/vredir4.sub f
 tests/vredir5.sub      f
 tests/vredir6.sub      f
 tests/vredir7.sub      f
+tests/vredir8.sub      f
 tests/misc/dev-tcp.tests       f
 tests/misc/perf-script f
 tests/misc/perftest    f
index 3e3a5d48378c3f6d18ef04e96f98e58779aa38d9..0b4df73a7a69d301390b98d1e7c32aeedce39b81 100644 (file)
@@ -1,6 +1,6 @@
-# Makefile for bash-5.0, version 4.30
+# Makefile for bash-5.2, version 5.1
 #
-# Copyright (C) 1996-2018 Free Software Foundation, Inc.
+# Copyright (C) 1996-2021 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
@@ -87,6 +87,11 @@ INSTALL_DATA = @INSTALL_DATA@
 INSTALLMODE= -m 0755
 INSTALLMODE2 = -m 0555
 
+CTAGS = ctags
+CTAGSFLAGS = -x
+ETAGS = etags
+ETAGSFLAGS =
+
 TESTSCRIPT = @TESTSCRIPT@
 
 DEBUGGER_START_FILE = @DEBUGGER_START_FILE@
@@ -132,6 +137,7 @@ CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ @CROSS_COMPILE@
 CPPFLAGS = @CPPFLAGS@
 CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@
 LOCAL_CFLAGS = @LOCAL_CFLAGS@ ${DEBUG} ${MALLOC_DEBUG}
+STYLE_CFLAGS = @STYLE_CFLAGS@
 DEFS = @DEFS@
 LOCAL_DEFS = @LOCAL_DEFS@
 
@@ -147,7 +153,7 @@ LOCAL_LDFLAGS = @LOCAL_LDFLAGS@
 SYSTEM_FLAGS = -DPROGRAM='"$(Program)"' -DCONF_HOSTTYPE='"$(Machine)"' -DCONF_OSTYPE='"$(OS)"' -DCONF_MACHTYPE='"$(MACHTYPE)"' -DCONF_VENDOR='"$(VENDOR)"' $(LOCALE_DEFS)
 
 BASE_CCFLAGS = $(SYSTEM_FLAGS) $(LOCAL_DEFS) \
-         $(DEFS) $(LOCAL_CFLAGS) $(INCLUDES)
+         $(DEFS) $(LOCAL_CFLAGS) $(INCLUDES) $(STYLE_CFLAGS)
 
 CCFLAGS = $(ADDON_CFLAGS) $(BASE_CCFLAGS) ${PROFILE_FLAGS} $(CPPFLAGS) $(CFLAGS)
 
@@ -170,7 +176,8 @@ GCC_LINT_FLAGS = -O -Wall -Wshadow -Wpointer-arith -Wcast-qual -Wno-parentheses
                 -Wcast-align -Wstrict-prototypes -Wconversion -Wformat \
                 -Wformat-nonliteral -Wmissing-braces -Wuninitialized \
                 -Wmissing-declarations  -Winline \
-                -Wmissing-prototypes -Wtraditional -Wredundant-decls -pedantic
+                -Wmissing-prototypes -Wtraditional -Wredundant-decls \
+                -Wformat-security -pedantic
 
 GCC_LINT_CFLAGS = $(BASE_CCFLAGS) $(CPPFLAGS) $(GCC_LINT_FLAGS)
 
@@ -232,7 +239,8 @@ SHLIB_SOURCE =      ${SH_LIBSRC}/clktck.c ${SH_LIBSRC}/getcwd.c \
                ${SH_LIBSRC}/fnxform.c ${SH_LIBSRC}/unicode.c \
                ${SH_LIBSRC}/wcswidth.c ${SH_LIBSRC}/wcsnwidth.c \
                ${SH_LIBSRC}/shmbchar.c ${SH_LIBSRC}/utf8.c \
-               ${SH_LIBSRC}/random.c ${SH_LIBSRC}/gettimeofday.c
+               ${SH_LIBSRC}/random.c ${SH_LIBSRC}/gettimeofday.c \
+               ${SH_LIBSRC}/timers.c ${SH_LIBSRC}/strvis.c
 
 SHLIB_LIB = -lsh
 SHLIB_LIBNAME = libsh.a
@@ -420,11 +428,12 @@ BASHINCFILES =     $(BASHINCDIR)/posixstat.h $(BASHINCDIR)/ansi_stdlib.h \
                 $(BASHINCDIR)/shtty.h $(BASHINCDIR)/typemax.h \
                 $(BASHINCDIR)/ocache.h
 
-LIBRARIES = $(GLOB_LIB) $(SHLIB_LIB) $(READLINE_LIB) $(HISTORY_LIB) $(TERMCAP_LIB) \
-           $(TILDE_LIB) $(MALLOC_LIB) $(INTL_LIB) $(LIBICONV) $(LOCAL_LIBS)
+LIBRARIES = $(GLOB_LIB) $(SHLIB_LIB) $(READLINE_LIB) $(HISTORY_LIB) \
+           $(TERMCAP_LIB) $(TILDE_LIB) $(MALLOC_LIB) $(INTL_LIB) $(LIBICONV) \
+           $(LOCAL_LIBS)
 
-LIBDEP = $(GLOB_DEP) $(SHLIB_DEP) $(INTL_DEP) $(READLINE_DEP) $(HISTORY_DEP) $(TERMCAP_DEP) \
-        $(TILDE_DEP) $(MALLOC_DEP)
+LIBDEP = $(GLOB_DEP) $(SHLIB_DEP) $(INTL_DEP) $(READLINE_DEP) $(HISTORY_DEP) \
+        $(TERMCAP_DEP) $(TILDE_DEP) $(MALLOC_DEP)
 
 LIBRARY_LDFLAGS = $(READLINE_LDFLAGS) $(HISTORY_LDFLAGS) $(GLOB_LDFLAGS) \
                  $(TILDE_LDFLAGS) $(MALLOC_LDFLAGS) $(SHLIB_LDFLAGS)
@@ -460,7 +469,8 @@ INSTALLED_HEADERS = shell.h bashjmp.h command.h syntax.h general.h error.h \
                    make_cmd.h subst.h sig.h externs.h builtins.h \
                    bashtypes.h xmalloc.h config-top.h config-bot.h \
                    bashintl.h bashansi.h bashjmp.h alias.h hashlib.h \
-                   conftypes.h unwind_prot.h jobs.h siglist.h
+                   conftypes.h unwind_prot.h jobs.h siglist.h \
+                   execute_cmd.h
 INSTALLED_BUILTINS_HEADERS = bashgetopt.h common.h getopt.h
 INSTALLED_INCFILES =    posixstat.h ansi_stdlib.h filecntl.h posixdir.h \
        memalloc.h stdc.h posixjmp.h posixwait.h posixtime.h systimes.h \
@@ -475,12 +485,14 @@ JOBS_O = @JOBS_O@
 SIGLIST_O = @SIGLIST_O@
 SIGNAMES_O = @SIGNAMES_O@
 
+ARRAY_O = @ARRAY_O@
+
 # Matching object files.
 OBJECTS         = shell.o eval.o y.tab.o general.o make_cmd.o print_cmd.o $(GLOBO) \
           dispose_cmd.o execute_cmd.o variables.o copy_cmd.o error.o \
           expr.o flags.o $(JOBS_O) subst.o hashcmd.o hashlib.o mailcheck.o \
           trap.o input.o unwind_prot.o pathexp.o sig.o test.o version.o \
-          alias.o array.o arrayfunc.o assoc.o braces.o bracecomp.o bashhist.o \
+          alias.o $(ARRAY_O) arrayfunc.o assoc.o braces.o bracecomp.o bashhist.o \
           bashline.o $(SIGLIST_O) list.o stringlib.o locale.o findcmd.o redir.o \
           pcomplete.o pcomplib.o syntax.o xmalloc.o $(SIGNAMES_O)
 
@@ -560,7 +572,7 @@ CREATED_MAKEFILES = Makefile builtins/Makefile doc/Makefile \
                    lib/readline/Makefile lib/glob/Makefile \
                    lib/sh/Makefile lib/tilde/Makefile lib/malloc/Makefile \
                    lib/termcap/Makefile examples/loadables/Makefile \
-                   examples/loadables/Makefile.inc \
+                   examples/loadables/Makefile.inc examples/loadables/Makefile.sample \
                    examples/loadables/perl/Makefile support/Makefile \
                    lib/intl/Makefile po/Makefile po/Makefile.in
 CREATED_HEADERS = signames.h config.h pathnames.h version.h y.tab.h \
@@ -578,13 +590,13 @@ LOADABLES_DIR = ${top_builddir}/examples/loadables
 .made: $(Program) bashbug $(SDIR)/man2html$(EXEEXT)
        @echo "$(Program) last made for a $(Machine) running $(OS)" >.made
 
-$(Program):  .build $(OBJECTS) $(BUILTINS_DEP) $(LIBDEP)
+$(Program): $(OBJECTS) $(BUILTINS_DEP) $(LIBDEP) .build
        $(RM) $@
        $(PURIFY) $(CC) $(BUILTINS_LDFLAGS) $(LIBRARY_LDFLAGS) $(LDFLAGS) -o $(Program) $(OBJECTS) $(LIBS)
        ls -l $(Program)
        -$(SIZE) $(Program)
 
-.build:        $(SOURCES) config.h Makefile version.h $(VERSPROG)
+.build:        $(SOURCES) config.h Makefile $(DEFDIR)/builtext.h version.h $(VERSPROG)
        @echo
        @echo "   ***********************************************************"
        @echo "   *                                                         *"
@@ -604,16 +616,18 @@ strip:    $(Program) .made
        -$(SIZE) $(Program)
 
 lint:
-       ${MAKE} ${MFLAGS} CFLAGS='${GCC_LINT_FLAGS}' .made
+       ${MAKE} ${MFLAGS} ADDON_CFLAGS='${GCC_LINT_FLAGS}' .made
 
 asan:
        ${MAKE} ${MFLAGS} ADDON_CFLAGS='${ASAN_XCFLAGS}' ADDON_LDFLAGS='${ASAN_XLDFLAGS}' .made
 
+valgrind:
+       ${MAKE} ${MFLAGS} ADDON_CFLAGS='-DDISABLE_MALLOC_WRAPPERS' ADDON_LDFLAGS= .made
+
 # cheating
 gcov:
        ${MAKE} ${MFLAGS} CFLAGS=-g ADDON_CFLAGS='${GCOV_XCFLAGS}' ADDON_LDFLAGS='${GCOV_XLDFLAGS}' .made
 
-
 # have to make this separate because making tests depend on $(PROGRAM)
 asan-tests: asan  $(TESTS_SUPPORT)
        @-test -d tests || mkdir tests
@@ -649,6 +663,7 @@ ${GRAM_H}:  y.tab.h
 y.tab.c: parse.y
 #      -if test -f y.tab.h; then mv -f y.tab.h old-y.tab.h; fi
        $(YACC) -d $(srcdir)/parse.y
+       $(RM) parser-built
        touch parser-built
 #      -if cmp -s old-y.tab.h y.tab.h; then mv old-y.tab.h y.tab.h; else cp -p y.tab.h ${GRAM_H}; fi
 
@@ -733,7 +748,7 @@ syntax.c:   mksyntax${EXEEXT} $(srcdir)/syntax.h
        $(RM) $@
        ./mksyntax$(EXEEXT) -o $@
 
-$(BUILTINS_LIBRARY): $(BUILTIN_DEFS) $(BUILTIN_C_SRC) config.h ${BASHINCDIR}/memalloc.h $(DEFDIR)/builtext.h version.h
+$(BUILTINS_LIBRARY): $(DEFDIR)/builtext.h $(BUILTIN_DEFS) $(BUILTIN_C_SRC) config.h ${BASHINCDIR}/memalloc.h  version.h
        @(cd $(DEFDIR) && $(MAKE) $(MFLAGS) DEBUG=${DEBUG} targets ) || exit 1
 
 # these require special rules to circumvent make builtin rules
@@ -746,7 +761,7 @@ ${DEFDIR}/bashgetopt.o:     $(BUILTIN_SRCDIR)/bashgetopt.c
 ${DEFDIR}/builtext.h: $(BUILTIN_DEFS)
        @(cd $(DEFDIR) && $(MAKE) $(MFLAGS) builtext.h ) || exit 1
 
-${DEFDIR}/pipesize.h:
+${DEFDIR}/pipesize.h:  ${BUILTINS_LIBRARY}
        @(cd $(DEFDIR) && $(MAKE) $(MFLAGS) pipesize.h ) || exit 1
 
 $(SDIR)/man2html$(EXEEXT):     ${SUPPORT_SRC}/man2html.c
@@ -807,10 +822,10 @@ force:
 
 # unused
 TAGS:  $(SOURCES) $(BUILTIN_C_SRC) $(LIBRARY_SOURCE)
-       etags $(SOURCES) $(BUILTIN_C_SRC) $(LIBRARY_SOURCE)
+       ( cd $(topdir) && $(ETAGS) $(ETAGSFLAGS) $(SOURCES) $(BUILTIN_C_SRC) $(LIBRARY_SOURCE) )
 
 tags:  $(SOURCES) $(BUILTIN_C_SRC) $(LIBRARY_SOURCE)
-       ctags -x $(SOURCES) $(BUILTIN_C_SRC) $(LIBRARY_SOURCE) > $@
+       ( cd $(topdir) && $(CTAGS) $(CTAGSFLAGS) $(SOURCES) $(BUILTIN_C_SRC) $(LIBRARY_SOURCE) > $@ )
 
 # Targets that actually do things not part of the build
 
@@ -986,6 +1001,7 @@ hashtest:  hashlib.c
 # Files that depend on the definitions in config-top.h, which are not meant
 # to be changed
 array.o: $(srcdir)/config-top.h
+array2.o: $(srcdir)/config-top.h
 bashhist.o: $(srcdir)/config-top.h
 shell.o: $(srcdir)/config-top.h
 input.o: $(srcdir)/config-top.h
@@ -1204,7 +1220,7 @@ trap.o: general.h xmalloc.h bashtypes.h variables.h arrayfunc.h conftypes.h arra
 trap.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h parser.h
 trap.o: make_cmd.h subst.h sig.h pathnames.h externs.h execute_cmd.h
 trap.o: signames.h $(DEFSRC)/common.h
-trap.o: ${DEFDIR}/builtext.h jobs.h
+trap.o: ${DEFDIR}/builtext.h builtins.h jobs.h
 unwind_prot.o: config.h bashtypes.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h command.h ${BASHINCDIR}/stdc.h
 unwind_prot.o: general.h xmalloc.h unwind_prot.h quit.h sig.h
 unwind_prot.o: ${BASHINCDIR}/ocache.h ${BASHINCDIR}/chartypes.h error.h
@@ -1249,6 +1265,13 @@ array.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
 array.o: make_cmd.h subst.h sig.h pathnames.h externs.h 
 array.o: $(BASHINCDIR)/ocache.h $(BASHINCDIR)/chartypes.h
 array.o: $(DEFSRC)/common.h
+array2.o: config.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h
+array2.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
+array2.o: general.h xmalloc.h bashtypes.h variables.h arrayfunc.h conftypes.h array.h hashlib.h
+array2.o: quit.h ${BASHINCDIR}/maxpath.h unwind_prot.h dispose_cmd.h
+array2.o: make_cmd.h subst.h sig.h pathnames.h externs.h 
+array2.o: $(BASHINCDIR)/ocache.h $(BASHINCDIR)/chartypes.h
+array2.o: $(DEFSRC)/common.h
 arrayfunc.o: config.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h
 arrayfunc.o: shell.h syntax.h config.h bashjmp.h ${BASHINCDIR}/posixjmp.h command.h ${BASHINCDIR}/stdc.h error.h
 arrayfunc.o: general.h xmalloc.h bashtypes.h variables.h arrayfunc.h conftypes.h array.h hashlib.h
@@ -1281,18 +1304,24 @@ alias.o: ${BASHINCDIR}/chartypes.h
 
 pcomplib.o: config.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h bashtypes.h
 pcomplib.o: ${BASHINCDIR}/stdc.h hashlib.h pcomplete.h shell.h syntax.h
-pcomplib.o: bashjmp.h command.h general.h xmalloc.h error.h variables.h arrayfunc.h conftypes.h quit.h
+pcomplib.o: bashjmp.h command.h general.h xmalloc.h error.h variables.h
+pcomplib.o: arrayfunc.h conftypes.h quit.h
 pcomplib.o: unwind_prot.h dispose_cmd.h make_cmd.h subst.h sig.h pathnames.h
 pcomplib.o: externs.h ${BASHINCDIR}/maxpath.h assoc.h array.h
 pcomplib.o: ${BASHINCDIR}/posixjmp.h ${BASHINCDIR}/ocache.h ${BASHINCDIR}/chartypes.h
 
 pcomplete.o: config.h bashansi.h ${BASHINCDIR}/ansi_stdlib.h bashtypes.h
 pcomplete.o: ${BASHINCDIR}/stdc.h hashlib.h pcomplete.h shell.h syntax.h
-pcomplete.o: bashjmp.h command.h general.h xmalloc.h error.h variables.h arrayfunc.h conftypes.h quit.h
+pcomplete.o: bashjmp.h command.h general.h xmalloc.h error.h variables.h
+pcomplete.o: execute_cmd.h pathexp.h arrayfunc.h conftypes.h quit.h trap.h
+pcomplete.o: jobs.h siglist.h bashline.h alias.h
+pcomplete.o: ${BASHINCDIR}/posixwait.h ${BASHINCDIR}/unionwait.h
+pcomplete.o: ${BASHINCDIR}/posixtime.h ${BASHINCDIR}/posixstat.h
 pcomplete.o: unwind_prot.h dispose_cmd.h make_cmd.h subst.h sig.h pathnames.h
 pcomplete.o: externs.h ${BASHINCDIR}/maxpath.h execute_cmd.h 
 pcomplete.o: ${BASHINCDIR}/shmbutil.h ${BASHINCDIR}/shmbchar.h
-pcomplete.o: ${DEFDIR}/builtext.h
+pcomplete.o: builtins.h ${DEFDIR}/builtext.h ${DEFSRC}/common.h
+pcomplete.o: ${GLOB_LIBSRC}/glob.h ${GLOB_LIBSRC}/strmatch.h
 
 # library support files
 
@@ -1350,6 +1379,10 @@ variables.o: $(RL_LIBSRC)/rltypedefs.h
 jobs.o: $(RL_LIBSRC)/keymaps.h $(RL_LIBSRC)/chardefs.h
 jobs.o: $(RL_LIBSRC)/readline.h $(RL_LIBSRC)/rlstdc.h
 jobs.o: $(RL_LIBSRC)/rltypedefs.h
+pcomplete.o: $(RL_LIBSRC)/rlconf.h
+pcomplete.o: $(RL_LIBSRC)/keymaps.h $(RL_LIBSRC)/rlstdc.h
+pcomplete.o: $(RL_LIBSRC)/chardefs.h $(RL_LIBSRC)/readline.h
+pcomplete.o: $(RL_LIBSRC)/rltypedefs.h ${RL_LIBSRC}/rlmbutil.h
 
 shell.o: $(HIST_LIBSRC)/history.h $(HIST_LIBSRC)/rlstdc.h
 variables.o: $(HIST_LIBSRC)/history.h $(HIST_LIBSRC)/rlstdc.h
@@ -1357,12 +1390,14 @@ subst.o: $(HIST_LIBSRC)/history.h $(HIST_LIBSRC)/rlstdc.h
 bashline.o: $(HIST_LIBSRC)/history.h $(HIST_LIBSRC)/rlstdc.h
 bashhist.o: $(HIST_LIBSRC)/history.h $(HIST_LIBSRC)/rlstdc.h
 y.tab.o: $(HIST_LIBSRC)/history.h $(HIST_LIBSRC)/rlstdc.h
+pcomplete.o: $(HIST_LIBSRC)/history.h $(HIST_LIBSRC)/rlstdc.h
 
 bashline.o: $(TILDE_LIBSRC)/tilde.h
 bracecomp.o: $(TILDE_LIBSRC)/tilde.h
 execute_cmd.o: $(TILDE_LIBSRC)/tilde.h
 general.o: $(TILDE_LIBSRC)/tilde.h
 mailcheck.o: $(TILDE_LIBSRC)/tilde.h
+pcomplete.o: $(TILDE_LIBSRC)/tilde.h
 shell.o: $(TILDE_LIBSRC)/tilde.h
 subst.o: $(TILDE_LIBSRC)/tilde.h
 variables.o: $(TILDE_LIBSRC)/tilde.h
@@ -1435,7 +1470,7 @@ builtins/evalstring.o: ${BASHINCDIR}/memalloc.h variables.h arrayfunc.h conftype
 builtins/evalstring.o: quit.h unwind_prot.h ${BASHINCDIR}/maxpath.h jobs.h builtins.h
 builtins/evalstring.o: dispose_cmd.h make_cmd.h subst.h externs.h 
 builtins/evalstring.o: jobs.h builtins.h flags.h input.h execute_cmd.h
-builtins/evalstring.o: bashhist.h $(DEFSRC)/common.h pathnames.h
+builtins/evalstring.o: bashhist.h $(DEFSRC)/common.h pathnames.h redir.h
 builtins/evalstring.o: ${DEFDIR}/builtext.h
 builtins/getopt.o: config.h ${BASHINCDIR}/memalloc.h
 builtins/getopt.o: shell.h syntax.h bashjmp.h command.h general.h xmalloc.h error.h
@@ -1486,6 +1521,7 @@ builtins/declare.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.
 builtins/declare.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h arrayfunc.h conftypes.h quit.h
 builtins/declare.o: dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
 builtins/declare.o: $(DEFSRC)/bashgetopt.h pathnames.h flags.h
+builtins/declare.o: ${DEFDIR}/builtext.h
 builtins/echo.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h xmalloc.h ${BASHINCDIR}/maxpath.h
 builtins/echo.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h arrayfunc.h conftypes.h quit.h
 builtins/echo.o: dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
@@ -1510,6 +1546,7 @@ builtins/exit.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h x
 builtins/exit.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h arrayfunc.h conftypes.h quit.h
 builtins/exit.o: dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
 builtins/exit.o: pathnames.h execute_cmd.h
+builtins/exit.o: ${DEFDIR}/builtext.h
 builtins/fc.o: bashtypes.h ${BASHINCDIR}/posixstat.h
 builtins/fc.o: bashansi.h ${BASHINCDIR}/ansi_stdlib.h builtins.h command.h ${BASHINCDIR}/stdc.h 
 builtins/fc.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h xmalloc.h ${BASHINCDIR}/maxpath.h
@@ -1568,6 +1605,7 @@ builtins/pushd.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h
 builtins/pushd.o: quit.h dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
 builtins/pushd.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h arrayfunc.h conftypes.h
 builtins/pushd.o: $(DEFSRC)/common.h pathnames.h
+builtins/pushd.o: ${DEFDIR}/builtext.h
 builtins/read.o: command.h config.h ${BASHINCDIR}/memalloc.h error.h general.h xmalloc.h ${BASHINCDIR}/maxpath.h
 builtins/read.o: quit.h dispose_cmd.h make_cmd.h subst.h externs.h ${BASHINCDIR}/stdc.h
 builtins/read.o: shell.h syntax.h bashjmp.h ${BASHINCDIR}/posixjmp.h sig.h unwind_prot.h variables.h arrayfunc.h conftypes.h 
diff --git a/NEWS b/NEWS
index a6170be85e271dcce97f3032dac1ce264c347c2d..62d22127fcad336e59c5e5067567d5912ff5b8a9 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,174 @@
+This is a terse description of the new features added to bash-5.2 since
+the release of bash-5.1.  As always, the manual page (doc/bash.1) is
+the place to look for complete descriptions.
+
+1. New Features in Bash
+
+a. The bash malloc returns memory that is aligned on 16-byte boundaries.
+
+b. There is a new internal timer framework used for read builtin timeouts.
+
+c. Rewrote the command substitution parsing code to call the parser recursively
+   and rebuild the command string from the parsed command. This allows better
+   syntax checking and catches errors much earlier. Along with this, if
+   command substitution parsing completes with here-documents remaining to be
+   read, the shell prints a warning message and reads the here-document bodies
+   from the current input stream.
+
+d. The `ulimit' builtin now treats an operand remaining after all of the options
+   and arguments are parsed as an argument to the last command specified by
+   an option. This is for POSIX compatibility.
+
+e. Here-document parsing now handles $'...' and $"..." quoting when reading the
+   here-document body.
+
+f. The `shell-expand-line' and `history-and-alias-expand-line' bindable readline
+   commands now understand $'...' and $"..." quoting.
+
+g. There is a new `spell-correct-word' bindable readline command to perform
+   spelling correction on the current word.
+
+h. The `unset' builtin now attempts to treat arguments as array subscripts
+   without parsing or expanding the subscript, even when `assoc_expand_once'
+   is not set.
+
+i. There is a default value for $BASH_LOADABLES_PATH in config-top.h.
+
+j. Associative array assignment and certain instances of referencing (e.g.,
+   `test -v' now allow `@' and `*' to be used as keys.
+
+k. Bash attempts to expand indexed array subscripts only once when executing
+   shell constructs and word expansions.
+
+l. The `unset' builtin allows a subscript of `@' or `*' to unset a key with
+   that value for associative arrays instead of unsetting the entire array
+   (which you can still do with `unset arrayname'). For indexed arrays, it
+   removes all elements of the array without unsetting it (like `A=()').
+
+m. Additional builtins (printf/test/read/wait) do a better job of not
+   parsing array subscripts if array_expand_once is set.
+
+n. New READLINE_ARGUMENT variable set to numeric argument for readline commands
+   defined using `bind -x'.
+
+o. The new `varredir_close' shell option causes bash to automatically close
+   file descriptors opened with {var}<fn and other styles of varassign
+   redirection unless they're arguments to the `exec' builtin.
+
+p. The `$0' special parameter is now set to the name of the script when running
+   any (non-interactive) startup files such as $BASH_ENV.
+
+q. The `enable' builtin tries to load a loadable builtin using the default
+   search path if `enable name' (without any options) attempts to enable a
+   non-existent builtin.
+
+r. The `printf' builtin has a new format specifier: %Q. This acts like %q but
+   applies any specified precision to the original unquoted argument, then
+   quotes and outputs the result.
+
+s. The new `noexpand_translations' option controls whether or not the translated
+   output of $"..." is single-quoted.
+
+t. There is a new parameter transformation operator: @k. This is like @K, but
+   expands the result to separate words after word splitting.
+
+u. There is an alternate array implementation, selectable at `configure' time,
+   that optimizes access speed over memory use (use the new configure
+    --enable-alt-array-implementation option).
+
+v. If an [N]<&WORD- or [N]>&WORD- redirection has WORD expand to the empty
+   string, treat the redirection as [N]<&- or [N]>&- and close file descriptor
+   N (default 0).
+
+w. Invalid parameter transformation operators are now invalid word expansions,
+   and so cause fatal errors in non-interactive shells.
+
+x. New shell option: patsub_replacement. When enabled, a `&' in the replacement
+   string of the pattern substitution expansion is replaced by the portion of
+   the string that matched the pattern. Backslash will escape the `&' and
+   insert a literal `&'.
+
+y. `command -p' no longer looks in the hash table for the specified command.
+
+z. The new `--enable-translatable-strings' option to `configure' allows $"..."
+   support to be compiled in or out.
+
+aa. The new `globskipdots' shell option forces pathname expansion never to
+    return `.' or `..' unless explicitly matched. It is enabled by default.
+
+bb. Array references using `@' and `*' that are the value of nameref variables
+    (declare -n ref='v[@]' ; echo $ref) no longer cause the shell to exit if
+    set -u is enabled and the array (v) is unset.
+
+cc. There is a new bindable readline command name:
+    `vi-edit-and-execute-command'.
+
+dd. In posix mode, the `printf' builtin checks for the `L' length modifier and
+    uses long double for floating point conversion specifiers if it's present,
+    double otherwise.
+
+ee. The `globbing' completion code now takes the `globstar' option into account.
+
+ff. `suspend -f' now forces the shell to suspend even if job control is not
+   currently enabled.
+
+gg. Since there is no `declare -' equivalent of `local -', make sure to use
+    `local -' in the output of `local -p'.
+
+2. New Features in Readline
+
+a. There is now an HS_HISTORY_VERSION containing the version number of the
+   history library for applications to use.
+
+b. History expansion better understands multiple history expansions that may
+   contain strings that would ordinarily inhibit history expansion (e.g.,
+   `abc!$!$').
+
+c. There is a new framework for readline timeouts, including new public
+   functions to set timeouts and query how much time is remaining before a
+   timeout hits, and a hook function that can trigger when readline times
+   out. There is a new state value to indicate a timeout.
+
+d. Automatically bind termcap key sequences for page-up and page-down to
+   history-search-backward and history-search-forward, respectively.
+
+e. There is a new `fetch-history' bindable command that retrieves the history
+   entry corresponding to its numeric argument. Negative arguments count back
+   from the end of the history.
+
+f. `vi-undo' is now a bindable command.
+
+g. There is a new option: `enable-active-region'. This separates control of
+   the active region and bracketed-paste. It has the same default value as
+   bracketed-paste, and enabling bracketed paste enables the active region.
+   Users can now turn off the active region while leaving bracketed paste
+   enabled.
+
+h. rl_completer_word_break_characters is now `const char *' like
+   rl_basic_word_break_characters.
+
+i. Readline looks in $LS_COLORS for a custom filename extension
+   (*.readline-colored-completion-prefix) and uses that as the default color
+   for the common prefix displayed when `colored-completion-prefix' is set.
+
+j. Two new bindable string variables: active-region-start-color and
+   active-region-end-color. The first sets the color used to display the
+   active region; the second turns it off. If set, these are used in place
+   of terminal standout mode.
+
+k. New readline state (RL_STATE_EOF) and application-visible variable
+   (rl_eof_found) to allow applications to detect when readline reads EOF
+   before calling the deprep-terminal hook.
+
+l. There is a new configuration option: --with-shared-termcap-library, which
+   forces linking the shared readline library with the shared termcap (or
+   curses/ncurses/termlib) library so applications don't have to do it.
+
+m. Readline now checks for changes to locale settings (LC_ALL/LC_CTYPE/LANG)
+   each time it is called, and modifies the appropriate locale-specific display
+   and key binding variables when the locale changes.
+
+-------------------------------------------------------------------------------
 This is a terse description of the new features added to bash-5.1 since
 the release of bash-5.0.  As always, the manual page (doc/bash.1) is
 the place to look for complete descriptions.
@@ -916,7 +1087,7 @@ l.  There is a new configuration option (in config-top.h) that forces bash to
 m.  A new variable $BASHOPTS to export shell options settable using `shopt' to
     child processes.
 
-n.  There is a new confgure option that forces the extglob option to be
+n.  There is a new configure option that forces the extglob option to be
     enabled by default.
 
 o.  New variable $BASH_XTRACEFD; when set to an integer bash will write xtrace
@@ -963,7 +1134,7 @@ d.  New bindable function: skip-csi-sequence.  Can be used as a default to
     to bind all keys.
 
 e.  New application-settable function: rl_filename_rewrite_hook.  Can be used
-    to rewite or modify filenames read from the file system before they are
+    to rewrite or modify filenames read from the file system before they are
     compared to the word to be completed.
 
 f.  New bindable variable: skip-completed-text, active when completing in the
diff --git a/POSIX b/POSIX
index 24114af144cc811ef999cd456fd4531a9df60d28..4e78dbb751dbf5cb5bd3dcf91f5ad1889d48df67 100644 (file)
--- a/POSIX
+++ b/POSIX
@@ -33,203 +33,219 @@ The following list is what's changed when 'POSIX mode' is in effect:
   7. Reserved words appearing in a context where reserved words are
      recognized do not undergo alias expansion.
 
-  8. The POSIX 'PS1' and 'PS2' expansions of '!' to the history number
+  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.
 
-  9. The POSIX startup files are executed ('$ENV') rather than the
+  10. The POSIX startup files are executed ('$ENV') rather than the
      normal Bash files.
 
-  10. Tilde expansion is only performed on assignments preceding a
+  11. Tilde expansion is only performed on assignments preceding a
      command name, rather than on all assignment statements on the line.
 
-  11. The default history file is '~/.sh_history' (this is the default
+  12. The default history file is '~/.sh_history' (this is the default
      value of '$HISTFILE').
 
-  12. Redirection operators do not perform filename expansion on the
+  13. Redirection operators do not perform filename expansion on the
      word in the redirection unless the shell is interactive.
 
-  13. Redirection operators do not perform word splitting on the word in
+  14. Redirection operators do not perform word splitting on the word in
      the redirection.
 
-  14. Function names must be valid shell 'name's.  That is, they may not
+  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.
 
-  15. Function names may not be the same as one of the POSIX special
+  16. Function names may not be the same as one of the POSIX special
      builtins.
 
-  16. POSIX special builtins are found before shell functions during
+  17. POSIX special builtins are found before shell functions during
      command lookup.
 
-  17. When printing shell function definitions (e.g., by 'type'), Bash
+  18. When printing shell function definitions (e.g., by 'type'), Bash
      does not print the 'function' keyword.
 
-  18. Literal tildes that appear as the first character in elements of
+  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::.
 
-  19. The 'time' reserved word may be used by itself as a command.  When
+  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.
 
-  20. When parsing and expanding a ${...} expansion that appears within
+  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.
 
-  21. The parser does not recognize 'time' as a reserved word if the
+  22. The parser does not recognize 'time' as a reserved word if the
      next token begins with a '-'.
 
-  22. The '!' character does not introduce history expansion within a
+  23. The '!' character does not introduce history expansion within a
      double-quoted string, even if the 'histexpand' option is enabled.
 
-  23. If a POSIX special builtin returns an error status, a
+  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.
 
-  24. A non-interactive shell exits with an error status if a variable
+  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.
 
-  25. A non-interactive shell exits with an error status if a 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.
+     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").
 
-  26. A non-interactive shell exits with an error status if the
+  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.
 
-  27. Non-interactive shells exit if FILENAME in '.'  FILENAME is not
+  28. Non-interactive shells exit if FILENAME in '.'  FILENAME is not
      found.
 
-  28. Non-interactive shells exit if a syntax error in an arithmetic
+  29. Non-interactive shells exit if a syntax error in an arithmetic
      expansion results in an invalid expression.
 
-  29. Non-interactive shells exit if a parameter expansion error occurs.
+  30. Non-interactive shells exit if a parameter expansion error occurs.
 
-  30. Non-interactive shells exit if there is a syntax error in a script
+  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.
 
-  31. While variable indirection is available, it may not be applied to
+  32. While variable indirection is available, it may not be applied to
      the '#' and '?' special parameters.
 
-  32. When expanding the '*' special parameter in a pattern context
-     where the expansion is double-quoted does not treat the '$*' as if
-     it were double-quoted.
+  33. Expanding the '*' special parameter in a pattern context where the
+     expansion is double-quoted does not treat the '$*' as if it were
+     double-quoted.
 
-  33. Assignment statements preceding POSIX special builtins persist in
+  34. Assignment statements preceding POSIX special builtins persist in
      the shell environment after the builtin completes.
 
-  34. The 'command' builtin does not prevent builtins that take
+  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'.
 
-  35. The 'bg' builtin uses the required format to describe each job
+  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.
 
-  36. The output of 'kill -l' prints all the signal names on a single
+  37. The output of 'kill -l' prints all the signal names on a single
      line, separated by spaces, without the 'SIG' prefix.
 
-  37. The 'kill' builtin does not accept signal names with a 'SIG'
+  38. The 'kill' builtin does not accept signal names with a 'SIG'
      prefix.
 
-  38. The 'export' and 'readonly' builtin commands display their output
+  39. The 'export' and 'readonly' builtin commands display their output
      in the format required by POSIX.
 
-  39. The 'trap' builtin displays signal names without the leading
+  40. The 'trap' builtin displays signal names without the leading
      'SIG'.
 
-  40. The 'trap' builtin doesn't check the first argument for a possible
+  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.
 
-  41. 'trap -p' displays signals whose dispositions are set to SIG_DFL
+  42. 'trap -p' displays signals whose dispositions are set to SIG_DFL
      and those that were ignored when the shell started.
 
-  42. The '.' and 'source' builtins do not search the current directory
+  43. The '.' and 'source' builtins do not search the current directory
      for the filename argument if it is not found by searching 'PATH'.
 
-  43. Enabling POSIX mode has the effect of setting the
+  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.
 
-  44. Enabling POSIX mode has the effect of setting the 'shift_verbose'
+  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.
 
-  45. When the 'alias' builtin displays alias definitions, it does not
+  46. When the 'alias' builtin displays alias definitions, it does not
      display them with a leading 'alias ' unless the '-p' option is
      supplied.
 
-  46. When the 'set' builtin is invoked without options, it does not
+  47. When the 'set' builtin is invoked without options, it does not
      display shell function names and definitions.
 
-  47. When the 'set' builtin is invoked without options, it displays
+  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.
 
-  48. When the 'cd' builtin is invoked in LOGICAL mode, and the pathname
+  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.
+     instead of falling back to physical mode.
 
-  49. When the 'cd' builtin cannot change a directory because the length
+  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
+     supplied as an argument exceeds 'PATH_MAX' when all symbolic links
      are expanded, 'cd' will fail instead of attempting to use only the
      supplied directory name.
 
-  50. The 'pwd' builtin verifies that the value it prints is the same as
+  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.
 
-  51. When listing the history, the 'fc' builtin does not include an
+  52. When listing the history, the 'fc' builtin does not include an
      indication of whether or not a history entry has been modified.
 
-  52. The default editor used by 'fc' is 'ed'.
+  53. The default editor used by 'fc' is 'ed'.
 
-  53. The 'type' and 'command' builtins will not report a non-executable
+  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'.
 
-  54. The 'vi' editing mode will invoke the 'vi' editor directly when
+  55. The 'vi' editing mode will invoke the 'vi' editor directly when
      the 'v' command is run, instead of checking '$VISUAL' and
      '$EDITOR'.
 
-  55. When the 'xpg_echo' option is enabled, Bash does not attempt to
+  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.
 
-  56. The 'ulimit' builtin uses a block size of 512 bytes for the '-c'
+  57. The 'ulimit' builtin uses a block size of 512 bytes for the '-c'
      and '-f' options.
 
-  57. The arrival of 'SIGCHLD' when a trap is set on 'SIGCHLD' does not
+  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.
 
-  58. The 'read' builtin may be interrupted by a signal for which a trap
+  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.
 
-  59. Bash removes an exited background process's status from the list
+  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
diff --git a/RBASH b/RBASH
index 9732c769c3537afb9179a0d6886cd45fc56cf795..7d0a5e8d1d3ed5952fd7c3480524513d7499e47b 100644 (file)
--- a/RBASH
+++ b/RBASH
@@ -29,7 +29,8 @@ with the exception that the following are disallowed or not performed:
    * Using the 'enable' builtin command to enable disabled shell
      builtins.
    * Specifying the '-p' option to the 'command' builtin.
-   * Turning off restricted mode with 'set +r' or 'set +o restricted'.
+   * Turning off restricted mode with 'set +r' or 'shopt -u
+     restricted_shell'.
 
 These restrictions are enforced after any startup files are read.
 
@@ -40,10 +41,10 @@ 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), leaving the user in a
-non-writable directory other than his home directory after login, not
-allowing the restricted shell to execute shell scripts, and cleaning the
-environment of variables that cause some commands to modify their
+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
diff --git a/README b/README
index 70b7a8517415c2fcf324693ee33aca429fd99977..90d0be5bfb5a0fffdd7537396b95d660371f4c36 100644 (file)
--- a/README
+++ b/README
@@ -1,7 +1,7 @@
 Introduction
 ============
 
-This is GNU Bash, version 5.1.  Bash is the GNU Project's Bourne
+This is GNU Bash, version 5.2. Bash is the GNU Project's Bourne
 Again SHell, a complete implementation of the POSIX shell spec,
 but also with interactive command line editing, job control on
 architectures that support it, csh-like features such as history
@@ -15,8 +15,8 @@ See the file POSIX for a discussion of how the Bash defaults differ
 from the POSIX spec and a description of the Bash `posix mode'.
 
 There are some user-visible incompatibilities between this version
-of Bash and previous widely-distributed versions, bash-4.4 and
-bash-5.0.  For details, see the file COMPAT.  The NEWS file tersely
+of Bash and previous widely-distributed versions, bash-4.4, bash-5.0,
+and bash-5.1. For details, see the file COMPAT.  The NEWS file tersely
 lists features that are new in this release. 
 
 Bash is free software, distributed under the terms of the [GNU] General
@@ -25,7 +25,7 @@ version 3 of the License (or any later version).  For more information,
 see the file COPYING. 
 
 A number of frequently-asked questions are answered in the file
-`doc/FAQ'.
+`doc/FAQ'. (That file is no longer updated.)
 
 To compile Bash, type `./configure', then `make'.  Bash auto-configures
 the build process, so no further intervention should be necessary.  Bash
@@ -94,12 +94,13 @@ Other Packages
 This distribution includes, in examples/bash-completion, a recent version
 of the `bash-completion' package, which provides programmable completions
 for a number of commands. It's available as a package in many distributions,
-and that is the first place from which to obtain it. If it's not a package
-from your vendor, you may install the included version.
+and that is the first place from which to obtain it.
 
 The latest version of bash-completion is always available from
 https://github.com/scop/bash-completion.
 
+If it's not a package from your vendor, you may install the included version.
+
 Enjoy!
 
 Chet Ramey
index 6899e8202ae191a98c74db831d3baac4793b2b48..cc97bd4b8461528958dbd009c7c563aa97945527 100644 (file)
@@ -3,55 +3,8 @@ dnl Bash specific tests
 dnl
 dnl Some derived from PDKSH 5.1.3 autoconf tests
 dnl
-
-AC_DEFUN(BASH_C_LONG_LONG,
-[AC_CACHE_CHECK(for long long, ac_cv_c_long_long,
-[if test "$GCC" = yes; then
-  ac_cv_c_long_long=yes
-else
-AC_TRY_RUN([
-#include <stdlib.h>
-int
-main()
-{
-long long foo = 0;
-exit(sizeof(long long) < sizeof(long));
-}
-], ac_cv_c_long_long=yes, ac_cv_c_long_long=no)
-fi])
-if test $ac_cv_c_long_long = yes; then
-  AC_DEFINE(HAVE_LONG_LONG, 1, [Define if the `long long' type works.])
-fi
-])
-
+dnl Copyright (C) 1987-2021 Free Software Foundation, Inc.
 dnl
-dnl This is very similar to AC_C_LONG_DOUBLE, with the fix for IRIX
-dnl (< changed to <=) added.
-dnl
-AC_DEFUN(BASH_C_LONG_DOUBLE,
-[AC_CACHE_CHECK(for long double, ac_cv_c_long_double,
-[if test "$GCC" = yes; then
-  ac_cv_c_long_double=yes
-else
-AC_TRY_RUN([
-#include <stdlib.h>
-int
-main()
-{
-  /* The Stardent Vistra knows sizeof(long double), but does not
-     support it. */
-  long double foo = 0.0;
-  /* On Ultrix 4.3 cc, long double is 4 and double is 8.  */
-  /* On IRIX 5.3, the compiler converts long double to double with a warning,
-     but compiles this successfully. */
-  exit(sizeof(long double) <= sizeof(double));
-}
-], ac_cv_c_long_double=yes, ac_cv_c_long_double=no)
-fi])
-if test $ac_cv_c_long_double = yes; then
-  AC_DEFINE(HAVE_LONG_DOUBLE, 1, [Define if the `long double' type works.])
-fi
-])
 
 dnl
 dnl Check for <inttypes.h>.  This is separated out so that it can be
@@ -72,13 +25,14 @@ dnl
 dnl BASH_CHECK_TYPE(TYPE, HEADERS, DEFAULT[, VALUE-IF-FOUND])
 AC_DEFUN(BASH_CHECK_TYPE,
 [
-AC_REQUIRE([AC_HEADER_STDC])dnl
 AC_REQUIRE([BASH_HEADER_INTTYPES])
 AC_MSG_CHECKING(for $1)
 AC_CACHE_VAL(bash_cv_type_$1,
 [AC_EGREP_CPP($1, [#include <sys/types.h>
-#if STDC_HEADERS
+#if HAVE_STDLIB_H
 #include <stdlib.h>
+#endif
+#if HAVE_STDDEF_H
 #include <stddef.h>
 #endif
 #if HAVE_INTTYPES_H
@@ -106,32 +60,14 @@ dnl AC_CHECK_DECL
 dnl
 AC_DEFUN(BASH_CHECK_DECL,
 [
-AC_REQUIRE([AC_HEADER_STDC])
 AC_REQUIRE([BASH_HEADER_INTTYPES])
-AC_CACHE_CHECK([for declaration of $1], bash_cv_decl_$1,
-[AC_TRY_LINK(
-[
-#if STDC_HEADERS
-#  include <stdlib.h>
-#endif
-#if HAVE_INTTYPES_H
-#  include <inttypes.h>
-#endif
-],
-[return !$1;],
-bash_cv_decl_$1=yes, bash_cv_decl_$1=no)])
-bash_tr_func=HAVE_DECL_`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
-if test $bash_cv_decl_$1 = yes; then
-  AC_DEFINE_UNQUOTED($bash_tr_func, 1)
-else
-  AC_DEFINE_UNQUOTED($bash_tr_func, 0)
-fi
+AC_CHECK_DECLS([$1])
 ])
 
 AC_DEFUN(BASH_DECL_PRINTF,
 [AC_MSG_CHECKING(for declaration of printf in <stdio.h>)
 AC_CACHE_VAL(bash_cv_printf_declared,
-[AC_TRY_RUN([
+[AC_RUN_IFELSE([AC_LANG_SOURCE([[
 #include <stdio.h>
 #ifdef __STDC__
 typedef int (*_bashfunc)(const char *, ...);
@@ -146,7 +82,7 @@ _bashfunc pf;
 pf = (_bashfunc) printf;
 exit(pf == 0);
 }
-], bash_cv_printf_declared=yes, bash_cv_printf_declared=no,
+]])], [bash_cv_printf_declared=yes], [bash_cv_printf_declared=no],
    [AC_MSG_WARN(cannot check printf declaration if cross compiling -- defaulting to yes)
     bash_cv_printf_declared=yes]
 )])
@@ -173,13 +109,13 @@ dnl
 AC_DEFUN(BASH_DECL_UNDER_SYS_SIGLIST,
 [AC_MSG_CHECKING([for _sys_siglist in signal.h or unistd.h])
 AC_CACHE_VAL(bash_cv_decl_under_sys_siglist,
-[AC_TRY_COMPILE([
+[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
 #include <sys/types.h>
 #include <signal.h>
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
-#endif], [ char *msg = _sys_siglist[2]; ],
-  bash_cv_decl_under_sys_siglist=yes, bash_cv_decl_under_sys_siglist=no,
+#endif]], [[ char *msg = _sys_siglist[2]; ]])],
+  [bash_cv_decl_under_sys_siglist=yes], [bash_cv_decl_under_sys_siglist=no],
   [AC_MSG_WARN(cannot check for _sys_siglist[] if cross compiling -- defaulting to no)])])dnl
 AC_MSG_RESULT($bash_cv_decl_under_sys_siglist)
 if test $bash_cv_decl_under_sys_siglist = yes; then
@@ -191,7 +127,7 @@ AC_DEFUN(BASH_UNDER_SYS_SIGLIST,
 [AC_REQUIRE([BASH_DECL_UNDER_SYS_SIGLIST])
 AC_MSG_CHECKING([for _sys_siglist in system C library])
 AC_CACHE_VAL(bash_cv_under_sys_siglist,
-[AC_TRY_RUN([
+[AC_RUN_IFELSE([AC_LANG_SOURCE([[
 #include <sys/types.h>
 #include <signal.h>
 #ifdef HAVE_UNISTD_H
@@ -206,21 +142,34 @@ main()
 {
 char *msg = (char *)_sys_siglist[2];
 exit(msg == 0);
-}],
-       bash_cv_under_sys_siglist=yes, bash_cv_under_sys_siglist=no,
+}
+]])],
+       [bash_cv_under_sys_siglist=yes], [bash_cv_under_sys_siglist=no],
        [AC_MSG_WARN(cannot check for _sys_siglist[] if cross compiling -- defaulting to no)
-        bash_cv_under_sys_siglist=no])])
+        bash_cv_under_sys_siglist=no]
+)])
 AC_MSG_RESULT($bash_cv_under_sys_siglist)
 if test $bash_cv_under_sys_siglist = yes; then
 AC_DEFINE(HAVE_UNDER_SYS_SIGLIST)
 fi
 ])
 
+dnl this defines HAVE_DECL_SYS_SIGLIST
+AC_DEFUN([BASH_DECL_SYS_SIGLIST],
+[AC_CHECK_DECLS([sys_siglist],,,
+[#include <signal.h>
+/* NetBSD declares sys_siglist in unistd.h.  */
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+])
+])
+
 AC_DEFUN(BASH_SYS_SIGLIST,
-[AC_REQUIRE([AC_DECL_SYS_SIGLIST])
+[AC_REQUIRE([BASH_DECL_SYS_SIGLIST])
 AC_MSG_CHECKING([for sys_siglist in system C library])
 AC_CACHE_VAL(bash_cv_sys_siglist,
-[AC_TRY_RUN([
+[AC_RUN_IFELSE([AC_LANG_SOURCE([[
 #include <sys/types.h>
 #include <signal.h>
 #ifdef HAVE_UNISTD_H
@@ -235,10 +184,11 @@ main()
 {
 char *msg = sys_siglist[2];
 exit(msg == 0);
-}],
-       bash_cv_sys_siglist=yes, bash_cv_sys_siglist=no,
+}
+]])], [bash_cv_sys_siglist=yes], [bash_cv_sys_siglist=no],
        [AC_MSG_WARN(cannot check for sys_siglist if cross compiling -- defaulting to no)
-        bash_cv_sys_siglist=no])])
+        bash_cv_sys_siglist=no]
+)])
 AC_MSG_RESULT($bash_cv_sys_siglist)
 if test $bash_cv_sys_siglist = yes; then
 AC_DEFINE(HAVE_SYS_SIGLIST)
@@ -263,11 +213,15 @@ dnl Check for sys_errlist[] and sys_nerr, check for declaration
 AC_DEFUN(BASH_SYS_ERRLIST,
 [AC_MSG_CHECKING([for sys_errlist and sys_nerr])
 AC_CACHE_VAL(bash_cv_sys_errlist,
-[AC_TRY_LINK([#include <errno.h>],
-[extern char *sys_errlist[];
- extern int sys_nerr;
- char *msg = sys_errlist[sys_nerr - 1];],
-    bash_cv_sys_errlist=yes, bash_cv_sys_errlist=no)])dnl
+[AC_LINK_IFELSE([AC_LANG_PROGRAM([[
+#include <errno.h>
+]],[[
+extern char *sys_errlist[];
+extern int sys_nerr;
+char *msg = sys_errlist[sys_nerr - 1];
+]] )],
+[bash_cv_sys_errlist=yes], [bash_cv_sys_errlist=no]
+)])
 AC_MSG_RESULT($bash_cv_sys_errlist)
 if test $bash_cv_sys_errlist = yes; then
 AC_DEFINE(HAVE_SYS_ERRLIST)
@@ -280,7 +234,7 @@ dnl
 AC_DEFUN(BASH_FUNC_DUP2_CLOEXEC_CHECK,
 [AC_MSG_CHECKING(if dup2 fails to clear the close-on-exec flag)
 AC_CACHE_VAL(bash_cv_dup2_broken,
-[AC_TRY_RUN([
+[AC_RUN_IFELSE([AC_LANG_SOURCE([[
 #include <sys/types.h>
 #include <fcntl.h>
 #include <stdlib.h>
@@ -298,10 +252,10 @@ main()
   /* fl will be 1 if dup2 did not reset the close-on-exec flag. */
   exit(fl != 1);
 }
-], bash_cv_dup2_broken=yes, bash_cv_dup2_broken=no,
+]])], [bash_cv_dup2_broken=yes], [bash_cv_dup2_broken=no],
     [AC_MSG_WARN(cannot check dup2 if cross compiling -- defaulting to no)
-     bash_cv_dup2_broken=no])
-])
+     bash_cv_dup2_broken=no]
+)])
 AC_MSG_RESULT($bash_cv_dup2_broken)
 if test $bash_cv_dup2_broken = yes; then
 AC_DEFINE(DUP2_BROKEN)
@@ -311,11 +265,12 @@ fi
 AC_DEFUN(BASH_FUNC_STRSIGNAL,
 [AC_MSG_CHECKING([for the existence of strsignal])
 AC_CACHE_VAL(bash_cv_have_strsignal,
-[AC_TRY_LINK([#include <sys/types.h>
+[AC_LINK_IFELSE(
+       [AC_LANG_PROGRAM([[#include <sys/types.h>
 #include <signal.h>
-#include <string.h>],
-[char *s = (char *)strsignal(2);],
bash_cv_have_strsignal=yes, bash_cv_have_strsignal=no)])
+#include <string.h>]],
+[[char *s = (char *)strsignal(2);]])],
[bash_cv_have_strsignal=yes], [bash_cv_have_strsignal=no])])
 AC_MSG_RESULT($bash_cv_have_strsignal)
 if test $bash_cv_have_strsignal = yes; then
 AC_DEFINE(HAVE_STRSIGNAL)
@@ -327,7 +282,7 @@ AC_DEFUN(BASH_FUNC_OPENDIR_CHECK,
 [AC_REQUIRE([AC_HEADER_DIRENT])dnl
 AC_MSG_CHECKING(if opendir() opens non-directories)
 AC_CACHE_VAL(bash_cv_opendir_not_robust,
-[AC_TRY_RUN([
+[AC_RUN_IFELSE([AC_LANG_SOURCE([[
 #include <stdio.h>
 #include <sys/types.h>
 #include <fcntl.h>
@@ -370,7 +325,8 @@ dir = opendir("bash-aclocal/not_a_directory");
 unlink("bash-aclocal/not_a_directory");
 rmdir("bash-aclocal");
 exit (dir == 0);
-}], bash_cv_opendir_not_robust=yes,bash_cv_opendir_not_robust=no,
+}
+]])], [bash_cv_opendir_not_robust=yes], [bash_cv_opendir_not_robust=no],
     [AC_MSG_WARN(cannot check opendir if cross compiling -- defaulting to no)
      bash_cv_opendir_not_robust=no]
 )])
@@ -380,26 +336,6 @@ AC_DEFINE(OPENDIR_NOT_ROBUST)
 fi
 ])
 
-dnl
-AC_DEFUN(BASH_TYPE_SIGHANDLER,
-[AC_MSG_CHECKING([whether signal handlers are of type void])
-AC_CACHE_VAL(bash_cv_void_sighandler,
-[AC_TRY_COMPILE([#include <sys/types.h>
-#include <signal.h>
-#ifdef signal
-#undef signal
-#endif
-#ifdef __cplusplus
-extern "C"
-#endif
-void (*signal ()) ();],
-[int i;], bash_cv_void_sighandler=yes, bash_cv_void_sighandler=no)])dnl
-AC_MSG_RESULT($bash_cv_void_sighandler)
-if test $bash_cv_void_sighandler = yes; then
-AC_DEFINE(VOID_SIGHANDLER)
-fi
-])
-
 dnl
 dnl A signed 16-bit integer quantity
 dnl
@@ -487,82 +423,98 @@ else
 fi
 ])
 
-AC_DEFUN(BASH_TYPE_LONG_LONG,
-[
-AC_CACHE_CHECK([for long long], bash_cv_type_long_long,
-[AC_TRY_LINK([
-long long ll = 1; int i = 63;],
-[
-long long llm = (long long) -1;
-return ll << i | ll >> i | llm / ll | llm % ll;
-], bash_cv_type_long_long='long long', bash_cv_type_long_long='long')])
-if test "$bash_cv_type_long_long" = 'long long'; then
-  AC_DEFINE(HAVE_LONG_LONG, 1)
-fi
+AC_DEFUN(BASH_SIZEOF_RLIMIT,
+[AC_MSG_CHECKING(for size of struct rlimit fields)
+AC_CACHE_VAL(bash_cv_sizeof_rlim_cur,
+[AC_RUN_IFELSE([AC_LANG_SOURCE([[
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif
+#include <stdlib.h>
+#include <sys/resource.h>
+main()
+{
+struct rlimit r;
+exit(sizeof (r.rlim_cur));
+}
+]])], [bash_cv_sizeof_rlim_cur=$?], [bash_cv_sizeof_rlim_cur=$?],
+       [AC_MSG_WARN(cannot check size of rlimit fields if cross compiling -- defaulting to long)
+        bash_cv_sizeof_rlim_cur=$ac_cv_sizeof_long]
+)])
+AC_MSG_RESULT($bash_cv_sizeof_rlim_cur)
 ])
 
-AC_DEFUN(BASH_TYPE_UNSIGNED_LONG_LONG,
-[
-AC_CACHE_CHECK([for unsigned long long], bash_cv_type_unsigned_long_long,
-[AC_TRY_LINK([
-unsigned long long ull = 1; int i = 63;],
-[
-unsigned long long ullmax = (unsigned long long) -1;
-return ull << i | ull >> i | ullmax / ull | ullmax % ull;
-], bash_cv_type_unsigned_long_long='unsigned long long',
-   bash_cv_type_unsigned_long_long='unsigned long')])
-if test "$bash_cv_type_unsigned_long_long" = 'unsigned long long'; then
-  AC_DEFINE(HAVE_UNSIGNED_LONG_LONG, 1)
-fi
+AC_DEFUN(BASH_SIZEOF_QUAD_T,
+[AC_MSG_CHECKING(for size of quad_t)
+AC_CACHE_VAL(bash_cv_sizeof_quad_t,
+[AC_RUN_IFELSE([AC_LANG_SOURCE([[
+#include <sys/types.h>
+#include <stdlib.h>
+#if HAVE_INTTYPES_H
+#include <inttypes.h>
+#endif
+#if HAVE_STDINT_H
+#include <stdint.h>
+#endif
+
+main()
+{
+#if HAVE_QUAD_T
+quad_t x;
+exit(sizeof (x));
+#else
+exit (0);
+#endif
+}
+]])], [bash_cv_sizeof_quad_t=$?], [bash_cv_sizeof_quad_t=$?],
+       [AC_MSG_WARN(cannot check size of quad_t if cross compiling -- defaulting to 0)
+        bash_cv_sizeof_quad_t=0]
+)])
+AC_MSG_RESULT($bash_cv_sizeof_quad_t)
 ])
 
 dnl
-dnl Type of struct rlimit fields: some systems (OSF/1, NetBSD, RISC/os 5.0)
-dnl have a rlim_t, others (4.4BSD based systems) use quad_t, others use
-dnl long and still others use int (HP-UX 9.01, SunOS 4.1.3).  To simplify
-dnl matters, this just checks for rlim_t, quad_t, or long.
+dnl Type of struct rlimit fields: updated to check POSIX rlim_t and
+dnl if it doesn't exist determine the best guess based on sizeof(r.rlim_cur)
 dnl
 AC_DEFUN(BASH_TYPE_RLIMIT,
-[AC_MSG_CHECKING(for size and type of struct rlimit fields)
+[AC_MSG_CHECKING(for type of struct rlimit fields)
 AC_CACHE_VAL(bash_cv_type_rlimit,
-[AC_TRY_COMPILE([#include <sys/types.h>
-#include <sys/resource.h>],
-[rlim_t xxx;], bash_cv_type_rlimit=rlim_t,[
-AC_TRY_RUN([
+[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
 #include <sys/types.h>
-#include <sys/time.h>
-#include <sys/resource.h>
-#include <stdlib.h>
-int
-main()
-{
-#ifdef HAVE_QUAD_T
-  struct rlimit rl;
-  if (sizeof(rl.rlim_cur) == sizeof(quad_t))
-    exit(0);
-#endif
-  exit(1);
-}], bash_cv_type_rlimit=quad_t, bash_cv_type_rlimit=long,
-        [AC_MSG_WARN(cannot check quad_t if cross compiling -- defaulting to long)
-         bash_cv_type_rlimit=long])])
-])
-AC_MSG_RESULT($bash_cv_type_rlimit)
-if test $bash_cv_type_rlimit = quad_t; then
-AC_DEFINE(RLIMTYPE, quad_t)
-elif test $bash_cv_type_rlimit = rlim_t; then
-AC_DEFINE(RLIMTYPE, rlim_t)
+#include <sys/resource.h>]],
+[[rlim_t xxx;]]
+)],
+       [bash_cv_type_rlimit=rlim_t], [
+BASH_SIZEOF_RLIMIT
+BASH_SIZEOF_QUAD_T
+if test $bash_cv_sizeof_rlim_cur = $ac_cv_sizeof_long; then
+  bash_cv_type_rlimit='unsigned long'
+elif test $bash_cv_sizeof_rlim_cur = $ac_cv_sizeof_long_long; then
+  bash_cv_type_rlimit='unsigned long long'
+elif test $bash_cv_sizeof_rlim_cur = $ac_cv_sizeof_int; then
+  bash_cv_type_rlimit='unsigned int'
+elif test $bash_cv_sizeof_rlim_cur = $bash_cv_sizeof_quad_t; then
+  bash_cv_type_rlimit='quad_t'
+else
+  bash_cv_type_rlimit='unsigned long'
 fi
+]
+)])
+AC_MSG_RESULT($bash_cv_type_rlimit)
+AC_DEFINE_UNQUOTED([RLIMTYPE], [$bash_cv_type_rlimit])
 ])
 
 AC_DEFUN(BASH_TYPE_SIG_ATOMIC_T,
 [AC_CACHE_CHECK([for sig_atomic_t in signal.h], ac_cv_have_sig_atomic_t,
-[AC_TRY_LINK([
-#include <signal.h>
-],[ sig_atomic_t x; ],
-ac_cv_have_sig_atomic_t=yes, ac_cv_have_sig_atomic_t=no)])
+[AC_LINK_IFELSE(
+       [AC_LANG_PROGRAM(
+               [[ #include <signal.h> ]],
+               [[ sig_atomic_t x; ]])],
+       [ac_cv_have_sig_atomic_t=yes],[ac_cv_have_sig_atomic_t=no])])
 if test "$ac_cv_have_sig_atomic_t" = "no"
 then
-    AC_CHECK_TYPE(sig_atomic_t,int)
+    BASH_CHECK_TYPE(sig_atomic_t, [#include <signal.h>], int)
 fi
 ])
 
@@ -570,11 +522,13 @@ AC_DEFUN(BASH_FUNC_LSTAT,
 [dnl Cannot use AC_CHECK_FUNCS(lstat) because Linux defines lstat() as an
 dnl inline function in <sys/stat.h>.
 AC_CACHE_CHECK([for lstat], bash_cv_func_lstat,
-[AC_TRY_LINK([
-#include <sys/types.h>
-#include <sys/stat.h>
-],[ lstat(".",(struct stat *)0); ],
-bash_cv_func_lstat=yes, bash_cv_func_lstat=no)])
+[AC_LINK_IFELSE(
+       [AC_LANG_PROGRAM([[
+               #include <sys/types.h>
+               #include <sys/stat.h>
+               ]],
+               [[ lstat(".",(struct stat *)0); ]])],
+       [bash_cv_func_lstat=yes],[bash_cv_func_lstat=no])])
 if test $bash_cv_func_lstat = yes; then
   AC_DEFINE(HAVE_LSTAT)
 fi
@@ -583,12 +537,12 @@ fi
 AC_DEFUN(BASH_FUNC_INET_ATON,
 [
 AC_CACHE_CHECK([for inet_aton], bash_cv_func_inet_aton,
-[AC_TRY_LINK([
+[AC_LINK_IFELSE([AC_LANG_PROGRAM([[
 #include <sys/types.h>
 #include <netinet/in.h>
 #include <arpa/inet.h>
-struct in_addr ap;], [ inet_aton("127.0.0.1", &ap); ],
-bash_cv_func_inet_aton=yes, bash_cv_func_inet_aton=no)])
+struct in_addr ap;]], [[ inet_aton("127.0.0.1", &ap); ]])],
+[bash_cv_func_inet_aton=yes], [bash_cv_func_inet_aton=no])])
 if test $bash_cv_func_inet_aton = yes; then
   AC_DEFINE(HAVE_INET_ATON)
 else
@@ -599,7 +553,7 @@ fi
 AC_DEFUN(BASH_FUNC_GETENV,
 [AC_MSG_CHECKING(to see if getenv can be redefined)
 AC_CACHE_VAL(bash_cv_getenv_redef,
-[AC_TRY_RUN([
+[AC_RUN_IFELSE([AC_LANG_SOURCE([[
 #ifdef HAVE_UNISTD_H
 #  include <unistd.h>
 #endif
@@ -632,7 +586,7 @@ exit(1);
 s = getenv("ABCDE");
 exit(s == 0);  /* force optimizer to leave getenv in */
 }
-], bash_cv_getenv_redef=yes, bash_cv_getenv_redef=no,
+]])], [bash_cv_getenv_redef=yes], [bash_cv_getenv_redef=no],
    [AC_MSG_WARN(cannot check getenv redefinition if cross compiling -- defaulting to yes)
     bash_cv_getenv_redef=yes]
 )])
@@ -645,12 +599,13 @@ fi
 # We should check for putenv before calling this
 AC_DEFUN(BASH_FUNC_STD_PUTENV,
 [
-AC_REQUIRE([AC_HEADER_STDC])
 AC_REQUIRE([AC_C_PROTOTYPES])
 AC_CACHE_CHECK([for standard-conformant putenv declaration], bash_cv_std_putenv,
-[AC_TRY_LINK([
-#if STDC_HEADERS
+[AC_LINK_IFELSE([AC_LANG_PROGRAM([[
+#if HAVE_STDLIB_H
 #include <stdlib.h>
+#endif
+#if HAVE_STDDEF_H
 #include <stddef.h>
 #endif
 #ifndef __STDC__
@@ -663,9 +618,8 @@ extern int putenv (char *);
 #else
 extern int putenv ();
 #endif
-],
-[return (putenv == 0);],
-bash_cv_std_putenv=yes, bash_cv_std_putenv=no
+]], [[return (putenv == 0);]] )],
+[bash_cv_std_putenv=yes], [bash_cv_std_putenv=no]
 )])
 if test $bash_cv_std_putenv = yes; then
 AC_DEFINE(HAVE_STD_PUTENV)
@@ -675,12 +629,13 @@ fi
 # We should check for unsetenv before calling this
 AC_DEFUN(BASH_FUNC_STD_UNSETENV,
 [
-AC_REQUIRE([AC_HEADER_STDC])
 AC_REQUIRE([AC_C_PROTOTYPES])
 AC_CACHE_CHECK([for standard-conformant unsetenv declaration], bash_cv_std_unsetenv,
-[AC_TRY_LINK([
-#if STDC_HEADERS
+[AC_LINK_IFELSE([AC_LANG_PROGRAM([[
+#if HAVE_STDLIB_H
 #include <stdlib.h>
+#endif
+#if HAVE_STDDEF_H
 #include <stddef.h>
 #endif
 #ifndef __STDC__
@@ -693,9 +648,8 @@ extern int unsetenv (const char *);
 #else
 extern int unsetenv ();
 #endif
-],
-[return (unsetenv == 0);],
-bash_cv_std_unsetenv=yes, bash_cv_std_unsetenv=no
+]], [[return (unsetenv == 0);]] )],
+[bash_cv_std_unsetenv=yes], [bash_cv_std_unsetenv=no]
 )])
 if test $bash_cv_std_unsetenv = yes; then
 AC_DEFINE(HAVE_STD_UNSETENV)
@@ -705,7 +659,7 @@ fi
 AC_DEFUN(BASH_FUNC_ULIMIT_MAXFDS,
 [AC_MSG_CHECKING(whether ulimit can substitute for getdtablesize)
 AC_CACHE_VAL(bash_cv_ulimit_maxfds,
-[AC_TRY_RUN([
+[AC_RUN_IFELSE([AC_LANG_SOURCE([[
 #include <stdlib.h>
 #ifdef HAVE_ULIMIT_H
 #include <ulimit.h>
@@ -716,7 +670,7 @@ main()
 long maxfds = ulimit(4, 0L);
 exit (maxfds == -1L);
 }
-], bash_cv_ulimit_maxfds=yes, bash_cv_ulimit_maxfds=no,
+]])], [bash_cv_ulimit_maxfds=yes], [bash_cv_ulimit_maxfds=no],
    [AC_MSG_WARN(cannot check ulimit if cross compiling -- defaulting to no)
     bash_cv_ulimit_maxfds=no]
 )])
@@ -729,7 +683,7 @@ fi
 AC_DEFUN(BASH_FUNC_GETCWD,
 [AC_MSG_CHECKING([if getcwd() will dynamically allocate memory with 0 size])
 AC_CACHE_VAL(bash_cv_getcwd_malloc,
-[AC_TRY_RUN([
+[AC_RUN_IFELSE([AC_LANG_SOURCE([[
 #include <stdio.h>
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
@@ -743,7 +697,7 @@ main()
        xpwd = getcwd(0, 0);
        exit (xpwd == 0);
 }
-], bash_cv_getcwd_malloc=yes, bash_cv_getcwd_malloc=no,
+]])], [bash_cv_getcwd_malloc=yes], [bash_cv_getcwd_malloc=no],
    [AC_MSG_WARN(cannot check whether getcwd allocates memory when cross-compiling -- defaulting to no)
     bash_cv_getcwd_malloc=no]
 )])
@@ -756,7 +710,7 @@ fi
 
 dnl
 dnl This needs BASH_CHECK_SOCKLIB, but since that's not called on every
-dnl system, we can't use AC_PREREQ
+dnl system, we can't use AC_PREREQ. Only called if we need the socket library
 dnl
 AC_DEFUN(BASH_FUNC_GETHOSTBYNAME,
 [if test "X$bash_cv_have_gethostbyname" = "X"; then
@@ -766,11 +720,14 @@ AC_MSG_CHECKING(for gethostbyname in socket library)
 _bash_needmsg=
 fi
 AC_CACHE_VAL(bash_cv_have_gethostbyname,
-[AC_TRY_LINK([#include <netdb.h>],
-[ struct hostent *hp;
-  hp = gethostbyname("localhost");
-], bash_cv_have_gethostbyname=yes, bash_cv_have_gethostbyname=no)]
-)
+[AC_LINK_IFELSE([AC_LANG_PROGRAM([[
+#include <netdb.h>
+]], [[
+struct hostent *hp;
+hp = gethostbyname("localhost");
+]] )],
+[bash_cv_have_gethostbyname=yes], [bash_cv_have_gethostbyname=no]
+)])
 if test "X$_bash_needmsg" = Xyes; then
     AC_MSG_CHECKING(for gethostbyname in socket library)
 fi
@@ -783,7 +740,7 @@ fi
 AC_DEFUN(BASH_FUNC_FNMATCH_EXTMATCH,
 [AC_MSG_CHECKING(if fnmatch does extended pattern matching with FNM_EXTMATCH)
 AC_CACHE_VAL(bash_cv_fnm_extmatch,
-[AC_TRY_RUN([
+[AC_RUN_IFELSE([AC_LANG_SOURCE([[
 #include <fnmatch.h>
 
 int
@@ -795,10 +752,10 @@ main()
   return (1);
 #endif
 }
-], bash_cv_fnm_extmatch=yes, bash_cv_fnm_extmatch=no,
+]])], [bash_cv_fnm_extmatch=yes], [bash_cv_fnm_extmatch=no],
     [AC_MSG_WARN(cannot check FNM_EXTMATCH if cross compiling -- defaulting to no)
-     bash_cv_fnm_extmatch=no])
-])
+     bash_cv_fnm_extmatch=no]
+)])
 AC_MSG_RESULT($bash_cv_fnm_extmatch)
 if test $bash_cv_fnm_extmatch = yes; then
 AC_DEFINE(HAVE_LIBC_FNM_EXTMATCH)
@@ -809,7 +766,7 @@ AC_DEFUN(BASH_FUNC_POSIX_SETJMP,
 [AC_REQUIRE([BASH_SYS_SIGNAL_VINTAGE])
 AC_MSG_CHECKING(for presence of POSIX-style sigsetjmp/siglongjmp)
 AC_CACHE_VAL(bash_cv_func_sigsetjmp,
-[AC_TRY_RUN([
+[AC_RUN_IFELSE([AC_LANG_SOURCE([[
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif
@@ -826,21 +783,30 @@ exit (1);
 #else
 
 int code;
-sigset_t set, oset;
+sigset_t set, oset, nset;
 sigjmp_buf xx;
 
 /* get the mask */
 sigemptyset(&set);
 sigemptyset(&oset);
-sigprocmask(SIG_BLOCK, (sigset_t *)NULL, &set);
+
 sigprocmask(SIG_BLOCK, (sigset_t *)NULL, &oset);
+/* paranoia -- make sure SIGINT is not blocked */
+sigdelset (&oset, SIGINT);
+sigprocmask (SIG_SETMASK, &oset, (sigset_t *)NULL);
 
 /* save it */
 code = sigsetjmp(xx, 1);
 if (code)
-  exit(0);     /* could get sigmask and compare to oset here. */
+{
+  sigprocmask(SIG_BLOCK, (sigset_t *)NULL, &nset);
+  /* could compare nset to oset here, but we just look for SIGINT */
+  if (sigismember (&nset, SIGINT))
+    exit(1);
+  exit(0);
+}
 
-/* change it */
+/* change it so that SIGINT is blocked */
 sigaddset(&set, SIGINT);
 sigprocmask(SIG_BLOCK, &set, (sigset_t *)NULL);
 
@@ -848,9 +814,14 @@ sigprocmask(SIG_BLOCK, &set, (sigset_t *)NULL);
 siglongjmp(xx, 10);
 exit(1);
 #endif
-}], bash_cv_func_sigsetjmp=present, bash_cv_func_sigsetjmp=missing,
-    [AC_MSG_WARN(cannot check for sigsetjmp/siglongjmp if cross-compiling -- defaulting to missing)
-     bash_cv_func_sigsetjmp=missing]
+}
+]])], [bash_cv_func_sigsetjmp=present], [bash_cv_func_sigsetjmp=missing],
+    [AC_MSG_WARN(cannot check for sigsetjmp/siglongjmp if cross-compiling -- defaulting to $bash_cv_posix_signals)
+     if test "$bash_cv_posix_signals" = "yes" ; then
+       bash_cv_func_sigsetjmp=present
+     else
+       bash_cv_func_sigsetjmp=missing
+     fi]
 )])
 AC_MSG_RESULT($bash_cv_func_sigsetjmp)
 if test $bash_cv_func_sigsetjmp = present; then
@@ -859,10 +830,9 @@ fi
 ])
 
 AC_DEFUN(BASH_FUNC_STRCOLL,
-[
-AC_MSG_CHECKING(whether or not strcoll and strcmp differ)
+[AC_MSG_CHECKING(whether or not strcoll and strcmp differ)
 AC_CACHE_VAL(bash_cv_func_strcoll_broken,
-[AC_TRY_RUN([
+[AC_RUN_IFELSE([AC_LANG_SOURCE([[
 #include <stdio.h>
 #if defined (HAVE_LOCALE_H)
 #include <locale.h>
@@ -900,7 +870,7 @@ char    *v[];
           in the default locale. */
        exit (r1 > 0 && r2 > 0);
 }
-], bash_cv_func_strcoll_broken=yes, bash_cv_func_strcoll_broken=no,
+]])], [bash_cv_func_strcoll_broken=yes], [bash_cv_func_strcoll_broken=no],
    [AC_MSG_WARN(cannot check strcoll if cross compiling -- defaulting to no)
     bash_cv_func_strcoll_broken=no]
 )])
@@ -913,7 +883,7 @@ fi
 AC_DEFUN(BASH_FUNC_PRINTF_A_FORMAT,
 [AC_MSG_CHECKING([for printf floating point output in hex notation])
 AC_CACHE_VAL(bash_cv_printf_a_format,
-[AC_TRY_RUN([
+[AC_RUN_IFELSE([AC_LANG_SOURCE([[
 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
@@ -927,7 +897,7 @@ main()
        sprintf(abuf, "%A", y);
        exit(strchr(abuf, 'P') == (char *)0);
 }
-], bash_cv_printf_a_format=yes, bash_cv_printf_a_format=no,
+]])], [bash_cv_printf_a_format=yes], [bash_cv_printf_a_format=no],
    [AC_MSG_WARN(cannot check printf if cross compiling -- defaulting to no)
     bash_cv_printf_a_format=no]
 )])
@@ -964,12 +934,10 @@ AC_DEFUN(BASH_STRUCT_ST_BLOCKS,
 [
 AC_MSG_CHECKING([for struct stat.st_blocks])
 AC_CACHE_VAL(bash_cv_struct_stat_st_blocks,
-[AC_TRY_COMPILE(
-[
+[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
 #include <sys/types.h>
 #include <sys/stat.h>
-],
-[
+]], [[
 int
 main()
 {
@@ -977,7 +945,7 @@ static struct stat a;
 if (a.st_blocks) return 0;
 return 0;
 }
-], bash_cv_struct_stat_st_blocks=yes, bash_cv_struct_stat_st_blocks=no)
+]])], [bash_cv_struct_stat_st_blocks=yes], [bash_cv_struct_stat_st_blocks=no])
 ])
 AC_MSG_RESULT($bash_cv_struct_stat_st_blocks)
 if test "$bash_cv_struct_stat_st_blocks" = "yes"; then
@@ -1022,7 +990,8 @@ elif test $bash_cv_termcap_lib = libc; then
 TERMCAP_LIB=
 TERMCAP_DEP=
 else
-TERMCAP_LIB=-lcurses
+# we assume ncurses is installed somewhere the linker can find it
+TERMCAP_LIB=-lncurses
 TERMCAP_DEP=
 fi
 ])
@@ -1077,11 +1046,12 @@ if test $bash_cv_have_socklib = yes; then
 fi
 ])
 
-AC_DEFUN(BASH_STRUCT_DIRENT_D_INO,
-[AC_REQUIRE([AC_HEADER_DIRENT])
-AC_MSG_CHECKING(for struct dirent.d_ino)
-AC_CACHE_VAL(bash_cv_dirent_has_dino,
-[AC_TRY_COMPILE([
+dnl like _AC_STRUCT_DIRENT(MEMBER) but public
+AC_DEFUN(BASH_STRUCT_DIRENT,
+[
+AC_REQUIRE([AC_HEADER_DIRENT])
+AC_CHECK_MEMBERS(struct dirent.$1, bash_cv_dirent_has_$1=yes, bash_cv_dirent_has_$1=no,
+[[
 #include <stdio.h>
 #include <sys/types.h>
 #ifdef HAVE_UNISTD_H
@@ -1101,11 +1071,15 @@ AC_CACHE_VAL(bash_cv_dirent_has_dino,
 #  include <ndir.h>
 # endif
 #endif /* HAVE_DIRENT_H */
-],[
-struct dirent d; int z; z = d.d_ino;
-], bash_cv_dirent_has_dino=yes, bash_cv_dirent_has_dino=no)])
-AC_MSG_RESULT($bash_cv_dirent_has_dino)
-if test $bash_cv_dirent_has_dino = yes; then
+]])
+])
+
+AC_DEFUN(BASH_STRUCT_DIRENT_D_INO,
+[AC_REQUIRE([AC_HEADER_DIRENT])
+AC_MSG_CHECKING(for struct dirent.d_ino)
+AC_CACHE_VAL(bash_cv_dirent_has_d_ino, [BASH_STRUCT_DIRENT([d_ino])])
+AC_MSG_RESULT($bash_cv_dirent_has_d_ino)
+if test $bash_cv_dirent_has_d_ino = yes; then
 AC_DEFINE(HAVE_STRUCT_DIRENT_D_INO)
 fi
 ])
@@ -1113,30 +1087,7 @@ fi
 AC_DEFUN(BASH_STRUCT_DIRENT_D_FILENO,
 [AC_REQUIRE([AC_HEADER_DIRENT])
 AC_MSG_CHECKING(for struct dirent.d_fileno)
-AC_CACHE_VAL(bash_cv_dirent_has_d_fileno,
-[AC_TRY_COMPILE([
-#include <stdio.h>
-#include <sys/types.h>
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif /* HAVE_UNISTD_H */
-#if defined(HAVE_DIRENT_H)
-# include <dirent.h>
-#else
-# define dirent direct
-# ifdef HAVE_SYS_NDIR_H
-#  include <sys/ndir.h>
-# endif /* SYSNDIR */
-# ifdef HAVE_SYS_DIR_H
-#  include <sys/dir.h>
-# endif /* SYSDIR */
-# ifdef HAVE_NDIR_H
-#  include <ndir.h>
-# endif
-#endif /* HAVE_DIRENT_H */
-],[
-struct dirent d; int z; z = d.d_fileno;
-], bash_cv_dirent_has_d_fileno=yes, bash_cv_dirent_has_d_fileno=no)])
+AC_CACHE_VAL(bash_cv_dirent_has_d_fileno, [BASH_STRUCT_DIRENT([d_fileno])])
 AC_MSG_RESULT($bash_cv_dirent_has_d_fileno)
 if test $bash_cv_dirent_has_d_fileno = yes; then
 AC_DEFINE(HAVE_STRUCT_DIRENT_D_FILENO)
@@ -1146,30 +1097,7 @@ fi
 AC_DEFUN(BASH_STRUCT_DIRENT_D_NAMLEN,
 [AC_REQUIRE([AC_HEADER_DIRENT])
 AC_MSG_CHECKING(for struct dirent.d_namlen)
-AC_CACHE_VAL(bash_cv_dirent_has_d_namlen,
-[AC_TRY_COMPILE([
-#include <stdio.h>
-#include <sys/types.h>
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif /* HAVE_UNISTD_H */
-#if defined(HAVE_DIRENT_H)
-# include <dirent.h>
-#else
-# define dirent direct
-# ifdef HAVE_SYS_NDIR_H
-#  include <sys/ndir.h>
-# endif /* SYSNDIR */
-# ifdef HAVE_SYS_DIR_H
-#  include <sys/dir.h>
-# endif /* SYSDIR */
-# ifdef HAVE_NDIR_H
-#  include <ndir.h>
-# endif
-#endif /* HAVE_DIRENT_H */
-],[
-struct dirent d; int z; z = d.d_namlen;
-], bash_cv_dirent_has_d_namlen=yes, bash_cv_dirent_has_d_namlen=no)])
+AC_CACHE_VAL(bash_cv_dirent_has_d_namlen, [BASH_STRUCT_DIRENT([d_namlen])])
 AC_MSG_RESULT($bash_cv_dirent_has_d_namlen)
 if test $bash_cv_dirent_has_d_namlen = yes; then
 AC_DEFINE(HAVE_STRUCT_DIRENT_D_NAMLEN)
@@ -1213,16 +1141,47 @@ if test $bash_cv_struct_timezone = yes; then
 fi
 ])
 
+AC_DEFUN(BASH_CHECK_WINSIZE_IOCTL,
+[AC_CACHE_VAL(bash_cv_struct_winsize_ioctl,
+[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#include <sys/types.h>
+#include <sys/ioctl.h>
+]],
+[[
+struct winsize x;
+if (sizeof (x) > 0) return (0);
+]] )], [bash_cv_struct_winsize_ioctl=yes], [bash_cv_struct_winsize_ioctl=no])
+])
+])
+
+AC_DEFUN(BASH_CHECK_WINSIZE_TERMIOS,
+[AC_CACHE_VAL(bash_cv_struct_winsize_termios,
+[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#include <sys/types.h>
+#include <sys/termios.h>
+]],
+[[
+struct winsize x;
+if (sizeof (x) > 0) return (0);
+]] )], [bash_cv_struct_winsize_termios=yes], [bash_cv_struct_winsize_termios=no])
+])
+])
+
 AC_DEFUN(BASH_STRUCT_WINSIZE,
 [AC_MSG_CHECKING(for struct winsize in sys/ioctl.h and termios.h)
 AC_CACHE_VAL(bash_cv_struct_winsize_header,
-[AC_TRY_COMPILE([#include <sys/types.h>
-#include <sys/ioctl.h>], [struct winsize x;],
-  bash_cv_struct_winsize_header=ioctl_h,
-  [AC_TRY_COMPILE([#include <sys/types.h>
-#include <termios.h>], [struct winsize x;],
-  bash_cv_struct_winsize_header=termios_h, bash_cv_struct_winsize_header=other)
-])])
+[
+BASH_CHECK_WINSIZE_IOCTL
+BASH_CHECK_WINSIZE_TERMIOS
+
+if test $bash_cv_struct_winsize_ioctl = yes; then
+  bash_cv_struct_winsize_header=ioctl_h
+elif test $bash_cv_struct_winsize_termios = yes; then
+  bash_cv_struct_winsize_header=termios_h
+else
+  bash_cv_struct_winsize_header=other
+fi
+])
 if test $bash_cv_struct_winsize_header = ioctl_h; then
   AC_MSG_RESULT(sys/ioctl.h)
   AC_DEFINE(STRUCT_WINSIZE_IN_SYS_IOCTL)
@@ -1234,35 +1193,68 @@ else
 fi
 ])
 
-dnl Check type of signal routines (posix, 4.2bsd, 4.1bsd or v7)
-AC_DEFUN(BASH_SYS_SIGNAL_VINTAGE,
-[AC_REQUIRE([AC_TYPE_SIGNAL])
-AC_MSG_CHECKING(for type of signal functions)
-AC_CACHE_VAL(bash_cv_signal_vintage,
-[
-  AC_TRY_LINK([#include <signal.h>],[
+AC_DEFUN(BASH_HAVE_POSIX_SIGNALS,
+[AC_CACHE_VAL(bash_cv_posix_signals,
+[AC_LINK_IFELSE([AC_LANG_PROGRAM([[
+#include <signal.h>
+]], [[
     sigset_t ss;
     struct sigaction sa;
     sigemptyset(&ss); sigsuspend(&ss);
     sigaction(SIGINT, &sa, (struct sigaction *) 0);
     sigprocmask(SIG_BLOCK, &ss, (sigset_t *) 0);
-  ], bash_cv_signal_vintage=posix,
-  [
-    AC_TRY_LINK([#include <signal.h>], [
-       int mask = sigmask(SIGINT);
-       sigsetmask(mask); sigblock(mask); sigpause(mask);
-    ], bash_cv_signal_vintage=4.2bsd,
-    [
-      AC_TRY_LINK([
-       #include <signal.h>
-       RETSIGTYPE foo() { }], [
-               int mask = sigmask(SIGINT);
-               sigset(SIGINT, foo); sigrelse(SIGINT);
-               sighold(SIGINT); sigpause(SIGINT);
-        ], bash_cv_signal_vintage=svr3, bash_cv_signal_vintage=v7
-    )]
-  )]
-)
+]] )],
+[bash_cv_posix_signals=yes], [bash_cv_posix_signals=no]
+)])
+])
+
+AC_DEFUN(BASH_HAVE_BSD_SIGNALS,
+[AC_CACHE_VAL(bash_cv_bsd_signals,
+[AC_LINK_IFELSE([AC_LANG_PROGRAM([[
+#include <signal.h>
+]], [[
+int mask = sigmask(SIGINT);
+sigsetmask(mask); sigblock(mask); sigpause(mask);
+]] )],
+[bash_cv_bsd_signals=yes], [bash_cv_bsd_signals=no]
+)])
+])
+
+AC_DEFUN(BASH_HAVE_SYSV_SIGNALS,
+[AC_CACHE_VAL(bash_cv_sysv_signals,
+[AC_LINK_IFELSE([AC_LANG_PROGRAM([[
+#include <signal.h>
+void foo() { }
+]], [[
+int mask = sigmask(SIGINT);
+sigset(SIGINT, foo); sigrelse(SIGINT);
+sighold(SIGINT); sigpause(SIGINT);
+]] )],
+[bash_cv_sysv_signals=yes], [bash_cv_sysv_signals=no]
+)])
+])
+
+dnl Check type of signal routines (posix, 4.2bsd, 4.1bsd or v7)
+AC_DEFUN(BASH_SYS_SIGNAL_VINTAGE,
+[AC_MSG_CHECKING(for type of signal functions)
+AC_CACHE_VAL(bash_cv_signal_vintage,
+[
+BASH_HAVE_POSIX_SIGNALS
+if test $bash_cv_posix_signals = yes; then
+  bash_cv_signal_vintage=posix
+else
+  BASH_HAVE_BSD_SIGNALS
+  if test $bash_cv_bsd_signals = yes; then
+    bash_cv_signal_vintage=4.2bsd
+  else
+    BASH_HAVE_SYSV_SIGNALS
+    if test $bash_cv_sysv_signals = yes; then
+      bash_cv_signal_vintage=svr3
+    else
+      bash_cv_signal_vintage=v7
+    fi
+  fi
+fi
 ])
 AC_MSG_RESULT($bash_cv_signal_vintage)
 if test "$bash_cv_signal_vintage" = posix; then
@@ -1279,7 +1271,7 @@ AC_DEFUN(BASH_SYS_PGRP_SYNC,
 [AC_REQUIRE([AC_FUNC_GETPGRP])
 AC_MSG_CHECKING(whether pgrps need synchronization)
 AC_CACHE_VAL(bash_cv_pgrp_pipe,
-[AC_TRY_RUN([
+[AC_RUN_IFELSE([AC_LANG_SOURCE([[
 #ifdef HAVE_UNISTD_H
 #  include <unistd.h>
 #endif
@@ -1332,10 +1324,10 @@ main()
        wait(&status);
        exit(ok ? 0 : 5);
 }
-], bash_cv_pgrp_pipe=no,bash_cv_pgrp_pipe=yes,
+]])], [bash_cv_pgrp_pipe=no], [bash_cv_pgrp_pipe=yes],
    [AC_MSG_WARN(cannot check pgrp synchronization if cross compiling -- defaulting to no)
-    bash_cv_pgrp_pipe=no])
-])
+    bash_cv_pgrp_pipe=no]
+)])
 AC_MSG_RESULT($bash_cv_pgrp_pipe)
 if test $bash_cv_pgrp_pipe = yes; then
 AC_DEFINE(PGRP_PIPE)
@@ -1343,18 +1335,17 @@ fi
 ])
 
 AC_DEFUN(BASH_SYS_REINSTALL_SIGHANDLERS,
-[AC_REQUIRE([AC_TYPE_SIGNAL])
-AC_REQUIRE([BASH_SYS_SIGNAL_VINTAGE])
+[AC_REQUIRE([BASH_SYS_SIGNAL_VINTAGE])
 AC_MSG_CHECKING([if signal handlers must be reinstalled when invoked])
 AC_CACHE_VAL(bash_cv_must_reinstall_sighandlers,
-[AC_TRY_RUN([
+[AC_RUN_IFELSE([AC_LANG_SOURCE([[
 #include <signal.h>
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif
 #include <stdlib.h>
 
-typedef RETSIGTYPE sigfunc();
+typedef void sigfunc();
 
 volatile int nsigint;
 
@@ -1376,7 +1367,7 @@ set_signal_handler(sig, handler)
 #define set_signal_handler(s, h) signal(s, h)
 #endif
 
-RETSIGTYPE
+void
 sigint(s)
 int s;
 {
@@ -1392,7 +1383,7 @@ main()
        kill((int)getpid(), SIGINT);
        exit(nsigint != 2);
 }
-], bash_cv_must_reinstall_sighandlers=no, bash_cv_must_reinstall_sighandlers=yes,
+]])], [bash_cv_must_reinstall_sighandlers=no], [bash_cv_must_reinstall_sighandlers=yes],
    [AC_MSG_WARN(cannot check signal handling if cross compiling -- defaulting to no)
     bash_cv_must_reinstall_sighandlers=no]
 )])
@@ -1407,7 +1398,7 @@ AC_DEFUN(BASH_SYS_JOB_CONTROL_MISSING,
 [AC_REQUIRE([BASH_SYS_SIGNAL_VINTAGE])
 AC_MSG_CHECKING(for presence of necessary job control definitions)
 AC_CACHE_VAL(bash_cv_job_control_missing,
-[AC_TRY_COMPILE([
+[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
 #include <sys/types.h>
 #ifdef HAVE_SYS_WAIT_H
 #include <sys/wait.h>
@@ -1448,7 +1439,8 @@ AC_CACHE_VAL(bash_cv_job_control_missing,
 #error
 #endif
 
-], , bash_cv_job_control_missing=present, bash_cv_job_control_missing=missing
+]], [[ int x; ]] )],
+[bash_cv_job_control_missing=present], [bash_cv_job_control_missing=missing]
 )])
 AC_MSG_RESULT($bash_cv_job_control_missing)
 if test $bash_cv_job_control_missing = missing; then
@@ -1461,7 +1453,7 @@ dnl this requires a previous check for mkfifo, but that is awkward to specify
 AC_DEFUN(BASH_SYS_NAMED_PIPES,
 [AC_MSG_CHECKING(for presence of named pipes)
 AC_CACHE_VAL(bash_cv_sys_named_pipes,
-[AC_TRY_RUN([
+[AC_RUN_IFELSE([AC_LANG_SOURCE([[
 #include <sys/types.h>
 #include <sys/stat.h>
 #ifdef HAVE_UNISTD_H
@@ -1501,7 +1493,8 @@ close(fd);
 unlink ("bash-aclocal/sh-np-autoconf");
 rmdir ("bash-aclocal");
 exit(0);
-}], bash_cv_sys_named_pipes=present, bash_cv_sys_named_pipes=missing,
+}
+]])], [bash_cv_sys_named_pipes=present], [bash_cv_sys_named_pipes=missing],
     [AC_MSG_WARN(cannot check for named pipes if cross-compiling -- defaulting to missing)
      bash_cv_sys_named_pipes=missing]
 )])
@@ -1533,9 +1526,11 @@ AC_DEFINE_UNQUOTED(DEFAULT_MAIL_DIRECTORY, "$bash_cv_mail_dir")
 AC_DEFUN(BASH_HAVE_TIOCGWINSZ,
 [AC_MSG_CHECKING(for TIOCGWINSZ in sys/ioctl.h)
 AC_CACHE_VAL(bash_cv_tiocgwinsz_in_ioctl,
-[AC_TRY_COMPILE([#include <sys/types.h>
-#include <sys/ioctl.h>], [int x = TIOCGWINSZ;],
-  bash_cv_tiocgwinsz_in_ioctl=yes,bash_cv_tiocgwinsz_in_ioctl=no)])
+[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#include <sys/types.h>
+#include <sys/ioctl.h>]], [[int x = TIOCGWINSZ;]] )],
+  [bash_cv_tiocgwinsz_in_ioctl=yes], [bash_cv_tiocgwinsz_in_ioctl=no]
+)])
 AC_MSG_RESULT($bash_cv_tiocgwinsz_in_ioctl)
 if test $bash_cv_tiocgwinsz_in_ioctl = yes; then   
 AC_DEFINE(GWINSZ_IN_SYS_IOCTL)
@@ -1545,9 +1540,11 @@ fi
 AC_DEFUN(BASH_HAVE_TIOCSTAT,
 [AC_MSG_CHECKING(for TIOCSTAT in sys/ioctl.h)
 AC_CACHE_VAL(bash_cv_tiocstat_in_ioctl,
-[AC_TRY_COMPILE([#include <sys/types.h>
-#include <sys/ioctl.h>], [int x = TIOCSTAT;],
-  bash_cv_tiocstat_in_ioctl=yes,bash_cv_tiocstat_in_ioctl=no)])
+[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#include <sys/types.h>
+#include <sys/ioctl.h>]], [[int x = TIOCSTAT;]] )],
+  [bash_cv_tiocstat_in_ioctl=yes], [bash_cv_tiocstat_in_ioctl=no]
+)])
 AC_MSG_RESULT($bash_cv_tiocstat_in_ioctl)
 if test $bash_cv_tiocstat_in_ioctl = yes; then   
 AC_DEFINE(TIOCSTAT_IN_SYS_IOCTL)
@@ -1557,9 +1554,11 @@ fi
 AC_DEFUN(BASH_HAVE_FIONREAD,
 [AC_MSG_CHECKING(for FIONREAD in sys/ioctl.h)
 AC_CACHE_VAL(bash_cv_fionread_in_ioctl,
-[AC_TRY_COMPILE([#include <sys/types.h>
-#include <sys/ioctl.h>], [int x = FIONREAD;],
-  bash_cv_fionread_in_ioctl=yes,bash_cv_fionread_in_ioctl=no)])
+[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#include <sys/types.h>
+#include <sys/ioctl.h>]], [[int x = FIONREAD;]] )],
+  [bash_cv_fionread_in_ioctl=yes], [bash_cv_fionread_in_ioctl=no]
+)])
 AC_MSG_RESULT($bash_cv_fionread_in_ioctl)
 if test $bash_cv_fionread_in_ioctl = yes; then   
 AC_DEFINE(FIONREAD_IN_SYS_IOCTL)
@@ -1575,8 +1574,11 @@ dnl
 AC_DEFUN(BASH_CHECK_SPEED_T,
 [AC_MSG_CHECKING(for speed_t in sys/types.h)
 AC_CACHE_VAL(bash_cv_speed_t_in_sys_types,
-[AC_TRY_COMPILE([#include <sys/types.h>], [speed_t x;],
-  bash_cv_speed_t_in_sys_types=yes,bash_cv_speed_t_in_sys_types=no)])
+[AC_COMPILE_IFELSE(
+       [AC_LANG_PROGRAM(
+               [[#include <sys/types.h>]],
+               [[speed_t x;]])],
+       [bash_cv_speed_t_in_sys_types=yes],[bash_cv_speed_t_in_sys_types=no])])
 AC_MSG_RESULT($bash_cv_speed_t_in_sys_types)
 if test $bash_cv_speed_t_in_sys_types = yes; then   
 AC_DEFINE(SPEED_T_IN_SYS_TYPES)
@@ -1646,31 +1648,41 @@ if test $bash_cv_dev_stdin = "present"; then
 fi
 ])
 
+
+AC_DEFUN(BASH_CHECK_RLIMIT,
+[AC_CACHE_VAL(bash_cv_rlimit,
+[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+#include <sys/types.h>
+#include <sys/resource.h>
+]],
+[[
+  int f;
+  f = RLIMIT_DATA;
+]] )],
+[bash_cv_rlimit=yes], [bash_cv_rlimit=no]
+)])
+])
+
 dnl
 dnl Check if HPUX needs _KERNEL defined for RLIMIT_* definitions
 dnl
 AC_DEFUN(BASH_CHECK_KERNEL_RLIMIT,
 [AC_MSG_CHECKING([whether $host_os needs _KERNEL for RLIMIT defines])
 AC_CACHE_VAL(bash_cv_kernel_rlimit,
-[AC_TRY_COMPILE([
-#include <sys/types.h>
-#include <sys/resource.h>
-],
-[
-  int f;
-  f = RLIMIT_DATA;
-], bash_cv_kernel_rlimit=no,
-[AC_TRY_COMPILE([
+[BASH_CHECK_RLIMIT
+if test $bash_cv_rlimit = no; then
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
 #include <sys/types.h>
 #define _KERNEL
 #include <sys/resource.h>
 #undef _KERNEL
-],
-[
-       int f;
-        f = RLIMIT_DATA;
-], bash_cv_kernel_rlimit=yes, bash_cv_kernel_rlimit=no)]
-)])
+]],
+[[
+  int f;
+  f = RLIMIT_DATA;
+]] )], [bash_cv_kernel_rlimit=yes], [bash_cv_kernel_rlimit=no] )
+fi
+])
 AC_MSG_RESULT($bash_cv_kernel_rlimit)
 if test $bash_cv_kernel_rlimit = yes; then
 AC_DEFINE(RLIMIT_NEEDS_KERNEL)
@@ -1685,14 +1697,15 @@ dnl sizeof(off_t) is > 4.
 dnl
 AC_DEFUN(BASH_CHECK_OFF_T_64,
 [AC_CACHE_CHECK(for 64-bit off_t, bash_cv_off_t_64,
-AC_TRY_COMPILE([
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif
 #include <sys/types.h>
-],[
+]],[[
 switch (0) case 0: case (sizeof (off_t) <= 4):;
-], bash_cv_off_t_64=no, bash_cv_off_t_64=yes))
+]] )], [bash_cv_off_t_64=no], [bash_cv_off_t_64=yes]
+))
 if test $bash_cv_off_t_64 = yes; then
         AC_DEFINE(HAVE_OFF_T_64)
 fi])
@@ -1700,7 +1713,7 @@ fi])
 AC_DEFUN(BASH_CHECK_RTSIGS,
 [AC_MSG_CHECKING(for unusable real-time signals due to large values)
 AC_CACHE_VAL(bash_cv_unusable_rtsigs,
-[AC_TRY_RUN([
+[AC_RUN_IFELSE([AC_LANG_SOURCE([[
 #include <sys/types.h>
 #include <signal.h>
 #include <stdlib.h>
@@ -1720,7 +1733,8 @@ main ()
 #endif
 
   exit(rtmin < n_sigs);
-}], bash_cv_unusable_rtsigs=yes, bash_cv_unusable_rtsigs=no,
+}
+]])], [bash_cv_unusable_rtsigs=yes], [bash_cv_unusable_rtsigs=no],
     [AC_MSG_WARN(cannot check real-time signals if cross compiling -- defaulting to yes)
      bash_cv_unusable_rtsigs=yes]
 )])
@@ -1767,48 +1781,43 @@ fi
 
 AC_CHECK_FUNCS(iswlower iswupper towlower towupper iswctype)
 
-AC_CACHE_CHECK([for nl_langinfo and CODESET], bash_cv_langinfo_codeset,
-[AC_TRY_LINK(
-[#include <langinfo.h>],
-[char* cs = nl_langinfo(CODESET);],
-bash_cv_langinfo_codeset=yes, bash_cv_langinfo_codeset=no)])
-if test $bash_cv_langinfo_codeset = yes; then
-  AC_DEFINE(HAVE_LANGINFO_CODESET)
-fi
+AC_REQUIRE([AM_LANGINFO_CODESET])
 
 dnl check for wchar_t in <wchar.h>
 AC_CACHE_CHECK([for wchar_t in wchar.h], bash_cv_type_wchar_t,
-[AC_TRY_COMPILE(
-[#include <wchar.h>
-],
-[
+[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
+[#include <wchar.h>]],
+[[
         wchar_t foo;
         foo = 0;
-], bash_cv_type_wchar_t=yes, bash_cv_type_wchar_t=no)])
+]] )], [bash_cv_type_wchar_t=yes], [bash_cv_type_wchar_t=no]
+)])
 if test $bash_cv_type_wchar_t = yes; then
         AC_DEFINE(HAVE_WCHAR_T, 1, [systems should define this type here])
 fi
 
 dnl check for wctype_t in <wctype.h>
 AC_CACHE_CHECK([for wctype_t in wctype.h], bash_cv_type_wctype_t,
-[AC_TRY_COMPILE(
-[#include <wctype.h>],
-[
+[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
+[#include <wctype.h>]],
+[[
         wctype_t foo;
         foo = 0;
-], bash_cv_type_wctype_t=yes, bash_cv_type_wctype_t=no)])
+]] )], [bash_cv_type_wctype_t=yes], [bash_cv_type_wctype_t=no]
+)])
 if test $bash_cv_type_wctype_t = yes; then
         AC_DEFINE(HAVE_WCTYPE_T, 1, [systems should define this type here])
 fi
 
 dnl check for wint_t in <wctype.h>
 AC_CACHE_CHECK([for wint_t in wctype.h], bash_cv_type_wint_t,
-[AC_TRY_COMPILE(
-[#include <wctype.h>],
-[
+[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
+[#include <wctype.h>]],
+[[
         wint_t foo;
         foo = 0;
-], bash_cv_type_wint_t=yes, bash_cv_type_wint_t=no)])
+]] )], [bash_cv_type_wint_t=yes], [bash_cv_type_wint_t=no]
+)])
 if test $bash_cv_type_wint_t = yes; then
         AC_DEFINE(HAVE_WINT_T, 1, [systems should define this type here])
 fi
@@ -1816,7 +1825,7 @@ fi
 dnl check for broken wcwidth
 AC_CACHE_CHECK([for wcwidth broken with unicode combining characters],
 bash_cv_wcwidth_broken,
-[AC_TRY_RUN([
+[AC_RUN_IFELSE([AC_LANG_SOURCE([[
 #include <unistd.h>
 #include <stdlib.h>
 #include <stdio.h>
@@ -1835,8 +1844,9 @@ char    **v;
         w = wcwidth (0x0301);
         exit (w == 0);  /* exit 0 if wcwidth broken */
 }
-],
-bash_cv_wcwidth_broken=yes, bash_cv_wcwidth_broken=no, bash_cv_wcwidth_broken=no)])
+]])], [bash_cv_wcwidth_broken=yes], [bash_cv_wcwidth_broken=no],
+      [bash_cv_wcwidth_broken=no]
+)])
 if test "$bash_cv_wcwidth_broken" = yes; then
         AC_DEFINE(WCWIDTH_BROKEN, 1, [wcwidth is usually not broken])
 fi
@@ -1886,7 +1896,7 @@ CFLAGS="$CFLAGS -I${ac_cv_rl_includedir}"
 LDFLAGS="$LDFLAGS -L${ac_cv_rl_libdir}"
 
 AC_CACHE_VAL(ac_cv_rl_version,
-[AC_TRY_RUN([
+[AC_RUN_IFELSE([AC_LANG_SOURCE([[
 #include <stdio.h>
 #include <readline/readline.h>
 #include <stdlib.h>
@@ -1907,10 +1917,11 @@ main()
        fclose(fp);
        exit(0);
 }
-],
-ac_cv_rl_version=`cat conftest.rlv`,
-ac_cv_rl_version='0.0',
-ac_cv_rl_version='8.0')])
+]])],
+[ac_cv_rl_version=`cat conftest.rlv`],
+[ac_cv_rl_version='0.0'],
+[ac_cv_rl_version='8.0']
+)])
 
 CFLAGS="$_save_CFLAGS"
 LDFLAGS="$_save_LDFLAGS"
@@ -1973,57 +1984,11 @@ AC_MSG_RESULT($ac_cv_rl_version)
 fi
 ])
 
-AC_DEFUN(BASH_FUNC_CTYPE_NONASCII,
-[
-AC_MSG_CHECKING(whether the ctype macros accept non-ascii characters)
-AC_CACHE_VAL(bash_cv_func_ctype_nonascii,
-[AC_TRY_RUN([
-#ifdef HAVE_LOCALE_H
-#include <locale.h>
-#endif
-#include <stdio.h>
-#include <ctype.h>
-#include <stdlib.h>
-
-int
-main(c, v)
-int    c;
-char   *v[];
-{
-       char    *deflocale;
-       unsigned char x;
-       int     r1, r2;
-
-#ifdef HAVE_SETLOCALE
-       /* We take a shot here.  If that locale is not known, try the
-          system default.  We try this one because '\342' (226) is
-          known to be a printable character in that locale. */
-       deflocale = setlocale(LC_ALL, "en_US.ISO8859-1");
-       if (deflocale == 0)
-               deflocale = setlocale(LC_ALL, "");
-#endif
-
-       x = '\342';
-       r1 = isprint(x);
-       x -= 128;
-       r2 = isprint(x);
-       exit (r1 == 0 || r2 == 0);
-}
-], bash_cv_func_ctype_nonascii=yes, bash_cv_func_ctype_nonascii=no,
-   [AC_MSG_WARN(cannot check ctype macros if cross compiling -- defaulting to no)
-    bash_cv_func_ctype_nonascii=no]
-)])
-AC_MSG_RESULT($bash_cv_func_ctype_nonascii)
-if test $bash_cv_func_ctype_nonascii = yes; then
-AC_DEFINE(CTYPE_NON_ASCII)
-fi
-])
-
 AC_DEFUN(BASH_CHECK_WCONTINUED,
 [
 AC_MSG_CHECKING(whether WCONTINUED flag to waitpid is unavailable or available but broken)
 AC_CACHE_VAL(bash_cv_wcontinued_broken,
-[AC_TRY_RUN([
+[AC_RUN_IFELSE([AC_LANG_SOURCE([[
 #include <sys/types.h>
 #include <sys/wait.h>
 #include <unistd.h>
@@ -2044,7 +2009,7 @@ main()
        else
                exit (0);
 }
-], bash_cv_wcontinued_broken=no,bash_cv_wcontinued_broken=yes,
+]])], [bash_cv_wcontinued_broken=no], [bash_cv_wcontinued_broken=yes],
    [AC_MSG_WARN(cannot check WCONTINUED if cross compiling -- defaulting to no)
     bash_cv_wcontinued_broken=no]
 )])
@@ -2060,7 +2025,7 @@ dnl
 
 
 AC_DEFUN([AM_PATH_LISPDIR],
- [AC_ARG_WITH(lispdir, AC_HELP_STRING([--with-lispdir], [override the default lisp directory]),
+ [AC_ARG_WITH(lispdir, AS_HELP_STRING([--with-lispdir], [override the default lisp directory]),
   [ lispdir="$withval" 
     AC_MSG_CHECKING([where .elc files should go])
     AC_MSG_RESULT([$lispdir])],
@@ -2097,7 +2062,7 @@ AC_DEFUN([BASH_FUNC_SNPRINTF],
   AC_CHECK_FUNCS_ONCE([snprintf])
   if test X$ac_cv_func_snprintf = Xyes; then
     AC_CACHE_CHECK([for standard-conformant snprintf], [bash_cv_func_snprintf],
-      [AC_TRY_RUN([
+      [AC_RUN_IFELSE([AC_LANG_SOURCE([[
 #include <stdio.h>
 #include <stdlib.h>
 
@@ -2108,7 +2073,7 @@ main()
   n = snprintf (0, 0, "%s", "0123456");
   exit(n != 7);
 }
-], bash_cv_func_snprintf=yes, bash_cv_func_snprintf=no,
+]])], [bash_cv_func_snprintf=yes], [bash_cv_func_snprintf=no],
    [AC_MSG_WARN([cannot check standard snprintf if cross-compiling])
     bash_cv_func_snprintf=yes]
 )])
@@ -2127,7 +2092,7 @@ AC_DEFUN([BASH_FUNC_VSNPRINTF],
   AC_CHECK_FUNCS_ONCE([vsnprintf])
   if test X$ac_cv_func_vsnprintf = Xyes; then
     AC_CACHE_CHECK([for standard-conformant vsnprintf], [bash_cv_func_vsnprintf],
-      [AC_TRY_RUN([
+      [AC_RUN_IFELSE([AC_LANG_SOURCE([[
 #if HAVE_STDARG_H
 #include <stdarg.h>
 #else
@@ -2165,7 +2130,7 @@ main()
   n = foo("%s", "0123456");
   exit(n != 7);
 }
-], bash_cv_func_vsnprintf=yes, bash_cv_func_vsnprintf=no,
+]])], [bash_cv_func_vsnprintf=yes], [bash_cv_func_vsnprintf=no],
    [AC_MSG_WARN([cannot check standard vsnprintf if cross-compiling])
     bash_cv_func_vsnprintf=yes]
 )])
@@ -2182,7 +2147,7 @@ main()
 AC_DEFUN(BASH_STRUCT_WEXITSTATUS_OFFSET,
 [AC_MSG_CHECKING(for offset of exit status in return status from wait)
 AC_CACHE_VAL(bash_cv_wexitstatus_offset,
-[AC_TRY_RUN([
+[AC_RUN_IFELSE([AC_LANG_SOURCE([[
 #include <stdlib.h>
 #include <unistd.h>
 
@@ -2216,7 +2181,7 @@ main(c, v)
 
   exit (254);
 }
-], bash_cv_wexitstatus_offset=0, bash_cv_wexitstatus_offset=$?,
+]])], [bash_cv_wexitstatus_offset=0], [bash_cv_wexitstatus_offset=$?],
    [AC_MSG_WARN(cannot check WEXITSTATUS offset if cross compiling -- defaulting to 0)
     bash_cv_wexitstatus_offset=0]
 )])
@@ -2232,13 +2197,15 @@ AC_DEFUN([BASH_FUNC_SBRK],
 [
   AC_MSG_CHECKING([for sbrk])
   AC_CACHE_VAL(ac_cv_func_sbrk,
-  [AC_TRY_LINK([#include <unistd.h>],
-  [ void *x = sbrk (4096); ],
-  ac_cv_func_sbrk=yes, ac_cv_func_sbrk=no)])
+  [AC_LINK_IFELSE(
+       [AC_LANG_PROGRAM(
+               [[#include <unistd.h>]],
+               [[ void *x = sbrk (4096); ]])],
+       [ac_cv_func_sbrk=yes],[ac_cv_func_sbrk=no])])
   AC_MSG_RESULT($ac_cv_func_sbrk)
   if test X$ac_cv_func_sbrk = Xyes; then
     AC_CACHE_CHECK([for working sbrk], [bash_cv_func_sbrk],
-      [AC_TRY_RUN([
+      [AC_RUN_IFELSE([AC_LANG_SOURCE([[
 #include <stdlib.h>
 #include <unistd.h>
 
@@ -2250,10 +2217,9 @@ main(int c, char **v)
        x = sbrk (4096);
        exit ((x == (void *)-1) ? 1 : 0);
 }
-], bash_cv_func_sbrk=yes, bash_cv_func_snprintf=sbrk,
-   [AC_MSG_WARN([cannot check working sbrk if cross-compiling])
-    bash_cv_func_sbrk=yes]
-)])
+]])],[bash_cv_func_sbrk=yes],[bash_cv_func_sbrk=no],[AC_MSG_WARN([cannot check working sbrk if cross-compiling])
+    bash_cv_func_sbrk=yes
+])])
     if test $bash_cv_func_sbrk = no; then
       ac_cv_func_sbrk=no
     fi
@@ -2267,7 +2233,7 @@ main(int c, char **v)
 AC_DEFUN(BASH_FUNC_FNMATCH_EQUIV_FALLBACK,
 [AC_MSG_CHECKING(whether fnmatch can be used to check bracket equivalence classes)
 AC_CACHE_VAL(bash_cv_fnmatch_equiv_fallback,
-[AC_TRY_RUN([
+[AC_RUN_IFELSE([AC_LANG_SOURCE([[
 #include <stdlib.h>
 #include <unistd.h>
 #include <stdio.h>
@@ -2287,8 +2253,7 @@ main (int c, char **v)
     exit (0);
   exit (1);
 }
-
-], bash_cv_fnmatch_equiv_fallback=yes, bash_cv_fnmatch_equiv_fallback=no,
+]])], [bash_cv_fnmatch_equiv_fallback=yes], [bash_cv_fnmatch_equiv_fallback=no],
    [AC_MSG_WARN(cannot check fnmatch if cross compiling -- defaulting to no)
     bash_cv_fnmatch_equiv_fallback=no]
 )])
diff --git a/alias.c b/alias.c
index cd5e99b7e04e54b9b303b10f4e59e780b1fd869a..23f967fa8167bca3f18215849bf40fe4ab448938 100644 (file)
--- a/alias.c
+++ b/alias.c
@@ -1,7 +1,7 @@
 /* alias.c -- Not a full alias, but just the kind that we use in the
    shell.  Csh style alias is somewhere else (`over there, in a box'). */
 
-/* Copyright (C) 1987-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
diff --git a/array.c b/array.c
index 6d3554bf4cc5c4ef303fe402fe0dc3ea442b1c83..910bbaad815d604ca32d9b8169bb79b98d61e690 100644 (file)
--- a/array.c
+++ b/array.c
@@ -9,7 +9,7 @@
  * chet@ins.cwru.edu
  */
 
-/* Copyright (C) 1997-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1997-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -84,7 +84,6 @@ array_create()
        ARRAY_ELEMENT   *head;
 
        r = (ARRAY *)xmalloc(sizeof(ARRAY));
-       r->type = array_indexed;
        r->max_index = -1;
        r->num_elements = 0;
        r->lastref = (ARRAY_ELEMENT *)0;
@@ -134,7 +133,6 @@ ARRAY       *a;
        if (a == 0)
                return((ARRAY *) NULL);
        a1 = array_create();
-       a1->type = a->type;
        a1->max_index = a->max_index;
        a1->num_elements = a->num_elements;
        for (ae = element_forw(a->head); ae != a->head; ae = element_forw(ae)) {
@@ -161,7 +159,6 @@ ARRAY_ELEMENT       *s, *e;
        arrayind_t mi;
 
        a = array_create ();
-       a->type = array->type;
 
        for (mi = 0, p = s, i = 0; p != e; p = element_forw(p), i++) {
                n = array_create_element (element_index(p), element_value(p));
@@ -796,6 +793,27 @@ ARRAY      *a;
        return (REVERSE_LIST(list, WORD_LIST *));
 }
 
+WORD_LIST *
+array_to_kvpair_list(a)
+ARRAY  *a;
+{
+       WORD_LIST       *list;
+       ARRAY_ELEMENT   *ae;
+       char            *k, *v;
+
+       if (a == 0 || array_empty(a))
+               return((WORD_LIST *)NULL);
+       list = (WORD_LIST *)NULL;
+       for (ae = element_forw(a->head); ae != a->head; ae = element_forw(ae)) {
+               k = itos(element_index(ae));
+               v = element_value(ae);
+               list = make_word_list (make_bare_word(k), list);
+               list = make_word_list (make_bare_word(v), list);
+               free(k);
+       }
+       return (REVERSE_LIST(list, WORD_LIST *));
+}
+
 ARRAY *
 array_assign_list (array, list)
 ARRAY  *array;
@@ -835,6 +853,55 @@ int        *countp;
                *countp = i;
        return (ret);
 }
+
+ARRAY *
+array_from_argv(a, vec, count)
+ARRAY  *a;
+char   **vec;
+int    count;
+{
+  arrayind_t   i;
+  ARRAY_ELEMENT        *ae;
+  char *t;
+
+  if (a == 0 || array_num_elements (a) == 0)
+    {
+      for (i = 0; i < count; i++)
+       array_insert (a, i, t);
+      return a;
+    }
+
+  /* Fast case */
+  if (array_num_elements (a) == count && count == 1)
+    {
+      ae = element_forw (a->head);
+      t = vec[0] ? savestring (vec[0]) : 0;
+      ARRAY_ELEMENT_REPLACE (ae, t);
+    }
+  else if (array_num_elements (a) <= count)
+    {
+      /* modify in array_num_elements members in place, then add */
+      ae = a->head;
+      for (i = 0; i < array_num_elements (a); i++)
+       {
+         ae = element_forw (ae);
+         t = vec[0] ? savestring (vec[0]) : 0;
+         ARRAY_ELEMENT_REPLACE (ae, t);
+       }
+      /* add any more */
+      for ( ; i < count; i++)
+       array_insert (a, i, vec[i]);
+    }
+  else
+    {
+      /* deleting elements.  it's faster to rebuild the array. */        
+      array_flush (a);
+      for (i = 0; i < count; i++)
+       array_insert (a, i, vec[i]);
+    }
+
+  return a;
+}
        
 /*
  * Return a string that is the concatenation of the elements in A from START
diff --git a/array.h b/array.h
index 189d646f2b012bc66986a2b7824b9dd305d05103..4214e8b414933d5b4fd950f5bedd9d75486a8645 100644 (file)
--- a/array.h
+++ b/array.h
@@ -1,7 +1,7 @@
 /* array.h -- definitions for the interface exported by array.c that allows
    the rest of the shell to manipulate array variables. */
 
-/* Copyright (C) 1997-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1997-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
 
 typedef intmax_t       arrayind_t;
 
-enum atype {array_indexed, array_assoc};       /* only array_indexed used */
-
 typedef struct array {
-       enum atype      type;
        arrayind_t      max_index;
-       int             num_elements;
+       arrayind_t      num_elements;
+#ifdef ALT_ARRAY_IMPLEMENTATION
+       arrayind_t      first_index;
+       arrayind_t      alloc_size;
+       struct array_element **elements;
+#else
        struct array_element *head;
        struct array_element *lastref;
+#endif
 } ARRAY;
 
 typedef struct array_element {
        arrayind_t      ind;
        char    *value;
+#ifndef ALT_ARRAY_IMPLEMENTATION
        struct array_element *next, *prev;
+#endif
 } ARRAY_ELEMENT;
 
+#define ARRAY_DEFAULT_SIZE     1024
+
 typedef int sh_ae_map_func_t PARAMS((ARRAY_ELEMENT *, void *));
 
 /* Basic operations on entire arrays */
+#ifdef ALT_ARRAY_IMPLEMENTATION
+extern void   array_alloc PARAMS((ARRAY *, arrayind_t));
+extern void   array_resize PARAMS((ARRAY *, arrayind_t));
+extern void   array_expand PARAMS((ARRAY *, arrayind_t));
+extern void   array_dispose_elements PARAMS((ARRAY_ELEMENT **));
+#endif
 extern ARRAY   *array_create PARAMS((void));
 extern void    array_flush PARAMS((ARRAY *));
 extern void    array_dispose PARAMS((ARRAY *));
 extern ARRAY   *array_copy PARAMS((ARRAY *));
+#ifndef ALT_ARRAY_IMPLEMENTATION
 extern ARRAY   *array_slice PARAMS((ARRAY *, ARRAY_ELEMENT *, ARRAY_ELEMENT *));
+#else
+extern ARRAY   *array_slice PARAMS((ARRAY *, arrayind_t, arrayind_t));
+#endif
+
 extern void    array_walk PARAMS((ARRAY   *, sh_ae_map_func_t *, void *));
 
+#ifndef ALT_ARRAY_IMPLEMENTATION
 extern ARRAY_ELEMENT *array_shift PARAMS((ARRAY *, int, int));
+#else
+extern ARRAY_ELEMENT **array_shift PARAMS((ARRAY *, int, int));
+#endif
 extern int     array_rshift PARAMS((ARRAY *, int, char *));
 extern ARRAY_ELEMENT *array_unshift_element PARAMS((ARRAY *));
 extern int     array_shift_element PARAMS((ARRAY *, char *));
@@ -81,10 +103,12 @@ extern char        *array_reference PARAMS((ARRAY *, arrayind_t));
 extern WORD_LIST *array_to_word_list PARAMS((ARRAY *));
 extern ARRAY *array_from_word_list PARAMS((WORD_LIST *));
 extern WORD_LIST *array_keys_to_word_list PARAMS((ARRAY *));
+extern WORD_LIST *array_to_kvpair_list PARAMS((ARRAY *));
 
 extern ARRAY *array_assign_list PARAMS((ARRAY *, WORD_LIST *));
 
 extern char **array_to_argv PARAMS((ARRAY *, int *));
+extern ARRAY *array_from_argv PARAMS((ARRAY *, char **, int));
 
 extern char *array_to_kvpair PARAMS((ARRAY *, int));
 extern char *array_to_assign PARAMS((ARRAY *, int));
@@ -96,22 +120,42 @@ extern ARRAY *array_from_string PARAMS((char *, char *));
 
 #define array_num_elements(a)  ((a)->num_elements)
 #define array_max_index(a)     ((a)->max_index)
+#ifndef ALT_ARRAY_IMPLEMENTATION
 #define array_first_index(a)   ((a)->head->next->ind)
 #define array_head(a)          ((a)->head)
+#define array_alloc_size(a)    ((a)->alloc_size)
+#else
+#define array_first_index(a)   ((a)->first_index)
+#define array_head(a)          ((a)->elements)
+#endif
 #define array_empty(a)         ((a)->num_elements == 0)
 
 #define element_value(ae)      ((ae)->value)
 #define element_index(ae)      ((ae)->ind)
+
+#ifndef ALT_ARRAY_IMPLEMENTATION
 #define element_forw(ae)       ((ae)->next)
 #define element_back(ae)       ((ae)->prev)
+#else
+extern arrayind_t element_forw PARAMS((ARRAY *, arrayind_t));
+extern arrayind_t element_back PARAMS((ARRAY *, arrayind_t));
+#endif
+
 
 #define set_element_value(ae, val)     ((ae)->value = (val))
 
+#ifdef ALT_ARRAY_IMPLEMENTATION
+#define set_first_index(a, i)  ((a)->first_index = (i))
+#endif
+
+#define set_max_index(a, i)    ((a)->max_index = (i))
+#define set_num_elements(a, n) ((a)->num_elements = (n))
+
 /* Convenience */
 #define array_push(a,v)        \
   do { array_rshift ((a), 1, (v)); } while (0)
 #define array_pop(a) \
-  do { array_dispose_element (array_shift ((a), 1, 0)); } while (0)
+  do { array_shift ((a), 1, AS_DISPOSE); } while (0)
 
 #define GET_ARRAY_FROM_VAR(n, v, a) \
   do { \
@@ -119,6 +163,17 @@ extern ARRAY *array_from_string PARAMS((char *, char *));
     (a) = ((v) && array_p ((v))) ? array_cell (v) : (ARRAY *)0; \
   } while (0)
 
+#define ARRAY_ELEMENT_REPLACE(ae, v) \
+  do { \
+    free ((ae)->value); \
+    (ae)->value = (v); \
+  } while (0)
+
+#ifdef ALT_ARRAY_IMPLEMENTATION
+#define ARRAY_VALUE_REPLACE(a, i, v) \
+   ARRAY_ELEMENT_REPLACE((a)->elements[(i)], (v))
+#endif
+
 #define ALL_ELEMENT_SUB(c)     ((c) == '@' || (c) == '*')
 
 /* In eval.c, but uses ARRAY * */
diff --git a/array2.c b/array2.c
new file mode 100644 (file)
index 0000000..fa8be00
--- /dev/null
+++ b/array2.c
@@ -0,0 +1,1374 @@
+/*
+ * array.c - functions to create, destroy, access, and manipulate arrays
+ *          of strings.
+ *
+ * Arrays are structs containing an array of elements and bookkeeping information.
+ * An element's index is stored with it.
+ *
+ * Chet Ramey
+ * chet@ins.cwru.edu
+ */
+
+/* Copyright (C) 1997-2021 Free Software Foundation, Inc.
+
+   This file is part of GNU Bash, the Bourne Again SHell.
+
+   Bash is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+
+   Bash is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with Bash.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "config.h"
+
+#if defined (ARRAY_VARS)
+
+#if defined (HAVE_UNISTD_H)
+#  ifdef _MINIX
+#    include <sys/types.h>
+#  endif
+#  include <unistd.h>
+#endif
+
+#include <stdio.h>
+#include "bashansi.h"
+
+#include "shell.h"
+#include "array.h"
+#include "builtins/common.h"
+
+#define ARRAY_MAX_DOUBLE       16777216
+
+static ARRAY_ELEMENT **array_copy_elements PARAMS((ARRAY *));
+static char *array_to_string_internal PARAMS((ARRAY *, arrayind_t, arrayind_t, char *, int));
+
+static char *spacesep = " ";
+
+void
+array_alloc (a, n)
+ARRAY  *a;
+arrayind_t n;
+{
+       arrayind_t i;
+
+       if (a == 0)
+               return; /* for now */
+       a->elements = (ARRAY_ELEMENT **)xmalloc (n * sizeof (ARRAY_ELEMENT *));
+       for (i = 0; i < n; i++)
+               a->elements[i] = 0;
+       a->alloc_size = n;
+}
+
+void
+array_resize (a, n)
+ARRAY  *a;
+arrayind_t n;
+{
+       ARRAY_ELEMENT **e, *ae;
+       arrayind_t i, nsize;
+
+       if (a == 0)
+               return;
+       if (a->alloc_size > 0 && n >= a->max_index && n <= a->alloc_size)
+               return;
+
+       e = (ARRAY_ELEMENT **)xrealloc (a->elements, n * sizeof (ARRAY_ELEMENT *));
+       a->elements = e;
+
+       for (i = a->alloc_size; i < n; i++)
+               a->elements[i] = (ARRAY_ELEMENT *)NULL;
+
+       a->alloc_size = n;
+}
+
+void
+array_expand (a, n)
+ARRAY  *a;
+arrayind_t     n;
+{
+       arrayind_t nsize;
+
+       if (n >= a->alloc_size) {
+               nsize = a->alloc_size ? a->alloc_size : ARRAY_DEFAULT_SIZE;
+               while (n >= nsize)
+                       nsize <<= 1;
+               if (nsize > ARRAY_MAX_DOUBLE)
+                       nsize = n + ARRAY_DEFAULT_SIZE;
+               array_resize (a, nsize);
+       }
+}
+       
+ARRAY *
+array_create()
+{
+       ARRAY   *r;
+
+       r = (ARRAY *)xmalloc(sizeof(ARRAY));
+       r->max_index = r->first_index = -1;
+       r->num_elements = 0;
+       r->alloc_size = 0;
+       r->elements = (ARRAY_ELEMENT **)NULL;
+       return(r);
+}
+
+void
+array_flush (a)
+ARRAY  *a;
+{
+       int r;
+
+       if (a == 0)
+               return;
+       if (array_empty(a)) {
+               a->max_index = a->first_index = -1;     /* paranoia */
+               return;
+       }
+       for (r = a->first_index; r <= a->max_index; r++)
+               if (a->elements[r]) {
+                       array_dispose_element(a->elements[r]);
+                       a->elements[r] = 0;
+               }
+       a->max_index = a->first_index = -1;
+       a->num_elements = 0;
+}
+
+void
+array_dispose_elements(elist)
+ARRAY_ELEMENT  **elist;
+{
+       arrayind_t i;
+
+       if (elist == 0)
+               return;
+       for (i = 0; elist[i]; i++)
+               array_dispose_element(elist[i]);
+       free(elist);
+}
+
+void
+array_dispose(a)
+ARRAY  *a;
+{
+       if (a == 0)
+               return;
+       array_dispose_elements (a->elements);
+       a->alloc_size = 0;
+       free(a);
+}
+
+static ARRAY_ELEMENT **
+array_copy_elements (a)
+ARRAY  *a;
+{
+       ARRAY_ELEMENT **ret;
+       arrayind_t i;
+
+       if (a == 0 || a->num_elements == 0)
+               return (ARRAY_ELEMENT **)NULL;
+       ret = (ARRAY_ELEMENT **)xmalloc (a->alloc_size * sizeof (ARRAY_ELEMENT *));
+       for (i = 0; i < a->alloc_size; i++)
+               ret[i] = a->elements[i] ? array_copy_element (a->elements[i]) : 0;
+       return ret;
+}
+
+ARRAY *
+array_copy(a)
+ARRAY  *a;
+{
+       ARRAY *a1;
+
+       if (a == 0)
+               return((ARRAY *) NULL);
+       a1 = array_create();
+       a1->max_index = a->max_index;
+       a1->first_index = a->first_index;
+       a1->num_elements = a->num_elements;
+
+       a1->alloc_size = a->alloc_size;
+       a1->elements = array_copy_elements (a);
+
+       return(a1);
+}
+
+/*
+ * Make and return a new array composed of the elements in array A from
+ * S to E, inclusive. The callers do the bounds checking.
+ */
+ARRAY *
+array_slice(array, s, e)
+ARRAY          *array;
+arrayind_t     s, e;
+{
+       ARRAY   *a;
+       ARRAY_ELEMENT *p, *n;
+       arrayind_t i, ni;
+       arrayind_t mi, nsize;
+
+       a = array_create ();
+
+       nsize = ARRAY_DEFAULT_SIZE;
+       while (nsize < array->alloc_size)
+               nsize <<= 1;
+       if (nsize > ARRAY_MAX_DOUBLE)
+               nsize = array->alloc_size + ARRAY_DEFAULT_SIZE;
+
+       array_resize (a, nsize);
+
+       for (i = s; i < e; i++) {
+               p = array->elements[i];
+               n = p ? array_create_element (element_index(p), element_value(p)) : (ARRAY_ELEMENT *)NULL;
+               a->elements[i] = n;             
+       }
+       a->num_elements = e - s;
+       a->max_index = e;
+       a->first_index = s;
+
+       return a;
+}
+
+/*
+ * Walk the array, calling FUNC once for each element, with the array
+ * element as the argument.
+ */
+void
+array_walk(a, func, udata)
+ARRAY  *a;
+sh_ae_map_func_t *func;
+void   *udata;
+{
+       arrayind_t i;
+       register ARRAY_ELEMENT *ae;
+
+       if (a == 0 || array_empty(a))
+               return;
+       for (i = array_first_index (a); i <= array_max_index(a); i++) {
+               if ((ae = a->elements[i]) == 0)
+                       continue;
+               if ((*func)(ae, udata) < 0)
+                       return;
+       }
+}
+
+/*
+ * Shift the array A N elements to the left.  Delete the first N elements
+ * and subtract N from the indices of the remaining elements.  If FLAGS
+ * does not include AS_DISPOSE, this returns a null-terminated array of
+ * elements so the caller can dispose of the chain.  If FLAGS includes
+ * AS_DISPOSE, this function disposes of the shifted-out elements and
+ * returns NULL.
+ */
+ARRAY_ELEMENT **
+array_shift(a, n, flags)
+ARRAY  *a;
+int    n, flags;
+{
+       ARRAY_ELEMENT **r, *ae;
+       register arrayind_t ni, ri;
+       int     i, j;
+
+       if (a == 0 || array_empty(a) || n <= 0)
+               return ((ARRAY_ELEMENT **)NULL);
+
+       r = (ARRAY_ELEMENT **)xmalloc ((n + 1) * sizeof (ARRAY_ELEMENT *));
+
+       /* Easy case; shifting out all of the elements */
+       if (n >= a->num_elements) {
+               if (flags & AS_DISPOSE) {
+                       array_flush (a);
+                       return ((ARRAY_ELEMENT **)NULL);
+               }
+               for (ri = 0, i = a->first_index; i <= a->max_index; i++)
+                       if (a->elements[i]) {
+                               r[ri++] = a->elements[i];
+                               a->elements[i] = 0;
+                       }
+
+               a->first_index = a->max_index = -1;
+               a->num_elements = 0;
+               r[ri] = (ARRAY_ELEMENT *)NULL;
+               return r;
+       }
+
+       /* Shift out the first N elements, return them in R. Handle sparse
+          arrays by skipping over NULL array elements. */
+       for (i = a->first_index, ri = 0, j = 0; j < n; i++) {
+               if ((ae = a->elements[i]) == 0)
+                       continue;
+               if (i > a->max_index)
+                       break;
+               ni = i + n;
+               j++;
+               if (ae)
+                       r[ri++] = a->elements[i];
+               a->elements[i] = a->elements[ni];
+               if (a->elements[i])
+                       element_index(a->elements[i]) = i;
+       }
+       r[ri]= (ARRAY_ELEMENT *)NULL;
+
+#ifdef DEBUG
+if (j < n)
+       itrace("array_shift: short count: j = %d n = %d", j, n);
+#endif
+
+       /* Now shift everything else, modifying the index in each element */
+       for (; i <= a->max_index; i++) {
+               ni = i + n;
+               a->elements[i] = (ni <= a->max_index) ? a->elements[ni] : (ARRAY_ELEMENT *)NULL;
+               if (a->elements[i])
+                       element_index(a->elements[i]) = i;
+       }
+
+       a->num_elements -= n;           /* modify bookkeeping information */
+       if (a->num_elements == 0)
+               a->first_index = a->max_index == -1;
+       else {
+               a->max_index -= n;
+               for (i = 0; i <= a->max_index; i++)
+                       if (a->elements[i])
+                               break;
+               a->first_index = i;
+       }
+
+       if (flags & AS_DISPOSE) {
+               for (i = 0; i < ri; i++)
+                       array_dispose_element(r[i]);
+               free (r);
+               return ((ARRAY_ELEMENT **)NULL);
+       }
+
+       return r;
+}
+
+/*
+ * Shift array A right N indices.  If S is non-null, it becomes the value of
+ * the new element 0.  Returns the number of elements in the array after the
+ * shift.
+ */
+int
+array_rshift (a, n, s)
+ARRAY  *a;
+int    n;
+char   *s;
+{
+       register ARRAY_ELEMENT  *ae, *new;
+       arrayind_t ni, nsize;
+
+       if (a == 0 || (array_empty(a) && s == 0))
+               return 0;
+       else if (n <= 0)
+               return (a->num_elements);
+
+       if (n >= a->alloc_size)
+               array_expand(a, n);
+
+       /* Shift right, adjusting the element indexes as we go */
+       for (ni = a->max_index; ni >= 0; ni--) {
+               a->elements[ni+n] = a->elements[ni];
+               if (a->elements[ni+n])
+                       element_index(a->elements[ni+n]) = ni + n;
+               a->elements[ni] = (ARRAY_ELEMENT *)NULL;
+       }
+       a->max_index += n;
+
+#if 0
+       /* Null out all the old indexes we just copied from */
+       for (ni = a->first_index; ni >= 0 && ni < n; ni++)
+               a->elements[ni] = (ARRAY_ELEMENT *)NULL;
+#endif
+       a->first_index += n;
+       
+       if (s) {
+               new = array_create_element(0, s);
+               a->elements[0] = new;
+               a->num_elements++;
+               a->first_index = 0;
+               if (array_num_elements(a) == 1)         /* array was empty */
+                       a->max_index = 0;
+       }
+
+       return (a->num_elements);
+}
+
+ARRAY_ELEMENT *
+array_unshift_element(a)
+ARRAY  *a;
+{
+       ARRAY_ELEMENT **r, *ret;
+       
+       r = array_shift (a, 1, 0);
+       ret = r[0];
+       free (r);
+       return ret;
+}
+
+int
+array_shift_element(a, v)
+ARRAY  *a;
+char   *v;
+{
+       return (array_rshift (a, 1, v));
+}
+
+ARRAY *
+array_quote(array)
+ARRAY  *array;
+{
+       register arrayind_t i;
+       ARRAY_ELEMENT   *a;
+       char    *t;
+
+       if (array == 0 || array_head(array) == 0 || array_empty(array))
+               return (ARRAY *)NULL;
+       for (i = array_first_index(array); i <= array_max_index(array); i++) {
+               if ((a = array->elements[i]) == 0)
+                       continue;
+               t = quote_string (a->value);
+               FREE(a->value);
+               a->value = t;
+       }
+       return array;
+}
+
+ARRAY *
+array_quote_escapes(array)
+ARRAY  *array;
+{
+       register arrayind_t i;
+       ARRAY_ELEMENT   *a;
+       char    *t;
+
+       if (array == 0 || array_head(array) == 0 || array_empty(array))
+               return (ARRAY *)NULL;
+       for (i = array_first_index(array); i <= array_max_index(array); i++) {
+               if ((a = array->elements[i]) == 0)
+                       continue;
+               t = quote_escapes (a->value);
+               FREE(a->value);
+               a->value = t;
+       }
+       return array;
+}
+
+ARRAY *
+array_dequote(array)
+ARRAY  *array;
+{
+       register arrayind_t i;
+       ARRAY_ELEMENT   *a;
+       char    *t;
+
+       if (array == 0 || array_head(array) == 0 || array_empty(array))
+               return (ARRAY *)NULL;
+
+       for (i = array->first_index; i <= array->max_index; i++) {
+               if ((a = array->elements[i]) == 0)
+                       continue;
+               t = dequote_string (a->value);
+               FREE(a->value);
+               a->value = t;
+       }
+       return array;
+}
+
+ARRAY *
+array_dequote_escapes(array)
+ARRAY  *array;
+{
+       register arrayind_t i;
+       ARRAY_ELEMENT   *a;
+       char    *t;
+
+       if (array == 0 || array_head(array) == 0 || array_empty(array))
+               return (ARRAY *)NULL;
+       for (i = array->first_index; i <= array->max_index; i++) {
+               if ((a = array->elements[i]) == 0)
+                       continue;
+               t = dequote_escapes (a->value);
+               FREE(a->value);
+               a->value = t;
+       }
+       return array;
+}
+
+ARRAY *
+array_remove_quoted_nulls(array)
+ARRAY  *array;
+{
+       register arrayind_t i;
+       ARRAY_ELEMENT   *a;
+
+       if (array == 0 || array_head(array) == 0 || array_empty(array))
+               return (ARRAY *)NULL;
+       for (i = array->first_index; i <= array->max_index; i++) {
+               if ((a = array->elements[i]) == 0)
+                       continue;
+               a->value = remove_quoted_nulls (a->value);
+       }
+       return array;
+}
+
+/*
+ * Return a string whose elements are the members of array A beginning at
+ * index START and spanning NELEM members.  Null elements are counted.
+ * Since arrays are sparse, unset array elements are not counted.
+ */
+char *
+array_subrange (a, start, nelem, starsub, quoted, pflags)
+ARRAY  *a;
+arrayind_t     start, nelem;
+int    starsub, quoted, pflags;
+{
+       ARRAY           *a2;
+       arrayind_t      s, e;
+       int             i;
+       char            *t;
+       WORD_LIST       *wl;
+
+       if (array_empty (a) || start > array_max_index(a))
+               return ((char *)NULL);
+
+       /*
+        * Find element with index START.  If START corresponds to an unset
+        * element (arrays can be sparse), use the first element whose index
+        * is >= START.  If START is < 0, we count START indices back from
+        * the end of A (not elements, even with sparse arrays -- START is an
+        * index).
+        */
+       for (s = start; a->elements[s] == 0 && s <= a->max_index; s++)
+               ;
+
+       if (s > a->max_index)
+               return ((char *)NULL);
+
+       /* Starting at S, take NELEM elements, inclusive. */
+       for (i = 0, e = s; e <= a->max_index && i < nelem; e++) {
+               if (a->elements[e])             /* arrays are sparse */
+                       i++;
+       }
+
+       a2 = array_slice(a, s, e);
+
+       wl = array_to_word_list(a2);
+       array_dispose(a2);
+       if (wl == 0)
+               return (char *)NULL;
+       t = string_list_pos_params(starsub ? '*' : '@', wl, quoted, pflags);    /* XXX */
+       dispose_words(wl);
+
+       return t;
+}
+
+char *
+array_patsub (a, pat, rep, mflags)
+ARRAY  *a;
+char   *pat, *rep;
+int    mflags;
+{
+       char    *t;
+       int     pchar, qflags, pflags;
+       WORD_LIST       *wl, *save;
+
+       if (a == 0 || array_head(a) == 0 || array_empty(a))
+               return ((char *)NULL);
+
+       wl = array_to_word_list(a);
+       if (wl == 0)
+               return (char *)NULL;
+
+       for (save = wl; wl; wl = wl->next) {
+               t = pat_subst (wl->word->word, pat, rep, mflags);
+               FREE (wl->word->word);
+               wl->word->word = t;
+       }
+
+       pchar = (mflags & MATCH_STARSUB) == MATCH_STARSUB ? '*' : '@';
+       qflags = (mflags & MATCH_QUOTED) == MATCH_QUOTED ? Q_DOUBLE_QUOTES : 0;
+       pflags = (mflags & MATCH_ASSIGNRHS) ? PF_ASSIGNRHS : 0;
+
+       t = string_list_pos_params (pchar, save, qflags, pflags);
+       dispose_words(save);
+
+       return t;
+}
+
+char *
+array_modcase (a, pat, modop, mflags)
+ARRAY  *a;
+char   *pat;
+int    modop;
+int    mflags;
+{
+       char    *t;
+       int     pchar, qflags, pflags;
+       WORD_LIST       *wl, *save;
+
+       if (a == 0 || array_head(a) == 0 || array_empty(a))
+               return ((char *)NULL);
+
+       wl = array_to_word_list(a);
+       if (wl == 0)
+               return ((char *)NULL);
+
+       for (save = wl; wl; wl = wl->next) {
+               t = sh_modcase(wl->word->word, pat, modop);
+               FREE(wl->word->word);
+               wl->word->word = t;
+       }
+
+       pchar = (mflags & MATCH_STARSUB) == MATCH_STARSUB ? '*' : '@';
+       qflags = (mflags & MATCH_QUOTED) == MATCH_QUOTED ? Q_DOUBLE_QUOTES : 0;
+       pflags = (mflags & MATCH_ASSIGNRHS) ? PF_ASSIGNRHS : 0;
+
+       t = string_list_pos_params (pchar, save, qflags, pflags);
+       dispose_words(save);
+
+       return t;
+}
+
+/*
+ * Allocate and return a new array element with index INDEX and value
+ * VALUE.
+ */
+ARRAY_ELEMENT *
+array_create_element(indx, value)
+arrayind_t     indx;
+char   *value;
+{
+       ARRAY_ELEMENT *r;
+
+       r = (ARRAY_ELEMENT *)xmalloc(sizeof(ARRAY_ELEMENT));
+       r->ind = indx;
+       r->value = value ? savestring(value) : (char *)NULL;
+       return(r);
+}
+
+ARRAY_ELEMENT *
+array_copy_element(ae)
+ARRAY_ELEMENT  *ae;
+{
+       return(ae ? array_create_element(element_index(ae), element_value(ae))
+                 : (ARRAY_ELEMENT *) NULL);
+}
+
+void
+array_dispose_element(ae)
+ARRAY_ELEMENT  *ae;
+{
+       if (ae) {
+               FREE(ae->value);
+               free(ae);
+       }
+}
+
+/*
+ * Add a new element with index I and value V to array A (a[i] = v).
+ */
+int
+array_insert(a, i, v)
+ARRAY  *a;
+arrayind_t     i;
+char   *v;
+{
+       register ARRAY_ELEMENT *new, *old;
+       arrayind_t nsize;
+
+       if (a == 0)
+               return(-1);
+       if (i >= a->alloc_size)
+               array_expand(a, i);
+       old = a->elements[i];
+       if (i > array_max_index(a))
+               a->max_index = i;
+       if (array_first_index(a) < 0 || i < array_first_index(a))
+               a->first_index = i;
+
+       if (old) {      /* Replacing an existing element. */
+               free(element_value(old));
+               old->value = v ? savestring (v) : (char *)NULL;
+               old->ind = i;
+               return(0);
+       } else {
+               a->elements[i] = array_create_element(i, v);
+               a->num_elements++;
+       }
+
+       return (-1);            /* problem */
+}
+
+/*
+ * Delete the element with index I from array A and return it so the
+ * caller can dispose of it.
+ */
+ARRAY_ELEMENT *
+array_remove(a, i)
+ARRAY  *a;
+arrayind_t     i;
+{
+       register ARRAY_ELEMENT *ae;
+       arrayind_t ind;
+
+       if (a == 0 || array_empty(a))
+               return((ARRAY_ELEMENT *) NULL);
+       if (i > array_max_index(a) || i < array_first_index(a))
+               return((ARRAY_ELEMENT *)NULL);
+       ae = a->elements[i];
+       a->elements[i] = 0;
+       if (ae) {
+               a->num_elements--;
+               if (a->num_elements == 0)
+                       a->first_index = a->max_index == -1;
+               if (i == array_max_index(a)) {
+                       for (ind = i; ind >= array_first_index(a); ind--)
+                               if (a->elements[ind])
+                                       break;
+                       a->max_index = ind;
+               }
+               if (i == array_first_index(a)) {
+                       for (ind = i; ind <= array_max_index(a); ind++)
+                               if (a->elements[ind])
+                                       break;
+                       a->first_index = ind;
+               }
+       }
+       return (ae);
+}
+
+/*
+ * Return the value of a[i].
+ */
+char *
+array_reference(a, i)
+ARRAY  *a;
+arrayind_t     i;
+{
+       register ARRAY_ELEMENT *ae;
+
+       if (a == 0 || array_empty(a))
+               return((char *) NULL);
+       if (i > array_max_index(a) || i < array_first_index(a))
+               return((char *)NULL);
+       ae = a->elements[i];
+
+       return(ae ? element_value(ae) : (char *)NULL);
+}
+
+/* Convenience routines for the shell to translate to and from the form used
+   by the rest of the code. */
+
+WORD_LIST *
+array_to_word_list(a)
+ARRAY  *a;
+{
+       register arrayind_t i;
+       WORD_LIST       *list;
+       ARRAY_ELEMENT   *ae;
+
+       if (a == 0 || array_empty(a))
+               return((WORD_LIST *)NULL);
+       list = (WORD_LIST *)NULL;
+
+       for (i = array_first_index(a); i <= array_max_index(a); i++) {
+               if ((ae = a->elements[i]) == 0)
+                       continue;
+               list = make_word_list (make_bare_word(element_value(ae)), list);
+       }
+       return (REVERSE_LIST(list, WORD_LIST *));
+}
+
+ARRAY *
+array_from_word_list (list)
+WORD_LIST      *list;
+{
+       ARRAY   *a;
+
+       if (list == 0)
+               return((ARRAY *)NULL);
+       a = array_create();
+       return (array_assign_list (a, list));
+}
+
+WORD_LIST *
+array_keys_to_word_list(a)
+ARRAY  *a;
+{
+       arrayind_t      ind;
+       WORD_LIST       *list;
+       ARRAY_ELEMENT   *ae;
+       char            *t;
+
+       if (a == 0 || array_empty(a))
+               return((WORD_LIST *)NULL);
+       list = (WORD_LIST *)NULL;
+       for (ind = array_first_index(a); ind <= array_max_index(a); ind++) {
+               if ((ae = a->elements[ind]) == 0)
+                       continue;
+               t = itos(element_index(ae));
+               list = make_word_list (make_bare_word(t), list);
+               free(t);
+       }
+       return (REVERSE_LIST(list, WORD_LIST *));
+}
+
+WORD_LIST *
+array_to_kvpair_list(a)
+ARRAY  *a;
+{
+       arrayind_t      ind;
+       WORD_LIST       *list;
+       ARRAY_ELEMENT   *ae;
+       char            *k, *v;
+
+       if (a == 0 || array_empty(a))
+               return((WORD_LIST *)NULL);
+       list = (WORD_LIST *)NULL;
+       for (ind = array_first_index(a); ind <= array_max_index(a); ind++) {
+               if ((ae = a->elements[ind]) == 0)
+                       continue;
+               k = itos(element_index(ae));
+               v = element_value (ae);
+               list = make_word_list (make_bare_word(k), list);
+               list = make_word_list (make_bare_word(v), list);
+               free(k);
+       }
+       return (REVERSE_LIST(list, WORD_LIST *));
+}
+
+ARRAY *
+array_assign_list (array, list)
+ARRAY  *array;
+WORD_LIST      *list;
+{
+       register WORD_LIST *l;
+       register arrayind_t i;
+
+       for (l = list, i = 0; l; l = l->next, i++)
+               array_insert(array, i, l->word->word);
+       return array;
+}
+
+char **
+array_to_argv (a, countp)
+ARRAY  *a;
+int    *countp;
+{
+       char            **ret, *t;
+       int             i;
+       arrayind_t      ind;
+       ARRAY_ELEMENT   *ae;
+
+       if (a == 0 || array_empty(a)) {
+               if (countp)
+                       *countp = 0;
+               return ((char **)NULL);
+       }
+       ret = strvec_create (array_num_elements (a) + 1);
+       i = 0;
+       for (ind = array_first_index(a); ind <= array_max_index(a); ind++) {
+               if (a->elements[ind])
+                       ret[i++] = savestring (element_value(a->elements[ind]));
+       }
+       ret[i] = (char *)NULL;
+       if (countp)
+               *countp = i;
+       return (ret);
+}
+
+ARRAY *
+array_from_argv(a, vec, count)
+ARRAY  *a;
+char   **vec;
+int    count;
+{
+       arrayind_t      i;
+       char    *t;
+
+       if (a == 0 || array_num_elements (a) == 0) {
+               for (i = 0; i < count; i++)
+                       array_insert(a, i, vec[i]);
+               return a;
+       }
+
+       /* Fast case */
+       if (array_num_elements (a) == count && count == 1) {
+               t = vec[0] ? savestring (vec[0]) : 0;
+               ARRAY_VALUE_REPLACE(a, 0, t);
+       } else if (array_num_elements (a) <= count) {
+               /* modify in array_num_elements members in place, then add */
+               for (i = 0; i < array_num_elements (a); i++) {
+                       t = vec[i] ? savestring (vec[i]) : 0;
+                       ARRAY_VALUE_REPLACE(a, i, t);
+               }
+
+               /* add any more */
+               for ( ; i < count; i++)
+                       array_insert(a, i, vec[i]);
+       } else {
+               /* deleting elements. replace the first COUNT, free the rest */
+               for (i = 0; i < count; i++) {
+                       t = vec[i] ? savestring (vec[i]) : 0;
+                       ARRAY_VALUE_REPLACE(a, i, t);
+               }
+
+               for ( ; i <= array_max_index (a); i++) {
+                       array_dispose_element(a->elements[i]);
+                       a->elements[i] = (ARRAY_ELEMENT *)NULL;
+               }
+
+               /* bookkeeping usually taken care of by array_insert */
+               set_max_index(a, count - 1);
+               set_first_index(a, 0);
+               set_num_elements(a, count);
+       }
+       return a;
+}
+
+/*
+ * Return the next non-null array element after A[IND]
+ */
+arrayind_t
+element_forw(a, ind)
+ARRAY  *a;
+arrayind_t ind;
+{
+       register arrayind_t     i;
+
+       for (i = ind + 1; i <= array_max_index(a); i++)
+               if (a->elements[i])
+                       break;
+       if (a->elements[i])
+               return i;
+       return (array_max_index(a));
+}
+
+/*
+ * Return the previous non-null array element before A[IND]
+ */
+arrayind_t
+element_back (a, ind)
+ARRAY  *a;
+arrayind_t ind;
+{
+       register arrayind_t     i;
+
+       for (i = ind - 1; i >= array_first_index(a); i--)
+               if (a->elements[i])
+                       break;
+       if (a->elements[i] && i >= array_first_index(a))
+               return i;
+       return (array_first_index(a));
+}
+
+/*
+ * Return a string that is the concatenation of the elements in A from START
+ * to END, separated by SEP.
+ */
+static char *
+array_to_string_internal (a, start, end, sep, quoted)
+ARRAY  *a;
+arrayind_t     start, end;
+char   *sep;
+int    quoted;
+{
+       arrayind_t i;
+       char    *result, *t;
+       ARRAY_ELEMENT *ae;
+       int     slen, rsize, rlen, reg;
+
+       slen = strlen(sep);
+       result = NULL;
+       for (rsize = rlen = 0, i = start; i <= end; i++) {
+               if ((ae = a->elements[i]) == 0)
+                       continue;
+               if (rsize == 0)
+                       result = (char *)xmalloc (rsize = 64);
+               if (element_value(ae)) {
+                       t = quoted ? quote_string(element_value(ae)) : element_value(ae);
+                       reg = strlen(t);
+                       RESIZE_MALLOCED_BUFFER (result, rlen, (reg + slen + 2),
+                                               rsize, rsize);
+                       strcpy(result + rlen, t);
+                       rlen += reg;
+                       if (quoted)
+                               free(t);
+                       /*
+                        * Add a separator only after non-null elements.
+                        */
+                       if (element_forw(a, i) <= end) {
+                               strcpy(result + rlen, sep);
+                               rlen += slen;
+                       }
+               }
+       }
+       if (result)
+               result[rlen] = '\0';    /* XXX */
+       return(result);
+}
+
+char *
+array_to_kvpair (a, quoted)
+ARRAY  *a;
+int    quoted;
+{
+       arrayind_t      ind;
+       char    *result, *valstr, *is;
+       char    indstr[INT_STRLEN_BOUND(intmax_t) + 1];
+       ARRAY_ELEMENT *ae;
+       int     rsize, rlen, elen;
+
+       if (a == 0 || array_empty (a))
+               return((char *)NULL);
+
+       result = (char *)xmalloc (rsize = 128);
+       result[rlen = 0] = '\0';
+
+       for (ind = array_first_index(a); ind <= array_max_index(a); ind++) {
+               if ((ae = a->elements[ind]) == 0)
+                       continue;
+               is = inttostr (element_index(ae), indstr, sizeof(indstr));
+               valstr = element_value (ae) ?
+                               (ansic_shouldquote (element_value (ae)) ?
+                                  ansic_quote (element_value(ae), 0, (int *)0) :
+                                  sh_double_quote (element_value (ae)))
+                                           : (char *)NULL;
+               elen = STRLEN (is) + 8 + STRLEN (valstr);
+               RESIZE_MALLOCED_BUFFER (result, rlen, (elen + 1), rsize, rsize);
+
+               strcpy (result + rlen, is);
+               rlen += STRLEN (is);
+               result[rlen++] = ' ';
+               if (valstr) {
+                       strcpy (result + rlen, valstr);
+                       rlen += STRLEN (valstr);
+               } else {
+                       strcpy (result + rlen, "\"\"");
+                       rlen += 2;
+               }
+
+               if (ind < array_max_index (a))
+                 result[rlen++] = ' ';
+
+               FREE (valstr);
+       }
+       RESIZE_MALLOCED_BUFFER (result, rlen, 1, rsize, 8);
+       result[rlen] = '\0';
+
+       if (quoted) {
+               /* This is not as efficient as it could be... */
+               valstr = sh_single_quote (result);
+               free (result);
+               result = valstr;
+       }
+       return(result);
+}
+
+char *
+array_to_assign (a, quoted)
+ARRAY  *a;
+int    quoted;
+{
+       arrayind_t      ind;
+       char    *result, *valstr, *is;
+       char    indstr[INT_STRLEN_BOUND(intmax_t) + 1];
+       ARRAY_ELEMENT *ae;
+       int     rsize, rlen, elen;
+
+       if (a == 0 || array_empty (a))
+               return((char *)NULL);
+
+       result = (char *)xmalloc (rsize = 128);
+       result[0] = '(';
+       rlen = 1;
+
+       for (ind = array_first_index(a); ind <= array_max_index(a); ind++) {
+               if ((ae = a->elements[ind]) == 0)
+                       continue;
+               is = inttostr (element_index(ae), indstr, sizeof(indstr));
+               valstr = element_value (ae) ?
+                               (ansic_shouldquote (element_value (ae)) ?
+                                  ansic_quote (element_value(ae), 0, (int *)0) :
+                                  sh_double_quote (element_value (ae)))
+                                           : (char *)NULL;
+               elen = STRLEN (is) + 8 + STRLEN (valstr);
+               RESIZE_MALLOCED_BUFFER (result, rlen, (elen + 1), rsize, rsize);
+
+               result[rlen++] = '[';
+               strcpy (result + rlen, is);
+               rlen += STRLEN (is);
+               result[rlen++] = ']';
+               result[rlen++] = '=';
+               if (valstr) {
+                       strcpy (result + rlen, valstr);
+                       rlen += STRLEN (valstr);
+               }
+
+               if (ind < array_max_index(a))
+                 result[rlen++] = ' ';
+
+               FREE (valstr);
+       }
+       RESIZE_MALLOCED_BUFFER (result, rlen, 1, rsize, 8);
+       result[rlen++] = ')';
+       result[rlen] = '\0';
+       if (quoted) {
+               /* This is not as efficient as it could be... */
+               valstr = sh_single_quote (result);
+               free (result);
+               result = valstr;
+       }
+       return(result);
+}
+
+char *
+array_to_string (a, sep, quoted)
+ARRAY  *a;
+char   *sep;
+int    quoted;
+{
+       if (a == 0)
+               return((char *)NULL);
+       if (array_empty(a))
+               return(savestring(""));
+       return (array_to_string_internal (a, array_first_index(a), array_max_index(a), sep, quoted));
+}
+
+#if defined (INCLUDE_UNUSED) || defined (TEST_ARRAY)
+/*
+ * Return an array consisting of elements in S, separated by SEP
+ */
+ARRAY *
+array_from_string(s, sep)
+char   *s, *sep;
+{
+       ARRAY   *a;
+       WORD_LIST *w;
+
+       if (s == 0)
+               return((ARRAY *)NULL);
+       w = list_string (s, sep, 0);
+       if (w == 0)
+               return((ARRAY *)NULL);
+       a = array_from_word_list (w);
+       return (a);
+}
+#endif
+
+#if defined (TEST_ARRAY)
+/*
+ * To make a running version, compile -DTEST_ARRAY and link with:
+ *     xmalloc.o syntax.o lib/malloc/libmalloc.a lib/sh/libsh.a
+ */
+int interrupt_immediately = 0;
+
+int
+signal_is_trapped(s)
+int    s;
+{
+       return 0;
+}
+
+void
+fatal_error(const char *s, ...)
+{
+       fprintf(stderr, "array_test: fatal memory error\n");
+       abort();
+}
+
+void
+programming_error(const char *s, ...)
+{
+       fprintf(stderr, "array_test: fatal programming error\n");
+       abort();
+}
+
+WORD_DESC *
+make_bare_word (s)
+const char     *s;
+{
+       WORD_DESC *w;
+
+       w = (WORD_DESC *)xmalloc(sizeof(WORD_DESC));
+       w->word = s ? savestring(s) : savestring ("");
+       w->flags = 0;
+       return w;
+}
+
+WORD_LIST *
+make_word_list(x, l)
+WORD_DESC      *x;
+WORD_LIST      *l;
+{
+       WORD_LIST *w;
+
+       w = (WORD_LIST *)xmalloc(sizeof(WORD_LIST));
+       w->word = x;
+       w->next = l;
+       return w;
+}
+
+WORD_LIST *
+list_string(s, t, i)
+char   *s, *t;
+int    i;
+{
+       char    *r, *a;
+       WORD_LIST       *wl;
+
+       if (s == 0)
+               return (WORD_LIST *)NULL;
+       r = savestring(s);
+       wl = (WORD_LIST *)NULL;
+       a = strtok(r, t);
+       while (a) {
+               wl = make_word_list (make_bare_word(a), wl);
+               a = strtok((char *)NULL, t);
+       }
+       return (REVERSE_LIST (wl, WORD_LIST *));
+}
+
+GENERIC_LIST *
+list_reverse (list)
+GENERIC_LIST   *list;
+{
+       register GENERIC_LIST *next, *prev;
+
+       for (prev = 0; list; ) {
+               next = list->next;
+               list->next = prev;
+               prev = list;
+               list = next;
+       }
+       return prev;
+}
+
+char *
+pat_subst(s, t, u, i)
+char   *s, *t, *u;
+int    i;
+{
+       return ((char *)NULL);
+}
+
+char *
+quote_string(s)
+char   *s;
+{
+       return savestring(s);
+}
+
+print_element(ae)
+ARRAY_ELEMENT  *ae;
+{
+       char    lbuf[INT_STRLEN_BOUND (intmax_t) + 1];
+
+       printf("array[%s] = %s\n",
+               inttostr (element_index(ae), lbuf, sizeof (lbuf)),
+               element_value(ae));
+}
+
+print_array(a)
+ARRAY  *a;
+{
+       printf("\n");
+       array_walk(a, print_element, (void *)NULL);
+}
+
+main()
+{
+       ARRAY   *a, *new_a, *copy_of_a;
+       ARRAY_ELEMENT   *ae, *aew;
+       char    *s;
+
+       a = array_create();
+       array_insert(a, 1, "one");
+       array_insert(a, 7, "seven");
+       array_insert(a, 4, "four");
+       array_insert(a, 1029, "one thousand twenty-nine");
+       array_insert(a, 12, "twelve");
+       array_insert(a, 42, "forty-two");
+       print_array(a);
+       s = array_to_string (a, " ", 0);
+       printf("s = %s\n", s);
+       copy_of_a = array_from_string(s, " ");
+       printf("copy_of_a:");
+       print_array(copy_of_a);
+       array_dispose(copy_of_a);
+       printf("\n");
+       free(s);
+       ae = array_remove(a, 4);
+       array_dispose_element(ae);
+       ae = array_remove(a, 1029);
+       array_dispose_element(ae);
+       array_insert(a, 16, "sixteen");
+       print_array(a);
+       s = array_to_string (a, " ", 0);
+       printf("s = %s\n", s);
+       copy_of_a = array_from_string(s, " ");
+       printf("copy_of_a:");
+       print_array(copy_of_a);
+       array_dispose(copy_of_a);
+       printf("\n");
+       free(s);
+       array_insert(a, 2, "two");
+       array_insert(a, 1029, "new one thousand twenty-nine");
+       array_insert(a, 0, "zero");
+       array_insert(a, 134, "");
+       print_array(a);
+       s = array_to_string (a, ":", 0);
+       printf("s = %s\n", s);
+       copy_of_a = array_from_string(s, ":");
+       printf("copy_of_a:");
+       print_array(copy_of_a);
+       array_dispose(copy_of_a);
+       printf("\n");
+       free(s);
+       new_a = array_copy(a);
+       print_array(new_a);
+       s = array_to_string (new_a, ":", 0);
+       printf("s = %s\n", s);
+       copy_of_a = array_from_string(s, ":");
+       free(s);
+       printf("copy_of_a:");
+       print_array(copy_of_a);
+       array_shift(copy_of_a, 2, AS_DISPOSE);
+       printf("copy_of_a shifted by two:");
+       print_array(copy_of_a);
+       ae = array_shift(copy_of_a, 2, 0);
+       printf("copy_of_a shifted by two:");
+       print_array(copy_of_a);
+       for ( ; ae; ) {
+               aew = element_forw(ae);
+               array_dispose_element(ae);
+               ae = aew;
+       }
+       array_rshift(copy_of_a, 1, (char *)0);
+       printf("copy_of_a rshift by 1:");
+       print_array(copy_of_a);
+       array_rshift(copy_of_a, 2, "new element zero");
+       printf("copy_of_a rshift again by 2 with new element zero:");
+       print_array(copy_of_a);
+       s = array_to_assign(copy_of_a, 0);
+       printf("copy_of_a=%s\n", s);
+       free(s);
+       ae = array_shift(copy_of_a, array_num_elements(copy_of_a), 0);
+       for ( ; ae; ) {
+               aew = element_forw(ae);
+               array_dispose_element(ae);
+               ae = aew;
+       }
+       array_dispose(copy_of_a);
+       printf("\n");
+       array_dispose(a);
+       array_dispose(new_a);
+}
+
+#endif /* TEST_ARRAY */
+#endif /* ARRAY_VARS */
index 9338dfc719605536f42b334285758e2238aabc4f..2c05d15b45f7dd91d84ff6354f26b78d967e20b7 100644 (file)
@@ -1,6 +1,6 @@
 /* arrayfunc.c -- High-level array functions used by other parts of the shell. */
 
-/* Copyright (C) 2001-2020 Free Software Foundation, Inc.
+/* Copyright (C) 2001-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -53,14 +53,14 @@ int assoc_expand_once = 0;
 int array_expand_once = 0;
 
 static SHELL_VAR *bind_array_var_internal PARAMS((SHELL_VAR *, arrayind_t, char *, char *, int));
-static SHELL_VAR *assign_array_element_internal PARAMS((SHELL_VAR *, char *, char *, char *, int, char *, int));
+static SHELL_VAR *assign_array_element_internal PARAMS((SHELL_VAR *, char *, char *, char *, int, char *, int, array_eltstate_t *));
 
 static void assign_assoc_from_kvlist PARAMS((SHELL_VAR *, WORD_LIST *, HASH_TABLE *, int));
 
 static char *quote_assign PARAMS((const char *));
 static void quote_array_assignment_chars PARAMS((WORD_LIST *));
 static char *quote_compound_array_word PARAMS((char *, int));
-static char *array_value_internal PARAMS((const char *, int, int, int *, arrayind_t *));
+static char *array_value_internal PARAMS((const char *, int, int, array_eltstate_t *));
 
 /* Standard error message to use when encountering an invalid array subscript */
 const char * const bash_badsub_errmsg = N_("bad array subscript");
@@ -318,19 +318,44 @@ bind_assoc_variable (entry, name, key, value, flags)
   return (bind_assoc_var_internal (entry, assoc_cell (entry), key, value, flags));
 }
 
+inline void
+init_eltstate (array_eltstate_t *estatep)
+{
+  if (estatep)
+    {
+      estatep->type = ARRAY_INVALID;
+      estatep->subtype = 0;
+      estatep->key = estatep->value = 0;
+      estatep->ind = INTMAX_MIN;
+    }
+}
+
+inline void
+flush_eltstate (array_eltstate_t *estatep)
+{
+  if (estatep)
+    FREE (estatep->key);
+}
+
 /* Parse NAME, a lhs of an assignment statement of the form v[s], and
    assign VALUE to that array element by calling bind_array_variable().
    Flags are ASS_ assignment flags */
 SHELL_VAR *
-assign_array_element (name, value, flags)
+assign_array_element (name, value, flags, estatep)
      char *name, *value;
      int flags;
+     array_eltstate_t *estatep;
 {
   char *sub, *vname;
-  int sublen, isassoc;
+  int sublen, isassoc, avflags;
   SHELL_VAR *entry;
 
-  vname = array_variable_name (name, (flags & ASS_NOEXPAND) != 0, &sub, &sublen);
+  avflags = 0;
+  if (flags & ASS_NOEXPAND)
+    avflags |= AV_NOEXPAND;
+  if (flags & ASS_ONEWORD)
+    avflags |= AV_ONEWORD;
+  vname = array_variable_name (name, avflags, &sub, &sublen);
 
   if (vname == 0)
     return ((SHELL_VAR *)NULL);
@@ -338,21 +363,36 @@ assign_array_element (name, value, flags)
   entry = find_variable (vname);
   isassoc = entry && assoc_p (entry);
 
-  if (((isassoc == 0 || (flags & ASS_NOEXPAND) == 0) && (ALL_ELEMENT_SUB (sub[0]) && sub[1] == ']')) || (sublen <= 1))
+  /* We don't allow assignment to `*' or `@' associative array keys if the
+     caller hasn't told us the subscript has already been expanded
+     (ASS_NOEXPAND). If the caller has explicitly told us it's ok
+     (ASS_ALLOWALLSUB) we allow it. */
+  if (((isassoc == 0 || (flags & (ASS_NOEXPAND|ASS_ALLOWALLSUB)) == 0) &&
+       (ALL_ELEMENT_SUB (sub[0]) && sub[1] == ']')) ||
+      (sublen <= 1) ||
+      (sub[sublen] != '\0'))           /* sanity check */
     {
       free (vname);
       err_badarraysub (name);
       return ((SHELL_VAR *)NULL);
     }
 
-  entry = assign_array_element_internal (entry, name, vname, sub, sublen, value, flags);
+  entry = assign_array_element_internal (entry, name, vname, sub, sublen, value, flags, estatep);
+
+#if ARRAY_EXPORT
+  if (entry && exported_p (entry))
+    {
+      INVALIDATE_EXPORTSTR (entry);
+      array_needs_making = 1;
+    }
+#endif
 
   free (vname);
   return entry;
 }
 
 static SHELL_VAR *
-assign_array_element_internal (entry, name, vname, sub, sublen, value, flags)
+assign_array_element_internal (entry, name, vname, sub, sublen, value, flags, estatep)
      SHELL_VAR *entry;
      char *name;               /* only used for error messages */
      char *vname;
@@ -360,15 +400,19 @@ assign_array_element_internal (entry, name, vname, sub, sublen, value, flags)
      int sublen;
      char *value;
      int flags;
+     array_eltstate_t *estatep;
 {
-  char *akey;
+  char *akey, *nkey;
   arrayind_t ind;
+  char *newval;
+
+  /* rely on the caller to initialize estatep */
 
   if (entry && assoc_p (entry))
     {
       sub[sublen-1] = '\0';
       if ((flags & ASS_NOEXPAND) == 0)
-       akey = expand_assignment_string_to_string (sub, 0);     /* [ */
+       akey = expand_subscript_string (sub, 0);        /* [ */
       else
        akey = savestring (sub);
       sub[sublen-1] = ']';
@@ -378,7 +422,15 @@ assign_array_element_internal (entry, name, vname, sub, sublen, value, flags)
          FREE (akey);
          return ((SHELL_VAR *)NULL);
        }
+      if (estatep)
+       nkey = savestring (akey);       /* assoc_insert/assoc_replace frees akey */
       entry = bind_assoc_variable (entry, vname, akey, value, flags);
+      if (estatep)
+       {
+         estatep->type = ARRAY_ASSOC;
+         estatep->key = nkey;
+         estatep->value = entry ? assoc_reference (assoc_cell (entry), nkey) : 0;
+       }
     }
   else
     {
@@ -392,6 +444,12 @@ assign_array_element_internal (entry, name, vname, sub, sublen, value, flags)
          return ((SHELL_VAR *)NULL);
        }
       entry = bind_array_variable (vname, ind, value, flags);
+      if (estatep)
+       {
+         estatep->type = ARRAY_INDEXED;
+         estatep->ind = ind;
+         estatep->value = entry ? array_reference (array_cell (entry), ind) : 0;
+       }
     }
 
   return (entry);
@@ -446,6 +504,8 @@ find_or_make_array_variable (name, flags)
       report_error (_("%s: cannot convert indexed to associative array"), name);
       return ((SHELL_VAR *)NULL);
     }
+  else if (flags & 2)
+    var = assoc_p (var) ? var : convert_var_to_assoc (var);
   else if (array_p (var) == 0 && assoc_p (var) == 0)
     var = convert_var_to_array (var);
 
@@ -523,8 +583,17 @@ expand_compound_array_assignment (var, value, flags)
      shell expansions including pathname generation and word splitting. */
   /* First we split the string on whitespace, using the shell parser
      (ksh93 seems to do this). */
+  /* XXX - this needs a rethink, maybe use split_at_delims */
   list = parse_string_to_word_list (val, 1, "array assign");
 
+  /* If the parser has quoted CTLESC and CTNLNUL with CTLESC in unquoted
+     words, we need to remove those here because the code below assumes
+     they are there because they exist in the original word. */
+  /* XXX - if we rethink parse_string_to_word_list above, change this. */
+  for (nlist = list; nlist; nlist = nlist->next)
+    if ((nlist->word->flags & W_QUOTED) == 0)
+      remove_quoted_escapes (nlist->word->word);
+
   /* Note that we defer expansion of the assignment statements for associative
      arrays here, so we don't have to scan the subscript and find the ending
      bracket twice. See the caller below. */
@@ -573,7 +642,7 @@ assign_assoc_from_kvlist (var, nlist, h, flags)
       if (list->next)
         list = list->next;
 
-      akey = expand_assignment_string_to_string (k, 0);
+      akey = expand_subscript_string (k, 0);
       if (akey == 0 || *akey == 0)
        {
          err_badarraysub (k);
@@ -581,7 +650,7 @@ assign_assoc_from_kvlist (var, nlist, h, flags)
          continue;
        }             
 
-      aval = expand_assignment_string_to_string (v, 0);
+      aval = expand_subscript_string (v, 0);
       if (aval == 0)
        {
          aval = (char *)xmalloc (1);
@@ -606,10 +675,13 @@ char *
 expand_and_quote_kvpair_word (w)
      char *w;
 {
-  char *t, *r;
+  char *r, *s, *t;
 
-  t = w ? expand_assignment_string_to_string (w, 0) : 0;
-  r = sh_single_quote (t ? t : "");
+  t = w ? expand_subscript_string (w, 0) : 0;
+  s = (t && strchr (t, CTLESC)) ? quote_escapes (t) : t;
+  r = sh_single_quote (s ? s : "");
+  if (s != t)
+    free (s);
   free (t);
   return r;
 }
@@ -709,13 +781,10 @@ assign_compound_array_list (var, nlist, flags)
              continue;
            }
 
-         if (ALL_ELEMENT_SUB (w[1]) && len == 2)
+         if (ALL_ELEMENT_SUB (w[1]) && len == 2 && array_p (var))
            {
              set_exit_status (EXECUTION_FAILURE);
-             if (assoc_p (var))
-               report_error (_("%s: invalid associative array key"), w);
-             else
-               report_error (_("%s: cannot assign to non-numeric index"), w);
+             report_error (_("%s: cannot assign to non-numeric index"), w);
              continue;
            }
 
@@ -737,7 +806,7 @@ assign_compound_array_list (var, nlist, flags)
            {
              /* This is not performed above, see expand_compound_array_assignment */
              w[len] = '\0';    /*[*/
-             akey = expand_assignment_string_to_string (w+1, 0);
+             akey = expand_subscript_string (w+1, 0);
              w[len] = ']';
              /* And we need to expand the value also, see below */
              if (akey == 0 || *akey == 0)
@@ -773,7 +842,7 @@ assign_compound_array_list (var, nlist, flags)
       /* See above; we need to expand the value here */
       if (assoc_p (var))
        {
-         val = expand_assignment_string_to_string (val, 0);
+         val = expand_subscript_string (val, 0);
          if (val == 0)
            {
              val = (char *)xmalloc (1);
@@ -888,26 +957,33 @@ quote_compound_array_word (w, type)
   int ind, wlen, i;
 
   if (w[0] != LBRACK)
-    return (sh_single_quote (w));
+    return (sh_single_quote (w));      /* XXX - quote CTLESC */
   ind = skipsubscript (w, 0, 0);
   if (w[ind] != RBRACK)
-    return (sh_single_quote (w));
+    return (sh_single_quote (w));      /* XXX - quote CTLESC */
 
   wlen = strlen (w);
   w[ind] = '\0';
-  sub = sh_single_quote (w+1);
+  t = (strchr (w+1, CTLESC)) ? quote_escapes (w+1) : w+1;
+  sub = sh_single_quote (t);
+  if (t != w+1)
+   free (t);
   w[ind] = RBRACK;
 
   nword = xmalloc (wlen * 4 + 5);      /* wlen*4 is max single quoted length */
   nword[0] = LBRACK;
   i = STRLEN (sub);
   memcpy (nword+1, sub, i);
+  free (sub);
   i++;                         /* accommodate the opening LBRACK */
   nword[i++] = w[ind++];       /* RBRACK */
   if (w[ind] == '+')
     nword[i++] = w[ind++];
   nword[i++] = w[ind++];
-  value = sh_single_quote (w + ind);
+  t = (strchr (w+ind, CTLESC)) ? quote_escapes (w+ind) : w+ind;
+  value = sh_single_quote (t);
+  if (t != w+ind)
+   free (t);
   strcpy (nword + i, value);
 
   return nword;
@@ -925,19 +1001,22 @@ expand_and_quote_assoc_word (w, type)
      char *w;
      int type;
 {
-  char *nword, *key, *value, *t;
+  char *nword, *key, *value, *s, *t;
   int ind, wlen, i;
 
   if (w[0] != LBRACK)
-    return (sh_single_quote (w));     
+    return (sh_single_quote (w));      /* XXX - quote_escapes */
   ind = skipsubscript (w, 0, 0);
   if (w[ind] != RBRACK)
-    return (sh_single_quote (w));
+    return (sh_single_quote (w));      /* XXX - quote_escapes */
 
   w[ind] = '\0';
-  t = expand_assignment_string_to_string (w+1, 0);
+  t = expand_subscript_string (w+1, 0);
+  s = (t && strchr (t, CTLESC)) ? quote_escapes (t) : t;
+  key = sh_single_quote (s ? s : "");
+  if (s != t)
+    free (s);
   w[ind] = RBRACK;
-  key = sh_single_quote (t ? t : "");
   free (t);
 
   wlen = STRLEN (key);
@@ -951,8 +1030,11 @@ expand_and_quote_assoc_word (w, type)
     nword[i++] = w[ind++];
   nword[i++] = w[ind++];
 
-  t = expand_assignment_string_to_string (w+ind, 0);
-  value = sh_single_quote (t ? t : "");
+  t = expand_subscript_string (w+ind, 0);
+  s = (t && strchr (t, CTLESC)) ? quote_escapes (t) : t;
+  value = sh_single_quote (s ? s : "");
+  if (s != t)
+    free (s);
   free (t);
   nword = xrealloc (nword, wlen + 5 + STRLEN (value));
   strcpy (nword + i, value);
@@ -972,7 +1054,7 @@ quote_compound_array_list (list, type)
      WORD_LIST *list;
      int type;
 {
-  char *t;
+  char *s, *t;
   WORD_LIST *l;
 
   for (l = list; l; l = l->next)
@@ -980,7 +1062,12 @@ quote_compound_array_list (list, type)
       if (l->word == 0 || l->word->word == 0)
        continue;       /* should not happen, but just in case... */
       if ((l->word->flags & W_ASSIGNMENT) == 0)
-       t = sh_single_quote (l->word->word);
+       {
+         s = (strchr (l->word->word, CTLESC)) ? quote_escapes (l->word->word) : l->word->word;
+         t = sh_single_quote (s);
+         if (s != l->word->word)
+           free (s);
+       }
       else 
        t = quote_compound_array_word (l->word->word, type);
       free (l->word->word);
@@ -1020,32 +1107,34 @@ quote_array_assignment_chars (list)
 /* This function is called with SUB pointing to just after the beginning
    `[' of an array subscript and removes the array element to which SUB
    expands from array VAR.  A subscript of `*' or `@' unsets the array. */
-/* If FLAGS&1 we don't expand the subscript; we just use it as-is. */
+/* If FLAGS&1 (VA_NOEXPAND) we don't expand the subscript; we just use it
+   as-is. If FLAGS&VA_ONEWORD, we don't try to use skipsubscript to parse
+   the subscript, we just assume the subscript ends with a close bracket,
+   if one is present, and use what's inside the brackets. */
 int
 unbind_array_element (var, sub, flags)
      SHELL_VAR *var;
      char *sub;
      int flags;
 {
-  int len;
   arrayind_t ind;
   char *akey;
   ARRAY_ELEMENT *ae;
 
-  len = skipsubscript (sub, 0, (flags&1) || (var && assoc_p(var)));    /* XXX */
-  if (sub[len] != ']' || len == 0)
-    {
-      builtin_error ("%s[%s: %s", var->name, sub, _(bash_badsub_errmsg));
-      return -1;
-    }
-  sub[len] = '\0';
+  /* Assume that the caller (unset_builtin) passes us a null-terminated SUB,
+     so we don't have to use VA_ONEWORD or parse the subscript again with
+     skipsubscript(). */
 
   if (ALL_ELEMENT_SUB (sub[0]) && sub[1] == 0)
     {
       if (array_p (var) || assoc_p (var))
        {
-         unbind_variable (var->name);  /* XXX -- {array,assoc}_flush ? */
-         return (0);
+         if (flags & VA_ALLOWALL)
+           {
+             unbind_variable (var->name);      /* XXX -- {array,assoc}_flush ? */
+             return (0);
+           }
+         /* otherwise we fall through and try to unset element `@' or `*' */
        }
       else
        return -2;      /* don't allow this to unset scalar variables */
@@ -1053,7 +1142,7 @@ unbind_array_element (var, sub, flags)
 
   if (assoc_p (var))
     {
-      akey = (flags & 1) ? sub : expand_assignment_string_to_string (sub, 0);
+      akey = (flags & VA_NOEXPAND) ? sub : expand_subscript_string (sub, 0);
       if (akey == 0 || *akey == 0)
        {
          builtin_error ("[%s]: %s", sub, _(bash_badsub_errmsg));
@@ -1066,7 +1155,28 @@ unbind_array_element (var, sub, flags)
     }
   else if (array_p (var))
     {
-      ind = array_expand_index (var, sub, len+1, 0);
+      if (ALL_ELEMENT_SUB (sub[0]) && sub[1] == 0)
+       {
+         /* We can go several ways here:
+               1) remove the array (backwards compatible)
+               2) empty the array (new behavior)
+               3) do nothing; treat the `@' or `*' as an expression and throw
+                  an error
+         */
+         /* Behavior 1 */
+         if (shell_compatibility_level <= 51)
+           {
+             unbind_variable (name_cell (var));
+             return 0;
+           }
+         else /* Behavior 2 */
+           {
+             array_flush (array_cell (var));
+             return 0;
+           }
+         /* Fall through for behavior 3 */
+       }
+      ind = array_expand_index (var, sub, strlen (sub) + 1, 0);
       /* negative subscripts to indexed arrays count back from end */
       if (ind < 0)
        ind = array_max_index (array_cell (var)) + 1 + ind;
@@ -1082,7 +1192,7 @@ unbind_array_element (var, sub, flags)
   else /* array_p (var) == 0 && assoc_p (var) == 0 */
     {
       akey = this_command_name;
-      ind = array_expand_index (var, sub, len+1, 0);
+      ind = array_expand_index (var, sub, strlen (sub) + 1, 0);
       this_command_name = akey;
       if (ind == 0)
        {
@@ -1144,14 +1254,23 @@ print_assoc_assignment (var, quoted)
 
 /* Return 1 if NAME is a properly-formed array reference v[sub]. */
 
+/* Return 1 if NAME is a properly-formed array reference v[sub]. */
+
+/* When NAME is a properly-formed array reference and a non-null argument SUBP
+   is supplied, '[' and ']' that enclose the subscript are replaced by '\0',
+   and the pointer to the subscript in NAME is assigned to *SUBP, so that NAME
+   and SUBP can be later used as the array name and the subscript,
+   respectively.  When SUBP is the null pointer, the original string NAME will
+   not be modified. */
 /* We need to reserve 1 for FLAGS, which we pass to skipsubscript. */
 int
-valid_array_reference (name, flags)
-     const char *name;
+tokenize_array_reference (name, flags, subp)
+     char *name;
      int flags;
+     char **subp;
 {
   char *t;
-  int r, len, isassoc;
+  int r, len, isassoc, ssflags;
   SHELL_VAR *entry;
 
   t = mbschr (name, '[');      /* ] */
@@ -1166,10 +1285,15 @@ valid_array_reference (name, flags)
       if (r == 0)
        return 0;
 
+      ssflags = 0;
       if (isassoc && ((flags & (VA_NOEXPAND|VA_ONEWORD)) == (VA_NOEXPAND|VA_ONEWORD)))
        len = strlen (t) - 1;
       else if (isassoc)
-       len = skipsubscript (t, 0, flags&VA_NOEXPAND);  /* VA_NOEXPAND must be 1 */
+       {
+         if (flags & VA_NOEXPAND)
+           ssflags |= 1;
+         len = skipsubscript (t, 0, ssflags);
+       }
       else
        /* Check for a properly-terminated non-null subscript. */
        len = skipsubscript (t, 0, 0);          /* arithmetic expression */
@@ -1182,16 +1306,34 @@ valid_array_reference (name, flags)
         existing associative arrays, using isassoc */
       for (r = 1; r < len; r++)
        if (whitespace (t[r]) == 0)
-         return 1;
-      return 0;
-#else
+         break;
+      if (r == len)
+       return 0; /* Fail if the subscript contains only whitespaces. */
+#endif
+
+      if (subp)
+       {
+         t[0] = t[len] = '\0';
+         *subp = t + 1;
+       }
+
       /* This allows blank subscripts */
       return 1;
-#endif
     }
   return 0;
 }
 
+/* Return 1 if NAME is a properly-formed array reference v[sub]. */
+
+/* We need to reserve 1 for FLAGS, which we pass to skipsubscript. */
+int
+valid_array_reference (name, flags)
+     const char *name;
+     int flags;
+{
+  return tokenize_array_reference ((char *)name, flags, (char **)NULL);
+}
+
 /* Expand the array index beginning at S and extending LEN characters. */
 arrayind_t
 array_expand_index (var, s, len, flags)
@@ -1201,7 +1343,7 @@ array_expand_index (var, s, len, flags)
      int flags;
 {
   char *exp, *t, *savecmd;
-  int expok;
+  int expok, eflag;
   arrayind_t val;
 
   exp = (char *)xmalloc (len);
@@ -1212,11 +1354,13 @@ array_expand_index (var, s, len, flags)
     t = expand_arith_string (exp, Q_DOUBLE_QUOTES|Q_ARITH|Q_ARRAYSUB); /* XXX - Q_ARRAYSUB for future use */
   else
     t = exp;
-#endif
+#else
   t = expand_arith_string (exp, Q_DOUBLE_QUOTES|Q_ARITH|Q_ARRAYSUB);   /* XXX - Q_ARRAYSUB for future use */
+#endif
   savecmd = this_command_name;
   this_command_name = (char *)NULL;
-  val = evalexp (t, EXP_EXPANDED, &expok);     /* XXX - was 0 but we expanded exp already */
+  eflag = (shell_compatibility_level > 51) ? 0 : EXP_EXPANDED;
+  val = evalexp (t, eflag, &expok);    /* XXX - was 0 but we expanded exp already */
   this_command_name = savecmd;
   if (t != exp)
     free (t);
@@ -1245,7 +1389,7 @@ array_variable_name (s, flags, subp, lenp)
      int *lenp;
 {
   char *t, *ret;
-  int ind, ni;
+  int ind, ni, ssflags;
 
   t = mbschr (s, '[');
   if (t == 0)
@@ -1257,7 +1401,15 @@ array_variable_name (s, flags, subp, lenp)
       return ((char *)NULL);
     }
   ind = t - s;
-  ni = skipsubscript (s, ind, flags);  /* XXX - was 0 not flags */
+  if ((flags & (AV_NOEXPAND|AV_ONEWORD)) == (AV_NOEXPAND|AV_ONEWORD))
+    ni = strlen (s) - 1;
+  else
+    {
+      ssflags = 0;
+      if (flags & AV_NOEXPAND)
+       ssflags |= 1;
+      ni = skipsubscript (s, ind, ssflags);
+    }
   if (ni <= ind + 1 || s[ni] != ']')
     {
       err_badarraysub (s);
@@ -1323,19 +1475,19 @@ array_variable_part (s, flags, subp, lenp)
    is non-null it gets 1 if the array reference is name[*], 2 if the
    reference is name[@], and 0 otherwise. */
 static char *
-array_value_internal (s, quoted, flags, rtype, indp)
+array_value_internal (s, quoted, flags, estatep)
      const char *s;
-     int quoted, flags, *rtype;
-     arrayind_t *indp;
+     int quoted, flags;
+     array_eltstate_t *estatep;
 {
-  int len;
+  int len, isassoc, subtype;
   arrayind_t ind;
   char *akey;
   char *retval, *t, *temp;
   WORD_LIST *l;
   SHELL_VAR *var;
 
-  var = array_variable_part (s, (flags&AV_NOEXPAND) ? 1 : 0, &t, &len);        /* XXX */
+  var = array_variable_part (s, flags, &t, &len);      /* XXX */
 
   /* Expand the index, even if the variable doesn't exist, in case side
      effects are needed, like ${w[i++]} where w is unset. */
@@ -1347,38 +1499,53 @@ array_value_internal (s, quoted, flags, rtype, indp)
   if (len == 0)
     return ((char *)NULL);     /* error message already printed */
 
+  isassoc = var && assoc_p (var);
   /* [ */
   akey = 0;
-  if (ALL_ELEMENT_SUB (t[0]) && t[1] == ']')
+  subtype = 0;
+  if (estatep)
+    estatep->value = (char *)NULL;
+
+  /* Backwards compatibility: we only change the behavior of A[@] and A[*]
+     for associative arrays, and the caller has to request it. */
+  if ((isassoc == 0 || (flags & AV_ATSTARKEYS) == 0) && ALL_ELEMENT_SUB (t[0]) && t[1] == ']')
     {
-      if (rtype)
-       *rtype = (t[0] == '*') ? 1 : 2;
+      if (estatep)
+       estatep->subtype = (t[0] == '*') ? 1 : 2;
       if ((flags & AV_ALLOWALL) == 0)
        {
          err_badarraysub (s);
          return ((char *)NULL);
        }
-      else if (var == 0 || value_cell (var) == 0)      /* XXX - check for invisible_p(var) ? */
+      else if (var == 0 || value_cell (var) == 0)
        return ((char *)NULL);
       else if (invisible_p (var))
        return ((char *)NULL);
       else if (array_p (var) == 0 && assoc_p (var) == 0)
-       l = add_string_to_list (value_cell (var), (WORD_LIST *)NULL);
+        {
+          if (estatep)
+           estatep->type = ARRAY_SCALAR;
+         l = add_string_to_list (value_cell (var), (WORD_LIST *)NULL);
+        }
       else if (assoc_p (var))
        {
+         if (estatep)
+           estatep->type = ARRAY_ASSOC;
          l = assoc_to_word_list (assoc_cell (var));
          if (l == (WORD_LIST *)NULL)
            return ((char *)NULL);
        }
       else
        {
+         if (estatep)
+           estatep->type = ARRAY_INDEXED;
          l = array_to_word_list (array_cell (var));
          if (l == (WORD_LIST *)NULL)
            return ((char *) NULL);
        }
 
-      /* Caller of array_value takes care of inspecting rtype and duplicating
-        retval if rtype == 0, so this is not a memory leak */
+      /* Caller of array_value takes care of inspecting estatep->subtype and
+         duplicating retval if subtype == 0, so this is not a memory leak */
       if (t[0] == '*' && (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)))
        {
          temp = string_list_dollar_star (l, quoted, (flags & AV_ASSIGNRHS) ? PF_ASSIGNRHS : 0);
@@ -1392,11 +1559,11 @@ array_value_internal (s, quoted, flags, rtype, indp)
     }
   else
     {
-      if (rtype)
-       *rtype = 0;
+      if (estatep)
+       estatep->subtype = 0;
       if (var == 0 || array_p (var) || assoc_p (var) == 0)
        {
-         if ((flags & AV_USEIND) == 0 || indp == 0)
+         if ((flags & AV_USEIND) == 0 || estatep == 0)
            {
              ind = array_expand_index (var, t, len, flags);
              if (ind < 0)
@@ -1407,17 +1574,23 @@ array_value_internal (s, quoted, flags, rtype, indp)
                  if (ind < 0)
                    INDEX_ERROR();
                }
-             if (indp)
-               *indp = ind;
+             if (estatep)
+               estatep->ind = ind;
            }
-         else if (indp)
-           ind = *indp;
+         else if (estatep && (flags & AV_USEIND))
+           ind = estatep->ind;
+         if (estatep && var)
+           estatep->type = array_p (var) ? ARRAY_INDEXED : ARRAY_SCALAR;
        }
       else if (assoc_p (var))
        {
          t[len - 1] = '\0';
-         if ((flags & AV_NOEXPAND) == 0)
-           akey = expand_assignment_string_to_string (t, 0);   /* [ */
+         if (estatep)
+           estatep->type = ARRAY_ASSOC;
+         if ((flags & AV_USEIND) && estatep && estatep->key)
+           akey = savestring (estatep->key);
+         else if ((flags & AV_NOEXPAND) == 0)
+           akey = expand_subscript_string (t, 0);      /* [ */
          else
            akey = savestring (t);
          t[len - 1] = ']';
@@ -1427,26 +1600,34 @@ array_value_internal (s, quoted, flags, rtype, indp)
              INDEX_ERROR();
            }
        }
-     
-      if (var == 0 || value_cell (var) == 0)   /* XXX - check invisible_p(var) ? */
+
+      if (var == 0 || value_cell (var) == 0)
        {
-          FREE (akey);
+         FREE (akey);
          return ((char *)NULL);
        }
       else if (invisible_p (var))
        {
-          FREE (akey);
+         FREE (akey);
          return ((char *)NULL);
        }
       if (array_p (var) == 0 && assoc_p (var) == 0)
-       return (ind == 0 ? value_cell (var) : (char *)NULL);
+       retval = (ind == 0) ? value_cell (var) : (char *)NULL;
       else if (assoc_p (var))
         {
          retval = assoc_reference (assoc_cell (var), akey);
-         free (akey);
+         if (estatep && estatep->key && (flags & AV_USEIND))
+           free (akey);                /* duplicated estatep->key */
+         else if (estatep)
+           estatep->key = akey;        /* XXX - caller must manage */
+         else                          /* not saving it anywhere */
+           free (akey);
         }
       else
        retval = array_reference (array_cell (var), ind);
+
+      if (estatep)
+       estatep->value = retval;
     }
 
   return retval;
@@ -1455,12 +1636,15 @@ array_value_internal (s, quoted, flags, rtype, indp)
 /* Return a string containing the elements described by the array and
    subscript contained in S, obeying quoting for subscripts * and @. */
 char *
-array_value (s, quoted, flags, rtype, indp)
+array_value (s, quoted, flags, estatep)
      const char *s;
-     int quoted, flags, *rtype;
-     arrayind_t *indp;
+     int quoted, flags;
+     array_eltstate_t *estatep;
 {
-  return (array_value_internal (s, quoted, flags|AV_ALLOWALL, rtype, indp));
+  char *retval;
+
+  retval = array_value_internal (s, quoted, flags|AV_ALLOWALL, estatep);
+  return retval;
 }
 
 /* Return the value of the array indexing expression S as a single string.
@@ -1468,12 +1652,15 @@ array_value (s, quoted, flags, rtype, indp)
    is used by other parts of the shell such as the arithmetic expression
    evaluator in expr.c. */
 char *
-get_array_value (s, flags, rtype, indp)
+get_array_value (s, flags, estatep)
      const char *s;
-     int flags, *rtype;
-     arrayind_t *indp;
+     int flags;
+     array_eltstate_t *estatep;
 {
-  return (array_value_internal (s, 0, flags, rtype, indp));
+  char *retval;
+
+  retval = array_value_internal (s, 0, flags, estatep);
+  return retval;
 }
 
 char *
index 838e76d2d484a08322f6544fa5d8462e0f2eb0b1..69112b579cd23a22f1b93233178235841eb19a76 100644 (file)
@@ -1,6 +1,6 @@
 /* arrayfunc.h -- declarations for miscellaneous array functions in arrayfunc.c */
 
-/* Copyright (C) 2001-2020 Free Software Foundation, Inc.
+/* Copyright (C) 2001-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
 
 /* Must include variables.h before including this file. */
 
+/* An object to encapsulate the state of an array element. It can describe
+   an array assignment A[KEY]=VALUE or a[IND]=VALUE depending on TYPE, or
+   for passing array subscript references around, where VALUE would be
+   ${a[IND]} or ${A[KEY]}.  This is not dependent on ARRAY_VARS so we can
+   use it in function parameters. */
+
+/* values for `type' field */
+#define ARRAY_INVALID  -1
+#define ARRAY_SCALAR   0
+#define ARRAY_INDEXED  1
+#define ARRAY_ASSOC    2
+
+/* KEY will contain allocated memory if called through the assign_array_element
+   code path because of how assoc_insert works. */
+typedef struct element_state
+{
+  short type;                  /* assoc or indexed, says which fields are valid */  
+  short subtype;               /* `*', `@', or something else */
+  arrayind_t ind;
+  char *key;                   /* can be allocated memory */
+  char *value;
+} array_eltstate_t;
+
 #if defined (ARRAY_VARS)
 
 /* This variable means to not expand associative array subscripts more than
@@ -32,17 +55,23 @@ extern int assoc_expand_once;
 /* The analog for indexed array subscripts */
 extern int array_expand_once;
 
-/* Flags for array_value_internal and callers array_value/get_array_value */
-#define AV_ALLOWALL    0x001
+/* Flags for array_value_internal and callers array_value/get_array_value; also
+   used by array_variable_name and array_variable_part. */
+#define AV_ALLOWALL    0x001   /* treat a[@] like $@ and a[*] like $* */
 #define AV_QUOTED      0x002
 #define AV_USEIND      0x004
 #define AV_USEVAL      0x008   /* XXX - should move this */
 #define AV_ASSIGNRHS   0x010   /* no splitting, special case ${a[@]} */
 #define AV_NOEXPAND    0x020   /* don't run assoc subscripts through word expansion */
+#define AV_ONEWORD     0x040   /* not used yet */
+#define AV_ATSTARKEYS  0x080   /* accept a[@] and a[*] but use them as keys, not special values */
 
-/* Flags for valid_array_reference. Value 1 is reserved for skipsubscript() */
+/* Flags for valid_array_reference. Value 1 is reserved for skipsubscript().
+   Also used by unbind_array_element, which is currently the only function
+   that uses VA_ALLOWALL. */
 #define VA_NOEXPAND    0x001
 #define VA_ONEWORD     0x002
+#define VA_ALLOWALL    0x004   /* allow @ to mean all elements of the array */
 
 extern SHELL_VAR *convert_var_to_array PARAMS((SHELL_VAR *));
 extern SHELL_VAR *convert_var_to_assoc PARAMS((SHELL_VAR *));
@@ -51,7 +80,7 @@ extern char *make_array_variable_value PARAMS((SHELL_VAR *, arrayind_t, char *,
 
 extern SHELL_VAR *bind_array_variable PARAMS((char *, arrayind_t, char *, int));
 extern SHELL_VAR *bind_array_element PARAMS((SHELL_VAR *, arrayind_t, char *, int));
-extern SHELL_VAR *assign_array_element PARAMS((char *, char *, int));
+extern SHELL_VAR *assign_array_element PARAMS((char *, char *, int, array_eltstate_t *));
 
 extern SHELL_VAR *bind_assoc_variable PARAMS((SHELL_VAR *, char *, char *, char *, int));
 
@@ -78,22 +107,33 @@ extern void print_assoc_assignment PARAMS((SHELL_VAR *, int));
 
 extern arrayind_t array_expand_index PARAMS((SHELL_VAR *, char *, int, int));
 extern int valid_array_reference PARAMS((const char *, int));
-extern char *array_value PARAMS((const char *, int, int, int *, arrayind_t *));
-extern char *get_array_value PARAMS((const char *, int, int *, arrayind_t *));
+extern int tokenize_array_reference PARAMS((char *, int, char **));
+
+extern char *array_value PARAMS((const char *, int, int, array_eltstate_t *));
+extern char *get_array_value PARAMS((const char *, int, array_eltstate_t *));
 
 extern char *array_keys PARAMS((char *, int, int));
 
 extern char *array_variable_name PARAMS((const char *, int, char **, int *));
 extern SHELL_VAR *array_variable_part PARAMS((const char *, int, char **, int *));
 
+extern void init_eltstate (array_eltstate_t *);
+extern void flush_eltstate (array_eltstate_t *);
+
 #else
 
 #define AV_ALLOWALL    0
 #define AV_QUOTED      0
 #define AV_USEIND      0
+#define AV_USEVAL      0
 #define AV_ASSIGNRHS   0
+#define AV_NOEXPAND    0
+#define AV_ONEWORD     0
+#define AV_ATSTARKEYS  0
 
+#define VA_NOEXPAND    0
 #define VA_ONEWORD     0
+#define VA_ALLOWALL    0
 
 #endif
 
diff --git a/assoc.c b/assoc.c
index 5782e8567b65e0ff5ff6335fa4b0210bcad44daa..cbb5c7e4f8d97633fc9cdb05c049d168ad1ec979 100644 (file)
--- a/assoc.c
+++ b/assoc.c
@@ -7,7 +7,7 @@
  * chet@ins.cwru.edu
  */
 
-/* Copyright (C) 2008,2009,2011-2020 Free Software Foundation, Inc.
+/* Copyright (C) 2008,2009,2011-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -544,6 +544,30 @@ assoc_keys_to_word_list (h)
   return (assoc_to_word_list_internal (h, 1));
 }
 
+WORD_LIST *
+assoc_to_kvpair_list (h)
+     HASH_TABLE *h;
+{
+  WORD_LIST *list;
+  int i;
+  BUCKET_CONTENTS *tlist;
+  char *k, *v;
+
+  if (h == 0 || assoc_empty (h))
+    return((WORD_LIST *)NULL);
+  list = (WORD_LIST *)NULL;
+  
+  for (i = 0; i < h->nbuckets; i++)
+    for (tlist = hash_items (i, h); tlist; tlist = tlist->next)
+      {
+       k = (char *)tlist->key;
+       v = (char *)tlist->data;
+       list = make_word_list (make_bare_word (k), list);
+       list = make_word_list (make_bare_word (v), list);
+      }
+  return (REVERSE_LIST(list, WORD_LIST *));
+}
+
 char *
 assoc_to_string (h, sep, quoted)
      HASH_TABLE *h;
diff --git a/assoc.h b/assoc.h
index 78ec07386d0576d1f67c76648c3def445c2e0240..664d13740b84652546817bfcc76a1a6fdd4300a6 100644 (file)
--- a/assoc.h
+++ b/assoc.h
@@ -1,7 +1,7 @@
 /* assoc.h -- definitions for the interface exported by assoc.c that allows
    the rest of the shell to manipulate associative array variables. */
 
-/* Copyright (C) 2008,2009-2020 Free Software Foundation, Inc.
+/* Copyright (C) 2008,2009-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -60,6 +60,7 @@ extern char *assoc_to_assign PARAMS((HASH_TABLE *, int));
 
 extern WORD_LIST *assoc_to_word_list PARAMS((HASH_TABLE *));
 extern WORD_LIST *assoc_keys_to_word_list PARAMS((HASH_TABLE *));
+extern WORD_LIST *assoc_to_kvpair_list PARAMS((HASH_TABLE *));
 
 extern char *assoc_to_string PARAMS((HASH_TABLE *, char *, int));
 #endif /* _ASSOC_H_ */
index 2c33937d0d5cacfef8fd8cb72a1c32eab2633e86..dd2a544cd073288f2619decde285c092c61df51a 100644 (file)
@@ -1,6 +1,6 @@
 /* bashansi.h -- Typically included information required by picky compilers. */
 
-/* Copyright (C) 1993-2009 Free Software Foundation, Inc.
+/* Copyright (C) 1993-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -22,9 +22,6 @@
 #define _BASHANSI_H_
 
 #if defined (HAVE_STRING_H)
-#  if ! defined (STDC_HEADERS) && defined (HAVE_MEMORY_H)
-#    include <memory.h>
-#  endif
 #  include <string.h>
 #endif /* !HAVE_STRING_H */
 
index 2a05a53fa89d3af3ba250e3523d4545830fe0eaf..90cd8c34fa8f05fff43cd9e889bd0003263a1d0c 100644 (file)
@@ -1,6 +1,6 @@
 /* bashhist.c -- bash interface to the GNU history library. */
 
-/* Copyright (C) 1993-2019 Free Software Foundation, Inc.
+/* Copyright (C) 1993-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -374,8 +374,11 @@ bash_delete_history_range (first, last)
   HIST_ENTRY **discard_list;
 
   discard_list = remove_history_range (first, last);
-  for (i = 0; discard_list && discard_list[i]; i++)
+  if (discard_list == 0)
+    return 0;
+  for (i = 0; discard_list[i]; i++)
     free_history_entry (discard_list[i]);
+  free (discard_list);
   history_lines_this_session -= i;
 
   return 1;
@@ -653,6 +656,8 @@ shell_comment (line)
   char *p;
   int n;
 
+  if (dstack.delimiter_depth != 0 || (parser_state & PST_HEREDOC))
+    return 0;
   if (line == 0)
     return 0;
   for (p = line; p && *p && whitespace (*p); p++)
@@ -757,7 +762,7 @@ maybe_add_history (line)
   int is_comment;
 
   hist_last_line_added = 0;
-  is_comment = (parser_state & PST_HEREDOC) ? 0 : shell_comment (line);
+  is_comment = shell_comment (line);
 
   /* Don't use the value of history_control to affect the second
      and subsequent lines of a multi-line command (old code did
@@ -874,7 +879,7 @@ bash_add_history (line)
   add_it = 1;
   if (command_oriented_history && current_command_line_count > 1)
     {
-      is_comment = (parser_state & PST_HEREDOC) ? 0 : shell_comment (line);
+      is_comment = shell_comment (line);
 
       /* The second and subsequent lines of a here document have the trailing
         newline preserved.  We don't want to add extra newlines here, but we
@@ -887,7 +892,7 @@ bash_add_history (line)
                (current_command_line_count > 2)
         don't add a newline here. This will also take care of the literal_history
         case if the other conditions are met. */
-      if ((parser_state & PST_HEREDOC) && current_command_line_count > 2 && line[strlen (line) - 1] == '\n')
+      if ((parser_state & PST_HEREDOC) && here_doc_first_line == 0 && line[strlen (line) - 1] == '\n')
        chars_to_add = "";
       else if (current_command_line_count == current_command_line_comment+1)
        chars_to_add = "\n";
index 8ed1ac47237d71af51272017734db69b785013e0..1a4721bc8044d7b2207c022ad450426c411f8237 100644 (file)
--- a/bashjmp.h
+++ b/bashjmp.h
@@ -1,6 +1,6 @@
 /* bashjmp.h -- wrapper for setjmp.h with necessary bash definitions. */
 
-/* Copyright (C) 1987-2009 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -42,5 +42,6 @@ extern int no_longjmp_on_fatal_error;
 #define EXITPROG       3       /* Unconditionally exit the program now. */
 #define ERREXIT                4       /* Exit due to error condition */       
 #define SIGEXIT                5       /* Exit due to fatal terminating signal */
+#define EXITBLTIN      6       /* Exit due to the exit builtin. */
 
 #endif /* _BASHJMP_H_ */
index c69c0c5ee5ccfdb94b97e22a9a432d435e8e0359..c85b05b69e36b9484043a5a66d98a9a39135db8a 100644 (file)
@@ -1,6 +1,6 @@
 /* bashline.c -- Bash's interface to the readline library. */
 
-/* Copyright (C) 1987-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2022 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -56,6 +56,7 @@
 #include "shmbutil.h"
 #include "trap.h"
 #include "flags.h"
+#include "timer.h"
 
 #if defined (HAVE_MBSTR_H) && defined (HAVE_MBSCHR)
 #  include <mbstr.h>           /* mbschr */
@@ -141,6 +142,8 @@ static int bash_kill_shellword PARAMS((int, int));
 static int bash_backward_kill_shellword PARAMS((int, int));
 static int bash_transpose_shellwords PARAMS((int, int));
 
+static int bash_spell_correct_shellword PARAMS((int, int));
+
 /* Helper functions for Readline. */
 static char *restore_tilde PARAMS((char *, char *));
 static char *maybe_restore_tilde PARAMS((char *, char *));
@@ -189,6 +192,8 @@ static int return_zero PARAMS((const char *));
 
 static char *bash_dequote_filename PARAMS((char *, int));
 static char *quote_word_break_chars PARAMS((char *));
+static int bash_check_expchar PARAMS((char *, int, int *, int *));
+static void set_filename_quote_chars PARAMS((int, int, int));
 static void set_filename_bstab PARAMS((const char *));
 static char *bash_quote_filename PARAMS((char *, int, char *));
 
@@ -225,6 +230,7 @@ static char **prog_complete_matches;
 
 extern int no_symbolic_links;
 extern STRING_INT_ALIST word_token_alist[];
+extern sh_timer *read_timeout;
 
 /* SPECIFIC_COMPLETION_FUNCTIONS specifies that we have individual
    completion functions which indicate what type of completion should be
@@ -370,7 +376,8 @@ enable_hostname_completion (on_or_off)
      int on_or_off;
 {
   int old_value;
-  char *at, *nv, *nval;
+  char *nv, *nval;
+  const char *at;
 
   old_value = perform_hostname_completion;
 
@@ -430,7 +437,7 @@ enable_hostname_completion (on_or_off)
          strcpy (nval + 1, rl_completer_word_break_characters);
         }
 
-      free (rl_completer_word_break_characters);
+      free ((void *)rl_completer_word_break_characters);
       rl_completer_word_break_characters = nval;
     }
 
@@ -468,6 +475,9 @@ initialize_readline ()
   rl_add_defun ("shell-backward-kill-word", bash_backward_kill_shellword, -1);
   rl_add_defun ("shell-transpose-words", bash_transpose_shellwords, -1);
 
+  rl_add_defun ("spell-correct-word", bash_spell_correct_shellword, -1);
+  rl_bind_key_if_unbound_in_map ('s', bash_spell_correct_shellword, emacs_ctlx_keymap);
+
 #ifdef ALIAS
   rl_add_defun ("alias-expand-line", alias_expand_line, -1);
 #  ifdef BANG_HISTORY
@@ -480,6 +490,9 @@ initialize_readline ()
 
   rl_add_defun ("display-shell-version", display_shell_version, -1);
   rl_add_defun ("edit-and-execute-command", emacs_edit_and_execute_command, -1);
+#if defined (VI_MODE)
+  rl_add_defun ("vi-edit-and-execute-command", vi_edit_and_execute_command, -1);
+#endif
 
 #if defined (BRACE_COMPLETION)
   rl_add_defun ("complete-into-braces", bash_brace_completion, -1);
@@ -666,6 +679,8 @@ bashline_reset ()
   rl_attempted_completion_function = attempt_shell_completion;
   rl_completion_entry_function = NULL;
   rl_ignore_some_completions_function = filename_completion_ignore;
+
+  complete_fullquote = 1;
   rl_filename_quote_characters = default_filename_quote_characters;
   set_filename_bstab (rl_filename_quote_characters);
 
@@ -1028,6 +1043,8 @@ posix_edit_macros (count, key)
   char alias_name[3], *alias_value, *macro;
 
   c = rl_read_key ();
+  if (c <= 0)
+    return 0;
   alias_name[0] = '_';
   alias_name[1] = c;
   alias_name[2] = '\0';
@@ -1320,6 +1337,55 @@ bash_transpose_shellwords (count, key)
   return 0;
 }
 
+/* Directory name spelling correction on the current word (not shellword).
+   COUNT > 1 is not exactly correct yet. */
+static int
+bash_spell_correct_shellword (count, key)
+     int count, key;
+{
+  int opoint, wbeg, wend;
+  char *text, *newdir;
+
+  opoint = rl_point;
+  while (count)
+    {
+      bash_backward_shellword (1, key);
+      wbeg = rl_point;
+      bash_forward_shellword (1, key);
+      wend = rl_point;
+
+      if (wbeg > wend)
+       break;
+
+      text = rl_copy_text (wbeg, wend);
+
+      newdir = dirspell (text);
+      if (newdir)
+       {
+         rl_begin_undo_group ();
+         rl_delete_text (wbeg, wend);
+         rl_point = wbeg;
+         if (*newdir)
+           rl_insert_text (newdir);
+         rl_mark = wbeg;
+         rl_end_undo_group ();
+       }
+
+      free (text);
+      free (newdir);
+
+      if (rl_point >= rl_end)
+       break;
+
+      count--;
+
+      if (count)
+       bash_forward_shellword (1, key);                /* XXX */
+    }
+
+  return 0;
+}
+
 /* **************************************************************** */
 /*                                                                 */
 /*                     How To Do Shell Completion                  */
@@ -1516,6 +1582,7 @@ attempt_shell_completion (text, start, end)
   matches = (char **)NULL;
   rl_ignore_some_completions_function = filename_completion_ignore;
 
+  complete_fullquote = 1;              /* full filename quoting by default */
   rl_filename_quote_characters = default_filename_quote_characters;
   set_filename_bstab (rl_filename_quote_characters);
   set_directory_hook ();
@@ -1560,7 +1627,7 @@ attempt_shell_completion (text, start, end)
       in_command_position++;
 
       if (check_redir (ti) == 1)
-       in_command_position = 0;
+       in_command_position = -1;       /* sentinel that we're not the first word on the line */
     }
   else
     {
@@ -1569,7 +1636,7 @@ attempt_shell_completion (text, start, end)
         assignments. */
     }
 
-  if (in_command_position && invalid_completion (text, ti))
+  if (in_command_position > 0 && invalid_completion (text, ti))
     {
       rl_attempted_completion_over = 1;
       return ((char **)NULL);
@@ -1577,9 +1644,9 @@ attempt_shell_completion (text, start, end)
 
   /* Check that we haven't incorrectly flagged a closed command substitution
      as indicating we're in a command position. */
-  if (in_command_position && ti >= 0 && rl_line_buffer[ti] == '`' &&
+  if (in_command_position > 0 && ti >= 0 && rl_line_buffer[ti] == '`' &&
        *text != '`' && unclosed_pair (rl_line_buffer, end, "`") == 0)
-    in_command_position = 0;
+    in_command_position = -1;  /* not following a command separator */
 
   /* Special handling for command substitution.  If *TEXT is a backquote,
      it can be the start or end of an old-style command substitution, or
@@ -1587,8 +1654,8 @@ attempt_shell_completion (text, start, end)
      succeed.  Don't bother if readline found a single quote and we are
      completing on the substring.  */
   if (*text == '`' && rl_completion_quote_character != '\'' &&
-       (in_command_position || (unclosed_pair (rl_line_buffer, start, "`") &&
-                                unclosed_pair (rl_line_buffer, end, "`"))))
+       (in_command_position > 0 || (unclosed_pair (rl_line_buffer, start, "`") &&
+                                    unclosed_pair (rl_line_buffer, end, "`"))))
     matches = rl_completion_matches (text, command_subst_completion_function);
 
 #if defined (PROGRAMMABLE_COMPLETION)
@@ -1596,7 +1663,7 @@ attempt_shell_completion (text, start, end)
   have_progcomps = prog_completion_enabled && (progcomp_size () > 0);
   iw_compspec = progcomp_search (INITIALWORD);
   if (matches == 0 &&
-      (in_command_position == 0 || text[0] == '\0' || (in_command_position && iw_compspec)) &&
+      (in_command_position == 0 || text[0] == '\0' || (in_command_position > 0 && iw_compspec)) &&
       current_prompt_string == ps1_prompt)
     {
       int s, e, s1, e1, os, foundcs;
@@ -1718,7 +1785,7 @@ attempt_shell_completion (text, start, end)
   if (matches == 0)
     {
       dflags = 0;
-      if (in_command_position)
+      if (in_command_position > 0)
        dflags |= DEFCOMP_CMDPOS;
       matches = bash_default_completion (text, start, end, qc, dflags);
     }
@@ -1872,10 +1939,17 @@ executable_completion (filename, searching_path)
      const char *filename;
      int searching_path;
 {
-  char *f;
+  char *f, c;
   int r;
 
+  /* This gets an unquoted filename, so we need to quote special characters
+     in the filename before the completion hook gets it. */
+#if 0
   f = savestring (filename);
+#else
+  c = 0;
+  f = bash_quote_filename ((char *)filename, SINGLE_MATCH, &c);
+#endif
   bash_directory_completion_hook (&f);
   
   r = searching_path ? executable_file (f) : executable_or_directory (f);
@@ -1927,6 +2001,8 @@ command_word_completion_function (hint_text, state)
       temp = rl_variable_value ("completion-ignore-case");
       igncase = RL_BOOLEAN_VARIABLE_VALUE (temp);
 
+      old_glob_ignore_case = glob_ignore_case;
+
       if (glob_matches)
        {
          free (glob_matches);
@@ -2112,6 +2188,8 @@ globword:
     {
       if (state == 0)
        {
+         rl_filename_completion_desired = 1;
+
          glob_ignore_case = igncase;
          glob_matches = shell_glob_filename (hint, 0);
          glob_ignore_case = old_glob_ignore_case;
@@ -2232,10 +2310,16 @@ globword:
 
       if (absolute_program (hint))
        {
+#if 0
          if (igncase == 0)
            match = strncmp (val, hint, hint_len) == 0;
          else
            match = strncasecmp (val, hint, hint_len) == 0;
+#else
+         /* Why duplicate the comparison rl_filename_completion_function
+            already performs? */
+         match = 1;
+#endif
 
          /* If we performed tilde expansion, restore the original
             filename. */
@@ -2760,7 +2844,7 @@ static int
 history_and_alias_expand_line (count, ignore)
      int count, ignore;
 {
-  char *new_line;
+  char *new_line, *t;
 
   new_line = 0;
 #if defined (BANG_HISTORY)
@@ -2798,7 +2882,7 @@ static int
 shell_expand_line (count, ignore)
      int count, ignore;
 {
-  char *new_line;
+  char *new_line, *t;
   WORD_LIST *expanded_string;
   WORD_DESC *w;
 
@@ -2807,6 +2891,10 @@ shell_expand_line (count, ignore)
   new_line = history_expand_line_internal (rl_line_buffer);
 #endif
 
+  t = expand_string_dollar_quote (new_line ? new_line : rl_line_buffer, 0);
+  FREE (new_line);
+  new_line = t;
+
 #if defined (ALIAS)
   if (new_line)
     {
@@ -3191,6 +3279,8 @@ bash_directory_expansion (dirname)
       free (d);
       *dirname = nd;
     }
+  else
+    free (d);
 }
 
 /* If necessary, rewrite directory entry */
@@ -3372,38 +3462,7 @@ bash_directory_completion_hook (dirname)
   return_value = should_expand_dirname = nextch = closer = 0;
   local_dirname = *dirname;
 
-  if (t = mbschr (local_dirname, '$'))
-    {
-      should_expand_dirname = '$';
-      nextch = t[1];
-      /* Deliberately does not handle the deprecated $[...] arithmetic
-        expansion syntax */
-      if (nextch == '(')
-       closer = ')';
-      else if (nextch == '{')
-       closer = '}';
-      else
-       nextch = 0;
-
-      if (closer)
-       {
-         int p;
-         char delims[2];
-
-         delims[0] = closer; delims[1] = 0;
-         p = skip_to_delim (t, 1, delims, SD_NOJMP|SD_COMPLETE);
-         if (t[p] != closer)
-           should_expand_dirname = 0;
-       }
-    }
-  else if (local_dirname[0] == '~')
-    should_expand_dirname = '~';
-  else
-    {
-      t = mbschr (local_dirname, '`');
-      if (t && unclosed_pair (local_dirname, strlen (local_dirname), "`") == 0)
-       should_expand_dirname = '`';
-    }
+  should_expand_dirname = bash_check_expchar (local_dirname, 1, &nextch, &closer);
 
   if (should_expand_dirname && directory_exists (local_dirname, 1))
     should_expand_dirname = 0;
@@ -3422,24 +3481,8 @@ bash_directory_completion_hook (dirname)
          free (new_dirname);
          dispose_words (wl);
          local_dirname = *dirname;
-         /* XXX - change rl_filename_quote_characters here based on
-            should_expand_dirname/nextch/closer.  This is the only place
-            custom_filename_quote_characters is modified. */
-         if (rl_filename_quote_characters && *rl_filename_quote_characters)
-           {
-             int i, j, c;
-             i = strlen (default_filename_quote_characters);
-             custom_filename_quote_characters = xrealloc (custom_filename_quote_characters, i+1);
-             for (i = j = 0; c = default_filename_quote_characters[i]; i++)
-               {
-                 if (c == should_expand_dirname || c == nextch || c == closer)
-                   continue;
-                 custom_filename_quote_characters[j++] = c;
-               }
-             custom_filename_quote_characters[j] = '\0';
-             rl_filename_quote_characters = custom_filename_quote_characters;
-             set_filename_bstab (rl_filename_quote_characters);
-           }
+
+         set_filename_quote_chars (should_expand_dirname, nextch, closer);
        }
       else
        {
@@ -3494,7 +3537,16 @@ bash_directory_completion_hook (dirname)
         subsequent directory checks don't fail. */
       if (temp2 == 0 && dircomplete_spelling && dircomplete_expand)
        {
+         size_t l1, l2;
+
          temp2 = dirspell (temp1);
+         l2 = STRLEN (temp2);
+         /* Don't take matches if they are shorter than the original path */
+         if (temp2 && l2 < strlen (temp1) && STREQN (temp1, temp2, l2))
+           {
+             free (temp2);
+             temp2 = 0;
+           }
          if (temp2)
            {
              free (temp1);
@@ -3729,7 +3781,7 @@ bash_complete_filename_internal (what_to_do)
   rl_completion_func_t *orig_attempt_func;
   rl_icppfunc_t *orig_dir_func;
   rl_compignore_func_t *orig_ignore_func;
-  /*const*/ char *orig_rl_completer_word_break_characters;
+  const char *orig_rl_completer_word_break_characters;
   int r;
 
   orig_func = rl_completion_entry_function;
@@ -4099,6 +4151,95 @@ quote_word_break_chars (text)
   return ret;
 }
 
+/* Return a character in DIRNAME that will cause shell expansion to be
+   performed. If NEXTP is non-null, *NEXTP gets the expansion character that
+   follows RET (e.g., '{' or `(' for `$'). If CLOSERP is non-null, *CLOSERP
+   gets the character that should close <RET><NEXTP>. If NEED_CLOSER is non-
+   zero, any expansion pair that isn't closed causes this function to
+   return 0, which indicates that we didn't find an expansion character. It's
+   used in case DIRNAME is going to be expanded. If DIRNAME is just going to
+   be quoted, NEED_CLOSER will be 0. */
+static int
+bash_check_expchar (dirname, need_closer, nextp, closerp)
+     char *dirname;
+     int need_closer;
+     int *nextp, *closerp;
+{
+  char *t;
+  int ret, n, c;
+
+  ret = n = c = 0;
+  if (t = mbschr (dirname, '$'))
+    {
+      ret = '$';
+      n = t[1];
+      /* Deliberately does not handle the deprecated $[...] arithmetic
+        expansion syntax */
+      if (n == '(')
+       c = ')';
+      else if (n == '{')
+       c = '}';
+      else
+       n = 0;
+
+      if (c && need_closer)            /* XXX */
+       {
+         int p;
+         char delims[2];
+
+         delims[0] = c; delims[1] = 0;
+         p = skip_to_delim (t, 1, delims, SD_NOJMP|SD_COMPLETE);
+         if (t[p] != c)
+           ret = 0;
+       }
+    }
+  else if (dirname[0] == '~')
+    ret = '~';
+  else
+    {
+      t = mbschr (dirname, '`');
+      if (t)
+       {
+         if (need_closer == 0)
+           ret = '`';
+         else if (unclosed_pair (dirname, strlen (dirname), "`") == 0)
+           ret = '`';
+       }
+    }
+
+  if (nextp)
+    *nextp = n;
+  if (closerp)
+    *closerp = c;
+
+  return ret;
+}
+
+/* Make sure EXPCHAR and, if non-zero, NEXTCH and CLOSER are not in the set
+   of characters to be backslash-escaped. This is the only place
+   custom_filename_quote_characters is modified. */
+static void
+set_filename_quote_chars (expchar, nextch, closer)
+     int expchar, nextch, closer;
+{
+  int i, j, c;
+
+  if (rl_filename_quote_characters && *rl_filename_quote_characters)
+    {
+      i = strlen (default_filename_quote_characters);
+      custom_filename_quote_characters = xrealloc (custom_filename_quote_characters, i+1);
+      for (i = j = 0; c = default_filename_quote_characters[i]; i++)
+       {
+         if (c == expchar || c == nextch || c == closer)
+           continue;
+         custom_filename_quote_characters[j++] = c;
+       }
+      custom_filename_quote_characters[j] = '\0';
+      rl_filename_quote_characters = custom_filename_quote_characters;
+      set_filename_bstab (rl_filename_quote_characters);
+    }
+}
+
 /* Use characters in STRING to populate the table of characters that should
    be backslash-quoted.  The table will be used for sh_backslash_quote from
    this file. */
@@ -4127,6 +4268,7 @@ bash_quote_filename (s, rtype, qcp)
 {
   char *rtext, *mtext, *ret;
   int rlen, cs;
+  int expchar, nextch, closer;
 
   rtext = (char *)NULL;
 
@@ -4144,7 +4286,18 @@ bash_quote_filename (s, rtype, qcp)
      the word being completed contains newlines, since those are not
      quoted correctly using backslashes (a backslash-newline pair is
      special to the shell parser). */
-  if (*qcp == '\0' && cs == COMPLETE_BSQUOTE && mbschr (s, '\n'))
+  expchar = nextch = closer = 0;
+  if (*qcp == '\0' && cs == COMPLETE_BSQUOTE && dircomplete_expand == 0 &&
+      (expchar = bash_check_expchar (s, 0, &nextch, &closer)) &&
+      file_exists (s) == 0)
+    {
+      /* Usually this will have been set by bash_directory_completion_hook,
+        but there are cases where it will not be. */
+      if (rl_filename_quote_characters != custom_filename_quote_characters)
+       set_filename_quote_chars (expchar, nextch, closer);
+      complete_fullquote = 0;
+    }
+  else if (*qcp == '\0' && cs == COMPLETE_BSQUOTE && mbschr (s, '\n'))
     cs = COMPLETE_SQUOTE;
   else if (*qcp == '"')
     cs = COMPLETE_DQUOTE;
@@ -4187,7 +4340,8 @@ bash_quote_filename (s, rtype, qcp)
 
   /* We may need to quote additional characters: those that readline treats
      as word breaks that are not quoted by backslash_quote. */
-  if (rtext && cs == COMPLETE_BSQUOTE)
+  /* XXX - test complete_fullquote here? */
+  if (rtext && cs == COMPLETE_BSQUOTE && rl_completer_word_break_characters)
     {
       mtext = quote_word_break_chars (rtext);
       free (rtext);
@@ -4294,12 +4448,28 @@ bash_execute_unix_command (count, key)
   SHELL_VAR *v;
   char ibuf[INT_STRLEN_BOUND(int) + 1];
   Keymap cmd_xmap;
+  const char *kseq;
+  size_t kslen;
+
+  kseq = rl_executing_keyseq;
+  kslen = rl_key_sequence_length;
+
+  /* If we have a numeric argument, chop it off the front of the key sequence */
+  if (count > 1 || rl_explicit_arg)
+    {
+      i = rl_trim_arg_from_keyseq (rl_executing_keyseq, rl_key_sequence_length, rl_get_keymap ());
+      if (i > 0)
+       {
+        kseq = rl_executing_keyseq + i;
+        kslen = rl_key_sequence_length - i;
+       }
+    }
 
   /* First, we need to find the right command to execute.  This is tricky,
      because we might have already indirected into another keymap, so we
      have to walk cmd_xmap using the entire key sequence. */
   cmd_xmap = get_cmd_xmap_from_keymap (rl_get_keymap ());
-  cmd = (char *)rl_function_of_keyseq_len (rl_executing_keyseq, rl_key_sequence_length, cmd_xmap, &type);
+  cmd = (char *)rl_function_of_keyseq_len (kseq, kslen, cmd_xmap, &type);
 
   if (type == ISKMAP && (type = ((Keymap) cmd)[ANYOTHERKEY].type) == ISMACR)
     cmd = (char*)((Keymap) cmd)[ANYOTHERKEY].function;
@@ -4336,6 +4506,14 @@ bash_execute_unix_command (count, key)
   v = bind_int_variable ("READLINE_MARK", value, 0);
   if (v)
     VSETATTR (v, att_exported);
+
+  if (count > 1 || rl_explicit_arg)
+    {
+      value = inttostr (count, ibuf, sizeof (ibuf));
+      v = bind_int_variable ("READLINE_ARGUMENT", value, 0);
+      if (v)
+        VSETATTR (v, att_exported);
+    }
   array_needs_making = 1;
 
   save_parser_state (&ps);
@@ -4358,6 +4536,7 @@ bash_execute_unix_command (count, key)
   check_unbind_variable ("READLINE_LINE");
   check_unbind_variable ("READLINE_POINT");
   check_unbind_variable ("READLINE_MARK");
+  check_unbind_variable ("READLINE_ARGUMENT");
   array_needs_making = 1;
 
   /* and restore the readline buffer and display after command execution. */
@@ -4625,21 +4804,29 @@ bash_event_hook ()
     sig = terminating_signal;
   else if (interrupt_state)
     sig = SIGINT;
-  else if (sigalrm_seen)
+  else if (read_timeout && read_timeout->alrmflag)
     sig = SIGALRM;
+  else if (RL_ISSTATE (RL_STATE_TIMEOUT))              /* just in case */
+    {
+      sig = SIGALRM;
+      if (read_timeout)
+       read_timeout->alrmflag = 1;
+    }
   else
     sig = first_pending_trap ();
 
   /* If we're going to longjmp to top_level, make sure we clean up readline.
      check_signals will call QUIT, which will eventually longjmp to top_level,
-     calling run_interrupt_trap along the way.  The check for sigalrm_seen is
-     to clean up the read builtin's state. */
-  if (terminating_signal || interrupt_state || sigalrm_seen)
+     calling run_interrupt_trap along the way.  The check against read_timeout
+     is so we can clean up the read builtin's state. */
+  if (terminating_signal || interrupt_state || (read_timeout && read_timeout->alrmflag))
     rl_cleanup_after_signal ();
   bashline_reset_event_hook ();
 
+  RL_UNSETSTATE (RL_STATE_TIMEOUT);                    /* XXX */
+
   /* posix mode SIGINT during read -e. We only get here if SIGINT is trapped. */
-  if (posixly_correct && this_shell_builtin == read_builtin && sig == 2)
+  if (posixly_correct && this_shell_builtin == read_builtin && sig == SIGINT)
     {
       last_command_exit_value = 128|SIGINT;
       throw_to_top_level ();
index 48c9fecfb64bce51c202034673276c0937512cd8..d40228e29f1aebc1d1d8b47e1b18808fa5d26b0e 100644 (file)
@@ -53,7 +53,7 @@ extern int unbind_unix_command PARAMS((char *));
 
 extern char **bash_default_completion PARAMS((const char *, int, int, int, int));
 
-void set_directory_hook PARAMS((void));
+extern void set_directory_hook PARAMS((void));
 
 /* Used by programmable completion code. */
 extern char *command_word_completion_function PARAMS((const char *, int));
index dac95fdbae2e03addd36e8b59e84639317fb2661..0156593565c41ec7207e4ba56d97cab4553d0c31 100644 (file)
@@ -1,6 +1,6 @@
 /* builtins.h -- What a builtin looks like, and where to find them. */
 
-/* Copyright (C) 1987-2009 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -45,6 +45,7 @@
 #define ASSIGNMENT_BUILTIN 0x10        /* This builtin takes assignment statements. */
 #define POSIX_BUILTIN  0x20    /* This builtins is special in the Posix command search order. */
 #define LOCALVAR_BUILTIN   0x40        /* This builtin creates local variables */
+#define ARRAYREF_BUILTIN 0x80  /* This builtin takes array references as arguments */
 
 #define BASE_INDENT    4
 
index b349e93ceaaf9233690378c5d7a159e1b94a28ed..642878c6c425790fd358168c23dd89e17b5268e3 100644 (file)
@@ -1,6 +1,6 @@
 # This Makefile for building libbuiltins.a is in -*- text -*- for Emacs.
 #
-# Copyright (C) 1996-2017 Free Software Foundation, Inc.
+# Copyright (C) 1996-2022 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
@@ -59,6 +59,7 @@ LIBBUILD = ${BUILD_DIR}/lib
 PROFILE_FLAGS = @PROFILE_FLAGS@
 CFLAGS = @CFLAGS@
 CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ @CROSS_COMPILE@
+STYLE_CFLAGS = @STYLE_CFLAGS@
 CPPFLAGS = @CPPFLAGS@
 CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@
 LOCAL_CFLAGS = @LOCAL_CFLAGS@ ${DEBUG}
@@ -92,7 +93,7 @@ HELPFILES_TARGET = @HELPFILES_TARGET@
 INCLUDES = -I. -I.. @RL_INCLUDE@ -I$(topdir) -I$(BASHINCDIR) -I$(topdir)/lib -I$(srcdir) ${INTL_INC}
 
 BASE_CCFLAGS = ${PROFILE_FLAGS} $(DEFS) $(LOCAL_DEFS) $(SYSTEM_FLAGS) \
-        ${INCLUDES} $(LOCAL_CFLAGS)
+        ${INCLUDES} $(STYLE_CFLAGS) $(LOCAL_CFLAGS)
 
 CCFLAGS = ${ADDON_CFLAGS} $(BASE_CCFLAGS) $(CPPFLAGS) $(CFLAGS)
 
@@ -182,28 +183,30 @@ gen-helpfiles.o: gen-helpfiles.c
        $(CC_FOR_BUILD) -c $(CCFLAGS_FOR_BUILD) $<
 
 gen-helpfiles: tmpbuiltins.o gen-helpfiles.o
-       $(CC_FOR_BUILD) ${CCFLAGS_FOR_BUILD} $(LDFLAGS_FOR_BUILD) -o $@ gen-helpfiles.o tmpbuiltins.o $(LIBS_FOR_BUILD)
+       $(CC_FOR_BUILD) $(LDFLAGS_FOR_BUILD) -o $@ gen-helpfiles.o tmpbuiltins.o $(LIBS_FOR_BUILD)
 
 builtext.h builtins.c: $(MKBUILTINS) $(DEFSRC)
-       @-if test -f builtins.c; then mv -f builtins.c old-builtins.c; fi
-       @-if test -f builtext.h; then mv -f builtext.h old-builtext.h; fi
-       ./$(MKBUILTINS) -externfile builtext.h -structfile builtins.c \
-           -noproduction $(DIRECTDEFINE) $(HELPDIRDEFINE) $(HELPSTRINGS) $(DEFSRC)
-       @-if cmp -s old-builtext.h builtext.h 2>/dev/null; then \
-               mv old-builtext.h builtext.h; \
-        else \
-               $(RM) old-builtext.h; \
-        fi
-       @-if cmp -s old-builtins.c builtins.c 2>/dev/null; then \
-               mv old-builtins.c builtins.c; \
-        else \
-               $(RM) old-builtins.c; \
-        fi
+       @RECPID=$$$$ ; \
+       NEW_BUILTEXT=builtext-$$RECPID.h NEW_BUILTINS=builtins-$$RECPID.c ; \
+       ./$(MKBUILTINS) -externfile $$NEW_BUILTEXT \
+           -includefile builtext.h \
+           -structfile $$NEW_BUILTINS \
+           -noproduction $(DIRECTDEFINE) $(HELPDIRDEFINE) $(HELPSTRINGS) $(DEFSRC) ; \
+       if cmp -s $$NEW_BUILTEXT builtext.h 2>/dev/null; then \
+               $(RM) $$NEW_BUILTEXT; \
+       else \
+               mv $$NEW_BUILTEXT builtext.h; \
+       fi ; \
+       if cmp -s $$NEW_BUILTINS builtins.c 2>/dev/null; then \
+               $(RM) $$NEW_BUILTINS ; \
+       else \
+               mv $$NEW_BUILTINS builtins.c; \
+       fi
 
 helpdoc:       gen-helpfiles
        ./gen-helpfiles ${HELPDIRDEFINE}
 
-install-help:
+install-help:  $(HELPFILES_TARGET)
        @-if test -n "${HELPDIR}" && test -d helpfiles ; then \
                test -d $(DESTDIR)${HELPDIR} || ${SHELL} ${MKDIRS} $(DESTDIR)$(HELPDIR) ;\
                ( for f in helpfiles/*; do \
@@ -707,3 +710,14 @@ suspend.o: ${topdir}/bashintl.h ${LIBINTL_H} $(BASHINCDIR)/gettext.h
 type.o: ${topdir}/bashintl.h ${LIBINTL_H} $(BASHINCDIR)/gettext.h
 ulimit.o: ${topdir}/bashintl.h ${LIBINTL_H} $(BASHINCDIR)/gettext.h
 umask.o: ${topdir}/bashintl.h ${LIBINTL_H} $(BASHINCDIR)/gettext.h
+
+cd.o: $(topdir)/config-top.h
+command.o: $(topdir)/config-top.h
+common.o: $(topdir)/config-top.h
+declare.o: $(topdir)/config-top.h
+break.o: $(topdir)/config-top.h
+echo.o: $(topdir)/config-top.h
+evalstring.o: $(topdir)/config-top.h
+exit.o: $(topdir)/config-top.h
+kill.o: $(topdir)/config-top.h
+shopt.o: $(topdir)/config-top.h
index 405ced437319a5ef671bcd765e028189d67eb325..d40ffa23aaef90d34e9f50bf1d7cead3fec743c3 100644 (file)
@@ -1,6 +1,6 @@
 /* bashgetopt.c -- `getopt' for use by the builtins. */
 
-/* Copyright (C) 1992-2002 Free Software Foundation, Inc.
+/* Copyright (C) 1992-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -39,6 +39,7 @@
 static int     sp;
 
 char    *list_optarg;
+int    list_optflags;
 int    list_optopt;
 int    list_opttype;
 
@@ -62,6 +63,7 @@ char          *opts;
 
        if (list == 0) {
                list_optarg = (char *)NULL;
+               list_optflags = 0;
                loptend = (WORD_LIST *)NULL;    /* No non-option arguments */
                return -1;
        }
@@ -102,6 +104,7 @@ char                *opts;
                        sp = 1;
                }
                list_optarg = NULL;
+               list_optflags = 0;
                if (lcurrent)
                        loptend = lcurrent->next;
                return('?');
@@ -113,6 +116,7 @@ char                *opts;
                /* We allow -l2 as equivalent to -l 2 */
                if (lcurrent->word->word[sp+1]) {
                        list_optarg = lcurrent->word->word + sp + 1;
+                       list_optflags = 0;
                        lcurrent = lcurrent->next;
                /* If the specifier is `;', don't set optarg if the next
                   argument looks like another option. */
@@ -123,15 +127,18 @@ char              *opts;
 #endif
                        lcurrent = lcurrent->next;
                        list_optarg = lcurrent->word->word;
+                       list_optflags = lcurrent->word->flags;
                        lcurrent = lcurrent->next;
                } else if (*cp == ';') {
                        list_optarg = (char *)NULL;
+                       list_optflags = 0;
                        lcurrent = lcurrent->next;
                } else {        /* lcurrent->next == NULL */
                        errstr[1] = c;
                        sh_needarg (errstr);
                        sp = 1;
                        list_optarg = (char *)NULL;
+                       list_optflags = 0;
                        return('?');
                }
                sp = 1;
@@ -140,19 +147,24 @@ char              *opts;
                if (lcurrent->word->word[sp+1]) {
                        if (DIGIT(lcurrent->word->word[sp+1])) {
                                list_optarg = lcurrent->word->word + sp + 1;
+                               list_optflags = 0;
                                lcurrent = lcurrent->next;
-                       } else
+                       } else {
                                list_optarg = (char *)NULL;
+                               list_optflags = 0;
+                       }
                } else {
                        if (lcurrent->next && legal_number(lcurrent->next->word->word, (intmax_t *)0)) {
                                lcurrent = lcurrent->next;
                                list_optarg = lcurrent->word->word;
+                               list_optflags = lcurrent->word->flags;
                                lcurrent = lcurrent->next;
                        } else {
                                errstr[1] = c;
                                sh_neednumarg (errstr);
                                sp = 1;
                                list_optarg = (char *)NULL;
+                               list_optflags = 0;
                                return ('?');
                        }
                }
@@ -164,6 +176,7 @@ char                *opts;
                        lcurrent = lcurrent->next;
                }
                list_optarg = (char *)NULL;
+               list_optflags = 0;
        }
 
        return(c);
index dcdaa48aa5faa1735edbd19d6602d65e2d1f6b51..79be3431503a64577bed7c8da28b07eb8ae3fa55 100644 (file)
@@ -1,6 +1,6 @@
 /* bashgetopt.h -- extern declarations for stuff defined in bashgetopt.c. */
 
-/* Copyright (C) 1993-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1993-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -29,6 +29,7 @@
 #define GETOPT_HELP    -99
 
 extern char *list_optarg;
+extern int list_optflags;
 
 extern int list_optopt;
 extern int list_opttype;
index ccfc08dcd7b1b8862d3e1297dfc44d66454e9edb..53a65ac7c7b967d74f5860b77e12c142178f7821 100644 (file)
@@ -1,7 +1,7 @@
 This file is bind.def, from which is created bind.c.
 It implements the builtin "bind" in Bash.
 
-Copyright (C) 1987-2020 Free Software Foundation, Inc.
+Copyright (C) 1987-2021 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -290,7 +290,7 @@ bind_builtin (list)
 
       if (nlen < olen) /* fewer bind -x bindings */
        for (d = olen - nlen, i = 0; i < olen && d > 0; i++)
-         if (nlen == 0 || strvec_search (nbindings, obindings[i]) >= 0)
+         if (nlen == 0 || strvec_search (nbindings, obindings[i]) < 0)
            {
              unbind_unix_command (obindings[i]);
              d--;
index 7205608c672239ba4119a5b6b0252212f2130360..b87c5d9d258b82d95db9ea39d3afe5e3b66c5ff1 100644 (file)
@@ -1,7 +1,7 @@
 This file is cd.def, from which is created cd.c.  It implements the
 builtins "cd" and "pwd" in Bash.
 
-Copyright (C) 1987-2020 Free Software Foundation, Inc.
+Copyright (C) 1987-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -79,7 +79,7 @@ $SHORT_DOC cd [-L|[-P [-e]] [-@]] [dir]
 Change the shell working directory.
 
 Change the current directory to DIR.  The default DIR is the value of the
-HOME shell variable.
+HOME shell variable. If DIR is "-", it is converted to $OLDPWD.
 
 The variable CDPATH defines the search path for the directory containing
 DIR.  Alternative directory names in CDPATH are separated by a colon (:).
index acd46cc1be0062d1ca15777821e1b309645bdb3e..3efdbe6bcb434ac7679ec0674ea2e579015e533c 100644 (file)
@@ -124,9 +124,7 @@ command_builtin (list)
 
 #define COMMAND_BUILTIN_FLAGS (CMD_NO_FUNCTIONS | CMD_INHIBIT_EXPANSION | CMD_COMMAND_BUILTIN | (use_standard_path ? CMD_STDPATH : 0))
 
-#ifdef DEBUG
-  itrace("command_builtin: running execute_command for `%s'", list->word->word);
-#endif
+  INTERNAL_DEBUG (("command_builtin: running execute_command for `%s'", list->word->word));
 
   /* We don't want this to be reparsed (consider command echo 'foo &'), so
      just make a simple_command structure and call execute_command with it. */
index 3c9ac49de174891d6e79b68e04077ec134ee5b64..19b00c4d04f2437f019907ffca5fb201eb5f95a9 100644 (file)
@@ -1,6 +1,6 @@
 /* common.c - utility functions for all builtins */
 
-/* Copyright (C) 1987-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -266,6 +266,13 @@ sh_readonly (s)
   builtin_error (_("%s: readonly variable"), s);
 }
 
+void
+sh_noassign (s)
+     const char *s;
+{
+  internal_error (_("%s: cannot assign"), s);  /* XXX */
+}
+
 void
 sh_erange (s, desc)
      char *s, *desc;
@@ -451,7 +458,7 @@ shift_args (times)
 int
 number_of_args ()
 {
-#ifdef DEBUG
+#if 0
   register WORD_LIST *list;
   int n;
 
@@ -462,9 +469,9 @@ number_of_args ()
 
 if (n != posparam_count)
   itrace("number_of_args: n (%d) != posparam_count (%d)", n, posparam_count);
-#endif
-
+#else
   return posparam_count;
+#endif
 }
 
 static int changed_dollar_vars;
@@ -935,7 +942,7 @@ find_special_builtin (name)
                        current_builtin->function :
                        (sh_builtin_func_t *)NULL);
 }
-  
+
 static int
 shell_builtin_compare (sbp1, sbp2)
      struct builtin *sbp1, *sbp2;
@@ -971,6 +978,7 @@ builtin_help ()
 /*                                                                 */
 /* **************************************************************** */
 
+/* Assign NAME=VALUE, passing FLAGS to the assignment functions. */
 SHELL_VAR *
 builtin_bind_variable (name, value, flags)
      char *name;
@@ -978,12 +986,22 @@ builtin_bind_variable (name, value, flags)
      int flags;
 {
   SHELL_VAR *v;
+  int vflags, bindflags;
 
 #if defined (ARRAY_VARS)
-  if (valid_array_reference (name, assoc_expand_once ? (VA_NOEXPAND|VA_ONEWORD) : 0) == 0)
+  /* Callers are responsible for calling this with array references that have
+     already undergone valid_array_reference checks (read, printf). */
+  vflags = assoc_expand_once ? (VA_NOEXPAND|VA_ONEWORD) : 0;
+  bindflags = flags | (assoc_expand_once ? ASS_NOEXPAND : 0) | ASS_ALLOWALLSUB;
+  if (flags & ASS_NOEXPAND)
+    vflags |= VA_NOEXPAND;
+  if (flags & ASS_ONEWORD)
+    vflags |= VA_ONEWORD;
+
+  if (valid_array_reference (name, vflags) == 0)
     v = bind_variable (name, value, flags);
   else
-    v = assign_array_element (name, value, flags | (assoc_expand_once ? ASS_NOEXPAND : 0));
+    v = assign_array_element (name, value, bindflags, (array_eltstate_t *)0);
 #else /* !ARRAY_VARS */
   v = bind_variable (name, value, flags);
 #endif /* !ARRAY_VARS */
@@ -994,6 +1012,52 @@ builtin_bind_variable (name, value, flags)
   return v;
 }
 
+SHELL_VAR *
+builtin_bind_var_to_int (name, val, flags)
+     char *name;
+     intmax_t val;
+     int flags;
+{
+  SHELL_VAR *v;
+
+  v = bind_var_to_int (name, val, flags|ASS_ALLOWALLSUB);
+  return v;
+}
+
+#if defined (ARRAY_VARS)
+SHELL_VAR *
+builtin_find_indexed_array (array_name, flags)
+     char *array_name;
+     int flags;
+{
+  SHELL_VAR *entry;
+
+  if ((flags & 2) && legal_identifier (array_name) == 0)
+    {
+      sh_invalidid (array_name);
+      return (SHELL_VAR *)NULL;
+    }
+
+  entry = find_or_make_array_variable (array_name, 1);
+  /* With flags argument & 1, find_or_make_array_variable checks for readonly
+     and noassign variables and prints error messages. */
+  if (entry == 0)
+    return entry;
+  else if (array_p (entry) == 0)
+    {
+      builtin_error (_("%s: not an indexed array"), array_name);
+      return (SHELL_VAR *)NULL;
+    }
+  else if (invisible_p (entry))
+    VUNSETATTR (entry, att_invisible); /* no longer invisible */
+
+  if (flags & 1)
+    array_flush (array_cell (entry));
+
+  return entry;
+}
+#endif /* ARRAY_VARS */        
+
 /* Like check_unbind_variable, but for use by builtins (only matters for
    error messages). */
 int
@@ -1015,3 +1079,53 @@ builtin_unbind_variable (vname)
     }
   return (unbind_variable (vname));
 }
+
+int
+builtin_arrayref_flags (w, baseflags)
+     WORD_DESC *w;
+     int baseflags;
+{
+  char *t;
+  int vflags;
+
+  vflags = baseflags;
+
+  /* Don't require assoc_expand_once if we have an argument that's already
+     passed through valid_array_reference and been expanded once. That
+     doesn't protect it from normal expansions like word splitting, so
+     proper quoting is still required. */
+  if (w->flags & W_ARRAYREF)
+    vflags |= VA_ONEWORD|VA_NOEXPAND;
+
+#  if 0
+  /* This is a little sketchier but handles quoted arguments. */
+  if (assoc_expand_once && (t =  strchr (w->word, '[')) && t[strlen(t) - 1] == ']')
+    vflags |= VA_ONEWORD|VA_NOEXPAND;
+#  endif
+
+  return vflags;
+}
+
+/* **************************************************************** */
+/*                                                                 */
+/*         External interface to manipulate shell options          */
+/*                                                                 */
+/* **************************************************************** */
+
+#if defined (ARRAY_VARS)
+int
+set_expand_once (nval, uwp)
+     int nval, uwp;
+{
+  int oa;
+
+  oa = assoc_expand_once;
+  if (shell_compatibility_level > 51)  /* XXX - internal */
+    {
+      if (uwp)
+       unwind_protect_int (assoc_expand_once);
+      assoc_expand_once = nval;
+    }
+  return oa;
+}
+#endif
index a4f9275d8eb39b7e492296a777eab4b96f3fb651..f5cd87f081f700f203c27fa315666f1189679024 100644 (file)
@@ -1,6 +1,6 @@
 /* common.h -- extern declarations for functions defined in common.c. */
 
-/* Copyright (C) 1993-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1993-2022 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -40,7 +40,7 @@ do { \
     builtin_help (); \
     return (EX_USAGE)
 
-/* Flag values for parse_and_execute () */
+/* Flag values for parse_and_execute () and parse_string () */
 #define SEVAL_NONINT   0x001
 #define SEVAL_INTERACT 0x002
 #define SEVAL_NOHIST   0x004
@@ -95,10 +95,11 @@ extern void sh_invalidoptname PARAMS((char *));
 extern void sh_invalidid PARAMS((char *));
 extern void sh_invalidnum PARAMS((char *));
 extern void sh_invalidsig PARAMS((char *));
+extern void sh_readonly PARAMS((const char *));
+extern void sh_noassign PARAMS((const char *));
 extern void sh_erange PARAMS((char *, char *));
 extern void sh_badpid PARAMS((char *));
 extern void sh_badjob PARAMS((char *));
-extern void sh_readonly PARAMS((const char *));
 extern void sh_nojobs PARAMS((char *));
 extern void sh_restricted PARAMS((char *));
 extern void sh_notbuiltin PARAMS((char *));
@@ -138,6 +139,10 @@ extern sh_builtin_func_t *builtin_address PARAMS((char *));
 extern sh_builtin_func_t *find_special_builtin PARAMS((char *));
 extern void initialize_shell_builtins PARAMS((void));
 
+#if defined (ARRAY_VARS)
+extern int set_expand_once PARAMS((int, int));
+#endif
+
 /* Functions from exit.def */
 extern void bash_logout PARAMS((void));
 
@@ -151,6 +156,9 @@ extern void builtin_help PARAMS((void));
 extern void read_tty_cleanup PARAMS((void));
 extern int read_tty_modified PARAMS((void));
 
+extern int read_builtin_timeout PARAMS((int));
+extern void check_read_timeout PARAMS((void));
+
 /* Functions from set.def */
 extern int minus_o_option_value PARAMS((char *));
 extern void list_minus_o_opts PARAMS((int, int));
@@ -205,10 +213,11 @@ extern WORD_LIST *get_directory_stack PARAMS((int));
 extern int parse_and_execute PARAMS((char *, const char *, int));
 extern int evalstring PARAMS((char *, const char *, int));
 extern void parse_and_execute_cleanup PARAMS((int));
-extern int parse_string PARAMS((char *, const char *, int, char **));
+extern int parse_string PARAMS((char *, const char *, int, COMMAND **, char **));
 extern int should_suppress_fork PARAMS((COMMAND *));
 extern int can_optimize_connection PARAMS((COMMAND *));
-extern void optimize_fork PARAMS((COMMAND *));
+extern int can_optimize_cat_file PARAMS((COMMAND *));
+extern void optimize_connection_fork PARAMS((COMMAND *));
 extern void optimize_subshell_command PARAMS((COMMAND *));
 extern void optimize_shell_function PARAMS((COMMAND *));
 
@@ -223,8 +232,12 @@ extern sh_builtin_func_t *this_shell_builtin;
 extern sh_builtin_func_t *last_shell_builtin;
 
 extern SHELL_VAR *builtin_bind_variable PARAMS((char *, char *, int));
+extern SHELL_VAR *builtin_bind_var_to_int PARAMS((char *, intmax_t, int));
 extern int builtin_unbind_variable PARAMS((const char *));
 
+extern SHELL_VAR *builtin_find_indexed_array PARAMS((char *, int));
+extern int builtin_arrayref_flags PARAMS((WORD_DESC *, int));
+
 /* variables from evalfile.c */
 extern int sourcelevel;
 
@@ -236,12 +249,14 @@ extern int breaking;
 extern int continuing;
 extern int loop_level;
 
-/* variables from read.def */
-extern int sigalrm_seen;
-
 /* variables from shift.def */
 extern int print_shift_error;
 
+/* variables from shopt.def */
+#if defined (ARRAY_VARS)
+extern int expand_once_flag;
+#endif
+
 /* variables from source.def */
 extern int source_searches_cwd;
 extern int source_uses_path;
@@ -249,4 +264,19 @@ extern int source_uses_path;
 /* variables from wait.def */
 extern int wait_intr_flag;
 
+/* common code to set flags for valid_array_reference and builtin_bind_variable */
+#if defined (ARRAY_VARS)
+#define SET_VFLAGS(wordflags, vflags, bindflags) \
+  do { \
+    vflags = assoc_expand_once ?  VA_NOEXPAND : 0; \
+    bindflags = assoc_expand_once ? ASS_NOEXPAND : 0; \
+    if (assoc_expand_once && (wordflags & W_ARRAYREF)) \
+      vflags |= VA_ONEWORD|VA_NOEXPAND; \
+    if (vflags & VA_NOEXPAND) \
+      bindflags |= ASS_NOEXPAND; \
+    if (vflags & VA_ONEWORD) \
+      bindflags |= ASS_ONEWORD; \
+  } while (0)
+#endif
+
 #endif /* !__COMMON_H */
index 28a9ec2f9a5ee9869056016a3a1543fed025f293..6d600efb5f4cdfba911b0e3a39680b35e04bb21e 100644 (file)
@@ -1,7 +1,7 @@
 This file is complete.def, from which is created complete.c.
 It implements the builtins "complete", "compgen", and "compopt" in Bash.
 
-Copyright (C) 1999-2020 Free Software Foundation, Inc.
+Copyright (C) 1999-2021 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -541,6 +541,8 @@ static void
 print_cmd_name (cmd)
      const char *cmd;
 {
+  char *x;
+
   if (STREQ (cmd, DEFAULTCMD))
     printf ("-D");
   else if (STREQ (cmd, EMPTYCMD))
@@ -549,6 +551,12 @@ print_cmd_name (cmd)
     printf ("-I");
   else if (*cmd == 0)          /* XXX - can this happen? */
     printf ("''");
+  else if (sh_contains_shell_metas (cmd))
+    {
+      x = sh_single_quote (cmd);
+      printf ("%s", x);
+      free (x);
+    }
   else
     printf ("%s", cmd);
 }
@@ -575,7 +583,7 @@ print_one_completion (cmd, cs)
   print_arg (cs->command, "-C", 1);
 
   /* simple arguments that don't require quoting */
-  print_arg (cs->funcname, "-F", 0);
+  print_arg (cs->funcname, "-F", sh_contains_shell_metas (cs->funcname) != 0);
 
   print_cmd_name (cmd);
   printf ("\n");
index 21e4516d194abbc5eb4b0abdd01c4f3858b300e1..54db59c55d17447292b94cba22cfd08ba8f37eed 100644 (file)
@@ -1,7 +1,7 @@
 This file is declare.def, from which is created declare.c.
 It implements the builtins "declare" and "local" in Bash.
 
-Copyright (C) 1987-2020 Free Software Foundation, Inc.
+Copyright (C) 1987-2021 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -22,7 +22,7 @@ $PRODUCES declare.c
 
 $BUILTIN declare
 $FUNCTION declare_builtin
-$SHORT_DOC declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]
+$SHORT_DOC declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] [name ...]
 Set variable values and attributes.
 
 Declare variables and give them attributes.  If no NAMEs are given,
@@ -64,7 +64,7 @@ $END
 
 $BUILTIN typeset
 $FUNCTION declare_builtin
-$SHORT_DOC typeset [-aAfFgiIlnrtux] [-p] name[=value] ...
+$SHORT_DOC typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] [name ...]
 Set variable values and attributes.
 
 A synonym for `declare'.  See `help declare'.
@@ -91,6 +91,9 @@ $END
 #include "bashgetopt.h"
 
 static SHELL_VAR *declare_find_variable PARAMS((const char *, int, int));
+static char *declare_build_newname PARAMS((char *, char *, int, char *, int));
+static char *declare_transform_name PARAMS((char *, int, int));
+
 static int declare_internal PARAMS((register WORD_LIST *, int));
 
 /* Declare or change variable attributes. */
@@ -162,6 +165,68 @@ declare_find_variable (name, mkglobal, chklocal)
     return (find_global_variable (name));
 }
 
+/* Build a new string
+       NAME[SUBSCRIPT][[+]=VALUE]
+   from expanding a nameref into NAME */
+static char *
+declare_build_newname (name, subscript_start, offset, value, aflags)
+     char *name, *subscript_start;
+     int offset;
+     char *value;
+     int aflags;
+{
+  size_t namelen, savelen;
+  char *ret;
+
+  savelen = namelen = strlen (name);
+  if (subscript_start)
+    {
+      *subscript_start = '[';          /* ] */
+      namelen += strlen (subscript_start);
+    }
+  ret = xmalloc (namelen + 2 + strlen (value) + 1);
+  strcpy (ret, name);
+  if (subscript_start)
+    strcpy (ret + savelen, subscript_start);
+  if (offset)
+    {
+      if (aflags & ASS_APPEND)
+       ret[namelen++] = '+';
+      ret[namelen++] = '=';
+      if (value && *value)
+       strcpy (ret + namelen, value);
+      else
+       ret[namelen] = '\0';
+    }
+
+  return (ret);
+}
+
+static char *
+declare_transform_name (name, flags_on, flags_off)
+     char *name;
+     int flags_on, flags_off;
+{
+  SHELL_VAR *var, *v;
+  char *newname;
+  
+  var = find_variable (name);
+  if (var == 0)
+    newname = nameref_transform_name (name, ASS_MKLOCAL);
+  else if ((flags_on & att_nameref) == 0 && (flags_off & att_nameref) == 0)
+    {
+      /* Ok, we're following namerefs here, so let's make sure that if
+        we followed one, it was at the same context (see below for
+        more details). */
+      v = find_variable_last_nameref (name, 1);
+      newname = (v && v->context != variable_context) ? name : name_cell (var);
+    }
+  else
+    newname = name;    /* dealing with nameref attribute */
+
+  return (newname);
+}
+
 /* The workhorse function. */
 static int
 declare_internal (list, local_var)
@@ -204,10 +269,9 @@ declare_internal (list, local_var)
          return (EX_USAGE);
 #endif
        case 'p':
-/*       if (local_var == 0) */
-           pflag++;
+         pflag++;
          break;
-        case 'F':
+       case 'F':
          nodefs++;
          *flags |= att_function;
          break;
@@ -271,7 +335,7 @@ declare_internal (list, local_var)
 
   /* If there are no more arguments left, then we just want to show
      some variables. */
-  if (list == 0)       /* declare -[aAfFirtx] */
+  if (list == 0)       /* declare -[aAfFilnrtux] */
     {
       /* Show local variables defined at this context level if this is
         the `local' builtin. */
@@ -287,7 +351,7 @@ declare_internal (list, local_var)
       return (sh_chkwrite (EXECUTION_SUCCESS));
     }
 
-  if (pflag)   /* declare -p [-aAfFirtx] name [name...] */
+  if (pflag)   /* declare -p [-aAfFilnrtux] [name ...] */
     {
       for (any_failed = 0; list; list = list->next)
        {
@@ -306,13 +370,31 @@ declare_internal (list, local_var)
       return (sh_chkwrite (any_failed ? EXECUTION_FAILURE : EXECUTION_SUCCESS));
     }
 
+  /* Some option combinations that don't make any sense */
+  if ((flags_on & att_function) && (flags_on & (att_array|att_assoc|att_integer|att_nameref)))
+    {
+      char *optchar;
+
+      if (flags_on & att_nameref)
+       optchar = "-n";
+      else if (flags_on & att_integer)
+       optchar = "-i";
+      else if (flags_on & att_assoc)
+       optchar = "-A";
+      else if (flags_on & att_array)
+       optchar = "-a";
+
+      sh_invalidopt (optchar); 
+      return (EXECUTION_FAILURE);
+    }
+
 #define NEXT_VARIABLE() free (name); list = list->next; continue
 
   /* There are arguments left, so we are making variables. */
-  while (list)         /* declare [-aAfFirx] name [name ...] */
+  while (list)         /* declare [-aAfFilnrtux] name[=value] [name[=value] ...] */
     {
-      char *value, *name, *oldname;
-      int offset, aflags, wflags, created_var, namelen;
+      char *value, *name, *newname;
+      int offset, aflags, wflags, created_var;
       int assoc_noexpand;
 #if defined (ARRAY_VARS)
       int making_array_special, compound_array_assign, simple_array_assign;
@@ -326,6 +408,12 @@ declare_internal (list, local_var)
 #else
       assoc_noexpand = 0;
 #endif
+      /* XXX - we allow unbalanced brackets if assoc_noexpand is set, we count
+        brackets and make sure they match if assoc_noexpand is not set. So we
+        need to make sure we're checking assoc_noexpand and expand_once_flag
+        for backwards compatibility. We also use assoc_noexpand below when
+        we call assign_array_element, so we need to make sure they're
+        consistent in how they count brackets. */
       offset = assignment (name, assoc_noexpand ? 2 : 0);
       aflags = 0;
       created_var = 0;
@@ -340,6 +428,76 @@ declare_internal (list, local_var)
          NEXT_VARIABLE ();
        }
 
+      /* If we are declaring a function, then complain about it in some way.
+        We don't let people make functions by saying `typeset -f foo=bar'. */
+
+      /* Can't define functions using assignment statements */
+      if (offset && (flags_on & att_function)) /* declare -f [-rix] foo=bar */
+       {
+         builtin_error (_("cannot use `-f' to make functions"));
+         free (name);
+         return (EXECUTION_FAILURE);
+       }
+
+      /* There should be a way, however, to let people look at a particular
+        function definition by saying `typeset -f foo'.  This is the only
+        place in this builtin where we deal with functions. */
+
+      if (flags_on & att_function)
+       {
+         /* Should we restrict this when the shell is in posix mode even if
+            the function was created before the shell entered posix mode?
+            Previous versions of the shell enforced the restriction. */
+         if (posixly_correct && legal_identifier (name) == 0)
+           {
+             sh_invalidid (name);
+             assign_error++;
+             NEXT_VARIABLE ();
+           }
+
+         var = find_function (name);
+
+         if (var)
+           {
+             if (readonly_p (var) && (flags_off & att_readonly))
+               {
+                 builtin_error (_("%s: readonly function"), name);
+                 any_failed++;
+                 NEXT_VARIABLE ();
+               }
+             /* declare -[Ff] name [name...] */
+             if (flags_on == att_function && flags_off == 0)
+               {
+#if defined (DEBUGGER)
+                 if (nodefs && debugging_mode)
+                   {
+                     shell_fn = find_function_def (name_cell (var));
+                     if (shell_fn)
+                       printf ("%s %d %s\n", name_cell (var), shell_fn->line, shell_fn->source_file);
+                     else
+                       printf ("%s\n", name_cell (var));
+                   }
+                 else
+#endif /* DEBUGGER */
+                   {   
+                     t = nodefs ? name_cell (var) : named_function_string (name, function_cell (var), FUNC_MULTILINE|FUNC_EXTERNAL);
+                     printf ("%s\n", t);
+                     any_failed = sh_chkwrite (any_failed);
+                   }
+               }
+             else              /* declare -[fF] -[rx] name [name...] */
+               {
+                 VSETATTR (var, flags_on);
+                 flags_off &= ~att_function;   /* makes no sense */
+                 VUNSETATTR (var, flags_off);
+               }
+           }
+         else
+           any_failed++;
+
+         NEXT_VARIABLE ();
+       }
+
       if (offset)      /* declare [-aAfFirx] name=value */
        {
          name[offset] = '\0';
@@ -361,7 +519,7 @@ declare_internal (list, local_var)
          if (valid_array_reference (name, 0))
            {
              builtin_error (_("%s: reference variable cannot be an array"), name);
-             assign_error++;
+             any_failed++;
              NEXT_VARIABLE ();
            }
          else
@@ -372,29 +530,32 @@ declare_internal (list, local_var)
              if (variable_context == 0)
                {
                  builtin_error (_("%s: nameref variable self references not allowed"), name);
-                 assign_error++;
+                 assign_error++;       /* XXX any_failed++ instead? */
                  NEXT_VARIABLE ();
                }
              else
                builtin_warning (_("%s: circular name reference"), name);
            }
-#if 1
          if (value && *value && (aflags & ASS_APPEND) == 0 && valid_nameref_value (value, 1) == 0)
            {
              builtin_error (_("`%s': invalid variable name for name reference"), value);
              assign_error++;
              NEXT_VARIABLE ();
            }
-#endif
        }
 
 restart_new_var_name:
+
+      /* The rest of the loop body deals with declare -[aAlinrtux] name [name...]
+        where each NAME can be an assignment statement. */
+
+      subscript_start = (char *)NULL;  /* used below */
 #if defined (ARRAY_VARS)
+      /* Determine whether we are creating or assigning an array variable */
       var_exists = array_exists = creating_array = 0;
       compound_array_assign = simple_array_assign = 0;
       array_subscript_assignment = 0;
-      subscript_start = (char *)NULL;
-      if ((t = strchr (name, '[')) && (flags_on & att_function) == 0)  /* ] */
+      if (t = strchr (name, '['))      /* ] */
        {
          /* If offset != 0 we have already validated any array reference
             because assignment() calls skipsubscript() */
@@ -413,11 +574,8 @@ restart_new_var_name:
        making_array_special = 0;
 #endif
 
-      /* If we're in posix mode or not looking for a shell function (since
-        shell function names don't have to be valid identifiers when the
-        shell's not in posix mode), check whether or not the argument is a
-        valid, well-formed shell identifier. */
-      if ((posixly_correct || (flags_on & att_function) == 0) && legal_identifier (name) == 0)
+      /* Ensure the argument is a valid, well-formed shell identifier. */
+      if (legal_identifier (name) == 0)
        {
          sh_invalidid (name);
          assign_error++;
@@ -432,25 +590,12 @@ restart_new_var_name:
               variable that was in the temporary environment.  Watch out
               for this. */
       refvar = (SHELL_VAR *)NULL;
-      if (variable_context && mkglobal == 0 && ((flags_on & att_function) == 0))
+      if (variable_context && mkglobal == 0)
        {
-         char *newname;
-
-         /* check name for validity here? */
-         var = find_variable (name);
-         if (var == 0)
-           newname = nameref_transform_name (name, ASS_MKLOCAL);
-         else if ((flags_on & att_nameref) == 0 && (flags_off & att_nameref) == 0)
-           {
-             /* Ok, we're following namerefs here, so let's make sure that if
-                we followed one, it was at the same context (see below for
-                more details). */
-             refvar = find_variable_last_nameref (name, 1);
-             newname = (refvar && refvar->context != variable_context) ? name : var->name;
-             refvar = (SHELL_VAR *)NULL;
-           }
-         else
-           newname = name;     /* dealing with nameref attribute */
+         /* We don't check newname for validity here. We should not have an
+            invalid name assigned as the value of a nameref, but this could
+            cause problems. */
+         newname = declare_transform_name (name, flags_on, flags_off);
 
 #if defined (ARRAY_VARS)
          /* Pass 1 as second argument to make_local_{assoc,array}_variable
@@ -478,12 +623,12 @@ restart_new_var_name:
              else if (refvar && refvar->context == variable_context)
                var = refvar;
              /* Maybe we just want to create a new local variable */
-             else if (var == 0 || var->context != variable_context)
+             else if ((var = find_variable (name)) == 0 || var->context != variable_context)
                var = make_local_variable (name, inherit_flag);
              /* otherwise we have a var at the right context */
            }
          else
-           /* XXX - check name for validity here with valid_nameref_value */
+           /* XXX - check name for validity here with valid_nameref_value? */
            var = make_local_variable ((flags_on & att_nameref) ? name : newname, inherit_flag);        /* sets att_invisible for new vars */
 
          if (var == 0)
@@ -501,483 +646,386 @@ restart_new_var_name:
       else
        var = (SHELL_VAR *)NULL;
 
-      /* If we are declaring a function, then complain about it in some way.
-        We don't let people make functions by saying `typeset -f foo=bar'. */
+      /* VAR is non-null if we just created or fetched a local variable. */
 
-      /* There should be a way, however, to let people look at a particular
-        function definition by saying `typeset -f foo'. */
+      /* Here's what ksh93 seems to do as of the 2012 version: if we are
+        using declare -n to modify the value of an existing nameref
+        variable, don't follow the nameref chain at all and just search
+        for a nameref at the current context.  If we have a nameref,
+        modify its value (changing which variable it references). */
+      if (var == 0 && (flags_on & att_nameref))
+       {
+         /* See if we are trying to modify an existing nameref variable,
+            but don't follow the nameref chain. */
+         var = mkglobal ? find_global_variable_noref (name) : find_variable_noref (name);
+         if (var && nameref_p (var) == 0)
+           var = 0;
+       }
 
-      if (flags_on & att_function)
+      /* However, if we're turning off the nameref attribute on an existing
+        nameref variable, we first follow the nameref chain to the end,
+        modify the value of the variable this nameref variable references
+        if there is an assignment statement argument,
+        *CHANGING ITS VALUE AS A SIDE EFFECT*, then turn off the nameref
+        flag *LEAVING THE NAMEREF VARIABLE'S VALUE UNCHANGED* */
+      else if (var == 0 && (flags_off & att_nameref))
        {
-         if (offset)   /* declare -f [-rix] foo=bar */
-           {
-             builtin_error (_("cannot use `-f' to make functions"));
-             free (name);
-             return (EXECUTION_FAILURE);
-           }
-         else          /* declare -f [-rx] name [name...] */
+         /* See if we are trying to modify an existing nameref variable */
+            refvar = mkglobal ? find_global_variable_last_nameref (name, 0) : find_variable_last_nameref (name, 0);
+         if (refvar && nameref_p (refvar) == 0)
+           refvar = 0;
+         /* If the nameref is readonly but doesn't have a value, ksh93
+            allows the nameref attribute to be removed.  If it's readonly
+            and has a value, even if the value doesn't reference an
+            existing variable, we disallow the modification */
+         if (refvar && nameref_cell (refvar) && readonly_p (refvar))
            {
-             var = find_function (name);
-
-             if (var)
-               {
-                 if (readonly_p (var) && (flags_off & att_readonly))
-                   {
-                     builtin_error (_("%s: readonly function"), name);
-                     any_failed++;
-                     NEXT_VARIABLE ();
-                   }
-                 else if (flags_on & (att_array|att_assoc))
-                   {
-                     sh_invalidopt ((flags_on & att_array) ? "-a" : "-A");
-                     any_failed++;
-                     NEXT_VARIABLE ();
-                   }
-                 /* declare -[Ff] name [name...] */
-                 if (flags_on == att_function && flags_off == 0)
-                   {
-#if defined (DEBUGGER)
-                     if (nodefs && debugging_mode)
-                       {
-                         shell_fn = find_function_def (var->name);
-                         if (shell_fn)
-                           printf ("%s %d %s\n", var->name, shell_fn->line, shell_fn->source_file);
-                         else
-                           printf ("%s\n", var->name);
-                       }
-                     else
-#endif /* DEBUGGER */
-                       {       
-                         t = nodefs ? var->name
-                                    : named_function_string (name, function_cell (var), FUNC_MULTILINE|FUNC_EXTERNAL);
-                         printf ("%s\n", t);
-                         any_failed = sh_chkwrite (any_failed);
-                       }
-                   }
-                 else          /* declare -[fF] -[rx] name [name...] */
-                   {
-                     VSETATTR (var, flags_on);
-                     flags_off &= ~att_function;       /* makes no sense */
-                     VUNSETATTR (var, flags_off);
-                   }
-               }
-             else
-               any_failed++;
+             sh_readonly (name);
+             any_failed++;
              NEXT_VARIABLE ();
            }
-       }
-      else             /* declare -[aAinrx] name [name...] */
-       {
-         /* Non-null if we just created or fetched a local variable. */
-#if 0
-         /* This is bash-4.3 code. */
-         /* Here's what ksh93 seems to do.  If we are modifying an existing
-            nameref variable, we don't follow the nameref chain past the last
-            nameref, and we set the nameref variable's value so future
-            references to that variable will return the value of the variable
-            we're assigning right now. */
-#else
-         /* Here's what ksh93 seems to do as of the 2012 version: if we are
-            using declare -n to modify the value of an existing nameref
-            variable, don't follow the nameref chain at all and just search
-            for a nameref at the current context.  If we have a nameref,
-            modify its value (changing which variable it references). */
-#endif
-         if (var == 0 && (flags_on & att_nameref))
+
+         /* If all we're doing is turning off the nameref attribute, don't
+            bother with VAR at all, whether it exists or not. Just turn it
+            off and go on. */
+         if (refvar && flags_on == 0 && offset == 0 && flags_off == att_nameref)
            {
-             /* See if we are trying to modify an existing nameref variable,
-                but don't follow the nameref chain. */
-             var = mkglobal ? find_global_variable_noref (name) : find_variable_noref (name);
-             if (var && nameref_p (var) == 0)
-               var = 0;
+             VUNSETATTR (refvar, att_nameref);
+             NEXT_VARIABLE ();
            }
-         /* However, if we're turning off the nameref attribute on an existing
-            nameref variable, we first follow the nameref chain to the end,
-            modify the value of the variable this nameref variable references
-            if there is an assignment statement argument,
-            *CHANGING ITS VALUE AS A SIDE EFFECT*, then turn off the nameref
-            flag *LEAVING THE NAMEREF VARIABLE'S VALUE UNCHANGED* */
-         else if (var == 0 && (flags_off & att_nameref))
-           {
-             /* See if we are trying to modify an existing nameref variable */
-             refvar = mkglobal ? find_global_variable_last_nameref (name, 0) : find_variable_last_nameref (name, 0);
-             if (refvar && nameref_p (refvar) == 0)
-               refvar = 0;
-             /* If the nameref is readonly but doesn't have a value, ksh93
-                allows the nameref attribute to be removed.  If it's readonly
-                and has a value, even if the value doesn't reference an
-                existing variable, we disallow the modification */
-             if (refvar && nameref_cell (refvar) && readonly_p (refvar))
-               {
-                 sh_readonly (name);
-                 any_failed++;
-                 NEXT_VARIABLE ();
-               }
-
-             /* If all we're doing is turning off the nameref attribute, don't
-                bother with VAR at all, whether it exists or not. Just turn it
-                off and go on. */
-             if (refvar && flags_on == 0 && offset == 0 && (flags_off & ~att_nameref) == 0)
-               {
-                 VUNSETATTR (refvar, att_nameref);
-                 NEXT_VARIABLE ();
-               }
 
-             if (refvar)
-               /* XXX - use declare_find_variable here? */
-               var = mkglobal ? find_global_variable (nameref_cell (refvar)) : find_variable (nameref_cell (refvar));
-           }
+         if (refvar)
+           var = declare_find_variable (nameref_cell (refvar), mkglobal, 0);
+       }
 #if defined (ARRAY_VARS)
-         /* If we have an array assignment to a nameref, remove the nameref
-            attribute and go on. */
-         else if (var == 0 && offset && array_subscript_assignment)
+      /* If we have an array assignment to a nameref, remove the nameref
+        attribute and go on.  This handles
+        declare -n xref[=value]; declare [-a] xref[1]=one */
+      else if (var == 0 && offset && array_subscript_assignment)
+       {
+         var = mkglobal ? find_global_variable_noref (name) : find_variable_noref (name);
+         if (var && nameref_p (var))
            {
-             var = mkglobal ? find_global_variable_noref (name) : find_variable_noref (name);
-             if (var && nameref_p (var))
-               {
-                 internal_warning (_("%s: removing nameref attribute"), name);
-                 FREE (value_cell (var));              /* XXX - bash-4.3 compat */
-                 var_setvalue (var, (char *)NULL);
-                 VUNSETATTR (var, att_nameref);
-               }
+             internal_warning (_("%s: removing nameref attribute"), name);
+             FREE (value_cell (var));          /* XXX - bash-4.3 compat */
+             var_setvalue (var, (char *)NULL);
+             VUNSETATTR (var, att_nameref);
            }
+       }
 #endif
 
-         /* See if we are trying to set flags or value (or create) for an
-            existing nameref that points to a non-existent variable: e.g.,
+      /* See if we are trying to set flags or value (or create) for an
+        existing nameref that points to a non-existent variable: e.g.,
                declare -n foo=bar
                unset foo       # unsets bar
                declare -i foo
                foo=4+4
-               declare -p foo */
-         if (var == 0 && (mkglobal || flags_on || flags_off || offset))
+               declare -p foo
+      */
+      if (var == 0 && (mkglobal || flags_on || flags_off || offset))
+       {
+         refvar = mkglobal ? find_global_variable_last_nameref (name, 0) : find_variable_last_nameref (name, 0);
+         if (refvar && nameref_p (refvar) == 0)
+           refvar = 0;
+         if (refvar)
+           var = declare_find_variable (nameref_cell (refvar), mkglobal, 0);
+         if (refvar && var == 0)
            {
-             refvar = mkglobal ? find_global_variable_last_nameref (name, 0) : find_variable_last_nameref (name, 0);
-             if (refvar && nameref_p (refvar) == 0)
-               refvar = 0;
-             if (refvar)
-               /* XXX - use declare_find_variable here? */
-               var = mkglobal ? find_global_variable (nameref_cell (refvar)) : find_variable (nameref_cell (refvar));
-             if (refvar && var == 0)
-               {
-                 oldname = name;       /* need to free this */
+             /* I'm not sure subscript_start is ever non-null here. In any
+                event, build a new name from the nameref value, including any
+                subscript, and add the [[+]=value] if offset != 0 */
+             newname = declare_build_newname (nameref_cell (refvar), subscript_start, offset, value, aflags);
+             free (name);
+             name = newname;
 
-                 namelen = strlen (nameref_cell (refvar));
-#if defined (ARRAY_VARS)
-                 if (subscript_start)
-                   {
-                     *subscript_start = '[';           /*]*/
-                     namelen +=  strlen (subscript_start);
-                   }
-#endif
-                 name = xmalloc (namelen + 2 + strlen (value) + 1);
-                 strcpy (name, nameref_cell (refvar));
-#if defined (ARRAY_VARS)
-                 if (subscript_start)
-                   strcpy (name + strlen (nameref_cell (refvar)), subscript_start);
-#endif
-                 /* We are committed to using the new name, so reset */
-                 if (offset)
+             if (offset)
+               {
+                 offset = assignment (name, 0);
+                 /* If offset was valid previously, but substituting the
+                    the nameref value results in an invalid assignment,
+                    throw an invalid identifier error */
+                 if (offset == 0)
                    {
-                     /* Rebuild assignment and restore offset and value */
-                     if (aflags & ASS_APPEND)
-                       name[namelen++] = '+';
-                     name[namelen++] = '=';
-                     if (value && *value)
-                       strcpy (name + namelen, value);
-                     else
-                       name[namelen] = '\0';
-                     offset = assignment (name, 0);
-                     /* if offset was valid previously, but the substituting
-                        of the nameref value results in an invalid assignment,
-                        throw an invalid identifier error */
-                     if (offset == 0)
-                       {
-                         free (oldname);
-                         sh_invalidid (name);
-                         assign_error++;
-                         NEXT_VARIABLE ();
-                       }
-                     name[offset] = '\0';
-                     value = name + namelen;
+                     sh_invalidid (name);
+                     assign_error++;
+                     NEXT_VARIABLE ();
                    }
-                 free (oldname);
+                 name[(aflags & ASS_APPEND) ? offset - 1 : offset] = '\0';
+                 value = name + offset + 1;
+               }
 
-                 /* OK, let's turn off the nameref attribute.
-                    Now everything else applies to VAR. */
-                 if (flags_off & att_nameref)
-                   VUNSETATTR (refvar, att_nameref);
+             /* OK, let's turn off the nameref attribute.
+                Now everything else applies to VAR. */
+             if (flags_off & att_nameref)
+               VUNSETATTR (refvar, att_nameref);
 
-                 goto restart_new_var_name;
-                 /* NOTREACHED */
-               }
+             goto restart_new_var_name;
+             /* NOTREACHED */
            }
-         if (var == 0)
-           var = declare_find_variable (name, mkglobal, chklocal);
+       }
+      if (var == 0)
+       var = declare_find_variable (name, mkglobal, chklocal);
 
+      /* At this point, VAR is the variable we are dealing with; REFVAR is the
+        nameref variable we dereferenced to get VAR, if any. */
 #if defined (ARRAY_VARS)
-         var_exists = var != 0;
-         array_exists = var && (array_p (var) || assoc_p (var));
-         creating_array = flags_on & (att_array|att_assoc);
+      var_exists = var != 0;
+      array_exists = var && (array_p (var) || assoc_p (var));
+      creating_array = flags_on & (att_array|att_assoc);
 #endif
 
-         if (var == 0)
-           {
+      /* Make a new variable if we need to. */
+      if (var == 0)
+       {
 #if defined (ARRAY_VARS)
-             if (flags_on & att_assoc)
-               {
-                 var = make_new_assoc_variable (name);
-                 if (var && offset == 0)
-                   VSETATTR (var, att_invisible);
-               }
-             else if ((flags_on & att_array) || making_array_special)
-               {
-                 var = make_new_array_variable (name);
-                 if (var && offset == 0)
-                   VSETATTR (var, att_invisible);
-               }
-             else
-#endif
-               {
-                 var = mkglobal ? bind_global_variable (name, (char *)NULL, ASS_FORCE) : bind_variable (name, (char *)NULL, ASS_FORCE);
-                 if (var && offset == 0)
-                   VSETATTR (var, att_invisible);
-               }
-             if (var == 0)
-               {
-                 /* Has to appear in brackets */
-                 NEXT_VARIABLE ();
-               }
-             created_var = 1;
-           }
-         /* Can't take an existing array variable and make it a nameref */
-         else if ((array_p (var) || assoc_p (var)) && (flags_on & att_nameref))
-           {
-             builtin_error (_("%s: reference variable cannot be an array"), name);
-             assign_error++;
-             NEXT_VARIABLE ();
-           }
-         else if (nameref_p (var) && (flags_on & att_nameref) == 0 && (flags_off & att_nameref) == 0 && offset && valid_nameref_value (value, 1) == 0)
-           {
-             builtin_error (_("`%s': invalid variable name for name reference"), value);
-             any_failed++;
-             NEXT_VARIABLE ();
-           }
-         else if (flags_on & att_nameref)
-           {
-#if 1
-             /* Check of offset is to allow an assignment to a nameref var as
-                part of the declare word to override existing value */
-             if (nameref_p (var) == 0 && var_isset (var) && offset == 0 && valid_nameref_value (value_cell (var), 0) == 0)
-               {
-                 builtin_error (_("`%s': invalid variable name for name reference"), value_cell (var));
-                 any_failed++;
-                 NEXT_VARIABLE ();
-               }
+         if (flags_on & att_assoc)
+           var = make_new_assoc_variable (name);
+         else if ((flags_on & att_array) || making_array_special)
+           var = make_new_array_variable (name);
+         else
 #endif
-             if (readonly_p (var))
-               {
-                 sh_readonly (name);
-                 any_failed++;
-                 NEXT_VARIABLE ();
-               }
-             /* ksh93 compat: turning on nameref attribute turns off -ilu */
-             VUNSETATTR (var, att_integer|att_uppercase|att_lowercase|att_capcase);
-           }
+           var = mkglobal ? bind_global_variable (name, (char *)NULL, ASS_FORCE) : bind_variable (name, (char *)NULL, ASS_FORCE);
 
-         /* Cannot use declare +r to turn off readonly attribute. */ 
-         if (readonly_p (var) && (flags_off & att_readonly))
+         if (var == 0)
            {
-             sh_readonly (name_cell (var));
-             any_failed++;
+             /* Has to appear in brackets */
              NEXT_VARIABLE ();
            }
+         if (offset == 0)
+           VSETATTR (var, att_invisible);
+         created_var = 1;
+       }
 
-         /* Cannot use declare to assign value to readonly or noassign
-            variable. */
-         if ((readonly_p (var) || noassign_p (var)) && offset)
-           {
-             if (readonly_p (var))
-               sh_readonly (name);
-             assign_error++;
-             NEXT_VARIABLE ();
-           }
+      /* Nameref variable error checking. */
+
+      /* Can't take an existing array variable and make it a nameref */
+      else if ((array_p (var) || assoc_p (var)) && (flags_on & att_nameref))
+       {
+         builtin_error (_("%s: reference variable cannot be an array"), name);
+         any_failed++;
+         NEXT_VARIABLE ();
+       }
+      /* Can't have an invalid identifier as nameref value */
+      else if (nameref_p (var) && (flags_on & att_nameref) == 0 && (flags_off & att_nameref) == 0 && offset && valid_nameref_value (value, 1) == 0)
+       {
+         builtin_error (_("`%s': invalid variable name for name reference"), value);
+         any_failed++;
+         NEXT_VARIABLE ();
+       }
+      /* Can't make an existing variable a nameref if its current value is not
+        a valid identifier. Check of offset is to allow an assignment to a
+        nameref var as part of the declare word to override existing value. */
+      else if ((flags_on & att_nameref) && nameref_p (var) == 0 && var_isset (var) && offset == 0 && valid_nameref_value (value_cell (var), 0) == 0)
+       {
+         builtin_error (_("`%s': invalid variable name for name reference"), value_cell (var));
+         any_failed++;
+         NEXT_VARIABLE ();
+       }
+      /* Can't make an existing readonly variable a nameref. */
+      else if ((flags_on & att_nameref) && readonly_p (var))
+       {
+         sh_readonly (name);
+         any_failed++;
+         NEXT_VARIABLE ();
+       }
+
+      /* Readonly variable error checking. */
+
+      /* Cannot use declare +r to turn off readonly attribute. */ 
+      if (readonly_p (var) && (flags_off & att_readonly))
+       {
+         sh_readonly (name_cell (var));
+         any_failed++;
+         NEXT_VARIABLE ();
+       }
+      /* Cannot use declare to assign value to readonly or noassign variable. */
+      else if ((readonly_p (var) || noassign_p (var)) && offset)
+       {
+         if (readonly_p (var))
+           sh_readonly (name);
+         assign_error++;
+         NEXT_VARIABLE ();
+       }
 
 #if defined (ARRAY_VARS)
-         /* make declare a[2]=foo as similar to a[2]=foo as possible if
-            a is already an array or assoc variable. */
-         if (array_subscript_assignment && array_exists && creating_array == 0)
-           simple_array_assign = 1;
-         else if ((making_array_special || creating_array || array_exists) && offset)
-           {
-             int vlen;
-             vlen = STRLEN (value);
-/*itrace("declare_builtin: name = %s value = %s flags = %d", name, value, wflags);*/
-             if (shell_compatibility_level > 43 && (wflags & W_COMPASSIGN) == 0 &&
-                       value[0] == '(' && value[vlen-1] == ')')
-               {
-                 /* The warning is only printed when using compound assignment
-                    to an array variable that doesn't already exist.  We use
-                    creating_array to allow things like
-                    declare -a foo$bar='(abc)' to work. */                  
-                 if (array_exists == 0 && creating_array == 0)
-                   internal_warning (_("%s: quoted compound array assignment deprecated"), list->word->word);
-                 compound_array_assign = array_exists || creating_array;
-                 simple_array_assign = making_array_special;
-               }
-             else if (value[0] == '(' && value[vlen-1] == ')' && (shell_compatibility_level < 44 || (wflags & W_COMPASSIGN)))
-               compound_array_assign = 1;
-             else
-               simple_array_assign = 1;
-           }
+      /* Array variable error checking. */
 
-         /* Cannot use declare +a name or declare +A name to remove an
-            array variable. */
-         if (((flags_off & att_array) && array_p (var)) || ((flags_off & att_assoc) && assoc_p (var)))
-           {
-             builtin_error (_("%s: cannot destroy array variables in this way"), name);
-             any_failed++;
-             NEXT_VARIABLE ();
-           }
+      /* Cannot use declare +a name or declare +A name to remove an array variable. */
+      if (((flags_off & att_array) && array_p (var)) || ((flags_off & att_assoc) && assoc_p (var)))
+       {
+         builtin_error (_("%s: cannot destroy array variables in this way"), name);
+         any_failed++;
+         NEXT_VARIABLE ();
+       }
+      else if ((flags_on & att_array) && assoc_p (var))
+       {
+         builtin_error (_("%s: cannot convert associative to indexed array"), name);
+         any_failed++;
+         NEXT_VARIABLE ();
+       }
+      else if ((flags_on & att_assoc) && array_p (var))
+       {
+         builtin_error (_("%s: cannot convert indexed to associative array"), name);
+         any_failed++;
+         NEXT_VARIABLE ();
+       }
 
-         if ((flags_on & att_array) && assoc_p (var))
-           {
-             builtin_error (_("%s: cannot convert associative to indexed array"), name);
-             any_failed++;
-             NEXT_VARIABLE ();
-           }
-         if ((flags_on & att_assoc) && array_p (var))
-           {
-             builtin_error (_("%s: cannot convert indexed to associative array"), name);
-             any_failed++;
-             NEXT_VARIABLE ();
-           }
+      /* make declare A[2]=foo as similar to A[2]=foo as possible if A is
+        already an array or assoc variable. */
+      if (array_subscript_assignment && array_exists && creating_array == 0)
+       simple_array_assign = 1;
+      else if ((making_array_special || creating_array || array_exists) && offset)
+       {
+         int vlen;
+         vlen = STRLEN (value);
+/*itrace("declare_builtin: name = %s value = %s flags = %d", name, value, wflags);*/
 
-         /* declare -A name[[n]] makes name an associative array variable. */
-         if (flags_on & att_assoc)
+         if (shell_compatibility_level > 43 && (wflags & W_COMPASSIGN) == 0 &&
+               value[0] == '(' && value[vlen-1] == ')')
            {
-             if (assoc_p (var) == 0)
-               var = convert_var_to_assoc (var);
+             /* I don't believe this warning is printed any more.
+                We use creating_array to allow things like
+                    declare -a foo$bar='(abc)'
+                to work as they have in the past. */
+             if (array_exists == 0 && creating_array == 0)
+               internal_warning (_("%s: quoted compound array assignment deprecated"), list->word->word);
+             compound_array_assign = array_exists || creating_array;
+             simple_array_assign = making_array_special;
            }
-         /* declare -a name[[n]] or declare name[n] makes name an indexed
-            array variable. */
-         else if ((making_array_special || (flags_on & att_array)) && array_p (var) == 0 && assoc_p (var) == 0)
-           var = convert_var_to_array (var);
+         else if (value[0] == '(' && value[vlen-1] == ')' && (shell_compatibility_level < 44 || (wflags & W_COMPASSIGN)))
+           compound_array_assign = 1;
+         else
+           simple_array_assign = 1;
+       }
+
+      /* declare -A name[[n]] makes name an associative array variable. */
+      if (flags_on & att_assoc)
+       {
+         if (assoc_p (var) == 0)
+           var = convert_var_to_assoc (var);
+       }
+      /* declare -a name[[n]] or declare name[n] makes NAME an indexed
+        array variable. */
+      else if ((making_array_special || (flags_on & att_array)) && array_p (var) == 0 && assoc_p (var) == 0)
+       var = convert_var_to_array (var);
 #endif /* ARRAY_VARS */
 
-         /* XXX - we note that we are turning on nameref attribute and defer
-            setting it until the assignment has been made so we don't do an
-            inadvertent nameref lookup.  Might have to do the same thing for
-            flags_off&att_nameref. */
-         /* XXX - ksh93 makes it an error to set a readonly nameref variable
-            using a single typeset command. */
-         onref = (flags_on & att_nameref);
-         flags_on &= ~att_nameref;
+      /* ksh93 compat: turning on nameref attribute turns off -ilu */
+      if (flags_on & att_nameref)
+       VUNSETATTR (var, att_integer|att_uppercase|att_lowercase|att_capcase);
+
+      /* XXX - we note that we are turning on nameref attribute and defer
+        setting it until the assignment has been made so we don't do an
+        inadvertent nameref lookup.  Might have to do the same thing for
+        flags_off&att_nameref. */
+      /* XXX - ksh93 makes it an error to set a readonly nameref variable
+        using a single typeset command. */
+      onref = (flags_on & att_nameref);
+      flags_on &= ~att_nameref;
 #if defined (ARRAY_VARS)
-         if (array_p (var) || assoc_p (var)
-               || (offset && compound_array_assign)
-               || simple_array_assign)
-           onref = 0;          /* array variables may not be namerefs */
+      /* I don't believe this condition ever tests true, but array variables
+        may not be namerefs */
+      if (array_p (var) || assoc_p (var) || compound_array_assign || simple_array_assign)
+       onref = 0;
 #endif
 
-         /* ksh93 seems to do this */
-         offref = (flags_off & att_nameref);
-         flags_off &= ~att_nameref;
+      /* ksh93 seems to do this */
+      offref = (flags_off & att_nameref);
+      flags_off &= ~att_nameref;
 
-         VSETATTR (var, flags_on);
-         VUNSETATTR (var, flags_off);
+      VSETATTR (var, flags_on);
+      VUNSETATTR (var, flags_off);
 
 #if defined (ARRAY_VARS)
-         if (offset && compound_array_assign)
-           assign_array_var_from_string (var, value, aflags|ASS_FORCE);
-         else if (simple_array_assign && subscript_start)
-           {
-             int local_aflags;
-             /* declare [-aA] name[N]=value */
-             *subscript_start = '[';   /* ] */
-             /* XXX - problem here with appending */
-             local_aflags = aflags&ASS_APPEND;
-             local_aflags |= assoc_noexpand ? ASS_NOEXPAND : 0;
-             var = assign_array_element (name, value, local_aflags);   /* XXX - not aflags */
-             *subscript_start = '\0';
-             if (var == 0)     /* some kind of assignment error */
-               {
-                 assign_error++;
-                 flags_on |= onref;
-                 flags_off |= offref;
-                 NEXT_VARIABLE ();
-               }
-           }
-         else if (simple_array_assign)
+      if (offset && compound_array_assign)
+       assign_array_var_from_string (var, value, aflags|ASS_FORCE);
+      else if (simple_array_assign && subscript_start)
+       {
+         int local_aflags;
+
+         /* declare [-aA] name[N]=value */
+         *subscript_start = '[';       /* ] */
+         /* XXX - problem here with appending */
+         local_aflags = aflags&ASS_APPEND;
+         local_aflags |= assoc_noexpand ? ASS_NOEXPAND : 0;
+         local_aflags |= ASS_ALLOWALLSUB;              /* allow declare a[@]=at */
+         var = assign_array_element (name, value, local_aflags, (array_eltstate_t *)0);        /* XXX - not aflags */
+         *subscript_start = '\0';
+         if (var == 0) /* some kind of assignment error */
            {
-             /* let bind_{array,assoc}_variable take care of this. */
-             if (assoc_p (var))
-               bind_assoc_variable (var, name, savestring ("0"), value, aflags|ASS_FORCE);
-             else
-               bind_array_variable (name, 0, value, aflags|ASS_FORCE);
+             assign_error++;
+             flags_on |= onref;
+             flags_off |= offref;
+             NEXT_VARIABLE ();
            }
+       }
+      else if (simple_array_assign)
+       {
+         /* let bind_{array,assoc}_variable take care of this. */
+         if (assoc_p (var))
+           bind_assoc_variable (var, name, savestring ("0"), value, aflags|ASS_FORCE);
          else
+           bind_array_variable (name, 0, value, aflags|ASS_FORCE);
+       }
+      else
 #endif
-         /* XXX - no ASS_FORCE here */
-         /* bind_variable_value duplicates the essential internals of
-            bind_variable() */
-         if (offset)
+      /* XXX - no ASS_FORCE here */
+      /* bind_variable_value duplicates the essential internals of bind_variable() */
+      if (offset)
+       {
+         if (onref || nameref_p (var))
+           aflags |= ASS_NAMEREF;
+         v = bind_variable_value (var, value, aflags);
+         if (v == 0 && (onref || nameref_p (var)))
            {
-             if (onref || nameref_p (var))
-               aflags |= ASS_NAMEREF;
-             v = bind_variable_value (var, value, aflags);
-             if (v == 0 && (onref || nameref_p (var)))
-               {
-                 if (valid_nameref_value (value, 1) == 0)
-                   sh_invalidid (value);
-                 assign_error++;
-                 /* XXX - unset this variable? or leave it as normal var? */
-                 if (created_var)
-                   delete_var (var->name, mkglobal ? global_variables : shell_variables);
-                 flags_on |= onref;            /* undo change from above */
-                 flags_off |= offref;
-                 NEXT_VARIABLE ();
-               }
+             if (valid_nameref_value (value, 1) == 0)
+               sh_invalidid (value);
+             assign_error++;
+             /* XXX - unset this variable? or leave it as normal var? */
+             if (created_var)
+               delete_var (name_cell (var), mkglobal ? global_variables : shell_variables);
+             flags_on |= onref;                /* undo change from above */
+             flags_off |= offref;
+             NEXT_VARIABLE ();
            }
+       }
 
-         /* If we found this variable in the temporary environment, as with
-            `var=value declare -x var', make sure it is treated identically
-            to `var=value export var'.  Do the same for `declare -r' and
-            `readonly'.  Preserve the attributes, except for att_tempvar. */
-         /* XXX -- should this create a variable in the global scope, or
-            modify the local variable flags?  ksh93 has it modify the
-            global scope.
-            Need to handle case like in set_var_attribute where a temporary
-            variable is in the same table as the function local vars. */
-         if ((flags_on & (att_exported|att_readonly)) && tempvar_p (var))
-           {
-             SHELL_VAR *tv;
-             char *tvalue;
+      /* If we found this variable in the temporary environment, as with
+        `var=value declare -x var', make sure it is treated identically
+        to `var=value export var'.  Do the same for `declare -r' and
+        `readonly'.  Preserve the attributes, except for att_tempvar. */
+      /* XXX -- should this create a variable in the global scope, or
+        modify the local variable flags?  ksh93 has it modify the
+        global scope.
+        Need to handle case like in set_var_attribute where a temporary
+        variable is in the same table as the function local vars. */
+      if ((flags_on & (att_exported|att_readonly)) && tempvar_p (var))
+       {
+         SHELL_VAR *tv;
+         char *tvalue;
 
-             tv = find_tempenv_variable (var->name);
+         tv = find_tempenv_variable (name_cell (var));
+         if (tv)
+           {
+             tvalue = var_isset (var) ? savestring (value_cell (var)) : savestring ("");
+             tv = bind_variable (name_cell (var), tvalue, 0);
              if (tv)
                {
-                 tvalue = var_isset (var) ? savestring (value_cell (var)) : savestring ("");
-                 tv = bind_variable (var->name, tvalue, 0);
-                 if (tv)
-                   {
-                     tv->attributes |= var->attributes & ~att_tempvar;
-                     if (tv->context > 0)
-                       VSETATTR (tv, att_propagate);
-                   }
-                 free (tvalue);
+                 tv->attributes |= var->attributes & ~att_tempvar;
+                 if (tv->context > 0)
+                   VSETATTR (tv, att_propagate);
                }
-             VSETATTR (var, att_propagate);
+             free (tvalue);
            }
+         VSETATTR (var, att_propagate);
        }
 
       /* Turn on nameref attribute we deferred above. */
-      /* XXX - should we turn on the noassign attribute for consistency with
-        ksh93 when we turn on the nameref attribute? */
       VSETATTR (var, onref);
       flags_on |= onref;
       VUNSETATTR (var, offref);
       flags_off |= offref;
+
       /* Yuck.  ksh93 compatibility.  XXX - need to investigate more but
         definitely happens when turning off nameref attribute on nameref
         (see comments above).  Under no circumstances allow this to turn
index 9d9010b78ddc431f1091334e196f8008bda28946..27d341a6f8c616caba033efc27a33fc72cd7e071 100644 (file)
@@ -1,7 +1,7 @@
 This file is enable.def, from which is created enable.c.
 It implements the builtin "enable" in Bash.
 
-Copyright (C) 1987-2020 Free Software Foundation, Inc. 
+Copyright (C) 1987-2021 Free Software Foundation, Inc. 
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -75,6 +75,7 @@ $END
 #define ENABLED  1
 #define DISABLED 2
 #define SPECIAL  4
+#define SILENT  8      /* affects dyn_load_builtin behavior */
 
 #define AFLAG  0x01
 #define DFLAG  0x02
@@ -110,6 +111,7 @@ enable_builtin (list)
 {
   int result, flags;
   int opt, filter;
+  WORD_LIST *next;
 #if defined (HAVE_DLOPEN) && defined (HAVE_DLSYM)
   char *filename;
 #endif
@@ -178,6 +180,7 @@ enable_builtin (list)
        filter |= SPECIAL;
 
       list_some_builtins (filter);
+      result = sh_chkwrite (EXECUTION_SUCCESS);
     }
 #if defined (HAVE_DLOPEN) && defined (HAVE_DLSYM)
   else if (flags & FFLAG)
@@ -187,6 +190,8 @@ enable_builtin (list)
        filter |= SPECIAL;
 
       result = dyn_load_builtin (list, filter, filename);
+      if (result != EXECUTION_SUCCESS)
+       result = EXECUTION_FAILURE;     /* normalize return value */
 #if defined (PROGRAMMABLE_COMPLETION)
       set_itemlist_dirty (&it_builtins);
 #endif
@@ -212,13 +217,37 @@ enable_builtin (list)
       while (list)
        {
          opt = enable_shell_command (list->word->word, flags & NFLAG);
+         next = list->next;
 
-         if (opt == EXECUTION_FAILURE)
+#if defined (HAVE_DLOPEN) && defined (HAVE_DLSYM)
+         /* If we try to enable a non-existent builtin, and we have dynamic
+            loading, try the equivalent of `enable -f name name'. */
+         if (opt == EX_NOTFOUND)
+           {
+             int dflags, r;
+             
+             dflags = ENABLED|SILENT|((flags & SFLAG) ? SPECIAL : 0);
+
+             list->next = 0;
+             r = dyn_load_builtin (list, dflags, list->word->word);
+             list->next = next;
+             if (r == EXECUTION_SUCCESS)
+               opt = r;
+#if defined (PROGRAMMABLE_COMPLETION)
+             set_itemlist_dirty (&it_builtins);
+#endif
+           }
+#endif
+
+         if (opt == EX_NOTFOUND)
            {
              sh_notbuiltin (list->word->word);
              result = EXECUTION_FAILURE;
            }
-         list = list->next;
+         else if (opt != EXECUTION_SUCCESS)
+           result = EXECUTION_FAILURE;
+
+         list = next;
        }
     }
   return (result);
@@ -260,7 +289,7 @@ enable_shell_command (name, disable_p)
 
   b = builtin_address_internal (name, 1);
   if (b == 0)
-    return (EXECUTION_FAILURE);
+    return (EX_NOTFOUND);
 
   if (disable_p)
     b->flags &= ~BUILTIN_ENABLED;
@@ -339,11 +368,16 @@ dyn_load_builtin (list, flags, filename)
 
   if (handle == 0)
     {
-      name = printable_filename (filename, 0);
-      builtin_error (_("cannot open shared object %s: %s"), name, dlerror ());
-      if (name != filename)
-       free (name);
-      return (EXECUTION_FAILURE);
+      /* If we've been told to be quiet, don't complain about not finding the
+        specified shared object. */
+      if ((flags & SILENT) == 0)
+       {
+         name = printable_filename (filename, 0);
+         builtin_error (_("cannot open shared object %s: %s"), name, dlerror ());
+         if (name != filename)
+           free (name);
+       }
+      return (EX_NOTFOUND);
     }
 
   for (new = 0, l = list; l; l = l->next, new++)
@@ -369,7 +403,7 @@ dyn_load_builtin (list, flags, filename)
        {
          name = printable_filename (filename, 0);
          builtin_error (_("cannot find %s in shared object %s: %s"),
-                         struct_name, name, dlerror ());
+                           struct_name, name, dlerror ());
          if (name != filename)
            free (name);
          free (struct_name);
index 18928a17edb9126fd378023756f49b2f263573ef..fd635299581f57369fe999365d998de6669f7edb 100644 (file)
@@ -1,6 +1,6 @@
 /* evalstring.c - evaluate a string as one or more shell commands. */
 
-/* Copyright (C) 1996-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1996-2022 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -84,30 +84,35 @@ restore_lastcom (x)
   the_printed_command_except_trap = x;
 }
 
+int
+should_optimize_fork (command, subshell)
+     COMMAND *command;
+     int subshell;
+{
+  return (running_trap == 0 &&
+      command->type == cm_simple &&
+      signal_is_trapped (EXIT_TRAP) == 0 &&
+      signal_is_trapped (ERROR_TRAP) == 0 &&
+      any_signals_trapped () < 0 &&
+      (subshell || (command->redirects == 0 && command->value.Simple->redirects == 0)) &&
+      ((command->flags & CMD_TIME_PIPELINE) == 0) &&
+      ((command->flags & CMD_INVERT_RETURN) == 0));
+}
+
+/* This has extra tests to account for STARTUP_STATE == 2, which is for
+   -c command but has been extended to command and process substitution
+   (basically any time you call parse_and_execute in a subshell). */
 int
 should_suppress_fork (command)
      COMMAND *command;
 {
-#if 0 /* TAG: bash-5.2 */
   int subshell;
 
   subshell = subshell_environment & SUBSHELL_PROCSUB;  /* salt to taste */
-#endif
   return (startup_state == 2 && parse_and_execute_level == 1 &&
-         running_trap == 0 &&
          *bash_input.location.string == '\0' &&
          parser_expanding_alias () == 0 &&
-         command->type == cm_simple &&
-         signal_is_trapped (EXIT_TRAP) == 0 &&
-         signal_is_trapped (ERROR_TRAP) == 0 &&
-         any_signals_trapped () < 0 &&
-#if 0 /* TAG: bash-5.2 */
-         (subshell || (command->redirects == 0 && command->value.Simple->redirects == 0)) &&
-#else
-         command->redirects == 0 && command->value.Simple->redirects == 0 &&
-#endif
-         ((command->flags & CMD_TIME_PIPELINE) == 0) &&
-         ((command->flags & CMD_INVERT_RETURN) == 0));
+         should_optimize_fork (command, subshell));
 }
 
 int
@@ -121,13 +126,14 @@ can_optimize_connection (command)
 }
 
 void
-optimize_fork (command)
+optimize_connection_fork (command)
      COMMAND *command;
 {
   if (command->type == cm_connection &&
       (command->value.Connection->connector == AND_AND || command->value.Connection->connector == OR_OR || command->value.Connection->connector == ';') &&
       (command->value.Connection->second->flags & CMD_TRY_OPTIMIZING) &&
-      should_suppress_fork (command->value.Connection->second))
+      ((startup_state == 2 && should_suppress_fork (command->value.Connection->second)) ||
+       ((subshell_environment & SUBSHELL_PAREN) && should_optimize_fork (command->value.Connection->second, 0))))
     {
       command->value.Connection->second->flags |= CMD_NO_FORK;
       command->value.Connection->second->value.Simple->flags |= CMD_NO_FORK;
@@ -138,21 +144,19 @@ void
 optimize_subshell_command (command)
      COMMAND *command;
 {
-  if (running_trap == 0 &&
-      command->type == cm_simple &&
-      signal_is_trapped (EXIT_TRAP) == 0 &&
-      signal_is_trapped (ERROR_TRAP) == 0 &&
-      any_signals_trapped () < 0 &&
-      command->redirects == 0 && command->value.Simple->redirects == 0 &&
-      ((command->flags & CMD_TIME_PIPELINE) == 0) &&
-      ((command->flags & CMD_INVERT_RETURN) == 0))
+  if (should_optimize_fork (command, 0))
     {
       command->flags |= CMD_NO_FORK;
       command->value.Simple->flags |= CMD_NO_FORK;
     }
   else if (command->type == cm_connection &&
-          (command->value.Connection->connector == AND_AND || command->value.Connection->connector == OR_OR))
-    optimize_subshell_command (command->value.Connection->second);
+          (command->value.Connection->connector == AND_AND || command->value.Connection->connector == OR_OR || command->value.Connection->connector == ';') &&
+          command->value.Connection->second->type == cm_simple &&
+          parser_expanding_alias () == 0)
+    {     
+      command->value.Connection->second->flags |= CMD_TRY_OPTIMIZING;
+      command->value.Connection->second->value.Simple->flags |= CMD_TRY_OPTIMIZING;
+    }
 }
 
 void
@@ -175,6 +179,19 @@ optimize_shell_function (command)
     }  
 }
 
+int
+can_optimize_cat_file (command)
+     COMMAND *command;
+{
+  return (command->type == cm_simple && !command->redirects &&
+           (command->flags & CMD_TIME_PIPELINE) == 0 &&
+           command->value.Simple->words == 0 &&
+           command->value.Simple->redirects &&
+           command->value.Simple->redirects->next == 0 &&
+           command->value.Simple->redirects->instruction == r_input_direction &&
+           command->value.Simple->redirects->redirector.dest == 0);
+}
+
 /* How to force parse_and_execute () to clean up after itself. */
 void
 parse_and_execute_cleanup (old_running_trap)
@@ -346,12 +363,14 @@ parse_and_execute (string, from_file, flags)
                 these circumstances.  Don't bother with cleanup here because
                 we don't want to run the function execution cleanup stuff
                 that will cause pop_context and other functions to run.
+                We call reset_local_contexts() instead, which just frees
+                context memory.
                 XXX - change that if we want the function context to be
                 unwound. */
              if (exit_immediately_on_error && variable_context)
                {
                  discard_unwind_frame ("pe_dispose");
-                 variable_context = 0; /* not in a function */
+                 reset_local_contexts (); /* not in a function */
                }
              should_jump_to_top_level = 1;
              goto out;
@@ -364,6 +383,25 @@ parse_and_execute (string, from_file, flags)
              should_jump_to_top_level = 1;
              goto out;
 
+           case EXITBLTIN:
+             if (command)
+               {
+                 if (variable_context && signal_is_trapped (0))
+                   {
+                     /* Let's make sure we run the exit trap in the function
+                        context, as we do when not running parse_and_execute.
+                        The pe_dispose unwind frame comes before any unwind-
+                        protects installed by the string we're evaluating, so
+                        it will undo the current function scope. */
+                     dispose_command (command);
+                     discard_unwind_frame ("pe_dispose");
+                   }
+                 else
+                   run_unwind_frame ("pe_dispose");
+               }
+             should_jump_to_top_level = 1;
+             goto out;
+
            case DISCARD:
              if (command)
                run_unwind_frame ("pe_dispose");
@@ -390,7 +428,7 @@ parse_and_execute (string, from_file, flags)
              break;
            }
        }
-         
+
       if (parse_command () == 0)
        {
          if ((flags & SEVAL_PARSEONLY) || (interactive_shell == 0 && read_but_dont_execute))
@@ -473,13 +511,7 @@ parse_and_execute (string, from_file, flags)
              if (startup_state == 2 &&
                  (subshell_environment & SUBSHELL_COMSUB) &&
                  *bash_input.location.string == '\0' &&
-                 command->type == cm_simple && !command->redirects &&
-                 (command->flags & CMD_TIME_PIPELINE) == 0 &&
-                 command->value.Simple->words == 0 &&
-                 command->value.Simple->redirects &&
-                 command->value.Simple->redirects->next == 0 &&
-                 command->value.Simple->redirects->instruction == r_input_direction &&
-                 command->value.Simple->redirects->redirector.dest == 0)
+                 can_optimize_cat_file (command))
                {
                  int r;
                  r = cat_file (command->value.Simple->redirects);
@@ -531,6 +563,8 @@ parse_and_execute (string, from_file, flags)
       throw_to_top_level ();
     }
 
+  CHECK_TERMSIG;
+
   if (should_jump_to_top_level)
     jump_to_top_level (code);
 
@@ -543,10 +577,11 @@ parse_and_execute (string, from_file, flags)
    command substitutions during parsing to obey Posix rules about finding
    the end of the command and balancing parens. */
 int
-parse_string (string, from_file, flags, endp)
+parse_string (string, from_file, flags, cmdp, endp)
      char *string;
      const char *from_file;
      int flags;
+     COMMAND **cmdp;
      char **endp;
 {
   int code, nc;
@@ -563,7 +598,6 @@ parse_string (string, from_file, flags, endp)
   sigprocmask (SIG_BLOCK, (sigset_t *)NULL, (sigset_t *)&ps_sigmask);
 #endif
 
-/*itrace("parse_string: `%s'", string);*/
   /* Reset the line number if the caller wants us to.  If we don't reset the
      line number, we have to subtract one, because we will add one just
      before executing the next command (resetting the line number sets it to
@@ -575,9 +609,9 @@ parse_string (string, from_file, flags, endp)
 
   code = should_jump_to_top_level = 0;
   oglobal = global_command;
-  ostring = string;
 
   with_input_from_string (string, from_file);
+  ostring = bash_input.location.string;
   while (*(bash_input.location.string))                /* XXX - parser_expanding_alias () ? */
     {
       command = (COMMAND *)NULL;
@@ -593,15 +627,15 @@ parse_string (string, from_file, flags, endp)
 
       if (code)
        {
-#if defined (DEBUG)
-itrace("parse_string: longjmp executed: code = %d", code);
-#endif
+         INTERNAL_DEBUG(("parse_string: longjmp executed: code = %d", code));
+
          should_jump_to_top_level = 0;
          switch (code)
            {
            case FORCE_EOF:
            case ERREXIT:
            case EXITPROG:
+           case EXITBLTIN:
            case DISCARD:               /* XXX */
              if (command)
                dispose_command (command);
@@ -621,7 +655,10 @@ itrace("parse_string: longjmp executed: code = %d", code);
          
       if (parse_command () == 0)
        {
-         dispose_command (global_command);
+         if (cmdp)
+           *cmdp = global_command;
+         else
+           dispose_command (global_command);
          global_command = (COMMAND *)NULL;
        }
       else
@@ -637,7 +674,11 @@ itrace("parse_string: longjmp executed: code = %d", code);
        }
 
       if (current_token == yacc_EOF || current_token == shell_eof_token)
+       {
+         if (current_token == shell_eof_token)
+           rewind_input_string ();
          break;
+       }
     }
 
 out:
@@ -663,12 +704,10 @@ out:
   return (nc);
 }
 
-/* Handle a $( < file ) command substitution.  This expands the filename,
-   returning errors as appropriate, then just cats the file to the standard
-   output. */
-static int
-cat_file (r)
+int
+open_redir_file (r, fnp)
      REDIRECT *r;
+     char **fnp;
 {
   char *fn;
   int fd, rval;
@@ -694,9 +733,30 @@ cat_file (r)
     {
       file_error (fn);
       free (fn);
+      if (fnp)
+       *fnp = 0;
       return -1;
     }
 
+  if (fnp)
+    *fnp = fn;
+  return fd;
+}
+
+/* Handle a $( < file ) command substitution.  This expands the filename,
+   returning errors as appropriate, then just cats the file to the standard
+   output. */
+static int
+cat_file (r)
+     REDIRECT *r;
+{
+  char *fn;
+  int fd, rval;
+
+  fd = open_redir_file (r, &fn);
+  if (fd < 0)
+    return -1;
+
   rval = zcatfd (fd, 1, fn);
 
   free (fn);
index cbcb641a68ad2cc847f4244885ceb1cc06ef327e..add9082295e56ab3e64bfac6816e6d773c2ae0e9 100644 (file)
@@ -1,7 +1,7 @@
 This file is exec.def, from which is created exec.c.
 It implements the builtin "exec" in Bash.
 
-Copyright (C) 1987-2019 Free Software Foundation, Inc.
+Copyright (C) 1987-2021 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -104,7 +104,7 @@ exec_builtin (list)
   int cleanenv, login, opt, orig_job_control;
   char *argv0, *command, **args, **env, *newname, *com2;
 
-  cleanenv = login = 0;
+  cleanenv = login = orig_job_control = 0;
   exec_argv0 = argv0 = (char *)NULL;
 
   reset_internal_getopt ();
@@ -215,7 +215,7 @@ exec_builtin (list)
     maybe_save_shell_history ();
 #endif /* HISTORY */
 
-  restore_original_signals ();
+  reset_signal_handlers ();            /* leave trap strings in place */
 
 #if defined (JOB_CONTROL)
   orig_job_control = job_control;      /* XXX - was also interactive_shell */
@@ -253,7 +253,7 @@ failed_exec:
   FREE (command);
 
   if (subshell_environment || (interactive == 0 && no_exit_on_failed_exec == 0))
-    exit_shell (exit_value);
+    exit_shell (last_command_exit_value = exit_value);
 
   if (args)
     strvec_dispose (args);
@@ -261,8 +261,11 @@ failed_exec:
   if (env && env != export_env)
     strvec_dispose (env);
 
-  initialize_traps ();
+  /* If we're not exiting after the exec fails, we restore the shell signal
+     handlers and then modify the signal dispositions based on the trap strings
+     before the failed exec. */
   initialize_signals (1);
+  restore_traps ();
 
 #if defined (JOB_CONTROL)
   if (orig_job_control)
index dc6f3d5b66e1f5f4a104ed0a915fed0bbc2426c7..9c85bc582726e4f9976a0e39912a0a14ee3a160c 100644 (file)
@@ -1,7 +1,7 @@
 This file is exit.def, from which is created exit.c.
 It implements the builtins "exit", and "logout" in Bash.
 
-Copyright (C) 1987-2020 Free Software Foundation, Inc.
+Copyright (C) 1987-2021 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -151,7 +151,7 @@ exit_or_logout (list)
   last_command_exit_value = exit_value;
 
   /* Exit the program. */
-  jump_to_top_level (EXITPROG);
+  jump_to_top_level (EXITBLTIN);
   /*NOTREACHED*/
 }
 
index 467dbcbcc33a89b02e228dd442f5c221a02b22bf..9b8a997de34cbed40abf43b8539452779b66e991 100644 (file)
@@ -1,7 +1,7 @@
 This file is fc.def, from which is created fc.c.
 It implements the builtin "fc" in Bash.
 
-Copyright (C) 1987-2020 Free Software Foundation, Inc.
+Copyright (C) 1987-2021 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -450,6 +450,8 @@ fc_builtin (list)
   for (i = reverse ? histend : histbeg; reverse ? i >= histbeg : i <= histend; reverse ? i-- : i++)
     {
       QUIT;
+      if (hlist[i] == 0)
+       continue;
       if (numbering)
        fprintf (stream, "%d", i + history_base);
       if (listing)
@@ -459,7 +461,8 @@ fc_builtin (list)
          else
            fprintf (stream, "\t%c", histdata (i) ? '*' : ' ');
        }
-      fprintf (stream, "%s\n", histline (i));
+      if (histline (i))
+       fprintf (stream, "%s\n", histline (i));
     }
 
   if (listing)
index 6bed44745827f3cc7938c510cc9f71473a3c201c..d27d306b1a76567a9d59733b703f7c7a95bc258b 100644 (file)
@@ -1,6 +1,6 @@
 /* gen-helpfiles - create files containing builtin help text */
 
-/* Copyright (C) 2012-2020 Free Software Foundation, Inc.
+/* Copyright (C) 2012-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -64,6 +64,7 @@
 #undef xrealloc
 #undef xfree
 
+#undef malloc
 #undef free            /* defined in xmalloc.h */
 #endif
 
index c58e91c4fc66a64b37e1d8d891a4ffc522a608d7..03ae5474d378c189bc2d4c50cb994d7b0a769fa8 100644 (file)
@@ -1,7 +1,7 @@
 This file is hash.def, from which is created hash.c.
 It implements the builtin "hash" in Bash.
 
-Copyright (C) 1987-2020 Free Software Foundation, Inc.
+Copyright (C) 1987-2021 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -138,7 +138,7 @@ hash_builtin (list)
            (list_portably == 0 || shell_compatibility_level <= 50))
        printf (_("%s: hash table empty\n"), this_command_name);
 
-      return (EXECUTION_SUCCESS);
+      return (sh_chkwrite (EXECUTION_SUCCESS));
     }
 
   if (expunge_hash_table)
@@ -177,7 +177,7 @@ hash_builtin (list)
        continue;
       else if (pathname)
        {
-         if (is_directory (pathname))
+         if (file_isdir (pathname))
            {
 #ifdef EISDIR
              builtin_error ("%s: %s", pathname, strerror (EISDIR));
index f33b2b9352189a3cbb7bad692d3fe0929d490826..346d93fe8e139be04b3aef75535c1f2215cc75da 100644 (file)
@@ -1,7 +1,7 @@
 This file is help.def, from which is created help.c.
 It implements the builtin "help" in Bash.
 
-Copyright (C) 1987-2020 Free Software Foundation, Inc.
+Copyright (C) 1987-2021 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -186,8 +186,7 @@ help_builtin (list)
       return (EXECUTION_FAILURE);
     }
 
-  fflush (stdout);
-  return (EXECUTION_SUCCESS);
+  return (sh_chkwrite (EXECUTION_SUCCESS));
 }
 
 void
index 5db44c2c2906e6e76df17af781c545f362e1967f..6918d8a42cec5730284da1ad8210818ecf404fc6 100644 (file)
@@ -1,7 +1,7 @@
 This file is history.def, from which is created history.c.
 It implements the builtin "history" in Bash.
 
-Copyright (C) 1987-2020 Free Software Foundation, Inc.
+Copyright (C) 1987-2021 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -100,6 +100,10 @@ static int expand_and_print_history PARAMS((WORD_LIST *));
 #define CFLAG  0x40
 #define DFLAG  0x80
 
+#ifndef TIMELEN_MAX
+#  define TIMELEN_MAX 128
+#endif
+
 int
 history_builtin (list)
      WORD_LIST *list;
@@ -189,35 +193,29 @@ history_builtin (list)
          return (EXECUTION_FAILURE);
        }
       if (delete_arg[0] == '-' && delete_start < 0)
-        {
-         /* the_history[history_length] == 0x0, so this is correct */
-          delete_start += history_length;
-         if (delete_start < history_base)
-           {
-start_error:
-             sh_erange (delete_arg, _("history position"));
-             return (EXECUTION_FAILURE);
-           }
-        }
+       /* the_history[history_length] == 0x0, so this is correct */
+        delete_start += history_length;
       /* numbers as displayed by display_history are offset by history_base */
       else if (delete_start > 0)
        delete_start -= history_base;
+
       if (delete_start < 0 || delete_start >= history_length)
-       goto start_error;
+       {
+         sh_erange (delete_arg, _("history position"));
+         return (EXECUTION_FAILURE);
+       }
+
       if (range[0] == '-' && delete_end < 0)
-        {
-          delete_end += history_length;
-         if (delete_end < history_base)
-           {
-range_error:
-             sh_erange (range, _("history position"));
-             return (EXECUTION_FAILURE);
-           }
-        }
+        delete_end += history_length;
       else if (delete_end > 0)
        delete_end -= history_base;
+
       if (delete_end < 0 || delete_end >= history_length)
-       goto range_error;
+       {
+         sh_erange (range, _("history position"));
+         return (EXECUTION_FAILURE);
+       }
+      /* XXX - print error if end < start? */
       result = bash_delete_history_range (delete_start, delete_end);
       if (where_history () > history_length)
        history_set_pos (history_length);
@@ -237,7 +235,7 @@ range_error:
             that history -d -1 will delete the last history entry, which at
             this point is the history -d -1 we just added. */
          ind = history_length + delete_offset;
-         if (ind < history_base)
+         if (ind < 0)          /* offset by history_base below */
            {
              sh_erange (delete_arg, _("history position"));
              return (EXECUTION_FAILURE);
@@ -328,7 +326,7 @@ histtime (hlist, histtimefmt)
      HIST_ENTRY *hlist;
      const char *histtimefmt;
 {
-  static char timestr[128];
+  static char timestr[TIMELEN_MAX];
   time_t t;
   struct tm *tm;
 
index 65c3cb4f35ea9076f5373f085a743355b9d7565f..4ddd723382bd8b985518a99b1093e9f516165d1c 100644 (file)
@@ -2,7 +2,7 @@ This file is mapfile.def, from which is created mapfile.c.
 It implements the builtin "mapfile" in Bash.
 
 Copyright (C) 2005-2006 Rocky Bernstein for Free Software Foundation, Inc.
-Copyright (C) 2008-2020 Free Software Foundation, Inc.
+Copyright (C) 2008-2021 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -68,6 +68,7 @@ $END
 #include <config.h>
 
 #include "builtins.h"
+#include "../bashtypes.h"
 #include "posixstat.h"
 
 #if defined (HAVE_UNISTD_H)
@@ -140,7 +141,7 @@ do_chop(line, delim)
   int length;
 
   length = strlen (line);
-  if (length && line[length-1] == delim) 
+  if (length && (unsigned char)line[length-1] == delim) 
     line[length-1] = '\0';
 }
 
@@ -156,6 +157,7 @@ mapfile (fd, line_count_goal, origin, nskip, callback_quantum, callback, array_n
   size_t line_length;
   unsigned int array_index, line_count;
   SHELL_VAR *entry;
+  struct stat sb;
   int unbuffered_read;
   
   line = NULL;
@@ -165,34 +167,22 @@ mapfile (fd, line_count_goal, origin, nskip, callback_quantum, callback, array_n
   /* The following check should be done before reading any lines.  Doing it
      here allows us to call bind_array_element instead of bind_array_variable
      and skip the variable lookup on every call. */
-  entry = find_or_make_array_variable (array_name, 1);
-  if (entry == 0 || readonly_p (entry) || noassign_p (entry))
-    {
-      if (entry && readonly_p (entry))
-       err_readonly (array_name);
-       
-      return (EXECUTION_FAILURE);
-    }
-  else if (array_p (entry) == 0)
-    {
-      builtin_error (_("%s: not an indexed array"), array_name);
-      return (EXECUTION_FAILURE);
-    }
-  else if (invisible_p (entry))
-    VUNSETATTR (entry, att_invisible); /* no longer invisible */
-      
-  if (flags & MAPF_CLEARARRAY)
-    array_flush (array_cell (entry));
+  entry = builtin_find_indexed_array (array_name, flags & MAPF_CLEARARRAY);
+  if (entry == 0)
+    return EXECUTION_FAILURE;
 
 #ifndef __CYGWIN__
-  unbuffered_read = (lseek (fd, 0L, SEEK_CUR) < 0) && (errno == ESPIPE);
+  /* If the delimiter is a newline, turn on unbuffered reads for pipes
+     (terminals are ok). If the delimiter is not a newline, unbuffered reads
+     for every file descriptor that's not a regular file. */
+  if (delim == '\n')
+    unbuffered_read = (lseek (fd, 0L, SEEK_CUR) < 0) && (errno == ESPIPE);
+  else
+    unbuffered_read = (fstat (fd, &sb) != 0) || (S_ISREG (sb.st_mode) == 0);
 #else
   unbuffered_read = 1;
 #endif
 
-  if (delim != '\n')
-    unbuffered_read = 1;
-
   zreset ();
 
   /* Skip any lines at beginning of file? */
@@ -215,11 +205,11 @@ mapfile (fd, line_count_goal, origin, nskip, callback_quantum, callback, array_n
       /* Has a callback been registered and if so is it time to call it? */
       if (callback && line_count && (line_count % callback_quantum) == 0) 
        {
-         run_callback (callback, array_index, line);
-
          /* Reset the buffer for bash own stream. */
          if (unbuffered_read == 0)
            zsyncfd (fd);
+
+         run_callback (callback, array_index, line);
        }
 
       /* XXX - bad things can happen if the callback modifies ENTRY, e.g.,
index e243021ffd5057b1a5a3a248768251533a4641cc..f505ebde17e5aab626095e1af250e93a2f80076c 100644 (file)
@@ -1,7 +1,7 @@
 /* mkbuiltins.c - Create builtins.c, builtext.h, and builtdoc.c from
    a single source file called builtins.def. */
 
-/* Copyright (C) 1987-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2022 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -72,7 +72,8 @@ extern char *strcpy ();
 #define BUILTIN_FLAG_SPECIAL   0x01
 #define BUILTIN_FLAG_ASSIGNMENT 0x02
 #define BUILTIN_FLAG_LOCALVAR  0x04
-#define BUILTIN_FLAG_POSIX_BUILTIN 0x08
+#define BUILTIN_FLAG_POSIX_BUILTIN     0x08
+#define BUILTIN_FLAG_ARRAYREF_ARG      0x10
 
 #define BASE_INDENT    4
 
@@ -112,6 +113,12 @@ char *struct_filename = (char *)NULL;
 /* The name of the external declaration file. */
 char *extern_filename = (char *)NULL;
 
+/* The name of the include file to write into the structure file, if it's
+   different from extern_filename. */
+char *include_filename = (char *)NULL;
+
+/* The name of the include file to put into the generated struct filename. */
+
 /* Here is a structure for manipulating arrays of data. */
 typedef struct {
   int size;            /* Number of slots allocated to array. */
@@ -173,11 +180,22 @@ char *posix_builtins[] =
   (char *)NULL
 };
 
+/* The builtin commands that can take array references as arguments and pay
+   attention to `assoc_expand_once'. These are the ones that don't assign
+   values, but need to avoid double expansions. */
+char *arrayvar_builtins[] =
+{
+  "declare", "let", "local", "printf", "read", "test", "[",
+  "typeset", "unset", "wait",          /*]*/
+  (char *)NULL
+};
+       
 /* Forward declarations. */
 static int is_special_builtin ();
 static int is_assignment_builtin ();
 static int is_localvar_builtin ();
 static int is_posix_builtin ();
+static int is_arrayvar_builtin ();
 
 #if !defined (HAVE_RENAME)
 static int rename ();
@@ -229,6 +247,8 @@ main (argc, argv)
 
       if (strcmp (arg, "-externfile") == 0)
        extern_filename = argv[arg_index++];
+      else if (strcmp (arg, "-includefile") == 0)
+       include_filename = argv[arg_index++];
       else if (strcmp (arg, "-structfile") == 0)
        struct_filename = argv[arg_index++];
       else if (strcmp (arg, "-noproduction") == 0)
@@ -272,6 +292,9 @@ main (argc, argv)
        }
     }
 
+  if (include_filename == 0)
+    include_filename = extern_filename;
+
   /* If there are no files to process, just quit now. */
   if (arg_index == argc)
     exit (0);
@@ -831,6 +854,8 @@ builtin_handler (self, defs, arg)
     new->flags |= BUILTIN_FLAG_LOCALVAR;
   if (is_posix_builtin (name))
     new->flags |= BUILTIN_FLAG_POSIX_BUILTIN;
+  if (is_arrayvar_builtin (name))
+    new->flags |= BUILTIN_FLAG_ARRAYREF_ARG;
 
   array_add ((char *)new, defs->builtins);
   building_builtin = 1;
@@ -1111,7 +1136,7 @@ char *structfile_header[] = {
   "/* This file is manufactured by ./mkbuiltins, and should not be",
   "   edited by hand.  See the source to mkbuiltins for details. */",
   "",
-  "/* Copyright (C) 1987-2015 Free Software Foundation, Inc.",
+  "/* Copyright (C) 1987-2022 Free Software Foundation, Inc.",
   "",
   "   This file is part of GNU Bash, the Bourne Again SHell.",
   "",
@@ -1173,7 +1198,7 @@ write_file_headers (structfile, externfile)
        fprintf (structfile, "%s\n", structfile_header[i]);
 
       fprintf (structfile, "#include \"%s\"\n",
-              extern_filename ? extern_filename : "builtext.h");
+              include_filename ? include_filename : "builtext.h");
 
       fprintf (structfile, "#include \"bashintl.h\"\n");
 
@@ -1183,7 +1208,7 @@ write_file_headers (structfile, externfile)
   if (externfile)
     fprintf (externfile,
             "/* %s - The list of builtins found in libbuiltins.a. */\n",
-            extern_filename ? extern_filename : "builtext.h");
+            include_filename ? include_filename : "builtext.h");
 }
 
 /* Write out any necessary closing information for
@@ -1250,12 +1275,13 @@ write_builtins (defs, structfile, externfile)
                  else
                    fprintf (structfile, "(sh_builtin_func_t *)0x0, ");
 
-                 fprintf (structfile, "%s%s%s%s%s, %s_doc,\n",
+                 fprintf (structfile, "%s%s%s%s%s%s, %s_doc,\n",
                    "BUILTIN_ENABLED | STATIC_BUILTIN",
                    (builtin->flags & BUILTIN_FLAG_SPECIAL) ? " | SPECIAL_BUILTIN" : "",
                    (builtin->flags & BUILTIN_FLAG_ASSIGNMENT) ? " | ASSIGNMENT_BUILTIN" : "",
                    (builtin->flags & BUILTIN_FLAG_LOCALVAR) ? " | LOCALVAR_BUILTIN" : "",
                    (builtin->flags & BUILTIN_FLAG_POSIX_BUILTIN) ? " | POSIX_BUILTIN" : "",
+                   (builtin->flags & BUILTIN_FLAG_ARRAYREF_ARG) ? " | ARRAYREF_BUILTIN" : "",
                    document_name (builtin));
 
                  /* Don't translate short document summaries that are identical
@@ -1645,6 +1671,13 @@ is_posix_builtin (name)
   return (_find_in_table (name, posix_builtins));
 }
 
+static int
+is_arrayvar_builtin (name)
+     char *name;
+{
+  return (_find_in_table (name, arrayvar_builtins));
+}
+
 #if !defined (HAVE_RENAME)
 static int
 rename (from, to)
index 0a5f4897f34ca1819b64413fe937bbdb120ec802..84658c3990c822bccb146ecf964af0ddb4398b7d 100644 (file)
@@ -1,7 +1,7 @@
 This file is printf.def, from which is created printf.c.
 It implements the builtin "printf" in Bash.
 
-Copyright (C) 1997-2020 Free Software Foundation, Inc.
+Copyright (C) 1997-2021 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -40,6 +40,8 @@ printf interprets:
 
   %b   expand backslash escape sequences in the corresponding argument
   %q   quote the argument in a way that can be reused as shell input
+  %Q   like %q, but apply any precision to the unquoted argument before
+               quoting
   %(fmt)T      output the date-time string resulting from using FMT as a format
                string for strftime(3)
 
@@ -149,7 +151,7 @@ extern int errno;
       if (vflag) \
        { \
          SHELL_VAR *v; \
-         v = builtin_bind_variable  (vname, vbuf, 0); \
+         v = builtin_bind_variable  (vname, vbuf, bindflags); \
          stupidly_hack_special_variables (vname); \
          if (v == 0 || readonly_p (v) || noassign_p (v)) \
            return (EXECUTION_FAILURE); \
@@ -184,6 +186,10 @@ extern int errno;
 #define SKIP1 "#'-+ 0"
 #define LENMODS "hjlLtz"
 
+#ifndef TIMELEN_MAX
+#  define TIMELEN_MAX 128
+#endif
+
 extern time_t shell_start_time;
 
 #if !HAVE_ASPRINTF
@@ -209,13 +215,16 @@ static uintmax_t getuintmax PARAMS((void));
 
 #if defined (HAVE_LONG_DOUBLE) && HAVE_DECL_STRTOLD && !defined(STRTOLD_BROKEN)
 typedef long double floatmax_t;
+#  define USE_LONG_DOUBLE 1
 #  define FLOATMAX_CONV        "L"
 #  define strtofltmax  strtold
 #else
 typedef double floatmax_t;
+#  define USE_LONG_DOUBLE 0
 #  define FLOATMAX_CONV        ""
 #  define strtofltmax  strtod
 #endif
+static double getdouble PARAMS((void));
 static floatmax_t getfloatmax PARAMS((void));
 
 static intmax_t asciicode PARAMS((void));
@@ -226,6 +235,7 @@ static int conversion_error;
 
 /* printf -v var support */
 static int vflag = 0;
+static int bindflags = 0;
 static char *vbuf, *vname;
 static size_t vbsize;
 static int vblen;
@@ -240,8 +250,8 @@ printf_builtin (list)
      WORD_LIST *list;
 {
   int ch, fieldwidth, precision;
-  int have_fieldwidth, have_precision;
-  char convch, thisch, nextch, *format, *modstart, *fmt, *start;
+  int have_fieldwidth, have_precision, use_Lmod, altform;
+  char convch, thisch, nextch, *format, *modstart, *precstart, *fmt, *start;
 #if defined (HANDLE_MULTIBYTE)
   char mbch[25];               /* 25 > MB_LEN_MAX, plus can handle 4-byte UTF-8 and large Unicode characters*/
   int mbind, mblen;
@@ -251,8 +261,6 @@ printf_builtin (list)
 #endif
 
   conversion_error = 0;
-  retval = EXECUTION_SUCCESS;
-
   vflag = 0;
 
   reset_internal_getopt ();
@@ -262,12 +270,14 @@ printf_builtin (list)
        {
        case 'v':
          vname = list_optarg;
+         bindflags = 0;
 #if defined (ARRAY_VARS)
-         arrayflags = assoc_expand_once ? (VA_NOEXPAND|VA_ONEWORD) : 0;
-         if (legal_identifier (vname) || valid_array_reference (vname, arrayflags))
+         SET_VFLAGS (list_optflags, arrayflags, bindflags);
+         retval = legal_identifier (vname) || valid_array_reference (vname, arrayflags);
 #else
-         if (legal_identifier (vname))
+         retval = legal_identifier (vname);
 #endif
+         if (retval)
            {
              vflag = 1;
              if (vbsize == 0)
@@ -310,6 +320,7 @@ printf_builtin (list)
 
   format = list->word->word;
   tw = 0;
+  retval = EXECUTION_SUCCESS;
 
   garglist = orig_arglist = list->next;
 
@@ -330,7 +341,8 @@ printf_builtin (list)
       for (fmt = format; *fmt; fmt++)
        {
          precision = fieldwidth = 0;
-         have_fieldwidth = have_precision = 0;
+         have_fieldwidth = have_precision = altform = 0;
+         precstart = 0;
 
          if (*fmt == '\\')
            {
@@ -367,9 +379,11 @@ printf_builtin (list)
              continue;
            }
 
-         /* found format specification, skip to field width */
+         /* Found format specification, skip to field width. We check for
+            alternate form for possible later use. */
          for (; *fmt && strchr(SKIP1, *fmt); ++fmt)
-           ;
+           if (*fmt == '#')
+             altform++;
 
          /* Skip optional field width. */
          if (*fmt == '*')
@@ -404,6 +418,8 @@ printf_builtin (list)
                  if (*fmt == '-')
 #endif
                    fmt++;
+                 if (DIGIT (*fmt))
+                   precstart = fmt;
                  while (DIGIT (*fmt))
                    fmt++;
                }
@@ -411,8 +427,12 @@ printf_builtin (list)
 
          /* skip possible format modifiers */
          modstart = fmt;
+         use_Lmod = 0;
          while (*fmt && strchr (LENMODS, *fmt))
-           fmt++;
+           {
+             use_Lmod |= USE_LONG_DOUBLE && *fmt == 'L';
+             fmt++;
+           }
            
          if (*fmt == 0)
            {
@@ -449,7 +469,7 @@ printf_builtin (list)
 
            case '(':
              {
-               char *timefmt, timebuf[128], *t;
+               char *timefmt, timebuf[TIMELEN_MAX], *t;
                int n;
                intmax_t arg;
                time_t secs;
@@ -531,7 +551,7 @@ printf_builtin (list)
                if (var && *var)
                  {
                    if (legal_identifier (var))
-                     bind_var_to_int (var, tw);
+                     bind_var_to_int (var, tw, 0);
                    else
                      {
                        sh_invalidid (var);
@@ -573,12 +593,27 @@ printf_builtin (list)
              }
 
            case 'q':           /* print with shell quoting */
+           case 'Q':
              {
                char *p, *xp;
-               int r;
+               int r, mpr;
+               size_t slen;
 
                r = 0;
                p = getstr ();
+               /* Decode precision and apply it to the unquoted string. */
+               if (convch == 'Q' && precstart)
+                 {
+                   mpr = *precstart++ - '0';
+                   while (DIGIT (*precstart))
+                     mpr = (mpr * 10) + (*precstart++ - '0');
+                   /* Error if precision > INT_MAX here? */
+                   precision = (mpr < 0 || mpr > INT_MAX) ? INT_MAX : mpr;
+                   slen = strlen (p);
+                   /* printf precision works in bytes. */
+                   if (precision < slen)
+                     p[precision] = '\0';
+                 }
                if (p && *p == 0)       /* XXX - getstr never returns null */
                  xp = savestring ("''");
                else if (ansic_shouldquote (p))
@@ -587,6 +622,12 @@ printf_builtin (list)
                  xp = sh_backslash_quote (p, 0, 3);
                if (xp)
                  {
+                   if (convch == 'Q')
+                     {
+                       slen = strlen (xp);
+                       if (slen > precision)
+                         precision = slen;
+                     }             
                    /* Use printstr to get fieldwidth and precision right. */
                    r = printstr (start, xp, strlen (xp), fieldwidth, precision);
                    if (r < 0)
@@ -662,11 +703,24 @@ printf_builtin (list)
 #endif
              {
                char *f;
-               floatmax_t p;
 
-               p = getfloatmax ();
-               f = mklong (start, FLOATMAX_CONV, sizeof(FLOATMAX_CONV) - 1);
-               PF (f, p);
+               if (use_Lmod || posixly_correct == 0)
+                 {
+                   floatmax_t p;
+
+                   p = getfloatmax ();
+                   f = mklong (start, "L", 1);
+                   PF (f, p);
+                 }
+               else            /* posixly_correct */
+                 {
+                   double p;
+
+                   p = getdouble ();
+                   f = mklong (start, "", 0);
+                   PF (f, p);
+                 }
+
                break;
              }
 
@@ -760,7 +814,7 @@ printstr (fmt, string, len, fieldwidth, precision)
       fw = (mfw < 0 || mfw > INT_MAX) ? INT_MAX : mfw;
     }
 
-  /* get precision, if present */
+  /* get precision, if present. doesn't handle negative precisions */
   if (*fmt == '.')
     {
       fmt++;
@@ -776,6 +830,8 @@ printstr (fmt, string, len, fieldwidth, precision)
            mpr = (mpr * 10) + (*fmt++ - '0');
          /* Error if precision > INT_MAX here? */
          pr = (mpr < 0 || mpr > INT_MAX) ? INT_MAX : mpr;
+         if (pr < precision && precision < INT_MAX)
+           pr = precision;             /* XXX */
        }
       else
        pr = 0;         /* "a null digit string is treated as zero" */
@@ -1214,6 +1270,33 @@ getuintmax ()
   return (ret);
 }
 
+static double
+getdouble ()
+{
+  double ret;
+  char *ep;
+
+  if (garglist == 0)
+    return (0);
+
+  if (garglist->word->word[0] == '\'' || garglist->word->word[0] == '"')
+    return asciicode ();
+
+  errno = 0;
+  ret = strtod (garglist->word->word, &ep);
+
+  if (*ep)
+    {
+      sh_invalidnum (garglist->word->word);
+      conversion_error = 1;
+    }
+  else if (errno == ERANGE)
+    printf_erange (garglist->word->word);
+
+  garglist = garglist->next;
+  return (ret);
+}
+
 static floatmax_t
 getfloatmax ()
 {
index 39e16e844bb0a96c6c28322a62b95e63a0a8d4f5..3c38bc0276981035ce7c05f0c05a08dd22096ca6 100644 (file)
@@ -1,7 +1,7 @@
 This file is read.def, from which is created read.c.
 It implements the builtin "read" in Bash.
 
-Copyright (C) 1987-2020 Free Software Foundation, Inc.
+Copyright (C) 1987-2021 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -30,7 +30,8 @@ if the -u option is supplied.  The line is split into fields as with word
 splitting, and the first word is assigned to the first NAME, the second
 word to the second NAME, and so on, with any leftover words assigned to
 the last NAME.  Only the characters found in $IFS are recognized as word
-delimiters.
+delimiters. By default, the backslash character escapes delimiter characters
+and newline.
 
 If no NAMEs are supplied, the line read is stored in the REPLY variable.
 
@@ -107,6 +108,7 @@ $END
 #endif
 
 #include "shmbutil.h"
+#include "timer.h"
 
 #if !defined(errno)
 extern int errno;
@@ -124,19 +126,19 @@ static int set_itext PARAMS((void));
 static char *edit_line PARAMS((char *, char *));
 static void set_eol_delim PARAMS((int));
 static void reset_eol_delim PARAMS((char *));
+static void set_readline_timeout PARAMS((sh_timer *t, time_t, long));
 #endif
-static SHELL_VAR *bind_read_variable PARAMS((char *, char *));
+static SHELL_VAR *bind_read_variable PARAMS((char *, char *, int));
 #if defined (HANDLE_MULTIBYTE)
 static int read_mbchar PARAMS((int, char *, int, int, int));
 #endif
 static void ttyrestore PARAMS((struct ttsave *));
 
 static sighandler sigalrm PARAMS((int));
-static void reset_alarm PARAMS((void));
+static void reset_timeout PARAMS((void));
 
 /* Try this to see what the rest of the shell can do with the information. */
-procenv_t alrmbuf;
-int sigalrm_seen;
+sh_timer *read_timeout;
 
 static int reading, tty_modified;
 static SigHandler *old_alrm;
@@ -148,21 +150,44 @@ static struct ttsave termsave;
    avoids problems with the semi-tricky stuff we do with the xfree of
    input_string at the top of the unwind-protect list (see below). */
 
-/* Set a flag that CHECK_ALRM can check.  This relies on zread or read_builtin
-   calling trap.c:check_signals(), which knows about sigalrm_seen and alrmbuf. */
+/* Set a flag that check_read_timeout can check.  This relies on zread or
+   read_builtin calling trap.c:check_signals() (which calls check_read_timeout()) */
 static sighandler
 sigalrm (s)
      int s;
 {
-  sigalrm_seen = 1;
+  /* Display warning if this is called without read_timeout set? */
+  if (read_timeout)
+    read_timeout->alrmflag = 1;
 }
 
 static void
-reset_alarm ()
+reset_timeout ()
 {
   /* Cancel alarm before restoring signal handler. */
-  falarm (0, 0);
-  set_signal_handler (SIGALRM, old_alrm);
+  if (read_timeout)
+    shtimer_clear (read_timeout);
+  read_timeout = 0;
+}
+
+void
+check_read_timeout ()
+{
+  if (read_timeout && shtimer_chktimeout (read_timeout))
+    sh_longjmp (read_timeout->jmpenv, 1);
+}
+
+int
+read_builtin_timeout (fd)
+     int fd;
+{
+  if ((read_timeout == 0) ||
+      (read_timeout->fd != fd) ||
+      (read_timeout->tmout.tv_sec == 0 && read_timeout->tmout.tv_usec == 0))
+    return 0;
+
+  return ((read_timeout->flags & SHTIMER_ALARM) ? shtimer_alrm (read_timeout)
+                                               : shtimer_select (read_timeout));
 }
 
 /* Read the value of the shell variables whose names follow.
@@ -191,10 +216,12 @@ read_builtin (list)
   struct stat tsb;
   SHELL_VAR *var;
   TTYSTRUCT ttattrs, ttset;
+  sigset_t chldset, prevset;
 #if defined (ARRAY_VARS)
   WORD_LIST *alist;
   int vflags;
 #endif
+  int bindflags;
 #if defined (READLINE)
   char *rlbuf, *itext;
   int rlind;
@@ -225,7 +252,8 @@ read_builtin (list)
   USE_VAR(ps2);
   USE_VAR(lastsig);
 
-  sigalrm_seen = reading = tty_modified = 0;
+  reading = tty_modified = 0;
+  read_timeout = 0;
 
   i = 0;               /* Index into the string that we are reading. */
   raw = edit = 0;      /* Not reading raw input by default. */
@@ -330,18 +358,16 @@ read_builtin (list)
   /* `read -t 0 var' tests whether input is available with select/FIONREAD,
      and fails if those are unavailable */
   if (have_timeout && tmsec == 0 && tmusec == 0)
-#if 0
-    return (EXECUTION_FAILURE);
-#else
     return (input_avail (fd) ? EXECUTION_SUCCESS : EXECUTION_FAILURE);
-#endif
 
   /* Convenience: check early whether or not the first of possibly several
      variable names is a valid identifier, and bail early if so. */
 #if defined (ARRAY_VARS)
-  vflags = assoc_expand_once ? (VA_NOEXPAND|VA_ONEWORD) : 0;
+  if (list)
+    SET_VFLAGS (list->word->flags, vflags, bindflags);
   if (list && legal_identifier (list->word->word) == 0 && valid_array_reference (list->word->word, vflags) == 0)
 #else
+  bindflags = 0;
   if (list && legal_identifier (list->word->word) == 0)
 #endif
     {
@@ -387,6 +413,12 @@ read_builtin (list)
        }
     }
 
+#if defined (SIGCHLD)
+  sigemptyset (&chldset);
+  sigprocmask (SIG_BLOCK, (sigset_t *)0, &chldset);
+  sigaddset (&chldset, SIGCHLD);
+#endif
+
   begin_unwind_frame ("read_builtin");
 
 #if defined (BUFFERED_INPUT)
@@ -435,10 +467,27 @@ read_builtin (list)
 
   if (tmsec > 0 || tmusec > 0)
     {
-      code = setjmp_nosigs (alrmbuf);
+      read_timeout = shtimer_alloc ();
+      read_timeout->flags = SHTIMER_LONGJMP;
+
+#if defined (HAVE_SELECT)
+      read_timeout->flags |= (edit || posixly_correct) ? SHTIMER_ALARM : SHTIMER_SELECT;
+#else
+      read_timeout->flags |= SHTIMER_ALARM;
+#endif
+      read_timeout->fd = fd;
+
+      read_timeout->alrm_handler = sigalrm;
+    }
+
+  if (tmsec > 0 || tmusec > 0)
+    {
+      code = setjmp_nosigs (read_timeout->jmpenv);
       if (code)
        {
-         sigalrm_seen = 0;
+         reset_timeout ();
+         sigprocmask (SIG_SETMASK, &prevset, (sigset_t *)0);
+
          /* Tricky.  The top of the unwind-protect stack is the free of
             input_string.  We want to run all the rest and use input_string,
             so we have to save input_string temporarily, run the unwind-
@@ -460,16 +509,17 @@ read_builtin (list)
        }
       if (interactive_shell == 0)
        initialize_terminating_signals ();
-      old_alrm = set_signal_handler (SIGALRM, sigalrm);
-      add_unwind_protect (reset_alarm, (char *)NULL);
+      add_unwind_protect (reset_timeout, (char *)NULL);
 #if defined (READLINE)
       if (edit)
        {
          add_unwind_protect (reset_attempted_completion_function, (char *)NULL);
          add_unwind_protect (bashline_reset_event_hook, (char *)NULL);
+         set_readline_timeout (read_timeout, tmsec, tmusec);
        }
+      else
 #endif
-      falarm (tmsec, tmusec);
+      shtimer_set (read_timeout, tmsec, tmusec);
     }
 
   /* If we've been asked to read only NCHARS chars, or we're using some
@@ -545,12 +595,16 @@ read_builtin (list)
      of the unwind-protect stack after the realloc() works right. */
   add_unwind_protect (xfree, input_string);
 
-  CHECK_ALRM;
+  check_read_timeout ();
+  /* These only matter if edit == 0 */
   if ((nchars > 0) && (input_is_tty == 0) && ignore_delim)     /* read -N */
     unbuffered_read = 2;
+#if 0
   else if ((nchars > 0) || (delim != '\n') || input_is_pipe)
+#else
+  else if (((nchars > 0 || delim != '\n') && input_is_tty) || input_is_pipe)
     unbuffered_read = 1;
-
+#endif
   if (prompt && edit == 0)
     {
       fprintf (stderr, "%s", prompt);
@@ -564,7 +618,7 @@ read_builtin (list)
   ps2 = 0;
   for (print_ps2 = eof = retval = 0;;)
     {
-      CHECK_ALRM;
+      check_read_timeout ();
 
 #if defined (READLINE)
       if (edit)
@@ -575,6 +629,10 @@ read_builtin (list)
              free (rlbuf);
              rlbuf = (char *)0;
            }
+#if defined (SIGCHLD)
+         if (tmsec > 0 || tmusec > 0)
+           sigprocmask (SIG_SETMASK, &chldset, &prevset);
+#endif
          if (rlbuf == 0)
            {
              reading = 1;
@@ -582,6 +640,10 @@ read_builtin (list)
              reading = 0;
              rlind = 0;
            }
+#if defined (SIGCHLD)
+         if (tmsec > 0 || tmusec > 0)
+           sigprocmask (SIG_SETMASK, &prevset, (sigset_t *)0);
+#endif
          if (rlbuf == 0)
            {
              eof = 1;
@@ -603,14 +665,24 @@ read_builtin (list)
        }
 
       reading = 1;
-      CHECK_ALRM;
+      check_read_timeout ();
       errno = 0;
+
+#if defined (SIGCHLD)
+      if (tmsec > 0 || tmusec > 0)
+       sigprocmask (SIG_SETMASK, &chldset, &prevset);
+#endif
       if (unbuffered_read == 2)
        retval = posixly_correct ? zreadintr (fd, &c, 1) : zreadn (fd, &c, nchars - nr);
       else if (unbuffered_read)
        retval = posixly_correct ? zreadintr (fd, &c, 1) : zread (fd, &c, 1);
       else
        retval = posixly_correct ? zreadcintr (fd, &c) : zreadc (fd, &c);
+#if defined (SIGCHLD)
+      if (tmsec > 0 || tmusec > 0)
+       sigprocmask (SIG_SETMASK, &prevset, (sigset_t *)0);
+#endif
+
       reading = 0;
 
       if (retval <= 0)
@@ -644,7 +716,7 @@ read_builtin (list)
 #endif
 
       if (retval <= 0)                 /* XXX shouldn't happen */
-       CHECK_ALRM;
+       check_read_timeout ();
 
       /* XXX -- use i + mb_cur_max (at least 4) for multibyte/read_mbchar */
       if (i + (mb_cur_max > 4 ? mb_cur_max : 4) >= size)
@@ -704,7 +776,7 @@ read_builtin (list)
 
 add_char:
       input_string[i++] = c;
-      CHECK_ALRM;
+      check_read_timeout ();
 
 #if defined (HANDLE_MULTIBYTE)
       /* XXX - what if C == 127? Can DEL introduce a multibyte sequence? */
@@ -741,7 +813,7 @@ add_char:
        break;
     }
   input_string[i] = '\0';
-  CHECK_ALRM;
+  check_read_timeout ();
 
 #if defined (READLINE)
   if (edit)
@@ -758,7 +830,7 @@ add_char:
     }
 
   if (tmsec > 0 || tmusec > 0)
-    reset_alarm ();
+    reset_timeout ();
 
   if (nchars > 0 || delim != '\n')
     {
@@ -797,28 +869,14 @@ assign_vars:
      an assign them to `arrayname' in turn. */
   if (arrayname)
     {
-      if (legal_identifier (arrayname) == 0)
-       {
-         sh_invalidid (arrayname);
-         free (input_string);
-         return (EXECUTION_FAILURE);
-       }
-
-      var = find_or_make_array_variable (arrayname, 1);
+      /* pass 1 for flags arg to clear the existing array + 2 to check for a
+        valid identifier. */
+      var = builtin_find_indexed_array (arrayname, 3);
       if (var == 0)
        {
          free (input_string);
          return EXECUTION_FAILURE;     /* readonly or noassign */
        }
-      if (assoc_p (var))
-       {
-          builtin_error (_("%s: cannot convert associative to indexed array"), arrayname);
-         free (input_string);
-         return EXECUTION_FAILURE;     /* existing associative array */
-       }
-      else if (invisible_p (var))
-       VUNSETATTR (var, att_invisible);
-      array_flush (array_cell (var));
 
       alist = list_string (input_string, ifs_chars, 0);
       if (alist)
@@ -883,6 +941,7 @@ assign_vars:
     {
       varname = list->word->word;
 #if defined (ARRAY_VARS)
+      SET_VFLAGS (list->word->flags, vflags, bindflags);
       if (legal_identifier (varname) == 0 && valid_array_reference (varname, vflags) == 0)
 #else
       if (legal_identifier (varname) == 0)
@@ -906,16 +965,16 @@ assign_vars:
          if (t && saw_escape)
            {
              t1 = dequote_string (t);
-             var = bind_read_variable (varname, t1);
+             var = bind_read_variable (varname, t1, bindflags);
              free (t1);
            }
          else
-           var = bind_read_variable (varname, t ? t : "");
+           var = bind_read_variable (varname, t ? t : "", bindflags);
        }
       else
        {
          t = (char *)0;
-         var = bind_read_variable (varname, "");
+         var = bind_read_variable (varname, "", bindflags);
        }
 
       FREE (t);
@@ -931,6 +990,7 @@ assign_vars:
 
   /* Now assign the rest of the line to the last variable argument. */
 #if defined (ARRAY_VARS)
+  SET_VFLAGS (list->word->flags, vflags, bindflags);
   if (legal_identifier (list->word->word) == 0 && valid_array_reference (list->word->word, vflags) == 0)
 #else
   if (legal_identifier (list->word->word) == 0)
@@ -967,11 +1027,11 @@ assign_vars:
   if (saw_escape && input_string && *input_string)
     {
       t = dequote_string (input_string);
-      var = bind_read_variable (list->word->word, t);
+      var = bind_read_variable (list->word->word, t, bindflags);
       free (t);
     }
   else
-    var = bind_read_variable (list->word->word, input_string ? input_string : "");
+    var = bind_read_variable (list->word->word, input_string ? input_string : "", bindflags);
 
   if (var)
     {
@@ -988,12 +1048,13 @@ assign_vars:
 }
 
 static SHELL_VAR *
-bind_read_variable (name, value)
+bind_read_variable (name, value, flags)
      char *name, *value;
+     int flags;
 {
   SHELL_VAR *v;
 
-  v = builtin_bind_variable (name, value, 0);
+  v = builtin_bind_variable (name, value, flags);
   return (v == 0 ? v
                 : ((readonly_p (v) || noassign_p (v)) ? (SHELL_VAR *)NULL : v));
 }
@@ -1131,7 +1192,15 @@ edit_line (p, itext)
   bashline_reset_event_hook ();
 
   if (ret == 0)
-    return ret;
+    {
+      if (RL_ISSTATE (RL_STATE_TIMEOUT))
+       {
+         sigalrm (SIGALRM);            /* simulate receiving SIGALRM */
+         check_read_timeout ();
+       }
+      return ret;
+    }
+
   len = strlen (ret);
   ret = (char *)xrealloc (ret, len + 2);
   ret[len++] = delim;
@@ -1139,6 +1208,17 @@ edit_line (p, itext)
   return ret;
 }
 
+static void
+set_readline_timeout (t, sec, usec)
+     sh_timer *t;
+     time_t sec;
+     long usec;
+{
+  t->tmout.tv_sec = sec;
+  t->tmout.tv_usec = usec;
+  rl_set_timeout (sec, usec);
+}
+
 static int old_delim_ctype;
 static rl_command_func_t *old_delim_func;
 static int old_newline_ctype;
index 33184b0291f07b3914798fad8ae5341fe3469ae3..420042dcfa004f25481dffd66f058ee95c5e0258 100644 (file)
@@ -114,22 +114,22 @@ Returns the status of the last command executed.
 $END
 
 $BUILTIN while
-$SHORT_DOC while COMMANDS; do COMMANDS; done
+$SHORT_DOC while COMMANDS; do COMMANDS-2; done
 Execute commands as long as a test succeeds.
 
-Expand and execute COMMANDS as long as the final command in the
-`while' COMMANDS has an exit status of zero.
+Expand and execute COMMANDS-2 as long as the final command in COMMANDS has
+an exit status of zero.
 
 Exit Status:
 Returns the status of the last command executed.
 $END
 
 $BUILTIN until
-$SHORT_DOC until COMMANDS; do COMMANDS; done
+$SHORT_DOC until COMMANDS; do COMMANDS-2; done
 Execute commands as long as a test does not succeed.
 
-Expand and execute COMMANDS as long as the final command in the
-`until' COMMANDS has an exit status which is not zero.
+Expand and execute COMMANDS-2 as long as the final command in COMMANDS has
+an exit status which is not zero.
 
 Exit Status:
 Returns the status of the last command executed.
index 8ee01657925c128908e56a7025efaa6914757f16..44f17691966d31d1f713edbd60b693e9cfbc793d 100644 (file)
@@ -1,7 +1,7 @@
 This file is set.def, from which is created set.c.
 It implements the "set" and "unset" builtins in Bash.
 
-Copyright (C) 1987-2020 Free Software Foundation, Inc.
+Copyright (C) 1987-2021 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -52,7 +52,7 @@ $PRODUCES set.c
 
 $BUILTIN set
 $FUNCTION set_builtin
-$SHORT_DOC set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]
+$SHORT_DOC set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]
 Set or unset values of shell options and positional parameters.
 
 Change the value of shell attributes and positional parameters, or
@@ -835,7 +835,7 @@ unset_builtin (list)
   WORD_LIST *list;
 {
   int unset_function, unset_variable, unset_array, opt, nameref, any_failed;
-  int global_unset_func, global_unset_var, vflags, valid_id;
+  int global_unset_func, global_unset_var, vflags, base_vflags, valid_id;
   char *name, *tname;
 
   unset_function = unset_variable = unset_array = nameref = any_failed = 0;
@@ -873,7 +873,7 @@ unset_builtin (list)
     nameref = 0;
 
 #if defined (ARRAY_VARS)
-  vflags = assoc_expand_once ? (VA_NOEXPAND|VA_ONEWORD) : 0;
+  base_vflags = assoc_expand_once ? VA_NOEXPAND : 0;
 #endif
 
   while (list)
@@ -889,15 +889,15 @@ unset_builtin (list)
       unset_function = global_unset_func;
       unset_variable = global_unset_var;
 
+#if defined (ARRAY_VARS)
+      vflags = builtin_arrayref_flags (list->word, base_vflags);
+#endif
+
 #if defined (ARRAY_VARS)
       unset_array = 0;
       /* XXX valid array reference second arg was 0 */
-      if (!unset_function && nameref == 0 && valid_array_reference (name, vflags))
-       {
-         t = strchr (name, '[');
-         *t++ = '\0';
-         unset_array++;
-       }
+      if (!unset_function && nameref == 0 && tokenize_array_reference (name, vflags, &t))
+       unset_array = 1;
 #endif
       /* Get error checking out of the way first.  The low-level functions
         just perform the unset, relying on the caller to verify. */
@@ -959,6 +959,9 @@ unset_builtin (list)
 #if defined (ARRAY_VARS)
       if (var && unset_array)
        {
+         if (shell_compatibility_level <= 51)
+           vflags |= VA_ALLOWALL;
+
          /* Let unbind_array_element decide what to do with non-array vars */
          tem = unbind_array_element (var, t, vflags);  /* XXX new third arg */
          if (tem == -2 && array_p (var) == 0 && assoc_p (var) == 0)
@@ -981,9 +984,16 @@ unset_builtin (list)
 #if defined (ARRAY_VARS)
              if (valid_array_reference (nameref_cell (var), 0))
                {
+                 int len;
+
                  tname = savestring (nameref_cell (var));
-                 if (var = array_variable_part (tname, 0, &t, (int *)0))
-                   tem = unbind_array_element (var, t, vflags);        /* XXX new third arg */
+                 if (var = array_variable_part (tname, 0, &t, &len))
+                   {
+                     /* change to what unbind_array_element now expects */
+                     if (t[len - 1] == ']')
+                       t[len - 1] = 0;
+                     tem = unbind_array_element (var, t, vflags);      /* XXX new third arg */
+                   }
                  free (tname);
                }
              else
index a193462da41fd1dfb5a28aa0e09dcd77f5a26284..50c8edf6834fd3c80f92b638034de7aa88412c9b 100644 (file)
@@ -1,7 +1,7 @@
 This file is setattr.def, from which is created setattr.c.
 It implements the builtins "export" and "readonly", in Bash.
 
-Copyright (C) 1987-2020 Free Software Foundation, Inc.
+Copyright (C) 1987-2021 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -363,7 +363,11 @@ show_all_var_attributes (v, nodefs)
 
   for (i = any_failed = 0; var = variable_list[i]; i++)
     {
-      show_var_attributes (var, READONLY_OR_EXPORT, nodefs);
+      /* There is no equivalent `declare -'. */
+      if (variable_context && var->context == variable_context && STREQ (var->name, "-"))
+       printf ("local -\n");
+      else  
+       show_var_attributes (var, READONLY_OR_EXPORT, nodefs);
       if (any_failed = sh_chkwrite (any_failed))
         break;
     }
@@ -372,7 +376,7 @@ show_all_var_attributes (v, nodefs)
 }
 
 /* Show all local variable variables with their attributes. This shows unset
-   local variables (all_local_variables called with 0 argment). */
+   local variables (all_local_variables called with 0 argument). */
 int
 show_local_var_attributes (v, nodefs)
      int v, nodefs;
@@ -387,7 +391,11 @@ show_local_var_attributes (v, nodefs)
 
   for (i = any_failed = 0; var = variable_list[i]; i++)
     {
-      show_var_attributes (var, READONLY_OR_EXPORT, nodefs);
+      /* There is no equivalent `declare -'. */
+      if (STREQ (var->name, "-"))
+       printf ("local -\n");
+      else  
+       show_var_attributes (var, READONLY_OR_EXPORT, nodefs);
       if (any_failed = sh_chkwrite (any_failed))
         break;
     }
@@ -514,7 +522,10 @@ show_var_attributes (var, pattr, nodefs)
     printf ("%s\n", var->name);
   else
     {
-      x = sh_double_quote (value_cell (var));
+      if (ansic_shouldquote (value_cell (var)))
+       x = ansic_quote (value_cell (var), 0, (int *)0);
+      else
+       x = sh_double_quote (value_cell (var));
       printf ("%s=%s\n", var->name, x);
       free (x);
     }
index 6dca22421c0d3bb9cdc289a9f802520349a5f7b1..33d61d4c5a21e1436d1022eac4bd4bf35204d7bb 100644 (file)
@@ -1,7 +1,7 @@
 This file is shopt.def, from which is created shopt.c.
 It implements the Bash `shopt' builtin.
 
-Copyright (C) 1994-2020 Free Software Foundation, Inc.
+Copyright (C) 1994-2021 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -89,10 +89,14 @@ extern int check_jobs_at_exit;
 extern int autocd;
 extern int glob_star;
 extern int glob_asciirange;
+extern int glob_always_skip_dot_and_dotdot;
 extern int lastpipe_opt;
 extern int inherit_errexit;
 extern int localvar_inherit;
 extern int localvar_unset;
+extern int varassign_redir_autoclose;
+extern int singlequote_translations;
+extern int patsub_replacement;
 
 #if defined (EXTENDED_GLOB)
 extern int extended_glob;
@@ -120,6 +124,7 @@ extern int debugging_mode;
 #if defined (ARRAY_VARS)
 extern int assoc_expand_once;
 extern int array_expand_once;
+int expand_once_flag;
 #endif
 
 #if defined (SYSLOG_HISTORY)
@@ -140,6 +145,10 @@ static int shopt_enable_hostname_completion PARAMS((char *, int));
 static int shopt_set_complete_direxpand PARAMS((char *, int));
 #endif
 
+#if defined (ARRAY_VARS)
+static int set_assoc_expand PARAMS((char *, int));
+#endif
+
 static int shopt_set_debug_mode PARAMS((char *, int));
 
 static int shopt_login_shell;
@@ -163,7 +172,7 @@ static struct {
 } shopt_vars[] = {
   { "autocd", &autocd, (shopt_set_func_t *)NULL },
 #if defined (ARRAY_VARS)
-  { "assoc_expand_once", &assoc_expand_once, (shopt_set_func_t *)NULL },
+  { "assoc_expand_once", &expand_once_flag, set_assoc_expand },
 #endif
   { "cdable_vars", &cdable_vars, (shopt_set_func_t *)NULL },
   { "cdspell", &cdspelling, (shopt_set_func_t *)NULL },
@@ -202,6 +211,7 @@ static struct {
   { "force_fignore", &force_fignore, (shopt_set_func_t *)NULL },
 #endif
   { "globasciiranges", &glob_asciirange, (shopt_set_func_t *)NULL },
+  { "globskipdots", &glob_always_skip_dot_and_dotdot, (shopt_set_func_t *)NULL },
   { "globstar", &glob_star, (shopt_set_func_t *)NULL },
   { "gnu_errfmt", &gnu_error_format, (shopt_set_func_t *)NULL },
 #if defined (HISTORY)
@@ -228,7 +238,9 @@ static struct {
 #endif
   { "nocaseglob", &glob_ignore_case, (shopt_set_func_t *)NULL },
   { "nocasematch", &match_ignore_case, (shopt_set_func_t *)NULL },
+  { "noexpand_translation", &singlequote_translations, (shopt_set_func_t *)NULL },
   { "nullglob",        &allow_null_glob_expansion, (shopt_set_func_t *)NULL },
+  { "patsub_replacement", &patsub_replacement, (shopt_set_func_t *)NULL },
 #if defined (PROGRAMMABLE_COMPLETION)
   { "progcomp", &prog_completion_enabled, (shopt_set_func_t *)NULL },
 #  if defined (ALIAS)
@@ -244,6 +256,7 @@ static struct {
 #if defined (SYSLOG_HISTORY) && defined (SYSLOG_SHOPT)
   { "syslog_history", &syslog_history, (shopt_set_func_t *)NULL },
 #endif
+  { "varredir_close", &varassign_redir_autoclose, (shopt_set_func_t *)NULL },
   { "xpg_echo", &xpg_echo, (shopt_set_func_t *)NULL },
   { (char *)0, (int *)0, (shopt_set_func_t *)NULL }
 };
@@ -352,6 +365,9 @@ reset_shopt_options ()
   glob_ignore_case = match_ignore_case = 0;
   print_shift_error = 0;
   source_uses_path = promptvars = 1;
+  varassign_redir_autoclose = 0;
+  singlequote_translations = 0;
+  patsub_replacement = 1;
 
 #if defined (JOB_CONTROL)
   check_jobs_at_exit = 0;
@@ -362,7 +378,7 @@ reset_shopt_options ()
 #endif
 
 #if defined (ARRAY_VARS)
-  assoc_expand_once = 0;
+  expand_once_flag = assoc_expand_once = 0;
 #endif
 
 #if defined (HISTORY)
@@ -630,9 +646,14 @@ set_compatibility_level (option_name, mode)
      char *option_name;
      int mode;
 {
-  int ind;
+  int ind, oldval;
   char *rhs;
 
+  /* If we're unsetting one of the compatibility options, make sure the
+     current value is in the range of the compatNN space. */
+  if (mode == 0)
+    oldval = shell_compatibility_level;
+
   /* If we're setting something, redo some of the work we did above in
      toggle_shopt().  Unset everything and reset the appropriate option
      based on OPTION_NAME. */
@@ -660,6 +681,8 @@ set_compatibility_level (option_name, mode)
     shell_compatibility_level = 43;
   else if (shopt_compat44)
     shell_compatibility_level = 44;
+  else if (oldval > 44 && shell_compatibility_level < DEFAULT_COMPAT_LEVEL)
+    ;
   else
     shell_compatibility_level = DEFAULT_COMPAT_LEVEL;
 
@@ -682,6 +705,8 @@ set_compatibility_opts ()
   switch (shell_compatibility_level)
     {
       case DEFAULT_COMPAT_LEVEL:
+      case 51:                 /* completeness */
+      case 50:
        break;
       case 44:
        shopt_compat44 = 1; break;
@@ -897,3 +922,17 @@ initialize_bashopts (no_bashopts)
   /* Set up the $BASHOPTS variable. */
   set_bashopts ();
 }
+
+#if defined (ARRAY_VARS)
+static int
+set_assoc_expand (option_name, mode)
+     char *option_name;
+     int mode;
+{
+#if 0 /* leave this disabled */
+  if (shell_compatibility_level <= 51)
+#endif
+    assoc_expand_once = expand_once_flag;
+  return 0;
+}
+#endif
index e99fd26b571e9c7e25611049460e47c7c07cc10b..4f3a56c9c93b76b409ce0a3d9a6388ba11635a86 100644 (file)
@@ -1,7 +1,7 @@
 This file is suspend.def, from which is created suspend.c.
 It implements the builtin "suspend" in Bash.
 
-Copyright (C) 1987-2020 Free Software Foundation, Inc.
+Copyright (C) 1987-2022 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -27,10 +27,12 @@ $SHORT_DOC suspend [-f]
 Suspend shell execution.
 
 Suspend the execution of this shell until it receives a SIGCONT signal.
-Unless forced, login shells cannot be suspended.
+Unless forced, login shells and shells without job control cannot be
+suspended.
 
 Options:
-  -f   force the suspend, even if the shell is a login shell
+  -f   force the suspend, even if the shell is a login shell or job
+               control is not enabled.
 
 Exit Status:
 Returns success unless job control is not enabled or an error occurs.
@@ -96,16 +98,15 @@ suspend_builtin (list)
       }
       
   list = loptend;
-
-  if (job_control == 0)
-    {
-      sh_nojobs (_("cannot suspend"));
-      return (EXECUTION_FAILURE);
-    }
+  no_args (list);
 
   if (force == 0)  
     {
-      no_args (list);
+      if (job_control == 0)
+       {
+         sh_nojobs (_("cannot suspend"));
+         return (EXECUTION_FAILURE);
+       }
 
       if (login_shell)
        {
index daeec9eafe809fef9a4632484965d6321c993337..94229433c50256f92ebe650a9a3ce7c0f1e65617 100644 (file)
@@ -1,7 +1,7 @@
 This file is trap.def, from which is created trap.c.
 It implements the builtin "trap" in Bash.
 
-Copyright (C) 1987-2020 Free Software Foundation, Inc.
+Copyright (C) 1987-2021 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -250,7 +250,9 @@ showtrap (i, show_default)
      int i, show_default;
 {
   char *t, *p, *sn;
+  int free_t;
 
+  free_t = 1;
   p = trap_list[i];
   if (p == (char *)DEFAULT_SIG && signal_is_hard_ignored (i) == 0)
     {
@@ -258,6 +260,7 @@ showtrap (i, show_default)
        t = "-";
       else
        return;
+      free_t = 0;
     }
   else if (signal_is_hard_ignored (i))
     t = (char *)NULL;
@@ -279,7 +282,7 @@ showtrap (i, show_default)
   else
     printf ("trap -- %s %s\n", t ? t : "''", sn);
 
-  if (show_default == 0)
+  if (free_t)
     FREE (t);
 }
 
index a895c5e26de00a737a23a5b9173d83a8e5d08ca9..fd9f7a3df8ea594b4f695ed196de1219db97bd37 100644 (file)
@@ -1,7 +1,7 @@
 This file is ulimit.def, from which is created ulimit.c.
 It implements the builtin "ulimit" in Bash.
 
-Copyright (C) 1987-2020 Free Software Foundation, Inc.
+Copyright (C) 1987-2021 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -23,7 +23,7 @@ $PRODUCES ulimit.c
 $BUILTIN ulimit
 $FUNCTION ulimit_builtin
 $DEPENDS_ON !_MINIX
-$SHORT_DOC ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]
+$SHORT_DOC ulimit [-SHabcdefiklmnpqrstuvxPRT] [limit]
 Modify shell resource limits.
 
 Provides control over the resources available to the shell and processes
@@ -428,6 +428,15 @@ ulimit_builtin (list)
        }
     }
 
+  /* POSIX compatibility. If the last item in cmdlist does not have an option
+     argument, but there is an operand (list != 0), treat the operand as if
+     it were an option argument for that last command. */
+  if (list && list->word && cmdlist[ncmd - 1].arg == 0)
+    {
+      cmdlist[ncmd - 1].arg = list->word->word;
+      list = list->next;
+    }
+
   for (c = 0; c < ncmd; c++)
     if (ulimit_internal (cmdlist[c].cmd, cmdlist[c].arg, mode, ncmd > 1) == EXECUTION_FAILURE)
       return (EXECUTION_FAILURE);
index e70a4d9426c705da9b805700d9db20410fbd9508..b066d78d0e5145dfd1bbbffa40cbb32c061bd74e 100644 (file)
@@ -1,7 +1,7 @@
-This file is wait.def, from which is created wait.c.
+'This file is wait.def, from which is created wait.c.
 It implements the builtin "wait" in Bash.
 
-Copyright (C) 1987-2020 Free Software Foundation, Inc.
+Copyright (C) 1987-2021 Free Software Foundation, Inc.
 
 This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -111,7 +111,7 @@ int
 wait_builtin (list)
      WORD_LIST *list;
 {
-  int status, code, opt, nflag;
+  int status, code, opt, nflag, vflags, bindflags;
   volatile int wflags;
   char *vname;
   SHELL_VAR *pidvar;
@@ -119,7 +119,7 @@ wait_builtin (list)
 
   USE_VAR(list);
 
-  nflag = wflags = 0;
+  nflag = wflags = vflags = 0;
   vname = NULL;
   pidvar = (SHELL_VAR *)NULL;
   reset_internal_getopt ();
@@ -136,6 +136,7 @@ wait_builtin (list)
          break;
        case 'p':
          vname = list_optarg;
+         vflags = list_optflags;         
          break;        
 #endif
        CASE_HELPOPT;
@@ -152,9 +153,10 @@ wait_builtin (list)
 #if defined (ARRAY_VARS)
       int arrayflags;
 
-      arrayflags = assoc_expand_once ? (VA_NOEXPAND|VA_ONEWORD) : 0;
+      SET_VFLAGS (vflags, arrayflags, bindflags);
       if (legal_identifier (vname) == 0 && valid_array_reference (vname, arrayflags) == 0)
 #else
+      bindflags = 0;
       if (legal_identifier (vname) == 0)
 #endif
        {
@@ -181,8 +183,10 @@ wait_builtin (list)
       last_command_exit_signal = wait_signal_received;
       status = 128 + wait_signal_received;
       wait_sigint_cleanup ();
+#if defined (JOB_CONTROL)
       if (wflags & JWAIT_WAITING)
        unset_waitlist ();
+#endif
       WAIT_RETURN (status);
     }
 
@@ -217,7 +221,7 @@ wait_builtin (list)
 
       status = wait_for_any_job (wflags, &pstat);
       if (vname && status >= 0)
-       bind_var_to_int (vname, pstat.pid);
+       builtin_bind_var_to_int (vname, pstat.pid, bindflags);
 
       if (status < 0)
        status = 127;
@@ -231,9 +235,13 @@ wait_builtin (list)
      currently active background processes. */
   if (list == 0)
     {
-      wait_for_background_pids (&pstat);
-      if (vname)
-       bind_var_to_int (vname, pstat.pid);
+      opt = wait_for_background_pids (&pstat);
+#if 0
+      /* Compatibility with NetBSD sh: don't set VNAME since it doesn't
+        correspond to the return status. */
+      if (vname && opt)
+       builtin_bind_var_to_int (vname, pstat.pid, bindflags);
+#endif
       WAIT_RETURN (EXECUTION_SUCCESS);
     }
 
@@ -251,8 +259,11 @@ wait_builtin (list)
            {
              pid = (pid_t)pid_value;
              status = wait_for_single_pid (pid, wflags|JWAIT_PERROR);
-             pstat.pid = pid;
-             pstat.status = status;
+             /* status > 256 means pid error */
+             pstat.pid = (status > 256) ? NO_PID : pid;
+             pstat.status = (status > 256) ? 127 : status;
+             if (status > 256)
+               status = 127;
            }
          else
            {
@@ -309,6 +320,9 @@ wait_builtin (list)
       list = list->next;
     }
 
+  if (vname && pstat.pid != NO_PID)
+    builtin_bind_var_to_int (vname, pstat.pid, bindflags);
+
   WAIT_RETURN (status);
 }
 
index b84775280d032c7a435f1e2ea50d7236674e4f71..e0dc2f955764f7a15ea35505c32f76bf3cf72fa3 100644 (file)
--- a/command.h
+++ b/command.h
@@ -1,7 +1,7 @@
 /* command.h -- The structures used internally to represent commands, and
    the extern declarations of the functions used to create them. */
 
-/* Copyright (C) 1993-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1993-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -81,18 +81,18 @@ enum command_type { cm_for, cm_case, cm_while, cm_if, cm_simple, cm_select,
 #define W_NOGLOB       (1 << 5)        /* Do not perform globbing on this word. */
 #define W_NOSPLIT2     (1 << 6)        /* Don't split word except for $@ expansion (using spaces) because context does not allow it. */
 #define W_TILDEEXP     (1 << 7)        /* Tilde expand this assignment word */
-#define W_DOLLARAT     (1 << 8)        /* $@ and its special handling -- UNUSED */
-#define W_DOLLARSTAR   (1 << 9)        /* $* and its special handling -- UNUSED */
+#define W_DOLLARAT     (1 << 8)        /* UNUSED - $@ and its special handling */
+#define W_ARRAYREF     (1 << 9)        /* word is a valid array reference */
 #define W_NOCOMSUB     (1 << 10)       /* Don't perform command substitution on this word */
 #define W_ASSIGNRHS    (1 << 11)       /* Word is rhs of an assignment statement */
 #define W_NOTILDE      (1 << 12)       /* Don't perform tilde expansion on this word */
-#define W_ITILDE       (1 << 13)       /* Internal flag for word expansion */
+#define W_NOASSNTILDE  (1 << 13)       /* don't do tilde expansion like an assignment statement */
 #define W_EXPANDRHS    (1 << 14)       /* Expanding word in ${paramOPword} */
 #define W_COMPASSIGN   (1 << 15)       /* Compound assignment */
 #define W_ASSNBLTIN    (1 << 16)       /* word is a builtin command that takes assignments */
 #define W_ASSIGNARG    (1 << 17)       /* word is assignment argument to command */
 #define W_HASQUOTEDNULL        (1 << 18)       /* word contains a quoted null character */
-#define W_DQUOTE       (1 << 19)       /* word should be treated as if double-quoted */
+#define W_DQUOTE       (1 << 19)       /* UNUSED - word should be treated as if double-quoted */
 #define W_NOPROCSUB    (1 << 20)       /* don't perform process substitution */
 #define W_SAWQUOTEDNULL        (1 << 21)       /* word contained a quoted null that was removed */
 #define W_ASSIGNASSOC  (1 << 22)       /* word looks like associative array assignment */
@@ -102,8 +102,8 @@ enum command_type { cm_for, cm_case, cm_while, cm_if, cm_simple, cm_select,
 #define W_NOBRACE      (1 << 26)       /* Don't perform brace expansion */
 #define W_COMPLETE     (1 << 27)       /* word is being expanded for completion */
 #define W_CHKLOCAL     (1 << 28)       /* check for local vars on assignment */
-#define W_NOASSNTILDE  (1 << 29)       /* don't do tilde expansion like an assignment statement */
-#define W_FORCELOCAL   (1 << 30)       /* force assignments to be to local variables, non-fatal on assignment errors */
+#define W_FORCELOCAL   (1 << 29)       /* force assignments to be to local variables, non-fatal on assignment errors */
+/* UNUSED              (1 << 30)       */
 
 /* Flags for the `pflags' argument to param_expand() and various
    parameter_brace_expand_xxx functions; also used for string_list_dollar_at */
index b075c77830eba41941f65e7c0de23d1b981f530f..a687e402940dfb3ce64c2afa6ea18c4c2998f09e 100644 (file)
@@ -1,7 +1,7 @@
 /* config-bot.h */
 /* modify settings or make new ones based on what autoconf tells us. */
 
-/* Copyright (C) 1989-2009 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -99,7 +99,7 @@
 #endif
 
 #if !HAVE_MKDTEMP
-#  undef USE_MKDTMP
+#  undef USE_MKDTEMP
 #endif
 
 /* If the shell is called by this name, it will become restricted. */
index 735f75e317944707b7e97932ec74076e60a41d2b..db4ab6ee3a8b7b6f216d6271d13035233d7d7b76 100644 (file)
@@ -1,6 +1,6 @@
 /* config-top.h - various user-settable options not under the control of autoconf. */
 
-/* Copyright (C) 2002-2009 Free Software Foundation, Inc.
+/* Copyright (C) 2002-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
   "/bin:/usr/bin:/sbin:/usr/sbin:/etc:/usr/etc"
 #endif
 
+/* The default path for enable -f */
+#ifndef DEFAULT_LOADABLE_BUILTINS_PATH
+#define DEFAULT_LOADABLE_BUILTINS_PATH \
+  "/usr/local/lib/bash:/usr/lib/bash:/opt/local/lib/bash:/usr/pkg/lib/bash:/opt/pkg/lib/bash:."
+#endif
+
 /* Default primary and secondary prompt strings. */
 #define PPROMPT "\\s-\\v\\$ "
 #define SPROMPT "> "
 
 /* Define if you want the case-toggling operators (~[~]) and the
    `capcase' variable attribute (declare -c). */
-/* TAG: bash-5.2 disable */
+/* TAG: bash-5.2 disable? */
 #define CASEMOD_TOGGLECASE
 #define CASEMOD_CAPCASE
 
index ab316d4687774207e9ce45ef2b7200c5a440b980..d6d52930bde22335cf74cee08a436c1691e8e172 100644 (file)
 
 /* Template settings for autoconf */
 
-#undef __EXTENSIONS__
-#undef _ALL_SOURCE
-#undef _GNU_SOURCE
-#undef _POSIX_SOURCE
-#undef _POSIX_1_SOURCE
-#undef _POSIX_PTHREAD_SEMANTICS
-#undef _TANDEM_SOURCE
-#undef _MINIX
-
 /* Configuration feature settings controllable by autoconf. */
 
 /* Define JOB_CONTROL if your operating system supports
 
 #undef __CHAR_UNSIGNED__
 
-/* Define if the compiler supports `long long' variables. */
-#undef HAVE_LONG_LONG
+/* Define if the compiler supports `long long int' variables. */
+#undef HAVE_LONG_LONG_INT
 
-#undef HAVE_UNSIGNED_LONG_LONG
+#undef HAVE_UNSIGNED_LONG_LONG_INT
 
 /* The number of bytes in a int.  */
 #undef SIZEOF_INT
 /* The number of bytes in a pointer to char.  */
 #undef SIZEOF_CHAR_P
 
+/* The number of bytes in a size_t.  */
+#undef SIZEOF_SIZE_T
+
 /* The number of bytes in a double (hopefully 8). */
 #undef SIZEOF_DOUBLE
 
 /* Characteristics of the system's header files and libraries that affect
    the compilation environment. */
 
+/* These are set by AC_USE_SYSTEM_EXTENSIONS */
+
 /* Define if the system does not provide POSIX.1 features except
    with this defined.  */
 #undef _POSIX_1_SOURCE
 /* Define if you need to in order for stat and other things to work.  */
 #undef _POSIX_SOURCE
 
-/* Define to use GNU libc extensions */
+/* Define to use GNU libc extensions. */
 #undef _GNU_SOURCE
 
-/* Define if you have the ANSI C header files.  */
-#undef STDC_HEADERS
+/* Define to enable general system extensions on Solaris. */
+#undef __EXTENSIONS__
+
+/* General system extensions on AIX */
+#undef _ALL_SOURCE
+
+#undef _POSIX_PTHREAD_SEMANTICS
+#undef _TANDEM_SOURCE
+#undef _MINIX
 
 /* Memory management functions. */
 
 
 #undef PGRP_PIPE
 
-/* Define if the setvbuf function takes the buffering type as its second
-   argument and the buffer pointer as the third, as on System V
-   before release 3.  */
-#undef SETVBUF_REVERSED
-
 #undef STAT_MACROS_BROKEN
 
 #undef ULIMIT_MAXFDS
 
 #undef HAVE_PRINTF_A_FORMAT
 
-#undef CTYPE_NON_ASCII
-
 /* Define if you have <langinfo.h> and nl_langinfo(CODESET). */
 #undef HAVE_LANGINFO_CODESET
 
 
 /* Type and behavior of signal handling functions. */
 
-/* Define as the return type of signal handlers (int or void).  */
-#undef RETSIGTYPE
-
-/* Define if return type of signal handlers is void */
-#undef VOID_SIGHANDLER
-
 #undef MUST_REINSTALL_SIGHANDLERS
 
 #undef HAVE_BSD_SIGNALS
 /* Define if you have <sys/time.h> */
 #undef HAVE_SYS_TIME_H
 
-#undef TIME_WITH_SYS_TIME
-
 /* Define if you have <sys/times.h> */
 #undef HAVE_SYS_TIMES_H
 
 
 #undef DEV_FD_STAT_BROKEN
 
+/* An array implementation that prioritizes speed (O(1) access) over space,
+   in array2.c */
+#undef ALT_ARRAY_IMPLEMENTATION
+
+/* Support for $"..." translatable strings. */
+#undef TRANSLATABLE_STRINGS
+
 /* Additional defines for configuring lib/intl, maintained by autoscan/autoheader */
 
 /* Define if you have the <argz.h> header file. */
index 0f1d3ed178f6339ad64abc93514065c467771d81..47313753e71736dad97bd58cb46351cf141d395a 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,12 +1,13 @@
 #! /bin/sh
-# From configure.ac for Bash 5.1, version 5.022.
+# From configure.ac for Bash 5.2, version 5.046.
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for bash 5.1-release.
+# Generated by GNU Autoconf 2.71 for bash 5.2-release.
 #
 # Report bugs to <bug-bash@gnu.org>.
 #
 #
-# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
+# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation,
+# Inc.
 #
 #
 # This configure script is free software; the Free Software Foundation
 
 # Be more Bourne compatible
 DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+as_nop=:
+if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
+then :
   emulate sh
   NULLCMD=:
   # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
   # is contrary to our usage.  Disable this feature.
   alias -g '${1+"$@"}'='"$@"'
   setopt NO_GLOB_SUBST
-else
+else $as_nop
   case `(set -o) 2>/dev/null` in #(
   *posix*) :
     set -o posix ;; #(
@@ -34,46 +37,46 @@ esac
 fi
 
 
+
+# Reset variables that may have inherited troublesome values from
+# the environment.
+
+# IFS needs to be set, to space, tab, and newline, in precisely that order.
+# (If _AS_PATH_WALK were called with IFS unset, it would have the
+# side effect of setting IFS to empty, thus disabling word splitting.)
+# Quoting is to prevent editors from complaining about space-tab.
 as_nl='
 '
 export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
-    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='print -r --'
-  as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='printf %s\n'
-  as_echo_n='printf %s'
-else
-  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
-    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
-    as_echo_n='/usr/ucb/echo -n'
-  else
-    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
-    as_echo_n_body='eval
-      arg=$1;
-      case $arg in #(
-      *"$as_nl"*)
-       expr "X$arg" : "X\\(.*\\)$as_nl";
-       arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
-      esac;
-      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
-    '
-    export as_echo_n_body
-    as_echo_n='sh -c $as_echo_n_body as_echo'
-  fi
-  export as_echo_body
-  as_echo='sh -c $as_echo_body as_echo'
-fi
+IFS=" ""       $as_nl"
+
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# Ensure predictable behavior from utilities with locale-dependent output.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# We cannot yet rely on "unset" to work, but we need these variables
+# to be unset--not just set to an empty or harmless value--now, to
+# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh).  This construct
+# also avoids known problems related to "unset" and subshell syntax
+# in other old shells (e.g. bash 2.01 and pdksh 5.2.14).
+for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH
+do eval test \${$as_var+y} \
+  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+
+# Ensure that fds 0, 1, and 2 are open.
+if (exec 3>&0) 2>/dev/null; then :; else exec 0</dev/null; fi
+if (exec 3>&1) 2>/dev/null; then :; else exec 1>/dev/null; fi
+if (exec 3>&2)            ; then :; else exec 2>/dev/null; fi
 
 # The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
+if ${PATH_SEPARATOR+false} :; then
   PATH_SEPARATOR=:
   (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
     (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
@@ -82,13 +85,6 @@ if test "${PATH_SEPARATOR+set}" != set; then
 fi
 
 
-# IFS
-# We need space, tab and new line, in precisely that order.  Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" ""       $as_nl"
-
 # Find who we are.  Look in the path if we contain no directory separator.
 as_myself=
 case $0 in #((
@@ -97,8 +93,12 @@ case $0 in #((
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
+    test -r "$as_dir$0" && as_myself=$as_dir$0 && break
   done
 IFS=$as_save_IFS
 
@@ -110,30 +110,10 @@ if test "x$as_myself" = x; then
   as_myself=$0
 fi
 if test ! -f "$as_myself"; then
-  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
   exit 1
 fi
 
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there.  '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
-  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
 
 # Use a proper internal environment variable to ensure we don't fall
   # into an infinite loop, continuously re-executing ourselves.
@@ -155,20 +135,22 @@ esac
 exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
 # Admittedly, this is quite paranoid, since all the known shells bail
 # out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-as_fn_exit 255
+printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2
+exit 255
   fi
   # We don't want this to propagate to other subprocesses.
           { _as_can_reexec=; unset _as_can_reexec;}
 if test "x$CONFIG_SHELL" = x; then
-  as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
+  as_bourne_compatible="as_nop=:
+if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
+then :
   emulate sh
   NULLCMD=:
   # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
   # is contrary to our usage.  Disable this feature.
   alias -g '\${1+\"\$@\"}'='\"\$@\"'
   setopt NO_GLOB_SUBST
-else
+else \$as_nop
   case \`(set -o) 2>/dev/null\` in #(
   *posix*) :
     set -o posix ;; #(
@@ -188,42 +170,53 @@ as_fn_success || { exitcode=1; echo as_fn_success failed.; }
 as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
 as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
 as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
-if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
+if ( set x; as_fn_ret_success y && test x = \"\$1\" )
+then :
 
-else
+else \$as_nop
   exitcode=1; echo positional parameters were not saved.
 fi
 test x\$exitcode = x0 || exit 1
+blah=\$(echo \$(echo blah))
+test x\"\$blah\" = xblah || exit 1
 test -x / || exit 1"
   as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
   as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
   eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
   test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
 test \$(( 1 + 1 )) = 2 || exit 1"
-  if (eval "$as_required") 2>/dev/null; then :
+  if (eval "$as_required") 2>/dev/null
+then :
   as_have_required=yes
-else
+else $as_nop
   as_have_required=no
 fi
-  if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
+  if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null
+then :
 
-else
+else $as_nop
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 as_found=false
 for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
   as_found=:
   case $as_dir in #(
         /*)
           for as_base in sh bash ksh sh5; do
             # Try only shells that exist, to save several forks.
-            as_shell=$as_dir/$as_base
+            as_shell=$as_dir$as_base
             if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
-                   { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
+                   as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null
+then :
   CONFIG_SHELL=$as_shell as_have_required=yes
-                  if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
+                  if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null
+then :
   break 2
 fi
 fi
@@ -231,14 +224,21 @@ fi
        esac
   as_found=false
 done
-$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
-             { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
-  CONFIG_SHELL=$SHELL as_have_required=yes
-fi; }
 IFS=$as_save_IFS
+if $as_found
+then :
+
+else $as_nop
+  if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+             as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null
+then :
+  CONFIG_SHELL=$SHELL as_have_required=yes
+fi
+fi
 
 
-      if test "x$CONFIG_SHELL" != x; then :
+      if test "x$CONFIG_SHELL" != x
+then :
   export CONFIG_SHELL
              # We cannot yet assume a decent shell, so we have to provide a
 # neutralization value for shells without unset; and this also
@@ -256,18 +256,19 @@ esac
 exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
 # Admittedly, this is quite paranoid, since all the known shells bail
 # out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2
 exit 255
 fi
 
-    if test x$as_have_required = xno; then :
-  $as_echo "$0: This script requires a shell more modern than all"
-  $as_echo "$0: the shells that I found on your system."
-  if test x${ZSH_VERSION+set} = xset ; then
-    $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
-    $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+    if test x$as_have_required = xno
+then :
+  printf "%s\n" "$0: This script requires a shell more modern than all"
+  printf "%s\n" "$0: the shells that I found on your system."
+  if test ${ZSH_VERSION+y} ; then
+    printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+    printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later."
   else
-    $as_echo "$0: Please tell bug-autoconf@gnu.org and bug-bash@gnu.org
+    printf "%s\n" "$0: Please tell bug-autoconf@gnu.org and bug-bash@gnu.org
 $0: about your system, including any error possibly output
 $0: before this message. Then install a modern shell, or
 $0: manually run the script under such a shell if you do
@@ -295,6 +296,7 @@ as_fn_unset ()
 }
 as_unset=as_fn_unset
 
+
 # as_fn_set_status STATUS
 # -----------------------
 # Set $? to STATUS, without forking.
@@ -312,6 +314,14 @@ as_fn_exit ()
   as_fn_set_status $1
   exit $1
 } # as_fn_exit
+# as_fn_nop
+# ---------
+# Do nothing but, unlike ":", preserve the value of $?.
+as_fn_nop ()
+{
+  return $?
+}
+as_nop=as_fn_nop
 
 # as_fn_mkdir_p
 # -------------
@@ -326,7 +336,7 @@ as_fn_mkdir_p ()
     as_dirs=
     while :; do
       case $as_dir in #(
-      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
       *) as_qdir=$as_dir;;
       esac
       as_dirs="'$as_qdir' $as_dirs"
@@ -335,7 +345,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
         X"$as_dir" : 'X\(//\)[^/]' \| \
         X"$as_dir" : 'X\(//\)$' \| \
         X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
+printf "%s\n" X"$as_dir" |
     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
            s//\1/
            q
@@ -374,12 +384,13 @@ as_fn_executable_p ()
 # advantage of any shell optimizations that allow amortized linear growth over
 # repeated appends, instead of the typical quadratic growth present in naive
 # implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null
+then :
   eval 'as_fn_append ()
   {
     eval $1+=\$2
   }'
-else
+else $as_nop
   as_fn_append ()
   {
     eval $1=\$$1\$2
@@ -391,18 +402,27 @@ fi # as_fn_append
 # Perform arithmetic evaluation on the ARGs, and store the result in the
 # global $as_val. Take advantage of shells that can avoid forks. The arguments
 # must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null
+then :
   eval 'as_fn_arith ()
   {
     as_val=$(( $* ))
   }'
-else
+else $as_nop
   as_fn_arith ()
   {
     as_val=`expr "$@" || test $? -eq 1`
   }
 fi # as_fn_arith
 
+# as_fn_nop
+# ---------
+# Do nothing but, unlike ":", preserve the value of $?.
+as_fn_nop ()
+{
+  return $?
+}
+as_nop=as_fn_nop
 
 # as_fn_error STATUS ERROR [LINENO LOG_FD]
 # ----------------------------------------
@@ -414,9 +434,9 @@ as_fn_error ()
   as_status=$1; test $as_status -eq 0 && as_status=1
   if test "$4"; then
     as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
   fi
-  $as_echo "$as_me: error: $2" >&2
+  printf "%s\n" "$as_me: error: $2" >&2
   as_fn_exit $as_status
 } # as_fn_error
 
@@ -443,7 +463,7 @@ as_me=`$as_basename -- "$0" ||
 $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
         X"$0" : 'X\(//\)$' \| \
         X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
+printf "%s\n" X/"$0" |
     sed '/^.*\/\([^/][^/]*\)\/*$/{
            s//\1/
            q
@@ -487,7 +507,7 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits
       s/-\n.*//
     ' >$as_me.lineno &&
   chmod +x "$as_me.lineno" ||
-    { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+    { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
 
   # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
   # already done that, so ensure we don't try to do so again and fall
@@ -501,6 +521,10 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits
   exit
 }
 
+
+# Determine whether it's possible to make 'echo' print without a newline.
+# These variables are no longer used directly by Autoconf, but are AC_SUBSTed
+# for compatibility with existing Makefiles.
 ECHO_C= ECHO_N= ECHO_T=
 case `echo -n x` in #(((((
 -n*)
@@ -514,6 +538,13 @@ case `echo -n x` in #(((((
   ECHO_N='-n';;
 esac
 
+# For backward compatibility with old third-party macros, we provide
+# the shell variables $as_echo and $as_echo_n.  New code should use
+# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively.
+as_echo='printf %s\n'
+as_echo_n='printf %s'
+
+
 rm -f conf$$ conf$$.exe conf$$.file
 if test -d conf$$.dir; then
   rm -f conf$$.dir/conf$$.file
@@ -581,52 +612,47 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='bash'
 PACKAGE_TARNAME='bash'
-PACKAGE_VERSION='5.1-release'
-PACKAGE_STRING='bash 5.1-release'
+PACKAGE_VERSION='5.2-release'
+PACKAGE_STRING='bash 5.2-release'
 PACKAGE_BUGREPORT='bug-bash@gnu.org'
 PACKAGE_URL=''
 
 ac_unique_file="shell.h"
 # Factoring default headers for most tests.
 ac_includes_default="\
-#include <stdio.h>
-#ifdef HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-#ifdef HAVE_SYS_STAT_H
-# include <sys/stat.h>
+#include <stddef.h>
+#ifdef HAVE_STDIO_H
+# include <stdio.h>
 #endif
-#ifdef STDC_HEADERS
+#ifdef HAVE_STDLIB_H
 # include <stdlib.h>
-# include <stddef.h>
-#else
-# ifdef HAVE_STDLIB_H
-#  include <stdlib.h>
-# endif
 #endif
 #ifdef HAVE_STRING_H
-# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
-#  include <memory.h>
-# endif
 # include <string.h>
 #endif
-#ifdef HAVE_STRINGS_H
-# include <strings.h>
-#endif
 #ifdef HAVE_INTTYPES_H
 # include <inttypes.h>
 #endif
 #ifdef HAVE_STDINT_H
 # include <stdint.h>
 #endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
 #ifdef HAVE_UNISTD_H
 # include <unistd.h>
 #endif"
 
+ac_header_c_list=
 gt_needs=
-ac_header_list=
+ac_func_c_list=
 gl_use_threads_default=
-ac_func_list=
 ac_subst_vars='LTLIBOBJS
 LOCAL_DEFS
 LOCAL_LDFLAGS
@@ -734,14 +760,16 @@ READLINE_LIB
 RL_MINOR
 RL_MAJOR
 RL_VERSION
+EGREP
+GREP
+CPP
 LIBS_FOR_BUILD
+STYLE_CFLAGS
+BASE_CFLAGS_FOR_BUILD
 STATIC_LD
 SIGNAMES_O
 SIGNAMES_H
 CROSS_COMPILE
-EGREP
-GREP
-CPP
 OBJEXT
 EXEEXT
 ac_ct_CC
@@ -754,6 +782,7 @@ HELPFILES_TARGET
 HELPINSTALL
 HELPDIRDEFINE
 HELPDIR
+ARRAY_O
 MALLOC_DEP
 MALLOC_LDFLAGS
 MALLOC_LIBRARY
@@ -793,6 +822,7 @@ infodir
 docdir
 oldincludedir
 includedir
+runstatedir
 localstatedir
 sharedstatedir
 sysconfdir
@@ -822,6 +852,7 @@ with_gnu_malloc
 with_installed_readline
 enable_minimal_config
 enable_alias
+enable_alt_array_implementation
 enable_arith_for_command
 enable_array_variables
 enable_bang_history
@@ -856,6 +887,7 @@ enable_select
 enable_separate_helpfiles
 enable_single_help_strings
 enable_strict_posix_default
+enable_translatable_strings
 enable_usg_echo_default
 enable_xpg_echo_default
 enable_mem_scramble
@@ -925,6 +957,7 @@ datadir='${datarootdir}'
 sysconfdir='${prefix}/etc'
 sharedstatedir='${prefix}/com'
 localstatedir='${prefix}/var'
+runstatedir='${localstatedir}/run'
 includedir='${prefix}/include'
 oldincludedir='/usr/include'
 docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
@@ -954,8 +987,6 @@ do
   *)    ac_optarg=yes ;;
   esac
 
-  # Accept the important Cygnus configure options, so we can diagnose typos.
-
   case $ac_dashdash$ac_option in
   --)
     ac_dashdash=yes ;;
@@ -996,9 +1027,9 @@ do
     ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
     # Reject names that are not valid shell variable names.
     expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error $? "invalid feature name: $ac_useropt"
+      as_fn_error $? "invalid feature name: \`$ac_useropt'"
     ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
     case $ac_user_opts in
       *"
 "enable_$ac_useropt"
@@ -1022,9 +1053,9 @@ do
     ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
     # Reject names that are not valid shell variable names.
     expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error $? "invalid feature name: $ac_useropt"
+      as_fn_error $? "invalid feature name: \`$ac_useropt'"
     ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
     case $ac_user_opts in
       *"
 "enable_$ac_useropt"
@@ -1177,6 +1208,15 @@ do
   | -silent | --silent | --silen | --sile | --sil)
     silent=yes ;;
 
+  -runstatedir | --runstatedir | --runstatedi | --runstated \
+  | --runstate | --runstat | --runsta | --runst | --runs \
+  | --run | --ru | --r)
+    ac_prev=runstatedir ;;
+  -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
+  | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
+  | --run=* | --ru=* | --r=*)
+    runstatedir=$ac_optarg ;;
+
   -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
     ac_prev=sbindir ;;
   -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
@@ -1226,9 +1266,9 @@ do
     ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
     # Reject names that are not valid shell variable names.
     expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error $? "invalid package name: $ac_useropt"
+      as_fn_error $? "invalid package name: \`$ac_useropt'"
     ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
     case $ac_user_opts in
       *"
 "with_$ac_useropt"
@@ -1242,9 +1282,9 @@ do
     ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
     # Reject names that are not valid shell variable names.
     expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error $? "invalid package name: $ac_useropt"
+      as_fn_error $? "invalid package name: \`$ac_useropt'"
     ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
+    ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
     case $ac_user_opts in
       *"
 "with_$ac_useropt"
@@ -1288,9 +1328,9 @@ Try \`$0 --help' for more information"
 
   *)
     # FIXME: should be removed in autoconf 3.0.
-    $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+    printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2
     expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
-      $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+      printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2
     : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
     ;;
 
@@ -1306,7 +1346,7 @@ if test -n "$ac_unrecognized_opts"; then
   case $enable_option_checking in
     no) ;;
     fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
-    *)     $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
+    *)     printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
   esac
 fi
 
@@ -1314,7 +1354,7 @@ fi
 for ac_var in  exec_prefix prefix bindir sbindir libexecdir datarootdir \
                datadir sysconfdir sharedstatedir localstatedir includedir \
                oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
-               libdir localedir mandir
+               libdir localedir mandir runstatedir
 do
   eval ac_val=\$$ac_var
   # Remove trailing slashes.
@@ -1370,7 +1410,7 @@ $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
         X"$as_myself" : 'X\(//\)[^/]' \| \
         X"$as_myself" : 'X\(//\)$' \| \
         X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_myself" |
+printf "%s\n" X"$as_myself" |
     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
            s//\1/
            q
@@ -1427,7 +1467,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures bash 5.1-release to adapt to many kinds of systems.
+\`configure' configures bash 5.2-release to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1467,6 +1507,7 @@ Fine tuning of the installation directories:
   --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
   --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
   --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
+  --runstatedir=DIR       modifiable per-process data [LOCALSTATEDIR/run]
   --libdir=DIR            object code libraries [EPREFIX/lib]
   --includedir=DIR        C header files [PREFIX/include]
   --oldincludedir=DIR     C header files for non-gcc [/usr/include]
@@ -1492,7 +1533,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of bash 5.1-release:";;
+     short | recursive ) echo "Configuration of bash 5.2-release:";;
    esac
   cat <<\_ACEOF
 
@@ -1502,6 +1543,9 @@ Optional Features:
   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
   --enable-minimal-config a minimal sh-like configuration
   --enable-alias          enable shell aliases
+  --enable-alt-array-implementation
+                          enable an alternate array implementation that
+                          optimizes speed at the cost of space
   --enable-arith-for-command
                           enable arithmetic for command
   --enable-array-variables
@@ -1563,6 +1607,8 @@ Optional Features:
                           translation
   --enable-strict-posix-default
                           configure bash to be posix-conformant by default
+  --enable-translatable-strings
+                          include support for $"..." translatable strings
   --enable-usg-echo-default
                           a synonym for --enable-xpg-echo-default
   --enable-xpg-echo-default
@@ -1646,9 +1692,9 @@ if test "$ac_init_help" = "recursive"; then
 case "$ac_dir" in
 .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
 *)
-  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+  ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'`
   # A ".." for each directory in $ac_dir_suffix.
-  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+  ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
   case $ac_top_builddir_sub in
   "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
   *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
@@ -1676,7 +1722,8 @@ esac
 ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
 
     cd "$ac_dir" || { ac_status=$?; continue; }
-    # Check for guested configure.
+    # Check for configure.gnu first; this name is used for a wrapper for
+    # Metaconfig's "Configure" on case-insensitive file systems.
     if test -f "$ac_srcdir/configure.gnu"; then
       echo &&
       $SHELL "$ac_srcdir/configure.gnu" --help=recursive
@@ -1684,7 +1731,7 @@ ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
       echo &&
       $SHELL "$ac_srcdir/configure" --help=recursive
     else
-      $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+      printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2
     fi || ac_status=$?
     cd "$ac_pwd" || { ac_status=$?; break; }
   done
@@ -1693,10 +1740,10 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-bash configure 5.1-release
-generated by GNU Autoconf 2.69
+bash configure 5.2-release
+generated by GNU Autoconf 2.71
 
-Copyright (C) 2012 Free Software Foundation, Inc.
+Copyright (C) 2021 Free Software Foundation, Inc.
 This configure script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it.
 _ACEOF
@@ -1713,14 +1760,14 @@ fi
 ac_fn_c_try_compile ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  rm -f conftest.$ac_objext
+  rm -f conftest.$ac_objext conftest.beam
   if { { ac_try="$ac_compile"
 case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
   (eval "$ac_compile") 2>conftest.err
   ac_status=$?
   if test -s conftest.err; then
@@ -1728,14 +1775,15 @@ $as_echo "$ac_try_echo"; } >&5
     cat conftest.er1 >&5
     mv -f conftest.er1 conftest.err
   fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; } && {
         test -z "$ac_c_werror_flag" ||
         test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then :
+       } && test -s conftest.$ac_objext
+then :
   ac_retval=0
-else
-  $as_echo "$as_me: failed program was:" >&5
+else $as_nop
+  printf "%s\n" "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
        ac_retval=1
@@ -1745,51 +1793,38 @@ fi
 
 } # ac_fn_c_try_compile
 
-# ac_fn_c_try_link LINENO
-# -----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_link ()
+# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
+# -------------------------------------------------------
+# Tests whether HEADER exists and can be compiled using the include files in
+# INCLUDES, setting the cache variable VAR accordingly.
+ac_fn_c_check_header_compile ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  rm -f conftest.$ac_objext conftest$ac_exeext
-  if { { ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    grep -v '^ *+' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-    mv -f conftest.er1 conftest.err
-  fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && {
-        test -z "$ac_c_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest$ac_exeext && {
-        test "$cross_compiling" = yes ||
-        test -x conftest$ac_exeext
-       }; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-       ac_retval=1
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+printf %s "checking for $2... " >&6; }
+if eval test \${$3+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+#include <$2>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+  eval "$3=yes"
+else $as_nop
+  eval "$3=no"
 fi
-  # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
-  # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
-  # interfere with the next link command; also delete a directory that is
-  # left behind by Apple's compiler.  We do this before executing the actions.
-  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+eval ac_res=\$$3
+              { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
   eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-  as_fn_set_status $ac_retval
 
-} # ac_fn_c_try_link
+} # ac_fn_c_check_header_compile
 
 # ac_fn_c_try_cpp LINENO
 # ----------------------
@@ -1803,7 +1838,7 @@ case "(($ac_try" in
   *) ac_try_echo=$ac_try;;
 esac
 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
   (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
   ac_status=$?
   if test -s conftest.err; then
@@ -1811,14 +1846,15 @@ $as_echo "$ac_try_echo"; } >&5
     cat conftest.er1 >&5
     mv -f conftest.er1 conftest.err
   fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; } > conftest.i && {
         test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
         test ! -s conftest.err
-       }; then :
+       }
+then :
   ac_retval=0
-else
-  $as_echo "$as_me: failed program was:" >&5
+else $as_nop
+  printf "%s\n" "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
     ac_retval=1
 
 } # ac_fn_c_try_cpp
 
-# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
-# -------------------------------------------------------
-# Tests whether HEADER exists, giving a warning if it cannot be compiled using
-# the include files in INCLUDES and setting the cache variable VAR
-# accordingly.
-ac_fn_c_check_header_mongrel ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if eval \${$3+:} false; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-fi
-eval ac_res=\$$3
-              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-else
-  # Is the header compilable?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
-$as_echo_n "checking $2 usability... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-#include <$2>
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_header_compiler=yes
-else
-  ac_header_compiler=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
-$as_echo "$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
-$as_echo_n "checking $2 presence... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <$2>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-  ac_header_preproc=yes
-else
-  ac_header_preproc=no
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
-$as_echo "$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
-  yes:no: )
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
-$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
-    ;;
-  no:yes:* )
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
-$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     check for missing prerequisite headers?" >&5
-$as_echo "$as_me: WARNING: $2:     check for missing prerequisite headers?" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
-$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&5
-$as_echo "$as_me: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
-( $as_echo "## ------------------------------- ##
-## Report this to bug-bash@gnu.org ##
-## ------------------------------- ##"
-     ) | sed "s/^/$as_me: WARNING:     /" >&2
-    ;;
-esac
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  eval "$3=\$ac_header_compiler"
-fi
-eval ac_res=\$$3
-              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-fi
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_header_mongrel
-
-# ac_fn_c_try_run LINENO
-# ----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
-# that executables *can* be run.
-ac_fn_c_try_run ()
+# ac_fn_c_try_link LINENO
+# -----------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_c_try_link ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext
   if { { ac_try="$ac_link"
 case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
-  { { case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_try") 2>&5
+printf "%s\n" "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>conftest.err
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; }; then :
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+        test -z "$ac_c_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        test -x conftest$ac_exeext
+       }
+then :
   ac_retval=0
-else
-  $as_echo "$as_me: program exited with status $ac_status" >&5
-       $as_echo "$as_me: failed program was:" >&5
+else $as_nop
+  printf "%s\n" "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-       ac_retval=$ac_status
+       ac_retval=1
 fi
+  # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+  # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+  # interfere with the next link command; also delete a directory that is
+  # left behind by Apple's compiler.  We do this before executing the actions.
   rm -rf conftest.dSYM conftest_ipa8_conftest.oo
   eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
-} # ac_fn_c_try_run
-
-# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
-# -------------------------------------------------------
-# Tests whether HEADER exists and can be compiled using the include files in
-# INCLUDES, setting the cache variable VAR accordingly.
-ac_fn_c_check_header_compile ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-#include <$2>
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  eval "$3=yes"
-else
-  eval "$3=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$3
-              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_header_compile
+} # ac_fn_c_try_link
 
 # ac_fn_c_check_func LINENO FUNC VAR
 # ----------------------------------
@@ -1998,11 +1917,12 @@ $as_echo "$ac_res" >&6; }
 ac_fn_c_check_func ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+printf %s "checking for $2... " >&6; }
+if eval test \${$3+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 /* Define $2 to an innocuous variant, in case <limits.h> declares $2.
@@ -2010,16 +1930,9 @@ else
 #define $2 innocuous_$2
 
 /* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $2 (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
+   which can conflict with char $2 (); below.  */
 
+#include <limits.h>
 #undef $2
 
 /* Override any GCC internal prototype to avoid an error.
@@ -2037,46 +1950,91 @@ choke me
 #endif
 
 int
-main ()
+main (void)
 {
 return $2 ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   eval "$3=yes"
-else
+else $as_nop
   eval "$3=no"
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 fi
 eval ac_res=\$$3
-              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
+              { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
   eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_func
 
-# ac_fn_c_check_type LINENO TYPE VAR INCLUDES
-# -------------------------------------------
-# Tests whether TYPE exists after having included INCLUDES, setting cache
-# variable VAR accordingly.
-ac_fn_c_check_type ()
+# ac_fn_c_try_run LINENO
+# ----------------------
+# Try to run conftest.$ac_ext, and return whether this succeeded. Assumes that
+# executables *can* be run.
+ac_fn_c_try_run ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  eval "$3=no"
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-int
-main ()
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
+  { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+printf "%s\n" "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }
+then :
+  ac_retval=0
+else $as_nop
+  printf "%s\n" "$as_me: program exited with status $ac_status" >&5
+       printf "%s\n" "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_retval=$ac_status
+fi
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_try_run
+
+# ac_fn_c_check_type LINENO TYPE VAR INCLUDES
+# -------------------------------------------
+# Tests whether TYPE exists after having included INCLUDES, setting cache
+# variable VAR accordingly.
+ac_fn_c_check_type ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+printf %s "checking for $2... " >&6; }
+if eval test \${$3+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  eval "$3=no"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main (void)
 {
 if (sizeof ($2))
         return 0;
@@ -2084,12 +2042,13 @@ if (sizeof ($2))
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $4
 int
-main ()
+main (void)
 {
 if (sizeof (($2)))
            return 0;
@@ -2097,41 +2056,45 @@ if (sizeof (($2)))
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
 
-else
+else $as_nop
   eval "$3=yes"
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
 eval ac_res=\$$3
-              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
+              { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
   eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_type
 
-# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES
-# ---------------------------------------------
+# ac_fn_check_decl LINENO SYMBOL VAR INCLUDES EXTRA-OPTIONS FLAG-VAR
+# ------------------------------------------------------------------
 # Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR
-# accordingly.
-ac_fn_c_check_decl ()
+# accordingly. Pass EXTRA-OPTIONS to the compiler, using FLAG-VAR.
+ac_fn_check_decl ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   as_decl_name=`echo $2|sed 's/ *(.*//'`
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5
+printf %s "checking whether $as_decl_name is declared... " >&6; }
+if eval test \${$3+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5
-$as_echo_n "checking whether $as_decl_name is declared... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  eval ac_save_FLAGS=\$$6
+  as_fn_append $6 " $5"
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $4
 int
-main ()
+main (void)
 {
 #ifndef $as_decl_name
 #ifdef __cplusplus
@@ -2145,19 +2108,22 @@ main ()
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   eval "$3=yes"
-else
+else $as_nop
   eval "$3=no"
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+  eval $6=\$ac_save_FLAGS
+
 fi
 eval ac_res=\$$3
-              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
+              { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
   eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
-} # ac_fn_c_check_decl
+} # ac_fn_check_decl
 
 # ac_fn_c_compute_int LINENO EXPR VAR INCLUDES
 # --------------------------------------------
@@ -2173,7 +2139,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $4
 int
-main ()
+main (void)
 {
 static int test_array [1 - 2 * !(($2) >= 0)];
 test_array [0] = 0;
@@ -2183,14 +2149,15 @@ return test_array [0];
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   ac_lo=0 ac_mid=0
   while :; do
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $4
 int
-main ()
+main (void)
 {
 static int test_array [1 - 2 * !(($2) <= $ac_mid)];
 test_array [0] = 0;
@@ -2200,9 +2167,10 @@ return test_array [0];
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   ac_hi=$ac_mid; break
-else
+else $as_nop
   as_fn_arith $ac_mid + 1 && ac_lo=$as_val
                        if test $ac_lo -le $ac_mid; then
                          ac_lo= ac_hi=
@@ -2210,14 +2178,14 @@ else
                        fi
                        as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
   done
-else
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $4
 int
-main ()
+main (void)
 {
 static int test_array [1 - 2 * !(($2) < 0)];
 test_array [0] = 0;
@@ -2227,14 +2195,15 @@ return test_array [0];
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   ac_hi=-1 ac_mid=-1
   while :; do
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $4
 int
-main ()
+main (void)
 {
 static int test_array [1 - 2 * !(($2) >= $ac_mid)];
 test_array [0] = 0;
@@ -2244,9 +2213,10 @@ return test_array [0];
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   ac_lo=$ac_mid; break
-else
+else $as_nop
   as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val
                        if test $ac_mid -le $ac_hi; then
                          ac_lo= ac_hi=
@@ -2254,14 +2224,14 @@ else
                        fi
                        as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
   done
-else
+else $as_nop
   ac_lo= ac_hi=
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 # Binary search between lo and hi bounds.
 while test "x$ac_lo" != "x$ac_hi"; do
   as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val
@@ -2269,7 +2239,7 @@ while test "x$ac_lo" != "x$ac_hi"; do
 /* end confdefs.h.  */
 $4
 int
-main ()
+main (void)
 {
 static int test_array [1 - 2 * !(($2) <= $ac_mid)];
 test_array [0] = 0;
@@ -2279,12 +2249,13 @@ return test_array [0];
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   ac_hi=$ac_mid
-else
+else $as_nop
   as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 done
 case $ac_lo in #((
 ?*) eval "$3=\$ac_lo"; ac_retval=0 ;;
@@ -2294,12 +2265,12 @@ esac
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $4
-static long int longval () { return $2; }
-static unsigned long int ulongval () { return $2; }
+static long int longval (void) { return $2; }
+static unsigned long int ulongval (void) { return $2; }
 #include <stdio.h>
 #include <stdlib.h>
 int
-main ()
+main (void)
 {
 
   FILE *f = fopen ("conftest.val", "w");
@@ -2327,9 +2298,10 @@ main ()
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
   echo >>conftest.val; read $3 <conftest.val; ac_retval=0
-else
+else $as_nop
   ac_retval=1
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
@@ -2349,16 +2321,17 @@ rm -f conftest.val
 ac_fn_c_check_member ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5
-$as_echo_n "checking for $2.$3... " >&6; }
-if eval \${$4+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5
+printf %s "checking for $2.$3... " >&6; }
+if eval test \${$4+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $5
 int
-main ()
+main (void)
 {
 static $2 ac_aggr;
 if (ac_aggr.$3)
@@ -2367,14 +2340,15 @@ return 0;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   eval "$4=yes"
-else
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $5
 int
-main ()
+main (void)
 {
 static $2 ac_aggr;
 if (sizeof ac_aggr.$3)
@@ -2383,29 +2357,50 @@ return 0;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   eval "$4=yes"
-else
+else $as_nop
   eval "$4=no"
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
 eval ac_res=\$$4
-              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
+              { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
   eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_member
+ac_configure_args_raw=
+for ac_arg
+do
+  case $ac_arg in
+  *\'*)
+    ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+  esac
+  as_fn_append ac_configure_args_raw " '$ac_arg'"
+done
+
+case $ac_configure_args_raw in
+  *$as_nl*)
+    ac_safe_unquote= ;;
+  *)
+    ac_unsafe_z='|&;<>()$`\\"*?[ ''    ' # This string ends in space, tab.
+    ac_unsafe_a="$ac_unsafe_z#~"
+    ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g"
+    ac_configure_args_raw=`      printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;;
+esac
+
 cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by bash $as_me 5.1-release, which was
-generated by GNU Autoconf 2.69.  Invocation command line was
+It was created by bash $as_me 5.2-release, which was
+generated by GNU Autoconf 2.71.  Invocation command line was
 
-  $ $0 $@
+  $ $0$ac_configure_args_raw
 
 _ACEOF
 exec 5>>config.log
@@ -2438,8 +2433,12 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    $as_echo "PATH: $as_dir"
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
+    printf "%s\n" "PATH: $as_dir"
   done
 IFS=$as_save_IFS
 
@@ -2474,7 +2473,7 @@ do
     | -silent | --silent | --silen | --sile | --sil)
       continue ;;
     *\'*)
-      ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+      ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
     esac
     case $ac_pass in
     1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
@@ -2509,11 +2508,13 @@ done
 # WARNING: Use '\'' to represent an apostrophe within the trap.
 # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
 trap 'exit_status=$?
+  # Sanitize IFS.
+  IFS=" ""     $as_nl"
   # Save into config.log some information that might help in debugging.
   {
     echo
 
-    $as_echo "## ---------------- ##
+    printf "%s\n" "## ---------------- ##
 ## Cache variables. ##
 ## ---------------- ##"
     echo
@@ -2524,8 +2525,8 @@ trap 'exit_status=$?
     case $ac_val in #(
     *${as_nl}*)
       case $ac_var in #(
-      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+      *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
       esac
       case $ac_var in #(
       _ | IFS | as_nl) ;; #(
@@ -2549,7 +2550,7 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
 )
     echo
 
-    $as_echo "## ----------------- ##
+    printf "%s\n" "## ----------------- ##
 ## Output variables. ##
 ## ----------------- ##"
     echo
@@ -2557,14 +2558,14 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
     do
       eval ac_val=\$$ac_var
       case $ac_val in
-      *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+      *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
       esac
-      $as_echo "$ac_var='\''$ac_val'\''"
+      printf "%s\n" "$ac_var='\''$ac_val'\''"
     done | sort
     echo
 
     if test -n "$ac_subst_files"; then
-      $as_echo "## ------------------- ##
+      printf "%s\n" "## ------------------- ##
 ## File substitutions. ##
 ## ------------------- ##"
       echo
@@ -2572,15 +2573,15 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
       do
        eval ac_val=\$$ac_var
        case $ac_val in
-       *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+       *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
        esac
-       $as_echo "$ac_var='\''$ac_val'\''"
+       printf "%s\n" "$ac_var='\''$ac_val'\''"
       done | sort
       echo
     fi
 
     if test -s confdefs.h; then
-      $as_echo "## ----------- ##
+      printf "%s\n" "## ----------- ##
 ## confdefs.h. ##
 ## ----------- ##"
       echo
@@ -2588,8 +2589,8 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
       echo
     fi
     test "$ac_signal" != 0 &&
-      $as_echo "$as_me: caught signal $ac_signal"
-    $as_echo "$as_me: exit $exit_status"
+      printf "%s\n" "$as_me: caught signal $ac_signal"
+    printf "%s\n" "$as_me: exit $exit_status"
   } >&5
   rm -f core *.core core.conftest.* &&
     rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
@@ -2603,63 +2604,48 @@ ac_signal=0
 # confdefs.h avoids OS command line length limits that DEFS can exceed.
 rm -f -r conftest* confdefs.h
 
-$as_echo "/* confdefs.h */" > confdefs.h
+printf "%s\n" "/* confdefs.h */" > confdefs.h
 
 # Predefined preprocessor variables.
 
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_NAME "$PACKAGE_NAME"
-_ACEOF
+printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h
 
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
-_ACEOF
+printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h
 
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_VERSION "$PACKAGE_VERSION"
-_ACEOF
+printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h
 
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_STRING "$PACKAGE_STRING"
-_ACEOF
+printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h
 
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
-_ACEOF
+printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h
 
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_URL "$PACKAGE_URL"
-_ACEOF
+printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h
 
 
 # Let the site file select an alternate cache file if it wants to.
 # Prefer an explicitly selected file to automatically selected ones.
-ac_site_file1=NONE
-ac_site_file2=NONE
 if test -n "$CONFIG_SITE"; then
-  # We do not want a PATH search for config.site.
-  case $CONFIG_SITE in #((
-    -*)  ac_site_file1=./$CONFIG_SITE;;
-    */*) ac_site_file1=$CONFIG_SITE;;
-    *)   ac_site_file1=./$CONFIG_SITE;;
-  esac
+  ac_site_files="$CONFIG_SITE"
 elif test "x$prefix" != xNONE; then
-  ac_site_file1=$prefix/share/config.site
-  ac_site_file2=$prefix/etc/config.site
+  ac_site_files="$prefix/share/config.site $prefix/etc/config.site"
 else
-  ac_site_file1=$ac_default_prefix/share/config.site
-  ac_site_file2=$ac_default_prefix/etc/config.site
+  ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
 fi
-for ac_site_file in "$ac_site_file1" "$ac_site_file2"
+
+for ac_site_file in $ac_site_files
 do
-  test "x$ac_site_file" = xNONE && continue
-  if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
-$as_echo "$as_me: loading site script $ac_site_file" >&6;}
+  case $ac_site_file in #(
+  */*) :
+     ;; #(
+  *) :
+    ac_site_file=./$ac_site_file ;;
+esac
+  if test -f "$ac_site_file" && test -r "$ac_site_file"; then
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
+printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;}
     sed 's/^/| /' "$ac_site_file" >&5
     . "$ac_site_file" \
-      || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+      || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "failed to load site script $ac_site_file
 See \`config.log' for more details" "$LINENO" 5; }
   fi
@@ -2669,32 +2655,449 @@ if test -r "$cache_file"; then
   # Some versions of bash will fail to source /dev/null (special files
   # actually), so we avoid doing that.  DJGPP emulates it as a regular file.
   if test /dev/null != "$cache_file" && test -f "$cache_file"; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
-$as_echo "$as_me: loading cache $cache_file" >&6;}
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
+printf "%s\n" "$as_me: loading cache $cache_file" >&6;}
     case $cache_file in
       [\\/]* | ?:[\\/]* ) . "$cache_file";;
       *)                      . "./$cache_file";;
     esac
   fi
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
-$as_echo "$as_me: creating cache $cache_file" >&6;}
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
+printf "%s\n" "$as_me: creating cache $cache_file" >&6;}
   >$cache_file
 fi
 
+# Test code for whether the C compiler supports C89 (global declarations)
+ac_c_conftest_c89_globals='
+/* Does the compiler advertise C89 conformance?
+   Do not test the value of __STDC__, because some compilers set it to 0
+   while being otherwise adequately conformant. */
+#if !defined __STDC__
+# error "Compiler does not advertise C89 conformance"
+#endif
+
+#include <stddef.h>
+#include <stdarg.h>
+struct stat;
+/* Most of the following tests are stolen from RCS 5.7 src/conf.sh.  */
+struct buf { int x; };
+struct buf * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not \xHH hex character constants.
+   These do not provoke an error unfortunately, instead are silently treated
+   as an "x".  The following induces an error, until -std is added to get
+   proper ANSI mode.  Curiously \x00 != x always comes out true, for an
+   array size at least.  It is necessary to write \x00 == 0 to get something
+   that is true only with -std.  */
+int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+   inside strings and character constants.  */
+#define FOO(x) '\''x'\''
+int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int),
+               int, int);'
+
+# Test code for whether the C compiler supports C89 (body of main).
+ac_c_conftest_c89_main='
+ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]);
+'
+
+# Test code for whether the C compiler supports C99 (global declarations)
+ac_c_conftest_c99_globals='
+// Does the compiler advertise C99 conformance?
+#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L
+# error "Compiler does not advertise C99 conformance"
+#endif
+
+#include <stdbool.h>
+extern int puts (const char *);
+extern int printf (const char *, ...);
+extern int dprintf (int, const char *, ...);
+extern void *malloc (size_t);
+
+// Check varargs macros.  These examples are taken from C99 6.10.3.5.
+// dprintf is used instead of fprintf to avoid needing to declare
+// FILE and stderr.
+#define debug(...) dprintf (2, __VA_ARGS__)
+#define showlist(...) puts (#__VA_ARGS__)
+#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__))
+static void
+test_varargs_macros (void)
+{
+  int x = 1234;
+  int y = 5678;
+  debug ("Flag");
+  debug ("X = %d\n", x);
+  showlist (The first, second, and third items.);
+  report (x>y, "x is %d but y is %d", x, y);
+}
+
+// Check long long types.
+#define BIG64 18446744073709551615ull
+#define BIG32 4294967295ul
+#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0)
+#if !BIG_OK
+  #error "your preprocessor is broken"
+#endif
+#if BIG_OK
+#else
+  #error "your preprocessor is broken"
+#endif
+static long long int bignum = -9223372036854775807LL;
+static unsigned long long int ubignum = BIG64;
+
+struct incomplete_array
+{
+  int datasize;
+  double data[];
+};
+
+struct named_init {
+  int number;
+  const wchar_t *name;
+  double average;
+};
+
+typedef const char *ccp;
+
+static inline int
+test_restrict (ccp restrict text)
+{
+  // See if C++-style comments work.
+  // Iterate through items via the restricted pointer.
+  // Also check for declarations in for loops.
+  for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i)
+    continue;
+  return 0;
+}
+
+// Check varargs and va_copy.
+static bool
+test_varargs (const char *format, ...)
+{
+  va_list args;
+  va_start (args, format);
+  va_list args_copy;
+  va_copy (args_copy, args);
+
+  const char *str = "";
+  int number = 0;
+  float fnumber = 0;
+
+  while (*format)
+    {
+      switch (*format++)
+       {
+       case '\''s'\'': // string
+         str = va_arg (args_copy, const char *);
+         break;
+       case '\''d'\'': // int
+         number = va_arg (args_copy, int);
+         break;
+       case '\''f'\'': // float
+         fnumber = va_arg (args_copy, double);
+         break;
+       default:
+         break;
+       }
+    }
+  va_end (args_copy);
+  va_end (args);
+
+  return *str && number && fnumber;
+}
+'
+
+# Test code for whether the C compiler supports C99 (body of main).
+ac_c_conftest_c99_main='
+  // Check bool.
+  _Bool success = false;
+  success |= (argc != 0);
+
+  // Check restrict.
+  if (test_restrict ("String literal") == 0)
+    success = true;
+  char *restrict newvar = "Another string";
+
+  // Check varargs.
+  success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234);
+  test_varargs_macros ();
+
+  // Check flexible array members.
+  struct incomplete_array *ia =
+    malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10));
+  ia->datasize = 10;
+  for (int i = 0; i < ia->datasize; ++i)
+    ia->data[i] = i * 1.234;
+
+  // Check named initializers.
+  struct named_init ni = {
+    .number = 34,
+    .name = L"Test wide string",
+    .average = 543.34343,
+  };
+
+  ni.number = 58;
+
+  int dynamic_array[ni.number];
+  dynamic_array[0] = argv[0][0];
+  dynamic_array[ni.number - 1] = 543;
+
+  // work around unused variable warnings
+  ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\''
+        || dynamic_array[ni.number - 1] != 543);
+'
+
+# Test code for whether the C compiler supports C11 (global declarations)
+ac_c_conftest_c11_globals='
+// Does the compiler advertise C11 conformance?
+#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L
+# error "Compiler does not advertise C11 conformance"
+#endif
+
+// Check _Alignas.
+char _Alignas (double) aligned_as_double;
+char _Alignas (0) no_special_alignment;
+extern char aligned_as_int;
+char _Alignas (0) _Alignas (int) aligned_as_int;
+
+// Check _Alignof.
+enum
+{
+  int_alignment = _Alignof (int),
+  int_array_alignment = _Alignof (int[100]),
+  char_alignment = _Alignof (char)
+};
+_Static_assert (0 < -_Alignof (int), "_Alignof is signed");
+
+// Check _Noreturn.
+int _Noreturn does_not_return (void) { for (;;) continue; }
+
+// Check _Static_assert.
+struct test_static_assert
+{
+  int x;
+  _Static_assert (sizeof (int) <= sizeof (long int),
+                  "_Static_assert does not work in struct");
+  long int y;
+};
+
+// Check UTF-8 literals.
+#define u8 syntax error!
+char const utf8_literal[] = u8"happens to be ASCII" "another string";
+
+// Check duplicate typedefs.
+typedef long *long_ptr;
+typedef long int *long_ptr;
+typedef long_ptr long_ptr;
+
+// Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1.
+struct anonymous
+{
+  union {
+    struct { int i; int j; };
+    struct { int k; long int l; } w;
+  };
+  int m;
+} v1;
+'
+
+# Test code for whether the C compiler supports C11 (body of main).
+ac_c_conftest_c11_main='
+  _Static_assert ((offsetof (struct anonymous, i)
+                  == offsetof (struct anonymous, w.k)),
+                 "Anonymous union alignment botch");
+  v1.i = 2;
+  v1.w.k = 5;
+  ok |= v1.i != 5;
+'
+
+# Test code for whether the C compiler supports C11 (complete).
+ac_c_conftest_c11_program="${ac_c_conftest_c89_globals}
+${ac_c_conftest_c99_globals}
+${ac_c_conftest_c11_globals}
+
+int
+main (int argc, char **argv)
+{
+  int ok = 0;
+  ${ac_c_conftest_c89_main}
+  ${ac_c_conftest_c99_main}
+  ${ac_c_conftest_c11_main}
+  return ok;
+}
+"
+
+# Test code for whether the C compiler supports C99 (complete).
+ac_c_conftest_c99_program="${ac_c_conftest_c89_globals}
+${ac_c_conftest_c99_globals}
+
+int
+main (int argc, char **argv)
+{
+  int ok = 0;
+  ${ac_c_conftest_c89_main}
+  ${ac_c_conftest_c99_main}
+  return ok;
+}
+"
+
+# Test code for whether the C compiler supports C89 (complete).
+ac_c_conftest_c89_program="${ac_c_conftest_c89_globals}
+
+int
+main (int argc, char **argv)
+{
+  int ok = 0;
+  ${ac_c_conftest_c89_main}
+  return ok;
+}
+"
+
+as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H"
+as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H"
+as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H"
+as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H"
+as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H"
+as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H"
+as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H"
+as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H"
+as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H"
+as_fn_append ac_header_c_list " wchar.h wchar_h HAVE_WCHAR_H"
+as_fn_append ac_header_c_list " minix/config.h minix_config_h HAVE_MINIX_CONFIG_H"
 gt_needs="$gt_needs need-ngettext"
-as_fn_append ac_header_list " stdlib.h"
-as_fn_append ac_header_list " unistd.h"
-as_fn_append ac_header_list " sys/param.h"
-as_fn_append ac_func_list " symlink"
-as_fn_append ac_func_list " uselocale"
-as_fn_append ac_header_list " xlocale.h"
-as_fn_append ac_header_list " sys/time.h"
-as_fn_append ac_func_list " alarm"
-as_fn_append ac_func_list " fpurge"
-as_fn_append ac_func_list " __fpurge"
-as_fn_append ac_func_list " snprintf"
-as_fn_append ac_func_list " vsnprintf"
+as_fn_append ac_header_c_list " sys/param.h sys_param_h HAVE_SYS_PARAM_H"
+as_fn_append ac_func_c_list " getpagesize HAVE_GETPAGESIZE"
+as_fn_append ac_func_c_list " symlink HAVE_SYMLINK"
+as_fn_append ac_func_c_list " uselocale HAVE_USELOCALE"
+as_fn_append ac_header_c_list " xlocale.h xlocale_h HAVE_XLOCALE_H"
+as_fn_append ac_func_c_list " vprintf HAVE_VPRINTF"
+as_fn_append ac_header_c_list " sys/time.h sys_time_h HAVE_SYS_TIME_H"
+as_fn_append ac_func_c_list " alarm HAVE_ALARM"
+as_fn_append ac_func_c_list " fpurge HAVE_FPURGE"
+as_fn_append ac_func_c_list " __fpurge HAVE___FPURGE"
+as_fn_append ac_func_c_list " snprintf HAVE_SNPRINTF"
+as_fn_append ac_func_c_list " vsnprintf HAVE_VSNPRINTF"
+
+# Auxiliary files required by this configure script.
+ac_aux_files="config.rpath install-sh config.guess config.sub"
+
+# Locations in which to look for auxiliary files.
+ac_aux_dir_candidates="${srcdir}/./support"
+
+# Search for a directory containing all of the required auxiliary files,
+# $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates.
+# If we don't find one directory that contains all the files we need,
+# we report the set of missing files from the *first* directory in
+# $ac_aux_dir_candidates and give up.
+ac_missing_aux_files=""
+ac_first_candidate=:
+printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
+for as_dir in $ac_aux_dir_candidates
+do
+  IFS=$as_save_IFS
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
+  as_found=:
+
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}:  trying $as_dir" >&5
+  ac_aux_dir_found=yes
+  ac_install_sh=
+  for ac_aux in $ac_aux_files
+  do
+    # As a special case, if "install-sh" is required, that requirement
+    # can be satisfied by any of "install-sh", "install.sh", or "shtool",
+    # and $ac_install_sh is set appropriately for whichever one is found.
+    if test x"$ac_aux" = x"install-sh"
+    then
+      if test -f "${as_dir}install-sh"; then
+        printf "%s\n" "$as_me:${as_lineno-$LINENO}:   ${as_dir}install-sh found" >&5
+        ac_install_sh="${as_dir}install-sh -c"
+      elif test -f "${as_dir}install.sh"; then
+        printf "%s\n" "$as_me:${as_lineno-$LINENO}:   ${as_dir}install.sh found" >&5
+        ac_install_sh="${as_dir}install.sh -c"
+      elif test -f "${as_dir}shtool"; then
+        printf "%s\n" "$as_me:${as_lineno-$LINENO}:   ${as_dir}shtool found" >&5
+        ac_install_sh="${as_dir}shtool install -c"
+      else
+        ac_aux_dir_found=no
+        if $ac_first_candidate; then
+          ac_missing_aux_files="${ac_missing_aux_files} install-sh"
+        else
+          break
+        fi
+      fi
+    else
+      if test -f "${as_dir}${ac_aux}"; then
+        printf "%s\n" "$as_me:${as_lineno-$LINENO}:   ${as_dir}${ac_aux} found" >&5
+      else
+        ac_aux_dir_found=no
+        if $ac_first_candidate; then
+          ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}"
+        else
+          break
+        fi
+      fi
+    fi
+  done
+  if test "$ac_aux_dir_found" = yes; then
+    ac_aux_dir="$as_dir"
+    break
+  fi
+  ac_first_candidate=false
+
+  as_found=false
+done
+IFS=$as_save_IFS
+if $as_found
+then :
+
+else $as_nop
+  as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5
+fi
+
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+if test -f "${ac_aux_dir}config.guess"; then
+  ac_config_guess="$SHELL ${ac_aux_dir}config.guess"
+fi
+if test -f "${ac_aux_dir}config.sub"; then
+  ac_config_sub="$SHELL ${ac_aux_dir}config.sub"
+fi
+if test -f "$ac_aux_dir/configure"; then
+  ac_configure="$SHELL ${ac_aux_dir}configure"
+fi
+
 # Check that the precious variables saved in the cache have kept the same
 # value.
 ac_cache_corrupted=false
@@ -2705,12 +3108,12 @@ for ac_var in $ac_precious_vars; do
   eval ac_new_val=\$ac_env_${ac_var}_value
   case $ac_old_set,$ac_new_set in
     set,)
-      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+      { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
       ac_cache_corrupted=: ;;
     ,set)
-      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+      { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
+printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
       ac_cache_corrupted=: ;;
     ,);;
     *)
@@ -2719,24 +3122,24 @@ $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
        ac_old_val_w=`echo x $ac_old_val`
        ac_new_val_w=`echo x $ac_new_val`
        if test "$ac_old_val_w" != "$ac_new_val_w"; then
-         { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
-$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+         { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
+printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
          ac_cache_corrupted=:
        else
-         { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
-$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
+         { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
+printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
          eval $ac_var=\$ac_old_val
        fi
-       { $as_echo "$as_me:${as_lineno-$LINENO}:   former value:  \`$ac_old_val'" >&5
-$as_echo "$as_me:   former value:  \`$ac_old_val'" >&2;}
-       { $as_echo "$as_me:${as_lineno-$LINENO}:   current value: \`$ac_new_val'" >&5
-$as_echo "$as_me:   current value: \`$ac_new_val'" >&2;}
+       { printf "%s\n" "$as_me:${as_lineno-$LINENO}:   former value:  \`$ac_old_val'" >&5
+printf "%s\n" "$as_me:   former value:  \`$ac_old_val'" >&2;}
+       { printf "%s\n" "$as_me:${as_lineno-$LINENO}:   current value: \`$ac_new_val'" >&5
+printf "%s\n" "$as_me:   current value: \`$ac_new_val'" >&2;}
       fi;;
   esac
   # Pass precious variables to config.status.
   if test "$ac_new_set" = set; then
     case $ac_new_val in
-    *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+    *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
     *) ac_arg=$ac_var=$ac_new_val ;;
     esac
     case " $ac_configure_args " in
@@ -2746,11 +3149,12 @@ $as_echo "$as_me:   current value: \`$ac_new_val'" >&2;}
   fi
 done
 if $ac_cache_corrupted; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-  { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
-$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
-  as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
+printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;}
+  as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file'
+           and start over" "$LINENO" 5
 fi
 ## -------------------- ##
 ## Main body of script. ##
@@ -2767,39 +3171,11 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
 
-ac_aux_dir=
-for ac_dir in ./support "$srcdir"/./support; do
-  if test -f "$ac_dir/install-sh"; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/install-sh -c"
-    break
-  elif test -f "$ac_dir/install.sh"; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/install.sh -c"
-    break
-  elif test -f "$ac_dir/shtool"; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/shtool install -c"
-    break
-  fi
-done
-if test -z "$ac_aux_dir"; then
-  as_fn_error $? "cannot find install-sh, install.sh, or shtool in ./support \"$srcdir\"/./support" "$LINENO" 5
-fi
-
-# These three variables are undocumented and unsupported,
-# and are intended to be withdrawn in a future Autoconf release.
-# They can cause serious problems if a builder's source tree is in a directory
-# whose full name contains unusual characters.
-ac_config_guess="$SHELL $ac_aux_dir/config.guess"  # Please don't use this var.
-ac_config_sub="$SHELL $ac_aux_dir/config.sub"  # Please don't use this var.
-ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
-
 
 ac_config_headers="$ac_config_headers config.h"
 
 
-BASHVERS=5.1
+BASHVERS=5.2
 RELSTATUS=release
 
 case "$RELSTATUS" in
@@ -2807,26 +3183,30 @@ alp*|bet*|dev*|rc*|releng*|maint*)      DEBUG='-DDEBUG' MALLOC_DEBUG='-DMALLOC_DEBUG'
 *)     DEBUG= MALLOC_DEBUG= ;;
 esac
 
-# Make sure we can run config.sub.
-$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
-  as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
-$as_echo_n "checking build system type... " >&6; }
-if ${ac_cv_build+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+
+
+  # Make sure we can run config.sub.
+$SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 ||
+  as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+printf %s "checking build system type... " >&6; }
+if test ${ac_cv_build+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_build_alias=$build_alias
 test "x$ac_build_alias" = x &&
-  ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+  ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"`
 test "x$ac_build_alias" = x &&
   as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
-ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
-  as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` ||
+  as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
-$as_echo "$ac_cv_build" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+printf "%s\n" "$ac_cv_build" >&6; }
 case $ac_cv_build in
 *-*-*) ;;
 *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
@@ -2845,21 +3225,22 @@ IFS=$ac_save_IFS
 case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
-$as_echo_n "checking host system type... " >&6; }
-if ${ac_cv_host+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+printf %s "checking host system type... " >&6; }
+if test ${ac_cv_host+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test "x$host_alias" = x; then
   ac_cv_host=$ac_cv_build
 else
-  ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
-    as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+  ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` ||
+    as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5
 fi
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
-$as_echo "$ac_cv_host" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+printf "%s\n" "$ac_cv_host" >&6; }
 case $ac_cv_host in
 *-*-*) ;;
 *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
@@ -2929,31 +3310,36 @@ esac
 
 
 # Check whether --with-afs was given.
-if test "${with_afs+set}" = set; then :
+if test ${with_afs+y}
+then :
   withval=$with_afs; opt_afs=$withval
 fi
 
 
 # Check whether --with-bash-malloc was given.
-if test "${with_bash_malloc+set}" = set; then :
+if test ${with_bash_malloc+y}
+then :
   withval=$with_bash_malloc; opt_bash_malloc=$withval
 fi
 
 
 # Check whether --with-curses was given.
-if test "${with_curses+set}" = set; then :
+if test ${with_curses+y}
+then :
   withval=$with_curses; opt_curses=$withval
 fi
 
 
 # Check whether --with-gnu-malloc was given.
-if test "${with_gnu_malloc+set}" = set; then :
+if test ${with_gnu_malloc+y}
+then :
   withval=$with_gnu_malloc; opt_bash_malloc=$withval
 fi
 
 
 # Check whether --with-installed-readline was given.
-if test "${with_installed_readline+set}" = set; then :
+if test ${with_installed_readline+y}
+then :
   withval=$with_installed_readline; opt_with_installed_readline=$withval
 fi
 
@@ -2967,7 +3353,7 @@ if test "$opt_bash_malloc" = yes; then
        MALLOC_LDFLAGS='-L$(ALLOC_LIBDIR)'
        MALLOC_DEP='$(MALLOC_LIBRARY)'
 
-       $as_echo "#define USING_BASH_MALLOC 1" >>confdefs.h
+       printf "%s\n" "#define USING_BASH_MALLOC 1" >>confdefs.h
 
 else
        MALLOC_LIB=
@@ -2977,7 +3363,7 @@ else
 fi
 
 if test "$opt_afs" = yes; then
-       $as_echo "#define AFS 1" >>confdefs.h
+       printf "%s\n" "#define AFS 1" >>confdefs.h
 
 fi
 
@@ -3027,12 +3413,17 @@ opt_dircomplete_expand_default=no
 opt_globascii_default=yes
 opt_function_import=yes
 opt_dev_fd_stat_broken=no
+opt_alt_array_impl=no
+opt_translatable_strings=yes
+
+ARRAY_O=array.o
 
 opt_static_link=no
 opt_profiling=no
 
 # Check whether --enable-minimal-config was given.
-if test "${enable_minimal_config+set}" = set; then :
+if test ${enable_minimal_config+y}
+then :
   enableval=$enable_minimal_config; opt_minimal_config=$enableval
 fi
 
@@ -3047,207 +3438,260 @@ if test $opt_minimal_config = yes; then
        opt_net_redirs=no opt_progcomp=no opt_separate_help=no
        opt_multibyte=yes opt_cond_regexp=no opt_coproc=no
        opt_casemod_attrs=no opt_casemod_expansions=no opt_extglob_default=no
+       opt_translatable_strings=no
        opt_globascii_default=yes
 fi
 
 # Check whether --enable-alias was given.
-if test "${enable_alias+set}" = set; then :
+if test ${enable_alias+y}
+then :
   enableval=$enable_alias; opt_alias=$enableval
 fi
 
+# Check whether --enable-alt-array-implementation was given.
+if test ${enable_alt_array_implementation+y}
+then :
+  enableval=$enable_alt_array_implementation; opt_alt_array_impl=$enableval
+fi
+
 # Check whether --enable-arith-for-command was given.
-if test "${enable_arith_for_command+set}" = set; then :
+if test ${enable_arith_for_command+y}
+then :
   enableval=$enable_arith_for_command; opt_arith_for_command=$enableval
 fi
 
 # Check whether --enable-array-variables was given.
-if test "${enable_array_variables+set}" = set; then :
+if test ${enable_array_variables+y}
+then :
   enableval=$enable_array_variables; opt_array_variables=$enableval
 fi
 
 # Check whether --enable-bang-history was given.
-if test "${enable_bang_history+set}" = set; then :
+if test ${enable_bang_history+y}
+then :
   enableval=$enable_bang_history; opt_bang_history=$enableval
 fi
 
 # Check whether --enable-brace-expansion was given.
-if test "${enable_brace_expansion+set}" = set; then :
+if test ${enable_brace_expansion+y}
+then :
   enableval=$enable_brace_expansion; opt_brace_expansion=$enableval
 fi
 
 # Check whether --enable-casemod-attributes was given.
-if test "${enable_casemod_attributes+set}" = set; then :
+if test ${enable_casemod_attributes+y}
+then :
   enableval=$enable_casemod_attributes; opt_casemod_attrs=$enableval
 fi
 
 # Check whether --enable-casemod-expansions was given.
-if test "${enable_casemod_expansions+set}" = set; then :
+if test ${enable_casemod_expansions+y}
+then :
   enableval=$enable_casemod_expansions; opt_casemod_expansions=$enableval
 fi
 
 # Check whether --enable-command-timing was given.
-if test "${enable_command_timing+set}" = set; then :
+if test ${enable_command_timing+y}
+then :
   enableval=$enable_command_timing; opt_command_timing=$enableval
 fi
 
 # Check whether --enable-cond-command was given.
-if test "${enable_cond_command+set}" = set; then :
+if test ${enable_cond_command+y}
+then :
   enableval=$enable_cond_command; opt_cond_command=$enableval
 fi
 
 # Check whether --enable-cond-regexp was given.
-if test "${enable_cond_regexp+set}" = set; then :
+if test ${enable_cond_regexp+y}
+then :
   enableval=$enable_cond_regexp; opt_cond_regexp=$enableval
 fi
 
 # Check whether --enable-coprocesses was given.
-if test "${enable_coprocesses+set}" = set; then :
+if test ${enable_coprocesses+y}
+then :
   enableval=$enable_coprocesses; opt_coproc=$enableval
 fi
 
 # Check whether --enable-debugger was given.
-if test "${enable_debugger+set}" = set; then :
+if test ${enable_debugger+y}
+then :
   enableval=$enable_debugger; opt_debugger=$enableval
 fi
 
 # Check whether --enable-dev-fd-stat-broken was given.
-if test "${enable_dev_fd_stat_broken+set}" = set; then :
+if test ${enable_dev_fd_stat_broken+y}
+then :
   enableval=$enable_dev_fd_stat_broken; opt_dev_fd_stat_broken=$enableval
 fi
 
 # Check whether --enable-direxpand-default was given.
-if test "${enable_direxpand_default+set}" = set; then :
+if test ${enable_direxpand_default+y}
+then :
   enableval=$enable_direxpand_default; opt_dircomplete_expand_default=$enableval
 fi
 
 # Check whether --enable-directory-stack was given.
-if test "${enable_directory_stack+set}" = set; then :
+if test ${enable_directory_stack+y}
+then :
   enableval=$enable_directory_stack; opt_dirstack=$enableval
 fi
 
 # Check whether --enable-disabled-builtins was given.
-if test "${enable_disabled_builtins+set}" = set; then :
+if test ${enable_disabled_builtins+y}
+then :
   enableval=$enable_disabled_builtins; opt_disabled_builtins=$enableval
 fi
 
 # Check whether --enable-dparen-arithmetic was given.
-if test "${enable_dparen_arithmetic+set}" = set; then :
+if test ${enable_dparen_arithmetic+y}
+then :
   enableval=$enable_dparen_arithmetic; opt_dparen_arith=$enableval
 fi
 
 # Check whether --enable-extended-glob was given.
-if test "${enable_extended_glob+set}" = set; then :
+if test ${enable_extended_glob+y}
+then :
   enableval=$enable_extended_glob; opt_extended_glob=$enableval
 fi
 
 # Check whether --enable-extended-glob-default was given.
-if test "${enable_extended_glob_default+set}" = set; then :
+if test ${enable_extended_glob_default+y}
+then :
   enableval=$enable_extended_glob_default; opt_extglob_default=$enableval
 fi
 
 # Check whether --enable-function-import was given.
-if test "${enable_function_import+set}" = set; then :
+if test ${enable_function_import+y}
+then :
   enableval=$enable_function_import; opt_function_import=$enableval
 fi
 
 # Check whether --enable-glob-asciiranges-default was given.
-if test "${enable_glob_asciiranges_default+set}" = set; then :
+if test ${enable_glob_asciiranges_default+y}
+then :
   enableval=$enable_glob_asciiranges_default; opt_globascii_default=$enableval
 fi
 
 # Check whether --enable-help-builtin was given.
-if test "${enable_help_builtin+set}" = set; then :
+if test ${enable_help_builtin+y}
+then :
   enableval=$enable_help_builtin; opt_help=$enableval
 fi
 
 # Check whether --enable-history was given.
-if test "${enable_history+set}" = set; then :
+if test ${enable_history+y}
+then :
   enableval=$enable_history; opt_history=$enableval
 fi
 
 # Check whether --enable-job-control was given.
-if test "${enable_job_control+set}" = set; then :
+if test ${enable_job_control+y}
+then :
   enableval=$enable_job_control; opt_job_control=$enableval
 fi
 
 # Check whether --enable-multibyte was given.
-if test "${enable_multibyte+set}" = set; then :
+if test ${enable_multibyte+y}
+then :
   enableval=$enable_multibyte; opt_multibyte=$enableval
 fi
 
 # Check whether --enable-net-redirections was given.
-if test "${enable_net_redirections+set}" = set; then :
+if test ${enable_net_redirections+y}
+then :
   enableval=$enable_net_redirections; opt_net_redirs=$enableval
 fi
 
 # Check whether --enable-process-substitution was given.
-if test "${enable_process_substitution+set}" = set; then :
+if test ${enable_process_substitution+y}
+then :
   enableval=$enable_process_substitution; opt_process_subst=$enableval
 fi
 
 # Check whether --enable-progcomp was given.
-if test "${enable_progcomp+set}" = set; then :
+if test ${enable_progcomp+y}
+then :
   enableval=$enable_progcomp; opt_progcomp=$enableval
 fi
 
 # Check whether --enable-prompt-string-decoding was given.
-if test "${enable_prompt_string_decoding+set}" = set; then :
+if test ${enable_prompt_string_decoding+y}
+then :
   enableval=$enable_prompt_string_decoding; opt_prompt_decoding=$enableval
 fi
 
 # Check whether --enable-readline was given.
-if test "${enable_readline+set}" = set; then :
+if test ${enable_readline+y}
+then :
   enableval=$enable_readline; opt_readline=$enableval
 fi
 
 # Check whether --enable-restricted was given.
-if test "${enable_restricted+set}" = set; then :
+if test ${enable_restricted+y}
+then :
   enableval=$enable_restricted; opt_restricted=$enableval
 fi
 
 # Check whether --enable-select was given.
-if test "${enable_select+set}" = set; then :
+if test ${enable_select+y}
+then :
   enableval=$enable_select; opt_select=$enableval
 fi
 
 # Check whether --enable-separate-helpfiles was given.
-if test "${enable_separate_helpfiles+set}" = set; then :
+if test ${enable_separate_helpfiles+y}
+then :
   enableval=$enable_separate_helpfiles; opt_separate_help=$enableval
 fi
 
 # Check whether --enable-single-help-strings was given.
-if test "${enable_single_help_strings+set}" = set; then :
+if test ${enable_single_help_strings+y}
+then :
   enableval=$enable_single_help_strings; opt_single_longdoc_strings=$enableval
 fi
 
 # Check whether --enable-strict-posix-default was given.
-if test "${enable_strict_posix_default+set}" = set; then :
+if test ${enable_strict_posix_default+y}
+then :
   enableval=$enable_strict_posix_default; opt_strict_posix=$enableval
 fi
 
+# Check whether --enable-translatable-strings was given.
+if test ${enable_translatable_strings+y}
+then :
+  enableval=$enable_translatable_strings; opt_translatable_strings=$enableval
+fi
+
 # Check whether --enable-usg-echo-default was given.
-if test "${enable_usg_echo_default+set}" = set; then :
+if test ${enable_usg_echo_default+y}
+then :
   enableval=$enable_usg_echo_default; opt_xpg_echo=$enableval
 fi
 
 # Check whether --enable-xpg-echo-default was given.
-if test "${enable_xpg_echo_default+set}" = set; then :
+if test ${enable_xpg_echo_default+y}
+then :
   enableval=$enable_xpg_echo_default; opt_xpg_echo=$enableval
 fi
 
 
 # Check whether --enable-mem-scramble was given.
-if test "${enable_mem_scramble+set}" = set; then :
+if test ${enable_mem_scramble+y}
+then :
   enableval=$enable_mem_scramble; opt_memscramble=$enableval
 fi
 
 # Check whether --enable-profiling was given.
-if test "${enable_profiling+set}" = set; then :
+if test ${enable_profiling+y}
+then :
   enableval=$enable_profiling; opt_profiling=$enableval
 fi
 
 # Check whether --enable-static-link was given.
-if test "${enable_static_link+set}" = set; then :
+if test ${enable_static_link+y}
+then :
   enableval=$enable_static_link; opt_static_link=$enableval
 fi
 
 
 
 if test $opt_alias = yes; then
-$as_echo "#define ALIAS 1" >>confdefs.h
+printf "%s\n" "#define ALIAS 1" >>confdefs.h
 
 fi
 if test $opt_dirstack = yes; then
-$as_echo "#define PUSHD_AND_POPD 1" >>confdefs.h
+printf "%s\n" "#define PUSHD_AND_POPD 1" >>confdefs.h
 
 fi
 if test $opt_restricted = yes; then
-$as_echo "#define RESTRICTED_SHELL 1" >>confdefs.h
+printf "%s\n" "#define RESTRICTED_SHELL 1" >>confdefs.h
 
 fi
 if test $opt_process_subst = yes; then
-$as_echo "#define PROCESS_SUBSTITUTION 1" >>confdefs.h
+printf "%s\n" "#define PROCESS_SUBSTITUTION 1" >>confdefs.h
 
 fi
 if test $opt_prompt_decoding = yes; then
-$as_echo "#define PROMPT_STRING_DECODE 1" >>confdefs.h
+printf "%s\n" "#define PROMPT_STRING_DECODE 1" >>confdefs.h
 
 fi
 if test $opt_select = yes; then
-$as_echo "#define SELECT_COMMAND 1" >>confdefs.h
+printf "%s\n" "#define SELECT_COMMAND 1" >>confdefs.h
 
 fi
 if test $opt_help = yes; then
-$as_echo "#define HELP_BUILTIN 1" >>confdefs.h
+printf "%s\n" "#define HELP_BUILTIN 1" >>confdefs.h
 
 fi
 if test $opt_array_variables = yes; then
-$as_echo "#define ARRAY_VARS 1" >>confdefs.h
+printf "%s\n" "#define ARRAY_VARS 1" >>confdefs.h
 
 fi
 if test $opt_dparen_arith = yes; then
-$as_echo "#define DPAREN_ARITHMETIC 1" >>confdefs.h
+printf "%s\n" "#define DPAREN_ARITHMETIC 1" >>confdefs.h
 
 fi
 if test $opt_brace_expansion = yes; then
-$as_echo "#define BRACE_EXPANSION 1" >>confdefs.h
+printf "%s\n" "#define BRACE_EXPANSION 1" >>confdefs.h
 
 fi
 if test $opt_disabled_builtins = yes; then
-$as_echo "#define DISABLED_BUILTINS 1" >>confdefs.h
+printf "%s\n" "#define DISABLED_BUILTINS 1" >>confdefs.h
 
 fi
 if test $opt_command_timing = yes; then
-$as_echo "#define COMMAND_TIMING 1" >>confdefs.h
+printf "%s\n" "#define COMMAND_TIMING 1" >>confdefs.h
 
 fi
 if test $opt_xpg_echo = yes ; then
-$as_echo "#define DEFAULT_ECHO_TO_XPG 1" >>confdefs.h
+printf "%s\n" "#define DEFAULT_ECHO_TO_XPG 1" >>confdefs.h
 
 fi
 if test $opt_strict_posix = yes; then
-$as_echo "#define STRICT_POSIX 1" >>confdefs.h
+printf "%s\n" "#define STRICT_POSIX 1" >>confdefs.h
 
 fi
 if test $opt_extended_glob = yes ; then
-$as_echo "#define EXTENDED_GLOB 1" >>confdefs.h
+printf "%s\n" "#define EXTENDED_GLOB 1" >>confdefs.h
 
 fi
 if test $opt_extglob_default = yes; then
-$as_echo "#define EXTGLOB_DEFAULT 1" >>confdefs.h
+printf "%s\n" "#define EXTGLOB_DEFAULT 1" >>confdefs.h
 
 else
-$as_echo "#define EXTGLOB_DEFAULT 0" >>confdefs.h
+printf "%s\n" "#define EXTGLOB_DEFAULT 0" >>confdefs.h
 
 fi
 if test $opt_cond_command = yes ; then
-$as_echo "#define COND_COMMAND 1" >>confdefs.h
+printf "%s\n" "#define COND_COMMAND 1" >>confdefs.h
 
 fi
 if test $opt_cond_regexp = yes ; then
-$as_echo "#define COND_REGEXP 1" >>confdefs.h
+printf "%s\n" "#define COND_REGEXP 1" >>confdefs.h
 
 fi
 if test $opt_coproc = yes; then
-$as_echo "#define COPROCESS_SUPPORT 1" >>confdefs.h
+printf "%s\n" "#define COPROCESS_SUPPORT 1" >>confdefs.h
 
 fi
 if test $opt_arith_for_command = yes; then
-$as_echo "#define ARITH_FOR_COMMAND 1" >>confdefs.h
+printf "%s\n" "#define ARITH_FOR_COMMAND 1" >>confdefs.h
 
 fi
 if test $opt_net_redirs = yes; then
-$as_echo "#define NETWORK_REDIRECTIONS 1" >>confdefs.h
+printf "%s\n" "#define NETWORK_REDIRECTIONS 1" >>confdefs.h
 
 fi
 if test $opt_progcomp = yes; then
-$as_echo "#define PROGRAMMABLE_COMPLETION 1" >>confdefs.h
+printf "%s\n" "#define PROGRAMMABLE_COMPLETION 1" >>confdefs.h
 
 fi
 if test $opt_multibyte = no; then
-$as_echo "#define NO_MULTIBYTE_SUPPORT 1" >>confdefs.h
+printf "%s\n" "#define NO_MULTIBYTE_SUPPORT 1" >>confdefs.h
 
 fi
 if test $opt_debugger = yes; then
-$as_echo "#define DEBUGGER 1" >>confdefs.h
+printf "%s\n" "#define DEBUGGER 1" >>confdefs.h
 
 fi
 if test $opt_casemod_attrs = yes; then
-$as_echo "#define CASEMOD_ATTRS 1" >>confdefs.h
+printf "%s\n" "#define CASEMOD_ATTRS 1" >>confdefs.h
 
 fi
 if test $opt_casemod_expansions = yes; then
-$as_echo "#define CASEMOD_EXPANSIONS 1" >>confdefs.h
+printf "%s\n" "#define CASEMOD_EXPANSIONS 1" >>confdefs.h
 
 fi
 if test $opt_dircomplete_expand_default = yes; then
-$as_echo "#define DIRCOMPLETE_EXPAND_DEFAULT 1" >>confdefs.h
+printf "%s\n" "#define DIRCOMPLETE_EXPAND_DEFAULT 1" >>confdefs.h
 
 fi
 if test $opt_globascii_default = yes; then
-$as_echo "#define GLOBASCII_DEFAULT 1" >>confdefs.h
+printf "%s\n" "#define GLOBASCII_DEFAULT 1" >>confdefs.h
 
 else
-$as_echo "#define GLOBASCII_DEFAULT 0" >>confdefs.h
+printf "%s\n" "#define GLOBASCII_DEFAULT 0" >>confdefs.h
 
 fi
 if test $opt_function_import = yes; then
-$as_echo "#define FUNCTION_IMPORT 1" >>confdefs.h
+printf "%s\n" "#define FUNCTION_IMPORT 1" >>confdefs.h
 
 fi
 if test $opt_dev_fd_stat_broken = yes; then
-$as_echo "#define DEV_FD_STAT_BROKEN 1" >>confdefs.h
+printf "%s\n" "#define DEV_FD_STAT_BROKEN 1" >>confdefs.h
+
+fi
+if test $opt_alt_array_impl = yes; then
+printf "%s\n" "#define ALT_ARRAY_IMPLEMENTATION 1" >>confdefs.h
+
+ARRAY_O=array2.o
+fi
+if test $opt_translatable_strings = yes; then
+printf "%s\n" "#define TRANSLATABLE_STRINGS 1" >>confdefs.h
 
 fi
 
 if test $opt_memscramble = yes; then
-$as_echo "#define MEMSCRAMBLE 1" >>confdefs.h
+printf "%s\n" "#define MEMSCRAMBLE 1" >>confdefs.h
 
 fi
 
@@ -3400,7 +3853,7 @@ fi
 HELPDIR= HELPDIRDEFINE= HELPINSTALL= HELPFILES_TARGET=
 if test "$opt_separate_help" != no; then
        if test "$opt_separate_help" = "yes" ; then
-               HELPDIR='${datadir}/bash'
+               HELPDIR='${datadir}/bash/helpfiles'
        else
                HELPDIR=$opt_separate_help
        fi
@@ -3430,6 +3883,8 @@ fi
 
 
 
+
+
 if test -z "$CFLAGS"; then
        want_auto_cflags=1
 fi
@@ -3438,6 +3893,15 @@ echo ""
 echo "Beginning configuration for bash-$BASHVERS-$RELSTATUS for ${host_cpu}-${host_vendor}-${host_os}"
 echo ""
 
+
+
+
+
+
+
+
+
+
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -3446,11 +3910,12 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
 set dummy ${ac_tool_prefix}gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
 else
@@ -3458,11 +3923,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_CC="${ac_tool_prefix}gcc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -3473,11 +3942,11 @@ fi
 fi
 CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -3486,11 +3955,12 @@ if test -z "$ac_cv_prog_CC"; then
   ac_ct_CC=$CC
   # Extract the first word of "gcc", so it can be a program name with args.
 set dummy gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$ac_ct_CC"; then
   ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
 else
@@ -3498,11 +3968,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_CC="gcc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -3513,11 +3987,11 @@ fi
 fi
 ac_ct_CC=$ac_cv_prog_ac_ct_CC
 if test -n "$ac_ct_CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
   if test "x$ac_ct_CC" = x; then
@@ -3525,8 +3999,8 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     CC=$ac_ct_CC
@@ -3539,11 +4013,12 @@ if test -z "$CC"; then
           if test -n "$ac_tool_prefix"; then
     # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
 set dummy ${ac_tool_prefix}cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
 else
@@ -3551,11 +4026,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_CC="${ac_tool_prefix}cc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -3566,11 +4045,11 @@ fi
 fi
 CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -3579,11 +4058,12 @@ fi
 if test -z "$CC"; then
   # Extract the first word of "cc", so it can be a program name with args.
 set dummy cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
 else
@@ -3592,15 +4072,19 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+    if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
        ac_prog_rejected=yes
        continue
      fi
     ac_cv_prog_CC="cc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -3616,18 +4100,18 @@ if test $ac_prog_rejected = yes; then
     # However, it has the same basename, so the bogon will be chosen
     # first if we set CC to just the basename; use the full file name.
     shift
-    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+    ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@"
   fi
 fi
 fi
 fi
 CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -3638,11 +4122,12 @@ if test -z "$CC"; then
   do
     # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
 else
@@ -3650,11 +4135,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -3665,11 +4154,11 @@ fi
 fi
 CC=$ac_cv_prog_CC
 if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -3682,11 +4171,12 @@ if test -z "$CC"; then
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$ac_ct_CC"; then
   ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
 else
@@ -3694,11 +4184,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_CC="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -3709,11 +4203,11 @@ fi
 fi
 ac_ct_CC=$ac_cv_prog_ac_ct_CC
 if test -n "$ac_ct_CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -3725,34 +4219,138 @@ done
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+fi
+
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args.
+set dummy ${ac_tool_prefix}clang; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_CC+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="${ac_tool_prefix}clang"
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+printf "%s\n" "$CC" >&6; }
+else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "clang", so it can be a program name with args.
+set dummy clang; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_CC+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="clang"
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+printf "%s\n" "$ac_ct_CC" >&6; }
+else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     CC=$ac_ct_CC
   fi
+else
+  CC="$ac_cv_prog_CC"
 fi
 
 fi
 
 
-test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "no acceptable C compiler found in \$PATH
 See \`config.log' for more details" "$LINENO" 5; }
 
 # Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
+printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
 set X $ac_compile
 ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
+for ac_option in --version -v -V -qversion -version; do
   { { ac_try="$ac_compiler $ac_option >&5"
 case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
   (eval "$ac_compiler $ac_option >&5") 2>conftest.err
   ac_status=$?
   if test -s conftest.err; then
@@ -3762,7 +4360,7 @@ $as_echo "$ac_try_echo"; } >&5
     cat conftest.er1 >&5
   fi
   rm -f conftest.er1 conftest.err
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }
 done
 
@@ -3770,7 +4368,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
-main ()
+main (void)
 {
 
   ;
@@ -3782,9 +4380,9 @@ ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
 # Try to create an executable without -o first, disregard a.out.
 # It will help us diagnose broken compilers, and finding out an intuition
 # of exeext.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
-$as_echo_n "checking whether the C compiler works... " >&6; }
-ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
+printf %s "checking whether the C compiler works... " >&6; }
+ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
 
 # The possible output files:
 ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
@@ -3805,11 +4403,12 @@ case "(($ac_try" in
   *) ac_try_echo=$ac_try;;
 esac
 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
   (eval "$ac_link_default") 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then :
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+then :
   # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
 # So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
 # in a Makefile.  We should not override ac_cv_exeext if it was cached,
@@ -3826,7 +4425,7 @@ do
        # certainly right.
        break;;
     *.* )
-       if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+       if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no;
        then :; else
           ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
        fi
@@ -3842,44 +4441,46 @@ do
 done
 test "$ac_cv_exeext" = no && ac_cv_exeext=
 
-else
+else $as_nop
   ac_file=''
 fi
-if test -z "$ac_file"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-$as_echo "$as_me: failed program was:" >&5
+if test -z "$ac_file"
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+printf "%s\n" "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error 77 "C compiler cannot create executables
 See \`config.log' for more details" "$LINENO" 5; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
-$as_echo_n "checking for C compiler default output file name... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
-$as_echo "$ac_file" >&6; }
+else $as_nop
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
+printf %s "checking for C compiler default output file name... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+printf "%s\n" "$ac_file" >&6; }
 ac_exeext=$ac_cv_exeext
 
 rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
 ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
-$as_echo_n "checking for suffix of executables... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
+printf %s "checking for suffix of executables... " >&6; }
 if { { ac_try="$ac_link"
 case "(($ac_try" in
   *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
   *) ac_try_echo=$ac_try;;
 esac
 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then :
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+then :
   # If both `conftest.exe' and `conftest' are `present' (well, observable)
 # catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
 # work properly (i.e., refer to `conftest.exe'), while it won't with
@@ -3893,15 +4494,15 @@ for ac_file in conftest.exe conftest conftest.*; do
     * ) break;;
   esac
 done
-else
-  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+else $as_nop
+  { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "cannot compute suffix of executables: cannot compile and link
 See \`config.log' for more details" "$LINENO" 5; }
 fi
 rm -f conftest conftest$ac_cv_exeext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
-$as_echo "$ac_cv_exeext" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
+printf "%s\n" "$ac_cv_exeext" >&6; }
 
 rm -f conftest.$ac_ext
 EXEEXT=$ac_cv_exeext
@@ -3910,7 +4511,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdio.h>
 int
-main ()
+main (void)
 {
 FILE *f = fopen ("conftest.out", "w");
  return ferror (f) || fclose (f) != 0;
@@ -3922,8 +4523,8 @@ _ACEOF
 ac_clean_files="$ac_clean_files conftest.out"
 # Check that the compiler produces executables we can run.  If not, either
 # the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+printf %s "checking whether we are cross compiling... " >&6; }
 if test "$cross_compiling" != yes; then
   { { ac_try="$ac_link"
 case "(($ac_try" in
@@ -3931,10 +4532,10 @@ case "(($ac_try" in
   *) ac_try_echo=$ac_try;;
 esac
 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
   (eval "$ac_link") 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }
   if { ac_try='./conftest$ac_cv_exeext'
   { { case "(($ac_try" in
@@ -3942,39 +4543,40 @@ $as_echo "$ac_try_echo"; } >&5
   *) ac_try_echo=$ac_try;;
 esac
 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
   (eval "$ac_try") 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; }; then
     cross_compiling=no
   else
     if test "$cross_compiling" = maybe; then
        cross_compiling=yes
     else
-       { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run C compiled programs.
+       { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot run C compiled programs.
 If you meant to cross compile, use \`--host'.
 See \`config.log' for more details" "$LINENO" 5; }
     fi
   fi
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+printf "%s\n" "$cross_compiling" >&6; }
 
 rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
 ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
-$as_echo_n "checking for suffix of object files... " >&6; }
-if ${ac_cv_objext+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
+printf %s "checking for suffix of object files... " >&6; }
+if test ${ac_cv_objext+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
-main ()
+main (void)
 {
 
   ;
@@ -3988,11 +4590,12 @@ case "(($ac_try" in
   *) ac_try_echo=$ac_try;;
 esac
 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
+printf "%s\n" "$ac_try_echo"; } >&5
   (eval "$ac_compile") 2>&5
   ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then :
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }
+then :
   for ac_file in conftest.o conftest.obj conftest.*; do
   test -f "$ac_file" || continue;
   case $ac_file in
@@ -4001,31 +4604,32 @@ $as_echo "$ac_try_echo"; } >&5
        break;;
   esac
 done
-else
-  $as_echo "$as_me: failed program was:" >&5
+else $as_nop
+  printf "%s\n" "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "cannot compute suffix of object files: cannot compile
 See \`config.log' for more details" "$LINENO" 5; }
 fi
 rm -f conftest.$ac_cv_objext conftest.$ac_ext
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
-$as_echo "$ac_cv_objext" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
+printf "%s\n" "$ac_cv_objext" >&6; }
 OBJEXT=$ac_cv_objext
 ac_objext=$OBJEXT
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
-$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if ${ac_cv_c_compiler_gnu+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5
+printf %s "checking whether the compiler supports GNU C... " >&6; }
+if test ${ac_cv_c_compiler_gnu+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
-main ()
+main (void)
 {
 #ifndef __GNUC__
        choke me
@@ -4035,29 +4639,33 @@ main ()
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   ac_compiler_gnu=yes
-else
+else $as_nop
   ac_compiler_gnu=no
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 ac_cv_c_compiler_gnu=$ac_compiler_gnu
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
-$as_echo "$ac_cv_c_compiler_gnu" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
+printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; }
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
 if test $ac_compiler_gnu = yes; then
   GCC=yes
 else
   GCC=
 fi
-ac_test_CFLAGS=${CFLAGS+set}
+ac_test_CFLAGS=${CFLAGS+y}
 ac_save_CFLAGS=$CFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
-$as_echo_n "checking whether $CC accepts -g... " >&6; }
-if ${ac_cv_prog_cc_g+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
+printf %s "checking whether $CC accepts -g... " >&6; }
+if test ${ac_cv_prog_cc_g+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_save_c_werror_flag=$ac_c_werror_flag
    ac_c_werror_flag=yes
    ac_cv_prog_cc_g=no
@@ -4066,57 +4674,60 @@ else
 /* end confdefs.h.  */
 
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   ac_cv_prog_cc_g=yes
-else
+else $as_nop
   CFLAGS=""
       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
 
-else
+else $as_nop
   ac_c_werror_flag=$ac_save_c_werror_flag
         CFLAGS="-g"
         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   ac_cv_prog_cc_g=yes
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
    ac_c_werror_flag=$ac_save_c_werror_flag
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
-$as_echo "$ac_cv_prog_cc_g" >&6; }
-if test "$ac_test_CFLAGS" = set; then
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
+printf "%s\n" "$ac_cv_prog_cc_g" >&6; }
+if test $ac_test_CFLAGS; then
   CFLAGS=$ac_save_CFLAGS
 elif test $ac_cv_prog_cc_g = yes; then
   if test "$GCC" = yes; then
@@ -4131,94 +4742,144 @@ else
     CFLAGS=
   fi
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
-$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if ${ac_cv_prog_cc_c89+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_cv_prog_cc_c89=no
+ac_prog_cc_stdc=no
+if test x$ac_prog_cc_stdc = xno
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5
+printf %s "checking for $CC option to enable C11 features... " >&6; }
+if test ${ac_cv_prog_cc_c11+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  ac_cv_prog_cc_c11=no
 ac_save_CC=$CC
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#include <stdarg.h>
-#include <stdio.h>
-struct stat;
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
-     char **p;
-     int i;
-{
-  return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
-  char *s;
-  va_list v;
-  va_start (v,p);
-  s = g (p, va_arg (v,int));
-  va_end (v);
-  return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
-   function prototypes and stuff, but not '\xHH' hex character constants.
-   These don't provoke an error unfortunately, instead are silently treated
-   as 'x'.  The following induces an error, until -std is added to get
-   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
-   array size at least.  It's necessary to write '\x00'==0 to get something
-   that's true only with -std.  */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+$ac_c_conftest_c11_program
+_ACEOF
+for ac_arg in '' -std=gnu11
+do
+  CC="$ac_save_CC $ac_arg"
+  if ac_fn_c_try_compile "$LINENO"
+then :
+  ac_cv_prog_cc_c11=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+  test "x$ac_cv_prog_cc_c11" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+fi
 
-/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
-   inside strings and character constants.  */
-#define FOO(x) 'x'
-int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+if test "x$ac_cv_prog_cc_c11" = xno
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+  if test "x$ac_cv_prog_cc_c11" = x
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5
+printf "%s\n" "$ac_cv_prog_cc_c11" >&6; }
+     CC="$CC $ac_cv_prog_cc_c11"
+fi
+  ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11
+  ac_prog_cc_stdc=c11
+fi
+fi
+if test x$ac_prog_cc_stdc = xno
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5
+printf %s "checking for $CC option to enable C99 features... " >&6; }
+if test ${ac_cv_prog_cc_c99+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  ac_cv_prog_cc_c99=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_c_conftest_c99_program
+_ACEOF
+for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99=
+do
+  CC="$ac_save_CC $ac_arg"
+  if ac_fn_c_try_compile "$LINENO"
+then :
+  ac_cv_prog_cc_c99=$ac_arg
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam
+  test "x$ac_cv_prog_cc_c99" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+fi
 
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
-  ;
-  return 0;
-}
+if test "x$ac_cv_prog_cc_c99" = xno
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+  if test "x$ac_cv_prog_cc_c99" = x
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5
+printf "%s\n" "$ac_cv_prog_cc_c99" >&6; }
+     CC="$CC $ac_cv_prog_cc_c99"
+fi
+  ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99
+  ac_prog_cc_stdc=c99
+fi
+fi
+if test x$ac_prog_cc_stdc = xno
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5
+printf %s "checking for $CC option to enable C89 features... " >&6; }
+if test ${ac_cv_prog_cc_c89+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_c_conftest_c89_program
 _ACEOF
-for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
-       -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
 do
   CC="$ac_save_CC $ac_arg"
-  if ac_fn_c_try_compile "$LINENO"; then :
+  if ac_fn_c_try_compile "$LINENO"
+then :
   ac_cv_prog_cc_c89=$ac_arg
 fi
-rm -f core conftest.err conftest.$ac_objext
+rm -f core conftest.err conftest.$ac_objext conftest.beam
   test "x$ac_cv_prog_cc_c89" != "xno" && break
 done
 rm -f conftest.$ac_ext
 CC=$ac_save_CC
-
 fi
-# AC_CACHE_VAL
-case "x$ac_cv_prog_cc_c89" in
-  x)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
-  xno)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
-  *)
-    CC="$CC $ac_cv_prog_cc_c89"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
-$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
-esac
-if test "x$ac_cv_prog_cc_c89" != xno; then :
 
+if test "x$ac_cv_prog_cc_c89" = xno
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
+printf "%s\n" "unsupported" >&6; }
+else $as_nop
+  if test "x$ac_cv_prog_cc_c89" = x
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
+printf "%s\n" "none needed" >&6; }
+else $as_nop
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
+printf "%s\n" "$ac_cv_prog_cc_c89" >&6; }
+     CC="$CC $ac_cv_prog_cc_c89"
+fi
+  ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89
+  ac_prog_cc_stdc=c89
+fi
 fi
 
 ac_ext=c
@@ -4229,542 +4890,199 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
 if test -n "$want_auto_cflags"; then
-       AUTO_CFLAGS="-g ${GCC+-O2}"
-       AUTO_LDFLAGS="-g ${GCC+-O2}"
-       STYLE_CFLAGS="${GCC+-Wno-parentheses} ${GCC+-Wno-format-security}"
+       AUTO_CFLAGS="-g ${GCC:+-O2}"
+       AUTO_LDFLAGS="-g ${GCC:+-O2}"
+#      STYLE_CFLAGS="${GCC:+-Wno-parentheses} ${GCC:+-Wno-format-security} ${GCC:+-Wno-tautological-constant-out-of-range-compare}"
+       STYLE_CFLAGS="${GCC:+-Wno-parentheses} ${GCC:+-Wno-format-security}"
 else
        AUTO_CFLAGS= AUTO_LDFLAGS= STYLE_CFLAGS=
 fi
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing strerror" >&5
-$as_echo_n "checking for library containing strerror... " >&6; }
-if ${ac_cv_search_strerror+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_func_search_save_LIBS=$LIBS
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ac_header= ac_cache=
+for ac_item in $ac_header_c_list
+do
+  if test $ac_cache; then
+    ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default"
+    if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then
+      printf "%s\n" "#define $ac_item 1" >> confdefs.h
+    fi
+    ac_header= ac_cache=
+  elif test $ac_header; then
+    ac_cache=$ac_item
+  else
+    ac_header=$ac_item
+  fi
+done
+
+
+
+
+
+
+
+
+if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes
+then :
+
+printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h
+
+fi
+
+
+
+
+
+
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5
+printf %s "checking whether it is safe to define __EXTENSIONS__... " >&6; }
+if test ${ac_cv_safe_to_define___extensions__+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char strerror ();
+#         define __EXTENSIONS__ 1
+          $ac_includes_default
 int
-main ()
+main (void)
 {
-return strerror ();
+
   ;
   return 0;
 }
 _ACEOF
-for ac_lib in '' cposix; do
-  if test -z "$ac_lib"; then
-    ac_res="none required"
-  else
-    ac_res=-l$ac_lib
-    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
-  fi
-  if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_search_strerror=$ac_res
+if ac_fn_c_try_compile "$LINENO"
+then :
+  ac_cv_safe_to_define___extensions__=yes
+else $as_nop
+  ac_cv_safe_to_define___extensions__=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext
-  if ${ac_cv_search_strerror+:} false; then :
-  break
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-done
-if ${ac_cv_search_strerror+:} false; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5
+printf "%s\n" "$ac_cv_safe_to_define___extensions__" >&6; }
 
-else
-  ac_cv_search_strerror=no
-fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_strerror" >&5
-$as_echo "$ac_cv_search_strerror" >&6; }
-ac_res=$ac_cv_search_strerror
-if test "$ac_res" != no; then :
-  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether _XOPEN_SOURCE should be defined" >&5
+printf %s "checking whether _XOPEN_SOURCE should be defined... " >&6; }
+if test ${ac_cv_should_define__xopen_source+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  ac_cv_should_define__xopen_source=no
+    if test $ac_cv_header_wchar_h = yes
+then :
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
 
-fi
+          #include <wchar.h>
+          mbstate_t x;
+int
+main (void)
+{
 
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
-$as_echo_n "checking how to run the C preprocessor... " >&6; }
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
-  CPP=
-fi
-if test -z "$CPP"; then
-  if ${ac_cv_prog_CPP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-      # Double quotes because CPP needs to be expanded
-    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
-    do
-      ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
-  # Use a header file that comes with gcc, so configuring glibc
-  # with a fresh cross-compiler works.
-  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-  # <limits.h> exists even on freestanding compilers.
-  # On the NeXT, cc -E runs the code through the compiler's parser,
-  # not just through cpp. "Syntax error" is here to catch this case.
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-                    Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
-  # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-  # OK, works on sane cases.  Now check whether nonexistent headers
-  # can be detected and how.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-  # Broken: success on invalid input.
-continue
-else
-  # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
-  break
-fi
-
-    done
-    ac_cv_prog_CPP=$CPP
-
-fi
-  CPP=$ac_cv_prog_CPP
-else
-  ac_cv_prog_CPP=$CPP
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
-$as_echo "$CPP" >&6; }
-ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
-  # Use a header file that comes with gcc, so configuring glibc
-  # with a fresh cross-compiler works.
-  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-  # <limits.h> exists even on freestanding compilers.
-  # On the NeXT, cc -E runs the code through the compiler's parser,
-  # not just through cpp. "Syntax error" is here to catch this case.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-                    Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
-  # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-  # OK, works on sane cases.  Now check whether nonexistent headers
-  # can be detected and how.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-  # Broken: success on invalid input.
-continue
-else
-  # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
-
-else
-  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
-$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
-if ${ac_cv_path_GREP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -z "$GREP"; then
-  ac_path_GREP_found=false
-  # Loop through the user's path and test for each of PROGNAME-LIST
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_prog in grep ggrep; do
-    for ac_exec_ext in '' $ac_executable_extensions; do
-      ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
-      as_fn_executable_p "$ac_path_GREP" || continue
-# Check for GNU ac_path_GREP and select it if it is found.
-  # Check for GNU $ac_path_GREP
-case `"$ac_path_GREP" --version 2>&1` in
-*GNU*)
-  ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
-*)
-  ac_count=0
-  $as_echo_n 0123456789 >"conftest.in"
-  while :
-  do
-    cat "conftest.in" "conftest.in" >"conftest.tmp"
-    mv "conftest.tmp" "conftest.in"
-    cp "conftest.in" "conftest.nl"
-    $as_echo 'GREP' >> "conftest.nl"
-    "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
-    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
-    as_fn_arith $ac_count + 1 && ac_count=$as_val
-    if test $ac_count -gt ${ac_path_GREP_max-0}; then
-      # Best one so far, save it but keep looking for a better one
-      ac_cv_path_GREP="$ac_path_GREP"
-      ac_path_GREP_max=$ac_count
-    fi
-    # 10*(2^10) chars as input seems more than enough
-    test $ac_count -gt 10 && break
-  done
-  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
-      $ac_path_GREP_found && break 3
-    done
-  done
-  done
-IFS=$as_save_IFS
-  if test -z "$ac_cv_path_GREP"; then
-    as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
-  fi
-else
-  ac_cv_path_GREP=$GREP
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
-$as_echo "$ac_cv_path_GREP" >&6; }
- GREP="$ac_cv_path_GREP"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
-$as_echo_n "checking for egrep... " >&6; }
-if ${ac_cv_path_EGREP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
-   then ac_cv_path_EGREP="$GREP -E"
-   else
-     if test -z "$EGREP"; then
-  ac_path_EGREP_found=false
-  # Loop through the user's path and test for each of PROGNAME-LIST
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_prog in egrep; do
-    for ac_exec_ext in '' $ac_executable_extensions; do
-      ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
-      as_fn_executable_p "$ac_path_EGREP" || continue
-# Check for GNU ac_path_EGREP and select it if it is found.
-  # Check for GNU $ac_path_EGREP
-case `"$ac_path_EGREP" --version 2>&1` in
-*GNU*)
-  ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
-*)
-  ac_count=0
-  $as_echo_n 0123456789 >"conftest.in"
-  while :
-  do
-    cat "conftest.in" "conftest.in" >"conftest.tmp"
-    mv "conftest.tmp" "conftest.in"
-    cp "conftest.in" "conftest.nl"
-    $as_echo 'EGREP' >> "conftest.nl"
-    "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
-    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
-    as_fn_arith $ac_count + 1 && ac_count=$as_val
-    if test $ac_count -gt ${ac_path_EGREP_max-0}; then
-      # Best one so far, save it but keep looking for a better one
-      ac_cv_path_EGREP="$ac_path_EGREP"
-      ac_path_EGREP_max=$ac_count
-    fi
-    # 10*(2^10) chars as input seems more than enough
-    test $ac_count -gt 10 && break
-  done
-  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
-      $ac_path_EGREP_found && break 3
-    done
-  done
-  done
-IFS=$as_save_IFS
-  if test -z "$ac_cv_path_EGREP"; then
-    as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
-  fi
-else
-  ac_cv_path_EGREP=$EGREP
-fi
-
-   fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
-$as_echo "$ac_cv_path_EGREP" >&6; }
- EGREP="$ac_cv_path_EGREP"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
-$as_echo_n "checking for ANSI C header files... " >&6; }
-if ${ac_cv_header_stdc+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
 
+            #define _XOPEN_SOURCE 500
+            #include <wchar.h>
+            mbstate_t x;
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_header_stdc=yes
-else
-  ac_cv_header_stdc=no
+if ac_fn_c_try_compile "$LINENO"
+then :
+  ac_cv_should_define__xopen_source=yes
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-if test $ac_cv_header_stdc = yes; then
-  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <string.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "memchr" >/dev/null 2>&1; then :
-
-else
-  ac_cv_header_stdc=no
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-rm -f conftest*
-
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-
-if test $ac_cv_header_stdc = yes; then
-  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdlib.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "free" >/dev/null 2>&1; then :
-
-else
-  ac_cv_header_stdc=no
 fi
-rm -f conftest*
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_should_define__xopen_source" >&5
+printf "%s\n" "$ac_cv_should_define__xopen_source" >&6; }
 
-fi
+  printf "%s\n" "#define _ALL_SOURCE 1" >>confdefs.h
 
-if test $ac_cv_header_stdc = yes; then
-  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
-  if test "$cross_compiling" = yes; then :
-  :
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <ctype.h>
-#include <stdlib.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) \
-                  (('a' <= (c) && (c) <= 'i') \
-                    || ('j' <= (c) && (c) <= 'r') \
-                    || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
+  printf "%s\n" "#define _DARWIN_C_SOURCE 1" >>confdefs.h
 
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int
-main ()
-{
-  int i;
-  for (i = 0; i < 256; i++)
-    if (XOR (islower (i), ISLOWER (i))
-       || toupper (i) != TOUPPER (i))
-      return 2;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-
-else
-  ac_cv_header_stdc=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
-$as_echo "$ac_cv_header_stdc" >&6; }
-if test $ac_cv_header_stdc = yes; then
-
-$as_echo "#define STDC_HEADERS 1" >>confdefs.h
-
-fi
-
-# On IRIX 5.3, sys/types and inttypes.h are conflicting.
-for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
-                 inttypes.h stdint.h unistd.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
-"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
+  printf "%s\n" "#define _GNU_SOURCE 1" >>confdefs.h
 
-fi
+  printf "%s\n" "#define _HPUX_ALT_XOPEN_SOCKET_API 1" >>confdefs.h
 
-done
+  printf "%s\n" "#define _NETBSD_SOURCE 1" >>confdefs.h
 
+  printf "%s\n" "#define _OPENBSD_SOURCE 1" >>confdefs.h
 
+  printf "%s\n" "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
 
-  ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default"
-if test "x$ac_cv_header_minix_config_h" = xyes; then :
-  MINIX=yes
-else
-  MINIX=
-fi
+  printf "%s\n" "#define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1" >>confdefs.h
 
+  printf "%s\n" "#define __STDC_WANT_IEC_60559_BFP_EXT__ 1" >>confdefs.h
 
-  if test "$MINIX" = yes; then
+  printf "%s\n" "#define __STDC_WANT_IEC_60559_DFP_EXT__ 1" >>confdefs.h
 
-$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h
+  printf "%s\n" "#define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1" >>confdefs.h
 
+  printf "%s\n" "#define __STDC_WANT_IEC_60559_TYPES_EXT__ 1" >>confdefs.h
 
-$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h
+  printf "%s\n" "#define __STDC_WANT_LIB_EXT2__ 1" >>confdefs.h
 
+  printf "%s\n" "#define __STDC_WANT_MATH_SPEC_FUNCS__ 1" >>confdefs.h
 
-$as_echo "#define _MINIX 1" >>confdefs.h
-
-  fi
+  printf "%s\n" "#define _TANDEM_SOURCE 1" >>confdefs.h
 
+  if test $ac_cv_header_minix_config_h = yes
+then :
+  MINIX=yes
+    printf "%s\n" "#define _MINIX 1" >>confdefs.h
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5
-$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; }
-if ${ac_cv_safe_to_define___extensions__+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
+    printf "%s\n" "#define _POSIX_SOURCE 1" >>confdefs.h
 
-#         define __EXTENSIONS__ 1
-          $ac_includes_default
-int
-main ()
-{
+    printf "%s\n" "#define _POSIX_1_SOURCE 2" >>confdefs.h
 
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_safe_to_define___extensions__=yes
-else
-  ac_cv_safe_to_define___extensions__=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else $as_nop
+  MINIX=
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5
-$as_echo "$ac_cv_safe_to_define___extensions__" >&6; }
-  test $ac_cv_safe_to_define___extensions__ = yes &&
-    $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h
-
-  $as_echo "#define _ALL_SOURCE 1" >>confdefs.h
-
-  $as_echo "#define _GNU_SOURCE 1" >>confdefs.h
-
-  $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
-
-  $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h
-
+  if test $ac_cv_safe_to_define___extensions__ = yes
+then :
+  printf "%s\n" "#define __EXTENSIONS__ 1" >>confdefs.h
 
+fi
+  if test $ac_cv_should_define__xopen_source = yes
+then :
+  printf "%s\n" "#define _XOPEN_SOURCE 500" >>confdefs.h
 
+fi
 
 # Check whether --enable-largefile was given.
-if test "${enable_largefile+set}" = set; then :
+if test ${enable_largefile+y}
+then :
   enableval=$enable_largefile;
 fi
 
 if test "$enable_largefile" != no; then
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5
-$as_echo_n "checking for special C compiler options needed for large files... " >&6; }
-if ${ac_cv_sys_largefile_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5
+printf %s "checking for special C compiler options needed for large files... " >&6; }
+if test ${ac_cv_sys_largefile_CC+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_cv_sys_largefile_CC=no
      if test "$GCC" != yes; then
        ac_save_CC=$CC
@@ -4778,44 +5096,47 @@ else
     We can't simply define LARGE_OFF_T to be 9223372036854775807,
     since some C++ compilers masquerading as C compilers
     incorrectly reject 9223372036854775807.  */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31))
   int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
                       && LARGE_OFF_T % 2147483647 == 1)
                      ? 1 : -1];
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-        if ac_fn_c_try_compile "$LINENO"; then :
+        if ac_fn_c_try_compile "$LINENO"
+then :
   break
 fi
-rm -f core conftest.err conftest.$ac_objext
+rm -f core conftest.err conftest.$ac_objext conftest.beam
         CC="$CC -n32"
-        if ac_fn_c_try_compile "$LINENO"; then :
+        if ac_fn_c_try_compile "$LINENO"
+then :
   ac_cv_sys_largefile_CC=' -n32'; break
 fi
-rm -f core conftest.err conftest.$ac_objext
+rm -f core conftest.err conftest.$ac_objext conftest.beam
         break
        done
        CC=$ac_save_CC
        rm -f conftest.$ac_ext
     fi
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5
-$as_echo "$ac_cv_sys_largefile_CC" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5
+printf "%s\n" "$ac_cv_sys_largefile_CC" >&6; }
   if test "$ac_cv_sys_largefile_CC" != no; then
     CC=$CC$ac_cv_sys_largefile_CC
   fi
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5
-$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; }
-if ${ac_cv_sys_file_offset_bits+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5
+printf %s "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; }
+if test ${ac_cv_sys_file_offset_bits+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   while :; do
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
@@ -4824,22 +5145,23 @@ else
     We can't simply define LARGE_OFF_T to be 9223372036854775807,
     since some C++ compilers masquerading as C compilers
     incorrectly reject 9223372036854775807.  */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31))
   int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
                       && LARGE_OFF_T % 2147483647 == 1)
                      ? 1 : -1];
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   ac_cv_sys_file_offset_bits=no; break
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #define _FILE_OFFSET_BITS 64
@@ -4848,43 +5170,43 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
     We can't simply define LARGE_OFF_T to be 9223372036854775807,
     since some C++ compilers masquerading as C compilers
     incorrectly reject 9223372036854775807.  */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31))
   int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
                       && LARGE_OFF_T % 2147483647 == 1)
                      ? 1 : -1];
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   ac_cv_sys_file_offset_bits=64; break
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
   ac_cv_sys_file_offset_bits=unknown
   break
 done
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5
-$as_echo "$ac_cv_sys_file_offset_bits" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5
+printf "%s\n" "$ac_cv_sys_file_offset_bits" >&6; }
 case $ac_cv_sys_file_offset_bits in #(
   no | unknown) ;;
   *)
-cat >>confdefs.h <<_ACEOF
-#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits
-_ACEOF
+printf "%s\n" "#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits" >>confdefs.h
 ;;
 esac
 rm -rf conftest*
   if test $ac_cv_sys_file_offset_bits = unknown; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5
-$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; }
-if ${ac_cv_sys_large_files+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5
+printf %s "checking for _LARGE_FILES value needed for large files... " >&6; }
+if test ${ac_cv_sys_large_files+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   while :; do
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
@@ -4893,22 +5215,23 @@ else
     We can't simply define LARGE_OFF_T to be 9223372036854775807,
     since some C++ compilers masquerading as C compilers
     incorrectly reject 9223372036854775807.  */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31))
   int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
                       && LARGE_OFF_T % 2147483647 == 1)
                      ? 1 : -1];
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   ac_cv_sys_large_files=no; break
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #define _LARGE_FILES 1
@@ -4917,40 +5240,37 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
     We can't simply define LARGE_OFF_T to be 9223372036854775807,
     since some C++ compilers masquerading as C compilers
     incorrectly reject 9223372036854775807.  */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+#define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31))
   int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
                       && LARGE_OFF_T % 2147483647 == 1)
                      ? 1 : -1];
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   ac_cv_sys_large_files=1; break
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
   ac_cv_sys_large_files=unknown
   break
 done
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5
-$as_echo "$ac_cv_sys_large_files" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5
+printf "%s\n" "$ac_cv_sys_large_files" >&6; }
 case $ac_cv_sys_large_files in #(
   no | unknown) ;;
   *)
-cat >>confdefs.h <<_ACEOF
-#define _LARGE_FILES $ac_cv_sys_large_files
-_ACEOF
+printf "%s\n" "#define _LARGE_FILES $ac_cv_sys_large_files" >>confdefs.h
 ;;
 esac
 rm -rf conftest*
   fi
-
-
 fi
 
 
@@ -4997,7 +5317,7 @@ CFLAGS=${CFLAGS-"$AUTO_CFLAGS"}
 if test "$opt_profiling" = "yes"; then
        PROFILE_FLAGS=-pg
        case "$host_os" in
-       solaris2*|linux*)       ;;
+       solaris2*|linux*|darwin*)       ;;
        *)              opt_static_link=yes ;;
        esac
        DEBUG= MALLOC_DEBUG=
@@ -5010,7 +5330,7 @@ if test "$opt_static_link" = yes; then
        prefer_static=yes
        prefer_shared=no
        # if we're using gcc, add `-static' to LDFLAGS, except on Solaris >= 2
-       if test -n "$GCC" || test "$ac_cv_c_compiler_gnu" = "yes"; then
+       if test "$GCC" = "yes"; then
                STATIC_LD="-static"
                case "$host_os" in
                solaris2*|linux*)       ;;
@@ -5032,9 +5352,12 @@ if test "X$cross_compiling" = "Xno"; then
        fi
        # CFLAGS set above to default value if not passed in environment
        if test -n "$want_auto_cflags" ; then
-               CFLAGS_FOR_BUILD="${CFLAGS} ${STYLE_CFLAGS}"
+               CFLAGS_FOR_BUILD="${CFLAGS}"
+               BASE_CFLAGS_FOR_BUILD="${CFLAGS}"
        else
+               # passed in environment
                CFLAGS_FOR_BUILD=${CFLAGS-'$(CFLAGS)'}
+               BASE_CFLAGS_FOR_BUILD=${CFLAGS-'$(CFLAGS)'}
        fi
        LIBS_FOR_BUILD=${LIBS_FOR_BUILD-'$(LIBS)'}
 else
@@ -5042,6 +5365,7 @@ else
        CPPFLAGS_FOR_BUILD=${CPPFLAGS_FOR_BUILD-""}
        LDFLAGS_FOR_BUILD=${LDFLAGS_FOR_BUILD-""}
        CFLAGS_FOR_BUILD=${CFLAGS_FOR_BUILD="-g"}
+       BASE_CFLAGS_FOR_BUILD=${BASE_CFLAGS_FOR_BUILD="-g"}
        LIBS_FOR_BUILD=${LIBS_FOR_BUILD-""}
 fi
 
 
 
 
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
+printf %s "checking how to run the C preprocessor... " >&6; }
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+  CPP=
+fi
+if test -z "$CPP"; then
+  if test ${ac_cv_prog_CPP+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+      # Double quotes because $CC needs to be expanded
+    for CPP in "$CC -E" "$CC -E -traditional-cpp" cpp /lib/cpp
+    do
+      ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <limits.h>
+                    Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"
+then :
+
+else $as_nop
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"
+then :
+  # Broken: success on invalid input.
+continue
+else $as_nop
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok
+then :
+  break
+fi
+
+    done
+    ac_cv_prog_CPP=$CPP
+
+fi
+  CPP=$ac_cv_prog_CPP
+else
+  ac_cv_prog_CPP=$CPP
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
+printf "%s\n" "$CPP" >&6; }
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <limits.h>
+                    Syntax error
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"
+then :
+
+else $as_nop
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"
+then :
+  # Broken: success on invalid input.
+continue
+else $as_nop
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.i conftest.err conftest.$ac_ext
+if $ac_preproc_ok
+then :
+
+else $as_nop
+  { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details" "$LINENO" 5; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
+printf %s "checking for grep that handles long lines and -e... " >&6; }
+if test ${ac_cv_path_GREP+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if test -z "$GREP"; then
+  ac_path_GREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
+    for ac_prog in grep ggrep
+   do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_GREP="$as_dir$ac_prog$ac_exec_ext"
+      as_fn_executable_p "$ac_path_GREP" || continue
+# Check for GNU ac_path_GREP and select it if it is found.
+  # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+  ac_count=0
+  printf %s 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    printf "%s\n" 'GREP' >> "conftest.nl"
+    "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_GREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_GREP="$ac_path_GREP"
+      ac_path_GREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_GREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_GREP"; then
+    as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
+else
+  ac_cv_path_GREP=$GREP
+fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
+printf "%s\n" "$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+printf %s "checking for egrep... " >&6; }
+if test ${ac_cv_path_EGREP+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+   then ac_cv_path_EGREP="$GREP -E"
+   else
+     if test -z "$EGREP"; then
+  ac_path_EGREP_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
+    for ac_prog in egrep
+   do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_EGREP="$as_dir$ac_prog$ac_exec_ext"
+      as_fn_executable_p "$ac_path_EGREP" || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
+  # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+  ac_count=0
+  printf %s 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    printf "%s\n" 'EGREP' >> "conftest.nl"
+    "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_EGREP="$ac_path_EGREP"
+      ac_path_EGREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_EGREP_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_EGREP"; then
+    as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+  fi
+else
+  ac_cv_path_EGREP=$EGREP
+fi
+
+   fi
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
+printf "%s\n" "$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
 if test $ac_cv_c_compiler_gnu = yes; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC needs -traditional" >&5
-$as_echo_n "checking whether $CC needs -traditional... " >&6; }
-if ${ac_cv_prog_gcc_traditional+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC needs -traditional" >&5
+printf %s "checking whether $CC needs -traditional... " >&6; }
+if test ${ac_cv_prog_gcc_traditional+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
     ac_pattern="Autoconf.*'x'"
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
@@ -5069,12 +5671,13 @@ else
 Autoconf TIOCGETP
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "$ac_pattern" >/dev/null 2>&1; then :
+  $EGREP "$ac_pattern" >/dev/null 2>&1
+then :
   ac_cv_prog_gcc_traditional=yes
-else
+else $as_nop
   ac_cv_prog_gcc_traditional=no
 fi
-rm -f conftest*
+rm -rf conftest*
 
 
   if test $ac_cv_prog_gcc_traditional = no; then
@@ -5084,15 +5687,16 @@ rm -f conftest*
 Autoconf TCGETA
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "$ac_pattern" >/dev/null 2>&1; then :
+  $EGREP "$ac_pattern" >/dev/null 2>&1
+then :
   ac_cv_prog_gcc_traditional=yes
 fi
-rm -f conftest*
+rm -rf conftest*
 
   fi
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_gcc_traditional" >&5
-$as_echo "$ac_cv_prog_gcc_traditional" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_gcc_traditional" >&5
+printf "%s\n" "$ac_cv_prog_gcc_traditional" >&6; }
   if test $ac_cv_prog_gcc_traditional = yes; then
     CC="$CC -traditional"
   fi
@@ -5110,22 +5714,25 @@ then
 if test "X$bash_cv_termcap_lib" = "X"; then
 _bash_needmsg=yes
 else
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which library has the termcap functions" >&5
-$as_echo_n "checking which library has the termcap functions... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which library has the termcap functions" >&5
+printf %s "checking which library has the termcap functions... " >&6; }
 _bash_needmsg=
 fi
-if ${bash_cv_termcap_lib+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+if test ${bash_cv_termcap_lib+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_fn_c_check_func "$LINENO" "tgetent" "ac_cv_func_tgetent"
-if test "x$ac_cv_func_tgetent" = xyes; then :
+if test "x$ac_cv_func_tgetent" = xyes
+then :
   bash_cv_termcap_lib=libc
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tgetent in -ltermcap" >&5
-$as_echo_n "checking for tgetent in -ltermcap... " >&6; }
-if ${ac_cv_lib_termcap_tgetent+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+else $as_nop
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tgetent in -ltermcap" >&5
+printf %s "checking for tgetent in -ltermcap... " >&6; }
+if test ${ac_cv_lib_termcap_tgetent+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-ltermcap  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -5134,37 +5741,37 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char tgetent ();
 int
-main ()
+main (void)
 {
 return tgetent ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_termcap_tgetent=yes
-else
+else $as_nop
   ac_cv_lib_termcap_tgetent=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_termcap_tgetent" >&5
-$as_echo "$ac_cv_lib_termcap_tgetent" >&6; }
-if test "x$ac_cv_lib_termcap_tgetent" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_termcap_tgetent" >&5
+printf "%s\n" "$ac_cv_lib_termcap_tgetent" >&6; }
+if test "x$ac_cv_lib_termcap_tgetent" = xyes
+then :
   bash_cv_termcap_lib=libtermcap
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tgetent in -ltinfo" >&5
-$as_echo_n "checking for tgetent in -ltinfo... " >&6; }
-if ${ac_cv_lib_tinfo_tgetent+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+else $as_nop
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tgetent in -ltinfo" >&5
+printf %s "checking for tgetent in -ltinfo... " >&6; }
+if test ${ac_cv_lib_tinfo_tgetent+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-ltinfo  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -5173,37 +5780,37 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char tgetent ();
 int
-main ()
+main (void)
 {
 return tgetent ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_tinfo_tgetent=yes
-else
+else $as_nop
   ac_cv_lib_tinfo_tgetent=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_tinfo_tgetent" >&5
-$as_echo "$ac_cv_lib_tinfo_tgetent" >&6; }
-if test "x$ac_cv_lib_tinfo_tgetent" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_tinfo_tgetent" >&5
+printf "%s\n" "$ac_cv_lib_tinfo_tgetent" >&6; }
+if test "x$ac_cv_lib_tinfo_tgetent" = xyes
+then :
   bash_cv_termcap_lib=libtinfo
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tgetent in -lcurses" >&5
-$as_echo_n "checking for tgetent in -lcurses... " >&6; }
-if ${ac_cv_lib_curses_tgetent+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+else $as_nop
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tgetent in -lcurses" >&5
+printf %s "checking for tgetent in -lcurses... " >&6; }
+if test ${ac_cv_lib_curses_tgetent+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lcurses  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -5212,37 +5819,37 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char tgetent ();
 int
-main ()
+main (void)
 {
 return tgetent ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_curses_tgetent=yes
-else
+else $as_nop
   ac_cv_lib_curses_tgetent=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_curses_tgetent" >&5
-$as_echo "$ac_cv_lib_curses_tgetent" >&6; }
-if test "x$ac_cv_lib_curses_tgetent" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_curses_tgetent" >&5
+printf "%s\n" "$ac_cv_lib_curses_tgetent" >&6; }
+if test "x$ac_cv_lib_curses_tgetent" = xyes
+then :
   bash_cv_termcap_lib=libcurses
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tgetent in -lncurses" >&5
-$as_echo_n "checking for tgetent in -lncurses... " >&6; }
-if ${ac_cv_lib_ncurses_tgetent+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+else $as_nop
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tgetent in -lncurses" >&5
+printf %s "checking for tgetent in -lncurses... " >&6; }
+if test ${ac_cv_lib_ncurses_tgetent+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lncurses  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -5251,37 +5858,37 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char tgetent ();
 int
-main ()
+main (void)
 {
 return tgetent ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_ncurses_tgetent=yes
-else
+else $as_nop
   ac_cv_lib_ncurses_tgetent=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ncurses_tgetent" >&5
-$as_echo "$ac_cv_lib_ncurses_tgetent" >&6; }
-if test "x$ac_cv_lib_ncurses_tgetent" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ncurses_tgetent" >&5
+printf "%s\n" "$ac_cv_lib_ncurses_tgetent" >&6; }
+if test "x$ac_cv_lib_ncurses_tgetent" = xyes
+then :
   bash_cv_termcap_lib=libncurses
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tgetent in -lncursesw" >&5
-$as_echo_n "checking for tgetent in -lncursesw... " >&6; }
-if ${ac_cv_lib_ncursesw_tgetent+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+else $as_nop
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tgetent in -lncursesw" >&5
+printf %s "checking for tgetent in -lncursesw... " >&6; }
+if test ${ac_cv_lib_ncursesw_tgetent+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lncursesw  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -5290,32 +5897,31 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char tgetent ();
 int
-main ()
+main (void)
 {
 return tgetent ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_ncursesw_tgetent=yes
-else
+else $as_nop
   ac_cv_lib_ncursesw_tgetent=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ncursesw_tgetent" >&5
-$as_echo "$ac_cv_lib_ncursesw_tgetent" >&6; }
-if test "x$ac_cv_lib_ncursesw_tgetent" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ncursesw_tgetent" >&5
+printf "%s\n" "$ac_cv_lib_ncursesw_tgetent" >&6; }
+if test "x$ac_cv_lib_ncursesw_tgetent" = xyes
+then :
   bash_cv_termcap_lib=libncursesw
-else
+else $as_nop
   bash_cv_termcap_lib=gnutermcap
 fi
 
@@ -5332,11 +5938,11 @@ fi
 fi
 
 if test "X$_bash_needmsg" = "Xyes"; then
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which library has the termcap functions" >&5
-$as_echo_n "checking which library has the termcap functions... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which library has the termcap functions" >&5
+printf %s "checking which library has the termcap functions... " >&6; }
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: using $bash_cv_termcap_lib" >&5
-$as_echo "using $bash_cv_termcap_lib" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: using $bash_cv_termcap_lib" >&5
+printf "%s\n" "using $bash_cv_termcap_lib" >&6; }
 if test $bash_cv_termcap_lib = gnutermcap && test -z "$prefer_curses"; then
 LDFLAGS="$LDFLAGS -L./lib/termcap"
 TERMCAP_LIB="./lib/termcap/libtermcap.a"
@@ -5354,15 +5960,16 @@ elif test $bash_cv_termcap_lib = libc; then
 TERMCAP_LIB=
 TERMCAP_DEP=
 else
-TERMCAP_LIB=-lcurses
+# we assume ncurses is installed somewhere the linker can find it
+TERMCAP_LIB=-lncurses
 TERMCAP_DEP=
 fi
 
 
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking version of installed readline library" >&5
-$as_echo_n "checking version of installed readline library... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking version of installed readline library" >&5
+printf %s "checking version of installed readline library... " >&6; }
 
 # What a pain in the ass this is.
 
@@ -5386,12 +5993,15 @@ LIBS="$LIBS -lreadline ${TERMCAP_LIB}"
 CFLAGS="$CFLAGS -I${ac_cv_rl_includedir}"
 LDFLAGS="$LDFLAGS -L${ac_cv_rl_libdir}"
 
-if ${ac_cv_rl_version+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
+if test ${ac_cv_rl_version+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if test "$cross_compiling" = yes
+then :
   ac_cv_rl_version='8.0'
-else
+
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -5417,9 +6027,10 @@ main()
 }
 
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
   ac_cv_rl_version=`cat conftest.rlv`
-else
+else $as_nop
   ac_cv_rl_version='0.0'
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
@@ -5463,31 +6074,25 @@ RL_VERSION="0x${_RL_MAJOR}${_RL_MINOR}"
 # Readline versions greater than 4.2 have these defines in readline.h
 
 if test $ac_cv_rl_version = '0.0' ; then
-       { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Could not test version of installed readline library." >&5
-$as_echo "$as_me: WARNING: Could not test version of installed readline library." >&2;}
+       { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Could not test version of installed readline library." >&5
+printf "%s\n" "$as_me: WARNING: Could not test version of installed readline library." >&2;}
 elif test $RL_MAJOR -gt 4 || { test $RL_MAJOR = 4 && test $RL_MINOR -gt 2 ; } ; then
        # set these for use by the caller
        RL_PREFIX=$ac_cv_rl_prefix
        RL_LIBDIR=$ac_cv_rl_libdir
        RL_INCLUDEDIR=$ac_cv_rl_includedir
-       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_rl_version" >&5
-$as_echo "$ac_cv_rl_version" >&6; }
+       { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_rl_version" >&5
+printf "%s\n" "$ac_cv_rl_version" >&6; }
 else
 
 
-cat >>confdefs.h <<_ACEOF
-#define RL_READLINE_VERSION $RL_VERSION
-_ACEOF
+printf "%s\n" "#define RL_READLINE_VERSION $RL_VERSION" >>confdefs.h
 
 
-cat >>confdefs.h <<_ACEOF
-#define RL_VERSION_MAJOR $RL_MAJOR
-_ACEOF
+printf "%s\n" "#define RL_VERSION_MAJOR $RL_MAJOR" >>confdefs.h
 
 
-cat >>confdefs.h <<_ACEOF
-#define RL_VERSION_MINOR $RL_MINOR
-_ACEOF
+printf "%s\n" "#define RL_VERSION_MINOR $RL_MINOR" >>confdefs.h
 
 
 
@@ -5499,8 +6104,8 @@ RL_PREFIX=$ac_cv_rl_prefix
 RL_LIBDIR=$ac_cv_rl_libdir
 RL_INCLUDEDIR=$ac_cv_rl_includedir
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_rl_version" >&5
-$as_echo "$ac_cv_rl_version" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_rl_version" >&5
+printf "%s\n" "$ac_cv_rl_version" >&6; }
 
 fi
 
@@ -5508,17 +6113,17 @@ fi
        case "$ac_cv_rl_version" in
        8*|9*)  ;;
        *)      opt_with_installed_readline=no
-               { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: installed readline library is too old to be linked with bash" >&5
-$as_echo "$as_me: WARNING: installed readline library is too old to be linked with bash" >&2;}
-               { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using private bash version" >&5
-$as_echo "$as_me: WARNING: using private bash version" >&2;}
+               { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: installed readline library is too old to be linked with bash" >&5
+printf "%s\n" "$as_me: WARNING: installed readline library is too old to be linked with bash" >&2;}
+               { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using private bash version" >&5
+printf "%s\n" "$as_me: WARNING: using private bash version" >&2;}
                ;;
        esac
 fi
 
 TILDE_LIB=-ltilde
 if test $opt_readline = yes; then
-       $as_echo "#define READLINE 1" >>confdefs.h
+       printf "%s\n" "#define READLINE 1" >>confdefs.h
 
        if test "$opt_with_installed_readline" != "no" ; then
                case "$opt_with_installed_readline" in
@@ -5554,11 +6159,11 @@ else
 fi
 if test $opt_history = yes || test $opt_bang_history = yes; then
        if test $opt_history = yes; then
-               $as_echo "#define HISTORY 1" >>confdefs.h
+               printf "%s\n" "#define HISTORY 1" >>confdefs.h
 
        fi
        if test $opt_bang_history = yes; then
-               $as_echo "#define BANG_HISTORY 1" >>confdefs.h
+               printf "%s\n" "#define BANG_HISTORY 1" >>confdefs.h
 
        fi
        if test "$opt_with_installed_readline" != "no"; then
@@ -5600,7 +6205,8 @@ fi
 
 
 
-# Find a good install program.  We prefer a C program (faster),
+
+  # Find a good install program.  We prefer a C program (faster),
 # so one script is as good as another.  But avoid the broken or
 # incompatible versions:
 # SysV /etc/install, /usr/sbin/install
@@ -5614,20 +6220,25 @@ fi
 # OS/2's system install, which has a completely different semantic
 # ./install, which can be erroneously created by make from ./install.sh.
 # Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+printf %s "checking for a BSD-compatible install... " >&6; }
 if test -z "$INSTALL"; then
-if ${ac_cv_path_install+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+if test ${ac_cv_path_install+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in #((
-  ./ | .// | /[cC]/* | \
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
+    # Account for fact that we put trailing slashes in our PATH walk.
+case $as_dir in #((
+  ./ | /[cC]/* | \
   /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
   ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
   /usr/ucb/* ) ;;
@@ -5637,13 +6248,13 @@ case $as_dir/ in #((
     # by default.
     for ac_prog in ginstall scoinst install; do
       for ac_exec_ext in '' $ac_executable_extensions; do
-       if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+       if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then
          if test $ac_prog = install &&
-           grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+           grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
            # AIX install.  It has an incompatible calling convention.
            :
          elif test $ac_prog = install &&
-           grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+           grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
            # program-specific install script used by HP pwplus--don't use.
            :
          else
@@ -5651,12 +6262,12 @@ case $as_dir/ in #((
            echo one > conftest.one
            echo two > conftest.two
            mkdir conftest.dir
-           if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+           if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" &&
              test -s conftest.one && test -s conftest.two &&
              test -s conftest.dir/conftest.one &&
              test -s conftest.dir/conftest.two
            then
-             ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+             ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c"
              break 3
            fi
          fi
@@ -5672,7 +6283,7 @@ IFS=$as_save_IFS
 rm -rf conftest.one conftest.two conftest.dir
 
 fi
-  if test "${ac_cv_path_install+set}" = set; then
+  if test ${ac_cv_path_install+y}; then
     INSTALL=$ac_cv_path_install
   else
     # As a last resort, use the slow shell script.  Don't cache a
@@ -5682,8 +6293,8 @@ fi
     INSTALL=$ac_install_sh
   fi
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+printf "%s\n" "$INSTALL" >&6; }
 
 # Use test -z because SunOS4 sh mishandles braces in ${var-val}.
 # It thinks the first close brace ends the variable substitution.
@@ -5696,11 +6307,12 @@ test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
 if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
 set dummy ${ac_tool_prefix}ar; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_AR+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_AR+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$AR"; then
   ac_cv_prog_AR="$AR" # Let the user override the test.
 else
@@ -5708,11 +6320,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_AR="${ac_tool_prefix}ar"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -5723,11 +6339,11 @@ fi
 fi
 AR=$ac_cv_prog_AR
 if test -n "$AR"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
-$as_echo "$AR" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+printf "%s\n" "$AR" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -5736,11 +6352,12 @@ if test -z "$ac_cv_prog_AR"; then
   ac_ct_AR=$AR
   # Extract the first word of "ar", so it can be a program name with args.
 set dummy ar; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_AR+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_AR+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$ac_ct_AR"; then
   ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
 else
@@ -5748,11 +6365,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_AR="ar"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -5763,11 +6384,11 @@ fi
 fi
 ac_ct_AR=$ac_cv_prog_ac_ct_AR
 if test -n "$ac_ct_AR"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
-$as_echo "$ac_ct_AR" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+printf "%s\n" "$ac_ct_AR" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
   if test "x$ac_ct_AR" = x; then
@@ -5775,8 +6396,8 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     AR=$ac_ct_AR
@@ -5789,11 +6410,12 @@ test -n "$ARFLAGS" || ARFLAGS="cr"
 if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
 set dummy ${ac_tool_prefix}ranlib; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_RANLIB+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_RANLIB+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$RANLIB"; then
   ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
 else
@@ -5801,11 +6423,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -5816,11 +6442,11 @@ fi
 fi
 RANLIB=$ac_cv_prog_RANLIB
 if test -n "$RANLIB"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
-$as_echo "$RANLIB" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+printf "%s\n" "$RANLIB" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -5829,11 +6455,12 @@ if test -z "$ac_cv_prog_RANLIB"; then
   ac_ct_RANLIB=$RANLIB
   # Extract the first word of "ranlib", so it can be a program name with args.
 set dummy ranlib; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_RANLIB+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$ac_ct_RANLIB"; then
   ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
 else
@@ -5841,11 +6468,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_RANLIB="ranlib"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -5856,11 +6487,11 @@ fi
 fi
 ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
 if test -n "$ac_ct_RANLIB"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
-$as_echo "$ac_ct_RANLIB" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
+printf "%s\n" "$ac_ct_RANLIB" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
   if test "x$ac_ct_RANLIB" = x; then
@@ -5868,8 +6499,8 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     RANLIB=$ac_ct_RANLIB
@@ -5882,11 +6513,12 @@ for ac_prog in 'bison -y' byacc
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_YACC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_YACC+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$YACC"; then
   ac_cv_prog_YACC="$YACC" # Let the user override the test.
 else
@@ -5894,11 +6526,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_YACC="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -5909,11 +6545,11 @@ fi
 fi
 YACC=$ac_cv_prog_YACC
 if test -n "$YACC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $YACC" >&5
-$as_echo "$YACC" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $YACC" >&5
+printf "%s\n" "$YACC" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -5921,13 +6557,14 @@ fi
 done
 test -n "$YACC" || YACC="yacc"
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
-$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
 set x ${MAKE-make}
-ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
-if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if eval test \${ac_cv_prog_make_${ac_make}_set+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat >conftest.make <<\_ACEOF
 SHELL = /bin/sh
 all:
@@ -5943,20 +6580,20 @@ esac
 rm -f conftest.make
 fi
 if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
   SET_MAKE=
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
   SET_MAKE="MAKE=${MAKE-make}"
 fi
 
 
 case "$ac_cv_prog_YACC" in
 *bison*)       ;;
-*)     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: bison not available; needed to process parse.y" >&5
-$as_echo "$as_me: WARNING: bison not available; needed to process parse.y" >&2;} ;;
+*)     { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: bison not available; needed to process parse.y" >&5
+printf "%s\n" "$as_me: WARNING: bison not available; needed to process parse.y" >&2;} ;;
 esac
 
 case "$host_os" in
@@ -6022,6 +6659,11 @@ fi
 
 
 
+
+
+
+
+
 # codeset.m4 serial 5 (gettext-0.18.2)
 
 
@@ -6326,19 +6968,17 @@ fi
 
 
 
-$as_echo "#define _GNU_SOURCE 1" >>confdefs.h
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5
-$as_echo_n "checking for an ANSI C-conforming const... " >&6; }
-if ${ac_cv_c_const+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5
+printf %s "checking for an ANSI C-conforming const... " >&6; }
+if test ${ac_cv_c_const+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
-main ()
+main (void)
 {
 
 #ifndef __cplusplus
@@ -6351,7 +6991,7 @@ main ()
   /* NEC SVR4.0.2 mips cc rejects this.  */
   struct point {int x, y;};
   static struct point const zero = {0,0};
-  /* AIX XL C 1.02.0.0 rejects this.
+  /* IBM XL C 1.02.0.0 rejects this.
      It does not let you subtract one const X* pointer from another in
      an arm of an if-expression whose if-part is not a constant
      expression */
@@ -6379,7 +7019,7 @@ main ()
     iptr p = 0;
     ++p;
   }
-  { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying
+  { /* IBM XL C 1.02.0.0 rejects this sort of thing, saying
        "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
     struct s { int j; const int *ap[3]; } bx;
     struct s *b = &bx; b->j = 5;
@@ -6395,47 +7035,50 @@ main ()
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   ac_cv_c_const=yes
-else
+else $as_nop
   ac_cv_c_const=no
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5
-$as_echo "$ac_cv_c_const" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5
+printf "%s\n" "$ac_cv_c_const" >&6; }
 if test $ac_cv_c_const = no; then
 
-$as_echo "#define const /**/" >>confdefs.h
+printf "%s\n" "#define const /**/" >>confdefs.h
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5
-$as_echo_n "checking for inline... " >&6; }
-if ${ac_cv_c_inline+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for inline" >&5
+printf %s "checking for inline... " >&6; }
+if test ${ac_cv_c_inline+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_cv_c_inline=no
 for ac_kw in inline __inline__ __inline; do
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #ifndef __cplusplus
 typedef int foo_t;
-static $ac_kw foo_t static_foo () {return 0; }
-$ac_kw foo_t foo () {return 0; }
+static $ac_kw foo_t static_foo (void) {return 0; }
+$ac_kw foo_t foo (void) {return 0; }
 #endif
 
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   ac_cv_c_inline=$ac_kw
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
   test "$ac_cv_c_inline" != no && break
 done
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5
-$as_echo "$ac_cv_c_inline" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5
+printf "%s\n" "$ac_cv_c_inline" >&6; }
 
 case $ac_cv_c_inline in
   inline | yes) ;;
@@ -6452,11 +7095,12 @@ _ACEOF
     ;;
 esac
 
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5
-$as_echo_n "checking whether byte ordering is bigendian... " >&6; }
-if ${ac_cv_c_bigendian+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5
+printf %s "checking whether byte ordering is bigendian... " >&6; }
+if test ${ac_cv_c_bigendian+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_cv_c_bigendian=unknown
     # See if we're dealing with a universal compiler.
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -6467,7 +7111,8 @@ else
             typedef int dummy;
 
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
 
        # Check for potential -arch flags.  It is not universal unless
        # there are at least two -arch flags with different values.
@@ -6491,7 +7136,7 @@ if ac_fn_c_try_compile "$LINENO"; then :
         fi
        done
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
     if test $ac_cv_c_bigendian = unknown; then
       # See if sys/param.h defines the BYTE_ORDER macro.
       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -6500,7 +7145,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
             #include <sys/param.h>
 
 int
-main ()
+main (void)
 {
 #if ! (defined BYTE_ORDER && defined BIG_ENDIAN \
                     && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \
@@ -6512,7 +7157,8 @@ main ()
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   # It does; now see whether it defined to BIG_ENDIAN or not.
         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
@@ -6520,7 +7166,7 @@ if ac_fn_c_try_compile "$LINENO"; then :
                #include <sys/param.h>
 
 int
-main ()
+main (void)
 {
 #if BYTE_ORDER != BIG_ENDIAN
                 not big endian
@@ -6530,14 +7176,15 @@ main ()
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   ac_cv_c_bigendian=yes
-else
+else $as_nop
   ac_cv_c_bigendian=no
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
     fi
     if test $ac_cv_c_bigendian = unknown; then
       # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris).
@@ -6546,7 +7193,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 #include <limits.h>
 
 int
-main ()
+main (void)
 {
 #if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN)
              bogus endian macros
@@ -6556,14 +7203,15 @@ main ()
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   # It does; now see whether it defined to _BIG_ENDIAN or not.
         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <limits.h>
 
 int
-main ()
+main (void)
 {
 #ifndef _BIG_ENDIAN
                 not big endian
@@ -6573,31 +7221,33 @@ main ()
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   ac_cv_c_bigendian=yes
-else
+else $as_nop
   ac_cv_c_bigendian=no
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
     fi
     if test $ac_cv_c_bigendian = unknown; then
       # Compile a test program.
-      if test "$cross_compiling" = yes; then :
+      if test "$cross_compiling" = yes
+then :
   # Try to guess by grepping values from an object file.
         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-short int ascii_mm[] =
+unsigned short int ascii_mm[] =
                  { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
-               short int ascii_ii[] =
+               unsigned short int ascii_ii[] =
                  { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
                int use_ascii (int i) {
                  return ascii_mm[i] + ascii_ii[i];
                }
-               short int ebcdic_ii[] =
+               unsigned short int ebcdic_ii[] =
                  { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
-               short int ebcdic_mm[] =
+               unsigned short int ebcdic_mm[] =
                  { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
                int use_ebcdic (int i) {
                  return ebcdic_mm[i] + ebcdic_ii[i];
@@ -6605,14 +7255,15 @@ short int ascii_mm[] =
                extern int foo;
 
 int
-main ()
+main (void)
 {
 return use_ascii (foo) == use_ebcdic (foo);
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then
              ac_cv_c_bigendian=yes
            fi
@@ -6625,13 +7276,13 @@ if ac_fn_c_try_compile "$LINENO"; then :
              fi
            fi
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-else
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $ac_includes_default
 int
-main ()
+main (void)
 {
 
             /* Are we little or big endian?  From Harbison&Steele.  */
@@ -6647,9 +7298,10 @@ main ()
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
   ac_cv_c_bigendian=no
-else
+else $as_nop
   ac_cv_c_bigendian=yes
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
@@ -6658,17 +7310,17 @@ fi
 
     fi
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5
-$as_echo "$ac_cv_c_bigendian" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5
+printf "%s\n" "$ac_cv_c_bigendian" >&6; }
  case $ac_cv_c_bigendian in #(
    yes)
-     $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h
+     printf "%s\n" "#define WORDS_BIGENDIAN 1" >>confdefs.h
 ;; #(
    no)
       ;; #(
    universal)
 
-$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h
+printf "%s\n" "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h
 
      ;; #(
    *)
@@ -6676,11 +7328,12 @@ $as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h
  presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;;
  esac
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for preprocessor stringizing operator" >&5
-$as_echo_n "checking for preprocessor stringizing operator... " >&6; }
-if ${ac_cv_c_stringize+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for preprocessor stringizing operator" >&5
+printf %s "checking for preprocessor stringizing operator... " >&6; }
+if test ${ac_cv_c_stringize+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #define x(y) #y
@@ -6688,53 +7341,43 @@ else
 char *s = x(teststring);
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "#teststring" >/dev/null 2>&1; then :
+  $EGREP "#teststring" >/dev/null 2>&1
+then :
   ac_cv_c_stringize=no
-else
+else $as_nop
   ac_cv_c_stringize=yes
 fi
-rm -f conftest*
+rm -rf conftest*
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stringize" >&5
-$as_echo "$ac_cv_c_stringize" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stringize" >&5
+printf "%s\n" "$ac_cv_c_stringize" >&6; }
 if test $ac_cv_c_stringize = yes; then
 
-$as_echo "#define HAVE_STRINGIZE 1" >>confdefs.h
+printf "%s\n" "#define HAVE_STRINGIZE 1" >>confdefs.h
 
 fi
 
 
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long double with more range or precision than double" >&5
-$as_echo_n "checking for long double with more range or precision than double... " >&6; }
-if ${ac_cv_type_long_double_wider+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for long double" >&5
+printf %s "checking for long double... " >&6; }
+if test ${ac_cv_type_long_double+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if test "$GCC" = yes; then
+       ac_cv_type_long_double=yes
+     else
+       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#include <float.h>
-           long double const a[] =
-             {
-                0.0L, DBL_MIN, DBL_MAX, DBL_EPSILON,
-                LDBL_MIN, LDBL_MAX, LDBL_EPSILON
-             };
-           long double
-           f (long double x)
-           {
-              return ((x + (unsigned long int) 10) * (-1 / x) + a[0]
-                       + (x ? f (x) : 'c'));
-           }
-
+/* The Stardent Vistra knows sizeof (long double), but does
+                not support it.  */
+             long double foo = 0.0L;
 int
-main ()
+main (void)
 {
-static int test_array [1 - 2 * !((0 < ((DBL_MAX_EXP < LDBL_MAX_EXP)
-                  + (DBL_MANT_DIG < LDBL_MANT_DIG)
-                  - (LDBL_MAX_EXP < DBL_MAX_EXP)
-                  - (LDBL_MANT_DIG < DBL_MANT_DIG)))
-           && (int) LDBL_EPSILON == 0
-         )];
+static int test_array [1 - 2 * !(/* On Ultrix 4.3 cc, long double is 4 and double is 8.  */
+             sizeof (double) <= sizeof (long double))];
 test_array [0] = 0;
 return test_array [0];
 
@@ -6742,54 +7385,43 @@ return test_array [0];
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_type_long_double_wider=yes
-else
-  ac_cv_type_long_double_wider=no
+if ac_fn_c_try_compile "$LINENO"
+then :
+  ac_cv_type_long_double=yes
+else $as_nop
+  ac_cv_type_long_double=no
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+     fi
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_double_wider" >&5
-$as_echo "$ac_cv_type_long_double_wider" >&6; }
-  if test $ac_cv_type_long_double_wider = yes; then
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_double" >&5
+printf "%s\n" "$ac_cv_type_long_double" >&6; }
+  if test $ac_cv_type_long_double = yes; then
 
-$as_echo "#define HAVE_LONG_DOUBLE_WIDER 1" >>confdefs.h
+printf "%s\n" "#define HAVE_LONG_DOUBLE 1" >>confdefs.h
 
   fi
 
-    ac_cv_c_long_double=$ac_cv_type_long_double_wider
-    if test $ac_cv_c_long_double = yes; then
-
-$as_echo "#define HAVE_LONG_DOUBLE 1" >>confdefs.h
-
-    fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for function prototypes" >&5
-$as_echo_n "checking for function prototypes... " >&6; }
-if test "$ac_cv_prog_cc_c89" != no; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+if test "$ac_prog_cc_stdc" != no; then
 
-$as_echo "#define PROTOTYPES 1" >>confdefs.h
+printf "%s\n" "#define PROTOTYPES 1" >>confdefs.h
 
 
-$as_echo "#define __PROTOTYPES 1" >>confdefs.h
+printf "%s\n" "#define __PROTOTYPES 1" >>confdefs.h
 
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether char is unsigned" >&5
-$as_echo_n "checking whether char is unsigned... " >&6; }
-if ${ac_cv_c_char_unsigned+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether char is unsigned" >&5
+printf %s "checking whether char is unsigned... " >&6; }
+if test ${ac_cv_c_char_unsigned+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $ac_includes_default
 int
-main ()
+main (void)
 {
 static int test_array [1 - 2 * !(((char) -1) < 0)];
 test_array [0] = 0;
@@ -6799,30 +7431,32 @@ return test_array [0];
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   ac_cv_c_char_unsigned=no
-else
+else $as_nop
   ac_cv_c_char_unsigned=yes
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_char_unsigned" >&5
-$as_echo "$ac_cv_c_char_unsigned" >&6; }
-if test $ac_cv_c_char_unsigned = yes && test "$GCC" != yes; then
-  $as_echo "#define __CHAR_UNSIGNED__ 1" >>confdefs.h
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_char_unsigned" >&5
+printf "%s\n" "$ac_cv_c_char_unsigned" >&6; }
+if test $ac_cv_c_char_unsigned = yes; then
+  printf "%s\n" "#define __CHAR_UNSIGNED__ 1" >>confdefs.h
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working volatile" >&5
-$as_echo_n "checking for working volatile... " >&6; }
-if ${ac_cv_c_volatile+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working volatile" >&5
+printf %s "checking for working volatile... " >&6; }
+if test ${ac_cv_c_volatile+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
-main ()
+main (void)
 {
 
 volatile int x;
@@ -6832,87 +7466,98 @@ return !x && !y;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   ac_cv_c_volatile=yes
-else
+else $as_nop
   ac_cv_c_volatile=no
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_volatile" >&5
-$as_echo "$ac_cv_c_volatile" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_volatile" >&5
+printf "%s\n" "$ac_cv_c_volatile" >&6; }
 if test $ac_cv_c_volatile = no; then
 
-$as_echo "#define volatile /**/" >>confdefs.h
+printf "%s\n" "#define volatile /**/" >>confdefs.h
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C/C++ restrict keyword" >&5
-$as_echo_n "checking for C/C++ restrict keyword... " >&6; }
-if ${ac_cv_c_restrict+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C/C++ restrict keyword" >&5
+printf %s "checking for C/C++ restrict keyword... " >&6; }
+if test ${ac_cv_c_restrict+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_cv_c_restrict=no
-   # The order here caters to the fact that C++ does not require restrict.
-   for ac_kw in __restrict __restrict__ _Restrict restrict; do
+   # Put '__restrict__' first, to avoid problems with glibc and non-GCC; see:
+   # https://lists.gnu.org/archive/html/bug-autoconf/2016-02/msg00006.html
+   # Put 'restrict' last, because C++ lacks it.
+   for ac_kw in __restrict__ __restrict _Restrict restrict; do
      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-typedef int * int_ptr;
-       int foo (int_ptr $ac_kw ip) {
-       return ip[0];
-       }
+typedef int *int_ptr;
+          int foo (int_ptr $ac_kw ip) { return ip[0]; }
+          int bar (int [$ac_kw]); /* Catch GCC bug 14050.  */
+          int bar (int ip[$ac_kw]) { return ip[0]; }
+
 int
-main ()
+main (void)
 {
 int s[1];
-       int * $ac_kw t = s;
-       t[0] = 0;
-       return foo(t)
+          int *$ac_kw t = s;
+          t[0] = 0;
+          return foo (t) + bar (t);
+
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   ac_cv_c_restrict=$ac_kw
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
      test "$ac_cv_c_restrict" != no && break
    done
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_restrict" >&5
-$as_echo "$ac_cv_c_restrict" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_restrict" >&5
+printf "%s\n" "$ac_cv_c_restrict" >&6; }
 
  case $ac_cv_c_restrict in
    restrict) ;;
-   no) $as_echo "#define restrict /**/" >>confdefs.h
+   no) printf "%s\n" "#define restrict /**/" >>confdefs.h
  ;;
-   *)  cat >>confdefs.h <<_ACEOF
-#define restrict $ac_cv_c_restrict
-_ACEOF
+   *)  printf "%s\n" "#define restrict $ac_cv_c_restrict" >>confdefs.h
  ;;
  esac
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
-$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
+
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a race-free mkdir -p" >&5
+printf %s "checking for a race-free mkdir -p... " >&6; }
 if test -z "$MKDIR_P"; then
-  if ${ac_cv_path_mkdir+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  if test ${ac_cv_path_mkdir+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_prog in mkdir gmkdir; do
         for ac_exec_ext in '' $ac_executable_extensions; do
-          as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue
-          case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
-            'mkdir (GNU coreutils) '* | \
-            'mkdir (coreutils) '* | \
+          as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext" || continue
+          case `"$as_dir$ac_prog$ac_exec_ext" --version 2>&1` in #(
+            'mkdir ('*'coreutils) '* | \
+            'BusyBox '* | \
             'mkdir (fileutils) '4.1*)
-              ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
+              ac_cv_path_mkdir=$as_dir$ac_prog$ac_exec_ext
               break 3;;
           esac
         done
@@ -6923,7 +7568,7 @@ IFS=$as_save_IFS
 fi
 
   test -d ./--version && rmdir ./--version
-  if test "${ac_cv_path_mkdir+set}" = set; then
+  if test ${ac_cv_path_mkdir+y}; then
     MKDIR_P="$ac_cv_path_mkdir -p"
   else
     # As a last resort, use the slow shell script.  Don't cache a
@@ -6933,14 +7578,15 @@ fi
     MKDIR_P="$ac_install_sh -d"
   fi
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
-$as_echo "$MKDIR_P" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
+printf "%s\n" "$MKDIR_P" >&6; }
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
-$as_echo_n "checking for a sed that does not truncate output... " >&6; }
-if ${ac_cv_path_SED+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
+printf %s "checking for a sed that does not truncate output... " >&6; }
+if test ${ac_cv_path_SED+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
             ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
      for ac_i in 1 2 3 4 5 6 7; do
        ac_script="$ac_script$as_nl$ac_script"
@@ -6954,10 +7600,15 @@ else
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_prog in sed gsed; do
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
+    for ac_prog in sed gsed
+   do
     for ac_exec_ext in '' $ac_executable_extensions; do
-      ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
+      ac_path_SED="$as_dir$ac_prog$ac_exec_ext"
       as_fn_executable_p "$ac_path_SED" || continue
 # Check for GNU ac_path_SED and select it if it is found.
   # Check for GNU $ac_path_SED
@@ -6966,13 +7617,13 @@ case `"$ac_path_SED" --version 2>&1` in
   ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
 *)
   ac_count=0
-  $as_echo_n 0123456789 >"conftest.in"
+  printf %s 0123456789 >"conftest.in"
   while :
   do
     cat "conftest.in" "conftest.in" >"conftest.tmp"
     mv "conftest.tmp" "conftest.in"
     cp "conftest.in" "conftest.nl"
-    $as_echo '' >> "conftest.nl"
+    printf "%s\n" '' >> "conftest.nl"
     "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
     diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
     as_fn_arith $ac_count + 1 && ac_count=$as_val
@@ -7000,23 +7651,24 @@ else
 fi
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
-$as_echo "$ac_cv_path_SED" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
+printf "%s\n" "$ac_cv_path_SED" >&6; }
  SED="$ac_cv_path_SED"
   rm -f conftest.sed
 
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5
-$as_echo_n "checking whether NLS is requested... " >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5
+printf %s "checking whether NLS is requested... " >&6; }
     # Check whether --enable-nls was given.
-if test "${enable_nls+set}" = set; then :
+if test ${enable_nls+y}
+then :
   enableval=$enable_nls; USE_NLS=$enableval
-else
+else $as_nop
   USE_NLS=yes
 fi
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5
-$as_echo "$USE_NLS" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5
+printf "%s\n" "$USE_NLS" >&6; }
 
 
 
@@ -7055,11 +7707,12 @@ rm -f conf$$.file
 
 # Extract the first word of "msgfmt", so it can be a program name with args.
 set dummy msgfmt; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_MSGFMT+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_MSGFMT+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   case "$MSGFMT" in
   [\\/]* | ?:[\\/]*)
     ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path.
@@ -7087,20 +7740,21 @@ esac
 fi
 MSGFMT="$ac_cv_path_MSGFMT"
 if test "$MSGFMT" != ":"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5
-$as_echo "$MSGFMT" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5
+printf "%s\n" "$MSGFMT" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
   # Extract the first word of "gmsgfmt", so it can be a program name with args.
 set dummy gmsgfmt; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_GMSGFMT+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_GMSGFMT+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   case $GMSGFMT in
   [\\/]* | ?:[\\/]*)
   ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path.
@@ -7110,11 +7764,15 @@ else
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+    ac_cv_path_GMSGFMT="$as_dir$ac_word$ac_exec_ext"
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
@@ -7127,11 +7785,11 @@ esac
 fi
 GMSGFMT=$ac_cv_path_GMSGFMT
 if test -n "$GMSGFMT"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5
-$as_echo "$GMSGFMT" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5
+printf "%s\n" "$GMSGFMT" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -7177,11 +7835,12 @@ rm -f conf$$.file
 
 # Extract the first word of "xgettext", so it can be a program name with args.
 set dummy xgettext; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_XGETTEXT+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_XGETTEXT+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   case "$XGETTEXT" in
   [\\/]* | ?:[\\/]*)
     ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path.
@@ -7209,11 +7868,11 @@ esac
 fi
 XGETTEXT="$ac_cv_path_XGETTEXT"
 if test "$XGETTEXT" != ":"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5
-$as_echo "$XGETTEXT" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5
+printf "%s\n" "$XGETTEXT" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
     rm -f messages.po
@@ -7254,11 +7913,12 @@ rm -f conf$$.file
 
 # Extract the first word of "msgmerge", so it can be a program name with args.
 set dummy msgmerge; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_MSGMERGE+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_path_MSGMERGE+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   case "$MSGMERGE" in
   [\\/]* | ?:[\\/]*)
     ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path.
@@ -7285,11 +7945,11 @@ esac
 fi
 MSGMERGE="$ac_cv_path_MSGMERGE"
 if test "$MSGMERGE" != ":"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5
-$as_echo "$MSGMERGE" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5
+printf "%s\n" "$MSGMERGE" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -7300,11 +7960,12 @@ fi
 
 
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C Library 2 or newer" >&5
-$as_echo_n "checking whether we are using the GNU C Library 2 or newer... " >&6; }
-if ${ac_cv_gnu_library_2+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C Library 2 or newer" >&5
+printf %s "checking whether we are using the GNU C Library 2 or newer... " >&6; }
+if test ${ac_cv_gnu_library_2+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -7317,18 +7978,19 @@ else
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "Lucky GNU user" >/dev/null 2>&1; then :
+  $EGREP "Lucky GNU user" >/dev/null 2>&1
+then :
   ac_cv_gnu_library_2=yes
-else
+else $as_nop
   ac_cv_gnu_library_2=no
 fi
-rm -f conftest*
+rm -rf conftest*
 
 
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gnu_library_2" >&5
-$as_echo "$ac_cv_gnu_library_2" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gnu_library_2" >&5
+printf "%s\n" "$ac_cv_gnu_library_2" >&6; }
 
     GLIBC2="$ac_cv_gnu_library_2"
 
@@ -7338,40 +8000,43 @@ $as_echo "$ac_cv_gnu_library_2" >&6; }
   CFLAG_VISIBILITY=
   HAVE_VISIBILITY=0
   if test -n "$GCC"; then
-                { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the -Werror option is usable" >&5
-$as_echo_n "checking whether the -Werror option is usable... " >&6; }
-if ${gl_cv_cc_vis_werror+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the -Werror option is usable" >&5
+printf %s "checking whether the -Werror option is usable... " >&6; }
+if test ${gl_cv_cc_vis_werror+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   gl_save_CFLAGS="$CFLAGS"
        CFLAGS="$CFLAGS -Werror"
        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   gl_cv_cc_vis_werror=yes
-else
+else $as_nop
   gl_cv_cc_vis_werror=no
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
        CFLAGS="$gl_save_CFLAGS"
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_vis_werror" >&5
-$as_echo "$gl_cv_cc_vis_werror" >&6; }
-        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for simple visibility declarations" >&5
-$as_echo_n "checking for simple visibility declarations... " >&6; }
-if ${gl_cv_cc_visibility+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_vis_werror" >&5
+printf "%s\n" "$gl_cv_cc_vis_werror" >&6; }
+        { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for simple visibility declarations" >&5
+printf %s "checking for simple visibility declarations... " >&6; }
+if test ${gl_cv_cc_visibility+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   gl_save_CFLAGS="$CFLAGS"
        CFLAGS="$CFLAGS -fvisibility=hidden"
                                           if test $gl_cv_cc_vis_werror = yes; then
@@ -7386,24 +8051,25 @@ extern __attribute__((__visibility__("hidden"))) int hiddenvar;
               void dummyfunc (void) {}
 
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   gl_cv_cc_visibility=yes
-else
+else $as_nop
   gl_cv_cc_visibility=no
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
        CFLAGS="$gl_save_CFLAGS"
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_visibility" >&5
-$as_echo "$gl_cv_cc_visibility" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_visibility" >&5
+printf "%s\n" "$gl_cv_cc_visibility" >&6; }
     if test $gl_cv_cc_visibility = yes; then
       CFLAG_VISIBILITY="-fvisibility=hidden"
       HAVE_VISIBILITY=1
@@ -7412,69 +8078,67 @@ $as_echo "$gl_cv_cc_visibility" >&6; }
 
 
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_VISIBILITY $HAVE_VISIBILITY
-_ACEOF
+printf "%s\n" "#define HAVE_VISIBILITY $HAVE_VISIBILITY" >>confdefs.h
 
 
 ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
-if test "x$ac_cv_type_size_t" = xyes; then :
+if test "x$ac_cv_type_size_t" = xyes
+then :
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define size_t unsigned int
-_ACEOF
+printf "%s\n" "#define size_t unsigned int" >>confdefs.h
 
 fi
 
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint.h" >&5
-$as_echo_n "checking for stdint.h... " >&6; }
-if ${gl_cv_header_stdint_h+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for stdint.h" >&5
+printf %s "checking for stdint.h... " >&6; }
+if test ${gl_cv_header_stdint_h+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <sys/types.h>
             #include <stdint.h>
 int
-main ()
+main (void)
 {
 uintmax_t i = (uintmax_t) -1; return !i;
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   gl_cv_header_stdint_h=yes
-else
+else $as_nop
   gl_cv_header_stdint_h=no
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_stdint_h" >&5
-$as_echo "$gl_cv_header_stdint_h" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_stdint_h" >&5
+printf "%s\n" "$gl_cv_header_stdint_h" >&6; }
   if test $gl_cv_header_stdint_h = yes; then
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STDINT_H_WITH_UINTMAX 1
-_ACEOF
+printf "%s\n" "#define HAVE_STDINT_H_WITH_UINTMAX 1" >>confdefs.h
 
   fi
 
 # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
 # for constant arguments.  Useless!
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5
-$as_echo_n "checking for working alloca.h... " >&6; }
-if ${ac_cv_working_alloca_h+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5
+printf %s "checking for working alloca.h... " >&6; }
+if test ${ac_cv_working_alloca_h+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <alloca.h>
 int
-main ()
+main (void)
 {
 char *p = (char *) alloca (2 * sizeof (int));
                          if (p) return 0;
@@ -7482,52 +8146,52 @@ char *p = (char *) alloca (2 * sizeof (int));
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_working_alloca_h=yes
-else
+else $as_nop
   ac_cv_working_alloca_h=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5
-$as_echo "$ac_cv_working_alloca_h" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5
+printf "%s\n" "$ac_cv_working_alloca_h" >&6; }
 if test $ac_cv_working_alloca_h = yes; then
 
-$as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h
+printf "%s\n" "#define HAVE_ALLOCA_H 1" >>confdefs.h
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5
-$as_echo_n "checking for alloca... " >&6; }
-if ${ac_cv_func_alloca_works+:} false; then :
-  $as_echo_n "(cached) " >&6
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5
+printf %s "checking for alloca... " >&6; }
+if test ${ac_cv_func_alloca_works+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if test $ac_cv_working_alloca_h = yes; then
+  ac_cv_func_alloca_works=yes
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#ifdef __GNUC__
-# define alloca __builtin_alloca
-#else
-# ifdef _MSC_VER
+#include <stdlib.h>
+#include <stddef.h>
+#ifndef alloca
+# ifdef __GNUC__
+#  define alloca __builtin_alloca
+# elif defined _MSC_VER
 #  include <malloc.h>
 #  define alloca _alloca
 # else
-#  ifdef HAVE_ALLOCA_H
-#   include <alloca.h>
-#  else
-#   ifdef _AIX
- #pragma alloca
-#   else
-#    ifndef alloca /* predefined by HP cc +Olibcalls */
-void *alloca (size_t);
-#    endif
-#   endif
+#  ifdef  __cplusplus
+extern "C"
 #  endif
+void *alloca (size_t);
 # endif
 #endif
 
 int
-main ()
+main (void)
 {
 char *p = (char *) alloca (1);
                                    if (p) return 0;
@@ -7535,20 +8199,22 @@ char *p = (char *) alloca (1);
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_func_alloca_works=yes
-else
+else $as_nop
   ac_cv_func_alloca_works=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5
-$as_echo "$ac_cv_func_alloca_works" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5
+printf "%s\n" "$ac_cv_func_alloca_works" >&6; }
+fi
 
 if test $ac_cv_func_alloca_works = yes; then
 
-$as_echo "#define HAVE_ALLOCA 1" >>confdefs.h
+printf "%s\n" "#define HAVE_ALLOCA 1" >>confdefs.h
 
 else
   # The SVR3 libPW and SVR4 libucb both contain incompatible functions
@@ -7558,58 +8224,19 @@ else
 
 ALLOCA=\${LIBOBJDIR}alloca.$ac_objext
 
-$as_echo "#define C_ALLOCA 1" >>confdefs.h
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5
-$as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; }
-if ${ac_cv_os_cray+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#if defined CRAY && ! defined CRAY2
-webecray
-#else
-wenotbecray
-#endif
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "webecray" >/dev/null 2>&1; then :
-  ac_cv_os_cray=yes
-else
-  ac_cv_os_cray=no
-fi
-rm -f conftest*
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5
-$as_echo "$ac_cv_os_cray" >&6; }
-if test $ac_cv_os_cray = yes; then
-  for ac_func in _getb67 GETB67 getb67; do
-    as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-
-cat >>confdefs.h <<_ACEOF
-#define CRAY_STACKSEG_END $ac_func
-_ACEOF
-
-    break
-fi
+printf "%s\n" "#define C_ALLOCA 1" >>confdefs.h
 
-  done
-fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5
-$as_echo_n "checking stack direction for C alloca... " >&6; }
-if ${ac_cv_c_stack_direction+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5
+printf %s "checking stack direction for C alloca... " >&6; }
+if test ${ac_cv_c_stack_direction+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if test "$cross_compiling" = yes
+then :
   ac_cv_c_stack_direction=0
-else
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $ac_includes_default
@@ -7630,9 +8257,10 @@ main (int argc, char **argv)
   return find_stack_direction (0, argc + !argv + 20) < 0;
 }
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
   ac_cv_c_stack_direction=1
-else
+else $as_nop
   ac_cv_c_stack_direction=-1
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
@@ -7640,58 +8268,44 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
 fi
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5
-$as_echo "$ac_cv_c_stack_direction" >&6; }
-cat >>confdefs.h <<_ACEOF
-#define STACK_DIRECTION $ac_cv_c_stack_direction
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5
+printf "%s\n" "$ac_cv_c_stack_direction" >&6; }
+printf "%s\n" "#define STACK_DIRECTION $ac_cv_c_stack_direction" >>confdefs.h
 
 
 fi
 
 
-
-
-  for ac_header in $ac_header_list
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
-"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
+ac_func=
+for ac_item in $ac_func_c_list
+do
+  if test $ac_func; then
+    ac_fn_c_check_func "$LINENO" $ac_func ac_cv_func_$ac_func
+    if eval test \"x\$ac_cv_func_$ac_func\" = xyes; then
+      echo "#define $ac_item 1" >> confdefs.h
+    fi
+    ac_func=
+  else
+    ac_func=$ac_item
+  fi
 done
 
 
-
-
-
-
-
-
-for ac_func in getpagesize
-do :
-  ac_fn_c_check_func "$LINENO" "getpagesize" "ac_cv_func_getpagesize"
-if test "x$ac_cv_func_getpagesize" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_GETPAGESIZE 1
-_ACEOF
-
-fi
-done
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working mmap" >&5
-$as_echo_n "checking for working mmap... " >&6; }
-if ${ac_cv_func_mmap_fixed_mapped+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
-  ac_cv_func_mmap_fixed_mapped=no
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working mmap" >&5
+printf %s "checking for working mmap... " >&6; }
+if test ${ac_cv_func_mmap_fixed_mapped+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if test "$cross_compiling" = yes
+then :
+  case "$host_os" in # ((
+                         # Guess yes on platforms where we know the result.
+                 linux*) ac_cv_func_mmap_fixed_mapped=yes ;;
+                         # If we don't know, assume the worst.
+                 *)      ac_cv_func_mmap_fixed_mapped=no ;;
+               esac
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $ac_includes_default
@@ -7723,10 +8337,6 @@ $ac_includes_default
 #include <fcntl.h>
 #include <sys/mman.h>
 
-#if !defined STDC_HEADERS && !defined HAVE_STDLIB_H
-char *malloc ();
-#endif
-
 /* This mess was copied from the GNU getpagesize.h.  */
 #ifndef HAVE_GETPAGESIZE
 # ifdef _SC_PAGESIZE
@@ -7760,7 +8370,7 @@ char *malloc ();
 #endif /* no HAVE_GETPAGESIZE */
 
 int
-main ()
+main (void)
 {
   char *data, *data2, *data3;
   const char *cdata2;
@@ -7828,12 +8438,15 @@ main ()
     if (*(data + i) != *(data3 + i))
       return 14;
   close (fd);
+  free (data);
+  free (data3);
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
   ac_cv_func_mmap_fixed_mapped=yes
-else
+else $as_nop
   ac_cv_func_mmap_fixed_mapped=no
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
@@ -7841,22 +8454,23 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
 fi
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_fixed_mapped" >&5
-$as_echo "$ac_cv_func_mmap_fixed_mapped" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_fixed_mapped" >&5
+printf "%s\n" "$ac_cv_func_mmap_fixed_mapped" >&6; }
 if test $ac_cv_func_mmap_fixed_mapped = yes; then
 
-$as_echo "#define HAVE_MMAP 1" >>confdefs.h
+printf "%s\n" "#define HAVE_MMAP 1" >>confdefs.h
 
 fi
 rm -f conftest.mmap conftest.txt
 
 
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether integer division by zero raises SIGFPE" >&5
-$as_echo_n "checking whether integer division by zero raises SIGFPE... " >&6; }
-if ${gt_cv_int_divbyzero_sigfpe+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether integer division by zero raises SIGFPE" >&5
+printf %s "checking whether integer division by zero raises SIGFPE... " >&6; }
+if test ${gt_cv_int_divbyzero_sigfpe+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
 
       gt_cv_int_divbyzero_sigfpe=
       case "$host_os" in
@@ -7871,7 +8485,8 @@ else
           ;;
       esac
       if test -z "$gt_cv_int_divbyzero_sigfpe"; then
-        if test "$cross_compiling" = yes; then :
+        if test "$cross_compiling" = yes
+then :
 
             # Guess based on the CPU.
             case "$host_cpu" in
@@ -7881,7 +8496,7 @@ else
                 gt_cv_int_divbyzero_sigfpe="guessing no";;
             esac
 
-else
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -7918,9 +8533,10 @@ int main ()
 }
 
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
   gt_cv_int_divbyzero_sigfpe=yes
-else
+else $as_nop
   gt_cv_int_divbyzero_sigfpe=no
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
@@ -7930,24 +8546,23 @@ fi
       fi
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_int_divbyzero_sigfpe" >&5
-$as_echo "$gt_cv_int_divbyzero_sigfpe" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_int_divbyzero_sigfpe" >&5
+printf "%s\n" "$gt_cv_int_divbyzero_sigfpe" >&6; }
   case "$gt_cv_int_divbyzero_sigfpe" in
     *yes) value=1;;
     *) value=0;;
   esac
 
-cat >>confdefs.h <<_ACEOF
-#define INTDIV0_RAISES_SIGFPE $value
-_ACEOF
+printf "%s\n" "#define INTDIV0_RAISES_SIGFPE $value" >>confdefs.h
 
 
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inttypes.h" >&5
-$as_echo_n "checking for inttypes.h... " >&6; }
-if ${gl_cv_header_inttypes_h+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for inttypes.h" >&5
+printf %s "checking for inttypes.h... " >&6; }
+if test ${gl_cv_header_inttypes_h+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -7955,39 +8570,41 @@ else
 #include <inttypes.h>
 
 int
-main ()
+main (void)
 {
 uintmax_t i = (uintmax_t) -1; return !i;
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   gl_cv_header_inttypes_h=yes
-else
+else $as_nop
   gl_cv_header_inttypes_h=no
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_inttypes_h" >&5
-$as_echo "$gl_cv_header_inttypes_h" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_inttypes_h" >&5
+printf "%s\n" "$gl_cv_header_inttypes_h" >&6; }
   if test $gl_cv_header_inttypes_h = yes; then
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_INTTYPES_H_WITH_UINTMAX 1
-_ACEOF
+printf "%s\n" "#define HAVE_INTTYPES_H_WITH_UINTMAX 1" >>confdefs.h
 
   fi
 
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for unsigned long long int" >&5
-$as_echo_n "checking for unsigned long long int... " >&6; }
-if ${ac_cv_type_unsigned_long_long_int+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for unsigned long long int" >&5
+printf %s "checking for unsigned long long int... " >&6; }
+if test ${ac_cv_type_unsigned_long_long_int+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_cv_type_unsigned_long_long_int=yes
-     if test "x${ac_cv_prog_cc_c99-no}" = xno; then
-       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+     case $ac_prog_cc_stdc in
+       no | c89) ;;
+       *)
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
   /* For now, do not test the preprocessor; as of 2007 there are too many
@@ -8005,7 +8622,7 @@ else
                     ? 1 : -1)];
       int i = 63;
 int
-main ()
+main (void)
 {
 /* Test availability of runtime routines for shift and division.  */
       long long int llmax = 9223372036854775807ll;
@@ -8019,20 +8636,21 @@ main ()
 }
 
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
 
-else
+else $as_nop
   ac_cv_type_unsigned_long_long_int=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-     fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+    conftest$ac_exeext conftest.$ac_ext;;
+     esac
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_unsigned_long_long_int" >&5
-$as_echo "$ac_cv_type_unsigned_long_long_int" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_unsigned_long_long_int" >&5
+printf "%s\n" "$ac_cv_type_unsigned_long_long_int" >&6; }
   if test $ac_cv_type_unsigned_long_long_int = yes; then
 
-$as_echo "#define HAVE_UNSIGNED_LONG_LONG_INT 1" >>confdefs.h
+printf "%s\n" "#define HAVE_UNSIGNED_LONG_LONG_INT 1" >>confdefs.h
 
   fi
 
@@ -8045,35 +8663,29 @@ $as_echo "#define HAVE_UNSIGNED_LONG_LONG_INT 1" >>confdefs.h
       && ac_type='unsigned long long' \
       || ac_type='unsigned long'
 
-cat >>confdefs.h <<_ACEOF
-#define uintmax_t $ac_type
-_ACEOF
+printf "%s\n" "#define uintmax_t $ac_type" >>confdefs.h
 
   else
 
-$as_echo "#define HAVE_UINTMAX_T 1" >>confdefs.h
+printf "%s\n" "#define HAVE_UINTMAX_T 1" >>confdefs.h
 
   fi
 
 
-  for ac_header in inttypes.h
-do :
-  ac_fn_c_check_header_mongrel "$LINENO" "inttypes.h" "ac_cv_header_inttypes_h" "$ac_includes_default"
-if test "x$ac_cv_header_inttypes_h" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_INTTYPES_H 1
-_ACEOF
+  ac_fn_c_check_header_compile "$LINENO" "inttypes.h" "ac_cv_header_inttypes_h" "$ac_includes_default"
+if test "x$ac_cv_header_inttypes_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_INTTYPES_H 1" >>confdefs.h
 
 fi
 
-done
-
   if test $ac_cv_header_inttypes_h = yes; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the inttypes.h PRIxNN macros are broken" >&5
-$as_echo_n "checking whether the inttypes.h PRIxNN macros are broken... " >&6; }
-if ${gt_cv_inttypes_pri_broken+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the inttypes.h PRIxNN macros are broken" >&5
+printf %s "checking whether the inttypes.h PRIxNN macros are broken... " >&6; }
+if test ${gt_cv_inttypes_pri_broken+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
 
         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
@@ -8084,29 +8696,28 @@ char *p = PRId32;
 #endif
 
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   gt_cv_inttypes_pri_broken=no
-else
+else $as_nop
   gt_cv_inttypes_pri_broken=yes
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_inttypes_pri_broken" >&5
-$as_echo "$gt_cv_inttypes_pri_broken" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_inttypes_pri_broken" >&5
+printf "%s\n" "$gt_cv_inttypes_pri_broken" >&6; }
   fi
   if test "$gt_cv_inttypes_pri_broken" = yes; then
 
-cat >>confdefs.h <<_ACEOF
-#define PRI_MACROS_BROKEN 1
-_ACEOF
+printf "%s\n" "#define PRI_MACROS_BROKEN 1" >>confdefs.h
 
     PRI_MACROS_BROKEN=1
   else
@@ -8120,9 +8731,10 @@ _ACEOF
 
 
   # Check whether --enable-threads was given.
-if test "${enable_threads+set}" = set; then :
+if test ${enable_threads+y}
+then :
   enableval=$enable_threads; gl_use_threads=$enableval
-else
+else $as_nop
   if test -n "$gl_use_threads_default"; then
        gl_use_threads="$gl_use_threads_default"
      else
@@ -8157,7 +8769,7 @@ fi
     # need special flags to disable these optimizations. For example, the
     # definition of 'errno' in <errno.h>.
     case "$host_os" in
-      aix* | freebsd*) CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE" ;;
+      aix* | freebsd* | midnightbsd*) CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE" ;;
       solaris*) CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;;
     esac
   fi
@@ -8184,9 +8796,10 @@ fi
 
 
 # Check whether --with-gnu-ld was given.
-if test "${with_gnu_ld+set}" = set; then :
+if test ${with_gnu_ld+y}
+then :
   withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
-else
+else $as_nop
   with_gnu_ld=no
 fi
 
@@ -8204,25 +8817,26 @@ if test "${PATH_SEPARATOR+set}" != set; then
 fi
 
 if test -n "$LD"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld" >&5
-$as_echo_n "checking for ld... " >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld" >&5
+printf %s "checking for ld... " >&6; }
 elif test "$GCC" = yes; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
-$as_echo_n "checking for ld used by $CC... " >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
+printf %s "checking for ld used by $CC... " >&6; }
 elif test "$with_gnu_ld" = yes; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
-$as_echo_n "checking for GNU ld... " >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
+printf %s "checking for GNU ld... " >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
-$as_echo_n "checking for non-GNU ld... " >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
+printf %s "checking for non-GNU ld... " >&6; }
 fi
 if test -n "$LD"; then
   # Let the user override the test with a path.
   :
 else
-  if ${acl_cv_path_LD+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  if test ${acl_cv_path_LD+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
 
     acl_cv_path_LD= # Final result of this test
     ac_prog=ld # Program to search in $PATH
@@ -8291,7 +8905,8 @@ else
                #endif
 
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   # The compiler produces 64-bit code. Add option '-b64' so that the
            # linker groks 64-bit object files.
            case "$acl_cv_path_LD " in
@@ -8300,7 +8915,7 @@ if ac_fn_c_try_compile "$LINENO"; then :
            esac
 
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
         ;;
       sparc64-*-netbsd*)
         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -8312,9 +8927,10 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
                #endif
 
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
 
-else
+else $as_nop
   # The compiler produces 32-bit code. Add option '-m elf32_sparc'
            # so that the linker groks 32-bit object files.
            case "$acl_cv_path_LD " in
@@ -8323,7 +8939,7 @@ else
            esac
 
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
         ;;
     esac
 
@@ -8332,18 +8948,19 @@ fi
   LD="$acl_cv_path_LD"
 fi
 if test -n "$LD"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
-$as_echo "$LD" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
+printf "%s\n" "$LD" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
   as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
-$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
-if ${acl_cv_prog_gnu_ld+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
+printf %s "checking if the linker ($LD) is GNU ld... " >&6; }
+if test ${acl_cv_prog_gnu_ld+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   # I'd rather use --version here, but apparently some GNU lds only accept -v.
 case `$LD -v 2>&1 </dev/null` in
 *GNU* | *'with BFD'*)
@@ -8354,18 +8971,21 @@ case `$LD -v 2>&1 </dev/null` in
   ;;
 esac
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_prog_gnu_ld" >&5
-$as_echo "$acl_cv_prog_gnu_ld" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $acl_cv_prog_gnu_ld" >&5
+printf "%s\n" "$acl_cv_prog_gnu_ld" >&6; }
 with_gnu_ld=$acl_cv_prog_gnu_ld
 
 
 
 
-                                                { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5
-$as_echo_n "checking for shared library run path origin... " >&6; }
-if ${acl_cv_rpath+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+
+
+                                                { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5
+printf %s "checking for shared library run path origin... " >&6; }
+if test ${acl_cv_rpath+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
 
     CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
     ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
@@ -8374,8 +8994,8 @@ else
     acl_cv_rpath=done
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5
-$as_echo "$acl_cv_rpath" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5
+printf "%s\n" "$acl_cv_rpath" >&6; }
   wl="$acl_cv_wl"
   acl_libext="$acl_cv_libext"
   acl_shlibext="$acl_cv_shlibext"
@@ -8386,20 +9006,22 @@ $as_echo "$acl_cv_rpath" >&6; }
   acl_hardcode_direct="$acl_cv_hardcode_direct"
   acl_hardcode_minus_L="$acl_cv_hardcode_minus_L"
     # Check whether --enable-rpath was given.
-if test "${enable_rpath+set}" = set; then :
+if test ${enable_rpath+y}
+then :
   enableval=$enable_rpath; :
-else
+else $as_nop
   enable_rpath=yes
 fi
 
 
 
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking 32-bit host C ABI" >&5
-$as_echo_n "checking 32-bit host C ABI... " >&6; }
-if ${gl_cv_host_cpu_c_abi_32bit+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking 32-bit host C ABI" >&5
+printf %s "checking 32-bit host C ABI... " >&6; }
+if test ${gl_cv_host_cpu_c_abi_32bit+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$gl_cv_host_cpu_c_abi"; then
        case "$gl_cv_host_cpu_c_abi" in
          i386 | x86_64-x32 | arm | armhf | arm64-ilp32 | hppa | ia64-ilp32 | mips | mipsn32 | powerpc | riscv*-ilp32* | s390 | sparc)
@@ -8433,12 +9055,13 @@ else
                   #endif
 
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   gl_cv_host_cpu_c_abi_32bit=no
-else
+else $as_nop
   gl_cv_host_cpu_c_abi_32bit=yes
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
            ;;
 
          arm* | aarch64 )
@@ -8457,12 +9080,13 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
                   #endif
 
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   gl_cv_host_cpu_c_abi_32bit=no
-else
+else $as_nop
   gl_cv_host_cpu_c_abi_32bit=yes
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
            ;;
 
          hppa1.0 | hppa1.1 | hppa2.0* | hppa64 )
@@ -8477,12 +9101,13 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
                   #endif
 
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   gl_cv_host_cpu_c_abi_32bit=no
-else
+else $as_nop
   gl_cv_host_cpu_c_abi_32bit=yes
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
            ;;
 
          ia64* )
@@ -8497,12 +9122,13 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
                   #endif
 
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   gl_cv_host_cpu_c_abi_32bit=yes
-else
+else $as_nop
   gl_cv_host_cpu_c_abi_32bit=no
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
            ;;
 
          mips* )
@@ -8517,12 +9143,13 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
                   #endif
 
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   gl_cv_host_cpu_c_abi_32bit=no
-else
+else $as_nop
   gl_cv_host_cpu_c_abi_32bit=yes
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
            ;;
 
          powerpc* )
@@ -8541,12 +9168,13 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
                   #endif
 
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   gl_cv_host_cpu_c_abi_32bit=no
-else
+else $as_nop
   gl_cv_host_cpu_c_abi_32bit=yes
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
            ;;
 
          rs6000 )
@@ -8565,12 +9193,13 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
                   #endif
 
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   gl_cv_host_cpu_c_abi_32bit=no
-else
+else $as_nop
   gl_cv_host_cpu_c_abi_32bit=yes
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
            ;;
 
          s390* )
@@ -8585,12 +9214,13 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
                   #endif
 
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   gl_cv_host_cpu_c_abi_32bit=no
-else
+else $as_nop
   gl_cv_host_cpu_c_abi_32bit=yes
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
            ;;
 
          sparc | sparc64 )
@@ -8605,12 +9235,13 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
                   #endif
 
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   gl_cv_host_cpu_c_abi_32bit=no
-else
+else $as_nop
   gl_cv_host_cpu_c_abi_32bit=yes
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
            ;;
 
          *)
@@ -8620,8 +9251,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
      fi
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_host_cpu_c_abi_32bit" >&5
-$as_echo "$gl_cv_host_cpu_c_abi_32bit" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_host_cpu_c_abi_32bit" >&5
+printf "%s\n" "$gl_cv_host_cpu_c_abi_32bit" >&6; }
 
   HOST_CPU_C_ABI_32BIT="$gl_cv_host_cpu_c_abi_32bit"
 
@@ -8631,11 +9262,12 @@ $as_echo "$gl_cv_host_cpu_c_abi_32bit" >&6; }
 
   case "$host_os" in
     solaris*)
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit host" >&5
-$as_echo_n "checking for 64-bit host... " >&6; }
-if ${gl_cv_solaris_64bit+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+      { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 64-bit host" >&5
+printf %s "checking for 64-bit host... " >&6; }
+if test ${gl_cv_solaris_64bit+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #ifdef _LP64
@@ -8645,23 +9277,25 @@ else
                 #endif
 
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   gl_cv_solaris_64bit=yes
-else
+else $as_nop
   gl_cv_solaris_64bit=no
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_solaris_64bit" >&5
-$as_echo "$gl_cv_solaris_64bit" >&6; };;
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_solaris_64bit" >&5
+printf "%s\n" "$gl_cv_solaris_64bit" >&6; };;
   esac
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the common suffixes of directories in the library search path" >&5
-$as_echo_n "checking for the common suffixes of directories in the library search path... " >&6; }
-if ${acl_cv_libdirstems+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for the common suffixes of directories in the library search path" >&5
+printf %s "checking for the common suffixes of directories in the library search path... " >&6; }
+if test ${acl_cv_libdirstems+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   acl_libdirstem=lib
      acl_libdirstem2=
      case "$host_os" in
@@ -8708,8 +9342,8 @@ else
      acl_cv_libdirstems="$acl_libdirstem,$acl_libdirstem2"
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_libdirstems" >&5
-$as_echo "$acl_cv_libdirstems" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $acl_cv_libdirstems" >&5
+printf "%s\n" "$acl_cv_libdirstems" >&6; }
   # Decompose acl_cv_libdirstems into acl_libdirstem and acl_libdirstem2.
   acl_libdirstem=`echo "$acl_cv_libdirstems" | sed -e 's/,.*//'`
   acl_libdirstem2=`echo "$acl_cv_libdirstems" | sed -e '/,/s/.*,//'`
@@ -8722,31 +9356,34 @@ $as_echo "$acl_cv_libdirstems" >&6; }
   LIBMULTITHREAD=
   LTLIBMULTITHREAD=
   if test "$gl_use_threads" != no; then
-        { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether imported symbols can be declared weak" >&5
-$as_echo_n "checking whether imported symbols can be declared weak... " >&6; }
-if ${gl_cv_have_weak+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+        { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether imported symbols can be declared weak" >&5
+printf %s "checking whether imported symbols can be declared weak... " >&6; }
+if test ${gl_cv_have_weak+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   gl_cv_have_weak=no
               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 extern void xyzzy ();
 #pragma weak xyzzy
 int
-main ()
+main (void)
 {
 xyzzy();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   gl_cv_have_weak=maybe
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
        if test $gl_cv_have_weak = maybe; then
-                           if test "$cross_compiling" = yes; then :
+                           if test "$cross_compiling" = yes
+then :
                           cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #ifdef __ELF__
@@ -8755,15 +9392,16 @@ rm -f core conftest.err conftest.$ac_objext \
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "Extensible Linking Format" >/dev/null 2>&1; then :
+  $EGREP "Extensible Linking Format" >/dev/null 2>&1
+then :
   gl_cv_have_weak="guessing yes"
-else
+else $as_nop
   gl_cv_have_weak="guessing no"
 fi
-rm -f conftest*
+rm -rf conftest*
 
 
-else
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -8774,9 +9412,10 @@ int main ()
   return (fputs == NULL);
 }
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
   gl_cv_have_weak=yes
-else
+else $as_nop
   gl_cv_have_weak=no
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
@@ -8789,19 +9428,19 @@ fi
        esac
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_weak" >&5
-$as_echo "$gl_cv_have_weak" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_weak" >&5
+printf "%s\n" "$gl_cv_have_weak" >&6; }
     if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then
       # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that
       # it groks <pthread.h>. It's added above, in gl_THREADLIB_EARLY_BODY.
-      ac_fn_c_check_header_mongrel "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default"
-if test "x$ac_cv_header_pthread_h" = xyes; then :
+      ac_fn_c_check_header_compile "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default"
+if test "x$ac_cv_header_pthread_h" = xyes
+then :
   gl_have_pthread_h=yes
-else
+else $as_nop
   gl_have_pthread_h=no
 fi
 
-
       if test "$gl_have_pthread_h" = yes; then
         # Other possible tests:
         #   -lpthreads (FSU threads, PCthreads)
@@ -8824,7 +9463,7 @@ fi
                  pthread_mutexattr_t ma;
 
 int
-main ()
+main (void)
 {
 pthread_mutex_lock (&m);
                  pthread_mutexattr_init (&ma);
@@ -8832,12 +9471,13 @@ pthread_mutex_lock (&m);
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   gl_have_pthread=yes
              LIBTHREAD=$gl_pthread LTLIBTHREAD=$gl_pthread
              LIBMULTITHREAD=$gl_pthread LTLIBMULTITHREAD=$gl_pthread
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
           LIBS=$save_LIBS
           test -n "$gl_have_pthread" && break
@@ -8848,11 +9488,12 @@ rm -f core conftest.err conftest.$ac_objext \
         if test -n "$gl_have_pthread" && test -z "$LIBTHREAD"; then
           # The program links fine without libpthread. But it may actually
           # need to link with libpthread in order to create multiple threads.
-          { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5
-$as_echo_n "checking for pthread_kill in -lpthread... " >&6; }
-if ${ac_cv_lib_pthread_pthread_kill+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+          { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5
+printf %s "checking for pthread_kill in -lpthread... " >&6; }
+if test ${ac_cv_lib_pthread_pthread_kill+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lpthread  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -8861,30 +9502,29 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char pthread_kill ();
 int
-main ()
+main (void)
 {
 return pthread_kill ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_pthread_pthread_kill=yes
-else
+else $as_nop
   ac_cv_lib_pthread_pthread_kill=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5
-$as_echo "$ac_cv_lib_pthread_pthread_kill" >&6; }
-if test "x$ac_cv_lib_pthread_pthread_kill" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5
+printf "%s\n" "$ac_cv_lib_pthread_pthread_kill" >&6; }
+if test "x$ac_cv_lib_pthread_pthread_kill" = xyes
+then :
   LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread
              # On Solaris and HP-UX, most pthread functions exist also in libc.
              # Therefore pthread_in_use() needs to actually try to create a
@@ -8895,7 +9535,7 @@ if test "x$ac_cv_lib_pthread_pthread_kill" = xyes; then :
              case "$host_os" in
                solaris | solaris2.1-9 | solaris2.1-9.* | hpux*)
 
-$as_echo "#define PTHREAD_IN_USE_DETECTION_HARD 1" >>confdefs.h
+printf "%s\n" "#define PTHREAD_IN_USE_DETECTION_HARD 1" >>confdefs.h
 
              esac
 
@@ -8903,11 +9543,12 @@ fi
 
         elif test -z "$gl_have_pthread"; then
           # Some library is needed. Try libpthread and libc_r.
-          { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5
-$as_echo_n "checking for pthread_kill in -lpthread... " >&6; }
-if ${ac_cv_lib_pthread_pthread_kill+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+          { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5
+printf %s "checking for pthread_kill in -lpthread... " >&6; }
+if test ${ac_cv_lib_pthread_pthread_kill+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lpthread  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -8916,30 +9557,29 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char pthread_kill ();
 int
-main ()
+main (void)
 {
 return pthread_kill ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_pthread_pthread_kill=yes
-else
+else $as_nop
   ac_cv_lib_pthread_pthread_kill=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5
-$as_echo "$ac_cv_lib_pthread_pthread_kill" >&6; }
-if test "x$ac_cv_lib_pthread_pthread_kill" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5
+printf "%s\n" "$ac_cv_lib_pthread_pthread_kill" >&6; }
+if test "x$ac_cv_lib_pthread_pthread_kill" = xyes
+then :
   gl_have_pthread=yes
              LIBTHREAD=-lpthread LTLIBTHREAD=-lpthread
              LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread
@@ -8947,11 +9587,12 @@ fi
 
           if test -z "$gl_have_pthread"; then
             # For FreeBSD 4.
-            { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lc_r" >&5
-$as_echo_n "checking for pthread_kill in -lc_r... " >&6; }
-if ${ac_cv_lib_c_r_pthread_kill+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+            { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lc_r" >&5
+printf %s "checking for pthread_kill in -lc_r... " >&6; }
+if test ${ac_cv_lib_c_r_pthread_kill+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lc_r  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -8960,30 +9601,29 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char pthread_kill ();
 int
-main ()
+main (void)
 {
 return pthread_kill ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_c_r_pthread_kill=yes
-else
+else $as_nop
   ac_cv_lib_c_r_pthread_kill=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_r_pthread_kill" >&5
-$as_echo "$ac_cv_lib_c_r_pthread_kill" >&6; }
-if test "x$ac_cv_lib_c_r_pthread_kill" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_r_pthread_kill" >&5
+printf "%s\n" "$ac_cv_lib_c_r_pthread_kill" >&6; }
+if test "x$ac_cv_lib_c_r_pthread_kill" = xyes
+then :
   gl_have_pthread=yes
                LIBTHREAD=-lc_r LTLIBTHREAD=-lc_r
                LIBMULTITHREAD=-lc_r LTLIBMULTITHREAD=-lc_r
@@ -8994,12 +9634,12 @@ fi
         if test -n "$gl_have_pthread"; then
           gl_threads_api=posix
 
-$as_echo "#define USE_POSIX_THREADS 1" >>confdefs.h
+printf "%s\n" "#define USE_POSIX_THREADS 1" >>confdefs.h
 
           if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then
             if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then
 
-$as_echo "#define USE_POSIX_THREADS_WEAK 1" >>confdefs.h
+printf "%s\n" "#define USE_POSIX_THREADS_WEAK 1" >>confdefs.h
 
               LIBTHREAD=
               LTLIBTHREAD=
@@ -9020,17 +9660,18 @@ $as_echo "#define USE_POSIX_THREADS_WEAK 1" >>confdefs.h
 #include <synch.h>
 
 int
-main ()
+main (void)
 {
 thr_self();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   gl_have_solaristhread=yes
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
         LIBS="$gl_save_LIBS"
         if test -n "$gl_have_solaristhread"; then
@@ -9040,11 +9681,11 @@ rm -f core conftest.err conftest.$ac_objext \
           LIBMULTITHREAD="$LIBTHREAD"
           LTLIBMULTITHREAD="$LTLIBTHREAD"
 
-$as_echo "#define USE_SOLARIS_THREADS 1" >>confdefs.h
+printf "%s\n" "#define USE_SOLARIS_THREADS 1" >>confdefs.h
 
           if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then
 
-$as_echo "#define USE_SOLARIS_THREADS_WEAK 1" >>confdefs.h
+printf "%s\n" "#define USE_SOLARIS_THREADS_WEAK 1" >>confdefs.h
 
             LIBTHREAD=
             LTLIBTHREAD=
@@ -9059,11 +9700,12 @@ $as_echo "#define USE_SOLARIS_THREADS_WEAK 1" >>confdefs.h
 
 
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libpth" >&5
-$as_echo_n "checking how to link with libpth... " >&6; }
-if ${ac_cv_libpth_libs+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to link with libpth" >&5
+printf %s "checking how to link with libpth... " >&6; }
+if test ${ac_cv_libpth_libs+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
 
 
 
@@ -9086,7 +9728,8 @@ else
 
 
 # Check whether --with-libpth-prefix was given.
-if test "${with_libpth_prefix+set}" = set; then :
+if test ${with_libpth_prefix+y}
+then :
   withval=$with_libpth_prefix;
     if test "X$withval" = "Xno"; then
       use_additional=no
@@ -9530,8 +10173,8 @@ fi
     ac_cv_libpth_prefix="$LIBPTH_PREFIX"
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_libpth_libs" >&5
-$as_echo "$ac_cv_libpth_libs" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_libpth_libs" >&5
+printf "%s\n" "$ac_cv_libpth_libs" >&6; }
   LIBPTH="$ac_cv_libpth_libs"
   LTLIBPTH="$ac_cv_libpth_ltlibs"
   INCPTH="$ac_cv_libpth_cppflags"
@@ -9573,17 +10216,18 @@ $as_echo "$ac_cv_libpth_libs" >&6; }
 /* end confdefs.h.  */
 #include <pth.h>
 int
-main ()
+main (void)
 {
 pth_self();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   gl_have_pth=yes
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
       LIBS="$gl_save_LIBS"
       if test -n "$gl_have_pth"; then
@@ -9593,12 +10237,12 @@ rm -f core conftest.err conftest.$ac_objext \
         LIBMULTITHREAD="$LIBTHREAD"
         LTLIBMULTITHREAD="$LTLIBTHREAD"
 
-$as_echo "#define USE_PTH_THREADS 1" >>confdefs.h
+printf "%s\n" "#define USE_PTH_THREADS 1" >>confdefs.h
 
         if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then
           if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then
 
-$as_echo "#define USE_PTH_THREADS_WEAK 1" >>confdefs.h
+printf "%s\n" "#define USE_PTH_THREADS_WEAK 1" >>confdefs.h
 
             LIBTHREAD=
             LTLIBTHREAD=
@@ -9618,17 +10262,17 @@ $as_echo "#define USE_PTH_THREADS_WEAK 1" >>confdefs.h
              }; then
             gl_threads_api=windows
 
-$as_echo "#define USE_WINDOWS_THREADS 1" >>confdefs.h
+printf "%s\n" "#define USE_WINDOWS_THREADS 1" >>confdefs.h
 
           fi
           ;;
       esac
     fi
   fi
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for multithread API to use" >&5
-$as_echo_n "checking for multithread API to use... " >&6; }
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_threads_api" >&5
-$as_echo "$gl_threads_api" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for multithread API to use" >&5
+printf %s "checking for multithread API to use... " >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_threads_api" >&5
+printf "%s\n" "$gl_threads_api" >&6; }
 
 
 
@@ -9646,26 +10290,29 @@ $as_echo "$gl_threads_api" >&6; }
     has_rwlock=false
     ac_fn_c_check_type "$LINENO" "pthread_rwlock_t" "ac_cv_type_pthread_rwlock_t" "#include <pthread.h>
 "
-if test "x$ac_cv_type_pthread_rwlock_t" = xyes; then :
+if test "x$ac_cv_type_pthread_rwlock_t" = xyes
+then :
   has_rwlock=true
 
-$as_echo "#define HAVE_PTHREAD_RWLOCK 1" >>confdefs.h
+printf "%s\n" "#define HAVE_PTHREAD_RWLOCK 1" >>confdefs.h
 
 fi
 
     if $has_rwlock; then
 
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthread_rwlock_rdlock prefers a writer to a reader" >&5
-$as_echo_n "checking whether pthread_rwlock_rdlock prefers a writer to a reader... " >&6; }
-if ${gl_cv_pthread_rwlock_rdlock_prefer_writer+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether pthread_rwlock_rdlock prefers a writer to a reader" >&5
+printf %s "checking whether pthread_rwlock_rdlock prefers a writer to a reader... " >&6; }
+if test ${gl_cv_pthread_rwlock_rdlock_prefer_writer+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   save_LIBS="$LIBS"
      LIBS="$LIBS $LIBMULTITHREAD"
-     if test "$cross_compiling" = yes; then :
+     if test "$cross_compiling" = yes
+then :
   gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing yes"
-else
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -9781,9 +10428,10 @@ main ()
 }
 
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
   gl_cv_pthread_rwlock_rdlock_prefer_writer=yes
-else
+else $as_nop
   gl_cv_pthread_rwlock_rdlock_prefer_writer=no
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
      LIBS="$save_LIBS"
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_pthread_rwlock_rdlock_prefer_writer" >&5
-$as_echo "$gl_cv_pthread_rwlock_rdlock_prefer_writer" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_pthread_rwlock_rdlock_prefer_writer" >&5
+printf "%s\n" "$gl_cv_pthread_rwlock_rdlock_prefer_writer" >&6; }
   case "$gl_cv_pthread_rwlock_rdlock_prefer_writer" in
     *yes)
 
-$as_echo "#define HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER 1" >>confdefs.h
+printf "%s\n" "#define HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER 1" >>confdefs.h
 
       ;;
   esac
@@ -9810,7 +10458,7 @@ $as_echo "#define HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER 1" >>confdefs.h
 
       #include <pthread.h>
 int
-main ()
+main (void)
 {
 
 #if __FreeBSD__ == 4
@@ -9827,15 +10475,96 @@ return !x;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
 
-$as_echo "#define HAVE_PTHREAD_MUTEX_RECURSIVE 1" >>confdefs.h
+printf "%s\n" "#define HAVE_PTHREAD_MUTEX_RECURSIVE 1" >>confdefs.h
 
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
   fi
   :
 
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5
+printf %s "checking for $CC options needed to detect all undeclared functions... " >&6; }
+if test ${ac_cv_c_undeclared_builtin_options+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  ac_save_CFLAGS=$CFLAGS
+   ac_cv_c_undeclared_builtin_options='cannot detect'
+   for ac_arg in '' -fno-builtin; do
+     CFLAGS="$ac_save_CFLAGS $ac_arg"
+     # This test program should *not* compile successfully.
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main (void)
+{
+(void) strchr;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+
+else $as_nop
+  # This test program should compile successfully.
+        # No library function is consistently available on
+        # freestanding implementations, so test against a dummy
+        # declaration.  Include always-available headers on the
+        # off chance that they somehow elicit warnings.
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <float.h>
+#include <limits.h>
+#include <stdarg.h>
+#include <stddef.h>
+extern void ac_decl (int, char *);
+
+int
+main (void)
+{
+(void) ac_decl (0, (char *) 0);
+  (void) ac_decl;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+  if test x"$ac_arg" = x
+then :
+  ac_cv_c_undeclared_builtin_options='none needed'
+else $as_nop
+  ac_cv_c_undeclared_builtin_options=$ac_arg
+fi
+          break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+    done
+    CFLAGS=$ac_save_CFLAGS
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_undeclared_builtin_options" >&5
+printf "%s\n" "$ac_cv_c_undeclared_builtin_options" >&6; }
+  case $ac_cv_c_undeclared_builtin_options in #(
+  'cannot detect') :
+    { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot make $CC report undeclared builtins
+See \`config.log' for more details" "$LINENO" 5; } ;; #(
+  'none needed') :
+    ac_c_undeclared_builtin_options='' ;; #(
+  *) :
+    ac_c_undeclared_builtin_options=$ac_cv_c_undeclared_builtin_options ;;
+esac
+
 
 
 
@@ -9861,7 +10590,8 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 
 # Check whether --with-libiconv-prefix was given.
-if test "${with_libiconv_prefix+set}" = set; then :
+if test ${with_libiconv_prefix+y}
+then :
   withval=$with_libiconv_prefix;
     if test "X$withval" = "Xno"; then
       use_additional=no
   done
 
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5
-$as_echo_n "checking for iconv... " >&6; }
-if ${am_cv_func_iconv+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5
+printf %s "checking for iconv... " >&6; }
+if test ${am_cv_func_iconv+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
 
     am_cv_func_iconv="no, consider installing GNU libiconv"
     am_cv_lib_iconv=no
@@ -10345,7 +11076,7 @@ else
 #include <iconv.h>
 
 int
-main ()
+main (void)
 {
 iconv_t cd = iconv_open("","");
            iconv(cd,NULL,NULL,NULL,NULL);
@@ -10354,10 +11085,11 @@ iconv_t cd = iconv_open("","");
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   am_cv_func_iconv=yes
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
     if test "$am_cv_func_iconv" != yes; then
       am_save_LIBS="$LIBS"
@@ -10369,7 +11101,7 @@ rm -f core conftest.err conftest.$ac_objext \
 #include <iconv.h>
 
 int
-main ()
+main (void)
 {
 iconv_t cd = iconv_open("","");
              iconv(cd,NULL,NULL,NULL,NULL);
@@ -10378,24 +11110,26 @@ iconv_t cd = iconv_open("","");
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   am_cv_lib_iconv=yes
         am_cv_func_iconv=yes
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
       LIBS="$am_save_LIBS"
     fi
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5
-$as_echo "$am_cv_func_iconv" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5
+printf "%s\n" "$am_cv_func_iconv" >&6; }
   if test "$am_cv_func_iconv" = yes; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5
-$as_echo_n "checking for working iconv... " >&6; }
-if ${am_cv_func_iconv_works+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5
+printf %s "checking for working iconv... " >&6; }
+if test ${am_cv_func_iconv_works+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
 
                   am_save_LIBS="$LIBS"
       if test $am_cv_lib_iconv = yes; then
@@ -10403,12 +11137,13 @@ else
       fi
       am_cv_func_iconv_works=no
       for ac_iconv_const in '' 'const'; do
-        if test "$cross_compiling" = yes; then :
+        if test "$cross_compiling" = yes
+then :
   case "$host_os" in
              aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
              *)            am_cv_func_iconv_works="guessing yes" ;;
            esac
-else
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -10420,7 +11155,7 @@ else
 #endif
 
 int
-main ()
+main (void)
 {
 int result = 0;
   /* Test against AIX 5.1 bug: Failures are not distinguishable from successful
@@ -10532,7 +11267,8 @@ int result = 0;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
   am_cv_func_iconv_works=yes
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
@@ -10544,8 +11280,8 @@ fi
       LIBS="$am_save_LIBS"
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5
-$as_echo "$am_cv_func_iconv_works" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5
+printf "%s\n" "$am_cv_func_iconv_works" >&6; }
     case "$am_cv_func_iconv_works" in
       *no) am_func_iconv=no am_cv_lib_iconv=no ;;
       *)   am_func_iconv=yes ;;
@@ -10555,14 +11291,14 @@ $as_echo "$am_cv_func_iconv_works" >&6; }
   fi
   if test "$am_func_iconv" = yes; then
 
-$as_echo "#define HAVE_ICONV 1" >>confdefs.h
+printf "%s\n" "#define HAVE_ICONV 1" >>confdefs.h
 
   fi
   if test "$am_cv_lib_iconv" = yes; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5
-$as_echo_n "checking how to link with libiconv... " >&6; }
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5
-$as_echo "$LIBICONV" >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5
+printf %s "checking how to link with libiconv... " >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5
+printf "%s\n" "$LIBICONV" >&6; }
   else
             CPPFLAGS="$am_save_CPPFLAGS"
     LIBICONV=
@@ -10572,11 +11308,12 @@ $as_echo "$LIBICONV" >&6; }
 
 
   if test "$am_cv_func_iconv" = yes; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv declaration" >&5
-$as_echo_n "checking for iconv declaration... " >&6; }
-    if ${am_cv_proto_iconv+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for iconv declaration" >&5
+printf %s "checking for iconv declaration... " >&6; }
+    if test ${am_cv_proto_iconv+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
 
       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
@@ -10594,34 +11331,33 @@ size_t iconv();
 #endif
 
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   am_cv_proto_iconv_arg1=""
-else
+else $as_nop
   am_cv_proto_iconv_arg1="const"
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
       am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"
 fi
 
     am_cv_proto_iconv=`echo "$am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result:
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result:
          $am_cv_proto_iconv" >&5
-$as_echo "
+printf "%s\n" "
          $am_cv_proto_iconv" >&6; }
   else
             am_cv_proto_iconv_arg1=""
   fi
 
-cat >>confdefs.h <<_ACEOF
-#define ICONV_CONST $am_cv_proto_iconv_arg1
-_ACEOF
+printf "%s\n" "#define ICONV_CONST $am_cv_proto_iconv_arg1" >>confdefs.h
 
 
 
@@ -10632,83 +11368,177 @@ _ACEOF
 /* end confdefs.h.  */
 int foo (int a) { a = __builtin_expect (a, 10); return a == 10 ? 0 : 1; }
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
 
-$as_echo "#define HAVE_BUILTIN_EXPECT 1" >>confdefs.h
+printf "%s\n" "#define HAVE_BUILTIN_EXPECT 1" >>confdefs.h
 
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 
-  for ac_header in argz.h inttypes.h limits.h unistd.h sys/param.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
+  ac_fn_c_check_header_compile "$LINENO" "argz.h" "ac_cv_header_argz_h" "$ac_includes_default"
+if test "x$ac_cv_header_argz_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_ARGZ_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "inttypes.h" "ac_cv_header_inttypes_h" "$ac_includes_default"
+if test "x$ac_cv_header_inttypes_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_INTTYPES_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "limits.h" "ac_cv_header_limits_h" "$ac_includes_default"
+if test "x$ac_cv_header_limits_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_LIMITS_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default"
+if test "x$ac_cv_header_unistd_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_UNISTD_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "sys/param.h" "ac_cv_header_sys_param_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_param_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_SYS_PARAM_H 1" >>confdefs.h
+
+fi
+
+  ac_fn_c_check_func "$LINENO" "getcwd" "ac_cv_func_getcwd"
+if test "x$ac_cv_func_getcwd" = xyes
+then :
+  printf "%s\n" "#define HAVE_GETCWD 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "getegid" "ac_cv_func_getegid"
+if test "x$ac_cv_func_getegid" = xyes
+then :
+  printf "%s\n" "#define HAVE_GETEGID 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "geteuid" "ac_cv_func_geteuid"
+if test "x$ac_cv_func_geteuid" = xyes
+then :
+  printf "%s\n" "#define HAVE_GETEUID 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "getgid" "ac_cv_func_getgid"
+if test "x$ac_cv_func_getgid" = xyes
+then :
+  printf "%s\n" "#define HAVE_GETGID 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "getuid" "ac_cv_func_getuid"
+if test "x$ac_cv_func_getuid" = xyes
+then :
+  printf "%s\n" "#define HAVE_GETUID 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "mempcpy" "ac_cv_func_mempcpy"
+if test "x$ac_cv_func_mempcpy" = xyes
+then :
+  printf "%s\n" "#define HAVE_MEMPCPY 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "munmap" "ac_cv_func_munmap"
+if test "x$ac_cv_func_munmap" = xyes
+then :
+  printf "%s\n" "#define HAVE_MUNMAP 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "stpcpy" "ac_cv_func_stpcpy"
+if test "x$ac_cv_func_stpcpy" = xyes
+then :
+  printf "%s\n" "#define HAVE_STPCPY 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "strcasecmp" "ac_cv_func_strcasecmp"
+if test "x$ac_cv_func_strcasecmp" = xyes
+then :
+  printf "%s\n" "#define HAVE_STRCASECMP 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "strdup" "ac_cv_func_strdup"
+if test "x$ac_cv_func_strdup" = xyes
+then :
+  printf "%s\n" "#define HAVE_STRDUP 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "strtoul" "ac_cv_func_strtoul"
+if test "x$ac_cv_func_strtoul" = xyes
+then :
+  printf "%s\n" "#define HAVE_STRTOUL 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "tsearch" "ac_cv_func_tsearch"
+if test "x$ac_cv_func_tsearch" = xyes
+then :
+  printf "%s\n" "#define HAVE_TSEARCH 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "argz_count" "ac_cv_func_argz_count"
+if test "x$ac_cv_func_argz_count" = xyes
+then :
+  printf "%s\n" "#define HAVE_ARGZ_COUNT 1" >>confdefs.h
 
 fi
+ac_fn_c_check_func "$LINENO" "argz_stringify" "ac_cv_func_argz_stringify"
+if test "x$ac_cv_func_argz_stringify" = xyes
+then :
+  printf "%s\n" "#define HAVE_ARGZ_STRINGIFY 1" >>confdefs.h
 
-done
+fi
+ac_fn_c_check_func "$LINENO" "argz_next" "ac_cv_func_argz_next"
+if test "x$ac_cv_func_argz_next" = xyes
+then :
+  printf "%s\n" "#define HAVE_ARGZ_NEXT 1" >>confdefs.h
 
-  for ac_func in getcwd getegid geteuid getgid getuid mempcpy munmap \
-    stpcpy strcasecmp strdup strtoul tsearch argz_count argz_stringify \
-    argz_next __fsetlocking
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+fi
+ac_fn_c_check_func "$LINENO" "__fsetlocking" "ac_cv_func___fsetlocking"
+if test "x$ac_cv_func___fsetlocking" = xyes
+then :
+  printf "%s\n" "#define HAVE___FSETLOCKING 1" >>confdefs.h
 
 fi
-done
 
 
-    for ac_func in localeconv
-do :
-  ac_fn_c_check_func "$LINENO" "localeconv" "ac_cv_func_localeconv"
-if test "x$ac_cv_func_localeconv" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LOCALECONV 1
-_ACEOF
+    ac_fn_c_check_func "$LINENO" "localeconv" "ac_cv_func_localeconv"
+if test "x$ac_cv_func_localeconv" = xyes
+then :
+  printf "%s\n" "#define HAVE_LOCALECONV 1" >>confdefs.h
 
 fi
-done
 
 
-          ac_fn_c_check_decl "$LINENO" "feof_unlocked" "ac_cv_have_decl_feof_unlocked" "#include <stdio.h>
-"
-if test "x$ac_cv_have_decl_feof_unlocked" = xyes; then :
+          ac_fn_check_decl "$LINENO" "feof_unlocked" "ac_cv_have_decl_feof_unlocked" "#include <stdio.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_feof_unlocked" = xyes
+then :
   ac_have_decl=1
-else
+else $as_nop
   ac_have_decl=0
 fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_FEOF_UNLOCKED $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "fgets_unlocked" "ac_cv_have_decl_fgets_unlocked" "#include <stdio.h>
-"
-if test "x$ac_cv_have_decl_fgets_unlocked" = xyes; then :
+printf "%s\n" "#define HAVE_DECL_FEOF_UNLOCKED $ac_have_decl" >>confdefs.h
+ac_fn_check_decl "$LINENO" "fgets_unlocked" "ac_cv_have_decl_fgets_unlocked" "#include <stdio.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_fgets_unlocked" = xyes
+then :
   ac_have_decl=1
-else
+else $as_nop
   ac_have_decl=0
 fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_FGETS_UNLOCKED $ac_have_decl
-_ACEOF
+printf "%s\n" "#define HAVE_DECL_FGETS_UNLOCKED $ac_have_decl" >>confdefs.h
 
 
 
@@ -10717,11 +11547,12 @@ _ACEOF
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_INTLBISON+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_INTLBISON+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$INTLBISON"; then
   ac_cv_prog_INTLBISON="$INTLBISON" # Let the user override the test.
 else
@@ -10729,11 +11560,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_INTLBISON="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
 fi
 INTLBISON=$ac_cv_prog_INTLBISON
 if test -n "$INTLBISON"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLBISON" >&5
-$as_echo "$INTLBISON" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INTLBISON" >&5
+printf "%s\n" "$INTLBISON" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -10758,8 +11593,8 @@ done
   if test -z "$INTLBISON"; then
     ac_verc_fail=yes
   else
-        { $as_echo "$as_me:${as_lineno-$LINENO}: checking version of bison" >&5
-$as_echo_n "checking version of bison... " >&6; }
+        { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking version of bison" >&5
+printf %s "checking version of bison... " >&6; }
     ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
     case $ac_prog_version in
       '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
@@ -10767,8 +11602,8 @@ $as_echo_n "checking version of bison... " >&6; }
          ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
       *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
     esac
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_prog_version" >&5
-$as_echo "$ac_prog_version" >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_prog_version" >&5
+printf "%s\n" "$ac_prog_version" >&6; }
   fi
   if test $ac_verc_fail = yes; then
     INTLBISON=:
@@ -10776,103 +11611,111 @@ $as_echo "$ac_prog_version" >&6; }
 
 
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long long int" >&5
-$as_echo_n "checking for long long int... " >&6; }
-if ${ac_cv_type_long_long_int+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for long long int" >&5
+printf %s "checking for long long int... " >&6; }
+if test ${ac_cv_type_long_long_int+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_cv_type_long_long_int=yes
-      if test "x${ac_cv_prog_cc_c99-no}" = xno; then
-       ac_cv_type_long_long_int=$ac_cv_type_unsigned_long_long_int
-       if test $ac_cv_type_long_long_int = yes; then
-                                 if test "$cross_compiling" = yes; then :
+      case $ac_prog_cc_stdc in
+       no | c89) ;;
+       *)
+         ac_cv_type_long_long_int=$ac_cv_type_unsigned_long_long_int
+         if test $ac_cv_type_long_long_int = yes; then
+                                   if test "$cross_compiling" = yes
+then :
   :
-else
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <limits.h>
-                #ifndef LLONG_MAX
-                # define HALF \
-                         (1LL << (sizeof (long long int) * CHAR_BIT - 2))
-                # define LLONG_MAX (HALF - 1 + HALF)
-                #endif
+                  #ifndef LLONG_MAX
+                  # define HALF \
+                           (1LL << (sizeof (long long int) * CHAR_BIT - 2))
+                  # define LLONG_MAX (HALF - 1 + HALF)
+                  #endif
 int
-main ()
+main (void)
 {
 long long int n = 1;
-                int i;
-                for (i = 0; ; i++)
-                  {
-                    long long int m = n << i;
-                    if (m >> i != n)
-                      return 1;
-                    if (LLONG_MAX / 2 < m)
-                      break;
-                  }
-                return 0;
+                  int i;
+                  for (i = 0; ; i++)
+                    {
+                      long long int m = n << i;
+                      if (m >> i != n)
+                        return 1;
+                      if (LLONG_MAX / 2 < m)
+                        break;
+                    }
+                  return 0;
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
 
-else
+else $as_nop
   ac_cv_type_long_long_int=no
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
   conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
 
-       fi
-      fi
+         fi;;
+      esac
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_long_int" >&5
-$as_echo "$ac_cv_type_long_long_int" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_long_int" >&5
+printf "%s\n" "$ac_cv_type_long_long_int" >&6; }
   if test $ac_cv_type_long_long_int = yes; then
 
-$as_echo "#define HAVE_LONG_LONG_INT 1" >>confdefs.h
+printf "%s\n" "#define HAVE_LONG_LONG_INT 1" >>confdefs.h
 
   fi
 
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wchar_t" >&5
-$as_echo_n "checking for wchar_t... " >&6; }
-if ${gt_cv_c_wchar_t+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for wchar_t" >&5
+printf %s "checking for wchar_t... " >&6; }
+if test ${gt_cv_c_wchar_t+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stddef.h>
             wchar_t foo = (wchar_t)'\0';
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   gt_cv_c_wchar_t=yes
-else
+else $as_nop
   gt_cv_c_wchar_t=no
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wchar_t" >&5
-$as_echo "$gt_cv_c_wchar_t" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wchar_t" >&5
+printf "%s\n" "$gt_cv_c_wchar_t" >&6; }
   if test $gt_cv_c_wchar_t = yes; then
 
-$as_echo "#define HAVE_WCHAR_T 1" >>confdefs.h
+printf "%s\n" "#define HAVE_WCHAR_T 1" >>confdefs.h
 
   fi
 
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wint_t" >&5
-$as_echo_n "checking for wint_t... " >&6; }
-if ${gt_cv_c_wint_t+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for wint_t" >&5
+printf %s "checking for wint_t... " >&6; }
+if test ${gt_cv_c_wint_t+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -10886,32 +11729,34 @@ else
 #include <wchar.h>
             wint_t foo = (wchar_t)'\0';
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   gt_cv_c_wint_t=yes
-else
+else $as_nop
   gt_cv_c_wint_t=no
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wint_t" >&5
-$as_echo "$gt_cv_c_wint_t" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wint_t" >&5
+printf "%s\n" "$gt_cv_c_wint_t" >&6; }
   if test $gt_cv_c_wint_t = yes; then
 
-$as_echo "#define HAVE_WINT_T 1" >>confdefs.h
+printf "%s\n" "#define HAVE_WINT_T 1" >>confdefs.h
 
 
-            { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether wint_t is too small" >&5
-$as_echo_n "checking whether wint_t is too small... " >&6; }
-if ${gl_cv_type_wint_t_too_small+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+            { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether wint_t is too small" >&5
+printf %s "checking whether wint_t is too small... " >&6; }
+if test ${gl_cv_type_wint_t_too_small+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -10928,22 +11773,23 @@ else
               int verify[sizeof (wint_t) < sizeof (int) ? -1 : 1];
 
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   gl_cv_type_wint_t_too_small=no
-else
+else $as_nop
   gl_cv_type_wint_t_too_small=yes
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_wint_t_too_small" >&5
-$as_echo "$gl_cv_type_wint_t_too_small" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_wint_t_too_small" >&5
+printf "%s\n" "$gl_cv_type_wint_t_too_small" >&6; }
     if test $gl_cv_type_wint_t_too_small = yes; then
       GNULIB_OVERRIDES_WINT_T=1
     else
@@ -10957,11 +11803,12 @@ $as_echo "$gl_cv_type_wint_t_too_small" >&6; }
 
 
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for intmax_t" >&5
-$as_echo_n "checking for intmax_t... " >&6; }
-if ${gt_cv_c_intmax_t+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for intmax_t" >&5
+printf %s "checking for intmax_t... " >&6; }
+if test ${gt_cv_c_intmax_t+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -10975,7 +11822,7 @@ else
 #endif
 
 int
-main ()
+main (void)
 {
 intmax_t x = -1;
             return !x;
@@ -10983,30 +11830,33 @@ intmax_t x = -1;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   gt_cv_c_intmax_t=yes
-else
+else $as_nop
   gt_cv_c_intmax_t=no
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_intmax_t" >&5
-$as_echo "$gt_cv_c_intmax_t" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_intmax_t" >&5
+printf "%s\n" "$gt_cv_c_intmax_t" >&6; }
   if test $gt_cv_c_intmax_t = yes; then
 
-$as_echo "#define HAVE_INTMAX_T 1" >>confdefs.h
+printf "%s\n" "#define HAVE_INTMAX_T 1" >>confdefs.h
 
   fi
 
 
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf() supports POSIX/XSI format strings" >&5
-$as_echo_n "checking whether printf() supports POSIX/XSI format strings... " >&6; }
-if ${gt_cv_func_printf_posix+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether printf() supports POSIX/XSI format strings" >&5
+printf %s "checking whether printf() supports POSIX/XSI format strings... " >&6; }
+if test ${gt_cv_func_printf_posix+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
 
-      if test "$cross_compiling" = yes; then :
+      if test "$cross_compiling" = yes
+then :
 
           cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
@@ -11017,15 +11867,16 @@ else
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "notposix" >/dev/null 2>&1; then :
+  $EGREP "notposix" >/dev/null 2>&1
+then :
   gt_cv_func_printf_posix="guessing no"
-else
+else $as_nop
   gt_cv_func_printf_posix="guessing yes"
 fi
-rm -f conftest*
+rm -rf conftest*
 
 
-else
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -11041,9 +11892,10 @@ int main ()
   return (strcmp (buf, "55 33") != 0);
 }
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
   gt_cv_func_printf_posix=yes
-else
+else $as_nop
   gt_cv_func_printf_posix=no
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
 
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_printf_posix" >&5
-$as_echo "$gt_cv_func_printf_posix" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_printf_posix" >&5
+printf "%s\n" "$gt_cv_func_printf_posix" >&6; }
   case $gt_cv_func_printf_posix in
     *yes)
 
-$as_echo "#define HAVE_POSIX_PRINTF 1" >>confdefs.h
+printf "%s\n" "#define HAVE_POSIX_PRINTF 1" >>confdefs.h
 
       ;;
   esac
 
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C Library >= 2.1 or uClibc" >&5
-$as_echo_n "checking whether we are using the GNU C Library >= 2.1 or uClibc... " >&6; }
-if ${ac_cv_gnu_library_2_1+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C Library >= 2.1 or uClibc" >&5
+printf %s "checking whether we are using the GNU C Library >= 2.1 or uClibc... " >&6; }
+if test ${ac_cv_gnu_library_2_1+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -11083,40 +11936,37 @@ else
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "Lucky" >/dev/null 2>&1; then :
+  $EGREP "Lucky" >/dev/null 2>&1
+then :
   ac_cv_gnu_library_2_1=yes
-else
+else $as_nop
   ac_cv_gnu_library_2_1=no
 fi
-rm -f conftest*
+rm -rf conftest*
 
 
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gnu_library_2_1" >&5
-$as_echo "$ac_cv_gnu_library_2_1" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gnu_library_2_1" >&5
+printf "%s\n" "$ac_cv_gnu_library_2_1" >&6; }
 
     GLIBC21="$ac_cv_gnu_library_2_1"
 
 
 
-  for ac_header in stdint.h
-do :
-  ac_fn_c_check_header_mongrel "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default"
-if test "x$ac_cv_header_stdint_h" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_STDINT_H 1
-_ACEOF
+  ac_fn_c_check_header_compile "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default"
+if test "x$ac_cv_header_stdint_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_STDINT_H 1" >>confdefs.h
 
 fi
 
-done
-
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SIZE_MAX" >&5
-$as_echo_n "checking for SIZE_MAX... " >&6; }
-if ${gl_cv_size_max+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for SIZE_MAX" >&5
+printf %s "checking for SIZE_MAX... " >&6; }
+if test ${gl_cv_size_max+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
 
     gl_cv_size_max=
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -11132,22 +11982,25 @@ Found it
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "Found it" >/dev/null 2>&1; then :
+  $EGREP "Found it" >/dev/null 2>&1
+then :
   gl_cv_size_max=yes
 fi
-rm -f conftest*
+rm -rf conftest*
 
     if test -z "$gl_cv_size_max"; then
                         if ac_fn_c_compute_int "$LINENO" "sizeof (size_t) * CHAR_BIT - 1" "size_t_bits_minus_1"        "#include <stddef.h>
-#include <limits.h>"; then :
+#include <limits.h>"
+then :
 
-else
+else $as_nop
   size_t_bits_minus_1=
 fi
 
-      if ac_fn_c_compute_int "$LINENO" "sizeof (size_t) <= sizeof (unsigned int)" "fits_in_uint"        "#include <stddef.h>"; then :
+      if ac_fn_c_compute_int "$LINENO" "sizeof (size_t) <= sizeof (unsigned int)" "fits_in_uint"        "#include <stddef.h>"
+then :
 
-else
+else $as_nop
   fits_in_uint=
 fi
 
                  extern unsigned long foo;
 
 int
-main ()
+main (void)
 {
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   fits_in_uint=0
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
         fi
                                 if test $fits_in_uint = 1; then
           gl_cv_size_max="(((1U << $size_t_bits_minus_1) - 1) * 2 + 1)"
@@ -11183,46 +12037,23 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
     fi
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_size_max" >&5
-$as_echo "$gl_cv_size_max" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_size_max" >&5
+printf "%s\n" "$gl_cv_size_max" >&6; }
   if test "$gl_cv_size_max" != yes; then
 
-cat >>confdefs.h <<_ACEOF
-#define SIZE_MAX $gl_cv_size_max
-_ACEOF
+printf "%s\n" "#define SIZE_MAX $gl_cv_size_max" >>confdefs.h
 
   fi
 
 
 
 
-  for ac_header in stdint.h
-do :
-  ac_fn_c_check_header_mongrel "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default"
-if test "x$ac_cv_header_stdint_h" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_STDINT_H 1
-_ACEOF
-
-fi
-
-done
-
-
-
-
-
-  for ac_func in $ac_func_list
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+  ac_fn_c_check_header_compile "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default"
+if test "x$ac_cv_header_stdint_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_STDINT_H 1" >>confdefs.h
 
 fi
-done
 
 
 
@@ -11231,19 +12062,21 @@ done
 
 
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fcntl.h" >&5
-$as_echo_n "checking for working fcntl.h... " >&6; }
-if ${gl_cv_header_working_fcntl_h+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working fcntl.h" >&5
+printf %s "checking for working fcntl.h... " >&6; }
+if test ${gl_cv_header_working_fcntl_h+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if test "$cross_compiling" = yes
+then :
   case "$host_os" in
                   # Guess 'no' on native Windows.
           mingw*) gl_cv_header_working_fcntl_h='no' ;;
           *)      gl_cv_header_working_fcntl_h=cross-compiling ;;
         esac
 
-else
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <sys/types.h>
@@ -11269,7 +12102,7 @@ else
             };
 
 int
-main ()
+main (void)
 {
 
             int result = !constants;
@@ -11339,9 +12172,10 @@ main ()
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
   gl_cv_header_working_fcntl_h=yes
-else
+else $as_nop
   case $? in #(
         4) gl_cv_header_working_fcntl_h='no (bad O_NOFOLLOW)';; #(
         64) gl_cv_header_working_fcntl_h='no (bad O_NOATIME)';; #(
 
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_working_fcntl_h" >&5
-$as_echo "$gl_cv_header_working_fcntl_h" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_working_fcntl_h" >&5
+printf "%s\n" "$gl_cv_header_working_fcntl_h" >&6; }
 
   case $gl_cv_header_working_fcntl_h in #(
   *O_NOATIME* | no | cross-compiling) ac_val=0;; #(
   *) ac_val=1;;
   esac
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_WORKING_O_NOATIME $ac_val
-_ACEOF
+printf "%s\n" "#define HAVE_WORKING_O_NOATIME $ac_val" >>confdefs.h
 
 
   case $gl_cv_header_working_fcntl_h in #(
@@ -11373,11 +12205,7 @@ _ACEOF
   *) ac_val=1;;
   esac
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_WORKING_O_NOFOLLOW $ac_val
-_ACEOF
-
-
+printf "%s\n" "#define HAVE_WORKING_O_NOFOLLOW $ac_val" >>confdefs.h
 
 
 
@@ -11394,19 +12222,21 @@ _ACEOF
 
       if test $ac_cv_func_uselocale = yes; then
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether uselocale works" >&5
-$as_echo_n "checking whether uselocale works... " >&6; }
-if ${gt_cv_func_uselocale_works+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether uselocale works" >&5
+printf %s "checking whether uselocale works... " >&6; }
+if test ${gt_cv_func_uselocale_works+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if test "$cross_compiling" = yes
+then :
   # Guess no on AIX, yes otherwise.
           case "$host_os" in
             aix*) gt_cv_func_uselocale_works="guessing no" ;;
             *)    gt_cv_func_uselocale_works="guessing yes" ;;
           esac
 
-else
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -11421,9 +12251,10 @@ int main ()
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
   gt_cv_func_uselocale_works=yes
-else
+else $as_nop
   gt_cv_func_uselocale_works=no
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
 
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_uselocale_works" >&5
-$as_echo "$gt_cv_func_uselocale_works" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_uselocale_works" >&5
+printf "%s\n" "$gt_cv_func_uselocale_works" >&6; }
   else
     gt_cv_func_uselocale_works=no
   fi
   case "$gt_cv_func_uselocale_works" in
     *yes)
 
-$as_echo "#define HAVE_WORKING_USELOCALE 1" >>confdefs.h
+printf "%s\n" "#define HAVE_WORKING_USELOCALE 1" >>confdefs.h
 
       ;;
   esac
@@ -11449,18 +12280,20 @@ $as_echo "#define HAVE_WORKING_USELOCALE 1" >>confdefs.h
                             case "$gt_cv_func_uselocale_works" in
     *yes)
 
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fake locale system (OpenBSD)" >&5
-$as_echo_n "checking for fake locale system (OpenBSD)... " >&6; }
-if ${gt_cv_locale_fake+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
+      { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fake locale system (OpenBSD)" >&5
+printf %s "checking for fake locale system (OpenBSD)... " >&6; }
+if test ${gt_cv_locale_fake+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if test "$cross_compiling" = yes
+then :
               case "$host_os" in
               openbsd*) gt_cv_locale_fake="guessing yes" ;;
               *)        gt_cv_locale_fake="guessing no" ;;
             esac
 
-else
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -11478,9 +12311,10 @@ int main ()
   return !(loc1 == loc2);
 }
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
   gt_cv_locale_fake=yes
-else
+else $as_nop
   gt_cv_locale_fake=no
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
 
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fake" >&5
-$as_echo "$gt_cv_locale_fake" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fake" >&5
+printf "%s\n" "$gt_cv_locale_fake" >&6; }
       ;;
     *) gt_cv_locale_fake=no ;;
   esac
   case "$gt_cv_locale_fake" in
     *yes)
 
-$as_echo "#define HAVE_FAKE_LOCALES 1" >>confdefs.h
+printf "%s\n" "#define HAVE_FAKE_LOCALES 1" >>confdefs.h
 
       ;;
   esac
 
   case "$gt_cv_func_uselocale_works" in
     *yes)
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Solaris 11.4 locale system" >&5
-$as_echo_n "checking for Solaris 11.4 locale system... " >&6; }
-if ${gt_cv_locale_solaris114+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+      { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Solaris 11.4 locale system" >&5
+printf %s "checking for Solaris 11.4 locale system... " >&6; }
+if test ${gt_cv_locale_solaris114+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   case "$host_os" in
            solaris*)
                                                                                            cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -11519,47 +12354,44 @@ else
                   locale_t y;
 
 int
-main ()
+main (void)
 {
 *y = x;
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   gt_cv_locale_solaris114=yes
-else
+else $as_nop
   gt_cv_locale_solaris114=no
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
              ;;
            *) gt_cv_locale_solaris114=no ;;
          esac
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_solaris114" >&5
-$as_echo "$gt_cv_locale_solaris114" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_solaris114" >&5
+printf "%s\n" "$gt_cv_locale_solaris114" >&6; }
       ;;
     *) gt_cv_locale_solaris114=no ;;
   esac
   if test $gt_cv_locale_solaris114 = yes; then
 
-$as_echo "#define HAVE_SOLARIS114_LOCALES 1" >>confdefs.h
+printf "%s\n" "#define HAVE_SOLARIS114_LOCALES 1" >>confdefs.h
 
   fi
 
         case "$gt_cv_func_uselocale_works" in
     *yes)
-      for ac_func in getlocalename_l
-do :
-  ac_fn_c_check_func "$LINENO" "getlocalename_l" "ac_cv_func_getlocalename_l"
-if test "x$ac_cv_func_getlocalename_l" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_GETLOCALENAME_L 1
-_ACEOF
+      ac_fn_c_check_func "$LINENO" "getlocalename_l" "ac_cv_func_getlocalename_l"
+if test "x$ac_cv_func_getlocalename_l" = xyes
+then :
+  printf "%s\n" "#define HAVE_GETLOCALENAME_L 1" >>confdefs.h
 
 fi
-done
 
       ;;
   esac
   if false; then
     gt_nameless_locales=yes
 
-$as_echo "#define HAVE_NAMELESS_LOCALES 1" >>confdefs.h
+printf "%s\n" "#define HAVE_NAMELESS_LOCALES 1" >>confdefs.h
 
   fi
 
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5
-$as_echo_n "checking for CFPreferencesCopyAppValue... " >&6; }
-if ${gt_cv_func_CFPreferencesCopyAppValue+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5
+printf %s "checking for CFPreferencesCopyAppValue... " >&6; }
+if test ${gt_cv_func_CFPreferencesCopyAppValue+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   gt_save_LIBS="$LIBS"
      LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <CoreFoundation/CFPreferences.h>
 int
-main ()
+main (void)
 {
 CFPreferencesCopyAppValue(NULL, NULL)
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   gt_cv_func_CFPreferencesCopyAppValue=yes
-else
+else $as_nop
   gt_cv_func_CFPreferencesCopyAppValue=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
      LIBS="$gt_save_LIBS"
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5
-$as_echo "$gt_cv_func_CFPreferencesCopyAppValue" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5
+printf "%s\n" "$gt_cv_func_CFPreferencesCopyAppValue" >&6; }
   if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then
 
-$as_echo "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h
+printf "%s\n" "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h
 
   fi
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyCurrent" >&5
-$as_echo_n "checking for CFLocaleCopyCurrent... " >&6; }
-if ${gt_cv_func_CFLocaleCopyCurrent+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyCurrent" >&5
+printf %s "checking for CFLocaleCopyCurrent... " >&6; }
+if test ${gt_cv_func_CFLocaleCopyCurrent+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   gt_save_LIBS="$LIBS"
      LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <CoreFoundation/CFLocale.h>
 int
-main ()
+main (void)
 {
 CFLocaleCopyCurrent();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   gt_cv_func_CFLocaleCopyCurrent=yes
-else
+else $as_nop
   gt_cv_func_CFLocaleCopyCurrent=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
      LIBS="$gt_save_LIBS"
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyCurrent" >&5
-$as_echo "$gt_cv_func_CFLocaleCopyCurrent" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyCurrent" >&5
+printf "%s\n" "$gt_cv_func_CFLocaleCopyCurrent" >&6; }
   if test $gt_cv_func_CFLocaleCopyCurrent = yes; then
 
-$as_echo "#define HAVE_CFLOCALECOPYCURRENT 1" >>confdefs.h
+printf "%s\n" "#define HAVE_CFLOCALECOPYCURRENT 1" >>confdefs.h
 
   fi
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyPreferredLanguages" >&5
-$as_echo_n "checking for CFLocaleCopyPreferredLanguages... " >&6; }
-if ${gt_cv_func_CFLocaleCopyPreferredLanguages+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyPreferredLanguages" >&5
+printf %s "checking for CFLocaleCopyPreferredLanguages... " >&6; }
+if test ${gt_cv_func_CFLocaleCopyPreferredLanguages+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   gt_save_LIBS="$LIBS"
      LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <CoreFoundation/CFLocale.h>
 int
-main ()
+main (void)
 {
 CFLocaleCopyPreferredLanguages();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   gt_cv_func_CFLocaleCopyPreferredLanguages=yes
-else
+else $as_nop
   gt_cv_func_CFLocaleCopyPreferredLanguages=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
      LIBS="$gt_save_LIBS"
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyPreferredLanguages" >&5
-$as_echo "$gt_cv_func_CFLocaleCopyPreferredLanguages" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyPreferredLanguages" >&5
+printf "%s\n" "$gt_cv_func_CFLocaleCopyPreferredLanguages" >&6; }
   if test $gt_cv_func_CFLocaleCopyPreferredLanguages = yes; then
 
-$as_echo "#define HAVE_CFLOCALECOPYPREFERREDLANGUAGES 1" >>confdefs.h
+printf "%s\n" "#define HAVE_CFLOCALECOPYPREFERREDLANGUAGES 1" >>confdefs.h
 
   fi
   INTL_MACOSX_LIBS=
@@ -11689,11 +12527,12 @@ $as_echo "#define HAVE_CFLOCALECOPYPREFERREDLANGUAGES 1" >>confdefs.h
 
 
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for flexible array members" >&5
-$as_echo_n "checking for flexible array members... " >&6; }
-if ${ac_cv_c_flexmember+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for flexible array members" >&5
+printf %s "checking for flexible array members... " >&6; }
+if test ${ac_cv_c_flexmember+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdlib.h>
@@ -11701,32 +12540,33 @@ else
            #include <stddef.h>
            struct s { int n; double d[]; };
 int
-main ()
+main (void)
 {
 int m = getchar ();
-           struct s *p = malloc (offsetof (struct s, d)
-                                 + m * sizeof (double));
+           struct s *p = (struct s *) malloc (offsetof (struct s, d)
+                                              + m * sizeof (double));
            p->d[0] = 0.0;
            return p->d != (double *) NULL;
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   ac_cv_c_flexmember=yes
-else
+else $as_nop
   ac_cv_c_flexmember=no
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_flexmember" >&5
-$as_echo "$ac_cv_c_flexmember" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_flexmember" >&5
+printf "%s\n" "$ac_cv_c_flexmember" >&6; }
   if test $ac_cv_c_flexmember = yes; then
 
-$as_echo "#define FLEXIBLE_ARRAY_MEMBER /**/" >>confdefs.h
+printf "%s\n" "#define FLEXIBLE_ARRAY_MEMBER /**/" >>confdefs.h
 
   else
-    $as_echo "#define FLEXIBLE_ARRAY_MEMBER 1" >>confdefs.h
+    printf "%s\n" "#define FLEXIBLE_ARRAY_MEMBER 1" >>confdefs.h
 
   fi
 
@@ -11740,11 +12580,12 @@ $as_echo "#define FLEXIBLE_ARRAY_MEMBER /**/" >>confdefs.h
                if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
 set dummy ${ac_tool_prefix}ar; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_AR+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_AR+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$AR"; then
   ac_cv_prog_AR="$AR" # Let the user override the test.
 else
@@ -11752,11 +12593,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_AR="${ac_tool_prefix}ar"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
 fi
 AR=$ac_cv_prog_AR
 if test -n "$AR"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
-$as_echo "$AR" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+printf "%s\n" "$AR" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -11780,11 +12625,12 @@ if test -z "$ac_cv_prog_AR"; then
   ac_ct_AR=$AR
   # Extract the first word of "ar", so it can be a program name with args.
 set dummy ar; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_AR+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_AR+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$ac_ct_AR"; then
   ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
 else
@@ -11792,11 +12638,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_AR="ar"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
 fi
 ac_ct_AR=$ac_cv_prog_ac_ct_AR
 if test -n "$ac_ct_AR"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
-$as_echo "$ac_ct_AR" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+printf "%s\n" "$ac_ct_AR" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
   if test "x$ac_ct_AR" = x; then
@@ -11819,8 +12669,8 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     AR=$ac_ct_AR
 
 
   ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default"
-if test "x$ac_cv_type_ptrdiff_t" = xyes; then :
+if test "x$ac_cv_type_ptrdiff_t" = xyes
+then :
 
-else
+else $as_nop
 
-$as_echo "#define ptrdiff_t long" >>confdefs.h
+printf "%s\n" "#define ptrdiff_t long" >>confdefs.h
 
 
 fi
 
-  for ac_header in features.h stddef.h stdlib.h string.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
+  ac_fn_c_check_header_compile "$LINENO" "features.h" "ac_cv_header_features_h" "$ac_includes_default"
+if test "x$ac_cv_header_features_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_FEATURES_H 1" >>confdefs.h
 
 fi
+ac_fn_c_check_header_compile "$LINENO" "stddef.h" "ac_cv_header_stddef_h" "$ac_includes_default"
+if test "x$ac_cv_header_stddef_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_STDDEF_H 1" >>confdefs.h
 
-done
+fi
+ac_fn_c_check_header_compile "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default"
+if test "x$ac_cv_header_stdlib_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_STDLIB_H 1" >>confdefs.h
 
-  for ac_func in asprintf fwprintf newlocale putenv setenv setlocale \
-    snprintf strnlen uselocale wcslen wcsnlen mbrtowc wcrtomb
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+fi
+ac_fn_c_check_header_compile "$LINENO" "string.h" "ac_cv_header_string_h" "$ac_includes_default"
+if test "x$ac_cv_header_string_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_STRING_H 1" >>confdefs.h
 
 fi
-done
 
+  ac_fn_c_check_func "$LINENO" "asprintf" "ac_cv_func_asprintf"
+if test "x$ac_cv_func_asprintf" = xyes
+then :
+  printf "%s\n" "#define HAVE_ASPRINTF 1" >>confdefs.h
 
-      ac_fn_c_check_decl "$LINENO" "_snprintf" "ac_cv_have_decl__snprintf" "#include <stdio.h>
-"
-if test "x$ac_cv_have_decl__snprintf" = xyes; then :
+fi
+ac_fn_c_check_func "$LINENO" "fwprintf" "ac_cv_func_fwprintf"
+if test "x$ac_cv_func_fwprintf" = xyes
+then :
+  printf "%s\n" "#define HAVE_FWPRINTF 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "newlocale" "ac_cv_func_newlocale"
+if test "x$ac_cv_func_newlocale" = xyes
+then :
+  printf "%s\n" "#define HAVE_NEWLOCALE 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "putenv" "ac_cv_func_putenv"
+if test "x$ac_cv_func_putenv" = xyes
+then :
+  printf "%s\n" "#define HAVE_PUTENV 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "setenv" "ac_cv_func_setenv"
+if test "x$ac_cv_func_setenv" = xyes
+then :
+  printf "%s\n" "#define HAVE_SETENV 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "setlocale" "ac_cv_func_setlocale"
+if test "x$ac_cv_func_setlocale" = xyes
+then :
+  printf "%s\n" "#define HAVE_SETLOCALE 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "snprintf" "ac_cv_func_snprintf"
+if test "x$ac_cv_func_snprintf" = xyes
+then :
+  printf "%s\n" "#define HAVE_SNPRINTF 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "strnlen" "ac_cv_func_strnlen"
+if test "x$ac_cv_func_strnlen" = xyes
+then :
+  printf "%s\n" "#define HAVE_STRNLEN 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "uselocale" "ac_cv_func_uselocale"
+if test "x$ac_cv_func_uselocale" = xyes
+then :
+  printf "%s\n" "#define HAVE_USELOCALE 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "wcslen" "ac_cv_func_wcslen"
+if test "x$ac_cv_func_wcslen" = xyes
+then :
+  printf "%s\n" "#define HAVE_WCSLEN 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "wcsnlen" "ac_cv_func_wcsnlen"
+if test "x$ac_cv_func_wcsnlen" = xyes
+then :
+  printf "%s\n" "#define HAVE_WCSNLEN 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "mbrtowc" "ac_cv_func_mbrtowc"
+if test "x$ac_cv_func_mbrtowc" = xyes
+then :
+  printf "%s\n" "#define HAVE_MBRTOWC 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "wcrtomb" "ac_cv_func_wcrtomb"
+if test "x$ac_cv_func_wcrtomb" = xyes
+then :
+  printf "%s\n" "#define HAVE_WCRTOMB 1" >>confdefs.h
+
+fi
+
+
+      ac_fn_check_decl "$LINENO" "_snprintf" "ac_cv_have_decl__snprintf" "#include <stdio.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl__snprintf" = xyes
+then :
   ac_have_decl=1
-else
+else $as_nop
   ac_have_decl=0
 fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL__SNPRINTF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "_snwprintf" "ac_cv_have_decl__snwprintf" "#include <stdio.h>
-"
-if test "x$ac_cv_have_decl__snwprintf" = xyes; then :
+printf "%s\n" "#define HAVE_DECL__SNPRINTF $ac_have_decl" >>confdefs.h
+ac_fn_check_decl "$LINENO" "_snwprintf" "ac_cv_have_decl__snwprintf" "#include <stdio.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl__snwprintf" = xyes
+then :
   ac_have_decl=1
-else
+else $as_nop
   ac_have_decl=0
 fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL__SNWPRINTF $ac_have_decl
-_ACEOF
+printf "%s\n" "#define HAVE_DECL__SNWPRINTF $ac_have_decl" >>confdefs.h
 
 
-          ac_fn_c_check_decl "$LINENO" "getc_unlocked" "ac_cv_have_decl_getc_unlocked" "#include <stdio.h>
-"
-if test "x$ac_cv_have_decl_getc_unlocked" = xyes; then :
+          ac_fn_check_decl "$LINENO" "getc_unlocked" "ac_cv_have_decl_getc_unlocked" "#include <stdio.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_getc_unlocked" = xyes
+then :
   ac_have_decl=1
-else
+else $as_nop
   ac_have_decl=0
 fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_GETC_UNLOCKED $ac_have_decl
-_ACEOF
+printf "%s\n" "#define HAVE_DECL_GETC_UNLOCKED $ac_have_decl" >>confdefs.h
 
 
   case $gt_cv_func_printf_posix in
@@ -11948,69 +12871,73 @@ _ACEOF
 
 
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nl_langinfo and CODESET" >&5
-$as_echo_n "checking for nl_langinfo and CODESET... " >&6; }
-if ${am_cv_langinfo_codeset+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for nl_langinfo and CODESET" >&5
+printf %s "checking for nl_langinfo and CODESET... " >&6; }
+if test ${am_cv_langinfo_codeset+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <langinfo.h>
 int
-main ()
+main (void)
 {
 char* cs = nl_langinfo(CODESET); return !cs;
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   am_cv_langinfo_codeset=yes
-else
+else $as_nop
   am_cv_langinfo_codeset=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_langinfo_codeset" >&5
-$as_echo "$am_cv_langinfo_codeset" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_langinfo_codeset" >&5
+printf "%s\n" "$am_cv_langinfo_codeset" >&6; }
   if test $am_cv_langinfo_codeset = yes; then
 
-$as_echo "#define HAVE_LANGINFO_CODESET 1" >>confdefs.h
+printf "%s\n" "#define HAVE_LANGINFO_CODESET 1" >>confdefs.h
 
   fi
 
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LC_MESSAGES" >&5
-$as_echo_n "checking for LC_MESSAGES... " >&6; }
-if ${gt_cv_val_LC_MESSAGES+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for LC_MESSAGES" >&5
+printf %s "checking for LC_MESSAGES... " >&6; }
+if test ${gt_cv_val_LC_MESSAGES+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <locale.h>
 int
-main ()
+main (void)
 {
 return LC_MESSAGES
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   gt_cv_val_LC_MESSAGES=yes
-else
+else $as_nop
   gt_cv_val_LC_MESSAGES=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_val_LC_MESSAGES" >&5
-$as_echo "$gt_cv_val_LC_MESSAGES" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_val_LC_MESSAGES" >&5
+printf "%s\n" "$gt_cv_val_LC_MESSAGES" >&6; }
   if test $gt_cv_val_LC_MESSAGES = yes; then
 
-$as_echo "#define HAVE_LC_MESSAGES 1" >>confdefs.h
+printf "%s\n" "#define HAVE_LC_MESSAGES 1" >>confdefs.h
 
   fi
 
@@ -12043,11 +12970,12 @@ $as_echo "#define HAVE_LC_MESSAGES 1" >>confdefs.h
         if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args.
 set dummy ${ac_tool_prefix}windres; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_WINDRES+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_WINDRES+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$WINDRES"; then
   ac_cv_prog_WINDRES="$WINDRES" # Let the user override the test.
 else
@@ -12055,11 +12983,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_WINDRES="${ac_tool_prefix}windres"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
 fi
 WINDRES=$ac_cv_prog_WINDRES
 if test -n "$WINDRES"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WINDRES" >&5
-$as_echo "$WINDRES" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $WINDRES" >&5
+printf "%s\n" "$WINDRES" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
 
@@ -12083,11 +13015,12 @@ if test -z "$ac_cv_prog_WINDRES"; then
   ac_ct_WINDRES=$WINDRES
   # Extract the first word of "windres", so it can be a program name with args.
 set dummy windres; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_WINDRES+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_ac_ct_WINDRES+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -n "$ac_ct_WINDRES"; then
   ac_cv_prog_ac_ct_WINDRES="$ac_ct_WINDRES" # Let the user override the test.
 else
@@ -12095,11 +13028,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
     ac_cv_prog_ac_ct_WINDRES="windres"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
     break 2
   fi
 done
 fi
 ac_ct_WINDRES=$ac_cv_prog_ac_ct_WINDRES
 if test -n "$ac_ct_WINDRES"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_WINDRES" >&5
-$as_echo "$ac_ct_WINDRES" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_WINDRES" >&5
+printf "%s\n" "$ac_ct_WINDRES" >&6; }
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
 fi
 
   if test "x$ac_ct_WINDRES" = x; then
@@ -12122,8 +13059,8 @@ fi
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
     WINDRES=$ac_ct_WINDRES
 
 
 
-
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5
-$as_echo_n "checking for CFPreferencesCopyAppValue... " >&6; }
-if ${gt_cv_func_CFPreferencesCopyAppValue+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5
+printf %s "checking for CFPreferencesCopyAppValue... " >&6; }
+if test ${gt_cv_func_CFPreferencesCopyAppValue+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   gt_save_LIBS="$LIBS"
      LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <CoreFoundation/CFPreferences.h>
 int
-main ()
+main (void)
 {
 CFPreferencesCopyAppValue(NULL, NULL)
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   gt_cv_func_CFPreferencesCopyAppValue=yes
-else
+else $as_nop
   gt_cv_func_CFPreferencesCopyAppValue=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
      LIBS="$gt_save_LIBS"
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5
-$as_echo "$gt_cv_func_CFPreferencesCopyAppValue" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5
+printf "%s\n" "$gt_cv_func_CFPreferencesCopyAppValue" >&6; }
   if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then
 
-$as_echo "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h
+printf "%s\n" "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h
 
   fi
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyCurrent" >&5
-$as_echo_n "checking for CFLocaleCopyCurrent... " >&6; }
-if ${gt_cv_func_CFLocaleCopyCurrent+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyCurrent" >&5
+printf %s "checking for CFLocaleCopyCurrent... " >&6; }
+if test ${gt_cv_func_CFLocaleCopyCurrent+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   gt_save_LIBS="$LIBS"
      LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <CoreFoundation/CFLocale.h>
 int
-main ()
+main (void)
 {
 CFLocaleCopyCurrent();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   gt_cv_func_CFLocaleCopyCurrent=yes
-else
+else $as_nop
   gt_cv_func_CFLocaleCopyCurrent=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
      LIBS="$gt_save_LIBS"
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyCurrent" >&5
-$as_echo "$gt_cv_func_CFLocaleCopyCurrent" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyCurrent" >&5
+printf "%s\n" "$gt_cv_func_CFLocaleCopyCurrent" >&6; }
   if test $gt_cv_func_CFLocaleCopyCurrent = yes; then
 
-$as_echo "#define HAVE_CFLOCALECOPYCURRENT 1" >>confdefs.h
+printf "%s\n" "#define HAVE_CFLOCALECOPYCURRENT 1" >>confdefs.h
 
   fi
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyPreferredLanguages" >&5
-$as_echo_n "checking for CFLocaleCopyPreferredLanguages... " >&6; }
-if ${gt_cv_func_CFLocaleCopyPreferredLanguages+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyPreferredLanguages" >&5
+printf %s "checking for CFLocaleCopyPreferredLanguages... " >&6; }
+if test ${gt_cv_func_CFLocaleCopyPreferredLanguages+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   gt_save_LIBS="$LIBS"
      LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <CoreFoundation/CFLocale.h>
 int
-main ()
+main (void)
 {
 CFLocaleCopyPreferredLanguages();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   gt_cv_func_CFLocaleCopyPreferredLanguages=yes
-else
+else $as_nop
   gt_cv_func_CFLocaleCopyPreferredLanguages=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
      LIBS="$gt_save_LIBS"
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyPreferredLanguages" >&5
-$as_echo "$gt_cv_func_CFLocaleCopyPreferredLanguages" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyPreferredLanguages" >&5
+printf "%s\n" "$gt_cv_func_CFLocaleCopyPreferredLanguages" >&6; }
   if test $gt_cv_func_CFLocaleCopyPreferredLanguages = yes; then
 
-$as_echo "#define HAVE_CFLOCALECOPYPREFERREDLANGUAGES 1" >>confdefs.h
+printf "%s\n" "#define HAVE_CFLOCALECOPYPREFERREDLANGUAGES 1" >>confdefs.h
 
   fi
   INTL_MACOSX_LIBS=
@@ -12291,18 +13233,19 @@ $as_echo "#define HAVE_CFLOCALECOPYPREFERREDLANGUAGES 1" >>confdefs.h
     if test "$USE_NLS" = "yes"; then
     gt_use_preinstalled_gnugettext=no
 
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether included gettext is requested" >&5
-$as_echo_n "checking whether included gettext is requested... " >&6; }
+      { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether included gettext is requested" >&5
+printf %s "checking whether included gettext is requested... " >&6; }
 
 # Check whether --with-included-gettext was given.
-if test "${with_included_gettext+set}" = set; then :
+if test ${with_included_gettext+y}
+then :
   withval=$with_included_gettext; nls_cv_force_use_gnu_gettext=$withval
-else
+else $as_nop
   nls_cv_force_use_gnu_gettext=no
 fi
 
-      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $nls_cv_force_use_gnu_gettext" >&5
-$as_echo "$nls_cv_force_use_gnu_gettext" >&6; }
+      { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $nls_cv_force_use_gnu_gettext" >&5
+printf "%s\n" "$nls_cv_force_use_gnu_gettext" >&6; }
 
       nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
       if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
@@ -12324,11 +13267,12 @@ typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
           gt_expression_test_code=
         fi
 
-        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libc" >&5
-$as_echo_n "checking for GNU gettext in libc... " >&6; }
-if eval \${$gt_func_gnugettext_libc+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+        { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libc" >&5
+printf %s "checking for GNU gettext in libc... " >&6; }
+if eval test \${$gt_func_gnugettext_libc+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -12343,7 +13287,7 @@ extern int *_nl_domain_bindings;
 $gt_revision_test_code
 
 int
-main ()
+main (void)
 {
 
 bindtextdomain ("", "");
@@ -12353,17 +13297,18 @@ return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   eval "$gt_func_gnugettext_libc=yes"
-else
+else $as_nop
   eval "$gt_func_gnugettext_libc=no"
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 fi
 eval ac_res=\$$gt_func_gnugettext_libc
-              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
+              { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
 
         if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
 
@@ -12388,7 +13333,8 @@ $as_echo "$ac_res" >&6; }
 
 
 # Check whether --with-libintl-prefix was given.
-if test "${with_libintl_prefix+set}" = set; then :
+if test ${with_libintl_prefix+y}
+then :
   withval=$with_libintl_prefix;
     if test "X$withval" = "Xno"; then
       use_additional=no
 
 
 
-          { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libintl" >&5
-$as_echo_n "checking for GNU gettext in libintl... " >&6; }
-if eval \${$gt_func_gnugettext_libintl+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+          { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libintl" >&5
+printf %s "checking for GNU gettext in libintl... " >&6; }
+if eval test \${$gt_func_gnugettext_libintl+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   gt_save_CPPFLAGS="$CPPFLAGS"
             CPPFLAGS="$CPPFLAGS $INCINTL"
             gt_save_LIBS="$LIBS"
@@ -12853,7 +13800,7 @@ const char *_nl_expand_alias (const char *);
 $gt_revision_test_code
 
 int
-main ()
+main (void)
 {
 
 bindtextdomain ("", "");
@@ -12863,12 +13810,13 @@ return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   eval "$gt_func_gnugettext_libintl=yes"
-else
+else $as_nop
   eval "$gt_func_gnugettext_libintl=no"
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
                         if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then
               LIBS="$LIBS $LIBICONV"
@@ -12890,7 +13838,7 @@ const char *_nl_expand_alias (const char *);
 $gt_revision_test_code
 
 int
-main ()
+main (void)
 {
 
 bindtextdomain ("", "");
@@ -12900,21 +13848,22 @@ return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   LIBINTL="$LIBINTL $LIBICONV"
                  LTLIBINTL="$LTLIBINTL $LTLIBICONV"
                  eval "$gt_func_gnugettext_libintl=yes"
 
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
             fi
             CPPFLAGS="$gt_save_CPPFLAGS"
             LIBS="$gt_save_LIBS"
 fi
 eval ac_res=\$$gt_func_gnugettext_libintl
-              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
+              { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
         fi
 
                                         if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \
@@ -12960,20 +13909,20 @@ $as_echo "$ac_res" >&6; }
     if test "$gt_use_preinstalled_gnugettext" = "yes" \
        || test "$nls_cv_use_gnu_gettext" = "yes"; then
 
-$as_echo "#define ENABLE_NLS 1" >>confdefs.h
+printf "%s\n" "#define ENABLE_NLS 1" >>confdefs.h
 
     else
       USE_NLS=no
     fi
   fi
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use NLS" >&5
-$as_echo_n "checking whether to use NLS... " >&6; }
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5
-$as_echo "$USE_NLS" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to use NLS" >&5
+printf %s "checking whether to use NLS... " >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5
+printf "%s\n" "$USE_NLS" >&6; }
   if test "$USE_NLS" = "yes"; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking where the gettext function comes from" >&5
-$as_echo_n "checking where the gettext function comes from... " >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking where the gettext function comes from" >&5
+printf %s "checking where the gettext function comes from... " >&6; }
     if test "$gt_use_preinstalled_gnugettext" = "yes"; then
       if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
         gt_source="external libintl"
@@ -12983,18 +13932,18 @@ $as_echo_n "checking where the gettext function comes from... " >&6; }
     else
       gt_source="included intl directory"
     fi
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_source" >&5
-$as_echo "$gt_source" >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_source" >&5
+printf "%s\n" "$gt_source" >&6; }
   fi
 
   if test "$USE_NLS" = "yes"; then
 
     if test "$gt_use_preinstalled_gnugettext" = "yes"; then
       if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
-        { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libintl" >&5
-$as_echo_n "checking how to link with libintl... " >&6; }
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBINTL" >&5
-$as_echo "$LIBINTL" >&6; }
+        { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to link with libintl" >&5
+printf %s "checking how to link with libintl... " >&6; }
+        { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIBINTL" >&5
+printf "%s\n" "$LIBINTL" >&6; }
 
   for element in $INCINTL; do
     haveit=
@@ -13021,10 +13970,10 @@ $as_echo "$LIBINTL" >&6; }
       fi
 
 
-$as_echo "#define HAVE_GETTEXT 1" >>confdefs.h
+printf "%s\n" "#define HAVE_GETTEXT 1" >>confdefs.h
 
 
-$as_echo "#define HAVE_DCGETTEXT 1" >>confdefs.h
+printf "%s\n" "#define HAVE_DCGETTEXT 1" >>confdefs.h
 
     fi
 
@@ -13072,19 +14021,20 @@ $as_echo "#define HAVE_DCGETTEXT 1" >>confdefs.h
 
 ac_header_dirent=no
 for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do
-  as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh`
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5
-$as_echo_n "checking for $ac_hdr that defines DIR... " >&6; }
-if eval \${$as_ac_Header+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  as_ac_Header=`printf "%s\n" "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5
+printf %s "checking for $ac_hdr that defines DIR... " >&6; }
+if eval test \${$as_ac_Header+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <sys/types.h>
 #include <$ac_hdr>
 
 int
-main ()
+main (void)
 {
 if ((DIR *) 0)
 return 0;
@@ -13092,19 +14042,21 @@ return 0;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   eval "$as_ac_Header=yes"
-else
+else $as_nop
   eval "$as_ac_Header=no"
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
 eval ac_res=\$$as_ac_Header
-              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+              { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if eval test \"x\$"$as_ac_Header"\" = x"yes"
+then :
   cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1
+#define `printf "%s\n" "HAVE_$ac_hdr" | $as_tr_cpp` 1
 _ACEOF
 
 ac_header_dirent=$ac_hdr; break
 done
 # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
 if test $ac_header_dirent = dirent.h; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5
-$as_echo_n "checking for library containing opendir... " >&6; }
-if ${ac_cv_search_opendir+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5
+printf %s "checking for library containing opendir... " >&6; }
+if test ${ac_cv_search_opendir+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_func_search_save_LIBS=$LIBS
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
@@ -13125,56 +14078,59 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char opendir ();
 int
-main ()
+main (void)
 {
 return opendir ();
   ;
   return 0;
 }
 _ACEOF
-for ac_lib in '' dir; do
+for ac_lib in '' dir
+do
   if test -z "$ac_lib"; then
     ac_res="none required"
   else
     ac_res=-l$ac_lib
     LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
   fi
-  if ac_fn_c_try_link "$LINENO"; then :
+  if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_search_opendir=$ac_res
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext
-  if ${ac_cv_search_opendir+:} false; then :
+  if test ${ac_cv_search_opendir+y}
+then :
   break
 fi
 done
-if ${ac_cv_search_opendir+:} false; then :
+if test ${ac_cv_search_opendir+y}
+then :
 
-else
+else $as_nop
   ac_cv_search_opendir=no
 fi
 rm conftest.$ac_ext
 LIBS=$ac_func_search_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5
-$as_echo "$ac_cv_search_opendir" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5
+printf "%s\n" "$ac_cv_search_opendir" >&6; }
 ac_res=$ac_cv_search_opendir
-if test "$ac_res" != no; then :
+if test "$ac_res" != no
+then :
   test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
 
 fi
 
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5
-$as_echo_n "checking for library containing opendir... " >&6; }
-if ${ac_cv_search_opendir+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5
+printf %s "checking for library containing opendir... " >&6; }
+if test ${ac_cv_search_opendir+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_func_search_save_LIBS=$LIBS
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
@@ -13182,196 +14138,315 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char opendir ();
 int
-main ()
+main (void)
 {
 return opendir ();
   ;
   return 0;
 }
 _ACEOF
-for ac_lib in '' x; do
+for ac_lib in '' x
+do
   if test -z "$ac_lib"; then
     ac_res="none required"
   else
     ac_res=-l$ac_lib
     LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
   fi
-  if ac_fn_c_try_link "$LINENO"; then :
+  if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_search_opendir=$ac_res
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext
-  if ${ac_cv_search_opendir+:} false; then :
+  if test ${ac_cv_search_opendir+y}
+then :
   break
 fi
 done
-if ${ac_cv_search_opendir+:} false; then :
+if test ${ac_cv_search_opendir+y}
+then :
 
-else
+else $as_nop
   ac_cv_search_opendir=no
 fi
 rm conftest.$ac_ext
 LIBS=$ac_func_search_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5
-$as_echo "$ac_cv_search_opendir" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5
+printf "%s\n" "$ac_cv_search_opendir" >&6; }
 ac_res=$ac_cv_search_opendir
-if test "$ac_res" != no; then :
+if test "$ac_res" != no
+then :
   test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
 
 fi
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5
-$as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; }
-if ${ac_cv_header_time+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <sys/types.h>
-#include <sys/time.h>
-#include <time.h>
 
-int
-main ()
-{
-if ((struct tm *) 0)
-return 0;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_header_time=yes
-else
-  ac_cv_header_time=no
+ac_fn_c_check_header_compile "$LINENO" "sys/mkdev.h" "ac_cv_header_sys_mkdev_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_mkdev_h" = xyes
+then :
+
+printf "%s\n" "#define MAJOR_IN_MKDEV 1" >>confdefs.h
+
+fi
+
+if test $ac_cv_header_sys_mkdev_h = no; then
+  ac_fn_c_check_header_compile "$LINENO" "sys/sysmacros.h" "ac_cv_header_sys_sysmacros_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_sysmacros_h" = xyes
+then :
+
+printf "%s\n" "#define MAJOR_IN_SYSMACROS 1" >>confdefs.h
+
+fi
+
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+
+
+ ac_fn_c_check_header_compile "$LINENO" "inttypes.h" "ac_cv_header_inttypes_h" "$ac_includes_default"
+if test "x$ac_cv_header_inttypes_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_INTTYPES_H 1" >>confdefs.h
+
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time" >&5
-$as_echo "$ac_cv_header_time" >&6; }
-if test $ac_cv_header_time = yes; then
 
-$as_echo "#define TIME_WITH_SYS_TIME 1" >>confdefs.h
+
+
+ac_fn_c_check_header_compile "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default"
+if test "x$ac_cv_header_unistd_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_UNISTD_H 1" >>confdefs.h
 
 fi
+ac_fn_c_check_header_compile "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default"
+if test "x$ac_cv_header_stdlib_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_STDLIB_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "stdarg.h" "ac_cv_header_stdarg_h" "$ac_includes_default"
+if test "x$ac_cv_header_stdarg_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_STDARG_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "varargs.h" "ac_cv_header_varargs_h" "$ac_includes_default"
+if test "x$ac_cv_header_varargs_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_VARARGS_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "limits.h" "ac_cv_header_limits_h" "$ac_includes_default"
+if test "x$ac_cv_header_limits_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_LIMITS_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "string.h" "ac_cv_header_string_h" "$ac_includes_default"
+if test "x$ac_cv_header_string_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_STRING_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "memory.h" "ac_cv_header_memory_h" "$ac_includes_default"
+if test "x$ac_cv_header_memory_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_MEMORY_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "locale.h" "ac_cv_header_locale_h" "$ac_includes_default"
+if test "x$ac_cv_header_locale_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_LOCALE_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "termcap.h" "ac_cv_header_termcap_h" "$ac_includes_default"
+if test "x$ac_cv_header_termcap_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_TERMCAP_H 1" >>confdefs.h
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether sys/types.h defines makedev" >&5
-$as_echo_n "checking whether sys/types.h defines makedev... " >&6; }
-if ${ac_cv_header_sys_types_h_makedev+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <sys/types.h>
-int
-main ()
-{
-return makedev(0, 0);
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_header_sys_types_h_makedev=yes
-else
-  ac_cv_header_sys_types_h_makedev=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
+ac_fn_c_check_header_compile "$LINENO" "termio.h" "ac_cv_header_termio_h" "$ac_includes_default"
+if test "x$ac_cv_header_termio_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_TERMIO_H 1" >>confdefs.h
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_types_h_makedev" >&5
-$as_echo "$ac_cv_header_sys_types_h_makedev" >&6; }
+ac_fn_c_check_header_compile "$LINENO" "termios.h" "ac_cv_header_termios_h" "$ac_includes_default"
+if test "x$ac_cv_header_termios_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_TERMIOS_H 1" >>confdefs.h
 
-if test $ac_cv_header_sys_types_h_makedev = no; then
-ac_fn_c_check_header_mongrel "$LINENO" "sys/mkdev.h" "ac_cv_header_sys_mkdev_h" "$ac_includes_default"
-if test "x$ac_cv_header_sys_mkdev_h" = xyes; then :
+fi
+ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default"
+if test "x$ac_cv_header_dlfcn_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_DLFCN_H 1" >>confdefs.h
 
-$as_echo "#define MAJOR_IN_MKDEV 1" >>confdefs.h
+fi
+ac_fn_c_check_header_compile "$LINENO" "stdbool.h" "ac_cv_header_stdbool_h" "$ac_includes_default"
+if test "x$ac_cv_header_stdbool_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_STDBOOL_H 1" >>confdefs.h
 
 fi
+ac_fn_c_check_header_compile "$LINENO" "stddef.h" "ac_cv_header_stddef_h" "$ac_includes_default"
+if test "x$ac_cv_header_stddef_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_STDDEF_H 1" >>confdefs.h
 
+fi
+ac_fn_c_check_header_compile "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default"
+if test "x$ac_cv_header_stdint_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_STDINT_H 1" >>confdefs.h
 
+fi
+ac_fn_c_check_header_compile "$LINENO" "netdb.h" "ac_cv_header_netdb_h" "$ac_includes_default"
+if test "x$ac_cv_header_netdb_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_NETDB_H 1" >>confdefs.h
 
-  if test $ac_cv_header_sys_mkdev_h = no; then
-    ac_fn_c_check_header_mongrel "$LINENO" "sys/sysmacros.h" "ac_cv_header_sys_sysmacros_h" "$ac_includes_default"
-if test "x$ac_cv_header_sys_sysmacros_h" = xyes; then :
+fi
+ac_fn_c_check_header_compile "$LINENO" "pwd.h" "ac_cv_header_pwd_h" "$ac_includes_default"
+if test "x$ac_cv_header_pwd_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_PWD_H 1" >>confdefs.h
 
-$as_echo "#define MAJOR_IN_SYSMACROS 1" >>confdefs.h
+fi
+ac_fn_c_check_header_compile "$LINENO" "grp.h" "ac_cv_header_grp_h" "$ac_includes_default"
+if test "x$ac_cv_header_grp_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_GRP_H 1" >>confdefs.h
 
 fi
+ac_fn_c_check_header_compile "$LINENO" "strings.h" "ac_cv_header_strings_h" "$ac_includes_default"
+if test "x$ac_cv_header_strings_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_STRINGS_H 1" >>confdefs.h
 
+fi
+ac_fn_c_check_header_compile "$LINENO" "regex.h" "ac_cv_header_regex_h" "$ac_includes_default"
+if test "x$ac_cv_header_regex_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_REGEX_H 1" >>confdefs.h
 
-  fi
 fi
+ac_fn_c_check_header_compile "$LINENO" "syslog.h" "ac_cv_header_syslog_h" "$ac_includes_default"
+if test "x$ac_cv_header_syslog_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_SYSLOG_H 1" >>confdefs.h
 
+fi
+ac_fn_c_check_header_compile "$LINENO" "ulimit.h" "ac_cv_header_ulimit_h" "$ac_includes_default"
+if test "x$ac_cv_header_ulimit_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_ULIMIT_H 1" >>confdefs.h
 
+fi
 
- for ac_header in inttypes.h
-do :
-  ac_fn_c_check_header_mongrel "$LINENO" "inttypes.h" "ac_cv_header_inttypes_h" "$ac_includes_default"
-if test "x$ac_cv_header_inttypes_h" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_INTTYPES_H 1
-_ACEOF
+ac_fn_c_check_header_compile "$LINENO" "sys/pte.h" "ac_cv_header_sys_pte_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_pte_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_SYS_PTE_H 1" >>confdefs.h
 
 fi
+ac_fn_c_check_header_compile "$LINENO" "sys/stream.h" "ac_cv_header_sys_stream_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_stream_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_SYS_STREAM_H 1" >>confdefs.h
 
-done
+fi
+ac_fn_c_check_header_compile "$LINENO" "sys/select.h" "ac_cv_header_sys_select_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_select_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_SYS_SELECT_H 1" >>confdefs.h
 
+fi
+ac_fn_c_check_header_compile "$LINENO" "sys/file.h" "ac_cv_header_sys_file_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_file_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_SYS_FILE_H 1" >>confdefs.h
 
+fi
+ac_fn_c_check_header_compile "$LINENO" "sys/ioctl.h" "ac_cv_header_sys_ioctl_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_ioctl_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_SYS_IOCTL_H 1" >>confdefs.h
 
-for ac_header in unistd.h stdlib.h stdarg.h varargs.h limits.h string.h \
-                memory.h locale.h termcap.h termio.h termios.h dlfcn.h \
-                stdbool.h stddef.h stdint.h netdb.h pwd.h grp.h strings.h \
-                regex.h syslog.h ulimit.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
+fi
+ac_fn_c_check_header_compile "$LINENO" "sys/mman.h" "ac_cv_header_sys_mman_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_mman_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_SYS_MMAN_H 1" >>confdefs.h
 
 fi
+ac_fn_c_check_header_compile "$LINENO" "sys/param.h" "ac_cv_header_sys_param_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_param_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_SYS_PARAM_H 1" >>confdefs.h
 
-done
+fi
+ac_fn_c_check_header_compile "$LINENO" "sys/random.h" "ac_cv_header_sys_random_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_random_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_SYS_RANDOM_H 1" >>confdefs.h
 
-for ac_header in sys/pte.h sys/stream.h sys/select.h sys/file.h sys/ioctl.h \
-                sys/mman.h sys/param.h sys/random.h sys/socket.h sys/stat.h \
-                sys/time.h sys/times.h sys/types.h sys/wait.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
+fi
+ac_fn_c_check_header_compile "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_socket_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_SYS_SOCKET_H 1" >>confdefs.h
 
 fi
+ac_fn_c_check_header_compile "$LINENO" "sys/stat.h" "ac_cv_header_sys_stat_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_stat_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_SYS_STAT_H 1" >>confdefs.h
 
-done
+fi
+ac_fn_c_check_header_compile "$LINENO" "sys/time.h" "ac_cv_header_sys_time_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_time_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_SYS_TIME_H 1" >>confdefs.h
 
-for ac_header in netinet/in.h arpa/inet.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
+fi
+ac_fn_c_check_header_compile "$LINENO" "sys/times.h" "ac_cv_header_sys_times_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_times_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_SYS_TIMES_H 1" >>confdefs.h
 
 fi
+ac_fn_c_check_header_compile "$LINENO" "sys/types.h" "ac_cv_header_sys_types_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_types_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_SYS_TYPES_H 1" >>confdefs.h
 
-done
+fi
+ac_fn_c_check_header_compile "$LINENO" "sys/wait.h" "ac_cv_header_sys_wait_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_wait_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_SYS_WAIT_H 1" >>confdefs.h
+
+fi
+
+ac_fn_c_check_header_compile "$LINENO" "netinet/in.h" "ac_cv_header_netinet_in_h" "$ac_includes_default"
+if test "x$ac_cv_header_netinet_in_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_NETINET_IN_H 1" >>confdefs.h
+
+fi
+ac_fn_c_check_header_compile "$LINENO" "arpa/inet.h" "ac_cv_header_arpa_inet_h" "$ac_includes_default"
+if test "x$ac_cv_header_arpa_inet_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_ARPA_INET_H 1" >>confdefs.h
+
+fi
 
 
 ac_fn_c_check_header_compile "$LINENO" "sys/ptem.h" "ac_cv_header_sys_ptem_h" "
@@ -13380,37 +14455,38 @@ ac_fn_c_check_header_compile "$LINENO" "sys/ptem.h" "ac_cv_header_sys_ptem_h" "
 #endif
 
 "
-if test "x$ac_cv_header_sys_ptem_h" = xyes; then :
+if test "x$ac_cv_header_sys_ptem_h" = xyes
+then :
 
 fi
 
 
-
 ac_fn_c_check_header_compile "$LINENO" "sys/resource.h" "ac_cv_header_sys_resource_h" "
 #if HAVE_SYS_TIME_H
 #  include <sys/time.h>
 #endif
 
 "
-if test "x$ac_cv_header_sys_resource_h" = xyes; then :
-  $as_echo "#define HAVE_SYS_RESOURCE_H 1" >>confdefs.h
+if test "x$ac_cv_header_sys_resource_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_SYS_RESOURCE_H 1" >>confdefs.h
 
 fi
 
 
-
 # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
 # for constant arguments.  Useless!
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5
-$as_echo_n "checking for working alloca.h... " >&6; }
-if ${ac_cv_working_alloca_h+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5
+printf %s "checking for working alloca.h... " >&6; }
+if test ${ac_cv_working_alloca_h+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <alloca.h>
 int
-main ()
+main (void)
 {
 char *p = (char *) alloca (2 * sizeof (int));
                          if (p) return 0;
@@ -13418,52 +14494,52 @@ char *p = (char *) alloca (2 * sizeof (int));
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_working_alloca_h=yes
-else
+else $as_nop
   ac_cv_working_alloca_h=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5
-$as_echo "$ac_cv_working_alloca_h" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5
+printf "%s\n" "$ac_cv_working_alloca_h" >&6; }
 if test $ac_cv_working_alloca_h = yes; then
 
-$as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h
+printf "%s\n" "#define HAVE_ALLOCA_H 1" >>confdefs.h
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5
-$as_echo_n "checking for alloca... " >&6; }
-if ${ac_cv_func_alloca_works+:} false; then :
-  $as_echo_n "(cached) " >&6
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5
+printf %s "checking for alloca... " >&6; }
+if test ${ac_cv_func_alloca_works+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if test $ac_cv_working_alloca_h = yes; then
+  ac_cv_func_alloca_works=yes
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#ifdef __GNUC__
-# define alloca __builtin_alloca
-#else
-# ifdef _MSC_VER
+#include <stdlib.h>
+#include <stddef.h>
+#ifndef alloca
+# ifdef __GNUC__
+#  define alloca __builtin_alloca
+# elif defined _MSC_VER
 #  include <malloc.h>
 #  define alloca _alloca
 # else
-#  ifdef HAVE_ALLOCA_H
-#   include <alloca.h>
-#  else
-#   ifdef _AIX
- #pragma alloca
-#   else
-#    ifndef alloca /* predefined by HP cc +Olibcalls */
-void *alloca (size_t);
-#    endif
-#   endif
+#  ifdef  __cplusplus
+extern "C"
 #  endif
+void *alloca (size_t);
 # endif
 #endif
 
 int
-main ()
+main (void)
 {
 char *p = (char *) alloca (1);
                                    if (p) return 0;
@@ -13471,20 +14547,22 @@ char *p = (char *) alloca (1);
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_func_alloca_works=yes
-else
+else $as_nop
   ac_cv_func_alloca_works=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5
-$as_echo "$ac_cv_func_alloca_works" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5
+printf "%s\n" "$ac_cv_func_alloca_works" >&6; }
+fi
 
 if test $ac_cv_func_alloca_works = yes; then
 
-$as_echo "#define HAVE_ALLOCA 1" >>confdefs.h
+printf "%s\n" "#define HAVE_ALLOCA 1" >>confdefs.h
 
 else
   # The SVR3 libPW and SVR4 libucb both contain incompatible functions
@@ -13494,58 +14572,19 @@ else
 
 ALLOCA=\${LIBOBJDIR}alloca.$ac_objext
 
-$as_echo "#define C_ALLOCA 1" >>confdefs.h
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5
-$as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; }
-if ${ac_cv_os_cray+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#if defined CRAY && ! defined CRAY2
-webecray
-#else
-wenotbecray
-#endif
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "webecray" >/dev/null 2>&1; then :
-  ac_cv_os_cray=yes
-else
-  ac_cv_os_cray=no
-fi
-rm -f conftest*
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5
-$as_echo "$ac_cv_os_cray" >&6; }
-if test $ac_cv_os_cray = yes; then
-  for ac_func in _getb67 GETB67 getb67; do
-    as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-
-cat >>confdefs.h <<_ACEOF
-#define CRAY_STACKSEG_END $ac_func
-_ACEOF
-
-    break
-fi
+printf "%s\n" "#define C_ALLOCA 1" >>confdefs.h
 
-  done
-fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5
-$as_echo_n "checking stack direction for C alloca... " >&6; }
-if ${ac_cv_c_stack_direction+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5
+printf %s "checking stack direction for C alloca... " >&6; }
+if test ${ac_cv_c_stack_direction+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if test "$cross_compiling" = yes
+then :
   ac_cv_c_stack_direction=0
-else
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $ac_includes_default
@@ -13566,9 +14605,10 @@ main (int argc, char **argv)
   return find_stack_direction (0, argc + !argv + 20) < 0;
 }
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
   ac_cv_c_stack_direction=1
-else
+else $as_nop
   ac_cv_c_stack_direction=-1
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
@@ -13576,72 +14616,67 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
 fi
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5
-$as_echo "$ac_cv_c_stack_direction" >&6; }
-cat >>confdefs.h <<_ACEOF
-#define STACK_DIRECTION $ac_cv_c_stack_direction
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5
+printf "%s\n" "$ac_cv_c_stack_direction" >&6; }
+printf "%s\n" "#define STACK_DIRECTION $ac_cv_c_stack_direction" >>confdefs.h
 
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for uid_t in sys/types.h" >&5
-$as_echo_n "checking for uid_t in sys/types.h... " >&6; }
-if ${ac_cv_type_uid_t+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for uid_t in sys/types.h" >&5
+printf %s "checking for uid_t in sys/types.h... " >&6; }
+if test ${ac_cv_type_uid_t+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <sys/types.h>
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "uid_t" >/dev/null 2>&1; then :
+  $EGREP "uid_t" >/dev/null 2>&1
+then :
   ac_cv_type_uid_t=yes
-else
+else $as_nop
   ac_cv_type_uid_t=no
 fi
-rm -f conftest*
+rm -rf conftest*
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_uid_t" >&5
-$as_echo "$ac_cv_type_uid_t" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_uid_t" >&5
+printf "%s\n" "$ac_cv_type_uid_t" >&6; }
 if test $ac_cv_type_uid_t = no; then
 
-$as_echo "#define uid_t int" >>confdefs.h
-
-
-$as_echo "#define gid_t int" >>confdefs.h
+printf "%s\n" "#define uid_t int" >>confdefs.h
 
-fi
 
-for ac_header in unistd.h
-do :
-  ac_fn_c_check_header_mongrel "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default"
-if test "x$ac_cv_header_unistd_h" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_UNISTD_H 1
-_ACEOF
+printf "%s\n" "#define gid_t int" >>confdefs.h
 
 fi
 
-done
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working chown" >&5
-$as_echo_n "checking for working chown... " >&6; }
-if ${ac_cv_func_chown_works+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
-  ac_cv_func_chown_works=no
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working chown" >&5
+printf %s "checking for working chown... " >&6; }
+if test ${ac_cv_func_chown_works+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if test "$cross_compiling" = yes
+then :
+  case "$host_os" in # ((
+                         # Guess yes on glibc systems.
+                 *-gnu*) ac_cv_func_chown_works=yes ;;
+                         # If we don't know, assume the worst.
+                 *)      ac_cv_func_chown_works=no ;;
+               esac
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $ac_includes_default
 #include <fcntl.h>
 
 int
-main ()
+main (void)
 {
   char *f = "conftest.chown";
   struct stat before, after;
@@ -13660,9 +14695,10 @@ main ()
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
   ac_cv_func_chown_works=yes
-else
+else $as_nop
   ac_cv_func_chown_works=no
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
 rm -f conftest.chown
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_chown_works" >&5
-$as_echo "$ac_cv_func_chown_works" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_chown_works" >&5
+printf "%s\n" "$ac_cv_func_chown_works" >&6; }
 if test $ac_cv_func_chown_works = yes; then
 
-$as_echo "#define HAVE_CHOWN 1" >>confdefs.h
+printf "%s\n" "#define HAVE_CHOWN 1" >>confdefs.h
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether getpgrp requires zero arguments" >&5
-$as_echo_n "checking whether getpgrp requires zero arguments... " >&6; }
-if ${ac_cv_func_getpgrp_void+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether getpgrp requires zero arguments" >&5
+printf %s "checking whether getpgrp requires zero arguments... " >&6; }
+if test ${ac_cv_func_getpgrp_void+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   # Use it with a single arg.
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $ac_includes_default
 int
-main ()
+main (void)
 {
 getpgrp (0);
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   ac_cv_func_getpgrp_void=no
-else
+else $as_nop
   ac_cv_func_getpgrp_void=yes
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_getpgrp_void" >&5
-$as_echo "$ac_cv_func_getpgrp_void" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_getpgrp_void" >&5
+printf "%s\n" "$ac_cv_func_getpgrp_void" >&6; }
 if test $ac_cv_func_getpgrp_void = yes; then
 
-$as_echo "#define GETPGRP_VOID 1" >>confdefs.h
-
-fi
+printf "%s\n" "#define GETPGRP_VOID 1" >>confdefs.h
 
-if ${ac_cv_func_setvbuf_reversed+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_cv_func_setvbuf_reversed=no
 fi
 
 
-for ac_func in vprintf
-do :
-  ac_fn_c_check_func "$LINENO" "vprintf" "ac_cv_func_vprintf"
-if test "x$ac_cv_func_vprintf" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_VPRINTF 1
-_ACEOF
 
-ac_fn_c_check_func "$LINENO" "_doprnt" "ac_cv_func__doprnt"
-if test "x$ac_cv_func__doprnt" = xyes; then :
+if test "x$ac_cv_func_vprintf" = xno
+then :
+  ac_fn_c_check_func "$LINENO" "_doprnt" "ac_cv_func__doprnt"
+if test "x$ac_cv_func__doprnt" = xyes
+then :
 
-$as_echo "#define HAVE_DOPRNT 1" >>confdefs.h
+printf "%s\n" "#define HAVE_DOPRNT 1" >>confdefs.h
 
 fi
 
 fi
-done
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working strcoll" >&5
-$as_echo_n "checking for working strcoll... " >&6; }
-if ${ac_cv_func_strcoll_works+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
-  ac_cv_func_strcoll_works=no
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working strcoll" >&5
+printf %s "checking for working strcoll... " >&6; }
+if test ${ac_cv_func_strcoll_works+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if test "$cross_compiling" = yes
+then :
+  case "$host_os" in # ((
+                         # Guess yes on glibc systems.
+                 *-gnu*) ac_cv_func_strcoll_works=yes ;;
+                         # If we don't know, assume the worst.
+                 *)      ac_cv_func_strcoll_works=no ;;
+               esac
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $ac_includes_default
 int
-main ()
+main (void)
 {
 return (strcoll ("abc", "def") >= 0 ||
         strcoll ("ABC", "DEF") >= 0 ||
@@ -13760,9 +14792,10 @@ return (strcoll ("abc", "def") >= 0 ||
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
   ac_cv_func_strcoll_works=yes
-else
+else $as_nop
   ac_cv_func_strcoll_works=no
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
@@ -13770,11 +14803,11 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
 fi
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_strcoll_works" >&5
-$as_echo "$ac_cv_func_strcoll_works" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_strcoll_works" >&5
+printf "%s\n" "$ac_cv_func_strcoll_works" >&6; }
 if test $ac_cv_func_strcoll_works = yes; then
 
-$as_echo "#define HAVE_STRCOLL 1" >>confdefs.h
+printf "%s\n" "#define HAVE_STRCOLL 1" >>confdefs.h
 
 fi
 
@@ -13791,23 +14824,24 @@ if test "$ac_cv_func_alloca_works" = "no" && test "$opt_bash_malloc" = "no"; the
 fi
 
 if test "$ac_cv_func_vprintf" = no; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for declaration of vprintf in stdio.h" >&5
-$as_echo_n "checking for declaration of vprintf in stdio.h... " >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for declaration of vprintf in stdio.h" >&5
+printf %s "checking for declaration of vprintf in stdio.h... " >&6; }
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdio.h>
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "[int[        ]*vprintf[^a-zA-Z0-9]]" >/dev/null 2>&1; then :
+  $EGREP "[int[        ]*vprintf[^a-zA-Z0-9]]" >/dev/null 2>&1
+then :
   ac_cv_func_vprintf=yes
 fi
-rm -f conftest*
+rm -rf conftest*
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_vprintf" >&5
-$as_echo "$ac_cv_func_vprintf" >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_vprintf" >&5
+printf "%s\n" "$ac_cv_func_vprintf" >&6; }
     if test $ac_cv_func_vprintf = yes; then
-       $as_echo "#define HAVE_VPRINTF 1" >>confdefs.h
+       printf "%s\n" "#define HAVE_VPRINTF 1" >>confdefs.h
 
     fi
 fi
@@ -13821,83 +14855,189 @@ esac
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking return type of signal handlers" >&5
-$as_echo_n "checking return type of signal handlers... " >&6; }
-if ${ac_cv_type_signal+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <sys/types.h>
-#include <signal.h>
+ac_fn_c_check_func "$LINENO" "__setostype" "ac_cv_func___setostype"
+if test "x$ac_cv_func___setostype" = xyes
+then :
+  printf "%s\n" "#define HAVE_SETOSTYPE 1" >>confdefs.h
+
+fi
+
+ac_fn_c_check_func "$LINENO" "wait3" "ac_cv_func_wait3"
+if test "x$ac_cv_func_wait3" = xyes
+then :
+  printf "%s\n" "#define HAVE_WAIT3 1" >>confdefs.h
 
-int
-main ()
-{
-return *(signal (0, 0)) (0) == 1;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_type_signal=int
-else
-  ac_cv_type_signal=void
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+
+ac_fn_c_check_func "$LINENO" "mkfifo" "ac_cv_func_mkfifo"
+if test "x$ac_cv_func_mkfifo" = xyes
+then :
+  printf "%s\n" "#define HAVE_MKFIFO 1" >>confdefs.h
+
+else $as_nop
+  printf "%s\n" "#define MKFIFO_MISSING 1" >>confdefs.h
+
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_signal" >&5
-$as_echo "$ac_cv_type_signal" >&6; }
 
-cat >>confdefs.h <<_ACEOF
-#define RETSIGTYPE $ac_cv_type_signal
-_ACEOF
 
+ac_fn_c_check_func "$LINENO" "dup2" "ac_cv_func_dup2"
+if test "x$ac_cv_func_dup2" = xyes
+then :
+  printf "%s\n" "#define HAVE_DUP2 1" >>confdefs.h
 
+fi
+ac_fn_c_check_func "$LINENO" "eaccess" "ac_cv_func_eaccess"
+if test "x$ac_cv_func_eaccess" = xyes
+then :
+  printf "%s\n" "#define HAVE_EACCESS 1" >>confdefs.h
 
-ac_fn_c_check_func "$LINENO" "__setostype" "ac_cv_func___setostype"
-if test "x$ac_cv_func___setostype" = xyes; then :
-  $as_echo "#define HAVE_SETOSTYPE 1" >>confdefs.h
+fi
+ac_fn_c_check_func "$LINENO" "fcntl" "ac_cv_func_fcntl"
+if test "x$ac_cv_func_fcntl" = xyes
+then :
+  printf "%s\n" "#define HAVE_FCNTL 1" >>confdefs.h
 
 fi
+ac_fn_c_check_func "$LINENO" "getdtablesize" "ac_cv_func_getdtablesize"
+if test "x$ac_cv_func_getdtablesize" = xyes
+then :
+  printf "%s\n" "#define HAVE_GETDTABLESIZE 1" >>confdefs.h
 
-ac_fn_c_check_func "$LINENO" "wait3" "ac_cv_func_wait3"
-if test "x$ac_cv_func_wait3" = xyes; then :
-  $as_echo "#define HAVE_WAIT3 1" >>confdefs.h
+fi
+ac_fn_c_check_func "$LINENO" "getentropy" "ac_cv_func_getentropy"
+if test "x$ac_cv_func_getentropy" = xyes
+then :
+  printf "%s\n" "#define HAVE_GETENTROPY 1" >>confdefs.h
 
 fi
+ac_fn_c_check_func "$LINENO" "getgroups" "ac_cv_func_getgroups"
+if test "x$ac_cv_func_getgroups" = xyes
+then :
+  printf "%s\n" "#define HAVE_GETGROUPS 1" >>confdefs.h
 
+fi
+ac_fn_c_check_func "$LINENO" "gethostname" "ac_cv_func_gethostname"
+if test "x$ac_cv_func_gethostname" = xyes
+then :
+  printf "%s\n" "#define HAVE_GETHOSTNAME 1" >>confdefs.h
 
-ac_fn_c_check_func "$LINENO" "mkfifo" "ac_cv_func_mkfifo"
-if test "x$ac_cv_func_mkfifo" = xyes; then :
-  $as_echo "#define HAVE_MKFIFO 1" >>confdefs.h
+fi
+ac_fn_c_check_func "$LINENO" "getpagesize" "ac_cv_func_getpagesize"
+if test "x$ac_cv_func_getpagesize" = xyes
+then :
+  printf "%s\n" "#define HAVE_GETPAGESIZE 1" >>confdefs.h
 
-else
-  $as_echo "#define MKFIFO_MISSING 1" >>confdefs.h
+fi
+ac_fn_c_check_func "$LINENO" "getpeername" "ac_cv_func_getpeername"
+if test "x$ac_cv_func_getpeername" = xyes
+then :
+  printf "%s\n" "#define HAVE_GETPEERNAME 1" >>confdefs.h
 
 fi
+ac_fn_c_check_func "$LINENO" "getrandom" "ac_cv_func_getrandom"
+if test "x$ac_cv_func_getrandom" = xyes
+then :
+  printf "%s\n" "#define HAVE_GETRANDOM 1" >>confdefs.h
 
+fi
+ac_fn_c_check_func "$LINENO" "getrlimit" "ac_cv_func_getrlimit"
+if test "x$ac_cv_func_getrlimit" = xyes
+then :
+  printf "%s\n" "#define HAVE_GETRLIMIT 1" >>confdefs.h
 
-for ac_func in dup2 eaccess fcntl getdtablesize getentropy getgroups \
-               gethostname getpagesize getpeername getrandom getrlimit \
-               getrusage gettimeofday kill killpg lstat pselect readlink \
-               select setdtablesize setitimer tcgetpgrp uname ulimit waitpid
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+fi
+ac_fn_c_check_func "$LINENO" "getrusage" "ac_cv_func_getrusage"
+if test "x$ac_cv_func_getrusage" = xyes
+then :
+  printf "%s\n" "#define HAVE_GETRUSAGE 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "gettimeofday" "ac_cv_func_gettimeofday"
+if test "x$ac_cv_func_gettimeofday" = xyes
+then :
+  printf "%s\n" "#define HAVE_GETTIMEOFDAY 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "kill" "ac_cv_func_kill"
+if test "x$ac_cv_func_kill" = xyes
+then :
+  printf "%s\n" "#define HAVE_KILL 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "killpg" "ac_cv_func_killpg"
+if test "x$ac_cv_func_killpg" = xyes
+then :
+  printf "%s\n" "#define HAVE_KILLPG 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "lstat" "ac_cv_func_lstat"
+if test "x$ac_cv_func_lstat" = xyes
+then :
+  printf "%s\n" "#define HAVE_LSTAT 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "pselect" "ac_cv_func_pselect"
+if test "x$ac_cv_func_pselect" = xyes
+then :
+  printf "%s\n" "#define HAVE_PSELECT 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "readlink" "ac_cv_func_readlink"
+if test "x$ac_cv_func_readlink" = xyes
+then :
+  printf "%s\n" "#define HAVE_READLINK 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "select" "ac_cv_func_select"
+if test "x$ac_cv_func_select" = xyes
+then :
+  printf "%s\n" "#define HAVE_SELECT 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "setdtablesize" "ac_cv_func_setdtablesize"
+if test "x$ac_cv_func_setdtablesize" = xyes
+then :
+  printf "%s\n" "#define HAVE_SETDTABLESIZE 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "setitimer" "ac_cv_func_setitimer"
+if test "x$ac_cv_func_setitimer" = xyes
+then :
+  printf "%s\n" "#define HAVE_SETITIMER 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "tcgetpgrp" "ac_cv_func_tcgetpgrp"
+if test "x$ac_cv_func_tcgetpgrp" = xyes
+then :
+  printf "%s\n" "#define HAVE_TCGETPGRP 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "uname" "ac_cv_func_uname"
+if test "x$ac_cv_func_uname" = xyes
+then :
+  printf "%s\n" "#define HAVE_UNAME 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "ulimit" "ac_cv_func_ulimit"
+if test "x$ac_cv_func_ulimit" = xyes
+then :
+  printf "%s\n" "#define HAVE_ULIMIT 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "waitpid" "ac_cv_func_waitpid"
+if test "x$ac_cv_func_waitpid" = xyes
+then :
+  printf "%s\n" "#define HAVE_WAITPID 1" >>confdefs.h
 
 fi
-done
 
 ac_fn_c_check_func "$LINENO" "rename" "ac_cv_func_rename"
-if test "x$ac_cv_func_rename" = xyes; then :
-  $as_echo "#define HAVE_RENAME 1" >>confdefs.h
+if test "x$ac_cv_func_rename" = xyes
+then :
+  printf "%s\n" "#define HAVE_RENAME 1" >>confdefs.h
 
-else
+else $as_nop
   case " $LIBOBJS " in
   *" rename.$ac_objext "* ) ;;
   *) LIBOBJS="$LIBOBJS rename.$ac_objext"
@@ -13907,89 +15047,290 @@ esac
 fi
 
 
+ac_fn_c_check_func "$LINENO" "bcopy" "ac_cv_func_bcopy"
+if test "x$ac_cv_func_bcopy" = xyes
+then :
+  printf "%s\n" "#define HAVE_BCOPY 1" >>confdefs.h
 
-for ac_func in bcopy bzero confstr faccessat fnmatch \
-               getaddrinfo gethostbyname getservbyname getservent inet_aton \
-               imaxdiv memmove pathconf putenv raise random regcomp regexec \
-               setenv setlinebuf setlocale setvbuf siginterrupt strchr \
-               sysconf syslog tcgetattr times ttyname tzset unsetenv
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+fi
+ac_fn_c_check_func "$LINENO" "bzero" "ac_cv_func_bzero"
+if test "x$ac_cv_func_bzero" = xyes
+then :
+  printf "%s\n" "#define HAVE_BZERO 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "confstr" "ac_cv_func_confstr"
+if test "x$ac_cv_func_confstr" = xyes
+then :
+  printf "%s\n" "#define HAVE_CONFSTR 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "faccessat" "ac_cv_func_faccessat"
+if test "x$ac_cv_func_faccessat" = xyes
+then :
+  printf "%s\n" "#define HAVE_FACCESSAT 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "fnmatch" "ac_cv_func_fnmatch"
+if test "x$ac_cv_func_fnmatch" = xyes
+then :
+  printf "%s\n" "#define HAVE_FNMATCH 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "getaddrinfo" "ac_cv_func_getaddrinfo"
+if test "x$ac_cv_func_getaddrinfo" = xyes
+then :
+  printf "%s\n" "#define HAVE_GETADDRINFO 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname"
+if test "x$ac_cv_func_gethostbyname" = xyes
+then :
+  printf "%s\n" "#define HAVE_GETHOSTBYNAME 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "getservbyname" "ac_cv_func_getservbyname"
+if test "x$ac_cv_func_getservbyname" = xyes
+then :
+  printf "%s\n" "#define HAVE_GETSERVBYNAME 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "getservent" "ac_cv_func_getservent"
+if test "x$ac_cv_func_getservent" = xyes
+then :
+  printf "%s\n" "#define HAVE_GETSERVENT 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "inet_aton" "ac_cv_func_inet_aton"
+if test "x$ac_cv_func_inet_aton" = xyes
+then :
+  printf "%s\n" "#define HAVE_INET_ATON 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "imaxdiv" "ac_cv_func_imaxdiv"
+if test "x$ac_cv_func_imaxdiv" = xyes
+then :
+  printf "%s\n" "#define HAVE_IMAXDIV 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "memmove" "ac_cv_func_memmove"
+if test "x$ac_cv_func_memmove" = xyes
+then :
+  printf "%s\n" "#define HAVE_MEMMOVE 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "pathconf" "ac_cv_func_pathconf"
+if test "x$ac_cv_func_pathconf" = xyes
+then :
+  printf "%s\n" "#define HAVE_PATHCONF 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "putenv" "ac_cv_func_putenv"
+if test "x$ac_cv_func_putenv" = xyes
+then :
+  printf "%s\n" "#define HAVE_PUTENV 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "raise" "ac_cv_func_raise"
+if test "x$ac_cv_func_raise" = xyes
+then :
+  printf "%s\n" "#define HAVE_RAISE 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "random" "ac_cv_func_random"
+if test "x$ac_cv_func_random" = xyes
+then :
+  printf "%s\n" "#define HAVE_RANDOM 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "regcomp" "ac_cv_func_regcomp"
+if test "x$ac_cv_func_regcomp" = xyes
+then :
+  printf "%s\n" "#define HAVE_REGCOMP 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "regexec" "ac_cv_func_regexec"
+if test "x$ac_cv_func_regexec" = xyes
+then :
+  printf "%s\n" "#define HAVE_REGEXEC 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "setenv" "ac_cv_func_setenv"
+if test "x$ac_cv_func_setenv" = xyes
+then :
+  printf "%s\n" "#define HAVE_SETENV 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "setlinebuf" "ac_cv_func_setlinebuf"
+if test "x$ac_cv_func_setlinebuf" = xyes
+then :
+  printf "%s\n" "#define HAVE_SETLINEBUF 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "setlocale" "ac_cv_func_setlocale"
+if test "x$ac_cv_func_setlocale" = xyes
+then :
+  printf "%s\n" "#define HAVE_SETLOCALE 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "setvbuf" "ac_cv_func_setvbuf"
+if test "x$ac_cv_func_setvbuf" = xyes
+then :
+  printf "%s\n" "#define HAVE_SETVBUF 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "siginterrupt" "ac_cv_func_siginterrupt"
+if test "x$ac_cv_func_siginterrupt" = xyes
+then :
+  printf "%s\n" "#define HAVE_SIGINTERRUPT 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "strchr" "ac_cv_func_strchr"
+if test "x$ac_cv_func_strchr" = xyes
+then :
+  printf "%s\n" "#define HAVE_STRCHR 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "sysconf" "ac_cv_func_sysconf"
+if test "x$ac_cv_func_sysconf" = xyes
+then :
+  printf "%s\n" "#define HAVE_SYSCONF 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "syslog" "ac_cv_func_syslog"
+if test "x$ac_cv_func_syslog" = xyes
+then :
+  printf "%s\n" "#define HAVE_SYSLOG 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "tcgetattr" "ac_cv_func_tcgetattr"
+if test "x$ac_cv_func_tcgetattr" = xyes
+then :
+  printf "%s\n" "#define HAVE_TCGETATTR 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "times" "ac_cv_func_times"
+if test "x$ac_cv_func_times" = xyes
+then :
+  printf "%s\n" "#define HAVE_TIMES 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "ttyname" "ac_cv_func_ttyname"
+if test "x$ac_cv_func_ttyname" = xyes
+then :
+  printf "%s\n" "#define HAVE_TTYNAME 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "tzset" "ac_cv_func_tzset"
+if test "x$ac_cv_func_tzset" = xyes
+then :
+  printf "%s\n" "#define HAVE_TZSET 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "unsetenv" "ac_cv_func_unsetenv"
+if test "x$ac_cv_func_unsetenv" = xyes
+then :
+  printf "%s\n" "#define HAVE_UNSETENV 1" >>confdefs.h
+
+fi
+
+
+ac_fn_c_check_func "$LINENO" "vasprintf" "ac_cv_func_vasprintf"
+if test "x$ac_cv_func_vasprintf" = xyes
+then :
+  printf "%s\n" "#define HAVE_VASPRINTF 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "asprintf" "ac_cv_func_asprintf"
+if test "x$ac_cv_func_asprintf" = xyes
+then :
+  printf "%s\n" "#define HAVE_ASPRINTF 1" >>confdefs.h
+
+fi
+
+ac_fn_c_check_func "$LINENO" "isascii" "ac_cv_func_isascii"
+if test "x$ac_cv_func_isascii" = xyes
+then :
+  printf "%s\n" "#define HAVE_ISASCII 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "isblank" "ac_cv_func_isblank"
+if test "x$ac_cv_func_isblank" = xyes
+then :
+  printf "%s\n" "#define HAVE_ISBLANK 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "isgraph" "ac_cv_func_isgraph"
+if test "x$ac_cv_func_isgraph" = xyes
+then :
+  printf "%s\n" "#define HAVE_ISGRAPH 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "isprint" "ac_cv_func_isprint"
+if test "x$ac_cv_func_isprint" = xyes
+then :
+  printf "%s\n" "#define HAVE_ISPRINT 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "isspace" "ac_cv_func_isspace"
+if test "x$ac_cv_func_isspace" = xyes
+then :
+  printf "%s\n" "#define HAVE_ISSPACE 1" >>confdefs.h
 
 fi
-done
+ac_fn_c_check_func "$LINENO" "isxdigit" "ac_cv_func_isxdigit"
+if test "x$ac_cv_func_isxdigit" = xyes
+then :
+  printf "%s\n" "#define HAVE_ISXDIGIT 1" >>confdefs.h
 
+fi
 
-for ac_func in vasprintf asprintf
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+ac_fn_c_check_func "$LINENO" "getpwent" "ac_cv_func_getpwent"
+if test "x$ac_cv_func_getpwent" = xyes
+then :
+  printf "%s\n" "#define HAVE_GETPWENT 1" >>confdefs.h
 
 fi
-done
+ac_fn_c_check_func "$LINENO" "getpwnam" "ac_cv_func_getpwnam"
+if test "x$ac_cv_func_getpwnam" = xyes
+then :
+  printf "%s\n" "#define HAVE_GETPWNAM 1" >>confdefs.h
 
-for ac_func in isascii isblank isgraph isprint isspace isxdigit
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+fi
+ac_fn_c_check_func "$LINENO" "getpwuid" "ac_cv_func_getpwuid"
+if test "x$ac_cv_func_getpwuid" = xyes
+then :
+  printf "%s\n" "#define HAVE_GETPWUID 1" >>confdefs.h
 
 fi
-done
 
-for ac_func in getpwent getpwnam getpwuid
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+ac_fn_c_check_func "$LINENO" "mkstemp" "ac_cv_func_mkstemp"
+if test "x$ac_cv_func_mkstemp" = xyes
+then :
+  printf "%s\n" "#define HAVE_MKSTEMP 1" >>confdefs.h
 
 fi
-done
-
-for ac_func in mkstemp mkdtemp
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+ac_fn_c_check_func "$LINENO" "mkdtemp" "ac_cv_func_mkdtemp"
+if test "x$ac_cv_func_mkdtemp" = xyes
+then :
+  printf "%s\n" "#define HAVE_MKDTEMP 1" >>confdefs.h
 
 fi
-done
 
-for ac_func in arc4random
-do :
-  ac_fn_c_check_func "$LINENO" "arc4random" "ac_cv_func_arc4random"
-if test "x$ac_cv_func_arc4random" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_ARC4RANDOM 1
-_ACEOF
+ac_fn_c_check_func "$LINENO" "arc4random" "ac_cv_func_arc4random"
+if test "x$ac_cv_func_arc4random" = xyes
+then :
+  printf "%s\n" "#define HAVE_ARC4RANDOM 1" >>confdefs.h
 
 fi
-done
 
 
 ac_fn_c_check_func "$LINENO" "getcwd" "ac_cv_func_getcwd"
-if test "x$ac_cv_func_getcwd" = xyes; then :
-  $as_echo "#define HAVE_GETCWD 1" >>confdefs.h
+if test "x$ac_cv_func_getcwd" = xyes
+then :
+  printf "%s\n" "#define HAVE_GETCWD 1" >>confdefs.h
 
-else
+else $as_nop
   case " $LIBOBJS " in
   *" getcwd.$ac_objext "* ) ;;
   *) LIBOBJS="$LIBOBJS getcwd.$ac_objext"
@@ -13997,12 +15338,12 @@ else
 esac
 
 fi
-
 ac_fn_c_check_func "$LINENO" "memset" "ac_cv_func_memset"
-if test "x$ac_cv_func_memset" = xyes; then :
-  $as_echo "#define HAVE_MEMSET 1" >>confdefs.h
+if test "x$ac_cv_func_memset" = xyes
+then :
+  printf "%s\n" "#define HAVE_MEMSET 1" >>confdefs.h
 
-else
+else $as_nop
   case " $LIBOBJS " in
   *" memset.$ac_objext "* ) ;;
   *) LIBOBJS="$LIBOBJS memset.$ac_objext"
@@ -14011,12 +15352,12 @@ esac
 
 fi
 
-
 ac_fn_c_check_func "$LINENO" "strcasecmp" "ac_cv_func_strcasecmp"
-if test "x$ac_cv_func_strcasecmp" = xyes; then :
-  $as_echo "#define HAVE_STRCASECMP 1" >>confdefs.h
+if test "x$ac_cv_func_strcasecmp" = xyes
+then :
+  printf "%s\n" "#define HAVE_STRCASECMP 1" >>confdefs.h
 
-else
+else $as_nop
   case " $LIBOBJS " in
   *" strcasecmp.$ac_objext "* ) ;;
   *) LIBOBJS="$LIBOBJS strcasecmp.$ac_objext"
@@ -14024,12 +15365,12 @@ else
 esac
 
 fi
-
 ac_fn_c_check_func "$LINENO" "strcasestr" "ac_cv_func_strcasestr"
-if test "x$ac_cv_func_strcasestr" = xyes; then :
-  $as_echo "#define HAVE_STRCASESTR 1" >>confdefs.h
+if test "x$ac_cv_func_strcasestr" = xyes
+then :
+  printf "%s\n" "#define HAVE_STRCASESTR 1" >>confdefs.h
 
-else
+else $as_nop
   case " $LIBOBJS " in
   *" strcasestr.$ac_objext "* ) ;;
   *) LIBOBJS="$LIBOBJS strcasestr.$ac_objext"
@@ -14037,12 +15378,12 @@ else
 esac
 
 fi
-
 ac_fn_c_check_func "$LINENO" "strerror" "ac_cv_func_strerror"
-if test "x$ac_cv_func_strerror" = xyes; then :
-  $as_echo "#define HAVE_STRERROR 1" >>confdefs.h
+if test "x$ac_cv_func_strerror" = xyes
+then :
+  printf "%s\n" "#define HAVE_STRERROR 1" >>confdefs.h
 
-else
+else $as_nop
   case " $LIBOBJS " in
   *" strerror.$ac_objext "* ) ;;
   *) LIBOBJS="$LIBOBJS strerror.$ac_objext"
@@ -14050,12 +15391,12 @@ else
 esac
 
 fi
-
 ac_fn_c_check_func "$LINENO" "strftime" "ac_cv_func_strftime"
-if test "x$ac_cv_func_strftime" = xyes; then :
-  $as_echo "#define HAVE_STRFTIME 1" >>confdefs.h
+if test "x$ac_cv_func_strftime" = xyes
+then :
+  printf "%s\n" "#define HAVE_STRFTIME 1" >>confdefs.h
 
-else
+else $as_nop
   case " $LIBOBJS " in
   *" strftime.$ac_objext "* ) ;;
   *) LIBOBJS="$LIBOBJS strftime.$ac_objext"
@@ -14063,12 +15404,12 @@ else
 esac
 
 fi
-
 ac_fn_c_check_func "$LINENO" "strnlen" "ac_cv_func_strnlen"
-if test "x$ac_cv_func_strnlen" = xyes; then :
-  $as_echo "#define HAVE_STRNLEN 1" >>confdefs.h
+if test "x$ac_cv_func_strnlen" = xyes
+then :
+  printf "%s\n" "#define HAVE_STRNLEN 1" >>confdefs.h
 
-else
+else $as_nop
   case " $LIBOBJS " in
   *" strnlen.$ac_objext "* ) ;;
   *) LIBOBJS="$LIBOBJS strnlen.$ac_objext"
@@ -14076,12 +15417,12 @@ else
 esac
 
 fi
-
 ac_fn_c_check_func "$LINENO" "strpbrk" "ac_cv_func_strpbrk"
-if test "x$ac_cv_func_strpbrk" = xyes; then :
-  $as_echo "#define HAVE_STRPBRK 1" >>confdefs.h
+if test "x$ac_cv_func_strpbrk" = xyes
+then :
+  printf "%s\n" "#define HAVE_STRPBRK 1" >>confdefs.h
 
-else
+else $as_nop
   case " $LIBOBJS " in
   *" strpbrk.$ac_objext "* ) ;;
   *) LIBOBJS="$LIBOBJS strpbrk.$ac_objext"
@@ -14089,12 +15430,12 @@ else
 esac
 
 fi
-
 ac_fn_c_check_func "$LINENO" "strstr" "ac_cv_func_strstr"
-if test "x$ac_cv_func_strstr" = xyes; then :
-  $as_echo "#define HAVE_STRSTR 1" >>confdefs.h
+if test "x$ac_cv_func_strstr" = xyes
+then :
+  printf "%s\n" "#define HAVE_STRSTR 1" >>confdefs.h
 
-else
+else $as_nop
   case " $LIBOBJS " in
   *" strstr.$ac_objext "* ) ;;
   *) LIBOBJS="$LIBOBJS strstr.$ac_objext"
@@ -14103,12 +15444,12 @@ esac
 
 fi
 
-
 ac_fn_c_check_func "$LINENO" "strtod" "ac_cv_func_strtod"
-if test "x$ac_cv_func_strtod" = xyes; then :
-  $as_echo "#define HAVE_STRTOD 1" >>confdefs.h
+if test "x$ac_cv_func_strtod" = xyes
+then :
+  printf "%s\n" "#define HAVE_STRTOD 1" >>confdefs.h
 
-else
+else $as_nop
   case " $LIBOBJS " in
   *" strtod.$ac_objext "* ) ;;
   *) LIBOBJS="$LIBOBJS strtod.$ac_objext"
@@ -14116,12 +15457,12 @@ else
 esac
 
 fi
-
 ac_fn_c_check_func "$LINENO" "strtol" "ac_cv_func_strtol"
-if test "x$ac_cv_func_strtol" = xyes; then :
-  $as_echo "#define HAVE_STRTOL 1" >>confdefs.h
+if test "x$ac_cv_func_strtol" = xyes
+then :
+  printf "%s\n" "#define HAVE_STRTOL 1" >>confdefs.h
 
-else
+else $as_nop
   case " $LIBOBJS " in
   *" strtol.$ac_objext "* ) ;;
   *) LIBOBJS="$LIBOBJS strtol.$ac_objext"
@@ -14129,12 +15470,12 @@ else
 esac
 
 fi
-
 ac_fn_c_check_func "$LINENO" "strtoul" "ac_cv_func_strtoul"
-if test "x$ac_cv_func_strtoul" = xyes; then :
-  $as_echo "#define HAVE_STRTOUL 1" >>confdefs.h
+if test "x$ac_cv_func_strtoul" = xyes
+then :
+  printf "%s\n" "#define HAVE_STRTOUL 1" >>confdefs.h
 
-else
+else $as_nop
   case " $LIBOBJS " in
   *" strtoul.$ac_objext "* ) ;;
   *) LIBOBJS="$LIBOBJS strtoul.$ac_objext"
@@ -14142,12 +15483,12 @@ else
 esac
 
 fi
-
 ac_fn_c_check_func "$LINENO" "strtoll" "ac_cv_func_strtoll"
-if test "x$ac_cv_func_strtoll" = xyes; then :
-  $as_echo "#define HAVE_STRTOLL 1" >>confdefs.h
+if test "x$ac_cv_func_strtoll" = xyes
+then :
+  printf "%s\n" "#define HAVE_STRTOLL 1" >>confdefs.h
 
-else
+else $as_nop
   case " $LIBOBJS " in
   *" strtoll.$ac_objext "* ) ;;
   *) LIBOBJS="$LIBOBJS strtoll.$ac_objext"
@@ -14155,12 +15496,12 @@ else
 esac
 
 fi
-
 ac_fn_c_check_func "$LINENO" "strtoull" "ac_cv_func_strtoull"
-if test "x$ac_cv_func_strtoull" = xyes; then :
-  $as_echo "#define HAVE_STRTOULL 1" >>confdefs.h
+if test "x$ac_cv_func_strtoull" = xyes
+then :
+  printf "%s\n" "#define HAVE_STRTOULL 1" >>confdefs.h
 
-else
+else $as_nop
   case " $LIBOBJS " in
   *" strtoull.$ac_objext "* ) ;;
   *) LIBOBJS="$LIBOBJS strtoull.$ac_objext"
@@ -14168,25 +15509,12 @@ else
 esac
 
 fi
-
-ac_fn_c_check_func "$LINENO" "strtoimax" "ac_cv_func_strtoimax"
-if test "x$ac_cv_func_strtoimax" = xyes; then :
-  $as_echo "#define HAVE_STRTOIMAX 1" >>confdefs.h
-
-else
-  case " $LIBOBJS " in
-  *" strtoimax.$ac_objext "* ) ;;
-  *) LIBOBJS="$LIBOBJS strtoimax.$ac_objext"
- ;;
-esac
-
-fi
-
 ac_fn_c_check_func "$LINENO" "strtoumax" "ac_cv_func_strtoumax"
-if test "x$ac_cv_func_strtoumax" = xyes; then :
-  $as_echo "#define HAVE_STRTOUMAX 1" >>confdefs.h
+if test "x$ac_cv_func_strtoumax" = xyes
+then :
+  printf "%s\n" "#define HAVE_STRTOUMAX 1" >>confdefs.h
 
-else
+else $as_nop
   case " $LIBOBJS " in
   *" strtoumax.$ac_objext "* ) ;;
   *) LIBOBJS="$LIBOBJS strtoumax.$ac_objext"
@@ -14195,12 +15523,12 @@ esac
 
 fi
 
-
 ac_fn_c_check_func "$LINENO" "dprintf" "ac_cv_func_dprintf"
-if test "x$ac_cv_func_dprintf" = xyes; then :
-  $as_echo "#define HAVE_DPRINTF 1" >>confdefs.h
+if test "x$ac_cv_func_dprintf" = xyes
+then :
+  printf "%s\n" "#define HAVE_DPRINTF 1" >>confdefs.h
 
-else
+else $as_nop
   case " $LIBOBJS " in
   *" dprintf.$ac_objext "* ) ;;
   *) LIBOBJS="$LIBOBJS dprintf.$ac_objext"
@@ -14209,12 +15537,12 @@ esac
 
 fi
 
-
 ac_fn_c_check_func "$LINENO" "strchrnul" "ac_cv_func_strchrnul"
-if test "x$ac_cv_func_strchrnul" = xyes; then :
-  $as_echo "#define HAVE_STRCHRNUL 1" >>confdefs.h
+if test "x$ac_cv_func_strchrnul" = xyes
+then :
+  printf "%s\n" "#define HAVE_STRCHRNUL 1" >>confdefs.h
 
-else
+else $as_nop
   case " $LIBOBJS " in
   *" strchrnul.$ac_objext "* ) ;;
   *) LIBOBJS="$LIBOBJS strchrnul.$ac_objext"
@@ -14223,12 +15551,12 @@ esac
 
 fi
 
-
 ac_fn_c_check_func "$LINENO" "strdup" "ac_cv_func_strdup"
-if test "x$ac_cv_func_strdup" = xyes; then :
-  $as_echo "#define HAVE_STRDUP 1" >>confdefs.h
+if test "x$ac_cv_func_strdup" = xyes
+then :
+  printf "%s\n" "#define HAVE_STRDUP 1" >>confdefs.h
 
-else
+else $as_nop
   case " $LIBOBJS " in
   *" strdup.$ac_objext "* ) ;;
   *) LIBOBJS="$LIBOBJS strdup.$ac_objext"
 fi
 
 
+ac_fn_c_check_header_compile "$LINENO" "libaudit.h" "ac_cv_header_libaudit_h" "$ac_includes_default"
+if test "x$ac_cv_header_libaudit_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_LIBAUDIT_H 1" >>confdefs.h
 
-for ac_header in libaudit.h
-do :
-  ac_fn_c_check_header_mongrel "$LINENO" "libaudit.h" "ac_cv_header_libaudit_h" "$ac_includes_default"
-if test "x$ac_cv_header_libaudit_h" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBAUDIT_H 1
-_ACEOF
-
-fi
-
-done
-
-ac_fn_c_check_decl "$LINENO" "AUDIT_USER_TTY" "ac_cv_have_decl_AUDIT_USER_TTY" "#include <linux/audit.h>
-"
-if test "x$ac_cv_have_decl_AUDIT_USER_TTY" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
 fi
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_AUDIT_USER_TTY $ac_have_decl
-_ACEOF
-
-
-ac_fn_c_check_decl "$LINENO" "confstr" "ac_cv_have_decl_confstr" "$ac_includes_default"
-if test "x$ac_cv_have_decl_confstr" = xyes; then :
+ac_fn_check_decl "$LINENO" "AUDIT_USER_TTY" "ac_cv_have_decl_AUDIT_USER_TTY" "#include <linux/audit.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_AUDIT_USER_TTY" = xyes
+then :
   ac_have_decl=1
-else
+else $as_nop
   ac_have_decl=0
 fi
+printf "%s\n" "#define HAVE_DECL_AUDIT_USER_TTY $ac_have_decl" >>confdefs.h
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CONFSTR $ac_have_decl
-_ACEOF
 
-ac_fn_c_check_decl "$LINENO" "printf" "ac_cv_have_decl_printf" "$ac_includes_default"
-if test "x$ac_cv_have_decl_printf" = xyes; then :
+ac_fn_check_decl "$LINENO" "confstr" "ac_cv_have_decl_confstr" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_confstr" = xyes
+then :
   ac_have_decl=1
-else
+else $as_nop
   ac_have_decl=0
 fi
+printf "%s\n" "#define HAVE_DECL_CONFSTR $ac_have_decl" >>confdefs.h
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_PRINTF $ac_have_decl
-_ACEOF
-
-ac_fn_c_check_decl "$LINENO" "sbrk" "ac_cv_have_decl_sbrk" "$ac_includes_default"
-if test "x$ac_cv_have_decl_sbrk" = xyes; then :
+ac_fn_check_decl "$LINENO" "printf" "ac_cv_have_decl_printf" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_printf" = xyes
+then :
   ac_have_decl=1
-else
+else $as_nop
   ac_have_decl=0
 fi
+printf "%s\n" "#define HAVE_DECL_PRINTF $ac_have_decl" >>confdefs.h
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SBRK $ac_have_decl
-_ACEOF
-
-ac_fn_c_check_decl "$LINENO" "setregid" "ac_cv_have_decl_setregid" "$ac_includes_default"
-if test "x$ac_cv_have_decl_setregid" = xyes; then :
+ac_fn_check_decl "$LINENO" "sbrk" "ac_cv_have_decl_sbrk" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_sbrk" = xyes
+then :
   ac_have_decl=1
-else
+else $as_nop
   ac_have_decl=0
 fi
+printf "%s\n" "#define HAVE_DECL_SBRK $ac_have_decl" >>confdefs.h
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SETREGID $ac_have_decl
-_ACEOF
-
-ac_fn_c_check_decl "$LINENO" "strcpy" "ac_cv_have_decl_strcpy" "$ac_includes_default"
-if test "x$ac_cv_have_decl_strcpy" = xyes; then :
+ac_fn_check_decl "$LINENO" "setregid" "ac_cv_have_decl_setregid" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_setregid" = xyes
+then :
   ac_have_decl=1
-else
+else $as_nop
   ac_have_decl=0
 fi
+printf "%s\n" "#define HAVE_DECL_SETREGID $ac_have_decl" >>confdefs.h
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_STRCPY $ac_have_decl
-_ACEOF
-
-ac_fn_c_check_decl "$LINENO" "strsignal" "ac_cv_have_decl_strsignal" "$ac_includes_default"
-if test "x$ac_cv_have_decl_strsignal" = xyes; then :
+ac_fn_check_decl "$LINENO" "strcpy" "ac_cv_have_decl_strcpy" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_strcpy" = xyes
+then :
   ac_have_decl=1
-else
+else $as_nop
   ac_have_decl=0
 fi
+printf "%s\n" "#define HAVE_DECL_STRCPY $ac_have_decl" >>confdefs.h
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_STRSIGNAL $ac_have_decl
-_ACEOF
-
-
-for ac_func in setresuid setresgid
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-
-ac_fn_c_check_decl "$LINENO" "strtold" "ac_cv_have_decl_strtold" "$ac_includes_default"
-if test "x$ac_cv_have_decl_strtold" = xyes; then :
+ac_fn_check_decl "$LINENO" "strsignal" "ac_cv_have_decl_strsignal" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_strsignal" = xyes
+then :
   ac_have_decl=1
-else
+else $as_nop
   ac_have_decl=0
 fi
+printf "%s\n" "#define HAVE_DECL_STRSIGNAL $ac_have_decl" >>confdefs.h
+
+
+ac_fn_c_check_func "$LINENO" "setresuid" "ac_cv_func_setresuid"
+if test "x$ac_cv_func_setresuid" = xyes
+then :
+  printf "%s\n" "#define HAVE_SETRESUID 1" >>confdefs.h
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_STRTOLD $ac_have_decl
-_ACEOF
-if test $ac_have_decl = 1; then :
-
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for broken strtold" >&5
-$as_echo_n "checking for broken strtold... " >&6; }
-    if ${bash_cv_strtold_broken+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdlib.h>
-int
-main ()
-{
-long double r; char *foo, bar; r = strtold(foo, &bar);
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  bash_cv_strtold_broken=no
-else
-  bash_cv_strtold_broken=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-
-fi
-
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_strtold_broken" >&5
-$as_echo "$bash_cv_strtold_broken" >&6; }
-    if test "$bash_cv_strtold_broken" = "yes" ; then
-       $as_echo "#define STRTOLD_BROKEN 1" >>confdefs.h
-
-    fi
-
-fi
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for declaration of strtoimax" >&5
-$as_echo_n "checking for declaration of strtoimax... " >&6; }
-if ${bash_cv_decl_strtoimax+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#if STDC_HEADERS
-#  include <stdlib.h>
-#endif
-#if HAVE_INTTYPES_H
-#  include <inttypes.h>
-#endif
-
-int
-main ()
-{
-return !strtoimax;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  bash_cv_decl_strtoimax=yes
-else
-  bash_cv_decl_strtoimax=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_decl_strtoimax" >&5
-$as_echo "$bash_cv_decl_strtoimax" >&6; }
-bash_tr_func=HAVE_DECL_`echo strtoimax | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
-if test $bash_cv_decl_strtoimax = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define $bash_tr_func 1
-_ACEOF
-
-else
-  cat >>confdefs.h <<_ACEOF
-#define $bash_tr_func 0
-_ACEOF
-
-fi
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for declaration of strtol" >&5
-$as_echo_n "checking for declaration of strtol... " >&6; }
-if ${bash_cv_decl_strtol+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#if STDC_HEADERS
-#  include <stdlib.h>
-#endif
-#if HAVE_INTTYPES_H
-#  include <inttypes.h>
-#endif
-
-int
-main ()
-{
-return !strtol;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  bash_cv_decl_strtol=yes
-else
-  bash_cv_decl_strtol=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_decl_strtol" >&5
-$as_echo "$bash_cv_decl_strtol" >&6; }
-bash_tr_func=HAVE_DECL_`echo strtol | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
-if test $bash_cv_decl_strtol = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define $bash_tr_func 1
-_ACEOF
-
-else
-  cat >>confdefs.h <<_ACEOF
-#define $bash_tr_func 0
-_ACEOF
-
-fi
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for declaration of strtoll" >&5
-$as_echo_n "checking for declaration of strtoll... " >&6; }
-if ${bash_cv_decl_strtoll+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#if STDC_HEADERS
-#  include <stdlib.h>
-#endif
-#if HAVE_INTTYPES_H
-#  include <inttypes.h>
-#endif
-
-int
-main ()
-{
-return !strtoll;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  bash_cv_decl_strtoll=yes
-else
-  bash_cv_decl_strtoll=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_decl_strtoll" >&5
-$as_echo "$bash_cv_decl_strtoll" >&6; }
-bash_tr_func=HAVE_DECL_`echo strtoll | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
-if test $bash_cv_decl_strtoll = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define $bash_tr_func 1
-_ACEOF
-
-else
-  cat >>confdefs.h <<_ACEOF
-#define $bash_tr_func 0
-_ACEOF
-
-fi
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for declaration of strtoul" >&5
-$as_echo_n "checking for declaration of strtoul... " >&6; }
-if ${bash_cv_decl_strtoul+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#if STDC_HEADERS
-#  include <stdlib.h>
-#endif
-#if HAVE_INTTYPES_H
-#  include <inttypes.h>
-#endif
-
-int
-main ()
-{
-return !strtoul;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  bash_cv_decl_strtoul=yes
-else
-  bash_cv_decl_strtoul=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_decl_strtoul" >&5
-$as_echo "$bash_cv_decl_strtoul" >&6; }
-bash_tr_func=HAVE_DECL_`echo strtoul | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
-if test $bash_cv_decl_strtoul = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define $bash_tr_func 1
-_ACEOF
-
-else
-  cat >>confdefs.h <<_ACEOF
-#define $bash_tr_func 0
-_ACEOF
-
 fi
+ac_fn_c_check_func "$LINENO" "setresgid" "ac_cv_func_setresgid"
+if test "x$ac_cv_func_setresgid" = xyes
+then :
+  printf "%s\n" "#define HAVE_SETRESGID 1" >>confdefs.h
 
+fi
 
 
+ac_fn_check_decl "$LINENO" "strtold" "ac_cv_have_decl_strtold" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_strtold" = xyes
+then :
+  ac_have_decl=1
+else $as_nop
+  ac_have_decl=0
+fi
+printf "%s\n" "#define HAVE_DECL_STRTOLD $ac_have_decl" >>confdefs.h
+if test $ac_have_decl = 1
+then :
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for declaration of strtoull" >&5
-$as_echo_n "checking for declaration of strtoull... " >&6; }
-if ${bash_cv_decl_strtoull+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for broken strtold" >&5
+printf %s "checking for broken strtold... " >&6; }
+    if test ${bash_cv_strtold_broken+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-
-#if STDC_HEADERS
-#  include <stdlib.h>
-#endif
-#if HAVE_INTTYPES_H
-#  include <inttypes.h>
-#endif
-
+#include <stdlib.h>
 int
-main ()
+main (void)
 {
-return !strtoull;
+long double r; char *foo, bar; r = strtold(foo, &bar);
+
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  bash_cv_decl_strtoull=yes
-else
-  bash_cv_decl_strtoull=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
+if ac_fn_c_try_compile "$LINENO"
+then :
+  bash_cv_strtold_broken=no
+else $as_nop
+  bash_cv_strtold_broken=yes
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_decl_strtoull" >&5
-$as_echo "$bash_cv_decl_strtoull" >&6; }
-bash_tr_func=HAVE_DECL_`echo strtoull | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
-if test $bash_cv_decl_strtoull = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define $bash_tr_func 1
-_ACEOF
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 
-else
-  cat >>confdefs.h <<_ACEOF
-#define $bash_tr_func 0
-_ACEOF
 
 fi
 
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_strtold_broken" >&5
+printf "%s\n" "$bash_cv_strtold_broken" >&6; }
+    if test "$bash_cv_strtold_broken" = "yes" ; then
+       printf "%s\n" "#define STRTOLD_BROKEN 1" >>confdefs.h
 
+    fi
 
+fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for declaration of strtoumax" >&5
-$as_echo_n "checking for declaration of strtoumax... " >&6; }
-if ${bash_cv_decl_strtoumax+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#if STDC_HEADERS
-#  include <stdlib.h>
-#endif
-#if HAVE_INTTYPES_H
-#  include <inttypes.h>
-#endif
 
-int
-main ()
-{
-return !strtoumax;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  bash_cv_decl_strtoumax=yes
-else
-  bash_cv_decl_strtoumax=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
+ac_fn_check_decl "$LINENO" "strtol" "ac_cv_have_decl_strtol" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_strtol" = xyes
+then :
+  ac_have_decl=1
+else $as_nop
+  ac_have_decl=0
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_decl_strtoumax" >&5
-$as_echo "$bash_cv_decl_strtoumax" >&6; }
-bash_tr_func=HAVE_DECL_`echo strtoumax | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
-if test $bash_cv_decl_strtoumax = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define $bash_tr_func 1
-_ACEOF
+printf "%s\n" "#define HAVE_DECL_STRTOL $ac_have_decl" >>confdefs.h
 
-else
-  cat >>confdefs.h <<_ACEOF
-#define $bash_tr_func 0
-_ACEOF
+ac_fn_check_decl "$LINENO" "strtoll" "ac_cv_have_decl_strtoll" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_strtoll" = xyes
+then :
+  ac_have_decl=1
+else $as_nop
+  ac_have_decl=0
+fi
+printf "%s\n" "#define HAVE_DECL_STRTOLL $ac_have_decl" >>confdefs.h
 
+ac_fn_check_decl "$LINENO" "strtoul" "ac_cv_have_decl_strtoul" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_strtoul" = xyes
+then :
+  ac_have_decl=1
+else $as_nop
+  ac_have_decl=0
 fi
+printf "%s\n" "#define HAVE_DECL_STRTOUL $ac_have_decl" >>confdefs.h
 
+ac_fn_check_decl "$LINENO" "strtoull" "ac_cv_have_decl_strtoull" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_strtoull" = xyes
+then :
+  ac_have_decl=1
+else $as_nop
+  ac_have_decl=0
+fi
+printf "%s\n" "#define HAVE_DECL_STRTOULL $ac_have_decl" >>confdefs.h
 
+ac_fn_check_decl "$LINENO" "strtoumax" "ac_cv_have_decl_strtoumax" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_strtoumax" = xyes
+then :
+  ac_have_decl=1
+else $as_nop
+  ac_have_decl=0
+fi
+printf "%s\n" "#define HAVE_DECL_STRTOUMAX $ac_have_decl" >>confdefs.h
 
 
 
 
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working mktime" >&5
-$as_echo_n "checking for working mktime... " >&6; }
-if ${ac_cv_func_working_mktime+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working mktime" >&5
+printf %s "checking for working mktime... " >&6; }
+if test ${ac_cv_func_working_mktime+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if test "$cross_compiling" = yes
+then :
   ac_cv_func_working_mktime=no
-else
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 /* Test program from Paul Eggert and Tony Leneis.  */
-#ifdef TIME_WITH_SYS_TIME
+#include <time.h>
+#ifdef HAVE_SYS_TIME_H
 # include <sys/time.h>
-# include <time.h>
-#else
-# ifdef HAVE_SYS_TIME_H
-#  include <sys/time.h>
-# else
-#  include <time.h>
-# endif
 #endif
 
 #include <limits.h>
@@ -14851,7 +15907,7 @@ year_2050_test ()
 }
 
 int
-main ()
+main (void)
 {
   time_t t, delta;
   int i, j;
@@ -14895,9 +15951,10 @@ main ()
   return ! (irix_6_4_bug () && spring_forward_gap () && year_2050_test ());
 }
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
   ac_cv_func_working_mktime=yes
-else
+else $as_nop
   ac_cv_func_working_mktime=no
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
@@ -14905,8 +15962,8 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
 fi
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_working_mktime" >&5
-$as_echo "$ac_cv_func_working_mktime" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_working_mktime" >&5
+printf "%s\n" "$ac_cv_func_working_mktime" >&6; }
 if test $ac_cv_func_working_mktime = no; then
   case " $LIBOBJS " in
   *" mktime.$ac_objext "* ) ;;
 
 
 
-for ac_header in argz.h errno.h fcntl.h malloc.h stdio_ext.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
+ac_fn_c_check_header_compile "$LINENO" "argz.h" "ac_cv_header_argz_h" "$ac_includes_default"
+if test "x$ac_cv_header_argz_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_ARGZ_H 1" >>confdefs.h
 
 fi
+ac_fn_c_check_header_compile "$LINENO" "errno.h" "ac_cv_header_errno_h" "$ac_includes_default"
+if test "x$ac_cv_header_errno_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_ERRNO_H 1" >>confdefs.h
 
-done
-
+fi
+ac_fn_c_check_header_compile "$LINENO" "fcntl.h" "ac_cv_header_fcntl_h" "$ac_includes_default"
+if test "x$ac_cv_header_fcntl_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_FCNTL_H 1" >>confdefs.h
 
+fi
+ac_fn_c_check_header_compile "$LINENO" "malloc.h" "ac_cv_header_malloc_h" "$ac_includes_default"
+if test "x$ac_cv_header_malloc_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_MALLOC_H 1" >>confdefs.h
 
-for ac_func in getpagesize
-do :
-  ac_fn_c_check_func "$LINENO" "getpagesize" "ac_cv_func_getpagesize"
-if test "x$ac_cv_func_getpagesize" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_GETPAGESIZE 1
-_ACEOF
+fi
+ac_fn_c_check_header_compile "$LINENO" "stdio_ext.h" "ac_cv_header_stdio_ext_h" "$ac_includes_default"
+if test "x$ac_cv_header_stdio_ext_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_STDIO_EXT_H 1" >>confdefs.h
 
 fi
-done
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working mmap" >&5
-$as_echo_n "checking for working mmap... " >&6; }
-if ${ac_cv_func_mmap_fixed_mapped+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
-  ac_cv_func_mmap_fixed_mapped=no
-else
+
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working mmap" >&5
+printf %s "checking for working mmap... " >&6; }
+if test ${ac_cv_func_mmap_fixed_mapped+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if test "$cross_compiling" = yes
+then :
+  case "$host_os" in # ((
+                         # Guess yes on platforms where we know the result.
+                 linux*) ac_cv_func_mmap_fixed_mapped=yes ;;
+                         # If we don't know, assume the worst.
+                 *)      ac_cv_func_mmap_fixed_mapped=no ;;
+               esac
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $ac_includes_default
@@ -14983,10 +16055,6 @@ $ac_includes_default
 #include <fcntl.h>
 #include <sys/mman.h>
 
-#if !defined STDC_HEADERS && !defined HAVE_STDLIB_H
-char *malloc ();
-#endif
-
 /* This mess was copied from the GNU getpagesize.h.  */
 #ifndef HAVE_GETPAGESIZE
 # ifdef _SC_PAGESIZE
@@ -15020,7 +16088,7 @@ char *malloc ();
 #endif /* no HAVE_GETPAGESIZE */
 
 int
-main ()
+main (void)
 {
   char *data, *data2, *data3;
   const char *cdata2;
@@ -15088,12 +16156,15 @@ main ()
     if (*(data + i) != *(data3 + i))
       return 14;
   close (fd);
+  free (data);
+  free (data3);
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
   ac_cv_func_mmap_fixed_mapped=yes
-else
+else $as_nop
   ac_cv_func_mmap_fixed_mapped=no
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
@@ -15101,27 +16172,69 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
 fi
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_fixed_mapped" >&5
-$as_echo "$ac_cv_func_mmap_fixed_mapped" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_fixed_mapped" >&5
+printf "%s\n" "$ac_cv_func_mmap_fixed_mapped" >&6; }
 if test $ac_cv_func_mmap_fixed_mapped = yes; then
 
-$as_echo "#define HAVE_MMAP 1" >>confdefs.h
+printf "%s\n" "#define HAVE_MMAP 1" >>confdefs.h
 
 fi
 rm -f conftest.mmap conftest.txt
 
-for ac_func in __argz_count __argz_next __argz_stringify dcgettext mempcpy \
-               munmap mremap stpcpy strcspn
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+ac_fn_c_check_func "$LINENO" "__argz_count" "ac_cv_func___argz_count"
+if test "x$ac_cv_func___argz_count" = xyes
+then :
+  printf "%s\n" "#define HAVE___ARGZ_COUNT 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "__argz_next" "ac_cv_func___argz_next"
+if test "x$ac_cv_func___argz_next" = xyes
+then :
+  printf "%s\n" "#define HAVE___ARGZ_NEXT 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "__argz_stringify" "ac_cv_func___argz_stringify"
+if test "x$ac_cv_func___argz_stringify" = xyes
+then :
+  printf "%s\n" "#define HAVE___ARGZ_STRINGIFY 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "dcgettext" "ac_cv_func_dcgettext"
+if test "x$ac_cv_func_dcgettext" = xyes
+then :
+  printf "%s\n" "#define HAVE_DCGETTEXT 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "mempcpy" "ac_cv_func_mempcpy"
+if test "x$ac_cv_func_mempcpy" = xyes
+then :
+  printf "%s\n" "#define HAVE_MEMPCPY 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "munmap" "ac_cv_func_munmap"
+if test "x$ac_cv_func_munmap" = xyes
+then :
+  printf "%s\n" "#define HAVE_MUNMAP 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "mremap" "ac_cv_func_mremap"
+if test "x$ac_cv_func_mremap" = xyes
+then :
+  printf "%s\n" "#define HAVE_MREMAP 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "stpcpy" "ac_cv_func_stpcpy"
+if test "x$ac_cv_func_stpcpy" = xyes
+then :
+  printf "%s\n" "#define HAVE_STPCPY 1" >>confdefs.h
+
+fi
+ac_fn_c_check_func "$LINENO" "strcspn" "ac_cv_func_strcspn"
+if test "x$ac_cv_func_strcspn" = xyes
+then :
+  printf "%s\n" "#define HAVE_STRCSPN 1" >>confdefs.h
 
 fi
-done
 
 
 INTL_DEP= INTL_INC= LIBINTL_H=
 
 
 
-for ac_header in wctype.h
-do :
-  ac_fn_c_check_header_mongrel "$LINENO" "wctype.h" "ac_cv_header_wctype_h" "$ac_includes_default"
-if test "x$ac_cv_header_wctype_h" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_WCTYPE_H 1
-_ACEOF
+ac_fn_c_check_header_compile "$LINENO" "wctype.h" "ac_cv_header_wctype_h" "$ac_includes_default"
+if test "x$ac_cv_header_wctype_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_WCTYPE_H 1" >>confdefs.h
 
 fi
 
-done
-
-for ac_header in wchar.h
-do :
-  ac_fn_c_check_header_mongrel "$LINENO" "wchar.h" "ac_cv_header_wchar_h" "$ac_includes_default"
-if test "x$ac_cv_header_wchar_h" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_WCHAR_H 1
-_ACEOF
+ac_fn_c_check_header_compile "$LINENO" "wchar.h" "ac_cv_header_wchar_h" "$ac_includes_default"
+if test "x$ac_cv_header_wchar_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_WCHAR_H 1" >>confdefs.h
 
 fi
 
-done
-
-for ac_header in langinfo.h
-do :
-  ac_fn_c_check_header_mongrel "$LINENO" "langinfo.h" "ac_cv_header_langinfo_h" "$ac_includes_default"
-if test "x$ac_cv_header_langinfo_h" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LANGINFO_H 1
-_ACEOF
+ac_fn_c_check_header_compile "$LINENO" "langinfo.h" "ac_cv_header_langinfo_h" "$ac_includes_default"
+if test "x$ac_cv_header_langinfo_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_LANGINFO_H 1" >>confdefs.h
 
 fi
 
-done
-
 
-for ac_header in mbstr.h
-do :
-  ac_fn_c_check_header_mongrel "$LINENO" "mbstr.h" "ac_cv_header_mbstr_h" "$ac_includes_default"
-if test "x$ac_cv_header_mbstr_h" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_MBSTR_H 1
-_ACEOF
+ac_fn_c_check_header_compile "$LINENO" "mbstr.h" "ac_cv_header_mbstr_h" "$ac_includes_default"
+if test "x$ac_cv_header_mbstr_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_MBSTR_H 1" >>confdefs.h
 
 fi
 
-done
-
 
 ac_fn_c_check_func "$LINENO" "mbrlen" "ac_cv_func_mbrlen"
-if test "x$ac_cv_func_mbrlen" = xyes; then :
-  $as_echo "#define HAVE_MBRLEN 1" >>confdefs.h
+if test "x$ac_cv_func_mbrlen" = xyes
+then :
+  printf "%s\n" "#define HAVE_MBRLEN 1" >>confdefs.h
 
 fi
 
 ac_fn_c_check_func "$LINENO" "mbscasecmp" "ac_cv_func_mbscasecmp"
-if test "x$ac_cv_func_mbscasecmp" = xyes; then :
-  $as_echo "#define HAVE_MBSCMP 1" >>confdefs.h
+if test "x$ac_cv_func_mbscasecmp" = xyes
+then :
+  printf "%s\n" "#define HAVE_MBSCMP 1" >>confdefs.h
 
 fi
 
 ac_fn_c_check_func "$LINENO" "mbscmp" "ac_cv_func_mbscmp"
-if test "x$ac_cv_func_mbscmp" = xyes; then :
-  $as_echo "#define HAVE_MBSCMP 1" >>confdefs.h
+if test "x$ac_cv_func_mbscmp" = xyes
+then :
+  printf "%s\n" "#define HAVE_MBSCMP 1" >>confdefs.h
 
 fi
 
 ac_fn_c_check_func "$LINENO" "mbsnrtowcs" "ac_cv_func_mbsnrtowcs"
-if test "x$ac_cv_func_mbsnrtowcs" = xyes; then :
-  $as_echo "#define HAVE_MBSNRTOWCS 1" >>confdefs.h
+if test "x$ac_cv_func_mbsnrtowcs" = xyes
+then :
+  printf "%s\n" "#define HAVE_MBSNRTOWCS 1" >>confdefs.h
 
 fi
 
 ac_fn_c_check_func "$LINENO" "mbsrtowcs" "ac_cv_func_mbsrtowcs"
-if test "x$ac_cv_func_mbsrtowcs" = xyes; then :
-  $as_echo "#define HAVE_MBSRTOWCS 1" >>confdefs.h
+if test "x$ac_cv_func_mbsrtowcs" = xyes
+then :
+  printf "%s\n" "#define HAVE_MBSRTOWCS 1" >>confdefs.h
 
 fi
 
 
 ac_fn_c_check_func "$LINENO" "mbschr" "ac_cv_func_mbschr"
-if test "x$ac_cv_func_mbschr" = xyes; then :
-  $as_echo "#define HAVE_MBSCHR 1" >>confdefs.h
+if test "x$ac_cv_func_mbschr" = xyes
+then :
+  printf "%s\n" "#define HAVE_MBSCHR 1" >>confdefs.h
 
-else
+else $as_nop
   case " $LIBOBJS " in
   *" mbschr.$ac_objext "* ) ;;
   *) LIBOBJS="$LIBOBJS mbschr.$ac_objext"
@@ -15231,43 +16330,48 @@ esac
 fi
 
 
-
 ac_fn_c_check_func "$LINENO" "wcrtomb" "ac_cv_func_wcrtomb"
-if test "x$ac_cv_func_wcrtomb" = xyes; then :
-  $as_echo "#define HAVE_WCRTOMB 1" >>confdefs.h
+if test "x$ac_cv_func_wcrtomb" = xyes
+then :
+  printf "%s\n" "#define HAVE_WCRTOMB 1" >>confdefs.h
 
 fi
 
 ac_fn_c_check_func "$LINENO" "wcscoll" "ac_cv_func_wcscoll"
-if test "x$ac_cv_func_wcscoll" = xyes; then :
-  $as_echo "#define HAVE_WCSCOLL 1" >>confdefs.h
+if test "x$ac_cv_func_wcscoll" = xyes
+then :
+  printf "%s\n" "#define HAVE_WCSCOLL 1" >>confdefs.h
 
 fi
 
 ac_fn_c_check_func "$LINENO" "wcsdup" "ac_cv_func_wcsdup"
-if test "x$ac_cv_func_wcsdup" = xyes; then :
-  $as_echo "#define HAVE_WCSDUP 1" >>confdefs.h
+if test "x$ac_cv_func_wcsdup" = xyes
+then :
+  printf "%s\n" "#define HAVE_WCSDUP 1" >>confdefs.h
 
 fi
 
 ac_fn_c_check_func "$LINENO" "wcwidth" "ac_cv_func_wcwidth"
-if test "x$ac_cv_func_wcwidth" = xyes; then :
-  $as_echo "#define HAVE_WCWIDTH 1" >>confdefs.h
+if test "x$ac_cv_func_wcwidth" = xyes
+then :
+  printf "%s\n" "#define HAVE_WCWIDTH 1" >>confdefs.h
 
 fi
 
 ac_fn_c_check_func "$LINENO" "wctype" "ac_cv_func_wctype"
-if test "x$ac_cv_func_wctype" = xyes; then :
-  $as_echo "#define HAVE_WCTYPE 1" >>confdefs.h
+if test "x$ac_cv_func_wctype" = xyes
+then :
+  printf "%s\n" "#define HAVE_WCTYPE 1" >>confdefs.h
 
 fi
 
 
 ac_fn_c_check_func "$LINENO" "wcswidth" "ac_cv_func_wcswidth"
-if test "x$ac_cv_func_wcswidth" = xyes; then :
-  $as_echo "#define HAVE_WCSWIDTH 1" >>confdefs.h
+if test "x$ac_cv_func_wcswidth" = xyes
+then :
+  printf "%s\n" "#define HAVE_WCSWIDTH 1" >>confdefs.h
 
-else
+else $as_nop
   case " $LIBOBJS " in
   *" wcswidth.$ac_objext "* ) ;;
   *) LIBOBJS="$LIBOBJS wcswidth.$ac_objext"
 
 
 
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc and mbstate_t are properly declared" >&5
-$as_echo_n "checking whether mbrtowc and mbstate_t are properly declared... " >&6; }
-if ${ac_cv_func_mbrtowc+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc and mbstate_t are properly declared" >&5
+printf %s "checking whether mbrtowc and mbstate_t are properly declared... " >&6; }
+if test ${ac_cv_func_mbrtowc+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <wchar.h>
 int
-main ()
+main (void)
 {
 wchar_t wc;
              char const s[] = "";
@@ -15299,82 +16403,74 @@ wchar_t wc;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_func_mbrtowc=yes
-else
+else $as_nop
   ac_cv_func_mbrtowc=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mbrtowc" >&5
-$as_echo "$ac_cv_func_mbrtowc" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mbrtowc" >&5
+printf "%s\n" "$ac_cv_func_mbrtowc" >&6; }
   if test $ac_cv_func_mbrtowc = yes; then
 
-$as_echo "#define HAVE_MBRTOWC 1" >>confdefs.h
+printf "%s\n" "#define HAVE_MBRTOWC 1" >>confdefs.h
 
   fi
 
 if test $ac_cv_func_mbrtowc = yes; then
-       $as_echo "#define HAVE_MBSTATE_T 1" >>confdefs.h
+       printf "%s\n" "#define HAVE_MBSTATE_T 1" >>confdefs.h
 
 fi
 
-for ac_func in iswlower iswupper towlower towupper iswctype
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+ac_fn_c_check_func "$LINENO" "iswlower" "ac_cv_func_iswlower"
+if test "x$ac_cv_func_iswlower" = xyes
+then :
+  printf "%s\n" "#define HAVE_ISWLOWER 1" >>confdefs.h
 
 fi
-done
+ac_fn_c_check_func "$LINENO" "iswupper" "ac_cv_func_iswupper"
+if test "x$ac_cv_func_iswupper" = xyes
+then :
+  printf "%s\n" "#define HAVE_ISWUPPER 1" >>confdefs.h
 
+fi
+ac_fn_c_check_func "$LINENO" "towlower" "ac_cv_func_towlower"
+if test "x$ac_cv_func_towlower" = xyes
+then :
+  printf "%s\n" "#define HAVE_TOWLOWER 1" >>confdefs.h
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for nl_langinfo and CODESET" >&5
-$as_echo_n "checking for nl_langinfo and CODESET... " >&6; }
-if ${bash_cv_langinfo_codeset+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <langinfo.h>
-int
-main ()
-{
-char* cs = nl_langinfo(CODESET);
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  bash_cv_langinfo_codeset=yes
-else
-  bash_cv_langinfo_codeset=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
+ac_fn_c_check_func "$LINENO" "towupper" "ac_cv_func_towupper"
+if test "x$ac_cv_func_towupper" = xyes
+then :
+  printf "%s\n" "#define HAVE_TOWUPPER 1" >>confdefs.h
+
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_langinfo_codeset" >&5
-$as_echo "$bash_cv_langinfo_codeset" >&6; }
-if test $bash_cv_langinfo_codeset = yes; then
-  $as_echo "#define HAVE_LANGINFO_CODESET 1" >>confdefs.h
+ac_fn_c_check_func "$LINENO" "iswctype" "ac_cv_func_iswctype"
+if test "x$ac_cv_func_iswctype" = xyes
+then :
+  printf "%s\n" "#define HAVE_ISWCTYPE 1" >>confdefs.h
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for wchar_t in wchar.h" >&5
-$as_echo_n "checking for wchar_t in wchar.h... " >&6; }
-if ${bash_cv_type_wchar_t+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for wchar_t in wchar.h" >&5
+printf %s "checking for wchar_t in wchar.h... " >&6; }
+if test ${bash_cv_type_wchar_t+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#include <wchar.h>
 
+#include <wchar.h>
 int
-main ()
+main (void)
 {
 
         wchar_t foo;
@@ -15384,31 +16480,35 @@ main ()
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   bash_cv_type_wchar_t=yes
-else
+else $as_nop
   bash_cv_type_wchar_t=no
+
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_wchar_t" >&5
-$as_echo "$bash_cv_type_wchar_t" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_wchar_t" >&5
+printf "%s\n" "$bash_cv_type_wchar_t" >&6; }
 if test $bash_cv_type_wchar_t = yes; then
 
-$as_echo "#define HAVE_WCHAR_T 1" >>confdefs.h
+printf "%s\n" "#define HAVE_WCHAR_T 1" >>confdefs.h
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for wctype_t in wctype.h" >&5
-$as_echo_n "checking for wctype_t in wctype.h... " >&6; }
-if ${bash_cv_type_wctype_t+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for wctype_t in wctype.h" >&5
+printf %s "checking for wctype_t in wctype.h... " >&6; }
+if test ${bash_cv_type_wctype_t+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
+
 #include <wctype.h>
 int
-main ()
+main (void)
 {
 
         wctype_t foo;
@@ -15418,31 +16518,35 @@ main ()
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   bash_cv_type_wctype_t=yes
-else
+else $as_nop
   bash_cv_type_wctype_t=no
+
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_wctype_t" >&5
-$as_echo "$bash_cv_type_wctype_t" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_wctype_t" >&5
+printf "%s\n" "$bash_cv_type_wctype_t" >&6; }
 if test $bash_cv_type_wctype_t = yes; then
 
-$as_echo "#define HAVE_WCTYPE_T 1" >>confdefs.h
+printf "%s\n" "#define HAVE_WCTYPE_T 1" >>confdefs.h
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for wint_t in wctype.h" >&5
-$as_echo_n "checking for wint_t in wctype.h... " >&6; }
-if ${bash_cv_type_wint_t+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for wint_t in wctype.h" >&5
+printf %s "checking for wint_t in wctype.h... " >&6; }
+if test ${bash_cv_type_wint_t+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
+
 #include <wctype.h>
 int
-main ()
+main (void)
 {
 
         wint_t foo;
@@ -15452,29 +16556,34 @@ main ()
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   bash_cv_type_wint_t=yes
-else
+else $as_nop
   bash_cv_type_wint_t=no
+
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_wint_t" >&5
-$as_echo "$bash_cv_type_wint_t" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_wint_t" >&5
+printf "%s\n" "$bash_cv_type_wint_t" >&6; }
 if test $bash_cv_type_wint_t = yes; then
 
-$as_echo "#define HAVE_WINT_T 1" >>confdefs.h
+printf "%s\n" "#define HAVE_WINT_T 1" >>confdefs.h
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for wcwidth broken with unicode combining characters" >&5
-$as_echo_n "checking for wcwidth broken with unicode combining characters... " >&6; }
-if ${bash_cv_wcwidth_broken+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for wcwidth broken with unicode combining characters" >&5
+printf %s "checking for wcwidth broken with unicode combining characters... " >&6; }
+if test ${bash_cv_wcwidth_broken+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if test "$cross_compiling" = yes
+then :
   bash_cv_wcwidth_broken=no
-else
+
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -15498,9 +16607,10 @@ char    **v;
 }
 
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
   bash_cv_wcwidth_broken=yes
-else
+else $as_nop
   bash_cv_wcwidth_broken=no
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
@@ -15508,27 +16618,23 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
 fi
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_wcwidth_broken" >&5
-$as_echo "$bash_cv_wcwidth_broken" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_wcwidth_broken" >&5
+printf "%s\n" "$bash_cv_wcwidth_broken" >&6; }
 if test "$bash_cv_wcwidth_broken" = yes; then
 
-$as_echo "#define WCWIDTH_BROKEN 1" >>confdefs.h
+printf "%s\n" "#define WCWIDTH_BROKEN 1" >>confdefs.h
 
 fi
 
 if test "$am_cv_func_iconv" = yes; then
        OLDLIBS="$LIBS"
        LIBS="$LIBS $LIBINTL $LIBICONV"
-       for ac_func in locale_charset
-do :
-  ac_fn_c_check_func "$LINENO" "locale_charset" "ac_cv_func_locale_charset"
-if test "x$ac_cv_func_locale_charset" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LOCALE_CHARSET 1
-_ACEOF
+       ac_fn_c_check_func "$LINENO" "locale_charset" "ac_cv_func_locale_charset"
+if test "x$ac_cv_func_locale_charset" = xyes
+then :
+  printf "%s\n" "#define HAVE_LOCALE_CHARSET 1" >>confdefs.h
 
 fi
-done
 
        LIBS="$OLDLIBS"
 fi
 # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
 # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
 # This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of wchar_t" >&5
-$as_echo_n "checking size of wchar_t... " >&6; }
-if ${ac_cv_sizeof_wchar_t+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (wchar_t))" "ac_cv_sizeof_wchar_t"        "$ac_includes_default"; then :
-
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of wchar_t" >&5
+printf %s "checking size of wchar_t... " >&6; }
+if test ${ac_cv_sizeof_wchar_t+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (wchar_t))" "ac_cv_sizeof_wchar_t"        "$ac_includes_default"
+then :
+
+else $as_nop
   if test "$ac_cv_type_wchar_t" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+     { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error 77 "cannot compute sizeof (wchar_t)
 See \`config.log' for more details" "$LINENO" 5; }
    else
@@ -15556,25 +16664,24 @@ See \`config.log' for more details" "$LINENO" 5; }
 fi
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_wchar_t" >&5
-$as_echo "$ac_cv_sizeof_wchar_t" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_wchar_t" >&5
+printf "%s\n" "$ac_cv_sizeof_wchar_t" >&6; }
 
 
 
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_WCHAR_T $ac_cv_sizeof_wchar_t
-_ACEOF
+printf "%s\n" "#define SIZEOF_WCHAR_T $ac_cv_sizeof_wchar_t" >>confdefs.h
 
 
 
 
 
 if test "$opt_static_link" != yes; then
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
-$as_echo_n "checking for dlopen in -ldl... " >&6; }
-if ${ac_cv_lib_dl_dlopen+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
+printf %s "checking for dlopen in -ldl... " >&6; }
+if test ${ac_cv_lib_dl_dlopen+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-ldl  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -15583,78 +16690,64 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char dlopen ();
 int
-main ()
+main (void)
 {
 return dlopen ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_dl_dlopen=yes
-else
+else $as_nop
   ac_cv_lib_dl_dlopen=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
-$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
-if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBDL 1
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
+printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; }
+if test "x$ac_cv_lib_dl_dlopen" = xyes
+then :
+  printf "%s\n" "#define HAVE_LIBDL 1" >>confdefs.h
 
   LIBS="-ldl $LIBS"
 
 fi
 
-for ac_func in dlopen dlclose dlsym
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
+ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
+if test "x$ac_cv_func_dlopen" = xyes
+then :
+  printf "%s\n" "#define HAVE_DLOPEN 1" >>confdefs.h
 
 fi
-done
+ac_fn_c_check_func "$LINENO" "dlclose" "ac_cv_func_dlclose"
+if test "x$ac_cv_func_dlclose" = xyes
+then :
+  printf "%s\n" "#define HAVE_DLCLOSE 1" >>confdefs.h
 
 fi
+ac_fn_c_check_func "$LINENO" "dlsym" "ac_cv_func_dlsym"
+if test "x$ac_cv_func_dlsym" = xyes
+then :
+  printf "%s\n" "#define HAVE_DLSYM 1" >>confdefs.h
 
-ac_fn_c_check_decl "$LINENO" "sys_siglist" "ac_cv_have_decl_sys_siglist" "#include <signal.h>
-/* NetBSD declares sys_siglist in unistd.h.  */
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-
-"
-if test "x$ac_cv_have_decl_sys_siglist" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
 fi
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SYS_SIGLIST $ac_have_decl
-_ACEOF
-
-
+fi
 
 if test "$ac_cv_func_inet_aton" != 'yes'; then
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inet_aton" >&5
-$as_echo_n "checking for inet_aton... " >&6; }
-if ${bash_cv_func_inet_aton+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for inet_aton" >&5
+printf %s "checking for inet_aton... " >&6; }
+if test ${bash_cv_func_inet_aton+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -15663,25 +16756,26 @@ else
 #include <arpa/inet.h>
 struct in_addr ap;
 int
-main ()
+main (void)
 {
  inet_aton("127.0.0.1", &ap);
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   bash_cv_func_inet_aton=yes
-else
+else $as_nop
   bash_cv_func_inet_aton=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_func_inet_aton" >&5
-$as_echo "$bash_cv_func_inet_aton" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_func_inet_aton" >&5
+printf "%s\n" "$bash_cv_func_inet_aton" >&6; }
 if test $bash_cv_func_inet_aton = yes; then
-  $as_echo "#define HAVE_INET_ATON 1" >>confdefs.h
+  printf "%s\n" "#define HAVE_INET_ATON 1" >>confdefs.h
 
 else
   case " $LIBOBJS " in
 fi
 
 case "$host_os" in
-irix4*)        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for getpwent in -lsun" >&5
-$as_echo_n "checking for getpwent in -lsun... " >&6; }
-if ${ac_cv_lib_sun_getpwent+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+irix4*)        { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for getpwent in -lsun" >&5
+printf %s "checking for getpwent in -lsun... " >&6; }
+if test ${ac_cv_lib_sun_getpwent+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lsun  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -15708,33 +16803,30 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char getpwent ();
 int
-main ()
+main (void)
 {
 return getpwent ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_sun_getpwent=yes
-else
+else $as_nop
   ac_cv_lib_sun_getpwent=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sun_getpwent" >&5
-$as_echo "$ac_cv_lib_sun_getpwent" >&6; }
-if test "x$ac_cv_lib_sun_getpwent" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBSUN 1
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sun_getpwent" >&5
+printf "%s\n" "$ac_cv_lib_sun_getpwent" >&6; }
+if test "x$ac_cv_lib_sun_getpwent" = xyes
+then :
+  printf "%s\n" "#define HAVE_LIBSUN 1" >>confdefs.h
 
   LIBS="-lsun $LIBS"
 
@@ -15747,18 +16839,20 @@ if test "$ac_cv_func_getpeername" = no; then
 if test "X$bash_cv_have_socklib" = "X"; then
 _bash_needmsg=
 else
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for socket library" >&5
-$as_echo_n "checking for socket library... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for socket library" >&5
+printf %s "checking for socket library... " >&6; }
 _bash_needmsg=yes
 fi
-if ${bash_cv_have_socklib+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for getpeername in -lsocket" >&5
-$as_echo_n "checking for getpeername in -lsocket... " >&6; }
-if ${ac_cv_lib_socket_getpeername+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+if test ${bash_cv_have_socklib+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for getpeername in -lsocket" >&5
+printf %s "checking for getpeername in -lsocket... " >&6; }
+if test ${ac_cv_lib_socket_getpeername+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lsocket -lnsl $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -15767,40 +16861,39 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char getpeername ();
 int
-main ()
+main (void)
 {
 return getpeername ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_socket_getpeername=yes
-else
+else $as_nop
   ac_cv_lib_socket_getpeername=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_getpeername" >&5
-$as_echo "$ac_cv_lib_socket_getpeername" >&6; }
-if test "x$ac_cv_lib_socket_getpeername" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_getpeername" >&5
+printf "%s\n" "$ac_cv_lib_socket_getpeername" >&6; }
+if test "x$ac_cv_lib_socket_getpeername" = xyes
+then :
   bash_cv_have_socklib=yes
-else
+else $as_nop
   bash_cv_have_socklib=no
 fi
 
 fi
 
 if test "X$_bash_needmsg" = Xyes; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_have_socklib" >&5
-$as_echo "$bash_cv_have_socklib" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_have_socklib" >&5
+printf "%s\n" "$bash_cv_have_socklib" >&6; }
   _bash_needmsg=
 fi
 if test $bash_cv_have_socklib = yes; then
@@ -15808,18 +16901,20 @@ if test $bash_cv_have_socklib = yes; then
   if test "X$bash_cv_have_libnsl" = "X"; then
     _bash_needmsg=
   else
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libnsl" >&5
-$as_echo_n "checking for libnsl... " >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libnsl" >&5
+printf %s "checking for libnsl... " >&6; }
     _bash_needmsg=yes
   fi
-  if ${bash_cv_have_libnsl+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for t_open in -lnsl" >&5
-$as_echo_n "checking for t_open in -lnsl... " >&6; }
-if ${ac_cv_lib_nsl_t_open+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  if test ${bash_cv_have_libnsl+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for t_open in -lnsl" >&5
+printf %s "checking for t_open in -lnsl... " >&6; }
+if test ${ac_cv_lib_nsl_t_open+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lnsl  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -15828,40 +16923,39 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char t_open ();
 int
-main ()
+main (void)
 {
 return t_open ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_nsl_t_open=yes
-else
+else $as_nop
   ac_cv_lib_nsl_t_open=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_t_open" >&5
-$as_echo "$ac_cv_lib_nsl_t_open" >&6; }
-if test "x$ac_cv_lib_nsl_t_open" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_t_open" >&5
+printf "%s\n" "$ac_cv_lib_nsl_t_open" >&6; }
+if test "x$ac_cv_lib_nsl_t_open" = xyes
+then :
   bash_cv_have_libnsl=yes
-else
+else $as_nop
   bash_cv_have_libnsl=no
 fi
 
 fi
 
   if test "X$_bash_needmsg" = Xyes; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_have_libnsl" >&5
-$as_echo "$bash_cv_have_libnsl" >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_have_libnsl" >&5
+printf "%s\n" "$bash_cv_have_libnsl" >&6; }
     _bash_needmsg=
   fi
   if test $bash_cv_have_libnsl = yes; then
@@ -15869,9 +16963,9 @@ $as_echo "$bash_cv_have_libnsl" >&6; }
   else
     LIBS="-lsocket $LIBS"
   fi
-  $as_echo "#define HAVE_LIBSOCKET 1" >>confdefs.h
+  printf "%s\n" "#define HAVE_LIBSOCKET 1" >>confdefs.h
 
-  $as_echo "#define HAVE_GETPEERNAME 1" >>confdefs.h
+  printf "%s\n" "#define HAVE_GETPEERNAME 1" >>confdefs.h
 
 fi
 
@@ -15880,57 +16974,64 @@ if test "$ac_cv_func_gethostbyname" = no; then
        if test "X$bash_cv_have_gethostbyname" = "X"; then
 _bash_needmsg=yes
 else
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in socket library" >&5
-$as_echo_n "checking for gethostbyname in socket library... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in socket library" >&5
+printf %s "checking for gethostbyname in socket library... " >&6; }
 _bash_needmsg=
 fi
-if ${bash_cv_have_gethostbyname+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+if test ${bash_cv_have_gethostbyname+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
+
 #include <netdb.h>
+
 int
-main ()
+main (void)
 {
- struct hostent *hp;
-  hp = gethostbyname("localhost");
+
+struct hostent *hp;
+hp = gethostbyname("localhost");
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   bash_cv_have_gethostbyname=yes
-else
+else $as_nop
   bash_cv_have_gethostbyname=no
+
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
-
 fi
 
 if test "X$_bash_needmsg" = Xyes; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in socket library" >&5
-$as_echo_n "checking for gethostbyname in socket library... " >&6; }
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in socket library" >&5
+printf %s "checking for gethostbyname in socket library... " >&6; }
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_have_gethostbyname" >&5
-$as_echo "$bash_cv_have_gethostbyname" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_have_gethostbyname" >&5
+printf "%s\n" "$bash_cv_have_gethostbyname" >&6; }
 if test "$bash_cv_have_gethostbyname" = yes; then
-$as_echo "#define HAVE_GETHOSTBYNAME 1" >>confdefs.h
+printf "%s\n" "#define HAVE_GETHOSTBYNAME 1" >>confdefs.h
 
 fi
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking type of array argument to getgroups" >&5
-$as_echo_n "checking type of array argument to getgroups... " >&6; }
-if ${ac_cv_type_getgroups+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking type of array argument to getgroups" >&5
+printf %s "checking type of array argument to getgroups... " >&6; }
+if test ${ac_cv_type_getgroups+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if test "$cross_compiling" = yes
+then :
   ac_cv_type_getgroups=cross
-else
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 /* Thanks to Mike Rendell for this test.  */
@@ -15940,7 +17041,7 @@ $ac_includes_default
 #define MAX(x, y) ((x) > (y) ? (x) : (y))
 
 int
-main ()
+main (void)
 {
   gid_t gidset[NGID];
   int i, n;
@@ -15957,9 +17058,10 @@ main ()
   return n > 0 && gidset[n] != val.gval;
 }
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
   ac_cv_type_getgroups=gid_t
-else
+else $as_nop
   ac_cv_type_getgroups=int
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
@@ -15973,111 +17075,136 @@ if test $ac_cv_type_getgroups = cross; then
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "getgroups.*int.*gid_t" >/dev/null 2>&1; then :
+  $EGREP "getgroups.*int.*gid_t" >/dev/null 2>&1
+then :
   ac_cv_type_getgroups=gid_t
-else
+else $as_nop
   ac_cv_type_getgroups=int
 fi
-rm -f conftest*
+rm -rf conftest*
 
 fi
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_getgroups" >&5
-$as_echo "$ac_cv_type_getgroups" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_getgroups" >&5
+printf "%s\n" "$ac_cv_type_getgroups" >&6; }
 
-cat >>confdefs.h <<_ACEOF
-#define GETGROUPS_T $ac_cv_type_getgroups
-_ACEOF
+printf "%s\n" "#define GETGROUPS_T $ac_cv_type_getgroups" >>confdefs.h
 
 
 ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default"
-if test "x$ac_cv_type_off_t" = xyes; then :
+if test "x$ac_cv_type_off_t" = xyes
+then :
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define off_t long int
-_ACEOF
+printf "%s\n" "#define off_t long int" >>confdefs.h
 
 fi
 
 ac_fn_c_check_type "$LINENO" "mode_t" "ac_cv_type_mode_t" "$ac_includes_default"
-if test "x$ac_cv_type_mode_t" = xyes; then :
+if test "x$ac_cv_type_mode_t" = xyes
+then :
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define mode_t int
-_ACEOF
+printf "%s\n" "#define mode_t int" >>confdefs.h
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for uid_t in sys/types.h" >&5
-$as_echo_n "checking for uid_t in sys/types.h... " >&6; }
-if ${ac_cv_type_uid_t+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for uid_t in sys/types.h" >&5
+printf %s "checking for uid_t in sys/types.h... " >&6; }
+if test ${ac_cv_type_uid_t+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <sys/types.h>
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "uid_t" >/dev/null 2>&1; then :
+  $EGREP "uid_t" >/dev/null 2>&1
+then :
   ac_cv_type_uid_t=yes
-else
+else $as_nop
   ac_cv_type_uid_t=no
 fi
-rm -f conftest*
+rm -rf conftest*
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_uid_t" >&5
-$as_echo "$ac_cv_type_uid_t" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_uid_t" >&5
+printf "%s\n" "$ac_cv_type_uid_t" >&6; }
 if test $ac_cv_type_uid_t = no; then
 
-$as_echo "#define uid_t int" >>confdefs.h
+printf "%s\n" "#define uid_t int" >>confdefs.h
 
 
-$as_echo "#define gid_t int" >>confdefs.h
+printf "%s\n" "#define gid_t int" >>confdefs.h
 
 fi
 
-ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default"
-if test "x$ac_cv_type_pid_t" = xyes; then :
 
-else
+  ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default
+"
+if test "x$ac_cv_type_pid_t" = xyes
+then :
+
+else $as_nop
+                                          cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+          #if defined _WIN64 && !defined __CYGWIN__
+          LLP64
+          #endif
+
+int
+main (void)
+{
+
+  ;
+  return 0;
+}
 
-cat >>confdefs.h <<_ACEOF
-#define pid_t int
 _ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+  ac_pid_type='int'
+else $as_nop
+  ac_pid_type='__int64'
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+printf "%s\n" "#define pid_t $ac_pid_type" >>confdefs.h
+
 
 fi
 
+
 ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
-if test "x$ac_cv_type_size_t" = xyes; then :
+if test "x$ac_cv_type_size_t" = xyes
+then :
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define size_t unsigned int
-_ACEOF
+printf "%s\n" "#define size_t unsigned int" >>confdefs.h
 
 fi
 
 
   ac_fn_c_check_type "$LINENO" "uintptr_t" "ac_cv_type_uintptr_t" "$ac_includes_default"
-if test "x$ac_cv_type_uintptr_t" = xyes; then :
+if test "x$ac_cv_type_uintptr_t" = xyes
+then :
 
-$as_echo "#define HAVE_UINTPTR_T 1" >>confdefs.h
+printf "%s\n" "#define HAVE_UINTPTR_T 1" >>confdefs.h
 
-else
+else $as_nop
   for ac_type in 'unsigned int' 'unsigned long int' \
        'unsigned long long int'; do
        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 $ac_includes_default
 int
-main ()
+main (void)
 {
 static int test_array [1 - 2 * !(sizeof (void *) <= sizeof ($ac_type))];
 test_array [0] = 0;
@@ -16087,15 +17214,14 @@ return test_array [0];
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
 
-cat >>confdefs.h <<_ACEOF
-#define uintptr_t $ac_type
-_ACEOF
+printf "%s\n" "#define uintptr_t $ac_type" >>confdefs.h
 
          ac_type=
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
        test -z "$ac_type" && break
      done
 fi
 
 
 ac_fn_c_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "$ac_includes_default"
-if test "x$ac_cv_type_ssize_t" = xyes; then :
+if test "x$ac_cv_type_ssize_t" = xyes
+then :
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define ssize_t int
-_ACEOF
+printf "%s\n" "#define ssize_t int" >>confdefs.h
 
 fi
 
 ac_fn_c_check_type "$LINENO" "time_t" "ac_cv_type_time_t" "$ac_includes_default"
-if test "x$ac_cv_type_time_t" = xyes; then :
+if test "x$ac_cv_type_time_t" = xyes
+then :
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define time_t long
-_ACEOF
+printf "%s\n" "#define time_t long" >>confdefs.h
 
 fi
 
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for long long" >&5
-$as_echo_n "checking for long long... " >&6; }
-if ${bash_cv_type_long_long+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for long long int" >&5
+printf %s "checking for long long int... " >&6; }
+if test ${ac_cv_type_long_long_int+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  ac_cv_type_long_long_int=yes
+      case $ac_prog_cc_stdc in
+       no | c89) ;;
+       *)
+         ac_cv_type_long_long_int=$ac_cv_type_unsigned_long_long_int
+         if test $ac_cv_type_long_long_int = yes; then
+                                   if test "$cross_compiling" = yes
+then :
+  :
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-
-long long ll = 1; int i = 63;
+#include <limits.h>
+                  #ifndef LLONG_MAX
+                  # define HALF \
+                           (1LL << (sizeof (long long int) * CHAR_BIT - 2))
+                  # define LLONG_MAX (HALF - 1 + HALF)
+                  #endif
 int
-main ()
+main (void)
 {
-
-long long llm = (long long) -1;
-return ll << i | ll >> i | llm / ll | llm % ll;
-
+long long int n = 1;
+                  int i;
+                  for (i = 0; ; i++)
+                    {
+                      long long int m = n << i;
+                      if (m >> i != n)
+                        return 1;
+                      if (LLONG_MAX / 2 < m)
+                        break;
+                    }
+                  return 0;
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  bash_cv_type_long_long='long long'
-else
-  bash_cv_type_long_long='long'
+if ac_fn_c_try_run "$LINENO"
+then :
+
+else $as_nop
+  ac_cv_type_long_long_int=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_long_long" >&5
-$as_echo "$bash_cv_type_long_long" >&6; }
-if test "$bash_cv_type_long_long" = 'long long'; then
-  $as_echo "#define HAVE_LONG_LONG 1" >>confdefs.h
 
+         fi;;
+      esac
 fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_long_int" >&5
+printf "%s\n" "$ac_cv_type_long_long_int" >&6; }
+  if test $ac_cv_type_long_long_int = yes; then
 
+printf "%s\n" "#define HAVE_LONG_LONG_INT 1" >>confdefs.h
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for unsigned long long" >&5
-$as_echo_n "checking for unsigned long long... " >&6; }
-if ${bash_cv_type_unsigned_long_long+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-unsigned long long ull = 1; int i = 63;
-int
-main ()
-{
-
-unsigned long long ullmax = (unsigned long long) -1;
-return ull << i | ull >> i | ullmax / ull | ullmax % ull;
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  bash_cv_type_unsigned_long_long='unsigned long long'
-else
-  bash_cv_type_unsigned_long_long='unsigned long'
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_unsigned_long_long" >&5
-$as_echo "$bash_cv_type_unsigned_long_long" >&6; }
-if test "$bash_cv_type_unsigned_long_long" = 'unsigned long long'; then
-  $as_echo "#define HAVE_UNSIGNED_LONG_LONG 1" >>confdefs.h
-
-fi
+  fi
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking return type of signal handlers" >&5
-$as_echo_n "checking return type of signal handlers... " >&6; }
-if ${ac_cv_type_signal+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for unsigned long long int" >&5
+printf %s "checking for unsigned long long int... " >&6; }
+if test ${ac_cv_type_unsigned_long_long_int+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  ac_cv_type_unsigned_long_long_int=yes
+     case $ac_prog_cc_stdc in
+       no | c89) ;;
+       *)
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#include <sys/types.h>
-#include <signal.h>
 
+  /* For now, do not test the preprocessor; as of 2007 there are too many
+        implementations with broken preprocessors.  Perhaps this can
+        be revisited in 2012.  In the meantime, code should not expect
+        #if to work with literals wider than 32 bits.  */
+      /* Test literals.  */
+      long long int ll = 9223372036854775807ll;
+      long long int nll = -9223372036854775807LL;
+      unsigned long long int ull = 18446744073709551615ULL;
+      /* Test constant expressions.   */
+      typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll)
+                    ? 1 : -1)];
+      typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1
+                    ? 1 : -1)];
+      int i = 63;
 int
-main ()
+main (void)
 {
-return *(signal (0, 0)) (0) == 1;
+/* Test availability of runtime routines for shift and division.  */
+      long long int llmax = 9223372036854775807ll;
+      unsigned long long int ullmax = 18446744073709551615ull;
+      return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i)
+             | (llmax / ll) | (llmax % ll)
+             | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i)
+             | (ullmax / ull) | (ullmax % ull));
   ;
   return 0;
 }
+
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_type_signal=int
-else
-  ac_cv_type_signal=void
+if ac_fn_c_try_link "$LINENO"
+then :
+
+else $as_nop
+  ac_cv_type_unsigned_long_long_int=no
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+    conftest$ac_exeext conftest.$ac_ext;;
+     esac
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_signal" >&5
-$as_echo "$ac_cv_type_signal" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_unsigned_long_long_int" >&5
+printf "%s\n" "$ac_cv_type_unsigned_long_long_int" >&6; }
+  if test $ac_cv_type_unsigned_long_long_int = yes; then
 
-cat >>confdefs.h <<_ACEOF
-#define RETSIGTYPE $ac_cv_type_signal
-_ACEOF
+printf "%s\n" "#define HAVE_UNSIGNED_LONG_LONG_INT 1" >>confdefs.h
+
+  fi
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sig_atomic_t in signal.h" >&5
-$as_echo_n "checking for sig_atomic_t in signal.h... " >&6; }
-if ${ac_cv_have_sig_atomic_t+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sig_atomic_t in signal.h" >&5
+printf %s "checking for sig_atomic_t in signal.h... " >&6; }
+if test ${ac_cv_have_sig_atomic_t+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-
-#include <signal.h>
-
+ #include <signal.h>
 int
-main ()
+main (void)
 {
  sig_atomic_t x;
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_have_sig_atomic_t=yes
-else
+else $as_nop
   ac_cv_have_sig_atomic_t=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_sig_atomic_t" >&5
-$as_echo "$ac_cv_have_sig_atomic_t" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_sig_atomic_t" >&5
+printf "%s\n" "$ac_cv_have_sig_atomic_t" >&6; }
 if test "$ac_cv_have_sig_atomic_t" = "no"
 then
-    ac_fn_c_check_type "$LINENO" "sig_atomic_t" "ac_cv_type_sig_atomic_t" "$ac_includes_default"
-if test "x$ac_cv_type_sig_atomic_t" = xyes; then :
 
-else
 
-cat >>confdefs.h <<_ACEOF
-#define sig_atomic_t int
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sig_atomic_t" >&5
+printf %s "checking for sig_atomic_t... " >&6; }
+if test ${bash_cv_type_sig_atomic_t+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#if HAVE_STDDEF_H
+#include <stddef.h>
+#endif
+#if HAVE_INTTYPES_H
+#include <inttypes.h>
+#endif
+#if HAVE_STDINT_H
+#include <stdint.h>
+#endif
+#include <signal.h>
+
 _ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "sig_atomic_t" >/dev/null 2>&1
+then :
+  bash_cv_type_sig_atomic_t=yes
+else $as_nop
+  bash_cv_type_sig_atomic_t=no
+fi
+rm -rf conftest*
+
+fi
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_sig_atomic_t" >&5
+printf "%s\n" "$bash_cv_type_sig_atomic_t" >&6; }
+
+if test $bash_cv_type_sig_atomic_t = no; then
+  printf "%s\n" "#define sig_atomic_t int" >>confdefs.h
 
 fi
 
 # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
 # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
 # This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of char" >&5
-$as_echo_n "checking size of char... " >&6; }
-if ${ac_cv_sizeof_char+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (char))" "ac_cv_sizeof_char"        "$ac_includes_default"; then :
-
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of char" >&5
+printf %s "checking size of char... " >&6; }
+if test ${ac_cv_sizeof_char+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (char))" "ac_cv_sizeof_char"        "$ac_includes_default"
+then :
+
+else $as_nop
   if test "$ac_cv_type_char" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+     { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error 77 "cannot compute sizeof (char)
 See \`config.log' for more details" "$LINENO" 5; }
    else
@@ -16298,31 +17479,31 @@ See \`config.log' for more details" "$LINENO" 5; }
 fi
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_char" >&5
-$as_echo "$ac_cv_sizeof_char" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_char" >&5
+printf "%s\n" "$ac_cv_sizeof_char" >&6; }
 
 
 
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_CHAR $ac_cv_sizeof_char
-_ACEOF
+printf "%s\n" "#define SIZEOF_CHAR $ac_cv_sizeof_char" >>confdefs.h
 
 
 # The cast to long int works around a bug in the HP C Compiler
 # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
 # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
 # This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of short" >&5
-$as_echo_n "checking size of short... " >&6; }
-if ${ac_cv_sizeof_short+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short"        "$ac_includes_default"; then :
-
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of short" >&5
+printf %s "checking size of short... " >&6; }
+if test ${ac_cv_sizeof_short+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short"        "$ac_includes_default"
+then :
+
+else $as_nop
   if test "$ac_cv_type_short" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+     { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error 77 "cannot compute sizeof (short)
 See \`config.log' for more details" "$LINENO" 5; }
    else
@@ -16331,31 +17512,31 @@ See \`config.log' for more details" "$LINENO" 5; }
 fi
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5
-$as_echo "$ac_cv_sizeof_short" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5
+printf "%s\n" "$ac_cv_sizeof_short" >&6; }
 
 
 
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_SHORT $ac_cv_sizeof_short
-_ACEOF
+printf "%s\n" "#define SIZEOF_SHORT $ac_cv_sizeof_short" >>confdefs.h
 
 
 # The cast to long int works around a bug in the HP C Compiler
 # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
 # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
 # This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5
-$as_echo_n "checking size of int... " >&6; }
-if ${ac_cv_sizeof_int+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int"        "$ac_includes_default"; then :
-
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of int" >&5
+printf %s "checking size of int... " >&6; }
+if test ${ac_cv_sizeof_int+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int"        "$ac_includes_default"
+then :
+
+else $as_nop
   if test "$ac_cv_type_int" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+     { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error 77 "cannot compute sizeof (int)
 See \`config.log' for more details" "$LINENO" 5; }
    else
@@ -16364,31 +17545,31 @@ See \`config.log' for more details" "$LINENO" 5; }
 fi
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5
-$as_echo "$ac_cv_sizeof_int" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5
+printf "%s\n" "$ac_cv_sizeof_int" >&6; }
 
 
 
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_INT $ac_cv_sizeof_int
-_ACEOF
+printf "%s\n" "#define SIZEOF_INT $ac_cv_sizeof_int" >>confdefs.h
 
 
 # The cast to long int works around a bug in the HP C Compiler
 # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
 # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
 # This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5
-$as_echo_n "checking size of long... " >&6; }
-if ${ac_cv_sizeof_long+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long"        "$ac_includes_default"; then :
-
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of long" >&5
+printf %s "checking size of long... " >&6; }
+if test ${ac_cv_sizeof_long+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long"        "$ac_includes_default"
+then :
+
+else $as_nop
   if test "$ac_cv_type_long" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+     { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error 77 "cannot compute sizeof (long)
 See \`config.log' for more details" "$LINENO" 5; }
    else
@@ -16397,31 +17578,31 @@ See \`config.log' for more details" "$LINENO" 5; }
 fi
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5
-$as_echo "$ac_cv_sizeof_long" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5
+printf "%s\n" "$ac_cv_sizeof_long" >&6; }
 
 
 
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_LONG $ac_cv_sizeof_long
-_ACEOF
+printf "%s\n" "#define SIZEOF_LONG $ac_cv_sizeof_long" >>confdefs.h
 
 
 # The cast to long int works around a bug in the HP C Compiler
 # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
 # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
 # This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of char *" >&5
-$as_echo_n "checking size of char *... " >&6; }
-if ${ac_cv_sizeof_char_p+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (char *))" "ac_cv_sizeof_char_p"        "$ac_includes_default"; then :
-
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of char *" >&5
+printf %s "checking size of char *... " >&6; }
+if test ${ac_cv_sizeof_char_p+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (char *))" "ac_cv_sizeof_char_p"        "$ac_includes_default"
+then :
+
+else $as_nop
   if test "$ac_cv_type_char_p" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+     { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error 77 "cannot compute sizeof (char *)
 See \`config.log' for more details" "$LINENO" 5; }
    else
@@ -16430,31 +17611,64 @@ See \`config.log' for more details" "$LINENO" 5; }
 fi
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_char_p" >&5
-$as_echo "$ac_cv_sizeof_char_p" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_char_p" >&5
+printf "%s\n" "$ac_cv_sizeof_char_p" >&6; }
 
 
 
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_CHAR_P $ac_cv_sizeof_char_p
-_ACEOF
+printf "%s\n" "#define SIZEOF_CHAR_P $ac_cv_sizeof_char_p" >>confdefs.h
 
 
 # The cast to long int works around a bug in the HP C Compiler
 # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
 # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
 # This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of double" >&5
-$as_echo_n "checking size of double... " >&6; }
-if ${ac_cv_sizeof_double+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (double))" "ac_cv_sizeof_double"        "$ac_includes_default"; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of size_t" >&5
+printf %s "checking size of size_t... " >&6; }
+if test ${ac_cv_sizeof_size_t+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (size_t))" "ac_cv_sizeof_size_t"        "$ac_includes_default"
+then :
+
+else $as_nop
+  if test "$ac_cv_type_size_t" = yes; then
+     { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error 77 "cannot compute sizeof (size_t)
+See \`config.log' for more details" "$LINENO" 5; }
+   else
+     ac_cv_sizeof_size_t=0
+   fi
+fi
 
-else
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_size_t" >&5
+printf "%s\n" "$ac_cv_sizeof_size_t" >&6; }
+
+
+
+printf "%s\n" "#define SIZEOF_SIZE_T $ac_cv_sizeof_size_t" >>confdefs.h
+
+
+# The cast to long int works around a bug in the HP C Compiler
+# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+# This bug is HP SR number 8606223364.
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of double" >&5
+printf %s "checking size of double... " >&6; }
+if test ${ac_cv_sizeof_double+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (double))" "ac_cv_sizeof_double"        "$ac_includes_default"
+then :
+
+else $as_nop
   if test "$ac_cv_type_double" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+     { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error 77 "cannot compute sizeof (double)
 See \`config.log' for more details" "$LINENO" 5; }
    else
@@ -16463,31 +17677,31 @@ See \`config.log' for more details" "$LINENO" 5; }
 fi
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_double" >&5
-$as_echo "$ac_cv_sizeof_double" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_double" >&5
+printf "%s\n" "$ac_cv_sizeof_double" >&6; }
 
 
 
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_DOUBLE $ac_cv_sizeof_double
-_ACEOF
+printf "%s\n" "#define SIZEOF_DOUBLE $ac_cv_sizeof_double" >>confdefs.h
 
 
 # The cast to long int works around a bug in the HP C Compiler
 # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
 # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
 # This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5
-$as_echo_n "checking size of long long... " >&6; }
-if ${ac_cv_sizeof_long_long+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long"        "$ac_includes_default"; then :
-
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5
+printf %s "checking size of long long... " >&6; }
+if test ${ac_cv_sizeof_long_long+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long"        "$ac_includes_default"
+then :
+
+else $as_nop
   if test "$ac_cv_type_long_long" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+     { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error 77 "cannot compute sizeof (long long)
 See \`config.log' for more details" "$LINENO" 5; }
    else
@@ -16496,36 +17710,32 @@ See \`config.log' for more details" "$LINENO" 5; }
 fi
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5
-$as_echo "$ac_cv_sizeof_long_long" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5
+printf "%s\n" "$ac_cv_sizeof_long_long" >&6; }
 
 
 
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long
-_ACEOF
+printf "%s\n" "#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long" >>confdefs.h
 
 
 
 ac_fn_c_check_type "$LINENO" "u_int" "ac_cv_type_u_int" "$ac_includes_default"
-if test "x$ac_cv_type_u_int" = xyes; then :
+if test "x$ac_cv_type_u_int" = xyes
+then :
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define u_int unsigned int
-_ACEOF
+printf "%s\n" "#define u_int unsigned int" >>confdefs.h
 
 fi
 
 ac_fn_c_check_type "$LINENO" "u_long" "ac_cv_type_u_long" "$ac_includes_default"
-if test "x$ac_cv_type_u_long" = xyes; then :
+if test "x$ac_cv_type_u_long" = xyes
+then :
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define u_long unsigned long
-_ACEOF
+printf "%s\n" "#define u_long unsigned long" >>confdefs.h
 
 fi
 
 
 if test "$ac_cv_sizeof_short" = 2; then
   ac_fn_c_check_type "$LINENO" "bits16_t" "ac_cv_type_bits16_t" "$ac_includes_default"
-if test "x$ac_cv_type_bits16_t" = xyes; then :
+if test "x$ac_cv_type_bits16_t" = xyes
+then :
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define bits16_t short
-_ACEOF
+printf "%s\n" "#define bits16_t short" >>confdefs.h
 
 fi
 
 elif test "$ac_cv_sizeof_char" = 2; then
   ac_fn_c_check_type "$LINENO" "bits16_t" "ac_cv_type_bits16_t" "$ac_includes_default"
-if test "x$ac_cv_type_bits16_t" = xyes; then :
+if test "x$ac_cv_type_bits16_t" = xyes
+then :
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define bits16_t char
-_ACEOF
+printf "%s\n" "#define bits16_t char" >>confdefs.h
 
 fi
 
 else
   ac_fn_c_check_type "$LINENO" "bits16_t" "ac_cv_type_bits16_t" "$ac_includes_default"
-if test "x$ac_cv_type_bits16_t" = xyes; then :
+if test "x$ac_cv_type_bits16_t" = xyes
+then :
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define bits16_t short
-_ACEOF
+printf "%s\n" "#define bits16_t short" >>confdefs.h
 
 fi
 
 
 if test "$ac_cv_sizeof_short" = 2; then
   ac_fn_c_check_type "$LINENO" "u_bits16_t" "ac_cv_type_u_bits16_t" "$ac_includes_default"
-if test "x$ac_cv_type_u_bits16_t" = xyes; then :
+if test "x$ac_cv_type_u_bits16_t" = xyes
+then :
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define u_bits16_t unsigned short
-_ACEOF
+printf "%s\n" "#define u_bits16_t unsigned short" >>confdefs.h
 
 fi
 
 elif test "$ac_cv_sizeof_char" = 2; then
   ac_fn_c_check_type "$LINENO" "u_bits16_t" "ac_cv_type_u_bits16_t" "$ac_includes_default"
-if test "x$ac_cv_type_u_bits16_t" = xyes; then :
+if test "x$ac_cv_type_u_bits16_t" = xyes
+then :
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define u_bits16_t unsigned char
-_ACEOF
+printf "%s\n" "#define u_bits16_t unsigned char" >>confdefs.h
 
 fi
 
 else
   ac_fn_c_check_type "$LINENO" "u_bits16_t" "ac_cv_type_u_bits16_t" "$ac_includes_default"
-if test "x$ac_cv_type_u_bits16_t" = xyes; then :
+if test "x$ac_cv_type_u_bits16_t" = xyes
+then :
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define u_bits16_t unsigned short
-_ACEOF
+printf "%s\n" "#define u_bits16_t unsigned short" >>confdefs.h
 
 fi
 
 
 if test "$ac_cv_sizeof_int" = 4; then
   ac_fn_c_check_type "$LINENO" "bits32_t" "ac_cv_type_bits32_t" "$ac_includes_default"
-if test "x$ac_cv_type_bits32_t" = xyes; then :
+if test "x$ac_cv_type_bits32_t" = xyes
+then :
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define bits32_t int
-_ACEOF
+printf "%s\n" "#define bits32_t int" >>confdefs.h
 
 fi
 
 elif test "$ac_cv_sizeof_long" = 4; then
   ac_fn_c_check_type "$LINENO" "bits32_t" "ac_cv_type_bits32_t" "$ac_includes_default"
-if test "x$ac_cv_type_bits32_t" = xyes; then :
+if test "x$ac_cv_type_bits32_t" = xyes
+then :
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define bits32_t long
-_ACEOF
+printf "%s\n" "#define bits32_t long" >>confdefs.h
 
 fi
 
 else
   ac_fn_c_check_type "$LINENO" "bits32_t" "ac_cv_type_bits32_t" "$ac_includes_default"
-if test "x$ac_cv_type_bits32_t" = xyes; then :
+if test "x$ac_cv_type_bits32_t" = xyes
+then :
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define bits32_t int
-_ACEOF
+printf "%s\n" "#define bits32_t int" >>confdefs.h
 
 fi
 
 
 if test "$ac_cv_sizeof_int" = 4; then
   ac_fn_c_check_type "$LINENO" "u_bits32_t" "ac_cv_type_u_bits32_t" "$ac_includes_default"
-if test "x$ac_cv_type_u_bits32_t" = xyes; then :
+if test "x$ac_cv_type_u_bits32_t" = xyes
+then :
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define u_bits32_t unsigned int
-_ACEOF
+printf "%s\n" "#define u_bits32_t unsigned int" >>confdefs.h
 
 fi
 
 elif test "$ac_cv_sizeof_long" = 4; then
   ac_fn_c_check_type "$LINENO" "u_bits32_t" "ac_cv_type_u_bits32_t" "$ac_includes_default"
-if test "x$ac_cv_type_u_bits32_t" = xyes; then :
+if test "x$ac_cv_type_u_bits32_t" = xyes
+then :
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define u_bits32_t unsigned long
-_ACEOF
+printf "%s\n" "#define u_bits32_t unsigned long" >>confdefs.h
 
 fi
 
 else
   ac_fn_c_check_type "$LINENO" "u_bits32_t" "ac_cv_type_u_bits32_t" "$ac_includes_default"
-if test "x$ac_cv_type_u_bits32_t" = xyes; then :
+if test "x$ac_cv_type_u_bits32_t" = xyes
+then :
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define u_bits32_t unsigned int
-_ACEOF
+printf "%s\n" "#define u_bits32_t unsigned int" >>confdefs.h
 
 fi
 
 
 if test "$ac_cv_sizeof_char_p" = 8; then
   ac_fn_c_check_type "$LINENO" "bits64_t" "ac_cv_type_bits64_t" "$ac_includes_default"
-if test "x$ac_cv_type_bits64_t" = xyes; then :
+if test "x$ac_cv_type_bits64_t" = xyes
+then :
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define bits64_t char *
-_ACEOF
+printf "%s\n" "#define bits64_t char *" >>confdefs.h
 
 fi
 
 elif test "$ac_cv_sizeof_double" = 8; then
   ac_fn_c_check_type "$LINENO" "bits64_t" "ac_cv_type_bits64_t" "$ac_includes_default"
-if test "x$ac_cv_type_bits64_t" = xyes; then :
+if test "x$ac_cv_type_bits64_t" = xyes
+then :
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define bits64_t double
-_ACEOF
+printf "%s\n" "#define bits64_t double" >>confdefs.h
 
 fi
 
 elif test -n "$ac_cv_type_long_long" && test "$ac_cv_sizeof_long_long" = 8; then
   ac_fn_c_check_type "$LINENO" "bits64_t" "ac_cv_type_bits64_t" "$ac_includes_default"
-if test "x$ac_cv_type_bits64_t" = xyes; then :
+if test "x$ac_cv_type_bits64_t" = xyes
+then :
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define bits64_t long long
-_ACEOF
+printf "%s\n" "#define bits64_t long long" >>confdefs.h
 
 fi
 
 elif test "$ac_cv_sizeof_long" = 8; then
   ac_fn_c_check_type "$LINENO" "bits64_t" "ac_cv_type_bits64_t" "$ac_includes_default"
-if test "x$ac_cv_type_bits64_t" = xyes; then :
+if test "x$ac_cv_type_bits64_t" = xyes
+then :
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define bits64_t long
-_ACEOF
+printf "%s\n" "#define bits64_t long" >>confdefs.h
 
 fi
 
 else
   ac_fn_c_check_type "$LINENO" "bits64_t" "ac_cv_type_bits64_t" "$ac_includes_default"
-if test "x$ac_cv_type_bits64_t" = xyes; then :
+if test "x$ac_cv_type_bits64_t" = xyes
+then :
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define bits64_t double
-_ACEOF
+printf "%s\n" "#define bits64_t double" >>confdefs.h
 
 fi
 
 
 if test "$ac_cv_sizeof_int" = "$ac_cv_sizeof_char_p"; then
   ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default"
-if test "x$ac_cv_type_ptrdiff_t" = xyes; then :
+if test "x$ac_cv_type_ptrdiff_t" = xyes
+then :
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define ptrdiff_t int
-_ACEOF
+printf "%s\n" "#define ptrdiff_t int" >>confdefs.h
 
 fi
 
 elif test "$ac_cv_sizeof_long" = "$ac_cv_sizeof_char_p"; then
   ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default"
-if test "x$ac_cv_type_ptrdiff_t" = xyes; then :
+if test "x$ac_cv_type_ptrdiff_t" = xyes
+then :
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define ptrdiff_t long
-_ACEOF
+printf "%s\n" "#define ptrdiff_t long" >>confdefs.h
 
 fi
 
 elif test "$ac_cv_type_long_long" = yes && test "$ac_cv_sizeof_long_long" = "$ac_cv_sizeof_char_p"; then
   ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default"
-if test "x$ac_cv_type_ptrdiff_t" = xyes; then :
+if test "x$ac_cv_type_ptrdiff_t" = xyes
+then :
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define ptrdiff_t long long
-_ACEOF
+printf "%s\n" "#define ptrdiff_t long long" >>confdefs.h
 
 fi
 
 else
   ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default"
-if test "x$ac_cv_type_ptrdiff_t" = xyes; then :
+if test "x$ac_cv_type_ptrdiff_t" = xyes
+then :
 
-else
+else $as_nop
 
-cat >>confdefs.h <<_ACEOF
-#define ptrdiff_t int
-_ACEOF
+printf "%s\n" "#define ptrdiff_t int" >>confdefs.h
 
 fi
 
 fi
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stat file-mode macros are broken" >&5
-$as_echo_n "checking whether stat file-mode macros are broken... " >&6; }
-if ${ac_cv_header_stat_broken+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stat file-mode macros are broken" >&5
+printf %s "checking whether stat file-mode macros are broken... " >&6; }
+if test ${ac_cv_header_stat_broken+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <sys/types.h>
@@ -16829,27 +18019,29 @@ extern char c4[S_ISSOCK (S_IFREG) ? -1 : 1];
 #endif
 
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   ac_cv_header_stat_broken=no
-else
+else $as_nop
   ac_cv_header_stat_broken=yes
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stat_broken" >&5
-$as_echo "$ac_cv_header_stat_broken" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stat_broken" >&5
+printf "%s\n" "$ac_cv_header_stat_broken" >&6; }
 if test $ac_cv_header_stat_broken = yes; then
 
-$as_echo "#define STAT_MACROS_BROKEN 1" >>confdefs.h
+printf "%s\n" "#define STAT_MACROS_BROKEN 1" >>confdefs.h
 
 fi
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether #! works in shell scripts" >&5
-$as_echo_n "checking whether #! works in shell scripts... " >&6; }
-if ${ac_cv_sys_interpreter+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether #! works in shell scripts" >&5
+printf %s "checking whether #! works in shell scripts... " >&6; }
+if test ${ac_cv_sys_interpreter+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   echo '#! /bin/cat
 exit 69
 ' >conftest
@@ -16862,128 +18054,67 @@ else
 fi
 rm -f conftest
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_interpreter" >&5
-$as_echo "$ac_cv_sys_interpreter" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_interpreter" >&5
+printf "%s\n" "$ac_cv_sys_interpreter" >&6; }
 interpval=$ac_cv_sys_interpreter
 
 if test $ac_cv_sys_interpreter = yes; then
-$as_echo "#define HAVE_HASH_BANG_EXEC 1" >>confdefs.h
-
-fi
-
-if test "$ac_cv_func_lstat" = "no"; then
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for lstat" >&5
-$as_echo_n "checking for lstat... " >&6; }
-if ${bash_cv_func_lstat+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#include <sys/types.h>
-#include <sys/stat.h>
-
-int
-main ()
-{
- lstat(".",(struct stat *)0);
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  bash_cv_func_lstat=yes
-else
-  bash_cv_func_lstat=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_func_lstat" >&5
-$as_echo "$bash_cv_func_lstat" >&6; }
-if test $bash_cv_func_lstat = yes; then
-  $as_echo "#define HAVE_LSTAT 1" >>confdefs.h
-
-fi
-
-fi
-
+printf "%s\n" "#define HAVE_HASH_BANG_EXEC 1" >>confdefs.h
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the ctype macros accept non-ascii characters" >&5
-$as_echo_n "checking whether the ctype macros accept non-ascii characters... " >&6; }
-if ${bash_cv_func_ctype_nonascii+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check ctype macros if cross compiling -- defaulting to no" >&5
-$as_echo "$as_me: WARNING: cannot check ctype macros if cross compiling -- defaulting to no" >&2;}
-    bash_cv_func_ctype_nonascii=no
+fi
 
-else
+if test "$ac_cv_func_lstat" = "no"; then
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for lstat" >&5
+printf %s "checking for lstat... " >&6; }
+if test ${bash_cv_func_lstat+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
-#ifdef HAVE_LOCALE_H
-#include <locale.h>
-#endif
-#include <stdio.h>
-#include <ctype.h>
-#include <stdlib.h>
+               #include <sys/types.h>
+               #include <sys/stat.h>
 
 int
-main(c, v)
-int    c;
-char   *v[];
+main (void)
 {
-       char    *deflocale;
-       unsigned char x;
-       int     r1, r2;
-
-#ifdef HAVE_SETLOCALE
-       /* We take a shot here.  If that locale is not known, try the
-          system default.  We try this one because '\342' (226) is
-          known to be a printable character in that locale. */
-       deflocale = setlocale(LC_ALL, "en_US.ISO8859-1");
-       if (deflocale == 0)
-               deflocale = setlocale(LC_ALL, "");
-#endif
-
-       x = '\342';
-       r1 = isprint(x);
-       x -= 128;
-       r2 = isprint(x);
-       exit (r1 == 0 || r2 == 0);
+ lstat(".",(struct stat *)0);
+  ;
+  return 0;
 }
-
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  bash_cv_func_ctype_nonascii=yes
-else
-  bash_cv_func_ctype_nonascii=no
+if ac_fn_c_try_link "$LINENO"
+then :
+  bash_cv_func_lstat=yes
+else $as_nop
+  bash_cv_func_lstat=no
 fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+    conftest$ac_exeext conftest.$ac_ext
 fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_func_lstat" >&5
+printf "%s\n" "$bash_cv_func_lstat" >&6; }
+if test $bash_cv_func_lstat = yes; then
+  printf "%s\n" "#define HAVE_LSTAT 1" >>confdefs.h
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_func_ctype_nonascii" >&5
-$as_echo "$bash_cv_func_ctype_nonascii" >&6; }
-if test $bash_cv_func_ctype_nonascii = yes; then
-$as_echo "#define CTYPE_NON_ASCII 1" >>confdefs.h
-
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if dup2 fails to clear the close-on-exec flag" >&5
-$as_echo_n "checking if dup2 fails to clear the close-on-exec flag... " >&6; }
-if ${bash_cv_dup2_broken+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check dup2 if cross compiling -- defaulting to no" >&5
-$as_echo "$as_me: WARNING: cannot check dup2 if cross compiling -- defaulting to no" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if dup2 fails to clear the close-on-exec flag" >&5
+printf %s "checking if dup2 fails to clear the close-on-exec flag... " >&6; }
+if test ${bash_cv_dup2_broken+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if test "$cross_compiling" = yes
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check dup2 if cross compiling -- defaulting to no" >&5
+printf "%s\n" "$as_me: WARNING: cannot check dup2 if cross compiling -- defaulting to no" >&2;}
      bash_cv_dup2_broken=no
-else
+
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -17006,36 +18137,39 @@ main()
 }
 
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
   bash_cv_dup2_broken=yes
-else
+else $as_nop
   bash_cv_dup2_broken=no
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
   conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
 
-
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_dup2_broken" >&5
-$as_echo "$bash_cv_dup2_broken" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_dup2_broken" >&5
+printf "%s\n" "$bash_cv_dup2_broken" >&6; }
 if test $bash_cv_dup2_broken = yes; then
-$as_echo "#define DUP2_BROKEN 1" >>confdefs.h
+printf "%s\n" "#define DUP2_BROKEN 1" >>confdefs.h
 
 fi
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pgrps need synchronization" >&5
-$as_echo_n "checking whether pgrps need synchronization... " >&6; }
-if ${bash_cv_pgrp_pipe+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check pgrp synchronization if cross compiling -- defaulting to no" >&5
-$as_echo "$as_me: WARNING: cannot check pgrp synchronization if cross compiling -- defaulting to no" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether pgrps need synchronization" >&5
+printf %s "checking whether pgrps need synchronization... " >&6; }
+if test ${bash_cv_pgrp_pipe+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if test "$cross_compiling" = yes
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check pgrp synchronization if cross compiling -- defaulting to no" >&5
+printf "%s\n" "$as_me: WARNING: cannot check pgrp synchronization if cross compiling -- defaulting to no" >&2;}
     bash_cv_pgrp_pipe=no
-else
+
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -17093,37 +18227,43 @@ main()
 }
 
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
   bash_cv_pgrp_pipe=no
-else
+else $as_nop
   bash_cv_pgrp_pipe=yes
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
   conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
 
-
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_pgrp_pipe" >&5
-$as_echo "$bash_cv_pgrp_pipe" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_pgrp_pipe" >&5
+printf "%s\n" "$bash_cv_pgrp_pipe" >&6; }
 if test $bash_cv_pgrp_pipe = yes; then
-$as_echo "#define PGRP_PIPE 1" >>confdefs.h
+printf "%s\n" "#define PGRP_PIPE 1" >>confdefs.h
 
 fi
 
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for type of signal functions" >&5
+printf %s "checking for type of signal functions... " >&6; }
+if test ${bash_cv_signal_vintage+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for type of signal functions" >&5
-$as_echo_n "checking for type of signal functions... " >&6; }
-if ${bash_cv_signal_vintage+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
+if test ${bash_cv_posix_signals+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
+
 #include <signal.h>
+
 int
-main ()
+main (void)
 {
 
     sigset_t ss;
@@ -17136,122 +18276,185 @@ main ()
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
+  bash_cv_posix_signals=yes
+else $as_nop
+  bash_cv_posix_signals=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+
+
+if test $bash_cv_posix_signals = yes; then
   bash_cv_signal_vintage=posix
 else
-
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  if test ${bash_cv_bsd_signals+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
+
 #include <signal.h>
+
 int
-main ()
+main (void)
 {
 
-       int mask = sigmask(SIGINT);
-       sigsetmask(mask); sigblock(mask); sigpause(mask);
+int mask = sigmask(SIGINT);
+sigsetmask(mask); sigblock(mask); sigpause(mask);
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  bash_cv_signal_vintage=4.2bsd
-else
+if ac_fn_c_try_link "$LINENO"
+then :
+  bash_cv_bsd_signals=yes
+else $as_nop
+  bash_cv_bsd_signals=no
 
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+
+
+  if test $bash_cv_bsd_signals = yes; then
+    bash_cv_signal_vintage=4.2bsd
+  else
+    if test ${bash_cv_sysv_signals+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
-       #include <signal.h>
-       RETSIGTYPE foo() { }
+#include <signal.h>
+void foo() { }
+
 int
-main ()
+main (void)
 {
 
-               int mask = sigmask(SIGINT);
-               sigset(SIGINT, foo); sigrelse(SIGINT);
-               sighold(SIGINT); sigpause(SIGINT);
+int mask = sigmask(SIGINT);
+sigset(SIGINT, foo); sigrelse(SIGINT);
+sighold(SIGINT); sigpause(SIGINT);
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  bash_cv_signal_vintage=svr3
-else
-  bash_cv_signal_vintage=v7
+if ac_fn_c_try_link "$LINENO"
+then :
+  bash_cv_sysv_signals=yes
+else $as_nop
+  bash_cv_sysv_signals=no
 
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
-
 fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
 
+
+    if test $bash_cv_sysv_signals = yes; then
+      bash_cv_signal_vintage=svr3
+    else
+      bash_cv_signal_vintage=v7
+    fi
+  fi
 fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_signal_vintage" >&5
-$as_echo "$bash_cv_signal_vintage" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_signal_vintage" >&5
+printf "%s\n" "$bash_cv_signal_vintage" >&6; }
 if test "$bash_cv_signal_vintage" = posix; then
-$as_echo "#define HAVE_POSIX_SIGNALS 1" >>confdefs.h
+printf "%s\n" "#define HAVE_POSIX_SIGNALS 1" >>confdefs.h
 
 elif test "$bash_cv_signal_vintage" = "4.2bsd"; then
-$as_echo "#define HAVE_BSD_SIGNALS 1" >>confdefs.h
+printf "%s\n" "#define HAVE_BSD_SIGNALS 1" >>confdefs.h
 
 elif test "$bash_cv_signal_vintage" = svr3; then
-$as_echo "#define HAVE_USG_SIGHOLD 1" >>confdefs.h
+printf "%s\n" "#define HAVE_USG_SIGHOLD 1" >>confdefs.h
 
 fi
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys_errlist and sys_nerr" >&5
-$as_echo_n "checking for sys_errlist and sys_nerr... " >&6; }
-if ${bash_cv_sys_errlist+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sys_errlist and sys_nerr" >&5
+printf %s "checking for sys_errlist and sys_nerr... " >&6; }
+if test ${bash_cv_sys_errlist+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
+
 #include <errno.h>
+
 int
-main ()
+main (void)
 {
+
 extern char *sys_errlist[];
- extern int sys_nerr;
- char *msg = sys_errlist[sys_nerr - 1];
+extern int sys_nerr;
+char *msg = sys_errlist[sys_nerr - 1];
+
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   bash_cv_sys_errlist=yes
-else
+else $as_nop
   bash_cv_sys_errlist=no
+
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_sys_errlist" >&5
-$as_echo "$bash_cv_sys_errlist" >&6; }
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_sys_errlist" >&5
+printf "%s\n" "$bash_cv_sys_errlist" >&6; }
 if test $bash_cv_sys_errlist = yes; then
-$as_echo "#define HAVE_SYS_ERRLIST 1" >>confdefs.h
+printf "%s\n" "#define HAVE_SYS_ERRLIST 1" >>confdefs.h
 
 fi
 
+ac_fn_check_decl "$LINENO" "sys_siglist" "ac_cv_have_decl_sys_siglist" "#include <signal.h>
+/* NetBSD declares sys_siglist in unistd.h.  */
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys_siglist in system C library" >&5
-$as_echo_n "checking for sys_siglist in system C library... " >&6; }
-if ${bash_cv_sys_siglist+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check for sys_siglist if cross compiling -- defaulting to no" >&5
-$as_echo "$as_me: WARNING: cannot check for sys_siglist if cross compiling -- defaulting to no" >&2;}
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_sys_siglist" = xyes
+then :
+  ac_have_decl=1
+else $as_nop
+  ac_have_decl=0
+fi
+printf "%s\n" "#define HAVE_DECL_SYS_SIGLIST $ac_have_decl" >>confdefs.h
+
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sys_siglist in system C library" >&5
+printf %s "checking for sys_siglist in system C library... " >&6; }
+if test ${bash_cv_sys_siglist+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if test "$cross_compiling" = yes
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check for sys_siglist if cross compiling -- defaulting to no" >&5
+printf "%s\n" "$as_me: WARNING: cannot check for sys_siglist if cross compiling -- defaulting to no" >&2;}
         bash_cv_sys_siglist=no
-else
+
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -17270,10 +18473,12 @@ main()
 char *msg = sys_siglist[2];
 exit(msg == 0);
 }
+
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
   bash_cv_sys_siglist=yes
-else
+else $as_nop
   bash_cv_sys_siglist=no
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_sys_siglist" >&5
-$as_echo "$bash_cv_sys_siglist" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_sys_siglist" >&5
+printf "%s\n" "$bash_cv_sys_siglist" >&6; }
 if test $bash_cv_sys_siglist = yes; then
-$as_echo "#define HAVE_SYS_SIGLIST 1" >>confdefs.h
+printf "%s\n" "#define HAVE_SYS_SIGLIST 1" >>confdefs.h
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for _sys_siglist in signal.h or unistd.h" >&5
-$as_echo_n "checking for _sys_siglist in signal.h or unistd.h... " >&6; }
-if ${bash_cv_decl_under_sys_siglist+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#include <sys/types.h>
-#include <signal.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-int
-main ()
-{
- char *msg = _sys_siglist[2];
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  bash_cv_decl_under_sys_siglist=yes
-else
-  bash_cv_decl_under_sys_siglist=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_decl_under_sys_siglist" >&5
-$as_echo "$bash_cv_decl_under_sys_siglist" >&6; }
-if test $bash_cv_decl_under_sys_siglist = yes; then
-$as_echo "#define UNDER_SYS_SIGLIST_DECLARED 1" >>confdefs.h
-
-fi
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for _sys_siglist in system C library" >&5
-$as_echo_n "checking for _sys_siglist in system C library... " >&6; }
-if ${bash_cv_under_sys_siglist+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check for _sys_siglist if cross compiling -- defaulting to no" >&5
-$as_echo "$as_me: WARNING: cannot check for _sys_siglist if cross compiling -- defaulting to no" >&2;}
-        bash_cv_under_sys_siglist=no
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _sys_siglist in signal.h or unistd.h" >&5
+printf %s "checking for _sys_siglist in signal.h or unistd.h... " >&6; }
+if test ${bash_cv_decl_under_sys_siglist+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -17343,261 +18508,98 @@ else
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif
-#include <stdlib.h>
-#ifndef UNDER_SYS_SIGLIST_DECLARED
-extern char *_sys_siglist[];
-#endif
-int
-main()
-{
-char *msg = (char *)_sys_siglist[2];
-exit(msg == 0);
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  bash_cv_under_sys_siglist=yes
-else
-  bash_cv_under_sys_siglist=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_under_sys_siglist" >&5
-$as_echo "$bash_cv_under_sys_siglist" >&6; }
-if test $bash_cv_under_sys_siglist = yes; then
-$as_echo "#define HAVE_UNDER_SYS_SIGLIST 1" >>confdefs.h
-
-fi
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether signal handlers are of type void" >&5
-$as_echo_n "checking whether signal handlers are of type void... " >&6; }
-if ${bash_cv_void_sighandler+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <sys/types.h>
-#include <signal.h>
-#ifdef signal
-#undef signal
-#endif
-#ifdef __cplusplus
-extern "C"
-#endif
-void (*signal ()) ();
 int
-main ()
-{
-int i;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  bash_cv_void_sighandler=yes
-else
-  bash_cv_void_sighandler=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_void_sighandler" >&5
-$as_echo "$bash_cv_void_sighandler" >&6; }
-if test $bash_cv_void_sighandler = yes; then
-$as_echo "#define VOID_SIGHANDLER 1" >>confdefs.h
-
-fi
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_t" >&5
-$as_echo_n "checking for clock_t... " >&6; }
-if ${bash_cv_type_clock_t+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <sys/types.h>
-#if STDC_HEADERS
-#include <stdlib.h>
-#include <stddef.h>
-#endif
-#if HAVE_INTTYPES_H
-#include <inttypes.h>
-#endif
-#if HAVE_STDINT_H
-#include <stdint.h>
-#endif
-#include <sys/times.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "clock_t" >/dev/null 2>&1; then :
-  bash_cv_type_clock_t=yes
-else
-  bash_cv_type_clock_t=no
-fi
-rm -f conftest*
-
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_clock_t" >&5
-$as_echo "$bash_cv_type_clock_t" >&6; }
-
-if test $bash_cv_type_clock_t = no; then
-  cat >>confdefs.h <<_ACEOF
-#define clock_t long
-_ACEOF
-
-fi
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sigset_t" >&5
-$as_echo_n "checking for sigset_t... " >&6; }
-if ${bash_cv_type_sigset_t+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <sys/types.h>
-#if STDC_HEADERS
-#include <stdlib.h>
-#include <stddef.h>
-#endif
-#if HAVE_INTTYPES_H
-#include <inttypes.h>
-#endif
-#if HAVE_STDINT_H
-#include <stdint.h>
-#endif
-#include <signal.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "sigset_t" >/dev/null 2>&1; then :
-  bash_cv_type_sigset_t=yes
-else
-  bash_cv_type_sigset_t=no
-fi
-rm -f conftest*
-
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_sigset_t" >&5
-$as_echo "$bash_cv_type_sigset_t" >&6; }
-
-if test $bash_cv_type_sigset_t = no; then
-  cat >>confdefs.h <<_ACEOF
-#define sigset_t int
-_ACEOF
-
-fi
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sig_atomic_t" >&5
-$as_echo_n "checking for sig_atomic_t... " >&6; }
-if ${bash_cv_type_sig_atomic_t+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <sys/types.h>
-#if STDC_HEADERS
-#include <stdlib.h>
-#include <stddef.h>
-#endif
-#if HAVE_INTTYPES_H
-#include <inttypes.h>
-#endif
-#if HAVE_STDINT_H
-#include <stdint.h>
-#endif
-#include <signal.h>
-
+main (void)
+{
+ char *msg = _sys_siglist[2];
+  ;
+  return 0;
+}
 _ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "sig_atomic_t" >/dev/null 2>&1; then :
-  bash_cv_type_sig_atomic_t=yes
-else
-  bash_cv_type_sig_atomic_t=no
+if ac_fn_c_try_compile "$LINENO"
+then :
+  bash_cv_decl_under_sys_siglist=yes
+else $as_nop
+  bash_cv_decl_under_sys_siglist=no
 fi
-rm -f conftest*
-
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_sig_atomic_t" >&5
-$as_echo "$bash_cv_type_sig_atomic_t" >&6; }
-
-if test $bash_cv_type_sig_atomic_t = no; then
-  cat >>confdefs.h <<_ACEOF
-#define sig_atomic_t int
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_decl_under_sys_siglist" >&5
+printf "%s\n" "$bash_cv_decl_under_sys_siglist" >&6; }
+if test $bash_cv_decl_under_sys_siglist = yes; then
+printf "%s\n" "#define UNDER_SYS_SIGLIST_DECLARED 1" >>confdefs.h
 
 fi
 
 
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _sys_siglist in system C library" >&5
+printf %s "checking for _sys_siglist in system C library... " >&6; }
+if test ${bash_cv_under_sys_siglist+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if test "$cross_compiling" = yes
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check for _sys_siglist if cross compiling -- defaulting to no" >&5
+printf "%s\n" "$as_me: WARNING: cannot check for _sys_siglist if cross compiling -- defaulting to no" >&2;}
+        bash_cv_under_sys_siglist=no
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for quad_t" >&5
-$as_echo_n "checking for quad_t... " >&6; }
-if ${bash_cv_type_quad_t+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
+
 #include <sys/types.h>
-#if STDC_HEADERS
-#include <stdlib.h>
-#include <stddef.h>
-#endif
-#if HAVE_INTTYPES_H
-#include <inttypes.h>
+#include <signal.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
 #endif
-#if HAVE_STDINT_H
-#include <stdint.h>
+#include <stdlib.h>
+#ifndef UNDER_SYS_SIGLIST_DECLARED
+extern char *_sys_siglist[];
 #endif
-
+int
+main()
+{
+char *msg = (char *)_sys_siglist[2];
+exit(msg == 0);
+}
 
 _ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "quad_t" >/dev/null 2>&1; then :
-  bash_cv_type_quad_t=yes
-else
-  bash_cv_type_quad_t=no
+if ac_fn_c_try_run "$LINENO"
+then :
+  bash_cv_under_sys_siglist=yes
+else $as_nop
+  bash_cv_under_sys_siglist=no
 fi
-rm -f conftest*
-
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_quad_t" >&5
-$as_echo "$bash_cv_type_quad_t" >&6; }
-if test $bash_cv_type_quad_t = yes; then
-       $as_echo "#define HAVE_QUAD_T 1" >>confdefs.h
+fi
 
-       fi
-if test $bash_cv_type_quad_t = no; then
-  cat >>confdefs.h <<_ACEOF
-#define quad_t long
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_under_sys_siglist" >&5
+printf "%s\n" "$bash_cv_under_sys_siglist" >&6; }
+if test $bash_cv_under_sys_siglist = yes; then
+printf "%s\n" "#define HAVE_UNDER_SYS_SIGLIST 1" >>confdefs.h
 
 fi
 
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for intmax_t" >&5
-$as_echo_n "checking for intmax_t... " >&6; }
-if ${bash_cv_type_intmax_t+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for clock_t" >&5
+printf %s "checking for clock_t... " >&6; }
+if test ${bash_cv_type_clock_t+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <sys/types.h>
-#if STDC_HEADERS
+#if HAVE_STDLIB_H
 #include <stdlib.h>
+#endif
+#if HAVE_STDDEF_H
 #include <stddef.h>
 #endif
 #if HAVE_INTTYPES_H
@@ -17606,41 +18608,43 @@ else
 #if HAVE_STDINT_H
 #include <stdint.h>
 #endif
-
+#include <sys/times.h>
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "intmax_t" >/dev/null 2>&1; then :
-  bash_cv_type_intmax_t=yes
-else
-  bash_cv_type_intmax_t=no
+  $EGREP "clock_t" >/dev/null 2>&1
+then :
+  bash_cv_type_clock_t=yes
+else $as_nop
+  bash_cv_type_clock_t=no
 fi
-rm -f conftest*
+rm -rf conftest*
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_intmax_t" >&5
-$as_echo "$bash_cv_type_intmax_t" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_clock_t" >&5
+printf "%s\n" "$bash_cv_type_clock_t" >&6; }
 
-if test $bash_cv_type_intmax_t = no; then
-  cat >>confdefs.h <<_ACEOF
-#define intmax_t $bash_cv_type_long_long
-_ACEOF
+if test $bash_cv_type_clock_t = no; then
+  printf "%s\n" "#define clock_t long" >>confdefs.h
 
 fi
 
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for uintmax_t" >&5
-$as_echo_n "checking for uintmax_t... " >&6; }
-if ${bash_cv_type_uintmax_t+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sigset_t" >&5
+printf %s "checking for sigset_t... " >&6; }
+if test ${bash_cv_type_sigset_t+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <sys/types.h>
-#if STDC_HEADERS
+#if HAVE_STDLIB_H
 #include <stdlib.h>
+#endif
+#if HAVE_STDDEF_H
 #include <stddef.h>
 #endif
 #if HAVE_INTTYPES_H
@@ -17649,42 +18653,44 @@ else
 #if HAVE_STDINT_H
 #include <stdint.h>
 #endif
-
+#include <signal.h>
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "uintmax_t" >/dev/null 2>&1; then :
-  bash_cv_type_uintmax_t=yes
-else
-  bash_cv_type_uintmax_t=no
+  $EGREP "sigset_t" >/dev/null 2>&1
+then :
+  bash_cv_type_sigset_t=yes
+else $as_nop
+  bash_cv_type_sigset_t=no
 fi
-rm -f conftest*
+rm -rf conftest*
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_uintmax_t" >&5
-$as_echo "$bash_cv_type_uintmax_t" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_sigset_t" >&5
+printf "%s\n" "$bash_cv_type_sigset_t" >&6; }
 
-if test $bash_cv_type_uintmax_t = no; then
-  cat >>confdefs.h <<_ACEOF
-#define uintmax_t $bash_cv_type_unsigned_long_long
-_ACEOF
+if test $bash_cv_type_sigset_t = no; then
+  printf "%s\n" "#define sigset_t int" >>confdefs.h
 
 fi
 
 if test "$ac_cv_header_sys_socket_h" = "yes"; then
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for socklen_t" >&5
-$as_echo_n "checking for socklen_t... " >&6; }
-if ${bash_cv_type_socklen_t+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for socklen_t" >&5
+printf %s "checking for socklen_t... " >&6; }
+if test ${bash_cv_type_socklen_t+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <sys/types.h>
-#if STDC_HEADERS
+#if HAVE_STDLIB_H
 #include <stdlib.h>
+#endif
+#if HAVE_STDDEF_H
 #include <stddef.h>
 #endif
 #if HAVE_INTTYPES_H
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "socklen_t" >/dev/null 2>&1; then :
+  $EGREP "socklen_t" >/dev/null 2>&1
+then :
   bash_cv_type_socklen_t=yes
-else
+else $as_nop
   bash_cv_type_socklen_t=no
 fi
-rm -f conftest*
+rm -rf conftest*
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_socklen_t" >&5
-$as_echo "$bash_cv_type_socklen_t" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_socklen_t" >&5
+printf "%s\n" "$bash_cv_type_socklen_t" >&6; }
 if test $bash_cv_type_socklen_t = yes; then
-       $as_echo "#define HAVE_SOCKLEN_T 1" >>confdefs.h
+       printf "%s\n" "#define HAVE_SOCKLEN_T 1" >>confdefs.h
 
        fi
 if test $bash_cv_type_socklen_t = no; then
-  cat >>confdefs.h <<_ACEOF
-#define socklen_t unsigned int
-_ACEOF
+  printf "%s\n" "#define socklen_t unsigned int" >>confdefs.h
 
 fi
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for size and type of struct rlimit fields" >&5
-$as_echo_n "checking for size and type of struct rlimit fields... " >&6; }
-if ${bash_cv_type_rlimit+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+
+ac_fn_c_check_type "$LINENO" "quad_t" "ac_cv_type_quad_t" "$ac_includes_default"
+if test "x$ac_cv_type_quad_t" = xyes
+then :
+  printf "%s\n" "#define HAVE_QUAD_T 1" >>confdefs.h
+
+fi
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for type of struct rlimit fields" >&5
+printf %s "checking for type of struct rlimit fields... " >&6; }
+if test ${bash_cv_type_rlimit+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
+
 #include <sys/types.h>
 #include <sys/resource.h>
 int
-main ()
+main (void)
 {
 rlim_t xxx;
+
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   bash_cv_type_rlimit=rlim_t
-else
-
-if test "$cross_compiling" = yes; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check quad_t if cross compiling -- defaulting to long" >&5
-$as_echo "$as_me: WARNING: cannot check quad_t if cross compiling -- defaulting to long" >&2;}
-         bash_cv_type_rlimit=long
-else
+else $as_nop
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for size of struct rlimit fields" >&5
+printf %s "checking for size of struct rlimit fields... " >&6; }
+if test ${bash_cv_sizeof_rlim_cur+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if test "$cross_compiling" = yes
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check size of rlimit fields if cross compiling -- defaulting to long" >&5
+printf "%s\n" "$as_me: WARNING: cannot check size of rlimit fields if cross compiling -- defaulting to long" >&2;}
+        bash_cv_sizeof_rlim_cur=$ac_cv_sizeof_long
+
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
-#include <sys/types.h>
+#ifdef HAVE_SYS_TIME_H
 #include <sys/time.h>
+#endif
+#include <stdlib.h>
 #include <sys/resource.h>
+main()
+{
+struct rlimit r;
+exit(sizeof (r.rlim_cur));
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"
+then :
+  bash_cv_sizeof_rlim_cur=$?
+else $as_nop
+  bash_cv_sizeof_rlim_cur=$?
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_sizeof_rlim_cur" >&5
+printf "%s\n" "$bash_cv_sizeof_rlim_cur" >&6; }
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for size of quad_t" >&5
+printf %s "checking for size of quad_t... " >&6; }
+if test ${bash_cv_sizeof_quad_t+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if test "$cross_compiling" = yes
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check size of quad_t if cross compiling -- defaulting to 0" >&5
+printf "%s\n" "$as_me: WARNING: cannot check size of quad_t if cross compiling -- defaulting to 0" >&2;}
+        bash_cv_sizeof_quad_t=0
+
+else $as_nop
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <sys/types.h>
 #include <stdlib.h>
-int
+#if HAVE_INTTYPES_H
+#include <inttypes.h>
+#endif
+#if HAVE_STDINT_H
+#include <stdint.h>
+#endif
+
 main()
 {
-#ifdef HAVE_QUAD_T
-  struct rlimit rl;
-  if (sizeof(rl.rlim_cur) == sizeof(quad_t))
-    exit(0);
+#if HAVE_QUAD_T
+quad_t x;
+exit(sizeof (x));
+#else
+exit (0);
 #endif
-  exit(1);
 }
+
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  bash_cv_type_rlimit=quad_t
-else
-  bash_cv_type_rlimit=long
+if ac_fn_c_try_run "$LINENO"
+then :
+  bash_cv_sizeof_quad_t=$?
+else $as_nop
+  bash_cv_sizeof_quad_t=$?
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
   conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
 
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_sizeof_quad_t" >&5
+printf "%s\n" "$bash_cv_sizeof_quad_t" >&6; }
+
+if test $bash_cv_sizeof_rlim_cur = $ac_cv_sizeof_long; then
+  bash_cv_type_rlimit='unsigned long'
+elif test $bash_cv_sizeof_rlim_cur = $ac_cv_sizeof_long_long; then
+  bash_cv_type_rlimit='unsigned long long'
+elif test $bash_cv_sizeof_rlim_cur = $ac_cv_sizeof_int; then
+  bash_cv_type_rlimit='unsigned int'
+elif test $bash_cv_sizeof_rlim_cur = $bash_cv_sizeof_quad_t; then
+  bash_cv_type_rlimit='quad_t'
+else
+  bash_cv_type_rlimit='unsigned long'
+fi
+
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_rlimit" >&5
+printf "%s\n" "$bash_cv_type_rlimit" >&6; }
+printf "%s\n" "#define RLIMTYPE $bash_cv_type_rlimit" >>confdefs.h
+
+
+
+
+
+  ac_fn_c_check_type "$LINENO" "intmax_t" "ac_cv_type_intmax_t" "$ac_includes_default"
+if test "x$ac_cv_type_intmax_t" = xyes
+then :
+
+printf "%s\n" "#define HAVE_INTMAX_T 1" >>confdefs.h
+
+else $as_nop
+  test $ac_cv_type_long_long_int = yes \
+       && ac_type='long long int' \
+       || ac_type='long int'
+
+printf "%s\n" "#define intmax_t $ac_type" >>confdefs.h
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_rlimit" >&5
-$as_echo "$bash_cv_type_rlimit" >&6; }
-if test $bash_cv_type_rlimit = quad_t; then
-$as_echo "#define RLIMTYPE quad_t" >>confdefs.h
 
-elif test $bash_cv_type_rlimit = rlim_t; then
-$as_echo "#define RLIMTYPE rlim_t" >>confdefs.h
+
+
+  ac_fn_c_check_type "$LINENO" "uintmax_t" "ac_cv_type_uintmax_t" "$ac_includes_default"
+if test "x$ac_cv_type_uintmax_t" = xyes
+then :
+
+printf "%s\n" "#define HAVE_UINTMAX_T 1" >>confdefs.h
+
+else $as_nop
+  test $ac_cv_type_unsigned_long_long_int = yes \
+       && ac_type='unsigned long long int' \
+       || ac_type='unsigned long int'
+
+printf "%s\n" "#define uintmax_t $ac_type" >>confdefs.h
 
 fi
 
 
+
 # The cast to long int works around a bug in the HP C Compiler
 # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
 # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
 # This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of intmax_t" >&5
-$as_echo_n "checking size of intmax_t... " >&6; }
-if ${ac_cv_sizeof_intmax_t+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (intmax_t))" "ac_cv_sizeof_intmax_t"        "$ac_includes_default"; then :
-
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of intmax_t" >&5
+printf %s "checking size of intmax_t... " >&6; }
+if test ${ac_cv_sizeof_intmax_t+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (intmax_t))" "ac_cv_sizeof_intmax_t"        "$ac_includes_default"
+then :
+
+else $as_nop
   if test "$ac_cv_type_intmax_t" = yes; then
-     { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+     { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error 77 "cannot compute sizeof (intmax_t)
 See \`config.log' for more details" "$LINENO" 5; }
    else
@@ -17812,14 +18937,12 @@ See \`config.log' for more details" "$LINENO" 5; }
 fi
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_intmax_t" >&5
-$as_echo "$ac_cv_sizeof_intmax_t" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_intmax_t" >&5
+printf "%s\n" "$ac_cv_sizeof_intmax_t" >&6; }
 
 
 
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_INTMAX_T $ac_cv_sizeof_intmax_t
-_ACEOF
+printf "%s\n" "#define SIZEOF_INTMAX_T $ac_cv_sizeof_intmax_t" >>confdefs.h
 
 
 
@@ -17829,8 +18952,9 @@ ac_fn_c_check_member "$LINENO" "struct termios" "c_line" "ac_cv_member_struct_te
 #include <termios.h>
 
 "
-if test "x$ac_cv_member_struct_termios_c_line" = xyes; then :
-  $as_echo "#define TERMIOS_LDISC 1" >>confdefs.h
+if test "x$ac_cv_member_struct_termios_c_line" = xyes
+then :
+  printf "%s\n" "#define TERMIOS_LDISC 1" >>confdefs.h
 
 fi
 
@@ -17841,21 +18965,23 @@ ac_fn_c_check_member "$LINENO" "struct termio" "c_line" "ac_cv_member_struct_ter
 #include <termio.h>
 
 "
-if test "x$ac_cv_member_struct_termio_c_line" = xyes; then :
-  $as_echo "#define TERMIO_LDISC 1" >>confdefs.h
+if test "x$ac_cv_member_struct_termio_c_line" = xyes
+then :
+  printf "%s\n" "#define TERMIO_LDISC 1" >>confdefs.h
 
 fi
 
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct dirent.d_ino" >&5
-$as_echo_n "checking for struct dirent.d_ino... " >&6; }
-if ${bash_cv_dirent_has_dino+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for struct dirent.d_ino" >&5
+printf %s "checking for struct dirent.d_ino... " >&6; }
+if test ${bash_cv_dirent_has_d_ino+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+
 
+ac_fn_c_check_member "$LINENO" "struct dirent" "d_ino" "ac_cv_member_struct_dirent_d_ino" "
 #include <stdio.h>
 #include <sys/types.h>
 #ifdef HAVE_UNISTD_H
@@ -17876,40 +19002,37 @@ else
 # endif
 #endif /* HAVE_DIRENT_H */
 
-int
-main ()
-{
+"
+if test "x$ac_cv_member_struct_dirent_d_ino" = xyes
+then :
 
-struct dirent d; int z; z = d.d_ino;
+printf "%s\n" "#define HAVE_STRUCT_DIRENT_D_INO 1" >>confdefs.h
 
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  bash_cv_dirent_has_dino=yes
-else
-  bash_cv_dirent_has_dino=no
+bash_cv_dirent_has_d_ino=yes
+else $as_nop
+  bash_cv_dirent_has_d_ino=no
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_dirent_has_dino" >&5
-$as_echo "$bash_cv_dirent_has_dino" >&6; }
-if test $bash_cv_dirent_has_dino = yes; then
-$as_echo "#define HAVE_STRUCT_DIRENT_D_INO 1" >>confdefs.h
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_dirent_has_d_ino" >&5
+printf "%s\n" "$bash_cv_dirent_has_d_ino" >&6; }
+if test $bash_cv_dirent_has_d_ino = yes; then
+printf "%s\n" "#define HAVE_STRUCT_DIRENT_D_INO 1" >>confdefs.h
 
 fi
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct dirent.d_fileno" >&5
-$as_echo_n "checking for struct dirent.d_fileno... " >&6; }
-if ${bash_cv_dirent_has_d_fileno+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for struct dirent.d_fileno" >&5
+printf %s "checking for struct dirent.d_fileno... " >&6; }
+if test ${bash_cv_dirent_has_d_fileno+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
 
+
+ac_fn_c_check_member "$LINENO" "struct dirent" "d_fileno" "ac_cv_member_struct_dirent_d_fileno" "
 #include <stdio.h>
 #include <sys/types.h>
 #ifdef HAVE_UNISTD_H
@@ -17930,40 +19053,37 @@ else
 # endif
 #endif /* HAVE_DIRENT_H */
 
-int
-main ()
-{
+"
+if test "x$ac_cv_member_struct_dirent_d_fileno" = xyes
+then :
 
-struct dirent d; int z; z = d.d_fileno;
+printf "%s\n" "#define HAVE_STRUCT_DIRENT_D_FILENO 1" >>confdefs.h
 
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  bash_cv_dirent_has_d_fileno=yes
-else
+bash_cv_dirent_has_d_fileno=yes
+else $as_nop
   bash_cv_dirent_has_d_fileno=no
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_dirent_has_d_fileno" >&5
-$as_echo "$bash_cv_dirent_has_d_fileno" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_dirent_has_d_fileno" >&5
+printf "%s\n" "$bash_cv_dirent_has_d_fileno" >&6; }
 if test $bash_cv_dirent_has_d_fileno = yes; then
-$as_echo "#define HAVE_STRUCT_DIRENT_D_FILENO 1" >>confdefs.h
+printf "%s\n" "#define HAVE_STRUCT_DIRENT_D_FILENO 1" >>confdefs.h
 
 fi
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct dirent.d_namlen" >&5
-$as_echo_n "checking for struct dirent.d_namlen... " >&6; }
-if ${bash_cv_dirent_has_d_namlen+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for struct dirent.d_namlen" >&5
+printf %s "checking for struct dirent.d_namlen... " >&6; }
+if test ${bash_cv_dirent_has_d_namlen+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+
 
+ac_fn_c_check_member "$LINENO" "struct dirent" "d_namlen" "ac_cv_member_struct_dirent_d_namlen" "
 #include <stdio.h>
 #include <sys/types.h>
 #ifdef HAVE_UNISTD_H
@@ -17984,94 +19104,130 @@ else
 # endif
 #endif /* HAVE_DIRENT_H */
 
-int
-main ()
-{
+"
+if test "x$ac_cv_member_struct_dirent_d_namlen" = xyes
+then :
 
-struct dirent d; int z; z = d.d_namlen;
+printf "%s\n" "#define HAVE_STRUCT_DIRENT_D_NAMLEN 1" >>confdefs.h
 
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  bash_cv_dirent_has_d_namlen=yes
-else
+bash_cv_dirent_has_d_namlen=yes
+else $as_nop
   bash_cv_dirent_has_d_namlen=no
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_dirent_has_d_namlen" >&5
-$as_echo "$bash_cv_dirent_has_d_namlen" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_dirent_has_d_namlen" >&5
+printf "%s\n" "$bash_cv_dirent_has_d_namlen" >&6; }
 if test $bash_cv_dirent_has_d_namlen = yes; then
-$as_echo "#define HAVE_STRUCT_DIRENT_D_NAMLEN 1" >>confdefs.h
+printf "%s\n" "#define HAVE_STRUCT_DIRENT_D_NAMLEN 1" >>confdefs.h
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct winsize in sys/ioctl.h and termios.h" >&5
-$as_echo_n "checking for struct winsize in sys/ioctl.h and termios.h... " >&6; }
-if ${bash_cv_struct_winsize_header+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for struct winsize in sys/ioctl.h and termios.h" >&5
+printf %s "checking for struct winsize in sys/ioctl.h and termios.h... " >&6; }
+if test ${bash_cv_struct_winsize_header+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+
+if test ${bash_cv_struct_winsize_ioctl+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
+
 #include <sys/types.h>
 #include <sys/ioctl.h>
+
 int
-main ()
+main (void)
 {
+
 struct winsize x;
+if (sizeof (x) > 0) return (0);
+
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  bash_cv_struct_winsize_header=ioctl_h
-else
+if ac_fn_c_try_compile "$LINENO"
+then :
+  bash_cv_struct_winsize_ioctl=yes
+else $as_nop
+  bash_cv_struct_winsize_ioctl=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+fi
+
+
+if test ${bash_cv_struct_winsize_termios+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
+
 #include <sys/types.h>
-#include <termios.h>
+#include <sys/termios.h>
+
 int
-main ()
+main (void)
 {
+
 struct winsize x;
+if (sizeof (x) > 0) return (0);
+
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
+  bash_cv_struct_winsize_termios=yes
+else $as_nop
+  bash_cv_struct_winsize_termios=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+fi
+
+
+
+if test $bash_cv_struct_winsize_ioctl = yes; then
+  bash_cv_struct_winsize_header=ioctl_h
+elif test $bash_cv_struct_winsize_termios = yes; then
   bash_cv_struct_winsize_header=termios_h
 else
   bash_cv_struct_winsize_header=other
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
 
 if test $bash_cv_struct_winsize_header = ioctl_h; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: sys/ioctl.h" >&5
-$as_echo "sys/ioctl.h" >&6; }
-  $as_echo "#define STRUCT_WINSIZE_IN_SYS_IOCTL 1" >>confdefs.h
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: sys/ioctl.h" >&5
+printf "%s\n" "sys/ioctl.h" >&6; }
+  printf "%s\n" "#define STRUCT_WINSIZE_IN_SYS_IOCTL 1" >>confdefs.h
 
 elif test $bash_cv_struct_winsize_header = termios_h; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: termios.h" >&5
-$as_echo "termios.h" >&6; }
-  $as_echo "#define STRUCT_WINSIZE_IN_TERMIOS 1" >>confdefs.h
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: termios.h" >&5
+printf "%s\n" "termios.h" >&6; }
+  printf "%s\n" "#define STRUCT_WINSIZE_IN_TERMIOS 1" >>confdefs.h
 
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5
-$as_echo "not found" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found" >&5
+printf "%s\n" "not found" >&6; }
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct timeval in sys/time.h and time.h" >&5
-$as_echo_n "checking for struct timeval in sys/time.h and time.h... " >&6; }
-if ${bash_cv_struct_timeval+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for struct timeval in sys/time.h and time.h" >&5
+printf %s "checking for struct timeval in sys/time.h and time.h... " >&6; }
+if test ${bash_cv_struct_timeval+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #if HAVE_SYS_TIME_H
@@ -18080,7 +19236,7 @@ else
                  #include <time.h>
 
 int
-main ()
+main (void)
 {
 static struct timeval x; x.tv_sec = x.tv_usec;
 
@@ -18088,44 +19244,45 @@ static struct timeval x; x.tv_sec = x.tv_usec;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   bash_cv_struct_timeval=yes
-else
+else $as_nop
   bash_cv_struct_timeval=no
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_struct_timeval" >&5
-$as_echo "$bash_cv_struct_timeval" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_struct_timeval" >&5
+printf "%s\n" "$bash_cv_struct_timeval" >&6; }
 if test $bash_cv_struct_timeval = yes; then
-  $as_echo "#define HAVE_TIMEVAL 1" >>confdefs.h
+  printf "%s\n" "#define HAVE_TIMEVAL 1" >>confdefs.h
 
 fi
 
 ac_fn_c_check_member "$LINENO" "struct stat" "st_blocks" "ac_cv_member_struct_stat_st_blocks" "$ac_includes_default"
-if test "x$ac_cv_member_struct_stat_st_blocks" = xyes; then :
+if test "x$ac_cv_member_struct_stat_st_blocks" = xyes
+then :
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_STAT_ST_BLOCKS 1
-_ACEOF
+printf "%s\n" "#define HAVE_STRUCT_STAT_ST_BLOCKS 1" >>confdefs.h
 
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5
-$as_echo_n "checking whether struct tm is in sys/time.h or time.h... " >&6; }
-if ${ac_cv_struct_tm+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5
+printf %s "checking whether struct tm is in sys/time.h or time.h... " >&6; }
+if test ${ac_cv_struct_tm+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <sys/types.h>
 #include <time.h>
 
 int
-main ()
+main (void)
 {
 struct tm tm;
                                     int *p = &tm.tm_sec;
@@ -18134,18 +19291,19 @@ struct tm tm;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   ac_cv_struct_tm=time.h
-else
+else $as_nop
   ac_cv_struct_tm=sys/time.h
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm" >&5
-$as_echo "$ac_cv_struct_tm" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm" >&5
+printf "%s\n" "$ac_cv_struct_tm" >&6; }
 if test $ac_cv_struct_tm = sys/time.h; then
 
-$as_echo "#define TM_IN_SYS_TIME 1" >>confdefs.h
+printf "%s\n" "#define TM_IN_SYS_TIME 1" >>confdefs.h
 
 fi
 
@@ -18153,37 +19311,35 @@ ac_fn_c_check_member "$LINENO" "struct tm" "tm_zone" "ac_cv_member_struct_tm_tm_
 #include <$ac_cv_struct_tm>
 
 "
-if test "x$ac_cv_member_struct_tm_tm_zone" = xyes; then :
+if test "x$ac_cv_member_struct_tm_tm_zone" = xyes
+then :
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_TM_TM_ZONE 1
-_ACEOF
+printf "%s\n" "#define HAVE_STRUCT_TM_TM_ZONE 1" >>confdefs.h
 
 
 fi
 
 if test "$ac_cv_member_struct_tm_tm_zone" = yes; then
 
-$as_echo "#define HAVE_TM_ZONE 1" >>confdefs.h
+printf "%s\n" "#define HAVE_TM_ZONE 1" >>confdefs.h
 
 else
-  ac_fn_c_check_decl "$LINENO" "tzname" "ac_cv_have_decl_tzname" "#include <time.h>
-"
-if test "x$ac_cv_have_decl_tzname" = xyes; then :
+  ac_fn_check_decl "$LINENO" "tzname" "ac_cv_have_decl_tzname" "#include <time.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_tzname" = xyes
+then :
   ac_have_decl=1
-else
+else $as_nop
   ac_have_decl=0
 fi
+printf "%s\n" "#define HAVE_DECL_TZNAME $ac_have_decl" >>confdefs.h
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_TZNAME $ac_have_decl
-_ACEOF
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tzname" >&5
-$as_echo_n "checking for tzname... " >&6; }
-if ${ac_cv_var_tzname+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tzname" >&5
+printf %s "checking for tzname... " >&6; }
+if test ${ac_cv_var_tzname+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <time.h>
@@ -18192,35 +19348,37 @@ extern char *tzname[];
 #endif
 
 int
-main ()
+main (void)
 {
 return tzname[0][0];
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_var_tzname=yes
-else
+else $as_nop
   ac_cv_var_tzname=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_var_tzname" >&5
-$as_echo "$ac_cv_var_tzname" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_var_tzname" >&5
+printf "%s\n" "$ac_cv_var_tzname" >&6; }
   if test $ac_cv_var_tzname = yes; then
 
-$as_echo "#define HAVE_TZNAME 1" >>confdefs.h
+printf "%s\n" "#define HAVE_TZNAME 1" >>confdefs.h
 
   fi
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct timezone in sys/time.h and time.h" >&5
-$as_echo_n "checking for struct timezone in sys/time.h and time.h... " >&6; }
-if ${bash_cv_struct_timezone+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for struct timezone in sys/time.h and time.h" >&5
+printf %s "checking for struct timezone in sys/time.h and time.h... " >&6; }
+if test ${bash_cv_struct_timezone+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
 
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
@@ -18228,47 +19386,51 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "struct timezone" >/dev/null 2>&1; then :
+  $EGREP "struct timezone" >/dev/null 2>&1
+then :
   bash_cv_struct_timezone=yes
-else
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <time.h>
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "struct timezone" >/dev/null 2>&1; then :
+  $EGREP "struct timezone" >/dev/null 2>&1
+then :
   bash_cv_struct_timezone=yes
-else
+else $as_nop
   bash_cv_struct_timezone=no
 fi
-rm -f conftest*
+rm -rf conftest*
 
 fi
-rm -f conftest*
+rm -rf conftest*
 
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_struct_timezone" >&5
-$as_echo "$bash_cv_struct_timezone" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_struct_timezone" >&5
+printf "%s\n" "$bash_cv_struct_timezone" >&6; }
 if test $bash_cv_struct_timezone = yes; then
-  $as_echo "#define HAVE_STRUCT_TIMEZONE 1" >>confdefs.h
+  printf "%s\n" "#define HAVE_STRUCT_TIMEZONE 1" >>confdefs.h
 
 fi
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for offset of exit status in return status from wait" >&5
-$as_echo_n "checking for offset of exit status in return status from wait... " >&6; }
-if ${bash_cv_wexitstatus_offset+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check WEXITSTATUS offset if cross compiling -- defaulting to 0" >&5
-$as_echo "$as_me: WARNING: cannot check WEXITSTATUS offset if cross compiling -- defaulting to 0" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for offset of exit status in return status from wait" >&5
+printf %s "checking for offset of exit status in return status from wait... " >&6; }
+if test ${bash_cv_wexitstatus_offset+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if test "$cross_compiling" = yes
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check WEXITSTATUS offset if cross compiling -- defaulting to 0" >&5
+printf "%s\n" "$as_me: WARNING: cannot check WEXITSTATUS offset if cross compiling -- defaulting to 0" >&2;}
     bash_cv_wexitstatus_offset=0
 
-else
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -18307,9 +19469,10 @@ main(c, v)
 }
 
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
   bash_cv_wexitstatus_offset=0
-else
+else $as_nop
   bash_cv_wexitstatus_offset=$?
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
 fi
 
 if test "$bash_cv_wexitstatus_offset" -gt 32 ; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: bad exit status from test program -- defaulting to 0" >&5
-$as_echo "$as_me: WARNING: bad exit status from test program -- defaulting to 0" >&2;}
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: bad exit status from test program -- defaulting to 0" >&5
+printf "%s\n" "$as_me: WARNING: bad exit status from test program -- defaulting to 0" >&2;}
   bash_cv_wexitstatus_offset=0
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_wexitstatus_offset" >&5
-$as_echo "$bash_cv_wexitstatus_offset" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_wexitstatus_offset" >&5
+printf "%s\n" "$bash_cv_wexitstatus_offset" >&6; }
 
-cat >>confdefs.h <<_ACEOF
-#define WEXITSTATUS_OFFSET $bash_cv_wexitstatus_offset
-_ACEOF
+printf "%s\n" "#define WEXITSTATUS_OFFSET $bash_cv_wexitstatus_offset" >>confdefs.h
 
 
 
 
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct timespec in <time.h>" >&5
-$as_echo_n "checking for struct timespec in <time.h>... " >&6; }
-if ${bash_cv_sys_struct_timespec_in_time_h+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for struct timespec in <time.h>" >&5
+printf %s "checking for struct timespec in <time.h>... " >&6; }
+if test ${bash_cv_sys_struct_timespec_in_time_h+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <time.h>
 
 int
-main ()
+main (void)
 {
 static struct timespec x; x.tv_sec = x.tv_nsec;
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   bash_cv_sys_struct_timespec_in_time_h=yes
-else
+else $as_nop
   bash_cv_sys_struct_timespec_in_time_h=no
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_sys_struct_timespec_in_time_h" >&5
-$as_echo "$bash_cv_sys_struct_timespec_in_time_h" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_sys_struct_timespec_in_time_h" >&5
+printf "%s\n" "$bash_cv_sys_struct_timespec_in_time_h" >&6; }
 
   HAVE_STRUCT_TIMESPEC=0
   TIME_H_DEFINES_STRUCT_TIMESPEC=0
   SYS_TIME_H_DEFINES_STRUCT_TIMESPEC=0
   PTHREAD_H_DEFINES_STRUCT_TIMESPEC=0
   if test $bash_cv_sys_struct_timespec_in_time_h = yes; then
-    $as_echo "#define HAVE_STRUCT_TIMESPEC 1" >>confdefs.h
+    printf "%s\n" "#define HAVE_STRUCT_TIMESPEC 1" >>confdefs.h
 
-    $as_echo "#define TIME_H_DEFINES_STRUCT_TIMESPEC 1" >>confdefs.h
+    printf "%s\n" "#define TIME_H_DEFINES_STRUCT_TIMESPEC 1" >>confdefs.h
 
     TIME_H_DEFINES_STRUCT_TIMESPEC=1
   else
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct timespec in <sys/time.h>" >&5
-$as_echo_n "checking for struct timespec in <sys/time.h>... " >&6; }
-if ${bash_cv_sys_struct_timespec_in_sys_time_h+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for struct timespec in <sys/time.h>" >&5
+printf %s "checking for struct timespec in <sys/time.h>... " >&6; }
+if test ${bash_cv_sys_struct_timespec_in_sys_time_h+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <sys/time.h>
 
 int
-main ()
+main (void)
 {
 static struct timespec x; x.tv_sec = x.tv_nsec;
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   bash_cv_sys_struct_timespec_in_sys_time_h=yes
-else
+else $as_nop
   bash_cv_sys_struct_timespec_in_sys_time_h=no
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_sys_struct_timespec_in_sys_time_h" >&5
-$as_echo "$bash_cv_sys_struct_timespec_in_sys_time_h" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_sys_struct_timespec_in_sys_time_h" >&5
+printf "%s\n" "$bash_cv_sys_struct_timespec_in_sys_time_h" >&6; }
     if test $bash_cv_sys_struct_timespec_in_sys_time_h = yes; then
       SYS_TIME_H_DEFINES_STRUCT_TIMESPEC=1
-      $as_echo "#define HAVE_STRUCT_TIMESPEC 1" >>confdefs.h
+      printf "%s\n" "#define HAVE_STRUCT_TIMESPEC 1" >>confdefs.h
 
-      $as_echo "#define SYS_TIME_H_DEFINES_STRUCT_TIMESPEC 1" >>confdefs.h
+      printf "%s\n" "#define SYS_TIME_H_DEFINES_STRUCT_TIMESPEC 1" >>confdefs.h
 
     else
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct timespec in <pthread.h>" >&5
-$as_echo_n "checking for struct timespec in <pthread.h>... " >&6; }
-if ${bash_cv_sys_struct_timespec_in_pthread_h+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+      { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for struct timespec in <pthread.h>" >&5
+printf %s "checking for struct timespec in <pthread.h>... " >&6; }
+if test ${bash_cv_sys_struct_timespec_in_pthread_h+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <pthread.h>
 
 int
-main ()
+main (void)
 {
 static struct timespec x; x.tv_sec = x.tv_nsec;
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   bash_cv_sys_struct_timespec_in_pthread_h=yes
-else
+else $as_nop
   bash_cv_sys_struct_timespec_in_pthread_h=no
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_sys_struct_timespec_in_pthread_h" >&5
-$as_echo "$bash_cv_sys_struct_timespec_in_pthread_h" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_sys_struct_timespec_in_pthread_h" >&5
+printf "%s\n" "$bash_cv_sys_struct_timespec_in_pthread_h" >&6; }
       if test $bash_cv_sys_struct_timespec_in_pthread_h = yes; then
         PTHREAD_H_DEFINES_STRUCT_TIMESPEC=1
-       $as_echo "#define HAVE_STRUCT_TIMESPEC 1" >>confdefs.h
+       printf "%s\n" "#define HAVE_STRUCT_TIMESPEC 1" >>confdefs.h
 
-       $as_echo "#define PTHREAD_H_DEFINES_STRUCT_TIMESPEC 1" >>confdefs.h
+       printf "%s\n" "#define PTHREAD_H_DEFINES_STRUCT_TIMESPEC 1" >>confdefs.h
 
       fi
     fi
@@ -18452,17 +19619,17 @@ $as_echo "$bash_cv_sys_struct_timespec_in_pthread_h" >&6; }
   ac_fn_c_check_member "$LINENO" "struct stat" "st_atim.tv_nsec" "ac_cv_member_struct_stat_st_atim_tv_nsec" "#include <sys/types.h>
      #include <sys/stat.h>
 "
-if test "x$ac_cv_member_struct_stat_st_atim_tv_nsec" = xyes; then :
+if test "x$ac_cv_member_struct_stat_st_atim_tv_nsec" = xyes
+then :
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC 1
-_ACEOF
+printf "%s\n" "#define HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC 1" >>confdefs.h
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct stat.st_atim is of type struct timespec" >&5
-$as_echo_n "checking whether struct stat.st_atim is of type struct timespec... " >&6; }
-if ${ac_cv_typeof_struct_stat_st_atim_is_struct_timespec+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether struct stat.st_atim is of type struct timespec" >&5
+printf %s "checking whether struct stat.st_atim is of type struct timespec... " >&6; }
+if test ${ac_cv_typeof_struct_stat_st_atim_is_struct_timespec+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -18476,7 +19643,7 @@ else
             struct stat st;
 
 int
-main ()
+main (void)
 {
 
             st.st_atim = ts;
@@ -18485,51 +19652,49 @@ main ()
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   ac_cv_typeof_struct_stat_st_atim_is_struct_timespec=yes
-else
+else $as_nop
   ac_cv_typeof_struct_stat_st_atim_is_struct_timespec=no
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_typeof_struct_stat_st_atim_is_struct_timespec" >&5
-$as_echo "$ac_cv_typeof_struct_stat_st_atim_is_struct_timespec" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_typeof_struct_stat_st_atim_is_struct_timespec" >&5
+printf "%s\n" "$ac_cv_typeof_struct_stat_st_atim_is_struct_timespec" >&6; }
      if test $ac_cv_typeof_struct_stat_st_atim_is_struct_timespec = yes; then
 
-$as_echo "#define TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC 1" >>confdefs.h
+printf "%s\n" "#define TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC 1" >>confdefs.h
 
      fi
-else
+else $as_nop
   ac_fn_c_check_member "$LINENO" "struct stat" "st_atimespec.tv_nsec" "ac_cv_member_struct_stat_st_atimespec_tv_nsec" "#include <sys/types.h>
         #include <sys/stat.h>
 "
-if test "x$ac_cv_member_struct_stat_st_atimespec_tv_nsec" = xyes; then :
+if test "x$ac_cv_member_struct_stat_st_atimespec_tv_nsec" = xyes
+then :
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC 1
-_ACEOF
+printf "%s\n" "#define HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC 1" >>confdefs.h
 
 
-else
+else $as_nop
   ac_fn_c_check_member "$LINENO" "struct stat" "st_atimensec" "ac_cv_member_struct_stat_st_atimensec" "#include <sys/types.h>
            #include <sys/stat.h>
 "
-if test "x$ac_cv_member_struct_stat_st_atimensec" = xyes; then :
+if test "x$ac_cv_member_struct_stat_st_atimensec" = xyes
+then :
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_STAT_ST_ATIMENSEC 1
-_ACEOF
+printf "%s\n" "#define HAVE_STRUCT_STAT_ST_ATIMENSEC 1" >>confdefs.h
 
 
-else
+else $as_nop
   ac_fn_c_check_member "$LINENO" "struct stat" "st_atim.st__tim.tv_nsec" "ac_cv_member_struct_stat_st_atim_st__tim_tv_nsec" "#include <sys/types.h>
               #include <sys/stat.h>
 "
-if test "x$ac_cv_member_struct_stat_st_atim_st__tim_tv_nsec" = xyes; then :
+if test "x$ac_cv_member_struct_stat_st_atim_st__tim_tv_nsec" = xyes
+then :
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC 1
-_ACEOF
+printf "%s\n" "#define HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC 1" >>confdefs.h
 
 
 fi
 
 
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sbrk" >&5
-$as_echo_n "checking for sbrk... " >&6; }
-  if ${ac_cv_func_sbrk+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sbrk" >&5
+printf %s "checking for sbrk... " >&6; }
+  if test ${ac_cv_func_sbrk+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <unistd.h>
 int
-main ()
+main (void)
 {
  void *x = sbrk (4096);
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_func_sbrk=yes
-else
+else $as_nop
   ac_cv_func_sbrk=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 fi
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_sbrk" >&5
-$as_echo "$ac_cv_func_sbrk" >&6; }
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_sbrk" >&5
+printf "%s\n" "$ac_cv_func_sbrk" >&6; }
   if test X$ac_cv_func_sbrk = Xyes; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working sbrk" >&5
-$as_echo_n "checking for working sbrk... " >&6; }
-if ${bash_cv_func_sbrk+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check working sbrk if cross-compiling" >&5
-$as_echo "$as_me: WARNING: cannot check working sbrk if cross-compiling" >&2;}
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working sbrk" >&5
+printf %s "checking for working sbrk... " >&6; }
+if test ${bash_cv_func_sbrk+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if test "$cross_compiling" = yes
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check working sbrk if cross-compiling" >&5
+printf "%s\n" "$as_me: WARNING: cannot check working sbrk if cross-compiling" >&2;}
     bash_cv_func_sbrk=yes
 
-else
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -18598,74 +19767,79 @@ main(int c, char **v)
 }
 
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
   bash_cv_func_sbrk=yes
-else
-  bash_cv_func_snprintf=sbrk
+else $as_nop
+  bash_cv_func_sbrk=no
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
   conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_func_sbrk" >&5
-$as_echo "$bash_cv_func_sbrk" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_func_sbrk" >&5
+printf "%s\n" "$bash_cv_func_sbrk" >&6; }
     if test $bash_cv_func_sbrk = no; then
       ac_cv_func_sbrk=no
     fi
   fi
   if test $ac_cv_func_sbrk = yes; then
 
-$as_echo "#define HAVE_SBRK 1" >>confdefs.h
+printf "%s\n" "#define HAVE_SBRK 1" >>confdefs.h
 
   fi
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for the existence of strsignal" >&5
-$as_echo_n "checking for the existence of strsignal... " >&6; }
-if ${bash_cv_have_strsignal+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for the existence of strsignal" >&5
+printf %s "checking for the existence of strsignal... " >&6; }
+if test ${bash_cv_have_strsignal+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <sys/types.h>
 #include <signal.h>
 #include <string.h>
 int
-main ()
+main (void)
 {
 char *s = (char *)strsignal(2);
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   bash_cv_have_strsignal=yes
-else
+else $as_nop
   bash_cv_have_strsignal=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_have_strsignal" >&5
-$as_echo "$bash_cv_have_strsignal" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_have_strsignal" >&5
+printf "%s\n" "$bash_cv_have_strsignal" >&6; }
 if test $bash_cv_have_strsignal = yes; then
-$as_echo "#define HAVE_STRSIGNAL 1" >>confdefs.h
+printf "%s\n" "#define HAVE_STRSIGNAL 1" >>confdefs.h
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if opendir() opens non-directories" >&5
-$as_echo_n "checking if opendir() opens non-directories... " >&6; }
-if ${bash_cv_opendir_not_robust+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check opendir if cross compiling -- defaulting to no" >&5
-$as_echo "$as_me: WARNING: cannot check opendir if cross compiling -- defaulting to no" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if opendir() opens non-directories" >&5
+printf %s "checking if opendir() opens non-directories... " >&6; }
+if test ${bash_cv_opendir_not_robust+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if test "$cross_compiling" = yes
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check opendir if cross compiling -- defaulting to no" >&5
+printf "%s\n" "$as_me: WARNING: cannot check opendir if cross compiling -- defaulting to no" >&2;}
      bash_cv_opendir_not_robust=no
 
-else
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -18712,10 +19886,12 @@ unlink("bash-aclocal/not_a_directory");
 rmdir("bash-aclocal");
 exit (dir == 0);
 }
+
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
   bash_cv_opendir_not_robust=yes
-else
+else $as_nop
   bash_cv_opendir_not_robust=no
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_opendir_not_robust" >&5
-$as_echo "$bash_cv_opendir_not_robust" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_opendir_not_robust" >&5
+printf "%s\n" "$bash_cv_opendir_not_robust" >&6; }
 if test $bash_cv_opendir_not_robust = yes; then
-$as_echo "#define OPENDIR_NOT_ROBUST 1" >>confdefs.h
+printf "%s\n" "#define OPENDIR_NOT_ROBUST 1" >>confdefs.h
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ulimit can substitute for getdtablesize" >&5
-$as_echo_n "checking whether ulimit can substitute for getdtablesize... " >&6; }
-if ${bash_cv_ulimit_maxfds+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check ulimit if cross compiling -- defaulting to no" >&5
-$as_echo "$as_me: WARNING: cannot check ulimit if cross compiling -- defaulting to no" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ulimit can substitute for getdtablesize" >&5
+printf %s "checking whether ulimit can substitute for getdtablesize... " >&6; }
+if test ${bash_cv_ulimit_maxfds+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if test "$cross_compiling" = yes
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check ulimit if cross compiling -- defaulting to no" >&5
+printf "%s\n" "$as_me: WARNING: cannot check ulimit if cross compiling -- defaulting to no" >&2;}
     bash_cv_ulimit_maxfds=no
 
-else
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -18757,9 +19935,10 @@ exit (maxfds == -1L);
 }
 
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
   bash_cv_ulimit_maxfds=yes
-else
+else $as_nop
   bash_cv_ulimit_maxfds=no
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_ulimit_maxfds" >&5
-$as_echo "$bash_cv_ulimit_maxfds" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_ulimit_maxfds" >&5
+printf "%s\n" "$bash_cv_ulimit_maxfds" >&6; }
 if test $bash_cv_ulimit_maxfds = yes; then
-$as_echo "#define ULIMIT_MAXFDS 1" >>confdefs.h
+printf "%s\n" "#define ULIMIT_MAXFDS 1" >>confdefs.h
 
 fi
 
 
 
 
-
-
-  ac_fn_c_check_decl "$LINENO" "fpurge" "ac_cv_have_decl_fpurge" "#include <stdio.h>
-"
-if test "x$ac_cv_have_decl_fpurge" = xyes; then :
+  ac_fn_check_decl "$LINENO" "fpurge" "ac_cv_have_decl_fpurge" "#include <stdio.h>
+" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_fpurge" = xyes
+then :
   ac_have_decl=1
-else
+else $as_nop
   ac_have_decl=0
 fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_FPURGE $ac_have_decl
-_ACEOF
+printf "%s\n" "#define HAVE_DECL_FPURGE $ac_have_decl" >>confdefs.h
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking to see if getenv can be redefined" >&5
-$as_echo_n "checking to see if getenv can be redefined... " >&6; }
-if ${bash_cv_getenv_redef+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check getenv redefinition if cross compiling -- defaulting to yes" >&5
-$as_echo "$as_me: WARNING: cannot check getenv redefinition if cross compiling -- defaulting to yes" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking to see if getenv can be redefined" >&5
+printf %s "checking to see if getenv can be redefined... " >&6; }
+if test ${bash_cv_getenv_redef+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if test "$cross_compiling" = yes
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check getenv redefinition if cross compiling -- defaulting to yes" >&5
+printf "%s\n" "$as_me: WARNING: cannot check getenv redefinition if cross compiling -- defaulting to yes" >&2;}
     bash_cv_getenv_redef=yes
 
-else
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -18843,9 +20020,10 @@ exit(s == 0);  /* force optimizer to leave getenv in */
 }
 
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
   bash_cv_getenv_redef=yes
-else
+else $as_nop
   bash_cv_getenv_redef=no
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_getenv_redef" >&5
-$as_echo "$bash_cv_getenv_redef" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_getenv_redef" >&5
+printf "%s\n" "$bash_cv_getenv_redef" >&6; }
 if test $bash_cv_getenv_redef = yes; then
-$as_echo "#define CAN_REDEFINE_GETENV 1" >>confdefs.h
+printf "%s\n" "#define CAN_REDEFINE_GETENV 1" >>confdefs.h
 
 fi
 
 if test "$ac_cv_func_getcwd" = "yes"; then
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if getcwd() will dynamically allocate memory with 0 size" >&5
-$as_echo_n "checking if getcwd() will dynamically allocate memory with 0 size... " >&6; }
-if ${bash_cv_getcwd_malloc+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check whether getcwd allocates memory when cross-compiling -- defaulting to no" >&5
-$as_echo "$as_me: WARNING: cannot check whether getcwd allocates memory when cross-compiling -- defaulting to no" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if getcwd() will dynamically allocate memory with 0 size" >&5
+printf %s "checking if getcwd() will dynamically allocate memory with 0 size... " >&6; }
+if test ${bash_cv_getcwd_malloc+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if test "$cross_compiling" = yes
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check whether getcwd allocates memory when cross-compiling -- defaulting to no" >&5
+printf "%s\n" "$as_me: WARNING: cannot check whether getcwd allocates memory when cross-compiling -- defaulting to no" >&2;}
     bash_cv_getcwd_malloc=no
 
-else
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -18891,9 +20071,10 @@ main()
 }
 
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
   bash_cv_getcwd_malloc=yes
-else
+else $as_nop
   bash_cv_getcwd_malloc=no
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_getcwd_malloc" >&5
-$as_echo "$bash_cv_getcwd_malloc" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_getcwd_malloc" >&5
+printf "%s\n" "$bash_cv_getcwd_malloc" >&6; }
 if test $bash_cv_getcwd_malloc = no; then
-$as_echo "#define GETCWD_BROKEN 1" >>confdefs.h
+printf "%s\n" "#define GETCWD_BROKEN 1" >>confdefs.h
 
 case " $LIBOBJS " in
   *" getcwd.$ac_objext "* ) ;;
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for presence of POSIX-style sigsetjmp/siglongjmp" >&5
-$as_echo_n "checking for presence of POSIX-style sigsetjmp/siglongjmp... " >&6; }
-if ${bash_cv_func_sigsetjmp+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check for sigsetjmp/siglongjmp if cross-compiling -- defaulting to missing" >&5
-$as_echo "$as_me: WARNING: cannot check for sigsetjmp/siglongjmp if cross-compiling -- defaulting to missing" >&2;}
-     bash_cv_func_sigsetjmp=missing
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for presence of POSIX-style sigsetjmp/siglongjmp" >&5
+printf %s "checking for presence of POSIX-style sigsetjmp/siglongjmp... " >&6; }
+if test ${bash_cv_func_sigsetjmp+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if test "$cross_compiling" = yes
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check for sigsetjmp/siglongjmp if cross-compiling -- defaulting to $bash_cv_posix_signals" >&5
+printf "%s\n" "$as_me: WARNING: cannot check for sigsetjmp/siglongjmp if cross-compiling -- defaulting to $bash_cv_posix_signals" >&2;}
+     if test "$bash_cv_posix_signals" = "yes" ; then
+       bash_cv_func_sigsetjmp=present
+     else
+       bash_cv_func_sigsetjmp=missing
+     fi
 
-else
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -18947,21 +20134,30 @@ exit (1);
 #else
 
 int code;
-sigset_t set, oset;
+sigset_t set, oset, nset;
 sigjmp_buf xx;
 
 /* get the mask */
 sigemptyset(&set);
 sigemptyset(&oset);
-sigprocmask(SIG_BLOCK, (sigset_t *)NULL, &set);
+
 sigprocmask(SIG_BLOCK, (sigset_t *)NULL, &oset);
+/* paranoia -- make sure SIGINT is not blocked */
+sigdelset (&oset, SIGINT);
+sigprocmask (SIG_SETMASK, &oset, (sigset_t *)NULL);
 
 /* save it */
 code = sigsetjmp(xx, 1);
 if (code)
-  exit(0);     /* could get sigmask and compare to oset here. */
+{
+  sigprocmask(SIG_BLOCK, (sigset_t *)NULL, &nset);
+  /* could compare nset to oset here, but we just look for SIGINT */
+  if (sigismember (&nset, SIGINT))
+    exit(1);
+  exit(0);
+}
 
-/* change it */
+/* change it so that SIGINT is blocked */
 sigaddset(&set, SIGINT);
 sigprocmask(SIG_BLOCK, &set, (sigset_t *)NULL);
 
@@ -18970,10 +20166,12 @@ siglongjmp(xx, 10);
 exit(1);
 #endif
 }
+
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
   bash_cv_func_sigsetjmp=present
-else
+else $as_nop
   bash_cv_func_sigsetjmp=missing
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_func_sigsetjmp" >&5
-$as_echo "$bash_cv_func_sigsetjmp" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_func_sigsetjmp" >&5
+printf "%s\n" "$bash_cv_func_sigsetjmp" >&6; }
 if test $bash_cv_func_sigsetjmp = present; then
-$as_echo "#define HAVE_POSIX_SIGSETJMP 1" >>confdefs.h
+printf "%s\n" "#define HAVE_POSIX_SIGSETJMP 1" >>confdefs.h
 
 fi
 
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether or not strcoll and strcmp differ" >&5
-$as_echo_n "checking whether or not strcoll and strcmp differ... " >&6; }
-if ${bash_cv_func_strcoll_broken+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check strcoll if cross compiling -- defaulting to no" >&5
-$as_echo "$as_me: WARNING: cannot check strcoll if cross compiling -- defaulting to no" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether or not strcoll and strcmp differ" >&5
+printf %s "checking whether or not strcoll and strcmp differ... " >&6; }
+if test ${bash_cv_func_strcoll_broken+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if test "$cross_compiling" = yes
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check strcoll if cross compiling -- defaulting to no" >&5
+printf "%s\n" "$as_me: WARNING: cannot check strcoll if cross compiling -- defaulting to no" >&2;}
     bash_cv_func_strcoll_broken=no
 
-else
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -19043,9 +20242,10 @@ char    *v[];
 }
 
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
   bash_cv_func_strcoll_broken=yes
-else
+else $as_nop
   bash_cv_func_strcoll_broken=no
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_func_strcoll_broken" >&5
-$as_echo "$bash_cv_func_strcoll_broken" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_func_strcoll_broken" >&5
+printf "%s\n" "$bash_cv_func_strcoll_broken" >&6; }
 if test $bash_cv_func_strcoll_broken = yes; then
-$as_echo "#define STRCOLL_BROKEN 1" >>confdefs.h
+printf "%s\n" "#define STRCOLL_BROKEN 1" >>confdefs.h
 
 fi
 
 
 
 
-
   if test X$ac_cv_func_snprintf = Xyes; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for standard-conformant snprintf" >&5
-$as_echo_n "checking for standard-conformant snprintf... " >&6; }
-if ${bash_cv_func_snprintf+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check standard snprintf if cross-compiling" >&5
-$as_echo "$as_me: WARNING: cannot check standard snprintf if cross-compiling" >&2;}
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for standard-conformant snprintf" >&5
+printf %s "checking for standard-conformant snprintf... " >&6; }
+if test ${bash_cv_func_snprintf+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if test "$cross_compiling" = yes
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check standard snprintf if cross-compiling" >&5
+printf "%s\n" "$as_me: WARNING: cannot check standard snprintf if cross-compiling" >&2;}
     bash_cv_func_snprintf=yes
 
-else
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -19092,9 +20293,10 @@ main()
 }
 
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
   bash_cv_func_snprintf=yes
-else
+else $as_nop
   bash_cv_func_snprintf=no
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
@@ -19102,34 +20304,35 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
 fi
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_func_snprintf" >&5
-$as_echo "$bash_cv_func_snprintf" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_func_snprintf" >&5
+printf "%s\n" "$bash_cv_func_snprintf" >&6; }
     if test $bash_cv_func_snprintf = no; then
       ac_cv_func_snprintf=no
     fi
   fi
   if test $ac_cv_func_snprintf = no; then
 
-$as_echo "#define HAVE_SNPRINTF 0" >>confdefs.h
+printf "%s\n" "#define HAVE_SNPRINTF 0" >>confdefs.h
 
   fi
 
 
 
 
-
   if test X$ac_cv_func_vsnprintf = Xyes; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for standard-conformant vsnprintf" >&5
-$as_echo_n "checking for standard-conformant vsnprintf... " >&6; }
-if ${bash_cv_func_vsnprintf+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check standard vsnprintf if cross-compiling" >&5
-$as_echo "$as_me: WARNING: cannot check standard vsnprintf if cross-compiling" >&2;}
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for standard-conformant vsnprintf" >&5
+printf %s "checking for standard-conformant vsnprintf... " >&6; }
+if test ${bash_cv_func_vsnprintf+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if test "$cross_compiling" = yes
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check standard vsnprintf if cross-compiling" >&5
+printf "%s\n" "$as_me: WARNING: cannot check standard vsnprintf if cross-compiling" >&2;}
     bash_cv_func_vsnprintf=yes
 
-else
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -19172,9 +20375,10 @@ main()
 }
 
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
   bash_cv_func_vsnprintf=yes
-else
+else $as_nop
   bash_cv_func_vsnprintf=no
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
@@ -19182,34 +20386,90 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
 fi
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_func_vsnprintf" >&5
-$as_echo "$bash_cv_func_vsnprintf" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_func_vsnprintf" >&5
+printf "%s\n" "$bash_cv_func_vsnprintf" >&6; }
     if test $bash_cv_func_vsnprintf = no; then
       ac_cv_func_vsnprintf=no
     fi
   fi
   if test $ac_cv_func_vsnprintf = no; then
 
-$as_echo "#define HAVE_VSNPRINTF 0" >>confdefs.h
+printf "%s\n" "#define HAVE_VSNPRINTF 0" >>confdefs.h
 
   fi
 
 
 
-if test "$ac_cv_func_putenv" = "yes"; then
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for usable strtoimax" >&5
+printf %s "checking for usable strtoimax... " >&6; }
+if test ${bash_cv_func_strtoimax+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
 
+  HAVE_STRTOIMAX=0 HAVE_DECL_STRTOIMAX=0
 
+  ac_fn_c_check_func "$LINENO" "strtoimax" "ac_cv_func_strtoimax"
+if test "x$ac_cv_func_strtoimax" = xyes
+then :
+  printf "%s\n" "#define HAVE_STRTOIMAX 1" >>confdefs.h
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for standard-conformant putenv declaration" >&5
-$as_echo_n "checking for standard-conformant putenv declaration... " >&6; }
-if ${bash_cv_std_putenv+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+fi
+
+  ac_fn_check_decl "$LINENO" "strtoimax" "ac_cv_have_decl_strtoimax" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_strtoimax" = xyes
+then :
+  ac_have_decl=1
+else $as_nop
+  ac_have_decl=0
+fi
+printf "%s\n" "#define HAVE_DECL_STRTOIMAX $ac_have_decl" >>confdefs.h
+
+
+  if test "$ac_cv_func_strtoimax" = "yes" ; then
+    HAVE_STRTOIMAX=1
+  fi
+  if test "$ac_cv_have_decl_strtoimax" = "yes" ; then
+    HAVE_DECL_STRTOIMAX=1
+  fi
+
+  if test "$HAVE_STRTOIMAX" = 0 || test "$HAVE_DECL_STRTOIMAX" = 0 ; then
+    bash_cv_func_strtoimax=no REPLACE_STRTOIMAX=1
+  else
+    bash_cv_func_strtoimax=yes
+  fi
+
+fi
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_func_strtoimax" >&5
+printf "%s\n" "$bash_cv_func_strtoimax" >&6; }
+if test $bash_cv_func_strtoimax = yes; then
+case " $LIBOBJS " in
+  *" strtoimax.$ac_objext "* ) ;;
+  *) LIBOBJS="$LIBOBJS strtoimax.$ac_objext"
+ ;;
+esac
+
+fi
+
+
+
+if test "$ac_cv_func_putenv" = "yes"; then
+
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for standard-conformant putenv declaration" >&5
+printf %s "checking for standard-conformant putenv declaration... " >&6; }
+if test ${bash_cv_std_putenv+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
-#if STDC_HEADERS
+#if HAVE_STDLIB_H
 #include <stdlib.h>
+#endif
+#if HAVE_STDDEF_H
 #include <stddef.h>
 #endif
 #ifndef __STDC__
@@ -19224,47 +20484,50 @@ extern int putenv ();
 #endif
 
 int
-main ()
+main (void)
 {
 return (putenv == 0);
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   bash_cv_std_putenv=yes
-else
+else $as_nop
   bash_cv_std_putenv=no
 
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_std_putenv" >&5
-$as_echo "$bash_cv_std_putenv" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_std_putenv" >&5
+printf "%s\n" "$bash_cv_std_putenv" >&6; }
 if test $bash_cv_std_putenv = yes; then
-$as_echo "#define HAVE_STD_PUTENV 1" >>confdefs.h
+printf "%s\n" "#define HAVE_STD_PUTENV 1" >>confdefs.h
 
 fi
 
 else
-$as_echo "#define HAVE_STD_PUTENV 1" >>confdefs.h
+printf "%s\n" "#define HAVE_STD_PUTENV 1" >>confdefs.h
 
 fi
 if test "$ac_cv_func_unsetenv" = "yes"; then
 
 
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for standard-conformant unsetenv declaration" >&5
-$as_echo_n "checking for standard-conformant unsetenv declaration... " >&6; }
-if ${bash_cv_std_unsetenv+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for standard-conformant unsetenv declaration" >&5
+printf %s "checking for standard-conformant unsetenv declaration... " >&6; }
+if test ${bash_cv_std_unsetenv+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
-#if STDC_HEADERS
+#if HAVE_STDLIB_H
 #include <stdlib.h>
+#endif
+#if HAVE_STDDEF_H
 #include <stddef.h>
 #endif
 #ifndef __STDC__
@@ -19279,45 +20542,48 @@ extern int unsetenv ();
 #endif
 
 int
-main ()
+main (void)
 {
 return (unsetenv == 0);
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   bash_cv_std_unsetenv=yes
-else
+else $as_nop
   bash_cv_std_unsetenv=no
 
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_std_unsetenv" >&5
-$as_echo "$bash_cv_std_unsetenv" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_std_unsetenv" >&5
+printf "%s\n" "$bash_cv_std_unsetenv" >&6; }
 if test $bash_cv_std_unsetenv = yes; then
-$as_echo "#define HAVE_STD_UNSETENV 1" >>confdefs.h
+printf "%s\n" "#define HAVE_STD_UNSETENV 1" >>confdefs.h
 
 fi
 
 else
-$as_echo "#define HAVE_STD_UNSETENV 1" >>confdefs.h
+printf "%s\n" "#define HAVE_STD_UNSETENV 1" >>confdefs.h
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for printf floating point output in hex notation" >&5
-$as_echo_n "checking for printf floating point output in hex notation... " >&6; }
-if ${bash_cv_printf_a_format+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check printf if cross compiling -- defaulting to no" >&5
-$as_echo "$as_me: WARNING: cannot check printf if cross compiling -- defaulting to no" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for printf floating point output in hex notation" >&5
+printf %s "checking for printf floating point output in hex notation... " >&6; }
+if test ${bash_cv_printf_a_format+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if test "$cross_compiling" = yes
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check printf if cross compiling -- defaulting to no" >&5
+printf "%s\n" "$as_me: WARNING: cannot check printf if cross compiling -- defaulting to no" >&2;}
     bash_cv_printf_a_format=no
 
-else
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -19336,9 +20602,10 @@ main()
 }
 
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
   bash_cv_printf_a_format=yes
-else
+else $as_nop
   bash_cv_printf_a_format=no
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_printf_a_format" >&5
-$as_echo "$bash_cv_printf_a_format" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_printf_a_format" >&5
+printf "%s\n" "$bash_cv_printf_a_format" >&6; }
 if test $bash_cv_printf_a_format = yes; then
-$as_echo "#define HAVE_PRINTF_A_FORMAT 1" >>confdefs.h
+printf "%s\n" "#define HAVE_PRINTF_A_FORMAT 1" >>confdefs.h
 
 fi
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether fnmatch can be used to check bracket equivalence classes" >&5
-$as_echo_n "checking whether fnmatch can be used to check bracket equivalence classes... " >&6; }
-if ${bash_cv_fnmatch_equiv_fallback+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check fnmatch if cross compiling -- defaulting to no" >&5
-$as_echo "$as_me: WARNING: cannot check fnmatch if cross compiling -- defaulting to no" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether fnmatch can be used to check bracket equivalence classes" >&5
+printf %s "checking whether fnmatch can be used to check bracket equivalence classes... " >&6; }
+if test ${bash_cv_fnmatch_equiv_fallback+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if test "$cross_compiling" = yes
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check fnmatch if cross compiling -- defaulting to no" >&5
+printf "%s\n" "$as_me: WARNING: cannot check fnmatch if cross compiling -- defaulting to no" >&2;}
     bash_cv_fnmatch_equiv_fallback=no
 
-else
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -19389,11 +20658,11 @@ main (int c, char **v)
   exit (1);
 }
 
-
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
   bash_cv_fnmatch_equiv_fallback=yes
-else
+else $as_nop
   bash_cv_fnmatch_equiv_fallback=no
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_fnmatch_equiv_fallback" >&5
-$as_echo "$bash_cv_fnmatch_equiv_fallback" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_fnmatch_equiv_fallback" >&5
+printf "%s\n" "$bash_cv_fnmatch_equiv_fallback" >&6; }
 if test "$bash_cv_fnmatch_equiv_fallback" = "yes" ; then
     bash_cv_fnmatch_equiv_value=1
 else
     bash_cv_fnmatch_equiv_value=0
 fi
 
-cat >>confdefs.h <<_ACEOF
-#define FNMATCH_EQUIV_FALLBACK $bash_cv_fnmatch_equiv_value
-_ACEOF
-
+printf "%s\n" "#define FNMATCH_EQUIV_FALLBACK $bash_cv_fnmatch_equiv_value" >>confdefs.h
 
 
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if signal handlers must be reinstalled when invoked" >&5
-$as_echo_n "checking if signal handlers must be reinstalled when invoked... " >&6; }
-if ${bash_cv_must_reinstall_sighandlers+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check signal handling if cross compiling -- defaulting to no" >&5
-$as_echo "$as_me: WARNING: cannot check signal handling if cross compiling -- defaulting to no" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if signal handlers must be reinstalled when invoked" >&5
+printf %s "checking if signal handlers must be reinstalled when invoked... " >&6; }
+if test ${bash_cv_must_reinstall_sighandlers+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if test "$cross_compiling" = yes
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check signal handling if cross compiling -- defaulting to no" >&5
+printf "%s\n" "$as_me: WARNING: cannot check signal handling if cross compiling -- defaulting to no" >&2;}
     bash_cv_must_reinstall_sighandlers=no
 
-else
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -19438,7 +20706,7 @@ else
 #endif
 #include <stdlib.h>
 
-typedef RETSIGTYPE sigfunc();
+typedef void sigfunc();
 
 volatile int nsigint;
 
@@ -19460,7 +20728,7 @@ set_signal_handler(sig, handler)
 #define set_signal_handler(s, h) signal(s, h)
 #endif
 
-RETSIGTYPE
+void
 sigint(s)
 int s;
 {
@@ -19478,9 +20746,10 @@ main()
 }
 
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
   bash_cv_must_reinstall_sighandlers=no
-else
+else $as_nop
   bash_cv_must_reinstall_sighandlers=yes
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_must_reinstall_sighandlers" >&5
-$as_echo "$bash_cv_must_reinstall_sighandlers" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_must_reinstall_sighandlers" >&5
+printf "%s\n" "$bash_cv_must_reinstall_sighandlers" >&6; }
 if test $bash_cv_must_reinstall_sighandlers = yes; then
-$as_echo "#define MUST_REINSTALL_SIGHANDLERS 1" >>confdefs.h
+printf "%s\n" "#define MUST_REINSTALL_SIGHANDLERS 1" >>confdefs.h
 
 fi
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for presence of necessary job control definitions" >&5
-$as_echo_n "checking for presence of necessary job control definitions... " >&6; }
-if ${bash_cv_job_control_missing+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for presence of necessary job control definitions" >&5
+printf %s "checking for presence of necessary job control definitions... " >&6; }
+if test ${bash_cv_job_control_missing+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -19547,40 +20817,43 @@ else
 
 
 int
-main ()
+main (void)
 {
-
+ int x;
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   bash_cv_job_control_missing=present
-else
+else $as_nop
   bash_cv_job_control_missing=missing
 
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_job_control_missing" >&5
-$as_echo "$bash_cv_job_control_missing" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_job_control_missing" >&5
+printf "%s\n" "$bash_cv_job_control_missing" >&6; }
 if test $bash_cv_job_control_missing = missing; then
-$as_echo "#define JOB_CONTROL_MISSING 1" >>confdefs.h
+printf "%s\n" "#define JOB_CONTROL_MISSING 1" >>confdefs.h
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for presence of named pipes" >&5
-$as_echo_n "checking for presence of named pipes... " >&6; }
-if ${bash_cv_sys_named_pipes+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check for named pipes if cross-compiling -- defaulting to missing" >&5
-$as_echo "$as_me: WARNING: cannot check for named pipes if cross-compiling -- defaulting to missing" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for presence of named pipes" >&5
+printf %s "checking for presence of named pipes... " >&6; }
+if test ${bash_cv_sys_named_pipes+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if test "$cross_compiling" = yes
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check for named pipes if cross-compiling -- defaulting to missing" >&5
+printf "%s\n" "$as_me: WARNING: cannot check for named pipes if cross-compiling -- defaulting to missing" >&2;}
      bash_cv_sys_named_pipes=missing
 
-else
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -19624,10 +20897,12 @@ unlink ("bash-aclocal/sh-np-autoconf");
 rmdir ("bash-aclocal");
 exit(0);
 }
+
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
   bash_cv_sys_named_pipes=present
-else
+else $as_nop
   bash_cv_sys_named_pipes=missing
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_sys_named_pipes" >&5
-$as_echo "$bash_cv_sys_named_pipes" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_sys_named_pipes" >&5
+printf "%s\n" "$bash_cv_sys_named_pipes" >&6; }
 if test $bash_cv_sys_named_pipes = missing; then
-$as_echo "#define NAMED_PIPES_MISSING 1" >>confdefs.h
+printf "%s\n" "#define NAMED_PIPES_MISSING 1" >>confdefs.h
 
 fi
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether termios.h defines TIOCGWINSZ" >&5
-$as_echo_n "checking whether termios.h defines TIOCGWINSZ... " >&6; }
-if ${ac_cv_sys_tiocgwinsz_in_termios_h+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether termios.h defines TIOCGWINSZ" >&5
+printf %s "checking whether termios.h defines TIOCGWINSZ... " >&6; }
+if test ${ac_cv_sys_tiocgwinsz_in_termios_h+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <sys/types.h>
@@ -19659,23 +20935,25 @@ else
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "yes" >/dev/null 2>&1; then :
+  $EGREP "yes" >/dev/null 2>&1
+then :
   ac_cv_sys_tiocgwinsz_in_termios_h=yes
-else
+else $as_nop
   ac_cv_sys_tiocgwinsz_in_termios_h=no
 fi
-rm -f conftest*
+rm -rf conftest*
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_tiocgwinsz_in_termios_h" >&5
-$as_echo "$ac_cv_sys_tiocgwinsz_in_termios_h" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_tiocgwinsz_in_termios_h" >&5
+printf "%s\n" "$ac_cv_sys_tiocgwinsz_in_termios_h" >&6; }
 
 if test $ac_cv_sys_tiocgwinsz_in_termios_h != yes; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether sys/ioctl.h defines TIOCGWINSZ" >&5
-$as_echo_n "checking whether sys/ioctl.h defines TIOCGWINSZ... " >&6; }
-if ${ac_cv_sys_tiocgwinsz_in_sys_ioctl_h+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether sys/ioctl.h defines TIOCGWINSZ" >&5
+printf %s "checking whether sys/ioctl.h defines TIOCGWINSZ... " >&6; }
+if test ${ac_cv_sys_tiocgwinsz_in_sys_ioctl_h+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <sys/types.h>
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "yes" >/dev/null 2>&1; then :
+  $EGREP "yes" >/dev/null 2>&1
+then :
   ac_cv_sys_tiocgwinsz_in_sys_ioctl_h=yes
-else
+else $as_nop
   ac_cv_sys_tiocgwinsz_in_sys_ioctl_h=no
 fi
-rm -f conftest*
+rm -rf conftest*
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_tiocgwinsz_in_sys_ioctl_h" >&5
-$as_echo "$ac_cv_sys_tiocgwinsz_in_sys_ioctl_h" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_tiocgwinsz_in_sys_ioctl_h" >&5
+printf "%s\n" "$ac_cv_sys_tiocgwinsz_in_sys_ioctl_h" >&6; }
 
   if test $ac_cv_sys_tiocgwinsz_in_sys_ioctl_h = yes; then
 
-$as_echo "#define GWINSZ_IN_SYS_IOCTL 1" >>confdefs.h
+printf "%s\n" "#define GWINSZ_IN_SYS_IOCTL 1" >>confdefs.h
 
   fi
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for TIOCSTAT in sys/ioctl.h" >&5
-$as_echo_n "checking for TIOCSTAT in sys/ioctl.h... " >&6; }
-if ${bash_cv_tiocstat_in_ioctl+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for TIOCSTAT in sys/ioctl.h" >&5
+printf %s "checking for TIOCSTAT in sys/ioctl.h... " >&6; }
+if test ${bash_cv_tiocstat_in_ioctl+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
+
 #include <sys/types.h>
 #include <sys/ioctl.h>
 int
-main ()
+main (void)
 {
 int x = TIOCSTAT;
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   bash_cv_tiocstat_in_ioctl=yes
-else
+else $as_nop
   bash_cv_tiocstat_in_ioctl=no
+
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_tiocstat_in_ioctl" >&5
-$as_echo "$bash_cv_tiocstat_in_ioctl" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_tiocstat_in_ioctl" >&5
+printf "%s\n" "$bash_cv_tiocstat_in_ioctl" >&6; }
 if test $bash_cv_tiocstat_in_ioctl = yes; then
-$as_echo "#define TIOCSTAT_IN_SYS_IOCTL 1" >>confdefs.h
+printf "%s\n" "#define TIOCSTAT_IN_SYS_IOCTL 1" >>confdefs.h
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for FIONREAD in sys/ioctl.h" >&5
-$as_echo_n "checking for FIONREAD in sys/ioctl.h... " >&6; }
-if ${bash_cv_fionread_in_ioctl+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for FIONREAD in sys/ioctl.h" >&5
+printf %s "checking for FIONREAD in sys/ioctl.h... " >&6; }
+if test ${bash_cv_fionread_in_ioctl+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
+
 #include <sys/types.h>
 #include <sys/ioctl.h>
 int
-main ()
+main (void)
 {
 int x = FIONREAD;
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   bash_cv_fionread_in_ioctl=yes
-else
+else $as_nop
   bash_cv_fionread_in_ioctl=no
+
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_fionread_in_ioctl" >&5
-$as_echo "$bash_cv_fionread_in_ioctl" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_fionread_in_ioctl" >&5
+printf "%s\n" "$bash_cv_fionread_in_ioctl" >&6; }
 if test $bash_cv_fionread_in_ioctl = yes; then
-$as_echo "#define FIONREAD_IN_SYS_IOCTL 1" >>confdefs.h
+printf "%s\n" "#define FIONREAD_IN_SYS_IOCTL 1" >>confdefs.h
 
 fi
 
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether WCONTINUED flag to waitpid is unavailable or available but broken" >&5
-$as_echo_n "checking whether WCONTINUED flag to waitpid is unavailable or available but broken... " >&6; }
-if ${bash_cv_wcontinued_broken+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check WCONTINUED if cross compiling -- defaulting to no" >&5
-$as_echo "$as_me: WARNING: cannot check WCONTINUED if cross compiling -- defaulting to no" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether WCONTINUED flag to waitpid is unavailable or available but broken" >&5
+printf %s "checking whether WCONTINUED flag to waitpid is unavailable or available but broken... " >&6; }
+if test ${bash_cv_wcontinued_broken+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if test "$cross_compiling" = yes
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check WCONTINUED if cross compiling -- defaulting to no" >&5
+printf "%s\n" "$as_me: WARNING: cannot check WCONTINUED if cross compiling -- defaulting to no" >&2;}
     bash_cv_wcontinued_broken=no
 
-else
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -19806,9 +21095,10 @@ main()
 }
 
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
   bash_cv_wcontinued_broken=no
-else
+else $as_nop
   bash_cv_wcontinued_broken=yes
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_wcontinued_broken" >&5
-$as_echo "$bash_cv_wcontinued_broken" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_wcontinued_broken" >&5
+printf "%s\n" "$bash_cv_wcontinued_broken" >&6; }
 if test $bash_cv_wcontinued_broken = yes; then
-$as_echo "#define WCONTINUED_BROKEN 1" >>confdefs.h
+printf "%s\n" "#define WCONTINUED_BROKEN 1" >>confdefs.h
 
 fi
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for speed_t in sys/types.h" >&5
-$as_echo_n "checking for speed_t in sys/types.h... " >&6; }
-if ${bash_cv_speed_t_in_sys_types+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for speed_t in sys/types.h" >&5
+printf %s "checking for speed_t in sys/types.h... " >&6; }
+if test ${bash_cv_speed_t_in_sys_types+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <sys/types.h>
 int
-main ()
+main (void)
 {
 speed_t x;
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   bash_cv_speed_t_in_sys_types=yes
-else
+else $as_nop
   bash_cv_speed_t_in_sys_types=no
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_speed_t_in_sys_types" >&5
-$as_echo "$bash_cv_speed_t_in_sys_types" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_speed_t_in_sys_types" >&5
+printf "%s\n" "$bash_cv_speed_t_in_sys_types" >&6; }
 if test $bash_cv_speed_t_in_sys_types = yes; then
-$as_echo "#define SPEED_T_IN_SYS_TYPES 1" >>confdefs.h
+printf "%s\n" "#define SPEED_T_IN_SYS_TYPES 1" >>confdefs.h
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether getpw functions are declared in pwd.h" >&5
-$as_echo_n "checking whether getpw functions are declared in pwd.h... " >&6; }
-if ${bash_cv_getpw_declared+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether getpw functions are declared in pwd.h" >&5
+printf %s "checking whether getpw functions are declared in pwd.h... " >&6; }
+if test ${bash_cv_getpw_declared+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -19872,33 +21165,36 @@ else
 
 _ACEOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "getpwuid" >/dev/null 2>&1; then :
+  $EGREP "getpwuid" >/dev/null 2>&1
+then :
   bash_cv_getpw_declared=yes
-else
+else $as_nop
   bash_cv_getpw_declared=no
 fi
-rm -f conftest*
+rm -rf conftest*
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_getpw_declared" >&5
-$as_echo "$bash_cv_getpw_declared" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_getpw_declared" >&5
+printf "%s\n" "$bash_cv_getpw_declared" >&6; }
 if test $bash_cv_getpw_declared = yes; then
-$as_echo "#define HAVE_GETPW_DECLS 1" >>confdefs.h
+printf "%s\n" "#define HAVE_GETPW_DECLS 1" >>confdefs.h
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for unusable real-time signals due to large values" >&5
-$as_echo_n "checking for unusable real-time signals due to large values... " >&6; }
-if ${bash_cv_unusable_rtsigs+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check real-time signals if cross compiling -- defaulting to yes" >&5
-$as_echo "$as_me: WARNING: cannot check real-time signals if cross compiling -- defaulting to yes" >&2;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for unusable real-time signals due to large values" >&5
+printf %s "checking for unusable real-time signals due to large values... " >&6; }
+if test ${bash_cv_unusable_rtsigs+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if test "$cross_compiling" = yes
+then :
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check real-time signals if cross compiling -- defaulting to yes" >&5
+printf "%s\n" "$as_me: WARNING: cannot check real-time signals if cross compiling -- defaulting to yes" >&2;}
      bash_cv_unusable_rtsigs=yes
 
-else
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -19922,10 +21218,12 @@ main ()
 
   exit(rtmin < n_sigs);
 }
+
 _ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
+if ac_fn_c_try_run "$LINENO"
+then :
   bash_cv_unusable_rtsigs=yes
-else
+else $as_nop
   bash_cv_unusable_rtsigs=no
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_unusable_rtsigs" >&5
-$as_echo "$bash_cv_unusable_rtsigs" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_unusable_rtsigs" >&5
+printf "%s\n" "$bash_cv_unusable_rtsigs" >&6; }
 if test $bash_cv_unusable_rtsigs = yes; then
-$as_echo "#define UNUSABLE_RT_SIGNALS 1" >>confdefs.h
+printf "%s\n" "#define UNUSABLE_RT_SIGNALS 1" >>confdefs.h
 
 fi
 
 
 
 case "$host_os" in
-hpux*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $host_os needs _KERNEL for RLIMIT defines" >&5
-$as_echo_n "checking whether $host_os needs _KERNEL for RLIMIT defines... " >&6; }
-if ${bash_cv_kernel_rlimit+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+hpux*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $host_os needs _KERNEL for RLIMIT defines" >&5
+printf %s "checking whether $host_os needs _KERNEL for RLIMIT defines... " >&6; }
+if test ${bash_cv_kernel_rlimit+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if test ${bash_cv_rlimit+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
@@ -19966,7 +21269,7 @@ else
 #include <sys/resource.h>
 
 int
-main ()
+main (void)
 {
 
   int f;
@@ -19976,10 +21279,19 @@ main ()
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  bash_cv_kernel_rlimit=no
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+if ac_fn_c_try_compile "$LINENO"
+then :
+  bash_cv_rlimit=yes
+else $as_nop
+  bash_cv_rlimit=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+if test $bash_cv_rlimit = no; then
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 #include <sys/types.h>
@@ -19988,31 +21300,31 @@ else
 #undef _KERNEL
 
 int
-main ()
+main (void)
 {
 
-       int f;
-        f = RLIMIT_DATA;
+  int f;
+  f = RLIMIT_DATA;
 
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
+if ac_fn_c_try_compile "$LINENO"
+then :
   bash_cv_kernel_rlimit=yes
-else
+else $as_nop
   bash_cv_kernel_rlimit=no
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_kernel_rlimit" >&5
-$as_echo "$bash_cv_kernel_rlimit" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_kernel_rlimit" >&5
+printf "%s\n" "$bash_cv_kernel_rlimit" >&6; }
 if test $bash_cv_kernel_rlimit = yes; then
-$as_echo "#define RLIMIT_NEEDS_KERNEL 1" >>confdefs.h
+printf "%s\n" "#define RLIMIT_NEEDS_KERNEL 1" >>confdefs.h
 
 fi
  ;;
@@ -20026,22 +21338,25 @@ esac
 if test "X$bash_cv_termcap_lib" = "X"; then
 _bash_needmsg=yes
 else
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which library has the termcap functions" >&5
-$as_echo_n "checking which library has the termcap functions... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which library has the termcap functions" >&5
+printf %s "checking which library has the termcap functions... " >&6; }
 _bash_needmsg=
 fi
-if ${bash_cv_termcap_lib+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+if test ${bash_cv_termcap_lib+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_fn_c_check_func "$LINENO" "tgetent" "ac_cv_func_tgetent"
-if test "x$ac_cv_func_tgetent" = xyes; then :
+if test "x$ac_cv_func_tgetent" = xyes
+then :
   bash_cv_termcap_lib=libc
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tgetent in -ltermcap" >&5
-$as_echo_n "checking for tgetent in -ltermcap... " >&6; }
-if ${ac_cv_lib_termcap_tgetent+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+else $as_nop
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tgetent in -ltermcap" >&5
+printf %s "checking for tgetent in -ltermcap... " >&6; }
+if test ${ac_cv_lib_termcap_tgetent+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-ltermcap  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -20050,37 +21365,37 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char tgetent ();
 int
-main ()
+main (void)
 {
 return tgetent ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_termcap_tgetent=yes
-else
+else $as_nop
   ac_cv_lib_termcap_tgetent=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_termcap_tgetent" >&5
-$as_echo "$ac_cv_lib_termcap_tgetent" >&6; }
-if test "x$ac_cv_lib_termcap_tgetent" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_termcap_tgetent" >&5
+printf "%s\n" "$ac_cv_lib_termcap_tgetent" >&6; }
+if test "x$ac_cv_lib_termcap_tgetent" = xyes
+then :
   bash_cv_termcap_lib=libtermcap
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tgetent in -ltinfo" >&5
-$as_echo_n "checking for tgetent in -ltinfo... " >&6; }
-if ${ac_cv_lib_tinfo_tgetent+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+else $as_nop
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tgetent in -ltinfo" >&5
+printf %s "checking for tgetent in -ltinfo... " >&6; }
+if test ${ac_cv_lib_tinfo_tgetent+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-ltinfo  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -20089,37 +21404,37 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char tgetent ();
 int
-main ()
+main (void)
 {
 return tgetent ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_tinfo_tgetent=yes
-else
+else $as_nop
   ac_cv_lib_tinfo_tgetent=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_tinfo_tgetent" >&5
-$as_echo "$ac_cv_lib_tinfo_tgetent" >&6; }
-if test "x$ac_cv_lib_tinfo_tgetent" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_tinfo_tgetent" >&5
+printf "%s\n" "$ac_cv_lib_tinfo_tgetent" >&6; }
+if test "x$ac_cv_lib_tinfo_tgetent" = xyes
+then :
   bash_cv_termcap_lib=libtinfo
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tgetent in -lcurses" >&5
-$as_echo_n "checking for tgetent in -lcurses... " >&6; }
-if ${ac_cv_lib_curses_tgetent+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+else $as_nop
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tgetent in -lcurses" >&5
+printf %s "checking for tgetent in -lcurses... " >&6; }
+if test ${ac_cv_lib_curses_tgetent+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lcurses  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -20128,37 +21443,37 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char tgetent ();
 int
-main ()
+main (void)
 {
 return tgetent ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_curses_tgetent=yes
-else
+else $as_nop
   ac_cv_lib_curses_tgetent=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_curses_tgetent" >&5
-$as_echo "$ac_cv_lib_curses_tgetent" >&6; }
-if test "x$ac_cv_lib_curses_tgetent" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_curses_tgetent" >&5
+printf "%s\n" "$ac_cv_lib_curses_tgetent" >&6; }
+if test "x$ac_cv_lib_curses_tgetent" = xyes
+then :
   bash_cv_termcap_lib=libcurses
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tgetent in -lncurses" >&5
-$as_echo_n "checking for tgetent in -lncurses... " >&6; }
-if ${ac_cv_lib_ncurses_tgetent+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+else $as_nop
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tgetent in -lncurses" >&5
+printf %s "checking for tgetent in -lncurses... " >&6; }
+if test ${ac_cv_lib_ncurses_tgetent+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lncurses  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -20167,37 +21482,37 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char tgetent ();
 int
-main ()
+main (void)
 {
 return tgetent ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_ncurses_tgetent=yes
-else
+else $as_nop
   ac_cv_lib_ncurses_tgetent=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ncurses_tgetent" >&5
-$as_echo "$ac_cv_lib_ncurses_tgetent" >&6; }
-if test "x$ac_cv_lib_ncurses_tgetent" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ncurses_tgetent" >&5
+printf "%s\n" "$ac_cv_lib_ncurses_tgetent" >&6; }
+if test "x$ac_cv_lib_ncurses_tgetent" = xyes
+then :
   bash_cv_termcap_lib=libncurses
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tgetent in -lncursesw" >&5
-$as_echo_n "checking for tgetent in -lncursesw... " >&6; }
-if ${ac_cv_lib_ncursesw_tgetent+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+else $as_nop
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tgetent in -lncursesw" >&5
+printf %s "checking for tgetent in -lncursesw... " >&6; }
+if test ${ac_cv_lib_ncursesw_tgetent+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   ac_check_lib_save_LIBS=$LIBS
 LIBS="-lncursesw  $LIBS"
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -20206,32 +21521,31 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* Override any GCC internal prototype to avoid an error.
    Use char because int might match the return type of a GCC
    builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
 char tgetent ();
 int
-main ()
+main (void)
 {
 return tgetent ();
   ;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+if ac_fn_c_try_link "$LINENO"
+then :
   ac_cv_lib_ncursesw_tgetent=yes
-else
+else $as_nop
   ac_cv_lib_ncursesw_tgetent=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
     conftest$ac_exeext conftest.$ac_ext
 LIBS=$ac_check_lib_save_LIBS
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ncursesw_tgetent" >&5
-$as_echo "$ac_cv_lib_ncursesw_tgetent" >&6; }
-if test "x$ac_cv_lib_ncursesw_tgetent" = xyes; then :
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ncursesw_tgetent" >&5
+printf "%s\n" "$ac_cv_lib_ncursesw_tgetent" >&6; }
+if test "x$ac_cv_lib_ncursesw_tgetent" = xyes
+then :
   bash_cv_termcap_lib=libncursesw
-else
+else $as_nop
   bash_cv_termcap_lib=gnutermcap
 fi
 
 fi
 
 if test "X$_bash_needmsg" = "Xyes"; then
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which library has the termcap functions" >&5
-$as_echo_n "checking which library has the termcap functions... " >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which library has the termcap functions" >&5
+printf %s "checking which library has the termcap functions... " >&6; }
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: using $bash_cv_termcap_lib" >&5
-$as_echo "using $bash_cv_termcap_lib" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: using $bash_cv_termcap_lib" >&5
+printf "%s\n" "using $bash_cv_termcap_lib" >&6; }
 if test $bash_cv_termcap_lib = gnutermcap && test -z "$prefer_curses"; then
 LDFLAGS="$LDFLAGS -L./lib/termcap"
 TERMCAP_LIB="./lib/termcap/libtermcap.a"
@@ -20270,7 +21584,8 @@ elif test $bash_cv_termcap_lib = libc; then
 TERMCAP_LIB=
 TERMCAP_DEP=
 else
-TERMCAP_LIB=-lcurses
+# we assume ncurses is installed somewhere the linker can find it
+TERMCAP_LIB=-lncurses
 TERMCAP_DEP=
 fi
 
 
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether /dev/fd is available" >&5
-$as_echo_n "checking whether /dev/fd is available... " >&6; }
-if ${bash_cv_dev_fd+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether /dev/fd is available" >&5
+printf %s "checking whether /dev/fd is available... " >&6; }
+if test ${bash_cv_dev_fd+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   bash_cv_dev_fd=""
 if test -d /dev/fd  && (exec test -r /dev/fd/0 < /dev/null) ; then
 # check for systems like FreeBSD 5 that only provide /dev/fd/[012]
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_dev_fd" >&5
-$as_echo "$bash_cv_dev_fd" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_dev_fd" >&5
+printf "%s\n" "$bash_cv_dev_fd" >&6; }
 if test $bash_cv_dev_fd = "standard"; then
-  $as_echo "#define HAVE_DEV_FD 1" >>confdefs.h
+  printf "%s\n" "#define HAVE_DEV_FD 1" >>confdefs.h
 
-  $as_echo "#define DEV_FD_PREFIX \"/dev/fd/\"" >>confdefs.h
+  printf "%s\n" "#define DEV_FD_PREFIX \"/dev/fd/\"" >>confdefs.h
 
 elif test $bash_cv_dev_fd = "whacky"; then
-  $as_echo "#define HAVE_DEV_FD 1" >>confdefs.h
+  printf "%s\n" "#define HAVE_DEV_FD 1" >>confdefs.h
 
-  $as_echo "#define DEV_FD_PREFIX \"/proc/self/fd/\"" >>confdefs.h
+  printf "%s\n" "#define DEV_FD_PREFIX \"/proc/self/fd/\"" >>confdefs.h
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether /dev/stdin stdout stderr are available" >&5
-$as_echo_n "checking whether /dev/stdin stdout stderr are available... " >&6; }
-if ${bash_cv_dev_stdin+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether /dev/stdin stdout stderr are available" >&5
+printf %s "checking whether /dev/stdin stdout stderr are available... " >&6; }
+if test ${bash_cv_dev_stdin+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if (exec test -r /dev/stdin < /dev/null) ; then
    bash_cv_dev_stdin=present
  else
@@ -20329,18 +21646,19 @@ else
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_dev_stdin" >&5
-$as_echo "$bash_cv_dev_stdin" >&6; }
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_dev_stdin" >&5
+printf "%s\n" "$bash_cv_dev_stdin" >&6; }
 if test $bash_cv_dev_stdin = "present"; then
-  $as_echo "#define HAVE_DEV_STDIN 1" >>confdefs.h
+  printf "%s\n" "#define HAVE_DEV_STDIN 1" >>confdefs.h
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for default mail directory" >&5
-$as_echo_n "checking for default mail directory... " >&6; }
-if ${bash_cv_mail_dir+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for default mail directory" >&5
+printf %s "checking for default mail directory... " >&6; }
+if test ${bash_cv_mail_dir+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
   if test -d /var/mail; then
    bash_cv_mail_dir=/var/mail
  elif test -d /var/spool/mail; then
@@ -20355,11 +21673,9 @@ else
 
 fi
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_mail_dir" >&5
-$as_echo "$bash_cv_mail_dir" >&6; }
-cat >>confdefs.h <<_ACEOF
-#define DEFAULT_MAIL_DIRECTORY "$bash_cv_mail_dir"
-_ACEOF
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $bash_cv_mail_dir" >&5
+printf "%s\n" "$bash_cv_mail_dir" >&6; }
+printf "%s\n" "#define DEFAULT_MAIL_DIRECTORY \"$bash_cv_mail_dir\"" >>confdefs.h
 
 
 
@@ -20368,7 +21684,7 @@ if test "$bash_cv_job_control_missing" = missing; then
 fi
 
 if test "$opt_job_control" = yes; then
-$as_echo "#define JOB_CONTROL 1" >>confdefs.h
+printf "%s\n" "#define JOB_CONTROL 1" >>confdefs.h
 
 JOBS_O=jobs.o
 else
@@ -20382,13 +21698,13 @@ LOCAL_DEFS=-DSHELL
 
 
 case "${host_os}" in
-sysv4.2*)      $as_echo "#define SVR4_2 1" >>confdefs.h
+sysv4.2*)      printf "%s\n" "#define SVR4_2 1" >>confdefs.h
 
-               $as_echo "#define SVR4 1" >>confdefs.h
+               printf "%s\n" "#define SVR4 1" >>confdefs.h
  ;;
-sysv4*)                $as_echo "#define SVR4 1" >>confdefs.h
+sysv4*)                printf "%s\n" "#define SVR4 1" >>confdefs.h
  ;;
-sysv5*)                $as_echo "#define SVR5 1" >>confdefs.h
+sysv5*)                printf "%s\n" "#define SVR5 1" >>confdefs.h
  ;;
 hpux9*)                LOCAL_CFLAGS="-DHPUX9 -DHPUX -DTGETENT_BROKEN -DTGETFLAG_BROKEN" ;;
 hpux*)         LOCAL_CFLAGS="-DHPUX -DTGETENT_BROKEN -DTGETFLAG_BROKEN" ;;
@@ -20409,11 +21725,11 @@ lynxos*)      LOCAL_CFLAGS=-DRECYCLES_PIDS ;;
 linux*)                LOCAL_LDFLAGS=-rdynamic          # allow dynamic loading
                case "`uname -r`" in
                1.*|2.[0123]*)  : ;;
-               *)      $as_echo "#define PGRP_PIPE 1" >>confdefs.h
+               *)      printf "%s\n" "#define PGRP_PIPE 1" >>confdefs.h
  ;;
                esac ;;
 netbsd*|openbsd*)      LOCAL_CFLAGS="-DDEV_FD_STAT_BROKEN" ;;
-freebsd*)      LOCAL_CFLAGS='-DHEREDOC_PIPESIZE=4096' ;;
+freebsd*|midnightbsd*) LOCAL_CFLAGS='-DHEREDOC_PIPESIZE=4096' ;;
 *qnx[67]*)     LOCAL_LIBS="-lncurses" ;;
 *qnx*)         LOCAL_CFLAGS="-Dqnx -F -3s" LOCAL_LDFLAGS="-3s" LOCAL_LIBS="-lunix -lncurses" ;;
 powerux*)      LOCAL_LIBS="-lgen" ;;
@@ -20437,6 +21753,7 @@ freebsd[3-9]*)
                fi ;;
 freebsdelf*)   LOCAL_LDFLAGS=-rdynamic ;;      # allow dynamic loading
 dragonfly*)    LOCAL_LDFLAGS=-rdynamic ;;      # allow dynamic loading
+midnightbsd*)  LOCAL_LDFLAGS=-rdynamic ;;      # allow dynamic loading
 esac
 
 case "$host_cpu" in
@@ -20453,7 +21770,7 @@ mips-pyramid-sysv4)     LOCAL_CFLAGS=-Xa ;;
 esac
 
 # turn off paren warnings in gcc
-CFLAGS="$CFLAGS ${STYLE_CFLAGS}"
+#CFLAGS="$CFLAGS ${STYLE_CFLAGS}"
 
 #
 # Shared object configuration section.  These values are generated by
@@ -20461,8 +21778,8 @@ CFLAGS="$CFLAGS ${STYLE_CFLAGS}"
 #
 if test "$ac_cv_func_dlopen" = "yes" && test -f ${srcdir}/support/shobj-conf
 then
-       { $as_echo "$as_me:${as_lineno-$LINENO}: checking shared object configuration for loadable builtins" >&5
-$as_echo_n "checking shared object configuration for loadable builtins... " >&6; }
+       { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking shared object configuration for loadable builtins" >&5
+printf %s "checking shared object configuration for loadable builtins... " >&6; }
        eval `${CONFIG_SHELL-/bin/sh} ${srcdir}/support/shobj-conf -C "${CC}" -c "${host_cpu}" -o "${host_os}" -v "${host_vendor}"`
 
 
@@ -20471,8 +21788,8 @@ $as_echo_n "checking shared object configuration for loadable builtins... " >&6;
 
 
 
-       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SHOBJ_STATUS" >&5
-$as_echo "$SHOBJ_STATUS" >&6; }
+       { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $SHOBJ_STATUS" >&5
+printf "%s\n" "$SHOBJ_STATUS" >&6; }
 else
        SHOBJ_STATUS=unsupported
 
 #AC_SUBST(ALLOCA_SOURCE)
 #AC_SUBST(ALLOCA_OBJECT)
 
-ac_config_files="$ac_config_files Makefile builtins/Makefile lib/readline/Makefile lib/glob/Makefile lib/intl/Makefile lib/malloc/Makefile lib/sh/Makefile lib/termcap/Makefile lib/tilde/Makefile doc/Makefile support/Makefile po/Makefile.in examples/loadables/Makefile examples/loadables/Makefile.inc examples/loadables/perl/Makefile support/bash.pc support/bashbug.sh"
+ac_config_files="$ac_config_files Makefile builtins/Makefile lib/readline/Makefile lib/glob/Makefile lib/intl/Makefile lib/malloc/Makefile lib/sh/Makefile lib/termcap/Makefile lib/tilde/Makefile doc/Makefile support/Makefile po/Makefile.in examples/loadables/Makefile examples/loadables/Makefile.inc examples/loadables/Makefile.sample examples/loadables/perl/Makefile support/bash.pc support/bashbug.sh"
+
+
+ac_config_commands="$ac_config_commands stamp-h"
 
-ac_config_commands="$ac_config_commands default"
 
 cat >confcache <<\_ACEOF
 # This file is a shell script that caches the results of configure
@@ -20577,8 +21896,8 @@ _ACEOF
     case $ac_val in #(
     *${as_nl}*)
       case $ac_var in #(
-      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
+      *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
+printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
       esac
       case $ac_var in #(
       _ | IFS | as_nl) ;; #(
@@ -20608,15 +21927,15 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
      /^ac_cv_env_/b end
      t clear
      :clear
-     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+     s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/
      t end
      s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
      :end' >>confcache
 if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
   if test -w "$cache_file"; then
     if test "x$cache_file" != "x/dev/null"; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
-$as_echo "$as_me: updating cache $cache_file" >&6;}
+      { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
+printf "%s\n" "$as_me: updating cache $cache_file" >&6;}
       if test ! -f "$cache_file" || test -h "$cache_file"; then
        cat confcache >"$cache_file"
       else
@@ -20630,8 +21949,8 @@ $as_echo "$as_me: updating cache $cache_file" >&6;}
       fi
     fi
   else
-    { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
-$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
+printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;}
   fi
 fi
 rm -f confcache
@@ -20648,7 +21967,7 @@ U=
 for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
   # 1. Remove the extension, and $U if already installed.
   ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
-  ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
+  ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"`
   # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
   #    will be set to the directory where LIBOBJS objects are built.
   as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
@@ -20665,8 +21984,8 @@ LTLIBOBJS=$ac_ltlibobjs
 ac_write_fail=0
 ac_clean_files_save=$ac_clean_files
 ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
+printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;}
 as_write_fail=0
 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
 #! $SHELL
@@ -20689,14 +22008,16 @@ cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
 
 # Be more Bourne compatible
 DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
+as_nop=:
+if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
+then :
   emulate sh
   NULLCMD=:
   # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
   # is contrary to our usage.  Disable this feature.
   alias -g '${1+"$@"}'='"$@"'
   setopt NO_GLOB_SUBST
-else
+else $as_nop
   case `(set -o) 2>/dev/null` in #(
   *posix*) :
     set -o posix ;; #(
@@ -20706,46 +22027,46 @@ esac
 fi
 
 
+
+# Reset variables that may have inherited troublesome values from
+# the environment.
+
+# IFS needs to be set, to space, tab, and newline, in precisely that order.
+# (If _AS_PATH_WALK were called with IFS unset, it would have the
+# side effect of setting IFS to empty, thus disabling word splitting.)
+# Quoting is to prevent editors from complaining about space-tab.
 as_nl='
 '
 export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
-    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='print -r --'
-  as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='printf %s\n'
-  as_echo_n='printf %s'
-else
-  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
-    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
-    as_echo_n='/usr/ucb/echo -n'
-  else
-    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
-    as_echo_n_body='eval
-      arg=$1;
-      case $arg in #(
-      *"$as_nl"*)
-       expr "X$arg" : "X\\(.*\\)$as_nl";
-       arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
-      esac;
-      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
-    '
-    export as_echo_n_body
-    as_echo_n='sh -c $as_echo_n_body as_echo'
-  fi
-  export as_echo_body
-  as_echo='sh -c $as_echo_body as_echo'
-fi
+IFS=" ""       $as_nl"
+
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# Ensure predictable behavior from utilities with locale-dependent output.
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
+
+# We cannot yet rely on "unset" to work, but we need these variables
+# to be unset--not just set to an empty or harmless value--now, to
+# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh).  This construct
+# also avoids known problems related to "unset" and subshell syntax
+# in other old shells (e.g. bash 2.01 and pdksh 5.2.14).
+for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH
+do eval test \${$as_var+y} \
+  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
+done
+
+# Ensure that fds 0, 1, and 2 are open.
+if (exec 3>&0) 2>/dev/null; then :; else exec 0</dev/null; fi
+if (exec 3>&1) 2>/dev/null; then :; else exec 1>/dev/null; fi
+if (exec 3>&2)            ; then :; else exec 2>/dev/null; fi
 
 # The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
+if ${PATH_SEPARATOR+false} :; then
   PATH_SEPARATOR=:
   (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
     (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
@@ -20754,13 +22075,6 @@ if test "${PATH_SEPARATOR+set}" != set; then
 fi
 
 
-# IFS
-# We need space, tab and new line, in precisely that order.  Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" ""       $as_nl"
-
 # Find who we are.  Look in the path if we contain no directory separator.
 as_myself=
 case $0 in #((
@@ -20769,8 +22083,12 @@ case $0 in #((
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
+    test -r "$as_dir$0" && as_myself=$as_dir$0 && break
   done
 IFS=$as_save_IFS
 
@@ -20782,30 +22100,10 @@ if test "x$as_myself" = x; then
   as_myself=$0
 fi
 if test ! -f "$as_myself"; then
-  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
   exit 1
 fi
 
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there.  '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
-  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
 
 
 # as_fn_error STATUS ERROR [LINENO LOG_FD]
@@ -20818,13 +22116,14 @@ as_fn_error ()
   as_status=$1; test $as_status -eq 0 && as_status=1
   if test "$4"; then
     as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
   fi
-  $as_echo "$as_me: error: $2" >&2
+  printf "%s\n" "$as_me: error: $2" >&2
   as_fn_exit $as_status
 } # as_fn_error
 
 
+
 # as_fn_set_status STATUS
 # -----------------------
 # Set $? to STATUS, without forking.
@@ -20851,18 +22150,20 @@ as_fn_unset ()
   { eval $1=; unset $1;}
 }
 as_unset=as_fn_unset
+
 # as_fn_append VAR VALUE
 # ----------------------
 # Append the text in VALUE to the end of the definition contained in VAR. Take
 # advantage of any shell optimizations that allow amortized linear growth over
 # repeated appends, instead of the typical quadratic growth present in naive
 # implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null
+then :
   eval 'as_fn_append ()
   {
     eval $1+=\$2
   }'
-else
+else $as_nop
   as_fn_append ()
   {
     eval $1=\$$1\$2
@@ -20874,12 +22175,13 @@ fi # as_fn_append
 # Perform arithmetic evaluation on the ARGs, and store the result in the
 # global $as_val. Take advantage of shells that can avoid forks. The arguments
 # must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null
+then :
   eval 'as_fn_arith ()
   {
     as_val=$(( $* ))
   }'
-else
+else $as_nop
   as_fn_arith ()
   {
     as_val=`expr "$@" || test $? -eq 1`
@@ -20910,7 +22212,7 @@ as_me=`$as_basename -- "$0" ||
 $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
         X"$0" : 'X\(//\)$' \| \
         X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
+printf "%s\n" X/"$0" |
     sed '/^.*\/\([^/][^/]*\)\/*$/{
            s//\1/
            q
@@ -20932,6 +22234,10 @@ as_cr_Letters=$as_cr_letters$as_cr_LETTERS
 as_cr_digits='0123456789'
 as_cr_alnum=$as_cr_Letters$as_cr_digits
 
+
+# Determine whether it's possible to make 'echo' print without a newline.
+# These variables are no longer used directly by Autoconf, but are AC_SUBSTed
+# for compatibility with existing Makefiles.
 ECHO_C= ECHO_N= ECHO_T=
 case `echo -n x` in #(((((
 -n*)
@@ -20945,6 +22251,12 @@ case `echo -n x` in #(((((
   ECHO_N='-n';;
 esac
 
+# For backward compatibility with old third-party macros, we provide
+# the shell variables $as_echo and $as_echo_n.  New code should use
+# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively.
+as_echo='printf %s\n'
+as_echo_n='printf %s'
+
 rm -f conf$$ conf$$.exe conf$$.file
 if test -d conf$$.dir; then
   rm -f conf$$.dir/conf$$.file
@@ -20986,7 +22298,7 @@ as_fn_mkdir_p ()
     as_dirs=
     while :; do
       case $as_dir in #(
-      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
       *) as_qdir=$as_dir;;
       esac
       as_dirs="'$as_qdir' $as_dirs"
@@ -20995,7 +22307,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
         X"$as_dir" : 'X\(//\)[^/]' \| \
         X"$as_dir" : 'X\(//\)$' \| \
         X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
+printf "%s\n" X"$as_dir" |
     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
            s//\1/
            q
@@ -21057,8 +22369,8 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by bash $as_me 5.1-release, which was
-generated by GNU Autoconf 2.69.  Invocation command line was
+This file was extended by bash $as_me 5.2-release, which was
+generated by GNU Autoconf 2.71.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
   CONFIG_HEADERS  = $CONFIG_HEADERS
@@ -21120,14 +22432,16 @@ $config_commands
 Report bugs to <bug-bash@gnu.org>."
 
 _ACEOF
+ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"`
+ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"`
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
+ac_cs_config='$ac_cs_config_escaped'
 ac_cs_version="\\
-bash config.status 5.1-release
-configured by $0, generated by GNU Autoconf 2.69,
+bash config.status 5.2-release
+configured by $0, generated by GNU Autoconf 2.71,
   with options \\"\$ac_cs_config\\"
 
-Copyright (C) 2012 Free Software Foundation, Inc.
+Copyright (C) 2021 Free Software Foundation, Inc.
 This config.status script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it."
 
   -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
     ac_cs_recheck=: ;;
   --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
-    $as_echo "$ac_cs_version"; exit ;;
+    printf "%s\n" "$ac_cs_version"; exit ;;
   --config | --confi | --conf | --con | --co | --c )
-    $as_echo "$ac_cs_config"; exit ;;
+    printf "%s\n" "$ac_cs_config"; exit ;;
   --debug | --debu | --deb | --de | --d | -d )
     debug=: ;;
   --file | --fil | --fi | --f )
     $ac_shift
     case $ac_optarg in
-    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
     '') as_fn_error $? "missing file argument" ;;
     esac
     as_fn_append CONFIG_FILES " '$ac_optarg'"
@@ -21182,7 +22496,7 @@ do
   --header | --heade | --head | --hea )
     $ac_shift
     case $ac_optarg in
-    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
     esac
     as_fn_append CONFIG_HEADERS " '$ac_optarg'"
     ac_need_defaults=false;;
@@ -21191,7 +22505,7 @@ do
     as_fn_error $? "ambiguous option: \`$1'
 Try \`$0 --help' for more information.";;
   --help | --hel | -h )
-    $as_echo "$ac_cs_usage"; exit ;;
+    printf "%s\n" "$ac_cs_usage"; exit ;;
   -q | -quiet | --quiet | --quie | --qui | --qu | --q \
   | -silent | --silent | --silen | --sile | --sil | --si | --s)
     ac_cs_silent=: ;;
@@ -21219,7 +22533,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 if \$ac_cs_recheck; then
   set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
   shift
-  \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
+  \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6
   CONFIG_SHELL='$SHELL'
   export CONFIG_SHELL
   exec "\$@"
@@ -21233,7 +22547,7 @@ exec 5>>config.log
   sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
 ## Running $as_me. ##
 _ASBOX
-  $as_echo "$ac_log"
+  printf "%s\n" "$ac_log"
 } >&5
 
 _ACEOF
     "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;;
     "examples/loadables/Makefile") CONFIG_FILES="$CONFIG_FILES examples/loadables/Makefile" ;;
     "examples/loadables/Makefile.inc") CONFIG_FILES="$CONFIG_FILES examples/loadables/Makefile.inc" ;;
+    "examples/loadables/Makefile.sample") CONFIG_FILES="$CONFIG_FILES examples/loadables/Makefile.sample" ;;
     "examples/loadables/perl/Makefile") CONFIG_FILES="$CONFIG_FILES examples/loadables/perl/Makefile" ;;
     "support/bash.pc") CONFIG_FILES="$CONFIG_FILES support/bash.pc" ;;
     "support/bashbug.sh") CONFIG_FILES="$CONFIG_FILES support/bashbug.sh" ;;
-    "default") CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;;
+    "stamp-h") CONFIG_COMMANDS="$CONFIG_COMMANDS stamp-h" ;;
 
   *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
   esac
@@ -21287,9 +22602,9 @@ done
 # We use the long form for the default assignment because of an extremely
 # bizarre bug on SunOS 4.1.3.
 if $ac_need_defaults; then
-  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
-  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
-  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+  test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files
+  test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers
+  test ${CONFIG_COMMANDS+y} || CONFIG_COMMANDS=$config_commands
 fi
 
 # Have a temporary directory for convenience.  Make it in the build tree
@@ -21625,7 +22940,7 @@ do
           esac ||
           as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
       esac
-      case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
+      case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
       as_fn_append ac_file_inputs " '$ac_f'"
     done
 
     # use $as_me), people would be surprised to read:
     #    /* config.h.  Generated by config.status.  */
     configure_input='Generated from '`
-         $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
+         printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
        `' by configure.'
     if test x"$ac_file" != x-; then
       configure_input="$ac_file.  $configure_input"
-      { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
-$as_echo "$as_me: creating $ac_file" >&6;}
+      { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
+printf "%s\n" "$as_me: creating $ac_file" >&6;}
     fi
     # Neutralize special characters interpreted by sed in replacement strings.
     case $configure_input in #(
     *\&* | *\|* | *\\* )
-       ac_sed_conf_input=`$as_echo "$configure_input" |
+       ac_sed_conf_input=`printf "%s\n" "$configure_input" |
        sed 's/[\\\\&|]/\\\\&/g'`;; #(
     *) ac_sed_conf_input=$configure_input;;
     esac
@@ -21660,7 +22975,7 @@ $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
         X"$ac_file" : 'X\(//\)[^/]' \| \
         X"$ac_file" : 'X\(//\)$' \| \
         X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$ac_file" |
+printf "%s\n" X"$ac_file" |
     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
            s//\1/
            q
@@ -21684,9 +22999,9 @@ $as_echo X"$ac_file" |
 case "$ac_dir" in
 .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
 *)
-  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
+  ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'`
   # A ".." for each directory in $ac_dir_suffix.
-  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
+  ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
   case $ac_top_builddir_sub in
   "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
   *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
@@ -21748,8 +23063,8 @@ ac_sed_dataroot='
 case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
 *datarootdir*) ac_datarootdir_seen=yes;;
 *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
 _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
   ac_datarootdir_hack='
@@ -21793,9 +23108,9 @@ test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
   { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
   { ac_out=`sed -n '/^[         ]*datarootdir[  ]*:*=/p' \
       "$ac_tmp/out"`; test -z "$ac_out"; } &&
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
 which seems to be undefined.  Please make sure it is defined" >&5
-$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
 which seems to be undefined.  Please make sure it is defined" >&2;}
 
   rm -f "$ac_tmp/stdin"
@@ -21811,27 +23126,27 @@ which seems to be undefined.  Please make sure it is defined" >&2;}
   #
   if test x"$ac_file" != x-; then
     {
-      $as_echo "/* $configure_input  */" \
+      printf "%s\n" "/* $configure_input  */" >&1 \
       && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
     } >"$ac_tmp/config.h" \
       || as_fn_error $? "could not create $ac_file" "$LINENO" 5
     if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
-$as_echo "$as_me: $ac_file is unchanged" >&6;}
+      { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
+printf "%s\n" "$as_me: $ac_file is unchanged" >&6;}
     else
       rm -f "$ac_file"
       mv "$ac_tmp/config.h" "$ac_file" \
        || as_fn_error $? "could not create $ac_file" "$LINENO" 5
     fi
   else
-    $as_echo "/* $configure_input  */" \
+    printf "%s\n" "/* $configure_input  */" >&1 \
       && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
       || as_fn_error $? "could not create -" "$LINENO" 5
   fi
  ;;
 
-  :C)  { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
-$as_echo "$as_me: executing $ac_file commands" >&6;}
+  :C)  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
+printf "%s\n" "$as_me: executing $ac_file commands" >&6;}
  ;;
   esac
 
@@ -21948,10 +23263,7 @@ $as_echo "$as_me: executing $ac_file commands" >&6;}
         ;;
       esac
     done ;;
-    "default":C)
-# Makefile uses this timestamp file to record whether config.h is up to date.
-echo timestamp > stamp-h
- ;;
+    "stamp-h":C) echo timestamp > stamp-h ;;
 
   esac
 done # for ac_tag
@@ -21986,7 +23298,8 @@ if test "$no_create" != yes; then
   $ac_cs_success || as_fn_exit 1
 fi
 if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
-$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
+printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
 fi
 
+
index 2fe3e7d9afef8cf4e7b2cc3a16c04749df8d9e16..50a6e2016330b479960f356bf4f03ce37a82ee8c 100644 (file)
@@ -1,11 +1,11 @@
 dnl
-dnl Configure script for bash-5.1
+dnl Configure script for bash-5.2
 dnl
 dnl report bugs to chet@po.cwru.edu
 dnl
 dnl Process this file with autoconf to produce a configure script.
 
-# Copyright (C) 1987-2020 Free Software Foundation, Inc.
+# Copyright (C) 1987-2022 Free Software Foundation, Inc.
 
 #
 #   This program is free software: you can redistribute it and/or modify
@@ -21,15 +21,15 @@ dnl Process this file with autoconf to produce a configure script.
 #   You should have received a copy of the GNU General Public License
 #   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-AC_REVISION([for Bash 5.1, version 5.022])dnl
+AC_REVISION([for Bash 5.2, version 5.046])dnl
 
-define(bashvers, 5.1)
+define(bashvers, 5.2)
 define(relstatus, release)
 
 AC_INIT([bash], bashvers-relstatus, [bug-bash@gnu.org])
 
 dnl make sure we are using a recent autoconf version
-AC_PREREQ(2.61)
+AC_PREREQ(2.69)
 
 AC_CONFIG_SRCDIR(shell.h)
 dnl where to find install.sh, config.sub, and config.guess
@@ -108,11 +108,11 @@ AC_ARG_VAR(DEBUGGER_START_FILE, [location of bash debugger initialization file])
 
 dnl arguments to configure
 dnl packages
-AC_ARG_WITH(afs, AC_HELP_STRING([--with-afs], [if you are running AFS]), opt_afs=$withval)
-AC_ARG_WITH(bash-malloc, AC_HELP_STRING([--with-bash-malloc], [use the Bash version of malloc]), opt_bash_malloc=$withval)
-AC_ARG_WITH(curses, AC_HELP_STRING([--with-curses], [use the curses library instead of the termcap library]), opt_curses=$withval)
-AC_ARG_WITH(gnu-malloc, AC_HELP_STRING([--with-gnu-malloc], [synonym for --with-bash-malloc]), opt_bash_malloc=$withval)
-AC_ARG_WITH(installed-readline, AC_HELP_STRING([--with-installed-readline], [use a version of the readline library that is already installed]), opt_with_installed_readline=$withval)
+AC_ARG_WITH(afs, AS_HELP_STRING([--with-afs], [if you are running AFS]), opt_afs=$withval)
+AC_ARG_WITH(bash-malloc, AS_HELP_STRING([--with-bash-malloc], [use the Bash version of malloc]), opt_bash_malloc=$withval)
+AC_ARG_WITH(curses, AS_HELP_STRING([--with-curses], [use the curses library instead of the termcap library]), opt_curses=$withval)
+AC_ARG_WITH(gnu-malloc, AS_HELP_STRING([--with-gnu-malloc], [synonym for --with-bash-malloc]), opt_bash_malloc=$withval)
+AC_ARG_WITH(installed-readline, AS_HELP_STRING([--with-installed-readline], [use a version of the readline library that is already installed]), opt_with_installed_readline=$withval)
 
 if test "$opt_bash_malloc" = yes; then
        MALLOC_TARGET=malloc
@@ -182,13 +182,18 @@ opt_dircomplete_expand_default=no
 opt_globascii_default=yes
 opt_function_import=yes
 opt_dev_fd_stat_broken=no
+opt_alt_array_impl=no
+opt_translatable_strings=yes
+
+dnl modified by alternate array implementation option
+ARRAY_O=array.o
 
 dnl options that affect how bash is compiled and linked
 opt_static_link=no
 opt_profiling=no
 
 dnl argument parsing for optional features
-AC_ARG_ENABLE(minimal-config, AC_HELP_STRING([--enable-minimal-config], [a minimal sh-like configuration]), opt_minimal_config=$enableval)
+AC_ARG_ENABLE(minimal-config, AS_HELP_STRING([--enable-minimal-config], [a minimal sh-like configuration]), opt_minimal_config=$enableval)
 
 dnl a minimal configuration turns everything off, but features can be
 dnl added individually
@@ -202,51 +207,54 @@ if test $opt_minimal_config = yes; then
        opt_net_redirs=no opt_progcomp=no opt_separate_help=no
        opt_multibyte=yes opt_cond_regexp=no opt_coproc=no
        opt_casemod_attrs=no opt_casemod_expansions=no opt_extglob_default=no
+       opt_translatable_strings=no
        opt_globascii_default=yes
 fi
 
-AC_ARG_ENABLE(alias, AC_HELP_STRING([--enable-alias], [enable shell aliases]), opt_alias=$enableval)
-AC_ARG_ENABLE(arith-for-command, AC_HELP_STRING([--enable-arith-for-command], [enable arithmetic for command]), opt_arith_for_command=$enableval)
-AC_ARG_ENABLE(array-variables, AC_HELP_STRING([--enable-array-variables], [include shell array variables]), opt_array_variables=$enableval)
-AC_ARG_ENABLE(bang-history, AC_HELP_STRING([--enable-bang-history], [turn on csh-style history substitution]), opt_bang_history=$enableval)
-AC_ARG_ENABLE(brace-expansion, AC_HELP_STRING([--enable-brace-expansion], [include brace expansion]), opt_brace_expansion=$enableval)
-AC_ARG_ENABLE(casemod-attributes, AC_HELP_STRING([--enable-casemod-attributes], [include case-modifying variable attributes]), opt_casemod_attrs=$enableval)
-AC_ARG_ENABLE(casemod-expansions, AC_HELP_STRING([--enable-casemod-expansions], [include case-modifying word expansions]), opt_casemod_expansions=$enableval)
-AC_ARG_ENABLE(command-timing, AC_HELP_STRING([--enable-command-timing], [enable the time reserved word and command timing]), opt_command_timing=$enableval)
-AC_ARG_ENABLE(cond-command, AC_HELP_STRING([--enable-cond-command], [enable the conditional command]), opt_cond_command=$enableval)
-AC_ARG_ENABLE(cond-regexp, AC_HELP_STRING([--enable-cond-regexp], [enable extended regular expression matching in conditional commands]), opt_cond_regexp=$enableval)
-AC_ARG_ENABLE(coprocesses, AC_HELP_STRING([--enable-coprocesses], [enable coprocess support and the coproc reserved word]), opt_coproc=$enableval)
-AC_ARG_ENABLE(debugger, AC_HELP_STRING([--enable-debugger], [enable support for bash debugger]), opt_debugger=$enableval)
-AC_ARG_ENABLE(dev-fd-stat-broken, AC_HELP_STRING([--enable-dev-fd-stat-broken], [enable this option if stat on /dev/fd/N and fstat on file descriptor N don't return the same results]), opt_dev_fd_stat_broken=$enableval)
-AC_ARG_ENABLE(direxpand-default, AC_HELP_STRING([--enable-direxpand-default], [enable the direxpand shell option by default]), opt_dircomplete_expand_default=$enableval)
-AC_ARG_ENABLE(directory-stack, AC_HELP_STRING([--enable-directory-stack], [enable builtins pushd/popd/dirs]), opt_dirstack=$enableval)
-AC_ARG_ENABLE(disabled-builtins, AC_HELP_STRING([--enable-disabled-builtins], [allow disabled builtins to still be invoked]), opt_disabled_builtins=$enableval)
-AC_ARG_ENABLE(dparen-arithmetic, AC_HELP_STRING([--enable-dparen-arithmetic], [include ((...)) command]), opt_dparen_arith=$enableval)
-AC_ARG_ENABLE(extended-glob, AC_HELP_STRING([--enable-extended-glob], [include ksh-style extended pattern matching]), opt_extended_glob=$enableval)
-AC_ARG_ENABLE(extended-glob-default, AC_HELP_STRING([--enable-extended-glob-default], [force extended pattern matching to be enabled by default]), opt_extglob_default=$enableval)
-AC_ARG_ENABLE(function-import, AC_HELP_STRING([--enable-function-import], [allow bash to import exported function definitions by default]), opt_function_import=$enableval)
-AC_ARG_ENABLE(glob-asciiranges-default, AC_HELP_STRING([--enable-glob-asciiranges-default], [force bracket range expressions in pattern matching to use the C locale by default]), opt_globascii_default=$enableval)
-AC_ARG_ENABLE(help-builtin, AC_HELP_STRING([--enable-help-builtin], [include the help builtin]), opt_help=$enableval)
-AC_ARG_ENABLE(history, AC_HELP_STRING([--enable-history], [turn on command history]), opt_history=$enableval)
-AC_ARG_ENABLE(job-control, AC_HELP_STRING([--enable-job-control], [enable job control features]), opt_job_control=$enableval)
-AC_ARG_ENABLE(multibyte, AC_HELP_STRING([--enable-multibyte], [enable multibyte characters if OS supports them]), opt_multibyte=$enableval)
-AC_ARG_ENABLE(net-redirections, AC_HELP_STRING([--enable-net-redirections], [enable /dev/tcp/host/port redirection]), opt_net_redirs=$enableval)
-AC_ARG_ENABLE(process-substitution, AC_HELP_STRING([--enable-process-substitution], [enable process substitution]), opt_process_subst=$enableval)
-AC_ARG_ENABLE(progcomp, AC_HELP_STRING([--enable-progcomp], [enable programmable completion and the complete builtin]), opt_progcomp=$enableval)
-AC_ARG_ENABLE(prompt-string-decoding, AC_HELP_STRING([--enable-prompt-string-decoding], [turn on escape character decoding in prompts]), opt_prompt_decoding=$enableval)
-AC_ARG_ENABLE(readline, AC_HELP_STRING([--enable-readline], [turn on command line editing]), opt_readline=$enableval)
-AC_ARG_ENABLE(restricted, AC_HELP_STRING([--enable-restricted], [enable a restricted shell]), opt_restricted=$enableval)
-AC_ARG_ENABLE(select, AC_HELP_STRING([--enable-select], [include select command]), opt_select=$enableval)
-AC_ARG_ENABLE(separate-helpfiles, AC_HELP_STRING([--enable-separate-helpfiles], [use external files for help builtin documentation]), opt_separate_help=$enableval)
-AC_ARG_ENABLE(single-help-strings, AC_HELP_STRING([--enable-single-help-strings], [store help documentation as a single string to ease translation]), opt_single_longdoc_strings=$enableval)
-AC_ARG_ENABLE(strict-posix-default, AC_HELP_STRING([--enable-strict-posix-default], [configure bash to be posix-conformant by default]), opt_strict_posix=$enableval)
-AC_ARG_ENABLE(usg-echo-default, AC_HELP_STRING([--enable-usg-echo-default], [a synonym for --enable-xpg-echo-default]), opt_xpg_echo=$enableval)
-AC_ARG_ENABLE(xpg-echo-default, AC_HELP_STRING([--enable-xpg-echo-default], [make the echo builtin expand escape sequences by default]), opt_xpg_echo=$enableval)
+AC_ARG_ENABLE(alias, AS_HELP_STRING([--enable-alias], [enable shell aliases]), opt_alias=$enableval)
+AC_ARG_ENABLE(alt-array-implementation, AS_HELP_STRING([--enable-alt-array-implementation], [enable an alternate array implementation that optimizes speed at the cost of space]), opt_alt_array_impl=$enableval)
+AC_ARG_ENABLE(arith-for-command, AS_HELP_STRING([--enable-arith-for-command], [enable arithmetic for command]), opt_arith_for_command=$enableval)
+AC_ARG_ENABLE(array-variables, AS_HELP_STRING([--enable-array-variables], [include shell array variables]), opt_array_variables=$enableval)
+AC_ARG_ENABLE(bang-history, AS_HELP_STRING([--enable-bang-history], [turn on csh-style history substitution]), opt_bang_history=$enableval)
+AC_ARG_ENABLE(brace-expansion, AS_HELP_STRING([--enable-brace-expansion], [include brace expansion]), opt_brace_expansion=$enableval)
+AC_ARG_ENABLE(casemod-attributes, AS_HELP_STRING([--enable-casemod-attributes], [include case-modifying variable attributes]), opt_casemod_attrs=$enableval)
+AC_ARG_ENABLE(casemod-expansions, AS_HELP_STRING([--enable-casemod-expansions], [include case-modifying word expansions]), opt_casemod_expansions=$enableval)
+AC_ARG_ENABLE(command-timing, AS_HELP_STRING([--enable-command-timing], [enable the time reserved word and command timing]), opt_command_timing=$enableval)
+AC_ARG_ENABLE(cond-command, AS_HELP_STRING([--enable-cond-command], [enable the conditional command]), opt_cond_command=$enableval)
+AC_ARG_ENABLE(cond-regexp, AS_HELP_STRING([--enable-cond-regexp], [enable extended regular expression matching in conditional commands]), opt_cond_regexp=$enableval)
+AC_ARG_ENABLE(coprocesses, AS_HELP_STRING([--enable-coprocesses], [enable coprocess support and the coproc reserved word]), opt_coproc=$enableval)
+AC_ARG_ENABLE(debugger, AS_HELP_STRING([--enable-debugger], [enable support for bash debugger]), opt_debugger=$enableval)
+AC_ARG_ENABLE(dev-fd-stat-broken, AS_HELP_STRING([--enable-dev-fd-stat-broken], [enable this option if stat on /dev/fd/N and fstat on file descriptor N don't return the same results]), opt_dev_fd_stat_broken=$enableval)
+AC_ARG_ENABLE(direxpand-default, AS_HELP_STRING([--enable-direxpand-default], [enable the direxpand shell option by default]), opt_dircomplete_expand_default=$enableval)
+AC_ARG_ENABLE(directory-stack, AS_HELP_STRING([--enable-directory-stack], [enable builtins pushd/popd/dirs]), opt_dirstack=$enableval)
+AC_ARG_ENABLE(disabled-builtins, AS_HELP_STRING([--enable-disabled-builtins], [allow disabled builtins to still be invoked]), opt_disabled_builtins=$enableval)
+AC_ARG_ENABLE(dparen-arithmetic, AS_HELP_STRING([--enable-dparen-arithmetic], [include ((...)) command]), opt_dparen_arith=$enableval)
+AC_ARG_ENABLE(extended-glob, AS_HELP_STRING([--enable-extended-glob], [include ksh-style extended pattern matching]), opt_extended_glob=$enableval)
+AC_ARG_ENABLE(extended-glob-default, AS_HELP_STRING([--enable-extended-glob-default], [force extended pattern matching to be enabled by default]), opt_extglob_default=$enableval)
+AC_ARG_ENABLE(function-import, AS_HELP_STRING([--enable-function-import], [allow bash to import exported function definitions by default]), opt_function_import=$enableval)
+AC_ARG_ENABLE(glob-asciiranges-default, AS_HELP_STRING([--enable-glob-asciiranges-default], [force bracket range expressions in pattern matching to use the C locale by default]), opt_globascii_default=$enableval)
+AC_ARG_ENABLE(help-builtin, AS_HELP_STRING([--enable-help-builtin], [include the help builtin]), opt_help=$enableval)
+AC_ARG_ENABLE(history, AS_HELP_STRING([--enable-history], [turn on command history]), opt_history=$enableval)
+AC_ARG_ENABLE(job-control, AS_HELP_STRING([--enable-job-control], [enable job control features]), opt_job_control=$enableval)
+AC_ARG_ENABLE(multibyte, AS_HELP_STRING([--enable-multibyte], [enable multibyte characters if OS supports them]), opt_multibyte=$enableval)
+AC_ARG_ENABLE(net-redirections, AS_HELP_STRING([--enable-net-redirections], [enable /dev/tcp/host/port redirection]), opt_net_redirs=$enableval)
+AC_ARG_ENABLE(process-substitution, AS_HELP_STRING([--enable-process-substitution], [enable process substitution]), opt_process_subst=$enableval)
+AC_ARG_ENABLE(progcomp, AS_HELP_STRING([--enable-progcomp], [enable programmable completion and the complete builtin]), opt_progcomp=$enableval)
+AC_ARG_ENABLE(prompt-string-decoding, AS_HELP_STRING([--enable-prompt-string-decoding], [turn on escape character decoding in prompts]), opt_prompt_decoding=$enableval)
+AC_ARG_ENABLE(readline, AS_HELP_STRING([--enable-readline], [turn on command line editing]), opt_readline=$enableval)
+AC_ARG_ENABLE(restricted, AS_HELP_STRING([--enable-restricted], [enable a restricted shell]), opt_restricted=$enableval)
+AC_ARG_ENABLE(select, AS_HELP_STRING([--enable-select], [include select command]), opt_select=$enableval)
+AC_ARG_ENABLE(separate-helpfiles, AS_HELP_STRING([--enable-separate-helpfiles], [use external files for help builtin documentation]), opt_separate_help=$enableval)
+AC_ARG_ENABLE(single-help-strings, AS_HELP_STRING([--enable-single-help-strings], [store help documentation as a single string to ease translation]), opt_single_longdoc_strings=$enableval)
+AC_ARG_ENABLE(strict-posix-default, AS_HELP_STRING([--enable-strict-posix-default], [configure bash to be posix-conformant by default]), opt_strict_posix=$enableval)
+AC_ARG_ENABLE(translatable-strings, AS_HELP_STRING([--enable-translatable-strings], [include support for $"..." translatable strings]), opt_translatable_strings=$enableval)
+AC_ARG_ENABLE(usg-echo-default, AS_HELP_STRING([--enable-usg-echo-default], [a synonym for --enable-xpg-echo-default]), opt_xpg_echo=$enableval)
+AC_ARG_ENABLE(xpg-echo-default, AS_HELP_STRING([--enable-xpg-echo-default], [make the echo builtin expand escape sequences by default]), opt_xpg_echo=$enableval)
 
 dnl options that alter how bash is compiled and linked
-AC_ARG_ENABLE(mem-scramble, AC_HELP_STRING([--enable-mem-scramble], [scramble memory on calls to malloc and free]), opt_memscramble=$enableval)
-AC_ARG_ENABLE(profiling, AC_HELP_STRING([--enable-profiling], [allow profiling with gprof]), opt_profiling=$enableval)
-AC_ARG_ENABLE(static-link, AC_HELP_STRING([--enable-static-link], [link bash statically, for use as a root shell]), opt_static_link=$enableval)
+AC_ARG_ENABLE(mem-scramble, AS_HELP_STRING([--enable-mem-scramble], [scramble memory on calls to malloc and free]), opt_memscramble=$enableval)
+AC_ARG_ENABLE(profiling, AS_HELP_STRING([--enable-profiling], [allow profiling with gprof]), opt_profiling=$enableval)
+AC_ARG_ENABLE(static-link, AS_HELP_STRING([--enable-static-link], [link bash statically, for use as a root shell]), opt_static_link=$enableval)
 
 dnl So-called `precious' variables
 AC_ARG_VAR([CC_FOR_BUILD], [C compiler used when compiling binaries used only at build time])
@@ -354,6 +362,13 @@ fi
 if test $opt_dev_fd_stat_broken = yes; then
 AC_DEFINE(DEV_FD_STAT_BROKEN)
 fi
+if test $opt_alt_array_impl = yes; then
+AC_DEFINE(ALT_ARRAY_IMPLEMENTATION)
+ARRAY_O=array2.o
+fi
+if test $opt_translatable_strings = yes; then
+AC_DEFINE(TRANSLATABLE_STRINGS)
+fi
 
 if test $opt_memscramble = yes; then
 AC_DEFINE(MEMSCRAMBLE)
@@ -368,7 +383,7 @@ fi
 HELPDIR= HELPDIRDEFINE= HELPINSTALL= HELPFILES_TARGET=
 if test "$opt_separate_help" != no; then
        if test "$opt_separate_help" = "yes" ; then
-               HELPDIR='${datadir}/bash'
+               HELPDIR='${datadir}/bash/helpfiles'
        else
                HELPDIR=$opt_separate_help
        fi
@@ -391,6 +406,8 @@ AC_SUBST(MALLOC_LIBRARY)
 AC_SUBST(MALLOC_LDFLAGS)
 AC_SUBST(MALLOC_DEP)
 
+AC_SUBST(ARRAY_O)
+
 AC_SUBST(htmldir)
 
 AC_SUBST(HELPDIR)
@@ -414,17 +431,16 @@ dnl different environment
 AC_PROG_CC
 
 if test -n "$want_auto_cflags"; then
-       AUTO_CFLAGS="-g ${GCC+-O2}"
-       AUTO_LDFLAGS="-g ${GCC+-O2}"
-       STYLE_CFLAGS="${GCC+-Wno-parentheses} ${GCC+-Wno-format-security}"
+       AUTO_CFLAGS="-g ${GCC:+-O2}"
+       AUTO_LDFLAGS="-g ${GCC:+-O2}"
+#      STYLE_CFLAGS="${GCC:+-Wno-parentheses} ${GCC:+-Wno-format-security} ${GCC:+-Wno-tautological-constant-out-of-range-compare}"
+       STYLE_CFLAGS="${GCC:+-Wno-parentheses} ${GCC:+-Wno-format-security}"
 else
        AUTO_CFLAGS= AUTO_LDFLAGS= STYLE_CFLAGS=
 fi
 
 dnl test for Unix variants
-AC_ISC_POSIX
-AC_MINIX
-
+AC_USE_SYSTEM_EXTENSIONS
 AC_SYS_LARGEFILE
 
 dnl BEGIN changes for cross-building (currently cygwin, minGW, and
@@ -481,7 +497,7 @@ dnl these must come after the test for cc/gcc
 if test "$opt_profiling" = "yes"; then
        PROFILE_FLAGS=-pg
        case "$host_os" in
-       solaris2*|linux*)       ;;
+       solaris2*|linux*|darwin*)       ;;
        *)              opt_static_link=yes ;;
        esac
        DEBUG= MALLOC_DEBUG=
@@ -494,7 +510,7 @@ if test "$opt_static_link" = yes; then
        prefer_static=yes
        prefer_shared=no
        # if we're using gcc, add `-static' to LDFLAGS, except on Solaris >= 2
-       if test -n "$GCC" || test "$ac_cv_prog_gcc" = "yes"; then
+       if test "$GCC" = "yes"; then
                STATIC_LD="-static" 
                case "$host_os" in
                solaris2*|linux*)       ;;
@@ -516,9 +532,12 @@ if test "X$cross_compiling" = "Xno"; then
        fi
        # CFLAGS set above to default value if not passed in environment
        if test -n "$want_auto_cflags" ; then
-               CFLAGS_FOR_BUILD="${CFLAGS} ${STYLE_CFLAGS}"
+               CFLAGS_FOR_BUILD="${CFLAGS}"
+               BASE_CFLAGS_FOR_BUILD="${CFLAGS}"
        else
+               # passed in environment
                CFLAGS_FOR_BUILD=${CFLAGS-'$(CFLAGS)'}
+               BASE_CFLAGS_FOR_BUILD=${CFLAGS-'$(CFLAGS)'}
        fi
        LIBS_FOR_BUILD=${LIBS_FOR_BUILD-'$(LIBS)'}
 else
@@ -526,6 +545,7 @@ else
        CPPFLAGS_FOR_BUILD=${CPPFLAGS_FOR_BUILD-""}
        LDFLAGS_FOR_BUILD=${LDFLAGS_FOR_BUILD-""}
        CFLAGS_FOR_BUILD=${CFLAGS_FOR_BUILD="-g"}
+       BASE_CFLAGS_FOR_BUILD=${BASE_CFLAGS_FOR_BUILD="-g"}
        LIBS_FOR_BUILD=${LIBS_FOR_BUILD-""}
 fi
 
@@ -536,6 +556,8 @@ AC_SUBST(STATIC_LD)
 
 AC_SUBST(CC_FOR_BUILD)
 AC_SUBST(CFLAGS_FOR_BUILD)
+AC_SUBST(BASE_CFLAGS_FOR_BUILD)
+AC_SUBST(STYLE_CFLAGS)
 AC_SUBST(CPPFLAGS_FOR_BUILD)
 AC_SUBST(LDFLAGS_FOR_BUILD)
 AC_SUBST(LIBS_FOR_BUILD)
@@ -691,6 +713,8 @@ AC_SUBST(SIZE)
 m4_include([m4/stat-time.m4])
 m4_include([m4/timespec.m4])
 
+m4_include([m4/strtoimax.m4])
+
 dnl include files for gettext
 
 m4_include([m4/codeset.m4])
@@ -729,26 +753,22 @@ m4_include([m4/wchar_t.m4])
 m4_include([m4/wint_t.m4])
 m4_include([m4/xsize.m4])
 
-dnl Turn on any extensions available in the GNU C library.
-AC_DEFINE(_GNU_SOURCE, 1)
-
 dnl C compiler characteristics
 AC_C_CONST
 AC_C_INLINE
 AC_C_BIGENDIAN
 AC_C_STRINGIZE
-AC_C_LONG_DOUBLE
+AC_TYPE_LONG_DOUBLE
 AC_C_PROTOTYPES
 AC_C_CHAR_UNSIGNED
 AC_C_VOLATILE
 AC_C_RESTRICT
 
 dnl initialize GNU gettext
-AM_GNU_GETTEXT([no-libtool], [need-ngettext], [lib/intl])
+BASH_GNU_GETTEXT([no-libtool], [need-ngettext], [lib/intl])
 
 dnl header files
 AC_HEADER_DIRENT
-AC_HEADER_TIME
 AC_HEADER_MAJOR
 
 BASH_HEADER_INTTYPES
@@ -782,7 +802,6 @@ dnl special checks for libc functions
 AC_FUNC_ALLOCA
 AC_FUNC_CHOWN
 AC_FUNC_GETPGRP
-AC_FUNC_SETVBUF_REVERSED
 AC_FUNC_VPRINTF
 AC_FUNC_STRCOLL
 
@@ -813,15 +832,12 @@ if test "$ac_cv_func_vprintf" = no && test "$ac_cv_func__doprnt" = "yes"; then
   AC_LIBOBJ(vprint)
 fi
 
-dnl signal stuff
-AC_TYPE_SIGNAL
-
 dnl checks for certain version-specific system calls and libc functions
 AC_CHECK_FUNC(__setostype, AC_DEFINE(HAVE_SETOSTYPE))
 AC_CHECK_FUNC(wait3, AC_DEFINE(HAVE_WAIT3))
 
 dnl checks for missing libc functions
-AC_CHECK_FUNC(mkfifo,AC_DEFINE(HAVE_MKFIFO),AC_DEFINE(MKFIFO_MISSING))
+AC_CHECK_FUNC(mkfifo, AC_DEFINE(HAVE_MKFIFO), AC_DEFINE(MKFIFO_MISSING))
 
 dnl checks for system calls
 AC_CHECK_FUNCS(dup2 eaccess fcntl getdtablesize getentropy getgroups \
@@ -845,7 +861,7 @@ AC_CHECK_FUNCS(arc4random)
 
 AC_REPLACE_FUNCS(getcwd memset)
 AC_REPLACE_FUNCS(strcasecmp strcasestr strerror strftime strnlen strpbrk strstr)
-AC_REPLACE_FUNCS(strtod strtol strtoul strtoll strtoull strtoimax strtoumax)
+AC_REPLACE_FUNCS(strtod strtol strtoul strtoll strtoull strtoumax)
 AC_REPLACE_FUNCS(dprintf)
 AC_REPLACE_FUNCS(strchrnul)
 AC_REPLACE_FUNCS(strdup)
@@ -857,8 +873,6 @@ AC_CHECK_DECLS([confstr])
 AC_CHECK_DECLS([printf])
 AC_CHECK_DECLS([sbrk])
 AC_CHECK_DECLS([setregid])
-dnl AC_CHECK_DECLS[(setresuid])
-dnl AC_CHECK_DECLS[(setresgid])
 AC_CHECK_DECLS([strcpy])
 AC_CHECK_DECLS([strsignal])
 
@@ -868,12 +882,13 @@ dnl Extra test to detect the horribly broken HP/UX 11.00 strtold(3)
 AC_CHECK_DECLS([strtold], [
     AC_MSG_CHECKING([for broken strtold])
     AC_CACHE_VAL(bash_cv_strtold_broken,
-       [AC_TRY_COMPILE(
-           [#include <stdlib.h>],
-           [long double r; char *foo, bar; r = strtold(foo, &bar);],
-           bash_cv_strtold_broken=no, bash_cv_strtold_broken=yes,
-           [AC_MSG_WARN(cannot check for broken strtold if cross-compiling, defaulting to no)])
-       ]
+       [AC_COMPILE_IFELSE(
+               [AC_LANG_PROGRAM(
+               [[#include <stdlib.h>]],
+               [[long double r; char *foo, bar; r = strtold(foo, &bar);]]
+       )],
+       [bash_cv_strtold_broken=no],[bash_cv_strtold_broken=yes])
+        ]
     )
     AC_MSG_RESULT($bash_cv_strtold_broken)
     if test "$bash_cv_strtold_broken" = "yes" ; then
@@ -881,18 +896,17 @@ AC_CHECK_DECLS([strtold], [
     fi
 ])
 
-BASH_CHECK_DECL(strtoimax)
-BASH_CHECK_DECL(strtol)
-BASH_CHECK_DECL(strtoll)
-BASH_CHECK_DECL(strtoul)
-BASH_CHECK_DECL(strtoull)
-BASH_CHECK_DECL(strtoumax)
+AC_CHECK_DECLS(strtol)
+AC_CHECK_DECLS(strtoll)
+AC_CHECK_DECLS(strtoul)
+AC_CHECK_DECLS(strtoull)
+AC_CHECK_DECLS(strtoumax)
 
 AC_FUNC_MKTIME
 
 dnl
 dnl Checks for lib/intl and related code (uses some of the output from
-dnl AM_GNU_GETTEXT)
+dnl BASH_GNU_GETTEXT)
 dnl
 
 AC_CHECK_HEADERS([argz.h errno.h fcntl.h malloc.h stdio_ext.h])
@@ -924,9 +938,6 @@ AC_CHECK_LIB(dl, dlopen)
 AC_CHECK_FUNCS(dlopen dlclose dlsym)
 fi
 
-dnl this defines HAVE_DECL_SYS_SIGLIST
-AC_DECL_SYS_SIGLIST
-
 dnl network functions -- check for inet_aton again
 if test "$ac_cv_func_inet_aton" != 'yes'; then
 BASH_FUNC_INET_ATON
@@ -959,10 +970,9 @@ AC_TYPE_UINTPTR_T
 AC_CHECK_TYPE(ssize_t, int)
 AC_CHECK_TYPE(time_t, long)
 
-BASH_TYPE_LONG_LONG
-BASH_TYPE_UNSIGNED_LONG_LONG
+AC_TYPE_LONG_LONG_INT
+AC_TYPE_UNSIGNED_LONG_LONG_INT
 
-AC_TYPE_SIGNAL
 BASH_TYPE_SIG_ATOMIC_T
 
 AC_CHECK_SIZEOF(char, 1)
@@ -970,6 +980,7 @@ AC_CHECK_SIZEOF(short, 2)
 AC_CHECK_SIZEOF(int, 4)
 AC_CHECK_SIZEOF(long, 4)
 AC_CHECK_SIZEOF(char *, 4)
+AC_CHECK_SIZEOF(size_t, 4)
 AC_CHECK_SIZEOF(double, 8)
 AC_CHECK_SIZEOF([long long], 8)
 
@@ -999,7 +1010,6 @@ BASH_FUNC_LSTAT
 fi
 
 dnl behavior of system calls and library functions
-BASH_FUNC_CTYPE_NONASCII
 BASH_FUNC_DUP2_CLOEXEC_CHECK
 BASH_SYS_PGRP_SYNC
 BASH_SYS_SIGNAL_VINTAGE
@@ -1010,18 +1020,18 @@ BASH_SYS_SIGLIST
 BASH_UNDER_SYS_SIGLIST
 
 dnl various system types
-BASH_TYPE_SIGHANDLER
 BASH_CHECK_TYPE(clock_t, [#include <sys/times.h>], long)
 BASH_CHECK_TYPE(sigset_t, [#include <signal.h>], int)
-BASH_CHECK_TYPE(sig_atomic_t, [#include <signal.h>], int)
-BASH_CHECK_TYPE(quad_t, , long, HAVE_QUAD_T)
-BASH_CHECK_TYPE(intmax_t, , $bash_cv_type_long_long)
-BASH_CHECK_TYPE(uintmax_t, , $bash_cv_type_unsigned_long_long)
 if test "$ac_cv_header_sys_socket_h" = "yes"; then
 BASH_CHECK_TYPE(socklen_t, [#include <sys/socket.h>], [unsigned int], HAVE_SOCKLEN_T)
 fi
+
+AC_CHECK_TYPE(quad_t, AC_DEFINE([HAVE_QUAD_T], [1]), [], )
 BASH_TYPE_RLIMIT
 
+AC_TYPE_INTMAX_T
+AC_TYPE_UINTMAX_T
+
 AC_CHECK_SIZEOF(intmax_t, 8)
 
 dnl presence and contents of structures used by system calls
@@ -1059,6 +1069,8 @@ BASH_FUNC_STRCOLL
 BASH_FUNC_SNPRINTF
 BASH_FUNC_VSNPRINTF
 
+BASH_FUNC_STRTOIMAX
+
 dnl If putenv or unsetenv is not present, set the right define so the
 dnl prototype and declaration in lib/sh/getenv.c will be standard-conformant
 
@@ -1164,7 +1176,7 @@ linux*)           LOCAL_LDFLAGS=-rdynamic          # allow dynamic loading
                *)      AC_DEFINE(PGRP_PIPE) ;;
                esac ;;
 netbsd*|openbsd*)      LOCAL_CFLAGS="-DDEV_FD_STAT_BROKEN" ;;
-freebsd*)      LOCAL_CFLAGS='-DHEREDOC_PIPESIZE=4096' ;;
+freebsd*|midnightbsd*) LOCAL_CFLAGS='-DHEREDOC_PIPESIZE=4096' ;;
 *qnx[[67]]*)   LOCAL_LIBS="-lncurses" ;;
 *qnx*)         LOCAL_CFLAGS="-Dqnx -F -3s" LOCAL_LDFLAGS="-3s" LOCAL_LIBS="-lunix -lncurses" ;;
 powerux*)      LOCAL_LIBS="-lgen" ;;
@@ -1190,6 +1202,7 @@ freebsd[[3-9]]*)
                fi ;;
 freebsdelf*)   LOCAL_LDFLAGS=-rdynamic ;;      # allow dynamic loading
 dragonfly*)    LOCAL_LDFLAGS=-rdynamic ;;      # allow dynamic loading
+midnightbsd*)  LOCAL_LDFLAGS=-rdynamic ;;      # allow dynamic loading
 esac
 
 case "$host_cpu" in
@@ -1206,7 +1219,7 @@ mips-pyramid-sysv4)       LOCAL_CFLAGS=-Xa ;;
 esac
 
 # turn off paren warnings in gcc
-CFLAGS="$CFLAGS ${STYLE_CFLAGS}"
+#CFLAGS="$CFLAGS ${STYLE_CFLAGS}"
 
 #
 # Shared object configuration section.  These values are generated by
@@ -1297,14 +1310,17 @@ AC_SUBST(LOCAL_DEFS)
 #AC_SUBST(ALLOCA_SOURCE)
 #AC_SUBST(ALLOCA_OBJECT)
 
-AC_OUTPUT([Makefile builtins/Makefile lib/readline/Makefile lib/glob/Makefile \
-         lib/intl/Makefile \
-         lib/malloc/Makefile lib/sh/Makefile lib/termcap/Makefile \
-         lib/tilde/Makefile doc/Makefile support/Makefile po/Makefile.in \
-         examples/loadables/Makefile examples/loadables/Makefile.inc \
-         examples/loadables/perl/Makefile \
-         support/bash.pc support/bashbug.sh],
-[
-# Makefile uses this timestamp file to record whether config.h is up to date.
-echo timestamp > stamp-h
-])
+AC_CONFIG_FILES([Makefile builtins/Makefile lib/readline/Makefile \
+                lib/glob/Makefile lib/intl/Makefile \
+                lib/malloc/Makefile lib/sh/Makefile lib/termcap/Makefile \
+                lib/tilde/Makefile doc/Makefile support/Makefile \
+                po/Makefile.in examples/loadables/Makefile \
+                examples/loadables/Makefile.inc \
+                examples/loadables/Makefile.sample \
+                examples/loadables/perl/Makefile \
+                support/bash.pc support/bashbug.sh])
+
+dnl Makefile uses this timestamp file to record whether config.h is up to date.
+AC_CONFIG_COMMANDS([stamp-h], [echo timestamp > stamp-h])
+
+AC_OUTPUT
diff --git a/doc/FAQ b/doc/FAQ
index 104d0bc1c322e55191b6d430af96cde3fdc2a073..44be0a6d9d1463854517cf45d56243aae9b508c6 100644 (file)
--- a/doc/FAQ
+++ b/doc/FAQ
@@ -1,4 +1,6 @@
-This is the Bash FAQ, version 4.15, for Bash version 5.0.
+This is the Bash FAQ, version 4.15, for Bash version 5.1.
+
+[This document is no longer maintained.]
 
 This document contains a set of frequently-asked questions concerning
 Bash, the GNU Bourne-Again Shell.  Bash is a freely-available command
@@ -631,7 +633,7 @@ o   There is a new configuration option (in config-top.h) that forces bash to
 o   A new variable $BASHOPTS to export shell options settable using `shopt' to
     child processes.
 
-o   There is a new confgure option that forces the extglob option to be
+o   There is a new configure option that forces the extglob option to be
     enabled by default.
 
 o   New variable $BASH_XTRACEFD; when set to an integer bash will write xtrace
index 12068fb58e7bcba674853c279a4ba01f89dcb4d9..8bf775e14a208c9809dfb3fe8533e6333fc68e63 100644 (file)
@@ -74,7 +74,6 @@ TEXI2DVI    = ${SUPPORT_SRCDIR}/texi2dvi
 TEXI2HTML   = ${SUPPORT_SRCDIR}/texi2html
 MAN2HTML    = ${BUILD_DIR}/support/man2html
 HTMLPOST    = ${srcdir}/htmlpost.sh
-INFOPOST    = ${srcdir}/infopost.sh
 QUIETPS            = #set this to -q to shut up dvips
 PAPERSIZE   = letter   # change to a4 for A4-size paper
 PSDPI       = 600      # could be 300 if you like
@@ -108,11 +107,11 @@ BASHREF_FILES = $(srcdir)/bashref.texi $(srcdir)/fdl.texi $(srcdir)/version.texi
 
 .1.ps:
        $(RM) $@
-       -${GROFF} -man $< > $@
+       -${GROFF} -I${srcdir} -man $< > $@
 
 .1.0:
        $(RM) $@
-       -${NROFF} -man $< > $@
+       -${NROFF} -I${srcdir} -man $< > $@
 
 .1.html:
        $(RM) $@
@@ -128,11 +127,11 @@ BASHREF_FILES = $(srcdir)/bashref.texi $(srcdir)/fdl.texi $(srcdir)/version.texi
 
 .3.ps:
        $(RM) $@
-       -${GROFF} -man $< > $@
+       -${GROFF} -I${srcdir} -man $< > $@
 
 .3.0:
        $(RM) $@
-       -${NROFF} -man $< > $@
+       -${NROFF} -I${srcdir} -man $< > $@
 
 .3.html:
        $(RM) $@
@@ -173,23 +172,26 @@ 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.info
-       ${SHELL} ${INFOPOST} < $(srcdir)/bashref.info > $@ ; \
+bash.info: $(BASHREF_FILES) $(HSUSER) $(RLUSER)
+       $(RM) $@
+       $(MAKEINFO) -o $@ --no-split -I$(TEXINPUTDIR) $(srcdir)/bashref.texi
 
 bash.txt: bash.1
 bash.ps: bash.1
@@ -324,18 +326,18 @@ faq.mail: FAQ faq.headers.mail faq.version
        cat faq.headers.mail faq.version FAQ > $@
 
 inst:  bashref.texi
-       $(SHELL) ./mkinstall
-       cmp -s INSTALL ../INSTALL || mv INSTALL ../INSTALL
+       $(SHELL) ${srcdir}/mkinstall -t ${topdir} -s ${srcdir}
+       cmp -s INSTALL ${topdir}/INSTALL || mv INSTALL ${topdir}/INSTALL
        $(RM) INSTALL
 
 posix: bashref.texi
-       $(SHELL) ./mkposix
-       cmp -s POSIX ../POSIX || mv POSIX ../POSIX
+       $(SHELL) ${srcdir}/mkposix -t ${topdir} -s ${srcdir}
+       cmp -s POSIX ${topdir}/POSIX || mv POSIX ${topdir}/POSIX
        $(RM) POSIX
 
 rbash: bashref.texi
-       $(SHELL) ./mkrbash
-       cmp -s RBASH ../RBASH || mv RBASH ../RBASH
+       $(SHELL) ${srcdir}/mkrbash -t ${topdir} -s ${srcdir}
+       cmp -s RBASH ${topdir}/RBASH || mv RBASH ${topdir}/RBASH
        $(RM) RBASH
 
 xdist: everything inst posix rbash
index c19ff924856b4b4838a37a5b35aa294f76e8d6b3..e43ca9f3918c865b4131e804faa71dcc389642b5 100644 (file)
@@ -531,7 +531,7 @@ _\bc_\bo_\bm_\bm_\ba_\bn_\bd  _\bh_\bi_\bs_\bt_\bo_\br_\by)  is  provided  jointly  by  Bash
 readline  library.   Bash  provides  variables   ($HISTFILE,
 $HISTSIZE, and $HISTCONTROL) and the _\bh_\bi_\bs_\bt_\bo_\br_\by and _\bf_\bc builtins
 to manipulate the history  list.   The  value  of  $_\bH_\bI_\bS_\bT_\bF_\bI_\bL_\bE
-specifes  the  file where Bash writes the command history on
+specifies the  file where Bash writes the command history on
 exit and reads it on startup.  $_\bH_\bI_\bS_\bT_\bS_\bI_\bZ_\bE is  used  to  limit
 the  number  of commands saved in the history.  $_\bH_\bI_\bS_\bT_\bC_\bO_\bN_\bT_\bR_\bO_\bL
 provides a crude form of control  over  which  commands  are
@@ -1107,5 +1107,3 @@ Inc.
 
 
                       October 28, 1994
-
-
index 9160b097b001463692ca8a7072b73db307031b6a..1580b77aa3642fc454403b1420af6b1ed765950e 100644 (file)
@@ -9,7 +9,7 @@ S\bSY\bYN\bNO\bOP\bPS\bSI\bIS\bS
        b\bba\bas\bsh\bh [options] [command_string | file]
 
 C\bCO\bOP\bPY\bYR\bRI\bIG\bGH\bHT\bT
-       Bash is Copyright (C) 1989-2020 by the Free Software Foundation, Inc.
+       Bash is Copyright (C) 1989-2022 by the Free Software Foundation, Inc.
 
 D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
        B\bBa\bas\bsh\bh  is  an  s\bsh\bh-compatible  command language interpreter that executes
@@ -131,7 +131,7 @@ I\bIN\bNV\bVO\bOC\bCA\bAT\bTI\bIO\bON\bN
        one started with the -\b--\b-l\blo\bog\bgi\bin\bn option.
 
        An _\bi_\bn_\bt_\be_\br_\ba_\bc_\bt_\bi_\bv_\be shell is one started without non-option  arguments  (un-
-       less  -\b-s\bs  is  specified) and without the -\b-c\bc option whose standard input
+       less  -\b-s\bs  is specified) and without the -\b-c\bc option, whose standard input
        and error are both connected to terminals (as determined by _\bi_\bs_\ba_\bt_\bt_\by(3)),
        or  one  started  with  the -\b-i\bi option.  P\bPS\bS1\b1 is set and $\b$-\b- includes i\bi if
        b\bba\bas\bsh\bh is interactive, allowing a shell script or a startup file to  test
@@ -191,14 +191,14 @@ I\bIN\bNV\bVO\bOC\bCA\bAT\bTI\bIO\bON\bN
        startup files are read.
 
        B\bBa\bas\bsh\bh attempts to determine when it is being run with its standard input
-       connected to a network connection, as when executed by the remote shell
-       daemon, usually _\br_\bs_\bh_\bd, or the secure shell daemon _\bs_\bs_\bh_\bd.  If b\bba\bas\bsh\bh  deter-
-       mines  it  is being run in this fashion, it reads and executes commands
-       from _\b~_\b/_\b._\bb_\ba_\bs_\bh_\br_\bc, if that file exists and is readable.  It  will  not  do
-       this  if  invoked as s\bsh\bh.  The -\b--\b-n\bno\bor\brc\bc option may be used to inhibit this
-       behavior, and the -\b--\b-r\brc\bcf\bfi\bil\ble\be option may be used to force another file  to
-       be  read,  but  neither  _\br_\bs_\bh_\bd  nor _\bs_\bs_\bh_\bd generally invoke the shell with
-       those options or allow them to be specified.
+       connected  to  a network connection, as when executed by the historical
+       remote shell daemon, usually _\br_\bs_\bh_\bd, or the secure shell daemon _\bs_\bs_\bh_\bd.  If
+       b\bba\bas\bsh\bh  determines  it is being run non-interactively in this fashion, it
+       reads and executes commands from _\b~_\b/_\b._\bb_\ba_\bs_\bh_\br_\bc, if that file exists and  is
+       readable.  It will not do this if invoked as s\bsh\bh.  The -\b--\b-n\bno\bor\brc\bc option may
+       be used to inhibit this behavior, and the -\b--\b-r\brc\bcf\bfi\bil\ble\be option may  be  used
+       to  force  another file to be read, but neither _\br_\bs_\bh_\bd nor _\bs_\bs_\bh_\bd 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 -\b-p\bp option is not supplied, no startup
@@ -237,59 +237,63 @@ R\bRE\bES\bSE\bER\bRV\bVE\bED\bD W\bWO\bOR\bRD\bDS\bS
        t\bth\bhe\ben\bn u\bun\bnt\bti\bil\bl w\bwh\bhi\bil\ble\be {\b{ }\b} t\bti\bim\bme\be [\b[[\b[ ]\b]]\b]
 
 S\bSH\bHE\bEL\bLL\bL G\bGR\bRA\bAM\bMM\bMA\bAR\bR
+       This  section  describes  the syntax of the various forms of shell com-
+       mands.
+
    S\bSi\bim\bmp\bpl\ble\be C\bCo\bom\bmm\bma\ban\bnd\bds\bs
-       A  _\bs_\bi_\bm_\bp_\bl_\be  _\bc_\bo_\bm_\bm_\ba_\bn_\bd  is a sequence of optional variable assignments fol-
-       lowed by b\bbl\bla\ban\bnk\bk-separated words and redirections, and  terminated  by  a
+       A _\bs_\bi_\bm_\bp_\bl_\be _\bc_\bo_\bm_\bm_\ba_\bn_\bd is a sequence of optional  variable  assignments  fol-
+       lowed  by  b\bbl\bla\ban\bnk\bk-separated  words and redirections, and terminated by a
        _\bc_\bo_\bn_\bt_\br_\bo_\bl _\bo_\bp_\be_\br_\ba_\bt_\bo_\br.  The first word specifies the command to be executed,
-       and is passed as argument zero.  The remaining words are passed as  ar-
+       and  is passed as argument zero.  The remaining words are passed as ar-
        guments to the invoked command.
 
-       The  return  value  of a _\bs_\bi_\bm_\bp_\bl_\be _\bc_\bo_\bm_\bm_\ba_\bn_\bd is its exit status, or 128+_\bn if
+       The return value of a _\bs_\bi_\bm_\bp_\bl_\be _\bc_\bo_\bm_\bm_\ba_\bn_\bd is its exit status,  or  128+_\b if
        the command is terminated by signal _\bn.
 
    P\bPi\bip\bpe\bel\bli\bin\bne\bes\bs
-       A _\bp_\bi_\bp_\be_\bl_\bi_\bn_\be is a sequence of one or more commands separated  by  one  of
+       A  _\bp_\bi_\bp_\be_\bl_\bi_\bn_\be  is  a sequence of one or more commands separated by one of
        the control operators |\b| or |\b|&\b&.  The format for a pipeline is:
 
-              [t\bti\bim\bme\be [-\b-p\bp]] [ ! ] _\bc_\bo_\bm_\bm_\ba_\bn_\bd [ [|\b|||\b|&\b&] _\bc_\bo_\bm_\bm_\ba_\bn_\bd_\b2 ... ]
+              [t\bti\bim\bme\be [-\b-p\bp]] [ ! ] _\bc_\bo_\bm_\bm_\ba_\bn_\bd_\b1 [ [|\b|||\b|&\b&] _\bc_\bo_\bm_\bm_\ba_\bn_\bd_\b2 ... ]
 
-       The  standard output of _\bc_\bo_\bm_\bm_\ba_\bn_\bd is connected via a pipe to the standard
-       input of _\bc_\bo_\bm_\bm_\ba_\bn_\bd_\b2.  This connection is performed  before  any  redirec-
-       tions specified by the command (see R\bRE\bED\bDI\bIR\bRE\bEC\bCT\bTI\bIO\bON\bN below).  If |\b|&\b& is used,
-       _\bc_\bo_\bm_\bm_\ba_\bn_\bd's standard error, in addition to its standard output,  is  con-
-       nected  to  _\bc_\bo_\bm_\bm_\ba_\bn_\bd_\b2's standard input through the pipe; it is shorthand
-       for 2\b2>\b>&\b&1\b1 |\b|.  This implicit redirection of the  standard  error  to  the
-       standard  output  is  performed after any redirections specified by the
-       command.
+       The standard output of _\bc_\bo_\bm_\bm_\ba_\bn_\bd_\b1 is connected via a pipe to the standard
+       input  of  _\bc_\bo_\bm_\bm_\ba_\bn_\bd_\b2.   This connection is performed before any redirec-
+       tions specified by the _\bc_\bo_\bm_\bm_\ba_\bn_\bd_\b1(see R\bRE\bED\bDI\bIR\bRE\bEC\bCT\bTI\bIO\bON\bN below).  If |\b|&\b& is used,
+       _\bc_\bo_\bm_\bm_\ba_\bn_\bd_\b1's  standard error, in addition to its standard output, is con-
+       nected to _\bc_\bo_\bm_\bm_\ba_\bn_\bd_\b2's standard input through the pipe; it  is  shorthand
+       for  2\b2>\b>&\b&1\b1  |\b|.   This  implicit redirection of the standard error to the
+       standard output is performed after any redirections specified  by  _\bc_\bo_\bm_\b-
+       _\bm_\ba_\bn_\bd_\b1.
 
        The return status of a pipeline is the exit status of the last command,
-       unless  the  p\bpi\bip\bpe\bef\bfa\bai\bil\bl  option  is enabled.  If p\bpi\bip\bpe\bef\bfa\bai\bil\bl 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-
+       unless the p\bpi\bip\bpe\bef\bfa\bai\bil\bl option is enabled.  If  p\bpi\bip\bpe\bef\bfa\bai\bil\bl  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 !\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
+       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  t\bti\bim\bme\be 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\bp option changes the output format to that
-       specified by POSIX.  When the shell is in _\bp_\bo_\bs_\bi_\bx _\bm_\bo_\bd_\be, it does not  rec-
-       ognize  t\bti\bim\bme\be  as  a  reserved word if the next token begins with a `-'.
-       The T\bTI\bIM\bME\bEF\bFO\bOR\bRM\bMA\bAT\bT variable may be set to a format  string  that  specifies
-       how  the timing information should be displayed; see the description of
+       If the t\bti\bim\bme\be 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\bp option changes the output format  to  that
+       specified  by POSIX.  When the shell is in _\bp_\bo_\bs_\bi_\bx _\bm_\bo_\bd_\be, it does not rec-
+       ognize t\bti\bim\bme\be as a reserved word if the next token  begins  with  a  `-'.
+       The  T\bTI\bIM\bME\bEF\bFO\bOR\bRM\bMA\bAT\bT  variable  may be set to a format string that specifies
+       how the timing information should be displayed; see the description  of
        T\bTI\bIM\bME\bEF\bFO\bOR\bRM\bMA\bAT\bT under S\bSh\bhe\bel\bll\bl V\bVa\bar\bri\bia\bab\bbl\ble\bes\bs below.
 
        When the shell is in _\bp_\bo_\bs_\bi_\bx _\bm_\bo_\bd_\be, t\bti\bim\bme\be 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 T\bTI\bIM\bME\bEF\bFO\bOR\bRM\bMA\bAT\bT variable may be used  to
+       this case, the shell displays the total user and system  time  consumed
+       by  the shell and its children.  The T\bTI\bIM\bME\bEF\bFO\bOR\bRM\bMA\bAT\bT variable may be used to
        specify the format of the time information.
 
-       Each  command in a pipeline is executed as a separate process (i.e., in
-       a subshell).  See C\bCO\bOM\bMM\bMA\bAN\bND\bD E\bEX\bXE\bEC\bCU\bUT\bTI\bIO\bON\bN E\bEN\bNV\bVI\bIR\bRO\bON\bNM\bME\bEN\bNT\bT for a description of  a
-       subshell  environment.   If  the  l\bla\bas\bst\btp\bpi\bip\bpe\be  option is enabled using the
-       s\bsh\bho\bop\bpt\bt builtin (see the description of s\bsh\bho\bop\bpt\bt below), the last element of
-       a pipeline may be run by the shell process.
+       Each command in a multi-command pipeline, where pipes are  created,  is
+       executed  in a _\bs_\bu_\bb_\bs_\bh_\be_\bl_\bl, which is a separate process.  See C\bCO\bOM\bMM\bMA\bAN\bND\bD E\bEX\bXE\bE-\b-
+       C\bCU\bUT\bTI\bIO\bON\bN E\bEN\bNV\bVI\bIR\bRO\bON\bNM\bME\bEN\bNT\bT for a description of subshells and a subshell  envi-
+       ronment.   If  the  l\bla\bas\bst\btp\bpi\bip\bpe\be  option is enabled using the s\bsh\bho\bop\bpt\bt builtin
+       (see the description of s\bsh\bho\bop\bpt\bt below), the last element  of  a  pipeline
+       may be run by the shell process when job control is not active.
 
    L\bLi\bis\bst\bts\bs
        A  _\bl_\bi_\bs_\bt  is a sequence of one or more pipelines separated by one of the
@@ -333,11 +337,11 @@ S\bSH\bHE\bEL\bLL\bL G\bGR\bRA\bAM\bMM\bMA\bAR\bR
        one or more newlines, and may be followed by a newline in  place  of  a
        semicolon.
 
-       (_\bl_\bi_\bs_\bt) _\bl_\bi_\bs_\bt  is  executed in a subshell environment (see C\bCO\bOM\bMM\bMA\bAN\bND\bD E\bEX\bXE\bEC\bCU\bU-\b-
-              T\bTI\bIO\bON\bN E\bEN\bNV\bVI\bIR\bRO\bON\bNM\bME\bEN\bNT\bT below).  Variable assignments and builtin  com-
-              mands  that  affect the shell's environment do not remain in ef-
-              fect after the command completes.  The return status is the exit
-              status of _\bl_\bi_\bs_\bt.
+       (_\bl_\bi_\bs_\bt) _\bl_\bi_\bs_\bt  is  executed in a subshell (see C\bCO\bOM\bMM\bMA\bAN\bND\bD E\bEX\bXE\bEC\bCU\bUT\bTI\bIO\bON\bN E\bEN\bNV\bVI\bIR\bRO\bON\bN-\b-
+              M\bME\bEN\bNT\bT 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 _\bl_\bi_\bs_\bt.
 
        { _\bl_\bi_\bs_\bt; }
               _\bl_\bi_\bs_\bt  is simply executed in the current shell environment.  _\bl_\bi_\bs_\bt
@@ -353,66 +357,73 @@ S\bSH\bHE\bEL\bLL\bL G\bGR\bRA\bAM\bMM\bMA\bAR\bR
               The _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn is evaluated according to the rules described be-
               low under A\bAR\bRI\bIT\bTH\bHM\bME\bET\bTI\bIC\bC E\bEV\bVA\bAL\bLU\bUA\bAT\bTI\bIO\bON\bN.  If the value of the expression
               is non-zero, the return status is 0; otherwise the return status
-              is 1.  This is exactly equivalent to l\ble\bet\bt "\b"_\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn"\b".
+              is  1.   The  _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn  undergoes the same expansions as if it
+              were within double quotes, but double quote  characters  in  _\be_\bx_\b-
+              _\bp_\br_\be_\bs_\bs_\bi_\bo_\bn are not treated specially and are removed.
 
        [\b[[\b[ _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn ]\b]]\b]
               Return  a  status  of  0 or 1 depending on the evaluation of the
               conditional expression _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn.  Expressions are composed  of
               the  primaries  described  below  under C\bCO\bON\bND\bDI\bIT\bTI\bIO\bON\bNA\bAL\bL E\bEX\bXP\bPR\bRE\bES\bSS\bSI\bIO\bON\bNS\bS.
-              Word splitting and pathname expansion are not performed  on  the
-              words  between  the  [\b[[\b[  and  ]\b]]\b]; tilde expansion, parameter and
-              variable expansion, arithmetic expansion, command  substitution,
-              process  substitution,  and quote removal are performed.  Condi-
-              tional operators such as -\b-f\bf must be unquoted to be recognized as
-              primaries.
-
-              When  used with [\b[[\b[, the <\b< and >\b> operators sort lexicographically
+              The words between the [\b[[\b[ and ]\b]]\b] 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 -\b-f\bf must
+              be unquoted to be recognized as primaries.
+
+              When used with [\b[[\b[, the <\b< and >\b> operators sort  lexicographically
               using the current locale.
 
-              When the =\b==\b= and !\b!=\b= operators are used, the string to  the  right
+              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 P\bPa\bat\btt\bte\ber\brn\bn M\bMa\bat\btc\bch\bhi\bin\bng\bg, as if the e\bex\bxt\bt-\b-
               g\bgl\blo\bob\bb shell option were enabled.  The =\b= operator is equivalent to
-              =\b==\b=.  If the n\bno\boc\bca\bas\bse\bem\bma\bat\btc\bch\bh 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 pat-
-              tern may be quoted to force the quoted portion to be matched  as
+              =\b==\b=.   If  the  n\bno\boc\bca\bas\bse\bem\bma\bat\btc\bch\bh 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  pat-
+              tern  may be quoted to force the quoted portion to be matched as
               a string.
 
-              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
+              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 ex-
-              pression and matched accordingly (using the  POSIX  _\br_\be_\bg_\bc_\bo_\bm_\b and
-              _\br_\be_\bg_\be_\bx_\be_\b interfaces  usually described in _\br_\be_\bg_\be_\bx(3)).  The return
-              value is 0 if the string matches the pattern, and  1  otherwise.
+              pression  and  matched  accordingly (using the POSIX _\br_\be_\bg_\bc_\bo_\bm_\bp and
+              _\br_\be_\bg_\be_\bx_\be_\binterfaces usually described in _\br_\be_\bg_\be_\bx(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 n\bno\boc\bca\bas\bse\bem\bma\bat\btc\bch\bh shell
-              option  is enabled, the match is performed without regard to the
-              case of alphabetic characters.  Any part of the pattern  may  be
-              quoted  to  force  the quoted portion to be matched as a string.
-              Bracket expressions in regular expressions must be treated care-
-              fully,  since  normal quoting characters lose their meanings be-
-              tween brackets.  If the pattern is stored in a  shell  variable,
-              quoting  the  variable expansion forces the entire pattern to be
-              matched as a string.
-
-              The pattern will match if it matches any  part  of  the  string.
-              Anchor  the  pattern using the ^\b^ and $\b$ regular expression opera-
+              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 ^\b^ and $\b$ regular  expression  opera-
               tors to force it to match the entire string.  The array variable
-              B\bBA\bAS\bSH\bH_\b_R\bRE\bEM\bMA\bAT\bTC\bCH\bH  records which parts of the string matched the pat-
-              tern.  The element of B\bBA\bAS\bSH\bH_\b_R\bRE\bEM\bMA\bAT\bTC\bCH\bH 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 B\bBA\bAS\bSH\bH_\b_R\bRE\bEM\bMA\bAT\bTC\bCH\bH in-
-              dices. The element of B\bBA\bAS\bSH\bH_\b_R\bRE\bEM\bMA\bAT\bTC\bCH\bH with index _\bn is  the  portion
-              of the string matching the _\bnth parenthesized subexpression.
-
-              Expressions  may  be  combined  using  the  following operators,
+              B\bBA\bAS\bSH\bH_\b_R\bRE\bEM\bMA\bAT\bTC\bCH\bH records which parts of the string matched the  pat-
+              tern.   The  element  of  B\bBA\bAS\bSH\bH_\b_R\bRE\bEM\bMA\bAT\bTC\bCH\bH 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  B\bBA\bAS\bSH\bH_\b_R\bRE\bEM\bMA\bAT\bTC\bCH\bH  in-
+              dices.  The  element of B\bBA\bAS\bSH\bH_\b_R\bRE\bEM\bMA\bAT\bTC\bCH\bH with index _\bn is the portion
+              of the string  matching  the  _\bnth  parenthesized  subexpression.
+              Bash  sets  B\bBA\bAS\bSH\bH_\b_R\bRE\bEM\bMA\bAT\bTC\bCH\bH  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:
 
               (\b( _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn )\b)
-                     Returns the value of _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn.  This  may  be  used  to
+                     Returns  the  value  of  _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn.  This may be used to
                      override the normal precedence of operators.
               !\b! _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn
                      True if _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn is false.
@@ -422,82 +433,82 @@ S\bSH\bHE\bEL\bLL\bL G\bGR\bRA\bAM\bMM\bMA\bAR\bR
                      True if either _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b1 or _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b2 is true.
 
               The &\b&&\b& and |\b||\b| operators do not evaluate _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b2 if the value
-              of _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b1 is sufficient to determine the  return  value  of
+              of  _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\b1  is  sufficient to determine the return value of
               the entire conditional expression.
 
        f\bfo\bor\br _\bn_\ba_\bm_\be [ [ i\bin\bn [ _\bw_\bo_\br_\bd _\b._\b._\b. ] ] ; ] d\bdo\bo _\bl_\bi_\bs_\bt ; d\bdo\bon\bne\be
               The list of words following i\bin\bn is expanded, generating a list of
               items.  The variable _\bn_\ba_\bm_\be is set to each element of this list in
-              turn,  and  _\bl_\bi_\bs_\bt is executed each time.  If the i\bin\bn _\bw_\bo_\br_\bd is omit-
-              ted, the f\bfo\bor\br command executes _\bl_\bi_\bs_\bt once for each positional  pa-
-              rameter  that  is set (see P\bPA\bAR\bRA\bAM\bME\bET\bTE\bER\bRS\bS below).  The return status
-              is the exit status of the last command that  executes.   If  the
+              turn, and _\bl_\bi_\bs_\bt is executed each time.  If the i\bin\bn _\bw_\bo_\br_\bd  is  omit-
+              ted,  the f\bfo\bor\br command executes _\bl_\bi_\bs_\bt once for each positional pa-
+              rameter that is set (see P\bPA\bAR\bRA\bAM\bME\bET\bTE\bER\bRS\bS below).  The  return  status
+              is  the  exit  status of the last command that executes.  If the
               expansion of the items following i\bin\bn results in an empty list, no
               commands are executed, and the return status is 0.
 
        f\bfo\bor\br (( _\be_\bx_\bp_\br_\b1 ; _\be_\bx_\bp_\br_\b2 ; _\be_\bx_\bp_\br_\b3 )) ; d\bdo\bo _\bl_\bi_\bs_\bt ; d\bdo\bon\bne\be
               First, the arithmetic expression _\be_\bx_\bp_\br_\b1 is evaluated according to
-              the  rules  described  below  under  A\bAR\bRI\bIT\bTH\bHM\bME\bET\bTI\bIC\bC E\bEV\bVA\bAL\bLU\bUA\bAT\bTI\bIO\bON\bN.  The
-              arithmetic expression _\be_\bx_\bp_\br_\b2 is then evaluated  repeatedly  until
-              it  evaluates  to zero.  Each time _\be_\bx_\bp_\br_\b2 evaluates to a non-zero
-              value, _\bl_\bi_\bs_\bt is executed and the arithmetic expression  _\be_\bx_\bp_\br_\b is
-              evaluated.   If  any  expression is omitted, it behaves as if it
+              the rules described  below  under  A\bAR\bRI\bIT\bTH\bHM\bME\bET\bTI\bIC\bC  E\bEV\bVA\bAL\bLU\bUA\bAT\bTI\bIO\bON\bN.   The
+              arithmetic  expression  _\be_\bx_\bp_\br_\b2 is then evaluated repeatedly until
+              it evaluates to zero.  Each time _\be_\bx_\bp_\br_\b2 evaluates to  a  non-zero
+              value,  _\bl_\bi_\bs_\bt  is executed and the arithmetic expression _\be_\bx_\bp_\br_\b3 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 _\bl_\bi_\bs_\bt that is executed, or false if any of the expres-
               sions is invalid.
 
        s\bse\bel\ble\bec\bct\bt _\bn_\ba_\bm_\be [ i\bin\bn _\bw_\bo_\br_\bd ] ; d\bdo\bo _\bl_\bi_\bs_\bt ; d\bdo\bon\bne\be
               The list of words following i\bin\bn is expanded, generating a list of
-              items.  The set of expanded words is printed on the standard er-
-              ror, each preceded by a number.  If the i\bin\bn _\bw_\bo_\br_\bd is omitted,  the
-              positional  parameters  are printed (see P\bPA\bAR\bRA\bAM\bME\bET\bTE\bER\bRS\bS below).  The
-              P\bPS\bS3\b3 prompt is then displayed and a line read from  the  standard
-              input.  If the line consists of a number corresponding to one of
-              the displayed words, then the value of _\bn_\ba_\bm_\be is set to that word.
-              If  the line is empty, the words and prompt are displayed again.
-              If EOF is read, the command completes.   Any  other  value  read
-              causes  _\bn_\ba_\bm_\be  to  be set to null.  The line read is saved in the
-              variable R\bRE\bEP\bPL\bLY\bY.  The _\bl_\bi_\bs_\bt is executed after each selection until
-              a  b\bbr\bre\bea\bak\bk  command is executed.  The exit status of s\bse\bel\ble\bec\bct\bt is the
-              exit status of the last command executed in _\bl_\bi_\bs_\bt, or zero if  no
-              commands were executed.
+              items, and the set of expanded words is printed on the  standard
+              error,  each  preceded  by a number.  If the i\bin\bn _\bw_\bo_\br_\bd is omitted,
+              the positional parameters are printed  (see  P\bPA\bAR\bRA\bAM\bME\bET\bTE\bER\bRS\bS  below).
+              s\bse\bel\ble\bec\bct\bt  then  displays  the P\bPS\bS3\b3 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 _\bn_\ba_\bm_\be is set to
+              that word.  If the line is empty, the words and prompt are  dis-
+              played  again.  If EOF is read, the s\bse\bel\ble\bec\bct\bt command completes and
+              returns 1.  Any other value read causes _\bn_\ba_\bm_\be to be set to  null.
+              The  line read is saved in the variable R\bRE\bEP\bPL\bLY\bY.  The _\bl_\bi_\bs_\bt is exe-
+              cuted after each selection until a b\bbr\bre\bea\bak\bk  command  is  executed.
+              The exit status of s\bse\bel\ble\bec\bct\bt is the exit status of the last command
+              executed in _\bl_\bi_\bs_\bt, or zero if no commands were executed.
 
        c\bca\bas\bse\be _\bw_\bo_\br_\bd i\bin\bn [ [(] _\bp_\ba_\bt_\bt_\be_\br_\bn [ |\b| _\bp_\ba_\bt_\bt_\be_\br_\bn ] ... ) _\bl_\bi_\bs_\bt ;; ] ... e\bes\bsa\bac\bc
               A c\bca\bas\bse\be command first expands _\bw_\bo_\br_\bd, and tries to match it against
-              each _\bp_\ba_\bt_\bt_\be_\br_\bn in turn, using the matching rules  described  under
+              each  _\bp_\ba_\bt_\bt_\be_\br_\bn  in turn, using the matching rules described under
               P\bPa\bat\btt\bte\ber\brn\bn M\bMa\bat\btc\bch\bhi\bin\bng\bg below.  The _\bw_\bo_\br_\bd is expanded using tilde expan-
-              sion, parameter and variable  expansion,  arithmetic  expansion,
-              command  substitution,  process  substitution and quote removal.
+              sion,  parameter  and  variable expansion, arithmetic expansion,
+              command substitution, process substitution  and  quote  removal.
               Each _\bp_\ba_\bt_\bt_\be_\br_\bn examined is expanded using tilde expansion, parame-
-              ter  and  variable expansion, arithmetic expansion, command sub-
-              stitution, and process substitution.  If the  n\bno\boc\bca\bas\bse\bem\bma\bat\btc\bch\bh  shell
-              option  is enabled, the match is performed without regard to the
-              case of alphabetic characters.  When a match is found, the  cor-
-              responding  _\bl_\bi_\bs_\bt  is  executed.   If the ;\b;;\b; operator is used, no
-              subsequent matches are attempted after the first pattern  match.
-              Using  ;\b;&\b&  in  place of ;\b;;\b; causes execution to continue with the
-              _\bl_\bi_\bs_\bt associated with the next set of  patterns.   Using  ;\b;;\b;&\b&  in
-              place  of  ;\b;;\b;  causes the shell to test the next pattern list in
-              the statement, if any, and execute any associated _\bl_\bi_\bs_\bt on a suc-
-              cessful 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 _\bl_\bi_\bs_\bt.
+              ter and variable expansion, arithmetic expansion,  command  sub-
+              stitution,  process substitution, and quote removal.  If the n\bno\bo-\b-
+              c\bca\bas\bse\bem\bma\bat\btc\bch\bh shell option is enabled, the match is performed  with-
+              out  regard  to the case of alphabetic characters.  When a match
+              is found, the corresponding _\bl_\bi_\bs_\bt is executed.  If the ;\b;;\b;  opera-
+              tor is used, no subsequent matches are attempted after the first
+              pattern match.  Using ;\b;&\b& in place of ;\b;;\b; causes execution to con-
+              tinue  with  the  _\bl_\bi_\bs_\bt associated with the next set of patterns.
+              Using ;\b;;\b;&\b& in place of ;\b;;\b; causes the shell to test the next  pat-
+              tern  list  in the statement, if any, and execute any associated
+              _\bl_\bi_\bs_\bt 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 _\bl_\bi_\bs_\bt.
 
        i\bif\bf _\bl_\bi_\bs_\bt; t\bth\bhe\ben\bn _\bl_\bi_\bs_\bt; [ e\bel\bli\bif\bf _\bl_\bi_\bs_\bt; t\bth\bhe\ben\bn _\bl_\bi_\bs_\bt; ] ... [ e\bel\bls\bse\be _\bl_\bi_\bs_\bt; ] f\bfi\bi
-              The i\bif\bf _\bl_\bi_\bs_\bt is executed.  If its exit status is zero,  the  t\bth\bhe\ben\bn
-              _\bl_\bi_\bs_\b is  executed.   Otherwise,  each  e\bel\bli\bif\bf _\bl_\bi_\bs_\bt is executed in
-              turn, and if its exit status is  zero,  the  corresponding  t\bth\bhe\ben\bn
+              The  i\bif\bf  _\bl_\bi_\bs_\bt is executed.  If its exit status is zero, the t\bth\bhe\ben\bn
+              _\bl_\bi_\bs_\bis executed.  Otherwise, each  e\bel\bli\bif\bf  _\bl_\bi_\bs_\bt  is  executed  in
+              turn,  and  if  its  exit status is zero, the corresponding t\bth\bhe\ben\bn
               _\bl_\bi_\bs_\bt is executed and the command completes.  Otherwise, the e\bel\bls\bse\be
-              _\bl_\bi_\bs_\bis executed, if present.  The exit status is the exit  sta-
+              _\bl_\bi_\bs_\b is executed, if present.  The exit status is the exit sta-
               tus of the last command executed, or zero if no condition tested
               true.
 
        w\bwh\bhi\bil\ble\be _\bl_\bi_\bs_\bt_\b-_\b1; d\bdo\bo _\bl_\bi_\bs_\bt_\b-_\b2; d\bdo\bon\bne\be
        u\bun\bnt\bti\bil\bl _\bl_\bi_\bs_\bt_\b-_\b1; d\bdo\bo _\bl_\bi_\bs_\bt_\b-_\b2; d\bdo\bon\bne\be
-              The w\bwh\bhi\bil\ble\be command continuously executes the list _\bl_\bi_\bs_\bt_\b-_\b2 as  long
+              The  w\bwh\bhi\bil\ble\be command continuously executes the list _\bl_\bi_\bs_\bt_\b-_\b2 as long
               as the last command in the list _\bl_\bi_\bs_\bt_\b-_\b1 returns an exit status of
-              zero.  The u\bun\bnt\bti\bil\bl command is identical to the w\bwh\bhi\bil\ble\be command,  ex-
+              zero.   The u\bun\bnt\bti\bil\bl command is identical to the w\bwh\bhi\bil\ble\be command, ex-
               cept that the test is negated: _\bl_\bi_\bs_\bt_\b-_\b2 is executed as long as the
               last command in _\bl_\bi_\bs_\bt_\b-_\b1 returns a non-zero exit status.  The exit
               status of the w\bwh\bhi\bil\ble\be and u\bun\bnt\bti\bil\bl commands is the exit status of the
@@ -505,32 +516,49 @@ S\bSH\bHE\bEL\bLL\bL G\bGR\bRA\bAM\bMM\bMA\bAR\bR
 
    C\bCo\bop\bpr\bro\boc\bce\bes\bss\bse\bes\bs
        A _\bc_\bo_\bp_\br_\bo_\bc_\be_\bs_\bs is a shell command preceded by the c\bco\bop\bpr\bro\boc\bc reserved word.  A
-       coprocess  is  executed asynchronously in a subshell, as if the command
-       had been terminated with the &\b& control operator, with  a  two-way  pipe
+       coprocess is executed asynchronously in a subshell, as if  the  command
+       had  been  terminated  with the &\b& control operator, with a two-way pipe
        established between the executing shell and the coprocess.
 
-       The format for a coprocess is:
+       The syntax for a coprocess is:
 
               c\bco\bop\bpr\bro\boc\bc [_\bN_\bA_\bM_\bE] _\bc_\bo_\bm_\bm_\ba_\bn_\bd [_\br_\be_\bd_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\bs]
 
-       This  creates a coprocess named _\bN_\bA_\bM_\bE.  If _\bN_\bA_\bM_\bE is not supplied, the de-
-       fault name is C\bCO\bOP\bPR\bRO\bOC\bC.  _\bN_\bA_\bM_\bE must not be supplied if _\bc_\bo_\bm_\bm_\ba_\bn_\bd is a _\bs_\bi_\bm_\bp_\bl_\be
-       _\bc_\bo_\bm_\bm_\ba_\bn_\bd  (see above); otherwise, it is interpreted as the first word of
-       the simple command.  When the coprocess is executed, the shell  creates
-       an  array  variable (see A\bAr\brr\bra\bay\bys\bs below) named _\bN_\bA_\bM_\bE in the context of the
-       executing shell.  The standard output of _\bc_\bo_\bm_\bm_\ba_\bn_\bd  is  connected  via  a
-       pipe  to  a  file  descriptor in the executing shell, and that file de-
-       scriptor is assigned to _\bN_\bA_\bM_\bE[0].  The standard input of _\bc_\bo_\bm_\bm_\ba_\bn_\bd is con-
-       nected via a pipe to a file descriptor in the executing shell, and that
-       file descriptor is assigned to _\bN_\bA_\bM_\bE[1].  This pipe is  established  be-
-       fore any redirections specified by the command (see R\bRE\bED\bDI\bIR\bRE\bEC\bCT\bTI\bIO\bON\bN 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 ex-
-       ecute the coprocess is available as the value of the variable _\bN_\bA_\bM_\bE_PID.
-       The  w\bwa\bai\bit\bt builtin command may be used to wait for the coprocess to ter-
-       minate.
+       This creates a coprocess named _\bN_\bA_\bM_\bE.  _\bc_\bo_\bm_\bm_\ba_\bn_\bd may be  either  a  simple
+       command  or  a  compound command (see above).  _\bN_\bA_\bM_\bE is a shell variable
+       name.  If _\bN_\bA_\bM_\bE is not supplied, the default name is C\bCO\bOP\bPR\bRO\bOC\bC.
+
+       The recommended form to use for a coprocess is
+
+              c\bco\bop\bpr\bro\boc\bc _\bN_\bA_\bM_\bE { _\bc_\bo_\bm_\bm_\ba_\bn_\bd [_\br_\be_\bd_\bi_\br_\be_\bc_\bt_\bi_\bo_\bn_\bs]; }
+
+       This form is recommended because simple commands result in  the  copro-
+       cess  always being named C\bCO\bOP\bPR\bRO\bOC\bC, and it is simpler to use and more com-
+       plete than the other compound commands.
+
+       If _\bc_\bo_\bm_\bm_\ba_\bn_\bd is a compound command, _\bN_\bA_\bM_\bE is optional. The word  following
+       c\bco\bop\bpr\bro\boc\bc  determines whether that word is interpreted as a variable name:
+       it is interpreted as _\bN_\bA_\bM_\bE if it is not a reserved word that  introduces
+       a  compound  command.   If _\bc_\bo_\bm_\bm_\ba_\bn_\bd is a simple command, _\bN_\bA_\bM_\bE is not al-
+       lowed; this is to avoid confusion between _\bN_\bA_\bM_\bE and the  first  word  of
+       the simple command.
+
+       When  the  coprocess  is  executed, the shell creates an array variable
+       (see A\bAr\brr\bra\bay\bys\bs below) named _\bN_\bA_\bM_\bE in the context of  the  executing  shell.
+       The  standard  output  of _\bc_\bo_\bm_\bm_\ba_\bn_\bd is connected via a pipe to a file de-
+       scriptor in the executing shell, and that file descriptor  is  assigned
+       to _\bN_\bA_\bM_\bE[0].  The standard input of _\bc_\bo_\bm_\bm_\ba_\bn_\bd is connected via a pipe to a
+       file descriptor in the executing shell, and that file descriptor is as-
+       signed  to  _\bN_\bA_\bM_\bE[1].   This pipe is established before any redirections
+       specified by the command (see R\bRE\bED\bDI\bIR\bRE\bEC\bCT\bTI\bIO\bON\bN 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 _\bN_\bA_\bM_\bE_PID.  The w\bwa\bai\bit\bt builtin command
+       may be used to wait for the coprocess to terminate.
 
        Since the coprocess is created as an asynchronous command,  the  c\bco\bop\bpr\bro\boc\bc
        command  always  returns  success.  The return status of a coprocess is
@@ -548,20 +576,20 @@ S\bSH\bHE\bEL\bLL\bL G\bGR\bRA\bAM\bMM\bMA\bAR\bR
               parentheses are optional.  The _\bb_\bo_\bd_\by of the function is the  com-
               pound  command  _\bc_\bo_\bm_\bp_\bo_\bu_\bn_\bd_\b-_\bc_\bo_\bm_\bm_\ba_\bn_\bd  (see C\bCo\bom\bmp\bpo\bou\bun\bnd\bd C\bCo\bom\bmm\bma\ban\bnd\bds\bs above).
               That command is usually a _\bl_\bi_\bs_\bt of commands between { and },  but
-              may  be  any  command listed under C\bCo\bom\bmp\bpo\bou\bun\bnd\bd C\bCo\bom\bmm\bma\ban\bnd\bds\bs above, with
-              one exception: If the f\bfu\bun\bnc\bct\bti\bio\bon\bn reserved word is  used,  but  the
-              parentheses  are  not  supplied,  the braces are required.  _\bc_\bo_\bm_\b-
-              _\bp_\bo_\bu_\bn_\bd_\b-_\bc_\bo_\bm_\bm_\ba_\bn_\bd is executed whenever _\bf_\bn_\ba_\bm_\be  is  specified  as  the
-              name  of  a simple command.  When in _\bp_\bo_\bs_\bi_\bx _\bm_\bo_\bd_\be, _\bf_\bn_\ba_\bm_\be must be a
-              valid shell _\bn_\ba_\bm_\be and may not be the name of  one  of  the  POSIX
-              _\bs_\bp_\be_\bc_\bi_\ba_\bl  _\bb_\bu_\bi_\bl_\bt_\bi_\bn_\bs.   In default mode, a function name can be any
-              unquoted shell word that does not contain $\b$.   Any  redirections
-              (see R\bRE\bED\bDI\bIR\bRE\bEC\bCT\bTI\bIO\bON\bN below) specified when a function is defined are
-              performed when the function is executed.  The exit status  of  a
-              function  definition  is  zero unless a syntax error occurs or a
-              readonly function with the same name already exists.  When  exe-
-              cuted,  the  exit status of a function is the exit status of the
-              last command executed in the body.  (See F\bFU\bUN\bNC\bCT\bTI\bIO\bON\bNS\bS below.)
+              may be any command listed under C\bCo\bom\bmp\bpo\bou\bun\bnd\bd C\bCo\bom\bmm\bma\ban\bnd\bds\bs above.  If the
+              f\bfu\bun\bnc\bct\bti\bio\bon\bn reserved word is used, but the parentheses are not sup-
+              plied, the braces are recommended.  _\bc_\bo_\bm_\bp_\bo_\bu_\bn_\bd_\b-_\bc_\bo_\bm_\bm_\ba_\bn_\bd is executed
+              whenever _\bf_\bn_\ba_\bm_\be is specified as the name  of  a  simple  command.
+              When in _\bp_\bo_\bs_\bi_\bx _\bm_\bo_\bd_\be, _\bf_\bn_\ba_\bm_\be must be a valid shell _\bn_\ba_\bm_\be and may not
+              be the name of one of the POSIX _\bs_\bp_\be_\bc_\bi_\ba_\bl  _\bb_\bu_\bi_\bl_\bt_\bi_\bn_\bs.   In  default
+              mode,  a  function name can be any unquoted shell word that does
+              not contain $\b$.  Any redirections (see R\bRE\bED\bDI\bIR\bRE\bEC\bCT\bTI\bIO\bON\bN 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 F\bFU\bUN\bNC\bCT\bTI\bIO\bON\bNS\bS below.)
 
 C\bCO\bOM\bMM\bME\bEN\bNT\bTS\bS
        In a non-interactive shell, or an interactive shell in which the i\bin\bnt\bte\ber\br-\b-
@@ -613,10 +641,11 @@ Q\bQU\bUO\bOT\bTI\bIN\bNG\bG
        The  special  parameters  *\b*  and  @\b@ have special meaning when in double
        quotes (see P\bPA\bAR\bRA\bAM\bME\bET\bTE\bER\bRS\bS below).
 
-       Words of the form $\b$'_\bs_\bt_\br_\bi_\bn_\bg' are treated specially.  The word expands to
-       _\bs_\bt_\br_\bi_\bn_\bg,  with backslash-escaped characters replaced as specified by the
-       ANSI C standard.  Backslash escape sequences, if present,  are  decoded
-       as follows:
+       Character sequences of the form $\b$'_\bs_\bt_\br_\bi_\bn_\bg'  are  treated  as  a  special
+       variant  of  single quotes.  The sequence expands to _\bs_\bt_\br_\bi_\bn_\bg, with back-
+       slash-escaped characters in _\bs_\bt_\br_\bi_\bn_\bg replaced as specified by the ANSI  C
+       standard.   Backslash escape sequences, if present, are decoded as fol-
+       lows:
               \\b\a\ba     alert (bell)
               \\b\b\bb     backspace
               \\b\e\be
@@ -630,146 +659,147 @@ Q\bQU\bUO\bOT\bTI\bIN\bNG\bG
               \\b\'\b'     single quote
               \\b\"\b"     double quote
               \\b\?\b?     question mark
-              \\b\_\bn_\bn_\bn   the  eight-bit  character  whose value is the octal value
+              \\b\_\bn_\bn_\bn   the eight-bit character whose value is  the  octal  value
                      _\bn_\bn_\bn (one to three octal digits)
-              \\b\x\bx_\bH_\bH   the eight-bit character whose value  is  the  hexadecimal
+              \\b\x\bx_\bH_\bH   the  eight-bit  character  whose value is the hexadecimal
                      value _\bH_\bH (one or two hex digits)
-              \\b\u\bu_\bH_\bH_\bH_\bH the  Unicode (ISO/IEC 10646) character whose value is the
+              \\b\u\bu_\bH_\bH_\bH_\bH the Unicode (ISO/IEC 10646) character whose value is  the
                      hexadecimal value _\bH_\bH_\bH_\bH (one to four hex digits)
               \\b\U\bU_\bH_\bH_\bH_\bH_\bH_\bH_\bH_\bH
-                     the Unicode (ISO/IEC 10646) character whose value is  the
+                     the  Unicode (ISO/IEC 10646) character whose value is the
                      hexadecimal value _\bH_\bH_\bH_\bH_\bH_\bH_\bH_\bH (one to eight hex digits)
               \\b\c\bc_\bx    a control-_\bx character
 
-       The  expanded  result  is  single-quoted, as if the dollar sign had not
+       The expanded result is single-quoted, as if the  dollar  sign  had  not
        been present.
 
        A double-quoted string preceded by a dollar sign ($\b$"_\bs_\bt_\br_\bi_\bn_\bg") will cause
-       the  string to be translated according to the current locale.  The _\bg_\be_\bt_\b-
-       _\bt_\be_\bx_\bt infrastructure performs the message catalog  lookup  and  transla-
-       tion,  using  the  L\bLC\bC_\b_M\bME\bES\bSS\bSA\bAG\bGE\bES\bS  and T\bTE\bEX\bXT\bTD\bDO\bOM\bMA\bAI\bIN\bN shell variables.  If the
-       current locale is C\bC or P\bPO\bOS\bSI\bIX\bX, or if there are  no  translations  avail-
-       able,  the dollar sign is ignored.  If the string is translated and re-
-       placed, the replacement is double-quoted.
+       the string to be translated according to the current locale.  The  _\bg_\be_\bt_\b-
+       _\bt_\be_\bx_\bt  infrastructure  performs  the  lookup  and translation, using the
+       L\bLC\bC_\b_M\bME\bES\bSS\bSA\bAG\bGE\bES\bS, T\bTE\bEX\bXT\bTD\bDO\bOM\bMA\bAI\bIN\bND\bDI\bIR\bR, and T\bTE\bEX\bXT\bTD\bDO\bOM\bMA\bAI\bIN\bN  shell  variables.   If  the
+       current  locale  is C\bC or P\bPO\bOS\bSI\bIX\bX, 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  n\bno\boe\bex\bx-\b-
+       p\bpa\ban\bnd\bd_\b_t\btr\bra\ban\bns\bsl\bla\bat\bti\bio\bon\bn  option is enabled using the s\bsh\bho\bop\bpt\bt builtin, translated
+       strings are single-quoted instead of double-quoted.  See  the  descrip-
+       tion of s\bsh\bho\bop\bpt\bt below under S\bSH\bHE\bEL\bLL\bLBUILTINC\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS.
 
 P\bPA\bAR\bRA\bAM\bME\bET\bTE\bER\bRS\bS
-       A _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br is an entity that stores values.  It can be a _\bn_\ba_\bm_\be, a  num-
+       A  _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br is an entity that stores values.  It can be a _\bn_\ba_\bm_\be, a num-
        ber, or one of the special characters listed below under S\bSp\bpe\bec\bci\bia\bal\bl P\bPa\bar\bra\bam\bm-\b-
-       e\bet\bte\ber\brs\bs.  A _\bv_\ba_\br_\bi_\ba_\bb_\bl_\be is a parameter denoted by a _\bn_\ba_\bm_\be.  A variable has  a
-       _\bv_\ba_\bl_\bu_\b and  zero or more _\ba_\bt_\bt_\br_\bi_\bb_\bu_\bt_\be_\bs.  Attributes are assigned using the
+       e\bet\bte\ber\brs\bs.   A _\bv_\ba_\br_\bi_\ba_\bb_\bl_\be is a parameter denoted by a _\bn_\ba_\bm_\be.  A variable has a
+       _\bv_\ba_\bl_\bu_\band zero or more _\ba_\bt_\bt_\br_\bi_\bb_\bu_\bt_\be_\bs.  Attributes are assigned  using  the
        d\bde\bec\bcl\bla\bar\bre\be builtin command (see d\bde\bec\bcl\bla\bar\bre\be below in S\bSH\bHE\bEL\bLL\bL B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS).
 
        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
+       a valid value.  Once a variable is set, it may be unset only  by  using
        the u\bun\bns\bse\bet\bt builtin command (see S\bSH\bHE\bEL\bLL\bL B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS below).
 
        A _\bv_\ba_\br_\bi_\ba_\bb_\bl_\be may be assigned to by a statement of the form
 
               _\bn_\ba_\bm_\be=[_\bv_\ba_\bl_\bu_\be]
 
-       If _\bv_\ba_\bl_\bu_\be is not given, the variable is assigned the null  string.   All
-       _\bv_\ba_\bl_\bu_\be_\b undergo tilde expansion, parameter and variable expansion, com-
-       mand substitution, arithmetic expansion, and quote removal (see  E\bEX\bXP\bPA\bAN\bN-\b-
+       If  _\bv_\ba_\bl_\bu_\be  is not given, the variable is assigned the null string.  All
+       _\bv_\ba_\bl_\bu_\be_\bundergo tilde expansion, parameter and variable expansion,  com-
+       mand  substitution, arithmetic expansion, and quote removal (see E\bEX\bXP\bPA\bAN\bN-\b-
        S\bSI\bIO\bON\bN below).  If the variable has its i\bin\bnt\bte\beg\bge\ber\br attribute set, then _\bv_\ba_\bl_\bu_\be
        is evaluated as an arithmetic expression even if the $((...)) expansion
-       is  not  used  (see A\bAr\bri\bit\bth\bhm\bme\bet\bti\bic\bc E\bEx\bxp\bpa\ban\bns\bsi\bio\bon\bn below).  Word splitting is not
-       performed, with the exception of "\b"$\b$@\b@"\b" as explained below under  S\bSp\bpe\bec\bci\bia\bal\bl
-       P\bPa\bar\bra\bam\bme\bet\bte\ber\brs\bs.   Pathname  expansion  is not performed.  Assignment state-
-       ments may also appear as arguments to the a\bal\bli\bia\bas\bs, d\bde\bec\bcl\bla\bar\bre\be, t\bty\byp\bpe\bes\bse\bet\bt,  e\bex\bx-\b-
-       p\bpo\bor\brt\bt,  r\bre\bea\bad\bdo\bon\bnl\bly\by,  and  l\blo\boc\bca\bal\bl  builtin  commands (_\bd_\be_\bc_\bl_\ba_\br_\ba_\bt_\bi_\bo_\bn commands).
-       When in _\bp_\bo_\bs_\bi_\bx _\bm_\bo_\bd_\be, these builtins may appear in a command after one or
-       more  instances  of  the  c\bco\bom\bmm\bma\ban\bnd\bd  builtin  and retain these assignment
-       statement properties.
-
-       In the context where an assignment statement is assigning a value to  a
+       is not used (see A\bAr\bri\bit\bth\bhm\bme\bet\bti\bic\bc E\bEx\bxp\bpa\ban\bns\bsi\bio\bon\bn below).  Word splitting and path-
+       name  expansion  are not performed.  Assignment statements may also ap-
+       pear as arguments to the a\bal\bli\bia\bas\bs, d\bde\bec\bcl\bla\bar\bre\be, t\bty\byp\bpe\bes\bse\bet\bt, e\bex\bxp\bpo\bor\brt\bt, r\bre\bea\bad\bdo\bon\bnl\bly\by, and
+       l\blo\boc\bca\bal\bl  builtin  commands  (_\bd_\be_\bc_\bl_\ba_\br_\ba_\bt_\bi_\bo_\bn  commands).  When in _\bp_\bo_\bs_\bi_\bx _\bm_\bo_\bd_\be,
+       these builtins may appear in a command after one or more  instances  of
+       the c\bco\bom\bmm\bma\ban\bnd\bd 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  d\bde\bec\bcl\bla\bar\bre\be  that accept assignment statements
+       or  add  to  the variable's previous value.  This includes arguments to
+       builtin commands such as  d\bde\bec\bcl\bla\bar\bre\be  that  accept  assignment  statements
        (_\bd_\be_\bc_\bl_\ba_\br_\ba_\bt_\bi_\bo_\bn commands).  When += is applied to a variable for which the
-       _\bi_\bn_\bt_\be_\bg_\be_\br attribute has been set, _\bv_\ba_\bl_\bu_\be is evaluated as an arithmetic ex-
+       i\bin\bnt\bte\beg\bge\ber\br attribute has been set, _\bv_\ba_\bl_\bu_\be 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 A\bAr\brr\bra\bay\bys\bs 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, _\bv_\ba_\bl_\bu_\be is expanded  and  appended  to
+       uated.  When += is applied to an array variable using compound  assign-
+       ment  (see  A\bAr\brr\bra\bay\bys\bs  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, _\bv_\ba_\bl_\bu_\be is expanded and appended to
        the variable's value.
 
        A variable can be assigned the _\bn_\ba_\bm_\be_\br_\be_\bf attribute using the -\b-n\bn option to
-       the d\bde\bec\bcl\bla\bar\bre\be or l\blo\boc\bca\bal\bl builtin commands (see the descriptions of  d\bde\bec\bcl\bla\bar\bre\be
-       and  l\blo\boc\bca\bal\bl  below) to create a _\bn_\ba_\bm_\be_\br_\be_\bf, 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  _\bn_\ba_\bm_\be_\br_\be_\b attribute
-       itself),  the operation is actually performed on the variable specified
-       by the nameref variable's value.  A nameref  is  commonly  used  within
+       the  d\bde\bec\bcl\bla\bar\bre\be or l\blo\boc\bca\bal\bl builtin commands (see the descriptions of d\bde\bec\bcl\bla\bar\bre\be
+       and l\blo\boc\bca\bal\bl below) to create a _\bn_\ba_\bm_\be_\br_\be_\bf, 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 _\bn_\ba_\bm_\be_\br_\be_\bf 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
+       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 r\bre\bef\bf whose value is the
+       inside the function creates a nameref variable r\bre\bef\bf whose value  is  the
        variable name passed as the first argument.  References and assignments
-       to  r\bre\bef\bf,  and changes to its attributes, are treated as references, as-
-       signments, and attribute modifications to the variable whose  name  was
-       passed  as  $\b$1\b1.   If the control variable in a f\bfo\bor\br 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,
+       to r\bre\bef\bf, and changes to its attributes, are treated as  references,  as-
+       signments,  and  attribute modifications to the variable whose name was
+       passed as $\b$1\b1.  If the control variable in a f\bfo\bor\br 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 n\bna\bam\bme\ber\bre\bef\bf
-       attribute.   However,  nameref  variables can reference array variables
-       and subscripted array variables.  Namerefs can be unset  using  the  -\b-n\bn
-       option  to the u\bun\bns\bse\bet\bt builtin.  Otherwise, if u\bun\bns\bse\bet\bt is executed with the
-       name of a nameref variable as an argument, the variable  referenced  by
+       attribute.  However, nameref variables can  reference  array  variables
+       and  subscripted  array  variables.  Namerefs can be unset using the -\b-n\bn
+       option to the u\bun\bns\bse\bet\bt builtin.  Otherwise, if u\bun\bns\bse\bet\bt is executed with  the
+       name  of  a nameref variable as an argument, the variable referenced by
        the nameref variable will be unset.
 
    P\bPo\bos\bsi\bit\bti\bio\bon\bna\bal\bl P\bPa\bar\bra\bam\bme\bet\bte\ber\brs\bs
-       A  _\bp_\bo_\bs_\bi_\bt_\bi_\bo_\bn_\ba_\bl  _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br  is a parameter denoted by one or more digits,
+       A _\bp_\bo_\bs_\bi_\bt_\bi_\bo_\bn_\ba_\bl _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br 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 s\bse\bet\bt builtin command.  Positional parameters may not be assigned  to
-       with  assignment statements.  The positional parameters are temporarily
+       the shell's arguments when it is invoked, and may be  reassigned  using
+       the  s\bse\bet\bt 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 F\bFU\bUN\bNC\bCT\bTI\bIO\bON\bNS\bS below).
 
-       When a positional parameter consisting of more than a single  digit  is
+       When  a  positional parameter consisting of more than a single digit is
        expanded, it must be enclosed in braces (see E\bEX\bXP\bPA\bAN\bNS\bSI\bIO\bON\bN below).
 
    S\bSp\bpe\bec\bci\bia\bal\bl P\bPa\bar\bra\bam\bme\bet\bte\ber\brs\bs
-       The  shell  treats  several parameters specially.  These parameters may
+       The shell treats several parameters specially.   These  parameters  may
        only be referenced; assignment to them is not allowed.
-       *\b*      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
+       *\b*      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  I\bIF\bFS\b special
-              variable.   That  is, "$\b$*\b*" is equivalent to "$\b$1\b1_\bc$\b$2\b2_\bc.\b..\b..\b.", where _\bc
+              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 I\bIF\bFS\bS special
+              variable.  That is, "$\b$*\b*" is equivalent to "$\b$1\b1_\bc$\b$2\b2_\bc.\b..\b..\b.",  where  _\bc
               is the first character of the value of the I\bIF\bFS\bS variable.  If I\bIF\bFS\bS
-              is  unset,  the  parameters  are separated by spaces.  If I\bIF\bFS\bS is
+              is unset, the parameters are separated by  spaces.   If  I\bIF\bFS\b is
               null, the parameters are joined without intervening separators.
-       @\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  ex-
-              pands  to  a separate word.  That is, "$\b$@\b@" is equivalent to "$\b$1\b1"
-              "$\b$2\b2" ...  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, "$\b$@\b@" and $\b$@\b@  expand  to
+       @\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 ex-
+              pands to a separate word.  That is, "$\b$@\b@" is equivalent  to  "$\b$1\b1"
+              "$\b$2\b2"  ...   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, "$\b$@\b@" and $\b$@\b@ expand to
               nothing (i.e., they are removed).
        #\b#      Expands to the number of positional parameters in decimal.
-       ?\b?      Expands  to  the exit status of the most recently executed fore-
+       ?\b?      Expands to the exit status of the most recently  executed  fore-
               ground pipeline.
-       -\b-      Expands to the current option flags as  specified  upon  invoca-
-              tion,  by the s\bse\bet\bt builtin command, or those set by the shell it-
+       -\b-      Expands  to  the  current option flags as specified upon invoca-
+              tion, by the s\bse\bet\bt builtin command, or those set by the shell  it-
               self (such as the -\b-i\bi option).
-       $\b$      Expands to the process ID of the shell.  In a  ()  subshell,  it
-              expands  to  the  process  ID of the current shell, not the sub-
-              shell.
+       $\b$      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.
        !\b!      Expands to the process ID of the job most recently  placed  into
               the  background,  whether executed as an asynchronous command or
               using the b\bbg\bg builtin (see J\bJO\bOB\bB C\bCO\bON\bNT\bTR\bRO\bOL\bL below).
@@ -1032,6 +1062,10 @@ P\bPA\bAR\bRA\bAM\bME\bET\bTE\bER\bRS\bS
               tializes  (seeds)  the sequence of random numbers.  If R\bRA\bAN\bND\bDO\bOM\bM is
               unset, it loses its special properties, even  if  it  is  subse-
               quently reset.
+       R\bRE\bEA\bAD\bDL\bLI\bIN\bNE\bE_\b_A\bAR\bRG\bGU\bUM\bME\bEN\bNT\bT
+              Any  numeric  argument  given to a readline command that was de-
+              fined using "bind -x" (see S\bSH\bHE\bEL\bLL\bL B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS below) when it
+              was invoked.
        R\bRE\bEA\bAD\bDL\bLI\bIN\bNE\bE_\b_L\bLI\bIN\bNE\bE
               The contents of the r\bre\bea\bad\bdl\bli\bin\bne\be line buffer, for use with "bind -x"
               (see S\bSH\bHE\bEL\bLL\bL B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS below).
@@ -1046,12 +1080,12 @@ P\bPA\bAR\bRA\bAM\bME\bET\bTE\bER\bRS\bS
        R\bRE\bEP\bPL\bLY\bY  Set to the line of input read by the r\bre\bea\bad\bd builtin  command  when
               no arguments are supplied.
        S\bSE\bEC\bCO\bON\bND\bDS\bS
-              Each  time  this  parameter is referenced, the number of seconds
-              since shell invocation is returned.  If a value is  assigned  to
+              Each time this parameter is referenced, it expands to the number
+              of seconds since shell invocation.  If a value  is  assigned  to
               S\bSE\bEC\bCO\bON\bND\bDS\bS,  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
-              is always determined by querying the system clock.   If  S\bSE\bEC\bCO\bON\bND\bDS\bS
+              are always determined by querying the system clock.  If  S\bSE\bEC\bCO\bON\bND\bDS\bS
               is  unset, it loses its special properties, even if it is subse-
               quently reset.
        S\bSH\bHE\bEL\bLL\bLO\bOP\bPT\bTS\bS
@@ -1088,8 +1122,8 @@ P\bPA\bAR\bRA\bAM\bME\bET\bTE\bER\bRS\bS
               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  B\bBS\bSH\bHE\bEL\bLL\bL-\b-
-              COMPATIBILITYM\bMO\bOD\bDE\bE.   For  example,  4.2  and 42 are valid values
+              spond to the compatibility levels described  below  under  S\bSH\bHE\bEL\bLL\bL
+              C\bCO\bOM\bMP\bPA\bAT\bTI\bIB\bBI\bIL\bLI\bIT\bTY\bY  M\bMO\bOD\bDE\bE.   For  example, 4.2 and 42 are valid values
               that correspond to the c\bco\bom\bmp\bpa\bat\bt4\b42\b2 s\bsh\bho\bop\bpt\bt option and set the compat-
               ibility level to 42.  The current version is also a valid value.
        B\bBA\bAS\bSH\bH_\b_E\bEN\bNV\bV
@@ -1462,47 +1496,53 @@ P\bPA\bAR\bRA\bAM\bME\bET\bTE\bER\bRS\bS
        count back from the end of the array, and an index of -1 references the
        last element.
 
-       Any element of an array may  be  referenced  using  ${_\bn_\ba_\bm_\be[_\bs_\bu_\bb_\bs_\bc_\br_\bi_\bp_\bt]}.
+       The += operator will append to an array variable when  assigning  using
+       the compound assignment syntax; see P\bPA\bAR\bRA\bAM\bME\bET\bTE\bER\bRS\bS above.
+
+       Any  element  of  an  array may be referenced using ${_\bn_\ba_\bm_\be[_\bs_\bu_\bb_\bs_\bc_\br_\bi_\bp_\bt]}.
        The braces are required to avoid conflicts with pathname expansion.  If
-       _\bs_\bu_\bb_\bs_\bc_\br_\bi_\bp_\bis @\b@ or *\b*, the word expands to all members  of  _\bn_\ba_\bm_\be.   These
-       subscripts  differ only when the word appears within double quotes.  If
+       _\bs_\bu_\bb_\bs_\bc_\br_\bi_\bp_\b is  @\b@  or *\b*, the word expands to all members of _\bn_\ba_\bm_\be.  These
+       subscripts differ only when the word appears within double quotes.   If
        the word is double-quoted, ${_\bn_\ba_\bm_\be[*]} expands to a single word with the
-       value  of each array member separated by the first character of the I\bIF\bFS\bS
+       value of each array member separated by the first character of the  I\bIF\bFS\bS
        special variable, and ${_\bn_\ba_\bm_\be[@]} expands each element of _\bn_\ba_\bm_\be to a sep-
-       arate  word.   When  there  are no array members, ${_\bn_\ba_\bm_\be[@]} expands to
-       nothing.  If the double-quoted expansion occurs within a word, the  ex-
+       arate word.  When there are no array  members,  ${_\bn_\ba_\bm_\be[@]}  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
+       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*  and  @\b@  (see  S\bSp\bpe\bec\bci\bia\bal\bl  P\bPa\bar\bra\bam\bme\bet\bte\ber\brs\b above).
-       ${#_\bn_\ba_\bm_\be[_\bs_\bu_\bb_\bs_\bc_\br_\bi_\bp_\bt]}  expands  to  the length of ${_\bn_\ba_\bm_\be[_\bs_\bu_\bb_\bs_\bc_\br_\bi_\bp_\bt]}.  If
+       of  the  special  parameters  *\b*  and  @\b@ (see S\bSp\bpe\bec\bci\bia\bal\bl P\bPa\bar\bra\bam\bme\bet\bte\ber\brs\bs above).
+       ${#_\bn_\ba_\bm_\be[_\bs_\bu_\bb_\bs_\bc_\br_\bi_\bp_\bt]} expands to the length  of  ${_\bn_\ba_\bm_\be[_\bs_\bu_\bb_\bs_\bc_\br_\bi_\bp_\bt]}.   If
        _\bs_\bu_\bb_\bs_\bc_\br_\bi_\bp_\bt is *\b* or @\b@, the expansion is the number of elements in the ar-
        ray.  If the _\bs_\bu_\bb_\bs_\bc_\br_\bi_\bp_\bt 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
+       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
+       erencing  the array with a subscript of 0.  Any reference to a variable
        using a valid subscript is legal, and b\bba\bas\bsh\bh will create an array if nec-
        essary.
 
-       An array variable is considered set if a subscript has been assigned  a
+       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.  ${!\b!_\bn_\ba_\bm_\be[_\b@]} and ${!\b!_\bn_\ba_\bm_\be[_\b*]} expand to the indices assigned  in
+       It is possible to obtain the keys (indices) of an array as well as  the
+       values.   ${!\b!_\bn_\ba_\bm_\be[_\b@]} and ${!\b!_\bn_\ba_\bm_\be[_\b*]} expand to the indices assigned in
        array variable _\bn_\ba_\bm_\be.  The treatment when in double quotes is similar to
        the expansion of the special parameters _\b@ and _\b* within double quotes.
 
        The u\bun\bns\bse\bet\bt builtin is used to destroy arrays.  u\bun\bns\bse\bet\bt _\bn_\ba_\bm_\be[_\bs_\bu_\bb_\bs_\bc_\br_\bi_\bp_\bt] de-
        stroys the array element at index _\bs_\bu_\bb_\bs_\bc_\br_\bi_\bp_\bt, 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.  u\bun\bns\bse\bet\bt _\bn_\ba_\bm_\be, where _\bn_\ba_\bm_\be is  an  array,  or
-       u\bun\bns\bse\bet\bt  _\bn_\ba_\bm_\be[_\bs_\bu_\bb_\bs_\bc_\br_\bi_\bp_\bt],  where  _\bs_\bu_\bb_\bs_\bc_\br_\bi_\bp_\bt is *\b* or @\b@, removes the entire
-       array.
+       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.  u\bun\bns\bse\bet\bt _\bn_\ba_\bm_\be, where _\bn_\ba_\bm_\be is an array, re-
+       moves the entire array.  u\bun\bns\bse\bet\bt _\bn_\ba_\bm_\be[_\bs_\bu_\bb_\bs_\bc_\br_\bi_\bp_\bt], where _\bs_\bu_\bb_\bs_\bc_\br_\bi_\bp_\bt is *\b* or
+       @\b@, behaves differently depending on whether _\bn_\ba_\bm_\be is an indexed or asso-
+       ciative array.  If _\bn_\ba_\bm_\be is an associative array, this unsets  the  ele-
+       ment with subscript *\b* or @\b@.  If _\bn_\ba_\bm_\be 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 u\bun\bns\bse\bet\bt, without using the word expansion syntax de-
@@ -1557,17 +1597,17 @@ E\bEX\bXP\bPA\bAN\bNS\bSI\bIO\bON\bN
        a{\b{d,c,b}\b}e expands into `ade ace abe'.
 
        A sequence expression takes the form {\b{_\bx.\b..\b._\by[\b[.\b..\b._\bi_\bn_\bc_\br]\b]}\b}, where _\bx and _\by  are
-       either  integers or single characters, and _\bi_\bn_\bc_\br, an optional increment,
-       is an integer.  When integers are supplied, the expression  expands  to
-       each  number between _\bx and _\by, inclusive.  Supplied integers may be pre-
-       fixed with _\b0 to force each term to have the same width.  When either  _\bx
-       or  _\by  begins  with  a  zero, the shell attempts to force all generated
-       terms to contain the same number of digits, zero-padding  where  neces-
-       sary.   When  characters  are  supplied, the expression expands to each
-       character lexicographically between _\bx and _\by, inclusive, using  the  de-
-       fault C locale.  Note that both _\bx and _\by must be of the same type.  When
-       the increment is supplied, it is used as the  difference  between  each
-       term.  The default increment is 1 or -1 as appropriate.
+       either  integers or single letters, and _\bi_\bn_\bc_\br, an optional increment, is
+       an integer.  When integers are supplied, the expression expands to each
+       number  between  _\bx and _\by, inclusive.  Supplied integers may be prefixed
+       with _\b0 to force each term to have the same width.  When either _\bx  or  _\by
+       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 _\bx and _\by, inclusive, using  the  default  C  locale.
+       Note  that  both  _\bx and _\by 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
@@ -1699,12 +1739,12 @@ E\bEX\bXP\bPA\bAN\bNS\bSI\bIO\bON\bN
        ${_\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br:\b:_\bo_\bf_\bf_\bs_\be_\bt:\b:_\bl_\be_\bn_\bg_\bt_\bh}
               S\bSu\bub\bbs\bst\btr\bri\bin\bng\bg E\bEx\bxp\bpa\ban\bns\bsi\bio\bon\bn.  Expands to up to _\bl_\be_\bn_\bg_\bt_\bh characters of  the
               value  of  _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br starting at the character specified by _\bo_\bf_\bf_\b-
-              _\bs_\be_\bt.  If _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br is @\b@, an indexed array subscripted by @\b@ or *\b*,
-              or  an  associative  array name, the results differ as described
-              below.  If _\bl_\be_\bn_\bg_\bt_\bh is omitted, expands to the  substring  of  the
-              value of _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br starting at the character specified by _\bo_\bf_\bf_\bs_\be_\bt
-              and extending to the end of the value.  _\bl_\be_\bn_\bg_\bt_\bh  and  _\bo_\bf_\bf_\bs_\be_\bt  are
-              arithmetic expressions (see A\bAR\bRI\bIT\bTH\bHM\bME\bET\bTI\bIC\bC E\bEV\bVA\bAL\bLU\bUA\bAT\bTI\bIO\bON\bN below).
+              _\bs_\be_\bt.  If _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br is @\b@ or *\b*, an indexed array subscripted by  @\b@
+              or  *\b*,  or  an associative array name, the results differ as de-
+              scribed below.  If _\bl_\be_\bn_\bg_\bt_\bh is omitted, expands to  the  substring
+              of the value of _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br starting at the character specified by
+              _\bo_\bf_\bf_\bs_\be_\bt and extending to the end of the value.  _\bl_\be_\bn_\bg_\bt_\bh and _\bo_\bf_\bf_\bs_\be_\bt
+              are arithmetic expressions (see A\bAR\bRI\bIT\bTH\bHM\bME\bET\bTI\bIC\bC E\bEV\bVA\bAL\bLU\bUA\bAT\bTI\bIO\bON\bN below).
 
               If  _\bo_\bf_\bf_\bs_\be_\bt  evaluates  to  a number less than zero, the value is
               used as an offset in characters from the end of the value of _\bp_\ba_\b-
@@ -1715,51 +1755,52 @@ E\bEX\bXP\bPA\bAN\bNS\bSI\bIO\bON\bN
               that  a  negative  offset must be separated from the colon by at
               least one space to avoid being confused with the :\b:-\b- expansion.
 
-              If _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br is @\b@, the result is  _\bl_\be_\bn_\bg_\bt_\bh  positional  parameters
-              beginning at _\bo_\bf_\bf_\bs_\be_\bt.  A negative _\bo_\bf_\bf_\bs_\be_\bt is taken relative to one
-              greater than the greatest positional parameter, so an offset  of
-              -1  evaluates to the last positional parameter.  It is an expan-
-              sion error if _\bl_\be_\bn_\bg_\bt_\bh evaluates to a number less than zero.
+              If _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br is @\b@ or *\b*, the result is _\bl_\be_\bn_\bg_\bt_\bh positional  parame-
+              ters  beginning  at _\bo_\bf_\bf_\bs_\be_\bt.  A negative _\bo_\bf_\bf_\bs_\be_\bt 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 _\bl_\be_\bn_\bg_\bt_\bh evaluates to  a  number  less  than
+              zero.
 
               If _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br is an indexed array name subscripted by @ or *, the
-              result  is  the _\bl_\be_\bn_\bg_\bt_\bh members of the array beginning with ${_\bp_\ba_\b-
-              _\br_\ba_\bm_\be_\bt_\be_\br[_\bo_\bf_\bf_\bs_\be_\bt]}.  A negative _\bo_\bf_\bf_\bs_\be_\bt is taken  relative  to  one
+              result is the _\bl_\be_\bn_\bg_\bt_\bh members of the array beginning  with  ${_\bp_\ba_\b-
+              _\br_\ba_\bm_\be_\bt_\be_\br[_\bo_\bf_\bf_\bs_\be_\bt]}.   A  negative  _\bo_\bf_\bf_\bs_\be_\bt is taken relative to one
               greater than the maximum index of the specified array.  It is an
               expansion error if _\bl_\be_\bn_\bg_\bt_\bh 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 _\bo_\bf_\bf_\bs_\be_\bt is 0, and the positional parameters are used,
+              Substring indexing is zero-based unless the  positional  parame-
+              ters  are  used,  in  which case the indexing starts at 1 by de-
+              fault.  If _\bo_\bf_\bf_\bs_\be_\bt is 0, and the positional parameters are  used,
               $\b$0\b0 is prefixed to the list.
 
        ${!\b!_\bp_\br_\be_\bf_\bi_\bx*\b*}
        ${!\b!_\bp_\br_\be_\bf_\bi_\bx@\b@}
-              N\bNa\bam\bme\bes\bm\bma\bat\btc\bch\bhi\bin\bng\bg p\bpr\bre\bef\bfi\bix\bx.  Expands to the names of variables  whose
+              N\bNa\bam\bme\bes\b m\bma\bat\btc\bch\bhi\bin\bng\bg p\bpr\bre\bef\bfi\bix\bx.  Expands to the names of variables whose
               names begin with _\bp_\br_\be_\bf_\bi_\bx, separated by the first character of the
-              I\bIF\bFS\bspecial variable.  When _\b@ is used and the expansion  appears
-              within  double  quotes, each variable name expands to a separate
+              I\bIF\bFS\b special variable.  When _\b@ is used and the expansion appears
+              within double quotes, each variable name expands to  a  separate
               word.
 
        ${!\b!_\bn_\ba_\bm_\be[_\b@]}
        ${!\b!_\bn_\ba_\bm_\be[_\b*]}
-              L\bLi\bis\bst\bo\bof\bf a\bar\brr\bra\bay\by k\bke\bey\bys\bs.  If _\bn_\ba_\bm_\be is an array  variable,  expands  to
-              the  list  of array indices (keys) assigned in _\bn_\ba_\bm_\be.  If _\bn_\ba_\bm_\be is
-              not an array, expands to 0 if _\bn_\ba_\bm_\be is set  and  null  otherwise.
-              When  _\b@  is used and the expansion appears within double quotes,
+              L\bLi\bis\bst\b o\bof\bf  a\bar\brr\bra\bay\by  k\bke\bey\bys\bs.  If _\bn_\ba_\bm_\be is an array variable, expands to
+              the list of array indices (keys) assigned in _\bn_\ba_\bm_\be.  If  _\bn_\ba_\bm_\b is
+              not  an  array,  expands to 0 if _\bn_\ba_\bm_\be is set and null otherwise.
+              When _\b@ is used and the expansion appears within  double  quotes,
               each key expands to a separate word.
 
        ${#\b#_\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br}
-              P\bPa\bar\bra\bam\bme\bet\bte\ber\bl\ble\ben\bng\bgt\bth\bh.  The length in characters of the value of  _\bp_\ba_\b-
-              _\br_\ba_\bm_\be_\bt_\be_\b is substituted.  If _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br is *\b* or @\b@, the value sub-
-              stituted is the number of positional parameters.   If  _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br
+              P\bPa\bar\bra\bam\bme\bet\bte\ber\b l\ble\ben\bng\bgt\bth\bh.  The length in characters of the value of _\bp_\ba_\b-
+              _\br_\ba_\bm_\be_\bt_\be_\bis substituted.  If _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br is *\b* or @\b@, the value  sub-
+              stituted  is  the number of positional parameters.  If _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br
               is an array name subscripted by *\b* or @\b@, the value substituted is
               the number of elements in the array.  If _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br 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
-              _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br,  so  negative  indices count back from the end of the
+              array name subscripted by a negative number, that number is  in-
+              terpreted  as  relative to one greater than the maximum index of
+              _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br, so negative indices count back from the  end  of  the
               array, and an index of -1 references the last element.
 
        ${_\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br#\b#_\bw_\bo_\br_\bd}
@@ -1767,15 +1808,15 @@ E\bEX\bXP\bPA\bAN\bNS\bSI\bIO\bON\bN
               R\bRe\bem\bmo\bov\bve\be m\bma\bat\btc\bch\bhi\bin\bng\bg p\bpr\bre\bef\bfi\bix\bx p\bpa\bat\btt\bte\ber\brn\bn.  The _\bw_\bo_\br_\bd is expanded to produce
               a pattern just as in pathname expansion, and matched against the
               expanded value of _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br using the rules described under P\bPa\bat\bt-\b-
-              t\bte\ber\brn\b M\bMa\bat\btc\bch\bhi\bin\bng\bg  below.   If the pattern matches the beginning of
-              the value of _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br, then the result of the expansion is  the
-              expanded  value  of _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br with the shortest matching pattern
-              (the ``#\b#'' case) or the longest  matching  pattern  (the  ``#\b##\b#''
-              case)  deleted.  If _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br is @\b@ or *\b*, the pattern removal op-
+              t\bte\ber\brn\bM\bMa\bat\btc\bch\bhi\bin\bng\bg below.  If the pattern matches  the  beginning  of
+              the  value of _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br, then the result of the expansion is the
+              expanded value of _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br with the shortest  matching  pattern
+              (the  ``#\b#''  case)  or  the longest matching pattern (the ``#\b##\b#''
+              case) deleted.  If _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br is @\b@ or *\b*, the pattern removal  op-
               eration is applied to each positional parameter in turn, and the
               expansion is the resultant list.  If _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br is an array vari-
-              able subscripted with @\b@ or *\b*, the pattern removal  operation  is
-              applied  to  each member of the array in turn, and the expansion
+              able  subscripted  with @\b@ or *\b*, the pattern removal operation is
+              applied to each member of the array in turn, and  the  expansion
               is the resultant list.
 
        ${_\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br%\b%_\bw_\bo_\br_\bd}
@@ -1783,100 +1824,132 @@ E\bEX\bXP\bPA\bAN\bNS\bSI\bIO\bON\bN
               R\bRe\bem\bmo\bov\bve\be m\bma\bat\btc\bch\bhi\bin\bng\bg s\bsu\buf\bff\bfi\bix\bx p\bpa\bat\btt\bte\ber\brn\bn.  The _\bw_\bo_\br_\bd is expanded to produce
               a pattern just as in pathname expansion, and matched against the
               expanded value of _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br using the rules described under P\bPa\bat\bt-\b-
-              t\bte\ber\brn\b M\bMa\bat\btc\bch\bhi\bin\bng\bg below.  If the pattern matches a trailing portion
-              of the expanded value of _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br, then the result of  the  ex-
-              pansion  is  the  expanded  value of _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br with the shortest
-              matching pattern (the ``%\b%'' case) or the longest  matching  pat-
-              tern  (the  ``%\b%%\b%''  case)  deleted.  If _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br is @\b@ or *\b*, the
-              pattern removal operation is applied to each positional  parame-
+              t\bte\ber\brn\bM\bMa\bat\btc\bch\bhi\bin\bng\bg below.  If the pattern matches a trailing  portion
+              of  the  expanded value of _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br, then the result of the ex-
+              pansion is the expanded value of  _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br  with  the  shortest
+              matching  pattern  (the ``%\b%'' case) or the longest matching pat-
+              tern (the ``%\b%%\b%'' case) deleted.  If _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br is  @\b@  or  *\b*,  the
+              pattern  removal operation is applied to each positional parame-
               ter in turn, and the expansion is the resultant list.  If _\bp_\ba_\br_\ba_\bm_\b-
-              _\be_\bt_\be_\bis an array variable subscripted with @\b@ or *\b*,  the  pattern
-              removal  operation  is  applied  to  each member of the array in
+              _\be_\bt_\be_\b is  an array variable subscripted with @\b@ or *\b*, the pattern
+              removal operation is applied to each  member  of  the  array  in
               turn, and the expansion is the resultant list.
 
        ${_\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br/\b/_\bp_\ba_\bt_\bt_\be_\br_\bn/\b/_\bs_\bt_\br_\bi_\bn_\bg}
+       ${_\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br/\b//\b/_\bp_\ba_\bt_\bt_\be_\br_\bn/\b/_\bs_\bt_\br_\bi_\bn_\bg}
+       ${_\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br/\b/#\b#_\bp_\ba_\bt_\bt_\be_\br_\bn/\b/_\bs_\bt_\br_\bi_\bn_\bg}
+       ${_\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br/\b/%\b%_\bp_\ba_\bt_\bt_\be_\br_\bn/\b/_\bs_\bt_\br_\bi_\bn_\bg}
               P\bPa\bat\btt\bte\ber\brn\bn s\bsu\bub\bbs\bst\bti\bit\btu\but\bti\bio\bon\bn.  The _\bp_\ba_\bt_\bt_\be_\br_\bn is expanded to produce a pat-
-              tern  just  as  in pathname expansion, _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br is expanded and
-              the longest match of _\bp_\ba_\bt_\bt_\be_\br_\bn against its value is replaced  with
-              _\bs_\bt_\br_\bi_\bn_\bg.   The match is performed using the rules described under
-              P\bPa\bat\btt\bte\ber\brn\bn M\bMa\bat\btc\bch\bhi\bin\bng\bg below.  If _\bp_\ba_\bt_\bt_\be_\br_\bn begins with /\b/,  all  matches
-              of  _\bp_\ba_\bt_\bt_\be_\br_\bn  are  replaced with _\bs_\bt_\br_\bi_\bn_\bg.  Normally only the first
-              match is replaced.  If _\bp_\ba_\bt_\bt_\be_\br_\bn begins with #\b#, it must  match  at
-              the  beginning  of  the expanded value of _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br.  If _\bp_\ba_\bt_\bt_\be_\br_\bn
-              begins with %\b%, it must match at the end of the expanded value of
-              _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br.   If  _\bs_\bt_\br_\bi_\bn_\bg  is null, matches of _\bp_\ba_\bt_\bt_\be_\br_\bn are deleted
-              and the /\b/ following _\bp_\ba_\bt_\bt_\be_\br_\bn may be omitted.  If the  n\bno\boc\bca\bas\bse\bem\bma\bat\btc\bch\bh
-              shell  option  is enabled, the match is performed without regard
-              to the case of alphabetic characters.  If _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br is @\b@  or  *\b*,
-              the substitution operation is applied to each positional parame-
-              ter in turn, and the expansion is the resultant list.  If _\bp_\ba_\br_\ba_\bm_\b-
-              _\be_\bt_\be_\br is an array variable subscripted with @\b@ or *\b*, the substitu-
-              tion operation is applied to each member of the array  in  turn,
-              and the expansion is the resultant list.
+              tern just as in pathname expansion.  _\bP_\ba_\br_\ba_\bm_\be_\bt_\be_\br is  expanded  and
+              the  longest match of _\bp_\ba_\bt_\bt_\be_\br_\bn against its value is replaced with
+              _\bs_\bt_\br_\bi_\bn_\bg.  _\bs_\bt_\br_\bi_\bn_\bg 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 P\bPa\bat\btt\bte\ber\brn\bn M\bMa\bat\btc\bch\bhi\bin\bng\bg below.  In the first form
+              above, only the first match  is  replaced.   If  there  are  two
+              slashes  separating  _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br  and  _\bp_\ba_\bt_\bt_\be_\br_\bn  (the  second  form
+              above), all matches of _\bp_\ba_\bt_\bt_\be_\br_\bn are  replaced  with  _\bs_\bt_\br_\bi_\bn_\bg.   If
+              _\bp_\ba_\bt_\bt_\be_\br_\bn  is  preceded by #\b# (the third form above), it must match
+              at the beginning of the expanded value of _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br.  If _\bp_\ba_\bt_\bt_\be_\br_\bn
+              is  preceded  by %\b% (the fourth form above), it must match at the
+              end of the expanded value of _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br.   If  the  expansion  of
+              _\bs_\bt_\br_\bi_\bn_\bg  is  null,  matches of _\bp_\ba_\bt_\bt_\be_\br_\bn are deleted.  If _\bs_\bt_\br_\bi_\bn_\bg is
+              null, matches of _\bp_\ba_\bt_\bt_\be_\br_\bn are deleted and the /\b/ following _\bp_\ba_\bt_\bt_\be_\br_\bn
+              may be omitted.
+
+              If  the  p\bpa\bat\bts\bsu\bub\bb_\b_r\bre\bep\bpl\bla\bac\bce\bem\bme\ben\bnt\bt shell option is enabled using s\bsh\bho\bop\bpt\bt,
+              any unquoted instances of &\b& in  _\bs_\bt_\br_\bi_\bn_\bg  are  replaced  with  the
+              matching portion of _\bp_\ba_\bt_\bt_\be_\br_\bn.
+
+              Quoting any part of _\bs_\bt_\br_\bi_\bn_\bg inhibits replacement in the expansion
+              of the quoted portion, including replacement strings  stored  in
+              shell  variables.   Backslash will escape &\b& in _\bs_\bt_\br_\bi_\bn_\bg; the back-
+              slash is removed in order to permit a literal &\b& in the  replace-
+              ment  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 _\bs_\bt_\br_\bi_\bn_\bg 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&  after  expanding
+              _\bs_\bt_\br_\bi_\bn_\bg; shell programmers should quote any occurrences of &\b& they
+              want to be taken literally in the replacement and ensure any in-
+              stances of &\b& they want to be replaced are unquoted.
+
+              If  the  n\bno\boc\bca\bas\bse\bem\bma\bat\btc\bch\bh  shell option is enabled, the match is per-
+              formed without regard to the case of alphabetic characters.   If
+              _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br  is  @\b@  or *\b*, the substitution operation is applied to
+              each positional parameter in turn, and the expansion is the  re-
+              sultant  list.   If  _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br  is an array variable subscripted
+              with @\b@ or *\b*, the substitution operation is applied to each  mem-
+              ber  of  the  array  in turn, and the expansion is the resultant
+              list.
 
        ${_\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br^\b^_\bp_\ba_\bt_\bt_\be_\br_\bn}
        ${_\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br^\b^^\b^_\bp_\ba_\bt_\bt_\be_\br_\bn}
        ${_\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br,\b,_\bp_\ba_\bt_\bt_\be_\br_\bn}
        ${_\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br,\b,,\b,_\bp_\ba_\bt_\bt_\be_\br_\bn}
-              C\bCa\bas\bse\b m\bmo\bod\bdi\bif\bfi\bic\bca\bat\bti\bio\bon\bn.   This expansion modifies the case of alpha-
-              betic characters in _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br.  The _\bp_\ba_\bt_\bt_\be_\br_\bn is expanded to  pro-
+              C\bCa\bas\bse\bm\bmo\bod\bdi\bif\bfi\bic\bca\bat\bti\bio\bon\bn.  This expansion modifies the case  of  alpha-
+              betic  characters in _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br.  The _\bp_\ba_\bt_\bt_\be_\br_\bn is expanded to pro-
               duce a pattern just as in pathname expansion.  Each character in
-              the expanded value of _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br is tested against _\bp_\ba_\bt_\bt_\be_\br_\bn,  and,
-              if  it  matches the pattern, its case is converted.  The pattern
-              should not attempt to match more than one character.  The ^\b op-
+              the  expanded value of _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br is tested against _\bp_\ba_\bt_\bt_\be_\br_\bn, and,
+              if it matches the pattern, its case is converted.   The  pattern
+              should  not attempt to match more than one character.  The ^\b^ op-
               erator converts lowercase letters matching _\bp_\ba_\bt_\bt_\be_\br_\bn to uppercase;
               the ,\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^ and ,\b, expansions match  and  convert  only
-              the  first character in the expanded value.  If _\bp_\ba_\bt_\bt_\be_\br_\bn is omit-
-              ted, it is treated like a ?\b?, which matches every character.   If
-              _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\b is @\b@ or *\b*, the case modification operation is applied
-              to each positional parameter in turn, and the expansion  is  the
-              resultant  list.   If _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br is an array variable subscripted
-              with @\b@ or *\b*, the case modification operation is applied to  each
-              member  of the array in turn, and the expansion is the resultant
+              The ^\b^^\b^ and ,\b,,\b, expansions convert each matched character  in  the
+              expanded  value;  the  ^\b^ and ,\b, expansions match and convert only
+              the first character in the expanded value.  If _\bp_\ba_\bt_\bt_\be_\br_\bn is  omit-
+              ted,  it is treated like a ?\b?, which matches every character.  If
+              _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\bis @\b@ or *\b*, the case modification operation is  applied
+              to  each  positional parameter in turn, and the expansion is the
+              resultant list.  If _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br is an array  variable  subscripted
+              with  @\b@ or *\b*, the case modification operation is applied to each
+              member of the array in turn, and the expansion is the  resultant
               list.
 
        ${_\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br@\b@_\bo_\bp_\be_\br_\ba_\bt_\bo_\br}
               P\bPa\bar\bra\bam\bme\bet\bte\ber\br t\btr\bra\ban\bns\bsf\bfo\bor\brm\bma\bat\bti\bio\bon\bn.  The expansion is either a transforma-
-              tion  of  the  value of _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br or information about _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br
-              itself, depending on the value of _\bo_\bp_\be_\br_\ba_\bt_\bo_\br.  Each _\bo_\bp_\be_\br_\ba_\bt_\bo_\br is  a
+              tion of the value of _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br or  information  about  _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br
+              itself,  depending on the value of _\bo_\bp_\be_\br_\ba_\bt_\bo_\br.  Each _\bo_\bp_\be_\br_\ba_\bt_\bo_\br is a
               single letter:
 
-              U\bU      The  expansion is a string that is the value of _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br
-                     with lowercase alphabetic characters converted to  upper-
+              U\bU      The expansion is a string that is the value of  _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br
+                     with  lowercase alphabetic characters converted to upper-
                      case.
-              u\bu      The  expansion is a string that is the value of _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br
+              u\bu      The expansion is a string that is the value of  _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br
                      with the first character converted to uppercase, if it is
                      alphabetic.
-              L\bL      The  expansion is a string that is the value of _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br
-                     with uppercase alphabetic characters converted to  lower-
+              L\bL      The expansion is a string that is the value of  _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br
+                     with  uppercase alphabetic characters converted to lower-
                      case.
-              Q\bQ      The  expansion is a string that is the value of _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br
+              Q\bQ      The expansion is a string that is the value of  _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br
                      quoted in a format that can be reused as input.
-              E\bE      The expansion is a string that is the value of  _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br
-                     with  backslash  escape  sequences  expanded  as with the
+              E\bE      The  expansion is a string that is the value of _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br
+                     with backslash escape  sequences  expanded  as  with  the
                      $\b$'\b'.\b..\b..\b.'\b' quoting mechanism.
               P\bP      The expansion is a string that is the result of expanding
                      the value of _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br as if it were a prompt string (see
                      P\bPR\bRO\bOM\bMP\bPT\bTI\bIN\bNG\bG below).
-              A\bA      The expansion is a string in the form  of  an  assignment
-                     statement  or  d\bde\bec\bcl\bla\bar\bre\be  command  that, if evaluated, will
+              A\bA      The  expansion  is  a string in the form of an assignment
+                     statement or d\bde\bec\bcl\bla\bar\bre\be command  that,  if  evaluated,  will
                      recreate _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br with its attributes and value.
               K\bK      Produces a possibly-quoted version of the value of _\bp_\ba_\br_\ba_\bm_\b-
                      _\be_\bt_\be_\br, except that it prints the values of indexed and as-
-                     sociative arrays as a sequence of quoted key-value  pairs
+                     sociative  arrays as a sequence of quoted key-value pairs
                      (see A\bAr\brr\bra\bay\bys\bs above).
-              a\ba      The  expansion is a string consisting of flag values rep-
+              a\ba      The expansion is a string consisting of flag values  rep-
                      resenting _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br's attributes.
+              k\bk      Like  the K transformation, but expands the keys and val-
+                     ues of indexed and associative arrays to  separate  words
+                     after word splitting.
 
-              If _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br is @\b@ or *\b*, the operation is applied to  each  posi-
-              tional  parameter  in  turn,  and the expansion is the resultant
-              list.  If _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br is an array variable subscripted with  @\b or
+              If  _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br  is @\b@ or *\b*, the operation is applied to each posi-
+              tional parameter in turn, and the  expansion  is  the  resultant
+              list.   If  _\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br is an array variable subscripted with @\b@ or
               *\b*, 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
+              The  result  of  the  expansion is subject to word splitting and
               pathname expansion as described below.
 
    C\bCo\bom\bmm\bma\ban\bnd\bd S\bSu\bub\bbs\bst\bti\bit\btu\but\bti\bio\bon\bn
@@ -1890,108 +1963,111 @@ E\bEX\bXP\bPA\bAN\bNS\bSI\bIO\bON\bN
        B\bBa\bas\bsh\bh performs the expansion by executing _\bc_\bo_\bm_\bm_\ba_\bn_\bd 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 $\b$(\b(c\bca\bat\bt _\bf_\bi_\bl_\be)\b) can be replaced  by  the  equivalent  but
+       not deleted, but they may be removed during word splitting.   The  com-
+       mand  substitution  $\b$(\b(c\bca\bat\bt  _\bf_\bi_\bl_\be)\b)  can be replaced by the equivalent but
        faster $\b$(\b(<\b< _\bf_\bi_\bl_\be)\b).
 
-       When  the  old-style  backquote form of substitution is used, backslash
-       retains its literal meaning except when followed by $\b$, `\b`,  or  \\b\.   The
+       When the old-style backquote form of substitution  is  used,  backslash
+       retains  its  literal  meaning except when followed by $\b$, `\b`, or \\b\.  The
        first backquote not preceded by a backslash terminates the command sub-
-       stitution.  When using the $(_\bc_\bo_\bm_\bm_\ba_\bn_\bd) form, all characters between  the
+       stitution.   When using the $(_\bc_\bo_\bm_\bm_\ba_\bn_\bd) 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
+       If  the  substitution  appears within double quotes, word splitting and
        pathname expansion are not performed on the results.
 
    A\bAr\bri\bit\bth\bhm\bme\bet\bti\bic\bc E\bEx\bxp\bpa\ban\bns\bsi\bio\bon\bn
-       Arithmetic  expansion allows the evaluation of an arithmetic expression
-       and the substitution of the result.  The format for  arithmetic  expan-
+       Arithmetic expansion allows the evaluation of an arithmetic  expression
+       and  the  substitution of the result.  The format for arithmetic expan-
        sion is:
 
               $\b$(\b((\b(_\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn)\b))\b)
 
-       The  _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn  is  treated  as if it were within double quotes, but a
-       double quote inside the parentheses is not treated specially.  All  to-
-       kens  in  the expression undergo parameter and variable expansion, com-
-       mand substitution, and quote removal.  The result  is  treated  as  the
-       arithmetic  expression  to  be evaluated.  Arithmetic expansions may be
-       nested.
+       The _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn undergoes the same expansions as if it were within  dou-
+       ble  quotes,  but double quote characters in _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn 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
+       The  evaluation  is performed according to the rules listed below under
        A\bAR\bRI\bIT\bTH\bHM\bME\bET\bTI\bIC\bC E\bEV\bVA\bAL\bLU\bUA\bAT\bTI\bIO\bON\bN.  If _\be_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn is invalid, b\bba\bas\bsh\bh prints a message
        indicating failure and no substitution occurs.
 
    P\bPr\bro\boc\bce\bes\bss\bs S\bSu\bub\bbs\bst\bti\bit\btu\but\bti\bio\bon\bn
-       _\bP_\br_\bo_\bc_\be_\bs_\b_\bs_\bu_\bb_\bs_\bt_\bi_\bt_\bu_\bt_\bi_\bo_\bn allows a process's input or output to be  referred
-       to  using  a  filename.   It takes the form of <\b<(\b(_\bl_\bi_\bs_\bt)\b) or >\b>(\b(_\bl_\bi_\bs_\bt)\b).  The
-       process _\bl_\bi_\bs_\bt is run asynchronously, and its input or output appears  as
+       _\bP_\br_\bo_\bc_\be_\bs_\b _\bs_\bu_\bb_\bs_\bt_\bi_\bt_\bu_\bt_\bi_\bo_\bn allows a process's input or output to be referred
+       to using a filename.  It takes the form of  <\b<(\b(_\bl_\bi_\bs_\bt)\b)  or  >\b>(\b(_\bl_\bi_\bs_\bt)\b).   The
+       process  _\bl_\bi_\bs_\bt 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  >\b>(\b(_\bl_\bi_\bs_\bt)\b)  form  is  used,
-       writing  to  the file will provide input for _\bl_\bi_\bs_\bt.  If the <\b<(\b(_\bl_\bi_\bs_\bt)\b) form
-       is used, the file passed as an argument should be read  to  obtain  the
+       mand  as  the  result  of  the expansion.  If the >\b>(\b(_\bl_\bi_\bs_\bt)\b) form is used,
+       writing to the file will provide input for _\bl_\bi_\bs_\bt.  If the  <\b<(\b(_\bl_\bi_\bs_\bt)\b form
+       is  used,  the  file passed as an argument should be read to obtain the
        output of _\bl_\bi_\bs_\bt.  Process substitution is supported on systems that sup-
        port named pipes (_\bF_\bI_\bF_\bO_\bs) or the /\b/d\bde\bev\bv/\b/f\bfd\bd method of naming open files.
 
-       When available, process substitution is performed  simultaneously  with
-       parameter  and variable expansion, command substitution, and arithmetic
+       When  available,  process substitution is performed simultaneously with
+       parameter and variable expansion, command substitution, and  arithmetic
        expansion.
 
    W\bWo\bor\brd\bd S\bSp\bpl\bli\bit\btt\bti\bin\bng\bg
-       The shell scans the results of parameter expansion,  command  substitu-
-       tion,  and arithmetic expansion that did not occur within double quotes
+       The  shell  scans the results of parameter expansion, command substitu-
+       tion, and arithmetic expansion that did not occur within double  quotes
        for _\bw_\bo_\br_\bd _\bs_\bp_\bl_\bi_\bt_\bt_\bi_\bn_\bg.
 
-       The shell treats each character of I\bIF\bFS\bS as a delimiter, and  splits  the
-       results  of  the  other expansions into words using these characters as
-       field  terminators.   If  I\bIF\bFS\bS  is  unset,  or  its  value  is   exactly
-       <\b<s\bsp\bpa\bac\bce\be>\b><\b<t\bta\bab\bb>\b><\b<n\bne\bew\bwl\bli\bin\bne\be>\b>,  the  default, then sequences of <\b<s\bsp\bpa\bac\bce\be>\b>, <\b<t\bta\bab\bb>\b>,
-       and <\b<n\bne\bew\bwl\bli\bin\bne\be>\b> at the beginning and end of the results of  the  previous
-       expansions  are  ignored, and any sequence of I\bIF\bFS\bS characters not at the
-       beginning or end serves to delimit words.  If I\bIF\bFS\bS  has  a  value  other
-       than  the  default,  then sequences of the whitespace characters s\bsp\bpa\bac\bce\be,
-       t\bta\bab\bb, and n\bne\bew\bwl\bli\bin\bne\be are ignored at the beginning and end of the  word,  as
-       long  as the whitespace character is in the value of I\bIF\bFS\bS (an I\bIF\bFS\bS white-
-       space character).  Any character in I\bIF\bFS\bS that  is  not  I\bIF\bFS\b whitespace,
+       The  shell  treats each character of I\bIF\bFS\bS as a delimiter, and splits the
+       results of the other expansions into words using  these  characters  as
+       field   terminators.   If  I\bIF\bFS\bS  is  unset,  or  its  value  is  exactly
+       <\b<s\bsp\bpa\bac\bce\be>\b><\b<t\bta\bab\bb>\b><\b<n\bne\bew\bwl\bli\bin\bne\be>\b>, the default, then sequences of  <\b<s\bsp\bpa\bac\bce\be>\b>,  <\b<t\bta\bab\bb>\b>,
+       and  <\b<n\bne\bew\bwl\bli\bin\bne\be>\b>  at the beginning and end of the results of the previous
+       expansions are ignored, and any sequence of I\bIF\bFS\bS characters not  at  the
+       beginning  or  end  serves  to delimit words.  If I\bIF\bFS\bS has a value other
+       than the default, then sequences of the  whitespace  characters  s\bsp\bpa\bac\bce\be,
+       t\bta\bab\bb,  and  n\bne\bew\bwl\bli\bin\bne\be are ignored at the beginning and end of the word, as
+       long as the whitespace character is in the value of I\bIF\bFS\bS (an I\bIF\bFS\b white-
+       space  character).   Any  character  in I\bIF\bFS\bS that is not I\bIF\bFS\bS whitespace,
        along with any adjacent I\bIF\bFS\bS whitespace characters, delimits a field.  A
-       sequence of I\bIF\bFS\bS whitespace characters is also treated as  a  delimiter.
+       sequence  of  I\bIF\bFS\bS whitespace characters is also treated as a delimiter.
        If the value of I\bIF\bFS\bS is null, no word splitting occurs.
 
-       Explicit  null arguments ("\b""\b" or '\b''\b') are retained and passed to commands
+       Explicit null arguments ("\b""\b" or '\b''\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 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
+       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.
 
    P\bPa\bat\bth\bhn\bna\bam\bme\be E\bEx\bxp\bpa\ban\bns\bsi\bio\bon\bn
-       After word splitting, unless the -\b-f\bf option has  been  set,  b\bba\bas\bsh\b scans
-       each  word  for the characters *\b*, ?\b?, and [\b[.  If one of these characters
+       After  word  splitting,  unless  the -\b-f\bf option has been set, b\bba\bas\bsh\bh scans
+       each word for the characters *\b*, ?\b?, and [\b[.  If one of  these  characters
        appears, and is not quoted, then the word is regarded as a _\bp_\ba_\bt_\bt_\be_\br_\bn, and
-       replaced  with  an alphabetically sorted list of filenames matching the
-       pattern (see P\bPa\bat\btt\bte\ber\brn\bn M\bMa\bat\btc\bch\bhi\bin\bng\bg below).  If  no  matching  filenames  are
-       found,  and  the shell option n\bnu\bul\bll\blg\bgl\blo\bob\bb is not enabled, the word is left
-       unchanged.  If the n\bnu\bul\bll\blg\bgl\blo\bob\bb option is set, and no  matches  are  found,
-       the  word  is  removed.   If  the  f\bfa\bai\bil\blg\bgl\blo\bob\bb shell option is set, and no
-       matches are found, an error message is printed and the command  is  not
+       replaced with an alphabetically sorted list of filenames  matching  the
+       pattern  (see  P\bPa\bat\btt\bte\ber\brn\bn  M\bMa\bat\btc\bch\bhi\bin\bng\bg  below).  If no matching filenames are
+       found, and the shell option n\bnu\bul\bll\blg\bgl\blo\bob\bb is not enabled, the word  is  left
+       unchanged.   If  the  n\bnu\bul\bll\blg\bgl\blo\bob\bb option is set, and no matches are found,
+       the word is removed.  If the f\bfa\bai\bil\blg\bgl\blo\bob\bb  shell  option  is  set,  and  no
+       matches  are  found, an error message is printed and the command is not
        executed.  If the shell option n\bno\boc\bca\bas\bse\beg\bgl\blo\bob\bb 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 `\b``\b`.\b.'\b''\b'  at the
-       start of a name or immediately following a slash must  be  matched  ex-
-       plicitly,  unless the shell option d\bdo\bot\btg\bgl\blo\bob\bb is set.  The filenames `\b``\b`.\b.'\b''\b'
-       and `\b``\b`.\b..\b.'\b''\b'  must always be matched explicitly, even if d\bdo\bot\btg\bgl\blo\bob\bb is  set.
-       In  other  cases,  the `\b``\b`.\b.'\b''\b'  character is not treated specially.  When
-       matching a pathname, the slash character must always be matched explic-
-       itly  by  a slash in the pattern, but in other matching contexts it can
-       be matched by a special pattern character as described below under P\bPa\bat\bt-\b-
-       t\bte\ber\brn\bn  M\bMa\bat\btc\bch\bhi\bin\bng\bg.  See the description of s\bsh\bho\bop\bpt\bt below under S\bSH\bHE\bEL\bLL\bL B\bBU\bUI\bIL\bLT\bTI\bIN\bN
-       C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS for a description of the n\bno\boc\bca\bas\bse\beg\bgl\blo\bob\bb, n\bnu\bul\bll\blg\bgl\blo\bob\bb,  f\bfa\bai\bil\blg\bgl\blo\bob\bb,  and
+       formed  without  regard  to  the case of alphabetic characters.  When a
+       pattern is used for pathname expansion, the  character  `\b``\b`.\b.'\b''\b'   at  the
+       start  of  a  name or immediately following a slash must be matched ex-
+       plicitly, unless the shell option d\bdo\bot\btg\bgl\blo\bob\bb is set.  In  order  to  match
+       the filenames `\b``\b`.\b.'\b''\b'  and `\b``\b`.\b..\b.'\b''\b', the pattern must begin with ``.'' (for
+       example, ``.?''), even if d\bdo\bot\btg\bgl\blo\bob\bb is set.  If  the  g\bgl\blo\bob\bbs\bsk\bki\bip\bpd\bdo\bot\bts\bs  shell
+       option  is enabled, the filenames `\b``\b`.\b.'\b''\b'  and `\b``\b`.\b..\b.'\b''\b'  are never matched,
+       even if the pattern begins with a `\b``\b`.\b.'\b''\b'.  When not matching  pathnames,
+       the  `\b``\b`.\b.'\b''\b'   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  P\bPa\bat\btt\bte\ber\brn\bn  M\bMa\bat\btc\bch\bhi\bin\bng\bg.
+       See  the  description of s\bsh\bho\bop\bpt\bt below under S\bSH\bHE\bEL\bLL\bL B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS for a
+       description of the n\bno\boc\bca\bas\bse\beg\bgl\blo\bob\bb, n\bnu\bul\bll\blg\bgl\blo\bob\bb,  g\bgl\blo\bob\bbs\bsk\bki\bip\bpd\bdo\bot\bts\bs,  f\bfa\bai\bil\blg\bgl\blo\bob\bb,  and
        d\bdo\bot\btg\bgl\blo\bob\bb shell options.
 
        The  G\bGL\bLO\bOB\bBI\bIG\bGN\bNO\bOR\bRE\bE  shell variable may be used to restrict the set of file
@@ -2033,38 +2109,39 @@ E\bEX\bXP\bPA\bAN\bNS\bSI\bIO\bON\bN
                      quence and character set, is matched.  If the first char-
                      acter following the [\b[ is a !\b!  or a ^\b^ then  any  character
                      not enclosed is matched.  The sorting order of characters
-                     in range expressions is determined by the current  locale
-                     and  the  values  of the L\bLC\bC_\b_C\bCO\bOL\bLL\bLA\bAT\bTE\bE or L\bLC\bC_\b_A\bAL\bLL\bL shell vari-
-                     ables, if set.  To obtain the traditional  interpretation
-                     of  range  expressions,  where  [\b[a\ba-\b-d\bd]\b]  is  equivalent  to
-                     [\b[a\bab\bbc\bcd\bd]\b], set value of the L\bLC\bC_\b_A\bAL\bLL\bL shell variable to  C\bC,  or
-                     enable  the  g\bgl\blo\bob\bba\bas\bsc\bci\bii\bir\bra\ban\bng\bge\bes\bs  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.
-
-                     Within [\b[ and ]\b], _\bc_\bh_\ba_\br_\ba_\bc_\bt_\be_\br _\bc_\bl_\ba_\bs_\bs_\be_\bs can be specified  using
+                     in range expressions, and the characters included in  the
+                     range,  are determined by the current locale and the val-
+                     ues of the L\bLC\bC_\b_C\bCO\bOL\bLL\bLA\bAT\bTE\bE or L\bLC\bC_\b_A\bAL\bLL\bL shell variables, if  set.
+                     To obtain the traditional interpretation of range expres-
+                     sions, where [\b[a\ba-\b-d\bd]\b] is equivalent to [\b[a\bab\bbc\bcd\bd]\b], set value  of
+                     the  L\bLC\bC_\b_A\bAL\bLL\bL  shell variable to C\bC, or enable the g\bgl\blo\bob\bba\bas\bsc\bci\bi-\b-
+                     i\bir\bra\ban\bng\bge\bes\bs 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.
+
+                     Within  [\b[ and ]\b], _\bc_\bh_\ba_\br_\ba_\bc_\bt_\be_\br _\bc_\bl_\ba_\bs_\bs_\be_\bs can be specified using
                      the syntax [\b[:\b:_\bc_\bl_\ba_\bs_\bs:\b:]\b], where _\bc_\bl_\ba_\bs_\bs is one of the following
                      classes defined in the POSIX standard:
-                     a\bal\bln\bnu\bum\ba\bal\blp\bph\bha\ba a\bas\bsc\bci\bii\bi b\bbl\bla\ban\bnk\bk c\bcn\bnt\btr\brl\bl  d\bdi\big\bgi\bit\bt  g\bgr\bra\bap\bph\bh  l\blo\bow\bwe\ber\b p\bpr\bri\bin\bnt\bt
+                     a\bal\bln\bnu\bum\b a\bal\blp\bph\bha\ba  a\bas\bsc\bci\bii\bi  b\bbl\bla\ban\bnk\bk  c\bcn\bnt\btr\brl\bl d\bdi\big\bgi\bit\bt g\bgr\bra\bap\bph\bh l\blo\bow\bwe\ber\br p\bpr\bri\bin\bnt\bt
                      p\bpu\bun\bnc\bct\bt s\bsp\bpa\bac\bce\be u\bup\bpp\bpe\ber\br w\bwo\bor\brd\bd x\bxd\bdi\big\bgi\bit\bt
                      A character class matches any character belonging to that
                      class.  The w\bwo\bor\brd\bd character class matches letters, digits,
                      and the character _.
 
                      Within [\b[ and ]\b], an _\be_\bq_\bu_\bi_\bv_\ba_\bl_\be_\bn_\bc_\be _\bc_\bl_\ba_\bs_\bs can be specified us-
-                     ing the syntax [\b[=\b=_\bc=\b=]\b], which matches all  characters  with
-                     the  same collation weight (as defined by the current lo-
+                     ing  the  syntax [\b[=\b=_\bc=\b=]\b], which matches all characters with
+                     the same collation weight (as defined by the current  lo-
                      cale) as the character _\bc.
 
                      Within [\b[ and ]\b], the syntax [\b[.\b._\bs_\by_\bm_\bb_\bo_\bl.\b.]\b] matches the collat-
                      ing symbol _\bs_\by_\bm_\bb_\bo_\bl.
 
-       If the e\bex\bxt\btg\bgl\blo\bob\bb shell option is enabled using the s\bsh\bho\bop\bpt\bt builtin, several
-       extended pattern matching operators are recognized.  In  the  following
-       description, a _\bp_\ba_\bt_\bt_\be_\br_\bn_\b-_\bl_\bi_\bs_\bt is a list of one or more patterns separated
-       by a |\b|.  Composite patterns may be formed using one or more of the fol-
-       lowing sub-patterns:
+       If the e\bex\bxt\btg\bgl\blo\bob\bb shell option is enabled using  the  s\bsh\bho\bop\bpt\bt  builtin,  the
+       shell  recognizes  several extended pattern matching operators.  In the
+       following description, a _\bp_\ba_\bt_\bt_\be_\br_\bn_\b-_\bl_\bi_\bs_\bt is a list of one or more patterns
+       separated  by  a |\b|.  Composite patterns may be formed using one or more
+       of the following sub-patterns:
 
               ?\b?(\b(_\bp_\ba_\bt_\bt_\be_\br_\bn_\b-_\bl_\bi_\bs_\bt)\b)
                      Matches zero or one occurrence of the given patterns
@@ -2077,35 +2154,50 @@ E\bEX\bXP\bPA\bAN\bNS\bSI\bIO\bON\bN
               !\b!(\b(_\bp_\ba_\bt_\bt_\be_\br_\bn_\b-_\bl_\bi_\bs_\bt)\b)
                      Matches anything except one of the given patterns
 
+       Thee\bex\bxt\btg\bgl\blo\bob\bb 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  e\bex\bxt\btg\bgl\blo\bob\bb  is enabled before parsing constructs containing the pat-
+       terns, including shell functions and command substitutions.
+
+       When matching filenames, the d\bdo\bot\btg\bgl\blo\bob\bb shell option determines the set of
+       filenames  that  are  tested: when d\bdo\bot\btg\bgl\blo\bob\bb 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
+       multiple matches.  Using separate matches against shorter  strings,  or
        using arrays of strings instead of a single long string, may be faster.
 
    Q\bQu\buo\bot\bte\be R\bRe\bem\bmo\bov\bva\bal\bl
        After the preceding expansions, all unquoted occurrences of the charac-
-       ters  \\b\,  '\b', and "\b" that did not result from one of the above expansions
+       ters \\b\, '\b', and "\b" that did not result from one of the  above  expansions
        are removed.
 
 R\bRE\bED\bDI\bIR\bRE\bEC\bCT\bTI\bIO\bON\bN
-       Before a command is executed, its input and output  may  be  _\br_\be_\bd_\bi_\br_\be_\bc_\bt_\be_\bd
-       using  a special notation interpreted by the shell.  Redirection allows
-       commands' file handles to be duplicated, opened, closed, made to  refer
+       Before  a  command  is executed, its input and output may be _\br_\be_\bd_\bi_\br_\be_\bc_\bt_\be_\bd
+       using a special notation interpreted by the shell.  _\bR_\be_\bd_\bi_\br_\be_\bc_\bt_\bi_\bo_\b 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-
+       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 _\bs_\bi_\bm_\bp_\bl_\be _\bc_\bo_\bm_\bm_\ba_\bn_\bd or may fol-
-       low  a  _\bc_\bo_\bm_\bm_\ba_\bn_\bd.   Redirections are processed in the order they appear,
+       low a _\bc_\bo_\bm_\bm_\ba_\bn_\bd.  Redirections are processed in the  order  they  appear,
        from left to right.
 
-       Each redirection that may be preceded by a file descriptor  number  may
+       Each  redirection  that may be preceded by a file descriptor number may
        instead be preceded by a word of the form {_\bv_\ba_\br_\bn_\ba_\bm_\be}.  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 _\bv_\ba_\br_\bn_\ba_\bm_\be.
-       If >&- or <&- is preceded by {_\bv_\ba_\br_\bn_\ba_\bm_\be}, the value  of  _\bv_\ba_\br_\bn_\ba_\bm_\be  defines
-       the  file descriptor to close.  If {_\bv_\ba_\br_\bn_\ba_\bm_\be} is supplied, the redirect-
-       ion persists beyond the scope of the command, allowing the  shell  pro-
-       grammer to manage the file descriptor himself.
+       file descriptor greater than or equal to 10 and assign it  to  _\bv_\ba_\br_\bn_\ba_\bm_\be.
+       If  >&-  or  <&- is preceded by {_\bv_\ba_\br_\bn_\ba_\bm_\be}, the value of _\bv_\ba_\br_\bn_\ba_\bm_\be defines
+       the file descriptor to close.  If {_\bv_\ba_\br_\bn_\ba_\bm_\be} 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
+       v\bva\bar\brr\bre\bed\bdi\bir\br_\b_c\bcl\blo\bos\bse\be 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 <\b<, the  re-
@@ -2344,87 +2436,95 @@ A\bAL\bLI\bIA\bAS\bSE\bES\bS
        the u\bun\bna\bal\bli\bia\bas\bs command.
 
        There  is no mechanism for using arguments in the replacement text.  If
-       arguments are needed, a shell function should be  used  (see  F\bFU\bUN\bNC\bCT\bTI\bIO\bON\bNS\bS
-       below).
+       arguments are needed, use a shell function (see F\bFU\bUN\bNC\bCT\bTI\bIO\bON\bNS\bS below).
 
-       Aliases  are not expanded when the shell is not interactive, unless the
-       e\bex\bxp\bpa\ban\bnd\bd_\b_a\bal\bli\bia\bas\bse\bes\bshell option is set using s\bsh\bho\bop\bpt\bt (see the description  of
+       Aliases are not expanded when the shell is not interactive, unless  the
+       e\bex\bxp\bpa\ban\bnd\bd_\b_a\bal\bli\bia\bas\bse\bes\b shell option is set using s\bsh\bho\bop\bpt\bt (see the description of
        s\bsh\bho\bop\bpt\bt under S\bSH\bHE\bEL\bLL\bL B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS below).
 
-       The  rules  concerning  the  definition and use of aliases are somewhat
-       confusing.  B\bBa\bas\bsh\bh 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-
+       The rules concerning the definition and use  of  aliases  are  somewhat
+       confusing.   B\bBa\bas\bsh\bh 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 a\bal\bli\bia\bas\bs in compound commands.
 
        For almost every purpose, aliases are superseded by shell functions.
 
 F\bFU\bUN\bNC\bCT\bTI\bIO\bON\bNS\bS
-       A shell function, defined  as  described  above  under  S\bSH\bHE\bEL\bLL\b G\bGR\bRA\bAM\bMM\bMA\bAR\bR,
-       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
+       A  shell  function,  defined  as  described  above under S\bSH\bHE\bEL\bLL\bL G\bGR\bRA\bAM\bMM\bMA\bAR\bR,
+       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
+       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 #\b# is
-       updated to reflect the change.  Special parameter 0\b0 is unchanged.   The
-       first  element of the F\bFU\bUN\bNC\bCN\bNA\bAM\bME\bE variable is set to the name of the func-
+       updated  to reflect the change.  Special parameter 0\b0 is unchanged.  The
+       first element of the F\bFU\bUN\bNC\bCN\bNA\bAM\bME\bE 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 D\bDE\bEB\bBU\bUG\bG and
-       R\bRE\bET\bTU\bUR\bRN\btraps (see the description  of  the  t\btr\bra\bap\bp  builtin  under  S\bSH\bHE\bEL\bLL\bL
-       B\bBU\bUI\bIL\bLT\bTI\bIN\b C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS below) are not inherited unless the function has been
-       given the t\btr\bra\bac\bce\be attribute (see the description of the  d\bde\bec\bcl\bla\bar\bre\b builtin
-       below)  or  the -\b-o\bo f\bfu\bun\bnc\bct\btr\bra\bac\bce\be shell option has been enabled with the s\bse\bet\bt
-       builtin (in which case all  functions  inherit  the  D\bDE\bEB\bBU\bUG\bG  and  R\bRE\bET\bTU\bUR\bRN\bN
-       traps),  and the E\bER\bRR\bR trap is not inherited unless the -\b-o\bo e\ber\brr\brt\btr\bra\bac\bce\be shell
+       All  other aspects of the shell execution environment are identical be-
+       tween a function and its caller with these exceptions:  the  D\bDE\bEB\bBU\bUG\b and
+       R\bRE\bET\bTU\bUR\bRN\b traps  (see  the  description  of  the t\btr\bra\bap\bp builtin under S\bSH\bHE\bEL\bLL\bL
+       B\bBU\bUI\bIL\bLT\bTI\bIN\bC\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS below) are not inherited unless the function has  been
+       given  the  t\btr\bra\bac\bce\be attribute (see the description of the d\bde\bec\bcl\bla\bar\bre\be builtin
+       below) or the -\b-o\bo f\bfu\bun\bnc\bct\btr\bra\bac\bce\be shell option has been enabled with  the  s\bse\bet\bt
+       builtin  (in  which  case  all  functions  inherit the D\bDE\bEB\bBU\bUG\bG and R\bRE\bET\bTU\bUR\bRN\bN
+       traps), and the E\bER\bRR\bR trap is not inherited unless the -\b-o\bo e\ber\brr\brt\btr\bra\bac\bce\b shell
        option has been enabled.
 
-       Variables local to the function may be declared with the l\blo\boc\bca\bal\bl  builtin
-       command.  Ordinarily, variables and their values are shared between the
-       function and its caller.  If a variable is declared  l\blo\boc\bca\bal\bl,  the  vari-
-       able's  visible  scope  is restricted to that function and its children
-       (including the functions it calls).  Local variables "shadow" variables
-       with  the same name declared at previous scopes.  For instance, a local
-       variable declared in a function hides a global  variable  of  the  same
-       name:  references  and assignments refer to the local variable, leaving
-       the global variable unmodified.  When the function returns, the  global
-       variable is once again visible.
-
-       The  shell  uses  _\bd_\by_\bn_\ba_\bm_\bi_\bc  _\bs_\bc_\bo_\bp_\bi_\bn_\bg  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
+       Variables  local to the function may be declared with the l\blo\boc\bca\bal\bl builtin
+       command (_\bl_\bo_\bc_\ba_\bl _\bv_\ba_\br_\bi_\ba_\bb_\bl_\be_\bs).  Ordinarily, variables and their values  are
+       shared  between the function and its caller.  If a variable is declared
+       l\blo\boc\bca\bal\bl, the variable's visible scope is restricted to that function  and
+       its children (including the functions it calls).
+
+       In the following description, the _\bc_\bu_\br_\br_\be_\bn_\bt _\bs_\bc_\bo_\bp_\be 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 l\blo\boc\bca\bal\bl or d\bde\bec\bcl\bla\bar\bre\be 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 _\bd_\by_\bn_\ba_\bm_\bi_\bc  _\bs_\bc_\bo_\bp_\bi_\bn_\bg  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 _\bv_\ba_\br is declared as local in function  _\bf_\bu_\bn_\bc_\b1,
-       and  _\bf_\bu_\bn_\bc_\b1  calls  another  function _\bf_\bu_\bn_\bc_\b2, references to _\bv_\ba_\br made from
+       For  example, if a variable _\bv_\ba_\br is declared as local in function _\bf_\bu_\bn_\bc_\b1,
+       and _\bf_\bu_\bn_\bc_\b1 calls another function _\bf_\bu_\bn_\bc_\b2, references  to  _\bv_\ba_\br  made  from
        within _\bf_\bu_\bn_\bc_\b2 will resolve to the local variable _\bv_\ba_\br from _\bf_\bu_\bn_\bc_\b1, shadow-
        ing any global variable named _\bv_\ba_\br.
 
        The u\bun\bns\bse\bet\bt builtin also acts using the same dynamic scope: if a variable
        is local to the current scope, u\bun\bns\bse\bet\bt 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 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 previ-
-       ous scope, any instance of a variable with  that  name  that  had  been
-       shadowed will become visible.
+       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  l\blo\bo-\b-
+       c\bca\bal\blv\bva\bar\br_\b_u\bun\bns\bse\bet\bt shell option changes this behavior).
 
        The  F\bFU\bUN\bNC\bCN\bNE\bES\bST\bT  variable,  if set to a numeric value greater than 0, de-
        fines a maximum function nesting level.  Function invocations that  ex-
@@ -2441,22 +2541,23 @@ F\bFU\bUN\bNC\bCT\bTI\bIO\bON\bNS\bS
        d\bde\bec\bcl\bla\bar\bre\be or t\bty\byp\bpe\bes\bse\bet\bt builtin commands.  The -\b-F\bF option to d\bde\bec\bcl\bla\bar\bre\be or t\bty\byp\bpe\be-\b-
        s\bse\bet\bt will list the function names only (and optionally the  source  file
        and  line  number, if the e\bex\bxt\btd\bde\beb\bbu\bug\bg shell option is enabled).  Functions
-       may be exported so that subshells automatically have them defined  with
-       the  -\b-f\bf  option  to  the  e\bex\bxp\bpo\bor\brt\bt builtin.  A function definition may be
+       may be exported so that child shell processes (those created when  exe-
+       cuting  a  separate  shell  invocation) automatically have them defined
+       with the -\b-f\bf option to the e\bex\bxp\bpo\bor\brt\bt builtin.  A function definition may be
        deleted using the -\b-f\bf option to the u\bun\bns\bse\bet\bt builtin.
 
        Functions may be recursive.  The F\bFU\bUN\bNC\bCN\bNE\bES\bST\bT variable may be used to limit
-       the  depth  of the function call stack and restrict the number of func-
+       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.
 
 A\bAR\bRI\bIT\bTH\bHM\bME\bET\bTI\bIC\bC E\bEV\bVA\bAL\bLU\bUA\bAT\bTI\bIO\bON\bN
-       The  shell allows arithmetic expressions to be evaluated, under certain
-       circumstances (see the l\ble\bet\bt and d\bde\bec\bcl\bla\bar\bre\be builtin commands,  the  (\b((\b com-
+       The shell allows arithmetic expressions to be evaluated, under  certain
+       circumstances  (see  the  l\ble\bet\bt and d\bde\bec\bcl\bla\bar\bre\be builtin commands, the (\b((\b( com-
        pound command, and A\bAr\bri\bit\bth\bhm\bme\bet\bti\bic\bc E\bEx\bxp\bpa\ban\bns\bsi\bio\bon\bn).  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-
+       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.
 
@@ -2485,55 +2586,55 @@ A\bAR\bRI\bIT\bTH\bHM\bME\bET\bTI\bIC\bC E\bEV\bVA\bAL\bLU\bUA\bAT\bTI\bIO\bON\bN
        _\be_\bx_\bp_\br_\b1 ,\b, _\be_\bx_\bp_\br_\b2
               comma
 
-       Shell variables are allowed as operands; parameter  expansion  is  per-
+       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
+       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  _\bi_\bn_\bt_\be_\bg_\be_\br
+       The value of a variable is evaluated as an arithmetic  expression  when
+       it  is  referenced, or when a variable which has been given the _\bi_\bn_\bt_\be_\bg_\be_\br
        attribute using d\bde\bec\bcl\bla\bar\bre\be -\b-i\bi is assigned a value.  A null value evaluates
-       to 0.  A shell variable need not have its _\bi_\bn_\bt_\be_\bg_\be_\br attribute  turned  on
+       to  0.   A shell variable need not have its _\bi_\bn_\bt_\be_\bg_\be_\br 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 [_\bb_\ba_\bs_\be_\b#]n, where the optional _\bb_\ba_\bs_\be is a decimal  num-
-       ber  between 2 and 64 representing the arithmetic base, and _\bn is a num-
-       ber in that base.  If _\bb_\ba_\bs_\be_\b# is omitted, then base  10  is  used.   When
+       tal numbers.  A leading 0x or 0X denotes hexadecimal.  Otherwise,  num-
+       bers  take the form [_\bb_\ba_\bs_\be_\b#]n, where the optional _\bb_\ba_\bs_\be is a decimal num-
+       ber between 2 and 64 representing the arithmetic base, and _\bn is a  num-
+       ber  in  that  base.   If _\bb_\ba_\bs_\be_\b# is omitted, then base 10 is used.  When
        specifying _\bn, 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 _\bb_\ba_\bs_\be is less than or equal to 36, lowercase and up-
-       percase letters may be used interchangeably to  represent  numbers  be-
+       represented  by the lowercase letters, the uppercase letters, @, and _,
+       in that order.  If _\bb_\ba_\bs_\be 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
+       Operators are evaluated in order  of  precedence.   Sub-expressions  in
+       parentheses  are  evaluated first and may override the precedence rules
        above.
 
 C\bCO\bON\bND\bDI\bIT\bTI\bIO\bON\bNA\bAL\bL E\bEX\bXP\bPR\bRE\bES\bSS\bSI\bIO\bON\bNS\bS
-       Conditional  expressions  are  used  by the [\b[[\b[ compound command and the
-       t\bte\bes\bst\band [\b[ builtin commands to test file attributes and perform  string
-       and  arithmetic  comparisons.   The t\bte\bes\bst\bt and [\b[ commands determine their
-       behavior based on the number of  arguments;  see  the  descriptions  of
+       Conditional expressions are used by the [\b[[\b[  compound  command  and  the
+       t\bte\bes\bst\b and [\b[ builtin commands to test file attributes and perform string
+       and arithmetic comparisons.  The t\bte\bes\bst\bt and [\b[  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.
-       B\bBa\bas\bsh\bhandles several filenames specially when they are used in  expres-
+       Expressions are formed from the following unary  or  binary  primaries.
+       B\bBa\bas\bsh\b handles several filenames specially when they are used in expres-
        sions.  If the operating system on which b\bba\bas\bsh\bh is running provides these
-       special files, bash will use them; otherwise it will emulate  them  in-
-       ternally  with  this  behavior: If any _\bf_\bi_\bl_\be argument to one of the pri-
+       special  files,  bash will use them; otherwise it will emulate them in-
+       ternally with this behavior: If any _\bf_\bi_\bl_\be argument to one  of  the  pri-
        maries is of the form _\b/_\bd_\be_\bv_\b/_\bf_\bd_\b/_\bn, then file descriptor _\bn is checked.  If
-       the  _\bf_\bi_\bl_\be  argument  to  one  of  the  primaries  is one of _\b/_\bd_\be_\bv_\b/_\bs_\bt_\bd_\bi_\bn,
-       _\b/_\bd_\be_\bv_\b/_\bs_\bt_\bd_\bo_\bu_\bt, or _\b/_\bd_\be_\bv_\b/_\bs_\bt_\bd_\be_\br_\br, file descriptor 0, 1, or 2,  respectively,
+       the _\bf_\bi_\bl_\be argument to  one  of  the  primaries  is  one  of  _\b/_\bd_\be_\bv_\b/_\bs_\bt_\bd_\bi_\bn,
+       _\b/_\bd_\be_\bv_\b/_\bs_\bt_\bd_\bo_\bu_\bt,  or _\b/_\bd_\be_\bv_\b/_\bs_\bt_\bd_\be_\br_\br, 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 [\b[[\b[, the <\b< and >\b> operators sort lexicographically using
+       When used with [\b[[\b[, the <\b< and >\b> operators sort  lexicographically  using
        the current locale.  The t\bte\bes\bst\bt command sorts using ASCII ordering.
 
        -\b-a\ba _\bf_\bi_\bl_\be
@@ -2572,30 +2673,30 @@ C\bCO\bON\bND\bDI\bIT\bTI\bIO\bON\bNA\bAL\bL E\bEX\bXP\bPR\bRE\bES\bSS\bSI\bIO\bON\bNS\bS
        -\b-L\bL _\bf_\bi_\bl_\be
               True if _\bf_\bi_\bl_\be exists and is a symbolic link.
        -\b-N\bN _\bf_\bi_\bl_\be
-              True if _\bf_\bi_\bl_\be exists and has been  modified  since  it  was  last
+              True  if  _\bf_\bi_\bl_\be  exists  and  has been modified since it was last
               read.
        -\b-O\bO _\bf_\bi_\bl_\be
               True if _\bf_\bi_\bl_\be exists and is owned by the effective user id.
        -\b-S\bS _\bf_\bi_\bl_\be
               True if _\bf_\bi_\bl_\be exists and is a socket.
        _\bf_\bi_\bl_\be_\b1 -\b-e\bef\bf _\bf_\bi_\bl_\be_\b2
-              True  if _\bf_\bi_\bl_\be_\b1 and _\bf_\bi_\bl_\be_\b2 refer to the same device and inode num-
+              True if _\bf_\bi_\bl_\be_\b1 and _\bf_\bi_\bl_\be_\b2 refer to the same device and inode  num-
               bers.
        _\bf_\bi_\bl_\be_\b1 -n\bnt\bt _\bf_\bi_\bl_\be_\b2
-              True if _\bf_\bi_\bl_\be_\b1 is newer (according  to  modification  date)  than
+              True  if  _\bf_\bi_\bl_\be_\b1  is  newer (according to modification date) than
               _\bf_\bi_\bl_\be_\b2, or if _\bf_\bi_\bl_\be_\b1 exists and _\bf_\bi_\bl_\be_\b2 does not.
        _\bf_\bi_\bl_\be_\b1 -o\bot\bt _\bf_\bi_\bl_\be_\b2
-              True  if _\bf_\bi_\bl_\be_\b1 is older than _\bf_\bi_\bl_\be_\b2, or if _\bf_\bi_\bl_\be_\b2 exists and _\bf_\bi_\bl_\be_\b1
+              True if _\bf_\bi_\bl_\be_\b1 is older than _\bf_\bi_\bl_\be_\b2, or if _\bf_\bi_\bl_\be_\b2 exists and  _\bf_\bi_\bl_\be_\b1
               does not.
        -\b-o\bo _\bo_\bp_\bt_\bn_\ba_\bm_\be
-              True if the shell option _\bo_\bp_\bt_\bn_\ba_\bm_\be is enabled.  See  the  list  of
-              options  under  the  description  of  the  -\b-o\bo  option to the s\bse\bet\bt
+              True  if  the  shell option _\bo_\bp_\bt_\bn_\ba_\bm_\be is enabled.  See the list of
+              options under the description  of  the  -\b-o\bo  option  to  the  s\bse\bet\bt
               builtin below.
        -\b-v\bv _\bv_\ba_\br_\bn_\ba_\bm_\be
-              True if the shell variable _\bv_\ba_\br_\bn_\ba_\bm_\be is set (has been  assigned  a
+              True  if  the shell variable _\bv_\ba_\br_\bn_\ba_\bm_\be is set (has been assigned a
               value).
        -\b-R\bR _\bv_\ba_\br_\bn_\ba_\bm_\be
-              True  if  the shell variable _\bv_\ba_\br_\bn_\ba_\bm_\be is set and is a name refer-
+              True if the shell variable _\bv_\ba_\br_\bn_\ba_\bm_\be is set and is a  name  refer-
               ence.
        -\b-z\bz _\bs_\bt_\br_\bi_\bn_\bg
               True if the length of _\bs_\bt_\br_\bi_\bn_\bg is zero.
@@ -2605,8 +2706,8 @@ C\bCO\bON\bND\bDI\bIT\bTI\bIO\bON\bNA\bAL\bL E\bEX\bXP\bPR\bRE\bES\bSS\bSI\bIO\bON\bNS\bS
 
        _\bs_\bt_\br_\bi_\bn_\bg_\b1 =\b==\b= _\bs_\bt_\br_\bi_\bn_\bg_\b2
        _\bs_\bt_\br_\bi_\bn_\bg_\b1 =\b= _\bs_\bt_\br_\bi_\bn_\bg_\b2
-              True if the strings are equal.  =\b= should be used with  the  t\bte\bes\bst\bt
-              command  for  POSIX conformance.  When used with the [\b[[\b[ command,
+              True  if  the strings are equal.  =\b= should be used with the t\bte\bes\bst\bt
+              command for POSIX conformance.  When used with the  [\b[[\b command,
               this performs pattern matching as described above (C\bCo\bom\bmp\bpo\bou\bun\bnd\bd C\bCo\bom\bm-\b-
               m\bma\ban\bnd\bds\bs).
 
@@ -2620,90 +2721,93 @@ C\bCO\bON\bND\bDI\bIT\bTI\bIO\bON\bNA\bAL\bL E\bEX\bXP\bPR\bRE\bES\bSS\bSI\bIO\bON\bNS\bS
               True if _\bs_\bt_\br_\bi_\bn_\bg_\b1 sorts after _\bs_\bt_\br_\bi_\bn_\bg_\b2 lexicographically.
 
        _\ba_\br_\bg_\b1 O\bOP\bP _\ba_\br_\bg_\b2
-              O\bOP\b is one of -\b-e\beq\bq, -\b-n\bne\be, -\b-l\blt\bt, -\b-l\ble\be, -\b-g\bgt\bt, or -\b-g\bge\be.  These arithmetic
-              binary operators return true if _\ba_\br_\bg_\b1 is equal to, not equal  to,
-              less  than, less than or equal to, greater than, or greater than
-              or equal to _\ba_\br_\bg_\b2, respectively.  _\bA_\br_\bg_\b1 and _\ba_\br_\bg_\b2 may  be  positive
-              or  negative  integers.  When used with the [\b[[\b[ command, _\bA_\br_\bg_\b1 and
-              _\bA_\br_\bg_\bare evaluated as  arithmetic  expressions  (see  A\bAR\bRI\bIT\bTH\bHM\bME\bET\bTI\bIC\bC
+              O\bOP\bis one of -\b-e\beq\bq, -\b-n\bne\be, -\b-l\blt\bt, -\b-l\ble\be, -\b-g\bgt\bt, or -\b-g\bge\be.  These  arithmetic
+              binary  operators return true if _\ba_\br_\bg_\b1 is equal to, not equal to,
+              less than, less than or equal to, greater than, or greater  than
+              or  equal  to _\ba_\br_\bg_\b2, respectively.  _\bA_\br_\bg_\b1 and _\ba_\br_\bg_\b2 may be positive
+              or negative integers.  When used with the [\b[[\b[ command,  _\bA_\br_\bg_\b and
+              _\bA_\br_\bg_\b are  evaluated  as  arithmetic expressions (see A\bAR\bRI\bIT\bTH\bHM\bME\bET\bTI\bIC\bC
               E\bEV\bVA\bAL\bLU\bUA\bAT\bTI\bIO\bON\bN above).
 
 S\bSI\bIM\bMP\bPL\bLE\bE C\bCO\bOM\bMM\bMA\bAN\bND\bD E\bEX\bXP\bPA\bAN\bNS\bSI\bIO\bON\bN
        When a simple command is executed, the shell performs the following ex-
-       pansions, assignments, and redirections, from left  to  right,  in  the
+       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
+       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
+       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 R\bRE\bED\bDI\bIR\bRE\bEC\bCT\bTI\bIO\bON\bN.
 
        4.     The text after the =\b= in each variable assignment undergoes tilde
               expansion, parameter expansion, command substitution, arithmetic
-              expansion, and quote removal before being assigned to the  vari-
+              expansion,  and quote removal before being assigned to the vari-
               able.
 
        If no command name results, the variable assignments affect the current
-       shell environment.  Otherwise, the variables are added to the  environ-
-       ment  of the executed command and do not affect the current shell envi-
-       ronment.  If any of the assignments attempts to assign  a  value  to  a
-       readonly  variable,  an error occurs, and the command exits with a non-
-       zero status.
-
-       If no command name results, redirections are performed, but do not  af-
-       fect  the  current  shell  environment.  A redirection error causes the
+       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
+       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.
 
 C\bCO\bOM\bMM\bMA\bAN\bND\bD E\bEX\bXE\bEC\bCU\bUT\bTI\bIO\bON\bN
-       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
+       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 F\bFU\bUN\bNC\bCT\bTI\bIO\bON\bNS\bS.  If the name does not match a
-       function, the shell searches for it in the list of shell builtins.   If
+       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 F\bFU\bUN\bNC\bCT\bTI\bIO\bON\bNS\bS.  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, b\bba\bas\bsh\bh searches each element of the P\bPA\bAT\bTH\bH for  a  directory  con-
+       If the name is neither a shell function nor a builtin, and contains  no
+       slashes,  b\bba\bas\bsh\bh  searches  each element of the P\bPA\bAT\bTH\bH for a directory con-
        taining an executable file by that name.  B\bBa\bas\bsh\bh uses a hash table to re-
-       member the full pathnames of executable files  (see  h\bha\bas\bsh\bh  under  S\bSH\bHE\bEL\bLL\bL
-       B\bBU\bUI\bIL\bLT\bTI\bIN\b C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS  below).  A full search of the directories in P\bPA\bAT\bTH\bH is
-       performed only if the command is not found in the hash table.   If  the
+       member  the  full  pathnames  of executable files (see h\bha\bas\bsh\bh under S\bSH\bHE\bEL\bLL\bL
+       B\bBU\bUI\bIL\bLT\bTI\bIN\bC\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS below).  A full search of the directories in  P\bPA\bAT\bTH\b 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 c\bco\bom\bmm\bma\ban\bnd\bd_\b_n\bno\bot\bt_\b_f\bfo\bou\bun\bnd\bd_\b_h\bha\ban\bnd\bdl\ble\be.  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
+       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
+       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 _\bs_\bh_\be_\bl_\bl _\bs_\bc_\br_\bi_\bp_\bt, a
-       file containing shell commands.  A subshell is spawned to  execute  it.
-       This  subshell  reinitializes itself, so that the effect is as if a new
-       shell had been invoked to handle the script, with  the  exception  that
-       the  locations of commands remembered by the parent (see h\bha\bas\bsh\bh below un-
-       der S\bSH\bHE\bEL\bLL\bL B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS) are retained by the child.
+       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 _\bs_\bh_\be_\bl_\bl _\bs_\bc_\br_\bi_\bp_\bt,  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  h\bha\bas\bsh\bh  below  under  S\bSH\bHE\bEL\bLL\bL  B\bBU\bUI\bIL\bLT\bTI\bIN\bN  C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS) are retained by the
+       child.
 
        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
@@ -2766,6 +2870,8 @@ C\bCO\bOM\bMM\bMA\bAN\bND\bD E\bEX\bXE\bEC\bCU\bUT\bTI\bIO\bON\bN E\bEN\bNV\bVI\bIR\bRO\bON\bNM\bME\bEN\bN
        A command invoked  in  this  separate  environment  cannot  affect  the
        shell's execution environment.
 
+       A _\bs_\bu_\bb_\bs_\bh_\be_\bl_\bl 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-
@@ -2838,42 +2944,70 @@ E\bEX\bXI\bIT\bT S\bST\bTA\bAT\bTU\bUS\bS
        return an exit status of 2 to indicate incorrect usage,  generally  in-
        valid options or missing arguments.
 
-       B\bBa\bas\bsh\bh  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
+       The exit status of the last command is available in the special parame-
+       ter $?.
+
+       B\bBa\bas\bsh\bh 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 e\bex\bxi\bit\bt builtin command below.
 
 S\bSI\bIG\bGN\bNA\bAL\bLS\bS
-       When  b\bba\bas\bsh\bh  is  interactive,  in  the  absence of any traps, it ignores
+       When b\bba\bas\bsh\bh is interactive, in the  absence  of  any  traps,  it  ignores
        S\bSI\bIG\bGT\bTE\bER\bRM\bM (so that k\bki\bil\bll\bl 0\b0 does not kill an interactive shell), and S\bSI\bIG\bGI\bIN\bNT\bT
-       is  caught and handled (so that the w\bwa\bai\bit\bt builtin is interruptible).  In
+       is caught and handled (so that the w\bwa\bai\bit\bt builtin is interruptible).   In
        all cases, b\bba\bas\bsh\bh ignores S\bSI\bIG\bGQ\bQU\bUI\bIT\bT.  If job control is in effect, b\bba\bas\bsh\bh ig-
        nores S\bSI\bIG\bGT\bTT\bTI\bIN\bN, S\bSI\bIG\bGT\bTT\bTO\bOU\bU, and S\bSI\bIG\bGT\bTS\bST\bTP\bP.
 
        Non-builtin commands run by b\bba\bas\bsh\bh 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 S\bSI\bIG\bGI\bIN\bNT\bT and S\bSI\bIG\bGQ\bQU\bUI\bIT\bT in addition to
-       these inherited handlers.  Commands run as a result of command  substi-
+       fect, asynchronous commands ignore S\bSI\bIG\bGI\bIN\bNT\bT and S\bSI\bIG\bGQ\bQU\bUI\bIT\bT  in  addition  to
+       these  inherited handlers.  Commands run as a result of command substi-
        tution ignore the keyboard-generated job control signals S\bSI\bIG\bGT\bTT\bTI\bIN\bN, S\bSI\bIG\bGT\bT-\b-
        T\bTO\bOU\bU, and S\bSI\bIG\bGT\bTS\bST\bTP\bP.
 
-       The shell exits by default upon receipt of a S\bSI\bIG\bGH\bHU\bUP\bP.   Before  exiting,
-       an  interactive  shell  resends  the  S\bSI\bIG\bGH\bHU\bUP\bP  to  all  jobs, running or
+       The  shell  exits by default upon receipt of a S\bSI\bIG\bGH\bHU\bUP\bP.  Before exiting,
+       an interactive shell  resends  the  S\bSI\bIG\bGH\bHU\bUP\bP  to  all  jobs,  running  or
        stopped.  Stopped jobs are sent S\bSI\bIG\bGC\bCO\bON\bNT\bT to ensure that they receive the
-       S\bSI\bIG\bGH\bHU\bUP\bP.   To  prevent the shell from sending the signal to a particular
-       job, it should be removed from the jobs table with the  d\bdi\bis\bso\bow\bwn\b builtin
-       (see  S\bSH\bHE\bEL\bLL\bL B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS below) or marked to not receive S\bSI\bIG\bGH\bHU\bUP\bP us-
+       S\bSI\bIG\bGH\bHU\bUP\bP.  To prevent the shell from sending the signal to  a  particular
+       job,  it  should be removed from the jobs table with the d\bdi\bis\bso\bow\bwn\bn builtin
+       (see S\bSH\bHE\bEL\bLL\bL B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS below) or marked to not receive S\bSI\bIG\bGH\bHU\bUP\b us-
        ing d\bdi\bis\bso\bow\bwn\bn -\b-h\bh.
 
-       If the h\bhu\bup\bpo\bon\bne\bex\bxi\bit\bt shell option has been set with  s\bsh\bho\bop\bpt\bt,  b\bba\bas\bsh\bh  sends  a
+       If  the  h\bhu\bup\bpo\bon\bne\bex\bxi\bit\bt  shell  option has been set with s\bsh\bho\bop\bpt\bt, b\bba\bas\bsh\bh sends a
        S\bSI\bIG\bGH\bHU\bUP\bP to all jobs when an interactive login shell exits.
 
-       If  b\bba\bas\bsh\bh is waiting for a command to complete and receives a signal for
+       If b\bba\bas\bsh\bh 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 b\bba\bas\bsh\bh is waiting for an asynchronous command via
-       the w\bwa\bai\bit\bt builtin, the reception of a signal for which a trap  has  been
+       mand completes.  When b\bba\bas\bsh\bh is waiting for an asynchronous  command  via
+       the  w\bwa\bai\bit\bt  builtin, the reception of a signal for which a trap has been
        set will cause the w\bwa\bai\bit\bt 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 b\bba\bas\bsh\bh is waiting for a foreground
+       command to complete, the shell receives keyboard-generated signals such
+       as  S\bSI\bIG\bGI\bIN\bNT\bT (usually generated by ^\b^C\bC) 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\bC sends S\bSI\bIG\bGI\bIN\bNT\bT to all pro-
+       cesses in that process group.
+
+       When b\bba\bas\bsh\bh is running without job control enabled  and  receives  S\bSI\bIG\bGI\bIN\bNT\bT
+       while  waiting for a foreground command, it waits until that foreground
+       command terminates and then decides what to do about the S\bSI\bIG\bGI\bIN\bNT\bT:
+
+       1.     If the command terminates due to the S\bSI\bIG\bGI\bIN\bNT\bT, b\bba\bas\bsh\bh concludes that
+              the  user meant to end the entire script, and acts on the S\bSI\bIG\bGI\bIN\bNT\bT
+              (e.g., by running a S\bSI\bIG\bGI\bIN\bNT\bT trap or exiting itself);
+
+       2.     If the command does not terminate due  to  S\bSI\bIG\bGI\bIN\bNT\bT,  the  program
+              handled  the  S\bSI\bIG\bGI\bIN\bNT\bT itself and did not treat it as a fatal sig-
+              nal.  In that case, b\bba\bas\bsh\bh does not treat S\bSI\bIG\bGI\bIN\bNT\bT as a  fatal  sig-
+              nal,  either,  instead assuming that the S\bSI\bIG\bGI\bIN\bNT\bT was used as part
+              of the program's normal operation (e.g., emacs uses it to  abort
+              editing commands) or deliberately discarded.  However, b\bba\bas\bsh\bh will
+              run any trap set on S\bSI\bIG\bGI\bIN\bNT\bT, as it does with  any  other  trapped
+              signal  it  receives while it is waiting for the foreground com-
+              mand to complete, for compatibility.
+
 J\bJO\bOB\bB C\bCO\bON\bNT\bTR\bRO\bOL\bL
        _\bJ_\bo_\bb _\bc_\bo_\bn_\bt_\br_\bo_\bl refers to the ability to selectively stop (_\bs_\bu_\bs_\bp_\be_\bn_\bd) the ex-
        ecution  of  processes and continue (_\br_\be_\bs_\bu_\bm_\be) their execution at a later
@@ -2994,80 +3128,79 @@ P\bPR\bRO\bOM\bMP\bPT\bTI\bIN\bNG\bG
               \\b\u\bu     the username of the current user
               \\b\v\bv     the version of b\bba\bas\bsh\bh (e.g., 2.00)
               \\b\V\bV     the release of b\bba\bas\bsh\bh, version + patch level (e.g., 2.00.0)
-              \\b\w\bw     the current working  directory,  with  $\b$H\bHO\bOM\bME\bE  abbreviated
-                     with  a tilde (uses the value of the P\bPR\bRO\bOM\bMP\bPT\bT_\b_D\bDI\bIR\bRT\bTR\bRI\bIM\bM vari-
-                     able)
-              \\b\W\bW     the basename of the current working directory, with $\b$H\bHO\bOM\bME\bE
-                     abbreviated with a tilde
+              \\b\w\bw     the value of the P\bPW\bWD\bD shell variable  ($\b$P\bPW\bWD\bD),  with  $\b$H\bHO\bOM\bME\bE
+                     abbreviated   with   a  tilde  (uses  the  value  of  the
+                     P\bPR\bRO\bOM\bMP\bPT\bT_\b_D\bDI\bIR\bRT\bTR\bRI\bIM\bM variable)
+              \\b\W\bW     the basename of $\b$P\bPW\bWD\bD, with $\b$H\bHO\bOM\bME\bE abbreviated with a tilde
               \\b\!\b!     the history number of this command
               \\b\#\b#     the command number of this command
               \\b\$\b$     if the effective UID is 0, a #\b#, otherwise a $\b$
               \\b\_\bn_\bn_\bn   the character corresponding to the octal number _\bn_\bn_\bn
               \\b\\\b\     a backslash
-              \\b\[\b[     begin  a sequence of non-printing characters, which could
-                     be used to embed a terminal  control  sequence  into  the
+              \\b\[\b[     begin a sequence of non-printing characters, which  could
+                     be  used  to  embed  a terminal control sequence into the
                      prompt
               \\b\]\b]     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 H\bHI\bIS\bST\bTO\bOR\bRY\bY 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
+       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  H\bHI\bIS\bST\bTO\bOR\bRY\b 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
        p\bpr\bro\bom\bmp\bpt\btv\bva\bar\brs\bs shell option (see the description of the s\bsh\bho\bop\bpt\bt command under
-       S\bSH\bHE\bEL\bLL\b B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS below).  This can have unwanted side effects if
-       escaped portions of the string appear within  command  substitution  or
+       S\bSH\bHE\bEL\bLL\bB\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS below).  This can have unwanted side effects  if
+       escaped  portions  of  the string appear within command substitution or
        contain characters special to word expansion.
 
 R\bRE\bEA\bAD\bDL\bLI\bIN\bNE\bE
-       This  is  the library that handles reading input when using an interac-
+       This is the library that handles reading input when using  an  interac-
        tive shell, unless the -\b--\b-n\bno\boe\bed\bdi\bit\bti\bin\bng\bg option is given at shell invocation.
        Line editing is also used when using the -\b-e\be option to the r\bre\bea\bad\bd 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\bo e\bem\bma\bac\bcs\bs or -\b-o\bo  v\bvi\bi  options  to  the  s\bse\bet\bt
-       builtin  (see  S\bSH\bHE\bEL\bLL\bL B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS below).  To turn off line editing
-       after the shell is running, use the +\b+o\bo e\bem\bma\bac\bcs\bs or +\b+o\bo v\bvi\bi  options  to  the
+       enabled  at  any  time  using  the -\b-o\bo e\bem\bma\bac\bcs\bs or -\b-o\bo v\bvi\bi options to the s\bse\bet\bt
+       builtin (see S\bSH\bHE\bEL\bLL\bL B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS below).  To turn off  line  editing
+       after  the  shell  is running, use the +\b+o\bo e\bem\bma\bac\bcs\bs or +\b+o\bo v\bvi\bi options to the
        s\bse\bet\bt builtin.
 
    R\bRe\bea\bad\bdl\bli\bin\bne\be N\bNo\bot\bta\bat\bti\bio\bon\bn
        In this section, the Emacs-style notation is used to denote keystrokes.
-       Control keys are denoted by C-_\bk_\be_\by, e.g., C-n  means  Control-N.   Simi-
-       larly,  _\bm_\be_\bt_\ba  keys are denoted by M-_\bk_\be_\by, so M-x means Meta-X.  (On key-
-       boards without a _\bm_\be_\bt_\ba key, M-_\bx means ESC _\bx, i.e., press the Escape  key
+       Control  keys  are  denoted by C-_\bk_\be_\by, e.g., C-n means Control-N.  Simi-
+       larly, _\bm_\be_\bt_\ba keys are denoted by M-_\bk_\be_\by, so M-x means Meta-X.   (On  key-
+       boards  without a _\bm_\be_\bt_\ba key, M-_\bx means ESC _\bx, i.e., press the Escape key
        then the _\bx key.  This makes ESC the _\bm_\be_\bt_\ba _\bp_\br_\be_\bf_\bi_\bx.  The combination M-C-_\bx
-       means ESC-Control-_\bx, or press the Escape key then hold the Control  key
+       means  ESC-Control-_\bx, or press the Escape key then hold the Control key
        while pressing the _\bx key.)
 
        Readline commands may be given numeric _\ba_\br_\bg_\bu_\bm_\be_\bn_\bt_\bs, 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., k\bki\bil\bll\bl-\b-l\bli\bin\bne\be) causes that command  to
-       act  in  a  backward direction.  Commands whose behavior with arguments
+       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., k\bki\bil\bll\bl-\b-l\bli\bin\bne\be) 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 _\bk_\bi_\bl_\bl_\bi_\bn_\bg text, the text deleted is  saved
+       When  a command is described as _\bk_\bi_\bl_\bl_\bi_\bn_\bg text, the text deleted is saved
        for possible future retrieval (_\by_\ba_\bn_\bk_\bi_\bn_\bg).  The killed text is saved in a
        _\bk_\bi_\bl_\bl _\br_\bi_\bn_\bg.  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.
 
    R\bRe\bea\bad\bdl\bli\bin\bne\be I\bIn\bni\bit\bti\bia\bal\bli\biz\bza\bat\bti\bio\bon\bn
-       Readline is customized by putting commands in  an  initialization  file
-       (the  _\bi_\bn_\bp_\bu_\bt_\br_\bc  file).  The name of this file is taken from the value of
+       Readline  is  customized  by putting commands in an initialization file
+       (the _\bi_\bn_\bp_\bu_\bt_\br_\bc file).  The name of this file is taken from the  value  of
        the I\bIN\bNP\bPU\bUT\bTR\bRC\bC variable.  If that variable is unset, the default is _\b~_\b/_\b._\bi_\bn_\b-
-       _\bp_\bu_\bt_\br_\bc.   If  that  file  does not exist or cannot be read, the ultimate
-       default is _\b/_\be_\bt_\bc_\b/_\bi_\bn_\bp_\bu_\bt_\br_\bc.  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 #\b# are comments.  Lines beginning  with  a  $\b indicate
-       conditional  constructs.   Other lines denote key bindings and variable
+       _\bp_\bu_\bt_\br_\bc.  If that file  does not exist or cannot be  read,  the  ultimate
+       default  is  _\b/_\be_\bt_\bc_\b/_\bi_\bn_\bp_\bu_\bt_\br_\bc.   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  #\b#  are comments.  Lines beginning with a $\b$ indicate
+       conditional constructs.  Other lines denote key bindings  and  variable
        settings.
 
-       The default key-bindings may be changed with an  _\bi_\bn_\bp_\bu_\bt_\br_\bc  file.   Other
+       The  default  key-bindings  may be changed with an _\bi_\bn_\bp_\bu_\bt_\br_\bc file.  Other
        programs that use this library may add their own commands and bindings.
 
        For example, placing
@@ -3075,18 +3208,18 @@ R\bRE\bEA\bAD\bDL\bLI\bIN\bNE\bE
               M-Control-u: universal-argument
        or
               C-Meta-u: universal-argument
-       into  the _\bi_\bn_\bp_\bu_\bt_\br_\bc would make M-C-u execute the readline command _\bu_\bn_\bi_\bv_\be_\br_\b-
+       into the _\bi_\bn_\bp_\bu_\bt_\br_\bc would make M-C-u execute the readline command  _\bu_\bn_\bi_\bv_\be_\br_\b-
        _\bs_\ba_\bl_\b-_\ba_\br_\bg_\bu_\bm_\be_\bn_\bt.
 
-       The following symbolic character names  are  recognized:  _\bR_\bU_\bB_\bO_\bU_\bT,  _\bD_\bE_\bL,
+       The  following  symbolic  character  names are recognized: _\bR_\bU_\bB_\bO_\bU_\bT, _\bD_\bE_\bL,
        _\bE_\bS_\bC, _\bL_\bF_\bD, _\bN_\bE_\bW_\bL_\bI_\bN_\bE, _\bR_\bE_\bT, _\bR_\bE_\bT_\bU_\bR_\bN, _\bS_\bP_\bC, _\bS_\bP_\bA_\bC_\bE, and _\bT_\bA_\bB.
 
-       In  addition  to  command  names, readline allows keys to be bound to a
+       In addition to command names, readline allows keys to  be  bound  to  a
        string that is inserted when the key is pressed (a _\bm_\ba_\bc_\br_\bo).
 
    R\bRe\bea\bad\bdl\bli\bin\bne\be K\bKe\bey\by B\bBi\bin\bnd\bdi\bin\bng\bgs\bs
-       The syntax for controlling key bindings in the _\bi_\bn_\bp_\bu_\bt_\br_\bc file is  simple.
-       All  that is required is the name of the command or the text of a macro
+       The  syntax for controlling key bindings in the _\bi_\bn_\bp_\bu_\bt_\br_\bc 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 _\bM_\be_\bt_\ba_\b- or
        _\bC_\bo_\bn_\bt_\br_\bo_\bl_\b- prefixes, or as a key sequence.
@@ -3098,15 +3231,15 @@ R\bRE\bEA\bAD\bDL\bLI\bIN\bNE\bE
               Meta-Rubout: backward-kill-word
               Control-o: "> output"
 
-       In  the above example, _\bC_\b-_\bu is bound to the function u\bun\bni\biv\bve\ber\brs\bsa\bal\bl-\b-a\bar\brg\bgu\bum\bme\ben\bnt\bt,
-       _\bM_\b-_\bD_\bE_\bis bound to the function b\bba\bac\bck\bkw\bwa\bar\brd\bd-\b-k\bki\bil\bll\bl-\b-w\bwo\bor\brd\bd, and _\bC_\b-_\bo is bound  to
-       run  the macro expressed on the right hand side (that is, to insert the
+       In the above example, _\bC_\b-_\bu is bound to the function  u\bun\bni\biv\bve\ber\brs\bsa\bal\bl-\b-a\bar\brg\bgu\bum\bme\ben\bnt\bt,
+       _\bM_\b-_\bD_\bE_\b is bound to the function b\bba\bac\bck\bkw\bwa\bar\brd\bd-\b-k\bki\bil\bll\bl-\b-w\bwo\bor\brd\bd, and _\bC_\b-_\bo 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, "\b"k\bke\bey\bys\bse\beq\bq"\b":_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b-_\bn_\ba_\bm_\be  or  _\bm_\ba_\bc_\br_\bo,  k\bke\bey\bys\bse\beq\b differs
-       from  k\bke\bey\byn\bna\bam\bme\be 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
+       In  the  second  form,  "\b"k\bke\bey\bys\bse\beq\bq"\b":_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b-_\bn_\ba_\bm_\be or _\bm_\ba_\bc_\br_\bo, k\bke\bey\bys\bse\beq\bq differs
+       from k\bke\bey\byn\bna\bam\bme\be 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
@@ -3114,7 +3247,7 @@ R\bRE\bEA\bAD\bDL\bLI\bIN\bNE\bE
               "\e[11~": "Function Key 1"
 
        In this example, _\bC_\b-_\bu is again bound to the function u\bun\bni\biv\bve\ber\brs\bsa\bal\bl-\b-a\bar\brg\bgu\bum\bme\ben\bnt\bt.
-       _\bC_\b-_\b _\bC_\b-_\br is bound to the function r\bre\be-\b-r\bre\bea\bad\bd-\b-i\bin\bni\bit\bt-\b-f\bfi\bil\ble\be, and _\bE_\bS_\bC _\b[ _\b1 _\b1 _\b~ is
+       _\bC_\b-_\b_\bC_\b-_\br is bound to the function r\bre\be-\b-r\bre\bea\bad\bd-\b-i\bin\bni\bit\bt-\b-f\bfi\bil\ble\be, and _\bE_\bS_\bC _\b[ _\b1 _\b1 _\b is
        bound to insert the text ``Function Key 1''.
 
        The full set of GNU Emacs style escape sequences is
@@ -3125,7 +3258,7 @@ R\bRE\bEA\bAD\bDL\bLI\bIN\bNE\bE
               \\b\"\b"     literal "
               \\b\'\b'     literal '
 
-       In addition to the GNU Emacs style escape sequences, a  second  set  of
+       In  addition  to  the GNU Emacs style escape sequences, a second set of
        backslash escapes is available:
               \\b\a\ba     alert (bell)
               \\b\b\bb     backspace
@@ -3135,20 +3268,20 @@ R\bRE\bEA\bAD\bDL\bLI\bIN\bNE\bE
               \\b\r\br     carriage return
               \\b\t\bt     horizontal tab
               \\b\v\bv     vertical tab
-              \\b\_\bn_\bn_\bn   the  eight-bit  character  whose value is the octal value
+              \\b\_\bn_\bn_\bn   the eight-bit character whose value is  the  octal  value
                      _\bn_\bn_\bn (one to three digits)
-              \\b\x\bx_\bH_\bH   the eight-bit character whose value  is  the  hexadecimal
+              \\b\x\bx_\bH_\bH   the  eight-bit  character  whose value is the hexadecimal
                      value _\bH_\bH (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
+       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 '.
 
-       B\bBa\bas\bsh\b allows the current readline key bindings to be displayed or modi-
-       fied with the b\bbi\bin\bnd\bd builtin command.  The editing mode may  be  switched
-       during  interactive  use by using the -\b-o\bo option to the s\bse\bet\bt builtin com-
+       B\bBa\bas\bsh\ballows the current readline key bindings to be displayed or  modi-
+       fied  with  the b\bbi\bin\bnd\bd builtin command.  The editing mode may be switched
+       during interactive use by using the -\b-o\bo option to the s\bse\bet\bt  builtin  com-
        mand (see S\bSH\bHE\bEL\bLL\bL B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS below).
 
    R\bRe\bea\bad\bdl\bli\bin\bne\be V\bVa\bar\bri\bia\bab\bbl\ble\bes\bs
@@ -3159,12 +3292,35 @@ R\bRE\bEA\bAD\bDL\bLI\bIN\bNE\bE
               s\bse\bet\bt _\bv_\ba_\br_\bi_\ba_\bb_\bl_\be_\b-_\bn_\ba_\bm_\be _\bv_\ba_\bl_\bu_\be
        or using the b\bbi\bin\bnd\bd builtin command (see S\bSH\bHE\bEL\bLL\bL B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS below).
 
-       Except where noted, readline variables can take the values  O\bOn\bn  or  O\bOf\bff\bf
-       (without  regard  to  case).   Unrecognized variable names are ignored.
-       When a variable value is read, empty or null values, "on"  (case-insen-
+       Except  where  noted,  readline variables can take the values O\bOn\bn or O\bOf\bff\bf
+       (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 O\bOn\bn.  All other values are equivalent
        to O\bOf\bff\bf.  The variables and their default values are:
 
+       a\bac\bct\bti\biv\bve\be-\b-r\bre\beg\bgi\bio\bon\bn-\b-s\bst\bta\bar\brt\bt-\b-c\bco\bol\blo\bor\br
+              A  string  variable  that controls the text color and background
+              when displaying the text in the active region (see the  descrip-
+              tion  of e\ben\bna\bab\bbl\ble\be-\b-a\bac\bct\bti\biv\bve\be-\b-r\bre\beg\bgi\bio\bon\bn 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".
+       a\bac\bct\bti\biv\bve\be-\b-r\bre\beg\bgi\bio\bon\bn-\b-e\ben\bnd\bd-\b-c\bco\bol\blo\bor\br
+              A string  variable  that  "undoes"  the  effects  of  a\bac\bct\bti\biv\bve\be-\b-r\bre\be-\b-
+              g\bgi\bio\bon\bn-\b-s\bst\bta\bar\brt\bt-\b-c\bco\bol\blo\bor\br  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".
        b\bbe\bel\bll\bl-\b-s\bst\bty\byl\ble\be (\b(a\bau\bud\bdi\bib\bbl\ble\be)\b)
               Controls what happens when readline wants to ring  the  terminal
               bell.  If set to n\bno\bon\bne\be, readline never rings the bell.  If set to
@@ -3181,49 +3337,55 @@ R\bRE\bEA\bAD\bDL\bLI\bIN\bNE\bE
               If set to O\bOn\bn, 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 L\bLS\bS_\b_C\bCO\bOL\bLO\bOR\bRS\bS environment variable.
+              the L\bLS\bS_\b_C\bCO\bOL\bLO\bOR\bRS\bS environment variable.  If there is a color defini-
+              tion in $\b$L\bLS\bS_\b_C\bCO\bOL\bLO\bOR\bRS\bS for the custom suffix  "readline-colored-com-
+              pletion-prefix",  readline uses this color for the common prefix
+              instead of its default.
        c\bco\bol\blo\bor\bre\bed\bd-\b-s\bst\bta\bat\bts\bs (\b(O\bOf\bff\bf)\b)
-              If  set to O\bOn\bn, readline displays possible completions using dif-
-              ferent colors to indicate their file type.   The  color  defini-
-              tions  are  taken  from  the  value of the L\bLS\bS_\b_C\bCO\bOL\bLO\bOR\bRS\bS environment
+              If set to O\bOn\bn, readline displays possible completions using  dif-
+              ferent  colors  to  indicate their file type.  The color defini-
+              tions are taken from the  value  of  the  L\bLS\bS_\b_C\bCO\bOL\bLO\bOR\bRS\b environment
               variable.
        c\bco\bom\bmm\bme\ben\bnt\bt-\b-b\bbe\beg\bgi\bin\bn (\b(`\b``\b`#\b#'\b''\b')\b)
-              The string that is inserted  when  the  readline  i\bin\bns\bse\ber\brt\bt-\b-c\bco\bom\bmm\bme\ben\bnt\bt
+              The  string  that  is  inserted when the readline i\bin\bns\bse\ber\brt\bt-\b-c\bco\bom\bmm\bme\ben\bnt\bt
               command is executed.  This command is bound to M\bM-\b-#\b# in emacs mode
               and to #\b# in vi command mode.
        c\bco\bom\bmp\bpl\ble\bet\bti\bio\bon\bn-\b-d\bdi\bis\bsp\bpl\bla\bay\by-\b-w\bwi\bid\bdt\bth\bh (\b(-\b-1\b1)\b)
-              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
+              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.
        c\bco\bom\bmp\bpl\ble\bet\bti\bio\bon\bn-\b-i\big\bgn\bno\bor\bre\be-\b-c\bca\bas\bse\be (\b(O\bOf\bff\bf)\b)
               If set to O\bOn\bn, readline performs filename matching and completion
               in a case-insensitive fashion.
        c\bco\bom\bmp\bpl\ble\bet\bti\bio\bon\bn-\b-m\bma\bap\bp-\b-c\bca\bas\bse\be (\b(O\bOf\bff\bf)\b)
-              If  set  to  O\bOn\bn, and c\bco\bom\bmp\bpl\ble\bet\bti\bio\bon\bn-\b-i\big\bgn\bno\bor\bre\be-\b-c\bca\bas\bse\be is enabled, readline
-              treats hyphens (_\b-) and underscores (_\b_) as equivalent  when  per-
+              If set to O\bOn\bn, and c\bco\bom\bmp\bpl\ble\bet\bti\bio\bon\bn-\b-i\big\bgn\bno\bor\bre\be-\b-c\bca\bas\bse\be  is  enabled,  readline
+              treats  hyphens  (_\b-) and underscores (_\b_) as equivalent when per-
               forming case-insensitive filename matching and completion.
        c\bco\bom\bmp\bpl\ble\bet\bti\bio\bon\bn-\b-p\bpr\bre\bef\bfi\bix\bx-\b-d\bdi\bis\bsp\bpl\bla\bay\by-\b-l\ble\ben\bng\bgt\bth\bh (\b(0\b0)\b)
-              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-
+              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.
        c\bco\bom\bmp\bpl\ble\bet\bti\bio\bon\bn-\b-q\bqu\bue\ber\bry\by-\b-i\bit\bte\bem\bms\bs (\b(1\b10\b00\b0)\b)
-              This  determines when the user is queried about viewing the num-
-              ber of possible completions generated  by  the  p\bpo\bos\bss\bsi\bib\bbl\ble\be-\b-c\bco\bom\bmp\bpl\ble\be-\b-
-              t\bti\bio\bon\bns\bs  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.
+              This determines when the user is queried about viewing the  num-
+              ber  of  possible  completions generated by the p\bpo\bos\bss\bsi\bib\bbl\ble\be-\b-c\bco\bom\bmp\bpl\ble\be-\b-
+              t\bti\bio\bon\bns\bs 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.
        c\bco\bon\bnv\bve\ber\brt\bt-\b-m\bme\bet\bta\ba (\b(O\bOn\bn)\b)
               If  set  to O\bOn\bn, 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
               _\bm_\be_\bt_\ba _\bp_\br_\be_\bf_\bi_\bx).  The default is _\bO_\bn, but readline will  set  it  to
-              _\bO_\bf_\bf if the locale contains eight-bit characters.
+              _\bO_\bf_\bf  if the locale contains eight-bit characters.  This variable
+              is dependent on the L\bLC\bC_\b_C\bCT\bTY\bYP\bPE\bE locale category, and may change  if
+              the locale is changed.
        d\bdi\bis\bsa\bab\bbl\ble\be-\b-c\bco\bom\bmp\bpl\ble\bet\bti\bio\bon\bn (\b(O\bOf\bff\bf)\b)
               If set to O\bOn\bn, readline will inhibit word completion.  Completion
               characters will be inserted into the line as if  they  had  been
@@ -3245,13 +3407,23 @@ R\bRE\bEA\bAD\bDL\bLI\bIN\bNE\bE
               escapes to begin and end sequences of  non-printing  characters,
               which  can be used to embed a terminal control sequence into the
               mode string.
+       e\ben\bna\bab\bbl\ble\be-\b-a\bac\bct\bti\biv\bve\be-\b-r\bre\beg\bgi\bio\bon\bn (\b(O\bOn\bn)\b)
+              The _\bp_\bo_\bi_\bn_\bt is the current cursor position, and _\bm_\ba_\br_\bk refers  to  a
+              saved  cursor  position.  The text between the point and mark is
+              referred to as the _\br_\be_\bg_\bi_\bo_\bn.  When this variable  is  set  to  _\bO_\bn,
+              readline  allows certain commands to designate the region as _\ba_\bc_\b-
+              _\bt_\bi_\bv_\be.  When the region is active, readline highlights  the  text
+              in  the region using the value of the a\bac\bct\bti\biv\bve\be-\b-r\bre\beg\bgi\bio\bon\bn-\b-s\bst\bta\bar\brt\bt-\b-c\bco\bol\blo\bor\br,
+              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.
        e\ben\bna\bab\bbl\ble\be-\b-b\bbr\bra\bac\bck\bke\bet\bte\bed\bd-\b-p\bpa\bas\bst\bte\be (\b(O\bOn\bn)\b)
-              When set to O\bOn\bn, readline will configure the terminal  in  a  way
-              that will enable it to insert each paste into the editing buffer
-              as a single string of characters, instead of treating each char-
-              acter  as  if it had been read from the keyboard.  This can pre-
-              vent pasted characters from being interpreted  as  editing  com-
-              mands.
+              When  set to O\bOn\bn, 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.
        e\ben\bna\bab\bbl\ble\be-\b-k\bke\bey\byp\bpa\bad\bd (\b(O\bOf\bff\bf)\b)
               When set to O\bOn\bn, readline will try to enable the application key-
               pad when it is called.  Some systems need this to enable the ar-
@@ -3288,158 +3460,161 @@ R\bRE\bEA\bAD\bDL\bLI\bIN\bNE\bE
               gardless  of  what the terminal claims it can support.  The name
               m\bme\bet\bta\ba-\b-f\bfl\bla\bag\bg is a synonym for this variable.  The default  is  _\bO_\bf_\bf,
               but  readline will set it to _\bO_\bn if the locale contains eight-bit
-              characters.
+              characters.  This variable is dependent on the  L\bLC\bC_\b_C\bCT\bTY\bYP\bPE\bE  locale
+              category, and may change if the locale is changed.
        i\bis\bse\bea\bar\brc\bch\bh-\b-t\bte\ber\brm\bmi\bin\bna\bat\bto\bor\brs\bs (\b(`\b``\b`C\bC-\b-[\b[C\bC-\b-J\bJ'\b''\b')\b)
-              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-
+              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 _\bE_\bS_\bC and _\bC_\b-_\bJ will terminate an incremental search.
        k\bke\bey\bym\bma\bap\bp (\b(e\bem\bma\bac\bcs\bs)\b)
-              Set  the current readline keymap.  The set of valid keymap names
-              is _\be_\bm_\ba_\bc_\bs_\b, _\be_\bm_\ba_\bc_\bs_\b-_\bs_\bt_\ba_\bn_\bd_\ba_\br_\bd_\b, _\be_\bm_\ba_\bc_\bs_\b-_\bm_\be_\bt_\ba_\b,  _\be_\bm_\ba_\bc_\bs_\b-_\bc_\bt_\bl_\bx_\b,  _\bv_\bi_\b _\bv_\bi_\b-_\bc_\bo_\bm_\b-
-              _\bm_\ba_\bn_\bd,  and  _\bv_\bi_\b-_\bi_\bn_\bs_\be_\br_\bt.  _\bv_\bi is equivalent to _\bv_\bi_\b-_\bc_\bo_\bm_\bm_\ba_\bn_\bd; _\be_\bm_\ba_\bc_\bs is
-              equivalent to _\be_\bm_\ba_\bc_\bs_\b-_\bs_\bt_\ba_\bn_\bd_\ba_\br_\bd.  The default value is  _\be_\bm_\ba_\bc_\bs;  the
+              Set the current readline keymap.  The set of valid keymap  names
+              is  _\be_\bm_\ba_\bc_\bs_\b,  _\be_\bm_\ba_\bc_\bs_\b-_\bs_\bt_\ba_\bn_\bd_\ba_\br_\bd_\b,  _\be_\bm_\ba_\bc_\bs_\b-_\bm_\be_\bt_\ba_\b, _\be_\bm_\ba_\bc_\bs_\b-_\bc_\bt_\bl_\bx_\b, _\bv_\bi_\b, _\bv_\bi_\b-_\bc_\bo_\bm_\b-
+              _\bm_\ba_\bn_\bd, and _\bv_\bi_\b-_\bi_\bn_\bs_\be_\br_\bt.  _\bv_\bi is equivalent to _\bv_\bi_\b-_\bc_\bo_\bm_\bm_\ba_\bn_\bd;  _\be_\bm_\ba_\bc_\b is
+              equivalent  to  _\be_\bm_\ba_\bc_\bs_\b-_\bs_\bt_\ba_\bn_\bd_\ba_\br_\bd.  The default value is _\be_\bm_\ba_\bc_\bs; the
               value of e\bed\bdi\bit\bti\bin\bng\bg-\b-m\bmo\bod\bde\be also affects the default keymap.
        k\bke\bey\bys\bse\beq\bq-\b-t\bti\bim\bme\beo\bou\but\bt (\b(5\b50\b00\b0)\b)
-              Specifies  the  duration _\br_\be_\ba_\bd_\bl_\bi_\bn_\be will wait for a character when
-              reading an ambiguous key sequence (one that can form a  complete
+              Specifies the duration _\br_\be_\ba_\bd_\bl_\bi_\bn_\be 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,  _\br_\be_\ba_\bd_\bl_\bi_\bn_\be will use the shorter but
-              complete key sequence.  The value is specified in  milliseconds,
-              so  a value of 1000 means that _\br_\be_\ba_\bd_\bl_\bi_\bn_\be 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, _\br_\be_\ba_\bd_\bl_\bi_\bn_\be will wait
-              until another key is pressed to decide  which  key  sequence  to
+              input  to  complete  a longer key sequence).  If no input is re-
+              ceived within the timeout, _\br_\be_\ba_\bd_\bl_\bi_\bn_\be will  use  the  shorter  but
+              complete  key sequence.  The value is specified in milliseconds,
+              so a value of 1000 means that _\br_\be_\ba_\bd_\bl_\bi_\bn_\be 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, _\br_\be_\ba_\bd_\bl_\bi_\bn_\be will  wait
+              until  another  key  is  pressed to decide which key sequence to
               complete.
        m\bma\bar\brk\bk-\b-d\bdi\bir\bre\bec\bct\bto\bor\bri\bie\bes\bs (\b(O\bOn\bn)\b)
               If set to O\bOn\bn, completed directory names have a slash appended.
        m\bma\bar\brk\bk-\b-m\bmo\bod\bdi\bif\bfi\bie\bed\bd-\b-l\bli\bin\bne\bes\bs (\b(O\bOf\bff\bf)\b)
-              If  set  to  O\bOn\bn,  history lines that have been modified are dis-
+              If set to O\bOn\bn, history lines that have  been  modified  are  dis-
               played with a preceding asterisk (*\b*).
        m\bma\bar\brk\bk-\b-s\bsy\bym\bml\bli\bin\bnk\bke\bed\bd-\b-d\bdi\bir\bre\bec\bct\bto\bor\bri\bie\bes\bs (\b(O\bOf\bff\bf)\b)
               If set to O\bOn\bn, completed names which are symbolic links to direc-
-              tories  have  a slash appended (subject to the value of m\bma\bar\brk\bk-\b-d\bdi\bi-\b-
+              tories have a slash appended (subject to the value  of  m\bma\bar\brk\bk-\b-d\bdi\bi-\b-
               r\bre\bec\bct\bto\bor\bri\bie\bes\bs).
        m\bma\bat\btc\bch\bh-\b-h\bhi\bid\bdd\bde\ben\bn-\b-f\bfi\bil\ble\bes\bs (\b(O\bOn\bn)\b)
-              This variable, when set to O\bOn\bn, causes readline  to  match  files
-              whose  names  begin  with  a  `.' (hidden files) when performing
-              filename completion.  If set to O\bOf\bff\bf, the  leading  `.'  must  be
+              This  variable,  when  set to O\bOn\bn, causes readline to match files
+              whose names begin with a  `.'  (hidden  files)  when  performing
+              filename  completion.   If  set  to O\bOf\bff\bf, the leading `.' must be
               supplied by the user in the filename to be completed.
        m\bme\ben\bnu\bu-\b-c\bco\bom\bmp\bpl\ble\bet\bte\be-\b-d\bdi\bis\bsp\bpl\bla\bay\by-\b-p\bpr\bre\bef\bfi\bix\bx (\b(O\bOf\bff\bf)\b)
-              If  set to O\bOn\bn, menu completion displays the common prefix of the
+              If set to O\bOn\bn, menu completion displays the common prefix of  the
               list of possible completions (which may be empty) before cycling
               through the list.
        o\bou\but\btp\bpu\but\bt-\b-m\bme\bet\bta\ba (\b(O\bOf\bff\bf)\b)
-              If  set  to O\bOn\bn, readline will display characters with the eighth
+              If set to O\bOn\bn, readline will display characters with  the  eighth
               bit set directly rather than as a meta-prefixed escape sequence.
               The default is _\bO_\bf_\bf, but readline will set it to _\bO_\bn if the locale
-              contains eight-bit characters.
+              contains  eight-bit  characters.   This variable is dependent on
+              the L\bLC\bC_\b_C\bCT\bTY\bYP\bPE\bE locale category, and may change if  the  locale  is
+              changed.
        p\bpa\bag\bge\be-\b-c\bco\bom\bmp\bpl\ble\bet\bti\bio\bon\bns\bs (\b(O\bOn\bn)\b)
-              If set to O\bOn\bn, readline uses an internal _\bm_\bo_\br_\be-like pager to  dis-
+              If  set to O\bOn\bn, readline uses an internal _\bm_\bo_\br_\be-like pager to dis-
               play a screenful of possible completions at a time.
        p\bpr\bri\bin\bnt\bt-\b-c\bco\bom\bmp\bpl\ble\bet\bti\bio\bon\bns\bs-\b-h\bho\bor\bri\biz\bzo\bon\bnt\bta\bal\bll\bly\by (\b(O\bOf\bff\bf)\b)
-              If  set  to  O\bOn\bn,  readline will display completions with matches
-              sorted horizontally in alphabetical order, rather than down  the
+              If set to O\bOn\bn, readline will  display  completions  with  matches
+              sorted  horizontally in alphabetical order, rather than down the
               screen.
        r\bre\bev\bve\ber\brt\bt-\b-a\bal\bll\bl-\b-a\bat\bt-\b-n\bne\bew\bwl\bli\bin\bne\be (\b(O\bOf\bff\bf)\b)
-              If  set  to  O\bOn\bn, readline will undo all changes to history lines
+              If set to O\bOn\bn, readline will undo all changes  to  history  lines
               before returning when a\bac\bcc\bce\bep\bpt\bt-\b-l\bli\bin\bne\be is executed.  By default, his-
-              tory  lines  may  be  modified  and retain individual undo lists
+              tory lines may be modified  and  retain  individual  undo  lists
               across calls to r\bre\bea\bad\bdl\bli\bin\bne\be.
        s\bsh\bho\bow\bw-\b-a\bal\bll\bl-\b-i\bif\bf-\b-a\bam\bmb\bbi\big\bgu\buo\bou\bus\bs (\b(O\bOf\bff\bf)\b)
-              This alters the default behavior of  the  completion  functions.
+              This  alters  the  default behavior of the completion functions.
               If set to O\bOn\bn, words which have more than one possible completion
-              cause the matches to be listed immediately  instead  of  ringing
+              cause  the  matches  to be listed immediately instead of ringing
               the bell.
        s\bsh\bho\bow\bw-\b-a\bal\bll\bl-\b-i\bif\bf-\b-u\bun\bnm\bmo\bod\bdi\bif\bfi\bie\bed\bd (\b(O\bOf\bff\bf)\b)
-              This  alters the default behavior of the completion functions in
+              This alters the default behavior of the completion functions  in
               a fashion similar to s\bsh\bho\bow\bw-\b-a\bal\bll\bl-\b-i\bif\bf-\b-a\bam\bmb\bbi\big\bgu\buo\bou\bus\bs.  If set to O\bOn\bn, 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-
+              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.
        s\bsh\bho\bow\bw-\b-m\bmo\bod\bde\be-\b-i\bin\bn-\b-p\bpr\bro\bom\bmp\bpt\bt (\b(O\bOf\bff\bf)\b)
-              If set to O\bOn\bn, add a string to the beginning of the prompt  indi-
-              cating  the  editing  mode:  emacs, vi command, or vi insertion.
+              If  set to O\bOn\bn, 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., _\be_\bm_\ba_\bc_\bs_\b-_\bm_\bo_\bd_\be_\b-_\bs_\bt_\br_\bi_\bn_\bg).
        s\bsk\bki\bip\bp-\b-c\bco\bom\bmp\bpl\ble\bet\bte\bed\bd-\b-t\bte\bex\bxt\bt (\b(O\bOf\bff\bf)\b)
-              If set to O\bOn\bn, 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
+              If  set  to O\bOn\bn, 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.
        v\bvi\bi-\b-c\bcm\bmd\bd-\b-m\bmo\bod\bde\be-\b-s\bst\btr\bri\bin\bng\bg (\b((\b(c\bcm\bmd\bd)\b))\b)
-              If  the  _\bs_\bh_\bo_\bw_\b-_\bm_\bo_\bd_\be_\b-_\bi_\bn_\b-_\bp_\br_\bo_\bm_\bp_\bt variable is enabled, this string is
+              If the _\bs_\bh_\bo_\bw_\b-_\bm_\bo_\bd_\be_\b-_\bi_\bn_\b-_\bp_\br_\bo_\bm_\bp_\bt 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
+              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-
+              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.
        v\bvi\bi-\b-i\bin\bns\bs-\b-m\bmo\bod\bde\be-\b-s\bst\btr\bri\bin\bng\bg (\b((\b(i\bin\bns\bs)\b))\b)
-              If the _\bs_\bh_\bo_\bw_\b-_\bm_\bo_\bd_\be_\b-_\bi_\bn_\b-_\bp_\br_\bo_\bm_\bp_\bt variable is enabled, this  string  is
+              If  the  _\bs_\bh_\bo_\bw_\b-_\bm_\bo_\bd_\be_\b-_\bi_\bn_\b-_\bp_\br_\bo_\bm_\bp_\bt 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-
+              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.
        v\bvi\bis\bsi\bib\bbl\ble\be-\b-s\bst\bta\bat\bts\bs (\b(O\bOf\bff\bf)\b)
-              If  set to O\bOn\bn, a character denoting a file's type as reported by
-              _\bs_\bt_\ba_\bt(2) is appended to the filename when listing  possible  com-
+              If set to O\bOn\bn, a character denoting a file's type as reported  by
+              _\bs_\bt_\ba_\bt(2)  is  appended to the filename when listing possible com-
               pletions.
 
    R\bRe\bea\bad\bdl\bli\bin\bne\be C\bCo\bon\bnd\bdi\bit\bti\bio\bon\bna\bal\bl C\bCo\bon\bns\bst\btr\bru\buc\bct\bts\bs
-       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
+       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.
 
-       $\b$i\bif\bf    The $\b$i\bif\bf construct allows bindings to be made based on the  edit-
-              ing  mode,  the  terminal  being  used, or the application using
+       $\b$i\bif\bf    The  $\b$i\bif\bf 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
+               extends  to  the  end  of  the line; unless otherwise noted, no
               characters are required to isolate it.
 
-              m\bmo\bod\bde\be   The  m\bmo\bod\bde\be=\b=  form  of  the  $\b$i\bif\bf  directive is used to test
-                     whether readline is in emacs or vi  mode.   This  may  be
-                     used  in conjunction with the s\bse\bet\bt k\bke\bey\bym\bma\bap\bp command, for in-
-                     stance,  to  set  bindings  in  the  _\be_\bm_\ba_\bc_\bs_\b-_\bs_\bt_\ba_\bn_\bd_\ba_\br_\b  and
-                     _\be_\bm_\ba_\bc_\bs_\b-_\bc_\bt_\bl_\b keymaps  only  if readline is starting out in
+              m\bmo\bod\bde\be   The m\bmo\bod\bde\be=\b= form of the  $\b$i\bif\bf  directive  is  used  to  test
+                     whether  readline  is  in  emacs or vi mode.  This may be
+                     used in conjunction with the s\bse\bet\bt k\bke\bey\bym\bma\bap\bp command, for  in-
+                     stance,   to  set  bindings  in  the  _\be_\bm_\ba_\bc_\bs_\b-_\bs_\bt_\ba_\bn_\bd_\ba_\br_\bd  and
+                     _\be_\bm_\ba_\bc_\bs_\b-_\bc_\bt_\bl_\bkeymaps only if readline is  starting  out  in
                      emacs mode.
 
-              t\bte\ber\brm\bm   The t\bte\ber\brm\bm=\b= form may be used to  include  terminal-specific
+              t\bte\ber\brm\bm   The  t\bte\ber\brm\bm=\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= is tested against both the full name of the ter-
-                     minal and the portion of the  terminal  name  before  the
-                     first  -\b-.  This allows _\bs_\bu_\bn to match both _\bs_\bu_\bn and _\bs_\bu_\bn_\b-_\bc_\bm_\bd,
+                     minal  and  the  portion  of the terminal name before the
+                     first -\b-.  This allows _\bs_\bu_\bn to match both _\bs_\bu_\bn and  _\bs_\bu_\bn_\b-_\bc_\bm_\bd,
                      for instance.
 
               v\bve\ber\brs\bsi\bio\bon\bn
-                     The v\bve\ber\brs\bsi\bio\bon\bn test  may  be  used  to  perform  comparisons
-                     against  specific readline versions.  The v\bve\ber\brs\bsi\bio\bon\bn expands
-                     to the current readline version.  The set  of  comparison
-                     operators  includes  =\b=,  (and  =\b==\b=), !\b!=\b=, <\b<=\b=, >\b>=\b=, <\b<, and >\b>.
-                     The version number supplied on the right side of the  op-
-                     erator  consists  of  a major version number, an optional
+                     The  v\bve\ber\brs\bsi\bio\bon\bn  test  may  be  used  to perform comparisons
+                     against specific readline versions.  The v\bve\ber\brs\bsi\bio\bon\b expands
+                     to  the  current readline version.  The set of comparison
+                     operators includes =\b=, (and =\b==\b=), !\b!=\b=, <\b<=\b=,  >\b>=\b=,  <\b<,  and  >\b>.
+                     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., 7\b7.\b.1\b1).
-                     If  the  minor version is omitted, it is assumed to be 0\b0.
+                     If the minor version is omitted, it is assumed to  be  0\b0.
                      The operator may be separated from the string v\bve\ber\brs\bsi\bio\bon\bn and
                      from the version number argument by whitespace.
 
               a\bap\bpp\bpl\bli\bic\bca\bat\bti\bio\bon\bn
                      The a\bap\bpp\bpl\bli\bic\bca\bat\bti\bio\bon\bn construct is used to include application-
-                     specific settings.  Each program using the  readline  li-
-                     brary  sets  the  _\ba_\bp_\bp_\bl_\bi_\bc_\ba_\bt_\bi_\bo_\bn _\bn_\ba_\bm_\be, and an initialization
+                     specific  settings.   Each program using the readline li-
+                     brary sets the _\ba_\bp_\bp_\bl_\bi_\bc_\ba_\bt_\bi_\bo_\bn _\bn_\ba_\bm_\be,  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
+                     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\bba\bas\bsh\bh:
 
                      $\b$i\bif\bf Bash
@@ -3449,12 +3624,12 @@ R\bRE\bEA\bAD\bDL\bLI\bIN\bNE\bE
 
               _\bv_\ba_\br_\bi_\ba_\bb_\bl_\be
                      The _\bv_\ba_\br_\bi_\ba_\bb_\bl_\be construct provides simple equality tests for
-                     readline  variables and values.  The permitted comparison
-                     operators are _\b=, _\b=_\b=, and _\b!_\b=.  The variable name  must  be
+                     readline variables and values.  The permitted  comparison
+                     operators  are  _\b=, _\b=_\b=, and _\b!_\b=.  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
+                     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 _\bo_\bn and _\bo_\bf_\bf.
 
        $\b$e\ben\bnd\bdi\bif\bf This command, as seen in the previous example, terminates an $\b$i\bif\bf
@@ -3464,51 +3639,51 @@ R\bRE\bEA\bAD\bDL\bLI\bIN\bNE\bE
               test fails.
 
        $\b$i\bin\bnc\bcl\blu\bud\bde\be
-              This  directive takes a single filename as an argument and reads
-              commands and bindings from that file.  For example, the  follow-
+              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 _\b/_\be_\bt_\bc_\b/_\bi_\bn_\bp_\bu_\bt_\br_\bc:
 
               $\b$i\bin\bnc\bcl\blu\bud\bde\be  _\b/_\be_\bt_\bc_\b/_\bi_\bn_\bp_\bu_\bt_\br_\bc
 
    S\bSe\bea\bar\brc\bch\bhi\bin\bng\bg
-       Readline  provides  commands  for searching through the command history
+       Readline provides commands for searching through  the  command  history
        (see H\bHI\bIS\bST\bTO\bOR\bRY\bY below) for lines containing a specified string.  There are
        two search modes: _\bi_\bn_\bc_\br_\be_\bm_\be_\bn_\bt_\ba_\bl and _\bn_\bo_\bn_\b-_\bi_\bn_\bc_\br_\be_\bm_\be_\bn_\bt_\ba_\bl.
 
-       Incremental  searches  begin  before  the  user has finished typing the
-       search string.  As each character of the search string is typed,  read-
+       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 i\bis\bse\bea\bar\brc\bch\bh-\b-t\bte\ber\brm\bmi\bin\bna\bat\bto\bor\brs\bs variable are used to terminate  an
+       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 i\bis\bse\bea\bar\brc\bch\bh-\b-t\bte\ber\brm\bmi\bin\bna\bat\bto\bor\brs\bs 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
+       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 _\bn_\be_\bw_\bl_\bi_\bn_\be will termi-
+       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 _\bn_\be_\bw_\bl_\bi_\bn_\be  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
+       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
+       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.
 
    R\bRe\bea\bad\bdl\bli\bin\bne\be C\bCo\bom\bmm\bma\ban\bnd\bd N\bNa\bam\bme\bes\bs
-       The  following  is  a list of the names of the commands and the default
+       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, _\bp_\bo_\bi_\bn_\bt refers to the current cursor position, and _\bm_\ba_\br_\bk refers  to
-       a  cursor position saved by the s\bse\bet\bt-\b-m\bma\bar\brk\bk command.  The text between the
+       tions,  _\bp_\bo_\bi_\bn_\bt refers to the current cursor position, and _\bm_\ba_\br_\bk refers to
+       a cursor position saved by the s\bse\bet\bt-\b-m\bma\bar\brk\bk command.  The text between  the
        point and mark is referred to as the _\br_\be_\bg_\bi_\bo_\bn.
 
    C\bCo\bom\bmm\bma\ban\bnd\bds\bs f\bfo\bor\br M\bMo\bov\bvi\bin\bng\bg
@@ -3524,33 +3699,33 @@ R\bRE\bEA\bAD\bDL\bLI\bIN\bNE\bE
               Move forward to the end of the next word.  Words are composed of
               alphanumeric characters (letters and digits).
        b\bba\bac\bck\bkw\bwa\bar\brd\bd-\b-w\bwo\bor\brd\bd (\b(M\bM-\b-b\bb)\b)
-              Move  back  to the start of the current or previous word.  Words
+              Move back to the start of the current or previous  word.   Words
               are composed of alphanumeric characters (letters and digits).
        s\bsh\bhe\bel\bll\bl-\b-f\bfo\bor\brw\bwa\bar\brd\bd-\b-w\bwo\bor\brd\bd
-              Move forward to the end of the next word.  Words  are  delimited
+              Move  forward  to the end of the next word.  Words are delimited
               by non-quoted shell metacharacters.
        s\bsh\bhe\bel\bll\bl-\b-b\bba\bac\bck\bkw\bwa\bar\brd\bd-\b-w\bwo\bor\brd\bd
-              Move  back  to the start of the current or previous word.  Words
+              Move back to the start of the current or previous  word.   Words
               are delimited by non-quoted shell metacharacters.
        p\bpr\bre\bev\bvi\bio\bou\bus\bs-\b-s\bsc\bcr\bre\bee\ben\bn-\b-l\bli\bin\bne\be
-              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
+              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.
        n\bne\bex\bxt\bt-\b-s\bsc\bcr\bre\bee\ben\bn-\b-l\bli\bin\bne\be
-              Attempt to move point to the same physical screen column on  the
+              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
+              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.
        c\bcl\ble\bea\bar\br-\b-d\bdi\bis\bsp\bpl\bla\bay\by (\b(M\bM-\b-C\bC-\b-l\bl)\b)
-              Clear the screen and, if  possible,  the  terminal's  scrollback
-              buffer,  then  redraw the current line, leaving the current line
+              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.
        c\bcl\ble\bea\bar\br-\b-s\bsc\bcr\bre\bee\ben\bn (\b(C\bC-\b-l\bl)\b)
               Clear the screen, then redraw the current line, leaving the cur-
-              rent  line  at the top of the screen.  With an argument, refresh
+              rent line at the top of the screen.  With an  argument,  refresh
               the current line without clearing the screen.
        r\bre\bed\bdr\bra\baw\bw-\b-c\bcu\bur\brr\bre\ben\bnt\bt-\b-l\bli\bin\bne\be
               Refresh the current line.
@@ -3558,20 +3733,29 @@ R\bRE\bEA\bAD\bDL\bLI\bIN\bNE\bE
    C\bCo\bom\bmm\bma\ban\bnd\bds\bs f\bfo\bor\br M\bMa\ban\bni\bip\bpu\bul\bla\bat\bti\bin\bng\bg t\bth\bhe\be H\bHi\bis\bst\bto\bor\bry\by
        a\bac\bcc\bce\bep\bpt\bt-\b-l\bli\bin\bne\be (\b(N\bNe\bew\bwl\bli\bin\bne\be,\b, R\bRe\bet\btu\bur\brn\bn)\b)
               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 H\bHI\bIS\bST\bTC\bCO\bON\bNT\bTR\bRO\bOL\bL variable.  If the line is a modified  history
+              is non-empty, add it to the history list according to the  state
+              of  the H\bHI\bIS\bST\bTC\bCO\bON\bNT\bTR\bRO\bOL\bL variable.  If the line is a modified history
               line, then restore the history line to its original state.
        p\bpr\bre\bev\bvi\bio\bou\bus\bs-\b-h\bhi\bis\bst\bto\bor\bry\by (\b(C\bC-\b-p\bp)\b)
               Fetch the previous command from the history list, moving back in
               the list.
        n\bne\bex\bxt\bt-\b-h\bhi\bis\bst\bto\bor\bry\by (\b(C\bC-\b-n\bn)\b)
-              Fetch the next command from the history list, moving forward  in
+              Fetch  the next command from the history list, moving forward in
               the list.
        b\bbe\beg\bgi\bin\bnn\bni\bin\bng\bg-\b-o\bof\bf-\b-h\bhi\bis\bst\bto\bor\bry\by (\b(M\bM-\b-<\b<)\b)
               Move to the first line in the history.
        e\ben\bnd\bd-\b-o\bof\bf-\b-h\bhi\bis\bst\bto\bor\bry\by (\b(M\bM-\b->\b>)\b)
-              Move  to  the end of the input history, i.e., the line currently
+              Move to the end of the input history, i.e., the  line  currently
               being entered.
+       o\bop\bpe\ber\bra\bat\bte\be-\b-a\ban\bnd\bd-\b-g\bge\bet\bt-\b-n\bne\bex\bxt\bt (\b(C\bC-\b-o\bo)\b)
+              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.
+       f\bfe\bet\btc\bch\bh-\b-h\bhi\bis\bst\bto\bor\bry\by
+              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.
        r\bre\bev\bve\ber\brs\bse\be-\b-s\bse\bea\bar\brc\bch\bh-\b-h\bhi\bis\bst\bto\bor\bry\by (\b(C\bC-\b-r\br)\b)
               Search backward starting at the current  line  and  moving  `up'
               through  the  history  as  necessary.   This  is  an incremental
@@ -3643,67 +3827,62 @@ R\bRE\bEA\bAD\bDL\bLI\bIN\bNE\bE
               Perform history and alias expansion on the current line.
        i\bin\bns\bse\ber\brt\bt-\b-l\bla\bas\bst\bt-\b-a\bar\brg\bgu\bum\bme\ben\bnt\bt (\b(M\bM-\b-.\b.,\b, M\bM-\b-_\b_)\b)
               A synonym for y\bya\ban\bnk\bk-\b-l\bla\bas\bst\bt-\b-a\bar\brg\bg.
-       o\bop\bpe\ber\bra\bat\bte\be-\b-a\ban\bnd\bd-\b-g\bge\bet\bt-\b-n\bne\bex\bxt\bt (\b(C\bC-\b-o\bo)\b)
-              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.
        e\bed\bdi\bit\bt-\b-a\ban\bnd\bd-\b-e\bex\bxe\bec\bcu\but\bte\be-\b-c\bco\bom\bmm\bma\ban\bnd\bd (\b(C\bC-\b-x\bx C\bC-\b-e\be)\b)
-              Invoke an editor on the current command line,  and  execute  the
+              Invoke  an  editor  on the current command line, and execute the
               result as shell commands.  B\bBa\bas\bsh\bh attempts to invoke $\b$V\bVI\bIS\bSU\bUA\bAL\bL, $\b$E\bED\bD-\b-
               I\bIT\bTO\bOR\bR, and _\be_\bm_\ba_\bc_\bs as the editor, in that order.
 
    C\bCo\bom\bmm\bma\ban\bnd\bds\bs f\bfo\bor\br C\bCh\bha\ban\bng\bgi\bin\bng\bg T\bTe\bex\bxt\bt
        _\be_\bn_\bd_\b-_\bo_\bf_\b-_\bf_\bi_\bl_\be (\b(u\bus\bsu\bua\bal\bll\bly\by C\bC-\b-d\bd)\b)
-              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 E\bEO\bOF\bF.
+              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 E\bEO\bOF\bF.
        d\bde\bel\ble\bet\bte\be-\b-c\bch\bha\bar\br (\b(C\bC-\b-d\bd)\b)
               Delete the character at point.  If this function is bound to the
               same character as the tty E\bEO\bOF\bF character, as C\bC-\b-d\bd commonly is, see
               above for the effects.
        b\bba\bac\bck\bkw\bwa\bar\brd\bd-\b-d\bde\bel\ble\bet\bte\be-\b-c\bch\bha\bar\br (\b(R\bRu\bub\bbo\bou\but\bt)\b)
-              Delete  the  character  behind the cursor.  When given a numeric
+              Delete the character behind the cursor.  When  given  a  numeric
               argument, save the deleted text on the kill ring.
        f\bfo\bor\brw\bwa\bar\brd\bd-\b-b\bba\bac\bck\bkw\bwa\bar\brd\bd-\b-d\bde\bel\ble\bet\bte\be-\b-c\bch\bha\bar\br
-              Delete the character under the cursor, unless the cursor  is  at
+              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.
        q\bqu\buo\bot\bte\bed\bd-\b-i\bin\bns\bse\ber\brt\bt (\b(C\bC-\b-q\bq,\b, C\bC-\b-v\bv)\b)
-              Add the next character typed to the line verbatim.  This is  how
+              Add  the next character typed to the line verbatim.  This is how
               to insert characters like C\bC-\b-q\bq, for example.
        t\bta\bab\bb-\b-i\bin\bns\bse\ber\brt\bt (\b(C\bC-\b-v\bv T\bTA\bAB\bB)\b)
               Insert a tab character.
        s\bse\bel\blf\bf-\b-i\bin\bns\bse\ber\brt\bt (\b(a\ba,\b, b\bb,\b, A\bA,\b, 1\b1,\b, !\b!,\b, .\b..\b..\b.)\b)
               Insert the character typed.
        t\btr\bra\ban\bns\bsp\bpo\bos\bse\be-\b-c\bch\bha\bar\brs\bs (\b(C\bC-\b-t\bt)\b)
-              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.
+              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.
        t\btr\bra\ban\bns\bsp\bpo\bos\bse\be-\b-w\bwo\bor\brd\bds\bs (\b(M\bM-\b-t\bt)\b)
-              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
+              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.
        u\bup\bpc\bca\bas\bse\be-\b-w\bwo\bor\brd\bd (\b(M\bM-\b-u\bu)\b)
-              Uppercase the current (or following) word.  With a negative  ar-
+              Uppercase  the current (or following) word.  With a negative ar-
               gument, uppercase the previous word, but do not move point.
        d\bdo\bow\bwn\bnc\bca\bas\bse\be-\b-w\bwo\bor\brd\bd (\b(M\bM-\b-l\bl)\b)
-              Lowercase  the current (or following) word.  With a negative ar-
+              Lowercase the current (or following) word.  With a negative  ar-
               gument, lowercase the previous word, but do not move point.
        c\bca\bap\bpi\bit\bta\bal\bli\biz\bze\be-\b-w\bwo\bor\brd\bd (\b(M\bM-\b-c\bc)\b)
               Capitalize the current (or following) word.  With a negative ar-
               gument, capitalize the previous word, but do not move point.
        o\bov\bve\ber\brw\bwr\bri\bit\bte\be-\b-m\bmo\bod\bde\be
-              Toggle  overwrite mode.  With an explicit positive numeric argu-
+              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 e\bem\bma\bac\bcs\bs mode; v\bvi\bi mode does overwrite differently.  Each  call
+              only  e\bem\bma\bac\bcs\bs mode; v\bvi\bi mode does overwrite differently.  Each call
               to _\br_\be_\ba_\bd_\bl_\bi_\bn_\be_\b(_\b) starts in insert mode.  In overwrite mode, charac-
-              ters bound to s\bse\bel\blf\bf-\b-i\bin\bns\bse\ber\brt\bt replace the text at point rather  than
-              pushing  the  text  to  the  right.   Characters  bound to b\bba\bac\bck\bk-\b-
-              w\bwa\bar\brd\bd-\b-d\bde\bel\ble\bet\bte\be-\b-c\bch\bha\bar\breplace  the  character  before  point  with  a
+              ters  bound to s\bse\bel\blf\bf-\b-i\bin\bns\bse\ber\brt\bt replace the text at point rather than
+              pushing the text  to  the  right.   Characters  bound  to  b\bba\bac\bck\bk-\b-
+              w\bwa\bar\brd\bd-\b-d\bde\bel\ble\bet\bte\be-\b-c\bch\bha\bar\b replace  the  character  before  point  with a
               space.  By default, this command is unbound.
 
    K\bKi\bil\bll\bli\bin\bng\bg a\ban\bnd\bd Y\bYa\ban\bnk\bki\bin\bng\bg
@@ -3712,31 +3891,31 @@ R\bRE\bEA\bAD\bDL\bLI\bIN\bNE\bE
        b\bba\bac\bck\bkw\bwa\bar\brd\bd-\b-k\bki\bil\bll\bl-\b-l\bli\bin\bne\be (\b(C\bC-\b-x\bx R\bRu\bub\bbo\bou\but\bt)\b)
               Kill backward to the beginning of the line.
        u\bun\bni\bix\bx-\b-l\bli\bin\bne\be-\b-d\bdi\bis\bsc\bca\bar\brd\bd (\b(C\bC-\b-u\bu)\b)
-              Kill  backward  from  point  to  the beginning of the line.  The
+              Kill backward from point to the  beginning  of  the  line.   The
               killed text is saved on the kill-ring.
        k\bki\bil\bll\bl-\b-w\bwh\bho\bol\ble\be-\b-l\bli\bin\bne\be
-              Kill all characters on the current line, no matter  where  point
+              Kill  all  characters on the current line, no matter where point
               is.
        k\bki\bil\bll\bl-\b-w\bwo\bor\brd\bd (\b(M\bM-\b-d\bd)\b)
-              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
+              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 f\bfo\bor\brw\bwa\bar\brd\bd-\b-w\bwo\bor\brd\bd.
        b\bba\bac\bck\bkw\bwa\bar\brd\bd-\b-k\bki\bil\bll\bl-\b-w\bwo\bor\brd\bd (\b(M\bM-\b-R\bRu\bub\bbo\bou\but\bt)\b)
-              Kill  the  word  behind  point.  Word boundaries are the same as
+              Kill the word behind point.  Word boundaries  are  the  same  as
               those used by b\bba\bac\bck\bkw\bwa\bar\brd\bd-\b-w\bwo\bor\brd\bd.
        s\bsh\bhe\bel\bll\bl-\b-k\bki\bil\bll\bl-\b-w\bwo\bor\brd\bd
-              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
+              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 s\bsh\bhe\bel\bll\bl-\b-f\bfo\bor\brw\bwa\bar\brd\bd-\b-w\bwo\bor\brd\bd.
        s\bsh\bhe\bel\bll\bl-\b-b\bba\bac\bck\bkw\bwa\bar\brd\bd-\b-k\bki\bil\bll\bl-\b-w\bwo\bor\brd\bd
-              Kill the word behind point.  Word boundaries  are  the  same  as
+              Kill  the  word  behind  point.  Word boundaries are the same as
               those used by s\bsh\bhe\bel\bll\bl-\b-b\bba\bac\bck\bkw\bwa\bar\brd\bd-\b-w\bwo\bor\brd\bd.
        u\bun\bni\bix\bx-\b-w\bwo\bor\brd\bd-\b-r\bru\bub\bbo\bou\but\bt (\b(C\bC-\b-w\bw)\b)
-              Kill  the  word behind point, using white space as a word bound-
+              Kill the word behind point, using white space as a  word  bound-
               ary.  The killed text is saved on the kill-ring.
        u\bun\bni\bix\bx-\b-f\bfi\bil\ble\ben\bna\bam\bme\be-\b-r\bru\bub\bbo\bou\but\bt
-              Kill the word behind point, using  white  space  and  the  slash
-              character  as  the word boundaries.  The killed text is saved on
+              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.
        d\bde\bel\ble\bet\bte\be-\b-h\bho\bor\bri\biz\bzo\bon\bnt\bta\bal\bl-\b-s\bsp\bpa\bac\bce\be (\b(M\bM-\b-\\b\)\b)
               Delete all spaces and tabs around point.
@@ -3745,64 +3924,64 @@ R\bRE\bEA\bAD\bDL\bLI\bIN\bNE\bE
        c\bco\bop\bpy\by-\b-r\bre\beg\bgi\bio\bon\bn-\b-a\bas\bs-\b-k\bki\bil\bll\bl
               Copy the text in the region to the kill buffer.
        c\bco\bop\bpy\by-\b-b\bba\bac\bck\bkw\bwa\bar\brd\bd-\b-w\bwo\bor\brd\bd
-              Copy the word before point to the kill buffer.  The word  bound-
+              Copy  the word before point to the kill buffer.  The word bound-
               aries are the same as b\bba\bac\bck\bkw\bwa\bar\brd\bd-\b-w\bwo\bor\brd\bd.
        c\bco\bop\bpy\by-\b-f\bfo\bor\brw\bwa\bar\brd\bd-\b-w\bwo\bor\brd\bd
-              Copy  the  word  following  point  to the kill buffer.  The word
+              Copy the word following point to  the  kill  buffer.   The  word
               boundaries are the same as f\bfo\bor\brw\bwa\bar\brd\bd-\b-w\bwo\bor\brd\bd.
        y\bya\ban\bnk\bk (\b(C\bC-\b-y\by)\b)
               Yank the top of the kill ring into the buffer at point.
        y\bya\ban\bnk\bk-\b-p\bpo\bop\bp (\b(M\bM-\b-y\by)\b)
-              Rotate the kill ring, and yank the new top.  Only works  follow-
+              Rotate  the kill ring, and yank the new top.  Only works follow-
               ing y\bya\ban\bnk\bk or y\bya\ban\bnk\bk-\b-p\bpo\bop\bp.
 
    N\bNu\bum\bme\ber\bri\bic\bc A\bAr\brg\bgu\bum\bme\ben\bnt\bts\bs
        d\bdi\big\bgi\bit\bt-\b-a\bar\brg\bgu\bum\bme\ben\bnt\bt (\b(M\bM-\b-0\b0,\b, M\bM-\b-1\b1,\b, .\b..\b..\b.,\b, M\bM-\b--\b-)\b)
-              Add  this digit to the argument already accumulating, or start a
+              Add this digit to the argument already accumulating, or start  a
               new argument.  M-- starts a negative argument.
        u\bun\bni\biv\bve\ber\brs\bsa\bal\bl-\b-a\bar\brg\bgu\bum\bme\ben\bnt\bt
-              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-
+              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 u\bun\bni\biv\bve\ber\brs\bsa\bal\bl-\b-a\bar\brg\bgu\bum\bme\ben\bnt\bt 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-
+              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.
 
    C\bCo\bom\bmp\bpl\ble\bet\bti\bin\bng\bg
        c\bco\bom\bmp\bpl\ble\bet\bte\be (\b(T\bTA\bAB\bB)\b)
-              Attempt to perform completion on the text  before  point.   B\bBa\bas\bsh\bh
+              Attempt  to  perform  completion on the text before point.  B\bBa\bas\bsh\bh
               attempts completion treating the text as a variable (if the text
-              begins with $\b$), username (if the text begins with  ~\b~),  hostname
-              (if  the  text begins with @\b@), or command (including aliases and
+              begins  with  $\b$), username (if the text begins with ~\b~), hostname
+              (if the text begins with @\b@), or command (including  aliases  and
               functions) in turn.  If none of these produces a match, filename
               completion is attempted.
        p\bpo\bos\bss\bsi\bib\bbl\ble\be-\b-c\bco\bom\bmp\bpl\ble\bet\bti\bio\bon\bns\bs (\b(M\bM-\b-?\b?)\b)
               List the possible completions of the text before point.
        i\bin\bns\bse\ber\brt\bt-\b-c\bco\bom\bmp\bpl\ble\bet\bti\bio\bon\bns\bs (\b(M\bM-\b-*\b*)\b)
-              Insert  all completions of the text before point that would have
+              Insert all completions of the text before point that would  have
               been generated by p\bpo\bos\bss\bsi\bib\bbl\ble\be-\b-c\bco\bom\bmp\bpl\ble\bet\bti\bio\bon\bns\bs.
        m\bme\ben\bnu\bu-\b-c\bco\bom\bmp\bpl\ble\bet\bte\be
-              Similar to c\bco\bom\bmp\bpl\ble\bet\bte\be, but replaces the word to be completed  with
-              a  single match from the list of possible completions.  Repeated
-              execution of m\bme\ben\bnu\bu-\b-c\bco\bom\bmp\bpl\ble\bet\bte\be steps through the  list  of  possible
-              completions,  inserting  each  match in turn.  At the end of the
+              Similar  to c\bco\bom\bmp\bpl\ble\bet\bte\be, but replaces the word to be completed with
+              a single match from the list of possible completions.   Repeated
+              execution  of  m\bme\ben\bnu\bu-\b-c\bco\bom\bmp\bpl\ble\bet\bte\be  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\bbe\bel\bll\bl-\b-s\bst\bty\byl\ble\be) and the original text is restored.  An argument of _\bn
               moves _\bn 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 T\bTA\bAB\bB, but is unbound by default.
        m\bme\ben\bnu\bu-\b-c\bco\bom\bmp\bpl\ble\bet\bte\be-\b-b\bba\bac\bck\bkw\bwa\bar\brd\bd
-              Identical to m\bme\ben\bnu\bu-\b-c\bco\bom\bmp\bpl\ble\bet\bte\be, but moves backward through the  list
-              of  possible  completions,  as if m\bme\ben\bnu\bu-\b-c\bco\bom\bmp\bpl\ble\bet\bte\be had been given a
+              Identical  to m\bme\ben\bnu\bu-\b-c\bco\bom\bmp\bpl\ble\bet\bte\be, but moves backward through the list
+              of possible completions, as if m\bme\ben\bnu\bu-\b-c\bco\bom\bmp\bpl\ble\bet\bte\be had  been  given  a
               negative argument.  This command is unbound by default.
        d\bde\bel\ble\bet\bte\be-\b-c\bch\bha\bar\br-\b-o\bor\br-\b-l\bli\bis\bst\bt
-              Deletes the character under the cursor if not at  the  beginning
-              or  end  of  the  line (like d\bde\bel\ble\bet\bte\be-\b-c\bch\bha\bar\br).  If at the end of the
+              Deletes  the  character under the cursor if not at the beginning
+              or end of the line (like d\bde\bel\ble\bet\bte\be-\b-c\bch\bha\bar\br).  If at  the  end  of  the
               line, behaves identically to p\bpo\bos\bss\bsi\bib\bbl\ble\be-\b-c\bco\bom\bmp\bpl\ble\bet\bti\bio\bon\bns\bs.  This command
               is unbound by default.
        c\bco\bom\bmp\bpl\ble\bet\bte\be-\b-f\bfi\bil\ble\ben\bna\bam\bme\be (\b(M\bM-\b-/\b/)\b)
@@ -3811,67 +3990,67 @@ R\bRE\bEA\bAD\bDL\bLI\bIN\bNE\bE
               List the possible completions of the text before point, treating
               it as a filename.
        c\bco\bom\bmp\bpl\ble\bet\bte\be-\b-u\bus\bse\ber\brn\bna\bam\bme\be (\b(M\bM-\b-~\b~)\b)
-              Attempt completion on the text before point, treating  it  as  a
+              Attempt  completion  on  the text before point, treating it as a
               username.
        p\bpo\bos\bss\bsi\bib\bbl\ble\be-\b-u\bus\bse\ber\brn\bna\bam\bme\be-\b-c\bco\bom\bmp\bpl\ble\bet\bti\bio\bon\bns\bs (\b(C\bC-\b-x\bx ~\b~)\b)
               List the possible completions of the text before point, treating
               it as a username.
        c\bco\bom\bmp\bpl\ble\bet\bte\be-\b-v\bva\bar\bri\bia\bab\bbl\ble\be (\b(M\bM-\b-$\b$)\b)
-              Attempt completion on the text before point, treating  it  as  a
+              Attempt  completion  on  the text before point, treating it as a
               shell variable.
        p\bpo\bos\bss\bsi\bib\bbl\ble\be-\b-v\bva\bar\bri\bia\bab\bbl\ble\be-\b-c\bco\bom\bmp\bpl\ble\bet\bti\bio\bon\bns\bs (\b(C\bC-\b-x\bx $\b$)\b)
               List the possible completions of the text before point, treating
               it as a shell variable.
        c\bco\bom\bmp\bpl\ble\bet\bte\be-\b-h\bho\bos\bst\btn\bna\bam\bme\be (\b(M\bM-\b-@\b@)\b)
-              Attempt completion on the text before point, treating  it  as  a
+              Attempt  completion  on  the text before point, treating it as a
               hostname.
        p\bpo\bos\bss\bsi\bib\bbl\ble\be-\b-h\bho\bos\bst\btn\bna\bam\bme\be-\b-c\bco\bom\bmp\bpl\ble\bet\bti\bio\bon\bns\bs (\b(C\bC-\b-x\bx @\b@)\b)
               List the possible completions of the text before point, treating
               it as a hostname.
        c\bco\bom\bmp\bpl\ble\bet\bte\be-\b-c\bco\bom\bmm\bma\ban\bnd\bd (\b(M\bM-\b-!\b!)\b)
-              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
+              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\bpo\bos\bss\bsi\bib\bbl\ble\be-\b-c\bco\bom\bmm\bma\ban\bnd\bd-\b-c\bco\bom\bmp\bpl\ble\bet\bti\bio\bon\bns\bs (\b(C\bC-\b-x\bx !\b!)\b)
               List the possible completions of the text before point, treating
               it as a command name.
        d\bdy\byn\bna\bam\bmi\bic\bc-\b-c\bco\bom\bmp\bpl\ble\bet\bte\be-\b-h\bhi\bis\bst\bto\bor\bry\by (\b(M\bM-\b-T\bTA\bAB\bB)\b)
-              Attempt completion on the text before point, comparing the  text
-              against  lines  from  the  history  list for possible completion
+              Attempt  completion on the text before point, comparing the text
+              against lines from the  history  list  for  possible  completion
               matches.
        d\bda\bab\bbb\bbr\bre\bev\bv-\b-e\bex\bxp\bpa\ban\bnd\bd
-              Attempt menu completion on the text before point, comparing  the
+              Attempt  menu completion on the text before point, comparing the
               text against lines from the history list for possible completion
               matches.
        c\bco\bom\bmp\bpl\ble\bet\bte\be-\b-i\bin\bnt\bto\bo-\b-b\bbr\bra\bac\bce\bes\bs (\b(M\bM-\b-{\b{)\b)
               Perform filename completion and insert the list of possible com-
-              pletions  enclosed within braces so the list is available to the
+              pletions enclosed within braces so the list is available to  the
               shell (see B\bBr\bra\bac\bce\be E\bEx\bxp\bpa\ban\bns\bsi\bio\bon\bn above).
 
    K\bKe\bey\byb\bbo\boa\bar\brd\bd M\bMa\bac\bcr\bro\bos\bs
        s\bst\bta\bar\brt\bt-\b-k\bkb\bbd\bd-\b-m\bma\bac\bcr\bro\bo (\b(C\bC-\b-x\bx (\b()\b)
-              Begin saving the characters  typed  into  the  current  keyboard
+              Begin  saving  the  characters  typed  into the current keyboard
               macro.
        e\ben\bnd\bd-\b-k\bkb\bbd\bd-\b-m\bma\bac\bcr\bro\bo (\b(C\bC-\b-x\bx )\b))\b)
               Stop saving the characters typed into the current keyboard macro
               and store the definition.
        c\bca\bal\bll\bl-\b-l\bla\bas\bst\bt-\b-k\bkb\bbd\bd-\b-m\bma\bac\bcr\bro\bo (\b(C\bC-\b-x\bx e\be)\b)
-              Re-execute the last keyboard macro defined, by making the  char-
+              Re-execute  the last keyboard macro defined, by making the char-
               acters in the macro appear as if typed at the keyboard.
        p\bpr\bri\bin\bnt\bt-\b-l\bla\bas\bst\bt-\b-k\bkb\bbd\bd-\b-m\bma\bac\bcr\bro\bo (\b()\b)
-              Print  the  last keyboard macro defined in a format suitable for
+              Print the last keyboard macro defined in a format  suitable  for
               the _\bi_\bn_\bp_\bu_\bt_\br_\bc file.
 
    M\bMi\bis\bsc\bce\bel\bll\bla\ban\bne\beo\bou\bus\bs
        r\bre\be-\b-r\bre\bea\bad\bd-\b-i\bin\bni\bit\bt-\b-f\bfi\bil\ble\be (\b(C\bC-\b-x\bx C\bC-\b-r\br)\b)
-              Read in the contents of the _\bi_\bn_\bp_\bu_\bt_\br_\bc file,  and  incorporate  any
+              Read  in  the  contents of the _\bi_\bn_\bp_\bu_\bt_\br_\bc file, and incorporate any
               bindings or variable assignments found there.
        a\bab\bbo\bor\brt\bt (\b(C\bC-\b-g\bg)\b)
-              Abort  the  current editing command and ring the terminal's bell
+              Abort the current editing command and ring the  terminal's  bell
               (subject to the setting of b\bbe\bel\bll\bl-\b-s\bst\bty\byl\ble\be).
        d\bdo\bo-\b-l\blo\bow\bwe\ber\brc\bca\bas\bse\be-\b-v\bve\ber\brs\bsi\bio\bon\bn (\b(M\bM-\b-A\bA,\b, M\bM-\b-B\bB,\b, M\bM-\b-_\bx,\b, .\b..\b..\b.)\b)
-              If the metafied character _\bx is uppercase, run the  command  that
+              If  the  metafied character _\bx is uppercase, run the command that
               is bound to the corresponding metafied lowercase character.  The
               behavior is undefined if _\bx is already lowercase.
        p\bpr\bre\bef\bfi\bix\bx-\b-m\bme\bet\bta\ba (\b(E\bES\bSC\bC)\b)
@@ -3879,46 +4058,51 @@ R\bRE\bEA\bAD\bDL\bLI\bIN\bNE\bE
        u\bun\bnd\bdo\bo (\b(C\bC-\b-_\b_,\b, C\bC-\b-x\bx C\bC-\b-u\bu)\b)
               Incremental undo, separately remembered for each line.
        r\bre\bev\bve\ber\brt\bt-\b-l\bli\bin\bne\be (\b(M\bM-\b-r\br)\b)
-              Undo all changes made to this line.  This is like executing  the
-              u\bun\bnd\bdo\b command  enough  times  to  return the line to its initial
+              Undo  all changes made to this line.  This is like executing the
+              u\bun\bnd\bdo\bcommand enough times to return  the  line  to  its  initial
               state.
        t\bti\bil\bld\bde\be-\b-e\bex\bxp\bpa\ban\bnd\bd (\b(M\bM-\b-&\b&)\b)
               Perform tilde expansion on the current word.
        s\bse\bet\bt-\b-m\bma\bar\brk\bk (\b(C\bC-\b-@\b@,\b, M\bM-\b-<\b<s\bsp\bpa\bac\bce\be>\b>)\b)
-              Set the mark to the point.  If a numeric argument  is  supplied,
+              Set  the  mark to the point.  If a numeric argument is supplied,
               the mark is set to that position.
        e\bex\bxc\bch\bha\ban\bng\bge\be-\b-p\bpo\boi\bin\bnt\bt-\b-a\ban\bnd\bd-\b-m\bma\bar\brk\bk (\b(C\bC-\b-x\bx C\bC-\b-x\bx)\b)
-              Swap  the  point  with the mark.  The current cursor position is
-              set to the saved position, and the old cursor position is  saved
+              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.
        c\bch\bha\bar\bra\bac\bct\bte\ber\br-\b-s\bse\bea\bar\brc\bch\bh (\b(C\bC-\b-]\b])\b)
               A character is read and point is moved to the next occurrence of
-              that character.  A negative count searches for  previous  occur-
-              rences.
+              that  character.   A negative argument searches for previous oc-
+              currences.
        c\bch\bha\bar\bra\bac\bct\bte\ber\br-\b-s\bse\bea\bar\brc\bch\bh-\b-b\bba\bac\bck\bkw\bwa\bar\brd\bd (\b(M\bM-\b-C\bC-\b-]\b])\b)
-              A  character  is  read and point is moved to the previous occur-
-              rence of that character.  A negative count searches  for  subse-
-              quent occurrences.
+              A character is read and point is moved to  the  previous  occur-
+              rence  of that character.  A negative argument searches for sub-
+              sequent occurrences.
        s\bsk\bki\bip\bp-\b-c\bcs\bsi\bi-\b-s\bse\beq\bqu\bue\ben\bnc\bce\be
-              Read  enough  characters to consume a multi-key sequence such as
-              those defined for keys like Home and End.  Such sequences  begin
+              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.
+              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-[.
        i\bin\bns\bse\ber\brt\bt-\b-c\bco\bom\bmm\bme\ben\bnt\bt (\b(M\bM-\b-#\b#)\b)
-              Without  a  numeric  argument,  the  value  of the readline c\bco\bom\bm-\b-
-              m\bme\ben\bnt\bt-\b-b\bbe\beg\bgi\bin\bvariable is inserted at the beginning of the  current
+              Without a numeric argument,  the  value  of  the  readline  c\bco\bom\bm-\b-
+              m\bme\ben\bnt\bt-\b-b\bbe\beg\bgi\bin\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 c\bco\bom\bmm\bme\ben\bnt\bt-\b-b\bbe\beg\bgi\bin\bn, the value is inserted, other-
+              toggle:  if  the  characters at the beginning of the line do not
+              match the value of c\bco\bom\bmm\bme\ben\bnt\bt-\b-b\bbe\beg\bgi\bin\bn, the value is inserted,  other-
               wise the characters in c\bco\bom\bmm\bme\ben\bnt\bt-\b-b\bbe\beg\bgi\bin\bn 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  c\bco\bom\bmm\bme\ben\bnt\bt-\b-b\bbe\beg\bgi\bin\bn
-              causes  this  command  to make the current line a shell comment.
-              If a numeric argument causes the comment  character  to  be  re-
+              ning of the line.  In either case, the line is accepted as if  a
+              newline  had  been  typed.   The  default value of c\bco\bom\bmm\bme\ben\bnt\bt-\b-b\bbe\beg\bgi\bin\bn
+              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.
+       s\bsp\bpe\bel\bll\bl-\b-c\bco\bor\brr\bre\bec\bct\bt-\b-w\bwo\bor\brd\bd (\b(C\bC-\b-x\bx s\bs)\b)
+              Perform spelling correction on the current word, treating it  as
+              a  directory  or  filename, in the same way as the c\bcd\bds\bsp\bpe\bel\bll\bl shell
+              option.   Word  boundaries  are  the  same  as  those  used   by
+              s\bsh\bhe\bel\bll\bl-\b-f\bfo\bor\brw\bwa\bar\brd\bd-\b-w\bwo\bor\brd\bd.
        g\bgl\blo\bob\bb-\b-c\bco\bom\bmp\bpl\ble\bet\bte\be-\b-w\bwo\bor\brd\bd (\b(M\bM-\b-g\bg)\b)
               The  word  before point is treated as a pattern for pathname ex-
               pansion, with an asterisk implicitly appended.  This pattern  is
@@ -4295,21 +4479,21 @@ S\bSH\bHE\bEL\bLL\bL B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
               vironment  and  return  the exit status of the last command exe-
               cuted from _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be.  If _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be  does  not  contain  a  slash,
               filenames  in  P\bPA\bAT\bTH\bH  are  used  to find the directory containing
-              _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be.  The file searched for in P\bPA\bAT\bTH\bH need not be executable.
-              When  b\bba\bas\bsh\bh  is  not  in  _\bp_\bo_\bs_\bi_\bx  _\bm_\bo_\bd_\be,  the  current directory is
-              searched if no file is found in P\bPA\bAT\bTH\bH.  If the s\bso\bou\bur\brc\bce\bep\bpa\bat\bth\bh  option
-              to  the  s\bsh\bho\bop\bpt\bt  builtin  command  is turned off, the P\bPA\bAT\bTH\bH is not
-              searched.  If any _\ba_\br_\bg_\bu_\bm_\be_\bn_\bt_\bs are supplied, they become the  posi-
-              tional  parameters when _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be is executed.  Otherwise the po-
-              sitional parameters are unchanged.  If the -\b-T\bT option is enabled,
-              s\bso\bou\bur\brc\bce\be  inherits any trap on D\bDE\bEB\bBU\bUG\bG; if it is not, any D\bDE\bEB\bBU\bUG\bG trap
-              string is saved and restored around  the  call  to  s\bso\bou\bur\brc\bce\be,  and
-              s\bso\bou\bur\brc\bce\be  unsets  the  D\bDE\bEB\bBU\bUG\bG trap while it executes.  If -\b-T\bT is not
-              set, and the sourced file changes the D\bDE\bEB\bBU\bUG\bG trap, the new  value
-              is  retained  when  s\bso\bou\bur\brc\bce\be  completes.  The return status is the
-              status of the last command exited within the  script  (0  if  no
-              commands  are  executed),  and false if _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be is not found or
-              cannot be read.
+              _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be, but _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be does not need to be executable.  The file
+              searched  for  in P\bPA\bAT\bTH\bH need not be executable.  When b\bba\bas\bsh\bh is not
+              in _\bp_\bo_\bs_\bi_\bx _\bm_\bo_\bd_\be, it searches the current directory if no  file  is
+              found  in  P\bPA\bAT\bTH\bH.   If the s\bso\bou\bur\brc\bce\bep\bpa\bat\bth\bh option to the s\bsh\bho\bop\bpt\bt builtin
+              command is turned off, the P\bPA\bAT\bTH\bH is not searched.  If  any  _\ba_\br_\bg_\bu_\b-
+              _\bm_\be_\bn_\bt_\bs  are  supplied, they become the positional parameters when
+              _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be is executed.  Otherwise the positional  parameters  are
+              unchanged.   If the -\b-T\bT option is enabled, .\b. inherits any trap on
+              D\bDE\bEB\bBU\bUG\bG; if it is not, any D\bDE\bEB\bBU\bUG\bG trap string is saved and restored
+              around  the call to .\b., and .\b. unsets the D\bDE\bEB\bBU\bUG\bG trap while it exe-
+              cutes.  If -\b-T\bT is not set, and the sourced file changes the D\bDE\bEB\bBU\bUG\bG
+              trap,  the  new  value is retained when .\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 _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be is
+              not found or cannot be read.
 
        a\bal\bli\bia\bas\bs [-\b-p\bp] [_\bn_\ba_\bm_\be[=_\bv_\ba_\bl_\bu_\be] ...]
               A\bAl\bli\bia\bas\bs with no arguments or with the -\b-p\bp option prints the list of
@@ -4336,29 +4520,31 @@ S\bSH\bHE\bEL\bLL\bL B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
        b\bbi\bin\bnd\bd [-\b-m\bm _\bk_\be_\by_\bm_\ba_\bp] -\b-x\bx _\bk_\be_\by_\bs_\be_\bq:_\bs_\bh_\be_\bl_\bl_\b-_\bc_\bo_\bm_\bm_\ba_\bn_\bd
        b\bbi\bin\bnd\bd [-\b-m\bm _\bk_\be_\by_\bm_\ba_\bp] _\bk_\be_\by_\bs_\be_\bq:_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b-_\bn_\ba_\bm_\be
        b\bbi\bin\bnd\bd [-\b-m\bm _\bk_\be_\by_\bm_\ba_\bp] _\bk_\be_\by_\bs_\be_\bq:_\br_\be_\ba_\bd_\bl_\bi_\bn_\be_\b-_\bc_\bo_\bm_\bm_\ba_\bn_\bd
+       b\bbi\bin\bnd\bd _\br_\be_\ba_\bd_\bl_\bi_\bn_\be_\b-_\bc_\bo_\bm_\bm_\ba_\bn_\bd_\b-_\bl_\bi_\bn_\be
               Display  current  r\bre\bea\bad\bdl\bli\bin\bne\be key and function bindings, bind a key
               sequence to a r\bre\bea\bad\bdl\bli\bin\bne\be function or  macro,  or  set  a  r\bre\bea\bad\bdl\bli\bin\bne\be
               variable.  Each non-option argument is a command as it would ap-
-              pear in _\b._\bi_\bn_\bp_\bu_\bt_\br_\bc, but each binding or command must be passed  as
-              a separate argument; e.g., '"\C-x\C-r": re-read-init-file'.  Op-
-              tions, if supplied, have the following meanings:
+              pear in a r\bre\bea\bad\bdl\bli\bin\bne\be initialization file  such  as  _\b._\bi_\bn_\bp_\bu_\bt_\br_\bc,  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:
               -\b-m\bm _\bk_\be_\by_\bm_\ba_\bp
                      Use _\bk_\be_\by_\bm_\ba_\bp as the keymap to be affected by the subsequent
                      bindings.  Acceptable _\bk_\be_\by_\bm_\ba_\bp names are _\be_\bm_\ba_\bc_\bs_\b, _\be_\bm_\ba_\bc_\bs_\b-_\bs_\bt_\ba_\bn_\b-
-                     _\bd_\ba_\br_\bd_\b_\be_\bm_\ba_\bc_\bs_\b-_\bm_\be_\bt_\ba_\b, _\be_\bm_\ba_\bc_\bs_\b-_\bc_\bt_\bl_\bx_\b,  _\bv_\bi_\b,  _\bv_\bi_\b-_\bm_\bo_\bv_\be_\b _\bv_\bi_\b-_\bc_\bo_\bm_\bm_\ba_\bn_\bd,
-                     and  _\bv_\bi_\b-_\bi_\bn_\bs_\be_\br_\bt.   _\bv_\bi is equivalent to _\bv_\bi_\b-_\bc_\bo_\bm_\bm_\ba_\bn_\bd (_\bv_\bi_\b-_\bm_\bo_\bv_\be
-                     is also a synonym); _\be_\bm_\ba_\bc_\bs is  equivalent  to  _\be_\bm_\ba_\bc_\bs_\b-_\bs_\bt_\ba_\bn_\b-
+                     _\bd_\ba_\br_\bd_\b _\be_\bm_\ba_\bc_\bs_\b-_\bm_\be_\bt_\ba_\b,  _\be_\bm_\ba_\bc_\bs_\b-_\bc_\bt_\bl_\bx_\b,  _\bv_\bi_\b, _\bv_\bi_\b-_\bm_\bo_\bv_\be_\b, _\bv_\bi_\b-_\bc_\bo_\bm_\bm_\ba_\bn_\bd,
+                     and _\bv_\bi_\b-_\bi_\bn_\bs_\be_\br_\bt.  _\bv_\bi is equivalent to  _\bv_\bi_\b-_\bc_\bo_\bm_\bm_\ba_\bn_\b (_\bv_\bi_\b-_\bm_\bo_\bv_\be
+                     is  also  a  synonym); _\be_\bm_\ba_\bc_\bs is equivalent to _\be_\bm_\ba_\bc_\bs_\b-_\bs_\bt_\ba_\bn_\b-
                      _\bd_\ba_\br_\bd.
               -\b-l\bl     List the names of all r\bre\bea\bad\bdl\bli\bin\bne\be functions.
-              -\b-p\bp     Display  r\bre\bea\bad\bdl\bli\bin\bne\be  function  names and bindings in such a
+              -\b-p\bp     Display r\bre\bea\bad\bdl\bli\bin\bne\be function names and bindings  in  such  a
                      way that they can be re-read.
               -\b-P\bP     List current r\bre\bea\bad\bdl\bli\bin\bne\be function names and bindings.
-              -\b-s\bs     Display r\bre\bea\bad\bdl\bli\bin\bne\be key sequences bound to  macros  and  the
-                     strings  they  output  in such a way that they can be re-
+              -\b-s\bs     Display  r\bre\bea\bad\bdl\bli\bin\bne\be  key  sequences bound to macros and the
+                     strings they output in such a way that they  can  be  re-
                      read.
-              -\b-S\bS     Display r\bre\bea\bad\bdl\bli\bin\bne\be key sequences bound to  macros  and  the
+              -\b-S\bS     Display  r\bre\bea\bad\bdl\bli\bin\bne\be  key  sequences bound to macros and the
                      strings they output.
-              -\b-v\bv     Display  r\bre\bea\bad\bdl\bli\bin\bne\be variable names and values in such a way
+              -\b-v\bv     Display r\bre\bea\bad\bdl\bli\bin\bne\be variable names and values in such a  way
                      that they can be re-read.
               -\b-V\bV     List current r\bre\bea\bad\bdl\bli\bin\bne\be variable names and values.
               -\b-f\bf _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be
@@ -4371,14 +4557,17 @@ S\bSH\bHE\bEL\bLL\bL B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
                      Remove any current binding for _\bk_\be_\by_\bs_\be_\bq.
               -\b-x\bx _\bk_\be_\by_\bs_\be_\bq:\b:_\bs_\bh_\be_\bl_\bl_\b-_\bc_\bo_\bm_\bm_\ba_\bn_\bd
                      Cause _\bs_\bh_\be_\bl_\bl_\b-_\bc_\bo_\bm_\bm_\ba_\bn_\bd to be executed whenever _\bk_\be_\by_\bs_\be_\bq is en-
-                     tered.   When  _\bs_\bh_\be_\bl_\bl_\b-_\bc_\bo_\bm_\bm_\ba_\bn_\bd  is executed, the shell sets
-                     the R\bRE\bEA\bAD\bDL\bLI\bIN\bNE\bE_\b_L\bLI\bIN\bNE\bE variable to the contents of  the  r\bre\bea\bad\bd-\b-
+                     tered.  When _\bs_\bh_\be_\bl_\bl_\b-_\bc_\bo_\bm_\bm_\ba_\bn_\bd is executed,  the  shell  sets
+                     the  R\bRE\bEA\bAD\bDL\bLI\bIN\bNE\bE_\b_L\bLI\bIN\bNE\bE  variable to the contents of the r\bre\bea\bad\bd-\b-
                      l\bli\bin\bne\be line buffer and the R\bRE\bEA\bAD\bDL\bLI\bIN\bNE\bE_\b_P\bPO\bOI\bIN\bNT\bT and R\bRE\bEA\bAD\bDL\bLI\bIN\bNE\bE_\b_M\bMA\bAR\bRK\bK
-                     variables to the current location of the insertion  point
-                     and  the  saved insertion point (the mark), respectively.
-                     If the executed command changes the value of any of R\bRE\bEA\bAD\bD-\b-
-                     L\bLI\bIN\bNE\bE_\b_L\bLI\bIN\bNE\bE,  R\bRE\bEA\bAD\bDL\bLI\bIN\bNE\bE_\b_P\bPO\bOI\bIN\bNT\bT,  or  R\bRE\bEA\bAD\bDL\bLI\bIN\bNE\bE_\b_M\bMA\bAR\bRK\bK, those new
-                     values will be reflected in the editing state.
+                     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 R\bRE\bEA\bAD\bDL\bLI\bIN\bNE\bE_\b_A\bAR\bRG\bGU\bUM\bME\bEN\bNT\bT variable.  If there was no argu-
+                     ment,  that variable is not set.  If the executed command
+                     changes  the  value  of  any  of   R\bRE\bEA\bAD\bDL\bLI\bIN\bNE\bE_\b_L\bLI\bIN\bNE\bE,   R\bRE\bEA\bAD\bD-\b-
+                     L\bLI\bIN\bNE\bE_\b_P\bPO\bOI\bIN\bNT\bT,  or  R\bRE\bEA\bAD\bDL\bLI\bIN\bNE\bE_\b_M\bMA\bAR\bRK\bK,  those new values will be
+                     reflected in the editing state.
               -\b-X\bX     List all key sequences bound to shell  commands  and  the
                      associated commands in a format that can be reused as in-
                      put.
@@ -4416,137 +4605,140 @@ S\bSH\bHE\bEL\bLL\bL B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
 
        c\bcd\bd [-\b-L\bL|[-\b-P\bP [-\b-e\be]] [-@]] [_\bd_\bi_\br]
               Change the current directory to _\bd_\bi_\br.  if _\bd_\bi_\br  is  not  supplied,
-              the  value of the H\bHO\bOM\bME\bE shell variable is the default.  Any addi-
-              tional arguments following _\bd_\bi_\br are ignored.  The variable C\bCD\bDP\bPA\bAT\bTH\bH
-              defines  the  search path for the directory containing _\bd_\bi_\br: each
-              directory name in C\bCD\bDP\bPA\bAT\bTH\bH is searched for _\bd_\bi_\br.   Alternative  di-
-              rectory  names  in  C\bCD\bDP\bPA\bAT\bTH\bH are separated by a colon (:).  A null
-              directory name in C\bCD\bDP\bPA\bAT\bTH\bH is the same as the  current  directory,
-              i.e., ``.\b.''.  If _\bd_\bi_\br begins with a slash (/), then C\bCD\bDP\bPA\bAT\bTH\bH is not
-              used.  The -\b-P\bP option causes c\bcd\bd to  use  the  physical  directory
-              structure  by  resolving symbolic links while traversing _\bd_\bi_\br and
-              before processing instances of _\b._\b. in _\bd_\bi_\br (see also the -\b-P\bP option
-              to the s\bse\bet\bt builtin command); the -\b-L\bL option forces symbolic links
-              to be followed by resolving the link after processing  instances
-              of _\b._\b. in _\bd_\bi_\br.  If _\b._\b. appears in _\bd_\bi_\br, it is processed by removing
-              the immediately previous pathname component from _\bd_\bi_\br, back to  a
-              slash  or  the  beginning  of _\bd_\bi_\br.  If the -\b-e\be option is supplied
-              with -\b-P\bP, and the current working directory  cannot  be  success-
-              fully  determined  after  a successful directory change, c\bcd\bd 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- is converted  to  $\b$O\bOL\bLD\bDP\bPW\bWD\bD
-              before the directory change is attempted.  If a non-empty direc-
-              tory name from C\bCD\bDP\bPA\bAT\bTH\bH is used, or if -\b- is  the  first  argument,
-              and the directory change is successful, the absolute pathname of
-              the new working directory is written  to  the  standard  output.
-              The  return  value  is  true  if  the directory was successfully
-              changed; false otherwise.
+              the  value of the H\bHO\bOM\bME\bE shell variable is the default.  The vari-
+              able C\bCD\bDP\bPA\bAT\bTH\bH defines the search path for the directory containing
+              _\bd_\bi_\br:  each directory name in C\bCD\bDP\bPA\bAT\bTH\bH is searched for _\bd_\bi_\br.  Alter-
+              native directory names in C\bCD\bDP\bPA\bAT\bTH\bH are separated by a  colon  (:).
+              A  null  directory name in C\bCD\bDP\bPA\bAT\bTH\bH is the same as the current di-
+              rectory, i.e., ``.\b.''.  If _\bd_\bi_\br begins with a slash (/), then  C\bCD\bD-\b-
+              P\bPA\bAT\bTH\bH  is  not used.  The -\b-P\bP option causes c\bcd\bd to use the physical
+              directory structure by resolving symbolic links while traversing
+              _\bd_\bi_\br  and  before processing instances of _\b._\b. in _\bd_\bi_\br (see also the
+              -\b-P\bP option to the s\bse\bet\bt builtin command); the -\b-L\bL option forces sym-
+              bolic  links to be followed by resolving the link after process-
+              ing instances of _\b._\b. in _\bd_\bi_\br.  If _\b._\b. appears in _\bd_\bi_\br,  it  is  pro-
+              cessed  by  removing the immediately previous pathname component
+              from _\bd_\bi_\br, back to a slash or the beginning of _\bd_\bi_\br.   If  the  -\b-e\be
+              option  is  supplied  with -\b-P\bP, and the current working directory
+              cannot be successfully determined after a  successful  directory
+              change,  c\bcd\bd will return an unsuccessful status.  On systems that
+              support it, the -\b-@\b@ option presents the extended attributes asso-
+              ciated  with  a  file  as a directory.  An argument of -\b- is con-
+              verted to $\b$O\bOL\bLD\bDP\bPW\bWD\bD before the directory change is attempted.   If
+              a  non-empty  directory name from C\bCD\bDP\bPA\bAT\bTH\bH is used, or if -\b- 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, c\bcd\bd sets
+              the  value  of the P\bPW\bWD\bD environment variable to the new directory
+              name, and sets the O\bOL\bLD\bDP\bPW\bWD\bD 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.
 
        c\bco\bom\bmm\bma\ban\bnd\bd [-\b-p\bpV\bVv\bv] _\bc_\bo_\bm_\bm_\ba_\bn_\bd [_\ba_\br_\bg ...]
-              Run _\bc_\bo_\bm_\bm_\ba_\bn_\bd with _\ba_\br_\bg_\bs  suppressing  the  normal  shell  function
+              Run  _\bc_\bo_\bm_\bm_\ba_\bn_\bd  with  _\ba_\br_\bg_\bs  suppressing  the normal shell function
               lookup.  Only builtin commands or commands found in the P\bPA\bAT\bTH\bH are
-              executed.  If the -\b-p\bp option is given, the search for _\bc_\bo_\bm_\bm_\ba_\bn_\b is
-              performed  using  a default value for P\bPA\bAT\bTH\bH that is guaranteed to
-              find all of the standard utilities.  If either the -\b-V\bV or -\b-v\b op-
-              tion  is  supplied, a description of _\bc_\bo_\bm_\bm_\ba_\bn_\bd is printed.  The -\b-v\bv
-              option causes a single word indicating the command  or  filename
+              executed.   If the -\b-p\bp option is given, the search for _\bc_\bo_\bm_\bm_\ba_\bn_\bd is
+              performed using a default value for P\bPA\bAT\bTH\bH that is  guaranteed  to
+              find  all of the standard utilities.  If either the -\b-V\bV or -\b-v\bv op-
+              tion is supplied, a description of _\bc_\bo_\bm_\bm_\ba_\bn_\bd is printed.   The  -\b-v\bv
+              option  causes  a single word indicating the command or filename
               used to invoke _\bc_\bo_\bm_\bm_\ba_\bn_\bd to be displayed; the -\b-V\bV option produces a
-              more verbose description.  If the -\b-V\bV or -\b-v\bv option  is  supplied,
-              the  exit  status  is  0 if _\bc_\bo_\bm_\bm_\ba_\bn_\bd was found, and 1 if not.  If
+              more  verbose  description.  If the -\b-V\bV or -\b-v\bv option is supplied,
+              the exit status is 0 if _\bc_\bo_\bm_\bm_\ba_\bn_\bd was found, and  1  if  not.   If
               neither option is supplied and an error occurred or _\bc_\bo_\bm_\bm_\ba_\bn_\bd can-
-              not  be found, the exit status is 127.  Otherwise, the exit sta-
+              not be found, the exit status is 127.  Otherwise, the exit  sta-
               tus of the c\bco\bom\bmm\bma\ban\bnd\bd builtin is the exit status of _\bc_\bo_\bm_\bm_\ba_\bn_\bd.
 
        c\bco\bom\bmp\bpg\bge\ben\bn [_\bo_\bp_\bt_\bi_\bo_\bn] [_\bw_\bo_\br_\bd]
-              Generate possible completion matches for _\bw_\bo_\br_\bd according  to  the
-              _\bo_\bp_\bt_\bi_\bo_\bns,  which  may  be  any  option  accepted  by the c\bco\bom\bmp\bpl\ble\bet\bte\be
-              builtin with the exception of -\b-p\bp and -\b-r\br, and write  the  matches
-              to  the  standard  output.  When using the -\b-F\bF or -\b-C\bC options, the
-              various shell variables set by the programmable  completion  fa-
+              Generate  possible  completion matches for _\bw_\bo_\br_\bd according to the
+              _\bo_\bp_\bt_\bi_\bo_\bns, which may  be  any  option  accepted  by  the  c\bco\bom\bmp\bpl\ble\bet\bte\be
+              builtin  with  the exception of -\b-p\bp and -\b-r\br, and write the matches
+              to the standard output.  When using the -\b-F\bF or  -\b-C\bC  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 _\bw_\bo_\br_\bd is specified,
+              tion specification with the same flags.  If _\bw_\bo_\br_\bd  is  specified,
               only those completions matching _\bw_\bo_\br_\bd will be displayed.
 
-              The return value is true unless an invalid option  is  supplied,
+              The  return  value is true unless an invalid option is supplied,
               or no matches were generated.
 
-       c\bco\bom\bmp\bpl\ble\bet\bte\b [-\b-a\bab\bbc\bcd\bde\bef\bfg\bgj\bjk\bks\bsu\buv\bv] [-\b-o\bo _\bc_\bo_\bm_\bp_\b-_\bo_\bp_\bt_\bi_\bo_\bn] [-\b-D\bDE\bEI\bI] [-\b-A\bA _\ba_\bc_\bt_\bi_\bo_\bn] [-\b-G\bG _\bg_\bl_\bo_\bb_\b-
+       c\bco\bom\bmp\bpl\ble\bet\bte\b[-\b-a\bab\bbc\bcd\bde\bef\bfg\bgj\bjk\bks\bsu\buv\bv] [-\b-o\bo _\bc_\bo_\bm_\bp_\b-_\bo_\bp_\bt_\bi_\bo_\bn] [-\b-D\bDE\bEI\bI] [-\b-A\bA _\ba_\bc_\bt_\bi_\bo_\bn] [-\b-G\b _\bg_\bl_\bo_\bb_\b-
        _\bp_\ba_\bt] [-\b-W\bW _\bw_\bo_\br_\bd_\bl_\bi_\bs_\bt]
-              [-\b-F\b_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn] [-\b-C\bC _\bc_\bo_\bm_\bm_\ba_\bn_\bd] [-\b-X\bX _\bf_\bi_\bl_\bt_\be_\br_\bp_\ba_\bt] [-\b-P\bP _\bp_\br_\be_\bf_\bi_\bx]  [-\b-S\b _\bs_\bu_\bf_\b-
+              [-\b-F\b _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn]  [-\b-C\bC _\bc_\bo_\bm_\bm_\ba_\bn_\bd] [-\b-X\bX _\bf_\bi_\bl_\bt_\be_\br_\bp_\ba_\bt] [-\b-P\bP _\bp_\br_\be_\bf_\bi_\bx] [-\b-S\bS _\bs_\bu_\bf_\b-
               _\bf_\bi_\bx] _\bn_\ba_\bm_\be [_\bn_\ba_\bm_\be _\b._\b._\b.]
        c\bco\bom\bmp\bpl\ble\bet\bte\be -\b-p\bpr\br [-\b-D\bDE\bEI\bI] [_\bn_\ba_\bm_\be ...]
-              Specify  how arguments to each _\bn_\ba_\bm_\be should be completed.  If the
-              -\b-p\boption is supplied, or if no options are  supplied,  existing
-              completion  specifications are printed in a way that allows them
+              Specify how arguments to each _\bn_\ba_\bm_\be 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\br option removes a completion spec-
-              ification  for each _\bn_\ba_\bm_\be, or, if no _\bn_\ba_\bm_\bes are supplied, all com-
+              ification for each _\bn_\ba_\bm_\be, or, if no _\bn_\ba_\bm_\bes are supplied, all  com-
               pletion specifications.  The -\b-D\bD 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 -\b-E\bE 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\bI 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;  or |\b|, which is usually command name completion.  If
-              multiple options are supplied, the -\b-D\bD  option  takes  precedence
+              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 -\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\bI 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; or |\b|, which is usually command  name  completion.   If
+              multiple  options  are  supplied, the -\b-D\bD option takes precedence
               over -\b-E\bE, and both take precedence over -\b-I\bI.  If any of -\b-D\bD, -\b-E\bE, or
-              -\b-I\bare supplied, any other _\bn_\ba_\bm_\be  arguments  are  ignored;  these
+              -\b-I\b are  supplied,  any  other _\bn_\ba_\bm_\be 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  P\bPr\bro\bog\bgr\bra\bam\bm-\b-
+              The process of applying  these  completion  specifications  when
+              word  completion  is attempted is described above under P\bPr\bro\bog\bgr\bra\bam\bm-\b-
               m\bma\bab\bbl\ble\be C\bCo\bom\bmp\bpl\ble\bet\bti\bio\bon\bn.
 
-              Other  options,  if specified, have the following meanings.  The
-              arguments to the -\b-G\bG, -\b-W\bW, and -\b-X\bX options (and, if necessary,  the
-              -\b-P\b and -\b-S\bS options) should be quoted to protect them from expan-
+              Other options, if specified, have the following  meanings.   The
+              arguments  to the -\b-G\bG, -\b-W\bW, and -\b-X\bX options (and, if necessary, the
+              -\b-P\band -\b-S\bS options) should be quoted to protect them from  expan-
               sion before the c\bco\bom\bmp\bpl\ble\bet\bte\be builtin is invoked.
               -\b-o\bo _\bc_\bo_\bm_\bp_\b-_\bo_\bp_\bt_\bi_\bo_\bn
-                      The _\bc_\bo_\bm_\bp_\b-_\bo_\bp_\bt_\bi_\bo_\bn controls several aspects  of  the  comp-
-                      spec's  behavior beyond the simple generation of comple-
+                      The  _\bc_\bo_\bm_\bp_\b-_\bo_\bp_\bt_\bi_\bo_\bn  controls  several aspects of the comp-
+                      spec's behavior beyond the simple generation of  comple-
                       tions.  _\bc_\bo_\bm_\bp_\b-_\bo_\bp_\bt_\bi_\bo_\bn may be one of:
                       b\bba\bas\bsh\bhd\bde\bef\bfa\bau\bul\blt\bt
                               Perform the rest of the default b\bba\bas\bsh\bh completions
                               if the compspec generates no matches.
-                      d\bde\bef\bfa\bau\bul\blt\bt Use  readline's  default  filename completion if
+                      d\bde\bef\bfa\bau\bul\blt\bt Use readline's default  filename  completion  if
                               the compspec generates no matches.
                       d\bdi\bir\brn\bna\bam\bme\bes\bs
-                              Perform directory name completion if  the  comp-
+                              Perform  directory  name completion if the comp-
                               spec generates no matches.
                       f\bfi\bil\ble\ben\bna\bam\bme\bes\bs
-                              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
+                              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.
-                      n\bno\boq\bqu\buo\bot\bte\be Tell readline not to quote the  completed  words
-                              if  they are filenames (quoting filenames is the
+                      n\bno\boq\bqu\buo\bot\bte\be Tell  readline  not to quote the completed words
+                              if they are filenames (quoting filenames is  the
                               default).
-                      n\bno\bos\bso\bor\brt\bt  Tell readline not to sort the list  of  possible
+                      n\bno\bos\bso\bor\brt\bt  Tell  readline  not to sort the list of possible
                               completions alphabetically.
-                      n\bno\bos\bsp\bpa\bac\bce\be Tell  readline  not  to  append a space (the de-
-                              fault) to words completed  at  the  end  of  the
+                      n\bno\bos\bsp\bpa\bac\bce\be Tell readline not to append  a  space  (the  de-
+                              fault)  to  words  completed  at  the end of the
                               line.
                       p\bpl\blu\bus\bsd\bdi\bir\brs\bs
-                              After  any  matches  defined by the compspec are
+                              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.
               -\b-A\bA _\ba_\bc_\bt_\bi_\bo_\bn
-                      The _\ba_\bc_\bt_\bi_\bo_\bn may be one of the  following  to  generate  a
+                      The  _\ba_\bc_\bt_\bi_\bo_\bn  may  be  one of the following to generate a
                       list of possible completions:
                       a\bal\bli\bia\bas\bs   Alias names.  May also be specified as -\b-a\ba.
                       a\bar\brr\bra\bay\byv\bva\bar\br
                               Array variable names.
                       b\bbi\bin\bnd\bdi\bin\bng\bg R\bRe\bea\bad\bdl\bli\bin\bne\be key binding names.
-                      b\bbu\bui\bil\blt\bti\bin\bn Names  of  shell  builtin commands.  May also be
+                      b\bbu\bui\bil\blt\bti\bin\bn Names of shell builtin commands.   May  also  be
                               specified as -\b-b\bb.
                       c\bco\bom\bmm\bma\ban\bnd\bd Command names.  May also be specified as -\b-c\bc.
                       d\bdi\bir\bre\bec\bct\bto\bor\bry\by
@@ -4554,7 +4746,7 @@ S\bSH\bHE\bEL\bLL\bL B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
                       d\bdi\bis\bsa\bab\bbl\ble\bed\bd
                               Names of disabled shell builtins.
                       e\ben\bna\bab\bbl\ble\bed\bd Names of enabled shell builtins.
-                      e\bex\bxp\bpo\bor\brt\bt  Names of exported shell variables.  May also  be
+                      e\bex\bxp\bpo\bor\brt\bt  Names  of exported shell variables.  May also be
                               specified as -\b-e\be.
                       f\bfi\bil\ble\be    File names.  May also be specified as -\b-f\bf.
                       f\bfu\bun\bnc\bct\bti\bio\bon\bn
@@ -4563,17 +4755,17 @@ S\bSH\bHE\bEL\bLL\bL B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
                       h\bhe\bel\blp\bpt\bto\bop\bpi\bic\bc
                               Help topics as accepted by the h\bhe\bel\blp\bp builtin.
                       h\bho\bos\bst\btn\bna\bam\bme\be
-                              Hostnames,  as  taken from the file specified by
+                              Hostnames, as taken from the file  specified  by
                               the H\bHO\bOS\bST\bTF\bFI\bIL\bLE\bE shell variable.
-                      j\bjo\bob\bb     Job names, if job control is active.   May  also
+                      j\bjo\bob\bb     Job  names,  if job control is active.  May also
                               be specified as -\b-j\bj.
-                      k\bke\bey\byw\bwo\bor\brd\bd Shell  reserved words.  May also be specified as
+                      k\bke\bey\byw\bwo\bor\brd\bd Shell reserved words.  May also be specified  as
                               -\b-k\bk.
                       r\bru\bun\bnn\bni\bin\bng\bg Names of running jobs, if job control is active.
                       s\bse\ber\brv\bvi\bic\bce\be Service names.  May also be specified as -\b-s\bs.
-                      s\bse\bet\bto\bop\bpt\bt  Valid arguments for the -\b-o\bo  option  to  the  s\bse\bet\bt
+                      s\bse\bet\bto\bop\bpt\bt  Valid  arguments  for  the  -\b-o\bo option to the s\bse\bet\bt
                               builtin.
-                      s\bsh\bho\bop\bpt\bt   Shell  option  names  as  accepted  by the s\bsh\bho\bop\bpt\bt
+                      s\bsh\bho\bop\bpt\bt   Shell option names  as  accepted  by  the  s\bsh\bho\bop\bpt\bt
                               builtin.
                       s\bsi\big\bgn\bna\bal\bl  Signal names.
                       s\bst\bto\bop\bpp\bpe\bed\bd Names of stopped jobs, if job control is active.
@@ -4582,8 +4774,9 @@ S\bSH\bHE\bEL\bLL\bL B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
                               Names of all shell variables.  May also be spec-
                               ified as -\b-v\bv.
               -\b-C\bC _\bc_\bo_\bm_\bm_\ba_\bn_\bd
-                      _\bc_\bo_\bm_\bm_\ba_\bn_\bd  is  executed in a subshell environment, and its
-                      output is used as the possible completions.
+                      _\bc_\bo_\bm_\bm_\ba_\bn_\bd is executed in a subshell environment,  and  its
+                      output  is  used as the possible completions.  Arguments
+                      are passed as with the -\b-F\bF option.
               -\b-F\bF _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn
                       The shell function _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn is executed in  the  current
                       shell  environment.   When the function is executed, the
@@ -4805,16 +4998,22 @@ S\bSH\bHE\bEL\bLL\bL B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
               instead  of  the  shell builtin version, run ``enable -n test''.
               The -\b-f\bf option means to load the new builtin  command  _\bn_\ba_\bm_\be  from
               shared object _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be, on systems that support dynamic loading.
-              The -\b-d\bd option will delete a builtin previously loaded  with  -\b-f\bf.
-              If no _\bn_\ba_\bm_\be arguments are given, or if the -\b-p\bp option is supplied,
-              a list of shell builtins is printed.  With no other option argu-
-              ments,  the  list consists of all enabled shell builtins.  If -\b-n\bn
-              is supplied, only disabled builtins are printed.  If -\b-a\ba is  sup-
-              plied,  the  list printed includes all builtins, with an indica-
-              tion of whether or not each is enabled.  If -\b-s\bs is supplied,  the
-              output  is restricted to the POSIX _\bs_\bp_\be_\bc_\bi_\ba_\bl builtins.  The return
-              value is 0 unless a _\bn_\ba_\bm_\be is not a shell builtin or there  is  an
-              error loading a new builtin from a shared object.
+              Bash will use the value of the B\bBA\bAS\bSH\bH_\b_L\bLO\bOA\bAD\bDA\bAB\bBL\bLE\bES\bS_\b_P\bPA\bAT\bTH\bH variable as a
+              colon-separated list of directories in which to search for _\bf_\bi_\bl_\be_\b-
+              _\bn_\ba_\bm_\be.  The default is  system-dependent.   The  -\b-d\bd  option  will
+              delete  a  builtin  previously loaded with -\b-f\bf.  If no _\bn_\ba_\bm_\be argu-
+              ments are given, or if the -\b-p\bp 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\bn is supplied,
+              only disabled builtins are printed.  If -\b-a\ba is supplied, the list
+              printed includes all builtins, with an indication of whether  or
+              not  each  is  enabled.   If  -\b-s\bs  is supplied, the output is re-
+              stricted to the POSIX _\bs_\bp_\be_\bc_\bi_\ba_\bl builtins.  If no options are  sup-
+              plied  and a _\bn_\ba_\bm_\be is not a shell builtin, e\ben\bna\bab\bbl\ble\be will attempt to
+              load _\bn_\ba_\bm_\be from a shared object named _\bn_\ba_\bm_\be,  as  if  the  command
+              were  ``enable  -f  _\bn_\ba_\bm_\be  _\bn_\ba_\bm_\be .  The return value is 0 unless a
+              _\bn_\ba_\bm_\be is not a shell builtin or there is an error loading  a  new
+              builtin from a shared object.
 
        e\bev\bva\bal\bl [_\ba_\br_\bg ...]
               The  _\ba_\br_\bgs  are read and concatenated together into a single com-
@@ -5006,9 +5205,9 @@ S\bSH\bHE\bEL\bLL\bL B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
                      back from the end of the history,  and  an  index  of  -1
                      refers to the current h\bhi\bis\bst\bto\bor\bry\by -\b-d\bd command.
               -\b-d\bd _\bs_\bt_\ba_\br_\bt-_\be_\bn_\bd
-                     Delete  the  history  entries between positions _\bs_\bt_\ba_\br_\bt and
-                     _\be_\bn_\bd, inclusive.  Positive and negative values  for  _\bs_\bt_\ba_\br_\bt
-                     and _\be_\bn_\bd are interpreted as described above.
+                     Delete  the  range  of  history entries between positions
+                     _\bs_\bt_\ba_\br_\bt and _\be_\bn_\bd, inclusive.  Positive and  negative  values
+                     for _\bs_\bt_\ba_\br_\band _\be_\bn_\bd are interpreted as described above.
               -\b-a\ba     Append  the  ``new''  history  lines to the history file.
                      These are history lines entered since  the  beginning  of
                      the current b\bba\bas\bsh\bh session, but not already appended to the
@@ -5036,9 +5235,9 @@ S\bSH\bHE\bEL\bLL\bL B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
               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 _\bo_\bf_\bf_\bs_\be_\bt is sup-
-              plied as an argument to -\b-d\bd, or the history expansion supplied as
-              an argument to -\b-p\bp fails.
+              reading  or writing the history file, an invalid _\bo_\bf_\bf_\bs_\be_\bt or range
+              is supplied as an argument to -\b-d\bd, or the history expansion  sup-
+              plied as an argument to -\b-p\bp fails.
 
        j\bjo\bob\bbs\bs [-\b-l\bln\bnp\bpr\brs\bs] [ _\bj_\bo_\bb_\bs_\bp_\be_\bc ... ]
        j\bjo\bob\bbs\bs -\b-x\bx _\bc_\bo_\bm_\bm_\ba_\bn_\bd [ _\ba_\br_\bg_\bs ... ]
@@ -5140,44 +5339,55 @@ S\bSH\bHE\bEL\bLL\bL B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
               _\ba_\br_\br_\ba_\by is not an indexed array.
 
        p\bpo\bop\bpd\bd [-n\bn] [+_\bn] [-_\bn]
-              Removes  entries  from  the directory stack.  With no arguments,
-              removes the top directory from the stack, and performs a  c\bcd\bd  to
-              the new top directory.  Arguments, if supplied, have the follow-
-              ing meanings:
-              -\b-n\bn     Suppresses the normal change of directory  when  removing
+              Removes entries from the directory stack.  The elements are num-
+              bered from 0 starting at the first  directory  listed  by  d\bdi\bir\brs\bs.
+              With  no  arguments,  p\bpo\bop\bpd\bd  removes  the  top directory from the
+              stack, and changes to the new top directory.  Arguments, if sup-
+              plied, have the following meanings:
+              -\b-n\bn     Suppresses  the  normal change of directory when removing
                      directories from the stack, so that only the stack is ma-
                      nipulated.
-              +\b+_\bn     Removes the _\bnth entry counting from the left of the  list
-                     shown  by  d\bdi\bir\brs\bs, starting with zero.  For example: ``popd
-                     +0'' removes the first directory, ``popd +1'' the second.
+              +\b+_\bn     Removes  the _\bnth entry counting from the left of the list
+                     shown by d\bdi\bir\brs\bs, starting with zero, from the  stack.   For
+                     example:  ``popd +0'' removes the first directory, ``popd
+                     +1'' the second.
               -\b-_\bn     Removes the _\bnth entry counting from the right of the list
                      shown  by  d\bdi\bir\brs\bs, starting with zero.  For example: ``popd
                      -0'' removes the last directory, ``popd -1'' the next  to
                      last.
 
-              If  the p\bpo\bop\bpd\bd command is successful, a d\bdi\bir\brs\bs is performed as well,
-              and the return status is 0.  p\bpo\bop\bpd\bd returns false  if  an  invalid
-              option is encountered, the directory stack is empty, a non-exis-
-              tent directory stack entry is specified, or the directory change
-              fails.
+              If  the  top element of the directory stack is modified, and the
+              _\b-_\bn option was not supplied, p\bpo\bop\bpd\bd uses the c\bcd\bd builtin  to  change
+              to the directory at the top of the stack.  If the c\bcd\bd fails, p\bpo\bop\bpd\bd
+              returns a non-zero value.
+
+              Otherwise, p\bpo\bop\bpd\bd 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 p\bpo\bop\bpd\bd command is successful, bash runs d\bdi\bir\brs\bs  to  show  the
+              final  contents of the directory stack, and the return status is
+              0.
 
        p\bpr\bri\bin\bnt\btf\bf [-\b-v\bv _\bv_\ba_\br] _\bf_\bo_\br_\bm_\ba_\bt [_\ba_\br_\bg_\bu_\bm_\be_\bn_\bt_\bs]
-              Write  the  formatted _\ba_\br_\bg_\bu_\bm_\be_\bn_\bt_\bs to the standard output under the
-              control of the _\bf_\bo_\br_\bm_\ba_\bt.  The -\b-v\bv option causes the  output  to  be
-              assigned  to  the  variable _\bv_\ba_\br rather than being printed to the
+              Write the formatted _\ba_\br_\bg_\bu_\bm_\be_\bn_\bt_\bs to the standard output  under  the
+              control  of  the  _\bf_\bo_\br_\bm_\ba_\bt.  The -\b-v\bv option causes the output to be
+              assigned to the variable _\bv_\ba_\br rather than being  printed  to  the
               standard output.
 
-              The _\bf_\bo_\br_\bm_\ba_\bt 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  _\ba_\br_\bg_\bu_\bm_\be_\bn_\bt.   In
+              The  _\bf_\bo_\br_\bm_\ba_\bt  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 _\ba_\br_\bg_\bu_\bm_\be_\bn_\bt.  In
               addition to the standard _\bp_\br_\bi_\bn_\bt_\bf(1) format specifications, p\bpr\bri\bin\bnt\btf\bf
               interprets the following extensions:
               %\b%b\bb     causes p\bpr\bri\bin\bnt\btf\bf to expand backslash escape sequences in the
                      corresponding _\ba_\br_\bg_\bu_\bm_\be_\bn_\bt in the same way as e\bec\bch\bho\bo -\b-e\be.
-              %\b%q\bq     causes  p\bpr\bri\bin\bnt\btf\bf  to output the corresponding _\ba_\br_\bg_\bu_\bm_\be_\bn_\bt in a
+              %\b%q\bq     causes p\bpr\bri\bin\bnt\btf\bf to output the corresponding _\ba_\br_\bg_\bu_\bm_\be_\bn_\bt  in  a
                      format that can be reused as shell input.
+              %\b%Q\bQ     like  %\b%q\bq, but applies any supplied precision to the _\ba_\br_\bg_\bu_\b-
+                     _\bm_\be_\bn_\bt before quoting it.
               %\b%(\b(_\bd_\ba_\bt_\be_\bf_\bm_\bt)\b)T\bT
                      causes p\bpr\bri\bin\bnt\btf\bf to output the  date-time  string  resulting
                      from  using  _\bd_\ba_\bt_\be_\bf_\bm_\bt  as a format string for _\bs_\bt_\br_\bf_\bt_\bi_\bm_\be(3).
@@ -5209,9 +5419,9 @@ S\bSH\bHE\bEL\bLL\bL B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
        p\bpu\bus\bsh\bhd\bd [-\b-n\bn] [_\bd_\bi_\br]
               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, p\bpu\bus\bsh\bhd\bd exchanges the top  two  di-
-              rectories  and  returns  0, unless the directory stack is empty.
-              Arguments, if supplied, have the following meanings:
+              directory.  With no arguments, p\bpu\bus\bsh\bhd\bd exchanges the top two  ele-
+              ments  of the directory stack.  Arguments, if supplied, have the
+              following meanings:
               -\b-n\bn     Suppresses the normal change of directory  when  rotating
                      or  adding  directories  to  the  stack, so that only the
                      stack is manipulated.
@@ -5221,16 +5431,20 @@ S\bSH\bHE\bEL\bLL\bL B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
               -\b-_\bn     Rotates the stack so that  the  _\bnth  directory  (counting
                      from  the  right of the list shown by d\bdi\bir\brs\bs, starting with
                      zero) is at the top.
-              _\bd_\bi_\br    Adds _\bd_\bi_\br to the directory stack at the top, making it the
-                     new  current working directory as if it had been supplied
-                     as the argument to the c\bcd\bd builtin.
+              _\bd_\bi_\br    Adds _\bd_\bi_\br to the directory stack at the top
+
+              After the stack has been modified, if the -\b-n\bn option was not sup-
+              plied,  p\bpu\bus\bsh\bhd\bd  uses the c\bcd\bd builtin to change to the directory at
+              the top of the stack.  If the c\bcd\bd fails, p\bpu\bus\bsh\bhd\bd returns a non-zero
+              value.
+
+              Otherwise,  if no arguments are supplied, p\bpu\bus\bsh\bhd\bd returns 0 unless
+              the directory stack  is  empty.   When  rotating  the  directory
+              stack,  p\bpu\bus\bsh\bhd\bd returns 0 unless the directory stack is empty or a
+              non-existent directory stack element is specified.
 
-              If the p\bpu\bus\bsh\bhd\bd command is successful, a d\bdi\bir\brs\bs is performed as well.
-              If  the first form is used, p\bpu\bus\bsh\bhd\bd returns 0 unless the cd to _\bd_\bi_\br
-              fails.  With the second form, p\bpu\bus\bsh\bhd\bd returns 0 unless the  direc-
-              tory  stack  is empty, a non-existent directory stack element is
-              specified, or the directory change to the specified new  current
-              directory fails.
+              If the p\bpu\bus\bsh\bhd\bd command is successful, bash runs d\bdi\bir\brs\bs to  show  the
+              final contents of the directory stack.
 
        p\bpw\bwd\bd [-\b-L\bLP\bP]
               Print  the  absolute  pathname of the current working directory.
@@ -5270,7 +5484,7 @@ S\bSH\bHE\bEL\bLL\bL B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
               -\b-e\be     If the standard input is coming from a terminal, r\bre\bea\bad\bdl\bli\bin\bne\be
                      (see R\bRE\bEA\bAD\bDL\bLI\bIN\bNE\bE 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-
+                     not previously active) editing settings, but  uses  read-
                      line's default filename completion.
               -\b-i\bi _\bt_\be_\bx_\bt
                      If  r\bre\bea\bad\bdl\bli\bin\bne\be  is  being  used  to  read the line, _\bt_\be_\bx_\bt is
@@ -5312,115 +5526,116 @@ S\bSH\bHE\bEL\bLL\bL B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
                      the  specified  variable _\bn_\ba_\bm_\be.  If _\bt_\bi_\bm_\be_\bo_\bu_\bt is 0, r\bre\bea\bad\bd re-
                      turns immediately, without trying to read any data.   The
                      exit  status  is 0 if input is available on the specified
-                     file descriptor, non-zero otherwise.  The exit status  is
-                     greater than 128 if the timeout is exceeded.
+                     file descriptor, or the read will  return  EOF,  non-zero
+                     otherwise.   The  exit  status is greater than 128 if the
+                     timeout is exceeded.
               -\b-u\bu _\bf_\bd  Read input from file descriptor _\bf_\bd.
 
-              If  no _\bn_\ba_\bm_\be_\bs are supplied, the line read, without the ending de-
-              limiter but otherwise unmodified, is assigned  to  the  variable
-              R\bRE\bEP\bPL\bLY\bY.   The  exit status is zero, unless end-of-file is encoun-
-              tered, r\bre\bea\bad\bd times out (in which case the status is greater  than
-              128),  a variable assignment error (such as assigning to a read-
+              If no _\bn_\ba_\bm_\be_\bs are supplied, the line read, without the ending  de-
+              limiter  but  otherwise  unmodified, is assigned to the variable
+              R\bRE\bEP\bPL\bLY\bY.  The exit status is zero, unless end-of-file  is  encoun-
+              tered,  r\bre\bea\bad\bd 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 -\b-u\bu.
 
        r\bre\bea\bad\bdo\bon\bnl\bly\by [-\b-a\baA\bAf\bf] [-\b-p\bp] [_\bn_\ba_\bm_\be[=_\bw_\bo_\br_\bd] ...]
-              The  given  _\bn_\ba_\bm_\be_\bs are marked readonly; the values of these _\bn_\ba_\bm_\be_\bs
-              may not be changed by subsequent assignment.  If the  -\b-f\b option
-              is  supplied,  the  functions  corresponding to the _\bn_\ba_\bm_\be_\bs are so
-              marked.  The -\b-a\ba option restricts the variables  to  indexed  ar-
-              rays;  the  -\b-A\bA option restricts the variables to associative ar-
+              The given _\bn_\ba_\bm_\be_\bs are marked readonly; the values of  these  _\bn_\ba_\bm_\be_\bs
+              may  not  be changed by subsequent assignment.  If the -\b-f\bf option
+              is supplied, the functions corresponding to  the  _\bn_\ba_\bm_\be_\bs  are  so
+              marked.   The  -\b-a\ba  option restricts the variables to indexed ar-
+              rays; the -\b-A\bA option restricts the variables to  associative  ar-
               rays.  If both options are supplied, -\b-A\bA takes precedence.  If no
-              _\bn_\ba_\bm_\b arguments  are  given,  or if the -\b-p\bp option is supplied, a
+              _\bn_\ba_\bm_\barguments are given, or if the -\b-p\bp  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\bp option causes output to be displayed in a  format
-              that  may be reused as input.  If a variable name is followed by
-              =_\bw_\bo_\br_\bd, the value of the variable is set  to  _\bw_\bo_\br_\bd.   The  return
-              status  is 0 unless an invalid option is encountered, one of the
+              used to restrict the output to a subset of the set  of  readonly
+              names.   The -\b-p\bp option causes output to be displayed in a format
+              that may be reused as input.  If a variable name is followed  by
+              =_\bw_\bo_\br_\bd,  the  value  of  the variable is set to _\bw_\bo_\br_\bd.  The return
+              status is 0 unless an invalid option is encountered, one of  the
               _\bn_\ba_\bm_\be_\bs is not a valid shell variable name, or -\b-f\bf is supplied with
               a _\bn_\ba_\bm_\be that is not a function.
 
        r\bre\bet\btu\bur\brn\bn [_\bn]
-              Causes  a function to stop executing and return the value speci-
-              fied by _\bn to its caller.  If _\bn is omitted, the return status  is
-              that  of the last command executed in the function body.  If r\bre\be-\b-
+              Causes a function to stop executing and return the value  speci-
+              fied  by _\bn to its caller.  If _\bn is omitted, the return status is
+              that of the last command executed in the function body.  If  r\bre\be-\b-
               t\btu\bur\brn\bn 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 r\bre\bet\btu\bur\brn\bn is executed during a D\bDE\bEB\bBU\bUG\bG  trap,  the  last
-              command  used  to  determine the status is the last command exe-
-              cuted by the trap handler before r\bre\bet\btu\bur\brn\bn was invoked.  If  r\bre\bet\btu\bur\brn\bn
-              is  used outside a function, but during execution of a script by
-              the .\b.  (s\bso\bou\bur\brc\bce\be) command, it causes the shell to  stop  executing
-              that  script  and return either _\bn or the exit status of the last
-              command executed within the script as the  exit  status  of  the
+              termine the status is the last command executed before the  trap
+              handler.   If  r\bre\bet\btu\bur\brn\bn  is executed during a D\bDE\bEB\bBU\bUG\bG trap, the last
+              command used to determine the status is the  last  command  exe-
+              cuted  by the trap handler before r\bre\bet\btu\bur\brn\bn was invoked.  If r\bre\bet\btu\bur\brn\bn
+              is used outside a function, but during execution of a script  by
+              the  .\b.   (s\bso\bou\bur\brc\bce\be) command, it causes the shell to stop executing
+              that script and return either _\bn or the exit status of  the  last
+              command  executed  within  the  script as the exit status of the
               script.  If _\bn is supplied, the return value is its least signif-
-              icant 8 bits.  The return status is non-zero if r\bre\bet\btu\bur\brn\bn  is  sup-
-              plied  a non-numeric argument, or is used outside a function and
-              not during execution of a script by .\b. or  s\bso\bou\bur\brc\bce\be.   Any  command
+              icant  8  bits.  The return status is non-zero if r\bre\bet\btu\bur\brn\bn is sup-
+              plied a non-numeric argument, or is used outside a function  and
+              not  during  execution  of a script by .\b. or s\bso\bou\bur\brc\bce\be.  Any command
               associated with the R\bRE\bET\bTU\bUR\bRN\bN trap is executed before execution re-
               sumes after the function or script.
 
-       s\bse\bet\bt [-\b--\b-a\bab\bbe\bef\bfh\bhk\bkm\bmn\bnp\bpt\btu\buv\bvx\bxB\bBC\bCE\bEH\bHP\bPT\bT] [-\b-o\bo _\bo_\bp_\bt_\bi_\bo_\bn_\b-_\bn_\ba_\bm_\be] [_\ba_\br_\bg ...]
-       s\bse\bet\bt [+\b+a\bab\bbe\bef\bfh\bhk\bkm\bmn\bnp\bpt\btu\buv\bvx\bxB\bBC\bCE\bEH\bHP\bPT\bT] [+\b+o\bo _\bo_\bp_\bt_\bi_\bo_\bn_\b-_\bn_\ba_\bm_\be] [_\ba_\br_\bg ...]
-              Without options, the name and value of each shell  variable  are
-              displayed in a format that can be reused as input for setting or
-              resetting the currently-set variables.  Read-only variables can-
-              not  be  reset.  In _\bp_\bo_\bs_\bi_\bx _\bm_\bo_\bd_\be, only shell variables are listed.
-              The output is sorted according to the current locale.  When  op-
-              tions  are  specified,  they set or unset shell attributes.  Any
-              arguments remaining after option processing are treated as  val-
-              ues for the positional parameters and are assigned, in order, to
-              $\b$1\b1, $\b$2\b2, .\b..\b..\b.  $\b$_\bn.  Options,  if  specified,  have  the  following
-              meanings:
+       s\bse\bet\bt [-\b-a\bab\bbe\bef\bfh\bhk\bkm\bmn\bnp\bpt\btu\buv\bvx\bxB\bBC\bCE\bEH\bHP\bPT\bT] [-\b-o\bo _\bo_\bp_\bt_\bi_\bo_\bn_\b-_\bn_\ba_\bm_\be] [-\b--\b-] [-\b-] [_\ba_\br_\bg ...]
+       s\bse\bet\bt [+\b+a\bab\bbe\bef\bfh\bhk\bkm\bmn\bnp\bpt\btu\buv\bvx\bxB\bBC\bCE\bEH\bHP\bPT\bT] [+\b+o\bo _\bo_\bp_\bt_\bi_\bo_\bn_\b-_\bn_\ba_\bm_\be] [-\b--\b-] [-\b-] [_\ba_\br_\bg ...]
+              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 _\bp_\bo_\bs_\bi_\bx _\bm_\bo_\bd_\be, 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 $\b$1\b1,
+              $\b$2\b2,  .\b..\b..\b.   $\b$_\bn.   Options, if specified, have the following mean-
+              ings:
               -\b-a\ba      Each variable or function that is created or modified is
-                      given the export attribute and marked for export to  the
+                      given  the export attribute and marked for export to the
                       environment of subsequent commands.
-              -\b-b\bb      Report  the status of terminated background jobs immedi-
+              -\b-b\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.
-              -\b-e\be      Exit  immediately  if a _\bp_\bi_\bp_\be_\bl_\bi_\bn_\be (which may consist of a
-                      single _\bs_\bi_\bm_\bp_\bl_\be _\bc_\bo_\bm_\bm_\ba_\bn_\bd), a _\bl_\bi_\bs_\bt, or  a  _\bc_\bo_\bm_\bp_\bo_\bu_\bn_\b _\bc_\bo_\bm_\bm_\ba_\bn_\bd
+              -\b-e\be      Exit immediately if a _\bp_\bi_\bp_\be_\bl_\bi_\bn_\be (which may consist  of  a
+                      single  _\bs_\bi_\bm_\bp_\bl_\be  _\bc_\bo_\bm_\bm_\ba_\bn_\bd),  a _\bl_\bi_\bs_\bt, or a _\bc_\bo_\bm_\bp_\bo_\bu_\bn_\bd _\bc_\bo_\bm_\bm_\ba_\bn_\bd
                       (see S\bSH\bHE\bEL\bLL\bL G\bGR\bRA\bAM\bMM\bMA\bAR\bR 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 w\bwh\bhi\bil\ble\be
-                      or u\bun\bnt\bti\bil\bl keyword, part of the test following the  i\bif\b or
-                      e\bel\bli\bif\b reserved  words, part of any command executed in a
-                      &\b&&\bor |\b||\b| list except the command following the final  &\b&&\b&
+                      The  shell  does  not  exit if the command that fails is
+                      part of the command list immediately following  a  w\bwh\bhi\bil\ble\be
+                      or  u\bun\bnt\bti\bil\bl  keyword, part of the test following the i\bif\bf or
+                      e\bel\bli\bif\breserved words, part of any command executed  in  a
+                      &\b&&\b or |\b||\b| list except the command following the final &\b&&\b&
                       or |\b||\b|, any command in a pipeline but the last, or if the
-                      command's return value is being inverted with !\b!.   If  a
-                      compound  command  other  than a subshell returns a non-
-                      zero status because a command failed while -\b-e\be was  being
-                      ignored,  the  shell  does  not exit.  A trap on E\bER\bRR\bR, if
-                      set, is executed before the shell  exits.   This  option
+                      command's  return  value is being inverted with !\b!.  If a
+                      compound command other than a subshell  returns  a  non-
+                      zero  status because a command failed while -\b-e\be was being
+                      ignored, the shell does not exit.  A  trap  on  E\bER\bRR\bR,  if
+                      set,  is  executed  before the shell exits.  This option
                       applies to the shell environment and each subshell envi-
-                      ronment separately (see  C\bCO\bOM\bMM\bMA\bAN\bND\bD  E\bEX\bXE\bEC\bCU\bUT\bTI\bIO\bON\b E\bEN\bNV\bVI\bIR\bRO\bON\bNM\bME\bEN\bNT\bT
+                      ronment  separately  (see  C\bCO\bOM\bMM\bMA\bAN\bND\bD E\bEX\bXE\bEC\bCU\bUT\bTI\bIO\bON\bN E\bEN\bNV\bVI\bIR\bRO\bON\bNM\bME\bEN\bNT\bT
                       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 -\b-e\be is being ignored, none of the commands
-                      executed within the compound command  or  function  body
-                      will  be  affected  by the -\b-e\be setting, even if -\b-e\be is set
-                      and a command returns a failure status.  If  a  compound
-                      command  or  shell function sets -\b-e\be while executing in a
-                      context where -\b-e\be is ignored, that setting will not  have
-                      any  effect  until  the  compound command or the command
+                      If  a  compound  command or shell function executes in a
+                      context where -\b-e\be is being ignored, none of the  commands
+                      executed  within  the  compound command or function body
+                      will be affected by the -\b-e\be setting, even if  -\b-e\be  is  set
+                      and  a  command returns a failure status.  If a compound
+                      command or shell function sets -\b-e\be while executing  in  a
+                      context  where -\b-e\be is ignored, that setting will not have
+                      any effect until the compound  command  or  the  command
                       containing the function call completes.
               -\b-f\bf      Disable pathname expansion.
-              -\b-h\bh      Remember the location of commands as they are looked  up
+              -\b-h\bh      Remember  the location of commands as they are looked up
                       for execution.  This is enabled by default.
-              -\b-k\bk      All  arguments  in the form of assignment statements are
-                      placed in the environment for a command, not just  those
+              -\b-k\bk      All arguments in the form of assignment  statements  are
+                      placed  in the environment for a command, not just those
                       that precede the command name.
-              -\b-m\bm      Monitor  mode.   Job control is enabled.  This option is
-                      on by default for interactive  shells  on  systems  that
-                      support  it  (see J\bJO\bOB\bB C\bCO\bON\bNT\bTR\bRO\bOL\bL above).  All processes run
+              -\b-m\bm      Monitor mode.  Job control is enabled.  This  option  is
+                      on  by  default  for  interactive shells on systems that
+                      support it (see J\bJO\bOB\bB C\bCO\bON\bNT\bTR\bRO\bOL\bL 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.
               -\b-n\bn      Read commands but do not execute them.  This may be used
-                      to  check a shell script for syntax errors.  This is ig-
+                      to check a shell script for syntax errors.  This is  ig-
                       nored by interactive shells.
               -\b-o\bo _\bo_\bp_\bt_\bi_\bo_\bn_\b-_\bn_\ba_\bm_\be
                       The _\bo_\bp_\bt_\bi_\bo_\bn_\b-_\bn_\ba_\bm_\be can be one of the following:
@@ -5428,10 +5643,10 @@ S\bSH\bHE\bEL\bLL\bL B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
                               Same as -\b-a\ba.
                       b\bbr\bra\bac\bce\bee\bex\bxp\bpa\ban\bnd\bd
                               Same as -\b-B\bB.
-                      e\bem\bma\bac\bcs\bs   Use an emacs-style command line  editing  inter-
+                      e\bem\bma\bac\bcs\bs   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  -\b--\b-n\bno\boe\bed\bdi\bit\bti\bin\bng\bg  option.  This also affects the
+                              the -\b--\b-n\bno\boe\bed\bdi\bit\bti\bin\bng\bg option.  This also  affects  the
                               editing interface used for r\bre\bea\bad\bd -\b-e\be.
                       e\ber\brr\bre\bex\bxi\bit\bt Same as -\b-e\be.
                       e\ber\brr\brt\btr\bra\bac\bce\be
@@ -5445,8 +5660,8 @@ S\bSH\bHE\bEL\bLL\bL B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
                               H\bHI\bIS\bST\bTO\bOR\bRY\bY.  This option is on by default in inter-
                               active shells.
                       i\big\bgn\bno\bor\bre\bee\beo\bof\bf
-                              The effect is as  if  the  shell  command  ``IG-
-                              NOREEOF=10''  had been executed (see S\bSh\bhe\bel\bll\bl V\bVa\bar\bri\bi-\b-
+                              The  effect  is  as  if  the shell command ``IG-
+                              NOREEOF=10'' had been executed (see S\bSh\bhe\bel\bll\b V\bVa\bar\bri\bi-\b-
                               a\bab\bbl\ble\bes\bs above).
                       k\bke\bey\byw\bwo\bor\brd\bd Same as -\b-k\bk.
                       m\bmo\bon\bni\bit\bto\bor\br Same as -\b-m\bm.
@@ -5461,172 +5676,175 @@ S\bSH\bHE\bEL\bLL\bL B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
                       p\bph\bhy\bys\bsi\bic\bca\bal\bl
                               Same as -\b-P\bP.
                       p\bpi\bip\bpe\bef\bfa\bai\bil\bl
-                              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
+                              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\bpo\bos\bsi\bix\bx   Change the behavior of b\bba\bas\bsh\bh  where  the  default
-                              operation  differs  from  the  POSIX standard to
-                              match the standard (_\bp_\bo_\bs_\bi_\bx _\bm_\bo_\bd_\be).  See  S\bSE\bEE\b A\bAL\bLS\bSO\bO
+                      p\bpo\bos\bsi\bix\bx   Change  the  behavior  of b\bba\bas\bsh\bh where the default
+                              operation differs from  the  POSIX  standard  to
+                              match  the  standard (_\bp_\bo_\bs_\bi_\bx _\bm_\bo_\bd_\be).  See S\bSE\bEE\bE A\bAL\bLS\bSO\bO
                               below for a reference to a document that details
                               how posix mode affects bash's behavior.
                       p\bpr\bri\biv\bvi\bil\ble\beg\bge\bed\bd
                               Same as -\b-p\bp.
                       v\bve\ber\brb\bbo\bos\bse\be Same as -\b-v\bv.
-                      v\bvi\bi      Use a vi-style command line  editing  interface.
+                      v\bvi\bi      Use  a  vi-style command line editing interface.
                               This also affects the editing interface used for
                               r\bre\bea\bad\bd -\b-e\be.
                       x\bxt\btr\bra\bac\bce\be  Same as -\b-x\bx.
                       If -\b-o\bo is supplied with no _\bo_\bp_\bt_\bi_\bo_\bn_\b-_\bn_\ba_\bm_\be, the values of the
-                      current  options are printed.  If +\b+o\bo is supplied with no
-                      _\bo_\bp_\bt_\bi_\bo_\bn_\b-_\bn_\ba_\bm_\be, a series of s\bse\bet\bt commands  to  recreate  the
-                      current  option  settings  is  displayed on the standard
+                      current options are printed.  If +\b+o\bo is supplied with  no
+                      _\bo_\bp_\bt_\bi_\bo_\bn_\b-_\bn_\ba_\bm_\be,  a  series  of s\bse\bet\bt commands to recreate the
+                      current option settings is  displayed  on  the  standard
                       output.
-              -\b-p\bp      Turn on _\bp_\br_\bi_\bv_\bi_\bl_\be_\bg_\be_\bd mode.  In this  mode,  the  $\b$E\bEN\bNV\b and
-                      $\b$B\bBA\bAS\bSH\bH_\b_E\bEN\bNV\b files  are not processed, shell functions are
-                      not inherited from the environment, and  the  S\bSH\bHE\bEL\bLL\bLO\bOP\bPT\bTS\bS,
-                      B\bBA\bAS\bSH\bHO\bOP\bPT\bTS\bS,  C\bCD\bDP\bPA\bAT\bTH\bH, and G\bGL\bLO\bOB\bBI\bIG\bGN\bNO\bOR\bRE\bE 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 -\b-p\bp option is not  sup-
+              -\b-p\bp      Turn  on  _\bp_\br_\bi_\bv_\bi_\bl_\be_\bg_\be_\bd  mode.   In this mode, the $\b$E\bEN\bNV\bV and
+                      $\b$B\bBA\bAS\bSH\bH_\b_E\bEN\bNV\bfiles are not processed, shell  functions  are
+                      not  inherited  from the environment, and the S\bSH\bHE\bEL\bLL\bLO\bOP\bPT\bTS\bS,
+                      B\bBA\bAS\bSH\bHO\bOP\bPT\bTS\bS, C\bCD\bDP\bPA\bAT\bTH\bH, and G\bGL\bLO\bOB\bBI\bIG\bGN\bNO\bOR\bRE\bE 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 -\b-p\bp option is not sup-
                       plied, these actions are taken and the effective user id
-                      is set to the real user id.  If the -\b-p\bp  option  is  sup-
-                      plied  at  startup,  the effective user id is not reset.
-                      Turning this option off causes the  effective  user  and
+                      is  set  to  the real user id.  If the -\b-p\bp 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.
+              -\b-r\br      Enable restricted shell mode.  This option cannot be un-
+                      set once it has been set.
               -\b-t\bt      Exit after reading and executing one command.
               -\b-u\bu      Treat unset variables and parameters other than the spe-
-                      cial parameters "@" and "*" as an error when  performing
-                      parameter  expansion.   If  expansion is attempted on an
-                      unset variable or parameter, the shell prints  an  error
-                      message,  and, if not interactive, exits with a non-zero
+                      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.
               -\b-v\bv      Print shell input lines as they are read.
-              -\b-x\bx      After expanding each _\bs_\bi_\bm_\bp_\bl_\be _\bc_\bo_\bm_\bm_\ba_\bn_\bd, f\bfo\bor\br  command,  c\bca\bas\bse\be
+              -\b-x\bx      After  expanding  each _\bs_\bi_\bm_\bp_\bl_\be _\bc_\bo_\bm_\bm_\ba_\bn_\bd, f\bfo\bor\br command, c\bca\bas\bse\be
                       command, s\bse\bel\ble\bec\bct\bt command, or arithmetic f\bfo\bor\br command, dis-
-                      play the expanded value of P\bPS\bS4\b4, followed by the  command
+                      play  the expanded value of P\bPS\bS4\b4, followed by the command
                       and its expanded arguments or associated word list.
-              -\b-B\bB      The  shell performs brace expansion (see B\bBr\bra\bac\bce\be E\bEx\bxp\bpa\ban\bns\bsi\bio\bon\bn
+              -\b-B\bB      The shell performs brace expansion (see B\bBr\bra\bac\bce\b E\bEx\bxp\bpa\ban\bns\bsi\bio\bon\bn
                       above).  This is on by default.
-              -\b-C\bC      If set, b\bba\bas\bsh\bh does not overwrite an  existing  file  with
-                      the  >\b>,  >\b>&\b&,  and <\b<>\b> redirection operators.  This may be
+              -\b-C\bC      If  set,  b\bba\bas\bsh\bh  does not overwrite an existing file with
+                      the >\b>, >\b>&\b&, and <\b<>\b> redirection operators.   This  may  be
                       overridden when creating output files by using the redi-
                       rection operator >\b>|\b| instead of >\b>.
               -\b-E\bE      If set, any trap on E\bER\bRR\bR is inherited by shell functions,
-                      command substitutions, and commands executed in  a  sub-
-                      shell  environment.  The E\bER\bRR\bR trap is normally not inher-
+                      command  substitutions,  and commands executed in a sub-
+                      shell environment.  The E\bER\bRR\bR trap is normally not  inher-
                       ited in such cases.
               -\b-H\bH      Enable !\b!  style history substitution.  This option is on
                       by default when the shell is interactive.
-              -\b-P\bP      If  set,  the shell does not resolve symbolic links when
-                      executing commands such as c\bcd\bd that  change  the  current
+              -\b-P\bP      If set, the shell does not resolve symbolic  links  when
+                      executing  commands  such  as c\bcd\bd that change the current
                       working  directory.   It  uses  the  physical  directory
                       structure instead.  By default, b\bba\bas\bsh\bh follows the logical
-                      chain  of  directories  when  performing  commands which
+                      chain of  directories  when  performing  commands  which
                       change the current directory.
-              -\b-T\bT      If set, any traps on D\bDE\bEB\bBU\bUG\bG and R\bRE\bET\bTU\bUR\bRN\bN are  inherited  by
+              -\b-T\bT      If  set,  any traps on D\bDE\bEB\bBU\bUG\bG and R\bRE\bET\bTU\bUR\bRN\bN are inherited by
                       shell functions, command substitutions, and commands ex-
-                      ecuted in a subshell environment.  The D\bDE\bEB\bBU\bUG\bG and  R\bRE\bET\bTU\bUR\bRN\bN
+                      ecuted  in a subshell environment.  The D\bDE\bEB\bBU\bUG\bG and R\bRE\bET\bTU\bUR\bRN\bN
                       traps are normally not inherited in such cases.
-              -\b--\b-      If  no arguments follow this option, then the positional
+              -\b--\b-      If no arguments follow this option, then the  positional
                       parameters are unset.  Otherwise, the positional parame-
-                      ters  are  set  to  the _\ba_\br_\bgs, even if some of them begin
+                      ters are set to the _\ba_\br_\bgs, even if  some  of  them  begin
                       with a -\b-.
-              -\b-       Signal the end of options, cause all remaining  _\ba_\br_\bgs  to
+              -\b-       Signal  the  end of options, cause all remaining _\ba_\br_\bgs to
                       be assigned to the positional parameters.  The -\b-x\bx and -\b-v\bv
                       options are turned off.  If there are no _\ba_\br_\bgs, 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-
+              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 $\b$-\b-.  The  re-
-              turn  status  is always true unless an invalid option is encoun-
+              shell.   The current set of options may be found in $\b$-\b-.  The re-
+              turn status is always true unless an invalid option  is  encoun-
               tered.
 
        s\bsh\bhi\bif\bft\bt [_\bn]
-              The positional parameters from _\bn+1 ... are renamed  to  $\b$1\b .\b..\b..\b..\b.
-              Parameters  represented by the numbers $\b$#\b# down to $\b$#\b#-_\bn+1 are un-
-              set.  _\bn must be a non-negative number less than or equal to  $\b$#\b#.
-              If  _\bn is 0, no parameters are changed.  If _\bn is not given, it is
+              The  positional  parameters  from _\bn+1 ... are renamed to $\b$1\b1 .\b..\b..\b..\b.
+              Parameters represented by the numbers $\b$#\b# down to $\b$#\b#-_\bn+1 are  un-
+              set.   _\bn must be a non-negative number less than or equal to $\b$#\b#.
+              If _\bn is 0, no parameters are changed.  If _\bn is not given, it  is
               assumed to be 1.  If _\bn is greater than $\b$#\b#, the positional param-
-              eters  are  not changed.  The return status is greater than zero
+              eters are not changed.  The return status is greater  than  zero
               if _\bn is greater than $\b$#\b# or less than zero; otherwise 0.
 
        s\bsh\bho\bop\bpt\bt [-\b-p\bpq\bqs\bsu\bu] [-\b-o\bo] [_\bo_\bp_\bt_\bn_\ba_\bm_\be ...]
-              Toggle the values of settings controlling optional shell  behav-
-              ior.   The settings can be either those listed below, or, if the
+              Toggle  the values of settings controlling optional shell behav-
+              ior.  The settings can be either those listed below, or, if  the
               -\b-o\bo option is used, those available with the -\b-o\bo option to the s\bse\bet\bt
               builtin command.  With no options, or with the -\b-p\bp option, a list
-              of all settable options is  displayed,  with  an  indication  of
+              of  all  settable  options  is  displayed, with an indication of
               whether or not each is set; if _\bo_\bp_\bt_\bn_\ba_\bm_\be_\bs are supplied, the output
-              is restricted to those options.  The -\b-p\bp option causes output  to
-              be  displayed  in a form that may be reused as input.  Other op-
+              is  restricted to those options.  The -\b-p\bp option causes output to
+              be displayed in a form that may be reused as input.   Other  op-
               tions have the following meanings:
               -\b-s\bs     Enable (set) each _\bo_\bp_\bt_\bn_\ba_\bm_\be.
               -\b-u\bu     Disable (unset) each _\bo_\bp_\bt_\bn_\ba_\bm_\be.
-              -\b-q\bq     Suppresses normal output (quiet mode); the return  status
+              -\b-q\bq     Suppresses  normal output (quiet mode); the return status
                      indicates whether the _\bo_\bp_\bt_\bn_\ba_\bm_\be is set or unset.  If multi-
-                     ple _\bo_\bp_\bt_\bn_\ba_\bm_\be arguments are given with -\b-q\bq, the return  sta-
-                     tus  is zero if all _\bo_\bp_\bt_\bn_\ba_\bm_\be_\bs are enabled; non-zero other-
+                     ple  _\bo_\bp_\bt_\bn_\ba_\bm_\be arguments are given with -\b-q\bq, the return sta-
+                     tus is zero if all _\bo_\bp_\bt_\bn_\ba_\bm_\be_\bs are enabled; non-zero  other-
                      wise.
-              -\b-o\bo     Restricts the values of _\bo_\bp_\bt_\bn_\ba_\bm_\be to be those  defined  for
+              -\b-o\bo     Restricts  the  values of _\bo_\bp_\bt_\bn_\ba_\bm_\be to be those defined for
                      the -\b-o\bo option to the s\bse\bet\bt builtin.
 
-              If  either  -\b-s\bs  or  -\b-u\bu  is used with no _\bo_\bp_\bt_\bn_\ba_\bm_\be arguments, s\bsh\bho\bop\bpt\bt
-              shows only those options which are set or  unset,  respectively.
-              Unless  otherwise  noted, the s\bsh\bho\bop\bpt\bt options are disabled (unset)
+              If either -\b-s\bs or -\b-u\bu is used  with  no  _\bo_\bp_\bt_\bn_\ba_\bm_\be  arguments,  s\bsh\bho\bop\bpt\bt
+              shows  only  those options which are set or unset, respectively.
+              Unless otherwise noted, the s\bsh\bho\bop\bpt\bt options are  disabled  (unset)
               by default.
 
-              The return status when listing options is zero if  all  _\bo_\bp_\bt_\bn_\ba_\bm_\be_\bs
-              are  enabled, non-zero otherwise.  When setting or unsetting op-
-              tions, the return status is zero unless  an  _\bo_\bp_\bt_\bn_\ba_\bm_\be  is  not  a
+              The  return  status when listing options is zero if all _\bo_\bp_\bt_\bn_\ba_\bm_\be_\bs
+              are enabled, non-zero otherwise.  When setting or unsetting  op-
+              tions,  the  return  status  is  zero unless an _\bo_\bp_\bt_\bn_\ba_\bm_\be is not a
               valid shell option.
 
               The list of s\bsh\bho\bop\bpt\bt options is:
 
               a\bas\bss\bso\boc\bc_\b_e\bex\bxp\bpa\ban\bnd\bd_\b_o\bon\bnc\bce\be
-                      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
+                      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.
-              a\bau\but\bto\boc\bcd\bd  If  set,  a command name that is the name of a directory
-                      is executed as if it were the argument to  the  c\bcd\b com-
+              a\bau\but\bto\boc\bcd\bd  If set, a command name that is the name of  a  directory
+                      is  executed  as  if it were the argument to the c\bcd\bd com-
                       mand.  This option is only used by interactive shells.
               c\bcd\bda\bab\bbl\ble\be_\b_v\bva\bar\brs\bs
-                      If  set,  an  argument to the c\bcd\bd builtin command that is
-                      not a directory is assumed to be the name of a  variable
+                      If set, an argument to the c\bcd\bd builtin  command  that  is
+                      not  a directory is assumed to be the name of a variable
                       whose value is the directory to change to.
               c\bcd\bds\bsp\bpe\bel\bll\bl If set, minor errors in the spelling of a directory com-
-                      ponent in a c\bcd\bd command will be  corrected.   The  errors
+                      ponent  in  a  c\bcd\bd 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
+                      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.
               c\bch\bhe\bec\bck\bkh\bha\bas\bsh\bh
                       If set, b\bba\bas\bsh\bh 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-
+                      ble  exists  before  trying  to execute it.  If a hashed
+                      command no longer exists, a normal path search  is  per-
                       formed.
               c\bch\bhe\bec\bck\bkj\bjo\bob\bbs\bs
                       If set, b\bba\bas\bsh\bh lists the status of any stopped and running
-                      jobs  before  exiting an interactive shell.  If any jobs
+                      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
+                      second exit is attempted without an intervening  command
                       (see J\bJO\bOB\bB C\bCO\bON\bNT\bTR\bRO\bOL\bL above).  The shell always postpones ex-
                       iting if any jobs are stopped.
               c\bch\bhe\bec\bck\bkw\bwi\bin\bns\bsi\biz\bze\be
-                      If  set, b\bba\bas\bsh\bh checks the window size after each external
-                      (non-builtin) command and,  if  necessary,  updates  the
-                      values  of L\bLI\bIN\bNE\bES\bS and C\bCO\bOL\bLU\bUM\bMN\bNS\bS.  This option is enabled by
+                      If set, b\bba\bas\bsh\bh checks the window size after each  external
+                      (non-builtin)  command  and,  if  necessary, updates the
+                      values of L\bLI\bIN\bNE\bES\bS and C\bCO\bOL\bLU\bUM\bMN\bNS\bS.  This option is enabled  by
                       default.
-              c\bcm\bmd\bdh\bhi\bis\bst\bt If set, b\bba\bas\bsh\bh 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
+              c\bcm\bmd\bdh\bhi\bis\bst\bt If  set,  b\bba\bas\bsh\bh 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 H\bHI\bIS\bST\bTO\bOR\bRY\bY.
               c\bco\bom\bmp\bpa\bat\bt3\b31\b1
               c\bco\bom\bmp\bpa\bat\bt3\b32\b2
@@ -5635,117 +5853,123 @@ S\bSH\bHE\bEL\bLL\bL B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
               c\bco\bom\bmp\bpa\bat\bt4\b42\b2
               c\bco\bom\bmp\bpa\bat\bt4\b43\b3
               c\bco\bom\bmp\bpa\bat\bt4\b44\b4
-                      These control aspects of the shell's compatibility  mode
+              c\bco\bom\bmp\bpa\bat\bt5\b50\b0
+                      These  control aspects of the shell's compatibility mode
                       (see S\bSH\bHE\bEL\bLL\bL C\bCO\bOM\bMP\bPA\bAT\bTI\bIB\bBI\bIL\bLI\bIT\bTY\bY M\bMO\bOD\bDE\bE below).
 
               c\bco\bom\bmp\bpl\ble\bet\bte\be_\b_f\bfu\bul\bll\blq\bqu\buo\bot\bte\be
-                      If  set,  b\bba\bas\bsh\bh  quotes all shell metacharacters in file-
-                      names and directory names  when  performing  completion.
+                      If set, b\bba\bas\bsh\bh quotes all shell  metacharacters  in  file-
+                      names  and  directory  names when performing completion.
                       If not set, b\bba\bas\bsh\bh 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
+                      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.
 
               d\bdi\bir\bre\bex\bxp\bpa\ban\bnd\bd
-                      If  set,  b\bba\bas\bsh\bh 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, b\bba\bas\bsh\bh attempts  to  preserve  what  the
+                      If set, b\bba\bas\bsh\bh 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,  b\bba\bas\bsh\bh attempts to preserve what the
                       user typed.
 
               d\bdi\bir\brs\bsp\bpe\bel\bll\bl
-                      If  set,  b\bba\bas\bsh\bh attempts spelling correction on directory
-                      names during word completion if the directory name  ini-
+                      If set, b\bba\bas\bsh\bh attempts spelling correction  on  directory
+                      names  during word completion if the directory name ini-
                       tially supplied does not exist.
 
-              d\bdo\bot\btg\bgl\blo\bob\bb If  set, b\bba\bas\bsh\bh includes filenames beginning with a `.' in
-                      the results of pathname expansion.  The filenames  `\b``\b`.\b.'\b''\b'
-                      and  `\b``\b`.\b..\b.'\b''\b'   must always be matched explicitly, even if
+              d\bdo\bot\btg\bgl\blo\bob\bb If set, b\bba\bas\bsh\bh includes filenames beginning with a `.'  in
+                      the  results of pathname expansion.  The filenames `\b``\b`.\b.'\b''\b'
+                      and `\b``\b`.\b..\b.'\b''\b'  must always be matched explicitly,  even  if
                       d\bdo\bot\btg\bgl\blo\bob\bb is set.
 
               e\bex\bxe\bec\bcf\bfa\bai\bil\bl
                       If set, a non-interactive shell will not exit if it can-
-                      not  execute  the  file  specified as an argument to the
-                      e\bex\bxe\bec\bbuiltin command.  An  interactive  shell  does  not
+                      not execute the file specified as  an  argument  to  the
+                      e\bex\bxe\bec\b builtin  command.   An  interactive shell does not
                       exit if e\bex\bxe\bec\bc fails.
 
               e\bex\bxp\bpa\ban\bnd\bd_\b_a\bal\bli\bia\bas\bse\bes\bs
-                      If  set,  aliases  are expanded as described above under
+                      If set, aliases are expanded as  described  above  under
                       A\bAL\bLI\bIA\bAS\bSE\bES\bS.  This option is enabled by default for interac-
                       tive shells.
 
               e\bex\bxt\btd\bde\beb\bbu\bug\bg
-                      If  set at shell invocation, or in a shell startup file,
+                      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--\b-d\bde\beb\bbu\bug\bgg\bge\ber\br option.  If set af-
-                      ter invocation, behavior intended for use  by  debuggers
+                      starts, identical to the -\b--\b-d\bde\beb\bbu\bug\bgg\bge\ber\br option.  If set  af-
+                      ter  invocation,  behavior intended for use by debuggers
                       is enabled:
 
                       1\b1.\b.     The -\b-F\bF option to the d\bde\bec\bcl\bla\bar\bre\be builtin displays the
                              source file name and line number corresponding to
                              each function name supplied as an argument.
 
-                      2\b2.\b.     If  the  command  run by the D\bDE\bEB\bBU\bUG\bG trap returns a
-                             non-zero value, the next command is  skipped  and
+                      2\b2.\b.     If the command run by the D\bDE\bEB\bBU\bUG\bG  trap  returns  a
+                             non-zero  value,  the next command is skipped and
                              not executed.
 
-                      3\b3.\b.     If  the  command  run by the D\bDE\bEB\bBU\bUG\bG 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 .\b. or  s\bso\bou\bur\brc\bce\be  builtins),  the  shell
+                      3\b3.\b.     If the command run by the D\bDE\bEB\bBU\bUG\bG  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  .\b.  or s\bso\bou\bur\brc\bce\be builtins), the shell
                              simulates a call to r\bre\bet\btu\bur\brn\bn.
 
-                      4\b4.\b.     B\bBA\bAS\bSH\bH_\b_A\bAR\bRG\bGC\b and B\bBA\bAS\bSH\bH_\b_A\bAR\bRG\bGV\bV are updated as described
-                             in their descriptions above.
+                      4\b4.\b.     B\bBA\bAS\bSH\bH_\b_A\bAR\bRG\bGC\band B\bBA\bAS\bSH\bH_\b_A\bAR\bRG\bGV\bV are updated as  described
+                             in their descriptions above).
 
-                      5\b5.\b.     Function tracing is  enabled:  command  substitu-
+                      5\b5.\b.     Function  tracing  is  enabled: command substitu-
                              tion, shell functions, and subshells invoked with
                              (\b( _\bc_\bo_\bm_\bm_\ba_\bn_\bd )\b) inherit the D\bDE\bEB\bBU\bUG\bG and R\bRE\bET\bTU\bUR\bRN\bN traps.
 
-                      6\b6.\b.     Error tracing is enabled:  command  substitution,
-                             shell  functions,  and  subshells  invoked with (\b(
+                      6\b6.\b.     Error  tracing  is enabled: command substitution,
+                             shell functions, and  subshells  invoked  with  (\b(
                              _\bc_\bo_\bm_\bm_\ba_\bn_\bd )\b) inherit the E\bER\bRR\bR trap.
 
               e\bex\bxt\btg\bgl\blo\bob\bb If set, the extended pattern matching features described
                       above under P\bPa\bat\bth\bhn\bna\bam\bme\be E\bEx\bxp\bpa\ban\bns\bsi\bio\bon\bn are enabled.
 
               e\bex\bxt\btq\bqu\buo\bot\bte\be
-                      If  set,  $\b$'_\bs_\bt_\br_\bi_\bn_\bg'  and  $\b$"_\bs_\bt_\br_\bi_\bn_\bg" quoting is performed
-                      within  $\b${\b{_\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br}\b}  expansions  enclosed   in   double
+                      If set, $\b$'_\bs_\bt_\br_\bi_\bn_\bg' and  $\b$"_\bs_\bt_\br_\bi_\bn_\bg"  quoting  is  performed
+                      within   $\b${\b{_\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br}\b}   expansions  enclosed  in  double
                       quotes.  This option is enabled by default.
 
               f\bfa\bai\bil\blg\bgl\blo\bob\bb
-                      If  set,  patterns  which fail to match filenames during
+                      If set, patterns which fail to  match  filenames  during
                       pathname expansion result in an expansion error.
 
               f\bfo\bor\brc\bce\be_\b_f\bfi\big\bgn\bno\bor\bre\be
-                      If set, the suffixes  specified  by  the  F\bFI\bIG\bGN\bNO\bOR\bRE\b shell
-                      variable  cause words to be ignored when performing word
+                      If  set,  the  suffixes  specified  by the F\bFI\bIG\bGN\bNO\bOR\bRE\bE shell
+                      variable cause words to be ignored when performing  word
                       completion even if the ignored words are the only possi-
-                      ble  completions.   See  S\bSH\bHE\bEL\bLL\bL V\bVA\bAR\bRI\bIA\bAB\bBL\bLE\bES\bS above for a de-
-                      scription of F\bFI\bIG\bGN\bNO\bOR\bRE\bE.  This option  is  enabled  by  de-
+                      ble completions.  See S\bSH\bHE\bEL\bLL\bL V\bVA\bAR\bRI\bIA\bAB\bBL\bLE\bES\bS above  for  a  de-
+                      scription  of  F\bFI\bIG\bGN\bNO\bOR\bRE\bE.   This  option is enabled by de-
                       fault.
 
               g\bgl\blo\bob\bba\bas\bsc\bci\bii\bir\bra\ban\bng\bge\bes\bs
-                      If  set,  range  expressions  used  in  pattern matching
-                      bracket expressions (see P\bPa\bat\btt\bte\ber\brn\bn M\bMa\bat\btc\bch\bhi\bin\bng\bg 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 b\bb will not collate
-                      between A\bA and B\bB, and  upper-case  and  lower-case  ASCII
+                      If set,  range  expressions  used  in  pattern  matching
+                      bracket  expressions (see P\bPa\bat\btt\bte\ber\brn\bn M\bMa\bat\btc\bch\bhi\bin\bng\bg 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 b\bb will not  collate
+                      between  A\bA  and  B\bB,  and upper-case and lower-case ASCII
                       characters will collate together.
 
+              g\bgl\blo\bob\bbs\bsk\bki\bip\bpd\bdo\bot\bts\bs
+                      If set, pathname expansion will never  match  the  file-
+                      names `\b``\b`.\b.'\b''\b'  and `\b``\b`.\b..\b.'\b''\b', even if the pattern begins with
+                      a `\b``\b`.\b.'\b''\b'.  This option is enabled by default.
+
               g\bgl\blo\bob\bbs\bst\bta\bar\br
                       If set, the pattern *\b**\b* 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 /\b/,
+                      text  will  match all files and zero or more directories
+                      and subdirectories.  If the pattern is followed by a  /\b/,
                       only directories and subdirectories match.
 
               g\bgn\bnu\bu_\b_e\ber\brr\brf\bfm\bmt\bt
@@ -5753,25 +5977,25 @@ S\bSH\bHE\bEL\bLL\bL B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
                       GNU error message format.
 
               h\bhi\bis\bst\bta\bap\bpp\bpe\ben\bnd\bd
-                      If  set,  the history list is appended to the file named
+                      If set, the history list is appended to the  file  named
                       by the value of the H\bHI\bIS\bST\bTF\bFI\bIL\bLE\bE variable when the shell ex-
                       its, rather than overwriting the file.
 
               h\bhi\bis\bst\btr\bre\bee\bed\bdi\bit\bt
-                      If  set, and r\bre\bea\bad\bdl\bli\bin\bne\be is being used, a user is given the
+                      If set, and r\bre\bea\bad\bdl\bli\bin\bne\be is being used, a user is given  the
                       opportunity to re-edit a failed history substitution.
 
               h\bhi\bis\bst\btv\bve\ber\bri\bif\bfy\by
-                      If set, and r\bre\bea\bad\bdl\bli\bin\bne\be is being used, the results of  his-
-                      tory  substitution  are  not  immediately  passed to the
-                      shell parser.  Instead, the  resulting  line  is  loaded
+                      If  set, and r\bre\bea\bad\bdl\bli\bin\bne\be 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 r\bre\bea\bad\bdl\bli\bin\bne\be editing buffer, allowing further modi-
                       fication.
 
               h\bho\bos\bst\btc\bco\bom\bmp\bpl\ble\bet\bte\be
                       If set, and r\bre\bea\bad\bdl\bli\bin\bne\be is being used, b\bba\bas\bsh\bh will attempt to
-                      perform  hostname  completion when a word containing a @\b@
-                      is  being  completed  (see  C\bCo\bom\bmp\bpl\ble\bet\bti\bin\bng\bg  under   R\bRE\bEA\bAD\bDL\bLI\bIN\bNE\bE
+                      perform hostname completion when a word containing  a  @\b@
+                      is   being  completed  (see  C\bCo\bom\bmp\bpl\ble\bet\bti\bin\bng\bg  under  R\bRE\bEA\bAD\bDL\bLI\bIN\bNE\bE
                       above).  This is enabled by default.
 
               h\bhu\bup\bpo\bon\bne\bex\bxi\bit\bt
@@ -5779,23 +6003,23 @@ S\bSH\bHE\bEL\bLL\bL B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
                       active login shell exits.
 
               i\bin\bnh\bhe\ber\bri\bit\bt_\b_e\ber\brr\bre\bex\bxi\bit\bt
-                      If set, command substitution inherits the value  of  the
-                      e\ber\brr\bre\bex\bxi\bit\b option, instead of unsetting it in the subshell
-                      environment.  This option is enabled when _\bp_\bo_\bs_\bi_\bx _\bm_\bo_\bd_\b is
+                      If  set,  command substitution inherits the value of the
+                      e\ber\brr\bre\bex\bxi\bit\boption, instead of unsetting it in the  subshell
+                      environment.   This option is enabled when _\bp_\bo_\bs_\bi_\bx _\bm_\bo_\bd_\be is
                       enabled.
 
               i\bin\bnt\bte\ber\bra\bac\bct\bti\biv\bve\be_\b_c\bco\bom\bmm\bme\ben\bnt\bts\bs
                       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 C\bCO\bOM\bMM\bME\bEN\bNT\bTS\bS above).  This op-
+                      and  all remaining characters on that line to be ignored
+                      in an interactive shell (see C\bCO\bOM\bMM\bME\bEN\bNT\bTS\bS above).  This  op-
                       tion is enabled by default.
 
               l\bla\bas\bst\btp\bpi\bip\bpe\be
-                      If set, and job control is not active,  the  shell  runs
+                      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.
 
-              l\bli\bit\bth\bhi\bis\bst\bt If set, and the c\bcm\bmd\bdh\bhi\bis\bst\bt option  is  enabled,  multi-line
+              l\bli\bit\bth\bhi\bis\bst\bt If  set,  and  the c\bcm\bmd\bdh\bhi\bis\bst\bt option is enabled, multi-line
                       commands are saved to the history with embedded newlines
                       rather than using semicolon separators where possible.
 
@@ -5806,45 +6030,56 @@ S\bSH\bHE\bEL\bLL\bL B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
                       tribute is not inherited.
 
               l\blo\boc\bca\bal\blv\bva\bar\br_\b_u\bun\bns\bse\bet\bt
-                      If  set,  calling  u\bun\bns\bse\bet\bt  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
+                      If set, calling u\bun\bns\bse\bet\bt 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.
 
               l\blo\bog\bgi\bin\bn_\b_s\bsh\bhe\bel\bll\bl
-                      The  shell  sets this option if it is started as a login
-                      shell (see I\bIN\bNV\bVO\bOC\bCA\bAT\bTI\bIO\bON\bN above).   The  value  may  not  be
+                      The shell sets this option if it is started as  a  login
+                      shell  (see  I\bIN\bNV\bVO\bOC\bCA\bAT\bTI\bIO\bON\bN  above).   The  value may not be
                       changed.
 
               m\bma\bai\bil\blw\bwa\bar\brn\bn
-                      If  set,  and  a file that b\bba\bas\bsh\bh is checking for mail has
-                      been accessed since the last time it  was  checked,  the
-                      message  ``The  mail in _\bm_\ba_\bi_\bl_\bf_\bi_\bl_\be has been read'' is dis-
+                      If set, and a file that b\bba\bas\bsh\bh is checking  for  mail  has
+                      been  accessed  since  the last time it was checked, the
+                      message ``The mail in _\bm_\ba_\bi_\bl_\bf_\bi_\bl_\be has been read''  is  dis-
                       played.
 
               n\bno\bo_\b_e\bem\bmp\bpt\bty\by_\b_c\bcm\bmd\bd_\b_c\bco\bom\bmp\bpl\ble\bet\bti\bio\bon\bn
-                      If set, and r\bre\bea\bad\bdl\bli\bin\bne\be is being used, b\bba\bas\bsh\bh  will  not  at-
-                      tempt  to  search the P\bPA\bAT\bTH\bH for possible completions when
+                      If  set,  and  r\bre\bea\bad\bdl\bli\bin\bne\be is being used, b\bba\bas\bsh\bh will not at-
+                      tempt to search the P\bPA\bAT\bTH\bH for possible  completions  when
                       completion is attempted on an empty line.
 
               n\bno\boc\bca\bas\bse\beg\bgl\blo\bob\bb
-                      If set, b\bba\bas\bsh\bh matches  filenames  in  a  case-insensitive
+                      If  set,  b\bba\bas\bsh\bh  matches  filenames in a case-insensitive
                       fashion when performing pathname expansion (see P\bPa\bat\bth\bhn\bna\bam\bme\be
                       E\bEx\bxp\bpa\ban\bns\bsi\bio\bon\bn above).
 
               n\bno\boc\bca\bas\bse\bem\bma\bat\btc\bch\bh
-                      If set, b\bba\bas\bsh\bh  matches  patterns  in  a  case-insensitive
+                      If  set,  b\bba\bas\bsh\bh  matches  patterns  in a case-insensitive
                       fashion when performing matching while executing c\bca\bas\bse\be or
                       [\b[[\b[ conditional commands, when performing pattern substi-
-                      tution  word expansions, or when filtering possible com-
+                      tution word expansions, or when filtering possible  com-
                       pletions as part of programmable completion.
 
+              n\bno\boe\bex\bxp\bpa\ban\bnd\bd_\b_t\btr\bra\ban\bns\bsl\bla\bat\bti\bio\bon\bn
+                      If  set,  b\bba\bas\bsh\bh encloses the translated results of $"..."
+                      quoting in single quotes instead of double  quotes.   If
+                      the string is not translated, this has no effect.
+
               n\bnu\bul\bll\blg\bgl\blo\bob\bb
-                      If set, b\bba\bas\bsh\bh allows patterns which match no  files  (see
-                      P\bPa\bat\bth\bhn\bna\bam\bme\b E\bEx\bxp\bpa\ban\bns\bsi\bio\bon\bn  above)  to expand to a null string,
+                      If  set,  b\bba\bas\bsh\bh allows patterns which match no files (see
+                      P\bPa\bat\bth\bhn\bna\bam\bme\bE\bEx\bxp\bpa\ban\bns\bsi\bio\bon\bn above) to expand to  a  null  string,
                       rather than themselves.
 
+              p\bpa\bat\bts\bsu\bub\bb_\b_r\bre\bep\bpl\bla\bac\bce\bem\bme\ben\bnt\bt
+                      If set, b\bba\bas\bsh\bh expands occurrences of &\b& in the replacement
+                      string of pattern substitution to the  text  matched  by
+                      the  pattern,  as  described  under  P\bPa\bar\bra\bam\bme\bet\bte\ber\br E\bEx\bxp\bpa\ban\bns\bsi\bio\bon\bn
+                      above.  This option is enabled by default.
+
               p\bpr\bro\bog\bgc\bco\bom\bmp\bp
                       If set, the programmable completion facilities (see P\bPr\bro\bo-\b-
                       g\bgr\bra\bam\bmm\bma\bab\bbl\ble\be C\bCo\bom\bmp\bpl\ble\bet\bti\bio\bon\bn above) are enabled.  This option is
@@ -5876,20 +6111,27 @@ S\bSH\bHE\bEL\bLL\bL B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
                       ters.
 
               s\bso\bou\bur\brc\bce\bep\bpa\bat\bth\bh
-                      If set, the s\bso\bou\bur\brc\bce\be (.\b.) builtin uses the value of P\bPA\bAT\bTH\bH to
+                      If set, the .\b. (s\bso\bou\bur\brc\bce\be) builtin uses the value of P\bPA\bAT\bTH\bH to
                       find the directory containing the file  supplied  as  an
                       argument.  This option is enabled by default.
 
+              v\bva\bar\brr\bre\bed\bdi\bir\br_\b_c\bcl\blo\bos\bse\be
+                      If  set, the shell automatically closes file descriptors
+                      assigned using the _\b{_\bv_\ba_\br_\bn_\ba_\bm_\be_\b} redirection syntax (see R\bRE\bE-\b-
+                      D\bDI\bIR\bRE\bEC\bCT\bTI\bIO\bON\bN  above)  instead of leaving them open when the
+                      command completes.
+
               x\bxp\bpg\bg_\b_e\bec\bch\bho\bo
-                      If  set,  the  e\bec\bch\bho\bo builtin expands backslash-escape se-
+                      If set, the e\bec\bch\bho\bo builtin  expands  backslash-escape  se-
                       quences by default.
 
        s\bsu\bus\bsp\bpe\ben\bnd\bd [-\b-f\bf]
-              Suspend the execution of this shell until it receives a  S\bSI\bIG\bGC\bCO\bON\bNT\bT
-              signal.  A login shell cannot be suspended; the -\b-f\bf option can be
-              used to override this and force the suspension.  The return sta-
-              tus  is  0  unless the shell is a login shell and -\b-f\bf is not sup-
-              plied, or if job control is not enabled.
+              Suspend  the execution of this shell until it receives a S\bSI\bIG\bGC\bCO\bON\bNT\bT
+              signal.  A login shell, or a shell without job control  enabled,
+              cannot  be suspended; the -\b-f\bf 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\bf is
+              not supplied.
 
        t\bte\bes\bst\bt _\be_\bx_\bp_\br
        [\b[ _\be_\bx_\bp_\br ]\b]
@@ -5943,11 +6185,15 @@ S\bSH\bHE\bEL\bLL\bL B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
                      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 !\b!, the result is the negation of
-                     the  three-argument  expression composed of the remaining
-                     arguments.  Otherwise, the expression is parsed and eval-
-                     uated  according  to  precedence  using  the rules listed
-                     above.
+                     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(  and
+                     the  fourth argument is exactly )\b), 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.
@@ -6115,7 +6361,7 @@ S\bSH\bHE\bEL\bLL\bL B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
               N\bNA\bAM\bME\bE, G\bGR\bRO\bOU\bUP\bPS\bS, H\bHI\bIS\bST\bTC\bCM\bMD\bD, L\bLI\bIN\bNE\bEN\bNO\bO, R\bRA\bAN\bND\bDO\bOM\bM, S\bSE\bEC\bCO\bON\bND\bDS\bS, or  S\bSR\bRA\bAN\bND\bDO\bOM\bM  are
               unset, they lose their special properties, even if they are sub-
               sequently reset.  The exit status is true unless a _\bn_\ba_\bm_\be is read-
-              only.
+              only or may not be unset.
 
        w\bwa\bai\bit\bt [-\b-f\bfn\bn] [-\b-p\bp _\bv_\ba_\br_\bn_\ba_\bm_\be] [_\bi_\bd _\b._\b._\b.]
               Wait for each specified child process and return its termination
@@ -6137,23 +6383,25 @@ S\bSH\bHE\bEL\bLL\bL B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
               when  job control is enabled, forces w\bwa\bai\bit\bt to wait for _\bi_\bd to ter-
               minate before returning its status, instead of returning when it
               changes  status.  If _\bi_\bd specifies a non-existent process or job,
-              the return status is 127.  Otherwise, the return status  is  the
-              exit status of the last process or job waited for.
+              the return status is 127.  If w\bwa\bai\bit\bt is interrupted by  a  signal,
+              the  return  status will be greater than 128, as described under
+              S\bSI\bIG\bGN\bNA\bAL\bLS\bS above.  Otherwise, the return status is the exit  status
+              of the last process or job waited for.
 
 S\bSH\bHE\bEL\bLL\bL C\bCO\bOM\bMP\bPA\bAT\bTI\bIB\bBI\bIL\bLI\bIT\bTY\bY M\bMO\bOD\bDE\bE
-       Bash-4.0 introduced the concept of a `shell compatibility level', spec-
-       ified as a set of options to the shopt builtin c\bco\bom\bmp\bpa\bat\bt3\b31\b1, c\bco\bom\bmp\bpa\bat\bt3\b32\b2, c\bco\bom\bm-\b-
-       p\bpa\bat\bt4\b40\b0,  c\bco\bom\bmp\bpa\bat\bt4\b41\b1,  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 solu-
-       tion.
+       Bash-4.0  introduced the concept of a _\bs_\bh_\be_\bl_\bl _\bc_\bo_\bm_\bp_\ba_\bt_\bi_\bb_\bi_\bl_\bi_\bt_\by _\bl_\be_\bv_\be_\bl, speci-
+       fied as a set of options to the shopt  builtin  (  c\bco\bom\bmp\bpa\bat\bt3\b31\b1,  c\bco\bom\bmp\bpa\bat\bt3\b32\b2,
+       c\bco\bom\bmp\bpa\bat\bt4\b40\b0,  c\bco\bom\bmp\bpa\bat\bt4\b41\b1, 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 c\bco\bom\bmp\bpa\bat\bt3\b32\b2 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 above).
+       which is default behavior in bash-3.2 and subsequent versions).
 
        If  a  user enables, say, c\bco\bom\bmp\bpa\bat\bt3\b32\b2, it may affect the behavior of other
        compatibility levels up to  and  including  the  current  compatibility
@@ -6230,8 +6478,8 @@ S\bSH\bHE\bEL\bLL\bL C\bCO\bOM\bMP\bPA\bAT\bTI\bIB\bBI\bIL\bLI\bIT\bTY\bY M\bMO\bOD\bDE\bE
        c\bco\bom\bmp\bpa\bat\bt4\b43\b3
               +\bo      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 (declare -a foo='(1 2)'). Later  versions
-                     warn that this usage is deprecated
+                     ment to declare (e.g., declare  -a  foo='(1  2)').  Later
+                     versions warn that this usage is deprecated
               +\bo      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
@@ -6268,33 +6516,39 @@ S\bSH\bHE\bEL\bLL\bL C\bCO\bOM\bMP\bPA\bAT\bTI\bIB\bBI\bIL\bLI\bIT\bTY\bY M\bMO\bOD\bDE\bE
                      input. Bash-5.1 suppresses that message when the  -\b-l\bl  op-
                      tion is supplied.
 
+       c\bco\bom\bmp\bpa\bat\bt5\b51\b1
+              +\bo      The  u\bun\bns\bse\bet\bt  builtin  treats  attempts to unset array sub-
+                     scripts @\b@ and *\b* differently depending on whether the  ar-
+                     ray  is  indexed  or associative, and differently than in
+                     previous versions.
+
 R\bRE\bES\bST\bTR\bRI\bIC\bCT\bTE\bED\bD S\bSH\bHE\bEL\bLL\bL
        If b\bba\bas\bsh\bh is started with the name r\brb\bba\bas\bsh\bh, or the -\b-r\br 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\bba\bas\bsh\bh with the exception that the  following  are
+       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\bba\bas\bsh\bh with the exception that the following are
        disallowed or not performed:
 
        +\bo      changing directories with c\bcd\bd
 
-       +\bo      setting  or  unsetting the values of S\bSH\bHE\bEL\bLL\bL, P\bPA\bAT\bTH\bH, H\bHI\bIS\bST\bTF\bFI\bIL\bLE\bE, E\bEN\bNV\bV,
+       +\bo      setting or unsetting the values of S\bSH\bHE\bEL\bLL\bL, P\bPA\bAT\bTH\bH,  H\bHI\bIS\bST\bTF\bFI\bIL\bLE\bE,  E\bEN\bNV\bV,
               or B\bBA\bAS\bSH\bH_\b_E\bEN\bNV\bV
 
        +\bo      specifying command names containing /\b/
 
-       +\bo      specifying a filename containing a /\b/ as an  argument  to  the  .\b.
+       +\bo      specifying  a  filename  containing  a /\b/ as an argument to the .\b.
               builtin command
 
-       +\bo      specifying  a  filename containing a slash as an argument to the
+       +\bo      specifying a filename containing a slash as an argument  to  the
               h\bhi\bis\bst\bto\bor\bry\by builtin command
 
-       +\bo      specifying a filename containing a slash as an argument  to  the
+       +\bo      specifying  a  filename containing a slash as an argument to the
               -\b-p\bp option to the h\bha\bas\bsh\bh builtin command
 
-       +\bo      importing  function  definitions  from  the shell environment at
+       +\bo      importing function definitions from  the  shell  environment  at
               startup
 
-       +\bo      parsing the value of S\bSH\bHE\bEL\bLL\bLO\bOP\bPT\bTS\bS from  the  shell  environment  at
+       +\bo      parsing  the  value  of  S\bSH\bHE\bEL\bLL\bLO\bOP\bPT\bTS\bS from the shell environment at
               startup
 
        +\bo      redirecting output using the >, >|, <>, >&, &>, and >> redirect-
@@ -6303,15 +6557,16 @@ R\bRE\bES\bST\bTR\bRI\bIC\bCT\bTE\bED\bD S\bSH\bHE\bEL\bLL\bL
        +\bo      using the e\bex\bxe\bec\bc builtin command to replace the shell with another
               command
 
-       +\bo      adding  or  deleting builtin commands with the -\b-f\bf and -\b-d\bd options
+       +\bo      adding or deleting builtin commands with the -\b-f\bf and  -\b-d\b options
               to the e\ben\bna\bab\bbl\ble\be builtin command
 
-       +\bo      using the  e\ben\bna\bab\bbl\ble\be  builtin  command  to  enable  disabled  shell
+       +\bo      using  the  e\ben\bna\bab\bbl\ble\be  builtin  command  to  enable  disabled shell
               builtins
 
        +\bo      specifying the -\b-p\bp option to the c\bco\bom\bmm\bma\ban\bnd\bd builtin command
 
-       +\bo      turning off restricted mode with s\bse\bet\bt +\b+r\br or s\bse\bet\bt +\b+o\bo r\bre\bes\bst\btr\bri\bic\bct\bte\bed\bd.
+       +\bo      turning off  restricted  mode  with  s\bse\bet\bt  +\b+r\br  or  s\bsh\bho\bop\bpt\bt  -\b-u\bu  r\bre\be-\b-
+              s\bst\btr\bri\bic\bct\bte\bed\bd_\b_s\bsh\bhe\bel\bll\bl.
 
        These restrictions are enforced after any startup files are read.
 
@@ -6343,6 +6598,9 @@ F\bFI\bIL\bLE\bES\bS
        _\b~_\b/_\b._\bb_\ba_\bs_\bh_\b__\bl_\bo_\bg_\bo_\bu_\bt
               The individual login shell cleanup file, executed when  a  login
               shell exits
+       _\b~_\b/_\b._\bb_\ba_\bs_\bh_\b__\bh_\bi_\bs_\bt_\bo_\br_\by
+              The  default value of H\bHI\bIS\bST\bTF\bFI\bIL\bLE\bE, the file in which bash saves the
+              command history
        _\b~_\b/_\b._\bi_\bn_\bp_\bu_\bt_\br_\bc
               Individual _\br_\be_\ba_\bd_\bl_\bi_\bn_\be initialization file
 
@@ -6355,9 +6613,10 @@ A\bAU\bUT\bTH\bHO\bOR\bRS\bS
 
 B\bBU\bUG\bG R\bRE\bEP\bPO\bOR\bRT\bTS\bS
        If you find a bug in b\bba\bas\bsh\bh,\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\bba\bas\bsh\bh.   The  latest  version  is  always  available  from
-       _\bf_\bt_\bp_\b:_\b/_\b/_\bf_\bt_\bp_\b._\bg_\bn_\bu_\b._\bo_\br_\bg_\b/_\bp_\bu_\bb_\b/_\bg_\bn_\bu_\b/_\bb_\ba_\bs_\bh_\b/.
+       make  sure  that  it really is a bug, and that it appears in the latest
+       version  of  b\bba\bas\bsh\bh.   The  latest  version  is  always  available   from
+       _\bf_\bt_\bp_\b:_\b/_\b/_\bf_\bt_\bp_\b._\bg_\bn_\bu_\b._\bo_\br_\bg_\b/_\bp_\bu_\bb_\b/_\bg_\bn_\bu_\b/_\bb_\ba_\bs_\bh_\b/          and          _\bh_\bt_\bt_\bp_\b:_\b/_\b/_\bg_\bi_\bt_\b._\bs_\ba_\bv_\ba_\bn_\b-
+       _\bn_\ba_\bh_\b._\bg_\bn_\bu_\b._\bo_\br_\bg_\b/_\bc_\bg_\bi_\bt_\b/_\bb_\ba_\bs_\bh_\b._\bg_\bi_\bt_\b/_\bs_\bn_\ba_\bp_\bs_\bh_\bo_\bt_\b/_\bb_\ba_\bs_\bh_\b-_\bm_\ba_\bs_\bt_\be_\br_\b._\bt_\ba_\br_\b._\bg_\bz.
 
        Once you have determined that a bug actually exists,  use  the  _\bb_\ba_\bs_\bh_\bb_\bu_\bg
        command  to submit a bug report.  If you have a fix, you are encouraged
@@ -6402,4 +6661,4 @@ B\bBU\bUG\bGS\bS
 
 
 
-GNU Bash 5.1                    2020 October 29                        BASH(1)
+GNU Bash 5.2                   2022 September 19                       BASH(1)
index 5af7d42809df267e420fa67dd2f357b798b58071..55c562208ab98d9f5a36bbd095f8a6dea6376577 100644 (file)
@@ -5,12 +5,12 @@
 .\"    Case Western Reserve University
 .\"    chet.ramey@case.edu
 .\"
-.\"    Last Change: Wed Sep 23 09:28:31 EDT 2020
+.\"    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 "2020 October 29" "GNU Bash 5.1"
+.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.
@@ -50,8 +50,8 @@ bash \- GNU Bourne-Again SHell
 [options]
 [command_string | file]
 .SH COPYRIGHT
-.if n Bash is Copyright (C) 1989-2020 by the Free Software Foundation, Inc.
-.if t Bash is Copyright \(co 1989-2020 by the Free Software Foundation, Inc.
+.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
@@ -281,7 +281,7 @@ An \fIinteractive\fP shell is one started without non-option arguments
 (unless \fB\-s\fP is specified)
 and without the
 .B \-c
-option
+option,
 whose standard input and error are
 both connected to terminals (as determined by
 .IR isatty (3)),
@@ -420,12 +420,14 @@ No other startup files are read.
 .PP
 .B Bash
 attempts to determine when it is being run with its standard input
-connected to a network connection, as when executed by the remote shell
-daemon, usually \fIrshd\fP, or the secure shell daemon \fIsshd\fP.
+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 in this fashion, it reads and executes
-commands from \fI~/.bashrc\fP, if that file exists and is readable.
+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
@@ -511,6 +513,7 @@ command (only \fBin\fP and \fBdo\fP are valid):
 .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
@@ -529,24 +532,24 @@ or \fB|&\fP.
 The format for a pipeline is:
 .RS
 .PP
-[\fBtime\fP [\fB\-p\fP]] [ ! ] \fIcommand\fP [ [\fB|\fP\(bv\fB|&\fP] \fIcommand2\fP ... ]
+[\fBtime\fP [\fB\-p\fP]] [ ! ] \fIcommand1\fP [ [\fB|\fP\(bv\fB|&\fP] \fIcommand2\fP ... ]
 .RE
 .PP
 The standard output of
-.I command
+.I command1
 is connected via a pipe to the standard input of
 .IR command2 .
 This connection is performed before any redirections specified by the
-command (see
+.IR command1 (see
 .SM
 .B REDIRECTION
 below).
-If \fB|&\fP is used, \fIcommand\fP's standard error, in addition to its
+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 the command.
+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.
@@ -588,15 +591,18 @@ The
 variable may be used to specify the format of
 the time information.
 .PP
-Each command in a pipeline is executed as a separate process (i.e., in a
-subshell).
+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 a subshell environment.
+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.
+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
@@ -671,10 +677,10 @@ the rest of the command by one or more newlines, and may be followed by a
 newline in place of a semicolon.
 .TP
 (\fIlist\fP)
-\fIlist\fP is executed in a subshell environment (see
+\fIlist\fP is executed in a subshell (see
 .SM
 \fBCOMMAND EXECUTION ENVIRONMENT\fP
-below).
+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
@@ -698,8 +704,12 @@ below under
 .SM
 .BR "ARITHMETIC EVALUATION" .
 If the value of the expression is non-zero, the return status is 0;
-otherwise the return status is 1.  This is exactly equivalent to
-\fBlet "\fIexpression\fP"\fR.
+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
@@ -707,11 +717,12 @@ the conditional expression \fIexpression\fP.
 Expressions are composed of the primaries described below under
 .SM
 .BR "CONDITIONAL EXPRESSIONS" .
-Word splitting and pathname expansion are not performed on the words
-between the \fB[[\fP and \fB]]\fP; tilde expansion,
-parameter and variable expansion,
-arithmetic expansion, command substitution, process
-substitution, and quote removal are performed.
+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
@@ -749,12 +760,14 @@ If the
 .B nocasematch
 shell option is enabled, the match is performed without regard to the case
 of alphabetic characters.
-Any part of the pattern may be quoted to force the quoted portion
-to be matched as a string.
-Bracket expressions in regular expressions must be treated carefully,
-since normal quoting characters lose their meanings between brackets.
+If 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 as a string.
+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.
@@ -778,6 +791,11 @@ indices. The element of
 .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
@@ -846,21 +864,24 @@ that is executed, or false if any of the expressions is invalid.
 .TP
 \fBselect\fP \fIname\fP [ \fBin\fP \fIword\fP ] ; \fBdo\fP \fIlist\fP ; \fBdone\fP
 The list of words following \fBin\fP is expanded, generating a list
-of items.  The set of expanded words is printed on the standard
+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).  The
+below).
+.B select
+then displays the
 .SM
 .B PS3
-prompt is then displayed and a line read from the standard input.
+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 command completes.  Any
-other value read causes
+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
@@ -888,7 +909,7 @@ expansion, parameter and variable expansion, arithmetic expansion,
 command substitution, process substitution and quote removal.
 Each \fIpattern\fP examined is expanded using tilde
 expansion, parameter and variable expansion, arithmetic expansion,
-command substitution, and process substitution.
+command substitution, process substitution, and quote removal.
 If the
 .B nocasematch
 shell option is enabled, the match is performed without regard to the case
@@ -944,17 +965,36 @@ A coprocess is executed asynchronously in a subshell, as if the command
 had been terminated with the \fB&\fP control operator, with a two-way pipe
 established between the executing shell and the coprocess.
 .PP
-The format for a coprocess is:
+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.
-\fINAME\fP must not be supplied if \fIcommand\fP is a \fIsimple
-command\fP (see above); otherwise, it is interpreted as the first word
-of the simple command.
+.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.
@@ -975,6 +1015,7 @@ 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
@@ -1000,9 +1041,9 @@ The \fIbody\fP of the function is the compound command
 .I compound\-command
 (see \fBCompound Commands\fP above).
 That command is usually a \fIlist\fP of commands between { and }, but
-may be any command listed under \fBCompound Commands\fP above,
-with one exception: If the \fBfunction\fP reserved word is used, but the
-parentheses are not supplied, the braces are required.
+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
@@ -1116,10 +1157,11 @@ quotes (see
 .B PARAMETERS
 below).
 .PP
-Words of the form \fB$\fP\(aq\fIstring\fP\(aq are treated specially.  The
-word expands to \fIstring\fP, with backslash-escaped characters replaced
-as specified by the ANSI C standard.  Backslash escape sequences, if
-present, are decoded as follows:
+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
@@ -1187,14 +1229,23 @@ 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 message catalog lookup and
-translation, using the \fBLC_MESSAGES\fP and \fBTEXTDOMAIN\fP shell
-variables.
+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,
-or if there are no translations available,
+if there are no translations available,
+or if the string is not translated,
 the dollar sign is ignored.
-If the string is translated and replaced, the replacement is
-double-quoted.
+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
@@ -1250,10 +1301,7 @@ is evaluated as an arithmetic expression even if the $((...)) expansion is
 not used (see
 .B "Arithmetic Expansion"
 below).
-Word splitting is not performed, with the exception
-of \fB"$@"\fP as explained below under
-.BR "Special Parameters" .
-Pathname expansion is not performed.
+Word splitting and pathname expansion are not performed.
 Assignment statements may also appear as arguments to the
 .BR alias ,
 .BR declare ,
@@ -1272,7 +1320,7 @@ to a shell variable or array index, the += operator can be used to
 append to or add to the variable's previous value.
 This includes arguments to builtin commands such as \fBdeclare\fP that
 accept assignment statements (\fIdeclaration\fP commands).
-When += is applied to a variable for which the \fIinteger\fP attribute has been
+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
@@ -1407,7 +1455,7 @@ builtin command, or those set by the shell itself
 option).
 .TP
 .B $
-Expands to the process ID of the shell.  In a () subshell, it
+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
@@ -1926,6 +1974,16 @@ If
 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
@@ -1968,14 +2026,14 @@ builtin command when no arguments are supplied.
 .TP
 .B SECONDS
 Each time this parameter is
-referenced, the number of seconds since shell invocation is returned.  If a
-value is assigned to
+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 is always
+The number of seconds at shell invocation and the current time are always
 determined by querying the system clock.
 If
 .SM
@@ -2038,7 +2096,7 @@ below.
 The value is used to set the shell's compatibility level.
 See
 .SM
-.B SHELL COMPATIBILITY MODE
+.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)
@@ -2051,7 +2109,7 @@ compatibility level to the default for the current version.
 The valid values correspond to the compatibility levels
 described below under
 .SM
-.BR BSHELL COMPATIBILITY MODE .
+.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.
@@ -2728,6 +2786,12 @@ 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
@@ -2782,9 +2846,15 @@ destroys the array element at index \fIsubscript\fP,
 for both indexed and associative arrays.
 Negative subscripts to indexed arrays are interpreted as described above.
 Unsetting the last element of an array variable does not unset the variable.
-\fBunset\fP \fIname\fP, where \fIname\fP is an array, or
+\fBunset\fP \fIname\fP, 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, removes the entire array.
+\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
@@ -2875,7 +2945,7 @@ For example, a\fB{\fPd,c,b\fB}\fPe expands into `ade ace abe'.
 .PP
 A sequence expression takes the form
 \fB{\fP\fIx\fP\fB..\fP\fIy\fP\fB[..\fP\fIincr\fP\fB]}\fP,
-where \fIx\fP and \fIy\fP are either integers or single characters,
+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.
@@ -2884,10 +2954,11 @@ same width.
 When either \fIx\fP or \fPy\fP begins with a zero, the shell
 attempts to force all generated terms to contain the same number of digits,
 zero-padding where necessary.
-When characters are supplied, the expression expands to each character
+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.
+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
@@ -3117,7 +3188,7 @@ ${\fIparameter\fP\fB:\fP\fIoffset\fP\fB:\fP\fIlength\fP}
 \fBSubstring Expansion\fP.
 Expands to up to \fIlength\fP characters of the value of \fIparameter\fP
 starting at the character specified by \fIoffset\fP.
-If \fIparameter\fP is \fB@\fP, an indexed array subscripted by
+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
@@ -3140,8 +3211,8 @@ a number of characters, and the expansion is the characters between
 Note that a negative offset must be separated from the colon by at least
 one space to avoid being confused with the \fB:-\fP expansion.
 .sp 1
-If \fIparameter\fP is \fB@\fP, the result is \fIlength\fP positional
-parameters beginning at \fIoffset\fP.
+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.
@@ -3289,22 +3360,58 @@ 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,
+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.
-If \fIpattern\fP begins with \fB/\fP, all matches of \fIpattern\fP are
-replaced with \fIstring\fP.  Normally only the first match is replaced.
-If \fIpattern\fP begins with \fB#\fP, it must match at the beginning
-of the expanded value of \fIparameter\fP.
-If \fIpattern\fP begins with \fB%\fP, it must match at the end
-of the expanded value of \fIparameter\fP.
-If \fIstring\fP is null, matches of \fIpattern\fP are deleted
+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
@@ -3394,7 +3501,7 @@ format that can be reused as input.
 .TP
 .B E
 The expansion is a string that is the value of \fIparameter\fP with backslash
-escape sequences expanded as with the \fB$'...'\fP quoting mechanism.
+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
@@ -3414,6 +3521,10 @@ indexed and associative arrays as a sequence of quoted key-value pairs
 .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
@@ -3483,8 +3594,10 @@ and the substitution of the result.  The format for arithmetic expansion is:
 .PP
 The
 .I expression
-is treated as if it were within double quotes, but a double quote
-inside the parentheses is not treated specially.
+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.
@@ -3648,14 +3761,23 @@ at the start of a name or immediately following a slash
 must be matched explicitly, unless the shell option
 .B dotglob
 is set.
-The filenames
+In order to match the filenames
 .B ``.''
 and
-.B ``..''
-must always be matched explicitly, even if
+.BR ``..'' ,
+the pattern must begin with ``.'' (for example, ``.?''),
+even if
 .B dotglob
 is set.
-In other cases, the
+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
@@ -3672,6 +3794,7 @@ below under
 for a description of the
 .BR nocaseglob ,
 .BR nullglob ,
+.BR globskipdots ,
 .BR failglob ,
 and
 .B dotglob
@@ -3763,7 +3886,9 @@ is a
 or a
 .B ^
 then any character not enclosed is matched.
-The sorting order of characters in range expressions is determined by
+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
@@ -3833,7 +3958,7 @@ the syntax \fB[.\fP\fIsymbol\fP\fB.]\fP matches the collating symbol
 .PD
 .PP
 If the \fBextglob\fP shell option is enabled using the \fBshopt\fP
-builtin, several extended pattern matching operators are recognized.
+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
@@ -3859,6 +3984,22 @@ 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.
@@ -3876,7 +4017,7 @@ Before a command is executed, its input and output
 may be
 .I redirected
 using a special notation interpreted by the shell.
-Redirection allows commands' file handles to be
+\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.
@@ -3900,7 +4041,8 @@ by {\fIvarname\fP}, the value of \fIvarname\fP defines the file
 descriptor to close.
 If {\fIvarname\fP} is supplied, the redirection persists beyond
 the scope of the command, allowing the shell programmer to manage
-the file descriptor himself.
+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
@@ -4287,7 +4429,7 @@ command, and removed with the
 command.
 .PP
 There is no mechanism for using arguments in the replacement text.
-If arguments are needed, a shell function should be used (see
+If arguments are needed, use a shell function (see
 .SM
 .B FUNCTIONS
 below).
@@ -4379,11 +4521,22 @@ been enabled.
 .PP
 Variables local to the function may be declared with the
 .B local
-builtin command.  Ordinarily, variables and their values
+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
@@ -4414,11 +4567,13 @@ 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.
+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
@@ -4453,7 +4608,8 @@ or
 will list the function names only
 (and optionally the source file and line number, if the \fBextdebug\fP
 shell option is enabled).
-Functions may be exported so that subshells
+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
@@ -4777,7 +4933,11 @@ expansion, parameter expansion, command substitution, arithmetic expansion,
 and quote removal before being assigned to the variable.
 .PP
 If no command name results, the variable assignments affect the current
-shell environment.  Otherwise, the variables are added to the environment
+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.
@@ -4842,8 +5002,10 @@ 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 \fIshell script\fP, a file
-containing shell commands.  A subshell is spawned to execute
-it.  This subshell reinitializes itself, so
+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
@@ -4899,8 +5061,8 @@ of \fB$$\fP, and the value of
 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 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
@@ -4919,6 +5081,8 @@ 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.
 .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,
@@ -5020,6 +5184,9 @@ 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
@@ -5111,6 +5278,63 @@ 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)
@@ -5375,7 +5599,8 @@ the version of \fBbash\fP (e.g., 2.00)
 the release of \fBbash\fP, version + patch level (e.g., 2.00.0)
 .TP
 .B \ew
-the current working directory, with
+the value of the \fBPWD\fP shell variable (\fB$PWD\fP),
+with
 .SM
 .B $HOME
 abbreviated with a tilde
@@ -5385,7 +5610,8 @@ abbreviated with a tilde
 variable)
 .TP
 .B \eW
-the basename of the current working directory, with
+the basename of \fB$PWD\fP,
+with
 .SM
 .B $HOME
 abbreviated with a tilde
@@ -5731,6 +5957,30 @@ 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
@@ -5751,6 +6001,9 @@ 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
@@ -5800,6 +6053,8 @@ 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
@@ -5808,6 +6063,8 @@ 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
@@ -5838,12 +6095,25 @@ 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 will configure the terminal in a way
-that will enable it to insert each paste into the editing buffer as a
-single string of characters, instead of treating each character as if
-it had been read from the keyboard.  This can prevent pasted characters
-from being interpreted as editing commands.
+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
@@ -5889,6 +6159,8 @@ regardless of what the terminal claims it can support.  The name
 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
@@ -5952,6 +6224,8 @@ 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
@@ -6205,14 +6479,14 @@ Words are delimited by non-quoted shell metacharacters.
 .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
+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
+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)
@@ -6256,6 +6530,18 @@ Move to the first line in the history.
 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.
@@ -6355,12 +6641,6 @@ Perform history and alias expansion on the current line.
 .B insert\-last\-argument (M\-.\^, M\-_\^)
 A synonym for \fByank\-last\-arg\fP.
 .TP
-.B operate\-and\-get\-next (C\-o)
-Accept the current line for execution and fetch the next line
-relative to the current line from the history for editing.
-A numeric argument, if supplied, specifies the history entry to use instead
-of the current line.
-.TP
 .B edit\-and\-execute\-command (C\-x C\-e)
 Invoke an editor on the current command line, and execute the result as shell
 commands.
@@ -6379,7 +6659,7 @@ 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
+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 .
@@ -6704,11 +6984,11 @@ the saved position, and the old cursor position is saved as the mark.
 .TP
 .B character\-search (C\-])
 A character is read and point is moved to the next occurrence of that
-character.  A negative count searches for previous occurrences.
+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 count searches for subsequent occurrences.
+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
@@ -6735,6 +7015,11 @@ 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
@@ -7426,13 +7711,14 @@ does not contain a slash, filenames in
 .SM
 .B PATH
 are used to find the directory containing
-.IR filename .
+.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, the current directory is
-searched if no file is found in
+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
@@ -7446,12 +7732,12 @@ is not searched.
 If any \fIarguments\fP are supplied, they become the positional
 parameters when \fIfilename\fP is executed.  Otherwise the positional
 parameters are unchanged.
-If the \fB\-T\fP option is enabled, \fBsource\fP inherits any trap on
+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 \fBsource\fP, and \fBsource\fP unsets the
+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 \fBsource\fP completes.
+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
@@ -7496,6 +7782,8 @@ or was started without job control.
 \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
@@ -7504,7 +7792,9 @@ key and function bindings, bind a key sequence to a
 function or macro, or set a
 .B readline
 variable.
-Each non-option argument is a command as it would appear in
+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'.
@@ -7577,6 +7867,11 @@ and
 .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 ,
@@ -7643,7 +7938,6 @@ if \fIdir\fP is not supplied, the value of the
 .SM
 .B HOME
 shell variable is the default.
-Any additional arguments following \fIdir\fP are ignored.
 The variable
 .SM
 .B CDPATH
@@ -7702,6 +7996,10 @@ 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
@@ -7800,7 +8098,9 @@ If any of \fB\-D\fP, \fB\-E\fP, or \fB\-I\fP are supplied, any other
 specified by the option.
 .sp 1
 The process of applying these completion specifications when word completion
-is attempted is described above under \fBProgrammable Completion\fP.
+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
@@ -7935,6 +8235,7 @@ Names of all shell variables.  May also be specified as \fB\-v\fP.
 \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
@@ -8088,12 +8389,14 @@ to give variables attributes:
 .B \-a
 Each \fIname\fP is an indexed array variable (see
 .B Arrays
-above).
+.ie \n(zZ=1 in \fIbash(1)\fP).
+.el above).
 .TP
 .B \-A
 Each \fIname\fP is an associative array variable (see
 .B Arrays
-above).
+.ie \n(zZ=1 in \fIbash(1)\fP).
+.el above).
 .TP
 .B \-f
 Use function names only.
@@ -8102,7 +8405,9 @@ Use function names only.
 The variable is treated as an integer; arithmetic evaluation (see
 .SM
 .B "ARITHMETIC EVALUATION"
-above) is performed when the variable is assigned a value.
+.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
@@ -8165,7 +8470,9 @@ an attempt is made to assign a value to a readonly variable,
 an attempt is made to assign a value to an array variable without
 using the compound assignment syntax (see
 .B Arrays
-above), one of the \fInames\fP is not a valid shell variable name,
+.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.
@@ -8335,7 +8642,11 @@ option means to load the new builtin command
 .I name
 from shared object
 .IR filename ,
-on systems that support dynamic loading.  The
+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 .
@@ -8349,6 +8660,11 @@ 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
@@ -8780,8 +9096,9 @@ end of the history, and an index of \-1 refers to the current
 \fBhistory -d\fP command.
 .TP
 \fB\-d\fP \fIstart\fP\-\fIend\fP
-Delete the history entries between positions \fIstart\fP and \fIend\fP,
-inclusive.  Positive and negative values for \fIstart\fP and \fIend\fP
+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
@@ -8829,7 +9146,7 @@ comment character followed immediately by a digit are interpreted
 as timestamps for the following history entry.
 The return value is 0 unless an invalid option is encountered, an
 error occurs while reading or writing the history file, an invalid
-\fIoffset\fP is supplied as an argument to \fB\-d\fP, or the
+\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
@@ -8940,7 +9257,8 @@ Each
 is an arithmetic expression to be evaluated (see
 .SM
 .B "ARITHMETIC EVALUATION"
-above).
+.ie \n(zZ=1 in \fIbash(1)\fP).
+.el above).
 If the last
 .I arg
 evaluates to 0,
@@ -9057,10 +9375,12 @@ argument is supplied, \fIarray\fP is invalid or unassignable, or if
 .RE
 .TP
 \fBpopd\fP [\-\fBn\fP] [+\fIn\fP] [\-\fIn\fP]
-Removes entries from the directory stack.  With no arguments,
-removes the top directory from the stack, and performs a
-.B cd
-to the new top directory.
+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
@@ -9073,7 +9393,8 @@ from the stack, so that only the stack is manipulated.
 Removes the \fIn\fPth entry counting from the left of the list
 shown by
 .BR dirs ,
-starting with zero.  For example:
+starting with zero, from the stack.
+For example:
 .if n ``popd +0''
 .if t \f(CWpopd +0\fP
 removes the first directory,
@@ -9094,15 +9415,23 @@ removes the last directory,
 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, a
+command is successful,
+bash runs
 .B dirs
-is performed as well, and the return status is 0.
-.B popd
-returns false if an invalid option is encountered, the directory stack
-is empty, a non-existent directory stack entry is specified, or the
-directory change fails.
+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]
@@ -9131,6 +9460,10 @@ in the same way as \fBecho \-e\fP.
 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).
@@ -9166,8 +9499,9 @@ The return value is zero on success, non-zero on failure.
 .PD
 Adds a directory to the top of the directory stack, or rotates
 the stack, making the new top of the stack the current working
-directory.  With no arguments, \fBpushd\fP exchanges the top two directories
-and returns 0, unless the directory stack is empty.
+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
@@ -9192,26 +9526,28 @@ starting with zero) is at the top.
 .I dir
 Adds
 .I dir
-to the directory stack at the top, making it the
-new current working directory as if it had been supplied as the argument
-to the \fBcd\fP builtin.
+to the directory stack at the top
 .PD
 .PP
-If the
+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
-command is successful, a
-.B dirs
-is performed as well.
-If the first form is used,
+returns 0 unless the directory stack is empty.
+When rotating the directory stack,
 .B pushd
-returns 0 unless the cd to
-.I dir
-fails.  With the second form,
+returns 0 unless the directory stack is empty or
+a non-existent directory stack element is specified.
+.PP
+If the
 .B pushd
-returns 0 unless the directory stack is empty,
-a non-existent directory stack element is specified,
-or the directory change to the specified new current directory
-fails.
+command is successful,
+bash runs
+.B dirs
+to show the final contents of the directory stack.
 .RE
 .TP
 \fBpwd\fP [\fB\-LP\fP]
@@ -9233,7 +9569,10 @@ invalid option is supplied.
 \fBread\fP [\fB\-ers\fP] [\fB\-a\fP \fIaname\fP] [\fB\-d\fP \fIdelim\fP] [\fB\-i\fP \fItext\fP] [\fB\-n\fP \fInchars\fP] [\fB\-N\fP \fInchars\fP] [\fB\-p\fP \fIprompt\fP] [\fB\-t\fP \fItimeout\fP] [\fB\-u\fP \fIfd\fP] [\fIname\fP ...]
 One line is read from the standard input, or from the file descriptor
 \fIfd\fP supplied as an argument to the \fB\-u\fP option,
-split into words as described above under \fBWord Splitting\fP,
+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 ,
@@ -9249,7 +9588,10 @@ The characters in
 .SM
 .B IFS
 are used to split the line into words using the same rules the shell
-uses for expansion (described above under \fBWord Splitting\fP).
+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:
@@ -9278,9 +9620,11 @@ is coming from a terminal,
 (see
 .SM
 .B READLINE
-above) is used to obtain the line.
+.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.
+active) editing settings, but uses readline's default filename completion.
 .TP
 .B \-i \fItext\fP
 If
@@ -9331,8 +9675,10 @@ from regular files.
 If \fBread\fP times out, \fBread\fP saves any partial input read into
 the specified variable \fIname\fP.
 If \fItimeout\fP is 0, \fBread\fP returns immediately, without trying to
-read any data.  The exit status is 0 if input is available on
-the specified file descriptor, non-zero otherwise.
+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
@@ -9426,12 +9772,12 @@ function and not during execution of a script by \fB.\fP\^ or \fBsource\fP.
 Any command associated with the \fBRETURN\fP trap is executed
 before execution resumes after the function or script.
 .TP
-\fBset\fP [\fB\-\-abefhkmnptuvxBCEHPT\fP] [\fB\-o\fP \fIoption\-name\fP] [\fIarg\fP ...]
+\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] [\fIarg\fP ...]
+\fBset\fP [\fB+abefhkmnptuvxBCEHPT\fP] [\fB+o\fP \fIoption\-name\fP] [\fB\-\-\fP] [\fB\-\fP] [\fIarg\fP ...]
 .PD
-Without options, the name and value of each shell variable are displayed
+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.
@@ -9466,7 +9812,9 @@ or a \fIcompound command\fP
 (see
 .SM
 .B SHELL GRAMMAR
-above), exits with a non-zero status.
+.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
@@ -9494,7 +9842,9 @@ This option applies to the shell environment and each subshell environment
 separately (see
 .SM
 .B "COMMAND EXECUTION ENVIRONMENT"
-above), and may cause
+.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
@@ -9526,7 +9876,8 @@ by default for interactive shells on systems that support
 it (see
 .SM
 .B JOB CONTROL
-above).
+.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.
@@ -9577,7 +9928,10 @@ Same as
 .BR \-H .
 .TP 8
 .B history
-Enable command history, as described above under
+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.
@@ -9589,7 +9943,8 @@ The effect is as if the shell command
 had been executed
 (see
 .B Shell Variables
-above).
+.ie \n(zZ=1 in \fIbash(1)\fP).
+.el above).
 .TP 8
 .B keyword
 Same as
@@ -9644,7 +9999,9 @@ 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
+.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
@@ -9705,12 +10062,18 @@ 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 "*" as an error when performing
+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.
@@ -9730,7 +10093,9 @@ or associated word list.
 .B \-B
 The shell performs brace expansion (see
 .B Brace Expansion
-above).  This is on by default.
+.ie \n(zZ=1 in \fIbash(1)\fP).
+.el above).
+This is on by default.
 .TP 8
 .B \-C
 If set,
@@ -9923,8 +10288,9 @@ the exit to be deferred until a second exit is attempted without an
 intervening command (see
 .SM
 .B "JOB CONTROL"
-above).  The shell always
-postpones exiting if any jobs are stopped.
+.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)
@@ -9943,7 +10309,10 @@ 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
+history is enabled, as described
+.ie \n(zZ=1 in \fIbash(1)\fP
+.el above
+under
 .SM
 .BR HISTORY .
 .PD 0
@@ -9961,12 +10330,15 @@ history is enabled, as described above under
 .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"
-below).
+.ie \n(zZ=1 in \fIbash(1)\fP).
+.el below).
 .TP 8
 .B complete_fullquote
 If set,
@@ -10025,7 +10397,10 @@ builtin command.  An interactive shell does not exit if
 fails.
 .TP 8
 .B expand_aliases
-If set, aliases are expanded as described above under
+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.
@@ -10059,7 +10434,9 @@ a call to \fBreturn\fP.
 and
 .SM
 .B BASH_ARGV
-are updated as described in their descriptions above.
+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
@@ -10073,7 +10450,10 @@ subshells invoked with \fB(\fP \fIcommand\fP \fB)\fP inherit the
 .RE
 .TP 8
 .B extglob
-If set, the extended pattern matching features described above under
+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
@@ -10095,7 +10475,9 @@ the ignored words are the only possible completions.
 See
 .SM
 \fBSHELL VARIABLES\fP
-above for a description of
+.ie \n(zZ=1 in \fIbash(1)\fP
+.el above
+for a description of
 .SM
 .BR FIGNORE .
 This option is enabled by default.
@@ -10104,7 +10486,9 @@ This option is enabled by default.
 If set, range expressions used in pattern matching bracket expressions (see
 .SM
 .B Pattern Matching
-above) behave as if in the traditional C locale when performing
+.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
@@ -10114,6 +10498,15 @@ 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.
@@ -10153,7 +10546,8 @@ word containing a \fB@\fP is being completed (see
 under
 .SM
 .B READLINE
-above).
+.ie \n(zZ=1 in \fIbash(1)\fP).
+.el above).
 This is enabled by default.
 .TP 8
 .B huponexit
@@ -10174,7 +10568,9 @@ to cause that word and all remaining characters on that
 line to be ignored in an interactive shell (see
 .SM
 .B COMMENTS
-above).  This option is enabled by default.
+.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
@@ -10201,7 +10597,8 @@ at the current function scope.
 The shell sets this option if it is started as a login shell (see
 .SM
 .B "INVOCATION"
-above).
+.ie \n(zZ=1 in \fIbash(1)\fP).
+.el above).
 The value may not be changed.
 .TP 8
 .B mailwarn
@@ -10226,7 +10623,8 @@ If set,
 matches filenames in a case\-insensitive fashion when performing pathname
 expansion (see
 .B Pathname Expansion
-above).
+.ie \n(zZ=1 in \fIbash(1)\fP).
+.el above).
 .TP 8
 .B nocasematch
 If set,
@@ -10236,18 +10634,38 @@ 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
-above)
+.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 above) are enabled.
+\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
@@ -10262,13 +10680,17 @@ parameter expansion, command substitution, arithmetic
 expansion, and quote removal after being expanded as described in
 .SM
 .B PROMPTING
-above.  This option is enabled by default.
+.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
+The shell sets this option if it is started in restricted mode
+(see
 .SM
 .B "RESTRICTED SHELL"
-below).
+.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.
@@ -10281,12 +10703,21 @@ number of positional parameters.
 .TP 8
 .B sourcepath
 If set, the
-\fBsource\fP (\fB.\fP) builtin uses the value of
+\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.
@@ -10297,12 +10728,16 @@ by default.
 Suspend the execution of this shell until it receives a
 .SM
 .B SIGCONT
-signal.  A login shell cannot be suspended; the
+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 and
+The return status is 0 unless the shell is a login shell
+or job control is not enabled
+and
 .B \-f
-is not supplied, or if job control is not enabled.
+is not supplied.
 .TP
 \fBtest\fP \fIexpr\fP
 .PD 0
@@ -10312,8 +10747,10 @@ 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.
-.if \n(zZ=0 Expressions are composed of the primaries described above under
-.if \n(zZ=1 Expressions are composed of the primaries described in the \fBbash\fP manual page under
+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
@@ -10366,7 +10803,9 @@ The expression is true if and only if the argument is not null.
 2 arguments
 If the first argument is \fB!\fP, the expression is true if and
 only if the second argument is null.
-If the first argument is one of the unary conditional operators listed above
+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" ,
@@ -10376,7 +10815,9 @@ is false.
 .TP
 3 arguments
 The following conditions are applied in the order listed.
-If the second argument is one of the binary conditional operators listed above
+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" ,
@@ -10392,8 +10833,13 @@ 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
@@ -10476,7 +10922,8 @@ is executed before every \fIsimple command\fP, \fIfor\fP command,
 command, and before the first command executes in a shell function (see
 .SM
 .B SHELL GRAMMAR
-above).
+.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
@@ -10843,7 +11290,7 @@ or
 are unset, they lose their special properties, even if they are
 subsequently reset.  The exit status is true unless a
 .I name
-is readonly.
+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.
@@ -10875,12 +11322,17 @@ 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.  Otherwise, the return status is the exit status of the last
+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 `shell compatibility level', specified
-as a set of options to the shopt builtin
+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 ,
@@ -10896,7 +11348,7 @@ 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 \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 above). 
+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.
@@ -11016,7 +11468,7 @@ are not special within double-quoted word expansions
 .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
-(declare -a foo='(1 2)'). Later versions warn that this usage is
+(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
@@ -11076,6 +11528,16 @@ 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"
@@ -11160,7 +11622,7 @@ option to the
 builtin command
 .IP \(bu
 turning off restricted mode with
-\fBset +r\fP or \fBset +o restricted\fP.
+\fBset +r\fP or \fBshopt -u restricted_shell\fP.
 .PP
 These restrictions are enforced after any startup files are read.
 .PP
@@ -11214,6 +11676,10 @@ The individual per-interactive-shell startup file
 .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
@@ -11233,7 +11699,8 @@ 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.
+\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
index adb9e7607f1a52dd1b49bc8c3e895101155ffac2..d809369003a6de00105a6816a30f1860d158b027 100644 (file)
@@ -3,7 +3,7 @@
 </HEAD>
 <BODY><TABLE WIDTH=100%>
 <TR>
-<TH ALIGN=LEFT width=33%>BASH(1)<TH ALIGN=CENTER width=33%>2020 October 29<TH ALIGN=RIGHT width=33%>BASH(1)
+<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>
@@ -54,7 +54,7 @@ bash - GNU Bourne-Again SHell
 <H3>COPYRIGHT</H3>
 
 
-Bash is Copyright &#169; 1989-2020 by the Free Software Foundation, Inc.
+Bash is Copyright &#169; 1989-2022 by the Free Software Foundation, Inc.
 <A NAME="lbAE">&nbsp;</A>
 <H3>DESCRIPTION</H3>
 
@@ -368,7 +368,7 @@ An <I>interactive</I> shell is one started without non-option arguments
 and without the
 <B>-c</B>
 
-option
+option,
 whose standard input and error are
 both connected to terminals (as determined by
 <I>isatty</I>(3)),
@@ -556,13 +556,15 @@ No other startup files are read.
 <B>Bash</B>
 
 attempts to determine when it is being run with its standard input
-connected to a network connection, as when executed by the remote shell
-daemon, usually <I>rshd</I>, or the secure shell daemon <I>sshd</I>.
+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 in this fashion, it reads and executes
-commands from <A HREF="file:~/.bashrc"><I>~/.bashrc</I></A>, if that file exists and is readable.
+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>
@@ -685,6 +687,7 @@ command (only <B>in</B> and <B>do</B> are valid):
 <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>
 
@@ -711,29 +714,30 @@ The format for a pipeline is:
 <DL COMPACT><DT><DD>
 <P>
 
-[<B>time</B> [<B>-p</B>]] [ ! ] <I>command</I> [ [<B>|</B>|<B>|&amp;</B>] <I>command2</I> ... ]
+[<B>time</B> [<B>-p</B>]] [ ! ] <I>command1</I> [ [<B>|</B>|<B>|&amp;</B>] <I>command2</I> ... ]
 </DL>
 
 <P>
 
 The standard output of
-<I>command</I>
+<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
-command (see
+<I>command1</I>(see
+
 <FONT SIZE=-1><B>REDIRECTION</B>
 
 </FONT>
 below).
-If <B>|&amp;</B> is used, <I>command</I>'s standard error, in addition to its
+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 the command.
+performed after any redirections specified by <I>command1</I>.
 <P>
 
 The return status of a pipeline is the exit status of the last
@@ -785,14 +789,17 @@ variable may be used to specify the format of
 the time information.
 <P>
 
-Each command in a pipeline is executed as a separate process (i.e., in a
-subshell).
+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 a subshell environment.
+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.
+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>
 
@@ -899,9 +906,9 @@ the rest of the command by one or more newlines, and may be followed by a
 newline in place of a semicolon.
 <DL COMPACT>
 <DT>(<I>list</I>)<DD>
-<I>list</I> is executed in a subshell environment (see
+<I>list</I> is executed in a subshell (see
 <FONT SIZE=-1><B>COMMAND EXECUTION ENVIRONMENT</B></FONT>
-below).
+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
@@ -924,8 +931,12 @@ below under
 
 </FONT>
 If the value of the expression is non-zero, the return status is 0;
-otherwise the return status is 1.  This is exactly equivalent to
-<B>let &quot;</B><I>expression</I>&quot;.
+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>.
@@ -933,11 +944,12 @@ Expressions are composed of the primaries described below under
 <FONT SIZE=-1><B>CONDITIONAL EXPRESSIONS</B>.
 
 </FONT>
-Word splitting and pathname expansion are not performed on the words
-between the <B>[[</B> and <B>]]</B>; tilde expansion,
-parameter and variable expansion,
-arithmetic expansion, command substitution, process
-substitution, and quote removal are performed.
+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>
@@ -980,12 +992,14 @@ If the
 
 shell option is enabled, the match is performed without regard to the case
 of alphabetic characters.
-Any part of the pattern may be quoted to force the quoted portion
-to be matched as a string.
-Bracket expressions in regular expressions must be treated carefully,
-since normal quoting characters lose their meanings between brackets.
+If 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 as a string.
+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>
 
 
@@ -1014,6 +1028,12 @@ indices. The element of
 </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>
 
 
@@ -1092,24 +1112,28 @@ The return value is the exit status of the last command in <I>list</I>
 that is executed, or false if any of the expressions is invalid.
 <DT><B>select</B> <I>name</I> [ <B>in</B> <I>word</I> ] ; <B>do</B> <I>list</I> ; <B>done</B><DD>
 The list of words following <B>in</B> is expanded, generating a list
-of items.  The set of expanded words is printed on the standard
+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).  The
+below).
+<B>select</B>
+
+then displays the
 <FONT SIZE=-1><B>PS3</B>
 
 </FONT>
-prompt is then displayed and a line read from the standard input.
+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 command completes.  Any
-other value read causes
+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
@@ -1143,7 +1167,7 @@ expansion, parameter and variable expansion, arithmetic expansion,
 command substitution, process substitution and quote removal.
 Each <I>pattern</I> examined is expanded using tilde
 expansion, parameter and variable expansion, arithmetic expansion,
-command substitution, and process substitution.
+command substitution, process substitution, and quote removal.
 If the
 <B>nocasematch</B>
 
@@ -1203,7 +1227,7 @@ had been terminated with the <B>&amp;</B> control operator, with a two-way pipe
 established between the executing shell and the coprocess.
 <P>
 
-The format for a coprocess is:
+The syntax for a coprocess is:
 <DL COMPACT><DT><DD>
 <P>
 
@@ -1213,10 +1237,35 @@ The format for a coprocess is:
 <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>.
-<I>NAME</I> must not be supplied if <I>command</I> is a <I>simple
-command</I> (see above); otherwise, it is interpreted as the first word
-of the simple command.
+<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>
 
@@ -1241,6 +1290,8 @@ 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>
@@ -1269,9 +1320,9 @@ The <I>body</I> of the function is the compound command
 
 (see <B>Compound Commands</B> above).
 That command is usually a <I>list</I> of commands between { and }, but
-may be any command listed under <B>Compound Commands</B> above,
-with one exception: If the <B>function</B> reserved word is used, but the
-parentheses are not supplied, the braces are required.
+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>
@@ -1425,10 +1476,11 @@ quotes (see
 below).
 <P>
 
-Words of the form <B>$</B>aq<I>string</I>aq are treated specially.  The
-word expands to <I>string</I>, with backslash-escaped characters replaced
-as specified by the ANSI C standard.  Backslash escape sequences, if
-present, are decoded as follows:
+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>
@@ -1518,14 +1570,25 @@ not been present.
 
 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 message catalog lookup and
-translation, using the <B>LC_MESSAGES</B> and <B>TEXTDOMAIN</B> shell
-variables.
+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>,
-or if there are no translations available,
+if there are no translations available,
+or if the string is not translated,
 the dollar sign is ignored.
-If the string is translated and replaced, the replacement is
-double-quoted.
+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>
 
@@ -1605,11 +1668,7 @@ not used (see
 <B>Arithmetic Expansion</B>
 
 below).
-Word splitting is not performed, with the exception
-of <B>&quot;$@&quot;</B> as explained below under
-<B>Special Parameters</B>.
-
-Pathname expansion is not performed.
+Word splitting and pathname expansion are not performed.
 Assignment statements may also appear as arguments to the
 <B>alias</B>,
 
@@ -1635,7 +1694,7 @@ to a shell variable or array index, the += operator can be used to
 append to or add to the variable's previous value.
 This includes arguments to builtin commands such as <B>declare</B> that
 accept assignment statements (<I>declaration</I> commands).
-When += is applied to a variable for which the <I>integer</I> attribute has been
+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
@@ -1797,7 +1856,7 @@ option).
 <DT><B>$</B>
 
 <DD>
-Expands to the process ID of the shell.  In a () subshell, it
+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>
@@ -2445,6 +2504,18 @@ If
 </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>
@@ -2500,15 +2571,15 @@ builtin command when no arguments are supplied.
 
 <DD>
 Each time this parameter is
-referenced, the number of seconds since shell invocation is returned.  If a
-value is assigned to
+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 is always
+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>
@@ -2603,7 +2674,7 @@ 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>BSHELL</B>COMPATIBILITY<B>MODE</B>.
+<FONT SIZE=-1><B>SHELL COMPATIBILITY MODE</B>.
 
 </FONT>
 For example, 4.2 and 42 are valid values that correspond
@@ -3446,6 +3517,14 @@ interpreted as relative to one greater than the maximum index of
 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
@@ -3509,9 +3588,15 @@ destroys the array element at index <I>subscript</I>,
 for both indexed and associative arrays.
 Negative subscripts to indexed arrays are interpreted as described above.
 Unsetting the last element of an array variable does not unset the variable.
-<B>unset</B> <I>name</I>, where <I>name</I> is an array, or
+<B>unset</B> <I>name</I>, 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>, removes the entire array.
+<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,
@@ -3635,7 +3720,7 @@ For example, a<B>{</B>d,c,b<B>}</B>e expands into `ade ace abe'.
 
 A sequence expression takes the form
 <B>{</B><I>x</I><B>..</B><I>y</I><B>[..</B><I>incr</I><B>]}</B>,
-where <I>x</I> and <I>y</I> are either integers or single characters,
+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.
@@ -3644,10 +3729,11 @@ same width.
 When either <I>x</I> or y begins with a zero, the shell
 attempts to force all generated terms to contain the same number of digits,
 zero-padding where necessary.
-When characters are supplied, the expression expands to each character
+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.
+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>
@@ -3931,7 +4017,7 @@ is substituted.
 <B>Substring Expansion</B>.
 Expands to up to <I>length</I> characters of the value of <I>parameter</I>
 starting at the character specified by <I>offset</I>.
-If <I>parameter</I> is <B>@</B>, an indexed array subscripted by
+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
@@ -3954,8 +4040,8 @@ a number of characters, and the expansion is the characters between
 Note that a negative offset must be separated from the colon by at least
 one space to avoid being confused with the <B>:-</B> expansion.
 <P>
-If <I>parameter</I> is <B>@</B>, the result is <I>length</I> positional
-parameters beginning at <I>offset</I>.
+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.
@@ -4122,23 +4208,56 @@ or
 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,
+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.
-If <I>pattern</I> begins with <B>/</B>, all matches of <I>pattern</I> are
-replaced with <I>string</I>.  Normally only the first match is replaced.
-If <I>pattern</I> begins with <B>#</B>, it must match at the beginning
-of the expanded value of <I>parameter</I>.
-If <I>pattern</I> begins with <B>%</B>, it must match at the end
-of the expanded value of <I>parameter</I>.
-If <I>string</I> is null, matches of <I>pattern</I> are deleted
+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>
 
@@ -4242,7 +4361,7 @@ format that can be reused as input.
 
 <DD>
 The expansion is a string that is the value of <I>parameter</I> with backslash
-escape sequences expanded as with the <B>$'...'</B> quoting mechanism.
+escape sequences expanded as with the <B>$aq...aq</B> quoting mechanism.
 <DT><B>P</B>
 
 <DD>
@@ -4266,6 +4385,11 @@ indexed and associative arrays as a sequence of quoted key-value pairs
 <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>
@@ -4364,8 +4488,10 @@ and the substitution of the result.  The format for arithmetic expansion is:
 The
 <I>expression</I>
 
-is treated as if it were within double quotes, but a double quote
-inside the parentheses is not treated specially.
+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.
@@ -4575,17 +4701,30 @@ must be matched explicitly, unless the shell option
 <B>dotglob</B>
 
 is set.
-The filenames
+In order to match the filenames
 <B>``.''</B>
 
 and
-<B>``..''</B>
+<B>``..''</B>,
 
-must always be matched explicitly, even if
+the pattern must begin with ``.'' (for example, ``.?''),
+even if
 <B>dotglob</B>
 
 is set.
-In other cases, the
+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.
@@ -4608,6 +4747,8 @@ for a description of the
 
 <B>nullglob</B>,
 
+<B>globskipdots</B>,
+
 <B>failglob</B>,
 
 and
@@ -4729,7 +4870,9 @@ or a
 <B>^</B>
 
 then any character not enclosed is matched.
-The sorting order of characters in range expressions is determined by
+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>
 
@@ -4827,7 +4970,7 @@ the syntax <B>[.</B><I>symbol</I><B>.]</B> matches the collating symbol
 <P>
 
 If the <B>extglob</B> shell option is enabled using the <B>shopt</B>
-builtin, several extended pattern matching operators are recognized.
+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
@@ -4851,6 +4994,24 @@ Matches anything except one of the given patterns
 
 <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.
@@ -4875,7 +5036,7 @@ may be
 <I>redirected</I>
 
 using a special notation interpreted by the shell.
-Redirection allows commands' file handles to be
+<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.
@@ -4902,7 +5063,8 @@ by {<I>varname</I>}, the value of <I>varname</I> defines the file
 descriptor to close.
 If {<I>varname</I>} is supplied, the redirection persists beyond
 the scope of the command, allowing the shell programmer to manage
-the file descriptor himself.
+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
@@ -5448,7 +5610,7 @@ command.
 <P>
 
 There is no mechanism for using arguments in the replacement text.
-If arguments are needed, a shell function should be used (see
+If arguments are needed, use a shell function (see
 <FONT SIZE=-1><B>FUNCTIONS</B>
 
 </FONT>
@@ -5562,11 +5724,24 @@ been enabled.
 Variables local to the function may be declared with the
 <B>local</B>
 
-builtin command.  Ordinarily, variables and their values
+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
@@ -5600,11 +5775,13 @@ 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.
+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
@@ -5650,7 +5827,8 @@ or
 will list the function names only
 (and optionally the source file and line number, if the <B>extdebug</B>
 shell option is enabled).
-Functions may be exported so that subshells
+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>
 
@@ -6054,7 +6232,11 @@ and quote removal before being assigned to the variable.
 <P>
 
 If no command name results, the variable assignments affect the current
-shell environment.  Otherwise, the variables are added to the environment
+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.
@@ -6134,8 +6316,10 @@ 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 <I>shell script</I>, a file
-containing shell commands.  A subshell is spawned to execute
-it.  This subshell reinitializes itself, so
+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
@@ -6199,8 +6383,8 @@ of <B>$$</B>, and the value of
 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 following.
+Unless otherwise noted, the values are inherited from the shell.
 
 <DL COMPACT>
 <DT>*<DD>
@@ -6223,6 +6407,9 @@ 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,
@@ -6354,6 +6541,10 @@ 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
@@ -6475,6 +6666,79 @@ 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>
 
@@ -6832,7 +7096,8 @@ the release of <B>bash</B>, version + patch level (e.g., 2.00.0)
 <DT><B>\w</B>
 
 <DD>
-the current working directory, with
+the value of the <B>PWD</B> shell variable (<B>$PWD</B>),
+with
 <FONT SIZE=-1><B>$HOME</B>
 
 </FONT>
@@ -6845,7 +7110,8 @@ variable)
 <DT><B>\W</B>
 
 <DD>
-the basename of the current working directory, with
+the basename of <B>$PWD</B>,
+with
 <FONT SIZE=-1><B>$HOME</B>
 
 </FONT>
@@ -7316,6 +7582,32 @@ The variables and their default values are:
 
 
 <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>
@@ -7341,6 +7633,9 @@ 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>
@@ -7400,6 +7695,8 @@ 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>
@@ -7409,6 +7706,8 @@ 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>
@@ -7445,14 +7744,28 @@ 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 will configure the terminal in a way
-that will enable it to insert each paste into the editing buffer as a
-single string of characters, instead of treating each character as if
-it had been read from the keyboard.  This can prevent pasted characters
-from being interpreted as editing commands.
+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>
@@ -7506,6 +7819,8 @@ regardless of what the terminal claims it can support.  The name
 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>
@@ -7581,6 +7896,8 @@ 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>
@@ -7892,15 +8209,15 @@ Words are delimited by non-quoted shell metacharacters.
 <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
+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
+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>
 
@@ -7956,6 +8273,19 @@ Move to the first line in the history.
 <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>
@@ -8075,13 +8405,6 @@ Perform history and alias expansion on the current line.
 
 <DD>
 A synonym for <B>yank-last-arg</B>.
-<DT><B>operate-and-get-next (C-o)</B>
-
-<DD>
-Accept the current line for execution and fetch the next line
-relative to the current line from the history for editing.
-A numeric argument, if supplied, specifies the history entry to use instead
-of the current line.
 <DT><B>edit-and-execute-command (C-x C-e)</B>
 
 <DD>
@@ -8109,7 +8432,7 @@ 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
+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>.
 
@@ -8529,12 +8852,12 @@ the saved position, and the old cursor position is saved as the mark.
 
 <DD>
 A character is read and point is moved to the next occurrence of that
-character.  A negative count searches for previous occurrences.
+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 count searches for subsequent occurrences.
+character.  A negative argument searches for subsequent occurrences.
 <DT><B>skip-csi-sequence</B>
 
 <DD>
@@ -8563,6 +8886,12 @@ The default value of
 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>
@@ -9445,15 +9774,16 @@ does not contain a slash, filenames in
 
 </FONT>
 are used to find the directory containing
-<I>filename</I>.
+<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>, the current directory is
-searched if no file is found in
+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>
@@ -9471,12 +9801,12 @@ is not searched.
 If any <I>arguments</I> are supplied, they become the positional
 parameters when <I>filename</I> is executed.  Otherwise the positional
 parameters are unchanged.
-If the <B>-T</B> option is enabled, <B>source</B> inherits any trap on
+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>source</B>, and <B>source</B> unsets the
+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>source</B> completes.
+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>
@@ -9519,6 +9849,7 @@ or was started without job control.
 <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>
@@ -9530,7 +9861,10 @@ function or macro, or set a
 <B>readline</B>
 
 variable.
-Each non-option argument is a command as it would appear in
+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;
@@ -9624,6 +9958,12 @@ and
 </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>,
 
@@ -9702,7 +10042,6 @@ if <I>dir</I> is not supplied, the value of the
 
 </FONT>
 shell variable is the default.
-Any additional arguments following <I>dir</I> are ignored.
 The variable
 <FONT SIZE=-1><B>CDPATH</B>
 
@@ -9777,6 +10116,10 @@ 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>
@@ -9891,7 +10234,9 @@ If any of <B>-D</B>, <B>-E</B>, or <B>-I</B> are supplied, any other
 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>.
+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
@@ -10062,6 +10407,7 @@ Names of all shell variables.  May also be specified as <B>-v</B>.
 <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.
@@ -10230,6 +10576,7 @@ to give variables attributes:
 Each <I>name</I> is an indexed array variable (see
 <B>Arrays</B>
 
+
 above).
 <DT><B>-A</B>
 
@@ -10237,6 +10584,7 @@ above).
 Each <I>name</I> is an associative array variable (see
 <B>Arrays</B>
 
+
 above).
 <DT><B>-f</B>
 
@@ -10249,7 +10597,9 @@ 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.
+
+above)
+is performed when the variable is assigned a value.
 <DT><B>-l</B>
 
 <DD>
@@ -10324,7 +10674,9 @@ 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,
+
+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>.
@@ -10538,7 +10890,11 @@ option means to load the new builtin command
 from shared object
 <I>filename</I>,
 
-on systems that support dynamic loading.  The
+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
@@ -10555,6 +10911,11 @@ 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>
 
@@ -11080,8 +11441,9 @@ than the last history position, so negative indices count back from the
 end of the history, and an index of -1 refers to the current
 <B>history -d</B> command.
 <DT><B>-d</B> <I>start</I>-<I>end</I><DD>
-Delete the history entries between positions <I>start</I> and <I>end</I>,
-inclusive.  Positive and negative values for <I>start</I> and <I>end</I>
+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>
 
@@ -11140,7 +11502,7 @@ comment character followed immediately by a digit are interpreted
 as timestamps for the following history entry.
 The return value is 0 unless an invalid option is encountered, an
 error occurs while reading or writing the history file, an invalid
-<I>offset</I> is supplied as an argument to <B>-d</B>, or the
+<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>
 
@@ -11283,6 +11645,7 @@ is an arithmetic expression to be evaluated (see
 <FONT SIZE=-1><B>ARITHMETIC EVALUATION</B>
 
 </FONT>
+
 above).
 If the last
 <I>arg</I>
@@ -11433,11 +11796,12 @@ argument is supplied, <I>array</I> is invalid or unassignable, or if
 </DL>
 
 <DT><B>popd</B> [-<B>n</B>] [+<I>n</I>] [-<I>n</I>]<DD>
-Removes entries from the directory stack.  With no arguments,
-removes the top directory from the stack, and performs a
-<B>cd</B>
-
-to the new top directory.
+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>
 
@@ -11452,7 +11816,8 @@ Removes the <I>n</I>th entry counting from the left of the list
 shown by
 <B>dirs</B>,
 
-starting with zero.  For example:
+starting with zero, from the stack.
+For example:
 
 <TT>popd +0</TT>
 removes the first directory,
@@ -11475,18 +11840,28 @@ the next to last.
 </DL>
 <P>
 
-If the
+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>
 
-command is successful, a
-<B>dirs</B>
+returns false if an invalid option is encountered, the directory stack
+is empty, or a non-existent directory stack entry is specified.
+<P>
 
-is performed as well, and the return status is 0.
+If the
 <B>popd</B>
 
-returns false if an invalid option is encountered, the directory stack
-is empty, a non-existent directory stack entry is specified, or the
-directory change fails.
+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>
@@ -11517,6 +11892,11 @@ in the same way as <B>echo -e</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>
@@ -11557,8 +11937,9 @@ The return value is zero on success, non-zero on failure.
 
 Adds a directory to the top of the directory stack, or rotates
 the stack, making the new top of the stack the current working
-directory.  With no arguments, <B>pushd</B> exchanges the top two directories
-and returns 0, unless the directory stack is empty.
+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>
 
@@ -11587,33 +11968,36 @@ starting with zero) is at the top.
 Adds
 <I>dir</I>
 
-to the directory stack at the top, making it the
-new current working directory as if it had been supplied as the argument
-to the <B>cd</B> builtin.
+to the directory stack at the top
 
 </DL>
 <P>
 
-If the
-<B>pushd</B>
+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>
 
-command is successful, a
-<B>dirs</B>
+Otherwise, if no arguments are supplied,
+<B>pushd</B>
 
-is performed as well.
-If the first form is used,
+returns 0 unless the directory stack is empty.
+When rotating the directory stack,
 <B>pushd</B>
 
-returns 0 unless the cd to
-<I>dir</I>
+returns 0 unless the directory stack is empty or
+a non-existent directory stack element is specified.
+<P>
 
-fails.  With the second form,
+If the
 <B>pushd</B>
 
-returns 0 unless the directory stack is empty,
-a non-existent directory stack element is specified,
-or the directory change to the specified new current directory
-fails.
+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>
@@ -11638,7 +12022,10 @@ 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>,
+split into words as described
+
+above
+under <B>Word Splitting</B>,
 and the first word
 is assigned to the first
 <I>name</I>,
@@ -11658,7 +12045,10 @@ The characters in
 
 </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>).
+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:
@@ -11695,9 +12085,11 @@ is coming from a terminal,
 <FONT SIZE=-1><B>READLINE</B>
 
 </FONT>
-above) is used to obtain the line.
+
+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.
+active) editing settings, but uses readline's default filename completion.
 <DT><B>-i </B><I>text</I>
 
 <DD>
@@ -11756,8 +12148,10 @@ from regular files.
 If <B>read</B> times out, <B>read</B> saves any partial input read into
 the specified variable <I>name</I>.
 If <I>timeout</I> is 0, <B>read</B> returns immediately, without trying to
-read any data.  The exit status is 0 if input is available on
-the specified file descriptor, non-zero otherwise.
+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>
 
@@ -11871,11 +12265,11 @@ is used outside a
 function and not during execution of a script by <B>.</B> or <B>source</B>.
 Any command associated with the <B>RETURN</B> trap is executed
 before execution resumes after the function or script.
-<DT><B>set</B> [<B>--abefhkmnptuvxBCEHPT</B>] [<B>-o</B> <I>option-name</I>] [<I>arg</I> ...]<DD>
+<DT><B>set</B> [<B>-abefhkmnptuvxBCEHPT</B>] [<B>-o</B> <I>option-name</I>] [<B>--</B>] [<B>-</B>] [<I>arg</I> ...]<DD>
 
-<DT><B>set</B> [<B>+abefhkmnptuvxBCEHPT</B>] [<B>+o</B> <I>option-name</I>] [<I>arg</I> ...]<DD>
+<DT><B>set</B> [<B>+abefhkmnptuvxBCEHPT</B>] [<B>+o</B> <I>option-name</I>] [<B>--</B>] [<B>-</B>] [<I>arg</I> ...]<DD>
 
-Without options, the name and value of each shell variable are displayed
+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.
@@ -11919,7 +12313,9 @@ or a <I>compound command</I>
 <FONT SIZE=-1><B>SHELL GRAMMAR</B>
 
 </FONT>
-above), exits with a non-zero status.
+
+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>
@@ -11955,7 +12351,9 @@ separately (see
 <FONT SIZE=-1><B>COMMAND EXECUTION ENVIRONMENT</B>
 
 </FONT>
-above), and may cause
+
+above),
+and may cause
 subshells to exit before executing all the commands in the subshell.
 <P>
 
@@ -11993,6 +12391,7 @@ 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
@@ -12064,7 +12463,10 @@ Same as
 <DT><B>history</B>
 
 <DD>
-Enable command history, as described above under
+Enable command history, as described
+
+above
+under
 <FONT SIZE=-1><B>HISTORY</B>.
 
 </FONT>
@@ -12079,6 +12481,7 @@ had been executed
 (see
 <B>Shell Variables</B>
 
+
 above).
 <DT><B>keyword</B>
 
@@ -12157,7 +12560,9 @@ See
 <FONT SIZE=-1><B>SEE ALSO</B>
 
 </FONT>
-below for a reference to a document that details how posix mode affects
+
+below
+for a reference to a document that details how posix mode affects
 bash's behavior.
 <DT><B>privileged</B>
 
@@ -12238,6 +12643,11 @@ 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>
@@ -12246,7 +12656,9 @@ Exit after reading and executing one command.
 
 <DD>
 Treat unset variables and parameters other than the special
-parameters &quot;@&quot; and &quot;*&quot; as an error when performing
+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.
@@ -12271,7 +12683,9 @@ or associated word list.
 The shell performs brace expansion (see
 <B>Brace Expansion</B>
 
-above).  This is on by default.
+
+above).
+This is on by default.
 <DT><B>-C</B>
 
 <DD>
@@ -12522,8 +12936,9 @@ intervening command (see
 <FONT SIZE=-1><B>JOB CONTROL</B>
 
 </FONT>
-above).  The shell always
-postpones exiting if any jobs are stopped.
+
+above).
+The shell always postpones exiting if any jobs are stopped.
 <DT><B>checkwinsize</B>
 
 <DD>
@@ -12547,7 +12962,10 @@ 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
+history is enabled, as described
+
+above
+under
 <FONT SIZE=-1><B>HISTORY</B>.
 
 </FONT>
@@ -12572,6 +12990,9 @@ history is enabled, as described above under
 <DD>
 <DT><B>compat44</B>
 
+<DD>
+<DT><B>compat50</B>
+
 <DD>
 
 These control aspects of the shell's compatibility mode
@@ -12579,6 +13000,7 @@ These control aspects of the shell's compatibility mode
 <FONT SIZE=-1><B>SHELL COMPATIBILITY MODE</B>
 
 </FONT>
+
 below).
 <DT><B>complete_fullquote</B>
 
@@ -12655,7 +13077,10 @@ fails.
 <DT><B>expand_aliases</B>
 
 <DD>
-If set, aliases are expanded as described above under
+If set, aliases are expanded as described
+
+above
+under
 <FONT SIZE=-1><B>ALIASES</B>.
 
 </FONT>
@@ -12698,7 +13123,9 @@ and
 <FONT SIZE=-1><B>BASH_ARGV</B>
 
 </FONT>
-are updated as described in their descriptions above.
+are updated as described in their descriptions
+
+above).
 <DT><B>5.</B>
 
 <DD>
@@ -12716,7 +13143,10 @@ subshells invoked with <B>(</B> <I>command</I> <B>)</B> inherit the
 <DT><B>extglob</B>
 
 <DD>
-If set, the extended pattern matching features described above under
+If set, the extended pattern matching features described
+
+above
+under
 <B>Pathname Expansion</B> are enabled.
 <DT><B>extquote</B>
 
@@ -12741,7 +13171,9 @@ 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
+
+above
+for a description of
 <FONT SIZE=-1><B>FIGNORE</B>.
 
 </FONT>
@@ -12753,7 +13185,9 @@ 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
+
+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>
@@ -12765,6 +13199,19 @@ 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>
@@ -12817,6 +13264,7 @@ under
 <FONT SIZE=-1><B>READLINE</B>
 
 </FONT>
+
 above).
 This is enabled by default.
 <DT><B>huponexit</B>
@@ -12844,7 +13292,9 @@ line to be ignored in an interactive shell (see
 <FONT SIZE=-1><B>COMMENTS</B>
 
 </FONT>
-above).  This option is enabled by default.
+
+above).
+This option is enabled by default.
 <DT><B>lastpipe</B>
 
 <DD>
@@ -12878,6 +13328,7 @@ 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>
@@ -12911,6 +13362,7 @@ matches filenames in a case-insensitive fashion when performing pathname
 expansion (see
 <B>Pathname Expansion</B>
 
+
 above).
 <DT><B>nocasematch</B>
 
@@ -12922,6 +13374,15 @@ 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>
@@ -12932,13 +13393,27 @@ 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.
+<B>Programmable Completion</B>
+
+above)
+are enabled.
 This option is enabled by default.
 <DT><B>progcomp_alias</B>
 
@@ -12956,14 +13431,18 @@ expansion, and quote removal after being expanded as described in
 <FONT SIZE=-1><B>PROMPTING</B>
 
 </FONT>
-above.  This option is enabled by default.
+
+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
+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
@@ -12980,12 +13459,23 @@ number of positional parameters.
 
 <DD>
 If set, the
-<B>source</B> (<B>.</B>) builtin uses the value of
+<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>
@@ -12999,14 +13489,18 @@ Suspend the execution of this shell until it receives a
 <FONT SIZE=-1><B>SIGCONT</B>
 
 </FONT>
-signal.  A login shell cannot be suspended; the
+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 and
+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, or if job control is not enabled.
+is not supplied.
 <DT><B>test</B> <I>expr</I><DD>
 
 <DT><B>[</B> <I>expr</I> <B>]</B><DD>
@@ -13015,8 +13509,10 @@ 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
+Expressions are composed of the primaries described 
 
+above
+under
 <FONT SIZE=-1><B>CONDITIONAL EXPRESSIONS</B>.
 
 </FONT>
@@ -13078,7 +13574,9 @@ 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
+If the first argument is one of the unary conditional operators listed
+
+above
 under
 <FONT SIZE=-1><B>CONDITIONAL EXPRESSIONS</B>,
 
@@ -13088,7 +13586,9 @@ 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
+If the second argument is one of the binary conditional operators listed
+
+above
 under
 <FONT SIZE=-1><B>CONDITIONAL EXPRESSIONS</B>,
 
@@ -13104,8 +13604,13 @@ 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>
@@ -13213,6 +13718,7 @@ 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.
@@ -13696,7 +14202,7 @@ 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.
+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
@@ -13730,15 +14236,21 @@ its status, instead of returning when it changes status.
 If
 <I>id</I>
 
-specifies a non-existent process or job, the return status is
-127.  Otherwise, the return status is the exit status of the last
+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 `shell compatibility level', specified
-as a set of options to the shopt builtin
+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>,
@@ -13759,7 +14271,7 @@ 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 <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 above). 
+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
@@ -13896,7 +14408,7 @@ are not special within double-quoted word expansions
 <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
-(declare -a foo='(1 2)'). Later versions warn that this usage is
+(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
@@ -13963,6 +14475,17 @@ 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>
@@ -14074,7 +14597,7 @@ option to the
 builtin command
 <DT>*<DD>
 turning off restricted mode with
-<B>set +r</B> or <B>set +o restricted</B>.
+<B>set +r</B> or <B>shopt -u restricted_shell</B>.
 </DL>
 <P>
 
@@ -14143,6 +14666,12 @@ The individual per-interactive-shell startup file
 <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>
@@ -14174,7 +14703,8 @@ 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>.
+<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
@@ -14257,7 +14787,7 @@ There may be only one active coprocess at a time.
 <HR>
 <TABLE WIDTH=100%>
 <TR>
-<TH ALIGN=LEFT width=33%>GNU Bash 5.1<TH ALIGN=CENTER width=33%>2020 October 29<TH ALIGN=RIGHT width=33%>BASH(1)
+<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>
@@ -14363,7 +14893,7 @@ There may be only one active coprocess at a time.
 <DT><A HREF="#lbDI">BUGS</A><DD>
 </DL>
 <HR>
-This document was created by man2html from bash.1.<BR>
-Time: 18 November 2020 15:13:09 EST
+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>
index 2fd137a923e44fd3db85ff16acb44c6cf3ff8cbc..6d31de621bd32a5fe4dde77739a9d8913dbc1b05 100644 (file)
@@ -1,13 +1,12 @@
-This is bash.info, produced by makeinfo version 6.7 from
-bashref.texi.
+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.1, 29 October 2020).
+Bash shell (version 5.2, 19 September 2022).
 
-   This is Edition 5.1, last updated 29 October 2020, of 'The GNU Bash
-Reference Manual', for 'Bash', Version 5.1.
+   This is Edition 5.2, last updated 19 September 2022, of 'The GNU Bash
+Reference Manual', for 'Bash', Version 5.2.
 
-   Copyright (C) 1988-2020 Free Software Foundation, Inc.
+   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,
@@ -27,11 +26,11 @@ Bash Features
 *************
 
 This text is a brief description of the features that are present in the
-Bash shell (version 5.1, 29 October 2020).  The Bash home page is
+Bash shell (version 5.2, 19 September 2022).  The Bash home page is
 <http://www.gnu.org/software/bash/>.
 
-   This is Edition 5.1, last updated 29 October 2020, of 'The GNU Bash
-Reference Manual', for 'Bash', Version 5.1.
+   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
@@ -359,11 +358,11 @@ 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 '!',
+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
+   There are three quoting mechanisms: the "escape character", single
 quotes, and double quotes.
 
 \1f
@@ -419,10 +418,11 @@ File: bash.info,  Node: ANSI-C Quoting,  Next: Locale Translation,  Prev: Double
 3.1.2.4 ANSI-C Quoting
 ......................
 
-Words of the form '$'STRING'' are treated specially.  The word expands
-to STRING, with backslash-escaped characters replaced as specified by
-the ANSI C standard.  Backslash escape sequences, if present, are
-decoded as follows:
+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)
@@ -473,22 +473,114 @@ File: bash.info,  Node: Locale Translation,  Prev: ANSI-C Quoting,  Up: Quoting
 3.1.2.5 Locale-Specific Translation
 ...................................
 
-A double-quoted string preceded by a dollar sign ('$') will cause the
-string to be translated according to the current locale.  The GETTEXT
-infrastructure performs the message catalog lookup and translation,
-using the 'LC_MESSAGES' and 'TEXTDOMAIN' shell variables, as explained
-below.  See the gettext documentation for additional details.  If the
-current locale is 'C' or 'POSIX', or if there are no translations
-available, the dollar sign is ignored.  If the string is translated and
-replaced, the replacement is double-quoted.
+* Menu:
 
-   Some systems use the message catalog selected by the 'LC_MESSAGES'
-shell variable.  Others create the name of the message catalog from the
-value of the 'TEXTDOMAIN' shell variable, possibly adding a suffix of
-'.mo'.  If you use the 'TEXTDOMAIN' variable, you may need to set the
-'TEXTDOMAINDIR' variable to the location of the message catalog files.
-Still others use both variables in this fashion:
-'TEXTDOMAINDIR'/'LC_MESSAGES'/LC_MESSAGES/'TEXTDOMAIN'.mo.
+* 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.
+
+\1f
+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.
 
 \1f
 File: bash.info,  Node: Comments,  Prev: Quoting,  Up: Shell Syntax
@@ -582,13 +674,13 @@ the control operators '|' or '|&'.
 The output of each command in the pipeline is connected via a pipe to
 the input of the next command.  That is, each command reads the previous
 command's output.  This connection is performed before any redirections
-specified by the command.
+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 the command.
+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
@@ -612,11 +704,12 @@ information.
    If the pipeline is not executed asynchronously (*note Lists::), the
 shell waits for all commands in the pipeline to complete.
 
-   Each command in a pipeline is executed in its own subshell, which is
-a separate process (*note Command Execution Environment::).  If the
-'lastpipe' option is enabled using the 'shopt' builtin (*note The Shopt
-Builtin::), the last element of a pipeline may be run by the shell
-process.
+   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
@@ -645,8 +738,8 @@ 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
+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
@@ -814,7 +907,8 @@ File: bash.info,  Node: Conditional Constructs,  Next: Command Grouping,  Prev:
      substitution, arithmetic expansion, and quote removal (*note Shell
      Parameter Expansion::) before matching is attempted.  Each PATTERN
      undergoes tilde expansion, parameter expansion, command
-     substitution, and arithmetic expansion.
+     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
@@ -855,16 +949,16 @@ File: bash.info,  Node: Conditional Constructs,  Next: Command Grouping,  Prev:
           select NAME [in WORDS ...]; do COMMANDS; done
 
      The list of words following 'in' is expanded, generating a list of
-     items.  The set of expanded words is printed on the standard error
-     output stream, each preceded by a number.  If the 'in WORDS' is
-     omitted, the positional parameters are printed, as if 'in "$@"' had
-     been specified.  The 'PS3' prompt is then displayed and a line is
-     read from the standard input.  If the line consists of a number
-     corresponding to one of the displayed words, then the value of NAME
-     is set to that word.  If the line is empty, the words and prompt
-     are displayed again.  If 'EOF' is read, the 'select' command
-     completes.  Any other value read causes NAME to be set to null.
-     The line read is saved in the variable 'REPLY'.
+     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.
@@ -883,11 +977,11 @@ File: bash.info,  Node: Conditional Constructs,  Next: Command Grouping,  Prev:
           (( EXPRESSION ))
 
      The arithmetic EXPRESSION is evaluated according to the rules
-     described below (*note Shell Arithmetic::).  If the value of the
-     expression is non-zero, the return status is 0; otherwise the
-     return status is 1.  This is exactly equivalent to
-          let "EXPRESSION"
-     *Note Bash Builtins::, for a full description of the 'let' builtin.
+     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 ]]
@@ -895,12 +989,13 @@ File: bash.info,  Node: Conditional Constructs,  Next: Command Grouping,  Prev:
      Return a status of 0 or 1 depending on the evaluation of the
      conditional expression EXPRESSION.  Expressions are composed of the
      primaries described below in *note Bash Conditional Expressions::.
-     Word splitting and filename expansion are not performed on the
-     words between the '[[' and ']]'; tilde expansion, parameter and
-     variable expansion, arithmetic expansion, command substitution,
-     process substitution, and quote removal are performed.  Conditional
-     operators such as '-f' must be unquoted to be recognized as
-     primaries.
+     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.
@@ -913,67 +1008,92 @@ File: bash.info,  Node: Conditional Constructs,  Next: Command Grouping,  Prev:
      'shopt' in *note The Shopt Builtin::) is enabled, the match is
      performed without regard to the case of alphabetic characters.  The
      return value is 0 if the string matches ('==') or does not match
-     ('!=') the pattern, and 1 otherwise.  Any part of the pattern may
-     be quoted to force the quoted portion to be matched as a string.
+     ('!=') 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 it is used, the string to the
+     precedence as '==' and '!='.  When you use '=~', the string to the
      right of the operator is considered a POSIX extended regular
-     expression 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 otherwise.  If
-     the regular expression is syntactically incorrect, the conditional
-     expression's return value is 2.  If the 'nocasematch' shell option
-     (see the description of 'shopt' in *note The Shopt Builtin::) is
-     enabled, the match is performed without regard to the case of
-     alphabetic characters.  Any part of the pattern may be quoted to
-     force the quoted portion to be matched as a string.  Bracket
-     expressions in regular expressions must be treated carefully, since
-     normal quoting characters lose their meanings between brackets.  If
-     the pattern is stored in a shell variable, quoting the variable
-     expansion forces the entire pattern to be matched as a string.
-
-     The pattern will match if it matches any part of the string.
-     Anchor the pattern using the '^' and '$' regular expression
-     operators to force it to match the entire string.  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.
+     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, zero or one instances of 'a', then a
-     'b':
+     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 like 'aab' and ' aaaaaab' will match, as will a
-     line containing a 'b' anywhere in its value.
-
-     Storing the regular expression in a shell variable is often a
-     useful way to avoid problems with quoting characters that are
-     special to the shell.  It is sometimes difficult to specify a
-     regular expression literally without using quotes, or to keep track
-     of the quoting used by regular expressions while paying attention
-     to the shell's quote removal.  Using a shell variable to store the
-     pattern decreases these problems.  For example, the following is
-     equivalent to the above:
+     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 ]]
 
-     If you want to match a character that's special to the regular
-     expression grammar, it has to be quoted to remove its special
-     meaning.  This means that in the pattern 'xxx.txt', the '.' matches
-     any character in the string (its usual regular expression meaning),
-     but in the pattern '"xxx.txt"' it can only match a literal '.'.
      Shell programmers should take special care with backslashes, since
-     backslashes are used both by the shell and regular expressions to
-     remove the special meaning from the following character.  The
-     following two sets of commands are _not_ equivalent:
+     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 ]]
@@ -984,12 +1104,49 @@ File: bash.info,  Node: Conditional Constructs,  Next: Command Grouping,  Prev:
 
      The first two matches will succeed, but the second two will not,
      because in the second two the backslash will be part of the pattern
-     to be matched.  In the first two examples, the backslash removes
-     the special meaning from '.', so the literal '.' matches.  If the
+     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:
 
@@ -1024,9 +1181,9 @@ list may be redirected to a single stream.
 '()'
           ( LIST )
 
-     Placing a list of commands between parentheses causes a subshell
-     environment to be created (*note Command Execution Environment::),
-     and each of the commands in LIST to be executed in that subshell.
+     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.
 
@@ -1039,10 +1196,10 @@ list may be redirected to a single stream.
 
    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.
+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.
@@ -1058,29 +1215,51 @@ A coprocess is executed asynchronously in a subshell, as if the command
 had been terminated with the '&' control operator, with a two-way pipe
 established between the executing shell and the coprocess.
 
-   The format for a coprocess is:
+   The syntax for a coprocess is:
+
      coproc [NAME] COMMAND [REDIRECTIONS]
 
-This creates a coprocess named NAME.  If NAME is not supplied, the
-default name is COPROC.  NAME must not be supplied if COMMAND is a
-simple command (*note Simple Commands::); otherwise, it is interpreted
-as the first word of the simple command.
+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
+(*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'[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
+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
+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
@@ -1105,88 +1284,9 @@ line, different ways to specify the input source, and so on).  Parallel
 can replace 'xargs' or feed commands from its input sources to several
 different instances of Bash.
 
-   For a complete description, refer to the GNU Parallel documentation.
-A few examples should provide a brief introduction to its use.
-
-   For example, it is easy to replace 'xargs' to gzip all html files in
-the current directory and its subdirectories:
-     find . -type f -name '*.html' -print | parallel gzip
-If you need to protect special characters such as newlines in file
-names, use find's '-print0' option and parallel's '-0' option.
-
-   You can use Parallel to move files from the current directory when
-the number of files is too large to process with one 'mv' invocation:
-     printf '%s\n' * | parallel mv {} destdir
-
-   As you can see, the {} is replaced with each line read from standard
-input.  While using 'ls' will work in most instances, it is not
-sufficient to deal with all filenames.  'printf' is a shell builtin, and
-therefore is not subject to the kernel's limit on the number of
-arguments to a program, so you can use '*' (but see below about the
-'dotglob' shell option).  If you need to accommodate special characters
-in filenames, you can use
-
-     printf '%s\0' * | parallel -0 mv {} destdir
-
-as alluded to above.
-
-   This will run as many 'mv' commands as there are files in the current
-directory.  You can emulate a parallel 'xargs' by adding the '-X'
-option:
-     printf '%s\0' * | parallel -0 -X mv {} destdir
-
-   (You may have to modify the pattern if you have the 'dotglob' option
-enabled.)
-
-   GNU Parallel can replace certain common idioms that operate on lines
-read from a file (in this case, filenames listed one per line):
-       while IFS= read -r x; do
-               do-something1 "$x" "config-$x"
-               do-something2 < "$x"
-       done < file | process-output
-
-with a more compact syntax reminiscent of lambdas:
-     cat list | parallel "do-something1 {} config-{} ; do-something2 < {}" |
-                process-output
-
-   Parallel provides a built-in mechanism to remove filename extensions,
-which lends itself to batch file transformations or renaming:
-     ls *.gz | parallel -j+0 "zcat {} | bzip2 >{.}.bz2 && rm {}"
-This will recompress all files in the current directory with names
-ending in .gz using bzip2, running one job per CPU (-j+0) in parallel.
-(We use 'ls' for brevity here; using 'find' as above is more robust in
-the face of filenames containing unexpected characters.)  Parallel can
-take arguments from the command line; the above can also be written as
-
-     parallel "zcat {} | bzip2 >{.}.bz2 && rm {}" ::: *.gz
-
-   If a command generates output, you may want to preserve the input
-order in the output.  For instance, the following command
-     {
-         echo foss.org.my ;
-         echo debian.org ;
-         echo freenetproject.org ;
-     } | parallel traceroute
-will display as output the traceroute invocation that finishes first.
-Adding the '-k' option
-     {
-         echo foss.org.my ;
-         echo debian.org ;
-         echo freenetproject.org ;
-     } | parallel -k traceroute
-will ensure that the output of 'traceroute foss.org.my' is displayed
-first.
-
-   Finally, Parallel can be used to run a sequence of shell commands in
-parallel, similar to 'cat file | bash'.  It is not uncommon to take a
-list of filenames, create a series of shell commands to operate on them,
-and feed that list of commands to a shell.  Parallel can speed this up.
-Assuming that 'file' contains a list of shell commands, one per line,
-
-     parallel -j 10 < file
-
-will evaluate the commands using the shell (since no explicit command is
-supplied as an argument), in blocks of ten shell jobs at a time.
+   For a complete description, refer to the GNU Parallel documentation,
+which is available at
+<https://www.gnu.org/software/parallel/parallel_tutorial.html>.
 
 \1f
 File: bash.info,  Node: Shell Functions,  Next: Shell Parameters,  Prev: Shell Commands,  Up: Basic Shell Features
@@ -1210,15 +1310,15 @@ new process is created to interpret them.
 
    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, with one exception: If the 'function' reserved word is
-used, but the parentheses are not supplied, the braces are required.
+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 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
+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
@@ -1271,9 +1371,17 @@ status; otherwise the function's return status is the exit status of the
 last command executed before the 'return'.
 
    Variables local to the function may be declared with the 'local'
-builtin.  These variables are visible only to the function and the
-commands it invokes.  This is particularly important when a shell
-function calls other functions.
+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
@@ -1281,7 +1389,7 @@ 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
+   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
@@ -1290,10 +1398,10 @@ 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.
+   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
@@ -1318,17 +1426,19 @@ script displays
 variable is local to the current scope, 'unset' will unset it; otherwise
 the unset will refer to the variable found in any calling scope as
 described above.  If a variable at the current local scope is unset, it
-will remain so until it is reset in that scope or until the function
-returns.  Once the function returns, any instance of the variable at a
-previous scope will become visible.  If the unset acts on a variable at
-a previous scope, any instance of a variable with that name that had
-been shadowed will become visible.
+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 subshells
+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::).
 
@@ -1348,11 +1458,12 @@ File: bash.info,  Node: Shell Parameters,  Next: Shell Expansions,  Prev: Shell
 * 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 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
@@ -1362,24 +1473,23 @@ the 'unset' builtin command.
      NAME=[VALUE]
 If VALUE is not given, the variable is assigned the null string.  All
 VALUEs undergo tilde expansion, parameter and variable expansion,
-command substitution, arithmetic expansion, and quote removal (detailed
-below).  If the variable has its 'integer' attribute set, then VALUE is
-evaluated as an arithmetic expression even if the '$((...))' expansion
-is not used (*note Arithmetic Expansion::).  Word splitting is not
-performed, with the exception of '"$@"' as explained below.  Filename
-expansion is not performed.  Assignment statements may also appear as
-arguments to the 'alias', 'declare', 'typeset', 'export', 'readonly',
-and 'local' builtin commands (DECLARATION commands).  When in POSIX mode
-(*note Bash POSIX Mode::), these builtins may appear in a command after
-one or more instances of the 'command' builtin and retain these
-assignment statement properties.
+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
+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
@@ -1389,9 +1499,9 @@ 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'
+   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.
+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
@@ -1401,9 +1511,9 @@ 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
+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,
+to 'ref', and changes to its attributes, are treated as references,
 assignments, and attribute modifications to the variable whose name was
 passed as '$1'.
 
@@ -1423,7 +1533,7 @@ File: bash.info,  Node: Positional Parameters,  Next: Special Parameters,  Up: S
 3.4.1 Positional Parameters
 ---------------------------
 
-A POSITIONAL PARAMETER is a parameter denoted by one or more digits,
+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
@@ -1488,9 +1598,8 @@ only be referenced; assignment to them is not allowed.
      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 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
@@ -1544,13 +1653,13 @@ 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
+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).
+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
@@ -1568,7 +1677,7 @@ File: bash.info,  Node: Brace Expansion,  Next: Tilde Expansion,  Up: Shell Expa
 ---------------------
 
 Brace expansion is a mechanism by which arbitrary strings may be
-generated.  This mechanism is similar to FILENAME EXPANSION (*note
+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
@@ -1583,17 +1692,17 @@ are not sorted; left to right order is preserved.  For example,
      ade ace abe
 
    A sequence expression takes the form '{X..Y[..INCR]}', where X and Y
-are either integers or single characters, and INCR, an optional
-increment, is an integer.  When integers are supplied, the expression
-expands to each number between X and Y, inclusive.  Supplied integers
-may be prefixed with '0' to force each term to have the same width.
-When either X or Y begins with a zero, the shell attempts to force all
-generated terms to contain the same number of digits, zero-padding where
-necessary.  When characters are supplied, the expression expands to each
-character lexicographically between X and Y, inclusive, using the
-default C locale.  Note that both X and Y must be of the same type.
-When the increment is supplied, it is used as the difference between
-each term.  The default increment is 1 or -1 as appropriate.
+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
@@ -1623,9 +1732,9 @@ File: bash.info,  Node: Tilde Expansion,  Next: Shell Parameter Expansion,  Prev
 
 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
+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.
+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.
@@ -1681,7 +1790,7 @@ assigns the expanded value.
    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.
+declaration commands listed above, when in POSIX mode.
 
 \1f
 File: bash.info,  Node: Shell Parameter Expansion,  Next: Command Substitution,  Prev: Tilde Expansion,  Up: Shell Expansions
@@ -1708,7 +1817,7 @@ 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
+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.
@@ -1734,31 +1843,48 @@ omitted, the operator tests only for existence.
      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 '@', 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
+     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::).
 
@@ -1826,11 +1952,11 @@ omitted, the operator tests only for existence.
      $ echo ${array[0]: -7:-2}
      bcdef
 
-     If PARAMETER is '@', the result is LENGTH positional parameters
-     beginning at OFFSET.  A negative OFFSET is taken relative to one
-     greater than the greatest positional parameter, so an offset of -1
-     evaluates to the last positional parameter.  It is an expansion
-     error if LENGTH evaluates to a number less than zero.
+     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:
@@ -1940,26 +2066,92 @@ omitted, the operator tests only for existence.
      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.  The match is performed
-     according to the rules described below (*note Pattern Matching::).
-     If PATTERN begins with '/', all matches of PATTERN are replaced
-     with STRING.  Normally only the first match is replaced.  If
-     PATTERN begins with '#', it must match at the beginning of the
-     expanded value of PARAMETER.  If PATTERN begins with '%', it must
-     match at the end of the expanded value of PARAMETER.  If STRING is
-     null, matches of PATTERN are deleted and the '/' following PATTERN
-     may be omitted.  If the 'nocasematch' shell option (see the
-     description of 'shopt' in *note The Shopt Builtin::) is enabled,
-     the match is performed without regard to the case of alphabetic
-     characters.  If PARAMETER is '@' or '*', the substitution operation
-     is applied to each positional parameter in turn, and the expansion
-     is the resultant list.  If PARAMETER is an array variable
-     subscripted with '@' or '*', the substitution operation is applied
-     to each member of the array in turn, and the expansion is the
-     resultant list.
+     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}'
@@ -1970,18 +2162,22 @@ omitted, the operator tests only for existence.
      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.
+     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
@@ -2021,6 +2217,10 @@ omitted, the operator tests only for existence.
      '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
@@ -2075,12 +2275,12 @@ is:
 
      $(( EXPRESSION ))
 
-   The expression is treated as if it were within double quotes, but a
-double quote inside the parentheses is not treated specially.  All
-tokens in the expression undergo parameter and variable expansion,
-command substitution, and quote removal.  The result is treated as the
-arithmetic expression to be evaluated.  Arithmetic expansions may be
-nested.
+   The 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
@@ -2175,9 +2375,12 @@ characters.
 
    When a pattern is used for filename expansion, the character '.' at
 the start of a filename or immediately following a slash must be matched
-explicitly, unless the shell option 'dotglob' is set.  The filenames '.'
-and '..' must always be matched explicitly, even if 'dotglob' is set.
-In other cases, the '.' character is not treated specially.
+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
@@ -2185,8 +2388,8 @@ can be matched by a special pattern character as described below (*note
 Pattern Matching::).
 
    See the description of 'shopt' in *note The Shopt Builtin::, for a
-description of the 'nocaseglob', 'nullglob', 'failglob', and 'dotglob'
-options.
+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
@@ -2232,20 +2435,21 @@ characters must be quoted if they are to be matched literally.
      character not enclosed is matched.  A '-' may be matched by
      including it as the first or last character in the set.  A ']' may
      be matched by including it as the first character in the set.  The
-     sorting order of characters in range expressions is determined by
-     the current locale and the values of the 'LC_COLLATE' and 'LC_ALL'
-     shell variables, if set.
+     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 '[aBbCcDdxXyYz]', for
+     '[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
+     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
@@ -2254,8 +2458,8 @@ characters must be quoted if they are to be matched literally.
      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
+     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.
 
@@ -2263,10 +2467,12 @@ characters must be quoted if they are to be matched literally.
      symbol SYMBOL.
 
    If the 'extglob' shell option is enabled using the 'shopt' builtin,
-several extended pattern matching operators are recognized.  In the
-following description, a PATTERN-LIST is a list of one or more patterns
-separated by a '|'.  Composite patterns may be formed using one or more
-of the following sub-patterns:
+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.
@@ -2283,6 +2489,20 @@ of the following sub-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
@@ -2305,8 +2525,8 @@ File: bash.info,  Node: Redirections,  Next: Executing Commands,  Prev: Shell Ex
 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
+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
@@ -2322,7 +2542,8 @@ 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 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
@@ -2584,11 +2805,13 @@ following order.
      expansion, and quote removal before being assigned to the variable.
 
    If no command name results, the variable assignments affect the
-current shell environment.  Otherwise, the variables are added to the
-environment of the executed command and do not affect the current shell
-environment.  If any of the assignments attempts to assign a value to a
-readonly variable, an error occurs, and the command exits with a
-non-zero status.
+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
@@ -2642,8 +2865,8 @@ taken.
 
   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::.
+     "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.
@@ -2654,7 +2877,8 @@ File: bash.info,  Node: Command Execution Environment,  Next: Environment,  Prev
 3.7.3 Command Execution Environment
 -----------------------------------
 
-The shell has an EXECUTION ENVIRONMENT, which consists of the following:
+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
@@ -2705,6 +2929,8 @@ inherited from the shell.
    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
@@ -2729,12 +2955,12 @@ File: bash.info,  Node: Environment,  Next: Exit Status,  Prev: Command Executio
 -----------------
 
 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
+"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
+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
@@ -2765,11 +2991,11 @@ File: bash.info,  Node: Exit Status,  Next: Signals,  Prev: Environment,  Up: Ex
 -----------------
 
 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.
+'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
@@ -2795,6 +3021,9 @@ 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::).
+
 \1f
 File: bash.info,  Node: Signals,  Prev: Exit Status,  Up: Executing Commands
 
@@ -2835,6 +3064,33 @@ 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.
+
 \1f
 File: bash.info,  Node: Shell Scripts,  Prev: Executing Commands,  Up: Basic Shell Features
 
@@ -2857,8 +3113,8 @@ parameters are unset.
 
    A shell script may be made executable by using the 'chmod' command to
 turn on the execute bit.  When Bash finds such a file while searching
-the '$PATH' for a command, it spawns a subshell to execute it.  In other
-words, executing
+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
@@ -2962,19 +3218,20 @@ standard.
 
      Read and execute commands from the FILENAME argument in the current
      shell context.  If FILENAME does not contain a slash, the 'PATH'
-     variable is used to find FILENAME.  When Bash is not in POSIX mode,
-     the current directory is searched if FILENAME is not found in
-     '$PATH'.  If any ARGUMENTS are supplied, they become the positional
-     parameters when FILENAME is executed.  Otherwise the positional
-     parameters are unchanged.  If the '-T' option is enabled, 'source'
-     inherits any trap on 'DEBUG'; if it is not, any 'DEBUG' trap string
-     is saved and restored around the call to 'source', and 'source'
-     unsets the 'DEBUG' trap while it executes.  If '-T' is not set, and
-     the sourced file changes the 'DEBUG' trap, the new value is
-     retained when 'source' completes.  The return status is the exit
-     status of the last command executed, or zero if no commands are
-     executed.  If FILENAME is not found, or cannot be read, the return
-     status is non-zero.  This builtin is equivalent to 'source'.
+     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]
@@ -2988,10 +3245,9 @@ standard.
           cd [-L|[-P [-e]] [-@] [DIRECTORY]
 
      Change the current working directory to DIRECTORY.  If DIRECTORY is
-     not supplied, the value of the 'HOME' shell variable is used.  Any
-     additional arguments following DIRECTORY are ignored.  If the shell
-     variable 'CDPATH' exists, it is used as a search path: each
-     directory name in 'CDPATH' is searched for DIRECTORY, with
+     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.
 
@@ -3022,6 +3278,11 @@ standard.
      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.
 
@@ -3073,7 +3334,7 @@ standard.
      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
+     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
@@ -3277,10 +3538,16 @@ standard.
             4. Otherwise, the expression is false.
 
      4 arguments
-          If the first argument is '!', the result is the negation of
-          the three-argument expression composed of the remaining
-          arguments.  Otherwise, the expression is parsed and evaluated
-          according to precedence using the rules listed above.
+          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
@@ -3369,7 +3636,7 @@ standard.
      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
+     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
@@ -3377,7 +3644,8 @@ standard.
      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.
+     The return status is zero unless a NAME is readonly or may not be
+     unset.
 
 \1f
 File: bash.info,  Node: Bash Builtins,  Next: Modifying Shell Behavior,  Prev: Bourne Shell Builtins,  Up: Shell Builtin Commands
@@ -3406,6 +3674,7 @@ standard.
           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
@@ -3470,10 +3739,13 @@ standard.
           '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.  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.
+          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
@@ -3556,7 +3828,7 @@ standard.
      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
+     (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.
 
@@ -3583,7 +3855,7 @@ standard.
           attribute is disabled.
 
      '-n'
-          Give each NAME the NAMEREF attribute, making it a name
+          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
@@ -3626,7 +3898,7 @@ standard.
      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
+     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'.
@@ -3699,13 +3971,20 @@ standard.
 
      The '-f' option means to load the new builtin command NAME from
      shared object FILENAME, on systems that support dynamic loading.
-     The '-d' option will delete a builtin loaded with '-f'.
+     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.
 
@@ -3826,6 +4105,9 @@ standard.
      '%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
@@ -3934,8 +4216,9 @@ standard.
           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, non-zero otherwise.  The exit
-          status is greater than 128 if the timeout is exceeded.
+          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.
@@ -3991,7 +4274,7 @@ standard.
      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
+     The return status is zero if all of the NAMEs are found, non-zero
      if any are not found.
 
 'typeset'
@@ -4135,8 +4418,8 @@ 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 ...]
+          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
@@ -4317,14 +4600,19 @@ parameters, or to display the names and values of shell variables.
           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 '*' as an error when performing parameter
-          expansion.  An error message will be written to the standard
-          error, and a non-interactive shell will exit.
+          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.
@@ -4421,7 +4709,7 @@ This builtin allows you to change additional shell optional behavior.
      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
+     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:
@@ -4435,7 +4723,7 @@ This builtin allows you to change additional shell optional behavior.
      '-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 given with '-q', the return status is zero if all OPTNAMEs
           are enabled; non-zero otherwise.
 
      '-o'
@@ -4448,7 +4736,7 @@ This builtin allows you to change additional shell optional behavior.
      Unless otherwise noted, the 'shopt' options are disabled (off) by
      default.
 
-     The return status when listing options is zero if all OPTNAMES are
+     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.
@@ -4532,7 +4820,7 @@ This builtin allows you to change additional shell optional behavior.
      '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
+          the contents of the Readline editing buffer.  If not set, Bash
           attempts to preserve what the user typed.
 
      'dirspell'
@@ -4616,6 +4904,11 @@ This builtin allows you to change additional shell optional behavior.
           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
@@ -4675,7 +4968,7 @@ This builtin allows you to change additional shell optional behavior.
      '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
+          before any new value is assigned.  The 'nameref' attribute is
           not inherited.
 
      'localvar_unset'
@@ -4706,14 +4999,26 @@ This builtin allows you to change additional shell optional behavior.
      'nocasematch'
           If set, Bash matches patterns in a case-insensitive fashion
           when performing matching while executing 'case' or '[['
-          conditional commands, when performing pattern substitution
-          word expansions, or when filtering possible completions as
-          part of programmable completion.
+          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
@@ -4745,9 +5050,15 @@ This builtin allows you to change additional shell optional behavior.
           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.
+          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
@@ -4980,7 +5291,7 @@ Variables::).
 
 'BASH_LINENO'
      An array variable whose members are the line numbers in source
-     files where each corresponding member of FUNCNAME was invoked.
+     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
@@ -5017,10 +5328,10 @@ Variables::).
      to the array members are as follows:
 
      'BASH_VERSINFO[0]'
-          The major version number (the RELEASE).
+          The major version number (the "release").
 
      'BASH_VERSINFO[1]'
-          The minor version number (the VERSION).
+          The minor version number (the "version").
 
      'BASH_VERSINFO[2]'
           The patch level.
@@ -5029,7 +5340,7 @@ Variables::).
           The build version.
 
      'BASH_VERSINFO[4]'
-          The release status (e.g., BETA1).
+          The release status (e.g., 'beta1').
 
      'BASH_VERSINFO[5]'
           The value of 'MACHTYPE'.
@@ -5082,12 +5393,12 @@ Variables::).
 
 '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
+     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'
@@ -5133,7 +5444,7 @@ Variables::).
      Emacs shell buffer and disables line editing.
 
 'ENV'
-     Expanded and executed similarlty to 'BASH_ENV' (*note Bash Startup
+     Expanded and executed similarly to 'BASH_ENV' (*note Bash Startup
      Files::) when an interactive shell is invoked in POSIX Mode (*note
      Bash POSIX Mode::).
 
@@ -5141,16 +5452,16 @@ Variables::).
      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
+     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.
+     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
@@ -5217,7 +5528,7 @@ Variables::).
 '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
+     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
@@ -5295,7 +5606,7 @@ Variables::).
 
 '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
+     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
@@ -5449,7 +5760,7 @@ Variables::).
      with '#? '
 
 'PS4'
-     The value of this parameter is expanded like PS1 and the expanded
+     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
@@ -5465,15 +5776,19 @@ Variables::).
      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
+     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.
+     called the "region".
 
 'READLINE_POINT'
      The position of the insertion point in the Readline line buffer,
@@ -5487,7 +5802,7 @@ Variables::).
      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 is always determined by
+     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.
 
@@ -5843,14 +6158,15 @@ Invoked by remote shell daemon
 ..............................
 
 Bash attempts to determine when it is being run with its standard input
-connected to a network connection, as when executed by the remote shell
-daemon, usually 'rshd', or the secure shell daemon 'sshd'.  If Bash
-determines it is being run in this fashion, it reads and executes
-commands from '~/.bashrc', if that file exists and is readable.  It will
-not do this if invoked as 'sh'.  The '--norc' option may be used to
-inhibit this behavior, and the '--rcfile' option may be used to force
-another file to be read, but neither 'rshd' nor 'sshd' generally invoke
-the shell with those options or allow them to be specified.
+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
 ................................................
@@ -5874,7 +6190,7 @@ File: bash.info,  Node: Interactive Shells,  Next: Bash Conditional Expressions,
 
 * What is an Interactive Shell?::      What determines whether a shell is Interactive.
 * Is this Shell Interactive?:: How to tell if a shell is interactive.
-* Interactive Shell Behavior:: What changes in a interactive shell?
+* Interactive Shell Behavior:: What changes in an interactive shell?
 
 \1f
 File: bash.info,  Node: What is an Interactive Shell?,  Next: Is this Shell Interactive?,  Up: Interactive Shells
@@ -5882,8 +6198,8 @@ File: bash.info,  Node: What is an Interactive Shell?,  Next: Is this Shell Inte
 6.3.1 What is an Interactive Shell?
 -----------------------------------
 
-An interactive shell is one started without non-option argumentsunless
-'-s' is specified, without specifying the '-c' option, and whose input
+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.
 
@@ -5941,7 +6257,7 @@ several ways.
      string escape sequences.
 
   4. Bash executes the values of the set elements of the
-     'PROMPT_COMMANDS' array variable as commands before printing 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
@@ -5993,9 +6309,11 @@ several ways.
 
   19. Parser syntax errors will not cause the shell to exit.
 
-  20. Simple spelling correction for directory arguments to the 'cd'
-     builtin is enabled by default (see the description of the 'cdspell'
-     option to the 'shopt' builtin in *note The Shopt Builtin::).
+  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
@@ -6007,10 +6325,11 @@ File: bash.info,  Node: Bash Conditional Expressions,  Next: Shell Arithmetic,
 6.4 Bash Conditional Expressions
 ================================
 
-Conditional expressions are used by the '[[' compound command and the
-'test' and '[' builtin commands.  The 'test' and '[' commands determine
-their behavior based on the number of arguments; see the descriptions of
-those commands for any other command-specific actions.
+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
@@ -6228,8 +6547,8 @@ 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
+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
@@ -6254,7 +6573,7 @@ File: bash.info,  Node: Aliases,  Next: Arrays,  Prev: Shell Arithmetic,  Up: Ba
 6.6 Aliases
 ===========
 
-ALIASES allow a string to be substituted for a word when it is used as
+"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.
@@ -6269,15 +6588,15 @@ 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
+is a 'blank', then the next command word following the alias is also
 checked for alias expansion.
 
    Aliases are created and listed with the 'alias' command, and removed
 with the 'unalias' command.
 
    There is no mechanism for using arguments in the replacement text, as
-in 'csh'.  If arguments are needed, a shell function should be used
-(*note Shell Functions::).
+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
@@ -6363,6 +6682,10 @@ 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
@@ -6402,7 +6725,11 @@ NAME[SUBSCRIPT]' destroys the array element at index SUBSCRIPT.
 Negative subscripts to indexed arrays are interpreted as described
 above.  Unsetting the last element of an array variable does not unset
 the variable.  'unset NAME', where NAME is an array, removes the entire
-array.  A subscript of '*' or '@' also removes the entire array.
+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
@@ -6477,10 +6804,14 @@ File: bash.info,  Node: Directory Stack Builtins,  Up: The Directory Stack
 '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 performs a 'cd' to the new top directory.  The
-     elements are numbered from 0 starting at the first directory listed
-     with 'dirs'; that is, 'popd' is equivalent to 'popd +0'.
+     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
@@ -6488,17 +6819,32 @@ File: bash.info,  Node: Directory Stack Builtins,  Up: The Directory Stack
           manipulated.
      '+N'
           Removes the Nth directory (counting from the left of the list
-          printed by 'dirs'), starting with zero.
+          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.
+          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]
 
-     Save the current directory on the top of the directory stack and
-     then 'cd' to DIR.  With no arguments, 'pushd' exchanges the top two
-     directories and makes the new top the current directory.
+     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
@@ -6513,9 +6859,20 @@ File: bash.info,  Node: Directory Stack Builtins,  Up: The Directory Stack
           printed by 'dirs', starting with zero) to the top of the list
           by rotating the stack.
      'DIR'
-          Makes DIR be the top of the stack, making it the new current
-          directory as if it had been supplied as an argument to the
-          'cd' builtin.
+          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.
 
 \1f
 File: bash.info,  Node: Controlling the Prompt,  Next: The Restricted Shell,  Prev: The Directory Stack,  Up: Bash Features
@@ -6523,9 +6880,9 @@ File: bash.info,  Node: Controlling the Prompt,  Next: The Restricted Shell,  Pr
 6.9 Controlling the Prompt
 ==========================
 
-Bash examines the value of the array variable 'PROMPT_COMMANDS' just
+Bash examines the value of the array variable 'PROMPT_COMMAND' just
 before printing each primary prompt.  If any elements in
-'PROMPT_COMMANDS' are set and non-null, Bash executes each value, 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
@@ -6571,8 +6928,8 @@ which can appear in the prompt variables 'PS0', 'PS1', 'PS2', and 'PS4':
 '\V'
      The release of Bash, version + patchlevel (e.g., 2.00.0)
 '\w'
-     The current working directory, with '$HOME' abbreviated with a
-     tilde (uses the '$PROMPT_DIRTRIM' variable).
+     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.
 '\!'
@@ -6638,7 +6995,8 @@ with the exception that the following are disallowed or not performed:
    * Using the 'enable' builtin command to enable disabled shell
      builtins.
    * Specifying the '-p' option to the 'command' builtin.
-   * Turning off restricted mode with 'set +r' or 'set +o restricted'.
+   * Turning off restricted mode with 'set +r' or 'shopt -u
+     restricted_shell'.
 
    These restrictions are enforced after any startup files are read.
 
@@ -6649,11 +7007,11 @@ 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), leaving the user
-in a non-writable directory other than his home directory 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').
+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'.
@@ -6696,203 +7054,219 @@ startup files.
   7. Reserved words appearing in a context where reserved words are
      recognized do not undergo alias expansion.
 
-  8. The POSIX 'PS1' and 'PS2' expansions of '!' to the history number
+  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.
 
-  9. The POSIX startup files are executed ('$ENV') rather than the
+  10. The POSIX startup files are executed ('$ENV') rather than the
      normal Bash files.
 
-  10. Tilde expansion is only performed on assignments preceding a
+  11. Tilde expansion is only performed on assignments preceding a
      command name, rather than on all assignment statements on the line.
 
-  11. The default history file is '~/.sh_history' (this is the default
+  12. The default history file is '~/.sh_history' (this is the default
      value of '$HISTFILE').
 
-  12. Redirection operators do not perform filename expansion on the
+  13. Redirection operators do not perform filename expansion on the
      word in the redirection unless the shell is interactive.
 
-  13. Redirection operators do not perform word splitting on the word in
+  14. Redirection operators do not perform word splitting on the word in
      the redirection.
 
-  14. Function names must be valid shell 'name's.  That is, they may not
+  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.
 
-  15. Function names may not be the same as one of the POSIX special
+  16. Function names may not be the same as one of the POSIX special
      builtins.
 
-  16. POSIX special builtins are found before shell functions during
+  17. POSIX special builtins are found before shell functions during
      command lookup.
 
-  17. When printing shell function definitions (e.g., by 'type'), Bash
+  18. When printing shell function definitions (e.g., by 'type'), Bash
      does not print the 'function' keyword.
 
-  18. Literal tildes that appear as the first character in elements of
+  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::.
 
-  19. The 'time' reserved word may be used by itself as a command.  When
+  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.
 
-  20. When parsing and expanding a ${...} expansion that appears within
+  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.
 
-  21. The parser does not recognize 'time' as a reserved word if the
+  22. The parser does not recognize 'time' as a reserved word if the
      next token begins with a '-'.
 
-  22. The '!' character does not introduce history expansion within a
+  23. The '!' character does not introduce history expansion within a
      double-quoted string, even if the 'histexpand' option is enabled.
 
-  23. If a POSIX special builtin returns an error status, a
+  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.
 
-  24. A non-interactive shell exits with an error status if a variable
+  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.
 
-  25. A non-interactive shell exits with an error status if a 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.
+     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").
 
-  26. A non-interactive shell exits with an error status if the
+  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.
 
-  27. Non-interactive shells exit if FILENAME in '.'  FILENAME is not
+  28. Non-interactive shells exit if FILENAME in '.'  FILENAME is not
      found.
 
-  28. Non-interactive shells exit if a syntax error in an arithmetic
+  29. Non-interactive shells exit if a syntax error in an arithmetic
      expansion results in an invalid expression.
 
-  29. Non-interactive shells exit if a parameter expansion error occurs.
+  30. Non-interactive shells exit if a parameter expansion error occurs.
 
-  30. Non-interactive shells exit if there is a syntax error in a script
+  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.
 
-  31. While variable indirection is available, it may not be applied to
+  32. While variable indirection is available, it may not be applied to
      the '#' and '?' special parameters.
 
-  32. When expanding the '*' special parameter in a pattern context
-     where the expansion is double-quoted does not treat the '$*' as if
-     it were double-quoted.
+  33. Expanding the '*' special parameter in a pattern context where the
+     expansion is double-quoted does not treat the '$*' as if it were
+     double-quoted.
 
-  33. Assignment statements preceding POSIX special builtins persist in
+  34. Assignment statements preceding POSIX special builtins persist in
      the shell environment after the builtin completes.
 
-  34. The 'command' builtin does not prevent builtins that take
+  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'.
 
-  35. The 'bg' builtin uses the required format to describe each job
+  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.
 
-  36. The output of 'kill -l' prints all the signal names on a single
+  37. The output of 'kill -l' prints all the signal names on a single
      line, separated by spaces, without the 'SIG' prefix.
 
-  37. The 'kill' builtin does not accept signal names with a 'SIG'
+  38. The 'kill' builtin does not accept signal names with a 'SIG'
      prefix.
 
-  38. The 'export' and 'readonly' builtin commands display their output
+  39. The 'export' and 'readonly' builtin commands display their output
      in the format required by POSIX.
 
-  39. The 'trap' builtin displays signal names without the leading
+  40. The 'trap' builtin displays signal names without the leading
      'SIG'.
 
-  40. The 'trap' builtin doesn't check the first argument for a possible
+  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.
 
-  41. 'trap -p' displays signals whose dispositions are set to SIG_DFL
+  42. 'trap -p' displays signals whose dispositions are set to SIG_DFL
      and those that were ignored when the shell started.
 
-  42. The '.' and 'source' builtins do not search the current directory
+  43. The '.' and 'source' builtins do not search the current directory
      for the filename argument if it is not found by searching 'PATH'.
 
-  43. Enabling POSIX mode has the effect of setting the
+  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.
 
-  44. Enabling POSIX mode has the effect of setting the 'shift_verbose'
+  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.
 
-  45. When the 'alias' builtin displays alias definitions, it does not
+  46. When the 'alias' builtin displays alias definitions, it does not
      display them with a leading 'alias ' unless the '-p' option is
      supplied.
 
-  46. When the 'set' builtin is invoked without options, it does not
+  47. When the 'set' builtin is invoked without options, it does not
      display shell function names and definitions.
 
-  47. When the 'set' builtin is invoked without options, it displays
+  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.
 
-  48. When the 'cd' builtin is invoked in LOGICAL mode, and the pathname
+  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.
+     instead of falling back to physical mode.
 
-  49. When the 'cd' builtin cannot change a directory because the length
+  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
+     supplied as an argument exceeds 'PATH_MAX' when all symbolic links
      are expanded, 'cd' will fail instead of attempting to use only the
      supplied directory name.
 
-  50. The 'pwd' builtin verifies that the value it prints is the same as
+  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.
 
-  51. When listing the history, the 'fc' builtin does not include an
+  52. When listing the history, the 'fc' builtin does not include an
      indication of whether or not a history entry has been modified.
 
-  52. The default editor used by 'fc' is 'ed'.
+  53. The default editor used by 'fc' is 'ed'.
 
-  53. The 'type' and 'command' builtins will not report a non-executable
+  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'.
 
-  54. The 'vi' editing mode will invoke the 'vi' editor directly when
+  55. The 'vi' editing mode will invoke the 'vi' editor directly when
      the 'v' command is run, instead of checking '$VISUAL' and
      '$EDITOR'.
 
-  55. When the 'xpg_echo' option is enabled, Bash does not attempt to
+  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.
 
-  56. The 'ulimit' builtin uses a block size of 512 bytes for the '-c'
+  57. The 'ulimit' builtin uses a block size of 512 bytes for the '-c'
      and '-f' options.
 
-  57. The arrival of 'SIGCHLD' when a trap is set on 'SIGCHLD' does not
+  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.
 
-  58. The 'read' builtin may be interrupted by a signal for which a trap
+  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.
 
-  59. Bash removes an exited background process's status from the list
+  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
@@ -6915,7 +7289,7 @@ File: bash.info,  Node: Shell Compatibility Mode,  Prev: Bash POSIX Mode,  Up: B
 6.12 Shell Compatibility Mode
 =============================
 
-Bash-4.0 introduced the concept of a 'shell compatibility level',
+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
@@ -6927,7 +7301,7 @@ 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 above).
+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
@@ -7004,8 +7378,8 @@ required for bash-5.1 and later versions.
 '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 (declare -a foo='(1 2)').  Later versions warn that
-          this usage is deprecated
+          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
@@ -7040,6 +7414,38 @@ required for bash-5.1 and later versions.
           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.
+
 \1f
 File: bash.info,  Node: Job Control,  Next: Command Line Editing,  Prev: Bash Features,  Up: Top
 
@@ -7093,19 +7499,19 @@ when 'stty tostop' is in effect) the terminal are sent a 'SIGTTIN'
 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
+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.
+"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).
+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
@@ -7234,7 +7640,7 @@ File: bash.info,  Node: Job Control Builtins,  Next: Job Control Variables,  Pre
      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
+     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,
@@ -7245,9 +7651,12 @@ File: bash.info,  Node: Job Control Builtins,  Next: Job Control Variables,  Pre
      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, intead of returning when it changes status.
+     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.
+     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 ... ]
@@ -7265,8 +7674,11 @@ File: bash.info,  Node: Job Control Builtins,  Next: Job Control Variables,  Pre
           suspend [-f]
 
      Suspend the execution of this shell until it receives a 'SIGCONT'
-     signal.  A login shell cannot be suspended; the '-f' option can be
-     used to override this and force the suspension.
+     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.
@@ -7427,9 +7839,9 @@ Printing characters
      Undo the last editing command.  You can undo all the way back to an
      empty line.
 
-(Depending on your configuration, the <Backspace> key be set to delete
-the character to the left of the cursor and the <DEL> key set to delete
-the character underneath the cursor, like 'C-d', rather than the
+(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.)
 
 \1f
@@ -7491,9 +7903,9 @@ available to be yanked back later, when you are typing another line.
      as those used by 'M-f'.
 
 'M-<DEL>'
-     Kill from the cursor the start of the current word, or, if between
-     words, to the start of the previous word.  Word boundaries are the
-     same as those used by 'M-b'.
+     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
@@ -7582,7 +7994,7 @@ File: bash.info,  Node: Readline Init File,  Next: Bindable Readline Commands,
 Although the Readline library comes with a set of Emacs-like keybindings
 installed by default, it is possible to use a different set of
 keybindings.  Any user can customize programs that use Readline by
-putting commands in an "inputrc" file, conventionally in his home
+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
@@ -7641,6 +8053,32 @@ Variable Settings
      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
@@ -7662,7 +8100,10 @@ Variable Settings
           If set to 'on', when listing completions, Readline displays
           the common prefix of the set of possible completions using a
           different color.  The color definitions are taken from the
-          value of the 'LS_COLORS' environment variable.  The default is
+          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'
@@ -7708,8 +8149,9 @@ Variable Settings
           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 0.  A negative value means Readline should
-          never ask.  The default limit is '100'.
+          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
@@ -7717,7 +8159,9 @@ Variable Settings
           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.
+          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.
@@ -7726,7 +8170,7 @@ Variable Settings
 
      'echo-control-characters'
           When set to 'on', on operating systems that indicate they
-          support it, readline echoes a character corresponding to a
+          support it, Readline echoes a character corresponding to a
           signal generated from the keyboard.  The default is 'on'.
 
      'editing-mode'
@@ -7745,13 +8189,27 @@ Variable Settings
           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 will configure the terminal in a
-          way that will enable it to insert each paste into the editing
-          buffer as a single string of characters, instead of treating
-          each character as if it had been read from the keyboard.  This
-          can prevent pasted characters from being interpreted as
-          editing commands.  The default is 'On'.
+          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
@@ -7798,7 +8256,9 @@ Variable Settings
           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.
+          '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
@@ -7863,7 +8323,9 @@ Variable Settings
           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.
+          '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
@@ -7879,7 +8341,8 @@ Variable Settings
           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'.
+          undo lists across calls to 'readline()'.  The default is
+          'off'.
 
      'show-all-if-ambiguous'
           This alters the default behavior of the completion functions.
@@ -7906,7 +8369,7 @@ Variable Settings
           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
+          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
@@ -7956,11 +8419,11 @@ Key Bindings
      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
+     In addition to command names, Readline allows keys to be bound to a
      string that is inserted when the key is pressed (a MACRO).
 
      The 'bind -p' command displays Readline function names and bindings
-     in a format that can put directly into an initialization file.
+     in a format that can be put directly into an initialization file.
      *Note Bash Builtins::.
 
      KEYNAME: FUNCTION-NAME or MACRO
@@ -8438,6 +8901,11 @@ File: bash.info,  Node: Commands For History,  Next: Commands For Text,  Prev: C
      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.
+
 \1f
 File: bash.info,  Node: Commands For Text,  Next: Commands For Killing,  Prev: Commands For History,  Up: Bindable Readline Commands
 
@@ -8754,7 +9222,7 @@ File: bash.info,  Node: Keyboard Macros,  Next: Miscellaneous Commands,  Prev: C
      characters in the macro appear as if typed at the keyboard.
 
 'print-last-kbd-macro ()'
-     Print the last keboard macro defined in a format suitable for the
+     Print the last keyboard macro defined in a format suitable for the
      INPUTRC file.
 
 \1f
@@ -8801,12 +9269,12 @@ File: bash.info,  Node: Miscellaneous Commands,  Prev: Keyboard Macros,  Up: Bin
 
 'character-search (C-])'
      A character is read and point is moved to the next occurrence of
-     that character.  A negative count searches for previous
+     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 count searches for subsequent
+     of that character.  A negative argument searches for subsequent
      occurrences.
 
 'skip-csi-sequence ()'
@@ -8814,7 +9282,7 @@ File: bash.info,  Node: Miscellaneous Commands,  Prev: Keyboard Macros,  Up: Bin
      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
+     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-[.
 
@@ -8849,6 +9317,12 @@ File: bash.info,  Node: Miscellaneous Commands,  Prev: Keyboard Macros,  Up: Bin
      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
@@ -9249,7 +9723,8 @@ happening.
 
      '-C COMMAND'
           COMMAND is executed in a subshell environment, and its output
-          is used as the possible completions.
+          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
@@ -9411,7 +9886,7 @@ CDPATH: Readline can't tell those completions are directories).  The '-o
 nospace' option tells Readline to not append a space character to the
 directory name, in case we want to append to it.  The '-o bashdefault'
 option brings in the rest of the "Bash default" completions - possible
-completion that Bash adds to the default Readline set.  These include
+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.
@@ -9578,9 +10053,9 @@ history file.
           -d' command.
 
      '-d START-END'
-          Delete the history entries between positions START and END,
-          inclusive.  Positive and negative values for START and END are
-          interpreted as described above.
+          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
@@ -9609,9 +10084,14 @@ history file.
           The ARGs are added to the end of the history list as a single
           entry.
 
-     When any of the '-w', '-r', '-a', or '-n' options is used, if
-     FILENAME is given, then it is used as the history file.  If not,
-     then the value of the 'HISTFILE' variable is used.
+     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.
 
 \1f
 File: bash.info,  Node: History Interaction,  Prev: Bash History Builtins,  Up: Using History Interactively
@@ -9828,7 +10308,7 @@ or edit, the word or words selected from the history event.
      '&' 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 is null, each
+     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.
 
@@ -9897,20 +10377,28 @@ These are installation instructions for Bash.
   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.
+     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', 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.
+(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
@@ -9941,7 +10429,7 @@ considered for the next release.
    The file 'configure.ac' is used to create 'configure' by a program
 called Autoconf.  You only need 'configure.ac' if you want to change it
 or regenerate 'configure' using a newer version of Autoconf.  If you do
-this, make sure you are using Autoconf version 2.50 or newer.
+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
@@ -9984,7 +10472,7 @@ need to supply the '--srcdir=PATH' argument to tell 'configure' where
 the source files are.  'configure' automatically checks for the source
 code in the directory that 'configure' is in and in '..'.
 
-   If you have to use a 'make' that does not supports the 'VPATH'
+   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
@@ -10009,10 +10497,13 @@ File: bash.info,  Node: Installation Names,  Next: Specifying the System Type,
 =======================
 
 By default, 'make install' will install into '/usr/local/bin',
-'/usr/local/man', etc.  You can specify an installation prefix other
-than '/usr/local' by giving 'configure' the option '--prefix=PATH', or
-by specifying a value for the 'DESTDIR' 'make' variable when running
-'make install'.
+'/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
@@ -10020,6 +10511,30 @@ 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.
+
 \1f
 File: bash.info,  Node: Specifying the System Type,  Next: Sharing Defaults,  Prev: Installation Names,  Up: Installing Bash
 
@@ -10027,7 +10542,7 @@ File: bash.info,  Node: Specifying the System Type,  Next: Sharing Defaults,  Pr
 ===============================
 
 There may be some features 'configure' can not figure out automatically,
-but need to determine by the type of host Bash will run on.  Usually
+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
@@ -10135,16 +10650,20 @@ the Bash 'configure' recognizes.
      subdirectories of that directory (include files in PREFIX/'include'
      and the library in PREFIX/'lib').
 
-'--with-purify'
-     Define this to use the Purify memory allocation checker from
-     Rational Software.
+'--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
-and linked, rather than changing run-time features.
+   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
@@ -10157,6 +10676,10 @@ and linked, rather than changing run-time features.
      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.
@@ -10165,14 +10688,21 @@ and linked, rather than changing run-time features.
 following options, but it is processed first, so individual options may
 be enabled using 'enable-FEATURE'.
 
-   All of the following options except for 'disabled-builtins',
-'direxpand-default', and 'xpg-echo-default' are enabled by default,
-unless the operating system does not provide the necessary support.
+   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
@@ -10192,7 +10722,7 @@ unless the operating system does not provide the necessary support.
 
 '--enable-casemod-attributes'
      Include support for case-modifying attributes in the 'declare'
-     builtin and assignment statements.  Variables with the UPPERCASE
+     builtin and assignment statements.  Variables with the 'uppercase'
      attribute, for example, will have their values converted to
      uppercase upon assignment.
 
@@ -10251,7 +10781,7 @@ unless the operating system does not provide the necessary support.
      described above under *note Pattern Matching::.
 
 '--enable-extended-glob-default'
-     Set the default value of the EXTGLOB shell option described above
+     Set the default value of the 'extglob' shell option described above
      under *note The Shopt Builtin:: to be enabled.
 
 '--enable-function-import'
@@ -10260,10 +10790,10 @@ unless the operating system does not provide the necessary support.
      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.
+     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
@@ -10314,10 +10844,6 @@ unless the operating system does not provide the necessary support.
      Include the 'select' compound command, which allows the generation
      of simple menus (*note Conditional Constructs::).
 
-'--enable-separate-helpfiles'
-     Use external files for the documentation displayed by the 'help'
-     builtin instead of storing the text internally.
-
 '--enable-single-help-strings'
      Store the text displayed by the 'help' builtin as a single string
      for each help topic.  This aids in translating the text to
@@ -10327,6 +10853,10 @@ unless the operating system does not provide the necessary support.
 '--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'.
 
@@ -10353,7 +10883,8 @@ 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/>.
+<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
@@ -10479,15 +11010,15 @@ the baseline reference.
      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
+   * 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
+   * Bash has indirect variable expansion using '${!word}' (*note Shell
      Parameter Expansion::).
 
    * Bash can expand positional parameters beyond '$9' using '${NUM}'.
@@ -10513,8 +11044,8 @@ the baseline reference.
      shell uses only '!'.
 
    * Bash implements the full set of POSIX filename expansion operators,
-     including CHARACTER CLASSES, EQUIVALENCE CLASSES, and COLLATING
-     SYMBOLS (*note Filename Expansion::).
+     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::).
@@ -10631,7 +11162,7 @@ the baseline reference.
 
    * 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
+     with the '.' or 'source' builtins).  This supports the Bash
      debugger.
 
    * The 'trap' builtin (*note Bourne Shell Builtins::) allows a 'DEBUG'
@@ -10653,7 +11184,7 @@ the baseline reference.
 
      The 'trap' builtin (*note Bourne Shell Builtins::) allows a
      'RETURN' pseudo-signal specification, similar to 'EXIT' and
-     'DEBUG'.  Commands specified with an 'RETURN' trap are executed
+     '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
@@ -11252,94 +11783,94 @@ D.1 Index of Shell Builtin Commands
 * ::                                     Bourne Shell Builtins.
                                                               (line  11)
 * [:                                     Bourne Shell Builtins.
-                                                              (line 270)
+                                                              (line 275)
 * alias:                                 Bash Builtins.       (line  11)
 * bg:                                    Job Control Builtins.
                                                               (line   7)
 * bind:                                  Bash Builtins.       (line  21)
 * break:                                 Bourne Shell Builtins.
-                                                              (line  36)
-* builtin:                               Bash Builtins.       (line 104)
-* caller:                                Bash Builtins.       (line 113)
+                                                              (line  37)
+* builtin:                               Bash Builtins.       (line 108)
+* caller:                                Bash Builtins.       (line 117)
 * cd:                                    Bourne Shell Builtins.
-                                                              (line  44)
-* command:                               Bash Builtins.       (line 130)
+                                                              (line  45)
+* command:                               Bash Builtins.       (line 134)
 * compgen:                               Programmable Completion Builtins.
                                                               (line  12)
 * complete:                              Programmable Completion Builtins.
                                                               (line  30)
 * compopt:                               Programmable Completion Builtins.
-                                                              (line 237)
+                                                              (line 238)
 * continue:                              Bourne Shell Builtins.
-                                                              (line  85)
-* declare:                               Bash Builtins.       (line 150)
+                                                              (line  90)
+* declare:                               Bash Builtins.       (line 154)
 * dirs:                                  Directory Stack Builtins.
                                                               (line   7)
 * disown:                                Job Control Builtins.
-                                                              (line 101)
-* echo:                                  Bash Builtins.       (line 253)
-* enable:                                Bash Builtins.       (line 302)
+                                                              (line 104)
+* echo:                                  Bash Builtins.       (line 257)
+* enable:                                Bash Builtins.       (line 306)
 * eval:                                  Bourne Shell Builtins.
-                                                              (line  94)
+                                                              (line  99)
 * exec:                                  Bourne Shell Builtins.
-                                                              (line 102)
+                                                              (line 107)
 * exit:                                  Bourne Shell Builtins.
-                                                              (line 120)
+                                                              (line 125)
 * export:                                Bourne Shell Builtins.
-                                                              (line 127)
+                                                              (line 132)
 * fc:                                    Bash History Builtins.
                                                               (line  10)
 * fg:                                    Job Control Builtins.
                                                               (line  17)
 * getopts:                               Bourne Shell Builtins.
-                                                              (line 143)
+                                                              (line 148)
 * hash:                                  Bourne Shell Builtins.
-                                                              (line 187)
-* help:                                  Bash Builtins.       (line 331)
+                                                              (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 350)
-* local:                                 Bash Builtins.       (line 358)
-* logout:                                Bash Builtins.       (line 374)
-* mapfile:                               Bash Builtins.       (line 379)
+* 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 425)
+* printf:                                Bash Builtins.       (line 436)
 * pushd:                                 Directory Stack Builtins.
-                                                              (line  53)
+                                                              (line  69)
 * pwd:                                   Bourne Shell Builtins.
-                                                              (line 207)
-* read:                                  Bash Builtins.       (line 474)
-* readarray:                             Bash Builtins.       (line 570)
+                                                              (line 212)
+* read:                                  Bash Builtins.       (line 488)
+* readarray:                             Bash Builtins.       (line 585)
 * readonly:                              Bourne Shell Builtins.
-                                                              (line 217)
+                                                              (line 222)
 * return:                                Bourne Shell Builtins.
-                                                              (line 236)
+                                                              (line 241)
 * set:                                   The Set Builtin.     (line  11)
 * shift:                                 Bourne Shell Builtins.
-                                                              (line 257)
+                                                              (line 262)
 * shopt:                                 The Shopt Builtin.   (line   9)
-* source:                                Bash Builtins.       (line 579)
+* source:                                Bash Builtins.       (line 594)
 * suspend:                               Job Control Builtins.
-                                                              (line 113)
+                                                              (line 116)
 * test:                                  Bourne Shell Builtins.
-                                                              (line 270)
+                                                              (line 275)
 * times:                                 Bourne Shell Builtins.
-                                                              (line 349)
+                                                              (line 360)
 * trap:                                  Bourne Shell Builtins.
-                                                              (line 355)
-* type:                                  Bash Builtins.       (line 584)
-* typeset:                               Bash Builtins.       (line 616)
-* ulimit:                                Bash Builtins.       (line 622)
+                                                              (line 366)
+* type:                                  Bash Builtins.       (line 599)
+* typeset:                               Bash Builtins.       (line 631)
+* ulimit:                                Bash Builtins.       (line 637)
 * umask:                                 Bourne Shell Builtins.
-                                                              (line 404)
-* unalias:                               Bash Builtins.       (line 728)
+                                                              (line 415)
+* unalias:                               Bash Builtins.       (line 743)
 * unset:                                 Bourne Shell Builtins.
-                                                              (line 422)
+                                                              (line 433)
 * wait:                                  Job Control Builtins.
                                                               (line  76)
 
@@ -11354,9 +11885,9 @@ D.2 Index of Shell Reserved Words
 
 * !:                                     Pipelines.           (line   9)
 * [[:                                    Conditional Constructs.
-                                                              (line 125)
+                                                              (line 126)
 * ]]:                                    Conditional Constructs.
-                                                              (line 125)
+                                                              (line 126)
 * {:                                     Command Grouping.    (line  21)
 * }:                                     Command Grouping.    (line  21)
 * case:                                  Conditional Constructs.
@@ -11378,7 +11909,7 @@ D.2 Index of Shell Reserved Words
 * in:                                    Conditional Constructs.
                                                               (line  28)
 * select:                                Conditional Constructs.
-                                                              (line  83)
+                                                              (line  84)
 * then:                                  Conditional Constructs.
                                                               (line   7)
 * time:                                  Pipelines.           (line   9)
@@ -11394,24 +11925,28 @@ D.3 Parameter and Variable Index
 \0\b[index\0\b]
 * Menu:
 
-* !:                                     Special Parameters.  (line  56)
+* !:                                     Special Parameters.  (line  55)
 * #:                                     Special Parameters.  (line  39)
 * $:                                     Special Parameters.  (line  51)
-* $!:                                    Special Parameters.  (line  57)
+* $!:                                    Special Parameters.  (line  56)
 * $#:                                    Special Parameters.  (line  40)
 * $$:                                    Special Parameters.  (line  52)
 * $*:                                    Special Parameters.  (line  10)
 * $-:                                    Special Parameters.  (line  47)
-* $0:                                    Special Parameters.  (line  62)
+* $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  61)
+* 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)
@@ -11435,31 +11970,31 @@ D.3 Parameter and Variable Index
 * BASH_VERSION:                          Bash Variables.      (line 181)
 * BASH_XTRACEFD:                         Bash Variables.      (line 184)
 * bell-style:                            Readline Init File Syntax.
-                                                              (line  38)
+                                                              (line  64)
 * bind-tty-special-chars:                Readline Init File Syntax.
-                                                              (line  45)
+                                                              (line  71)
 * blink-matching-paren:                  Readline Init File Syntax.
-                                                              (line  50)
+                                                              (line  76)
 * CDPATH:                                Bourne Shell Variables.
                                                               (line   9)
 * CHILD_MAX:                             Bash Variables.      (line 195)
 * colored-completion-prefix:             Readline Init File Syntax.
-                                                              (line  55)
+                                                              (line  81)
 * colored-stats:                         Readline Init File Syntax.
-                                                              (line  62)
+                                                              (line  91)
 * COLUMNS:                               Bash Variables.      (line 202)
 * comment-begin:                         Readline Init File Syntax.
-                                                              (line  68)
+                                                              (line  97)
 * completion-display-width:              Readline Init File Syntax.
-                                                              (line  73)
+                                                              (line 102)
 * completion-ignore-case:                Readline Init File Syntax.
-                                                              (line  80)
+                                                              (line 109)
 * completion-map-case:                   Readline Init File Syntax.
-                                                              (line  85)
+                                                              (line 114)
 * completion-prefix-display-length:      Readline Init File Syntax.
-                                                              (line  91)
+                                                              (line 120)
 * completion-query-items:                Readline Init File Syntax.
-                                                              (line  98)
+                                                              (line 127)
 * COMPREPLY:                             Bash Variables.      (line 254)
 * COMP_CWORD:                            Bash Variables.      (line 208)
 * COMP_KEY:                              Bash Variables.      (line 237)
@@ -11469,29 +12004,31 @@ D.3 Parameter and Variable Index
 * COMP_WORDBREAKS:                       Bash Variables.      (line 241)
 * COMP_WORDS:                            Bash Variables.      (line 247)
 * convert-meta:                          Readline Init File Syntax.
-                                                              (line 108)
+                                                              (line 138)
 * COPROC:                                Bash Variables.      (line 260)
 * DIRSTACK:                              Bash Variables.      (line 264)
 * disable-completion:                    Readline Init File Syntax.
-                                                              (line 116)
+                                                              (line 148)
 * echo-control-characters:               Readline Init File Syntax.
-                                                              (line 121)
+                                                              (line 153)
 * editing-mode:                          Readline Init File Syntax.
-                                                              (line 126)
+                                                              (line 158)
 * EMACS:                                 Bash Variables.      (line 274)
 * emacs-mode-string:                     Readline Init File Syntax.
-                                                              (line 132)
+                                                              (line 164)
+* enable-active-region:                  Readline Init File Syntax.
+                                                              (line 174)
 * enable-bracketed-paste:                Readline Init File Syntax.
-                                                              (line 142)
+                                                              (line 187)
 * enable-keypad:                         Readline Init File Syntax.
-                                                              (line 150)
+                                                              (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 161)
+                                                              (line 207)
 * FCEDIT:                                Bash Variables.      (line 316)
 * FIGNORE:                               Bash Variables.      (line 320)
 * FUNCNAME:                              Bash Variables.      (line 326)
@@ -11505,15 +12042,15 @@ D.3 Parameter and Variable Index
 * HISTFILESIZE:                          Bash Variables.      (line 402)
 * HISTIGNORE:                            Bash Variables.      (line 413)
 * history-preserve-point:                Readline Init File Syntax.
-                                                              (line 165)
+                                                              (line 211)
 * history-size:                          Readline Init File Syntax.
-                                                              (line 171)
+                                                              (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 180)
+                                                              (line 226)
 * HOSTFILE:                              Bash Variables.      (line 448)
 * HOSTNAME:                              Bash Variables.      (line 459)
 * HOSTTYPE:                              Bash Variables.      (line 462)
@@ -11521,18 +12058,21 @@ D.3 Parameter and Variable Index
                                                               (line  18)
 * IGNOREEOF:                             Bash Variables.      (line 465)
 * input-meta:                            Readline Init File Syntax.
-                                                              (line 189)
+                                                              (line 235)
 * INPUTRC:                               Bash Variables.      (line 475)
 * INSIDE_EMACS:                          Bash Variables.      (line 479)
 * isearch-terminators:                   Readline Init File Syntax.
-                                                              (line 197)
+                                                              (line 245)
 * keymap:                                Readline Init File Syntax.
-                                                              (line 204)
-* LANG:                                  Bash Variables.      (line 485)
+                                                              (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:                           Locale Translation.  (line  15)
+* 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)
@@ -11546,15 +12086,15 @@ D.3 Parameter and Variable Index
                                                               (line  27)
 * MAPFILE:                               Bash Variables.      (line 540)
 * mark-modified-lines:                   Readline Init File Syntax.
-                                                              (line 234)
+                                                              (line 282)
 * mark-symlinked-directories:            Readline Init File Syntax.
-                                                              (line 239)
+                                                              (line 287)
 * match-hidden-files:                    Readline Init File Syntax.
-                                                              (line 244)
+                                                              (line 292)
 * menu-complete-display-prefix:          Readline Init File Syntax.
-                                                              (line 251)
+                                                              (line 299)
 * meta-flag:                             Readline Init File Syntax.
-                                                              (line 189)
+                                                              (line 235)
 * OLDPWD:                                Bash Variables.      (line 544)
 * OPTARG:                                Bourne Shell Variables.
                                                               (line  34)
@@ -11563,9 +12103,9 @@ D.3 Parameter and Variable Index
                                                               (line  38)
 * OSTYPE:                                Bash Variables.      (line 551)
 * output-meta:                           Readline Init File Syntax.
-                                                              (line 256)
+                                                              (line 304)
 * page-completions:                      Readline Init File Syntax.
-                                                              (line 262)
+                                                              (line 312)
 * PATH:                                  Bourne Shell Variables.
                                                               (line  42)
 * PIPESTATUS:                            Bash Variables.      (line 554)
@@ -11582,37 +12122,40 @@ D.3 Parameter and Variable Index
 * PS4:                                   Bash Variables.      (line 595)
 * PWD:                                   Bash Variables.      (line 603)
 * RANDOM:                                Bash Variables.      (line 606)
-* READLINE_LINE:                         Bash Variables.      (line 612)
-* READLINE_MARK:                         Bash Variables.      (line 616)
-* READLINE_POINT:                        Bash Variables.      (line 622)
-* REPLY:                                 Bash Variables.      (line 626)
+* 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 272)
-* SECONDS:                               Bash Variables.      (line 629)
-* SHELL:                                 Bash Variables.      (line 638)
-* SHELLOPTS:                             Bash Variables.      (line 643)
-* SHLVL:                                 Bash Variables.      (line 652)
+                                                              (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 278)
+                                                              (line 329)
 * show-all-if-unmodified:                Readline Init File Syntax.
-                                                              (line 284)
+                                                              (line 335)
 * show-mode-in-prompt:                   Readline Init File Syntax.
-                                                              (line 293)
+                                                              (line 344)
 * skip-completed-text:                   Readline Init File Syntax.
-                                                              (line 299)
-* SRANDOM:                               Bash Variables.      (line 657)
-* TEXTDOMAIN:                            Locale Translation.  (line  15)
-* TEXTDOMAINDIR:                         Locale Translation.  (line  15)
-* TIMEFORMAT:                            Bash Variables.      (line 666)
-* TMOUT:                                 Bash Variables.      (line 704)
-* TMPDIR:                                Bash Variables.      (line 716)
-* UID:                                   Bash Variables.      (line 720)
+                                                              (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 312)
+                                                              (line 363)
 * vi-ins-mode-string:                    Readline Init File Syntax.
-                                                              (line 323)
+                                                              (line 374)
 * visible-stats:                         Readline Init File Syntax.
-                                                              (line 334)
+                                                              (line 385)
 
 \1f
 File: bash.info,  Node: Function Index,  Next: Concept Index,  Prev: Variable Index,  Up: Indexes
@@ -11628,7 +12171,7 @@ D.4 Function Index
 * accept-line (Newline or Return):       Commands For History.
                                                               (line   6)
 * alias-expand-line ():                  Miscellaneous Commands.
-                                                              (line 125)
+                                                              (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.
@@ -11677,7 +12220,7 @@ D.4 Function Index
                                                               (line  57)
 * digit-argument (M-0, M-1, ... M--):    Numeric Arguments.   (line   6)
 * display-shell-version (C-x C-v):       Miscellaneous Commands.
-                                                              (line 110)
+                                                              (line 116)
 * do-lowercase-version (M-A, M-B, M-X, ...): Miscellaneous Commands.
                                                               (line  14)
 * downcase-word (M-l):                   Commands For Text.   (line  62)
@@ -11690,7 +12233,7 @@ D.4 Function Index
 * dynamic-complete-history (M-<TAB>):    Commands For Completion.
                                                               (line  90)
 * edit-and-execute-command (C-x C-e):    Miscellaneous Commands.
-                                                              (line 134)
+                                                              (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.
@@ -11698,21 +12241,23 @@ D.4 Function Index
 * 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  92)
-* glob-expand-word (C-x *):              Miscellaneous Commands.
                                                               (line  98)
-* glob-list-expansions (C-x g):          Miscellaneous Commands.
+* 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 128)
+                                                              (line 134)
 * history-expand-line (M-^):             Miscellaneous Commands.
-                                                              (line 118)
+                                                              (line 124)
 * history-search-backward ():            Commands For History.
                                                               (line  57)
 * history-search-forward ():             Commands For History.
@@ -11726,7 +12271,7 @@ D.4 Function Index
 * insert-completions (M-*):              Commands For Completion.
                                                               (line  22)
 * insert-last-argument (M-. or M-_):     Miscellaneous Commands.
-                                                              (line 131)
+                                                              (line 137)
 * kill-line (C-k):                       Commands For Killing.
                                                               (line   6)
 * kill-region ():                        Commands For Killing.
@@ -11736,7 +12281,7 @@ D.4 Function Index
 * kill-word (M-d):                       Commands For Killing.
                                                               (line  23)
 * magic-space ():                        Miscellaneous Commands.
-                                                              (line 121)
+                                                              (line 127)
 * menu-complete ():                      Commands For Completion.
                                                               (line  26)
 * menu-complete-backward ():             Commands For Completion.
@@ -11784,7 +12329,7 @@ D.4 Function Index
                                                               (line  37)
 * shell-backward-word (M-C-b):           Commands For Moving. (line  30)
 * shell-expand-line (M-C-e):             Miscellaneous Commands.
-                                                              (line 113)
+                                                              (line 119)
 * shell-forward-word (M-C-f):            Commands For Moving. (line  26)
 * shell-kill-word (M-C-d):               Commands For Killing.
                                                               (line  32)
@@ -11792,6 +12337,8 @@ D.4 Function Index
                                                               (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)
@@ -11913,6 +12460,8 @@ D.5 Concept Index
 * 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)
@@ -11968,6 +12517,8 @@ D.5 Concept Index
 * 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)
@@ -11983,137 +12534,138 @@ D.5 Concept Index
 
 \1f
 Tag Table:
-Node: Top\7f895
-Node: Introduction\7f2813
-Node: What is Bash?\7f3029
-Node: What is a shell?\7f4143
-Node: Definitions\7f6681
-Node: Basic Shell Features\7f9632
-Node: Shell Syntax\7f10851
-Node: Shell Operation\7f11877
-Node: Quoting\7f13170
-Node: Escape Character\7f14470
-Node: Single Quotes\7f14955
-Node: Double Quotes\7f15303
-Node: ANSI-C Quoting\7f16581
-Node: Locale Translation\7f17840
-Node: Comments\7f18993
-Node: Shell Commands\7f19611
-Node: Reserved Words\7f20549
-Node: Simple Commands\7f21305
-Node: Pipelines\7f21959
-Node: Lists\7f24891
-Node: Compound Commands\7f26682
-Node: Looping Constructs\7f27694
-Node: Conditional Constructs\7f30189
-Node: Command Grouping\7f41760
-Node: Coprocesses\7f43239
-Node: GNU Parallel\7f45142
-Node: Shell Functions\7f49443
-Node: Shell Parameters\7f56650
-Node: Positional Parameters\7f61063
-Node: Special Parameters\7f61963
-Node: Shell Expansions\7f65187
-Node: Brace Expansion\7f67310
-Node: Tilde Expansion\7f70033
-Node: Shell Parameter Expansion\7f72650
-Node: Command Substitution\7f87779
-Node: Arithmetic Expansion\7f89134
-Node: Process Substitution\7f90066
-Node: Word Splitting\7f91186
-Node: Filename Expansion\7f93130
-Node: Pattern Matching\7f95679
-Node: Quote Removal\7f99665
-Node: Redirections\7f99960
-Node: Executing Commands\7f109530
-Node: Simple Command Expansion\7f110200
-Node: Command Search and Execution\7f112154
-Node: Command Execution Environment\7f114530
-Node: Environment\7f117514
-Node: Exit Status\7f119173
-Node: Signals\7f120843
-Node: Shell Scripts\7f122810
-Node: Shell Builtin Commands\7f125822
-Node: Bourne Shell Builtins\7f127860
-Node: Bash Builtins\7f148789
-Node: Modifying Shell Behavior\7f178898
-Node: The Set Builtin\7f179243
-Node: The Shopt Builtin\7f189656
-Node: Special Builtins\7f204566
-Node: Shell Variables\7f205545
-Node: Bourne Shell Variables\7f205982
-Node: Bash Variables\7f208086
-Node: Bash Features\7f240720
-Node: Invoking Bash\7f241733
-Node: Bash Startup Files\7f247746
-Node: Interactive Shells\7f252849
-Node: What is an Interactive Shell?\7f253259
-Node: Is this Shell Interactive?\7f253908
-Node: Interactive Shell Behavior\7f254723
-Node: Bash Conditional Expressions\7f258237
-Node: Shell Arithmetic\7f262814
-Node: Aliases\7f265754
-Node: Arrays\7f268374
-Node: The Directory Stack\7f274383
-Node: Directory Stack Builtins\7f275167
-Node: Controlling the Prompt\7f278135
-Node: The Restricted Shell\7f281085
-Node: Bash POSIX Mode\7f283679
-Node: Shell Compatibility Mode\7f294715
-Node: Job Control\7f301371
-Node: Job Control Basics\7f301831
-Node: Job Control Builtins\7f306827
-Node: Job Control Variables\7f312227
-Node: Command Line Editing\7f313383
-Node: Introduction and Notation\7f315054
-Node: Readline Interaction\7f316677
-Node: Readline Bare Essentials\7f317868
-Node: Readline Movement Commands\7f319651
-Node: Readline Killing Commands\7f320611
-Node: Readline Arguments\7f322529
-Node: Searching\7f323573
-Node: Readline Init File\7f325759
-Node: Readline Init File Syntax\7f327018
-Node: Conditional Init Constructs\7f347556
-Node: Sample Init File\7f351752
-Node: Bindable Readline Commands\7f354876
-Node: Commands For Moving\7f356080
-Node: Commands For History\7f358131
-Node: Commands For Text\7f362924
-Node: Commands For Killing\7f366573
-Node: Numeric Arguments\7f369606
-Node: Commands For Completion\7f370745
-Node: Keyboard Macros\7f374936
-Node: Miscellaneous Commands\7f375623
-Node: Readline vi Mode\7f381307
-Node: Programmable Completion\7f382214
-Node: Programmable Completion Builtins\7f389994
-Node: A Programmable Completion Example\7f400689
-Node: Using History Interactively\7f405936
-Node: Bash History Facilities\7f406620
-Node: Bash History Builtins\7f409625
-Node: History Interaction\7f414354
-Node: Event Designators\7f417974
-Node: Word Designators\7f419328
-Node: Modifiers\7f421088
-Node: Installing Bash\7f422899
-Node: Basic Installation\7f424036
-Node: Compilers and Options\7f427294
-Node: Compiling For Multiple Architectures\7f428035
-Node: Installation Names\7f429728
-Node: Specifying the System Type\7f430546
-Node: Sharing Defaults\7f431262
-Node: Operation Controls\7f431935
-Node: Optional Features\7f432893
-Node: Reporting Bugs\7f443411
-Node: Major Differences From The Bourne Shell\7f444605
-Node: GNU Free Documentation License\7f461457
-Node: Indexes\7f486634
-Node: Builtin Index\7f487088
-Node: Reserved Word Index\7f493915
-Node: Variable Index\7f496363
-Node: Function Index\7f512260
-Node: Concept Index\7f525770
+Node: Top\7f896
+Node: Introduction\7f2815
+Node: What is Bash?\7f3028
+Node: What is a shell?\7f4139
+Node: Definitions\7f6674
+Node: Basic Shell Features\7f9622
+Node: Shell Syntax\7f10838
+Node: Shell Operation\7f11861
+Node: Quoting\7f13151
+Node: Escape Character\7f14452
+Node: Single Quotes\7f14934
+Node: Double Quotes\7f15279
+Node: ANSI-C Quoting\7f16554
+Node: Locale Translation\7f17861
+Node: Creating Internationalized Scripts\7f19169
+Node: Comments\7f23283
+Node: Shell Commands\7f23898
+Node: Reserved Words\7f24833
+Node: Simple Commands\7f25586
+Node: Pipelines\7f26237
+Node: Lists\7f29233
+Node: Compound Commands\7f31025
+Node: Looping Constructs\7f32034
+Node: Conditional Constructs\7f34526
+Node: Command Grouping\7f49011
+Node: Coprocesses\7f50486
+Node: GNU Parallel\7f53146
+Node: Shell Functions\7f54060
+Node: Shell Parameters\7f61942
+Node: Positional Parameters\7f66327
+Node: Special Parameters\7f67226
+Node: Shell Expansions\7f70437
+Node: Brace Expansion\7f72561
+Node: Tilde Expansion\7f75292
+Node: Shell Parameter Expansion\7f77910
+Node: Command Substitution\7f96258
+Node: Arithmetic Expansion\7f97610
+Node: Process Substitution\7f98575
+Node: Word Splitting\7f99692
+Node: Filename Expansion\7f101633
+Node: Pattern Matching\7f104379
+Node: Quote Removal\7f109378
+Node: Redirections\7f109670
+Node: Executing Commands\7f119327
+Node: Simple Command Expansion\7f119994
+Node: Command Search and Execution\7f122101
+Node: Command Execution Environment\7f124476
+Node: Environment\7f127508
+Node: Exit Status\7f129168
+Node: Signals\7f130949
+Node: Shell Scripts\7f134395
+Node: Shell Builtin Commands\7f137419
+Node: Bourne Shell Builtins\7f139454
+Node: Bash Builtins\7f160917
+Node: Modifying Shell Behavior\7f191770
+Node: The Set Builtin\7f192112
+Node: The Shopt Builtin\7f202710
+Node: Special Builtins\7f218619
+Node: Shell Variables\7f219595
+Node: Bourne Shell Variables\7f220029
+Node: Bash Variables\7f222130
+Node: Bash Features\7f254942
+Node: Invoking Bash\7f255952
+Node: Bash Startup Files\7f261962
+Node: Interactive Shells\7f267090
+Node: What is an Interactive Shell?\7f267498
+Node: Is this Shell Interactive?\7f268144
+Node: Interactive Shell Behavior\7f268956
+Node: Bash Conditional Expressions\7f272582
+Node: Shell Arithmetic\7f277221
+Node: Aliases\7f280162
+Node: Arrays\7f282772
+Node: The Directory Stack\7f289160
+Node: Directory Stack Builtins\7f289941
+Node: Controlling the Prompt\7f294198
+Node: The Restricted Shell\7f297160
+Node: Bash POSIX Mode\7f299767
+Node: Shell Compatibility Mode\7f311682
+Node: Job Control\7f320246
+Node: Job Control Basics\7f320703
+Node: Job Control Builtins\7f325702
+Node: Job Control Variables\7f331494
+Node: Command Line Editing\7f332647
+Node: Introduction and Notation\7f334315
+Node: Readline Interaction\7f335935
+Node: Readline Bare Essentials\7f337123
+Node: Readline Movement Commands\7f338909
+Node: Readline Killing Commands\7f339866
+Node: Readline Arguments\7f341784
+Node: Searching\7f342825
+Node: Readline Init File\7f345008
+Node: Readline Init File Syntax\7f346266
+Node: Conditional Init Constructs\7f369849
+Node: Sample Init File\7f374042
+Node: Bindable Readline Commands\7f377163
+Node: Commands For Moving\7f378364
+Node: Commands For History\7f380412
+Node: Commands For Text\7f385403
+Node: Commands For Killing\7f389049
+Node: Numeric Arguments\7f392079
+Node: Commands For Completion\7f393215
+Node: Keyboard Macros\7f397403
+Node: Miscellaneous Commands\7f398088
+Node: Readline vi Mode\7f404030
+Node: Programmable Completion\7f404934
+Node: Programmable Completion Builtins\7f412711
+Node: A Programmable Completion Example\7f423460
+Node: Using History Interactively\7f428705
+Node: Bash History Facilities\7f429386
+Node: Bash History Builtins\7f432388
+Node: History Interaction\7f437409
+Node: Event Designators\7f441026
+Node: Word Designators\7f442377
+Node: Modifiers\7f444134
+Node: Installing Bash\7f445939
+Node: Basic Installation\7f447073
+Node: Compilers and Options\7f450792
+Node: Compiling For Multiple Architectures\7f451530
+Node: Installation Names\7f453219
+Node: Specifying the System Type\7f455325
+Node: Sharing Defaults\7f456039
+Node: Operation Controls\7f456709
+Node: Optional Features\7f457664
+Node: Reporting Bugs\7f468880
+Node: Major Differences From The Bourne Shell\7f470152
+Node: GNU Free Documentation License\7f486998
+Node: Indexes\7f512172
+Node: Builtin Index\7f512623
+Node: Reserved Word Index\7f519447
+Node: Variable Index\7f521892
+Node: Function Index\7f538663
+Node: Concept Index\7f552444
 \1f
 End Tag Table
 
index d8d784ee712f1818200ffe00b1f2ad6ad5694d27..b8f7dd695208cfe0557f3ac8ce57cc3521efe62a 100644 (file)
Binary files a/doc/bash.pdf and b/doc/bash.pdf differ
index bd38ef3be27032719dd048b66bb5704c09793769..b6a4bbe8521a7a2911524f8ddfca59a80de8b79a 100644 (file)
@@ -1,13 +1,13 @@
 %!PS-Adobe-3.0
 %%Creator: groff version 1.22.4
-%%CreationDate: Wed Nov 18 15:13:06 2020
+%%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: 83
+%%Pages: 87
 %%PageOrder: Ascend
 %%DocumentMedia: Default 612 792 0 () ()
 %%Orientation: Portrait
@@ -245,7 +245,7 @@ BP
 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-2020 by the Free Softw)-.1 E(are F)-.1 E
+(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
@@ -339,8 +339,8 @@ F .475(xtended deb)-.15 F(ug-)-.2 E
 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.1)72 768 Q
-(2020 October 29)141.235 E(1)195.395 E 0 Cg EP
+(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
@@ -409,9 +409,9 @@ F4(INV)72 463.2 Q(OCA)-.493 E(TION)-1.04 E F0(A)108 475.2 Q F2(lo)2.5 E
 108 492 Q F2(inter)2.734 E(active)-.15 E F0 .234
 (shell is one started without non-option ar)2.734 F .234
 (guments \(unless)-.18 F F1<ad73>2.734 E F0 .233
-(is speci\214ed\) and without the)2.734 F F1<ad63>2.733 E F0 .509(optio\
-n whose standard input and error are both connected to terminals \(as d\
-etermined by)108 504 R F2(isatty)3.019 E F0 .509(\(3\)\), or one).32 F
+(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)
@@ -463,8 +463,8 @@ F2(~/.bashr)108 691.2 Q(c)-.37 E F0 2.535(,i)C 2.535(ft)-2.535 G .035
 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.1)72 768 Q(2020 October 29)141.235 E(2)
-195.395 E 0 Cg EP
+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
@@ -527,24 +527,25 @@ F .341(xpand the)-.15 F F1(ENV)2.841 E F0 -.25(va)2.591 G .342
 (cuted from the \214le whose name is the e).15 E(xpanded v)-.15 E 2.5
 (alue. No)-.25 F(other startup \214les are read.)2.5 E F2(Bash)108 302.4
 Q F0 .224(attempts to determine when it is being run with its standard \
-input connected to a netw)2.724 F .223(ork connection,)-.1 F .025
-(as when e)108 314.4 R -.15(xe)-.15 G .025
-(cuted by the remote shell daemon, usually).15 F F4 -.1(rs)2.525 G(hd).1
-E F0 2.525(,o)C 2.525(rt)-2.525 G .025(he secure shell daemon)-2.525 F
-F4(sshd)2.525 E F0 5.025(.I)C(f)-5.025 E F2(bash)2.525 E F0(deter)2.525
-E(-)-.2 E .134(mines it is being run in this f)108 326.4 R .134
-(ashion, it reads and e)-.1 F -.15(xe)-.15 G .133(cutes commands from)
-.15 F F4(~/.bashr)2.633 E(c)-.37 E F0 2.633(,i)C 2.633(ft)-2.633 G .133
-(hat \214le e)-2.633 F .133(xists and is)-.15 F 2.869(readable. It)108
-338.4 R .369(will not do this if in)2.869 F -.2(vo)-.4 G -.1(ke).2 G
-2.869(da).1 G(s)-2.869 E F2(sh)2.869 E F0 5.369(.T)C(he)-5.369 E F2
-<adad6e6f72>2.869 E(c)-.18 E F0 .369
-(option may be used to inhibit this beha)2.869 F(vior)-.2 E 2.869(,a)-.4
-G(nd)-2.869 E(the)108 350.4 Q F2<adad72>2.919 E(c\214le)-.18 E F0 .419
-(option may be used to force another \214le to be read, b)2.919 F .419
-(ut neither)-.2 F F4 -.1(rs)2.919 G(hd).1 E F0(nor)2.919 E F4(sshd)2.919
-E F0 .418(generally in)2.919 F -.2(vo)-.4 G -.1(ke).2 G
-(the shell with those options or allo)108 362.4 Q 2.5(wt)-.25 G
+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
@@ -591,9469 +592,9878 @@ F2(case)3.144 E F0(or)3.144 E F2(select)3.143 E F0 .643(command \(only)
 (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 F2(Simple Commands)87 698.4 Q F0(A)
-108 710.4 Q F4 .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 F2(blank)2.888 E F0 .388(-separated w)B .388
-(ords and)-.1 F .815(redirections, and terminated by a)108 722.4 R F4
-(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(GNU Bash 5.1)72 768 Q(2020 October 29)
-141.235 E(3)195.395 E 0 Cg EP
+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
-(and is passed as ar)108 84 Q(gument zero.)-.18 E(The remaining w)5 E
+(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 100.8 Q(alue of a)
--.25 E/F1 10/Times-Italic@0 SF(simple command)2.5 E F0(is its e)2.5 E
-(xit status, or 128+)-.15 E F1(n)A F0
-(if the command is terminated by signal)3.333 E F1(n)2.86 E F0(.).24 E
-/F2 10/Times-Bold@0 SF(Pipelines)87 117.6 Q F0(A)108 129.6 Q F1
-(pipeline)2.996 E F0 .496(is a sequence of one or more commands separat\
-ed by one of the control operators)2.996 F F2(|)2.996 E F0(or)2.996 E F2
-(|&)2.996 E F0 5.496(.T)C(he)-5.496 E(format for a pipeline is:)108
-141.6 Q([)144 158.4 Q F2(time)A F0([)2.5 E F2<ad70>A F0(]] [ ! ])A F1
-(command)2.5 E F0 2.5([[)2.5 G F2(|)-2.5 E/F3 10/Symbol SF<ef>A F2(|&)A
-F0(])A F1(command2)2.5 E F0(... ])2.5 E .231(The standard output of)108
-175.2 R F1(command)2.931 E F0 .232
-(is connected via a pipe to the standard input of)3.502 F F1(command2)
-2.932 E F0 5.232(.T).02 G .232(his connec-)-5.232 F .643
-(tion is performed before an)108 187.2 R 3.143(yr)-.15 G .642
-(edirections speci\214ed by the command \(see)-3.143 F/F4 9/Times-Bold@0
-SF(REDIRECTION)3.142 E F0(belo)2.892 E 3.142(w\). If)-.25 F F2(|&)3.142
-E F0(is)3.142 E(used,)108 199.2 Q F1(command)2.663 E F0 1.263 -.55('s s)
-D .163(tandard error).55 F 2.663(,i)-.4 G 2.663(na)-2.663 G .163
-(ddition to its standard output, is connected to)-2.663 F F1(command2)
-2.664 E F0 1.264 -.55('s s)D .164(tandard in-).55 F .438
-(put through the pipe; it is shorthand for)108 211.2 R F2 .437(2>&1 |)
-2.937 F F0 5.437(.T)C .437
-(his implicit redirection of the standard error to the stan-)-5.437 F
-(dard output is performed after an)108 223.2 Q 2.5(yr)-.15 G
-(edirections speci\214ed by the command.)-2.5 E .48
-(The return status of a pipeline is the e)108 240 R .48
-(xit status of the last command, unless the)-.15 F F2(pipefail)2.98 E F0
-.48(option is enabled.)2.98 F(If)108 252 Q F2(pipefail)2.687 E F0 .187
+(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 264 R .611
+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 F2(!)3.111 E F0 .611
-(precedes a pipeline, the)5.611 F -.15(ex)108 276 S .55
+(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 288
-Q(alue.)-.25 E .298(If the)108 304.8 R F2(time)2.799 E F0(reserv)2.799 E
+(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 316.8 S .14
-(cution are reported when the pipeline terminates.).15 F(The)5.139 E F2
+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 328.8 R .303(When the shell is in)
-5.302 F F1 .303(posix mode)2.803 F F0 2.803(,i)C 2.803(td)-2.803 G .303
-(oes not recognize)-2.803 F F2(time)2.803 E F0 .303(as a reserv)2.803 F
-.303(ed w)-.15 F .303(ord if the ne)-.1 F(xt)-.15 E(tok)108 340.8 Q .736
+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
-352.8 R F4(TIMEFORMA)3.38 E(T)-.855 E F0(under)3.13 E F2 .88(Shell V)
-3.38 F(ariables)-.92 E F0(be-)3.38 E(lo)108 364.8 Q -.65(w.)-.25 G .162
-(When the shell is in)108 381.6 R F1 .162(posix mode)2.662 F F0(,)A F2
+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 393.6 R(The)5.243 E F4(TIMEFORMA)2.743 E(T)-.855 E F0 -.25(va)2.493
+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 405.6 Q .656
-(Each command in a pipeline is e)108 422.4 R -.15(xe)-.15 G .655
-(cuted as a separate process \(i.e., in a subshell\).).15 F(See)5.655 E
-F4 .655(COMMAND EXE-)3.155 F .05(CUTION ENVIR)108 434.4 R(ONMENT)-.27 E
-F0 .051(for a description of a subshell en)2.3 F 2.551(vironment. If)-.4
-F(the)2.551 E F2(lastpipe)2.551 E F0 .051(option is enabled us-)2.551 F
-.416(ing the)108 446.4 R F2(shopt)2.916 E F0 -.2(bu)2.916 G .416
-(iltin \(see the description of).2 F F2(shopt)2.916 E F0(belo)2.916 E
-.416(w\), the last element of a pipeline may be run by the)-.25 F
-(shell process.)108 458.4 Q F2(Lists)87 475.2 Q F0(A)108 487.2 Q F1
-(list)2.849 E F0 .349(is a sequence of one or more pipelines separated \
-by one of the operators)2.849 F F2(;)2.85 E F0(,)A F2(&)2.85 E F0(,)A F2
-(&&)2.85 E F0 2.85(,o)C(r)-2.85 E F2(||)2.85 E F0 2.85(,a)C .35
-(nd option-)-2.85 F(ally terminated by one of)108 499.2 Q F2(;)2.5 E F0
-(,)A F2(&)2.5 E F0 2.5(,o)C(r)-2.5 E F2(<newline>)2.5 E F0(.)A .961
-(Of these list operators,)108 516 R F2(&&)3.461 E F0(and)3.461 E F2(||)
+(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 F2(;)3.46 E F0(and)3.46 E F2(&)3.46 E F0 3.46
+.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 528 Q 2.5(As)108 544.8 S(equence of one or more ne)-2.5 E
-(wlines may appear in a)-.25 E F1(list)2.5 E F0
+(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 561.6 R F2(&)
+(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 F1(bac)2.529 E(kgr)-.2 E(ound)-.45 E F0
-(in)2.529 E 2.678(as)108 573.6 S 2.678(ubshell. The)-2.678 F .178
+(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 585.6 R F1(async)3.278 E(hr)
+(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 F2(;)3.279 E F0 .779(are e)3.279 F -.15(xe)-.15
+(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 597.6 Q
+(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 614.4 R F2(&&)2.671 E F0(and)
-2.671 E F2(||)2.671 E F0 .171(control operators, re-)2.671 F(specti)108
-626.4 Q -.15(ve)-.25 G(ly).15 E 5(.A)-.65 G(ND and OR lists are e)-5 E
+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 F1(command1)144 643.2 Q F2(&&)
-2.5 E F1(command2)2.5 E(command2)108.2 660 Q F0(is e)2.52 E -.15(xe)-.15
-G(cuted if, and only if,).15 E F1(command1)2.7 E F0(returns an e)2.5 E
+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
-676.8 Q F1(command1)144 693.6 Q F2(||)2.5 E F1(command2)2.5 E(command2)
-108.2 710.4 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 722.4 Q
-(xit status of the last command e)-.15 E -.15(xe)-.15 G
-(cuted in the list.).15 E(GNU Bash 5.1)72 768 Q(2020 October 29)141.235
-E(4)195.395 E 0 Cg EP
+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-Bold@0
-SF(Compound Commands)87 84 Q F0(A)108 96 Q/F2 10/Times-Italic@0 SF 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 F2(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 108 R
+(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 120 Q(\()108 136.8 Q F2(list)
-A F0(\))A F2(list)144 136.8 Q F0 .011(is e)2.512 F -.15(xe)-.15 G .011
-(cuted in a subshell en).15 F .011(vironment \(see)-.4 F/F3 9
-/Times-Bold@0 SF .011(COMMAND EXECUTION ENVIR)2.511 F(ONMENT)-.27 E F0
-(belo)2.261 E(w\).)-.25 E -1.11(Va)144 148.8 S .016
-(riable assignments and b)1.11 F .016(uiltin commands that af)-.2 F .016
-(fect the shell')-.25 F 2.517(se)-.55 G -.4(nv)-2.517 G .017
-(ironment do not remain in ef-).4 F(fect after the command completes.)
-144 160.8 Q(The return status is the e)5 E(xit status of)-.15 E F2(list)
-2.5 E F0(.)A({)108 177.6 Q F2(list)2.5 E F0 2.5(;})C F2(list)144 177.6 Q
-F0 .402(is simply e)2.902 F -.15(xe)-.15 G .401
-(cuted in the current shell en).15 F(vironment.)-.4 E F2(list)5.401 E F0
-.401(must be terminated with a ne)2.901 F .401(wline or)-.25 F 3.214
-(semicolon. This)144 189.6 R .714(is kno)3.214 F .714(wn as a)-.25 F F2
+(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 .715(xit status of)-.15 F F2(list)
-3.215 E F0 5.715(.N)C(ote)-5.715 E .22(that unlik)144 201.6 R 2.72(et)
--.1 G .22(he metacharacters)-2.72 F F1(\()2.72 E F0(and)2.72 E F1(\))
-2.72 E F0(,)A F1({)2.72 E F0(and)2.72 E F1(})2.719 E F0(are)2.719 E F2
--.37(re)2.719 G .219(served wor).37 F(ds)-.37 E F0 .219
-(and must occur where a reserv)2.719 F(ed)-.15 E -.1(wo)144 213.6 S .256
-(rd is permitted to be recognized.).1 F .256(Since the)5.256 F 2.756(yd)
--.15 G 2.756(on)-2.756 G .257(ot cause a w)-2.756 F .257(ord break, the)
--.1 F 2.757(ym)-.15 G .257(ust be separated)-2.757 F(from)144 225.6 Q F2
+(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 242.4 Q F2 -.2(ex)C(pr).2 E(ession)-.37 E F0(\)\))A(The)144
-254.4 Q F2 -.2(ex)2.552 G(pr).2 E(ession)-.37 E F0 .052(is e)2.552 F
+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.551(wu)-.25 G(nder)-2.551 E F3 .051(ARITHMETIC EV)2.551 F(ALU)-1.215 E
-(A-)-.54 E(TION)144 266.4 Q/F4 9/Times-Roman@0 SF(.)A F0 .411(If the v)
-4.91 F .411(alue of the e)-.25 F .411(xpression is non-zero, the return\
- status is 0; otherwise the return status)-.15 F(is 1.)144 278.4 Q
-(This is e)5 E(xactly equi)-.15 E -.25(va)-.25 G(lent to).25 E F1(let ")
-2.5 E F2 -.2(ex)C(pr).2 E(ession)-.37 E F1(")A F0(.)A F1([[)108 295.2 Q
-F2 -.2(ex)2.5 G(pr).2 E(ession)-.37 E F1(]])2.5 E F0 .003
-(Return a status of 0 or 1 depending on the e)144 307.2 R -.25(va)-.25 G
-.003(luation of the conditional e).25 F(xpression)-.15 E F2 -.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 319.2 R
-3.259(wu)-.25 G(nder)-3.259 E F3(CONDITION)3.259 E .759(AL EXPRESSIONS)
--.18 F F4(.)A F0 -.8(Wo)144 331.2 S .029(rd splitting and pathname e).8
-F .029(xpansion are not performed on the w)-.15 F .029(ords between the)
--.1 F F1([[)2.528 E F0(and)2.528 E F1(]])2.528 E F0 2.528(;t)C(ilde)
--2.528 E -.15(ex)144 343.2 S 3.968(pansion, parameter and v).15 F 3.969
-(ariable e)-.25 F 3.969(xpansion, arithmetic e)-.15 F 3.969
-(xpansion, command substitution,)-.15 F .571
-(process substitution, and quote remo)144 355.2 R -.25(va)-.15 G 3.071
-(la).25 G .571(re performed.)-3.071 F .571
-(Conditional operators such as)5.571 F F1<ad66>3.07 E F0 .57(must be)
-3.07 F(unquoted to be recognized as primaries.)144 367.2 Q
-(When used with)144 385.2 Q F1([[)2.5 E F0 2.5(,t)C(he)-2.5 E F1(<)2.5 E
-F0(and)2.5 E F1(>)2.5 E F0(operators sort le)2.5 E
-(xicographically using the current locale.)-.15 E .502(When the)144
-403.2 R F1(==)3.002 E F0(and)3.002 E F1(!=)3.002 E F0 .502(operators ar\
-e used, the string to the right of the operator is considered a pat-)
-3.002 F .81(tern and matched according to the rules described belo)144
-415.2 R 3.31(wu)-.25 G(nder)-3.31 E F1 -.1(Pa)3.31 G(tter).1 E 3.31(nM)
--.15 G(atching)-3.31 E F0 3.31(,a)C 3.31(si)-3.31 G 3.31(ft)-3.31 G(he)
--3.31 E F1(ext-)3.31 E(glob)144 427.2 Q F0 .313
-(shell option were enabled.)2.813 F(The)5.313 E F1(=)2.813 E F0 .313
-(operator is equi)2.813 F -.25(va)-.25 G .313(lent to).25 F F1(==)2.813
-E F0 5.313(.I)C 2.813(ft)-5.313 G(he)-2.813 E F1(nocasematch)2.813 E F0
-.314(shell op-)2.814 F .03
-(tion is enabled, the match is performed without re)144 439.2 R -.05(ga)
--.15 G .029(rd to the case of alphabetic characters.).05 F .029(The re-)
-5.029 F .258(turn v)144 451.2 R .259(alue is 0 if the string matches \()
--.25 F F1(==)A F0 2.759(\)o)C 2.759(rd)-2.759 G .259(oes not match \()
--2.759 F F1(!=)A F0 2.759(\)t)C .259(he pattern, and 1 otherwise.)-2.759
-F(An)5.259 E(y)-.15 E(part of the pattern may be quoted to force the qu\
-oted portion to be matched as a string.)144 463.2 Q .243
-(An additional binary operator)144 481.2 R(,)-.4 E F1(=~)2.743 E F0
-2.743(,i)C 2.743(sa)-2.743 G -.25(va)-2.943 G .243
-(ilable, with the same precedence as).25 F F1(==)2.743 E F0(and)2.743 E
-F1(!=)2.743 E F0 5.243(.W)C .243(hen it is)-5.243 F .182
+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 493.2 R .182(xtended re)-.15 F .182(gular e)-.15 F .182
-(xpression and)-.15 F 2.624(matched accordingly \(using the POSIX)144
-505.2 R F2 -.37(re)5.124 G(gcomp)-.03 E F0(and)5.124 E F2 -.37(re)5.124
-G -.1(ge)-.03 G(xec)-.1 E F0(interf)5.123 E 2.623
-(aces usually described in)-.1 F F2 -.37(re)144 517.2 S -.1(ge)-.03 G(x)
--.1 E F0 3.271(\(3\)\). The)B .771(return v)3.271 F .772
+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
-.772(If the re)5.772 F(gular)-.15 E -.15(ex)144 529.2 S .509
+.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 .508(eturn v)-3.008 F .508
-(alue is 2.)-.25 F .508(If the)5.508 F F1(nocase-)3.008 E(match)144
-541.2 Q F0 1.307
-(shell option is enabled, the match is performed without re)3.806 F -.05
-(ga)-.15 G 1.307(rd to the case of alphabetic).05 F 3.063
-(characters. An)144 553.2 R 3.063(yp)-.15 G .563(art of the pattern may\
- be quoted to force the quoted portion to be matched as a)-3.063 F 2.943
-(string. Brack)144 565.2 R .443(et e)-.1 F .443(xpressions in re)-.15 F
-.443(gular e)-.15 F .443(xpressions must be treated carefully)-.15 F
-2.944(,s)-.65 G .444(ince normal quoting)-2.944 F .615
-(characters lose their meanings between brack)144 577.2 R 3.115(ets. If)
--.1 F .614(the pattern is stored in a shell v)3.115 F .614
-(ariable, quot-)-.25 F(ing the v)144 589.2 Q(ariable e)-.25 E
-(xpansion forces the entire pattern to be matched as a string.)-.15 E
-.838(The pattern will match if it matches an)144 607.2 R 3.338(yp)-.15 G
-.838(art of the string.)-3.338 F .839(Anchor the pattern using the)5.839
-F F1(^)3.339 E F0(and)3.339 E F1($)3.339 E F0(re)144 619.2 Q .847
-(gular e)-.15 F .846
+(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 631.2 Q(TCH)-.855 E F0 .321
+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 643.2 R 3.083(x0)-.15 G .582
+.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 .249
-(matched by parenthesized sube)144 655.2 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 F3 -.27(BA)144 667.2 S(SH_REMA).27 E(TCH)-.855
-E F0 1.13(indices. The element of)3.38 F F3 -.27(BA)3.63 G(SH_REMA).27 E
-(TCH)-.855 E F0 1.13(with inde)3.38 F(x)-.15 E F2(n)3.63 E F0 1.13
-(is the portion of the)3.63 F(string matching the)144 679.2 Q F2(n)2.5 E
-F0(th parenthesized sube)A(xpression.)-.15 E .785
-(Expressions may be combined using the follo)144 697.2 R .786
-(wing operators, listed in decreasing order of prece-)-.25 F(dence:)144
-709.2 Q(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(5)195.395 E 0 Cg
-EP
+(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/F1 10/Times-Bold@0
-SF(\()144 84 Q/F2 10/Times-Italic@0 SF -.2(ex)2.5 G(pr).2 E(ession)-.37
-E F1(\))2.5 E F0 .523(Returns the v)180 96 R .522(alue of)-.25 F F2 -.2
-(ex)3.022 G(pr).2 E(ession)-.37 E F0 5.522(.T)C .522
+(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 108 Q F1(!)144 120
-Q F2 -.2(ex)2.5 G(pr).2 E(ession)-.37 E F0 -.35(Tr)180 132 S(ue if).35 E
+(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 144 S(pr).2 E(ession1)-.37 E F1(&&)2.5 E F2 -.2(ex)2.5 G(pr).2 E
-(ession2)-.37 E F0 -.35(Tr)180 156 S(ue if both).35 E F2 -.2(ex)2.5 G
+(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 168 S(pr).2 E(ession1)-.37 E F1
-(||)2.5 E F2 -.2(ex)2.5 G(pr).2 E(ession2)-.37 E F0 -.35(Tr)180 180 S
+-.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 196.8
-Q F1(&&)2.675 E F0(and)2.675 E F1(||)2.675 E F0 .175(operators do not e)
-2.675 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.676 G
-(pr).2 E(ession1)-.37 E F0 .176(is suf)2.676 F .176(\214cient to de-)
--.25 F(termine the return v)144 208.8 Q
-(alue of the entire conditional e)-.25 E(xpression.)-.15 E F1 -.25(fo)
-108 225.6 S(r).25 E F2(name)2.5 E F0 2.5([[)2.5 G F1(in)A F0([)2.5 E F2
-(wor)2.5 E 2.5(d.)-.37 G(..)-2.5 E F0 2.5(]];])2.5 G F1(do)A F2(list)2.5
-E F0(;)2.5 E F1(done)2.5 E F0 .424(The list of w)144 237.6 R .424
-(ords follo)-.1 F(wing)-.25 E F1(in)2.924 E F0 .423(is e)2.924 F .423
-(xpanded, generating a list of items.)-.15 F .423(The v)5.423 F(ariable)
--.25 E F2(name)2.923 E F0 .423(is set to)2.923 F .653
-(each element of this list in turn, and)144 249.6 R F2(list)3.153 E F0
+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 F1(in)3.153 E F2(wor)3.153 E(d)-.37 E F0 .653
-(is omitted, the)3.153 F F1 -.25(fo)3.153 G(r).25 E F0 .649(command e)
-144 261.6 R -.15(xe)-.15 G(cutes).15 E F2(list)3.149 E F0 .648
-(once for each positional parameter that is set \(see)3.148 F/F3 9
-/Times-Bold@0 SF -.666(PA)3.148 G(RAMETERS).666 E F0(belo)2.898 E(w\).)
--.25 E .153(The return status is the e)144 273.6 R .153
-(xit status of the last command that e)-.15 F -.15(xe)-.15 G 2.654
-(cutes. If).15 F .154(the e)2.654 F .154(xpansion of the items)-.15 F
-(follo)144 285.6 Q(wing)-.25 E F1(in)2.5 E F0
+(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 F1 -.25(fo)108 302.4 S(r).25 E
+(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 F1(do)2.5 E F2
-(list)2.5 E F0(;)2.5 E F1(done)2.5 E F0 1.236(First, the arithmetic e)
-144 314.4 R(xpression)-.15 E F2 -.2(ex)3.736 G(pr1).2 E F0 1.235(is e)
-3.736 F -.25(va)-.25 G 1.235
-(luated according to the rules described belo).25 F 3.735(wu)-.25 G
-(nder)-3.735 E F3 .561(ARITHMETIC EV)144 326.4 R(ALU)-1.215 E -.855(AT)
--.54 G(ION).855 E/F4 9/Times-Roman@0 SF(.)A F0 .561(The arithmetic e)
-5.061 F(xpression)-.15 E F2 -.2(ex)3.061 G(pr2).2 E F0 .562(is then e)
-3.062 F -.25(va)-.25 G .562(luated repeatedly until).25 F .592(it e)144
-338.4 R -.25(va)-.25 G .592(luates to zero.).25 F .592(Each time)5.592 F
+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 .591(is e)
-3.092 F -.15(xe)-.15 G .591(cuted and the arith-).15 F .228(metic e)144
-350.4 R(xpression)-.15 E F2 -.2(ex)2.728 G(pr3).2 E F0 .229(is e)2.728 F
+(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.729(te)-2.729 G -.25(va)-2.979 G
-.229(luates to 1.).25 F .228(The return v)144 362.4 R .228
-(alue is the e)-.25 F .228(xit status of the last command in)-.15 F F2
-(list)2.728 E F0 .227(that is e)2.728 F -.15(xe)-.15 G .227(cuted, or f)
-.15 F .227(alse if an)-.1 F 2.727(yo)-.15 G 2.727(ft)-2.727 G(he)-2.727
-E -.15(ex)144 374.4 S(pressions is in).15 E -.25(va)-.4 G(lid.).25 E F1
-(select)108 391.2 Q F2(name)2.5 E F0([)2.5 E F1(in)2.5 E F2(wor)2.5 E(d)
--.37 E F0 2.5(];)2.5 G F1(do)A F2(list)2.5 E F0(;)2.5 E F1(done)2.5 E F0
-.432(The list of w)144 403.2 R .432(ords follo)-.1 F(wing)-.25 E F1(in)
-2.932 E F0 .432(is e)2.932 F .432(xpanded, generating a list of items.)
--.15 F .433(The set of e)5.433 F .433(xpanded w)-.15 F(ords)-.1 E .843
-(is printed on the standard error)144 415.2 R 3.342(,e)-.4 G .842
-(ach preceded by a number)-3.342 F 5.842(.I)-.55 G 3.342(ft)-5.842 G(he)
--3.342 E F1(in)3.342 E F2(wor)3.342 E(d)-.37 E F0 .842
-(is omitted, the posi-)3.342 F .201(tional parameters are printed \(see)
-144 427.2 R F3 -.666(PA)2.701 G(RAMETERS).666 E F0(belo)2.451 E 2.701
-(w\). The)-.25 F F3(PS3)2.701 E F0 .201(prompt is then displayed and a)
-2.451 F .214(line read from the standard input.)144 439.2 R .213
-(If the line consists of a number corresponding to one of the dis-)5.214
-F 1.537(played w)144 451.2 R 1.537(ords, then the v)-.1 F 1.537(alue of)
--.25 F F2(name)4.397 E F0 1.537(is set to that w)4.217 F 4.037(ord. If)
--.1 F 1.538(the line is empty)4.038 F 4.038(,t)-.65 G 1.538(he w)-4.038
-F 1.538(ords and)-.1 F .066(prompt are displayed ag)144 463.2 R 2.566
-(ain. If)-.05 F .065(EOF is read, the command completes.)2.566 F(An)
-5.065 E 2.565(yo)-.15 G .065(ther v)-2.565 F .065(alue read causes)-.25
-F F2(name)144.36 475.2 Q F0 .953(to be set to null.)3.633 F .953
-(The line read is sa)5.953 F -.15(ve)-.2 G 3.454(di).15 G 3.454(nt)
--3.454 G .954(he v)-3.454 F(ariable)-.25 E F3(REPL)3.454 E(Y)-.828 E F4
-(.)A F0(The)5.454 E F2(list)3.544 E F0 .954(is e)4.134 F -.15(xe)-.15 G
-.954(cuted after).15 F .072(each selection until a)144 487.2 R F1(br)
-2.571 E(eak)-.18 E F0 .071(command is e)2.571 F -.15(xe)-.15 G 2.571
-(cuted. The).15 F -.15(ex)2.571 G .071(it status of).15 F F1(select)
-2.571 E F0 .071(is the e)2.571 F .071(xit status of the)-.15 F
-(last command e)144 499.2 Q -.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 F1(case)108 516 Q F2(wor)2.5 E(d)-.37 E F1(in)2.5 E
-F0 2.5([[)2.5 G(\(])-2.5 E F2(pattern)2.5 E F0([)2.5 E F1(|)2.5 E F2
-(pattern)2.5 E F0 2.5(].)2.5 G(.. \))-2.5 E F2(list)2.5 E F0(;; ] ...)
-2.5 E F1(esac)2.5 E F0(A)144 528 Q F1(case)3.264 E F0 .764
-(command \214rst e)3.264 F(xpands)-.15 E F2(wor)3.264 E(d)-.37 E F0
+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 .765(in turn, using the)3.264 F .884
-(matching rules described under)144 540 R F1 -.1(Pa)3.384 G(tter).1 E
+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 .883
+(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
-552 R .95(ariable e)-.25 F .95(xpansion, arithmetic e)-.15 F .95
-(xpansion, command substitution, process)-.15 F .181
-(substitution and quote remo)144 564 R -.25(va)-.15 G 2.681(l. Each).25
+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 .18(xpansion, param-)-.15 F .103
-(eter and v)144 576 R .103(ariable e)-.25 F .103(xpansion, arithmetic e)
--.15 F .103(xpansion, command substitution, and process substitution.)
--.15 F .687(If the)144 588 R F1(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 .464(alphabetic characters.)144
-600 R .464(When a match is found, the corresponding)5.464 F F2(list)
-2.964 E F0 .464(is e)2.964 F -.15(xe)-.15 G 2.964(cuted. If).15 F(the)
-2.964 E F1(;;)2.964 E F0(opera-)2.964 E .675(tor is used, no subsequent\
- matches are attempted after the \214rst pattern match.)144 612 R(Using)
-5.674 E F1(;&)3.174 E F0 .674(in place)3.174 F(of)144 624 Q F1(;;)2.866
-E F0 .366(causes e)2.866 F -.15(xe)-.15 G .366
-(cution to continue with the).15 F F2(list)2.866 E F0 .367
-(associated with the ne)2.866 F .367(xt set of patterns.)-.15 F(Using)
-5.367 E F1(;;&)2.867 E F0 .596(in place of)144 636 R F1(;;)3.096 E F0
-.596(causes the shell to test the ne)3.096 F .595
-(xt pattern list in the statement, if an)-.15 F 1.895 -.65(y, a)-.15 H
-.595(nd e).65 F -.15(xe)-.15 G .595(cute an).15 F(y)-.15 E(associated)
-144 648 Q F2(list)2.96 E F0 .461
-(on a successful match, continuing the case statement e)2.96 F -.15(xe)
--.15 G .461(cution as if the pattern list).15 F .677(had not matched.)
-144 660 R .677(The e)5.677 F .677
-(xit status is zero if no pattern matches.)-.15 F .676
-(Otherwise, it is the e)5.677 F .676(xit status of)-.15 F
-(the last command e)144 672 Q -.15(xe)-.15 G(cuted in).15 E F2(list)2.5
-E F0(.)A F1(if)108 688.8 Q F2(list)2.5 E F0(;)A F1(then)2.5 E F2(list)
-2.5 E F0 2.5(;[)C F1(elif)A F2(list)2.5 E F0(;)A F1(then)2.5 E F2(list)
-2.5 E F0 2.5(;].)C(.. [)-2.5 E F1(else)2.5 E F2(list)2.5 E F0 2.5(;])C
-F1<8c>A F0(The)144 700.8 Q F1(if)2.977 E F2(list)3.067 E F0 .478(is e)
-3.658 F -.15(xe)-.15 G 2.978(cuted. If).15 F .478(its e)2.978 F .478
-(xit status is zero, the)-.15 F F1(then)2.978 E F2(list)2.978 E F0 .478
-(is e)2.978 F -.15(xe)-.15 G 2.978(cuted. Otherwise,).15 F(each)2.978 E
-F1(elif)2.978 E F2(list)2.978 E F0 1.088(is e)144 712.8 R -.15(xe)-.15 G
-1.088(cuted in turn, and if its e).15 F 1.087
-(xit status is zero, the corresponding)-.15 F F1(then)3.587 E F2(list)
-3.587 E F0 1.087(is e)3.587 F -.15(xe)-.15 G 1.087(cuted and the).15 F
-1.239(command completes.)144 724.8 R 1.239(Otherwise, the)6.239 F F1
-(else)3.739 E F2(list)3.739 E F0 1.239(is e)3.739 F -.15(xe)-.15 G 1.239
-(cuted, if present.).15 F 1.24(The e)6.239 F 1.24(xit status is the e)
--.15 F(xit)-.15 E(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(6)
-195.395 E 0 Cg EP
+(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
-(status of the last command e)144 84 Q -.15(xe)-.15 G
-(cuted, or zero if no condition tested true.).15 E/F1 10/Times-Bold@0 SF
-(while)108 100.8 Q/F2 10/Times-Italic@0 SF(list-1)2.5 E F0(;)A F1(do)2.5
-E F2(list-2)2.5 E F0(;)A F1(done)2.5 E(until)108 112.8 Q F2(list-1)2.5 E
-F0(;)A F1(do)2.5 E F2(list-2)2.5 E F0(;)A F1(done)2.5 E F0(The)144 124.8
-Q F1(while)3.45 E F0 .95(command continuously e)3.45 F -.15(xe)-.15 G
-.95(cutes the list).15 F F2(list-2)3.45 E F0 .95
-(as long as the last command in the list)3.45 F F2(list-1)144 136.8 Q F0
-.205(returns an e)2.705 F .205(xit status of zero.)-.15 F(The)5.205 E F1
-(until)2.705 E F0 .205(command is identical to the)2.705 F F1(while)
-2.705 E F0 .205(command, e)2.705 F(xcept)-.15 E .6(that the test is ne)
-144 148.8 R -.05(ga)-.15 G(ted:).05 E F2(list-2)3.19 E F0 .6(is e)3.12 F
--.15(xe)-.15 G .599(cuted as long as the last command in).15 F F2
-(list-1)3.189 E F0 .599(returns a non-zero)3.099 F -.15(ex)144 160.8 S
-.204(it status.).15 F .204(The e)5.204 F .204(xit status of the)-.15 F
-F1(while)2.704 E F0(and)2.704 E F1(until)2.704 E F0 .205
-(commands is the e)2.704 F .205(xit status of the last command)-.15 F
--.15(exe)144 172.8 S(cuted in).15 E F2(list-2)2.5 E F0 2.5(,o)C 2.5(rz)
--2.5 G(ero if none w)-2.5 E(as e)-.1 E -.15(xe)-.15 G(cuted.).15 E F1
-(Copr)87 189.6 Q(ocesses)-.18 E F0(A)108 201.6 Q F2(copr)3.713 E(ocess)
--.45 E F0 1.213(is a shell command preceded by the)3.713 F F1(copr)3.712
-E(oc)-.18 E F0(reserv)3.712 E 1.212(ed w)-.15 F 3.712(ord. A)-.1 F 1.212
-(coprocess is e)3.712 F -.15(xe)-.15 G 1.212(cuted asyn-).15 F .574(chr\
+(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 213.6 R F1(&)3.075 E F0 .575(control operator)3.075 F 3.075(,w)-.4 G
-.575(ith a tw)-3.075 F(o-)-.1 E -.1(wa)108 225.6 S 2.5(yp).1 G
+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 format for a coprocess is:)
-108 242.4 Q F1(copr)144 259.2 Q(oc)-.18 E F0([)2.5 E F2 -.27(NA)C(ME).27
-E F0(])A F2(command)2.5 E F0([)2.5 E F2 -.37(re)C(dir).37 E(ections)-.37
-E F0(])A .709(This creates a coprocess named)108 276 R F2 -.27(NA)3.208
-G(ME).27 E F0 5.708(.I)C(f)-5.708 E F2 -.27(NA)3.208 G(ME).27 E F0 .708
-(is not supplied, the def)3.208 F .708(ault name is)-.1 F F1(COPR)3.208
-E(OC)-.3 E F0(.)A F2 -.27(NA)5.708 G(ME).27 E F0 .64
-(must not be supplied if)108 288 R F2(command)3.14 E F0 .64(is a)3.14 F
-F2 .64(simple command)3.14 F F0 .64(\(see abo)3.14 F -.15(ve)-.15 G .64
-(\); otherwise, it is interpreted as the \214rst).15 F -.1(wo)108 300 S
-.349(rd of the simple command.).1 F .348(When the coprocess is e)5.348 F
--.15(xe)-.15 G .348(cuted, the shell creates an array v).15 F .348
-(ariable \(see)-.25 F F1(Ar)2.848 E(-)-.37 E(rays)108 312 Q F0(belo)
-3.095 E .595(w\) named)-.25 F F2 -.27(NA)3.095 G(ME).27 E F0 .595
-(in the conte)3.095 F .595(xt of the e)-.15 F -.15(xe)-.15 G .595
-(cuting shell.).15 F .596(The standard output of)5.595 F F2(command)
-3.296 E F0 .596(is con-)3.866 F .387
-(nected via a pipe to a \214le descriptor in the e)108 324 R -.15(xe)
--.15 G .387(cuting shell, and that \214le descriptor is assigned to).15
-F F2 -.27(NA)2.886 G(ME).27 E F0([0].)A .57(The standard input of)108
-336 R F2(command)3.27 E F0 .571
-(is connected via a pipe to a \214le descriptor in the e)3.84 F -.15(xe)
--.15 G .571(cuting shell, and that).15 F 1.221
-(\214le descriptor is assigned to)108 348 R F2 -.27(NA)3.721 G(ME).27 E
-F0 3.721([1]. This)B 1.221(pipe is established before an)3.721 F 3.72
-(yr)-.15 G 1.22(edirections speci\214ed by the)-3.72 F 1.58
-(command \(see)108 360 R/F3 9/Times-Bold@0 SF(REDIRECTION)4.08 E F0
-(belo)3.83 E 4.08(w\). The)-.25 F 1.581
-(\214le descriptors can be utilized as ar)4.08 F 1.581
-(guments to shell com-)-.18 F .149
-(mands and redirections using standard w)108 372 R .149(ord e)-.1 F
-2.649(xpansions. Other)-.15 F .148(than those created to e)2.649 F -.15
-(xe)-.15 G .148(cute command and).15 F 2.462
-(process substitutions, the \214le descriptors are not a)108 384 R -.25
-(va)-.2 G 2.463(ilable in subshells.).25 F 2.463
-(The process ID of the shell)7.463 F(spa)108 396 Q 1.115(wned to e)-.15
-F -.15(xe)-.15 G 1.115(cute the coprocess is a).15 F -.25(va)-.2 G 1.115
-(ilable as the v).25 F 1.115(alue of the v)-.25 F(ariable)-.25 E F2 -.27
-(NA)3.615 G(ME).27 E F0 3.615(_PID. The)B F1(wait)3.615 E F0 -.2(bu)
-3.615 G(iltin).2 E(command may be used to w)108 408 Q
+(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
-424.8 R F1(copr)2.836 E(oc)-.18 E F0 .336(command al)2.836 F -.1(wa)-.1
+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 436.8 Q(xit status of)
--.15 E F2(command)2.5 E F0(.)A F1(Shell Function De\214nitions)87 453.6
-Q F0 2.698(As)108 465.6 S .198
+(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 477.6 S .5 -.25(ew s)
+(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 F2(fname)108 494.4
-Q F0(\(\))2.5 E F2(compound\255command)2.5 E F0([)2.5 E F2 -.37(re)C
-(dir).37 E(ection)-.37 E F0(])A F1(function)108 506.4 Q F2(fname)2.5 E
-F0([\(\)])2.5 E F2(compound\255command)2.5 E F0([)2.5 E F2 -.37(re)C
-(dir).37 E(ection)-.37 E F0(])A .216(This de\214nes a function named)144
-518.4 R F2(fname)2.716 E F0 5.217(.T)C .217(he reserv)-5.217 F .217
-(ed w)-.15 F(ord)-.1 E F1(function)2.717 E F0 .217(is optional.)2.717 F
-.217(If the)5.217 F F1(function)2.717 E F0(re-)2.717 E(serv)144 530.4 Q
-.68(ed w)-.15 F .68(ord is supplied, the parentheses are optional.)-.1 F
-(The)5.68 E F2(body)3.18 E F0 .68(of the function is the compound)3.18 F
-(command)144 542.4 Q F2(compound\255command)2.784 E F0(\(see)3.354 E F1
-.084(Compound Commands)2.584 F F0(abo)2.584 E -.15(ve)-.15 G 2.584
-(\). That).15 F .084(command is usually a)2.584 F F2(list)144 554.4 Q F0
-.044(of commands between { and }, b)2.544 F .044(ut may be an)-.2 F
-2.544(yc)-.15 G .044(ommand listed under)-2.544 F F1 .044
-(Compound Commands)2.544 F F0(abo)144 566.4 Q -.15(ve)-.15 G 2.901(,w)
-.15 G .401(ith one e)-2.901 F .401(xception: If the)-.15 F F1(function)
-2.901 E F0(reserv)2.901 E .401(ed w)-.15 F .401(ord is used, b)-.1 F
-.402(ut the parentheses are not sup-)-.2 F 1.046
-(plied, the braces are required.)144 578.4 R F2(compound\255command)
-6.046 E F0 1.046(is e)3.546 F -.15(xe)-.15 G 1.046(cuted whene).15 F
--.15(ve)-.25 G(r).15 E F2(fname)3.546 E F0 1.045(is speci\214ed as)3.546
-F .365(the name of a simple command.)144 590.4 R .365(When in)5.365 F F2
-.366(posix mode)2.865 F F0(,)A F2(fname)2.866 E F0 .366(must be a v)
-2.866 F .366(alid shell)-.25 F F2(name)2.866 E F0 .366(and may)2.866 F
-.894(not be the name of one of the POSIX)144 602.4 R F2 .893(special b)
-3.393 F(uiltins)-.2 E F0 5.893(.I)C 3.393(nd)-5.893 G(ef)-3.393 E .893
-(ault mode, a function name can be)-.1 F(an)144 614.4 Q 3.649(yu)-.15 G
-1.149(nquoted shell w)-3.649 F 1.15(ord that does not contain)-.1 F F1
-($)3.65 E F0 6.15(.A)C 1.45 -.15(ny r)-6.15 H 1.15(edirections \(see).15
-F F3(REDIRECTION)3.65 E F0(belo)3.4 E(w\))-.25 E .417(speci\214ed when \
-a function is de\214ned are performed when the function is e)144 626.4 R
--.15(xe)-.15 G 2.916(cuted. The).15 F -.15(ex)2.916 G .416(it status).15
-F .733(of a function de\214nition is zero unless a syntax error occurs \
-or a readonly function with the same)144 638.4 R .178(name already e)144
-650.4 R 2.678(xists. When)-.15 F -.15(exe)2.678 G .178(cuted, the e).15
-F .178(xit status of a function is the e)-.15 F .177
-(xit status of the last com-)-.15 F(mand e)144 662.4 Q -.15(xe)-.15 G
-(cuted in the body).15 E 5(.\()-.65 G(See)-5 E F3(FUNCTIONS)2.5 E F0
+(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 679.2 Q F0 .982(In a non-interacti)108 691.2 R 1.282 -.15(ve s)-.25 H
+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 F1(interacti)3.482 E -.1(ve)-.1 G(_comments).1
-E F0 .982(option to the)3.482 F F1(shopt)3.482 E F0 -.2(bu)108 703.2 S
+(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 F1(#)3.451 E F0 .951(causes that w)3.451
+-.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 715.2 R
+(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 F1(interacti)3.105 E -.1(ve)-.1 G(_com-).1 E(ments)108 727.2 Q F0
-1.337(option enabled does not allo)3.837 F 3.837(wc)-.25 G 3.836
-(omments. The)-3.837 F F1(interacti)3.836 E -.1(ve)-.1 G(_comments).1 E
-F0 1.336(option is on by def)3.836 F 1.336(ault in)-.1 F(GNU Bash 5.1)72
-768 Q(2020 October 29)141.235 E(7)195.395 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(interacti)108 84 Q
-.3 -.15(ve s)-.25 H(hells.).15 E/F1 10.95/Times-Bold@0 SF -.11(QU)72
-100.8 S -.438(OT).11 G(ING).438 E/F2 10/Times-Italic@0 SF(Quoting)108
-112.8 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
+.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
-124.8 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 136.8 Q -.15
+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
-153.6 R F2(metac)2.788 E(har)-.15 E(acter)-.15 E(s)-.1 E F0 .288
-(listed abo)2.788 F .588 -.15(ve u)-.15 H(nder).15 E/F3 9/Times-Bold@0
-SF(DEFINITIONS)2.788 E F0 .288
-(has special meaning to the shell and must be)2.538 F
-(quoted if it is to represent itself.)108 165.6 Q 1.345
-(When the command history e)108 182.4 R 1.344(xpansion f)-.15 F 1.344
+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 F2(history e)108 194.4 Q(xpansion)-.2 E F0(character)2.5 E 2.5
-(,u)-.4 G(sually)-2.5 E/F4 10/Times-Bold@0 SF(!)2.5 E F0 2.5(,m)C
-(ust be quoted to pre)-2.5 E -.15(ve)-.25 G(nt history e).15 E
-(xpansion.)-.15 E(There are three quoting mechanisms: the)108 211.2 Q F2
-(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 228 S .463
-(on-quoted backslash \()-2.962 F F4(\\)A F0 2.963(\)i)C 2.963(st)-2.963
-G(he)-2.963 E F2 .463(escape c)3.153 F(har)-.15 E(acter)-.15 E F0 5.463
+-.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 240 Q
-1.554(ws, with the e)-.25 F 1.553(xception of <ne)-.15 F 4.053
-(wline>. If)-.25 F(a)4.053 E F4(\\)4.053 E F0(<ne)A 1.553
+.463(alue of the ne)-.25 F .463(xt character that)-.15 F(follo)108 484.8
+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 252 R F4(\\)2.847 E F0(<ne)A .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 264 Q -.15(ve)-.25 G(ly ignored\).).15 E .295
-(Enclosing characters in single quotes preserv)108 280.8 R .295
+(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 292.8 Q -.15(ve)
+(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 309.6 R .034
+(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
-321.6 S .108(ception of).15 F F4($)2.608 E F0(,)A F4<92>2.608 E F0(,)A
-F4(\\)2.608 E F0 2.608(,a)C .107(nd, when history e)-2.608 F .107
-(xpansion is enabled,)-.15 F F4(!)2.607 E F0 5.107(.W)C .107
-(hen the shell is in)-5.107 F F2 .107(posix mode)2.607 F F0 2.607(,t)C
-(he)-2.607 E F4(!)2.607 E F0 .107(has no)2.607 F .46
-(special meaning within double quotes, e)108 333.6 R -.15(ve)-.25 G 2.96
+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 F4($)2.96 E F0(and)2.96 E F4<92>2.96 E F0(re-)
-2.96 E .563(tain their special meaning within double quotes.)108 345.6 R
+(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 357.6 Q .601(wed by one of the follo)-.25 F .602
-(wing characters:)-.25 F F4($)3.102 E F0(,)A F4<92>3.102 E F0(,)A F4(")
-3.935 E F0(,).833 E F4(\\)3.102 E F0 3.102(,o)C(r)-3.102 E F4(<newline>)
+(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 369.6 R .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 F4(!)2.63 E F0
-(appearing in double quotes is escaped using a backslash.)108 381.6 Q
-(The backslash preceding the)5 E F4(!)2.5 E F0(is not remo)5 E -.15(ve)
--.15 G(d.).15 E(The special parameters)108 398.4 Q F4(*)2.5 E F0(and)2.5
-E F4(@)2.5 E F0(ha)2.5 E .3 -.15(ve s)-.2 H
+-.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 -.8(Wo)108 415.2 S .211
-(rds of the form).8 F F4($)2.711 E F0<08>A F2(string)A F0 2.711<0861>C
-.211(re treated specially)-2.711 F 5.211(.T)-.65 G .211(he w)-5.211 F
-.211(ord e)-.1 F .212(xpands to)-.15 F F2(string)2.712 E F0 2.712(,w)C
-.212(ith backslash-escaped char)-2.712 F(-)-.2 E .605
-(acters replaced as speci\214ed by the ANSI C standard.)108 427.2 R .604
-(Backslash escape sequences, if present, are decoded)5.605 F(as follo)
-108 439.2 Q(ws:)-.25 E F4(\\a)144 451.2 Q F0(alert \(bell\))180 451.2 Q
-F4(\\b)144 463.2 Q F0(backspace)180 463.2 Q F4(\\e)144 475.2 Q(\\E)144
-487.2 Q F0(an escape character)180 487.2 Q F4(\\f)144 499.2 Q F0
-(form feed)180 499.2 Q F4(\\n)144 511.2 Q F0(ne)180 511.2 Q 2.5(wl)-.25
-G(ine)-2.5 E F4(\\r)144 523.2 Q F0(carriage return)180 523.2 Q F4(\\t)
-144 535.2 Q F0(horizontal tab)180 535.2 Q F4(\\v)144 547.2 Q F0 -.15(ve)
-180 547.2 S(rtical tab).15 E F4(\\\\)144 559.2 Q F0(backslash)180 559.2
-Q F4<5c08>144 571.2 Q F0(single quote)180 571.2 Q F4(\\")144 583.2 Q F0
-(double quote)180 583.2 Q F4(\\?)144 595.2 Q F0(question mark)180 595.2
-Q F4(\\)144 607.2 Q F2(nnn)A F0(the eight-bit character whose v)180
-607.2 Q(alue is the octal v)-.25 E(alue)-.25 E F2(nnn)2.5 E F0
-(\(one to three octal digits\))2.5 E F4(\\x)144 619.2 Q F2(HH)A F0
-(the eight-bit character whose v)180 619.2 Q(alue is the he)-.25 E
-(xadecimal v)-.15 E(alue)-.25 E F2(HH)2.5 E F0(\(one or tw)2.5 E 2.5(oh)
--.1 G .3 -.15(ex d)-2.5 H(igits\)).15 E F4(\\u)144 631.2 Q F2(HHHH)A F0
-1.506(the Unicode \(ISO/IEC 10646\) character whose v)180 643.2 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 655.2 Q 2.5(xd)-.15 G(igits\))-2.5 E F4
-(\\U)144 667.2 Q F2(HHHHHHHH)A F0 .548
-(the Unicode \(ISO/IEC 10646\) character whose v)180 679.2 R .547
-(alue is the he)-.25 F .547(xadecimal v)-.15 F(alue)-.25 E F2(HHHHH-)
-3.047 E(HHH)180 691.2 Q F0(\(one to eight he)2.5 E 2.5(xd)-.15 G
-(igits\))-2.5 E F4(\\c)144 703.2 Q F2(x)A F0 2.5(ac)180 703.2 S(ontrol-)
--2.5 E F2(x)A F0(character)2.5 E(The e)108 720 Q(xpanded result is sing\
-le-quoted, as if the dollar sign had not been present.)-.15 E
-(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(8)195.395 E 0 Cg EP
+(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 2.64(Ad)108 84 S
-.14(ouble-quoted string preceded by a dollar sign \()-2.64 F/F1 10
-/Times-Bold@0 SF($)A F0(")A/F2 10/Times-Italic@0 SF(string)A F0 .14
-("\) will cause the string to be translated according)B .31
-(to the current locale.)108 96 R(The)5.31 E F2 -.1(ge)2.809 G(tte).1 E
-(xt)-.2 E F0 .309(infrastructure performs the message catalog lookup an\
-d translation, using)2.809 F(the)108 108 Q F1(LC_MESSA)2.625 E(GES)-.55
-E F0(and)2.625 E F1(TEXTDOMAIN)2.625 E F0 .125(shell v)2.625 F 2.625
-(ariables. If)-.25 F .126(the current locale is)2.626 F F1(C)2.626 E F0
-(or)2.626 E F1(POSIX)2.626 E F0 2.626(,o)C 2.626(ri)-2.626 G 2.626(ft)
--2.626 G(here)-2.626 E .362(are no translations a)108 120 R -.25(va)-.2
-G .362(ilable, the dollar sign is ignored.).25 F .362
-(If the string is translated and replaced, the replace-)5.362 F
-(ment is double-quoted.)108 132 Q/F3 10.95/Times-Bold@0 SF -.81(PA)72
-148.8 S(RAMETERS).81 E F0(A)108 160.8 Q F2(par)4.574 E(ameter)-.15 E F0
-.824(is an entity that stores v)4.054 F 3.324(alues. It)-.25 F .824
-(can be a)3.324 F F2(name)3.685 E F0 3.325(,an).18 G(umber)-3.325 E
-3.325(,o)-.4 G 3.325(ro)-3.325 G .825(ne of the special characters)
--3.325 F .802(listed belo)108 172.8 R 3.302(wu)-.25 G(nder)-3.302 E F1
-.802(Special P)3.302 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.801(.A)
-.18 G -.25(va)-2.5 G .801(riable has a).25 F F2(value)108 184.8 Q F0
-.368(and zero or more)2.868 F F2(attrib)2.868 E(utes)-.2 E F0 5.369(.A)C
-(ttrib)-5.369 E .369(utes are assigned using the)-.2 F F1(declar)2.869 E
-(e)-.18 E F0 -.2(bu)2.869 G .369(iltin command \(see).2 F F1(declar)
-2.869 E(e)-.18 E F0(belo)108 196.8 Q 2.5(wi)-.25 G(n)-2.5 E/F4 9
-/Times-Bold@0 SF(SHELL B)2.5 E(UIL)-.09 E(TIN COMMANDS)-.828 E/F5 9
-/Times-Roman@0 SF(\).)A F0 2.755(Ap)108 213.6 S .255
-(arameter is set if it has been assigned a v)-2.755 F 2.754(alue. The)
--.25 F .254(null string is a v)2.754 F .254(alid v)-.25 F 2.754
-(alue. Once)-.25 F 2.754(av)2.754 G .254(ariable is set, it)-3.004 F
-(may be unset only by using the)108 225.6 Q F1(unset)2.5 E F0 -.2(bu)2.5
-G(iltin command \(see).2 E F4(SHELL B)2.5 E(UIL)-.09 E(TIN COMMANDS)
--.828 E F0(belo)2.25 E(w\).)-.25 E(A)108 242.4 Q F2(variable)2.79 E F0
-(may be assigned to by a statement of the form)2.68 E F2(name)144 259.2
-Q F0(=[)A F2(value)A F0(])A(If)108 276 Q F2(value)3.022 E F0 .232
-(is not gi)2.912 F -.15(ve)-.25 G .232(n, the v).15 F .232
-(ariable is assigned the null string.)-.25 F(All)5.233 E F2(values)3.023
-E F0(under)3.003 E .233(go tilde e)-.18 F .233(xpansion, parameter)-.15
-F .515(and v)108 288 R .515(ariable e)-.25 F .515
+(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 F4(EXP)3.015 E(ANSION)-.666 E F0(belo)108 300 Q 2.698(w\). If)
--.25 F .198(the v)2.698 F .198(ariable has its)-.25 F F1(integer)2.698 E
-F0(attrib)2.698 E .198(ute set, then)-.2 F F2(value)2.988 E F0 .198
-(is e)2.878 F -.25(va)-.25 G .199(luated as an arithmetic e).25 F .199
-(xpression e)-.15 F -.15(ve)-.25 G(n).15 E .902(if the $\(\(...\)\) e)
-108 312 R .902(xpansion is not used \(see)-.15 F F1 .901
-(Arithmetic Expansion)3.401 F F0(belo)3.401 E 3.401(w\). W)-.25 F .901
-(ord splitting is not performed,)-.8 F 1.178(with the e)108 324 R 1.178
-(xception of)-.15 F F1("$@")3.678 E F0 1.178(as e)3.678 F 1.179
-(xplained belo)-.15 F 3.679(wu)-.25 G(nder)-3.679 E F1 1.179(Special P)
-3.679 F(arameters)-.1 E F0 6.179(.P)C 1.179(athname e)-6.329 F 1.179
-(xpansion is not)-.15 F 3.649(performed. Assignment)108 336 R 1.149
-(statements may also appear as ar)3.649 F 1.148(guments to the)-.18 F F1
-(alias)3.648 E F0(,)A F1(declar)3.648 E(e)-.18 E F0(,)A F1(typeset)3.648
-E F0(,)A F1(export)3.648 E F0(,)A F1 -.18(re)108 348 S(adonly).18 E F0
-3.288(,a)C(nd)-3.288 E F1(local)3.288 E F0 -.2(bu)3.288 G .788
-(iltin commands \().2 F F2(declar)A(ation)-.15 E F0 3.288
-(commands\). When)3.288 F(in)3.289 E F2 .789(posix mode)3.289 F F0 3.289
-(,t)C .789(hese b)-3.289 F .789(uiltins may)-.2 F 1.496
-(appear in a command after one or more instances of the)108 360 R F1
-(command)3.996 E F0 -.2(bu)3.996 G 1.496
-(iltin and retain these assignment).2 F(statement properties.)108 372 Q
-.376(In the conte)108 388.8 R .376
-(xt where an assignment statement is assigning a v)-.15 F .376
-(alue to a shell v)-.25 F .377(ariable or array inde)-.25 F .377
+-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 400.8 R(ariable')
+(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 412.8 S
+-.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 .252
-(applied to a v)108 424.8 R .252(ariable for which the)-.25 F F2(inte)
-2.752 E -.1(ge)-.4 G(r).1 E F0(attrib)2.752 E .252(ute has been set,)-.2
-F F2(value)2.752 E F0 .251(is e)2.751 F -.25(va)-.25 G .251
-(luated as an arithmetic e).25 F(xpres-)-.15 E .05
-(sion and added to the v)108 436.8 R(ariable')-.25 E 2.55(sc)-.55 G .05
-(urrent v)-2.55 F .05(alue, which is also e)-.25 F -.25(va)-.25 G 2.55
-(luated. When).25 F .05(+= is applied to an array v)2.55 F(ari-)-.25 E
-.459(able using compound assignment \(see)108 448.8 R F1(Arrays)2.959 E
-F0(belo)2.959 E .459(w\), the v)-.25 F(ariable')-.25 E 2.959(sv)-.55 G
-.459(alue is not unset \(as it is when using)-3.209 F .265(=\), and ne)
-108 460.8 R 2.765(wv)-.25 G .265(alues are appended to the array be)
--3.015 F .265(ginning at one greater than the array')-.15 F 2.765(sm)
--.55 G .265(aximum inde)-2.765 F 2.765(x\()-.15 G(for)-2.765 E(inde)108
-472.8 Q -.15(xe)-.15 G 3.402(da).15 G .902
-(rrays\) or added as additional k)-3.402 F -.15(ey)-.1 G<ad76>.15 E .901
-(alue pairs in an associati)-.25 F 1.201 -.15(ve a)-.25 H(rray).15 E
-5.901(.W)-.65 G .901(hen applied to a string-)-5.901 F -.25(va)108 484.8
-S(lued v).25 E(ariable,)-.25 E F2(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 501.6 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 513.6 R
-F1(declar)2.816 E(e)-.18 E F0(and)2.816 E F1(local)2.816 E F0(belo)2.816
-E .316(w\) to create a)-.25 F 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 525.6 R(allo)2.918 E .418(ws v)-.25 F .418
+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 537.6 R .132
+(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 549.6 R 1.357
+(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 561.6 R .971
+(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 573.6 R(or instance, if a v)-.15 E
+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/F6 10/Courier@0 SF(declare -n ref=$1)144 591.6 Q
-F0 .302(inside the function creates a nameref v)108 609.6 R(ariable)-.25
+(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 621.6 R 1.092(and assignments to)3.592 F F1
+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 633.6 R .144(ute modi\214cations to the v)-.2 F
+(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 645.6 S(r).25 E F0 .868
+(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 657.6 R .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
-669.6 Q -.15(ve)-.25 G 3.032(nt).15 G(he)-3.032 E F1(namer)3.032 E(ef)
+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 681.6 R 3.033(ariables. Namerefs)-.25 F
+-.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 693.6
+-.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 705.6 Q(GNU Bash 5.1)72 768 Q(2020 October 29)
-141.235 E(9)195.395 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/F1 10/Times-Bold@0
-SF -.2(Po)87 84 S(sitional P).2 E(arameters)-.1 E F0(A)108 96 Q/F2 10
-/Times-Italic@0 SF .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 108 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 120 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 shell function i\
-s e)108 132 Q -.15(xe)-.15 G(cuted \(see).15 E/F3 9/Times-Bold@0 SF
-(FUNCTIONS)2.5 E F0(belo)2.25 E(w\).)-.25 E 1.404(When a positional par\
-ameter consisting of more than a single digit is e)108 148.8 R 1.403
-(xpanded, it must be enclosed in)-.15 F(braces \(see)108 160.8 Q F3(EXP)
-2.5 E(ANSION)-.666 E F0(belo)2.25 E(w\).)-.25 E F1(Special P)87 177.6 Q
-(arameters)-.1 E F0 1.674(The shell treats se)108 189.6 R -.15(ve)-.25 G
-1.674(ral parameters specially).15 F 6.675(.T)-.65 G 1.675
-(hese parameters may only be referenced; assignment to)-6.675 F
-(them is not allo)108 201.6 Q(wed.)-.25 E F1(*)108 213.6 Q F0 .224
-(Expands to the positional parameters, starting from one.)144 213.6 R
-.223(When the e)5.224 F .223(xpansion is not within double)-.15 F .662
-(quotes, each positional parameter e)144 225.6 R .662
+(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 237.6 R 1.082
+(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 249.6 R .914
+.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 261.6 R F3(IFS)3.39 E F0 .89
+(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 273.6 Q F2(c)
+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 F3(IFS)3.332 E F0 -.25(va)3.082 G 3.332(riable. If)
-.25 F F3(IFS)3.332 E F0 .833(is unset, the parameters are)3.082 F
-(separated by spaces.)144 285.6 Q(If)5 E F3(IFS)2.5 E F0
+(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 297.6 Q F0 .722
-(Expands to the positional parameters, starting from one.)144 297.6 R
+(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 309.6 R 1.165
+-.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 321.6 R .655
+(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 333.6 S .748
+(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 345.6 R 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 357.6 Q -.25(va)-.25 G .412
+($@)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
-369.6 R .379(ginning part of the original w)-.15 F .379(ord, and the e)
+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 381.6
+(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 393.6 Q F1($@)A F0 2.5("a)C(nd)-2.5 E F1($@)2.5 E F0
+(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 405.6 Q F0
-(Expands to the number of positional parameters in decimal.)144 405.6 Q
-F1(?)108 417.6 Q F0(Expands to the e)144 417.6 Q
+-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 429.6 Q F0 .882
-(Expands to the current option \215ags as speci\214ed upon in)144 429.6
+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 441.6 Q F1<ad69>2.5 E F0(option\).)2.5 E F1($)108 453.6 Q F0 .214
-(Expands to the process ID of the shell.)144 453.6 R .214
-(In a \(\) subshell, it e)5.214 F .214
-(xpands to the process ID of the current)-.15 F
-(shell, not the subshell.)144 465.6 Q F1(!)108 477.6 Q F0 .499(Expands \
-to the process ID of the job most recently placed into the background, \
-whether e)144 477.6 R -.15(xe)-.15 G(cuted).15 E
-(as an asynchronous command or using the)144 489.6 Q F1(bg)2.5 E F0 -.2
-(bu)2.5 G(iltin \(see).2 E F3(JOB CONTR)2.5 E(OL)-.27 E F0(belo)2.25 E
-(w\).)-.25 E F1(0)108 501.6 Q F0 .886
-(Expands to the name of the shell or shell script.)144 501.6 R .886
+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 513.6 S -.1(ke).2 G 2.668(dw).1 G .168
+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 525.6 R F1($0)3.395 E F0 .895(is set to the \214rst ar)
+(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 537.6 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 554.4 Q(ariables)-.92 E F0(The follo)108 566.4 Q(wing v)-.25
-E(ariables are set by the shell:)-.25 E F1(_)108 583.2 Q F0 1.526
-(At shell startup, set to the pathname used to in)144 583.2 R -.2(vo)-.4
+(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 595.2 R .173
+(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 607.2 R -.15
+(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 619.2 R -.2(vo)-.4 G .565 -.1(ke e).2 H .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 631.2 Q(ed.)-.1 E F1 -.3(BA)108 643.2 S(SH).3 E F0
-(Expands to the full \214lename used to in)144 643.2 Q -.2(vo)-.4 G .2
+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
-655.2 S(SHOPTS).3 E F0 2.549(Ac)144 667.2 S .049
+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 679.2 R
-F1(shopt)2.616 E F0 -.2(bu)2.616 G .116(iltin command \(see).2 F F3 .116
+(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
-691.2 R F3 -.27(BA)3.567 G(SHOPTS).27 E F0 1.067(are those reported as)
-3.317 F F2(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 703.2 Q F1(bash)3.141 E F0 .642(starts up, ea\
-ch shell option in the list will be enabled before reading an)3.141 F
-3.142(ys)-.15 G .642(tartup \214les.)-3.142 F(This v)144 715.2 Q
-(ariable is read-only)-.25 E(.)-.65 E(GNU Bash 5.1)72 768 Q
-(2020 October 29)141.235 E(10)190.395 E 0 Cg EP
-%%Page: 11 11
-%%BeginPageSetup
-BP
-%%EndPageSetup
-/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
-(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0
-SF -.3(BA)108 84 S(SHPID).3 E F0 .188
-(Expands to the process ID of the current)144 96 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 108 R F1(bash)3.048
-E F0 .548(to be re-initialized.)3.048 F .549(Assignments to)5.549 F/F2 9
-/Times-Bold@0 SF -.27(BA)3.049 G(SHPID).27 E F0(ha)144 120 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 132 S(SH_ALIASES).3 E F0 1.195
-(An associati)144 144 R 1.495 -.15(ve a)-.25 H 1.195(rray v).15 F 1.195
-(ariable whose members correspond to the internal list of aliases as ma\
-in-)-.25 F .16(tained by the)144 156 R F1(alias)2.66 E F0 -.2(bu)2.66 G
-2.66(iltin. Elements).2 F .16
+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 168 R
+(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 180 S(SH_ALIASES).3 E F0
+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 192 S(SH_ARGC).3 E F0 .934(An array v)144 204 R
+-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 216 S .535(cution call stack.).15 F .535
-(The number of parameters to the current subroutine \(shell function or\
- script)5.535 F -.15(exe)144 228 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
+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
-240 R F2 -.27(BA)3.765 G(SH_ARGC).27 E/F3 9/Times-Roman@0 SF(.)A F0
+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 252 R .947
+(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 264 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 276 Q(ug)-.2 E F0(is not set, may result in inconsistent v)
-2.5 E(alues.)-.25 E F1 -.3(BA)108 288 S(SH_ARGV).3 E F0 .206(An array v)
-144 300 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 i\
-s at the top of the stack; the \214rst parameter of the initial)144 312
-R 1.424(call is at the bottom.)144 324 R 1.424(When a subroutine is e)
+(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 336
-S(SH_ARGV).27 E F3(.)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 348 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 360 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 372 Q(alues.)-.25 E F1 -.3(BA)108 384 S(SH_ARGV0).3 E
-F0 .25(When referenced, this v)144 396 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 408 R -.15(ve)-.15 G
+(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 420 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
+(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 432 Q F1 -.3(BA)
-108 444 S(SH_CMDS).3 E F0 .668(An associati)144 456 R .968 -.15(ve a)
--.25 H .668(rray v).15 F .668(ariable whose members correspond to the i\
-nternal hash table of commands)-.25 F .195(as maintained by the)144 468
-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 does no\
-t cause command names to be remo)144 480 R -.15(ve)-.15 G 3.352(df).15 G
-.852(rom the hash)-3.352 F 2.5(table. If)144 492 R F1 -.3(BA)2.5 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 504 S(SH_COMMAND).3 E F0 1.242
-(The command currently being e)144 516 R -.15(xe)-.15 G 1.243
+(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 528 R -.15(xe)-.15 G .262(cuting at the time of the trap.).15 F(If)
-144 540 Q F1 -.3(BA)2.5 G(SH_COMMAND).3 E F0
+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 552 S(SH_EXECUTION_STRING).3 E F0(The command ar)
-144 564 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 576 S(SH_LINENO).3 E F0 .692
-(An array v)144 588 R .692(ariable whose members are the line numbers i\
-n source \214les where each corresponding)-.25 F .97(member of)144 600 R
-F2(FUNCN)3.47 E(AME)-.18 E F0 -.1(wa)3.22 G 3.47(si).1 G -1.9 -.4(nv o)
--3.47 H -.1(ke).4 G(d.).1 E F1(${B)5.969 E(ASH_LINENO[)-.3 E/F4 10
-/Times-Italic@0 SF($i)A F1(]})A F0 .969
-(is the line number in the source)3.469 F 14.671(\214le \()144 612 R F1
-(${B)A(ASH_SOURCE[)-.3 E F4($i+1)A F1(]})A F0 17.171(\)w)C(here)-17.171
-E F1(${FUNCN)17.172 E(AME[)-.2 E F4($i)A F1(]})A F0 -.1(wa)17.172 G
-17.172(sc).1 G 14.672(alled \(or)-17.172 F F1(${B)144 624 Q(ASH_LINENO[)
--.3 E F4($i-1)A F1(]})A F0 .115
+-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
-636 Q(.)-.55 E F1 -.3(BA)108 648 S(SH_LO).3 E(AD)-.4 E(ABLES_P)-.35 E
--.95(AT)-.74 G(H).95 E F0 4.07(Ac)144 660 S 1.57(olon-separated list of\
+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 672 Q F1(enable)2.5 E F0(command.)
-2.5 E F1 -.3(BA)108 684 S(SH_REMA).3 E(TCH)-.95 E F0 .006(An array v)144
-696 R .006(ariable whose members are assigned by the)-.25 F F1(=~)2.506
+(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 708 R .007
+(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 4.331(The element with inde)144 720 R(x)-.15 E
-F4(n)6.831 E F0 4.331(is the portion of the string matching the)6.831 F
-F4(n)6.83 E F0 4.33(th parenthesized)B(GNU Bash 5.1)72 768 Q
-(2020 October 29)141.235 E(11)190.395 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(sube)144 84 Q
-(xpression.)-.15 E/F1 10/Times-Bold@0 SF -.3(BA)108 96 S(SH_SOURCE).3 E
-F0 .125(An array v)144 108 R .125(ariable whose members are the source \
-\214lenames where the corresponding shell function)-.25 F .781
-(names in the)144 120 R/F2 9/Times-Bold@0 SF(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 10
-/Times-Italic@0 SF($i)A F1(]})A F0(is)3.28 E(de\214ned in the \214le)144
-132 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 144 S(SH_SUBSHELL).3 E F0 .296
-(Incremented by one within each subshell or subshell en)144 156 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 168 R 3.777(vironment. The)-.4 F
+-.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 180 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 192 S
-(SH_VERSINFO).3 E F0 2.644(Ar)144 204 S .144(eadonly array v)-2.644 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 216 S
+(.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 234 S(SH_VERSINFO[).3 E F0(0)A F1(])A F0(The major v)264 234 Q
+(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 246 S(SH_VERSINFO[).3 E F0(1)A F1(])A F0(The minor v)264 246 Q
+(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 258 S(SH_VERSINFO[).3 E F0(2)A F1(])A F0(The patch le)264 258 Q -.15
-(ve)-.25 G(l.).15 E F1 -.3(BA)144 270 S(SH_VERSINFO[).3 E F0(3)A F1(])A
-F0(The b)264 270 Q(uild v)-.2 E(ersion.)-.15 E F1 -.3(BA)144 282 S
-(SH_VERSINFO[).3 E F0(4)A F1(])A F0(The release status \(e.g.,)264 282 Q
-F3(beta1)2.5 E F0(\).)A F1 -.3(BA)144 294 S(SH_VERSINFO[).3 E F0(5)A F1
-(])A F0(The v)264 294 Q(alue of)-.25 E F2(MA)2.5 E(CHTYPE)-.495 E/F4 9
-/Times-Roman@0 SF(.)A F1 -.3(BA)108 306 S(SH_VERSION).3 E F0
-(Expands to a string describing the v)144 318 Q
+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
-330 Q(ORD)-.1 E F0 .397(An inde)144 342 R 2.897(xi)-.15 G(nto)-2.897 E
+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 354 R -.25(va)-.2 G 1.181
+(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 366 Q(ogrammable Completion)-.18 E
-F0(belo)2.5 E(w\).)-.25 E F1(COMP_KEY)108 378 Q F0(The k)144 390 Q .3
+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 402 Q F0 1.208
-(The current command line.)144 414 R 1.208(This v)6.208 F 1.208
+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 426 R -.2(vo)-.4 G -.1(ke).2 G 3.537(db).1 G 3.537
+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 438 Q(w\).)-.25 E F1(COMP_POINT)108 450 Q F0 .667
-(The inde)144 462 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
+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
-474 R .535(alue of this v)-.25 F .535(ariable is equal to)-.25 F F1
-(${#COMP_LINE})144 486 Q F0 5.705(.T)C .705(his v)-5.705 F .704
+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 498 S -.1(ke).2 G 2.5(db).1 G 2.5(yt)-2.5 G
+-.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
-510 Q F0 .041(Set to an inte)144 522 R .041(ger v)-.15 F .041(alue corr\
+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 534 R F3 -.5(TA)2.837 G(B).5 E F0
-2.837(,f)C .337(or normal completion,)-2.837 F F3(?)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 F3(!)144 546 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 F3(@)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 558 R F3(%)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
+-.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 570 R -.2(vo)-.4 G -.1(ke).2 G 3.204(db).1 G 3.204
+(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 582 Q F0(belo)2.5 E(w\).)-.25 E F1(COMP_W)108 594 Q(ORDBREAKS)
--.1 E F0 1.336(The set of characters that the)144 606 R F1 -.18(re)3.836
+(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 618 R F2(COMP_W)3.125 E(ORDBREAKS)-.09 E F0 .626
+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 630 Q F1(COMP_W)108 642 Q(ORDS)-.1 E
-F0 .654(An array v)144 654 R .654(ariable \(see)-.25 F F1(Arrays)3.154 E
+(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 666 R
+-.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 F2(COMP_W)
+(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
-678 R -.15(ve)-.15 G 6.558(.T).15 G 1.558(his v)-6.558 F 1.558
+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 690 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 702 Q(OC)-.3 E F0 .168(An array v)
-144 714 R .168(ariable \(see)-.25 F F1(Arrays)2.668 E F0(belo)2.669 E
+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 726 Q F1(Copr)2.5 E(ocesses)
--.18 E F0(abo)2.5 E -.15(ve)-.15 G(\).).15 E(GNU Bash 5.1)72 768 Q
-(2020 October 29)141.235 E(12)190.395 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(DIRST)108 84 Q -.55(AC)-.9 G(K).55 E F0 .79(An array v)144 96 R .79
-(ariable \(see)-.25 F F1(Arrays)3.29 E F0(belo)3.289 E .789
+-.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 108 R
+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 120 R .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 132 Q F1(popd)3.45 E F0
+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 144 R
-5.379(.I)-.65 G(f)-5.379 E/F2 9/Times-Bold@0 SF(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 156 Q F1(EPOCHREAL)108 168 Q(TIME)
--.92 E F0 .337(Each time this parameter is referenced, it e)144 180 R
-.338(xpands to the number of seconds since the Unix Epoch)-.15 F(\(see)
-144 192 Q/F3 10/Times-Italic@0 SF(time)2.917 E F0 .417
-(\(3\)\) as a \215oating point v)B .416
+.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 F2(EPOCHRE-)2.916 E(AL)144 204 Q(TIME)-.828 E F0
-1.09(are ignored.)3.34 F(If)6.09 E F2(EPOCHREAL)3.59 E(TIME)-.828 E F0
+(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 216 Q F1(EPOCHSECONDS)108 228 Q F0 .338
-(Each time this parameter is referenced, it e)144 240 R .337
+(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
-252 Q F3(time)4.041 E F0 4.041(\(3\)\). Assignments)B(to)4.041 E F2
-(EPOCHSECONDS)4.041 E F0 1.542(are ignored.)3.792 F(If)6.542 E F2
+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 264 Q -.15(ve)-.25 G 2.5(ni).15 G
+(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 276 Q F0 1.104(Expands to the ef)144 276 R(fecti)-.25 E 1.403
+(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 288 Q(.)-.65 E F1(FUNCN)108 300 Q(AME)
--.2 E F0 .478(An array v)144 312 R .479
+(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 324 R 2.777(x0i)-.15 G 2.777(st)-2.777 G .276
+(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 336 R .384(x\) is)-.15 F/F4
+(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 348 R -.15(xe)-.15 G 2.576(cuting. Assignments).15 F(to)
-2.576 E F2(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 F2(FUNCN)2.575 E
+(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 360 Q -.15(ve)-.25 G 2.5(ni).15 G 2.5(fi)-2.5
+(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
-378 R .111(ariable can be used with)-.25 F F1 -.3(BA)2.611 G(SH_LINENO)
+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 390 S(ME).2 E F0
+(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 402 R -.15(Fo)5.012 G
-2.512(ri).15 G(nstance,)-2.512 E F1(${FUNCN)2.512 E(AME[)-.2 E F3($i)A
+(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 F3($i+1)A F1(]})A F0 1.184
-(at line number)144 414 R F1(${B)3.684 E(ASH_LINENO[)-.3 E F3($i)A F1
+-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 426 Q F1(GR)108 438 Q(OUPS)-.3 E F0 1.228
-(An array v)144 450 R 1.228(ariable containing the list of groups of wh\
-ich the current user is a member)-.25 F 6.229(.A)-.55 G(ssign-)-6.229 E
-.572(ments to)144 462 R F2(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 474 Q F1(HISTCMD)108 486 Q F0 2.81
-(The history number)144 498 R 5.31(,o)-.4 G 5.31(ri)-5.31 G(nde)-5.31 E
+(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 510 Q F0 1.135(are ignored.)3.385 F(If)6.135 E F2
+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 522 Q F1(HOSTN)108
-534 Q(AME)-.2 E F0(Automatically set to the name of the current host.)
-144 546 Q F1(HOSTTYPE)108 558 Q F0 .222(Automatically set to a string t\
-hat uniquely describes the type of machine on which)144 570 R F1(bash)
+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
-582 R(def)2.5 E(ault is system-dependent.)-.1 E F1(LINENO)108 594 Q F0
+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 606 R .078(current sequential line n\
-umber \(starting with 1\) within a script or function.)144 618 R .079
-(When not in a script or)5.078 F .307(function, the v)144 630 R .307
+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 642 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 654 Q
+(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 666 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 678 Q F3
-(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 690 Q F0 .294
-(An array v)144 702 R .294(ariable \(see)-.25 F F1(Arrays)2.794 E F0
+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 714 S(riable name is supplied.).25 E
-(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(13)190.395 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(OLDPWD)108 84 Q F0(The pre)144 96 Q(vious w)-.25 E
+(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 108 Q(ARG)-.9 E F0 1.626(The v)144 120 R 1.627
+(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 9
-/Times-Bold@0 SF(SHELL)4.127 E -.09(BU)144 132 S(IL).09 E(TIN COMMANDS)
--.828 E F0(belo)2.25 E(w\).)-.25 E F1(OPTIND)108 144 Q F0 1.652
-(The inde)144 156 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 168 S(IL).09 E(TIN COMMANDS)-.828 E F0(belo)
-2.25 E(w\).)-.25 E F1(OSTYPE)108 180 Q F0 .329(Automatically set to a s\
-tring that describes the operating system on which)144 192 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
-204 Q(ault is system-dependent.)-.1 E F1(PIPEST)108 216 Q -.95(AT)-.9 G
-(US).95 E F0 .61(An array v)144 228 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 240 Q -.15(xe)-.15 G(cuted fore).15 E
+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 252 Q F0(The process ID of the shell')144 252 Q 2.5(sp)-.55 G
+(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 264 Q F0(The current w)144 264 Q
+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 276 Q F0 .417(Each time this parameter is referenced, it e)
-144 288 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 300 R
+(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 312 Q -.15(ve)-.25 G 2.5(ni).15 G 2.5(fi)-2.5 G 2.5(ti)-2.5 G 2.5
-(ss)-2.5 G(ubsequently reset.)-2.5 E F1(READLINE_LINE)108 324 Q F0 1.546
-(The contents of the)144 336 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/F3 10/Courier@0 SF 1.547(bind -x)4.047 F F0(\(see)4.047 E F2
-1.547(SHELL B)4.047 F(UIL)-.09 E 1.547(TIN COM-)-.828 F(MANDS)144 348 Q
-F0(belo)2.25 E(w\).)-.25 E F1(READLINE_MARK)108 360 Q F0 .107
-(The position of the mark \(sa)144 372 R -.15(ve)-.2 G 2.607(di).15 G
-.107(nsertion point\) in the)-2.607 F F1 -.18(re)2.606 G(adline).18 E F0
-.106(line b)2.606 F(uf)-.2 E(fer)-.25 E 2.606(,f)-.4 G .106(or use with)
--2.606 F F3 .106(bind -x)2.606 F F0(\(see)144 384 Q F2 1.016(SHELL B)
-3.516 F(UIL)-.09 E 1.016(TIN COMMANDS)-.828 F F0(belo)3.266 E 3.516
-(w\). The)-.25 F 1.017(characters between the insertion point and the)
-3.516 F(mark are often called the)144 396 Q/F4 10/Times-Italic@0 SF -.37
-(re)2.5 G(gion)-.03 E F0(.)A F1(READLINE_POINT)108 408 Q F0 .314
-(The position of the insertion point in the)144 420 R F1 -.18(re)2.813 G
+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 F3 .313(bind -x)2.813 F F0(\(see)2.813 E F2
-(SHELL)2.813 E -.09(BU)144 432 S(IL).09 E(TIN COMMANDS)-.828 E F0(belo)
-2.25 E(w\).)-.25 E F1(REPL)108 444 Q(Y)-.92 E F0
-(Set to the line of input read by the)144 456 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 468 Q F0 .795(Each time this parameter is referen\
-ced, the number of seconds since shell in)144 480 R -.2(vo)-.4 G .795
-(cation is returned.).2 F .713(If a v)144 492 R .712
-(alue is assigned to)-.25 F F2(SECONDS)3.212 E/F5 9/Times-Roman@0 SF(,)A
-F0 .712(the v)2.962 F .712
-(alue returned upon subsequent references is the number)-.25 F .627
-(of seconds since the assignment plus the v)144 504 R .627
-(alue assigned.)-.25 F .628(The number of seconds at shell in)5.627 F
--.2(vo)-.4 G(ca-).2 E .458(tion and the current time is al)144 516 R -.1
-(wa)-.1 G .458(ys determined by querying the system clock.).1 F(If)5.457
-E F2(SECONDS)2.957 E F0 .457(is un-)2.707 F
-(set, it loses its special properties, e)144 528 Q -.15(ve)-.25 G 2.5
+.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 540 Q F0 3.262(Ac)144 552 S .763
-(olon-separated list of enabled shell options.)-3.262 F .763(Each w)
+-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 564 Q F0 1.174(option to the)3.674 F
-F1(set)3.674 E F0 -.2(bu)3.674 G 1.174(iltin command \(see).2 F F2 1.173
-(SHELL B)3.673 F(UIL)-.09 E 1.173(TIN COMMANDS)-.828 F F0(belo)3.423 E
-3.673(w\). The)-.25 F(options)3.673 E .019(appearing in)144 576 R F2
-(SHELLOPTS)2.519 E F0 .019(are those reported as)2.269 F F4(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 .02(ariable is in the en)-.25 F(vironment)-.4 E
-(when)144 588 Q F1(bash)3.142 E F0 .642(starts up, each shell option in\
- the list will be enabled before reading an)3.142 F 3.141(ys)-.15 G .641
-(tartup \214les.)-3.141 F(This v)144 600 Q(ariable is read-only)-.25 E
-(.)-.65 E F1(SHL)108 612 Q(VL)-.92 E F0
-(Incremented by one each time an instance of)144 624 Q F1(bash)2.5 E F0
-(is started.)2.5 E F1(SRANDOM)108 636 Q F0 .76(This v)144 648 R .76
-(ariable e)-.25 F .761(xpands to a 32-bit pseudo-random number each tim\
-e it is referenced. The random)-.15 F .565
-(number generator is not linear on systems that support)144 660 R F3
-(/dev/urandom)3.064 E F0(or)3.064 E F4(ar)3.064 E(c4r)-.37 E(andom)-.15
-E F0 3.064(,s)C 3.064(oe)-3.064 G(ach)-3.064 E .788
+(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
-672 R .788(The random number generator)5.788 F .088
-(cannot be seeded, so assignments to this v)144 684 R .087(ariable ha)
--.25 F .387 -.15(ve n)-.2 H 2.587(oe).15 G -.25(ff)-2.587 G 2.587
-(ect. If).25 F F2(SRANDOM)2.587 E F0 .087(is unset, it loses its)2.337 F
-(special properties, e)144 696 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 708 Q
-F0(Expands to the user ID of the current user)144 708 Q 2.5(,i)-.4 G
+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 .993(The follo)108 724.8 R .993(wing v)-.25 F .994
+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 .994
-(alue to a v)-.25 F(ariable;)-.25 E(GNU Bash 5.1)72 768 Q
-(2020 October 29)141.235 E(14)190.395 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
-(these cases are noted belo)108 84 Q -.65(w.)-.25 G/F1 10/Times-Bold@0
-SF -.3(BA)108 100.8 S(SH_COMP).3 E -.95(AT)-.74 G F0 .503(The v)144
-112.8 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/F2 9
-/Times-Bold@0 SF .502(SHELL COMP)3.002 F -.855(AT)-.666 G .502
-(IBILITY MODE).855 F F0(be-)2.752 E(lo)144 124.8 Q 2.662(wf)-.25 G .162
-(or a description of the v)-2.662 F .162(arious compatibility le)-.25 F
--.15(ve)-.25 G .162(ls and their ef).15 F 2.663(fects. The)-.25 F -.25
-(va)2.663 G .163(lue may be a dec-).25 F .33
-(imal number \(e.g., 4.2\) or an inte)144 136.8 R .33
+(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 148.8 S(SH_COMP).3 E -.95
-(AT)-.74 G F0 .86
-(is unset or set to the empty string, the compatibility le)4.31 F -.15
-(ve)-.25 G 3.361(li).15 G 3.361(ss)-3.361 G .861(et to the def)-3.361 F
-(ault)-.1 E .39(for the current v)144 160.8 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 .277
-(bility le)144 172.8 R -.15(ve)-.25 G .278
+-.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.778(lt).15 G 2.778(ot)-2.778 G .278(he def)-2.778 F
-.278(ault for the)-.1 F 1.401(current v)144 184.8 R 3.901(ersion. The)
--.15 F -.25(va)3.901 G 1.401(lid v).25 F 1.401
+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.9(wu)-.25 G(nder)-3.9 E F2(BSHELL)144 196.8 Q
-/F3 9/Times-Roman@0 SF(COMP)A -.999(AT)-.828 G(IBILITY).999 E F2(MODE)A
-F3(.)A F0 -.15(Fo)4.997 G 2.997(re).15 G .497(xample, 4.2 and 42 are v)
--3.147 F .497(alid v)-.25 F .498(alues that correspond to the)-.25 F F1
-.774(compat42 shopt)144 208.8 R F0 .774
-(option and set the compatibility le)3.274 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 .773
-(ersion is also a v)-.15 F(alid)-.25 E -.25(va)144 220.8 S(lue.).25 E F1
--.3(BA)108 232.8 S(SH_ENV).3 E F0 .505(If this parameter is set when)144
-244.8 R F1(bash)3.005 E F0 .505(is e)3.005 F -.15(xe)-.15 G .506
-(cuting a shell script, its v).15 F .506
-(alue is interpreted as a \214lename)-.25 F .391
-(containing commands to initialize the shell, as in)144 256.8 R/F4 10
-/Times-Italic@0 SF(~/.bashr)2.39 E(c)-.37 E F0 5.39(.T).31 G .39(he v)
--5.39 F .39(alue of)-.25 F F2 -.27(BA)2.89 G(SH_ENV).27 E F0 .39
-(is subjected)2.64 F .525(to parameter e)144 268.8 R .525
+(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 280.8 Q
-F2 -.666(PA)5 G(TH)-.189 E F0
+(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 292.8 S(SH_XTRA).3 E(CEFD)-.55 E F0 .481(If set to an inte)144 304.8
-R .481(ger corresponding to a v)-.15 F .481(alid \214le descriptor)-.25
-F(,)-.4 E F1(bash)2.98 E F0 .48(will write the trace output gener)2.98 F
-(-)-.2 E 3.114(ated when)144 316.8 R/F5 10/Courier@0 SF 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 F2 -.27(BA)144
-328.8 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 F2 -.27(BA)2.638
-G(SH_XTRA).27 E(CEFD)-.495 E F0 .138(or assigning it)2.388 F 2.531(the \
-empty string causes the trace output to be sent to the standard error)
-144 340.8 R 7.531(.N)-.55 G 2.531(ote that setting)-7.531 F F2 -.27(BA)
-144 352.8 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.991 F
-(standard error being closed.)144 364.8 Q F1(CDP)108 376.8 Q -.95(AT)
--.74 G(H).95 E F0 1.247(The search path for the)144 388.8 R F1(cd)3.747
-E F0 3.747(command. This)3.747 F 1.248
-(is a colon-separated list of directories in which the)3.747 F 3.796
-(shell looks for destination directories speci\214ed by the)144 400.8 R
-F1(cd)6.295 E F0 6.295(command. A)6.295 F 3.795(sample v)6.295 F 3.795
-(alue is)-.25 F F5(".:~:/usr")144 412.8 Q F0(.)A F1(CHILD_MAX)108 424.8
-Q F0 .997(Set the number of e)144 436.8 R .997(xited child status v)-.15
-F .997(alues for the shell to remember)-.25 F 5.997(.B)-.55 G .997
-(ash will not allo)-5.997 F 3.498(wt)-.25 G(his)-3.498 E -.25(va)144
-448.8 S 1.078(lue to be decreased belo).25 F 3.577(waP)-.25 G 1.077
-(OSIX-mandated minimum, and there is a maximum v)-3.577 F 1.077
-(alue \(cur)-.25 F(-)-.2 E(rently 8192\) that this may not e)144 460.8 Q
+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
-F1(COLUMNS)108 472.8 Q F0 .828(Used by the)144 484.8 R F1(select)3.328 E
-F0 .829(compound command to determine the terminal width when printing \
-selection)3.328 F 3.466(lists. Automatically)144 496.8 R .966
-(set if the)3.466 F F1(checkwinsize)3.466 E F0 .966
+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 508.8 Q F2(SIGWINCH)2.5 E F3(.)A
-F1(COMPREPL)108 520.8 Q(Y)-.92 E F0 .847(An array v)144 532.8 R .848
-(ariable from which)-.25 F F1(bash)3.348 E F0 .848
+.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 544.8 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 F1
+(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
-556.8 Q F1(EMA)108 568.8 Q(CS)-.55 E F0(If)144 580.8 Q F1(bash)2.535 E
-F0 .035(\214nds this v)2.535 F .035(ariable in the en)-.25 F .036
-(vironment when the shell starts with v)-.4 F(alue)-.25 E F5(t)2.536 E
-F0 2.536(,i)C 2.536(ta)-2.536 G .036(ssumes that the)-2.536 F
-(shell is running in an Emacs shell b)144 592.8 Q(uf)-.2 E
-(fer and disables line editing.)-.25 E F1(ENV)108 604.8 Q F0 .671
-(Expanded and e)144 604.8 R -.15(xe)-.15 G .671(cuted similarly to).15 F
-F2 -.27(BA)3.17 G(SH_ENV).27 E F0(\(see)2.92 E F1(INV)3.17 E(OCA)-.45 E
-(TION)-.95 E F0(abo)3.17 E -.15(ve)-.15 G 3.17(\)w).15 G .67
-(hen an interacti)-3.17 F -.15(ve)-.25 G(shell is in)144 616.8 Q -.2(vo)
--.4 G -.1(ke).2 G 2.5(di).1 G(n)-2.5 E F4(posix mode)2.5 E F0(.)A F1
-(EXECIGNORE)108 628.8 Q F0 2.716(Ac)144 640.8 S .216
-(olon-separated list of shell patterns \(see)-2.716 F F1 -.1(Pa)2.717 G
-(tter).1 E 2.717(nM)-.15 G(atching)-2.717 E F0 2.717(\)d)C .217
-(e\214ning the list of \214lenames to be)-2.717 F .117
-(ignored by command search using)144 652.8 R F1 -.74(PA)2.617 G(TH)-.21
-E F0 5.117(.F)C .116
-(iles whose full pathnames match one of these patterns)-5.117 F 1.432
-(are not considered e)144 664.8 R -.15(xe)-.15 G 1.432
+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.433(cution via).15 F F1 -.74(PA)144 676.8 S(TH)-.21 E F0
-2.909(lookup. This)2.909 F .408(does not af)2.908 F .408(fect the beha)
--.25 F .408(vior of the)-.2 F F1([)2.908 E F0(,)A F1(test)2.908 E F0
-2.908(,a)C(nd)-2.908 E F1([[)2.908 E F0 2.908(commands. Full)2.908 F
-(pathnames)2.908 E .364(in the command hash table are not subject to)144
-688.8 R F1(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 700.8
-1.67 -.15(ve t)-.2 H 1.37(he e).15 F -.15(xe)-.15 G 1.37
+(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 712.8 Q F1(extglob)2.5 E F0
-(shell option.)2.5 E(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(15)
-190.395 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/Times-Bold@0
-SF(FCEDIT)108 84 Q F0(The def)144 96 Q(ault editor for the)-.1 E F1(fc)
-2.5 E F0 -.2(bu)2.5 G(iltin command.).2 E F1(FIGNORE)108 108 Q F0 2.598
-(Ac)144 120 S .098(olon-separated list of suf)-2.598 F<8c78>-.25 E .098
-(es to ignore when performing \214lename completion \(see)-.15 F/F2 9
-/Times-Bold@0 SF(READLINE)2.599 E F0(belo)144 132 Q 2.705(w\). A)-.25 F
-.205(\214lename whose suf)2.705 F .205
-(\214x matches one of the entries in)-.25 F F2(FIGNORE)2.705 E F0 .205
-(is e)2.455 F .204(xcluded from the list)-.15 F(of matched \214lenames.)
-144 144 Q 2.5(As)5 G(ample v)-2.5 E(alue is)-.25 E/F3 10/Courier@0 SF
-(".o:~")2.5 E F0(.)A F1(FUNCNEST)108 156 Q F0 .23(If set to a numeric v)
-144 168 R .231
+(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.731(l. Function).15 F(in)2.731 E -.2(vo)-.4 G(-).2 E
-(cations that e)144 180 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 F1
-(GLOBIGNORE)108 192 Q F0 2.924(Ac)144 204 S .423(olon-separated list of\
+-.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.924 F(xpan-)-.15 E 2.947(sion. If)144 216 R 2.947<618c>2.947 G .447
-(le name matched by a pathname e)-2.947 F .448
-(xpansion pattern also matches one of the patterns in)-.15 F F2
-(GLOBIGNORE)144 228 Q/F4 9/Times-Roman@0 SF(,)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 F1
-(HISTCONTR)108 240 Q(OL)-.3 E F0 2.654(Ac)144 252 S .153
-(olon-separated list of v)-2.654 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 .153(If the list)
-5.153 F .49(of v)144 264 R .49(alues includes)-.25 F/F5 10
-/Times-Italic@0 SF(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 F1(space)2.99 E F0 .49
+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 .558(tory list.)144 276 R 3.058(Av)5.558 G .558
-(alue of)-3.308 F F5(ignor)3.068 E(edups)-.37 E F0 .558
-(causes lines matching the pre)3.328 F .557
-(vious history entry to not be sa)-.25 F -.15(ve)-.2 G(d.).15 E 2.925
-(Av)144 288 S .425(alue of)-3.175 F F5(ignor)2.935 E(eboth)-.37 E F0
-.426(is shorthand for)3.205 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.5 G .426
-(lue of).25 F F5(er)3.116 E(asedups)-.15 E F0(causes)3.196 E .699
-(all pre)144 300 R .698
+.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 .698(rom the history list before that line is)-3.198 F
-(sa)144 312 Q -.15(ve)-.2 G 2.763(d. An).15 F 2.763(yv)-.15 G .263
-(alue not in the abo)-3.013 F .563 -.15(ve l)-.15 H .263
-(ist is ignored.).15 F(If)5.263 E F2(HISTCONTR)2.763 E(OL)-.27 E F0 .264
-(is unset, or does not include)2.513 F 2.942(av)144 324 S .442(alid v)
--3.192 F .442(alue, all lines read by the shell parser are sa)-.25 F
--.15(ve)-.2 G 2.941(do).15 G 2.941(nt)-2.941 G .441
-(he history list, subject to the v)-2.941 F .441(alue of)-.25 F F2
-(HISTIGNORE)144 336 Q F4(.)A F0 1.981(The second and subsequent lines o\
-f a multi-line compound command are not)6.481 F
-(tested, and are added to the history re)144 348 Q -.05(ga)-.15 G
-(rdless of the v).05 E(alue of)-.25 E F2(HISTCONTR)2.5 E(OL)-.27 E F4(.)
-A F1(HISTFILE)108 360 Q F0 .181
-(The name of the \214le in which command history is sa)144 372 R -.15
-(ve)-.2 G 2.681(d\().15 G(see)-2.681 E F2(HIST)2.681 E(OR)-.162 E(Y)
--.315 E F0(belo)2.431 E 2.681(w\). The)-.25 F(def)2.681 E .181(ault v)
--.1 F(alue)-.25 E(is)144 384 Q F5(~/.bash_history)2.5 E F0 5(.I)C 2.5
+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 F1(HISTFILESIZE)108 396 Q F0
-1.622(The maximum number of lines contained in the history \214le.)144
-408 R 1.623(When this v)6.623 F 1.623(ariable is assigned a)-.25 F -.25
-(va)144 420 S .125(lue, the history \214le is truncated, if necessary)
-.25 F 2.625(,t)-.65 G 2.624(oc)-2.625 G .124
-(ontain no more than that number of lines by re-)-2.624 F(mo)144 432 Q
-.065(ving the oldest entries.)-.15 F .066(The history \214le is also tr\
-uncated to this size after writing it when a shell)5.065 F -.15(ex)144
-444 S 2.928(its. If).15 F .428(the v)2.928 F .428
-(alue is 0, the history \214le is truncated to zero size.)-.25 F .427
-(Non-numeric v)5.427 F .427(alues and numeric)-.25 F -.25(va)144 456 S
+(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 .152(alue of)-.25 F F1(HISTSIZE)2.652 E F0(after reading an)144
-468 Q 2.5(ys)-.15 G(tartup \214les.)-2.5 E F1(HISTIGNORE)108 480 Q F0
-2.658(Ac)144 492 S .158(olon-separated list of patterns used to decide \
-which command lines should be sa)-2.658 F -.15(ve)-.2 G 2.657(do).15 G
-2.657(nt)-2.657 G .157(he his-)-2.657 F .707(tory list.)144 504 R .707
-(Each pattern is anchored at the be)5.707 F .708
-(ginning of the line and must match the complete line)-.15 F .626
-(\(no implicit `)144 516 R F1(*)A F0 3.126('i)C 3.126(sa)-3.126 G 3.126
-(ppended\). Each)-3.126 F .626(pattern is tested ag)3.126 F .625
-(ainst the line after the checks speci\214ed by)-.05 F F2(HISTCONTR)144
-528 Q(OL)-.27 E F0 1.793(are applied.)4.043 F 1.793
+-.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 540 R 1.44(vious history line.)
+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
-552 Q -.15(ve)-.15 G 3.95(db).15 G 1.45(efore attempting a match.)-3.95
+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 564 R
+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.769 E F4(.)A F0
-(The pattern matching honors the setting of the)144 576 Q F1(extglob)2.5
-E F0(shell option.)2.5 E F1(HISTSIZE)108 588 Q F0 1.387
-(The number of commands to remember in the command history \(see)144 600
+(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.888 E -.25(va)144 612 S .413(lue is 0, commands are not sa)
+-.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 .412
-(alues less than zero result in e)-.25 F(v-)-.25 E .343
-(ery command being sa)144 624 R -.15(ve)-.2 G 2.843(do).15 G 2.843(nt)
--2.843 G .343(he history list \(there is no limit\).)-2.843 F .344
-(The shell sets the def)5.343 F .344(ault v)-.1 F .344(alue to)-.25 F
-(500 after reading an)144 636 Q 2.5(ys)-.15 G(tartup \214les.)-2.5 E F1
-(HISTTIMEFORMA)108 648 Q(T)-.95 E F0 .952(If this v)144 660 R .952
-(ariable is set and not null, its v)-.25 F .951
-(alue is used as a format string for)-.25 F F5(strftime)3.451 E F0 .951
-(\(3\) to print the)B .672
-(time stamp associated with each history entry displayed by the)144 672
-R F1(history)3.173 E F0 -.2(bu)3.173 G 3.173(iltin. If).2 F .673(this v)
-3.173 F .673(ariable is)-.25 F .144
-(set, time stamps are written to the history \214le so the)144 684 R
+(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.144 E(uses the history comment\
- character to distinguish timestamps from other history lines.)144 696 Q
-(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(16)190.395 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(HOME)108 84 Q F0 1.27
-(The home directory of the current user; the def)144 96 R 1.27(ault ar)
+(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 108 S(lue of this v).25 E
+(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 120 Q F0 1.015
-(Contains the name of a \214le in the same format as)144 132 R/F2 10
-/Times-Italic@0 SF(/etc/hosts)5.181 E F0 1.015
-(that should be read when the shell)5.181 F .55
-(needs to complete a hostname.)144 144 R .551
+(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.059(the shell is running; the ne)144 156 R 1.059
-(xt time hostname completion is attempted after the v)-.15 F 1.058
-(alue is changed,)-.25 F F1(bash)144 168 Q F0 .138
-(adds the contents of the ne)2.638 F 2.638<778c>-.25 G .138(le to the e)
--2.638 F .138(xisting list.)-.15 F(If)5.138 E/F3 9/Times-Bold@0 SF
-(HOSTFILE)2.638 E F0 .138(is set, b)2.388 F .139(ut has no v)-.2 F .139
-(alue, or)-.25 F .518(does not name a readable \214le,)144 180 R F1
-(bash)3.018 E F0 .518(attempts to read)3.018 F F2(/etc/hosts)4.683 E F0
-.517(to obtain the list of possible host-)4.683 F(name completions.)144
-192 Q(When)5 E F3(HOSTFILE)2.5 E F0
-(is unset, the hostname list is cleared.)2.25 E F1(IFS)108 204 Q F0(The)
-144 204 Q F2 .555(Internal F)3.635 F .555(ield Separ)-.45 F(ator)-.15 E
-F0 .555(that is used for w)3.785 F .556(ord splitting after e)-.1 F .556
-(xpansion and to split lines into)-.15 F -.1(wo)144 216 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 228 Q F0 .503
-(Controls the action of an interacti)144 240 R .803 -.15(ve s)-.25 H
-.503(hell on receipt of an).15 F F3(EOF)3.003 E F0 .503
-(character as the sole input.)2.753 F .503(If set,)5.503 F .426(the v)
-144 252 R .426(alue is the number of consecuti)-.25 F -.15(ve)-.25 G F3
+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 .303
-(on an input line before)144 264 R F1(bash)2.802 E F0 -.15(ex)2.802 G
+(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 .302(alue, or has)-.25 F(no v)144 276 Q(alue, the def)
+(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
-F3(EOF)2.5 E F0(signi\214es the end of input to the shell.)2.25 E F1
-(INPUTRC)108 288 Q F0 .26(The \214lename for the)144 300 R F1 -.18(re)
-2.76 G(adline).18 E F0 .26(startup \214le, o)2.76 F -.15(ve)-.15 G .26
-(rriding the def).15 F .261(ault of)-.1 F F2(~/.inputr)4.427 E(c)-.37 E
-F0(\(see)4.427 E F3(READLINE)2.761 E F0(be-)2.511 E(lo)144 312 Q(w\).)
--.25 E F1(INSIDE_EMA)108 324 Q(CS)-.55 E F0 .034(If this v)144 336 R
-.034(ariable appears in the en)-.25 F .034
-(vironment when the shell starts,)-.4 F F1(bash)2.533 E F0 .033
-(assumes that it is running in-)2.533 F(side an Emacs shell b)144 348 Q
+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 360 Q F0 1.239
-(Used to determine the locale cate)144 360 R 1.239(gory for an)-.15 F
-3.739(yc)-.15 G(ate)-3.739 E 1.24
+(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 372 Q F1(LC_)2.5 E F0(.)A F1(LC_ALL)108 384 Q F0 .974
-(This v)144 396 R .974(ariable o)-.25 F -.15(ve)-.15 G .974
-(rrides the v).15 F .973(alue of)-.25 F F3(LANG)3.473 E F0 .973(and an)
+(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
-.973(riable specifying a locale cate-).25 F(gory)144 408 Q(.)-.65 E F1
-(LC_COLLA)108 420 Q(TE)-.95 E F0 .411(This v)144 432 R .412(ariable det\
+.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.465(and determines the beha)144 444 R 1.465
-(vior of range e)-.2 F 1.464(xpressions, equi)-.15 F -.25(va)-.25 G
-1.464(lence classes, and collating sequences).25 F(within pathname e)144
-456 Q(xpansion and pattern matching.)-.15 E F1(LC_CTYPE)108 468 Q F0
-1.935(This v)144 480 R 1.936
+-.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.936(vior of character classes)-.2 F(within pathname e)144 492 Q
-(xpansion and pattern matching.)-.15 E F1(LC_MESSA)108 504 Q(GES)-.55 E
-F0(This v)144 516 Q(ariable determines the locale used to translate dou\
+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 528 Q F0(This v)144 540 Q(ariable determines the locale cate)-.25 E
-(gory used for number formatting.)-.15 E F1(LC_TIME)108 552 Q F0(This v)
-144 564 Q(ariable determines the locale cate)-.25 E
-(gory used for data and time formatting.)-.15 E F1(LINES)108 576 Q F0
-.055(Used by the)144 576 R F1(select)2.555 E F0 .054(compound command t\
-o determine the column length for printing selection lists.)2.555 F .264
-(Automatically set if the)144 588 R F1(checkwinsize)2.764 E F0 .264
-(option is enabled or in an interacti)2.764 F .565 -.15(ve s)-.25 H .265
-(hell upon receipt of a).15 F F3(SIGWINCH)144 600 Q/F4 9/Times-Roman@0
-SF(.)A F1(MAIL)108 612 Q F0 .422
-(If this parameter is set to a \214le or directory name and the)144 612
-R F3(MAILP)2.921 E -.855(AT)-.666 G(H).855 E F0 -.25(va)2.671 G .421
-(riable is not set,).25 F F1(bash)2.921 E F0(in-)2.921 E
-(forms the user of the arri)144 624 Q -.25(va)-.25 G 2.5(lo).25 G 2.5
+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 636 Q F0 .098
-(Speci\214es ho)144 648 R 2.598(wo)-.25 G .098(ften \(in seconds\))
--2.598 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 .099(When it is time)5.099 F .224
+(-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 660 R .223(If this v)5.223 F .223(ariable is unset,)-.25 F
-(or set to a v)144 672 Q(alue that is not a number greater than or equa\
-l to zero, the shell disables mail checking.)-.25 E F1(MAILP)108 684 Q
--.95(AT)-.74 G(H).95 E F0 2.99(Ac)144 696 S .49
+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 708 Q -.15(ve)-.25 G 2.62(si).15 G 2.62(nap)-2.62 G .12(articular \
+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 720 Q(xt of 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
-(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(17)190.395 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(MAILP)144 84 Q -.95(AT)-.74 G(H).95 E F0(=\010/v)A(ar/mail/bfox?"Y)
+(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 96 Q F0 .015
+(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 108 Q
-(ar/mail/)-.25 E F1($USER)A F0(\).)A F1(OPTERR)108 120 Q F0 .39
-(If set to the v)144 132 R .39(alue 1,)-.25 F F1(bash)2.89 E F0 .389
-(displays error messages generated by the)2.889 F F1(getopts)2.889 E F0
--.2(bu)2.889 G .389(iltin command \(see).2 F/F2 9/Times-Bold@0 SF .359
-(SHELL B)144 144 R(UIL)-.09 E .359(TIN COMMANDS)-.828 F F0(belo)2.609 E
-(w\).)-.25 E F2(OPTERR)5.359 E F0 .36
-(is initialized to 1 each time the shell is in)2.609 F -.2(vo)-.4 G -.1
-(ke).2 G(d).1 E(or a shell script is e)144 156 Q -.15(xe)-.15 G(cuted.)
-.15 E F1 -.74(PA)108 168 S(TH)-.21 E F0 .588
-(The search path for commands.)144 168 R .587
+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.588 F .471(for commands \(see)144 180 R F2 .471(COMMAND EXECUTION)
-2.971 F F0(belo)2.722 E 2.972(w\). A)-.25 F .472
-(zero-length \(null\) directory name in the)2.972 F -.25(va)144 192 S
-.536(lue of).25 F F2 -.666(PA)3.036 G(TH)-.189 E F0 .535
-(indicates the current directory)2.786 F 5.535(.A)-.65 G .535
-(null directory name may appear as tw)-2.5 F 3.035(oa)-.1 G(djacent)
--3.035 E .867(colons, or as an initial or trailing colon.)144 204 R .868
-(The def)5.868 F .868(ault path is system-dependent, and is set by the)
--.1 F(administrator who installs)144 216 Q F1(bash)2.5 E F0 5(.A)C
-(common v)-2.5 E(alue is)-.25 E/F3 10/Courier@0 SF
+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 228 Q F0(.)A F1(POSIXL)108 240 Q(Y_CORRECT)-.92 E F0 .471(If this v)
-144 252 R .471(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/F4 10
-/Times-Italic@0 SF .472(posix mode)2.972 F F0 .472(before reading)2.972
-F .011(the startup \214les, as if the)144 264 R F1(\255\255posix)2.511 E
+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 276 Q F1(bash)
-4.497 E F0(enables)4.497 E F4 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 F3 1.997
-(set -o posix)4.497 F F0 1.998(had been e)4.497 F -.15(xe)-.15 G(cuted.)
-.15 E(When the shell enters)144 288 Q F4(posix mode)2.5 E F0 2.5(,i)C
+.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 300 Q(OMPT_COMMAND)-.3 E F0 .155
-(If this v)144 312 R .155(ariable is set, and is an array)-.25 F 2.655
+(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 324 R .407(If this is set b)5.407 F
+(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 336 Q -.15(xe)-.15 G
-(cute instead.).15 E F1(PR)108 348 Q(OMPT_DIR)-.3 E(TRIM)-.4 E F0 .676
-(If set to a number greater than zero, the v)144 360 R .676
+(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 372 R .923(xpanding the)-.15 F F1(\\w)3.423
+(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 384 Q -.15(ve)-.15 G 2.5(da).15 G
-(re replaced with an ellipsis.)-2.5 E F1(PS0)108 396 Q F0 1.174(The v)
-144 396 R 1.174(alue of this parameter is e)-.25 F 1.174(xpanded \(see)
+(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 408 Q
--.15(xe)-.15 G(cuted.).15 E F1(PS1)108 420 Q F0 .064(The v)144 420 R
-.065(alue of this parameter is e)-.25 F .065(xpanded \(see)-.15 F F2(PR)
-2.565 E(OMPTING)-.27 E F0(belo)2.315 E .065
-(w\) and used as the primary prompt)-.25 F 2.5(string. The)144 432 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 444 Q F0 .118(The v)144 444 R .118
-(alue of this parameter is e)-.25 F .118(xpanded as with)-.15 F F2(PS1)
-2.617 E F0 .117(and used as the secondary prompt string.)2.367 F(The)
-5.117 E(def)144 456 Q(ault is `)-.1 E(`)-.74 E F1(>)A F0 -.74('')2.5 G
-(.).74 E F1(PS3)108 468 Q F0 1.115(The v)144 468 R 1.115
-(alue of this parameter is used as the prompt for the)-.25 F F1(select)
-3.615 E F0 1.116(command \(see)3.616 F F2 1.116(SHELL GRAM-)3.616 F(MAR)
-144 480 Q F0(abo)2.25 E -.15(ve)-.15 G(\).).15 E F1(PS4)108 492 Q F0
-.101(The v)144 492 R .101(alue of this parameter is e)-.25 F .101
-(xpanded as with)-.15 F F2(PS1)2.6 E F0 .1(and the v)2.35 F .1
-(alue is printed before each command)-.25 F F1(bash)144 504 Q F0 .334
-(displays during an e)2.834 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.835 E F0 .335(is repli-)2.585 F
-(cated multiple times, as necessary)144 516 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 528 Q F0 .543(This v)144 540 R .543(ariable e)-.25 F .543
-(xpands to the full pathname to the shell.)-.15 F .542
-(If it is not set when the shell starts,)5.543 F F1(bash)3.042 E F0
-(assigns to it the full pathname of the current user')144 552 Q 2.5(sl)
--.55 G(ogin shell.)-2.5 E F1(TIMEFORMA)108 564 Q(T)-.95 E F0 .826(The v)
-144 576 R .826
-(alue of this parameter is used as a format string specifying ho)-.25 F
-3.327(wt)-.25 G .827(he timing information for)-3.327 F .649
-(pipelines pre\214x)144 588 R .649(ed with the)-.15 F F1(time)3.149 E F0
-(reserv)3.149 E .649(ed w)-.15 F .648(ord should be displayed.)-.1 F
-(The)5.648 E F1(%)3.148 E F0 .648(character introduces)3.148 F .711
-(an escape sequence that is e)144 600 R .711(xpanded to a time v)-.15 F
-.712(alue or other information.)-.25 F .712(The escape sequences)5.712 F
-(and their meanings are as follo)144 612 Q
-(ws; the braces denote optional portions.)-.25 E F1(%%)144 630 Q F0 2.5
-(Al)194 630 S(iteral)-2.5 E F1(%)2.5 E F0(.)A F1(%[)144 642 Q F4(p)A F1
-(][l]R)A F0(The elapsed time in seconds.)194 642 Q F1(%[)144 654 Q F4(p)
-A F1(][l]U)A F0(The number of CPU seconds spent in user mode.)194 654 Q
-F1(%[)144 666 Q F4(p)A F1(][l]S)A F0
-(The number of CPU seconds spent in system mode.)194 666 Q F1(%P)144 678
-Q F0(The CPU percentage, computed as \(%U + %S\) / %R.)194 678 Q .87
-(The optional)144 694.8 R F4(p)3.37 E F0 .87(is a digit specifying the)
-3.37 F F4(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.525(point. A)
-144 706.8 R -.25(va)2.525 G .025
-(lue of 0 causes no decimal point or fraction to be output.).25 F .026
-(At most three places after the)5.025 F .538
-(decimal point may be speci\214ed; v)144 718.8 R .538(alues of)-.25 F F4
-(p)3.038 E F0 .537(greater than 3 are changed to 3.)3.037 F(If)5.537 E
-F4(p)3.037 E F0 .537(is not speci\214ed,)3.037 F(the v)144 730.8 Q
-(alue 3 is used.)-.25 E(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E
-(18)190.395 E 0 Cg EP
+(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 .667(The optional)
-144 84 R/F1 10/Times-Bold@0 SF(l)3.167 E F0 .668
-(speci\214es a longer format, including minutes, of the form)3.168 F/F2
-10/Times-Italic@0 SF(MM)3.168 E F0(m)A F2(SS)A F0(.)A F2(FF)A F0 3.168
-(s. The)B -.25(va)3.168 G(lue).25 E(of)144 96 Q F2(p)2.5 E F0
-(determines whether or not the fraction is included.)2.5 E 13.365
-(If this v)144 112.8 R 13.365(ariable is not set,)-.25 F F1(bash)15.865
-E F0 13.364(acts as if it had the v)15.865 F(alue)-.25 E F1($\010\\nr)
-144 124.8 Q(eal\\t%3lR\\nuser\\t%3lU\\nsys\\t%3lS\010)-.18 E F0 7.113
+(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
-136.8 R(trailing ne)2.5 E
+464.4 R(trailing ne)2.5 E
 (wline is added when the format string is displayed.)-.25 E F1(TMOUT)108
-148.8 Q F0 .941(If set to a v)144 160.8 R .941(alue greater than zero,)
--.25 F/F3 9/Times-Bold@0 SF(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 172.8 Q F1(select)2.81 E F0 .31
-(command terminates if input does not arri)2.81 F .611 -.15(ve a)-.25 H
-(fter).15 E F3(TMOUT)2.811 E F0 .311(seconds when input is com-)2.561 F
-.886(ing from a terminal.)144 184.8 R .886(In an interacti)5.886 F 1.185
--.15(ve s)-.25 H .885(hell, the v).15 F .885
-(alue is interpreted as the number of seconds to)-.25 F -.1(wa)144 196.8
+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 208.8
-Q -.15(ve)-.25 G(.).15 E F1(TMPDIR)108 220.8 Q F0 .391(If set,)144 232.8
-R F1(bash)2.891 E F0 .391(uses its v)2.891 F .391
-(alue as the name of a directory in which)-.25 F F1(bash)2.89 E F0 .39
-(creates temporary \214les for the)2.89 F(shell')144 244.8 Q 2.5(su)-.55
-G(se.)-2.5 E F1(auto_r)108 256.8 Q(esume)-.18 E F0 .53(This v)144 268.8
-R .53(ariable controls ho)-.25 F 3.03(wt)-.25 G .531
-(he shell interacts with the user and job control.)-3.03 F .531
-(If this v)5.531 F .531(ariable is set,)-.25 F .539(single w)144 280.8 R
+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 292.8 S .366(isting stopped job)
-.15 F 5.366(.T)-.4 G .366(here is no ambiguity allo)-5.366 F .366
-(wed; if there is more than one job be)-.25 F .367(ginning with)-.15 F
-1.125(the string typed, the job most recently accessed is selected.)144
-304.8 R(The)6.125 E F2(name)3.985 E F0 1.124(of a stopped job, in this)
-3.805 F(conte)144 316.8 Q 1.132
+ 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 F2 -.2(ex)3.633 G(act).2 E F0 3.633(,t).68 G 1.133
-(he string supplied must)-3.633 F .606
-(match the name of a stopped job e)144 328.8 R .606(xactly; if set to)
--.15 F F2(substring)3.445 E F0 3.105(,t).22 G .605
-(he string supplied needs to match a)-3.105 F .884
-(substring of the name of a stopped job)144 340.8 R 5.884(.T)-.4 G(he)
--5.884 E F2(substring)3.724 E F0 -.25(va)3.604 G .885(lue pro).25 F .885
-(vides functionality analogous to)-.15 F(the)144 352.8 Q F1(%?)3.334 E
-F0 .834(job identi\214er \(see)5.834 F F3 .834(JOB CONTR)3.334 F(OL)-.27
+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 .833(alue, the supplied string)-.25 F .315
-(must be a pre\214x of a stopped job')144 364.8 R 2.816(sn)-.55 G .316
-(ame; this pro)-2.816 F .316(vides functionality analogous to the)-.15 F
-F1(%)2.816 E F2(string)A F0(job)2.816 E(identi\214er)144 376.8 Q(.)-.55
-E F1(histchars)108 388.8 Q F0 .546(The tw)144 400.8 R 3.046(oo)-.1 G
-3.046(rt)-3.046 G .546(hree characters which control history e)-3.046 F
-.545(xpansion and tok)-.15 F .545(enization \(see)-.1 F F3(HIST)3.045 E
-(OR)-.162 E 2.795(YE)-.315 G(X-)-2.795 E -.666(PA)144 412.8 S(NSION).666
-E F0(belo)2.987 E 3.237(w\). The)-.25 F .737(\214rst character is the)
-3.237 F F2 .737(history e)3.237 F(xpansion)-.2 E F0(character)3.238 E
-3.238(,t)-.4 G .738(he character which sig-)-3.238 F .761
-(nals the start of a history e)144 424.8 R .761(xpansion, normally `)
--.15 F F1(!)A F0 3.261('. The)B .76(second character is the)3.261 F F2
-(quic)3.26 E 3.26(ks)-.2 G(ubstitution)-3.26 E F0(character)144 436.8 Q
-3.476(,w)-.4 G .977(hich is used as shorthand for re-running the pre)
--3.476 F .977(vious command entered, substituting)-.25 F .131
-(one string for another in the command.)144 448.8 R .131(The def)5.131 F
-.131(ault is `)-.1 F F1(^)A F0 2.63('. The)B .13
-(optional third character is the char)2.63 F(-)-.2 E .276(acter which i\
-ndicates that the remainder of the line is a comment when found as the \
-\214rst character)144 460.8 R .46(of a w)144 472.8 R .46
-(ord, normally `)-.1 F F1(#)A F0 2.959('. The)B .459
+-.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 .466(for the remaining w)144 484.8 R .466(ords on the line.)-.1
-F .467(It does not necessarily cause the shell parser to treat the rest)
-5.467 F(of the line as a comment.)144 496.8 Q F1(Arrays)87 513.6 Q(Bash)
-108 525.6 Q F0(pro)3.391 E .891(vides one-dimensional inde)-.15 F -.15
-(xe)-.15 G 3.391(da).15 G .891(nd associati)-3.391 F 1.191 -.15(ve a)
--.25 H .891(rray v).15 F 3.391(ariables. An)-.25 F 3.391(yv)-.15 G .89
-(ariable may be used as an)-3.641 F(inde)108 537.6 Q -.15(xe)-.15 G
-2.573(da).15 G .073(rray; the)-2.573 F F1(declar)2.573 E(e)-.18 E F0 -.2
-(bu)2.573 G .073(iltin will e).2 F .073(xplicitly declare an array)-.15
-F 5.073(.T)-.65 G .074(here is no maximum limit on the size of)-5.073 F
-.329(an array)108 549.6 R 2.829(,n)-.65 G .329(or an)-2.829 F 2.829(yr)
--.15 G .329(equirement that members be inde)-2.829 F -.15(xe)-.15 G
-2.829(do).15 G 2.829(ra)-2.829 G .328(ssigned contiguously)-2.829 F
-5.328(.I)-.65 G(nde)-5.328 E -.15(xe)-.15 G 2.828(da).15 G .328
-(rrays are refer)-2.828 F(-)-.2 E 1.595(enced using inte)108 561.6 R
+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
-573.6 Q(Unless otherwise noted, inde)5 E -.15(xe)-.15 G 2.5(da).15 G
+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.463(An inde)108 590.4 R -.15(xe)
--.15 G 4.963(da).15 G 2.463(rray is created automatically if an)-4.963 F
-4.963(yv)-.15 G 2.462(ariable is assigned to using the syntax)-5.213 F
-F2(name)4.962 E F0([)A F2(sub-)A(script)108 602.4 Q F0(]=)A F2(value)A
-F0 5.506(.T)C(he)-5.506 E F2(subscript)3.346 E F0 .507
+(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.507(.T)-.55 G 3.007(oe)
--6.307 G(x-)-3.157 E 1.193(plicitly declare an inde)108 614.4 R -.15(xe)
--.15 G 3.693(da).15 G(rray)-3.693 E 3.693(,u)-.65 G(se)-3.693 E F1
-(declar)3.693 E 3.693<65ad>-.18 G(a)-3.693 E F2(name)3.693 E F0(\(see)
-3.692 E F3 1.192(SHELL B)3.692 F(UIL)-.09 E 1.192(TIN COMMANDS)-.828 F
-F0(belo)3.442 E(w\).)-.25 E F1(de-)6.192 E(clar)108 626.4 Q 2.5<65ad>
--.18 G(a)-2.5 E F2(name)2.5 E F1([)A F2(subscript)A F1(])A F0
-(is also accepted; the)2.5 E F2(subscript)2.5 E F0(is ignored.)2.5 E
-(Associati)108 643.2 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 F2(name)2.5 E F0(.)A(Attrib)108
-660 Q .94(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.441 E F1
--.18(re)3.441 G(adonly).18 E F0 -.2(bu)3.441 G 3.441(iltins. Each).2 F
-(attrib)3.441 E(ute)-.2 E(applies to all members of an array)108 672 Q
+-.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 688.8
-R F2(name)4.147 E F0(=)A F1(\()A F0 -.25(va)C(lue).25 E F2(1)A F0 1.647
-(... v)4.147 F(alue)-.25 E F2(n)A F1(\))A F0 4.147(,w)C 1.647(here each)
--4.147 F F2(value)108 700.8 Q F0 .211(may be of the form [)2.711 F F2
-(subscript)A F0(]=)A F2(string)A F0 5.211(.I)C(nde)-5.211 E -.15(xe)-.15
-G 2.711(da).15 G .212(rray assignments do not require an)-2.711 F .212
-(ything b)-.15 F(ut)-.2 E F2(string)2.712 E F0(.)A(Each)108 712.8 Q F2
-(value)2.53 E F0 .029(in the list is e)2.529 F .029
+(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 F3(EXP)2.529 E(ANSION)-.666 E/F4 9
-/Times-Roman@0 SF(.)A F0(When)4.529 E .995(assigning to inde)108 724.8 R
--.15(xe)-.15 G 3.495(da).15 G .995(rrays, if the optional brack)-3.495 F
-.996(ets and subscript are supplied, that inde)-.1 F 3.496(xi)-.15 G
-3.496(sa)-3.496 G .996(ssigned to;)-3.496 F(GNU Bash 5.1)72 768 Q
-(2020 October 29)141.235 E(19)190.395 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 .417
-(otherwise the inde)108 84 R 2.917(xo)-.15 G 2.917(ft)-2.917 G .417
-(he element assigned is the last inde)-2.917 F 2.917(xa)-.15 G .416
-(ssigned to by the statement plus one.)-2.917 F(Inde)5.416 E(x-)-.15 E
-(ing starts at zero.)108 96 Q 1.288(When assigning to an associati)108
-112.8 R 1.588 -.15(ve a)-.25 H(rray).15 E 3.788(,t)-.65 G 1.288(he w)
+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
-124.8 R .608(ords that is interpreted as a sequence of alter)-.1 F(-)-.2
-E 1.956(nating k)108 136.8 R -.15(ey)-.1 G 4.456(sa).15 G 1.956(nd v)
--4.456 F(alues:)-.25 E/F1 10/Times-Italic@0 SF(name)4.456 E F0(=)A/F2 10
-/Times-Bold@0 SF(\()A F1 -.1(ke)4.456 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 F2(\))A F0 6.957(.T)C
-1.957(hese are treated identically to)-6.957 F F1(name)4.457 E F0(=)A F2
-(\()A F0([)108 148.8 Q F1 -.1(ke)C(y1)-.2 E F0(]=)A F1(value1)A F0([)
-3.133 E F1 -.1(ke)C(y2)-.2 E F0(]=)A F1(value2)A F0(...)3.133 E F2(\))A
-F0 5.633(.T)C .633(he \214rst w)-5.633 F .633
-(ord in the list determines ho)-.1 F 3.132(wt)-.25 G .632
-(he remaining w)-3.132 F .632(ords are inter)-.1 F(-)-.2 E .153
-(preted; all assignments in a list must be of the same type.)108 160.8 R
-.154(When using k)5.154 F -.15(ey)-.1 G(/v).15 E .154(alue pairs, the k)
--.25 F -.15(ey)-.1 G 2.654(sm).15 G .154(ay not be)-2.654 F
-(missing or empty; a \214nal missing v)108 172.8 Q(alue is treated lik)
--.25 E 2.5(et)-.1 G(he empty string.)-2.5 E .24
-(This syntax is also accepted by the)108 189.6 R F2(declar)2.74 E(e)-.18
-E F0 -.2(bu)2.739 G 2.739(iltin. Indi).2 F .239
-(vidual array elements may be assigned to using the)-.25 F F1(name)108
-201.6 Q F0([)A F1(subscript)A F0(]=)A F1(value)A F0 1.917
-(syntax introduced abo)4.416 F -.15(ve)-.15 G 6.917(.W).15 G 1.917
+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 F1(name)4.777 E F0 1.917(is sub-)
-4.597 F .116(scripted by a ne)108 213.6 R -.05(ga)-.15 G(ti).05 E .416
--.15(ve n)-.25 H(umber).15 E 2.616(,t)-.4 G .115
-(hat number is interpreted as relati)-2.616 F .415 -.15(ve t)-.25 H
-2.615(oo).15 G .115(ne greater than the maximum inde)-2.615 F(x)-.15 E
-(of)108 225.6 Q F1(name)2.676 E F0 2.676(,s)C 2.676(on)-2.676 G -2.25
--.15(eg a)-2.676 H(ti).15 E .476 -.15(ve i)-.25 H .177
+-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.677(xo)-.15 G 2.677<66ad>-2.677 G 2.677(1r)-2.677
-G .177(eferences the last el-)-2.677 F(ement.)108 237.6 Q(An)108 254.4 Q
-3.576(ye)-.15 G 1.076(lement of an array may be referenced using ${)
--3.576 F F1(name)A F0([)A F1(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 266.4 R 4.041(xpansion. If)-.15 F F1
-(subscript)4.041 E F0(is)4.041 E F2(@)4.041 E F0(or)4.041 E F2(*)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 F1(name)4.042 E F0(.)A 1.057
-(These subscripts dif)108 278.4 R 1.057(fer only when the w)-.25 F 1.057
+(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 290.4 Q F1(name)A F0 .52([*]} e)B
+(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 302.4 R/F3 9/Times-Bold@0 SF(IFS)3.875 E F0 1.375
-(special v)3.625 F 1.375(ariable, and ${)-.25 F F1(name)A F0 1.375
-([@]} e)B 1.375(xpands each element of)-.15 F F1(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 314.4 R F1(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 326.4 R .759
-(ord, the e)-.1 F .759
+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
-338.4 R .516(xpansion of the last parameter is joined with the last par\
+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 350.4 R .228(xpansion of the special parameters)-.15
-F F2(*)2.728 E F0(and)2.728 E F2(@)2.728 E F0(\(see)2.728 E F2 .228
+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 F1(name)A F0([)A F1(subscript)A F0(]})A -.15(ex)108 362.4
-S .886(pands to the length of ${).15 F F1(name)A F0([)A F1(subscript)A
-F0 3.386(]}. If)B F1(subscript)3.386 E F0(is)3.386 E F2(*)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 374.4
-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 386.4 R .928 -.15(ve t)
+(\). ${#).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 398.4 Q 2.5(,a)-.65 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
-415.2 R .595(ariable without a subscript is equi)-.25 F -.25(va)-.25 G
+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 427.2 R 2.5(yr)-.15 G(eference to a v)-2.5 E(ariable using a v)-.25
+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 444 Q
-(ariable is considered set if a subscript has been assigned a v)-.25 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 460.8 R -.15(ey)-.1 G 2.918(s\()
+.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 472.8 S .75
+(!)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
-484.8 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 501.6 Q F2(unset)
+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 513.6 Q F0 2.858(,f)C .358
+-.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 525.6 R -.15(ve)-.15 G 6.204(.U).15 G 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 537.6 Q F1(name)2.5 E F0(is an array)2.5
-E 2.5(,o)-.65 G(r)-2.5 E F2(unset)2.5 E F1(name)2.5 E F0([)A F1
-(subscript)A F0(], where)A F1(subscript)2.5 E F0(is)2.5 E F2(*)2.5 E F0
-(or)2.5 E F2(@)2.5 E F0 2.5(,r)C(emo)-2.5 E -.15(ve)-.15 G 2.5(st).15 G
-(he entire array)-2.5 E(.)-.65 E .029(When using a v)108 554.4 R .029
-(ariable name with a subscript as an ar)-.25 F .028
-(gument to a command, such as with)-.18 F F2(unset)2.528 E F0 2.528(,w)C
-.028(ithout us-)-2.528 F .937(ing the w)108 566.4 R .937(ord e)-.1 F
-.937(xpansion syntax described abo)-.15 F -.15(ve)-.15 G 3.437(,t).15 G
-.937(he ar)-3.437 F .938(gument is subject to pathname e)-.18 F 3.438
-(xpansion. If)-.15 F(path-)3.438 E(name e)108 578.4 Q
+(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 595.2 Q F2(declar)2.684 E(e)-.18 E F0(,)A F2(local)2.684 E F0
-2.684(,a)C(nd)-2.684 E F2 -.18(re)2.684 G(adonly).18 E F0 -.2(bu)2.684 G
+(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.683(da).15 G .183
-(rray and a)-2.683 F F2<ad41>2.683 E F0(op-)2.683 E .041
-(tion to specify an associati)108 607.2 R .341 -.15(ve a)-.25 H(rray).15
+(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.542 G(ad).18 E F0 -.2(bu)2.542 G .042(iltin ac-).2
-F .864(cepts a)108 619.2 R F2<ad61>3.364 E F0 .864
-(option to assign a list of w)3.364 F .864
-(ords read from the standard input to an array)-.1 F 5.863(.T)-.65 G(he)
--5.863 E F2(set)3.363 E F0(and)3.363 E F2(declar)3.363 E(e)-.18 E F0 -.2
-(bu)108 631.2 S(iltins display array v).2 E(alues in a w)-.25 E
-(ay that allo)-.1 E(ws them to be reused as assignments.)-.25 E/F4 10.95
-/Times-Bold@0 SF(EXP)72 648 Q(ANSION)-.81 E F0 .76(Expansion is perform\
-ed on the command line after it has been split into w)108 660 R 3.26
+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 672 S .201(pansion performed:).15 F F1(br)
+(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 .2
-(command sub-)2.901 F(stitution)108 684 Q F0(,).24 E F1(arithmetic e)
+(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 .418(The order of e)108 700.8 R .418(xpansions is: brace e)-.15
-F .418(xpansion; tilde e)-.15 F .419(xpansion, parameter and v)-.15 F
-.419(ariable e)-.25 F .419(xpansion, arithmetic)-.15 F -.15(ex)108 712.8
-S .196(pansion, and command substitution \(done in a left-to-right f).15
-F .195(ashion\); w)-.1 F .195(ord splitting; and pathname e)-.1 F(xpan-)
--.15 E(sion.)108 724.8 Q(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E
-(20)190.395 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 .257
-(On systems that can support it, there is an additional e)108 84 R .257
-(xpansion a)-.15 F -.25(va)-.2 G(ilable:).25 E/F1 10/Times-Italic@0 SF
-(pr)2.757 E .257(ocess substitution)-.45 F F0 5.257(.T)C .257
-(his is per)-5.257 F(-)-.2 E
-(formed at the same time as tilde, parameter)108 96 Q 2.5(,v)-.4 G
+(.).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 .003(After these e)108 112.8 R .003
+-.15 E .002(After these e)108 528 R .003
 (xpansions are performed, quote characters present in the original w)
--.15 F .002(ord are remo)-.1 F -.15(ve)-.15 G 2.502(du).15 G .002
-(nless the)-2.502 F(y)-.15 E(ha)108 124.8 Q .3 -.15(ve b)-.2 H
+-.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 .171(Only brace e)108 141.6 R .171(xpansion, w)-.15 F .171
+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 .172(ords of the e)-.1 F
-(x-)-.15 E .777(pansion; other e)108 153.6 R .776(xpansions e)-.15 F
+(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 .695(pansions of ")108 165.6 R/F2 10/Times-Bold@0 SF
-($@)A F0 3.195("a)C .695(nd ")-3.195 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 .696(as e)3.196 F .696(xplained abo)-.15 F .996
--.15(ve \()-.15 H(see).15 E/F3 9/Times-Bold@0 SF -.666(PA)3.196 G(-).666
-E(RAMETERS)108 177.6 Q/F4 9/Times-Roman@0 SF(\).)A F2(Brace Expansion)87
-194.4 Q F1(Br)108.58 206.4 Q .606(ace e)-.15 F(xpansion)-.2 E F0 .606
+-.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 218.4 Q F1 .415
+.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 .074(form of an optional)108 230.4 R F1(pr)3.823 E(eamble)
+(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 .489(sion between a pair of braces, follo)108 242.4 R
-.489(wed by an optional)-.25 F F1(postscript)4.239 E F0 5.49(.T).68 G
-.49(he preamble is pre\214x)-5.49 F .49(ed to each string)-.15 F .659(c\
-ontained within the braces, and the postscript is then appended to each\
- resulting string, e)108 254.4 R .658(xpanding left to)-.15 F(right.)108
-266.4 Q .718(Brace e)108 283.2 R .719(xpansions may be nested.)-.15 F
-.719(The results of each e)5.719 F .719
+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
+.719(The results of each e)5.719 F .719
 (xpanded string are not sorted; left to right order is)-.15 F(preserv)
-108 295.2 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.243(As)
-108 312 S .743(equence e)-3.243 F .743(xpression tak)-.15 F .743
-(es the form)-.1 F F2({)3.243 E F1(x)A F2(..)A F1(y)A F2([..)A F1(incr)A
-F2(]})A F0 3.243(,w)C(here)-3.243 E F1(x)3.243 E F0(and)3.242 E F1(y)
-3.242 E F0 .742(are either inte)3.242 F .742(gers or single characters,)
--.15 F(and)108 324 Q F1(incr)3.031 E F0 3.031(,a)C 3.032(no)-3.031 G
-.532(ptional increment, is an inte)-3.032 F(ger)-.15 E 5.532(.W)-.55 G
-.532(hen inte)-5.532 F .532(gers are supplied, the e)-.15 F .532
-(xpression e)-.15 F .532(xpands to each)-.15 F .078(number between)108
-336 R F1(x)2.578 E F0(and)2.578 E F1(y)2.578 E F0 2.578(,i)C(nclusi)
--2.578 E -.15(ve)-.25 G 5.078(.S).15 G .078(upplied inte)-5.078 F .077
-(gers may be pre\214x)-.15 F .077(ed with)-.15 F F1(0)2.577 E F0 .077
-(to force each term to ha)2.577 F .377 -.15(ve t)-.2 H(he).15 E .014
-(same width.)108 348 R .014(When either)5.014 F F1(x)2.514 E F0(or)2.514
-E F1(y)2.514 E F0(be)2.514 E .015(gins with a zero, the shell attempts \
-to force all generated terms to contain)-.15 F 1.143
-(the same number of digits, zero-padding where necessary)108 360 R 6.143
-(.W)-.65 G 1.143(hen characters are supplied, the e)-6.143 F(xpression)
--.15 E -.15(ex)108 372 S 1.064(pands to each character le).15 F 1.064
-(xicographically between)-.15 F F1(x)3.564 E F0(and)3.564 E F1(y)3.564 E
-F0 3.564(,i)C(nclusi)-3.564 E -.15(ve)-.25 G 3.564(,u).15 G 1.064
-(sing the def)-3.564 F 1.064(ault C locale.)-.1 F(Note)6.064 E .245
-(that both)108 384 R F1(x)2.745 E F0(and)2.745 E F1(y)2.745 E F0 .245
-(must be of the same type.)2.745 F .244
-(When the increment is supplied, it is used as the dif)5.245 F .244
-(ference be-)-.25 F(tween each term.)108 396 Q(The def)5 E
-(ault increment is 1 or \2551 as appropriate.)-.1 E .581(Brace e)108
-412.8 R .581(xpansion is performed before an)-.15 F 3.081(yo)-.15 G .581
-(ther e)-3.081 F .581(xpansions, and an)-.15 F 3.082(yc)-.15 G .582
-(haracters special to other e)-3.082 F(xpansions)-.15 E .016
-(are preserv)108 424.8 R .016(ed in the result.)-.15 F .016
-(It is strictly te)5.016 F(xtual.)-.15 E F2(Bash)5.016 E F0 .015
-(does not apply an)2.516 F 2.515(ys)-.15 G .015
-(yntactic interpretation to the con-)-2.515 F(te)108 436.8 Q
+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.501(Ac)108 453.6 S .001(orrectly-formed brace e)-2.501 F .001(\
+-.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 .458(quoted comma or a v)108 465.6 R .458
+ 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 .457(xpansion is left unchanged.)
--.15 F(A)108 477.6 Q F2({)2.521 E F0(or)2.521 E F2(,)2.521 E F0 .021
-(may be quoted with a backslash to pre)2.521 F -.15(ve)-.25 G .022
-(nt its being considered part of a brace e).15 F 2.522(xpression. T)-.15
-F 2.522(oa)-.8 G -.2(vo)-2.722 G(id).2 E .172
-(con\215icts with parameter e)108 489.6 R .172(xpansion, the string)-.15
+(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 501.6 Q
+.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 518.4 R(longer than in the abo)108 530.4 Q .3
+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
-547.2 Q -.65(w,)-.25 G(dist,b).65 E(ugs})-.2 E(or)108 559.2 Q(cho)144
-571.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 588 R .618
+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 .247
-(ing or closing braces specially when the)108 600 R 2.747(ya)-.15 G .247
-(ppear as part of a w)-2.747 F .248(ord, and preserv)-.1 F .248
-(es them in the output.)-.15 F F2(Bash)5.248 E F0(remo)108 612 Q -.15
+(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 624 Q F0 .514
-(appears identically in the output.)3.014 F .515(The same w)5.515 F .515
-(ord is output as)-.1 F F1 .515(\214le1 \214le2)4.925 F F0 .515(after e)
-3.035 F .515(xpansion by)-.15 F F2(bash)3.015 E F0(.)A .437
-(If strict compatibility with)108 636 R F2(sh)2.936 E F0 .436
+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 .436
-(xpansion with the)-.15 F F2(+B)108 648 Q F0(option to the)2.5 E F2(set)
-2.5 E F0(command \(see)2.5 E F3(SHELL B)2.5 E(UIL)-.09 E(TIN COMMANDS)
--.828 E F0(belo)2.25 E(w\).)-.25 E F2 -.18(Ti)87 664.8 S(lde Expansion)
-.18 E F0 1.086(If a w)108 676.8 R 1.086(ord be)-.1 F 1.086
-(gins with an unquoted tilde character \(`)-.15 F F2(~)A F0 1.087
+(+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 688.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 .725(in the tilde-pre\214x\
- are quoted, the characters in the tilde-pre\214x follo)108 700.8 R .726
-(wing the tilde are treated as a possible)-.25 F F1(lo)108 712.8 Q .523
-(gin name)-.1 F F0 5.523(.I)C 3.023(ft)-5.523 G .523
+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.023 F .522(alue of the shell parameter)-.25 F F3(HOME)108 724.8 Q F4
-(.)A F0(If)6.735 E F3(HOME)4.735 E F0 2.236
-(is unset, the home directory of the user e)4.486 F -.15(xe)-.15 G 2.236
-(cuting the shell is substituted instead.).15 F(GNU Bash 5.1)72 768 Q
-(2020 October 29)141.235 E(21)190.395 E 0 Cg EP
-%%Page: 22 22
+-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(Otherwise, the ti\
-lde-pre\214x is replaced with the home directory associated with the sp\
-eci\214ed login name.)108 84 Q .093
-(If the tilde-pre\214x is a `~+', the v)108 100.8 R .092
-(alue of the shell v)-.25 F(ariable)-.25 E/F1 9/Times-Bold@0 SF(PWD)
-2.592 E F0 .092(replaces the tilde-pre\214x.)2.342 F .092
-(If the tilde-pre\214x is)5.092 F 3.403(a`)108 112.8 S .903
-(~\255', the v)-3.403 F .903(alue of the shell v)-.25 F(ariable)-.25 E
-F1(OLDPWD)3.404 E/F2 9/Times-Roman@0 SF(,)A F0 .904
-(if it is set, is substituted.)3.154 F .904(If the characters follo)
-5.904 F .904(wing the)-.25 F .88
-(tilde in the tilde-pre\214x consist of a number)108 124.8 R/F3 10
-/Times-Italic@0 SF(N)3.38 E F0 3.38(,o)C .88(ptionally pre\214x)-3.38 F
-.879(ed by a `+' or a `\255', the tilde-pre\214x is re-)-.15 F .138(pla\
-ced with the corresponding element from the directory stack, as it w)108
-136.8 R .138(ould be displayed by the)-.1 F/F4 10/Times-Bold@0 SF(dirs)
-2.639 E F0 -.2(bu)2.639 G(iltin).2 E(in)108 148.8 Q -.2(vo)-.4 G -.1(ke)
-.2 G 2.839(dw).1 G .338(ith the tilde-pre\214x as an ar)-2.839 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 160.8
-Q(If the login name is in)108 177.6 Q -.25(va)-.4 G(lid, or the tilde e)
-.25 E(xpansion f)-.15 E(ails, the w)-.1 E(ord is unchanged.)-.1 E .166
-(Each v)108 194.4 R .167(ariable assignment is check)-.25 F .167
-(ed for unquoted tilde-pre\214x)-.1 F .167(es immediately follo)-.15 F
-.167(wing a)-.25 F F4(:)2.667 E F0 .167(or the \214rst)2.667 F F4(=)
-2.667 E F0 5.167(.I)C(n)-5.167 E .468(these cases, tilde e)108 206.4 R
-.468(xpansion is also performed.)-.15 F(Consequently)5.467 E 2.967(,o)
--.65 G .467(ne may use \214lenames with tildes in assign-)-2.967 F
-(ments to)108 218.4 Q F1 -.666(PA)2.5 G(TH)-.189 E F2(,)A F1(MAILP)2.25
-E -.855(AT)-.666 G(H).855 E F2(,)A F0(and)2.25 E F1(CDP)2.5 E -.855(AT)
--.666 G(H).855 E F2(,)A F0(and the shell assigns the e)2.25 E(xpanded v)
--.15 E(alue.)-.25 E .023(Bash also performs tilde e)108 235.2 R .023
-(xpansion on w)-.15 F .024(ords satisfying the conditions of v)-.1 F
-.024(ariable assignments \(as described)-.25 F(abo)108 247.2 Q .77 -.15
-(ve u)-.15 H(nder).15 E F1 -.666(PA)2.97 G(RAMETERS).666 E F2(\))A F0
-.47(when the)2.72 F 2.969(ya)-.15 G .469(ppear as ar)-2.969 F .469
-(guments to simple commands.)-.18 F .469(Bash does not do this,)5.469 F
--.15(ex)108 259.2 S(cept for the).15 E F3(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 F3
-(posix mode)2.5 E F0(.)A F4 -.1(Pa)87 276 S(rameter Expansion).1 E F0
-.199(The `)108 288 R F4($)A F0 2.699('c)C .199
-(haracter introduces parameter e)-2.699 F .199
-(xpansion, command substitution, or arithmetic e)-.15 F 2.7
-(xpansion. The)-.15 F(pa-)2.7 E .314(rameter name or symbol to be e)108
-300 R .314(xpanded may be enclosed in braces, which are optional b)-.15
-F .314(ut serv)-.2 F 2.813(et)-.15 G 2.813(op)-2.813 G(rotect)-2.813 E
-.414(the v)108 312 R .414(ariable to be e)-.25 F .414
-(xpanded from characters immediately follo)-.15 F .415
-(wing it which could be interpreted as part of)-.25 F(the name.)108 324
-Q 1.19(When braces are used, the matching ending brace is the \214rst `)
-108 340.8 R F4(})A F0 3.689('n)C 1.189
-(ot escaped by a backslash or within a)-3.689 F .821
-(quoted string, and not within an embedded arithmetic e)108 352.8 R .822
+(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 364.8 Q(${)108 381.6 Q F3(par)A(ameter)-.15 E F0(})A .106
-(The v)144 393.6 R .106(alue of)-.25 F F3(par)2.606 E(ameter)-.15 E F0
-.106(is substituted.)2.606 F .106(The braces are required when)5.106 F
-F3(par)3.856 E(ameter)-.15 E F0 .106(is a positional pa-)3.336 F .11
-(rameter with more than one digit, or when)144 405.6 R F3(par)3.86 E
-(ameter)-.15 E F0 .111(is follo)3.341 F .111
+(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 417.6 R(The)5.208 E F3(par)2.708 E
+(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 F4 -.74(PA)2.858 G(RAME-).74 E(TERS)144 429.6 Q F0 2.5
-(\)o)C 2.5(ra)-2.5 G 2.5(na)-2.5 G(rray reference \()-2.5 E F4(Arrays)A
-F0(\).)A .346(If the \214rst character of)108 446.4 R F3(par)2.846 E
+-.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
-F4(!)A F0 .346(\), and)B F3(par)2.846 E(ameter)-.15 E F0 .346(is not a)
-2.846 F F3(namer)2.846 E(ef)-.37 E F0 2.847(,i)C 2.847(ti)-2.847 G
-(ntroduces)-2.847 E 2.907(al)108 458.4 S -2.15 -.25(ev e)-2.907 H 2.907
-(lo).25 G 2.906(fi)-2.907 G(ndirection.)-2.906 E F4(Bash)5.406 E F0 .406
+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 F3(par)2.906 E(ameter)-.15 E F0 .406
-(as the ne)2.906 F(w)-.25 E F3(par)2.906 E(ame-)-.15 E(ter)108 470.4 Q
-F0 2.578(;t)C .078(his is then e)-2.578 F .078(xpanded and that v)-.15 F
-.079(alue is used in the rest of the e)-.25 F .079
-(xpansion, rather than the e)-.15 F .079(xpansion of the)-.15 F
-(original)108 482.4 Q F3(par)2.543 E(ameter)-.15 E F0 5.043(.T)C .043
-(his is kno)-5.043 F .043(wn as)-.25 F F3(indir)2.543 E .043(ect e)-.37
-F(xpansion)-.2 E F0 5.043(.T)C .043(he v)-5.043 F .042
-(alue is subject to tilde e)-.25 F .042(xpansion, parameter)-.15 F -.15
-(ex)108 494.4 S .248(pansion, command substitution, and arithmetic e).15
-F 2.748(xpansion. If)-.15 F F3(par)2.749 E(ameter)-.15 E F0 .249
-(is a nameref, this e)2.749 F .249(xpands to the)-.15 F 1.51
-(name of the parameter referenced by)108 506.4 R F3(par)4.01 E(ameter)
+(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 .387(The e)108 518.4 R .387
-(xceptions to this are the e)-.15 F .387(xpansions of ${)-.15 F F4(!)A
-F3(pr)A(e\214x)-.37 E F4(*)A F0 2.887(}a)C .387(nd ${)-2.887 F F4(!)A F3
-(name)A F0([)A F3(@)A F0 .387(]} described belo)B 4.188 -.65(w. T)-.25 H
-.388(he e).65 F(xclama-)-.15 E(tion point must immediately follo)108
-530.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 547.2 R -.65(w,)-.25 G F3(wor)
+(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 559.2 Q(xpansion.)-.15 E .066
-(When not performing substring e)108 576 R .067
+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 F4(:-)2.567 E F0(\),)A F4(bash)2.567 E F0 .067
-(tests for a pa-)2.567 F(rameter that is unset or null.)108 588 Q(Omitt\
+(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 604.8 Q F3(par)A(ameter)-.15 E F4<3aad>A F3(wor)A(d)-.37 E F0(})
-A F4 .723(Use Default V)144 616.8 R(alues)-.92 E F0 5.723(.I)C(f)-5.723
-E F3(par)4.473 E(ameter)-.15 E F0 .723(is unset or null, the e)3.953 F
-.722(xpansion of)-.15 F F3(wor)3.562 E(d)-.37 E F0 .722(is substituted.)
-3.992 F(Other)5.722 E(-)-.2 E(wise, the v)144 628.8 Q(alue of)-.25 E F3
-(par)3.75 E(ameter)-.15 E F0(is substituted.)3.23 E(${)108 640.8 Q F3
-(par)A(ameter)-.15 E F4(:=)A F3(wor)A(d)-.37 E F0(})A F4 .811
-(Assign Default V)144 652.8 R(alues)-.92 E F0 5.812(.I)C(f)-5.812 E F3
+(${)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 F3(wor)3.652 E(d)-.37 E F0 .812(is assigned to)4.082
-F F3(pa-)4.562 E -.15(ra)144 664.8 S(meter).15 E F0 5.742(.T).73 G .742
-(he v)-5.742 F .742(alue of)-.25 F F3(par)4.492 E(ameter)-.15 E F0 .742
-(is then substituted.)3.972 F .741
+(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 676.8 Q(ay)-.1 E(.)-.65 E(${)
-108 688.8 Q F3(par)A(ameter)-.15 E F4(:?)A F3(wor)A(d)-.37 E F0(})A F4
-.535(Display Err)144 700.8 R .535(or if Null or Unset)-.18 F F0 5.535
-(.I)C(f)-5.535 E F3(par)4.285 E(ameter)-.15 E F0 .535
-(is null or unset, the e)3.765 F .535(xpansion of)-.15 F F3(wor)3.035 E
-(d)-.37 E F0 .535(\(or a mes-)3.035 F .013(sage to that ef)144 712.8 R
-.013(fect if)-.25 F F3(wor)2.853 E(d)-.37 E F0 .013(is not present\) is\
- written to the standard error and the shell, if it is not in-)3.283 F
-(teracti)144 724.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 F3(par)2.5 E(ameter)-.15 E F0
-(is substituted.)2.5 E(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E
-(22)190.395 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(${)108 84 Q/F1 10
-/Times-Italic@0 SF(par)A(ameter)-.15 E/F2 10/Times-Bold@0 SF(:+)A F1
-(wor)A(d)-.37 E F0(})A F2 .745(Use Alter)144 96 R .745(nate V)-.15 F
-(alue)-.92 E F0 5.745(.I)C(f)-5.745 E F1(par)4.495 E(ameter)-.15 E F0
+(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 108 Q F1(wor)2.84 E(d)-.37 E F0
-(is substituted.)3.27 E(${)108 120 Q F1(par)A(ameter)-.15 E F2(:)A F1
-(of)A(fset)-.18 E F0(})A(${)108 132 Q F1(par)A(ameter)-.15 E F2(:)A F1
-(of)A(fset)-.18 E F2(:)A F1(length)A F0(})A F2 .002(Substring Expansion)
-144 144 R F0 5.002(.E)C .002(xpands to up to)-5.002 F F1(length)2.502 E
-F0 .002(characters of the v)2.502 F .002(alue of)-.25 F F1(par)2.502 E
-(ameter)-.15 E F0 .002(starting at the)2.502 F .235
-(character speci\214ed by)144 156 R F1(of)2.735 E(fset)-.18 E F0 5.235
-(.I)C(f)-5.235 E F1(par)2.735 E(ameter)-.15 E F0(is)2.735 E F2(@)2.735 E
-F0 2.735(,a)C 2.735(ni)-2.735 G(nde)-2.735 E -.15(xe)-.15 G 2.735(da).15
-G .235(rray subscripted by)-2.735 F F2(@)2.735 E F0(or)2.735 E F2(*)
-2.735 E F0 2.735(,o)C 2.735(ra)-2.735 G 2.735(na)-2.735 G(s-)-2.735 E
-(sociati)144 168 Q 1.578 -.15(ve a)-.25 H 1.278
-(rray name, the results dif).15 F 1.277(fer as described belo)-.25 F
-5.077 -.65(w. I)-.25 H(f).65 E F1(length)3.777 E F0 1.277(is omitted, e)
-3.777 F 1.277(xpands to the)-.15 F .042(substring of the v)144 180 R
-.042(alue of)-.25 F F1(par)2.542 E(ameter)-.15 E F0 .043
-(starting at the character speci\214ed by)2.542 F F1(of)2.543 E(fset)
--.18 E F0 .043(and e)2.543 F .043(xtending to the)-.15 F .847
-(end of the v)144 192 R(alue.)-.25 E F1(length)5.846 E F0(and)3.346 E F1
-(of)3.346 E(fset)-.18 E F0 .846(are arithmetic e)3.346 F .846
-(xpressions \(see)-.15 F/F3 9/Times-Bold@0 SF .846(ARITHMETIC EV)3.346 F
-(ALU)-1.215 E -.855(AT)-.54 G(ION).855 E F0(belo)144 204 Q(w\).)-.25 E
-(If)144 228 Q F1(of)3.028 E(fset)-.18 E F0 -.25(eva)3.029 G .529
+(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
-.046(end of the v)144 240 R .046(alue of)-.25 F F1(par)2.546 E(ameter)
--.15 E F0 5.046(.I)C(f)-5.046 E F1(length)2.546 E F0 -.25(eva)2.546 G
+.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 252 Q .202(fset in characters from the end of the v)-.25 F .202
-(alue of)-.25 F F1(par)2.702 E(ameter)-.15 E F0 .203
-(rather than a number of characters, and)2.702 F .558(the e)144 264 R
-.558(xpansion is the characters between)-.15 F F1(of)3.058 E(fset)-.18 E
-F0 .558(and that result.)3.058 F .557(Note that a ne)5.557 F -.05(ga)
--.15 G(ti).05 E .857 -.15(ve o)-.25 H -.25(ff).15 G .557(set must be).25
-F(separated from the colon by at least one space to a)144 276 Q -.2(vo)
--.2 G(id being confused with the).2 E F2(:-)2.5 E F0 -.15(ex)2.5 G
-(pansion.).15 E(If)144 300 Q F1(par)2.958 E(ameter)-.15 E F0(is)2.958 E
-F2(@)2.958 E F0 2.958(,t)C .458(he result is)-2.958 F F1(length)2.959 E
-F0 .459(positional parameters be)2.959 F .459(ginning at)-.15 F F1(of)
-2.959 E(fset)-.18 E F0 5.459(.A)C(ne)-2.5 E -.05(ga)-.15 G(ti).05 E -.15
-(ve)-.25 G F1(of)3.109 E(fset)-.18 E F0 .6(is tak)144 312 R .6
-(en relati)-.1 F .9 -.15(ve t)-.25 H 3.1(oo).15 G .6
-(ne greater than the greatest positional parameter)-3.1 F 3.1(,s)-.4 G
-3.1(oa)-3.1 G 3.1(no)-3.1 G -.25(ff)-3.1 G .6(set of \2551 e).25 F -.25
-(va)-.25 G(luates).25 E .639(to the last positional parameter)144 324 R
-5.639(.I)-.55 G 3.139(ti)-5.639 G 3.139(sa)-3.139 G 3.139(ne)-3.139 G
-.639(xpansion error if)-3.289 F F1(length)3.14 E F0 -.25(eva)3.14 G .64
-(luates to a number less than).25 F(zero.)144 336 Q(If)144 360 Q F1(par)
-3.014 E(ameter)-.15 E F0 .514(is an inde)3.014 F -.15(xe)-.15 G 3.014
+(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 .513(members of)3.013 F 1.081(the array be)144
-372 R 1.081(ginning with ${)-.15 F F1(par)A(ameter)-.15 E F0([)A F1(of)A
-(fset)-.18 E F0 3.581(]}. A)B(ne)3.581 E -.05(ga)-.15 G(ti).05 E -.15
-(ve)-.25 G F1(of)3.732 E(fset)-.18 E F0 1.082(is tak)3.582 F 1.082
-(en relati)-.1 F 1.382 -.15(ve t)-.25 H 3.582(oo).15 G 1.082(ne greater)
--3.582 F 1.08(than the maximum inde)144 384 R 3.58(xo)-.15 G 3.58(ft)
--3.58 G 1.08(he speci\214ed array)-3.58 F 6.079(.I)-.65 G 3.579(ti)
--6.079 G 3.579(sa)-3.579 G 3.579(ne)-3.579 G 1.079(xpansion error if)
--3.729 F F1(length)3.579 E F0 -.25(eva)3.579 G 1.079(luates to a).25 F
-(number less than zero.)144 396 Q(Substring e)144 420 Q
+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 .82(Substring inde)144 444 R
+(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 456 Q .159(xing starts at 1 by def)-.15
+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($0)2.659 E F0
-.159(is pre\214x)2.659 F .158(ed to)-.15 F(the list.)144 468 Q(${)108
-484.8 Q F2(!)A F1(pr)A(e\214x)-.37 E F2(*)A F0(})A(${)108 496.8 Q F2(!)A
-F1(pr)A(e\214x)-.37 E F2(@)A F0(})A F2 .084(Names matching pr)144 508.8
-R(e\214x)-.18 E F0 5.084(.E)C .084(xpands to the names of v)-5.084 F
-.084(ariables whose names be)-.25 F .085(gin with)-.15 F F1(pr)2.585 E
-(e\214x)-.37 E F0 2.585(,s)C(epa-)-2.585 E .258
-(rated by the \214rst character of the)144 520.8 R F3(IFS)2.758 E F0
-.257(special v)2.507 F 2.757(ariable. When)-.25 F F1(@)2.757 E F0 .257
-(is used and the e)2.757 F .257(xpansion appears)-.15 F
-(within double quotes, each v)144 532.8 Q(ariable name e)-.25 E
-(xpands to a separate w)-.15 E(ord.)-.1 E(${)108 549.6 Q F2(!)A F1(name)
-A F0([)A F1(@)A F0(]})A(${)108 561.6 Q F2(!)A F1(name)A F0([)A F1(*)A F0
-(]})A F2 1.136(List of array k)144 573.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.137(s\) as-).15 F .397(signed in)144 585.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 597.6 Q
+(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 614.4 Q F2(#)A F1(par)A
-(ameter)-.15 E F0(})A F2 -.1(Pa)144 626.4 S .47(rameter length).1 F F0
-5.47(.T)C .471(he length in characters of the v)-5.47 F .471(alue of)
--.25 F F1(par)2.971 E(ameter)-.15 E F0 .471(is substituted.)2.971 F(If)
-5.471 E F1(par)4.221 E(ame-)-.15 E(ter)144 638.4 Q F0(is)3.627 E F2(*)
-2.897 E F0(or)2.897 E F2(@)2.897 E F0 2.897(,t)C .397(he v)-2.897 F .397
+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.396 E F1(par)4.146 E(ameter)-.15 E F0 .396(is an ar)3.626 F(-)-.2 E
-.78(ray name subscripted by)144 650.4 R F2(*)3.28 E F0(or)3.28 E F2(@)
-3.28 E F0 3.28(,t)C .78(he v)-3.28 F .781
-(alue substituted is the number of elements in the array)-.25 F 5.781
-(.I)-.65 G(f)-5.781 E F1(par)145.25 662.4 Q(ameter)-.15 E F0 .456
-(is an inde)3.686 F -.15(xe)-.15 G 2.956(da).15 G .456
-(rray name subscripted by a ne)-2.956 F -.05(ga)-.15 G(ti).05 E .756
--.15(ve n)-.25 H(umber).15 E 2.955(,t)-.4 G .455
-(hat number is interpreted)-2.955 F .972(as relati)144 674.4 R 1.272
--.15(ve t)-.25 H 3.472(oo).15 G .973(ne greater than the maximum inde)
--3.472 F 3.473(xo)-.15 G(f)-3.473 E F1(par)3.473 E(ameter)-.15 E F0
-3.473(,s)C 3.473(on)-3.473 G -2.25 -.15(eg a)-3.473 H(ti).15 E 1.273
--.15(ve i)-.25 H .973(ndices count back).15 F(from the end of the array)
-144 686.4 Q 2.5(,a)-.65 G(nd an inde)-2.5 E 2.5(xo)-.15 G 2.5<66ad>-2.5
-G 2.5(1r)-2.5 G(eferences the last element.)-2.5 E(${)108 703.2 Q F1
-(par)A(ameter)-.15 E F2(#)A F1(wor)A(d)-.37 E F0(})A(GNU Bash 5.1)72 768
-Q(2020 October 29)141.235 E(23)190.395 E 0 Cg EP
-%%Page: 24 24
+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
-(wor)A(d)-.37 E F0(})A F2(Remo)144 96 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 .543(name e)144
-108 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
-.544(using the rules described)3.774 F(under)144 120 Q F2 -.1(Pa)3.133 G
-(tter).1 E 3.133(nM)-.15 G(atching)-3.133 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 .632(alue of)-.25 F F1(par)4.382 E(ameter)-.15
-E F0(,).73 E 1.151(then the result of the e)144 132 R 1.151
-(xpansion is the e)-.15 F 1.151(xpanded v)-.15 F 1.151(alue of)-.25 F F1
-(par)4.902 E(ameter)-.15 E F0 1.152(with the shortest matching)4.382 F
-.184(pattern \(the `)144 144 R(`)-.74 E F2(#)A F0 1.664 -.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.183 E F1(par)3.933 E
-(ameter)-.15 E F0(is)3.413 E F2(@)2.683 E F0(or)144 156 Q F2(*)3.018 E
-F0 3.018(,t)C .518(he pattern remo)-3.018 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 .304(sion is the resultant list.)144 168 R(If)
-5.304 E F1(par)4.054 E(ameter)-.15 E F0 .303(is an array v)3.533 F .303
-(ariable subscripted with)-.25 F F2(@)2.803 E F0(or)2.803 E F2(*)2.803 E
-F0 2.803(,t)C .303(he pattern re-)-2.803 F(mo)144 180 Q -.25(va)-.15 G
-2.987(lo).25 G .487
-(peration is applied to each member of the array in turn, and the e)
--2.987 F .487(xpansion is the resultant)-.15 F(list.)144 192 Q(${)108
-208.8 Q F1(par)A(ameter)-.15 E F2(%)A F1(wor)A(d)-.37 E F0(})A(${)108
-220.8 Q F1(par)A(ameter)-.15 E F2(%%)A F1(wor)A(d)-.37 E F0(})A F2(Remo)
-144 232.8 Q .347 -.1(ve m)-.1 H .147(atching suf\214x patter).1 F(n)-.15
-E F0 5.147(.T)C(he)-5.147 E F1(wor)2.647 E(d)-.37 E F0 .147(is e)2.647 F
-.146(xpanded to produce a pattern just as in pathname)-.15 F -.15(ex)144
-244.8 S .458(pansion, and matched ag).15 F .458(ainst the e)-.05 F .458
-(xpanded v)-.15 F .458(alue of)-.25 F F1(par)4.209 E(ameter)-.15 E F0
-.459(using the rules described under)3.689 F F2 -.1(Pa)144 256.8 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 268.8 S(meter).15
-E F0 3.816(,t).73 G 1.316(hen the result of the e)-3.816 F 1.317
-(xpansion is the e)-.15 F 1.317(xpanded v)-.15 F 1.317(alue of)-.25 F F1
-(par)5.067 E(ameter)-.15 E F0 1.317(with the shortest)4.547 F 1.085
-(matching pattern \(the `)144 280.8 R(`)-.74 E F2(%)A F0 2.565 -.74
-('' c)D 1.084(ase\) or the longest matching pattern \(the `).74 F(`)-.74
-E F2(%%)A F0 2.564 -.74('' c)D 1.084(ase\) deleted.).74 F(If)6.084 E F1
-(par)145.25 292.8 Q(ameter)-.15 E F0(is)3.389 E F2(@)2.659 E F0(or)2.659
-E F2(*)2.659 E F0 2.659(,t)C .159(he pattern remo)-2.659 F -.25(va)-.15
-G 2.659(lo).25 G .16
-(peration is applied to each positional parameter in turn,)-2.659 F .51
-(and the e)144 304.8 R .51(xpansion is the resultant list.)-.15 F(If)
-5.51 E F1(par)4.259 E(ameter)-.15 E F0 .509(is an array v)3.739 F .509
-(ariable subscripted with)-.25 F F2(@)3.009 E F0(or)3.009 E F2(*)3.009 E
-F0(,)A .422(the pattern remo)144 316.8 R -.25(va)-.15 G 2.922(lo).25 G
-.422(peration is applied to each member of the array in turn, and the e)
--2.922 F .423(xpansion is)-.15 F(the resultant list.)144 328.8 Q(${)108
-345.6 Q F1(par)A(ameter)-.15 E F2(/)A F1(pattern)A F2(/)A F1(string)A F0
-(})A F2 -.1(Pa)144 357.6 S(tter).1 E 3.607(ns)-.15 G(ubstitution)-3.607
-E F0 6.107(.T)C(he)-6.107 E F1(pattern)3.607 E F0 1.107(is e)3.607 F
-1.106(xpanded to produce a pattern just as in pathname e)-.15 F(xpan-)
--.15 E(sion,)144 369.6 Q F1 -.8(Pa)3.7 G -.15(ra).8 G(meter).15 E F0 1.2
-(is e)3.7 F 1.2(xpanded and the longest match of)-.15 F F1(pattern)3.7 E
-F0(ag)3.7 E 1.2(ainst its v)-.05 F 1.2(alue is replaced with)-.25 F F1
-(string)144 381.6 Q F0 5.397(.T)C .397
-(he match is performed using the rules described under)-5.397 F F2 -.1
-(Pa)2.896 G(tter).1 E 2.896(nM)-.15 G(atching)-2.896 E F0(belo)2.896 E
-4.196 -.65(w. I)-.25 H(f).65 E F1(pat-)2.896 E(tern)144 393.6 Q F0(be)
-2.569 E .069(gins with)-.15 F F2(/)2.569 E F0 2.569(,a)C .069
-(ll matches of)-2.569 F F1(pattern)2.569 E F0 .069(are replaced with)
-2.569 F F1(string)2.57 E F0 5.07(.N)C .07
-(ormally only the \214rst match is)-5.07 F 2.58(replaced. If)144 405.6 R
-F1(pattern)2.58 E F0(be)2.58 E .08(gins with)-.15 F F2(#)2.58 E F0 2.58
-(,i)C 2.58(tm)-2.58 G .079(ust match at the be)-2.58 F .079
-(ginning of the e)-.15 F .079(xpanded v)-.15 F .079(alue of)-.25 F F1
-(par)2.579 E(am-)-.15 E(eter)144 417.6 Q F0 5.761(.I)C(f)-5.761 E F1
-(pattern)3.261 E F0(be)3.261 E .761(gins with)-.15 F F2(%)3.261 E F0
-3.261(,i)C 3.261(tm)-3.261 G .761(ust match at the end of the e)-3.261 F
-.761(xpanded v)-.15 F .761(alue of)-.25 F F1(par)3.262 E(ameter)-.15 E
-F0 5.762(.I)C(f)-5.762 E F1(string)144 429.6 Q F0 .958
-(is null, matches of)3.458 F F1(pattern)3.458 E F0 .958
-(are deleted and the)3.458 F F2(/)3.458 E F0(follo)3.458 E(wing)-.25 E
-F1(pattern)3.457 E F0 .957(may be omitted.)3.457 F .957(If the)5.957 F
-F2(nocasematch)144 441.6 Q F0 .492
-(shell option is enabled, the match is performed without re)2.992 F -.05
-(ga)-.15 G .492(rd to the case of alpha-).05 F .884(betic characters.)
-144 453.6 R(If)5.884 E F1(par)4.634 E(ameter)-.15 E F0(is)4.114 E F2(@)
-3.384 E F0(or)3.383 E F2(*)3.383 E F0 3.383(,t)C .883
-(he substitution operation is applied to each positional)-3.383 F 1.002
-(parameter in turn, and the e)144 465.6 R 1.002
-(xpansion is the resultant list.)-.15 F(If)6.002 E F1(par)4.752 E
-(ameter)-.15 E F0 1.002(is an array v)4.232 F 1.002(ariable sub-)-.25 F
-.159(scripted with)144 477.6 R F2(@)2.659 E F0(or)2.659 E F2(*)2.659 E
-F0 2.659(,t)C .159(he substitution operation is applied to each member \
-of the array in turn, and)-2.659 F(the e)144 489.6 Q
-(xpansion is the resultant list.)-.15 E(${)108 506.4 Q F1(par)A(ameter)
--.15 E F2(^)A F1(pattern)A F0(})A(${)108 518.4 Q F1(par)A(ameter)-.15 E
-F2(^^)A F1(pattern)A F0(})A(${)108 530.4 Q F1(par)A(ameter)-.15 E F2(,)A
-F1(pattern)A F0(})A(${)108 542.4 Q F1(par)A(ameter)-.15 E F2(,,)A F1
-(pattern)A F0(})A F2 .437(Case modi\214cation)144 554.4 R F0 5.437(.T)C
-.437(his e)-5.437 F .438
+/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.938 E(ameter)-.15 E F0 5.438(.T)C(he)-5.438 E F1(pattern)144 566.4 Q
-F0 .374(is e)2.874 F .374
+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 .373(character in the e)2.873 F(x-)-.15 E .513
-(panded v)144 578.4 R .513(alue of)-.25 F F1(par)3.013 E(ameter)-.15 E
-F0 .513(is tested ag)3.013 F(ainst)-.05 E F1(pattern)3.013 E F0 3.013
-(,a)C .514(nd, if it matches the pattern, its case is con-)-3.013 F -.15
-(ve)144 590.4 S 2.823(rted. The).15 F .323
-(pattern should not attempt to match more than one character)2.823 F
-5.322(.T)-.55 G(he)-5.322 E F2(^)2.822 E F0 .322(operator con)2.822 F
--.15(ve)-.4 G(rts).15 E(lo)144 602.4 Q .18(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 .181
-(rts matching uppercase letters).15 F .085(to lo)144 614.4 R 2.585
+(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 626.4 Q F2(,)3.59 E F0 -.15
-(ex)3.59 G 1.09(pansions match and con).15 F -.15(ve)-.4 G 1.091
-(rt only the \214rst character in the e).15 F 1.091(xpanded v)-.15 F
-3.591(alue. If)-.25 F F1(pattern)3.591 E F0(is)3.591 E 1.121
-(omitted, it is treated lik)144 638.4 R 3.621(ea)-.1 G F2(?)A F0 3.621
-(,w)C 1.121(hich matches e)-3.621 F -.15(ve)-.25 G 1.121(ry character)
-.15 F 6.12(.I)-.55 G(f)-6.12 E F1(par)4.87 E(ameter)-.15 E F0(is)4.35 E
-F2(@)3.62 E F0(or)3.62 E F2(*)3.62 E F0 3.62(,t)C 1.12(he case)-3.62 F
-.339(modi\214cation operation is applied to each positional parameter i\
-n turn, and the e)144 650.4 R .34(xpansion is the re-)-.15 F .25
-(sultant list.)144 662.4 R(If)5.25 E F1(par)4 E(ameter)-.15 E F0 .25
-(is an array v)3.48 F .249(ariable subscripted with)-.25 F F2(@)2.749 E
-F0(or)2.749 E F2(*)2.749 E F0 2.749(,t)C .249
-(he case modi\214cation oper)-2.749 F(-)-.2 E
+(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
-674.4 Q(xpansion is the resultant list.)-.15 E(${)108 691.2 Q F1(par)A
-(ameter)-.15 E F2(@)A F1(oper)A(ator)-.15 E F0(})A F2 -.1(Pa)144 703.2 S
+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 .154(or information about)144 715.2 R
-F1(par)2.654 E(ameter)-.15 E F0 .153(itself, depending on the v)2.654 F
-.153(alue of)-.25 F F1(oper)2.653 E(ator)-.15 E F0 5.153(.E)C(ach)-5.153
-E F1(oper)2.653 E(ator)-.15 E F0 .153(is a sin-)2.653 F(gle letter:)144
-727.2 Q(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(24)190.395 E 0
+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: 25 25
+%%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 .142(The e)180 84 R .142
+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
-.143(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 .43(The e)180 108 R .43
+.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 .429(with the \214rst character con)2.929 F
--.15(ve)-.4 G(rted).15 E(to uppercase, if it is alphabetic.)180 120 Q F1
-(L)144 132 Q F0 .124(The e)180 132 R .124
+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 .125(with uppercase alphabetic charac-)2.625 F
+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.065(The e)180 156 R 1.065
+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.064(quoted in a format that can be)3.565 F
-(reused as input.)180 168 Q F1(E)144 180 Q F0 .44(The e)180 180 R .441
+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 .441(with backslash escape sequences)2.941 F
--.15(ex)180 192 S(panded as with the).15 E F1($'...)2.5 E(')-.55 E F0
-(quoting mechanism.)2.5 E F1(P)144 204 Q F0 1.073(The e)180 204 R 1.073
+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.137(The e)
+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.638 E(e)-.18 E F0(command)3.638 E(that, if e)180 240 Q -.25
+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.34(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.339
-(xcept that it prints the)-3.989 F -.25(va)180 264 S .257(lues of inde)
+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.758 E(-)-.37 E(rays)180
+(-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(If)144 304.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 316.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
+(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
-328.8 Q(xpansion is the resultant list.)-.15 E .708(The result of the e)
-144 352.8 R .708(xpansion is subject to w)-.15 F .708
+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 364.8 Q -.65(w.)-.25 G F1(Command Substitution)87 381.6 Q F2
-1.697(Command substitution)108 393.6 R F0(allo)4.197 E 1.697
+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 405.6 Q F1($\()144 422.4 Q F2
-(command)A F1(\))1.666 E F0(or)108 434.4 Q F1<92>144 446.4 Q F2(command)
-A F1<92>A(Bash)108 463.2 Q F0 .089(performs the e)2.589 F .089
+(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 475.2 R 2.91(yt)-.15 G .41(railing ne)-2.91 F .41(wlines deleted.)
+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 487.2 R .192(ut the)-.2 F 2.692(ym)-.15 G .192(ay be remo)-2.692 F
+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 499.2 Q -.25(va)-.25
+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 516 R(xcept)-.15 E
-.315(when follo)108 528 R .315(wed by)-.25 F F1($)2.815 E F0(,)A F1<92>
+ 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 540 R 1.386(using the $\()3.886 F
+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 552 Q(.)-.65 E .894
-(Command substitutions may be nested.)108 568.8 R 2.494 -.8(To n)5.894 H
+(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 580.8 Q .422
-(If the substitution appears within double quotes, w)108 597.6 R .422
+(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 609.6 Q F1(Arithmetic Expansion)87 626.4 Q F0
-1.035(Arithmetic e)108 638.4 R 1.035(xpansion allo)-.15 F 1.035
+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 650.4 Q(xpansion is:)-.15 E F1($\(\()
-144 667.2 Q F2 -.2(ex)C(pr).2 E(ession)-.37 E F1(\)\))A F0(The)108 684 Q
-F2 -.2(ex)2.665 G(pr).2 E(ession)-.37 E F0 .165
-(is treated as if it were within double quotes, b)2.905 F .166
-(ut a double quote inside the parentheses is not)-.2 F .231
-(treated specially)108 696 R 5.231(.A)-.65 G .231(ll tok)-5.231 F .231
-(ens in the e)-.1 F .231(xpression under)-.15 F .231(go parameter and v)
--.18 F .23(ariable e)-.25 F .23(xpansion, command substi-)-.15 F .048
-(tution, and quote remo)108 708 R -.25(va)-.15 G 2.548(l. The).25 F .048
-(result is treated as the arithmetic e)2.548 F .048(xpression to be e)
--.15 F -.25(va)-.25 G 2.549(luated. Arithmetic).25 F -.15(ex)2.549 G(-)
-.15 E(pansions may be nested.)108 720 Q(GNU Bash 5.1)72 768 Q
-(2020 October 29)141.235 E(25)190.395 E 0 Cg EP
-%%Page: 26 26
+(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 1.379(The e)108 84
-R -.25(va)-.25 G 1.378
+(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 96 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 112.8 Q
-(ocess Substitution)-.18 E F3(Pr)108 124.8 Q .405(ocess substitution)
+(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 136.8 Q F4(<\()3.251 E F3
+(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 148.8 R .148
+(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 160.8 R .56
+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 172.8 Q .308
+(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 184.8 Q F3(FIFOs)A F0 2.5(\)o)C 2.5(rt)
+-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 201.6 R -.25(va)
+(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 213.6 Q(xpansion.)-.15 E F4
--.75(Wo)87 230.4 S(rd Splitting).75 E F0 1.142
-(The shell scans the results of parameter e)108 242.4 R 1.143
+(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 254.4 Q
+(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 271.2 R F1(IFS)2.563 E F0 .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 283.2 R(If)5.207 E F1(IFS)2.707 E F0 .207(is unset, or its v)2.457 F
+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 295.2 R .837(ault, then sequences of)-.1 F F4
+(,)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 307.2 R .345
+(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 319.2 R 3.737(ords. If)-.1 F F1(IFS)3.737
-F0 1.236(has a v)3.486 F 1.236(alue other than the def)-.25 F 1.236
+-.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
-331.2 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 343.2 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 355.2
-R 2.928(ya)-.15 G(djacent)-2.928 E F1(IFS)2.928 E F0 .428
+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 367.2 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 384 R .783
+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 396 R .179
+(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 408 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 420 Q(When a quoted null ar)5 E
+(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 432 R .984
+(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 444 Q(gument remo)-.18 E -.25(va)
--.15 G(l.).25 E(Note that if no e)108 460.8 Q
-(xpansion occurs, no splitting is performed.)-.15 E F4 -.1(Pa)87 477.6 S
-(thname Expansion).1 E F0 .37(After w)108 489.6 R .37
+(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
-501.6 R .634(ord is re)-.1 F -.05(ga)-.15 G .633(rded as a).05 F F3
+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 513.6 R F1 -.09(Pa)3.84 G(tter).09 E 3.59(nM)-.135 G(atching)-3.59 E
+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 525.6 R F4
+(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 537.6 Q F4(nullglob)
+(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
-549.6 R -.15(xe)-.15 G 3.254(cuted. If).15 F .754(the shell)3.254 F
-(option)108 561.6 Q F4(nocaseglob)3.263 E F0 .763
+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 573.6 R .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
-585.6 Q .81(wing a slash must be matched e)-.25 F(xplicitly)-.15 E 3.31
-(,u)-.65 G .81(nless the shell option)-3.31 F F4(dotglob)3.31 E F0 .81
-(is set.)3.31 F .81(The \214lenames)5.81 F F4 -.63(``)3.31 G -.55(.').63
-G(')-.08 E F0(and)5.81 E F4 -.63(``)108 597.6 S(..).63 E -.63('')-.55 G
-F0 1.182(must al)6.812 F -.1(wa)-.1 G 1.182(ys be matched e).1 F
-(xplicitly)-.15 E 3.682(,e)-.65 G -.15(ve)-3.932 G 3.682(ni).15 G(f)
--3.682 E F4(dotglob)3.682 E F0 1.182(is set.)3.682 F 1.181
-(In other cases, the)6.182 F F4 -.63(``)3.681 G -.55(.').63 G(')-.08 E
-F0 1.181(character is not)6.181 F .613(treated specially)108 609.6 R
-5.613(.W)-.65 G .613
-(hen matching a pathname, the slash character must al)-5.613 F -.1(wa)
--.1 G .614(ys be matched e).1 F .614(xplicitly by a)-.15 F .655
-(slash in the pattern, b)108 621.6 R .655(ut in other matching conte)-.2
-F .655(xts it can be matched by a special pattern character as de-)-.15
-F .719(scribed belo)108 633.6 R 3.219(wu)-.25 G(nder)-3.219 E F1 -.09
-(Pa)3.219 G(tter).09 E 2.969(nM)-.135 G(atching)-2.969 E F2(.)A F0 .719
-(See the description of)5.219 F F4(shopt)3.219 E F0(belo)3.219 E 3.22
-(wu)-.25 G(nder)-3.22 E F1 .72(SHELL B)3.22 F(UIL)-.09 E .72(TIN COM-)
--.828 F(MANDS)108 645.6 Q F0(for a description of the)2.25 E F4
-(nocaseglob)2.5 E F0(,)A F4(nullglob)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
-662.4 Q F1(GLOBIGNORE)2.562 E F0 .062(shell v)2.312 F .061
+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 674.4 Q F0 1.096(is set, each matching \214le name that al\
-so matches one of the patterns in)3.346 F F1(GLOBIGNORE)3.597 E F0 1.097
-(is re-)3.347 F(mo)108 686.4 Q -.15(ve)-.15 G 2.851(df).15 G .351
-(rom the list of matches.)-2.851 F .351(If the)5.351 F F4(nocaseglob)
-2.851 E F0 .351(option is set, the matching ag)2.851 F .351
-(ainst the patterns in)-.05 F F1(GLO-)2.85 E(BIGNORE)108 698.4 Q F0 1.48
-(is performed without re)3.73 F -.05(ga)-.15 G 1.48(rd to case.).05 F
-1.48(The \214lenames)6.48 F F4 -.63(``)3.98 G -.55(.').63 G(')-.08 E F0
-(and)6.48 E F4 -.63(``)3.98 G(..).63 E -.63('')-.55 G F0 1.481(are al)
-7.11 F -.1(wa)-.1 G 1.481(ys ignored when).1 F F1(GLOBIGNORE)108 710.4 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 F1(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 722.4 R F4(dotglob)3.182 E F0 .682
-(shell option, so all other \214lenames be)3.182 F .682(ginning with a)
--.15 F F4 -.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(GNU Bash 5.1)72 768
-Q(2020 October 29)141.235 E(26)190.395 E 0 Cg EP
-%%Page: 27 27
+(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(beha)108 84 Q
-1.185(vior of ignoring \214lenames be)-.2 F 1.185(ginning with a)-.15 F
-/F1 10/Times-Bold@0 SF -.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 9/Times-Bold@0 SF(GLOBIGNORE)3.684 E
-/F3 9/Times-Roman@0 SF(.)A F0(The)108 96 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 108 Q F1(extglob)2.5 E F0(shell option.)2.5 E F1 -.1(Pa)108
-124.8 S(tter).1 E 2.5(nM)-.15 G(atching)-2.5 E F0(An)108 141.6 Q 3.138
-(yc)-.15 G .638(haracter that appears in a pattern, other than the spec\
-ial pattern characters described belo)-3.138 F 1.938 -.65(w, m)-.25 H
-(atches).65 E 2.721(itself. The)108 153.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 165.6 R .418
+(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 177.6 Q(.)-.65 E
-(The special pattern characters ha)108 194.4 Q .3 -.15(ve t)-.2 H
-(he follo).15 E(wing meanings:)-.25 E F1(*)144 211.2 Q F0 .376
-(Matches an)180 211.2 R 2.876(ys)-.15 G .376
+-.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 223.2
+(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 235.2 R 1.058(If follo)6.058 F 1.058(wed by a)-.25 F F1(/)3.558 E
-F0(,)A(tw)180 247.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 259.2 Q
-F0(Matches an)180 259.2 Q 2.5(ys)-.15 G(ingle character)-2.5 E(.)-.55 E
-F1([...])144 271.2 Q F0 .579(Matches an)180 271.2 R 3.079(yo)-.15 G .579
+.)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 283.2 R/F4 10/Times-Italic@0 SF -.15(ra)3.184 G(ng).15 E
+(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 295.2 Q -.15(ve)
+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 307.2 R 1.123
+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 .895
-(The sorting order of characters in range e)180 319.2 R .894
-(xpressions is determined by the current locale)-.15 F .375(and the v)
-180 331.2 R .375(alues of the)-.25 F F2(LC_COLLA)2.875 E(TE)-.855 E F0
-(or)2.625 E F2(LC_ALL)2.875 E F0 .375(shell v)2.625 F .375
-(ariables, if set.)-.25 F 1.976 -.8(To o)5.376 H .376(btain the tra-).8
-F .068(ditional interpretation of range e)180 343.2 R .068
-(xpressions, where)-.15 F F1([a\255d])2.568 E F0 .067(is equi)2.567 F
--.25(va)-.25 G .067(lent to).25 F F1([abcd])2.567 E F0 2.567(,s)C .067
-(et v)-2.567 F(alue)-.25 E .156(of the)180 355.2 R F1(LC_ALL)2.656 E F0
-.156(shell v)2.656 F .156(ariable to)-.25 F F1(C)2.657 E F0 2.657(,o)C
-2.657(re)-2.657 G .157(nable the)-2.657 F F1(globasciiranges)2.657 E F0
-.157(shell option.)2.657 F(A)5.157 E F1<ad>2.657 E F0(may)2.657 E .193(\
-be matched by including it as the \214rst or last character in the set.)
-180 367.2 R(A)5.193 E F1(])2.693 E F0 .193(may be matched by)2.693 F
-(including it as the \214rst character in the set.)180 379.2 Q -.4(Wi)
-180 397.2 S(thin).4 E F1([)3.07 E F0(and)3.07 E F1(])3.07 E F0(,)A F4
--.15(ch)3.07 G(ar).15 E .571(acter classes)-.15 F F0 .571
-(can be speci\214ed using the syntax)3.071 F F1([:)3.071 E F4(class)A F1
-(:])A F0 3.071(,w)C(here)-3.071 E F4(class)3.071 E F0
-(is one of the follo)180 409.2 Q
+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 421.2 R 5.889
-(wer print punct space up-)-.1 F 5(per w)180 433.2 R 5(ord xdigit)-.1 F
-F0 4.289(Ac)180 445.2 S 1.789(haracter class matches an)-4.289 F 4.289
-(yc)-.15 G 1.789(haracter belonging to that class.)-4.289 F(The)6.789 E
-F1 -.1(wo)4.29 G(rd).1 E F0(character)4.29 E
-(class matches letters, digits, and the character _.)180 457.2 Q -.4(Wi)
-180 475.2 S(thin).4 E F1([)4.537 E F0(and)4.537 E F1(])4.537 E F0 4.537
-(,a)C(n)-4.537 E F4 2.037(equivalence class)4.537 F F0 2.036
-(can be speci\214ed using the syntax)4.536 F F1([=)4.536 E F4(c)A F1(=])
-A F0 4.536(,w)C(hich)-4.536 E .125(matches all characters with the same\
- collation weight \(as de\214ned by the current locale\) as)180 487.2 R
-(the character)180 499.2 Q F4(c)2.5 E F0(.)A -.4(Wi)180 517.2 S(thin).4
+(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 .705(If the)108 534 R F1(extglob)3.205 E F0 .705
-(shell option is enabled using the)3.205 F F1(shopt)3.205 E F0 -.2(bu)
-3.205 G .704(iltin, se).2 F -.15(ve)-.25 G .704(ral e).15 F .704
-(xtended pattern matching operators)-.15 F .255(are recognized.)108 546
-R .255(In the follo)5.255 F .255(wing description, a)-.25 F F4
-(pattern-list)2.755 E F0 .255
-(is a list of one or more patterns separated by a)2.755 F F1(|)2.756 E
-F0(.)A(Composite patterns may be formed using one or more of the follo)
-108 558 Q(wing sub-patterns:)-.25 E F1(?\()144 582 Q F4(pattern-list)
-.833 E F1(\)).833 E F0(Matches zero or one occurrence of the gi)180 594
-Q -.15(ve)-.25 G 2.5(np).15 G(atterns)-2.5 E F1(*\()144 606 Q 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 zero or more occurrences of the gi)180 618 Q -.15(ve)-.25 G 2.5
-(np).15 G(atterns)-2.5 E F1(+\()144 630 Q F4(pattern-list).833 E F1(\))
-.833 E F0(Matches one or more occurrences of the gi)180 642 Q -.15(ve)
--.25 G 2.5(np).15 G(atterns)-2.5 E F1(@\()144 654 Q F4(pattern-list).833
-E F1(\)).833 E F0(Matches one of the gi)180 666 Q -.15(ve)-.25 G 2.5(np)
-.15 G(atterns)-2.5 E F1(!\()144 678 Q F4(pattern-list).833 E F1(\)).833
-E F0(Matches an)180 690 Q(ything e)-.15 E(xcept one of the gi)-.15 E
--.15(ve)-.25 G 2.5(np).15 G(atterns)-2.5 E .969(Complicated e)108 706.8
-R .969(xtended pattern matching ag)-.15 F .969
-(ainst long strings is slo)-.05 F 2.268 -.65(w, e)-.25 H .968
-(specially when the patterns contain).65 F .09
-(alternations and the strings contain multiple matches.)108 718.8 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 730.8 Q(aster)-.1 E(.)-.55 E(GNU Bash 5.1)72 768 Q(2020 October 29)
-141.235 E(27)190.395 E 0 Cg EP
-%%Page: 28 28
+(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(Quote Remo)87 84 Q -.1(va)-.1 G(l).1 E F0 1.113
-(After the preceding e)108 96 R 1.113
+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 108 Q .3 -.15
-(ve ex)-.15 H(pansions are remo).15 E -.15(ve)-.15 G(d.).15 E/F2 10.95
-/Times-Bold@0 SF(REDIRECTION)72 124.8 Q F0 .545(Before a command is e)
-108 136.8 R -.15(xe)-.15 G .545(cuted, its input and output may be).15 F
-/F3 10/Times-Italic@0 SF -.37(re)3.045 G(dir).37 E(ected)-.37 E F0 .545
-(using a special notation interpreted)3.815 F .405(by the shell.)108
-148.8 R .405(Redirection allo)5.405 F .405(ws commands' \214le handles \
-to be duplicated, opened, closed, made to refer to)-.25 F(dif)108 160.8
-Q 1.019(ferent \214les, and can change the \214les the command reads fr\
-om 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 172.8 R -.15
-(xe)-.15 G .215(cution en).15 F 2.715(vironment. The)-.4 F(follo)2.715 E
+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
-184.8 R .862(ywhere within a)-.15 F F3 .862(simple command)3.702 F F0
-.862(or may follo)4.132 F 3.362(wa)-.25 G F3(command).2 E F0 5.862(.R)
-.77 G .862(edirections are)-5.862 F(processed in the order the)108 196.8
-Q 2.5(ya)-.15 G(ppear)-2.5 E 2.5(,f)-.4 G(rom left to right.)-2.5 E .771
-(Each redirection that may be preceded by a \214le descriptor number ma\
-y instead be preceded by a w)108 213.6 R .771(ord of)-.1 F .292
-(the form {)108 225.6 R F3(varname)A F0 2.793(}. In)B .293
+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 237.6 S
+(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
-F3(varname)3.179 E F0 5.679(.I)C 3.179(f>)-5.679 G .679
-(&- or <&- is preceded by {)-3.179 F F3(var)A(-)-.2 E(name)108 249.6 Q
-F0 .599(}, the v)B .599(alue of)-.25 F F3(varname)3.099 E F0 .599
-(de\214nes the \214le descriptor to close.)3.099 F .6(If {)5.6 F F3
+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
-1.238(persists be)108 261.6 R 1.238(yond the scope of the command, allo)
--.15 F 1.238(wing the shell programmer to manage the \214le descriptor)
--.25 F(himself.)108 273.6 Q .283(In the follo)108 290.4 R .284(wing des\
-criptions, if the \214le descriptor number is omitted, and the \214rst \
-character of the redirect-)-.25 F .513(ion operator is)108 302.4 R F1(<)
+.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 314.4 Q F1(>)2.5 E F0 2.5(,t)C
+(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 331.2 R .824(ord follo)-.1 F .824
+-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 343.2 R .463(xpansion, tilde e)-.15 F .462
+(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 355.2 R
+(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 367.2 S(rd,).1 E F1
+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 384 Q -.15
-(Fo)5 G 2.5(re).15 G(xample, the command)-2.65 E(ls)144 400.8 Q F1(>)2.5
-F0(dirlist 2)2.5 E F1(>&)A F0(1)A
-(directs both standard output and standard error to the \214le)108 417.6
-Q F3(dirlist)2.85 E F0 2.5(,w).68 G(hile the command)-2.5 E(ls 2)144
-434.4 Q F1(>&)A F0(1)A F1(>)2.5 E F0(dirlist)2.5 E .505
-(directs only the standard output to \214le)108 451.2 R F3(dirlist)3.355
+(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 463.2 Q(as redirected to)-.1 E
-F3(dirlist)2.85 E F0(.).68 E F1(Bash)108 480 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 492 R .978
+(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 504 Q
-(vior described belo)-.2 E -.65(w.)-.25 G F1(/de)144 520.8 Q(v/fd/)-.15
-E F3(fd)A F0(If)180 532.8 Q F3(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 F3(fd)2.5 E F0
-(is duplicated.)2.5 E F1(/de)144 544.8 Q(v/stdin)-.15 E F0
-(File descriptor 0 is duplicated.)180 556.8 Q F1(/de)144 568.8 Q
-(v/stdout)-.15 E F0(File descriptor 1 is duplicated.)180 580.8 Q F1(/de)
-144 592.8 Q(v/stderr)-.15 E F0(File descriptor 2 is duplicated.)180
-604.8 Q F1(/de)144 616.8 Q(v/tcp/)-.15 E F3(host)A F1(/)A F3(port)A F0
-(If)180 628.8 Q F3(host)2.996 E F0 .496(is a v)2.996 F .496
-(alid hostname or Internet address, and)-.25 F F3(port)2.997 E F0 .497
+(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 640.8 Q F1(bash)2.5 E F0
+(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
-652.8 Q(v/udp/)-.15 E F3(host)A F1(/)A F3(port)A F0(If)180 664.8 Q F3
-(host)2.997 E F0 .497(is a v)2.997 F .497
-(alid hostname or Internet address, and)-.25 F F3(port)2.996 E F0 .496
+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 676.8 Q F1(bash)2.5 E F0
+(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
-693.6 S(ailure to open or create a \214le causes the redirection to f)
+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 710.4 R 2.546(ym)-.15 G .046
+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 722.4 Q(.)-.65 E(GNU Bash 5.1)
-72 768 Q(2020 October 29)141.235 E(28)190.395 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(Redir)87 84 Q(ecting Input)-.18 E F0 .391
+(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 96 R .391(xpansion of)-.15 F/F2 10/Times-Italic@0 SF(wor)3.231 E(d)
--.37 E F0 .391(to be opened for read-)3.661 F(ing on \214le descriptor)
-108 108 Q F2(n)2.86 E F0 2.5(,o).24 G 2.5(rt)-2.5 G
+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 124.8 Q([)144 141.6 Q
-F2(n)A F0(])A F1(<)A F2(wor)A(d)-.37 E F1(Redir)87 158.4 Q
-(ecting Output)-.18 E F0 .174
+(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 170.4 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 182.4
+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 194.4 Q
+(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 211.2 Q([)144 228 Q
+(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 244.8 R F1(>)2.654 E F0 2.654(,a)C
+(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 256.8 R
+(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 268.8 R F1(>|)2.909 E F0 2.909(,o)C
+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
-280.8 Q -.15(ve)-.25 G 2.5(ni).15 G 2.5(ft)-2.5 G(he \214le named by)
+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
-297.6 S(pending Redir).25 E(ected Output)-.18 E F0 .642
-(Redirection of output in this f)108 309.6 R .642
+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 321.6 R F2(n)3.315 E F0
+(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
-333.6 Q(xist it is created.)-.15 E
-(The general format for appending output is:)108 350.4 Q([)144 367.2 Q
-F2(n)A F0(])A F1(>>)A F2(wor)A(d)-.37 E F1(Redir)87 384 Q
+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 396 R .249(ws both the standard output \(\214l\
-e 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 408 Q
-(xpansion of)-.15 E F2(wor)2.84 E(d)-.37 E F0(.).77 E(There are tw)108
-424.8 Q 2.5(of)-.1 G
+(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 441.6 Q F2(wor)A(d)-.37 E F0(and)108 453.6 Q F1(>&)144 465.6 Q
-F2(wor)A(d)-.37 E F0(Of the tw)108 482.4 Q 2.5(of)-.1 G
+(&>)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 499.2 Q F2(wor)A(d)-.37 E F0(2)2.5
-E F1(>&)A F0(1)A .114(When using the second form,)108 516 R F2(wor)2.614
-E(d)-.37 E F0 .114(may not e)2.614 F .114(xpand to a number or)-.15 F F1
-<ad>2.614 E F0 5.114(.I)C 2.614(fi)-5.114 G 2.615(td)-2.614 G .115
-(oes, other redirection operators)-2.615 F(apply \(see)108 528 Q F1
-(Duplicating File Descriptors)2.5 E F0(belo)2.5 E
-(w\) for compatibility reasons.)-.25 E F1 -.25(Ap)87 544.8 S
+-.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 556.8 R .249(ws both the standard output \(\
+(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
-568.8 Q(xpansion of)-.15 E F2(wor)2.84 E(d)-.37 E F0(.).77 E
+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
-585.6 Q F1(&>>)144 602.4 Q F2(wor)A(d)-.37 E F0
-(This is semantically equi)108 619.2 Q -.25(va)-.25 G(lent to).25 E F1
-(>>)144 636 Q F2(wor)A(d)-.37 E F0(2)2.5 E F1(>&)A F0(1)A(\(see)108
-652.8 Q F1(Duplicating File Descriptors)2.5 E F0(belo)2.5 E(w\).)-.25 E
-F1(Her)87 669.6 Q 2.5(eD)-.18 G(ocuments)-2.5 E F0 .33(This type of red\
+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 681.6 R F2(delimiter)108.35 693.6 Q F0 .615
+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 705.6 Q F2(n)2.5 E F0(if)2.5 E
-F2(n)2.5 E F0(is speci\214ed\) for a command.)2.5 E
-(The format of here-documents is:)108 722.4 Q(GNU Bash 5.1)72 768 Q
-(2020 October 29)141.235 E(29)190.395 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([)144 84 Q/F1 10
-/Times-Italic@0 SF(n)A F0(])A/F2 10/Times-Bold@0 SF(<<)A F0([)A F2<ad>A
-F0(])A F1(wor)A(d)-.37 E(her)164 96 Q(e-document)-.37 E(delimiter)144
-108 Q F0 .301(No parameter and v)108 124.8 R .302(ariable e)-.25 F .302
+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
-136.8 R F1(wor)3.221 E(d)-.37 E F0 5.381(.I).77 G 2.881(fa)-5.381 G .681
+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 148.8 R 3.274
+(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 160.8 R 1.194
+(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 172.8 Q F2(\\<newline>)
-2.5 E F0(is ignored, and)2.5 E F2(\\)2.5 E F0
+(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 189.6 R F2(<<\255)3.101 E F0 3.101
+(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 201.6 Q F1(delimiter)2.85 E F0 5
+ 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 218.4 Q 2.5(eS)-.18 G(trings)-2.5 E F0
-2.5(Av)108 230.4 S(ariant of here documents, the format is:)-2.75 E([)
-144 247.2 Q F1(n)A F0(])A F2(<<<)A F1(wor)A(d)-.37 E F0(The)108 264 Q F1
-(wor)3.292 E(d)-.37 E F0(under)3.292 E .792(goes tilde e)-.18 F .792
+-.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 276 S
+(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 288 R .374(wline appended, \
-to the command on its standard input \(or \214le descrip-)-.25 F(tor)108
-300 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 316.8 Q F0(The redirection operator)108
-328.8 Q([)144 345.6 Q F1(n)A F0(])A F2(<&)A F1(wor)A(d)-.37 E F0 .126
-(is used to duplicate input \214le descriptors.)108 362.4 R(If)5.127 E
+(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
-374.4 Q F1(n)3.318 E F0 .458(is made to be a cop)3.198 F 2.958(yo)-.1 G
+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 386.4 R(If)5.149 E F1(wor)
+(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 398.4 Q
-(The operator)108 415.2 Q([)144 432 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 448.8 R
-(If)5.444 E F1(n)3.304 E F0 .443
+(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 460.8 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 472.8 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
+(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 484.8 R .965(xpand to one or more digits or)-.15 F F2<ad>
+.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 496.8 Q(viously)-.25 E(.)-.65 E F2(Mo)87 513.6 Q
-(ving File Descriptors)-.1 E F0(The redirection operator)108 525.6 Q([)
-144 542.4 Q F1(n)A F0(])A F2(<&)A F1(digit)A F2<ad>A F0(mo)108 559.2 Q
--.15(ve)-.15 G 3.018(st).15 G .518(he \214le descriptor)-3.018 F F1
-(digit)3.018 E F0 .518(to \214le descriptor)3.018 F F1(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 F1(n)3.017 E F0
-.517(is not speci-)3.017 F(\214ed.)108 571.2 Q F1(digit)5 E F0
-(is closed after being duplicated to)2.5 E F1(n)2.5 E F0(.)A(Similarly)
-108 588 Q 2.5(,t)-.65 G(he redirection operator)-2.5 E([)144 604.8 Q F1
-(n)A F0(])A F2(>&)A F1(digit)A F2<ad>A F0(mo)108 621.6 Q -.15(ve)-.15 G
-2.767(st).15 G .267(he \214le descriptor)-2.767 F F1(digit)2.767 E F0
-.267(to \214le descriptor)2.767 F F1(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
-F1(n)2.768 E F0 .268(is not speci-)2.768 F(\214ed.)108 633.6 Q F2
-(Opening File Descriptors f)87 650.4 Q(or Reading and Writing)-.25 E F0
-(The redirection operator)108 662.4 Q([)144 679.2 Q F1(n)A F0(])A F2(<>)
-A F1(wor)A(d)-.37 E F0 .518(causes the \214le whose name is the e)108
-696 R .518(xpansion of)-.15 F F1(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 708 Q F1(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 F1(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(GNU Bash 5.1)
-72 768 Q(2020 October 29)141.235 E(30)190.395 E 0 Cg EP
-%%Page: 31 31
+-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.95
-/Times-Bold@0 SF(ALIASES)72 84 Q/F2 10/Times-Italic@0 SF(Aliases)108 96
-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
+(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 108 R/F3 10/Times-Bold@0 SF
-(alias)2.893 E F0(and)2.893 E F3(unalias)2.893 E F0 -.2(bu)2.893 G .393
-(iltin commands).2 F(\(see)108 120 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 132 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 F3(/)2.972 E F0(,)A F3($)2.972 E F0(,)A F3<92>
-2.972 E F0(,)A(and)108 144 Q F3(=)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
+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 156 R 1.12
+(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 168 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
+(The \214rst)6.119 F -.1(wo)108 379.2 S .513(rd of the replacement te).1
+.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 180 R .296(xpanded a second time.)-.15 F .296
-(This means that one may alias)5.296 F F3(ls)2.796 E F0(to)2.796 E F3
-.296(ls \255F)2.796 F F0 2.796(,f)C .295(or instance, and)-2.796 F F3
-(bash)2.795 E F0 .295(does not try)2.795 F .528(to recursi)108 192 R
+.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 204 Q(ord follo)-.1 E
+-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 220.8 Q F3(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 F3
-(unalias)2.5 E F0(command.)2.5 E .284
-(There is no mechanism for using ar)108 237.6 R .284
-(guments in the replacement te)-.18 F 2.784(xt. If)-.15 F(ar)2.784 E
-.284(guments are needed, a shell func-)-.18 F(tion should be used \(see)
-108 249.6 Q F4(FUNCTIONS)2.5 E F0(belo)2.25 E(w\).)-.25 E .282
-(Aliases are not e)108 266.4 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 F3(expand_aliases)2.783 E F0 .283
-(shell option is set us-)2.783 F(ing)108 278.4 Q F3(shopt)2.5 E F0
-(\(see the description of)2.5 E F3(shopt)2.5 E F0(under)2.5 E F4
+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
-295.2 R .435(what confusing.)-.25 F F3(Bash)5.435 E F0(al)2.935 E -.1
+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 307.2 R 3.17(eu)
+(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 319.2 R 1.059
+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 331.2 R -.15(xe)-.15 G 2.574(cuted. Therefore,).15
+.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 343.2 Q 2.838(ee)-.1 G -.25(ff)-2.838 G
+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
-355.2 R .551(fected by the ne)-.25 F 3.051(wa)-.25 G 3.051(lias. This)
+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 367.2 R -.15(xe)-.15 G .425
+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 379.2 R .403
+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 391.2 R -.15(xe)-.15 G 3.362(cuted. T).15 F 3.362(ob)-.8 G 3.362(es)
+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 F3
-(alias)3.362 E F0 .862(in com-)3.362 F(pound commands.)108 403.2 Q -.15
-(Fo)108 420 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 F1
-(FUNCTIONS)72 436.8 Q F0 3.467(As)108 448.8 S .967
+(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 460.8 R
+.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 472.8 R -.15(xe)-.15
-2.816(cuted. Functions).15 F .316(are e)2.816 F -.15(xe)-.15 G .316
+(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 484.8 R 2.536(wp)-.25 G .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 496.8 R -.15(xe)-.15 G .639(cuted, the ar).15 F
+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 .533(The special parameter)108 508.8
-R F3(#)3.033 E F0 .532(is updated to re\215ect the change.)3.033 F .532
-(Special parameter)5.532 F F3(0)3.032 E F0 .532(is unchanged.)3.032 F
-.532(The \214rst ele-)5.532 F(ment of the)108 520.8 Q F4(FUNCN)2.5 E
-(AME)-.18 E F0 -.25(va)2.25 G
+-.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
-537.6 R -.15(xe)-.15 G 1.25(cution en).15 F 1.25
+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 549.6 R 1.215(xceptions: the)-.15 F F4(DEB)3.715 E(UG)
--.09 E F0(and)3.465 E F3(RETURN)3.715 E F0 1.215
-(traps \(see the description of the)3.715 F F3(trap)3.714 E F0 -.2(bu)
-3.714 G 1.214(iltin under).2 F F4(SHELL)3.714 E -.09(BU)108 561.6 S(IL)
+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 F3(trace)2.979 E F0(attrib)2.979 E
-.479(ute \(see)-.2 F .421(the description of the)108 573.6 R F4(declar)
+-.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 F3 .42(\255o functrace)2.92 F F0 .42
-(shell option has been enabled with the)2.92 F F3(set)2.92 E F0 -.2(bu)
-108 585.6 S .071(iltin \(in which case all functions inherit the).2 F F3
-(DEB)2.572 E(UG)-.1 E F0(and)2.572 E F3(RETURN)2.572 E F0 .072
-(traps\), and the)2.572 F F4(ERR)2.572 E F0 .072(trap is not inher)2.322
-F(-)-.2 E(ited unless the)108 597.6 Q F3(\255o errtrace)2.5 E F0
-(shell option has been enabled.)2.5 E -1.11(Va)108 614.4 S .656
-(riables local to the function may be declared with the)1.11 F F3(local)
-3.155 E F0 -.2(bu)3.155 G .655(iltin command.).2 F(Ordinarily)5.655 E
-3.155(,v)-.65 G .655(ariables and)-3.405 F .05(their v)108 626.4 R .05
-(alues are shared between the function and its caller)-.25 F 5.051(.I)
--.55 G 2.551(fav)-5.051 G .051(ariable is declared)-2.801 F F3(local)
-2.551 E F0 2.551(,t)C .051(he v)-2.551 F(ariable')-.25 E 2.551(sv)-.55 G
-(isi-)-2.551 E 1.186(ble scope is restricted to that function and its c\
-hildren \(including the functions it calls\).)108 638.4 R 1.185(Local v)
-6.185 F(ariables)-.25 E("shado)108 650.4 Q .154(w" v)-.25 F .154
-(ariables with the same name declared at pre)-.25 F .155(vious scopes.)
--.25 F -.15(Fo)5.155 G 2.655(ri).15 G .155(nstance, a local v)-2.655 F
-.155(ariable declared)-.25 F .67(in a function hides a global v)108
-662.4 R .669(ariable of the same name: references and assignments refer\
- to the local v)-.25 F(ari-)-.25 E .688(able, lea)108 674.4 R .688
-(ving the global v)-.2 F .688(ariable unmodi\214ed.)-.25 F .688
-(When the function returns, the global v)5.688 F .688
-(ariable is once ag)-.25 F(ain)-.05 E(visible.)108 686.4 Q .727
-(The shell uses)108 703.2 R F2 .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 715.2 R .007
-(ariables and their v)-.25 F .007
+-.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 727.2 R .813(The v)5.814 F .813(alue of a v)-.25 F .813
+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(GNU Bash 5.1)72
-768 Q(2020 October 29)141.235 E(31)190.395 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(an)108 84 Q 2.116
--.65(y, w)-.15 H .816
+(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 96 S(riable declaration "shado).25 E(ws", and the v)-.25 E
+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
-112.8 S 2.724(re).15 G .224(xample, if a v)-2.874 F(ariable)-.25 E/F1 10
-/Times-Italic@0 SF(var)2.724 E F0 .223(is declared as local in function)
-2.724 F F1(func1)2.723 E F0 2.723(,a)C(nd)-2.723 E F1(func1)2.723 E F0
-.223(calls another function)2.723 F F1(func2)2.723 E F0(,)A .463
-(references to)108 124.8 R F1(var)2.963 E F0 .463(made from within)2.963
-F F1(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 F1(var)2.964 E F0(from)
-2.964 E F1(func1)2.964 E F0 2.964(,s)C(hado)-2.964 E .464(wing an)-.25 F
-(y)-.15 E(global v)108 136.8 Q(ariable named)-.25 E F1(var)2.5 E F0(.)A
-(The)108 153.6 Q/F2 10/Times-Bold@0 SF(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
+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 165.6 R .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 2.721(av)108 177.6 S .221(ariable at the current local scope is\
- unset, it will remain so until it is reset in that scope or until the \
-func-)-2.971 F .013(tion returns.)108 189.6 R .013
-(Once the function returns, an)5.013 F 2.513(yi)-.15 G .014
-(nstance of the v)-2.513 F .014(ariable at a pre)-.25 F .014
-(vious scope will become visible.)-.25 F .567(If the unset acts on a v)
-108 201.6 R .566(ariable at a pre)-.25 F .566(vious scope, an)-.25 F
-3.066(yi)-.15 G .566(nstance of a v)-3.066 F .566
-(ariable with that name that had been)-.25 F(shado)108 213.6 Q
-(wed will become visible.)-.25 E(The)108 230.4 Q F2(FUNCNEST)3.528 E F0
--.25(va)3.528 G 1.028(riable, if set to a numeric v).25 F 1.028
+-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
-242.4 Q -.15(ve)-.25 G 2.5(l. Function).15 F(in)2.5 E -.2(vo)-.4 G
+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 .044(If the b)108 259.2 R .043(uiltin command)-.2 F F2 -.18(re)
+-.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
-.043(cution resumes with).15 F 1.011(the ne)108 271.2 R 1.011
+.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.512 E F0 1.012
-(trap is e)3.512 F -.15(xe)-.15 G(cuted).15 E .214(before e)108 283.2 R
--.15(xe)-.15 G .214(cution resumes.).15 F .213
-(When a function completes, the v)5.214 F .213
+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 295.2 Q F2(#)2.5 E F0(are restored to the v)2.5 E(alues the)-.25 E
+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.358
-(Function names and de\214nitions may be listed with the)108 312 R F2
+-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.859 E F2(typeset)3.859 E F0 -.2(bu)3.859 G 1.359(iltin com-).2 F
-3.39(mands. The)108 324 R F2<ad46>3.39 E F0 .89(option to)3.39 F F2
+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
-.326(\214le and line number)108 336 R 2.826(,i)-.4 G 2.826(ft)-2.826 G
-(he)-2.826 E F2(extdeb)2.826 E(ug)-.2 E F0 .326
-(shell option is enabled\).)2.826 F .327(Functions may be e)5.327 F .327
-(xported so that subshells)-.15 F 1.298(automatically ha)108 348 R 1.598
--.15(ve t)-.2 H 1.298(hem de\214ned with the).15 F F2<ad66>3.798 E F0
-1.298(option to the)3.798 F F2(export)3.797 E F0 -.2(bu)3.797 G 3.797
-(iltin. A).2 F 1.297(function de\214nition may be)3.797 F
-(deleted using the)108 360 Q F2<ad66>2.5 E F0(option to the)2.5 E F2
-(unset)2.5 E F0 -.2(bu)2.5 G(iltin.).2 E .371(Functions may be recursi)
-108 376.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
+.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 388.8 R -.2(vo)-.4 G
+(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 400.8 Q
-.3 -.15(ve c)-.25 H(alls.).15 E/F3 10.95/Times-Bold@0 SF(ARITHMETIC EV)
-72 417.6 Q(ALU)-1.478 E -1.04(AT)-.657 G(ION)1.04 E F0 1.088
-(The shell allo)108 429.6 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(let)3.589 E F0
-(and)3.589 E F2(de-)3.589 E(clar)108 441.6 Q(e)-.18 E F0 -.2(bu)3.453 G
-.953(iltin commands, the).2 F F2(\(\()3.453 E F0 .952
+(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 453.6 Q 1.057
+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 465.6 R(vity)-.25 E
+(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 477.6 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 489.6 Q F1(id)108 506.4 Q F2(++)A F1(id)
-2.5 E F2<adad>A F0 -.25(va)144 518.4 S
-(riable post-increment and post-decrement).25 E F2 2.5<ad2b>108 530.4 S
-F0(unary minus and plus)144 530.4 Q F2(++)108 542.4 Q F1(id)A F2<adad>
-2.5 E F1(id)A F0 -.25(va)144 554.4 S
-(riable pre-increment and pre-decrement).25 E F2 2.5(!~)108 566.4 S F0
-(logical and bitwise ne)144 566.4 Q -.05(ga)-.15 G(tion).05 E F2(**)108
-578.4 Q F0 -.15(ex)144 578.4 S(ponentiation).15 E F2 2.5(*/%)108 590.4 S
-F0(multiplication, di)144 590.4 Q(vision, remainder)-.25 E F2 2.5<2bad>
-108 602.4 S F0(addition, subtraction)144 602.4 Q F2(<< >>)108 614.4 Q F0
-(left and right bitwise shifts)144 614.4 Q F2(<= >= < >)108 626.4 Q F0
-(comparison)144 638.4 Q F2(== !=)108 650.4 Q F0(equality and inequality)
-144 650.4 Q F2(&)108 662.4 Q F0(bitwise AND)144 662.4 Q F2(^)108 674.4 Q
-F0(bitwise e)144 674.4 Q(xclusi)-.15 E .3 -.15(ve O)-.25 H(R).15 E F2(|)
-108 686.4 Q F0(bitwise OR)144 686.4 Q F2(&&)108 698.4 Q F0(logical AND)
-144 698.4 Q F2(||)108 710.4 Q F0(logical OR)144 710.4 Q(GNU Bash 5.1)72
-768 Q(2020 October 29)141.235 E(32)190.395 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/F1 10
-/Times-Italic@0 SF -.2(ex)108 84 S(pr).2 E/F2 10/Times-Bold@0 SF(?)A F1
--.2(ex)C(pr).2 E F2(:)A F1 -.2(ex)C(pr).2 E F0(conditional operator)144
-96 Q F2 2.5(=*)108 108 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 120
-Q F1 -.2(ex)108 132 S(pr1).2 E F2(,)2.5 E F1 -.2(ex)2.5 G(pr2).2 E F0
-(comma)144 144 Q .68(Shell v)108 160.8 R .68(ariables are allo)-.25 F
-.68(wed as operands; parameter e)-.25 F .68
+(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 172.8 R 1.007(ithin an e)-.4
+-.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 184.8 S .165(pansion syntax.).15 F 2.665(As)5.165 G
+-.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 196.8 R .42(xpansion syntax.)-.15 F .42
+.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 208.8 R .154
+.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 F1(inte)2.654 E -.1(ge)-.4 G(r).1 E F0(attrib)2.654 E .153
+-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 220.8 S 2.857(lue. A).25 F .357
+(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 F1(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 232.8 Q
-(xpression.)-.15 E(Inte)108 249.6 Q .518(ger constants follo)-.15 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 261.6 S .782
+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 273.6 R 3.316(et)-.1 G .816
-(he form [)-3.316 F F1(base#)A F0 .815(]n, where the optional)B F1(base)
+-.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 285.6 R F1(n)2.849 E F0 .349
-(is a number in that base.)2.849 F(If)5.35 E F1(base#)2.85 E F0 .35
+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 297.6 Q F1(n)2.975 E F0 2.975(,i)C 2.975(fan)-2.975 G .474(on-digit\
+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 309.6 R 5.518(.I)-.55 G(f)
--5.518 E F1(base)3.018 E F0 .518(is less than or equal to 36, lo)3.018 F
+(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
-321.6 Q .235(Operators are e)108 338.4 R -.25(va)-.25 G .235
+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 350.4 S
-(rride the precedence rules abo).15 E -.15(ve)-.15 G(.).15 E/F3 10.95
-/Times-Bold@0 SF(CONDITION)72 367.2 Q(AL EXPRESSIONS)-.219 E F0 .255
-(Conditional e)108 379.2 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 391.2 R .134
+(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 403.2 Q .197
+(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 415.2 Q .235
-(Expressions are formed from the follo)108 432 R .234
-(wing unary or binary primaries.)-.25 F F2(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 444 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
-F2(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 emulate the\
-m internally with this beha)108 456 R .344(vior: If an)-.2 F(y)-.15 E F1
-(\214le)2.844 E F0(ar)2.844 E(-)-.2 E .805
-(gument to one of the primaries is of the form)108 468 R F1(/de)3.305 E
-(v/fd/n)-.15 E F0 3.306(,t)C .806(hen \214le descriptor)-3.306 F F1(n)
-3.306 E F0 .806(is check)3.306 F 3.306(ed. If)-.1 F(the)3.306 E F1
+-.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 480 R F1(/de)2.53 E(v/stdin)
--.15 E F0(,)A F1(/de)2.529 E(v/stdout)-.15 E F0 2.529(,o)C(r)-2.529 E F1
+(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 492 Q -.15(ve)-.25 G
+(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 508.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 520.8
-Q 1.096(When used with)108 538.8 R F2([[)3.596 E F0 3.596(,t)C(he)-3.596
-E F2(<)3.596 E F0(and)3.595 E F2(>)3.595 E F0 1.095(operators sort le)
+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 F2(test)3.595 E F0(com-)3.595 E(mand sorts using ASCII ordering.)108
-550.8 Q F2<ad61>108 574.8 Q F1(\214le)2.5 E F0 -.35(Tr)144 574.8 S
-(ue if).35 E F1(\214le)2.5 E F0 -.15(ex)2.5 G(ists.).15 E F2<ad62>108
-586.8 Q F1(\214le)2.5 E F0 -.35(Tr)144 586.8 S(ue if).35 E F1(\214le)2.5
-E F0 -.15(ex)2.5 G(ists and is a block special \214le.).15 E F2<ad63>108
-598.8 Q F1(\214le)2.5 E F0 -.35(Tr)144 598.8 S(ue if).35 E F1(\214le)2.5
-E F0 -.15(ex)2.5 G(ists and is a character special \214le.).15 E F2
-<ad64>108 610.8 Q F1(\214le)2.5 E F0 -.35(Tr)144 610.8 S(ue if).35 E F1
-(\214le)2.5 E F0 -.15(ex)2.5 G(ists and is a directory).15 E(.)-.65 E F2
-<ad65>108 622.8 Q F1(\214le)2.5 E F0 -.35(Tr)144 622.8 S(ue if).35 E F1
-(\214le)2.5 E F0 -.15(ex)2.5 G(ists.).15 E F2<ad66>108 634.8 Q F1
-(\214le)2.5 E F0 -.35(Tr)144 634.8 S(ue if).35 E F1(\214le)2.5 E F0 -.15
-(ex)2.5 G(ists and is a re).15 E(gular \214le.)-.15 E F2<ad67>108 646.8
-Q F1(\214le)2.5 E F0 -.35(Tr)144 646.8 S(ue if).35 E F1(\214le)2.5 E F0
--.15(ex)2.5 G(ists and is set-group-id.).15 E F2<ad68>108 658.8 Q F1
-(\214le)2.5 E F0 -.35(Tr)144 658.8 S(ue if).35 E F1(\214le)2.5 E F0 -.15
-(ex)2.5 G(ists and is a symbolic link.).15 E F2<ad6b>108 670.8 Q F1
-(\214le)2.5 E F0 -.35(Tr)144 670.8 S(ue if).35 E F1(\214le)2.5 E F0 -.15
+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 F2<ad70>108 682.8 Q F1(\214le)2.5 E F0 -.35(Tr)144
-682.8 S(ue if).35 E F1(\214le)2.5 E F0 -.15(ex)2.5 G
-(ists and is a named pipe \(FIFO\).).15 E F2<ad72>108 694.8 Q F1(\214le)
-2.5 E F0 -.35(Tr)144 694.8 S(ue if).35 E F1(\214le)2.5 E F0 -.15(ex)2.5
-G(ists and is readable.).15 E F2<ad73>108 706.8 Q F1(\214le)2.5 E F0
--.35(Tr)144 706.8 S(ue if).35 E F1(\214le)2.5 E F0 -.15(ex)2.5 G
-(ists and has a size greater than zero.).15 E F2<ad74>108 718.8 Q F1(fd)
-2.5 E F0 -.35(Tr)144 718.8 S(ue if \214le descriptor).35 E F1(fd)4.47 E
-F0(is open and refers to a terminal.)3.27 E(GNU Bash 5.1)72 768 Q
-(2020 October 29)141.235 E(33)190.395 E 0 Cg EP
-%%Page: 34 34
+(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-Bold@0
-SF<ad75>108 84 Q/F2 10/Times-Italic@0 SF(\214le)2.5 E F0 -.35(Tr)144 84
-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 96 Q F2(\214le)2.5 E F0 -.35(Tr)144
-96 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 108 Q F2(\214le)2.5 E F0 -.35(Tr)144 108 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 120 Q F2(\214le)2.5 E F0 -.35(Tr)144 120 S
-(ue if).35 E F2(\214le)2.5 E F0 -.15(ex)2.5 G(ists 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 132 Q F2(\214le)2.5 E F0 -.35(Tr)144 132 S(ue if).35 E F2
-(\214le)2.5 E F0 -.15(ex)2.5 G(ists and is a symbolic link.).15 E F1
-<ad4e>108 144 Q F2(\214le)2.5 E F0 -.35(Tr)144 144 S(ue if).35 E F2
-(\214le)2.5 E F0 -.15(ex)2.5 G(ists and has been modi\214ed since it w)
-.15 E(as last read.)-.1 E F1<ad4f>108 156 Q F2(\214le)2.5 E F0 -.35(Tr)
-144 156 S(ue if).35 E F2(\214le)2.5 E F0 -.15(ex)2.5 G(ists and is 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 168 Q F2(\214le)2.5 E F0 -.35(Tr)144 168 S(ue if).35 E F2
-(\214le)2.5 E F0 -.15(ex)2.5 G(ists and is a sock).15 E(et.)-.1 E F2
-(\214le1)108 180 Q F1(\255ef)2.5 E F2(\214le2)2.5 E F0 -.35(Tr)144 192 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 204 Q F0<ad>2.5 E F1(nt)A F2(\214le2)2.5 E F0 -.35(Tr)144 216 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 228 Q
-F0<ad>2.5 E F1(ot)A F2(\214le2)2.5 E F0 -.35(Tr)144 240 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 252 Q F2(optname)2.5 E F0
--.35(Tr)144 264 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 276 Q F1(set)2.5 E F0 -.2(bu)2.5 G
-(iltin belo).2 E -.65(w.)-.25 G F1<ad76>108 288 Q F2(varname)2.5 E F0
--.35(Tr)144 300 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
-312 Q F2(varname)2.5 E F0 -.35(Tr)144 324 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 336 Q F2(string)2.5 E F0 -.35(Tr)144 348 S
-(ue if the length of).35 E F2(string)2.5 E F0(is zero.)2.5 E F2(string)
-108 360 Q F1<ad6e>108 372 Q F2(string)2.5 E F0 -.35(Tr)144 384 S
-(ue if the length of).35 E F2(string)2.84 E F0(is non-zero.)2.72 E F2
-(string1)108 400.8 Q F1(==)2.5 E F2(string2)2.5 E(string1)108 412.8 Q F1
-(=)2.5 E F2(string2)2.5 E F0 -.35(Tr)144 424.8 S .862
-(ue if the strings are equal.).35 F F1(=)5.861 E F0 .861
-(should be used with the)3.361 F F1(test)3.361 E F0 .861
-(command for POSIX conformance.)3.361 F .446(When used with the)144
-436.8 R F1([[)2.946 E F0 .446
+(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 F1(Compound).15 E(Commands)144 448.8 Q F0(\).)A F2
-(string1)108 465.6 Q F1(!=)2.5 E F2(string2)2.5 E F0 -.35(Tr)144 477.6 S
-(ue if the strings are not equal.).35 E F2(string1)108 494.4 Q F1(<)2.5
-E F2(string2)2.5 E F0 -.35(Tr)144 506.4 S(ue if).35 E F2(string1)2.5 E
-F0(sorts before)2.5 E F2(string2)2.5 E F0(le)2.5 E(xicographically)-.15
-E(.)-.65 E F2(string1)108 523.2 Q F1(>)2.5 E F2(string2)2.5 E F0 -.35
-(Tr)144 535.2 S(ue if).35 E F2(string1)2.5 E F0(sorts after)2.5 E F2
-(string2)2.5 E F0(le)2.5 E(xicographically)-.15 E(.)-.65 E F2(ar)108.33
-552 Q(g1)-.37 E F1(OP)2.5 E F2(ar)2.5 E(g2)-.37 E/F3 9/Times-Bold@0 SF
-(OP)144 564 Q F0 .385(is one of)2.635 F F1(\255eq)2.885 E F0(,)A F1
-(\255ne)2.885 E F0(,)A F1(\255lt)2.885 E F0(,)A F1(\255le)2.885 E F0(,)A
-F1(\255gt)2.885 E F0 2.885(,o)C(r)-2.885 E F1(\255ge)2.885 E F0 5.385
-(.T)C .385(hese arithmetic binary operators return true if)-5.385 F F2
+-.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 576 R
-F2(ar)144 588 Q(g2)-.37 E F0 3.59(,r)C(especti)-3.59 E -.15(ve)-.25 G
-(ly).15 E(.)-.65 E F2(Ar)7.1 E(g1)-.37 E F0(and)3.59 E F2(ar)3.92 E(g2)
+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 F1([[)3.589 E F0
-(command,)144 600 Q F2(Ar)4.447 E(g1)-.37 E F0(and)3.437 E F2(Ar)4.447 E
-(g2)-.37 E F0 .937(are e)3.457 F -.25(va)-.25 G .937
+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 612 Q F0(abo)2.25
-E -.15(ve)-.15 G(\).).15 E/F4 10.95/Times-Bold@0 SF(SIMPLE COMMAND EXP)
-72 628.8 Q(ANSION)-.81 E F0 .614(When a simple command is e)108 640.8 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 652.8 Q(wing order)-.25
-E(.)-.55 E(1.)108 669.6 Q 1.848(The w)144 669.6 R 1.848
+(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 681.6 Q -.15(ve)-.2 G 2.5(df).15 G
-(or later processing.)-2.5 E(2.)108 698.4 Q .18(The w)144 698.4 R .18
+(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 710.4 R .346(xpansion, the \214rst w)-.15 F .346(ord is tak)-.1 F
+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 722.4 Q(guments.)-.18 E(GNU Bash 5.1)72 768 Q
-(2020 October 29)141.235 E(34)190.395 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(3.)108 84 Q
-(Redirections are performed as described abo)144 84 Q .3 -.15(ve u)-.15
-H(nder).15 E/F1 9/Times-Bold@0 SF(REDIRECTION)2.5 E/F2 9/Times-Roman@0
-SF(.)A F0(4.)108 100.8 Q .717(The te)144 100.8 R .717(xt after the)-.15
-F/F3 10/Times-Bold@0 SF(=)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 112.8 R .339
+(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 124.8 Q
-.332(If no command name results, the v)108 141.6 R .332
-(ariable assignments af)-.25 F .332(fect the current shell en)-.25 F
-2.832(vironment. Otherwise,)-.4 F(the)2.832 E -.25(va)108 153.6 S .757
-(riables are added to the en).25 F .757(vironment of the e)-.4 F -.15
-(xe)-.15 G .757(cuted command and do not af).15 F .757
-(fect the current shell en)-.25 F(vi-)-.4 E 3.177(ronment. If)108 165.6
-R(an)3.177 E 3.177(yo)-.15 G 3.177(ft)-3.177 G .677
-(he assignments attempts to assign a v)-3.177 F .677
-(alue to a readonly v)-.25 F .676(ariable, an error occurs, and)-.25 F
-(the command e)108 177.6 Q(xits with a non-zero status.)-.15 E .149
-(If no command name results, redirections are performed, b)108 194.4 R
-.149(ut do not af)-.2 F .15(fect the current shell en)-.25 F 2.65
-(vironment. A)-.4 F(redirection error causes the command to e)108 206.4
+(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 223.2 R 1.064(xpansion, e)
+(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 .068(command e)108
-235.2 R 2.568(xits. If)-.15 F .069(one of the e)2.568 F .069
-(xpansions contained a command substitution, the e)-.15 F .069
-(xit status of the command)-.15 F .467(is the e)108 247.2 R .466
-(xit status of the last command substitution performed.)-.15 F .466
-(If there were no command substitutions, the)5.466 F(command e)108 259.2
-Q(xits with a status of zero.)-.15 E/F4 10.95/Times-Bold@0 SF
-(COMMAND EXECUTION)72 276 Q F0 .546
-(After a command has been split into w)108 288 R .547
+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 300 Q(wing actions are tak)-.25 E(en.)
--.1 E .379(If the command name contains no slashes, the shell attempts \
-to locate it.)108 316.8 R .379(If there e)5.379 F .379
+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 328.8 R -.2(vo)-.4 G -.1(ke).2 G 2.746(da).1 G 2.746(sd)-2.746 G
-.246(escribed abo)-2.746 F .546 -.15(ve i)-.15 H(n).15 E F1(FUNCTIONS)
-2.746 E F2(.)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 340.8 Q 2.5
+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 .31
-(If the name is neither a shell function nor a b)108 357.6 R .309
-(uiltin, and contains no slashes,)-.2 F F3(bash)2.809 E F0 .309
-(searches each element of)2.809 F(the)108 369.6 Q F1 -.666(PA)3.162 G
-(TH)-.189 E F0 .662(for a directory containing an e)2.912 F -.15(xe)-.15
-G .662(cutable \214le by that name.).15 F F3(Bash)5.662 E F0 .663
-(uses a hash table to remember)3.162 F 1.915(the full pathnames of e)108
-381.6 R -.15(xe)-.15 G 1.915(cutable \214les \(see).15 F F3(hash)4.415 E
-F0(under)4.415 E F1 1.915(SHELL B)4.415 F(UIL)-.09 E 1.914(TIN COMMANDS)
--.828 F F0(belo)4.164 E 4.414(w\). A)-.25 F(full)4.414 E .719
-(search of the directories in)108 393.6 R F1 -.666(PA)3.219 G(TH)-.189 E
-F0 .72(is performed only if the command is not found in the hash table.)
-2.969 F .72(If the)5.72 F .956(search is unsuccessful, the shell search\
-es for a de\214ned shell function named)108 405.6 R F3(command_not_f)
-3.455 E(ound_han-)-.25 E(dle)108 417.6 Q F0 6.005(.I)C 3.505(ft)-6.005 G
-1.005(hat function e)-3.505 F 1.005(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.006(eparate e)-3.506 F
--.15(xe)-.15 G 1.006(cution en).15 F 1.006
-(vironment with the original command)-.4 F .256
-(and the original command')108 429.6 R 2.756(sa)-.55 G -.18(rg)-2.756 G
-.256(uments as its ar).18 F .256(guments, and the function')-.18 F 2.755
-(se)-.55 G .255(xit status becomes the e)-2.905 F .255(xit sta-)-.15 F
-.263(tus of that subshell.)108 441.6 R .263(If that function is not de\
-\214ned, the shell prints an error message and returns an e)5.263 F .263
-(xit sta-)-.15 F(tus of 127.)108 453.6 Q 1.089(If the search is success\
-ful, or if the command name contains one or more slashes, the shell e)
-108 470.4 R -.15(xe)-.15 G 1.089(cutes the).15 F .197
-(named program in a separate e)108 482.4 R -.15(xe)-.15 G .197
-(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 .198
-(n, and the remain-).15 F(ing ar)108 494.4 Q
-(guments to the command are set to the ar)-.18 E(guments gi)-.18 E -.15
-(ve)-.25 G(n, if an).15 E -.65(y.)-.15 G 1.049(If this e)108 511.2 R
--.15(xe)-.15 G 1.049(cution f).15 F 1.049
-(ails because the \214le is not in e)-.1 F -.15(xe)-.15 G 1.048
-(cutable format, and the \214le is not a directory).15 F 3.548(,i)-.65 G
-3.548(ti)-3.548 G 3.548(sa)-3.548 G(s-)-3.548 E .042(sumed to be a)108
-523.2 R/F5 10/Times-Italic@0 SF .042(shell script)2.542 F F0 2.542
-(,a\214)C .043(le containing shell commands.)-2.542 F 2.543(As)5.043 G
-.043(ubshell is spa)-2.543 F .043(wned to e)-.15 F -.15(xe)-.15 G .043
-(cute it.).15 F .043(This sub-)5.043 F .275
-(shell reinitializes itself, so that the ef)108 535.2 R .274
-(fect is as if a ne)-.25 F 2.774(ws)-.25 G .274(hell had been in)-2.774
-F -.2(vo)-.4 G -.1(ke).2 G 2.774(dt).1 G 2.774(oh)-2.774 G .274
-(andle the script, with the)-2.774 F -.15(ex)108 547.2 S 2.357
-(ception that the locations of commands remembered by the parent \(see)
-.15 F F3(hash)4.858 E F0(belo)4.858 E 4.858(wu)-.25 G(nder)-4.858 E F1
-(SHELL)4.858 E -.09(BU)108 559.2 S(IL).09 E(TIN COMMANDS)-.828 E F2(\))A
-F0(are retained by the child.)2.25 E .348(If the program is a \214le be)
-108 576 R .348(ginning with)-.15 F F3(#!)2.848 E F0 2.848(,t)C .347(he \
-remainder of the \214rst line speci\214es an interpreter for the pro-)
--2.848 F 3.178(gram. The)108 588 R .678(shell e)3.178 F -.15(xe)-.15 G
-.678(cutes the speci\214ed interpreter on operating systems that do not\
- handle this e).15 F -.15(xe)-.15 G(cutable).15 E .206(format themselv)
-108 600 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 .267
-(terpreter name on the \214rst line of the program, follo)108 612 R .268
-(wed by the name of the program, follo)-.25 F .268(wed by the com-)-.25
-F(mand ar)108 624 Q(guments, if an)-.18 E -.65(y.)-.15 G F4
-(COMMAND EXECUTION ENVIR)72 640.8 Q(ONMENT)-.329 E F0(The shell has an)
-108 652.8 Q F5 -.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 669.6 Q
-1.406(open \214les inherited by the shell at in)144 669.6 R -.2(vo)-.4 G
-1.405(cation, as modi\214ed by redirections supplied to the).2 F F3
-(exec)3.905 E F0 -.2(bu)144 681.6 S(iltin).2 E<83>108 698.4 Q
-(the current w)144 698.4 Q(orking directory as set by)-.1 E F3(cd)2.5 E
-F0(,)A F3(pushd)2.5 E F0 2.5(,o)C(r)-2.5 E F3(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 715.2 Q(the \214le creation mode mask as set by)144 715.2 Q F3
-(umask)2.5 E F0(or inherited from the shell')2.5 E 2.5(sp)-.55 G(arent)
--2.5 E(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(35)190.395 E 0 Cg
-EP
-%%Page: 36 36
+(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<83>108 84 Q
-(current traps set by)144 84 Q/F1 10/Times-Bold@0 SF(trap)2.5 E F0<83>
-108 100.8 Q .256(shell parameters that are set by v)144 100.8 R .256
-(ariable assignment or with)-.25 F F1(set)2.756 E F0 .257
-(or inherited from the shell')2.756 F 2.757(sp)-.55 G(arent)-2.757 E
-(in the en)144 112.8 Q(vironment)-.4 E<83>108 129.6 Q
-(shell functions de\214ned during e)144 129.6 Q -.15(xe)-.15 G
+(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 146.4 Q
-(options enabled at in)144 146.4 Q -.2(vo)-.4 G(cation \(either by def)
-.2 E(ault or with command-line ar)-.1 E(guments\) or by)-.18 E F1(set)
-2.5 E F0<83>108 163.2 Q(options enabled by)144 163.2 Q F1(shopt)2.5 E F0
-<83>108 180 Q(shell aliases de\214ned with)144 180 Q F1(alias)2.5 E F0
-<83>108 196.8 Q -.25(va)144 196.8 S
+(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 F1($$)2.5 E F0 2.5(,a)C(nd the v)-2.5 E(alue of)-.25 E
-/F2 9/Times-Bold@0 SF(PPID)2.5 E F0 .427
-(When a simple command other than a b)108 213.6 R .426
-(uiltin or shell function is to be e)-.2 F -.15(xe)-.15 G .426
-(cuted, it is in).15 F -.2(vo)-.4 G -.1(ke).2 G 2.926(di).1 G 2.926(nas)
--2.926 G(eparate)-2.926 E -.15(exe)108 225.6 S .133(cution en).15 F .133
+(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
-.134(otherwise noted, the v)2.634 F .134(alues are inherited from)-.25 F
-(the shell.)108 237.6 Q<83>108 254.4 Q 1.056(the shell')144 254.4 R
-3.556(so)-.55 G 1.056(pen \214les, plus an)-3.556 F 3.556(ym)-.15 G
-1.056
+.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 266.4 Q<83>108 283.2 Q(the current w)144 283.2 Q
-(orking directory)-.1 E<83>108 300 Q(the \214le creation mode mask)144
-300 Q<83>108 316.8 Q .856(shell v)144 316.8 R .857
+-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 328.8 Q(vironment)
--.4 E<83>108 345.6 Q .307(traps caught by the shell are reset to the v)
-144 345.6 R .306(alues inherited from the shell')-.25 F 2.806(sp)-.55 G
-.306(arent, and traps ignored)-2.806 F(by the shell are ignored)144
-357.6 Q 2.5(Ac)108 374.4 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
+(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 .577(Command substitution, commands grouped with pare\
-ntheses, and asynchronous commands are in)108 391.2 R -.2(vo)-.4 G -.1
-(ke).2 G 3.078(di).1 G(n)-3.078 E 2.745(as)108 403.2 S .245(ubshell en)
--2.745 F .245(vironment that is a duplicate of the shell en)-.4 F .244
-(vironment, e)-.4 F .244(xcept that traps caught by the shell are)-.15 F
-.358(reset to the v)108 415.2 R .358
+(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 .359(commands that are in)2.859 F -.2(vo)
--.4 G -.1(ke).2 G(d).1 E .857(as part of a pipeline are also e)108 427.2
-R -.15(xe)-.15 G .856(cuted in a subshell en).15 F 3.356
-(vironment. Changes)-.4 F .856(made to the subshell en)3.356 F(viron-)
--.4 E(ment cannot af)108 439.2 Q(fect the shell')-.25 E 2.5(se)-.55 G
--.15(xe)-2.65 G(cution en).15 E(vironment.)-.4 E 1.376(Subshells spa)108
-456 R 1.376(wned to e)-.15 F -.15(xe)-.15 G 1.377
+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<ad65>3.877 E F0 1.377(option from the parent)3.877 F 2.5(shell. When)
-108 468 R(not in)2.5 E/F3 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 .405(If a command is follo)108 484.8 R
-.405(wed by a)-.25 F F1(&)2.905 E F0 .404(and job control is not acti)
-2.905 F -.15(ve)-.25 G 2.904(,t).15 G .404(he def)-2.904 F .404
-(ault standard input for the command)-.1 F .197(is the empty \214le)108
-496.8 R F3(/de)2.697 E(v/null)-.15 E F0 5.197(.O)C .197
-(therwise, the in)-5.197 F -.2(vo)-.4 G -.1(ke).2 G 2.697(dc).1 G .198
-(ommand inherits the \214le descriptors of the calling shell)-2.697 F
-(as modi\214ed by redirections.)108 508.8 Q/F4 10.95/Times-Bold@0 SF
-(ENVIR)72 525.6 Q(ONMENT)-.329 E F0 2.344(When a program is in)108 537.6
+/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 F3(en)5.033 E(vir)-.4 E(onment)-.45
-E F0 7.343(.T).68 G 2.343(his is a list of)-7.343 F F3(name)108 549.6 Q
-F0<ad>A F3(value)A F0(pairs, of the form)2.5 E F3(name)2.86 E F0(=)A F3
-(value)A F0(.).18 E .438(The shell pro)108 566.4 R .438(vides se)-.15 F
+(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 .439(wn en-)-.25 F .709(vironment a\
+(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 578.4 R F3 -.2(ex)3.208 G(port).2 E F0 .708(to child pro-)3.888 F
-2.703(cesses. Ex)108 590.4 R .203(ecuted commands inherit the en)-.15 F
+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.704
-(wp)-.25 G(aram-)-2.704 E .332
-(eters and functions to be added to and deleted from the en)108 602.4 R
+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 .131
-(vironment is modi\214ed, the ne)108 614.4 R 2.631(wv)-.25 G .131
-(alue becomes part of the en)-2.881 F .132
-(vironment, replacing the old.)-.4 F .132(The en)5.132 F(vironment)-.4 E
-.321(inherited by an)108 626.4 R 2.821(ye)-.15 G -.15(xe)-2.971 G .321
+(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 .32(vironment, whose v)-.4 F .32(alues may be modi-)
--.25 F .533(\214ed in the shell, less an)108 638.4 R 3.033(yp)-.15 G
-.534(airs remo)-3.033 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.034(ya)
--.15 G .534(dditions via the)-3.034 F F1(export)3.034 E F0(and)3.034 E
-F1(de-)3.034 E(clar)108 650.4 Q 2.5<65ad>-.18 G(x)-2.5 E F0(commands.)
-2.5 E .563(The en)108 667.2 R .563(vironment for an)-.4 F(y)-.15 E F3
-.563(simple command)3.403 F F0 .562
+(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
-.202(parameter assignments, as described abo)108 679.2 R .502 -.15(ve i)
--.15 H(n).15 E F2 -.666(PA)2.702 G(RAMETERS).666 E/F5 9/Times-Roman@0 SF
-(.)A F0 .202(These assignment statements af)4.702 F .203(fect only the)
--.25 F(en)108 691.2 Q(vironment seen by that command.)-.4 E .81(If the)
-108 708 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
-F3(all)3.64 E F0 .81(parameter assignments are placed in)3.82 F(the en)
-108 720 Q
+.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(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(36)190.395 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(When)108 84 Q/F1
-10/Times-Bold@0 SF(bash)3.585 E F0(in)3.585 E -.2(vo)-.4 G -.1(ke).2 G
-3.585(sa).1 G 3.585(ne)-3.585 G 1.085(xternal command, the v)-3.735 F
-(ariable)-.25 E F1(_)3.585 E F0 1.086
+-.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 96 Q(vironment.)-.4 E/F2 10.95
-/Times-Bold@0 SF(EXIT ST)72 112.8 Q -1.04(AT)-.986 G(US)1.04 E F0 .151
-(The e)108 124.8 R .151(xit status of an e)-.15 F -.15(xe)-.15 G .151
-(cuted command is the v).15 F .15(alue returned by the)-.25 F/F3 10
-/Times-Italic@0 SF(waitpid)2.65 E F0 .15(system call or equi)2.65 F -.25
-(va)-.25 G .15(lent func-).25 F 2.847(tion. Exit)108 136.8 R .347
-(statuses f)2.847 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 .348(alues abo)-.25 F .648 -.15(ve 1)-.15 H(25).15 E(specially)108
-148.8 Q 5.507(.E)-.65 G .507(xit statuses from shell b)-5.507 F .507
+(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.506 E(certain circumstances, the shell will use special v)108
-160.8 Q(alues to indicate speci\214c f)-.25 E(ailure modes.)-.1 E -.15
-(Fo)108 177.6 S 3.372(rt).15 G .872(he shell')-3.372 F 3.372(sp)-.55 G
-.873(urposes, a command which e)-3.372 F .873(xits with a zero e)-.15 F
-.873(xit status has succeeded.)-.15 F .873(An e)5.873 F .873
-(xit status of)-.15 F .049(zero indicates success.)108 189.6 R 2.549(An)
-5.049 G .049(on-zero e)-2.549 F .049(xit status indicates f)-.15 F 2.549
-(ailure. When)-.1 F 2.549(ac)2.549 G .048(ommand terminates on a f)
--2.549 F .048(atal sig-)-.1 F(nal)108 201.6 Q F3(N)2.5 E F0(,)A F1(bash)
-2.5 E F0(uses the v)2.5 E(alue of 128+)-.25 E F3(N)A F0(as the e)2.5 E
-(xit status.)-.15 E .404
-(If a command is not found, the child process created to e)108 218.4 R
--.15(xe)-.15 G .404(cute it returns a status of 127.).15 F .405
-(If a command is)5.405 F(found b)108 230.4 Q(ut is not e)-.2 E -.15(xe)
--.15 G(cutable, the return status is 126.).15 E(If a command f)108 247.2
+(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 .081(Shell b)108 264 R .081
-(uiltin commands return a status of 0 \()-.2 F F3(true)A F0 2.581(\)i)C
-2.581(fs)-2.581 G .08(uccessful, and non-zero \()-2.581 F F3(false)A F0
-2.58(\)i)C 2.58(fa)-2.58 G 2.58(ne)-2.58 G .08(rror occurs while)-2.58 F
-(the)108 276 Q 2.967(ye)-.15 G -.15(xe)-3.117 G 2.967(cute. All).15 F
--.2(bu)2.967 G .467(iltins return an e).2 F .468
+-.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 .468(lid options or).25 F(missing ar)108 288 Q(guments.)-.18 E
-F1(Bash)108 304.8 Q F0 .202(itself returns the e)2.702 F .202
-(xit status of the last command e)-.15 F -.15(xe)-.15 G .201
-(cuted, unless a syntax error occurs, in which case).15 F(it e)108 316.8
+(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 F2
-(SIGN)72 333.6 Q(ALS)-.219 E F0(When)108 345.6 Q F1(bash)2.502 E F0 .002
+(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 9/Times-Bold@0 SF(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
-357.6 Q 1.216 -.15(ve s)-.25 H .916(hell\), and).15 F F4(SIGINT)3.416 E
-F0 .915(is caught and handled \(so that the)3.166 F F1(wait)3.415 E F0
--.2(bu)3.415 G .915(iltin is interruptible\).).2 F .915(In all cases,)
-5.915 F F1(bash)108 369.6 Q F0(ignores)2.5 E F4(SIGQ)2.5 E(UIT)-.09 E/F5
-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 F4(SIGTTIN)2.5 E F5(,)A F4(SIGTT)2.25 E(OU)
--.162 E F5(,)A F0(and)2.25 E F4(SIGTSTP)2.5 E F5(.)A F0(Non-b)108 386.4
-Q 1.064(uiltin commands run by)-.2 F F1(bash)3.564 E F0(ha)3.564 E 1.365
--.15(ve s)-.2 H 1.065(ignal handlers set to the v).15 F 1.065
-(alues inherited by the shell from its)-.25 F 3.248(parent. When)108
-398.4 R .748(job control is not in ef)3.248 F .747
-(fect, asynchronous commands ignore)-.25 F F4(SIGINT)3.247 E F0(and)
-2.997 E F4(SIGQ)3.247 E(UIT)-.09 E F0 .747(in addi-)2.997 F .652
-(tion to these inherited handlers.)108 410.4 R .653
-(Commands run as a result of command substitution ignore the k)5.652 F
--.15(ey)-.1 G(board-).15 E(generated job control signals)108 422.4 Q F4
-(SIGTTIN)2.5 E F5(,)A F4(SIGTT)2.25 E(OU)-.162 E F5(,)A F0(and)2.25 E F4
-(SIGTSTP)2.5 E F5(.)A F0 2.046(The shell e)108 439.2 R 2.046
-(xits by def)-.15 F 2.045(ault upon receipt of a)-.1 F F4(SIGHUP)4.545 E
-F5(.)A F0 2.045(Before e)6.545 F 2.045(xiting, an interacti)-.15 F 2.345
--.15(ve s)-.25 H 2.045(hell resends the).15 F F4(SIGHUP)108 451.2 Q F0
-1.004(to all jobs, running or stopped.)3.254 F 1.004
-(Stopped jobs are sent)6.004 F F4(SIGCONT)3.505 E F0 1.005
-(to ensure that the)3.255 F 3.505(yr)-.15 G(ecei)-3.505 E 1.305 -.15
-(ve t)-.25 H(he).15 E F4(SIGHUP)108 463.2 Q F5(.)A F0 2.53 -.8(To p)5.43
-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.429(df).15 G
-.929(rom the)-3.429 F 1.356(jobs table with the)108 475.2 R F1(diso)
-3.856 E(wn)-.1 E F0 -.2(bu)3.856 G 1.356(iltin \(see).2 F F4 1.356
-(SHELL B)3.856 F(UIL)-.09 E 1.356(TIN COMMANDS)-.828 F F0(belo)3.607 E
-1.357(w\) or mark)-.25 F 1.357(ed to not recei)-.1 F -.15(ve)-.25 G F4
-(SIGHUP)108 487.2 Q F0(using)2.25 E F1(diso)2.5 E(wn \255h)-.1 E F0(.)A
-.166(If the)108 504 R F1(huponexit)2.666 E F0 .166
+-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 F4(SIGHUP)2.666 E F0 .166
+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
-516 Q(xits.)-.15 E(If)108 532.8 Q F1(bash)3.046 E F0 .546(is w)3.046 F
+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 .663(will not be e)108 544.8 R -.15(xe)-.15 G .663
+-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 .662(is w)3.163 F .662(aiting for an asynchronous command)-.1 F .326
-(via the)108 556.8 R F1(wait)2.826 E F0 -.2(bu)2.826 G .327(iltin, the \
+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.827 E F0 -.2(bu)2.827 G .327(iltin to re-).2 F
-(turn immediately with an e)108 568.8 Q
+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 F2(JOB CONTR)72 585.6 Q(OL)-.329 E F3 -.25
-(Jo)108 597.6 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 F3(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 F3 -.37(re)C
-(-).37 E(sume)108 609.6 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
+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 621.6 Q
+(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 638.4 R
-F3(job)5.025 E F0 .785(with each pipeline.)3.515 F .784(It k)5.785 F
+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 650.4 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 F3(bac)3.095 E(kgr)-.2 E
-(ound)-.45 E F0 .325(\), it prints a line).77 F(that looks lik)108 662.4
-Q(e:)-.1 E([1] 25647)144 679.2 Q .241(indicating that this job is job n\
-umber 1 and that the process ID of the last process in the pipeline ass\
-ociated)108 696 R .732(with this job is 25647.)108 708 R .733
+(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 720 Q F3(job)
-4.24 E F0(abstraction as the basis for job control.)2.73 E(GNU Bash 5.1)
-72 768 Q(2020 October 29)141.235 E(37)190.395 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 1.982 -.8(To f)108
-84 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 96 R/F1 10/Times-Italic@0 SF(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
+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
-108 R .323 -.15(ve k)-.25 H -.15(ey).05 G .023
-(board-generated signals such as).15 F/F2 9/Times-Bold@0 SF(SIG-)2.522 E
-(INT)108 120 Q/F3 9/Times-Roman@0 SF(.)A F0 1.215
-(These processes are said to be in the)5.715 F F1(for)5.685 E -.4(eg)
--.37 G -.45(ro).4 G(und).45 E F0(.).77 E F1(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 132 R .146(fers from the terminal')-.25 F .146
+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 144 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/F4 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 156 R .551
-(processes which attempt to read from \(write to when)3.052 F F4 .551
+(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
-.717(terminal are sent a)108 168 R F2 .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 180 Q 1.088
-(If the operating system on which)108 196.8 R/F5 10/Times-Bold@0 SF
-(bash)3.588 E F0 1.088(is running supports job control,)3.588 F F5(bash)
+(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 208.8 S .301(ping the).8 F F1(suspend)3.141 E F0 .301
-(character \(typically)3.571 F F5(^Z)2.801 E F0 2.801(,C)C .301
+(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 220.8 R F5(bash)4.642 E F0
-7.142(.T)C 2.142(yping the)-7.942 F F1 2.142(delayed suspend)4.992 F F0
-2.142(character \(typically)5.412 F F5(^Y)4.642 E F0 4.642(,C)C
+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
-232.8 R(to)108 244.8 Q F5(bash)3.392 E F0 5.892(.T)C .892
+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
-F5(bg)3.392 E F0 .892(command to continue it in the)3.392 F .17
-(background, the)108 256.8 R F5(fg)2.67 E F0 .17
-(command to continue it in the fore)2.67 F .17(ground, or the)-.15 F F5
-(kill)2.67 E F0 .17(command to kill it.)2.67 F(A)5.17 E F5(^Z)2.67 E F0
-(tak)2.67 E .17(es ef-)-.1 F 1.419(fect immediately)108 268.8 R 3.919
+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 280.8 Q .777(There are a number of w)108 297.6 R .777
-(ays to refer to a job in the shell.)-.1 F .777(The character)5.777 F F5
-(%)3.277 E F0 .777(introduces a job speci\214cation)3.277 F(\()108 309.6
-Q F1(jobspec)A F0 3.458(\). Job)B(number)3.458 E F1(n)3.818 E F0 .957
-(may be referred to as)3.697 F F5(%n)3.457 E F0 5.957(.A)C .957
+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 321.6 R -.15(Fo)5.59 G 3.09(re).15 G(xample,)-3.24 E F5(%ce)3.09 E
+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
-333.6 R .385(gins with)-.15 F F5(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 F5(bash)2.885
-E F0 .385(reports an)2.885 F(error)108 345.6 Q 5.194(.U)-.55 G(sing)
--5.194 E F5(%?ce)2.694 E F0 2.694(,o)C 2.694(nt)-2.694 G .194
+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 F5(ce)2.694 E F0 .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 357.6 R F5(bash)2.806 E F0
+(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
-F5(%%)2.806 E F0(and)2.806 E F5(%+)2.806 E F0 .306(refer to the shell')
-2.806 F(s)-.55 E .132(notion of the)108 369.6 R F1(curr)2.832 E .133
+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
-381.6 R F1(pr)3.826 E -.15(ev)-.37 G .076(ious job).15 F F0 .076
-(may be referenced using)2.806 F F5<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 F5(%+)2.575 E F0(and)
-2.575 E F5<25ad>2.575 E F0 .075(can both)2.575 F .317
-(be used to refer to that job)108 393.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 F5
+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
-405.6 R -.1(wa)-.1 G .033(ys \215agged with a).1 F F5(+)2.533 E F0 2.533
-(,a)C .033(nd the pre)-2.533 F .033(vious job with a)-.25 F F5<ad>2.533
+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
-417.6 Q(.)-.4 E .443
-(Simply naming a job can be used to bring it into the fore)108 434.4 R
-(ground:)-.15 E F5(%1)2.944 E F0 .444(is a synon)2.944 F .444(ym for)
--.15 F F5 -.63(``)2.944 G .444(fg %1').63 F(')-.63 E F0 2.944(,b)C
+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
-446.4 R 3.973(ground. Similarly)-.15 F(,)-.65 E F5 -.63(``)3.972 G 1.472
+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 458.4 Q -.25(va)-.25 G(lent to).25 E F5 -.63(``)2.5 G(bg %1')
-.63 E(')-.63 E F0(.)A .13(The shell learns immediately whene)108 475.2 R
+(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 F5(bash)2.631 E F0 -.1(wa)2.631 G .131
+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 487.2 R 2.658(ss)-.55 G
+(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 F5<ad62>2.657 E F0 .157
-(option to)2.657 F(the)108 499.2 Q F5(set)2.647 E F0 -.2(bu)2.647 G .147
-(iltin command is enabled,).2 F F5(bash)2.647 E F0 .148
+(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 F2(SIGCHLD)2.648 E F0 .148(is e)2.398 F
--.15(xe)-.15 G(-).15 E(cuted for each child that e)108 511.2 Q(xits.)
--.15 E .033(If an attempt to e)108 528 R(xit)-.15 E F5(bash)2.533 E F0
+(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 F5(checkjobs)2.532 E F0 .032
-(shell option has been enabled)2.532 F 1.002(using the)108 540 R F5
+(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 F5(checkjobs)3.503 E F0 1.003
+(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 552 R(The)5.955 E F5(jobs)3.455 E F0 .955
+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 564 R .604
+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 576 Q 2.5(ys)-.15 G(topped jobs are terminated.)-2.5 E .645
-(When the shell is w)108 592.8 R .645
-(aiting for a job or process using the)-.1 F F5(wait)3.144 E F0 -.2(bu)
-3.144 G .644(iltin, and job control is enabled,).2 F F5(wait)3.144 E F0
-(will)3.144 E .282(return when the job changes state. The)108 604.8 R F5
-<ad66>2.782 E F0 .282(option causes)2.782 F F5(wait)2.782 E F0 .282
+(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 616.8 Q/F6 10.95/Times-Bold@0 SF(PR)72 633.6 Q
-(OMPTING)-.329 E F0 .645(When e)108 645.6 R -.15(xe)-.15 G .645
-(cuting interacti).15 F -.15(ve)-.25 G(ly).15 E(,)-.65 E F5(bash)3.145 E
-F0 .645(displays the primary prompt)3.145 F F2(PS1)3.145 E F0 .645
+(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 657.6 R F2(PS2)2.927 E F0 .427
-(when it needs more input to complete a command.)2.677 F F5(Bash)5.428 E
-F0(displays)2.928 E F2(PS0)2.928 E F0(after)2.678 E .038
-(it reads a command b)108 669.6 R .038(ut before e)-.2 F -.15(xe)-.15 G
-.038(cuting it.).15 F F5(Bash)5.038 E F0(displays)2.537 E F2(PS4)2.537 E
+(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 681.6 R F5<ad78>
-3.621 E F0 1.122(option is enabled.)3.621 F F5(Bash)6.122 E F0(allo)
+(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 693.6 Q(ws:)-.25 E F5(\\a)144 705.6 Q F0
-(an ASCII bell character \(07\))180 705.6 Q F5(\\d)144 717.6 Q F0
-(the date in "W)180 717.6 Q(eekday Month Date" format \(e.g., "T)-.8 E
-(ue May 26"\))-.45 E(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(38)
-190.395 E 0 Cg EP
-%%Page: 39 39
+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(\\D{)144 84 Q/F2 10/Times-Italic@0 SF(format)A F1(})A F0(the)180 96 Q
-F2(format)3.927 E F0 1.427(is passed to)3.927 F F2(strftime)3.927 E F0
-1.427(\(3\) and the result is inserted into the prompt string; an)B
-(empty)180 108 Q F2(format)2.5 E F0
-(results in a locale-speci\214c time representation.)2.5 E
-(The braces are required)5 E F1(\\e)144 120 Q F0
-(an ASCII escape character \(033\))180 120 Q F1(\\h)144 132 Q F0
-(the hostname up to the \214rst `.)180 132 Q(')-.7 E F1(\\H)144 144 Q F0
-(the hostname)180 144 Q F1(\\j)144 156 Q F0
-(the number of jobs currently managed by the shell)180 156 Q F1(\\l)144
-168 Q F0(the basename of the shell')180 168 Q 2.5(st)-.55 G(erminal de)
--2.5 E(vice name)-.25 E F1(\\n)144 180 Q F0(ne)180 180 Q(wline)-.25 E F1
-(\\r)144 192 Q F0(carriage return)180 192 Q F1(\\s)144 204 Q F0
-(the name of the shell, the basename of)180 204 Q F1($0)2.5 E F0
+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
-216 Q F0(the current time in 24-hour HH:MM:SS format)180 216 Q F1(\\T)
-144 228 Q F0(the current time in 12-hour HH:MM:SS format)180 228 Q F1
-(\\@)144 240 Q F0(the current time in 12-hour am/pm format)180 240 Q F1
-(\\A)144 252 Q F0(the current time in 24-hour HH:MM format)180 252 Q F1
-(\\u)144 264 Q F0(the username of the current user)180 264 Q F1(\\v)144
-276 Q F0(the v)180 276 Q(ersion of)-.15 E F1(bash)2.5 E F0
-(\(e.g., 2.00\))2.5 E F1(\\V)144 288 Q F0(the release of)180 288 Q F1
+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 300 Q F0 .115(the current w)
-180 300 R .115(orking directory)-.1 F 2.615(,w)-.65 G(ith)-2.615 E/F3 9
-/Times-Bold@0 SF($HOME)2.615 E F0(abbre)2.365 E .116
-(viated with a tilde \(uses the v)-.25 F .116(alue of the)-.25 F F3(PR)
-180 312 Q(OMPT_DIR)-.27 E(TRIM)-.36 E F0 -.25(va)2.25 G(riable\)).25 E
-F1(\\W)144 324 Q F0(the basename of the current w)180 324 Q
-(orking directory)-.1 E 2.5(,w)-.65 G(ith)-2.5 E F3($HOME)2.5 E F0
-(abbre)2.25 E(viated with a tilde)-.25 E F1(\\!)144 336 Q F0
-(the history number of this command)180 336 Q F1(\\#)144 348 Q F0
-(the command number of this command)180 348 Q F1(\\$)144 360 Q F0
-(if the ef)180 360 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 372 Q F2(nnn)
-A F0(the character corresponding to the octal number)180 372 Q F2(nnn)
-2.5 E F1(\\\\)144 384 Q F0 2.5(ab)180 384 S(ackslash)-2.5 E F1(\\[)144
-396 Q F0(be)180 396 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 408 Q F1(\\])144 420 Q F0
-(end a sequence of non-printing characters)180 420 Q .119
-(The command number and the history number are usually dif)108 436.8 R
+(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 448.8 R F3(HIST)3.046 E(OR)-.162 E(Y)-.315 E F0
-(be-)2.796 E(lo)108 460.8 Q .354(w\), while the command number is the p\
+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 472.8 R .822
+(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 484.8 R .682(xpansion, and quote remo)-.15
+-.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 496.8 R F1(shopt)3.698 E F0 1.198
-(command under)3.698 F F3 1.197(SHELL B)3.697 F(UIL)-.09 E 1.197
+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 508.8 R .322(fects if escaped portions of the string appear within \
+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
-520.8 Q(ord e)-.1 E(xpansion.)-.15 E/F4 10.95/Times-Bold@0 SF(READLINE)
-72 537.6 Q F0 .151
+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 549.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 561.6 R -.15
+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 573.6 S 1.407
+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 585.6 S 3.35(ailable. Line)-.05 F .85
+(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 597.6 Q F3 .763(SHELL B)3.263 F(UIL)-.09 E .763(TIN COMMANDS)
+(\(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 609.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 626.4 Q
+(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 638.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 F2 -.1(ke)C(y)-.2 E F0(,)A
-1.153(e.g., C\255n means Control\255N.)108 650.4 R(Similarly)6.153 E(,)
--.65 E F2(meta)4.033 E F0 -.1(ke)3.913 G 1.153(ys are denoted by M\255)
--.05 F F2 -.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 662.4 S .83
-(yboards without a)-.05 F F2(meta)3.71 E F0 -.1(ke)3.59 G 2.13 -.65
-(y, M)-.05 H<ad>.65 E F2(x)A F0 .83(means ESC)3.33 F F2(x)3.33 E F0 3.33
+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 F2(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 674.4 R F2 .6(meta pr)3.1 F
-(e\214x)-.37 E F0 5.6(.T)C .6(he combination M\255C\255)-5.6 F F2(x)A F0
-.599(means ESC\255Control\255)3.099 F F2(x)A F0 3.099(,o)C 3.099(rp)
+(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 686.4 Q .3 -.15(ey w)-.1 H
-(hile pressing the).15 E F2(x)3.27 E F0 -.1(ke)3.03 G -.65(y.)-.05 G(\))
-.65 E .595(Readline commands may be gi)108 703.2 R -.15(ve)-.25 G 3.096
-(nn).15 G(umeric)-3.096 E F2(ar)3.426 E(guments)-.37 E F0 3.096(,w).27 G
+(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 715.2 Q(we)-.25 E -.15(ve)-.25 G 1.419 -.4(r, i).15 H 3.119(ti)
+(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 2.938(acts in the forw)108 727.2 R 2.938
-(ard direction \(e.g.,)-.1 F F1(kill\255line)5.438 E F0 5.438(\)c)C
-2.938(auses that command to act in a backw)-5.438 F 2.938
-(ard direction.)-.1 F(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E
-(39)190.395 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
-(Commands whose beha)108 84 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 100.8 R/F1 10/Times-Italic@0 SF
+(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 F1
-(yank-)-3.311 E(ing)108 112.8 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 F1
+(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 124.8 R .567(ed all at once.)-.1 F
-.567(Commands which do not kill te)5.567 F .567
+-.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 136.8 Q/F2 10/Times-Bold@0 SF(Readline Initialization)87 153.6 Q F0
-.091(Readline is customized by putting commands in an initialization \
-\214le \(the)108 165.6 R F1(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
-177.6 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 F1(~/.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 189.6 R .561(not e)3.061 F
-.562(xist or cannot be read, the ultimate def)-.15 F .562(ault is)-.1 F
-F1(/etc/inputr)4.212 E(c)-.37 E F0 5.562(.W).31 G .562
+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 201.6 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 213.6 R 2.738(wb)-.25 G .238
+ 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 225.6 R F2(#)3.054 E F0 .554(are comments.)3.054 F .554
-(Lines be)5.554 F .554(ginning with a)-.15 F F2($)3.054 E F0 .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 237.6 S 2.5(yb)-.05 G(indings and v)-2.5 E
-(ariable settings.)-.25 E .986(The def)108 254.4 R .986(ault k)-.1 F
--.15(ey)-.1 G .987(-bindings may be changed with an).15 F F1(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 266.4 Q
-(wn commands and bindings.)-.25 E -.15(Fo)108 283.2 S 2.5(re).15 G
-(xample, placing)-2.65 E(M\255Control\255u: uni)144 300 Q -.15(ve)-.25 G
-(rsal\255ar).15 E(gument)-.18 E(or)108 312 Q(C\255Meta\255u: uni)144 324
-Q -.15(ve)-.25 G(rsal\255ar).15 E(gument)-.18 E(into the)108 336 Q F1
-(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 F1
-(univer)2.58 E(sal\255ar)-.1 E(gument)-.37 E F0(.).68 E 1.011(The follo)
-108 352.8 R 1.011(wing symbolic character names are recognized:)-.25 F
-F1 -.4(RU)3.511 G(BOUT).4 E F0(,)1.27 E F1(DEL)4.091 E F0(,).53 E F1
-(ESC)4.021 E F0(,).72 E F1(LFD)4.091 E F0(,).28 E F1(NEWLINE)4.21 E F0
-(,).73 E F1(RET)4.14 E F0(,)1.27 E F1(RETURN)108.63 364.8 Q F0(,)1.1 E
-F1(SPC)2.83 E F0(,).72 E F1(SP)2.83 E -.3(AC)-.9 G(E).3 E F0 2.5(,a).73
-G(nd)-2.5 E F1 -.5(TA)2.5 G(B).5 E F0(.).27 E .209
-(In addition to command names, readline allo)108 381.6 R .209(ws k)-.25
--.15(ey)-.1 G 2.709(st).15 G 2.709(ob)-2.709 G 2.709(eb)-2.709 G .209
+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 393.6 Q F1(macr)2.5 E(o)-.45 E F0(\).)A F2
-(Readline K)87 410.4 Q(ey Bindings)-.25 E F0 .366
-(The syntax for controlling k)108 422.4 R .666 -.15(ey b)-.1 H .366
-(indings in the).15 F F1(inputr)2.876 E(c)-.37 E F0 .366
+-.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 434.4 R .264(xt of a macro and a k)
+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
-446.4 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 F1(Meta\255)2.638 E F0(or)
-2.638 E F1(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 458.4 Q
-.16(When using the form)108 475.2 R F2 -.1(ke)2.66 G(yname).1 E F0(:)A
-F1(function\255name).833 E F0(or)2.66 E F1(macr)2.66 E(o)-.45 E F0(,)A
-F1 -.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 487.2 R(or e)
--.15 E(xample:)-.15 E(Control-u: uni)144 511.2 Q -.15(ve)-.25 G
-(rsal\255ar).15 E(gument)-.18 E(Meta-Rubout: backw)144 523.2 Q
-(ard-kill-w)-.1 E(ord)-.1 E(Control-o: "> output")144 535.2 Q .699
-(In the abo)108 552 R .998 -.15(ve ex)-.15 H(ample,).15 E F1(C\255u)
-3.038 E F0 .698(is bound to the function)3.448 F F2(uni)3.198 E -.1(ve)
--.1 G(rsal\255ar).1 E(gument)-.1 E F0(,)A F1(M\255DEL)3.878 E F0 .698
-(is bound to the func-)3.728 F(tion)108 564 Q F2(backward\255kill\255w)
-2.758 E(ord)-.1 E F0 2.758(,a)C(nd)-2.758 E F1(C\255o)2.598 E F0 .258
-(is bound to run the macro e)2.938 F .259
+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
-576 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 592.8 R F2("k)2.556
-E(eyseq")-.1 E F0(:)A F1(function\255name).833 E F0(or)2.556 E F1(macr)
-2.556 E(o)-.45 E F0(,)A F2 -.1(ke)2.556 G(yseq).1 E F0(dif)2.555 E .055
-(fers from)-.25 F F2 -.1(ke)2.555 G(yname).1 E F0(abo)2.555 E .355 -.15
+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 604.8 R 1.584 -.15(ey s)-.1 H 1.284(equence m\
+(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 616.8 R .686 -.15(ey e)-.1 H
+(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 628.8 Q("\\C\255u": uni)144 652.8 Q -.15(ve)
+(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 664.8 Q
-("\\e[11~": "Function K)144 676.8 Q .3 -.15(ey 1)-.25 H(").15 E .314
-(In this e)108 693.6 R(xample,)-.15 E F1(C\255u)2.654 E F0 .314(is ag)
-3.064 F .315(ain bound to the function)-.05 F F2(uni)2.815 E -.1(ve)-.1
-G(rsal\255ar).1 E(gument)-.1 E F0(.)A F1 .315(C\255x C\255r)5.155 F F0
-.315(is bound to the func-)3.545 F(tion)108 705.6 Q F2 -.18(re)2.5 G
-<ad72>.18 E(ead\255init\255\214le)-.18 E F0 2.5(,a)C(nd)-2.5 E F1
-(ESC [ 1 1 ~)3.01 E F0(is bound to insert the te)3.94 E(xt)-.15 E F4
-(Function Key 1)2.5 E F0(.)A
-(The full set of GNU Emacs style escape sequences is)108 722.4 Q
-(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(40)190.395 E 0 Cg EP
-%%Page: 41 41
+("\\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<5c43ad>144 84 Q F0(control pre\214x)180 84 Q F1<5c4dad>144 96 Q F0
-(meta pre\214x)180 96 Q F1(\\e)144 108 Q F0(an escape character)180 108
-Q F1(\\\\)144 120 Q F0(backslash)180 120 Q F1(\\")144 132 Q F0
-(literal ")180 132 Q F1<5c08>144 144 Q F0(literal \010)180 144 Q(In add\
-ition to the GNU Emacs style escape sequences, a second set of backslas\
-h escapes is a)108 160.8 Q -.25(va)-.2 G(ilable:).25 E F1(\\a)144 172.8
-Q F0(alert \(bell\))180 172.8 Q F1(\\b)144 184.8 Q F0(backspace)180
-184.8 Q F1(\\d)144 196.8 Q F0(delete)180 196.8 Q F1(\\f)144 208.8 Q F0
-(form feed)180 208.8 Q F1(\\n)144 220.8 Q F0(ne)180 220.8 Q(wline)-.25 E
-F1(\\r)144 232.8 Q F0(carriage return)180 232.8 Q F1(\\t)144 244.8 Q F0
-(horizontal tab)180 244.8 Q F1(\\v)144 256.8 Q F0 -.15(ve)180 256.8 S
-(rtical tab).15 E F1(\\)144 268.8 Q/F2 10/Times-Italic@0 SF(nnn)A F0
-(the eight-bit character whose v)180 268.8 Q(alue is the octal v)-.25 E
+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
-280.8 Q F2(HH)A F0(the eight-bit character whose v)180 280.8 Q
+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 297.6 R 1.141(xt of a macro, single or double\
+(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 309.6 R .089(xt is assumed to be a function name.)-.15
+(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
-321.6 Q 2.5(xpanded. Backslash)-.15 F(will quote an)2.5 E 2.5(yo)-.15 G
+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 338.4 Q F0(allo)2.93 E .43(ws the current readline k)-.25 F
+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 350.4 R .345 -.15
+(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 362.4 Q/F3 9/Times-Bold@0 SF(SHELL B)2.5 E
+(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 379.2 Q(ariables)-.92 E F0 .044(Readline has v)108 391.2
+(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 403.2 Q(c)-.37 E
-F0(\214le with a statement of the form)2.81 E F1(set)144 420 Q F2
-(variable\255name value)2.5 E F0(or using the)108 432 Q F1(bind)2.5 E F0
+(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 448.8 R .79(ariables can tak)-.25 F
+(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 460.8 R .448
+.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 472.8 Q -.15(ve)-.25 G .467
+(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
-484.8 S(lues are:).25 E F1(bell\255style \(audible\))108 501.6 Q F0 .011
-(Controls what happens when readline w)144 513.6 R .011
+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 525.6 R .94(If set to)5.94 F F1(visible)3.44 E F0
+(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 537.6 Q 2.5(sb)-.55 G(ell.)
--2.5 E F1(bind\255tty\255special\255chars \(On\))108 549.6 Q F0 .056
-(If set to)144 561.6 R F1(On)2.556 E F0 2.556(,r)C .056(eadline attempt\
+(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 573.6 Q -.15
+(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 F1(blink\255matching\255par)108 585.6 Q(en \(Off\))
--.18 E F0 .21(If set to)144 597.6 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 609.6 Q F1(color)108 621.6 Q
-(ed\255completion\255pr)-.18 E(e\214x \(Off\))-.18 E F0 .515(If set to)
-144 633.6 R F1(On)3.015 E F0 3.015(,w)C .515(hen listing completions, r\
-eadline displays the common pre\214x of the set of possible)-3.015 F
-2.935(completions using a dif)144 645.6 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 657.6 Q
-F0(en)2.5 E(vironment v)-.4 E(ariable.)-.25 E F1(color)108 669.6 Q
-(ed\255stats \(Off\))-.18 E F0 1.58(If set to)144 681.6 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
-693.6 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 705.6 Q(`#')-.63 E('\))-.63
-E F0 .884(The string that is inserted when the readline)144 717.6 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 729.6 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(GNU Bash 5.1)72 768 Q(2020 October 29)141.235
-E(41)190.395 E 0 Cg EP
-%%Page: 42 42
+-.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(completion\255display\255width \(\2551\))108 84 Q F0 1.453(The numbe\
-r of screen columns used to display possible matches when performing co\
-mpletion.)144 96 R .193(The v)144 108 R .193(alue is ignored if it is l\
-ess 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 120 Q(The def)5 E
-(ault v)-.1 E(alue is \2551.)-.25 E F1(completion\255ignor)108 132 Q
-(e\255case \(Off\))-.18 E F0(If set to)144 144 Q F1(On)2.5 E F0 2.5(,r)C
+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 156 Q F0 .094(If set to)144 168 R
+(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 180 Q F2(_)A F0 2.5(\)a)C 2.5(se)-2.5 G
+(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 192 Q(e\214x\255display\255length \(0\))-.18 E F0
+(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 204 R 1.275
-(without modi\214cation.)144 216 R 1.275(When set to a v)6.275 F 1.274
+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 228 S(lue are replaced with an \
+(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 240 Q F0 .529
-(This determines when the user is queried about vie)144 252 R .53
+(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 264 R F1(possible\255completions)3.061 E F0 3.061(command. It)3.061
+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 276 R
+-.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 288 S .368
+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(listed on the terminal.)144 300 Q F1(con)108 312 Q
--.1(ve)-.4 G(rt\255meta \(On\)).1 E F0 .612(If set to)144 324 R F1(On)
-3.112 E F0 3.112(,r)C .613(eadline will con)-3.112 F -.15(ve)-.4 G .613
-(rt characters with the eighth bit set to an ASCII k).15 F .913 -.15
-(ey s)-.1 H .613(equence by).15 F .541
+(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 336 R .541(fect, using escape as the)-.25 F F2 .541(meta pr)3.041 F
-(e-)-.37 E<8c78>144 348 Q F0 2.5(\). The)B(def)2.5 E(ault is)-.1 E F2
-(On)2.5 E F0 2.5(,b)C(ut readline will set it to)-2.7 E F2(Of)2.5 E(f)
--.18 E F0(if the locale contains eight-bit characters.)2.5 E F1
-(disable\255completion \(Off\))108 360 Q F0 .038(If set to)144 372 R F1
+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 384 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 396 Q(ol\255characters \(On\))-.18 E F0 1.211
-(When set to)144 408 R F1(On)3.711 E F0 3.711(,o)C 3.711(no)-3.711 G
-1.211(perating systems that indicate the)-3.711 F 3.711(ys)-.15 G 1.21
+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 420 Q -.15(ey)-.1 G
-(board.).15 E F1(editing\255mode \(emacs\))108 432 Q F0 .141
-(Controls whether readline be)144 444 R .141(gins with a set of k)-.15 F
-.441 -.15(ey b)-.1 H .141(indings similar to).15 F F2(Emacs)2.642 E F0
-(or)2.642 E F2(vi)2.642 E F0(.)A F1(editing\255mode)5.142 E F0
-(can be set to either)144 456 Q F1(emacs)2.5 E F0(or)2.5 E F1(vi)2.5 E
-F0(.)A F1(emacs\255mode\255string \(@\))108 468 Q F0 .518(If the)144 480
-R F2(show\255mode\255in\255pr)3.018 E(ompt)-.45 E F0 -.25(va)3.018 G
-.517(riable is enabled, this string is displayed immediately before the)
+(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 492
-R -.15(ve)-.25 G 5.622(.T).15 G .622(he v)-5.622 F .622(alue is e)-.25 F
-.622(xpanded lik)-.15 F 3.122(ea)-.1 G -.1(ke)144 504 S 3.34(yb)-.05 G
-.839(inding, so the standard set of meta- and control pre\214x)-3.34 F
-.839(es and backslash escape sequences is)-.15 F -.2(av)144 516 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
+(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 528 Q F1(enable\255brack)108 540 Q(eted\255paste \(On\))-.1 E F0
-1.222(When set to)144 552 R F1(On)3.721 E F0 3.721(,r)C 1.221
-(eadline will con\214gure the terminal in a w)-3.721 F 1.221
-(ay that will enable it to insert each)-.1 F .353
-(paste into the editing b)144 564 R(uf)-.2 E .353(fer as a single strin\
-g of characters, instead of treating each character as if)-.25 F .544
-(it had been read from the k)144 576 R -.15(ey)-.1 G 3.043(board. This)
-.15 F .543(can pre)3.043 F -.15(ve)-.25 G .543
-(nt pasted characters from being interpreted as).15 F(editing commands.)
-144 588 Q F1(enable\255k)108 600 Q(eypad \(Off\))-.1 E F0 .892
-(When set to)144 612 R F1(On)3.393 E F0 3.393(,r)C .893
+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 624 Q 2.5(wk)-.25 G -.15(ey)-2.6
-G(s.).15 E F1(enable\255meta\255k)108 636 Q(ey \(On\))-.1 E F0 .64
-(When set to)144 648 R F1(On)3.14 E F0 3.14(,r)C .64
+(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 660 Q
+(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 672 Q F0(If set to)144 684 Q F1(On)2.5 E F0
+(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 696 Q(eser)-.18 E -.1
-(ve)-.1 G(\255point \(Off\)).1 E F0 .552(If set to)144 708 R F1(On)3.052
+-.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 720 Q -.15(ve)-.25
+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(GNU Bash 5.1)72 768 Q
-(2020 October 29)141.235 E(42)190.395 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(history\255size \(unset\))108 84 Q F0 .949
-(Set the maximum number of history entries sa)144 96 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 108 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 120 R .277(By def)5.278 F
+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 132 Q F1(HISTSIZE)3.41 E F0 .91(shell v)3.41 F
-3.41(ariable. If)-.25 F .911(an attempt is made to set)3.41 F/F2 10
-/Times-Italic@0 SF(history\255size)3.411 E F0 .911(to a non-numeric v)
-3.411 F(alue,)-.25 E
-(the maximum number of history entries will be set to 500.)144 144 Q F1
-(horizontal\255scr)108 156 Q(oll\255mode \(Off\))-.18 E F0 .449
-(When set to)144 168 R F1(On)2.949 E F0 2.949(,m)C(ak)-2.949 E .448
+(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 180 R(w)-.25 E 2.5(line. This)144 192 R
+ 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 204 Q F0 1.062(If set to)144 216 R F1(On)
+(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 228 R -.05(ga)-.15 G .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 240 S(ynon)
+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(eight-bit characters.)144 252 Q F1
-(isear)108 264 Q(ch\255terminators \(`)-.18 E(`C\255[C\255J')-.63 E('\))
+(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 276 R -.15(xe)-.15 G(cut-).15 E
-.935(ing the character as a command.)144 288 R .935(If this v)5.935 F
-.935(ariable has not been gi)-.25 F -.15(ve)-.25 G 3.434(nav).15 G .934
-(alue, the characters)-3.684 F F2(ESC)3.434 E F0(and)144 300 Q F2
+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 312 S(ymap \(emacs\)).1 E F0 2.02(Set the current readline k)144 324
-R -.15(ey)-.1 G 4.521(map. The).15 F 2.021(set of v)4.521 F 2.021
-(alid k)-.25 F -.15(ey)-.1 G 2.021(map names is).15 F F2 2.021
-(emacs, emacs\255standar)4.521 F(d,)-.37 E .042
-(emacs\255meta, emacs\255ctlx, vi, vi\255command)144 336 R F0 2.542(,a)C
+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.541 E F0(;)A F2(emacs)2.541 E F0 .448(is equi)144 348 R -.25(va)-.25 G
-.448(lent to).25 F F2(emacs\255standar)2.948 E(d)-.37 E F0 5.448(.T)C
-.448(he def)-5.448 F .448(ault v)-.1 F .449(alue is)-.25 F F2(emacs)
-3.139 E F0 2.949(;t).27 G .449(he v)-2.949 F .449(alue of)-.25 F F1
-(editing\255mode)2.949 E F0 .449(also af-)2.949 F(fects the def)144 360
-Q(ault k)-.1 E -.15(ey)-.1 G(map.).15 E F1 -.1(ke)108 372 S
-(yseq\255timeout \(500\)).1 E F0 .368(Speci\214es the duration)144 384 R
+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 .667 -.15(ey s)
--.1 H(equence).15 E .524(\(one that can form a complete k)144 396 R .824
+(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.025(,o)-.4 G 3.025(rc)-3.025 G .525(an tak)-3.025 F 3.025(ea)-.1 G
-.525(dditional in-)-3.025 F .807(put to complete a longer k)144 408 R
+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 .806(ithin the timeout,)-3.306 F
-F2 -.37(re)3.306 G(adline).37 E F0(will)3.306 E .906(use the shorter b)
-144 420 R .907(ut complete k)-.2 F 1.207 -.15(ey s)-.1 H 3.407
-(equence. The).15 F -.25(va)3.407 G .907
-(lue is speci\214ed in milliseconds, so a v).25 F .907(alue of)-.25 F
-.05(1000 means that)144 432 R F2 -.37(re)2.55 G(adline).37 E F0 .05
-(will w)2.55 F .05(ait one second for additional input.)-.1 F .05
-(If this v)5.05 F .05(ariable is set to a v)-.25 F(alue)-.25 E .051
-(less than or equal to zero, or to a non-numeric v)144 444 R(alue,)-.25
-E F2 -.37(re)2.551 G(adline).37 E F0 .051(will w)2.551 F .051
-(ait until another k)-.1 F .352 -.15(ey i)-.1 H 2.552(sp).15 G(ressed)
--2.552 E(to decide which k)144 456 Q .3 -.15(ey s)-.1 H
-(equence to complete.).15 E F1(mark\255dir)108 468 Q(ectories \(On\))
--.18 E F0(If set to)144 480 Q F1(On)2.5 E F0 2.5(,c)C
+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 F1(mark\255modi\214ed\255lines \(Off\))108 492 Q F0(If set to)144
-504 Q F1(On)2.5 E F0 2.5(,h)C(istory lines that ha)-2.5 E .3 -.15(ve b)
--.2 H(een modi\214ed are displayed with a preceding asterisk \().15 E F1
-(*)A F0(\).)A F1(mark\255symlink)108 516 Q(ed\255dir)-.1 E
-(ectories \(Off\))-.18 E F0 .175(If set to)144 528 R F1(On)2.675 E F0
+.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 540
-Q(alue of)-.25 E F1(mark\255dir)2.5 E(ectories)-.18 E F0(\).)A F1
-(match\255hidden\255\214les \(On\))108 552 Q F0 .192(This v)144 564 R
-.192(ariable, when set to)-.25 F F1(On)2.692 E F0 2.692(,c)C .192
-(auses readline to match \214les whose names be)-2.692 F .193
-(gin with a `.)-.15 F 2.693('\()-.7 G(hidden)-2.693 E .457
-(\214les\) when performing \214lename completion.)144 576 R .456
-(If set to)5.456 F F1(Off)2.956 E F0 2.956(,t)C .456(he leading `.)
--2.956 F 2.956('m)-.7 G .456(ust be supplied by the)-2.956 F
-(user in the \214lename to be completed.)144 588 Q F1
-(menu\255complete\255display\255pr)108 600 Q(e\214x \(Off\))-.18 E F0
-1.585(If set to)144 612 R F1(On)4.085 E F0 4.085(,m)C 1.585(enu complet\
+-.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.085 F(\(which may be empty\) before c)144 624 Q
-(ycling through the list.)-.15 E F1(output\255meta \(Off\))108 636 Q F0
-.507(If set to)144 648 R F1(On)3.007 E F0 3.007(,r)C .507(eadline will \
+-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.007 F(pre\214x)144 660 Q .884(ed escape sequence.)-.15 F .884
-(The def)5.884 F .884(ault is)-.1 F F2(Of)3.384 E(f)-.18 E F0 3.384(,b)C
-.884(ut readline will set it to)-3.584 F F2(On)3.384 E F0 .885
-(if the locale contains)3.384 F(eight-bit characters.)144 672 Q F1
-(page\255completions \(On\))108 684 Q F0 .809(If set to)144 696 R F1(On)
-3.308 E F0 3.308(,r)C .808(eadline uses an internal)-3.308 F F2(mor)
+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 708 Q(GNU Bash 5.1)72 768 Q(2020 October 29)
-141.235 E(43)190.395 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(print\255completions\255horizontally \(Off\))108 84 Q F0 .227
-(If set to)144 96 R F1(On)2.727 E F0 2.727(,r)C .227(eadline will displ\
-ay completions with matches sorted horizontally in alphabetical or)
--2.727 F(-)-.2 E(der)144 108 Q 2.5(,r)-.4 G(ather than do)-2.5 E
-(wn the screen.)-.25 E F1 -2.29 -.18(re v)108 120 T
-(ert\255all\255at\255newline \(Off\)).08 E F0 .699(If set to)144 132 R
-F1(On)3.199 E F0 3.199(,r)C .699
+(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 F1(accept\255line)3.198 E F0(is)3.198 E -.15(exe)144 144 S
+-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 F1 -.18(re)144 156 S(adline)
-.18 E F0(.)A F1(sho)108 168 Q(w\255all\255if\255ambiguous \(Off\))-.1 E
-F0 .304(This alters the def)144 180 R .304(ault beha)-.1 F .304
-(vior of the completion functions.)-.2 F .304(If set to)5.304 F F1(On)
+(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 192 R(bell.)144 204 Q F1
-(sho)108 216 Q(w\255all\255if\255unmodi\214ed \(Off\))-.1 E F0 5.346
-(This alters the def)144 228 R 5.346(ault beha)-.1 F 5.345
+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 F1(sho)144 240 Q(w\255all\255if\255ambiguous)-.1 E F0 6.69(.I)C
-4.19(fs)-6.69 G 1.691(et to)-4.19 F F1(On)4.191 E F0 4.191(,w)C 1.691
+-.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 252 R 3.54
+(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 264 Q F1
-(sho)108 276 Q(w\255mode\255in\255pr)-.1 E(ompt \(Off\))-.18 E F0 1.021
-(If set to)144 288 R F1(On)3.521 E F0 3.521(,a)C 1.022
+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 300 Q(The mode strings are user)5 E
-(-settable \(e.g.,)-.2 E/F2 10/Times-Italic@0 SF
-(emacs\255mode\255string)2.5 E F0(\).)A F1
-(skip\255completed\255text \(Off\))108 312 Q F0 .095(If set to)144 324 R
-F1(On)2.595 E F0 2.595(,t)C .095(his alters the def)-2.595 F .095
+(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 336 Q
+(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 348 R
-1.394(ord being com-)-.1 F(pleted, so portions of the w)144 360 Q
-(ord follo)-.1 E(wing the cursor are not duplicated.)-.25 E F1
-(vi\255cmd\255mode\255string \(\(cmd\)\))108 372 Q F0 .517(If the)144
-384 R F2(show\255mode\255in\255pr)3.017 E(ompt)-.45 E F0 -.25(va)3.017 G
+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 396 R .775 -.15(ve a)-.25 H .475(nd in command mode.).15 F .475
-(The v)5.475 F(alue)-.25 E .33(is e)144 408 R .33(xpanded lik)-.15 F
-2.83(eak)-.1 G .63 -.15(ey b)-2.93 H .33
-(inding, so the standard set of meta- and control pre\214x).15 F .33
-(es and backslash es-)-.15 F .245(cape sequences is a)144 420 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
-432 Q F1(vi\255ins\255mode\255string \(\(ins\)\))108 444 Q F0 .517
-(If the)144 456 R F2(show\255mode\255in\255pr)3.017 E(ompt)-.45 E F0
--.25(va)3.017 G .518
+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
-468 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 480 S .923(panded lik).15 F
+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 492 R -.25(va)
+(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
-504 Q F1(visible\255stats \(Off\))108 516 Q F0 .846(If set to)144 528 R
+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 540 Q F1
-(Readline Conditional Constructs)87 556.8 Q F0 .05
-(Readline implements a f)108 568.8 R .05(acility similar in spirit to t\
+(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 580.8 R .096(ws k)-.25 F .396 -.15(ey b)-.1 H .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 592.8 Q -.15(ve)-.25 G 2.5
-(su).15 G(sed.)-2.5 E F1($if)108 609.6 Q F0(The)144 609.6 Q F1($if)2.963
+(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 621.6 Q(The te)5 E
+(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 633.6 S(tends to the end of the line; unless oth\
+(,)-.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 650.4 Q F0(The)180 650.4 Q F1(mode=)3.711 E F0 1.211(form of the)
+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 662.4 R .565(may be used in conjunction with the)
+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 674.4 R
+(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 686.4 Q F1(term)144 703.2 Q F0(The)180 703.2 Q
+(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 715.2 R
+(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 727.2 Q F1(=)3.232
+(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(GNU Bash 5.1)72 768 Q
-(2020 October 29)141.235 E(44)190.395 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
-(name before the \214rst)180 84 Q/F1 10/Times-Bold@0 SF<ad>2.5 E F0 5
-(.T)C(his allo)-5 E(ws)-.25 E/F2 10/Times-Italic@0 SF(sun)2.84 E F0
+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 100.8 S(rsion).1 E F0
-(The)180 112.8 Q F1 -.1(ve)3.108 G(rsion).1 E F0 .608
+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 124.8 Q F1
--.1(ve)2.772 G(rsion).1 E F0 -.15(ex)2.772 G .272
+(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 136.8 Q F1(=)3.063 E
+(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 148.8 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 160.8
-.1(ersion \(e.g.,)-.15 F F1(7.1)2.6 E F0 .1(\). If the minor v)B .101
+(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 172.8 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 184.8 Q F1
-(application)144 201.6 Q F0(The)180 213.6 Q F1(application)3.003 E F0
+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
-225.6 R F2 .114(application name)2.614 F F0 2.614(,a)C .114
+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
-237.6 R 3(alue. This)-.25 F .501(could be used to bind k)3 F .801 -.15
+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 249.6 R -.15(Fo)5.397 G 2.896(ri).15 G .396
+(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 261.6
-Q(vious w)-.25 E(ord in)-.1 E F1(bash)2.5 E F0(:)A F1($if)180 285.6 Q F0
-(Bash)2.5 E 2.5(#Q)180 297.6 S(uote the current or pre)-2.5 E(vious w)
--.25 E(ord)-.1 E("\\C\255xq": "\\eb\\"\\ef\\"")180 309.6 Q F1($endif)180
-321.6 Q F2(variable)144 338.4 Q F0(The)180 350.4 Q F2(variable)3.776 E
+(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
-362.4 R F2(=)2.579 E F0(,)A F2(==)2.579 E F0 2.579(,a)C(nd)-2.579 E F2
+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 374.4 R .13
-(the v)180 386.4 R .13(alue on the right hand side by whitespace.)-.25 F
+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 398.4 Q(ariables must be tested ag)-.25 E
+(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 F1($endif)108 415.2 Q F0(This command, as seen in the pre)
-144 415.2 Q(vious e)-.25 E(xample, terminates an)-.15 E F1($if)2.5 E F0
-(command.)2.5 E F1($else)108 432 Q F0(Commands in this branch of the)144
-432 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 448.8 Q
-F0 .356(This directi)144 460.8 R .656 -.15(ve t)-.25 H(ak).15 E .356
+-.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 472.8 R(or e)-.15 E(xample, the follo)-.15 E(wing directi)-.25 E .3
--.15(ve w)-.25 H(ould read).05 E F2(/etc/inputr)2.5 E(c)-.37 E F0(:)A F1
-($include)144 496.8 Q F2(/etc/inputr)5.833 E(c)-.37 E F1(Sear)87 513.6 Q
-(ching)-.18 E F0 .835(Readline pro)108 525.6 R .835
+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 537.6 Q
+.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 554.4 R .697
+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 566.4 R .112
+(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 578.4 R 3.042(yc)-.15 G
+(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 590.4 R .224(alue of the)-.25 F F1(isear)
+(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 602.4 R .66(ariable has not been assigned a v)-.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 614.4 R .096(Control-G will abort an incremen\
+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 626.4 Q 2.938 -.8(To \214)
-108 643.2 T 1.339(nd other matching entries in the history list, type C\
-ontrol-S or Control-R as appropriate.).8 F 1.339(This will)6.339 F .675
-(search backw)108 655.2 R .675(ard or forw)-.1 F .675
+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 667.2 R .474 -.15(ey s)-.1
-.174
+(.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 679.2 R F2(ne)3.041 E(wline)-.15 E F0 .541
+.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 691.2
-Q .653(Readline remembers the last incremental search string.)108 708 R
+(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 720 Q 2.5(ws)-.25 G
+(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(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(45)190.395 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 .567(Non-incremen\
-tal searches read the entire search string before starting to search fo\
-r matching history lines.)108 84 R(The search string may be typed by th\
-e user or be part of the contents of the current line.)108 96 Q/F1 10
-/Times-Bold@0 SF(Readline Command Names)87 112.8 Q F0 1.391(The follo)
-108 124.8 R 1.391
+-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 136.8 R .122
+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 148.8 Q/F2 10
-/Times-Italic@0 SF(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 160.8 Q F0 2.5
+(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 177.6 Q(or Mo)-.25 E(ving)-.1
-E(beginning\255of\255line \(C\255a\))108 189.6 Q F0(Mo)144 201.6 Q .3
+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 213.6 Q F0(Mo)144 225.6 Q .3 -.15
+(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
-237.6 S(rward\255char \(C\255f\)).25 E F0(Mo)144 249.6 Q .3 -.15(ve f)
+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 261.6 Q F0(Mo)144 273.6 Q .3 -.15(ve b)
--.15 H(ack a character).15 E(.)-.55 E F1 -.25(fo)108 285.6 S(rward\255w)
-.25 E(ord \(M\255f\))-.1 E F0(Mo)144 297.6 Q .823 -.15(ve f)-.15 H(orw)
+(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 309.6 Q F1(backward\255w)108 321.6 Q
-(ord \(M\255b\))-.1 E F0(Mo)144 333.6 Q 1.71 -.15(ve b)-.15 H 1.41
+(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 345.6 Q F1(shell\255f)108 357.6
-Q(orward\255w)-.25 E(ord)-.1 E F0(Mo)144 369.6 Q .784 -.15(ve f)-.15 H
+(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 381.6 Q F1(shell\255backward\255w)108 393.6 Q(ord)-.1 E
-F0(Mo)144 405.6 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 417.6 Q F1(pr)108 429.6 Q -.15(ev)-.18 G
-(ious\255scr).15 E(een\255line)-.18 E F0 .891(Attempt to mo)144 441.6 R
-1.191 -.15(ve p)-.15 H .891(oint to the same ph).15 F .891
-(ysical screen column on the pre)-.05 F .89(vious ph)-.25 F .89
-(ysical screen line.)-.05 F .87(This will not ha)144 453.6 R 1.17 -.15
-(ve t)-.2 H .87(he desired ef).15 F .87
-(fect if the current Readline line does not tak)-.25 F 3.37(eu)-.1 G
-3.37(pm)-3.37 G .87(ore than one)-3.37 F(ph)144 465.6 Q(ysical line or \
-if point is not greater than the length of the prompt plus the screen w\
-idth.)-.05 E F1(next\255scr)108 477.6 Q(een\255line)-.18 E F0 .638
-(Attempt to mo)144 489.6 R .938 -.15(ve p)-.15 H .638
+-.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 .008(will not ha)
-144 501.6 R .309 -.15(ve t)-.2 H .009(he desired ef).15 F .009
-(fect if the current Readline line does not tak)-.25 F 2.509(eu)-.1 G
-2.509(pm)-2.509 G .009(ore than one ph)-2.509 F(ysical)-.05 E .772(line\
- or if the length of the current Readline line is not greater than the \
-length of the prompt plus)144 513.6 R(the screen width.)144 525.6 Q F1
-(clear\255display \(M\255C\255l\))108 537.6 Q F0 1.498
-(Clear the screen and, if possible, the terminal')144 549.6 R 3.999(ss)
+.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 561.6 Q(ving the current line at the top of the screen.)-.2 E
-F1(clear\255scr)108 573.6 Q(een \(C\255l\))-.18 E F0 1.36
-(Clear the screen, then redra)144 585.6 R 3.86(wt)-.15 G 1.36
+(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 597.6
-S(th an ar).4 E
+(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 609.6 S(draw\255curr).18 E(ent\255line)-.18 E F0
-(Refresh the current line.)144 621.6 Q F1(Commands f)87 638.4 Q
+-.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
-650.4 Q(n\))-.15 E F0 .158(Accept the line re)144 662.4 R -.05(ga)-.15 G
+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 674.4 R/F3 9/Times-Bold@0 SF(HISTCONTR)3.199 E(OL)-.27 E F0 -.25(va)
+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 686.4 Q F1(pr)108
-698.4 Q -.15(ev)-.18 G(ious\255history \(C\255p\)).15 E F0
-(Fetch the pre)144 710.4 Q(vious command from the history list, mo)-.25
-E(ving back in the list.)-.15 E(GNU Bash 5.1)72 768 Q(2020 October 29)
-141.235 E(46)190.395 E 0 Cg EP
-%%Page: 47 47
+(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(next\255history \(C\255n\))108 84 Q F0(Fetch the ne)144 96 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 108
-Q F0(Mo)144 120 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 132 Q F0(Mo)144 144 Q .3 -.15(ve t)
--.15 H 2.5(ot).15 G(he end of the input history)-2.5 E 2.5(,i)-.65 G
-(.e., the line currently being entered.)-2.5 E F1 -2.29 -.18(re v)108
-156 T(erse\255sear).08 E(ch\255history \(C\255r\))-.18 E F0 1.47
-(Search backw)144 168 R 1.471(ard starting at the current line and mo)
--.1 F 1.471(ving `up' through the history as necessary)-.15 F(.)-.65 E
-(This is an incremental search.)144 180 Q F1 -.25(fo)108 192 S
-(rward\255sear).25 E(ch\255history \(C\255s\))-.18 E F0 1.132
-(Search forw)144 204 R 1.132(ard starting at the current line and mo)-.1
-F 1.131(ving `do)-.15 F 1.131(wn' through the history as necessary)-.25
-F(.)-.65 E(This is an incremental search.)144 216 Q F1(non\255incr)108
-228 Q(emental\255r)-.18 E -2.3 -.15(ev e)-.18 H(rse\255sear).15 E
-(ch\255history \(M\255p\))-.18 E F0 .164(Search backw)144 240 R .164(ar\
-d through the history starting at the current line using a non-incremen\
-tal search for)-.1 F 2.5(as)144 252 S(tring supplied by the user)-2.5 E
-(.)-.55 E F1(non\255incr)108 264 Q(emental\255f)-.18 E(orward\255sear)
--.25 E(ch\255history \(M\255n\))-.18 E F0 1.354(Search forw)144 276 R
-1.354(ard through the history using a non-incremental search for a stri\
-ng supplied by the)-.1 F(user)144 288 Q(.)-.55 E F1(history\255sear)108
-300 Q(ch\255f)-.18 E(orward)-.25 E F0 .248(Search forw)144 312 R .249(a\
-rd through the history for the string of characters between the start o\
-f the current line)-.1 F(and the point.)144 324 Q
-(This is a non-incremental search.)5 E F1(history\255sear)108 336 Q
-(ch\255backward)-.18 E F0 .951(Search backw)144 348 R .951(ard through \
-the history for the string of characters between the start of the curre\
-nt)-.1 F(line and the point.)144 360 Q
-(This is a non-incremental search.)5 E F1(history\255substring\255sear)
-108 372 Q(ch\255backward)-.18 E F0 .95(Search backw)144 384 R .951(ard \
-through the history for the string of characters between the start of t\
-he current)-.1 F .007(line and the current cursor position \(the)144 396
-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 .006(ywhere in a history)-.15 F 2.5
-(line. This)144 408 R(is a non-incremental search.)2.5 E F1
-(history\255substring\255sear)108 420 Q(ch\255f)-.18 E(orward)-.25 E F0
-.248(Search forw)144 432 R .249(ard through the history for the string \
-of characters between the start of the current line)-.1 F .319
-(and the point.)144 444 R .319(The search string may match an)5.319 F
-.319(ywhere in a history line.)-.15 F .318(This is a non-incremental)
-5.318 F(search.)144 456 Q F1(yank\255nth\255ar)108 468 Q 2.5(g\()-.1 G
-<4dad43ad7929>-2.5 E F0 .622(Insert the \214rst ar)144 480 R .622
+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 .773(at point.)144
-492 R -.4(Wi)5.773 G .773(th an ar).4 F(gument)-.18 E F2(n)3.633 E F0
+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 504 Q .291(vious command be)-.25 F .291
+(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 .292
-(ord from the end of)-.1 F .282(the pre)144 516 R .282(vious command.)
--.25 F .282(Once the ar)5.282 F(gument)-.18 E F2(n)2.781 E F0 .281
-(is computed, the ar)2.781 F .281(gument is e)-.18 F .281
-(xtracted as if the "!)-.15 F F2(n)A F0(")A(history e)144 528 Q
-(xpansion had been speci\214ed.)-.15 E F1(yank\255last\255ar)108 540 Q
-2.5(g\()-.1 G -1.667(M\255. ,)-2.5 F -1.667(M\255_ \))2.5 F F0 1.307
-(Insert the last ar)144 552 R 1.307(gument to the pre)-.18 F 1.307
-(vious command \(the last w)-.25 F 1.308(ord of the pre)-.1 F 1.308
-(vious history entry\).)-.25 F -.4(Wi)144 564 S .204(th a numeric ar).4
-F .204(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.203(.S)C(uccessi)-5.203
-E .503 -.15(ve c)-.25 H .203(alls to).15 F F1(yank\255last\255ar)2.703 E
-(g)-.1 E F0(mo)144 576 Q .806 -.15(ve b)-.15 H .507
+(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 588 R(An)5.416 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 .715 -.15(ve c)-.25 H .415
-(alls de-).15 F 1.217(termines the direction to mo)144 600 R 1.518 -.15
+(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.518 -.15(ve a)-.25 H -.18(rg).15 G 1.218
+-.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 612 R 2.994(ard\). The)-.1 F
+(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
-624 S(rd, as if the "!$" history e).1 E(xpansion had been speci\214ed.)
--.15 E F1(shell\255expand\255line \(M\255C\255e\))108 636 Q F0 .622
-(Expand the line as the shell does.)144 648 R .622
-(This performs alias and history e)5.622 F .623
-(xpansion as well as all of the)-.15 F(shell w)144 660 Q(ord e)-.1 E 2.5
+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 672 Q F0 .939
-(Perform history e)144 684 R .939(xpansion on the current line.)-.15 F
+(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.438(wf)-.25 G .938(or a descrip-)
--3.438 F(tion of history e)144 696 Q(xpansion.)-.15 E(GNU Bash 5.1)72
-768 Q(2020 October 29)141.235 E(47)190.395 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(magic\255space)108 84 Q F0 .437(Perform history e)144 96 R .437
-(xpansion on the current line and insert a space.)-.15 F(See)5.438 E/F2
-9/Times-Bold@0 SF(HIST)2.938 E(OR)-.162 E 2.688(YE)-.315 G(XP)-2.688 E
-(ANSION)-.666 E F0(be-)2.688 E(lo)144 108 Q 2.5(wf)-.25 G
-(or a description of history e)-2.5 E(xpansion.)-.15 E F1
-(alias\255expand\255line)108 120 Q F0 .395(Perform alias e)144 132 R
-.395(xpansion on the current line.)-.15 F(See)5.395 E F2(ALIASES)2.895 E
-F0(abo)2.645 E .694 -.15(ve f)-.15 H .394(or a description of alias e)
-.15 F(xpan-)-.15 E(sion.)144 144 Q F1
-(history\255and\255alias\255expand\255line)108 156 Q F0
-(Perform history and alias e)144 168 Q(xpansion on the current line.)
--.15 E F1(insert\255last\255ar)108 180 Q(gument \(M\255.)-.1 E 2.5(,M)
-.833 G -1.667(\255_ \))-2.5 F F0 2.5(As)144 192 S(ynon)-2.5 E(ym for)
+(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
-(operate\255and\255get\255next \(C\255o\))108 204 Q F0 .947
-(Accept the current line for e)144 216 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 228 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 240 Q F1
-(edit\255and\255execute\255command \(C\255x C\255e\))108 252 Q F0(In)144
-264 Q -.2(vo)-.4 G .346 -.1(ke a).2 H 2.646(ne).1 G .146
-(ditor on the current command line, and e)-2.646 F -.15(xe)-.15 G .146
-(cute the result as shell commands.).15 F F1(Bash)5.147 E F0(at-)2.647 E
-(tempts to in)144 276 Q -.2(vo)-.4 G -.1(ke).2 G F2($VISU)2.6 E(AL)-.54
-E/F3 9/Times-Roman@0 SF(,)A F2($EDIT)2.25 E(OR)-.162 E F3(,)A F0(and)
-2.25 E/F4 10/Times-Italic@0 SF(emacs)2.5 E F0(as the editor)2.5 E 2.5
-(,i)-.4 G 2.5(nt)-2.5 G(hat order)-2.5 E(.)-.55 E F1(Commands f)87 292.8
-Q(or Changing T)-.25 E(ext)-.92 E F4(end\255of\255\214le)108 304.8 Q F1
-(\(usually C\255d\))2.5 E F0 .799
-(The character indicating end-of-\214le as set, for e)144 316.8 R .799
-(xample, by)-.15 F/F5 10/Courier@0 SF(stty)3.299 E F0 5.799(.I)C 3.298
-(ft)-5.799 G .798(his character is read when)-3.298 F .592
-(there are no characters on the line, and point is at the be)144 328.8 R
-.593(ginning of the line, Readline interprets it)-.15 F
-(as the end of input and returns)144 340.8 Q F2(EOF)2.5 E F3(.)A F1
-(delete\255char \(C\255d\))108 352.8 Q F0 .442
-(Delete the character at point.)144 364.8 R .442
-(If this function is bound to the same character as the tty)5.442 F F1
-(EOF)2.941 E F0(char)2.941 E(-)-.2 E(acter)144 376.8 Q 2.5(,a)-.4 G(s)
--2.5 E F1(C\255d)2.5 E F0(commonly is, see abo)2.5 E .3 -.15(ve f)-.15 H
-(or the ef).15 E(fects.)-.25 E F1(backward\255delete\255char \(Rubout\))
-108 388.8 Q F0 .552(Delete the character behind the cursor)144 400.8 R
-5.553(.W)-.55 G .553(hen gi)-5.553 F -.15(ve)-.25 G 3.053(nan).15 G .553
-(umeric ar)-3.053 F .553(gument, sa)-.18 F .853 -.15(ve t)-.2 H .553
-(he deleted te).15 F .553(xt on)-.15 F(the kill ring.)144 412.8 Q F1
--.25(fo)108 424.8 S(rward\255backward\255delete\255char).25 E F0 .474
-(Delete the character under the cursor)144 436.8 R 2.974(,u)-.4 G .474
-(nless the cursor is at the end of the line, in which case the)-2.974 F
-(character behind the cursor is deleted.)144 448.8 Q F1
-(quoted\255insert \(C\255q, C\255v\))108 460.8 Q F0 .778(Add the ne)144
-472.8 R .779(xt character typed to the line v)-.15 F 3.279
-(erbatim. This)-.15 F .779(is ho)3.279 F 3.279(wt)-.25 G 3.279(oi)-3.279
-G .779(nsert characters lik)-3.279 F(e)-.1 E F1(C\255q)3.279 E F0 3.279
-(,f)C(or)-3.279 E -.15(ex)144 484.8 S(ample.).15 E F1
-(tab\255insert \(C\255v T)108 496.8 Q(AB\))-.9 E F0
-(Insert a tab character)144 508.8 Q(.)-.55 E F1
-(self\255insert \(a, b, A, 1, !, ...\))108 520.8 Q F0
-(Insert the character typed.)144 532.8 Q F1
-(transpose\255chars \(C\255t\))108 544.8 Q F0 .322
-(Drag the character before point forw)144 556.8 R .321(ard o)-.1 F -.15
-(ve)-.15 G 2.821(rt).15 G .321(he character at point, mo)-2.821 F .321
-(ving point forw)-.15 F .321(ard as well.)-.1 F .372
-(If point is at the end of the line, then this transposes the tw)144
-568.8 R 2.872(oc)-.1 G .373(haracters before point.)-2.872 F(Ne)5.373 E
--.05(ga)-.15 G(ti).05 E .673 -.15(ve a)-.25 H -.2(r-).15 G(guments ha)
-144 580.8 Q .3 -.15(ve n)-.2 H 2.5(oe).15 G -.25(ff)-2.5 G(ect.).25 E F1
-(transpose\255w)108 592.8 Q(ords \(M\255t\))-.1 E F0 .024(Drag the w)144
-604.8 R .024(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.523(rt).15 G .023(hat w)
--2.523 F .023(ord as well.)-.1 F .023(If point)5.023 F
-(is at the end of the line, this transposes the last tw)144 616.8 Q 2.5
-(ow)-.1 G(ords on the line.)-2.6 E F1(upcase\255w)108 628.8 Q
-(ord \(M\255u\))-.1 E F0 1.698(Uppercase the current \(or follo)144
-640.8 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.999 -.15(ve a)-.25 H -.18(rg).15 G 1.699
-(ument, uppercase the pre).18 F(vious)-.25 E -.1(wo)144 652.8 S(rd, b).1
-E(ut do not mo)-.2 E .3 -.15(ve p)-.15 H(oint.).15 E F1(do)108 664.8 Q
-(wncase\255w)-.1 E(ord \(M\255l\))-.1 E F0(Lo)144 676.8 Q 1.648
-(wercase the current \(or follo)-.25 F 1.648(wing\) w)-.25 F 4.148
-(ord. W)-.1 F 1.647(ith a ne)-.4 F -.05(ga)-.15 G(ti).05 E 1.947 -.15
-(ve a)-.25 H -.18(rg).15 G 1.647(ument, lo).18 F 1.647(wercase the pre)
--.25 F(vious)-.25 E -.1(wo)144 688.8 S(rd, b).1 E(ut do not mo)-.2 E .3
--.15(ve p)-.15 H(oint.).15 E F1(capitalize\255w)108 700.8 Q
-(ord \(M\255c\))-.1 E F0 1.974(Capitalize the current \(or follo)144
-712.8 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.975
-(ument, capitalize the pre).18 F(vious)-.25 E -.1(wo)144 724.8 S(rd, b)
-.1 E(ut do not mo)-.2 E .3 -.15(ve p)-.15 H(oint.).15 E(GNU Bash 5.1)72
-768 Q(2020 October 29)141.235 E(48)190.395 E 0 Cg EP
-%%Page: 49 49
+(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 -.1(ove)108 84 S(rwrite\255mode).1 E F0 -.8(To)144 96 S .438(ggle o)
-.8 F -.15(ve)-.15 G .438(rwrite mode.).15 F -.4(Wi)5.438 G .438(th an e)
-.4 F .438(xplicit positi)-.15 F .737 -.15(ve n)-.25 H .437(umeric ar).15
-F .437(gument, switches to o)-.18 F -.15(ve)-.15 G .437(rwrite mode.).15
-F -.4(Wi)144 108 S .78(th an e).4 F .781(xplicit non-positi)-.15 F 1.081
+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 .781(This command af)5.781 F
-(fects)-.25 E(only)144 120 Q F1(emacs)4.395 E F0(mode;)4.395 E F1(vi)
-4.395 E F0 1.894(mode does o)4.395 F -.15(ve)-.15 G 1.894(rwrite dif).15
+(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.394 G(adline\(\)).37 E F0 1.894
-(starts in insert)4.394 F 3.968(mode. In)144 132 R -.15(ove)3.968 G
-1.468(rwrite mode, characters bound to).15 F F1(self\255insert)3.969 E
-F0 1.469(replace the te)3.969 F 1.469(xt at point rather than)-.15 F
-.958(pushing the te)144 144 R .958(xt to the right.)-.15 F .957
-(Characters bound to)5.958 F F1(backward\255delete\255char)3.457 E F0
-.957(replace the character)3.457 F(before point with a space.)144 156 Q
+/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
-172.8 Q(anking)-.85 E(kill\255line \(C\255k\))108 184.8 Q F0
-(Kill the te)144 196.8 Q(xt from point to the end of the line.)-.15 E F1
-(backward\255kill\255line \(C\255x Rubout\))108 208.8 Q F0(Kill backw)
-144 220.8 Q(ard to the be)-.1 E(ginning of the line.)-.15 E F1
-(unix\255line\255discard \(C\255u\))108 232.8 Q F0(Kill backw)144 244.8
+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 256.8 Q F0
+-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
-268.8 Q F1(kill\255w)108 280.8 Q(ord \(M\255d\))-.1 E F0 .728
-(Kill from point to the end of the current w)144 292.8 R .729
-(ord, or if between w)-.1 F .729(ords, to the end of the ne)-.1 F .729
-(xt w)-.15 F(ord.)-.1 E -.8(Wo)144 304.8 S
+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 316.8 Q
-(ord \(M\255Rubout\))-.1 E F0(Kill the w)144 328.8 Q(ord behind point.)
+(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 F1(shell\255kill\255w)108 340.8 Q
-(ord)-.1 E F0 .729(Kill from point to the end of the current w)144 352.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 364.8 S
+(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 376.8 Q(ord)-.1 E F0 3.025(Kill the w)144 388.8 R 3.025
+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 400.8 Q(ord)-.1 E F0(.)A F1(unix\255w)108 412.8 Q
-(ord\255rubout \(C\255w\))-.1 E F0 .365(Kill the w)144 424.8 R .365
-(ord behind point, using white space as a w)-.1 F .364(ord boundary)-.1
-F 5.364(.T)-.65 G .364(he killed te)-5.364 F .364(xt is sa)-.15 F -.15
-(ve)-.2 G 2.864(do).15 G 2.864(nt)-2.864 G(he)-2.864 E(kill-ring.)144
-436.8 Q F1(unix\255\214lename\255rubout)108 448.8 Q F0 .166(Kill the w)
-144 460.8 R .166
+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 .167(ord boundaries.)-.1 F(The)5.167 E(killed te)144 472.8 Q
+-.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 484.8 Q F0
-(Delete all spaces and tabs around point.)144 496.8 Q F1(kill\255r)108
-508.8 Q(egion)-.18 E F0(Kill the te)144 520.8 Q(xt in the current re)
--.15 E(gion.)-.15 E F1(copy\255r)108 532.8 Q(egion\255as\255kill)-.18 E
-F0(Cop)144 544.8 Q 2.5(yt)-.1 G(he te)-2.5 E(xt in the re)-.15 E
+-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 556.8 Q(ord)-.1 E F0(Cop)144 568.8 Q 4.801
-(yt)-.1 G 2.301(he w)-4.801 F 2.301(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.3
-(ord boundaries are the same as)-.1 F F1(back-)4.8 E(ward\255w)144 580.8
-Q(ord)-.1 E F0(.)A F1(copy\255f)108 592.8 Q(orward\255w)-.25 E(ord)-.1 E
-F0(Cop)144 604.8 Q 4.507(yt)-.1 G 2.007(he w)-4.507 F 2.007(ord follo)
--.1 F 2.007(wing point to the kill b)-.25 F(uf)-.2 E(fer)-.25 E 7.008
-(.T)-.55 G 2.008(he w)-7.008 F 2.008(ord boundaries are the same as)-.1
-F F1 -.25(fo)4.508 G -.37(r-).25 G(ward\255w)144 616.8 Q(ord)-.1 E F0(.)
-A F1(yank \(C\255y\))108 628.8 Q F0 -1(Ya)144 640.8 S
+(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 652.8 Q F0
-(Rotate the kill ring, and yank the ne)144 664.8 Q 2.5(wt)-.25 G 2.5
+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 681.6 Q
-(guments)-.1 E(digit\255ar)108 693.6 Q
+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 705.6 R .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 .366(starts a ne)2.867 F -.05
-(ga)-.15 G(-).05 E(ti)144 717.6 Q .3 -.15(ve a)-.25 H -.18(rg).15 G
-(ument.).18 E(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(49)190.395
-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(uni)108 84 Q -.1(ve)-.1 G(rsal\255ar).1 E(gument)-.1 E F0 .778
-(This is another w)144 96 R .779(ay to specify an ar)-.1 F 3.279
-(gument. If)-.18 F .779(this command is follo)3.279 F .779
+(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
-108 R 3.876(gument. If)-.18 F 1.376(the command is fol-)3.876 F(lo)144
-120 Q 1.17(wed by digits, e)-.25 F -.15(xe)-.15 G(cuting).15 E F1(uni)
+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 .899(wise ignored.)144 132 R .898
-(As a special case, if this command is immediately follo)5.899 F .898
+-.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 144 R 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 .823(The ar)144 156 R .823
+-.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 .822(es the ar)-.1 F
-(gument)-.18 E(count four)144 168 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 184.8 Q(complete \(T)108 196.8 Q(AB\))-.9 E F0 1.137
-(Attempt to perform completion on the te)144 208.8 R 1.137
+(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 220.8 Q .533(xt as a v)
--.15 F .533(ariable \(if the te)-.25 F .533(xt be)-.15 F .533(gins with)
--.15 F F1($)3.033 E F0 .533(\), username \(if the te)B .532(xt be)-.15 F
-.532(gins with)-.15 F F1(~)3.032 E F0 .532(\), hostname \(if the)B(te)
-144 232.8 Q .701(xt be)-.15 F .701(gins with)-.15 F F1(@)3.201 E F0 .701
-(\), or command \(including aliases and functions\) in turn.)B .702
+(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 244.8 Q F1
-(possible\255completions \(M\255?\))108 256.8 Q F0
-(List the possible completions of the te)144 268.8 Q(xt before point.)
--.15 E F1(insert\255completions \(M\255*\))108 280.8 Q F0 .783
-(Insert all completions of the te)144 292.8 R .783
+(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.282 E(pletions)144
-304.8 Q F0(.)A F1(menu\255complete)108 316.8 Q F0 .928(Similar to)144
-328.8 R F1(complete)3.428 E F0 3.428(,b)C .929(ut replaces the w)-3.628
+.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.194(possible completions.)144 340.8 R 1.194(Repeated e)6.194 F -.15
-(xe)-.15 G 1.194(cution of).15 F F1(menu\255complete)3.694 E F0 1.193
-(steps through the list of possible)3.694 F .828
-(completions, inserting each match in turn.)144 352.8 R .828
+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 364.8 R F1(bell\255style)3.227 E F0
-3.227(\)a)C .727(nd the original te)-3.227 F .727(xt is restored.)-.15 F
-.727(An ar)5.727 F .727(gument of)-.18 F/F2 10/Times-Italic@0 SF(n)3.227
-E F0(mo)3.227 E -.15(ve)-.15 G(s).15 E F2(n)3.227 E F0 1.73
-(positions forw)144 376.8 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 388.8 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 400.8 Q F0 .82
-(Identical to)144 412.8 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
+(\(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 424.8 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 436.8 Q F0 .234
-(Deletes the character under the cursor if not at the be)144 448.8 R
-.234(ginning or end of the line \(lik)-.15 F(e)-.1 E F1(delete\255char)
-2.735 E F0(\).)A .425(If at the end of the line, beha)144 460.8 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 472.8 Q(ault.)-.1 E F1
-(complete\255\214lename \(M\255/\))108 484.8 Q F0
-(Attempt \214lename completion on the te)144 496.8 Q(xt before point.)
--.15 E F1(possible\255\214lename\255completions \(C\255x /\))108 508.8 Q
-F0(List the possible completions of the te)144 520.8 Q
+(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 532.8 Q(name \(M\255~\))-.15 E F0
-(Attempt completion on the te)144 544.8 Q
+(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 556.8 Q(name\255completions \(C\255x ~\))-.15 E F0
-(List the possible completions of the te)144 568.8 Q
+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
-580.8 Q(ariable \(M\255$\))-.1 E F0(Attempt completion on the te)144
-592.8 Q(xt before point, treating it as a shell v)-.15 E(ariable.)-.25 E
-F1(possible\255v)108 604.8 Q(ariable\255completions \(C\255x $\))-.1 E
-F0(List the possible completions of the te)144 616.8 Q
+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
-(complete\255hostname \(M\255@\))108 628.8 Q F0
-(Attempt completion on the te)144 640.8 Q
+(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 652.8 Q F0
-(List the possible completions of the te)144 664.8 Q
+(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 676.8 Q F0 .58
-(Attempt completion on the te)144 688.8 R .581
-(xt before point, treating it as a command name.)-.15 F .581
-(Command comple-)5.581 F .715(tion attempts to match the te)144 700.8 R
+(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 712.8 Q -.15(xe)-.15 G
-(cutable \214lenames, in that order).15 E(.)-.55 E(GNU Bash 5.1)72 768 Q
-(2020 October 29)141.235 E(50)190.395 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(possible\255command\255completions \(C\255x !\))108 84 Q F0
-(List the possible completions of the te)144 96 Q
+(\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 108 Q(AB\))-.9 E F0 .424
-(Attempt completion on the te)144 120 R .425
-(xt before point, comparing the te)-.15 F .425(xt ag)-.15 F .425
+(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 132 Q F1(dab)108 144 Q(br)-.1 E
--.15(ev)-.18 G(\255expand).15 E F0 .611
-(Attempt menu completion on the te)144 156 R .611
-(xt before point, comparing the te)-.15 F .61(xt ag)-.15 F .61
+(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 168 Q F1
-(complete\255into\255braces \(M\255{\))108 180 Q F0 .4(Perform \214lena\
+(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 192 R(the list is a)144 204 Q -.25(va)-.2 G
+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 220.8 S(yboard Macr).25 E(os)-.18
-E(start\255kbd\255macr)108 232.8 Q 2.5(o\()-.18 G(C\255x \()-2.5 E(\))
-.833 E F0(Be)144 244.8 Q(gin sa)-.15 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 256.8 Q 2.5(o\()-.18 G
-(C\255x \))-2.5 E(\)).833 E F0(Stop sa)144 268.8 Q
+(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 280.8 Q 2.5(o\()-.18 G(C\255x e\))-2.5
-E F0(Re-e)144 292.8 Q -.15(xe)-.15 G 1(cute the last k).15 F -.15(ey)-.1
-G .999(board macro de\214ned, by making the characters in the macro app\
-ear as if).15 F(typed at the k)144 304.8 Q -.15(ey)-.1 G(board.).15 E F1
-(print\255last\255kbd\255macr)108 316.8 Q 2.5(o\()-.18 G(\))-2.5 E F0
-(Print the last k)144 328.8 Q -.15(ey)-.1 G
-(board macro de\214ned in a format suitable for the).15 E/F2 10
-/Times-Italic@0 SF(inputr)2.5 E(c)-.37 E F0(\214le.)2.5 E F1
-(Miscellaneous)87 345.6 Q -.18(re)108 357.6 S<ad72>.18 E
-(ead\255init\255\214le \(C\255x C\255r\))-.18 E F0 1.776
-(Read in the contents of the)144 369.6 R F2(inputr)4.276 E(c)-.37 E F0
-1.777(\214le, and incorporate an)4.276 F 4.277(yb)-.15 G 1.777
-(indings or v)-4.277 F 1.777(ariable assignments)-.25 F(found there.)144
-381.6 Q F1(abort \(C\255g\))108 393.6 Q F0 3.249
-(Abort the current editing command and ring the terminal')144 405.6 R
-5.748(sb)-.55 G 3.248(ell \(subject to the setting of)-5.748 F F1
-(bell\255style)144 417.6 Q F0(\).)A F1(do\255lo)108 429.6 Q(wer)-.1 E
+(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.738(If the meta\214ed character)144 441.6 R F2(x)
-4.238 E F0 1.739
-(is uppercase, run the command that is bound to the corresponding)4.238
-F(meta\214ed lo)144 453.6 Q(wercase character)-.25 E 5(.T)-.55 G
-(he beha)-5 E(vior is unde\214ned if)-.2 E F2(x)2.5 E F0(is already lo)
-2.5 E(wercase.)-.25 E F1(pr)108 465.6 Q(e\214x\255meta \(ESC\))-.18 E F0
-(Metafy the ne)144 477.6 Q(xt character typed.)-.15 E/F3 9/Times-Bold@0
-SF(ESC)5 E F1(f)2.25 E F0(is equi)2.5 E -.25(va)-.25 G(lent to).25 E F1
-(Meta\255f)2.5 E F0(.)A F1(undo \(C\255_, C\255x C\255u\))108 489.6 Q F0
-(Incremental undo, separately remembered for each line.)144 501.6 Q F1
--2.29 -.18(re v)108 513.6 T(ert\255line \(M\255r\)).08 E F0 .231
-(Undo all changes made to this line.)144 525.6 R .231(This is lik)5.231
-F 2.731(ee)-.1 G -.15(xe)-2.881 G .23(cuting the).15 F F1(undo)2.73 E F0
-.23(command enough times to re-)2.73 F
-(turn the line to its initial state.)144 537.6 Q F1
-(tilde\255expand \(M\255&\))108 549.6 Q F0(Perform tilde e)144 561.6 Q
+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 573.6 Q F0
-(Set the mark to the point.)144 585.6 Q(If a numeric ar)5 E
+(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 597.6 Q F0(Sw)
-144 609.6 Q .282(ap the point with the mark.)-.1 F .283
+(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.783(dp).15 G .283(osition, and the old)-2.783 F(cursor position is sa)
-144 621.6 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 633.6 Q(ch \(C\255]\))-.18 E F0 3.036(Ac)144
-645.6 S .536(haracter is read and point is mo)-3.036 F -.15(ve)-.15 G
-3.035(dt).15 G 3.035(ot)-3.035 G .535(he ne)-3.035 F .535
-(xt occurrence of that character)-.15 F 5.535(.A)-.55 G(ne)-2.5 E -.05
-(ga)-.15 G(ti).05 E .835 -.15(ve c)-.25 H(ount).15 E(searches for pre)
-144 657.6 Q(vious occurrences.)-.25 E F1(character\255sear)108 669.6 Q
-(ch\255backward \(M\255C\255]\))-.18 E F0 3.543(Ac)144 681.6 S 1.043
-(haracter is read and point is mo)-3.543 F -.15(ve)-.15 G 3.544(dt).15 G
-3.544(ot)-3.544 G 1.044(he pre)-3.544 F 1.044
-(vious occurrence of that character)-.25 F 6.044(.A)-.55 G(ne)-2.5 E
--.05(ga)-.15 G(ti).05 E -.15(ve)-.25 G
-(count searches for subsequent occurrences.)144 693.6 Q F1
-(skip\255csi\255sequence)108 705.6 Q F0 1.827
-(Read enough characters to consume a multi-k)144 717.6 R 2.126 -.15
-(ey s)-.1 H 1.826(equence such as those de\214ned for k).15 F -.15(ey)
--.1 G 4.326(sl).15 G(ik)-4.326 E(e)-.1 E .79(Home and End.)144 729.6 R
-.791(Such sequences be)5.79 F .791
+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
-(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(51)190.395 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 .332
-(If this sequence is bound to "\\[", k)144 84 R -.15(ey)-.1 G 2.831(sp)
-.15 G .331(roducing such sequences will ha)-2.831 F .631 -.15(ve n)-.2 H
-2.831(oe).15 G -.25(ff)-2.831 G .331(ect unless e).25 F(xplic-)-.15 E
-.026(itly bound to a readline command, instead of inserting stray chara\
-cters into the editing b)144 96 R(uf)-.2 E(fer)-.25 E 5.026(.T)-.55 G
-(his)-5.026 E(is unbound by def)144 108 Q(ault, b)-.1 E
-(ut usually bound to ESC\255[.)-.2 E/F1 10/Times-Bold@0 SF
-(insert\255comment \(M\255#\))108 120 Q F0 -.4(Wi)144 132 S .481
-(thout a numeric ar).4 F .481(gument, the v)-.18 F .481
-(alue of the readline)-.25 F F1(comment\255begin)2.981 E F0 -.25(va)
-2.981 G .48(riable is inserted at the).25 F(be)144 144 Q .244
-(ginning of the current line.)-.15 F .245(If a numeric ar)5.244 F .245
-(gument is supplied, this command acts as a toggle: if)-.18 F .322
-(the characters at the be)144 156 R .321
+.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.821(,t)C .321(he v)-2.821 F .321(alue is)
--.25 F .831(inserted, otherwise the characters in)144 168 R F1
-(comment\255begin)3.331 E F0 .832(are deleted from the be)3.331 F .832
-(ginning of the line.)-.15 F 1.469
-(In either case, the line is accepted as if a ne)144 180 R 1.468
-(wline had been typed.)-.25 F 1.468(The def)6.468 F 1.468(ault v)-.1 F
-1.468(alue of)-.25 F F1(com-)3.968 E(ment\255begin)144 192 Q F0 .839
-(causes this command to mak)3.339 F 3.339(et)-.1 G .839
-(he current line a shell comment.)-3.339 F .84(If a numeric ar)5.84 F
-(gu-)-.18 E(ment causes the comment character to be remo)144 204 Q -.15
+(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(glob\255complete\255w)108 216 Q
-(ord \(M\255g\))-.1 E F0 .792(The w)144 228 R .791
-(ord before point is treated as a pattern for pathname e)-.1 F .791
-(xpansion, with an asterisk implicitly)-.15 F 2.5(appended. This)144 240
-R(pattern is used to generate a list of matching \214lenames for possib\
-le completions.)2.5 E F1(glob\255expand\255w)108 252 Q(ord \(C\255x *\))
--.1 E F0 .175(The w)144 264 R .176
+(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 276 R 3.016(ord. If)-.1 F 3.016
+(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(before pathname e)
-144 288 Q(xpansion.)-.15 E F1(glob\255list\255expansions \(C\255x g\))
-108 300 Q F0 .923(The list of e)144 312 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 324 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)-.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 336 S(pansion.).15 E F1(dump\255functions)108 348 Q F0 .626
-(Print all of the functions and their k)144 360 R .926 -.15(ey b)-.1 H
-.627(indings to the readline output stream.).15 F .627(If a numeric ar)
-5.627 F(gu-)-.18 E
-(ment is supplied, the output is formatted in such a w)144 372 Q
+(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 384 Q(ariables)-.1 E F0
-.763(Print all of the settable readline v)144 396 R .762
-(ariables and their v)-.25 F .762(alues to the readline output stream.)
--.25 F .762(If a nu-)5.762 F .108(meric ar)144 408 R .108
-(gument is supplied, the output is formatted in such a w)-.18 F .109
-(ay that it can be made part of an)-.1 F F2(in-)2.609 E(putr)144 420 Q
-(c)-.37 E F0(\214le.)2.5 E F1(dump\255macr)108 432 Q(os)-.18 E F0 .593
-(Print all of the readline k)144 444 R .893 -.15(ey s)-.1 H .592
-(equences bound to macros and the strings the).15 F 3.092(yo)-.15 G
-3.092(utput. If)-3.092 F 3.092(an)3.092 G(umeric)-3.092 E(ar)144 456 Q
+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.028 E(c)-.37 E F0
-(\214le.)144 468 Q F1(display\255shell\255v)108 480 Q
-(ersion \(C\255x C\255v\))-.1 E F0(Display v)144 492 Q
+(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 508.8 Q(ogrammable Completion)-.18 E F0 .147(When w)108
-520.8 R .147(ord completion is attempted for an ar)-.1 F .147
+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 532.8 Q F0 3.828(\)h)C 1.329
-(as been de\214ned using the)-3.828 F F1(complete)3.829 E F0 -.2(bu)
+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.329(w\), the)
--.25 F(programmable completion f)108 544.8 Q(acilities are in)-.1 E -.2
-(vo)-.4 G -.1(ke).2 G(d.).1 E .498
-(First, the command name is identi\214ed.)108 561.6 R .498
-(If the command w)5.498 F .497
-(ord is the empty string \(completion attempted at)-.1 F .233(the be)108
-573.6 R .233(ginning of an empty line\), an)-.15 F 2.733(yc)-.15 G .233
+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 .234(If a comp-)
-5.234 F .481(spec has been de\214ned for that command, the compspec is \
-used to generate the list of possible completions)108 585.6 R .822
-(for the w)108 597.6 R 3.322(ord. If)-.1 F .822(the command w)3.322 F
-.823(ord is a full pathname, a compspec for the full pathname is search\
-ed for)-.1 F 2.867(\214rst. If)108 609.6 R .366(no compspec is found fo\
+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.867 F(follo)108 621.6 Q .298(wing the \214nal slash.)-.25 F .298
-(If those searches do not result in a compspec, an)5.298 F 2.799(yc)-.15
-G .299(ompspec de\214ned with the)-2.799 F F1<ad44>2.799 E F0 .057
-(option to)108 633.6 R F1(complete)2.557 E F0 .056(is used as the def)
+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
-.056(xpansion on)-.15 F .332(the command w)108 645.6 R .332(ord as a \
+.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.833(ys)-.15 G(uc-)-2.833 E(cessful e)108
-657.6 Q(xpansion.)-.15 E .817(Once a compspec has been found, it is use\
-d to generate the list of matching w)108 674.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 686.4 Q
+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 .463
-(First, the actions speci\214ed by the compspec are used.)108 703.2 R
-.464(Only matches which are pre\214x)5.464 F .464(ed by the w)-.15 F
-.464(ord being)-.1 F .596(completed are returned.)108 715.2 R .596
-(When the)5.596 F F1<ad66>3.096 E F0(or)3.095 E F1<ad64>3.095 E F0 .595
+(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 727.2 Q(ariable)-.25 E F3(FIGNORE)2.5 E F0
-(is used to \214lter the matches.)2.25 E(GNU Bash 5.1)72 768 Q
-(2020 October 29)141.235 E(52)190.395 E 0 Cg EP
-%%Page: 53 53
+(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(An)108 84 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 10/Times-Bold@0 SF<ad47>4.084 E F0
-1.584(option are generated ne)4.084 F 4.084(xt. The)-.15 F -.1(wo)108 96
-S .555(rds generated by the pattern need not match the w).1 F .554
-(ord being completed.)-.1 F(The)5.554 E/F2 9/Times-Bold@0 SF(GLOBIGNORE)
-3.054 E F0 .554(shell v)2.804 F(ari-)-.25 E
-(able is not used to \214lter the matches, b)108 108 Q(ut the)-.2 E F2
-(FIGNORE)2.5 E F0 -.25(va)2.25 G(riable is used.).25 E(Ne)108 124.8 Q
-.32(xt, the string speci\214ed as the ar)-.15 F .32(gument to the)-.18 F
-F1<ad57>2.82 E F0 .321(option is considered.)2.821 F .321
-(The string is \214rst split using the)5.321 F .413(characters in the)
-108 136.8 R F2(IFS)2.913 E F0 .412(special v)2.663 F .412
-(ariable as delimiters.)-.25 F .412(Shell quoting is honored.)5.412 F
-.412(Each w)5.412 F .412(ord is then e)-.1 F(xpanded)-.15 E .091
-(using brace e)108 148.8 R .091(xpansion, tilde e)-.15 F .092
-(xpansion, parameter and v)-.15 F .092(ariable e)-.25 F .092
-(xpansion, command substitution, and arith-)-.15 F 1.397(metic e)108
-160.8 R 1.396(xpansion, as described abo)-.15 F 1.696 -.15(ve u)-.15 H
-(nder).15 E F2(EXP)3.896 E(ANSION)-.666 E/F3 9/Times-Roman@0 SF(.)A F0
-1.396(The results are split using the rules described)5.896 F(abo)108
-172.8 Q .509 -.15(ve u)-.15 H(nder).15 E F1 -.75(Wo)2.709 G .209
-(rd Splitting).75 F F0 5.209(.T)C .209(he results of the e)-5.209 F .209
-(xpansion are pre\214x-matched ag)-.15 F .21(ainst the w)-.05 F .21
-(ord being com-)-.1 F(pleted, and the matching w)108 184.8 Q
-(ords become the possible completions.)-.1 E .234
-(After these matches ha)108 201.6 R .534 -.15(ve b)-.2 H .234
-(een generated, an).15 F 2.734(ys)-.15 G .233
-(hell function or command speci\214ed with the)-2.734 F F1<ad46>2.733 E
-F0(and)2.733 E F1<ad43>2.733 E F0(op-)2.733 E 4.208(tions is in)108
-213.6 R -.2(vo)-.4 G -.1(ke).2 G 6.708(d. When).1 F 4.209
-(the command or function is in)6.708 F -.2(vo)-.4 G -.1(ke).2 G 4.209
-(d, the).1 F F2(COMP_LINE)6.709 E F3(,)A F2(COMP_POINT)6.459 E F3(,)A F2
-(COMP_KEY)108 225.6 Q F3(,)A F0(and)2.408 E F2(COMP_TYPE)2.658 E F0 -.25
-(va)2.408 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 .157
-(Shell V)2.657 F(ariables)-.92 E F0 5.157(.I)C(f)-5.157 E 3.485(as)108
-237.6 S .986(hell function is being in)-3.485 F -.2(vo)-.4 G -.1(ke).2 G
-.986(d, the).1 F F2(COMP_W)3.486 E(ORDS)-.09 E F0(and)3.236 E F2
-(COMP_CW)3.486 E(ORD)-.09 E F0 -.25(va)3.236 G .986
-(riables are also set.).25 F(When)5.986 E .347
-(the function or command is in)108 249.6 R -.2(vo)-.4 G -.1(ke).2 G .347
-(d, the \214rst ar).1 F .346(gument \()-.18 F F1($1)A F0 2.846(\)i)C
-2.846(st)-2.846 G .346(he name of the command whose ar)-2.846 F(guments)
--.18 E .263(are being completed, the second ar)108 261.6 R .263
-(gument \()-.18 F F1($2)A F0 2.763(\)i)C 2.763(st)-2.763 G .264(he w)
--2.763 F .264(ord being completed, and the third ar)-.1 F .264
-(gument \()-.18 F F1($3)A F0 2.764(\)i)C(s)-2.764 E .629(the w)108 273.6
-R .629(ord preceding the w)-.1 F .629
-(ord being completed on the current command line.)-.1 F .628
-(No \214ltering of the generated)5.629 F .714(completions ag)108 285.6 R
-.714(ainst the w)-.05 F .714(ord being completed is performed; the func\
-tion or command has complete free-)-.1 F(dom in generating the matches.)
-108 297.6 Q(An)108 314.4 Q 2.938(yf)-.15 G .437
-(unction speci\214ed with)-2.938 F F1<ad46>2.937 E F0 .437(is in)2.937 F
--.2(vo)-.4 G -.1(ke).2 G 2.937<648c>.1 G 2.937(rst. The)-2.937 F .437
-(function may use an)2.937 F 2.937(yo)-.15 G 2.937(ft)-2.937 G .437
-(he shell f)-2.937 F .437(acilities, including)-.1 F(the)108 326.4 Q F1
-(compgen)2.956 E F0 -.2(bu)2.956 G .456(iltin described belo).2 F 1.756
--.65(w, t)-.25 H 2.956(og).65 G .456(enerate the matches.)-2.956 F .457
-(It must put the possible completions in the)5.456 F F2(COMPREPL)108
-338.4 Q(Y)-.828 E F0(array v)2.25 E(ariable, one per array element.)-.25
-E(Ne)108 355.2 Q .081(xt, an)-.15 F 2.581(yc)-.15 G .081
-(ommand speci\214ed with the)-2.581 F F1<ad43>2.581 E F0 .081
-(option is in)2.581 F -.2(vo)-.4 G -.1(ke).2 G 2.581(di).1 G 2.58(na)
--2.581 G 2.58(ne)-2.58 G -.4(nv)-2.58 G .08(ironment equi).4 F -.25(va)
--.25 G .08(lent to command sub-).25 F 2.858(stitution. It)108 367.2 R
-.359(should print a list of completions, one per line, to the standard \
-output.)2.858 F .359(Backslash may be used)5.359 F(to escape a ne)108
-379.2 Q(wline, if necessary)-.25 E(.)-.65 E .377
-(After all of the possible completions are generated, an)108 396 R 2.877
-<798c>-.15 G .377(lter speci\214ed with the)-2.877 F F1<ad58>2.876 E F0
-.376(option is applied to the)2.876 F 3.181(list. The)108 408 R .681
-(\214lter is a pattern as used for pathname e)3.181 F .681(xpansion; a)
--.15 F F1(&)3.181 E F0 .682(in the pattern is replaced with the te)3.182
-F .682(xt of)-.15 F .523(the w)108 420 R .523(ord being completed.)-.1 F
-3.023(Al)5.523 G(iteral)-3.023 E F1(&)3.023 E F0 .522
+(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.022(db).15 G(efore)-3.022 E .849(attempting a match.)108 432 R
-(An)5.849 E 3.349(yc)-.15 G .849
-(ompletion that matches the pattern will be remo)-3.349 F -.15(ve)-.15 G
-3.35(df).15 G .85(rom the list.)-3.35 F 3.35(Al)5.85 G(eading)-3.35 E F1
-(!)3.35 E F0(ne)108 444 Q -.05(ga)-.15 G .764
+-.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.264 E F1(nocase-)3.264 E(match)108 456 Q F0
+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
-472.8 Q 3.086(,a)-.65 G .886 -.15(ny p)-3.086 H .586(re\214x and suf).15
+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 484.8 Q .247
-(If the pre)108 501.6 R .247(viously-applied actions do not generate an)
+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 .246(as supplied to)-.1 F
-F1(complete)108 513.6 Q F0(when the compspec w)2.5 E
-(as de\214ned, directory name completion is attempted.)-.1 E .461
-(If the)108 530.4 R F1 .462(\255o plusdirs)2.961 F F0 .462(option w)
+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 542.4 Q 2.5(ym)-.15 G
-(atches are added to the results of the other actions.)-2.5 E .56
-(By def)108 559.2 R .56(ault, if a compspec is found, whate)-.1 F -.15
-(ve)-.25 G 3.06(ri).15 G 3.06(tg)-3.06 G .559
-(enerates is returned to the completion code as the full set)-3.06 F
-.631(of possible completions.)108 571.2 R .631(The def)5.631 F(ault)-.1
-E F1(bash)3.131 E F0 .631
-(completions are not attempted, and the readline def)3.131 F .632
-(ault of \214le-)-.1 F .559(name completion is disabled.)108 583.2 R
-.559(If the)5.559 F F1 .559(\255o bashdefault)3.059 F F0 .559(option w)
-3.059 F .559(as supplied to)-.1 F F1(complete)3.058 E F0 .558
-(when the compspec)3.058 F -.1(wa)108 595.2 S 3.171(sd).1 G .671
-(e\214ned, the)-3.171 F F1(bash)3.171 E F0(def)3.171 E .671
+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 .672(If the)5.672 F F1<ad6f>3.172 E(default)108 607.2 Q F0 1.207
-(option w)3.707 F 1.207(as supplied to)-.1 F F1(complete)3.707 E F0
+-.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.206(ault completion)-.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
-619.2 Q(ault)-.1 E F1(bash)2.5 E F0(completions\) generate no matches.)
+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 636 R .633(tions force r\
-eadline to append a slash to completed names which are symbolic links t\
-o directories, subject)108 648 R 2.761(to the v)108 660 R 2.761
-(alue of the)-.25 F F1(mark\255dir)5.261 E(ectories)-.18 E F0 2.761
-(readline v)5.261 F 2.761(ariable, re)-.25 F -.05(ga)-.15 G 2.762
-(rdless of the setting of the).05 F F1(mark-sym-)5.262 E(link)108 672 Q
-(ed\255dir)-.1 E(ectories)-.18 E F0(readline v)2.5 E(ariable.)-.25 E
-.191(There is some support for dynamically modifying completions.)108
-688.8 R .19(This is most useful when used in combina-)5.191 F 1.172
-(tion with a def)108 700.8 R 1.172(ault completion speci\214ed with)-.1
+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 712.8 R .93(xit status of 124.)-.15
+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 724.8 R
-(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(53)190.395 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 .666
-(being attempted \(supplied as the \214rst ar)108 84 R .665
-(gument when the function is e)-.18 F -.15(xe)-.15 G .665
-(cuted\), programmable completion).15 F .083(restarts from the be)108 96
-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 .084(This allo)5.084 F .084
-(ws a set of)-.25 F(completions to be b)108 108 Q(uilt dynamically as c\
-ompletion is attempted, rather than being loaded all at once.)-.2 E -.15
-(Fo)108 124.8 S 2.637(ri).15 G .137
-(nstance, assuming that there is a library of compspecs, each k)-2.637 F
+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 136.8 Q(wing def)-.25 E
+(the command, the follo)108 588 Q(wing def)-.25 E
 (ault completion function w)-.1 E(ould load completions dynamically:)-.1
-E/F1 10/Courier@0 SF(_completion_loader\(\))108 153.6 Q({)108 165.6 Q 6
-(.")144 177.6 S
+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
-189.6 Q(complete -D -F _completion_loader -o bashdefault -o default)108
-201.6 Q/F2 10.95/Times-Bold@0 SF(HIST)72 230.4 Q(OR)-.197 E(Y)-.383 E F0
-.371(When the)108 242.4 R/F3 10/Times-Bold@0 SF .371(\255o history)2.871
-F F0 .371(option to the)2.871 F F3(set)2.872 E F0 -.2(bu)2.872 G .372
-(iltin is enabled, the shell pro).2 F .372(vides access to the)-.15 F/F4
-10/Times-Italic@0 SF .372(command history)2.872 F F0(,)A .305
-(the list of commands pre)108 254.4 R .305(viously typed.)-.25 F .305
-(The v)5.305 F .304(alue of the)-.25 F/F5 9/Times-Bold@0 SF(HISTSIZE)
-2.804 E F0 -.25(va)2.554 G .304(riable is used as the number of com-).25
-F .429(mands to sa)108 266.4 R .729 -.15(ve i)-.2 H 2.929(nah).15 G .429
-(istory list.)-2.929 F .429(The te)5.429 F .429(xt of the last)-.15 F F5
-(HISTSIZE)2.93 E F0 .43(commands \(def)2.68 F .43(ault 500\) is sa)-.1 F
--.15(ve)-.2 G 2.93(d. The).15 F(shell)2.93 E .287
+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
-278.4 R .287(ariable e)-.25 F .287(xpansion \(see)-.15 F F5(EXP)2.787 E
-(ANSION)-.666 E F0(abo)2.537 E -.15(ve)-.15 G(\)).15 E -.2(bu)108 290.4
-S 4.065(ta).2 G 1.565(fter history e)-4.065 F 1.565
+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 F5(HISTIGNORE)4.065 E F0
-(and)3.816 E F5(HISTCONTR)108 302.4 Q(OL)-.27 E/F6 9/Times-Roman@0 SF(.)
-A F0 .082
+(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 319.2 R(ariable)-.25 E F5(HISTFILE)2.582 E F0(\(def)2.332 E(ault)-.1
-E F4(~/.bash_history)2.582 E F0(\).)A .315(The \214le named by the v)108
-331.2 R .315(alue of)-.25 F F5(HISTFILE)2.815 E F0 .315
-(is truncated, if necessary)2.565 F 2.815(,t)-.65 G 2.815(oc)-2.815 G
-.315(ontain no more than the number of)-2.815 F .659
-(lines speci\214ed by the v)108 343.2 R .659(alue of)-.25 F F5
-(HISTFILESIZE)3.158 E F6(.)A F0(If)5.158 E F3(HISTFILESIZE)3.158 E F0
-.658(is unset, or set to null, a non-numeric)3.158 F -.25(va)108 355.2 S
-.142(lue, or a numeric v).25 F .142
+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 367.2 Q 1.605
+(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 .15
-(stamps for the follo)108 379.2 R .15(wing history line.)-.25 F .151
+(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
-.151(alue of)-.25 F(the)108 391.2 Q F5(HISTTIMEFORMA)3.559 E(T)-.855 E
-F0 -.25(va)3.309 G 3.559(riable. When).25 F 3.559(as)3.559 G 1.059
-(hell with history enabled e)-3.559 F 1.059(xits, the last)-.15 F F5
-($HISTSIZE)3.559 E F0 1.058(lines are)3.309 F .158
-(copied from the history list to)108 403.2 R F5($HISTFILE)2.658 E F6(.)A
-F0 .158(If the)4.658 F F3(histappend)2.658 E F0 .159
-(shell option is enabled \(see the description of)2.659 F F3(shopt)108
-415.2 Q F0(under)2.582 E F5 .082(SHELL B)2.582 F(UIL)-.09 E .082
+.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
-.196(history \214le is o)108 427.2 R -.15(ve)-.15 G 2.696(rwritten. If)
-.15 F F5(HISTFILE)2.696 E F0 .197(is unset, or if the history \214le is\
- unwritable, the history is not sa)2.446 F -.15(ve)-.2 G(d.).15 E .584
-(If the)108 439.2 R F5(HISTTIMEFORMA)3.084 E(T)-.855 E F0 -.25(va)2.834
+.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 .583(ed with the his-)-.1 F 1.147(tory comment character)108 451.2 R
-3.647(,s)-.4 G 3.647(ot)-3.647 G(he)-3.647 E 3.647(ym)-.15 G 1.147
-(ay be preserv)-3.647 F 1.147(ed across shell sessions.)-.15 F 1.148
-(This uses the history comment)6.148 F 1.377
-(character to distinguish timestamps from other history lines.)108 463.2
-R 1.377(After sa)6.377 F 1.377(ving the history)-.2 F 3.876(,t)-.65 G
-1.376(he history \214le is)-3.876 F .756
-(truncated to contain no more than)108 475.2 R F5(HISTFILESIZE)3.257 E
-F0 3.257(lines. If)3.007 F F5(HISTFILESIZE)3.257 E F0 .757
-(is unset, or set to null, a non-)3.007 F(numeric v)108 487.2 Q
+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 .299
-(The b)108 504 R .299(uiltin command)-.2 F F3(fc)2.799 E F0(\(see)2.799
-E F5 .299(SHELL B)2.799 F(UIL)-.09 E .299(TIN COMMANDS)-.828 F F0(belo)
-2.549 E .298(w\) may be used to list or edit and re-e)-.25 F -.15(xe)
--.15 G(-).15 E .471(cute a portion of the history list.)108 516 R(The)
-5.471 E F3(history)2.971 E F0 -.2(bu)2.971 G .472
-(iltin may be used to display or modify the history list and).2 F .002
-(manipulate the history \214le.)108 528 R .001
-(When using command-line editing, search commands are a)5.002 F -.25(va)
--.2 G .001(ilable in each edit-).25 F(ing mode that pro)108 540 Q
-(vide access to the history list.)-.15 E 1.485(The shell allo)108 556.8
-R 1.485(ws control o)-.25 F -.15(ve)-.15 G 3.986(rw).15 G 1.486
+(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.486 E F5(HISTCONTR)3.986
-E(OL)-.27 E F0(and)3.736 E F5(HISTIGNORE)108 568.8 Q F0 -.25(va)2.708 G
-.458(riables may be set to cause the shell to sa).25 F .757 -.15(ve o)
--.2 H .457(nly a subset of the commands entered.).15 F(The)5.457 E F3
-(cmdhist)108 580.8 Q F0 .75
+-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 592.8 R 3.577(,a)-.65 G 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 F3(lithist)3.576 E F0
-.373(shell option causes the shell to sa)108 604.8 R .674 -.15(ve t)-.2
-H .374(he command with embedded ne).15 F .374
-(wlines instead of semicolons.)-.25 F .374(See the)5.374 F .319
-(description of the)108 616.8 R F3(shopt)2.819 E F0 -.2(bu)2.819 G .318
-(iltin belo).2 F 2.818(wu)-.25 G(nder)-2.818 E F5 .318(SHELL B)2.818 F
-(UIL)-.09 E .318(TIN COMMANDS)-.828 F F0 .318
+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
-628.8 Q F2(HIST)72 645.6 Q(OR)-.197 E 2.738(YE)-.383 G(XP)-2.738 E
-(ANSION)-.81 E F0 .61(The shell supports a history e)108 657.6 R .611
-(xpansion feature that is similar to the history e)-.15 F .611
-(xpansion in)-.15 F F3(csh)3.111 E F0 5.611(.T)C .611(his section)-5.611
-F .871(describes what syntax features are a)108 669.6 R -.25(va)-.2 G
-3.371(ilable. This).25 F .871(feature is enabled by def)3.371 F .87
-(ault for interacti)-.1 F 1.17 -.15(ve s)-.25 H .87(hells, and).15 F
-.949(can be disabled using the)108 681.6 R F3(+H)3.449 E F0 .949
-(option to the)3.449 F F3(set)3.449 E F0 -.2(bu)3.449 G .949
-(iltin command \(see).2 F F5 .949(SHELL B)3.449 F(UIL)-.09 E .95
-(TIN COMMANDS)-.828 F F0(be-)3.2 E(lo)108 693.6 Q 2.5
+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.306(History e)108 710.4 R 1.306(xpansions introduce w)-.15 F 1.306(or\
-ds from the history list into the input stream, making it easy to repea\
-t)-.1 F .209(commands, insert the ar)108 722.4 R .209(guments to a pre)
--.18 F .21
-(vious command into the current input line, or \214x errors in pre)-.25
-F(vious)-.25 E(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(54)
-190.395 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(commands quickly)
-108 84 Q(.)-.65 E 1.164(History e)108 100.8 R 1.163(xpansion is perform\
-ed immediately after a complete line is read, before the shell breaks i\
-t into)-.15 F -.1(wo)108 112.8 S .251
-(rds, and is performed on each line indi).1 F .251
-(vidually without taking quoting on pre)-.25 F .252
-(vious lines into account.)-.25 F(It)5.252 E(tak)108 124.8 Q .146
-(es place in tw)-.1 F 2.646(op)-.1 G 2.646(arts. The)-2.646 F .146(\214\
+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 136.8 R .767
-(The line selected from the)5.767 F .254(history is the)108 148.8 R/F1
-10/Times-Italic@0 SF -.15(ev)2.754 G(ent).15 E F0 2.753(,a)C .253
-(nd the portions of that line that are acted upon are)-2.753 F F1(wor)
-2.753 E(ds)-.37 E F0 5.253(.V)C(arious)-6.363 E F1(modi\214er)2.753 E(s)
--.1 E F0 .253(are a)2.753 F -.25(va)-.2 G(il-).25 E .538
-(able to manipulate the selected w)108 160.8 R 3.038(ords. The)-.1 F
-.538(line is brok)3.038 F .538(en into w)-.1 F .539(ords in the same f)
--.1 F .539(ashion as when reading)-.1 F .573(input, so that se)108 172.8
-R -.15(ve)-.25 G(ral).15 E F1(metac)3.073 E(har)-.15 E(acter)-.15 E F0
+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.072(ord. His-)-.1 F .355(tory e)108 184.8 R .355
+-.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 .356(hich is)-2.855 F/F2 10
-/Times-Bold@0 SF(!)3.689 E F0 .356(by def)3.689 F(ault.)-.1 E .791
-(Only backslash \()108 196.8 R F2(\\).833 E F0 3.291(\)a).833 G .79
-(nd single quotes can quote the history e)-3.291 F .79
-(xpansion character)-.15 F 3.29(,b)-.4 G .79(ut the history e)-3.49 F
+(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 208.8 R
-(string.)108 220.8 Q(Se)108 237.6 Q -.15(ve)-.25 G .03
+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 249.6 T
-3.162(ni).25 G 3.162(fi)-3.162 G 3.162(ti)-3.162 G 3.162(su)-3.162 G
+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 F2(=)3.162 E F0 5.662(.I)C 3.162(ft)-5.662 G(he)-3.162 E F2
-(extglob)3.162 E F0 .662(shell option is enabled,)3.162 F F2(\()3.163 E
-F0(will also inhibit e)108 261.6 Q(xpansion.)-.15 E(Se)108 278.4 Q -.15
-(ve)-.25 G .11(ral shell options settable with the).15 F F2(shopt)2.61 E
-F0 -.2(bu)2.61 G .109(iltin may be used to tailor the beha).2 F .109
-(vior of history e)-.2 F(xpansion.)-.15 E .231(If the)108 290.4 R F2
-(histv)2.731 E(erify)-.1 E F0 .231
-(shell option is enabled \(see the description of the)2.731 F F2(shopt)
-2.731 E F0 -.2(bu)2.731 G .231(iltin belo).2 F .231(w\), and)-.25 F F2
--.18(re)2.731 G(adline).18 E F0 .232(is be-)2.732 F .449(ing used, hist\
-ory substitutions are not immediately passed to the shell parser)108
-302.4 R 5.449(.I)-.55 G .448(nstead, the e)-5.449 F .448
-(xpanded line is)-.15 F 2.228(reloaded into the)108 314.4 R F2 -.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 F2 -.18(re)4.728 G
-(adline).18 E F0 2.228(is being used, and the)4.728 F F2(histr)108 326.4
-Q(eedit)-.18 E F0 1.202(shell option is enabled, a f)3.702 F 1.202
-(ailed history substitution will be reloaded into the)-.1 F F2 -.18(re)
-3.702 G(adline).18 E F0(editing)3.702 E -.2(bu)108 338.4 S -.25(ff).2 G
-.303(er for correction.).25 F(The)5.303 E F2<ad70>2.803 E F0 .303
-(option to the)2.803 F F2(history)2.804 E F0 -.2(bu)2.804 G .304
+-.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 350.4 R(The)5.52 E F2<ad73>3.02 E
-F0 .52(option to the)3.02 F F2(history)3.02 E F0 -.2(bu)3.02 G .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 362.4 Q -.15(xe)-.15 G
+(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.108(The shell allo)108 379.2 R
+(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 .163(scription of)108 391.2 R
-F2(histchars)2.663 E F0(abo)2.663 E .463 -.15(ve u)-.15 H(nder).15 E F2
-.163(Shell V)2.663 F(ariables)-.92 E F0 2.663(\). The)B .162
+(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 403.2 Q F2(Ev)
-87 420 Q(ent Designators)-.1 E F0 .204(An e)108 432 R -.15(ve)-.25 G
+(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 .205(Unless the reference is abso-)5.204 F(lute, e)108 444
-Q -.15(ve)-.25 G(nts are relati).15 E .3 -.15(ve t)-.25 H 2.5(ot).15 G
-(he current position in the history list.)-2.5 E F2(!)108 460.8 Q F0
-1.608(Start a history substitution, e)144 460.8 R 1.608
-(xcept when follo)-.15 F 1.607(wed by a)-.25 F F2(blank)4.107 E F0 4.107
-(,n)C -.25(ew)-4.107 G 1.607(line, carriage return, = or \().25 F
-(\(when the)144 472.8 Q F2(extglob)2.5 E F0
-(shell option is enabled using the)2.5 E F2(shopt)2.5 E F0 -.2(bu)2.5 G
-(iltin\).).2 E F2(!)108 484.8 Q F1(n)A F0(Refer to command line)144
-484.8 Q F1(n)2.86 E F0(.).24 E F2<21ad>108 496.8 Q F1(n)A F0
-(Refer to the current command minus)144 496.8 Q F1(n)2.86 E F0(.).24 E
-F2(!!)108 508.8 Q F0(Refer to the pre)144 508.8 Q(vious command.)-.25 E
-(This is a synon)5 E(ym for `!\2551'.)-.15 E F2(!)108 520.8 Q F1(string)
-A F0 .865(Refer to the most recent command preceding the current positi\
-on in the history list starting with)144 520.8 R F1(string)144.34 532.8
-Q F0(.).22 E F2(!?)108 544.8 Q F1(string)A F2([?])A F0 1.503(Refer to t\
-he most recent command preceding the current position in the history li\
-st containing)144 556.8 R F1(string)144.34 568.8 Q F0 5.496(.T).22 G
-.496(he trailing)-5.496 F F2(?)2.996 E F0 .496(may be omitted if)2.996 F
-F1(string)3.336 E F0 .497(is follo)3.216 F .497(wed immediately by a ne)
--.25 F 2.997(wline. If)-.25 F F1(string)2.997 E F0(is)2.997 E .391(miss\
-ing, the string from the most recent search is used; it is an error if \
-there is no pre)144 580.8 R .39(vious search)-.25 F(string.)144 592.8 Q
-/F3 12/Times-Bold@0 SF(^)108 609.8 Q F1(string1)-5 I F3(^)5 I F1
-(string2)-5 I F3(^)5 I F0 .752(Quick substitution.)144 616.8 R .752
-(Repeat the pre)5.752 F .753(vious command, replacing)-.25 F F1(string1)
-3.593 E F0(with)3.253 E F1(string2)3.593 E F0 5.753(.E).02 G(qui)-5.753
-E -.25(va)-.25 G .753(lent to).25 F -.74(``)144 628.8 S(!!:s).74 E/F4 12
-/Times-Roman@0 SF(^)5 I F1(string1)-5 I F4(^)5 I F1(string2)-5 I F4(^)5
-I F0 1.48 -.74('' \()-5 L(see).74 E F2(Modi\214ers)2.5 E F0(belo)2.5 E
-(w\).)-.25 E F2(!#)108 640.8 Q F0(The entire command line typed so f)144
-640.8 Q(ar)-.1 E(.)-.55 E F2 -.75(Wo)87 657.6 S(rd Designators).75 E F0
--.8(Wo)108 669.6 S 1.314(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 F2(:)
-3.814 E F0 1.313(separates the e)3.813 F -.15(ve)-.25 G 1.313
-(nt speci\214cation).15 F .529(from the w)108 681.6 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 F2(^)3.029 E F0(,)A F2($)3.029 E F0(,)A F2(*)3.029 E
-F0(,)A F2<ad>3.029 E F0 3.029(,o)C(r)-3.029 E F2(%)3.029 E F0 5.53(.W)C
-(ords)-6.33 E .516(are numbered from the be)108 693.6 R .516
+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.515 G .515(rds are in-)
-.8 F(serted into the current line separated by single spaces.)108 705.6
-Q(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(55)190.395 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/F1 10/Times-Bold@0
-SF 2.5(0\()108 84 S(zer)-2.5 E(o\))-.18 E F0(The zeroth w)144 96 Q 2.5
-(ord. F)-.1 F(or the shell, this is the command w)-.15 E(ord.)-.1 E/F2
-10/Times-Italic@0 SF(n)108.36 108 Q F0(The)144 108 Q F2(n)2.5 E F0(th w)
-A(ord.)-.1 E F1(^)108 120 Q F0(The \214rst ar)144 120 Q 2.5
-(gument. That)-.18 F(is, w)2.5 E(ord 1.)-.1 E F1($)108 132 Q F0 .063
-(The last w)144 132 R 2.563(ord. This)-.1 F .063(is usually the last ar)
-2.563 F .064(gument, b)-.18 F .064(ut will e)-.2 F .064
-(xpand to the zeroth w)-.15 F .064(ord if there is only)-.1 F(one w)144
-144 Q(ord in the line.)-.1 E F1(%)108 156 Q F0 1.42(The \214rst w)144
-156 R 1.42(ord matched by the most recent `?)-.1 F F2(string)A F0 1.419
-(?' search, if the search string be)B 1.419(gins with a)-.15 F
-(character that is part of a w)144 168 Q(ord.)-.1 E F2(x)108.77 180 Q F1
-<ad>A F2(y)A F0 2.5(Ar)144 180 S(ange of w)-2.5 E(ords; `\255)-.1 E F2
+(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 192 Q F0 .315(All of the w)144 192 R .315(ords b)-.1 F .315
+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.816 E F0 .316(if there is)2.816 F(just one w)144 204 Q(ord in the e)
+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 216 Q F0(Abbre)144 216 Q(viates)-.25 E F2(x\255$)2.5 E F0(.)
-A F1<78ad>108 228 Q F0(Abbre)144 228 Q(viates)-.25 E F2(x\255$)2.5 E F0
+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 244.8 Q(ord designator is supplied without an e)-.1 E -.15
+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 261.6 Q F0 .184(After the optional w)108 273.6 R .184
-(ord designator)-.1 F 2.684(,t)-.4 G .183
-(here may appear a sequence of one or more of the follo)-2.684 F .183
-(wing modi\214ers,)-.25 F(each preceded by a `:'.)108 285.6 Q
+(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 F1(h)108 302.4 Q F0(Remo)144 302.4 Q .3 -.15(ve a t)-.15 H
+(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 314.4 Q F0(Remo)144 314.4 Q .3 -.15(ve a)-.15 H
+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 326.4 Q F0(Remo)144 326.4 Q .3 -.15(ve a t)-.15 H(railing suf).15 E
-(\214x of the form)-.25 E F2(.xxx)2.5 E F0 2.5(,l)C(ea)-2.5 E
-(ving the basename.)-.2 E F1(e)108 338.4 Q F0(Remo)144 338.4 Q .3 -.15
-(ve a)-.15 H(ll b).15 E(ut the trailing suf)-.2 E(\214x.)-.25 E F1(p)108
-350.4 Q F0(Print the ne)144 350.4 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 362.4 Q F0
-(Quote the substituted w)144 362.4 Q
-(ords, escaping further substitutions.)-.1 E F1(x)108 374.4 Q F0 .385
-(Quote the substituted w)144 374.4 R .385(ords as with)-.1 F F1(q)2.885
-E F0 2.885(,b)C .386(ut break into w)-3.085 F .386(ords at)-.1 F F1
-(blanks)2.886 E F0 .386(and ne)2.886 F 2.886(wlines. The)-.25 F F1(q)
-2.886 E F0(and)2.886 E F1(x)2.886 E F0(modi\214ers are mutually e)144
-386.4 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 398.4 Q F2(old)A F1(/)A
-F2(ne)A(w)-.15 E F1(/)A F0(Substitute)144 410.4 Q F2(ne)3.329 E(w)-.15 E
-F0 .469(for the \214rst occurrence of)3.279 F F2(old)3.199 E F0 .469
+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 .953
-(delimiter in place of /.)144 422.4 R .953
+(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 .954(nt line.).15 F .131
-(The delimiter may be quoted in)144 434.4 R F2(old)2.861 E F0(and)3.401
-F2(ne)2.991 E(w)-.15 E F0 .131(with a single backslash.)2.941 F .131
+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 .619(placed by)144 446.4 R F2
+(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.89 E .487(tuted, or)144 458.4 R
-2.987(,i)-.4 G 2.987(fn)-2.987 G 2.987(op)-2.987 G(re)-2.987 E .486
+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 .486(in a)3.206 F F1(!?)2.986 E F2(string)A F1([?])A F0 2.986
-(search. If)5.486 F F2(ne)144.36 470.4 Q(w)-.15 E F0
+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 482.4 Q F0(Repeat the pre)144 482.4 Q(vious substitution.)-.25 E F1
-(g)108 494.4 Q F0 .397(Cause changes to be applied o)144 494.4 R -.15
-(ve)-.15 G 2.897(rt).15 G .398(he entire e)-2.897 F -.15(ve)-.25 G .398
-(nt line.).15 F .398(This is used in conjunction with `)5.398 F F1(:s)A
-F0 2.898('\()C(e.g.,)-2.898 E(`)144 506.4 Q F1(:gs/)A F2(old)A F1(/)A F2
-(ne)A(w)-.15 E F1(/)A F0 .351('\) or `)B F1(:&)A F0 2.851('. If)B .351
-(used with `)2.851 F F1(:s)A F0 .351(', an)B 2.851(yd)-.15 G .35
-(elimiter can be used in place of /, and the \214nal de-)-2.851 F
-(limiter is optional if it is the last character of the e)144 518.4 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
-530.4 Q F0(Apply the follo)144 530.4 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 547.2 Q(UIL)-.11 E(TIN COMMANDS)-1.007 E F0 .062
-(Unless otherwise noted, each b)108 559.2 R .062(uiltin command documen\
-ted in this section as accepting options preceded by)-.2 F F1<ad>108
-571.2 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
+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 .461(and do not treat)108 583.2 R F1
+(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.962 G .462(iltins accept and).2 F .261(process ar)108 595.2 R .261
-(guments be)-.18 F .261(ginning with)-.15 F F1<ad>2.761 E F0 .261
-(without requiring)2.761 F F1<adad>2.761 E F0 5.261(.O)C .261(ther b)
--5.261 F .26(uiltins that accept ar)-.2 F .26(guments b)-.18 F .26
+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 607.2 R 1.154(guments be)-.18 F 1.154(ginning with)-.15 F F1<ad>
+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
-619.2 Q -.15(ve)-.25 G(nt this interpretation.).15 E F1(:)108 637.2 Q F0
-([)2.5 E F2(ar)A(guments)-.37 E F0(])A .452(No ef)144 649.2 R .452
+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 .451(and performing an)3.221 F
-2.951(ys)-.15 G(peci\214ed)-2.951 E 2.5(redirections. The)144 661.2 R
-(return status is zero.)2.5 E F1(.)110.5 678 Q F2(\214lename)6.666 E F0
-([)2.5 E F2(ar)A(guments)-.37 E F0(])A F1(sour)108 690 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 702 R -.15(xe)-.15 G 1.02(cute commands from).15 F F2
+-.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.331
-(status of the last command e)144 714 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.33(does not contain a slash, \214le-)4.011 F .488(names in)
-144 726 R/F4 9/Times-Bold@0 SF -.666(PA)2.988 G(TH)-.189 E F0 .488
-(are used to \214nd the directory containing)2.738 F F2(\214lename)4.899
-E F0 5.489(.T).18 G .489(he \214le searched for in)-5.489 F F4 -.666(PA)
-2.989 G(TH)-.189 E F0(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E
-(56)190.395 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 .833
-(need not be e)144 84 R -.15(xe)-.15 G 3.333(cutable. When).15 F/F1 10
-/Times-Bold@0 SF(bash)3.333 E F0 .832(is not in)3.333 F/F2 10
-/Times-Italic@0 SF .832(posix mode)3.332 F F0 3.332(,t)C .832
-(he current directory is searched if no)-3.332 F .981
-(\214le is found in)144 96 R/F3 9/Times-Bold@0 SF -.666(PA)3.481 G(TH)
--.189 E/F4 9/Times-Roman@0 SF(.)A F0 .981(If the)5.481 F F1(sour)3.481 E
-(cepath)-.18 E F0 .981(option to the)3.481 F F1(shopt)3.481 E F0 -.2(bu)
-3.481 G .981(iltin command is turned of).2 F .982(f, the)-.25 F F3 -.666
-(PA)144 108 S(TH)-.189 E F0 .112(is not searched.)2.363 F .112(If an)
-5.112 F(y)-.15 E F2(ar)2.612 E(guments)-.37 E F0 .112(are supplied, the)
-2.612 F 2.612(yb)-.15 G .112(ecome the positional parameters when)-2.612
-F F2(\214lename)144 120 Q F0 .485(is e)2.985 F -.15(xe)-.15 G 2.985
-(cuted. Otherwise).15 F .485(the positional parameters are unchanged.)
-2.985 F .485(If the)5.485 F F1<ad54>2.985 E F0 .485(option is en-)2.985
-F(abled,)144 132 Q F1(sour)3.325 E(ce)-.18 E F0 .825(inherits an)3.325 F
-3.325(yt)-.15 G .825(rap on)-3.325 F F1(DEB)3.325 E(UG)-.1 E F0 3.325
-(;i)C 3.325(fi)-3.325 G 3.324(ti)-3.325 G 3.324(sn)-3.324 G .824(ot, an)
--3.324 F(y)-.15 E F1(DEB)3.324 E(UG)-.1 E F0 .824(trap string is sa)
-3.324 F -.15(ve)-.2 G 3.324(da).15 G .824(nd re-)-3.324 F .817
-(stored around the call to)144 144 R F1(sour)3.317 E(ce)-.18 E F0 3.317
-(,a)C(nd)-3.317 E F1(sour)3.317 E(ce)-.18 E F0 .817(unsets the)3.317 F
-F1(DEB)3.317 E(UG)-.1 E F0 .817(trap while it e)3.317 F -.15(xe)-.15 G
-3.317(cutes. If).15 F F1<ad54>3.317 E F0(is)3.318 E 1.435
-(not set, and the sourced \214le changes the)144 156 R F1(DEB)3.935 E
-(UG)-.1 E F0 1.435(trap, the ne)3.935 F 3.935(wv)-.25 G 1.435
-(alue is retained when)-4.185 F F1(sour)3.935 E(ce)-.18 E F0 3.762
-(completes. The)144 168 R 1.262
-(return status is the status of the last command e)3.762 F 1.263
-(xited within the script \(0 if no)-.15 F(commands are e)144 180 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 196.8 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 208.8 Q F0 2.725(with no ar)5.225 F 2.724
+(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.224 E
-F2(name)144 220.8 Q F0(=)A F2(value)A F0 .58(on standard output.)3.08 F
+(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 232.8 Q F2(value)2.509 E F0 .009(is gi)2.509 F -.15
+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 .008(ed for alias substi-)-.1 F .579
-(tution when the alias is e)144 244.8 R 3.079(xpanded. F)-.15 F .579
+(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 .579(is sup-)3.079
-F 1.314(plied, the name and v)144 256.8 R 1.314
+(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.313(is gi)3.814 F
--.15(ve)-.25 G 3.813(nf).15 G(or)-3.813 E
-(which no alias has been de\214ned.)144 268.8 Q F1(bg)108 285.6 Q F0([)
-2.5 E F2(jobspec)A F0(...])2.5 E .744(Resume each suspended job)144
-297.6 R F2(jobspec)3.244 E F0 .745
-(in the background, as if it had been started with)3.244 F F1(&)3.245 E
-F0 5.745(.I)C(f)-5.745 E F2(job-)4.985 E(spec)144 309.6 Q F0 .672
-(is not present, the shell')3.482 F 3.172(sn)-.55 G .672(otion of the)
--3.172 F F2(curr)3.172 E .672(ent job)-.37 F F0 .672(is used.)3.172 F F1
-(bg)5.671 E F2(jobspec)4.911 E F0 .671(returns 0 unless run)3.481 F .418
-(when job control is disabled or)144 321.6 R 2.919(,w)-.4 G .419
-(hen run with job control enabled, an)-2.919 F 2.919(ys)-.15 G
-(peci\214ed)-2.919 E F2(jobspec)2.919 E F0 -.1(wa)2.919 G 2.919(sn).1 G
-(ot)-2.919 E(found or w)144 333.6 Q(as started without job control.)-.1
-E F1(bind)108 350.4 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 362.4 Q F0([)2.5 E F1
+(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 374.4 Q F0
+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 386.4 Q F0([)2.5 E F1<ad6d>A F2 -.1(ke)2.5
+(\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 398.4 Q F0([)2.5 E F1<ad6d>A F2 -.1(ke)
+(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 410.4 Q F0([)2.5 E F1<ad6d>A F2 -.1(ke)
+(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 F0 .239(Display current)144 422.4 R F1 -.18(re)
-2.739 G(adline).18 E F0 -.1(ke)2.739 G 2.739(ya)-.05 G .239
-(nd function bindings, bind a k)-2.739 F .539 -.15(ey s)-.1 H .238
-(equence to a).15 F F1 -.18(re)2.738 G(adline).18 E F0 .238(function or)
-2.738 F .475(macro, or set a)144 434.4 R F1 -.18(re)2.975 G(adline).18 E
-F0 -.25(va)2.975 G 2.975(riable. Each).25 F .476(non-option ar)2.976 F
-.476(gument is a command as it w)-.18 F .476(ould appear in)-.1 F F2
-(.inputr)144.23 446.4 Q(c)-.37 E F0 2.968(,b).31 G .467
-(ut each binding or command must be passed as a separate ar)-3.168 F
-.467(gument; e.g., '"\\C\255x\\C\255r":)-.18 F 2.5
-(re\255read\255init\255\214le'. Options,)144 458.4 R(if supplied, ha)2.5
-E .3 -.15(ve t)-.2 H(he follo).15 E(wing meanings:)-.25 E F1<ad6d>144
-470.4 Q F2 -.1(ke)2.5 G(ymap)-.2 E F0(Use)180 482.4 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 494.4 S(ymap)-.2 E F0 3.193(names are)5.883 F F2 3.193
+(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 506.4 Q F0 4.089(,a)C(nd)-4.089 E F2(vi\255insert)
+(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 518.4 Q(ym\);)-.15 E F2
+(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 530.4 Q F0
-(List the names of all)180 530.4 Q F1 -.18(re)2.5 G(adline).18 E F0
-(functions.)2.5 E F1<ad70>144 542.4 Q F0(Display)180 542.4 Q F1 -.18(re)
+(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 554.4
-Q F0(List current)180 554.4 Q F1 -.18(re)2.5 G(adline).18 E F0
-(function names and bindings.)2.5 E F1<ad73>144 566.4 Q F0(Display)180
-566.4 Q F1 -.18(re)3.655 G(adline).18 E F0 -.1(ke)3.655 G 3.655(ys)-.05
+(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 578.4 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 590.4 Q
-F0(Display)180 590.4 Q F1 -.18(re)2.5 G(adline).18 E F0 -.1(ke)2.5 G 2.5
+-.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 602.4 Q F0(Display)180 602.4 Q F1 -.18
+-.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 614.4 Q F0(List current)180 614.4 Q
+(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 626.4 Q F2(\214lename)2.5 E F0(Read k)180
-638.4 Q .3 -.15(ey b)-.1 H(indings from).15 E F2(\214lename)2.5 E F0(.)A
-F1<ad71>144 650.4 Q F2(function)2.5 E F0(Query about which k)180 662.4 Q
+(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 674.4 Q F2(function)
-2.5 E F0(Unbind all k)180 686.4 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 698.4 Q
-F2 -.1(ke)2.5 G(yseq)-.2 E F0(Remo)180 710.4 Q .3 -.15(ve a)-.15 H .3
+(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(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(57)190.395 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/F1 10/Times-Bold@0
-SF<ad78>144 84 Q/F2 10/Times-Italic@0 SF -.1(ke)2.5 G(yseq)-.2 E F1(:)A
-F2(shell\255command)A F0(Cause)180 96 Q F2(shell\255command)4.325 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 108 Q F0 1.765(is e)
+(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 120 S(adline).18 E
+(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 132 R -.15(ve)
+(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 144 Q -.15(ve)-.25 G(ly).15 E 5.701(.I)-.65 G 3.201(ft)-5.701 G
-.701(he e)-3.201 F -.15(xe)-.15 G .701(cuted command changes the v).15 F
-.702(alue of an)-.25 F 3.202(yo)-.15 G(f)-3.202 E F3(READLINE_LINE)3.202
-E/F4 9/Times-Roman@0 SF(,)A F3(READ-)2.952 E(LINE_POINT)180 156 Q F4(,)A
-F0(or)3.581 E F3(READLINE_MARK)3.831 E F4(,)A F0 1.331(those ne)3.581 F
-3.831(wv)-.25 G 1.33(alues will be re\215ected in the editing)-4.081 F
-(state.)180 168 Q F1<ad58>144 180 Q F0 .829(List all k)180 180 R 1.129
--.15(ey s)-.1 H .829
+(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 192 Q(The return v)
-144 208.8 Q(alue is 0 unless an unrecognized option is gi)-.25 E -.15
+.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 225.6 Q(eak)-.18 E F0([)2.5 E F2(n)A F0(])A .055
-(Exit from within a)144 237.6 R F1 -.25(fo)2.555 G(r).25 E F0(,)A F1
-(while)2.555 E F0(,)A F1(until)2.555 E F0 2.555(,o)C(r)-2.555 E F1
+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.414 E F0 .054(must be)2.794 F/F5 10/Symbol SF<b3>2.554
-E F0(1.)2.554 E(If)144 249.6 Q F2(n)3.074 E F0 .215(is greater than the\
- number of enclosing loops, all enclosing loops are e)2.954 F 2.715
-(xited. The)-.15 F .215(return v)2.715 F(alue)-.25 E(is 0 unless)144
-261.6 Q F2(n)2.5 E F0(is not greater than or equal to 1.)2.5 E F1 -.2
-(bu)108 278.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 290.4 Q .771
-(ecute the speci\214ed shell b)-.15 F .771(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 .77(xit status.)-.15 F .77(This is useful)5.77 F .615
+(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
-302.4 R .616(uiltin, retaining the functionality of)-.2 F .57(the b)144
-314.4 R .57(uiltin within the function.)-.2 F(The)5.57 E F1(cd)3.07 E F0
+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 326.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 343.2 Q F0([)2.5 E F2 -.2(ex)C(pr)
-.2 E F0(])A .253(Returns the conte)144 355.2 R .254(xt of an)-.15 F
+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 F1(.)2.754 E F0(or)2.754 E F1(sour)144 367.2 Q
-(ce)-.18 E F0 -.2(bu)2.825 G 2.825(iltins\). W).2 F(ithout)-.4 E F2 -.2
-(ex)2.825 G(pr).2 E F0(,)A F1(caller)2.825 E F0 .324
+.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
-.253(subroutine call.)144 379.2 R .253(If a non-ne)5.253 F -.05(ga)-.15
-G(ti).05 E .553 -.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 .254
-(displays the line number)2.754 F 2.754(,s)-.4 G(ub-)-2.754 E 1.327(rou\
+.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 391.2 R -.15(xe)-.15 G 1.327(cution call stack.).15 F(This e)
-144 403.2 Q(xtra information may be used, for e)-.15 E .001
-(xample, to print a stack trace.)-.15 F .001(The current frame is frame)
-5.001 F 3.02(0. The)144 415.2 R .52(return v)3.02 F .52
-(alue is 0 unless the shell is not e)-.25 F -.15(xe)-.15 G .519
-(cuting a subroutine call or).15 F F2 -.2(ex)3.019 G(pr).2 E F0 .519
-(does not corre-)3.019 F(spond to a v)144 427.2 Q
-(alid position in the call stack.)-.25 E F1(cd)108 444 Q F0([)2.5 E F1
-<ad4c>A F0(|[)A F1<ad50>A F0([)2.5 E F1<ad65>A F0(]] [\255@]] [)A F2
-(dir)A F0(])A .321(Change the current directory to)144 456 R F2(dir)
-2.821 E F0 5.321(.i)C(f)-5.321 E F2(dir)2.821 E F0 .322
-(is not supplied, the v)2.821 F .322(alue of the)-.25 F F3(HOME)2.822 E
-F0 .322(shell v)2.572 F .322(ariable is)-.25 F 1.036(the def)144 468 R
-3.536(ault. An)-.1 F 3.536(ya)-.15 G 1.035(dditional ar)-3.536 F 1.035
-(guments follo)-.18 F(wing)-.25 E F2(dir)3.535 E F0 1.035(are ignored.)
-3.535 F 1.035(The v)6.035 F(ariable)-.25 E F3(CDP)3.535 E -.855(AT)-.666
-G(H).855 E F0(de\214nes)3.285 E .826
-(the search path for the directory containing)144 480 R F2(dir)3.676 E
-F0 3.326(:e).73 G .826(ach directory name in)-3.326 F F3(CDP)3.326 E
--.855(AT)-.666 G(H).855 E F0 .827(is searched for)3.077 F F2(dir)144 492
-Q F0 5.665(.A)C(lternati)-5.665 E .965 -.15(ve d)-.25 H .665
-(irectory names in).15 F F3(CDP)3.165 E -.855(AT)-.666 G(H).855 E F0
-.665(are separated by a colon \(:\).)2.915 F 3.165(An)5.665 G .664
-(ull directory name)-3.165 F(in)144 504 Q F3(CDP)3.101 E -.855(AT)-.666
-G(H).855 E F0 .601(is the same as the current directory)2.851 F 3.102
-(,i)-.65 G .602(.e., `)-3.102 F(`)-.74 E F1(.)A F0 -.74('')C 5.602(.I)
-.74 G(f)-5.602 E F2(dir)3.452 E F0(be)3.832 E .602
-(gins with a slash \(/\), then)-.15 F F3(CD-)3.102 E -.666(PA)144 516 S
-(TH)-.189 E F0 1.003(is not used.)3.254 F(The)6.003 E F1<ad50>3.503 E F0
-1.003(option causes)3.503 F F1(cd)3.503 E F0 1.003(to use the ph)3.503 F
-1.003(ysical directory structure by resolving)-.05 F .123
-(symbolic links while tra)144 528 R -.15(ve)-.2 G(rsing).15 E F2(dir)
-2.623 E F0 .123(and before processing instances of)2.623 F F2(..)2.623 E
-F0(in)2.623 E F2(dir)2.623 E F0 .123(\(see also the)2.623 F F1<ad50>
-2.623 E F0(op-)2.623 E .43(tion to the)144 540 R F1(set)2.93 E F0 -.2
-(bu)2.93 G .43(iltin command\); the).2 F F1<ad4c>2.929 E F0 .429
-(option forces symbolic links to be follo)2.929 F .429(wed by resolving)
--.25 F .472(the link after processing instances of)144 552 R F2(..)2.972
-E F0(in)2.972 E F2(dir)2.973 E F0 5.473(.I)C(f)-5.473 E F2(..)2.973 E F0
-.473(appears in)2.973 F F2(dir)2.973 E F0 2.973(,i)C 2.973(ti)-2.973 G
-2.973(sp)-2.973 G .473(rocessed by remo)-2.973 F .473(ving the)-.15 F
-.948(immediately pre)144 564 R .948(vious pathname component from)-.25 F
-F2(dir)3.448 E F0 3.448(,b)C .948(ack to a slash or the be)-3.448 F .948
-(ginning of)-.15 F F2(dir)3.448 E F0 5.948(.I)C(f)-5.948 E(the)144 576 Q
-F1<ad65>2.868 E F0 .368(option is supplied with)2.868 F F1<ad50>2.868 E
-F0 2.868(,a)C .368(nd the current w)-2.868 F .368
-(orking directory cannot be successfully deter)-.1 F(-)-.2 E .612
-(mined after a successful directory change,)144 588 R F1(cd)3.112 E F0
-.612(will return an unsuccessful status.)3.112 F .612(On systems that)
-5.612 F .353(support it, the)144 600 R F1<ad40>2.853 E F0 .354
-(option presents the e)2.853 F .354(xtended attrib)-.15 F .354
-(utes associated with a \214le as a directory)-.2 F 5.354(.A)-.65 G(n)
--5.354 E(ar)144 612 Q .072(gument of)-.18 F F1<ad>2.572 E F0 .072
-(is con)2.572 F -.15(ve)-.4 G .072(rted to).15 F F3($OLDPWD)2.572 E F0
-.072(before the directory change is attempted.)2.322 F .072
-(If a non-empty)5.072 F .054(directory name from)144 624 R F3(CDP)2.554
-E -.855(AT)-.666 G(H).855 E F0 .054(is used, or if)2.304 F F1<ad>2.555 E
-F0 .055(is the \214rst ar)2.555 F .055
-(gument, and the directory change is suc-)-.18 F .168
-(cessful, the absolute pathname of the ne)144 636 R 2.668(ww)-.25 G .168
-(orking directory is written to the standard output.)-2.768 F(The)5.168
-E(return v)144 648 Q(alue is true if the directory w)-.25 E
-(as successfully changed; f)-.1 E(alse otherwise.)-.1 E F1(command)108
-664.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 676.8 Q F2(command)2.764 E F0(with)
-3.334 E F2(ar)2.894 E(gs)-.37 E F0 .065
-(suppressing the normal shell function lookup.)2.834 F .065(Only b)5.065
-F .065(uiltin commands or)-.2 F .502(commands found in the)144 688.8 R
-F3 -.666(PA)3.002 G(TH)-.189 E F0 .502(are e)2.752 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 .501(n, the search for).15 F F2(command)3.201 E
-F0(is)3.771 E .399(performed using a def)144 700.8 R .399(ault v)-.1 F
-.399(alue for)-.25 F F3 -.666(PA)2.899 G(TH)-.189 E F0 .4
+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.4 E .175(either the)144 712.8 R F1<ad56>2.675 E F0(or)2.675 E F1<ad76>
-2.675 E F0 .175(option is supplied, a description of)2.675 F F2(command)
-2.875 E F0 .174(is printed.)3.445 F(The)5.174 E F1<ad76>2.674 E F0 .174
-(option causes)2.674 F 3.317(as)144 724.8 S .817(ingle w)-3.317 F .817
-(ord indicating the command or \214lename used to in)-.1 F -.2(vo)-.4 G
--.1(ke).2 G F2(command)3.618 E F0 .818(to be displayed; the)4.088 F
-(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(58)190.395 E 0 Cg EP
-%%Page: 59 59
+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/F1 10/Times-Bold@0
-SF<ad56>144 84 Q F0 .25(option produces a more v)2.75 F .25
-(erbose description.)-.15 F .249(If the)5.25 F F1<ad56>2.749 E F0(or)
-2.749 E F1<ad76>2.749 E F0 .249(option is supplied, the e)2.749 F .249
-(xit status)-.15 F 1.004(is 0 if)144 96 R/F2 10/Times-Italic@0 SF
-(command)3.704 E F0 -.1(wa)4.274 G 3.504(sf).1 G 1.005
-(ound, and 1 if not.)-3.504 F 1.005
-(If neither option is supplied and an error occurred or)6.005 F F2
-(command)144.2 108 Q F0 1.599(cannot be found, the e)4.869 F 1.599
-(xit status is 127.)-.15 F 1.599(Otherwise, the e)6.599 F 1.598
-(xit status of the)-.15 F F1(command)4.098 E F0 -.2(bu)144 120 S
-(iltin is the e).2 E(xit status of)-.15 E F2(command)2.7 E F0(.).77 E F1
-(compgen)108 136.8 Q F0([)2.5 E F2(option)A F0 2.5(][)C F2(wor)-2.5 E(d)
--.37 E F0(])A .012(Generate possible completion matches for)144 148.8 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.513(yo)-.15 G(ption)-2.513 E .982
-(accepted by the)144 160.8 R F1(complete)3.482 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 .981(nd write the matches to the)
--3.481 F .13(standard output.)144 172.8 R .13(When using the)5.13 F F1
-<ad46>2.63 E F0(or)2.63 E F1<ad43>2.631 E F0 .131(options, the v)2.631 F
-.131(arious shell v)-.25 F .131(ariables set by the program-)-.25 F
-(mable completion f)144 184.8 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 208.8 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
-220.8 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 232.8 Q F2(wor)2.5 E(d)-.37 E F0
-(will be displayed.)2.5 E(The return v)144 256.8 Q
+(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 F1
-(complete)108 273.6 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 285.6 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 297.6 Q F0([)2.5 E F1(\255DEI)
-A F0 2.5(][)C F2(name)-2.5 E F0(...])2.5 E .634(Specify ho)144 309.6 R
-3.134(wa)-.25 G -.18(rg)-3.134 G .634(uments to each).18 F F2(name)3.134
-E F0 .634(should be completed.)3.134 F .633(If the)5.634 F F1<ad70>3.133
-E F0 .633(option is supplied, or if no)3.133 F .139
-(options are supplied, e)144 321.6 R .139
-(xisting completion speci\214cations are printed in a w)-.15 F .14
-(ay that allo)-.1 F .14(ws them to be)-.25 F .31(reused as input.)144
-333.6 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.207
-(are supplied, all completion speci\214cations.)144 345.6 R(The)6.207 E
-F1<ad44>3.707 E F0 1.208(option indicates that other supplied options)
-3.708 F .5(and actions should apply to the `)144 357.6 R(`def)-.74 E
+(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
-369.6 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
+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 381.6 R
+(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 .447(pletion attempted on a blank line.)144 393.6 R(The)5.447 E
-F1<ad49>2.947 E F0 .448
+-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 405.6 R
-.123(ord on the line, or after a command de-)-.1 F 1.02(limiter such as)
-144 417.6 R F1(;)3.52 E F0(or)3.52 E F1(|)3.52 E F0 3.52(,w)C 1.021
-(hich is usually command name completion.)-3.52 F 1.021
-(If multiple options are sup-)6.021 F .708(plied, the)144 429.6 R F1
-<ad44>3.208 E F0 .708(option tak)3.208 F .708(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 .707(recedence o)-3.208 F -.15(ve)-.15 G(r).15 E F1
-<ad49>3.207 E F0 5.707(.I)C 3.207(fa)-5.707 G 1.007 -.15(ny o)-3.207 H
-(f).15 E F1<ad44>3.207 E F0(,)A F1<ad45>144 441.6 Q F0 2.603(,o)C(r)
--2.603 E F1<ad49>2.603 E F0 .103(are supplied, an)2.603 F 2.603(yo)-.15
-G(ther)-2.603 E F2(name)2.603 E F0(ar)2.603 E .103
+(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 453.6 Q .153
+(case speci\214ed by the option.)144 304.8 Q .152
 (The process of applying these completion speci\214cations when w)144
-477.6 R .152(ord completion is attempted is de-)-.1 F(scribed abo)144
-489.6 Q .3 -.15(ve u)-.15 H(nder).15 E F1(Pr)2.5 E
-(ogrammable Completion)-.18 E F0(.)A .555
-(Other options, if speci\214ed, ha)144 513.6 R .855 -.15(ve t)-.2 H .555
+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 F1<ad47>3.056 E F0(,)A F1<ad57>3.056 E F0 3.056
-(,a)C(nd)-3.056 E F1<ad58>3.056 E F0 .723(options \(and, if necessary)
-144 525.6 R 3.223(,t)-.65 G(he)-3.223 E F1<ad50>3.223 E F0(and)3.223 E
-F1<ad53>3.223 E F0 .722
-(options\) should be quoted to protect them from e)3.223 F(xpan-)-.15 E
-(sion before the)144 537.6 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 549.6 Q
-F2(comp-option)2.5 E F0(The)184 561.6 Q F2(comp-option)2.79 E F0 .291
+(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 573.6 Q F2
-(comp-option)5 E F0(may be one of:)2.5 E F1(bashdefault)184 585.6 Q F0
-.281(Perform the rest of the def)224 597.6 R(ault)-.1 E F1(bash)2.781 E
+(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
-609.6 Q F1(default)184 621.6 Q F0 2.875(Use readline')224 621.6 R 5.375
-(sd)-.55 G(ef)-5.375 E 2.876
+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 633.6 Q F1(dir)184 645.6 Q(names)-.15 E F0(Perform directory name c\
-ompletion if the compspec generates no matches.)224 657.6 Q F1
-(\214lenames)184 669.6 Q F0 -.7(Te)224 681.6 S .137(ll readline that th\
-e compspec generates \214lenames, so it can perform an).7 F 2.636<798c>
--.15 G(le-)-2.636 E .134(name\255speci\214c processing \(lik)224 693.6 R
+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
-705.6 R .45(Intended to be used with shell)5.45 F(functions.)224 717.6 Q
-(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(59)190.395 E 0 Cg EP
-%%Page: 60 60
+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(noquote)184 84 Q F0 -.7(Te)224 84 S .814
-(ll readline not to quote the completed w).7 F .814(ords if the)-.1 F
-3.314(ya)-.15 G .815(re \214lenames \(quoting)-3.314 F
-(\214lenames is the def)224 96 Q(ault\).)-.1 E F1(nosort)184 108 Q F0
--.7(Te)224 108 S(ll readline not to sort the list of possible completio\
-ns alphabetically).7 E(.)-.65 E F1(nospace)184 120 Q F0 -.7(Te)224 120 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 132 Q F1
-(plusdirs)184 144 Q F0 1.985(After an)224 144 R 4.485(ym)-.15 G 1.985
-(atches de\214ned by the compspec are generated, directory name)-4.485 F
-.584(completion is attempted and an)224 156 R 3.084(ym)-.15 G .584
-(atches are added to the results of the other)-3.084 F(actions.)224 168
-Q F1<ad41>144 180 Q/F2 10/Times-Italic@0 SF(action)2.5 E F0(The)184 192
-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
-204 Q F0(Alias names.)224 204 Q(May also be speci\214ed as)5 E F1<ad61>
-2.5 E F0(.)A F1(arrayv)184 216 Q(ar)-.1 E F0(Array v)224 228 Q
-(ariable names.)-.25 E F1(binding)184 240 Q(Readline)224 240 Q F0 -.1
-(ke)2.5 G 2.5(yb)-.05 G(inding names.)-2.5 E F1 -.2(bu)184 252 S(iltin)
-.2 E F0(Names of shell b)224 252 Q(uiltin commands.)-.2 E
-(May also be speci\214ed as)5 E F1<ad62>2.5 E F0(.)A F1(command)184 264
-Q F0(Command names.)224 276 Q(May also be speci\214ed as)5 E F1<ad63>2.5
-E F0(.)A F1(dir)184 288 Q(ectory)-.18 E F0(Directory names.)224 300 Q
-(May also be speci\214ed as)5 E F1<ad64>2.5 E F0(.)A F1(disabled)184 312
-Q F0(Names of disabled shell b)224 324 Q(uiltins.)-.2 E F1(enabled)184
-336 Q F0(Names of enabled shell b)224 336 Q(uiltins.)-.2 E F1(export)184
-348 Q F0(Names of e)224 348 Q(xported shell v)-.15 E 2.5(ariables. May)
+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
-360 Q F0(File names.)224 360 Q(May also be speci\214ed as)5 E F1<ad66>
-2.5 E F0(.)A F1(function)184 372 Q F0(Names of shell functions.)224 384
-Q F1(gr)184 396 Q(oup)-.18 E F0(Group names.)224 396 Q
+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
-408 Q F0(Help topics as accepted by the)224 420 Q F1(help)2.5 E F0 -.2
-(bu)2.5 G(iltin.).2 E F1(hostname)184 432 Q F0(Hostnames, as tak)224 444
-Q(en from the \214le speci\214ed by the)-.1 E/F3 9/Times-Bold@0 SF
-(HOSTFILE)2.5 E F0(shell v)2.25 E(ariable.)-.25 E F1(job)184 456 Q F0
-(Job names, if job control is acti)224 456 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 468 S
-(yw).1 E(ord)-.1 E F0(Shell reserv)224 480 Q(ed w)-.15 E 2.5(ords. May)
+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
-492 Q F0(Names of running jobs, if job control is acti)224 492 Q -.15
-(ve)-.25 G(.).15 E F1(ser)184 504 Q(vice)-.1 E F0(Service names.)224 504
-Q(May also be speci\214ed as)5 E F1<ad73>2.5 E F0(.)A F1(setopt)184 516
-Q F0 -1.11(Va)224 516 S(lid ar)1.11 E(guments for the)-.18 E F1<ad6f>2.5
+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 528 Q F0(Shell option names as accepted by the)224 528 Q F1
-(shopt)2.5 E F0 -.2(bu)2.5 G(iltin.).2 E F1(signal)184 540 Q F0
-(Signal names.)224 540 Q F1(stopped)184 552 Q F0
-(Names of stopped jobs, if job control is acti)224 552 Q -.15(ve)-.25 G
-(.).15 E F1(user)184 564 Q F0(User names.)224 564 Q
-(May also be speci\214ed as)5 E F1<ad75>2.5 E F0(.)A F1 -.1(va)184 576 S
-(riable).1 E F0(Names of all shell v)224 576 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 588 Q F2
-(command)2.5 E(command)184 600 Q F0 1.055(is e)3.555 F -.15(xe)-.15 G
-1.055(cuted in a subshell en).15 F 1.056
-(vironment, and its output is used as the possible)-.4 F(completions.)
-184 612 Q F1<ad46>144 624 Q F2(function)2.5 E F0 .114
-(The shell function)184 636 R F2(function)2.614 E F0 .114(is e)2.614 F
+(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 .113(the func-)2.613 F .816(tion is e)184 648 R
--.15(xe)-.15 G .816(cuted, the \214rst ar).15 F .816(gument \()-.18 F F1
-($1)A F0 3.316(\)i)C 3.316(st)-3.316 G .817
+(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 660 R 1.407(gument \()-.18 F F1
+(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 .103(third ar)184 672 R .103
-(gument \()-.18 F F1($3)A F0 2.603(\)i)C 2.603(st)-2.603 G .103(he w)
--2.603 F .104(ord preceding the w)-.1 F .104
-(ord being completed on the current com-)-.1 F .102(mand line.)184 684 R
-.102(When it \214nishes, the possible completions are retrie)5.102 F
--.15(ve)-.25 G 2.601(df).15 G .101(rom the v)-2.601 F .101(alue of the)
--.25 F F3(COMPREPL)184 696 Q(Y)-.828 E F0(array v)2.25 E(ariable.)-.25 E
-(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(60)190.395 E 0 Cg EP
-%%Page: 61 61
-%%BeginPageSetup
-BP
-%%EndPageSetup
-/F0 10/Times-Roman@0 SF -.35(BA)72 48 S 137.14(SH\(1\) General).35 F
-(Commands Manual)2.5 E -.35(BA)139.64 G(SH\(1\)).35 E/F1 10/Times-Bold@0
-SF<ad47>144 84 Q/F2 10/Times-Italic@0 SF(globpat)2.5 E F0 1.007
-(The pathname e)184 96 R 1.007(xpansion pattern)-.15 F F2(globpat)3.507
-E F0 1.007(is e)3.507 F 1.008(xpanded to generate the possible comple-)
--.15 F(tions.)184 108 Q F1<ad50>144 120 Q F2(pr)2.5 E(e\214x)-.37 E(pr)
-184 132 Q(e\214x)-.37 E F0 .535(is added at the be)3.035 F .534
+(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 144 Q F1<ad53>144 156 Q F2(suf)2.5 E
-<8c78>-.18 E(suf)184 156 Q<8c78>-.18 E F0
+-.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 168 Q F2(wor)2.5 E
-(dlist)-.37 E F0(The)184 180 Q F2(wor)3.639 E(dlist)-.37 E F0 1.14
-(is split using the characters in the)3.639 F/F3 9/Times-Bold@0 SF(IFS)
-3.64 E F0 1.14(special v)3.39 F 1.14(ariable as delimiters, and)-.25 F
-.981(each resultant w)184 192 R .981(ord is e)-.1 F 3.481
-(xpanded. Shell)-.15 F .981(quoting is honored within)3.481 F F2(wor)
-3.481 E(dlist)-.37 E F0 3.48(,i)C 3.48(no)-3.48 G .98(rder to)-3.48 F
-(pro)184 204 Q .765(vide a mechanism for the w)-.15 F .766
+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 216 S 1.965(lue of).25 F F3(IFS)4.465 E/F4 9/Times-Roman@0 SF(.)
+(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.465 F(match the w)184 228 Q(ord being completed.)-.1 E F1<ad58>144 240
-Q F2(\214lterpat)2.5 E(\214lterpat)184 252 Q F0 .455
-(is a pattern as used for pathname e)2.955 F 2.956(xpansion. It)-.15 F
-.456(is applied to the list of possible)2.956 F 1.596
-(completions generated by the preceding options and ar)184 264 R 1.596
-(guments, and each completion)-.18 F(matching)184 276 Q F2(\214lterpat)
-3.204 E F0 .704(is remo)3.204 F -.15(ve)-.15 G 3.204(df).15 G .704
-(rom the list.)-3.204 F 3.204(Al)5.704 G(eading)-3.204 E F1(!)3.204 E F0
-(in)3.204 E F2(\214lterpat)3.205 E F0(ne)3.205 E -.05(ga)-.15 G .705
-(tes the pattern;).05 F(in this case, an)184 288 Q 2.5(yc)-.15 G
+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 .467(The return v)144 304.8 R .467
+-.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.966 E F0
-(or)2.966 E F1<ad72>2.966 E F0 .466(is sup-)2.966 F 1.361
-(plied without a)144 316.8 R F2(name)3.861 E F0(ar)3.861 E 1.361
-(gument, an attempt is made to remo)-.18 F 1.662 -.15(ve a c)-.15 H
-1.362(ompletion speci\214cation for a).15 F F2(name)144 328.8 Q F0
+(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 345.6 Q F0([)2.5 E F1<ad6f>A F2(option)2.5 E F0 2.5(][)C
+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 357.6
+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 .725
-(completion if no)144 369.6 R F2(name)3.225 E F0 3.225(sa)C .725
-(re supplied.)-3.225 F .725(If no)5.725 F F2(option)3.225 E F0 3.225(sa)
-C .725(re gi)-3.225 F -.15(ve)-.25 G .726
-(n, display the completion options for).15 F(each)144 381.6 Q F2(name)
-3.224 E F0 .724(or the current completion.)3.224 F .724(The possible v)
+.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 .723(alid for the)-.25 F F1(com-)3.223 E(plete)144 393.6 Q F0 -.2(bu)
-2.677 G .177(iltin described abo).2 F -.15(ve)-.15 G 5.178(.T).15 G(he)
+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.228(the `)144 405.6 R(`def)-.74 E(ault')-.1 E 3.728('c)-.74 G 1.228(o\
+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.728 F 2.038(completion has pre)144 417.6 R 2.038
-(viously been de\214ned.)-.25 F(The)7.038 E F1<ad45>4.538 E F0 2.039
-(option indicates that other supplied options)4.538 F 1.539
-(should apply to `)144 429.6 R(`empty')-.74 E 4.039('c)-.74 G 1.538
+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.039 F(The)144 441.6 Q F1<ad49>3.02 E F0 .52(option indicates that ot\
+-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 .868(assignment w)144 453.6 R .868
+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.367(,w)C .867(hich is usually com-)
--3.367 F(mand name completion.)144 465.6 Q .431(The return v)144 489.6 R
+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 501.6 Q F2(name)2.5 E F0
+(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 518.4 Q F0([)
-2.5 E F2(n)A F0(])A .851(Resume the ne)144 530.4 R .851
-(xt iteration of the enclosing)-.15 F F1 -.25(fo)3.351 G(r).25 E F0(,)A
+(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.35 E F0 3.35(loop. If)3.35 F F2(n)3.71 E F0 .85
-(is speci\214ed, re-)3.59 F .203(sume at the)144 542.4 R F2(n)2.703 E F0
-.203(th enclosing loop.)B F2(n)5.563 E F0 .203(must be)2.943 F/F5 10
-/Symbol SF<b3>2.703 E F0 2.704(1. If)2.703 F F2(n)3.064 E F0 .204
-(is greater than the number of enclosing loops,)2.944 F 1.184
-(the last enclosing loop \(the `)144 554.4 R(`top-le)-.74 E -.15(ve)-.25
-G(l').15 E 3.684('l)-.74 G 1.184(oop\) is resumed.)-3.684 F 1.183
-(The return v)6.184 F 1.183(alue is 0 unless)-.25 F F2(n)3.683 E F0
-1.183(is not)3.683 F(greater than or equal to 1.)144 566.4 Q F1(declar)
-108 583.2 Q(e)-.18 E F0([)2.5 E F1(\255aAfFgiIlnrtux)A F0 2.5(][)C 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 595.2 Q F0([)2.5 E F1(\255aAfFgiIlnrtux)A F0
+(..])-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.264(Declare v)144 607.2 R 1.264
-(ariables and/or gi)-.25 F 1.564 -.15(ve t)-.25 H 1.264(hem attrib).15 F
+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.765(nt).15 G 1.265(hen display the v)
--3.765 F 1.265(alues of)-.25 F -.25(va)144 619.2 S 3.46(riables. The).25
+(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 631.2 Q F2
-(name)2.774 E F0(ar)2.774 E .274
+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 .275(re ignored.)-2.775 F(When)
-5.275 E F1<ad70>2.775 E F0 .275(is supplied)2.775 F(without)144 643.2 Q
-F2(name)3.79 E F0(ar)3.79 E 1.29(guments, it will display the attrib)
--.18 F 1.289(utes and v)-.2 F 1.289(alues of all v)-.25 F 1.289
-(ariables ha)-.25 F 1.289(ving the at-)-.2 F(trib)144 655.2 Q .38
+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.107(display the attrib)144
-667.2 R 1.107(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.106
-(option will restrict the display to)3.606 F .299(shell functions.)144
-679.2 R(The)5.299 E F1<ad46>2.799 E F0 .299(option inhibits the display\
- of function de\214nitions; only the function name)2.799 F 1.54
-(and attrib)144 691.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 703.2 R F2(name)3.148 E F0 .648
+(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 .649(option implies)3.149 F F1<ad66>144 715.2 Q F0 5.837(.T)C(he)
--5.837 E F1<ad67>3.337 E F0 .837(option forces v)3.337 F .836
+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.336(nw).15 G(hen)-3.336 E F1(de-)3.336 E(clar)144 727.2 Q
-(e)-.18 E F0 .818(is e)3.318 F -.15(xe)-.15 G .818
+(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.819 E F1<ad49>3.319 E
-F0 .819(option causes local)3.319 F(GNU Bash 5.1)72 768 Q
-(2020 October 29)141.235 E(61)190.395 E 0 Cg EP
-%%Page: 62 62
+(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 -.25(va)144 84 S
-.694(riables to inherit the attrib).25 F .694(utes \(e)-.2 F .694
-(xcept the)-.15 F/F1 10/Times-Italic@0 SF(namer)3.194 E(ef)-.37 E F0
-(attrib)3.194 E .693(ute\) and v)-.2 F .693(alue of an)-.25 F 3.193(ye)
--.15 G .693(xisting v)-3.343 F(ariable)-.25 E .82(with the same)144 96 R
-F1(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 .38(initially unset.)144 108 R .38
-(The follo)5.38 F .379(wing options can be used to restrict output to v)
--.25 F .379(ariables with the speci\214ed)-.25 F(attrib)144 120 Q
-(ute or to gi)-.2 E .3 -.15(ve v)-.25 H(ariables attrib)-.1 E(utes:)-.2
-E/F2 10/Times-Bold@0 SF<ad61>144 132 Q F0(Each)180 132 Q F1(name)2.5 E
-F0(is an inde)2.5 E -.15(xe)-.15 G 2.5(da).15 G(rray v)-2.5 E
-(ariable \(see)-.25 E F2(Arrays)2.5 E F0(abo)2.5 E -.15(ve)-.15 G(\).)
-.15 E F2<ad41>144 144 Q F0(Each)180 144 Q F1(name)2.5 E F0
-(is an associati)2.5 E .3 -.15(ve a)-.25 H(rray v).15 E(ariable \(see)
--.25 E F2(Arrays)2.5 E F0(abo)2.5 E -.15(ve)-.15 G(\).).15 E F2<ad66>144
-156 Q F0(Use function names only)180 156 Q(.)-.65 E F2<ad69>144 168 Q F0
-.557(The v)180 168 R .558(ariable is treated as an inte)-.25 F .558
-(ger; arithmetic e)-.15 F -.25(va)-.25 G .558(luation \(see).25 F/F3 9
-/Times-Bold@0 SF .558(ARITHMETIC EV)3.058 F(ALU)-1.215 E(A-)-.54 E(TION)
-180 180 Q F0(abo)2.25 E -.15(ve)-.15 G 2.5(\)i).15 G 2.5(sp)-2.5 G
-(erformed when the v)-2.5 E(ariable is assigned a v)-.25 E(alue.)-.25 E
-F2<ad6c>144 192 Q F0 .91(When the v)180 192 R .909
-(ariable is assigned a v)-.25 F .909(alue, all upper)-.25 F .909
-(-case characters are con)-.2 F -.15(ve)-.4 G .909(rted to lo).15 F(wer)
--.25 E(-)-.2 E 2.5(case. The)180 204 R(upper)2.5 E(-case attrib)-.2 E
-(ute is disabled.)-.2 E F2<ad6e>144 216 Q F0(Gi)180 216 Q 1.619 -.15
-(ve e)-.25 H(ach).15 E F1(name)3.819 E F0(the)3.819 E F1(namer)3.819 E
-(ef)-.37 E F0(attrib)3.819 E 1.319
-(ute, making it a name reference to another v)-.2 F(ariable.)-.25 E .478
-(That other v)180 228 R .478(ariable is de\214ned by the v)-.25 F .478
-(alue of)-.25 F F1(name)2.978 E F0 5.478(.A)C .478
-(ll references, assignments, and at-)-5.478 F(trib)180 240 Q .781
-(ute modi\214cations to)-.2 F F1(name)3.281 E F0 3.281(,e)C .782
-(xcept those using or changing the)-3.431 F F2<ad6e>3.282 E F0(attrib)
-3.282 E .782(ute itself, are)-.2 F .809(performed on the v)180 252 R
-.809(ariable referenced by)-.25 F F1(name)3.308 E F0 1.908 -.55('s v)D
-3.308(alue. The).3 F .808(nameref attrib)3.308 F .808(ute cannot be)-.2
-F(applied to array v)180 264 Q(ariables.)-.25 E F2<ad72>144 276 Q F0
-(Mak)180 276 Q(e)-.1 E F1(name)3.654 E F0 3.654(sr)C(eadonly)-3.654 E
-6.154(.T)-.65 G 1.154(hese names cannot then be assigned v)-6.154 F
-1.155(alues by subsequent as-)-.25 F(signment statements or unset.)180
-288 Q F2<ad74>144 300 Q F0(Gi)180 300 Q .73 -.15(ve e)-.25 H(ach).15 E
-F1(name)2.93 E F0(the)2.929 E F1(tr)2.929 E(ace)-.15 E F0(attrib)2.929 E
+(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.929 E F2(RETURN)2.929 E F0
-(traps from the calling shell.)180 312 Q(The trace attrib)5 E
-(ute has no special meaning for v)-.2 E(ariables.)-.25 E F2<ad75>144 324
-Q F0 .909(When the v)180 324 R .909(ariable is assigned a v)-.25 F .909
+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 .91(rted to upper).15 F(-)-.2 E 2.5(case. The)180 336 R(lo)2.5
-E(wer)-.25 E(-case attrib)-.2 E(ute is disabled.)-.2 E F2<ad78>144 348 Q
-F0(Mark)180 348 Q F1(name)2.5 E F0 2.5(sf)C(or e)-2.5 E
-(xport to subsequent commands via the en)-.15 E(vironment.)-.4 E .144
-(Using `+' instead of `\255' turns of)144 364.8 R 2.643(ft)-.25 G .143
-(he attrib)-2.643 F .143(ute instead, with the e)-.2 F .143
-(xceptions that)-.15 F F2(+a)2.643 E F0(and)2.643 E F2(+A)2.643 E F0
-.143(may not)2.643 F .578(be used to destro)144 376.8 R 3.079(ya)-.1 G
+(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 .579(used in a)3.079 F(function,)144 388.8 Q F2
-(declar)3.544 E(e)-.18 E F0(and)3.544 E F2(typeset)3.544 E F0(mak)3.544
-E 3.544(ee)-.1 G(ach)-3.544 E F1(name)3.543 E F0 1.043
-(local, as with the)3.543 F F2(local)3.543 E F0 1.043
-(command, unless the)3.543 F F2<ad67>3.543 E F0 1.205
-(option is supplied.)144 400.8 R 1.205(If a v)6.205 F 1.205
+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 412.8 Q F0 5.218(.W)C .218
-(hen using)-5.218 F F2<ad61>2.718 E F0(or)2.718 E F2<ad41>2.718 E F0
-.217(and the compound assignment syntax to create array v)2.717 F .217
-(ariables, addi-)-.25 F .882(tional attrib)144 424.8 R .882
+(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 436.8 Q -.25(va)-.4 G .366(lid optio\
+(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
-/F4 10/Courier@0 SF .365(\255f foo=bar)2.865 F F0 2.865(,a)C 2.865(na)
--2.865 G(t-)-2.865 E .548(tempt is made to assign a v)144 448.8 R .548
-(alue to a readonly v)-.25 F .549
-(ariable, an attempt is made to assign a v)-.25 F .549(alue to an)-.25 F
-1.749(array v)144 460.8 R 1.749
+/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.248 E F0(abo)4.248 E -.15(ve)-.15 G 1.748(\), one of the).15 F
-F1(names)144 472.8 Q F0 .359(is not a v)2.858 F .359(alid shell v)-.25 F
+(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.213(only v)144 484.8 R 1.213
+.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.212(ariable, or an attempt is)
--.25 F(made to display a non-e)144 496.8 Q(xistent function with)-.15 E
-F2<ad66>2.5 E F0(.)A F2(dirs [\255clpv] [+)108 513.6 Q F1(n)A F2 2.5(][)
-C<ad>-2.5 E F1(n)A F2(])A F0 -.4(Wi)144 525.6 S .328
+(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 .329(The def)5.329 F .329(ault display is on a)-.1 F 1.238
-(single line with directory names separated by spaces.)144 537.6 R 1.238
-(Directories are added to the list with the)6.238 F F2(pushd)144 549.6 Q
-F0 .927(command; the)3.427 F F2(popd)3.428 E F0 .928(command remo)3.428
+.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 561.6 S
-(ys the \214rst directory in the stack.).1 E F2<ad63>144 573.6 Q F0
-(Clears the directory stack by deleting all of the entries.)180 573.6 Q
-F2<ad6c>144 585.6 Q F0 .882
-(Produces a listing using full pathnames; the def)180 585.6 R .881
+(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
-597.6 Q(.)-.65 E F2<ad70>144 609.6 Q F0
-(Print the directory stack with one entry per line.)180 609.6 Q F2<ad76>
-144 621.6 Q F0 .272(Print the directory stack with one entry per line, \
-pre\214xing each entry with its inde)180 621.6 R 2.773(xi)-.15 G 2.773
-(nt)-2.773 G(he)-2.773 E(stack.)180 633.6 Q F2(+)144 645.6 Q F1(n)A F0
-1.565(Displays the)180 645.6 R F1(n)4.065 E F0 1.565
-(th entry counting from the left of the list sho)B 1.564(wn by)-.25 F F2
-(dirs)4.064 E F0 1.564(when in)4.064 F -.2(vo)-.4 G -.1(ke).2 G(d).1 E
-(without options, starting with zero.)180 657.6 Q F2<ad>144 669.6 Q F1
-(n)A F0 1.194(Displays the)180 669.6 R F1(n)3.694 E F0 1.194
+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 681.6 Q .258(The return v)144
-698.4 R .258(alue is 0 unless an in)-.25 F -.25(va)-.4 G .258
+(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 710.4 Q(GNU Bash 5.1)72 768 Q(2020 October 29)
-141.235 E(62)190.395 E 0 Cg EP
-%%Page: 63 63
+.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/F1 10/Times-Bold@0
-SF(diso)108 84 Q(wn)-.1 E F0([)2.5 E F1(\255ar)A F0 2.5(][)C F1<ad68>
--2.5 E F0 2.5(][)C/F2 10/Times-Italic@0 SF(jobspec)-2.5 E F0(... |)2.5 E
-F2(pid)2.5 E F0(... ])2.5 E -.4(Wi)144 96 S .121(thout options, remo).4
-F .422 -.15(ve e)-.15 H(ach).15 E F2(jobspec)4.362 E F0 .122
-(from the table of acti)2.932 F .422 -.15(ve j)-.25 H 2.622(obs. If).15
-F F2(jobspec)4.362 E F0 .122(is not present, and)2.932 F .096
-(neither the)144 108 R F1<ad61>2.596 E F0 .096(nor the)2.596 F F1<ad72>
-2.596 E F0 .096(option is supplied, the)2.596 F F2(curr)2.596 E .096
-(ent job)-.37 F F0 .096(is used.)2.596 F .096(If the)5.096 F F1<ad68>
-2.596 E F0 .096(option is gi)2.596 F -.15(ve)-.25 G .096(n, each).15 F
-F2(jobspec)145.74 120 Q F0 .585(is not remo)3.395 F -.15(ve)-.15 G 3.085
-(df).15 G .585(rom the table, b)-3.085 F .585(ut is mark)-.2 F .585
-(ed so that)-.1 F/F3 9/Times-Bold@0 SF(SIGHUP)3.085 E F0 .586
-(is not sent to the job if the)2.835 F .962(shell recei)144 132 R -.15
-(ve)-.25 G 3.462(sa).15 G F3(SIGHUP)A/F4 9/Times-Roman@0 SF(.)A F0 .962
-(If no)5.462 F F2(jobspec)5.202 E F0 .962(is supplied, the)3.772 F F1
-<ad61>3.462 E F0 .962(option means to remo)3.462 F 1.262 -.15(ve o)-.15
-H 3.462(rm).15 G .962(ark all)-3.462 F 1.358(jobs; the)144 144 R F1
-<ad72>3.858 E F0 1.358(option without a)3.858 F F2(jobspec)5.598 E F0
-(ar)4.169 E 1.359(gument restricts operation to running jobs.)-.18 F
-1.359(The return)6.359 F -.25(va)144 156 S(lue is 0 unless a).25 E F2
-(jobspec)4.24 E F0(does not specify a v)2.81 E(alid job)-.25 E(.)-.4 E
-F1(echo)108 172.8 Q F0([)2.5 E F1(\255neE)A F0 2.5(][)C F2(ar)-2.5 E(g)
--.37 E F0(...])2.5 E .425(Output the)144 184.8 R F2(ar)2.925 E(g)-.37 E
-F0 .424(s, separated by spaces, follo)B .424(wed by a ne)-.25 F 2.924
-(wline. The)-.25 F .424(return status is 0 unless a write)2.924 F .307
-(error occurs.)144 196.8 R(If)5.307 E F1<ad6e>2.807 E F0 .307
-(is speci\214ed, the trailing ne)2.807 F .308(wline is suppressed.)-.25
-F .308(If the)5.308 F F1<ad65>2.808 E F0 .308(option is gi)2.808 F -.15
-(ve)-.25 G .308(n, inter).15 F(-)-.2 E .198(pretation of the follo)144
-208.8 R .198(wing backslash-escaped characters is enabled.)-.25 F(The)
-5.198 E F1<ad45>2.698 E F0 .197(option disables the in-)2.697 F .067
-(terpretation of these escape characters, e)144 220.8 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.568(ault. The)-.1 F F1
-(xpg_echo)144 232.8 Q F0 .602
-(shell option may be used to dynamically determine whether or not)3.102
-F F1(echo)3.101 E F0 -.15(ex)3.101 G .601(pands these).15 F .658
-(escape characters by def)144 244.8 R(ault.)-.1 E F1(echo)5.658 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.659 E F0(inter)3.159 E(-)
--.2 E(prets the follo)144 256.8 Q(wing escape sequences:)-.25 E F1(\\a)
-144 268.8 Q F0(alert \(bell\))180 268.8 Q F1(\\b)144 280.8 Q F0
-(backspace)180 280.8 Q F1(\\c)144 292.8 Q F0(suppress further output)180
-292.8 Q F1(\\e)144 304.8 Q(\\E)144 316.8 Q F0(an escape character)180
-316.8 Q F1(\\f)144 328.8 Q F0(form feed)180 328.8 Q F1(\\n)144 340.8 Q
-F0(ne)180 340.8 Q 2.5(wl)-.25 G(ine)-2.5 E F1(\\r)144 352.8 Q F0
-(carriage return)180 352.8 Q F1(\\t)144 364.8 Q F0(horizontal tab)180
-364.8 Q F1(\\v)144 376.8 Q F0 -.15(ve)180 376.8 S(rtical tab).15 E F1
-(\\\\)144 388.8 Q F0(backslash)180 388.8 Q F1(\\0)144 400.8 Q F2(nnn)A
-F0(the eight-bit character whose v)180 400.8 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 412.8 Q F2(HH)A F0(the eight-bit character whose v)180 412.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 F1
-(\\u)144 424.8 Q F2(HHHH)A F0 1.507
-(the Unicode \(ISO/IEC 10646\) character whose v)180 436.8 R 1.506
-(alue is the he)-.25 F 1.506(xadecimal v)-.15 F(alue)-.25 E F2(HHHH)
-4.006 E F0(\(one to four he)180 448.8 Q 2.5(xd)-.15 G(igits\))-2.5 E F1
-(\\U)144 460.8 Q F2(HHHHHHHH)A F0 .547
-(the Unicode \(ISO/IEC 10646\) character whose v)180 472.8 R .547
-(alue is the he)-.25 F .548(xadecimal v)-.15 F(alue)-.25 E F2(HHHHH-)
-3.048 E(HHH)180 484.8 Q F0(\(one to eight he)2.5 E 2.5(xd)-.15 G
-(igits\))-2.5 E F1(enable)108 501.6 Q F0([)2.5 E F1<ad61>A F0 2.5(][)C
-F1(\255dnps)-2.5 E F0 2.5(][)C F1<ad66>-2.5 E F2(\214lename)2.5 E F0 2.5
-(][)C F2(name)-2.5 E F0(...])2.5 E .278(Enable and disable b)144 513.6 R
+(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 .833
-(the same name as a shell b)144 525.6 R .834(uiltin to be e)-.2 F -.15
+(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.334(nt).15 G(hough)-3.334 E .99
-(the shell normally searches for b)144 537.6 R .989
-(uiltins before disk commands.)-.2 F(If)5.989 E F1<ad6e>3.489 E F0 .989
-(is used, each)3.489 F F2(name)3.489 E F0 .989(is dis-)3.489 F .648
-(abled; otherwise,)144 549.6 R F2(names)3.148 E F0 .648(are enabled.)
+(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 -.666(PA)3.148 G
-(TH)-.189 E F0(in-)2.899 E .539(stead of the shell b)144 561.6 R .538
-(uiltin v)-.2 F .538(ersion, run)-.15 F/F5 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
-.538(option means to load the ne)3.038 F(w)-.25 E -.2(bu)144 573.6 S
+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(The)144 585.6 Q F1<ad64>
-2.867 E F0 .367(option will delete a b)2.867 F .367(uiltin pre)-.2 F
-.367(viously loaded with)-.25 F F1<ad66>2.866 E F0 5.366(.I)C 2.866(fn)
--5.366 G(o)-2.866 E F2(name)2.866 E F0(ar)2.866 E .366(guments are gi)
--.18 F -.15(ve)-.25 G .366(n, or).15 F .398(if the)144 597.6 R F1<ad70>
-2.898 E F0 .399(option is supplied, a list of shell b)2.899 F .399
-(uiltins is printed.)-.2 F -.4(Wi)5.399 G .399(th no other option ar).4
-F .399(guments, the)-.18 F .099(list consists of all enabled shell b)144
-609.6 R 2.598(uiltins. If)-.2 F F1<ad6e>2.598 E F0 .098
-(is supplied, only disabled b)2.598 F .098(uiltins are printed.)-.2 F
-(If)5.098 E F1<ad61>2.598 E F0 .905
-(is supplied, the list printed includes all b)144 621.6 R .905
-(uiltins, with an indication of whether or not each is en-)-.2 F 2.873
-(abled. If)144 633.6 R F1<ad73>2.873 E F0 .372
-(is supplied, the output is restricted to the POSIX)2.873 F F2(special)
-2.872 E F0 -.2(bu)2.872 G 2.872(iltins. The).2 F .372(return v)2.872 F
-.372(alue is)-.25 F 2.5(0u)144 645.6 S(nless a)-2.5 E F2(name)2.86 E F0
-(is not a shell b)2.68 E(uiltin 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
-662.4 T(l).15 E F0([)2.5 E F2(ar)A(g)-.37 E F0(...])2.5 E(The)144 674.4
-Q F2(ar)3.17 E(g)-.37 E F0 3.17(sa)C .671
-(re read and concatenated together into a single command.)-3.17 F .671
-(This command is then read)5.671 F .479(and e)144 686.4 R -.15(xe)-.15 G
-.479(cuted by the shell, and its e).15 F .479
-(xit status is returned as the v)-.15 F .478(alue of)-.25 F F1 -2.3 -.15
-(ev a)2.978 H(l).15 E F0 5.478(.I)C 2.978(ft)-5.478 G .478(here are no)
--2.978 F F2(ar)3.308 E(gs)-.37 E F0(,).27 E(or only null ar)144 698.4 Q
-(guments,)-.18 E F1 -2.3 -.15(ev a)2.5 H(l).15 E F0(returns 0.)2.5 E
-(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(63)190.395 E 0 Cg EP
-%%Page: 64 64
+(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(exec)108 84 Q F0([)2.5 E F1(\255cl)A F0 2.5(][)C F1<ad61>-2.5 E/F2 10
-/Times-Italic@0 SF(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 96 Q F2(command)3.005 E F0 .305
-(is speci\214ed, it replaces the shell.)3.575 F .305(No ne)5.305 F 2.805
-(wp)-.25 G .306(rocess is created.)-2.805 F(The)5.306 E F2(ar)3.136 E
-(guments)-.37 E F0(become)3.076 E .177(the ar)144 108 R .177(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 .176
-(ginning of)-.15 F .48(the zeroth ar)144 120 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 132 Q F0 .639(to be e)
-3.909 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.498 E F0 .638(as the)
-3.318 F 1.077(zeroth ar)144 144 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 156 Q .877 -.15(ve s)-.25 H .577(hell e).15 F .577
-(xits, unless the)-.15 F F1(execfail)3.077 E F0 .577
-(shell option is enabled.)3.077 F .576(In that case, it returns f)5.577
-F(ail-)-.1 E 3.32(ure. An)144 168 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 .288(tionally if)144 180 R F1(exec)2.788 E F0 -.1
-(fa)2.788 G 2.788(ils. If).1 F F2(command)2.988 E F0 .288
-(is not speci\214ed, an)3.558 F 2.787(yr)-.15 G .287(edirections tak)
--2.787 F 2.787(ee)-.1 G -.25(ff)-2.787 G .287(ect in the current shell,)
-.25 F(and the return status is 0.)144 192 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 208.8 Q F0([)2.5 E F2(n)A F0
-(])A .095(Cause the shell to e)144 208.8 R .095(xit with a status of)
--.15 F F2(n)2.595 E F0 5.095(.I)C(f)-5.095 E F2(n)2.955 E F0 .096
-(is omitted, the e)2.835 F .096(xit status is that of the last command)
--.15 F -.15(exe)144 220.8 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 237.6 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 249.6 Q F0 .257(The supplied)144 261.6 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.626(commands. If)144 273.6 R(the)2.626 E F1
-<ad66>2.626 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 .127
-(n, or if the).15 F F1<ad70>144 285.6 Q F0 .048
-(option is supplied, a list of names of all e)2.548 F .048(xported v)
--.15 F .048(ariables is printed.)-.25 F(The)5.048 E F1<ad6e>2.547 E F0
-.047(option causes the)2.547 F -.15(ex)144 297.6 S 1.446
-(port property to be remo).15 F -.15(ve)-.15 G 3.947(df).15 G 1.447
+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.947(,t)C(he)-3.947 E -.25(va)144 309.6 S .742(lue of the v)
-.25 F .742(ariable is set to)-.25 F F2(wor)3.242 E(d)-.37 E F0(.)A F1
-(export)5.742 E F0 .742(returns an e)3.242 F .741
-(xit status of 0 unless an in)-.15 F -.25(va)-.4 G .741(lid option is)
-.25 F .031(encountered, one of the)144 321.6 R F2(names)2.531 E F0 .031
-(is not a v)2.531 F .032(alid shell v)-.25 F .032(ariable name, or)-.25
-F F1<ad66>2.532 E F0 .032(is supplied with a)2.532 F F2(name)2.892 E F0
-(that)2.712 E(is not a function.)144 333.6 Q F1(fc)108 350.4 Q F0([)2.5
+-.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
-362.4 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 .432
-(The \214rst form selects a range of commands from)144 374.4 R F2<8c72>
-4.842 E(st)-.1 E F0(to)3.612 E F2(last)3.022 E F0 .431
-(from the history list and displays or)3.612 F .141(edits and re-e)144
-386.4 R -.15(xe)-.15 G .141(cutes them.).15 F F2 -.45(Fi)5.141 G -.1(rs)
+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 398.4 Q .311(ginning with that string\) or as a number \(an inde)
--.15 F 2.811(xi)-.15 G .31(nto the history list, where a ne)-2.811 F
--.05(ga)-.15 G(ti).05 E .61 -.15(ve n)-.25 H(umber).15 E .071
-(is used as an of)144 410.4 R .071
+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 422.4 R -.25(va)-.25 G .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 434.4 Q -.25(va)-.25 G .242
+(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
-.093(ing \(so that)144 446.4 R/F4 10/Courier@0 SF .093(fc \255l \25510)
-2.593 F F0 .093(prints the last 10 commands\) and to)2.593 F F2<8c72>
-4.502 E(st)-.1 E F0 2.592(otherwise. If)3.272 F F2<8c72>4.502 E(st)-.1 E
-F0 .092(is not speci-)3.272 F(\214ed, it is set to the pre)144 458.4 Q
-(vious command for editing and \25516 for listing.)-.25 E(The)144 482.4
+.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 494.4 R .438(If the)
+(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
-.334(the editor gi)144 506.4 R -.15(ve)-.25 G 2.834(nb).15 G(y)-2.834 E
-F2(ename)3.024 E F0 .335(is in)3.014 F -.2(vo)-.4 G -.1(ke).2 G 2.835
+.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.335 E F2(ename)3.025 E F0 .335(is not gi)3.015 F -.15(ve)-.25 G
-(n,).15 E .631(the v)144 518.4 R .631(alue of the)-.25 F F3(FCEDIT)3.131
-E F0 -.25(va)2.881 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.13 E F0 .63
-(is not set.)2.88 F .63(If nei-)5.63 F .005(ther v)144 530.4 R .005
+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 542.4 Q .789(In the second form,)144 566.4 R F2
+(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.288 G(p).37 E F0(.)A F2(Com-)5.788
-E(mand)144 578.4 Q F0 .171(is interpreted the same as)2.671 F F2<8c72>
-2.671 E(st)-.1 E F0(abo)2.671 E -.15(ve)-.15 G 5.171(.A).15 G .172
-(useful alias to use with this is)-2.499 F F4 .172(r='fc \255s')2.672 F
-F0 2.672(,s)C 2.672(ot)-2.672 G(hat)-2.672 E(typing)144 590.4 Q F4 7.166
-(rc)3.666 G(c)-7.166 E F0 1.166(runs the last command be)3.666 F 1.166
-(ginning with)-.15 F F4(cc)3.666 E F0 1.165(and typing)3.666 F F4(r)
-3.665 E F0(re-e)3.665 E -.15(xe)-.15 G 1.165(cutes the last com-).15 F
-(mand.)144 602.4 Q .142(If the \214rst form is used, the return v)144
-626.4 R .142(alue is 0 unless an in)-.25 F -.25(va)-.4 G .142
+(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 .455(specify history lines out of range.)144 638.4
+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 .454(alue is the v)-.25 F .454
-(alue of the)-.25 F .787(last command e)144 650.4 R -.15(xe)-.15 G .787
-(cuted or f).15 F .788
+(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
-.788(If the)5.788 F 1.136
+.787(If the)5.787 F 1.135
 (second form is used, the return status is that of the command re-e)144
-662.4 R -.15(xe)-.15 G 1.135(cuted, unless).15 F F2(cmd)3.835 E F0 1.135
-(does not)4.405 F(specify a v)144 674.4 Q
+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 691.2 Q F0([)2.5 E F2(jobspec)A F0(])A(Resume)
-144 703.2 Q F2(jobspec)5.653 E F0 1.413(in the fore)4.223 F 1.413
+(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.414(is not present, the)4.223 F(shell')144 715.2 Q 3.117(sn)-.55 G
-.617(otion of the)-3.117 F F2(curr)3.117 E .617(ent job)-.37 F F0 .617
-(is used.)3.117 F .617(The return v)5.617 F .616
-(alue is that of the command placed into the)-.25 F(fore)144 727.2 Q
-.362(ground, or f)-.15 F .362
-(ailure if run when job control is disabled or)-.1 F 2.862(,w)-.4 G .363
-(hen run with job control enabled, if)-2.862 F(GNU Bash 5.1)72 768 Q
-(2020 October 29)141.235 E(64)190.395 E 0 Cg EP
-%%Page: 65 65
+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/F1 10
-/Times-Italic@0 SF(jobspec)145.74 84 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 10/Times-Bold@0 SF(getopts)108
-100.8 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 112.8 Q F0 .793
-(is used by shell procedures to parse positional parameters.)3.294 F F1
-(optstring)6.023 E F0 .793(contains the option)3.513 F .149
-(characters to be recognized; if a character is follo)144 124.8 R .15
-(wed by a colon, the option is e)-.25 F .15(xpected to ha)-.15 F .45
--.15(ve a)-.2 H(n).15 E(ar)144 136.8 Q .579
-(gument, which should be separated from it by white space.)-.18 F .578
-(The colon and question mark char)5.579 F(-)-.2 E .636
-(acters may not be used as option characters.)144 148.8 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 .636(xt op-)-.15 F .03
-(tion in the shell v)144 160.8 R(ariable)-.25 E F1(name)2.89 E F0 2.53
-(,i).18 G(nitializing)-2.53 E F1(name)2.89 E F0 .029(if it does not e)
-2.71 F .029(xist, and the inde)-.15 F 2.529(xo)-.15 G 2.529(ft)-2.529 G
-.029(he ne)-2.529 F .029(xt ar)-.15 F(gu-)-.18 E .065
-(ment to be processed into the v)144 172.8 R(ariable)-.25 E/F3 9
-/Times-Bold@0 SF(OPTIND)2.565 E/F4 9/Times-Roman@0 SF(.)A F3(OPTIND)
-4.565 E F0 .066(is initialized to 1 each time the shell or a)2.315 F
-.885(shell script is in)144 184.8 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
-.566(the v)144 196.8 R(ariable)-.25 E F3(OPT)3.066 E(ARG)-.81 E F4(.)A
-F0 .566(The shell does not reset)5.066 F F3(OPTIND)3.066 E F0 .567
-(automatically; it must be manually reset)2.816 F .39
-(between multiple calls to)144 208.8 R F2(getopts)2.89 E F0 .39
-(within the same shell in)2.89 F -.2(vo)-.4 G .389(cation if a ne).2 F
-2.889(ws)-.25 G .389(et of parameters is to)-2.889 F(be used.)144 220.8
-Q 2.043(When the end of options is encountered,)144 244.8 R F2(getopts)
-4.543 E F0 -.15(ex)4.543 G 2.043(its with a return v).15 F 2.044
-(alue greater than zero.)-.25 F F3(OPTIND)144 256.8 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 280.8 Q F0 .485
+(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 F1(ar)3.315 E
-(g)-.37 E F0 -.25(va)3.205 G(l-).25 E(ues,)144 292.8 Q F2(getopts)2.5 E
-F0(parses those instead.)2.5 E F2(getopts)144 316.8 Q F0 .345
+(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 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.669
-(porting is used.)144 328.8 R 1.668
-(In normal operation, diagnostic messages are printed when in)6.669 F
--.25(va)-.4 G 1.668(lid options or).25 F .393(missing option ar)144
-340.8 R .393(guments are encountered.)-.18 F .394(If the v)5.394 F
-(ariable)-.25 E F3(OPTERR)2.894 E F0 .394
-(is set to 0, no error messages)2.644 F(will be displayed, e)144 352.8 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 .667(If an in)144 376.8 R
--.25(va)-.4 G .667(lid option is seen,).25 F F2(getopts)3.167 E F0 .667
-(places ? into)3.167 F F1(name)3.527 E F0 .666
-(and, if not silent, prints an error message)3.347 F .399(and unsets)144
-388.8 R F3(OPT)2.899 E(ARG)-.81 E F4(.)A F0(If)4.899 E F2(getopts)2.899
-E F0 .399(is silent, the option character found is placed in)2.899 F F3
-(OPT)2.899 E(ARG)-.81 E F0 .4(and no)2.65 F
-(diagnostic message is printed.)144 400.8 Q 1.242(If a required ar)144
-424.8 R 1.242(gument is not found, and)-.18 F F2(getopts)3.741 E F0
-1.241(is not silent, a question mark \()3.741 F F2(?).833 E F0 3.741
-(\)i).833 G 3.741(sp)-3.741 G 1.241(laced in)-3.741 F F1(name)144.36
-436.8 Q F0(,).18 E F3(OPT)2.713 E(ARG)-.81 E F0 .213
-(is unset, and a diagnostic message is printed.)2.463 F(If)5.213 E F2
-(getopts)2.713 E F0 .213(is silent, then a colon \()2.713 F F2(:).833 E
-F0(\)).833 E(is placed in)144 448.8 Q F1(name)2.86 E F0(and)2.68 E F3
-(OPT)2.5 E(ARG)-.81 E F0(is set to the option character found.)2.25 E F2
-(getopts)144 472.8 Q F0 .902
+.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.402 F .902(It returns f)5.902 F .901(alse if the end of)-.1 F
-(options is encountered or an error occurs.)144 484.8 Q F2(hash)108
-501.6 Q F0([)2.5 E F2(\255lr)A F0 2.5(][)C F2<ad70>-2.5 E F1(\214lename)
-2.5 E F0 2.5(][)C F2(\255dt)-2.5 E F0 2.5(][)C F1(name)-2.5 E F0(])A
-.858(Each time)144 513.6 R F2(hash)3.358 E F0 .858(is in)3.358 F -.2(vo)
--.4 G -.1(ke).2 G .858(d, the full pathname of the command).1 F F1(name)
+3.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 525.6 R F2($P)3.456 E -.95(AT)-.74 G(H).95 E F0
+(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 .242(If the)144 537.6
-R F2<ad70>2.742 E F0 .243
-(option is supplied, no path search is performed, and)2.742 F F1
-(\214lename)4.653 E F0 .243(is used as the full \214lename)2.923 F .615
-(of the command.)144 549.6 R(The)5.615 E F2<ad72>3.115 E F0 .615
+(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 F2<ad64>3.115 E F0
-(op-)3.115 E .293(tion causes the shell to for)144 561.6 R .293
-(get the remembered location of each)-.18 F F1(name)2.794 E F0 5.294(.I)
-C 2.794(ft)-5.294 G(he)-2.794 E F2<ad74>2.794 E F0 .294
-(option is supplied,)2.794 F .028(the full pathname to which each)144
-573.6 R F1(name)2.528 E F0 .028(corresponds is printed.)2.528 F .028
-(If multiple)5.028 F F1(name)2.528 E F0(ar)2.528 E .028
-(guments are sup-)-.18 F .175(plied with)144 585.6 R F2<ad74>2.675 E F0
-2.675(,t)C(he)-2.675 E F1(name)2.675 E F0 .175
-(is printed before the hashed full pathname.)2.675 F(The)5.175 E F2
-<ad6c>2.676 E F0 .176(option causes output to)2.676 F .783
-(be displayed in a format that may be reused as input.)144 597.6 R .783
+(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 F2<ad6c>3.283 E F0(is)3.283 E .807
-(supplied, information about remembered commands is printed.)144 609.6 R
-.807(The return status is true unless a)5.807 F F1(name)144.36 621.6 Q
+(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 F2(help)108 638.4 Q F0([)2.5 E F2(\255dms)A F0 2.5(][)C F1
-(pattern)-2.5 E F0(])A .867(Display helpful information about b)144
-650.4 R .867(uiltin commands.)-.2 F(If)5.867 E F1(pattern)4.617 E F0
-.866(is speci\214ed,)3.607 F F2(help)3.366 E F0(gi)3.366 E -.15(ve)-.25
-G 3.366(sd).15 G(etailed)-3.366 E .223(help on all commands matching)144
-662.4 R F1(pattern)3.973 E F0 2.723(;o).24 G .223
-(therwise help for all the b)-2.723 F .224
-(uiltins and shell control struc-)-.2 F(tures is printed.)144 674.4 Q F2
-<ad64>144 686.4 Q F0(Display a short description of each)180 686.4 Q F1
-(pattern)2.5 E F2<ad6d>144 698.4 Q F0(Display the description of each)
-180 698.4 Q F1(pattern)2.5 E F0(in a manpage-lik)2.5 E 2.5(ef)-.1 G
-(ormat)-2.5 E F2<ad73>144 710.4 Q F0
-(Display only a short usage synopsis for each)180 710.4 Q F1(pattern)2.5
-E F0(The return status is 0 unless no command matches)144 727.2 Q F1
-(pattern)3.75 E F0(.).24 E(GNU Bash 5.1)72 768 Q(2020 October 29)141.235
-E(65)190.395 E 0 Cg EP
-%%Page: 66 66
+.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/F1 10/Times-Bold@0
-SF(history [)108 84 Q/F2 10/Times-Italic@0 SF(n)A F1(])A(history \255c)
-108 96 Q(history \255d)108 108 Q F2(of)2.5 E(fset)-.18 E F1
-(history \255d)108 120 Q F2(start)2.5 E F0<ad>A F2(end)A F1
-(history \255anrw)108 132 Q F0([)2.5 E F2(\214lename)A F0(])A F1
-(history \255p)108 144 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 156 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 168 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.251 E F0(ha)3.251 E -.15(ve)-.2
-G .38(been modi\214ed.)144 180 R .38(An ar)5.38 F .38(gument of)-.18 F
-F2(n)3.24 E F0 .38(lists only the last)3.12 F F2(n)3.24 E F0 2.88
-(lines. If)3.12 F .38(the shell v)2.88 F(ariable)-.25 E/F3 9
-/Times-Bold@0 SF(HISTTIMEFOR-)2.881 E(MA)144 192 Q(T)-.855 E F0 .265
-(is set and not null, it is used as a format string for)2.515 F F2
-(strftime)2.764 E F0 .264(\(3\) to display the time stamp asso-)B 1.019
-(ciated with each displayed history entry)144 204 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 216 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 228 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 240 Q F0
-(Clear the history list by deleting all the entries.)180 240 Q F1<ad64>
-144 252 Q F2(of)2.5 E(fset)-.18 E F0 .389
-(Delete the history entry at position)180 264 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.89(,i).15 G 2.89(ti)-2.89 G
-2.89(si)-2.89 G .39(nterpreted as relati)-2.89 F -.15(ve)-.25 G .599
-(to one greater than the last history position, so ne)180 276 R -.05(ga)
--.15 G(ti).05 E .899 -.15(ve i)-.25 H .598
-(ndices count back from the end).15 F(of the history)180 288 Q 2.5(,a)
+(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 F1(history -d)2.5 E F0(command.)2.5 E F1
-<ad64>144 300 Q F2(start)2.5 E F0<ad>A F2(end)A F0 .757
-(Delete the history entries between positions)180 312 R F2(start)3.257 E
-F0(and)3.258 E F2(end)3.258 E F0 3.258(,i)C(nclusi)-3.258 E -.15(ve)-.25
-G 5.758(.P).15 G(ositi)-5.758 E 1.058 -.15(ve a)-.25 H .758(nd ne).15 F
--.05(ga)-.15 G(-).05 E(ti)180 324 Q .3 -.15(ve v)-.25 H(alues for)-.1 E
-F2(start)2.5 E F0(and)2.5 E F2(end)2.5 E F0
-(are interpreted as described abo)2.5 E -.15(ve)-.15 G(.).15 E F1<ad61>
-144 336 Q F0 .565(Append the `)180 336 R(`ne)-.74 E(w')-.25 E 3.065('h)
--.74 G .564(istory lines to the history \214le.)-3.065 F .564
-(These are history lines entered since)5.564 F(the be)180 348 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 360 Q
+(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 360 R .773
-(These are lines appended to the history \214le since the be)180 372 R
-.772(ginning of the current)-.15 F F1(bash)3.272 E F0(ses-)3.272 E
-(sion.)180 384 Q F1<ad72>144 396 Q F0(Read the contents of the history \
-\214le and append them to the current history list.)180 396 Q F1<ad77>
-144 408 Q F0(Write the current history list to the history \214le, o)180
-408 Q -.15(ve)-.15 G(rwriting the history \214le').15 E 2.5(sc)-.55 G
-(ontents.)-2.5 E F1<ad70>144 420 Q F0 .625
-(Perform history substitution on the follo)180 420 R(wing)-.25 E F2(ar)
-3.125 E(gs)-.37 E F0 .626(and display the result on the standard)3.125 F
-2.975(output. Does)180 432 R .475
-(not store the results in the history list.)2.975 F(Each)5.475 E F2(ar)
+ 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 444 Q(xpansion.)-.15 E F1<ad73>144 456 Q F0 .362
-(Store the)180 456 R F2(ar)3.192 E(gs)-.37 E F0 .363
-(in the history list as a single entry)3.132 F 5.363(.T)-.65 G .363
-(he last command in the history list is)-5.363 F(remo)180 468 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 .146(If the)144 484.8 R F3(HISTTIMEFORMA)2.645 E(T)
+(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 .668(entry is written to the history \214le, mark)144 496.8 R .669
-(ed with the history comment character)-.1 F 5.669(.W)-.55 G .669
-(hen the history)-5.669 F .956(\214le is read, lines be)144 508.8 R .956
-(ginning with the history comment character follo)-.15 F .955
-(wed immediately by a digit)-.25 F .832
-(are interpreted as timestamps for the follo)144 520.8 R .832
-(wing history entry)-.25 F 5.833(.T)-.65 G .833(he return v)-5.833 F
-.833(alue is 0 unless an in-)-.25 F -.25(va)144 532.8 S .168(lid option\
+.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 F2(of)2.668 E(f-)-.18 E(set)
-144 544.8 Q F0(is supplied as an ar)2.5 E(gument to)-.18 E F1<ad64>2.5 E
-F0 2.5(,o)C 2.5(rt)-2.5 G(he history e)-2.5 E
-(xpansion supplied as an ar)-.15 E(gument to)-.18 E F1<ad70>2.5 E F0 -.1
-(fa)2.5 G(ils.).1 E F1(jobs)108 561.6 Q F0([)2.5 E F1(\255lnprs)A F0 2.5
-(][)C F2(jobspec)A F0(... ])2.5 E F1(jobs \255x)108 573.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 585.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 597.6 Q F0
-(List process IDs in addition to the normal information.)180 597.6 Q F1
-<ad6e>144 609.6 Q F0 .193(Display information only about jobs that ha)
-180 609.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 621.6 Q F1<ad70>
-144 633.6 Q F0(List only the process ID of the job')180 633.6 Q 2.5(sp)
--.55 G(rocess group leader)-2.5 E(.)-.55 E F1<ad72>144 645.6 Q F0
-(Display only running jobs.)180 645.6 Q F1<ad73>144 657.6 Q F0
-(Display only stopped jobs.)180 657.6 Q(If)144 674.4 Q F2(jobspec)4.554
+\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 686.4 Q -.25
+-.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 F2(jobspec)4.24 E F0(is supplied.)2.81 E .394(If the)144 703.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 715.2 Q
--.15(xe)-.15 G(cutes).15 E F2(command)2.7 E F0(passing it)3.27 E F2(ar)
+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(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(66)190.395 E 0 Cg EP
-%%Page: 67 67
+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/F1 10/Times-Bold@0
-SF(kill)108 84 Q F0([)2.5 E F1<ad73>A/F2 10/Times-Italic@0 SF(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 96 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 108 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 120 R .618 -.15(ve s)-.25 H
-.318(ignal name such as).15 F/F3 9/Times-Bold@0 SF(SIGKILL)2.818 E F0
-.319(\(with or without the)2.569 F F3(SIG)2.819 E F0 .319
-(pre\214x\) or a signal)2.569 F(number;)144 132 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 144 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 156 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 168 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 180 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 192 Q(alse if an error occurs or an in)-.1
-E -.25(va)-.4 G(lid option is encountered.).25 E F1(let)108 208.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
-220.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 .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 232.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 249.6 Q F0([)2.5
+(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 261.6 S 2.542(re).15 G .042(ach ar)
+(.. | \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 273.6 Q 3.152(yo)-.15 G 3.152(ft)-3.152 G .652
+(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
-285.6 Q F2(name)3.282 E F0 .422(to ha)3.102 F .722 -.15(ve a v)-.2 H
+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 297.6 R F1
+(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 309.6 R F1(set)
+(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 321.6 R .88
+(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 333.6 R -.4(Wi)5.788 G .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 345.6 R
+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 357.6 Q F1(local)2.5 E F0(is used outside a function, an in)
+(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
-374.4 Q F0(Exit a login shell.)144 374.4 Q F1(map\214le)108 391.2 Q F0
+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 403.2 S(adarray).18 E F0([)2.5 E F1
+(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 415.2 R
+(])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 427.2
+(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 439.2 Q .3 -.15(ve t)-.2 H(he follo).15 E
-(wing meanings:)-.25 E F1<ad64>144 451.2 Q F0 .911
-(The \214rst character of)180 451.2 R F2(delim)3.411 E F0 .911
+-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 463.2 Q F0(is the empty string,)2.5 E F1
+(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 475.2 Q F0(Cop)180 475.2 Q 2.5(ya)-.1 G 2.5
+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 487.2 Q F0(Be)180
-487.2 Q(gin assigning to)-.15 E F2(arr)2.83 E(ay)-.15 E F0(at inde)2.82
+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 499.2 Q F0
-(Discard the \214rst)180 499.2 Q F2(count)2.5 E F0(lines read.)2.5 E F1
-<ad74>144 511.2 Q F0(Remo)180 511.2 Q .3 -.15(ve a t)-.15 H(railing).15
+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 523.2 Q F0
-(Read lines from \214le descriptor)180 523.2 Q F2(fd)2.5 E F0
-(instead of the standard input.)2.5 E F1<ad43>144 535.2 Q F0(Ev)180
-535.2 Q(aluate)-.25 E F2(callbac)2.7 E(k)-.2 E F0(each time)3.17 E F2
+(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 547.2
-Q F0(Specify the number of lines read between each call to)180 547.2 Q
-F2(callbac)2.7 E(k)-.2 E F0(.).67 E(If)144 564 Q F1<ad43>2.967 E F0 .467
+(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 576 R 2.762(xo)-.15 G
+(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 588 R(guments.)-.18 E F2(callbac)5.274 E(k)-.2 E
+(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 600 Q
-(If not supplied with an e)144 616.8 Q(xplicit origin,)-.15 E F1
+(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 633.6 Q F0 .797
+(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 645.6 S
+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 662.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 674.4 Q -.15(ve)-.15 G 2.799
-(se).15 G .299(ntries from the directory stack.)-2.799 F -.4(Wi)5.299 G
-.299(th no ar).4 F .299(guments, remo)-.18 F -.15(ve)-.15 G 2.799(st).15
-G .3(he top directory from the)-2.799 F 1.479(stack, and performs a)144
-686.4 R F1(cd)3.979 E F0 1.479(to the ne)3.979 F 3.979(wt)-.25 G 1.479
-(op directory)-3.979 F 6.479(.A)-.65 G -.18(rg)-6.479 G 1.478
-(uments, if supplied, ha).18 F 1.778 -.15(ve t)-.2 H 1.478(he follo).15
-F(wing)-.25 E(meanings:)144 698.4 Q F1<ad6e>144 710.4 Q F0 .551
-(Suppresses the normal change of directory when remo)180 710.4 R .551
+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 722.4 Q(GNU Bash 5.1)72 768 Q
-(2020 October 29)141.235 E(67)190.395 E 0 Cg EP
-%%Page: 68 68
+(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/F1 10/Times-Bold@0
-SF(+)144 84 Q/F2 10/Times-Italic@0 SF(n)A F0(Remo)180 84 Q -.15(ve)-.15
-G 2.64(st).15 G(he)-2.64 E F2(n)2.64 E F0 .14
-(th entry counting from the left of the list sho)B .14(wn by)-.25 F F1
-(dirs)2.64 E F0 2.64(,s)C .14(tarting with zero.)-2.64 F -.15(Fo)180 96
-S 2.5(re).15 G(xample:)-2.65 E/F3 10/Courier@0 SF(popd +0)2.5 E F0(remo)
-2.5 E -.15(ve)-.15 G 2.5(st).15 G(he \214rst directory)-2.5 E(,)-.65 E
-F3(popd +1)2.5 E F0(the second.)2.5 E F1<ad>144 108 Q F2(n)A F0(Remo)180
-108 Q -.15(ve)-.15 G 3.759(st).15 G(he)-3.759 E F2(n)3.759 E F0 1.259
-(th entry counting from the right of the list sho)B 1.26(wn by)-.25 F F1
-(dirs)3.76 E F0 3.76(,s)C 1.26(tarting with)-3.76 F 2.5(zero. F)180 120
-R(or e)-.15 E(xample:)-.15 E F3(popd -0)2.5 E F0(remo)2.5 E -.15(ve)-.15
-G 2.5(st).15 G(he last directory)-2.5 E(,)-.65 E F3(popd -1)2.5 E F0
-(the ne)2.5 E(xt to last.)-.15 E .644(If the)144 136.8 R F1(popd)3.144 E
-F0 .644(command is successful, a)3.144 F F1(dirs)3.143 E F0 .643
-(is performed as well, and the return status is 0.)3.143 F F1(popd)5.643
-E F0 .415(returns f)144 148.8 R .415(alse if an in)-.1 F -.25(va)-.4 G
-.415(lid option is encountered, the directory stack is empty).25 F 2.916
-(,an)-.65 G(on-e)-2.916 E .416(xistent direc-)-.15 F
-(tory stack entry is speci\214ed, or the directory change f)144 160.8 Q
-(ails.)-.1 E F1(printf)108 177.6 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 .358
-(Write the formatted)144 189.6 R F2(ar)2.858 E(guments)-.37 E F0 .358
-(to the standard output under the control of the)2.858 F F2(format)2.857
-E F0 5.357(.T)C(he)-5.357 E F1<ad76>2.857 E F0(op-)2.857 E .714
-(tion causes the output to be assigned to the v)144 201.6 R(ariable)-.25
+(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 213.6 Q(The)144 237.6 Q F2(format)3.018 E F0 .517(is a ch\
+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.018 F .704(simply copied to standard output, character esc\
-ape sequences, which are con)144 249.6 R -.15(ve)-.4 G .704
+ 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 261.6 R .036
-(xt successi)-.15 F -.15(ve)-.25 G F2(ar)144 273.6 Q(gument)-.37 E F0
-5.531(.I)C 3.031(na)-5.531 G .531(ddition to the standard)-3.031 F F2
-(printf)3.032 E F0 .532(\(1\) format speci\214cations,)B F1(printf)3.032
-E F0 .532(interprets the follo)3.032 F(w-)-.25 E(ing e)144 285.6 Q
-(xtensions:)-.15 E F1(%b)144 297.6 Q F0(causes)180 297.6 Q F1(printf)
-2.596 E F0 .096(to e)2.596 F .096
+\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 .095(in the)2.595 F(same w)180 309.6 Q(ay as)
--.1 E F1(echo \255e)2.5 E F0(.)A F1(%q)144 321.6 Q F0(causes)180 321.6 Q
+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 333.6 Q F1(%\()144 345.6 Q F2(datefmt)A F1(\)T)A F0(causes)
-180 357.6 Q F1(printf)4.404 E F0 1.904
-(to output the date-time string resulting from using)4.404 F F2(datefmt)
-4.404 E F0 1.903(as a format)4.404 F .38(string for)180 369.6 R F2
+(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 .293(of seconds since the epoch.)180
-381.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 .693
-(current time, and \2552 represents the time the shell w)180 393.6 R
-.693(as in)-.1 F -.2(vo)-.4 G -.1(ke).2 G 3.194(d. If).1 F .694(no ar)
-3.194 F .694(gument is speci-)-.18 F .21(\214ed, con)180 405.6 R -.15
+(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 417.6 Q(vior)-.2 E(.)-.55 E .901
-(The %b, %q, and %T directi)144 434.4 R -.15(ve)-.25 G 3.401(sa).15 G
-.901(ll use the \214eld width and precision ar)-3.401 F .902
-(guments from the format)-.18 F .358(speci\214cation and write that man)
-144 446.4 R 2.858(yb)-.15 G .357
-(ytes from \(or use that wide a \214eld for\) the e)-2.858 F .357
+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 458.4 Q
-(Ar)144 475.2 Q .463(guments to non-string format speci\214ers are trea\
-ted as C constants, e)-.18 F .464(xcept that a leading plus or)-.15 F
-1.259(minus sign is allo)144 487.2 R 1.259
+(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.258(alue is the)-.25 F(ASCII v)144 499.2 Q(alue of the follo)
--.25 E(wing character)-.25 E(.)-.55 E(The)144 516 Q F2(format)2.514 E F0
-.015(is reused as necessary to consume all of the)2.514 F F2(ar)2.515 E
-(guments)-.37 E F0 5.015(.I)C 2.515(ft)-5.015 G(he)-2.515 E F2(format)
-2.515 E F0 .015(requires more)2.515 F F2(ar)2.515 E(-)-.2 E(guments)144
-528 Q F0 .566(than are supplied, the e)3.066 F .566
+-.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.065(faz)-3.066 G .565(ero v)-3.065 F .565(alue or null string,)
--.25 F(as appropriate, had been supplied.)144 540 Q(The return v)5 E
+.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 556.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 568.8 Q F0([)2.5 E F1<ad6e>A F0
-2.5(][)C F2(dir)-2.5 E F0(])A .639(Adds a directory to the top of the d\
-irectory stack, or rotates the stack, making the ne)144 580.8 R 3.14(wt)
--.25 G .64(op of the)-3.14 F .417(stack the current w)144 592.8 R .416
-(orking directory)-.1 F 5.416(.W)-.65 G .416(ith no ar)-5.816 F
-(guments,)-.18 E F1(pushd)2.916 E F0 -.15(ex)2.916 G .416
-(changes the top tw).15 F 2.916(od)-.1 G(irectories)-2.916 E 1.625
-(and returns 0, unless the directory stack is empty)144 604.8 R 6.625
-(.A)-.65 G -.18(rg)-6.625 G 1.625(uments, if supplied, ha).18 F 1.925
--.15(ve t)-.2 H 1.625(he follo).15 F(wing)-.25 E(meanings:)144 616.8 Q
-F1<ad6e>144 628.8 Q F0 1.811(Suppresses the normal change of directory \
-when rotating or adding directories to the)180 628.8 R
-(stack, so that only the stack is manipulated.)180 640.8 Q F1(+)144
-652.8 Q F2(n)A F0 1.267(Rotates the stack so that the)180 652.8 R F2(n)
+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 664.8 Q F0 2.5(,s)C
-(tarting with zero\) is at the top.)-2.5 E F1<ad>144 676.8 Q F2(n)A F0
-.92(Rotates the stack so that the)180 676.8 R F2(n)3.42 E F0 .92
+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 688.8 Q F0 2.5(,s)C(tarting with zero\) is at the top.)
--2.5 E F2(dir)144.35 700.8 Q F0(Adds)180 700.8 Q F2(dir)3.137 E F0 .287
-(to the directory stack at the top, making it the ne)3.517 F 2.788(wc)
--.25 G .288(urrent w)-2.788 F .288(orking directory as)-.1 F
-(if it had been supplied as the ar)180 712.8 Q(gument to the)-.18 E F1
-(cd)2.5 E F0 -.2(bu)2.5 G(iltin.).2 E .489(If the)144 729.6 R F1(pushd)
-2.989 E F0 .489(command is successful, a)2.989 F F1(dirs)2.988 E F0 .488
-(is performed as well.)2.988 F .488(If the \214rst form is used,)5.488 F
-F1(pushd)2.988 E F0(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(68)
-190.395 E 0 Cg EP
-%%Page: 69 69
+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 1.039
-(returns 0 unless the cd to)144 84 R/F1 10/Times-Italic@0 SF(dir)3.889 E
-F0 -.1(fa)4.269 G 3.539(ils. W).1 F 1.039(ith the second form,)-.4 F/F2
-10/Times-Bold@0 SF(pushd)3.54 E F0 1.04(returns 0 unless the directory)
-3.54 F .847(stack is empty)144 96 R 3.347(,an)-.65 G(on-e)-3.347 E .847
-(xistent directory stack element is speci\214ed, or the directory chang\
-e to the)-.15 F(speci\214ed ne)144 108 Q 2.5(wc)-.25 G
-(urrent directory f)-2.5 E(ails.)-.1 E F2(pwd)108 124.8 Q F0([)2.5 E F2
-(\255LP)A F0(])A .844(Print the absolute pathname of the current w)144
-136.8 R .845(orking directory)-.1 F 5.845(.T)-.65 G .845
+(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
-148.8 R F2<ad50>2.681 E F0 .181(option is supplied or the)2.681 F F2
-.181(\255o ph)2.681 F(ysical)-.15 E F0 .181(option to the)2.681 F F2
+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 160.8 R(the)3.263 E F2<ad4c>3.263 E F0 .763
+(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 172.8 R -.25(va)
--.4 G .405(lid op-).25 F(tion is supplied.)144 184.8 Q F2 -.18(re)108
-201.6 S(ad).18 E F0([)3.816 E F2(\255ers)A F0 3.816(][)C F2<ad61>-3.816
-E F1(aname)3.816 E F0 3.816(][)C F2<ad64>-3.816 E F1(delim)3.816 E F0
-3.816(][)C F2<ad69>-3.816 E F1(te)3.816 E(xt)-.2 E F0 3.816(][)C F2
-<ad6e>-3.816 E F1(nc)3.816 E(har)-.15 E(s)-.1 E F0 3.817(][)C F2<ad4e>
--3.817 E F1(nc)3.817 E(har)-.15 E(s)-.1 E F0 3.817(][)C F2<ad70>-3.817 E
-F1(pr)3.817 E(ompt)-.45 E F0 3.817(][)C F2<ad74>-3.817 E F1(timeout)
-3.817 E F0 3.817(][)C F2<ad75>-3.817 E F1(fd)3.817 E F0(])A([)108 213.6
-Q F1(name)A F0(...])2.5 E .516(One line is read from the standard input\
-, or from the \214le descriptor)144 225.6 R F1(fd)3.016 E F0 .516
-(supplied as an ar)3.016 F .516(gument to)-.18 F(the)144 237.6 Q F2
-<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 F2 -.75
+ 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 249.6 R F1
+-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 F1(name)3.236 E F0 2.876(,a).18 G .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 261.6 R .237(ords and their interv)-.1
-F .237(ening delimiters are assigned to the last)-.15 F F1(name)3.097 E
-F0 5.237(.I).18 G(f)-5.237 E .875(there are fe)144 273.6 R .875(wer w)
+(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 285.6 R 3.017(alues. The)-.25 F
+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 297.6 R
-.026(xpansion \(described abo)-.15 F .326 -.15(ve u)-.15 H(nder).15 E F2
+(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 F2(\\)A F0 2.526(\)m)C(ay)-2.526 E .488
-(be used to remo)144 309.6 R .788 -.15(ve a)-.15 H .788 -.15(ny s).15 H
+(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 321.6 Q .3 -.15(ve t)-.2 H(he follo).15 E
-(wing meanings:)-.25 E F2<ad61>144 333.6 Q F1(aname)2.5 E F0 1.026
-(The w)180 345.6 R 1.026
+(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 F1(aname)3.855 E F0 3.525(,s).18 G 1.025(tarting at 0.)-3.525 F
-F1(aname)180.33 357.6 Q F0(is unset before an)2.68 E 2.5(yn)-.15 G .5
--.25(ew va)-2.5 H(lues are assigned.).25 E(Other)5 E F1(name)2.5 E F0
-(ar)2.5 E(guments are ignored.)-.18 E F2<ad64>144 369.6 Q F1(delim)2.5 E
-F0 .28(The \214rst character of)180 381.6 R F1(delim)2.78 E F0 .281
+-.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 F1(de-)2.781 E(lim)180 393.6 Q F0
-(is the empty string,)2.5 E F2 -.18(re)2.5 G(ad).18 E F0
-(will terminate a line when it reads a NUL character)2.5 E(.)-.55 E F2
-<ad65>144 405.6 Q F0 .373
-(If the standard input is coming from a terminal,)180 405.6 R F2 -.18
+(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 417.6 R .218
+.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 429.6 Q -.15(ve)-.25 G 2.5(\)e).15 G(diting settings, b)-2.5 E
-(ut uses Readline')-.2 E 2.5(sd)-.55 G(ef)-2.5 E
-(ault \214lename completion.)-.1 E F2<ad69>144 441.6 Q F1(te)2.5 E(xt)
--.2 E F0(If)180 441.6 Q F2 -.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
+(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 453.6 Q(gins.)-.15 E F2<ad6e>144 465.6 Q F1(nc)2.5 E
-(har)-.15 E(s)-.1 E F2 -.18(re)180 477.6 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
+-.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 489.6 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 F2
-<ad4e>144 501.6 Q F1(nc)2.5 E(har)-.15 E(s)-.1 E F2 -.18(re)180 513.6 S
-(ad).18 E F0 1.269(returns after reading e)3.77 F(xactly)-.15 E F1(nc)
+(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 525.6 R F2 -.18(re)
+(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 537.6
-R F2 -.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 549.6 R .608
-(The result is not split on the characters in)5.608 F F2(IFS)3.108 E F0
-3.108(;t)C .609(he intent is that the)-3.108 F -.25(va)180 561.6 S .67
+(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 F2<ad72>180 573.6 Q F0
-(option belo)2.5 E(w\).)-.25 E F2<ad70>144 585.6 Q F1(pr)2.5 E(ompt)-.45
-E F0(Display)180 597.6 Q F1(pr)3.66 E(ompt)-.45 E F0 1.161
+(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 609.6 Q
+-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 F2
-<ad72>144 621.6 Q F0 .544(Backslash does not act as an escape character)
-180 621.6 R 5.543(.T)-.55 G .543
+(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
-633.6 R .492(In particular)5.492 F 2.992(,ab)-.4 G(ackslash-ne)-2.992 E
+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 645.6 Q F2<ad73>144 657.6 Q F0(Silent mode.)180 657.6 Q
-(If input is coming from a terminal, characters are not echoed.)5 E F2
-<ad74>144 669.6 Q F1(timeout)2.5 E F0(Cause)180 681.6 Q F2 -.18(re)2.929
+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 693.6 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 705.6 Q
+(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 F2 -.18(re)2.5 G(ad).18 E F0 .506(is readin\
+.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
-717.6 R .506(fect when reading)-.25 F .59(from re)180 729.6 R .59
-(gular \214les.)-.15 F(If)5.59 E F2 -.18(re)3.09 G(ad).18 E F0 .589
-(times out,)3.09 F F2 -.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(GNU Bash 5.1)72 768 Q
-(2020 October 29)141.235 E(69)190.395 E 0 Cg EP
-%%Page: 70 70
+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 -.25(va)180 84 S
-(riable).25 E/F1 10/Times-Italic@0 SF(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/F2 10/Times-Bold@0 SF -.18(re)2.77
-G(ad).18 E F0 .27(returns immediately)2.77 F 2.77(,w)-.65 G .27
-(ithout trying to read an)-2.77 F 2.77(yd)-.15 G(ata.)-2.77 E 1.12
-(The e)180 96 R 1.12(xit status is 0 if input is a)-.15 F -.25(va)-.2 G
-1.12(ilable on the speci\214ed \214le descriptor).25 F 3.62(,n)-.4 G
-1.12(on-zero other)-3.62 F(-)-.2 E 2.5(wise. The)180 108 R -.15(ex)2.5 G
-(it status is greater than 128 if the timeout is e).15 E(xceeded.)-.15 E
-F2<ad75>144 120 Q F1(fd)2.5 E F0(Read input from \214le descriptor)180
-120 Q F1(fd)2.5 E F0(.)A .522(If no)144 136.8 R F1(names)3.382 E F0 .522
+(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.187(assigned to the v)144
-148.8 R(ariable)-.25 E/F3 9/Times-Bold@0 SF(REPL)3.686 E(Y)-.828 E/F4 9
+.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 F2 -.18
-(re)3.686 G(ad).18 E F0 .96
+(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
-160.8 R .961(ariable assignment error \(such as as-)-.25 F .707
-(signing to a readonly v)144 172.8 R .706(ariable\) occurs, or an in)
+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 .706(gument to)-.18 F F2<ad75>144 184.8 Q F0(.)A F2 -.18(re)108
-201.6 S(adonly).18 E F0([)2.5 E F2(\255aAf)A F0 2.5(][)C F2<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 213.6 R -.15(ve)-.25 G(n).15 E F1(names)3.27 E F0
+.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 F1(names)3.63 E F0 .77(may not be changed by subse-)3.54 F 1.097
-(quent assignment.)144 225.6 R 1.097(If the)6.097 F F2<ad66>3.597 E F0
-1.097(option is supplied, the functions corresponding to the)3.597 F F1
-(names)3.596 E F0 1.096(are so)3.596 F(mark)144 237.6 Q 3.334(ed. The)
--.1 F F2<ad61>3.334 E F0 .834(option restricts the v)3.334 F .834
+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 F2<ad41>3.334 E F0 .834(option restricts the v)3.334 F(ari-)
--.25 E .777(ables to associati)144 249.6 R 1.077 -.15(ve a)-.25 H 3.277
-(rrays. If).15 F .777(both options are supplied,)3.277 F F2<ad41>3.277 E
-F0(tak)3.277 E .776(es precedence.)-.1 F .776(If no)5.776 F F1(name)
-3.636 E F0(ar)3.456 E(gu-)-.18 E .521(ments are gi)144 261.6 R -.15(ve)
--.25 G .521(n, or if the).15 F F2<ad70>3.021 E F0 .521
+-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
-.522(The other)5.521 F .295(options may be used to restrict the output \
-to a subset of the set of readonly names.)144 273.6 R(The)5.295 E F2
-<ad70>2.795 E F0(option)2.795 E .786
+.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 285.6 R .786(If a v)5.786 F .786(ariable name is fol-)-.25 F(lo)144
-297.6 Q .718(wed by =)-.25 F F1(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 F1(wor)
+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 309.6 R F1(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 F2<ad66>2.76 E F0 .26
-(is supplied with a)2.76 F F1(name)144.36 321.6 Q F0
-(that is not a function.)2.68 E F2 -.18(re)108 338.4 S(tur).18 E(n)-.15
-E F0([)2.5 E F1(n)A F0(])A .021(Causes a function to stop e)144 350.4 R
--.15(xe)-.15 G .021(cuting and return the v).15 F .021
-(alue speci\214ed by)-.25 F F1(n)2.88 E F0 .02(to its caller)2.76 F 5.02
-(.I)-.55 G(f)-5.02 E F1(n)2.88 E F0 .02(is omitted,)2.76 F .596
-(the return status is that of the last command e)144 362.4 R -.15(xe)
--.15 G .597(cuted in the function body).15 F 5.597(.I)-.65 G(f)-5.597 E
-F2 -.18(re)3.097 G(tur).18 E(n)-.15 E F0 .597(is e)3.097 F -.15(xe)-.15
-G(cuted).15 E .267(by a trap handler)144 374.4 R 2.767(,t)-.4 G .267
+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 .267(cuted be-).15 F .02(fore the trap handler)
-144 386.4 R 5.02(.I)-.55 G(f)-5.02 E F2 -.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 F2(DEB)2.52
+-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
-.886(mine the status is the last command e)144 398.4 R -.15(xe)-.15 G
-.886(cuted by the trap handler before).15 F F2 -.18(re)3.385 G(tur).18 E
-(n)-.15 E F0 -.1(wa)3.385 G 3.385(si).1 G -1.9 -.4(nv o)-3.385 H -.1(ke)
-.4 G 3.385(d. If).1 F F2 -.18(re)144 410.4 S(tur).18 E(n)-.15 E F0 .627
-(is used outside a function, b)3.127 F .628(ut during e)-.2 F -.15(xe)
--.15 G .628(cution of a script by the).15 F F2(.)3.128 E F0(\()5.628 E
-F2(sour)A(ce)-.18 E F0 3.128(\)c)C .628(ommand, it)-3.128 F .589
-(causes the shell to stop e)144 422.4 R -.15(xe)-.15 G .589
-(cuting that script and return either).15 F F1(n)3.448 E F0 .588
-(or the e)3.328 F .588(xit status of the last com-)-.15 F .325(mand e)
-144 434.4 R -.15(xe)-.15 G .325(cuted within the script as the e).15 F
-.326(xit status of the script.)-.15 F(If)5.326 E F1(n)2.826 E F0 .326
-(is supplied, the return v)2.826 F .326(alue is)-.25 F .445
-(its least signi\214cant 8 bits.)144 446.4 R .444
-(The return status is non-zero if)5.445 F F2 -.18(re)2.944 G(tur).18 E
-(n)-.15 E F0 .444(is supplied a non-numeric ar)2.944 F(gu-)-.18 E .381
-(ment, or is used outside a function and not during e)144 458.4 R -.15
-(xe)-.15 G .381(cution of a script by).15 F F2(.)2.881 E F0(or)3.714 E
-F2(sour)2.881 E(ce)-.18 E F0 5.381(.A)C .681 -.15(ny c)-5.381 H(om-).15
-E .75(mand associated with the)144 470.4 R F2(RETURN)3.249 E F0 .749
+.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 .749(cution resumes after the function).15 F(or script.)144 482.4 Q F2
-(set)108 499.2 Q F0([)2.5 E F2(\255\255abefhkmnptuvxBCEHPT)A F0 2.5(][)C
-F2<ad6f>-2.5 E F1(option\255name)2.5 E F0 2.5(][)C F1(ar)-2.5 E(g)-.37 E
-F0(...])2.5 E F2(set)108 511.2 Q F0([)2.5 E F2(+abefhkmnptuvxBCEHPT)A F0
-2.5(][)C F2(+o)-2.5 E F1(option\255name)2.5 E F0 2.5(][)C F1(ar)-2.5 E
-(g)-.37 E F0(...])2.5 E -.4(Wi)144 523.2 S .835
-(thout options, the name and v).4 F .835(alue of each shell v)-.25 F
-.836(ariable are displayed in a format that can be)-.25 F .784
-(reused as input for setting or resetting the currently-set v)144 535.2
-R 3.284(ariables. Read-only)-.25 F -.25(va)3.284 G .783
-(riables cannot be).25 F 2.946(reset. In)144 547.2 R F1 .447(posix mode)
-2.946 F F0 2.947(,o)C .447(nly shell v)-2.947 F .447
-(ariables are listed.)-.25 F .447
-(The output is sorted according to the current)5.447 F 3.531
-(locale. When)144 559.2 R 1.031(options are speci\214ed, the)3.531 F
-3.531(ys)-.15 G 1.031(et or unset shell attrib)-3.531 F 3.53(utes. An)
--.2 F 3.53(ya)-.15 G -.18(rg)-3.53 G 1.03(uments remaining).18 F .584
-(after option processing are treated as v)144 571.2 R .585
-(alues for the positional parameters and are assigned, in or)-.25 F(-)
--.2 E(der)144 583.2 Q 2.5(,t)-.4 G(o)-2.5 E F2($1)2.5 E F0(,)A F2($2)2.5
-E F0(,)A F2 2.5(... $)2.5 F F1(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 F2<ad61>144
-595.2 Q F0 1.378(Each v)184 595.2 R 1.377
+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.377(xport attrib)-.15 F
-1.377(ute and)-.2 F(mark)184 607.2 Q(ed for e)-.1 E(xport to the en)-.15
-E(vironment of subsequent commands.)-.4 E F2<ad62>144 619.2 Q F0 .131
-(Report the status of terminated background jobs immediately)184 619.2 R
-2.632(,r)-.65 G .132(ather than before the ne)-2.632 F(xt)-.15 E
-(primary prompt.)184 631.2 Q(This is ef)5 E(fecti)-.25 E .3 -.15(ve o)
--.25 H(nly when job control is enabled.).15 E F2<ad65>144 643.2 Q F0
-.088(Exit immediately if a)184 643.2 R F1(pipeline)2.588 E F0 .087
-(\(which may consist of a single)2.588 F F1 .087(simple command)2.587 F
-F0 .087(\), a)B F1(list)2.587 E F0 2.587(,o)C(r)-2.587 E(a)184 655.2 Q
-F1 1.52(compound command)4.02 F F0(\(see)4.021 E F3 1.521(SHELL GRAMMAR)
-4.021 F F0(abo)3.771 E -.15(ve)-.15 G 1.521(\), e).15 F 1.521
-(xits with a non-zero status.)-.15 F .08(The shell does not e)184 667.2
-R .079(xit if the command that f)-.15 F .079
-(ails is part of the command list immediately)-.1 F(follo)184 679.2 Q
-1.654(wing a)-.25 F F2(while)4.154 E F0(or)4.154 E F2(until)4.154 E F0
--.1(ke)4.154 G(yw)-.05 E 1.655(ord, part of the test follo)-.1 F 1.655
-(wing the)-.25 F F2(if)4.155 E F0(or)4.155 E F2(elif)4.155 E F0(reserv)
-4.155 E(ed)-.15 E -.1(wo)184 691.2 S .582(rds, part of an).1 F 3.082(yc)
--.15 G .582(ommand e)-3.082 F -.15(xe)-.15 G .581(cuted in a).15 F F2
-(&&)3.081 E F0(or)3.081 E F2(||)3.081 E F0 .581(list e)3.081 F .581
-(xcept the command follo)-.15 F(wing)-.25 E .917(the \214nal)184 703.2 R
-F2(&&)3.417 E F0(or)3.417 E F2(||)3.417 E F0 3.417(,a)C 1.217 -.15(ny c)
--3.417 H .918(ommand in a pipeline b).15 F .918
-(ut the last, or if the command')-.2 F 3.418(sr)-.55 G(eturn)-3.418 E
--.25(va)184 715.2 S .661(lue is being in).25 F -.15(ve)-.4 G .661
-(rted with).15 F F2(!)3.161 E F0 5.661(.I)C 3.161(fac)-5.661 G .66
-(ompound command other than a subshell returns a)-3.161 F 1.112
-(non-zero status because a command f)184 727.2 R 1.112(ailed while)-.1 F
-F2<ad65>3.612 E F0 -.1(wa)3.612 G 3.612(sb).1 G 1.113
-(eing ignored, the shell does)-3.612 F(GNU Bash 5.1)72 768 Q
-(2020 October 29)141.235 E(70)190.395 E 0 Cg EP
-%%Page: 71 71
+-.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 .178(not e)184 84
-R 2.678(xit. A)-.15 F .178(trap on)2.678 F/F1 10/Times-Bold@0 SF(ERR)
-2.678 E F0 2.678(,i)C 2.678(fs)-2.678 G .178(et, is e)-2.678 F -.15(xe)
--.15 G .178(cuted before the shell e).15 F 2.677(xits. This)-.15 F .177
-(option applies to)2.677 F .617(the shell en)184 96 R .617
+(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 .618(COMMAND EXE-)3.118 F .643(CUTION ENVIR)
-184 108 R(ONMENT)-.27 E F0(abo)2.893 E -.15(ve)-.15 G .643
+-.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 .642(cuting all).15 F(the commands in the subshell.)184 120 Q
-.998(If a compound command or shell function e)184 138 R -.15(xe)-.15 G
-.999(cutes in a conte).15 F .999(xt where)-.15 F F1<ad65>3.499 E F0 .999
-(is being ig-)3.499 F .089(nored, none of the commands e)184 150 R -.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
-.502(will be af)184 162 R .502(fected by the)-.25 F F1<ad65>3.002 E F0
+.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 .503
-(ailure sta-)-.1 F 4.184(tus. If)184 174 R 4.184(ac)4.184 G 1.684
-(ompound command or shell function sets)-4.184 F F1<ad65>4.183 E F0
-1.683(while e)4.183 F -.15(xe)-.15 G 1.683(cuting in a conte).15 F(xt)
--.15 E(where)184 186 Q F1<ad65>3.153 E F0 .653
-(is ignored, that setting will not ha)3.153 F .954 -.15(ve a)-.2 H .954
--.15(ny e).15 H -.25(ff).15 G .654(ect until the compound command).25 F
-(or the command containing the function call completes.)184 198 Q F1
-<ad66>144 210 Q F0(Disable pathname e)184 210 Q(xpansion.)-.15 E F1
-<ad68>144 222 Q F0 .988(Remember the location of commands as the)184 222
+<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 .987(is en-)3.487 F(abled by def)184 234
-Q(ault.)-.1 E F1<ad6b>144 246 Q F0 .513(All ar)184 246 R .514
+-.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 .514(vironment for a)-.4 F
-(command, not just those that precede the command name.)184 258 Q F1
-<ad6d>144 270 Q F0 .149(Monitor mode.)184 270 R .149
-(Job control is enabled.)5.149 F .148(This option is on by def)5.149 F
-.148(ault for interacti)-.1 F .448 -.15(ve s)-.25 H(hells).15 E .65
-(on systems that support it \(see)184 282 R F2 .651(JOB CONTR)3.151 F
-(OL)-.27 E F0(abo)2.901 E -.15(ve)-.15 G 3.151(\). All).15 F .651
-(processes run in a separate)3.151 F .679(process group.)184 294 R .678
+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.679 F -.15(ex)184 306 S(it status.).15 E F1<ad6e>144 318 Q F0 .652
-(Read commands b)184 318 R .652(ut do not e)-.2 F -.15(xe)-.15 G .652
-(cute them.).15 F .653(This may be used to check a shell script for)
-5.652 F(syntax errors.)184 330 Q(This is ignored by interacti)5 E .3
--.15(ve s)-.25 H(hells.).15 E F1<ad6f>144 342 Q/F3 10/Times-Italic@0 SF
-(option\255name)2.5 E F0(The)184 354 Q F3(option\255name)2.5 E F0
-(can be one of the follo)2.5 E(wing:)-.25 E F1(allexport)184 366 Q F0
-(Same as)224 378 Q F1<ad61>2.5 E F0(.)A F1(braceexpand)184 390 Q F0
-(Same as)224 402 Q F1<ad42>2.5 E F0(.)A F1(emacs)184 414 Q F0 .089
-(Use an emacs-style command line editing interf)224 414 R 2.589
+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 426 R -.15(ve)-.25 G 3.45(,u).15 G .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 438 R(also af)2.5 E(fects the editing interf)
+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 450 Q(exit)-.18 E F0(Same as)224 450 Q F1<ad65>2.5 E F0(.)A F1
-(errtrace)184 462 Q F0(Same as)224 462 Q F1<ad45>2.5 E F0(.)A F1
-(functrace)184 474 Q F0(Same as)224 486 Q F1<ad54>2.5 E F0(.)A F1
-(hashall)184 498 Q F0(Same as)224 498 Q F1<ad68>2.5 E F0(.)A F1
-(histexpand)184 510 Q F0(Same as)224 522 Q F1<ad48>2.5 E F0(.)A F1
-(history)184 534 Q F0 .587(Enable command history)224 534 R 3.087(,a)
+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 546 Q
+(.)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
-558 Q(eeof)-.18 E F0 1.656(The ef)224 570 R 1.656
+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.157 E F0 1.657(had been e)4.157 F -.15(xe)-.15 G(cuted).15 E(\(see)224
-582 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 594 S(yw).1 E(ord)-.1 E F0(Same as)224 606 Q F1
-<ad6b>2.5 E F0(.)A F1(monitor)184 618 Q F0(Same as)224 618 Q F1<ad6d>2.5
-E F0(.)A F1(noclob)184 630 Q(ber)-.1 E F0(Same as)224 642 Q F1<ad43>2.5
-E F0(.)A F1(noexec)184 654 Q F0(Same as)224 654 Q F1<ad6e>2.5 E F0(.)A
-F1(noglob)184 666 Q F0(Same as)224 666 Q F1<ad66>2.5 E F0(.)A F1(nolog)
-184 678 Q F0(Currently ignored.)224 678 Q F1(notify)184 690 Q F0
-(Same as)224 690 Q F1<ad62>2.5 E F0(.)A F1(nounset)184 702 Q F0(Same as)
-224 702 Q F1<ad75>2.5 E F0(.)A F1(onecmd)184 714 Q F0(Same as)224 714 Q
-F1<ad74>2.5 E F0(.)A(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(71)
-190.395 E 0 Cg EP
-%%Page: 72 72
+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(ph)184 84 Q(ysical)-.15 E F0(Same as)224 84 Q F1<ad50>2.5 E F0(.)A F1
-(pipefail)184 96 Q F0 1.03(If set, the return v)224 96 R 1.029
-(alue of a pipeline is the v)-.25 F 1.029
-(alue of the last \(rightmost\) com-)-.25 F 1.136(mand to e)224 108 R
+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 120 S(it successfully).15 E 5(.T)-.65 G
-(his option is disabled by def)-5 E(ault.)-.1 E F1(posix)184 132 Q F0
-2.091(Change the beha)224 132 R 2.091(vior of)-.2 F F1(bash)4.591 E F0
+-.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
-144 R/F2 10/Times-Italic@0 SF 1.212(posix mode)B F0 3.712(\). See)B/F3 9
-/Times-Bold@0 SF 1.212(SEE ALSO)3.712 F F0(belo)3.463 E(w)-.25 E .955
-(for a reference to a document that details ho)224 156 R 3.454(wp)-.25 G
-.954(osix mode af)-3.454 F .954(fects bash')-.25 F 3.454(sb)-.55 G(e-)
--3.454 E(ha)224 168 Q(vior)-.2 E(.)-.55 E F1(pri)184 180 Q(vileged)-.1 E
-F0(Same as)224 192 Q F1<ad70>2.5 E F0(.)A F1 -.1(ve)184 204 S(rbose).1 E
-F0(Same as)224 204 Q F1<ad76>2.5 E F0(.)A F1(vi)184 216 Q F0 .209
-(Use a vi-style command line editing interf)224 216 R 2.709(ace. This)
--.1 F .209(also af)2.709 F .21(fects the editing in-)-.25 F(terf)224 228
-Q(ace used for)-.1 E F1 -.18(re)2.5 G(ad \255e).18 E F0(.)A F1(xtrace)
-184 240 Q F0(Same as)224 240 Q F1<ad78>2.5 E F0(.)A(If)184 258 Q F1
-<ad6f>3.053 E F0 .553(is supplied with no)3.053 F F2(option\255name)
-3.053 E F0 3.053(,t)C .553(he v)-3.053 F .552
-(alues of the current options are printed.)-.25 F(If)5.552 E F1(+o)184
-270 Q F0 1.071(is supplied with no)3.571 F F2(option\255name)3.571 E F0
-3.571(,as)C 1.071(eries of)-3.571 F F1(set)3.572 E F0 1.072
-(commands to recreate the current)3.572 F
-(option settings is displayed on the standard output.)184 282 Q F1<ad70>
-144 294 Q F0 -.45(Tu)184 294 S 1.072(rn on).45 F F2(privile)4.822 E -.1
-(ge)-.4 G(d).1 E F0 3.572(mode. In)4.342 F 1.072(this mode, the)3.572 F
-F3($ENV)3.572 E F0(and)3.322 E F3($B)3.572 E(ASH_ENV)-.27 E F0 1.071
-(\214les are not pro-)3.322 F 1.5
-(cessed, shell functions are not inherited from the en)184 306 R 1.501
-(vironment, and the)-.4 F F3(SHELLOPTS)4.001 E/F4 9/Times-Roman@0 SF(,)A
-F3 -.27(BA)184 318 S(SHOPTS).27 E F4(,)A F3(CDP)2.775 E -.855(AT)-.666 G
-(H).855 E F4(,)A F0(and)2.775 E F3(GLOBIGNORE)3.025 E F0 -.25(va)2.775 G
-.524(riables, if the).25 F 3.024(ya)-.15 G .524(ppear in the en)-3.024 F
-(vironment,)-.4 E .379(are ignored.)184 330 R .379
-(If the shell is started with the ef)5.379 F(fecti)-.25 E .679 -.15
-(ve u)-.25 H .38(ser \(group\) id not equal to the real).15 F .462
-(user \(group\) id, and the)184 342 R F1<ad70>2.961 E F0 .461
-(option is not supplied, these actions are tak)2.961 F .461
-(en and the ef)-.1 F(fec-)-.25 E(ti)184 354 Q .694 -.15(ve u)-.25 H .394
+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 .395(option is supplied at startup, the ef)2.895 F(fecti)-.25
-E -.15(ve)-.25 G .387(user id is not reset.)184 366 R -.45(Tu)5.387 G
-.387(rning this option of).45 F 2.886(fc)-.25 G .386(auses the ef)-2.886
-F(fecti)-.25 E .686 -.15(ve u)-.25 H .386(ser and group ids to be).15 F
-(set to the real user and group ids.)184 378 Q F1<ad74>144 390 Q F0
-(Exit after reading and e)184 390 Q -.15(xe)-.15 G(cuting one command.)
-.15 E F1<ad75>144 402 Q F0 -.35(Tr)184 402 S .043(eat unset v).35 F .044
-(ariables and parameters other than the special parameters "@" and "*" \
-as an)-.25 F .183(error when performing parameter e)184 414 R 2.683
-(xpansion. If)-.15 F -.15(ex)2.683 G .182
-(pansion is attempted on an unset v).15 F(ari-)-.25 E .746
-(able or parameter)184 426 R 3.246(,t)-.4 G .746
-(he shell prints an error message, and, if not interacti)-3.246 F -.15
-(ve)-.25 G 3.246(,e).15 G .746(xits with a)-3.396 F(non-zero status.)184
-438 Q F1<ad76>144 450 Q F0(Print shell input lines as the)184 450 Q 2.5
-(ya)-.15 G(re read.)-2.5 E F1<ad78>144 462 Q F0 .315(After e)184 462 R
-.315(xpanding each)-.15 F F2 .315(simple command)2.815 F F0(,)A F1 -.25
-(fo)2.815 G(r).25 E F0(command,)2.815 E F1(case)2.815 E F0(command,)
-2.815 E F1(select)2.815 E F0(command,)2.815 E 1.235(or arithmetic)184
-474 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 486 Q
-(xpanded ar)-.15 E(guments or associated w)-.18 E(ord list.)-.1 E F1
-<ad42>144 498 Q F0 1.206(The shell performs brace e)184 498 R 1.206
-(xpansion \(see)-.15 F F1 1.205(Brace Expansion)3.705 F F0(abo)3.705 E
--.15(ve)-.15 G 3.705(\). This).15 F 1.205(is on by de-)3.705 F -.1(fa)
-184 510 S(ult.).1 E F1<ad43>144 522 Q F0 .213(If set,)184 522 R F1(bash)
-2.713 E F0 .213(does not o)2.713 F -.15(ve)-.15 G .214(rwrite an e).15 F
-.214(xisting \214le with the)-.15 F F1(>)2.714 E F0(,)A F1(>&)2.714 E F0
-2.714(,a)C(nd)-2.714 E F1(<>)2.714 E F0 .214(redirection opera-)2.714 F
-3.054(tors. This)184 534 R .553(may be o)3.053 F -.15(ve)-.15 G .553
+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 546 Q F1(>|)2.5 E F0(instead of)2.5 E F1(>)2.5 E F0(.)A F1
-<ad45>144 558 Q F0 .103(If set, an)184 558 R 2.603(yt)-.15 G .103
-(rap on)-2.603 F F1(ERR)2.603 E F0 .104
-(is inherited by shell functions, command substitutions, and com-)2.603
-F .839(mands e)184 570 R -.15(xe)-.15 G .839(cuted in a subshell en).15
-F 3.339(vironment. The)-.4 F F1(ERR)3.338 E F0 .838
-(trap is normally not inherited in)3.338 F(such cases.)184 582 Q F1
-<ad48>144 594 Q F0(Enable)184 594 Q F1(!)3.031 E F0 .531
-(style history substitution.)5.531 F .531(This option is on by def)5.531
-F .532(ault when the shell is inter)-.1 F(-)-.2 E(acti)184 606 Q -.15
-(ve)-.25 G(.).15 E F1<ad50>144 618 Q F0 .96
-(If set, the shell does not resolv)184 618 R 3.459(es)-.15 G .959
-(ymbolic links when e)-3.459 F -.15(xe)-.15 G .959
-(cuting commands such as).15 F F1(cd)3.459 E F0 1.452
-(that change the current w)184 630 R 1.452(orking directory)-.1 F 6.452
-(.I)-.65 G 3.953(tu)-6.452 G 1.453(ses the ph)-3.953 F 1.453
-(ysical directory structure in-)-.05 F 3.335(stead. By)184 642 R(def)
-3.335 E(ault,)-.1 E F1(bash)3.334 E F0(follo)3.334 E .834
+.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 654 Q(.)-.65 E F1<ad54>144
-666 Q F0 .89(If set, an)184 666 R 3.39(yt)-.15 G .89(raps on)-3.39 F F1
+(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 678 R -.15(xe)-.15 G 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 690 Q F0
-(traps are normally not inherited in such cases.)2.5 E F1<adad>144 702 Q
-F0 .4(If no ar)184 702 R .401(guments follo)-.18 F 2.901(wt)-.25 G .401
-(his option, then the positional parameters are unset.)-2.901 F
-(Otherwise,)5.401 E(the positional parameters are set to the)184 714 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
-(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(72)190.395 E 0 Cg EP
-%%Page: 73 73
+(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<ad>144 84 Q F0 .797(Signal the end of options, cause all remaining)
-184 84 R/F2 10/Times-Italic@0 SF(ar)3.297 E(g)-.37 E F0 3.297(st)C 3.297
-(ob)-3.297 G 3.296(ea)-3.297 G .796(ssigned to the positional pa-)-3.296
-F 3.021(rameters. The)184 96 R F1<ad78>3.021 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 .522
-(s, the positional pa-)B(rameters remain unchanged.)184 108 Q .425
-(The options are of)144 124.8 R 2.925(fb)-.25 G 2.925(yd)-2.925 G(ef)
--2.925 E .425(ault unless otherwise noted.)-.1 F .425
-(Using + rather than \255 causes these options)5.425 F .177
-(to be turned of)144 136.8 R 2.677(f. The)-.25 F .178
+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 .178(cation of the shell.).2 F(The)5.178 E .066
-(current set of options may be found in)144 148.8 R F1<24ad>2.566 E F0
+-.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 .066(lid option).25 F
-(is encountered.)144 160.8 Q F1(shift)108 177.6 Q F0([)2.5 E F2(n)A F0
-(])A .428(The positional parameters from)144 189.6 R F2(n)2.928 E F0
-.429(+1 ... are renamed to)B F1 .429($1 ....)2.929 F F0 -.15(Pa)5.429 G
-.429(rameters represented by the num-).15 F(bers)144 201.6 Q F1($#)2.583
-E F0(do)2.583 E .083(wn to)-.25 F F1($#)2.583 E F0<ad>A F2(n)A F0 .083
-(+1 are unset.)B F2(n)5.443 E F0 .083(must be a non-ne)2.823 F -.05(ga)
--.15 G(ti).05 E .382 -.15(ve n)-.25 H .082(umber less than or equal to)
-.15 F F1($#)2.582 E F0 5.082(.I)C(f)-5.082 E F2(n)2.942 E F0 .06
-(is 0, no parameters are changed.)144 213.6 R(If)5.06 E F2(n)2.92 E F0
+(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 .144(positional parameters are not changed.)144 225.6 R
-.144(The return status is greater than zero if)5.144 F F2(n)3.003 E F0
-.143(is greater than)2.883 F F1($#)2.643 E F0
-(or less than zero; otherwise 0.)144 237.6 Q F1(shopt)108 254.4 Q F0([)
+(,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 266.4 S .639(ggle the v).8 F .639
+-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 .64(he settings can be either those)-5.639 F .375
-(listed belo)144 278.4 R 1.675 -.65(w, o)-.25 H 1.175 -.4(r, i).65 H
-2.875(ft).4 G(he)-2.875 E F1<ad6f>2.875 E F0 .375
+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 .374(option to the)2.875 F F1(set)2.874 E F0 -.2
-(bu)2.874 G .374(iltin com-).2 F 2.565(mand. W)144 290.4 R .065
+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 302.4 R F2
+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 314.4 R F1<ad70>3.105 E F0 .605(option causes output to\
+(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 326.4 Q .3 -.15(ve t)-.2 H(he follo).15 E
-(wing meanings:)-.25 E F1<ad73>144 338.4 Q F0(Enable \(set\) each)180
-338.4 Q F2(optname)2.5 E F0(.)A F1<ad75>144 350.4 Q F0
-(Disable \(unset\) each)180 350.4 Q F2(optname)2.5 E F0(.)A F1<ad71>144
-362.4 Q F0 .003(Suppresses normal output \(quiet mode\); the return sta\
-tus indicates whether the)180 362.4 R F2(optname)2.503 E F0(is)2.503 E
-.255(set or unset.)180 374.4 R .255(If multiple)5.255 F F2(optname)2.755
-E F0(ar)2.755 E .256(guments are gi)-.18 F -.15(ve)-.25 G 2.756(nw).15 G
-(ith)-2.756 E F1<ad71>2.756 E F0 2.756(,t)C .256
-(he return status is zero if)-2.756 F(all)180 386.4 Q F2(optnames)2.5 E
-F0(are enabled; non-zero otherwise.)2.5 E F1<ad6f>144 398.4 Q F0
-(Restricts the v)180 398.4 Q(alues of)-.25 E F2(optname)2.5 E F0
+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 .625(If either)144 415.2 R F1
-<ad73>3.125 E F0(or)3.124 E F1<ad75>3.124 E F0 .624(is used with no)
+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 .983
-(set or unset, respecti)144 427.2 R -.15(ve)-.25 G(ly).15 E 5.983(.U)
--.65 G .983(nless otherwise noted, the)-5.983 F F1(shopt)3.484 E F0 .984
-(options are disabled \(unset\) by de-)3.484 F -.1(fa)144 439.2 S(ult.)
-.1 E 1.544(The return status when listing options is zero if all)144 456
-R F2(optnames)4.044 E F0 1.544(are enabled, non-zero otherwise.)4.044 F
+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 468 R F2(optname)3.196 E F0 .696(is not a v)3.196 F .696(alid shell)
--.25 F(option.)144 480 Q(The list of)144 496.8 Q F1(shopt)2.5 E F0
-(options is:)2.5 E F1(assoc_expand_once)144 514.8 Q F0 1.945
-(If set, the shell suppresses multiple e)184 526.8 R -.25(va)-.25 G
-1.944(luation of associati).25 F 2.244 -.15(ve a)-.25 H 1.944
-(rray subscripts during).15 F .885(arithmetic e)184 538.8 R .885
+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 550.8 Q -.15(xe)-.15 G
+(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 562.8 Q F0 .2
-(If set, a command name that is the name of a directory is e)184 562.8 R
--.15(xe)-.15 G .199(cuted as if it were the ar).15 F(gu-)-.18 E
-(ment to the)184 574.8 Q F1(cd)2.5 E F0 2.5(command. This)2.5 F
+(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 586.8 Q(ars)-.1 E F0 .155(If set, an ar)184 598.8 R .155
-(gument to the)-.18 F F1(cd)2.655 E F0 -.2(bu)2.655 G .156
+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 610.8 Q(ariable whose v)-.25 E
-(alue is the directory to change to.)-.25 E F1(cdspell)144 622.8 Q F0
+(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
-622.8 R F1(cd)3.555 E F0 1.055(command will be)3.555 F 3.987
-(corrected. The)184 634.8 R 1.487(errors check)3.987 F 1.487
-(ed for are transposed characters, a missing character)-.1 F 3.988(,a)
--.4 G(nd)-3.988 E .77(one character too man)184 646.8 R 4.57 -.65(y. I)
+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 658.8 Q
+(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 670.8 Q F0 .736(If set,)184 682.8 R F1(bash)3.236
-E F0 .736(checks that a command found in the hash table e)3.236 F .737
+.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
-694.8 Q(If a hashed command no longer e)5 E
-(xists, a normal path search is performed.)-.15 E F1(checkjobs)144 706.8
-Q F0 .449(If set,)184 718.8 R F1(bash)2.949 E F0 .449
-(lists the status of an)2.949 F 2.949(ys)-.15 G .448
-(topped and running jobs before e)-2.949 F .448(xiting an interacti)-.15
-F -.15(ve)-.25 G 3.438(shell. If)184 730.8 R(an)3.438 E 3.438(yj)-.15 G
-.938(obs are running, this causes the e)-3.438 F .938
-(xit to be deferred until a second e)-.15 F .939(xit is)-.15 F
-(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(73)190.395 E 0 Cg EP
-%%Page: 74 74
+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 .817
-(attempted without an interv)184 84 R .817(ening command \(see)-.15 F/F1
-9/Times-Bold@0 SF .816(JOB CONTR)3.316 F(OL)-.27 E F0(abo)3.066 E -.15
-(ve)-.15 G 3.316(\). The).15 F .816(shell al-)3.316 F -.1(wa)184 96 S
+(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/F2 10/Times-Bold@0 SF(checkwinsize)144 108 Q F0 1.09(If set,)184
-120 R F2(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 132 Q 3.351(,u)-.65 G .851
-(pdates the v)-3.351 F .85(alues of)-.25 F F1(LINES)3.35 E F0(and)3.1 E
-F1(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 144 S(ult.).1 E F2
-(cmdhist)144 156 Q F0 .172(If set,)184 156 R F2(bash)2.672 E F0 .172
-(attempts to sa)2.672 F .472 -.15(ve a)-.2 H .173
+-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 168 Q 5.597(.T)-.65 G .597(his allo)-5.597 F .597
+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 180 S 1.287(ult, b).1
+(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.588 -.15
-(ve u)-.15 H(nder).15 E F1(HIST)184 192 Q(OR)-.162 E(Y)-.315 E F3(.)A F2
-(compat31)144 204 Q(compat32)144 216 Q(compat40)144 228 Q(compat41)144
-240 Q(compat42)144 252 Q(compat43)144 264 Q(compat44)144 276 Q F0 .889
-(These control aspects of the shell')184 288 R 3.389(sc)-.55 G .889
-(ompatibility mode \(see)-3.389 F F1 .889(SHELL COMP)3.389 F -.855(AT)
--.666 G(IBILITY).855 E(MODE)184 300 Q F0(belo)2.25 E(w\).)-.25 E F2
-(complete_fullquote)144 316.8 Q F0 .653(If set,)184 328.8 R F2(bash)
-3.153 E F0 .653(quotes all shell metacharacters in \214lenames and dire\
-ctory names when per)3.153 F(-)-.2 E 1.525(forming completion.)184 340.8
-R 1.524(If not set,)6.525 F F2(bash)4.024 E F0(remo)4.024 E -.15(ve)-.15
-G 4.024(sm).15 G 1.524(etacharacters such as the dollar sign)-4.024 F
-2.667(from the set of characters that will be quoted in completed \214l\
-enames when these)184 352.8 R .029(metacharacters appear in shell v)184
-364.8 R .028(ariable references in w)-.25 F .028(ords to be completed.)
--.1 F .028(This means)5.028 F 1.072(that dollar signs in v)184 376.8 R
-1.073(ariable names that e)-.25 F 1.073
+(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 388.8 T 1.923 -.4(r, a).25 H 1.423 -.15(ny d).4 H 1.123
+(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.122(his is acti)-6.123 F -.15(ve)-.25 G .59
+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
-400.8 R .59(This v)5.59 F .59(ariable is set)-.25 F(by def)184 412.8 Q
+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 F2(dir)144 429.6 Q(expand)-.18 E F0 .487
-(If set,)184 441.6 R F2(bash)2.987 E F0 .486
+(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
-.486(xpansion when perform-)-.15 F .179(ing \214lename completion.)184
-453.6 R .179(This changes the contents of the readline editing b)5.179 F
-(uf)-.2 E(fer)-.25 E 5.18(.I)-.55 G 2.68(fn)-5.18 G(ot)-2.68 E(set,)184
-465.6 Q F2(bash)2.5 E F0(attempts to preserv)2.5 E 2.5(ew)-.15 G
-(hat the user typed.)-2.5 E F2(dirspell)144 482.4 Q F0 .859(If set,)184
-482.4 R F2(bash)3.359 E F0 .858
-(attempts spelling correction on directory names during w)3.359 F .858
+.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 494.4 Q(xist.)-.15
-E F2(dotglob)144 511.2 Q F0 .165(If set,)184 511.2 R F2(bash)2.665 E F0
+(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 523.2 Q F2 -.63(``)2.5 G -.55(.')
-.63 G(')-.08 E F0(and)5 E F2 -.63(``)2.5 G(..).63 E -.63('')-.55 G F0
+(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 F2(dotglob)2.5 E F0
-(is set.)2.5 E F2(execfail)144 540 Q F0 .517(If set, a non-interacti)184
-540 R .817 -.15(ve s)-.25 H .517(hell will not e).15 F .516
-(xit if it cannot e)-.15 F -.15(xe)-.15 G .516
+(,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
-552 Q F2(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 F2(exec)2.5 E F0
--.1(fa)2.5 G(ils.).1 E F2(expand_aliases)144 568.8 Q F0 .716
-(If set, aliases are e)184 580.8 R .717(xpanded as described abo)-.15 F
-1.017 -.15(ve u)-.15 H(nder).15 E F1(ALIASES)3.217 E F3(.)A F0 .717
-(This option is enabled)5.217 F(by def)184 592.8 Q(ault for interacti)
--.1 E .3 -.15(ve s)-.25 H(hells.).15 E F2(extdeb)144 609.6 Q(ug)-.2 E F0
-.17(If set at shell in)184 621.6 R -.2(vo)-.4 G .17
+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.081
-(before the shell starts, identical to the)184 633.6 R F2<adad646562>
-3.582 E(ugger)-.2 E F0 3.582(option. If)3.582 F 1.082(set after in)3.582
-F -.2(vo)-.4 G 1.082(cation, be-).2 F(ha)184 645.6 Q
-(vior intended for use by deb)-.2 E(uggers is enabled:)-.2 E F2(1.)184
-662.4 Q F0(The)220 662.4 Q F2<ad46>4.251 E F0 1.751(option to the)4.251
-F F2(declar)4.251 E(e)-.18 E F0 -.2(bu)4.251 G 1.751
+.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 674.4
-Q(gument.)-.18 E F2(2.)184 691.2 Q F0 1.667(If the command run by the)
-220 691.2 R F2(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 703.2 Q -.15(xe)-.15 G(cuted.).15 E
-(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(74)190.395 E 0 Cg EP
-%%Page: 75 75
+(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(3.)184 84 Q F0 .841(If the command run by the)220 84 R F1(DEB)3.341 E
-(UG)-.1 E F0 .841(trap returns a v)3.341 F .84
-(alue of 2, and the shell is)-.25 F -.15(exe)220 96 S .488
+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 108 Q(ce)-.18 E F0 -.2(bu)2.5 G
+(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 124.8 Q/F2 9/Times-Bold@0 SF -.27(BA)220
-124.8 S(SH_ARGC).27 E F0(and)3.154 E F2 -.27(BA)3.404 G(SH_ARGV).27 E F0
+(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
-136.8 Q -.15(ve)-.15 G(.).15 E F1(5.)184 153.6 Q F0 1.637(Function trac\
-ing is enabled: command substitution, shell functions, and sub-)220
-153.6 R(shells in)220 165.6 Q -.2(vo)-.4 G -.1(ke).2 G 2.5(dw).1 G(ith)
+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 182.4 Q F0 1.082(Error tracing is enabled: comm\
-and substitution, shell functions, and subshells)220 182.4 R(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
+(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 211.2 Q F0 .4(If set, the e)184 211.2 R .4
+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 223.2 Q
-F0(are enabled.)2.5 E F1(extquote)144 240 Q F0 .86(If set,)184 252 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
+-.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 264 Q
-(This option is enabled by def)5 E(ault.)-.1 E F1(failglob)144 280.8 Q
-F0 .242(If set, patterns which f)184 280.8 R .243
+(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 292.8 Q(.)
--.55 E F1 -.25(fo)144 309.6 S -.18(rc).25 G(e_\214gnor).18 E(e)-.18 E F0
-.937(If set, the suf)184 321.6 R<8c78>-.25 E .936(es speci\214ed by the)
+(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 .936(ords to be ignored)-.1 F .32(when performing w)184 333.6 R
+-.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.948
-(pletions. See)184 345.6 R F2 .448(SHELL V)2.948 F(ARIABLES)-1.215 E F0
-(abo)2.698 E .748 -.15(ve f)-.15 H .448(or a description of).15 F F2
-(FIGNORE)2.947 E/F4 9/Times-Roman@0 SF(.)A F0 .447(This option is)4.947
-F(enabled by def)184 357.6 Q(ault.)-.1 E F1(globasciiranges)144 374.4 Q
-F0 2.518(If set, range e)184 386.4 R 2.519
-(xpressions used in pattern matching brack)-.15 F 2.519(et e)-.1 F 2.519
-(xpressions \(see)-.15 F F2 -.09(Pa)5.019 G(tter).09 E(n)-.135 E
-(Matching)184 398.4 Q F0(abo)2.965 E -.15(ve)-.15 G 3.215(\)b).15 G(eha)
--3.215 E 1.015 -.15(ve a)-.2 H 3.214(si).15 G 3.214(fi)-3.214 G 3.214
+.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 410.4 R 3.52(sc)-.55 G
+-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 .957(collate between)184 422.4 R F1
-(A)3.457 E F0(and)3.457 E F1(B)3.457 E F0 3.457(,a)C .957(nd upper)
--3.457 F .957(-case and lo)-.2 F(wer)-.25 E .956
-(-case ASCII characters will collate)-.2 F(together)184 434.4 Q(.)-.55 E
-F1(globstar)144 451.2 Q F0 .518(If set, the pattern)184 451.2 R F1(**)
+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 463.2 R .431
+(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
-475.2 Q F1(gnu_errfmt)144 492 Q F0(If set, shell error messages are wri\
-tten in the standard GNU error message format.)184 504 Q F1(histappend)
-144 520.8 Q F0 .676
+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
-532.8 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 544.8 Q(xits, rather than o)-.15 E
--.15(ve)-.15 G(rwriting the \214le.).15 E F1(histr)144 561.6 Q(eedit)
--.18 E F0 .576(If set, and)184 573.6 R F1 -.18(re)3.076 G(adline).18 E
+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 585.6 Q F1(histv)144 602.4 Q(erify)-.1 E F0 .402
-(If set, and)184 614.4 R F1 -.18(re)2.903 G(adline).18 E F0 .403
+(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 626.4 R 5.662(.I)-.55 G .661
+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 638.4 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 655.2 Q F0 1.181(If set, and)184 667.2 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 679.2 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(READLINE)3.88 E F0(abo)184 691.2 Q -.15(ve)-.15 G 2.5(\). This).15 F
-(is enabled by def)2.5 E(ault.)-.1 E(GNU Bash 5.1)72 768 Q
-(2020 October 29)141.235 E(75)190.395 E 0 Cg EP
-%%Page: 76 76
+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(huponexit)144 84 Q F0(If set,)184 96 Q F1(bash)2.5 E F0(will send)2.5
-E/F2 9/Times-Bold@0 SF(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 112.8 Q(exit)-.18 E F0 .219
-(If set, command substitution inherits the v)184 124.8 R .219
+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 136.8 Q
+(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 153.6 Q -.1(ve)-.1 G(_comments).1 E F0 .33(If set, allo)184 165.6 R
+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 177.6 R 1.267
+-.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 189.6 Q(ault.)-.1 E F1(lastpipe)144 206.4 Q F0 .066
-(If set, and job control is not acti)184 206.4 R -.15(ve)-.25 G 2.566
+(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 218.4 Q(vironment.)
--.4 E F1(lithist)144 235.2 Q F0 .654(If set, and the)184 235.2 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 247.2 Q
+(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 264 Q(ar_inherit)-.1 E F0 .422(If set, local v)184 276 R
+(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
-288 S .173(ists at a pre).15 F .173(vious scope before an)-.25 F 2.673
+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 300 Q
-F1(localv)144 316.8 Q(ar_unset)-.1 E F0 .329(If set, calling)184 328.8 R
+(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 340.8 R(v-)-.2 E(ior of unsetting local v)184 352.8 Q
-(ariables at the current function scope.)-.25 E F1(login_shell)144 369.6
+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
-381.6 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 393.6 S(lue may not be changed.)
-.25 E F1(mailwar)144 410.4 Q(n)-.15 E F0 .814(If set, and a \214le that)
-184 422.4 R F1(bash)3.314 E F0 .815
+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 434.4 S 2.5(sc).1 G(heck)-2.5 E(ed, the message `)-.1 E
+-.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
-451.2 Q F0 .325(If set, and)184 463.2 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
+-.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 475.2 Q
-F1(nocaseglob)144 492 Q F0 .436(If set,)184 504 R F1(bash)2.936 E F0
+(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 516 S
+-.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 532.8 Q F0 1.194(If set,)184
-544.8 R F1(bash)3.694 E F0 1.194
+-.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 556.8 R
+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 568.8 S .623(rd e).1 F .623(xpansions, or when \214ltering\
+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
-580.8 Q F1(nullglob)144 597.6 Q F0 .854(If set,)184 609.6 R F1(bash)
-3.354 E F0(allo)3.354 E .855(ws patterns which match no \214les \(see)
--.25 F F1 -.1(Pa)3.355 G .855(thname Expansion).1 F F0(abo)3.355 E -.15
-(ve)-.15 G 3.355(\)t).15 G(o)-3.355 E -.15(ex)184 621.6 S
-(pand to a null string, rather than themselv).15 E(es.)-.15 E F1(pr)144
-638.4 Q(ogcomp)-.18 E F0 .677(If set, the programmable completion f)184
-650.4 R .677(acilities \(see)-.1 F F1(Pr)3.176 E .676
-(ogrammable Completion)-.18 F F0(abo)3.176 E -.15(ve)-.15 G(\)).15 E
-(are enabled.)184 662.4 Q(This option is enabled by def)5 E(ault.)-.1 E
-F1(pr)144 679.2 Q(ogcomp_alias)-.18 E F0 2.124
-(If set, and programmable completion is enabled,)184 691.2 R F1(bash)
-4.624 E F0 2.124(treats a command name that)4.624 F(doesn')184 703.2 Q
-3.289(th)-.18 G -2.25 -.2(av e)-3.289 H(an)3.489 E 3.289(yc)-.15 G .789
-(ompletions as a possible alias and attempts alias e)-3.289 F .788
-(xpansion. If it has)-.15 F 1.473(an alias,)184 715.2 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 727.2 Q(xpanded alias.)-.15 E
-(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(76)190.395 E 0 Cg EP
-%%Page: 77 77
+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(pr)144 84 Q(omptv)-.18 E(ars)-.1 E F0 1.448
-(If set, prompt strings under)184 96 R 1.448(go parameter e)-.18 F 1.447
-(xpansion, command substitution, arithmetic)-.15 F -.15(ex)184 108 S .17
-(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.671 E(OMPTING)-.27 E F0(abo)2.421 E -.15(ve)-.15 G
-(.).15 E(This option is enabled by def)184 120 Q(ault.)-.1 E F1 -.18(re)
-144 136.8 S(stricted_shell).18 E F0 1.069
+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 148.8 R F2 1.069(RESTRICTED SHELL)3.569 F F0(belo)184 160.8 Q 2.86
+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 172.8 Q(wing the startup \214les to disco)-.25
+(-).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 189.6 Q(erbose)-.1 E F0 .502(If set, the)184 201.6 R F1
-(shift)3.002 E F0 -.2(bu)3.002 G .501
-(iltin prints an error message when the shift count e).2 F .501
-(xceeds the number)-.15 F(of positional parameters.)184 213.6 Q F1(sour)
-144 230.4 Q(cepath)-.18 E F0 .77(If set, the)184 242.4 R F1(sour)3.27 E
-(ce)-.18 E F0(\()3.27 E F1(.)A F0 3.27(\)b)C .77(uiltin uses the v)-3.47
-F .771(alue of)-.25 F F2 -.666(PA)3.271 G(TH)-.189 E F0 .771
-(to \214nd the directory containing the)3.021 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(xpg_echo)144 271.2 Q F0
-(If set, the)184 283.2 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 300 Q F0([)2.5 E F1<ad66>A F0(])A 1.002(Suspend the e)144 312 R -.15
-(xe)-.15 G 1.002(cution of this shell until it recei).15 F -.15(ve)-.25
-G 3.501(sa).15 G F2(SIGCONT)A F0 3.501(signal. A)3.251 F 1.001
-(login shell cannot be)3.501 F .022(suspended; the)144 324 R F1<ad66>
-2.522 E F0 .022(option can be used to o)2.522 F -.15(ve)-.15 G .022
-(rride this and force the suspension.).15 F .023(The return status is)
-5.023 F 2.5(0u)144 336 S(nless the shell is a login shell and)-2.5 E F1
-<ad66>2.5 E F0(is not supplied, or if job control is not enabled.)2.5 E
-F1(test)108 352.8 Q/F3 10/Times-Italic@0 SF -.2(ex)2.5 G(pr).2 E F1([)
-108 364.8 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 364.8 R .877
+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 376.8
-S(pr).2 E F0 5.53(.E).73 G .53
+(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 388.8 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 400.8 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 418.8 R .786
+(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 430.8 R -.25(eva)3.412 G .912
+(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 442.8 Q 2.5(eo)-.15 G 2.5(rm)-2.5 G
-(ore ar)-2.5 E(guments.)-.18 E F1(!)144 454.8 Q F3 -.2(ex)2.5 G(pr).2 E
-F0 -.35(Tr)180 454.8 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 466.8 Q F3 -.2(ex)2.5 G(pr).2 E F1(\))2.5 E F0
-.26(Returns the v)180 466.8 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 478.8 Q F3 -.2
-(ex)144 490.8 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 502.8 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 514.8 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
-526.8 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 543.6 Q F0(and)2.5 E
-F1([)2.5 E F0 -.25(eva)2.5 G(luate conditional e).25 E
+(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 561.6 S -.18(rg)-2.5 G(uments).18 E(The e)
-180 573.6 Q(xpression is f)-.15 E(alse.)-.1 E 2.5(1a)144 585.6 S -.18
-(rg)-2.5 G(ument).18 E(The e)180 597.6 Q
+(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 609.6 S -.18(rg)-2.5 G(uments).18 E .37(If the \214rst ar)
-180 621.6 R .37(gument is)-.18 F F1(!)2.87 E F0 2.87(,t)C .37(he e)-2.87
+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 633.6 R .38
+(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 F2(CONDI-)2.88 E(TION)180 645.6 Q .553
-(AL EXPRESSIONS)-.18 F F4(,)A F0 .552(the e)2.802 F .552
-(xpression is true if the unary test is true.)-.15 F .552
-(If the \214rst ar)5.552 F(gu-)-.18 E(ment is not a v)180 657.6 Q
+-.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 669.6 S -.18(rg)-2.5 G
-(uments).18 E .236(The follo)180 681.6 R .236
+(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 693.6 R 1.155 -.15
-(ve u)-.15 H(nder).15 E F2(CONDITION)3.355 E .855(AL EXPRESSIONS)-.18 F
-F4(,)A F0(the)3.104 E .578(result of the e)180 705.6 R .578(xpression i\
+(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 717.6 R(The)6.333 E F1<ad61>3.833
-E F0(and)3.833 E F1<ad6f>3.832 E F0 1.332
+(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 729.6 R 3.058(guments. If)-.18 F .558(the \214rst ar)3.058
-F .558(gument is)-.18 F F1(!)3.058 E F0 3.058(,t)C .558(he v)-3.058 F
+(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(GNU Bash 5.1)72 768 Q(2020 October 29)141.235
-E(77)190.395 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 .521
-(test using the second and third ar)180 84 R 3.021(guments. If)-.18 F
-.521(the \214rst ar)3.021 F .52(gument is e)-.18 F(xactly)-.15 E/F1 10
-/Times-Bold@0 SF(\()3.02 E F0 .52(and the third)3.02 F(ar)180 96 Q .485
-(gument is e)-.18 F(xactly)-.15 E F1(\))2.985 E F0 2.985(,t)C .485
-(he result is the one-ar)-2.985 F .485(gument test of the second ar)-.18
-F 2.985(gument. Other)-.18 F(-)-.2 E(wise, the e)180 108 Q
-(xpression is f)-.15 E(alse.)-.1 E 2.5(4a)144 120 S -.18(rg)-2.5 G
-(uments).18 E .385(If the \214rst ar)180 132 R .385(gument is)-.18 F F1
-(!)2.885 E F0 2.885(,t)C .385(he result is the ne)-2.885 F -.05(ga)-.15
-G .384(tion of the three-ar).05 F .384(gument e)-.18 F .384
-(xpression com-)-.15 F .284(posed of the remaining ar)180 144 R 2.784
-(guments. Otherwise,)-.18 F .284(the e)2.784 F .284
-(xpression is parsed and e)-.15 F -.25(va)-.25 G .285(luated ac-).25 F
-(cording to precedence using the rules listed abo)180 156 Q -.15(ve)-.15
-G(.).15 E 2.5(5o)144 168 S 2.5(rm)-2.5 G(ore ar)-2.5 E(guments)-.18 E
-1.635(The e)180 180 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 192 Q -.15(ve)-.15 G(.).15 E(When used with)144 210 Q F1(test)
-2.5 E F0(or)2.5 E F1([)2.5 E F0 2.5(,t)C(he)-2.5 E F1(<)2.5 E F0(and)2.5
-E F1(>)2.5 E F0(operators sort le)2.5 E
-(xicographically using ASCII ordering.)-.15 E F1(times)108 226.8 Q F0
+(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 226.8 R(The return status is 0.)144
-238.8 Q F1(trap)108 255.6 Q F0([)2.5 E F1(\255lp)A F0 2.5(][)C([)-2.5 E
-/F2 10/Times-Italic@0 SF(ar)A(g)-.37 E F0(])A F2(sigspec)2.5 E F0(...])
-2.5 E .683(The command)144 267.6 R F2(ar)3.513 E(g)-.37 E F0 .683
-(is to be read and e)3.403 F -.15(xe)-.15 G .682
-(cuted when the shell recei).15 F -.15(ve)-.25 G 3.182(ss).15 G
-(ignal\(s\))-3.182 E F2(sigspec)3.522 E F0 5.682(.I).31 G(f)-5.682 E F2
-(ar)3.512 E(g)-.37 E F0(is)3.402 E .608(absent \(and there is a single)
-144 279.6 R F2(sigspec)3.108 E F0 3.108(\)o)C(r)-3.108 E F1<ad>3.108 E
-F0 3.108(,e)C .608
+ 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
-.659(\(the v)144 291.6 R .659(alue it had upon entrance to the shell\).)
--.25 F(If)5.658 E F2(ar)3.488 E(g)-.37 E F0 .658
-(is the null string the signal speci\214ed by each)3.378 F F2(sigspec)
-144.34 303.6 Q F0 .58(is ignored by the shell and by the commands it in)
-3.39 F -.2(vo)-.4 G -.1(ke).2 G 3.081(s. If).1 F F2(ar)3.411 E(g)-.37 E
-F0 .581(is not present and)3.301 F F1<ad70>3.081 E F0(has)3.081 E 1.215
-(been supplied, then the trap commands associated with each)144 315.6 R
-F2(sigspec)4.054 E F0 1.214(are displayed.)4.024 F 1.214(If no ar)6.214
-F(gu-)-.18 E .86(ments are supplied or if only)144 327.6 R F1<ad70>3.36
-E F0 .86(is gi)3.36 F -.15(ve)-.25 G(n,).15 E F1(trap)3.36 E F0 .86
+.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 339.6 R F1<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.31
-(bers. Each)144 351.6 R F2(sigspec)4.65 E F0 1.811
-(is either a signal name de\214ned in <)4.62 F F2(signal.h)A F0 1.811
-(>, or a signal number)B 6.811(.S)-.55 G(ignal)-6.811 E
-(names are case insensiti)144 363.6 Q .3 -.15(ve a)-.25 H(nd the).15 E
-/F3 9/Times-Bold@0 SF(SIG)2.5 E F0(pre\214x is optional.)2.25 E .667
-(If a)144 381.6 R F2(sigspec)3.507 E F0(is)3.477 E F3(EXIT)3.167 E F0
-.667(\(0\) the command)2.917 F F2(ar)3.496 E(g)-.37 E F0 .666(is e)3.386
-F -.15(xe)-.15 G .666(cuted on e).15 F .666(xit from the shell.)-.15 F
-.666(If a)5.666 F F2(sigspec)3.506 E F0(is)3.476 E F3(DE-)3.166 E -.09
-(BU)144 393.6 S(G).09 E/F4 9/Times-Roman@0 SF(,)A F0 .483(the command)
-2.733 F F2(ar)3.313 E(g)-.37 E F0 .483(is e)3.203 F -.15(xe)-.15 G .484
-(cuted before e).15 F -.15(ve)-.25 G(ry).15 E F2 .484(simple command)
-2.984 F F0(,)A F2(for)2.984 E F0(command,)2.984 E F2(case)2.984 E F0
-(command,)2.984 E F2(select)144 405.6 Q F0 .563(command, e)3.063 F -.15
-(ve)-.25 G .563(ry arithmetic).15 F F2(for)3.063 E F0 .563
-(command, and before the \214rst command e)3.063 F -.15(xe)-.15 G .562
-(cutes in a shell).15 F .622(function \(see)144 417.6 R F3 .622
+(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 F1(extdeb)3.122 E(ug)-.2 E F0
-.622(option to the)3.122 F F1(shopt)144 429.6 Q F0 -.2(bu)2.996 G .496
-(iltin for details of its ef).2 F .496(fect on the)-.25 F F1(DEB)2.996 E
-(UG)-.1 E F0 2.996(trap. If)2.996 F(a)2.996 E F2(sigspec)3.336 E F0(is)
-3.306 E F3(RETURN)2.996 E F4(,)A F0 .496(the command)2.746 F F2(ar)
-144.33 441.6 Q(g)-.37 E F0 .18(is e)2.9 F -.15(xe)-.15 G .18
+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 F1(.)2.68 E F0(or)2.68 E F1(sour)2.68 E(ce)-.18 E
-F0 -.2(bu)2.68 G .18(iltins \214nishes).2 F -.15(exe)144 453.6 S
-(cuting.).15 E .961(If a)144 471.6 R F2(sigspec)3.801 E F0(is)3.771 E F3
-(ERR)3.461 E F4(,)A F0 .961(the command)3.211 F F2(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(ra).15 G .96(pipeline \(which may consist of a)-.001 F .185(sin\
-gle simple command\), a list, or a compound command returns a non\255ze\
-ro e)144 483.6 R .185(xit status, subject to)-.15 F .452(the follo)144
-495.6 R .452(wing conditions.)-.25 F(The)5.452 E F3(ERR)2.952 E F0 .451
-(trap is not e)2.701 F -.15(xe)-.15 G .451(cuted if the f).15 F .451
-(ailed command is part of the com-)-.1 F .387
-(mand list immediately follo)144 507.6 R .387(wing a)-.25 F F1(while)
-2.887 E F0(or)2.887 E F1(until)2.888 E F0 -.1(ke)2.888 G(yw)-.05 E .388
-(ord, part of the test in an)-.1 F F2(if)2.898 E F0 .388
-(statement, part)4.848 F .778(of a command e)144 519.6 R -.15(xe)-.15 G
-.778(cuted in a).15 F F1(&&)3.278 E F0(or)3.278 E F1(||)3.278 E F0 .778
-(list e)3.278 F .778(xcept the command follo)-.15 F .778
-(wing the \214nal)-.25 F F1(&&)3.278 E F0(or)3.278 E F1(||)3.277 E F0
-3.277(,a)C -.15(ny)-3.277 G 1.28(command in a pipeline b)144 531.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
-F1(!)3.78 E F0(.)A(These are the same conditions obe)144 543.6 Q
-(yed by the)-.15 E F1(err)2.5 E(exit)-.18 E F0(\()2.5 E F1<ad65>A F0 2.5
-(\)o)C(ption.)-2.5 E .133
-(Signals ignored upon entry to the shell cannot be trapped or reset.)144
-561.6 R -.35(Tr)5.132 G .132(apped signals that are not be-).35 F .117
-(ing ignored are reset to their original v)144 573.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 585.6 R
-(return status is f)2.5 E(alse if an)-.1 E(y)-.15 E F2(sigspec)2.84 E F0
-(is in)2.81 E -.25(va)-.4 G(lid; otherwise).25 E F1(trap)2.5 E F0
-(returns true.)2.5 E F1(type)108 602.4 Q F0([)2.5 E F1(\255aftpP)A F0(])
-A F2(name)2.5 E F0([)2.5 E F2(name)A F0(...])2.5 E -.4(Wi)144 614.4 S
-.174(th no options, indicate ho).4 F 2.674(we)-.25 G(ach)-2.674 E F2
-(name)3.034 E F0 -.1(wo)2.854 G .173
-(uld be interpreted if used as a command name.).1 F .173(If the)5.173 F
-F1<ad74>144 626.4 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 638.4 Q F0 .087
-(is an alias, shell reserv)2.767 F .087(ed w)-.15 F .087
-(ord, function, b)-.1 F .086(uiltin, or disk \214le, respecti)-.2 F -.15
-(ve)-.25 G(ly).15 E 5.086(.I)-.65 G 2.586(ft)-5.086 G(he)-2.586 E F2
-(name)2.946 E F0 .086(is not)2.766 F .118
-(found, then nothing is printed, and an e)144 650.4 R .118
-(xit status of f)-.15 F .118(alse is returned.)-.1 F .119(If the)5.119 F
-F1<ad70>2.619 E F0 .119(option is used,)2.619 F F1(type)2.619 E F0 .855
-(either returns the name of the disk \214le that w)144 662.4 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 .528(mand name, or nothing if)
-144 674.4 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 F2(\214le)4.938 E F0 5.528(.T).18 G(he)-5.528
-E F1<ad50>3.028 E F0 .529(option forces a)3.028 F F3 -.666(PA)3.029 G
-(TH)-.189 E F0 .007(search for each)144 686.4 R F2(name)2.507 E F0 2.507
-(,e)C -.15(ve)-2.757 G 2.507(ni).15 G(f)-2.507 E F5 .007(type -t name)
-2.507 F F0 -.1(wo)2.507 G .007(uld not return).1 F F2(\214le)4.417 E F0
-5.006(.I).18 G 2.506(fac)-5.006 G .006(ommand is hashed,)-2.506 F F1
-<ad70>2.506 E F0(and)144 698.4 Q F1<ad50>3.23 E F0 .73
-(print the hashed v)3.23 F .731
-(alue, which is not necessarily the \214le that appears \214rst in)-.25
-F F3 -.666(PA)3.231 G(TH)-.189 E F4(.)A F0 .731(If the)5.231 F F1<ad61>
-144 710.4 Q F0 .824(option is used,)3.324 F F1(type)3.324 E F0 .824
-(prints all of the places that contain an e)3.324 F -.15(xe)-.15 G .823
-(cutable named).15 F F2(name)3.683 E F0 5.823(.T).18 G .823(his in-)
--5.823 F 1.176(cludes aliases and functions, if and only if the)144
-722.4 R F1<ad70>3.676 E F0 1.176(option is not also used.)3.676 F 1.177
-(The table of hashed)6.176 F(GNU Bash 5.1)72 768 Q(2020 October 29)
-141.235 E(78)190.395 E 0 Cg EP
-%%Page: 79 79
+(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 1.223
-(commands is not consulted when using)144 84 R/F1 10/Times-Bold@0 SF
-<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 .325(with the)144
-96 R F1(command)2.825 E F0 -.2(bu)2.825 G(iltin.).2 E F1(type)5.325 E F0
-.325(returns true if all of the ar)2.825 F .326(guments are found, f)
--.18 F .326(alse if an)-.1 F 2.826(ya)-.15 G .326(re not)-2.826 F
-(found.)144 108 Q F1(ulimit)108 124.8 Q F0([)2.5 E F1(\255HS)A F0(])A F1
-<ad61>2.5 E(ulimit)108 136.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 10
-/Times-Italic@0 SF(limit)A F0(]])A(Pro)144 148.8 Q .244(vides control o)
--.15 F -.15(ve)-.15 G 2.744(rt).15 G .244(he resources a)-2.744 F -.25
-(va)-.2 G .244
+(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
-.943(that allo)144 160.8 R 3.443(ws)-.25 G .943(uch control.)-3.443 F
-(The)5.943 E F1<ad48>3.443 E F0(and)3.443 E F1<ad53>3.444 E F0 .944
+.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 172.8 Q -.15(ve)-.25 G 2.709(nr).15 G 2.709(esource. A)-2.709 F .208
+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.709 F .425(be increased up to the v)144 184.8 R .425
-(alue of the hard limit.)-.25 F .426(If neither)5.425 F F1<ad48>2.926 E
-F0(nor)2.926 E F1<ad53>2.926 E F0 .426
-(is speci\214ed, both the soft and)2.926 F .139(hard limits are set.)144
-196.8 R .139(The v)5.139 F .139(alue of)-.25 F F2(limit)2.729 E F0 .139
+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
-.741(of the special v)144 208.8 R(alues)-.25 E F1(hard)3.241 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 .024
-(soft limit, and no limit, respecti)144 220.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
+.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 .984
-(source is printed, unless the)144 232.8 R F1<ad48>3.484 E F0 .984
-(option is gi)3.484 F -.15(ve)-.25 G 3.484(n. When).15 F .985
+(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 244.8
+(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
-256.8 Q(ws:)-.25 E F1<ad61>144 268.8 Q F0
-(All current limits are reported; no limits are set)180 268.8 Q F1<ad62>
-144 280.8 Q F0(The maximum sock)180 280.8 Q(et b)-.1 E(uf)-.2 E
-(fer size)-.25 E F1<ad63>144 292.8 Q F0
-(The maximum size of core \214les created)180 292.8 Q F1<ad64>144 304.8
-Q F0(The maximum size of a process')180 304.8 Q 2.5(sd)-.55 G(ata se)
--2.5 E(gment)-.15 E F1<ad65>144 316.8 Q F0
-(The maximum scheduling priority \("nice"\))180 316.8 Q F1<ad66>144
-328.8 Q F0
+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
-328.8 Q F1<ad69>144 340.8 Q F0(The maximum number of pending signals)180
-340.8 Q F1<ad6b>144 352.8 Q F0
-(The maximum number of kqueues that may be allocated)180 352.8 Q F1
-<ad6c>144 364.8 Q F0(The maximum size that may be lock)180 364.8 Q
-(ed into memory)-.1 E F1<ad6d>144 376.8 Q F0
-(The maximum resident set size \(man)180 376.8 Q 2.5(ys)-.15 G
-(ystems do not honor this limit\))-2.5 E F1<ad6e>144 388.8 Q F0 .791(Th\
+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 388.8 R 3.291(wt)-.25 G .791(his v)-3.291 F .791(alue to)-.25 F
-(be set\))180 400.8 Q F1<ad70>144 412.8 Q F0
-(The pipe size in 512-byte blocks \(this may not be set\))180 412.8 Q F1
-<ad71>144 424.8 Q F0
-(The maximum number of bytes in POSIX message queues)180 424.8 Q F1
-<ad72>144 436.8 Q F0(The maximum real-time scheduling priority)180 436.8
-Q F1<ad73>144 448.8 Q F0(The maximum stack size)180 448.8 Q F1<ad74>144
-460.8 Q F0(The maximum amount of cpu time in seconds)180 460.8 Q F1
-<ad75>144 472.8 Q F0(The maximum number of processes a)180 472.8 Q -.25
-(va)-.2 G(ilable to a single user).25 E F1<ad76>144 484.8 Q F0 .47
-(The maximum amount of virtual memory a)180 484.8 R -.25(va)-.2 G .47
-(ilable to the shell and, on some systems, to).25 F(its children)180
-496.8 Q F1<ad78>144 508.8 Q F0(The maximum number of \214le locks)180
-508.8 Q F1<ad50>144 520.8 Q F0(The maximum number of pseudoterminals)180
-520.8 Q F1<ad52>144 532.8 Q F0(The maximum time a real-time process can\
- run before blocking, in microseconds)180 532.8 Q F1<ad54>144 544.8 Q F0
-(The maximum number of threads)180 544.8 Q(If)144 561.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 .045
-(no option is gi)144 573.6 R -.15(ve)-.25 G .045(n, then).15 F F1<ad66>
-2.545 E F0 .045(is assumed.)2.545 F -1.11(Va)5.045 G .045
-(lues are in 1024-byte increments, e)1.11 F .044(xcept for)-.15 F F1
-<ad74>2.544 E F0 2.544(,w)C .044(hich is)-2.544 F .67(in seconds;)144
-585.6 R F1<ad52>3.17 E F0 3.17(,w)C .67(hich is in microseconds;)-3.17 F
+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 597.6 Q F0(,)A F1<ad6e>3.737 E F0 3.737(,a)C(nd)-3.737 E
+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.236(hich are in)-3.736 F .238
-(512-byte increments.)144 609.6 R .238
-(The return status is 0 unless an in)5.238 F -.25(va)-.4 G .238
+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 621.6 Q 2.5(wl)-.25 G(imit.)-2.5 E
-F1(umask)108 638.4 Q F0([)2.5 E F1<ad70>A F0 2.5(][)C F1<ad53>-2.5 E F0
+(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 650.4 R F2(mode)3.06 E F0
+(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 662.4 R F2 -.15(ch)2.566 G(mod).15 E F0(\(1\).).77 E(If)144
-674.4 Q F2(mode)3.263 E F0 .382(is omitted, the current v)3.063 F .382
+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 686.4 R .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 698.4 Q F0 .552
-(is omitted, the output is in a form that may be reused as input.)3.232
-F .551(The return status is 0 if the)5.551 F(mode w)144 710.4 Q
+(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
-(GNU Bash 5.1)72 768 Q(2020 October 29)141.235 E(79)190.395 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(unalias)108 84 Q F0<5bad>2.5 E F1(a)A F0 2.5(][)C/F2 10
-/Times-Italic@0 SF(name)-2.5 E F0(...])2.5 E(Remo)144 96 Q 1.057 -.15
-(ve e)-.15 H(ach).15 E F2(name)3.257 E F0 .757
-(from the list of de\214ned aliases.)3.257 F(If)5.758 E F1<ad61>3.258 E
-F0 .758(is supplied, all alias de\214nitions are re-)3.258 F(mo)144 108
-Q -.15(ve)-.15 G 2.5(d. The).15 F(return v)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 124.8 Q F0<5bad>2.5 E F1
+(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 136.8 S 3.804(re).15 G(ach)-3.804 E F2(name)4.164 E F0
-3.804(,r).18 G(emo)-3.804 E 1.604 -.15(ve t)-.15 H 1.304
+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.803 E F0 1.303(option is gi)3.803 F -.15(ve)
--.25 G 1.303(n, each).15 F F2(name)144.36 148.8 Q F0 .464
-(refers to a shell v)3.144 F .464(ariable, and that v)-.25 F .464
-(ariable is remo)-.25 F -.15(ve)-.15 G 2.965(d. Read-only).15 F -.25(va)
-2.965 G .465(riables may not be un-).25 F 2.769(set. If)144 160.8 R F1
-<ad66>2.769 E F0 .269(is speci\214ed, each)2.769 F F2(name)3.129 E F0
+(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 .403(If the)144 172.8 R F1<ad6e>2.903 E
+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 .404(will be unset)2.904 F
-.72(rather than the v)144 184.8 R .72(ariable it references.)-.25 F F1
-<ad6e>5.72 E F0 .72(has no ef)3.22 F .719(fect if the)-.25 F F1<ad66>
-3.219 E F0 .719(option is supplied.)3.219 F .719(If no options)5.719 F
-.736(are supplied, each)144 196.8 R F2(name)3.236 E F0 .736
-(refers to a v)3.236 F .737(ariable; if there is no v)-.25 F .737
-(ariable by that name, a function with)-.25 F 1.762(that name, if an)144
-208.8 R 3.062 -.65(y, i)-.15 H 4.262(su).65 G 4.261(nset. Each)-4.262 F
+(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.261(df).15 G 1.761(rom the en)-4.261 F(vironment)-.4 E 3.171
-(passed to subsequent commands.)144 220.8 R 3.172(If an)8.172 F 5.672
+-.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.422 G(SH_ARGV0).27 E F4(,)A
-F3 -.27(BA)5.422 G(SH_CMDS).27 E F4(,)A F3 -.27(BA)144 232.8 S
-(SH_COMMAND).27 E F4(,)A F3 -.27(BA)11.482 G(SH_SUBSHELL).27 E F4(,)A F3
+.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.481 E -.495(AC)-.81 G(K).495 E F4(,)A F3(EPOCHREAL)
-144 244.8 Q(TIME)-.828 E F4(,)A F3(EPOCHSECONDS)2.67 E F4(,)A F3(FUNCN)
+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
-256.8 Q F4(,)A F0(or)4.03 E F3(SRANDOM)4.28 E F0 1.779(are unset, the)
-4.03 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.279(ft)-4.279 G(he)-4.279 E 4.279(ya)
--.15 G 1.779(re subse-)-4.279 F(quently reset.)144 268.8 Q(The e)5 E
-(xit status is true unless a)-.15 E F2(name)2.86 E F0(is readonly)2.68 E
-(.)-.65 E F1(wait)108 285.6 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 297.6 S .659(it for each speci\214ed child process and return i\
-ts termination status.).8 F(Each)5.659 E F2(id)3.169 E F0 .659
-(may be a process)3.929 F .009
-(ID or a job speci\214cation; if a job spec is gi)144 309.6 R -.15(ve)
--.25 G .008(n, all processes in that job').15 F 2.508(sp)-.55 G .008
-(ipeline are w)-2.508 F .008(aited for)-.1 F 5.008(.I)-.55 G(f)-5.008 E
-F2(id)144.01 321.6 Q F0 .441(is not gi)3.711 F -.15(ve)-.25 G(n,).15 E
-F1(wait)2.941 E F0 -.1(wa)2.941 G .441
+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
-.442(cuted process substitu-).15 F .598
-(tion, if its process id is the same as)144 333.6 R F1($!)3.098 E F0
-3.098(,a)C .598(nd the return status is zero.)-3.098 F .597(If the)5.597
-F F1<ad6e>3.097 E F0 .597(option is supplied,)3.097 F F1(wait)144 345.6
-Q F0 -.1(wa)3.082 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 .583(ob, to complete and)-3.083 F .404(returns its e)144 357.6 R
-.404(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 .572
-(are supplied and the shell has no unw)144 369.6 R .573
-(aited-for children, the e)-.1 F .573(xit status is 127.)-.15 F .573
-(If the)5.573 F F1<ad70>3.073 E F0 .573(option is)3.073 F .39
+.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 381.6 R .39(xit status is returned is assigned to)-.15 F .905(the v)
-144 393.6 R(ariable)-.25 E F2(varname)3.405 E F0 .905
+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 405.6 Q 3.89(ya)-.15 G 3.89(ssignment. This)-3.89 F 1.39
+(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 .574(when job control is enabled, forces)144 417.6 R F1
+(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
-.575(to terminate before returning its status, in-)3.075 F .635
-(stead of returning when it changes status.)144 429.6 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(status is 127.)144 441.6 Q
-(Otherwise, the return status is the e)5 E
-(xit status of the last process or job w)-.15 E(aited for)-.1 E(.)-.55 E
-/F5 10.95/Times-Bold@0 SF(SHELL COMP)72 458.4 Q -1.04(AT)-.81 G
-(IBILITY MODE)1.04 E F0 .911
-(Bash-4.0 introduced the concept of a `shell compatibility le)108 470.4
-R -.15(ve)-.25 G .912(l', speci\214ed as a set of options to the shopt)
-.15 F -.2(bu)108 482.4 S(iltin).2 E F1(compat31)3.378 E F0(,)A F1
-(compat32)3.378 E F0(,)A F1(compat40)3.378 E F0(,)A F1(compat41)3.378 E
-F0 3.378(,a)C .878(nd so on\).)-3.378 F .877
-(There is only one current compatibility)5.878 F(le)108 494.4 Q -.15(ve)
--.25 G 3.253(l-).15 G 3.253(-e)-3.253 G .753(ach option is mutually e)
--3.253 F(xclusi)-.15 E -.15(ve)-.25 G 5.753(.T).15 G .753
-(he compatibility le)-5.753 F -.15(ve)-.25 G 3.254(li).15 G 3.254(si)
--3.254 G .754(ntended to allo)-3.254 F 3.254(wu)-.25 G .754
-(sers to select be-)-3.254 F(ha)108 506.4 Q 1.084(vior from pre)-.2 F
-1.084(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.583(ym)-.15 G 1.083
-(igrate scripts to use)-3.583 F(current features and beha)108 518.4 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.456
-(This section does not mention beha)108 535.2 R 1.457
-(vior that is standard for a particular v)-.2 F 1.457
-(ersion \(e.g., setting)-.15 F F1(compat32)3.957 E F0 .887
-(means that quoting the rhs of the re)108 547.2 R(ge)-.15 E .886
-(xp matching operator quotes special re)-.15 F(ge)-.15 E .886
-(xp characters in the w)-.15 F(ord,)-.1 E(which is def)108 559.2 Q
-(ault beha)-.1 E(vior in bash-3.2 and abo)-.2 E -.15(ve)-.15 G(\).).15 E
-.522(If a user enables, say)108 576 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 .523
-(ls up to and includ-).15 F .26(ing the current compatibility le)108 588
-R -.15(ve)-.25 G 2.76(l. The).15 F .259
-(idea is that each compatibility le)2.759 F -.15(ve)-.25 G 2.759(lc).15
-G .259(ontrols beha)-2.759 F .259(vior that changed)-.2 F 1.645
-(in that v)108 600 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.646
-(or instance, the)-.15 F .761
-(change to use locale-based comparisons with the)108 612 R F1([[)3.261 E
-F0 .76(command came in bash-4.1, and earlier v)3.261 F .76(ersions used)
--.15 F 1.904(ASCII-based comparisons, so enabling)108 624 R F1(compat32)
-4.404 E F0 1.905(will enable ASCII-based comparisons as well.)4.404 F
-(That)6.905 E .296(granularity may not be suf)108 636 R .296
-(\214cient for all uses, and as a result users should emplo)-.25 F 2.796
-(yc)-.1 G .295(ompatibility le)-2.796 F -.15(ve)-.25 G .295(ls care-).15
-F(fully)108 648 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 .531
-(Bash-4.3 introduced a ne)108 664.8 R 3.031(ws)-.25 G .531(hell v)-3.031
-F(ariable:)-.25 E F3 -.27(BA)3.031 G(SH_COMP).27 E -.855(AT)-.666 G F4
-(.).855 E F0 .531(The v)5.031 F .531(alue assigned to this v)-.25 F .532
-(ariable \(a decimal)-.25 F -.15(ve)108 676.8 S .108(rsion number lik)
-.15 F 2.608(e4)-.1 G .108(.2, or an inte)-2.608 F .108
-(ger corresponding to the)-.15 F F1(compat)2.607 E F2(NN)A F0 .107
-(option, lik)2.607 F 2.607(e4)-.1 G .107(2\) determines the com-)-2.607
-F(patibility le)108 688.8 Q -.15(ve)-.25 G(l.).15 E .387
-(Starting with bash-4.4, Bash has be)108 705.6 R .388
-(gun deprecating older compatibility le)-.15 F -.15(ve)-.25 G 2.888
-(ls. Ev).15 F(entually)-.15 E 2.888(,t)-.65 G .388(he options will)
--2.888 F(be remo)108 717.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 F3 -.27(BA)2.5 G(SH_COMP).27 E -.855
-(AT)-.666 G F4(.).855 E F0(GNU Bash 5.1)72 768 Q(2020 October 29)141.235
-E(80)190.395 E 0 Cg EP
-%%Page: 81 81
+.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 1.164
-(Bash-5.0 is the \214nal v)108 84 R 1.164
-(ersion for which there will be an indi)-.15 F 1.163
-(vidual shopt option for the pre)-.25 F 1.163(vious v)-.25 F(ersion.)
--.15 E(Users should use)108 96 Q/F1 9/Times-Bold@0 SF -.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.613(The follo)108 112.8 R 1.613
-(wing table describes the beha)-.25 F 1.613
+(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.114(etting. The)-4.113 F/F2 10/Times-Bold@0 SF(compat)
-108 124.8 Q/F3 10/Times-Italic@0 SF(NN)A F0 1.186
-(tag is used as shorthand for setting the compatibility le)3.686 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.806(mechanisms. F)108
-136.8 R 1.306(or v)-.15 F 1.306
+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.807(lm).15 G 1.307(ay be set using the corresponding)-3.807 F F2
-(compat)108 148.8 Q F3(NN)A F0 .502(shopt option.)3.002 F -.15(Fo)5.502
+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 F1 -.27(BA)3.002 G(SH_COMP).27 E -.855(AT)-.666 G F0 -.25(va)
+-.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 160.8 Q(ersions.)-.15 E F2
-(compat31)108 177.6 Q F0<83>144 189.6 Q(quoting the rhs of the)180 189.6
-Q F2([[)2.5 E F0(command')2.5 E 2.5(sr)-.55 G -.15(eg)-2.5 G -.15(ex).15
+(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 F2(compat32)108 206.4 Q F0<83>144 218.4 Q .35
-(interrupting a command list such as "a ; b ; c" causes the e)180 218.4
-R -.15(xe)-.15 G .35(cution of the ne).15 F .35(xt command)-.15 F .018
-(in the list \(in bash-4.0 and later v)180 230.4 R .018
-(ersions, the shell acts as if it recei)-.15 F -.15(ve)-.25 G 2.517(dt)
-.15 G .017(he interrupt, so in-)-2.517 F
-(terrupting one command in a list aborts the e)180 242.4 Q -.15(xe)-.15
-G(cution of the entire list\)).15 E F2(compat40)108 259.2 Q F0<83>144
-271.2 Q(the)180 271.2 Q F2(<)2.673 E F0(and)2.673 E F2(>)2.673 E F0 .173
-(operators to the)2.673 F F2([[)2.673 E F0 .173
+-.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
-.068(ing strings; the)180 283.2 R 2.568(yu)-.15 G .068
-(se ASCII ordering.)-2.568 F .068(Bash v)5.068 F .067
-(ersions prior to bash-4.1 use ASCII collation)-.15 F(and)180 295.2 Q F3
-(str)4.742 E(cmp)-.37 E F0 1.902
-(\(3\); bash-4.1 and later use the current locale').19 F 4.403(sc)-.55 G
-1.903(ollation sequence and)-4.403 F F3(str)4.743 E(-)-.2 E(coll)180
-307.2 Q F0(\(3\).).51 E F2(compat41)108 324 Q F0<83>144 336 Q(in)180 336
-Q F3(posix)3.79 E F0(mode,)3.79 E F2(time)3.79 E F0 1.29(may be follo)
+.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 348 S(rd \(this is POSIX interpretation 267\)).1 E
-<83>144 360 Q(in)180 360 Q F3(posix)2.708 E F0 .208
-(mode, the parser requires that an e)2.708 F -.15(ve)-.25 G 2.708(nn).15
-G .208(umber of single quotes occur in the)-2.708 F F3(wor)2.709 E(d)
--.37 E F0 .282(portion of a double-quoted parameter e)180 372 R .282
-(xpansion and treats them specially)-.15 F 2.781(,s)-.65 G 2.781(ot)
--2.781 G .281(hat charac-)-2.781 F(ters within the single quotes are co\
-nsidered quoted \(this is POSIX interpretation 221\))180 384 Q F2
-(compat42)108 400.8 Q F0<83>144 412.8 Q 1.055(the replacement string in\
- double-quoted pattern substitution does not under)180 412.8 R 1.056
-(go quote re-)-.18 F(mo)180 424.8 Q -.25(va)-.15 G(l, as it does in v)
-.25 E(ersions after bash-4.2)-.15 E<83>144 436.8 Q .021
-(in posix mode, single quotes are considered special when e)180 436.8 R
-.021(xpanding the)-.15 F F3(wor)2.52 E(d)-.37 E F0 .02(portion of a)2.52
-F .017(double-quoted parameter e)180 448.8 R .017
+(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
-.999(cial character \(this is part of POSIX interpretation 221\); in la\
-ter v)180 460.8 R .998(ersions, single quotes)-.15 F
-(are not special within double-quoted w)180 472.8 Q(ord e)-.1 E
-(xpansions)-.15 E F2(compat43)108 489.6 Q F0<83>144 501.6 Q 1.07
-(the shell does not print a w)180 501.6 R 1.071
-(arning message if an attempt is made to use a quoted com-)-.1 F .249
-(pound assignment as an ar)180 513.6 R .248
-(gument to declare \(declare -a foo='\(1 2\)'\). Later v)-.18 F .248
-(ersions w)-.15 F(arn)-.1 E(that this usage is deprecated)180 525.6 Q
-<83>144 537.6 Q -.1(wo)180 537.6 S .5(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 549.6 S
+.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 561.6 Q(xit\))-.15 E
-<83>144 573.6 Q .354(when e)180 573.6 R -.15(xe)-.15 G .354
-(cuting a shell function, the loop state \(while/until/etc.\)).15 F .355
-(is not reset, so)5.354 F F2(br)2.855 E(eak)-.18 E F0(or)2.855 E F2
-(continue)180 585.6 Q F0 .052
+(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.553 F .052(xt. Bash-4.4 and)-.15 F(later reset the loop state to pre)
-180 597.6 Q -.15(ve)-.25 G(nt this).15 E F2(compat44)108 614.4 Q F0<83>
-144 626.4 Q .719(the shell sets up the v)180 626.4 R .719(alues used by)
--.25 F F1 -.27(BA)3.219 G(SH_ARGV).27 E F0(and)2.969 E F1 -.27(BA)3.219
-G(SH_ARGC).27 E F0 .719(so the)2.969 F 3.219(yc)-.15 G .719(an e)-3.219
-F(xpand)-.15 E(to the shell')180 638.4 Q 2.5(sp)-.55 G
+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 650.4 Q
-2.635(as)180 650.4 S .135(ubshell inherits loops from its parent conte)
--2.635 F .135(xt, so)-.15 F F2(br)2.635 E(eak)-.18 E F0(or)2.635 E F2
-(continue)2.634 E F0 .134(will cause the sub-)2.634 F(shell to e)180
-662.4 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 674.4 Q -.25(va)
-180 674.4 S .618(riable assignments preceding b).25 F .618(uiltins lik)
+(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 .619(utes con-)-.2 F .12
-(tinue to af)180 686.4 R .12(fect v)-.25 F .119
-(ariables with the same name in the calling en)-.25 F .119(vironment e)
--.4 F -.15(ve)-.25 G 2.619(ni).15 G 2.619(ft)-2.619 G .119(he shell is)
--2.619 F(not in posix mode)180 698.4 Q(GNU Bash 5.1)72 768 Q
-(2020 October 29)141.235 E(81)190.395 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/F1 10/Times-Bold@0
-SF(compat50)108 84 Q F0<83>144 96 Q 1.209(Bash-5.1 changed the w)180 96
-R(ay)-.1 E/F2 9/Times-Bold@0 SF($RANDOM)3.709 E F0 1.209
-(is generated to introduce slightly more random-)3.459 F 1.019
-(ness. If the shell compatibility le)180 108 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.018
-(rts to the method from).25 F .732(bash-5.0 and pre)180 120 R .732
-(vious v)-.25 F .733
+(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 132 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 144 Q .696
-(If the command hash table is empty)180 144 R 3.196(,b)-.65 G .696
-(ash v)-3.196 F .695(ersions prior to bash-5.1 printed an informa-)-.15
-F 1.32(tional message to that ef)180 156 R 1.321(fect, e)-.25 F -.15(ve)
--.25 G 3.821(nw).15 G 1.321
+-.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 168 Q F1<ad6c>2.5 E F0
-(option is supplied.)2.5 E/F3 10.95/Times-Bold@0 SF(RESTRICTED SHELL)72
-184.8 Q F0(If)108 196.8 Q F1(bash)3.582 E F0 1.081
-(is started with the name)3.581 F F1(rbash)3.581 E F0 3.581(,o)C 3.581
-(rt)-3.581 G(he)-3.581 E F1<ad72>3.581 E F0 1.081
+(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 208.8 R .476
+(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 220.8 Q -.15(ve)-.2 G 2.5(si).15 G(dentically to)-2.5 E
-F1(bash)2.5 E F0(with the e)2.5 E(xception that the follo)-.15 E
-(wing are disallo)-.25 E(wed or not performed:)-.25 E<83>108 237.6 Q
-(changing directories with)144 237.6 Q F1(cd)2.5 E F0<83>108 254.4 Q
-(setting or unsetting the v)144 254.4 Q(alues of)-.25 E F2(SHELL)2.5 E
-/F4 9/Times-Roman@0 SF(,)A F2 -.666(PA)2.25 G(TH)-.189 E F4(,)A F2
-(HISTFILE)2.25 E F4(,)A F2(ENV)2.25 E F4(,)A F0(or)2.25 E F2 -.27(BA)2.5
-G(SH_ENV).27 E F0<83>108 271.2 Q(specifying command names containing)144
-271.2 Q F1(/)2.5 E F0<83>108 288 Q(specifying a \214lename containing a)
-144 288 Q F1(/)2.5 E F0(as an ar)2.5 E(gument to the)-.18 E F1(.)2.5 E
-F0 -.2(bu)5 G(iltin command).2 E<83>108 304.8 Q
-(specifying a \214lename containing a slash as an ar)144 304.8 Q
-(gument to the)-.18 E F1(history)2.5 E F0 -.2(bu)2.5 G(iltin command).2
-E<83>108 321.6 Q .45
-(specifying a \214lename containing a slash as an ar)144 321.6 R .449
-(gument to the)-.18 F F1<ad70>2.949 E F0 .449(option to the)2.949 F F1
-(hash)2.949 E F0 -.2(bu)2.949 G .449(iltin com-).2 F(mand)144 333.6 Q
-<83>108 350.4 Q(importing function de\214nitions from the shell en)144
-350.4 Q(vironment at startup)-.4 E<83>108 367.2 Q(parsing the v)144
-367.2 Q(alue of)-.25 E F2(SHELLOPTS)2.5 E F0(from the shell en)2.25 E
-(vironment at startup)-.4 E<83>108 384 Q(redirecting output using the >\
-, >|, <>, >&, &>, and >> redirection operators)144 384 Q<83>108 400.8 Q
-(using the)144 400.8 Q F1(exec)2.5 E F0 -.2(bu)2.5 G
+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
-417.6 Q(adding or deleting b)144 417.6 Q(uiltin commands with the)-.2 E
+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 434.4 Q
-(using the)144 434.4 Q F1(enable)2.5 E F0 -.2(bu)2.5 G
+(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
-451.2 Q(specifying the)144 451.2 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 468 Q
-(turning of)144 468 Q 2.5(fr)-.25 G(estricted mode with)-2.5 E F1
-(set +r)2.5 E F0(or)2.5 E F1(set +o r)2.5 E(estricted)-.18 E F0(.)A
-(These restrictions are enforced after an)108 484.8 Q 2.5(ys)-.15 G
+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 501.6 R -.15
-(xe)-.15 G 1.567(cuted \(see).15 F F2 1.567(COMMAND EXECUTION)4.067 F F0
-(abo)3.817 E -.15(ve)-.15 G(\),).15 E F1(rbash)108 513.6 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(SEE ALSO)72
-530.4 Q/F5 10/Times-Italic@0 SF(Bash Refer)108 542.4 Q(ence Manual)-.37
-E F0 2.5(,B)C(rian F)-2.5 E(ox and Chet Rame)-.15 E(y)-.15 E F5
-(The Gnu Readline Libr)108 554.4 Q(ary)-.15 E F0 2.5(,B)C(rian F)-2.5 E
-(ox and Chet Rame)-.15 E(y)-.15 E F5(The Gnu History Libr)108 566.4 Q
+(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
-F5 -.8(Po)108 578.4 S(rtable Oper).8 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 590.4 Q
-(g/onlinepubs/9699919799/)-.18 E(http://tiswww)108 602.4 Q
-(.case.edu/~chet/bash/POSIX -- a description of posix mode)-.65 E F5(sh)
-108 614.4 Q F0(\(1\),)A F5(ksh)2.5 E F0(\(1\),)A F5(csh)2.5 E F0(\(1\))A
-F5(emacs)108 626.4 Q F0(\(1\),)A F5(vi)2.5 E F0(\(1\))A F5 -.37(re)108
-638.4 S(adline).37 E F0(\(3\))A F3(FILES)72 655.2 Q F5(/bin/bash)109.666
-667.2 Q F0(The)144 679.2 Q F1(bash)2.5 E F0 -.15(exe)2.5 G(cutable).15 E
-F5(/etc/pr)109.666 691.2 Q(o\214le)-.45 E F0
-(The systemwide initialization \214le, e)144 703.2 Q -.15(xe)-.15 G
-(cuted for login shells).15 E(GNU Bash 5.1)72 768 Q(2020 October 29)
-141.235 E(82)190.395 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-Italic@0 SF(~/.bash_pr)109.666 84 Q(o\214le)-.45 E F0
-(The personal initialization \214le, e)144 96 Q -.15(xe)-.15 G
-(cuted for login shells).15 E F1(~/.bashr)109.666 108 Q(c)-.37 E F0
-(The indi)144 120 Q(vidual per)-.25 E(-interacti)-.2 E -.15(ve)-.25 G
-(-shell startup \214le).15 E F1(~/.bash_lo)109.666 132 Q(gout)-.1 E F0
-(The indi)144 144 Q(vidual login shell cleanup \214le, e)-.25 E -.15(xe)
--.15 G(cuted when a login shell e).15 E(xits)-.15 E F1(~/.inputr)109.666
-156 Q(c)-.37 E F0(Indi)144 168 Q(vidual)-.25 E F1 -.37(re)2.5 G(adline)
-.37 E F0(initialization \214le)2.5 E/F2 10.95/Times-Bold@0 SF -.548(AU)
-72 184.8 S(THORS).548 E F0(Brian F)108 196.8 Q(ox, Free Softw)-.15 E
-(are F)-.1 E(oundation)-.15 E(bfox@gnu.or)108 208.8 Q(g)-.18 E
-(Chet Rame)108 225.6 Q 1.3 -.65(y, C)-.15 H(ase W).65 E(estern Reserv)
--.8 E 2.5(eU)-.15 G(ni)-2.5 E -.15(ve)-.25 G(rsity).15 E(chet.rame)108
-237.6 Q(y@case.edu)-.15 E F2 -.11(BU)72 254.4 S 2.738(GR).11 G(EPOR)
--2.738 E(TS)-.438 E F0 .568(If you \214nd a b)108 266.4 R .568(ug in)-.2
-F/F3 10/Times-Bold@0 SF(bash,)3.068 E F0 .568(you should report it.)
+-.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 278.4 R 5.625(ersion of)-.15 F F3
+(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 F1(ftp://ftp.gnu.or)108 290.4 Q(g/pub/gnu/bash/)-.37
-E F0(.)A .411(Once you ha)108 307.2 R .711 -.15(ve d)-.2 H .411
+(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 F1(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 319.2 R .894 -.15(ve a \214)
+-.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 331.2 Q F1 -.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 F3(gnu.bash.b)2.5 E(ug)
--.2 E F0(.)A(ALL b)108 348 Q(ug reports should include:)-.2 E(The v)108
-364.8 Q(ersion number of)-.15 E F3(bash)2.5 E F0(The hardw)108 376.8 Q
-(are and operating system)-.1 E(The compiler used to compile)108 388.8 Q
-2.5(Ad)108 400.8 S(escription of the b)-2.5 E(ug beha)-.2 E(viour)-.2 E
-2.5(As)108 412.8 S(hort script or `recipe' which e)-2.5 E -.15(xe)-.15 G
-(rcises the b).15 E(ug)-.2 E F1(bashb)108.27 429.6 Q(ug)-.2 E F0
+(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
-446.4 Q(ug reports concerning this manual page should be directed to)-.2
+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 -.11(BU)72 463.2 S(GS).11 E F0(It')108 475.2 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 492 R 1.869(ferences between)-.25 F F3
-(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 504 Q F0(speci\214cation.)2.25 E
-(Aliases are confusing in some uses.)108 520.8 Q(Shell b)108 537.6 Q
+.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 554.4 R .39
-(process suspension is attempted.)108 566.4 R .389
+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 578.4 R .192(It suf)5.192 F .192(\214ces to \
+(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 590.4 Q(Array v)108
-607.2 Q(ariables may not \(yet\) be e)-.25 E(xported.)-.15 E
-(There may be only one acti)108 624 Q .3 -.15(ve c)-.25 H
-(oprocess at a time.).15 E(GNU Bash 5.1)72 768 Q(2020 October 29)141.235
-E(83)190.395 E 0 Cg EP
+-.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
index 373c47b1d08da3afd4fcea261c7ba9c46fff3beb..58f08de22a07dd62b4a8771b115be13c8473d37c 100644 (file)
@@ -49,4 +49,4 @@ A\bAU\bUT\bTH\bHO\bOR\bRS\bS
 
 
 
-GNU Bash 5.1                     2020 August 1                      BASHBUG(1)
+GNU Bash 5.2                     2020 August 1                      BASHBUG(1)
index 9c60a331d97e452fd5f4adcfad2af0bb2c4101b6..55fe45ce123dca7a663522f689d741920961eca7 100644 (file)
@@ -1,6 +1,6 @@
 %!PS-Adobe-3.0
 %%Creator: groff version 1.22.4
-%%CreationDate: Fri Aug  7 11:58:10 2020
+%%CreationDate: Tue Jan 11 16:04:43 2022
 %%DocumentNeededResources: font Times-Roman
 %%+ font Times-Bold
 %%+ font Times-Italic
@@ -290,7 +290,7 @@ F2(EDIT)108 300 Q(OR)-.18 E F0 .327(Speci\214es the preferred editor)144
 (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.1)72 768 Q(2020 August 1)145.395 E(1)199.555 E 0 Cg
+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
index 2b682d27696646a1393ebce7d4d6520eedfb49d7..a7a571b8985aded87b1444af733d9d7d33d49198 100644 (file)
Binary files a/doc/bashref.dvi and b/doc/bashref.dvi differ
index 6a4c3ab881254548dfd293812df95dbc83c909a2..928b3ff19156ca6527ecbf6466152fe8fe07ff55 100644 (file)
@@ -1,13 +1,16 @@
 <!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.1, 29 October 2020).
+the Bash shell (version 5.2, 19 September 2022).
 
-This is Edition 5.1, last updated 29 October 2020,
+This is Edition 5.2, last updated 19 September 2022,
 of The GNU Bash Reference Manual,
-for Bash, Version 5.1.
+for Bash, Version 5.2.
 
-Copyright (C) 1988-2020 Free Software Foundation, Inc.
+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
@@ -15,9 +18,6 @@ any later version published by the Free Software Foundation; with no
 Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
 A copy of the license is included in the section entitled
 "GNU Free Documentation License". -->
-<!-- Created by GNU Texinfo 6.7, http://www.gnu.org/software/texinfo/ -->
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 <title>Bash Reference Manual</title>
 
 <meta name="description" content="Bash Reference Manual">
@@ -25,17 +25,21 @@ A copy of the license is included in the section entitled
 <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}
-div.lisp {margin-left: 3.2em}
 kbd {font-style: oblique}
 pre.display {font-family: inherit}
 pre.format {font-family: inherit}
@@ -44,6 +48,7 @@ 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>
@@ -63,7 +68,36 @@ ul.no-bullet {list-style: none}
 
 
 
-<span id="SEC_Contents"></span>
+
+<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">
@@ -266,85 +300,22 @@ ul.no-bullet {list-style: none}
   </ul></li>
 </ul>
 </div>
-
-
-<span id="Top"></span><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.1, 29 October 2020).
-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.1, last updated 29 October 2020,
-of <cite>The GNU Bash Reference Manual</cite>,
-for <code>Bash</code>, Version 5.1.
-</p>
-<p>Bash contains features that appear in other popular shells, and some
-features that only appear in Bash.  Some of the shells that Bash has
-borrowed concepts from are the Bourne Shell (<samp>sh</samp>), the Korn Shell
-(<samp>ksh</samp>), and the C-shell (<samp>csh</samp> and its successor,
-<samp>tcsh</samp>).  The following menu breaks the features up into
-categories, noting which features were inspired by other shells and
-which are specific to Bash.
-</p>
-<p>This manual is meant as a brief introduction to features found in
-Bash.  The Bash manual page should be used as the definitive
-reference on shell behavior.
-</p>
-<table class="menu" border="0" cellspacing="0">
-<tr><td align="left" valign="top">&bull; <a href="#Introduction" accesskey="1">Introduction</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">An introduction to the shell.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Definitions" accesskey="2">Definitions</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Some definitions used in the rest of this
-                               manual.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Basic-Shell-Features" accesskey="3">Basic Shell Features</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">The shell &quot;building blocks&quot;.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Shell-Builtin-Commands" accesskey="4">Shell Builtin Commands</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Commands that are a part of the shell.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Shell-Variables" accesskey="5">Shell Variables</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Variables used or set by Bash.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Bash-Features" accesskey="6">Bash Features</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Features found only in Bash.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Job-Control" accesskey="7">Job Control</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">What job control is and how Bash allows you
-                               to use it.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Command-Line-Editing" accesskey="8">Command Line Editing</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Chapter describing the command line
-                               editing features.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Using-History-Interactively" accesskey="9">Using History Interactively</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Command History Expansion
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Installing-Bash">Installing Bash</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to build and install Bash on your system.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Reporting-Bugs">Reporting Bugs</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to report bugs in Bash.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Major-Differences-From-The-Bourne-Shell">Major Differences From The Bourne Shell</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">A terse list of the differences
-                                               between Bash and historical
-                                               versions of /bin/sh.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#GNU-Free-Documentation-License">GNU Free Documentation License</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Copying and sharing this documentation.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Indexes">Indexes</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Various indexes for this manual.
-</td></tr>
-</table>
-
 <hr>
-<span id="Introduction"></span><div class="header">
+<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">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+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>
-<table class="menu" border="0" cellspacing="0">
-<tr><td align="left" valign="top">&bull; <a href="#What-is-Bash_003f" accesskey="1">What is Bash?</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">A short description of Bash.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#What-is-a-shell_003f" accesskey="2">What is a shell?</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">A brief introduction to shells.
-</td></tr>
-</table>
 
+<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>
-<span id="What-is-Bash_003f"></span><div class="header">
+<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>
@@ -374,7 +345,9 @@ independently-supported ports exist for <small>MS-DOS</small>, <small>OS/2</smal
 and Windows platforms.
 </p>
 <hr>
-<span id="What-is-a-shell_003f"></span><div class="header">
+</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>
@@ -433,146 +406,132 @@ editing, command history and aliases.  Each of these features is
 described in this manual.
 </p>
 <hr>
-<span id="Definitions"></span><div class="header">
+</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">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+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><code>POSIX</code></dt>
-<dd><span id="index-POSIX"></span>
-<p>A family of open system standards based on Unix.  Bash
+<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><code>blank</code></dt>
+<dt><span><code>blank</code></span></dt>
 <dd><p>A space or tab character.
 </p>
 </dd>
-<dt><code>builtin</code></dt>
-<dd><span id="index-builtin-1"></span>
-<p>A command that is implemented internally by the shell itself, rather
+<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><code>control operator</code></dt>
-<dd><span id="index-control-operator"></span>
-<p>A <code>token</code> that performs a control function.  It is a <code>newline</code>
+<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><code>exit status</code></dt>
-<dd><span id="index-exit-status"></span>
-<p>The value returned by a command to its caller.  The value is restricted
+<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><code>field</code></dt>
-<dd><span id="index-field"></span>
-<p>A unit of text that is the result of one of the shell expansions.  After
+<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><code>filename</code></dt>
-<dd><span id="index-filename"></span>
-<p>A string of characters used to identify a file.
+<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><code>job</code></dt>
-<dd><span id="index-job"></span>
-<p>A set of processes comprising a pipeline, and any processes descended
+<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><code>job control</code></dt>
-<dd><span id="index-job-control"></span>
-<p>A mechanism by which users can selectively stop (suspend) and restart
+<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><code>metacharacter</code></dt>
-<dd><span id="index-metacharacter"></span>
-<p>A character that, when unquoted, separates words.  A metacharacter is
+<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><code>name</code></dt>
-<dd><span id="index-name"></span>
-<span id="index-identifier"></span>
+<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><code>operator</code></dt>
-<dd><span id="index-operator_002c-shell"></span>
-<p>A <code>control operator</code> or a <code>redirection operator</code>.
+<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><code>process group</code></dt>
-<dd><span id="index-process-group"></span>
-<p>A collection of related processes each having the same process
+<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><code>process group ID</code></dt>
-<dd><span id="index-process-group-ID"></span>
-<p>A unique identifier that represents a <code>process group</code>
+<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><code>reserved word</code></dt>
-<dd><span id="index-reserved-word"></span>
-<p>A <code>word</code> that has a special meaning to the shell.  Most reserved
+<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><code>return status</code></dt>
-<dd><span id="index-return-status"></span>
-<p>A synonym for <code>exit status</code>.
+<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><code>signal</code></dt>
-<dd><span id="index-signal"></span>
-<p>A mechanism by which a process may be notified by the kernel
+<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><code>special builtin</code></dt>
-<dd><span id="index-special-builtin"></span>
-<p>A shell builtin command that has been classified as special by the
+<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><code>token</code></dt>
-<dd><span id="index-token"></span>
-<p>A sequence of characters considered a single unit by the shell.
+<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><code>word</code></dt>
-<dd><span id="index-word"></span>
-<p>A sequence of characters treated as a unit by the shell.
+<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>
-<span id="Basic-Shell-Features"></span><div class="header">
+</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">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+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>
@@ -590,40 +549,24 @@ shell expansions,
 <i>redirections</i>, which are a way to direct input and output from
 and to named files, and how the shell executes commands.
 </p>
-<table class="menu" border="0" cellspacing="0">
-<tr><td align="left" valign="top">&bull; <a href="#Shell-Syntax" accesskey="1">Shell Syntax</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">What your input means to the shell.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Shell-Commands" accesskey="2">Shell Commands</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">The types of commands you can use.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Shell-Functions" accesskey="3">Shell Functions</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Grouping commands by name.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Shell-Parameters" accesskey="4">Shell Parameters</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How the shell stores values.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Shell-Expansions" accesskey="5">Shell Expansions</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How Bash expands parameters and the various
-                               expansions available.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Redirections" accesskey="6">Redirections</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">A way to control where input and output go.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Executing-Commands" accesskey="7">Executing Commands</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">What happens when you run a command.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Shell-Scripts" accesskey="8">Shell Scripts</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Executing files of shell commands.
-</td></tr>
-</table>
 
+<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>
-<span id="Shell-Syntax"></span><div class="header">
+<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>
-<table class="menu" border="0" cellspacing="0">
-<tr><td align="left" valign="top">&bull; <a href="#Shell-Operation" accesskey="1">Shell Operation</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">The basic operation of the shell.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Quoting" accesskey="2">Quoting</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to remove the special meaning from characters.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Comments" accesskey="3">Comments</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to specify comments.
-</td></tr>
-</table>
 
 <p>When the shell reads input, it proceeds through a
 sequence of operations.  If the input indicates the beginning of a
@@ -640,8 +583,14 @@ 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>
-<span id="Shell-Operation"></span><div class="header">
+<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>
@@ -679,27 +628,14 @@ status (see <a href="#Exit-Status">Exit Status</a>).
 </li></ol>
 
 <hr>
-<span id="Quoting"></span><div class="header">
+</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>
-<table class="menu" border="0" cellspacing="0">
-<tr><td align="left" valign="top">&bull; <a href="#Escape-Character" accesskey="1">Escape Character</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to remove the special meaning from a single
-                       character.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Single-Quotes" accesskey="2">Single Quotes</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to inhibit all interpretation of a sequence
-                       of characters.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Double-Quotes" accesskey="3">Double Quotes</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to suppress most of the interpretation of a
-                       sequence of characters.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#ANSI_002dC-Quoting" accesskey="4">ANSI-C Quoting</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to expand ANSI-C sequences in quoted strings.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Locale-Translation" accesskey="5">Locale Translation</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to translate strings into different languages.
-</td></tr>
-</table>
 
 <p>Quoting is used to remove the special meaning of certain
 characters or words to the shell.  Quoting can be used to
@@ -711,16 +647,24 @@ parameter expansion.
 has special meaning to the shell and must be quoted if it is to
 represent itself.
 When the command history expansion facilities are being used
-(see <a href="#History-Interaction">History Interaction</a>), the
-<var>history expansion</var> character, usually &lsquo;<samp>!</samp>&rsquo;, must be quoted
+(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
-<var>escape character</var>, single quotes, and double quotes.
-</p>
+<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>
-<span id="Escape-Character"></span><div class="header">
+<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>
@@ -733,7 +677,9 @@ is treated as a line continuation (that is, it is removed from
 the input stream and effectively ignored).
 </p>
 <hr>
-<span id="Single-Quotes"></span><div class="header">
+</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>
@@ -744,7 +690,9 @@ of each character within the quotes.  A single quote may not occur
 between single quotes, even when preceded by a backslash.
 </p>
 <hr>
-<span id="Double-Quotes"></span><div class="header">
+</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>
@@ -776,73 +724,76 @@ The backslash preceding the &lsquo;<samp>!</samp>&rsquo; is not removed.
 when in double quotes (see <a href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>).
 </p>
 <hr>
-<span id="ANSI_002dC-Quoting"></span><div class="header">
+</div>
+<div class="subsubsection" id="ANSI_002dC-Quoting">
+<div class="header">
 <p>
-Next: <a href="#Locale-Translation" accesskey="n" rel="next">Locale Translation</a>, Previous: <a href="#Double-Quotes" accesskey="p" rel="prev">Double Quotes</a>, Up: <a href="#Quoting" accesskey="u" rel="up">Quoting</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+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>Words of the form <code>$'<var>string</var>'</code> are treated specially.  The
-word expands to <var>string</var>, with backslash-escaped characters replaced
-as specified by the ANSI C standard.  Backslash escape sequences, if
-present, are decoded as follows:
+<p>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><code>\a</code></dt>
+<dt><span><code>\a</code></span></dt>
 <dd><p>alert (bell)
 </p></dd>
-<dt><code>\b</code></dt>
+<dt><span><code>\b</code></span></dt>
 <dd><p>backspace
 </p></dd>
-<dt><code>\e</code></dt>
-<dt><code>\E</code></dt>
+<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><code>\f</code></dt>
+<dt><span><code>\f</code></span></dt>
 <dd><p>form feed
 </p></dd>
-<dt><code>\n</code></dt>
+<dt><span><code>\n</code></span></dt>
 <dd><p>newline
 </p></dd>
-<dt><code>\r</code></dt>
+<dt><span><code>\r</code></span></dt>
 <dd><p>carriage return
 </p></dd>
-<dt><code>\t</code></dt>
+<dt><span><code>\t</code></span></dt>
 <dd><p>horizontal tab
 </p></dd>
-<dt><code>\v</code></dt>
+<dt><span><code>\v</code></span></dt>
 <dd><p>vertical tab
 </p></dd>
-<dt><code>\\</code></dt>
+<dt><span><code>\\</code></span></dt>
 <dd><p>backslash
 </p></dd>
-<dt><code>\'</code></dt>
+<dt><span><code>\'</code></span></dt>
 <dd><p>single quote
 </p></dd>
-<dt><code>\&quot;</code></dt>
+<dt><span><code>\&quot;</code></span></dt>
 <dd><p>double quote
 </p></dd>
-<dt><code>\?</code></dt>
+<dt><span><code>\?</code></span></dt>
 <dd><p>question mark
 </p></dd>
-<dt><code>\<var>nnn</var></code></dt>
+<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><code>\x<var>HH</var></code></dt>
+<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><code>\u<var>HHHH</var></code></dt>
+<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><code>\U<var>HHHHHHHH</var></code></dt>
+<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><code>\c<var>x</var></code></dt>
+<dt><span><code>\c<var>x</var></code></span></dt>
 <dd><p>a control-<var>x</var> character
 </p></dd>
 </dl>
@@ -851,7 +802,9 @@ present, are decoded as follows:
 been present.
 </p>
 <hr>
-<span id="Locale-Translation"></span><div class="header">
+</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>
@@ -861,32 +814,142 @@ Previous: <a href="#ANSI_002dC-Quoting" accesskey="p" rel="prev">ANSI-C Quoting<
 <span id="index-native-languages"></span>
 <span id="index-translation_002c-native-languages"></span>
 
-<p>A double-quoted string preceded by a dollar sign (&lsquo;<samp>$</samp>&rsquo;)
+<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 <var>gettext</var> infrastructure performs the message catalog lookup and 
-translation, using the <code>LC_MESSAGES</code> and <code>TEXTDOMAIN</code> shell
-variables, as explained below. See the gettext documentation for additional
-details.
+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>,
-or if there are no translations available,
+if there are no translations available,
+of if the string is not translated,
 the dollar sign is ignored.
-If the string is translated and replaced, the replacement is
-double-quoted.
+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>Some systems use the message catalog selected by the <code>LC_MESSAGES</code>
-shell variable.  Others create the name of the message catalog from the
-value of the <code>TEXTDOMAIN</code> shell variable, possibly adding a
-suffix of &lsquo;<samp>.mo</samp>&rsquo;.  If you use the <code>TEXTDOMAIN</code> variable, you
-may need to set the <code>TEXTDOMAINDIR</code> variable to the location of
-the message catalog files.  Still others use both variables in this
-fashion:
-<code>TEXTDOMAINDIR</code>/<code>LC_MESSAGES</code>/LC_MESSAGES/<code>TEXTDOMAIN</code>.mo.
+<p>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>
-<span id="Comments"></span><div class="header">
+</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>
@@ -905,7 +968,10 @@ See <a href="#Interactive-Shells">Interactive Shells</a>, for a description of w
 a shell interactive.
 </p>
 <hr>
-<span id="Shell-Commands"></span><div class="header">
+</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>
@@ -920,26 +986,19 @@ in a variety of ways: in a pipeline in which the output of one command
 becomes the input of a second, in a loop or conditional construct, or in
 some other grouping.
 </p>
-<table class="menu" border="0" cellspacing="0">
-<tr><td align="left" valign="top">&bull; <a href="#Reserved-Words" accesskey="1">Reserved Words</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Words that have special meaning to the shell.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Simple-Commands" accesskey="2">Simple Commands</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">The most common type of command.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Pipelines" accesskey="3">Pipelines</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Connecting the input and output of several
-                               commands.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Lists" accesskey="4">Lists</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to execute commands sequentially.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Compound-Commands" accesskey="5">Compound Commands</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Shell commands for control flow.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Coprocesses" accesskey="6">Coprocesses</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Two-way communication between commands.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#GNU-Parallel" accesskey="7">GNU Parallel</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Running commands in parallel.
-</td></tr>
-</table>
 
+<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>
-<span id="Reserved-Words"></span><div class="header">
+<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>
@@ -965,7 +1024,9 @@ the first word of a command (see below for exceptions):
 words if they are the third word in a <code>for</code> command.
 </p>
 <hr>
-<span id="Simple-Commands"></span><div class="header">
+</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>
@@ -984,9 +1045,11 @@ by the <small>POSIX</small> 1003.1 <code>waitpid</code> function, or 128+<var>n<
 the command was terminated by signal <var>n</var>.
 </p>
 <hr>
-<span id="Pipelines"></span><div class="header">
+</div>
+<div class="subsection" id="Pipelines">
+<div class="header">
 <p>
-Next: <a href="#Lists" accesskey="n" rel="next">Lists</a>, Previous: <a href="#Simple-Commands" accesskey="p" rel="prev">Simple Commands</a>, Up: <a href="#Shell-Commands" accesskey="u" rel="up">Shell Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+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>
@@ -1006,15 +1069,15 @@ one of the control operators &lsquo;<samp>|</samp>&rsquo; or &lsquo;<samp>|&amp;
 <p>The output of each command in the pipeline is connected via a pipe
 to the input of the next command.
 That is, each command reads the previous command&rsquo;s output.  This
-connection is performed before any redirections specified by the
-command.
+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 the command.
+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.
@@ -1038,14 +1101,17 @@ total user and system time consumed by the shell and its children.
 The <code>TIMEFORMAT</code> variable may be used to specify the format of
 the time information.
 </p>
-<p>If the pipeline is not executed asynchronously (see <a href="#Lists">Lists</a>), the
+<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 pipeline is executed in its own subshell, which is a
+<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.
+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
@@ -1061,7 +1127,9 @@ The shell waits for all commands in the pipeline to terminate before
 returning a value.
 </p>
 <hr>
-<span id="Lists"></span><div class="header">
+</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>
@@ -1082,8 +1150,8 @@ to delimit commands, equivalent to a semicolon.
 </p>
 <p>If a command is terminated by the control operator &lsquo;<samp>&amp;</samp>&rsquo;,
 the shell executes the command asynchronously in a subshell.
-This is known as executing the command in the <var>background</var>,
-and these are referred to as <var>asynchronous</var> commands.
+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>),
@@ -1120,21 +1188,15 @@ returns a non-zero exit status.
 executed in the list.
 </p>
 <hr>
-<span id="Compound-Commands"></span><div class="header">
+</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</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>
+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>
 
-<table class="menu" border="0" cellspacing="0">
-<tr><td align="left" valign="top">&bull; <a href="#Looping-Constructs" accesskey="1">Looping Constructs</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Shell commands for iterative action.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Conditional-Constructs" accesskey="2">Conditional Constructs</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Shell commands for conditional execution.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Command-Grouping" accesskey="3">Command Grouping</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Ways to group commands.
-</td></tr>
-</table>
 
 <p>Compound commands are the shell programming language constructs.
 Each construct begins with a reserved word or control operator and is
@@ -1149,8 +1211,14 @@ followed by a newline in place of a semicolon.
 <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>
-<span id="Looping-Constructs"></span><div class="header">
+<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>
@@ -1163,9 +1231,8 @@ Next: <a href="#Conditional-Constructs" accesskey="n" rel="next">Conditional Con
 command&rsquo;s syntax, it may be replaced with one or more newlines.
 </p>
 <dl compact="compact">
-<dt><code>until</code></dt>
-<dd><span id="index-until"></span>
-<span id="index-do"></span>
+<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>
@@ -1179,9 +1246,8 @@ The return status is the exit status of the last command executed
 in <var>consequent-commands</var>, or zero if none was executed.
 </p>
 </dd>
-<dt><code>while</code></dt>
-<dd><span id="index-while"></span>
-<p>The syntax of the <code>while</code> command is:
+<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
@@ -1193,9 +1259,8 @@ The return status is the exit status of the last command executed
 in <var>consequent-commands</var>, or zero if none was executed.
 </p>
 </dd>
-<dt><code>for</code></dt>
-<dd><span id="index-for"></span>
-<p>The syntax of the <code>for</code> command is:
+<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
@@ -1235,17 +1300,18 @@ that is executed, or false if any of the expressions is invalid.
 may be used to control loop execution.
 </p>
 <hr>
-<span id="Conditional-Constructs"></span><div class="header">
+</div>
+<div class="subsubsection" id="Conditional-Constructs">
+<div class="header">
 <p>
-Next: <a href="#Command-Grouping" accesskey="n" rel="next">Command Grouping</a>, Previous: <a href="#Looping-Constructs" accesskey="p" rel="prev">Looping Constructs</a>, Up: <a href="#Compound-Commands" accesskey="u" rel="up">Compound Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+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><code>if</code></dt>
-<dd><span id="index-if"></span>
-<span id="index-then"></span>
+<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>
@@ -1273,9 +1339,8 @@ The return status is the exit status of the last command executed, or
 zero if no condition tested true.
 </p>
 </dd>
-<dt><code>case</code></dt>
-<dd><span id="index-case"></span>
-<span id="index-in"></span>
+<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>
@@ -1302,9 +1367,10 @@ as a <var>clause</var>.
 The <var>word</var> undergoes tilde expansion, parameter expansion, command
 substitution, arithmetic expansion, and quote removal
 (see <a href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>)
-before matching is
-attempted.  Each <var>pattern</var> undergoes tilde expansion, parameter
-expansion, command substitution, and arithmetic expansion.
+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;.
@@ -1342,9 +1408,8 @@ continuing the case statement execution as if the pattern list had not matched.
 return status is the exit status of the <var>command-list</var> executed.
 </p>
 </dd>
-<dt><code>select</code></dt>
-<dd><span id="index-select"></span>
-
+<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>
@@ -1353,16 +1418,16 @@ It has almost the same syntax as the <code>for</code> command:
 </pre></div>
 
 <p>The list of words following <code>in</code> is expanded, generating a list
-of items.  The set of expanded words is printed on the standard
+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.
-The <code>PS3</code> prompt is then displayed and a line is read from the
-standard input.
+<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.
+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>
@@ -1383,24 +1448,24 @@ done
 </pre></div>
 
 </dd>
-<dt><code>((&hellip;))</code></dt>
+<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.  This is exactly equivalent to
-</p><div class="example">
-<pre class="example">let &quot;<var>expression</var>&quot;
-</pre></div>
-<p>See <a href="#Bash-Builtins">Bash Builtins</a>, for a full description of the <code>let</code> builtin.
+otherwise the return status is 1. 
 </p>
+
 </dd>
-<dt><code>[[&hellip;]]</code></dt>
-<dd><span id="index-_005b_005b"></span>
-<span id="index-_005d_005d"></span>
+<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>
@@ -1409,10 +1474,12 @@ otherwise the return status is 1.  This is exactly equivalent to
 the conditional expression <var>expression</var>.
 Expressions are composed of the primaries described below in
 <a href="#Bash-Conditional-Expressions">Bash Conditional Expressions</a>.
-Word splitting and filename expansion are not performed on the words
-between the <code>[[</code> and <code>]]</code>; tilde expansion, parameter and
+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 are performed.
+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>
@@ -1430,78 +1497,110 @@ is enabled, the match is performed without regard to the case
 of alphabetic characters.
 The return value is 0 if the string matches (&lsquo;<samp>==</samp>&rsquo;) or does not
 match (&lsquo;<samp>!=</samp>&rsquo;) the pattern, and 1 otherwise.
-Any part of the pattern may be quoted to force the quoted portion
-to be matched as a string.
+</p>
+<p>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 it is used, the string to the right of the operator is considered
-a <small>POSIX</small> extended regular expression and matched accordingly
+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 otherwise.
+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&rsquo;s return value is 2.
+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.
-Any part of the pattern may be quoted to force the quoted portion
-to be matched as a string.
-Bracket expressions in regular expressions must be treated carefully,
-since normal quoting characters lose their meanings between brackets.
+</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 as a string.
+expansion forces the entire pattern to be matched literally.
 </p>
 <p>The pattern will match if it matches any part of the string.
-Anchor the pattern using the &lsquo;<samp>^</samp>&rsquo; and &lsquo;<samp>$</samp>&rsquo; regular expression
-operators to force it to match the entire string.
-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.
+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 <var>line</var>)
+(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,
-zero or one instances of &lsquo;<samp>a</samp>&rsquo;, then a &lsquo;<samp>b</samp>&rsquo;:
-</p><div class="example">
+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 like &lsquo;<samp>aab</samp>&rsquo; and &lsquo;<samp>  aaaaaab</samp>&rsquo; will match, as
-will a line containing a &lsquo;<samp>b</samp>&rsquo; anywhere in its value.
+<p>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>Storing the regular expression in a shell variable is often a useful
+<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.
-It is sometimes difficult to specify a regular expression literally
-without using quotes, or to keep track of the quoting used by regular
-expressions while paying attention to the shell&rsquo;s quote removal.
-Using a shell variable to store the pattern decreases these problems.
-For example, the following is equivalent to the above:
-</p><div class="example">
+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>If you want to match a character that&rsquo;s special to the regular expression
-grammar, it has to be quoted to remove its special meaning.
-This means that in the pattern &lsquo;<samp>xxx.txt</samp>&rsquo;, the &lsquo;<samp>.</samp>&rsquo; matches any
-character in the string (its usual regular expression meaning), but in the
-pattern &lsquo;<samp>&quot;xxx.txt&quot;</samp>&rsquo; it can only match a literal &lsquo;<samp>.</samp>&rsquo;.
-Shell programmers should take special care with backslashes, since backslashes
-are used both by the shell and regular expressions to remove the special
-meaning from the following character.
-The following two sets of commands are <em>not</em> equivalent:
-</p><div class="example">
+<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 ]]
@@ -1513,30 +1612,71 @@ The following two sets of commands are <em>not</em> equivalent:
 
 <p>The first two matches will succeed, but the second two will not, because
 in the second two the backslash will be part of the pattern to be matched.
-In the first two examples, the backslash removes the special meaning from
+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><code>( <var>expression</var> )</code></dt>
+<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><code>! <var>expression</var></code></dt>
+<dt><span><code>! <var>expression</var></code></span></dt>
 <dd><p>True if <var>expression</var> is false.
 </p>
 </dd>
-<dt><code><var>expression1</var> &amp;&amp; <var>expression2</var></code></dt>
+<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><code><var>expression1</var> || <var>expression2</var></code></dt>
+<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>
@@ -1548,7 +1688,9 @@ value of the entire conditional expression.
 </dl>
 
 <hr>
-<span id="Command-Grouping"></span><div class="header">
+</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>
@@ -1561,21 +1703,20 @@ to the entire command list.  For example, the output of all the
 commands in the list may be redirected to a single stream.
 </p>
 <dl compact="compact">
-<dt><code>()</code></dt>
+<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 causes a subshell
-environment to be created (see <a href="#Command-Execution-Environment">Command Execution Environment</a>), and each
-of the commands in <var>list</var> to be executed in that subshell.  Since the
-<var>list</var> is executed in a subshell, variable assignments do not remain in
-effect after the subshell completes. 
+<p>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><code>{}</code></dt>
-<dd><span id="index-_007b"></span>
-<span id="index-_007d"></span>
+<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>
@@ -1588,9 +1729,9 @@ The semicolon (or newline) following <var>list</var> is required.
 
 <p>In addition to the creation of a subshell, there is a subtle difference
 between these two constructs due to historical reasons.  The braces
-are <code>reserved words</code>, so they must be separated from the <var>list</var>
+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 <code>operators</code>, and are
+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>
@@ -1598,7 +1739,10 @@ from the <var>list</var> by whitespace.
 <var>list</var>.
 </p>
 <hr>
-<span id="Coprocesses"></span><div class="header">
+</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>
@@ -1611,26 +1755,53 @@ A coprocess is executed asynchronously in a subshell, as if the command
 had been terminated with the &lsquo;<samp>&amp;</samp>&rsquo; control operator, with a two-way pipe
 established between the executing shell and the coprocess.
 </p>
-<p>The format for a coprocess is:
-</p><div class="example">
+<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>.
-If <var>NAME</var> is not supplied, the default name is <var>COPROC</var>.
-<var>NAME</var> must not be supplied if <var>command</var> is a simple
-command (see <a href="#Simple-Commands">Simple Commands</a>); otherwise, it is interpreted as
-the first word of the simple command.
+<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 <code>NAME</code> in the context of the executing shell.
+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 <code>NAME</code>[0].
+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 <code>NAME</code>[1].
+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
@@ -1639,7 +1810,7 @@ Other than those created to execute command and process substitutions,
 the file descriptors are not available in subshells.
 </p>
 <p>The process ID of the shell spawned to execute the coprocess is
-available as the value of the variable <code>NAME</code>_PID.
+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>
@@ -1648,7 +1819,9 @@ the <code>coproc</code> command always returns success.
 The return status of a coprocess is the exit status of <var>command</var>.
 </p>
 <hr>
-<span id="GNU-Parallel"></span><div class="header">
+</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>
@@ -1665,113 +1838,15 @@ Parallel provides shorthand references to many of the most common operations
 the input source, and so on).  Parallel can replace <code>xargs</code> or feed
 commands from its input sources to several different instances of Bash.
 </p>
-<p>For a complete description, refer to the GNU Parallel documentation.  A few
-examples should provide a brief introduction to its use.
-</p>
-<p>For example, it is easy to replace <code>xargs</code> to gzip all html files in the
-current directory and its subdirectories:
-</p><div class="example">
-<pre class="example">find . -type f -name '*.html' -print | parallel gzip
-</pre></div>
-<p>If you need to protect special characters such as newlines in file names,
-use find&rsquo;s <samp>-print0</samp> option and parallel&rsquo;s <samp>-0</samp> option.
-</p>
-<p>You can use Parallel to move files from the current directory when the
-number of files is too large to process with one <code>mv</code> invocation:
-</p><div class="example">
-<pre class="example">printf '%s\n' * | parallel mv {} destdir
-</pre></div>
-
-<p>As you can see, the {} is replaced with each line read from standard input.
-While using <code>ls</code> will work in most instances, it is not sufficient to
-deal with all filenames. <code>printf</code> is a shell builtin, and therefore is
-not subject to the kernel&rsquo;s limit on the number of arguments to a program,
-so you can use &lsquo;<samp>*</samp>&rsquo; (but see below about the <code>dotglob</code> shell option).
-If you need to accommodate special characters in filenames, you can use
-</p>
-<div class="example">
-<pre class="example">printf '%s\0' * | parallel -0 mv {} destdir
-</pre></div>
-
-<p>as alluded to above.
-</p>
-<p>This will run as many <code>mv</code> commands as there are files in the current
-directory.
-You can emulate a parallel <code>xargs</code> by adding the <samp>-X</samp> option:
-</p><div class="example">
-<pre class="example">printf '%s\0' * | parallel -0 -X mv {} destdir
-</pre></div>
-
-<p>(You may have to modify the pattern if you have the <code>dotglob</code> option
-enabled.)
-</p>
-<p>GNU Parallel can replace certain common idioms that operate on lines read
-from a file (in this case, filenames listed one per line):
-</p><div class="example">
-<pre class="example">  while IFS= read -r x; do
-               do-something1 &quot;$x&quot; &quot;config-$x&quot;
-               do-something2 &lt; &quot;$x&quot;
-       done &lt; file | process-output
-</pre></div>
-
-<p>with a more compact syntax reminiscent of lambdas:
-</p><div class="example">
-<pre class="example">cat list | parallel &quot;do-something1 {} config-{} ; do-something2 &lt; {}&quot; |
-           process-output
-</pre></div>
-
-<p>Parallel provides a built-in mechanism to remove filename extensions, which
-lends itself to batch file transformations or renaming:
-</p><div class="example">
-<pre class="example">ls *.gz | parallel -j+0 &quot;zcat {} | bzip2 &gt;{.}.bz2 &amp;&amp; rm {}&quot;
-</pre></div>
-<p>This will recompress all files in the current directory with names ending
-in .gz using bzip2, running one job per CPU (-j+0) in parallel.
-(We use <code>ls</code> for brevity here; using <code>find</code> as above is more
-robust in the face of filenames containing unexpected characters.)
-Parallel can take arguments from the command line; the above can also be
-written as
-</p>
-<div class="example">
-<pre class="example">parallel &quot;zcat {} | bzip2 &gt;{.}.bz2 &amp;&amp; rm {}&quot; ::: *.gz
-</pre></div>
-
-<p>If a command generates output, you may want to preserve the input order in
-the output.  For instance, the following command
-</p><div class="example">
-<pre class="example">{
-    echo foss.org.my ;
-    echo debian.org ;
-    echo freenetproject.org ;
-} | parallel traceroute
-</pre></div>
-<p>will display as output the traceroute invocation that finishes first.
-Adding the <samp>-k</samp> option 
-</p><div class="example">
-<pre class="example">{
-    echo foss.org.my ;
-    echo debian.org ;
-    echo freenetproject.org ;
-} | parallel -k traceroute
-</pre></div>
-<p>will ensure that the output of <code>traceroute foss.org.my</code> is displayed first.
-</p>
-<p>Finally, Parallel can be used to run a sequence of shell commands in parallel,
-similar to &lsquo;<samp>cat file | bash</samp>&rsquo;.
-It is not uncommon to take a list of filenames, create a series of shell
-commands to operate on them, and feed that list of commands to a shell.
-Parallel can speed this up.  Assuming that <samp>file</samp> contains a list of
-shell commands, one per line,
-</p>
-<div class="example">
-<pre class="example">parallel -j 10 &lt; file
-</pre></div>
-
-<p>will evaluate the commands using the shell (since no explicit command is
-supplied as an argument), in blocks of ten shell jobs at a time.
+<p>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>
-<span id="Shell-Functions"></span><div class="header">
+</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>
@@ -1803,16 +1878,16 @@ shell context; no new process is created to interpret them.
 word <code>function</code> is optional.
 If the <code>function</code> reserved
 word is supplied, the parentheses are optional.
-The <var>body</var> of the function is the compound command
+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,
-with one exception: If the <code>function</code> reserved word is used, but the
-parentheses are not supplied, the braces are required.                   
+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 command.
+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 <var>name</var> and
+<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
@@ -1879,17 +1954,29 @@ return status is the exit status of the last command executed
 before the <code>return</code>.
 </p>
 <p>Variables local to the function may be declared with the
-<code>local</code> builtin.  These variables are visible only to
+<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 <var>dynamic scoping</var> to control a variable&rsquo;s visibility
+<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
@@ -1901,11 +1988,11 @@ This is also the value that a local variable
 declaration &quot;shadows&quot;, and the value that is restored when the function
 returns.
 </p>
-<p>For example, if a variable <var>var</var> is declared as local in function
-<var>func1</var>, and <var>func1</var> calls another function <var>func2</var>,
-references to <var>var</var> made from within <var>func2</var> will resolve to the
-local variable <var>var</var> from <var>func1</var>, shadowing any global variable
-named <var>var</var>.
+<p>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
@@ -1935,20 +2022,23 @@ 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.
+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 Builtins</a>).
+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 subshells
+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>).
@@ -1959,7 +2049,9 @@ function call stack and restrict the number of function invocations.
 By default, no limit is placed on the number of recursive  calls.
 </p>
 <hr>
-<span id="Shell-Parameters"></span><div class="header">
+</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>
@@ -1968,20 +2060,14 @@ Next: <a href="#Shell-Expansions" accesskey="n" rel="next">Shell Expansions</a>,
 <span id="index-variable_002c-shell"></span>
 <span id="index-shell-variable"></span>
 
-<table class="menu" border="0" cellspacing="0">
-<tr><td align="left" valign="top">&bull; <a href="#Positional-Parameters" accesskey="1">Positional Parameters</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">The shell&rsquo;s command-line arguments.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Special-Parameters" accesskey="2">Special Parameters</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Parameters denoted by special characters.
-</td></tr>
-</table>
 
-<p>A <var>parameter</var> is an entity that stores values.
+<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 <var>variable</var> is a parameter denoted by a <code>name</code>.
-A variable has a <var>value</var> and zero or more <var>attributes</var>.
+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 Builtins</a>).
+(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
@@ -1995,17 +2081,16 @@ the <code>unset</code> builtin command.
 is not given, the variable is assigned the null string.  All
 <var>value</var>s undergo tilde expansion, parameter and variable expansion,
 command substitution, arithmetic expansion, and quote
-removal (detailed below).  If the variable has its <code>integer</code>
+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 is not performed, with the exception
-of <code>&quot;$@&quot;</code> as explained below.
-Filename expansion is not performed.
+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 (<var>declaration</var> commands).
+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.
@@ -2015,8 +2100,8 @@ to a shell variable or array index (see <a href="#Arrays">Arrays</a>), the &lsqu
 operator can be used to   
 append to or add to the variable&rsquo;s previous value.
 This includes arguments to builtin commands such as <code>declare</code> that
-accept assignment statements (<var>declaration</var> commands).
-When &lsquo;<samp>+=</samp>&rsquo; is applied to a variable for which the <var>integer</var> attribute
+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
@@ -2028,10 +2113,10 @@ in an associative array.
 When applied to a string-valued variable, <var>value</var> is expanded and
 appended to the variable&rsquo;s value.
 </p>
-<p>A variable can be assigned the <var>nameref</var> attribute using the
+<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 Builtins</a>)
-to create a <var>nameref</var>, or a reference to another variable.
+(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
@@ -2045,9 +2130,9 @@ argument, running
 </p><div class="example">
 <pre class="example">declare -n ref=$1
 </pre></div>
-<p>inside the function creates a nameref variable <var>ref</var> whose value is
+<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 <var>ref</var>, and changes to its attributes,
+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>
@@ -2063,15 +2148,20 @@ Namerefs can be unset using the <samp>-n</samp> option to the <code>unset</code>
 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>
-<span id="Positional-Parameters"></span><div class="header">
+<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 <var>positional parameter</var> is a parameter denoted by one or more
+<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.
@@ -2088,7 +2178,9 @@ temporarily replaced when a shell function is executed
 digit is expanded, it must be enclosed in braces.
 </p>
 <hr>
-<span id="Special-Parameters"></span><div class="header">
+</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>
@@ -2099,9 +2191,7 @@ Previous: <a href="#Positional-Parameters" accesskey="p" rel="prev">Positional P
 only be referenced; assignment to them is not allowed.
 </p>
 <dl compact="compact">
-<dt><code>*</code>
-<span id="index-_002a"></span>
-</dt>
+<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
@@ -2119,9 +2209,7 @@ If <code>IFS</code> is null, the parameters are joined without intervening
 separators.
 </p>
 </dd>
-<dt><code>@</code>
-<span id="index-_0040"></span>
-</dt>
+<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
@@ -2144,24 +2232,18 @@ When there are no positional parameters, <code>&quot;$@&quot;</code> and
 expand to nothing (i.e., they are removed).
 </p>
 </dd>
-<dt><code>#</code>
-<span id="index-_0023"></span>
-</dt>
+<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><code>?</code>
-<span id="index-_003f"></span>
-</dt>
+<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><code>-</code>
-<span id="index-_002d"></span>
-</dt>
+<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>
@@ -2169,26 +2251,20 @@ builtin command, or those set by the shell itself
 (such as the <samp>-i</samp> option).
 </p>
 </dd>
-<dt><code>$</code>
-<span id="index-_0024"></span>
-</dt>
+<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 <code>()</code> subshell, it
+<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><code>!</code>
-<span id="index-_0021-1"></span>
-</dt>
+<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><code>0</code>
-<span id="index-0"></span>
-</dt>
+<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
@@ -2201,7 +2277,10 @@ to the filename used to invoke Bash, as given by argument zero.
 </dl>
 
 <hr>
-<span id="Shell-Expansions"></span><div class="header">
+</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>
@@ -2221,29 +2300,6 @@ Next: <a href="#Redirections" accesskey="n" rel="next">Redirections</a>, Previou
 </li><li> filename expansion
 </li></ul>
 
-<table class="menu" border="0" cellspacing="0">
-<tr><td align="left" valign="top">&bull; <a href="#Brace-Expansion" accesskey="1">Brace Expansion</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Expansion of expressions within braces.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Tilde-Expansion" accesskey="2">Tilde Expansion</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Expansion of the ~ character.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Shell-Parameter-Expansion" accesskey="3">Shell Parameter Expansion</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How Bash expands variables to their values.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Command-Substitution" accesskey="4">Command Substitution</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Using the output of a command as an argument.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Arithmetic-Expansion" accesskey="5">Arithmetic Expansion</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to use arithmetic in shell expansions.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Process-Substitution" accesskey="6">Process Substitution</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">A way to write and read to and from a
-                               command.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Word-Splitting" accesskey="7">Word Splitting</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How the results of expansion are split into separate
-                       arguments.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Filename-Expansion" accesskey="8">Filename Expansion</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">A shorthand for specifying filenames matching patterns.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Quote-Removal" accesskey="9">Quote Removal</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How and when quote characters are removed from
-                       words.
-</td></tr>
-</table>
 
 <p>The order of expansions is:
 brace expansion;
@@ -2253,14 +2309,14 @@ word splitting;
 and filename expansion.
 </p>
 <p>On systems that can support it, there is an additional expansion
-available: <var>process substitution</var>.
+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
-(<var>quote removal</var>).
+(<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
@@ -2273,8 +2329,20 @@ The only exceptions to this are the expansions of
 <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>
-<span id="Brace-Expansion"></span><div class="header">
+<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>
@@ -2284,7 +2352,7 @@ Next: <a href="#Tilde-Expansion" accesskey="n" rel="next">Tilde Expansion</a>, U
 
 <p>Brace expansion is a mechanism by which arbitrary strings may be generated.
 This mechanism is similar to
-<var>filename expansion</var> (see <a href="#Filename-Expansion">Filename Expansion</a>),
+<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
@@ -2304,7 +2372,7 @@ ade ace abe
 </pre></div>
 
 <p>A sequence expression takes the form <code>{<var>x</var>..<var>y</var>[..<var>incr</var>]}</code>,
-where <var>x</var> and <var>y</var> are either integers or single characters,
+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.
@@ -2313,10 +2381,11 @@ same width.
 When either <var>x</var> or <var>y</var> begins with a zero, the shell
 attempts to force all generated terms to contain the same number of digits,
 zero-padding where necessary.
-When characters are supplied, the expression expands to each character
+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.
+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>
@@ -2349,7 +2418,9 @@ above example:
 </pre></div>
 
 <hr>
-<span id="Tilde-Expansion"></span><div class="header">
+</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>
@@ -2359,10 +2430,10 @@ Next: <a href="#Shell-Parameter-Expansion" accesskey="n" rel="next">Shell Parame
 
 <p>If a word begins with an unquoted tilde character (&lsquo;<samp>~</samp>&rsquo;), all of the
 characters up to the first unquoted slash (or all characters,
-if there is no unquoted slash) are considered a <var>tilde-prefix</var>.
+if 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 <var>login name</var>.
+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
@@ -2397,35 +2468,35 @@ and the shell assigns the expanded value.
 <p>The following table shows how Bash treats unquoted tilde-prefixes:
 </p>
 <dl compact="compact">
-<dt><code>~</code></dt>
+<dt><span><code>~</code></span></dt>
 <dd><p>The value of <code>$HOME</code>
 </p></dd>
-<dt><code>~/foo</code></dt>
+<dt><span><code>~/foo</code></span></dt>
 <dd><p><samp>$HOME/foo</samp>
 </p>
 </dd>
-<dt><code>~fred/foo</code></dt>
+<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><code>~+/foo</code></dt>
+<dt><span><code>~+/foo</code></span></dt>
 <dd><p><samp>$PWD/foo</samp>
 </p>
 </dd>
-<dt><code>~-/foo</code></dt>
+<dt><span><code>~-/foo</code></span></dt>
 <dd><p><samp>${OLDPWD-'~-'}/foo</samp>
 </p>
 </dd>
-<dt><code>~<var>N</var></code></dt>
+<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><code>~+<var>N</var></code></dt>
+<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><code>~-<var>N</var></code></dt>
+<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>
@@ -2433,11 +2504,13 @@ and the shell assigns the expanded value.
 <p>Bash also performs tilde expansion on words satisfying the conditions of
 variable assignments (see <a href="#Shell-Parameters">Shell Parameters</a>)
 when they appear as arguments to simple commands.
-Bash does not do this, except for the <var>declaration</var> commands listed
+Bash does not do this, except for the declaration commands listed
 above, when in <small>POSIX</small> mode.
 </p>
 <hr>
-<span id="Shell-Parameter-Expansion"></span><div class="header">
+</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>
@@ -2467,7 +2540,7 @@ or when <var>parameter</var> is followed by a character that is not to be
 interpreted as part of its name.
 </p>
 <p>If the first character of <var>parameter</var> is an exclamation point (!),
-and <var>parameter</var> is not a <var>nameref</var>,
+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
@@ -2496,13 +2569,19 @@ the operator tests for both <var>parameter</var>&rsquo;s existence and that its
 is not null; if the colon is omitted, the operator tests only for existence.
 </p>
 <dl compact="compact">
-<dt><code>${<var>parameter</var>:-<var>word</var>}</code></dt>
+<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><code>${<var>parameter</var>:=<var>word</var>}</code></dt>
+<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>.
@@ -2510,8 +2589,15 @@ 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><code>${<var>parameter</var>:?<var>word</var>}</code></dt>
+<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>
@@ -2519,19 +2605,31 @@ 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><code>${<var>parameter</var>:+<var>word</var>}</code></dt>
+<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><code>${<var>parameter</var>:<var>offset</var>}</code></dt>
-<dt><code>${<var>parameter</var>:<var>offset</var>:<var>length</var>}</code></dt>
+<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;, an indexed array subscripted by
+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
@@ -2606,8 +2704,8 @@ bc
 $ echo ${array[0]: -7:-2}
 bcdef
 </pre>
-<p>If <var>parameter</var> is &lsquo;<samp>@</samp>&rsquo;, the result is <var>length</var> positional
-parameters beginning at <var>offset</var>.
+<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.
@@ -2669,16 +2767,16 @@ If <var>offset</var> is 0, and the positional parameters are used, <code>$0</cod
 prefixed to the list.
 </p>
 </dd>
-<dt><code>${!<var>prefix</var>*}</code></dt>
-<dt><code>${!<var>prefix</var>@}</code></dt>
+<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><code>${!<var>name</var>[@]}</code></dt>
-<dt><code>${!<var>name</var>[*]}</code></dt>
+<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
@@ -2687,7 +2785,7 @@ When &lsquo;<samp>@</samp>&rsquo; is used and the expansion appears within doubl
 key expands to a separate word.
 </p>
 </dd>
-<dt><code>${#<var>parameter</var>}</code></dt>
+<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
@@ -2701,8 +2799,8 @@ interpreted as relative to one greater than the maximum index of
 array, and an index of -1 references the last element.
 </p>
 </dd>
-<dt><code>${<var>parameter</var>#<var>word</var>}</code></dt>
-<dt><code>${<var>parameter</var>##<var>word</var>}</code></dt>
+<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
@@ -2719,8 +2817,8 @@ the pattern removal operation is applied to each member of the
 array in turn, and the expansion is the resultant list.
 </p>
 </dd>
-<dt><code>${<var>parameter</var>%<var>word</var>}</code></dt>
-<dt><code>${<var>parameter</var>%%<var>word</var>}</code></dt>
+<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>).
@@ -2737,23 +2835,99 @@ the pattern removal operation is applied to each member of the
 array in turn, and the expansion is the resultant list.
 </p>
 </dd>
-<dt><code>${<var>parameter</var>/<var>pattern</var>/<var>string</var>}</code></dt>
-<dd>
-<p>The <var>pattern</var> is expanded to produce a pattern just as in
+<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>).
-If <var>pattern</var> begins with &lsquo;<samp>/</samp>&rsquo;, all matches of <var>pattern</var> are
-replaced with <var>string</var>.  Normally only the first match is replaced.
-If <var>pattern</var> begins with &lsquo;<samp>#</samp>&rsquo;, it must match at the beginning
-of the expanded value of <var>parameter</var>.
-If <var>pattern</var> begins with &lsquo;<samp>%</samp>&rsquo;, it must match at the end
-of the expanded value of <var>parameter</var>.
-If <var>string</var> is null, matches of <var>pattern</var> are deleted
-and the <code>/</code> following <var>pattern</var> may be omitted.
-If the <code>nocasematch</code> shell option   
+</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.
@@ -2766,17 +2940,18 @@ the substitution operation is applied to each member of the
 array in turn, and the expansion is the resultant list.
 </p>
 </dd>
-<dt><code>${<var>parameter</var>^<var>pattern</var>}</code></dt>
-<dt><code>${<var>parameter</var>^^<var>pattern</var>}</code></dt>
-<dt><code>${<var>parameter</var>,<var>pattern</var>}</code></dt>
-<dt><code>${<var>parameter</var>,,<var>pattern</var>}</code></dt>
+<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.
-The &lsquo;<samp>^</samp>&rsquo; operator converts lowercase letters matching <var>pattern</var>
+</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
@@ -2784,7 +2959,8 @@ expanded value; the &lsquo;<samp>^</samp>&rsquo; and &lsquo;<samp>,</samp>&rsquo
 the first character in the expanded value.
 If <var>pattern</var> is omitted, it is treated like a &lsquo;<samp>?</samp>&rsquo;, which matches
 every character.
-If <var>parameter</var> is &lsquo;<samp>@</samp>&rsquo; or &lsquo;<samp>*</samp>&rsquo;,
+</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>
@@ -2793,51 +2969,55 @@ the case modification operation is applied to each member of the
 array in turn, and the expansion is the resultant list.
 </p>
 </dd>
-<dt><code>${<var>parameter</var>@<var>operator</var>}</code></dt>
+<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><code>U</code></dt>
+<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><code>u</code></dt>
+<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><code>L</code></dt>
+<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><code>Q</code></dt>
+<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><code>E</code></dt>
+<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><code>P</code></dt>
+<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><code>A</code></dt>
+<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><code>K</code></dt>
+<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><code>a</code></dt>
+<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;,
@@ -2854,7 +3034,9 @@ expansion as described below.
 </dl>
 
 <hr>
-<span id="Command-Substitution"></span><div class="header">
+</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>
@@ -2895,7 +3077,9 @@ form, escape the inner backquotes with backslashes.
 filename expansion are not performed on the results.
 </p>
 <hr>
-<span id="Arithmetic-Expansion"></span><div class="header">
+</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>
@@ -2910,8 +3094,10 @@ and the substitution of the result.  The format for arithmetic expansion is:
 <pre class="example">$(( <var>expression</var> ))
 </pre></div>
 
-<p>The expression is treated as if it were within double quotes, but
-a double quote inside the parentheses is not treated specially.
+<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.
@@ -2923,7 +3109,9 @@ If the expression is invalid, Bash prints a message indicating
 failure to the standard error and no substitution occurs.
 </p>
 <hr>
-<span id="Process-Substitution"></span><div class="header">
+</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>
@@ -2960,7 +3148,9 @@ parameter and variable expansion, command substitution, and arithmetic
 expansion.
 </p>
 <hr>
-<span id="Word-Splitting"></span><div class="header">
+</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>
@@ -3008,15 +3198,13 @@ null argument removal.
 is performed.
 </p>
 <hr>
-<span id="Filename-Expansion"></span><div class="header">
+</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>
-<table class="menu" border="0" cellspacing="0">
-<tr><td align="left" valign="top">&bull; <a href="#Pattern-Matching" accesskey="1">Pattern Matching</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How the shell matches patterns.
-</td></tr>
-</table>
 <span id="index-expansion_002c-filename"></span>
 <span id="index-expansion_002c-pathname"></span>
 <span id="index-filename-expansion"></span>
@@ -3042,9 +3230,13 @@ without regard to the case of alphabetic characters.
 <p>When a pattern is used for filename expansion, the character &lsquo;<samp>.</samp>&rsquo;
 at the start of a filename or immediately following a slash
 must be matched explicitly, unless the shell option <code>dotglob</code> is set.
-The filenames &lsquo;<samp>.</samp>&rsquo; and &lsquo;<samp>..</samp>&rsquo; must always be matched explicitly,
+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.
-In other cases, the &lsquo;<samp>.</samp>&rsquo; character is not treated specially.
+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
@@ -3053,6 +3245,7 @@ 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>
@@ -3075,8 +3268,12 @@ To get the old behavior of ignoring filenames beginning with a
 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>
-<span id="Pattern-Matching"></span><div class="header">
+<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>
@@ -3094,7 +3291,7 @@ literally.
 </p>
 <p>The special pattern characters have the following meanings:
 </p><dl compact="compact">
-<dt><code>*</code></dt>
+<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
@@ -3103,10 +3300,10 @@ subdirectories.
 If followed by a &lsquo;<samp>/</samp>&rsquo;, two adjacent &lsquo;<samp>*</samp>&rsquo;s will match only
 directories and subdirectories.
 </p></dd>
-<dt><code>?</code></dt>
+<dt><span><code>?</code></span></dt>
 <dd><p>Matches any single character.
 </p></dd>
-<dt><code>[&hellip;]</code></dt>
+<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,
@@ -3117,20 +3314,22 @@ then any character not enclosed is matched.  A &lsquo;<samp>-</samp>&rsquo;
 may be matched by including it as the first or last character
 in the set.  A &lsquo;<samp>]</samp>&rsquo; may be matched by including it as the first
 character in the set.
-The sorting order of characters in range expressions is determined by
+The 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>[aBbCcDdxXyYz]</samp>&rsquo;, for example.  To obtain
+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;, <var>character classes</var> can be specified
+<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:
@@ -3142,7 +3341,7 @@ print   punct   space   upper   word    xdigit
 The <code>word</code> character class matches letters, digits, and the character
 &lsquo;<samp>_</samp>&rsquo;.
 </p>
-<p>Within &lsquo;<samp>[</samp>&rsquo; and &lsquo;<samp>]</samp>&rsquo;, an <var>equivalence class</var> can be
+<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>.
@@ -3153,34 +3352,53 @@ matches the collating symbol <var>symbol</var>.
 </dl>
 
 <p>If the <code>extglob</code> shell option is enabled using the <code>shopt</code>
-builtin, several extended pattern matching operators are recognized.
+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><code>?(<var>pattern-list</var>)</code></dt>
+<dt><span><code>?(<var>pattern-list</var>)</code></span></dt>
 <dd><p>Matches zero or one occurrence of the given patterns.
 </p>
 </dd>
-<dt><code>*(<var>pattern-list</var>)</code></dt>
+<dt><span><code>*(<var>pattern-list</var>)</code></span></dt>
 <dd><p>Matches zero or more occurrences of the given patterns.
 </p>
 </dd>
-<dt><code>+(<var>pattern-list</var>)</code></dt>
+<dt><span><code>+(<var>pattern-list</var>)</code></span></dt>
 <dd><p>Matches one or more occurrences of the given patterns.
 </p>
 </dd>
-<dt><code>@(<var>pattern-list</var>)</code></dt>
+<dt><span><code>@(<var>pattern-list</var>)</code></span></dt>
 <dd><p>Matches one of the given patterns.
 </p>
 </dd>
-<dt><code>!(<var>pattern-list</var>)</code></dt>
+<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.
@@ -3188,7 +3406,10 @@ Using separate matches against shorter strings, or using arrays of
 strings instead of a single long string, may be faster.
 </p>
 <hr>
-<span id="Quote-Removal"></span><div class="header">
+</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>
@@ -3199,7 +3420,10 @@ characters &lsquo;<samp>\</samp>&rsquo;, &lsquo;<samp>'</samp>&rsquo;, and &lsqu
 result from one of the above expansions are removed.
 </p>
 <hr>
-<span id="Redirections"></span><div class="header">
+</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>
@@ -3207,9 +3431,9 @@ Next: <a href="#Executing-Commands" accesskey="n" rel="next">Executing Commands<
 <span id="index-redirection"></span>
 
 <p>Before a command is executed, its input and output
-may be <var>redirected</var>
+may be <em>redirected</em>
 using a special notation interpreted by the shell.
-Redirection allows commands&rsquo; file handles to be
+<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.
@@ -3230,6 +3454,8 @@ 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
@@ -3265,29 +3491,29 @@ special files, bash will use them; otherwise it will emulate them
 internally with the behavior described below.
 </p>
 <dl compact="compact">
-<dt><code>/dev/fd/<var>fd</var></code></dt>
+<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><code>/dev/stdin</code></dt>
+<dt><span><code>/dev/stdin</code></span></dt>
 <dd><p>File descriptor 0 is duplicated.
 </p>
 </dd>
-<dt><code>/dev/stdout</code></dt>
+<dt><span><code>/dev/stdout</code></span></dt>
 <dd><p>File descriptor 1 is duplicated.
 </p>
 </dd>
-<dt><code>/dev/stderr</code></dt>
+<dt><span><code>/dev/stderr</code></span></dt>
 <dd><p>File descriptor 2 is duplicated.
 </p>
 </dd>
-<dt><code>/dev/tcp/<var>host</var>/<var>port</var></code></dt>
+<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><code>/dev/udp/<var>host</var>/<var>port</var></code></dt>
+<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.
@@ -3300,7 +3526,20 @@ the corresponding UDP socket.
 care, as they may conflict with file descriptors the shell uses
 internally.
 </p>
-<span id="Redirecting-Input"></span><h4 class="subsection">3.6.1 Redirecting Input</h4>
+<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>,
@@ -3312,7 +3551,9 @@ is not specified.
 <pre class="example">[<var>n</var>]&lt;<var>word</var>
 </pre></div>
 
-<span id="Redirecting-Output"></span><h4 class="subsection">3.6.2 Redirecting Output</h4>
+</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>,
@@ -3333,7 +3574,9 @@ If the redirection operator is &lsquo;<samp>&gt;|</samp>&rsquo;, or the redirect
 &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>
-<span id="Appending-Redirected-Output"></span><h4 class="subsection">3.6.3 Appending Redirected Output</h4>
+</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>
@@ -3346,7 +3589,9 @@ is not specified.  If the file does not exist it is created.
 <pre class="example">[<var>n</var>]&gt;&gt;<var>word</var>
 </pre></div>
 
-<span id="Redirecting-Standard-Output-and-Standard-Error"></span><h4 class="subsection">3.6.4 Redirecting Standard Output and Standard Error</h4>
+</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)
@@ -3371,7 +3616,9 @@ This is semantically equivalent to
 &lsquo;<samp>-</samp>&rsquo;.  If it does, other redirection operators apply
 (see Duplicating File Descriptors below) for compatibility reasons.
 </p>
-<span id="Appending-Standard-Output-and-Standard-Error"></span><h4 class="subsection">3.6.5 Appending Standard Output and Standard Error</h4>
+</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)
@@ -3388,7 +3635,9 @@ expansion of <var>word</var>.
 </pre></div>
 <p>(see Duplicating File Descriptors below).
 </p>
-<span id="Here-Documents"></span><h4 class="subsection">3.6.6 Here Documents</h4>
+</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
@@ -3420,7 +3669,9 @@ line containing <var>delimiter</var>.
 This allows here-documents within shell scripts to be indented in a
 natural fashion.
 </p>
-<span id="Here-Strings"></span><h4 class="subsection">3.6.7 Here Strings</h4>
+</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>
@@ -3435,7 +3686,9 @@ with a newline appended,
 to the command on its
 standard input (or file descriptor <var>n</var> if <var>n</var> is specified).
 </p>
-<span id="Duplicating-File-Descriptors"></span><h4 class="subsection">3.6.8 Duplicating File Descriptors</h4>
+</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>
@@ -3464,7 +3717,9 @@ 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>
-<span id="Moving-File-Descriptors"></span><h4 class="subsection">3.6.9 Moving File Descriptors</h4>
+</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>-
@@ -3480,7 +3735,9 @@ or the standard input (file descriptor 0) if <var>n</var> is not specified.
 <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>
-<span id="Opening-File-Descriptors-for-Reading-and-Writing"></span><h4 class="subsection">3.6.10 Opening File Descriptors for Reading and Writing</h4>
+</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>
@@ -3491,34 +3748,27 @@ to be opened for both reading and writing on file descriptor
 is not specified.  If the file does not exist, it is created.
 </p>
 <hr>
-<span id="Executing-Commands"></span><div class="header">
+</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>
 
-<table class="menu" border="0" cellspacing="0">
-<tr><td align="left" valign="top">&bull; <a href="#Simple-Command-Expansion" accesskey="1">Simple Command Expansion</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How Bash expands simple commands before
-                               executing them.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Command-Search-and-Execution" accesskey="2">Command Search and Execution</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How Bash finds commands and runs them.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Command-Execution-Environment" accesskey="3">Command Execution Environment</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">The environment in which Bash
-                                       executes commands that are not
-                                       shell builtins.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Environment" accesskey="4">Environment</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">The environment given to a command.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Exit-Status" accesskey="5">Exit Status</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">The status returned by commands and how Bash
-                       interprets it.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Signals" accesskey="6">Signals</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">What happens when Bash or a command it runs
-                       receives a signal.
-</td></tr>
-</table>
 
+<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>
-<span id="Simple-Command-Expansion"></span><div class="header">
+<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>
@@ -3548,7 +3798,11 @@ and quote removal before being assigned to the variable.
 </li></ol>
 
 <p>If no command name results, the variable assignments affect the current
-shell environment.  Otherwise, the variables are added to the environment
+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.
@@ -3564,7 +3818,9 @@ 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>
-<span id="Command-Search-and-Execution"></span><div class="header">
+</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>
@@ -3610,7 +3866,7 @@ to the command are set to the arguments supplied, if any.
 
 </li><li> If this execution fails because the file is not in executable
 format, and the file is not a directory, it is assumed to be a
-<var>shell script</var> and the shell executes it as described in
+<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
@@ -3619,14 +3875,16 @@ the command to complete and collects its exit status.
 </li></ol>
 
 <hr>
-<span id="Command-Execution-Environment"></span><div class="header">
+</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 <var>execution environment</var>, which consists of the
+<p>The shell has an <em>execution environment</em>, which consists of the
 following:
 </p>
 <ul>
@@ -3655,7 +3913,7 @@ arguments) or by <code>set</code>
 </li><li> shell aliases defined with <code>alias</code> (see <a href="#Aliases">Aliases</a>)
 
 </li><li> various process <small>ID</small>s, including those of background jobs
-(see <a href="#Lists">Lists</a>), the value of <code>$$</code>, and the value of
+(see <a href="#Lists">Lists of Commands</a>), the value of <code>$$</code>, and the value of
 <code>$PPID</code>
 
 </li></ul>
@@ -3685,6 +3943,8 @@ shell&rsquo;s parent, and traps ignored by the shell are ignored
 <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,
@@ -3704,7 +3964,9 @@ Otherwise, the invoked command inherits the file descriptors of the calling
 shell as modified by redirections.
 </p>
 <hr>
-<span id="Environment"></span><div class="header">
+</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>
@@ -3712,13 +3974,13 @@ Next: <a href="#Exit-Status" accesskey="n" rel="next">Exit Status</a>, Previous:
 <span id="index-environment"></span>
 
 <p>When a program is invoked it is given an array of strings
-called the <var>environment</var>.
+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 <var>export</var>
+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
@@ -3746,7 +4008,9 @@ is set to the full pathname of the command and passed to that
 command in its environment.
 </p>
 <hr>
-<span id="Exit-Status"></span><div class="header">
+</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>
@@ -3754,7 +4018,7 @@ Next: <a href="#Signals" accesskey="n" rel="next">Signals</a>, Previous: <a href
 <span id="index-exit-status-1"></span>
 
 <p>The exit status of an executed command is the value returned by the
-<var>waitpid</var> system call or equivalent function.  Exit statuses    
+<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
@@ -3779,7 +4043,7 @@ the exit status is greater than zero.
 </p>
 <p>The exit status is used by the Bash conditional commands
 (see <a href="#Conditional-Constructs">Conditional Constructs</a>) and some of the list
-constructs (see <a href="#Lists">Lists</a>).
+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
@@ -3787,8 +4051,13 @@ 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>
-<span id="Signals"></span><div class="header">
+</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>
@@ -3837,8 +4106,40 @@ 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>
-<span id="Shell-Scripts"></span><div class="header">
+</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>
@@ -3863,8 +4164,10 @@ are unset.
 </p>
 <p>A shell script may be made executable by using the <code>chmod</code> command
 to turn on the execute bit.  When Bash finds such a file while
-searching the <code>$PATH</code> for a command, it spawns a subshell to
-execute it.  In other words, executing
+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>
@@ -3910,25 +4213,15 @@ under another shell. It&rsquo;s a common idiom to use <code>env</code> to find
 in <code>$PATH</code>.
 </p>
 <hr>
-<span id="Shell-Builtin-Commands"></span><div class="header">
+</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">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+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>
 
-<table class="menu" border="0" cellspacing="0">
-<tr><td align="left" valign="top">&bull; <a href="#Bourne-Shell-Builtins" accesskey="1">Bourne Shell Builtins</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Builtin commands inherited from the Bourne
-                               Shell.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Bash-Builtins" accesskey="2">Bash Builtins</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Table of builtins specific to Bash.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Modifying-Shell-Behavior" accesskey="3">Modifying Shell Behavior</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Builtins to modify shell attributes and
-                               optional behavior.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Special-Builtins" accesskey="4">Special Builtins</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Builtin commands classified specially by
-                               POSIX.
-</td></tr>
-</table>
 
 <p>Builtin commands are contained within the shell itself.
 When the name of a builtin command is used as the first word of
@@ -3963,10 +4256,17 @@ 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>
-<span id="Bourne-Shell-Builtins"></span><div class="header">
+<div class="section" id="Bourne-Shell-Builtins">
+<div class="header">
 <p>
-Next: <a href="#Bash-Builtins" accesskey="n" rel="next">Bash Builtins</a>, Up: <a href="#Shell-Builtin-Commands" accesskey="u" rel="up">Shell Builtin Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+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>
 
@@ -3974,9 +4274,8 @@ Next: <a href="#Bash-Builtins" accesskey="n" rel="next">Bash Builtins</a>, Up: <
 These commands are implemented as specified by the <small>POSIX</small> standard.
 </p>
 <dl compact="compact">
-<dt><code>:    <span class="roman">(a colon)</span></code></dt>
-<dd><span id="index-_003a"></span>
-<div class="example">
+<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>
 
@@ -3984,35 +4283,34 @@ These commands are implemented as specified by the <small>POSIX</small> standard
 The return status is zero.
 </p>
 </dd>
-<dt><code>.    <span class="roman">(a period)</span></code></dt>
-<dd><span id="index-_002e"></span>
-<div class="example">
+<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>.
-When Bash is not in <small>POSIX</small> mode, the current directory is searched
+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>source</code> inherits any trap on
+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>source</code>, and <code>source</code> unsets the
+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>source</code> completes.
+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><code>break</code></dt>
-<dd><span id="index-break"></span>
-<div class="example">
+<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>
 
@@ -4022,16 +4320,14 @@ If <var>n</var> is supplied, the <var>n</var>th enclosing loop is exited.
 The return status is zero unless <var>n</var> is not greater than or equal to 1.
 </p>
 </dd>
-<dt><code>cd</code></dt>
-<dd><span id="index-cd"></span>
-<div class="example">
+<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.
-Any additional arguments following <var>directory</var> are ignored.
 If the shell variable
 <code>CDPATH</code> exists, it is used as a search path:
 each directory name in <code>CDPATH</code> is searched for
@@ -4067,13 +4363,17 @@ before the directory change is attempted.
 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><code>continue</code></dt>
-<dd><span id="index-continue"></span>
-<div class="example">
+<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>
 
@@ -4085,9 +4385,8 @@ is resumed.
 The return status is zero unless <var>n</var> is not greater than or equal to 1.
 </p>
 </dd>
-<dt><code>eval</code></dt>
-<dd><span id="index-eval"></span>
-<div class="example">
+<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>
 
@@ -4098,9 +4397,8 @@ If there are no arguments or only empty arguments, the return status is
 zero.
 </p>
 </dd>
-<dt><code>exec</code></dt>
-<dd><span id="index-exec"></span>
-<div class="example">
+<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>
 
@@ -4124,9 +4422,8 @@ the current shell environment.  If there are no redirection errors, the
 return status is zero; otherwise the return status is non-zero.
 </p>
 </dd>
-<dt><code>exit</code></dt>
-<dd><span id="index-exit"></span>
-<div class="example">
+<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>
 
@@ -4135,9 +4432,8 @@ If <var>n</var> is omitted, the exit status is that of the last command executed
 Any trap on <code>EXIT</code> is executed before the shell terminates.
 </p>
 </dd>
-<dt><code>export</code></dt>
-<dd><span id="index-export"></span>
-<div class="example">
+<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>
 
@@ -4145,7 +4441,7 @@ Any trap on <code>EXIT</code> is executed before the shell terminates.
 in the environment.  If the <samp>-f</samp> option is supplied, the <var>name</var>s
 refer to shell functions; otherwise the names refer to shell variables.
 The <samp>-n</samp> option means to no longer mark each <var>name</var> for export.
-If no <var>names</var> are supplied, or if the <samp>-p</samp> option is given, a
+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
@@ -4156,9 +4452,8 @@ the names is not a valid shell variable name, or <samp>-f</samp> is supplied
 with a name that is not a shell function.
 </p>
 </dd>
-<dt><code>getopts</code></dt>
-<dd><span id="index-getopts"></span>
-<div class="example">
+<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>
 
@@ -4212,9 +4507,8 @@ If <code>getopts</code> is silent, then a colon (&lsquo;<samp>:</samp>&rsquo;) i
 <var>name</var> and <code>OPTARG</code> is set to the option character found.
 </p>
 </dd>
-<dt><code>hash</code></dt>
-<dd><span id="index-hash"></span>
-<div class="example">
+<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>
 
@@ -4241,9 +4535,8 @@ The return status is zero unless a <var>name</var> is not found or an invalid
 option is supplied.
 </p>
 </dd>
-<dt><code>pwd</code></dt>
-<dd><span id="index-pwd"></span>
-<div class="example">
+<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>
 
@@ -4257,9 +4550,8 @@ determining the name of the current directory or an invalid option
 is supplied.
 </p>
 </dd>
-<dt><code>readonly</code></dt>
-<dd><span id="index-readonly"></span>
-<div class="example">
+<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>
 
@@ -4284,9 +4576,8 @@ the <var>name</var> arguments is not a valid shell variable or function name,
 or the <samp>-f</samp> option is supplied with a name that is not a shell function.
 </p>
 </dd>
-<dt><code>return</code></dt>
-<dd><span id="index-return"></span>
-<div class="example">
+<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>
 
@@ -4313,9 +4604,8 @@ argument or is used outside a function
 and not during the execution of a script by <code>.</code> or <code>source</code>.
 </p>
 </dd>
-<dt><code>shift</code></dt>
-<dd><span id="index-shift"></span>
-<div class="example">
+<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>
 
@@ -4332,10 +4622,9 @@ The return status is zero unless <var>n</var> is greater than <code>$#</code> or
 less than zero, non-zero otherwise.
 </p>
 </dd>
-<dt><code>test</code></dt>
-<dt><code>[</code></dt>
-<dd><span id="index-test"></span>
-<span id="index-_005b"></span>
+<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>
@@ -4357,20 +4646,20 @@ The evaluation depends on the number of arguments; see below.
 Operator precedence is used when there are five or more arguments.
 </p>
 <dl compact="compact">
-<dt><code>! <var>expr</var></code></dt>
+<dt><span><code>! <var>expr</var></code></span></dt>
 <dd><p>True if <var>expr</var> is false.
 </p>
 </dd>
-<dt><code>( <var>expr</var> )</code></dt>
+<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><code><var>expr1</var> -a <var>expr2</var></code></dt>
+<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><code><var>expr1</var> -o <var>expr2</var></code></dt>
+<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>
@@ -4379,15 +4668,15 @@ This may be used to override the normal precedence of operators.
 expressions using a set of rules based on the number of arguments.
 </p>
 <dl compact="compact">
-<dt>0 arguments</dt>
+<dt><span>0 arguments</span></dt>
 <dd><p>The expression is false.
 </p>
 </dd>
-<dt>1 argument</dt>
+<dt><span>1 argument</span></dt>
 <dd><p>The expression is true if, and only if, the argument is not null.
 </p>
 </dd>
-<dt>2 arguments</dt>
+<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
@@ -4397,7 +4686,7 @@ If the first argument is not a valid unary operator, the expression is
 false.
 </p>
 </dd>
-<dt>3 arguments</dt>
+<dt><span>3 arguments</span></dt>
 <dd><p>The following conditions are applied in the order listed.
 </p>
 <ol>
@@ -4416,14 +4705,21 @@ argument.
 </li></ol>
 
 </dd>
-<dt>4 arguments</dt>
-<dd><p>If the first argument is &lsquo;<samp>!</samp>&rsquo;, the result is the negation of
+<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.
-Otherwise, the expression is parsed and evaluated according to
+</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.
-</p>
+</li></ol>
+
 </dd>
-<dt>5 or more arguments</dt>
+<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>
@@ -4433,9 +4729,8 @@ using the rules listed above.
 operators sort lexicographically using ASCII ordering.
 </p>
 </dd>
-<dt><code>times</code></dt>
-<dd><span id="index-times"></span>
-<div class="example">
+<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>
 
@@ -4443,9 +4738,8 @@ operators sort lexicographically using ASCII ordering.
 The return status is zero.
 </p>
 </dd>
-<dt><code>trap</code></dt>
-<dd><span id="index-trap"></span>
-<div class="example">
+<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>
 
@@ -4505,9 +4799,8 @@ values in a subshell or subshell environment when one is created.
 valid signal.
 </p>
 </dd>
-<dt><code>umask</code></dt>
-<dd><span id="index-umask"></span>
-<div class="example">
+<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>
 
@@ -4528,9 +4821,8 @@ of the umask is subtracted from <code>7</code>.  Thus, a umask of <code>022</cod
 results in permissions of <code>755</code>.
 </p>
 </dd>
-<dt><code>unset</code></dt>
-<dd><span id="index-unset"></span>
-<div class="example">
+<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>
 
@@ -4540,7 +4832,7 @@ If the <samp>-v</samp> option is given, each
 If the <samp>-f</samp> option is given, the <var>name</var>s refer to shell
 functions, and the function definition is removed.
 If the <samp>-n</samp> option is supplied, and <var>name</var> is a variable with
-the <var>nameref</var> attribute, <var>name</var> will be unset rather than the
+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
@@ -4549,12 +4841,14 @@ 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.
+The return status is zero unless a <var>name</var> is readonly or may not be unset.
 </p></dd>
 </dl>
 
 <hr>
-<span id="Bash-Builtins"></span><div class="header">
+</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>
@@ -4565,9 +4859,8 @@ or have been extended in Bash.
 Some of these commands are specified in the <small>POSIX</small> standard.
 </p>
 <dl compact="compact">
-<dt><code>alias</code></dt>
-<dd><span id="index-alias"></span>
-<div class="example">
+<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>
 
@@ -4580,15 +4873,15 @@ and value of the alias is printed.
 Aliases are described in <a href="#Aliases">Aliases</a>.
 </p>
 </dd>
-<dt><code>bind</code></dt>
-<dd><span id="index-bind"></span>
-<div class="example">
+<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>)
@@ -4603,7 +4896,7 @@ but each binding or command must be passed as a separate argument;  e.g.,
 <p>Options, if supplied, have the following meanings:
 </p>
 <dl compact="compact">
-<dt><code>-m <var>keymap</var></code></dt>
+<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
@@ -4619,55 +4912,55 @@ names are
 synonym); <code>emacs</code> is equivalent to <code>emacs-standard</code>.
 </p>
 </dd>
-<dt><code>-l</code></dt>
+<dt><span><code>-l</code></span></dt>
 <dd><p>List the names of all Readline functions.
 </p>
 </dd>
-<dt><code>-p</code></dt>
+<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><code>-P</code></dt>
+<dt><span><code>-P</code></span></dt>
 <dd><p>List current Readline function names and bindings.
 </p>
 </dd>
-<dt><code>-v</code></dt>
+<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><code>-V</code></dt>
+<dt><span><code>-V</code></span></dt>
 <dd><p>List current Readline variable names and values.
 </p>
 </dd>
-<dt><code>-s</code></dt>
+<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><code>-S</code></dt>
+<dt><span><code>-S</code></span></dt>
 <dd><p>Display Readline key sequences bound to macros and the strings they output.
 </p>
 </dd>
-<dt><code>-f <var>filename</var></code></dt>
+<dt><span><code>-f <var>filename</var></code></span></dt>
 <dd><p>Read key bindings from <var>filename</var>.
 </p>
 </dd>
-<dt><code>-q <var>function</var></code></dt>
+<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><code>-u <var>function</var></code></dt>
+<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><code>-r <var>keyseq</var></code></dt>
+<dt><span><code>-r <var>keyseq</var></code></span></dt>
 <dd><p>Remove any current binding for <var>keyseq</var>.
 </p>
 </dd>
-<dt><code>-x <var>keyseq:shell-command</var></code></dt>
+<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
@@ -4675,12 +4968,15 @@ When <var>shell-command</var> is executed, the shell sets the
 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><code>-X</code></dt>
+<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>
@@ -4690,9 +4986,8 @@ in a format that can be reused as input.
 error occurs.
 </p>
 </dd>
-<dt><code>builtin</code></dt>
-<dd><span id="index-builtin"></span>
-<div class="example">
+<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>
 
@@ -4704,9 +4999,8 @@ The return status is non-zero if <var>shell-builtin</var> is not a shell
 builtin command.
 </p>
 </dd>
-<dt><code>caller</code></dt>
-<dd><span id="index-caller"></span>
-<div class="example">
+<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>
 
@@ -4726,9 +5020,8 @@ call or <var>expr</var> does not correspond to a valid position in the
 call stack.
 </p>
 </dd>
-<dt><code>command</code></dt>
-<dd><span id="index-command"></span>
-<div class="example">
+<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>
 
@@ -4753,9 +5046,8 @@ a more verbose description.  In this case, the return status is
 zero if <var>command</var> is found, and non-zero if not.
 </p>
 </dd>
-<dt><code>declare</code></dt>
-<dd><span id="index-declare"></span>
-<div class="example">
+<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>
 
@@ -4786,7 +5078,7 @@ 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 <var>nameref</var> attribute)
+(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.
@@ -4795,32 +5087,32 @@ If there is no existing variable, the local variable is initially unset.
 the specified attributes or to give variables attributes:
 </p>
 <dl compact="compact">
-<dt><code>-a</code></dt>
+<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><code>-A</code></dt>
+<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><code>-f</code></dt>
+<dt><span><code>-f</code></span></dt>
 <dd><p>Use function names only.
 </p>
 </dd>
-<dt><code>-i</code></dt>
+<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><code>-l</code></dt>
+<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><code>-n</code></dt>
-<dd><p>Give each <var>name</var> the <var>nameref</var> attribute, making
+<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
@@ -4830,25 +5122,25 @@ to <var>name</var>, except for those using or changing the
 The nameref attribute cannot be applied to array variables.
 </p>
 </dd>
-<dt><code>-r</code></dt>
+<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><code>-t</code></dt>
+<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><code>-u</code></dt>
+<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><code>-x</code></dt>
+<dt><span><code>-x</code></span></dt>
 <dd><p>Mark each <var>name</var> for export to subsequent commands via
 the environment.
 </p></dd>
@@ -4872,15 +5164,14 @@ an attempt is made to define a function using &lsquo;<samp>-f foo=bar</samp>&rsq
 an attempt is made to assign a value to a readonly variable,
 an attempt is made to assign a value to an array variable without
 using the compound assignment syntax (see <a href="#Arrays">Arrays</a>),
-one of the <var>names</var> is not a valid shell variable name,
+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><code>echo</code></dt>
-<dd><span id="index-echo"></span>
-<div class="example">
+<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>
 
@@ -4899,59 +5190,58 @@ escape characters by default.
 </p>
 <p><code>echo</code> interprets the following escape sequences:
 </p><dl compact="compact">
-<dt><code>\a</code></dt>
+<dt><span><code>\a</code></span></dt>
 <dd><p>alert (bell)
 </p></dd>
-<dt><code>\b</code></dt>
+<dt><span><code>\b</code></span></dt>
 <dd><p>backspace
 </p></dd>
-<dt><code>\c</code></dt>
+<dt><span><code>\c</code></span></dt>
 <dd><p>suppress further output
 </p></dd>
-<dt><code>\e</code></dt>
-<dt><code>\E</code></dt>
+<dt><span><code>\e</code></span></dt>
+<dt><span><code>\E</code></span></dt>
 <dd><p>escape
 </p></dd>
-<dt><code>\f</code></dt>
+<dt><span><code>\f</code></span></dt>
 <dd><p>form feed
 </p></dd>
-<dt><code>\n</code></dt>
+<dt><span><code>\n</code></span></dt>
 <dd><p>new line
 </p></dd>
-<dt><code>\r</code></dt>
+<dt><span><code>\r</code></span></dt>
 <dd><p>carriage return
 </p></dd>
-<dt><code>\t</code></dt>
+<dt><span><code>\t</code></span></dt>
 <dd><p>horizontal tab
 </p></dd>
-<dt><code>\v</code></dt>
+<dt><span><code>\v</code></span></dt>
 <dd><p>vertical tab
 </p></dd>
-<dt><code>\\</code></dt>
+<dt><span><code>\\</code></span></dt>
 <dd><p>backslash
 </p></dd>
-<dt><code>\0<var>nnn</var></code></dt>
+<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><code>\x<var>HH</var></code></dt>
+<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><code>\u<var>HHHH</var></code></dt>
+<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><code>\U<var>HHHHHHHH</var></code></dt>
+<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><code>enable</code></dt>
-<dd><span id="index-enable"></span>
-<div class="example">
+<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>
 
@@ -4972,6 +5262,9 @@ 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.
@@ -4979,13 +5272,17 @@ The <samp>-s</samp> option restricts <code>enable</code> to the <small>POSIX</sm
 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><code>help</code></dt>
-<dd><span id="index-help"></span>
-<div class="example">
+<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>
 
@@ -4997,13 +5294,13 @@ the builtins is printed.
 <p>Options, if supplied, have the following meanings:
 </p>
 <dl compact="compact">
-<dt><code>-d</code></dt>
+<dt><span><code>-d</code></span></dt>
 <dd><p>Display a short description of each <var>pattern</var>
 </p></dd>
-<dt><code>-m</code></dt>
+<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><code>-s</code></dt>
+<dt><span><code>-s</code></span></dt>
 <dd><p>Display only a short usage synopsis for each <var>pattern</var>
 </p></dd>
 </dl>
@@ -5011,9 +5308,8 @@ the builtins is printed.
 <p>The return status is zero unless no command matches <var>pattern</var>.
 </p>
 </dd>
-<dt><code>let</code></dt>
-<dd><span id="index-let"></span>
-<div class="example">
+<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>
 
@@ -5024,9 +5320,8 @@ last <var>expression</var> evaluates to 0, <code>let</code> returns 1;
 otherwise 0 is returned.
 </p>
 </dd>
-<dt><code>local</code></dt>
-<dd><span id="index-local"></span>
-<div class="example">
+<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>
 
@@ -5047,9 +5342,8 @@ a function, an invalid <var>name</var> is supplied, or <var>name</var> is a
 readonly variable.
 </p>
 </dd>
-<dt><code>logout</code></dt>
-<dd><span id="index-logout"></span>
-<div class="example">
+<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>
 
@@ -5057,9 +5351,8 @@ readonly variable.
 parent.
 </p>
 </dd>
-<dt><code>mapfile</code></dt>
-<dd><span id="index-mapfile"></span>
-<div class="example">
+<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>
@@ -5071,33 +5364,33 @@ The variable <code>MAPFILE</code> is the default <var>array</var>.
 Options, if supplied, have the following meanings:
 </p>
 <dl compact="compact">
-<dt><code>-d</code></dt>
+<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><code>-n</code></dt>
+<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><code>-O</code></dt>
+<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><code>-s</code></dt>
+<dt><span><code>-s</code></span></dt>
 <dd><p>Discard the first <var>count</var> lines read.
 </p></dd>
-<dt><code>-t</code></dt>
+<dt><span><code>-t</code></span></dt>
 <dd><p>Remove a trailing <var>delim</var> (default newline) from each line read.
 </p></dd>
-<dt><code>-u</code></dt>
+<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><code>-C</code></dt>
+<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><code>-c</code></dt>
+<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>
@@ -5118,9 +5411,8 @@ argument is supplied, <var>array</var> is invalid or unassignable, or <var>array
 is not an indexed array.
 </p>
 </dd>
-<dt><code>printf</code></dt>
-<dd><span id="index-printf"></span>
-<div class="example">
+<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>
 
@@ -5138,16 +5430,20 @@ In addition to the standard <code>printf(1)</code> formats, <code>printf</code>
 interprets the following extensions:
 </p>
 <dl compact="compact">
-<dt><code>%b</code></dt>
+<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 Builtins</a>).
+(see <a href="#Bash-Builtins">Bash Builtin Commands</a>).
 </p></dd>
-<dt><code>%q</code></dt>
+<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><code>%(<var>datefmt</var>)T</code></dt>
+<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
@@ -5176,9 +5472,8 @@ appropriate, had been supplied.  The return value is zero on success,
 non-zero on failure.
 </p>
 </dd>
-<dt><code>read</code></dt>
-<dd><span id="index-read"></span>
-<div class="example">
+<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>
@@ -5203,38 +5498,38 @@ meaning for the next character read and for line continuation.
 <p>Options, if supplied, have the following meanings:
 </p>
 <dl compact="compact">
-<dt><code>-a <var>aname</var></code></dt>
+<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><code>-d <var>delim</var></code></dt>
+<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><code>-e</code></dt>
+<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><code>-i <var>text</var></code></dt>
+<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><code>-n <var>nchars</var></code></dt>
+<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><code>-N <var>nchars</var></code></dt>
+<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.
@@ -5246,25 +5541,25 @@ that the variable is assigned exactly the characters read
 (with the exception of backslash; see the <samp>-r</samp> option below).
 </p>
 </dd>
-<dt><code>-p <var>prompt</var></code></dt>
+<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><code>-r</code></dt>
+<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><code>-s</code></dt>
+<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><code>-t <var>timeout</var></code></dt>
+<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.
@@ -5276,12 +5571,14 @@ 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, non-zero otherwise.
+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><code>-u <var>fd</var></code></dt>
+<dt><span><code>-u <var>fd</var></code></span></dt>
 <dd><p>Read input from file descriptor <var>fd</var>.
 </p></dd>
 </dl>
@@ -5296,9 +5593,8 @@ 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><code>readarray</code></dt>
-<dd><span id="index-readarray"></span>
-<div class="example">
+<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>
@@ -5310,18 +5606,16 @@ if the <samp>-u</samp> option is supplied.
 <p>A synonym for <code>mapfile</code>.
 </p>
 </dd>
-<dt><code>source</code></dt>
-<dd><span id="index-source"></span>
-<div class="example">
+<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><code>type</code></dt>
-<dd><span id="index-type"></span>
-<div class="example">
+<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>
 
@@ -5354,13 +5648,12 @@ is not also used.
 <p>If the <samp>-f</samp> option is used, <code>type</code> does not attempt to find
 shell functions, as with the <code>command</code> builtin.
 </p>
-<p>The return status is zero if all of the <var>names</var> are found, non-zero
+<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><code>typeset</code></dt>
-<dd><span id="index-typeset"></span>
-<div class="example">
+<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>
 
@@ -5369,9 +5662,8 @@ shell.
 It is a synonym for the <code>declare</code> builtin command.
 </p>
 </dd>
-<dt><code>ulimit</code></dt>
-<dd><span id="index-ulimit"></span>
-<div class="example">
+<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>
@@ -5381,101 +5673,101 @@ started by the shell, on systems that allow such control.  If an
 option is given, it is interpreted as follows:
 </p>
 <dl compact="compact">
-<dt><code>-S</code></dt>
+<dt><span><code>-S</code></span></dt>
 <dd><p>Change and report the soft limit associated with a resource.
 </p>
 </dd>
-<dt><code>-H</code></dt>
+<dt><span><code>-H</code></span></dt>
 <dd><p>Change and report the hard limit associated with a resource.
 </p>
 </dd>
-<dt><code>-a</code></dt>
+<dt><span><code>-a</code></span></dt>
 <dd><p>All current limits are reported; no limits are set.
 </p>
 </dd>
-<dt><code>-b</code></dt>
+<dt><span><code>-b</code></span></dt>
 <dd><p>The maximum socket buffer size.
 </p>
 </dd>
-<dt><code>-c</code></dt>
+<dt><span><code>-c</code></span></dt>
 <dd><p>The maximum size of core files created.
 </p>
 </dd>
-<dt><code>-d</code></dt>
+<dt><span><code>-d</code></span></dt>
 <dd><p>The maximum size of a process&rsquo;s data segment.
 </p>
 </dd>
-<dt><code>-e</code></dt>
+<dt><span><code>-e</code></span></dt>
 <dd><p>The maximum scheduling priority (&quot;nice&quot;).
 </p>
 </dd>
-<dt><code>-f</code></dt>
+<dt><span><code>-f</code></span></dt>
 <dd><p>The maximum size of files written by the shell and its children.
 </p>
 </dd>
-<dt><code>-i</code></dt>
+<dt><span><code>-i</code></span></dt>
 <dd><p>The maximum number of pending signals.
 </p>
 </dd>
-<dt><code>-k</code></dt>
+<dt><span><code>-k</code></span></dt>
 <dd><p>The maximum number of kqueues that may be allocated.
 </p>
 </dd>
-<dt><code>-l</code></dt>
+<dt><span><code>-l</code></span></dt>
 <dd><p>The maximum size that may be locked into memory.
 </p>
 </dd>
-<dt><code>-m</code></dt>
+<dt><span><code>-m</code></span></dt>
 <dd><p>The maximum resident set size (many systems do not honor this limit).
 </p>
 </dd>
-<dt><code>-n</code></dt>
+<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><code>-p</code></dt>
+<dt><span><code>-p</code></span></dt>
 <dd><p>The pipe buffer size.
 </p>
 </dd>
-<dt><code>-q</code></dt>
+<dt><span><code>-q</code></span></dt>
 <dd><p>The maximum number of bytes in <small>POSIX</small> message queues.
 </p>
 </dd>
-<dt><code>-r</code></dt>
+<dt><span><code>-r</code></span></dt>
 <dd><p>The maximum real-time scheduling priority.
 </p>
 </dd>
-<dt><code>-s</code></dt>
+<dt><span><code>-s</code></span></dt>
 <dd><p>The maximum stack size.
 </p>
 </dd>
-<dt><code>-t</code></dt>
+<dt><span><code>-t</code></span></dt>
 <dd><p>The maximum amount of cpu time in seconds.
 </p>
 </dd>
-<dt><code>-u</code></dt>
+<dt><span><code>-u</code></span></dt>
 <dd><p>The maximum number of processes available to a single user.
 </p>
 </dd>
-<dt><code>-v</code></dt>
+<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><code>-x</code></dt>
+<dt><span><code>-x</code></span></dt>
 <dd><p>The maximum number of file locks.
 </p>
 </dd>
-<dt><code>-P</code></dt>
+<dt><span><code>-P</code></span></dt>
 <dd><p>The maximum number of pseudoterminals.
 </p>
 </dd>
-<dt><code>-R</code></dt>
+<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><code>-T</code></dt>
+<dt><span><code>-T</code></span></dt>
 <dd><p>The maximum number of threads.
 </p></dd>
 </dl>
@@ -5511,9 +5803,8 @@ and, when in <small>POSIX</small> Mode (see <a href="#Bash-POSIX-Mode">Bash POSI
 or an error occurs while setting a new limit.
 </p>
 </dd>
-<dt><code>unalias</code></dt>
-<dd><span id="index-unalias"></span>
-<div class="example">
+<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>
 
@@ -5524,22 +5815,22 @@ Aliases are described in <a href="#Aliases">Aliases</a>.
 </dl>
 
 <hr>
-<span id="Modifying-Shell-Behavior"></span><div class="header">
+</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 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>
+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>
  
-<table class="menu" border="0" cellspacing="0">
-<tr><td align="left" valign="top">&bull; <a href="#The-Set-Builtin" accesskey="1">The Set Builtin</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Change the values of shell attributes and
-                               positional parameters.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#The-Shopt-Builtin" accesskey="2">The Shopt Builtin</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Modify shell optional behavior.
-</td></tr>
-</table>
 
+<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>
-<span id="The-Set-Builtin"></span><div class="header">
+<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>
@@ -5550,11 +5841,10 @@ allows you to change the values of shell options and set the positional
 parameters, or to display the names and values of shell variables.
 </p>
 <dl compact="compact">
-<dt><code>set</code></dt>
-<dd><span id="index-set"></span>
-<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;]
+<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
@@ -5568,22 +5858,22 @@ In <small>POSIX</small> mode, only shell variables are listed.
 Options, if specified, have the following meanings:
 </p>
 <dl compact="compact">
-<dt><code>-a</code></dt>
+<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><code>-b</code></dt>
+<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><code>-e</code></dt>
+<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</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
@@ -5613,129 +5903,129 @@ effect until the compound command or the command containing the function
 call completes.
 </p>
 </dd>
-<dt><code>-f</code></dt>
+<dt><span><code>-f</code></span></dt>
 <dd><p>Disable filename expansion (globbing).
 </p>
 </dd>
-<dt><code>-h</code></dt>
+<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><code>-k</code></dt>
+<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><code>-m</code></dt>
+<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><code>-n</code></dt>
+<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><code>-o <var>option-name</var></code></dt>
+<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><code>allexport</code></dt>
+<dt><span><code>allexport</code></span></dt>
 <dd><p>Same as <code>-a</code>.
 </p>
 </dd>
-<dt><code>braceexpand</code></dt>
+<dt><span><code>braceexpand</code></span></dt>
 <dd><p>Same as <code>-B</code>.
 </p>
 </dd>
-<dt><code>emacs</code></dt>
+<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><code>errexit</code></dt>
+<dt><span><code>errexit</code></span></dt>
 <dd><p>Same as <code>-e</code>.
 </p>
 </dd>
-<dt><code>errtrace</code></dt>
+<dt><span><code>errtrace</code></span></dt>
 <dd><p>Same as <code>-E</code>.
 </p>
 </dd>
-<dt><code>functrace</code></dt>
+<dt><span><code>functrace</code></span></dt>
 <dd><p>Same as <code>-T</code>.
 </p>
 </dd>
-<dt><code>hashall</code></dt>
+<dt><span><code>hashall</code></span></dt>
 <dd><p>Same as <code>-h</code>.
 </p>
 </dd>
-<dt><code>histexpand</code></dt>
+<dt><span><code>histexpand</code></span></dt>
 <dd><p>Same as <code>-H</code>.
 </p>
 </dd>
-<dt><code>history</code></dt>
+<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><code>ignoreeof</code></dt>
+<dt><span><code>ignoreeof</code></span></dt>
 <dd><p>An interactive shell will not exit upon reading EOF.
 </p>
 </dd>
-<dt><code>keyword</code></dt>
+<dt><span><code>keyword</code></span></dt>
 <dd><p>Same as <code>-k</code>.
 </p>
 </dd>
-<dt><code>monitor</code></dt>
+<dt><span><code>monitor</code></span></dt>
 <dd><p>Same as <code>-m</code>.
 </p>
 </dd>
-<dt><code>noclobber</code></dt>
+<dt><span><code>noclobber</code></span></dt>
 <dd><p>Same as <code>-C</code>.
 </p>
 </dd>
-<dt><code>noexec</code></dt>
+<dt><span><code>noexec</code></span></dt>
 <dd><p>Same as <code>-n</code>.
 </p>
 </dd>
-<dt><code>noglob</code></dt>
+<dt><span><code>noglob</code></span></dt>
 <dd><p>Same as <code>-f</code>.
 </p>
 </dd>
-<dt><code>nolog</code></dt>
+<dt><span><code>nolog</code></span></dt>
 <dd><p>Currently ignored.
 </p>
 </dd>
-<dt><code>notify</code></dt>
+<dt><span><code>notify</code></span></dt>
 <dd><p>Same as <code>-b</code>.
 </p>
 </dd>
-<dt><code>nounset</code></dt>
+<dt><span><code>nounset</code></span></dt>
 <dd><p>Same as <code>-u</code>.
 </p>
 </dd>
-<dt><code>onecmd</code></dt>
+<dt><span><code>onecmd</code></span></dt>
 <dd><p>Same as <code>-t</code>.
 </p>
 </dd>
-<dt><code>physical</code></dt>
+<dt><span><code>physical</code></span></dt>
 <dd><p>Same as <code>-P</code>.
 </p>
 </dd>
-<dt><code>pipefail</code></dt>
+<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><code>posix</code></dt>
+<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>).
@@ -5743,26 +6033,26 @@ This is intended to make Bash behave as a strict superset of that
 standard.
 </p>
 </dd>
-<dt><code>privileged</code></dt>
+<dt><span><code>privileged</code></span></dt>
 <dd><p>Same as <code>-p</code>.
 </p>
 </dd>
-<dt><code>verbose</code></dt>
+<dt><span><code>verbose</code></span></dt>
 <dd><p>Same as <code>-v</code>.
 </p>
 </dd>
-<dt><code>vi</code></dt>
+<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><code>xtrace</code></dt>
+<dt><span><code>xtrace</code></span></dt>
 <dd><p>Same as <code>-x</code>.
 </p></dd>
 </dl>
 
 </dd>
-<dt><code>-p</code></dt>
+<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,
@@ -5777,22 +6067,29 @@ Turning this option off causes the effective user
 and group ids to be set to the real user and group ids.
 </p>
 </dd>
-<dt><code>-t</code></dt>
+<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><code>-u</code></dt>
+<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; as an error when performing parameter expansion.
+&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><code>-v</code></dt>
+<dt><span><code>-v</code></span></dt>
 <dd><p>Print shell input lines as they are read.
 </p>
 </dd>
-<dt><code>-x</code></dt>
+<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
@@ -5801,28 +6098,28 @@ variable is expanded and the resultant value is printed before
 the command and its expanded arguments.
 </p>
 </dd>
-<dt><code>-B</code></dt>
+<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><code>-C</code></dt>
+<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><code>-E</code></dt>
+<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><code>-H</code></dt>
-<dd><p>Enable &lsquo;<samp>!</samp>&rsquo; style history substitution (see <a href="#History-Interaction">History Interaction</a>).
+<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><code>-P</code></dt>
+<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
@@ -5847,7 +6144,7 @@ $ cd ..; pwd
 </pre></div>
 
 </dd>
-<dt><code>-T</code></dt>
+<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.
@@ -5855,13 +6152,13 @@ The <code>DEBUG</code> and <code>RETURN</code> traps are normally not inherited
 in such cases.
 </p>
 </dd>
-<dt><code>--</code></dt>
+<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><code>-</code></dt>
+<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.
@@ -5882,7 +6179,9 @@ The special parameter <code>#</code> is set to N.
 </dl>
 
 <hr>
-<span id="The-Shopt-Builtin"></span><div class="header">
+</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>
@@ -5891,9 +6190,8 @@ Previous: <a href="#The-Set-Builtin" accesskey="p" rel="prev">The Set Builtin</a
 <p>This builtin allows you to change additional shell optional behavior.
 </p>
 <dl compact="compact">
-<dt><code>shopt</code></dt>
-<dd><span id="index-shopt"></span>
-<div class="example">
+<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>
 
@@ -5903,29 +6201,29 @@ The settings can be either those listed below, or, if the
 option to the <code>set</code> builtin command (see <a href="#The-Set-Builtin">The Set Builtin</a>).
 With no options, or with the <samp>-p</samp> option, a list of all settable
 options is displayed, with an indication of whether or not each is set;
-if <var>optnames</var> are supplied, the output is restricted to those options.
+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><code>-s</code></dt>
+<dt><span><code>-s</code></span></dt>
 <dd><p>Enable (set) each <var>optname</var>.
 </p>
 </dd>
-<dt><code>-u</code></dt>
+<dt><span><code>-u</code></span></dt>
 <dd><p>Disable (unset) each <var>optname</var>.
 </p>
 </dd>
-<dt><code>-q</code></dt>
+<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>optnames</var> are enabled;
+the return status is zero if all <var>optname</var>s are enabled;
 non-zero otherwise.
 </p>
 </dd>
-<dt><code>-o</code></dt>
+<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>).
@@ -5939,33 +6237,33 @@ those options which are set or unset, respectively.
 <p>Unless otherwise noted, the <code>shopt</code> options are disabled (off)
 by default.
 </p>
-<p>The return status when listing options is zero if all <var>optnames</var>
+<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><code>assoc_expand_once</code></dt>
+<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><code>autocd</code></dt>
+<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><code>cdable_vars</code></dt>
+<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><code>cdspell</code></dt>
+<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,
@@ -5975,13 +6273,13 @@ and the command proceeds.
 This option is only used by interactive shells.
 </p>
 </dd>
-<dt><code>checkhash</code></dt>
+<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><code>checkjobs</code></dt>
+<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
@@ -5989,14 +6287,14 @@ intervening command (see <a href="#Job-Control">Job Control</a>).
 The shell always postpones exiting if any jobs are stopped.
 </p>
 </dd>
-<dt><code>checkwinsize</code></dt>
+<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><code>cmdhist</code></dt>
+<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
@@ -6005,18 +6303,18 @@ This option is enabled by default, but only has an effect if command
 history is enabled (see <a href="#Bash-History-Facilities">Bash History Facilities</a>).
 </p>
 </dd>
-<dt><code>compat31</code></dt>
-<dt><code>compat32</code></dt>
-<dt><code>compat40</code></dt>
-<dt><code>compat41</code></dt>
-<dt><code>compat42</code></dt>
-<dt><code>compat43</code></dt>
-<dt><code>compat44</code></dt>
+<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><code>complete_fullquote</code></dt>
+<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.
@@ -6034,41 +6332,41 @@ This variable is set by default, which is the default Bash behavior in
 versions through 4.2.
 </p>
 </dd>
-<dt><code>direxpand</code></dt>
+<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
+filename completion.  This changes the contents of the Readline editing
 buffer.
 If not set, Bash attempts to preserve what the user typed.
 </p>
 </dd>
-<dt><code>dirspell</code></dt>
+<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><code>dotglob</code></dt>
+<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><code>execfail</code></dt>
+<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><code>expand_aliases</code></dt>
+<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><code>extdebug</code></dt>
+<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
@@ -6076,7 +6374,7 @@ before the shell starts, identical to the <samp>--debugger</samp> option.
 If set after invocation, behavior intended for use by debuggers is enabled:
 </p>
 <ol>
-<li> The <samp>-F</samp> option to the <code>declare</code> builtin (see <a href="#Bash-Builtins">Bash Builtins</a>)
+<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.
 
@@ -6101,23 +6399,23 @@ subshells invoked with <code>( <var>command</var> )</code> inherit the
 </li></ol>
 
 </dd>
-<dt><code>extglob</code></dt>
+<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><code>extquote</code></dt>
+<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><code>failglob</code></dt>
+<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><code>force_fignore</code></dt>
+<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.
@@ -6125,7 +6423,7 @@ See <a href="#Bash-Variables">Bash Variables</a>, for a description of <code>FIG
 This option is enabled by default.
 </p>
 </dd>
-<dt><code>globasciiranges</code></dt>
+<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
@@ -6135,136 +6433,158 @@ is not taken into account, so
 and upper-case and lower-case ASCII characters will collate together.   
 </p>
 </dd>
-<dt><code>globstar</code></dt>
+<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><code>gnu_errfmt</code></dt>
+<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><code>histappend</code></dt>
+<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><code>histreedit</code></dt>
+<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><code>histverify</code></dt>
+<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><code>hostcomplete</code></dt>
+<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">Commands For Completion</a>).  This option is enabled
+completed (see <a href="#Commands-For-Completion">Letting Readline Type For You</a>).  This option is enabled
 by default.
 </p>
 </dd>
-<dt><code>huponexit</code></dt>
+<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><code>inherit_errexit</code></dt>
+<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><code>interactive_comments</code></dt>
+<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><code>lastpipe</code></dt>
+<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><code>lithist</code></dt>
+<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><code>localvar_inherit</code></dt>
+<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 <var>nameref</var> attribute is not inherited.
+assigned.  The <code>nameref</code> attribute is not inherited.
 </p>
 </dd>
-<dt><code>localvar_unset</code></dt>
+<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><code>login_shell</code></dt>
+<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><code>mailwarn</code></dt>
+<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><code>no_empty_cmd_completion</code></dt>
+<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><code>nocaseglob</code></dt>
+<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><code>nocasematch</code></dt>
+<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,
+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><code>nullglob</code></dt>
+<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><code>progcomp</code></dt>
+<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><code>progcomp_alias</code></dt>
+<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><code>promptvars</code></dt>
+<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
@@ -6272,7 +6592,7 @@ as described below (see <a href="#Controlling-the-Prompt">Controlling the Prompt
 This option is enabled by default.
 </p>
 </dd>
-<dt><code>restricted_shell</code></dt>
+<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.
@@ -6280,19 +6600,25 @@ This is not reset when the startup files are executed, allowing
 the startup files to discover whether or not a shell is restricted.
 </p>
 </dd>
-<dt><code>shift_verbose</code></dt>
+<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><code>sourcepath</code></dt>
-<dd><p>If set, the <code>source</code> builtin uses the value of <code>PATH</code>
+<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><code>xpg_echo</code></dt>
+<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>
@@ -6302,7 +6628,10 @@ by default.
 </dl>
 
 <hr>
-<span id="Special-Builtins"></span><div class="header">
+</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>
@@ -6334,25 +6663,26 @@ shift trap unset<!-- /@w -->
 </pre></div>
 
 <hr>
-<span id="Shell-Variables"></span><div class="header">
+</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">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+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>
 
-<table class="menu" border="0" cellspacing="0">
-<tr><td align="left" valign="top">&bull; <a href="#Bourne-Shell-Variables" accesskey="1">Bourne Shell Variables</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Variables which Bash uses in the same way
-                               as the Bourne Shell.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Bash-Variables" accesskey="2">Bash Variables</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">List of variables that exist in Bash.
-</td></tr>
-</table>
 
 <p>This chapter describes the shell variables that Bash uses.
 Bash automatically assigns default values to a number of variables.
 </p>
+<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>
-<span id="Bourne-Shell-Variables"></span><div class="header">
+<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>
@@ -6362,41 +6692,31 @@ Next: <a href="#Bash-Variables" accesskey="n" rel="next">Bash Variables</a>, Up:
 In some cases, Bash assigns a default value to the variable.
 </p>
 <dl compact="compact">
-<dt><code>CDPATH</code>
-<span id="index-CDPATH"></span>
-</dt>
+<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><code>HOME</code>
-<span id="index-HOME"></span>
-</dt>
+<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><code>IFS</code>
-<span id="index-IFS"></span>
-</dt>
+<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><code>MAIL</code>
-<span id="index-MAIL"></span>
-</dt>
+<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><code>MAILPATH</code>
-<span id="index-MAILPATH"></span>
-</dt>
+<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
@@ -6406,21 +6726,15 @@ When used in the text of the message, <code>$_</code> expands to the name of
 the current mail file.
 </p>
 </dd>
-<dt><code>OPTARG</code>
-<span id="index-OPTARG"></span>
-</dt>
+<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><code>OPTIND</code>
-<span id="index-OPTIND"></span>
-</dt>
+<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><code>PATH</code>
-<span id="index-PATH"></span>
-</dt>
+<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
@@ -6429,17 +6743,13 @@ A null directory name may appear as two adjacent colons, or as an initial
 or trailing colon.
 </p>
 </dd>
-<dt><code>PS1</code>
-<span id="index-PS1"></span>
-</dt>
+<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><code>PS2</code>
-<span id="index-PS2"></span>
-</dt>
+<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.
@@ -6448,7 +6758,9 @@ displayed.
 </dl>
 
 <hr>
-<span id="Bash-Variables"></span><div class="header">
+</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>
@@ -6462,9 +6774,7 @@ variables for controlling the job control facilities
 (see <a href="#Job-Control-Variables">Job Control Variables</a>).
 </p>
 <dl compact="compact">
-<dt><code>_</code>
-<span id="index-_005f"></span>
-</dt>
+<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
@@ -6477,15 +6787,11 @@ and placed in the environment exported to that command.
 When checking mail, this parameter holds the name of the mail file.
 </p>
 </dd>
-<dt><code>BASH</code>
-<span id="index-BASH"></span>
-</dt>
+<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><code>BASHOPTS</code>
-<span id="index-BASHOPTS"></span>
-</dt>
+<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>).
@@ -6496,9 +6802,7 @@ starts up, each shell option in the list will be enabled before
 reading any startup files.  This variable is readonly.
 </p>
 </dd>
-<dt><code>BASHPID</code>
-<span id="index-BASHPID"></span>
-</dt>
+<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.
@@ -6508,9 +6812,7 @@ is unset, it loses its special properties, even if it is
 subsequently reset.
 </p>
 </dd>
-<dt><code>BASH_ALIASES</code>
-<span id="index-BASH_005fALIASES"></span>
-</dt>
+<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>).
@@ -6522,9 +6824,7 @@ is unset, it loses its special properties, even if it is
 subsequently reset.
 </p>
 </dd>
-<dt><code>BASH_ARGC</code>
-<span id="index-BASH_005fARGC"></span>
-</dt>
+<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
@@ -6540,9 +6840,7 @@ or referencing this variable when <code>extdebug</code> is not set,
 may result in inconsistent values.
 </p>
 </dd>
-<dt><code>BASH_ARGV</code>
-<span id="index-BASH_005fARGV"></span>
-</dt>
+<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
@@ -6557,9 +6855,7 @@ or referencing this variable when <code>extdebug</code> is not set,
 may result in inconsistent values.
 </p>
 </dd>
-<dt><code>BASH_ARGV0</code>
-<span id="index-BASH_005fARGV0"></span>
-</dt>
+<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).
@@ -6570,9 +6866,7 @@ is unset, it loses its special properties, even if it is
 subsequently reset.
 </p>
 </dd>
-<dt><code>BASH_CMDS</code>
-<span id="index-BASH_005fCMDS"></span>
-</dt>
+<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>).
@@ -6584,9 +6878,7 @@ is unset, it loses its special properties, even if it is
 subsequently reset.
 </p>
 </dd>
-<dt><code>BASH_COMMAND</code>
-<span id="index-BASH_005fCOMMAND"></span>
-</dt>
+<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.
@@ -6595,9 +6887,7 @@ is unset, it loses its special properties, even if it is
 subsequently reset.
 </p>
 </dd>
-<dt><code>BASH_COMPAT</code>
-<span id="index-BASH_005fCOMPAT"></span>
-</dt>
+<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.
@@ -6616,25 +6906,19 @@ and set the compatibility level to 42.
 The current version is also a valid value.
 </p>
 </dd>
-<dt><code>BASH_ENV</code>
-<span id="index-BASH_005fENV"></span>
-</dt>
+<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><code>BASH_EXECUTION_STRING</code>
-<span id="index-BASH_005fEXECUTION_005fSTRING"></span>
-</dt>
+<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><code>BASH_LINENO</code>
-<span id="index-BASH_005fLINENO"></span>
-</dt>
+<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 <var>FUNCNAME</var> was invoked.
+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
@@ -6642,17 +6926,13 @@ referenced within another shell function).
 Use <code>LINENO</code> to obtain the current line number.
 </p>
 </dd>
-<dt><code>BASH_LOADABLES_PATH</code>
-<span id="index-BASH_005fLOADABLES_005fPATH"></span>
-</dt>
+<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><code>BASH_REMATCH</code>
-<span id="index-BASH_005fREMATCH"></span>
-</dt>
+<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>).
@@ -6662,9 +6942,7 @@ The element with index <var>n</var> is the portion of the
 string matching the <var>n</var>th parenthesized subexpression.
 </p>
 </dd>
-<dt><code>BASH_SOURCE</code>
-<span id="index-BASH_005fSOURCE"></span>
-</dt>
+<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.
@@ -6672,9 +6950,7 @@ The shell function <code>${FUNCNAME[$i]}</code> is defined in the file
 <code>${BASH_SOURCE[$i]}</code> and called from <code>${BASH_SOURCE[$i+1]}</code>
 </p>
 </dd>
-<dt><code>BASH_SUBSHELL</code>
-<span id="index-BASH_005fSUBSHELL"></span>
-</dt>
+<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.
@@ -6683,49 +6959,43 @@ is unset, it loses its special properties, even if it is
 subsequently reset.
 </p>
 </dd>
-<dt><code>BASH_VERSINFO</code>
-<span id="index-BASH_005fVERSINFO"></span>
-</dt>
+<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><code>BASH_VERSINFO[0]</code></dt>
-<dd><p>The major version number (the <var>release</var>).
+<dt><span><code>BASH_VERSINFO[0]</code></span></dt>
+<dd><p>The major version number (the <em>release</em>).
 </p>
 </dd>
-<dt><code>BASH_VERSINFO[1]</code></dt>
-<dd><p>The minor version number (the <var>version</var>).
+<dt><span><code>BASH_VERSINFO[1]</code></span></dt>
+<dd><p>The minor version number (the <em>version</em>).
 </p>
 </dd>
-<dt><code>BASH_VERSINFO[2]</code></dt>
+<dt><span><code>BASH_VERSINFO[2]</code></span></dt>
 <dd><p>The patch level.
 </p>
 </dd>
-<dt><code>BASH_VERSINFO[3]</code></dt>
+<dt><span><code>BASH_VERSINFO[3]</code></span></dt>
 <dd><p>The build version.
 </p>
 </dd>
-<dt><code>BASH_VERSINFO[4]</code></dt>
-<dd><p>The release status (e.g., <var>beta1</var>).
+<dt><span><code>BASH_VERSINFO[4]</code></span></dt>
+<dd><p>The release status (e.g., <code>beta1</code>).
 </p>
 </dd>
-<dt><code>BASH_VERSINFO[5]</code></dt>
+<dt><span><code>BASH_VERSINFO[5]</code></span></dt>
 <dd><p>The value of <code>MACHTYPE</code>.
 </p></dd>
 </dl>
 
 </dd>
-<dt><code>BASH_VERSION</code>
-<span id="index-BASH_005fVERSION"></span>
-</dt>
+<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><code>BASH_XTRACEFD</code>
-<span id="index-BASH_005fXTRACEFD"></span>
-</dt>
+<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.
@@ -6740,9 +7010,7 @@ descriptor) and then unsetting it will result in the standard error
 being closed.
 </p>
 </dd>
-<dt><code>CHILD_MAX</code>
-<span id="index-CHILD_005fMAX"></span>
-</dt>
+<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
@@ -6750,9 +7018,7 @@ not exceed.
 The minimum value is system-dependent.
 </p>
 </dd>
-<dt><code>COLUMNS</code>
-<span id="index-COLUMNS"></span>
-</dt>
+<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
@@ -6760,27 +7026,21 @@ Automatically set if the <code>checkwinsize</code> option is enabled
 <code>SIGWINCH</code>.
 </p>
 </dd>
-<dt><code>COMP_CWORD</code>
-<span id="index-COMP_005fCWORD"></span>
-</dt>
+<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><code>COMP_LINE</code>
-<span id="index-COMP_005fLINE"></span>
-</dt>
+<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><code>COMP_POINT</code>
-<span id="index-COMP_005fPOINT"></span>
-</dt>
+<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,
@@ -6790,12 +7050,10 @@ commands invoked by the
 programmable completion facilities (see <a href="#Programmable-Completion">Programmable Completion</a>).
 </p>
 </dd>
-<dt><code>COMP_TYPE</code>
-<span id="index-COMP_005fTYPE"></span>
-</dt>
+<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:
-<var>TAB</var>, for normal completion,
+<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,
@@ -6806,16 +7064,12 @@ commands invoked by the
 programmable completion facilities (see <a href="#Programmable-Completion">Programmable Completion</a>).
 </p>
 </dd>
-<dt><code>COMP_KEY</code>
-<span id="index-COMP_005fKEY"></span>
-</dt>
+<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><code>COMP_WORDBREAKS</code>
-<span id="index-COMP_005fWORDBREAKS"></span>
-</dt>
+<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>
@@ -6823,9 +7077,7 @@ is unset, it loses its special properties,
 even if it is subsequently reset.
 </p>
 </dd>
-<dt><code>COMP_WORDS</code>
-<span id="index-COMP_005fWORDS"></span>
-</dt>
+<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
@@ -6834,25 +7086,19 @@ This variable is available only in shell functions invoked by the
 programmable completion facilities (see <a href="#Programmable-Completion">Programmable Completion</a>).
 </p>
 </dd>
-<dt><code>COMPREPLY</code>
-<span id="index-COMPREPLY"></span>
-</dt>
+<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><code>COPROC</code>
-<span id="index-COPROC"></span>
-</dt>
+<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><code>DIRSTACK</code>
-<span id="index-DIRSTACK"></span>
-</dt>
+<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.
@@ -6865,29 +7111,23 @@ is unset, it loses its special properties, even if
 it is subsequently reset.
 </p>
 </dd>
-<dt><code>EMACS</code>
-<span id="index-EMACS"></span>
-</dt>
+<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><code>ENV</code>
-<span id="index-ENV"></span>
-</dt>
-<dd><p>Expanded and executed similarlty to <code>BASH_ENV</code>
+<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><code>EPOCHREALTIME</code>
-<span id="index-EPOCHREALTIME"></span>
-</dt>
+<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 <var>time</var> for the
+(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>
@@ -6895,28 +7135,22 @@ is unset, it loses its special properties, even if
 it is subsequently reset.
 </p>
 </dd>
-<dt><code>EPOCHSECONDS</code>
-<span id="index-EPOCHSECONDS"></span>
-</dt>
+<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
-<var>time</var> for the definition of Epoch).
+<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><code>EUID</code>
-<span id="index-EUID"></span>
-</dt>
+<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><code>EXECIGNORE</code>
-<span id="index-EXECIGNORE"></span>
-</dt>
+<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>.
@@ -6932,16 +7166,12 @@ The pattern matching honors the setting of the <code>extglob</code> shell
 option.
 </p>
 </dd>
-<dt><code>FCEDIT</code>
-<span id="index-FCEDIT"></span>
-</dt>
+<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><code>FIGNORE</code>
-<span id="index-FIGNORE"></span>
-</dt>
+<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 
@@ -6950,9 +7180,7 @@ is excluded from the list of matched filenames.  A sample
 value is &lsquo;<samp>.o:~</samp>&rsquo;
 </p>
 </dd>
-<dt><code>FUNCNAME</code>
-<span id="index-FUNCNAME"></span>
-</dt>
+<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
@@ -6974,17 +7202,13 @@ The <code>caller</code> builtin displays the current call stack using this
 information.
 </p>
 </dd>
-<dt><code>FUNCNEST</code>
-<span id="index-FUNCNEST"></span>
-</dt>
+<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><code>GLOBIGNORE</code>
-<span id="index-GLOBIGNORE"></span>
-</dt>
+<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
@@ -6994,9 +7218,7 @@ The pattern matching honors the setting of the <code>extglob</code> shell
 option.
 </p>
 </dd>
-<dt><code>GROUPS</code>
-<span id="index-GROUPS"></span>
-</dt>
+<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.
@@ -7005,13 +7227,11 @@ is unset, it loses its special properties, even if it is
 subsequently reset.
 </p>
 </dd>
-<dt><code>histchars</code>
-<span id="index-histchars"></span>
-</dt>
+<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 Interaction</a>).
+substitution, and tokenization (see <a href="#History-Interaction">History Expansion</a>).
 The first character is the
-<var>history expansion</var> character, that is, the character which signifies 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
@@ -7022,9 +7242,7 @@ remaining words on the line.  It does not necessarily cause the shell
 parser to treat the rest of the line as a comment.
 </p>
 </dd>
-<dt><code>HISTCMD</code>
-<span id="index-HISTCMD"></span>
-</dt>
+<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.
@@ -7033,9 +7251,7 @@ is unset, it loses its special properties,
 even if it is subsequently reset.
 </p>
 </dd>
-<dt><code>HISTCONTROL</code>
-<span id="index-HISTCONTROL"></span>
-</dt>
+<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
@@ -7056,16 +7272,12 @@ not tested, and are added to the history regardless of the value of
 <code>HISTCONTROL</code>.
 </p>
 </dd>
-<dt><code>HISTFILE</code>
-<span id="index-HISTFILE"></span>
-</dt>
+<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><code>HISTFILESIZE</code>
-<span id="index-HISTFILESIZE"></span>
-</dt>
+<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
@@ -7078,9 +7290,7 @@ The shell sets the default value to the value of <code>HISTSIZE</code>
 after reading any startup files.
 </p>
 </dd>
-<dt><code>HISTIGNORE</code>
-<span id="index-HISTIGNORE"></span>
-</dt>
+<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
@@ -7103,9 +7313,7 @@ Combining these two patterns, separating them with a colon,
 provides the functionality of <code>ignoreboth</code>. 
 </p>
 </dd>
-<dt><code>HISTSIZE</code>
-<span id="index-HISTSIZE"></span>
-</dt>
+<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
@@ -7113,11 +7321,9 @@ on the history list (there is no limit).
 The shell sets the default value to 500 after reading any startup files.
 </p>
 </dd>
-<dt><code>HISTTIMEFORMAT</code>
-<span id="index-HISTTIMEFORMAT"></span>
-</dt>
+<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 <var>strftime</var> to print the time stamp associated with each history
+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.
@@ -7125,9 +7331,7 @@ This uses the history comment character to distinguish timestamps from
 other history lines.
 </p>
 </dd>
-<dt><code>HOSTFILE</code>
-<span id="index-HOSTFILE"></span>
-</dt>
+<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
@@ -7141,21 +7345,15 @@ Bash attempts to read
 When <code>HOSTFILE</code> is unset, the hostname list is cleared.
 </p>
 </dd>
-<dt><code>HOSTNAME</code>
-<span id="index-HOSTNAME"></span>
-</dt>
+<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><code>HOSTTYPE</code>
-<span id="index-HOSTTYPE"></span>
-</dt>
+<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><code>IGNOREEOF</code>
-<span id="index-IGNOREEOF"></span>
-</dt>
+<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
@@ -7166,38 +7364,28 @@ If the variable does not exist, then <code>EOF</code> signifies the end of
 input to the shell.  This is only in effect for interactive shells.
 </p>
 </dd>
-<dt><code>INPUTRC</code>
-<span id="index-INPUTRC"></span>
-</dt>
+<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><code>INSIDE_EMACS</code>
-<span id="index-INSIDE_005fEMACS"></span>
-</dt>
+<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><code>LANG</code>
-<span id="index-LANG"></span>
-</dt>
+<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><code>LC_ALL</code>
-<span id="index-LC_005fALL"></span>
-</dt>
+<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><code>LC_COLLATE</code>
-<span id="index-LC_005fCOLLATE"></span>
-</dt>
+<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,
@@ -7205,46 +7393,34 @@ and collating sequences within filename expansion and pattern matching
 (see <a href="#Filename-Expansion">Filename Expansion</a>).
 </p>
 </dd>
-<dt><code>LC_CTYPE</code>
-<span id="index-LC_005fCTYPE"></span>
-</dt>
+<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><code>LC_MESSAGES</code>
-<span id="index-LC_005fMESSAGES-1"></span>
-</dt>
+<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 Translation</a>).
+strings preceded by a &lsquo;<samp>$</samp>&rsquo; (see <a href="#Locale-Translation">Locale-Specific Translation</a>).
 </p>
 </dd>
-<dt><code>LC_NUMERIC</code>
-<span id="index-LC_005fNUMERIC"></span>
-</dt>
+<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><code>LC_TIME</code>
-<span id="index-LC_005fTIME"></span>
-</dt>
+<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><code>LINENO</code>
-<span id="index-LINENO"></span>
-</dt>
+<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><code>LINES</code>
-<span id="index-LINES"></span>
-</dt>
+<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
@@ -7252,16 +7428,12 @@ Automatically set if the <code>checkwinsize</code> option is enabled
 <code>SIGWINCH</code>.
 </p>
 </dd>
-<dt><code>MACHTYPE</code>
-<span id="index-MACHTYPE"></span>
-</dt>
+<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><code>MAILCHECK</code>
-<span id="index-MAILCHECK"></span>
-</dt>
+<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
@@ -7270,44 +7442,32 @@ If this variable is unset, or set to a value that is not a number
 greater than or equal to zero, the shell disables mail checking.
 </p>
 </dd>
-<dt><code>MAPFILE</code>
-<span id="index-MAPFILE"></span>
-</dt>
+<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><code>OLDPWD</code>
-<span id="index-OLDPWD"></span>
-</dt>
+<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><code>OPTERR</code>
-<span id="index-OPTERR"></span>
-</dt>
+<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><code>OSTYPE</code>
-<span id="index-OSTYPE"></span>
-</dt>
+<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><code>PIPESTATUS</code>
-<span id="index-PIPESTATUS"></span>
-</dt>
+<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><code>POSIXLY_CORRECT</code>
-<span id="index-POSIXLY_005fCORRECT"></span>
-</dt>
+<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.
@@ -7321,16 +7481,12 @@ When the shell enters <small>POSIX</small> mode, it sets this variable if it was
 not already set.
 </p>
 </dd>
-<dt><code>PPID</code>
-<span id="index-PPID"></span>
-</dt>
+<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><code>PROMPT_COMMAND</code>
-<span id="index-PROMPT_005fCOMMAND"></span>
-</dt>
+<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>).
@@ -7338,35 +7494,27 @@ If this is set but not an array variable,
 its value is used as a command to execute instead.
 </p>
 </dd>
-<dt><code>PROMPT_DIRTRIM</code>
-<span id="index-PROMPT_005fDIRTRIM"></span>
-</dt>
+<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><code>PS0</code>
-<span id="index-PS0"></span>
-</dt>
+<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><code>PS3</code>
-<span id="index-PS3"></span>
-</dt>
+<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><code>PS4</code>
-<span id="index-PS4"></span>
-</dt>
-<dd><p>The value of this parameter is expanded like <var>PS1</var>
+<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,
@@ -7374,15 +7522,11 @@ as necessary, to indicate multiple levels of indirection.
 The default is &lsquo;<samp>+ </samp>&rsquo;.
 </p>
 </dd>
-<dt><code>PWD</code>
-<span id="index-PWD"></span>
-</dt>
+<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><code>RANDOM</code>
-<span id="index-RANDOM"></span>
-</dt>
+<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.
@@ -7391,62 +7535,53 @@ is unset, it loses its special properties, even if it is
 subsequently reset.
 </p>
 </dd>
-<dt><code>READLINE_LINE</code>
-<span id="index-READLINE_005fLINE"></span>
-</dt>
+<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 Builtins</a>).
+with &lsquo;<samp>bind -x</samp>&rsquo; (see <a href="#Bash-Builtins">Bash Builtin Commands</a>).
 </p>
 </dd>
-<dt><code>READLINE_MARK</code>
-<span id="index-READLINE_005fMARK"></span>
-</dt>
-<dd><p>The position of the <var>mark</var> (saved insertion point) in the
+<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 Builtins</a>).
+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 <var>region</var>.
+called the <em>region</em>.
 </p>
 </dd>
-<dt><code>READLINE_POINT</code>
-<span id="index-READLINE_005fPOINT"></span>
-</dt>
+<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 Builtins</a>).
+with &lsquo;<samp>bind -x</samp>&rsquo; (see <a href="#Bash-Builtins">Bash Builtin Commands</a>).
 </p>
 </dd>
-<dt><code>REPLY</code>
-<span id="index-REPLY"></span>
-</dt>
+<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><code>SECONDS</code>
-<span id="index-SECONDS"></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
+<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 is always
+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><code>SHELL</code>
-<span id="index-SHELL"></span>
-</dt>
+<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><code>SHELLOPTS</code>
-<span id="index-SHELLOPTS"></span>
-</dt>
+<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>).
@@ -7457,16 +7592,12 @@ starts up, each shell option in the list will be enabled before
 reading any startup files.  This variable is readonly.
 </p>
 </dd>
-<dt><code>SHLVL</code>
-<span id="index-SHLVL"></span>
-</dt>
+<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><code>SRANDOM</code>
-<span id="index-SRANDOM"></span>
-</dt>
+<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
@@ -7478,9 +7609,7 @@ is unset, it loses its special properties,
 even if it is subsequently reset.
 </p>
 </dd>
-<dt><code>TIMEFORMAT</code>
-<span id="index-TIMEFORMAT"></span>
-</dt>
+<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.
@@ -7491,23 +7620,23 @@ The escape sequences and their meanings are as
 follows; the braces denote optional portions. 
 </p>
 <dl compact="compact">
-<dt><code>%%</code></dt>
+<dt><span><code>%%</code></span></dt>
 <dd><p>A literal &lsquo;<samp>%</samp>&rsquo;.
 </p>
 </dd>
-<dt><code>%[<var>p</var>][l]R</code></dt>
+<dt><span><code>%[<var>p</var>][l]R</code></span></dt>
 <dd><p>The elapsed time in seconds. 
 </p>
 </dd>
-<dt><code>%[<var>p</var>][l]U</code></dt>
+<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><code>%[<var>p</var>][l]S</code></dt>
+<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><code>%P</code></dt>
+<dt><span><code>%P</code></span></dt>
 <dd><p>The CPU percentage, computed as (%U + %S) / %R. 
 </p></dd>
 </dl>
@@ -7531,11 +7660,9 @@ The value of <var>p</var> determines whether or not the fraction is included.
 A trailing newline is added when the format string is displayed.
 </p>
 </dd>
-<dt><code>TMOUT</code>
-<span id="index-TMOUT"></span>
-</dt>
+<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 Builtins</a>).
+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.
@@ -7548,63 +7675,47 @@ terminates after waiting for that number of seconds if a complete
 line of input does not arrive.
 </p>
 </dd>
-<dt><code>TMPDIR</code>
-<span id="index-TMPDIR"></span>
-</dt>
+<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><code>UID</code>
-<span id="index-UID"></span>
-</dt>
+<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>
-<span id="Bash-Features"></span><div class="header">
+</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">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+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>
-<table class="menu" border="0" cellspacing="0">
-<tr><td align="left" valign="top">&bull; <a href="#Invoking-Bash" accesskey="1">Invoking Bash</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Command line options that you can give
-                               to Bash.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Bash-Startup-Files" accesskey="2">Bash Startup Files</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">When and how Bash executes scripts.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Interactive-Shells" accesskey="3">Interactive Shells</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">What an interactive shell is.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Bash-Conditional-Expressions" accesskey="4">Bash Conditional Expressions</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Primitives used in composing expressions for
-                               the <code>test</code> builtin.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Shell-Arithmetic" accesskey="5">Shell Arithmetic</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Arithmetic on shell variables.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Aliases" accesskey="6">Aliases</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Substituting one command for another.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Arrays" accesskey="7">Arrays</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Array Variables.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#The-Directory-Stack" accesskey="8">The Directory Stack</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">History of visited directories.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Controlling-the-Prompt" accesskey="9">Controlling the Prompt</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Customizing the various prompt strings.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#The-Restricted-Shell">The Restricted Shell</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">A more controlled mode of shell execution.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Bash-POSIX-Mode">Bash POSIX Mode</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Making Bash behave more closely to what
-                               the POSIX standard specifies.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Shell-Compatibility-Mode">Shell Compatibility Mode</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How Bash supports behavior that was present
-                               in earlier versions and has changed.
-</td></tr>
-</table>
 
+<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>
-<span id="Invoking-Bash"></span><div class="header">
+<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>
@@ -7626,57 +7737,57 @@ options that you can use.  These options must appear on the command
 line before the single-character options to be recognized. 
 </p>
 <dl compact="compact">
-<dt><code>--debugger</code></dt>
+<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><code>--dump-po-strings</code></dt>
+<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><code>--dump-strings</code></dt>
+<dt><span><code>--dump-strings</code></span></dt>
 <dd><p>Equivalent to <samp>-D</samp>.
 </p>
 </dd>
-<dt><code>--help</code></dt>
+<dt><span><code>--help</code></span></dt>
 <dd><p>Display a usage message on standard output and exit successfully.
 </p>
 </dd>
-<dt><code>--init-file <var>filename</var></code></dt>
-<dt><code>--rcfile <var>filename</var></code></dt>
+<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><code>--login</code></dt>
+<dt><span><code>--login</code></span></dt>
 <dd><p>Equivalent to <samp>-l</samp>.
 </p>
 </dd>
-<dt><code>--noediting</code></dt>
+<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><code>--noprofile</code></dt>
+<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><code>--norc</code></dt>
+<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><code>--posix</code></dt>
+<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
@@ -7684,15 +7795,15 @@ standard.  See <a href="#Bash-POSIX-Mode">Bash POSIX Mode</a>, for a description
 <small>POSIX</small> mode.
 </p>
 </dd>
-<dt><code>--restricted</code></dt>
+<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><code>--verbose</code></dt>
+<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><code>--version</code></dt>
+<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>
@@ -7702,7 +7813,7 @@ Bash on the standard output and exit successfully.
 invocation which are not available with the <code>set</code> builtin.
 </p>
 <dl compact="compact">
-<dt><code>-c</code></dt>
+<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>,
@@ -7712,12 +7823,12 @@ The assignment to <code>$0</code> sets the name of the shell, which is used
 in warning and error messages.
 </p>
 </dd>
-<dt><code>-i</code></dt>
+<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><code>-l</code></dt>
+<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;.
@@ -7729,11 +7840,11 @@ See <a href="#Bash-Startup-Files">Bash Startup Files</a>, for a description of t
 of a login shell.
 </p>
 </dd>
-<dt><code>-r</code></dt>
+<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><code>-s</code></dt>
+<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
@@ -7741,16 +7852,16 @@ when invoking an interactive shell or when reading input
 through a pipe.
 </p>
 </dd>
-<dt><code>-D</code></dt>
+<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 Translation</a>).
+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><code>[-+]O [<var>shopt_option</var>]</code></dt>
+<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;
@@ -7761,7 +7872,7 @@ If the invocation option is <samp>+O</samp>, the output is displayed in a format
 that may be reused as input.
 </p>
 </dd>
-<dt><code>--</code></dt>
+<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.
@@ -7792,7 +7903,9 @@ 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>
-<span id="Bash-Startup-Files"></span><div class="header">
+</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>
@@ -7889,10 +8002,12 @@ No other startup files are read.
 <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 remote shell
-daemon, usually <code>rshd</code>, or the secure shell daemon <code>sshd</code>.
-If Bash determines it is being run in
-this fashion, it reads and executes commands from <samp>~/.bashrc</samp>, if that
+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
@@ -7912,7 +8027,9 @@ 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>
-<span id="Interactive-Shells"></span><div class="header">
+</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>
@@ -7920,25 +8037,24 @@ Next: <a href="#Bash-Conditional-Expressions" accesskey="n" rel="next">Bash Cond
 <span id="index-interactive-shell-1"></span>
 <span id="index-shell_002c-interactive"></span>
 
-<table class="menu" border="0" cellspacing="0">
-<tr><td align="left" valign="top">&bull; <a href="#What-is-an-Interactive-Shell_003f" accesskey="1">What is an Interactive Shell?</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">What determines whether a shell is Interactive.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Is-this-Shell-Interactive_003f" accesskey="2">Is this Shell Interactive?</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to tell if a shell is interactive.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Interactive-Shell-Behavior" accesskey="3">Interactive Shell Behavior</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">What changes in a interactive shell?
-</td></tr>
-</table>
 
+<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>
-<span id="What-is-an-Interactive-Shell_003f"></span><div class="header">
+<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, without specifying the <samp>-c</samp> option, and
+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.
@@ -7950,7 +8066,9 @@ terminal.
 when an interactive shell is started.
 </p>
 <hr>
-<span id="Is-this-Shell-Interactive_003f"></span><div class="header">
+</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>
@@ -7981,7 +8099,9 @@ fi
 </pre></div>
 
 <hr>
-<span id="Interactive-Shell-Behavior"></span><div class="header">
+</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>
@@ -8005,7 +8125,7 @@ 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_COMMANDS</code>
+</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>).
 
@@ -8017,7 +8137,7 @@ instead of exiting immediately when it receives an <code>EOF</code> on its
 standard input when reading a command (see <a href="#The-Set-Builtin">The Set Builtin</a>).
 
 </li><li> Command history (see <a href="#Bash-History-Facilities">Bash History Facilities</a>)
-and history expansion (see <a href="#History-Interaction">History Interaction</a>)
+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.
@@ -8060,9 +8180,11 @@ status will not cause the shell to exit (see <a href="#Bash-POSIX-Mode">Bash POS
 
 </li><li> Parser syntax errors will not cause the shell to exit.
 
-</li><li> Simple spelling correction for directory arguments to the <code>cd</code>
-builtin is enabled by default (see the description of the <code>cdspell</code>
+</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
@@ -8071,7 +8193,10 @@ printing <code>$PS1</code> (see <a href="#Bash-Variables">Bash Variables</a>).
 </li></ol>
 
 <hr>
-<span id="Bash-Conditional-Expressions"></span><div class="header">
+</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>
@@ -8079,7 +8204,10 @@ Next: <a href="#Shell-Arithmetic" accesskey="n" rel="next">Shell Arithmetic</a>,
 <span id="index-expressions_002c-conditional"></span>
 
 <p>Conditional expressions are used by the <code>[[</code> compound command
-and the <code>test</code> and <code>[</code> builtin commands. The <code>test</code>
+(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.
@@ -8107,130 +8235,130 @@ The <code>test</code> command uses ASCII ordering.
 links and operate on the target of the link, rather than the link itself.
 </p>
 <dl compact="compact">
-<dt><code>-a <var>file</var></code></dt>
+<dt><span><code>-a <var>file</var></code></span></dt>
 <dd><p>True if <var>file</var> exists.
 </p>
 </dd>
-<dt><code>-b <var>file</var></code></dt>
+<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><code>-c <var>file</var></code></dt>
+<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><code>-d <var>file</var></code></dt>
+<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><code>-e <var>file</var></code></dt>
+<dt><span><code>-e <var>file</var></code></span></dt>
 <dd><p>True if <var>file</var> exists.
 </p>
 </dd>
-<dt><code>-f <var>file</var></code></dt>
+<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><code>-g <var>file</var></code></dt>
+<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><code>-h <var>file</var></code></dt>
+<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><code>-k <var>file</var></code></dt>
+<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><code>-p <var>file</var></code></dt>
+<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><code>-r <var>file</var></code></dt>
+<dt><span><code>-r <var>file</var></code></span></dt>
 <dd><p>True if <var>file</var> exists and is readable.
 </p>
 </dd>
-<dt><code>-s <var>file</var></code></dt>
+<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><code>-t <var>fd</var></code></dt>
+<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><code>-u <var>file</var></code></dt>
+<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><code>-w <var>file</var></code></dt>
+<dt><span><code>-w <var>file</var></code></span></dt>
 <dd><p>True if <var>file</var> exists and is writable.
 </p>
 </dd>
-<dt><code>-x <var>file</var></code></dt>
+<dt><span><code>-x <var>file</var></code></span></dt>
 <dd><p>True if <var>file</var> exists and is executable.
 </p>
 </dd>
-<dt><code>-G <var>file</var></code></dt>
+<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><code>-L <var>file</var></code></dt>
+<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><code>-N <var>file</var></code></dt>
+<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><code>-O <var>file</var></code></dt>
+<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><code>-S <var>file</var></code></dt>
+<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><code><var>file1</var> -ef <var>file2</var></code></dt>
+<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><code><var>file1</var> -nt <var>file2</var></code></dt>
+<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><code><var>file1</var> -ot <var>file2</var></code></dt>
+<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><code>-o <var>optname</var></code></dt>
+<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><code>-v <var>varname</var></code></dt>
+<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><code>-R <var>varname</var></code></dt>
+<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><code>-z <var>string</var></code></dt>
+<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><code>-n <var>string</var></code></dt>
-<dt><code><var>string</var></code></dt>
+<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><code><var>string1</var> == <var>string2</var></code></dt>
-<dt><code><var>string1</var> = <var>string2</var></code></dt>
+<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>).
@@ -8238,19 +8366,19 @@ described above (see <a href="#Conditional-Constructs">Conditional Constructs</a
 <p>&lsquo;<samp>=</samp>&rsquo; should be used with the <code>test</code> command for <small>POSIX</small> conformance.
 </p>
 </dd>
-<dt><code><var>string1</var> != <var>string2</var></code></dt>
+<dt><span><code><var>string1</var> != <var>string2</var></code></span></dt>
 <dd><p>True if the strings are not equal.
 </p>
 </dd>
-<dt><code><var>string1</var> &lt; <var>string2</var></code></dt>
+<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><code><var>string1</var> &gt; <var>string2</var></code></dt>
+<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><code><var>arg1</var> OP <var>arg2</var></code></dt>
+<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>
@@ -8264,7 +8392,9 @@ are evaluated as arithmetic expressions (see <a href="#Shell-Arithmetic">Shell A
 </dl>
 
 <hr>
-<span id="Shell-Arithmetic"></span><div class="header">
+</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>
@@ -8288,75 +8418,75 @@ equal-precedence operators.
 The levels are listed in order of decreasing precedence. 
 </p>
 <dl compact="compact">
-<dt><code><var>id</var>++ <var>id</var>--</code></dt>
+<dt><span><code><var>id</var>++ <var>id</var>--</code></span></dt>
 <dd><p>variable post-increment and post-decrement 
 </p>
 </dd>
-<dt><code>++<var>id</var> --<var>id</var></code></dt>
+<dt><span><code>++<var>id</var> --<var>id</var></code></span></dt>
 <dd><p>variable pre-increment and pre-decrement
 </p>
 </dd>
-<dt><code>- +</code></dt>
+<dt><span><code>- +</code></span></dt>
 <dd><p>unary minus and plus
 </p>
 </dd>
-<dt><code>! ~</code></dt>
+<dt><span><code>! ~</code></span></dt>
 <dd><p>logical and bitwise negation
 </p>
 </dd>
-<dt><code>**</code></dt>
+<dt><span><code>**</code></span></dt>
 <dd><p>exponentiation
 </p>
 </dd>
-<dt><code>* / %</code></dt>
+<dt><span><code>* / %</code></span></dt>
 <dd><p>multiplication, division, remainder
 </p>
 </dd>
-<dt><code>+ -</code></dt>
+<dt><span><code>+ -</code></span></dt>
 <dd><p>addition, subtraction
 </p>
 </dd>
-<dt><code>&lt;&lt; &gt;&gt;</code></dt>
+<dt><span><code>&lt;&lt; &gt;&gt;</code></span></dt>
 <dd><p>left and right bitwise shifts
 </p>
 </dd>
-<dt><code>&lt;= &gt;= &lt; &gt;</code></dt>
+<dt><span><code>&lt;= &gt;= &lt; &gt;</code></span></dt>
 <dd><p>comparison
 </p>
 </dd>
-<dt><code>== !=</code></dt>
+<dt><span><code>== !=</code></span></dt>
 <dd><p>equality and inequality
 </p>
 </dd>
-<dt><code>&amp;</code></dt>
+<dt><span><code>&amp;</code></span></dt>
 <dd><p>bitwise AND
 </p>
 </dd>
-<dt><code>^</code></dt>
+<dt><span><code>^</code></span></dt>
 <dd><p>bitwise exclusive OR
 </p>
 </dd>
-<dt><code>|</code></dt>
+<dt><span><code>|</code></span></dt>
 <dd><p>bitwise OR
 </p>
 </dd>
-<dt><code>&amp;&amp;</code></dt>
+<dt><span><code>&amp;&amp;</code></span></dt>
 <dd><p>logical AND
 </p>
 </dd>
-<dt><code>||</code></dt>
+<dt><span><code>||</code></span></dt>
 <dd><p>logical OR
 </p>
 </dd>
-<dt><code>expr ? expr : expr</code></dt>
+<dt><span><code>expr ? expr : expr</code></span></dt>
 <dd><p>conditional operator
 </p>
 </dd>
-<dt><code>= *= /= %= += -= &lt;&lt;= &gt;&gt;= &amp;= ^= |=</code></dt>
+<dt><span><code>= *= /= %= += -= &lt;&lt;= &gt;&gt;= &amp;= ^= |=</code></span></dt>
 <dd><p>assignment
 </p>
 </dd>
-<dt><code>expr1 , expr2</code></dt>
+<dt><span><code>expr1 , expr2</code></span></dt>
 <dd><p>comma
 </p></dd>
 </dl>
@@ -8369,9 +8499,9 @@ A shell variable that is null or unset evaluates to 0 when referenced
 by name without using the parameter expansion syntax.
 The value of a variable is evaluated as an arithmetic expression
 when it is referenced, or when a variable which has been given the  
-<var>integer</var> attribute using &lsquo;<samp>declare -i</samp>&rsquo; is assigned a value.
+<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 <var>integer</var> attribute turned on
+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
@@ -8395,14 +8525,16 @@ parentheses are evaluated first and may override the precedence
 rules above.
 </p>
 <hr>
-<span id="Aliases"></span><div class="header">
+</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><var>Aliases</var> allow a string to be substituted for a word when it is used
+<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.
@@ -8422,7 +8554,7 @@ This means that one may alias <code>ls</code> to <code>&quot;ls -F&quot;</code>,
 for instance, and Bash does not try to recursively expand the
 replacement text.
 If the last character of the alias value is a
-<var>blank</var>, then the next command word following the
+<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>
@@ -8430,7 +8562,7 @@ command, and removed with the <code>unalias</code> command.
 </p>
 <p>There is no mechanism for using arguments in the replacement text,
 as in <code>csh</code>.
-If arguments are needed, a shell function should be used
+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,
@@ -8460,7 +8592,9 @@ in compound commands.
 <p>For almost every purpose, shell functions are preferred over aliases.
 </p>
 <hr>
-<span id="Arrays"></span><div class="header">
+</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>
@@ -8543,6 +8677,9 @@ 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
@@ -8593,8 +8730,14 @@ destroys the array element at index <var>subscript</var>.
 Negative subscripts to indexed arrays are interpreted as described above.
 Unsetting the last element of an array variable does not unset the variable.
 <code>unset <var>name</var></code>, where <var>name</var> is an array, removes the
-entire array.  A subscript of &lsquo;<samp>*</samp>&rsquo; or &lsquo;<samp>@</samp>&rsquo; also removes the
 entire array.
+<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
@@ -8613,18 +8756,15 @@ builtins display array values in a way that allows them to be
 reused as input.
 </p>
 <hr>
-<span id="The-Directory-Stack"></span><div class="header">
+</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>
 
-<table class="menu" border="0" cellspacing="0">
-<tr><td align="left" valign="top">&bull; <a href="#Directory-Stack-Builtins" accesskey="1">Directory Stack Builtins</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Bash builtin commands to manipulate
-                                       the directory stack.
-</td></tr>
-</table>
 
 <p>The directory stack is a list of recently-visited directories.  The
 <code>pushd</code> builtin adds directories to the stack as it changes
@@ -8637,17 +8777,20 @@ of the directory stack.
 <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>
-<span id="Directory-Stack-Builtins"></span><div class="header">
+<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><code>dirs</code></dt>
-<dd><span id="index-dirs"></span>
-<div class="example">
+<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>
 
@@ -8657,27 +8800,27 @@ are added to the list with the <code>pushd</code> command; the
 The current directory is always the first directory in the stack.
 </p>
 <dl compact="compact">
-<dt><code>-c</code></dt>
+<dt><span><code>-c</code></span></dt>
 <dd><p>Clears the directory stack by deleting all of the elements.
 </p></dd>
-<dt><code>-l</code></dt>
+<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><code>-p</code></dt>
+<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><code>-v</code></dt>
+<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><code>+<var>N</var></code></dt>
+<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><code>-<var>N</var></code></dt>
+<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.
@@ -8685,80 +8828,116 @@ with zero.
 </dl>
 
 </dd>
-<dt><code>popd</code></dt>
-<dd><span id="index-popd"></span>
-<div class="example">
+<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>When no arguments are given, <code>popd</code>
-removes the top directory from the stack and
-performs a <code>cd</code> to the new top directory.
+<p>Removes elements from the directory stack.
 The elements are numbered from 0 starting at the first directory
-listed with <code>dirs</code>; that is, <code>popd</code> is equivalent to <code>popd +0</code>.
+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><code>-n</code></dt>
+<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><code>+<var>N</var></code></dt>
+<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.
+list printed by <code>dirs</code>), starting with zero, from the stack.
 </p></dd>
-<dt><code>-<var>N</var></code></dt>
+<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.
+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><code>pushd</code></dt>
+<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>Save the current directory on the top of the directory stack
-and then <code>cd</code> to <var>dir</var>.
-With no arguments, <code>pushd</code> exchanges the top two directories
-and makes the new top the current directory.
+<p>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><code>-n</code></dt>
+<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><code>+<var>N</var></code></dt>
+<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><code>-<var>N</var></code></dt>
+<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><code><var>dir</var></code></dt>
-<dd><p>Makes <var>dir</var> be the top of the stack, making
-it the new current directory as if it had been supplied as an argument
-to the <code>cd</code> builtin.
+<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>
-<span id="Controlling-the-Prompt"></span><div class="header">
+</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_COMMANDS</code> just before
+<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_COMMANDS</code> are set and non-null, Bash
+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>
@@ -8767,90 +8946,91 @@ can appear in the prompt variables <code>PS0</code>, <code>PS1</code>, <code>PS2
 <code>PS4</code>:
 </p>
 <dl compact="compact">
-<dt><code>\a</code></dt>
+<dt><span><code>\a</code></span></dt>
 <dd><p>A bell character.
 </p></dd>
-<dt><code>\d</code></dt>
+<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><code>\D{<var>format</var>}</code></dt>
+<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><code>\e</code></dt>
+<dt><span><code>\e</code></span></dt>
 <dd><p>An escape character.
 </p></dd>
-<dt><code>\h</code></dt>
+<dt><span><code>\h</code></span></dt>
 <dd><p>The hostname, up to the first &lsquo;.&rsquo;.
 </p></dd>
-<dt><code>\H</code></dt>
+<dt><span><code>\H</code></span></dt>
 <dd><p>The hostname.
 </p></dd>
-<dt><code>\j</code></dt>
+<dt><span><code>\j</code></span></dt>
 <dd><p>The number of jobs currently managed by the shell.
 </p></dd>
-<dt><code>\l</code></dt>
+<dt><span><code>\l</code></span></dt>
 <dd><p>The basename of the shell&rsquo;s terminal device name.
 </p></dd>
-<dt><code>\n</code></dt>
+<dt><span><code>\n</code></span></dt>
 <dd><p>A newline.
 </p></dd>
-<dt><code>\r</code></dt>
+<dt><span><code>\r</code></span></dt>
 <dd><p>A carriage return.
 </p></dd>
-<dt><code>\s</code></dt>
+<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><code>\t</code></dt>
+<dt><span><code>\t</code></span></dt>
 <dd><p>The time, in 24-hour HH:MM:SS format.
 </p></dd>
-<dt><code>\T</code></dt>
+<dt><span><code>\T</code></span></dt>
 <dd><p>The time, in 12-hour HH:MM:SS format.
 </p></dd>
-<dt><code>\@</code></dt>
+<dt><span><code>\@</code></span></dt>
 <dd><p>The time, in 12-hour am/pm format.
 </p></dd>
-<dt><code>\A</code></dt>
+<dt><span><code>\A</code></span></dt>
 <dd><p>The time, in 24-hour HH:MM format.
 </p></dd>
-<dt><code>\u</code></dt>
+<dt><span><code>\u</code></span></dt>
 <dd><p>The username of the current user.
 </p></dd>
-<dt><code>\v</code></dt>
+<dt><span><code>\v</code></span></dt>
 <dd><p>The version of Bash (e.g., 2.00)          
 </p></dd>
-<dt><code>\V</code></dt>
+<dt><span><code>\V</code></span></dt>
 <dd><p>The release of Bash, version + patchlevel (e.g., 2.00.0)
 </p></dd>
-<dt><code>\w</code></dt>
-<dd><p>The current working directory, with <code>$HOME</code> abbreviated with a tilde
+<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><code>\W</code></dt>
+<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><code>\!</code></dt>
+<dt><span><code>\!</code></span></dt>
 <dd><p>The history number of this command.
 </p></dd>
-<dt><code>\#</code></dt>
+<dt><span><code>\#</code></span></dt>
 <dd><p>The command number of this command.
 </p></dd>
-<dt><code>\$</code></dt>
+<dt><span><code>\$</code></span></dt>
 <dd><p>If the effective uid is 0, <code>#</code>, otherwise <code>$</code>.
 </p></dd>
-<dt><code>\<var>nnn</var></code></dt>
+<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><code>\\</code></dt>
+<dt><span><code>\\</code></span></dt>
 <dd><p>A backslash.
 </p></dd>
-<dt><code>\[</code></dt>
+<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><code>\]</code></dt>
+<dt><span><code>\]</code></span></dt>
 <dd><p>End a sequence of non-printing characters.
 </p></dd>
 </dl>
@@ -8871,7 +9051,9 @@ appear within command substitution or contain characters special to
 word expansion.
 </p>
 <hr>
-<span id="The-Restricted-Shell"></span><div class="header">
+</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>
@@ -8909,7 +9091,7 @@ option to the <code>hash</code> builtin command.
 <samp>-f</samp> and <samp>-d</samp> options to the <code>enable</code> builtin.
 </li><li> Using the <code>enable</code> builtin command to enable disabled shell builtins.
 </li><li> Specifying the <samp>-p</samp> option to the <code>command</code> builtin.
-</li><li> Turning off restricted mode with &lsquo;<samp>set +r</samp>&rsquo; or &lsquo;<samp>set +o restricted</samp>&rsquo;.
+</li><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.
@@ -8921,8 +9103,8 @@ the shell spawned to execute the script.
 <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), leaving the user
-in a non-writable directory other than his home directory after login,
+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>).
@@ -8932,7 +9114,9 @@ such as <code>jails</code>, <code>zones</code>, or <code>containers</code>.
 </p>
 
 <hr>
-<span id="Bash-POSIX-Mode"></span><div class="header">
+</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>
@@ -8972,6 +9156,12 @@ example, <code>SIGTSTP</code>.
 </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
@@ -9042,7 +9232,10 @@ 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.
+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
@@ -9063,7 +9256,7 @@ 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> When expanding the &lsquo;<samp>*</samp>&rsquo; special parameter in a pattern context where the
+</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.
 
@@ -9127,15 +9320,15 @@ shell function names and definitions.
 variable values without quotes, unless they contain shell metacharacters,
 even if the result contains nonprinting characters.
 
-</li><li> When the <code>cd</code> builtin is invoked in <var>logical</var> mode, and the pathname
+</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 <var>physical</var> mode.
+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 <var>PATH_MAX</var> when all symbolic links are expanded, <code>cd</code> will
+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
@@ -9171,6 +9364,11 @@ 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.
 
@@ -9195,7 +9393,9 @@ the <samp>--enable-strict-posix-default</samp> to <code>configure</code> when bu
 (see <a href="#Optional-Features">Optional Features</a>).
 </p>
 <hr>
-<span id="Shell-Compatibility-Mode"></span><div class="header">
+</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>
@@ -9203,8 +9403,8 @@ Previous: <a href="#Bash-POSIX-Mode" accesskey="p" rel="prev">Bash POSIX Mode</a
 <span id="index-Compatibility-Level"></span>
 <span id="index-Compatibility-Mode"></span>
 
-<p>Bash-4.0 introduced the concept of a &lsquo;shell compatibility level&rsquo;, specified
-as a set of options to the shopt builtin
+<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>,
@@ -9220,7 +9420,7 @@ behavior. It&rsquo;s intended to be a temporary solution.
 <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 above). 
+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.
@@ -9260,14 +9460,14 @@ For bash-4.3 and later versions, the <code>BASH_COMPAT</code> variable is prefer
 and it is required for bash-5.1 and later versions.
 </p>
 <dl compact="compact">
-<dt><code>compat31</code></dt>
+<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><code>compat32</code></dt>
+<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,
@@ -9277,7 +9477,7 @@ entire list)
 </li></ul>
 
 </dd>
-<dt><code>compat40</code></dt>
+<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
@@ -9288,7 +9488,7 @@ strcoll(3).
 </li></ul>
 
 </dd>
-<dt><code>compat41</code></dt>
+<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)
@@ -9300,7 +9500,7 @@ the single quotes are considered quoted
 </li></ul>
 
 </dd>
-<dt><code>compat42</code></dt>
+<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
@@ -9313,11 +9513,11 @@ are not special within double-quoted word expansions
 </li></ul>
 
 </dd>
-<dt><code>compat43</code></dt>
+<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
-(declare -a foo=&rsquo;(1 2)&rsquo;). Later versions warn that this usage is
+(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
@@ -9330,7 +9530,7 @@ the loop state to prevent this
 </li></ul>
 
 </dd>
-<dt><code>compat44</code></dt>
+<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
@@ -9345,7 +9545,7 @@ mode
 </li></ul>
 
 </dd>
-<dt><code>compat50 (set using BASH_COMPAT)</code></dt>
+<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
@@ -9357,32 +9557,66 @@ 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>
-<span id="Job-Control"></span><div class="header">
+</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">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+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>
-<table class="menu" border="0" cellspacing="0">
-<tr><td align="left" valign="top">&bull; <a href="#Job-Control-Basics" accesskey="1">Job Control Basics</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How job control works.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Job-Control-Builtins" accesskey="2">Job Control Builtins</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Bash builtin commands used to interact
-                               with job control.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Job-Control-Variables" accesskey="3">Job Control Variables</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Variables Bash uses to customize job
-                               control.
-</td></tr>
-</table>
 
+<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>
-<span id="Job-Control-Basics"></span><div class="header">
+<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>
@@ -9431,9 +9665,9 @@ which, unless caught, suspends the process.
 </p>
 <p>If the operating system on which Bash is running supports
 job control, Bash contains facilities to use it.  Typing the
-<var>suspend</var> character (typically &lsquo;<samp>^Z</samp>&rsquo;, Control-Z) while a
+<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 <var>delayed suspend</var> character
+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
@@ -9444,7 +9678,7 @@ takes effect immediately, and has the additional side effect of
 causing pending output and typeahead to be discarded. 
 </p>
 <p>There are a number of ways to refer to a job in the shell.  The
-character &lsquo;<samp>%</samp>&rsquo; introduces a job specification (<var>jobspec</var>).
+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
@@ -9496,16 +9730,17 @@ job changes state. The <samp>-f</samp> option causes <code>wait</code> to wait
 until the job or process terminates before returning.
 </p>
 <hr>
-<span id="Job-Control-Builtins"></span><div class="header">
+</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><code>bg</code></dt>
-<dd><span id="index-bg"></span>
-<div class="example">
+<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>
 
@@ -9518,9 +9753,8 @@ enabled, or, when run with job control enabled, any
 that was started without job control.
 </p>
 </dd>
-<dt><code>fg</code></dt>
-<dd><span id="index-fg"></span>
-<div class="example">
+<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>
 
@@ -9532,9 +9766,8 @@ job control enabled, <var>jobspec</var> does not specify a valid job or
 <var>jobspec</var> specifies a job that was started without job control.
 </p>
 </dd>
-<dt><code>jobs</code></dt>
-<dd><span id="index-jobs"></span>
-<div class="example">
+<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>
@@ -9543,24 +9776,24 @@ jobs -x <var>command</var> [<var>arguments</var>]
 following meanings:
 </p>
 <dl compact="compact">
-<dt><code>-l</code></dt>
+<dt><span><code>-l</code></span></dt>
 <dd><p>List process <small>ID</small>s in addition to the normal information.
 </p>
 </dd>
-<dt><code>-n</code></dt>
+<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><code>-p</code></dt>
+<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><code>-r</code></dt>
+<dt><span><code>-r</code></span></dt>
 <dd><p>Display only running jobs.
 </p>
 </dd>
-<dt><code>-s</code></dt>
+<dt><span><code>-s</code></span></dt>
 <dd><p>Display only stopped jobs.
 </p></dd>
 </dl>
@@ -9576,9 +9809,8 @@ corresponding process group <small>ID</small>, and executes <var>command</var>,
 passing it <var>argument</var>s, returning its exit status. 
 </p>
 </dd>
-<dt><code>kill</code></dt>
-<dd><span id="index-kill"></span>
-<div class="example">
+<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>
@@ -9600,9 +9832,8 @@ The return status is zero if at least one signal was successfully sent,
 or non-zero if an error occurs or an invalid option is encountered.
 </p>
 </dd>
-<dt><code>wait</code></dt>
-<dd><span id="index-wait"></span>
-<div class="example">
+<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>
 
@@ -9616,7 +9847,7 @@ 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>pids</var> or <var>jobspecs</var> or, if no arguments are
+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
@@ -9629,15 +9860,18 @@ 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, intead of returning when it changes
+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><code>disown</code></dt>
-<dd><span id="index-disown"></span>
-<div class="example">
+<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>
 
@@ -9653,17 +9887,24 @@ mark all jobs; the <samp>-r</samp> option without a <var>jobspec</var>
 argument restricts operation to running jobs.
 </p>
 </dd>
-<dt><code>suspend</code></dt>
-<dd><span id="index-suspend"></span>
-<div class="example">
+<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 cannot be suspended; the <samp>-f</samp>
+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.
-</p></dd>
+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>
@@ -9671,16 +9912,16 @@ builtins do not accept <var>jobspec</var> arguments.  They must be
 supplied process <small>ID</small>s.
 </p>
 <hr>
-<span id="Job-Control-Variables"></span><div class="header">
+</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><code>auto_resume</code>
-<span id="index-auto_005fresume"></span>
-</dt>
+<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
@@ -9707,9 +9948,12 @@ analogous to the &lsquo;<samp>%</samp>&rsquo; job <small>ID</small>.
 
 
 <hr>
-<span id="Command-Line-Editing"></span><div class="header">
+</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">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+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>
 
@@ -9720,7 +9964,7 @@ used by several different programs, including Bash.
 Command line editing is enabled by default when using an interactive shell,
 unless the <samp>--noediting</samp> option is supplied at shell invocation.
 Line editing is also used when using the <samp>-e</samp> option to the
-<code>read</code> builtin command (see <a href="#Bash-Builtins">Bash Builtins</a>).
+<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
@@ -9728,32 +9972,20 @@ Line editing can be enabled at any time using the <samp>-o emacs</samp> or
 (see <a href="#The-Set-Builtin">The Set Builtin</a>), or disabled using the <samp>+o emacs</samp> or 
 <samp>+o vi</samp> options to <code>set</code>.
 </p>
-<table class="menu" border="0" cellspacing="0">
-<tr><td align="left" valign="top">&bull; <a href="#Introduction-and-Notation" accesskey="1">Introduction and Notation</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Notation used in this text.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Readline-Interaction" accesskey="2">Readline Interaction</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">The minimum set of commands for editing a line.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Readline-Init-File" accesskey="3">Readline Init File</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Customizing Readline from a user&rsquo;s view.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Bindable-Readline-Commands" accesskey="4">Bindable Readline Commands</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">A description of most of the Readline commands
-                               available for binding
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Readline-vi-Mode" accesskey="5">Readline vi Mode</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">A short description of how to make Readline
-                               behave like the vi editor.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Programmable-Completion" accesskey="6">Programmable Completion</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to specify the possible completions for
-                               a specific command.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Programmable-Completion-Builtins" accesskey="7">Programmable Completion Builtins</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Builtin commands to specify how to
-                               complete arguments for a particular command.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#A-Programmable-Completion-Example" accesskey="8">A Programmable Completion Example</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">An example shell function for
-                               generating possible completions.
-</td></tr>
-</table>
 
+<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>
-<span id="Introduction-and-Notation"></span><div class="header">
+<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>
@@ -9795,9 +10027,11 @@ The <tt class="key">RET</tt> key may be labeled <tt class="key">Return</tt> or <
 some keyboards.
 </p>
 <hr>
-<span id="Readline-Interaction"></span><div class="header">
+</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 and Notation</a>, Up: <a href="#Command-Line-Editing" accesskey="u" rel="up">Command Line Editing</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+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>
@@ -9813,21 +10047,17 @@ the line, you simply press <tt class="key">RET</tt>.  You do not have to be at t
 end of the line to press <tt class="key">RET</tt>; the entire line is accepted
 regardless of the location of the cursor within the line.
 </p>
-<table class="menu" border="0" cellspacing="0">
-<tr><td align="left" valign="top">&bull; <a href="#Readline-Bare-Essentials" accesskey="1">Readline Bare Essentials</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">The least you need to know about Readline.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Readline-Movement-Commands" accesskey="2">Readline Movement Commands</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Moving about the input line.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Readline-Killing-Commands" accesskey="3">Readline Killing Commands</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to delete text, and how to get it back!
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Readline-Arguments" accesskey="4">Readline Arguments</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Giving numeric arguments to commands.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Searching" accesskey="5">Searching</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Searching through previous lines.
-</td></tr>
-</table>
 
+<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>
-<span id="Readline-Bare-Essentials"></span><div class="header">
+<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>
@@ -9855,34 +10085,36 @@ blank space created by the removal of the text.  A list of the bare
 essentials for editing the text of an input line follows.
 </p>
 <dl compact="compact">
-<dt><kbd>C-b</kbd></dt>
+<dt><span><kbd>C-b</kbd></span></dt>
 <dd><p>Move back one character.
 </p></dd>
-<dt><kbd>C-f</kbd></dt>
+<dt><span><kbd>C-f</kbd></span></dt>
 <dd><p>Move forward one character.
 </p></dd>
-<dt><tt class="key">DEL</tt> or <tt class="key">Backspace</tt></dt>
+<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><kbd>C-d</kbd></dt>
+<dt><span><kbd>C-d</kbd></span></dt>
 <dd><p>Delete the character underneath the cursor.
 </p></dd>
-<dt>Printing&nbsp;characters<!-- /@w --></dt>
+<dt><span>Printing&nbsp;characters<!-- /@w --></span></dt>
 <dd><p>Insert the character into the line at the cursor.
 </p></dd>
-<dt><kbd>C-_</kbd> or <kbd>C-x C-u</kbd></dt>
+<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 be set to
+<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>
-<span id="Readline-Movement-Commands"></span><div class="header">
+</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>
@@ -9896,19 +10128,19 @@ other commands have been added in addition to <kbd>C-b</kbd>, <kbd>C-f</kbd>,
 about the line.
 </p>
 <dl compact="compact">
-<dt><kbd>C-a</kbd></dt>
+<dt><span><kbd>C-a</kbd></span></dt>
 <dd><p>Move to the start of the line.
 </p></dd>
-<dt><kbd>C-e</kbd></dt>
+<dt><span><kbd>C-e</kbd></span></dt>
 <dd><p>Move to the end of the line.
 </p></dd>
-<dt><kbd>M-f</kbd></dt>
+<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><kbd>M-b</kbd></dt>
+<dt><span><kbd>M-b</kbd></span></dt>
 <dd><p>Move backward a word.
 </p></dd>
-<dt><kbd>C-l</kbd></dt>
+<dt><span><kbd>C-l</kbd></span></dt>
 <dd><p>Clear the screen, reprinting the current line at the top.
 </p></dd>
 </dl>
@@ -9918,7 +10150,9 @@ forward a word.  It is a loose convention that control keystrokes
 operate on characters while meta keystrokes operate on words.
 </p>
 <hr>
-<span id="Readline-Killing-Commands"></span><div class="header">
+</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>
@@ -9947,23 +10181,23 @@ another line.
 <p>Here is the list of commands for killing text.
 </p>
 <dl compact="compact">
-<dt><kbd>C-k</kbd></dt>
+<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><kbd>M-d</kbd></dt>
+<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><kbd>M-<span class="key">DEL</span></kbd></dt>
-<dd><p>Kill from the cursor the start of the current word, or, if between
+<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><kbd>C-w</kbd></dt>
+<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>
@@ -9974,20 +10208,22 @@ Word boundaries are the same as those used by <kbd>M-b</kbd>.
 means to copy the most-recently-killed text from the kill buffer.
 </p>
 <dl compact="compact">
-<dt><kbd>C-y</kbd></dt>
+<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><kbd>M-y</kbd></dt>
+<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>
-<span id="Readline-Arguments"></span><div class="header">
+</div>
+<div class="subsection" id="Readline-Arguments">
+<div class="header">
 <p>
-Next: <a href="#Searching" accesskey="n" rel="next">Searching</a>, Previous: <a href="#Readline-Killing-Commands" accesskey="p" rel="prev">Readline Killing Commands</a>, Up: <a href="#Readline-Interaction" accesskey="u" rel="up">Readline Interaction</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+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>
 
@@ -10007,7 +10243,9 @@ the <kbd>C-d</kbd> command an argument of 10, you could type &lsquo;<samp>M-1 0
 which will delete the next ten characters on the input line.
 </p>
 <hr>
-<span id="Searching"></span><div class="header">
+</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>
@@ -10054,7 +10292,10 @@ 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>
-<span id="Readline-Init-File"></span><div class="header">
+</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>
@@ -10065,7 +10306,8 @@ Next: <a href="#Bindable-Readline-Commands" accesskey="n" rel="next">Bindable Re
 keybindings installed by default, it is possible to use a different set
 of keybindings.
 Any user can customize programs that use Readline by putting
-commands in an <em>inputrc</em> file, conventionally in his home directory.
+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
@@ -10073,7 +10315,7 @@ 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 Builtins</a>.
+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.
@@ -10081,21 +10323,15 @@ init file is read, and the key bindings are set.
 <p>In addition, the <code>C-x C-r</code> command re-reads this init file, thus
 incorporating any changes that you might have made to it.
 </p>
-<table class="menu" border="0" cellspacing="0">
-<tr><td align="left" valign="top">&bull; <a href="#Readline-Init-File-Syntax" accesskey="1">Readline Init File Syntax</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Syntax for the commands in the inputrc file.
-</td></tr>
-<tr><th colspan="3" align="left" valign="top"><pre class="menu-comment">
-
-</pre></th></tr><tr><td align="left" valign="top">&bull; <a href="#Conditional-Init-Constructs" accesskey="2">Conditional Init Constructs</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Conditional key bindings in the inputrc file.
-</td></tr>
-<tr><th colspan="3" align="left" valign="top"><pre class="menu-comment">
-
-</pre></th></tr><tr><td align="left" valign="top">&bull; <a href="#Sample-Init-File" accesskey="3">Sample Init File</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">An example inputrc file.
-</td></tr>
-</table>
 
+<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>
-<span id="Readline-Init-File-Syntax"></span><div class="header">
+<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>
@@ -10109,7 +10345,7 @@ constructs (see <a href="#Conditional-Init-Constructs">Conditional Init Construc
 denote variable settings and key bindings.
 </p>
 <dl compact="compact">
-<dt>Variable Settings</dt>
+<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.
@@ -10135,64 +10371,86 @@ the value is null or empty, <var>on</var> (case-insensitive), or 1.  Any other
 value results in the variable being set to off.
 </p>
 <p>The <code>bind&nbsp;<span class="nolinebreak">-V</span></code><!-- /@w --> command lists the current Readline variable names
-and values.  See <a href="#Bash-Builtins">Bash Builtins</a>.
+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><code>bell-style</code></dt>
-<dd><span id="index-bell_002dstyle"></span>
-<p>Controls what happens when Readline wants to ring the terminal bell.
+<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><code>bind-tty-special-chars</code></dt>
-<dd><span id="index-bind_002dtty_002dspecial_002dchars"></span>
-<p>If set to &lsquo;<samp>on</samp>&rsquo; (the default), Readline attempts to bind the control
+<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><code>blink-matching-paren</code></dt>
-<dd><span id="index-blink_002dmatching_002dparen"></span>
-<p>If set to &lsquo;<samp>on</samp>&rsquo;, Readline attempts to briefly move the cursor to an
+<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><code>colored-completion-prefix</code></dt>
-<dd><span id="index-colored_002dcompletion_002dprefix"></span>
-<p>If set to &lsquo;<samp>on</samp>&rsquo;, when listing completions, Readline displays the
+<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><code>colored-stats</code></dt>
-<dd><span id="index-colored_002dstats"></span>
-<p>If set to &lsquo;<samp>on</samp>&rsquo;, Readline displays possible completions using different
+<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><code>comment-begin</code></dt>
-<dd><span id="index-comment_002dbegin"></span>
-<p>The string to insert at the beginning of the line when the
+<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><code>completion-display-width</code></dt>
-<dd><span id="index-completion_002ddisplay_002dwidth"></span>
-<p>The number of screen columns used to display possible matches
+<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.
@@ -10200,76 +10458,71 @@ A value of 0 will cause matches to be displayed one per line.
 The default value is -1.
 </p>
 </dd>
-<dt><code>completion-ignore-case</code></dt>
-<dd><span id="index-completion_002dignore_002dcase"></span>
-<p>If set to &lsquo;<samp>on</samp>&rsquo;, Readline performs filename matching and completion
+<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><code>completion-map-case</code></dt>
-<dd><span id="index-completion_002dmap_002dcase"></span>
-<p>If set to &lsquo;<samp>on</samp>&rsquo;, and <var>completion-ignore-case</var> is enabled, Readline
+<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><code>completion-prefix-display-length</code></dt>
-<dd><span id="index-completion_002dprefix_002ddisplay_002dlength"></span>
-<p>The length in characters of the common prefix of a list of possible
+<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><code>completion-query-items</code></dt>
-<dd><span id="index-completion_002dquery_002ditems"></span>
-<p>The number of possible completions that determines when the user is
+<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 0.
-A negative value means Readline should never ask.
+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><code>convert-meta</code></dt>
-<dd><span id="index-convert_002dmeta"></span>
-<p>If set to &lsquo;<samp>on</samp>&rsquo;, Readline will convert characters with the
+<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
+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><code>disable-completion</code></dt>
-<dd><span id="index-disable_002dcompletion"></span>
-<p>If set to &lsquo;<samp>On</samp>&rsquo;, Readline will inhibit word completion.
+<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><code>echo-control-characters</code></dt>
-<dd><span id="index-echo_002dcontrol_002dcharacters"></span>
-<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
+<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><code>editing-mode</code></dt>
-<dd><span id="index-editing_002dmode"></span>
-<p>The <code>editing-mode</code> variable controls which default set of
+<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><code>emacs-mode-string</code></dt>
-<dd><span id="index-emacs_002dmode_002dstring"></span>
-<p>If the <var>show-mode-in-prompt</var> variable is enabled,
+<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
@@ -10280,46 +10533,58 @@ sequence into the mode string.
 The default is &lsquo;<samp>@</samp>&rsquo;.
 </p>
 </dd>
-<dt><code>enable-bracketed-paste</code></dt>
-<dd><span id="index-enable_002dbracketed_002dpaste"></span>
-<p>When set to &lsquo;<samp>On</samp>&rsquo;, Readline will configure the terminal in a way
-that will enable it to insert each paste into the editing buffer as a
-single string of characters, instead of treating each character as if
-it had been read from the keyboard.  This can prevent pasted characters
-from being interpreted as editing commands.  The default is &lsquo;<samp>On</samp>&rsquo;.
-</p>
-</dd>
-<dt><code>enable-keypad</code></dt>
-<dd><span id="index-enable_002dkeypad"></span>
-<p>When set to &lsquo;<samp>on</samp>&rsquo;, Readline will try to enable the application
+<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><code>enable-meta-key</code></dt>
+<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><code>expand-tilde</code></dt>
-<dd><span id="index-expand_002dtilde"></span>
-<p>If set to &lsquo;<samp>on</samp>&rsquo;, tilde expansion is performed when Readline
+<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><code>history-preserve-point</code></dt>
-<dd><span id="index-history_002dpreserve_002dpoint"></span>
-<p>If set to &lsquo;<samp>on</samp>&rsquo;, the history code attempts to place the point (the
+<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><code>history-size</code></dt>
-<dd><span id="index-history_002dsize"></span>
-<p>Set the maximum number of history entries saved in the history list.
+<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
@@ -10329,9 +10594,8 @@ If an attempt is made to set <var>history-size</var> to a non-numeric value,
 the maximum number of history entries will be set to 500.
 </p>
 </dd>
-<dt><code>horizontal-scroll-mode</code></dt>
-<dd><span id="index-horizontal_002dscroll_002dmode"></span>
-<p>This variable can be set to either &lsquo;<samp>on</samp>&rsquo; or &lsquo;<samp>off</samp>&rsquo;.  Setting it
+<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.
@@ -10339,28 +10603,27 @@ This variable is automatically set to &lsquo;<samp>on</samp>&rsquo; for terminal
 By default, this variable is set to &lsquo;<samp>off</samp>&rsquo;.
 </p>
 </dd>
-<dt><code>input-meta</code></dt>
-<dd><span id="index-input_002dmeta"></span>
-<span id="index-meta_002dflag"></span>
+<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><code>isearch-terminators</code></dt>
-<dd><span id="index-isearch_002dterminators"></span>
-<p>The string of characters that should terminate an incremental search without
-subsequently executing the character as a command (see <a href="#Searching">Searching</a>).
+<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><code>keymap</code></dt>
-<dd><span id="index-keymap"></span>
-<p>Sets Readline&rsquo;s idea of the current keymap for key binding commands.
+<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>,
@@ -10378,7 +10641,7 @@ The value of the <code>editing-mode</code> variable also affects the
 default keymap.
 </p>
 </dd>
-<dt><code>keyseq-timeout</code></dt>
+<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
@@ -10395,29 +10658,26 @@ decide which key sequence to complete.
 The default value is <code>500</code>.
 </p>
 </dd>
-<dt><code>mark-directories</code></dt>
+<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><code>mark-modified-lines</code></dt>
-<dd><span id="index-mark_002dmodified_002dlines"></span>
-<p>This variable, when set to &lsquo;<samp>on</samp>&rsquo;, causes Readline to display an
+<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><code>mark-symlinked-directories</code></dt>
-<dd><span id="index-mark_002dsymlinked_002ddirectories"></span>
-<p>If set to &lsquo;<samp>on</samp>&rsquo;, completed names which are symbolic links
+<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><code>match-hidden-files</code></dt>
-<dd><span id="index-match_002dhidden_002dfiles"></span>
-<p>This variable, when set to &lsquo;<samp>on</samp>&rsquo;, causes Readline to match files whose
+<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
@@ -10425,55 +10685,51 @@ supplied by the user in the filename to be completed.
 This variable is &lsquo;<samp>on</samp>&rsquo; by default.
 </p>
 </dd>
-<dt><code>menu-complete-display-prefix</code></dt>
-<dd><span id="index-menu_002dcomplete_002ddisplay_002dprefix"></span>
-<p>If set to &lsquo;<samp>on</samp>&rsquo;, menu completion displays the common prefix of the
+<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><code>output-meta</code></dt>
-<dd><span id="index-output_002dmeta"></span>
-<p>If set to &lsquo;<samp>on</samp>&rsquo;, Readline will display characters with the
+<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><code>page-completions</code></dt>
-<dd><span id="index-page_002dcompletions"></span>
-<p>If set to &lsquo;<samp>on</samp>&rsquo;, Readline uses an internal <code>more</code>-like pager
+<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><code>print-completions-horizontally</code></dt>
+<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><code>revert-all-at-newline</code></dt>
-<dd><span id="index-revert_002dall_002dat_002dnewline"></span>
-<p>If set to &lsquo;<samp>on</samp>&rsquo;, Readline will undo all changes to history lines
+<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;.
+calls to <code>readline()</code>.  The default is &lsquo;<samp>off</samp>&rsquo;.
 </p>
 </dd>
-<dt><code>show-all-if-ambiguous</code></dt>
-<dd><span id="index-show_002dall_002dif_002dambiguous"></span>
-<p>This alters the default behavior of the completion functions.  If
+<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><code>show-all-if-unmodified</code></dt>
-<dd><span id="index-show_002dall_002dif_002dunmodified"></span>
-<p>This alters the default behavior of the completion functions in
+<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
@@ -10483,19 +10739,17 @@ of ringing the bell.
 The default value is &lsquo;<samp>off</samp>&rsquo;.
 </p>
 </dd>
-<dt><code>show-mode-in-prompt</code></dt>
-<dd><span id="index-show_002dmode_002din_002dprompt"></span>
-<p>If set to &lsquo;<samp>on</samp>&rsquo;, add a string to the beginning of the prompt
+<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><code>skip-completed-text</code></dt>
-<dd><span id="index-skip_002dcompleted_002dtext"></span>
-<p>If set to &lsquo;<samp>on</samp>&rsquo;, this alters the default completion behavior when
+<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
+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.
@@ -10506,9 +10760,8 @@ completion.
 The default value is &lsquo;<samp>off</samp>&rsquo;.
 </p>
 </dd>
-<dt><code>vi-cmd-mode-string</code></dt>
-<dd><span id="index-vi_002dcmd_002dmode_002dstring"></span>
-<p>If the <var>show-mode-in-prompt</var> variable is enabled,
+<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
@@ -10520,9 +10773,8 @@ sequence into the mode string.
 The default is &lsquo;<samp>(cmd)</samp>&rsquo;.
 </p>
 </dd>
-<dt><code>vi-ins-mode-string</code></dt>
-<dd><span id="index-vi_002dins_002dmode_002dstring"></span>
-<p>If the <var>show-mode-in-prompt</var> variable is enabled,
+<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
@@ -10534,9 +10786,8 @@ sequence into the mode string.
 The default is &lsquo;<samp>(ins)</samp>&rsquo;.
 </p>
 </dd>
-<dt><code>visible-stats</code></dt>
-<dd><span id="index-visible_002dstats"></span>
-<p>If set to &lsquo;<samp>on</samp>&rsquo;, a character denoting a file&rsquo;s type
+<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>
@@ -10544,7 +10795,7 @@ completions.  The default is &lsquo;<samp>off</samp>&rsquo;.
 </dl>
 
 </dd>
-<dt>Key Bindings</dt>
+<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
@@ -10560,15 +10811,15 @@ 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
+<p>In addition to command names, Readline allows keys to be bound
 to a string that is inserted when the key is pressed (a <var>macro</var>).
 </p>
 <p>The <code>bind&nbsp;<span class="nolinebreak">-p</span></code><!-- /@w --> command displays Readline function names and
-bindings in a format that can put directly into an initialization file.
-See <a href="#Bash-Builtins">Bash Builtins</a>.
+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><var>keyname</var>:&nbsp;<var><span class="nolinebreak">function-name</span></var>&nbsp;or&nbsp;<var>macro</var><!-- /@w --></dt>
+<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
@@ -10599,7 +10850,7 @@ and
 <var>TAB</var>.
 </p>
 </dd>
-<dt>&quot;<var>keyseq</var>&quot;:&nbsp;<var><span class="nolinebreak">function-name</span></var>&nbsp;or&nbsp;<var>macro</var><!-- /@w --></dt>
+<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
@@ -10625,22 +10876,22 @@ the text &lsquo;<samp>Function Key 1</samp>&rsquo;.
 specifying key sequences:
 </p>
 <dl compact="compact">
-<dt><code><kbd>\C-</kbd></code></dt>
+<dt><span><code><kbd>\C-</kbd></code></span></dt>
 <dd><p>control prefix
 </p></dd>
-<dt><code><kbd>\M-</kbd></code></dt>
+<dt><span><code><kbd>\M-</kbd></code></span></dt>
 <dd><p>meta prefix
 </p></dd>
-<dt><code><kbd>\e</kbd></code></dt>
+<dt><span><code><kbd>\e</kbd></code></span></dt>
 <dd><p>an escape character
 </p></dd>
-<dt><code><kbd>\\</kbd></code></dt>
+<dt><span><code><kbd>\\</kbd></code></span></dt>
 <dd><p>backslash
 </p></dd>
-<dt><code><kbd>\&quot;</kbd></code></dt>
+<dt><span><code><kbd>\&quot;</kbd></code></span></dt>
 <dd><p><tt class="key">&quot;</tt>, a double quotation mark
 </p></dd>
-<dt><code><kbd>\'</kbd></code></dt>
+<dt><span><code><kbd>\'</kbd></code></span></dt>
 <dd><p><tt class="key">'</tt>, a single quote or apostrophe
 </p></dd>
 </dl>
@@ -10649,35 +10900,35 @@ specifying key sequences:
 set of backslash escapes is available:
 </p>
 <dl compact="compact">
-<dt><code>\a</code></dt>
+<dt><span><code>\a</code></span></dt>
 <dd><p>alert (bell)
 </p></dd>
-<dt><code>\b</code></dt>
+<dt><span><code>\b</code></span></dt>
 <dd><p>backspace
 </p></dd>
-<dt><code>\d</code></dt>
+<dt><span><code>\d</code></span></dt>
 <dd><p>delete
 </p></dd>
-<dt><code>\f</code></dt>
+<dt><span><code>\f</code></span></dt>
 <dd><p>form feed
 </p></dd>
-<dt><code>\n</code></dt>
+<dt><span><code>\n</code></span></dt>
 <dd><p>newline
 </p></dd>
-<dt><code>\r</code></dt>
+<dt><span><code>\r</code></span></dt>
 <dd><p>carriage return
 </p></dd>
-<dt><code>\t</code></dt>
+<dt><span><code>\t</code></span></dt>
 <dd><p>horizontal tab
 </p></dd>
-<dt><code>\v</code></dt>
+<dt><span><code>\v</code></span></dt>
 <dd><p>vertical tab
 </p></dd>
-<dt><code>\<var>nnn</var></code></dt>
+<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><code>\x<var>HH</var></code></dt>
+<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>
@@ -10699,7 +10950,9 @@ insert a single &lsquo;<samp>\</samp>&rsquo; into the line:
 </dl>
 
 <hr>
-<span id="Conditional-Init-Constructs"></span><div class="header">
+</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>
@@ -10711,7 +10964,7 @@ bindings and variable settings to be performed as the result
 of tests.  There are four parser directives used.
 </p>
 <dl compact="compact">
-<dt><code>$if</code></dt>
+<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,
@@ -10719,7 +10972,7 @@ extends to the end of the line;
 unless otherwise noted, no characters are required to isolate it.
 </p>
 <dl compact="compact">
-<dt><code>mode</code></dt>
+<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
@@ -10728,7 +10981,7 @@ the <code>emacs-standard</code> and <code>emacs-ctlx</code> keymaps only if
 Readline is starting out in <code>emacs</code> mode.
 </p>
 </dd>
-<dt><code>term</code></dt>
+<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
@@ -10738,7 +10991,7 @@ allows <code>sun</code> to match both <code>sun</code> and <code>sun-cmd</code>,
 for instance.
 </p>
 </dd>
-<dt><code>version</code></dt>
+<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.
@@ -10760,7 +11013,7 @@ $endif
 </pre></div>
 
 </dd>
-<dt><code>application</code></dt>
+<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
@@ -10776,7 +11029,7 @@ $endif
 </pre></div>
 
 </dd>
-<dt><code>variable</code></dt>
+<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;.
@@ -10796,17 +11049,17 @@ $endif
 </dl>
 
 </dd>
-<dt><code>$endif</code></dt>
+<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><code>$else</code></dt>
+<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><code>$include</code></dt>
+<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>:
@@ -10817,7 +11070,9 @@ For example, the following directive reads from <samp>/etc/inputrc</samp>:
 </dl>
 
 <hr>
-<span id="Sample-Init-File"></span><div class="header">
+</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>
@@ -10929,36 +11184,21 @@ $endif
 </pre></div>
 
 <hr>
-<span id="Bindable-Readline-Commands"></span><div class="header">
+</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>
 
-<table class="menu" border="0" cellspacing="0">
-<tr><td align="left" valign="top">&bull; <a href="#Commands-For-Moving" accesskey="1">Commands For Moving</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Moving about the line.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Commands-For-History" accesskey="2">Commands For History</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Getting at previous lines.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Commands-For-Text" accesskey="3">Commands For Text</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Commands for changing text.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Commands-For-Killing" accesskey="4">Commands For Killing</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Commands for killing and yanking.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Numeric-Arguments" accesskey="5">Numeric Arguments</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Specifying numeric arguments, repeat counts.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Commands-For-Completion" accesskey="6">Commands For Completion</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Getting Readline to do the typing for you.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Keyboard-Macros" accesskey="7">Keyboard Macros</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Saving and re-executing typed characters
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Miscellaneous-Commands" accesskey="8">Miscellaneous Commands</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Other miscellaneous commands.
-</td></tr>
-</table>
 
 <p>This section describes Readline commands that may be bound to key
 sequences.
 You can list your key bindings by executing
 <code>bind&nbsp;<span class="nolinebreak">-P</span></code><!-- /@w --> or, for a more terse format, suitable for an
-<var>inputrc</var> file, <code>bind&nbsp;<span class="nolinebreak">-p</span></code><!-- /@w -->.  (See <a href="#Bash-Builtins">Bash Builtins</a>.)
+<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
@@ -10966,77 +11206,68 @@ 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>
-<span id="Commands-For-Moving"></span><div class="header">
+<div class="subsection" id="Commands-For-Moving">
+<div class="header">
 <p>
-Next: <a href="#Commands-For-History" accesskey="n" rel="next">Commands For History</a>, Up: <a href="#Bindable-Readline-Commands" accesskey="u" rel="up">Bindable Readline Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+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><code>beginning-of-line (C-a)</code>
-<span id="index-beginning_002dof_002dline-_0028C_002da_0029"></span>
-</dt>
+<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><code>end-of-line (C-e)</code>
-<span id="index-end_002dof_002dline-_0028C_002de_0029"></span>
-</dt>
+<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><code>forward-char (C-f)</code>
-<span id="index-forward_002dchar-_0028C_002df_0029"></span>
-</dt>
+<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><code>backward-char (C-b)</code>
-<span id="index-backward_002dchar-_0028C_002db_0029"></span>
-</dt>
+<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><code>forward-word (M-f)</code>
-<span id="index-forward_002dword-_0028M_002df_0029"></span>
-</dt>
+<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><code>backward-word (M-b)</code>
-<span id="index-backward_002dword-_0028M_002db_0029"></span>
-</dt>
+<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><code>shell-forward-word (M-C-f)</code>
-<span id="index-shell_002dforward_002dword-_0028M_002dC_002df_0029"></span>
-</dt>
+<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><code>shell-backward-word (M-C-b)</code>
-<span id="index-shell_002dbackward_002dword-_0028M_002dC_002db_0029"></span>
-</dt>
+<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><code>previous-screen-line ()</code>
-<span id="index-previous_002dscreen_002dline-_0028_0029"></span>
-</dt>
+<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><code>next-screen-line ()</code>
-<span id="index-next_002dscreen_002dline-_0028_0029"></span>
-</dt>
+<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
@@ -11044,41 +11275,35 @@ of the current Readline line is not greater than the length of the prompt
 plus the screen width.
 </p>
 </dd>
-<dt><code>clear-display (M-C-l)</code>
-<span id="index-clear_002ddisplay-_0028M_002dC_002dl_0029"></span>
-</dt>
+<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><code>clear-screen (C-l)</code>
-<span id="index-clear_002dscreen-_0028C_002dl_0029"></span>
-</dt>
+<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><code>redraw-current-line ()</code>
-<span id="index-redraw_002dcurrent_002dline-_0028_0029"></span>
-</dt>
+<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>
-<span id="Commands-For-History"></span><div class="header">
+</div>
+<div class="subsection" id="Commands-For-History">
+<div class="header">
 <p>
-Next: <a href="#Commands-For-Text" accesskey="n" rel="next">Commands For Text</a>, Previous: <a href="#Commands-For-Moving" accesskey="p" rel="prev">Commands For Moving</a>, Up: <a href="#Bindable-Readline-Commands" accesskey="u" rel="up">Bindable Readline Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+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><code>accept-line (Newline or Return)</code>
-<span id="index-accept_002dline-_0028Newline-or-Return_0029"></span>
-</dt>
+<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
@@ -11087,68 +11312,50 @@ If this line is a modified history line, then restore the history line
 to its original state.
 </p>
 </dd>
-<dt><code>previous-history (C-p)</code>
-<span id="index-previous_002dhistory-_0028C_002dp_0029"></span>
-</dt>
+<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><code>next-history (C-n)</code>
-<span id="index-next_002dhistory-_0028C_002dn_0029"></span>
-</dt>
+<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><code>beginning-of-history (M-&lt;)</code>
-<span id="index-beginning_002dof_002dhistory-_0028M_002d_003c_0029"></span>
-</dt>
+<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><code>end-of-history (M-&gt;)</code>
-<span id="index-end_002dof_002dhistory-_0028M_002d_003e_0029"></span>
-</dt>
+<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><code>reverse-search-history (C-r)</code>
-<span id="index-reverse_002dsearch_002dhistory-_0028C_002dr_0029"></span>
-</dt>
+<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><code>forward-search-history (C-s)</code>
-<span id="index-forward_002dsearch_002dhistory-_0028C_002ds_0029"></span>
-</dt>
+<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><code>non-incremental-reverse-search-history (M-p)</code>
-<span id="index-non_002dincremental_002dreverse_002dsearch_002dhistory-_0028M_002dp_0029"></span>
-</dt>
+<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><code>non-incremental-forward-search-history (M-n)</code>
-<span id="index-non_002dincremental_002dforward_002dsearch_002dhistory-_0028M_002dn_0029"></span>
-</dt>
+<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><code>history-search-forward ()</code>
-<span id="index-history_002dsearch_002dforward-_0028_0029"></span>
-</dt>
+<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.
@@ -11156,9 +11363,7 @@ This is a non-incremental search.
 By default, this command is unbound.
 </p>
 </dd>
-<dt><code>history-search-backward ()</code>
-<span id="index-history_002dsearch_002dbackward-_0028_0029"></span>
-</dt>
+<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.
@@ -11166,9 +11371,7 @@ This is a non-incremental search.
 By default, this command is unbound.
 </p>
 </dd>
-<dt><code>history-substring-search-forward ()</code>
-<span id="index-history_002dsubstring_002dsearch_002dforward-_0028_0029"></span>
-</dt>
+<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.
@@ -11176,9 +11379,7 @@ This is a non-incremental search.
 By default, this command is unbound.
 </p>
 </dd>
-<dt><code>history-substring-search-backward ()</code>
-<span id="index-history_002dsubstring_002dsearch_002dbackward-_0028_0029"></span>
-</dt>
+<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.
@@ -11186,9 +11387,7 @@ This is a non-incremental search.
 By default, this command is unbound.
 </p>
 </dd>
-<dt><code>yank-nth-arg (M-C-y)</code>
-<span id="index-yank_002dnth_002darg-_0028M_002dC_002dy_0029"></span>
-</dt>
+<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>,
@@ -11199,9 +11398,7 @@ Once the argument <var>n</var> is computed, the argument is extracted
 as if the &lsquo;<samp>!<var>n</var></samp>&rsquo; history expansion had been specified.
 </p>
 </dd>
-<dt><code>yank-last-arg (M-. or M-_)</code>
-<span id="index-yank_002dlast_002darg-_0028M_002d_002e-or-M_002d_005f_0029"></span>
-</dt>
+<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>.
@@ -11215,9 +11412,7 @@ 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><code>operate-and-get-next (C-o)</code>
-<span id="index-operate_002dand_002dget_002dnext-_0028C_002do_0029"></span>
-</dt>
+<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
@@ -11226,65 +11421,59 @@ 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>
-<span id="Commands-For-Text"></span><div class="header">
+</div>
+<div class="subsection" id="Commands-For-Text">
+<div class="header">
 <p>
-Next: <a href="#Commands-For-Killing" accesskey="n" rel="next">Commands For Killing</a>, Previous: <a href="#Commands-For-History" accesskey="p" rel="prev">Commands For History</a>, Up: <a href="#Bindable-Readline-Commands" accesskey="u" rel="up">Bindable Readline Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+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><code><i>end-of-file</i> (usually C-d)</code>
-<span id="index-end_002dof_002dfile-_0028usually-C_002dd_0029"></span>
-</dt>
+<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><code>delete-char (C-d)</code>
-<span id="index-delete_002dchar-_0028C_002dd_0029"></span>
-</dt>
+<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><code>backward-delete-char (Rubout)</code>
-<span id="index-backward_002ddelete_002dchar-_0028Rubout_0029"></span>
-</dt>
+<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><code>forward-backward-delete-char ()</code>
-<span id="index-forward_002dbackward_002ddelete_002dchar-_0028_0029"></span>
-</dt>
+<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><code>quoted-insert (C-q or C-v)</code>
-<span id="index-quoted_002dinsert-_0028C_002dq-or-C_002dv_0029"></span>
-</dt>
+<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><code>self-insert (a, b, A, 1, !, &hellip;)</code>
-<span id="index-self_002dinsert-_0028a_002c-b_002c-A_002c-1_002c-_0021_002c-_2026_0029"></span>
-</dt>
+<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><code>bracketed-paste-begin ()</code>
-<span id="index-bracketed_002dpaste_002dbegin-_0028_0029"></span>
-</dt>
+<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
@@ -11298,9 +11487,7 @@ mark is active, Readline redisplay uses the terminal&rsquo;s standout mode to
 denote the region.
 </p>
 </dd>
-<dt><code>transpose-chars (C-t)</code>
-<span id="index-transpose_002dchars-_0028C_002dt_0029"></span>
-</dt>
+<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
@@ -11309,39 +11496,29 @@ transposes the last two characters of the line.
 Negative arguments have no effect.
 </p>
 </dd>
-<dt><code>transpose-words (M-t)</code>
-<span id="index-transpose_002dwords-_0028M_002dt_0029"></span>
-</dt>
+<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><code>upcase-word (M-u)</code>
-<span id="index-upcase_002dword-_0028M_002du_0029"></span>
-</dt>
+<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><code>downcase-word (M-l)</code>
-<span id="index-downcase_002dword-_0028M_002dl_0029"></span>
-</dt>
+<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><code>capitalize-word (M-c)</code>
-<span id="index-capitalize_002dword-_0028M_002dc_0029"></span>
-</dt>
+<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><code>overwrite-mode ()</code>
-<span id="index-overwrite_002dmode-_0028_0029"></span>
-</dt>
+<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
@@ -11359,75 +11536,59 @@ before point with a space.
 </dl>
 
 <hr>
-<span id="Commands-For-Killing"></span><div class="header">
+</div>
+<div class="subsection" id="Commands-For-Killing">
+<div class="header">
 <p>
-Next: <a href="#Numeric-Arguments" accesskey="n" rel="next">Numeric Arguments</a>, Previous: <a href="#Commands-For-Text" accesskey="p" rel="prev">Commands For Text</a>, Up: <a href="#Bindable-Readline-Commands" accesskey="u" rel="up">Bindable Readline Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+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><code>kill-line (C-k)</code>
-<span id="index-kill_002dline-_0028C_002dk_0029"></span>
-</dt>
+<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><code>backward-kill-line (C-x Rubout)</code>
-<span id="index-backward_002dkill_002dline-_0028C_002dx-Rubout_0029"></span>
-</dt>
+<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><code>unix-line-discard (C-u)</code>
-<span id="index-unix_002dline_002ddiscard-_0028C_002du_0029"></span>
-</dt>
+<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><code>kill-whole-line ()</code>
-<span id="index-kill_002dwhole_002dline-_0028_0029"></span>
-</dt>
+<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><code>kill-word (M-d)</code>
-<span id="index-kill_002dword-_0028M_002dd_0029"></span>
-</dt>
+<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><code>backward-kill-word (M-<span class="key">DEL</span>)</code>
-<span id="index-backward_002dkill_002dword-_0028M_002dDEL_0029"></span>
-</dt>
+<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><code>shell-kill-word (M-C-d)</code>
-<span id="index-shell_002dkill_002dword-_0028M_002dC_002dd_0029"></span>
-</dt>
+<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><code>shell-backward-kill-word ()</code>
-<span id="index-shell_002dbackward_002dkill_002dword-_0028_0029"></span>
-</dt>
+<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><code>shell-transpose-words (M-C-t)</code>
-<span id="index-shell_002dtranspose_002dwords-_0028M_002dC_002dt_0029"></span>
-</dt>
+<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
@@ -11436,88 +11597,68 @@ Word boundaries are the same as <code>shell-forward-word</code> and
 <code>shell-backward-word</code>.
 </p>
 </dd>
-<dt><code>unix-word-rubout (C-w)</code>
-<span id="index-unix_002dword_002drubout-_0028C_002dw_0029"></span>
-</dt>
+<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><code>unix-filename-rubout ()</code>
-<span id="index-unix_002dfilename_002drubout-_0028_0029"></span>
-</dt>
+<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><code>delete-horizontal-space ()</code>
-<span id="index-delete_002dhorizontal_002dspace-_0028_0029"></span>
-</dt>
+<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><code>kill-region ()</code>
-<span id="index-kill_002dregion-_0028_0029"></span>
-</dt>
+<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><code>copy-region-as-kill ()</code>
-<span id="index-copy_002dregion_002das_002dkill-_0028_0029"></span>
-</dt>
+<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><code>copy-backward-word ()</code>
-<span id="index-copy_002dbackward_002dword-_0028_0029"></span>
-</dt>
+<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><code>copy-forward-word ()</code>
-<span id="index-copy_002dforward_002dword-_0028_0029"></span>
-</dt>
+<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><code>yank (C-y)</code>
-<span id="index-yank-_0028C_002dy_0029"></span>
-</dt>
+<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><code>yank-pop (M-y)</code>
-<span id="index-yank_002dpop-_0028M_002dy_0029"></span>
-</dt>
+<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>
-<span id="Numeric-Arguments"></span><div class="header">
+</div>
+<div class="subsection" id="Numeric-Arguments">
+<div class="header">
 <p>
-Next: <a href="#Commands-For-Completion" accesskey="n" rel="next">Commands For Completion</a>, Previous: <a href="#Commands-For-Killing" accesskey="p" rel="prev">Commands For Killing</a>, Up: <a href="#Bindable-Readline-Commands" accesskey="u" rel="up">Bindable Readline Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+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><code>digit-argument (<kbd>M-0</kbd>, <kbd>M-1</kbd>, &hellip; <kbd>M--</kbd>)</code>
-<span id="index-digit_002dargument-_0028M_002d0_002c-M_002d1_002c-_2026-M_002d_002d_0029"></span>
-</dt>
+<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><code>universal-argument ()</code>
-<span id="index-universal_002dargument-_0028_0029"></span>
-</dt>
+<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.
@@ -11534,16 +11675,16 @@ By default, this is not bound to a key.
 </dl>
 
 <hr>
-<span id="Commands-For-Completion"></span><div class="header">
+</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">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>
+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><code>complete (<span class="key">TAB</span>)</code>
-<span id="index-complete-_0028TAB_0029"></span>
-</dt>
+<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
@@ -11553,25 +11694,19 @@ command (including aliases and functions) in turn.  If none
 of these produces a match, filename completion is attempted.
 </p>
 </dd>
-<dt><code>possible-completions (M-?)</code>
-<span id="index-possible_002dcompletions-_0028M_002d_003f_0029"></span>
-</dt>
+<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><code>insert-completions (M-*)</code>
-<span id="index-insert_002dcompletions-_0028M_002d_002a_0029"></span>
-</dt>
+<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><code>menu-complete ()</code>
-<span id="index-menu_002dcomplete-_0028_0029"></span>
-</dt>
+<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
@@ -11586,17 +11721,13 @@ This command is intended to be bound to <tt class="key">TAB</tt>, but is unbound
 by default.
 </p>
 </dd>
-<dt><code>menu-complete-backward ()</code>
-<span id="index-menu_002dcomplete_002dbackward-_0028_0029"></span>
-</dt>
+<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><code>delete-char-or-list ()</code>
-<span id="index-delete_002dchar_002dor_002dlist-_0028_0029"></span>
-</dt>
+<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
@@ -11604,64 +11735,46 @@ If at the end of the line, behaves identically to
 This command is unbound by default.
 </p>
 </dd>
-<dt><code>complete-filename (M-/)</code>
-<span id="index-complete_002dfilename-_0028M_002d_002f_0029"></span>
-</dt>
+<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><code>possible-filename-completions (C-x /)</code>
-<span id="index-possible_002dfilename_002dcompletions-_0028C_002dx-_002f_0029"></span>
-</dt>
+<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><code>complete-username (M-~)</code>
-<span id="index-complete_002dusername-_0028M_002d_007e_0029"></span>
-</dt>
+<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><code>possible-username-completions (C-x ~)</code>
-<span id="index-possible_002dusername_002dcompletions-_0028C_002dx-_007e_0029"></span>
-</dt>
+<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><code>complete-variable (M-$)</code>
-<span id="index-complete_002dvariable-_0028M_002d_0024_0029"></span>
-</dt>
+<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><code>possible-variable-completions (C-x $)</code>
-<span id="index-possible_002dvariable_002dcompletions-_0028C_002dx-_0024_0029"></span>
-</dt>
+<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><code>complete-hostname (M-@)</code>
-<span id="index-complete_002dhostname-_0028M_002d_0040_0029"></span>
-</dt>
+<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><code>possible-hostname-completions (C-x @)</code>
-<span id="index-possible_002dhostname_002dcompletions-_0028C_002dx-_0040_0029"></span>
-</dt>
+<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><code>complete-command (M-!)</code>
-<span id="index-complete_002dcommand-_0028M_002d_0021_0029"></span>
-</dt>
+<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
@@ -11669,32 +11782,24 @@ functions, shell builtins, and finally executable filenames,
 in that order.
 </p>
 </dd>
-<dt><code>possible-command-completions (C-x !)</code>
-<span id="index-possible_002dcommand_002dcompletions-_0028C_002dx-_0021_0029"></span>
-</dt>
+<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><code>dynamic-complete-history (M-<span class="key">TAB</span>)</code>
-<span id="index-dynamic_002dcomplete_002dhistory-_0028M_002dTAB_0029"></span>
-</dt>
+<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><code>dabbrev-expand ()</code>
-<span id="index-dabbrev_002dexpand-_0028_0029"></span>
-</dt>
+<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><code>complete-into-braces (M-{)</code>
-<span id="index-complete_002dinto_002dbraces-_0028M_002d_007b_0029"></span>
-</dt>
+<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>).
@@ -11703,142 +11808,112 @@ enclosed within braces so the list is available to the shell
 </dl>
 
 <hr>
-<span id="Keyboard-Macros"></span><div class="header">
+</div>
+<div class="subsection" id="Keyboard-Macros">
+<div class="header">
 <p>
-Next: <a href="#Miscellaneous-Commands" accesskey="n" rel="next">Miscellaneous Commands</a>, Previous: <a href="#Commands-For-Completion" accesskey="p" rel="prev">Commands For Completion</a>, Up: <a href="#Bindable-Readline-Commands" accesskey="u" rel="up">Bindable Readline Commands</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+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><code>start-kbd-macro (C-x ()</code>
-<span id="index-start_002dkbd_002dmacro-_0028C_002dx-_0028_0029"></span>
-</dt>
+<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><code>end-kbd-macro (C-x ))</code>
-<span id="index-end_002dkbd_002dmacro-_0028C_002dx-_0029_0029"></span>
-</dt>
+<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><code>call-last-kbd-macro (C-x e)</code>
-<span id="index-call_002dlast_002dkbd_002dmacro-_0028C_002dx-e_0029"></span>
-</dt>
+<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><code>print-last-kbd-macro ()</code>
-<span id="index-print_002dlast_002dkbd_002dmacro-_0028_0029"></span>
-</dt>
-<dd><p>Print the last keboard macro defined in a format suitable for the
+<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>
-<span id="Miscellaneous-Commands"></span><div class="header">
+</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><code>re-read-init-file (C-x C-r)</code>
-<span id="index-re_002dread_002dinit_002dfile-_0028C_002dx-C_002dr_0029"></span>
-</dt>
+<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><code>abort (C-g)</code>
-<span id="index-abort-_0028C_002dg_0029"></span>
-</dt>
+<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><code>do-lowercase-version (M-A, M-B, M-<var>x</var>, &hellip;)</code>
-<span id="index-do_002dlowercase_002dversion-_0028M_002dA_002c-M_002dB_002c-M_002dx_002c-_2026_0029"></span>
-</dt>
+<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><code>prefix-meta (<span class="key">ESC</span>)</code>
-<span id="index-prefix_002dmeta-_0028ESC_0029"></span>
-</dt>
+<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><code>undo (C-_ or C-x C-u)</code>
-<span id="index-undo-_0028C_002d_005f-or-C_002dx-C_002du_0029"></span>
-</dt>
+<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><code>revert-line (M-r)</code>
-<span id="index-revert_002dline-_0028M_002dr_0029"></span>
-</dt>
+<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><code>tilde-expand (M-&amp;)</code>
-<span id="index-tilde_002dexpand-_0028M_002d_0026_0029"></span>
-</dt>
+<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><code>set-mark (C-@)</code>
-<span id="index-set_002dmark-_0028C_002d_0040_0029"></span>
-</dt>
+<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><code>exchange-point-and-mark (C-x C-x)</code>
-<span id="index-exchange_002dpoint_002dand_002dmark-_0028C_002dx-C_002dx_0029"></span>
-</dt>
+<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><code>character-search (C-])</code>
-<span id="index-character_002dsearch-_0028C_002d_005d_0029"></span>
-</dt>
+<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 count searches for previous occurrences.
+character.  A negative argument searches for previous occurrences.
 </p>
 </dd>
-<dt><code>character-search-backward (M-C-])</code>
-<span id="index-character_002dsearch_002dbackward-_0028M_002dC_002d_005d_0029"></span>
-</dt>
+<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 count searches for subsequent
+of that character.  A negative argument searches for subsequent
 occurrences.
 </p>
 </dd>
-<dt><code>skip-csi-sequence ()</code>
-<span id="index-skip_002dcsi_002dsequence-_0028_0029"></span>
-</dt>
+<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
+unless explicitly bound to a Readline command, instead of inserting
 stray characters into the editing buffer.  This is unbound by default,
 but usually bound to ESC-[.
 </p>
 </dd>
-<dt><code>insert-comment (M-#)</code>
-<span id="index-insert_002dcomment-_0028M_002d_0023_0029"></span>
-</dt>
+<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
@@ -11853,107 +11928,85 @@ If a numeric argument causes the comment character to be removed, the line
 will be executed by the shell.
 </p>
 </dd>
-<dt><code>dump-functions ()</code>
-<span id="index-dump_002dfunctions-_0028_0029"></span>
-</dt>
+<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><code>dump-variables ()</code>
-<span id="index-dump_002dvariables-_0028_0029"></span>
-</dt>
+<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><code>dump-macros ()</code>
-<span id="index-dump_002dmacros-_0028_0029"></span>
-</dt>
+<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><code>glob-complete-word (M-g)</code>
-<span id="index-glob_002dcomplete_002dword-_0028M_002dg_0029"></span>
-</dt>
+<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><code>glob-expand-word (C-x *)</code>
-<span id="index-glob_002dexpand_002dword-_0028C_002dx-_002a_0029"></span>
-</dt>
+<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><code>glob-list-expansions (C-x g)</code>
-<span id="index-glob_002dlist_002dexpansions-_0028C_002dx-g_0029"></span>
-</dt>
+<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><code>display-shell-version (C-x C-v)</code>
-<span id="index-display_002dshell_002dversion-_0028C_002dx-C_002dv_0029"></span>
-</dt>
+<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><code>shell-expand-line (M-C-e)</code>
-<span id="index-shell_002dexpand_002dline-_0028M_002dC_002de_0029"></span>
-</dt>
+<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><code>history-expand-line (M-^)</code>
-<span id="index-history_002dexpand_002dline-_0028M_002d_005e_0029"></span>
-</dt>
+<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><code>magic-space ()</code>
-<span id="index-magic_002dspace-_0028_0029"></span>
-</dt>
+<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 Interaction</a>).
+(see <a href="#History-Interaction">History Expansion</a>).
 </p>
 </dd>
-<dt><code>alias-expand-line ()</code>
-<span id="index-alias_002dexpand_002dline-_0028_0029"></span>
-</dt>
+<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><code>history-and-alias-expand-line ()</code>
-<span id="index-history_002dand_002dalias_002dexpand_002dline-_0028_0029"></span>
-</dt>
+<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><code>insert-last-argument (M-. or M-_)</code>
-<span id="index-insert_002dlast_002dargument-_0028M_002d_002e-or-M_002d_005f_0029"></span>
-</dt>
+<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><code>edit-and-execute-command (C-x C-e)</code>
-<span id="index-edit_002dand_002dexecute_002dcommand-_0028C_002dx-C_002de_0029"></span>
-</dt>
+<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
@@ -11966,7 +12019,10 @@ as the editor, in that order.
 </dl>
 
 <hr>
-<span id="Readline-vi-Mode"></span><div class="header">
+</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>
@@ -11990,7 +12046,9 @@ history lines with &lsquo;<samp>k</samp>&rsquo; and subsequent lines with &lsquo
 so forth.
 </p>
 <hr>
-<span id="Programmable-Completion"></span><div class="header">
+</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>
@@ -12021,7 +12079,7 @@ 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 Bash completion
-described above (see <a href="#Commands-For-Completion">Commands For Completion</a>) is performed.
+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
@@ -12152,7 +12210,9 @@ complete -D -F _completion_loader -o bashdefault -o default
 </pre></div>
 
 <hr>
-<span id="Programmable-Completion-Builtins"></span><div class="header">
+</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>
@@ -12164,9 +12224,8 @@ facilities: one to specify how the arguments to a particular command are to
 be completed, and two to modify the completion as it is happening.
 </p>
 <dl compact="compact">
-<dt><code>compgen</code></dt>
-<dd><span id="index-compgen"></span>
-<div class="example">
+<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>
 
@@ -12189,9 +12248,8 @@ will be displayed.
 matches were generated.
 </p>
 </dd>
-<dt><code>complete</code></dt>
-<dd><span id="index-complete"></span>
-<div class="example">
+<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>
@@ -12232,27 +12290,27 @@ should be quoted to protect them from expansion before the
 </p>
 
 <dl compact="compact">
-<dt><code>-o <var>comp-option</var></code></dt>
+<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><code>bashdefault</code></dt>
+<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><code>default</code></dt>
+<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><code>dirnames</code></dt>
+<dt><span><code>dirnames</code></span></dt>
 <dd><p>Perform directory name completion if the compspec generates no matches.
 </p>
 </dd>
-<dt><code>filenames</code></dt>
+<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).
@@ -12260,21 +12318,21 @@ This option is intended to be used with shell functions specified
 with <samp>-F</samp>.
 </p>
 </dd>
-<dt><code>noquote</code></dt>
+<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><code>nosort</code></dt>
+<dt><span><code>nosort</code></span></dt>
 <dd><p>Tell Readline not to sort the list of possible completions alphabetically.
 </p>
 </dd>
-<dt><code>nospace</code></dt>
+<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><code>plusdirs</code></dt>
+<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.
@@ -12283,118 +12341,119 @@ matches are added to the results of the other actions.
 </dl>
 
 </dd>
-<dt><code>-A <var>action</var></code></dt>
+<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><code>alias</code></dt>
+<dt><span><code>alias</code></span></dt>
 <dd><p>Alias names.  May also be specified as <samp>-a</samp>.
 </p>
 </dd>
-<dt><code>arrayvar</code></dt>
+<dt><span><code>arrayvar</code></span></dt>
 <dd><p>Array variable names.
 </p>
 </dd>
-<dt><code>binding</code></dt>
+<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><code>builtin</code></dt>
+<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><code>command</code></dt>
+<dt><span><code>command</code></span></dt>
 <dd><p>Command names.  May also be specified as <samp>-c</samp>.
 </p>
 </dd>
-<dt><code>directory</code></dt>
+<dt><span><code>directory</code></span></dt>
 <dd><p>Directory names.  May also be specified as <samp>-d</samp>.
 </p>
 </dd>
-<dt><code>disabled</code></dt>
+<dt><span><code>disabled</code></span></dt>
 <dd><p>Names of disabled shell builtins.
 </p>
 </dd>
-<dt><code>enabled</code></dt>
+<dt><span><code>enabled</code></span></dt>
 <dd><p>Names of enabled shell builtins.
 </p>
 </dd>
-<dt><code>export</code></dt>
+<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><code>file</code></dt>
+<dt><span><code>file</code></span></dt>
 <dd><p>File names.  May also be specified as <samp>-f</samp>.
 </p>
 </dd>
-<dt><code>function</code></dt>
+<dt><span><code>function</code></span></dt>
 <dd><p>Names of shell functions.
 </p>
 </dd>
-<dt><code>group</code></dt>
+<dt><span><code>group</code></span></dt>
 <dd><p>Group names.  May also be specified as <samp>-g</samp>.
 </p>
 </dd>
-<dt><code>helptopic</code></dt>
-<dd><p>Help topics as accepted by the <code>help</code> builtin (see <a href="#Bash-Builtins">Bash Builtins</a>).
+<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><code>hostname</code></dt>
+<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><code>job</code></dt>
+<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><code>keyword</code></dt>
+<dt><span><code>keyword</code></span></dt>
 <dd><p>Shell reserved words.  May also be specified as <samp>-k</samp>.
 </p>
 </dd>
-<dt><code>running</code></dt>
+<dt><span><code>running</code></span></dt>
 <dd><p>Names of running jobs, if job control is active.
 </p>
 </dd>
-<dt><code>service</code></dt>
+<dt><span><code>service</code></span></dt>
 <dd><p>Service names.  May also be specified as <samp>-s</samp>.
 </p>
 </dd>
-<dt><code>setopt</code></dt>
+<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><code>shopt</code></dt>
+<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 Builtins</a>).
+(see <a href="#Bash-Builtins">Bash Builtin Commands</a>).
 </p>
 </dd>
-<dt><code>signal</code></dt>
+<dt><span><code>signal</code></span></dt>
 <dd><p>Signal names.
 </p>
 </dd>
-<dt><code>stopped</code></dt>
+<dt><span><code>stopped</code></span></dt>
 <dd><p>Names of stopped jobs, if job control is active.
 </p>
 </dd>
-<dt><code>user</code></dt>
+<dt><span><code>user</code></span></dt>
 <dd><p>User names.  May also be specified as <samp>-u</samp>.
 </p>
 </dd>
-<dt><code>variable</code></dt>
+<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><code>-C <var>command</var></code></dt>
+<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><code>-F <var>function</var></code></dt>
+<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
@@ -12405,22 +12464,22 @@ When it finishes, the possible completions are retrieved from the value
 of the <code>COMPREPLY</code> array variable.
 </p>
 </dd>
-<dt><code>-G <var>globpat</var></code></dt>
+<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><code>-P <var>prefix</var></code></dt>
+<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><code>-S <var>suffix</var></code></dt>
+<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><code>-W <var>wordlist</var></code></dt>
+<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.
@@ -12428,7 +12487,7 @@ The possible completions are the members of the resultant list which
 match the word being completed.
 </p>
 </dd>
-<dt><code>-X <var>filterpat</var></code></dt>
+<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
@@ -12445,9 +12504,8 @@ a <var>name</var> for which no specification exists, or
 an error occurs adding a completion specification.
 </p>
 </dd>
-<dt><code>compopt</code></dt>
-<dd><span id="index-compopt"></span>
-<div class="example">
+<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
@@ -12479,7 +12537,9 @@ specification exists, or an output error occurs.
 </dl>
 
 <hr>
-<span id="A-Programmable-Completion-Example"></span><div class="header">
+</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>
@@ -12581,7 +12641,7 @@ via <var>CDPATH</var>: Readline can&rsquo;t tell those completions are directori
 The <samp>-o nospace</samp> option tells Readline to not append a space
 character to the directory name, in case we want to append to it.
 The <samp>-o bashdefault</samp> option brings in the rest of the &quot;Bash default&quot;
-completions &ndash; possible completion that Bash adds to the default Readline
+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.
@@ -12602,9 +12662,12 @@ in the <samp>examples/complete</samp> subdirectory.
 <span id="index-History_002c-how-to-use"></span>
 
 <hr>
-<span id="Using-History-Interactively"></span><div class="header">
+</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">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+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>
 
@@ -12615,19 +12678,15 @@ It should be considered a user&rsquo;s guide.
 For information on using the <small>GNU</small> History Library in other programs,
 see the <small>GNU</small> Readline Library Manual.
 </p>
-<table class="menu" border="0" cellspacing="0">
-<tr><td align="left" valign="top">&bull; <a href="#Bash-History-Facilities" accesskey="1">Bash History Facilities</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How Bash lets you manipulate your command
-                               history.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Bash-History-Builtins" accesskey="2">Bash History Builtins</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">The Bash builtin commands that manipulate
-                               the command history.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#History-Interaction" accesskey="3">History Interaction</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">What it feels like using History as a user.
-</td></tr>
-</table>
 
+<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>
-<span id="Bash-History-Facilities"></span><div class="header">
+<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>
@@ -12657,7 +12716,7 @@ the value of the <code>HISTFILESIZE</code> variable.
 When a shell with history enabled exits, the last
 <code>$HISTSIZE</code> lines are copied from the history list to the file
 named by <code>$HISTFILE</code>.
-If the <code>histappend</code> shell option is set (see <a href="#Bash-Builtins">Bash Builtins</a>),
+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>
@@ -12680,7 +12739,7 @@ The <code>history</code> builtin may be used to display or modify the history
 list and manipulate the history file.
 When using command-line editing, search commands
 are available in each editing mode that provide access to the
-history list (see <a href="#Commands-For-History">Commands For History</a>).
+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>
@@ -12697,9 +12756,11 @@ 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>
-<span id="Bash-History-Builtins"></span><div class="header">
+</div>
+<div class="section" id="Bash-History-Builtins">
+<div class="header">
 <p>
-Next: <a href="#History-Interaction" accesskey="n" rel="next">History Interaction</a>, Previous: <a href="#Bash-History-Facilities" accesskey="p" rel="prev">Bash History Facilities</a>, Up: <a href="#Using-History-Interactively" accesskey="u" rel="up">Using History Interactively</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+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>
@@ -12708,9 +12769,8 @@ Next: <a href="#History-Interaction" accesskey="n" rel="next">History Interactio
 history list and history file.
 </p>
 <dl compact="compact">
-<dt><code>fc</code></dt>
-<dd><span id="index-fc"></span>
-<div class="example">
+<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>
@@ -12751,9 +12811,8 @@ that typing &lsquo;<samp>r cc</samp>&rsquo; runs the last command beginning with
 and typing &lsquo;<samp>r</samp>&rsquo; re-executes the last command (see <a href="#Aliases">Aliases</a>).
 </p>
 </dd>
-<dt><code>history</code></dt>
-<dd><span id="index-history"></span>
-<div class="example">
+<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>
@@ -12774,12 +12833,12 @@ and the history line.
 <p>Options, if supplied, have the following meanings:
 </p>
 <dl compact="compact">
-<dt><code>-c</code></dt>
+<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><code>-d <var>offset</var></code></dt>
+<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.
@@ -12789,55 +12848,63 @@ end of the history, and an index of &lsquo;<samp>-1</samp>&rsquo; refers to the
 <code>history -d</code> command.
 </p>
 </dd>
-<dt><code>-d <var>start</var>-<var>end</var></code></dt>
-<dd><p>Delete the history entries between positions <var>start</var> and <var>end</var>,
-inclusive.  Positive and negative values for <var>start</var> and <var>end</var>
+<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><code>-a</code></dt>
+<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><code>-n</code></dt>
+<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><code>-r</code></dt>
+<dt><span><code>-r</code></span></dt>
 <dd><p>Read the history file and append its contents to
 the history list.
 </p>
 </dd>
-<dt><code>-w</code></dt>
+<dt><span><code>-w</code></span></dt>
 <dd><p>Write out the current history list to the history file.
 </p>
 </dd>
-<dt><code>-p</code></dt>
+<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><code>-s</code></dt>
+<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>When any of the <samp>-w</samp>, <samp>-r</samp>, <samp>-a</samp>, or <samp>-n</samp> options is
-used, if <var>filename</var>
-is given, then it is used as the history file.  If not, then
-the value of the <code>HISTFILE</code> variable is used.
+<p>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>
-<span id="History-Interaction"></span><div class="header">
+</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>
@@ -12908,19 +12975,17 @@ as explained above (see <a href="#Bash-Variables">Bash Variables</a>).  The shel
 the history comment character to mark history timestamps when
 writing the history file.
 </p>
-<table class="menu" border="0" cellspacing="0">
-<tr><td align="left" valign="top">&bull; <a href="#Event-Designators" accesskey="1">Event Designators</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to specify which history line to use.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Word-Designators" accesskey="2">Word Designators</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Specifying which words are of interest.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Modifiers" accesskey="3">Modifiers</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Modifying the results of substitution.
-</td></tr>
-</table>
 
+<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>
-<span id="Event-Designators"></span><div class="header">
+<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 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>
+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>
@@ -12932,31 +12997,31 @@ position in the history list.
 <span id="index-history-events"></span>
 </p>
 <dl compact="compact">
-<dt><code>!</code></dt>
+<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><code>!<var>n</var></code></dt>
+<dt><span><code>!<var>n</var></code></span></dt>
 <dd><p>Refer to command line <var>n</var>.
 </p>
 </dd>
-<dt><code>!-<var>n</var></code></dt>
+<dt><span><code>!-<var>n</var></code></span></dt>
 <dd><p>Refer to the command <var>n</var> lines back.
 </p>
 </dd>
-<dt><code>!!</code></dt>
+<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><code>!<var>string</var></code></dt>
+<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><code>!?<var>string</var>[?]</code></dt>
+<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>.
@@ -12967,22 +13032,24 @@ 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><code>^<var>string1</var>^<var>string2</var>^</code></dt>
+<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><code>!#</code></dt>
+<dt><span><code>!#</code></span></dt>
 <dd><p>The entire command line typed so far.
 </p>
 </dd>
 </dl>
 
 <hr>
-<span id="Word-Designators"></span><div class="header">
+</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 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>
+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>
 
@@ -12996,17 +13063,17 @@ inserted into the current line separated by single spaces.
 <p>For example,
 </p>
 <dl compact="compact">
-<dt><code>!!</code></dt>
+<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><code>!!:$</code></dt>
+<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><code>!fi:2</code></dt>
+<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>
@@ -13015,42 +13082,42 @@ the letters <code>fi</code>.
 <p>Here are the word designators:
 </p> 
 <dl compact="compact">
-<dt><code>0 (zero)</code></dt>
+<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><code><var>n</var></code></dt>
+<dt><span><code><var>n</var></code></span></dt>
 <dd><p>The <var>n</var>th word.
 </p>
 </dd>
-<dt><code>^</code></dt>
+<dt><span><code>^</code></span></dt>
 <dd><p>The first argument; that is, word 1.
 </p>
 </dd>
-<dt><code>$</code></dt>
+<dt><span><code>$</code></span></dt>
 <dd><p>The last argument.
 </p>
 </dd>
-<dt><code>%</code></dt>
+<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><code><var>x</var>-<var>y</var></code></dt>
+<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><code>*</code></dt>
+<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><code><var>x</var>*</code></dt>
+<dt><span><code><var>x</var>*</code></span></dt>
 <dd><p>Abbreviates &lsquo;<samp><var>x</var>-$</samp>&rsquo;
 </p>
 </dd>
-<dt><code><var>x</var>-</code></dt>
+<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>
@@ -13061,9 +13128,11 @@ If &lsquo;<samp>x</samp>&rsquo; is missing, it defaults to 0.
 previous command is used as the event.
 </p>
 <hr>
-<span id="Modifiers"></span><div class="header">
+</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 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>
+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>
 
@@ -13072,39 +13141,39 @@ 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><code>h</code></dt>
+<dt><span><code>h</code></span></dt>
 <dd><p>Remove a trailing pathname component, leaving only the head.
 </p>
 </dd>
-<dt><code>t</code></dt>
+<dt><span><code>t</code></span></dt>
 <dd><p>Remove all leading pathname components, leaving the tail.
 </p>
 </dd>
-<dt><code>r</code></dt>
+<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><code>e</code></dt>
+<dt><span><code>e</code></span></dt>
 <dd><p>Remove all but the trailing suffix.
 </p>
 </dd>
-<dt><code>p</code></dt>
+<dt><span><code>p</code></span></dt>
 <dd><p>Print the new command but do not execute it.
 </p>
 </dd>
-<dt><code>q</code></dt>
+<dt><span><code>q</code></span></dt>
 <dd><p>Quote the substituted words, escaping further substitutions.
 </p>
 </dd>
-<dt><code>x</code></dt>
+<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><code>s/<var>old</var>/<var>new</var>/</code></dt>
+<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;.
@@ -13117,23 +13186,23 @@ 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 is null, each matching <var>old</var> is deleted.
+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><code>&amp;</code></dt>
+<dt><span><code>&amp;</code></span></dt>
 <dd><p>Repeat the previous substitution.
 </p>
 </dd>
-<dt><code>g</code></dt>
-<dt><code>a</code></dt>
+<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><code>G</code></dt>
+<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>
@@ -13141,9 +13210,13 @@ in the event.
 </dl>
 
 <hr>
-<span id="Installing-Bash"></span><div class="header">
+</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">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+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>
 
@@ -13154,32 +13227,20 @@ non-Unix systems such as BeOS and Interix.
 Other independent ports exist for
 <small>MS-DOS</small>, <small>OS/2</small>, and Windows platforms.
 </p>
-<table class="menu" border="0" cellspacing="0">
-<tr><td align="left" valign="top">&bull; <a href="#Basic-Installation" accesskey="1">Basic Installation</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Installation instructions.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Compilers-and-Options" accesskey="2">Compilers and Options</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to set special options for various
-                               systems.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Compiling-For-Multiple-Architectures" accesskey="3">Compiling For Multiple Architectures</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to compile Bash for more
-                                               than one kind of system from
-                                               the same source tree.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Installation-Names" accesskey="4">Installation Names</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to set the various paths used by the installation.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Specifying-the-System-Type" accesskey="5">Specifying the System Type</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to configure Bash for a particular system.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Sharing-Defaults" accesskey="6">Sharing Defaults</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to share default configuration values among GNU
-                       programs.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Operation-Controls" accesskey="7">Operation Controls</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Options recognized by the configuration program.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Optional-Features" accesskey="8">Optional Features</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to enable and disable optional features when
-                       building Bash.
-</td></tr>
-</table>
 
+<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>
-<span id="Basic-Installation"></span><div class="header">
+<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>
@@ -13210,7 +13271,14 @@ 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.
+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>
 
@@ -13218,7 +13286,7 @@ This will also install the manual pages and Info file.
 values for various system-dependent variables used during
 compilation.  It uses those values to create a <samp>Makefile</samp> in
 each directory of the package (the top directory, the
-<samp>builtins</samp>, <samp>doc</samp>, and <samp>support</samp> directories,
+<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
@@ -13262,10 +13330,10 @@ to do them, and mail diffs or instructions to
 considered for the next release.
 </p>
 <p>The file <samp>configure.ac</samp> is used to create <code>configure</code>
-by a program called Autoconf.  You only need
-<samp>configure.ac</samp> if you want to change it or regenerate
-<code>configure</code> using a newer version of Autoconf.  If
-you do this, make sure you are using Autoconf version 2.50 or
+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
@@ -13274,7 +13342,9 @@ 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>
-<span id="Compilers-and-Options"></span><div class="header">
+</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>
@@ -13300,7 +13370,9 @@ can do that on the command line like this:
 is available.
 </p>
 <hr>
-<span id="Compiling-For-Multiple-Architectures"></span><div class="header">
+</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>
@@ -13319,7 +13391,7 @@ supply the <samp>--srcdir=PATH</samp> argument to tell <code>configure</code> wh
 source files are.  <code>configure</code> automatically checks for the
 source code in the directory that <code>configure</code> is in and in &lsquo;..&rsquo;.
 </p>
-<p>If you have to use a <code>make</code> that does not supports the <code>VPATH</code>
+<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
@@ -13340,35 +13412,69 @@ Bash for at least one architecture before you can create build
 directories for other architectures.
 </p>
 <hr>
-<span id="Installation-Names"></span><div class="header">
+</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.  You can
-specify an installation prefix other than <samp>/usr/local</samp> by
+<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>DESTDIR</code> &lsquo;<samp>make</samp>&rsquo;
-variable when running &lsquo;<samp>make install</samp>&rsquo;.
+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. 
+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>
-<span id="Specifying-the-System-Type"></span><div class="header">
+</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 need to determine by the type of host Bash
+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
@@ -13380,7 +13486,9 @@ or a canonical name with three fields: &lsquo;<samp>CPU-COMPANY-SYSTEM</samp>&rs
 values of each field. 
 </p>
 <hr>
-<span id="Sharing-Defaults"></span><div class="header">
+</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>
@@ -13397,7 +13505,9 @@ script.  A warning: the Bash <code>configure</code> looks for a site script,
 but not all <code>configure</code> scripts do.
 </p>
 <hr>
-<span id="Operation-Controls"></span><div class="header">
+</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>
@@ -13407,29 +13517,29 @@ Next: <a href="#Optional-Features" accesskey="n" rel="next">Optional Features</a
 operates.
 </p>
 <dl compact="compact">
-<dt><code>--cache-file=<var>file</var></code></dt>
+<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><code>--help</code></dt>
+<dt><span><code>--help</code></span></dt>
 <dd><p>Print a summary of the options to <code>configure</code>, and exit.
 </p>
 </dd>
-<dt><code>--quiet</code></dt>
-<dt><code>--silent</code></dt>
-<dt><code>-q</code></dt>
+<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><code>--srcdir=<var>dir</var></code></dt>
+<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><code>--version</code></dt>
+<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>
@@ -13439,7 +13549,9 @@ script, and exit.
 options.  &lsquo;<samp>configure --help</samp>&rsquo; prints the complete list.
 </p>
 <hr>
-<span id="Optional-Features"></span><div class="header">
+</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>
@@ -13457,11 +13569,11 @@ that is enabled by default, use <samp>--disable-<var>feature</var></samp>.
 <samp>--with-</samp> options that the Bash <code>configure</code> recognizes. 
 </p>
 <dl compact="compact">
-<dt><code>--with-afs</code></dt>
+<dt><span><code>--with-afs</code></span></dt>
 <dd><p>Define if you are using the Andrew File System from Transarc.
 </p>
 </dd>
-<dt><code>--with-bash-malloc</code></dt>
+<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
@@ -13473,17 +13585,17 @@ which this should be turned off, and <code>configure</code> disables this
 option automatically for a number of systems.
 </p>
 </dd>
-<dt><code>--with-curses</code></dt>
+<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><code>--with-gnu-malloc</code></dt>
+<dt><span><code>--with-gnu-malloc</code></span></dt>
 <dd><p>A synonym for <code>--with-bash-malloc</code>.
 </p>
 </dd>
-<dt><code>--with-installed-readline[=<var>PREFIX</var>]</code></dt>
+<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
@@ -13500,255 +13612,276 @@ the installed version of Readline in subdirectories of that directory
 <var>PREFIX</var>/<code>lib</code>).
 </p>
 </dd>
-<dt><code>--with-purify</code></dt>
-<dd><p>Define this to use the Purify memory allocation checker from Rational
-Software.
+<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><code>--enable-minimal-config</code></dt>
+<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 and linked, rather than changing run-time features.
+compiled, linked, and installed, rather than changing run-time features.
 </p>
 <dl compact="compact">
-<dt><code>--enable-largefile</code></dt>
+<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><code>--enable-profiling</code></dt>
+<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><code>--enable-static-link</code></dt>
+<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>
+</p>
+</dd>
 </dl>
 
 <p>The &lsquo;<samp>minimal-config</samp>&rsquo; option can be used to disable all of
 the following options, but it is processed first, so individual
 options may be enabled using &lsquo;<samp>enable-<var>feature</var></samp>&rsquo;. 
 </p>
-<p>All of the following options except for &lsquo;<samp>disabled-builtins</samp>&rsquo;,
-&lsquo;<samp>direxpand-default</samp>&rsquo;, and
+<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><code>--enable-alias</code></dt>
+<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><code>--enable-arith-for-command</code></dt>
+<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><code>--enable-array-variables</code></dt>
+<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><code>--enable-bang-history</code></dt>
+<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 Interaction</a>).
+(see <a href="#History-Interaction">History Expansion</a>).
 </p>
 </dd>
-<dt><code>--enable-brace-expansion</code></dt>
+<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><code>--enable-casemod-attributes</code></dt>
+<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 <var>uppercase</var> attribute,
+and assignment statements.  Variables with the <code>uppercase</code> attribute,
 for example, will have their values converted to uppercase upon assignment.
 </p>
 </dd>
-<dt><code>--enable-casemod-expansion</code></dt>
+<dt><span><code>--enable-casemod-expansion</code></span></dt>
 <dd><p>Include support for case-modifying word expansions.
 </p>
 </dd>
-<dt><code>--enable-command-timing</code></dt>
+<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><code>--enable-cond-command</code></dt>
+<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><code>--enable-cond-regexp</code></dt>
+<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><code>--enable-coprocesses</code></dt>
+<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><code>--enable-debugger</code></dt>
+<dt><span><code>--enable-debugger</code></span></dt>
 <dd><p>Include support for the bash debugger (distributed separately).
 </p>
 </dd>
-<dt><code>--enable-dev-fd-stat-broken</code></dt>
+<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><code>--enable-direxpand-default</code></dt>
+<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><code>--enable-directory-stack</code></dt>
+<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><code>--enable-disabled-builtins</code></dt>
+<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 Builtins</a>, for details of the <code>builtin</code> and
+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><code>--enable-dparen-arithmetic</code></dt>
+<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><code>--enable-extended-glob</code></dt>
+<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><code>--enable-extended-glob-default</code></dt>
-<dd><p>Set the default value of the <var>extglob</var> shell option described
+<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><code>--enable-function-import</code></dt>
+<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><code>--enable-glob-asciirange-default</code></dt>
-<dd><p>Set the default value of the <var>globasciiranges</var> shell option described
+<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><code>--enable-help-builtin</code></dt>
+<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 Builtins</a>).
+variables (see <a href="#Bash-Builtins">Bash Builtin Commands</a>).
 </p>
 </dd>
-<dt><code>--enable-history</code></dt>
+<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><code>--enable-job-control</code></dt>
+<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><code>--enable-multibyte</code></dt>
+<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><code>--enable-net-redirections</code></dt>
+<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><code>--enable-process-substitution</code></dt>
+<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><code>--enable-progcomp</code></dt>
+<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><code>--enable-prompt-string-decoding</code></dt>
+<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><code>--enable-readline</code></dt>
+<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><code>--enable-restricted</code></dt>
+<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><code>--enable-select</code></dt>
+<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><code>--enable-separate-helpfiles</code></dt>
-<dd><p>Use external files for the documentation displayed by the <code>help</code> builtin
-instead of storing the text internally.
-</p>
-</dd>
-<dt><code>--enable-single-help-strings</code></dt>
+<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><code>--enable-strict-posix-default</code></dt>
+<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><code>--enable-usg-echo-default</code></dt>
+<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><code>--enable-xpg-echo-default</code></dt>
+<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 Builtins</a>, for a description of the escape sequences that
+See <a href="#Bash-Builtins">Bash Builtin Commands</a>, for a description of the escape sequences that
 <code>echo</code> recognizes.
 </p></dd>
 </dl>
@@ -13762,9 +13895,12 @@ Read the comments associated with each definition for more
 information about its effect.
 </p>
 <hr>
-<span id="Reporting-Bugs"></span><div class="header">
+</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">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+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>
 
@@ -13773,7 +13909,8 @@ 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>.
+<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.
@@ -13799,9 +13936,11 @@ the template it provides for filing a bug report.
 <a href="mailto:bug-bash@gnu.org">bug-bash@gnu.org</a>.
 </p>
 <hr>
-<span id="Major-Differences-From-The-Bourne-Shell"></span><div class="header">
+</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">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+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>
 
@@ -13836,7 +13975,7 @@ The Bash history list maintains timestamp information and uses the
 value of the <code>HISTTIMEFORMAT</code> variable to display it.
 
 </li><li> Bash implements <code>csh</code>-like history expansion
-(see <a href="#History-Interaction">History Interaction</a>).
+(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.
@@ -13851,7 +13990,7 @@ is supported (see <a href="#ANSI_002dC-Quoting">ANSI-C Quoting</a>).
 locale-specific translation of the characters between the double
 quotes.  The <samp>-D</samp>, <samp>--dump-strings</samp>, and <samp>--dump-po-strings</samp>
 invocation options list the translatable strings found in a script
-(see <a href="#Locale-Translation">Locale Translation</a>).
+(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>).
@@ -13907,15 +14046,15 @@ which expands to the substring of <code>var</code>&rsquo;s value of length
 (see <a href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>).
 
 </li><li> The expansion
-<code>${var/[/]</code><var>pattern</var><code>[/</code><var>replacement</var><code>]}</code>,
+<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 <code>var</code>, is available (see <a href="#Shell-Parameter-Expansion">Shell Parameter Expansion</a>).
+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 <var>indirect</var> variable expansion using <code>${!word}</code>
+</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
@@ -13944,8 +14083,8 @@ to negate the set of characters between the brackets.
 The Bourne shell uses only &lsquo;<samp>!</samp>&rsquo;.
 
 </li><li> Bash implements the full set of <small>POSIX</small> filename expansion operators,
-including <var>character classes</var>, <var>equivalence classes</var>, and
-<var>collating symbols</var> (see <a href="#Filename-Expansion">Filename Expansion</a>).
+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>).
@@ -13955,7 +14094,7 @@ shell option is enabled (see <a href="#Pattern-Matching">Pattern Matching</a>).
 
 </li><li> Bash functions are permitted to have local variables using the
 <code>local</code> builtin, and thus useful recursive functions may be written
-(see <a href="#Bash-Builtins">Bash Builtins</a>).
+(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>).
@@ -13993,13 +14132,13 @@ physical modes.
 
 </li><li> Bash allows a function to override a builtin with the same name, and provides
 access to that builtin&rsquo;s functionality within the function via the
-<code>builtin</code> and <code>command</code> builtins (see <a href="#Bash-Builtins">Bash Builtins</a>).
+<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 Builtins</a>).
+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 Builtins</a>).
+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
@@ -14022,12 +14161,12 @@ searching the <code>$PATH</code>, using &lsquo;<samp>hash -p</samp>&rsquo;
 (see <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>).
 
 </li><li> Bash includes a <code>help</code> builtin for quick reference to shell
-facilities (see <a href="#Bash-Builtins">Bash Builtins</a>).
+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 Builtins</a>).
+(see <a href="#Bash-Builtins">Bash Builtin Commands</a>).
 
-</li><li> The Bash <code>read</code> builtin (see <a href="#Bash-Builtins">Bash Builtins</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.
@@ -14063,7 +14202,7 @@ 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
+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
@@ -14088,7 +14227,7 @@ The <code>ERR</code> trap is not inherited by shell functions unless the
 <p>The <code>trap</code> builtin (see <a href="#Bourne-Shell-Builtins">Bourne Shell Builtins</a>) allows a
 <code>RETURN</code> pseudo-signal specification, similar to
 <code>EXIT</code> and <code>DEBUG</code>.
-Commands specified with an <code>RETURN</code> trap are executed before
+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
@@ -14096,7 +14235,7 @@ function has been given the <code>trace</code> attribute or the
 <code>functrace</code> option has been enabled using the <code>shopt</code> builtin.
 </p>
 </li><li> The Bash <code>type</code> builtin is more extensive and gives more information
-about the names it finds (see <a href="#Bash-Builtins">Bash Builtins</a>).
+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
@@ -14137,7 +14276,11 @@ shell scripts.
 <p>More features unique to Bash may be found in <a href="#Bash-Features">Bash Features</a>.
 </p>
 
-<span id="Implementation-Differences-From-The-SVR4_002e2-Shell"></span><h3 class="appendixsec">B.1 Implementation Differences From The SVR4.2 Shell</h3>
+<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:
@@ -14185,9 +14328,12 @@ only for certain failures, as enumerated in the <small>POSIX</small> standard.
 </li></ul>
 
 <hr>
-<span id="GNU-Free-Documentation-License"></span><div class="header">
+</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">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+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>
 
@@ -14661,31 +14807,27 @@ to permit their use in free software.
 
 
 <hr>
-<span id="Indexes"></span><div class="header">
+</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">Top</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+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>
 
-<table class="menu" border="0" cellspacing="0">
-<tr><td align="left" valign="top">&bull; <a href="#Builtin-Index" rel="index" accesskey="1">Builtin Index</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Index of Bash builtin commands.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Reserved-Word-Index" rel="index" accesskey="2">Reserved Word Index</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Index of Bash reserved words.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Variable-Index" rel="index" accesskey="3">Variable Index</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Quick reference helps you find the
-                               variable you want.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Function-Index" rel="index" accesskey="4">Function Index</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Index of bindable Readline functions.
-</td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Concept-Index" rel="index" accesskey="5">Concept Index</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">General index for concepts described in
-                               this manual.
-</td></tr>
-</table>
 
+<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>
-<span id="Builtin-Index"></span><div class="header">
+<div class="appendixsec" id="Builtin-Index">
+<div class="header">
 <p>
-Next: <a href="#Reserved-Word-Index" accesskey="n" rel="next">Reserved Word Index</a>, Up: <a href="#Indexes" accesskey="u" rel="up">Indexes</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+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>
@@ -14883,9 +15025,11 @@ Next: <a href="#Reserved-Word-Index" accesskey="n" rel="next">Reserved Word Inde
 </td></tr></table>
 
 <hr>
-<span id="Reserved-Word-Index"></span><div class="header">
+</div>
+<div class="appendixsec" id="Reserved-Word-Index">
+<div class="header">
 <p>
-Next: <a href="#Variable-Index" accesskey="n" rel="next">Variable Index</a>, Previous: <a href="#Builtin-Index" accesskey="p" rel="prev">Builtin Index</a>, Up: <a href="#Indexes" accesskey="u" rel="up">Indexes</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+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>
@@ -15003,9 +15147,11 @@ Next: <a href="#Variable-Index" accesskey="n" rel="next">Variable Index</a>, Pre
 </td></tr></table>
 
 <hr>
-<span id="Variable-Index"></span><div class="header">
+</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">Reserved Word Index</a>, Up: <a href="#Indexes" accesskey="u" rel="up">Indexes</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Indexes" title="Index" rel="index">Index</a>]</p>
+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>
@@ -15106,6 +15252,8 @@ Next: <a href="#Function-Index" accesskey="n" rel="next">Function Index</a>, Pre
 <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>
@@ -15165,6 +15313,7 @@ Next: <a href="#Function-Index" accesskey="n" rel="next">Function Index</a>, Pre
 <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>
@@ -15213,11 +15362,12 @@ Next: <a href="#Function-Index" accesskey="n" rel="next">Function Index</a>, Pre
 <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="#Bash-Variables">Bash Variables</a></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="#Locale-Translation">Locale Translation</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>
@@ -15261,6 +15411,7 @@ Next: <a href="#Function-Index" accesskey="n" rel="next">Function Index</a>, Pre
 <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>
@@ -15279,8 +15430,8 @@ Next: <a href="#Function-Index" accesskey="n" rel="next">Function Index</a>, Pre
 <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="#Locale-Translation">Locale Translation</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-TEXTDOMAINDIR"><code>TEXTDOMAINDIR</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Locale-Translation">Locale Translation</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-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>
@@ -15354,9 +15505,11 @@ Next: <a href="#Function-Index" accesskey="n" rel="next">Function Index</a>, Pre
 </td></tr></table>
 
 <hr>
-<span id="Function-Index"></span><div class="header">
+</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">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>
+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>
@@ -15459,6 +15612,7 @@ Next: <a href="#Concept-Index" accesskey="n" rel="next">Concept Index</a>, Previ
 <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>
@@ -15534,6 +15688,7 @@ Next: <a href="#Concept-Index" accesskey="n" rel="next">Concept Index</a>, Previ
 <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>
@@ -15599,7 +15754,9 @@ Next: <a href="#Concept-Index" accesskey="n" rel="next">Concept Index</a>, Previ
 </td></tr></table>
 
 <hr>
-<span id="Concept-Index"></span><div class="header">
+</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>
@@ -15734,6 +15891,7 @@ Previous: <a href="#Function-Index" accesskey="p" rel="prev">Function Index</a>,
 <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>
@@ -15799,6 +15957,7 @@ Previous: <a href="#Function-Index" accesskey="p" rel="prev">Function Index</a>,
 <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>
@@ -15864,7 +16023,9 @@ Previous: <a href="#Function-Index" accesskey="p" rel="prev">Function Index</a>,
  &nbsp; 
 </td></tr></table>
 
-<hr>
+</div>
+</div>
+</div>
 
 
 
index 20ebf243c689025c02659cfa36dd8f29171ed0e2..25372f9b51e265a714e1faf0b92656e9743145e2 100644 (file)
@@ -1,13 +1,13 @@
-This is bashref.info, produced by makeinfo version 6.7 from
+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.1, 29 October 2020).
+Bash shell (version 5.2, 19 September 2022).
 
-   This is Edition 5.1, last updated 29 October 2020, of 'The GNU Bash
-Reference Manual', for 'Bash', Version 5.1.
+   This is Edition 5.2, last updated 19 September 2022, of 'The GNU Bash
+Reference Manual', for 'Bash', Version 5.2.
 
-   Copyright (C) 1988-2020 Free Software Foundation, Inc.
+   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,
@@ -27,11 +27,11 @@ Bash Features
 *************
 
 This text is a brief description of the features that are present in the
-Bash shell (version 5.1, 29 October 2020).  The Bash home page is
+Bash shell (version 5.2, 19 September 2022).  The Bash home page is
 <http://www.gnu.org/software/bash/>.
 
-   This is Edition 5.1, last updated 29 October 2020, of 'The GNU Bash
-Reference Manual', for 'Bash', Version 5.1.
+   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
@@ -359,11 +359,11 @@ 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 '!',
+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
+   There are three quoting mechanisms: the "escape character", single
 quotes, and double quotes.
 
 \1f
@@ -419,10 +419,11 @@ File: bashref.info,  Node: ANSI-C Quoting,  Next: Locale Translation,  Prev: Dou
 3.1.2.4 ANSI-C Quoting
 ......................
 
-Words of the form '$'STRING'' are treated specially.  The word expands
-to STRING, with backslash-escaped characters replaced as specified by
-the ANSI C standard.  Backslash escape sequences, if present, are
-decoded as follows:
+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)
@@ -473,22 +474,114 @@ File: bashref.info,  Node: Locale Translation,  Prev: ANSI-C Quoting,  Up: Quoti
 3.1.2.5 Locale-Specific Translation
 ...................................
 
-A double-quoted string preceded by a dollar sign ('$') will cause the
-string to be translated according to the current locale.  The GETTEXT
-infrastructure performs the message catalog lookup and translation,
-using the 'LC_MESSAGES' and 'TEXTDOMAIN' shell variables, as explained
-below.  See the gettext documentation for additional details.  If the
-current locale is 'C' or 'POSIX', or if there are no translations
-available, the dollar sign is ignored.  If the string is translated and
-replaced, the replacement is double-quoted.
+* Menu:
 
-   Some systems use the message catalog selected by the 'LC_MESSAGES'
-shell variable.  Others create the name of the message catalog from the
-value of the 'TEXTDOMAIN' shell variable, possibly adding a suffix of
-'.mo'.  If you use the 'TEXTDOMAIN' variable, you may need to set the
-'TEXTDOMAINDIR' variable to the location of the message catalog files.
-Still others use both variables in this fashion:
-'TEXTDOMAINDIR'/'LC_MESSAGES'/LC_MESSAGES/'TEXTDOMAIN'.mo.
+* 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.
+
+\1f
+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.
 
 \1f
 File: bashref.info,  Node: Comments,  Prev: Quoting,  Up: Shell Syntax
@@ -582,13 +675,13 @@ the control operators '|' or '|&'.
 The output of each command in the pipeline is connected via a pipe to
 the input of the next command.  That is, each command reads the previous
 command's output.  This connection is performed before any redirections
-specified by the command.
+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 the command.
+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
@@ -612,11 +705,12 @@ information.
    If the pipeline is not executed asynchronously (*note Lists::), the
 shell waits for all commands in the pipeline to complete.
 
-   Each command in a pipeline is executed in its own subshell, which is
-a separate process (*note Command Execution Environment::).  If the
-'lastpipe' option is enabled using the 'shopt' builtin (*note The Shopt
-Builtin::), the last element of a pipeline may be run by the shell
-process.
+   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
@@ -645,8 +739,8 @@ 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
+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
@@ -814,7 +908,8 @@ File: bashref.info,  Node: Conditional Constructs,  Next: Command Grouping,  Pre
      substitution, arithmetic expansion, and quote removal (*note Shell
      Parameter Expansion::) before matching is attempted.  Each PATTERN
      undergoes tilde expansion, parameter expansion, command
-     substitution, and arithmetic expansion.
+     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
@@ -855,16 +950,16 @@ File: bashref.info,  Node: Conditional Constructs,  Next: Command Grouping,  Pre
           select NAME [in WORDS ...]; do COMMANDS; done
 
      The list of words following 'in' is expanded, generating a list of
-     items.  The set of expanded words is printed on the standard error
-     output stream, each preceded by a number.  If the 'in WORDS' is
-     omitted, the positional parameters are printed, as if 'in "$@"' had
-     been specified.  The 'PS3' prompt is then displayed and a line is
-     read from the standard input.  If the line consists of a number
-     corresponding to one of the displayed words, then the value of NAME
-     is set to that word.  If the line is empty, the words and prompt
-     are displayed again.  If 'EOF' is read, the 'select' command
-     completes.  Any other value read causes NAME to be set to null.
-     The line read is saved in the variable 'REPLY'.
+     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.
@@ -883,11 +978,11 @@ File: bashref.info,  Node: Conditional Constructs,  Next: Command Grouping,  Pre
           (( EXPRESSION ))
 
      The arithmetic EXPRESSION is evaluated according to the rules
-     described below (*note Shell Arithmetic::).  If the value of the
-     expression is non-zero, the return status is 0; otherwise the
-     return status is 1.  This is exactly equivalent to
-          let "EXPRESSION"
-     *Note Bash Builtins::, for a full description of the 'let' builtin.
+     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 ]]
@@ -895,12 +990,13 @@ File: bashref.info,  Node: Conditional Constructs,  Next: Command Grouping,  Pre
      Return a status of 0 or 1 depending on the evaluation of the
      conditional expression EXPRESSION.  Expressions are composed of the
      primaries described below in *note Bash Conditional Expressions::.
-     Word splitting and filename expansion are not performed on the
-     words between the '[[' and ']]'; tilde expansion, parameter and
-     variable expansion, arithmetic expansion, command substitution,
-     process substitution, and quote removal are performed.  Conditional
-     operators such as '-f' must be unquoted to be recognized as
-     primaries.
+     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.
@@ -913,67 +1009,92 @@ File: bashref.info,  Node: Conditional Constructs,  Next: Command Grouping,  Pre
      'shopt' in *note The Shopt Builtin::) is enabled, the match is
      performed without regard to the case of alphabetic characters.  The
      return value is 0 if the string matches ('==') or does not match
-     ('!=') the pattern, and 1 otherwise.  Any part of the pattern may
-     be quoted to force the quoted portion to be matched as a string.
+     ('!=') 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 it is used, the string to the
+     precedence as '==' and '!='.  When you use '=~', the string to the
      right of the operator is considered a POSIX extended regular
-     expression 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 otherwise.  If
-     the regular expression is syntactically incorrect, the conditional
-     expression's return value is 2.  If the 'nocasematch' shell option
-     (see the description of 'shopt' in *note The Shopt Builtin::) is
-     enabled, the match is performed without regard to the case of
-     alphabetic characters.  Any part of the pattern may be quoted to
-     force the quoted portion to be matched as a string.  Bracket
-     expressions in regular expressions must be treated carefully, since
-     normal quoting characters lose their meanings between brackets.  If
-     the pattern is stored in a shell variable, quoting the variable
-     expansion forces the entire pattern to be matched as a string.
-
-     The pattern will match if it matches any part of the string.
-     Anchor the pattern using the '^' and '$' regular expression
-     operators to force it to match the entire string.  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.
+     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, zero or one instances of 'a', then a
-     'b':
+     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 like 'aab' and ' aaaaaab' will match, as will a
-     line containing a 'b' anywhere in its value.
-
-     Storing the regular expression in a shell variable is often a
-     useful way to avoid problems with quoting characters that are
-     special to the shell.  It is sometimes difficult to specify a
-     regular expression literally without using quotes, or to keep track
-     of the quoting used by regular expressions while paying attention
-     to the shell's quote removal.  Using a shell variable to store the
-     pattern decreases these problems.  For example, the following is
-     equivalent to the above:
+     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 ]]
 
-     If you want to match a character that's special to the regular
-     expression grammar, it has to be quoted to remove its special
-     meaning.  This means that in the pattern 'xxx.txt', the '.' matches
-     any character in the string (its usual regular expression meaning),
-     but in the pattern '"xxx.txt"' it can only match a literal '.'.
      Shell programmers should take special care with backslashes, since
-     backslashes are used both by the shell and regular expressions to
-     remove the special meaning from the following character.  The
-     following two sets of commands are _not_ equivalent:
+     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 ]]
@@ -984,12 +1105,49 @@ File: bashref.info,  Node: Conditional Constructs,  Next: Command Grouping,  Pre
 
      The first two matches will succeed, but the second two will not,
      because in the second two the backslash will be part of the pattern
-     to be matched.  In the first two examples, the backslash removes
-     the special meaning from '.', so the literal '.' matches.  If the
+     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:
 
@@ -1024,9 +1182,9 @@ list may be redirected to a single stream.
 '()'
           ( LIST )
 
-     Placing a list of commands between parentheses causes a subshell
-     environment to be created (*note Command Execution Environment::),
-     and each of the commands in LIST to be executed in that subshell.
+     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.
 
@@ -1039,10 +1197,10 @@ list may be redirected to a single stream.
 
    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.
+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.
@@ -1058,29 +1216,51 @@ A coprocess is executed asynchronously in a subshell, as if the command
 had been terminated with the '&' control operator, with a two-way pipe
 established between the executing shell and the coprocess.
 
-   The format for a coprocess is:
+   The syntax for a coprocess is:
+
      coproc [NAME] COMMAND [REDIRECTIONS]
 
-This creates a coprocess named NAME.  If NAME is not supplied, the
-default name is COPROC.  NAME must not be supplied if COMMAND is a
-simple command (*note Simple Commands::); otherwise, it is interpreted
-as the first word of the simple command.
+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
+(*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'[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
+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
+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
@@ -1105,88 +1285,9 @@ line, different ways to specify the input source, and so on).  Parallel
 can replace 'xargs' or feed commands from its input sources to several
 different instances of Bash.
 
-   For a complete description, refer to the GNU Parallel documentation.
-A few examples should provide a brief introduction to its use.
-
-   For example, it is easy to replace 'xargs' to gzip all html files in
-the current directory and its subdirectories:
-     find . -type f -name '*.html' -print | parallel gzip
-If you need to protect special characters such as newlines in file
-names, use find's '-print0' option and parallel's '-0' option.
-
-   You can use Parallel to move files from the current directory when
-the number of files is too large to process with one 'mv' invocation:
-     printf '%s\n' * | parallel mv {} destdir
-
-   As you can see, the {} is replaced with each line read from standard
-input.  While using 'ls' will work in most instances, it is not
-sufficient to deal with all filenames.  'printf' is a shell builtin, and
-therefore is not subject to the kernel's limit on the number of
-arguments to a program, so you can use '*' (but see below about the
-'dotglob' shell option).  If you need to accommodate special characters
-in filenames, you can use
-
-     printf '%s\0' * | parallel -0 mv {} destdir
-
-as alluded to above.
-
-   This will run as many 'mv' commands as there are files in the current
-directory.  You can emulate a parallel 'xargs' by adding the '-X'
-option:
-     printf '%s\0' * | parallel -0 -X mv {} destdir
-
-   (You may have to modify the pattern if you have the 'dotglob' option
-enabled.)
-
-   GNU Parallel can replace certain common idioms that operate on lines
-read from a file (in this case, filenames listed one per line):
-       while IFS= read -r x; do
-               do-something1 "$x" "config-$x"
-               do-something2 < "$x"
-       done < file | process-output
-
-with a more compact syntax reminiscent of lambdas:
-     cat list | parallel "do-something1 {} config-{} ; do-something2 < {}" |
-                process-output
-
-   Parallel provides a built-in mechanism to remove filename extensions,
-which lends itself to batch file transformations or renaming:
-     ls *.gz | parallel -j+0 "zcat {} | bzip2 >{.}.bz2 && rm {}"
-This will recompress all files in the current directory with names
-ending in .gz using bzip2, running one job per CPU (-j+0) in parallel.
-(We use 'ls' for brevity here; using 'find' as above is more robust in
-the face of filenames containing unexpected characters.)  Parallel can
-take arguments from the command line; the above can also be written as
-
-     parallel "zcat {} | bzip2 >{.}.bz2 && rm {}" ::: *.gz
-
-   If a command generates output, you may want to preserve the input
-order in the output.  For instance, the following command
-     {
-         echo foss.org.my ;
-         echo debian.org ;
-         echo freenetproject.org ;
-     } | parallel traceroute
-will display as output the traceroute invocation that finishes first.
-Adding the '-k' option
-     {
-         echo foss.org.my ;
-         echo debian.org ;
-         echo freenetproject.org ;
-     } | parallel -k traceroute
-will ensure that the output of 'traceroute foss.org.my' is displayed
-first.
-
-   Finally, Parallel can be used to run a sequence of shell commands in
-parallel, similar to 'cat file | bash'.  It is not uncommon to take a
-list of filenames, create a series of shell commands to operate on them,
-and feed that list of commands to a shell.  Parallel can speed this up.
-Assuming that 'file' contains a list of shell commands, one per line,
-
-     parallel -j 10 < file
-
-will evaluate the commands using the shell (since no explicit command is
-supplied as an argument), in blocks of ten shell jobs at a time.
+   For a complete description, refer to the GNU Parallel documentation,
+which is available at
+<https://www.gnu.org/software/parallel/parallel_tutorial.html>.
 
 \1f
 File: bashref.info,  Node: Shell Functions,  Next: Shell Parameters,  Prev: Shell Commands,  Up: Basic Shell Features
@@ -1210,15 +1311,15 @@ new process is created to interpret them.
 
    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, with one exception: If the 'function' reserved word is
-used, but the parentheses are not supplied, the braces are required.
+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 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
+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
@@ -1271,9 +1372,17 @@ status; otherwise the function's return status is the exit status of the
 last command executed before the 'return'.
 
    Variables local to the function may be declared with the 'local'
-builtin.  These variables are visible only to the function and the
-commands it invokes.  This is particularly important when a shell
-function calls other functions.
+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
@@ -1281,7 +1390,7 @@ 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
+   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
@@ -1290,10 +1399,10 @@ 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.
+   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
@@ -1318,17 +1427,19 @@ script displays
 variable is local to the current scope, 'unset' will unset it; otherwise
 the unset will refer to the variable found in any calling scope as
 described above.  If a variable at the current local scope is unset, it
-will remain so until it is reset in that scope or until the function
-returns.  Once the function returns, any instance of the variable at a
-previous scope will become visible.  If the unset acts on a variable at
-a previous scope, any instance of a variable with that name that had
-been shadowed will become visible.
+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 subshells
+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::).
 
@@ -1348,11 +1459,12 @@ File: bashref.info,  Node: Shell Parameters,  Next: Shell Expansions,  Prev: She
 * 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 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
@@ -1362,24 +1474,23 @@ the 'unset' builtin command.
      NAME=[VALUE]
 If VALUE is not given, the variable is assigned the null string.  All
 VALUEs undergo tilde expansion, parameter and variable expansion,
-command substitution, arithmetic expansion, and quote removal (detailed
-below).  If the variable has its 'integer' attribute set, then VALUE is
-evaluated as an arithmetic expression even if the '$((...))' expansion
-is not used (*note Arithmetic Expansion::).  Word splitting is not
-performed, with the exception of '"$@"' as explained below.  Filename
-expansion is not performed.  Assignment statements may also appear as
-arguments to the 'alias', 'declare', 'typeset', 'export', 'readonly',
-and 'local' builtin commands (DECLARATION commands).  When in POSIX mode
-(*note Bash POSIX Mode::), these builtins may appear in a command after
-one or more instances of the 'command' builtin and retain these
-assignment statement properties.
+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
+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
@@ -1389,9 +1500,9 @@ 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'
+   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.
+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
@@ -1401,9 +1512,9 @@ 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
+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,
+to 'ref', and changes to its attributes, are treated as references,
 assignments, and attribute modifications to the variable whose name was
 passed as '$1'.
 
@@ -1423,7 +1534,7 @@ File: bashref.info,  Node: Positional Parameters,  Next: Special Parameters,  Up
 3.4.1 Positional Parameters
 ---------------------------
 
-A POSITIONAL PARAMETER is a parameter denoted by one or more digits,
+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
@@ -1488,9 +1599,8 @@ only be referenced; assignment to them is not allowed.
      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 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
@@ -1544,13 +1654,13 @@ 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
+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).
+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
@@ -1568,7 +1678,7 @@ File: bashref.info,  Node: Brace Expansion,  Next: Tilde Expansion,  Up: Shell E
 ---------------------
 
 Brace expansion is a mechanism by which arbitrary strings may be
-generated.  This mechanism is similar to FILENAME EXPANSION (*note
+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
@@ -1583,17 +1693,17 @@ are not sorted; left to right order is preserved.  For example,
      ade ace abe
 
    A sequence expression takes the form '{X..Y[..INCR]}', where X and Y
-are either integers or single characters, and INCR, an optional
-increment, is an integer.  When integers are supplied, the expression
-expands to each number between X and Y, inclusive.  Supplied integers
-may be prefixed with '0' to force each term to have the same width.
-When either X or Y begins with a zero, the shell attempts to force all
-generated terms to contain the same number of digits, zero-padding where
-necessary.  When characters are supplied, the expression expands to each
-character lexicographically between X and Y, inclusive, using the
-default C locale.  Note that both X and Y must be of the same type.
-When the increment is supplied, it is used as the difference between
-each term.  The default increment is 1 or -1 as appropriate.
+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
@@ -1623,9 +1733,9 @@ File: bashref.info,  Node: Tilde Expansion,  Next: Shell Parameter Expansion,  P
 
 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
+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.
+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.
@@ -1681,7 +1791,7 @@ assigns the expanded value.
    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.
+declaration commands listed above, when in POSIX mode.
 
 \1f
 File: bashref.info,  Node: Shell Parameter Expansion,  Next: Command Substitution,  Prev: Tilde Expansion,  Up: Shell Expansions
@@ -1708,7 +1818,7 @@ 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
+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.
@@ -1734,31 +1844,48 @@ omitted, the operator tests only for existence.
      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 '@', 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
+     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::).
 
@@ -1826,11 +1953,11 @@ omitted, the operator tests only for existence.
      $ echo ${array[0]: -7:-2}
      bcdef
 
-     If PARAMETER is '@', the result is LENGTH positional parameters
-     beginning at OFFSET.  A negative OFFSET is taken relative to one
-     greater than the greatest positional parameter, so an offset of -1
-     evaluates to the last positional parameter.  It is an expansion
-     error if LENGTH evaluates to a number less than zero.
+     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:
@@ -1940,26 +2067,92 @@ omitted, the operator tests only for existence.
      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.  The match is performed
-     according to the rules described below (*note Pattern Matching::).
-     If PATTERN begins with '/', all matches of PATTERN are replaced
-     with STRING.  Normally only the first match is replaced.  If
-     PATTERN begins with '#', it must match at the beginning of the
-     expanded value of PARAMETER.  If PATTERN begins with '%', it must
-     match at the end of the expanded value of PARAMETER.  If STRING is
-     null, matches of PATTERN are deleted and the '/' following PATTERN
-     may be omitted.  If the 'nocasematch' shell option (see the
-     description of 'shopt' in *note The Shopt Builtin::) is enabled,
-     the match is performed without regard to the case of alphabetic
-     characters.  If PARAMETER is '@' or '*', the substitution operation
-     is applied to each positional parameter in turn, and the expansion
-     is the resultant list.  If PARAMETER is an array variable
-     subscripted with '@' or '*', the substitution operation is applied
-     to each member of the array in turn, and the expansion is the
-     resultant list.
+     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}'
@@ -1970,18 +2163,22 @@ omitted, the operator tests only for existence.
      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.
+     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
@@ -2021,6 +2218,10 @@ omitted, the operator tests only for existence.
      '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
@@ -2075,12 +2276,12 @@ is:
 
      $(( EXPRESSION ))
 
-   The expression is treated as if it were within double quotes, but a
-double quote inside the parentheses is not treated specially.  All
-tokens in the expression undergo parameter and variable expansion,
-command substitution, and quote removal.  The result is treated as the
-arithmetic expression to be evaluated.  Arithmetic expansions may be
-nested.
+   The 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
@@ -2175,9 +2376,12 @@ characters.
 
    When a pattern is used for filename expansion, the character '.' at
 the start of a filename or immediately following a slash must be matched
-explicitly, unless the shell option 'dotglob' is set.  The filenames '.'
-and '..' must always be matched explicitly, even if 'dotglob' is set.
-In other cases, the '.' character is not treated specially.
+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
@@ -2185,8 +2389,8 @@ can be matched by a special pattern character as described below (*note
 Pattern Matching::).
 
    See the description of 'shopt' in *note The Shopt Builtin::, for a
-description of the 'nocaseglob', 'nullglob', 'failglob', and 'dotglob'
-options.
+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
@@ -2232,20 +2436,21 @@ characters must be quoted if they are to be matched literally.
      character not enclosed is matched.  A '-' may be matched by
      including it as the first or last character in the set.  A ']' may
      be matched by including it as the first character in the set.  The
-     sorting order of characters in range expressions is determined by
-     the current locale and the values of the 'LC_COLLATE' and 'LC_ALL'
-     shell variables, if set.
+     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 '[aBbCcDdxXyYz]', for
+     '[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
+     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
@@ -2254,8 +2459,8 @@ characters must be quoted if they are to be matched literally.
      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
+     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.
 
@@ -2263,10 +2468,12 @@ characters must be quoted if they are to be matched literally.
      symbol SYMBOL.
 
    If the 'extglob' shell option is enabled using the 'shopt' builtin,
-several extended pattern matching operators are recognized.  In the
-following description, a PATTERN-LIST is a list of one or more patterns
-separated by a '|'.  Composite patterns may be formed using one or more
-of the following sub-patterns:
+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.
@@ -2283,6 +2490,20 @@ of the following sub-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
@@ -2305,8 +2526,8 @@ File: bashref.info,  Node: Redirections,  Next: Executing Commands,  Prev: Shell
 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
+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
@@ -2322,7 +2543,8 @@ 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 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
@@ -2584,11 +2806,13 @@ following order.
      expansion, and quote removal before being assigned to the variable.
 
    If no command name results, the variable assignments affect the
-current shell environment.  Otherwise, the variables are added to the
-environment of the executed command and do not affect the current shell
-environment.  If any of the assignments attempts to assign a value to a
-readonly variable, an error occurs, and the command exits with a
-non-zero status.
+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
@@ -2642,8 +2866,8 @@ taken.
 
   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::.
+     "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.
@@ -2654,7 +2878,8 @@ File: bashref.info,  Node: Command Execution Environment,  Next: Environment,  P
 3.7.3 Command Execution Environment
 -----------------------------------
 
-The shell has an EXECUTION ENVIRONMENT, which consists of the following:
+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
@@ -2705,6 +2930,8 @@ inherited from the shell.
    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
@@ -2729,12 +2956,12 @@ File: bashref.info,  Node: Environment,  Next: Exit Status,  Prev: Command Execu
 -----------------
 
 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
+"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
+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
@@ -2765,11 +2992,11 @@ File: bashref.info,  Node: Exit Status,  Next: Signals,  Prev: Environment,  Up:
 -----------------
 
 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.
+'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
@@ -2795,6 +3022,9 @@ 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::).
+
 \1f
 File: bashref.info,  Node: Signals,  Prev: Exit Status,  Up: Executing Commands
 
@@ -2835,6 +3065,33 @@ 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.
+
 \1f
 File: bashref.info,  Node: Shell Scripts,  Prev: Executing Commands,  Up: Basic Shell Features
 
@@ -2857,8 +3114,8 @@ parameters are unset.
 
    A shell script may be made executable by using the 'chmod' command to
 turn on the execute bit.  When Bash finds such a file while searching
-the '$PATH' for a command, it spawns a subshell to execute it.  In other
-words, executing
+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
@@ -2962,19 +3219,20 @@ standard.
 
      Read and execute commands from the FILENAME argument in the current
      shell context.  If FILENAME does not contain a slash, the 'PATH'
-     variable is used to find FILENAME.  When Bash is not in POSIX mode,
-     the current directory is searched if FILENAME is not found in
-     '$PATH'.  If any ARGUMENTS are supplied, they become the positional
-     parameters when FILENAME is executed.  Otherwise the positional
-     parameters are unchanged.  If the '-T' option is enabled, 'source'
-     inherits any trap on 'DEBUG'; if it is not, any 'DEBUG' trap string
-     is saved and restored around the call to 'source', and 'source'
-     unsets the 'DEBUG' trap while it executes.  If '-T' is not set, and
-     the sourced file changes the 'DEBUG' trap, the new value is
-     retained when 'source' completes.  The return status is the exit
-     status of the last command executed, or zero if no commands are
-     executed.  If FILENAME is not found, or cannot be read, the return
-     status is non-zero.  This builtin is equivalent to 'source'.
+     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]
@@ -2988,10 +3246,9 @@ standard.
           cd [-L|[-P [-e]] [-@] [DIRECTORY]
 
      Change the current working directory to DIRECTORY.  If DIRECTORY is
-     not supplied, the value of the 'HOME' shell variable is used.  Any
-     additional arguments following DIRECTORY are ignored.  If the shell
-     variable 'CDPATH' exists, it is used as a search path: each
-     directory name in 'CDPATH' is searched for DIRECTORY, with
+     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.
 
@@ -3022,6 +3279,11 @@ standard.
      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.
 
@@ -3073,7 +3335,7 @@ standard.
      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
+     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
@@ -3277,10 +3539,16 @@ standard.
             4. Otherwise, the expression is false.
 
      4 arguments
-          If the first argument is '!', the result is the negation of
-          the three-argument expression composed of the remaining
-          arguments.  Otherwise, the expression is parsed and evaluated
-          according to precedence using the rules listed above.
+          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
@@ -3369,7 +3637,7 @@ standard.
      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
+     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
@@ -3377,7 +3645,8 @@ standard.
      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.
+     The return status is zero unless a NAME is readonly or may not be
+     unset.
 
 \1f
 File: bashref.info,  Node: Bash Builtins,  Next: Modifying Shell Behavior,  Prev: Bourne Shell Builtins,  Up: Shell Builtin Commands
@@ -3406,6 +3675,7 @@ standard.
           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
@@ -3470,10 +3740,13 @@ standard.
           '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.  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.
+          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
@@ -3556,7 +3829,7 @@ standard.
      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
+     (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.
 
@@ -3583,7 +3856,7 @@ standard.
           attribute is disabled.
 
      '-n'
-          Give each NAME the NAMEREF attribute, making it a name
+          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
@@ -3626,7 +3899,7 @@ standard.
      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
+     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'.
@@ -3699,13 +3972,20 @@ standard.
 
      The '-f' option means to load the new builtin command NAME from
      shared object FILENAME, on systems that support dynamic loading.
-     The '-d' option will delete a builtin loaded with '-f'.
+     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.
 
@@ -3826,6 +4106,9 @@ standard.
      '%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
@@ -3934,8 +4217,9 @@ standard.
           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, non-zero otherwise.  The exit
-          status is greater than 128 if the timeout is exceeded.
+          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.
@@ -3991,7 +4275,7 @@ standard.
      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
+     The return status is zero if all of the NAMEs are found, non-zero
      if any are not found.
 
 'typeset'
@@ -4135,8 +4419,8 @@ 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 ...]
+          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
@@ -4317,14 +4601,19 @@ parameters, or to display the names and values of shell variables.
           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 '*' as an error when performing parameter
-          expansion.  An error message will be written to the standard
-          error, and a non-interactive shell will exit.
+          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.
@@ -4421,7 +4710,7 @@ This builtin allows you to change additional shell optional behavior.
      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
+     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:
@@ -4435,7 +4724,7 @@ This builtin allows you to change additional shell optional behavior.
      '-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 given with '-q', the return status is zero if all OPTNAMEs
           are enabled; non-zero otherwise.
 
      '-o'
@@ -4448,7 +4737,7 @@ This builtin allows you to change additional shell optional behavior.
      Unless otherwise noted, the 'shopt' options are disabled (off) by
      default.
 
-     The return status when listing options is zero if all OPTNAMES are
+     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.
@@ -4532,7 +4821,7 @@ This builtin allows you to change additional shell optional behavior.
      '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
+          the contents of the Readline editing buffer.  If not set, Bash
           attempts to preserve what the user typed.
 
      'dirspell'
@@ -4616,6 +4905,11 @@ This builtin allows you to change additional shell optional behavior.
           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
@@ -4675,7 +4969,7 @@ This builtin allows you to change additional shell optional behavior.
      '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
+          before any new value is assigned.  The 'nameref' attribute is
           not inherited.
 
      'localvar_unset'
@@ -4706,14 +5000,26 @@ This builtin allows you to change additional shell optional behavior.
      'nocasematch'
           If set, Bash matches patterns in a case-insensitive fashion
           when performing matching while executing 'case' or '[['
-          conditional commands, when performing pattern substitution
-          word expansions, or when filtering possible completions as
-          part of programmable completion.
+          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
@@ -4745,9 +5051,15 @@ This builtin allows you to change additional shell optional behavior.
           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.
+          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
@@ -4980,7 +5292,7 @@ Variables::).
 
 'BASH_LINENO'
      An array variable whose members are the line numbers in source
-     files where each corresponding member of FUNCNAME was invoked.
+     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
@@ -5017,10 +5329,10 @@ Variables::).
      to the array members are as follows:
 
      'BASH_VERSINFO[0]'
-          The major version number (the RELEASE).
+          The major version number (the "release").
 
      'BASH_VERSINFO[1]'
-          The minor version number (the VERSION).
+          The minor version number (the "version").
 
      'BASH_VERSINFO[2]'
           The patch level.
@@ -5029,7 +5341,7 @@ Variables::).
           The build version.
 
      'BASH_VERSINFO[4]'
-          The release status (e.g., BETA1).
+          The release status (e.g., 'beta1').
 
      'BASH_VERSINFO[5]'
           The value of 'MACHTYPE'.
@@ -5082,12 +5394,12 @@ Variables::).
 
 '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
+     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'
@@ -5133,7 +5445,7 @@ Variables::).
      Emacs shell buffer and disables line editing.
 
 'ENV'
-     Expanded and executed similarlty to 'BASH_ENV' (*note Bash Startup
+     Expanded and executed similarly to 'BASH_ENV' (*note Bash Startup
      Files::) when an interactive shell is invoked in POSIX Mode (*note
      Bash POSIX Mode::).
 
@@ -5141,16 +5453,16 @@ Variables::).
      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
+     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.
+     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
@@ -5217,7 +5529,7 @@ Variables::).
 '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
+     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
@@ -5295,7 +5607,7 @@ Variables::).
 
 '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
+     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
@@ -5449,7 +5761,7 @@ Variables::).
      with '#? '
 
 'PS4'
-     The value of this parameter is expanded like PS1 and the expanded
+     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
@@ -5465,15 +5777,19 @@ Variables::).
      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
+     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.
+     called the "region".
 
 'READLINE_POINT'
      The position of the insertion point in the Readline line buffer,
@@ -5487,7 +5803,7 @@ Variables::).
      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 is always determined by
+     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.
 
@@ -5843,14 +6159,15 @@ Invoked by remote shell daemon
 ..............................
 
 Bash attempts to determine when it is being run with its standard input
-connected to a network connection, as when executed by the remote shell
-daemon, usually 'rshd', or the secure shell daemon 'sshd'.  If Bash
-determines it is being run in this fashion, it reads and executes
-commands from '~/.bashrc', if that file exists and is readable.  It will
-not do this if invoked as 'sh'.  The '--norc' option may be used to
-inhibit this behavior, and the '--rcfile' option may be used to force
-another file to be read, but neither 'rshd' nor 'sshd' generally invoke
-the shell with those options or allow them to be specified.
+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
 ................................................
@@ -5874,7 +6191,7 @@ File: bashref.info,  Node: Interactive Shells,  Next: Bash Conditional Expressio
 
 * What is an Interactive Shell?::      What determines whether a shell is Interactive.
 * Is this Shell Interactive?:: How to tell if a shell is interactive.
-* Interactive Shell Behavior:: What changes in a interactive shell?
+* Interactive Shell Behavior:: What changes in an interactive shell?
 
 \1f
 File: bashref.info,  Node: What is an Interactive Shell?,  Next: Is this Shell Interactive?,  Up: Interactive Shells
@@ -5882,8 +6199,8 @@ File: bashref.info,  Node: What is an Interactive Shell?,  Next: Is this Shell I
 6.3.1 What is an Interactive Shell?
 -----------------------------------
 
-An interactive shell is one started without non-option argumentsunless
-'-s' is specified, without specifying the '-c' option, and whose input
+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.
 
@@ -5941,7 +6258,7 @@ several ways.
      string escape sequences.
 
   4. Bash executes the values of the set elements of the
-     'PROMPT_COMMANDS' array variable as commands before printing 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
@@ -5993,9 +6310,11 @@ several ways.
 
   19. Parser syntax errors will not cause the shell to exit.
 
-  20. Simple spelling correction for directory arguments to the 'cd'
-     builtin is enabled by default (see the description of the 'cdspell'
-     option to the 'shopt' builtin in *note The Shopt Builtin::).
+  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
@@ -6007,10 +6326,11 @@ File: bashref.info,  Node: Bash Conditional Expressions,  Next: Shell Arithmetic
 6.4 Bash Conditional Expressions
 ================================
 
-Conditional expressions are used by the '[[' compound command and the
-'test' and '[' builtin commands.  The 'test' and '[' commands determine
-their behavior based on the number of arguments; see the descriptions of
-those commands for any other command-specific actions.
+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
@@ -6228,8 +6548,8 @@ 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
+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
@@ -6254,7 +6574,7 @@ File: bashref.info,  Node: Aliases,  Next: Arrays,  Prev: Shell Arithmetic,  Up:
 6.6 Aliases
 ===========
 
-ALIASES allow a string to be substituted for a word when it is used as
+"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.
@@ -6269,15 +6589,15 @@ 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
+is a 'blank', then the next command word following the alias is also
 checked for alias expansion.
 
    Aliases are created and listed with the 'alias' command, and removed
 with the 'unalias' command.
 
    There is no mechanism for using arguments in the replacement text, as
-in 'csh'.  If arguments are needed, a shell function should be used
-(*note Shell Functions::).
+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
@@ -6363,6 +6683,10 @@ 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
@@ -6402,7 +6726,11 @@ NAME[SUBSCRIPT]' destroys the array element at index SUBSCRIPT.
 Negative subscripts to indexed arrays are interpreted as described
 above.  Unsetting the last element of an array variable does not unset
 the variable.  'unset NAME', where NAME is an array, removes the entire
-array.  A subscript of '*' or '@' also removes the entire array.
+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
@@ -6477,10 +6805,14 @@ File: bashref.info,  Node: Directory Stack Builtins,  Up: The Directory Stack
 '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 performs a 'cd' to the new top directory.  The
-     elements are numbered from 0 starting at the first directory listed
-     with 'dirs'; that is, 'popd' is equivalent to 'popd +0'.
+     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
@@ -6488,17 +6820,32 @@ File: bashref.info,  Node: Directory Stack Builtins,  Up: The Directory Stack
           manipulated.
      '+N'
           Removes the Nth directory (counting from the left of the list
-          printed by 'dirs'), starting with zero.
+          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.
+          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]
 
-     Save the current directory on the top of the directory stack and
-     then 'cd' to DIR.  With no arguments, 'pushd' exchanges the top two
-     directories and makes the new top the current directory.
+     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
@@ -6513,9 +6860,20 @@ File: bashref.info,  Node: Directory Stack Builtins,  Up: The Directory Stack
           printed by 'dirs', starting with zero) to the top of the list
           by rotating the stack.
      'DIR'
-          Makes DIR be the top of the stack, making it the new current
-          directory as if it had been supplied as an argument to the
-          'cd' builtin.
+          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.
 
 \1f
 File: bashref.info,  Node: Controlling the Prompt,  Next: The Restricted Shell,  Prev: The Directory Stack,  Up: Bash Features
@@ -6523,9 +6881,9 @@ File: bashref.info,  Node: Controlling the Prompt,  Next: The Restricted Shell,
 6.9 Controlling the Prompt
 ==========================
 
-Bash examines the value of the array variable 'PROMPT_COMMANDS' just
+Bash examines the value of the array variable 'PROMPT_COMMAND' just
 before printing each primary prompt.  If any elements in
-'PROMPT_COMMANDS' are set and non-null, Bash executes each value, 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
@@ -6571,8 +6929,8 @@ which can appear in the prompt variables 'PS0', 'PS1', 'PS2', and 'PS4':
 '\V'
      The release of Bash, version + patchlevel (e.g., 2.00.0)
 '\w'
-     The current working directory, with '$HOME' abbreviated with a
-     tilde (uses the '$PROMPT_DIRTRIM' variable).
+     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.
 '\!'
@@ -6638,7 +6996,8 @@ with the exception that the following are disallowed or not performed:
    * Using the 'enable' builtin command to enable disabled shell
      builtins.
    * Specifying the '-p' option to the 'command' builtin.
-   * Turning off restricted mode with 'set +r' or 'set +o restricted'.
+   * Turning off restricted mode with 'set +r' or 'shopt -u
+     restricted_shell'.
 
    These restrictions are enforced after any startup files are read.
 
@@ -6649,11 +7008,11 @@ 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), leaving the user
-in a non-writable directory other than his home directory 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').
+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'.
@@ -6696,203 +7055,219 @@ startup files.
   7. Reserved words appearing in a context where reserved words are
      recognized do not undergo alias expansion.
 
-  8. The POSIX 'PS1' and 'PS2' expansions of '!' to the history number
+  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.
 
-  9. The POSIX startup files are executed ('$ENV') rather than the
+  10. The POSIX startup files are executed ('$ENV') rather than the
      normal Bash files.
 
-  10. Tilde expansion is only performed on assignments preceding a
+  11. Tilde expansion is only performed on assignments preceding a
      command name, rather than on all assignment statements on the line.
 
-  11. The default history file is '~/.sh_history' (this is the default
+  12. The default history file is '~/.sh_history' (this is the default
      value of '$HISTFILE').
 
-  12. Redirection operators do not perform filename expansion on the
+  13. Redirection operators do not perform filename expansion on the
      word in the redirection unless the shell is interactive.
 
-  13. Redirection operators do not perform word splitting on the word in
+  14. Redirection operators do not perform word splitting on the word in
      the redirection.
 
-  14. Function names must be valid shell 'name's.  That is, they may not
+  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.
 
-  15. Function names may not be the same as one of the POSIX special
+  16. Function names may not be the same as one of the POSIX special
      builtins.
 
-  16. POSIX special builtins are found before shell functions during
+  17. POSIX special builtins are found before shell functions during
      command lookup.
 
-  17. When printing shell function definitions (e.g., by 'type'), Bash
+  18. When printing shell function definitions (e.g., by 'type'), Bash
      does not print the 'function' keyword.
 
-  18. Literal tildes that appear as the first character in elements of
+  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::.
 
-  19. The 'time' reserved word may be used by itself as a command.  When
+  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.
 
-  20. When parsing and expanding a ${...} expansion that appears within
+  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.
 
-  21. The parser does not recognize 'time' as a reserved word if the
+  22. The parser does not recognize 'time' as a reserved word if the
      next token begins with a '-'.
 
-  22. The '!' character does not introduce history expansion within a
+  23. The '!' character does not introduce history expansion within a
      double-quoted string, even if the 'histexpand' option is enabled.
 
-  23. If a POSIX special builtin returns an error status, a
+  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.
 
-  24. A non-interactive shell exits with an error status if a variable
+  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.
 
-  25. A non-interactive shell exits with an error status if a 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.
+     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").
 
-  26. A non-interactive shell exits with an error status if the
+  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.
 
-  27. Non-interactive shells exit if FILENAME in '.'  FILENAME is not
+  28. Non-interactive shells exit if FILENAME in '.'  FILENAME is not
      found.
 
-  28. Non-interactive shells exit if a syntax error in an arithmetic
+  29. Non-interactive shells exit if a syntax error in an arithmetic
      expansion results in an invalid expression.
 
-  29. Non-interactive shells exit if a parameter expansion error occurs.
+  30. Non-interactive shells exit if a parameter expansion error occurs.
 
-  30. Non-interactive shells exit if there is a syntax error in a script
+  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.
 
-  31. While variable indirection is available, it may not be applied to
+  32. While variable indirection is available, it may not be applied to
      the '#' and '?' special parameters.
 
-  32. When expanding the '*' special parameter in a pattern context
-     where the expansion is double-quoted does not treat the '$*' as if
-     it were double-quoted.
+  33. Expanding the '*' special parameter in a pattern context where the
+     expansion is double-quoted does not treat the '$*' as if it were
+     double-quoted.
 
-  33. Assignment statements preceding POSIX special builtins persist in
+  34. Assignment statements preceding POSIX special builtins persist in
      the shell environment after the builtin completes.
 
-  34. The 'command' builtin does not prevent builtins that take
+  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'.
 
-  35. The 'bg' builtin uses the required format to describe each job
+  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.
 
-  36. The output of 'kill -l' prints all the signal names on a single
+  37. The output of 'kill -l' prints all the signal names on a single
      line, separated by spaces, without the 'SIG' prefix.
 
-  37. The 'kill' builtin does not accept signal names with a 'SIG'
+  38. The 'kill' builtin does not accept signal names with a 'SIG'
      prefix.
 
-  38. The 'export' and 'readonly' builtin commands display their output
+  39. The 'export' and 'readonly' builtin commands display their output
      in the format required by POSIX.
 
-  39. The 'trap' builtin displays signal names without the leading
+  40. The 'trap' builtin displays signal names without the leading
      'SIG'.
 
-  40. The 'trap' builtin doesn't check the first argument for a possible
+  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.
 
-  41. 'trap -p' displays signals whose dispositions are set to SIG_DFL
+  42. 'trap -p' displays signals whose dispositions are set to SIG_DFL
      and those that were ignored when the shell started.
 
-  42. The '.' and 'source' builtins do not search the current directory
+  43. The '.' and 'source' builtins do not search the current directory
      for the filename argument if it is not found by searching 'PATH'.
 
-  43. Enabling POSIX mode has the effect of setting the
+  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.
 
-  44. Enabling POSIX mode has the effect of setting the 'shift_verbose'
+  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.
 
-  45. When the 'alias' builtin displays alias definitions, it does not
+  46. When the 'alias' builtin displays alias definitions, it does not
      display them with a leading 'alias ' unless the '-p' option is
      supplied.
 
-  46. When the 'set' builtin is invoked without options, it does not
+  47. When the 'set' builtin is invoked without options, it does not
      display shell function names and definitions.
 
-  47. When the 'set' builtin is invoked without options, it displays
+  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.
 
-  48. When the 'cd' builtin is invoked in LOGICAL mode, and the pathname
+  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.
+     instead of falling back to physical mode.
 
-  49. When the 'cd' builtin cannot change a directory because the length
+  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
+     supplied as an argument exceeds 'PATH_MAX' when all symbolic links
      are expanded, 'cd' will fail instead of attempting to use only the
      supplied directory name.
 
-  50. The 'pwd' builtin verifies that the value it prints is the same as
+  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.
 
-  51. When listing the history, the 'fc' builtin does not include an
+  52. When listing the history, the 'fc' builtin does not include an
      indication of whether or not a history entry has been modified.
 
-  52. The default editor used by 'fc' is 'ed'.
+  53. The default editor used by 'fc' is 'ed'.
 
-  53. The 'type' and 'command' builtins will not report a non-executable
+  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'.
 
-  54. The 'vi' editing mode will invoke the 'vi' editor directly when
+  55. The 'vi' editing mode will invoke the 'vi' editor directly when
      the 'v' command is run, instead of checking '$VISUAL' and
      '$EDITOR'.
 
-  55. When the 'xpg_echo' option is enabled, Bash does not attempt to
+  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.
 
-  56. The 'ulimit' builtin uses a block size of 512 bytes for the '-c'
+  57. The 'ulimit' builtin uses a block size of 512 bytes for the '-c'
      and '-f' options.
 
-  57. The arrival of 'SIGCHLD' when a trap is set on 'SIGCHLD' does not
+  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.
 
-  58. The 'read' builtin may be interrupted by a signal for which a trap
+  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.
 
-  59. Bash removes an exited background process's status from the list
+  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
@@ -6915,7 +7290,7 @@ File: bashref.info,  Node: Shell Compatibility Mode,  Prev: Bash POSIX Mode,  Up
 6.12 Shell Compatibility Mode
 =============================
 
-Bash-4.0 introduced the concept of a 'shell compatibility level',
+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
@@ -6927,7 +7302,7 @@ 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 above).
+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
@@ -7004,8 +7379,8 @@ required for bash-5.1 and later versions.
 '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 (declare -a foo='(1 2)').  Later versions warn that
-          this usage is deprecated
+          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
@@ -7040,6 +7415,38 @@ required for bash-5.1 and later versions.
           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.
+
 \1f
 File: bashref.info,  Node: Job Control,  Next: Command Line Editing,  Prev: Bash Features,  Up: Top
 
@@ -7093,19 +7500,19 @@ when 'stty tostop' is in effect) the terminal are sent a 'SIGTTIN'
 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
+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.
+"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).
+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
@@ -7234,7 +7641,7 @@ File: bashref.info,  Node: Job Control Builtins,  Next: Job Control Variables,
      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
+     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,
@@ -7245,9 +7652,12 @@ File: bashref.info,  Node: Job Control Builtins,  Next: Job Control Variables,
      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, intead of returning when it changes status.
+     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.
+     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 ... ]
@@ -7265,8 +7675,11 @@ File: bashref.info,  Node: Job Control Builtins,  Next: Job Control Variables,
           suspend [-f]
 
      Suspend the execution of this shell until it receives a 'SIGCONT'
-     signal.  A login shell cannot be suspended; the '-f' option can be
-     used to override this and force the suspension.
+     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.
@@ -7427,9 +7840,9 @@ Printing characters
      Undo the last editing command.  You can undo all the way back to an
      empty line.
 
-(Depending on your configuration, the <Backspace> key be set to delete
-the character to the left of the cursor and the <DEL> key set to delete
-the character underneath the cursor, like 'C-d', rather than the
+(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.)
 
 \1f
@@ -7491,9 +7904,9 @@ available to be yanked back later, when you are typing another line.
      as those used by 'M-f'.
 
 'M-<DEL>'
-     Kill from the cursor the start of the current word, or, if between
-     words, to the start of the previous word.  Word boundaries are the
-     same as those used by 'M-b'.
+     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
@@ -7582,7 +7995,7 @@ File: bashref.info,  Node: Readline Init File,  Next: Bindable Readline Commands
 Although the Readline library comes with a set of Emacs-like keybindings
 installed by default, it is possible to use a different set of
 keybindings.  Any user can customize programs that use Readline by
-putting commands in an "inputrc" file, conventionally in his home
+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
@@ -7641,6 +8054,32 @@ Variable Settings
      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
@@ -7662,7 +8101,10 @@ Variable Settings
           If set to 'on', when listing completions, Readline displays
           the common prefix of the set of possible completions using a
           different color.  The color definitions are taken from the
-          value of the 'LS_COLORS' environment variable.  The default is
+          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'
@@ -7708,8 +8150,9 @@ Variable Settings
           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 0.  A negative value means Readline should
-          never ask.  The default limit is '100'.
+          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
@@ -7717,7 +8160,9 @@ Variable Settings
           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.
+          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.
@@ -7726,7 +8171,7 @@ Variable Settings
 
      'echo-control-characters'
           When set to 'on', on operating systems that indicate they
-          support it, readline echoes a character corresponding to a
+          support it, Readline echoes a character corresponding to a
           signal generated from the keyboard.  The default is 'on'.
 
      'editing-mode'
@@ -7745,13 +8190,27 @@ Variable Settings
           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 will configure the terminal in a
-          way that will enable it to insert each paste into the editing
-          buffer as a single string of characters, instead of treating
-          each character as if it had been read from the keyboard.  This
-          can prevent pasted characters from being interpreted as
-          editing commands.  The default is 'On'.
+          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
@@ -7798,7 +8257,9 @@ Variable Settings
           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.
+          '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
@@ -7863,7 +8324,9 @@ Variable Settings
           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.
+          '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
@@ -7879,7 +8342,8 @@ Variable Settings
           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'.
+          undo lists across calls to 'readline()'.  The default is
+          'off'.
 
      'show-all-if-ambiguous'
           This alters the default behavior of the completion functions.
@@ -7906,7 +8370,7 @@ Variable Settings
           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
+          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
@@ -7956,11 +8420,11 @@ Key Bindings
      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
+     In addition to command names, Readline allows keys to be bound to a
      string that is inserted when the key is pressed (a MACRO).
 
      The 'bind -p' command displays Readline function names and bindings
-     in a format that can put directly into an initialization file.
+     in a format that can be put directly into an initialization file.
      *Note Bash Builtins::.
 
      KEYNAME: FUNCTION-NAME or MACRO
@@ -8438,6 +8902,11 @@ File: bashref.info,  Node: Commands For History,  Next: Commands For Text,  Prev
      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.
+
 \1f
 File: bashref.info,  Node: Commands For Text,  Next: Commands For Killing,  Prev: Commands For History,  Up: Bindable Readline Commands
 
@@ -8754,7 +9223,7 @@ File: bashref.info,  Node: Keyboard Macros,  Next: Miscellaneous Commands,  Prev
      characters in the macro appear as if typed at the keyboard.
 
 'print-last-kbd-macro ()'
-     Print the last keboard macro defined in a format suitable for the
+     Print the last keyboard macro defined in a format suitable for the
      INPUTRC file.
 
 \1f
@@ -8801,12 +9270,12 @@ File: bashref.info,  Node: Miscellaneous Commands,  Prev: Keyboard Macros,  Up:
 
 'character-search (C-])'
      A character is read and point is moved to the next occurrence of
-     that character.  A negative count searches for previous
+     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 count searches for subsequent
+     of that character.  A negative argument searches for subsequent
      occurrences.
 
 'skip-csi-sequence ()'
@@ -8814,7 +9283,7 @@ File: bashref.info,  Node: Miscellaneous Commands,  Prev: Keyboard Macros,  Up:
      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
+     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-[.
 
@@ -8849,6 +9318,12 @@ File: bashref.info,  Node: Miscellaneous Commands,  Prev: Keyboard Macros,  Up:
      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
@@ -9249,7 +9724,8 @@ happening.
 
      '-C COMMAND'
           COMMAND is executed in a subshell environment, and its output
-          is used as the possible completions.
+          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
@@ -9411,7 +9887,7 @@ CDPATH: Readline can't tell those completions are directories).  The '-o
 nospace' option tells Readline to not append a space character to the
 directory name, in case we want to append to it.  The '-o bashdefault'
 option brings in the rest of the "Bash default" completions - possible
-completion that Bash adds to the default Readline set.  These include
+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.
@@ -9578,9 +10054,9 @@ history file.
           -d' command.
 
      '-d START-END'
-          Delete the history entries between positions START and END,
-          inclusive.  Positive and negative values for START and END are
-          interpreted as described above.
+          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
@@ -9609,9 +10085,14 @@ history file.
           The ARGs are added to the end of the history list as a single
           entry.
 
-     When any of the '-w', '-r', '-a', or '-n' options is used, if
-     FILENAME is given, then it is used as the history file.  If not,
-     then the value of the 'HISTFILE' variable is used.
+     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.
 
 \1f
 File: bashref.info,  Node: History Interaction,  Prev: Bash History Builtins,  Up: Using History Interactively
@@ -9828,7 +10309,7 @@ or edit, the word or words selected from the history event.
      '&' 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 is null, each
+     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.
 
@@ -9897,20 +10378,28 @@ These are installation instructions for Bash.
   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.
+     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', 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.
+(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
@@ -9941,7 +10430,7 @@ considered for the next release.
    The file 'configure.ac' is used to create 'configure' by a program
 called Autoconf.  You only need 'configure.ac' if you want to change it
 or regenerate 'configure' using a newer version of Autoconf.  If you do
-this, make sure you are using Autoconf version 2.50 or newer.
+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
@@ -9984,7 +10473,7 @@ need to supply the '--srcdir=PATH' argument to tell 'configure' where
 the source files are.  'configure' automatically checks for the source
 code in the directory that 'configure' is in and in '..'.
 
-   If you have to use a 'make' that does not supports the 'VPATH'
+   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
@@ -10009,10 +10498,13 @@ File: bashref.info,  Node: Installation Names,  Next: Specifying the System Type
 =======================
 
 By default, 'make install' will install into '/usr/local/bin',
-'/usr/local/man', etc.  You can specify an installation prefix other
-than '/usr/local' by giving 'configure' the option '--prefix=PATH', or
-by specifying a value for the 'DESTDIR' 'make' variable when running
-'make install'.
+'/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
@@ -10020,6 +10512,30 @@ 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.
+
 \1f
 File: bashref.info,  Node: Specifying the System Type,  Next: Sharing Defaults,  Prev: Installation Names,  Up: Installing Bash
 
@@ -10027,7 +10543,7 @@ File: bashref.info,  Node: Specifying the System Type,  Next: Sharing Defaults,
 ===============================
 
 There may be some features 'configure' can not figure out automatically,
-but need to determine by the type of host Bash will run on.  Usually
+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
@@ -10135,16 +10651,20 @@ the Bash 'configure' recognizes.
      subdirectories of that directory (include files in PREFIX/'include'
      and the library in PREFIX/'lib').
 
-'--with-purify'
-     Define this to use the Purify memory allocation checker from
-     Rational Software.
+'--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
-and linked, rather than changing run-time features.
+   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
@@ -10157,6 +10677,10 @@ and linked, rather than changing run-time features.
      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.
@@ -10165,14 +10689,21 @@ and linked, rather than changing run-time features.
 following options, but it is processed first, so individual options may
 be enabled using 'enable-FEATURE'.
 
-   All of the following options except for 'disabled-builtins',
-'direxpand-default', and 'xpg-echo-default' are enabled by default,
-unless the operating system does not provide the necessary support.
+   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
@@ -10192,7 +10723,7 @@ unless the operating system does not provide the necessary support.
 
 '--enable-casemod-attributes'
      Include support for case-modifying attributes in the 'declare'
-     builtin and assignment statements.  Variables with the UPPERCASE
+     builtin and assignment statements.  Variables with the 'uppercase'
      attribute, for example, will have their values converted to
      uppercase upon assignment.
 
@@ -10251,7 +10782,7 @@ unless the operating system does not provide the necessary support.
      described above under *note Pattern Matching::.
 
 '--enable-extended-glob-default'
-     Set the default value of the EXTGLOB shell option described above
+     Set the default value of the 'extglob' shell option described above
      under *note The Shopt Builtin:: to be enabled.
 
 '--enable-function-import'
@@ -10260,10 +10791,10 @@ unless the operating system does not provide the necessary support.
      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.
+     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
@@ -10314,10 +10845,6 @@ unless the operating system does not provide the necessary support.
      Include the 'select' compound command, which allows the generation
      of simple menus (*note Conditional Constructs::).
 
-'--enable-separate-helpfiles'
-     Use external files for the documentation displayed by the 'help'
-     builtin instead of storing the text internally.
-
 '--enable-single-help-strings'
      Store the text displayed by the 'help' builtin as a single string
      for each help topic.  This aids in translating the text to
@@ -10327,6 +10854,10 @@ unless the operating system does not provide the necessary support.
 '--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'.
 
@@ -10353,7 +10884,8 @@ 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/>.
+<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
@@ -10479,15 +11011,15 @@ the baseline reference.
      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
+   * 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
+   * Bash has indirect variable expansion using '${!word}' (*note Shell
      Parameter Expansion::).
 
    * Bash can expand positional parameters beyond '$9' using '${NUM}'.
@@ -10513,8 +11045,8 @@ the baseline reference.
      shell uses only '!'.
 
    * Bash implements the full set of POSIX filename expansion operators,
-     including CHARACTER CLASSES, EQUIVALENCE CLASSES, and COLLATING
-     SYMBOLS (*note Filename Expansion::).
+     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::).
@@ -10631,7 +11163,7 @@ the baseline reference.
 
    * 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
+     with the '.' or 'source' builtins).  This supports the Bash
      debugger.
 
    * The 'trap' builtin (*note Bourne Shell Builtins::) allows a 'DEBUG'
@@ -10653,7 +11185,7 @@ the baseline reference.
 
      The 'trap' builtin (*note Bourne Shell Builtins::) allows a
      'RETURN' pseudo-signal specification, similar to 'EXIT' and
-     'DEBUG'.  Commands specified with an 'RETURN' trap are executed
+     '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
@@ -11252,94 +11784,94 @@ D.1 Index of Shell Builtin Commands
 * ::                                     Bourne Shell Builtins.
                                                               (line  11)
 * [:                                     Bourne Shell Builtins.
-                                                              (line 270)
+                                                              (line 275)
 * alias:                                 Bash Builtins.       (line  11)
 * bg:                                    Job Control Builtins.
                                                               (line   7)
 * bind:                                  Bash Builtins.       (line  21)
 * break:                                 Bourne Shell Builtins.
-                                                              (line  36)
-* builtin:                               Bash Builtins.       (line 104)
-* caller:                                Bash Builtins.       (line 113)
+                                                              (line  37)
+* builtin:                               Bash Builtins.       (line 108)
+* caller:                                Bash Builtins.       (line 117)
 * cd:                                    Bourne Shell Builtins.
-                                                              (line  44)
-* command:                               Bash Builtins.       (line 130)
+                                                              (line  45)
+* command:                               Bash Builtins.       (line 134)
 * compgen:                               Programmable Completion Builtins.
                                                               (line  12)
 * complete:                              Programmable Completion Builtins.
                                                               (line  30)
 * compopt:                               Programmable Completion Builtins.
-                                                              (line 237)
+                                                              (line 238)
 * continue:                              Bourne Shell Builtins.
-                                                              (line  85)
-* declare:                               Bash Builtins.       (line 150)
+                                                              (line  90)
+* declare:                               Bash Builtins.       (line 154)
 * dirs:                                  Directory Stack Builtins.
                                                               (line   7)
 * disown:                                Job Control Builtins.
-                                                              (line 101)
-* echo:                                  Bash Builtins.       (line 253)
-* enable:                                Bash Builtins.       (line 302)
+                                                              (line 104)
+* echo:                                  Bash Builtins.       (line 257)
+* enable:                                Bash Builtins.       (line 306)
 * eval:                                  Bourne Shell Builtins.
-                                                              (line  94)
+                                                              (line  99)
 * exec:                                  Bourne Shell Builtins.
-                                                              (line 102)
+                                                              (line 107)
 * exit:                                  Bourne Shell Builtins.
-                                                              (line 120)
+                                                              (line 125)
 * export:                                Bourne Shell Builtins.
-                                                              (line 127)
+                                                              (line 132)
 * fc:                                    Bash History Builtins.
                                                               (line  10)
 * fg:                                    Job Control Builtins.
                                                               (line  17)
 * getopts:                               Bourne Shell Builtins.
-                                                              (line 143)
+                                                              (line 148)
 * hash:                                  Bourne Shell Builtins.
-                                                              (line 187)
-* help:                                  Bash Builtins.       (line 331)
+                                                              (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 350)
-* local:                                 Bash Builtins.       (line 358)
-* logout:                                Bash Builtins.       (line 374)
-* mapfile:                               Bash Builtins.       (line 379)
+* 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 425)
+* printf:                                Bash Builtins.       (line 436)
 * pushd:                                 Directory Stack Builtins.
-                                                              (line  53)
+                                                              (line  69)
 * pwd:                                   Bourne Shell Builtins.
-                                                              (line 207)
-* read:                                  Bash Builtins.       (line 474)
-* readarray:                             Bash Builtins.       (line 570)
+                                                              (line 212)
+* read:                                  Bash Builtins.       (line 488)
+* readarray:                             Bash Builtins.       (line 585)
 * readonly:                              Bourne Shell Builtins.
-                                                              (line 217)
+                                                              (line 222)
 * return:                                Bourne Shell Builtins.
-                                                              (line 236)
+                                                              (line 241)
 * set:                                   The Set Builtin.     (line  11)
 * shift:                                 Bourne Shell Builtins.
-                                                              (line 257)
+                                                              (line 262)
 * shopt:                                 The Shopt Builtin.   (line   9)
-* source:                                Bash Builtins.       (line 579)
+* source:                                Bash Builtins.       (line 594)
 * suspend:                               Job Control Builtins.
-                                                              (line 113)
+                                                              (line 116)
 * test:                                  Bourne Shell Builtins.
-                                                              (line 270)
+                                                              (line 275)
 * times:                                 Bourne Shell Builtins.
-                                                              (line 349)
+                                                              (line 360)
 * trap:                                  Bourne Shell Builtins.
-                                                              (line 355)
-* type:                                  Bash Builtins.       (line 584)
-* typeset:                               Bash Builtins.       (line 616)
-* ulimit:                                Bash Builtins.       (line 622)
+                                                              (line 366)
+* type:                                  Bash Builtins.       (line 599)
+* typeset:                               Bash Builtins.       (line 631)
+* ulimit:                                Bash Builtins.       (line 637)
 * umask:                                 Bourne Shell Builtins.
-                                                              (line 404)
-* unalias:                               Bash Builtins.       (line 728)
+                                                              (line 415)
+* unalias:                               Bash Builtins.       (line 743)
 * unset:                                 Bourne Shell Builtins.
-                                                              (line 422)
+                                                              (line 433)
 * wait:                                  Job Control Builtins.
                                                               (line  76)
 
@@ -11354,9 +11886,9 @@ D.2 Index of Shell Reserved Words
 
 * !:                                     Pipelines.           (line   9)
 * [[:                                    Conditional Constructs.
-                                                              (line 125)
+                                                              (line 126)
 * ]]:                                    Conditional Constructs.
-                                                              (line 125)
+                                                              (line 126)
 * {:                                     Command Grouping.    (line  21)
 * }:                                     Command Grouping.    (line  21)
 * case:                                  Conditional Constructs.
@@ -11378,7 +11910,7 @@ D.2 Index of Shell Reserved Words
 * in:                                    Conditional Constructs.
                                                               (line  28)
 * select:                                Conditional Constructs.
-                                                              (line  83)
+                                                              (line  84)
 * then:                                  Conditional Constructs.
                                                               (line   7)
 * time:                                  Pipelines.           (line   9)
@@ -11394,24 +11926,28 @@ D.3 Parameter and Variable Index
 \0\b[index\0\b]
 * Menu:
 
-* !:                                     Special Parameters.  (line  56)
+* !:                                     Special Parameters.  (line  55)
 * #:                                     Special Parameters.  (line  39)
 * $:                                     Special Parameters.  (line  51)
-* $!:                                    Special Parameters.  (line  57)
+* $!:                                    Special Parameters.  (line  56)
 * $#:                                    Special Parameters.  (line  40)
 * $$:                                    Special Parameters.  (line  52)
 * $*:                                    Special Parameters.  (line  10)
 * $-:                                    Special Parameters.  (line  47)
-* $0:                                    Special Parameters.  (line  62)
+* $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  61)
+* 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)
@@ -11435,31 +11971,31 @@ D.3 Parameter and Variable Index
 * BASH_VERSION:                          Bash Variables.      (line 181)
 * BASH_XTRACEFD:                         Bash Variables.      (line 184)
 * bell-style:                            Readline Init File Syntax.
-                                                              (line  38)
+                                                              (line  64)
 * bind-tty-special-chars:                Readline Init File Syntax.
-                                                              (line  45)
+                                                              (line  71)
 * blink-matching-paren:                  Readline Init File Syntax.
-                                                              (line  50)
+                                                              (line  76)
 * CDPATH:                                Bourne Shell Variables.
                                                               (line   9)
 * CHILD_MAX:                             Bash Variables.      (line 195)
 * colored-completion-prefix:             Readline Init File Syntax.
-                                                              (line  55)
+                                                              (line  81)
 * colored-stats:                         Readline Init File Syntax.
-                                                              (line  62)
+                                                              (line  91)
 * COLUMNS:                               Bash Variables.      (line 202)
 * comment-begin:                         Readline Init File Syntax.
-                                                              (line  68)
+                                                              (line  97)
 * completion-display-width:              Readline Init File Syntax.
-                                                              (line  73)
+                                                              (line 102)
 * completion-ignore-case:                Readline Init File Syntax.
-                                                              (line  80)
+                                                              (line 109)
 * completion-map-case:                   Readline Init File Syntax.
-                                                              (line  85)
+                                                              (line 114)
 * completion-prefix-display-length:      Readline Init File Syntax.
-                                                              (line  91)
+                                                              (line 120)
 * completion-query-items:                Readline Init File Syntax.
-                                                              (line  98)
+                                                              (line 127)
 * COMPREPLY:                             Bash Variables.      (line 254)
 * COMP_CWORD:                            Bash Variables.      (line 208)
 * COMP_KEY:                              Bash Variables.      (line 237)
@@ -11469,29 +12005,31 @@ D.3 Parameter and Variable Index
 * COMP_WORDBREAKS:                       Bash Variables.      (line 241)
 * COMP_WORDS:                            Bash Variables.      (line 247)
 * convert-meta:                          Readline Init File Syntax.
-                                                              (line 108)
+                                                              (line 138)
 * COPROC:                                Bash Variables.      (line 260)
 * DIRSTACK:                              Bash Variables.      (line 264)
 * disable-completion:                    Readline Init File Syntax.
-                                                              (line 116)
+                                                              (line 148)
 * echo-control-characters:               Readline Init File Syntax.
-                                                              (line 121)
+                                                              (line 153)
 * editing-mode:                          Readline Init File Syntax.
-                                                              (line 126)
+                                                              (line 158)
 * EMACS:                                 Bash Variables.      (line 274)
 * emacs-mode-string:                     Readline Init File Syntax.
-                                                              (line 132)
+                                                              (line 164)
+* enable-active-region:                  Readline Init File Syntax.
+                                                              (line 174)
 * enable-bracketed-paste:                Readline Init File Syntax.
-                                                              (line 142)
+                                                              (line 187)
 * enable-keypad:                         Readline Init File Syntax.
-                                                              (line 150)
+                                                              (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 161)
+                                                              (line 207)
 * FCEDIT:                                Bash Variables.      (line 316)
 * FIGNORE:                               Bash Variables.      (line 320)
 * FUNCNAME:                              Bash Variables.      (line 326)
@@ -11505,15 +12043,15 @@ D.3 Parameter and Variable Index
 * HISTFILESIZE:                          Bash Variables.      (line 402)
 * HISTIGNORE:                            Bash Variables.      (line 413)
 * history-preserve-point:                Readline Init File Syntax.
-                                                              (line 165)
+                                                              (line 211)
 * history-size:                          Readline Init File Syntax.
-                                                              (line 171)
+                                                              (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 180)
+                                                              (line 226)
 * HOSTFILE:                              Bash Variables.      (line 448)
 * HOSTNAME:                              Bash Variables.      (line 459)
 * HOSTTYPE:                              Bash Variables.      (line 462)
@@ -11521,18 +12059,21 @@ D.3 Parameter and Variable Index
                                                               (line  18)
 * IGNOREEOF:                             Bash Variables.      (line 465)
 * input-meta:                            Readline Init File Syntax.
-                                                              (line 189)
+                                                              (line 235)
 * INPUTRC:                               Bash Variables.      (line 475)
 * INSIDE_EMACS:                          Bash Variables.      (line 479)
 * isearch-terminators:                   Readline Init File Syntax.
-                                                              (line 197)
+                                                              (line 245)
 * keymap:                                Readline Init File Syntax.
-                                                              (line 204)
-* LANG:                                  Bash Variables.      (line 485)
+                                                              (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:                           Locale Translation.  (line  15)
+* 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)
@@ -11546,15 +12087,15 @@ D.3 Parameter and Variable Index
                                                               (line  27)
 * MAPFILE:                               Bash Variables.      (line 540)
 * mark-modified-lines:                   Readline Init File Syntax.
-                                                              (line 234)
+                                                              (line 282)
 * mark-symlinked-directories:            Readline Init File Syntax.
-                                                              (line 239)
+                                                              (line 287)
 * match-hidden-files:                    Readline Init File Syntax.
-                                                              (line 244)
+                                                              (line 292)
 * menu-complete-display-prefix:          Readline Init File Syntax.
-                                                              (line 251)
+                                                              (line 299)
 * meta-flag:                             Readline Init File Syntax.
-                                                              (line 189)
+                                                              (line 235)
 * OLDPWD:                                Bash Variables.      (line 544)
 * OPTARG:                                Bourne Shell Variables.
                                                               (line  34)
@@ -11563,9 +12104,9 @@ D.3 Parameter and Variable Index
                                                               (line  38)
 * OSTYPE:                                Bash Variables.      (line 551)
 * output-meta:                           Readline Init File Syntax.
-                                                              (line 256)
+                                                              (line 304)
 * page-completions:                      Readline Init File Syntax.
-                                                              (line 262)
+                                                              (line 312)
 * PATH:                                  Bourne Shell Variables.
                                                               (line  42)
 * PIPESTATUS:                            Bash Variables.      (line 554)
@@ -11582,37 +12123,40 @@ D.3 Parameter and Variable Index
 * PS4:                                   Bash Variables.      (line 595)
 * PWD:                                   Bash Variables.      (line 603)
 * RANDOM:                                Bash Variables.      (line 606)
-* READLINE_LINE:                         Bash Variables.      (line 612)
-* READLINE_MARK:                         Bash Variables.      (line 616)
-* READLINE_POINT:                        Bash Variables.      (line 622)
-* REPLY:                                 Bash Variables.      (line 626)
+* 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 272)
-* SECONDS:                               Bash Variables.      (line 629)
-* SHELL:                                 Bash Variables.      (line 638)
-* SHELLOPTS:                             Bash Variables.      (line 643)
-* SHLVL:                                 Bash Variables.      (line 652)
+                                                              (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 278)
+                                                              (line 329)
 * show-all-if-unmodified:                Readline Init File Syntax.
-                                                              (line 284)
+                                                              (line 335)
 * show-mode-in-prompt:                   Readline Init File Syntax.
-                                                              (line 293)
+                                                              (line 344)
 * skip-completed-text:                   Readline Init File Syntax.
-                                                              (line 299)
-* SRANDOM:                               Bash Variables.      (line 657)
-* TEXTDOMAIN:                            Locale Translation.  (line  15)
-* TEXTDOMAINDIR:                         Locale Translation.  (line  15)
-* TIMEFORMAT:                            Bash Variables.      (line 666)
-* TMOUT:                                 Bash Variables.      (line 704)
-* TMPDIR:                                Bash Variables.      (line 716)
-* UID:                                   Bash Variables.      (line 720)
+                                                              (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 312)
+                                                              (line 363)
 * vi-ins-mode-string:                    Readline Init File Syntax.
-                                                              (line 323)
+                                                              (line 374)
 * visible-stats:                         Readline Init File Syntax.
-                                                              (line 334)
+                                                              (line 385)
 
 \1f
 File: bashref.info,  Node: Function Index,  Next: Concept Index,  Prev: Variable Index,  Up: Indexes
@@ -11628,7 +12172,7 @@ D.4 Function Index
 * accept-line (Newline or Return):       Commands For History.
                                                               (line   6)
 * alias-expand-line ():                  Miscellaneous Commands.
-                                                              (line 125)
+                                                              (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.
@@ -11677,7 +12221,7 @@ D.4 Function Index
                                                               (line  57)
 * digit-argument (M-0, M-1, ... M--):    Numeric Arguments.   (line   6)
 * display-shell-version (C-x C-v):       Miscellaneous Commands.
-                                                              (line 110)
+                                                              (line 116)
 * do-lowercase-version (M-A, M-B, M-X, ...): Miscellaneous Commands.
                                                               (line  14)
 * downcase-word (M-l):                   Commands For Text.   (line  62)
@@ -11690,7 +12234,7 @@ D.4 Function Index
 * dynamic-complete-history (M-<TAB>):    Commands For Completion.
                                                               (line  90)
 * edit-and-execute-command (C-x C-e):    Miscellaneous Commands.
-                                                              (line 134)
+                                                              (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.
@@ -11698,21 +12242,23 @@ D.4 Function Index
 * 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  92)
-* glob-expand-word (C-x *):              Miscellaneous Commands.
                                                               (line  98)
-* glob-list-expansions (C-x g):          Miscellaneous Commands.
+* 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 128)
+                                                              (line 134)
 * history-expand-line (M-^):             Miscellaneous Commands.
-                                                              (line 118)
+                                                              (line 124)
 * history-search-backward ():            Commands For History.
                                                               (line  57)
 * history-search-forward ():             Commands For History.
@@ -11726,7 +12272,7 @@ D.4 Function Index
 * insert-completions (M-*):              Commands For Completion.
                                                               (line  22)
 * insert-last-argument (M-. or M-_):     Miscellaneous Commands.
-                                                              (line 131)
+                                                              (line 137)
 * kill-line (C-k):                       Commands For Killing.
                                                               (line   6)
 * kill-region ():                        Commands For Killing.
@@ -11736,7 +12282,7 @@ D.4 Function Index
 * kill-word (M-d):                       Commands For Killing.
                                                               (line  23)
 * magic-space ():                        Miscellaneous Commands.
-                                                              (line 121)
+                                                              (line 127)
 * menu-complete ():                      Commands For Completion.
                                                               (line  26)
 * menu-complete-backward ():             Commands For Completion.
@@ -11784,7 +12330,7 @@ D.4 Function Index
                                                               (line  37)
 * shell-backward-word (M-C-b):           Commands For Moving. (line  30)
 * shell-expand-line (M-C-e):             Miscellaneous Commands.
-                                                              (line 113)
+                                                              (line 119)
 * shell-forward-word (M-C-f):            Commands For Moving. (line  26)
 * shell-kill-word (M-C-d):               Commands For Killing.
                                                               (line  32)
@@ -11792,6 +12338,8 @@ D.4 Function Index
                                                               (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)
@@ -11913,6 +12461,8 @@ D.5 Concept Index
 * 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)
@@ -11968,6 +12518,8 @@ D.5 Concept Index
 * 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)
@@ -11983,137 +12535,138 @@ D.5 Concept Index
 
 \1f
 Tag Table:
-Node: Top\7f895
-Node: Introduction\7f2813
-Node: What is Bash?\7f3029
-Node: What is a shell?\7f4143
-Node: Definitions\7f6681
-Node: Basic Shell Features\7f9632
-Node: Shell Syntax\7f10851
-Node: Shell Operation\7f11877
-Node: Quoting\7f13170
-Node: Escape Character\7f14470
-Node: Single Quotes\7f14955
-Node: Double Quotes\7f15303
-Node: ANSI-C Quoting\7f16581
-Node: Locale Translation\7f17840
-Node: Comments\7f18993
-Node: Shell Commands\7f19611
-Node: Reserved Words\7f20549
-Node: Simple Commands\7f21305
-Node: Pipelines\7f21959
-Node: Lists\7f24891
-Node: Compound Commands\7f26682
-Node: Looping Constructs\7f27694
-Node: Conditional Constructs\7f30189
-Node: Command Grouping\7f41760
-Node: Coprocesses\7f43239
-Node: GNU Parallel\7f45142
-Node: Shell Functions\7f49443
-Node: Shell Parameters\7f56650
-Node: Positional Parameters\7f61063
-Node: Special Parameters\7f61963
-Node: Shell Expansions\7f65187
-Node: Brace Expansion\7f67310
-Node: Tilde Expansion\7f70033
-Node: Shell Parameter Expansion\7f72650
-Node: Command Substitution\7f87779
-Node: Arithmetic Expansion\7f89134
-Node: Process Substitution\7f90066
-Node: Word Splitting\7f91186
-Node: Filename Expansion\7f93130
-Node: Pattern Matching\7f95679
-Node: Quote Removal\7f99665
-Node: Redirections\7f99960
-Node: Executing Commands\7f109530
-Node: Simple Command Expansion\7f110200
-Node: Command Search and Execution\7f112154
-Node: Command Execution Environment\7f114530
-Node: Environment\7f117514
-Node: Exit Status\7f119173
-Node: Signals\7f120843
-Node: Shell Scripts\7f122810
-Node: Shell Builtin Commands\7f125822
-Node: Bourne Shell Builtins\7f127860
-Node: Bash Builtins\7f148789
-Node: Modifying Shell Behavior\7f178898
-Node: The Set Builtin\7f179243
-Node: The Shopt Builtin\7f189656
-Node: Special Builtins\7f204566
-Node: Shell Variables\7f205545
-Node: Bourne Shell Variables\7f205982
-Node: Bash Variables\7f208086
-Node: Bash Features\7f240720
-Node: Invoking Bash\7f241733
-Node: Bash Startup Files\7f247746
-Node: Interactive Shells\7f252849
-Node: What is an Interactive Shell?\7f253259
-Node: Is this Shell Interactive?\7f253908
-Node: Interactive Shell Behavior\7f254723
-Node: Bash Conditional Expressions\7f258237
-Node: Shell Arithmetic\7f262814
-Node: Aliases\7f265754
-Node: Arrays\7f268374
-Node: The Directory Stack\7f274383
-Node: Directory Stack Builtins\7f275167
-Node: Controlling the Prompt\7f278135
-Node: The Restricted Shell\7f281085
-Node: Bash POSIX Mode\7f283679
-Node: Shell Compatibility Mode\7f294715
-Node: Job Control\7f301371
-Node: Job Control Basics\7f301831
-Node: Job Control Builtins\7f306827
-Node: Job Control Variables\7f312227
-Node: Command Line Editing\7f313383
-Node: Introduction and Notation\7f315054
-Node: Readline Interaction\7f316677
-Node: Readline Bare Essentials\7f317868
-Node: Readline Movement Commands\7f319651
-Node: Readline Killing Commands\7f320611
-Node: Readline Arguments\7f322529
-Node: Searching\7f323573
-Node: Readline Init File\7f325759
-Node: Readline Init File Syntax\7f327018
-Node: Conditional Init Constructs\7f347556
-Node: Sample Init File\7f351752
-Node: Bindable Readline Commands\7f354876
-Node: Commands For Moving\7f356080
-Node: Commands For History\7f358131
-Node: Commands For Text\7f362924
-Node: Commands For Killing\7f366573
-Node: Numeric Arguments\7f369606
-Node: Commands For Completion\7f370745
-Node: Keyboard Macros\7f374936
-Node: Miscellaneous Commands\7f375623
-Node: Readline vi Mode\7f381307
-Node: Programmable Completion\7f382214
-Node: Programmable Completion Builtins\7f389994
-Node: A Programmable Completion Example\7f400689
-Node: Using History Interactively\7f405936
-Node: Bash History Facilities\7f406620
-Node: Bash History Builtins\7f409625
-Node: History Interaction\7f414354
-Node: Event Designators\7f417974
-Node: Word Designators\7f419328
-Node: Modifiers\7f421088
-Node: Installing Bash\7f422899
-Node: Basic Installation\7f424036
-Node: Compilers and Options\7f427294
-Node: Compiling For Multiple Architectures\7f428035
-Node: Installation Names\7f429728
-Node: Specifying the System Type\7f430546
-Node: Sharing Defaults\7f431262
-Node: Operation Controls\7f431935
-Node: Optional Features\7f432893
-Node: Reporting Bugs\7f443411
-Node: Major Differences From The Bourne Shell\7f444605
-Node: GNU Free Documentation License\7f461457
-Node: Indexes\7f486634
-Node: Builtin Index\7f487088
-Node: Reserved Word Index\7f493915
-Node: Variable Index\7f496363
-Node: Function Index\7f512260
-Node: Concept Index\7f525770
+Node: Top\7f899
+Node: Introduction\7f2821
+Node: What is Bash?\7f3037
+Node: What is a shell?\7f4151
+Node: Definitions\7f6689
+Node: Basic Shell Features\7f9640
+Node: Shell Syntax\7f10859
+Node: Shell Operation\7f11885
+Node: Quoting\7f13178
+Node: Escape Character\7f14482
+Node: Single Quotes\7f14967
+Node: Double Quotes\7f15315
+Node: ANSI-C Quoting\7f16593
+Node: Locale Translation\7f17903
+Node: Creating Internationalized Scripts\7f19214
+Node: Comments\7f23331
+Node: Shell Commands\7f23949
+Node: Reserved Words\7f24887
+Node: Simple Commands\7f25643
+Node: Pipelines\7f26297
+Node: Lists\7f29296
+Node: Compound Commands\7f31091
+Node: Looping Constructs\7f32103
+Node: Conditional Constructs\7f34598
+Node: Command Grouping\7f49086
+Node: Coprocesses\7f50564
+Node: GNU Parallel\7f53227
+Node: Shell Functions\7f54144
+Node: Shell Parameters\7f62029
+Node: Positional Parameters\7f66417
+Node: Special Parameters\7f67319
+Node: Shell Expansions\7f70533
+Node: Brace Expansion\7f72660
+Node: Tilde Expansion\7f75394
+Node: Shell Parameter Expansion\7f78015
+Node: Command Substitution\7f96366
+Node: Arithmetic Expansion\7f97721
+Node: Process Substitution\7f98689
+Node: Word Splitting\7f99809
+Node: Filename Expansion\7f101753
+Node: Pattern Matching\7f104502
+Node: Quote Removal\7f109504
+Node: Redirections\7f109799
+Node: Executing Commands\7f119459
+Node: Simple Command Expansion\7f120129
+Node: Command Search and Execution\7f122239
+Node: Command Execution Environment\7f124617
+Node: Environment\7f127652
+Node: Exit Status\7f129315
+Node: Signals\7f131099
+Node: Shell Scripts\7f134548
+Node: Shell Builtin Commands\7f137575
+Node: Bourne Shell Builtins\7f139613
+Node: Bash Builtins\7f161079
+Node: Modifying Shell Behavior\7f191935
+Node: The Set Builtin\7f192280
+Node: The Shopt Builtin\7f202881
+Node: Special Builtins\7f218793
+Node: Shell Variables\7f219772
+Node: Bourne Shell Variables\7f220209
+Node: Bash Variables\7f222313
+Node: Bash Features\7f255128
+Node: Invoking Bash\7f256141
+Node: Bash Startup Files\7f262154
+Node: Interactive Shells\7f267285
+Node: What is an Interactive Shell?\7f267696
+Node: Is this Shell Interactive?\7f268345
+Node: Interactive Shell Behavior\7f269160
+Node: Bash Conditional Expressions\7f272789
+Node: Shell Arithmetic\7f277431
+Node: Aliases\7f280375
+Node: Arrays\7f282988
+Node: The Directory Stack\7f289379
+Node: Directory Stack Builtins\7f290163
+Node: Controlling the Prompt\7f294423
+Node: The Restricted Shell\7f297388
+Node: Bash POSIX Mode\7f299998
+Node: Shell Compatibility Mode\7f311916
+Node: Job Control\7f320483
+Node: Job Control Basics\7f320943
+Node: Job Control Builtins\7f325945
+Node: Job Control Variables\7f331740
+Node: Command Line Editing\7f332896
+Node: Introduction and Notation\7f334567
+Node: Readline Interaction\7f336190
+Node: Readline Bare Essentials\7f337381
+Node: Readline Movement Commands\7f339170
+Node: Readline Killing Commands\7f340130
+Node: Readline Arguments\7f342051
+Node: Searching\7f343095
+Node: Readline Init File\7f345281
+Node: Readline Init File Syntax\7f346542
+Node: Conditional Init Constructs\7f370128
+Node: Sample Init File\7f374324
+Node: Bindable Readline Commands\7f377448
+Node: Commands For Moving\7f378652
+Node: Commands For History\7f380703
+Node: Commands For Text\7f385697
+Node: Commands For Killing\7f389346
+Node: Numeric Arguments\7f392379
+Node: Commands For Completion\7f393518
+Node: Keyboard Macros\7f397709
+Node: Miscellaneous Commands\7f398397
+Node: Readline vi Mode\7f404342
+Node: Programmable Completion\7f405249
+Node: Programmable Completion Builtins\7f413029
+Node: A Programmable Completion Example\7f423781
+Node: Using History Interactively\7f429029
+Node: Bash History Facilities\7f429713
+Node: Bash History Builtins\7f432718
+Node: History Interaction\7f437742
+Node: Event Designators\7f441362
+Node: Word Designators\7f442716
+Node: Modifiers\7f444476
+Node: Installing Bash\7f446284
+Node: Basic Installation\7f447421
+Node: Compilers and Options\7f451143
+Node: Compiling For Multiple Architectures\7f451884
+Node: Installation Names\7f453576
+Node: Specifying the System Type\7f455685
+Node: Sharing Defaults\7f456402
+Node: Operation Controls\7f457075
+Node: Optional Features\7f458033
+Node: Reporting Bugs\7f469252
+Node: Major Differences From The Bourne Shell\7f470527
+Node: GNU Free Documentation License\7f487376
+Node: Indexes\7f512553
+Node: Builtin Index\7f513007
+Node: Reserved Word Index\7f519834
+Node: Variable Index\7f522282
+Node: Function Index\7f539056
+Node: Concept Index\7f552840
 \1f
 End Tag Table
 
index 50b64fbae5b2045fe6516b54da269560bbae3aaa..eb8b766ac35b8a820caa6bed7179715409c6d25a 100644 (file)
Binary files a/doc/bashref.pdf and b/doc/bashref.pdf differ
index 0ef38c1d1ceb44f5a106fdb64bf8095352c3b338..02ab1d34caf1dac1a00c9903e24e107727bb5094 100644 (file)
@@ -1,8 +1,8 @@
 %!PS-Adobe-2.0
-%%Creator: dvips(k) 2020.1 Copyright 2020 Radical Eye Software
+%%Creator: dvips(k) 2021.1 Copyright 2021 Radical Eye Software
 %%Title: bashref.dvi
-%%CreationDate: Wed Nov 18 20:13:07 2020
-%%Pages: 189
+%%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
@@ -12,7 +12,7 @@
 %DVIPSWebPage: (www.radicaleye.com)
 %DVIPSCommandLine: dvips -D 600 -t letter -o bashref.ps bashref.dvi
 %DVIPSParameters: dpi=600
-%DVIPSSource:  TeX output 2020.11.18:1513
+%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
@@ -7613,23 +7613,23 @@ ifelse
 %%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.1,)g(for)f
-Ft(Bash)g Fu(V)-8 b(ersion)31 b(5.1.)3217 1697 y(Octob)s(er)f(2020)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(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.1,)c(29)f(Octob)s(er)f
-(2020\).)150 4523 y(This)35 b(is)g(Edition)h(5.1,)i(last)f(up)s(dated)d
-(29)i(Octob)s(er)g(2020,)j(of)c Fr(The)h(GNU)g(Bash)f(Reference)i(Man)m
-(ual)p Fu(,)150 4633 y(for)30 b Ft(Bash)p Fu(,)g(V)-8
-b(ersion)31 b(5.1.)150 4767 y(Cop)m(yrigh)m(t)602 4764
-y(c)577 4767 y Fq(\015)f Fu(1988{2020)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
+(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
@@ -7691,434 +7691,434 @@ f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)30
 b Fu(7)399 2438 y(3.1.3)93 b(Commen)m(ts)14 b Fn(:)i(:)f(:)g(:)h(:)f(:)
 h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g
 (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)
-h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)28 b Fu(7)275 2548 y(3.2)92
+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(8)399 2658 y(3.2.1)93 b(Reserv)m(ed)31
+(:)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(8)399 2767 y(3.2.2)93 b(Simple)30 b(Commands)15
+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(8)399 2877 y(3.2.3)93
-b(Pip)s(elines)26 b Fn(:)15 b(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f
-(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)
-g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f
-(:)h(:)f(:)g(:)40 b Fu(8)399 2986 y(3.2.4)93 b(Lists)30
-b(of)h(Commands)23 b Fn(:)14 b(:)i(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f
-(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)
-g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)36 b Fu(9)399
+(:)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(10)524 3205 y(3.2.5.1)93 b(Lo)s(oping)30 b(Constructs)16
+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(10)524 3315 y(3.2.5.2)93 b(Conditional)31 b(Constructs)25
+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(11)524 3425 y(3.2.5.3)93 b(Grouping)30 b(Commands)22
+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(15)399 3534 y(3.2.6)93 b(Copro)s(cesses)26 b Fn(:)15
+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(15)399
+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(16)275 3753 y(3.3)92 b(Shell)30
+(:)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(18)275 3863 y(3.4)92 b(Shell)30 b(P)m(arameters)c
+(:)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(20)399 3973 y(3.4.1)93 b(P)m(ositional)32 b(P)m(arameters)8
+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(21)399 4082 y(3.4.2)93 b(Sp)s(ecial)30
+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(21)275 4192
+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(22)399 4301 y(3.5.1)93 b(Brace)31
+(:)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(23)399 4411 y(3.5.2)93 b(Tilde)30 b(Expansion)18 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(24)399 4521 y(3.5.3)93
+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(25)399 4630 y(3.5.4)93
+(:)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(31)399 4740
+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(31)399 4849 y(3.5.6)93 b(Pro)s(cess)30 b(Substitution)15
+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(32)399 4959 y(3.5.7)93 b(W)-8
+(:)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(32)399 5068 y(3.5.8)93 b(Filename)32 b(Expansion)22
+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(33)524 5178 y(3.5.8.1)93 b(P)m(attern)31
+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(33)399 5288 y(3.5.9)93
+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(35)p eop end
+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(35)399 193 y(3.6.1)93 b(Redirecting)31
+(:)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(36)399 302
+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(36)399 412 y(3.6.3)93 b(App)s(ending)28 b(Redirected)k(Output)20
+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(36)399
+(:)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(37)399 631 y(3.6.5)93 b(App)s(ending)28 b(Standard)i(Output)f(and)h
+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(37)399 741 y(3.6.6)93 b(Here)31 b(Do)s(cumen)m(ts)15
+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(37)399 850 y(3.6.7)93
+(:)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(38)399 960 y(3.6.8)93 b(Duplicating)32 b(File)f(Descriptors)25
+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(38)399 1069 y(3.6.9)93 b(Mo)m(ving)32 b(File)f(Descriptors)d
+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(38)399 1179 y(3.6.10)93 b(Op)s(ening)29 b(File)j(Descriptors)f
+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(38)275 1289 y(3.7)92 b(Executing)31 b(Commands)24
+(:)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(39)399 1398 y(3.7.1)93
+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(39)399 1508 y(3.7.2)93 b(Command)29
+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(39)399 1617 y(3.7.3)93 b(Command)29 b(Execution)i(En)m
+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(40)399
+(:)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(41)399 1836 y(3.7.5)93 b(Exit)31
+(:)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(41)399 1946 y(3.7.6)93 b(Signals)23 b Fn(:)15 b(:)h(:)f(:)h(:)f(:)
+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(42)275
+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(42)150 2306
+(:)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(44)275 2443 y Fu(4.1)92 b(Bourne)30
+(:)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(44)275 2553 y(4.2)92 b(Bash)30 b(Builtin)h(Commands)13
+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(51)275 2663 y(4.3)92 b(Mo)s(difying)30
+(:)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(62)399
+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(62)399 2882 y(4.3.2)93 b(The)30 b(Shopt)f(Builtin)21
+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(66)275 2991 y(4.4)92
+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(72)150 3242 y Fs(5)135 b(Shell)45
+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(73)275 3379 y Fu(5.1)92
+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(73)275 3489 y(5.2)92 b(Bash)30 b(V)-8 b(ariables)26
+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(73)150 3739 y Fs(6)135 b(Bash)44 b(F)-11 b(eatures)32
+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(86)275 3876 y Fu(6.1)92 b(In)m(v)m(oking)31 b(Bash)16
+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(86)275 3986 y(6.2)92 b(Bash)30 b(Startup)g(Files)f
+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(88)275
+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(89)399 4205 y(6.3.1)93
+(:)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(90)399 4315 y(6.3.2)93 b(Is)30 b(this)g(Shell)g(In)m(teractiv)m
+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(90)399 4424 y(6.3.3)93 b(In)m(teractiv)m(e)33
+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(90)275 4534 y(6.4)92 b(Bash)30
+(:)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(91)275 4643 y(6.5)92
+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(93)275 4753 y(6.6)92 b(Aliases)20 b Fn(:)d(:)e(:)h(:)f
-(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)
-f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f
-(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)33
-b Fu(94)275 4863 y(6.7)92 b(Arra)m(ys)25 b Fn(:)16 b(:)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(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)38
-b Fu(95)275 4972 y(6.8)92 b(The)29 b(Directory)j(Stac)m(k)16
-b Fn(:)h(:)f(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)
-h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h
-(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)29 b Fu(97)399 5082
-y(6.8.1)93 b(Directory)32 b(Stac)m(k)f(Builtins)23 b
-Fn(:)16 b(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h
-(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)
-36 b Fu(97)275 5191 y(6.9)92 b(Con)m(trolling)31 b(the)g(Prompt)13
-b Fn(:)h(:)i(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)
-h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h
-(:)f(:)g(:)h(:)f(:)h(:)25 b Fu(98)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(100)p eop end
+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(101)275 193 y(6.12)92 b(Shell)30 b(Compatibilit)m(y)i(Mo)s(de)25
+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(104)150 443 y Fs(7)135 b(Job)45 b(Con)l(trol)35
+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(107)275 580 y Fu(7.1)92 b(Job)30 b(Con)m(trol)h(Basics)23
+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(107)275 690
+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(108)275 800 y(7.3)92 b(Job)30 b(Con)m(trol)h(V)-8
+(:)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(110)150
+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(111)275 1187 y Fu(8.1)92 b(In)m(tro)s(duction)
+(:)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(111)275 1297 y(8.2)92
+(:)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(111)399 1406 y(8.2.1)93 b(Readline)31 b(Bare)g(Essen)m(tials)13
+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(112)399 1516 y(8.2.2)93 b(Readline)31 b(Mo)m(v)m(emen)m(t)i
+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(112)399 1626 y(8.2.3)93 b(Readline)31 b(Killing)g(Commands)24
+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(113)399 1735 y(8.2.4)93 b(Readline)31 b(Argumen)m(ts)17
+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(113)399 1845 y(8.2.5)93 b(Searc)m(hing)31
+(:)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(113)275
+(:)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(114)399 2064
+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(114)399 2174 y(8.3.2)93 b(Conditional)31 b(Init)f(Constructs)14
+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(122)399 2283 y(8.3.3)93 b(Sample)30 b(Init)g(File)20
+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(124)275 2393 y(8.4)92
+(:)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(127)399 2502 y(8.4.1)93
+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(127)399
+(:)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(128)399 2721 y(8.4.3)93 b(Commands)29 b(F)-8
+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(130)399 2831 y(8.4.4)93 b(Killing)31
+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(131)399
+(:)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(132)399
+(:)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(133)399 3160 y(8.4.7)93 b(Keyb)s(oard)29 b(Macros)9
+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(134)399 3269 y(8.4.8)93
+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(135)275 3379 y(8.5)92 b(Readline)31 b(vi)f(Mo)s(de)e
+(:)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(137)275
+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(137)275 3598 y(8.7)92 b(Programmable)30 b(Completion)h(Builtins)14
+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(139)275
+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(143)150 3958 y
+(:)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(146)275 4095 y Fu(9.1)92 b(Bash)30 b(History)h(F)-8
+(:)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(146)275
+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(146)275 4315 y(9.3)92 b(History)31
+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(148)399 4424 y(9.3.1)93 b(Ev)m(en)m(t)31 b(Designators)19
+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(149)399 4534 y(9.3.2)93 b(W)-8
+(:)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(150)399
+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(150)p eop end
+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(152)275 220 y Fu(10.1)92 b(Basic)32
+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(152)275 330 y(10.2)92 b(Compilers)30 b(and)g(Options)17
+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(153)275 439 y(10.3)92 b(Compiling)30
+(:)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(153)275 549 y(10.4)92
+(:)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(153)275 658 y(10.5)92 b(Sp)s(ecifying)30 b(the)g(System)h(T)m(yp)s
+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(154)275 768 y(10.6)92 b(Sharing)30 b(Defaults)24
+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(154)275
+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(154)275 987 y(10.8)92 b(Optional)31
+(:)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(155)150 1238 y Fs(App)t(endix)44 b(A)119 b(Rep)t(orting)46
+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(160)150 1498 y(App)t(endix)44
+(:)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(161)275 1776 y Fu(B.1)92
+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(165)150 2027 y Fs(App)t(endix)44 b(C)124 b(GNU)36
+(:)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(167)150 2305 y(App)t(endix)44 b(D)118
+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(175)275 2442 y Fu(D.1)92 b(Index)29 b(of)i(Shell)f(Builtin)h
+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(175)275 2552 y(D.2)92 b(Index)29 b(of)i(Shell)f(Reserv)m(ed)h(W)-8
+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(176)275 2661 y(D.3)92 b(P)m(arameter)31 b(and)f(V)-8
+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(177)275 2771 y(D.4)92 b(F)-8 b(unction)31
+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(179)275 2880 y(D.5)92 b(Concept)30 b(Index)15 b
+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(181)p eop end
+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
@@ -8267,7 +8267,7 @@ 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(35,)i(for)d(a)g(list)h(of)f(redirection)h(op)s
+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
@@ -8339,34 +8339,34 @@ 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(42\),)k
+(\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(86\),)h(or)e(from)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(94\).)199 4186 y(3.)61
-b(P)m(arses)35 b(the)g(tok)m(ens)g(in)m(to)h(simple)e(and)g(comp)s
-(ound)f(commands)h(\(see)h(Section)h(3.2)f([Shell)g(Com-)330
-4296 y(mands],)30 b(page)h(8\).)199 4442 y(4.)61 b(P)m(erforms)40
+(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(22\),)330 4551 y(breaking)35
+([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(33\))h(and)e(commands)g(and)g(argumen)m(ts.)199
+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(35\))g(and)e(re-)330
+(\(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(39\).)199 5208 y(7.)61
+([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(41\).)p
+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
@@ -8378,2350 +8378,2604 @@ y(Quoting)c(can)f(b)s(e)g(used)f(to)j(disable)e(sp)s(ecial)h(treatmen)m
 (t)h(for)e(sp)s(ecial)h(c)m(haracters,)i(to)e(prev)m(en)m(t)g(reserv)m
 (ed)150 665 y(w)m(ords)i(from)g(b)s(eing)g(recognized)h(as)g(suc)m(h,)f
 (and)g(to)h(prev)m(en)m(t)g(parameter)g(expansion.)275
-795 y(Eac)m(h)22 b(of)g(the)g(shell)g(metac)m(haracters)i(\(see)f
+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 905 y(to)40 b(the)g(shell)f(and)g(m)m(ust)g(b)s(e)g
+(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 1015 y(expansion)i(facilities)j
+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(148\),)47 b(the)150 1124 y Fr(history)30
+(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 1234 y(Section)22 b(9.1)g([Bash)f(History)h(F)
--8 b(acilities],)26 b(page)c(146,)j(for)20 b(more)h(details)h
-(concerning)g(history)f(expansion.)275 1364 y(There)37
+(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 1474 y(quotes.)150 1665 y Fk(3.1.2.1)63 b(Escap)s(e)41
-b(Character)150 1812 y Fu(A)36 b(non-quoted)f(bac)m(kslash)h(`)p
+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 1921 y(the)27 b(next)g(c)m(haracter)h(that)f(follo)m(ws,)i
+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 2031 y(and)k(the)h(bac)m
+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
-2140 y(is,)f(it)g(is)f(remo)m(v)m(ed)h(from)f(the)h(input)e(stream)i
-(and)f(e\013ectiv)m(ely)j(ignored\).)150 2331 y Fk(3.1.2.2)63
-b(Single)42 b(Quotes)150 2478 y Fu(Enclosing)24 b(c)m(haracters)h(in)e
+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
-2588 y(the)31 b(quotes.)42 b(A)31 b(single)h(quote)f(ma)m(y)g(not)g(o)s
+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 2697 y(bac)m(kslash.)150 2888
-y Fk(3.1.2.3)63 b(Double)42 b(Quotes)150 3035 y Fu(Enclosing)24
+(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 3145 y(the)34
+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 3254
+(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(101\),)h(the)e(`)p
-Ft(!)p Fu(')150 3364 y(has)d(no)g(sp)s(ecial)h(meaning)g(within)f
+(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 3474 y(c)m(haracters)h(`)p Ft($)p
+(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
-3583 y([Shell)29 b(Expansions],)g(page)h(22\).)41 b(The)28
+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 3693 y(b)m(y)41 b(one)f(of)h(the)g(follo)m(wing)h
+(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 3802 y(bac)m(kslashes)25
+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 3912 y(c)m(haracters)35 b(without)e(a)h(sp)s(ecial)f
+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 4022 y(within)h(double)h(quotes)g(b)m(y)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 4131 y(b)s(e)f(p)s
+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 4241 y(bac)m(kslash)31 b(preceding)f(the)h(`)p
-Ft(!)p Fu(')f(is)h(not)g(remo)m(v)m(ed.)275 4371 y(The)41
+b(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 4481 y(Section)31 b(3.5.3)h([Shell)f(P)m(arameter)h
-(Expansion],)e(page)h(25\).)150 4672 y Fk(3.1.2.4)63
-b(ANSI-C)40 b(Quoting)150 4819 y Fu(W)-8 b(ords)43 b(of)f(the)h(form)f
-Ft($')p Fj(string)p Ft(')e Fu(are)j(treated)g(sp)s(ecially)-8
-b(.)79 b(The)42 b(w)m(ord)g(expands)f(to)j Fr(string)p
-Fu(,)h(with)150 4928 y(bac)m(kslash-escap)s(ed)f(c)m(haracters)h
-(replaced)f(as)g(sp)s(eci\014ed)f(b)m(y)g(the)g(ANSI)g(C)g(standard.)79
-b(Bac)m(kslash)150 5038 y(escap)s(e)31 b(sequences,)g(if)f(presen)m(t,)
-h(are)g(deco)s(ded)f(as)g(follo)m(ws:)150 5189 y Ft(\\a)384
-b Fu(alert)31 b(\(b)s(ell\))150 5340 y Ft(\\b)384 b Fu(bac)m(kspace)p
-eop end
+(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(\\e)150 408 y(\\E)384 b Fu(an)30 b(escap)s(e)h(c)m(haracter)h
-(\(not)f(ANSI)f(C\))150 566 y Ft(\\f)384 b Fu(form)30
-b(feed)150 723 y Ft(\\n)384 b Fu(newline)150 880 y Ft(\\r)g
-Fu(carriage)32 b(return)150 1037 y Ft(\\t)384 b Fu(horizon)m(tal)32
-b(tab)150 1194 y Ft(\\v)384 b Fu(v)m(ertical)32 b(tab)150
-1351 y Ft(\\\\)384 b Fu(bac)m(kslash)150 1508 y Ft(\\')g
-Fu(single)31 b(quote)150 1665 y Ft(\\")384 b Fu(double)30
-b(quote)150 1823 y Ft(\\?)384 b Fu(question)31 b(mark)150
-1980 y Ft(\\)p Fj(nnn)288 b Fu(the)36 b(eigh)m(t-bit)h(c)m(haracter)g
-(whose)f(v)-5 b(alue)36 b(is)f(the)h(o)s(ctal)h(v)-5
-b(alue)36 b Fr(nnn)e Fu(\(one)i(to)h(three)f(o)s(ctal)630
-2089 y(digits\))150 2246 y Ft(\\x)p Fj(HH)288 b Fu(the)36
-b(eigh)m(t-bit)i(c)m(haracter)f(whose)f(v)-5 b(alue)36
-b(is)g(the)g(hexadecimal)h(v)-5 b(alue)36 b Fr(HH)46
-b Fu(\(one)37 b(or)f(t)m(w)m(o)630 2356 y(hex)30 b(digits\))150
-2513 y Ft(\\u)p Fj(HHHH)192 b Fu(the)33 b(Unico)s(de)f(\(ISO/IEC)g
-(10646\))j(c)m(haracter)f(whose)e(v)-5 b(alue)33 b(is)g(the)g
-(hexadecimal)g(v)-5 b(alue)630 2623 y Fr(HHHH)41 b Fu(\(one)31
-b(to)g(four)f(hex)g(digits\))150 2780 y Ft(\\U)p Fj(HHHHHHHH)630
-2889 y Fu(the)j(Unico)s(de)f(\(ISO/IEC)g(10646\))j(c)m(haracter)f
-(whose)e(v)-5 b(alue)33 b(is)g(the)g(hexadecimal)g(v)-5
-b(alue)630 2999 y Fr(HHHHHHHH)42 b Fu(\(one)31 b(to)g(eigh)m(t)g(hex)g
-(digits\))150 3156 y Ft(\\c)p Fj(x)336 b Fu(a)31 b(con)m(trol-)p
-Fr(x)38 b Fu(c)m(haracter)150 3313 y(The)30 b(expanded)f(result)i(is)f
+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 3510 y Fk(3.1.2.5)63 b(Lo)s(cale-Sp)s(eci\014c)41
-b(T)-10 b(ranslation)150 3657 y Fu(A)28 b(double-quoted)g(string)f
-(preceded)h(b)m(y)f(a)h(dollar)h(sign)e(\(`)p Ft($)p
-Fu('\))i(will)f(cause)g(the)g(string)g(to)g(b)s(e)f(translated)150
-3767 y(according)37 b(to)g(the)f(curren)m(t)g(lo)s(cale.)59
-b(The)36 b Fr(gettext)k Fu(infrastructure)35 b(p)s(erforms)g(the)h
-(message)h(catalog)150 3876 y(lo)s(okup)21 b(and)g(translation,)k
-(using)c(the)h Ft(LC_MESSAGES)d Fu(and)i Ft(TEXTDOMAIN)e
-Fu(shell)i(v)-5 b(ariables,)25 b(as)d(explained)150 3986
-y(b)s(elo)m(w.)57 b(See)36 b(the)g(gettext)i(do)s(cumen)m(tation)e(for)
-g(additional)g(details.)58 b(If)35 b(the)h(curren)m(t)f(lo)s(cale)j(is)
-e Ft(C)f Fu(or)150 4096 y Ft(POSIX)p Fu(,)g(or)g(if)g(there)g(are)h(no)
-f(translations)h(a)m(v)-5 b(ailable,)38 b(the)e(dollar)f(sign)g(is)g
-(ignored.)55 b(If)35 b(the)g(string)g(is)150 4205 y(translated)c(and)f
-(replaced,)h(the)f(replacemen)m(t)i(is)f(double-quoted.)275
-4339 y(Some)20 b(systems)h(use)f(the)h(message)h(catalog)h(selected)f
-(b)m(y)f(the)g Ft(LC_MESSAGES)c Fu(shell)k(v)-5 b(ariable.)39
-b(Others)150 4448 y(create)g(the)e(name)g(of)g(the)g(message)h(catalog)
-i(from)d(the)g(v)-5 b(alue)37 b(of)g(the)h Ft(TEXTDOMAIN)c
-Fu(shell)j(v)-5 b(ariable,)150 4558 y(p)s(ossibly)31
-b(adding)g(a)g(su\016x)g(of)h(`)p Ft(.mo)p Fu('.)43 b(If)31
-b(y)m(ou)h(use)f(the)h Ft(TEXTDOMAIN)c Fu(v)-5 b(ariable,)33
-b(y)m(ou)f(ma)m(y)g(need)f(to)h(set)150 4667 y(the)22
-b Ft(TEXTDOMAINDIR)d Fu(v)-5 b(ariable)23 b(to)g(the)f(lo)s(cation)i
-(of)e(the)h(message)g(catalog)i(\014les.)38 b(Still)23
-b(others)f(use)g(b)s(oth)150 4777 y(v)-5 b(ariables)31
-b(in)f(this)g(fashion:)41 b Ft(TEXTDOMAINDIR)p Fu(/)p
-Ft(LC_MESSAGES)p Fu(/LC)p 2528 4777 28 4 v 34 w(MESSA)m(GES/)p
-Ft(TEXTDOMAIN)p Fu(.mo.)150 4974 y Fk(3.1.3)63 b(Commen)m(ts)150
-5121 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 5230 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
-(66\),)i(a)d(w)m(ord)150 5340 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.)p
-eop end
+(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)150 299
-y(An)43 b(in)m(teractiv)m(e)j(shell)e(without)f(the)g
+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 408 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 518 y(Section)30 b(6.3)f([In)m(teractiv)m(e)j
-(Shells],)d(page)h(89,)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 757 y Fs(3.2)68 b(Shell)45
-b(Commands)150 916 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 1026 y(argumen)m(ts,)31 b(separated)g(b)m
-(y)f(spaces.)275 1159 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
-1269 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 1378 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 1575 y Fk(3.2.1)63 b(Reserv)m(ed)40 b(W)-10
-b(ords)150 1722 y Fu(Reserv)m(ed)33 b(w)m(ords)g(are)g(w)m(ords)g(that)
+(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 1832 y(and)d(end)f(the)i
-(shell's)g(comp)s(ound)e(commands.)275 1965 y(The)k(follo)m(wing)i(w)m
+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 2075 y(command)c(\(see)h(b)s(elo)
-m(w)g(for)f(exceptions\):)150 2208 y Ft(if)364 b(then)168
-b(elif)g(else)g(fi)336 b(time)150 2318 y(for)316 b(in)264
-b(until)120 b(while)g(do)336 b(done)150 2427 y(case)268
-b(esac)168 b(coproc)72 b(select)g(function)150 2537 y({)412
-b(})312 b([[)264 b(]])g(!)150 2670 y(in)33 b Fu(is)h(recognized)h(as)f
+(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 2780
+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 2977 y Fk(3.2.2)63 b(Simple)41
-b(Commands)150 3124 y Fu(A)29 b(simple)f(command)g(is)h(the)g(kind)e
+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 3233 y(w)m(ords)22 b(separated)i(b)m(y)e
+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 3343
+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 3452 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 3586 y(The)h(return)h(status)g(\(see)i
-(Section)f(3.7.5)h([Exit)f(Status],)h(page)f(41\))g(of)g(a)g(simple)f
-(command)g(is)h(its)150 3695 y(exit)38 b(status)f(as)g(pro)m(vided)f(b)
+(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 3805 y(w)m(as)31
-b(terminated)g(b)m(y)f(signal)h Fr(n)p Fu(.)150 4002
-y Fk(3.2.3)63 b(Pip)s(elines)150 4149 y Fu(A)21 b Ft(pipeline)d
+(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
-4259 y(`)p Ft(|)p Fu(')31 b(or)f(`)p Ft(|&)p Fu('.)275
-4392 y(The)f(format)i(for)f(a)h(pip)s(eline)f(is)390
-4525 y Ft([time)46 b([-p]])h([!])g Fj(command1)e Ft([)j(|)f(or)g(|&)g
-Fj(command2)f Ft(])h(...)150 4659 y Fu(The)25 b(output)f(of)i(eac)m(h)g
+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 4768 y(command.)40
+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 4878
+(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(the)g(command.)275 5011 y(If)k(`)p
+(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 5121 y(nected)h(to)g Fr(command2)7 b Fu('s)35
+(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 5230 y(implicit)41
+(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 5340
-y(redirections)31 b(sp)s(eci\014ed)f(b)m(y)g(the)g(command.)p
-eop end
-%%Page: 9 15
-TeXDict begin 9 14 bop 150 -116 a Fu(Chapter)30 b(3:)41
-b(Basic)32 b(Shell)e(F)-8 b(eatures)2292 b(9)275 299
-y(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 408 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 518 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 628 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
-737 y(Mo)s(de],)j(page)e(101\),)j(it)e(do)s(es)e(not)i(recognize)g
+(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 847 y(with)d(a)g(`)p Ft(-)p Fu('.)49
+(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
-956 y(timing)38 b(information)g(should)e(b)s(e)h(displa)m(y)m(ed.)62
+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(73,)i(for)e(a)150 1066 y(description)27 b(of)g(the)h(a)m(v)-5
+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
-1176 y(of)38 b(shell)g(builtins,)i(shell)e(functions,)i(and)d(pip)s
+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 1285 y(these)31 b(easily)-8 b(.)275 1418 y(When)26
+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(101\),)h Ft(time)150
-1527 y Fu(ma)m(y)d(b)s(e)f(follo)m(w)m(ed)j(b)m(y)d(a)h(newline.)39
+(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 1637 y(consumed)33 b(b)m(y)h(the)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
-1746 y(the)c(format)f(of)h(the)f(time)h(information.)275
-1879 y(If)24 b(the)h(pip)s(eline)g(is)g(not)g(executed)h(async)m
-(hronously)f(\(see)h(Section)g(3.2.4)h([Lists],)g(page)e(9\),)i(the)f
-(shell)150 1988 y(w)m(aits)31 b(for)f(all)i(commands)e(in)g(the)g(pip)s
-(eline)g(to)h(complete.)275 2121 y(Eac)m(h)e(command)g(in)g(a)g(pip)s
-(eline)g(is)g(executed)h(in)e(its)i(o)m(wn)f(subshell,)f(whic)m(h)h(is)
-g(a)g(separate)h(pro)s(cess)150 2230 y(\(see)g(Section)g(3.7.3)h
-([Command)e(Execution)h(En)m(vironmen)m(t],)g(page)g(40\).)41
-b(If)29 b(the)g Ft(lastpipe)e Fu(option)j(is)150 2340
-y(enabled)35 b(using)g(the)g Ft(shopt)f Fu(builtin)g(\(see)i(Section)g
-(4.3.2)h([The)e(Shopt)f(Builtin],)j(page)f(66\),)i(the)d(last)150
-2450 y(elemen)m(t)d(of)e(a)h(pip)s(eline)f(ma)m(y)h(b)s(e)f(run)f(b)m
-(y)h(the)h(shell)f(pro)s(cess.)275 2582 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 2692
-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(62\).)42 b(If)30
-b Ft(pipefail)150 2801 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 2911 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 3020 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 3130 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 3240
-y(v)-5 b(alue.)150 3435 y Fk(3.2.4)63 b(Lists)41 b(of)h(Commands)150
-3582 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 3691 y(`)p Ft(&&)p
-Fu(',)31 b(or)f(`)p Ft(||)p Fu(',)g(and)g(optionally)i(terminated)f(b)m
-(y)f(one)h(of)f(`)p Ft(;)p Fu(',)h(`)p Ft(&)p Fu(',)g(or)f(a)h
-Ft(newline)p Fu(.)275 3824 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 3933 y(ha)m(v)m(e)32 b(equal)e(precedence.)
-275 4066 y(A)f(sequence)h(of)g(one)g(or)g(more)g(newlines)f(ma)m(y)h
+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 4175 y(alen)m(t)i(to)f(a)g(semicolon.)275 4308 y(If)c(a)h(command)f
+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
-4418 y(async)m(hronously)g(in)h(a)g(subshell.)39 b(This)28
+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 4527 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 4637
+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 4746 y(Chapter)27 b(7)h([Job)f(Con)m(trol],)i(page)g(107\),)
+(\(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 4856 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 4988 y(Commands)19
+(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
-5098 y(to)31 b(terminate)h(in)e(turn.)39 b(The)30 b(return)f(status)i
+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
-5230 y Fm(and)g Fu(and)h Fm(or)g Fu(lists)h(are)g(sequences)f(of)h(one)
+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 5340 y(ators)e(`)p Ft(&&)p Fu(')f(and)g(`)p
+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(.)p eop end
-%%Page: 10 16
-TeXDict begin 10 15 bop 150 -116 a Fu(Chapter)30 b(3:)41
-b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(10)275 299
-y(An)30 b Fm(and)f Fu(list)i(has)f(the)h(form)390 433
-y Fj(command1)46 b Ft(&&)h Fj(command2)150 567 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
-701 y(An)f Fm(or)f Fu(list)i(has)f(the)h(form)390 835
-y Fj(command1)46 b Ft(||)h Fj(command2)150 969 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 1103
-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 1213 y(in)d(the)h(list.)150 1412 y Fk(3.2.5)63
-b(Comp)s(ound)42 b(Commands)150 1558 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 1668 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
-1778 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(35\))h(asso)s(ciated)
-f(with)150 1887 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
-1997 y(plicitly)i(o)m(v)m(erridden.)275 2131 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
-2240 y(from)30 b(the)h(rest)g(of)g(the)g(command)g(b)m(y)f(one)h(or)g
+(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 2350 y(in)f(place)h(of)g(a)g(semicolon.)275
-2484 y(Bash)45 b(pro)m(vides)h(lo)s(oping)g(constructs,)j(conditional)e
+(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
-2594 y(commands)30 b(and)g(execute)i(them)e(as)g(a)h(unit.)150
-2792 y Fk(3.2.5.1)63 b(Lo)s(oping)43 b(Constructs)150
-2939 y Fu(Bash)31 b(supp)s(orts)d(the)j(follo)m(wing)g(lo)s(oping)g
-(constructs.)275 3073 y(Note)k(that)f(wherev)m(er)g(a)g(`)p
+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 3183 y(replaced)c(with)f(one)h
-(or)f(more)g(newlines.)150 3341 y Ft(until)240 b Fu(The)30
+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
-3476 y Ft(until)46 b Fj(test-commands)p Ft(;)e(do)j Fj
-(consequent-commands)p Ft(;)c(done)630 3610 y Fu(Execute)f
+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 3719 y(whic)m(h)c(is)h(not)g
+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 3829 y(executed)31 b(in)f Fr(consequen)m
-(t-commands)p Fu(,)i(or)e(zero)h(if)g(none)f(w)m(as)h(executed.)150
-3987 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 4122 y Ft(while)46 b
-Fj(test-commands)p Ft(;)e(do)j Fj(consequent-commands)p
-Ft(;)c(done)630 4256 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 4365 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 4475 y Fr(consequen)m(t-commands)p
-Fu(,)c(or)g(zero)g(if)f(none)g(w)m(as)h(executed.)150
-4633 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 4768 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 4902 y Fu(Expand)30 b Fr(w)m(ords)k
-Fu(\(see)d(Section)h(3.5)g([Shell)f(Expansions],)g(page)g(22\),)i(and)d
-(execute)i Fr(com-)630 5011 y(mands)43 b Fu(once)e(for)g(eac)m(h)g(mem)
+(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 5121 y(curren)m(t)34
+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 5230 y Fr(commands)j Fu(once)e(for)f(eac)m(h)h(p)s(ositional)g
+(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 5340 y(b)s(een)30 b(sp)s(eci\014ed)f(\(see)j
-(Section)f(3.4.2)h([Sp)s(ecial)f(P)m(arameters],)h(page)f(21\).)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)630 299
-y(The)27 b(return)f(status)h(is)g(the)h(exit)g(status)f(of)g(the)h
+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
-408 y(are)38 b(no)f(items)g(in)g(the)h(expansion)f(of)g
+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
-518 y(return)29 b(status)i(is)f(zero.)630 644 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
-771 y Ft(for)47 b(\(\()g Fj(expr1)f Ft(;)i Fj(expr2)e
+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
-897 y Fu(First,)38 b(the)f(arithmetic)h(expression)e
+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 1007 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(93\).)77 b(The)42
-b(arithmetic)630 1116 y(expression)33 b Fr(expr2)41 b
+(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 1226
+(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 1335 y(metic)29 b(expression)f Fr(expr3)36
+(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 1445 y(if)i(it)h(ev)-5
+(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
-1555 y Fr(commands)j Fu(that)d(is)f(executed,)i(or)e(false)h(if)f(an)m
+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
-1698 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(44\))g(ma)m(y)
-150 1807 y(b)s(e)i(used)f(to)i(con)m(trol)h(lo)s(op)f(execution.)150
-1990 y Fk(3.2.5.2)63 b(Conditional)42 b(Constructs)150
-2154 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 2280 y Ft(if)47 b Fj(test-commands)p
-Ft(;)d(then)965 2390 y Fj(consequent-commands)p Ft(;)870
-2500 y([elif)i Fj(more-test-commands)p Ft(;)d(then)965
-2609 y Fj(more-consequents)p Ft(;])870 2719 y([else)j
-Fj(alternate-consequents)p Ft(;])870 2828 y(fi)630 2955
+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 3064 y Fr(consequen)m(t-commands)44 b Fu(list)d(is)f
+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 3174 y(status,)45 b(eac)m(h)e Ft(elif)d
+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 3284 y(corresp)s(onding)37 b
+(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 3393 y(`)p Ft(else)29 b Fj
+(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 3503 y Ft(if)44
+(\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 3612
+(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 3722 y(or)30 b(zero)i(if)e(no)g
-(condition)h(tested)g(true.)150 3865 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
-3991 y Ft(case)47 b Fj(word)f Ft(in)1061 4101 y([)h([\(])g
-Fj(pattern)f Ft([|)h Fj(pattern)p Ft(]...)m(\))h Fj(command-list)c
-Ft(;;]...)870 4211 y(esac)630 4337 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 4446 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
-4556 y(lo)m(w)25 b(in)e(Section)i(3.5.8.1)h([P)m(attern)f(Matc)m
-(hing],)i(page)e(33.)39 b(If)23 b(the)h Ft(nocasematch)d
-Fu(shell)j(op-)630 4666 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
-(66\))630 4775 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
-4885 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 4994 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 5104 y(kno)m(wn)e(as)g(a)h Fr(clause)p
-Fu(.)630 5230 y(Eac)m(h)42 b(clause)g(m)m(ust)f(b)s(e)g(terminated)h
+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
-5340 y(go)s(es)35 b(tilde)f(expansion,)h(parameter)g(expansion,)g
-(command)f(substitution,)h(arithmetic)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)630 299
-y(expansion,)35 b(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 408
-y(page)22 b(25\))g(b)s(efore)f(matc)m(hing)h(is)g(attempted.)38
-b(Eac)m(h)22 b Fr(pattern)g Fu(undergo)s(es)e(tilde)i(expansion,)630
-518 y(parameter)31 b(expansion,)f(command)g(substitution,)h(and)f
-(arithmetic)h(expansion.)630 651 y(There)f(ma)m(y)g(b)s(e)f(an)h
-(arbitrary)g(n)m(um)m(b)s(er)f(of)h Ft(case)f Fu(clauses,)i(eac)m(h)g
-(terminated)g(b)m(y)e(a)i(`)p Ft(;;)p Fu(',)630 761 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 870 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 980 y(default)d(case,)g(since)g(that)g(pattern)f(will)h(alw)m
-(a)m(ys)h(matc)m(h.)630 1113 y(Here)j(is)g(an)g(example)h(using)e
+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 1223 y(in)m(teresting)d(feature)f(of)f(an)g
-(animal:)870 1356 y Ft(echo)47 b(-n)g("Enter)f(the)h(name)f(of)i(an)f
-(animal:)f(")870 1465 y(read)h(ANIMAL)870 1575 y(echo)g(-n)g("The)f
-($ANIMAL)g(has)h(")870 1684 y(case)g($ANIMAL)e(in)965
-1794 y(horse)i(|)g(dog)g(|)h(cat\))e(echo)h(-n)g("four";;)965
-1904 y(man)g(|)h(kangaroo)d(\))j(echo)e(-n)i("two";;)965
-2013 y(*\))g(echo)e(-n)h("an)g(unknown)f(number)g(of";;)870
-2123 y(esac)870 2232 y(echo)h(")g(legs.")630 2389 y Fu(If)40
+(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 2498
+(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 2608 y(with)34 b(the)g Fr(command-list)j
+(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 2718 y(place)c(of)f(`)p
+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
-2827 y(execute)26 b(an)m(y)f(asso)s(ciated)h Fr(command-list)h
+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
-2937 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 3070 y(The)c(return)f(status)h(is)g(zero)h
+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 3180 y(is)30 b(the)h(exit)g(status)g(of)f
-(the)h Fr(command-list)i Fu(executed.)150 3336 y Ft(select)630
-3469 y Fu(The)g Ft(select)f Fu(construct)i(allo)m(ws)h(the)f(easy)g
+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
-3579 y(same)c(syn)m(tax)g(as)f(the)h Ft(for)e Fu(command:)870
-3712 y Ft(select)46 b Fj(name)h Ft([in)g Fj(words)f Ft(...)o(];)h(do)h
-Fj(commands)p Ft(;)d(done)630 3845 y Fu(The)25 b(list)h(of)f(w)m(ords)g
-(follo)m(wing)i Ft(in)d Fu(is)h(expanded,)h(generating)h(a)e(list)h(of)
-g(items.)39 b(The)25 b(set)h(of)630 3954 y(expanded)i(w)m(ords)h(is)g
-(prin)m(ted)f(on)h(the)g(standard)f(error)h(output)f(stream,)i(eac)m(h)
-g(preceded)630 4064 y(b)m(y)21 b(a)g(n)m(um)m(b)s(er.)37
-b(If)20 b(the)i(`)p Ft(in)30 b Fj(words)p Fu(')20 b(is)h(omitted,)j
-(the)d(p)s(ositional)h(parameters)g(are)f(prin)m(ted,)630
-4174 y(as)28 b(if)f(`)p Ft(in)j("$@")p Fu(')d(had)f(b)s(een)h(sp)s
-(eci\014ed.)39 b(The)27 b Ft(PS3)g Fu(prompt)f(is)i(then)f(displa)m(y)m
-(ed)h(and)f(a)h(line)630 4283 y(is)h(read)f(from)h(the)f(standard)g
-(input.)39 b(If)29 b(the)g(line)g(consists)g(of)g(a)g(n)m(um)m(b)s(er)e
-(corresp)s(onding)630 4393 y(to)36 b(one)f(of)h(the)f(displa)m(y)m(ed)h
-(w)m(ords,)g(then)f(the)g(v)-5 b(alue)36 b(of)f Fr(name)40
-b Fu(is)35 b(set)h(to)g(that)g(w)m(ord.)54 b(If)630 4502
-y(the)37 b(line)h(is)f(empt)m(y)-8 b(,)39 b(the)e(w)m(ords)g(and)f
-(prompt)g(are)i(displa)m(y)m(ed)f(again.)62 b(If)37 b
-Ft(EOF)f Fu(is)h(read,)630 4612 y(the)c Ft(select)e Fu(command)i
-(completes.)50 b(An)m(y)33 b(other)g(v)-5 b(alue)33 b(read)g(causes)g
-Fr(name)38 b Fu(to)c(b)s(e)e(set)630 4722 y(to)f(n)m(ull.)41
-b(The)30 b(line)g(read)h(is)f(sa)m(v)m(ed)h(in)g(the)f(v)-5
-b(ariable)31 b Ft(REPLY)p Fu(.)630 4855 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 4964 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
-5097 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
-5207 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 5340 y Ft(select)46
-b(fname)g(in)i(*;)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)870 299
-y Ft(do)870 408 y(echo)47 b(you)g(picked)f($fname)g(\\\($REPLY\\\))870
-518 y(break;)870 628 y(done)150 788 y(\(\(...)o(\)\))870
-923 y(\(\()h Fj(expression)e Ft(\)\))630 1058 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
-1167 y(\(see)j(Section)f(6.5)h([Shell)f(Arithmetic],)i(page)f(93\).)55
-b(If)34 b(the)h(v)-5 b(alue)35 b(of)g(the)g(expression)g(is)630
-1277 y(non-zero,)27 b(the)f(return)e(status)i(is)g(0;)h(otherwise)f
-(the)g(return)e(status)i(is)g(1.)39 b(This)25 b(is)g(exactly)630
-1386 y(equiv)-5 b(alen)m(t)32 b(to)870 1521 y Ft(let)47
-b(")p Fj(expression)p Ft(")630 1656 y Fu(See)25 b(Section)h(4.2)h
-([Bash)e(Builtins],)i(page)f(51,)i(for)c(a)i(full)f(description)g(of)g
-(the)h Ft(let)e Fu(builtin.)150 1816 y Ft([[...)o(]])870
-1951 y([[)47 b Fj(expression)e Ft(]])630 2086 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
-2196 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 2305 y(Section)36 b(6.4)h([Bash)f(Conditional)g
-(Expressions],)h(page)f(91.)57 b(W)-8 b(ord)36 b(splitting)h(and)e
-(\014le-)630 2415 y(name)d(expansion)g(are)h(not)g(p)s(erformed)d(on)j
-(the)f(w)m(ords)g(b)s(et)m(w)m(een)h(the)f Ft([[)g Fu(and)f
-Ft(]])p Fu(;)i(tilde)630 2524 y(expansion,)e(parameter)g(and)f(v)-5
-b(ariable)31 b(expansion,)g(arithmetic)g(expansion,)g(command)630
-2634 y(substitution,)40 b(pro)s(cess)f(substitution,)h(and)e(quote)h
-(remo)m(v)-5 b(al)40 b(are)f(p)s(erformed.)63 b(Condi-)630
-2744 y(tional)32 b(op)s(erators)e(suc)m(h)g(as)h(`)p
-Ft(-f)p Fu(')f(m)m(ust)g(b)s(e)g(unquoted)g(to)h(b)s(e)e(recognized)j
-(as)f(primaries.)630 2878 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 2988 y(curren)m(t)30
-b(lo)s(cale.)630 3123 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 3232 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 3342 y(Section)d(3.5.8.1)h([P)m(attern)f
-(Matc)m(hing],)h(page)f(33,)g(as)f(if)g(the)g Ft(extglob)d
-Fu(shell)j(option)g(w)m(ere)630 3452 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
-3561 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(66\))630 3671 y(is)e(enabled,)i(the)e(matc)m(h)h(is)e(p)s
-(erformed)g(without)g(regard)h(to)h(the)f(case)g(of)g(alphab)s(etic)630
-3780 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 3890 y(\(`)p
-Ft(!=)p Fu('\))j(the)f(pattern,)h(and)e(1)i(otherwise.)41
-b(An)m(y)30 b(part)g(of)h(the)f(pattern)g(ma)m(y)h(b)s(e)f(quoted)g(to)
-630 4000 y(force)h(the)g(quoted)f(p)s(ortion)g(to)h(b)s(e)f(matc)m(hed)
-h(as)g(a)f(string.)630 4134 y(An)44 b(additional)h(binary)f(op)s
-(erator,)49 b(`)p Ft(=~)p Fu(',)f(is)c(a)m(v)-5 b(ailable,)51
-b(with)44 b(the)h(same)f(precedence)630 4244 y(as)c(`)p
-Ft(==)p Fu(')g(and)f(`)p Ft(!=)p Fu('.)69 b(When)40 b(it)g(is)g(used,)i
-(the)e(string)g(to)g(the)g(righ)m(t)h(of)f(the)g(op)s(erator)g(is)630
-4354 y(considered)23 b(a)g Fm(posix)g Fu(extended)g(regular)g
-(expression)g(and)f(matc)m(hed)i(accordingly)g(\(using)630
-4463 y(the)29 b Fm(posix)g Ft(regcomp)e Fu(and)h Ft(regexec)g
-Fu(in)m(terfaces)i(usually)f(describ)s(ed)f(in)h Fl(r)-5
-b(e)g(gex)11 b Fu(\(3\)\).)42 b(The)630 4573 y(return)20
-b(v)-5 b(alue)21 b(is)g(0)g(if)g(the)g(string)g(matc)m(hes)h(the)f
-(pattern,)j(and)c(1)h(otherwise.)38 b(If)21 b(the)g(regular)630
-4682 y(expression)k(is)h(syn)m(tactically)i(incorrect,)g(the)e
-(conditional)h(expression's)e(return)g(v)-5 b(alue)26
-b(is)630 4792 y(2.)39 b(If)24 b(the)h Ft(nocasematch)c
-Fu(shell)k(option)g(\(see)h(the)e(description)h(of)g
-Ft(shopt)e Fu(in)h(Section)h(4.3.2)630 4902 y([The)e(Shopt)g(Builtin],)
-j(page)e(66\))h(is)e(enabled,)i(the)f(matc)m(h)g(is)g(p)s(erformed)e
-(without)h(regard)630 5011 y(to)36 b(the)g(case)h(of)f(alphab)s(etic)g
-(c)m(haracters.)58 b(An)m(y)36 b(part)g(of)g(the)g(pattern)f(ma)m(y)i
-(b)s(e)e(quoted)630 5121 y(to)f(force)g(the)f(quoted)h(p)s(ortion)f(to)
-h(b)s(e)f(matc)m(hed)h(as)f(a)h(string.)50 b(Brac)m(k)m(et)35
-b(expressions)e(in)630 5230 y(regular)g(expressions)g(m)m(ust)g(b)s(e)f
-(treated)i(carefully)-8 b(,)35 b(since)e(normal)g(quoting)g(c)m
-(haracters)630 5340 y(lose)25 b(their)f(meanings)g(b)s(et)m(w)m(een)h
-(brac)m(k)m(ets.)40 b(If)23 b(the)h(pattern)h(is)f(stored)g(in)f(a)i
-(shell)f(v)-5 b(ariable,)p eop end
+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(quoting)41 b(the)f(v)-5 b(ariable)42 b(expansion)e(forces)h(the)f(en)
-m(tire)h(pattern)g(to)g(b)s(e)f(matc)m(hed)h(as)g(a)630
-408 y(string.)630 555 y(The)26 b(pattern)g(will)h(matc)m(h)g(if)f(it)h
-(matc)m(hes)h(an)m(y)e(part)h(of)f(the)h(string.)39 b(Anc)m(hor)26
-b(the)h(pattern)630 664 y(using)f(the)i(`)p Ft(^)p Fu(')f(and)f(`)p
-Ft($)p Fu(')h(regular)h(expression)e(op)s(erators)h(to)h(force)g(it)f
-(to)h(matc)m(h)g(the)f(en)m(tire)630 774 y(string.)81
-b(The)44 b(arra)m(y)g(v)-5 b(ariable)45 b Ft(BASH_REMATCH)40
-b Fu(records)k(whic)m(h)f(parts)h(of)g(the)g(string)630
-883 y(matc)m(hed)31 b(the)f(pattern.)41 b(The)30 b(elemen)m(t)i(of)e
-Ft(BASH_REMATCH)d Fu(with)j(index)g(0)g(con)m(tains)i(the)630
-993 y(p)s(ortion)20 b(of)h(the)g(string)f(matc)m(hing)i(the)f(en)m
-(tire)g(regular)g(expression.)37 b(Substrings)19 b(matc)m(hed)630
-1103 y(b)m(y)30 b(paren)m(thesized)g(sub)s(expressions)e(within)i(the)g
-(regular)g(expression)g(are)g(sa)m(v)m(ed)h(in)f(the)630
-1212 y(remaining)j 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 1322 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
-1468 y(F)-8 b(or)34 b(example,)h(the)e(follo)m(wing)i(will)f(matc)m(h)g
-(a)g(line)f(\(stored)h(in)f(the)h(shell)f(v)-5 b(ariable)34
-b Fr(line)5 b Fu(\))630 1577 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 1687 y(n)m(um)m(b)s(er,)30
-b(including)h(zero,)h(of)f(c)m(haracters)i(in)e(the)g
-Ft(space)f Fu(c)m(haracter)i(class,)h(zero)f(or)f(one)630
-1797 y(instances)g(of)f(`)p Ft(a)p Fu(',)h(then)f(a)h(`)p
-Ft(b)p Fu(':)870 1943 y Ft([[)47 b($line)g(=~)g([[:space:]]*\(a\)?b)c
-(]])630 2089 y Fu(That)24 b(means)g(v)-5 b(alues)24 b(lik)m(e)h(`)p
-Ft(aab)p Fu(')e(and)h(`)30 b Ft(aaaaaab)p Fu(')22 b(will)i(matc)m(h,)j
-(as)d(will)g(a)g(line)g(con)m(taining)630 2198 y(a)31
-b(`)p Ft(b)p Fu(')f(an)m(ywhere)h(in)f(its)g(v)-5 b(alue.)630
-2345 y(Storing)31 b(the)g(regular)g(expression)f(in)h(a)g(shell)g(v)-5
-b(ariable)31 b(is)g(often)g(a)g(useful)f(w)m(a)m(y)i(to)f(a)m(v)m(oid)
-630 2454 y(problems)f(with)g(quoting)h(c)m(haracters)i(that)e(are)g(sp)
-s(ecial)g(to)h(the)f(shell.)41 b(It)31 b(is)g(sometimes)630
-2564 y(di\016cult)24 b(to)h(sp)s(ecify)f(a)h(regular)g(expression)f
-(literally)i(without)f(using)e(quotes,)k(or)d(to)h(k)m(eep)630
-2673 y(trac)m(k)33 b(of)g(the)f(quoting)g(used)g(b)m(y)g(regular)g
-(expressions)g(while)g(pa)m(ying)h(atten)m(tion)h(to)f(the)630
-2783 y(shell's)25 b(quote)g(remo)m(v)-5 b(al.)40 b(Using)25
-b(a)g(shell)g(v)-5 b(ariable)26 b(to)f(store)g(the)g(pattern)g
-(decreases)g(these)630 2892 y(problems.)40 b(F)-8 b(or)31
-b(example,)g(the)g(follo)m(wing)h(is)e(equiv)-5 b(alen)m(t)32
-b(to)f(the)g(ab)s(o)m(v)m(e:)870 3039 y Ft(pattern='[[:space:]]*\(a\))o
-(?b')870 3148 y([[)47 b($line)g(=~)g($pattern)e(]])630
-3294 y Fu(If)28 b(y)m(ou)h(w)m(an)m(t)g(to)g(matc)m(h)h(a)e(c)m
-(haracter)j(that's)e(sp)s(ecial)g(to)g(the)g(regular)f(expression)g
-(gram-)630 3404 y(mar,)g(it)g(has)g(to)g(b)s(e)f(quoted)h(to)g(remo)m
-(v)m(e)h(its)f(sp)s(ecial)g(meaning.)40 b(This)27 b(means)g(that)h(in)g
-(the)630 3513 y(pattern)e(`)p Ft(xxx.txt)p Fu(',)g(the)h(`)p
-Ft(.)p Fu(')f(matc)m(hes)i(an)m(y)e(c)m(haracter)i(in)e(the)h(string)f
-(\(its)h(usual)f(regular)630 3623 y(expression)g(meaning\),)i(but)e(in)
-g(the)h(pattern)f(`)p Ft("xxx.txt")p Fu(')f(it)i(can)g(only)f(matc)m(h)
-i(a)e(literal)630 3733 y(`)p Ft(.)p Fu('.)56 b(Shell)35
-b(programmers)f(should)h(tak)m(e)i(sp)s(ecial)e(care)i(with)e(bac)m
-(kslashes,)i(since)f(bac)m(k-)630 3842 y(slashes)27 b(are)g(used)f(b)s
-(oth)g(b)m(y)h(the)f(shell)h(and)f(regular)h(expressions)g(to)g(remo)m
-(v)m(e)h(the)f(sp)s(ecial)630 3952 y(meaning)h(from)f(the)h(follo)m
-(wing)i(c)m(haracter.)41 b(The)27 b(follo)m(wing)j(t)m(w)m(o)f(sets)f
-(of)g(commands)g(are)630 4061 y Fl(not)40 b Fu(equiv)-5
-b(alen)m(t:)870 4208 y Ft(pattern='\\.')870 4427 y([[)47
-b(.)h(=~)f($pattern)e(]])870 4536 y([[)i(.)h(=~)f(\\.)g(]])870
-4756 y([[)g(.)h(=~)f("$pattern")e(]])870 4865 y([[)i(.)h(=~)f('\\.')f
-(]])630 5011 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 5121 y(second)39 b(t)m(w)m(o)i(the)e(bac)m(kslash)h(will)
-f(b)s(e)g(part)g(of)g(the)h(pattern)f(to)h(b)s(e)e(matc)m(hed.)68
-b(In)39 b(the)630 5230 y(\014rst)31 b(t)m(w)m(o)h(examples,)h(the)e
-(bac)m(kslash)h(remo)m(v)m(es)h(the)f(sp)s(ecial)g(meaning)f(from)g(`)p
-Ft(.)p Fu(',)h(so)g(the)630 5340 y(literal)f(`)p Ft(.)p
-Fu(')e(matc)m(hes.)42 b(If)28 b(the)i(string)f(in)g(the)g(\014rst)g
-(examples)g(w)m(ere)h(an)m(ything)g(other)f(than)p eop
-end
+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(`)p Ft(.)p Fu(',)29 b(sa)m(y)g(`)p Ft(a)p Fu(',)g(the)f(pattern)g(w)m
-(ould)g(not)h(matc)m(h,)h(b)s(ecause)e(the)g(quoted)g(`)p
-Ft(.)p Fu(')h(in)e(the)i(pattern)630 408 y(loses)i(its)g(sp)s(ecial)g
-(meaning)f(of)h(matc)m(hing)g(an)m(y)g(single)g(c)m(haracter.)630
-542 y(Expressions)23 b(ma)m(y)h(b)s(e)e(com)m(bined)i(using)f(the)h
+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
-651 y(order)30 b(of)g(precedence:)630 808 y Ft(\()g Fj(expression)e
-Ft(\))1110 918 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 1027 y(normal)e(precedence)h(of)g(op)s(erators.)630
-1184 y Ft(!)f Fj(expression)1110 1293 y Fu(T)-8 b(rue)30
-b(if)g Fr(expression)g Fu(is)h(false.)630 1450 y Fj(expression1)c
-Ft(&&)j Fj(expression2)1110 1560 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 1716 y Fj(expression1)c Ft(||)j Fj(expression2)1110
-1826 y Fu(T)-8 b(rue)30 b(if)g(either)h Fr(expression1)38
+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
-1983 y(The)24 b Ft(&&)h Fu(and)f Ft(||)g Fu(op)s(erators)h(do)g(not)g
+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 2092 y Fu(is)30 b(su\016cien)m(t)h
+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 2289 y Fk(3.2.5.3)63
-b(Grouping)43 b(Commands)150 2436 y Fu(Bash)30 b(pro)m(vides)g(t)m(w)m
+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 2545
+(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 2655 y(the)f(output)f(of)g(all)h(the)g(commands)f(in)g
+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 2812 y Ft(\(\))870 2945 y(\()47 b Fj(list)g Ft(\))630
-3078 y Fu(Placing)30 b(a)f(list)g(of)g(commands)f(b)s(et)m(w)m(een)i
-(paren)m(theses)e(causes)i(a)f(subshell)e(en)m(vironmen)m(t)630
-3188 y(to)k(b)s(e)e(created)j(\(see)f(Section)g(3.7.3)h([Command)d
-(Execution)i(En)m(vironmen)m(t],)g(page)f(40\),)630 3297
-y(and)d(eac)m(h)h(of)g(the)f(commands)g(in)g Fr(list)j
-Fu(to)f(b)s(e)d(executed)j(in)e(that)h(subshell.)38 b(Since)28
-b(the)f Fr(list)630 3407 y Fu(is)i(executed)g(in)f(a)h(subshell,)g(v)-5
-b(ariable)29 b(assignmen)m(ts)g(do)g(not)g(remain)f(in)g(e\013ect)j
-(after)e(the)630 3516 y(subshell)g(completes.)150 3673
-y Ft({})870 3806 y({)47 b Fj(list)p Ft(;)g(})630 3939
-Fu(Placing)30 b(a)g(list)g(of)g(commands)f(b)s(et)m(w)m(een)h(curly)f
+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
-4049 y(in)d(the)h(curren)m(t)g(shell)f(con)m(text.)42
+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 4159 y(follo)m(wing)32 b Fr(list)h Fu(is)d(required.)275
-4315 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
-4425 y(t)m(w)m(o)c(constructs)e(due)g(to)g(historical)i(reasons.)67
-b(The)39 b(braces)g(are)h Ft(reserved)28 b(words)p Fu(,)40
-b(so)g(they)f(m)m(ust)150 4535 y(b)s(e)d(separated)h(from)f(the)g
-Fr(list)j Fu(b)m(y)e Ft(blank)p Fu(s)e(or)h(other)h(shell)f(metac)m
-(haracters.)62 b(The)36 b(paren)m(theses)h(are)150 4644
-y Ft(operators)p Fu(,)23 b(and)h(are)g(recognized)i(as)e(separate)i
-(tok)m(ens)f(b)m(y)f(the)g(shell)h(ev)m(en)g(if)f(they)g(are)h(not)f
-(separated)150 4754 y(from)30 b(the)g Fr(list)j Fu(b)m(y)e(whitespace.)
-275 4887 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 5083 y Fk(3.2.6)63 b(Copro)s(cesses)150 5230
-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 5340 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)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)150 299
-y(`)p Ft(&)p Fu(')34 b(con)m(trol)h(op)s(erator,)g(with)f(a)g(t)m(w)m
+(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 408 y(copro)s(cess.)275
-550 y(The)c(format)i(for)f(a)h(copro)s(cess)g(is:)390
-691 y Ft(coproc)46 b([)p Fj(NAME)p Ft(])g Fj(command)g
-Ft([)p Fj(redirections)p Ft(])150 833 y Fu(This)39 b(creates)j(a)e
-(copro)s(cess)h(named)f Fr(NAME)p Fu(.)70 b(If)40 b Fr(NAME)46
-b Fu(is)40 b(not)g(supplied,)i(the)e(default)h(name)f(is)150
-942 y Fr(COPR)m(OC)p Fu(.)d Fr(NAME)28 b Fu(m)m(ust)23
-b(not)g(b)s(e)e(supplied)h(if)g Fr(command)k Fu(is)d(a)g(simple)f
-(command)g(\(see)i(Section)f(3.2.2)150 1052 y([Simple)39
-b(Commands],)h(page)g(8\);)k(otherwise,)e(it)d(is)g(in)m(terpreted)h
-(as)f(the)g(\014rst)f(w)m(ord)h(of)g(the)g(simple)150
-1162 y(command.)275 1303 y(When)j(the)i(copro)s(cess)f(is)g(executed,)
-48 b(the)43 b(shell)g(creates)i(an)e(arra)m(y)g(v)-5
-b(ariable)44 b(\(see)g(Section)g(6.7)150 1413 y([Arra)m(ys],)32
-b(page)g(95\))h(named)e Ft(NAME)f Fu(in)h(the)h(con)m(text)h(of)e(the)h
-(executing)g(shell.)44 b(The)31 b(standard)f(output)150
-1522 y(of)39 b Fr(command)j Fu(is)d(connected)g(via)g(a)g(pip)s(e)f(to)
-i(a)f(\014le)f(descriptor)h(in)f(the)h(executing)h(shell,)h(and)d(that)
-150 1632 y(\014le)i(descriptor)h(is)f(assigned)h(to)g
-Ft(NAME)p Fu([0].)70 b(The)40 b(standard)f(input)h(of)g
-Fr(command)k Fu(is)c(connected)h(via)150 1741 y(a)h(pip)s(e)f(to)i(a)f
-(\014le)g(descriptor)g(in)f(the)h(executing)i(shell,)h(and)c(that)h
-(\014le)g(descriptor)g(is)g(assigned)g(to)150 1851 y
-Ft(NAME)p Fu([1].)69 b(This)39 b(pip)s(e)g(is)h(established)g(b)s
-(efore)f(an)m(y)h(redirections)h(sp)s(eci\014ed)e(b)m(y)g(the)h
-(command)g(\(see)150 1961 y(Section)45 b(3.6)h([Redirections],)k(page)
-45 b(35\).)84 b(The)44 b(\014le)h(descriptors)f(can)h(b)s(e)f(utilized)
-h(as)g(argumen)m(ts)150 2070 y(to)d(shell)g(commands)f(and)g
+(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 2180 y(created)27 b(to)g(execute)g
+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 2289
-y(in)30 b(subshells.)275 2431 y(The)d(pro)s(cess)h(ID)h(of)f(the)h
+(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 2540
-y(the)k(v)-5 b(ariable)33 b Ft(NAME)p 850 2540 28 4 v
-39 w Fu(PID.)g(The)f Ft(wait)f Fu(builtin)h(command)g(ma)m(y)h(b)s(e)f
-(used)g(to)h(w)m(ait)h(for)e(the)h(copro)s(cess)150 2650
-y(to)e(terminate.)275 2791 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 2901 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 3107
-y Fk(3.2.7)63 b(GNU)41 b(P)m(arallel)150 3254 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
-3364 y(a)e(to)s(ol)g(to)g(do)f(just)g(that.)275 3505
-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
-3615 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 3724 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 3834 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 3943 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
-4053 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 4194 y(F)-8
-b(or)33 b(a)g(complete)h(description,)g(refer)e(to)i(the)f(GNU)g(P)m
-(arallel)i(do)s(cumen)m(tation.)48 b(A)33 b(few)f(examples)150
-4304 y(should)d(pro)m(vide)i(a)g(brief)e(in)m(tro)s(duction)i(to)g(its)
-g(use.)275 4445 y(F)-8 b(or)37 b(example,)i(it)e(is)f(easy)h(to)g
-(replace)h Ft(xargs)d Fu(to)i(gzip)g(all)g(h)m(tml)g(\014les)f(in)h
-(the)f(curren)m(t)g(directory)150 4555 y(and)30 b(its)h(sub)s
-(directories:)390 4696 y Ft(find)47 b(.)g(-type)f(f)i(-name)e('*.html')
-g(-print)g(|)h(parallel)f(gzip)150 4838 y Fu(If)30 b(y)m(ou)h(need)f
-(to)h(protect)h(sp)s(ecial)f(c)m(haracters)g(suc)m(h)g(as)f(newlines)h
-(in)f(\014le)g(names,)h(use)f(\014nd's)f Ft(-print0)150
-4948 y Fu(option)i(and)f(parallel's)h Ft(-0)f Fu(option.)275
-5089 y(Y)-8 b(ou)34 b(can)g(use)f(P)m(arallel)j(to)e(mo)m(v)m(e)h
-(\014les)f(from)f(the)h(curren)m(t)f(directory)h(when)f(the)h(n)m(um)m
-(b)s(er)e(of)i(\014les)150 5199 y(is)c(to)s(o)i(large)f(to)g(pro)s
-(cess)f(with)g(one)h Ft(mv)f Fu(in)m(v)m(o)s(cation:)390
-5340 y Ft(printf)46 b('\045s\\n')g(*)i(|)f(parallel)f(mv)h({})g
-(destdir)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)275 299
-y(As)28 b(y)m(ou)h(can)g(see,)g(the)g Fi({})g Fu(is)g(replaced)g(with)f
-(eac)m(h)i(line)f(read)f(from)g(standard)g(input.)39
-b(While)29 b(using)150 408 y Ft(ls)34 b Fu(will)i(w)m(ork)f(in)g(most)g
-(instances,)i(it)f(is)f(not)g(su\016cien)m(t)h(to)g(deal)f(with)g(all)h
-(\014lenames.)55 b Ft(printf)33 b Fu(is)j(a)150 518 y(shell)31
-b(builtin,)f(and)g(therefore)h(is)g(not)g(sub)5 b(ject)30
-b(to)h(the)g(k)m(ernel's)g(limit)g(on)g(the)g(n)m(um)m(b)s(er)e(of)i
-(argumen)m(ts)150 628 y(to)37 b(a)f(program,)h(so)g(y)m(ou)f(can)g(use)
-g(`)p Ft(*)p Fu(')g(\(but)f(see)i(b)s(elo)m(w)f(ab)s(out)g(the)g
-Ft(dotglob)e Fu(shell)i(option\).)58 b(If)36 b(y)m(ou)150
-737 y(need)30 b(to)h(accommo)s(date)h(sp)s(ecial)f(c)m(haracters)h(in)e
-(\014lenames,)h(y)m(ou)g(can)f(use)390 877 y Ft(printf)46
-b('\045s\\0')g(*)i(|)f(parallel)f(-0)h(mv)g({})g(destdir)150
-1017 y Fu(as)31 b(alluded)f(to)h(ab)s(o)m(v)m(e.)275
-1157 y(This)e(will)i(run)e(as)h(man)m(y)h Ft(mv)e Fu(commands)h(as)h
-(there)f(are)h(\014les)f(in)h(the)f(curren)m(t)g(directory)-8
-b(.)42 b(Y)-8 b(ou)31 b(can)150 1267 y(em)m(ulate)h(a)f(parallel)g
-Ft(xargs)e Fu(b)m(y)h(adding)g(the)h Ft(-X)f Fu(option:)390
-1407 y Ft(printf)46 b('\045s\\0')g(*)i(|)f(parallel)f(-0)h(-X)g(mv)g
-({})g(destdir)275 1547 y Fu(\(Y)-8 b(ou)31 b(ma)m(y)g(ha)m(v)m(e)g(to)g
-(mo)s(dify)f(the)h(pattern)f(if)g(y)m(ou)h(ha)m(v)m(e)h(the)e
-Ft(dotglob)f Fu(option)h(enabled.\))275 1687 y(GNU)h(P)m(arallel)i(can)
-e(replace)h(certain)g(common)g(idioms)f(that)g(op)s(erate)h(on)f(lines)
-g(read)g(from)f(a)i(\014le)150 1797 y(\(in)e(this)h(case,)g
-(\014lenames)g(listed)g(one)f(p)s(er)g(line\):)390 1937
-y Ft(while)46 b(IFS=)h(read)g(-r)g(x;)g(do)390 2046 y(do-something1)d
-("$x")j("config-$x")390 2156 y(do-something2)d(<)k("$x")390
-2265 y(done)f(<)g(file)g(|)g(process-output)150 2405
-y Fu(with)30 b(a)h(more)f(compact)i(syn)m(tax)f(reminiscen)m(t)g(of)g
-(lam)m(b)s(das:)390 2545 y Ft(cat)47 b(list)g(|)g(parallel)f
-("do-something1)d({})48 b(config-{})d(;)i(do-something2)e(<)i({}")g(|)
-915 2655 y(process-output)275 2795 y Fu(P)m(arallel)31
-b(pro)m(vides)e(a)h(built-in)g(mec)m(hanism)g(to)g(remo)m(v)m(e)h
-(\014lename)e(extensions,)i(whic)m(h)e(lends)g(itself)150
-2905 y(to)i(batc)m(h)g(\014le)g(transformations)f(or)g(renaming:)390
-3045 y Ft(ls)47 b(*.gz)g(|)g(parallel)f(-j+0)g("zcat)h({})g(|)g(bzip2)g
-(>{.}.bz2)e(&&)j(rm)f({}")150 3185 y Fu(This)28 b(will)i(recompress)e
-(all)i(\014les)f(in)g(the)g(curren)m(t)g(directory)g(with)g(names)g
-(ending)f(in)h(.gz)h(using)f(bzip2,)150 3294 y(running)37
-b(one)i(job)f(p)s(er)f(CPU)h(\(-j)p Ft(+)p Fu(0\))i(in)e(parallel.)66
-b(\(W)-8 b(e)40 b(use)e Ft(ls)g Fu(for)h(brevit)m(y)g(here;)j(using)c
-Ft(find)g Fu(as)150 3404 y(ab)s(o)m(v)m(e)e(is)g(more)f(robust)f(in)h
-(the)h(face)g(of)f(\014lenames)h(con)m(taining)g(unexp)s(ected)f(c)m
-(haracters.\))57 b(P)m(arallel)150 3513 y(can)31 b(tak)m(e)h(argumen)m
-(ts)e(from)g(the)h(command)f(line;)h(the)f(ab)s(o)m(v)m(e)i(can)f(also)
-g(b)s(e)f(written)g(as)390 3654 y Ft(parallel)46 b("zcat)g({})h(|)h
-(bzip2)e(>{.}.bz2)f(&&)j(rm)f({}")g(:::)g(*.gz)275 3794
-y Fu(If)24 b(a)i(command)f(generates)h(output,)g(y)m(ou)g(ma)m(y)f(w)m
-(an)m(t)h(to)g(preserv)m(e)g(the)f(input)f(order)h(in)g(the)g(output.)
-150 3903 y(F)-8 b(or)31 b(instance,)g(the)g(follo)m(wing)h(command)390
-4043 y Ft({)581 4153 y(echo)47 b(foss.org.my)d(;)581
-4262 y(echo)j(debian.org)e(;)581 4372 y(echo)i(freenetproject.org)42
-b(;)390 4482 y(})47 b(|)h(parallel)d(traceroute)150 4622
-y Fu(will)31 b(displa)m(y)f(as)h(output)f(the)g(traceroute)i(in)m(v)m
-(o)s(cation)h(that)e(\014nishes)e(\014rst.)40 b(Adding)30
-b(the)g Ft(-k)g Fu(option)390 4762 y Ft({)581 4871 y(echo)47
-b(foss.org.my)d(;)581 4981 y(echo)j(debian.org)e(;)581
-5090 y(echo)i(freenetproject.org)42 b(;)390 5200 y(})47
-b(|)h(parallel)d(-k)j(traceroute)150 5340 y Fu(will)31
-b(ensure)e(that)i(the)g(output)f(of)g Ft(traceroute)e(foss.org.my)f
-Fu(is)k(displa)m(y)m(ed)g(\014rst.)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(Finally)-8 b(,)31 b(P)m(arallel)h(can)e(b)s(e)f(used)g(to)i(run)d(a)i
-(sequence)h(of)f(shell)g(commands)f(in)h(parallel,)h(similar)f(to)150
-408 y(`)p Ft(cat)g(file)f(|)h(bash)p Fu('.)53 b(It)35
-b(is)g(not)g(uncommon)f(to)i(tak)m(e)g(a)f(list)h(of)f(\014lenames,)h
-(create)g(a)g(series)f(of)g(shell)150 518 y(commands)24
-b(to)h(op)s(erate)h(on)e(them,)i(and)e(feed)g(that)h(list)h(of)e
-(commands)g(to)i(a)f(shell.)39 b(P)m(arallel)26 b(can)f(sp)s(eed)150
-628 y(this)30 b(up.)40 b(Assuming)30 b(that)h Ft(file)e
-Fu(con)m(tains)i(a)g(list)g(of)g(shell)f(commands,)h(one)f(p)s(er)g
-(line,)390 772 y Ft(parallel)46 b(-j)h(10)g(<)g(file)150
-917 y Fu(will)37 b(ev)-5 b(aluate)38 b(the)f(commands)f(using)g(the)h
-(shell)g(\(since)g(no)f(explicit)i(command)e(is)h(supplied)e(as)i(an)
-150 1027 y(argumen)m(t\),)31 b(in)f(blo)s(c)m(ks)h(of)g(ten)f(shell)h
-(jobs)f(at)h(a)g(time.)150 1283 y Fs(3.3)68 b(Shell)45
-b(F)-11 b(unctions)150 1442 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 1552 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
-1661 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
-1771 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 1881 y(pro)s(cess)30 b(is)g(created)i(to)f(in)m
-(terpret)g(them.)275 2025 y(F)-8 b(unctions)30 b(are)h(declared)g
-(using)f(this)g(syn)m(tax:)390 2170 y Fj(fname)46 b Ft(\(\))i
-Fj(compound-command)43 b Ft([)k Fj(redirections)e Ft(])275
-2315 y Fu(or)390 2460 y Ft(function)h Fj(fname)g Ft([\(\)])h
-Fj(compound-command)c Ft([)k Fj(redirections)e Ft(])275
-2604 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 2714 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 2824 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 2933 y(Commands],)30 b(page)h(10\).)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
-3043 y(b)s(e)39 b(an)m(y)h(comp)s(ound)e(command)i(listed)g(ab)s(o)m(v)
-m(e,)j(with)d(one)g(exception:)60 b(If)39 b(the)h Ft(function)e
-Fu(reserv)m(ed)150 3152 y(w)m(ord)g(is)g(used,)h(but)f(the)g(paren)m
-(theses)h(are)f(not)h(supplied,)g(the)f(braces)g(are)h(required.)63
-b Fr(comp)s(ound-)150 3262 y(command)37 b Fu(is)d(executed)g(whenev)m
-(er)f Fr(fname)39 b Fu(is)34 b(sp)s(eci\014ed)e(as)i(the)g(name)g(of)f
-(a)h(command.)50 b(When)34 b(the)150 3371 y(shell)e(is)f(in)g
-Fm(posix)f Fu(mo)s(de)h(\(see)i(Section)f(6.11)h([Bash)e(POSIX)g(Mo)s
-(de],)h(page)g(101\),)h Fr(fname)k Fu(m)m(ust)31 b(b)s(e)g(a)150
-3481 y(v)-5 b(alid)37 b(shell)f Fr(name)42 b Fu(and)36
-b(ma)m(y)h(not)f(b)s(e)g(the)g(same)h(as)g(one)f(of)h(the)g(sp)s(ecial)
-g(builtins)e(\(see)j(Section)f(4.4)150 3591 y([Sp)s(ecial)e(Builtins],)
-h(page)e(72\).)54 b(In)33 b(default)h(mo)s(de,)h(a)g(function)f(name)g
-(can)g(b)s(e)g(an)m(y)g(unquoted)g(shell)150 3700 y(w)m(ord)g(that)h
-(do)s(es)e(not)i(con)m(tain)g(`)p Ft($)p Fu('.)53 b(An)m(y)34
-b(redirections)h(\(see)g(Section)g(3.6)g([Redirections],)i(page)e(35\))
-150 3810 y(asso)s(ciated)30 b(with)e(the)h(shell)f(function)g(are)h(p)s
-(erformed)e(when)h(the)g(function)g(is)h(executed.)41
-b(A)28 b(function)150 3919 y(de\014nition)g(ma)m(y)h(b)s(e)f(deleted)h
-(using)f(the)h Ft(-f)e Fu(option)i(to)g(the)g Ft(unset)e
-Fu(builtin)h(\(see)h(Section)g(4.1)h([Bourne)150 4029
-y(Shell)g(Builtins],)h(page)h(44\).)275 4174 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
-4283 y(function)k(with)f(the)i(same)f(name)g(already)h(exists.)46
+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
-4393 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 4538 y(Note)22 b(that)f(for)f
+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 4647 y(the)38 b(b)s(o)s(dy)d(of)j
+(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)150
-4757 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 4866 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 4976 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 5121 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 5230 y(rameters)42 b(during)e(its)i
+(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(21\).)75 b(The)150 5340 y(sp)s(ecial)37
+(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)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)150 299
-y(re\015ect)36 b(the)f(c)m(hange.)56 b(Sp)s(ecial)35
+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 408
+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
-540 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 650 y(its)35 b(caller)i(with)d(these)i(exceptions:)50
+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 759 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 869 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
-978 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 1088 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(44,)i(for)c(the)i(description)f(of)150 1198 y(the)c
-Ft(trap)e Fu(builtin.)275 1329 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
-1439 y(function)24 b(nesting)h(lev)m(el.)40 b(F)-8 b(unction)25
+(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 1548 y(to)31 b(ab)s(ort.)275
-1680 y(If)37 b(the)g(builtin)g(command)h Ft(return)d
+(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 1789 y(execution)25 b(resumes)e(with)h(the)g(next)g(command)f
+(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 1899 y(with)36 b(the)h Ft(RETURN)d Fu(trap)i(is)h(executed)
+(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 2008 y(the)h(v)-5 b(alues)38 b(of)f(the)g(p)s
+(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 2118 y(v)-5
+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 2228 y(that)j(is)g(the)f(function's)h(return)e
+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 2337 y(of)h(the)f(last)h(command)f(executed)i(b)s
-(efore)e(the)g Ft(return)p Fu(.)275 2469 y(V)-8 b(ariables)31
-b(lo)s(cal)g(to)f(the)g(function)f(ma)m(y)i(b)s(e)e(declared)h(with)f
-(the)h Ft(local)f Fu(builtin.)40 b(These)29 b(v)-5 b(ariables)150
-2578 y(are)25 b(visible)h(only)f(to)g(the)g(function)g(and)f(the)i
-(commands)e(it)i(in)m(v)m(ok)m(es.)40 b(This)24 b(is)h(particularly)h
-(imp)s(ortan)m(t)150 2688 y(when)j(a)i(shell)g(function)f(calls)h
-(other)g(functions.)275 2819 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
-2929 y(F)-8 b(or)41 b(instance,)j(a)d(lo)s(cal)h(v)-5
+(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 3039 y(name:)59 b(references)40
+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
-3148 y(unmo)s(di\014ed.)39 b(When)30 b(the)g(function)g(returns,)g(the)
+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
-3280 y(The)f(shell)h(uses)g Fr(dynamic)g(scoping)39 b
+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 3389 y(dynamic)31
+(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
-3499 y(calls)37 b(that)g(caused)g(execution)g(to)g(reac)m(h)g(the)g
+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 3608 y(function)24
+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 3718 y Fu(scop)s(e)41 b(or)g(another)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
-3828 y Ft(")p Fu(shado)m(ws)p Ft(")p Fu(,)30 b(and)g(the)g(v)-5
-b(alue)31 b(that)g(is)f(restored)h(when)e(the)i(function)f(returns.)275
-3959 y(F)-8 b(or)41 b(example,)j(if)d(a)g(v)-5 b(ariable)41
-b Fr(v)-5 b(ar)48 b Fu(is)40 b(declared)h(as)g(lo)s(cal)h(in)f
-(function)f Fr(func1)p Fu(,)j(and)d Fr(func1)48 b Fu(calls)150
-4069 y(another)33 b(function)g Fr(func2)p Fu(,)g(references)g(to)h
-Fr(v)-5 b(ar)39 b Fu(made)33 b(from)f(within)h Fr(func2)39
-b Fu(will)34 b(resolv)m(e)g(to)g(the)f(lo)s(cal)150 4178
-y(v)-5 b(ariable)31 b Fr(v)-5 b(ar)37 b Fu(from)30 b
-Fr(func1)p Fu(,)g(shado)m(wing)h(an)m(y)f(global)i(v)-5
-b(ariable)31 b(named)f Fr(v)-5 b(ar)p Fu(.)275 4310 y(The)29
-b(follo)m(wing)j(script)f(demonstrates)f(this)h(b)s(eha)m(vior.)40
-b(When)31 b(executed,)g(the)g(script)f(displa)m(ys)390
-4441 y Ft(In)47 b(func2,)f(var)h(=)h(func1)e(local)390
-4573 y(func1\(\))390 4682 y({)581 4792 y(local)g(var='func1)f(local')
-581 4902 y(func2)390 5011 y(})390 5230 y(func2\(\))390
-5340 y({)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)581 299
-y Ft(echo)47 b("In)f(func2,)h(var)f(=)i($var")390 408
-y(})390 628 y(var=global)390 737 y(func1)275 878 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 987 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 1097 y(an)m(y)j(calling)h(scop)s(e)f(as)g
-(describ)s(ed)f(ab)s(o)m(v)m(e.)61 b(If)36 b(a)h(v)-5
-b(ariable)38 b(at)f(the)g(curren)m(t)g(lo)s(cal)h(scop)s(e)e(is)h
-(unset,)h(it)150 1207 y(will)27 b(remain)h(so)f(un)m(til)g(it)h(is)f
-(reset)h(in)f(that)g(scop)s(e)h(or)f(un)m(til)g(the)h(function)e
-(returns.)39 b(Once)27 b(the)g(function)150 1316 y(returns,)34
-b(an)m(y)h(instance)g(of)f(the)g(v)-5 b(ariable)35 b(at)g(a)g(previous)
-e(scop)s(e)i(will)f(b)s(ecome)h(visible.)52 b(If)34 b(the)g(unset)150
-1426 y(acts)e(on)f(a)h(v)-5 b(ariable)32 b(at)g(a)f(previous)g(scop)s
-(e,)h(an)m(y)f(instance)h(of)f(a)h(v)-5 b(ariable)32
-b(with)f(that)h(name)f(that)h(had)150 1535 y(b)s(een)e(shado)m(w)m(ed)g
-(will)h(b)s(ecome)g(visible.)275 1676 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 1786 y
-Fu(\()p Ft(typeset)p Fu(\))35 b(builtin)g(command)h(\(see)h(Section)g
-(4.2)g([Bash)f(Builtins],)i(page)f(51\).)59 b(The)35
-b Ft(-F)h Fu(option)g(to)150 1895 y Ft(declare)e Fu(or)i
-Ft(typeset)e Fu(will)i(list)h(the)f(function)g(names)g(only)g(\(and)g
-(optionally)h(the)f(source)g(\014le)h(and)150 2005 y(line)c(n)m(um)m(b)
-s(er,)g(if)f(the)h Ft(extdebug)e Fu(shell)i(option)g(is)g(enabled\).)49
-b(F)-8 b(unctions)33 b(ma)m(y)h(b)s(e)e(exp)s(orted)g(so)h(that)150
-2114 y(subshells)j(automatically)k(ha)m(v)m(e)f(them)e(de\014ned)f
-(with)h(the)h Ft(-f)e Fu(option)i(to)g(the)g Ft(export)d
-Fu(builtin)i(\(see)150 2224 y(Section)31 b(4.1)h([Bourne)e(Shell)g
-(Builtins],)h(page)h(44\).)275 2365 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 2474 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 2584
-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 2834 y Fs(3.4)68 b(Shell)45 b(P)l(arameters)150
-2993 y Fu(A)23 b Fr(parameter)31 b Fu(is)23 b(an)g(en)m(tit)m(y)i(that)
-f(stores)g(v)-5 b(alues.)39 b(It)23 b(can)h(b)s(e)f(a)g
-Ft(name)p Fu(,)h(a)g(n)m(um)m(b)s(er,)f(or)h(one)f(of)h(the)f(sp)s
-(ecial)150 3103 y(c)m(haracters)i(listed)e(b)s(elo)m(w.)39
-b(A)23 b Fr(v)-5 b(ariable)30 b Fu(is)23 b(a)g(parameter)h(denoted)f(b)
-m(y)h(a)f Ft(name)p Fu(.)37 b(A)24 b(v)-5 b(ariable)24
-b(has)f(a)g Fr(v)-5 b(alue)150 3212 y Fu(and)33 b(zero)i(or)f(more)g
-Fr(attributes)p Fu(.)52 b(A)m(ttributes)35 b(are)f(assigned)g(using)g
-(the)g Ft(declare)e Fu(builtin)h(command)150 3322 y(\(see)e(the)g
-(description)f(of)h(the)f Ft(declare)f Fu(builtin)h(in)g(Section)h(4.2)
-g([Bash)g(Builtins],)g(page)g(51\).)275 3462 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 3572 y(a)31 b(v)-5
-b(ariable)31 b(is)f(set,)i(it)e(ma)m(y)h(b)s(e)f(unset)g(only)h(b)m(y)f
-(using)g(the)g Ft(unset)f Fu(builtin)h(command.)275 3713
-y(A)g(v)-5 b(ariable)31 b(ma)m(y)g(b)s(e)f(assigned)g(to)i(b)m(y)e(a)h
-(statemen)m(t)h(of)e(the)h(form)390 3853 y Fj(name)p
-Ft(=[)p Fj(value)p Ft(])150 3994 y Fu(If)j Fr(v)-5 b(alue)40
-b Fu(is)35 b(not)g(giv)m(en,)h(the)f(v)-5 b(ariable)35
-b(is)g(assigned)g(the)f(n)m(ull)h(string.)53 b(All)35
-b Fr(v)-5 b(alue)5 b Fu(s)35 b(undergo)f(tilde)h(ex-)150
-4103 y(pansion,)h(parameter)f(and)f(v)-5 b(ariable)36
-b(expansion,)f(command)g(substitution,)h(arithmetic)g(expansion,)150
-4213 y(and)k(quote)h(remo)m(v)-5 b(al)42 b(\(detailed)h(b)s(elo)m(w\).)
-72 b(If)40 b(the)h(v)-5 b(ariable)41 b(has)g(its)g Ft(integer)e
-Fu(attribute)i(set,)j(then)150 4323 y Fr(v)-5 b(alue)38
-b Fu(is)33 b(ev)-5 b(aluated)34 b(as)f(an)g(arithmetic)h(expression)f
-(ev)m(en)h(if)e(the)h Ft($\(\(...)o(\)\))f Fu(expansion)h(is)g(not)g
-(used)150 4432 y(\(see)e(Section)g(3.5.5)i([Arithmetic)e(Expansion],)f
-(page)h(31\).)42 b(W)-8 b(ord)31 b(splitting)g(is)g(not)f(p)s
-(erformed,)f(with)150 4542 y(the)35 b(exception)h(of)f
-Ft("$@")f Fu(as)h(explained)g(b)s(elo)m(w.)54 b(Filename)36
-b(expansion)f(is)g(not)g(p)s(erformed.)53 b(Assign-)150
-4651 y(men)m(t)33 b(statemen)m(ts)h(ma)m(y)f(also)g(app)s(ear)f(as)g
-(argumen)m(ts)h(to)g(the)g Ft(alias)p Fu(,)e Ft(declare)p
-Fu(,)g Ft(typeset)p Fu(,)g Ft(export)p Fu(,)150 4761
-y Ft(readonly)p Fu(,)38 b(and)g Ft(local)f Fu(builtin)h(commands)g(\()p
-Fr(declaration)j Fu(commands\).)64 b(When)39 b(in)f Fm(posix)f
-Fu(mo)s(de)150 4871 y(\(see)29 b(Section)h(6.11)g([Bash)f(POSIX)e(Mo)s
-(de],)j(page)f(101\),)h(these)f(builtins)f(ma)m(y)h(app)s(ear)f(in)g(a)
-h(command)150 4980 y(after)34 b(one)g(or)f(more)h(instances)g(of)f(the)
-h Ft(command)d Fu(builtin)i(and)g(retain)h(these)g(assignmen)m(t)g
-(statemen)m(t)150 5090 y(prop)s(erties.)275 5230 y(In)29
-b(the)h(con)m(text)i(where)d(an)h(assignmen)m(t)h(statemen)m(t)h(is)e
-(assigning)g(a)h(v)-5 b(alue)30 b(to)h(a)f(shell)g(v)-5
-b(ariable)31 b(or)150 5340 y(arra)m(y)24 b(index)f(\(see)h(Section)g
-(6.7)g([Arra)m(ys],)i(page)e(95\),)i(the)e(`)p Ft(+=)p
-Fu(')f(op)s(erator)g(can)h(b)s(e)f(used)f(to)i(app)s(end)e(to)i(or)p
+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)150 299
-y(add)28 b(to)i(the)f(v)-5 b(ariable's)30 b(previous)e(v)-5
-b(alue.)41 b(This)28 b(includes)g(argumen)m(ts)i(to)f(builtin)g
-(commands)f(suc)m(h)h(as)150 408 y Ft(declare)e Fu(that)i(accept)h
-(assignmen)m(t)f(statemen)m(ts)h(\()p Fr(declaration)h
-Fu(commands\).)40 b(When)28 b(`)p Ft(+=)p Fu(')h(is)f(applied)150
-518 y(to)d(a)f(v)-5 b(ariable)24 b(for)g(whic)m(h)f(the)h
-Fr(in)m(teger)32 b Fu(attribute)24 b(has)g(b)s(een)f(set,)j
-Fr(v)-5 b(alue)29 b Fu(is)24 b(ev)-5 b(aluated)25 b(as)f(an)g
-(arithmetic)150 628 y(expression)30 b(and)f(added)g(to)i(the)f(v)-5
-b(ariable's)30 b(curren)m(t)g(v)-5 b(alue,)31 b(whic)m(h)e(is)h(also)h
-(ev)-5 b(aluated.)42 b(When)29 b(`)p Ft(+=)p Fu(')h(is)150
-737 y(applied)25 b(to)h(an)f(arra)m(y)h(v)-5 b(ariable)26
-b(using)f(comp)s(ound)f(assignmen)m(t)i(\(see)g(Section)g(6.7)g([Arra)m
-(ys],)h(page)f(95\),)150 847 y(the)33 b(v)-5 b(ariable's)33
-b(v)-5 b(alue)33 b(is)g(not)g(unset)f(\(as)h(it)g(is)g(when)e(using)i
-(`)p Ft(=)p Fu('\),)g(and)f(new)g(v)-5 b(alues)33 b(are)g(app)s(ended)e
-(to)150 956 y(the)26 b(arra)m(y)h(b)s(eginning)e(at)i(one)f(greater)h
-(than)f(the)g(arra)m(y's)h(maxim)m(um)f(index)f(\(for)i(indexed)e(arra)
-m(ys\),)j(or)150 1066 y(added)c(as)i(additional)g(k)m(ey-v)-5
-b(alue)26 b(pairs)f(in)g(an)g(asso)s(ciativ)m(e)j(arra)m(y)-8
-b(.)40 b(When)24 b(applied)h(to)h(a)g(string-v)-5 b(alued)150
-1176 y(v)g(ariable,)31 b Fr(v)-5 b(alue)36 b Fu(is)31
-b(expanded)e(and)h(app)s(ended)f(to)i(the)f(v)-5 b(ariable's)32
-b(v)-5 b(alue.)275 1319 y(A)28 b(v)-5 b(ariable)29 b(can)f(b)s(e)f
-(assigned)i(the)f Fr(nameref)45 b Fu(attribute)29 b(using)f(the)g
-Ft(-n)f Fu(option)i(to)g(the)f Ft(declare)e Fu(or)150
-1428 y Ft(local)f Fu(builtin)h(commands)g(\(see)i(Section)f(4.2)h
-([Bash)f(Builtins],)h(page)f(51\))h(to)f(create)i(a)e
-Fr(nameref)p Fu(,)g(or)g(a)150 1538 y(reference)f(to)g(another)f(v)-5
+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
-1647 y(the)31 b(nameref)g(v)-5 b(ariable)32 b(is)f(referenced,)g
+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 1757 y(than)c(using)g(or)h(c)m(hanging)g(the)g(nameref)f
+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 1867 y(the)31 b(v)-5 b(ariable)31
+(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
-1976 y(shell)h(functions)g(to)h(refer)f(to)h(a)f(v)-5
+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 2086 y(F)-8 b(or)31 b(instance,)g(if)g(a)g(v)-5
+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 2229 y Ft(declare)46
-b(-n)h(ref=$1)150 2372 y Fu(inside)31 b(the)h(function)f(creates)i(a)g
-(nameref)e(v)-5 b(ariable)32 b Fr(ref)49 b Fu(whose)32
-b(v)-5 b(alue)32 b(is)g(the)f(v)-5 b(ariable)33 b(name)e(passed)150
-2481 y(as)e(the)h(\014rst)e(argumen)m(t.)41 b(References)30
-b(and)e(assignmen)m(ts)i(to)g Fr(ref)p Fu(,)f(and)g(c)m(hanges)h(to)g
-(its)f(attributes,)i(are)150 2591 y(treated)g(as)f(references,)g
+(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 2701 y(w)m(as)h(passed)f(as)g
-Ft($1)p Fu(.)275 2844 y(If)h(the)g(con)m(trol)i(v)-5
+-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
-2953 y(a)h(list)h(of)f(shell)g(v)-5 b(ariables,)34 b(and)e(a)i(name)f
+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 3063 y(in)c(turn,)g(when)g(the)h(lo)s(op)g(is)g
+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 3172 y(Ho)m(w)m(ev)m(er,)39
+(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
-3282 y(Namerefs)36 b(can)f(b)s(e)g(unset)g(using)g(the)h
+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 3392 y(Shell)43 b(Builtins],)j(page)e(44\).)79
+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 3501 y(v)-5 b(ariable)31 b(as)g(an)f(argumen)m
+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.)150 3709 y Fk(3.4.1)63
-b(P)m(ositional)41 b(P)m(arameters)150 3856 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
-3965 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 4075 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 4185 y(referenced)34
+-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 4294 y(not)j(b)s(e)f(assigned)h(to)g(with)f
+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
-4404 y(set)k(and)f(unset)f(them)i(\(see)g(Chapter)f(4)g([Shell)h
-(Builtin)g(Commands],)h(page)f(44\).)68 b(The)39 b(p)s(ositional)150
-4513 y(parameters)44 b(are)g(temp)s(orarily)g(replaced)h(when)e(a)h
+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
-4623 y([Shell)30 b(F)-8 b(unctions],)32 b(page)f(18\).)275
-4766 y(When)c(a)i(p)s(ositional)g(parameter)g(consisting)f(of)h(more)f
+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
-4876 y(b)s(e)h(enclosed)h(in)f(braces.)150 5083 y Fk(3.4.2)63
-b(Sp)s(ecial)41 b(P)m(arameters)150 5230 y Fu(The)d(shell)g(treats)h
+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
-5340 y(assignmen)m(t)31 b(to)g(them)g(is)f(not)h(allo)m(w)m(ed.)p
-eop end
-%%Page: 22 28
-TeXDict begin 22 27 bop 150 -116 a Fu(Chapter)30 b(3:)41
-b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(22)150 299
-y Ft(*)432 b Fu(\($*\))38 b(Expands)d(to)i(the)f(p)s(ositional)h
+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
-408 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 518 y(separate)23
+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
-628 y(ther)k(w)m(ord)g(splitting)i(and)e(\014lename)g(expansion.)40
+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
-737 y(double)37 b(quotes,)k(it)d(expands)f(to)h(a)g(single)h(w)m(ord)e
+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
-847 y(separated)g(b)m(y)g(the)f(\014rst)g(c)m(haracter)i(of)f(the)g
+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 956 y(equiv)-5 b(alen)m(t)39
+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 1066 y Ft(IFS)29 b Fu(v)-5 b(ariable.)41
+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 1176
+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 1334 y Ft(@)432 b Fu(\($@\))43
+(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 1444 y(where)35 b(w)m(ord)h
+(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 1553 y(a)d(separate)h(w)m(ord;)g(if)f
+(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 1663 y(splitting.)60 b(In)36
+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 1773 y(a)c(single)h(w)m(ord)e(with)h(eac)m(h)
+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 1882 y(expansion)i(o)s(ccurs)h(within)e(double)i
+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
-1992 y(parameter)23 b(expands)f(to)i(a)f(separate)h(w)m(ord.)37
+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 2101 y(...)o Fu(.)39 b(If)26
+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 2211 y(\014rst)31 b(parameter)h(is)g
+(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 2321 y(expansion)25 b(of)g(the)h(last)g
+(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 2430 y(When)i(there)g(are)g(no)g(p)s
+(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 2540 y(they)j(are)f(remo)m(v)m
-(ed\).)150 2698 y Ft(#)432 b Fu(\($#\))31 b(Expands)e(to)i(the)g(n)m
+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
-2857 y Ft(?)432 b Fu(\($?\))88 b(Expands)45 b(to)h(the)g(exit)h(status)
+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
-2967 y(pip)s(eline.)150 3125 y Ft(-)432 b Fu(\($-,)24
+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
-3235 y(b)m(y)38 b(the)h Ft(set)f Fu(builtin)g(command,)j(or)d(those)i
+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 3344 y Fu(option\).)150 3503 y Ft($)432 b Fu(\($$\))31
-b(Expands)d(to)j(the)e(pro)s(cess)h Fm(id)f Fu(of)h(the)g(shell.)41
-b(In)28 b(a)i Ft(\(\))f Fu(subshell,)h(it)g(expands)e(to)j(the)630
-3613 y(pro)s(cess)f Fm(id)g Fu(of)h(the)g(in)m(v)m(oking)g(shell,)g
-(not)g(the)f(subshell.)150 3771 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
-3881 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
-3990 y(\(see)31 b(Section)h(7.2)f([Job)f(Con)m(trol)h(Builtins],)g
-(page)h(108\).)150 4149 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 4259 y(initialization.)d(If)27
+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 4368 y(Scripts],)g(page)g(42\),)h
+(\(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 4478 y
+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(86\),)i(then)d Ft($0)g Fu(is)h(set)g(to)h(the)f(\014rst)630
-4587 y(argumen)m(t)g(after)g(the)g(string)g(to)g(b)s(e)f(executed,)i
+(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
-4697 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 4937
-y Fs(3.5)68 b(Shell)45 b(Expansions)150 5096 y Fu(Expansion)27
+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 5206 y(sev)m(en)j(kinds)e(of)i(expansion)f(p)s(erformed:)225
-5340 y Fq(\017)60 b Fu(brace)31 b(expansion)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)225 299
-y Fq(\017)60 b Fu(tilde)31 b(expansion)225 436 y Fq(\017)60
+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
-574 y Fq(\017)60 b Fu(command)30 b(substitution)225 711
-y Fq(\017)60 b Fu(arithmetic)32 b(expansion)225 849 y
-Fq(\017)60 b Fu(w)m(ord)30 b(splitting)225 986 y Fq(\017)60
-b Fu(\014lename)31 b(expansion)275 1155 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 1264 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 1374 y(w)m(ord)d(splitting;)h
-(and)f(\014lename)h(expansion.)275 1515 y(On)42 b(systems)h(that)h(can)
-g(supp)s(ort)e(it,)47 b(there)d(is)f(an)h(additional)g(expansion)f(a)m
-(v)-5 b(ailable:)69 b Fr(pro)s(cess)150 1624 y(substitution)p
-Fu(.)50 b(This)33 b(is)h(p)s(erformed)e(at)j(the)f(same)g(time)g(as)g
-(tilde,)i(parameter,)f(v)-5 b(ariable,)35 b(and)f(arith-)150
-1734 y(metic)d(expansion)g(and)e(command)i(substitution.)275
-1874 y(After)f(these)h(expansions)f(are)g(p)s(erformed,)f(quote)i(c)m
+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
-1984 y(remo)m(v)m(ed)h(unless)f(they)h(ha)m(v)m(e)g(b)s(een)f(quoted)g
+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
-2124 y(Only)31 b(brace)i(expansion,)h(w)m(ord)e(splitting,)i(and)e
+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
-2234 y(of)24 b(w)m(ords)g(of)g(the)h(expansion;)h(other)e(expansions)g
+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 2344 y(exceptions)i(to)f(this)g(are)g(the)g
+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 2453 y(page)31
-b(21\),)h(and)e Ft("${)p Fj(name)p Ft([@]}")d Fu(and)i
+(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(95\).)275 2594 y(After)41 b(all)i(expansions,)h
+(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(35\))h(is)150 2703 y(p)s(erformed.)150
-2908 y Fk(3.5.1)63 b(Brace)40 b(Expansion)150 3055 y
+(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 3165 y(anism)35 b(is)h(similar)f(to)h
+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(33\),)150 3275 y(but)26 b(the)h(\014lenames)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
-3384 y(an)j(optional)h Fr(pream)m(ble)p Fu(,)g(follo)m(w)m(ed)g(b)m(y)f
+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 3494 y(expression)36 b(b)s(et)m(w)m(een)g(a)h(pair)e(of)i
+(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 3603 y(pre\014xed)28
+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
-3713 y(eac)m(h)32 b(resulting)e(string,)h(expanding)e(left)j(to)f(righ)
-m(t.)275 3853 y(Brace)37 b(expansions)f(ma)m(y)h(b)s(e)f(nested.)59
+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 3963 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 4104 y Ft(bash$)46
-b(echo)h(a{d,c,b}e)390 4213 y(ade)g(ace)g(abe)275 4354
+(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 4463 y(or)42 b(single)h(c)m(haracters,)48
-b(and)41 b Fr(incr)p Fu(,)46 b(an)c(optional)i(incremen)m(t,)i(is)c(an)
-h(in)m(teger.)78 b(When)42 b(in)m(tegers)i(are)150 4573
-y(supplied,)f(the)f(expression)f(expands)f(to)i(eac)m(h)h(n)m(um)m(b)s
-(er)d(b)s(et)m(w)m(een)i Fr(x)47 b Fu(and)41 b Fr(y)p
-Fu(,)j(inclusiv)m(e.)75 b(Supplied)150 4682 y(in)m(tegers)33
-b(ma)m(y)e(b)s(e)g(pre\014xed)f(with)h(`)p Ft(0)p Fu(')h(to)g(force)g
-(eac)m(h)g(term)g(to)g(ha)m(v)m(e)g(the)g(same)g(width.)42
-b(When)31 b(either)150 4792 y Fr(x)43 b Fu(or)36 b Fr(y)44
-b Fu(b)s(egins)36 b(with)g(a)h(zero,)i(the)e(shell)g(attempts)g(to)g
-(force)g(all)h(generated)f(terms)g(to)g(con)m(tain)h(the)150
-4902 y(same)e(n)m(um)m(b)s(er)e(of)i(digits,)i(zero-padding)d(where)h
-(necessary)-8 b(.)57 b(When)35 b(c)m(haracters)i(are)f(supplied,)g(the)
-150 5011 y(expression)24 b(expands)g(to)h(eac)m(h)h(c)m(haracter)g
-(lexicographically)h(b)s(et)m(w)m(een)e Fr(x)30 b Fu(and)24
-b Fr(y)p Fu(,)i(inclusiv)m(e,)h(using)d(the)150 5121
-y(default)32 b(C)g(lo)s(cale.)48 b(Note)34 b(that)f(b)s(oth)e
-Fr(x)39 b Fu(and)31 b Fr(y)40 b Fu(m)m(ust)32 b(b)s(e)g(of)g(the)h
-(same)f(t)m(yp)s(e.)47 b(When)32 b(the)g(incremen)m(t)150
-5230 y(is)d(supplied,)g(it)h(is)f(used)f(as)i(the)f(di\013erence)h(b)s
-(et)m(w)m(een)g(eac)m(h)g(term.)41 b(The)29 b(default)g(incremen)m(t)h
-(is)f(1)h(or)f(-1)150 5340 y(as)i(appropriate.)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)275 299
-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
-408 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 518 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 656
-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
-766 y(and)h(at)i(least)g(one)f(unquoted)g(comma)g(or)g(a)h(v)-5
+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 875 y(brace)d(expansion)f(is)g(left)h(unc)m(hanged.)275
-1013 y(A)25 b Fi({)h Fu(or)f(`)p Ft(,)p Fu(')g(ma)m(y)h(b)s(e)f(quoted)
+(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 1123 y(expression.)51
+(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 1232 y(eligible)e(for)e(brace)h(expansion,)f(and)g(inhibits)g
+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 1370 y(This)e(construct)h(is)g(t)m(ypically)i(used)d(as)h
+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 1480 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 1618 y Ft(mkdir)46 b(/usr/local/src/bash/{old,n)o
-(ew,)o(dist)o(,bug)o(s})275 1756 y Fu(or)390 1894 y Ft(chown)g(root)h
+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
-2097 y Fk(3.5.2)63 b(Tilde)41 b(Expansion)150 2243 y
+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 2353 y(unquoted)24 b(slash)g(\(or)h(all)h(c)m
+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 2463 y(If)38
+(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
-2572 y(follo)m(wing)28 b(the)g(tilde)f(are)h(treated)g(as)f(a)g(p)s
+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 2682 y(the)35 b(tilde)g(is)g
+(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 2791 y(directory)e(of)g(the)f(user)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 2901 y(is)d(replaced)h(with)
+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 3039 y(If)g(the)h(tilde-pre\014x)f(is)h(`)p
+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 3149 y(the)31 b(tilde-pre\014x)f(is)g(`)p Ft(~-)p
+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 3287 y(If)f(the)h(c)m(haracters)h(follo)m(wing)h(the)
+(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 3396 y(pre\014xed)22
+(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 3506 y(directory)36 b(stac)m(k,)i(as)e(it)
+(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 3615 y(follo)m(wing)40 b(tilde)f(in)g(the)f(tilde-pre\014x)h(as)g
+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 3725 y(page)c(97\).)57 b(If)35 b(the)g(tilde-pre\014x,)i(sans)
-e(the)h(tilde,)h(consists)f(of)g(a)f(n)m(um)m(b)s(er)f(without)i(a)f
-(leading)h(`)p Ft(+)p Fu(')g(or)150 3834 y(`)p Ft(-)p
-Fu(',)31 b(`)p Ft(+)p Fu(')f(is)h(assumed.)275 3972 y(If)e(the)i(login)
-g(name)g(is)f(in)m(v)-5 b(alid,)31 b(or)g(the)f(tilde)h(expansion)f
-(fails,)i(the)e(w)m(ord)g(is)h(left)g(unc)m(hanged.)275
-4110 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 4220 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 4330 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
-4439 y(assigns)j(the)f(expanded)g(v)-5 b(alue.)275 4577
-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 4742 y Ft(~)432 b Fu(The)30
-b(v)-5 b(alue)31 b(of)f Ft($HOME)150 4905 y(~/foo)240
-b($HOME/foo)150 5068 y(~fred/foo)630 5177 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 5340 y(~+/foo)192 b($PWD/foo)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)150 299
-y Ft(~-/foo)192 b(${OLDPWD-'~-'}/foo)150 471 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 644 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 816 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
-995 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 1105 y(signmen)m(ts)f(\(see)h(Section)g(3.4)g([Shell)f(P)m
-(arameters],)k(page)d(20\))g(when)e(they)h(app)s(ear)f(as)i(argumen)m
-(ts)150 1215 y(to)c(simple)f(commands.)57 b(Bash)36 b(do)s(es)f(not)h
-(do)g(this,)i(except)f(for)e(the)h Fr(declaration)i Fu(commands)d
-(listed)150 1324 y(ab)s(o)m(v)m(e,)d(when)d(in)h Fm(posix)g
-Fu(mo)s(de.)150 1536 y Fk(3.5.3)63 b(Shell)41 b(P)m(arameter)f
-(Expansion)150 1683 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 1793 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 1903 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 2012 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
-2160 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 2269 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 2379 y(command)30 b(substitution,)g(or)h(parameter)g(expansion.)275
-2526 y(The)40 b(basic)i(form)f(of)g(parameter)h(expansion)f(is)h($)p
+(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 2636 y(substituted.)43
+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
-2746 y(P)m(arameters],)e(page)f(20\))h(or)e(an)g(arra)m(y)h(reference)f
-(\(see)i(Section)f(6.7)g([Arra)m(ys],)g(page)g(95\).)42
-b(The)29 b(braces)150 2855 y(are)j(required)g(when)f
+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 2965 y Fr(parameter)37
+(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
-3112 y(If)k(the)h(\014rst)f(c)m(haracter)i(of)f Fr(parameter)42
+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 3222 y Fr(nameref)p
-Fu(,)c(it)f(in)m(tro)s(duces)h(a)f(lev)m(el)i(of)f(indirection.)44
-b(Bash)31 b(uses)g(the)g(v)-5 b(alue)32 b(formed)f(b)m(y)g(expanding)g
-(the)150 3332 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
-3441 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 3551 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
-3660 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 3770 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 3880
-y(direct)e(expansion.)39 b(The)25 b(exceptions)i(to)g(this)f(are)h(the)
-f(expansions)g(of)g($)p Fi({)p Fu(!)p Fr(pre\014x)6 b
-Fu(*)p Fi(})28 b Fu(and)d($)p Fi({)p Fu(!)p Fr(name)5
-b Fu([@])p Fi(})150 3989 y Fu(describ)s(ed)28 b(b)s(elo)m(w.)41
-b(The)28 b(exclamation)j(p)s(oin)m(t)f(m)m(ust)f(immediately)h(follo)m
-(w)g(the)g(left)f(brace)h(in)f(order)f(to)150 4099 y(in)m(tro)s(duce)i
-(indirection.)275 4246 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 4356 y(command)30 b(substitution,)g(and)g
-(arithmetic)i(expansion.)275 4503 y(When)h(not)h(p)s(erforming)e
+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 4613 y(Bash)d(tests)h(for)e(a)i
+(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 4723
+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 4832 y(for)36 b(b)s(oth)g
+(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 4942 y(op)s(erator)31 b(tests)g(only)f(for)g(existence.)150
-5121 y Ft(${)p Fj(parameter)p Ft(:)p Fq(\000)p Fj(word)p
-Ft(})630 5230 y Fu(If)g Fr(parameter)37 b Fu(is)30 b(unset)g(or)h(n)m
+(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 5340 y(the)31 b(v)-5 b(alue)30 b(of)h
-Fr(parameter)37 b Fu(is)31 b(substituted.)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)150 299
-y Ft(${)p Fj(parameter)p Ft(:=)p Fj(word)p Ft(})630 408
-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 518 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 628 y(parameters)h(ma)m(y)g(not)f
-(b)s(e)g(assigned)h(to)g(in)f(this)g(w)m(a)m(y)-8 b(.)150
-786 y Ft(${)p Fj(parameter)p Ft(:?)p Fj(word)p Ft(})630
-896 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 1005 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 1115 y(in)m(teractiv)m(e,)33 b(exits.)42
-b(Otherwise,)30 b(the)h(v)-5 b(alue)31 b(of)f Fr(parameter)38
-b Fu(is)30 b(substituted.)150 1273 y Ft(${)p Fj(parameter)p
-Ft(:+)p Fj(word)p Ft(})630 1383 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 1492 y(of)31 b Fr(w)m(ord)i
-Fu(is)e(substituted.)150 1650 y Ft(${)p Fj(parameter)p
-Ft(:)p Fj(offset)p Ft(})150 1760 y(${)p Fj(parameter)p
-Ft(:)p Fj(offset)p Ft(:)p Fj(lengt)o(h)p Ft(})630 1870
-y Fu(This)f(is)h(referred)f(to)h(as)g(Substring)f(Expansion.)41
-b(It)31 b(expands)f(to)h(up)f(to)h Fr(length)g Fu(c)m(harac-)630
-1979 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 2089 y Fr(parameter)32
-b Fu(is)26 b(`)p Ft(@)p Fu(',)g(an)f(indexed)g(arra)m(y)h(subscripted)e
-(b)m(y)h(`)p Ft(@)p Fu(')g(or)h(`)p Ft(*)p Fu(',)g(or)g(an)f(asso)s
-(ciativ)m(e)j(ar-)630 2198 y(ra)m(y)g(name,)h(the)f(results)g(di\013er)
-g(as)g(describ)s(ed)f(b)s(elo)m(w.)40 b(If)28 b Fr(length)g
-Fu(is)g(omitted,)i(it)f(expands)630 2308 y(to)e(the)g(substring)f(of)g
-(the)h(v)-5 b(alue)27 b(of)g Fr(parameter)33 b Fu(starting)28
-b(at)f(the)g(c)m(haracter)h(sp)s(eci\014ed)e(b)m(y)630
-2418 y Fr(o\013set)37 b Fu(and)d(extending)g(to)h(the)f(end)g(of)g(the)
-g(v)-5 b(alue.)53 b Fr(length)34 b Fu(and)g Fr(o\013set)j
-Fu(are)e(arithmetic)630 2527 y(expressions)30 b(\(see)h(Section)g(6.5)h
-([Shell)e(Arithmetic],)i(page)f(93\).)630 2661 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 2771 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 2880
-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
-2990 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 3099 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 3209
-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
-3319 y(with)j(the)h(`)p Ft(:-)p Fu(')f(expansion.)630
-3453 y(Here)43 b(are)g(some)f(examples)h(illustrating)g(substring)f
-(expansion)g(on)g(parameters)h(and)630 3562 y(subscripted)29
-b(arra)m(ys:)630 3696 y Ft($)47 b(string=01234567890abcdefgh)630
-3806 y($)g(echo)g(${string:7})630 3915 y(7890abcdefgh)630
-4025 y($)g(echo)g(${string:7:0})630 4244 y($)g(echo)g(${string:7:2})630
-4354 y(78)630 4463 y($)g(echo)g(${string:7:-2})630 4573
-y(7890abcdef)630 4682 y($)g(echo)g(${string:)e(-7})630
-4792 y(bcdefgh)630 4902 y($)i(echo)g(${string:)e(-7:0})630
-5121 y($)i(echo)g(${string:)e(-7:2})630 5230 y(bc)630
-5340 y($)i(echo)g(${string:)e(-7:-2})p eop end
-%%Page: 27 33
-TeXDict begin 27 32 bop 150 -116 a Fu(Chapter)30 b(3:)41
-b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(27)630 299
-y Ft(bcdef)630 408 y($)47 b(set)g(--)h(01234567890abcdefgh)630
-518 y($)f(echo)g(${1:7})630 628 y(7890abcdefgh)630 737
-y($)g(echo)g(${1:7:0})630 956 y($)g(echo)g(${1:7:2})630
-1066 y(78)630 1176 y($)g(echo)g(${1:7:-2})630 1285 y(7890abcdef)630
-1395 y($)g(echo)g(${1:)g(-7})630 1504 y(bcdefgh)630 1614
-y($)g(echo)g(${1:)g(-7:0})630 1833 y($)g(echo)g(${1:)g(-7:2})630
-1943 y(bc)630 2052 y($)g(echo)g(${1:)g(-7:-2})630 2162
-y(bcdef)630 2271 y($)g(array[0]=01234567890abcdef)o(gh)630
-2381 y($)g(echo)g(${array[0]:7})630 2491 y(7890abcdefgh)630
-2600 y($)g(echo)g(${array[0]:7:0})630 2819 y($)g(echo)g
-(${array[0]:7:2})630 2929 y(78)630 3039 y($)g(echo)g(${array[0]:7:-2})
-630 3148 y(7890abcdef)630 3258 y($)g(echo)g(${array[0]:)e(-7})630
-3367 y(bcdefgh)630 3477 y($)i(echo)g(${array[0]:)e(-7:0})630
-3696 y($)i(echo)g(${array[0]:)e(-7:2})630 3806 y(bc)630
-3915 y($)i(echo)g(${array[0]:)e(-7:-2})630 4025 y(bcdef)630
-4171 y Fu(If)22 b Fr(parameter)30 b Fu(is)23 b(`)p Ft(@)p
-Fu(',)i(the)e(result)g(is)g Fr(length)h Fu(p)s(ositional)f(parameters)h
-(b)s(eginning)e(at)i Fr(o\013set)p Fu(.)630 4281 y(A)36
-b(negativ)m(e)j Fr(o\013set)g Fu(is)e(tak)m(en)g(relativ)m(e)i(to)e
-(one)g(greater)g(than)f(the)h(greatest)h(p)s(ositional)630
-4390 y(parameter,)29 b(so)f(an)g(o\013set)h(of)f(-1)g(ev)-5
-b(aluates)30 b(to)e(the)g(last)h(p)s(ositional)g(parameter.)40
-b(It)28 b(is)g(an)630 4500 y(expansion)i(error)g(if)h
-Fr(length)f Fu(ev)-5 b(aluates)32 b(to)f(a)g(n)m(um)m(b)s(er)e(less)i
-(than)f(zero.)630 4646 y(The)i(follo)m(wing)i(examples)f(illustrate)h
-(substring)d(expansion)i(using)f(p)s(ositional)h(param-)630
-4755 y(eters:)630 4902 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 5011
-y($)g(echo)g(${@:7})630 5121 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 5230 y($)g(echo)g(${@:7:0})p eop end
+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 Ft($)47 b(echo)g(${@:7:2})630 408 y(7)g(8)630 518 y($)g(echo)g
-(${@:7:-2})630 628 y(bash:)f(-2:)h(substring)f(expression)f(<)i(0)630
-737 y($)g(echo)g(${@:)g(-7:2})630 847 y(b)g(c)630 956
-y($)g(echo)g(${@:0})630 1066 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 1176 y($)f(echo)g(${@:0:2})
-630 1285 y(./bash)f(1)630 1395 y($)h(echo)g(${@:)g(-7:0})630
-1677 y Fu(If)36 b Fr(parameter)43 b Fu(is)36 b(an)g(indexed)g(arra)m(y)
+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 1786 y(the)j Fr(length)g
+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 1896 y(negativ)m(e)33 b Fr(o\013set)g Fu(is)e(tak)m(en)h
+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 2005 y(sp)s(eci\014ed)38 b(arra)m(y)-8
+(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
-2115 y(than)30 b(zero.)630 2287 y(These)23 b(examples)i(sho)m(w)e(ho)m
+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 2459 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\))630 2569
-y($)f(echo)g(${array[@]:7})630 2679 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 2788 y($)g(echo)g(${array[@]:7:2})630
-2898 y(7)g(8)630 3007 y($)g(echo)g(${array[@]:)e(-7:2})630
-3117 y(b)i(c)630 3226 y($)g(echo)g(${array[@]:)e(-7:-2})630
-3336 y(bash:)h(-2:)h(substring)f(expression)f(<)i(0)630
-3446 y($)g(echo)g(${array[@]:0})630 3555 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 3665
-y($)g(echo)g(${array[@]:0:2})630 3774 y(0)g(1)630 3884
-y($)g(echo)g(${array[@]:)e(-7:0})630 4166 y Fu(Substring)25
+(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 4338 y(Substring)32
+(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 4448 y(whic)m(h)29
+(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
-4557 y(parameters)h(are)f(used,)g Ft($0)g Fu(is)g(pre\014xed)g(to)h
-(the)f(list.)150 4792 y Ft(${!)p Fj(prefix)p Ft(*})150
-4902 y(${!)p Fj(prefix)p Ft(@})630 5011 y Fu(Expands)24
+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
-5121 y(the)k(\014rst)f(c)m(haracter)j(of)e(the)g Ft(IFS)f
+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 5230 y(sion)35
+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
-5340 y(w)m(ord.)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)150 299
-y Ft(${!)p Fj(name)p Ft([@]})150 408 y(${!)p Fj(name)p
-Ft([*]})630 518 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 628 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 737 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 847
-y(expands)30 b(to)h(a)f(separate)i(w)m(ord.)150 1011
-y Ft(${#)p Fj(parameter)p Ft(})630 1121 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 1230 y(If)i
-Fr(parameter)50 b Fu(is)43 b(`)p Ft(*)p Fu(')g(or)g(`)p
+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 1340 y(parameters.)i(If)32
+(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 1450 y(substituted)30 b(is)h(the)g(n)m(um)m(b)s(er)e(of)i
+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 1559
+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
-1669 y(relativ)m(e)47 b(to)g(one)e(greater)i(than)e(the)h(maxim)m(um)f
+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
-1778 y(indices)30 b(coun)m(t)h(bac)m(k)g(from)f(the)h(end)e(of)i(the)f
+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
-1888 y(last)g(elemen)m(t.)150 2052 y Ft(${)p Fj(parameter)p
-Ft(#)p Fj(word)p Ft(})150 2162 y(${)p Fj(parameter)p
-Ft(##)p Fj(word)p Ft(})630 2271 y Fu(The)43 b Fr(w)m(ord)k
+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 2381 y(rules)31 b(describ)s(ed)g(b)s(elo)m(w)
+(according)f(to)h(the)630 5121 y(rules)31 b(describ)s(ed)g(b)s(elo)m(w)
 h(\(see)h(Section)g(3.5.8.1)h([P)m(attern)g(Matc)m(hing],)g(page)f
-(33\).)46 b(If)32 b(the)630 2491 y(pattern)37 b(matc)m(hes)h(the)f(b)s
+(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 2600 y(result)f(of)h(the)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)630 2710
+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 2819 y(deleted.)49 b(If)32
+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 2929 y(eac)m(h)38 b(p)s(ositional)g(parameter)g(in)f
+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 3039 y Fr(parameter)38 b Fu(is)32 b(an)f(arra)m(y)h(v)-5
+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 3148
+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
-3258 y(the)h(resultan)m(t)g(list.)150 3422 y Ft(${)p
-Fj(parameter)p Ft(\045)p Fj(word)p Ft(})150 3532 y(${)p
-Fj(parameter)p Ft(\045\045)p Fj(word)p Ft(})630 3641
-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
-3751 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(33\).)85
-b(If)630 3861 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 3970 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 4080 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
-4189 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 4299 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 4408 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 4518 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 4628 y(the)h(resultan)m(t)g(list.)150 4792 y
-Ft(${)p Fj(parameter)p Ft(/)p Fj(pattern)p Ft(/)p Fj(stri)o(ng)p
-Ft(})630 4902 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
-5011 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 5121 y(replaced)31 b(with)g Fr(string)p
-Fu(.)42 b(The)30 b(matc)m(h)h(is)g(p)s(erformed)f(according)h(to)h(the)
-f(rules)f(describ)s(ed)630 5230 y(b)s(elo)m(w)f(\(see)h(Section)g
-(3.5.8.1)h([P)m(attern)g(Matc)m(hing],)g(page)f(33\).)41
-b(If)29 b Fr(pattern)g Fu(b)s(egins)f(with)630 5340 y(`)p
-Ft(/)p Fu(',)43 b(all)e(matc)m(hes)g(of)f Fr(pattern)g
-Fu(are)h(replaced)f(with)g Fr(string)p Fu(.)69 b(Normally)41
-b(only)f(the)h(\014rst)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(matc)m(h)28 b(is)f(replaced.)40 b(If)26 b Fr(pattern)h
-Fu(b)s(egins)f(with)h(`)p Ft(#)p Fu(',)h(it)f(m)m(ust)g(matc)m(h)h(at)g
-(the)f(b)s(eginning)f(of)630 408 y(the)32 b(expanded)f(v)-5
-b(alue)32 b(of)g Fr(parameter)p Fu(.)45 b(If)31 b Fr(pattern)h
-Fu(b)s(egins)f(with)g(`)p Ft(\045)p Fu(',)i(it)f(m)m(ust)g(matc)m(h)g
-(at)630 518 y(the)24 b(end)f(of)h(the)h(expanded)e(v)-5
-b(alue)24 b(of)g Fr(parameter)p Fu(.)39 b(If)24 b Fr(string)31
-b Fu(is)24 b(n)m(ull,)i(matc)m(hes)f(of)f Fr(pattern)630
-628 y Fu(are)36 b(deleted)g(and)f(the)g Ft(/)g Fu(follo)m(wing)i
-Fr(pattern)e Fu(ma)m(y)h(b)s(e)f(omitted.)57 b(If)34
-b(the)i Ft(nocasematch)630 737 y Fu(shell)31 b(option)h(\(see)g(the)g
-(description)f(of)g Ft(shopt)f Fu(in)h(Section)h(4.3.2)h([The)e(Shopt)f
-(Builtin],)630 847 y(page)45 b(66\))h(is)f(enabled,)j(the)d(matc)m(h)g
-(is)g(p)s(erformed)e(without)i(regard)f(to)h(the)g(case)h(of)630
-956 y(alphab)s(etic)36 b(c)m(haracters.)56 b(If)34 b
-Fr(parameter)42 b Fu(is)36 b(`)p Ft(@)p Fu(')f(or)g(`)p
-Ft(*)p Fu(',)h(the)g(substitution)e(op)s(eration)i(is)630
-1066 y(applied)26 b(to)g(eac)m(h)h(p)s(ositional)f(parameter)h(in)e
-(turn,)h(and)f(the)h(expansion)g(is)f(the)h(resultan)m(t)630
-1176 y(list.)38 b(If)21 b Fr(parameter)28 b Fu(is)22
-b(an)f(arra)m(y)h(v)-5 b(ariable)22 b(subscripted)e(with)h(`)p
-Ft(@)p Fu(')g(or)g(`)p Ft(*)p Fu(',)j(the)d(substitution)630
-1285 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
-1395 y(the)h(resultan)m(t)g(list.)150 1551 y Ft(${)p
-Fj(parameter)p Ft(^)p Fj(pattern)p Ft(})150 1661 y(${)p
-Fj(parameter)p Ft(^^)p Fj(pattern)p Ft(})150 1771 y(${)p
-Fj(parameter)p Ft(,)p Fj(pattern)p Ft(})150 1880 y(${)p
-Fj(parameter)p Ft(,,)p Fj(pattern)p Ft(})630 1990 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 2099
-y Fr(pattern)33 b Fu(is)g(expanded)e(to)j(pro)s(duce)d(a)j(pattern)e
-(just)g(as)h(in)g(\014lename)g(expansion.)47 b(Eac)m(h)630
-2209 y(c)m(haracter)32 b(in)e(the)g(expanded)f(v)-5 b(alue)31
+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 2318 y(it)j(matc)m(hes)h(the)g
+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 2428 y(to)f(matc)m(h)g(more)f
-(than)g(one)g(c)m(haracter.)44 b(The)30 b(`)p Ft(^)p
-Fu(')i(op)s(erator)f(con)m(v)m(erts)h(lo)m(w)m(ercase)i(letters)630
-2538 y(matc)m(hing)i Fr(pattern)f Fu(to)h(upp)s(ercase;)h(the)e(`)p
-Ft(,)p Fu(')g(op)s(erator)g(con)m(v)m(erts)i(matc)m(hing)f(upp)s
-(ercase)630 2647 y(letters)e(to)f(lo)m(w)m(ercase.)50
-b(The)32 b(`)p Ft(^^)p Fu(')h(and)f(`)p Ft(,,)p Fu(')g(expansions)h
-(con)m(v)m(ert)h(eac)m(h)g(matc)m(hed)f(c)m(har-)630
-2757 y(acter)c(in)f(the)h(expanded)e(v)-5 b(alue;)30
-b(the)e(`)p Ft(^)p Fu(')g(and)g(`)p Ft(,)p Fu(')g(expansions)g(matc)m
-(h)h(and)f(con)m(v)m(ert)i(only)630 2866 y(the)37 b(\014rst)g(c)m
-(haracter)i(in)e(the)g(expanded)g(v)-5 b(alue.)61 b(If)37
-b Fr(pattern)g Fu(is)h(omitted,)i(it)e(is)f(treated)630
-2976 y(lik)m(e)h(a)f(`)p Ft(?)p Fu(',)i(whic)m(h)d(matc)m(hes)i(ev)m
-(ery)f(c)m(haracter.)61 b(If)37 b Fr(parameter)43 b Fu(is)37
-b(`)p Ft(@)p Fu(')g(or)f(`)p Ft(*)p Fu(',)j(the)e(case)630
-3086 y(mo)s(di\014cation)29 b(op)s(eration)f(is)g(applied)g(to)h(eac)m
-(h)h(p)s(ositional)f(parameter)f(in)g(turn,)g(and)g(the)630
-3195 y(expansion)38 b(is)g(the)g(resultan)m(t)h(list.)65
-b(If)37 b Fr(parameter)46 b Fu(is)38 b(an)g(arra)m(y)g(v)-5
-b(ariable)39 b(subscripted)630 3305 y(with)26 b(`)p Ft(@)p
-Fu(')f(or)h(`)p Ft(*)p Fu(',)h(the)f(case)h(mo)s(di\014cation)f(op)s
-(eration)h(is)e(applied)h(to)h(eac)m(h)g(mem)m(b)s(er)e(of)h(the)630
-3414 y(arra)m(y)31 b(in)f(turn,)f(and)h(the)h(expansion)f(is)g(the)h
-(resultan)m(t)g(list.)150 3571 y Ft(${)p Fj(parameter)p
-Ft(@)p Fj(operator)p Ft(})630 3680 y Fu(The)d(expansion)h(is)f(either)h
-(a)g(transformation)g(of)g(the)g(v)-5 b(alue)29 b(of)g
-Fr(parameter)35 b Fu(or)29 b(informa-)630 3790 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 3900 y Fu(is)j(a)h(single)g(letter:)630
-4056 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 4166 y(ercase)g(alphab)s(etic)g(c)m(haracters)h(con)m(v)
-m(erted)g(to)f(upp)s(ercase.)630 4322 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
-4432 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 4589 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
-4698 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 4855 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(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
-4964 y(a)g(format)f(that)h(can)g(b)s(e)f(reused)f(as)i(input.)630
-5121 y Ft(E)432 b Fu(The)27 b(expansion)g(is)g(a)g(string)h(that)f(is)h
+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 5230 y(slash)e(escap)s(e)h(sequences)f(expanded)g(as)g
+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
-5340 y(anism.)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 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
-408 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
-518 y(the)31 b(Prompt],)f(page)h(98\).)630 676 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 785 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 895 y(its)31 b(attributes)g(and)e(v)-5
-b(alue.)630 1052 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 1162 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 1271 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 1381 y(page)31 b(95\).)630 1539 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
-1648 y(rameter)7 b Fu('s)31 b(attributes.)630 1806 y(If)e
-Fr(parameter)37 b Fu(is)30 b(`)p Ft(@)p Fu(')g(or)g(`)p
+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 1915 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
-2025 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 2134 y(in)30 b(turn,)g(and)f(the)i
-(expansion)f(is)h(the)f(resultan)m(t)h(list.)630 2268
-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
-2378 y(as)j(describ)s(ed)e(b)s(elo)m(w.)150 2575 y Fk(3.5.4)63
-b(Command)41 b(Substitution)150 2722 y Fu(Command)f(substitution)h
+(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 2831 y(Command)29 b(substitution)h(o)s(ccurs)h
+(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
-2965 y Ft($\()p Fj(command)p Ft(\))150 3098 y Fu(or)390
-3232 y Ft(`)p Fj(command)p Ft(`)150 3366 y Fu(Bash)20
+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 3475 y(the)40 b(command)g(substitution)f(with)h(the)g
+(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
-3585 y(newlines)e(deleted.)64 b(Em)m(b)s(edded)37 b(newlines)h(are)g
+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 3694 y(w)m(ord)30 b(splitting.)42 b(The)30 b(command)g
+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 3804
+(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
-3937 y(When)j(the)i(old-st)m(yle)h(bac)m(kquote)f(form)f(of)g
+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
-4047 y(meaning)k(except)h(when)e(follo)m(w)m(ed)j(b)m(y)e(`)p
+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
-4157 y(bac)m(kslash)k(terminates)f(the)h(command)e(substitution.)72
+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 4266 y(c)m(haracters)32 b(b)s(et)m(w)m(een)f(the)
+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 4400 y(Command)22
+(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 4509 y(the)31 b(inner)e(bac)m(kquotes)j(with)e(bac)m(kslashes.)275
-4643 y(If)e(the)i(substitution)e(app)s(ears)h(within)g(double)f
+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
-4753 y(are)i(not)f(p)s(erformed)f(on)h(the)h(results.)150
-4950 y Fk(3.5.5)63 b(Arithmetic)40 b(Expansion)150 5097
+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 5206 y(of)31 b(the)f(result.)41 b(The)30
-b(format)g(for)g(arithmetic)i(expansion)e(is:)390 5340
-y Ft($\(\()47 b Fj(expression)e Ft(\)\))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)275 299
-y(The)33 b(expression)g(is)h(treated)g(as)g(if)g(it)g(w)m(ere)g(within)
-f(double)h(quotes,)h(but)e(a)h(double)f(quote)h(inside)150
-408 y(the)k(paren)m(theses)g(is)g(not)g(treated)h(sp)s(ecially)-8
-b(.)65 b(All)38 b(tok)m(ens)h(in)f(the)g(expression)f(undergo)g
-(parameter)150 518 y(and)26 b(v)-5 b(ariable)28 b(expansion,)g(command)
-e(substitution,)i(and)e(quote)i(remo)m(v)-5 b(al.)41
-b(The)26 b(result)h(is)g(treated)h(as)150 628 y(the)j(arithmetic)g
-(expression)f(to)h(b)s(e)f(ev)-5 b(aluated.)42 b(Arithmetic)31
-b(expansions)g(ma)m(y)g(b)s(e)e(nested.)275 761 y(The)34
-b(ev)-5 b(aluation)37 b(is)f(p)s(erformed)e(according)i(to)g(the)g
-(rules)f(listed)h(b)s(elo)m(w)g(\(see)g(Section)g(6.5)h([Shell)150
-870 y(Arithmetic],)32 b(page)f(93\).)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 980 y(to)f(the)g(standard)e(error)h(and)g(no)
-g(substitution)g(o)s(ccurs.)150 1177 y Fk(3.5.6)63 b(Pro)s(cess)42
-b(Substitution)150 1324 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 1433 y(It)d(tak)m(es)i(the)f(form)f(of)390
-1567 y Ft(<\()p Fj(list)p Ft(\))150 1700 y Fu(or)390
-1833 y Ft(>\()p Fj(list)p Ft(\))150 1966 y Fu(The)e(pro)s(cess)h
-Fr(list)j Fu(is)d(run)e(async)m(hronously)-8 b(,)30 b(and)e(its)i
-(input)e(or)h(output)f(app)s(ears)h(as)g(a)g(\014lename.)41
-b(This)150 2076 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 2186 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 2295 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 2405 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 2514 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
-2624 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 2757 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 2867 y(v)-5 b(ariable)31
-b(expansion,)g(command)f(substitution,)g(and)g(arithmetic)i(expansion.)
-150 3064 y Fk(3.5.7)63 b(W)-10 b(ord)41 b(Splitting)150
-3210 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
-3320 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 3453 y(The)e(shell)g(treats)i
+(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 3563 y(expansions)22
+(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 3672 y(is)36 b(exactly)j Ft(<space><tab><newline>)p
+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 3782
+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
-3892 y(and)k(an)m(y)h(sequence)h(of)f Ft(IFS)f Fu(c)m(haracters)i(not)f
+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 4001 y(If)43 b Ft(IFS)f Fu(has)h(a)h(v)-5
+(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 4111 y Ft(space)p
+(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 4220 y(whitespace)c(c)m(haracter)h(is)f(in)f(the)g(v)-5
+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 4330
+(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 4440 y(a)k(\014eld.)40 b(A)31 b(sequence)g(of)f
+(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 4549 y(of)31
+(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
-4682 y(Explicit)21 b(n)m(ull)g(argumen)m(ts)g(\()p Ft("")g
+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 4792 y(Unquoted)37 b(implicit)i(n)m(ull)f
+(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 4902 y(no)32 b(v)-5 b(alues,)33
+(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
-5011 y(n)m(ull)c(argumen)m(t)g(results)g(and)f(is)h(retained)g(and)f
+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 5121 y(a)f(quoted)f(n)m(ull)g(argumen)m(t)h(app)s(ears)e(as)
+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 5230 y(argumen)m(t)i(is)f(remo)m(v)m(ed.)69
+(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
-5340 y(argumen)m(t)31 b(remo)m(v)-5 b(al.)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)275 299
-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 505 y Fk(3.5.8)63 b(Filename)41
-b(Expansion)150 652 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 762 y(page)d(62\),)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 872 y(app)s(ears,)34
+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
-981 y(alphab)s(etically)41 b(sorted)e(list)h(of)g(\014lenames)f(matc)m
+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
-1091 y(Matc)m(hing],)e(page)e(33\).)60 b(If)36 b(no)h(matc)m(hing)g
+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 1200 y Fu(is)k(disabled,)i(the)f(w)m(ord)e(is)h(left)h
+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 1310 y(are)c(found,)g(the)g(w)m(ord)f(is)
+(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 1420 y(found,)e(an)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 1529
+(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
-1639 y(c)m(haracters.)275 1781 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
-1890 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 2000 y Fu(is)k(set.)41 b(The)28 b(\014lenames)g(`)p
-Ft(.)p Fu(')g(and)g(`)p Ft(..)p Fu(')g(m)m(ust)g(alw)m(a)m(ys)i(b)s(e)e
-(matc)m(hed)h(explicitly)-8 b(,)30 b(ev)m(en)f(if)g Ft(dotglob)d
-Fu(is)i(set.)150 2109 y(In)i(other)g(cases,)i(the)e(`)p
-Ft(.)p Fu(')h(c)m(haracter)h(is)e(not)h(treated)g(sp)s(ecially)-8
-b(.)275 2251 y(When)30 b(matc)m(hing)i(a)f(\014lename,)h(the)f(slash)f
+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 2361 y(slash)d(in)f(the)h(pattern,)h(but)e
+(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 2470 y(c)m(haracter)j(as)f
+(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(33\).)275 2612 y(See)d(the)g(description)g(of)g
+(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
-(66,)g(for)f(a)g(descrip-)150 2722 y(tion)j(of)f(the)h
-Ft(nocaseglob)p Fu(,)d Ft(nullglob)p Fu(,)g Ft(failglob)p
-Fu(,)h(and)g Ft(dotglob)g Fu(options.)275 2864 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
-2973 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 3083 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 3192
-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 3302 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
-3412 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 3521 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 3631 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
-3740 y Fu(option)i(is)f(disabled)g(when)g Ft(GLOBIGNORE)d
-Fu(is)k(unset.)150 3947 y Fk(3.5.8.1)63 b(P)m(attern)40
-b(Matc)m(hing)150 4094 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 4203 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 4313 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 4423 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 4564 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 4735 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
-4844 y(is)37 b(enabled,)h(and)e(`)p Ft(*)p Fu(')h(is)g(used)f(in)g(a)h
+(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 4954 y(used)f(as)g(a)h(single)g(pattern)g(will)f(matc)
+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
-5064 y(sub)s(directories.)g(If)25 b(follo)m(w)m(ed)j(b)m(y)e(a)g(`)p
+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 5173 y(and)k(sub)s(directories.)150
-5340 y Ft(?)432 b Fu(Matc)m(hes)32 b(an)m(y)f(single)g(c)m(haracter.)p
-eop end
-%%Page: 34 40
-TeXDict begin 34 39 bop 150 -116 a Fu(Chapter)30 b(3:)41
-b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(34)150 299
-y Ft([...)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 408 y(h)m(yphen)k(denotes)i(a)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 518 y(c)m(haracters,)d
+(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 628 y(set,)31 b(is)f(matc)m(hed.)42
+(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 737 y(c)m(haracter)c(not)f(enclosed)g
+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 847
+(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 956 y(\014rst)25 b(c)m(haracter)i(in)e
-(the)h(set.)40 b(The)25 b(sorting)h(order)f(of)h(c)m(haracters)h(in)f
-(range)g(expressions)f(is)630 1066 y(determined)h(b)m(y)h(the)g(curren)
-m(t)f(lo)s(cale)j(and)d(the)h(v)-5 b(alues)27 b(of)g(the)g
-Ft(LC_COLLATE)d Fu(and)i Ft(LC_ALL)630 1176 y Fu(shell)31
-b(v)-5 b(ariables,)31 b(if)f(set.)630 1312 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 1422 y(Man)m(y)68 b(lo)s(cales)h(sort)f(c)m
-(haracters)h(in)e(dictionary)i(order,)76 b(and)67 b(in)g(these)h(lo)s
-(cales)630 1531 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 1641 y(to)34 b(`)p
-Ft([aBbCcDdxXyYz])p Fu(',)c(for)j(example.)49 b(T)-8
-b(o)33 b(obtain)h(the)f(traditional)h(in)m(terpretation)h(of)630
-1751 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
-1860 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 1970 y Ft(globasciiranges)c
-Fu(shell)31 b(option.)630 2106 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 2216 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 2353
-y Ft(alnum)142 b(alpha)g(ascii)f(blank)h(cntrl)g(digit)g(graph)g(lower)
-870 2462 y(print)g(punct)g(space)f(upper)h(word)190 b(xdigit)630
-2599 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 2709 y Fu(c)m(haracter)32 b(class)f(matc)m(hes)h
+(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 2845 y(Within)25 b(`)p Ft([)p Fu(')f(and)g(`)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 2955 y(whic)m(h)29
+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 3064
+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 3201 y(Within)22 b(`)p Ft([)p Fu(')f(and)g(`)p
+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 3367 y(If)29 b(the)g Ft(extglob)f
+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,)h(sev)m(eral)i(extended)f(pattern)150 3477
-y(matc)m(hing)37 b(op)s(erators)e(are)h(recognized.)58
-b(In)35 b(the)g(follo)m(wing)i(description,)g(a)f Fr(pattern-list)j
-Fu(is)d(a)g(list)g(of)150 3586 y(one)d(or)f(more)h(patterns)f
-(separated)h(b)m(y)f(a)h(`)p Ft(|)p Fu('.)47 b(Comp)s(osite)33
-b(patterns)f(ma)m(y)i(b)s(e)d(formed)h(using)g(one)h(or)150
-3696 y(more)e(of)f(the)h(follo)m(wing)g(sub-patterns:)150
-3862 y Ft(?\()p Fj(pattern-list)p Ft(\))630 3971 y Fu(Matc)m(hes)h
-(zero)f(or)g(one)f(o)s(ccurrence)h(of)f(the)h(giv)m(en)g(patterns.)150
-4135 y Ft(*\()p Fj(pattern-list)p Ft(\))630 4245 y Fu(Matc)m(hes)h
+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 4408 y Ft(+\()p Fj(pattern-list)p Ft(\))630 4518
+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 4682 y Ft(@\()p Fj(pattern-list)p
-Ft(\))630 4791 y Fu(Matc)m(hes)g(one)f(of)f(the)h(giv)m(en)g(patterns.)
-150 4955 y Ft(!\()p Fj(pattern-list)p Ft(\))630 5064
+(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 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: 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
+(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 614 y Fk(3.5.9)63
-b(Quote)41 b(Remo)m(v)-7 b(al)150 760 y Fu(After)32 b(the)g(preceding)g
+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 870 y(that)f(did)f(not)g(result)g(from)g(one)h(of)g
+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
-1120 y Fs(3.6)68 b(Redirections)150 1279 y Fu(Before)32
+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
-1389 y(tation)d(in)m(terpreted)f(b)m(y)f(the)h(shell.)40
-b(Redirection)27 b(allo)m(ws)h(commands')f(\014le)f(handles)g(to)i(b)s
-(e)e(duplicated,)150 1498 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 1608 y(from)39 b(and)g(writes)h
+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
-1717 y(shell)e(execution)h(en)m(vironmen)m(t.)65 b(The)37
+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 1827 y(an)m(ywhere)30 b(within)f(a)h(simple)f(command)h
+(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 1936 y(in)g(the)h(order)f(they)g(app)s(ear,)g
-(from)g(left)h(to)g(righ)m(t.)275 2077 y(Eac)m(h)45 b(redirection)h
+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 2186
+(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 2296 y(except)37
+(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 2406 y(to)e Fi({)p Fr(v)-5 b(arname)5 b Fi(})p
+(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 2515 y(\014le)e(descriptor)g(to)h(close.)43
+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
-2625 y(of)42 b(the)f(command,)j(allo)m(wing)f(the)f(shell)g(programmer)
+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
-2734 y(man)m(ually)-8 b(.)275 2875 y(In)27 b(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 2984
-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 3094 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
-3203 y(to)e(the)g(standard)e(output)h(\(\014le)h(descriptor)f(1\).)275
-3344 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
-3453 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
-3563 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
-3672 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 3813 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 3953 y Ft(ls)47 b(>)h
-Fj(dirlist)d Ft(2>&1)150 4093 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 4203 y(\014le)h
-Fr(dirlist)p Fu(,)h(while)f(the)h(command)390 4343 y
-Ft(ls)47 b(2>&1)g(>)g Fj(dirlist)150 4484 y Fu(directs)28
+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 4593 y(of)j(the)f(standard)g(output)g(b)s(efore)g(the)g
+(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 4733 y(Bash)26 b(handles)f(sev)m(eral)j(\014lenames)e(sp)s
+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 4843 y(in)38 b(the)h(follo)m(wing)h(table.)66
+(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 4953 y(sp)s(ecial)27
+(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
-5062 y(describ)s(ed)j(b)s(elo)m(w.)150 5230 y Ft(/dev/fd/)p
+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: 36 42
-TeXDict begin 36 41 bop 150 -116 a Fu(Chapter)30 b(3:)41
-b(Basic)32 b(Shell)e(F)-8 b(eatures)2246 b(36)150 299
+%%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
@@ -10782,9 +11036,9 @@ b Fu(to)e(b)s(e)e(op)s(ened)g(for)h(app)s(ending)e(on)i(\014le)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: 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)150 299
+%%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
@@ -10844,9 +11098,9 @@ Fu(',)g(and)f(`)p Ft(`)p Fu('.)275 5121 y(If)21 b(the)i(redirection)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: 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
+%%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
@@ -10909,9 +11163,9 @@ 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: 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
+%%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
@@ -10924,12 +11178,12 @@ b(a)g(simple)g(command)g(is)g(executed,)h(the)g(shell)f(p)s(erforms)e
 1157 y(2.)61 b(The)39 b(w)m(ords)g(that)i(are)f(not)g(v)-5
 b(ariable)40 b(assignmen)m(ts)h(or)e(redirections)i(are)f(expanded)f
 (\(see)h(Sec-)330 1267 y(tion)d(3.5)i([Shell)e(Expansions],)h(page)g
-(22\).)61 b(If)37 b(an)m(y)g(w)m(ords)f(remain)h(after)h(expansion,)h
+(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(35\).)199
+(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
@@ -10938,383 +11192,433 @@ b(quote)h(remo)m(v)-5 b(al)46 b(b)s(efore)330 1973 y(b)s(eing)30
 b(assigned)h(to)g(the)f(v)-5 b(ariable.)275 2132 y(If)32
 b(no)i(command)f(name)g(results,)h(the)g(v)-5 b(ariable)34
 b(assignmen)m(ts)g(a\013ect)h(the)f(curren)m(t)f(shell)h(en)m(viron-)
-150 2242 y(men)m(t.)39 b(Otherwise,)27 b(the)e(v)-5 b(ariables)26
-b(are)g(added)f(to)h(the)f(en)m(vironmen)m(t)h(of)g(the)f(executed)h
-(command)g(and)150 2351 y(do)35 b(not)f(a\013ect)j(the)d(curren)m(t)h
-(shell)g(en)m(vironmen)m(t.)54 b(If)34 b(an)m(y)h(of)g(the)f(assignmen)
-m(ts)i(attempts)f(to)h(assign)150 2461 y(a)j(v)-5 b(alue)39
-b(to)g(a)g(readonly)f(v)-5 b(ariable,)42 b(an)c(error)g(o)s(ccurs,)j
-(and)c(the)i(command)f(exits)h(with)g(a)f(non-zero)150
-2570 y(status.)275 2705 y(If)33 b(no)g(command)g(name)h(results,)g
-(redirections)g(are)g(p)s(erformed,)f(but)g(do)h(not)f(a\013ect)i(the)f
-(curren)m(t)150 2814 y(shell)d(en)m(vironmen)m(t.)41
-b(A)30 b(redirection)h(error)f(causes)h(the)g(command)f(to)h(exit)g
-(with)f(a)h(non-zero)g(status.)275 2948 y(If)26 b(there)i(is)f(a)h
-(command)f(name)h(left)g(after)g(expansion,)g(execution)h(pro)s(ceeds)e
-(as)g(describ)s(ed)f(b)s(elo)m(w.)150 3058 y(Otherwise,)39
-b(the)e(command)g(exits.)62 b(If)37 b(one)g(of)g(the)h(expansions)f
-(con)m(tained)h(a)g(command)f(substitu-)150 3167 y(tion,)i(the)d(exit)h
-(status)g(of)f(the)h(command)f(is)h(the)f(exit)h(status)g(of)f(the)h
-(last)g(command)f(substitution)150 3277 y(p)s(erformed.)55
-b(If)35 b(there)g(w)m(ere)h(no)g(command)f(substitutions,)i(the)e
-(command)h(exits)g(with)f(a)h(status)g(of)150 3387 y(zero.)150
-3585 y Fk(3.7.2)63 b(Command)41 b(Searc)m(h)f(and)h(Execution)150
-3732 y Fu(After)i(a)h(command)f(has)g(b)s(een)f(split)h(in)m(to)h(w)m
-(ords,)j(if)c(it)g(results)g(in)g(a)h(simple)f(command)g(and)f(an)150
-3842 y(optional)32 b(list)f(of)f(argumen)m(ts,)h(the)g(follo)m(wing)g
-(actions)h(are)f(tak)m(en.)199 3976 y(1.)61 b(If)24 b(the)g(command)g
-(name)g(con)m(tains)i(no)e(slashes,)i(the)e(shell)h(attempts)g(to)g(lo)
-s(cate)h(it.)39 b(If)24 b(there)g(exists)330 4085 y(a)h(shell)g
-(function)f(b)m(y)g(that)h(name,)h(that)f(function)f(is)h(in)m(v)m(ok)m
-(ed)h(as)e(describ)s(ed)g(in)g(Section)h(3.3)h([Shell)330
-4195 y(F)-8 b(unctions],)31 b(page)h(18.)199 4329 y(2.)61
-b(If)41 b(the)g(name)h(do)s(es)f(not)g(matc)m(h)i(a)e(function,)j(the)e
-(shell)f(searc)m(hes)i(for)e(it)h(in)f(the)g(list)h(of)g(shell)330
-4439 y(builtins.)e(If)30 b(a)h(matc)m(h)g(is)f(found,)g(that)h(builtin)
-f(is)g(in)m(v)m(ok)m(ed.)199 4573 y(3.)61 b(If)40 b(the)g(name)h(is)f
-(neither)h(a)f(shell)h(function)f(nor)g(a)g(builtin,)j(and)d(con)m
-(tains)h(no)g(slashes,)i(Bash)330 4682 y(searc)m(hes)c(eac)m(h)g
-(elemen)m(t)g(of)g Ft($PATH)d Fu(for)i(a)g(directory)h(con)m(taining)g
-(an)f(executable)h(\014le)f(b)m(y)g(that)330 4792 y(name.)56
-b(Bash)36 b(uses)f(a)h(hash)e(table)j(to)f(remem)m(b)s(er)f(the)h(full)
-f(pathnames)g(of)h(executable)h(\014les)e(to)330 4902
-y(a)m(v)m(oid)e(m)m(ultiple)f Ft(PATH)f Fu(searc)m(hes)i(\(see)f(the)g
-(description)g(of)f Ft(hash)g Fu(in)g(Section)i(4.1)f([Bourne)g(Shell)
-330 5011 y(Builtins],)37 b(page)f(44\).)55 b(A)35 b(full)g(searc)m(h)g
-(of)g(the)g(directories)h(in)f Ft($PATH)e Fu(is)i(p)s(erformed)f(only)h
-(if)g(the)330 5121 y(command)24 b(is)h(not)g(found)e(in)i(the)g(hash)f
-(table.)39 b(If)25 b(the)f(searc)m(h)i(is)e(unsuccessful,)h(the)g
-(shell)g(searc)m(hes)330 5230 y(for)e(a)h(de\014ned)e(shell)h(function)
-h(named)e Ft(command_not_found_handle)p Fu(.)32 b(If)23
-b(that)h(function)f(exists,)330 5340 y(it)33 b(is)f(in)m(v)m(ok)m(ed)i
-(in)e(a)h(separate)h(execution)f(en)m(vironmen)m(t)g(with)f(the)h
-(original)h(command)e(and)g(the)p eop end
-%%Page: 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)330 299
-y(original)26 b(command's)e(argumen)m(ts)h(as)g(its)g(argumen)m(ts,)h
-(and)e(the)h(function's)f(exit)i(status)f(b)s(ecomes)330
-408 y(the)j(exit)g(status)g(of)f(that)h(subshell.)39
+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 518 y(message)k(and)f(returns)f(an)i(exit)g
-(status)g(of)f(127.)199 654 y(4.)61 b(If)33 b(the)g(searc)m(h)h(is)g
+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 763 y(shell)g(executes)h(the)f(named)f
+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 873 y(is)30 b(set)h(to)h(the)e(name)h(giv)m
+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 983 y(argumen)m(ts)g(supplied,)e(if)h(an)m(y)-8
-b(.)199 1118 y(5.)61 b(If)35 b(this)h(execution)h(fails)f(b)s(ecause)g
+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 1228 y(a)d(directory)-8 b(,)34
+(\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
-1338 y(Section)g(3.8)h([Shell)e(Scripts],)g(page)i(42.)199
-1473 y(6.)61 b(If)38 b(the)h(command)f(w)m(as)h(not)g(b)s(egun)e(async)
+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 1583 y(complete)32 b(and)e(collects)i(its)f(exit)g(status.)150
-1785 y Fk(3.7.3)63 b(Command)41 b(Execution)f(En)m(vironmen)m(t)150
-1932 y Fu(The)30 b(shell)g(has)h(an)f Fr(execution)h(en)m(vironmen)m(t)
+(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
-2069 y Fq(\017)60 b Fu(op)s(en)32 b(\014les)g(inherited)g(b)m(y)h(the)f
+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 2178 y(the)g Ft(exec)e
-Fu(builtin)225 2314 y Fq(\017)60 b Fu(the)28 b(curren)m(t)g(w)m(orking)
+(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 2424 y(in)m(v)m(o)s(cation)225 2560 y Fq(\017)60
+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
-2695 y Fq(\017)60 b Fu(curren)m(t)30 b(traps)g(set)h(b)m(y)f
-Ft(trap)225 2831 y Fq(\017)60 b Fu(shell)30 b(parameters)f(that)h(are)g
+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 2941 y(shell's)i(paren)m(t)
-f(in)g(the)h(en)m(vironmen)m(t)225 3077 y Fq(\017)60
+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
-3186 y(en)m(vironmen)m(t)225 3322 y Fq(\017)60 b Fu(options)33
+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 3432
-y(b)m(y)c Ft(set)225 3567 y Fq(\017)60 b Fu(options)31
+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(66\))225 3703 y Fq(\017)60
+(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(94\))225
-3839 y Fq(\017)60 b Fu(v)-5 b(arious)50 b(pro)s(cess)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 3948 y(page)31
-b(9\),)g(the)g(v)-5 b(alue)31 b(of)f Ft($$)p Fu(,)g(and)g(the)h(v)-5
-b(alue)31 b(of)f Ft($PPID)275 4112 y Fu(When)k(a)g(simple)h(command)f
+(\(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 4221 y(in)m(v)m(ok)m(ed)25 b(in)f(a)g
+(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 4331 y(noted,)31
+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
-4468 y Fq(\017)60 b Fu(the)31 b(shell's)h(op)s(en)e(\014les,)i(plus)e
+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 4578 y(the)g(command)225 4713
+(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
-4849 y Fq(\017)60 b Fu(the)31 b(\014le)f(creation)i(mo)s(de)e(mask)225
-4985 y Fq(\017)60 b Fu(shell)32 b(v)-5 b(ariables)33
+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 5095 y(command,)e(passed)g
+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(41\))225 5230 y Fq(\017)60 b
+(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: 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)275 299
+%%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 552 y(Command)35 b(substitution,)j
-(commands)e(group)s(ed)f(with)i(paren)m(theses,)h(and)e(async)m
-(hronous)g(com-)150 662 y(mands)c(are)h(in)m(v)m(ok)m(ed)i(in)d(a)i
-(subshell)e(en)m(vironmen)m(t)h(that)h(is)f(a)g(duplicate)h(of)f(the)g
-(shell)g(en)m(vironmen)m(t,)150 772 y(except)i(that)g(traps)f(caugh)m
-(t)h(b)m(y)f(the)h(shell)f(are)g(reset)h(to)g(the)f(v)-5
-b(alues)35 b(that)g(the)f(shell)h(inherited)e(from)150
-881 y(its)g(paren)m(t)f(at)h(in)m(v)m(o)s(cation.)49
+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 991 y(executed)41
+(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
-1100 y(a\013ect)32 b(the)f(shell's)f(execution)i(en)m(vironmen)m(t.)275
-1244 y(Subshells)c(spa)m(wned)i(to)h(execute)g(command)f(substitutions)
+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 1354 y(from)23 b(the)i(paren)m(t)f(shell.)38
+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 1498
+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 1607 y(for)35 b(the)g(command)g(is)g
+(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 1717
+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 1926 y Fk(3.7.4)63
-b(En)m(vironmen)m(t)150 2073 y Fu(When)29 b(a)g(program)f(is)h(in)m(v)m
+(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
-2182 y(list)i(of)g(name-v)-5 b(alue)31 b(pairs,)f(of)h(the)f(form)g
-Ft(name=value)p Fu(.)275 2326 y(Bash)39 b(pro)m(vides)g(sev)m(eral)i(w)
+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 2436
+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
-2545 y(marking)26 b(it)g(for)g Fr(exp)s(ort)h Fu(to)g(c)m(hild)f(pro)s
-(cesses.)39 b(Executed)26 b(commands)g(inherit)g(the)g(en)m(vironmen)m
-(t.)39 b(The)150 2655 y Ft(export)c Fu(and)i(`)p Ft(declare)29
+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 2765 y(deleted)21
+(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 2874 y(new)31 b(v)-5 b(alue)32
+(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
-2984 y(b)m(y)f(an)m(y)g(executed)h(command)f(consists)g(of)g(the)g
+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 3093 y(mo)s(di\014ed)26
+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 3203 y(an)m(y)k(additions)f(via)h(the)g Ft(export)d
-Fu(and)i(`)p Ft(declare)f(-x)p Fu(')h(commands.)275 3347
+(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
-3457 y(b)m(y)c(pre\014xing)e(it)i(with)g(parameter)g(assignmen)m(ts,)h
+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
-3566 y(page)g(20.)41 b(These)29 b(assignmen)m(t)i(statemen)m(ts)g
+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 3710 y(If)g(the)h Ft(-k)g Fu(option)g(is)g(set)h(\(see)g
-(Section)g(4.3.1)g([The)f(Set)g(Builtin],)h(page)g(62\),)h(then)e(all)g
-(parameter)150 3820 y(assignmen)m(ts)f(are)g(placed)h(in)e(the)h(en)m
+(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 3929 y(command)g(name.)275 4073 y(When)h(Bash)h(in)m
+(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 4183 y(of)f(the)f(command)g(and)g(passed)g(to)h(that)g
-(command)f(in)g(its)h(en)m(vironmen)m(t.)150 4392 y Fk(3.7.5)63
-b(Exit)40 b(Status)150 4538 y Fu(The)26 b(exit)h(status)f(of)g(an)g
-(executed)h(command)f(is)g(the)h(v)-5 b(alue)26 b(returned)f(b)m(y)h
-(the)g Fr(w)m(aitpid)k Fu(system)d(call)g(or)150 4648
-y(equiv)-5 b(alen)m(t)33 b(function.)45 b(Exit)32 b(statuses)g(fall)g
-(b)s(et)m(w)m(een)h(0)f(and)f(255,)i(though,)f(as)g(explained)g(b)s
-(elo)m(w,)h(the)150 4758 y(shell)i(ma)m(y)g(use)f(v)-5
-b(alues)35 b(ab)s(o)m(v)m(e)g(125)h(sp)s(ecially)-8 b(.)54
-b(Exit)35 b(statuses)g(from)f(shell)h(builtins)f(and)f(comp)s(ound)150
-4867 y(commands)j(are)g(also)h(limited)g(to)g(this)f(range.)58
-b(Under)36 b(certain)h(circumstances,)h(the)e(shell)h(will)f(use)150
-4977 y(sp)s(ecial)31 b(v)-5 b(alues)31 b(to)g(indicate)g(sp)s(eci\014c)
-f(failure)h(mo)s(des.)275 5121 y(F)-8 b(or)32 b(the)g(shell's)g(purp)s
-(oses,)e(a)j(command)e(whic)m(h)h(exits)g(with)g(a)g(zero)g(exit)h
-(status)f(has)f(succeeded.)150 5230 y(A)e(non-zero)h(exit)g(status)g
-(indicates)g(failure.)40 b(This)28 b(seemingly)i(coun)m(ter-in)m
-(tuitiv)m(e)i(sc)m(heme)e(is)f(used)g(so)150 5340 y(there)34
-b(is)g(one)g(w)m(ell-de\014ned)g(w)m(a)m(y)g(to)h(indicate)g(success)f
-(and)f(a)h(v)-5 b(ariet)m(y)35 b(of)f(w)m(a)m(ys)h(to)f(indicate)h(v)-5
-b(arious)p eop end
-%%Page: 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
+(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
-537 y(If)k(a)h(command)g(is)g(not)g(found,)g(the)g(c)m(hild)h(pro)s
+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
-647 y(127.)42 b(If)30 b(a)h(command)f(is)g(found)f(but)h(is)g(not)h
+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
-776 y(If)i(a)i(command)f(fails)g(b)s(ecause)g(of)h(an)f(error)f(during)
+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
-885 y(is)c(greater)i(than)e(zero.)275 1014 y(The)38 b(exit)h(status)g
+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 1123 y(ditional)i(Constructs],)h(page)f
-(11\))g(and)e(some)i(of)f(the)g(list)g(constructs)g(\(see)h(Section)f
-(3.2.4)i([Lists],)150 1233 y(page)31 b(9\).)275 1362
+(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
-1471 y(status)34 b(on)f(failure,)i(so)f(they)g(ma)m(y)g(b)s(e)f(used)g
+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 1581 y(return)e(an)i(exit)g(status)g(of)f(2)h
+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 1691 y(argumen)m(ts.)150
-1878 y Fk(3.7.6)63 b(Signals)150 2025 y Fu(When)36 b(Bash)g(is)h(in)m
-(teractiv)m(e,)j(in)c(the)h(absence)f(of)h(an)m(y)f(traps,)i(it)e
-(ignores)h Ft(SIGTERM)d Fu(\(so)j(that)g(`)p Ft(kill)150
-2135 y(0)p Fu(')c(do)s(es)g(not)g(kill)g(an)g(in)m(teractiv)m(e)j
-(shell\),)f(and)d Ft(SIGINT)f Fu(is)i(caugh)m(t)h(and)f(handled)f(\(so)
-h(that)h(the)f Ft(wait)150 2244 y Fu(builtin)24 b(is)h(in)m
-(terruptible\).)39 b(When)24 b(Bash)g(receiv)m(es)j(a)d
-Ft(SIGINT)p Fu(,)h(it)g(breaks)f(out)h(of)f(an)m(y)h(executing)h(lo)s
-(ops.)150 2354 y(In)31 b(all)h(cases,)h(Bash)f(ignores)g
-Ft(SIGQUIT)p Fu(.)42 b(If)32 b(job)f(con)m(trol)i(is)e(in)h(e\013ect)h
-(\(see)f(Chapter)f(7)h([Job)g(Con)m(trol],)150 2464 y(page)f(107\),)h
-(Bash)f(ignores)g Ft(SIGTTIN)p Fu(,)d Ft(SIGTTOU)p Fu(,)h(and)h
-Ft(SIGTSTP)p Fu(.)275 2592 y(Non-builtin)h(commands)g(started)g(b)m(y)g
-(Bash)h(ha)m(v)m(e)g(signal)g(handlers)e(set)i(to)g(the)g(v)-5
-b(alues)31 b(inherited)150 2702 y(b)m(y)37 b(the)h(shell)g(from)f(its)h
-(paren)m(t.)62 b(When)38 b(job)f(con)m(trol)i(is)e(not)h(in)f
-(e\013ect,)k(async)m(hronous)c(commands)150 2812 y(ignore)f
-Ft(SIGINT)e Fu(and)h Ft(SIGQUIT)e Fu(in)j(addition)f(to)i(these)f
-(inherited)f(handlers.)55 b(Commands)35 b(run)f(as)i(a)150
-2921 y(result)27 b(of)h(command)f(substitution)h(ignore)g(the)g(k)m
-(eyb)s(oard-generated)g(job)g(con)m(trol)h(signals)f
-Ft(SIGTTIN)p Fu(,)150 3031 y Ft(SIGTTOU)p Fu(,)h(and)g
-Ft(SIGTSTP)p Fu(.)275 3160 y(The)h(shell)i(exits)g(b)m(y)f(default)g
-(up)s(on)f(receipt)i(of)f(a)h Ft(SIGHUP)p Fu(.)42 b(Before)32
-b(exiting,)h(an)e(in)m(teractiv)m(e)j(shell)150 3269
-y(resends)41 b(the)i Ft(SIGHUP)e Fu(to)i(all)g(jobs,)i(running)c(or)h
-(stopp)s(ed.)76 b(Stopp)s(ed)41 b(jobs)h(are)h(sen)m(t)g
-Ft(SIGCONT)d Fu(to)150 3379 y(ensure)32 b(that)h(they)g(receiv)m(e)i
-(the)e Ft(SIGHUP)p Fu(.)47 b(T)-8 b(o)33 b(prev)m(en)m(t)g(the)g(shell)
-g(from)g(sending)f(the)h Ft(SIGHUP)e Fu(signal)150 3488
-y(to)i(a)g(particular)g(job,)g(it)g(should)f(b)s(e)g(remo)m(v)m(ed)h
-(from)g(the)f(jobs)g(table)i(with)e(the)h Ft(disown)e
-Fu(builtin)h(\(see)150 3598 y(Section)c(7.2)g([Job)e(Con)m(trol)i
-(Builtins],)g(page)g(108\))h(or)e(mark)m(ed)g(to)g(not)g(receiv)m(e)i
-Ft(SIGHUP)c Fu(using)i Ft(disown)150 3707 y(-h)p Fu(.)275
-3836 y(If)38 b(the)h Ft(huponexit)e Fu(shell)i(option)g(has)g(b)s(een)f
-(set)i(with)f Ft(shopt)e Fu(\(see)j(Section)g(4.3.2)h([The)e(Shopt)150
-3946 y(Builtin],)31 b(page)g(66\),)h(Bash)f(sends)e(a)i
+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 4075 y(If)38 b(Bash)h(is)g(w)m(aiting)h(for)f(a)g
+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 4184 y(has)c(b)s(een)f(set,)i(the)f(trap)g(will)g
+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 4294 y(w)m(aiting)j(for)f(an)g(async)m
+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 4403 y(whic)m(h)d(a)g(trap)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
-4513 y(status)c(greater)g(than)f(128,)i(immediately)g(after)f(whic)m(h)
-f(the)h(trap)f(is)g(executed.)150 4742 y Fs(3.8)68 b(Shell)45
-b(Scripts)150 4902 y Fu(A)30 b(shell)f(script)h(is)f(a)h(text)h(\014le)
-f(con)m(taining)h(shell)f(commands.)40 b(When)29 b(suc)m(h)g(a)h
-(\014le)g(is)f(used)g(as)h(the)g(\014rst)150 5011 y(non-option)c
-(argumen)m(t)h(when)e(in)m(v)m(oking)i(Bash,)g(and)f(neither)g(the)g
-Ft(-c)g Fu(nor)f Ft(-s)h Fu(option)g(is)g(supplied)f(\(see)150
-5121 y(Section)39 b(6.1)g([In)m(v)m(oking)g(Bash],)h(page)f(86\),)i
-(Bash)d(reads)g(and)f(executes)i(commands)f(from)f(the)i(\014le,)150
-5230 y(then)32 b(exits.)46 b(This)32 b(mo)s(de)f(of)i(op)s(eration)f
+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 5340 y(for)d(the)g(\014le)g(in)g
+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.)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)275 299
-y(When)34 b(Bash)h(runs)e(a)i(shell)g(script,)g(it)h(sets)f(the)f(sp)s
-(ecial)i(parameter)f Ft(0)f Fu(to)h(the)g(name)g(of)g(the)g(\014le,)150
-408 y(rather)k(than)g(the)h(name)f(of)h(the)f(shell,)j(and)d(the)h(p)s
-(ositional)g(parameters)f(are)h(set)g(to)g(the)g(remain-)150
-518 y(ing)f(argumen)m(ts,)j(if)d(an)m(y)g(are)g(giv)m(en.)67
-b(If)39 b(no)g(additional)g(argumen)m(ts)h(are)f(supplied,)h(the)f(p)s
-(ositional)150 628 y(parameters)31 b(are)f(unset.)275
-762 y(A)39 b(shell)h(script)f(ma)m(y)h(b)s(e)f(made)h(executable)h(b)m
+(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
-872 y(execute)j(bit.)73 b(When)41 b(Bash)g(\014nds)e(suc)m(h)i(a)h
+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 981 y(spa)m(wns)30 b(a)g(subshell)g(to)h(execute)h
-(it.)41 b(In)30 b(other)g(w)m(ords,)g(executing)390 1116
-y Ft(filename)46 b Fj(arguments)150 1250 y Fu(is)30 b(equiv)-5
-b(alen)m(t)32 b(to)f(executing)390 1385 y Ft(bash)47
-b(filename)e Fj(arguments)150 1519 y Fu(if)30 b Ft(filename)d
-Fu(is)j(an)f(executable)j(shell)e(script.)40 b(This)29
-b(subshell)g(reinitializes)i(itself,)g(so)f(that)h(the)e(e\013ect)150
-1629 y(is)36 b(as)h(if)g(a)f(new)g(shell)h(had)f(b)s(een)g(in)m(v)m(ok)
-m(ed)h(to)h(in)m(terpret)e(the)h(script,)h(with)e(the)h(exception)h
-(that)f(the)150 1738 y(lo)s(cations)25 b(of)g(commands)e(remem)m(b)s
-(ered)h(b)m(y)g(the)g(paren)m(t)g(\(see)h(the)f(description)g(of)g
-Ft(hash)f Fu(in)h(Section)h(4.1)150 1848 y([Bourne)30
-b(Shell)h(Builtins],)g(page)g(44\))h(are)e(retained)h(b)m(y)f(the)h(c)m
-(hild.)275 1983 y(Most)36 b(v)m(ersions)g(of)g(Unix)f(mak)m(e)h(this)g
-(a)g(part)f(of)h(the)g(op)s(erating)g(system's)f(command)h(execution)
-150 2092 y(mec)m(hanism.)50 b(If)33 b(the)g(\014rst)g(line)h(of)f(a)h
-(script)f(b)s(egins)g(with)g(the)g(t)m(w)m(o)i(c)m(haracters)g(`)p
-Ft(#!)p Fu(',)f(the)g(remainder)150 2202 y(of)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 2311
-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 2421 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 2555 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 2665 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 2775 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)150 2884 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
-2994 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 3103 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 3213 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 3323 y(will)31 b(w)m(ork.)275
-3457 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
-3567 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 3676 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 3786 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
+(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: 44 50
-TeXDict begin 44 49 bop 3659 -116 a Fu(44)150 299 y Fp(4)80
+%%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(8\),)j(the)d(shell)g(executes)h(the)f(command)f
+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
@@ -11327,12 +11631,12 @@ b(Builtin)150 828 y(commands)f(are)h(necessary)g(to)g(implemen)m(t)g
 (other)g(c)m(hapters:)69 b(builtin)43 b(commands)h(whic)m(h)150
 1412 y(pro)m(vide)23 b(the)h(Bash)f(in)m(terface)i(to)f(the)g(job)f
 (con)m(trol)i(facilities)g(\(see)f(Section)h(7.2)f([Job)f(Con)m(trol)h
-(Builtins],)150 1521 y(page)37 b(108\),)i(the)d(directory)g(stac)m(k)h
-(\(see)g(Section)g(6.8.1)g([Directory)h(Stac)m(k)f(Builtins],)h(page)e
-(97\),)j(the)150 1631 y(command)23 b(history)h(\(see)g(Section)g(9.2)h
-([Bash)f(History)g(Builtins],)h(page)g(146\),)h(and)d(the)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(139\).)275
+(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
@@ -11368,1999 +11672,2061 @@ Fr(\014lename)39 b Fu(argumen)m(t)34 b(in)f(the)h(curren)m(t)g(shell)
 630 4134 y(con)m(text.)45 b(If)31 b Fr(\014lename)37
 b Fu(do)s(es)31 b(not)g(con)m(tain)i(a)e(slash,)h(the)g
 Ft(PATH)e Fu(v)-5 b(ariable)32 b(is)f(used)f(to)i(\014nd)630
-4244 y Fr(\014lename)p Fu(.)52 b(When)34 b(Bash)g(is)h(not)f(in)g
-Fm(posix)f Fu(mo)s(de,)i(the)g(curren)m(t)f(directory)g(is)g(searc)m
-(hed)630 4354 y(if)d Fr(\014lename)36 b Fu(is)31 b(not)h(found)d(in)i
-Ft($PATH)p Fu(.)41 b(If)31 b(an)m(y)g Fr(argumen)m(ts)k
-Fu(are)c(supplied,)f(they)i(b)s(ecome)630 4463 y(the)e(p)s(ositional)h
-(parameters)g(when)e Fr(\014lename)35 b Fu(is)30 b(executed.)42
-b(Otherwise)30 b(the)g(p)s(ositional)630 4573 y(parameters)40
-b(are)f(unc)m(hanged.)67 b(If)39 b(the)g Ft(-T)g Fu(option)g(is)h
-(enabled,)h Ft(source)d Fu(inherits)h(an)m(y)630 4682
-y(trap)31 b(on)g Ft(DEBUG)p Fu(;)f(if)i(it)f(is)g(not,)h(an)m(y)g
-Ft(DEBUG)e Fu(trap)h(string)g(is)g(sa)m(v)m(ed)h(and)f(restored)g
-(around)630 4792 y(the)41 b(call)i(to)e Ft(source)p Fu(,)i(and)d
-Ft(source)f Fu(unsets)i(the)g Ft(DEBUG)f Fu(trap)h(while)g(it)g
-(executes.)74 b(If)630 4902 y Ft(-T)39 b Fu(is)g(not)h(set,)j(and)c
-(the)g(sourced)h(\014le)f(c)m(hanges)i(the)e Ft(DEBUG)f
-Fu(trap,)k(the)e(new)f(v)-5 b(alue)40 b(is)630 5011 y(retained)e(when)e
-Ft(source)g Fu(completes.)63 b(The)37 b(return)f(status)h(is)h(the)f
-(exit)i(status)e(of)h(the)630 5121 y(last)g(command)e(executed,)j(or)e
-(zero)h(if)e(no)h(commands)f(are)h(executed.)61 b(If)36
-b Fr(\014lename)42 b Fu(is)630 5230 y(not)f(found,)h(or)e(cannot)h(b)s
-(e)f(read,)j(the)e(return)e(status)i(is)g(non-zero.)71
-b(This)40 b(builtin)g(is)630 5340 y(equiv)-5 b(alen)m(t)32
-b(to)f Ft(source)p Fu(.)p eop end
-%%Page: 45 51
-TeXDict begin 45 50 bop 150 -116 a Fu(Chapter)30 b(4:)41
-b(Shell)30 b(Builtin)h(Commands)2069 b(45)150 299 y Ft(break)870
-428 y(break)46 b([)p Fj(n)p Ft(])630 558 y Fu(Exit)f(from)f(a)g
+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 667 y(enclosing)c(lo)s(op)f(is)h(exited.)70
+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 777 y(status)31 b(is)f(zero)h(unless)f
+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
-927 y Ft(cd)870 1056 y(cd)47 b([-L|[-P)f([-e]])g([-@])h([)p
-Fj(directory)p Ft(])630 1186 y Fu(Change)27 b(the)g(curren)m(t)f(w)m
+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 1295
-y(the)f(v)-5 b(alue)26 b(of)f(the)h Ft(HOME)e Fu(shell)i(v)-5
-b(ariable)26 b(is)g(used.)38 b(An)m(y)25 b(additional)i(argumen)m(ts)e
-(follo)m(wing)630 1405 y Fr(directory)39 b Fu(are)31
-b(ignored.)41 b(If)30 b(the)h(shell)g(v)-5 b(ariable)31
-b Ft(CDPATH)e Fu(exists,)i(it)g(is)g(used)f(as)g(a)h(searc)m(h)630
-1514 y(path:)39 b(eac)m(h)29 b(directory)g(name)f(in)f
-Ft(CDPATH)g Fu(is)h(searc)m(hed)g(for)g Fr(directory)p
-Fu(,)h(with)f(alternativ)m(e)630 1624 y(directory)j(names)g(in)f
-Ft(CDPATH)f Fu(separated)j(b)m(y)e(a)h(colon)h(\(`)p
-Ft(:)p Fu('\).)43 b(If)30 b Fr(directory)39 b Fu(b)s(egins)30
-b(with)630 1733 y(a)h(slash,)f Ft(CDPATH)f Fu(is)h(not)h(used.)630
-1863 y(The)g Ft(-P)h Fu(option)g(means)g(to)h(not)f(follo)m(w)h(sym)m
-(b)s(olic)g(links:)44 b(sym)m(b)s(olic)32 b(links)g(are)g(resolv)m(ed)
-630 1973 y(while)41 b Ft(cd)f Fu(is)h(tra)m(v)m(ersing)h
+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 2082 y Fr(directory)p
-Fu(.)630 2212 y(By)34 b(default,)h(or)e(when)g(the)g
+(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 2321 y(resolv)m(ed)31 b(after)g
+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 2451 y(If)35 b(`)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
-2560 y(ceding)31 b(pathname)f(comp)s(onen)m(t,)h(bac)m(k)g(to)g(a)g
+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 2690 y(If)i(the)i Ft(-e)e Fu(option)h(is)g(supplied)f(with)g
+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
-2800 y(b)s(e)k(successfully)g(determined)g(after)i(a)e(successful)h
+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
-2909 y(an)30 b(unsuccessful)f(status.)630 3039 y(On)41
+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
-3148 y(asso)s(ciated)32 b(with)e(a)h(\014le)f(as)h(a)f(directory)-8
-b(.)630 3278 y(If)41 b Fr(directory)49 b Fu(is)41 b(`)p
+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 3387
-y(attempted.)630 3517 y(If)33 b(a)h(non-empt)m(y)g(directory)g(name)f
+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 3626 y(men)m(t,)28
+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 3736 y(w)m(orking)k
+(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
-3866 y(The)f(return)g(status)h(is)f(zero)i(if)e(the)h(directory)g(is)g
-(successfully)g(c)m(hanged,)g(non-zero)g(oth-)630 3975
-y(erwise.)150 4125 y Ft(continue)870 4254 y(continue)46
-b([)p Fj(n)p Ft(])630 4384 y Fu(Resume)32 b(the)g(next)g(iteration)i
+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 4493
+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 4603 y(greater)39
+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 4712
-y(than)30 b(or)g(equal)h(to)g(1.)150 4862 y Ft(eval)870
-4991 y(eval)47 b([)p Fj(arguments)p Ft(])630 5121 y Fu(The)25
+(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 5230 y(read)35 b(and)g(executed,)j
+(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 5340 y(there)31 b(are)f(no)h(argumen)m(ts)f
+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.)p eop end
-%%Page: 46 52
-TeXDict begin 46 51 bop 150 -116 a Fu(Chapter)30 b(4:)h(Shell)f
-(Builtin)h(Commands)2079 b(46)150 299 y Ft(exec)870 430
-y(exec)47 b([-cl])f([-a)h Fj(name)p Ft(])f([)p Fj(command)g
-Ft([)p Fj(arguments)p Ft(]])630 562 y Fu(If)36 b Fr(command)k
-Fu(is)c(supplied,)h(it)g(replaces)h(the)e(shell)h(without)f(creating)i
-(a)f(new)f(pro)s(cess.)630 671 y(If)k(the)h Ft(-l)e Fu(option)i(is)g
-(supplied,)h(the)e(shell)h(places)g(a)g(dash)f(at)h(the)f(b)s(eginning)
-g(of)h(the)630 781 y(zeroth)36 b(argumen)m(t)h(passed)e(to)h
-Fr(command)p Fu(.)57 b(This)35 b(is)h(what)f(the)h Ft(login)e
-Fu(program)i(do)s(es.)630 891 y(The)i Ft(-c)g Fu(option)g(causes)h
-Fr(command)j Fu(to)d(b)s(e)f(executed)h(with)f(an)g(empt)m(y)h(en)m
-(vironmen)m(t.)630 1000 y(If)c Ft(-a)g Fu(is)h(supplied,)f(the)h(shell)
-g(passes)f Fr(name)41 b Fu(as)36 b(the)f(zeroth)i(argumen)m(t)f(to)g
-Fr(command)p Fu(.)630 1110 y(If)c Fr(command)j Fu(cannot)e(b)s(e)f
+(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 1219 y(unless)27 b(the)g Ft(execfail)e Fu(shell)i(option)h
+(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 1329 y(in)m(teractiv)m(e)35 b(shell)d(returns)f(failure)h(if)g
+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 1439 y(unconditionally)j(if)g
+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 1548
+(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
-1658 y(the)g(return)e(status)i(is)f(zero;)h(otherwise)g(the)g(return)e
-(status)i(is)f(non-zero.)150 1811 y Ft(exit)870 1943
-y(exit)47 b([)p Fj(n)p Ft(])630 2074 y Fu(Exit)30 b(the)g(shell,)h
+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 2184
+(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
-2293 y(b)s(efore)j(the)h(shell)f(terminates.)150 2447
-y Ft(export)870 2578 y(export)46 b([-fn])g([-p])h([)p
-Fj(name)p Ft([=)p Fj(value)p Ft(]])630 2710 y Fu(Mark)40
+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
-2819 y Ft(-f)33 b Fu(option)h(is)g(supplied,)f(the)h
+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 2929 y(refer)c(to)h(shell)g(v)-5 b(ariables.)41
+(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 3039 y(exp)s(ort.)52 b(If)33
-b(no)h Fr(names)k Fu(are)c(supplied,)g(or)g(if)g(the)g
-Ft(-p)g Fu(option)g(is)g(giv)m(en,)j(a)d(list)h(of)f(names)630
-3148 y(of)d(all)h(exp)s(orted)e(v)-5 b(ariables)31 b(is)g(displa)m(y)m
+(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 3258 y(that)25 b(ma)m(y)g(b)s(e)f(reused)g(as)h(input.)38
+(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
-3367 y(of)31 b(the)f(v)-5 b(ariable)31 b(is)g(set)g(to)g
-Fr(v)-5 b(alue)p Fu(.)630 3499 y(The)29 b(return)e(status)j(is)f(zero)h
+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 3608 y(is)k(not)g(a)h(v)-5 b(alid)33
+(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 3718 y(shell)d(function.)150
-3871 y Ft(getopts)870 4003 y(getopts)46 b Fj(optstring)f(name)i
-Ft([)p Fj(arg)f Ft(...])630 4134 y(getopts)28 b Fu(is)i(used)g(b)m(y)g
+(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 4244 y(tains)k(the)g(option)f(c)m
+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 4354 y(colon,)33
+(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 4463
+(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 4573 y(used)d(as)g(option)h(c)m
+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 4682 y(option)29
+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
-4792 y(index)33 b(of)g(the)h(next)f(argumen)m(t)h(to)g(b)s(e)e(pro)s
+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 4902 y Fu(is)41 b(initialized)i(to)f(1)f(eac)m
+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)630 5011 y(option)36 b(requires)e(an)h(argumen)m
-(t,)i Ft(getopts)c Fu(places)j(that)g(argumen)m(t)g(in)m(to)g(the)f(v)
--5 b(ariable)630 5121 y Ft(OPTARG)p Fu(.)55 b(The)35
-b(shell)g(do)s(es)h(not)g(reset)g Ft(OPTIND)e Fu(automatically;)41
-b(it)36 b(m)m(ust)f(b)s(e)g(man)m(ually)630 5230 y(reset)i(b)s(et)m(w)m
-(een)g(m)m(ultiple)h(calls)f(to)g Ft(getopts)e Fu(within)h(the)h(same)g
-(shell)f(in)m(v)m(o)s(cation)j(if)e(a)630 5340 y(new)30
-b(set)h(of)f(parameters)h(is)f(to)i(b)s(e)d(used.)p eop
-end
-%%Page: 47 53
-TeXDict begin 47 52 bop 150 -116 a Fu(Chapter)30 b(4:)41
-b(Shell)30 b(Builtin)h(Commands)2069 b(47)630 299 y(When)41
-b(the)h(end)e(of)i(options)g(is)f(encoun)m(tered,)k Ft(getopts)39
-b Fu(exits)j(with)f(a)h(return)e(v)-5 b(alue)630 408
-y(greater)32 b(than)e(zero.)41 b Ft(OPTIND)29 b Fu(is)h(set)h(to)g(the)
-g(index)f(of)g(the)h(\014rst)f(non-option)g(argumen)m(t,)630
-518 y(and)g Fr(name)35 b Fu(is)c(set)g(to)g(`)p Ft(?)p
-Fu('.)630 655 y Ft(getopts)c Fu(normally)j(parses)e(the)i(p)s
+(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
-765 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 902 y
-Ft(getopts)h Fu(can)h(rep)s(ort)g(errors)g(in)h(t)m(w)m(o)h(w)m(a)m
+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
+Ft(getopts)h Fu(can)h(rep)s(ort)g(errors)g(in)h(t)m(w)m(o)h(w)m(a)m
 (ys.)51 b(If)33 b(the)h(\014rst)e(c)m(haracter)k(of)d
-Fr(optstring)42 b Fu(is)34 b(a)630 1011 y(colon,)g Fr(silen)m(t)h
+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 1121 y(are)c(prin)m(ted)e(when)g
+(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 1230 y(If)34 b(the)g(v)-5
+(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
-1340 y(the)c(\014rst)e(c)m(haracter)j(of)f Ft(optstring)d
-Fu(is)i(not)h(a)f(colon.)630 1477 y(If)39 b(an)h(in)m(v)-5
+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
-1587 y(prin)m(ts)f(an)h(error)f(message)h(and)f(unsets)g
+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 1696 y(c)m(haracter)32 b(found)d(is)h(placed)h(in)f
+(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
-1833 y(If)c(a)g(required)f(argumen)m(t)i(is)f(not)g(found,)g(and)f
+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
-1943 y(\(`)p Ft(?)p Fu('\))h(is)g(placed)g(in)f Fr(name)p
+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 2052 y Ft(getopts)28 b
+(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 2162 y(option)g(c)m(haracter)h
-(found.)150 2326 y Ft(hash)870 2463 y(hash)47 b([-r])f([-p)h
-Fj(filename)p Ft(])e([-dt])i([)p Fj(name)p Ft(])630 2600
+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
-2710 y(sp)s(eci\014ed)i(as)i Fr(name)k Fu(argumen)m(ts,)c(so)g(they)f
+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
-2819 y(in)m(v)m(o)s(cations.)79 b(The)41 b(commands)h(are)h(found)e(b)m
-(y)h(searc)m(hing)i(through)d(the)i(directories)630 2929
+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 3039 y Fu(option)d(inhibits)f(the)h(path)g(searc)m(h,)h(and)e
+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 3148 y(The)42 b Ft(-r)g Fu(option)h(causes)f(the)h
+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 3258 y Fu(option)31 b(causes)g(the)f(shell)h(to)g
+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 3367 y Ft(-t)39 b
+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 3477
+(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 3587 y(b)s(efore)h(the)i(hashed)e(full)g
+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 3696 y(in)23 b(a)h(format)g(that)g(ma)m(y)g(b)
+(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 3806 y Fu(is)35 b(supplied,)f
+(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 3915 y(status)d(is)f(zero)h(unless)f(a)h
+(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 4080 y Ft(pwd)870 4217
-y(pwd)47 b([-LP])630 4354 y Fu(Prin)m(t)29 b(the)g(absolute)h(pathname)
+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 4463 y(is)39 b(supplied,)h(the)f
+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 4573 y Fu(option)k(is)g(supplied,)
+(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 4682 y(return)26 b(status)h(is)h(zero)g(unless)e
+(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 4792 y(of)k(the)f(curren)m(t)g(directory)h(or)f(an)h(in)m(v)-5
-b(alid)31 b(option)g(is)f(supplied.)150 4956 y Ft(readonly)870
-5093 y(readonly)46 b([-aAf])g([-p])g([)p Fj(name)p Ft([=)p
-Fj(value)p Ft(]])e(...)630 5230 y Fu(Mark)33 b(eac)m(h)h
+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
-5340 y(b)m(y)38 b(subsequen)m(t)g(assignmen)m(t.)65 b(If)38
+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)p eop end
-%%Page: 48 54
-TeXDict begin 48 53 bop 150 -116 a Fu(Chapter)30 b(4:)41
-b(Shell)30 b(Builtin)h(Commands)2069 b(48)630 299 y(a)37
-b(shell)g(function.)59 b(The)36 b Ft(-a)g Fu(option)h(means)f(eac)m(h)i
-Fr(name)k Fu(refers)36 b(to)h(an)f(indexed)g(arra)m(y)630
-408 y(v)-5 b(ariable;)28 b(the)f Ft(-A)e Fu(option)h(means)g(eac)m(h)h
+Fr(name)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 518 y(If)35 b(b)s(oth)g(options)h(are)h(supplied,)f
+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 628 y(giv)m(en,)k(or)c(if)h(the)g
+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 737 y(The)32 b(other)g(options)g(ma)m(y)h
-(b)s(e)f(used)f(to)i(restrict)g(the)f(output)g(to)h(a)f(subset)g(of)g
-(the)g(set)h(of)630 847 y(readonly)c(names.)41 b(The)28
+(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 956 y(ma)m(y)j(b)s(e)e(reused)g(as)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 1066 y(the)i(v)-5 b(ariable)34 b(is)f(set)i(to)f
+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 1176
+(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 1285 y(name,)h(or)f(the)h Ft(-f)e
+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 1462 y Ft(return)870 1606 y(return)46
-b([)p Fj(n)p Ft(])630 1749 y Fu(Cause)37 b(a)g(shell)h(function)f(to)g
+(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 1858 y(If)h Fr(n)h
+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
-1968 y(executed)i(in)f(the)g(function.)72 b(If)41 b Ft(return)e
+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
-2078 y(command)d(used)f(to)i(determine)f(the)g(status)g(is)h(the)f
-(last)h(command)e(executed)i(b)s(efore)630 2187 y(the)27
+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 2297
+(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 2406 y(b)s(efore)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
-2516 y(a)34 b(script)g(b)s(eing)g(executed)g(with)g(the)g
+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 2626 y(exit)j(status)f(of)g(the)g(last)h
+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 2735 y(of)i(the)g(script.)65 b(If)38 b Fr(n)g Fu(is)h(supplied,)h
+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 2845 y(An)m(y)g(command)f(asso)s(ciated)j(with)d(the)h
+(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
-2954 y(resumes)29 b(after)h(the)g(function)g(or)g(script.)40
+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 3064 y(supplied)h(a)i(non-n)m(umeric)g(argumen)m(t)g(or)f(is)
+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
-3173 y(the)g(execution)g(of)g(a)f(script)h(b)m(y)f Ft(.)g
-Fu(or)g Ft(source)p Fu(.)150 3351 y Ft(shift)870 3494
-y(shift)46 b([)p Fj(n)p Ft(])630 3637 y Fu(Shift)41 b(the)g(p)s
+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 3747
+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 3856 y(n)m(um)m(b)s(ers)d Ft($#)i Fu(do)m(wn)f(to)i
+(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 3966 y(than)g(or)g(equal)h(to)g Ft($#)p Fu(.)46
+(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 4075
+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
-4185 y(is)g(zero)i(unless)d Fr(n)h Fu(is)g(greater)i(than)e
+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
-4362 y Ft(test)150 4472 y([)870 4615 y(test)47 b Fj(expr)630
-4758 y Fu(Ev)-5 b(aluate)43 b(a)f(conditional)h(expression)f
+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 4868 y(\(false\).)g(Eac)m(h)31 b(op)s(erator)f(and)f(op)s(erand)
+(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
-4977 y(are)26 b(comp)s(osed)f(of)g(the)h(primaries)f(describ)s(ed)f(b)s
-(elo)m(w)h(in)g(Section)h(6.4)h([Bash)e(Conditional)630
-5087 y(Expressions],)39 b(page)g(91.)64 b Ft(test)37
-b Fu(do)s(es)g(not)h(accept)i(an)m(y)e(options,)i(nor)e(do)s(es)f(it)h
-(accept)630 5197 y(and)30 b(ignore)h(an)f(argumen)m(t)h(of)f
-Ft(--)g Fu(as)h(signifying)f(the)h(end)f(of)g(options.)630
-5340 y(When)g(the)h Ft([)f Fu(form)g(is)g(used,)g(the)g(last)i(argumen)
-m(t)e(to)i(the)e(command)g(m)m(ust)h(b)s(e)e(a)i Ft(])p
-Fu(.)p eop end
-%%Page: 49 55
-TeXDict begin 49 54 bop 150 -116 a Fu(Chapter)30 b(4:)41
-b(Shell)30 b(Builtin)h(Commands)2069 b(49)630 299 y(Expressions)23
-b(ma)m(y)h(b)s(e)e(com)m(bined)i(using)f(the)h(follo)m(wing)h(op)s
-(erators,)g(listed)f(in)f(decreasing)630 408 y(order)30
-b(of)h(precedence.)43 b(The)30 b(ev)-5 b(aluation)33
-b(dep)s(ends)28 b(on)j(the)g(n)m(um)m(b)s(er)f(of)h(argumen)m(ts;)g
-(see)630 518 y(b)s(elo)m(w.)41 b(Op)s(erator)30 b(precedence)h(is)f
-(used)g(when)f(there)i(are)f(\014v)m(e)h(or)f(more)h(argumen)m(ts.)630
-673 y Ft(!)f Fj(expr)210 b Fu(T)-8 b(rue)30 b(if)g Fr(expr)37
-b Fu(is)30 b(false.)630 829 y Ft(\()g Fj(expr)f Ft(\))133
-b Fu(Returns)23 b(the)i(v)-5 b(alue)25 b(of)f Fr(expr)p
-Fu(.)38 b(This)24 b(ma)m(y)h(b)s(e)e(used)h(to)h(o)m(v)m(erride)g(the)g
-(normal)1110 938 y(precedence)31 b(of)f(op)s(erators.)630
-1093 y Fj(expr1)f Ft(-a)h Fj(expr2)1110 1203 y Fu(T)-8
-b(rue)30 b(if)g(b)s(oth)g Fr(expr1)37 b Fu(and)30 b Fr(expr2)38
-b Fu(are)30 b(true.)630 1358 y Fj(expr1)f Ft(-o)h Fj(expr2)1110
-1468 y Fu(T)-8 b(rue)30 b(if)g(either)h Fr(expr1)38 b
-Fu(or)30 b Fr(expr2)37 b Fu(is)31 b(true.)630 1623 y(The)37
-b Ft(test)f Fu(and)g Ft([)h Fu(builtins)g(ev)-5 b(aluate)39
-b(conditional)f(expressions)f(using)g(a)g(set)h(of)f(rules)630
-1733 y(based)30 b(on)g(the)h(n)m(um)m(b)s(er)e(of)h(argumen)m(ts.)630
-1888 y(0)h(argumen)m(ts)1110 1998 y(The)f(expression)g(is)g(false.)630
-2153 y(1)h(argumen)m(t)1110 2262 y(The)f(expression)g(is)g(true)h(if,)f
-(and)g(only)g(if,)h(the)g(argumen)m(t)f(is)h(not)f(n)m(ull.)630
-2418 y(2)h(argumen)m(ts)1110 2527 y(If)f(the)h(\014rst)f(argumen)m(t)h
-(is)g(`)p Ft(!)p Fu(',)g(the)g(expression)g(is)g(true)f(if)h(and)f
-(only)h(if)g(the)1110 2637 y(second)j(argumen)m(t)f(is)h(n)m(ull.)50
-b(If)33 b(the)h(\014rst)e(argumen)m(t)i(is)g(one)g(of)f(the)h(unary)
-1110 2746 y(conditional)42 b(op)s(erators)f(\(see)g(Section)h(6.4)f
-([Bash)g(Conditional)g(Expres-)1110 2856 y(sions],)34
-b(page)f(91\),)i(the)e(expression)f(is)h(true)g(if)g(the)g(unary)e
-(test)j(is)f(true.)47 b(If)1110 2966 y(the)33 b(\014rst)g(argumen)m(t)h
-(is)f(not)g(a)h(v)-5 b(alid)34 b(unary)e(op)s(erator,)i(the)g
-(expression)f(is)1110 3075 y(false.)630 3230 y(3)e(argumen)m(ts)1110
-3340 y(The)f(follo)m(wing)i(conditions)f(are)f(applied)h(in)f(the)g
-(order)g(listed.)1159 3472 y(1.)61 b(If)29 b(the)g(second)g(argumen)m
-(t)h(is)f(one)h(of)f(the)h(binary)e(conditional)j(op)s(era-)1290
-3582 y(tors)c(\(see)h(Section)g(6.4)g([Bash)g(Conditional)f
-(Expressions],)h(page)f(91\),)1290 3692 y(the)d(result)g(of)f(the)h
-(expression)g(is)g(the)f(result)h(of)g(the)g(binary)f(test)h(using)1290
-3801 y(the)35 b(\014rst)e(and)h(third)g(argumen)m(ts)h(as)f(op)s
-(erands.)52 b(The)34 b(`)p Ft(-a)p Fu(')g(and)g(`)p Ft(-o)p
-Fu(')1290 3911 y(op)s(erators)24 b(are)g(considered)g(binary)f(op)s
-(erators)h(when)f(there)h(are)h(three)1290 4020 y(argumen)m(ts.)1159
-4153 y(2.)61 b(If)41 b(the)h(\014rst)e(argumen)m(t)i(is)f(`)p
+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 4262 y(t)m(w)m(o-argumen)m(t)33 b(test)e(using)f(the)g(second)h
-(and)e(third)h(argumen)m(ts.)1159 4395 y(3.)61 b(If)35
+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 4504
+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 4614 y(argumen)m(t.)1159
-4746 y(4.)61 b(Otherwise,)30 b(the)h(expression)f(is)g(false.)630
-4902 y(4)h(argumen)m(ts)1110 5011 y(If)h(the)i(\014rst)e(argumen)m(t)h
-(is)g(`)p Ft(!)p Fu(',)h(the)f(result)g(is)g(the)g(negation)h(of)f(the)
-g(three-)1110 5121 y(argumen)m(t)h(expression)f(comp)s(osed)h(of)f(the)
-h(remaining)g(argumen)m(ts.)50 b(Oth-)1110 5230 y(erwise,)34
-b(the)f(expression)g(is)g(parsed)g(and)f(ev)-5 b(aluated)34
-b(according)h(to)e(prece-)1110 5340 y(dence)e(using)e(the)i(rules)f
-(listed)h(ab)s(o)m(v)m(e.)p eop end
-%%Page: 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(5)31
-b(or)f(more)h(argumen)m(ts)1110 408 y(The)43 b(expression)f(is)i
-(parsed)e(and)g(ev)-5 b(aluated)45 b(according)f(to)f(precedence)1110
-518 y(using)30 b(the)g(rules)g(listed)h(ab)s(o)m(v)m(e.)630
-690 y(When)40 b(used)f(with)g Ft(test)g Fu(or)h(`)p Ft([)p
-Fu(',)j(the)d(`)p Ft(<)p Fu(')g(and)f(`)p Ft(>)p Fu(')h(op)s(erators)g
-(sort)g(lexicographically)630 800 y(using)30 b(ASCI)s(I)f(ordering.)150
-972 y Ft(times)870 1113 y(times)630 1254 y Fu(Prin)m(t)37
-b(out)h(the)g(user)e(and)h(system)g(times)h(used)f(b)m(y)g(the)h(shell)
-f(and)g(its)h(c)m(hildren.)61 b(The)630 1363 y(return)29
-b(status)i(is)f(zero.)150 1536 y Ft(trap)870 1677 y(trap)47
-b([-lp])f([)p Fj(arg)p Ft(])g([)p Fj(sigspec)g Ft(...)o(])630
-1817 y Fu(The)d(commands)f(in)h Fr(arg)51 b Fu(are)44
-b(to)g(b)s(e)e(read)h(and)g(executed)h(when)e(the)h(shell)g(receiv)m
-(es)630 1927 y(signal)36 b Fr(sigsp)s(ec)p Fu(.)57 b(If)35
-b Fr(arg)44 b Fu(is)36 b(absen)m(t)g(\(and)f(there)h(is)g(a)f(single)i
-Fr(sigsp)s(ec)6 b Fu(\))35 b(or)h(equal)g(to)h(`)p Ft(-)p
-Fu(',)630 2037 y(eac)m(h)k(sp)s(eci\014ed)e(signal's)h(disp)s(osition)g
-(is)f(reset)i(to)f(the)g(v)-5 b(alue)40 b(it)g(had)f(when)g(the)h
-(shell)630 2146 y(w)m(as)33 b(started.)47 b(If)32 b Fr(arg)41
-b Fu(is)32 b(the)h(n)m(ull)f(string,)i(then)e(the)g(signal)i(sp)s
-(eci\014ed)d(b)m(y)i(eac)m(h)g Fr(sigsp)s(ec)630 2256
-y Fu(is)g(ignored)h(b)m(y)f(the)g(shell)h(and)e(commands)h(it)h(in)m(v)
-m(ok)m(es.)51 b(If)33 b Fr(arg)41 b Fu(is)33 b(not)h(presen)m(t)f(and)g
-Ft(-p)630 2365 y Fu(has)g(b)s(een)g(supplied,)f(the)i(shell)f(displa)m
-(ys)h(the)f(trap)g(commands)g(asso)s(ciated)i(with)e(eac)m(h)630
-2475 y Fr(sigsp)s(ec)p Fu(.)47 b(If)31 b(no)i(argumen)m(ts)f(are)h
-(supplied,)e(or)i(only)f Ft(-p)g Fu(is)g(giv)m(en,)i
-Ft(trap)d Fu(prin)m(ts)h(the)g(list)630 2585 y(of)c(commands)f(asso)s
-(ciated)i(with)f(eac)m(h)h(signal)f(n)m(um)m(b)s(er)e(in)i(a)g(form)f
-(that)h(ma)m(y)h(b)s(e)e(reused)630 2694 y(as)f(shell)h(input.)38
-b(The)26 b Ft(-l)f Fu(option)i(causes)f(the)g(shell)h(to)g(prin)m(t)e
-(a)i(list)f(of)h(signal)g(names)f(and)630 2804 y(their)33
-b(corresp)s(onding)f(n)m(um)m(b)s(ers.)47 b(Eac)m(h)34
-b Fr(sigsp)s(ec)39 b Fu(is)33 b(either)g(a)h(signal)g(name)f(or)g(a)g
-(signal)630 2913 y(n)m(um)m(b)s(er.)39 b(Signal)31 b(names)f(are)h
-(case)h(insensitiv)m(e)f(and)f(the)g Ft(SIG)g Fu(pre\014x)f(is)i
-(optional.)630 3054 y(If)k(a)g Fr(sigsp)s(ec)41 b Fu(is)35
-b Ft(0)g Fu(or)g Ft(EXIT)p Fu(,)g Fr(arg)43 b Fu(is)35
-b(executed)h(when)e(the)h(shell)h(exits.)55 b(If)35 b(a)g
-Fr(sigsp)s(ec)41 b Fu(is)630 3164 y Ft(DEBUG)p Fu(,)32
-b(the)g(command)g Fr(arg)40 b Fu(is)33 b(executed)g(b)s(efore)f(ev)m
-(ery)h(simple)f(command,)h Ft(for)e Fu(com-)630 3273
-y(mand,)d Ft(case)g Fu(command,)h Ft(select)e Fu(command,)i(ev)m(ery)h
-(arithmetic)g Ft(for)d Fu(command,)j(and)630 3383 y(b)s(efore)22
-b(the)g(\014rst)f(command)h(executes)i(in)e(a)g(shell)h(function.)37
-b(Refer)22 b(to)h(the)g(description)f(of)630 3493 y(the)i
-Ft(extdebug)d Fu(option)j(to)h(the)f Ft(shopt)e Fu(builtin)h(\(see)i
-(Section)f(4.3.2)i([The)d(Shopt)g(Builtin],)630 3602
-y(page)33 b(66\))g(for)f(details)h(of)f(its)h(e\013ect)g(on)f(the)g
-Ft(DEBUG)f Fu(trap.)46 b(If)31 b(a)i Fr(sigsp)s(ec)38
-b Fu(is)32 b Ft(RETURN)p Fu(,)f(the)630 3712 y(command)h
+(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 3821
+(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 3962 y(If)20 b(a)i Fr(sigsp)s(ec)27 b
+(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 4072 y(consist)35 b(of)g(a)f(single)h(simple)g(command\),)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
-4181 y(a)41 b(non-zero)g(exit)h(status,)h(sub)5 b(ject)41
+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)630 4291 y(not)c(executed)h(if)f(the)h(failed)f
-(command)g(is)g(part)g(of)h(the)f(command)g(list)h(immediately)630
-4401 y(follo)m(wing)30 b(an)e Ft(until)f Fu(or)i Ft(while)e
-Fu(k)m(eyw)m(ord,)i(part)g(of)f(the)h(test)g(follo)m(wing)h(the)f
-Ft(if)f Fu(or)g Ft(elif)630 4510 y Fu(reserv)m(ed)45
-b(w)m(ords,)j(part)c(of)h(a)g(command)g(executed)g(in)g(a)g
-Ft(&&)f Fu(or)h Ft(||)f Fu(list)h(except)h(the)630 4620
-y(command)28 b(follo)m(wing)j(the)d(\014nal)h Ft(&&)f
+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 4729 y(or)d(if)g(the)f(command's)h(return)f(status)h
+(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 4839 y(conditions)31
+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 4980 y(Signals)37 b(ignored)f(up)s(on)f(en)m(try)i
+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 5089 y(signals)28 b(that)f(are)h(not)f(b)s(eing)
+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 5199 y(or)i(subshell)g(en)m
-(vironmen)m(t)h(when)e(one)i(is)f(created.)630 5340 y(The)g(return)f
+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.)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)150 299 y Ft(umask)870
-434 y(umask)46 b([-p])h([-S])g([)p Fj(mode)p Ft(])630
-570 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 679 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
-789 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 899 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 1008
-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 1118 y(supplied,)f(and)f Fr(mo)s(de)37
+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 1227 y(input.)62 b(The)38
+(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 1337 y Fr(mo)s(de)d Fu(argumen)m(t)c
-(is)f(supplied,)g(and)f(non-zero)i(otherwise.)630 1473
+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
-1582 y(the)f(umask)g(is)h(subtracted)f(from)f Ft(7)p
+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 1692 y(of)d Ft(755)p Fu(.)150 1853 y
-Ft(unset)870 1989 y(unset)46 b([-fnv])g([)p Fj(name)p
-Ft(])630 2124 y Fu(Remo)m(v)m(e)36 b(eac)m(h)f(v)-5 b(ariable)35
+(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 2234
+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 2343 y(the)37
+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
-2453 y(the)34 b Ft(-n)e Fu(option)i(is)g(supplied,)f(and)g
-Fr(name)38 b Fu(is)c(a)f(v)-5 b(ariable)34 b(with)g(the)f
-Fr(nameref)51 b Fu(attribute,)630 2563 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 2672 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 2782 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 2891 y(an)m(y)-8
+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 3001 y(v)-5 b(ariables)29 b(lose)h(their)e(sp)s
+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 3110 y(the)35 b(description)h(of)f(the)g
+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 3220 y Fr(name)h Fu(is)30 b(readonly)-8
-b(.)150 3464 y Fs(4.2)68 b(Bash)45 b(Builtin)g(Commands)150
-3623 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
-3733 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 3895 y Ft(alias)870
-4031 y(alias)46 b([-p])h([)p Fj(name)p Ft([=)p Fj(value)p
-Ft(])d(...)o(])630 4166 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 4276 y(standard)g(output)g(in)g(a)h(form)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)630 4385 y(are)j(supplied,)e(an)i(alias)g(is)f
-(de\014ned)f(for)h(eac)m(h)h Fr(name)33 b Fu(whose)27
-b Fr(v)-5 b(alue)33 b Fu(is)27 b(giv)m(en.)41 b(If)26
-b(no)h Fr(v)-5 b(alue)630 4495 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 4605 y(Section)31
-b(6.6)h([Aliases],)g(page)f(94.)150 4766 y Ft(bind)870
-4902 y(bind)47 b([-m)g Fj(keymap)p Ft(])e([-lpsvPSVX])870
-5011 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
-5121 y(bind)g([-m)g Fj(keymap)p Ft(])e(-f)j Fj(filename)870
-5230 y Ft(bind)f([-m)g Fj(keymap)p Ft(])e(-x)j Fj(keyseq:shell-command)
-870 5340 y Ft(bind)f([-m)g Fj(keymap)p Ft(])e Fj(keyseq:function-name)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)870 299 y Ft(bind)47
-b([-m)g Fj(keymap)p Ft(])e Fj(keyseq:readline-command)630
-432 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(111\))g(k)m(ey)630
-542 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 651 y(or)44
-b(set)h(a)g(Readline)f(v)-5 b(ariable.)83 b(Eac)m(h)45
+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
-761 y(w)m(ould)e(app)s(ear)f(in)h(a)h(Readline)g(initialization)i
+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
-870 y(File],)c(page)d(114\),)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 980
+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 1113 y(Options,)e(if)h(supplied,)e(ha)m(v)m(e)i(the)g(follo)m
-(wing)h(meanings:)630 1270 y Ft(-m)e Fj(keymap)66 b Fu(Use)54
+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 1379 y(bindings.)46 b(Acceptable)34
+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 1489 y Ft(emacs-meta)p Fu(,)99 b Ft(emacs-ctlx)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 1598 y Ft(vi-insert)p Fu(.)81 b Ft(vi)44
+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 1708 y(synon)m(ym\);)30
+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 1864 y Ft(-l)384 b Fu(List)31 b(the)f(names)g(of)h(all)g
-(Readline)g(functions.)630 2021 y Ft(-p)384 b Fu(Displa)m(y)34
+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 2131 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 2287
+(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 2444 y Ft(-v)384 b Fu(Displa)m(y)25
+(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 2553
+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 2710 y Ft(-V)384 b Fu(List)31
+(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 2866 y Ft(-s)384 b Fu(Displa)m(y)39 b(Readline)f(k)m(ey)g
+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
-2976 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 3086
-y(Readline)d(initialization)i(\014le.)630 3242 y Ft(-S)384
+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 3352 y(they)31 b(output.)630
-3508 y Ft(-f)f Fj(filename)1110 3618 y Fu(Read)h(k)m(ey)g(bindings)e
-(from)h Fr(\014lename)p Fu(.)630 3774 y Ft(-q)g Fj(function)1110
-3884 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 4041 y Ft(-u)g
-Fj(function)1110 4150 y Fu(Un)m(bind)f(all)i(k)m(eys)g(b)s(ound)e(to)i
-(the)f(named)g Fr(function)p Fu(.)630 4307 y Ft(-r)g
-Fj(keyseq)66 b Fu(Remo)m(v)m(e)32 b(an)m(y)f(curren)m(t)f(binding)f
-(for)h Fr(k)m(eyseq)p Fu(.)630 4463 y Ft(-x)g Fj(keyseq:shell-command)
-1110 4573 y Fu(Cause)35 b Fr(shell-command)k Fu(to)d(b)s(e)f(executed)h
+(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
-4682 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 4792
+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 4902
-y Ft(READLINE_POINT)21 b Fu(and)k Ft(READLINE_MARK)c
-Fu(v)-5 b(ariables)26 b(to)g(the)g(curren)m(t)f(lo)s(ca-)1110
-5011 y(tion)f(of)g(the)g(insertion)g(p)s(oin)m(t)g(and)f(the)h(sa)m(v)m
-(ed)h(insertion)f(p)s(oin)m(t)g(\(the)g Fr(mark)6 b Fu(\),)1110
-5121 y(resp)s(ectiv)m(ely)-8 b(.)43 b(If)30 b(the)h(executed)g(command)
-g(c)m(hanges)g(the)g(v)-5 b(alue)31 b(of)g(an)m(y)g(of)1110
-5230 y Ft(READLINE_LINE)p Fu(,)40 b Ft(READLINE_POINT)p
-Fu(,)f(or)i Ft(READLINE_MARK)p Fu(,)e(those)i(new)1110
-5340 y(v)-5 b(alues)31 b(will)f(b)s(e)g(re\015ected)h(in)f(the)h
-(editing)g(state.)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 Ft(-X)384
+(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 408 y(commands)j(in)g(a)h
+(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
-568 y(The)26 b(return)f(status)i(is)f(zero)i(unless)d(an)i(in)m(v)-5
+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
-727 y Ft(builtin)870 862 y(builtin)46 b([)p Fj(shell-builtin)e
-Ft([)p Fj(args)p Ft(]])630 996 y Fu(Run)35 b(a)i(shell)f(builtin,)i
+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 1106 y(when)29 b(de\014ning)h(a)g(shell)h
+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 1215 y(the)k(functionalit)m(y)h(of)f(the)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
-1325 y(zero)e(if)g Fr(shell-builtin)f Fu(is)g(not)h(a)g(shell)f
-(builtin)g(command.)150 1484 y Ft(caller)870 1619 y(caller)46
-b([)p Fj(expr)p Ft(])630 1753 y Fu(Returns)34 b(the)g(con)m(text)j(of)e
+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 1863 y(executed)c(with)f(the)h Ft(.)f
-Fu(or)g Ft(source)f Fu(builtins\).)630 1998 y(Without)45
+(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 2107
+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
-2217 y Fu(displa)m(ys)k(the)f(line)h(n)m(um)m(b)s(er,)h(subroutine)d
+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
-2326 y(that)c(p)s(osition)g(in)f(the)h(curren)m(t)f(execution)i(call)g
+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
-2436 y(b)s(e)30 b(used,)g(for)g(example,)h(to)g(prin)m(t)f(a)h(stac)m
+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
-2570 y(The)d(return)g(v)-5 b(alue)29 b(is)g(0)g(unless)f(the)h(shell)g
+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 2680 y Fu(do)s(es)h(not)h(corresp)s(ond)e(to)i(a)g(v)-5
+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
-2839 y Ft(command)870 2974 y(command)46 b([-pVv])g Fj(command)g
-Ft([)p Fj(arguments)f Ft(...)o(])630 3108 y Fu(Runs)32
+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 3218
+(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 3328 y(executed.)59
+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 3437 y(the)c(function)f(will)h(execute)g(the)g(external)g
+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
-3547 y(tion)36 b(recursiv)m(ely)-8 b(.)56 b(The)34 b
+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 3656 y(guaran)m(teed)f(to)
+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 3766
+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
-3875 y Fr(command)34 b Fu(otherwise.)630 4010 y(If)e(either)h(the)f
-Ft(-V)g Fu(or)g Ft(-v)g Fu(option)h(is)f(supplied,)g(a)h(description)f
-(of)h Fr(command)j Fu(is)c(prin)m(ted.)630 4120 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 4229 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 4339 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
-4448 y(non-zero)31 b(if)f(not.)150 4608 y Ft(declare)870
-4742 y(declare)46 b([-aAfFgiIlnrtux])d([-p])k([)p Fj(name)p
-Ft([=)p Fj(value)p Ft(])d(...)o(])630 4877 y Fu(Declare)29
+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 4986 y(the)k(v)-5 b(alues)30 b(of)h(v)-5 b(ariables)31
-b(instead.)630 5121 y(The)k Ft(-p)f Fu(option)i(will)g(displa)m(y)f
+(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 5230 y Fu(is)i(used)g(with)g
+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 5340 y(ignored.)p
-eop end
-%%Page: 54 60
-TeXDict begin 54 59 bop 150 -116 a Fu(Chapter)30 b(4:)41
-b(Shell)30 b(Builtin)h(Commands)2069 b(54)630 299 y(When)40
-b 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
-408 y(tributes)31 b(and)f(v)-5 b(alues)31 b(of)g(all)h(v)-5
+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 518 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 628 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 737 y(displa)m(y)d(to)g
-(shell)f(functions.)630 877 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 986 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 1096 y Ft(shopt)24 b Fu(\(see)i(Section)g(4.3.2)i
-([The)d(Shopt)f(Builtin],)k(page)e(66\),)i(the)d(source)h(\014le)f
-(name)h(and)630 1205 y(line)31 b(n)m(um)m(b)s(er)e(where)h(eac)m(h)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 1345
+(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 1455 y(ev)m(en)g(when)e Ft(declare)f Fu(is)j(executed)g(in)f
+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
-1564 y(cases.)630 1704 y(The)50 b Ft(-I)h Fu(option)g(causes)h(lo)s
+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 1813 y Fr(nameref)63 b Fu(attribute\))46 b(and)f(v)-5
-b(alue)45 b(of)h(an)m(y)f(existing)i(v)-5 b(ariable)46
-b(with)f(the)g(same)h Fr(name)630 1923 y Fu(at)40 b(a)f(surrounding)d
+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
-2032 y(initially)32 b(unset.)630 2172 y(The)27 b(follo)m(wing)h
+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 2281 y(i\014ed)j(attributes)h
+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
-2451 y Ft(-a)384 b Fu(Eac)m(h)36 b Fr(name)k Fu(is)34
+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 2560 y(page)31 b(95\).)630 2730 y
+([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 2839 y(page)31 b(95\).)630 3009 y Ft(-f)384
-b Fu(Use)31 b(function)f(names)g(only)-8 b(.)630 3178
+(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 3288 y(\(see)29 b(Section)f(6.5)h([Shell)f
-(Arithmetic],)i(page)e(93\))h(is)f(p)s(erformed)e(when)h(the)1110
-3397 y(v)-5 b(ariable)31 b(is)g(assigned)f(a)h(v)-5 b(alue.)630
-3567 y Ft(-l)384 b Fu(When)26 b(the)g(v)-5 b(ariable)27
+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 3676 y(con)m(v)m(erted)k(to)f(lo)m(w)m(er-case.)
+(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
-3846 y Ft(-n)384 b Fu(Giv)m(e)28 b(eac)m(h)g Fr(name)k
-Fu(the)27 b Fr(nameref)44 b Fu(attribute,)28 b(making)f(it)h(a)f(name)f
-(reference)1110 3955 y(to)32 b(another)g(v)-5 b(ariable.)46
+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)1110 4065 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 4174 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
-4284 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 4394 y(attribute)31 b(cannot)g(b)s(e)f(applied)
-g(to)h(arra)m(y)g(v)-5 b(ariables.)630 4563 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 4672 y(b)m(y)30 b(subsequen)m(t)g(assignmen)m(t)h
-(statemen)m(ts)h(or)f(unset.)630 4842 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 4951
-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 5061 y(has)h(no)g(sp)s
-(ecial)h(meaning)g(for)f(v)-5 b(ariables.)630 5230 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
-5340 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.)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 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
-408 y(ronmen)m(t.)630 560 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 670 y(`)p Ft(+a)p Fu(')23
+(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 780 y(the)36 b(readonly)h
+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 889
+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 999 y(name)30 b(is)h(follo)m(w)m(ed)h(b)m(y)e(=)p
+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
-1130 y(When)41 b(using)g Ft(-a)g Fu(or)h Ft(-A)e Fu(and)h(the)h(comp)s
+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
-1239 y(v)-5 b(ariables,)28 b(additional)f(attributes)g(do)f(not)h(tak)m
+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
-1370 y(The)35 b(return)f(status)i(is)g(zero)g(unless)f(an)g(in)m(v)-5
+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
-1480 y(is)c(made)g(to)g(de\014ne)f(a)h(function)g(using)f(`)p
+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
-1589 y(a)42 b(v)-5 b(alue)43 b(to)g(a)f(readonly)g(v)-5
+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 1699 y(arra)m(y)30 b(v)-5 b(ariable)30
+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 1808 y([Arra)m(ys],)47 b(page)c(95\),)48
-b(one)43 b(of)g(the)g Fr(names)k Fu(is)c(not)g(a)g(v)-5
-b(alid)43 b(shell)g(v)-5 b(ariable)44 b(name,)i(an)630
-1918 y(attempt)28 b(is)f(made)h(to)f(turn)f(o\013)i(readonly)f(status)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
-2028 y(is)h(made)h(to)g(turn)e(o\013)i(arra)m(y)f(status)h(for)f(an)g
+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
-2137 y(displa)m(y)j(a)f(non-existen)m(t)i(function)e(with)g
-Ft(-f)p Fu(.)150 2289 y Ft(echo)870 2420 y(echo)47 b([-neE])f([)p
-Fj(arg)g Ft(...])630 2551 y Fu(Output)31 b(the)i Fr(arg)8
+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 2660 y(status)f(is)f(0)h(unless)f(a)
+(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 2770
+(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
-2880 y(escap)s(ed)43 b(c)m(haracters)h(is)e(enabled.)78
+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 2989 y(these)27 b(escap)s(e)g(c)m(haracters,)i(ev)m(en)e(on)g
+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
-3099 y(The)32 b Ft(xpg_echo)f Fu(shell)i(option)g(ma)m(y)h(b)s(e)e
+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
-3208 y(not)h Ft(echo)f Fu(expands)g(these)h(escap)s(e)h(c)m(haracters)g
+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
-3318 y Ft(--)c Fu(to)h(mean)f(the)h(end)f(of)g(options.)630
-3449 y Ft(echo)f Fu(in)m(terprets)i(the)f(follo)m(wing)i(escap)s(e)f
-(sequences:)630 3601 y Ft(\\a)384 b Fu(alert)31 b(\(b)s(ell\))630
-3753 y Ft(\\b)384 b Fu(bac)m(kspace)630 3905 y Ft(\\c)g
-Fu(suppress)28 b(further)h(output)630 4057 y Ft(\\e)630
-4166 y(\\E)384 b Fu(escap)s(e)630 4318 y Ft(\\f)g Fu(form)30
-b(feed)630 4470 y Ft(\\n)384 b Fu(new)30 b(line)630 4622
-y Ft(\\r)384 b Fu(carriage)32 b(return)630 4774 y Ft(\\t)384
-b Fu(horizon)m(tal)32 b(tab)630 4926 y Ft(\\v)384 b Fu(v)m(ertical)32
-b(tab)630 5078 y Ft(\\\\)384 b Fu(bac)m(kslash)630 5230
+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 5340 y(three)e(o)s(ctal)g
-(digits\))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 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 408 y Fu(\(one)31 b(or)f(t)m(w)m(o)i(hex)e(digits\))630
-563 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
-673 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 828 y Ft(\\U)p Fj(HHHHHHHH)1110
-938 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 1047 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 1202 y Ft(enable)870 1334 y(enable)46 b([-a])h([-dnps])f
-([-f)g Fj(filename)p Ft(])g([)p Fj(name)g Ft(...)o(])630
-1467 y Fu(Enable)36 b(and)f(disable)h(builtin)g(shell)g(commands.)56
+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
-1576 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 1686 y(sp)s(ecifying)27
+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 1795 y(b)s(efore)35
+(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
-1905 y Fr(name)5 b Fu(s)44 b(are)h(enabled.)82 b(F)-8
+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 2015 y Fu(instead)31 b(of)f(the)h(shell)f(builtin)g
+(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 2147 y(If)45 b(the)i Ft(-p)e Fu(option)h(is)g(supplied,)j(or)
+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 2256 y(builtins)37 b(is)h(prin)m(ted.)63 b(With)38
+(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 2366 y(shell)d(builtins.)57 b(The)35 b Ft(-a)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 2476 y(whether)30 b(or)g(not)h(it)g(is)f(enabled.)
-630 2608 y(The)22 b Ft(-f)f Fu(option)h(means)g(to)h(load)g(the)f(new)g
+(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 2717 y Fr(\014lename)p Fu(,)33 b(on)e(systems)h(that)h(supp)
-s(ort)d(dynamic)i(loading.)46 b(The)31 b Ft(-d)g Fu(option)h(will)h
-(delete)630 2827 y(a)e(builtin)f(loaded)h(with)f Ft(-f)p
-Fu(.)630 2959 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 3069 y(restricts)j Ft(enable)d
-Fu(to)j(the)f Fm(posix)f Fu(sp)s(ecial)i(builtins.)54
+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
-3178 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(72\).)630
-3311 y(The)26 b(return)f(status)h(is)g(zero)h(unless)e(a)i
-Fr(name)k Fu(is)26 b(not)g(a)h(shell)f(builtin)g(or)g(there)g(is)g(an)g
-(error)630 3420 y(loading)31 b(a)g(new)f(builtin)g(from)g(a)g(shared)g
-(ob)5 b(ject.)150 3575 y Ft(help)870 3707 y(help)47 b([-dms])f([)p
-Fj(pattern)p Ft(])630 3840 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 3949 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 4059 y(the)h(builtins)e(is)i(prin)
-m(ted.)630 4191 y(Options,)f(if)h(supplied,)e(ha)m(v)m(e)i(the)g(follo)
-m(wing)h(meanings:)630 4346 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
-4501 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
-4656 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 4811 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 4966 y Ft(let)870 5098 y(let)47
-b Fj(expression)e Ft([)p Fj(expression)g Ft(...)o(])630
-5230 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 5340 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)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(Arithmetic],)51
-b(page)46 b(93.)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
-408 y(otherwise)31 b(0)g(is)f(returned.)150 568 y Ft(local)870
-702 y(local)46 b([)p Fj(option)p Ft(])g Fj(name)p Ft([=)p
-Fj(value)p Ft(])e(...)630 836 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 946 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 1055 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
-1165 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 1275 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 1384 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 1494 y(v)-5 b(alues)36 b(when)e(the)i(function)f
+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 1603 y Fu(commands)j(w)m(ere)g(executed)h(to)
+(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 1713 y(function.)j(The)30 b(return)g(status)h(is)g
+(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 1823 y(in)m(v)-5 b(alid)31 b Fr(name)k Fu(is)c(supplied,)e(or)i
+(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
-1982 y Ft(logout)870 2116 y(logout)46 b([)p Fj(n)p Ft(])630
-2250 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 2409 y
-Ft(mapfile)870 2544 y(mapfile)46 b([-d)h Fj(delim)p Ft(])f([-n)h
+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 2653 y([-t])h([-u)f Fj(fd)p Ft(])h([-C)g Fj(callback)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
-2788 y Fu(Read)38 b(lines)f(from)g(the)h(standard)e(input)g(in)m(to)j
+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 2897 y(from)28 b(\014le)h(descriptor)f
+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
-3007 y(default)i Fr(arra)m(y)p Fu(.)41 b(Options,)30
+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
-3166 y Ft(-d)384 b Fu(The)37 b(\014rst)g(c)m(haracter)i(of)f
+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
-3275 y(rather)41 b(than)h(newline.)74 b(If)41 b Fr(delim)h
+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
-3385 y(terminate)31 b(a)g(line)g(when)e(it)i(reads)f(a)h(NUL)g(c)m
-(haracter.)630 3544 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 3703 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
-3862 y Ft(-s)384 b Fu(Discard)31 b(the)f(\014rst)g Fr(coun)m(t)j
-Fu(lines)e(read.)630 4021 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 4180 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 4340 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
-4449 y(sp)s(eci\014es)30 b Fr(quan)m(tum)p Fu(.)630 4608
-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 4767 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 4877 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
-4986 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 5096 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
-5230 y(If)25 b(not)g(supplied)f(with)h(an)g(explicit)i(origin,)g
+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 5340 y(to)31 b(it.)p eop end
-%%Page: 58 64
-TeXDict begin 58 63 bop 150 -116 a Fu(Chapter)30 b(4:)41
-b(Shell)30 b(Builtin)h(Commands)2069 b(58)630 299 y Ft(mapfile)41
+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
-408 y(supplied,)29 b Fr(arra)m(y)39 b Fu(is)30 b(in)m(v)-5
+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
-564 y Ft(printf)870 697 y(printf)46 b([-v)h Fj(var)p
-Ft(])g Fj(format)f Ft([)p Fj(arguments)p Ft(])630 830
+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 939 y Fr(format)p Fu(.)66 b(The)39 b Ft(-v)f Fu(option)h(causes)g
+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 1049 y Fu(rather)30 b(than)g(b)s(eing)g
-(prin)m(ted)g(to)h(the)g(standard)e(output.)630 1181
+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 1291 y(c)m(haracters,)41 b(whic)m(h)c(are)h(simply)e
+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
-1401 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 1510 y(sp)s
+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
-1620 y(In)24 b(addition)h(to)g(the)g(standard)f Ft(printf\(1\))e
+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
-1729 y(extensions:)630 1885 y Ft(\045b)384 b Fu(Causes)38
+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 1995 y(resp)s(onding)31 b Fr(argumen)m(t)j
+(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 2104 y([Bash)e(Builtins],)g(page)g(51\).)
-630 2260 y Ft(\045q)384 b Fu(Causes)32 b Ft(printf)e
+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 2370 y(that)e(can)g(b)s(e)e(reused)h(as)h
-(shell)f(input.)630 2525 y Ft(\045\()p Fj(datefmt)p Ft(\)T)1110
-2635 y Fu(Causes)f Ft(printf)e Fu(to)j(output)f(the)g(date-time)i
-(string)e(resulting)h(from)e(using)1110 2744 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 2854 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 2964 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
-3073 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
-3183 y(If)38 b(no)g(argumen)m(t)h(is)f(sp)s(eci\014ed,)i(con)m(v)m
+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
-3292 y(giv)m(en.)k(This)29 b(is)i(an)f(exception)i(to)f(the)f(usual)g
-Ft(printf)f Fu(b)s(eha)m(vior.)630 3448 y(The)d(\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 3558 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 3667 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 3777 y(than)30 b(the)h(original.)630 3910
-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 4019
-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
-4129 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 4261 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
-4371 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
-4481 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 4590 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
-4746 y Ft(read)870 4879 y(read)47 b([-ers])f([-a)h Fj(aname)p
+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 4988 y([-N)g Fj(nchars)p Ft(])f([-p)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 5121 y Fu(One)38
+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 5230 y(plied)34
+(\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
-5340 y(Section)j(3.5.7)h([W)-8 b(ord)38 b(Splitting],)i(page)e(32,)j
-(and)36 b(the)i(\014rst)f(w)m(ord)g(is)g(assigned)h(to)g(the)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)630 299 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
-408 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 518
-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 628 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
-737 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 847 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 956 y(Splitting],)38 b(page)f(32\).)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
-1066 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 1196
-y(Options,)f(if)h(supplied,)e(ha)m(v)m(e)i(the)g(follo)m(wing)h
-(meanings:)630 1348 y Ft(-a)e Fj(aname)114 b Fu(The)34
+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 1457 y Fr(aname)p Fu(,)29
+(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 1567 y(the)d(assignmen)m(t.)41
+(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
-1718 y Ft(-d)f Fj(delim)114 b Fu(The)41 b(\014rst)h(c)m(haracter)h(of)f
+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
-1828 y(rather)31 b(than)g(newline.)42 b(If)30 b Fr(delim)h
+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
-1937 y(nate)g(a)g(line)f(when)g(it)h(reads)f(a)h(NUL)f(c)m(haracter.)
-630 2089 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(111\))i(is)1110 2198
+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
-2308 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 2418 y(Readline's)31
-b(default)g(\014lename)f(completion.)630 2569 y Ft(-i)g
+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
-2679 y(editing)31 b(bu\013er)e(b)s(efore)h(editing)h(b)s(egins.)630
-2830 y Ft(-n)f Fj(nchars)66 b Ft(read)38 b Fu(returns)f(after)j
+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 2939 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 3049
+(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 3200 y Ft(-N)g Fj(nchars)66 b Ft(read)39
+(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 3310 y(w)m(aiting)32
+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)1110 3420 y Ft(read)f Fu(times)i(out.)43
-b(Delimiter)33 b(c)m(haracters)f(encoun)m(tered)g(in)f(the)g(input)g
-(are)1110 3529 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
-3639 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 3748 y(the)e(in)m(ten)m(t)i(is)e(that)h(the)f(v)-5
+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 3858 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 4009 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 4119 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 4228 y(from)30
-b(a)h(terminal.)630 4380 y Ft(-r)384 b Fu(If)21 b(this)h(option)g(is)f
+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 4489 y(The)30 b(bac)m(kslash)i(is)f(considered)g
+(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
-4599 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 4750
+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
-4860 y(ec)m(ho)s(ed.)630 5011 y Ft(-t)i Fj(timeout)1110
-5121 y Fu(Cause)42 b Ft(read)g Fu(to)h(time)h(out)f(and)f(return)f
-(failure)i(if)g(a)g(complete)h(line)f(of)1110 5230 y(input)26
-b(\(or)h(a)g(sp)s(eci\014ed)f(n)m(um)m(b)s(er)g(of)h(c)m(haracters\))h
-(is)f(not)g(read)g(within)f Fr(time-)1110 5340 y(out)37
-b Fu(seconds.)53 b Fr(timeout)38 b Fu(ma)m(y)d(b)s(e)f(a)h(decimal)h(n)
-m(um)m(b)s(er)d(with)h(a)h(fractional)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)1110 299 y(p)s(ortion)29
-b(follo)m(wing)h(the)f(decimal)h(p)s(oin)m(t.)40 b(This)29
-b(option)g(is)g(only)g(e\013ectiv)m(e)j(if)1110 408 y
-Ft(read)j Fu(is)i(reading)g(input)e(from)h(a)h(terminal,)i(pip)s(e,)e
-(or)g(other)f(sp)s(ecial)i(\014le;)1110 518 y(it)31 b(has)g(no)g
-(e\013ect)h(when)e(reading)h(from)g(regular)g(\014les.)42
-b(If)30 b Ft(read)g Fu(times)h(out,)1110 628 y Ft(read)d
-Fu(sa)m(v)m(es)j(an)m(y)f(partial)h(input)d(read)i(in)m(to)h(the)e(sp)s
-(eci\014ed)g(v)-5 b(ariable)31 b Fr(name)p Fu(.)1110
-737 y(If)k Fr(timeout)j Fu(is)e(0,)h Ft(read)e Fu(returns)f
-(immediately)-8 b(,)39 b(without)c(trying)h(to)g(read)1110
-847 y(an)m(y)c(data.)44 b(The)31 b(exit)h(status)f(is)h(0)f(if)h(input)
-e(is)h(a)m(v)-5 b(ailable)34 b(on)d(the)h(sp)s(eci\014ed)1110
-956 y(\014le)g(descriptor,)g(non-zero)h(otherwise.)46
-b(The)31 b(exit)i(status)f(is)g(greater)h(than)1110 1066
-y(128)f(if)e(the)h(timeout)g(is)f(exceeded.)630 1225
-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 1385 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 1494 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 1604
-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
-1714 y(greater)31 b(than)f(128\),)i(a)e(v)-5 b(ariable)30
+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 1823 y(v)-5 b(ariable\))30 b(o)s(ccurs,)f(or)f(an)h(in)m
+(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 1983 y Ft(readarray)870
-2092 y(readarray)45 b([-d)i Fj(delim)p Ft(])f([-n)h Fj(count)p
+(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
-2202 y([-t])g([-u)f Fj(fd)p Ft(])h([-C)g Fj(callback)p
+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
-2336 y Fu(Read)38 b(lines)f(from)g(the)h(standard)e(input)g(in)m(to)j
+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 2446 y(from)30 b(\014le)g(descriptor)h
+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
-2580 y(A)f(synon)m(ym)g(for)g Ft(mapfile)p Fu(.)150 2740
-y Ft(source)870 2874 y(source)46 b Fj(filename)630 3009
+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(44\).)150 3168
-y Ft(type)870 3303 y(type)47 b([-afptP])e([)p Fj(name)i
-Ft(...)o(])630 3437 y Fu(F)-8 b(or)42 b(eac)m(h)g Fr(name)p
-Fu(,)i(indicate)e(ho)m(w)g(it)f(w)m(ould)g(b)s(e)g(in)m(terpreted)g(if)
-g(used)f(as)i(a)f(command)630 3547 y(name.)630 3681 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 3791 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
-3900 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 4010 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
-4144 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 4254 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
-4389 y(The)h Ft(-P)g Fu(option)h(forces)g(a)g(path)f(searc)m(h)h(for)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 4498 y(`)p Ft(file)p Fu('.)630 4633 y(If)f(a)g(command)g
+(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 4742
+(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 4877 y(If)22 b(the)i Ft(-a)e Fu(option)h(is)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 4986 y(named)32 b Fr(\014le)p
+(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 5096 y(not)d(also)g
-(used.)630 5230 y(If)f(the)g Ft(-f)g Fu(option)g(is)h(used,)e
+(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 5340 y(the)h Ft(command)d
-Fu(builtin.)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)630 299 y(The)31
-b(return)f(status)h(is)g(zero)h(if)f(all)h(of)f(the)h
-Fr(names)i Fu(are)e(found,)e(non-zero)i(if)f(an)m(y)g(are)h(not)630
-408 y(found.)150 566 y Ft(typeset)870 700 y(typeset)46
-b([-afFgrxilnrtux])d([-p])k([)p Fj(name)p Ft([=)p Fj(value)p
-Ft(])d(...)o(])630 834 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 943 y(a)g(synon)m(ym)f(for)g(the)g Ft(declare)f
-Fu(builtin)h(command.)150 1101 y Ft(ulimit)870 1235 y(ulimit)46
-b([-HS])g(-a)870 1344 y(ulimit)g([-HS])g([-bcdefiklmnpqrstuvxPRT])c([)p
-Fj(limit)p Ft(])630 1478 y(ulimit)25 b Fu(pro)m(vides)h(con)m(trol)i(o)
+(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 1588 y(shell,)i(on)f(systems)g(that)h(allo)
+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 1697 y(as)i(follo)m(ws:)630
-1855 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 2013 y Ft(-H)384
+(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 2171 y Ft(-a)384 b Fu(All)31
+(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 2328 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 2486 y Ft(-c)384 b Fu(The)30 b(maxim)m(um)g(size)
-h(of)g(core)g(\014les)f(created.)630 2644 y Ft(-d)384
+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 2802 y Ft(-e)384 b Fu(The)30 b(maxim)m(um)g(sc)m
+(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 2960 y Ft(-f)384 b Fu(The)30 b(maxim)m(um)g(size)h(of)g
+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
-3118 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 3275 y Ft(-k)384 b Fu(The)30 b(maxim)m(um)g(n)m
-(um)m(b)s(er)f(of)i(kqueues)f(that)h(ma)m(y)g(b)s(e)e(allo)s(cated.)630
-3433 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 3591
-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 3701
-y(limit\).)630 3858 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
-3968 y(not)31 b(allo)m(w)g(this)g(v)-5 b(alue)31 b(to)g(b)s(e)e(set\).)
-630 4126 y Ft(-p)384 b Fu(The)30 b(pip)s(e)f(bu\013er)h(size.)630
-4284 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 4441
+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 4599 y Ft(-s)384 b Fu(The)30
-b(maxim)m(um)g(stac)m(k)i(size.)630 4757 y Ft(-t)384
+(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 4915 y Ft(-u)384 b Fu(The)30 b(maxim)m(um)g(n)m(um)m(b)s(er)f(of)i
+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
-5073 y Ft(-v)384 b Fu(The)41 b(maxim)m(um)h(amoun)m(t)g(of)h(virtual)f
+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
-5182 y(and,)30 b(on)g(some)h(systems,)g(to)g(its)g(c)m(hildren.)630
-5340 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.)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(-P)384
-b Fu(The)30 b(maxim)m(um)g(n)m(um)m(b)s(er)f(of)i(pseudoterminals.)630
-478 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
-587 y(microseconds.)630 766 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 945 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
-1055 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 1164 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 1274 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
-1384 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 1493 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 1603 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 1712 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 1822 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 1932 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
-2041 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 2151 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 2260 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(101\),)i Ft(-c)c Fu(and)g Ft(-f)p Fu(,)630 2370 y(whic)m(h)30
-b(are)h(in)f(512-b)m(yte)j(incremen)m(ts.)630 2514 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
-2624 y(an)30 b(error)g(o)s(ccurs)g(while)h(setting)g(a)g(new)f(limit.)
-150 2803 y Ft(unalias)870 2947 y(unalias)46 b([-a])g([)p
-Fj(name)h Ft(...)g(])630 3091 y Fu(Remo)m(v)m(e)42 b(eac)m(h)f
+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
-3201 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(94.)150 3471 y Fs(4.3)68
-b(Mo)t(difying)45 b(Shell)g(Beha)l(vior)150 3695 y Fk(4.3.1)63
-b(The)41 b(Set)g(Builtin)150 3842 y Fu(This)35 b(builtin)h(is)g(so)g
+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
-3951 y(the)c(v)-5 b(alues)34 b(of)f(shell)g(options)h(and)e(set)i(the)f
+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 4061 y(v)-5 b(alues)31 b(of)f(shell)h(v)-5 b(ariables.)150
-4250 y Ft(set)870 4394 y(set)47 b([--abefhkmnptuvxBCEHPT])41
-b([-o)47 b Fj(option-name)p Ft(])e([)p Fj(argument)g
-Ft(...)o(])870 4504 y(set)i([+abefhkmnptuvxBCEHPT])42
-b([+o)47 b Fj(option-name)p Ft(])d([)p Fj(argument)h
-Ft(...)o(])630 4648 y Fu(If)22 b(no)h(options)g(or)g(argumen)m(ts)g
+(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 4757 y(shell)j(v)-5 b(ariables)27
+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 4867 y(that)i(ma)m(y)h(b)s(e)e(reused)g
+(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 4977 y(Read-only)37 b(v)-5 b(ariables)37
+(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 5086 y(listed.)630
-5230 y(When)29 b(options)g(are)g(supplied,)f(they)h(set)h(or)f(unset)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
-5340 y(i\014ed,)h(ha)m(v)m(e)i(the)e(follo)m(wing)i(meanings:)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 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
-408 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 518 y(sequen)m(t)i
-(commands.)630 682 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
-792 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 956 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 1066 y(page)56 b(8\),)62
-b(whic)m(h)55 b(ma)m(y)h(consist)f(of)h(a)f(single)h(simple)f(command)g
-(\(see)1110 1176 y(Section)30 b(3.2.2)i([Simple)d(Commands],)g(page)h
-(8\),)h(a)f(list)g(\(see)h(Section)f(3.2.4)1110 1285
-y([Lists],)66 b(page)59 b(9\),)67 b(or)58 b(a)h(comp)s(ound)e(command)h
-(\(see)h(Section)g(3.2.5)1110 1395 y([Comp)s(ound)h(Commands],)70
-b(page)63 b(10\))g(returns)e(a)i(non-zero)f(status.)1110
-1504 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 1614 y(command)g(list)h
+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 1724 y(part)61 b(of)g(the)g(test)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 1833 y(executed)50 b(in)e(a)h Ft(&&)f Fu(or)h
+(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
-1943 y(\014nal)37 b Ft(&&)g Fu(or)g Ft(||)p Fu(,)h(an)m(y)g(command)f
+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
-2052 y(command's)c(return)f(status)h(is)g(b)s(eing)g(in)m(v)m(erted)h
+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
-2162 y(command)g(other)g(than)f(a)i(subshell)d(returns)h(a)h(non-zero)h
-(status)f(b)s(ecause)1110 2271 y(a)k(command)g(failed)g(while)g
+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 2381 y(exit.)42 b(A)30 b(trap)g(on)h Ft(ERR)p Fu(,)e(if)i(set,)g
+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
-2518 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 2628 y(vironmen)m(t)j(separately)i
+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
-2737 y(vironmen)m(t],)i(page)f(40\),)i(and)d(ma)m(y)h(cause)f
-(subshells)g(to)h(exit)g(b)s(efore)f(exe-)1110 2847 y(cuting)d(all)g
-(the)g(commands)f(in)g(the)g(subshell.)1110 2984 y(If)41
+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 3093 y(where)31 b Ft(-e)g Fu(is)g(b)s(eing)g
+(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
-3203 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 3313 y Ft(-e)25
+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 3422 y(If)32 b(a)i(comp)s(ound)d
+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)
-1110 3532 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 3641 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 3751 y(the)31 b(function)f(call)h
-(completes.)630 3915 y Ft(-f)384 b Fu(Disable)31 b(\014lename)g
-(expansion)f(\(globbing\).)630 4080 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 4189 y(execution.)42 b(This)29
-b(option)i(is)g(enabled)f(b)m(y)g(default.)630 4354 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
-4463 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 4573 y(command)30
-b(name.)630 4737 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(107\).)41
-b(All)1110 4847 y(pro)s(cesses)27 b(run)f(in)i(a)g(separate)g(pro)s
+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
-4956 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 5121 y Ft(-n)384
+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 5230 y(c)m(hec)m(k)d(a)e
+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 5340 y(tiv)m(e)h(shells.)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)630 299 y Ft(-o)30
-b Fj(option-name)1110 408 y Fu(Set)h(the)f(option)h(corresp)s(onding)e
-(to)i Fr(option-name)5 b Fu(:)1110 575 y Ft(allexport)1590
-685 y Fu(Same)30 b(as)h Ft(-a)p Fu(.)1110 852 y Ft(braceexpand)1590
-962 y Fu(Same)f(as)h Ft(-B)p Fu(.)1110 1129 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 1238 y([Command)33
-b(Line)g(Editing],)h(page)h(111\).)51 b(This)32 b(also)i(a\013ects)1590
-1348 y(the)d(editing)g(in)m(terface)h(used)d(for)h Ft(read)f(-e)p
-Fu(.)1110 1515 y Ft(errexit)144 b Fu(Same)30 b(as)h Ft(-e)p
-Fu(.)1110 1682 y Ft(errtrace)96 b Fu(Same)30 b(as)h Ft(-E)p
-Fu(.)1110 1849 y Ft(functrace)1590 1958 y Fu(Same)f(as)h
-Ft(-T)p Fu(.)1110 2125 y Ft(hashall)144 b Fu(Same)30
-b(as)h Ft(-h)p Fu(.)1110 2292 y Ft(histexpand)1590 2402
-y Fu(Same)f(as)h Ft(-H)p Fu(.)1110 2569 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 2679 y([Bash)d(History)g(F)-8 b(acilities],)41
-b(page)c(146.)60 b(This)36 b(option)h(is)f(on)1590 2788
-y(b)m(y)30 b(default)h(in)f(in)m(teractiv)m(e)j(shells.)1110
-2955 y Ft(ignoreeof)1590 3065 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 3232
-y Ft(keyword)144 b Fu(Same)30 b(as)h Ft(-k)p Fu(.)1110
-3399 y Ft(monitor)144 b Fu(Same)30 b(as)h Ft(-m)p Fu(.)1110
-3566 y Ft(noclobber)1590 3675 y Fu(Same)f(as)h Ft(-C)p
-Fu(.)1110 3842 y Ft(noexec)192 b Fu(Same)30 b(as)h Ft(-n)p
-Fu(.)1110 4009 y Ft(noglob)192 b Fu(Same)30 b(as)h Ft(-f)p
-Fu(.)1110 4176 y Ft(nolog)240 b Fu(Curren)m(tly)30 b(ignored.)1110
-4343 y Ft(notify)192 b Fu(Same)30 b(as)h Ft(-b)p Fu(.)1110
-4510 y Ft(nounset)144 b Fu(Same)30 b(as)h Ft(-u)p Fu(.)1110
-4677 y Ft(onecmd)192 b Fu(Same)30 b(as)h Ft(-t)p Fu(.)1110
-4844 y Ft(physical)96 b Fu(Same)30 b(as)h Ft(-P)p Fu(.)1110
-5011 y Ft(pipefail)96 b Fu(If)44 b(set,)k(the)d(return)e(v)-5
+(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 5121 y(the)33 b(last)h(\(righ)m(tmost\))h(command)e(to)h
-(exit)g(with)f(a)g(non-zero)1590 5230 y(status,)28 b(or)f(zero)g(if)f
+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
-5340 y(cessfully)-8 b(.)41 b(This)30 b(option)h(is)f(disabled)g(b)m(y)h
-(default.)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)1110 299 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 408 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
-518 y(dard)h(\(see)j(Section)f(6.11)h([Bash)f(POSIX)e(Mo)s(de],)j(page)
-f(101\).)1590 628 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 737 y(p)s(erset)30
-b(of)h(that)f(standard.)1110 911 y Ft(privileged)1590
-1020 y Fu(Same)g(as)h Ft(-p)p Fu(.)1110 1194 y Ft(verbose)144
-b Fu(Same)30 b(as)h Ft(-v)p Fu(.)1110 1367 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 1477 y(the)31
-b(editing)g(in)m(terface)h(used)d(for)h Ft(read)f(-e)p
-Fu(.)1110 1650 y Ft(xtrace)192 b Fu(Same)30 b(as)h Ft(-x)p
-Fu(.)630 1824 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 1934 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
-2043 y(vironmen)m(t,)h(and)e(the)g Ft(SHELLOPTS)p Fu(,)f
+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
-2153 y Fu(v)-5 b(ariables,)23 b(if)e(they)g(app)s(ear)f(in)g(the)h(en)m
+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
-2262 y(is)37 b(started)h(with)f(the)g(e\013ectiv)m(e)j(user)d
+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
-2372 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 2482 y(are)32
+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 2591 y
+(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 2701 y(T)-8 b(urning)35
+(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 2810 y(b)s(e)30 b(set)h(to)g(the)f(real)h(user)f
-(and)g(group)g(ids.)630 2984 y Ft(-t)384 b Fu(Exit)31
-b(after)g(reading)f(and)g(executing)h(one)g(command.)630
-3157 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
-3267 y(eters)35 b(`)p Ft(@)p Fu(')f(or)g(`)p Ft(*)p Fu(')h(as)f(an)g
-(error)g(when)f(p)s(erforming)g(parameter)i(expansion.)1110
-3377 y(An)28 b(error)h(message)g(will)g(b)s(e)f(written)h(to)h(the)e
-(standard)g(error,)h(and)f(a)h(non-)1110 3486 y(in)m(teractiv)m(e)k
-(shell)e(will)g(exit.)630 3660 y Ft(-v)384 b Fu(Prin)m(t)30
+(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
-3833 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
-3943 y Ft(select)29 b Fu(commands,)j(and)e(arithmetic)j
-Ft(for)d Fu(commands)h(and)f(their)i(argu-)1110 4052
+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 4162 y(they)i(are)g(executed.)49
+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 4271 y(the)24
+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 4381 y(argumen)m(ts.)630
-4555 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 4664
-y(Expansion],)30 b(page)h(23\).)42 b(This)30 b(option)h(is)f(on)g(b)m
-(y)h(default.)630 4838 y Ft(-C)384 b Fu(Prev)m(en)m(t)25
+(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
-4947 y(existing)31 b(\014les.)630 5121 y Ft(-E)384 b
+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 5230 y(substitutions,)35
+(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 5340 y(The)d Ft(ERR)f Fu(trap)i(is)f(normally)h(not)f(inherited)g
-(in)g(suc)m(h)g(cases.)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(-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 408 y(teraction],)g(page)d
-(148\).)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 518 y(shells.)630 670 y Ft(-P)384
+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 780 y(suc)m(h)29
+(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 890 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 999 y(directories)j(when)d(p)s(erforming)h
+-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
-1109 y(directory)-8 b(.)1110 1240 y(F)g(or)42 b(example,)i(if)d
+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 1349 y Fu(then:)1350 1480 y Ft($)47
-b(cd)h(/usr/sys;)d(echo)i($PWD)1350 1590 y(/usr/sys)1350
-1700 y($)g(cd)h(..;)f(pwd)1350 1809 y(/usr)1110 1940
-y Fu(If)30 b Ft(set)f(-P)h Fu(is)h(on,)f(then:)1350 2071
-y Ft($)47 b(cd)h(/usr/sys;)d(echo)i($PWD)1350 2181 y(/usr/local/sys)
-1350 2290 y($)g(cd)h(..;)f(pwd)1350 2400 y(/usr/local)630
-2552 y(-T)384 b Fu(If)34 b(set,)j(an)m(y)e(trap)g(on)g
+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 2662 y(tions,)k(command)d(substitutions,)h(and)f(commands)g
-(executed)h(in)f(a)h(sub-)1110 2771 y(shell)33 b(en)m(vironmen)m(t.)49
+(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 2881 y(inherited)d(in)g(suc)m(h)g(cases.)630
-3033 y Ft(--)384 b Fu(If)44 b(no)g(argumen)m(ts)g(follo)m(w)i(this)e
+(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
-3143 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 3253 y Fr(argumen)m(ts)p
+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('.)630 3405 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 3515 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 3624 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 3734 y(remain)30
-b(unc)m(hanged.)630 3886 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 3996 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
-4105 y(found)29 b(in)h Ft($-)p Fu(.)630 4236 y(The)43
+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 4346 y(order,)30
+(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 4477 y(The)f(return)f(status)i(is)f(alw)m(a)m
+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 4669 y Fk(4.3.2)63 b(The)41 b(Shopt)h(Builtin)150
-4816 y Fu(This)30 b(builtin)g(allo)m(ws)h(y)m(ou)g(to)g(c)m(hange)h
+(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
-4968 y Ft(shopt)870 5099 y(shopt)46 b([-pqsu])g([-o])h([)p
-Fj(optname)e Ft(...])630 5230 y Fu(T)-8 b(oggle)37 b(the)e(v)-5
+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 5340 y(can)24
+(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)p eop end
-%%Page: 67 73
-TeXDict begin 67 72 bop 150 -116 a Fu(Chapter)30 b(4:)41
-b(Shell)30 b(Builtin)h(Commands)2069 b(67)630 299 y(the)30
-b 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 408 y(page)i(62\).)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
-518 y(is)g(displa)m(y)m(ed,)i(with)e(an)g(indication)h(of)g(whether)e
-(or)h(not)h(eac)m(h)g(is)g(set;)h(if)e Fr(optnames)38
-b Fu(are)630 628 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
-737 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 847 y(follo)m(wing)h(meanings:)630 1004 y Ft(-s)384
+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
-1161 y Ft(-u)384 b Fu(Disable)31 b(\(unset\))g(eac)m(h)h
-Fr(optname)p Fu(.)630 1319 y Ft(-q)384 b Fu(Suppresses)28
+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 1428 y Fr(optname)37 b Fu(is)31 b(set)h(or)f(unset.)43
+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 1538 y(with)d Ft(-q)p Fu(,)g(the)g(return)f
-(status)h(is)g(zero)h(if)f(all)h Fr(optnames)j Fu(are)d(enabled;)f
-(non-)1110 1647 y(zero)i(otherwise.)630 1805 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 1914 y(to)31 b(the)g Ft(set)e
+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
-(62\).)630 2071 y(If)e(either)i Ft(-s)e Fu(or)h Ft(-u)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 2181 y(options)h(whic)m(h)f
+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
-2314 y(Unless)30 b(otherwise)h(noted,)g(the)g Ft(shopt)d
+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
-2448 y(The)d(return)f(status)i(when)f(listing)h(options)g(is)f(zero)i
-(if)e(all)i Fr(optnames)i Fu(are)d(enabled,)g(non-)630
-2557 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 2667
+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 2800 y(The)f(list)h(of)f
-Ft(shopt)f Fu(options)i(is:)630 2958 y Ft(assoc_expand_once)1110
-3067 y Fu(If)h(set,)i(the)e(shell)h(suppresses)e(m)m(ultiple)i(ev)-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
-3177 y(subscripts)24 b(during)h(arithmetic)h(expression)g(ev)-5
-b(aluation,)28 b(while)e(executing)1110 3286 y(builtins)c(that)i(can)f
+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 3396 y(builtins)30 b(that)h(p)s(erform)e(arra)m(y)i
-(dereferencing.)630 3553 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 3663 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
-3772 y(used)g(b)m(y)g(in)m(teractiv)m(e)j(shells.)630
-3930 y Ft(cdable_vars)1110 4039 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 4149 y(a)c(directory)g(is)g(assumed)f(to)h(b)s(e)f(the)h
+(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 4258 y(the)g(directory)f(to)i(c)m(hange)f(to.)630
-4416 y Ft(cdspell)144 b Fu(If)27 b(set,)h(minor)f(errors)f(in)h(the)g
+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 4525 y Fu(command)i(will)h(b)s(e)f(corrected.)43
+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
-4635 y(c)m(haracters,)46 b(a)c(missing)f(c)m(haracter,)47
+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 4744 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 4854
+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 5011 y Ft(checkhash)1110
-5121 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 5230
+(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 5340
-y(exists,)f(a)g(normal)f(path)g(searc)m(h)h(is)g(p)s(erformed.)p
-eop end
-%%Page: 68 74
-TeXDict begin 68 73 bop 150 -116 a Fu(Chapter)30 b(4:)41
-b(Shell)30 b(Builtin)h(Commands)2069 b(68)630 299 y Ft(checkjobs)1110
-408 y Fu(If)28 b(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 518
-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
-628 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 737 y(in)m(terv)m(ening)d
-(command)f(\(see)h(Chapter)e(7)h([Job)g(Con)m(trol],)i(page)f(107\).)40
-b(The)1110 847 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 1029 y Ft(checkwinsize)1110
-1139 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 1249
+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 1358 y Ft(COLUMNS)p Fu(.)39 b(This)29 b(option)i(is)g
-(enabled)f(b)m(y)g(default.)630 1541 y Ft(cmdhist)144
+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 1650 y(in)c(the)g(same)g
+(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 1760 y(commands.)79
+(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 1870 y(e\013ect)30 b(if)e(command)g(history)g(is)h
+(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
-1979 y(F)-8 b(acilities],)34 b(page)d(146\).)630 2162
-y Ft(compat31)630 2271 y(compat32)630 2381 y(compat40)630
-2491 y(compat41)630 2600 y(compat42)630 2710 y(compat43)630
-2819 y(compat44)96 b Fu(These)39 b(con)m(trol)i(asp)s(ects)f(of)f(the)h
+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
-2929 y(tion)31 b(6.12)h([Shell)e(Compatibilit)m(y)i(Mo)s(de],)f(page)g
-(104\).)630 3112 y Ft(complete_fullquote)1110 3221 y
+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 3331 y(tory)g(names)f(when)g(p)s
+(\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 3440 y(metac)m(haracters)40 b(suc)m(h)d(as)h(the)g(dollar)g
-(sign)g(from)f(the)h(set)g(of)f(c)m(haracters)1110 3550
-y(that)f(will)g(b)s(e)f(quoted)g(in)g(completed)i(\014lenames)e(when)f
-(these)i(metac)m(har-)1110 3660 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 3769 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
-3879 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 3988
+(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
-4098 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 4208
+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 4317 y(through)30
-b(4.2.)630 4500 y Ft(direxpand)1110 4609 y Fu(If)k(set,)i(Bash)f
+(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 4719 y(pansion)k(when)g(p)s(erforming)f(\014lename)i
-(completion.)67 b(This)38 b(c)m(hanges)i(the)1110 4829
-y(con)m(ten)m(ts)29 b(of)e(the)g(readline)h(editing)g(bu\013er.)38
-b(If)27 b(not)g(set,)i(Bash)e(attempts)h(to)1110 4938
-y(preserv)m(e)j(what)f(the)g(user)g(t)m(yp)s(ed.)630
-5121 y Ft(dirspell)96 b Fu(If)26 b(set,)i(Bash)f(attempts)g(sp)s
-(elling)g(correction)g(on)g(directory)g(names)f(during)1110
-5230 y(w)m(ord)36 b(completion)h(if)f(the)g(directory)g(name)g
-(initially)h(supplied)e(do)s(es)h(not)1110 5340 y(exist.)p
-eop end
-%%Page: 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)630 299 y Ft(dotglob)144
-b Fu(If)36 b(set,)i(Bash)e(includes)g(\014lenames)g(b)s(eginning)f
-(with)h(a)g(`.')58 b(in)36 b(the)g(results)1110 408 y(of)f(\014lename)f
-(expansion.)53 b(The)33 b(\014lenames)i(`)p Ft(.)p Fu(')f(and)g(`)p
-Ft(..)p Fu(')g(m)m(ust)h(alw)m(a)m(ys)h(b)s(e)1110 518
+(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 682 y Ft(execfail)96 b
+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 792 y(the)i(\014le)g(sp)
-s(eci\014ed)g(as)g(an)g(argumen)m(t)g(to)h(the)f Ft(exec)f
-Fu(builtin)h(command.)39 b(An)1110 902 y(in)m(teractiv)m(e)33
-b(shell)e(do)s(es)f(not)g(exit)i(if)e Ft(exec)f Fu(fails.)630
-1066 y Ft(expand_aliases)1110 1176 y Fu(If)j(set,)h(aliases)g(are)g
+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 1285 y(tion)38 b(6.6)h([Aliases],)j(page)d(94.)64
-b(This)37 b(option)h(is)g(enabled)g(b)m(y)g(default)g(for)1110
-1395 y(in)m(teractiv)m(e)33 b(shells.)630 1559 y Ft(extdebug)96
+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
-1669 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 1778 y Ft(--debugger)32
+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 1888 y(use)30 b(b)m(y)g(debuggers)g(is)
-h(enabled:)1159 2025 y(1.)61 b(The)37 b Ft(-F)g Fu(option)h(to)g(the)g
+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
-2134 y(Builtins],)29 b(page)g(51\))g(displa)m(ys)f(the)g(source)h
-(\014le)f(name)g(and)f(line)h(n)m(um-)1290 2244 y(b)s(er)h(corresp)s
+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 2354 y(men)m(t.)1159 2491 y(2.)61 b(If)20 b(the)h(command)g(run)e
+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 2600 y(the)31 b(next)f(command)g(is)h(skipp)s(ed)e(and)g
-(not)i(executed.)1159 2737 y(3.)61 b(If)37 b(the)g(command)g(run)f(b)m
+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 2847 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 2956 y(a)h(shell)g
+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 3066 y(sim)m(ulates)d(a)g(call)h(to)f
-Ft(return)p Fu(.)1159 3203 y(4.)61 b Ft(BASH_ARGC)34
+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 3313 y(descriptions)30 b(\(see)i(Section)f(5.2)g([Bash)g
-(V)-8 b(ariables],)32 b(page)f(73\).)1159 3450 y(5.)61
+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 3559 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 3669 y Ft(DEBUG)d
-Fu(and)h Ft(RETURN)e Fu(traps.)1159 3806 y(6.)61 b(Error)41
-b(tracing)i(is)f(enabled:)63 b(command)42 b(substitution,)i(shell)f
-(func-)1290 3915 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 4025 y Fu(trap.)630 4189 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 4299 y(Section)j(3.5.8.1)i
-([P)m(attern)f(Matc)m(hing],)g(page)f(33\))h(are)f(enabled.)630
-4463 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 4573 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 4682 y(is)d(enabled)h(b)m(y)f
-(default.)630 4847 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 4956 y(pansion)30 b(result)g(in)g(an)g(expansion)h(error.)630
-5121 y Ft(force_fignore)1110 5230 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 5340 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)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(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 408 y([Bash)24 b(V)-8 b(ariables],)27
-b(page)e(73,)h(for)d(a)h(description)g(of)g Ft(FIGNORE)p
-Fu(.)37 b(This)22 b(option)1110 518 y(is)30 b(enabled)h(b)m(y)f
-(default.)630 701 y Ft(globasciiranges)1110 810 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 920 y(sions)28 b(\(see)h(Section)h(3.5.8.1)g([P)m(attern)
-g(Matc)m(hing],)h(page)e(33\))g(b)s(eha)m(v)m(e)g(as)g(if)1110
-1029 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 1139 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 1249 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
-1358 y(case)e(ASCI)s(I)e(c)m(haracters)j(will)f(collate)i(together.)630
-1541 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 1650 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
-1760 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
-1870 y(matc)m(h.)630 2052 y Ft(gnu_errfmt)1110 2162 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 2271 y(message)c(format.)630
-2454 y Ft(histappend)1110 2564 y Fu(If)c(set,)j(the)e(history)g(list)g
+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 2673 y(the)d Ft(HISTFILE)d Fu(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 2783 y(the)31 b(\014le.)630 2966 y Ft(histreedit)1110
-3075 y Fu(If)i(set,)h(and)f(Readline)h(is)f(b)s(eing)g(used,)g(a)g
+(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
-3185 y(to)d(re-edit)g(a)g(failed)g(history)f(substitution.)630
-3367 y Ft(histverify)1110 3477 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
-3587 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 3696 y(resulting)i(line)f(is)h
+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 3806 y(further)29 b(mo)s(di\014cation.)630 3988
-y Ft(hostcomplete)1110 4098 y Fu(If)38 b(set,)j(and)c(Readline)i(is)f
+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
-4208 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 4317 y(pleted)g(\(see)h
+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
-(133\).)1110 4427 y(This)30 b(option)g(is)h(enabled)f(b)m(y)g(default.)
-630 4609 y Ft(huponexit)1110 4719 y Fu(If)i(set,)i(Bash)f(will)h(send)d
+(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 4829 y(shell)31 b(exits)g(\(see)g(Section)g(3.7.6)h([Signals],)g
-(page)f(42\).)630 5011 y Ft(inherit_errexit)1110 5121
+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 5230
+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 5340 y(tion)f(is)f(enabled)h
-(when)e Fm(posix)h Fu(mo)s(de)g(is)g(enabled.)p eop end
-%%Page: 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
-(interactive_comments)1110 408 y Fu(Allo)m(w)27 b(a)g(w)m(ord)e(b)s
+(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 518 y(ing)41 b(c)m(haracters)i(on)e(that)h(line)g
+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
-628 y(This)30 b(option)g(is)h(enabled)f(b)m(y)g(default.)630
-777 y Ft(lastpipe)96 b Fu(If)24 b(set,)i(and)e(job)g(con)m(trol)i(is)f
+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
-887 y(of)37 b(a)h(pip)s(eline)e(not)h(executed)h(in)f(the)g(bac)m
-(kground)g(in)g(the)g(curren)m(t)g(shell)1110 996 y(en)m(vironmen)m(t.)
-630 1146 y Ft(lithist)144 b Fu(If)22 b(enabled,)i(and)d(the)h
+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
-1255 y(are)28 b(sa)m(v)m(ed)h(to)g(the)f(history)g(with)f(em)m(b)s
-(edded)g(newlines)h(rather)g(than)f(using)1110 1365 y(semicolon)32
-b(separators)f(where)e(p)s(ossible.)630 1514 y Ft(localvar_inherit)1110
-1624 y Fu(If)j(set,)h(lo)s(cal)g(v)-5 b(ariables)33 b(inherit)f(the)g
+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
-1733 y(of)36 b(the)g(same)g(name)g(that)h(exists)f(at)h(a)f(previous)g
-(scop)s(e)g(b)s(efore)f(an)m(y)h(new)1110 1843 y(v)-5
-b(alue)31 b(is)f(assigned.)41 b(The)30 b Fr(nameref)48
-b Fu(attribute)31 b(is)f(not)h(inherited.)630 1993 y
-Ft(localvar_unset)1110 2102 y Fu(If)i(set,)i(calling)g
-Ft(unset)d Fu(on)i(lo)s(cal)g(v)-5 b(ariables)35 b(in)e(previous)g
-(function)g(scop)s(es)1110 2212 y(marks)26 b(them)g(so)g(subsequen)m(t)
-g(lo)s(okups)f(\014nd)g(them)h(unset)f(un)m(til)i(that)g(func-)1110
-2321 y(tion)40 b(returns.)68 b(This)39 b(is)g(iden)m(tical)j(to)e(the)g
-(b)s(eha)m(vior)g(of)g(unsetting)g(lo)s(cal)1110 2431
-y(v)-5 b(ariables)31 b(at)g(the)g(curren)m(t)f(function)g(scop)s(e.)630
-2580 y Ft(login_shell)1110 2690 y Fu(The)35 b(shell)h(sets)g(this)f
-(option)h(if)g(it)g(is)f(started)h(as)g(a)g(login)g(shell)g(\(see)g
-(Sec-)1110 2800 y(tion)29 b(6.1)g([In)m(v)m(oking)h(Bash],)f(page)g
-(86\).)41 b(The)28 b(v)-5 b(alue)29 b(ma)m(y)g(not)f(b)s(e)g(c)m
-(hanged.)630 2949 y Ft(mailwarn)96 b Fu(If)34 b(set,)i(and)e(a)h
-(\014le)g(that)g(Bash)f(is)h(c)m(hec)m(king)h(for)f(mail)g(has)f(b)s
-(een)g(accessed)1110 3059 y(since)24 b(the)h(last)g(time)f(it)h(w)m(as)
-f(c)m(hec)m(k)m(ed,)k(the)c(message)h Ft("The)k(mail)h(in)f
-Fj(mail-)1110 3168 y(file)g Ft(has)h(been)f(read")g Fu(is)h(displa)m(y)
-m(ed.)630 3318 y Ft(no_empty_cmd_completion)1110 3427
-y Fu(If)g(set,)g(and)g(Readline)g(is)h(b)s(eing)e(used,)h(Bash)g(will)g
-(not)g(attempt)i(to)e(searc)m(h)1110 3537 y(the)25 b
-Ft(PATH)f Fu(for)h(p)s(ossible)f(completions)j(when)d(completion)i(is)f
-(attempted)h(on)1110 3646 y(an)k(empt)m(y)h(line.)630
-3796 y Ft(nocaseglob)1110 3905 y Fu(If)38 b(set,)k(Bash)d(matc)m(hes)g
-(\014lenames)g(in)f(a)h(case-insensitiv)m(e)j(fashion)c(when)1110
-4015 y(p)s(erforming)29 b(\014lename)i(expansion.)630
-4164 y Ft(nocasematch)1110 4274 y Fu(If)42 b(set,)k(Bash)d(matc)m(hes)g
-(patterns)g(in)f(a)h(case-insensitiv)m(e)i(fashion)d(when)1110
-4384 y(p)s(erforming)31 b(matc)m(hing)i(while)f(executing)i
-Ft(case)d Fu(or)h Ft([[)g Fu(conditional)h(com-)1110
-4493 y(mands,)d(when)g(p)s(erforming)g(pattern)h(substitution)g(w)m
-(ord)g(expansions,)g(or)1110 4603 y(when)g(\014ltering)i(p)s(ossible)f
-(completions)h(as)g(part)f(of)h(programmable)f(com-)1110
-4712 y(pletion.)630 4862 y Ft(nullglob)96 b Fu(If)23
-b(set,)j(Bash)e(allo)m(ws)g(\014lename)g(patterns)g(whic)m(h)f(matc)m
-(h)h(no)g(\014les)f(to)i(expand)1110 4971 y(to)31 b(a)g(n)m(ull)f
-(string,)h(rather)f(than)g(themselv)m(es.)630 5121 y
-Ft(progcomp)96 b Fu(If)25 b(set,)i(the)f(programmable)g(completion)g
-(facilities)i(\(see)f(Section)f(8.6)h([Pro-)1110 5230
-y(grammable)45 b(Completion],)k(page)c(137\))h(are)f(enabled.)82
-b(This)44 b(option)h(is)1110 5340 y(enabled)30 b(b)m(y)h(default.)p
+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: 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(progcomp_alias)
-1110 408 y Fu(If)23 b(set,)j(and)d(programmable)h(completion)h(is)f
-(enabled,)h(Bash)f(treats)h(a)f(com-)1110 518 y(mand)34
+%%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 628 y(and)40 b(attempts)i(alias)h
+(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
-737 y(programmable)28 b(completion)h(using)e(the)h(command)f(w)m(ord)h
-(resulting)f(from)1110 847 y(the)k(expanded)e(alias.)630
-1006 y Ft(promptvars)1110 1116 y Fu(If)50 b(set,)56 b(prompt)49
+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
-1225 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 1335 y(expanded)53
+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 1445 y(Prompt],)30 b(page)h(98\).)42
-b(This)30 b(option)h(is)f(enabled)h(b)m(y)f(default.)630
-1604 y Ft(restricted_shell)1110 1714 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 1823 y(Section)32 b(6.10)h([The)d(Restricted)j(Shell],)e(page)h
-(100\).)45 b(The)30 b(v)-5 b(alue)32 b(ma)m(y)g(not)1110
-1933 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 2042
-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 2152
-y(stricted.)630 2311 y Ft(shift_verbose)1110 2421 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 2531 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 2690 y
-Ft(sourcepath)1110 2800 y Fu(If)22 b(set,)j(the)e Ft(source)e
-Fu(builtin)h(uses)g(the)h(v)-5 b(alue)23 b(of)g Ft(PATH)e
-Fu(to)j(\014nd)d(the)h(directory)1110 2909 y(con)m(taining)29
-b(the)e(\014le)h(supplied)e(as)h(an)g(argumen)m(t.)40
-b(This)27 b(option)h(is)f(enabled)1110 3019 y(b)m(y)j(default.)630
-3178 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 3288 y(fault.)150 3528 y Fs(4.4)68 b(Sp)t(ecial)45
-b(Builtins)150 3688 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 3797 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
-3907 y(commands)e(in)g(three)h(resp)s(ects:)199 4042
-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 4176 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 4311
-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
-4420 y(after)i(the)f(command)h(completes.)275 4579 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
-4689 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 4799 y([Bash)g(POSIX)e(Mo)s(de],)i(page)g(101.)275
-4933 y(These)f(are)g(the)h Fm(posix)f Fu(sp)s(ecial)h(builtins:)390
-5068 y Ft(break)46 b(:)i(.)f(continue)f(eval)g(exec)h(exit)g(export)f
-(readonly)f(return)h(set)390 5177 y(shift)g(trap)h(unset)p
+(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: 73 79
-TeXDict begin 73 78 bop 3659 -116 a Fu(73)150 299 y Fp(5)80
+%%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
@@ -13377,7 +13743,7 @@ 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(24\).)150
+(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
@@ -13408,10 +13774,10 @@ Fu(builtin.)150 3392 y Ft(PATH)288 b Fu(A)32 b(colon-separated)i(list)f
 (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)42
-b(the)e(Prompt],)j(page)e(98,)j(for)c(the)g(complete)i(list)f(of)f
-(escap)s(e)h(sequences)630 4088 y(that)31 b(are)g(expanded)e(b)s(efore)
-Ft(PS1)g Fu(is)g(displa)m(y)m(ed.)150 4236 y Ft(PS2)336
+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
@@ -13424,15 +13790,15 @@ 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(110\).)150 5230 y Ft(_)432 b
+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: 74 80
-TeXDict begin 74 79 bop 150 -116 a Fu(Chapter)30 b(5:)41
-b(Shell)30 b(V)-8 b(ariables)2459 b(74)630 299 y(list.)55
+%%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
@@ -13448,7 +13814,7 @@ b(full)g(pathname)g(used)g(to)h(execute)h(the)e(curren)m(t)g(instance)h
 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(66\).)60 b(The)36
+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
@@ -13469,7 +13835,7 @@ b(its)g(sp)s(ecial)g(prop)s(erties,)f(ev)m(en)h(if)f(it)h(is)g
 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(44\).)42 b(Elemen)m(ts)31
+(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
@@ -13488,7 +13854,7 @@ 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(66,)g(for)
+(\(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
@@ -13506,20 +13872,20 @@ 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(66,)g(for)g(a)f(description)h(of)f(the)h Ft(extdebug)d
+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: 75 81
-TeXDict begin 75 80 bop 150 -116 a Fu(Chapter)30 b(5:)41
-b(Shell)30 b(V)-8 b(ariables)2459 b(75)150 299 y Ft(BASH_ARGV0)630
+%%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(21,)j(for)c(the)h(de-)
+(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
@@ -13530,7 +13896,7 @@ Ft($0)p Fu(.)51 b(If)33 b Ft(BASH_ARGV0)f Fu(is)h(unset,)i(it)f(loses)h
 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(44\).)77 b(Elemen)m(ts)43
+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
@@ -13548,7 +13914,7 @@ b(If)30 b Ft(BASH_COMMAND)e Fu(is)i(unset,)h(it)g(loses)630
 (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(104,)i(for)e(a)g
+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
@@ -13565,7 +13931,7 @@ b(alid)31 b(compatibilit)m(y)i(lev)m(els,)f(the)f(shell)f(prin)m(ts)g
 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(104\).)42
+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)
@@ -13576,24 +13942,23 @@ 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(88.)150
+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)62 b(arra)m(y)i(v)-5
-b(ariable)63 b(whose)g(mem)m(b)s(ers)e(are)j(the)e(line)h(n)m(um)m(b)s
-(ers)f(in)g(source)h(\014les)630 5011 y(where)46 b(eac)m(h)i(corresp)s
-(onding)d(mem)m(b)s(er)h(of)h Fr(FUNCNAME)53 b Fu(w)m(as)47
-b(in)m(v)m(ok)m(ed.)91 b Ft(${BASH_)630 5121 y(LINENO[$i]})39
-b Fu(is)i(the)h(line)g(n)m(um)m(b)s(er)e(in)i(the)f(source)h(\014le)g
-(\()p Ft(${BASH_SOURCE[$i+1]})p Fu(\))630 5230 y(where)d
-Ft(${FUNCNAME[$i]})c Fu(w)m(as)k(called)i(\(or)e Ft
-(${BASH_LINENO[$i-1]})34 b Fu(if)39 b(referenced)630
-5340 y(within)30 b(another)g(shell)h(function\).)41 b(Use)31
-b Ft(LINENO)d Fu(to)j(obtain)g(the)g(curren)m(t)f(line)h(n)m(um)m(b)s
-(er.)p eop end
-%%Page: 76 82
-TeXDict begin 76 81 bop 150 -116 a Fu(Chapter)30 b(5:)41
-b(Shell)30 b(V)-8 b(ariables)2459 b(76)150 299 y Ft
+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)
@@ -13602,7 +13967,7 @@ g(the)h Ft(enable)e Fu(command.)150 673 y Ft(BASH_REMATCH)630
 (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(11\).)52 b(The)33 b(elemen)m(t)j(with)d(index)g(0)i(is)f
+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
@@ -13622,9 +13987,9 @@ b(b)m(y)f(one)h(within)f(eac)m(h)i(subshell)d(or)i(subshell)e(en)m
 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)36 b(readonly)g(arra)m(y)g(v)-5
-b(ariable)37 b(\(see)f(Section)h(6.7)g([Arra)m(ys],)h(page)e(95\))h
-(whose)f(mem)m(b)s(ers)630 2673 y(hold)c(v)m(ersion)h(information)f
+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
@@ -13635,10 +14000,10 @@ 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
-Fr(b)s(eta1)7 b Fu(\).)630 4262 y Ft(BASH_VERSINFO[5])1110
-4372 y Fu(The)30 b(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
+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
@@ -13650,9 +14015,9 @@ b(tracing)h(output)d(to)i(b)s(e)f(separated)g(from)g(diagnostic)h(and)f
 (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: 77 83
-TeXDict begin 77 82 bop 150 -116 a Fu(Chapter)30 b(5:)41
-b(Shell)30 b(V)-8 b(ariables)2459 b(77)630 299 y(output)33
+%%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
@@ -13671,7 +14036,7 @@ 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(66\),)k(or)43
+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
@@ -13680,13 +14045,13 @@ Ft(${COMP_WORDS})c Fu(of)k(the)g(w)m(ord)f(con)m(taining)i(the)e
 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(137\).)150
+([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(137\).)150
+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
@@ -13697,22 +14062,21 @@ 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(137\).)150 3477 y Ft(COMP_TYPE)630
+(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)e(a)h(completion)h(function)e(to)h
-(b)s(e)f(called:)40 b Fr(T)-8 b(AB)p Fu(,)27 b(for)g(normal)f
-(completion,)j(`)p Ft(?)p Fu(',)e(for)630 3806 y(listing)35
-b(completions)h(after)f(successiv)m(e)g(tabs,)h(`)p Ft(!)p
-Fu(',)g(for)e(listing)h(alternativ)m(es)i(on)d(partial)630
-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(137\).)150
+(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
@@ -13727,25 +14091,25 @@ 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: 78 84
-TeXDict begin 78 83 bop 150 -116 a Fu(Chapter)30 b(5:)41
-b(Shell)30 b(V)-8 b(ariables)2459 b(78)630 299 y Ft(WORDBREAKS)34
+%%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(137\).)150
+([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(137\).)51 b(Eac)m(h)34 b(arra)m(y)g(elemen)m(t)h(con)m(tains)
+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(15\).)150
+(\(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
@@ -13766,40 +14130,39 @@ 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)30 b(and)h(executed)h(similarlt)m(y)g(to)g
-Ft(BASH_ENV)d Fu(\(see)k(Section)f(6.2)g([Bash)g(Startup)630
-2844 y(Files],)39 b(page)e(88\))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
-(101\).)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)42 b(the)g(do)s(cumen)m(tation)g(for)f(the)g(C)g(library)g
-(function)g Fr(time)47 b Fu(for)41 b(the)h(de\014nition)f(of)630
-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
+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 4037 y(since)e(the)g(Unix)f(Ep)s(o)s(c)m(h)g
-(\(see)i(the)f(do)s(cumen)m(tation)g(for)g(the)f(C)h(library)f
-(function)g Fr(time)630 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(33\))g(de\014ning)e(the)h(list)g(of)g(\014lenames)g(to)g
-(b)s(e)g(ignored)g(b)m(y)f(command)h(searc)m(h)g(using)630
-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
+(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)
@@ -13807,9 +14170,9 @@ 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: 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(Use)30
+%%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
@@ -13869,7 +14232,7 @@ Fu(is)i(unset,)f(it)h(loses)h(its)630 3703 y(sp)s(ecial)f(prop)s
 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(148\).)41
+(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
@@ -13894,9 +14257,9 @@ 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: 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(HISTCONTROL)630
+%%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
@@ -13979,12 +14342,12 @@ b(v)-5 b(alues)26 b(less)g(than)630 4862 y(zero)i(result)e(in)h(ev)m
 (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 Fr(strftime)c Fu(to)35 b(prin)m(t)f(the)h(time)g(stamp)
-f(asso)s(ciated)i(with)f(eac)m(h)g(history)g(en)m(try)f(displa)m(y)m
+(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: 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)630 299 y(b)m(y)34
+%%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
@@ -14044,20 +14407,20 @@ y(a)i(lo)s(cale)h(category)-8 b(.)150 4125 y Ft(LC_COLLATE)630
 (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(33\).)150 4732
+(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(33\).)150
+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: 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)150 299 y Ft(LC_NUMERIC)630
+%%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
@@ -14072,7 +14435,7 @@ 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
-(66\),)k(or)43 b(in)g(an)g(in)m(teractiv)m(e)j(shell)e(up)s(on)630
+(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
@@ -14099,16 +14462,16 @@ Fu(If)35 b(set)i(to)f(the)h(v)-5 b(alue)36 b(1,)i(Bash)e(displa)m(ys)g
 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)23 b(arra)m(y)h(v)-5 b(ariable)24 b(\(see)h(Section)f(6.7)h
-([Arra)m(ys],)g(page)f(95\))h(con)m(taining)g(a)f(list)g(of)g(exit)g
-(sta-)630 3587 y(tus)h(v)-5 b(alues)27 b(from)e(the)h(pro)s(cesses)g
-(in)f(the)h(most-recen)m(tly-executed)j(foreground)c(pip)s(eline)630
-3696 y(\(whic)m(h)30 b(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(101\))h(b)s(efore)e(reading)g(the)630
+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
@@ -14128,16 +14491,16 @@ b(alue)24 b(of)g(eac)m(h)g(set)h(elemen)m(t)g(is)f(in)m(terpreted)630
 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: 83 89
-TeXDict begin 83 88 bop 150 -116 a Fu(Chapter)30 b(5:)41
-b(Shell)30 b(V)-8 b(ariables)2459 b(83)150 299 y Ft(PROMPT_DIRTRIM)630
+%%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)35 b(comp)s(onen)m(ts)g(to)h
-(retain)f(when)f(expanding)g(the)h Ft(\\w)f Fu(and)g
-Ft(\\W)g Fu(prompt)g(string)630 628 y(escap)s(es)21 b(\(see)h(Section)f
-(6.9)h([Con)m(trolling)g(the)f(Prompt],)h(page)f(98\).)39
-b(Characters)21 b(remo)m(v)m(ed)630 737 y(are)31 b(replaced)g(with)f
+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
@@ -14147,13 +14510,13 @@ 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)37 b(v)-5 b(alue)37
-b(of)g(this)g(parameter)h(is)f(expanded)f(lik)m(e)i Fr(PS1)44
-b Fu(and)37 b(the)g(expanded)f(v)-5 b(alue)38 b(is)630
-1532 y(the)d(prompt)f(prin)m(ted)g(b)s(efore)g(the)h(command)f(line)h
-(is)g(ec)m(ho)s(ed)g(when)f(the)h Ft(-x)f Fu(option)h(is)630
+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
-(62\).)67 b(The)38 b(\014rst)g(c)m(haracter)j(of)e(the)630
+(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
@@ -14166,141 +14529,145 @@ 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_LINE)630
-2765 y Fu(The)g(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 2874 y([Bash)i(Builtins],)g(page)g(51\).)150
-3029 y Ft(READLINE_MARK)630 3139 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 3249 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(51\).)58 b(The)35 b(c)m(haracters)630
-3358 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
-3513 y Ft(READLINE_POINT)630 3623 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 3733 y(-x)p Fu(')30
-b(\(see)h(Section)h(4.2)f([Bash)g(Builtins],)g(page)g(51\).)150
-3888 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 4043 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
-4153 y(Assignmen)m(t)i(to)g(this)g(v)-5 b(ariable)43
+(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 4262 y(expanded)35 b(v)-5
+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 4372 y(the)24
-b(assignmen)m(t.)39 b(The)23 b(n)m(um)m(b)s(er)g(of)h(seconds)f(at)i
-(shell)f(in)m(v)m(o)s(cation)i(and)d(the)h(curren)m(t)f(time)630
-4482 y(is)j(alw)m(a)m(ys)i(determined)e(b)m(y)g(querying)g(the)h
-(system)f(clo)s(c)m(k.)41 b(If)26 b Ft(SECONDS)e Fu(is)i(unset,)h(it)g
-(loses)630 4591 y(its)k(sp)s(ecial)g(prop)s(erties,)f(ev)m(en)h(if)f
-(it)h(is)f(subsequen)m(tly)g(reset.)150 4746 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 4856 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 4966 y(user's)30 b(login)h(shell.)150
-5121 y Ft(SHELLOPTS)630 5230 y Fu(A)g(colon-separated)h(list)f(of)g
-(enabled)f(shell)h(options.)41 b(Eac)m(h)31 b(w)m(ord)f(in)g(the)h
-(list)g(is)g(a)g(v)-5 b(alid)630 5340 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)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(Set)29
-b(Builtin],)h(page)f(62\).)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 408 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 518 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 628 y(This)30 b(v)-5 b(ariable)31
-b(is)f(readonly)-8 b(.)150 790 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 899 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 1062 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 1171
-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
-1281 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
-1390 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 1500 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
-1610 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 1772 y Ft(TIMEFORMAT)630
-1881 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
-1991 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
-2101 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 2210 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 2320 y(are)31 b(as)f(follo)m(ws;)i(the)f(braces)f(denote)
-h(optional)h(p)s(ortions.)630 2482 y Ft(\045\045)384
-b Fu(A)30 b(literal)i(`)p Ft(\045)p Fu('.)630 2644 y
-Ft(\045[)p Fj(p)p Ft(][l]R)96 b Fu(The)30 b(elapsed)h(time)g(in)f
-(seconds.)630 2806 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 2968 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 3131 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 3293 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 3402 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 3512 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 3622 y(of)31 b Fr(p)h
-Fu(greater)g(than)e(3)h(are)f(c)m(hanged)h(to)g(3.)42
+(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 3758 y(The)54 b(optional)h
+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 3867 y Fr(MM)10
+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 3977 y(included.)630 4113 y(If)30
+(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 4248 y Ft
+(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
-4384 y Fu(If)37 b(the)g(v)-5 b(alue)38 b(is)f(n)m(ull,)i(no)f(timing)f
+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 4494 y(added)30 b(when)f(the)i(format)f(string)h(is)f(displa)m
-(y)m(ed.)150 4656 y Ft(TMOUT)240 b Fu(If)22 b(set)h(to)g(a)g(v)-5
+(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 4766 y Ft(read)31
+(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
-(51\).)47 b(The)32 b Ft(select)e Fu(command)630 4875
+(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
-(11\))f(terminates)g(if)g(input)e(do)s(es)630 4985 y(not)k(arriv)m(e)g
+(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.)630 5121 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 5230 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 5340 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.)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(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 408 y(temp)s(orary)30 b(\014les)g(for)g(the)h(shell's)g
-(use.)150 568 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: 86 92
-TeXDict begin 86 91 bop 3659 -116 a Fu(86)150 299 y Fp(6)80
+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
@@ -14314,7 +14681,7 @@ 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(62\))i(can)e(b)s(e)f(used)h(as)g(options)g
+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
@@ -14324,7 +14691,7 @@ b(line)h(b)s(efore)f(the)g(single-c)m(haracter)j(options)e(to)g(b)s(e)f
 (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(66,)630 2371 y(for)30 b(a)h(description)f(of)h(the)
+(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
@@ -14342,7 +14709,7 @@ 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(111\))h(to)f(read)g(command)f
+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
@@ -14359,15 +14726,15 @@ b(the)h(b)s(eha)m(vior)f(of)g(Bash)h(where)e(the)i(default)f(op)s
 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(101,)630
+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: 87 93
-TeXDict begin 87 92 bop 150 -116 a Fu(Chapter)30 b(6:)41
-b(Bash)30 b(F)-8 b(eatures)2484 b(87)150 299 y Ft(--restricted)630
+%%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(100\).)150 677 y Ft(--verbose)630 787 y Fu(Equiv)-5
+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
@@ -14389,7 +14756,7 @@ b(assignmen)m(t)i(to)g Ft($0)f Fu(sets)g(the)h(name)f(of)g(the)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(89.)150
+(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
@@ -14400,11 +14767,11 @@ b(this)37 b(is)g(equiv)-5 b(alen)m(t)39 b(to)f(starting)h(a)e(login)i
 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(88,)i(for)d(a)h
+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(100\).)150
+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
@@ -14424,7 +14791,7 @@ b(implies)i(the)f Ft(-n)g Fu(option;)h(no)f(commands)g(will)h(b)s(e)f
 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(66\).)44 b(If)31 b Fr(shopt)p
+(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
@@ -14439,9 +14806,9 @@ f(a)h(format)f(that)630 5071 y(ma)m(y)i(b)s(e)f(reused)f(as)i(input.)
 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: 88 94
-TeXDict begin 88 93 bop 150 -116 a Fu(Chapter)30 b(6:)41
-b(Bash)30 b(F)-8 b(eatures)2484 b(88)275 299 y(A)27 b
+%%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
@@ -14453,13 +14820,13 @@ 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(89,)g(for)f(more)h(information.)275 1031 y(If)i(argumen)m(ts)h
+(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(42\).)41 b(When)30 b(Bash)g(is)g(in)m(v)m(ok)m(ed)i(in)d(this)h
+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
@@ -14473,9 +14840,9 @@ b(If)26 b(no)g(commands)g(are)h(executed,)150 1688 y(the)k(exit)g
 (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(24\).)275
+(\(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(89.)150
+(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
@@ -14514,9 +14881,9 @@ b(the)f(line)390 4725 y Ft(if)47 b([)h(-f)f(~/.bashrc)e(];)i(then)g(.)g
 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: 89 95
-TeXDict begin 89 94 bop 150 -116 a Fu(Chapter)30 b(6:)41
-b(Bash)30 b(F)-8 b(eatures)2484 b(89)150 299 y(expanded)30
+%%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
@@ -14566,47 +14933,47 @@ Fu(v)-5 b(ariable)150 3044 y(and)30 b(commands)g(are)g(read)h(and)e
 (read.)150 3362 y Fk(In)m(v)m(ok)m(ed)40 b(b)m(y)g(remote)h(shell)h
 (daemon)150 3509 y Fu(Bash)36 b(attempts)h(to)g(determine)f(when)f(it)i
 (is)f(b)s(eing)g(run)e(with)i(its)g(standard)g(input)f(connected)i(to)g
-(a)150 3618 y(net)m(w)m(ork)h(connection,)j(as)c(when)g(executed)h(b)m
-(y)f(the)h(remote)g(shell)g(daemon,)h(usually)e Ft(rshd)p
-Fu(,)h(or)g(the)150 3728 y(secure)c(shell)f(daemon)h
-Ft(sshd)p Fu(.)49 b(If)33 b(Bash)g(determines)h(it)g(is)f(b)s(eing)g
-(run)f(in)i(this)f(fashion,)h(it)g(reads)g(and)150 3837
-y(executes)29 b(commands)e(from)g Ft(~/.bashrc)p Fu(,)e(if)j(that)g
-(\014le)f(exists)h(and)f(is)g(readable.)41 b(It)27 b(will)h(not)f(do)h
-(this)f(if)150 3947 y(in)m(v)m(ok)m(ed)k(as)f Ft(sh)p
-Fu(.)40 b(The)29 b Ft(--norc)f Fu(option)i(ma)m(y)g(b)s(e)f(used)f(to)j
-(inhibit)e(this)g(b)s(eha)m(vior,)h(and)f(the)h Ft(--rcfile)150
-4057 y Fu(option)36 b(ma)m(y)g(b)s(e)e(used)h(to)h(force)g(another)f
-(\014le)h(to)g(b)s(e)e(read,)j(but)d(neither)i Ft(rshd)e
-Fu(nor)h Ft(sshd)f Fu(generally)150 4166 y(in)m(v)m(ok)m(e)e(the)f
-(shell)f(with)h(those)f(options)h(or)f(allo)m(w)i(them)f(to)g(b)s(e)e
-(sp)s(eci\014ed.)150 4375 y Fk(In)m(v)m(ok)m(ed)40 b(with)g(unequal)h
-(e\013ectiv)m(e)e(and)i(real)g Fg(uid/gid)p Fk(s)150
-4522 y Fu(If)34 b(Bash)h(is)g(started)g(with)f(the)h(e\013ectiv)m(e)i
-(user)d(\(group\))h(id)f(not)h(equal)g(to)g(the)g(real)g(user)f
-(\(group\))h(id,)150 4631 y(and)26 b(the)i Ft(-p)e Fu(option)h(is)g
-(not)h(supplied,)e(no)h(startup)g(\014les)g(are)g(read,)h(shell)f
-(functions)g(are)g(not)g(inherited)150 4741 y(from)41
-b(the)g(en)m(vironmen)m(t,)j(the)d Ft(SHELLOPTS)p Fu(,)h
-Ft(BASHOPTS)p Fu(,)g Ft(CDPATH)p Fu(,)g(and)e Ft(GLOBIGNORE)e
-Fu(v)-5 b(ariables,)45 b(if)150 4850 y(they)28 b(app)s(ear)f(in)h(the)g
-(en)m(vironmen)m(t,)i(are)e(ignored,)h(and)e(the)h(e\013ectiv)m(e)j
-(user)c(id)h(is)g(set)g(to)h(the)f(real)h(user)150 4960
-y(id.)62 b(If)38 b(the)f Ft(-p)h Fu(option)g(is)f(supplied)g(at)h(in)m
-(v)m(o)s(cation,)k(the)c(startup)f(b)s(eha)m(vior)h(is)g(the)g(same,)i
-(but)d(the)150 5070 y(e\013ectiv)m(e)c(user)d(id)g(is)g(not)h(reset.)
-150 5324 y Fs(6.3)68 b(In)l(teractiv)l(e)47 b(Shells)p
-eop end
-%%Page: 90 96
-TeXDict begin 90 95 bop 150 -116 a Fu(Chapter)30 b(6:)41
-b(Bash)30 b(F)-8 b(eatures)2484 b(90)150 299 y Fk(6.3.1)63
+(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)g(in)m(teractiv)m(e)k(shell)d(is)g(one)g(started)g(without)
-g(non-option)g(argumen)m(ts,)j(unless)c Ft(-s)h Fu(is)f(sp)s
-(eci\014ed,)150 555 y(without)30 b(sp)s(ecifying)g(the)g
-Ft(-c)f Fu(option,)h(and)g(whose)f(input)g(and)g(error)h(output)f(are)h
-(b)s(oth)f(connected)i(to)150 665 y(terminals)g(\(as)g(determined)f(b)m
-(y)g Ft(isatty\(3\))p Fu(\),)e(or)j(one)f(started)h(with)f(the)h
+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
@@ -14634,8 +15001,8 @@ b(Shell)k(Beha)m(vior)150 3187 y Fu(When)30 b(the)h(shell)f(is)h
 (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(88.)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(107\))h(is)e(enabled)g(b)m
+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
@@ -14646,1260 +15013,1377 @@ Fu(b)s(efore)h(reading)h(the)f(\014rst)g(line)h(of)f(a)h(command,)h
 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.)62
-b(See)38 b(Section)g(6.9)h([Con)m(trolling)g(the)e(Prompt],)j(page)e
-(98,)i(for)d(a)h(complete)h(list)f(of)g(prompt)330 4375
+(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)28 b(executes)h(the)e(v)-5 b(alues)28 b(of)g(the)g(set)g(elemen)
-m(ts)h(of)f(the)g Ft(PROMPT_COMMANDS)23 b Fu(arra)m(y)28
-b(v)-5 b(ariable)29 b(as)330 4624 y(commands)e(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(73\).)199 4872
+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(111\))g(is)f(used)g(to)g(read)g(commands)330
+(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
-(62\).)p eop end
-%%Page: 91 97
-TeXDict begin 91 96 bop 150 -116 a Fu(Chapter)30 b(6:)41
-b(Bash)30 b(F)-8 b(eatures)2484 b(91)199 299 y(7.)61
+(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(146\))h(and)d(history)330
+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(148\))h(are)f(enabled)g(b)m(y)f(default.)330
+(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
-(94\))h(is)e(p)s(erformed)f(b)m(y)h(default.)199 896
+(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(42\).)154 1030 y(10.)61 b(In)29 b(the)g(absence)h(of)g(an)m(y)g
+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(42\).)42
+(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(42\).)154
+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(62\).)154
+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(73\).)154 2005 y(14.)61 b(Expansion)32 b(errors)h(due)f(to)i
+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(62\).)154
+(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(25\).)154
+([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(101\).)154 2870 y(18.)61
+([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(44\).)154 3114 y(19.)61 b(P)m(arser)31
+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(Simple)21 b(sp)s(elling)h(correction)g(for)g
-(directory)g(argumen)m(ts)f(to)i(the)e Ft(cd)g Fu(builtin)g(is)h
-(enabled)f(b)m(y)h(default)330 3357 y(\(see)35 b(the)g(description)f
-(of)h(the)f Ft(cdspell)f Fu(option)h(to)i(the)e Ft(shopt)f
-Fu(builtin)h(in)g(Section)h(4.3.2)h([The)330 3467 y(Shopt)30
-b(Builtin],)h(page)g(66\).)154 3601 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 3711 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 3820 y(V)-8 b(ariables],)32
-b(page)f(73\).)150 4060 y Fs(6.4)68 b(Bash)45 b(Conditional)h
-(Expressions)150 4220 y Fu(Conditional)26 b(expressions)g(are)g(used)f
-(b)m(y)g(the)h Ft([[)f Fu(comp)s(ound)g(command)g(and)g(the)h
-Ft(test)f Fu(and)g Ft([)g Fu(builtin)150 4329 y(commands.)50
-b(The)33 b Ft(test)g Fu(and)f Ft([)i Fu(commands)f(determine)h(their)f
-(b)s(eha)m(vior)h(based)f(on)h(the)f(n)m(um)m(b)s(er)g(of)150
-4439 y(argumen)m(ts;)28 b(see)f(the)f(descriptions)g(of)g(those)g
-(commands)g(for)g(an)m(y)g(other)h(command-sp)s(eci\014c)e(actions.)275
-4573 y(Expressions)d(ma)m(y)h(b)s(e)g(unary)f(or)h(binary)-8
+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 4682 y(expressions)c(are)g(often)g(used)g(to)g(examine)h
+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 4792 y(n)m(umeric)c(comparison)g(op)s(erators)h(as)f
+(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 4902 y(are)35 b(used)e(in)i(expressions.)52
+(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 5011 y(sp)s(ecial)22
+(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:)150
-5121 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 5230 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 5340 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.)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)275 299 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 408 y(lo)s(cale.)k(The)30 b Ft(test)f
-Fu(command)i(uses)f(ASCI)s(I)e(ordering.)275 542 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
-651 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 808 y Ft(-a)f Fj(file)162
-b Fu(T)-8 b(rue)30 b(if)g Fr(\014le)36 b Fu(exists.)150
-965 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 1122 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 1279 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 1436 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 1592 y Ft(-f)30
+(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
-1749 y Ft(-g)g Fj(file)162 b Fu(T)-8 b(rue)30 b(if)g
+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 1906 y Ft(-h)g Fj(file)162 b Fu(T)-8 b(rue)30
+(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 2063 y Ft(-k)f Fj(file)162 b Fu(T)-8 b(rue)30
+(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 2220 y Ft(-p)g
+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
-2377 y Ft(-r)h Fj(file)162 b Fu(T)-8 b(rue)30 b(if)g
+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
-2534 y Ft(-s)g Fj(file)162 b Fu(T)-8 b(rue)30 b(if)g
+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 2690 y Ft(-t)g Fj(fd)258 b Fu(T)-8 b(rue)30
+(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 2847 y Ft(-u)f Fj(file)162 b
+(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 3004 y Ft(-w)f Fj(file)162
+(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 3161 y Ft(-x)g Fj(file)162
+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 3318 y Ft(-G)g Fj(file)162
+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
-3475 y Ft(-L)g Fj(file)162 b Fu(T)-8 b(rue)30 b(if)g
+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
-3632 y Ft(-N)f Fj(file)162 b Fu(T)-8 b(rue)30 b(if)g
+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 3789 y Ft(-O)f
+(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 3945 y Ft(-S)g Fj(file)162 b Fu(T)-8
+(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 4102 y Fj(file1)e Ft(-ef)g Fj(file2)630
-4212 y Fu(T)-8 b(rue)30 b(if)g Fr(\014le1)38 b Fu(and)30
+(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 4369 y Fj(file1)f Ft(-nt)g
-Fj(file2)630 4478 y Fu(T)-8 b(rue)23 b(if)h Fr(\014le1)32
+(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 4588 y(and)f Fr(\014le2)38 b Fu(do)s(es)30
-b(not.)150 4745 y Fj(file1)f Ft(-ot)g Fj(file2)630 4854
+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.)150 5011
-y Ft(-o)g Fj(optname)630 5121 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 5230 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
-5340 y(Builtin],)e(page)g(62\).)p eop end
-%%Page: 93 99
-TeXDict begin 93 98 bop 150 -116 a Fu(Chapter)30 b(6:)41
-b(Bash)30 b(F)-8 b(eatures)2484 b(93)150 299 y Ft(-v)30
-b Fj(varname)630 408 y Fu(T)-8 b(rue)30 b(if)g(the)h(shell)f(v)-5
-b(ariable)32 b Fr(v)-5 b(arname)35 b Fu(is)30 b(set)h(\(has)g(b)s(een)e
-(assigned)i(a)g(v)-5 b(alue\).)150 565 y Ft(-R)30 b Fj(varname)630
-674 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 830 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 987 y Ft(-n)f Fj(string)150 1096 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 1252 y Fj(string1)d Ft(==)i
-Fj(string2)150 1362 y(string1)e Ft(=)i Fj(string2)630
-1472 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 1581 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
-1691 y(Constructs],)30 b(page)h(11\).)630 1824 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 1980
-y Fj(string1)e Ft(!=)i Fj(string2)630 2089 y Fu(T)-8
+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
-2246 y Fj(string1)e Ft(<)i Fj(string2)630 2355 y Fu(T)-8
+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 2511
-y Fj(string1)28 b Ft(>)i Fj(string2)630 2621 y Fu(T)-8
+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 2777
-y Fj(arg1)29 b Ft(OP)h Fj(arg2)630 2887 y Ft(OP)j Fu(is)h(one)g(of)h(`)
+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
-2996 y(op)s(erators)h(return)e(true)i(if)f Fr(arg1)44
+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 3106 y(equal)29 b(to,)g(greater)h(than,)e(or)g(greater)i
+(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 3215 y Fr(arg2)41 b
+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
-3325 y Fr(Arg1)41 b Fu(and)33 b Fr(Arg2)41 b Fu(are)33
+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 3435 y(Arithmetic],)e(page)f(93\).)150
-3672 y Fs(6.5)68 b(Shell)45 b(Arithmetic)150 3832 y Fu(The)26
+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 3941 y(using)h(the)g Ft(\(\()g Fu(comp)s(ound)e(command,)j(the)g
+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 4074 y(Ev)-5 b(aluation)27
+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
-4184 y(0)g(is)g(trapp)s(ed)f(and)h(\015agged)g(as)h(an)f(error.)39
+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 4293 y(v)-5 b(alues)35 b(are)h(the)f(same)g(as)h
+(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 4403 y(lev)m(els)27
+(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
-4559 y Fj(id)p Ft(++)j Fj(id)p Ft(--)67 b Fu(v)-5 b(ariable)31
+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
-4715 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 4871
-y Ft(-)g(+)354 b Fu(unary)29 b(min)m(us)h(and)g(plus)150
-5028 y Ft(!)g(~)354 b Fu(logical)33 b(and)d(bit)m(wise)h(negation)150
-5184 y Ft(**)384 b Fu(exp)s(onen)m(tiation)150 5340 y
-Ft(*)30 b(/)g(\045)276 b Fu(m)m(ultiplication,)33 b(division,)d
-(remainder)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 Ft(+)30
-b(-)354 b Fu(addition,)31 b(subtraction)150 460 y Ft(<<)f(>>)258
-b Fu(left)31 b(and)f(righ)m(t)h(bit)m(wise)g(shifts)150
-620 y Ft(<=)f(>=)g(<)g(>)102 b Fu(comparison)150 781
-y Ft(==)30 b(!=)258 b Fu(equalit)m(y)32 b(and)e(inequalit)m(y)150
-942 y Ft(&)432 b Fu(bit)m(wise)31 b(AND)150 1103 y Ft(^)432
-b Fu(bit)m(wise)31 b(exclusiv)m(e)h(OR)150 1263 y Ft(|)432
-b Fu(bit)m(wise)31 b(OR)150 1424 y Ft(&&)384 b Fu(logical)33
-b(AND)150 1585 y Ft(||)384 b Fu(logical)33 b(OR)150 1746
-y Ft(expr)c(?)h(expr)f(:)h(expr)630 1855 y Fu(conditional)i(op)s
-(erator)150 2016 y Ft(=)e(*=)g(/=)g(\045=)f(+=)h(-=)g(<<=)f(>>=)h(&=)g
-(^=)f(|=)630 2126 y Fu(assignmen)m(t)150 2287 y Ft(expr1)g(,)h(expr2)
-630 2396 y Fu(comma)275 2558 y(Shell)38 b(v)-5 b(ariables)39
+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 2667 y(expression)g(is)g(ev)-5
+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
-2777 y(name)31 b(without)f(using)g(the)h(parameter)g(expansion)f(syn)m
+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 2886 y(ev)-5 b(aluates)41 b(to)f(0)g(when)e(referenced)h(b)
+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 2996 y(The)c(v)-5 b(alue)37 b(of)f(a)h(v)-5
+(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 3106
-y(when)31 b(a)i(v)-5 b(ariable)33 b(whic)m(h)f(has)g(b)s(een)f(giv)m
-(en)j(the)e Fr(in)m(teger)40 b Fu(attribute)33 b(using)f(`)p
-Ft(declare)d(-i)p Fu(')i(is)i(assigned)150 3215 y(a)j(v)-5
-b(alue.)58 b(A)36 b(n)m(ull)f(v)-5 b(alue)37 b(ev)-5
-b(aluates)37 b(to)g(0.)57 b(A)36 b(shell)g(v)-5 b(ariable)37
-b(need)e(not)h(ha)m(v)m(e)h(its)f Fr(in)m(teger)44 b
-Fu(attribute)150 3325 y(turned)29 b(on)h(to)i(b)s(e)d(used)h(in)g(an)g
-(expression.)275 3461 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 3570 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 3680 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 3789 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 3899 y(in)g(that)i(base.)40
+(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 4008 y(required,)k(the)g(digits)h(greater)g(than)e
+(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 4118 y(letters,)26 b(`)p Ft(@)p
+(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 4228 y(letters)32
+(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
-4364 y(Op)s(erators)44 b(are)h(ev)-5 b(aluated)46 b(in)f(order)f(of)h
+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
-4473 y(ev)-5 b(aluated)32 b(\014rst)d(and)h(ma)m(y)h(o)m(v)m(erride)g
-(the)g(precedence)g(rules)f(ab)s(o)m(v)m(e.)150 4716
-y Fs(6.6)68 b(Aliases)150 4875 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
-4985 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 5095 y Ft(alias)d Fu(and)h Ft(unalias)e
-Fu(builtin)i(commands.)275 5230 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 5340 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)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(the)23
-b(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 408 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 518 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 628 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 737 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 847 y(the)31 b(last)h(c)m(haracter)h(of)e(the)h
-(alias)g(v)-5 b(alue)31 b(is)h(a)f Fr(blank)p Fu(,)g(then)g(the)g(next)
-h(command)e(w)m(ord)h(follo)m(wing)i(the)150 956 y(alias)f(is)e(also)h
-(c)m(hec)m(k)m(ed)i(for)d(alias)h(expansion.)275 1096
-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 1206 y Fu(command.)275 1345 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 1455 y(argumen)m(ts)37 b(are)h(needed,)g(a)g(shell)f(function)
-f(should)g(b)s(e)h(used)f(\(see)i(Section)g(3.3)g([Shell)f(F)-8
-b(unctions],)150 1564 y(page)31 b(18\).)275 1704 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 1813 y Fu(shell)e(option)f(is)h
+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(66\).)275 1953 y(The)38 b(rules)h(concerning)h(the)
+(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 2063 y(alw)m(a)m(ys)37 b(reads)f(at)h(least)g
+(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 2172 y(command,)29 b(b)s(efore)g
+(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 2282 y(Aliases)g(are)g(expanded)e
+(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 2391 y(de\014nition)36
+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 2501
+(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
-2610 y(not)33 b(a\013ected)h(b)m(y)f(the)g(new)f(alias.)49
+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 2720 y(Aliases)c(are)g(expanded)e(when)g(a)i
+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 2830 y(b)s(ecause)36 b(a)h(function)f(de\014nition)
+(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 2939 y(function)28 b(are)h(not)g(a)m(v)-5
+(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
-3049 y(de\014nitions)i(on)g(a)h(separate)g(line,)g(and)f(do)g(not)h
+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
-3188 y(F)-8 b(or)31 b(almost)g(ev)m(ery)g(purp)s(ose,)e(shell)i
+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
-3437 y Fs(6.7)68 b(Arra)l(ys)150 3596 y Fu(Bash)33 b(pro)m(vides)g
+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
-3706 y(b)s(e)e(used)h(as)g(an)g(indexed)f(arra)m(y;)j(the)e
+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 3815 y(no)h(maxim)m(um)g(limit)h(on)f
+-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 3925
+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 4034 y(expressions)38 b(\(see)h(Section)g(6.5)h([Shell)
-e(Arithmetic],)k(page)d(93\)\))h(and)d(are)i(zero-based;)k(asso)s
-(ciativ)m(e)150 4144 y(arra)m(ys)37 b(use)f(arbitrary)g(strings.)59
+(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 4254 y(negativ)m(e)d(in)m(tegers.)275
-4393 y(An)26 b(indexed)h(arra)m(y)h(is)f(created)h(automatically)j(if)c
+(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 4533 y Fj(name)p Ft([)p Fj(subscript)p Ft(]=)p
-Fj(value)150 4672 y Fu(The)34 b Fr(subscript)h Fu(is)g(treated)g(as)g
+(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
-4782 y(explicitly)32 b(declare)f(an)g(arra)m(y)-8 b(,)31
-b(use)390 4921 y Ft(declare)46 b(-a)h Fj(name)150 5061
-y Fu(The)30 b(syn)m(tax)390 5200 y Ft(declare)46 b(-a)h
-Fj(name)p Ft([)p Fj(subscript)p Ft(])150 5340 y Fu(is)30
-b(also)i(accepted;)g(the)e Fr(subscript)h Fu(is)g(ignored.)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)150 299 y(Asso)s(ciativ)m(e)33
-b(arra)m(ys)d(are)h(created)h(using)390 427 y Ft(declare)46
-b(-A)h Fj(name)275 555 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
-664 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 792 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 920 y Fj(name)p Ft(=\()p Fj(value1)44
-b(value2)j Ft(...)f(\))150 1048 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 1157 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
-1267 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
-1377 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 1504
-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 1614 y([Shell)j(Expansions],)h(page)g(22\).)
-275 1742 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 1851 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 1961 y(in)m(terpreted)g(as)g(a)g(sequence)f(of)h
+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 2071 y Fu(.)22 b(.)g(.)47 b(\).)57 b(These)35
+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 2180 y(\014rst)25 b(w)m(ord)f(in)h(the)h(list)g
+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 2290 y(a)31
+(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 2399 y(or)g(empt)m(y;)h(a)g
+(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 2527 y(This)f(syn)m(tax)j(is)e(also)i(accepted)
+(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 2637 y(assigned)e(to)g
+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
-2765 y(When)h(assigning)h(to)h(an)e(indexed)g(arra)m(y)-8
+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 2874 y(n)m(um)m(b)s(er)43
+(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
-2984 y(negativ)m(e)30 b(indices)d(coun)m(t)h(bac)m(k)g(from)f(the)g
+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 3093 y(elemen)m(t.)275 3221
-y(An)m(y)h(elemen)m(t)h(of)g(an)f(arra)m(y)g(ma)m(y)h(b)s(e)f
+(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 3331 y(required)f(to)j(a)m
+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
-3440 y(`)p Ft(@)p Fu(')f(or)h(`)p Ft(*)p Fu(',)f(the)h(w)m(ord)f
+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
-3550 y(when)36 b(the)g(w)m(ord)g(app)s(ears)g(within)g(double)g
+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 3660 y Fu(expands)25 b(to)h(a)g(single)h
+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
-3769 y(ter)j(of)g(the)h Ft(IFS)e Fu(v)-5 b(ariable,)29
+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
-3879 y(When)j(there)h(are)f(no)g(arra)m(y)h(mem)m(b)s(ers,)f
+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 3988 y(expansion)39
+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 4098
+(\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
-4208 y(the)g(last)h(part)f(of)g(the)g(original)h(w)m(ord.)40
+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 4317 y(eters)g(`)p Ft(@)p Fu(')f(and)g(`)p
+(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
-4427 y Fr(subscript)28 b Fu(is)g(`)p Ft(@)p Fu(')f(or)h(`)p
+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)150 4536 y Fu(used)34 b(to)h(reference)g(an)f
-(elemen)m(t)i(of)f(an)f(indexed)g(arra)m(y)h(ev)-5 b(aluates)36
-b(to)f(a)g(n)m(um)m(b)s(er)e(less)i(than)f(zero,)i(it)150
-4646 y(is)c(in)m(terpreted)h(as)f(relativ)m(e)i(to)f(one)f(greater)h
+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 4756 y(indices)d(coun)m(t)h(bac)m(k)h
+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
-4883 y(Referencing)41 b(an)f(arra)m(y)h(v)-5 b(ariable)42
+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 4993 y(subscript)35
+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 5103 y(create)d(an)e(arra)m(y)h(if)f
-(necessary)-8 b(.)275 5230 y(An)35 b(arra)m(y)i(v)-5
+(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
-5340 y(string)30 b(is)h(a)g(v)-5 b(alid)30 b(v)-5 b(alue.)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)275 299 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 408
-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
-518 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 628 y(within)30
-b(double)g(quotes.)275 759 y(The)25 b Ft(unset)g Fu(builtin)g(is)h
+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 868 y(elemen)m(t)40 b(at)e(index)g Fr(subscript)p
+(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 978 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
-1087 y Ft(unset)29 b Fj(name)p Fu(,)e(where)h Fr(name)33
-b Fu(is)28 b(an)g(arra)m(y)-8 b(,)30 b(remo)m(v)m(es)f(the)f(en)m(tire)
-h(arra)m(y)-8 b(.)41 b(A)28 b(subscript)f(of)h(`)p Ft(*)p
-Fu(')g(or)g(`)p Ft(@)p Fu(')g(also)150 1197 y(remo)m(v)m(es)k(the)e(en)
-m(tire)i(arra)m(y)-8 b(.)275 1328 y(When)35 b(using)g(a)i(v)-5
-b(ariable)36 b(name)g(with)g(a)g(subscript)e(as)i(an)g(argumen)m(t)g
-(to)h(a)f(command,)h(suc)m(h)f(as)150 1438 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
-1547 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 1657 y(should)k(b)s(e)h(quoted.)275
-1788 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 1897 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 2007 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 2116
-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 2226 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
-2336 y(them)30 b(to)h(b)s(e)f(reused)g(as)g(input.)150
-2569 y Fs(6.8)68 b(The)45 b(Directory)g(Stac)l(k)150
-2729 y Fu(The)21 b(directory)h(stac)m(k)h(is)e(a)h(list)g(of)f(recen)m
+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 2838 y(to)42 b(the)f(stac)m(k)i(as)
+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 2948 y(directories)29 b(from)f(the)h(stac)m(k)h(and)d(c)m(hanges)j
+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 3058 y Ft(dirs)34 b Fu(builtin)g(displa)m(ys)h(the)g(con)m
+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 3167
+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
-3298 y(The)k(con)m(ten)m(ts)i(of)f(the)h(directory)f(stac)m(k)h(are)f
+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 3408 y(v)-5 b(ariable.)150
-3600 y Fk(6.8.1)63 b(Directory)40 b(Stac)m(k)g(Builtins)150
-3768 y Ft(dirs)870 3899 y(dirs)47 b([-clpv])e([+)p Fj(N)i
-Ft(|)h(-)p Fj(N)p Ft(])630 4030 y Fu(Displa)m(y)35 b(the)f(list)g(of)g
-(curren)m(tly)g(remem)m(b)s(ered)f(directories.)51 b(Directories)36
-b(are)e(added)f(to)630 4140 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 4249 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 4402 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 4554 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 4664 y(uses)d(a)h(tilde)g(to)g(denote)g(the)f(home)h
-(directory)-8 b(.)630 4816 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 4968 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 5078 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
-5230 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 5340 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.)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)630 299 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 408 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
-583 y Ft(popd)870 725 y(popd)47 b([-n])f([+)p Fj(N)h
-Ft(|)h(-)p Fj(N)p Ft(])630 867 y Fu(When)32 b(no)g(argumen)m(ts)h(are)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 977 y(and)f(p)s(erforms)e(a)j Ft(cd)f
-Fu(to)h(the)f(new)g(top)h(directory)-8 b(.)44 b(The)31
-b(elemen)m(ts)i(are)e(n)m(um)m(b)s(ered)f(from)630 1086
-y(0)j(starting)g(at)g(the)f(\014rst)g(directory)g(listed)h(with)f
-Ft(dirs)p Fu(;)g(that)h(is,)g Ft(popd)e Fu(is)i(equiv)-5
-b(alen)m(t)33 b(to)630 1196 y Ft(popd)c(+0)p Fu(.)630
-1370 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 1480
-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 1655 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 1764 y(b)m(y)30
-b Ft(dirs)p Fu(\),)g(starting)h(with)f(zero.)630 1939
-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 2048 y(prin)m(ted)30 b(b)m(y)g Ft(dirs)p
-Fu(\),)g(starting)h(with)f(zero.)150 2223 y Ft(pushd)870
-2365 y(pushd)46 b([-n])h([+)p Fj(N)g Ft(|)g Fj(-N)h Ft(|)f
-Fj(dir)p Ft(])630 2507 y Fu(Sa)m(v)m(e)30 b(the)e(curren)m(t)g
-(directory)h(on)f(the)h(top)f(of)h(the)f(directory)h(stac)m(k)h(and)e
-(then)g Ft(cd)f Fu(to)i Fr(dir)p Fu(.)630 2617 y(With)39
-b(no)f(argumen)m(ts,)j Ft(pushd)c Fu(exc)m(hanges)j(the)f(top)f(t)m(w)m
-(o)i(directories)g(and)d(mak)m(es)j(the)630 2726 y(new)30
-b(top)g(the)h(curren)m(t)f(directory)-8 b(.)630 2901
-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 3010
-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 3185 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
-3295 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
-3404 y(stac)m(k.)630 3579 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 3688 y(b)m(y)34
+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 3798 y(stac)m(k.)630
-3972 y Fj(dir)336 b Fu(Mak)m(es)28 b Fr(dir)33 b Fu(b)s(e)27
-b(the)g(top)g(of)g(the)h(stac)m(k,)h(making)e(it)h(the)f(new)g(curren)m
-(t)g(direc-)1110 4082 y(tory)k(as)f(if)h(it)g(had)e(b)s(een)h(supplied)
-f(as)i(an)f(argumen)m(t)h(to)g(the)f Ft(cd)g Fu(builtin.)150
-4345 y Fs(6.9)68 b(Con)l(trolling)47 b(the)e(Prompt)150
-4505 y Fu(Bash)33 b(examines)h(the)f(v)-5 b(alue)33 b(of)h(the)f(arra)m
-(y)g(v)-5 b(ariable)34 b Ft(PROMPT_COMMANDS)29 b Fu(just)j(b)s(efore)h
-(prin)m(ting)g(eac)m(h)150 4614 y(primary)c(prompt.)40
-b(If)30 b(an)m(y)g(elemen)m(ts)i(in)e Ft(PROMPT_COMMANDS)c
-Fu(are)31 b(set)f(and)g(non-n)m(ull,)g(Bash)h(executes)150
-4724 y(eac)m(h)h(v)-5 b(alue,)31 b(in)f(n)m(umeric)g(order,)g(just)g
+(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 4874 y(In)d(addition,)j(the)f(follo)m(wing)h(table)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 4983 y(prompt)g(v)-5 b(ariables)32
+(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 5165 y Ft(\\a)384 b Fu(A)30 b(b)s(ell)h(c)m
-(haracter.)150 5340 y Ft(\\d)384 b Fu(The)30 b(date,)h(in)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(\).)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(\\D{)p
-Fj(format)p Ft(})630 408 y Fu(The)27 b 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 518 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 628 y(braces)31 b(are)f(required.)150
-790 y Ft(\\e)384 b Fu(An)30 b(escap)s(e)h(c)m(haracter.)150
-952 y Ft(\\h)384 b Fu(The)30 b(hostname,)h(up)e(to)i(the)g(\014rst)e
-(`.'.)150 1114 y Ft(\\H)384 b Fu(The)30 b(hostname.)150
-1276 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 1438 y Ft(\\l)384
+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 1600 y Ft(\\n)384 b Fu(A)30 b(newline.)150
-1763 y Ft(\\r)384 b Fu(A)30 b(carriage)i(return.)150
-1925 y Ft(\\s)384 b Fu(The)22 b(name)g(of)h(the)f(shell,)i(the)f
+(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\).)150 2087 y Ft(\\t)384 b Fu(The)30
-b(time,)h(in)f(24-hour)h(HH:MM:SS)g(format.)150 2249
-y Ft(\\T)384 b Fu(The)30 b(time,)h(in)f(12-hour)h(HH:MM:SS)g(format.)
-150 2411 y Ft(\\@)384 b Fu(The)30 b(time,)h(in)f(12-hour)h(am/pm)f
-(format.)150 2573 y Ft(\\A)384 b Fu(The)30 b(time,)h(in)f(24-hour)h
-(HH:MM)g(format.)150 2735 y Ft(\\u)384 b Fu(The)30 b(username)g(of)g
-(the)h(curren)m(t)f(user.)150 2898 y Ft(\\v)384 b Fu(The)30
-b(v)m(ersion)h(of)f(Bash)h(\(e.g.,)h(2.00\))150 3060
-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 3222
-y Ft(\\w)384 b Fu(The)34 b(curren)m(t)h(w)m(orking)g(directory)-8
-b(,)37 b(with)e Ft($HOME)e Fu(abbreviated)j(with)e(a)h(tilde)h(\(uses)f
-(the)630 3331 y Ft($PROMPT_DIRTRIM)26 b Fu(v)-5 b(ariable\).)150
-3494 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
-3656 y Ft(\\!)384 b Fu(The)30 b(history)g(n)m(um)m(b)s(er)f(of)i(this)f
-(command.)150 3818 y Ft(\\#)384 b Fu(The)30 b(command)g(n)m(um)m(b)s
-(er)f(of)i(this)f(command.)150 3980 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 4142 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 4304 y Ft(\\\\)384 b
-Fu(A)30 b(bac)m(kslash.)150 4466 y Ft(\\[)384 b Fu(Begin)38
+(\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
-4576 y(terminal)31 b(con)m(trol)h(sequence)e(in)m(to)i(the)e(prompt.)
-150 4738 y Ft(\\])384 b Fu(End)29 b(a)i(sequence)g(of)f(non-prin)m
-(ting)g(c)m(haracters.)275 4902 y(The)25 b(command)h(n)m(um)m(b)s(er)f
+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 5011
+(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
-5121 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(146\),)j(while)d(the)f
-(command)150 5230 y(n)m(um)m(b)s(er)j(is)h(the)h(p)s(osition)f(in)g
+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 5340 y(session.)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)275 299 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 408
-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 518 y(option)i(\(see)h
-(Section)g(4.3.2)g([The)f(Shopt)f(Builtin],)j(page)e(66\).)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
-628 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
-737 y(sp)s(ecial)j(to)g(w)m(ord)f(expansion.)150 1015
-y Fs(6.10)68 b(The)45 b(Restricted)h(Shell)150 1174 y
-Fu(If)34 b(Bash)g(is)g(started)g(with)g(the)g(name)h
+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 1284 y(in)m(v)m(o)s(cation,)
+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
-1393 y(more)g(con)m(trolled)i(than)e(the)g(standard)g(shell.)40
+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 1503 y(the)31 b(exception)g(that)g(the)g(follo)m
+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
-1662 y Fq(\017)60 b Fu(Changing)30 b(directories)h(with)g(the)f
-Ft(cd)g Fu(builtin.)225 1809 y Fq(\017)60 b Fu(Setting)33
+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
-1919 y(ables.)225 2065 y Fq(\017)60 b Fu(Sp)s(ecifying)30
-b(command)g(names)g(con)m(taining)i(slashes.)225 2212
-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 2359 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 2469 y(mand.)225
-2615 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 2725 y Fu(builtin)e
-(command.)225 2872 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 3018 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 3165 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 3312 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 3459 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 3606
-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 3752
-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 3899 y Fq(\017)60
-b Fu(T)-8 b(urning)29 b(o\013)i(restricted)g(mo)s(de)f(with)g(`)p
-Ft(set)g(+r)p Fu(')g(or)g(`)p Ft(set)g(+o)g(restricted)p
-Fu('.)275 4096 y(These)g(restrictions)h(are)g(enforced)f(after)h(an)m
-(y)g(startup)f(\014les)g(are)h(read.)275 4255 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 4364 y(Scripts],)25
-b(page)e(42\),)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
-4523 y(The)42 b(restricted)h(shell)g(mo)s(de)f(is)g(only)h(one)g(comp)s
-(onen)m(t)f(of)h(a)g(useful)f(restricted)h(en)m(vironmen)m(t.)150
-4633 y(It)36 b(should)g(b)s(e)f(accompanied)j(b)m(y)e(setting)h
-Ft(PATH)e Fu(to)i(a)g(v)-5 b(alue)37 b(that)g(allo)m(ws)g(execution)h
-(of)e(only)h(a)f(few)150 4743 y(v)m(eri\014ed)26 b(commands)g
-(\(commands)g(that)h(allo)m(w)h(shell)f(escap)s(es)f(are)h
-(particularly)g(vulnerable\),)g(lea)m(ving)150 4852 y(the)i(user)f(in)h
-(a)g(non-writable)h(directory)f(other)g(than)g(his)g(home)g(directory)g
-(after)h(login,)g(not)f(allo)m(wing)150 4962 y(the)j(restricted)g
-(shell)g(to)g(execute)h(shell)e(scripts,)h(and)f(cleaning)i(the)e(en)m
-(vironmen)m(t)i(of)e(v)-5 b(ariables)32 b(that)150 5071
-y(cause)f(some)g(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
-5230 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
-5340 y(as)h Ft(jails)p Fu(,)e Ft(zones)p Fu(,)g(or)h
-Ft(containers)p Fu(.)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)150 299 y Fs(6.11)68
-b(Bash)45 b(POSIX)f(Mo)t(de)150 458 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
-568 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 677 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 810 y(When)f(in)m(v)m(ok)m(ed)h(as)g
+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 942 y(The)f(follo)m(wing)j
+(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 1074 y(1.)61 b(Bash)31
+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 1206 y(2.)61 b(When)28 b(a)i(command)e(in)
+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 1316 y(the)i(new)e(lo)s(cation.)43
+(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 1448 y(3.)61 b(Bash)36
+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 1558 y(table,)c(ev)m(en)f(if)
+(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 1690 y(4.)61 b(The)42 b(message)h(prin)m
+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 1800 y(non-zero)31
-b(status)g(is)f(`Done\(status\)'.)199 1932 y(5.)61 b(The)40
+(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
-2041 y(`Stopp)s(ed\()p Fr(signame)5 b Fu(\)',)31 b(where)f
+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 2174 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.)199
-2306 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 2415 y(undergo)30 b(alias)h(expansion.)199 2548 y(8.)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 2657 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
-2767 y(of)31 b(the)f(setting)i(of)e(the)h Ft(promptvars)c
-Fu(option.)199 2899 y(9.)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 3031 y(10.)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 3141 y(than)g(on)g(all)i(assignmen)m(t)f(statemen)m(ts)h
-(on)e(the)h(line.)154 3273 y(11.)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 3405
-y(12.)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 3515 y(unless)30 b(the)g(shell)h(is)f(in)m(teractiv)m(e.)154
-3647 y(13.)61 b(Redirection)31 b(op)s(erators)g(do)f(not)h(p)s(erform)e
+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
-3779 y(14.)61 b(F)-8 b(unction)35 b(names)g(m)m(ust)f(b)s(e)g(v)-5
+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 3889 y(other)e(than)g(letters,)h
+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 3999 y(a)31 b(function)f(with)g(an)g(in)m(v)
+(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 4131 y(15.)61 b(F)-8
+(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
-4263 y(16.)61 b Fm(posix)30 b Fu(sp)s(ecial)h(builtins)e(are)i(found)e
+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
-4395 y(17.)61 b(When)48 b(prin)m(ting)g(shell)h(function)f
+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 4505 y Ft(function)28
-b Fu(k)m(eyw)m(ord.)154 4637 y(18.)61 b(Literal)28 b(tildes)g(that)f
+(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
-4747 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(24.)154 4879
-y(19.)61 b(The)29 b Ft(time)g Fu(reserv)m(ed)h(w)m(ord)g(ma)m(y)g(b)s
+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 4989 y(it)33
+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
-5098 y Fu(v)-5 b(ariable)31 b(con)m(trols)h(the)e(format)h(of)g(the)f
-(timing)h(information.)154 5230 y(20.)61 b(When)33 b(parsing)g(and)f
+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
-5340 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)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)330 299 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
-408 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
-547 y(21.)61 b(The)29 b(parser)g(do)s(es)g(not)h(recognize)h
+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 656 y(`)p Ft(-)p Fu('.)154
-795 y(22.)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 905 y(ev)m(en)g(if)f(the)h Ft(histexpand)d
-Fu(option)i(is)h(enabled.)154 1043 y(23.)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 1153 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 1262 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 1372 y(command)30 b(name,)h(and)f(so)g(on.)154
-1510 y(24.)61 b(A)31 b(non-in)m(teractiv)m(e)j(shell)d(exits)h(with)e
+(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 1620 y(when)38 b(no)h(command)g(name)g(follo)m
+(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 1729 y(error)30
+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.)154 1868
-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 1977 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 2087 y(command.)154 2225 y(26.)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 2335 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 2473 y(27.)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
-2612 y(28.)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 2721 y(in)m(v)-5 b(alid)31 b(expression.)154
-2860 y(29.)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 2998
-y(30.)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 3108 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
-3246 y(31.)61 b(While)32 b(v)-5 b(ariable)32 b(indirection)f(is)g(a)m
-(v)-5 b(ailable,)34 b(it)d(ma)m(y)h(not)f(b)s(e)g(applied)g(to)g(the)h
-(`)p Ft(#)p Fu(')f(and)f(`)p Ft(?)p Fu(')h(sp)s(ecial)330
-3356 y(parameters.)154 3494 y(32.)61 b(When)28 b(expanding)g(the)g(`)p
-Ft(*)p Fu(')g(sp)s(ecial)h(parameter)f(in)g(a)h(pattern)f(con)m(text)i
-(where)e(the)g(expansion)g(is)330 3604 y(double-quoted)i(do)s(es)g(not)
-h(treat)h(the)e Ft($*)g Fu(as)h(if)f(it)h(w)m(ere)g(double-quoted.)154
-3742 y(33.)61 b(Assignmen)m(t)23 b(statemen)m(ts)h(preceding)e
-Fm(posix)f Fu(sp)s(ecial)i(builtins)f(p)s(ersist)g(in)f(the)i(shell)f
-(en)m(vironmen)m(t)330 3852 y(after)31 b(the)f(builtin)g(completes.)154
-3990 y(34.)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 4100 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 4209 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 4319 y(ceded)31 b(b)m(y)f Ft(command)p
-Fu(.)154 4457 y(35.)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 4567 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 4706 y(36.)61 b(The)23 b(output)f(of)i(`)p
+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
-4815 y(without)30 b(the)h(`)p Ft(SIG)p Fu(')f(pre\014x.)154
-4954 y(37.)61 b(The)30 b Ft(kill)f Fu(builtin)h(do)s(es)g(not)h(accept)
+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
-5092 y(38.)61 b(The)38 b Ft(export)f Fu(and)g Ft(readonly)f
+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 5202 y(quired)30 b(b)m(y)g Fm(posix)p
-Fu(.)154 5340 y(39.)61 b(The)30 b Ft(trap)f Fu(builtin)h(displa)m(ys)g
+(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(.)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)154 299 y(40.)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 408 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 518 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
-628 y(for)h(a)g(giv)m(en)h(signal)g(to)f(the)h(original)g(disp)s
+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 765 y(41.)61 b Ft(trap)29 b(-p)35
+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 765 28 4 v 40 w(DFL)g(and)g(those)g(that)g(w)m(ere)330
-874 y(ignored)30 b(when)g(the)g(shell)h(started.)154
-1011 y(42.)61 b(The)21 b Ft(.)h Fu(and)f Ft(source)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 1121 y(if)30
+(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 1258 y(43.)61 b(Enabling)21 b Fm(posix)g Fu(mo)s(de)g(has)g
+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 1367 y(spa)m(wned)27
+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
-1477 y(paren)m(t)37 b(shell.)62 b(When)37 b(the)g Ft(inherit_errexit)c
+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 1587 y Fu(option)31 b(in)f(suc)m(h)g(subshells.)154
-1724 y(44.)61 b(Enabling)32 b Fm(posix)f Fu(mo)s(de)h(has)g(the)h
-(e\013ect)g(of)g(setting)g(the)g Ft(shift_verbose)28
-b Fu(option,)34 b(so)e(n)m(umeric)330 1833 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
-1943 y(error)g(message.)154 2080 y(45.)61 b(When)43 b(the)g
-Ft(alias)f Fu(builtin)g(displa)m(ys)i(alias)g(de\014nitions,)i(it)d(do)
-s(es)g(not)g(displa)m(y)h(them)f(with)g(a)330 2189 y(leading)31
-b(`)p Ft(alias)e Fu(')i(unless)f(the)g Ft(-p)g Fu(option)h(is)f
-(supplied.)154 2326 y(46.)61 b(When)40 b(the)g Ft(set)f
-Fu(builtin)h(is)g(in)m(v)m(ok)m(ed)h(without)f(options,)j(it)e(do)s(es)
-f(not)g(displa)m(y)g(shell)g(function)330 2436 y(names)30
-b(and)g(de\014nitions.)154 2573 y(47.)61 b(When)36 b(the)g
-Ft(set)g Fu(builtin)g(is)g(in)m(v)m(ok)m(ed)i(without)e(options,)i(it)f
-(displa)m(ys)f(v)-5 b(ariable)37 b(v)-5 b(alues)37 b(without)330
-2682 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 2792 y(c)m(haracters.)154 2929 y(48.)61 b(When)35
-b(the)g Ft(cd)f Fu(builtin)h(is)g(in)m(v)m(ok)m(ed)i(in)d
-Fr(logical)41 b Fu(mo)s(de,)36 b(and)f(the)g(pathname)g(constructed)g
-(from)330 3039 y Ft($PWD)i Fu(and)h(the)h(directory)f(name)h(supplied)e
+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
-3148 y(directory)-8 b(,)32 b Ft(cd)d Fu(will)i(fail)g(instead)g(of)f
-(falling)h(bac)m(k)h(to)f Fr(ph)m(ysical)j Fu(mo)s(de.)154
-3285 y(49.)61 b(When)37 b(the)h Ft(cd)f Fu(builtin)g(cannot)h(c)m
+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 3395 y(constructed)52 b(from)f Ft($PWD)f
-Fu(and)g(the)i(directory)g(name)f(supplied)f(as)i(an)f(argumen)m(t)h
-(exceeds)330 3504 y Fr(P)-8 b(A)g(TH)p 584 3504 V 41
-w(MAX)42 b Fu(when)31 b(all)j(sym)m(b)s(olic)e(links)h(are)f(expanded,)
-h Ft(cd)f Fu(will)g(fail)h(instead)g(of)g(attempting)330
-3614 y(to)e(use)f(only)h(the)f(supplied)f(directory)i(name.)154
-3751 y(50.)61 b(The)36 b Ft(pwd)f Fu(builtin)h(v)m(eri\014es)h(that)g
-(the)f(v)-5 b(alue)37 b(it)g(prin)m(ts)e(is)i(the)f(same)h(as)f(the)h
-(curren)m(t)f(directory)-8 b(,)330 3861 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 3998 y(51.)61
-b(When)35 b(listing)g(the)g(history)-8 b(,)36 b(the)f
-Ft(fc)g Fu(builtin)f(do)s(es)g(not)h(include)g(an)f(indication)i(of)f
-(whether)f(or)330 4107 y(not)d(a)f(history)h(en)m(try)f(has)g(b)s(een)g
-(mo)s(di\014ed.)154 4244 y(52.)61 b(The)30 b(default)g(editor)h(used)f
-(b)m(y)g Ft(fc)g Fu(is)g Ft(ed)p Fu(.)154 4381 y(53.)61
-b(The)37 b Ft(type)g Fu(and)g Ft(command)f Fu(builtins)i(will)g(not)g
-(rep)s(ort)f(a)i(non-executable)g(\014le)f(as)g(ha)m(ving)h(b)s(een)330
-4491 y(found,)26 b(though)h(the)g(shell)g(will)g(attempt)h(to)g
+(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 4600 y(found)i(in)h Ft($PATH)p Fu(.)154
-4737 y(54.)61 b(The)33 b Ft(vi)f Fu(editing)i(mo)s(de)f(will)g(in)m(v)m
+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 4847 y(instead)e(of)f(c)m(hec)m
-(king)i Ft($VISUAL)d Fu(and)g Ft($EDITOR)p Fu(.)154 4984
-y(55.)61 b(When)41 b(the)g Ft(xpg_echo)e Fu(option)i(is)g(enabled,)j
+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
-5093 y(gumen)m(ts)35 b(to)g Ft(echo)e Fu(as)i(options.)54
+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 5203 y(con)m(v)m(erted.)154
-5340 y(56.)61 b(The)30 b Ft(ulimit)f Fu(builtin)g(uses)h(a)h(blo)s(c)m
+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.)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)154 299 y(57.)61
-b(The)39 b(arriv)-5 b(al)41 b(of)f Ft(SIGCHLD)e Fu(when)h(a)h(trap)g
-(is)g(set)h(on)f Ft(SIGCHLD)e Fu(do)s(es)h(not)h(in)m(terrupt)g(the)g
-Ft(wait)330 408 y Fu(builtin)c(and)h(cause)g(it)h(to)f(return)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 518 y(c)m(hild)31 b(that)g(exits.)154
-654 y(58.)61 b(The)27 b Ft(read)f Fu(builtin)g(ma)m(y)i(b)s(e)e(in)m
+(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 764 y(receiv)m(es)41
+(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
-874 y Fu(returns)29 b(an)h(exit)i(status)e(greater)i(than)e(128.)154
-1010 y(59.)61 b(Bash)27 b(remo)m(v)m(es)h(an)e(exited)i(bac)m(kground)e
-(pro)s(cess's)h(status)g(from)f(the)h(list)g(of)g(suc)m(h)f(statuses)h
-(after)330 1119 y(the)k Ft(wait)e Fu(builtin)h(is)g(used)g(to)h(obtain)
-g(it.)275 1284 y(There)j(is)g(other)h Fm(posix)f Fu(b)s(eha)m(vior)h
-(that)g(Bash)g(do)s(es)f(not)h(implemen)m(t)g(b)m(y)g(default)f(ev)m
-(en)i(when)d(in)150 1394 y Fm(posix)d Fu(mo)s(de.)40
-b(Sp)s(eci\014cally:)199 1532 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
-1641 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 1778 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 1887
-y(to)j(b)s(e)f(fully)g(conforman)m(t.)275 2052 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
-2162 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 2271 y(page)31 b(155\).)150 2518 y Fs(6.12)68
-b(Shell)46 b(Compatibilit)l(y)h(Mo)t(de)150 2677 y Fu(Bash-4.0)30
-b(in)m(tro)s(duced)d(the)i(concept)g(of)f(a)h(`shell)f(compatibilit)m
-(y)i(lev)m(el',)h(sp)s(eci\014ed)d(as)g(a)h(set)f(of)h(options)150
-2786 y(to)i(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
-2896 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 3006 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 3115 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 3225
-y(in)m(tended)30 b(to)h(b)s(e)f(a)h(temp)s(orary)f(solution.)275
-3363 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
-3473 y(setting)24 b Ft(compat32)e Fu(means)h(that)h(quoting)g(the)f
-(rhs)g(of)g(the)h(regexp)f(matc)m(hing)i(op)s(erator)e(quotes)h(sp)s
-(ecial)150 3582 y(regexp)31 b(c)m(haracters)g(in)g(the)f(w)m(ord,)g
-(whic)m(h)g(is)h(default)f(b)s(eha)m(vior)h(in)f(bash-3.2)h(and)f(ab)s
-(o)m(v)m(e\).)275 3720 y(If)f(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
-3830 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 3939 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 4049 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
-4159 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
-4268 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 4378 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 4487 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 4625 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
-4735 y(v)-5 b(ariable)32 b(\(a)g(decimal)h(v)m(ersion)e(n)m(um)m(b)s
+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 4845 y Fu(option,)g(lik)m(e)h(42\))f
+(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
-4983 y(Starting)e(with)g(bash-4.4,)h(Bash)f(has)g(b)s(egun)f
+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 5092 y(ally)-8 b(,)32 b(the)e(options)h(will)g(b)s
+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 5230 y(Bash-5.0)36 b(is)f(the)g(\014nal)f(v)m(ersion)i(for)e
+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 5340 y(previous)30 b(v)m(ersion.)41 b(Users)30
+(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.)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)275 299 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 408 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 518 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 628 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 737 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
-847 y(v)m(ersions.)150 1025 y Ft(compat31)705 1165 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 1275 y(no)d(sp)s(ecial)h(e\013ect)150
-1446 y Ft(compat32)705 1587 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 1697
-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 1806 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 1916 y(the)31 b(execution)g(of)g(the)f(en)m(tire)
-i(list\))150 2087 y Ft(compat40)705 2228 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 2338 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
-2447 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 2557 y(use)30
-b(the)h(curren)m(t)f(lo)s(cale's)i(collation)h(sequence)d(and)g
-(strcoll\(3\).)150 2728 y Ft(compat41)705 2869 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
-2979 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 3119 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
-3229 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 3338 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 3448 y(considered)30 b(quoted)h(\(this)f(is)h
-Fm(posix)e Fu(in)m(terpretation)j(221\))150 3620 y Ft(compat42)705
-3760 y Fq(\017)60 b Fu(the)29 b(replacemen)m(t)i(string)e(in)g
+(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
-3870 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 4010 y Fq(\017)60
+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 4120 y Fr(w)m(ord)d
+(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 4230 y(used)40 b(to)i(quote)g(a)f(closing)h(brace)f(or)g
+(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
-4339 y Fm(posix)36 b Fu(in)m(terpretation)h(221\);)42
+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 4449 y(within)30 b(double-quoted)g(w)m(ord)g(expansions)150
-4620 y Ft(compat43)705 4761 y Fq(\017)60 b Fu(the)31
+(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 4871 y(quoted)22
-b(comp)s(ound)f(assignmen)m(t)i(as)f(an)g(argumen)m(t)h(to)g(declare)g
-(\(declare)g(-a)g(fo)s(o='\(1)810 4980 y(2\)'\).)42 b(Later)31
-b(v)m(ersions)g(w)m(arn)f(that)h(this)f(usage)h(is)f(deprecated)705
-5121 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
-5230 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
-5340 y(fatal)32 b(errors)d(that)i(cause)g(the)g(shell)f(to)i(exit\))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)705 299 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
-408 y(reset,)c(so)g Ft(break)d Fu(or)i Ft(continue)e
+(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 518 y(in)h(the)g(calling)h(con)m(text.)57 b(Bash-4.4)37
+(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
-628 y(this)150 787 y Ft(compat44)705 922 y Fq(\017)60
+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 1031 y(can)26 b(expand)f(to)h(the)g(shell's)g(p)s
+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
-1141 y(mo)s(de)k(is)g(not)h(enabled)705 1275 y Fq(\017)60
+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
-1385 y Fu(will)35 b(cause)g(the)f(subshell)f(to)i(exit.)54
+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
-1494 y(prev)m(en)m(t)c(the)g(exit)705 1629 y Fq(\017)60
+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
-1738 y(attributes)37 b(con)m(tin)m(ue)h(to)g(a\013ect)g(v)-5
+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
-1848 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 2007 y Ft(compat50)f(\(set)h(using)g
-(BASH_COMPAT\))705 2117 y Fq(\017)60 b Fu(Bash-5.1)29
+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 2227 y(randomness.)39
+(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 2336 y(to)e(the)g(metho)s
+(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 2446 y(n)m(um)m(b)s(er)36 b(generator)j(b)m(y)e
+(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 2555 y(sequence)31 b(as)f(in)g(bash-5.0)705
-2690 y Fq(\017)60 b Fu(If)22 b(the)g(command)g(hash)f(table)i(is)f
+(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 2800 y(an)29 b(informational)i(message)g(to)f(that)g
+(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
-2909 y(can)40 b(b)s(e)g(reused)f(as)h(input.)69 b(Bash-5.1)42
+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
-3019 y Fu(option)31 b(is)f(supplied.)p eop end
-%%Page: 107 113
-TeXDict begin 107 112 bop 3614 -116 a Fu(107)150 299
+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)
@@ -15991,9 +16475,9 @@ 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: 108 114
-TeXDict begin 108 113 bop 150 -116 a Fu(Chapter)30 b(7:)41
-b(Job)30 b(Con)m(trol)2526 b(108)275 299 y(A)38 b(job)g(ma)m(y)h(also)g
+%%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
@@ -16019,13 +16503,13 @@ 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(62\).)40 b(An)m(y)24 b(trap)f(on)h
+(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(66\),)i(the)e(shell)f(prin)m(ts)g(a)h(w)m(arning)150
+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
@@ -16071,151 +16555,162 @@ 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: 109 115
-TeXDict begin 109 114 bop 150 -116 a Fu(Chapter)30 b(7:)41
-b(Job)30 b(Con)m(trol)2526 b(109)630 299 y Ft(-n)384
+%%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
-583 y Ft(-p)384 b Fu(List)31 b(only)f(the)h(pro)s(cess)f
+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
-757 y Ft(-r)384 b Fu(Displa)m(y)32 b(only)e(running)f(jobs.)630
-931 y Ft(-s)384 b Fu(Displa)m(y)32 b(only)e(stopp)s(ed)f(jobs.)630
-1105 y(If)23 b Fr(jobsp)s(ec)28 b Fu(is)23 b(giv)m(en,)i(output)e(is)g
+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 1214 y Fu(is)30 b(not)h(supplied,)e(the)i
-(status)g(of)f(all)h(jobs)f(is)h(listed.)630 1356 y(If)k(the)g
+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
-1466 y Fr(argumen)m(ts)j Fu(with)c(the)h(corresp)s(onding)e(pro)s(cess)
+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 1575 y(passing)30 b(it)h Fr(argumen)m(t)r Fu(s,)g(returning)f
-(its)g(exit)i(status.)150 1749 y Ft(kill)870 1891 y(kill)47
+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 2001
-y Ft(kill)g(-l|-L)f([)p Fj(exit_status)p Ft(])630 2143
+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 2252 y(cation)k
+(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 2362 y(suc)m(h)37 b(as)g Ft(SIGINT)f
+(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 2471 y
+(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 2581 y(The)27 b Ft(-l)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 2690 y(giv)m(en,)32 b(the)g(names)e(of)i(the)f(signals)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
-2800 y(the)c(return)f(status)h(is)g(zero.)41 b Fr(exit)p
-1796 2800 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 2910
+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 3019 y(to)34 b Ft(-l)p Fu(.)47 b(The)32
+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 3129 y(non-zero)d(if)f(an)h
+(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 3303 y Ft(wait)870 3445 y(wait)47
+(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 3587 y Fu(W)-8 b(ait)28
+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 3696 y Fr(jobsp)s(ec)40 b Fu(exits)35
+(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 3806 y(job)g(sp)s(ec)f(is)h(giv)m(en,)
+(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 3915 y(giv)m(en,)28
+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 4025 y(substitution,)37
+(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
-4134 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)g(the)h(list)g
-(of)g Fr(pids)630 4244 y Fu(or)31 b Fr(jobsp)s(ecs)k
-Fu(or,)d(if)f(no)g(argumen)m(ts)h(are)g(supplied,)e(an)m(y)i(job,)f(to)
-i(complete)f(and)f(returns)630 4354 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 4463 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 4573 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
-4682 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
-4792 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 4902 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 5011 y(the)39
-b Ft(-f)f Fu(option,)k(when)37 b(job)i(con)m(trol)h(is)f(enabled,)i
-(forces)e Ft(wait)e Fu(to)j(w)m(ait)g(for)e(eac)m(h)i
-Fr(pid)630 5121 y Fu(or)29 b Fr(jobsp)s(ec)34 b Fu(to)c(terminate)g(b)s
-(efore)f(returning)f(its)h(status,)h(in)m(tead)g(of)f(returning)f(when)
-g(it)630 5230 y(c)m(hanges)37 b(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 5340 y(the)31 b(shell,)f(the)h
-(return)e(status)i(is)f(127.)p eop end
-%%Page: 110 116
-TeXDict begin 110 115 bop 150 -116 a Fu(Chapter)30 b(7:)41
-b(Job)30 b(Con)m(trol)2526 b(110)150 299 y Ft(disown)870
-433 y(disown)46 b([-ar])g([-h])h([)p Fj(jobspec)f Ft(...)h(|)g
-Fj(pid)g Ft(...)g(])630 568 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 677 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 787 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 897 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 1006 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 1116
-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 1275 y Ft(suspend)870 1410 y(suspend)46 b([-f])630
-1544 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 1654 y(shell)28 b(cannot)g(b)s(e)f(susp)s(ended;)g
-(the)g Ft(-f)g Fu(option)i(can)f(b)s(e)f(used)g(to)h(o)m(v)m(erride)h
-(this)e(and)g(force)630 1763 y(the)k(susp)s(ension.)275
-1923 y(When)f(job)f(con)m(trol)j(is)e(not)h(activ)m(e,)i(the)d
+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 2032 y(men)m(ts.)41 b(They)30
+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
-2273 y Fs(7.3)68 b(Job)45 b(Con)l(trol)h(V)-11 b(ariables)150
-2457 y Ft(auto_resume)630 2567 y Fu(This)31 b(v)-5 b(ariable)32
+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 2677 y(this)28
+(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 2786 y(treated)h(as)g
+(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 2896 y(allo)m(w)m(ed;)f(if)d
+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 3005 y(most)j(recen)m(tly)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 3115
+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 3225 y(`)p Ft(exact)p Fu(',)33 b(the)g(string)g(supplied)f
+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 3334 y(set)29 b(to)h(`)p Ft(substring)p
+(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 3444 y(of)38 b(a)f(stopp)s(ed)g(job.)
+(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
-3553 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(107\).)56
-b(If)34 b(set)i(to)g(an)m(y)630 3663 y(other)c(v)-5 b(alue,)32
+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 3773 y(pro)m(vides)e
+(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: 111 117
-TeXDict begin 111 116 bop 3614 -116 a Fu(111)150 299
+%%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
@@ -16228,7 +16723,7 @@ b(Com-)150 745 y(mand)c(line)i(editing)f(is)g(pro)m(vided)g(b)m(y)g
 (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(51\).)52
+(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
@@ -16236,7 +16731,7 @@ 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
-(62\),)h(or)e(disabled)g(using)g(the)h Ft(+o)e(emacs)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
@@ -16275,7 +16770,7 @@ 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(114\).)52 b(If)33 b(y)m(our)g(k)m(eyb)s(oard)h(lac)m(ks)g(a)g
+(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
@@ -16299,9 +16794,9 @@ 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
 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: 112 118
-TeXDict begin 112 117 bop 150 -116 a Fu(Chapter)30 b(8:)41
-b(Command)29 b(Line)i(Editing)2062 b(112)150 299 y Fk(8.2.1)63
+%%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
@@ -16338,39 +16833,39 @@ h(c)m(haracter.)150 2108 y Ft(DEL)e Fu(or)i Ft(Backspace)630
 (cursor.)150 2826 y Fj(C-_)e Fu(or)i Fj(C-x)e(C-u)630
 2936 y Fu(Undo)k(the)h(last)g(editing)g(command.)50 b(Y)-8
 b(ou)34 b(can)f(undo)g(all)h(the)f(w)m(a)m(y)i(bac)m(k)f(to)g(an)g
-(empt)m(y)630 3045 y(line.)150 3215 y(\(Dep)s(ending)29
-b(on)h(y)m(our)f(con\014guration,)i(the)e Ft(Backspace)e
-Fu(k)m(ey)k(b)s(e)d(set)j(to)f(delete)h(the)e(c)m(haracter)i(to)g(the)
-150 3324 y(left)37 b(of)f(the)h(cursor)e(and)h(the)g
-Ft(DEL)g Fu(k)m(ey)h(set)f(to)h(delete)h(the)e(c)m(haracter)i
-(underneath)d(the)h(cursor,)i(lik)m(e)150 3434 y Fj(C-d)p
-Fu(,)30 b(rather)g(than)g(the)h(c)m(haracter)h(to)f(the)f(left)h(of)g
-(the)f(cursor.\))150 3640 y Fk(8.2.2)63 b(Readline)40
-b(Mo)m(v)m(emen)m(t)h(Commands)150 3787 y Fu(The)27 b(ab)s(o)m(v)m(e)i
-(table)g(describ)s(es)e(the)g(most)i(basic)f(k)m(eystrok)m(es)h(that)f
-(y)m(ou)g(need)g(in)f(order)g(to)i(do)e(editing)i(of)150
-3897 y(the)k(input)f(line.)49 b(F)-8 b(or)34 b(y)m(our)f(con)m(v)m
-(enience,)j(man)m(y)d(other)g(commands)f(ha)m(v)m(e)j(b)s(een)d(added)g
-(in)h(addition)150 4006 y(to)j Fj(C-b)p Fu(,)f Fj(C-f)p
-Fu(,)g Fj(C-d)p Fu(,)h(and)e Ft(DEL)p Fu(.)54 b(Here)35
-b(are)g(some)h(commands)e(for)h(mo)m(ving)h(more)f(rapidly)f(ab)s(out)h
-(the)150 4116 y(line.)150 4286 y Fj(C-a)336 b Fu(Mo)m(v)m(e)32
-b(to)g(the)e(start)h(of)g(the)f(line.)150 4452 y Fj(C-e)336
-b Fu(Mo)m(v)m(e)32 b(to)g(the)e(end)g(of)g(the)h(line.)150
-4618 y Fj(M-f)336 b Fu(Mo)m(v)m(e)32 b(forw)m(ard)e(a)h(w)m(ord,)f
-(where)g(a)h(w)m(ord)f(is)g(comp)s(osed)g(of)h(letters)h(and)d(digits.)
-150 4785 y Fj(M-b)336 b Fu(Mo)m(v)m(e)32 b(bac)m(kw)m(ard)f(a)g(w)m
-(ord.)150 4951 y Fj(C-l)336 b Fu(Clear)31 b(the)f(screen,)h(reprin)m
-(ting)f(the)h(curren)m(t)f(line)h(at)g(the)f(top.)275
-5121 y(Notice)c(ho)m(w)f Fj(C-f)e Fu(mo)m(v)m(es)j(forw)m(ard)e(a)h(c)m
-(haracter,)j(while)d Fj(M-f)e Fu(mo)m(v)m(es)j(forw)m(ard)e(a)h(w)m
-(ord.)39 b(It)24 b(is)h(a)g(lo)s(ose)150 5230 y(con)m(v)m(en)m(tion)32
+(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: 113 119
-TeXDict begin 113 118 bop 150 -116 a Fu(Chapter)30 b(8:)41
-b(Command)29 b(Line)i(Editing)2062 b(113)150 299 y Fk(8.2.3)63
+%%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
@@ -16398,14 +16893,14 @@ y Fj(M-d)336 b Fu(Kill)27 b(from)f(the)g(cursor)g(to)h(the)f(end)g(of)h
 (the)f(curren)m(t)g(w)m(ord,)h(or,)h(if)e(b)s(et)m(w)m(een)h(w)m(ords,)
 g(to)g(the)630 1946 y(end)j(of)g(the)h(next)f(w)m(ord.)41
 b(W)-8 b(ord)30 b(b)s(oundaries)f(are)i(the)g(same)f(as)h(those)g(used)
-f(b)m(y)g Fj(M-f)p Fu(.)150 2107 y Fj(M-DEL)240 b Fu(Kill)31
-b(from)f(the)h(cursor)f(the)g(start)h(of)g(the)g(curren)m(t)f(w)m(ord,)
-h(or,)f(if)h(b)s(et)m(w)m(een)g(w)m(ords,)f(to)i(the)630
-2217 y(start)39 b(of)f(the)h(previous)f(w)m(ord.)64 b(W)-8
-b(ord)39 b(b)s(oundaries)e(are)i(the)f(same)h(as)g(those)f(used)g(b)m
-(y)630 2326 y Fj(M-b)p Fu(.)150 2487 y Fj(C-w)336 b Fu(Kill)35
-b(from)g(the)g(cursor)f(to)i(the)f(previous)g(whitespace.)55
-b(This)34 b(is)h(di\013eren)m(t)h(than)e Fj(M-DEL)630
+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
@@ -16444,13 +16939,13 @@ 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(146\))i(for)d(lines)h(con)m(taining)
+(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: 114 120
-TeXDict begin 114 119 bop 150 -116 a Fu(Chapter)30 b(8:)41
-b(Command)29 b(Line)i(Editing)2062 b(114)275 299 y(Incremen)m(tal)26
+%%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
@@ -16504,8 +16999,8 @@ b(Readline)47 b(Init)e(File)150 3055 y Fu(Although)f(the)g(Readline)g
 (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)45 b(use)f(Readline)h(b)m(y)f(putting)g(commands)g(in)g(an)
-g Fr(inputrc)49 b Fu(\014le,)g(con)m(v)m(en)m(tionally)e(in)d(his)g
+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
@@ -16516,7 +17011,7 @@ b(that)g(\014le)h(do)s(es)e(not)i(exist)g(or)f(cannot)h(b)s(e)150
 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
-(51.)275 3843 y(When)e(a)h(program)f(whic)m(h)h(uses)f(the)h(Readline)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)
@@ -16529,7 +17024,7 @@ 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(122\).)64
+([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
@@ -16538,632 +17033,707 @@ b(ariable)32 b(Settings)630 5121 y(Y)-8 b(ou)41 b(can)g(mo)s(dify)e
 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: 115 121
-TeXDict begin 115 120 bop 150 -116 a Fu(Chapter)30 b(8:)41
-b(Command)29 b(Line)i(Editing)2062 b(115)870 299 y Ft(set)47
-b Fj(variable)e(value)630 436 y Fu(Here,)29 b(for)e(example,)h(is)g(ho)
+%%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 545 y(use)k Ft(vi)g Fu(line)h(editing)g(commands:)870
-682 y Ft(set)47 b(editing-mode)d(vi)630 819 y Fu(V)-8
+(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 929 y(to)c(case.)42
+(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
-1066 y(Bo)s(olean)c(v)-5 b(ariables)26 b(\(those)g(that)g(can)f(b)s(e)f
+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 1176 y(n)m(ull)e(or)g(empt)m(y)-8
+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 1285 y(b)s(eing)30 b(set)h(to)g(o\013.)630
-1422 y(The)37 b Ft(bind)30 b(-V)37 b Fu(command)g(lists)i(the)f(curren)
+-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 1532 y(See)31 b(Section)g(4.2)g([Bash)g(Builtins],)g(page)
-g(51.)630 1669 y(A)f(great)i(deal)f(of)g(run-time)f(b)s(eha)m(vior)g
+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 1833 y Ft(bell-style)1110 1943 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 2052 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 2162 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 2271 y(`)p Ft(audible)p
-Fu(')j(\(the)i(default\),)i(Readline)e(attempts)g(to)h(ring)e(the)g
-(terminal's)1110 2381 y(b)s(ell.)630 2545 y Ft(bind-tty-special-chars)
-1110 2655 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
-2765 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 2874
-y(Readline)h(equiv)-5 b(alen)m(ts.)630 3039 y Ft(blink-matching-paren)
-1110 3148 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
-3258 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 3367 y(default)31
-b(is)f(`)p Ft(off)p Fu('.)630 3532 y Ft(colored-completion-prefi)o(x)
-1110 3641 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
-3751 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
-3861 y(The)39 b(color)i(de\014nitions)f(are)g(tak)m(en)h(from)f(the)g
-(v)-5 b(alue)40 b(of)g(the)g Ft(LS_COLORS)1110 3970 y
-Fu(en)m(vironmen)m(t)31 b(v)-5 b(ariable.)41 b(The)30
-b(default)h(is)f(`)p Ft(off)p Fu('.)630 4134 y Ft(colored-stats)1110
-4244 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
-4354 y(colors)40 b(to)g(indicate)g(their)f(\014le)h(t)m(yp)s(e.)67
+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
-4463 y(from)24 b(the)h(v)-5 b(alue)25 b(of)g(the)g Ft(LS_COLORS)d
+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
-4573 y(is)30 b(`)p Ft(off)p Fu('.)630 4737 y Ft(comment-begin)1110
-4847 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 4956 y Ft(insert-comment)26
+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 5121 y Ft(completion-display-width)
-1110 5230 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 5340
+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)p
-eop end
-%%Page: 116 122
-TeXDict begin 116 121 bop 150 -116 a Fu(Chapter)30 b(8:)41
-b(Command)29 b(Line)i(Editing)2062 b(116)1110 299 y(0)27
-b(or)f(greater)h(than)f(the)g(terminal)h(screen)f(width.)39
+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
-408 y(matc)m(hes)32 b(to)f(b)s(e)e(displa)m(y)m(ed)i(one)g(p)s(er)e
+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
-587 y Ft(completion-ignore-case)1110 696 y Fu(If)d(set)h(to)g(`)p
+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 806 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 984 y Ft(completion-map-case)1110 1093 y Fu(If)22
+(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 1203 y(h)m(yphens)29
+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
-1313 y(case-insensitiv)m(e)47 b(\014lename)e(matc)m(hing)g(and)f
-(completion.)85 b(The)44 b(default)1110 1422 y(v)-5 b(alue)31
-b(is)f(`)p Ft(off)p Fu('.)630 1600 y Ft(completion-prefix-displa)o
-(y-le)o(ngth)1110 1710 y Fu(The)h(length)g(in)g(c)m(haracters)i(of)f
+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
-1819 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 1929
+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 2039
+(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 2217 y Ft(completion-query-items)1110
-2326 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 2436 y(is)43
+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 2545 y(the)29 b(n)m(um)m(b)s(er)f
+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 2655 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)1110
-2765 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
-2874 y(to)39 b(an)f(in)m(teger)i(v)-5 b(alue)39 b(greater)g(than)f(or)h
-(equal)g(to)g(0.)65 b(A)38 b(negativ)m(e)i(v)-5 b(alue)1110
-2984 y(means)30 b(Readline)h(should)f(nev)m(er)g(ask.)41
-b(The)30 b(default)h(limit)g(is)f Ft(100)p Fu(.)630 3162
-y Ft(convert-meta)1110 3271 y Fu(If)22 b(set)g(to)h(`)p
+(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 3381 y(to)33 b(an)e
+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 3491 y(an)24 b Ft(ESC)g
+(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 3600 y(The)i(default)h(v)-5
+(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
-3710 y(that)j(con)m(tains)h(eigh)m(t-bit)g(c)m(haracters.)630
-3888 y Ft(disable-completion)1110 3998 y Fu(If)k(set)h(to)h(`)p
-Ft(On)p Fu(',)g(Readline)f(will)g(inhibit)f(w)m(ord)h(completion.)60
-b(Completion)1110 4107 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
-4217 y(to)31 b Ft(self-insert)p Fu(.)38 b(The)30 b(default)g(is)h(`)p
-Ft(off)p Fu('.)630 4395 y Ft(echo-control-characters)1110
-4504 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 4614
-y(it,)i(readline)e(ec)m(ho)s(es)i(a)f(c)m(haracter)h(corresp)s(onding)d
-(to)j(a)f(signal)g(generated)1110 4724 y(from)e(the)g(k)m(eyb)s(oard.)
-41 b(The)30 b(default)g(is)h(`)p Ft(on)p Fu('.)630 4902
-y Ft(editing-mode)1110 5011 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 5121 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 5230 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
-5340 y(b)s(e)g(set)h(to)g(either)g(`)p Ft(emacs)p Fu(')e(or)h(`)p
-Ft(vi)p Fu('.)p eop end
-%%Page: 117 123
-TeXDict begin 117 122 bop 150 -116 a Fu(Chapter)30 b(8:)41
-b(Command)29 b(Line)i(Editing)2062 b(117)630 299 y Ft
-(emacs-mode-string)1110 408 y Fu(If)33 b(the)h Fr(sho)m(w-mo)s
+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 518 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
-628 y(emacs)g(editing)h(mo)s(de)e(is)h(activ)m(e.)40
+(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 737 y(ing,)27 b(so)f(the)f(standard)g(set)h(of)f(meta-)i
+(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
-847 y(escap)s(e)f(sequences)h(is)e(a)m(v)-5 b(ailable.)41
+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 956 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 1066 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 1176
-y(default)31 b(is)f(`)p Ft(@)p Fu('.)630 1332 y Ft
-(enable-bracketed-paste)1110 1442 y Fu(When)24 b(set)h(to)h(`)p
-Ft(On)p Fu(',)g(Readline)f(will)g(con\014gure)f(the)h(terminal)g(in)f
-(a)h(w)m(a)m(y)g(that)1110 1551 y(will)k(enable)f(it)h(to)g(insert)g
-(eac)m(h)g(paste)g(in)m(to)g(the)g(editing)g(bu\013er)e(as)i(a)f
-(single)1110 1661 y(string)33 b(of)f(c)m(haracters,)j(instead)e(of)g
-(treating)h(eac)m(h)g(c)m(haracter)g(as)f(if)f(it)i(had)1110
-1771 y(b)s(een)e(read)i(from)e(the)i(k)m(eyb)s(oard.)49
-b(This)32 b(can)h(prev)m(en)m(t)h(pasted)f(c)m(haracters)1110
-1880 y(from)d(b)s(eing)g(in)m(terpreted)h(as)f(editing)h(commands.)41
-b(The)29 b(default)i(is)f(`)p Ft(On)p Fu('.)630 2037
-y Ft(enable-keypad)1110 2146 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 2256 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 2365 y(The)j(default)g(is)h(`)p Ft(off)p Fu('.)630
-2522 y Ft(enable-meta-key)1110 2632 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 2741 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
-2851 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 2960 y(default)31
-b(is)f(`)p Ft(on)p Fu('.)630 3117 y Ft(expand-tilde)1110
-3226 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 3336
-y(w)m(ord)i(completion.)42 b(The)30 b(default)g(is)h(`)p
-Ft(off)p Fu('.)630 3493 y Ft(history-preserve-point)1110
-3602 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
-3712 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 3821 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 3931 y(is)30 b(`)p Ft(off)p
-Fu('.)630 4088 y Ft(history-size)1110 4197 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 4307 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 4416 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 4526 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 4635 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 4745 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 4855 y(b)s(e)c(set)h(to)g(500.)630 5011 y
-Ft(horizontal-scroll-mode)1110 5121 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 5230 y(means)26 b(that)h(the)f(text)h
+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 5340 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)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)1110 299 y(screen,)28
-b(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 408 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 518 y(v)-5 b(ariable)31
-b(is)g(set)f(to)i(`)p Ft(off)p Fu('.)630 719 y Ft(input-meta)1110
-829 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
-938 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 1048 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 1157 y(Readline)24
-b(will)h(set)f(it)g(to)h(`)p Ft(on)p Fu(')e(if)h(the)g(lo)s(cale)i(con)
-m(tains)f(eigh)m(t-bit)g(c)m(haracters.)1110 1267 y(The)30
-b(name)g Ft(meta-flag)e Fu(is)j(a)f(synon)m(ym)g(for)g(this)h(v)-5
-b(ariable.)630 1468 y Ft(isearch-terminators)1110 1577
-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 1687 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
-1797 y(\(see)38 b(Section)g(8.2.5)h([Searc)m(hing],)h(page)e(113\).)62
-b(If)37 b(this)g(v)-5 b(ariable)38 b(has)f(not)1110 1906
-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
-2016 y(incremen)m(tal)c(searc)m(h.)630 2217 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 2326 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 2436 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 2545 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 2655 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 2765 y(ma)m(y)32 b(add)e(additional)i
+(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 2874 y(of)31
+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 3075 y Ft(keyseq-timeout)1110
-3185 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 3294
+(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 3404 y(sequence)j(using)e(the)i
+(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 3513 y(to)g(complete)g(a)f(longer)h(k)m(ey)f(sequence\).)49
+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
-3623 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 3733 y(quence.)c(Readline)26
+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 3842 y(is)31 b(a)m(v)-5 b(ailable)33 b(on)d(the)h(curren)m
+(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
-3952 y(The)25 b(v)-5 b(alue)26 b(is)f(sp)s(eci\014ed)f(in)h
+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 4061 y(Readline)e(will)g(w)m(ait)g(one)g(second)f(for)g
+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 4171 y(set)28 b(to)h(a)f(v)-5 b(alue)29 b(less)f(than)g(or)f
+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 4281 y(Readline)30 b(will)f(w)m(ait)i(un)m(til)e(another)h
+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
-4390 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 4591 y Ft(mark-directories)1110
-4701 y Fu(If)38 b(set)g(to)h(`)p Ft(on)p Fu(',)i(completed)e(directory)
+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
-4810 y(The)30 b(default)g(is)h(`)p Ft(on)p Fu('.)630
-5011 y Ft(mark-modified-lines)1110 5121 y Fu(This)k(v)-5
+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 5230 y(terisk)f(\(`)p
+(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 5340 y(This)d(v)-5
-b(ariable)31 b(is)f(`)p Ft(off)p Fu(')g(b)m(y)g(default.)p
+(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: 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)630 299 y Ft
-(mark-symlinked-directori)o(es)1110 408 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 518 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 628 y Ft(mark-directories)p Fu(\).)37 b(The)30
-b(default)g(is)g(`)p Ft(off)p Fu('.)630 778 y Ft(match-hidden-files)
-1110 888 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 998 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
-1107 y(completion.)75 b(If)41 b(set)g(to)h(`)p Ft(off)p
-Fu(',)i(the)e(leading)g(`)p Ft(.)p Fu(')f(m)m(ust)g(b)s(e)g(supplied)f
-(b)m(y)1110 1217 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 1326 y(default.)630 1477 y
-Ft(menu-complete-display-pr)o(efix)1110 1587 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 1696 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
-1806 y(through)30 b(the)g(list.)42 b(The)29 b(default)i(is)f(`)p
-Ft(off)p Fu('.)630 1956 y Ft(output-meta)1110 2066 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 2176
-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 2285 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
-2395 y(eigh)m(t-bit)k(c)m(haracters.)630 2545 y Ft(page-completions)
-1110 2655 y Fu(If)h(set)i(to)f(`)p Ft(on)p Fu(',)h(Readline)g(uses)e
-(an)h(in)m(ternal)h Ft(more)p Fu(-lik)m(e)f(pager)g(to)h(displa)m(y)
-1110 2765 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 2874 y(b)m(y)e(default.)630 3025 y Ft
-(print-completions-horizo)o(ntal)o(ly)1110 3134 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 3244 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 3354 y(The)30 b(default)g(is)h(`)p Ft(off)p
-Fu('.)630 3504 y Ft(revert-all-at-newline)1110 3614 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 3724
-y(returning)f(when)f Ft(accept-line)f Fu(is)j(executed.)41
-b(By)29 b(default,)g(history)g(lines)1110 3833 y(ma)m(y)42
+%%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 3943 y Ft(readline)p Fu(.)38
-b(The)30 b(default)h(is)f(`)p Ft(off)p Fu('.)630 4093
-y Ft(show-all-if-ambiguous)1110 4203 y Fu(This)f(alters)i(the)f
+(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 4313 y(to)f(`)p Ft(on)p Fu(',)g(w)m(ords)f(whic)m(h)
+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 4422 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 4532 y(The)30
+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
-4682 y Ft(show-all-if-unmodified)1110 4792 y Fu(This)38
+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 4902 y(fashion)25 b(similar)h(to)g
+(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 5011 y(ha)m(v)m(e)32
+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 5121 y(tial)43 b(completion)h(\(the)f(p)s(ossible)
-f(completions)h(don't)f(share)g(a)h(common)1110 5230
+(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 5340 y(ing)g(the)f(b)s(ell.)41
+(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('.)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)630 299 y Ft
-(show-mode-in-prompt)1110 408 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 518 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 628 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 737 y(v)-5 b(alue)31 b(is)f(`)p Ft(off)p
-Fu('.)630 887 y Ft(skip-completed-text)1110 996 y Fu(If)i(set)i(to)f(`)
-p Ft(on)p Fu(',)h(this)f(alters)g(the)g(default)g(completion)h(b)s(eha)
-m(vior)f(when)f(in-)1110 1106 y(serting)d(a)h(single)g(matc)m(h)f(in)m
+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 1215 y(ing)35 b(completion)h(in)e(the)h(middle)f(of)h(a)f(w)m
-(ord.)53 b(If)35 b(enabled,)g(readline)g(do)s(es)1110
-1325 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 1435 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 1544 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
-1654 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 1763 y(`)p Ft(Makefile)p
+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 1873 y(assuming)d(there)g(is)h(a)f
+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 1983 y(is)30 b(`)p Ft(off)p Fu('.)630 2132
-y Ft(vi-cmd-mode-string)1110 2242 y Fu(If)j(the)h Fr(sho)m(w-mo)s
+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 2351 y(pla)m(y)m(ed)24 b(immediately)g(b)s(efore)f(the)
+(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
-2461 y(vi)32 b(editing)h(mo)s(de)f(is)g(activ)m(e)j(and)c(in)h(command)
+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
-2570 y(panded)26 b(lik)m(e)i(a)f(k)m(ey)h(binding,)e(so)i(the)f
+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
-2680 y(pre\014xes)34 b(and)g(bac)m(kslash)i(escap)s(e)g(sequences)f(is)
+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 2790 y(and)23 b(`)p Ft(\\2)p Fu(')h(escap)s(es)h(to)f(b)s
+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
-2899 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 3009
+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 3158 y Ft(vi-ins-mode-string)1110
-3268 y Fu(If)j(the)h Fr(sho)m(w-mo)s(de-in-prompt)h Fu(v)-5
+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
-3377 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 3487 y(vi)35
+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 3597 y(panded)26
+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 3706 y(pre\014xes)34 b(and)g(bac)m
+(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 3816 y(and)23
+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 3925
+(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 4035
+(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 4184 y Ft(visible-stats)1110 4294
+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
-4403 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 4553
-y(Key)f(Bindings)630 4663 y(The)41 b(syn)m(tax)i(for)f(con)m(trolling)h
+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 4772 y(need)27 b(to)i(\014nd)d(the)i(name)f(of)
+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 4882 y(sections)37 b(con)m(tain)g(tables)g
+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 4991 y(and)30 b(a)h(short)f(description)g(of)h(what)f
-(the)g(command)h(do)s(es.)630 5121 y(Once)36 b(y)m(ou)g(kno)m(w)g(the)g
+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 5230 y(\014le)e(the)g(name)f(of)h(the)g(k)m(ey)g(y)m
+(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 5340 y(the)f(name)h(of)f(the)g(command.)46 b(There)32
+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)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)630 299 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 408
-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
-518 y(comfortable.)630 650 y(In)i(addition)h(to)h(command)f(names,)i
-(readline)e(allo)m(ws)h(k)m(eys)g(to)g(b)s(e)e(b)s(ound)f(to)j(a)f
-(string)630 759 y(that)31 b(is)f(inserted)h(when)e(the)i(k)m(ey)g(is)f
-(pressed)g(\(a)h Fr(macro)5 b Fu(\).)630 891 y(The)42
+(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 1000 y(format)37
-b(that)h(can)f(put)f(directly)i(in)m(to)g(an)f(initialization)j
-(\014le.)60 b(See)38 b(Section)f(4.2)i([Bash)630 1110
-y(Builtins],)31 b(page)g(51.)630 1263 y Fr(k)m(eyname)5
-Fu(:)42 b Fr(function-name)35 b Fu(or)c Fr(macro)1110
-1373 y(k)m(eyname)k Fu(is)29 b(the)f(name)h(of)g(a)g(k)m(ey)h(sp)s
+(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
-1504 y Ft(Control-u:)45 b(universal-argument)1350 1614
-y(Meta-Rubout:)f(backward-kill-word)1350 1724 y(Control-o:)h(">)i
-(output")1110 1855 y Fu(In)94 b(the)g(example)h(ab)s(o)m(v)m(e,)112
+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
-1965 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 2074 y
+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 2184 y(expressed)45 b(on)h(the)g(righ)m(t)
+(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 2293 y(output)p Fu(')29 b(in)m(to)i(the)g(line\).)1110
-2425 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 2534 y(pro)s(cessing)40
+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 2644 y Fr(NEWLINE)p Fu(,)31 b Fr(RET)p Fu(,)f
+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
-2798 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 2907 y(k)m(eyseq)k Fu(di\013ers)d(from)f
+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 3017 y(tire)j(k)m(ey)h(sequence)f(can)g(b)s
+(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 3126 y(double)29 b(quotes.)41 b(Some)29 b Fm(gnu)h
+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 3236 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 3345 y(recognized.)1350
-3477 y Ft("\\C-u":)46 b(universal-argument)1350 3587
-y("\\C-x\\C-r":)f(re-read-init-file)1350 3696 y("\\e[11~":)g("Function)
-h(Key)g(1")1110 3828 y Fu(In)64 b(the)g(ab)s(o)m(v)m(e)i(example,)74
+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
-3937 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 4047
+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
-4156 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 4310 y(The)g(follo)m(wing)i
+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 4419 y(k)m(ey)i(sequences:)630
-4573 y Fj(\\C-)336 b Fu(con)m(trol)32 b(pre\014x)630
-4726 y Fj(\\M-)336 b Fu(meta)31 b(pre\014x)630 4880 y
+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
-5033 y Fj(\\\\)384 b Fu(bac)m(kslash)630 5187 y Fj(\\)p
+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
-5340 y Fj(\\')384 b Ft(')p Fu(,)30 b(a)h(single)g(quote)g(or)f(ap)s
-(ostrophe)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(In)27
-b(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
-408 y(escap)s(es)j(is)f(a)m(v)-5 b(ailable:)630 570 y
-Ft(\\a)384 b Fu(alert)31 b(\(b)s(ell\))630 731 y Ft(\\b)384
-b Fu(bac)m(kspace)630 892 y Ft(\\d)g Fu(delete)630 1053
-y Ft(\\f)g Fu(form)30 b(feed)630 1214 y Ft(\\n)384 b
-Fu(newline)630 1375 y Ft(\\r)g Fu(carriage)32 b(return)630
-1536 y Ft(\\t)384 b Fu(horizon)m(tal)32 b(tab)630 1697
-y Ft(\\v)384 b Fu(v)m(ertical)32 b(tab)630 1858 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 1968 y(three)c(digits\))630 2129 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 2239 y Fu(\(one)31 b(or)f(t)m(w)m(o)i(hex)e(digits\))630
-2400 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
-2509 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 2619 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 2729 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
+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 2838 y(example,)28 b(the)e(follo)m(wing)h(binding)d(will)i
+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 2974 y Ft("\\C-x\\\\":)45
-b("\\\\")150 3175 y Fk(8.3.2)63 b(Conditional)41 b(Init)g(Constructs)
-150 3322 y Fu(Readline)c(implemen)m(ts)g(a)h(facilit)m(y)g(similar)f
+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
-3431 y(the)31 b(C)f(prepro)s(cessor)g(whic)m(h)g(allo)m(ws)i(k)m(ey)g
+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 3541 y(result)f(of)h(tests.)41
+(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
-3703 y Ft($if)336 b Fu(The)31 b Ft($if)f Fu(construct)i(allo)m(ws)h
+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 3812 y(terminal)37 b(b)s(eing)f(used,)h(or)f(the)h
+(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 3922 y(after)30 b(an)m(y)g(comparison)g(op)s(erator,)g(extends)f
+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
-4031 y(noted,)i(no)f(c)m(haracters)i(are)f(required)e(to)i(isolate)i
-(it.)630 4193 y Ft(mode)288 b Fu(The)30 b Ft(mode=)e
+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 4302 y(line)44 b(is)f(in)g Ft(emacs)f
+(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 4412 y(with)c(the)h(`)p Ft(set)29 b(keymap)p
+(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
-4521 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 4631 y(starting)f(out)g
-(in)f Ft(emacs)f Fu(mo)s(de.)630 4792 y Ft(term)288 b
+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 4902 y(ings,)38
+(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 5011 y(function)24 b(k)m(eys.)39
+(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 5121 y(b)s(oth)k(the)h(full)g
+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 5230 y(name)k(b)s(efore)f(the)g(\014rst)g(`)p
+(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 5340 y Ft(sun-cmd)p Fu(,)c(for)h(instance.)
-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)630 299 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 408 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 518 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 628 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
-737 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,)1110
-847 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 956
-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 1066 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
-1176 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
-1285 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
-1440 y Ft($if)47 b(version)f(>=)h(7.0)1350 1550 y(set)g
-(show-mode-in-prompt)42 b(on)1350 1659 y($endif)630 1860
-y(application)1110 1970 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 2079 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
-2189 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
-2298 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 2408
-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 2518 y(the)e(curren)m(t)f(or)g(previous)
-g(w)m(ord)g(in)g(Bash:)1350 2673 y Ft($if)47 b(Bash)1350
-2782 y(#)g(Quote)g(the)g(current)f(or)h(previous)e(word)1350
-2892 y("\\C-xq":)h("\\eb\\"\\ef\\"")1350 3002 y($endif)630
-3202 y(variable)96 b Fu(The)33 b Fr(v)-5 b(ariable)39
+(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 3312 y(v)-5 b(ariables)32 b(and)f(v)-5
+(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 3421 y(`)p Ft(==)p Fu(',)49 b(and)44
+(`)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 3531 y(comparison)25
+(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 3641 y(from)33 b(the)h(v)-5 b(alue)35
+(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 3750 y(and)i(b)s(o)s(olean)g(v)-5
+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 3860 y(tested)46
+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
-3969 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 4124 y
-Ft($if)47 b(editing-mode)d(==)k(emacs)1350 4234 y(set)f
-(show-mode-in-prompt)42 b(on)1350 4344 y($endif)150 4544
+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
-4745 y Ft($else)240 b Fu(Commands)29 b(in)h(this)h(branc)m(h)e(of)i
+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 4945 y Ft($include)96 b Fu(This)43 b(directiv)m(e)i(tak)m
+(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 5055 y(and)38 b(bindings)f(from)h(that)i(\014le.)65
+(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 5165 y Ft(/etc/inputrc)p Fu(:)870 5320 y Ft($include)46
-b(/etc/inputrc)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)150 299 y Fk(8.3.3)63
-b(Sample)41 b(Init)g(File)150 446 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
-555 y(conditional)j(syn)m(tax.)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)390 408 y Ft(#)47
+(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)
@@ -17192,9 +17762,9 @@ y(#)47 b(Arrow)g(keys)f(in)i(8)f(bit)g(keypad)f(mode)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: 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)390 299 y Ft(#"\\M-\\C-[A":)
+%%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)
@@ -17227,9 +17797,9 @@ y($endif)390 3477 y(#)i(use)g(a)h(visible)e(bell)g(if)h(one)g(is)h
 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: 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)390 299 y Ft(#)47
+%%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)
@@ -17239,7 +17809,7 @@ 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(51.\))41 b(Command)28 b(names)h(without)
+([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
@@ -17279,9 +17849,9 @@ b(screen)f(line.)39 b(This)24 b(will)i(not)f(ha)m(v)m(e)h(the)f
 (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: 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)150 299 y Ft(next-screen-line)
+%%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
@@ -17339,9 +17909,9 @@ b(\(M-p\))630 5121 y Fu(Searc)m(h)31 b(bac)m(kw)m(ard)h(starting)g(at)g
 (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: 129 135
-TeXDict begin 129 134 bop 150 -116 a Fu(Chapter)30 b(8:)41
-b(Command)29 b(Line)i(Editing)2062 b(129)150 299 y Ft
+%%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
@@ -17415,1094 +17985,1109 @@ b(the)g(curren)m(t)e(line)i(for)f(return)f(to)h(the)h(calling)g
 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: 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)630 299 y(for)31
+%%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 605
-y Fk(8.4.3)63 b(Commands)42 b(F)-10 b(or)41 b(Changing)g(T)-10
-b(ext)150 775 y Fj(end-of-file)27 b Ft(\(usually)h(C-d\))630
-885 y Fu(The)e(c)m(haracter)h(indicating)h(end-of-\014le)e(as)h(set,)g
+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 995 y(ter)c(is)g(read)g(when)e(there)i(are)h(no)e(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 1104 y(of)31 b(the)f(line,)h(Readline)g(in)m(terprets)g
+(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 1261 y Ft(delete-char)e(\(C-d\))630 1370 y Fu(Delete)35
+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 1480
+(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 1637 y Ft(backward-delete-char)25 b(\(Rubout\))630
-1746 y Fu(Delete)32 b(the)f(c)m(haracter)g(b)s(ehind)e(the)h(cursor.)40
+(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
-1856 y(c)m(haracters)h(instead)e(of)h(deleting)g(them.)150
-2013 y Ft(forward-backward-delete-)o(char)24 b(\(\))630
-2122 y Fu(Delete)40 b(the)f(c)m(haracter)h(under)c(the)j(cursor,)h
+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
-2232 y(line,)33 b(in)e(whic)m(h)g(case)i(the)f(c)m(haracter)h(b)s
+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
-2341 y(is)e(not)h(b)s(ound)d(to)j(a)g(k)m(ey)-8 b(.)150
-2498 y Ft(quoted-insert)27 b(\(C-q)i(or)h(C-v\))630 2608
+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
-2717 y(sequences)d(lik)m(e)g Fj(C-q)p Fu(,)f(for)g(example.)150
-2874 y Ft(self-insert)d(\(a,)j(b,)g(A,)f(1,)h(!,)g(...)o(\))630
-2983 y Fu(Insert)g(y)m(ourself.)150 3140 y Ft(bracketed-paste-begin)25
-b(\(\))630 3250 y Fu(This)f(function)h(is)f(in)m(tended)h(to)h(b)s(e)e
+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 3359 y(sen)m(t)38
+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
-3469 y(Readline)33 b(to)g(insert)g(the)f(pasted)h(text)g(as)g(a)g
+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
-3578 y(acter)40 b(as)f(if)g(it)g(had)f(b)s(een)g(read)h(from)f(the)h(k)
+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
-3688 y(as)44 b(if)g(eac)m(h)i(one)e(w)m(as)g(b)s(ound)e(to)j
+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
-3798 y(commands.)630 3931 y(Brac)m(k)m(eted)38 b(paste)f(sets)f(the)h
+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 4040 y(to)j(the)g(inserted)f(text.)65
+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 4150 y(is)d(activ)m(e,)k(Readline)
+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 4260 y(region.)150 4416 y Ft(transpose-chars)26
-b(\(C-t\))630 4526 y Fu(Drag)33 b(the)f(c)m(haracter)h(b)s(efore)f(the)
+(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 4635 y(mo)m(ving)k(the)g(cursor)f(forw)m(ard)g(as)g(w)m
+(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 4745 y(line,)24 b(then)e(this)g(transp)s(oses)f(the)h
+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 4855 y(ha)m(v)m(e)32
-b(no)e(e\013ect.)150 5011 y Ft(transpose-words)c(\(M-t\))630
-5121 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 5230 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 5340 y(last)j(t)m(w)m(o)h(w)m
-(ords)e(on)g(the)h(line.)p eop end
-%%Page: 131 137
-TeXDict begin 131 136 bop 150 -116 a Fu(Chapter)30 b(8:)41
-b(Command)29 b(Line)i(Editing)2062 b(131)150 299 y Ft(upcase-word)27
-b(\(M-u\))630 408 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 518 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 665 y Ft(downcase-word)d(\(M-l\))
-630 775 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 884 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 1032 y Ft(capitalize-word)26
-b(\(M-c\))630 1141 y Fu(Capitalize)d(the)f(curren)m(t)f(\(or)g(follo)m
+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 1251 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 1398 y Ft(overwrite-mode)26
-b(\(\))630 1508 y Fu(T)-8 b(oggle)35 b(o)m(v)m(erwrite)g(mo)s(de.)48
+(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 1617 y(to)22 b(o)m(v)m(erwrite)i(mo)s(de.)37
+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 1727 y(insert)30 b(mo)s(de.)41
+(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 1837
+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
-1965 y(In)52 b(o)m(v)m(erwrite)h(mo)s(de,)58 b(c)m(haracters)c(b)s
+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
-2075 y(p)s(oin)m(t)59 b(rather)f(than)h(pushing)e(the)i(text)g(to)h
+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
-2184 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 2313
+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
-2500 y Fk(8.4.4)63 b(Killing)42 b(And)e(Y)-10 b(anking)150
-2665 y Ft(kill-line)28 b(\(C-k\))630 2775 y Fu(Kill)k(the)f(text)i
+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
-2885 y(men)m(t,)g(kill)g(bac)m(kw)m(ard)g(from)f(the)g(cursor)g(to)h
+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
-3032 y Ft(backward-kill-line)25 b(\(C-x)30 b(Rubout\))630
-3141 y Fu(Kill)40 b(bac)m(kw)m(ard)h(from)e(the)h(cursor)g(to)g(the)g
+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 3251 y(negativ)m(e)47 b(n)m(umeric)e(argumen)m(t,)50
+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 3361 y(curren)m(t)30 b(line.)150 3508 y Ft(unix-line-discard)c
-(\(C-u\))630 3617 y Fu(Kill)31 b(bac)m(kw)m(ard)g(from)e(the)i(cursor)f
+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
-3765 y Ft(kill-whole-line)c(\(\))630 3874 y Fu(Kill)37
+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
-3984 y(this)30 b(is)h(un)m(b)s(ound.)150 4131 y Ft(kill-word)d(\(M-d\))
-630 4241 y Fu(Kill)i(from)f(p)s(oin)m(t)g(to)h(the)g(end)e(of)i(the)f
+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 4350 y(of)h(the)f(next)h(w)m(ord.)40 b(W)-8
+(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 4498 y Ft(backward-kill-word)25 b(\(M-DEL\))630
-4607 y Fu(Kill)k(the)g(w)m(ord)g(b)s(ehind)e(p)s(oin)m(t.)40
+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(.)150 4754 y Ft(shell-kill-word)d(\(M-C-d\))630
-4864 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 4974 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 5121 y Ft(shell-backward-kill-word)24
-b(\(\))630 5230 y Fu(Kill)e(the)h(w)m(ord)e(b)s(ehind)g(p)s(oin)m(t.)38
+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 5340 y(word)p Fu(.)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)150 299 y Ft
-(shell-transpose-words)25 b(\(M-C-t\))630 408 y Fu(Drag)33
+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
-518 y(w)m(ord)c(as)h(w)m(ell.)41 b(If)27 b(the)i(insertion)f(p)s(oin)m
+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 628 y(last)j(t)m(w)m(o)h(w)m(ords)d(on)i(the)f(line.)41
+(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 737 y(word)e Fu(and)h Ft(shell-backward-word)p
-Fu(.)150 897 y Ft(unix-word-rubout)c(\(C-w\))630 1007
+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 1116 y(text)g(is)g(sa)m(v)m(ed)g(on)g(the)f
-(kill-ring.)150 1277 y Ft(unix-filename-rubout)25 b(\(\))630
-1386 y Fu(Kill)37 b(the)f(w)m(ord)g(b)s(ehind)f(p)s(oin)m(t,)j(using)e
+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
-1496 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 1656 y Ft
-(delete-horizontal-space)24 b(\(\))630 1765 y Fu(Delete)33
+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 1925
-y Ft(kill-region)d(\(\))630 2035 y Fu(Kill)k(the)f(text)i(in)e(the)g
+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 2195 y Ft(copy-region-as-kill)25 b(\(\))630
-2305 y Fu(Cop)m(y)34 b(the)g(text)h(in)f(the)g(region)g(to)h(the)f
+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 2414 y(By)31 b(default,)f(this)h(command)f
-(is)g(un)m(b)s(ound.)150 2574 y Ft(copy-backward-word)25
-b(\(\))630 2684 y Fu(Cop)m(y)38 b(the)h(w)m(ord)f(b)s(efore)g(p)s(oin)m
+(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 2793 y(same)31 b(as)f Ft(backward-word)p
+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
-2953 y Ft(copy-forward-word)26 b(\(\))630 3063 y Fu(Cop)m(y)31
+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
-3173 y(same)f(as)f Ft(forward-word)p Fu(.)38 b(By)30
+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
-3333 y Ft(yank)f(\(C-y\))630 3442 y Fu(Y)-8 b(ank)31
+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 3602 y Ft(yank-pop)d(\(M-y\))630 3712
+(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
-3822 y(command)30 b(is)h Ft(yank)e Fu(or)h Ft(yank-pop)p
-Fu(.)150 4021 y Fk(8.4.5)63 b(Sp)s(ecifying)42 b(Numeric)f(Argumen)m
-(ts)150 4194 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 4303 y Fu(Add)d(this)h(digit)g
+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 4413 y Fj(M--)j Fu(starts)i(a)g(negativ)m(e)i
-(argumen)m(t.)150 4573 y Ft(universal-argument)25 b(\(\))630
-4682 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 4792 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
-4902 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
-5011 y Fu(again)j(ends)e(the)h(n)m(umeric)f(argumen)m(t,)i(but)e(is)h
+(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
-5121 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
-5230 y(nor)41 b(min)m(us)f(sign,)k(the)e(argumen)m(t)f(coun)m(t)h(for)f
+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
-5340 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)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)630 299 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 408 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 603 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 772 y Ft(complete)28
-b(\(TAB\))630 882 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 991 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 1101 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 1210 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 1320 y(functions\))j(in)f(turn.)53
+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 1430 y(attempted.)150 1584 y Ft
-(possible-completions)25 b(\(M-?\))630 1694 y Fu(List)35
+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 1803
+(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 1913 y Ft(completion-display-width)o Fu(,)g(the)j(v)-5
+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 2022 y(or)30 b(the)h(screen)f(width,)g(in)g
-(that)h(order.)150 2177 y Ft(insert-completions)25 b(\(M-*\))630
-2286 y Fu(Insert)30 b(all)h(completions)h(of)f(the)g(text)g(b)s(efore)f
+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
-2396 y(b)m(y)g Ft(possible-completions)p Fu(.)150 2550
-y Ft(menu-complete)d(\(\))630 2660 y Fu(Similar)d(to)g
+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 2770 y(from)37
+(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 2879 y Fu(steps)i(through)g
+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 2989 y(A)m(t)e(the)f(end)f(of)h(the)g(list)g
+(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 3098 y(of)f Ft(bell-style)p
+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 3208 y Fu(p)s(ositions)e(forw)m(ard)f(in)g(the)h(list)h(of)e
+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 3318 y(mo)m(v)m(e)40 b(bac)m(kw)m(ard)e(through)g(the)g
+(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 3427 y Ft(TAB)p Fu(,)30 b(but)f(is)i(un)m(b)s(ound)d(b)m
-(y)i(default.)150 3582 y Ft(menu-complete-backward)24
-b(\(\))630 3691 y Fu(Iden)m(tical)36 b(to)g Ft(menu-complete)p
+(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 3801 y(completions,)d(as)e(if)h Ft(menu-complete)26
+(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
-3955 y Ft(delete-char-or-list)25 b(\(\))630 4065 y Fu(Deletes)41
+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 4174 y(line)50 b(\(lik)m(e)h
+(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 4284
+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 4438 y Ft(complete-filename)c(\(M-/\))630
-4548 y Fu(A)m(ttempt)32 b(\014lename)e(completion)i(on)e(the)h(text)g
-(b)s(efore)f(p)s(oin)m(t.)150 4702 y Ft(possible-filename-comple)o
-(tion)o(s)24 b(\(C-x)30 b(/\))630 4812 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 4966 y Ft(complete-username)e(\(M-~\))
-630 5076 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
-5230 y Ft(possible-username-comple)o(tion)o(s)24 b(\(C-x)30
-b(~\))630 5340 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.)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
-(complete-variable)26 b(\(M-$\))630 408 y Fu(A)m(ttempt)32
+(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(shell)g(v)-5 b(ariable.)150 589 y Ft
-(possible-variable-comple)o(tion)o(s)24 b(\(C-x)30 b($\))630
-699 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
-809 y(v)-5 b(ariable.)150 989 y Ft(complete-hostname)26
-b(\(M-@\))630 1099 y Fu(A)m(ttempt)32 b(completion)f(on)g(the)f(text)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
-1280 y Ft(possible-hostname-comple)o(tion)o(s)24 b(\(C-x)30
-b(@\))630 1390 y Fu(List)25 b(the)g(p)s(ossible)f(completions)h(of)g
+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 1570 y Ft(complete-command)h(\(M-!\))630
-1680 y Fu(A)m(ttempt)32 b(completion)g(on)f(the)g(text)h(b)s(efore)e(p)
+(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
-1790 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 1899 y(w)m(ords,)36
+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 2009 y(order.)150
-2190 y Ft(possible-command-complet)o(ions)24 b(\(C-x)29
-b(!\))630 2299 y Fu(List)d(the)h(p)s(ossible)f(completions)h(of)f(the)h
+(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
-2409 y(name.)150 2590 y Ft(dynamic-complete-history)e(\(M-TAB\))630
-2699 y Fu(A)m(ttempt)31 b(completion)h(on)e(the)g(text)h(b)s(efore)f(p)
+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
-2809 y(from)e(the)g(history)h(list)g(for)f(p)s(ossible)g(completion)i
-(matc)m(hes.)150 2990 y Ft(dabbrev-expand)26 b(\(\))630
-3099 y Fu(A)m(ttempt)i(men)m(u)e(completion)i(on)f(the)g(text)g(b)s
+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
-3209 y(lines)j(from)e(the)i(history)f(list)h(for)g(p)s(ossible)e
-(completion)j(matc)m(hes.)150 3390 y Ft(complete-into-braces)25
-b(\(M-{\))630 3500 y Fu(P)m(erform)f(\014lename)f(completion)i(and)f
+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
-3609 y(within)34 b(braces)h(so)f(the)h(list)g(is)g(a)m(v)-5
+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 3719 y(pansion],)30 b(page)h(23\).)150 3939
-y Fk(8.4.7)63 b(Keyb)s(oard)41 b(Macros)150 4122 y Ft(start-kbd-macro)
-26 b(\(C-x)j(\(\))630 4232 y Fu(Begin)i(sa)m(ving)h(the)e(c)m
+(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 4413 y Ft(end-kbd-macro)d(\(C-x)i(\)\))630
-4522 y Fu(Stop)e(sa)m(ving)h(the)g(c)m(haracters)g(t)m(yp)s(ed)f(in)m
+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 4632 y(de\014nition.)150 4813 y Ft(call-last-kbd-macro)c
-(\(C-x)k(e\))630 4922 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 5032 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 5213 y Ft(print-last-kbd-macro)25 b(\(\))630
-5322 y Fu(Prin)m(t)30 b(the)h(last)g(k)m(eb)s(oard)f(macro)h(de\014ned)
-e(in)i(a)f(format)h(suitable)g(for)f(the)h Fr(inputrc)k
-Fu(\014le.)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 Fk(8.4.8)63
-b(Some)41 b(Miscellaneous)i(Commands)150 478 y Ft(re-read-init-file)26
-b(\(C-x)j(C-r\))630 587 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 697 y(assignmen)m(ts)31
-b(found)e(there.)150 870 y Ft(abort)g(\(C-g\))630 979
-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
-1089 y(setting)j(of)g Ft(bell-style)p Fu(\).)150 1262
-y Ft(do-lowercase-version)25 b(\(M-A,)k(M-B,)g(M-)p Fj(x)p
-Ft(,)g(...)o(\))630 1372 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 1481 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 1591 y Fr(x)37 b Fu(is)30 b(already)h(lo)m(w)m
-(er)h(case.)150 1764 y Ft(prefix-meta)27 b(\(ESC\))630
-1873 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 1983 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 2156
-y Ft(undo)e(\(C-_)g(or)h(C-x)g(C-u\))630 2266 y Fu(Incremen)m(tal)h
-(undo,)f(separately)h(remem)m(b)s(ered)f(for)g(eac)m(h)i(line.)150
-2439 y Ft(revert-line)27 b(\(M-r\))630 2548 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
-2658 y(enough)e(times)h(to)g(get)h(bac)m(k)f(to)g(the)f(b)s(eginning.)
-150 2831 y Ft(tilde-expand)d(\(M-&\))630 2940 y Fu(P)m(erform)j(tilde)h
-(expansion)g(on)f(the)g(curren)m(t)h(w)m(ord.)150 3114
-y Ft(set-mark)d(\(C-@\))630 3223 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 3333 y(to)f(that)g(p)s(osition.)
-150 3506 y Ft(exchange-point-and-mark)24 b(\(C-x)29 b(C-x\))630
-3615 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 3725 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 3898
-y Ft(character-search)26 b(\(C-]\))630 4008 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 4117 y(A)30
-b(negativ)m(e)j(coun)m(t)e(searc)m(hes)g(for)f(previous)g(o)s
-(ccurrences.)150 4290 y Ft(character-search-backwar)o(d)24
-b(\(M-C-]\))630 4400 y Fu(A)45 b(c)m(haracter)h(is)f(read)g(and)f(p)s
+(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 4509 y(c)m(haracter.)d(A)31 b(negativ)m(e)h(coun)m(t)f
-(searc)m(hes)h(for)e(subsequen)m(t)f(o)s(ccurrences.)150
-4682 y Ft(skip-csi-sequence)d(\(\))630 4792 y Fu(Read)i(enough)f(c)m
+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 4902 y(for)37 b(k)m(eys)h(lik)m(e)g(Home)g
+(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)630 5011 y(Indicator)f(\(CSI\),)f(usually)h(ESC-[.)59
-b(If)36 b(this)g(sequence)h(is)g(b)s(ound)d(to)k Ft("\\)p
-Fu(e[)p Ft(")p Fu(,)g(k)m(eys)f(pro-)630 5121 y(ducing)31
-b(suc)m(h)h(sequences)g(will)h(ha)m(v)m(e)g(no)f(e\013ect)h(unless)e
-(explicitly)j(b)s(ound)c(to)i(a)h(readline)630 5230 y(command,)f
-(instead)g(of)g(inserting)g(stra)m(y)h(c)m(haracters)g(in)m(to)g(the)f
-(editing)h(bu\013er.)44 b(This)31 b(is)630 5340 y(un)m(b)s(ound)d(b)m
-(y)i(default,)h(but)f(usually)g(b)s(ound)e(to)j(ESC-[.)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)150 299 y Ft(insert-comment)26
-b(\(M-#\))630 408 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 518 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 628
-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
-737 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 847 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 956 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 1066 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 1176 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 1285 y(the)31 b(line)f(will)h(b)s(e)f(executed)h(b)
-m(y)f(the)h(shell.)150 1443 y Ft(dump-functions)26 b(\(\))630
-1553 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
-1663 y(If)31 b(a)h(n)m(umeric)g(argumen)m(t)g(is)g(supplied,)f(the)h
+(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
-1772 y(it)f(can)g(b)s(e)e(made)i(part)f(of)g(an)h Fr(inputrc)k
+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 1931 y Ft(dump-variables)26 b(\(\))630
-2040 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 2150 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 2259 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 2418 y Ft(dump-macros)c(\(\))630
-2527 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
-2637 y(output.)53 b(If)35 b(a)g(n)m(umeric)f(argumen)m(t)i(is)e
+(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
-2746 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
+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 2856 y(default.)150 3014 y Ft(glob-complete-word)e(\(M-g\))
-630 3124 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
-3233 y(asterisk)d(implicitly)h(app)s(ended.)37 b(This)23
+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
-3343 y(\014le)30 b(names)h(for)f(p)s(ossible)g(completions.)150
-3501 y Ft(glob-expand-word)c(\(C-x)j(*\))630 3611 y Fu(The)40
+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 3720 y(the)c(list)g(of)f(matc)m
+(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 3830 y(argumen)m(t)31 b(is)f(supplied,)g
+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 3988 y Ft(glob-list-expansions)25 b(\(C-x)k(g\))630
-4098 y Fu(The)k(list)h(of)f(expansions)g(that)h(w)m(ould)f(ha)m(v)m(e)h
+(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
-4208 y Fu(is)h(displa)m(y)m(ed,)h(and)e(the)h(line)g(is)f(redra)m(wn.)
+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 4317 y(is)c(app)s(ended)f(b)s(efore)h(pathname)g
-(expansion.)150 4475 y Ft(display-shell-version)25 b(\(C-x)k(C-v\))630
-4585 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 4743 y Ft(shell-expand-line)c
-(\(M-C-e\))630 4853 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 4963 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
-5072 y(page)e(22\).)150 5230 y Ft(history-expand-line)25
-b(\(M-^\))630 5340 y Fu(P)m(erform)30 b(history)h(expansion)f(on)g(the)
-h(curren)m(t)f(line.)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(magic-space)27
-b(\(\))630 408 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 518 y([History)31 b(In)m(teraction],)i(page)e(148\).)150
-663 y Ft(alias-expand-line)26 b(\(\))630 773 y Fu(P)m(erform)i(alias)i
-(expansion)e(on)g(the)h(curren)m(t)f(line)h(\(see)g(Section)g(6.6)h
-([Aliases],)g(page)f(94\).)150 918 y Ft(history-and-alias-expand)o
-(-lin)o(e)24 b(\(\))630 1028 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
-1173 y Ft(insert-last-argument)25 b(\(M-.)k(or)h(M-_\))630
-1283 y Fu(A)g(synon)m(ym)g(for)g Ft(yank-last-arg)p Fu(.)150
-1428 y Ft(edit-and-execute-command)24 b(\(C-x)29 b(C-e\))630
-1538 y Fu(In)m(v)m(ok)m(e)34 b(an)f(editor)g(on)g(the)g(curren)m(t)f
+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
-1647 y(commands.)81 b(Bash)44 b(attempts)h(to)g(in)m(v)m(ok)m(e)h
+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 1757 y(editor,)31 b(in)f(that)h(order.)150
-1983 y Fs(8.5)68 b(Readline)47 b(vi)e(Mo)t(de)150 2143
+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 2252 y(enough)i(to)h(allo)m(w)g(simple)f(editing)h(of)f
+(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 2362 y(the)e Fm(posix)e
-Fu(standard.)275 2489 y(In)35 b(order)g(to)i(switc)m(h)f(in)m(teractiv)
+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
-2599 y(emacs)p Fu(')43 b(and)h(`)p Ft(set)30 b(-o)f(vi)p
+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(62\).)83 b(The)150 2709 y(Readline)31 b(default)g(is)f
-Ft(emacs)f Fu(mo)s(de.)275 2836 y(When)g(y)m(ou)i(en)m(ter)f(a)h(line)f
+(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 2946 y(had)f(t)m(yp)s
+(`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 3055 y(text)35 b(of)f(the)g(line)g(with)f
+(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 3165 y(`)p
+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 3391 y Fs(8.6)68
-b(Programmable)47 b(Completion)150 3551 y Fu(When)25
+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 3660
+(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 3770 y([Programmable)h
-(Completion)f(Builtins],)k(page)d(139\),)j(the)c(programmable)g
-(completion)i(facilities)150 3880 y(are)31 b(in)m(v)m(ok)m(ed.)275
-4007 y(First,)23 b(the)e(command)g(name)g(is)h(iden)m(ti\014ed.)37
+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 4117 y(the)44 b(compsp)s(ec)g(is)g(used)f(to)h(generate)i
+(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 4226 y(command)36 b(w)m(ord)g(is)g(the)g(empt)m(y)h
+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)150 4336 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
-4445 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 4555 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 4665 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 4774 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 4884 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 4993 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 5121 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 5230 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 5340 y([Commands)30 b(F)-8 b(or)31
-b(Completion],)g(page)g(133\))h(is)f(p)s(erformed.)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)275 299 y(First,)31
-b(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
-408 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 518 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 628 y(Section)31 b(5.2)h([Bash)e(V)-8
-b(ariables],)33 b(page)e(73,)g(for)f(a)h(description)g(of)f
-Ft(FIGNORE)p Fu(.)275 769 y(An)m(y)22 b(completions)h(sp)s(eci\014ed)f
+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 878 y(next.)41
+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 988 y Ft(GLOBIGNORE)29 b Fu(shell)i(v)-5 b(ariable)32
+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 1097 y(is)30
-b(used.)275 1238 y(Next,)39 b(the)f(string)f(sp)s(eci\014ed)f(as)h(the)
+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 1348 y(is)c(\014rst)e(split)i(using)f(the)h(c)m
+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
-1457 y(honored)f(within)h(the)g(string,)h(in)f(order)f(to)i(pro)m(vide)
+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
-1567 y(metac)m(haracters)e(or)e(c)m(haracters)i(in)e(the)g(v)-5
+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 1677 y(expansion,)g(tilde)h(expansion,)f
+(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 1786 y(arithmetic)c(expansion,)f(as)g(describ)
+(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(22\).)40 b(The)150 1896 y(results)23 b(are)h(split)g(using)f
+(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(32\).)150 2005
+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
-2115 y(matc)m(hing)k(w)m(ords)f(b)s(ecome)h(the)g(p)s(ossible)f
-(completions.)275 2256 y(After)f(these)g(matc)m(hes)i(ha)m(v)m(e)f(b)s
+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 2365 y(the)36 b Ft(-F)f Fu(and)g
+(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 2475 y(LINE)p Fu(,)42 b Ft(COMP_POINT)p
+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 2585 y(ab)s(o)m(v)m(e)34 b(\(see)g(Section)g(5.2)g([Bash)f(V)-8
-b(ariables],)36 b(page)d(73\).)50 b(If)33 b(a)g(shell)g(function)g(is)g
-(b)s(eing)f(in)m(v)m(ok)m(ed,)k(the)150 2694 y Ft(COMP_WORDS)j
+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 2804
+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
-2913 y(completed,)30 b(the)f(second)f(argumen)m(t)h(\($2\))h(is)f(the)g
+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
-3023 y(\($3\))40 b(is)f(the)f(w)m(ord)h(preceding)f(the)h(w)m(ord)f(b)s
+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 3133 y(\014ltering)33 b(of)h(the)f(generated)h(completions)g
+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 3242 y(function)d(or)g(command)h(has)f(complete)i(freedom)e
-(in)g(generating)h(the)g(matc)m(hes.)275 3383 y(An)m(y)j(function)h(sp)
+(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
-3493 y(facilities,)50 b(including)44 b(the)h Ft(compgen)d
+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 3602 y([Programmable)31 b(Completion)h(Builtins],)f
-(page)h(139\),)g(to)g(generate)g(the)f(matc)m(hes.)42
-b(It)31 b(m)m(ust)g(put)f(the)150 3712 y(p)s(ossible)g(completions)h
+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 3853 y(Next,)26
+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 3962 y(to)26 b(command)e(substitution.)39
+(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 4072 y(output.)40
+(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(.)275 4213 y(After)24
+(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 4322 y(is)34 b(applied)g(to)g(the)h(list.)52
+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 4432
+(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 4542 y(with)38
+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
-4651 y(that)32 b(matc)m(hes)g(the)g(pattern)g(will)f(b)s(e)g(remo)m(v)m
+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 4761 y(in)d(this)g(case)h(an)m(y)g
+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 4870 y
+(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
-(66\))h(is)150 4980 y(enabled,)d(the)f(matc)m(h)h(is)g(p)s(erformed)e
+(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 5121 y(Finally)-8 b(,)42 b(an)m(y)c(pre\014x)g(and)f
+(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 5230
+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
-5340 y(as)e(the)f(list)h(of)g(p)s(ossible)f(completions.)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)275 299 y(If)27
-b(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
-408 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
-518 y(is)h(attempted.)275 653 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
-763 y(directory)g(name)f(completion)i(is)e(attempted)h(and)f(an)m(y)h
+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
-873 y(other)31 b(actions.)275 1008 y(By)g(default,)i(if)e(a)h(compsp)s
+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 1117 y(co)s(de)21 b(as)g(the)g(full)g(set)g(of)g
+(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 1227 y(and)30 b(the)g(Readline)h(default)f
+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 1337 y(w)m(as)d(supplied)e
+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 1446 y(attempted)j(if)f
+(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 1556 y Ft(complete)f Fu(when)h(the)h(compsp)s(ec)f(w)m(as)i
+(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 1665 y(if)k(the)h(compsp)s(ec)f(\(and,)g(if)h(attempted,)
+(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 1801 y(When)20 b(a)i(compsp)s(ec)e(indicates)i(that)g(directory)g
+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
-1910 y(completion)31 b(functions)e(force)i(Readline)f(to)h(app)s(end)d
+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
-2020 y(b)s(olic)40 b(links)g(to)h(directories,)j(sub)5
+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 2130 y(regardless)31
+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 2265 y(There)25
+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
-2374 y(used)40 b(in)h(com)m(bination)i(with)e(a)g(default)h(completion)
+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 2484 y(functions)28 b(executed)h(as)f(completion)i
+(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 2594 y(returning)j(an)i(exit)g(status)f(of)h(124.)
+(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 2703 y(asso)s(ciated)43 b(with)e(the)g(command)g
+(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 2813 y(\014rst)29 b(argumen)m(t)h(when)e(the)i(function)f
+(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 2922 y(b)s(eginning,)e(with)g(an)h(attempt)g(to)g(\014nd)e(a)i(new)
+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 3032 y(completions)33 b(to)f(b)s(e)g(built)f(dynamically)
+(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 3142 y(all)g(at)g(once.)275 3277 y(F)-8 b(or)38
+(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
-3386 y(sp)s(onding)g(to)j(the)f(name)f(of)h(the)g(command,)i(the)e
+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
-3496 y(load)31 b(completions)g(dynamically:)390 3631
-y Ft(_completion_loader\(\))390 3741 y({)581 3851 y(.)47
+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 3960 y(})390 4070 y(complete)g(-D)h(-F)g
-(_completion_loader)c(-o)k(bashdefault)e(-o)i(default)150
-4312 y Fs(8.7)68 b(Programmable)47 b(Completion)f(Builtins)150
-4471 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 4581 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 4690 y(to)e(mo)s(dify)f(the)g
-(completion)i(as)e(it)h(is)g(happ)s(ening.)150 4851 y
-Ft(compgen)870 4986 y(compgen)46 b([)p Fj(option)p Ft(])f([)p
-Fj(word)p Ft(])630 5121 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 5230 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 5340 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)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)630 299 y(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
-408 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 555 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 664 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 774 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 883 y(b)s(e)d(displa)m(y)m(ed.)630
-1029 y(The)24 b(return)g(v)-5 b(alue)25 b(is)g(true)f(unless)g(an)h(in)
+(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 1139 y(generated.)150 1322 y Ft(complete)870
-1468 y(complete)46 b([-abcdefgjksuv])d([-o)k Fj(comp-option)p
-Ft(])e([-DEI])h([-A)h Fj(action)p Ft(])e([-)870 1577
-y(G)i Fj(globpat)p Ft(])870 1687 y([-W)g Fj(wordlist)p
+(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 1797 y([-P)g Fj(prefix)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 1906 y(complete)g(-pr)g([-DEI])h([)p Fj(name)f
-Ft(...)o(])630 2052 y Fu(Sp)s(ecify)37 b(ho)m(w)h(argumen)m(ts)f(to)i
+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 2162 y(is)30 b(supplied,)e(or)i
+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 2271 y(prin)m(ted)24 b(in)h(a)g(w)m(a)m(y)g
+(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 2381
+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 2491 y(pletion)i(sp)s
+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 2600 y(actions)c(should)e(apply)g
+(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 2710 y(attempted)g(on)f(a)h(command)f(for)g(whic)m(h)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
-2819 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 2929
+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 3039 y(The)24
+(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 3148 y(completion)29
+(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 3258 y(delimiter)41 b(suc)m(h)g(as)f(`)p
+(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 3367 y(m)m(ultiple)26
+(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
-3477 y(tak)m(e)34 b(precedence)f(o)m(v)m(er)h Ft(-I)p
+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 3587 y Fu(argumen)m(ts)k(are)g(ignored;)j(these)d
+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 3696 y(the)31 b(option.)630 3842 y(The)e(pro)s(cess)g(of)h
+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 3952 y(is)35 b(attempted)h(is)f(describ)s(ed)f(ab)s(o)m
+(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
-4061 y(page)31 b(137\).)630 4208 y(Other)d(options,)i(if)f(sp)s
-(eci\014ed,)g(ha)m(v)m(e)h(the)f(follo)m(wing)i(meanings.)40
-b(The)29 b(argumen)m(ts)g(to)h(the)630 4317 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 4427 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 4609 y Ft(-o)i
-Fj(comp-option)1110 4719 y Fu(The)c Fr(comp-option)i
+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 4829 y(ior)g(b)s(ey)m(ond)f(the)g(simple)h
+(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 4938 y(b)s(e)j(one)g(of:)1110 5121 y
-Ft(bashdefault)1590 5230 y Fu(P)m(erform)d(the)h(rest)f(of)h(the)g
-(default)f(Bash)h(completions)g(if)g(the)1590 5340 y(compsp)s(ec)i
-(generates)i(no)e(matc)m(hes.)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)1110 299 y Ft(default)144
+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 408 y(sp)s(ec)30 b(generates)i(no)e(matc)m(hes.)1110
-570 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 680 y(generates)32
-b(no)e(matc)m(hes.)1110 841 y Ft(filenames)1590 951 y
-Fu(T)-8 b(ell)40 b(Readline)f(that)h(the)f(compsp)s(ec)f(generates)j
-(\014lenames,)1590 1060 y(so)29 b(it)h(can)f(p)s(erform)f(an)m(y)h
+(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
+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
-1170 y(adding)22 b(a)g(slash)g(to)h(directory)f(names,)i(quoting)f(sp)s
-(ecial)f(c)m(har-)1590 1279 y(acters,)39 b(or)d(suppressing)f(trailing)
-i(spaces\).)59 b(This)35 b(option)i(is)1590 1389 y(in)m(tended)30
+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 1499 y Ft(-F)p Fu(.)1110 1660 y Ft(noquote)144 b
+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 1770 y(are)j(\014lenames)f(\(quoting)h
-(\014lenames)g(is)f(the)h(default\).)1110 1931 y Ft(nosort)192
+(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 2041 y(alphab)s(etically)-8
-b(.)1110 2202 y Ft(nospace)144 b Fu(T)-8 b(ell)40 b(Readline)g(not)g
+(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
-2312 y(w)m(ords)30 b(completed)h(at)g(the)g(end)f(of)g(the)h(line.)1110
-2473 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 2583 y(ated,)g
+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
-2693 y(matc)m(hes)j(are)e(added)g(to)h(the)g(results)f(of)g(the)h
-(other)g(actions.)630 2854 y Ft(-A)f Fj(action)66 b Fu(The)25
+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 2964 y(completions:)1110
-3125 y Ft(alias)240 b Fu(Alias)31 b(names.)41 b(Ma)m(y)31
+(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
-3287 y Ft(arrayvar)96 b Fu(Arra)m(y)31 b(v)-5 b(ariable)31
-b(names.)1110 3448 y Ft(binding)144 b Fu(Readline)30
+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
-3558 y(Readline)h(Commands],)f(page)h(127\).)1110 3719
+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 3829
-y(as)31 b Ft(-b)p Fu(.)1110 3990 y Ft(command)144 b Fu(Command)29
+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 4152 y Ft(directory)1590 4261 y Fu(Directory)h
+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(.)1110 4423 y Ft(disabled)96 b Fu(Names)31
-b(of)g(disabled)f(shell)g(builtins.)1110 4584 y Ft(enabled)144
-b Fu(Names)31 b(of)g(enabled)f(shell)g(builtins.)1110
-4746 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
-4855 y(\014ed)d(as)g Ft(-e)p Fu(.)1110 5017 y Ft(file)288
+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 5178 y Ft(function)96 b Fu(Names)31
-b(of)g(shell)f(functions.)1110 5340 y Ft(group)240 b
+(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(.)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)1110 299 y Ft(helptopic)1590
-408 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 518 y(tion)31
-b(4.2)g([Bash)g(Builtins],)g(page)g(51\).)1110 689 y
+(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 799 y(the)55 b
+(\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 908 y(V)-8 b(ariables],)32 b(page)f(73\).)1110
-1080 y Ft(job)336 b Fu(Job)31 b(names,)h(if)g(job)f(con)m(trol)i(is)f
+([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
-1189 y(\014ed)f(as)g Ft(-j)p Fu(.)1110 1361 y Ft(keyword)144
+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
-1532 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 1703 y Ft(service)144
+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 1874 y Ft(setopt)192
+(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 1984
-y(\(see)31 b(Section)h(4.3.1)g([The)e(Set)g(Builtin],)i(page)f(62\).)
-1110 2155 y Ft(shopt)240 b Fu(Shell)40 b(option)g(names)g(as)g
+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
-2265 y(\(see)31 b(Section)h(4.2)f([Bash)g(Builtins],)g(page)g(51\).)
-1110 2436 y Ft(signal)192 b Fu(Signal)31 b(names.)1110
-2607 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 2778 y Ft(user)288
+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 2950 y Ft(variable)96 b Fu(Names)36
+(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 3059 y Ft(-v)p
-Fu(.)630 3230 y Ft(-C)30 b Fj(command)1110 3340 y Fr(command)35
+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 3450 y(used)e(as)g(the)h(p)s(ossible)f
-(completions.)630 3621 y Ft(-F)g Fj(function)1110 3730
-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 3840 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 3950 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
-4059 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 4169 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
-4278 y(page)30 b(137\).)42 b(When)29 b(it)h(\014nishes,)e(the)h(p)s
-(ossible)g(completions)h(are)g(retriev)m(ed)1110 4388
-y(from)g(the)g(v)-5 b(alue)31 b(of)g(the)f Ft(COMPREPLY)e
-Fu(arra)m(y)j(v)-5 b(ariable.)630 4559 y Ft(-G)30 b Fj(globpat)1110
-4669 y Fu(The)39 b(\014lename)h(expansion)g(pattern)g
-Fr(globpat)j Fu(is)d(expanded)f(to)h(generate)1110 4778
-y(the)31 b(p)s(ossible)e(completions.)630 4950 y Ft(-P)h
+(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
-5059 y(all)c(other)g(options)g(ha)m(v)m(e)g(b)s(een)f(applied.)630
-5230 y Ft(-S)g Fj(suffix)66 b Fr(su\016x)26 b Fu(is)20
+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 5340 y(ha)m(v)m(e)32 b(b)s(een)d(applied.)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)630 299 y Ft(-W)30
-b Fj(wordlist)1110 408 y Fu(The)24 b Fr(w)m(ordlist)k
+(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 518 y(as)36
+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 628 y(completions)c(are)e
+(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 737 y(w)m(ord)f(b)s(eing)g(completed.)630
-909 y Ft(-X)g Fj(filterpat)1110 1019 y Fr(\014lterpat)d
+(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 1128 y(the)30 b(list)f(of)h(p)s
+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 1238 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 1347
+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 1457 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 1629 y(The)35
+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
-1738 y(than)h Ft(-p)g Fu(or)g Ft(-r)f Fu(is)h(supplied)f(without)i(a)f
+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
-1848 y(remo)m(v)m(e)32 b(a)e(completion)i(sp)s(eci\014cation)f(for)f(a)
+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 1958 y(or)f(an)h(error)f(o)s(ccurs)g(adding)g(a)g(completion)i(sp)s
-(eci\014cation.)150 2129 y Ft(compopt)870 2270 y(compopt)46
+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 2411 y Fu(Mo)s(dify)33
+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
-2520 y(curren)m(tly-executing)46 b(completion)f(if)f(no)f
+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 2630 y(giv)m(en,)30 b(displa)m(y)e(the)g
+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 2740 y(The)f(p)s(ossible)
+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
-2849 y(ab)s(o)m(v)m(e.)41 b(The)27 b Ft(-D)f Fu(option)i(indicates)g
+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
-2959 y(\\default")33 b(command)f(completion;)i(that)f(is,)g(completion)
-g(attempted)g(on)f(a)g(command)630 3068 y(for)g(whic)m(h)g(no)g
+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 3178 y(that)23
+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 3287 y(is,)36 b(completion)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 3397 y(supplied)23
+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 3507 y(on)37 b(the)f(line,)j(or)e
+(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
-3616 y(command)30 b(name)h(completion.)630 3757 y(If)k(m)m(ultiple)i
+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 3867
+(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
-4007 y Fu(The)23 b(return)g(v)-5 b(alue)25 b(is)f(true)g(unless)f(an)h
+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 4117 y(to)32 b(mo)s(dify)f(the)g(options)h(for)f(a)h
+(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 4226 y(or)e(an)h(output)f(error)g(o)s(ccurs.)150
-4486 y Fs(8.8)68 b(A)44 b(Programmable)j(Completion)f(Example)150
-4645 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 4755 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 4864 y(command)h(using)g
-Ft(complete)e(-F)p Fu(.)275 5011 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 5121 y(example)41
+(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 5230
+(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 5340 y Ft(COMP_WORDS)c Fu(arra)m(y)i(v)-5
+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.)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)275 299 y(The)42
+(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 408 y(adding)25 b(only)h(the)g(things)g(that)g(the)g(Bash)g
+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 518 y(expansion)22 b(\(see)h(Section)g(3.5.2)g
-([Tilde)g(Expansion],)g(page)g(24\),)i(searc)m(hing)e(directories)g(in)
-e Fr($CDP)-8 b(A)g(TH)p Fu(,)150 628 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(44\),)j(and)c(basic)h(supp)s(ort)150
-737 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(66\).)46
-b Ft(_comp_)150 847 y(cd)30 b Fu(mo)s(di\014es)g(the)h(v)-5
+(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
-956 y(con)m(taining)i(spaces)g(and)e(tabs)h({)g Ft(compgen)e
+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 1066 y(line.)275 1230 y(P)m(ossible)24 b(completions)h(go)g
+(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
-1340 y(elemen)m(t.)42 b(The)30 b(programmable)g(completion)i(system)e
+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
-1450 y(the)h(function)f(returns.)390 1614 y Ft(#)47 b(A)h(completion)d
-(function)g(for)i(the)g(cd)g(builtin)390 1724 y(#)g(based)g(on)g(the)g
+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 1833 y(_comp_cd\(\))390 1943 y({)581 2052 y(local)i(IFS=$')g
-(\\t\\n')190 b(#)47 b(normalize)f(IFS)581 2162 y(local)g(cur)h
-(_skipdot)f(_cdpath)581 2271 y(local)g(i)i(j)f(k)581
-2491 y(#)g(Tilde)g(expansion,)e(which)h(also)h(expands)f(tilde)g(to)h
-(full)g(pathname)581 2600 y(case)g("$2")f(in)581 2710
-y(\\~*\))190 b(eval)46 b(cur="$2")g(;;)581 2819 y(*\))286
-b(cur=$2)46 b(;;)581 2929 y(esac)581 3148 y(#)h(no)h(cdpath)e(or)h
+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
-3258 y(if)i([[)g(-z)g("${CDPATH:-}")e(]])i(||)g([[)g("$cur")f(==)h
-(@\(./*|../*|/*\))d(]];)j(then)772 3367 y(#)g(compgen)f(prints)g(paths)
+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
-3477 y(IFS=$'\\n')772 3587 y(COMPREPLY=\()f($\(compgen)g(-d)i(--)g
-("$cur"\))f(\))772 3696 y(IFS=$')g(\\t\\n')581 3806 y(#)h
+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 3915 y(else)772 4025 y(IFS=$'\\n')772 4134
-y(_skipdot=false)772 4244 y(#)f(preprocess)e(CDPATH)h(to)i(convert)d
-(null)i(directory)e(names)i(to)g(.)772 4354 y(_cdpath=${CDPATH/#:/.:})
-772 4463 y(_cdpath=${_cdpath//::/:.)o(:})772 4573 y
-(_cdpath=${_cdpath/\045:/:.})772 4682 y(for)g(i)g(in)g
-(${_cdpath//:/$'\\n'};)c(do)963 4792 y(if)k([[)g($i)g(-ef)g(.)h(]];)f
-(then)f(_skipdot=true;)e(fi)963 4902 y(k="${#COMPREPLY[@]}")963
-5011 y(for)j(j)g(in)g($\()g(compgen)f(-d)h(--)h("$i/$cur")d(\);)i(do)
-1154 5121 y(COMPREPLY[k++]=${j#$i/})375 b(#)48 b(cut)f(off)f(directory)
-963 5230 y(done)772 5340 y(done)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)772 299 y Ft($_skipdot)45
-b(||)i(COMPREPLY+=\()e($\(compgen)g(-d)i(--)g("$cur"\))f(\))772
-408 y(IFS=$')g(\\t\\n')581 518 y(fi)581 737 y(#)h(variable)f(names)g
-(if)h(appropriate)e(shell)i(option)f(set)h(and)f(no)i(completions)581
-847 y(if)f(shopt)f(-q)i(cdable_vars)c(&&)k([[)f(${#COMPREPLY[@]})c(-eq)
-k(0)g(]];)g(then)772 956 y(COMPREPLY=\()e($\(compgen)g(-v)i(--)g
-("$cur"\))f(\))581 1066 y(fi)581 1285 y(return)g(0)390
-1395 y(})275 1529 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 1664 y Ft(#)47 b(Tell)g(readline)f(to)h(quote)f(appropriate)f
-(and)i(append)f(slashes)g(to)h(directories;)390 1773
-y(#)g(use)g(the)g(bash)g(default)f(completion)f(for)i(other)f
-(arguments)390 1883 y(complete)g(-o)h(filenames)e(-o)i(nospace)f(-o)h
-(bashdefault)e(-F)i(_comp_cd)f(cd)150 2017 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
-2127 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 2237 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 2346 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 2456 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 2565
-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 2675 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 2785 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
-2894 y(rest)h(of)f(the)h Ft(")p Fu(Bash)f(default)p Ft(")h
-Fu(completions)g({)g(p)s(ossible)f(completion)i(that)f(Bash)f(adds)g
-(to)h(the)g(default)150 3004 y(Readline)f(set.)40 b(These)28
+(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 3113 y(w)m(ords)e(b)s(eginning)h
+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
-3223 y(Section)j(3.5.8)h([Filename)g(Expansion],)e(page)i(33\),)f(and)f
-(so)h(on.)275 3357 y(Once)39 b(installed)i(using)e Ft(complete)p
+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 3467 y(completion)32 b(for)e(a)h
-Ft(cd)e Fu(command.)275 3601 y(Man)m(y)34 b(more)g(examples)g({)g(an)g
+(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 3711 y(GNU,)g(Unix,)h(and)d(Lin)m(ux)h(commands)g({)h(are)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 3711 28 4 v 39 w(completion)i(pro)5 b(ject.)150
-3821 y(This)33 b(is)h(installed)h(b)m(y)f(default)g(on)g(man)m(y)h
+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 3930 y(Macdonald,)48 b(the)c(pro)5 b(ject)44
+(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
-4040 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 4174 y(An)54
-b(older)h(v)m(ersion)h(of)f(the)g(bash)p 1532 4174 V
+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 4284 y Ft(examples/complete)26 b Fu(sub)s(directory)-8
+f(in)h(the)150 5270 y Ft(examples/complete)26 b Fu(sub)s(directory)-8
 b(.)p eop end
-%%Page: 146 152
-TeXDict begin 146 151 bop 3614 -116 a Fu(146)150 299
+%%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
@@ -18514,7 +19099,7 @@ 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(62\),)h(the)e(shell)h(pro)m
+(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
@@ -18541,7 +19126,7 @@ 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(51\),)h(the)e(lines)g(are)g(app)s(ended)e
+([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
@@ -18570,7 +19155,7 @@ 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
 (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(128\).)275 4162
+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
@@ -18587,14 +19172,14 @@ b Ft(lithist)e Fu(shell)i(option)h(causes)g(the)f(shell)g(to)150
 (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(66,)g(for)f(a)h(description)150 4929 y(of)f Ft(shopt)p
+(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: 147 153
-TeXDict begin 147 152 bop 150 -116 a Fu(Chapter)30 b(9:)41
-b(Using)30 b(History)h(In)m(teractiv)m(ely)1925 b(147)150
+%%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
@@ -18645,7 +19230,7 @@ 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(94\).)150 3324 y Ft(history)870 3455 y(history)46
+(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
@@ -18672,823 +19257,903 @@ 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: 148 154
-TeXDict begin 148 153 bop 150 -116 a Fu(Chapter)30 b(9:)41
-b(Using)30 b(History)h(In)m(teractiv)m(ely)1925 b(148)1110
+%%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)23
-b(the)d(history)h(en)m(tries)g(b)s(et)m(w)m(een)g(p)s(ositions)g
-Fr(start)i Fu(and)d Fr(end)p Fu(,)i(inclusiv)m(e.)1110
-1004 y(P)m(ositiv)m(e)41 b(and)c(negativ)m(e)k(v)-5 b(alues)38
-b(for)h Fr(start)h Fu(and)e Fr(end)j Fu(are)e(in)m(terpreted)g(as)1110
-1114 y(describ)s(ed)29 b(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
+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(When)26 b(an)m(y)h(of)f(the)g Ft(-w)p Fu(,)h Ft(-r)p
-Fu(,)g Ft(-a)p Fu(,)g(or)f Ft(-n)f Fu(options)i(is)f(used,)h(if)f
-Fr(\014lename)32 b Fu(is)26 b(giv)m(en,)i(then)e(it)h(is)630
-2873 y(used)h(as)g(the)h(history)f(\014le.)40 b(If)28
-b(not,)i(then)e(the)g(v)-5 b(alue)29 b(of)g(the)g Ft(HISTFILE)d
-Fu(v)-5 b(ariable)29 b(is)f(used.)150 3112 y Fs(9.3)68
-b(History)46 b(Expansion)150 3272 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 3381 y(expansion)g(pro)m(vided)f(b)m(y)h
+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 3491 y(history)30 b(information.)275
-3624 y(History)h(expansions)f(in)m(tro)s(duce)g(w)m(ords)g(from)g(the)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
-3734 y(it)g(easy)g(to)g(rep)s(eat)g(commands,)f(insert)g(the)h(argumen)
+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
-3844 y(input)f(line,)i(or)g(\014x)f(errors)f(in)h(previous)g(commands)g
-(quic)m(kly)-8 b(.)275 3977 y(History)24 b(expansion)f(is)h(p)s
+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 4087 y(breaks)32 b(it)i(in)m(to)f(w)m(ords,)g
+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 4196 y(the)d(history)f
+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 4330 y(History)37 b(expansion)f(tak)m(es)
+(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 4439 y(the)42
+(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
-4549 y(that)31 b(line)g(for)f(inclusion)h(in)m(to)g(the)g(curren)m(t)f
+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 4659 y Fr(ev)m(en)m(t)p Fu(,)e(and)c(the)i(p)s
+(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 4768 y Fu(are)33 b(a)m(v)-5 b(ailable)36
+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)150
-4878 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 4987 y(History)37 b(expansions)g(are)g(in)m(tro)s(duced)f(b)m
+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 5097 y(whic)m(h)30 b(is)h(`)p Ft(!)p Fu(')f(b)m(y)g
-(default.)275 5230 y(History)c(expansion)g(implemen)m(ts)h(shell-lik)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 5340 y(remo)m(v)m(e)h(the)e(sp)s(ecial)g
+(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)p eop end
-%%Page: 149 155
-TeXDict begin 149 154 bop 150 -116 a Fu(Chapter)30 b(9:)41
-b(Using)30 b(History)h(In)m(teractiv)m(ely)1925 b(149)150
-299 y(of)29 b(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
-408 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 518 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 628 y(double)g(quotes.)275 765
-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 875 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 984 y(precedes)30
+(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
-1122 y(Sev)m(eral)48 b(shell)g(options)h(settable)g(with)e(the)h
+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
-1232 y(Builtin],)24 b(page)e(66\))h(ma)m(y)e(b)s(e)g(used)g(to)h
+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 1341 y Fu(shell)35
+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 1451
+(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
-1561 y(editing)29 b(bu\013er)f(for)h(further)e(mo)s(di\014cation.)41
+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 1670 y(option)e(is)g(enabled,)h(a)g
+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 1780 y(for)31
+(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 1889 y(history)25 b(expansion)g(will)g(do)g(b)s(efore)g
+(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 1999
+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
-2108 y(they)c(are)f(a)m(v)-5 b(ailable)33 b(for)d(subsequen)m(t)g
+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 2246 y(The)j(shell)h(allo)m(ws)h(con)m(trol)h(of)e(the)g
+(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 2356 y(anism)h(with)g(the)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
-2465 y(page)32 b(73\).)44 b(The)31 b(shell)g(uses)g(the)g(history)g
+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 2575 y(writing)e(the)h(history)f(\014le.)150 2777
-y Fk(9.3.1)63 b(Ev)m(en)m(t)39 b(Designators)150 2924
+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 3034 y(reference)e(is)f(absolute,)i(ev)m(en)m(ts)
+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 3198 y Ft(!)432 b Fu(Start)34 b(a)f(history)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 3308 y(the)i(line,)g(`)p Ft(=)p
+(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
-3417 y Fu(builtin\).)150 3580 y Ft(!)p Fj(n)384 b Fu(Refer)30
-b(to)i(command)e(line)g Fr(n)p Fu(.)150 3742 y Ft(!-)p
+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 3905 y Ft(!!)384 b Fu(Refer)30
+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 4067 y Ft(!)p Fj(string)144
+(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
-4177 y(list)31 b(starting)g(with)f Fr(string)p Fu(.)150
-4340 y Ft(!?)p Fj(string)p Ft([?])630 4449 y Fu(Refer)25
+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 4559 y(list)32
+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 4668 y(immediately)f(b)m(y)e(a)h
+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 4778 y(searc)m(h)h(is)f
+(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.)150 4941 y Ft(^)p Fj(string1)p Ft(^)p
-Fj(string2)p Ft(^)630 5050 y Fu(Quic)m(k)h(Substitution.)44
-b(Rep)s(eat)32 b(the)g(last)h(command,)f(replacing)g
-Fr(string1)40 b Fu(with)31 b Fr(string2)p Fu(.)630 5160
-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 5322 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.)p
-eop end
-%%Page: 150 156
-TeXDict begin 150 155 bop 150 -116 a Fu(Chapter)30 b(9:)41
-b(Using)30 b(History)h(In)m(teractiv)m(ely)1925 b(150)150
-299 y Fk(9.3.2)63 b(W)-10 b(ord)41 b(Designators)150
-446 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
-555 y(sp)s(eci\014cation)38 b(from)e(the)h(w)m(ord)f(designator.)61
+(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 665 y(with)30 b(a)g(`)p Ft(^)p Fu(',)g(`)p
+(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
-775 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 884 y(single)h(spaces.)275 1019
-y(F)-8 b(or)31 b(example,)150 1179 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 1289 y(mand)30 b(is)g(rep)s(eated)g
-(in)g(toto.)150 1449 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 1558 y(to)31
-b Ft(!$)p Fu(.)150 1718 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 1828 y(letters)j Ft(fi)p Fu(.)275
-1988 y(Here)e(are)h(the)g(w)m(ord)f(designators:)150
-2148 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 2308 y Fj(n)432 b Fu(The)30 b Fr(n)p Fu(th)g(w)m(ord.)150
-2467 y Ft(^)432 b Fu(The)30 b(\014rst)f(argumen)m(t;)j(that)f(is,)f(w)m
-(ord)g(1.)150 2627 y Ft($)432 b Fu(The)30 b(last)h(argumen)m(t.)150
-2787 y Ft(\045)432 b Fu(The)40 b(\014rst)h(w)m(ord)f(matc)m(hed)i(b)m
+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
-2897 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 3057 y Fj(x)p Ft(-)p Fj(y)336
+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 3216
+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
-3326 y(to)j(use)g(`)p Ft(*)p Fu(')f(if)h(there)g(is)g(just)f(one)h(w)m
+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 3436 y(that)j(case.)150 3595 y Fj(x)p
+(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
-3755 y Fj(x)p Ft(-)384 b Fu(Abbreviates)27 b(`)p Fj(x)p
+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 3865 y(to)j(0.)275 4025 y(If)i(a)h(w)m(ord)g(designator)g
+(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 4135 y(is)d(used)g(as)h(the)f(ev)m(en)m
-(t.)150 4334 y Fk(9.3.3)63 b(Mo)s(di\014ers)150 4481
+(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 4591 y(mo)s(di\014ers,)33 b(eac)m(h)h(preceded)f(b)m(y)g(a)h(`)p
+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 4700 y(the)d(history)f
-(ev)m(en)m(t.)150 4860 y Ft(h)432 b Fu(Remo)m(v)m(e)32
+(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.)150 5020 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
-5180 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 5340 y Ft(e)432 b Fu(Remo)m(v)m(e)32 b(all)f(but)f(the)h
-(trailing)g(su\016x.)p eop end
-%%Page: 151 157
-TeXDict begin 151 156 bop 150 -116 a Fu(Chapter)30 b(9:)41
-b(Using)30 b(History)h(In)m(teractiv)m(ely)1925 b(151)150
-299 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 458 y Ft(q)432 b Fu(Quote)31 b(the)f(substituted)g
-(w)m(ords,)g(escaping)h(further)e(substitutions.)150
-618 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 727 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
-837 y(supplied)29 b(is)i(used.)150 996 y Ft(s/)p Fj(old)p
-Ft(/)p Fj(new)p Ft(/)630 1106 y Fu(Substitute)g Fr(new)39
+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 1215 y(ma)m(y)k(b)s(e)e(used)h(as)g(the)h(delimiter)
+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 1325 y Fr(old)40 b Fu(and)c
+(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 1435 y Fr(old)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 1544 y Fu(substituted,)j(or,)g(if)f(no)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 1654 y Fu(in)j(a)g(!?)p Fr(string)8 b Ft([?])37
-b Fu(searc)m(h.)61 b(If)37 b Fr(new)45 b Fu(is)37 b(is)g(n)m(ull,)i
-(eac)m(h)f(matc)m(hing)h Fr(old)h Fu(is)e(deleted.)61
-b(The)630 1763 y(\014nal)30 b(delimiter)h(is)g(optional)g(if)f(it)h(is)
-g(the)f(last)i(c)m(haracter)f(on)g(the)f(input)g(line.)150
-1923 y Ft(&)432 b Fu(Rep)s(eat)31 b(the)f(previous)g(substitution.)150
-2082 y Ft(g)150 2192 y(a)432 b Fu(Cause)38 b(c)m(hanges)i(to)f(b)s(e)f
+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 2301 y(with)30 b(`)p
+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 2461 y
+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: 152 158
-TeXDict begin 152 157 bop 3614 -116 a Fu(152)150 299
-y Fp(10)80 b(Installing)52 b(Bash)150 534 y Fu(This)31
+%%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
-643 y(forms.)40 b(The)28 b(distribution)h(supp)s(orts)e(the)j
+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 753 y(and)d(sev)m(eral)j(non-Unix)d(systems)h(suc)m(h)g
+(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 862 y Fm(ms-dos)p Fu(,)h Fm(os/2)p
-Fu(,)g(and)g(Windo)m(ws)g(platforms.)150 1103 y Fs(10.1)68
-b(Basic)45 b(Installation)150 1263 y Fu(These)30 b(are)h(installation)h
-(instructions)e(for)h(Bash.)275 1398 y(The)e(simplest)i(w)m(a)m(y)g(to)
-g(compile)h(Bash)e(is:)199 1532 y(1.)61 b Ft(cd)38 b
+(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
-1642 y(Bash)c(for)f(y)m(our)h(system.)54 b(If)34 b(y)m(ou're)h(using)f
+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 1751 y(need)21 b(to)g(t)m(yp)s(e)g(`)p
+(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
-1861 y Fu(itself.)330 1996 y(Running)30 b Ft(configure)f
+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 2105 y(features)e(it)g(is)f(c)m(hec)
-m(king)i(for.)199 2240 y(2.)61 b(T)m(yp)s(e)30 b(`)p
+(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 2374
+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 2509
-y(4.)61 b(T)m(yp)s(e)36 b(`)p Ft(make)29 b(install)p
-Fu(')35 b(to)i(install)h Ft(bash)d Fu(and)h Ft(bashbug)p
-Fu(.)57 b(This)35 b(will)i(also)h(install)f(the)g(man)m(ual)330
-2619 y(pages)31 b(and)f(Info)g(\014le.)275 2778 y(The)20
-b Ft(configure)f Fu(shell)i(script)g(attempts)h(to)g(guess)f(correct)i
-(v)-5 b(alues)21 b(for)g(v)-5 b(arious)21 b(system-dep)s(enden)m(t)150
-2888 y(v)-5 b(ariables)31 b(used)e(during)g(compilation.)42
-b(It)31 b(uses)e(those)i(v)-5 b(alues)30 b(to)h(create)h(a)e
-Ft(Makefile)e Fu(in)i(eac)m(h)i(direc-)150 2998 y(tory)k(of)g(the)g
-(pac)m(k)-5 b(age)38 b(\(the)e(top)g(directory)-8 b(,)38
-b(the)e Ft(builtins)p Fu(,)f Ft(doc)p Fu(,)i(and)e Ft(support)e
-Fu(directories,)39 b(eac)m(h)150 3107 y(directory)29
-b(under)d Ft(lib)p Fu(,)j(and)e(sev)m(eral)j(others\).)40
-b(It)29 b(also)g(creates)h(a)e Ft(config.h)e Fu(\014le)j(con)m(taining)
-g(system-)150 3217 y(dep)s(enden)m(t)e(de\014nitions.)40
-b(Finally)-8 b(,)31 b(it)d(creates)i(a)f(shell)g(script)f(named)g
-Ft(config.status)d Fu(that)k(y)m(ou)g(can)150 3326 y(run)h(in)h(the)h
-(future)f(to)h(recreate)h(the)f(curren)m(t)f(con\014guration,)i(a)f
-(\014le)f Ft(config.cache)e Fu(that)j(sa)m(v)m(es)h(the)150
-3436 y(results)39 b(of)g(its)h(tests)g(to)g(sp)s(eed)e(up)g
-(recon\014guring,)j(and)e(a)g(\014le)g Ft(config.log)e
-Fu(con)m(taining)j(compiler)150 3545 y(output)30 b(\(useful)h(mainly)g
-(for)f(debugging)h Ft(configure)p Fu(\).)40 b(If)30 b(at)h(some)h(p)s
-(oin)m(t)e Ft(config.cache)e Fu(con)m(tains)150 3655
-y(results)i(y)m(ou)h(don't)f(w)m(an)m(t)h(to)h(k)m(eep,)f(y)m(ou)g(ma)m
-(y)g(remo)m(v)m(e)g(or)g(edit)g(it.)275 3790 y(T)-8 b(o)37
-b(\014nd)f(out)i(more)f(ab)s(out)h(the)f(options)h(and)f(argumen)m(ts)g
-(that)h(the)g Ft(configure)d Fu(script)i(under-)150 3899
-y(stands,)30 b(t)m(yp)s(e)390 4034 y Ft(bash-4.2$)45
-b(./configure)g(--help)150 4169 y Fu(at)31 b(the)g(Bash)f(prompt)g(in)g
-(y)m(our)g(Bash)h(source)f(directory)-8 b(.)275 4303
-y(If)34 b(y)m(ou)h(w)m(an)m(t)g(to)g(build)f(Bash)g(in)h(a)g(directory)
-g(separate)g(from)f(the)h(source)g(directory)g({)g(to)g(build)150
-4413 y(for)30 b(m)m(ultiple)i(arc)m(hitectures,)g(for)e(example)h({)g
-(just)f(use)h(the)f(full)h(path)f(to)h(the)g(con\014gure)f(script.)41
-b(The)150 4523 y(follo)m(wing)24 b(commands)f(will)g(build)f(bash)g(in)
-g(a)h(directory)h(under)d Ft(/usr/local/build)d Fu(from)23
-b(the)g(source)150 4632 y(co)s(de)31 b(in)f Ft(/usr/local/src/bash-4.4)
-o Fu(:)390 4767 y Ft(mkdir)46 b(/usr/local/build/bash-4.4)390
-4877 y(cd)h(/usr/local/build/bash-4.4)390 4986 y(bash)g
-(/usr/local/src/bash-4.4)o(/con)o(fig)o(ure)390 5096
-y(make)275 5230 y Fu(See)27 b(Section)h(10.3)g([Compiling)g(F)-8
-b(or)27 b(Multiple)h(Arc)m(hitectures],)i(page)d(153,)j(for)c(more)i
-(information)150 5340 y(ab)s(out)i(building)g(in)g(a)g(directory)h
-(separate)h(from)e(the)g(source.)p eop end
-%%Page: 153 159
-TeXDict begin 153 158 bop 150 -116 a Fu(Chapter)30 b(10:)41
-b(Installing)31 b(Bash)2356 b(153)275 299 y(If)53 b(y)m(ou)h(need)f(to)
-i(do)e(un)m(usual)g(things)g(to)i(compile)g(Bash,)k(please)c(try)e(to)i
-(\014gure)e(out)h(ho)m(w)150 408 y Ft(configure)47 b
-Fu(could)j(c)m(hec)m(k)h(whether)e(or)g(not)h(to)h(do)e(them,)55
-b(and)49 b(mail)h(di\013s)f(or)h(instructions)f(to)150
-518 y Ft(bash-maintainers@gnu.org)24 b Fu(so)30 b(they)h(can)g(b)s(e)e
-(considered)i(for)f(the)g(next)h(release.)275 658 y(The)e(\014le)g
-Ft(configure.ac)d Fu(is)k(used)e(to)j(create)g Ft(configure)c
-Fu(b)m(y)i(a)h(program)f(called)i(Auto)s(conf.)40 b(Y)-8
-b(ou)150 768 y(only)34 b(need)g Ft(configure.ac)d Fu(if)i(y)m(ou)i(w)m
-(an)m(t)g(to)f(c)m(hange)i(it)e(or)g(regenerate)i Ft(configure)31
-b Fu(using)j(a)g(new)m(er)150 878 y(v)m(ersion)25 b(of)f(Auto)s(conf.)
-39 b(If)24 b(y)m(ou)h(do)f(this,)i(mak)m(e)f(sure)f(y)m(ou)h(are)f
-(using)g(Auto)s(conf)h(v)m(ersion)f(2.50)i(or)f(new)m(er.)275
-1018 y(Y)-8 b(ou)29 b(can)f(remo)m(v)m(e)i(the)f(program)g(binaries)f
-(and)g(ob)5 b(ject)29 b(\014les)g(from)f(the)h(source)f(co)s(de)h
-(directory)g(b)m(y)150 1127 y(t)m(yping)j(`)p Ft(make)d(clean)p
-Fu('.)42 b(T)-8 b(o)32 b(also)g(remo)m(v)m(e)g(the)g(\014les)f(that)g
+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
-1237 y(Bash)g(for)f(a)g(di\013eren)m(t)h(kind)f(of)g(computer\),)h(t)m
-(yp)s(e)g(`)p Ft(make)e(distclean)p Fu('.)150 1487 y
-Fs(10.2)68 b(Compilers)46 b(and)f(Options)150 1646 y
+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 1756 y(do)s(es)32 b(not)g(kno)m(w)g(ab)s(out.)44
+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
-1865 y(in)k(the)g(en)m(vironmen)m(t.)62 b(Using)38 b(a)f
+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 1975 y(line)31 b(lik)m(e)g(this:)390 2115
+(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
-2255 y Fu(On)29 b(systems)h(that)h(ha)m(v)m(e)h(the)f
+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
-2396 y Ft(env)47 b(CPPFLAGS=-I/usr/local/in)o(clud)o(e)42
-b(LDFLAGS=-s)j(./configure)275 2536 y Fu(The)29 b(con\014guration)i
+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 2786 y Fs(10.3)68 b(Compiling)46 b(F)-11
-b(or)45 b(Multiple)g(Arc)l(hitectures)150 2945 y Fu(Y)-8
+b(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
-3055 y(ob)5 b(ject)31 b(\014les)f(for)g(eac)m(h)i(arc)m(hitecture)f(in)
+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
-3164 y(of)36 b Ft(make)e Fu(that)i(supp)s(orts)e(the)i
+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
-3274 y(y)m(ou)k(w)m(an)m(t)h(the)g(ob)5 b(ject)41 b(\014les)f(and)f
+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 3383 y(source)32 b(directory)h(\(see)g
-(Section)f(10.1)i([Basic)f(Installation],)i(page)e(152\).)47
-b(Y)-8 b(ou)32 b(ma)m(y)h(need)f(to)g(supply)150 3493
+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 3603 y Fu(automatically)33 b(c)m(hec)m(ks)f(for)e
+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 3743
-y(If)20 b(y)m(ou)h(ha)m(v)m(e)i(to)e(use)g(a)g Ft(make)f
-Fu(that)i(do)s(es)e(not)i(supp)s(orts)d(the)i Ft(VPATH)e
-Fu(v)-5 b(ariable,)24 b(y)m(ou)e(can)f(compile)h(Bash)150
-3853 y(for)33 b(one)h(arc)m(hitecture)h(at)f(a)g(time)g(in)f(the)h
+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 3962 y(for)c(one)h(arc)m(hitecture,)h(use)e
+(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 4102 y(Alternativ)m(ely)-8
+(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 4212
+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 4322 y(Here's)41 b(an)f(example)i(that)f
+(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 4431 y(directory)31 b Ft(/usr/gnu/src/bash-2.0)p
-Fu(:)390 4572 y Ft(bash)47 b(/usr/gnu/src/bash-2.0/s)o(uppo)o(rt/)o
+(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
-4712 y Fu(The)c Ft(mkclone)e Fu(script)i(requires)g(Bash,)i(so)f(y)m
+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 4821 y(arc)m(hitecture)32 b(b)s(efore)e(y)m(ou)h(can)f
-(create)i(build)e(directories)h(for)f(other)h(arc)m(hitectures.)150
-5071 y Fs(10.4)68 b(Installation)47 b(Names)150 5230
-y Fu(By)37 b(default,)i(`)p Ft(make)29 b(install)p Fu(')35
-b(will)j(install)f(in)m(to)h Ft(/usr/local/bin)p Fu(,)d
-Ft(/usr/local/man)p Fu(,)f(etc.)61 b(Y)-8 b(ou)150 5340
-y(can)35 b(sp)s(ecify)f(an)h(installation)i(pre\014x)c(other)j(than)e
-Ft(/usr/local)e Fu(b)m(y)j(giving)g Ft(configure)e Fu(the)h(option)p
+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: 154 160
-TeXDict begin 154 159 bop 150 -116 a Fu(Chapter)30 b(10:)41
-b(Installing)31 b(Bash)2356 b(154)150 299 y Ft(--prefix=)p
-Fj(PATH)p Fu(,)41 b(or)g(b)m(y)g(sp)s(ecifying)h(a)f(v)-5
-b(alue)42 b(for)f(the)h Ft(DESTDIR)d Fu(`)p Ft(make)p
-Fu(')i(v)-5 b(ariable)42 b(when)f(running)150 408 y(`)p
-Ft(make)29 b(install)p Fu('.)275 566 y(Y)-8 b(ou)71 b(can)h(sp)s(ecify)
-f(separate)h(installation)h(pre\014xes)d(for)h(arc)m(hitecture-sp)s
-(eci\014c)i(\014les)f(and)150 676 y(arc)m(hitecture-indep)s(enden)m(t)
-44 b(\014les.)80 b(If)43 b(y)m(ou)h(giv)m(e)h Ft(configure)c
-Fu(the)j(option)g Ft(--exec-prefix=)p Fj(PATH)p Fu(,)150
-785 y(`)p Ft(make)29 b(install)p Fu(')63 b(will)h(use)f
-Fr(P)-8 b(A)g(TH)75 b Fu(as)64 b(the)g(pre\014x)e(for)i(installing)h
-(programs)e(and)h(libraries.)150 895 y(Do)s(cumen)m(tation)32
-b(and)e(other)h(data)g(\014les)f(will)h(still)g(use)f(the)h(regular)f
-(pre\014x.)150 1171 y Fs(10.5)68 b(Sp)t(ecifying)45 b(the)g(System)h(T)
-l(yp)t(e)150 1330 y Fu(There)f(ma)m(y)g(b)s(e)f(some)i(features)f
-Ft(configure)e Fu(can)i(not)g(\014gure)g(out)g(automatically)-8
-b(,)52 b(but)44 b(need)h(to)150 1440 y(determine)26 b(b)m(y)g(the)g(t)m
-(yp)s(e)g(of)g(host)g(Bash)g(will)g(run)f(on.)39 b(Usually)26
+%%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
-1549 y(if)g(it)g(prin)m(ts)f(a)h(message)g(sa)m(ying)h(it)f(can)g(not)f
+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 1659 y(`)p Ft(TYPE)p
+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 1768 y(with)e(three)h(\014elds:)40
+(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 1926 y(See)e(the)h(\014le)f
+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 2202 y Fs(10.6)68
-b(Sharing)45 b(Defaults)150 2361 y Fu(If)d(y)m(ou)i(w)m(an)m(t)g(to)f
+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
-2471 y(shell)48 b(script)f(called)i Ft(config.site)44
+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
-2580 y(file)p Fu(,)c(and)d Ft(prefix)p Fu(.)85 b Ft(configure)43
+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 2690 y Ft(PREFIX/etc/config.site)
+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
-2800 y(able)40 b(to)g(the)g(lo)s(cation)h(of)e(the)h(site)g(script.)67
+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 2909 y(script,)31 b(but)e(not)i(all)g
-Ft(configure)d Fu(scripts)i(do.)150 3185 y Fs(10.7)68
-b(Op)t(eration)46 b(Con)l(trols)150 3344 y Ft(configure)28
+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 3538 y Ft(--cache-file=)p
-Fj(file)630 3648 y Fu(Use)d(and)g(sa)m(v)m(e)h(the)f(results)g(of)g
-(the)h(tests)f(in)g Fr(\014le)33 b Fu(instead)28 b(of)h
-Ft(./config.cache)p Fu(.)36 b(Set)28 b Fr(\014le)630
-3758 y Fu(to)j Ft(/dev/null)d Fu(to)j(disable)g(cac)m(hing,)h(for)e
-(debugging)g Ft(configure)p Fu(.)150 3940 y Ft(--help)192
-b Fu(Prin)m(t)30 b(a)h(summary)e(of)i(the)f(options)h(to)g
-Ft(configure)p Fu(,)d(and)i(exit.)150 4123 y Ft(--quiet)150
-4232 y(--silent)150 4342 y(-q)384 b Fu(Do)31 b(not)g(prin)m(t)f
-(messages)h(sa)m(ying)g(whic)m(h)g(c)m(hec)m(ks)g(are)g(b)s(eing)f
-(made.)150 4525 y Ft(--srcdir=)p Fj(dir)630 4634 y Fu(Lo)s(ok)i(for)g
-(the)g(Bash)g(source)h(co)s(de)f(in)g(directory)g Fr(dir)p
-Fu(.)45 b(Usually)33 b Ft(configure)c Fu(can)j(deter-)630
-4744 y(mine)e(that)h(directory)g(automatically)-8 b(.)150
-4927 y Ft(--version)630 5036 y Fu(Prin)m(t)29 b(the)h(v)m(ersion)g(of)g
-(Auto)s(conf)f(used)g(to)h(generate)h(the)f Ft(configure)d
-Fu(script,)j(and)f(exit.)275 5230 y Ft(configure)34 b
-Fu(also)k(accepts)g(some)g(other,)h(not)e(widely)g(used,)h(b)s
-(oilerplate)g(options.)61 b(`)p Ft(configure)150 5340
-y(--help)p Fu(')29 b(prin)m(ts)h(the)g(complete)i(list.)p
-eop end
-%%Page: 155 161
-TeXDict begin 155 160 bop 150 -116 a Fu(Chapter)30 b(10:)41
-b(Installing)31 b(Bash)2356 b(155)150 299 y Fs(10.8)68
-b(Optional)46 b(F)-11 b(eatures)150 458 y Fu(The)29 b(Bash)h
-Ft(configure)d Fu(has)j(a)g(n)m(um)m(b)s(er)f(of)h Ft(--enable-)p
-Fj(feature)25 b Fu(options,)30 b(where)g Fr(feature)35
-b Fu(indicates)150 568 y(an)e(optional)i(part)e(of)h(Bash.)50
-b(There)33 b(are)g(also)i(sev)m(eral)g Ft(--with-)p Fj(package)29
-b Fu(options,)35 b(where)e Fr(pac)m(k)-5 b(age)150 677
-y Fu(is)32 b(something)h(lik)m(e)h(`)p Ft(bash-malloc)p
-Fu(')c(or)i(`)p Ft(purify)p Fu('.)45 b(T)-8 b(o)33 b(turn)e(o\013)i
-(the)f(default)h(use)f(of)g(a)h(pac)m(k)-5 b(age,)35
-b(use)150 787 y Ft(--without-)p Fj(package)p Fu(.)46
-b(T)-8 b(o)34 b(con\014gure)g(Bash)g(without)f(a)i(feature)f(that)g(is)
-g(enabled)g(b)m(y)f(default,)i(use)150 897 y Ft(--disable-)p
-Fj(feature)p Fu(.)275 1033 y(Here)28 b(is)g(a)h(complete)g(list)g(of)f
-(the)h Ft(--enable-)c Fu(and)j Ft(--with-)e Fu(options)i(that)h(the)f
-(Bash)g Ft(configure)150 1143 y Fu(recognizes.)150 1306
-y Ft(--with-afs)630 1415 y Fu(De\014ne)j(if)f(y)m(ou)h(are)f(using)g
-(the)h(Andrew)e(File)j(System)e(from)g(T)-8 b(ransarc.)150
-1577 y Ft(--with-bash-malloc)630 1686 y Fu(Use)34 b(the)g(Bash)h(v)m
-(ersion)f(of)g Ft(malloc)e Fu(in)i(the)g(directory)h
-Ft(lib/malloc)p Fu(.)48 b(This)34 b(is)g(not)g(the)630
-1796 y(same)e Ft(malloc)e Fu(that)j(app)s(ears)e(in)g
-Fm(gnu)h Fu(lib)s(c,)g(but)f(an)h(older)f(v)m(ersion)i(originally)g
-(deriv)m(ed)630 1905 y(from)f(the)h(4.2)g Fm(bsd)f Ft(malloc)p
-Fu(.)45 b(This)31 b Ft(malloc)g Fu(is)i(v)m(ery)f(fast,)i(but)e(w)m
-(astes)h(some)g(space)g(on)630 2015 y(eac)m(h)j(allo)s(cation.)58
-b(This)34 b(option)i(is)f(enabled)g(b)m(y)g(default.)56
-b(The)34 b Ft(NOTES)g Fu(\014le)h(con)m(tains)i(a)630
-2125 y(list)29 b(of)f(systems)f(for)h(whic)m(h)g(this)g(should)e(b)s(e)
-i(turned)e(o\013,)j(and)f Ft(configure)d Fu(disables)j(this)630
-2234 y(option)j(automatically)i(for)d(a)h(n)m(um)m(b)s(er)e(of)i
-(systems.)150 2396 y Ft(--with-curses)630 2505 y Fu(Use)h(the)h(curses)
+(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 2615
+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 2777 y Ft(--with-gnu-malloc)630
-2886 y Fu(A)g(synon)m(ym)g(for)g Ft(--with-bash-malloc)p
-Fu(.)150 3048 y Ft(--with-installed-readlin)o(e[=)p Fj(P)o(REFI)o(X)p
-Ft(])630 3157 y Fu(De\014ne)c(this)f(to)h(mak)m(e)h(Bash)f(link)f(with)
+(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
-3267 y(than)f(the)h(v)m(ersion)g(in)f Ft(lib/readline)p
+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)630 3376 y(v)m(ersions.)46 b(If)32 b Fr(PREFIX)41
-b Fu(is)32 b Ft(yes)f Fu(or)i(not)f(supplied,)f Ft(configure)f
-Fu(uses)i(the)g(v)-5 b(alues)32 b(of)h(the)630 3486 y(mak)m(e)28
-b(v)-5 b(ariables)29 b Ft(includedir)24 b Fu(and)j Ft(libdir)p
-Fu(,)g(whic)m(h)g(are)h(sub)s(directories)f(of)g Ft(prefix)f
-Fu(b)m(y)630 3596 y(default,)44 b(to)d(\014nd)f(the)h(installed)g(v)m
-(ersion)h(of)f(Readline)g(if)g(it)g(is)g(not)g(in)g(the)g(standard)630
-3705 y(system)35 b(include)f(and)g(library)g(directories.)54
-b(If)34 b Fr(PREFIX)43 b Fu(is)35 b Ft(no)p Fu(,)g(Bash)f(links)h(with)
-f(the)630 3815 y(v)m(ersion)42 b(in)e Ft(lib/readline)p
-Fu(.)70 b(If)40 b Fr(PREFIX)51 b Fu(is)41 b(set)g(to)h(an)m(y)g(other)f
-(v)-5 b(alue,)44 b Ft(configure)630 3924 y Fu(treats)27
-b(it)g(as)f(a)h(directory)g(pathname)f(and)f(lo)s(oks)i(for)f(the)g
-(installed)h(v)m(ersion)g(of)f(Readline)630 4034 y(in)34
-b(sub)s(directories)f(of)h(that)h(directory)g(\(include)f(\014les)g(in)
-g Fr(PREFIX)9 b Fu(/)p Ft(include)32 b Fu(and)i(the)630
-4144 y(library)c(in)g Fr(PREFIX)9 b Fu(/)p Ft(lib)p Fu(\).)150
-4305 y Ft(--with-purify)630 4415 y Fu(De\014ne)23 b(this)g(to)h(use)f
-(the)g(Purify)f(memory)h(allo)s(cation)i(c)m(hec)m(k)m(er)g(from)e
-(Rational)i(Soft)m(w)m(are.)150 4576 y Ft(--enable-minimal-config)630
-4686 y Fu(This)e(pro)s(duces)f(a)i(shell)g(with)f(minimal)h(features,)h
-(close)g(to)f(the)g(historical)h(Bourne)e(shell.)275
-4849 y(There)k(are)i(sev)m(eral)g Ft(--enable-)d Fu(options)i(that)h
-(alter)g(ho)m(w)f(Bash)g(is)g(compiled)h(and)e(link)m(ed,)i(rather)150
-4958 y(than)h(c)m(hanging)h(run-time)f(features.)150
-5121 y Ft(--enable-largefile)630 5230 y Fu(Enable)36
+(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 5340 y(lfs20mar)h(.)g(html)p Fu(\))35 b(if)j(the)g(op)s
-(erating)g(system)g(requires)f(sp)s(ecial)i(compiler)f(options)g(to)p
-eop end
-%%Page: 156 162
-TeXDict begin 156 161 bop 150 -116 a Fu(Chapter)30 b(10:)41
-b(Installing)31 b(Bash)2356 b(156)630 299 y(build)33
-b(programs)g(whic)m(h)h(can)g(access)h(large)g(\014les.)51
-b(This)33 b(is)h(enabled)g(b)m(y)g(default,)h(if)f(the)630
-408 y(op)s(erating)d(system)f(pro)m(vides)h(large)g(\014le)g(supp)s
-(ort.)150 570 y Ft(--enable-profiling)630 680 y Fu(This)g(builds)f(a)i
-(Bash)g(binary)f(that)h(pro)s(duces)e(pro\014ling)h(information)h(to)h
-(b)s(e)d(pro)s(cessed)630 790 y(b)m(y)g Ft(gprof)f Fu(eac)m(h)j(time)f
-(it)g(is)f(executed.)150 951 y Ft(--enable-static-link)630
-1061 y Fu(This)37 b(causes)h(Bash)f(to)h(b)s(e)f(link)m(ed)h
-(statically)-8 b(,)43 b(if)37 b Ft(gcc)g Fu(is)g(b)s(eing)g(used.)61
-b(This)37 b(could)h(b)s(e)630 1171 y(used)30 b(to)h(build)e(a)i(v)m
-(ersion)g(to)g(use)f(as)g(ro)s(ot's)h(shell.)275 1334
+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
-1443 y(is)h(pro)s(cessed)g(\014rst,)g(so)h(individual)f(options)g(ma)m
+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 1580 y(All)c(of)f(the)h(follo)m(wing)h(options)f(except)g
-(for)g(`)p Ft(disabled-builtins)p Fu(',)c(`)p Ft(direxpand-default)p
-Fu(',)h(and)150 1690 y(`)p Ft(xpg-echo-default)p Fu(')28
-b(are)33 b(enabled)f(b)m(y)g(default,)h(unless)e(the)i(op)s(erating)f
-(system)h(do)s(es)e(not)i(pro)m(vide)150 1800 y(the)e(necessary)f(supp)
-s(ort.)150 1963 y Ft(--enable-alias)630 2072 y Fu(Allo)m(w)41
-b(alias)g(expansion)f(and)f(include)g(the)h Ft(alias)f
-Fu(and)g Ft(unalias)e Fu(builtins)j(\(see)g(Sec-)630
-2182 y(tion)31 b(6.6)g([Aliases],)i(page)e(94\).)150
-2344 y Ft(--enable-arith-for-comma)o(nd)630 2453 y Fu(Include)21
+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
-2563 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(10\).)150
-2725 y Ft(--enable-array-variables)630 2834 y Fu(Include)h(supp)s(ort)g
+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 2944 y(ra)m(ys],)c(page)g(95\).)150
-3106 y Ft(--enable-bang-history)630 3215 y Fu(Include)36
+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 3325 y(teraction],)c(page)e
-(148\).)150 3487 y Ft(--enable-brace-expansion)630 3597
+(\(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 3706 y([Brace)32 b(Expansion],)e(page)h(23,)h
-(for)e(a)g(complete)i(description.)150 3868 y Ft
-(--enable-casemod-attribu)o(tes)630 3978 y Fu(Include)37
+b(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 4087 y(signmen)m(t)29
-b(statemen)m(ts.)41 b(V)-8 b(ariables)30 b(with)e(the)g
-Fr(upp)s(ercase)k Fu(attribute,)e(for)e(example,)i(will)630
-4197 y(ha)m(v)m(e)i(their)e(v)-5 b(alues)31 b(con)m(v)m(erted)h(to)f
-(upp)s(ercase)e(up)s(on)g(assignmen)m(t.)150 4359 y Ft
-(--enable-casemod-expansi)o(on)630 4468 y Fu(Include)h(supp)s(ort)e
-(for)i(case-mo)s(difying)i(w)m(ord)e(expansions.)150
-4630 y Ft(--enable-command-timing)630 4740 y Fu(Include)43
+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 4849 y(timing)37
+(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
-4959 y(page)24 b(8\).)39 b(This)23 b(allo)m(ws)h(pip)s(elines)f(as)h(w)
-m(ell)g(as)g(shell)f(builtins)g(and)g(functions)g(to)h(b)s(e)e(timed.)
-150 5121 y Ft(--enable-cond-command)630 5230 y Fu(Include)33
-b(supp)s(ort)f(for)i(the)g Ft([[)f Fu(conditional)i(command.)51
-b(\(see)34 b(Section)h(3.2.5.2)h([Condi-)630 5340 y(tional)c
-(Constructs],)e(page)h(11\).)p eop end
-%%Page: 157 163
-TeXDict begin 157 162 bop 150 -116 a Fu(Chapter)30 b(10:)41
-b(Installing)31 b(Bash)2356 b(157)150 299 y Ft(--enable-cond-regexp)630
-408 y Fu(Include)35 b(supp)s(ort)f(for)i(matc)m(hing)h
-Fm(posix)e Fu(regular)h(expressions)g(using)f(the)h(`)p
-Ft(=~)p Fu(')g(binary)630 518 y(op)s(erator)25 b(in)f(the)h
+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 628 y(structs],)31 b(page)g(11\).)150
-774 y Ft(--enable-coprocesses)630 883 y Fu(Include)23
+([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
-993 y([Pip)s(elines],)31 b(page)g(8\).)150 1139 y Ft(--enable-debugger)
-630 1249 y Fu(Include)f(supp)s(ort)e(for)i(the)h(bash)f(debugger)g
-(\(distributed)g(separately\).)150 1395 y Ft(--enable-dev-fd-stat-bro)o
-(ken)630 1504 y Fu(If)c(calling)j Ft(stat)d Fu(on)g(/dev/fd/)p
-Fr(N)38 b Fu(returns)25 b(di\013eren)m(t)j(results)f(than)f(calling)j
-Ft(fstat)c Fu(on)i(\014le)630 1614 y(descriptor)g Fr(N)p
-Fu(,)i(supply)c(this)j(option)g(to)g(enable)f(a)h(w)m(ork)-5
-b(around.)39 b(This)27 b(has)g(implications)630 1724
-y(for)j(conditional)i(commands)e(that)h(test)g(\014le)g(attributes.)150
-1870 y Ft(--enable-direxpand-defau)o(lt)630 1979 y Fu(Cause)53
+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 2089 y(page)29 b(66\))g(to)f(b)s(e)f
+([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 2198 y(b)m(y)i(default.)150
-2345 y Ft(--enable-directory-stack)630 2454 y Fu(Include)j(supp)s(ort)g
+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
-2564 y Fu(builtins)d(\(see)h(Section)g(6.8)h([The)e(Directory)i(Stac)m
-(k],)g(page)f(97\).)150 2710 y Ft(--enable-disabled-builti)o(ns)630
-2819 y Fu(Allo)m(w)40 b(builtin)e(commands)g(to)h(b)s(e)f(in)m(v)m(ok)m
+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 2929 y(b)s(een)31 b(disabled)g(using)g(`)p
+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(51,)630 3039 y(for)e(details)i(of)e(the)h
+(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
-3185 y Ft(--enable-dparen-arithmet)o(ic)630 3294 y Fu(Include)42
+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 3404 y(Constructs],)30
-b(page)h(11\).)150 3550 y Ft(--enable-extended-glob)630
-3660 y Fu(Include)40 b(supp)s(ort)e(for)i(the)h(extended)f(pattern)h
+(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
-3769 y(under)29 b(Section)i(3.5.8.1)i([P)m(attern)e(Matc)m(hing],)i
-(page)e(33.)150 3915 y Ft(--enable-extended-glob-d)o(efau)o(lt)630
-4025 y Fu(Set)40 b(the)g(default)g(v)-5 b(alue)41 b(of)f(the)g
-Fr(extglob)j Fu(shell)d(option)g(describ)s(ed)f(ab)s(o)m(v)m(e)i(under)
-d(Sec-)630 4134 y(tion)31 b(4.3.2)h([The)e(Shopt)g(Builtin],)h(page)g
-(66,)h(to)f(b)s(e)f(enabled.)150 4281 y Ft(--enable-function-import)630
-4390 y Fu(Include)23 b(supp)s(ort)g(for)g(imp)s(orting)h(function)g
+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
-4500 y(of)31 b(the)f(shell)h(from)f(the)g(en)m(vironmen)m(t.)41
+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
-4646 y Ft(--enable-glob-asciirange)o(-def)o(ault)630
-4756 y Fu(Set)h(the)g(default)f(v)-5 b(alue)31 b(of)g(the)g
-Fr(globasciiranges)36 b Fu(shell)31 b(option)g(describ)s(ed)f(ab)s(o)m
-(v)m(e)h(under)630 4865 y(Section)39 b(4.3.2)h([The)e(Shopt)g
-(Builtin],)j(page)e(66,)i(to)f(b)s(e)d(enabled.)65 b(This)37
-b(con)m(trols)j(the)630 4975 y(b)s(eha)m(vior)21 b(of)g(c)m(haracter)h
-(ranges)f(when)f(used)g(in)g(pattern)h(matc)m(hing)h(brac)m(k)m(et)g
-(expressions.)150 5121 y Ft(--enable-help-builtin)630
-5230 y Fu(Include)i(the)h Ft(help)f Fu(builtin,)h(whic)m(h)g(displa)m
-(ys)f(help)h(on)f(shell)h(builtins)f(and)h(v)-5 b(ariables)25
-b(\(see)630 5340 y(Section)31 b(4.2)h([Bash)e(Builtins],)i(page)f
-(51\).)p eop end
-%%Page: 158 164
-TeXDict begin 158 163 bop 150 -116 a Fu(Chapter)30 b(10:)41
-b(Installing)31 b(Bash)2356 b(158)150 299 y Ft(--enable-history)630
-408 y Fu(Include)29 b(command)g(history)h(and)f(the)h
-Ft(fc)f Fu(and)g Ft(history)e Fu(builtin)j(commands)f(\(see)h(Sec-)630
-518 y(tion)h(9.1)g([Bash)g(History)g(F)-8 b(acilities],)34
-b(page)d(146\).)150 664 y Ft(--enable-job-control)630
-774 y Fu(This)h(enables)i(the)f(job)g(con)m(trol)i(features)e(\(see)i
-(Chapter)d(7)i([Job)f(Con)m(trol],)i(page)f(107\),)630
-883 y(if)c(the)h(op)s(erating)g(system)f(supp)s(orts)f(them.)150
-1029 y Ft(--enable-multibyte)630 1139 y Fu(This)g(enables)i(supp)s(ort)
-d(for)i(m)m(ultib)m(yte)h(c)m(haracters)g(if)f(the)g(op)s(erating)h
-(system)f(pro)m(vides)630 1249 y(the)h(necessary)f(supp)s(ort.)150
-1395 y Ft(--enable-net-redirection)o(s)630 1504 y Fu(This)23
-b(enables)h(the)g(sp)s(ecial)h(handling)e(of)h(\014lenames)g(of)g(the)g
-(form)g Ft(/dev/tcp/)p Fj(host)p Ft(/)p Fj(port)630 1614
-y Fu(and)31 b Ft(/dev/udp/)p Fj(host)p Ft(/)p Fj(port)26
-b Fu(when)31 b(used)g(in)g(redirections)h(\(see)g(Section)g(3.6)h
-([Redirec-)630 1724 y(tions],)e(page)g(35\).)150 1870
-y Ft(--enable-process-substit)o(utio)o(n)630 1979 y Fu(This)49
-b(enables)i(pro)s(cess)f(substitution)g(\(see)h(Section)g(3.5.6)h([Pro)
-s(cess)e(Substitution],)630 2089 y(page)31 b(32\))h(if)e(the)h(op)s
-(erating)f(system)h(pro)m(vides)f(the)h(necessary)g(supp)s(ort.)150
-2235 y Ft(--enable-progcomp)630 2345 y Fu(Enable)d(the)g(programmable)g
-(completion)i(facilities)g(\(see)f(Section)g(8.6)g([Programmable)630
-2454 y(Completion],)i(page)h(137\).)42 b(If)30 b(Readline)h(is)f(not)h
-(enabled,)f(this)h(option)g(has)f(no)g(e\013ect.)150
-2600 y Ft(--enable-prompt-string-d)o(ecod)o(ing)630 2710
-y Fu(T)-8 b(urn)30 b(on)i(the)f(in)m(terpretation)i(of)f(a)g(n)m(um)m
-(b)s(er)e(of)i(bac)m(kslash-escap)s(ed)g(c)m(haracters)i(in)d(the)630
-2819 y Ft($PS0)p Fu(,)36 b Ft($PS1)p Fu(,)g Ft($PS2)p
-Fu(,)h(and)e Ft($PS4)f Fu(prompt)h(strings.)57 b(See)36
-b(Section)h(6.9)g([Con)m(trolling)g(the)630 2929 y(Prompt],)30
-b(page)h(98,)h(for)e(a)h(complete)h(list)f(of)f(prompt)g(string)g
-(escap)s(e)h(sequences.)150 3075 y Ft(--enable-readline)630
-3185 y Fu(Include)d(supp)s(ort)f(for)h(command-line)h(editing)g(and)f
-(history)g(with)g(the)h(Bash)g(v)m(ersion)g(of)630 3294
-y(the)i(Readline)g(library)f(\(see)h(Chapter)f(8)g([Command)g(Line)g
-(Editing],)h(page)g(111\).)150 3440 y Ft(--enable-restricted)630
-3550 y Fu(Include)41 b(supp)s(ort)f(for)i(a)g Fr(restricted)g(shell)p
-Fu(.)75 b(If)42 b(this)f(is)h(enabled,)j(Bash,)g(when)c(called)630
-3660 y(as)f Ft(rbash)p Fu(,)h(en)m(ters)f(a)g(restricted)h(mo)s(de.)68
-b(See)40 b(Section)h(6.10)g([The)f(Restricted)h(Shell],)630
-3769 y(page)31 b(100,)h(for)e(a)h(description)f(of)h(restricted)g(mo)s
-(de.)150 3915 y Ft(--enable-select)630 4025 y Fu(Include)25
-b(the)h Ft(select)f Fu(comp)s(ound)f(command,)j(whic)m(h)e(allo)m(ws)j
-(the)e(generation)h(of)f(simple)630 4134 y(men)m(us)k(\(see)h(Section)g
-(3.2.5.2)i([Conditional)e(Constructs],)g(page)g(11\).)150
-4281 y Ft(--enable-separate-helpfi)o(les)630 4390 y Fu(Use)h(external)h
-(\014les)f(for)g(the)g(do)s(cumen)m(tation)h(displa)m(y)m(ed)f(b)m(y)g
-(the)g Ft(help)f Fu(builtin)h(instead)630 4500 y(of)f(storing)f(the)h
-(text)g(in)m(ternally)-8 b(.)150 4646 y Ft(--enable-single-help-str)o
-(ings)630 4756 y Fu(Store)40 b(the)g(text)h(displa)m(y)m(ed)g(b)m(y)e
-(the)i Ft(help)d Fu(builtin)i(as)g(a)g(single)h(string)f(for)f(eac)m(h)
-i(help)630 4865 y(topic.)54 b(This)33 b(aids)i(in)f(translating)h(the)g
-(text)g(to)g(di\013eren)m(t)g(languages.)54 b(Y)-8 b(ou)35
-b(ma)m(y)g(need)630 4975 y(to)c(disable)g(this)f(if)g(y)m(our)h
-(compiler)g(cannot)f(handle)g(v)m(ery)h(long)g(string)f(literals.)150
-5121 y Ft(--enable-strict-posix-de)o(faul)o(t)630 5230
-y Fu(Mak)m(e)c(Bash)f Fm(posix)p Fu(-conforman)m(t)g(b)m(y)f(default)h
-(\(see)g(Section)h(6.11)g([Bash)f(POSIX)e(Mo)s(de],)630
-5340 y(page)31 b(101\).)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)150 299 y Ft
-(--enable-usg-echo-defaul)o(t)630 408 y Fu(A)30 b(synon)m(ym)g(for)g
-Ft(--enable-xpg-echo-default)p Fu(.)150 568 y Ft
-(--enable-xpg-echo-defaul)o(t)630 677 y Fu(Mak)m(e)c(the)f
+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 787 y(requiring)d(the)h
+(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
-897 y(to)28 b Ft(on)p Fu(,)g(whic)m(h)f(mak)m(es)h(the)g(Bash)f
+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 1006 y(Single)35 b(Unix)f(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(51,)630 1116 y(for)30 b(a)h(description)f(of)h
-(the)f(escap)s(e)h(sequences)g(that)g Ft(echo)e Fu(recognizes.)275
-1275 y(The)f(\014le)i Ft(config-top.h)c Fu(con)m(tains)31
-b(C)d(Prepro)s(cessor)h(`)p Ft(#define)p Fu(')f(statemen)m(ts)j(for)f
-(options)f(whic)m(h)150 1385 y(are)35 b(not)g(settable)i(from)d
-Ft(configure)p Fu(.)51 b(Some)35 b(of)g(these)g(are)h(not)f(mean)m(t)g
-(to)h(b)s(e)e(c)m(hanged;)k(b)s(ew)m(are)d(of)150 1494
-y(the)h(consequences)g(if)f(y)m(ou)h(do.)55 b(Read)36
-b(the)g(commen)m(ts)g(asso)s(ciated)h(with)e(eac)m(h)i(de\014nition)e
-(for)g(more)150 1604 y(information)c(ab)s(out)f(its)h(e\013ect.)p
+(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: 160 166
-TeXDict begin 160 165 bop 3614 -116 a Fu(160)150 299
+%%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)33 b(for)d(FTP)g(from)g Ft
-(ftp://ftp.gnu.org/pub/gn)o(u/ba)o(sh/)o Fu(.)275 887
-y(Once)41 b(y)m(ou)g(ha)m(v)m(e)h(determined)f(that)h(a)f(bug)g
-(actually)h(exists,)j(use)c(the)g Ft(bashbug)e Fu(command)i(to)150
-996 y(submit)25 b(a)h(bug)g(rep)s(ort.)38 b(If)26 b(y)m(ou)g(ha)m(v)m
-(e)h(a)f(\014x,)h(y)m(ou)f(are)g(encouraged)h(to)f(mail)h(that)f(as)g
-(w)m(ell!)40 b(Suggestions)150 1106 y(and)j(`philosophical')i(bug)e
-(rep)s(orts)f(ma)m(y)j(b)s(e)e(mailed)h(to)g Ft(bug-bash@gnu)11
-b(.)g(org)39 b Fu(or)k(p)s(osted)g(to)i(the)150 1215
-y(Usenet)31 b(newsgroup)e Ft(gnu.bash.bug)p Fu(.)275
-1350 y(All)i(bug)e(rep)s(orts)h(should)f(include:)225
-1484 y Fq(\017)60 b Fu(The)30 b(v)m(ersion)h(n)m(um)m(b)s(er)e(of)h
-(Bash.)225 1619 y Fq(\017)60 b Fu(The)30 b(hardw)m(are)g(and)g(op)s
-(erating)g(system.)225 1753 y Fq(\017)60 b Fu(The)30
-b(compiler)h(used)e(to)i(compile)h(Bash.)225 1888 y Fq(\017)60
+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
-2022 y Fq(\017)60 b Fu(A)30 b(short)h(script)f(or)g(`recip)s(e')h(whic)
+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 2182 y Ft(bashbug)d Fu(inserts)i(the)h(\014rst)f
+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 2291 y(bug)h(rep)s(ort.)275
-2426 y(Please)h(send)f(all)h(rep)s(orts)f(concerning)g(this)h(man)m
+(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: 161 167
-TeXDict begin 161 166 bop 3614 -116 a Fu(161)150 141
+%%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
@@ -19509,20 +20174,20 @@ Ft(sh)f Fu(included)g(in)h(SVR4.2)h(\(the)f(last)h(v)m(ersion)f(of)g
 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(101\).)225 1565 y Fq(\017)60
+(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
-(86\).)225 1699 y Fq(\017)60 b Fu(Bash)40 b(has)f(command-line)h
+(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
-(111\))330 1809 y(and)30 b(the)g Ft(bind)g Fu(builtin.)225
+(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(137\),)i(and)d(builtin)g
+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(146\))i(and)d(the)330 2405 y Ft(history)k Fu(and)h
+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
@@ -19530,9 +20195,9 @@ 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(148\).)225 2892 y Fq(\017)60 b Fu(Bash)33
-b(has)g(one-dimensional)h(arra)m(y)f(v)-5 b(ariables)34
-b(\(see)g(Section)g(6.7)g([Arra)m(ys],)g(page)g(95\),)h(and)e(the)330
+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
@@ -19554,49 +20219,49 @@ i(strings)f(found)e(in)h(a)h(script)g(\(see)g(Section)g(3.1.2.5)330
 4171 y Fq(\017)60 b Fu(Bash)44 b(implemen)m(ts)g(the)f
 Ft(!)h Fu(k)m(eyw)m(ord)g(to)g(negate)h(the)f(return)e(v)-5
 b(alue)44 b(of)g(a)g(pip)s(eline)f(\(see)h(Sec-)330 4281
-y(tion)33 b(3.2.3)i([Pip)s(elines],)f(page)g(8\).)49
-b(V)-8 b(ery)33 b(useful)f(when)g(an)h Ft(if)f Fu(statemen)m(t)j(needs)
-d(to)i(act)g(only)f(if)330 4390 y(a)k(test)h(fails.)60
-b(The)36 b(Bash)g(`)p Ft(-o)30 b(pipefail)p Fu(')35 b(option)i(to)h
-Ft(set)d Fu(will)i(cause)g(a)g(pip)s(eline)g(to)g(return)f(a)330
-4500 y(failure)31 b(status)f(if)h(an)m(y)f(command)g(fails.)225
+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)g(8\).)52 b(The)33
-b(displa)m(y)i(of)f(the)g(timing)g(statistics)i(ma)m(y)f(b)s(e)e(con)m
+(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(10\).)225 5230 y Fq(\017)60
+(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(11\).)p eop end
-%%Page: 162 168
-TeXDict begin 162 167 bop 150 -116 a Fu(App)s(endix)29
+(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(162)225 299 y Fq(\017)60
+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(11\),)i(including)330 518 y(optional)32
+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(23\))h(and)d(tilde)330
+(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(24\).)225 1034 y Fq(\017)60 b Fu(Bash)24 b(implemen)m(ts)h
+(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(94\).)225 1279 y Fq(\017)60
+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(11\),)g(and)e(arithmetic)i
+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(93\).)225 1633 y Fq(\017)60 b
+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
@@ -19612,103 +20277,101 @@ 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(25\).)225 2587 y Fq(\017)60
+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
-(25\).)225 2832 y Fq(\017)60 b Fu(The)30 b(expansion)g
+(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(25\).)225
-3187 y Fq(\017)60 b Fu(The)21 b(expansion)f Ft(${var/[/])p
-Fr(pattern)p Ft([/)p Fr(replacemen)m(t)r Ft(]})p Fu(,)i(whic)m(h)e
-(matc)m(hes)j Fr(pattern)e Fu(and)f(replaces)330 3296
-y(it)29 b(with)e Fr(replacemen)m(t)32 b Fu(in)c(the)g(v)-5
-b(alue)29 b(of)f Ft(var)p Fu(,)g(is)g(a)m(v)-5 b(ailable)31
-b(\(see)e(Section)f(3.5.3)i([Shell)f(P)m(arameter)330
-3406 y(Expansion],)h(page)h(25\).)225 3541 y Fq(\017)60
+(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(25\).)225 3896 y Fq(\017)60
-b Fu(Bash)22 b(has)f Fr(indirect)j Fu(v)-5 b(ariable)22
-b(expansion)g(using)f Ft(${!word})e Fu(\(see)k(Section)f(3.5.3)i
-([Shell)e(P)m(arameter)330 4006 y(Expansion],)30 b(page)h(25\).)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(31\),)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(32\).)225 4766 y Fq(\017)60
-b Fu(Bash)55 b(automatically)j(assigns)e(v)-5 b(ariables)55
-b(that)h(pro)m(vide)f(information)h(ab)s(out)f(the)g(curren)m(t)330
-4876 y(user)40 b(\()p Ft(UID)p Fu(,)i Ft(EUID)p Fu(,)g(and)e
-Ft(GROUPS)p Fu(\),)h(the)g(curren)m(t)f(host)g(\()p Ft(HOSTTYPE)p
-Fu(,)h Ft(OSTYPE)p Fu(,)h Ft(MACHTYPE)p Fu(,)f(and)330
-4985 y Ft(HOSTNAME)p Fu(\),)55 b(and)c(the)g(instance)h(of)g(Bash)f
-(that)h(is)f(running)f(\()p Ft(BASH)p Fu(,)56 b Ft(BASH_VERSION)p
-Fu(,)e(and)330 5095 y Ft(BASH_VERSINFO)p Fu(\).)37 b(See)31
-b(Section)g(5.2)h([Bash)e(V)-8 b(ariables],)33 b(page)e(73,)g(for)f
-(details.)225 5230 y Fq(\017)60 b Fu(The)44 b Ft(IFS)f
-Fu(v)-5 b(ariable)45 b(is)f(used)f(to)i(split)f(only)g(the)g(results)g
-(of)h(expansion,)i(not)d(all)h(w)m(ords)f(\(see)330 5340
-y(Section)29 b(3.5.7)h([W)-8 b(ord)29 b(Splitting],)h(page)f(32\).)41
-b(This)28 b(closes)h(a)g(longstanding)g(shell)f(securit)m(y)h(hole.)p
-eop end
-%%Page: 163 169
-TeXDict begin 163 168 bop 150 -116 a Fu(App)s(endix)29
+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(163)225 299 y Fq(\017)60
+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 Fr(c)m(har-)330 646 y(acter)i(classes)p
-Fu(,)j Fr(equiv)-5 b(alence)39 b(classes)p Fu(,)j(and)37
-b Fr(collating)k(sym)m(b)s(ols)g Fu(\(see)e(Section)g(3.5.8)h
-([Filename)330 756 y(Expansion],)30 b(page)h(33\).)225
-883 y Fq(\017)60 b Fu(Bash)35 b(implemen)m(ts)g(extended)g(pattern)g
-(matc)m(hing)h(features)f(when)f(the)h Ft(extglob)d Fu(shell)j(option)
-330 993 y(is)30 b(enabled)h(\(see)g(Section)g(3.5.8.1)i([P)m(attern)f
-(Matc)m(hing],)g(page)f(33\).)225 1121 y Fq(\017)60 b
-Fu(It)22 b(is)g(p)s(ossible)g(to)h(ha)m(v)m(e)g(a)f(v)-5
-b(ariable)23 b(and)f(a)g(function)g(with)g(the)g(same)g(name;)j
+(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(51\).)225 1596 y Fq(\017)60 b Fu(V)-8
+(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(41\).)60 b(In)35 b Ft(sh)p Fu(,)j(all)f(v)-5 b(ariable)37
+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(35\).)225
+(\(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(35\).)225 2527
+(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
@@ -19719,20 +20382,20 @@ Fu(')e(redirection)j(op)s(erators,)g(whic)m(h)f(mo)m(v)m(e)330
 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(35\).)225 3240 y Fq(\017)60
+([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(35\).)225 3477 y Fq(\017)60
+([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(62\).)66
+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(44\))h(eac)m(h)330
+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)
@@ -19740,28 +20403,28 @@ 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(51\).)225 4408 y Fq(\017)60 b Fu(The)35
+(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
-(51\).)225 4646 y Fq(\017)60 b Fu(Individual)23 b(builtins)g(ma)m(y)i
+(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(51\).)225 4883 y Fq(\017)60 b Fu(The)26
+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(44\).)225 5230
+([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(18\).)p eop end
-%%Page: 164 170
-TeXDict begin 164 169 bop 150 -116 a Fu(App)s(endix)29
+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(164)225 299 y Fq(\017)60
+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
@@ -19777,15 +20440,15 @@ 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(44\).)225
+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(51\).)225
+(\(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(51\).)225
+(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(51\))g(will)f(read)g(a)g
+(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
@@ -19808,23 +20471,23 @@ Fu(option)h(will)330 2491 y(read)30 b(un)m(til)h(a)g(particular)f(c)m
 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(44\).)225
+(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(66\),)k(and)39 b(allo)m(ws)i(these)f(options)h(to)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
-(86\).)225 3230 y Fq(\017)60 b Fu(Bash)45 b(has)f(m)m(uc)m(h)g(more)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(62\).)225 3477
+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(62\).)225
+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(44\))g(is)f(sligh)m(tly)h
+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
@@ -19833,9 +20496,9 @@ Ft(caller)d Fu(builtin,)j(whic)m(h)f(displa)m(ys)g(the)g(con)m(text)i
 (of)f(an)m(y)g(activ)m(e)h(subroutine)330 4189 y(call)28
 b(\(a)f(shell)f(function)h(or)f(a)h(script)f(executed)h(with)f(the)h
 Ft(.)f Fu(or)g Ft(source)f Fu(builtins\).)39 b(This)26
-b(supp)s(orts)330 4299 y(the)31 b(bash)e(debugger.)225
+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(44\))h(allo)m(ws)g(a)e
+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
@@ -19851,58 +20514,58 @@ Ft(functrace)d Fu(option)j(has)f(b)s(een)g(enabled)g(using)330
 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(44\))g(allo)m(ws)g(an)f Ft(ERR)f Fu(pseudo-)330
+(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: 165 171
-TeXDict begin 165 170 bop 150 -116 a Fu(App)s(endix)29
+%%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(165)330 299 y(are)40 b(executed)g(after)g
+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(44\))g(allo)m(ws)g(a)g
-Ft(RETURN)330 759 y Fu(pseudo-signal)35 b(sp)s(eci\014cation,)j
-(similar)d(to)h Ft(EXIT)e Fu(and)g Ft(DEBUG)p Fu(.)54
-b(Commands)34 b(sp)s(eci\014ed)g(with)h(an)330 869 y
-Ft(RETURN)k Fu(trap)i(are)g(executed)h(b)s(efore)e(execution)i(resumes)
-e(after)h(a)g(shell)g(function)g(or)g(a)g(shell)330 978
-y(script)36 b(executed)g(with)g Ft(.)f Fu(or)h Ft(source)e
-Fu(returns.)56 b(The)35 b Ft(RETURN)f Fu(trap)i(is)g(not)g(inherited)f
-(b)m(y)h(shell)330 1088 y(functions)k(unless)h(the)g(function)f(has)h
-(b)s(een)f(giv)m(en)i(the)f Ft(trace)e Fu(attribute)j(or)e(the)h
-Ft(functrace)330 1198 y Fu(option)31 b(has)f(b)s(een)g(enabled)g(using)
-g(the)g Ft(shopt)f Fu(builtin.)225 1329 y Fq(\017)60
-b Fu(The)30 b(Bash)g Ft(type)f Fu(builtin)h(is)g(more)g(extensiv)m(e)i
-(and)d(giv)m(es)j(more)e(information)h(ab)s(out)f(the)g(names)330
+(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(51\).)225 1570 y Fq(\017)60 b Fu(The)27 b(Bash)h
+(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(44\).)225 1921 y Fq(\017)60
+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)g(to)i
-(manipulate)f(it)h(\(see)f(Section)h(6.8)g([The)f(Directory)h(Stac)m
-(k],)i(page)d(97\).)56 b(Bash)35 b(also)330 2140 y(mak)m(es)c(the)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(98\).)225
+([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(100\);)h(the)f(SVR4.2)g(shell)g(restricted)g(mo)s
+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(108\))g(or)g
+(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)
@@ -19919,7 +20582,7 @@ 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(86.)150 4128 y Fs(B.1)67 b(Implemen)l(tation)48
+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
@@ -19940,10 +20603,10 @@ 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: 166 172
-TeXDict begin 166 171 bop 150 -116 a Fu(App)s(endix)29
+%%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(166)225 299 y Fq(\017)60
+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)
@@ -19974,8 +20637,8 @@ 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: 167 173
-TeXDict begin 167 172 bop 3614 -116 a Fu(167)150 299
+%%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
@@ -20056,10 +20719,10 @@ b(\\In)m(v)-5 b(arian)m(t)27 b(Sections")g(are)f(certain)g(Secondary)g
 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: 168 174
-TeXDict begin 168 173 bop 150 -116 a Fu(App)s(endix)29
+%%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(168)330 299 y(under)26 b(this)i(License.)40 b(If)27
+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
@@ -20150,10 +20813,10 @@ b(Disclaimers)f(are)g(considered)e(to)330 4970 y(b)s(e)k(included)g(b)m
 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: 169 175
-TeXDict begin 169 174 bop 150 -116 a Fu(App)s(endix)29
+%%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(169)330 299 y(Y)-8 b(ou)39 b(ma)m(y)f(cop)m(y)h(and)e(distribute)h
+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
@@ -20243,10 +20906,10 @@ 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
 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: 170 176
-TeXDict begin 170 175 bop 150 -116 a Fu(App)s(endix)29
+%%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(170)510 299 y(b)s(e)31 b(listed)h(in)f(the)g(History)h(section)g(of)g
+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
@@ -20325,10 +20988,10 @@ b(arran)m(t)m(y)32 b(Disclaimers.)330 5121 y(If)h(the)g(Mo)s(di\014ed)g
 (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: 171 177
-TeXDict begin 171 176 bop 150 -116 a Fu(App)s(endix)29
+%%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(171)330 299 y(titles)37 b(to)f(the)f(list)h(of)g(In)m(v)-5
+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
@@ -20413,10 +21076,10 @@ 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
 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: 172 178
-TeXDict begin 172 177 bop 150 -116 a Fu(App)s(endix)29
+%%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(172)199 299 y(7.)61 b(A)m(GGREGA)-8 b(TION)32 b(WITH)e(INDEPENDENT)h
+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
@@ -20501,10 +21164,10 @@ 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
 (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: 173 179
-TeXDict begin 173 178 bop 150 -116 a Fu(App)s(endix)29
+%%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(173)154 299 y(10.)61 b(FUTURE)30 b(REVISIONS)f(OF)i(THIS)e(LICENSE)
+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
@@ -20568,10 +21231,10 @@ f(of)g(that)330 2944 y(license)31 b(published)e(b)m(y)h(that)h(same)g
 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: 174 180
-TeXDict begin 174 179 bop 150 -116 a Fu(App)s(endix)29
+%%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(174)150 299 y Fs(ADDENDUM:)45 b(Ho)l(w)h(to)f(use)g(this)h(License)f
+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
@@ -20606,1230 +21269,1246 @@ y(If)23 b(y)m(our)h(do)s(cumen)m(t)f(con)m(tains)i(non)m(trivial)g
 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: 175 181
-TeXDict begin 175 180 bop 3614 -116 a Fu(175)150 299
+%%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(44)146 1163 y Fs(:)150 1280 y Fe(:)19 b Fc(:)13
+(:)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(44)146
+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(48)146 1881 y Fs(A)150 1998 y Fe(alias)9
+(:)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(51)146 2239 y
+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(108)150 2443 y Fe(bind)11 b Fc(:)j(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g
+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(51)150 2531 y Fe(break)9 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)h(:)f(:)g
+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(45)150 2618 y Fe(builtin)f Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g
+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(53)146 2859 y Fs(C)150 2976 y Fe(caller)6 b Fc(:)15
+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(53)150 3063 y Fe(cd)c Fc(:)e(:)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(45)150 3151 y Fe(command)22
+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(53)150 3238 y Fe(compgen)18
+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(139)150 3326 y Fe(complete)16
+(:)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(140)150 3413 y Fe(compopt)18 b Fc(:)d(:)e(:)g(:)h(:)
+(:)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(143)150 3501 y Fe(continue)18 b Fc(:)d(:)e(:)g(:)g(:)g(:)h(:)f(:)g
+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(45)146 3741 y Fs(D)150 3858 y Fe(declare)22 b Fc(:)13
+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(53)150 3946 y Fe(dirs)11 b Fc(:)j(:)f(:)g(:)h(:)f
-(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)
-g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g
-(:)g(:)h(:)25 b Fb(97)150 4033 y Fe(disown)d Fc(:)13
-b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f
-(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)
-g(:)g(:)g(:)36 b Fb(110)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(55)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(56)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(45)150 4653 y Fe(exec)11 b Fc(:)j(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g
+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(46)150 4741 y Fe(exit)11 b Fc(:)j(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g
+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(46)150 4828 y Fe(export)6 b Fc(:)15 b(:)e(:)g(:)g(:)g(:)g(:)g(:)g
+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(46)146 5080 y Fs(F)150 5197 y Fe(fc)14 b Fc(:)g(:)f(:)g(:)g(:)g(:)
+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(147)150 5284 y Fe(fg)14 b Fc(:)g(:)f(:)g(:)g(:)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(108)2021 871 y Fs(G)2025 988 y Fe(getopts)22
+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(46)2021 1250 y Fs(H)2025
+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(47)2025 1457 y Fe(help)11 b Fc(:)j(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g
+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(56)2025 1544 y Fe(history)18 b Fc(:)d(:)e(:)g(:)g(:)g(:)h(:)f(:)g
+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(147)2021 1806 y Fs(J)2025 1924 y Fe(jobs)9 b Fc(:)14
+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(108)2021 2186 y Fs(K)2025
+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(109)2021 2554 y Fs(L)2025 2672 y Fe(let)14 b Fc(:)f(:)g(:)h(:)f(:)
+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(56)2025 2760 y Fe(local)9 b Fc(:)14
+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(57)2025 2848 y Fe(logout)6
+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(57)2021 3110 y Fs(M)2025
+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(57)2021
-3489 y Fs(P)2025 3608 y Fe(popd)11 b Fc(:)j(:)f(:)g(:)g(:)g(:)h(:)f(:)g
-(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)
-g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)26
-b Fb(98)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(58)2025 3784 y Fe(pushd)9 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h
-(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)
-g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)23
-b Fb(98)2025 3871 y Fe(pwd)14 b Fc(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g
+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(47)2021 4133 y Fs(R)2025 4251 y Fe(read)11 b Fc(:)j(:)f(:)g(:)g(:)
+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(58)2025 4339 y Fe(readarray)15 b
+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(60)2025 4427 y Fe(readonly)18 b Fc(:)d(:)e(:)g(:)g(:)g
+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(47)2025 4515 y Fe(return)6 b Fc(:)14 b(:)f(:)h(:)f(:)g(:)g(:)g(:)g
+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(48)2021 4765 y Fs(S)2025 4884 y Fe(set)14 b Fc(:)f(:)g(:)h(:)f(:)g
+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(62)2025 4972 y Fe(shift)9 b Fc(:)14
+(:)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(48)2025 5060 y Fe(shopt)9
+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(66)2025 5148
+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(60)2025
+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(110)p eop end
-%%Page: 176 182
-TeXDict begin 176 181 bop 150 -116 a Fu(App)s(endix)29
-b(D:)i(Indexes)2623 b(176)146 294 y Fs(T)150 410 y Fe(test)11
+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(48)150 497
+(:)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(50)150
+(:)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(50)150 671 y Fe(type)11 b Fc(:)j(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g
+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(60)150 758 y Fe(typeset)d Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)
+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(61)146 1003 y Fs(U)150 1119 y Fe(ulimit)6 b Fc(:)15
+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(61)150 1206 y Fe(umask)9
+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(51)150 1293 y
+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(62)150 1380 y
+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(51)2021
+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(109)150 2133 y Fs(D.2)68 b(Index)45 b(of)g(Shell)g(Reserv)l(ed)h
-(W)-11 b(ords)146 2704 y(!)150 2820 y Fe(!)21 b Fc(:)13
-b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g
-(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)
-g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)36 b Fb(8)146
+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(13)146 3414 y Fs(])150 3530 y Fe(]])16 b
+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(13)146
+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(15)146 4125 y Fa(})150 4241 y Fe(})19
+(:)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(15)146 4475 y Fs(C)150 4591 y Fe(case)11 b Fc(:)j(:)f(:)g(:)h(:)f(:)
+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(11)146 4825 y Fs(D)150 4941 y Fe(do)16
+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(10)150
+(:)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(10)146 5261 y Fs(E)150 5377 y Fe(elif)11 b Fc(:)j(:)f(:)g(:)h(:)f
+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(11)150 5465 y Fe(else)11 b Fc(:)j(:)f(:)g(:)h(:)f(:)
+(:)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(11)150 5552 y Fe(esac)11 b Fc(:)j(:)f(:)g(:)h(:)f(:)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(11)2021 2703 y Fs(F)2025 2836 y Fe(fi)16
+(:)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(11)2025
+(:)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(10)2025 3015 y Fe(function)18 b Fc(:)d(:)e(:)g(:)g(:)g(:)g(:)h(:)f
+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(18)2021 3359 y Fs(I)2025 3491 y Fe(if)16 b Fc(:)e(:)f(:)g(:)g(:)g(:)
+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(11)2025 3578 y Fe(in)16 b Fc(:)e(:)f(:)g(:)g(:)
+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(11)2021 3921 y Fs(S)2025
+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(12)2021 4392 y Fs(T)2025 4524 y Fe(then)11 b Fc(:)j(:)f(:)g(:)g(:)g
+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(11)2025 4611 y Fe(time)13 b Fc(:)h(:)f(:)g(:)g(:)h
-(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)
-g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g
-(:)g(:)g(:)h(:)28 b Fb(8)2021 4954 y Fs(U)2025 5081 y
-Fe(until)9 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g
-(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)
-h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)23 b Fb(10)2021
-5425 y Fs(W)2025 5552 y Fe(while)9 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g
-(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)
-f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)23
-b Fb(10)p eop end
-%%Page: 177 183
-TeXDict begin 177 182 bop 150 -116 a Fu(App)s(endix)29
-b(D:)i(Indexes)2623 b(177)150 299 y Fs(D.3)68 b(P)l(arameter)47
-b(and)d(V)-11 b(ariable)46 b(Index)146 955 y(!)150 1073
+(:)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(22)146 1327 y Fs(#)150 1445 y Fe(#)19 b Fc(:)13
+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(22)146
-1701 y Fs($)150 1820 y Fe($)19 b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g
+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(22)150 1909 y Fe($!)16 b Fc(:)e(:)f(:)g(:)g(:)g(:)g
+(:)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(22)150 1997 y Fe($#)16 b Fc(:)e(:)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(22)150 2085 y Fe($$)16 b Fc(:)e(:)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(22)150 2173 y Fe($*)16
+(:)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(22)150
-2261 y Fe($-)16 b Fc(:)e(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)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(22)150 2350 y Fe($?)16 b Fc(:)e(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)
+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(22)150 2438 y Fe($@)16 b Fc(:)e(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)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(22)150 2526 y Fe($_)16 b Fc(:)e(:)f(:)g(:)g(:)g(:)g(:)h(:)f
+(:)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(73)150 2613 y Fe($0)16 b Fc(:)e(:)f(:)g(:)g(:)g(:)g(:)h
+(:)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(22)146 2876 y Fs(*)150 2994 y Fe(*)19
+(:)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(22)146 3248 y Fs({)150 3366 y Fe(-)19 b Fc(:)13 b(:)g(:)g(:)h(:)f(:)
+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(22)146 3620 y Fs(?)150 3738
+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(22)146 3992 y Fs(@)150 4110 y Fe(@)19 b Fc(:)13
+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(22)p
-156 4364 41 6 v 150 4482 a Fe(_)19 b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g
+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(73)146 4736 y Fs(0)150 4854 y
+(:)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(22)146 5108 y Fs(A)150 5226 y Fe(auto_resume)8 b
+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(110)2021 954 y Fs(B)2025 1074 y Fe(BASH)11 b
+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(74)2025 1163
+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(74)2025 1251 y Fe(BASH_ARGC)15
+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(74)2025 1340 y Fe(BASH_ARGV)15 b Fc(:)g(:)f(:)f(:)g
+(:)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(74)2025 1429 y Fe(BASH_ARGV0)13 b Fc(:)i(:)e(:)g(:)g(:)h(:)f(:)g
+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(75)2025
+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(75)2025 1606
+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(75)2025 1695 y Fe(BASH_COMPAT)10
+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(75)2025 1783 y Fe(BASH_ENV)18 b Fc(:)d(:)e(:)g(:)g(:)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(75)2025 1872 y Fe(BASH_EXECUTION_STRING)24 b Fc(:)13
+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(75)2025 1960 y Fe(BASH_LINENO)10
+(:)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(75)2025 2049 y Fe(BASH_LOADABLES_PATH)7 b
+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(76)2025
+(:)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(76)2025 2226 y Fe(BASH_SOURCE)10
+(:)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(76)2025 2315 y Fe(BASH_SUBSHELL)g Fc(:)13
+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(76)2025 2403 y Fe(BASH_VERSINFO)25 b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g
+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(76)2025 2492
+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(76)2025 2581 y Fe(BASH_XTRACEFD)j
+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(76)2025 2669 y Fe(BASHOPTS)18 b Fc(:)d(:)e(:)g(:)g(:)g(:)g(:)h(:)f
+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(74)2025 2758 y Fe(BASHPID)22 b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g
+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(74)2025 2847 y Fe(bell-style)11 b Fc(:)k(:)e(:)g(:)g(:)g(:)h(:)f
+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(115)2025
+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(115)2025 3022 y Fe(blink-matching-paren)24 b Fc(:)13
+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(115)2021 3297 y Fs(C)2025
+(:)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(73)2025 3506 y Fe(CHILD_MAX)15 b Fc(:)g(:)f(:)f(:)g(:)g(:)g(:)g(:)g
+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(77)2025
+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(115)2025 3683 y Fe(colored-stats)h Fc(:)13 b(:)g(:)g(:)g(:)h(:)f
+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(115)2025 3772 y Fe(COLUMNS)22
+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(77)2025 3860 y Fe(comment-begin)23
+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(115)2025 3949 y Fe(COMP_CWORD)13 b Fc(:)i(:)e(:)g(:)g(:)h(:)f(:)g
+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(77)2025
+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(77)2025 4126
+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(77)2025 4215 y Fe(COMP_POINT)13
+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(77)2025 4303 y Fe(COMP_TYPE)15 b Fc(:)g(:)f(:)f(:)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(77)2025 4392 y Fe(COMP_WORDBREAKS)17 b Fc(:)g(:)c(:)g(:)g(:)g(:)g
+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(77)2025 4481 y Fe(COMP_WORDS)13
+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(77)2025 4569 y Fe(completion-display-width)9
+(:)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(115)2025 4658 y Fe(completion-ignore-case)14
+(:)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(116)2025 4747 y Fe(completion-map-case)d
+(:)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(116)2025 4835
+(:)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(116)2025 4924
+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(116)2025 5012 y Fe(COMPREPLY)15 b Fc(:)g(:)f(:)f(:)g(:)g(:)g(:)g
+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(78)2025 5101 y Fe(convert-meta)25 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)
+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(116)2025 5188
+(:)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(78)p
+g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)21 b Fb(83)p
 eop end
-%%Page: 178 184
-TeXDict begin 178 183 bop 150 -116 a Fu(App)s(endix)29
-b(D:)i(Indexes)2623 b(178)146 294 y Fs(D)150 416 y Fe(DIRSTACK)18
+%%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(78)150 503 y Fe(disable-completion)7
+(:)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(116)146
-791 y Fs(E)150 913 y Fe(echo-control-characters)12 b
+(:)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(116)150 1002 y Fe(editing-mode)f
+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(116)150 1092 y Fe(emacs-mode-string)10 b Fc(:)17
+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(117)150 1181
+(:)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(78)150
-1270 y Fe(enable-bracketed-paste)14 b Fc(:)k(:)c(:)f(:)g(:)g(:)g(:)g(:)
-g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)29
-b Fb(117)150 1359 y Fe(enable-keypad)23 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g
+(:)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(117)150 1449 y Fe(ENV)14
+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(78)150
-1538 y Fe(EPOCHREALTIME)d Fc(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h
+(:)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(78)150 1627 y Fe(EPOCHSECONDS)8
+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(78)150 1716 y Fe(EUID)11 b Fc(:)j(:)f(:)g(:)h(:)f(:)g(:)g(:)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(78)150 1806 y Fe(EXECIGNORE)13 b Fc(:)i(:)e(:)h(:)f(:)g(:)g(:)g(:)
+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(78)150
-1893 y Fe(expand-tilde)e Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)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(117)146 2180 y Fs(F)150 2303
+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(79)150
-2392 y Fe(FIGNORE)i Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h
+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(79)150
-2481 y Fe(FUNCNAME)18 b Fc(:)d(:)e(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)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(79)150 2568
+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(79)146 2844 y
-Fs(G)150 2967 y Fe(GLOBIGNORE)13 b Fc(:)i(:)e(:)h(:)f(:)g(:)g(:)g(:)g
+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(79)150
-3054 y Fe(GROUPS)6 b Fc(:)15 b(:)e(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)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(79)146 3330 y Fs(H)150 3452 y Fe(histchars)15 b Fc(:)h(:)d(:)g(:)g
+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(79)150 3542 y Fe(HISTCMD)22 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)
+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(79)150 3631 y Fe(HISTCONTROL)10 b Fc(:)16 b(:)d(:)g(:)g(:)h(:)f(:)
+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(80)150
-3720 y Fe(HISTFILE)18 b Fc(:)d(:)e(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)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(80)150 3809
+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(80)150 3899 y Fe(HISTIGNORE)13
+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(80)150 3988 y Fe(history-preserve-point)14
+(:)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(117)150 4077 y Fe(history-size)c
+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(117)150 4166 y Fe(HISTSIZE)18 b Fc(:)d(:)e(:)g(:)g(:)g(:)h(:)f(:)g
+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(80)150 4256 y Fe(HISTTIMEFORMAT)23 b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f
+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(80)150 4345 y Fe(HOME)11
+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(73)150 4434
+(:)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(117)150
-4523 y Fe(HOSTFILE)18 b Fc(:)d(:)e(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g
+(:)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(81)150 4613
+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(81)150 4700 y
+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(81)2021 294 y Fs(I)2025
+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(73)2025 510 y Fe(IGNOREEOF)15 b Fc(:)g(:)f(:)f(:)g(:)g(:)g(:)g(:)g
+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(81)2025
+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(118)2025 691 y Fe(INPUTRC)c
+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(81)2025 781 y Fe(INSIDE_EMACS)8
+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(81)2025 868 y Fe(isearch-terminators)k Fc(:)13
+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(118)2021 1167 y Fs(K)2025
+(:)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(118)2021
-1601 y Fs(L)2025 1727 y Fe(LANG)11 b Fc(:)j(:)f(:)g(:)g(:)g(:)h(:)f(:)g
-(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)
-g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)26
-b Fb(81)2025 1817 y Fe(LC_ALL)6 b Fc(:)14 b(:)f(:)h(:)f(:)g(:)g(:)g(:)g
-(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)
-h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)21
-b Fb(81)2025 1907 y Fe(LC_COLLATE)13 b Fc(:)i(:)e(:)g(:)g(:)h(:)f(:)g
+g(:)g(:)g(:)g(:)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(81)2025
+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(81)2025 2088
+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(7,)26 b(81)2025 2178 y Fe(LC_NUMERIC)13
+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(82)2025 2269 y Fe(LC_TIME)22 b Fc(:)13
+(:)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(82)2025 2359 y Fe(LINENO)6 b Fc(:)14
+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(82)2025 2446 y Fe(LINES)9
+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(82)2021 2746
+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(82)2025 2962 y Fe(MAIL)11 b Fc(:)j(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g
+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(73)2025 3052 y Fe(MAILCHECK)15 b Fc(:)g(:)f(:)f(:)g(:)g(:)g(:)g(:)
+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(82)2025
+(:)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(73)2025 3233
+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(82)2025 3323
+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(118)2025 3414 y Fe(mark-symlinked-directories)27
+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(119)2025 3504 y Fe(match-hidden-files)7 b Fc(:)17
+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(119)2025 3594
+(:)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(119)2025 3681 y Fe(meta-flag)13
+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(118)2021 3992 y Fs(O)2025 4118 y Fe(OLDPWD)6
+(:)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(82)2025 4208 y Fe(OPTARG)6
+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(73)2025 4299 y Fe(OPTERR)6
+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(82)2025 4389 y Fe(OPTIND)6
+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(73)2025 4480 y Fe(OSTYPE)6
+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(82)2025 4567 y Fe(output-meta)8
+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(119)p eop end
-%%Page: 179 185
-TeXDict begin 179 184 bop 150 -116 a Fu(App)s(endix)29
-b(D:)i(Indexes)2623 b(179)146 294 y Fs(P)150 410 y Fe(page-completions)
+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(119)150
+(:)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(73)150 584 y Fe(PIPESTATUS)13 b Fc(:)i(:)e(:)h(:)f(:)g(:)g(:)g(:)g
+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(82)150
+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(82)150 758 y Fe(PPID)11 b Fc(:)j(:)f(:)g(:)h(:)f(:)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(82)150 846 y Fe(PROMPT_COMMAND)e Fc(:)13
+(:)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(82)150 933 y Fe(PROMPT_DIRTRIM)23 b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f
+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(83)150 1020 y Fe(PS0)14
+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(83)150
+(:)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(73)150 1194 y Fe(PS2)14 b Fc(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h
+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(73)150 1281 y Fe(PS3)14 b Fc(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h
+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(83)150 1369 y Fe(PS4)14 b Fc(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h
+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(83)150 1456 y Fe(PWD)14 b Fc(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h
+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(83)146 1689 y Fs(R)150 1804 y Fe(RANDOM)6 b Fc(:)15
+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(83)150 1892 y Fe(READLINE_LINE)25
+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(83)150 1979 y Fe(READLINE_MARK)25 b Fc(:)13 b(:)h(:)f(:)g(:)g(:)g
+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(:)g(:)g(:)37 b Fb(83)150 2066 y
-Fe(READLINE_POINT)23 b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)
-g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f
-(:)g(:)g(:)34 b Fb(83)150 2153 y Fe(REPLY)9 b Fc(:)14
+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(83)150 2240 y Fe(revert-all-at-newline)
+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(119)146 2473 y Fs(S)150
-2589 y Fe(SECONDS)22 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)
-h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g
-(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)35 b Fb(83)150
-2676 y Fe(SHELL)9 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g
-(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)
-h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)23
-b Fb(83)150 2763 y Fe(SHELLOPTS)15 b Fc(:)h(:)d(:)g(:)g(:)g(:)g(:)g(:)h
-(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)
-g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)30 b Fb(83)150
-2851 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(84)150 2938 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(119)150 3025 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(119)150 3112 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(120)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(120)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(84)2021 669 y Fs(T)2025 798 y Fe(TEXTDOMAIN)15 b
-Fc(:)g(:)e(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g
-(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)
-f(:)g(:)30 b Fb(7)2025 889 y Fe(TEXTDOMAINDIR)7 b Fc(:)16
-b(:)d(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g
-(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)23
-b Fb(7)2025 981 y Fe(TIMEFORMAT)13 b Fc(:)i(:)e(:)g(:)g(:)h(:)f(:)g(:)g
+(:)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(:)g(:)g(:)g(:)g(:)h(:)27 b Fb(84)2025
-1072 y Fe(TMOUT)9 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)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(84)2025 1159 y Fe(TMPDIR)6 b Fc(:)14 b(:)f(:)h(:)f(:)g(:)g(:)g(:)g
+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(85)2021 1481 y Fs(U)2025 1606 y Fe(UID)14 b Fc(:)f(:)g(:)h(:)f(:)g
+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(85)2021 1928 y Fs(V)2025 2057
+(:)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(120)2025 2148 y Fe(vi-ins-mode-string)7 b Fc(:)17
+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(120)2025 2235
+(:)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(120)150 3751 y Fs(D.4)68 b(F)-11 b(unction)44
-b(Index)146 4237 y(A)150 4354 y Fe(abort)27 b(\(C-g\))15
+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(135)150 4442 y Fe(accept-line)e(\(Newline)g(or)e(Return\))12
+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(128)150 4529 y Fe(alias-expand-line)i(\(\))9 b Fc(:)14
+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(137)146 4784 y Fs(B)150
-4902 y Fe(backward-char)29 b(\(C-b\))12 b Fc(:)i(:)f(:)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(127)150 4989 y Fe(backward-delete-char)k(\(Rubout\))22
+(:)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(130)150 5077 y Fe(backward-kill-line)30 b(\(C-x)c(Rubout\))e
+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(131)150 5165 y Fe(backward-kill-word)30 b(\(M-DEL\))11
+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(131)150 5252 y Fe(backward-word)j(\(M-b\))12
+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(127)150 5340
-y Fe(beginning-of-history)k(\(M-<\))11 b Fc(:)j(:)f(:)h(:)f(:)g(:)g(:)g
-(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)26 b Fb(128)2025
-4206 y Fe(beginning-of-line)j(\(C-a\))20 b Fc(:)13 b(:)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(127)2025 4294 y Fe(bracketed-paste-begin)c(\(\))16
+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(130)2021 4589 y Fs(C)2025 4713 y Fe
+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(134)2025 4802
+(:)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(131)2025 4892 y Fe(character-search)29 b(\(C-]\))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(135)2025 4982 y Fe
+(:)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(135)2025 5071
+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(128)2025 5161 y Fe(clear-screen)28 b(\(C-l\))14
+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(128)2025
-5250 y Fe(complete)e(\(TAB\))7 b Fc(:)15 b(:)e(:)g(:)g(:)g(:)h(:)f(:)g
-(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)
-g(:)g(:)g(:)h(:)f(:)22 b Fb(133)2025 5340 y Fe(complete-command)29
-b(\(M-!\))22 b Fc(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)
-g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)36 b Fb(134)p eop end
-%%Page: 180 186
-TeXDict begin 180 185 bop 150 -116 a Fu(App)s(endix)29
-b(D:)i(Indexes)2623 b(180)150 264 y Fe(complete-filename)29
+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(133)150 353 y Fe(complete-hostname)
+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(134)150 442 y Fe
+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(134)150 531
+(:)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(133)150 621 y Fe(complete-variable)c(\(M-$\))20
+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(134)150 710 y Fe(copy-backward-word)d(\(\))7
+(:)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(132)150 799 y Fe(copy-forward-word)
+(:)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(132)150
-887 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(132)146 1175 y Fs(D)150 1298 y Fe(dabbrev-expand)29
+(:)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(134)150 1387 y Fe(delete-char)c(\(C-d\))17 b Fc(:)d(:)f(:)g(:)h(:)
+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(130)150 1476 y Fe(delete-char-or-list)e
+(:)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(133)150 1566 y Fe
+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(132)150
-1655 y Fe(digit-argument)j(\()p Fd(M-0)p Fe(,)e Fd(M-1)p
+(:)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(132)150 1744 y Fe(display-shell-version)k(\(C-x)d(C-v\))c
+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(136)150 1825 y Fe(do-lowercase-version)30 b(\(M-A,)227
-1912 y(M-B,)c(M-)p Fd(x)p Fe(,)h(...\))10 b Fc(:)k(:)f(:)g(:)g(:)g(:)g
+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(135)150 2001 y Fe(downcase-word)k(\(M-l\))
+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(131)150 2090
+(:)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(136)150 2180 y Fe(dump-macros)c(\(\))7 b Fc(:)14
+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(136)150 2269 y Fe(dump-variables)29 b(\(\))17 b
+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(136)150
-2356 y Fe(dynamic-complete-history)f(\(M-TAB\))13 b Fc(:)i(:)e(:)g(:)g
-(:)g(:)g(:)g(:)g(:)h(:)27 b Fb(134)146 2645 y Fs(E)150
-2767 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(137)150 2857
+(:)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(134)150 2946 y Fd(end-of-file)g Fe(\(usually)g(C-d\))21
+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(130)150 3035 y Fe(end-of-history)29 b(\(M->\))9
+(:)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(128)150 3124 y
+(:)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(127)150 3212 y Fe(exchange-point-and-mark)f(\(C-x)26
+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(135)146 3500 y Fs(F)150 3623 y Fe(forward-backward-delete-char)g
-(\(\))15 b Fc(:)f(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)30
-b Fb(130)150 3712 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(127)150 3801 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(128)150 3889 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(127)146 4167
-y Fs(G)150 4289 y Fe(glob-complete-word)h(\(M-g\))16
+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(136)150 4379 y Fe(glob-expand-word)e(\(C-x)e(*\))c
+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(136)150 4466 y Fe(glob-list-expansions)30
+(:)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(136)2021 294 y Fs(H)2025 422 y Fe
+(:)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(137)2025 513 y Fe(history-expand-line)i
+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(136)2025 604 y Fe(history-search-backward)j
+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(129)2025 695 y Fe(history-search-forward)k(\(\))13
+(:)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(129)2025 786 y Fe(history-substring-search-backw)q(ard)k
-(\(\))20 b Fc(:)13 b(:)g(:)g(:)g(:)35 b Fb(129)2025 874
+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(129)2021 1200 y Fs(I)2025
+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(136)2025 1420 y Fe(insert-completions)29 b(\(M-*\))16
+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(133)2025 1507 y Fe(insert-last-argument)f(\(M-.)c(or)g
+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(137)2021 1834 y Fs(K)2025 1962 y Fe(kill-line)27
+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(131)2025 2053 y Fe(kill-region)28 b(\(\))7 b Fc(:)14
+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(132)2025 2144 y Fe(kill-whole-line)29 b(\(\))14
+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(131)2025
+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(131)2021 2548 y Fs(M)2025 2676 y
+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(137)2025 2767 y Fe(menu-complete)28
+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(133)2025 2854 y Fe(menu-complete-backward)c(\(\))13
+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(133)2021 3181 y Fs(N)2025 3309 y Fe(next-history)g(\(C-n\))
+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(128)2025
+(:)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(128)2025 3472 y Fe(non-incremental-forward-)2102
+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(129)2025 3647 y Fe(non-incremental-reverse-)2102
+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(128)2021 4070 y Fs(O)2025 4198 y Fe(operate-and-get-next)30
+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(129)2025 4285 y Fe(overwrite-mode)j(\(\))17
+(:)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(131)p
+g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)32 b Fb(137)p
 eop end
-%%Page: 181 187
-TeXDict begin 181 186 bop 150 -116 a Fu(App)s(endix)29
-b(D:)i(Indexes)2623 b(181)146 294 y Fs(P)150 411 y Fe
+%%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(134)150 499 y Fe
+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(133)150
+(:)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(133)150 674
+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(134)150 762 y Fe
+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(133)150 849 y Fe
+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(134)150 937 y Fe(prefix-meta)28
+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(135)150 1025 y Fe(previous-history)d(\(C-p\))23
+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(128)150 1112 y Fe(previous-screen-line)30
+(:)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(127)150 1199 y Fe
+(:)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(134)146
-1453 y Fs(Q)150 1570 y Fe(quoted-insert)c(\(C-q)d(or)g(C-v\))8
+(:)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(130)146 1824 y Fs(R)150 1941 y Fe(re-read-init-file)29
+(:)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(135)150 2029 y Fe(redraw-current-line)g(\(\))22
+(:)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(128)150 2117 y Fe(reverse-search-history)31
+(:)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(128)150 2204 y Fe(revert-line)28 b(\(M-r\))17
+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(135)146
-2447 y Fs(S)150 2565 y Fe(self-insert)c(\(a,)e(b,)g(A,)g(1,)h(!,)f
+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(130)150 2652 y Fe(set-mark)g(\(C-@\))7 b Fc(:)15
+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(135)150 2740 y Fe(shell-backward-kill-word)31 b(\(\))8
+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(131)150 2828 y Fe(shell-backward-word)30 b(\(M-C-b\))8
+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(127)150 2915 y Fe(shell-expand-line)29 b(\(M-C-e\))13
+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(136)150 3003 y Fe(shell-forward-word)i(\(M-C-f\))11
+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(127)150 3091 y Fe(shell-kill-word)j(\(M-C-d\))20
+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(131)150 3178 y Fe(shell-transpose-words)d
+(:)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(132)2025 264 y Fe(skip-csi-sequence)29 b(\(\))9
+(:)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(135)2025 351 y
-Fe(start-kbd-macro)29 b(\(C-x)d(\(\))8 b Fc(:)14 b(:)f(:)g(:)h(:)f(:)g
-(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)23
-b Fb(134)2021 819 y Fs(T)2025 970 y Fe(tilde-expand)28
+(:)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(135)2025 1068 y Fe(transpose-chars)g(\(C-t\))7 b
+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(130)2025 1155 y Fe(transpose-words)
+(:)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(130)2021
-1634 y Fs(U)2025 1784 y Fe(undo)k(\(C-_)h(or)f(C-x)g(C-u\))10
+(:)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(135)2025 1883 y Fe
+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(132)2025 1981 y Fe(unix-filename-rubout)30 b(\(\))19
+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(132)2025 2080 y Fe(unix-line-discard)29
+(:)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(131)2025 2178 y Fe
+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(132)2025 2265 y Fe(upcase-word)28 b(\(M-u\))17 b
+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(131)2021
-2744 y Fs(Y)2025 2894 y Fe(yank)26 b(\(C-y\))18 b Fc(:)c(:)f(:)g(:)h(:)
+(:)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(132)2025 2993 y Fe(yank-last-arg)28 b(\(M-.)f(or)f(M-_\))8
+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(129)2025 3091 y Fe(yank-nth-arg)28 b(\(M-C-y\))9
+(:)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(129)2025 3178
+(:)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(132)150 3927 y Fs(D.5)68 b(Concept)45
-b(Index)146 4520 y(A)150 4646 y Fb(alias)27 b(expansion)7
-b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h
-(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)21
-b Fb(94)150 4736 y(arithmetic)26 b(ev)l(aluation)d Fc(:)13
+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(93)150 4826 y(arithmetic)26
+(:)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(31)150 4917 y(arithmetic,)h(shell)6 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)
+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(93)150 5004
-y(arra)n(ys)h Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g
-(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)
-h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)35 b Fb(95)2021
-4520 y Fs(B)2025 4644 y Fb(bac)n(kground)13 b Fc(:)f(:)h(:)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(107)2025
-4733 y(Bash)e(con\014guration)11 b Fc(:)j(:)f(:)g(:)g(:)g(:)g(:)h(:)f
+(:)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(152)2025 4823 y(Bash)g(installation)9
+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(152)2025 4913 y(Bourne)i(shell)20 b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f
+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 5002 y(brace)26 b(expansion)9 b Fc(:)k(:)g(:)h(:)f(:)g(:)g(:)
+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(23)2025 5089 y(builtin)15
+(:)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: 182 188
-TeXDict begin 182 187 bop 150 -116 a Fu(App)s(endix)29
-b(D:)i(Indexes)2623 b(182)146 294 y Fs(C)150 415 y Fb(command)26
+%%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(112)150 503 y(command)26 b(execution)12 b Fc(:)h(:)g(:)g(:)g(:)g
+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(39)150 592 y(command)g(expansion)c
+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(39)150
+(:)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(146)150 770 y(command)26 b(searc)n(h)16
+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(39)150 859 y(command)c(substitution)21 b Fc(:)13
+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(31)150 947 y(command)26
-b(timing)13 b Fc(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)
-g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g
-(:)28 b Fb(8)150 1036 y(commands,)e(comp)r(ound)c Fc(:)13
+(:)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(10)150 1125 y(commands,)26
+(:)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(11)150 1214 y(commands,)h(grouping)15 b Fc(:)f(:)f(:)g(:)g(:)g(:)g
+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(15)150 1302 y(commands,)d(lists)12
-b Fc(:)j(:)e(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)
-g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)27
-b Fb(9)150 1391 y(commands,)f(lo)r(oping)e Fc(:)13 b(:)g(:)g(:)g(:)h(:)
-f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g
-(:)g(:)g(:)g(:)g(:)37 b Fb(10)150 1480 y(commands,)26
-b(pip)r(elines)18 b Fc(:)c(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g
-(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)33
-b Fb(8)150 1569 y(commands,)26 b(shell)c Fc(:)13 b(:)g(:)h(:)f(:)g(:)g
-(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)
-g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)36 b Fb(8)150 1657 y(commands,)26
+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(8)150 1746 y(commen)n(ts,)26 b(shell)13 b Fc(:)i(:)e(:)g(:)g(:)g
+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(7)150
+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(104)150 1924 y(Compatibilit)n(y)i(Mo)r(de)22
+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(104)150
+(:)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(139)150 2101 y(con\014guration)22 b Fc(:)13
+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(152)150 2190 y(con)n(trol)26 b(op)r(erator)8 b Fc(:)15
+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(15)146 2553 y Fs(D)150 2672 y Fb(directory)26 b(stac)n(k)11
-b Fc(:)i(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)
-g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)26
-b Fb(97)146 2948 y Fs(E)150 3069 y Fb(editing)g(command)g(lines)17
+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(112)150 3158 y(en)n(vironmen)n(t)18
+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(41)150 3247 y(ev)l(aluation,)26 b(arithmetic)12
+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(93)150 3335
+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(149)150 3424 y(execution)26 b(en)n(vironmen)n(t)17
+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(40)150 3513
+(:)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(41)150 3602 y(expansion)9
+(:)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(22)150 3691 y(expansion,)i(arithmetic)18
+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(31)150 3779
+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(23)150 3868 y(expansion,)c(\014lename)18
+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(33)150
+(:)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(25)150 4046 y(expansion,)26 b(pathname)7
+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(33)150
+(:)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(24)150 4223 y(expressions,)f(arithmetic)13
+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(93)150 4310 y(expressions,)g
+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(91)2021
-294 y Fs(F)2025 415 y Fb(\014eld)21 b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g
+g(:)g(:)g(:)g(:)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 504 y(\014lename)21 b Fc(:)14 b(:)f(:)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 593 y(\014lename)26 b(expansion)11 b Fc(:)i(:)h(:)f(:)g(:)g
+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(33)2025 682 y(foreground)9
+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(107)2025 769 y(functions,)i(shell)9 b
+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(18)2021 1048 y Fs(H)2025 1170 y Fb(history)h(builtins)20
+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(146)2025 1259 y(history)25 b(ev)n(en)n(ts)8 b Fc(:)13
+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(149)2025 1347 y(history)i(expansion)14 b Fc(:)g(:)f(:)g(:)g(:)h(:)
+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(148)2025 1436 y(history)c(list)9
+(:)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(146)2025 1524 y(History)-6 b(,)25 b(ho)n(w)h(to)g(use)
+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(145)2021
-1803 y Fs(I)2025 1924 y Fb(iden)n(ti\014er)12 b Fc(:)g(:)h(:)h(:)f(:)g
+(:)g(:)g(:)g(:)g(:)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 2013 y(initialization)h(\014le,)e(readline)17
+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(114)2025 2102 y(installation)21
+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(152)2025 2191 y(in)n(teraction,)26 b(readline)7
+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(111)2025
-2280 y(in)n(teractiv)n(e)k(shell)20 b Fc(:)13 b(:)h(:)f(:)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(88,)27 b(89)2025 2367 y(in)n(ternationalization)22
+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)2021 2637 y Fs(J)2025 2758 y Fb(job)23 b Fc(:)13
-b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g
-(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)
-g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)38 b Fb(3)2025 2845
-y(job)26 b(con)n(trol)17 b Fc(:)d(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g
+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(:)31 b Fb(3,)c(107)2021 3124 y Fs(K)2025
-3246 y Fb(kill)f(ring)7 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g
-(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)
-g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)22 b Fb(113)2025
-3333 y(killing)k(text)6 b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g
-(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)
-f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)21 b Fb(113)2021 3612
-y Fs(L)2025 3733 y Fb(lo)r(calization)i Fc(:)13 b(:)g(:)g(:)g(:)h(:)f
-(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)
-g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)35
-b Fb(7)2025 3821 y(login)26 b(shell)6 b Fc(:)15 b(:)e(:)g(:)g(:)g(:)g
-(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)
-h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)21
-b Fb(88)2021 4100 y Fs(M)2025 4221 y Fb(matc)n(hing,)26
-b(pattern)9 b Fc(:)k(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)
-g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)24
-b Fb(33)2025 4308 y(metac)n(haracter)7 b Fc(:)14 b(:)f(:)h(:)f(:)g(:)g
+g(:)g(:)g(:)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(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)22 b Fb(3)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(N)150 410 y Fb(name)19
+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
@@ -21838,121 +22517,124 @@ y(nativ)n(e)25 b(languages)c Fc(:)13 b(:)g(:)g(:)h(:)f(:)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(112)146 828 y Fs(O)150 944 y Fb(op)r(erator,)g(shell)c
+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 1187 y Fs(P)150 1303 y Fb(parameter)26
+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(25)150 1390 y(parameters)c Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g
+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(20)150
-1478 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(:)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(21)150 1565 y(parameters,)27 b(sp)r(ecial)7
+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(21)150 1652 y(pathname)k(expansion)18 b Fc(:)c(:)f(:)g(:)g(:)g(:)g
+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(33)150 1739 y(pattern)25 b(matc)n(hing)c
+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(33)150 1827 y(pip)r(eline)12 b Fc(:)h(:)g(:)h(:)f(:)g(:)g(:)g(:)g
-(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)
-h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)27
-b Fb(8)150 1914 y(POSIX)22 b Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g
-(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)
-g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)38
-b Fb(3)150 2001 y(POSIX)25 b(Mo)r(de)14 b Fc(:)g(:)f(:)g(:)g(:)g(:)g(:)
+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(101)150 2088
+(:)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 2176 y(pro)r(cess)d(group)e
+(:)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 2263 y(pro)r(cess)h(substitution)11 b Fc(:)h(:)i(:)f(:)g(:)g
+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(32)150 2350 y(programmable)i(completion)8
+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(137)150 2437 y(prompting)17
-b Fc(:)c(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)
-g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g
-(:)h(:)f(:)31 b Fb(98)146 2681 y Fs(Q)150 2797 y Fb(quoting)16
+(:)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 2884 y(quoting,)26
+(:)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 3127 y Fs(R)150 3243 y Fb(Readline,)26
+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(110)150 3331 y(redirection)13 b Fc(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g
+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(35)150
-3418 y(reserv)n(ed)f(w)n(ord)13 b Fc(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)
+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 3505
+(:)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(8)150 3592 y(restricted)c(shell)12
+(:)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(100)150 3679 y(return)e(status)10 b Fc(:)k(:)f(:)g(:)g(:)g(:)g(:)g
+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 430 y Fb(shell)h(arithmetic)17 b Fc(:)d(:)f(:)g(:)g(:)g
+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(93)2025 524
+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(18)2025 617 y(shell)26
+(:)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(42)2025 711 y(shell)h(v)l(ariable)7
+(:)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(20)2025 805 y(shell,)k(in)n(teractiv)n(e)21
+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(89)2025 899 y(signal)13 b Fc(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g
+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 992 y(signal)f(handling)6 b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g
+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(42)2025 1086
+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(72)2025 1180 y(startup)f(\014les)10
+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(88)2025 1267 y(susp)r(ending)g(jobs)10
-b Fc(:)k(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)
-g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)25
-b Fb(107)2021 1647 y Fs(T)2025 1783 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(24)2025 1877 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 1964 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 2344 y Fs(V)2025 2480 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(20)2025 2567 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(115)2021 2947 y Fs(W)2025 3083 y Fb(w)n(ord)10 b
+(:)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 3170
+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(32)2021 3550 y Fs(Y)2025
-3679 y Fb(y)n(anking)h(text)13 b Fc(:)f(:)h(:)g(:)g(:)h(:)f(:)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(113)p eop end
+g(:)h(:)f(:)g(:)g(:)g(:)g(:)28 b Fb(119)p eop end
 %%Trailer
 
 userdict /end-hook known{end-hook}if
index 9e23f5867468c7795ae2234e29a8dc67c541b43d..b0dc2fad11723a1725fbb5eb5a18a8421fb1973b 100644 (file)
@@ -14,7 +14,7 @@ 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--2020 Free Software Foundation, Inc.
+Copyright @copyright{} 1988--2022 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
@@ -420,12 +420,12 @@ has special meaning to the shell and must be quoted if it is to
 represent itself.
 When the command history expansion facilities are being used
 (@pxref{History Interaction}), the
-@var{history expansion} character, usually @samp{!}, must be quoted
+@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
-@var{escape character}, single quotes, and double quotes.
+@dfn{escape character}, single quotes, and double quotes.
 
 @node Escape Character
 @subsubsection Escape Character
@@ -475,10 +475,11 @@ when in double quotes (@pxref{Shell Parameter Expansion}).
 @subsubsection ANSI-C Quoting
 @cindex quoting, ANSI
 
-Words of the form @code{$'@var{string}'} are treated specially.  The
-word expands to @var{string}, with backslash-escaped characters replaced
-as specified by the ANSI C standard.  Backslash escape sequences, if
-present, are decoded as follows:
+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
@@ -532,30 +533,139 @@ been present.
 @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
 
-A double-quoted string preceded by a dollar sign (@samp{$})
+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 @var{gettext} infrastructure performs the message catalog lookup and 
-translation, using the @code{LC_MESSAGES} and @code{TEXTDOMAIN} shell
-variables, as explained below. See the gettext documentation for additional
-details.
+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},
-or if there are no translations available,
+if there are no translations available,
+of if the string is not translated,
 the dollar sign is ignored.
-If the string is translated and replaced, the replacement is
-double-quoted.
+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
-Some systems use the message catalog selected by the @env{LC_MESSAGES}
-shell variable.  Others create the name of the message catalog from the
-value of the @env{TEXTDOMAIN} shell variable, possibly adding a
-suffix of @samp{.mo}.  If you use the @env{TEXTDOMAIN} variable, you
-may need to set the @env{TEXTDOMAINDIR} variable to the location of
-the message catalog files.  Still others use both variables in this
-fashion:
-@env{TEXTDOMAINDIR}/@env{LC_MESSAGES}/LC_MESSAGES/@env{TEXTDOMAIN}.mo.
+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
@@ -656,15 +766,15 @@ The format for a pipeline is
 The output of each command in the pipeline is connected via a pipe
 to the input of the next command.
 That is, each command reads the previous command's output.  This
-connection is performed before any redirections specified by the
-command.
+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 the command.
+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.
@@ -691,11 +801,14 @@ the time information.
 If the pipeline is not executed asynchronously (@pxref{Lists}), the
 shell waits for all commands in the pipeline to complete.
 
-Each command in a pipeline is executed in its own subshell, which is a
+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.
+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
@@ -728,8 +841,8 @@ to delimit commands, equivalent to a semicolon.
 
 If a command is terminated by the control operator @samp{&},
 the shell executes the command asynchronously in a subshell.
-This is known as executing the command in the @var{background},
-and these are referred to as @var{asynchronous} commands.
+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}),
@@ -931,9 +1044,10 @@ Each clause must be terminated with @samp{;;}, @samp{;&}, or @samp{;;&}.
 The @var{word} undergoes tilde expansion, parameter expansion, command
 substitution, arithmetic expansion, and quote removal
 (@pxref{Shell Parameter Expansion})
-before matching is
-attempted.  Each @var{pattern} undergoes tilde expansion, parameter
-expansion, command substitution, and arithmetic expansion.
+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{;;&}.
@@ -982,16 +1096,16 @@ select @var{name} [in @var{words} @dots{}]; do @var{commands}; done
 @end example
 
 The list of words following @code{in} is expanded, generating a list
-of items.  The set of expanded words is printed on the standard
+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.
-The @env{PS3} prompt is then displayed and a line is read from the
-standard input.
+@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.
+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}.
 
@@ -1018,13 +1132,13 @@ done
 
 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.  This is exactly equivalent to
-@example
-let "@var{expression}"
-@end example
-@noindent
-@xref{Bash Builtins}, for a full description of the @code{let} builtin.
+otherwise the return status is 1. 
+
 
 @item [[@dots{}]]
 @rwindex [[
@@ -1037,10 +1151,12 @@ Return a status of 0 or 1 depending on the evaluation of
 the conditional expression @var{expression}.
 Expressions are composed of the primaries described below in
 @ref{Bash Conditional Expressions}.
-Word splitting and filename expansion are not performed on the words
-between the @code{[[} and @code{]]}; tilde expansion, parameter and
+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 are performed.
+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.
 
@@ -1058,79 +1174,112 @@ is enabled, the match is performed without regard to the case
 of alphabetic characters.
 The return value is 0 if the string matches (@samp{==}) or does not
 match (@samp{!=}) the pattern, and 1 otherwise.
-Any part of the pattern may be quoted to force the quoted portion
-to be matched as a string.
+
+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 it is used, the string to the right of the operator is considered
-a @sc{posix} extended regular expression and matched accordingly
+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 otherwise.
+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's return value is 2.
+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.
-Any part of the pattern may be quoted to force the quoted portion
-to be matched as a string.
-Bracket expressions in regular expressions must be treated carefully,
-since normal quoting characters lose their meanings between brackets.
+
+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 as a string.
+expansion forces the entire pattern to be matched literally.
 
 The pattern will match if it matches any part of the string.
-Anchor the pattern using the @samp{^} and @samp{$} regular expression
-operators to force it to match the entire string.
-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.
+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 @var{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,
-zero or one instances of @samp{a}, then a @samp{b}:
+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 like @samp{aab} and @samp{  aaaaaab} will match, as
-will a line containing a @samp{b} anywhere in its value.
+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.
-It is sometimes difficult to specify a regular expression literally
-without using quotes, or to keep track of the quoting used by regular
-expressions while paying attention to the shell's quote removal.
-Using a shell variable to store the pattern decreases these problems.
-For example, the following is equivalent to the above:
+For example, the following is equivalent to the pattern used above:
+
 @example
 pattern='[[:space:]]*(a)?b'
 [[ $line =~ $pattern ]]
 @end example
 
-@noindent
-If you want to match a character that's special to the regular expression
-grammar, it has to be quoted to remove its special meaning.
-This means that in the pattern @samp{xxx.txt}, the @samp{.} matches any
-character in the string (its usual regular expression meaning), but in the
-pattern @samp{"xxx.txt"} it can only match a literal @samp{.}.
-Shell programmers should take special care with backslashes, since backslashes
-are used both by the shell and regular expressions to remove the special
-meaning from the following character.
+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='\.'
 
@@ -1144,12 +1293,53 @@ pattern='\.'
 @noindent
 The first two matches will succeed, but the second two will not, because
 in the second two the backslash will be part of the pattern to be matched.
-In the first two examples, the backslash removes the special meaning from
+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:
 
@@ -1189,11 +1379,11 @@ commands in the list may be redirected to a single stream.
 ( @var{list} )
 @end example
 
-Placing a list of commands between parentheses causes a subshell
-environment to be created (@pxref{Command Execution Environment}), and each
-of the commands in @var{list} to be executed in that subshell.  Since the
-@var{list} is executed in a subshell, variable assignments do not remain in
-effect after the subshell completes. 
+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 @{
@@ -1209,9 +1399,9 @@ The semicolon (or newline) following @var{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 @code{reserved words}, so they must be separated from the @var{list}
+are reserved words, so they must be separated from the @var{list}
 by @code{blank}s or other shell metacharacters.
-The parentheses are @code{operators}, and are
+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.
 
@@ -1228,27 +1418,56 @@ A coprocess is executed asynchronously in a subshell, as if the command
 had been terminated with the @samp{&} control operator, with a two-way pipe
 established between the executing shell and the coprocess.
 
-The format for a coprocess is:
+The syntax for a coprocess is:
+
 @example
 coproc [@var{NAME}] @var{command} [@var{redirections}]
 @end example
 
 @noindent
 This creates a coprocess named @var{NAME}.
-If @var{NAME} is not supplied, the default name is @var{COPROC}.
-@var{NAME} must not be supplied if @var{command} is a simple
-command (@pxref{Simple Commands}); otherwise, it is interpreted as
-the first word of the simple command.
+@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 @env{NAME} in the context of the executing shell.
+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 @env{NAME}[0].
+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 @env{NAME}[1].
+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
@@ -1257,7 +1476,7 @@ Other than those created to execute command and process substitutions,
 the file descriptors are not available in subshells.
 
 The process ID of the shell spawned to execute the coprocess is
-available as the value of the variable @env{NAME}_PID.
+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.
 
@@ -1279,117 +1498,9 @@ Parallel provides shorthand references to many of the most common operations
 the input source, and so on).  Parallel can replace @code{xargs} or feed
 commands from its input sources to several different instances of Bash.
 
-For a complete description, refer to the GNU Parallel documentation.  A few
-examples should provide a brief introduction to its use.
-
-For example, it is easy to replace @code{xargs} to gzip all html files in the
-current directory and its subdirectories:
-@example
-find . -type f -name '*.html' -print | parallel gzip
-@end example
-@noindent
-If you need to protect special characters such as newlines in file names,
-use find's @option{-print0} option and parallel's @option{-0} option.
-
-You can use Parallel to move files from the current directory when the
-number of files is too large to process with one @code{mv} invocation:
-@example
-printf '%s\n' * | parallel mv @{@} destdir
-@end example
-
-As you can see, the @{@} is replaced with each line read from standard input.
-While using @code{ls} will work in most instances, it is not sufficient to
-deal with all filenames. @code{printf} is a shell builtin, and therefore is
-not subject to the kernel's limit on the number of arguments to a program,
-so you can use @samp{*} (but see below about the @code{dotglob} shell option).
-If you need to accommodate special characters in filenames, you can use
-
-@example
-printf '%s\0' * | parallel -0 mv @{@} destdir
-@end example
-
-@noindent
-as alluded to above.
-
-This will run as many @code{mv} commands as there are files in the current
-directory.
-You can emulate a parallel @code{xargs} by adding the @option{-X} option:
-@example
-printf '%s\0' * | parallel -0 -X mv @{@} destdir
-@end example
-
-(You may have to modify the pattern if you have the @code{dotglob} option
-enabled.)
-
-GNU Parallel can replace certain common idioms that operate on lines read
-from a file (in this case, filenames listed one per line):
-@example
-       while IFS= read -r x; do
-               do-something1 "$x" "config-$x"
-               do-something2 < "$x"
-       done < file | process-output
-@end example
-
-@noindent
-with a more compact syntax reminiscent of lambdas:
-@example
-cat list | parallel "do-something1 @{@} config-@{@} ; do-something2 < @{@}" |
-           process-output
-@end example
-
-Parallel provides a built-in mechanism to remove filename extensions, which
-lends itself to batch file transformations or renaming:
-@example
-ls *.gz | parallel -j+0 "zcat @{@} | bzip2 >@{.@}.bz2 && rm @{@}"
-@end example
-@noindent
-This will recompress all files in the current directory with names ending
-in .gz using bzip2, running one job per CPU (-j+0) in parallel.
-(We use @code{ls} for brevity here; using @code{find} as above is more
-robust in the face of filenames containing unexpected characters.)
-Parallel can take arguments from the command line; the above can also be
-written as
-
-@example
-parallel "zcat @{@} | bzip2 >@{.@}.bz2 && rm @{@}" ::: *.gz
-@end example
-
-If a command generates output, you may want to preserve the input order in
-the output.  For instance, the following command
-@example
-@{
-    echo foss.org.my ;
-    echo debian.org ;
-    echo freenetproject.org ;
-@} | parallel traceroute
-@end example
-@noindent
-will display as output the traceroute invocation that finishes first.
-Adding the @option{-k} option 
-@example
-@{
-    echo foss.org.my ;
-    echo debian.org ;
-    echo freenetproject.org ;
-@} | parallel -k traceroute
-@end example
-@noindent
-will ensure that the output of @code{traceroute foss.org.my} is displayed first.
-
-Finally, Parallel can be used to run a sequence of shell commands in parallel,
-similar to @samp{cat file | bash}.
-It is not uncommon to take a list of filenames, create a series of shell
-commands to operate on them, and feed that list of commands to a shell.
-Parallel can speed this up.  Assuming that @file{file} contains a list of
-shell commands, one per line,
-
-@example
-parallel -j 10 < file
-@end example
-
-@noindent
-will evaluate the commands using the shell (since no explicit command is
-supplied as an argument), in blocks of ten shell jobs at a time.
+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
@@ -1420,16 +1531,16 @@ 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 @var{body} of the function is the compound command
+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,
-with one exception: If the @code{function} reserved word is used, but the
-parentheses are not supplied, the braces are required.                   
+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 command.
+name of a simple command.
 When the shell is in @sc{posix} mode (@pxref{Bash POSIX Mode}),
-@var{fname} must be a valid shell @var{name} and
+@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
@@ -1496,17 +1607,29 @@ return status is the exit status of the last command executed
 before the @code{return}.
 
 Variables local to the function may be declared with the
-@code{local} builtin.  These variables are visible only to
+@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 @var{dynamic scoping} to control a variable's visibility
+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
@@ -1518,11 +1641,11 @@ This is also the value that a local variable
 declaration "shadows", and the value that is restored when the function
 returns.
 
-For example, if a variable @var{var} is declared as local in function
-@var{func1}, and @var{func1} calls another function @var{func2},
-references to @var{var} made from within @var{func2} will resolve to the
-local variable @var{var} from @var{func1}, shadowing any global variable
-named @var{var}.
+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
@@ -1552,11 +1675,13 @@ 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.
+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})
@@ -1565,7 +1690,8 @@ The @option{-F} option to @code{declare} or @code{typeset}
 will list the function names only
 (and optionally the source file and line number, if the @code{extdebug}
 shell option is enabled).
-Functions may be exported so that subshells
+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}).
@@ -1586,11 +1712,11 @@ By default, no limit is placed on the number of recursive  calls.
 * Special Parameters::         Parameters denoted by special characters.
 @end menu
 
-A @var{parameter} is an entity that stores values.
+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 @var{variable} is a parameter denoted by a @code{name}.
-A variable has a @var{value} and zero or more @var{attributes}.
+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}).
 
@@ -1607,17 +1733,16 @@ If @var{value}
 is not given, the variable is assigned the null string.  All
 @var{value}s undergo tilde expansion, parameter and variable expansion,
 command substitution, arithmetic expansion, and quote
-removal (detailed below).  If the variable has its @code{integer}
+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 is not performed, with the exception
-of @code{"$@@"} as explained below.
-Filename expansion is not performed.
+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 (@var{declaration} commands).
+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.
@@ -1627,8 +1752,8 @@ to a shell variable or array index (@pxref{Arrays}), the @samp{+=}
 operator can be used to   
 append to or add to the variable's previous value.
 This includes arguments to builtin commands such as @code{declare} that
-accept assignment statements (@var{declaration} commands).
-When @samp{+=} is applied to a variable for which the @var{integer} attribute
+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
@@ -1640,10 +1765,10 @@ in an associative array.
 When applied to a string-valued variable, @var{value} is expanded and
 appended to the variable's value.
 
-A variable can be assigned the @var{nameref} attribute using the
+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 @var{nameref}, or a reference to another variable.
+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
@@ -1658,9 +1783,9 @@ argument, running
 declare -n ref=$1
 @end example
 @noindent
-inside the function creates a nameref variable @var{ref} whose value is
+inside the function creates a nameref variable @env{ref} whose value is
 the variable name passed as the first argument.
-References and assignments to @var{ref}, and changes to its attributes,
+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}.
 
@@ -1680,7 +1805,7 @@ as an argument, the variable referenced by the nameref variable will be unset.
 @subsection Positional Parameters
 @cindex parameters, positional
 
-A @var{positional parameter} is a parameter denoted by one or more
+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.
@@ -1762,7 +1887,7 @@ builtin command, or those set by the shell itself
 
 @item $
 @vindex $$
-($$) Expands to the process @sc{id} of the shell.  In a @code{()} subshell, it
+($$) 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 !
@@ -1822,14 +1947,14 @@ word splitting;
 and filename expansion.
 
 On systems that can support it, there is an additional expansion
-available: @var{process substitution}.
+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
-(@var{quote removal}).
+(@dfn{quote removal}).
 
 Only brace expansion, word splitting, and filename expansion
 can increase the number of words of the expansion; other expansions
@@ -1849,7 +1974,7 @@ is performed.
 
 Brace expansion is a mechanism by which arbitrary strings may be generated.
 This mechanism is similar to
-@var{filename expansion} (@pxref{Filename Expansion}),
+@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
@@ -1869,7 +1994,7 @@ ade ace abe
 @end example
 
 A sequence expression takes the form @code{@{@var{x}..@var{y}[..@var{incr}]@}},
-where @var{x} and @var{y} are either integers or single characters,
+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.
@@ -1878,10 +2003,11 @@ same width.
 When either @var{x} or @var{y} begins with a zero, the shell
 attempts to force all generated terms to contain the same number of digits,
 zero-padding where necessary.
-When characters are supplied, the expression expands to each character
+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.
+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.
 
@@ -1920,10 +2046,10 @@ chown root /usr/@{ucb/@{ex,edit@},lib/@{ex?.?*,how_ex@}@}
 
 If a word begins with an unquoted tilde character (@samp{~}), all of the
 characters up to the first unquoted slash (or all characters,
-if there is no unquoted slash) are considered a @var{tilde-prefix}.
+if 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 @var{login name}.
+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
@@ -1986,7 +2112,7 @@ The string that would be displayed by @samp{dirs -@var{N}}
 Bash also performs tilde expansion on words satisfying the conditions of
 variable assignments (@pxref{Shell Parameters})
 when they appear as arguments to simple commands.
-Bash does not do this, except for the @var{declaration} commands listed
+Bash does not do this, except for the declaration commands listed
 above, when in @sc{posix} mode.
 
 @node Shell Parameter Expansion
@@ -2016,7 +2142,7 @@ or when @var{parameter} is followed by a character that is not to be
 interpreted as part of its name.
 
 If the first character of @var{parameter} is an exclamation point (!),
-and @var{parameter} is not a @var{nameref},
+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
@@ -2051,6 +2177,12 @@ 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}
@@ -2059,6 +2191,13 @@ 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
@@ -2067,17 +2206,29 @@ 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{@@}, an indexed array subscripted by
+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
@@ -2154,8 +2305,8 @@ $ echo ${array[0]: -7:-2}
 bcdef
 @end verbatim
 
-If @var{parameter} is @samp{@@}, the result is @var{length} positional
-parameters beginning at @var{offset}.
+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.
@@ -2284,21 +2435,100 @@ 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}).
-If @var{pattern} begins with @samp{/}, all matches of @var{pattern} are
-replaced with @var{string}.  Normally only the first match is replaced.
-If @var{pattern} begins with @samp{#}, it must match at the beginning
-of the expanded value of @var{parameter}.
-If @var{pattern} begins with @samp{%}, it must match at the end
-of the expanded value of @var{parameter}.
-If @var{string} is null, matches of @var{pattern} are deleted
-and the @code{/} following @var{pattern} may be omitted.
+
+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   
@@ -2321,6 +2551,7 @@ 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.
@@ -2329,6 +2560,7 @@ 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.
@@ -2373,6 +2605,9 @@ indexed and associative arrays as a sequence of quoted key-value pairs
 @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{*},
@@ -2438,8 +2673,10 @@ and the substitution of the result.  The format for arithmetic expansion is:
 $(( @var{expression} ))
 @end example
 
-The expression is treated as if it were within double quotes, but
-a double quote inside the parentheses is not treated specially.
+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.
@@ -2559,9 +2796,13 @@ without regard to the case of alphabetic characters.
 When a pattern is used for filename expansion, the character @samp{.}
 at the start of a filename or immediately following a slash
 must be matched explicitly, unless the shell option @code{dotglob} is set.
-The filenames @samp{.} and @samp{..} must always be matched explicitly,
+In order to match the filenames @samp{.} and @samp{..},
+the pattern must begin with @samp{.} (for example, @samp{.?}),
 even if @code{dotglob} is set.
-In other cases, the @samp{.} character is not treated specially.
+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
@@ -2570,6 +2811,7 @@ 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}
@@ -2628,20 +2870,22 @@ then any character not enclosed is matched.  A @samp{@minus{}}
 may be matched by including it as the first or last character
 in the set.  A @samp{]} may be matched by including it as the first
 character in the set.
-The sorting order of characters in range expressions is determined by
+The 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{[aBbCcDdxXyYz]}, for example.  To obtain
+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{]}, @var{character classes} can be specified
+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:
@@ -2654,7 +2898,7 @@ A character class matches any character belonging to that class.
 The @code{word} character class matches letters, digits, and the character
 @samp{_}.
 
-Within @samp{[} and @samp{]}, an @var{equivalence class} can be
+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}.
@@ -2664,9 +2908,11 @@ matches the collating symbol @var{symbol}.
 @end table
 
 If the @code{extglob} shell option is enabled using the @code{shopt}
-builtin, several extended pattern matching operators are recognized.
+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:
 
@@ -2687,6 +2933,23 @@ Matches one of the given patterns.
 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.
@@ -2705,9 +2968,9 @@ result from one of the above expansions are removed.
 @cindex redirection
 
 Before a command is executed, its input and output
-may be @var{redirected}
+may be @dfn{redirected}
 using a special notation interpreted by the shell.
-Redirection allows commands' file handles to be
+@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.
@@ -2728,6 +2991,8 @@ 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
@@ -3040,7 +3305,11 @@ and quote removal before being assigned to the variable.
 @end enumerate
 
 If no command name results, the variable assignments affect the current
-shell environment.  Otherwise, the variables are added to the environment
+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.
@@ -3103,7 +3372,7 @@ to the command are set to the arguments supplied, if any.
 @item
 If this execution fails because the file is not in executable
 format, and the file is not a directory, it is assumed to be a
-@var{shell script} and the shell executes it as described in
+@dfn{shell script} and the shell executes it as described in
 @ref{Shell Scripts}.
 
 @item
@@ -3116,7 +3385,7 @@ the command to complete and collects its exit status.
 @subsection Command Execution Environment
 @cindex execution environment
 
-The shell has an @var{execution environment}, which consists of the
+The shell has an @dfn{execution environment}, which consists of the
 following:
 
 @itemize @bullet
@@ -3190,6 +3459,8 @@ 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 @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,
@@ -3213,13 +3484,13 @@ shell as modified by redirections.
 @cindex environment
 
 When a program is invoked it is given an array of strings
-called the @var{environment}.
+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 @var{export}
+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
@@ -3251,7 +3522,7 @@ command in its environment.
 @cindex exit status
 
 The exit status of an executed command is the value returned by the
-@var{waitpid} system call or equivalent function.  Exit statuses    
+@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
@@ -3284,6 +3555,9 @@ 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
@@ -3330,6 +3604,37 @@ 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
@@ -3352,8 +3657,10 @@ are unset.
 
 A shell script may be made executable by using the @code{chmod} command
 to turn on the execute bit.  When Bash finds such a file while
-searching the @env{$PATH} for a command, it spawns a subshell to
-execute it.  In other words, executing
+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
@@ -3470,18 +3777,19 @@ The return status is zero.
 
 Read and execute commands from the @var{filename} argument in the
 current shell context.  If @var{filename} does not contain a slash,
-the @env{PATH} variable is used to find @var{filename}.
-When Bash is not in @sc{posix} mode, the current directory is searched
+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{source} inherits any trap on
+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{source}, and @code{source} unsets the
+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{source} completes.
+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.
@@ -3507,7 +3815,6 @@ cd [-L|[-P [-e]] [-@@] [@var{directory}]
 Change the current working directory to @var{directory}.
 If @var{directory} is not supplied, the value of the @env{HOME}
 shell variable is used.
-Any additional arguments following @var{directory} are ignored.
 If the shell variable
 @env{CDPATH} exists, it is used as a search path:
 each directory name in @env{CDPATH} is searched for
@@ -3543,6 +3850,11 @@ If a non-empty directory name from @env{CDPATH} is used, or if
 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.
 
@@ -3616,7 +3928,7 @@ Mark each @var{name} to be passed to child processes
 in the environment.  If the @option{-f} option is supplied, the @var{name}s
 refer to shell functions; otherwise the names refer to shell variables.
 The @option{-n} option means to no longer mark each @var{name} for export.
-If no @var{names} are supplied, or if the @option{-p} option is given, a
+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
@@ -3877,10 +4189,20 @@ 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
@@ -3994,7 +4316,7 @@ If the @option{-v} option is given, each
 If the @option{-f} option is given, the @var{name}s refer to shell
 functions, and the function definition is removed.
 If the @option{-n} option is supplied, and @var{name} is a variable with
-the @var{nameref} attribute, @var{name} will be unset rather than the
+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
@@ -4003,7 +4325,7 @@ 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.
+The return status is zero unless a @var{name} is readonly or may not be unset.
 @end table
 
 @node Bash Builtins
@@ -4038,6 +4360,7 @@ 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})
@@ -4112,6 +4435,9 @@ When @var{shell-command} is executed, the shell sets the
 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.
@@ -4218,7 +4544,7 @@ 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 @var{nameref} attribute)
+(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.
@@ -4247,7 +4573,7 @@ converted to lower-case.
 The upper-case attribute is disabled.
 
 @item -n
-Give each @var{name} the @var{nameref} attribute, making
+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
@@ -4294,7 +4620,7 @@ an attempt is made to define a function using @samp{-f foo=bar},
 an attempt is made to assign a value to a readonly variable,
 an attempt is made to assign a value to an array variable without
 using the compound assignment syntax (@pxref{Arrays}),
-one of the @var{names} is not a valid shell variable name,
+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}.
@@ -4378,6 +4704,9 @@ 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.
@@ -4385,6 +4714,11 @@ 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.
 
@@ -4535,6 +4869,9 @@ corresponding @var{argument} in the same way as @code{echo -e}
 @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).
@@ -4654,8 +4991,10 @@ 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, non-zero otherwise.
+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}
@@ -4727,7 +5066,7 @@ is not also used.
 If the @option{-f} option is used, @code{type} does not attempt to find
 shell functions, as with the @code{command} builtin.
 
-The return status is zero if all of the @var{names} are found, non-zero
+The return status is zero if all of the @var{name}s are found, non-zero
 if any are not found.
 
 @item typeset
@@ -4888,8 +5227,8 @@ parameters, or to display the names and values of shell variables.
 @item set
 @btindex set
 @example
-set [--abefhkmnptuvxBCEHPT] [-o @var{option-name}] [@var{argument} @dots{}]
-set [+abefhkmnptuvxBCEHPT] [+o @var{option-name}] [@var{argument} @dots{}]
+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
@@ -5076,12 +5415,18 @@ 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{*} as an error when performing parameter expansion.
+@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.
 
@@ -5187,7 +5532,7 @@ The settings can be either those listed below, or, if the
 option to the @code{set} builtin command (@pxref{The Set Builtin}).
 With no options, or with the @option{-p} option, a list of all settable
 options is displayed, with an indication of whether or not each is set;
-if @var{optnames} are supplied, the output is restricted to those options.
+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:
@@ -5203,7 +5548,7 @@ Disable (unset) each @var{optname}.
 Suppresses normal output; the return status
 indicates whether the @var{optname} is set or unset.
 If multiple @var{optname} arguments are given with @option{-q},
-the return status is zero if all @var{optnames} are enabled;
+the return status is zero if all @var{optname}s are enabled;
 non-zero otherwise.
 
 @item -o
@@ -5219,7 +5564,7 @@ those options which are set or unset, respectively.
 Unless otherwise noted, the @code{shopt} options are disabled (off)
 by default.
 
-The return status when listing options is zero if all @var{optnames}
+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.
@@ -5308,7 +5653,7 @@ 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
+filename completion.  This changes the contents of the Readline editing
 buffer.
 If not set, Bash attempts to preserve what the user typed.
 
@@ -5401,6 +5746,12 @@ 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.
@@ -5460,7 +5811,7 @@ embedded newlines rather than using semicolon separators where possible.
 @item localvar_inherit
 If set, local variables inherit the value and attributes of a variable of
 the same name that exists at a previous scope before any new value is
-assigned.  The @var{nameref} attribute is not inherited.
+assigned.  The @code{nameref} attribute is not inherited.
 
 @item localvar_unset
 If set, calling @code{unset} on local variables in previous function scopes
@@ -5490,14 +5841,27 @@ 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,
+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.
@@ -5529,10 +5893,15 @@ builtin prints an error message when the shift count exceeds the
 number of positional parameters.
 
 @item sourcepath
-If set, the @code{source} builtin uses the value of @env{PATH}
+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.
@@ -5789,7 +6158,7 @@ The command argument to the @option{-c} invocation option.
 
 @item BASH_LINENO
 An array variable whose members are the line numbers in source files
-where each corresponding member of @var{FUNCNAME} was invoked.
+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
@@ -5833,10 +6202,10 @@ The values assigned to the array members are as follows:
 @table @code
 
 @item BASH_VERSINFO[0]
-The major version number (the @var{release}).
+The major version number (the @dfn{release}).
 
 @item BASH_VERSINFO[1]
-The minor version number (the @var{version}).
+The minor version number (the @dfn{version}).
 
 @item BASH_VERSINFO[2]
 The patch level.
@@ -5845,7 +6214,7 @@ The patch level.
 The build version.
 
 @item BASH_VERSINFO[4]
-The release status (e.g., @var{beta1}).
+The release status (e.g., @code{beta1}).
 
 @item BASH_VERSINFO[5]
 The value of @env{MACHTYPE}.
@@ -5906,7 +6275,7 @@ programmable completion facilities (@pxref{Programmable Completion}).
 @item COMP_TYPE
 Set to an integer value corresponding to the type of completion attempted
 that caused a completion function to be called:
-@var{TAB}, for normal completion,
+@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,
@@ -5963,7 +6332,7 @@ 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 similarlty to @code{BASH_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}).
@@ -5971,7 +6340,7 @@ when an interactive shell is invoked in
 @item EPOCHREALTIME
 Each time this parameter is referenced, it expands to the number of seconds
 since the Unix Epoch as a floating point value with micro-second granularity
-(see the documentation for the C library function @var{time} for the
+(see the documentation for the C library function @code{time} for the
 definition of Epoch).
 Assignments to @env{EPOCHREALTIME} are ignored.
 If @env{EPOCHREALTIME}
@@ -5981,7 +6350,7 @@ it is subsequently reset.
 @item EPOCHSECONDS
 Each time this parameter is referenced, it expands to the number of seconds
 since the Unix Epoch (see the documentation for the C library function
-@var{time} for the definition of Epoch).
+@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
@@ -6065,7 +6434,7 @@ subsequently reset.
 Up to three characters which control history expansion, quick
 substitution, and tokenization (@pxref{History Interaction}).
 The first character is the
-@var{history expansion} character, that is, the character which signifies the
+@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
@@ -6150,7 +6519,7 @@ The shell sets the default value to 500 after reading any startup files.
 
 @item HISTTIMEFORMAT
 If this variable is set and not null, its value is used as a format string
-for @var{strftime} to print the time stamp associated with each history
+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.
@@ -6313,7 +6682,7 @@ The value of this variable is used as the prompt for the
 @code{select} command prompts with @samp{#? }
 
 @item PS4
-The value of this parameter is expanded like @var{PS1}
+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,
@@ -6331,16 +6700,21 @@ 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 @var{mark} (saved insertion point) in the
+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 @var{region}.
+called the @dfn{region}.
 
 @item READLINE_POINT
 The position of the insertion point in the Readline line buffer, for use
@@ -6350,12 +6724,11 @@ with @samp{bind -x} (@pxref{Bash Builtins}).
 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
+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 is always
+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,
@@ -6743,10 +7116,12 @@ No other startup files are read.
 @subsubheading Invoked by remote shell daemon
 
 Bash attempts to determine when it is being run with its standard input
-connected to a network connection, as when executed by the remote shell
-daemon, usually @code{rshd}, or the secure shell daemon @code{sshd}.
-If Bash determines it is being run in
-this fashion, it reads and executes commands from @file{~/.bashrc}, if that
+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
@@ -6773,15 +7148,16 @@ the same, but the effective user id is not reset.
 @menu
 * What is an Interactive Shell?::      What determines whether a shell is Interactive.
 * Is this Shell Interactive?:: How to tell if a shell is interactive.
-* Interactive Shell Behavior:: What changes in a interactive shell?
+* 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, without specifying the @option{-c} option, and
+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.
@@ -6844,7 +7220,7 @@ 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_COMMANDS}
+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}).
 
@@ -6915,9 +7291,11 @@ A failed @code{exec} will not cause the shell to exit
 Parser syntax errors will not cause the shell to exit.
 
 @item
-Simple spelling correction for directory arguments to the @code{cd}
-builtin is enabled by default (see the description of the @code{cdspell}
+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
@@ -6931,7 +7309,10 @@ printing @env{$PS1} (@pxref{Bash Variables}).
 @cindex expressions, conditional
 
 Conditional expressions are used by the @code{[[} compound command
-and the @code{test} and @code{[} builtin commands. The @code{test}
+(@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.
@@ -7166,9 +7547,9 @@ A shell variable that is null or unset evaluates to 0 when referenced
 by name without using the parameter expansion syntax.
 The value of a variable is evaluated as an arithmetic expression
 when it is referenced, or when a variable which has been given the  
-@var{integer} attribute using @samp{declare -i} is assigned a value.
+@code{integer} attribute using @samp{declare -i} is assigned a value.
 A null value evaluates to 0.
-A shell variable need not have its @var{integer} attribute turned on
+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
@@ -7195,7 +7576,7 @@ rules above.
 @section Aliases
 @cindex alias expansion
 
-@var{Aliases} allow a string to be substituted for a word when it is used
+@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.
@@ -7215,7 +7596,7 @@ This means that one may alias @code{ls} to @code{"ls -F"},
 for instance, and Bash does not try to recursively expand the
 replacement text.
 If the last character of the alias value is a
-@var{blank}, then the next command word following the
+@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}
@@ -7223,7 +7604,7 @@ command, and removed with the @code{unalias} command.
 
 There is no mechanism for using arguments in the replacement text,
 as in @code{csh}.
-If arguments are needed, a shell function should be used
+If arguments are needed, use a shell function
 (@pxref{Shell Functions}).
 
 Aliases are not expanded when the shell is not interactive,
@@ -7337,6 +7718,9 @@ 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
@@ -7387,8 +7771,14 @@ destroys the array element at index @var{subscript}.
 Negative subscripts to indexed arrays are interpreted as described above.
 Unsetting the last element of an array variable does not unset the variable.
 @code{unset @var{name}}, where @var{name} is an array, removes the
-entire array.  A subscript of @samp{*} or @samp{@@} also removes the
 entire array.
+@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
@@ -7470,11 +7860,16 @@ with zero.
 popd [-n] [+@var{N} | -@var{N}]
 @end example
 
-When no arguments are given, @code{popd}
-removes the top directory from the stack and
-performs a @code{cd} to the new top directory.
+Removes elements from the directory stack.
 The elements are numbered from 0 starting at the first directory
-listed with @code{dirs}; that is, @code{popd} is equivalent to @code{popd +0}.
+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
@@ -7482,22 +7877,38 @@ 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.
+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.
+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
 
-Save the current directory on the top of the directory stack
-and then @code{cd} to @var{dir}.
-With no arguments, @code{pushd} exchanges the top two directories
-and makes the new top the current directory.
+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
@@ -7512,19 +7923,32 @@ Brings the @var{N}th directory (counting from the right of the
 list printed by @code{dirs}, starting with zero) to the top of
 the list by rotating the stack.
 @item @var{dir}
-Makes @var{dir} be the top of the stack, making
-it the new current directory as if it had been supplied as an argument
-to the @code{cd} builtin.
+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_COMMANDS} just before
+Bash examines the value of the array variable @env{PROMPT_COMMAND} just before
 printing each primary prompt.
-If any elements in  @env{PROMPT_COMMANDS} are set and non-null, Bash
+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.
 
@@ -7573,7 +7997,8 @@ The version of Bash (e.g., 2.00)
 @item \V
 The release of Bash, version + patchlevel (e.g., 2.00.0)
 @item \w
-The current working directory, with @env{$HOME} abbreviated with a tilde
+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.
@@ -7658,7 +8083,7 @@ Using the @code{enable} builtin command to enable disabled shell builtins.
 @item
 Specifying the @option{-p} option to the @code{command} builtin.
 @item
-Turning off restricted mode with @samp{set +r} or @samp{set +o restricted}.
+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.
@@ -7670,8 +8095,8 @@ 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), leaving the user
-in a non-writable directory other than his home directory after login,
+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}).
@@ -7724,6 +8149,13 @@ Alias expansion is always enabled, even in non-interactive shells.
 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,
@@ -7818,7 +8250,10 @@ 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.
+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
@@ -7846,7 +8281,7 @@ While variable indirection is available, it may not be applied to the
 @samp{#} and @samp{?} special parameters.
 
 @item
-When expanding the @samp{*} special parameter in a pattern context where the
+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.
 
@@ -7926,16 +8361,16 @@ variable values without quotes, unless they contain shell metacharacters,
 even if the result contains nonprinting characters.
 
 @item
-When the @code{cd} builtin is invoked in @var{logical} mode, and the pathname
+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 @var{physical} mode.
+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 @var{PATH_MAX} when all symbolic links are expanded, @code{cd} will
+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
@@ -7980,6 +8415,12 @@ 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.
@@ -8012,8 +8453,8 @@ the @option{--enable-strict-posix-default} to @code{configure} when building
 @cindex Compatibility Level
 @cindex Compatibility Mode
 
-Bash-4.0 introduced the concept of a `shell compatibility level', specified
-as a set of options to the shopt builtin
+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},
@@ -8029,7 +8470,7 @@ 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 above). 
+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.
@@ -8129,7 +8570,7 @@ are not special within double-quoted word expansions
 @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
-(declare -a foo='(1 2)'). Later versions warn that this usage is
+(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
@@ -8174,6 +8615,49 @@ 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
@@ -8237,9 +8721,9 @@ which, unless caught, suspends the process.
 
 If the operating system on which Bash is running supports
 job control, Bash contains facilities to use it.  Typing the
-@var{suspend} character (typically @samp{^Z}, Control-Z) while a
+@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 @var{delayed suspend} character
+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
@@ -8250,7 +8734,7 @@ takes effect immediately, and has the additional side effect of
 causing pending output and typeahead to be discarded. 
 
 There are a number of ways to refer to a job in the shell.  The
-character @samp{%} introduces a job specification (@var{jobspec}).
+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
@@ -8410,7 +8894,7 @@ 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{pids} or @var{jobspecs} or, if no arguments are
+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
@@ -8423,10 +8907,14 @@ 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, intead of returning when it changes
+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
@@ -8453,8 +8941,16 @@ suspend [-f]
 
 Suspend the execution of this shell until it receives a
 @code{SIGCONT} signal.
-A login shell cannot be suspended; the @option{-f}
+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}
@@ -8553,7 +9049,14 @@ 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.
+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
 
@@ -8561,7 +9064,7 @@ The @code{configure} shell script attempts to guess correct
 values for various system-dependent variables used during
 compilation.  It uses those values to create a @file{Makefile} in
 each directory of the package (the top directory, the
-@file{builtins}, @file{doc}, and @file{support} directories,
+@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
@@ -8606,10 +9109,10 @@ to do them, and mail diffs or instructions to
 considered for the next release.
 
 The file @file{configure.ac} is used to create @code{configure}
-by a program called Autoconf.  You only need
-@file{configure.ac} if you want to change it or regenerate
-@code{configure} using a newer version of Autoconf.  If
-you do this, make sure you are using Autoconf version 2.50 or
+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
@@ -8655,7 +9158,7 @@ supply the @option{--srcdir=PATH} argument to tell @code{configure} where the
 source files are.  @code{configure} automatically checks for the
 source code in the directory that @code{configure} is in and in `..'.
 
-If you have to use a @code{make} that does not supports the @code{VPATH}
+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
@@ -8680,24 +9183,55 @@ directories for other architectures.
 @section Installation Names
 
 By default, @samp{make install} will install into
-@file{/usr/local/bin}, @file{/usr/local/man}, etc.  You can
-specify an installation prefix other than @file{/usr/local} by
+@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 @code{DESTDIR} @samp{make}
-variable when running @samp{make install}.
+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. 
+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 need to determine by the type of host Bash
+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
@@ -8808,9 +9342,13 @@ the installed version of Readline in subdirectories of that directory
 (include files in @var{PREFIX}/@code{include} and the library in
 @var{PREFIX}/@code{lib}).
 
-@item --with-purify
-Define this to use the Purify memory allocation checker from Rational
-Software.
+@item --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
@@ -8818,7 +9356,7 @@ Bourne shell.
 @end table
 
 There are several @option{--enable-} options that alter how Bash is
-compiled and linked, rather than changing run-time features.
+compiled, linked, and installed, rather than changing run-time features.
 
 @table @code
 @item --enable-largefile
@@ -8831,17 +9369,26 @@ default, if the operating system provides large file support.
 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{disabled-builtins},
-@samp{direxpand-default}, and
+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.
@@ -8851,6 +9398,11 @@ necessary support.
 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
@@ -8871,7 +9423,7 @@ See @ref{Brace Expansion}, for a complete description.
 
 @item --enable-casemod-attributes
 Include support for case-modifying attributes in the @code{declare} builtin
-and assignment statements.  Variables with the @var{uppercase} attribute,
+and assignment statements.  Variables with the @code{uppercase} attribute,
 for example, will have their values converted to uppercase upon assignment.
 
 @item --enable-casemod-expansion
@@ -8930,7 +9482,7 @@ Include support for the extended pattern matching features described
 above under @ref{Pattern Matching}.
 
 @item --enable-extended-glob-default
-Set the default value of the @var{extglob} shell option described
+Set the default value of the @code{extglob} shell option described
 above under @ref{The Shopt Builtin} to be enabled.
 
 @item --enable-function-import
@@ -8939,7 +9491,7 @@ instance of the shell from the environment.  This option is enabled by
 default.
 
 @item --enable-glob-asciirange-default
-Set the default value of the @var{globasciiranges} shell option described
+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.
@@ -8994,10 +9546,6 @@ when called as @code{rbash}, enters a restricted mode.  See
 Include the @code{select} compound command, which allows the generation of
 simple menus (@pxref{Conditional Constructs}).
 
-@item --enable-separate-helpfiles
-Use external files for the documentation displayed by the @code{help} builtin
-instead of storing the text internally.
-
 @item --enable-single-help-strings
 Store the text displayed by the @code{help} builtin as a single string for
 each help topic.  This aids in translating the text to different languages.
@@ -9007,6 +9555,10 @@ 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}.
 
@@ -9036,7 +9588,8 @@ 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/}.
+@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.
@@ -9197,9 +9750,9 @@ which expands to the substring of @code{var}'s value of length
 
 @item
 The expansion
-@code{$@{var/[/]}@var{pattern}@code{[/}@var{replacement}@code{]@}},
+@code{$@{@var{var}/[/]}@var{pattern}@code{[/}@var{replacement}@code{]@}},
 which matches @var{pattern} and replaces it with @var{replacement} in
-the value of @code{var}, is available (@pxref{Shell Parameter Expansion}).
+the value of @var{var}, is available (@pxref{Shell Parameter Expansion}).
 
 @item
 The expansion @code{$@{!@var{prefix}*@}} expansion, which expands to
@@ -9207,7 +9760,7 @@ the names of all shell variables whose names begin with @var{prefix},
 is available (@pxref{Shell Parameter Expansion}).
 
 @item
-Bash has @var{indirect} variable expansion using @code{$@{!word@}}
+Bash has indirect variable expansion using @code{$@{!word@}}
 (@pxref{Shell Parameter Expansion}).
 
 @item
@@ -9243,8 +9796,8 @@ The Bourne shell uses only @samp{!}.
 
 @item
 Bash implements the full set of @sc{posix} filename expansion operators,
-including @var{character classes}, @var{equivalence classes}, and
-@var{collating symbols} (@pxref{Filename Expansion}).
+including character classes, equivalence classes, and
+collating symbols (@pxref{Filename Expansion}).
 
 @item
 Bash implements extended pattern matching features when the @code{extglob}
@@ -9390,7 +9943,7 @@ 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
+the @code{.} or @code{source} builtins).  This supports the Bash
 debugger.
 
 @item
@@ -9416,7 +9969,7 @@ The @code{ERR} trap is not inherited by shell functions unless the
 The @code{trap} builtin (@pxref{Bourne Shell Builtins}) allows a
 @code{RETURN} pseudo-signal specification, similar to
 @code{EXIT} and @code{DEBUG}.
-Commands specified with an @code{RETURN} trap are executed before
+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
index 614524eb08e993804b84c69f5dcb6d9ade481d25..1a9b3edee48e3f181a52b48c817520ee6d5ef393 100644 (file)
@@ -3,11 +3,11 @@ BASH_BUILTINS(1)            General Commands Manual           BASH_BUILTINS(1)
 
 
 N\bNA\bAM\bME\bE
-       bash,  :,  .,  [, alias, bg, bind, break, builtin, caller, cd, command,
-       compgen, complete, compopt, continue, declare, dirs, disown, echo,  en-
-       able,  eval,  exec,  exit,  export, false, fc, fg, getopts, hash, help,
-       history, jobs, kill, let, local, logout, mapfile, popd, printf,  pushd,
-       pwd,  read, readonly, return, set, shift, shopt, source, suspend, test,
+       :, ., [, 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 b\bba\bas\bsh\bh(1)
 
@@ -32,21 +32,21 @@ B\bBA\bAS\bSH\bH B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
               vironment and return the exit status of the  last  command  exe-
               cuted  from  _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be.   If  _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be  does not contain a slash,
               filenames in P\bPA\bAT\bTH\bH are used  to  find  the  directory  containing
-              _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be.  The file searched for in P\bPA\bAT\bTH\bH need not be executable.
-              When b\bba\bas\bsh\bh is  not  in  _\bp_\bo_\bs_\bi_\bx  _\bm_\bo_\bd_\be,  the  current  directory  is
-              searched  if no file is found in P\bPA\bAT\bTH\bH.  If the s\bso\bou\bur\brc\bce\bep\bpa\bat\bth\bh option
-              to the s\bsh\bho\bop\bpt\bt builtin command is turned  off,  the  P\bPA\bAT\bTH\bH  is  not
-              searched.   If any _\ba_\br_\bg_\bu_\bm_\be_\bn_\bt_\bs are supplied, they become the posi-
-              tional parameters when _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be is executed.  Otherwise the  po-
-              sitional parameters are unchanged.  If the -\b-T\bT option is enabled,
-              s\bso\bou\bur\brc\bce\be inherits any trap on D\bDE\bEB\bBU\bUG\bG; if it is not, any D\bDE\bEB\bBU\bUG\bG  trap
-              string  is  saved  and  restored  around the call to s\bso\bou\bur\brc\bce\be, and
-              s\bso\bou\bur\brc\bce\be unsets the D\bDE\bEB\bBU\bUG\bG trap while it executes.  If  -\b-T\bT  is  not
-              set,  and the sourced file changes the D\bDE\bEB\bBU\bUG\bG trap, the new value
-              is retained when s\bso\bou\bur\brc\bce\be completes.  The  return  status  is  the
-              status  of  the  last  command exited within the script (0 if no
-              commands are executed), and false if _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be is  not  found  or
-              cannot be read.
+              _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be, but _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be does not need to be executable.  The file
+              searched for in P\bPA\bAT\bTH\bH need not be executable.  When b\bba\bas\bsh\bh  is  not
+              in  _\bp_\bo_\bs_\bi_\bx  _\bm_\bo_\bd_\be, it searches the current directory if no file is
+              found in P\bPA\bAT\bTH\bH.  If the s\bso\bou\bur\brc\bce\bep\bpa\bat\bth\bh option to  the  s\bsh\bho\bop\bpt\bt  builtin
+              command  is  turned off, the P\bPA\bAT\bTH\bH is not searched.  If any _\ba_\br_\bg_\bu_\b-
+              _\bm_\be_\bn_\bt_\bs are supplied, they become the positional  parameters  when
+              _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be  is  executed.  Otherwise the positional parameters are
+              unchanged.  If the -\b-T\bT option is enabled, .\b. inherits any trap  on
+              D\bDE\bEB\bBU\bUG\bG; if it is not, any D\bDE\bEB\bBU\bUG\bG trap string is saved and restored
+              around the call to .\b., and .\b. unsets the D\bDE\bEB\bBU\bUG\bG trap while it  exe-
+              cutes.  If -\b-T\bT is not set, and the sourced file changes the D\bDE\bEB\bBU\bUG\bG
+              trap, the new value is retained when .\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 _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be is
+              not found or cannot be read.
 
        a\bal\bli\bia\bas\bs [-\b-p\bp] [_\bn_\ba_\bm_\be[=_\bv_\ba_\bl_\bu_\be] ...]
               A\bAl\bli\bia\bas\bs with no arguments or with the -\b-p\bp option prints the list of
@@ -73,29 +73,31 @@ B\bBA\bAS\bSH\bH B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
        b\bbi\bin\bnd\bd [-\b-m\bm _\bk_\be_\by_\bm_\ba_\bp] -\b-x\bx _\bk_\be_\by_\bs_\be_\bq:_\bs_\bh_\be_\bl_\bl_\b-_\bc_\bo_\bm_\bm_\ba_\bn_\bd
        b\bbi\bin\bnd\bd [-\b-m\bm _\bk_\be_\by_\bm_\ba_\bp] _\bk_\be_\by_\bs_\be_\bq:_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn_\b-_\bn_\ba_\bm_\be
        b\bbi\bin\bnd\bd [-\b-m\bm _\bk_\be_\by_\bm_\ba_\bp] _\bk_\be_\by_\bs_\be_\bq:_\br_\be_\ba_\bd_\bl_\bi_\bn_\be_\b-_\bc_\bo_\bm_\bm_\ba_\bn_\bd
+       b\bbi\bin\bnd\bd _\br_\be_\ba_\bd_\bl_\bi_\bn_\be_\b-_\bc_\bo_\bm_\bm_\ba_\bn_\bd_\b-_\bl_\bi_\bn_\be
               Display current r\bre\bea\bad\bdl\bli\bin\bne\be key and function bindings, bind  a  key
               sequence  to  a  r\bre\bea\bad\bdl\bli\bin\bne\be  function  or macro, or set a r\bre\bea\bad\bdl\bli\bin\bne\be
               variable.  Each non-option argument is a command as it would ap-
-              pear  in _\b._\bi_\bn_\bp_\bu_\bt_\br_\bc, but each binding or command must be passed as
-              a separate argument; e.g., '"\C-x\C-r": re-read-init-file'.  Op-
-              tions, if supplied, have the following meanings:
+              pear  in  a  r\bre\bea\bad\bdl\bli\bin\bne\be  initialization file such as _\b._\bi_\bn_\bp_\bu_\bt_\br_\bc, 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:
               -\b-m\bm _\bk_\be_\by_\bm_\ba_\bp
                      Use _\bk_\be_\by_\bm_\ba_\bp as the keymap to be affected by the subsequent
                      bindings.  Acceptable _\bk_\be_\by_\bm_\ba_\bp names are _\be_\bm_\ba_\bc_\bs_\b, _\be_\bm_\ba_\bc_\bs_\b-_\bs_\bt_\ba_\bn_\b-
-                     _\bd_\ba_\br_\bd_\b _\be_\bm_\ba_\bc_\bs_\b-_\bm_\be_\bt_\ba_\b,  _\be_\bm_\ba_\bc_\bs_\b-_\bc_\bt_\bl_\bx_\b,  _\bv_\bi_\b, _\bv_\bi_\b-_\bm_\bo_\bv_\be_\b, _\bv_\bi_\b-_\bc_\bo_\bm_\bm_\ba_\bn_\bd,
-                     and _\bv_\bi_\b-_\bi_\bn_\bs_\be_\br_\bt.  _\bv_\bi is equivalent to  _\bv_\bi_\b-_\bc_\bo_\bm_\bm_\ba_\bn_\b (_\bv_\bi_\b-_\bm_\bo_\bv_\be
-                     is  also  a  synonym); _\be_\bm_\ba_\bc_\bs is equivalent to _\be_\bm_\ba_\bc_\bs_\b-_\bs_\bt_\ba_\bn_\b-
+                     _\bd_\ba_\br_\bd_\b_\be_\bm_\ba_\bc_\bs_\b-_\bm_\be_\bt_\ba_\b, _\be_\bm_\ba_\bc_\bs_\b-_\bc_\bt_\bl_\bx_\b,  _\bv_\bi_\b,  _\bv_\bi_\b-_\bm_\bo_\bv_\be_\b _\bv_\bi_\b-_\bc_\bo_\bm_\bm_\ba_\bn_\bd,
+                     and  _\bv_\bi_\b-_\bi_\bn_\bs_\be_\br_\bt.   _\bv_\bi is equivalent to _\bv_\bi_\b-_\bc_\bo_\bm_\bm_\ba_\bn_\bd (_\bv_\bi_\b-_\bm_\bo_\bv_\be
+                     is also a synonym); _\be_\bm_\ba_\bc_\bs is  equivalent  to  _\be_\bm_\ba_\bc_\bs_\b-_\bs_\bt_\ba_\bn_\b-
                      _\bd_\ba_\br_\bd.
               -\b-l\bl     List the names of all r\bre\bea\bad\bdl\bli\bin\bne\be functions.
-              -\b-p\bp     Display r\bre\bea\bad\bdl\bli\bin\bne\be function names and bindings  in  such  a
+              -\b-p\bp     Display  r\bre\bea\bad\bdl\bli\bin\bne\be  function  names and bindings in such a
                      way that they can be re-read.
               -\b-P\bP     List current r\bre\bea\bad\bdl\bli\bin\bne\be function names and bindings.
-              -\b-s\bs     Display  r\bre\bea\bad\bdl\bli\bin\bne\be  key  sequences bound to macros and the
-                     strings they output in such a way that they  can  be  re-
+              -\b-s\bs     Display r\bre\bea\bad\bdl\bli\bin\bne\be key sequences bound to  macros  and  the
+                     strings  they  output  in such a way that they can be re-
                      read.
-              -\b-S\bS     Display  r\bre\bea\bad\bdl\bli\bin\bne\be  key  sequences bound to macros and the
+              -\b-S\bS     Display r\bre\bea\bad\bdl\bli\bin\bne\be key sequences bound to  macros  and  the
                      strings they output.
-              -\b-v\bv     Display r\bre\bea\bad\bdl\bli\bin\bne\be variable names and values in such a  way
+              -\b-v\bv     Display  r\bre\bea\bad\bdl\bli\bin\bne\be variable names and values in such a way
                      that they can be re-read.
               -\b-V\bV     List current r\bre\bea\bad\bdl\bli\bin\bne\be variable names and values.
               -\b-f\bf _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be
@@ -108,14 +110,17 @@ B\bBA\bAS\bSH\bH B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
                      Remove any current binding for _\bk_\be_\by_\bs_\be_\bq.
               -\b-x\bx _\bk_\be_\by_\bs_\be_\bq:\b:_\bs_\bh_\be_\bl_\bl_\b-_\bc_\bo_\bm_\bm_\ba_\bn_\bd
                      Cause _\bs_\bh_\be_\bl_\bl_\b-_\bc_\bo_\bm_\bm_\ba_\bn_\bd to be executed whenever _\bk_\be_\by_\bs_\be_\bq is en-
-                     tered.  When _\bs_\bh_\be_\bl_\bl_\b-_\bc_\bo_\bm_\bm_\ba_\bn_\bd is executed,  the  shell  sets
-                     the  R\bRE\bEA\bAD\bDL\bLI\bIN\bNE\bE_\b_L\bLI\bIN\bNE\bE  variable to the contents of the r\bre\bea\bad\bd-\b-
+                     tered.   When  _\bs_\bh_\be_\bl_\bl_\b-_\bc_\bo_\bm_\bm_\ba_\bn_\bd  is executed, the shell sets
+                     the R\bRE\bEA\bAD\bDL\bLI\bIN\bNE\bE_\b_L\bLI\bIN\bNE\bE variable to the contents of  the  r\bre\bea\bad\bd-\b-
                      l\bli\bin\bne\be line buffer and the R\bRE\bEA\bAD\bDL\bLI\bIN\bNE\bE_\b_P\bPO\bOI\bIN\bNT\bT and R\bRE\bEA\bAD\bDL\bLI\bIN\bNE\bE_\b_M\bMA\bAR\bRK\bK
-                     variables  to the current location of the insertion point
-                     and the saved insertion point (the  mark),  respectively.
-                     If the executed command changes the value of any of R\bRE\bEA\bAD\bD-\b-
-                     L\bLI\bIN\bNE\bE_\b_L\bLI\bIN\bNE\bE, R\bRE\bEA\bAD\bDL\bLI\bIN\bNE\bE_\b_P\bPO\bOI\bIN\bNT\bT, or  R\bRE\bEA\bAD\bDL\bLI\bIN\bNE\bE_\b_M\bMA\bAR\bRK\bK,  those  new
-                     values will be reflected in the editing state.
+                     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 R\bRE\bEA\bAD\bDL\bLI\bIN\bNE\bE_\b_A\bAR\bRG\bGU\bUM\bME\bEN\bNT\bT variable.  If there was no argu-
+                     ment, that variable is not set.  If the executed  command
+                     changes   the   value  of  any  of  R\bRE\bEA\bAD\bDL\bLI\bIN\bNE\bE_\b_L\bLI\bIN\bNE\bE,  R\bRE\bEA\bAD\bD-\b-
+                     L\bLI\bIN\bNE\bE_\b_P\bPO\bOI\bIN\bNT\bT, or R\bRE\bEA\bAD\bDL\bLI\bIN\bNE\bE_\b_M\bMA\bAR\bRK\bK, those new  values  will  be
+                     reflected in the editing state.
               -\b-X\bX     List  all  key  sequences bound to shell commands and the
                      associated commands in a format that can be reused as in-
                      put.
@@ -153,92 +158,94 @@ B\bBA\bAS\bSH\bH B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
 
        c\bcd\bd [-\b-L\bL|[-\b-P\bP [-\b-e\be]] [-@]] [_\bd_\bi_\br]
               Change  the  current  directory to _\bd_\bi_\br.  if _\bd_\bi_\br is not supplied,
-              the value of the H\bHO\bOM\bME\bE shell variable is the default.  Any  addi-
-              tional arguments following _\bd_\bi_\br are ignored.  The variable C\bCD\bDP\bPA\bAT\bTH\bH
-              defines the search path for the directory containing  _\bd_\bi_\br:  each
-              directory  name  in C\bCD\bDP\bPA\bAT\bTH\bH is searched for _\bd_\bi_\br.  Alternative di-
-              rectory names in C\bCD\bDP\bPA\bAT\bTH\bH are separated by a colon  (:).   A  null
-              directory  name  in C\bCD\bDP\bPA\bAT\bTH\bH is the same as the current directory,
-              i.e., ``.\b.''.  If _\bd_\bi_\br begins with a slash (/), then C\bCD\bDP\bPA\bAT\bTH\bH is not
-              used.   The  -\b-P\bP  option  causes c\bcd\bd to use the physical directory
-              structure by resolving symbolic links while traversing  _\bd_\bi_\br  and
-              before processing instances of _\b._\b. in _\bd_\bi_\br (see also the -\b-P\bP option
-              to the s\bse\bet\bt builtin command); the -\b-L\bL option forces symbolic links
-              to  be followed by resolving the link after processing instances
-              of _\b._\b. in _\bd_\bi_\br.  If _\b._\b. appears in _\bd_\bi_\br, it is processed by removing
-              the  immediately previous pathname component from _\bd_\bi_\br, back to a
-              slash or the beginning of _\bd_\bi_\br.  If the  -\b-e\be  option  is  supplied
-              with  -\b-P\bP,  and  the current working directory cannot be success-
-              fully determined after a successful directory  change,  c\bcd\bd  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- is converted to $\b$O\bOL\bLD\bDP\bPW\bWD\bD
-              before the directory change is attempted.  If a non-empty direc-
-              tory  name  from  C\bCD\bDP\bPA\bAT\bTH\bH is used, or if -\b- is the first argument,
-              and the directory change is successful, the absolute pathname of
-              the  new  working  directory  is written to the standard output.
-              The return value is  true  if  the  directory  was  successfully
-              changed; false otherwise.
+              the value of the H\bHO\bOM\bME\bE shell variable is the default.  The  vari-
+              able C\bCD\bDP\bPA\bAT\bTH\bH defines the search path for the directory containing
+              _\bd_\bi_\br: each directory name in C\bCD\bDP\bPA\bAT\bTH\bH is searched for _\bd_\bi_\br.   Alter-
+              native  directory  names in C\bCD\bDP\bPA\bAT\bTH\bH are separated by a colon (:).
+              A null directory name in C\bCD\bDP\bPA\bAT\bTH\bH is the same as the  current  di-
+              rectory,  i.e., ``.\b.''.  If _\bd_\bi_\br begins with a slash (/), then C\bCD\bD-\b-
+              P\bPA\bAT\bTH\bH is not used.  The -\b-P\bP option causes c\bcd\bd to use  the  physical
+              directory structure by resolving symbolic links while traversing
+              _\bd_\bi_\br and before processing instances of _\b._\b. in _\bd_\bi_\br (see  also  the
+              -\b-P\bP option to the s\bse\bet\bt builtin command); the -\b-L\bL option forces sym-
+              bolic links to be followed by resolving the link after  process-
+              ing  instances  of  _\b._\b. in _\bd_\bi_\br.  If _\b._\b. appears in _\bd_\bi_\br, it is pro-
+              cessed by removing the immediately previous  pathname  component
+              from  _\bd_\bi_\br,  back  to a slash or the beginning of _\bd_\bi_\br.  If the -\b-e\be
+              option is supplied with -\b-P\bP, and the  current  working  directory
+              cannot  be  successfully determined after a successful directory
+              change, c\bcd\bd will return an unsuccessful status.  On systems  that
+              support it, the -\b-@\b@ option presents the extended attributes asso-
+              ciated with a file as a directory.  An argument  of  -\b-  is  con-
+              verted  to $\b$O\bOL\bLD\bDP\bPW\bWD\bD before the directory change is attempted.  If
+              a non-empty directory name from C\bCD\bDP\bPA\bAT\bTH\bH is used, or if -\b-  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, c\bcd\bd sets
+              the value of the P\bPW\bWD\bD environment variable to the  new  directory
+              name,  and  sets the O\bOL\bLD\bDP\bPW\bWD\bD 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.
 
        c\bco\bom\bmm\bma\ban\bnd\bd [-\b-p\bpV\bVv\bv] _\bc_\bo_\bm_\bm_\ba_\bn_\bd [_\ba_\br_\bg ...]
-              Run  _\bc_\bo_\bm_\bm_\ba_\bn_\bd  with  _\ba_\br_\bg_\bs  suppressing  the normal shell function
+              Run _\bc_\bo_\bm_\bm_\ba_\bn_\bd with _\ba_\br_\bg_\bs  suppressing  the  normal  shell  function
               lookup.  Only builtin commands or commands found in the P\bPA\bAT\bTH\bH are
-              executed.   If the -\b-p\bp option is given, the search for _\bc_\bo_\bm_\bm_\ba_\bn_\bd is
-              performed using a default value for P\bPA\bAT\bTH\bH that is  guaranteed  to
-              find  all of the standard utilities.  If either the -\b-V\bV or -\b-v\bv op-
-              tion is supplied, a description of _\bc_\bo_\bm_\bm_\ba_\bn_\bd is printed.   The  -\b-v\bv
-              option  causes  a single word indicating the command or filename
+              executed.  If the -\b-p\bp option is given, the search for _\bc_\bo_\bm_\bm_\ba_\bn_\b is
+              performed  using  a default value for P\bPA\bAT\bTH\bH that is guaranteed to
+              find all of the standard utilities.  If either the -\b-V\bV or -\b-v\b op-
+              tion  is  supplied, a description of _\bc_\bo_\bm_\bm_\ba_\bn_\bd is printed.  The -\b-v\bv
+              option causes a single word indicating the command  or  filename
               used to invoke _\bc_\bo_\bm_\bm_\ba_\bn_\bd to be displayed; the -\b-V\bV option produces a
-              more  verbose  description.  If the -\b-V\bV or -\b-v\bv option is supplied,
-              the exit status is 0 if _\bc_\bo_\bm_\bm_\ba_\bn_\bd was found, and  1  if  not.   If
+              more verbose description.  If the -\b-V\bV or -\b-v\bv option  is  supplied,
+              the  exit  status  is  0 if _\bc_\bo_\bm_\bm_\ba_\bn_\bd was found, and 1 if not.  If
               neither option is supplied and an error occurred or _\bc_\bo_\bm_\bm_\ba_\bn_\bd can-
-              not be found, the exit status is 127.  Otherwise, the exit  sta-
+              not  be found, the exit status is 127.  Otherwise, the exit sta-
               tus of the c\bco\bom\bmm\bma\ban\bnd\bd builtin is the exit status of _\bc_\bo_\bm_\bm_\ba_\bn_\bd.
 
        c\bco\bom\bmp\bpg\bge\ben\bn [_\bo_\bp_\bt_\bi_\bo_\bn] [_\bw_\bo_\br_\bd]
-              Generate  possible  completion matches for _\bw_\bo_\br_\bd according to the
-              _\bo_\bp_\bt_\bi_\bo_\bns, which may  be  any  option  accepted  by  the  c\bco\bom\bmp\bpl\ble\bet\bte\be
-              builtin  with  the exception of -\b-p\bp and -\b-r\br, and write the matches
-              to the standard output.  When using the -\b-F\bF or  -\b-C\bC  options,  the
-              various  shell  variables set by the programmable completion fa-
+              Generate possible completion matches for _\bw_\bo_\br_\bd according  to  the
+              _\bo_\bp_\bt_\bi_\bo_\bns,  which  may  be  any  option  accepted  by the c\bco\bom\bmp\bpl\ble\bet\bte\be
+              builtin with the exception of -\b-p\bp and -\b-r\br, and write  the  matches
+              to  the  standard  output.  When using the -\b-F\bF or -\b-C\bC 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 _\bw_\bo_\br_\bd  is  specified,
+              tion  specification  with the same flags.  If _\bw_\bo_\br_\bd is specified,
               only those completions matching _\bw_\bo_\br_\bd will be displayed.
 
-              The  return  value is true unless an invalid option is supplied,
+              The return value is true unless an invalid option  is  supplied,
               or no matches were generated.
 
-       c\bco\bom\bmp\bpl\ble\bet\bte\b[-\b-a\bab\bbc\bcd\bde\bef\bfg\bgj\bjk\bks\bsu\buv\bv] [-\b-o\bo _\bc_\bo_\bm_\bp_\b-_\bo_\bp_\bt_\bi_\bo_\bn] [-\b-D\bDE\bEI\bI] [-\b-A\bA _\ba_\bc_\bt_\bi_\bo_\bn] [-\b-G\b _\bg_\bl_\bo_\bb_\b-
+       c\bco\bom\bmp\bpl\ble\bet\bte\b [-\b-a\bab\bbc\bcd\bde\bef\bfg\bgj\bjk\bks\bsu\buv\bv] [-\b-o\bo _\bc_\bo_\bm_\bp_\b-_\bo_\bp_\bt_\bi_\bo_\bn] [-\b-D\bDE\bEI\bI] [-\b-A\bA _\ba_\bc_\bt_\bi_\bo_\bn] [-\b-G\bG _\bg_\bl_\bo_\bb_\b-
        _\bp_\ba_\bt] [-\b-W\bW _\bw_\bo_\br_\bd_\bl_\bi_\bs_\bt]
-              [-\b-F\b _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn]  [-\b-C\bC _\bc_\bo_\bm_\bm_\ba_\bn_\bd] [-\b-X\bX _\bf_\bi_\bl_\bt_\be_\br_\bp_\ba_\bt] [-\b-P\bP _\bp_\br_\be_\bf_\bi_\bx] [-\b-S\bS _\bs_\bu_\bf_\b-
+              [-\b-F\b_\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn] [-\b-C\bC _\bc_\bo_\bm_\bm_\ba_\bn_\bd] [-\b-X\bX _\bf_\bi_\bl_\bt_\be_\br_\bp_\ba_\bt] [-\b-P\bP _\bp_\br_\be_\bf_\bi_\bx]  [-\b-S\b _\bs_\bu_\bf_\b-
               _\bf_\bi_\bx] _\bn_\ba_\bm_\be [_\bn_\ba_\bm_\be _\b._\b._\b.]
        c\bco\bom\bmp\bpl\ble\bet\bte\be -\b-p\bpr\br [-\b-D\bDE\bEI\bI] [_\bn_\ba_\bm_\be ...]
-              Specify how arguments to each _\bn_\ba_\bm_\be 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
+              Specify  how arguments to each _\bn_\ba_\bm_\be should be completed.  If the
+              -\b-p\boption 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\br option removes a completion spec-
-              ification for each _\bn_\ba_\bm_\be, or, if no _\bn_\ba_\bm_\bes are supplied, all  com-
+              ification  for each _\bn_\ba_\bm_\be, or, if no _\bn_\ba_\bm_\bes are supplied, all com-
               pletion specifications.  The -\b-D\bD 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 -\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\bI 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; or |\b|, which is usually command  name  completion.   If
-              multiple  options  are  supplied, the -\b-D\bD option takes precedence
+              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 -\b-E\bE 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\bI 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;  or |\b|, which is usually command name completion.  If
+              multiple options are supplied, the -\b-D\bD  option  takes  precedence
               over -\b-E\bE, and both take precedence over -\b-I\bI.  If any of -\b-D\bD, -\b-E\bE, or
-              -\b-I\b are  supplied,  any  other _\bn_\ba_\bm_\be arguments are ignored; these
+              -\b-I\bare supplied, any other _\bn_\ba_\bm_\be  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 P\bPr\bro\bog\bgr\bra\bam\bm-\b-
-              m\bma\bab\bbl\ble\be C\bCo\bom\bmp\bpl\ble\bet\bti\bio\bon\bn.
+              The  process  of  applying  these completion specifications when
+              word completion is attempted is described in _\bb_\ba_\bs_\bh_\b(_\b1_\b).
 
               Other options, if specified, have the following  meanings.   The
               arguments  to the -\b-G\bG, -\b-W\bW, and -\b-X\bX options (and, if necessary, the
@@ -320,196 +327,197 @@ B\bBA\bAS\bSH\bH B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
                               ified as -\b-v\bv.
               -\b-C\bC _\bc_\bo_\bm_\bm_\ba_\bn_\bd
                       _\bc_\bo_\bm_\bm_\ba_\bn_\bd is executed in a subshell environment,  and  its
-                      output is used as the possible completions.
+                      output  is  used as the possible completions.  Arguments
+                      are passed as with the -\b-F\bF option.
               -\b-F\bF _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn
-                      The  shell  function _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn is executed in the current
-                      shell environment.  When the function is  executed,  the
+                      The shell function _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn is executed in  the  current
+                      shell  environment.   When the function is executed, the
                       first argument ($\b$1\b1) is the name of the command whose ar-
                       guments are being completed, the second argument ($\b$2\b2) is
                       the word being completed, and the third argument ($\b$3\b3) 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  C\bCO\bOM\bMP\bPR\bRE\bEP\bPL\bLY\bY
+                      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 C\bCO\bOM\bMP\bPR\bRE\bEP\bPL\bLY\bY
                       array variable.
               -\b-G\bG _\bg_\bl_\bo_\bb_\bp_\ba_\bt
-                      The  pathname  expansion  pattern _\bg_\bl_\bo_\bb_\bp_\ba_\bt is expanded to
+                      The pathname expansion pattern _\bg_\bl_\bo_\bb_\bp_\ba_\bt  is  expanded  to
                       generate the possible completions.
               -\b-P\bP _\bp_\br_\be_\bf_\bi_\bx
-                      _\bp_\br_\be_\bf_\bi_\bis added at the beginning of each  possible  com-
+                      _\bp_\br_\be_\bf_\bi_\b is  added at the beginning of each possible com-
                       pletion after all other options have been applied.
               -\b-S\bS _\bs_\bu_\bf_\bf_\bi_\bx
                       _\bs_\bu_\bf_\bf_\bi_\bx is appended to each possible completion after all
                       other options have been applied.
               -\b-W\bW _\bw_\bo_\br_\bd_\bl_\bi_\bs_\bt
-                      The _\bw_\bo_\br_\bd_\bl_\bi_\bs_\bt is split using the characters  in  the  I\bIF\bFS\bS
-                      special  variable as delimiters, and each resultant word
-                      is expanded.  Shell quoting is honored within  _\bw_\bo_\br_\bd_\bl_\bi_\bs_\bt,
+                      The  _\bw_\bo_\br_\bd_\bl_\bi_\bs_\bt  is  split using the characters in the I\bIF\bFS\bS
+                      special variable as delimiters, and each resultant  word
+                      is  expanded.  Shell quoting is honored within _\bw_\bo_\br_\bd_\bl_\bi_\bs_\bt,
                       in order to provide a mechanism for the words to contain
-                      shell metacharacters or characters in the value of  I\bIF\bFS\bS.
-                      The  possible  completions are the members of the resul-
+                      shell  metacharacters or characters in the value of I\bIF\bFS\bS.
+                      The possible completions are the members of  the  resul-
                       tant list which match the word being completed.
               -\b-X\bX _\bf_\bi_\bl_\bt_\be_\br_\bp_\ba_\bt
-                      _\bf_\bi_\bl_\bt_\be_\br_\bp_\ba_\bis a pattern as used for  pathname  expansion.
+                      _\bf_\bi_\bl_\bt_\be_\br_\bp_\ba_\b 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 _\bf_\bi_\bl_\bt_\be_\br_\bp_\ba_\bt is removed from the list.
-                      A leading !\b! in _\bf_\bi_\bl_\bt_\be_\br_\bp_\ba_\bt negates the  pattern;  in  this
+                      ated  by  the  preceding options and arguments, and each
+                      completion matching _\bf_\bi_\bl_\bt_\be_\br_\bp_\ba_\bt is removed from the  list.
+                      A  leading  !\b!  in _\bf_\bi_\bl_\bt_\be_\br_\bp_\ba_\bt negates the pattern; in this
                       case, any completion not matching _\bf_\bi_\bl_\bt_\be_\br_\bp_\ba_\bt is removed.
 
-              The  return  value is true unless an invalid option is supplied,
-              an option other than -\b-p\bp or -\b-r\br is supplied without a  _\bn_\ba_\bm_\b argu-
-              ment,  an  attempt  is made to remove a completion specification
+              The return value is true unless an invalid option  is  supplied,
+              an  option  other than -\b-p\bp or -\b-r\br is supplied without a _\bn_\ba_\bm_\be argu-
+              ment, an attempt is made to remove  a  completion  specification
               for a _\bn_\ba_\bm_\be for which no specification exists, or an error occurs
               adding a completion specification.
 
        c\bco\bom\bmp\bpo\bop\bpt\bt [-\b-o\bo _\bo_\bp_\bt_\bi_\bo_\bn] [-\b-D\bDE\bEI\bI] [+\b+o\bo _\bo_\bp_\bt_\bi_\bo_\bn] [_\bn_\ba_\bm_\be]
-              Modify  completion  options  for  each _\bn_\ba_\bm_\be according to the _\bo_\bp_\b-
+              Modify completion options for each _\bn_\ba_\bm_\be  according  to  the  _\bo_\bp_\b-
               _\bt_\bi_\bo_\bns, or for the currently-executing completion if no _\bn_\ba_\bm_\bes are
-              supplied.   If  no _\bo_\bp_\bt_\bi_\bo_\bns are given, display the completion op-
-              tions for each _\bn_\ba_\bm_\be or the  current  completion.   The  possible
-              values  of  _\bo_\bp_\bt_\bi_\bo_\bn  are those valid for the c\bco\bom\bmp\bpl\ble\bet\bte\be builtin de-
-              scribed above.  The -\b-D\bD 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
+              supplied.  If no _\bo_\bp_\bt_\bi_\bo_\bns are given, display the  completion  op-
+              tions  for  each  _\bn_\ba_\bm_\be  or the current completion.  The possible
+              values of _\bo_\bp_\bt_\bi_\bo_\bn are those valid for the  c\bco\bom\bmp\bpl\ble\bet\bte\be  builtin  de-
+              scribed  above.  The -\b-D\bD 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 -\b-E\bE option indicates that other
-              supplied options should apply to ``empty''  command  completion;
-              that  is,  completion  attempted on a blank line.  The -\b-I\bI option
+              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 com-
-              mand delimiter such as ;\b; or |\b|, which  is  usually  command  name
+              on the initial non-assignment word on the line, or after a  com-
+              mand  delimiter  such  as  ;\b; or |\b|, which is usually command name
               completion.
 
-              The  return  value is true unless an invalid option is supplied,
+              The return value is true unless an invalid option  is  supplied,
               an attempt is made to modify the options for a _\bn_\ba_\bm_\be for which no
               completion specification exists, or an output error occurs.
 
        c\bco\bon\bnt\bti\bin\bnu\bue\be [_\bn]
               Resume the next iteration of the enclosing f\bfo\bor\br, w\bwh\bhi\bil\ble\be, u\bun\bnt\bti\bil\bl, or
-              s\bse\bel\ble\bec\bct\bloop.  If _\bn is specified, resume  at  the  _\bnth  enclosing
-              loop.   _\bn  must be >= 1.  If _\bn 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 _\bn is not greater than
+              s\bse\bel\ble\bec\bct\b loop.   If  _\bn  is specified, resume at the _\bnth enclosing
+              loop.  _\bn must be >= 1.  If _\bn 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 _\bn is not greater  than
               or equal to 1.
 
        d\bde\bec\bcl\bla\bar\bre\be [-\b-a\baA\bAf\bfF\bFg\bgi\biI\bIl\bln\bnr\brt\btu\bux\bx] [-\b-p\bp] [_\bn_\ba_\bm_\be[=_\bv_\ba_\bl_\bu_\be] ...]
        t\bty\byp\bpe\bes\bse\bet\bt [-\b-a\baA\bAf\bfF\bFg\bgi\biI\bIl\bln\bnr\brt\btu\bux\bx] [-\b-p\bp] [_\bn_\ba_\bm_\be[=_\bv_\ba_\bl_\bu_\be] ...]
-              Declare variables and/or give them attributes.  If no _\bn_\ba_\bm_\bes  are
-              given  then display the values of variables.  The -\b-p\bp option will
+              Declare  variables and/or give them attributes.  If no _\bn_\ba_\bm_\bes are
+              given then display the values of variables.  The -\b-p\bp option  will
               display the attributes and values of each _\bn_\ba_\bm_\be.  When -\b-p\bp is used
-              with  _\bn_\ba_\bm_\be  arguments, additional options, other than -\b-f\bf and -\b-F\bF,
-              are ignored.  When -\b-p\bp is supplied  without  _\bn_\ba_\bm_\be  arguments,  it
-              will  display  the attributes and values of all variables having
+              with _\bn_\ba_\bm_\be arguments, additional options, other than -\b-f\bf  and  -\b-F\bF,
+              are  ignored.   When  -\b-p\bp  is supplied without _\bn_\ba_\bm_\be 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\bp,  d\bde\bec\bcl\bla\bar\bre\be  will display the at-
-              tributes and values of all shell variables.  The -\b-f\bf option  will
+              options are supplied with  -\b-p\bp,  d\bde\bec\bcl\bla\bar\bre\be  will  display  the  at-
+              tributes  and values of all shell variables.  The -\b-f\bf option will
               restrict the display to shell functions.  The -\b-F\bF option inhibits
-              the display of function definitions; only the function name  and
+              the  display of function definitions; only the function name and
               attributes are printed.  If the e\bex\bxt\btd\bde\beb\bbu\bug\bg shell option is enabled
-              using s\bsh\bho\bop\bpt\bt, the source file name and  line  number  where  each
-              _\bn_\ba_\bm_\b is  defined  are displayed as well.  The -\b-F\bF option implies
+              using  s\bsh\bho\bop\bpt\bt,  the  source  file name and line number where each
+              _\bn_\ba_\bm_\bis defined are displayed as well.  The  -\b-F\bF  option  implies
               -\b-f\bf.  The -\b-g\bg option forces variables to be created or modified at
               the global scope, even when d\bde\bec\bcl\bla\bar\bre\be is executed in a shell func-
-              tion.  It is ignored in all other cases.  The -\b-I\bI  option  causes
-              local  variables  to  inherit the attributes (except the _\bn_\ba_\bm_\be_\br_\be_\bf
+              tion.   It  is ignored in all other cases.  The -\b-I\bI option causes
+              local variables to inherit the attributes  (except  the  _\bn_\ba_\bm_\be_\br_\be_\bf
               attribute) and value of any existing variable with the same _\bn_\ba_\bm_\be
-              at  a  surrounding scope.  If there is no existing variable, the
+              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-
+              used to restrict output to variables with the  specified  attri-
               bute or to give variables attributes:
-              -\b-a\ba     Each _\bn_\ba_\bm_\be  is  an  indexed  array  variable  (see  A\bAr\brr\bra\bay\bys\bs
-                     above).
-              -\b-A\bA     Each  _\bn_\ba_\bm_\be  is  an associative array variable (see A\bAr\brr\bra\bay\bys\bs
-                     above).
+              -\b-a\ba     Each  _\bn_\ba_\bm_\be  is  an  indexed array variable (see A\bAr\brr\bra\bay\bys\bs in
+                     _\bb_\ba_\bs_\bh_\b(_\b1_\b)).
+              -\b-A\bA     Each _\bn_\ba_\bm_\be is an associative array variable (see A\bAr\brr\bra\bay\bys\bs in
+                     _\bb_\ba_\bs_\bh_\b(_\b1_\b)).
               -\b-f\bf     Use function names only.
               -\b-i\bi     The variable is treated as an integer; arithmetic evalua-
-                     tion  (see A\bAR\bRI\bIT\bTH\bHM\bME\bET\bTI\bIC\bC E\bEV\bVA\bAL\bLU\bUA\bAT\bTI\bIO\bON\bN above) is performed when
-                     the variable is assigned a value.
-              -\b-l\bl     When the variable is assigned  a  value,  all  upper-case
-                     characters  are  converted to lower-case.  The upper-case
+                     tion (see A\bAR\bRI\bIT\bTH\bHM\bME\bET\bTI\bIC\bC E\bEV\bVA\bAL\bLU\bUA\bAT\bTI\bIO\bON\bN in _\bb_\ba_\bs_\bh_\b(_\b1_\b)) is  performed
+                     when the variable is assigned a value.
+              -\b-l\bl     When  the  variable  is  assigned a value, all upper-case
+                     characters are converted to lower-case.   The  upper-case
                      attribute is disabled.
-              -\b-n\bn     Give each _\bn_\ba_\bm_\be the _\bn_\ba_\bm_\be_\br_\be_\bf attribute, making  it  a  name
-                     reference  to  another  variable.  That other variable is
-                     defined by the value of _\bn_\ba_\bm_\be.   All  references,  assign-
-                     ments,  and attribute modifications to _\bn_\ba_\bm_\be, except those
-                     using or changing the -\b-n\bn attribute itself, are  performed
-                     on  the variable referenced by _\bn_\ba_\bm_\be's value.  The nameref
+              -\b-n\bn     Give  each  _\bn_\ba_\bm_\be  the _\bn_\ba_\bm_\be_\br_\be_\bf attribute, making it a name
+                     reference to another variable.  That  other  variable  is
+                     defined  by  the  value of _\bn_\ba_\bm_\be.  All references, assign-
+                     ments, and attribute modifications to _\bn_\ba_\bm_\be, except  those
+                     using  or changing the -\b-n\bn attribute itself, are performed
+                     on the variable referenced by _\bn_\ba_\bm_\be's value.  The  nameref
                      attribute cannot be applied to array variables.
               -\b-r\br     Make _\bn_\ba_\bm_\bes readonly.  These names cannot then be assigned
                      values by subsequent assignment statements or unset.
               -\b-t\bt     Give each _\bn_\ba_\bm_\be the _\bt_\br_\ba_\bc_\be attribute.  Traced functions in-
-                     herit the D\bDE\bEB\bBU\bUG\bG and R\bRE\bET\bTU\bUR\bRN\bN traps from the calling  shell.
+                     herit  the D\bDE\bEB\bBU\bUG\bG and R\bRE\bET\bTU\bUR\bRN\bN traps from the calling shell.
                      The trace attribute has no special meaning for variables.
-              -\b-u\bu     When  the  variable  is  assigned a value, all lower-case
-                     characters are converted to upper-case.   The  lower-case
+              -\b-u\bu     When the variable is assigned  a  value,  all  lower-case
+                     characters  are  converted to upper-case.  The lower-case
                      attribute is disabled.
-              -\b-x\bx     Mark  _\bn_\ba_\bm_\bes for export to subsequent commands via the en-
+              -\b-x\bx     Mark _\bn_\ba_\bm_\bes for export to subsequent commands via the  en-
                      vironment.
 
-              Using `+' instead of `-' turns off the attribute  instead,  with
-              the  exceptions  that +\b+a\ba and +\b+A\bA may not be used to destroy array
-              variables and +\b+r\br will not remove the readonly  attribute.   When
+              Using  `+'  instead of `-' turns off the attribute instead, with
+              the exceptions that +\b+a\ba and +\b+A\bA may not be used to  destroy  array
+              variables  and  +\b+r\br will not remove the readonly attribute.  When
               used in a function, d\bde\bec\bcl\bla\bar\bre\be and t\bty\byp\bpe\bes\bse\bet\bt make each _\bn_\ba_\bm_\be local, as
-              with the l\blo\boc\bca\bal\bl command, unless the -\b-g\bg option is supplied.  If  a
-              variable  name  is followed by =_\bv_\ba_\bl_\bu_\be, the value of the variable
-              is set to _\bv_\ba_\bl_\bu_\be.  When using -\b-a\ba or -\b-A\bA and the  compound  assign-
-              ment  syntax to create array variables, additional attributes do
-              not take effect until subsequent assignments.  The return  value
+              with  the l\blo\boc\bca\bal\bl command, unless the -\b-g\bg option is supplied.  If a
+              variable name is followed by =_\bv_\ba_\bl_\bu_\be, the value of  the  variable
+              is  set  to _\bv_\ba_\bl_\bu_\be.  When using -\b-a\ba or -\b-A\bA 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  A\bAr\brr\bra\bay\bys\bs above), one of the _\bn_\ba_\bm_\be_\bs 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 -\b-f\bf.
+              signment syntax (see A\bAr\brr\bra\bay\bys\bs in _\bb_\ba_\bs_\bh_\b(_\b1_\b)), one of the _\bn_\ba_\bm_\be_\bs 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\bf.
 
        d\bdi\bir\brs\bs [\b[-\b-c\bcl\blp\bpv\bv]\b] [\b[+\b+_\bn]\b] [\b[-\b-_\bn]\b]
-              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 p\bpu\bus\bsh\bhd\bd command; the p\bpo\bop\bpd\bd  command  removes  entries
+              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  p\bpu\bus\bsh\bhd\bd command; the p\bpo\bop\bpd\bd command removes entries
               from the list.  The current directory is always the first direc-
               tory in the stack.
-              -\b-c\bc     Clears the directory stack by deleting  all  of  the  en-
+              -\b-c\bc     Clears  the  directory  stack  by deleting all of the en-
                      tries.
-              -\b-l\bl     Produces  a  listing  using  full  pathnames; the default
+              -\b-l\bl     Produces a listing  using  full  pathnames;  the  default
                      listing format uses a tilde to denote the home directory.
               -\b-p\bp     Print the directory stack with one entry per line.
-              -\b-v\bv     Print the directory stack with one entry per  line,  pre-
+              -\b-v\bv     Print  the  directory stack with one entry per line, pre-
                      fixing each entry with its index in the stack.
               +\b+_\bn     Displays the _\bnth entry counting from the left of the list
                      shown by d\bdi\bir\brs\bs when invoked without options, starting with
                      zero.
-              -\b-_\bn     Displays  the  _\bnth  entry  counting from the right of the
+              -\b-_\bn     Displays the _\bnth entry counting from  the  right  of  the
                      list shown by d\bdi\bir\brs\bs when invoked without options, starting
                      with zero.
 
-              The  return value is 0 unless an invalid option is supplied or _\bn
+              The return value is 0 unless an invalid option is supplied or  _\bn
               indexes beyond the end of the directory stack.
 
        d\bdi\bis\bso\bow\bwn\bn [-\b-a\bar\br] [-\b-h\bh] [_\bj_\bo_\bb_\bs_\bp_\be_\bc ... | _\bp_\bi_\bd ... ]
-              Without options, remove each _\bj_\bo_\bb_\bs_\bp_\be_\bc from the  table  of  active
-              jobs.   If _\bj_\bo_\bb_\bs_\bp_\be_\bc is not present, and neither the -\b-a\ba nor the -\b-r\br
-              option is supplied, the _\bc_\bu_\br_\br_\be_\bn_\bt _\bj_\bo_\bb is used.  If the  -\b-h\b option
-              is  given,  each  _\bj_\bo_\bb_\bs_\bp_\be_\bc  is not removed from the table, but is
-              marked so that S\bSI\bIG\bGH\bHU\bUP\bP is not sent to the job if  the  shell  re-
+              Without  options,  remove  each _\bj_\bo_\bb_\bs_\bp_\be_\bc from the table of active
+              jobs.  If _\bj_\bo_\bb_\bs_\bp_\be_\bc is not present, and neither the -\b-a\ba nor the  -\b-r\br
+              option  is  supplied, the _\bc_\bu_\br_\br_\be_\bn_\bt _\bj_\bo_\bb is used.  If the -\b-h\bh option
+              is given, each _\bj_\bo_\bb_\bs_\bp_\be_\bc is not removed from  the  table,  but  is
+              marked  so  that  S\bSI\bIG\bGH\bHU\bUP\bP is not sent to the job if the shell re-
               ceives a S\bSI\bIG\bGH\bHU\bUP\bP.  If no _\bj_\bo_\bb_\bs_\bp_\be_\bc is supplied, the -\b-a\ba option means
-              to remove or mark all jobs; the -\b-r\br option without a _\bj_\bo_\bb_\bs_\bp_\be_\b ar-
+              to  remove or mark all jobs; the -\b-r\br option without a _\bj_\bo_\bb_\bs_\bp_\be_\bc ar-
               gument restricts operation to running jobs.  The return value is
               0 unless a _\bj_\bo_\bb_\bs_\bp_\be_\bc does not specify a valid job.
 
        e\bec\bch\bho\bo [-\b-n\bne\beE\bE] [_\ba_\br_\bg ...]
-              Output the _\ba_\br_\bgs, separated by spaces,  followed  by  a  newline.
-              The  return  status  is 0 unless a write error occurs.  If -\b-n\bn is
+              Output  the  _\ba_\br_\bgs,  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\be option
-              is  given,  interpretation  of  the  following backslash-escaped
-              characters is enabled.  The -\b-E\bE option disables  the  interpreta-
-              tion  of these escape characters, even on systems where they are
-              interpreted by default.  The x\bxp\bpg\bg_\b_e\bec\bch\bho\bo shell option may  be  used
-              to  dynamically  determine whether or not e\bec\bch\bho\bo expands these es-
-              cape characters by default.  e\bec\bch\bho\bo does not interpret -\b--\b- to  mean
-              the  end  of  options.  e\bec\bch\bho\bo interprets the following escape se-
+              is given,  interpretation  of  the  following  backslash-escaped
+              characters  is  enabled.  The -\b-E\bE option disables the interpreta-
+              tion of these escape characters, even on systems where they  are
+              interpreted  by  default.  The x\bxp\bpg\bg_\b_e\bec\bch\bho\bo shell option may be used
+              to dynamically determine whether or not e\bec\bch\bho\bo expands  these  es-
+              cape  characters by default.  e\bec\bch\bho\bo does not interpret -\b--\b- to mean
+              the end of options.  e\bec\bch\bho\bo interprets the  following  escape  se-
               quences:
               \\b\a\ba     alert (bell)
               \\b\b\bb     backspace
@@ -522,194 +530,200 @@ B\bBA\bAS\bSH\bH B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
               \\b\t\bt     horizontal tab
               \\b\v\bv     vertical tab
               \\b\\\b\     backslash
-              \\b\0\b0_\bn_\bn_\bn  the eight-bit character whose value is  the  octal  value
+              \\b\0\b0_\bn_\bn_\bn  the  eight-bit  character  whose value is the octal value
                      _\bn_\bn_\bn (zero to three octal digits)
-              \\b\x\bx_\bH_\bH   the  eight-bit  character  whose value is the hexadecimal
+              \\b\x\bx_\bH_\bH   the eight-bit character whose value  is  the  hexadecimal
                      value _\bH_\bH (one or two hex digits)
-              \\b\u\bu_\bH_\bH_\bH_\bH the Unicode (ISO/IEC 10646) character whose value is  the
+              \\b\u\bu_\bH_\bH_\bH_\bH the  Unicode (ISO/IEC 10646) character whose value is the
                      hexadecimal value _\bH_\bH_\bH_\bH (one to four hex digits)
               \\b\U\bU_\bH_\bH_\bH_\bH_\bH_\bH_\bH_\bH
-                     the  Unicode (ISO/IEC 10646) character whose value is the
+                     the Unicode (ISO/IEC 10646) character whose value is  the
                      hexadecimal value _\bH_\bH_\bH_\bH_\bH_\bH_\bH_\bH (one to eight hex digits)
 
        e\ben\bna\bab\bbl\ble\be [-\b-a\ba] [-\b-d\bdn\bnp\bps\bs] [-\b-f\bf _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be] [_\bn_\ba_\bm_\be ...]
-              Enable and disable builtin shell commands.  Disabling a  builtin
+              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\bn is used, each _\bn_\ba_\bm_\be is disabled; otherwise, _\bn_\ba_\bm_\be_\bs  are  en-
-              abled.   For  example, to use the t\bte\bes\bst\bt binary found via the P\bPA\bAT\bTH\bH
-              instead of the shell builtin version, run  ``enable  -n  test''.
-              The  -\b-f\bf  option  means to load the new builtin command _\bn_\ba_\bm_\be from
+              to  be  executed without specifying a full pathname, even though
+              the shell normally searches for builtins before  disk  commands.
+              If  -\b-n\bn  is used, each _\bn_\ba_\bm_\be is disabled; otherwise, _\bn_\ba_\bm_\be_\bs are en-
+              abled.  For example, to use the t\bte\bes\bst\bt binary found via  the  P\bPA\bAT\bTH\bH
+              instead  of  the  shell builtin version, run ``enable -n test''.
+              The -\b-f\bf option means to load the new builtin  command  _\bn_\ba_\bm_\b from
               shared object _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be, on systems that support dynamic loading.
-              The  -\b-d\bd  option will delete a builtin previously loaded with -\b-f\bf.
-              If no _\bn_\ba_\bm_\be arguments are given, or if the -\b-p\bp option is supplied,
-              a list of shell builtins is printed.  With no other option argu-
-              ments, the list consists of all enabled shell builtins.   If  -\b-n\bn
-              is  supplied, only disabled builtins are printed.  If -\b-a\ba is sup-
-              plied, the list printed includes all builtins, with  an  indica-
-              tion  of whether or not each is enabled.  If -\b-s\bs is supplied, the
-              output is restricted to the POSIX _\bs_\bp_\be_\bc_\bi_\ba_\bl builtins.  The  return
-              value  is  0 unless a _\bn_\ba_\bm_\be is not a shell builtin or there is an
-              error loading a new builtin from a shared object.
+              Bash will use the value of the B\bBA\bAS\bSH\bH_\b_L\bLO\bOA\bAD\bDA\bAB\bBL\bLE\bES\bS_\b_P\bPA\bAT\bTH\bH variable as a
+              colon-separated list of directories in which to search for _\bf_\bi_\bl_\be_\b-
+              _\bn_\ba_\bm_\be.  The default is  system-dependent.   The  -\b-d\bd  option  will
+              delete  a  builtin  previously loaded with -\b-f\bf.  If no _\bn_\ba_\bm_\be argu-
+              ments are given, or if the -\b-p\bp 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\bn is supplied,
+              only disabled builtins are printed.  If -\b-a\ba is supplied, the list
+              printed includes all builtins, with an indication of whether  or
+              not  each  is  enabled.   If  -\b-s\bs  is supplied, the output is re-
+              stricted to the POSIX _\bs_\bp_\be_\bc_\bi_\ba_\bl builtins.  If no options are  sup-
+              plied  and a _\bn_\ba_\bm_\be is not a shell builtin, e\ben\bna\bab\bbl\ble\be will attempt to
+              load _\bn_\ba_\bm_\be from a shared object named _\bn_\ba_\bm_\be,  as  if  the  command
+              were  ``enable  -f  _\bn_\ba_\bm_\be  _\bn_\ba_\bm_\be .  The return value is 0 unless a
+              _\bn_\ba_\bm_\be is not a shell builtin or there is an error loading  a  new
+              builtin from a shared object.
 
        e\bev\bva\bal\bl [_\ba_\br_\bg ...]
-              The _\ba_\br_\bgs 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 e\bev\bva\bal\bl.  If there  are
+              The  _\ba_\br_\bgs  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 e\bev\bva\bal\bl.  If there are
               no _\ba_\br_\bg_\bs, or only null arguments, e\bev\bva\bal\bl returns 0.
 
        e\bex\bxe\bec\bc [-\b-c\bcl\bl] [-\b-a\ba _\bn_\ba_\bm_\be] [_\bc_\bo_\bm_\bm_\ba_\bn_\bd [_\ba_\br_\bg_\bu_\bm_\be_\bn_\bt_\bs]]
-              If  _\bc_\bo_\bm_\bm_\ba_\bn_\bd is specified, it replaces the shell.  No new process
-              is created.  The _\ba_\br_\bg_\bu_\bm_\be_\bn_\bt_\bs become the arguments to _\bc_\bo_\bm_\bm_\ba_\bn_\bd.   If
+              If _\bc_\bo_\bm_\bm_\ba_\bn_\bd is specified, it replaces the shell.  No new  process
+              is  created.  The _\ba_\br_\bg_\bu_\bm_\be_\bn_\bt_\bs become the arguments to _\bc_\bo_\bm_\bm_\ba_\bn_\bd.  If
               the -\b-l\bl option is supplied, the shell places a dash at the begin-
               ning of the zeroth argument passed to _\bc_\bo_\bm_\bm_\ba_\bn_\bd.  This is what _\bl_\bo_\b-
-              _\bg_\bi_\bn(1)  does.   The -\b-c\bc option causes _\bc_\bo_\bm_\bm_\ba_\bn_\bd to be executed with
-              an empty environment.  If -\b-a\ba is supplied, the shell passes  _\bn_\ba_\bm_\be
+              _\bg_\bi_\bn(1) does.  The -\b-c\bc option causes _\bc_\bo_\bm_\bm_\ba_\bn_\bd to be  executed  with
+              an  empty environment.  If -\b-a\ba is supplied, the shell passes _\bn_\ba_\bm_\be
               as the zeroth argument to the executed command.  If _\bc_\bo_\bm_\bm_\ba_\bn_\bd can-
-              not be executed for some reason, a non-interactive shell  exits,
-              unless  the  e\bex\bxe\bec\bcf\bfa\bai\bil\bl 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
-              e\bex\bxe\bec\bfails.  If _\bc_\bo_\bm_\bm_\ba_\bn_\bd is not specified, any redirections  take
-              effect  in  the  current  shell, and the return status is 0.  If
+              not  be executed for some reason, a non-interactive shell exits,
+              unless the e\bex\bxe\bec\bcf\bfa\bai\bil\bl 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
+              e\bex\bxe\bec\b fails.  If _\bc_\bo_\bm_\bm_\ba_\bn_\bd 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.
 
        e\bex\bxi\bit\bt [_\bn]
-              Cause the shell to exit with a status of _\bn.  If  _\bn  is  omitted,
+              Cause  the  shell  to exit with a status of _\bn.  If _\bn is omitted,
               the exit status is that of the last command executed.  A trap on
               E\bEX\bXI\bIT\bT is executed before the shell terminates.
 
        e\bex\bxp\bpo\bor\brt\bt [-\b-f\bfn\bn] [_\bn_\ba_\bm_\be[=_\bw_\bo_\br_\bd]] ...
        e\bex\bxp\bpo\bor\brt\bt -\b-p\bp
-              The supplied _\bn_\ba_\bm_\be_\bs are marked for automatic export to the  envi-
-              ronment  of subsequently executed commands.  If the -\b-f\bf option is
-              given, the _\bn_\ba_\bm_\be_\bs refer to functions.  If no _\bn_\ba_\bm_\be_\bs are given,  or
-              if  the  -\b-p\bp  option is supplied, a list of names of all exported
-              variables is printed.  The -\b-n\bn option causes the export  property
+              The  supplied _\bn_\ba_\bm_\be_\bs are marked for automatic export to the envi-
+              ronment of subsequently executed commands.  If the -\b-f\bf option  is
+              given,  the _\bn_\ba_\bm_\be_\bs refer to functions.  If no _\bn_\ba_\bm_\be_\bs are given, or
+              if the -\b-p\bp option is supplied, a list of names  of  all  exported
+              variables  is printed.  The -\b-n\bn option causes the export property
               to be removed from each _\bn_\ba_\bm_\be.  If a variable name is followed by
               =_\bw_\bo_\br_\bd, the value of the variable is set to _\bw_\bo_\br_\bd.  e\bex\bxp\bpo\bor\brt\bt returns
               an exit status of 0 unless an invalid option is encountered, one
-              of the _\bn_\ba_\bm_\be_\bs is not a valid shell variable name, or -\b-f\bf  is  sup-
+              of  the  _\bn_\ba_\bm_\be_\bs is not a valid shell variable name, or -\b-f\bf is sup-
               plied with a _\bn_\ba_\bm_\be that is not a function.
 
        f\bfc\bc [-\b-e\be _\be_\bn_\ba_\bm_\be] [-\b-l\bln\bnr\br] [_\bf_\bi_\br_\bs_\bt] [_\bl_\ba_\bs_\bt]
        f\bfc\bc -\b-s\bs [_\bp_\ba_\bt=_\br_\be_\bp] [_\bc_\bm_\bd]
-              The  first  form  selects a range of commands from _\bf_\bi_\br_\bs_\bt to _\bl_\ba_\bs_\bt
-              from the history list and  displays  or  edits  and  re-executes
-              them.   _\bF_\bi_\br_\bs_\bt  and  _\bl_\ba_\bs_\bt 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
-              _\bf_\bi_\br_\bs_\b or  _\bl_\ba_\bs_\bt of 0 is equivalent to -1 and -0 is equivalent to
-              the current command (usually the f\bfc\bc  command);  otherwise  0  is
-              equivalent  to  -1 and -0 is invalid.  If _\bl_\ba_\bs_\bt is not specified,
-              it is set to the current command for listing (so  that  ``fc  -l
-              -10''  prints  the last 10 commands) and to _\bf_\bi_\br_\bs_\bt otherwise.  If
-              _\bf_\bi_\br_\bs_\bis not specified, it is set to the  previous  command  for
+              The first form selects a range of commands from  _\bf_\bi_\br_\bs_\bt  to  _\bl_\ba_\bs_\bt
+              from  the  history  list  and  displays or edits and re-executes
+              them.  _\bF_\bi_\br_\bs_\bt and _\bl_\ba_\bs_\bt 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
+              _\bf_\bi_\br_\bs_\bor _\bl_\ba_\bs_\bt of 0 is equivalent to -1 and -0 is  equivalent  to
+              the  current  command  (usually  the f\bfc\bc command); otherwise 0 is
+              equivalent to -1 and -0 is invalid.  If _\bl_\ba_\bs_\bt is  not  specified,
+              it  is  set  to the current command for listing (so that ``fc -l
+              -10'' prints the last 10 commands) and to _\bf_\bi_\br_\bs_\bt  otherwise.   If
+              _\bf_\bi_\br_\bs_\b is  not  specified, it is set to the previous command for
               editing and -16 for listing.
 
-              The  -\b-n\bn option suppresses the command numbers when listing.  The
-              -\b-r\boption reverses the order of the commands.  If the -\b-l\b option
-              is  given,  the  commands are listed on standard output.  Other-
-              wise, the editor given by _\be_\bn_\ba_\bm_\be is invoked on a file  containing
-              those  commands.  If _\be_\bn_\ba_\bm_\be is not given, the value of the F\bFC\bCE\bED\bDI\bIT\bT
-              variable is used, and the value of E\bED\bDI\bIT\bTO\bOR\bR if F\bFC\bCE\bED\bDI\bIT\bT is not  set.
-              If  neither  variable  is set, _\bv_\bi is used.  When editing is com-
+              The -\b-n\bn option suppresses the command numbers when listing.   The
+              -\b-r\b option reverses the order of the commands.  If the -\b-l\bl option
+              is given, the commands are listed on  standard  output.   Other-
+              wise,  the editor given by _\be_\bn_\ba_\bm_\be is invoked on a file containing
+              those commands.  If _\be_\bn_\ba_\bm_\be is not given, the value of the  F\bFC\bCE\bED\bDI\bIT\bT
+              variable  is used, and the value of E\bED\bDI\bIT\bTO\bOR\bR if F\bFC\bCE\bED\bDI\bIT\bT is not set.
+              If neither variable is set, _\bv_\bi is used.  When  editing  is  com-
               plete, the edited commands are echoed and executed.
 
-              In the second form, _\bc_\bo_\bm_\bm_\ba_\bn_\bd is re-executed after  each  instance
-              of  _\bp_\ba_\bt  is replaced by _\br_\be_\bp.  _\bC_\bo_\bm_\bm_\ba_\bn_\bd is interpreted the same as
-              _\bf_\bi_\br_\bs_\babove.  A useful alias to use with this is ``r="fc  -s"'',
-              so  that  typing  ``r  cc'' runs the last command beginning with
+              In  the  second form, _\bc_\bo_\bm_\bm_\ba_\bn_\bd is re-executed after each instance
+              of _\bp_\ba_\bt is replaced by _\br_\be_\bp.  _\bC_\bo_\bm_\bm_\ba_\bn_\bd is interpreted the  same  as
+              _\bf_\bi_\br_\bs_\b 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 _\bf_\bi_\br_\bs_\bt or _\bl_\ba_\bs_\bt specify history
-              lines out of range.  If the -\b-e\be option is  supplied,  the  return
+              If  the  first form is used, the return value is 0 unless an in-
+              valid option is encountered or _\bf_\bi_\br_\bs_\bt  or  _\bl_\ba_\bs_\bt  specify  history
+              lines  out  of  range.  If the -\b-e\be 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 _\bc_\bm_\bd does not specify  a  valid  history  line,  in
+              form is used, the return status is that of the  command  re-exe-
+              cuted,  unless  _\bc_\bm_\bd  does  not  specify a valid history line, in
               which case f\bfc\bc returns failure.
 
        f\bfg\bg [_\bj_\bo_\bb_\bs_\bp_\be_\bc]
-              Resume  _\bj_\bo_\bb_\bs_\bp_\be_\bc  in the foreground, and make it the current job.
+              Resume _\bj_\bo_\bb_\bs_\bp_\be_\bc in the foreground, and make it the  current  job.
               If _\bj_\bo_\bb_\bs_\bp_\be_\bc is not present, the shell's notion of the _\bc_\bu_\br_\br_\be_\bn_\bt _\bj_\bo_\bb
-              is  used.   The  return value is that of the command placed into
-              the foreground, or failure if run when job control  is  disabled
+              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 _\bj_\bo_\bb_\bs_\bp_\be_\bc does not spec-
-              ify a valid job or _\bj_\bo_\bb_\bs_\bp_\be_\bc specifies  a  job  that  was  started
+              ify  a  valid  job  or  _\bj_\bo_\bb_\bs_\bp_\be_\bc specifies a job that was started
               without job control.
 
        g\bge\bet\bto\bop\bpt\bts\bs _\bo_\bp_\bt_\bs_\bt_\br_\bi_\bn_\bg _\bn_\ba_\bm_\be [_\ba_\br_\bg _\b._\b._\b.]
-              g\bge\bet\bto\bop\bpt\bts\b is used by shell procedures to parse positional parame-
-              ters.  _\bo_\bp_\bt_\bs_\bt_\br_\bi_\bn_\bg contains the option  characters  to  be  recog-
-              nized;  if a character is followed by a colon, the option is ex-
+              g\bge\bet\bto\bop\bpt\bts\bis used by shell procedures to parse positional  parame-
+              ters.   _\bo_\bp_\bt_\bs_\bt_\br_\bi_\bn_\bg  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,  g\bge\bet\bto\bop\bpt\bts\bs
-              places  the next option in the shell variable _\bn_\ba_\bm_\be, initializing
+              white space.  The colon and question mark characters may not  be
+              used  as  option  characters.   Each time it is invoked, g\bge\bet\bto\bop\bpt\bts\bs
+              places the next option in the shell variable _\bn_\ba_\bm_\be,  initializing
               _\bn_\ba_\bm_\be if it does not exist, and the index of the next argument to
               be processed into the variable O\bOP\bPT\bTI\bIN\bND\bD.  O\bOP\bPT\bTI\bIN\bND\bD is initialized to
               1 each time the shell or a shell script is invoked.  When an op-
               tion requires an argument, g\bge\bet\bto\bop\bpt\bts\bs places that argument into the
               variable O\bOP\bPT\bTA\bAR\bRG\bG.  The shell does not reset O\bOP\bPT\bTI\bIN\bND\bD automatically;
-              it  must  be  manually  reset  between multiple calls to g\bge\bet\bto\bop\bpt\bts\bs
-              within the same shell invocation if a new set of  parameters  is
+              it must be manually reset  between  multiple  calls  to  g\bge\bet\bto\bop\bpt\bts\bs
+              within  the  same shell invocation if a new set of parameters is
               to be used.
 
               When the end of options is encountered, g\bge\bet\bto\bop\bpt\bts\bs exits with a re-
               turn value greater than zero.  O\bOP\bPT\bTI\bIN\bND\bD is set to the index of the
               first non-option argument, and _\bn_\ba_\bm_\be is set to ?.
 
-              g\bge\bet\bto\bop\bpt\bts\b normally  parses the positional parameters, but if more
-              arguments are supplied as _\ba_\br_\bg values, g\bge\bet\bto\bop\bpt\bts\bs parses  those  in-
+              g\bge\bet\bto\bop\bpt\bts\bnormally parses the positional parameters, but  if  more
+              arguments  are  supplied as _\ba_\br_\bg values, g\bge\bet\bto\bop\bpt\bts\bs parses those in-
               stead.
 
-              g\bge\bet\bto\bop\bpt\bts\b can  report errors in two ways.  If the first character
-              of _\bo_\bp_\bt_\bs_\bt_\br_\bi_\bn_\bg is a colon, _\bs_\bi_\bl_\be_\bn_\bt error  reporting  is  used.   In
-              normal  operation,  diagnostic messages are printed when invalid
-              options or missing option arguments  are  encountered.   If  the
-              variable  O\bOP\bPT\bTE\bER\bRR\bR  is  set  to  0, no error messages will be dis-
+              g\bge\bet\bto\bop\bpt\bts\bcan report errors in two ways.  If the  first  character
+              of  _\bo_\bp_\bt_\bs_\bt_\br_\bi_\bn_\bg  is  a  colon, _\bs_\bi_\bl_\be_\bn_\bt error reporting is used.  In
+              normal operation, diagnostic messages are printed  when  invalid
+              options  or  missing  option  arguments are encountered.  If the
+              variable O\bOP\bPT\bTE\bER\bRR\bR is set to 0, no  error  messages  will  be  dis-
               played, even if the first character of _\bo_\bp_\bt_\bs_\bt_\br_\bi_\bn_\bg is not a colon.
 
               If an invalid option is seen, g\bge\bet\bto\bop\bpt\bts\bs places ? into _\bn_\ba_\bm_\be and, if
-              not  silent,  prints  an  error  message  and unsets O\bOP\bPT\bTA\bAR\bRG\bG.  If
-              g\bge\bet\bto\bop\bpt\bts\bis silent, the option character found is placed  in  O\bOP\bP-\b-
+              not silent, prints an  error  message  and  unsets  O\bOP\bPT\bTA\bAR\bRG\bG.   If
+              g\bge\bet\bto\bop\bpt\bts\b is  silent, the option character found is placed in O\bOP\bP-\b-
               T\bTA\bAR\bRG\bG and no diagnostic message is printed.
 
-              If  a required argument is not found, and g\bge\bet\bto\bop\bpt\bts\bs is not silent,
-              a question mark (?\b?) is placed in _\bn_\ba_\bm_\be, O\bOP\bPT\bTA\bAR\bRG\bG is  unset,  and  a
-              diagnostic  message  is  printed.   If g\bge\bet\bto\bop\bpt\bts\bs is silent, then a
-              colon (:\b:) is placed in _\bn_\ba_\bm_\be and O\bOP\bPT\bTA\bAR\bRG\bG  is  set  to  the  option
+              If a required argument is not found, and g\bge\bet\bto\bop\bpt\bts\bs is not  silent,
+              a  question  mark  (?\b?) is placed in _\bn_\ba_\bm_\be, O\bOP\bPT\bTA\bAR\bRG\bG is unset, and a
+              diagnostic message is printed.  If g\bge\bet\bto\bop\bpt\bts\bs  is  silent,  then  a
+              colon  (:\b:)  is  placed  in  _\bn_\ba_\bm_\be and O\bOP\bPT\bTA\bAR\bRG\bG is set to the option
               character found.
 
-              g\bge\bet\bto\bop\bpt\bts\b returns true if an option, specified or unspecified, is
+              g\bge\bet\bto\bop\bpt\bts\breturns true if an option, specified or unspecified,  is
               found.  It returns false if the end of options is encountered or
               an error occurs.
 
        h\bha\bas\bsh\bh [-\b-l\blr\br] [-\b-p\bp _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be] [-\b-d\bdt\bt] [_\bn_\ba_\bm_\be]
               Each time h\bha\bas\bsh\bh is invoked, the full pathname of the command _\bn_\ba_\bm_\be
-              is determined by searching the directories in $\b$P\bPA\bAT\bTH\bH  and  remem-
+              is  determined  by searching the directories in $\b$P\bPA\bAT\bTH\bH and remem-
               bered.  Any previously-remembered pathname is discarded.  If the
               -\b-p\bp option is supplied, no path search is performed, and _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be
-              is  used  as  the  full  filename of the command.  The -\b-r\br option
+              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\bd op-
-              tion  causes the shell to forget the remembered location of each
-              _\bn_\ba_\bm_\be.  If the -\b-t\bt option is supplied, the full pathname to  which
-              each  _\bn_\ba_\bm_\be  corresponds  is printed.  If multiple _\bn_\ba_\bm_\be arguments
+              tion causes the shell to forget the remembered location of  each
+              _\bn_\ba_\bm_\be.   If the -\b-t\bt option is supplied, the full pathname to which
+              each _\bn_\ba_\bm_\be corresponds is printed.  If  multiple  _\bn_\ba_\bm_\b arguments
               are supplied with -\b-t\bt, the _\bn_\ba_\bm_\be is printed before the hashed full
               pathname.  The -\b-l\bl option causes output to be displayed in a for-
-              mat that may be reused as input.  If no arguments are given,  or
+              mat  that may be reused as input.  If no arguments are given, or
               if only -\b-l\bl is supplied, information about remembered commands is
-              printed.  The return status is true unless a _\bn_\ba_\bm_\be is  not  found
+              printed.   The  return status is true unless a _\bn_\ba_\bm_\be is not found
               or an invalid option is supplied.
 
        h\bhe\bel\blp\bp [-\b-d\bdm\bms\bs] [_\bp_\ba_\bt_\bt_\be_\br_\bn]
-              Display  helpful information about builtin commands.  If _\bp_\ba_\bt_\bt_\be_\br_\bn
-              is specified, h\bhe\bel\blp\bp gives detailed help on all commands  matching
-              _\bp_\ba_\bt_\bt_\be_\br_\bn;  otherwise  help for all the builtins and shell control
+              Display helpful information about builtin commands.  If  _\bp_\ba_\bt_\bt_\be_\br_\bn
+              is  specified, h\bhe\bel\blp\bp gives detailed help on all commands matching
+              _\bp_\ba_\bt_\bt_\be_\br_\bn; otherwise help for all the builtins and  shell  control
               structures is printed.
               -\b-d\bd     Display a short description of each _\bp_\ba_\bt_\bt_\be_\br_\bn
               -\b-m\bm     Display the description of each _\bp_\ba_\bt_\bt_\be_\br_\bn in a manpage-like
@@ -727,70 +741,70 @@ B\bBA\bAS\bSH\bH B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
        h\bhi\bis\bst\bto\bor\bry\by -\b-s\bs _\ba_\br_\bg [_\ba_\br_\bg _\b._\b._\b.]
               With no options, display the command history list with line num-
               bers.  Lines listed with a *\b* have been modified.  An argument of
-              _\b lists only the last _\bn lines.  If the shell variable H\bHI\bIS\bST\bTT\bTI\bIM\bME\bE-\b-
-              F\bFO\bOR\bRM\bMA\bAT\bis set and not null, it is used as a  format  string  for
-              _\bs_\bt_\br_\bf_\bt_\bi_\bm_\be(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 _\bf_\bi_\bl_\be_\bn_\ba_\bm_\be is
-              supplied, it is used as the name of the history  file;  if  not,
-              the  value  of H\bHI\bIS\bST\bTF\bFI\bIL\bLE\bE is used.  Options, if supplied, have the
+              _\blists only the last _\bn lines.  If the shell variable  H\bHI\bIS\bST\bTT\bTI\bIM\bME\bE-\b-
+              F\bFO\bOR\bRM\bMA\bAT\b is  set  and not null, it is used as a format string for
+              _\bs_\bt_\br_\bf_\bt_\bi_\bm_\be(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  _\bf_\bi_\bl_\be_\bn_\ba_\bm_\b is
+              supplied,  it  is  used as the name of the history file; if not,
+              the value of H\bHI\bIS\bST\bTF\bFI\bIL\bLE\bE is used.  Options, if supplied,  have  the
               following meanings:
               -\b-c\bc     Clear the history list by deleting all the entries.
               -\b-d\bd _\bo_\bf_\bf_\bs_\be_\bt
-                     Delete the history entry at position _\bo_\bf_\bf_\bs_\be_\bt.   If  _\bo_\bf_\bf_\bs_\be_\bt
+                     Delete  the  history entry at position _\bo_\bf_\bf_\bs_\be_\bt.  If _\bo_\bf_\bf_\bs_\be_\bt
                      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
+                     back from the end of the history,  and  an  index  of  -1
                      refers to the current h\bhi\bis\bst\bto\bor\bry\by -\b-d\bd command.
               -\b-d\bd _\bs_\bt_\ba_\br_\bt-_\be_\bn_\bd
-                     Delete the history entries between  positions  _\bs_\bt_\ba_\br_\bt  and
-                     _\be_\bn_\bd,  inclusive.   Positive and negative values for _\bs_\bt_\ba_\br_\bt
-                     and _\be_\bn_\bd are interpreted as described above.
-              -\b-a\ba     Append the ``new'' history lines  to  the  history  file.
-                     These  are  history  lines entered since the beginning of
+                     Delete  the  range  of  history entries between positions
+                     _\bs_\bt_\ba_\br_\bt and _\be_\bn_\bd, inclusive.  Positive and  negative  values
+                     for _\bs_\bt_\ba_\br_\band _\be_\bn_\bd are interpreted as described above.
+              -\b-a\ba     Append  the  ``new''  history  lines to the history file.
+                     These are history lines entered since  the  beginning  of
                      the current b\bba\bas\bsh\bh session, but not already appended to the
                      history file.
-              -\b-n\bn     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
+              -\b-n\bn     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 b\bba\bas\bsh\bh session.
-              -\b-r\br     Read the contents of the history file and append them  to
+              -\b-r\br     Read  the contents of the history file and append them to
                      the current history list.
               -\b-w\bw     Write the current history list to the history file, over-
                      writing the history file's contents.
-              -\b-p\bp     Perform history substitution on the  following  _\ba_\br_\bg_\b and
-                     display  the  result  on  the  standard output.  Does not
-                     store the results in the history list.  Each _\ba_\br_\bg must  be
+              -\b-p\bp     Perform  history  substitution  on the following _\ba_\br_\bg_\bs and
+                     display the result on  the  standard  output.   Does  not
+                     store  the results in the history list.  Each _\ba_\br_\bg must be
                      quoted to disable normal history expansion.
-              -\b-s\bs     Store  the  _\ba_\br_\bg_\bs  in  the history list as a single entry.
-                     The last command in the history list  is  removed  before
+              -\b-s\bs     Store the _\ba_\br_\bg_\bs in the history list  as  a  single  entry.
+                     The  last  command  in the history list is removed before
                      the _\ba_\br_\bg_\bs are added.
 
-              If  the  H\bHI\bIS\bST\bTT\bTI\bIM\bME\bEF\bFO\bOR\bRM\bMA\bAT\bT 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
+              If the H\bHI\bIS\bST\bTT\bTI\bIM\bME\bEF\bFO\bOR\bRM\bMA\bAT\bT 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 _\bo_\bf_\bf_\bs_\be_\bt  is  sup-
-              plied as an argument to -\b-d\bd, or the history expansion supplied as
-              an argument to -\b-p\bp fails.
+              reading  or writing the history file, an invalid _\bo_\bf_\bf_\bs_\be_\bt or range
+              is supplied as an argument to -\b-d\bd, or the history expansion  sup-
+              plied as an argument to -\b-p\bp fails.
 
        j\bjo\bob\bbs\bs [-\b-l\bln\bnp\bpr\brs\bs] [ _\bj_\bo_\bb_\bs_\bp_\be_\bc ... ]
        j\bjo\bob\bbs\bs -\b-x\bx _\bc_\bo_\bm_\bm_\ba_\bn_\bd [ _\ba_\br_\bg_\bs ... ]
               The first form lists the active jobs.  The options have the fol-
               lowing meanings:
               -\b-l\bl     List process IDs in addition to the normal information.
-              -\b-n\bn     Display  information  only  about  jobs that have changed
+              -\b-n\bn     Display information only about  jobs  that  have  changed
                      status since the user was last notified of their status.
-              -\b-p\bp     List only the process  ID  of  the  job's  process  group
+              -\b-p\bp     List  only  the  process  ID  of  the job's process group
                      leader.
               -\b-r\br     Display only running jobs.
               -\b-s\bs     Display only stopped jobs.
 
-              If  _\bj_\bo_\bb_\bs_\bp_\be_\bc  is given, output is restricted to information about
-              that job.  The return status is 0 unless an  invalid  option  is
+              If _\bj_\bo_\bb_\bs_\bp_\be_\bc is given, output is restricted to  information  about
+              that  job.   The  return status is 0 unless an invalid option is
               encountered or an invalid _\bj_\bo_\bb_\bs_\bp_\be_\bc is supplied.
 
               If the -\b-x\bx option is supplied, j\bjo\bob\bbs\bs replaces any _\bj_\bo_\bb_\bs_\bp_\be_\bc found in
@@ -799,104 +813,113 @@ B\bBA\bAS\bSH\bH B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
 
        k\bki\bil\bll\bl [-\b-s\bs _\bs_\bi_\bg_\bs_\bp_\be_\bc | -\b-n\bn _\bs_\bi_\bg_\bn_\bu_\bm | -\b-_\bs_\bi_\bg_\bs_\bp_\be_\bc] [_\bp_\bi_\bd | _\bj_\bo_\bb_\bs_\bp_\be_\bc] ...
        k\bki\bil\bll\bl -\b-l\bl|-\b-L\bL [_\bs_\bi_\bg_\bs_\bp_\be_\bc | _\be_\bx_\bi_\bt_\b__\bs_\bt_\ba_\bt_\bu_\bs]
-              Send  the  signal  named  by  _\bs_\bi_\bg_\bs_\bp_\be_\bc or _\bs_\bi_\bg_\bn_\bu_\bm to the processes
-              named by _\bp_\bi_\bd or _\bj_\bo_\bb_\bs_\bp_\be_\bc.  _\bs_\bi_\bg_\bs_\bp_\be_\bc is either  a  case-insensitive
-              signal  name such as S\bSI\bIG\bGK\bKI\bIL\bLL\bL (with or without the S\bSI\bIG\bG prefix) or
-              a signal number; _\bs_\bi_\bg_\bn_\bu_\bm is a signal number.  If _\bs_\bi_\bg_\bs_\bp_\be_\bc  is  not
-              present,  then  S\bSI\bIG\bGT\bTE\bER\bRM\bM is assumed.  An argument of -\b-l\bl lists the
-              signal names.  If any arguments are supplied when -\b-l\bl  is  given,
-              the  names  of  the  signals  corresponding to the arguments are
+              Send the signal named by _\bs_\bi_\bg_\bs_\bp_\be_\bc  or  _\bs_\bi_\bg_\bn_\bu_\bm  to  the  processes
+              named  by  _\bp_\bi_\bd or _\bj_\bo_\bb_\bs_\bp_\be_\bc.  _\bs_\bi_\bg_\bs_\bp_\be_\bc is either a case-insensitive
+              signal name such as S\bSI\bIG\bGK\bKI\bIL\bLL\bL (with or without the S\bSI\bIG\bG prefix)  or
+              a  signal  number; _\bs_\bi_\bg_\bn_\bu_\bm is a signal number.  If _\bs_\bi_\bg_\bs_\bp_\be_\bc is not
+              present, then S\bSI\bIG\bGT\bTE\bER\bRM\bM is assumed.  An argument of -\b-l\bl  lists  the
+              signal  names.   If any arguments are supplied when -\b-l\bl is given,
+              the names of the signals  corresponding  to  the  arguments  are
               listed, and the return status is 0.  The _\be_\bx_\bi_\bt_\b__\bs_\bt_\ba_\bt_\bu_\bs 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\bL  option  is
-              equivalent  to -\b-l\bl.  k\bki\bil\bll\bl returns true if at least one signal was
+              -\b-l\bis a number specifying either a signal  number  or  the  exit
+              status  of  a  process terminated by a signal.  The -\b-L\bL option is
+              equivalent to -\b-l\bl.  k\bki\bil\bll\bl returns true if at least one signal  was
               successfully sent, or false if an error occurs or an invalid op-
               tion is encountered.
 
        l\ble\bet\bt _\ba_\br_\bg [_\ba_\br_\bg ...]
               Each _\ba_\br_\bg is an arithmetic expression to be evaluated (see A\bAR\bRI\bIT\bTH\bH-\b-
-              M\bME\bET\bTI\bIC\bE\bEV\bVA\bAL\bLU\bUA\bAT\bTI\bIO\bON\bN above).  If the last _\ba_\br_\bg evaluates  to  0,  l\ble\bet\bt
-              returns 1; 0 is returned otherwise.
+              M\bME\bET\bTI\bIC\b E\bEV\bVA\bAL\bLU\bUA\bAT\bTI\bIO\bON\bN  in _\bb_\ba_\bs_\bh_\b(_\b1_\b)).  If the last _\ba_\br_\bg evaluates to 0,
+              l\ble\bet\breturns 1; 0 is returned otherwise.
 
        l\blo\boc\bca\bal\bl [_\bo_\bp_\bt_\bi_\bo_\bn] [_\bn_\ba_\bm_\be[=_\bv_\ba_\bl_\bu_\be] ... | - ]
-              For  each  argument, a local variable named _\bn_\ba_\bm_\be is created, and
-              assigned _\bv_\ba_\bl_\bu_\be.  The _\bo_\bp_\bt_\bi_\bo_\bn can be any of the  options  accepted
+              For each argument, a local variable named _\bn_\ba_\bm_\be is  created,  and
+              assigned  _\bv_\ba_\bl_\bu_\be.   The _\bo_\bp_\bt_\bi_\bo_\bn can be any of the options accepted
               by d\bde\bec\bcl\bla\bar\bre\be.  When l\blo\boc\bca\bal\bl is used within a function, it causes the
-              variable _\bn_\ba_\bm_\be to have a visible scope restricted to  that  func-
-              tion  and  its children.  If _\bn_\ba_\bm_\be is -, the set of shell options
-              is made local to the function in which l\blo\boc\bca\bal\bl is  invoked:  shell
-              options  changed  using  the s\bse\bet\bt builtin inside the function are
-              restored to their original values  when  the  function  returns.
+              variable  _\bn_\ba_\bm_\be  to have a visible scope restricted to that func-
+              tion and its children.  If _\bn_\ba_\bm_\be is -, the set of  shell  options
+              is  made  local to the function in which l\blo\boc\bca\bal\bl is invoked: shell
+              options changed using the s\bse\bet\bt builtin inside  the  function  are
+              restored  to  their  original  values when the function returns.
               The restore is effected as if a series of s\bse\bet\bt commands were exe-
-              cuted to restore the values that were in place before the  func-
-              tion.   With no operands, l\blo\boc\bca\bal\bl writes a list of local variables
-              to the standard output.  It is an error to use  l\blo\boc\bca\bal\bl  when  not
-              within  a function.  The return status is 0 unless l\blo\boc\bca\bal\bl is used
-              outside a function, an invalid _\bn_\ba_\bm_\be is supplied, or  _\bn_\ba_\bm_\be  is  a
+              cuted  to restore the values that were in place before the func-
+              tion.  With no operands, l\blo\boc\bca\bal\bl writes a list of local  variables
+              to  the  standard  output.  It is an error to use l\blo\boc\bca\bal\bl when not
+              within a function.  The return status is 0 unless l\blo\boc\bca\bal\bl is  used
+              outside  a  function,  an invalid _\bn_\ba_\bm_\be is supplied, or _\bn_\ba_\bm_\be is a
               readonly variable.
 
        l\blo\bog\bgo\bou\but\bt Exit a login shell.
 
-       m\bma\bap\bpf\bfi\bil\ble\b [-\b-d\bd  _\bd_\be_\bl_\bi_\bm] [-\b-n\bn _\bc_\bo_\bu_\bn_\bt] [-\b-O\bO _\bo_\br_\bi_\bg_\bi_\bn] [-\b-s\bs _\bc_\bo_\bu_\bn_\bt] [-\b-t\bt] [-\b-u\bu _\bf_\bd] [-\b-C\bC
+       m\bma\bap\bpf\bfi\bil\ble\b[-\b-d\bd _\bd_\be_\bl_\bi_\bm] [-\b-n\bn _\bc_\bo_\bu_\bn_\bt] [-\b-O\bO _\bo_\br_\bi_\bg_\bi_\bn] [-\b-s\bs _\bc_\bo_\bu_\bn_\bt] [-\b-t\bt] [-\b-u\bu  _\bf_\bd]  [-\b-C\bC
        _\bc_\ba_\bl_\bl_\bb_\ba_\bc_\bk] [-\b-c\bc _\bq_\bu_\ba_\bn_\bt_\bu_\bm] [_\ba_\br_\br_\ba_\by]
        r\bre\bea\bad\bda\bar\brr\bra\bay\by [-\b-d\bd _\bd_\be_\bl_\bi_\bm] [-\b-n\bn _\bc_\bo_\bu_\bn_\bt] [-\b-O\bO _\bo_\br_\bi_\bg_\bi_\bn] [-\b-s\bs _\bc_\bo_\bu_\bn_\bt] [-\b-t\bt] [-\b-u\bu _\bf_\bd] [-\b-C\bC
        _\bc_\ba_\bl_\bl_\bb_\ba_\bc_\bk] [-\b-c\bc _\bq_\bu_\ba_\bn_\bt_\bu_\bm] [_\ba_\br_\br_\ba_\by]
-              Read  lines from the standard input into the indexed array vari-
-              able _\ba_\br_\br_\ba_\by, or from file descriptor _\bf_\bd if the -\b-u\bu option is  sup-
-              plied.   The variable M\bMA\bAP\bPF\bFI\bIL\bLE\bE is the default _\ba_\br_\br_\ba_\by.  Options, if
+              Read lines from the standard input into the indexed array  vari-
+              able  _\ba_\br_\br_\ba_\by, or from file descriptor _\bf_\bd if the -\b-u\bu option is sup-
+              plied.  The variable M\bMA\bAP\bPF\bFI\bIL\bLE\bE is the default _\ba_\br_\br_\ba_\by.  Options,  if
               supplied, have the following meanings:
-              -\b-d\bd     The first character of _\bd_\be_\bl_\bi_\bm is used  to  terminate  each
-                     input  line,  rather than newline.  If _\bd_\be_\bl_\bi_\bm is the empty
+              -\b-d\bd     The  first  character  of _\bd_\be_\bl_\bi_\bm is used to terminate each
+                     input line, rather than newline.  If _\bd_\be_\bl_\bi_\bm is  the  empty
                      string, m\bma\bap\bpf\bfi\bil\ble\be will terminate a line when it reads a NUL
                      character.
-              -\b-n\bn     Copy  at  most _\bc_\bo_\bu_\bn_\bt lines.  If _\bc_\bo_\bu_\bn_\bt is 0, all lines are
+              -\b-n\bn     Copy at most _\bc_\bo_\bu_\bn_\bt lines.  If _\bc_\bo_\bu_\bn_\bt is 0, all  lines  are
                      copied.
-              -\b-O\bO     Begin assigning to _\ba_\br_\br_\ba_\by at index  _\bo_\br_\bi_\bg_\bi_\bn.   The  default
+              -\b-O\bO     Begin  assigning  to  _\ba_\br_\br_\ba_\by at index _\bo_\br_\bi_\bg_\bi_\bn.  The default
                      index is 0.
               -\b-s\bs     Discard the first _\bc_\bo_\bu_\bn_\bt lines read.
-              -\b-t\bt     Remove  a trailing _\bd_\be_\bl_\bi_\bm (default newline) from each line
+              -\b-t\bt     Remove a trailing _\bd_\be_\bl_\bi_\bm (default newline) from each  line
                      read.
-              -\b-u\bu     Read lines from file descriptor _\bf_\bd instead of  the  stan-
+              -\b-u\bu     Read  lines  from file descriptor _\bf_\bd instead of the stan-
                      dard input.
-              -\b-C\bC     Evaluate  _\bc_\ba_\bl_\bl_\bb_\ba_\bc_\bk each time _\bq_\bu_\ba_\bn_\bt_\bu_\bm lines are read.  The
+              -\b-C\bC     Evaluate _\bc_\ba_\bl_\bl_\bb_\ba_\bc_\bk each time _\bq_\bu_\ba_\bn_\bt_\bu_\bm lines are read.   The
                      -\b-c\bc option specifies _\bq_\bu_\ba_\bn_\bt_\bu_\bm.
-              -\b-c\bc     Specify the number of lines read  between  each  call  to
+              -\b-c\bc     Specify  the  number  of  lines read between each call to
                      _\bc_\ba_\bl_\bl_\bb_\ba_\bc_\bk.
 
-              If  -\b-C\bC  is  specified  without  -\b-c\bc, the default quantum is 5000.
+              If -\b-C\bC is specified without -\b-c\bc,  the  default  quantum  is  5000.
               When _\bc_\ba_\bl_\bl_\bb_\ba_\bc_\bk 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.  _\bc_\ba_\bl_\bl_\bb_\ba_\bc_\bk  is  evaluated  after
+              element  as  additional  arguments.  _\bc_\ba_\bl_\bl_\bb_\ba_\bc_\bk is evaluated after
               the line is read but before the array element is assigned.
 
-              If  not supplied with an explicit origin, m\bma\bap\bpf\bfi\bil\ble\be will clear _\ba_\br_\b-
+              If not supplied with an explicit origin, m\bma\bap\bpf\bfi\bil\ble\be will clear  _\ba_\br_\b-
               _\br_\ba_\by before assigning to it.
 
-              m\bma\bap\bpf\bfi\bil\ble\breturns successfully unless an invalid option or  option
-              argument  is  supplied,  _\ba_\br_\br_\ba_\by is invalid or unassignable, or if
+              m\bma\bap\bpf\bfi\bil\ble\b returns successfully unless an invalid option or option
+              argument is supplied, _\ba_\br_\br_\ba_\by is invalid or  unassignable,  or  if
               _\ba_\br_\br_\ba_\by is not an indexed array.
 
        p\bpo\bop\bpd\bd [-n\bn] [+_\bn] [-_\bn]
-              Removes entries from the directory stack.   With  no  arguments,
-              removes  the  top directory from the stack, and performs a c\bcd\bd to
-              the new top directory.  Arguments, if supplied, have the follow-
-              ing meanings:
+              Removes entries from the directory stack.  The elements are num-
+              bered from 0 starting at the first  directory  listed  by  d\bdi\bir\brs\bs.
+              With  no  arguments,  p\bpo\bop\bpd\bd  removes  the  top directory from the
+              stack, and changes to the new top directory.  Arguments, if sup-
+              plied, have the following meanings:
               -\b-n\bn     Suppresses  the  normal change of directory when removing
                      directories from the stack, so that only the stack is ma-
                      nipulated.
               +\b+_\bn     Removes  the _\bnth entry counting from the left of the list
-                     shown by d\bdi\bir\brs\bs, starting with zero.  For  example:  ``popd
-                     +0'' removes the first directory, ``popd +1'' the second.
+                     shown by d\bdi\bir\brs\bs, starting with zero, from the  stack.   For
+                     example:  ``popd +0'' removes the first directory, ``popd
+                     +1'' the second.
               -\b-_\bn     Removes the _\bnth entry counting from the right of the list
-                     shown by d\bdi\bir\brs\bs, starting with zero.  For  example:  ``popd
-                     -0''  removes the last directory, ``popd -1'' the next to
+                     shown  by  d\bdi\bir\brs\bs, starting with zero.  For example: ``popd
+                     -0'' removes the last directory, ``popd -1'' the next  to
                      last.
 
-              If the p\bpo\bop\bpd\bd command is successful, a d\bdi\bir\brs\bs is performed as  well,
-              and  the  return  status is 0.  p\bpo\bop\bpd\bd returns false if an invalid
-              option is encountered, the directory stack is empty, a non-exis-
-              tent directory stack entry is specified, or the directory change
-              fails.
+              If  the  top element of the directory stack is modified, and the
+              _\b-_\bn option was not supplied, p\bpo\bop\bpd\bd uses the c\bcd\bd builtin  to  change
+              to the directory at the top of the stack.  If the c\bcd\bd fails, p\bpo\bop\bpd\bd
+              returns a non-zero value.
+
+              Otherwise, p\bpo\bop\bpd\bd 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 p\bpo\bop\bpd\bd command is successful, bash runs d\bdi\bir\brs\bs  to  show  the
+              final  contents of the directory stack, and the return status is
+              0.
 
        p\bpr\bri\bin\bnt\btf\bf [-\b-v\bv _\bv_\ba_\br] _\bf_\bo_\br_\bm_\ba_\bt [_\ba_\br_\bg_\bu_\bm_\be_\bn_\bt_\bs]
               Write the formatted _\ba_\br_\bg_\bu_\bm_\be_\bn_\bt_\bs to the standard output  under  the
@@ -915,15 +938,17 @@ B\bBA\bAS\bSH\bH B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
                      corresponding _\ba_\br_\bg_\bu_\bm_\be_\bn_\bt in the same way as e\bec\bch\bho\bo -\b-e\be.
               %\b%q\bq     causes p\bpr\bri\bin\bnt\btf\bf to output the corresponding _\ba_\br_\bg_\bu_\bm_\be_\bn_\bt  in  a
                      format that can be reused as shell input.
+              %\b%Q\bQ     like  %\b%q\bq, but applies any supplied precision to the _\ba_\br_\bg_\bu_\b-
+                     _\bm_\be_\bn_\bt before quoting it.
               %\b%(\b(_\bd_\ba_\bt_\be_\bf_\bm_\bt)\b)T\bT
-                     causes  p\bpr\bri\bin\bnt\btf\bf  to  output the date-time string resulting
-                     from using _\bd_\ba_\bt_\be_\bf_\bm_\bt as a format  string  for  _\bs_\bt_\br_\bf_\bt_\bi_\bm_\be(3).
+                     causes p\bpr\bri\bin\bnt\btf\bf to output the  date-time  string  resulting
+                     from  using  _\bd_\ba_\bt_\be_\bf_\bm_\bt  as a format string for _\bs_\bt_\br_\bf_\bt_\bi_\bm_\be(3).
                      The corresponding _\ba_\br_\bg_\bu_\bm_\be_\bn_\bt 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-
+                     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  p\bpr\bri\bin\bnt\btf\b behav-
+                     given.   This  is an exception to the usual p\bpr\bri\bin\bnt\btf\bf behav-
                      ior.
 
               The %b, %q, and %T directives all use the field width and preci-
@@ -931,100 +956,104 @@ B\bBA\bAS\bSH\bH B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
               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-
+              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
+              if  the leading character is a single or double quote, the value
               is the ASCII value of the following character.
 
-              The  _\bf_\bo_\br_\bm_\ba_\bt  is  reused as necessary to consume all of the _\ba_\br_\bg_\bu_\b-
+              The _\bf_\bo_\br_\bm_\ba_\bt is reused as necessary to consume all  of  the  _\ba_\br_\bg_\bu_\b-
               _\bm_\be_\bn_\bt_\bs.  If the _\bf_\bo_\br_\bm_\ba_\bt requires more _\ba_\br_\bg_\bu_\bm_\be_\bn_\bt_\bs than are supplied,
-              the  extra  format  specifications  behave as if a zero value or
-              null string, as appropriate,  had  been  supplied.   The  return
+              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\bpu\bus\bsh\bhd\bd [-\b-n\bn] [+_\bn] [-_\bn]
        p\bpu\bus\bsh\bhd\bd [-\b-n\bn] [_\bd_\bi_\br]
-              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, p\bpu\bus\bsh\bhd\bd exchanges the top two di-
-              rectories and returns 0, unless the directory  stack  is  empty.
-              Arguments, if supplied, have the following meanings:
-              -\b-n\bn     Suppresses  the  normal change of directory when rotating
-                     or adding directories to the  stack,  so  that  only  the
+              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, p\bpu\bus\bsh\bhd\bd exchanges the top two  ele-
+              ments  of the directory stack.  Arguments, if supplied, have the
+              following meanings:
+              -\b-n\bn     Suppresses the normal change of directory  when  rotating
+                     or  adding  directories  to  the  stack, so that only the
                      stack is manipulated.
-              +\b+_\bn     Rotates  the  stack  so  that the _\bnth directory (counting
-                     from the left of the list shown by  d\bdi\bir\brs\bs,  starting  with
+              +\b+_\bn     Rotates the stack so that  the  _\bnth  directory  (counting
+                     from  the  left  of the list shown by d\bdi\bir\brs\bs, starting with
                      zero) is at the top.
-              -\b-_\bn     Rotates  the  stack  so  that the _\bnth directory (counting
-                     from the right of the list shown by d\bdi\bir\brs\bs,  starting  with
+              -\b-_\bn     Rotates the stack so that  the  _\bnth  directory  (counting
+                     from  the  right of the list shown by d\bdi\bir\brs\bs, starting with
                      zero) is at the top.
-              _\bd_\bi_\br    Adds _\bd_\bi_\br to the directory stack at the top, making it the
-                     new current working directory as if it had been  supplied
-                     as the argument to the c\bcd\bd builtin.
+              _\bd_\bi_\br    Adds _\bd_\bi_\br to the directory stack at the top
+
+              After the stack has been modified, if the -\b-n\bn option was not sup-
+              plied,  p\bpu\bus\bsh\bhd\bd  uses the c\bcd\bd builtin to change to the directory at
+              the top of the stack.  If the c\bcd\bd fails, p\bpu\bus\bsh\bhd\bd returns a non-zero
+              value.
 
-              If the p\bpu\bus\bsh\bhd\bd command is successful, a d\bdi\bir\brs\bs is performed as well.
-              If the first form is used, p\bpu\bus\bsh\bhd\bd returns 0 unless the cd to  _\bd_\bi_\br
-              fails.   With the second form, p\bpu\bus\bsh\bhd\bd returns 0 unless the direc-
-              tory stack is empty, a non-existent directory stack  element  is
-              specified,  or the directory change to the specified new current
-              directory fails.
+              Otherwise,  if no arguments are supplied, p\bpu\bus\bsh\bhd\bd returns 0 unless
+              the directory stack  is  empty.   When  rotating  the  directory
+              stack,  p\bpu\bus\bsh\bhd\bd returns 0 unless the directory stack is empty or a
+              non-existent directory stack element is specified.
+
+              If the p\bpu\bus\bsh\bhd\bd command is successful, bash runs d\bdi\bir\brs\bs to  show  the
+              final contents of the directory stack.
 
        p\bpw\bwd\bd [-\b-L\bLP\bP]
-              Print the absolute pathname of the  current  working  directory.
+              Print  the  absolute  pathname of the current working directory.
               The pathname printed contains no symbolic links if the -\b-P\bP option
               is supplied or the -\b-o\bo p\bph\bhy\bys\bsi\bic\bca\bal\bl option to the s\bse\bet\bt builtin command
-              is  enabled.  If the -\b-L\bL option is used, the pathname printed may
-              contain symbolic links.  The return status is 0 unless an  error
+              is enabled.  If the -\b-L\bL 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.
 
        r\bre\bea\bad\bd [-\b-e\ber\brs\bs] [-\b-a\ba _\ba_\bn_\ba_\bm_\be] [-\b-d\bd _\bd_\be_\bl_\bi_\bm] [-\b-i\bi _\bt_\be_\bx_\bt] [-\b-n\bn _\bn_\bc_\bh_\ba_\br_\bs] [-\b-N\bN _\bn_\bc_\bh_\ba_\br_\bs] [-\b-p\bp
        _\bp_\br_\bo_\bm_\bp_\bt] [-\b-t\bt _\bt_\bi_\bm_\be_\bo_\bu_\bt] [-\b-u\bu _\bf_\bd] [_\bn_\ba_\bm_\be ...]
-              One  line  is read from the standard input, or from the file de-
+              One line is read from the standard input, or from the  file  de-
               scriptor _\bf_\bd supplied as an argument to the -\b-u\bu option, split into
-              words  as  described  above  under W\bWo\bor\brd\bd S\bSp\bpl\bli\bit\btt\bti\bin\bng\bg, and the first
-              word is assigned to the first _\bn_\ba_\bm_\be, the second word to the  sec-
-              ond  _\bn_\ba_\bm_\be,  and  so on.  If there are more words than names, the
+              words as described in _\bb_\ba_\bs_\bh_\b(_\b1_\b)  under  W\bWo\bor\brd\bd  S\bSp\bpl\bli\bit\btt\bti\bin\bng\bg,  and  the
+              first word is assigned to the first _\bn_\ba_\bm_\be, the second word to the
+              second _\bn_\ba_\bm_\be, and so on.  If there are more words than names, the
               remaining words and their intervening delimiters are assigned to
-              the  last  _\bn_\ba_\bm_\be.   If  there are fewer words read from the input
-              stream than names, the remaining names are assigned  empty  val-
-              ues.   The  characters  in  I\bIF\bFS\bS  are used to split the line into
-              words using the same rules the shell  uses  for  expansion  (de-
-              scribed  above  under  W\bWo\bor\brd\bd S\bSp\bpl\bli\bit\btt\bti\bin\bng\bg).  The backslash character
-              (\\b\) may be used to remove any special meaning for the next char-
-              acter  read  and  for  line continuation.  Options, if supplied,
+              the last _\bn_\ba_\bm_\be.  If there are fewer words  read  from  the  input
+              stream  than  names, the remaining names are assigned empty val-
+              ues.  The characters in I\bIF\bFS\bS are used  to  split  the  line  into
+              words  using  the  same  rules the shell uses for expansion (de-
+              scribed in _\bb_\ba_\bs_\bh_\b(_\b1_\b) under W\bWo\bor\brd\bd S\bSp\bpl\bli\bit\btt\bti\bin\bng\bg).  The backslash charac-
+              ter  (\\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:
               -\b-a\ba _\ba_\bn_\ba_\bm_\be
                      The words are assigned to sequential indices of the array
                      variable _\ba_\bn_\ba_\bm_\be, starting at 0.  _\ba_\bn_\ba_\bm_\be is unset before any
-                     new values are assigned.  Other _\bn_\ba_\bm_\be  arguments  are  ig-
+                     new  values  are  assigned.  Other _\bn_\ba_\bm_\be arguments are ig-
                      nored.
               -\b-d\bd _\bd_\be_\bl_\bi_\bm
                      The first character of _\bd_\be_\bl_\bi_\bm is used to terminate the in-
-                     put line, rather than newline.  If  _\bd_\be_\bl_\bi_\bm  is  the  empty
-                     string,  r\bre\bea\bad\bd  will  terminate a line when it reads a NUL
+                     put  line,  rather  than  newline.  If _\bd_\be_\bl_\bi_\bm is the empty
+                     string, r\bre\bea\bad\bd will terminate a line when it  reads  a  NUL
                      character.
               -\b-e\be     If the standard input is coming from a terminal, r\bre\bea\bad\bdl\bli\bin\bne\be
-                     (see  R\bRE\bEA\bAD\bDL\bLI\bIN\bNE\bE  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.
+                     (see R\bRE\bEA\bAD\bDL\bLI\bIN\bNE\bE in _\bb_\ba_\bs_\bh_\b(_\b1_\b)) 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.
               -\b-i\bi _\bt_\be_\bx_\bt
-                     If r\bre\bea\bad\bdl\bli\bin\bne\be is being used  to  read  the  line,  _\bt_\be_\bx_\b is
+                     If  r\bre\bea\bad\bdl\bli\bin\bne\be  is  being  used  to  read the line, _\bt_\be_\bx_\bt is
                      placed into the editing buffer before editing begins.
               -\b-n\bn _\bn_\bc_\bh_\ba_\br_\bs
-                     r\bre\bea\bad\b returns after reading _\bn_\bc_\bh_\ba_\br_\bs characters rather than
+                     r\bre\bea\bad\breturns after reading _\bn_\bc_\bh_\ba_\br_\bs characters rather  than
                      waiting for a complete line of input, but honors a delim-
-                     iter  if fewer than _\bn_\bc_\bh_\ba_\br_\bs characters are read before the
+                     iter if fewer than _\bn_\bc_\bh_\ba_\br_\bs characters are read before  the
                      delimiter.
               -\b-N\bN _\bn_\bc_\bh_\ba_\br_\bs
-                     r\bre\bea\bad\breturns  after  reading  exactly  _\bn_\bc_\bh_\ba_\br_\b characters
-                     rather  than waiting for a complete line of input, unless
-                     EOF is encountered or r\bre\bea\bad\bd times out.  Delimiter  charac-
-                     ters  encountered  in the input are not treated specially
-                     and do not cause r\bre\bea\bad\bd to return until  _\bn_\bc_\bh_\ba_\br_\b characters
-                     are  read.   The result is not split on the characters in
-                     I\bIF\bFS\bS; the intent is that the variable is assigned  exactly
+                     r\bre\bea\bad\b returns  after  reading  exactly  _\bn_\bc_\bh_\ba_\br_\bs characters
+                     rather than waiting for a complete line of input,  unless
+                     EOF  is encountered or r\bre\bea\bad\bd times out.  Delimiter charac-
+                     ters encountered in the input are not  treated  specially
+                     and  do  not cause r\bre\bea\bad\bd to return until _\bn_\bc_\bh_\ba_\br_\bs characters
+                     are read.  The result is not split on the  characters  in
+                     I\bIF\bFS\bS;  the intent is that the variable is assigned exactly
                      the characters read (with the exception of backslash; see
                      the -\b-r\br option below).
               -\b-p\bp _\bp_\br_\bo_\bm_\bp_\bt
@@ -1032,25 +1061,26 @@ B\bBA\bAS\bSH\bH B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
                      line, before attempting to read any input.  The prompt is
                      displayed only if input is coming from a terminal.
               -\b-r\br     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
+                     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.
               -\b-s\bs     Silent mode.  If input is coming from a terminal, charac-
                      ters are not echoed.
               -\b-t\bt _\bt_\bi_\bm_\be_\bo_\bu_\bt
-                     Cause r\bre\bea\bad\bd to time out and return failure if  a  complete
-                     line  of  input  (or a specified number of characters) is
-                     not read within _\bt_\bi_\bm_\be_\bo_\bu_\bt seconds.  _\bt_\bi_\bm_\be_\bo_\bu_\bt may be a  deci-
-                     mal  number with a fractional portion following the deci-
-                     mal point.  This option is  only  effective  if  r\bre\bea\bad\b is
-                     reading  input  from  a  terminal, pipe, or other special
-                     file; it has no effect when reading from  regular  files.
+                     Cause  r\bre\bea\bad\bd  to time out and return failure if a complete
+                     line of input (or a specified number  of  characters)  is
+                     not  read within _\bt_\bi_\bm_\be_\bo_\bu_\bt seconds.  _\bt_\bi_\bm_\be_\bo_\bu_\bt may be a deci-
+                     mal number with a fractional portion following the  deci-
+                     mal  point.   This  option  is  only effective if r\bre\bea\bad\bd is
+                     reading input from a terminal,  pipe,  or  other  special
+                     file;  it  has no effect when reading from regular files.
                      If r\bre\bea\bad\bd times out, r\bre\bea\bad\bd saves any partial input read into
-                     the specified variable _\bn_\ba_\bm_\be.  If _\bt_\bi_\bm_\be_\bo_\bu_\bt is 0,  r\bre\bea\bad\bd  re-
-                     turns  immediately, without trying to read any data.  The
-                     exit status is 0 if input is available on  the  specified
-                     file  descriptor, non-zero otherwise.  The exit status is
-                     greater than 128 if the timeout is exceeded.
+                     the  specified  variable _\bn_\ba_\bm_\be.  If _\bt_\bi_\bm_\be_\bo_\bu_\bt is 0, r\bre\bea\bad\bd 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.
               -\b-u\bu _\bf_\bd  Read input from file descriptor _\bf_\bd.
 
               If no _\bn_\ba_\bm_\be_\bs are supplied, the line read, without the ending  de-
@@ -1098,18 +1128,18 @@ B\bBA\bAS\bSH\bH B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
               associated with the R\bRE\bET\bTU\bUR\bRN\bN trap is executed before execution re-
               sumes after the function or script.
 
-       s\bse\bet\bt [-\b--\b-a\bab\bbe\bef\bfh\bhk\bkm\bmn\bnp\bpt\btu\buv\bvx\bxB\bBC\bCE\bEH\bHP\bPT\bT] [-\b-o\bo _\bo_\bp_\bt_\bi_\bo_\bn_\b-_\bn_\ba_\bm_\be] [_\ba_\br_\bg ...]
-       s\bse\bet\bt [+\b+a\bab\bbe\bef\bfh\bhk\bkm\bmn\bnp\bpt\btu\buv\bvx\bxB\bBC\bCE\bEH\bHP\bPT\bT] [+\b+o\bo _\bo_\bp_\bt_\bi_\bo_\bn_\b-_\bn_\ba_\bm_\be] [_\ba_\br_\bg ...]
-              Without  options,  the name and value of each shell variable are
-              displayed in a format that can be reused as input for setting or
-              resetting the currently-set variables.  Read-only variables can-
-              not be reset.  In _\bp_\bo_\bs_\bi_\bx _\bm_\bo_\bd_\be, only shell variables  are  listed.
-              The  output is sorted according to the current locale.  When op-
-              tions are specified, they set or unset  shell  attributes.   Any
-              arguments  remaining after option processing are treated as val-
-              ues for the positional parameters and are assigned, in order, to
-              $\b$1\b1,  $\b$2\b2,  .\b..\b..\b.   $\b$_\bn.   Options,  if specified, have the following
-              meanings:
+       s\bse\bet\bt [-\b-a\bab\bbe\bef\bfh\bhk\bkm\bmn\bnp\bpt\btu\buv\bvx\bxB\bBC\bCE\bEH\bHP\bPT\bT] [-\b-o\bo _\bo_\bp_\bt_\bi_\bo_\bn_\b-_\bn_\ba_\bm_\be] [-\b--\b-] [-\b-] [_\ba_\br_\bg ...]
+       s\bse\bet\bt [+\b+a\bab\bbe\bef\bfh\bhk\bkm\bmn\bnp\bpt\btu\buv\bvx\bxB\bBC\bCE\bEH\bHP\bPT\bT] [+\b+o\bo _\bo_\bp_\bt_\bi_\bo_\bn_\b-_\bn_\ba_\bm_\be] [-\b--\b-] [-\b-] [_\ba_\br_\bg ...]
+              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 _\bp_\bo_\bs_\bi_\bx _\bm_\bo_\bd_\be, 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 $\b$1\b1,
+              $\b$2\b2,  .\b..\b..\b.   $\b$_\bn.   Options, if specified, have the following mean-
+              ings:
               -\b-a\ba      Each variable or function that is created or modified is
                       given  the export attribute and marked for export to the
                       environment of subsequent commands.
@@ -1118,22 +1148,22 @@ B\bBA\bAS\bSH\bH B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
                       is effective only when job control is enabled.
               -\b-e\be      Exit immediately if a _\bp_\bi_\bp_\be_\bl_\bi_\bn_\be (which may consist  of  a
                       single  _\bs_\bi_\bm_\bp_\bl_\be  _\bc_\bo_\bm_\bm_\ba_\bn_\bd),  a _\bl_\bi_\bs_\bt, or a _\bc_\bo_\bm_\bp_\bo_\bu_\bn_\bd _\bc_\bo_\bm_\bm_\ba_\bn_\bd
-                      (see S\bSH\bHE\bEL\bLL\bL G\bGR\bRA\bAM\bMM\bMA\bAR\babove), 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  w\bwh\bhi\bil\ble\be
-                      or  u\bun\bnt\bti\bil\bl  keyword, part of the test following the i\bif\bf or
-                      e\bel\bli\bif\bf reserved words, part of any command executed  in  a
-                      &\b&&\b&  or |\b||\b| list except the command following the final &\b&&\b&
-                      or |\b||\b|, any command in a pipeline but the last, or if the
-                      command's  return  value is being inverted with !\b!.  If a
-                      compound command other than a subshell  returns  a  non-
-                      zero  status because a command failed while -\b-e\be was being
-                      ignored, the shell does not exit.  A  trap  on  E\bER\bRR\bR,  if
-                      set,  is  executed  before the shell exits.  This option
+                      (see S\bSH\bHE\bEL\bLL\bL G\bGR\bRA\bAM\bMM\bMA\bAR\bin _\bb_\ba_\bs_\bh_\b(_\b1_\b)), 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 w\bwh\bhi\bil\ble\be or u\bun\bnt\bti\bil\bl keyword, part of the test following the
+                      i\bif\bf or e\bel\bli\bif\bf reserved words, part of any command  executed
+                      in  a &\b&&\b& or |\b||\b| list except the command following the fi-
+                      nal &\b&&\b& or |\b||\b|, any command in a pipeline but the last, or
+                      if  the command's return value is being inverted with !\b!.
+                      If a compound command other than a  subshell  returns  a
+                      non-zero  status  because  a command failed while -\b-e\be was
+                      being ignored, the shell does not exit.  A trap on  E\bER\bRR\bR,
+                      if set, is executed before the shell exits.  This option
                       applies to the shell environment and each subshell envi-
-                      ronment  separately  (see  C\bCO\bOM\bMM\bMA\bAN\bND\bD E\bEX\bXE\bEC\bCU\bUT\bTI\bIO\bON\bN E\bEN\bNV\bVI\bIR\bRO\bON\bNM\bME\bEN\bNT\bT
-                      above), and may cause subshells to exit before executing
-                      all the commands in the subshell.
+                      ronment separately (see C\bCO\bOM\bMM\bMA\bAN\bND\bD E\bEX\bXE\bEC\bCU\bUT\bTI\bIO\bON\bN E\bEN\bNV\bVI\bIR\bRO\bON\bNM\bME\bEN\bNT\bT in
+                      _\bb_\ba_\bs_\bh_\b(_\b1_\b)), 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 -\b-e\be is being ignored, none of the  commands
@@ -1152,10 +1182,10 @@ B\bBA\bAS\bSH\bH B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
                       that precede the command name.
               -\b-m\bm      Monitor mode.  Job control is enabled.  This  option  is
                       on  by  default  for  interactive shells on systems that
-                      support it (see J\bJO\bOB\bB C\bCO\bON\bNT\bTR\bRO\bOL\babove).  All  processes  run
-                      in a separate process group.  When a background job com-
-                      pletes, the shell prints a line containing its exit sta-
-                      tus.
+                      support it (see J\bJO\bOB\bB C\bCO\bON\bNT\bTR\bRO\bOL\bin _\bb_\ba_\bs_\bh_\b(_\b1_\b)).  All  processes
+                      run  in a separate process group.  When a background job
+                      completes, the shell prints a line containing  its  exit
+                      status.
               -\b-n\bn      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.
@@ -1178,13 +1208,13 @@ B\bBA\bAS\bSH\bH B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
                       h\bha\bas\bsh\bha\bal\bll\bl Same as -\b-h\bh.
                       h\bhi\bis\bst\bte\bex\bxp\bpa\ban\bnd\bd
                               Same as -\b-H\bH.
-                      h\bhi\bis\bst\bto\bor\bry\by Enable command history, as described above under
-                              H\bHI\bIS\bST\bTO\bOR\bRY\bY.  This option is on by default in inter-
-                              active shells.
+                      h\bhi\bis\bst\bto\bor\bry\by Enable  command history, as described in _\bb_\ba_\bs_\bh_\b(_\b1_\b)
+                              under H\bHI\bIS\bST\bTO\bOR\bRY\bY.  This option is on by default  in
+                              interactive shells.
                       i\big\bgn\bno\bor\bre\bee\beo\bof\bf
                               The  effect  is  as  if  the shell command ``IG-
                               NOREEOF=10'' had been executed (see S\bSh\bhe\bel\bll\bl  V\bVa\bar\bri\bi-\b-
-                              a\bab\bbl\ble\bes\babove).
+                              a\bab\bbl\ble\bes\bin _\bb_\ba_\bs_\bh_\b(_\b1_\b)).
                       k\bke\bey\byw\bwo\bor\brd\bd Same as -\b-k\bk.
                       m\bmo\bon\bni\bit\bto\bor\br Same as -\b-m\bm.
                       n\bno\boc\bcl\blo\bob\bbb\bbe\ber\br
@@ -1206,8 +1236,8 @@ B\bBA\bAS\bSH\bH B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
                       p\bpo\bos\bsi\bix\bx   Change  the  behavior  of b\bba\bas\bsh\bh where the default
                               operation differs from  the  POSIX  standard  to
                               match  the  standard (_\bp_\bo_\bs_\bi_\bx _\bm_\bo_\bd_\be).  See S\bSE\bEE\bE A\bAL\bLS\bSO\bO
-                              below for a reference to a document that details
-                              how posix mode affects bash's behavior.
+                              in _\bb_\ba_\bs_\bh_\b(_\b1_\b) for a reference to  a  document  that
+                              details how posix mode affects bash's behavior.
                       p\bpr\bri\biv\bvi\bil\ble\beg\bge\bed\bd
                               Same as -\b-p\bp.
                       v\bve\ber\brb\bbo\bos\bse\be Same as -\b-v\bv.
@@ -1232,9 +1262,12 @@ B\bBA\bAS\bSH\bH B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
                       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.
+              -\b-r\br      Enable restricted shell mode.  This option cannot be un-
+                      set once it has been set.
               -\b-t\bt      Exit after reading and executing one command.
               -\b-u\bu      Treat unset variables and parameters other than the spe-
-                      cial  parameters "@" and "*" as an error when performing
+                      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
@@ -1245,7 +1278,7 @@ B\bBA\bAS\bSH\bH B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
                       play  the expanded value of P\bPS\bS4\b4, followed by the command
                       and its expanded arguments or associated word list.
               -\b-B\bB      The shell performs brace expansion (see B\bBr\bra\bac\bce\be  E\bEx\bxp\bpa\ban\bns\bsi\bio\bon\bn
-                      above).  This is on by default.
+                      in _\bb_\ba_\bs_\bh_\b(_\b1_\b)).  This is on by default.
               -\b-C\bC      If  set,  b\bba\bas\bsh\bh  does not overwrite an existing file with
                       the >\b>, >\b>&\b&, and <\b<>\b> redirection operators.   This  may  be
                       overridden when creating output files by using the redi-
@@ -1353,8 +1386,8 @@ B\bBA\bAS\bSH\bH B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
                       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 J\bJO\bOB\bB C\bCO\bON\bNT\bTR\bRO\bOL\bL above).  The shell always postpones ex-
-                      iting if any jobs are stopped.
+                      (see  J\bJO\bOB\bB  C\bCO\bON\bNT\bTR\bRO\bOL\bL  in _\bb_\ba_\bs_\bh_\b(_\b1_\b)).  The shell always post-
+                      pones exiting if any jobs are stopped.
               c\bch\bhe\bec\bck\bkw\bwi\bin\bns\bsi\biz\bze\be
                       If set, b\bba\bas\bsh\bh checks the window size after each  external
                       (non-builtin)  command  and,  if  necessary, updates the
@@ -1364,7 +1397,8 @@ B\bBA\bAS\bSH\bH B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
                       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 H\bHI\bIS\bST\bTO\bOR\bRY\bY.
+                      history  is  enabled, as described in _\bb_\ba_\bs_\bh_\b(_\b1_\b) under H\bHI\bIS\bS-\b-
+                      T\bTO\bOR\bRY\bY.
               c\bco\bom\bmp\bpa\bat\bt3\b31\b1
               c\bco\bom\bmp\bpa\bat\bt3\b32\b2
               c\bco\bom\bmp\bpa\bat\bt4\b40\b0
@@ -1372,117 +1406,123 @@ B\bBA\bAS\bSH\bH B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
               c\bco\bom\bmp\bpa\bat\bt4\b42\b2
               c\bco\bom\bmp\bpa\bat\bt4\b43\b3
               c\bco\bom\bmp\bpa\bat\bt4\b44\b4
-                      These  control aspects of the shell's compatibility mode
-                      (see S\bSH\bHE\bEL\bLL\bL C\bCO\bOM\bMP\bPA\bAT\bTI\bIB\bBI\bIL\bLI\bIT\bTY\bY M\bMO\bOD\bDE\bE below).
+              c\bco\bom\bmp\bpa\bat\bt5\b50\b0
+                      These control aspects of the shell's compatibility  mode
+                      (see S\bSH\bHE\bEL\bLL\bL C\bCO\bOM\bMP\bPA\bAT\bTI\bIB\bBI\bIL\bLI\bIT\bTY\bY M\bMO\bOD\bDE\bE in _\bb_\ba_\bs_\bh_\b(_\b1_\b)).
 
               c\bco\bom\bmp\bpl\ble\bet\bte\be_\b_f\bfu\bul\bll\blq\bqu\buo\bot\bte\be
-                      If set, b\bba\bas\bsh\bh quotes all shell  metacharacters  in  file-
-                      names  and  directory  names when performing completion.
+                      If  set,  b\bba\bas\bsh\bh  quotes all shell metacharacters in file-
+                      names and directory names  when  performing  completion.
                       If not set, b\bba\bas\bsh\bh 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
+                      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.
 
               d\bdi\bir\bre\bex\bxp\bpa\ban\bnd\bd
-                      If set, b\bba\bas\bsh\bh 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,  b\bba\bas\bsh\bh attempts to preserve what the
+                      If  set,  b\bba\bas\bsh\bh 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, b\bba\bas\bsh\bh attempts  to  preserve  what  the
                       user typed.
 
               d\bdi\bir\brs\bsp\bpe\bel\bll\bl
-                      If set, b\bba\bas\bsh\bh attempts spelling correction  on  directory
-                      names  during word completion if the directory name ini-
+                      If  set,  b\bba\bas\bsh\bh attempts spelling correction on directory
+                      names during word completion if the directory name  ini-
                       tially supplied does not exist.
 
-              d\bdo\bot\btg\bgl\blo\bob\bb If set, b\bba\bas\bsh\bh includes filenames beginning with a `.'  in
-                      the  results of pathname expansion.  The filenames `\b``\b`.\b.'\b''\b'
-                      and `\b``\b`.\b..\b.'\b''\b'  must always be matched explicitly,  even  if
+              d\bdo\bot\btg\bgl\blo\bob\bb If  set, b\bba\bas\bsh\bh includes filenames beginning with a `.' in
+                      the results of pathname expansion.  The filenames  `\b``\b`.\b.'\b''\b'
+                      and  `\b``\b`.\b..\b.'\b''\b'   must always be matched explicitly, even if
                       d\bdo\bot\btg\bgl\blo\bob\bb is set.
 
               e\bex\bxe\bec\bcf\bfa\bai\bil\bl
                       If set, a non-interactive shell will not exit if it can-
-                      not execute the file specified as  an  argument  to  the
-                      e\bex\bxe\bec\b builtin  command.   An  interactive shell does not
+                      not  execute  the  file  specified as an argument to the
+                      e\bex\bxe\bec\bbuiltin command.  An  interactive  shell  does  not
                       exit if e\bex\bxe\bec\bc fails.
 
               e\bex\bxp\bpa\ban\bnd\bd_\b_a\bal\bli\bia\bas\bse\bes\bs
-                      If set, aliases are expanded as  described  above  under
-                      A\bAL\bLI\bIA\bAS\bSE\bES\bS.  This option is enabled by default for interac-
-                      tive shells.
+                      If set, aliases are expanded as described in _\bb_\ba_\bs_\bh_\b(_\b1_\b) un-
+                      der A\bAL\bLI\bIA\bAS\bSE\bES\bS.  This option is enabled by default for  in-
+                      teractive shells.
 
               e\bex\bxt\btd\bde\beb\bbu\bug\bg
-                      If set at shell invocation, or in a shell startup  file,
+                      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--\b-d\bde\beb\bbu\bug\bgg\bge\ber\br option.  If set  af-
-                      ter  invocation,  behavior intended for use by debuggers
+                      starts,  identical to the -\b--\b-d\bde\beb\bbu\bug\bgg\bge\ber\br option.  If set af-
+                      ter invocation, behavior intended for use  by  debuggers
                       is enabled:
 
                       1\b1.\b.     The -\b-F\bF option to the d\bde\bec\bcl\bla\bar\bre\be builtin displays the
                              source file name and line number corresponding to
                              each function name supplied as an argument.
 
-                      2\b2.\b.     If the command run by the D\bDE\bEB\bBU\bUG\bG  trap  returns  a
-                             non-zero  value,  the next command is skipped and
+                      2\b2.\b.     If  the  command  run by the D\bDE\bEB\bBU\bUG\bG trap returns a
+                             non-zero value, the next command is  skipped  and
                              not executed.
 
-                      3\b3.\b.     If the command run by the D\bDE\bEB\bBU\bUG\bG  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  .\b.  or s\bso\bou\bur\brc\bce\be builtins), the shell
+                      3\b3.\b.     If  the  command  run by the D\bDE\bEB\bBU\bUG\bG 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 .\b. or  s\bso\bou\bur\brc\bce\be  builtins),  the  shell
                              simulates a call to r\bre\bet\btu\bur\brn\bn.
 
-                      4\b4.\b.     B\bBA\bAS\bSH\bH_\b_A\bAR\bRG\bGC\band B\bBA\bAS\bSH\bH_\b_A\bAR\bRG\bGV\bV are updated as  described
-                             in their descriptions above.
+                      4\b4.\b.     B\bBA\bAS\bSH\bH_\b_A\bAR\bRG\bGC\b and B\bBA\bAS\bSH\bH_\b_A\bAR\bRG\bGV\bV are updated as described
+                             in their descriptions in _\bb_\ba_\bs_\bh_\b(_\b1_\b)).
 
-                      5\b5.\b.     Function  tracing  is  enabled: command substitu-
+                      5\b5.\b.     Function tracing is  enabled:  command  substitu-
                              tion, shell functions, and subshells invoked with
                              (\b( _\bc_\bo_\bm_\bm_\ba_\bn_\bd )\b) inherit the D\bDE\bEB\bBU\bUG\bG and R\bRE\bET\bTU\bUR\bRN\bN traps.
 
-                      6\b6.\b.     Error  tracing  is enabled: command substitution,
-                             shell functions, and  subshells  invoked  with  (\b(
+                      6\b6.\b.     Error tracing is enabled:  command  substitution,
+                             shell  functions,  and  subshells  invoked with (\b(
                              _\bc_\bo_\bm_\bm_\ba_\bn_\bd )\b) inherit the E\bER\bRR\bR trap.
 
               e\bex\bxt\btg\bgl\blo\bob\bb If set, the extended pattern matching features described
-                      above under P\bPa\bat\bth\bhn\bna\bam\bme\be E\bEx\bxp\bpa\ban\bns\bsi\bio\bon\bn are enabled.
+                      in _\bb_\ba_\bs_\bh_\b(_\b1_\b) under P\bPa\bat\bth\bhn\bna\bam\bme\be E\bEx\bxp\bpa\ban\bns\bsi\bio\bon\bn are enabled.
 
               e\bex\bxt\btq\bqu\buo\bot\bte\be
-                      If set, $\b$'_\bs_\bt_\br_\bi_\bn_\bg' and  $\b$"_\bs_\bt_\br_\bi_\bn_\bg"  quoting  is  performed
-                      within   $\b${\b{_\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br}\b}   expansions  enclosed  in  double
+                      If  set,  $\b$'_\bs_\bt_\br_\bi_\bn_\bg'  and  $\b$"_\bs_\bt_\br_\bi_\bn_\bg" quoting is performed
+                      within  $\b${\b{_\bp_\ba_\br_\ba_\bm_\be_\bt_\be_\br}\b}  expansions  enclosed   in   double
                       quotes.  This option is enabled by default.
 
               f\bfa\bai\bil\blg\bgl\blo\bob\bb
-                      If set, patterns which fail to  match  filenames  during
+                      If  set,  patterns  which fail to match filenames during
                       pathname expansion result in an expansion error.
 
               f\bfo\bor\brc\bce\be_\b_f\bfi\big\bgn\bno\bor\bre\be
-                      If  set,  the  suffixes  specified  by the F\bFI\bIG\bGN\bNO\bOR\bRE\bE shell
-                      variable cause words to be ignored when performing  word
+                      If set, the suffixes  specified  by  the  F\bFI\bIG\bGN\bNO\bOR\bRE\b shell
+                      variable  cause words to be ignored when performing word
                       completion even if the ignored words are the only possi-
-                      ble completions.  See S\bSH\bHE\bEL\bLL\bL V\bVA\bAR\bRI\bIA\bAB\bBL\bLE\bES\bS above  for  a  de-
-                      scription  of  F\bFI\bIG\bGN\bNO\bOR\bRE\bE.   This  option is enabled by de-
+                      ble  completions.   See S\bSH\bHE\bEL\bLL\bL V\bVA\bAR\bRI\bIA\bAB\bBL\bLE\bES\bS in _\bb_\ba_\bs_\bh_\b(_\b1_\b) for a
+                      description of F\bFI\bIG\bGN\bNO\bOR\bRE\bE.  This option is enabled  by  de-
                       fault.
 
               g\bgl\blo\bob\bba\bas\bsc\bci\bii\bir\bra\ban\bng\bge\bes\bs
-                      If set,  range  expressions  used  in  pattern  matching
-                      bracket  expressions (see P\bPa\bat\btt\bte\ber\brn\bn M\bMa\bat\btc\bch\bhi\bin\bng\bg 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 b\bb will not  collate
-                      between  A\bA  and  B\bB,  and upper-case and lower-case ASCII
-                      characters will collate together.
+                      If  set,  range  expressions  used  in  pattern matching
+                      bracket expressions (see P\bPa\bat\btt\bte\ber\brn\bn  M\bMa\bat\btc\bch\bhi\bin\bng\bg  in  _\bb_\ba_\bs_\bh_\b(_\b1_\b))
+                      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\bb will not col-
+                      late between A\bA and  B\bB,  and  upper-case  and  lower-case
+                      ASCII characters will collate together.
+
+              g\bgl\blo\bob\bbs\bsk\bki\bip\bpd\bdo\bot\bts\bs
+                      If  set,  pathname  expansion will never match the file-
+                      names `\b``\b`.\b.'\b''\b'  and `\b``\b`.\b..\b.'\b''\b', even if the pattern begins with
+                      a `\b``\b`.\b.'\b''\b'.  This option is enabled by default.
 
               g\bgl\blo\bob\bbs\bst\bta\bar\br
                       If set, the pattern *\b**\b* 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  /\b/,
+                      text will match all files and zero or  more  directories
+                      and  subdirectories.  If the pattern is followed by a /\b/,
                       only directories and subdirectories match.
 
               g\bgn\bnu\bu_\b_e\ber\brr\brf\bfm\bmt\bt
@@ -1490,49 +1530,49 @@ B\bBA\bAS\bSH\bH B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
                       GNU error message format.
 
               h\bhi\bis\bst\bta\bap\bpp\bpe\ben\bnd\bd
-                      If set, the history list is appended to the  file  named
+                      If  set,  the history list is appended to the file named
                       by the value of the H\bHI\bIS\bST\bTF\bFI\bIL\bLE\bE variable when the shell ex-
                       its, rather than overwriting the file.
 
               h\bhi\bis\bst\btr\bre\bee\bed\bdi\bit\bt
-                      If set, and r\bre\bea\bad\bdl\bli\bin\bne\be is being used, a user is given  the
+                      If  set, and r\bre\bea\bad\bdl\bli\bin\bne\be is being used, a user is given the
                       opportunity to re-edit a failed history substitution.
 
               h\bhi\bis\bst\btv\bve\ber\bri\bif\bfy\by
-                      If  set, and r\bre\bea\bad\bdl\bli\bin\bne\be is being used, the results of his-
-                      tory substitution are  not  immediately  passed  to  the
-                      shell  parser.   Instead,  the  resulting line is loaded
+                      If set, and r\bre\bea\bad\bdl\bli\bin\bne\be 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 r\bre\bea\bad\bdl\bli\bin\bne\be editing buffer, allowing further modi-
                       fication.
 
               h\bho\bos\bst\btc\bco\bom\bmp\bpl\ble\bet\bte\be
                       If set, and r\bre\bea\bad\bdl\bli\bin\bne\be is being used, b\bba\bas\bsh\bh will attempt to
-                      perform hostname completion when a word containing  a  @\b@
-                      is   being  completed  (see  C\bCo\bom\bmp\bpl\ble\bet\bti\bin\bng\bg  under  R\bRE\bEA\bAD\bDL\bLI\bIN\bNE\bE
-                      above).  This is enabled by default.
+                      perform  hostname  completion when a word containing a @\b@
+                      is being completed (see  C\bCo\bom\bmp\bpl\ble\bet\bti\bin\bng\bg  under  R\bRE\bEA\bAD\bDL\bLI\bIN\bNE\bE  in
+                      _\bb_\ba_\bs_\bh_\b(_\b1_\b)).  This is enabled by default.
 
               h\bhu\bup\bpo\bon\bne\bex\bxi\bit\bt
                       If set, b\bba\bas\bsh\bh will send S\bSI\bIG\bGH\bHU\bUP\bP to all jobs when an inter-
                       active login shell exits.
 
               i\bin\bnh\bhe\ber\bri\bit\bt_\b_e\ber\brr\bre\bex\bxi\bit\bt
-                      If  set,  command substitution inherits the value of the
-                      e\ber\brr\bre\bex\bxi\bit\boption, instead of unsetting it in the  subshell
-                      environment.   This option is enabled when _\bp_\bo_\bs_\bi_\bx _\bm_\bo_\bd_\be is
+                      If set, command substitution inherits the value  of  the
+                      e\ber\brr\bre\bex\bxi\bit\b option, instead of unsetting it in the subshell
+                      environment.  This option is enabled when _\bp_\bo_\bs_\bi_\bx _\bm_\bo_\bd_\b is
                       enabled.
 
               i\bin\bnt\bte\ber\bra\bac\bct\bti\biv\bve\be_\b_c\bco\bom\bmm\bme\ben\bnt\bts\bs
                       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 C\bCO\bOM\bMM\bME\bEN\bNT\bTS\babove).  This  op-
-                      tion is enabled by default.
+                      and all remaining characters on that line to be  ignored
+                      in an interactive shell (see C\bCO\bOM\bMM\bME\bEN\bNT\bTS\bin _\bb_\ba_\bs_\bh_\b(_\b1_\b)).  This
+                      option is enabled by default.
 
               l\bla\bas\bst\btp\bpi\bip\bpe\be
-                      If  set,  and  job control is not active, the shell runs
+                      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.
 
-              l\bli\bit\bth\bhi\bis\bst\bt If  set,  and  the c\bcm\bmd\bdh\bhi\bis\bst\bt option is enabled, multi-line
+              l\bli\bit\bth\bhi\bis\bst\bt If set, and the c\bcm\bmd\bdh\bhi\bis\bst\bt option  is  enabled,  multi-line
                       commands are saved to the history with embedded newlines
                       rather than using semicolon separators where possible.
 
@@ -1543,49 +1583,60 @@ B\bBA\bAS\bSH\bH B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
                       tribute is not inherited.
 
               l\blo\boc\bca\bal\blv\bva\bar\br_\b_u\bun\bns\bse\bet\bt
-                      If set, calling u\bun\bns\bse\bet\bt 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
+                      If  set,  calling  u\bun\bns\bse\bet\bt  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.
 
               l\blo\bog\bgi\bin\bn_\b_s\bsh\bhe\bel\bll\bl
-                      The shell sets this option if it is started as  a  login
-                      shell  (see  I\bIN\bNV\bVO\bOC\bCA\bAT\bTI\bIO\bON\bN  above).   The  value may not be
+                      The  shell  sets this option if it is started as a login
+                      shell (see I\bIN\bNV\bVO\bOC\bCA\bAT\bTI\bIO\bON\bN in _\bb_\ba_\bs_\bh_\b(_\b1_\b)).  The value may not be
                       changed.
 
               m\bma\bai\bil\blw\bwa\bar\brn\bn
-                      If set, and a file that b\bba\bas\bsh\bh is checking  for  mail  has
-                      been  accessed  since  the last time it was checked, the
-                      message ``The mail in _\bm_\ba_\bi_\bl_\bf_\bi_\bl_\be has been read''  is  dis-
+                      If  set,  and  a file that b\bba\bas\bsh\bh is checking for mail has
+                      been accessed since the last time it  was  checked,  the
+                      message  ``The  mail in _\bm_\ba_\bi_\bl_\bf_\bi_\bl_\be has been read'' is dis-
                       played.
 
               n\bno\bo_\b_e\bem\bmp\bpt\bty\by_\b_c\bcm\bmd\bd_\b_c\bco\bom\bmp\bpl\ble\bet\bti\bio\bon\bn
-                      If  set,  and  r\bre\bea\bad\bdl\bli\bin\bne\be is being used, b\bba\bas\bsh\bh will not at-
-                      tempt to search the P\bPA\bAT\bTH\bH for possible  completions  when
+                      If set, and r\bre\bea\bad\bdl\bli\bin\bne\be is being used, b\bba\bas\bsh\bh  will  not  at-
+                      tempt  to  search the P\bPA\bAT\bTH\bH for possible completions when
                       completion is attempted on an empty line.
 
               n\bno\boc\bca\bas\bse\beg\bgl\blo\bob\bb
-                      If  set,  b\bba\bas\bsh\bh  matches  filenames in a case-insensitive
+                      If set, b\bba\bas\bsh\bh matches  filenames  in  a  case-insensitive
                       fashion when performing pathname expansion (see P\bPa\bat\bth\bhn\bna\bam\bme\be
-                      E\bEx\bxp\bpa\ban\bns\bsi\bio\bon\babove).
+                      E\bEx\bxp\bpa\ban\bns\bsi\bio\bon\bin _\bb_\ba_\bs_\bh_\b(_\b1_\b)).
 
               n\bno\boc\bca\bas\bse\bem\bma\bat\btc\bch\bh
-                      If  set,  b\bba\bas\bsh\bh  matches  patterns  in a case-insensitive
+                      If set, b\bba\bas\bsh\bh  matches  patterns  in  a  case-insensitive
                       fashion when performing matching while executing c\bca\bas\bse\be or
                       [\b[[\b[ conditional commands, when performing pattern substi-
-                      tution word expansions, or when filtering possible  com-
+                      tution  word expansions, or when filtering possible com-
                       pletions as part of programmable completion.
 
+              n\bno\boe\bex\bxp\bpa\ban\bnd\bd_\b_t\btr\bra\ban\bns\bsl\bla\bat\bti\bio\bon\bn
+                      If set, b\bba\bas\bsh\bh encloses the translated results  of  $"..."
+                      quoting  in  single quotes instead of double quotes.  If
+                      the string is not translated, this has no effect.
+
               n\bnu\bul\bll\blg\bgl\blo\bob\bb
-                      If  set,  b\bba\bas\bsh\bh allows patterns which match no files (see
-                      P\bPa\bat\bth\bhn\bna\bam\bme\be E\bEx\bxp\bpa\ban\bns\bsi\bio\bon\bn above) to expand to  a  null  string,
-                      rather than themselves.
+                      If set, b\bba\bas\bsh\bh allows patterns which match no  files  (see
+                      P\bPa\bat\bth\bhn\bna\bam\bme\be  E\bEx\bxp\bpa\ban\bns\bsi\bio\bon\bn  in  _\bb_\ba_\bs_\bh_\b(_\b1_\b))  to  expand  to a null
+                      string, rather than themselves.
+
+              p\bpa\bat\bts\bsu\bub\bb_\b_r\bre\bep\bpl\bla\bac\bce\bem\bme\ben\bnt\bt
+                      If set, b\bba\bas\bsh\bh expands occurrences of &\b& in the replacement
+                      string  of  pattern  substitution to the text matched by
+                      the pattern, as described under P\bPa\bar\bra\bam\bme\bet\bte\ber\br  E\bEx\bxp\bpa\ban\bns\bsi\bio\bon\bn  in
+                      _\bb_\ba_\bs_\bh_\b(_\b1_\b).  This option is enabled by default.
 
               p\bpr\bro\bog\bgc\bco\bom\bmp\bp
                       If set, the programmable completion facilities (see P\bPr\bro\bo-\b-
-                      g\bgr\bra\bam\bmm\bma\bab\bbl\ble\be C\bCo\bom\bmp\bpl\ble\bet\bti\bio\bon\babove) are enabled.  This option is
-                      enabled by default.
+                      g\bgr\bra\bam\bmm\bma\bab\bbl\ble\be C\bCo\bom\bmp\bpl\ble\bet\bti\bio\bon\bin _\bb_\ba_\bs_\bh_\b(_\b1_\b)) are enabled.  This  op-
+                      tion is enabled by default.
 
               p\bpr\bro\bog\bgc\bco\bom\bmp\bp_\b_a\bal\bli\bia\bas\bs
                       If  set,  and  programmable  completion is enabled, b\bba\bas\bsh\bh
@@ -1597,15 +1648,15 @@ B\bBA\bAS\bSH\bH B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
               p\bpr\bro\bom\bmp\bpt\btv\bva\bar\brs\bs
                       If set, prompt strings undergo parameter expansion, com-
                       mand substitution, arithmetic expansion, and  quote  re-
-                      moval  after  being  expanded  as described in P\bPR\bRO\bOM\bMP\bPT\bTI\bIN\bNG\bG
-                      above.  This option is enabled by default.
+                      moval  after being expanded as described in P\bPR\bRO\bOM\bMP\bPT\bTI\bIN\bNG\bG in
+                      _\bb_\ba_\bs_\bh_\b(_\b1_\b).  This option is enabled by default.
 
               r\bre\bes\bst\btr\bri\bic\bct\bte\bed\bd_\b_s\bsh\bhe\bel\bll\bl
                       The shell sets this option  if  it  is  started  in  re-
-                      stricted  mode  (see R\bRE\bES\bST\bTR\bRI\bIC\bCT\bTE\bED\bD S\bSH\bHE\bEL\bLL\bL 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.
+                      stricted  mode  (see  R\bRE\bES\bST\bTR\bRI\bIC\bCT\bTE\bED\bD S\bSH\bHE\bEL\bLL\bL in _\bb_\ba_\bs_\bh_\b(_\b1_\b)).  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.
 
               s\bsh\bhi\bif\bft\bt_\b_v\bve\ber\brb\bbo\bos\bse\be
                       If set, the s\bsh\bhi\bif\bft\bt builtin prints an error  message  when
@@ -1613,38 +1664,44 @@ B\bBA\bAS\bSH\bH B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
                       ters.
 
               s\bso\bou\bur\brc\bce\bep\bpa\bat\bth\bh
-                      If set, the s\bso\bou\bur\brc\bce\be (.\b.) builtin uses the value of P\bPA\bAT\bTH\bH to
+                      If set, the .\b. (s\bso\bou\bur\brc\bce\be) builtin uses the value of P\bPA\bAT\bTH\bH to
                       find  the  directory  containing the file supplied as an
                       argument.  This option is enabled by default.
 
+              v\bva\bar\brr\bre\bed\bdi\bir\br_\b_c\bcl\blo\bos\bse\be
+                      If set, the shell automatically closes file  descriptors
+                      assigned using the _\b{_\bv_\ba_\br_\bn_\ba_\bm_\be_\b} redirection syntax (see R\bRE\bE-\b-
+                      D\bDI\bIR\bRE\bEC\bCT\bTI\bIO\bON\bN in _\bb_\ba_\bs_\bh_\b(_\b1_\b)) instead of leaving them open  when
+                      the command completes.
+
               x\bxp\bpg\bg_\b_e\bec\bch\bho\bo
-                      If set, the e\bec\bch\bho\bo builtin  expands  backslash-escape  se-
+                      If  set,  the  e\bec\bch\bho\bo builtin expands backslash-escape se-
                       quences by default.
 
        s\bsu\bus\bsp\bpe\ben\bnd\bd [-\b-f\bf]
-              Suspend  the execution of this shell until it receives a S\bSI\bIG\bGC\bCO\bON\bNT\bT
-              signal.  A login shell cannot be suspended; the -\b-f\bf option can be
-              used to override this and force the suspension.  The return sta-
-              tus is 0 unless the shell is a login shell and -\b-f\bf  is  not  sup-
-              plied, or if job control is not enabled.
+              Suspend the execution of this shell until it receives a  S\bSI\bIG\bGC\bCO\bON\bNT\bT
+              signal.   A login shell, or a shell without job control enabled,
+              cannot be suspended; the -\b-f\bf 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\bf  is
+              not supplied.
 
        t\bte\bes\bst\bt _\be_\bx_\bp_\br
        [\b[ _\be_\bx_\bp_\br ]\b]
               Return a status of 0 (true) or 1 (false) depending on the evalu-
               ation of the conditional expression _\be_\bx_\bp_\br.  Each operator and op-
               erand  must be a separate argument.  Expressions are composed of
-              the primaries described in the b\bba\bas\bsh\bh  manual  page  under  C\bCO\bON\bND\bDI\bI-\b-
-              T\bTI\bIO\bON\bNA\bAL\bL  E\bEX\bXP\bPR\bRE\bES\bSS\bSI\bIO\bON\bNS\bS.  t\bte\bes\bst\bt does not accept any options, nor does
-              it accept and ignore an argument of -\b--\b- 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-
+              the primaries described in  _\bb_\ba_\bs_\bh_\b(_\b1_\b)  under  C\bCO\bON\bND\bDI\bIT\bTI\bIO\bON\bNA\bAL\bL  E\bEX\bXP\bPR\bRE\bES\bS-\b-
+              S\bSI\bIO\bON\bNS\bS.  t\bte\bes\bst\bt does not accept any options, nor does it accept and
+              ignore an argument of -\b--\b- 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.
               !\b! _\be_\bx_\bp_\br True if _\be_\bx_\bp_\br is false.
               (\b( _\be_\bx_\bp_\br )\b)
-                     Returns the value of _\be_\bx_\bp_\br.  This may be used to  override
+                     Returns  the value of _\be_\bx_\bp_\br.  This may be used to override
                      the normal precedence of operators.
               _\be_\bx_\bp_\br_\b1 -a\ba _\be_\bx_\bp_\br_\b2
                      True if both _\be_\bx_\bp_\br_\b1 and _\be_\bx_\bp_\br_\b2 are true.
@@ -1661,135 +1718,139 @@ B\bBA\bAS\bSH\bH B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
                      null.
               2 arguments
                      If the first argument is !\b!, 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 C\bCO\bON\bND\bDI\bIT\bTI\bIO\bON\bNA\bAL\bL E\bEX\bXP\bPR\bRE\bES\bSS\bSI\bIO\bON\bNS\bS,  the  expression  is
+                     only  if the second argument is null.  If the first argu-
+                     ment is one of the unary conditional operators listed  in
+                     _\bb_\ba_\bs_\bh_\b(_\b1_\b)  under C\bCO\bON\bND\bDI\bIT\bTI\bIO\bON\bNA\bAL\bL E\bEX\bXP\bPR\bRE\bES\bSS\bSI\bIO\bON\bNS\bS, 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 C\bCO\bON\bND\bDI\bIT\bTI\bIO\bON\bNA\bAL\bL E\bEX\bXP\bPR\bRE\bES\bSS\bSI\bIO\bON\bNS\bS, the
-                     result of the expression is the result of the binary test
-                     using  the first and third arguments as operands.  The -\b-a\ba
-                     and -\b-o\bo operators are  considered  binary  operators  when
-                     there  are  three arguments.  If the first argument is !\b!,
-                     the value is the negation of the two-argument test  using
-                     the second and third arguments.  If the first argument is
-                     exactly (\b( and the third argument is exactly )\b), the result
-                     is  the one-argument test of the second argument.  Other-
-                     wise, the expression is false.
+                     If  the  second argument is one of the binary conditional
+                     operators listed in  _\bb_\ba_\bs_\bh_\b(_\b1_\b)  under  C\bCO\bON\bND\bDI\bIT\bTI\bIO\bON\bNA\bAL\bL  E\bEX\bXP\bPR\bRE\bES\bS-\b-
+                     S\bSI\bIO\bON\bNS\bS,  the result of the expression is the result of the
+                     binary test using the first and third arguments as  oper-
+                     ands.   The -\b-a\ba and -\b-o\bo operators are considered binary op-
+                     erators when there are three arguments.  If the first ar-
+                     gument  is  !\b!, the value is the negation of the two-argu-
+                     ment test using the second and third arguments.   If  the
+                     first argument is exactly (\b( and the third argument is ex-
+                     actly )\b), 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 !\b!, the result is the negation of
                      the  three-argument  expression composed of the remaining
-                     arguments.  Otherwise, the expression is parsed and eval-
-                     uated  according  to  precedence  using  the rules listed
-                     above.
+                     arguments.  the two-argument test using  the  second  and
+                     third  arguments.  If the first argument is exactly (\b( and
+                     the fourth argument is exactly )\b), 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
+                     The  expression  is  parsed  and  evaluated  according to
                      precedence using the rules listed above.
 
-              When  used  with  t\bte\bes\bst\bt  or [\b[, the <\b< and >\b> operators sort lexico-
+              When used with t\bte\bes\bst\bt or [\b[, the <\b< and  >\b>  operators  sort  lexico-
               graphically using ASCII ordering.
 
-       t\bti\bim\bme\bes\bs  Print the accumulated user and system times for  the  shell  and
+       t\bti\bim\bme\bes\bs  Print  the  accumulated  user and system times for the shell and
               for processes run from the shell.  The return status is 0.
 
        t\btr\bra\bap\bp [-\b-l\blp\bp] [[_\ba_\br_\bg] _\bs_\bi_\bg_\bs_\bp_\be_\bc ...]
-              The  command  _\ba_\br_\bg  is to be read and executed when the shell re-
+              The command _\ba_\br_\bg is to be read and executed when  the  shell  re-
               ceives signal(s) _\bs_\bi_\bg_\bs_\bp_\be_\bc.  If _\ba_\br_\bg is absent (and there is a sin-
-              gle  _\bs_\bi_\bg_\bs_\bp_\be_\bc) or -\b-, each specified signal is reset to its origi-
-              nal disposition (the value it had upon entrance to  the  shell).
-              If  _\ba_\br_\bg  is the null string the signal specified by each _\bs_\bi_\bg_\bs_\bp_\be_\bc
-              is ignored by the shell and by the commands it invokes.  If  _\ba_\br_\bg
-              is  not present and -\b-p\bp has been supplied, then the trap commands
+              gle _\bs_\bi_\bg_\bs_\bp_\be_\bc) or -\b-, each specified signal is reset to its  origi-
+              nal  disposition  (the value it had upon entrance to the shell).
+              If _\ba_\br_\bg is the null string the signal specified by  each  _\bs_\bi_\bg_\bs_\bp_\be_\bc
+              is  ignored by the shell and by the commands it invokes.  If _\ba_\br_\bg
+              is not present and -\b-p\bp has been supplied, then the trap  commands
               associated with each _\bs_\bi_\bg_\bs_\bp_\be_\bc are displayed.  If no arguments are
-              supplied  or  if  only -\b-p\bp is given, t\btr\bra\bap\bp prints the list of com-
-              mands associated with each signal.  The  -\b-l\bl  option  causes  the
-              shell  to  print  a list of signal names and their corresponding
-              numbers.  Each _\bs_\bi_\bg_\bs_\bp_\be_\bc is either a signal name defined in  <_\bs_\bi_\bg_\b-
-              _\bn_\ba_\bl_\b._\bh>,  or  a signal number.  Signal names are case insensitive
+              supplied or if only -\b-p\bp is given, t\btr\bra\bap\bp prints the  list  of  com-
+              mands  associated  with  each  signal.  The -\b-l\bl option causes the
+              shell to print a list of signal names  and  their  corresponding
+              numbers.   Each _\bs_\bi_\bg_\bs_\bp_\be_\bc is either a signal name defined in <_\bs_\bi_\bg_\b-
+              _\bn_\ba_\bl_\b._\bh>, or a signal number.  Signal names are  case  insensitive
               and the S\bSI\bIG\bG prefix is optional.
 
-              If a _\bs_\bi_\bg_\bs_\bp_\be_\bc is E\bEX\bXI\bIT\bT (0) the command _\ba_\br_\bg  is  executed  on  exit
-              from  the shell.  If a _\bs_\bi_\bg_\bs_\bp_\be_\bc is D\bDE\bEB\bBU\bUG\bG, the command _\ba_\br_\bg is exe-
-              cuted before every _\bs_\bi_\bm_\bp_\bl_\be _\bc_\bo_\bm_\bm_\ba_\bn_\bd, _\bf_\bo_\br  command,  _\bc_\ba_\bs_\b command,
-              _\bs_\be_\bl_\be_\bc_\b command,  every  arithmetic  _\bf_\bo_\br command, and before the
-              first command executes in a shell function  (see  S\bSH\bHE\bEL\bLL\bL  G\bGR\bRA\bAM\bMM\bMA\bAR\bR
-              above).   Refer to the description of the e\bex\bxt\btd\bde\beb\bbu\bug\bg option to the
-              s\bsh\bho\bop\bpt\bt builtin for details of its effect on the D\bDE\bEB\bBU\bUG\bG trap.  If a
-              _\bs_\bi_\bg_\bs_\bp_\be_\bc is R\bRE\bET\bTU\bUR\bRN\bN, the command _\ba_\br_\bg is executed each time a shell
-              function or a script executed with the .\b. or s\bso\bou\bur\brc\bce\be builtins fin-
-              ishes executing.
-
-              If  a  _\bs_\bi_\bg_\bs_\bp_\be_\bc  is  E\bER\bRR\bR,  the command _\ba_\br_\bg is executed whenever a
+              If  a  _\bs_\bi_\bg_\bs_\bp_\be_\bc  is  E\bEX\bXI\bIT\bT (0) the command _\ba_\br_\bg is executed on exit
+              from the shell.  If a _\bs_\bi_\bg_\bs_\bp_\be_\bc is D\bDE\bEB\bBU\bUG\bG, the command _\ba_\br_\bg is  exe-
+              cuted  before  every  _\bs_\bi_\bm_\bp_\bl_\be _\bc_\bo_\bm_\bm_\ba_\bn_\bd, _\bf_\bo_\br command, _\bc_\ba_\bs_\be command,
+              _\bs_\be_\bl_\be_\bc_\bcommand, every arithmetic _\bf_\bo_\br  command,  and  before  the
+              first command executes in a shell function (see S\bSH\bHE\bEL\bLL\bL G\bGR\bRA\bAM\bMM\bMA\bAR\bR in
+              _\bb_\ba_\bs_\bh_\b(_\b1_\b)).  Refer to the description of the  e\bex\bxt\btd\bde\beb\bbu\bug\bg  option  to
+              the  s\bsh\bho\bop\bpt\bt  builtin for details of its effect on the D\bDE\bEB\bBU\bUG\bG trap.
+              If a _\bs_\bi_\bg_\bs_\bp_\be_\bc is R\bRE\bET\bTU\bUR\bRN\bN, the command _\ba_\br_\bg is executed each time  a
+              shell  function  or  a  script  executed  with  the  .\b. or s\bso\bou\bur\brc\bce\be
+              builtins finishes executing.
+
+              If a _\bs_\bi_\bg_\bs_\bp_\be_\bc is E\bER\bRR\bR, the command  _\ba_\br_\bg  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 E\bER\bRR\bR trap is not executed  if  the
+              the  following  conditions.  The E\bER\bRR\bR trap is not executed if the
               failed command is part of the command list immediately following
-              a w\bwh\bhi\bil\ble\be or u\bun\bnt\bti\bil\bl keyword, part of the test in an  _\bi_\b statement,
+              a  w\bwh\bhi\bil\ble\be  or u\bun\bnt\bti\bil\bl keyword, part of the test in an _\bi_\bf statement,
               part of a command executed in a &\b&&\b& or |\b||\b| list except the command
-              following the final &\b&&\b& or |\b||\b|, any command in a pipeline but  the
-              last,  or  if the command's return value is being inverted using
+              following  the final &\b&&\b& or |\b||\b|, any command in a pipeline but the
+              last, or if the command's return value is being  inverted  using
               !\b!.  These are the same conditions obeyed by the e\ber\brr\bre\bex\bxi\bit\bt (-\b-e\be) 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
+              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  _\bs_\bi_\bg_\bs_\bp_\be_\b is
+              one  is  created.   The return status is false if any _\bs_\bi_\bg_\bs_\bp_\be_\bc is
               invalid; otherwise t\btr\bra\bap\bp returns true.
 
        t\bty\byp\bpe\be [-\b-a\baf\bft\btp\bpP\bP] _\bn_\ba_\bm_\be [_\bn_\ba_\bm_\be ...]
-              With  no options, indicate how each _\bn_\ba_\bm_\be would be interpreted if
+              With no options, indicate how each _\bn_\ba_\bm_\be would be interpreted  if
               used as a command name.  If the -\b-t\bt option is used, t\bty\byp\bpe\be prints a
-              string  which  is  one  of _\ba_\bl_\bi_\ba_\bs, _\bk_\be_\by_\bw_\bo_\br_\bd, _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn, _\bb_\bu_\bi_\bl_\bt_\bi_\bn, or
-              _\bf_\bi_\bl_\bif  _\bn_\ba_\bm_\be  is  an  alias,  shell  reserved  word,  function,
-              builtin,  or disk file, respectively.  If the _\bn_\ba_\bm_\be is not found,
-              then nothing is printed, and an exit  status  of  false  is  re-
-              turned.   If the -\b-p\bp option is used, t\bty\byp\bpe\be either returns the name
-              of the disk file that would be executed if _\bn_\ba_\bm_\be  were  specified
-              as  a command name, or nothing if ``type -t name'' would not re-
-              turn _\bf_\bi_\bl_\be.  The -\b-P\bP option forces a P\bPA\bAT\bTH\bH search  for  each  _\bn_\ba_\bm_\be,
+              string which is one of _\ba_\bl_\bi_\ba_\bs,  _\bk_\be_\by_\bw_\bo_\br_\bd,  _\bf_\bu_\bn_\bc_\bt_\bi_\bo_\bn,  _\bb_\bu_\bi_\bl_\bt_\bi_\bn,  or
+              _\bf_\bi_\bl_\b if  _\bn_\ba_\bm_\be  is  an  alias,  shell  reserved  word, function,
+              builtin, or disk file, respectively.  If the _\bn_\ba_\bm_\be is not  found,
+              then  nothing  is  printed,  and  an exit status of false is re-
+              turned.  If the -\b-p\bp option is used, t\bty\byp\bpe\be either returns the  name
+              of  the  disk file that would be executed if _\bn_\ba_\bm_\be were specified
+              as a command name, or nothing if ``type -t name'' would not  re-
+              turn  _\bf_\bi_\bl_\be.   The  -\b-P\bP option forces a P\bPA\bAT\bTH\bH search for each _\bn_\ba_\bm_\be,
               even if ``type -t name'' would not return _\bf_\bi_\bl_\be.  If a command is
               hashed, -\b-p\bp and -\b-P\bP print the hashed value, which is not necessar-
-              ily  the  file  that appears first in P\bPA\bAT\bTH\bH.  If the -\b-a\ba option is
-              used, t\bty\byp\bpe\be prints all of the places that contain  an  executable
+              ily the file that appears first in P\bPA\bAT\bTH\bH.  If the  -\b-a\ba  option  is
+              used,  t\bty\byp\bpe\be  prints all of the places that contain an executable
               named _\bn_\ba_\bm_\be.  This includes aliases and functions, if and only if
               the -\b-p\bp option is not also used.  The table of hashed commands is
-              not  consulted  when  using  -\b-a\ba.  The -\b-f\bf option suppresses shell
+              not consulted when using -\b-a\ba.  The  -\b-f\bf  option  suppresses  shell
               function lookup, as with the c\bco\bom\bmm\bma\ban\bnd\bd builtin.  t\bty\byp\bpe\be returns true
               if all of the arguments are found, false if any are not found.
 
        u\bul\bli\bim\bmi\bit\bt [-\b-H\bHS\bS] -\b-a\ba
        u\bul\bli\bim\bmi\bit\bt [-\b-H\bHS\bS] [-\b-b\bbc\bcd\bde\bef\bfi\bik\bkl\blm\bmn\bnp\bpq\bqr\brs\bst\btu\buv\bvx\bxP\bPR\bRT\bT [_\bl_\bi_\bm_\bi_\bt]]
-              Provides  control  over the resources available to the shell and
-              to processes started by it, on systems that allow such  control.
+              Provides control over the resources available to the  shell  and
+              to  processes started by it, on systems that allow such control.
               The -\b-H\bH and -\b-S\bS 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\bH nor -\b-S\bS is  speci-
+              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\bH nor -\b-S\bS is speci-
               fied, both the soft and hard limits are set.  The value of _\bl_\bi_\bm_\bi_\bt
               can be a number in the unit specified for the resource or one of
               the special values h\bha\bar\brd\bd, s\bso\bof\bft\bt, or u\bun\bnl\bli\bim\bmi\bit\bte\bed\bd, which stand for the
-              current hard limit, the current soft limit, and  no  limit,  re-
-              spectively.   If _\bl_\bi_\bm_\bi_\bt is omitted, the current value of the soft
+              current  hard  limit,  the current soft limit, and no limit, re-
+              spectively.  If _\bl_\bi_\bm_\bi_\bt is omitted, the current value of the  soft
               limit of the resource is printed, unless the -\b-H\bH option is given.
-              When  more  than  one  resource is specified, the limit name and
-              unit, if appropriate, are printed before the value.   Other  op-
+              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:
               -\b-a\ba     All current limits are reported; no limits are set
               -\b-b\bb     The maximum socket buffer size
               -\b-c\bc     The maximum size of core files created
               -\b-d\bd     The maximum size of a process's data segment
               -\b-e\be     The maximum scheduling priority ("nice")
-              -\b-f\bf     The  maximum  size  of files written by the shell and its
+              -\b-f\bf     The maximum size of files written by the  shell  and  its
                      children
               -\b-i\bi     The maximum number of pending signals
               -\b-k\bk     The maximum number of kqueues that may be allocated
               -\b-l\bl     The maximum size that may be locked into memory
-              -\b-m\bm     The maximum resident set size (many systems do not  honor
+              -\b-m\bm     The  maximum resident set size (many systems do not honor
                      this limit)
               -\b-n\bn     The maximum number of open file descriptors (most systems
                      do not allow this value to be set)
@@ -1798,132 +1859,134 @@ B\bBA\bAS\bSH\bH B\bBU\bUI\bIL\bLT\bTI\bIN\bN C\bCO\bOM\bMM\bMA\bAN\bND\bDS\bS
               -\b-r\br     The maximum real-time scheduling priority
               -\b-s\bs     The maximum stack size
               -\b-t\bt     The maximum amount of cpu time in seconds
-              -\b-u\bu     The maximum number of processes  available  to  a  single
+              -\b-u\bu     The  maximum  number  of  processes available to a single
                      user
-              -\b-v\bv     The  maximum  amount  of  virtual memory available to the
+              -\b-v\bv     The maximum amount of virtual  memory  available  to  the
                      shell and, on some systems, to its children
               -\b-x\bx     The maximum number of file locks
               -\b-P\bP     The maximum number of pseudoterminals
-              -\b-R\bR     The maximum time  a  real-time  process  can  run  before
+              -\b-R\bR     The  maximum  time  a  real-time  process  can run before
                      blocking, in microseconds
               -\b-T\bT     The maximum number of threads
 
-              If  _\bl_\bi_\bm_\bi_\bt  is given, and the -\b-a\ba option is not used, _\bl_\bi_\bm_\bi_\bt is the
-              new value of the specified resource.  If  no  option  is  given,
-              then  -\b-f\bf is assumed.  Values are in 1024-byte increments, except
-              for -\b-t\bt, which is in seconds; -\b-R\bR, which is in  microseconds;  -\b-p\bp,
-              which  is  in  units of 512-byte blocks; -\b-P\bP, -\b-T\bT, -\b-b\bb, -\b-k\bk, -\b-n\bn, and
-              -\b-u\bu, which are unscaled values; and, when in posix mode,  -\b-c\b and
-              -\b-f\bf,  which  are  in 512-byte increments.  The return status is 0
-              unless an invalid option or argument is supplied,  or  an  error
+              If _\bl_\bi_\bm_\bi_\bt is given, and the -\b-a\ba option is not used, _\bl_\bi_\bm_\bi_\bt  is  the
+              new  value  of  the  specified resource.  If no option is given,
+              then -\b-f\bf is assumed.  Values are in 1024-byte increments,  except
+              for  -\b-t\bt,  which is in seconds; -\b-R\bR, which is in microseconds; -\b-p\bp,
+              which is in units of 512-byte blocks; -\b-P\bP, -\b-T\bT, -\b-b\bb,  -\b-k\bk,  -\b-n\bn,  and
+              -\b-u\bu,  which  are unscaled values; and, when in posix mode, -\b-c\bc and
+              -\b-f\bf, 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.
 
        u\bum\bma\bas\bsk\bk [-\b-p\bp] [-\b-S\bS] [_\bm_\bo_\bd_\be]
               The user file-creation mask is set to _\bm_\bo_\bd_\be.  If _\bm_\bo_\bd_\be 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
-              _\bc_\bh_\bm_\bo_\bd(1).  If _\bm_\bo_\bd_\be is omitted, the current value of the mask  is
-              printed.   The  -\b-S\bS  option causes the mask to be printed in sym-
-              bolic form; the default output is an octal number.   If  the  -\b-p\bp
+              a  digit,  it is interpreted as an octal number; otherwise it is
+              interpreted as a symbolic mode mask similar to that accepted  by
+              _\bc_\bh_\bm_\bo_\bd(1).   If _\bm_\bo_\bd_\be is omitted, the current value of the mask is
+              printed.  The -\b-S\bS option causes the mask to be  printed  in  sym-
+              bolic  form;  the  default output is an octal number.  If the -\b-p\bp
               option is supplied, and _\bm_\bo_\bd_\be 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 _\bm_\bo_\bd_\be argument was supplied,
+              was successfully changed or if no _\bm_\bo_\bd_\be  argument  was  supplied,
               and false otherwise.
 
        u\bun\bna\bal\bli\bia\bas\bs [-a\ba] [_\bn_\ba_\bm_\be ...]
-              Remove each _\bn_\ba_\bm_\be from the list of defined  aliases.   If  -\b-a\b is
-              supplied,  all  alias definitions are removed.  The return value
+              Remove  each  _\bn_\ba_\bm_\be  from  the list of defined aliases.  If -\b-a\ba is
+              supplied, all alias definitions are removed.  The  return  value
               is true unless a supplied _\bn_\ba_\bm_\be is not a defined alias.
 
        u\bun\bns\bse\bet\bt [-f\bfv\bv] [-n\bn] [_\bn_\ba_\bm_\be ...]
-              For each _\bn_\ba_\bm_\be, remove the corresponding  variable  or  function.
+              For  each  _\bn_\ba_\bm_\be,  remove the corresponding variable or function.
               If the -\b-v\bv option is given, each _\bn_\ba_\bm_\be refers to a shell variable,
-              and that variable is removed.  Read-only variables  may  not  be
-              unset.   If  -\b-f\bf  is specified, each _\bn_\ba_\bm_\be refers to a shell func-
-              tion, and the function definition is removed.  If the -\b-n\b option
-              is  supplied, and _\bn_\ba_\bm_\be is a variable with the _\bn_\ba_\bm_\be_\br_\be_\bf attribute,
-              _\bn_\ba_\bm_\bwill be unset rather than the variable it  references.   -\b-n\bn
-              has  no  effect if the -\b-f\bf option is supplied.  If no options are
-              supplied, each _\bn_\ba_\bm_\be 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  B\bBA\bAS\bSH\bH_\b_A\bAL\bLI\bIA\bAS\bSE\bES\bS,
+              and  that  variable  is removed.  Read-only variables may not be
+              unset.  If -\b-f\bf is specified, each _\bn_\ba_\bm_\be refers to  a  shell  func-
+              tion,  and the function definition is removed.  If the -\b-n\bn option
+              is supplied, and _\bn_\ba_\bm_\be is a variable with the _\bn_\ba_\bm_\be_\br_\be_\b attribute,
+              _\bn_\ba_\bm_\b will  be unset rather than the variable it references.  -\b-n\bn
+              has no effect if the -\b-f\bf option is supplied.  If no  options  are
+              supplied,  each  _\bn_\ba_\bm_\be 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   B\bBA\bAS\bSH\bH_\b_A\bAL\bLI\bIA\bAS\bSE\bES\bS,
               B\bBA\bAS\bSH\bH_\b_A\bAR\bRG\bGV\bV0\b0,  B\bBA\bAS\bSH\bH_\b_C\bCM\bMD\bDS\bS,  B\bBA\bAS\bSH\bH_\b_C\bCO\bOM\bMM\bMA\bAN\bND\bD,  B\bBA\bAS\bSH\bH_\b_S\bSU\bUB\bBS\bSH\bHE\bEL\bLL\bL,  B\bBA\bAS\bSH\bHP\bPI\bID\bD,
-              C\bCO\bOM\bMP\bP_\b_W\bWO\bOR\bRD\bDB\bBR\bRE\bEA\bAK\bKS\bS,  D\bDI\bIR\bRS\bST\bTA\bAC\bCK\bK,  E\bEP\bPO\bOC\bCH\bHR\bRE\bEA\bAL\bLT\bTI\bIM\bME\bE,  E\bEP\bPO\bOC\bCH\bHS\bSE\bEC\bCO\bON\bND\bDS\bS, F\bFU\bUN\bNC\bC-\b-
-              N\bNA\bAM\bME\bE, G\bGR\bRO\bOU\bUP\bPS\bS, H\bHI\bIS\bST\bTC\bCM\bMD\bD, L\bLI\bIN\bNE\bEN\bNO\bO, R\bRA\bAN\bND\bDO\bOM\bM, S\bSE\bEC\bCO\bON\bND\bDS\bS, or  S\bSR\bRA\bAN\bND\bDO\bOM\b are
+              C\bCO\bOM\bMP\bP_\b_W\bWO\bOR\bRD\bDB\bBR\bRE\bEA\bAK\bKS\bS, D\bDI\bIR\bRS\bST\bTA\bAC\bCK\bK,  E\bEP\bPO\bOC\bCH\bHR\bRE\bEA\bAL\bLT\bTI\bIM\bME\bE,  E\bEP\bPO\bOC\bCH\bHS\bSE\bEC\bCO\bON\bND\bDS\bS,  F\bFU\bUN\bNC\bC-\b-
+              N\bNA\bAM\bME\bE,  G\bGR\bRO\bOU\bUP\bPS\bS,  H\bHI\bIS\bST\bTC\bCM\bMD\bD, L\bLI\bIN\bNE\bEN\bNO\bO, R\bRA\bAN\bND\bDO\bOM\bM, S\bSE\bEC\bCO\bON\bND\bDS\bS, or S\bSR\bRA\bAN\bND\bDO\bOM\bM are
               unset, they lose their special properties, even if they are sub-
               sequently reset.  The exit status is true unless a _\bn_\ba_\bm_\be is read-
-              only.
+              only or may not be unset.
 
        w\bwa\bai\bit\bt [-\b-f\bfn\bn] [-\b-p\bp _\bv_\ba_\br_\bn_\ba_\bm_\be] [_\bi_\bd _\b._\b._\b.]
               Wait for each specified child process and return its termination
-              status.  Each _\bi_\bd 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 _\bi_\bd is not given,  w\bwa\bai\bit\bt  waits  for  all  running
-              background  jobs  and the last-executed process substitution, if
+              status.   Each _\bi_\bd 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  _\bi_\bd  is  not given, w\bwa\bai\bit\bt 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\bn option is supplied, w\bwa\bai\bit\bt waits for a single job from
+              If the -\b-n\bn option is supplied, w\bwa\bai\bit\bt waits for a single  job  from
               the list of _\bi_\bds or, if no _\bi_\bds are supplied, any job, to complete
-              and  returns its exit status.  If none of the supplied arguments
+              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\bp option is supplied, the process or job identifier of  the
-              job  for  which  the  exit status is returned is assigned to the
-              variable _\bv_\ba_\br_\bn_\ba_\bm_\be named by the  option  argument.   The  variable
-              will  be unset initially, before any assignment.  This is useful
-              only when the -\b-n\bn option is supplied.  Supplying the  -\b-f\b option,
-              when  job control is enabled, forces w\bwa\bai\bit\bt to wait for _\bi_\bd to ter-
+              shell has no unwaited-for children, the exit status is 127.   If
+              the  -\b-p\bp option is supplied, the process or job identifier of the
+              job for which the exit status is returned  is  assigned  to  the
+              variable  _\bv_\ba_\br_\bn_\ba_\bm_\be  named  by  the option argument.  The variable
+              will be unset initially, before any assignment.  This is  useful
+              only  when  the -\b-n\bn option is supplied.  Supplying the -\b-f\bf option,
+              when job control is enabled, forces w\bwa\bai\bit\bt to wait for _\bi_\bd to  ter-
               minate before returning its status, instead of returning when it
-              changes  status.  If _\bi_\bd specifies a non-existent process or job,
-              the return status is 127.  Otherwise, the return status  is  the
-              exit status of the last process or job waited for.
+              changes status.  If _\bi_\bd specifies a non-existent process or  job,
+              the  return  status is 127.  If w\bwa\bai\bit\bt is interrupted by a signal,
+              the return status will be greater than 128, as  described  under
+              S\bSI\bIG\bGN\bNA\bAL\bLS\bS  in  _\bb_\ba_\bs_\bh_\b(_\b1_\b).   Otherwise, the return status is the exit
+              status of the last process or job waited for.
 
 S\bSH\bHE\bEL\bLL\bL C\bCO\bOM\bMP\bPA\bAT\bTI\bIB\bBI\bIL\bLI\bIT\bTY\bY M\bMO\bOD\bDE\bE
-       Bash-4.0 introduced the concept of a `shell compatibility level', spec-
-       ified as a set of options to the shopt builtin c\bco\bom\bmp\bpa\bat\bt3\b31\b1, c\bco\bom\bmp\bpa\bat\bt3\b32\b2, c\bco\bom\bm-\b-
-       p\bpa\bat\bt4\b40\b0,  c\bco\bom\bmp\bpa\bat\bt4\b41\b1,  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 solu-
-       tion.
-
-       This section does not mention behavior that is standard for a  particu-
-       lar  version  (e.g., setting c\bco\bom\bmp\bpa\bat\bt3\b32\b2 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 above).
-
-       If  a  user enables, say, c\bco\bom\bmp\bpa\bat\bt3\b32\b2, 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\bba\bas\bsh\bh, 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
+       Bash-4.0 introduced the concept of a _\bs_\bh_\be_\bl_\bl _\bc_\bo_\bm_\bp_\ba_\bt_\bi_\bb_\bi_\bl_\bi_\bt_\by _\bl_\be_\bv_\be_\bl,  speci-
+       fied  as  a  set  of options to the shopt builtin ( c\bco\bom\bmp\bpa\bat\bt3\b31\b1, c\bco\bom\bmp\bpa\bat\bt3\b32\b2,
+       c\bco\bom\bmp\bpa\bat\bt4\b40\b0, c\bco\bom\bmp\bpa\bat\bt4\b41\b1, 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 c\bco\bom\bmp\bpa\bat\bt3\b32\b2 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, c\bco\bom\bmp\bpa\bat\bt3\b32\b2, 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\bba\bas\bsh\bh, 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 c\bco\bom\bmp\bpa\bat\bt3\b32\b2 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
+       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: B\bBA\bAS\bSH\bH_\b_C\bCO\bOM\bMP\bPA\bAT\bT.  The value as-
+       Bash-4.3 introduced a new shell variable: B\bBA\bAS\bSH\bH_\b_C\bCO\bOM\bMP\bPA\bAT\bT.  The  value  as-
        signed to this variable (a decimal version number like 4.2, or an inte-
-       ger  corresponding to the c\bco\bom\bmp\bpa\bat\bt_\bN_\bN option, like 42) determines the com-
+       ger corresponding to the c\bco\bom\bmp\bpa\bat\bt_\bN_\bN 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 B\bBA\bAS\bSH\bH_\b_C\bCO\bOM\bM-\b-
+       Starting  with bash-4.4, Bash has begun deprecating older compatibility
+       levels.  Eventually, the options will be removed in favor of  B\bBA\bAS\bSH\bH_\b_C\bCO\bOM\bM-\b-
        P\bPA\bAT\bT.
 
-       Bash-5.0 is the final version for which there  will  be  an  individual
-       shopt  option for the previous version. Users should use B\bBA\bAS\bSH\bH_\b_C\bCO\bOM\bMP\bPA\bAT\bT on
+       Bash-5.0  is  the  final  version for which there will be an individual
+       shopt option for the previous version. Users should use B\bBA\bAS\bSH\bH_\b_C\bCO\bOM\bMP\bPA\bAT\b on
        bash-5.0 and later versions.
 
-       The following table describes the behavior changes controlled  by  each
+       The  following  table describes the behavior changes controlled by each
        compatibility level setting.  The c\bco\bom\bmp\bpa\bat\bt_\bN_\bN tag is used as shorthand for
        setting the compatibility level to _\bN_\bN using one of the following mecha-
-       nisms.   For versions prior to bash-5.0, the compatibility level may be
-       set using the corresponding c\bco\bom\bmp\bpa\bat\bt_\bN_\bN shopt option.   For  bash-4.3  and
-       later  versions,  the  B\bBA\bAS\bSH\bH_\b_C\bCO\bOM\bMP\bPA\bAT\bT variable is preferred, and it is re-
+       nisms.  For versions prior to bash-5.0, the compatibility level may  be
+       set  using  the  corresponding c\bco\bom\bmp\bpa\bat\bt_\bN_\bN shopt option.  For bash-4.3 and
+       later versions, the B\bBA\bAS\bSH\bH_\b_C\bCO\bOM\bMP\bPA\bAT\bT variable is preferred, and  it  is  re-
        quired for bash-5.1 and later versions.
 
        c\bco\bom\bmp\bpa\bat\bt3\b31\b1
@@ -1931,84 +1994,90 @@ S\bSH\bHE\bEL\bLL\bL C\bCO\bOM\bMP\bPA\bAT\bTI\bIB\bBI\bIL\bLI\bIT\bTY\bY M\bMO\bOD\bDE\bE
                      ator (=~) has no special effect
 
        c\bco\bom\bmp\bpa\bat\bt3\b32\b2
-              +\bo      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
+              +\bo      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)
 
        c\bco\bom\bmp\bpa\bat\bt4\b40\b0
-              +\bo      the  <\b<  and >\b> operators to the [\b[[\b[ command do not consider
+              +\bo      the <\b< and >\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 col-
-                     lation and _\bs_\bt_\br_\bc_\bm_\bp(3); bash-4.1 and later use the  current
+                     lation  and _\bs_\bt_\br_\bc_\bm_\bp(3); bash-4.1 and later use the current
                      locale's collation sequence and _\bs_\bt_\br_\bc_\bo_\bl_\bl(3).
 
        c\bco\bom\bmp\bpa\bat\bt4\b41\b1
-              +\bo      in  _\bp_\bo_\bs_\bi_\bx mode, t\bti\bim\bme\be may be followed by options and still
+              +\bo      in _\bp_\bo_\bs_\bi_\bx mode, t\bti\bim\bme\be may be followed by options and  still
                      be recognized as a reserved word (this is POSIX interpre-
                      tation 267)
               +\bo      in _\bp_\bo_\bs_\bi_\bx mode, the parser requires that an even number of
-                     single quotes occur in the  _\bw_\bo_\br_\bd  portion  of  a  double-
-                     quoted  parameter expansion and treats them specially, so
-                     that characters within the single quotes  are  considered
+                     single  quotes  occur  in  the  _\bw_\bo_\br_\bd 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)
 
        c\bco\bom\bmp\bpa\bat\bt4\b42\b2
               +\bo      the replacement string in double-quoted pattern substitu-
-                     tion does not undergo quote removal, as it does  in  ver-
+                     tion  does  not undergo quote removal, as it does in ver-
                      sions after bash-4.2
-              +\bo      in  posix mode, single quotes are considered special when
-                     expanding the _\bw_\bo_\br_\bd 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
+              +\bo      in posix mode, single quotes are considered special  when
+                     expanding  the  _\bw_\bo_\br_\bd 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
 
        c\bco\bom\bmp\bpa\bat\bt4\b43\b3
-              +\bo      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 (declare -a foo='(1 2)'). Later  versions
-                     warn that this usage is deprecated
-              +\bo      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
+              +\bo      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
+              +\bo      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)
-              +\bo      when  executing  a  shell  function,   the   loop   state
+              +\bo      when   executing   a   shell  function,  the  loop  state
                      (while/until/etc.)  is not reset, so b\bbr\bre\bea\bak\bk or c\bco\bon\bnt\bti\bin\bnu\bue\be in
                      that function will break or continue loops in the calling
-                     context.  Bash-4.4 and later reset the loop state to pre-
+                     context. Bash-4.4 and later reset the loop state to  pre-
                      vent this
 
        c\bco\bom\bmp\bpa\bat\bt4\b44\b4
-              +\bo      the shell sets  up  the  values  used  by  B\bBA\bAS\bSH\bH_\b_A\bAR\bRG\bGV\b and
-                     B\bBA\bAS\bSH\bH_\b_A\bAR\bRG\bGC\b so  they  can expand to the shell's positional
+              +\bo      the  shell  sets  up  the  values  used  by B\bBA\bAS\bSH\bH_\b_A\bAR\bRG\bGV\bV and
+                     B\bBA\bAS\bSH\bH_\b_A\bAR\bRG\bGC\bso they can expand to  the  shell's  positional
                      parameters even if extended debugging mode is not enabled
-              +\bo      a subshell inherits loops from  its  parent  context,  so
-                     b\bbr\bre\bea\bak\b or  c\bco\bon\bnt\bti\bin\bnu\bue\be  will  cause  the  subshell  to exit.
-                     Bash-5.0 and later reset the loop state  to  prevent  the
+              +\bo      a  subshell  inherits  loops  from its parent context, so
+                     b\bbr\bre\bea\bak\bor  c\bco\bon\bnt\bti\bin\bnu\bue\be  will  cause  the  subshell  to  exit.
+                     Bash-5.0  and  later  reset the loop state to prevent the
                      exit
-              +\bo      variable  assignments  preceding builtins like e\bex\bxp\bpo\bor\brt\bt and
+              +\bo      variable assignments preceding builtins like  e\bex\bxp\bpo\bor\brt\b and
                      r\bre\bea\bad\bdo\bon\bnl\bly\by that set attributes continue to affect variables
                      with the same name in the calling environment even if the
                      shell is not in posix mode
 
        c\bco\bom\bmp\bpa\bat\bt5\b50\b0
-              +\bo      Bash-5.1 changed the way $\b$R\bRA\bAN\bND\bDO\bOM\bM is generated  to  intro-
+              +\bo      Bash-5.1  changed  the way $\b$R\bRA\bAN\bND\bDO\bOM\bM 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 R\bRA\bAN\bND\bDO\bOM\b will
+                     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 R\bRA\bAN\bND\bDO\bOM\bM will
                      produce the same sequence as in bash-5.0
-              +\bo      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  -\b-l\b op-
+              +\bo      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 -\b-l\bl op-
                      tion is supplied.
 
+       c\bco\bom\bmp\bpa\bat\bt5\b51\b1
+              +\bo      The u\bun\bns\bse\bet\bt builtin treats attempts  to  unset  array  sub-
+                     scripts  @\b@ and *\b* differently depending on whether the ar-
+                     ray is indexed or associative, and  differently  than  in
+                     previous versions.
+
 S\bSE\bEE\bE A\bAL\bLS\bSO\bO
        bash(1), sh(1)
 
 
 
-GNU Bash 5.0                      2004 Apr 20                 BASH_BUILTINS(1)
+GNU Bash 5.2                   2021 November 22               BASH_BUILTINS(1)
index 4413c76f019747dac80335d326c66c82c58db546..43d92a2fc7eef8da4684f274a056d881284d7641 100644 (file)
@@ -7,14 +7,14 @@
 .de FN
 \fI\|\\$1\|\fP
 ..
-.TH BASH_BUILTINS 1 "2004 Apr 20" "GNU Bash 5.0"
+.TH BASH_BUILTINS 1 "2021 November 22" "GNU Bash 5.2"
 .SH NAME
-bash, :, ., [, alias, bg, bind, break, builtin, caller,
-cd, command, compgen, complete,
-compopt, continue, declare, dirs, disown, echo, enable, eval, exec, exit,
+:, ., [, alias, bg, bind, break, builtin, caller,
+cd, command, compgen, complete, compopt,
+continue, declare, dirs, disown, echo, enable, eval, exec, exit,
 export, false, fc, fg, getopts, hash, help, history, jobs, kill,
 let, local, logout, mapfile, popd, printf, pushd, pwd, read,
-readonly, return, set,
+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
index ae11c5449fd162703a7586f4d36071d7f677af2d..1becc2a282021765d2dcdcc170aa733c40011307 100644 (file)
@@ -1,13 +1,13 @@
 %!PS-Adobe-3.0
 %%Creator: groff version 1.22.4
-%%CreationDate: Wed Nov 18 15:13:06 2020
+%%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: 26
+%%Pages: 27
 %%PageOrder: Ascend
 %%DocumentMedia: Default 612 792 0 () ()
 %%Orientation: Portrait
@@ -242,19 +242,20 @@ BP
 /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 .288(bash, :, ., [, alias, bg, bind, break, b)108 96 R
-.287(uiltin, caller)-.2 F 2.787(,c)-.4 G .287
-(d, command, compgen, complete, compopt, continue, de-)-2.787 F .327
-(clare, dirs, diso)108 108 R .327(wn, echo, enable, e)-.25 F -.25(va)
--.25 G .327(l, e).25 F -.15(xe)-.15 G .327(c, e).15 F .327(xit, e)-.15 F
-.327(xport, f)-.15 F .327(alse, fc, fg, getopts, hash, help, history)-.1
-F 2.827(,j)-.65 G .328(obs, kill,)-2.827 F .124(let, local, logout, map\
-\214le, popd, printf, pushd, pwd, read, readonly)108 120 R 2.624(,r)-.65
-G .124(eturn, set, shift, shopt, source, suspend,)-2.624 F 1.926(test, \
-times, trap, true, type, typeset, ulimit, umask, unalias, unset, w)108
-132 R 1.927(ait \255 bash b)-.1 F 1.927(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
+(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
@@ -288,38 +289,39 @@ F2(sour)108 303.6 Q(ce)-.18 E F3(\214lename)2.5 E F0([)2.5 E F3(ar)A
 (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 .489(names in)144 339.6 R/F4 9/Times-Bold@0 SF -.666(PA)2.989 G(TH)
--.189 E F0 .489(are used to \214nd the directory containing)2.739 F F3
-(\214lename)4.899 E F0 5.488(.T).18 G .488(he \214le searched for in)
--5.488 F F4 -.666(PA)2.988 G(TH)-.189 E F0 .832(need not be e)144 351.6
-R -.15(xe)-.15 G 3.332(cutable. When).15 F F2(bash)3.332 E F0 .832
-(is not in)3.332 F F3 .832(posix mode)3.332 F F0 3.332(,t)C .833
-(he current directory is searched if no)-3.332 F .982
-(\214le is found in)144 363.6 R F4 -.666(PA)3.481 G(TH)-.189 E/F5 9
-/Times-Roman@0 SF(.)A F0 .981(If the)5.481 F F2(sour)3.481 E(cepath)-.18
-E F0 .981(option to the)3.481 F F2(shopt)3.481 E F0 -.2(bu)3.481 G .981
-(iltin command is turned of).2 F .981(f, the)-.25 F F4 -.666(PA)144
-375.6 S(TH)-.189 E F0 .112(is not searched.)2.362 F .112(If an)5.112 F
-(y)-.15 E F3(ar)2.612 E(guments)-.37 E F0 .112(are supplied, the)2.612 F
-2.612(yb)-.15 G .112(ecome the positional parameters when)-2.612 F F3
-(\214lename)144 387.6 Q F0 .485(is e)2.985 F -.15(xe)-.15 G 2.985
-(cuted. Otherwise).15 F .485(the positional parameters are unchanged.)
-2.985 F .485(If the)5.485 F F2<ad54>2.985 E F0 .485(option is en-)2.985
-F(abled,)144 399.6 Q F2(sour)3.324 E(ce)-.18 E F0 .824(inherits an)3.324
-F 3.324(yt)-.15 G .824(rap on)-3.324 F F2(DEB)3.324 E(UG)-.1 E F0 3.324
-(;i)C 3.324(fi)-3.324 G 3.324(ti)-3.324 G 3.324(sn)-3.324 G .825(ot, an)
--3.324 F(y)-.15 E F2(DEB)3.325 E(UG)-.1 E F0 .825(trap string is sa)
-3.325 F -.15(ve)-.2 G 3.325(da).15 G .825(nd re-)-3.325 F .817
-(stored around the call to)144 411.6 R F2(sour)3.317 E(ce)-.18 E F0
-3.317(,a)C(nd)-3.317 E F2(sour)3.317 E(ce)-.18 E F0 .817(unsets the)
-3.317 F F2(DEB)3.317 E(UG)-.1 E F0 .817(trap while it e)3.317 F -.15(xe)
--.15 G 3.317(cutes. If).15 F F2<ad54>3.317 E F0(is)3.317 E 1.435
-(not set, and the sourced \214le changes the)144 423.6 R F2(DEB)3.935 E
-(UG)-.1 E F0 1.435(trap, the ne)3.935 F 3.935(wv)-.25 G 1.435
-(alue is retained when)-4.185 F F2(sour)3.935 E(ce)-.18 E F0 3.763
-(completes. The)144 435.6 R 1.262
-(return status is the status of the last command e)3.763 F 1.262
-(xited within the script \(0 if no)-.15 F(commands are e)144 447.6 Q
+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
@@ -364,2955 +366,3070 @@ F2<ad72>-2.5 E F3 -.1(ke)2.5 G(yseq)-.2 E F0(])A F2(bind)108 642 Q F0([)
 G(ymap)-.2 E F0(])A F3 -.1(ke)2.5 G(yseq)-.2 E F0(:)A F3
 (function\255name)A F2(bind)108 678 Q F0([)2.5 E F2<ad6d>A F3 -.1(ke)2.5
 G(ymap)-.2 E F0(])A F3 -.1(ke)2.5 G(yseq)-.2 E F0(:)A F3 -.37(re)C
-(adline\255command).37 E F0 .238(Display current)144 690 R F2 -.18(re)
+(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 .476(macro, or set a)144 702 R F2 -.18(re)2.976 G(adline).18 E
-F0 -.25(va)2.976 G 2.976(riable. Each).25 F .476(non-option ar)2.976 F
-.475(gument is a command as it w)-.18 F .475(ould appear in)-.1 F F3
-(.inputr)144.23 714 Q(c)-.37 E F0 2.967(,b).31 G .467
-(ut each binding or command must be passed as a separate ar)-3.167 F
-.468(gument; e.g., '"\\C\255x\\C\255r":)-.18 F 2.5
-(re\255read\255init\255\214le'. Options,)144 726 R(if supplied, ha)2.5 E
-.3 -.15(ve t)-.2 H(he follo).15 E(wing meanings:)-.25 E(GNU Bash 5.0)72
-768 Q(2004 Apr 20)149.565 E(1)203.725 E 0 Cg EP
+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/F1 10/Times-Bold@0 SF<ad6d>144 84 Q/F2 10
-/Times-Italic@0 SF -.1(ke)2.5 G(ymap)-.2 E F0(Use)180 96 Q F2 -.1(ke)
-5.159 G(ymap)-.2 E F0 2.659(as the k)5.349 F -.15(ey)-.1 G 2.658
-(map to be af).15 F 2.658(fected by the subsequent bindings.)-.25 F
-(Acceptable)7.658 E F2 -.1(ke)180 108 S(ymap)-.2 E F0 3.192(names are)
-5.882 F F2 3.192(emacs, emacs\255standar)5.692 F 3.193
+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 120 Q F0 4.09(,a)C(nd)-4.09 E F2(vi\255insert)4.38 E
-F0(.).68 E F2(vi)6.589 E F0 1.589(is equi)4.089 F -.25(va)-.25 G 1.589
+(vi\255command)180 144 Q F0 4.089(,a)C(nd)-4.089 E F2(vi\255insert)4.379
+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.589(is also a syn-)4.089 F(on)180 132 Q(ym\);)-.15 E F2
-(emacs)2.5 E F0(is equi)2.5 E -.25(va)-.25 G(lent to).25 E F2
-(emacs\255standar)2.5 E(d)-.37 E F0(.)A F1<ad6c>144 144 Q F0
-(List the names of all)180 144 Q F1 -.18(re)2.5 G(adline).18 E F0
-(functions.)2.5 E F1<ad70>144 156 Q F0(Display)180 156 Q F1 -.18(re)2.5
-G(adline).18 E F0(function names and bindings in such a w)2.5 E
-(ay that the)-.1 E 2.5(yc)-.15 G(an be re-read.)-2.5 E F1<ad50>144 168 Q
-F0(List current)180 168 Q F1 -.18(re)2.5 G(adline).18 E F0
-(function names and bindings.)2.5 E F1<ad73>144 180 Q F0(Display)180 180
-Q F1 -.18(re)3.655 G(adline).18 E F0 -.1(ke)3.655 G 3.655(ys)-.05 G
-1.155(equences bound to macros and the strings the)-3.655 F 3.655(yo)
--.15 G 1.155(utput in such a)-3.655 F -.1(wa)180 192 S 2.5(yt).1 G
-(hat the)-2.5 E 2.5(yc)-.15 G(an be re-read.)-2.5 E F1<ad53>144 204 Q F0
-(Display)180 204 Q F1 -.18(re)2.5 G(adline).18 E F0 -.1(ke)2.5 G 2.5(ys)
--.05 G(equences bound to macros and the strings the)-2.5 E 2.5(yo)-.15 G
-(utput.)-2.5 E F1<ad76>144 216 Q F0(Display)180 216 Q F1 -.18(re)2.5 G
+-.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 228 Q F0(List current)180 228 Q F1
+(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 240 Q F2(\214lename)2.5 E F0(Read k)180 252 Q
+(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 264 Q F2(function)2.5 E F0(Query about which k)180 276 Q -.15
+<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 288 Q F2(function)2.5 E F0
-(Unbind all k)180 300 Q -.15(ey)-.1 G 2.5(sb).15 G(ound to the named)
--2.5 E F2(function)2.5 E F0(.)A F1<ad72>144 312 Q F2 -.1(ke)2.5 G(yseq)
--.2 E F0(Remo)180 324 Q .3 -.15(ve a)-.15 H .3 -.15(ny c).15 H
+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
-336 Q F2 -.1(ke)2.5 G(yseq)-.2 E F1(:)A F2(shell\255command)A F0(Cause)
-180 348 Q F2(shell\255command)4.325 E F0 1.825(to be e)4.325 F -.15(xe)
+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 360 Q F0 1.764(is e)4.264 F -.15(xe)-.15 G 1.765
+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 372 S(adline).18 E F0 .375(line b)2.875 F(uf)-.2 E .375
+-.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.185(current location of the insertion point and the sa)180 384 R -.15
-(ve)-.2 G 3.686(di).15 G 1.186(nsertion point \(the mark\), respec-)
--3.686 F(ti)180 396 Q -.15(ve)-.25 G(ly).15 E 5.702(.I)-.65 G 3.202(ft)
--5.702 G .702(he e)-3.202 F -.15(xe)-.15 G .702
-(cuted command changes the v).15 F .701(alue of an)-.25 F 3.201(yo)-.15
-G(f)-3.201 E F3(READLINE_LINE)3.201 E/F4 9/Times-Roman@0 SF(,)A F3
-(READ-)2.951 E(LINE_POINT)180 408 Q F4(,)A F0(or)3.58 E F3
-(READLINE_MARK)3.83 E F4(,)A F0 1.33(those ne)3.58 F 3.83(wv)-.25 G
-1.331(alues will be re\215ected in the editing)-4.08 F(state.)180 420 Q
-F1<ad58>144 432 Q F0 .83(List all k)180 432 R 1.13 -.15(ey s)-.1 H .829
+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 444 Q(The return v)
-144 460.8 Q(alue is 0 unless an unrecognized option is gi)-.25 E -.15
+.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 477.6 Q(eak)-.18 E F0([)2.5 E F2(n)A F0(])A .054
-(Exit from within a)144 489.6 R F1 -.25(fo)2.554 G(r).25 E F0(,)A F1
+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 501.6 Q F2(n)3.075 E F0 .215(is greater than the\
+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
-513.6 Q F2(n)2.5 E F0(is not greater than or equal to 1.)2.5 E F1 -.2
-(bu)108 530.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 542.4 Q .77
+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
-554.4 R .615(uiltin, retaining the functionality of)-.2 F .57(the b)144
-566.4 R .57(uiltin within the function.)-.2 F(The)5.57 E F1(cd)3.07 E F0
+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 578.4 Q(alse if)-.1
+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 595.2 Q F0([)2.5 E F2 -.2(ex)C(pr)
-.2 E F0(])A .254(Returns the conte)144 607.2 R .254(xt of an)-.15 F
+(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 619.2 Q
+.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 631.2 R .254(If a non-ne)5.254 F -.05(ga)-.15
+.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 643.2 R -.15(xe)-.15 G 1.328(cution call stack.).15 F .001
-(This e)144 655.2 R .001(xtra information may be used, for e)-.15 F .001
+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 667.2 R .519(return v)3.019 F .519
+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 679.2 Q
-(alid position in the call stack.)-.25 E F1(cd)108 696 Q F0([)2.5 E F1
-<ad4c>A F0(|[)A F1<ad50>A F0([)2.5 E F1<ad65>A F0(]] [\255@]] [)A F2
-(dir)A F0(])A .322(Change the current directory to)144 708 R F2(dir)
-2.822 E F0 5.322(.i)C(f)-5.322 E F2(dir)2.822 E F0 .321
-(is not supplied, the v)2.822 F .321(alue of the)-.25 F F3(HOME)2.821 E
-F0 .321(shell v)2.571 F .321(ariable is)-.25 F 1.035(the def)144 720 R
-3.535(ault. An)-.1 F 3.535(ya)-.15 G 1.035(dditional ar)-3.535 F 1.035
-(guments follo)-.18 F(wing)-.25 E F2(dir)3.535 E F0 1.035(are ignored.)
-3.535 F 1.036(The v)6.035 F(ariable)-.25 E F3(CDP)3.536 E -.855(AT)-.666
-G(H).855 E F0(de\214nes)3.286 E(GNU Bash 5.0)72 768 Q(2004 Apr 20)
-149.565 E(2)203.725 E 0 Cg EP
+(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 .827
-(the search path for the directory containing)144 84 R/F1 10
-/Times-Italic@0 SF(dir)3.676 E F0 3.326(:e).73 G .826
-(ach directory name in)-3.326 F/F2 9/Times-Bold@0 SF(CDP)3.326 E -.855
-(AT)-.666 G(H).855 E F0 .826(is searched for)3.076 F F1(dir)144 96 Q F0
-5.664(.A)C(lternati)-5.664 E .964 -.15(ve d)-.25 H .665
-(irectory names in).15 F F2(CDP)3.165 E -.855(AT)-.666 G(H).855 E F0
-.665(are separated by a colon \(:\).)2.915 F 3.165(An)5.665 G .665
-(ull directory name)-3.165 F(in)144 108 Q F2(CDP)3.102 E -.855(AT)-.666
-G(H).855 E F0 .602(is the same as the current directory)2.852 F 3.102
-(,i)-.65 G .602(.e., `)-3.102 F(`)-.74 E/F3 10/Times-Bold@0 SF(.)A F0
--.74('')C 5.602(.I).74 G(f)-5.602 E F1(dir)3.451 E F0(be)3.831 E .601
-(gins with a slash \(/\), then)-.15 F F2(CD-)3.101 E -.666(PA)144 120 S
-(TH)-.189 E F0 1.003(is not used.)3.253 F(The)6.003 E F3<ad50>3.503 E F0
-1.003(option causes)3.503 F F3(cd)3.503 E F0 1.003(to use the ph)3.503 F
-1.003(ysical directory structure by resolving)-.05 F .123
-(symbolic links while tra)144 132 R -.15(ve)-.2 G(rsing).15 E F1(dir)
-2.623 E F0 .123(and before processing instances of)2.623 F F1(..)2.623 E
-F0(in)2.623 E F1(dir)2.623 E F0 .123(\(see also the)2.623 F F3<ad50>
-2.623 E F0(op-)2.622 E .429(tion to the)144 144 R F3(set)2.929 E F0 -.2
-(bu)2.929 G .429(iltin command\); the).2 F F3<ad4c>2.929 E F0 .43
-(option forces symbolic links to be follo)2.929 F .43(wed by resolving)
--.25 F .473(the link after processing instances of)144 156 R F1(..)2.973
-E F0(in)2.973 E F1(dir)2.973 E F0 5.473(.I)C(f)-5.473 E F1(..)2.973 E F0
-.473(appears in)2.973 F F1(dir)2.972 E F0 2.972(,i)C 2.972(ti)-2.972 G
-2.972(sp)-2.972 G .472(rocessed by remo)-2.972 F .472(ving the)-.15 F
-.948(immediately pre)144 168 R .948(vious pathname component from)-.25 F
-F1(dir)3.448 E F0 3.448(,b)C .948(ack to a slash or the be)-3.448 F .948
-(ginning of)-.15 F F1(dir)3.448 E F0 5.948(.I)C(f)-5.948 E(the)144 180 Q
-F3<ad65>2.868 E F0 .368(option is supplied with)2.868 F F3<ad50>2.868 E
-F0 2.868(,a)C .368(nd the current w)-2.868 F .368
-(orking directory cannot be successfully deter)-.1 F(-)-.2 E .612
-(mined after a successful directory change,)144 192 R F3(cd)3.112 E F0
-.612(will return an unsuccessful status.)3.112 F .613(On systems that)
-5.612 F .354(support it, the)144 204 R F3<ad40>2.854 E F0 .354
-(option presents the e)2.854 F .354(xtended attrib)-.15 F .354
-(utes associated with a \214le as a directory)-.2 F 5.353(.A)-.65 G(n)
--5.353 E(ar)144 216 Q .072(gument of)-.18 F F3<ad>2.572 E F0 .072
-(is con)2.572 F -.15(ve)-.4 G .072(rted to).15 F F2($OLDPWD)2.572 E F0
-.072(before the directory change is attempted.)2.322 F .072
-(If a non-empty)5.072 F .055(directory name from)144 228 R F2(CDP)2.555
-E -.855(AT)-.666 G(H).855 E F0 .055(is used, or if)2.305 F F3<ad>2.555 E
-F0 .055(is the \214rst ar)2.555 F .054
-(gument, and the directory change is suc-)-.18 F .168
-(cessful, the absolute pathname of the ne)144 240 R 2.668(ww)-.25 G .168
-(orking directory is written to the standard output.)-2.768 F(The)5.168
-E(return v)144 252 Q(alue is true if the directory w)-.25 E
-(as successfully changed; f)-.1 E(alse otherwise.)-.1 E F3(command)108
-268.8 Q F0([)2.5 E F3(\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 280.8 Q F1(command)2.765 E F0(with)
-3.335 E F1(ar)2.895 E(gs)-.37 E F0 .065
+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 292.8 R
-F2 -.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 F3<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 304.8 R .4(ault v)-.1 F .4
-(alue for)-.25 F F2 -.666(PA)2.9 G(TH)-.189 E F0 .399
+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 316.8 R F3<ad56>2.674 E F0(or)2.674 E F3
-<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 F3<ad76>2.675 E
-F0 .175(option causes)2.675 F 3.318(as)144 328.8 S .818(ingle w)-3.318 F
+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 F1(command)3.617 E F0 .817(to be displayed; the)4.087
-F F3<ad56>144 340.8 Q F0 .249(option produces a more v)2.749 F .249
-(erbose description.)-.15 F .249(If the)5.249 F F3<ad56>2.749 E F0(or)
-2.749 E F3<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 352.8 R F1(command)3.705 E F0 -.1
+-.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 F1
-(command)144.2 364.8 Q F0 1.598(cannot be found, the e)4.868 F 1.599
+(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 F3(command)4.099 E F0 -.2(bu)144 376.8 S
-(iltin is the e).2 E(xit status of)-.15 E F1(command)2.7 E F0(.).77 E F3
-(compgen)108 393.6 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 405.6 R
-F1(wor)2.513 E(d)-.37 E F0 .013(according to the)2.513 F F1(option)2.513
+(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 417.6 R F3(complete)3.481 E F0 -.2(bu)3.481 G .981
-(iltin with the e).2 F .981(xception of)-.15 F F3<ad70>3.481 E F0(and)
-3.481 E F3<ad72>3.481 E F0 3.481(,a)C .982(nd write the matches to the)
--3.481 F .131(standard output.)144 429.6 R .131(When using the)5.131 F
-F3<ad46>2.631 E F0(or)2.631 E F3<ad43>2.631 E F0 .131(options, the v)
+(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 441.6 Q(acilities, while a)-.1 E -.25(va)-.2 G
+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 465.6 R .352
+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
-477.6 R(If)5.02 E F1(wor)2.52 E(d)-.37 E F0 .02(is speci\214ed, only)
-2.52 F(those completions matching)144 489.6 Q F1(wor)2.5 E(d)-.37 E F0
-(will be displayed.)2.5 E(The return v)144 513.6 Q
+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 F3
-(complete)108 530.4 Q F0([)2.5 E F3(\255abcdefgjksuv)A F0 2.5(][)C F3
-<ad6f>-2.5 E F1(comp-option)2.5 E F0 2.5(][)C F3(\255DEI)-2.5 E F0 2.5
-(][)C F3<ad41>-2.5 E F1(action)2.5 E F0 2.5(][)C F3<ad47>-2.5 E F1
-(globpat)2.5 E F0 2.5(][)C F3<ad57>-2.5 E F1(wor)2.5 E(dlist)-.37 E F0
-(])A([)144 542.4 Q F3<ad46>A F1(function)2.5 E F0 2.5(][)C F3<ad43>-2.5
-E F1(command)2.5 E F0 2.5(][)C F3<ad58>-2.5 E F1(\214lterpat)2.5 E F0
-2.5(][)C F3<ad50>-2.5 E F1(pr)2.5 E(e\214x)-.37 E F0 2.5(][)C F3<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 F3(complete \255pr)108 554.4 Q F0([)2.5 E F3(\255DEI)
-A F0 2.5(][)C F1(name)-2.5 E F0(...])2.5 E .633(Specify ho)144 566.4 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 F3<ad70>3.134
+(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 578.4 R .139
+(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
-590.4 R(The)5.31 E F3<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
+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 602.4 R(The)6.208 E
-F3<ad44>3.708 E F0 1.207(option indicates that other supplied options)
-3.707 F .5(and actions should apply to the `)144 614.4 R(`def)-.74 E
+(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
-626.4 S .955(ommand for which no completion has pre)-3.455 F .955
-(viously been de\214ned.)-.25 F(The)5.955 E F3<ad45>3.455 E F0 .955
+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 638.4 R
+(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 650.4 R(The)5.447 E
-F3<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 662.4 R
-.123(ord on the line, or after a command de-)-.1 F 1.021
-(limiter such as)144 674.4 R F3(;)3.521 E F0(or)3.521 E F3(|)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 686.4 R F3
-<ad44>3.207 E F0 .707(option tak)3.207 F .707(es precedence o)-.1 F -.15
-(ve)-.15 G(r).15 E F3<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 F3
-<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 F3<ad44>3.208 E F0(,)A F3<ad45>144 698.4 Q F0 2.604(,o)C(r)
--2.604 E F3<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 710.4 Q(GNU Bash 5.0)72 768 Q
-(2004 Apr 20)149.565 E(3)203.725 E 0 Cg EP
+-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 .152
-(The process of applying these completion speci\214cations when w)144 84
-R .153(ord completion is attempted is de-)-.1 F(scribed abo)144 96 Q .3
--.15(ve u)-.15 H(nder).15 E/F1 10/Times-Bold@0 SF(Pr)2.5 E
-(ogrammable Completion)-.18 E F0(.)A .556
-(Other options, if speci\214ed, ha)144 120 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 132 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 144 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
-156 Q/F2 10/Times-Italic@0 SF(comp-option)2.5 E F0(The)184 168 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 180 Q F2(comp-option)5 E F0(may be one of:)2.5 E F1(bashdefault)184
-192 Q F0 .281(Perform the rest of the def)224 204 R(ault)-.1 E F1(bash)
-2.781 E F0 .281(completions if the compspec generates no)2.781 F
-(matches.)224 216 Q F1(default)184 228 Q F0 2.876(Use readline')224 228
-R 5.376(sd)-.55 G(ef)-5.376 E 2.875
+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 240 Q F1(dir)184 252 Q(names)-.15 E F0(Perform directory name compl\
-etion if the compspec generates no matches.)224 264 Q F1(\214lenames)184
-276 Q F0 -.7(Te)224 288 S .137(ll readline that the compspec generates \
+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 300 R 2.634(ea)-.1 G .134
+.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 312 R .45
-(Intended to be used with shell)5.45 F(functions.)224 324 Q F1(noquote)
-184 336 Q F0 -.7(Te)224 336 S .814
+(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 348 Q(ault\).)-.1 E F1(nosort)184 360 Q F0
--.7(Te)224 360 S(ll readline not to sort the list of possible completio\
-ns alphabetically).7 E(.)-.65 E F1(nospace)184 372 Q F0 -.7(Te)224 372 S
+(\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 384 Q F1
-(plusdirs)184 396 Q F0 1.985(After an)224 396 R 4.485(ym)-.15 G 1.985
+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 408 R 3.084(ym)-.15 G .584
-(atches are added to the results of the other)-3.084 F(actions.)224 420
-Q F1<ad41>144 432 Q F2(action)2.5 E F0(The)184 444 Q F2(action)2.5 E F0
+.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
-456 Q F0(Alias names.)224 456 Q(May also be speci\214ed as)5 E F1<ad61>
-2.5 E F0(.)A F1(arrayv)184 468 Q(ar)-.1 E F0(Array v)224 480 Q
-(ariable names.)-.25 E F1(binding)184 492 Q(Readline)224 492 Q F0 -.1
-(ke)2.5 G 2.5(yb)-.05 G(inding names.)-2.5 E F1 -.2(bu)184 504 S(iltin)
-.2 E F0(Names of shell b)224 504 Q(uiltin commands.)-.2 E
-(May also be speci\214ed as)5 E F1<ad62>2.5 E F0(.)A F1(command)184 516
-Q F0(Command names.)224 528 Q(May also be speci\214ed as)5 E F1<ad63>2.5
-E F0(.)A F1(dir)184 540 Q(ectory)-.18 E F0(Directory names.)224 552 Q
-(May also be speci\214ed as)5 E F1<ad64>2.5 E F0(.)A F1(disabled)184 564
-Q F0(Names of disabled shell b)224 576 Q(uiltins.)-.2 E F1(enabled)184
-588 Q F0(Names of enabled shell b)224 588 Q(uiltins.)-.2 E F1(export)184
-600 Q F0(Names of e)224 600 Q(xported shell v)-.15 E 2.5(ariables. May)
+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
-612 Q F0(File names.)224 612 Q(May also be speci\214ed as)5 E F1<ad66>
-2.5 E F0(.)A F1(function)184 624 Q F0(Names of shell functions.)224 636
-Q F1(gr)184 648 Q(oup)-.18 E F0(Group names.)224 648 Q
-(May also be speci\214ed as)5 E F1<ad67>2.5 E F0(.)A F1(helptopic)184
-660 Q F0(Help topics as accepted by the)224 672 Q F1(help)2.5 E F0 -.2
-(bu)2.5 G(iltin.).2 E F1(hostname)184 684 Q F0(Hostnames, as tak)224 696
-Q(en from the \214le speci\214ed by the)-.1 E/F3 9/Times-Bold@0 SF
-(HOSTFILE)2.5 E F0(shell v)2.25 E(ariable.)-.25 E F1(job)184 708 Q F0
-(Job names, if job control is acti)224 708 Q -.15(ve)-.25 G 5(.M).15 G
-(ay also be speci\214ed as)-5 E F1<ad6a>2.5 E F0(.)A(GNU Bash 5.0)72 768
-Q(2004 Apr 20)149.565 E(4)203.725 E 0 Cg EP
+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 -.1(ke)184 84 S(yw).1
-E(ord)-.1 E F0(Shell reserv)224 96 Q(ed w)-.15 E 2.5(ords. May)-.1 F
-(also be speci\214ed as)2.5 E F1<ad6b>2.5 E F0(.)A F1(running)184 108 Q
-F0(Names of running jobs, if job control is acti)224 108 Q -.15(ve)-.25
-G(.).15 E F1(ser)184 120 Q(vice)-.1 E F0(Service names.)224 120 Q
-(May also be speci\214ed as)5 E F1<ad73>2.5 E F0(.)A F1(setopt)184 132 Q
-F0 -1.11(Va)224 132 S(lid ar)1.11 E(guments for the)-.18 E F1<ad6f>2.5 E
-F0(option to the)2.5 E F1(set)2.5 E F0 -.2(bu)2.5 G(iltin.).2 E F1
-(shopt)184 144 Q F0(Shell option names as accepted by the)224 144 Q F1
-(shopt)2.5 E F0 -.2(bu)2.5 G(iltin.).2 E F1(signal)184 156 Q F0
-(Signal names.)224 156 Q F1(stopped)184 168 Q F0
-(Names of stopped jobs, if job control is acti)224 168 Q -.15(ve)-.25 G
-(.).15 E F1(user)184 180 Q F0(User names.)224 180 Q
-(May also be speci\214ed as)5 E F1<ad75>2.5 E F0(.)A F1 -.1(va)184 192 S
-(riable).1 E F0(Names of all shell v)224 192 Q 2.5(ariables. May)-.25 F
-(also be speci\214ed as)2.5 E F1<ad76>2.5 E F0(.)A F1<ad43>144 204 Q/F2
-10/Times-Italic@0 SF(command)2.5 E(command)184 216 Q F0 1.056(is e)3.556
+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(completions.)
-184 228 Q F1<ad46>144 240 Q F2(function)2.5 E F0 .113
-(The shell function)184 252 R F2(function)2.614 E F0 .114(is e)2.614 F
+(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 264 R
+(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 276 R 1.407(gument \()-.18 F F1
+(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 288 R .104
+(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 300 R
+(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/F3 9/Times-Bold@0 SF(COMPREPL)184 312 Q(Y)-.828 E F0(array v)2.25
-E(ariable.)-.25 E F1<ad47>144 324 Q F2(globpat)2.5 E F0 1.008
-(The pathname e)184 336 R 1.008(xpansion pattern)-.15 F F2(globpat)3.507
-E F0 1.007(is e)3.507 F 1.007(xpanded to generate the possible comple-)
--.15 F(tions.)184 348 Q F1<ad50>144 360 Q F2(pr)2.5 E(e\214x)-.37 E(pr)
-184 372 Q(e\214x)-.37 E F0 .534(is added at the be)3.034 F .534
+-.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 384 Q F1<ad53>144 396 Q F2(suf)2.5 E
-<8c78>-.18 E(suf)184 396 Q<8c78>-.18 E F0
+-.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 408 Q F2(wor)2.5 E
-(dlist)-.37 E F0(The)184 420 Q F2(wor)3.64 E(dlist)-.37 E F0 1.14
-(is split using the characters in the)3.64 F F3(IFS)3.64 E F0 1.139
+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 432 R .98(ord is e)-.1 F 3.481(xpanded. Shell)-.15
-F .981(quoting is honored within)3.481 F F2(wor)3.481 E(dlist)-.37 E F0
-3.481(,i)C 3.481(no)-3.481 G .981(rder to)-3.481 F(pro)184 444 Q .766
+(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 456 S 1.964(lue of).25 F F3(IFS)4.464 E/F4 9/Times-Roman@0 SF(.)
+(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 468 Q(ord being completed.)-.1 E F1<ad58>144 480
-Q F2(\214lterpat)2.5 E(\214lterpat)184 492 Q F0 .456
+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 504 R 1.596
-(guments, and each completion)-.18 F(matching)184 516 Q F2(\214lterpat)
+(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 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 528 Q 2.5(yc)-.15 G
-(ompletion not matching)-2.5 E F2(\214lterpat)2.5 E F0(is remo)2.5 E
--.15(ve)-.15 G(d.).15 E .466(The return v)144 544.8 R .466
+(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 556.8 R F2(name)3.862 E F0(ar)3.862 E 1.361
+(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 F2(name)144 568.8 Q F0
+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 585.6 Q F0([)2.5 E F1<ad6f>A F2(option)2.5 E F0 2.5(][)C
-F1(\255DEI)-2.5 E F0 2.5(][)C F1(+o)-2.5 E F2(option)2.5 E F0 2.5(][)C
-F2(name)-2.5 E F0(])A .447(Modify completion options for each)144 597.6
-R F2(name)2.947 E F0 .447(according to the)2.947 F F2(option)2.947 E F0
+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 609.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)
+(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 621.6 Q F2(name)
+(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 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 633.6 Q F0 -.2(bu)
+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 645.6 R(`def)-.74 E(ault')-.1 E 3.727('c)-.74 G 1.228(o\
+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 657.6 R 2.039
+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 669.6 R(`empty')-.74 E 4.038('c)-.74 G 1.539
+(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(The)144 681.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 693.6 R .868
-(ord on the line, or after a command delimiter such as)-.1 F F1(;)3.368
-E F0(or)3.368 E F1(|)3.368 E F0 3.368(,w)C .868(hich is usually com-)
--3.368 F(mand name completion.)144 705.6 Q 1.388(The return v)144 729.6
-R 1.388(alue is true unless an in)-.25 F -.25(va)-.4 G 1.387
-(lid option is supplied, an attempt is made to modify the).25 F
-(GNU Bash 5.0)72 768 Q(2004 Apr 20)149.565 E(5)203.725 E 0 Cg EP
+-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(options for a)144 84 Q/F1 10/Times-Italic@0
-SF(name)2.5 E F0(for which no completion speci\214cation e)2.5 E
-(xists, or an output error occurs.)-.15 E/F2 10/Times-Bold@0 SF
-(continue)108 100.8 Q F0([)2.5 E F1(n)A F0(])A .85(Resume the ne)144
-112.8 R .85(xt iteration of the enclosing)-.15 F F2 -.25(fo)3.35 G(r).25
-E F0(,)A F2(while)3.351 E F0(,)A F2(until)3.351 E F0 3.351(,o)C(r)-3.351
-E F2(select)3.351 E F0 3.351(loop. If)3.351 F F1(n)3.711 E F0 .851
-(is speci\214ed, re-)3.591 F .204(sume at the)144 124.8 R F1(n)2.704 E
-F0 .204(th enclosing loop.)B F1(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 F1(n)3.063 E F0 .203
+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 136.8 R(`top-le)-.74 E -.15(ve)-.25
+(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 F1(n)3.684 E F0
-1.184(is not)3.684 F(greater than or equal to 1.)144 148.8 Q F2(declar)
-108 165.6 Q(e)-.18 E F0([)2.5 E F2(\255aAfFgiIlnrtux)A F0 2.5(][)C F2
-<ad70>-2.5 E F0 2.5(][)C F1(name)-2.5 E F0([=)A F1(value)A F0 2.5(].)C
-(..])-2.5 E F2(typeset)108 177.6 Q F0([)2.5 E F2(\255aAfFgiIlnrtux)A F0
-2.5(][)C F2<ad70>-2.5 E F0 2.5(][)C F1(name)-2.5 E F0([=)A F1(value)A F0
-2.5(].)C(..])-2.5 E 1.265(Declare v)144 189.6 R 1.265
+(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 F1(name)3.765 E F0 3.765(sa)C 1.265
+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 201.6 S 3.46(riables. The).25
-F F2<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 F1(name)3.82 E F0 5.96(.W).18
-G(hen)-5.96 E F2<ad70>3.46 E F0 .96(is used)3.46 F(with)144 213.6 Q F1
+-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 F2<ad66>2.775 E F0(and)
-2.775 E F2<ad46>2.775 E F0 2.775(,a)C .274(re ignored.)-2.775 F(When)
-5.274 E F2<ad70>2.774 E F0 .274(is supplied)2.774 F(without)144 225.6 Q
-F1(name)3.789 E F0(ar)3.789 E 1.289(guments, it will display the attrib)
+(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 237.6 Q .38
+(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 F2<ad70>2.88 E F0(,)A F2
+(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
-249.6 R 1.106(utes and v)-.2 F 1.106(alues of all shell v)-.25 F 3.606
-(ariables. The)-.25 F F2<ad66>3.606 E F0 1.107
+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
-261.6 R(The)5.3 E F2<ad46>2.8 E F0 .299(option inhibits the display of \
+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
-273.6 R 1.54(utes are printed.)-.2 F 1.54(If the)6.54 F F2(extdeb)4.04 E
-(ug)-.2 E F0 1.54(shell option is enabled using)4.04 F F2(shopt)4.04 E
+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 285.6 R F1(name)3.148 E F0 .648
-(is de\214ned are displayed as well.)3.148 F(The)5.648 E F2<ad46>3.148 E
-F0 .648(option implies)3.148 F F2<ad66>144 297.6 Q F0 5.836(.T)C(he)
--5.836 E F2<ad67>3.336 E F0 .836(option forces v)3.336 F .837
+(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 F2(de-)3.337 E(clar)144 309.6 Q
+(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 F2<ad49>3.318 E
-F0 .818(option causes local)3.318 F -.25(va)144 321.6 S .693
+(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 F1(namer)3.194 E(ef)-.37 E F0(attrib)3.194 E .694(ute\) and v)-.2
+-.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 333.6 R F1(name)3.32 E F0 .82
+(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 345.6 R .379(The follo)5.379 F .379
+.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 357.6 Q(ute or to gi)
--.2 E .3 -.15(ve v)-.25 H(ariables attrib)-.1 E(utes:)-.2 E F2<ad61>144
-369.6 Q F0(Each)180 369.6 Q F1(name)2.5 E F0(is an inde)2.5 E -.15(xe)
--.15 G 2.5(da).15 G(rray v)-2.5 E(ariable \(see)-.25 E F2(Arrays)2.5 E
-F0(abo)2.5 E -.15(ve)-.15 G(\).).15 E F2<ad41>144 381.6 Q F0(Each)180
-381.6 Q F1(name)2.5 E F0(is an associati)2.5 E .3 -.15(ve a)-.25 H
-(rray v).15 E(ariable \(see)-.25 E F2(Arrays)2.5 E F0(abo)2.5 E -.15(ve)
--.15 G(\).).15 E F2<ad66>144 393.6 Q F0(Use function names only)180
-393.6 Q(.)-.65 E F2<ad69>144 405.6 Q F0 .558(The v)180 405.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 417.6 Q F0(abo)
-2.25 E -.15(ve)-.15 G 2.5(\)i).15 G 2.5(sp)-2.5 G(erformed when the v)
--2.5 E(ariable is assigned a v)-.25 E(alue.)-.25 E F2<ad6c>144 429.6 Q
-F0 .909(When the v)180 429.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 441.6 R
-(upper)2.5 E(-case attrib)-.2 E(ute is disabled.)-.2 E F2<ad6e>144 453.6
-Q F0(Gi)180 453.6 Q 1.62 -.15(ve e)-.25 H(ach).15 E F1(name)3.82 E F0
-(the)3.82 E F1(namer)3.819 E(ef)-.37 E F0(attrib)3.819 E 1.319
+(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 465.6 R .478(ariable is de\214ned by the v)-.25 F .478
-(alue of)-.25 F F1(name)2.978 E F0 5.478(.A)C .478
-(ll references, assignments, and at-)-5.478 F(trib)180 477.6 Q .782
-(ute modi\214cations to)-.2 F F1(name)3.282 E F0 3.282(,e)C .782
-(xcept those using or changing the)-3.432 F F2<ad6e>3.281 E F0(attrib)
-3.281 E .781(ute itself, are)-.2 F .808(performed on the v)180 489.6 R
-.808(ariable referenced by)-.25 F F1(name)3.308 E F0 1.908 -.55('s v)D
+(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 501.6 Q(ariables.)-.25 E F2<ad72>144 513.6 Q F0
-(Mak)180 513.6 Q(e)-.1 E F1(name)3.655 E F0 3.655(sr)C(eadonly)-3.655 E
+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
-525.6 Q F2<ad74>144 537.6 Q F0(Gi)180 537.6 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 549.6 Q(The trace attrib)5 E
-(ute has no special meaning for v)-.2 E(ariables.)-.25 E F2<ad75>144
-561.6 Q F0 .91(When the v)180 561.6 R .909(ariable is assigned a v)-.25
+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 573.6
-R(lo)2.5 E(wer)-.25 E(-case attrib)-.2 E(ute is disabled.)-.2 E F2<ad78>
-144 585.6 Q F0(Mark)180 585.6 Q F1(name)2.5 E F0 2.5(sf)C(or e)-2.5 E
+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 602.4 R 2.643(ft)-.25 G .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 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 614.4 R 3.079(ya)-.1 G
-.579(rray v)-3.079 F .579(ariables and)-.25 F F2(+r)3.079 E F0 .579
+(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 626.4 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 638.4 R 1.205(If a v)6.205 F 1.205
-(ariable name is follo)-.25 F 1.205(wed by =)-.25 F F1(value)A F0 3.705
+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 F1(value)144 650.4 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
+(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 662.4 R .882
+(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(in)144 674.4 Q -.25(va)-.4 G .365(lid optio\
-n is encountered, an attempt is made to de\214ne a function using).25 F
-/F5 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 686.4 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 698.4 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 710.4 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 722.4 R 1.213
-(ariable, an attempt is made to turn of)-.25 F 3.713(fa)-.25 G 1.213
-(rray status for an array v)-3.713 F 1.213(ariable, or an attempt is)
--.25 F(GNU Bash 5.0)72 768 Q(2004 Apr 20)149.565 E(6)203.725 E 0 Cg EP
+(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(made to display a non-e)144 84 Q
-(xistent function with)-.15 E/F1 10/Times-Bold@0 SF<ad66>2.5 E F0(.)A F1
-(dirs [\255clpv] [+)108 100.8 Q/F2 10/Times-Italic@0 SF(n)A F1 2.5(][)C
-<ad>-2.5 E F2(n)A F1(])A F0 -.4(Wi)144 112.8 S .329
+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 124.8 R 1.238
-(Directories are added to the list with the)6.238 F F1(pushd)144 136.8 Q
-F0 .928(command; the)3.428 F F1(popd)3.428 E F0 .928(command remo)3.428
+(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 148.8 S
-(ys the \214rst directory in the stack.).1 E F1<ad63>144 160.8 Q F0
-(Clears the directory stack by deleting all of the entries.)180 160.8 Q
-F1<ad6c>144 172.8 Q F0 .881
-(Produces a listing using full pathnames; the def)180 172.8 R .882
+(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
-184.8 Q(.)-.65 E F1<ad70>144 196.8 Q F0
-(Print the directory stack with one entry per line.)180 196.8 Q F1<ad76>
-144 208.8 Q F0 .273(Print the directory stack with one entry per line, \
-pre\214xing each entry with its inde)180 208.8 R 2.772(xi)-.15 G 2.772
-(nt)-2.772 G(he)-2.772 E(stack.)180 220.8 Q F1(+)144 232.8 Q F2(n)A F0
-1.564(Displays the)180 232.8 R F2(n)4.064 E F0 1.565
-(th entry counting from the left of the list sho)B 1.565(wn by)-.25 F F1
+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 244.8 Q F1<ad>144 256.8 Q F2
-(n)A F0 1.194(Displays the)180 256.8 R F2(n)3.694 E F0 1.194
+(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
-F1(dirs)3.694 E F0 1.194(when in)3.694 F -.2(vo)-.4 G -.1(ke).2 G(d).1 E
-(without options, starting with zero.)180 268.8 Q .257(The return v)144
-285.6 R .258(alue is 0 unless an in)-.25 F -.25(va)-.4 G .258
-(lid option is supplied or).25 F F2(n)2.758 E F0(inde)2.758 E -.15(xe)
+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 297.6 Q F1(diso)108 314.4 Q(wn)-.1 E F0([)2.5 E F1
-(\255ar)A F0 2.5(][)C F1<ad68>-2.5 E F0 2.5(][)C F2(jobspec)-2.5 E F0
-(... |)2.5 E F2(pid)2.5 E F0(... ])2.5 E -.4(Wi)144 326.4 S .122
-(thout options, remo).4 F .422 -.15(ve e)-.15 H(ach).15 E F2(jobspec)
+.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 F2(jobspec)4.362 E F0 .121(is not present, and)2.932
-F .096(neither the)144 338.4 R F1<ad61>2.596 E F0 .096(nor the)2.596 F
-F1<ad72>2.596 E F0 .096(option is supplied, the)2.596 F F2(curr)2.596 E
-.096(ent job)-.37 F F0 .096(is used.)2.596 F .096(If the)5.096 F F1
+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 F2(jobspec)145.74 350.4 Q F0 .586(is not remo)3.396 F -.15(ve)-.15
+.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/F3 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 362.4 R -.15
-(ve)-.25 G 3.462(sa).15 G F3(SIGHUP)A/F4 9/Times-Roman@0 SF(.)A F0 .962
-(If no)5.462 F F2(jobspec)5.202 E F0 .962(is supplied, the)3.772 F F1
+.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 374.4 R F1
-<ad72>3.859 E F0 1.359(option without a)3.859 F F2(jobspec)5.599 E F0
+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 386.4 S(lue is 0 unless a).25 E F2
+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
-F1(echo)108 403.2 Q F0([)2.5 E F1(\255neE)A F0 2.5(][)C F2(ar)-2.5 E(g)
--.37 E F0(...])2.5 E .424(Output the)144 415.2 R F2(ar)2.924 E(g)-.37 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 427.2 R(If)5.308 E F1<ad6e>2.808 E F0 .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 F1<ad65>2.807 E F0 .307(option is gi)2.807 F -.15
+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
-439.2 R .198(wing backslash-escaped characters is enabled.)-.25 F(The)
-5.198 E F1<ad45>2.698 E F0 .198(option disables the in-)2.698 F .067
-(terpretation of these escape characters, e)144 451.2 R -.15(ve)-.25 G
+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 F1
-(xpg_echo)144 463.2 Q F0 .601
+(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 F1(echo)3.102 E F0 -.15(ex)3.102 G .602(pands these).15 F .659
-(escape characters by def)144 475.2 R(ault.)-.1 E F1(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 487.2 Q(wing escape sequences:)-.25 E F1(\\a)
-144 499.2 Q F0(alert \(bell\))180 499.2 Q F1(\\b)144 511.2 Q F0
-(backspace)180 511.2 Q F1(\\c)144 523.2 Q F0(suppress further output)180
-523.2 Q F1(\\e)144 535.2 Q(\\E)144 547.2 Q F0(an escape character)180
-547.2 Q F1(\\f)144 559.2 Q F0(form feed)180 559.2 Q F1(\\n)144 571.2 Q
-F0(ne)180 571.2 Q 2.5(wl)-.25 G(ine)-2.5 E F1(\\r)144 583.2 Q F0
-(carriage return)180 583.2 Q F1(\\t)144 595.2 Q F0(horizontal tab)180
-595.2 Q F1(\\v)144 607.2 Q F0 -.15(ve)180 607.2 S(rtical tab).15 E F1
-(\\\\)144 619.2 Q F0(backslash)180 619.2 Q F1(\\0)144 631.2 Q F2(nnn)A
-F0(the eight-bit character whose v)180 631.2 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 643.2 Q F2(HH)A F0(the eight-bit character whose v)180 643.2 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 655.2 Q F2(HHHH)A F0 1.506
-(the Unicode \(ISO/IEC 10646\) character whose v)180 667.2 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 679.2 Q 2.5(xd)-.15 G(igits\))-2.5 E F1
-(\\U)144 691.2 Q F2(HHHHHHHH)A F0 .548
-(the Unicode \(ISO/IEC 10646\) character whose v)180 703.2 R .547
-(alue is the he)-.25 F .547(xadecimal v)-.15 F(alue)-.25 E F2(HHHHH-)
-3.047 E(HHH)180 715.2 Q F0(\(one to eight he)2.5 E 2.5(xd)-.15 G
-(igits\))-2.5 E(GNU Bash 5.0)72 768 Q(2004 Apr 20)149.565 E(7)203.725 E
-0 Cg EP
+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(enable)108 84 Q F0([)
-2.5 E F1<ad61>A F0 2.5(][)C F1(\255dnps)-2.5 E F0 2.5(][)C F1<ad66>-2.5
-E/F2 10/Times-Italic@0 SF(\214lename)2.5 E F0 2.5(][)C F2(name)-2.5 E F0
-(...])2.5 E .277(Enable and disable b)144 96 R .278
-(uiltin shell commands.)-.2 F .278(Disabling a b)5.278 F .278
+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 108 R .834(uiltin to be e)-.2 F -.15(xe)
--.15 G .834(cuted without specifying a full pathname, e).15 F -.15(ve)
--.25 G 3.333(nt).15 G(hough)-3.333 E .989
-(the shell normally searches for b)144 120 R .989
+(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 132 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
-144 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 156 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(The)144 168 Q F1<ad64>
-2.866 E F0 .366(option will delete a b)2.866 F .366(uiltin pre)-.2 F
-.366(viously loaded with)-.25 F F1<ad66>2.867 E F0 5.367(.I)C 2.867(fn)
--5.367 G(o)-2.867 E F2(name)2.867 E F0(ar)2.867 E .367(guments are gi)
--.18 F -.15(ve)-.25 G .367(n, or).15 F .399(if the)144 180 R F1<ad70>
-2.899 E F0 .399(option is supplied, a list of shell b)2.899 F .399
-(uiltins is printed.)-.2 F -.4(Wi)5.399 G .399(th no other option ar).4
-F .398(guments, the)-.18 F .098(list consists of all enabled shell b)144
-192 R 2.598(uiltins. If)-.2 F F1<ad6e>2.598 E F0 .098
-(is supplied, only disabled b)2.598 F .099(uiltins are printed.)-.2 F
-(If)5.099 E F1<ad61>2.599 E F0 .906
-(is supplied, the list printed includes all b)144 204 R .905
-(uiltins, with an indication of whether or not each is en-)-.2 F 2.872
-(abled. If)144 216 R F1<ad73>2.872 E F0 .372
-(is supplied, the output is restricted to the POSIX)2.872 F F2(special)
-2.873 E F0 -.2(bu)2.873 G 2.873(iltins. The).2 F .373(return v)2.873 F
-.373(alue is)-.25 F 2.5(0u)144 228 S(nless a)-2.5 E F2(name)2.86 E F0
-(is not a shell b)2.68 E(uiltin 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
-244.8 T(l).15 E F0([)2.5 E F2(ar)A(g)-.37 E F0(...])2.5 E(The)144 256.8
-Q F2(ar)3.171 E(g)-.37 E F0 3.171(sa)C .671
+(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 268.8 R -.15(xe)-.15 G
+(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 280.8 Q
+-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 297.6 Q F0([)2.5 E F1(\255cl)A F0 2.5(][)C F1<ad61>-2.5 E F2
+(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 309.6 Q F2(command)3.006 E F0 .306
+-.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 321.6 R .176
+(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 333.6 R .48(gument passed to)
+(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 345.6 Q F0 .638
+.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 357.6 R 1.077(gument to the e)-.18 F -.15
+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 369.6 Q .876 -.15(ve s)-.25 H .576(hell e).15 F
+.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 381.6 R(interacti)3.32 E 1.12 -.15(ve s)
+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 393.6 R F1(exec)2.787 E F0
+(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 405.6 Q
+.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 422.4 Q F0([)2.5 E F2(n)A F0
-(])A .096(Cause the shell to e)144 422.4 R .096(xit with a status of)
+(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 434.4 S 2.5(cuted. A).15 F(trap on)2.5 E F3(EXIT)2.5
+-.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 451.2 Q F0([)2.5 E F1(\255fn)A F0 2.5(][).833 G F2(name)
--2.5 E F0([=)A F2(wor)A(d)-.37 E F0(]] ...)A F1(export \255p)108 463.2 Q
-F0 .256(The supplied)144 475.2 R F2(names)3.117 E F0 .257(are mark)3.027
-.257(ed for automatic e)-.1 F .257(xport to the en)-.15 F .257
+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 487.2 R(the)2.627 E F1<ad66>2.627 E F0 .127
+(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 499.2 Q F0 .048(option is supplied, a list of names of all e)2.547 F
+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 511.2 S
-1.447(port property to be remo).15 F -.15(ve)-.15 G 3.947(df).15 G 1.447
+<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 523.2 S .741(lue of the v)
-.25 F .741(ariable is set to)-.25 F F2(wor)3.241 E(d)-.37 E F0(.)A F1
+-.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 535.2 R F2(names)2.532 E F0 .032
+.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 547.2 Q F1(fc)108 564 Q F0([)2.5 E
+(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
-576 Q F0([)2.5 E F2(pat)A F0(=)A F2 -.37(re)C(p).37 E F0 2.5(][)C F2
+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 588 R F2<8c72>
+(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
-600 R -.15(xe)-.15 G .142(cutes them.).15 F F2 -.45(Fi)5.141 G -.1(rs)
+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(be)
-144 612 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 624 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 636 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 648 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 660 R F4 .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 672 Q
-(vious command for editing and \25516 for listing.)-.25 E(The)144 696 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 708 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 720 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(GNU Bash 5.0)72 768 Q(2004 Apr 20)149.565 E(8)203.725 E 0 Cg
-EP
+(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 .63(the v)144 84 R .63(alue of the)-.25 F
-/F1 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 F1(EDIT)3.131 E(OR)
--.162 E F0(if)2.881 E F1(FCEDIT)3.131 E F0 .631(is not set.)2.881 F .631
-(If nei-)5.631 F .006(ther v)144 96 R .006(ariable is set,)-.25 F/F2 10
-/Times-Italic@0 SF(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 108 Q .788(In the second form,)144 132 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 144 Q F0 .172(is interpreted the same as)2.672 F F2<8c72>
+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 10/Courier@0 SF .171
-(r='fc \255s')2.671 F F0 2.671(,s)C 2.671(ot)-2.671 G(hat)-2.671 E
-(typing)144 156 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 168 Q .142
-(If the \214rst form is used, the return v)144 192 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 204 R
-.454(If the)5.454 F/F4 10/Times-Bold@0 SF<ad65>2.954 E F0 .454
+(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 216 R -.15(xe)-.15 G .788
+(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
-228 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 240 Q
-(alid history line, in which case)-.25 E F4(fc)2.5 E F0(returns f)2.5 E
-(ailure.)-.1 E F4(fg)108 256.8 Q F0([)2.5 E F2(jobspec)A F0(])A(Resume)
-144 268.8 Q F2(jobspec)5.654 E F0 1.413(in the fore)4.224 F 1.413
+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 F2(jobspec)5.653 E F0
-1.413(is not present, the)4.223 F(shell')144 280.8 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
+(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 292.8 Q
+(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 F2(jobspec)145.74 304.8 Q
-F0(does not specify a v)2.81 E(alid job or)-.25 E F2(jobspec)4.24 E F0
+(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
-F4(getopts)108 321.6 Q F2(optstring name)2.5 E F0([)2.5 E F2(ar)A 2.5
-(g.)-.37 G(..)-2.5 E F0(])A F4(getopts)144 333.6 Q F0 .793
-(is used by shell procedures to parse positional parameters.)3.293 F F2
+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 345.6 R .149
+(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 357.6 Q .578
+-.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 369.6 R .636
-(Each time it is in)5.636 F -.2(vo)-.4 G -.1(ke).2 G(d,).1 E F4(getopts)
+(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 381.6 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)
+(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 393.6 R(ariable)-.25 E F1(OPTIND)
-2.566 E/F5 9/Times-Roman@0 SF(.)A F1(OPTIND)4.566 E F0 .065
+(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 405.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 F4(getopts)
+(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 417.6 R(ariable)-.25 E F1(OPT)3.067 E(ARG)-.81 E F5(.)A F0
-.566(The shell does not reset)5.067 F F1(OPTIND)3.066 E F0 .566
+(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 429.6 R F4(getopts)2.889 E F0 .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 441.6 Q
-2.044(When the end of options is encountered,)144 465.6 R F4(getopts)
+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 F1(OPTIND)144 477.6 Q F0
+(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 F2(name)2.5 E F0
-(is set to ?.)2.5 E F4(getopts)144 501.6 Q F0 .485
+(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 F2(ar)3.315 E
-(g)-.37 E F0 -.25(va)3.205 G(l-).25 E(ues,)144 513.6 Q F4(getopts)2.5 E
-F0(parses those instead.)2.5 E F4(getopts)144 537.6 Q F0 .345
+(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 F2(optstring)3.075 E F0 .345
-(is a colon,)3.065 F F2(silent)3.185 E F0 .345(error re-)3.525 F 1.668
-(porting is used.)144 549.6 R 1.668
+.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
-561.6 R .394(guments are encountered.)-.18 F .394(If the v)5.394 F
-(ariable)-.25 E F1(OPTERR)2.894 E F0 .394
-(is set to 0, no error messages)2.644 F(will be displayed, e)144 573.6 Q
+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
-F2(optstring)2.73 E F0(is not a colon.)2.72 E .666(If an in)144 597.6 R
--.25(va)-.4 G .666(lid option is seen,).25 F F4(getopts)3.166 E F0 .667
-(places ? into)3.167 F F2(name)3.527 E F0 .667
+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
-609.6 R F1(OPT)2.9 E(ARG)-.81 E F5(.)A F0(If)4.899 E F4(getopts)2.899 E
-F0 .399(is silent, the option character found is placed in)2.899 F F1
-(OPT)2.899 E(ARG)-.81 E F0 .399(and no)2.649 F
-(diagnostic message is printed.)144 621.6 Q 1.241(If a required ar)144
-645.6 R 1.241(gument is not found, and)-.18 F F4(getopts)3.741 E F0
-1.241(is not silent, a question mark \()3.741 F F4(?).833 E F0 3.742
-(\)i).833 G 3.742(sp)-3.742 G 1.242(laced in)-3.742 F F2(name)144.36
-657.6 Q F0(,).18 E F1(OPT)2.714 E(ARG)-.81 E F0 .213
-(is unset, and a diagnostic message is printed.)2.463 F(If)5.213 E F4
-(getopts)2.713 E F0 .213(is silent, then a colon \()2.713 F F4(:).833 E
-F0(\)).833 E(is placed in)144 669.6 Q F2(name)2.86 E F0(and)2.68 E F1
-(OPT)2.5 E(ARG)-.81 E F0(is set to the option character found.)2.25 E F4
-(getopts)144 693.6 Q F0 .902
-(returns true if an option, speci\214ed or unspeci\214ed, is found.)
-3.401 F .902(It returns f)5.902 F .902(alse if the end of)-.1 F
-(options is encountered or an error occurs.)144 705.6 Q(GNU Bash 5.0)72
-768 Q(2004 Apr 20)149.565 E(9)203.725 E 0 Cg EP
+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/F1 10/Times-Bold@0 SF(hash)108 84 Q F0([)
-2.5 E F1(\255lr)A F0 2.5(][)C F1<ad70>-2.5 E/F2 10/Times-Italic@0 SF
-(\214lename)2.5 E F0 2.5(][)C F1(\255dt)-2.5 E F0 2.5(][)C F2(name)-2.5
-E F0(])A .858(Each time)144 96 R F1(hash)3.358 E F0 .858(is in)3.358 F
--.2(vo)-.4 G -.1(ke).2 G .858(d, the full pathname of the command).1 F
-F2(name)3.718 E F0 .858(is determined by searching)3.538 F .956
-(the directories in)144 108 R F1($P)3.456 E -.95(AT)-.74 G(H).95 E F0
+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 120 R
-F1<ad70>2.743 E F0 .243
+(viously-remembered pathname is discarded.)-.25 F .243(If the)144 220.8
+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 132 R(The)5.615 E F1<ad72>3.115 E F0 .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 144 R .294
+(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
-156 R F2(name)2.528 E F0 .028(corresponds is printed.)2.528 F .028
+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 168 R F1<ad74>2.676 E F0
+(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 180 R .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 192 R
-.807(The return status is true unless a)5.807 F F2(name)144.36 204 Q F0
-(is not found or an in)2.68 E -.25(va)-.4 G(lid option is supplied.).25
-E F1(help)108 220.8 Q F0([)2.5 E F1(\255dms)A F0 2.5(][)C F2(pattern)
--2.5 E F0(])A .866(Display helpful information about b)144 232.8 R .867
-(uiltin commands.)-.2 F(If)5.867 E F2(pattern)4.617 E F0 .867
-(is speci\214ed,)3.607 F F1(help)3.367 E F0(gi)3.367 E -.15(ve)-.25 G
-3.367(sd).15 G(etailed)-3.367 E .224(help on all commands matching)144
-244.8 R F2(pattern)3.974 E F0 2.723(;o).24 G .223
+(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
+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 256.8 Q F1
-<ad64>144 268.8 Q F0(Display a short description of each)180 268.8 Q F2
-(pattern)2.5 E F1<ad6d>144 280.8 Q F0(Display the description of each)
-180 280.8 Q F2(pattern)2.5 E F0(in a manpage-lik)2.5 E 2.5(ef)-.1 G
-(ormat)-2.5 E F1<ad73>144 292.8 Q F0
-(Display only a short usage synopsis for each)180 292.8 Q F2(pattern)2.5
-E F0(The return status is 0 unless no command matches)144 309.6 Q F2
-(pattern)3.75 E F0(.).24 E F1(history [)108 326.4 Q F2(n)A F1(])A
-(history \255c)108 338.4 Q(history \255d)108 350.4 Q F2(of)2.5 E(fset)
--.18 E F1(history \255d)108 362.4 Q F2(start)2.5 E F0<ad>A F2(end)A F1
-(history \255anrw)108 374.4 Q F0([)2.5 E F2(\214lename)A F0(])A F1
-(history \255p)108 386.4 Q F2(ar)2.5 E(g)-.37 E F0([)2.5 E F2(ar)A 2.5
-(g.)-.37 G(..)-2.5 E F0(])A F1(history \255s)108 398.4 Q F2(ar)2.5 E(g)
+(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
-410.4 S .752
+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 422.4 R .38(An ar)5.38 F .38(gument of)-.18
+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 9
-/Times-Bold@0 SF(HISTTIMEFOR-)2.88 E(MA)144 434.4 Q(T)-.855 E F0 .264
+(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 446.4 R 6.019(.N)-.65 G
+(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 458.4 R(If)5.176 E F2(\214lename)
+(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 470.4 Q(alue of)-.25 E F3(HISTFILE)2.5 E F0(is used.)
+(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 482.4 Q F0
-(Clear the history list by deleting all the entries.)180 482.4 Q F1
-<ad64>144 494.4 Q F2(of)2.5 E(fset)-.18 E F0 .39
-(Delete the history entry at position)180 506.4 R F2(of)2.889 E(fset)
+(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
-518.4 R -.05(ga)-.15 G(ti).05 E .899 -.15(ve i)-.25 H .599
-(ndices count back from the end).15 F(of the history)180 530.4 Q 2.5(,a)
+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 542.4 Q F2(start)2.5 E F0<ad>A F2(end)A F0 .758
-(Delete the history entries between positions)180 554.4 R F2(start)3.258
-E F0(and)3.257 E F2(end)3.257 E F0 3.257(,i)C(nclusi)-3.257 E -.15(ve)
--.25 G 5.757(.P).15 G(ositi)-5.757 E 1.057 -.15(ve a)-.25 H .757(nd ne)
-.15 F -.05(ga)-.15 G(-).05 E(ti)180 566.4 Q .3 -.15(ve v)-.25 H
-(alues for)-.1 E F2(start)2.5 E F0(and)2.5 E F2(end)2.5 E F0
+<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 578.4 Q F0 .564(Append the `)180 578.4 R(`ne)-.74 E(w')-.25 E 3.064
+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 590.4 Q
+(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 602.4
+(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 602.4 R .772
-(These are lines appended to the history \214le since the be)180 614.4 R
+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 626.4 Q F1<ad72>144 638.4 Q F0(Read the contents of the hist\
-ory \214le and append them to the current history list.)180 638.4 Q F1
-<ad77>144 650.4 Q F0
-(Write the current history list to the history \214le, o)180 650.4 Q
--.15(ve)-.15 G(rwriting the history \214le').15 E 2.5(sc)-.55 G
-(ontents.)-2.5 E F1<ad70>144 662.4 Q F0 .626
-(Perform history substitution on the follo)180 662.4 R(wing)-.25 E F2
-(ar)3.125 E(gs)-.37 E F0 .625(and display the result on the standard)
-3.125 F 2.975(output. Does)180 674.4 R .475
-(not store the results in the history list.)2.975 F(Each)5.475 E F2(ar)
-2.975 E(g)-.37 E F0 .475(must be quoted to disable)2.975 F
-(normal history e)180 686.4 Q(xpansion.)-.15 E F1<ad73>144 698.4 Q F0
-.363(Store the)180 698.4 R F2(ar)3.193 E(gs)-.37 E F0 .363
-(in the history list as a single entry)3.133 F 5.363(.T)-.65 G .362
-(he last command in the history list is)-5.363 F(remo)180 710.4 Q -.15
-(ve)-.15 G 2.5(db).15 G(efore the)-2.5 E F2(ar)2.83 E(gs)-.37 E F0
-(are added.)2.77 E .145(If the)144 727.2 R F3(HISTTIMEFORMA)2.645 E(T)
--.855 E F0 -.25(va)2.395 G .145
-(riable is set, the time stamp information associated with each history)
-.25 F(GNU Bash 5.0)72 768 Q(2004 Apr 20)149.565 E(10)198.725 E 0 Cg EP
+(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 .669
-(entry is written to the history \214le, mark)144 84 R .669
+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 96 R .956
+(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 108 R .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 120 S .168(lid option i\
-s encountered, an error occurs while reading or writing the history \
-\214le, an in).25 F -.25(va)-.4 G(lid).25 E/F1 10/Times-Italic@0 SF(of)
-2.669 E(f-)-.18 E(set)144 132 Q F0(is supplied as an ar)2.5 E(gument to)
--.18 E/F2 10/Times-Bold@0 SF<ad64>2.5 E F0 2.5(,o)C 2.5(rt)-2.5 G
-(he history e)-2.5 E(xpansion supplied as an ar)-.15 E(gument to)-.18 E
-F2<ad70>2.5 E F0 -.1(fa)2.5 G(ils.).1 E F2(jobs)108 148.8 Q F0([)2.5 E
-F2(\255lnprs)A F0 2.5(][)C F1(jobspec)A F0(... ])2.5 E F2(jobs \255x)108
-160.8 Q F1(command)2.5 E F0([)2.5 E F1(ar)2.5 E(gs)-.37 E F0(... ])2.5 E
-(The \214rst form lists the acti)144 172.8 Q .3 -.15(ve j)-.25 H 2.5
-(obs. The).15 F(options ha)2.5 E .3 -.15(ve t)-.2 H(he follo).15 E
-(wing meanings:)-.25 E F2<ad6c>144 184.8 Q F0
-(List process IDs in addition to the normal information.)180 184.8 Q F2
-<ad6e>144 196.8 Q F0 .194(Display information only about jobs that ha)
-180 196.8 R .494 -.15(ve c)-.2 H .193(hanged status since the user w).15
-F .193(as last noti-)-.1 F(\214ed of their status.)180 208.8 Q F2<ad70>
-144 220.8 Q F0(List only the process ID of the job')180 220.8 Q 2.5(sp)
--.55 G(rocess group leader)-2.5 E(.)-.55 E F2<ad72>144 232.8 Q F0
-(Display only running jobs.)180 232.8 Q F2<ad73>144 244.8 Q F0
-(Display only stopped jobs.)180 244.8 Q(If)144 261.6 Q F1(jobspec)4.553
-E F0 .313(is gi)3.123 F -.15(ve)-.25 G .313
-(n, output is restricted to information about that job).15 F 5.314(.T)
--.4 G .314(he return status is 0 unless)-5.314 F(an in)144 273.6 Q -.25
+.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 F1(jobspec)4.24 E F0(is supplied.)2.81 E .395(If the)144 290.4 R F2
-<ad78>2.895 E F0 .394(option is supplied,)2.894 F F2(jobs)2.894 E F0
-.394(replaces an)2.894 F(y)-.15 E F1(jobspec)4.634 E F0 .394(found in)
-3.204 F F1(command)3.094 E F0(or)3.664 E F1(ar)3.224 E(gs)-.37 E F0 .394
-(with the corre-)3.164 F(sponding process group ID, and e)144 302.4 Q
--.15(xe)-.15 G(cutes).15 E F1(command)2.7 E F0(passing it)3.27 E F1(ar)
+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 F2(kill)108 319.2 Q F0([)2.5 E F2<ad73>A F1(sigspec)2.5 E F0(|)2.5 E
-F2<ad6e>2.5 E F1(signum)2.5 E F0(|)2.5 E F2<ad>2.5 E F1(sigspec)A F0 2.5
-(][)C F1(pid)-2.5 E F0(|)2.5 E F1(jobspec)2.5 E F0 2.5(].)C(..)-2.5 E F2
-(kill \255l)108 331.2 Q F0(|)A F2<ad4c>A F0([)2.5 E F1(sigspec)A F0(|)
-2.5 E F1 -.2(ex)2.5 G(it_status).2 E F0(])A .017
-(Send the signal named by)144 343.2 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.828 E .319(either a case-insensiti)144 355.2 R .619 -.15(ve s)-.25 H
-.319(ignal name such as).15 F/F3 9/Times-Bold@0 SF(SIGKILL)2.819 E F0
-.318(\(with or without the)2.569 F F3(SIG)2.818 E F0 .318
-(pre\214x\) or a signal)2.568 F(number;)144 367.2 Q F1(signum)3.267 E F0
-.427(is a signal number)3.247 F 5.427(.I)-.55 G(f)-5.427 E F1(sigspec)
+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 .428(An ar)5.427 F(-)-.2 E .314(gument of)144 379.2
-R F2<ad6c>2.814 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 F2<ad6c>2.814 E F0 .314(is gi)2.814 F -.15(ve)-.25 G .313
-(n, the names of).15 F .119(the signals corresponding to the ar)144
-391.2 R .119(guments are listed, and the return status is 0.)-.18 F(The)
-5.12 E F1 -.2(ex)2.62 G(it_status).2 E F0(ar)2.62 E(-)-.2 E .8
-(gument to)144 403.2 R F2<ad6c>3.3 E F0 .8
-(is a number specifying either a signal number or the e)3.3 F .799
-(xit status of a process termi-)-.15 F .962(nated by a signal.)144 415.2
-R(The)5.962 E F2<ad4c>3.462 E F0 .962(option is equi)3.462 F -.25(va)
--.25 G .962(lent to).25 F F2<ad6c>3.462 E F0(.)A F2(kill)5.962 E F0 .962
+(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 427.2 Q(alse if an error occurs or an in)
--.1 E -.25(va)-.4 G(lid option is encountered.).25 E F2(let)108 444 Q F1
-(ar)2.5 E(g)-.37 E F0([)2.5 E F1(ar)A(g)-.37 E F0(...])2.5 E(Each)144
-456 Q F1(ar)3.027 E(g)-.37 E F0 .197(is an arithmetic e)2.917 F .197
-(xpression to be e)-.15 F -.25(va)-.25 G .196(luated \(see).25 F F3 .196
-(ARITHMETIC EV)2.696 F(ALU)-1.215 E -.855(AT)-.54 G(ION).855 E F0(abo)
-2.446 E -.15(ve)-.15 G 2.696(\). If).15 F(the last)144 468 Q F1(ar)2.83
-E(g)-.37 E F0 -.25(eva)2.72 G(luates to 0,).25 E F2(let)2.5 E F0
-(returns 1; 0 is returned otherwise.)2.5 E F2(local)108 484.8 Q F0([)2.5
-E F1(option)A F0 2.5(][)C F1(name)-2.5 E F0([=)A F1(value)A F0 2.5(].)C
-(.. | \255 ])-2.5 E -.15(Fo)144 496.8 S 2.541(re).15 G .041(ach ar)
--2.541 F .042(gument, a local v)-.18 F .042(ariable named)-.25 F F1
-(name)2.902 E F0 .042(is created, and assigned)2.722 F F1(value)2.832 E
-F0 5.042(.T).18 G(he)-5.042 E F1(option)2.542 E F0 .042(can be)2.542 F
-(an)144 508.8 Q 3.153(yo)-.15 G 3.153(ft)-3.153 G .653
-(he options accepted by)-3.153 F F2(declar)3.153 E(e)-.18 E F0 5.652(.W)
-C(hen)-5.652 E F2(local)3.152 E F0 .652
+(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
-520.8 Q F1(name)3.281 E F0 .421(to ha)3.101 F .721 -.15(ve a v)-.2 H
+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.422 E F1(name)2.922 E F0 .422(is \255, the set)2.922 F .51
-(of shell options is made local to the function in which)144 532.8 R F2
-(local)3.009 E F0 .509(is in)3.009 F -.2(vo)-.4 G -.1(ke).2 G .509
-(d: shell options changed us-).1 F 1.17(ing the)144 544.8 R F2(set)3.67
-E F0 -.2(bu)3.67 G 1.171
-(iltin inside the function are restored to their original v).2 F 1.171
-(alues when the function re-)-.25 F 3.381(turns. The)144 556.8 R .881
-(restore is ef)3.381 F .881(fected as if a series of)-.25 F F2(set)3.381
-E F0 .88(commands were e)3.38 F -.15(xe)-.15 G .88
-(cuted to restore the v).15 F(alues)-.25 E .787
-(that were in place before the function.)144 568.8 R -.4(Wi)5.788 G .788
-(th no operands,).4 F F2(local)3.288 E F0 .788(writes a list of local v)
-3.288 F .788(ariables to)-.25 F .655(the standard output.)144 580.8 R
-.654(It is an error to use)5.655 F F2(local)3.154 E F0 .654
-(when not within a function.)3.154 F .654(The return status is 0)5.654 F
-(unless)144 592.8 Q F2(local)2.5 E F0(is used outside a function, an in)
-2.5 E -.25(va)-.4 G(lid).25 E F1(name)2.86 E F0(is supplied, or)2.68 E
-F1(name)2.5 E F0(is a readonly v)2.5 E(ariable.)-.25 E F2(logout)108
-609.6 Q F0(Exit a login shell.)144 609.6 Q F2(map\214le)108 626.4 Q F0
-([)2.5 E F2<ad64>A F1(delim)2.5 E F0 2.5(][)C F2<ad6e>-2.5 E F1(count)
-2.5 E F0 2.5(][)C F2<ad4f>-2.5 E F1(origin)2.5 E F0 2.5(][)C F2<ad73>
--2.5 E F1(count)2.5 E F0 2.5(][)C F2<ad74>-2.5 E F0 2.5(][)C F2<ad75>
--2.5 E F1(fd)2.5 E F0 2.5(][)C F2<ad43>-2.5 E F1(callbac)2.5 E(k)-.2 E
-F0 2.5(][)C F2<ad63>-2.5 E F1(quantum)2.5 E F0 2.5(][)C F1(arr)-2.5 E
-(ay)-.15 E F0(])A F2 -.18(re)108 638.4 S(adarray).18 E F0([)2.5 E F2
-<ad64>A F1(delim)2.5 E F0 2.5(][)C F2<ad6e>-2.5 E F1(count)2.5 E F0 2.5
-(][)C F2<ad4f>-2.5 E F1(origin)2.5 E F0 2.5(][)C F2<ad73>-2.5 E F1
-(count)2.5 E F0 2.5(][)C F2<ad74>-2.5 E F0 2.5(][)C F2<ad75>-2.5 E F1
-(fd)2.5 E F0 2.5(][)C F2<ad43>-2.5 E F1(callbac)2.5 E(k)-.2 E F0 2.5(][)
-C F2<ad63>-2.5 E F1(quantum)2.5 E F0 2.5(][)C F1(arr)-2.5 E(ay)-.15 E F0
-(])A .158(Read lines from the standard input into the inde)144 650.4 R
--.15(xe)-.15 G 2.659(da).15 G .159(rray v)-2.659 F(ariable)-.25 E F1
-(arr)2.989 E(ay)-.15 E F0 2.659(,o).32 G 2.659(rf)-2.659 G .159
-(rom \214le descriptor)-2.659 F F1(fd)4.629 E F0 1.249(if the)144 662.4
-R F2<ad75>3.749 E F0 1.249(option is supplied.)3.749 F 1.249(The v)6.249
-F(ariable)-.25 E F3(MAPFILE)3.749 E F0 1.249(is the def)3.499 F(ault)-.1
-E F1(arr)3.748 E(ay)-.15 E F0 6.248(.O)C 1.248(ptions, if supplied,)
--6.248 F(ha)144 674.4 Q .3 -.15(ve t)-.2 H(he follo).15 E
-(wing meanings:)-.25 E F2<ad64>144 686.4 Q F0 .91
-(The \214rst character of)180 686.4 R F1(delim)3.41 E F0 .911
-(is used to terminate each input line, rather than ne)3.41 F 3.411
-(wline. If)-.25 F F1(delim)180 698.4 Q F0(is the empty string,)2.5 E F2
-(map\214le)2.5 E F0(will terminate a line when it reads a NUL character)
-2.5 E(.)-.55 E F2<ad6e>144 710.4 Q F0(Cop)180 710.4 Q 2.5(ya)-.1 G 2.5
-(tm)-2.5 G(ost)-2.5 E F1(count)2.7 E F0 2.5(lines. If)3.18 F F1(count)
-2.5 E F0(is 0, all lines are copied.)2.5 E(GNU Bash 5.0)72 768 Q
-(2004 Apr 20)149.565 E(11)198.725 E 0 Cg EP
+(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<ad4f>144 84 Q F0(Be)
-180 84 Q(gin assigning to)-.15 E/F2 10/Times-Italic@0 SF(arr)2.83 E(ay)
--.15 E F0(at inde)2.82 E(x)-.15 E F2(origin)2.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 96
-Q F0(Discard the \214rst)180 96 Q F2(count)2.5 E F0(lines read.)2.5 E F1
-<ad74>144 108 Q F0(Remo)180 108 Q .3 -.15(ve a t)-.15 H(railing).15 E F2
-(delim)2.5 E F0(\(def)2.5 E(ault ne)-.1 E(wline\) from each line read.)
--.25 E F1<ad75>144 120 Q F0(Read lines from \214le descriptor)180 120 Q
-F2(fd)2.5 E F0(instead of the standard input.)2.5 E F1<ad43>144 132 Q F0
-(Ev)180 132 Q(aluate)-.25 E F2(callbac)2.7 E(k)-.2 E F0(each time)3.17 E
-F2(quantum)2.5 E F0(lines are read.)2.5 E(The)5 E F1<ad63>2.5 E F0
-(option speci\214es)2.5 E F2(quantum)2.75 E F0(.).32 E F1<ad63>144 144 Q
-F0(Specify the number of lines read between each call to)180 144 Q F2
-(callbac)2.7 E(k)-.2 E F0(.).67 E(If)144 160.8 Q F1<ad43>2.968 E F0 .467
-(is speci\214ed without)2.967 F F1<ad63>2.967 E F0 2.967(,t)C .467
+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 .261(plied the inde)144 172.8 R 2.761(xo)-.15
-G 2.761(ft)-2.761 G .261(he ne)-2.761 F .262(xt array element to be ass\
-igned and the line to be assigned to that element)-.15 F .275
-(as additional ar)144 184.8 R(guments.)-.18 E F2(callbac)5.275 E(k)-.2 E
-F0 .275(is e)2.775 F -.25(va)-.25 G .274
-(luated after the line is read b).25 F .274
-(ut before the array element is)-.2 F(assigned.)144 196.8 Q
-(If not supplied with an e)144 213.6 Q(xplicit origin,)-.15 E F1
+(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 230.4 Q F0 .797
-(returns successfully unless an in)3.297 F -.25(va)-.4 G .797
+(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 .798(is in-)3.298 F -.25(va)144 242.4 S
+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 259.2 Q F0<5bad>2.5 E F1(n)A F0 2.5(][)C(+)-2.5 E F2(n)A F0
-2.5(][)C<ad>-2.5 E F2(n)A F0(])A(Remo)144 271.2 Q -.15(ve)-.15 G 2.8(se)
-.15 G .3(ntries from the directory stack.)-2.8 F -.4(Wi)5.299 G .299
-(th no ar).4 F .299(guments, remo)-.18 F -.15(ve)-.15 G 2.799(st).15 G
-.299(he top directory from the)-2.799 F 1.478(stack, and performs a)144
-283.2 R F1(cd)3.978 E F0 1.479(to the ne)3.978 F 3.979(wt)-.25 G 1.479
-(op directory)-3.979 F 6.479(.A)-.65 G -.18(rg)-6.479 G 1.479
-(uments, if supplied, ha).18 F 1.779 -.15(ve t)-.2 H 1.479(he follo).15
-F(wing)-.25 E(meanings:)144 295.2 Q F1<ad6e>144 307.2 Q F0 .551
-(Suppresses the normal change of directory when remo)180 307.2 R .551
+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 319.2 Q F1(+)144 331.2 Q F2(n)A
-F0(Remo)180 331.2 Q -.15(ve)-.15 G 2.64(st).15 G(he)-2.64 E F2(n)2.64 E
-F0 .14(th entry counting from the left of the list sho)B .14(wn by)-.25
-F F1(dirs)2.64 E F0 2.64(,s)C .14(tarting with zero.)-2.64 F -.15(Fo)180
-343.2 S 2.5(re).15 G(xample:)-2.65 E/F3 10/Courier@0 SF(popd +0)2.5 E F0
-(remo)2.5 E -.15(ve)-.15 G 2.5(st).15 G(he \214rst directory)-2.5 E(,)
--.65 E F3(popd +1)2.5 E F0(the second.)2.5 E F1<ad>144 355.2 Q F2(n)A F0
-(Remo)180 355.2 Q -.15(ve)-.15 G 3.76(st).15 G(he)-3.76 E F2(n)3.76 E F0
-1.259(th entry counting from the right of the list sho)B 1.259(wn by)
--.25 F F1(dirs)3.759 E F0 3.759(,s)C 1.259(tarting with)-3.759 F 2.5
-(zero. F)180 367.2 R(or e)-.15 E(xample:)-.15 E F3(popd -0)2.5 E F0
+(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 F3(popd -1)2.5 E F0(the ne)2.5 E(xt to last.)-.15 E .643(If the)144
-384 R F1(popd)3.143 E F0 .643(command is successful, a)3.143 F F1(dirs)
-3.143 E F0 .644(is performed as well, and the return status is 0.)3.143
-F F1(popd)5.644 E F0 .416(returns f)144 396 R .416(alse if an in)-.1 F
--.25(va)-.4 G .415
-(lid option is encountered, the directory stack is empty).25 F 2.915
-(,an)-.65 G(on-e)-2.915 E .415(xistent direc-)-.15 F
-(tory stack entry is speci\214ed, or the directory change f)144 408 Q
-(ails.)-.1 E F1(printf)108 424.8 Q F0([)2.5 E F1<ad76>A F2(var)2.5 E F0
-(])A F2(format)2.5 E F0([)2.5 E F2(ar)A(guments)-.37 E F0(])A .357
-(Write the formatted)144 436.8 R F2(ar)2.857 E(guments)-.37 E F0 .357
+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 448.8 R(ariable)-.25
+(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 460.8 Q(The)144 484.8 Q F2(format)3.017 E F0 .517(is a ch\
+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 496.8 R -.15(ve)-.4 G .703
+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 508.8 R .037
-(xt successi)-.15 F -.15(ve)-.25 G F2(ar)144 520.8 Q(gument)-.37 E F0
+\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 532.8 Q
-(xtensions:)-.15 E F1(%b)144 544.8 Q F0(causes)180 544.8 Q F1(printf)
-2.595 E F0 .096(to e)2.595 F .096
-(xpand backslash escape sequences in the corresponding)-.15 F F2(ar)
-2.596 E(gument)-.37 E F0 .096(in the)2.596 F(same w)180 556.8 Q(ay as)
--.1 E F1(echo \255e)2.5 E F0(.)A F1(%q)144 568.8 Q F0(causes)180 568.8 Q
-F1(printf)2.51 E F0 .01(to output the corresponding)2.51 F F2(ar)2.51 E
-(gument)-.37 E F0 .01(in a format that can be reused as shell)2.51 F
-(input.)180 580.8 Q F1(%\()144 592.8 Q F2(datefmt)A F1(\)T)A F0(causes)
-180 604.8 Q F1(printf)4.403 E F0 1.904
+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 616.8 R F2
+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
-628.8 R -1 -.8(Tw o)5.293 H .293(special ar)3.593 F .293(gument v)-.18 F
+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 640.8 R
-.693(as in)-.1 F -.2(vo)-.4 G -.1(ke).2 G 3.193(d. If).1 F .693(no ar)
-3.193 F .693(gument is speci-)-.18 F .21(\214ed, con)180 652.8 R -.15
-(ve)-.4 G .21(rsion beha).15 F -.15(ve)-.2 G 2.71(sa).15 G 2.71(si)-2.71
-G 2.71<66ad>-2.71 G 2.71(1h)-2.71 G .21(ad been gi)-2.71 F -.15(ve)-.25
-G 2.71(n. This).15 F .21(is an e)2.71 F .21(xception to the usual)-.15 F
-F1(printf)2.71 E F0(beha)180 664.8 Q(vior)-.2 E(.)-.55 E .902
-(The %b, %q, and %T directi)144 681.6 R -.15(ve)-.25 G 3.401(sa).15 G
+(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 693.6 R 2.857(yb)-.15 G .358
+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 705.6 Q
-(Ar)144 722.4 Q .464(guments to non-string format speci\214ers are trea\
+(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
-(GNU Bash 5.0)72 768 Q(2004 Apr 20)149.565 E(12)198.725 E 0 Cg EP
-%%Page: 13 13
-%%BeginPageSetup
-BP
-%%EndPageSetup
-/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61
-(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35
-E(UIL)-.1 E(TINS\(1\))-.92 E 1.258(minus sign is allo)144 84 R 1.259
+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 96 Q(alue of the follo)-.25
-E(wing character)-.25 E(.)-.55 E(The)144 112.8 Q/F1 10/Times-Italic@0 SF
-(format)2.515 E F0 .015(is reused as necessary to consume all of the)
-2.515 F F1(ar)2.515 E(guments)-.37 E F0 5.015(.I)C 2.514(ft)-5.015 G(he)
--2.514 E F1(format)2.514 E F0 .014(requires more)2.514 F F1(ar)2.514 E
-(-)-.2 E(guments)144 124.8 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
-136.8 Q(The return v)5 E(alue is zero on success, non-zero on f)-.25 E
-(ailure.)-.1 E/F2 10/Times-Bold@0 SF(pushd)108 153.6 Q F0([)2.5 E F2
-<ad6e>A F0 2.5(][)C(+)-2.5 E F1(n)A F0 2.5(][)C<ad>-2.5 E F1(n)A F0(])A
-F2(pushd)108 165.6 Q F0([)2.5 E F2<ad6e>A F0 2.5(][)C F1(dir)-2.5 E F0
-(])A .64(Adds a directory to the top of the directory stack, or rotates\
- the stack, making the ne)144 177.6 R 3.139(wt)-.25 G .639(op of the)
--3.139 F .416(stack the current w)144 189.6 R .416(orking directory)-.1
-F 5.416(.W)-.65 G .416(ith no ar)-5.816 F(guments,)-.18 E F2(pushd)2.916
-E F0 -.15(ex)2.916 G .416(changes the top tw).15 F 2.917(od)-.1 G
-(irectories)-2.917 E 1.625
-(and returns 0, unless the directory stack is empty)144 201.6 R 6.625
-(.A)-.65 G -.18(rg)-6.625 G 1.625(uments, if supplied, ha).18 F 1.925
--.15(ve t)-.2 H 1.625(he follo).15 F(wing)-.25 E(meanings:)144 213.6 Q
-F2<ad6e>144 225.6 Q F0 1.811(Suppresses the normal change of directory \
-when rotating or adding directories to the)180 225.6 R
-(stack, so that only the stack is manipulated.)180 237.6 Q F2(+)144
-249.6 Q F1(n)A F0 1.268(Rotates the stack so that the)180 249.6 R F1(n)
-3.768 E F0 1.267(th directory \(counting from the left of the list sho)B
-1.267(wn by)-.25 F F2(dirs)180 261.6 Q F0 2.5(,s)C
-(tarting with zero\) is at the top.)-2.5 E F2<ad>144 273.6 Q F1(n)A F0
-.92(Rotates the stack so that the)180 273.6 R F1(n)3.42 E F0 .92
+-.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 F2(dirs)180 285.6 Q F0 2.5(,s)C(tarting with zero\) is at the top.)
--2.5 E F1(dir)144.35 297.6 Q F0(Adds)180 297.6 Q F1(dir)3.138 E F0 .288
-(to the directory stack at the top, making it the ne)3.518 F 2.787(wc)
--.25 G .287(urrent w)-2.787 F .287(orking directory as)-.1 F
-(if it had been supplied as the ar)180 309.6 Q(gument to the)-.18 E F2
-(cd)2.5 E F0 -.2(bu)2.5 G(iltin.).2 E .488(If the)144 326.4 R F2(pushd)
-2.988 E F0 .488(command is successful, a)2.988 F F2(dirs)2.988 E F0 .488
-(is performed as well.)2.988 F .489(If the \214rst form is used,)5.488 F
-F2(pushd)2.989 E F0 1.04(returns 0 unless the cd to)144 338.4 R F1(dir)
-3.89 E F0 -.1(fa)4.27 G 3.539(ils. W).1 F 1.039(ith the second form,)-.4
-F F2(pushd)3.539 E F0 1.039(returns 0 unless the directory)3.539 F .846
-(stack is empty)144 350.4 R 3.346(,an)-.65 G(on-e)-3.346 E .847(xistent\
- directory stack element is speci\214ed, or the directory change to the)
--.15 F(speci\214ed ne)144 362.4 Q 2.5(wc)-.25 G(urrent directory f)-2.5
-E(ails.)-.1 E F2(pwd)108 379.2 Q F0([)2.5 E F2(\255LP)A F0(])A .845
-(Print the absolute pathname of the current w)144 391.2 R .845
-(orking directory)-.1 F 5.844(.T)-.65 G .844
-(he pathname printed contains no)-5.844 F .181(symbolic links if the)144
-403.2 R F2<ad50>2.681 E F0 .181(option is supplied or the)2.681 F F2
-.181(\255o ph)2.681 F(ysical)-.15 E F0 .181(option to the)2.681 F F2
-(set)2.681 E F0 -.2(bu)2.681 G .182(iltin command is).2 F 3.264
-(enabled. If)144 415.2 R(the)3.264 E F2<ad4c>3.264 E F0 .763
-(option is used, the pathname printed may contain symbolic links.)3.264
-F .763(The return)5.763 F .405(status is 0 unless an error occurs while\
- reading the name of the current directory or an in)144 427.2 R -.25(va)
--.4 G .405(lid op-).25 F(tion is supplied.)144 439.2 Q F2 -.18(re)108
-456 S(ad).18 E F0([)3.817 E F2(\255ers)A F0 3.817(][)C F2<ad61>-3.817 E
-F1(aname)3.817 E F0 3.817(][)C F2<ad64>-3.817 E F1(delim)3.817 E F0
-3.817(][)C F2<ad69>-3.817 E F1(te)3.817 E(xt)-.2 E F0 3.817(][)C F2
-<ad6e>-3.817 E F1(nc)3.816 E(har)-.15 E(s)-.1 E F0 3.816(][)C F2<ad4e>
--3.816 E F1(nc)3.816 E(har)-.15 E(s)-.1 E F0 3.816(][)C F2<ad70>-3.816 E
-F1(pr)3.816 E(ompt)-.45 E F0 3.816(][)C F2<ad74>-3.816 E F1(timeout)
-3.816 E F0 3.816(][)C F2<ad75>-3.816 E F1(fd)3.816 E F0(])A([)108 468 Q
-F1(name)A F0(...])2.5 E .516(One line is read from the standard input, \
-or from the \214le descriptor)144 480 R F1(fd)3.016 E F0 .516
-(supplied as an ar)3.016 F .517(gument to)-.18 F(the)144 492 Q F2<ad75>
-2.936 E F0 .436(option, split into w)2.936 F .435(ords as described abo)
--.1 F .735 -.15(ve u)-.15 H(nder).15 E F2 -.75(Wo)2.935 G .435
-(rd Splitting).75 F F0 2.935(,a)C .435(nd the \214rst w)-2.935 F .435
-(ord is as-)-.1 F .375(signed to the \214rst)144 504 R F1(name)3.235 E
-F0 2.876(,t).18 G .376(he second w)-2.876 F .376(ord to the second)-.1 F
-F1(name)3.236 E F0 2.876(,a).18 G .376(nd so on.)-2.876 F .376
-(If there are more w)5.376 F(ords)-.1 E .237
-(than names, the remaining w)144 516 R .237(ords and their interv)-.1 F
-.237(ening delimiters are assigned to the last)-.15 F F1(name)3.096 E F0
-5.236(.I).18 G(f)-5.236 E .874(there are fe)144 528 R .874(wer w)-.25 F
-.875(ords read from the input stream than names, the remaining names ar\
-e assigned)-.1 F .518(empty v)144 540 R 3.018(alues. The)-.25 F .518
-(characters in)3.018 F/F3 9/Times-Bold@0 SF(IFS)3.018 E F0 .518
-(are used to split the line into w)2.768 F .517
-(ords using the same rules the)-.1 F .026(shell uses for e)144 552 R
-.026(xpansion \(described abo)-.15 F .326 -.15(ve u)-.15 H(nder).15 E F2
--.75(Wo)2.526 G .026(rd Splitting).75 F F0 2.526(\). The)B .026
-(backslash character \()2.526 F F2(\\)A F0 2.527(\)m)C(ay)-2.527 E .489
-(be used to remo)144 564 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.488 E
-(tions, if supplied, ha)144 576 Q .3 -.15(ve t)-.2 H(he follo).15 E
-(wing meanings:)-.25 E F2<ad61>144 588 Q F1(aname)2.5 E F0 1.025(The w)
-180 600 R 1.026(ords are assigned to sequential indices of the array v)
--.1 F(ariable)-.25 E F1(aname)3.856 E F0 3.526(,s).18 G 1.026
-(tarting at 0.)-3.526 F F1(aname)180.33 612 Q F0(is unset before an)2.68
-E 2.5(yn)-.15 G .5 -.25(ew va)-2.5 H(lues are assigned.).25 E(Other)5 E
-F1(name)2.5 E F0(ar)2.5 E(guments are ignored.)-.18 E F2<ad64>144 624 Q
-F1(delim)2.5 E F0 .281(The \214rst character of)180 636 R F1(delim)2.781
-E F0 .281(is used to terminate the input line, rather than ne)2.781 F
-2.78(wline. If)-.25 F F1(de-)2.78 E(lim)180 648 Q F0
-(is the empty string,)2.5 E F2 -.18(re)2.5 G(ad).18 E F0
-(will terminate a line when it reads a NUL character)2.5 E(.)-.55 E F2
-<ad65>144 660 Q F0 .372
-(If the standard input is coming from a terminal,)180 660 R F2 -.18(re)
-2.873 G(adline).18 E F0(\(see)2.873 E F3(READLINE)2.873 E F0(abo)2.623 E
--.15(ve)-.15 G 2.873(\)i).15 G 2.873(su)-2.873 G(sed)-2.873 E .218
-(to obtain the line.)180 672 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 684 Q -.15(ve)-.25 G 2.5(\)e).15 G
-(diting settings, b)-2.5 E(ut uses Readline')-.2 E 2.5(sd)-.55 G(ef)-2.5
-E(ault \214lename completion.)-.1 E F2<ad69>144 696 Q F1(te)2.5 E(xt)-.2
-E F0(If)180 696 Q F2 -.18(re)2.715 G(adline).18 E F0 .216
-(is being used to read the line,)2.715 F F1(te)2.716 E(xt)-.2 E F0 .216
-(is placed into the editing b)2.716 F(uf)-.2 E .216(fer before edit-)
--.25 F(ing be)180 708 Q(gins.)-.15 E(GNU Bash 5.0)72 768 Q(2004 Apr 20)
-149.565 E(13)198.725 E 0 Cg EP
+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/F1 10/Times-Bold@0 SF<ad6e>144 84 Q/F2 10
-/Times-Italic@0 SF(nc)2.5 E(har)-.15 E(s)-.1 E F1 -.18(re)180 96 S(ad)
-.18 E F0 .323(returns after reading)2.823 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 108 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 120 Q F2(nc)2.5 E(har)-.15 E(s)-.1 E F1 -.18(re)180 132 S(ad)
-.18 E F0 1.269(returns after reading e)3.769 F(xactly)-.15 E F2(nc)3.769
-E(har)-.15 E(s)-.1 E F0 1.269(characters rather than w)3.769 F 1.27
-(aiting for a complete)-.1 F .275
-(line of input, unless EOF is encountered or)180 144 R F1 -.18(re)2.775
-G(ad).18 E F0 .274(times out.)2.774 F .274(Delimiter characters encoun-)
-5.274 F 1.002
-(tered in the input are not treated specially and do not cause)180 156 R
-F1 -.18(re)3.503 G(ad).18 E F0 1.003(to return until)3.503 F F2(nc)3.503
-E(har)-.15 E(s)-.1 E F0 .609(characters are read.)180 168 R .608
-(The result is not split on the characters in)5.609 F F1(IFS)3.108 E F0
-3.108(;t)C .608(he intent is that the)-3.108 F -.25(va)180 180 S .669
+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 .67
-(xception of backslash; see the)-.15 F F1<ad72>180 192 Q F0(option belo)
-2.5 E(w\).)-.25 E F1<ad70>144 204 Q F2(pr)2.5 E(ompt)-.45 E F0(Display)
-180 216 Q F2(pr)3.661 E(ompt)-.45 E F0 1.161(on standard error)3.661 F
+(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 228 Q 2.5(yi)-.15 G 2.5
+(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 F1
-<ad72>144 240 Q F0 .543(Backslash does not act as an escape character)
-180 240 R 5.543(.T)-.55 G .544(he backslash is considered to be part of)
--5.543 F .493(the line.)180 252 R .493(In particular)5.493 F 2.993(,ab)
--.4 G(ackslash-ne)-2.993 E .493
+(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
-264 Q F1<ad73>144 276 Q F0(Silent mode.)180 276 Q
-(If input is coming from a terminal, characters are not echoed.)5 E F1
-<ad74>144 288 Q F2(timeout)2.5 E F0(Cause)180 300 Q F1 -.18(re)2.928 G
-(ad).18 E F0 .428(to time out and return f)2.928 F .428
-(ailure if a complete line of input \(or a speci\214ed num-)-.1 F .561
-(ber of characters\) is not read within)180 312 R F2(timeout)3.061 E F0
-(seconds.)3.061 E F2(timeout)5.561 E F0 .56(may be a decimal number)
-3.061 F(with a fractional portion follo)180 324 Q
+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 F1 -.18(re)2.5 G(ad).18 E F0 .506(is readin\
+.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
-336 R .505(fect when reading)-.25 F .589(from re)180 348 R .589
-(gular \214les.)-.15 F(If)5.589 E F1 -.18(re)3.089 G(ad).18 E F0 .589
-(times out,)3.089 F F1 -.18(re)3.089 G(ad).18 E F0(sa)3.089 E -.15(ve)
--.2 G 3.089(sa).15 G .889 -.15(ny p)-3.089 H .59
-(artial input read into the speci\214ed).15 F -.25(va)180 360 S(riable)
-.25 E F2(name)2.77 E F0 5.27(.I)C(f)-5.27 E F2(timeout)2.77 E F0 .27
-(is 0,)2.77 F F1 -.18(re)2.77 G(ad).18 E F0 .27(returns immediately)2.77
+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 1.12(The e)180 372 R 1.12(xit status is 0 if input is a)
--.15 F -.25(va)-.2 G 1.12(ilable on the speci\214ed \214le descriptor)
-.25 F 3.62(,n)-.4 G 1.12(on-zero other)-3.62 F(-)-.2 E 2.5(wise. The)180
-384 R -.15(ex)2.5 G(it status is greater than 128 if the timeout is e)
-.15 E(xceeded.)-.15 E F1<ad75>144 396 Q F2(fd)2.5 E F0
-(Read input from \214le descriptor)180 396 Q F2(fd)2.5 E F0(.)A .522
-(If no)144 412.8 R F2(names)3.382 E F0 .522
+(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
-424.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
+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
-436.8 R .96(ariable assignment error \(such as as-)-.25 F .706
-(signing to a readonly v)144 448.8 R .706(ariable\) occurs, or an in)
+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 F1<ad75>144 460.8 Q F0(.)A F1 -.18(re)108
-477.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 489.6 R -.15(ve)-.25 G(n).15 E F2(names)3.27 E F0
+.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 F2(names)3.63 E F0 .77(may not be changed by subse-)3.54 F 1.096
-(quent assignment.)144 501.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 513.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 525.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 537.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 549.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 561.6 R .786(If a v)5.786 F .785(ariable name is fol-)-.25 F(lo)144
-573.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 585.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 597.6 Q F0
-(that is not a function.)2.68 E F1 -.18(re)108 614.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 626.4 R
+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 638.4 R -.15(xe)
+(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 650.4 R 2.767(,t)-.4 G .267
+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 662.4 R 5.02(.I)-.55 G(f)-5.02 E F1 -.18(re)2.52 G(tur).18 E(n)-.15
+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 674.4 R -.15(xe)-.15 G
+.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 686.4 S(tur).18 E(n)-.15 E F0 .628
+.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 698.4 R -.15(xe)-.15 G .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 710.4 R -.15(xe)-.15 G .326(cuted within the script as the e).15 F
+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 2.035
-(its least signi\214cant 8 bits.)144 722.4 R 2.035
-(The return status is non-zero if)7.035 F F1 -.18(re)4.536 G(tur).18 E
-(n)-.15 E F0 2.036(is supplied a non-numeric)4.536 F(GNU Bash 5.0)72 768
-Q(2004 Apr 20)149.565 E(14)198.725 E 0 Cg EP
-%%Page: 15 15
-%%BeginPageSetup
-BP
-%%EndPageSetup
-/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61
-(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35
-E(UIL)-.1 E(TINS\(1\))-.92 E(ar)144 84 Q .706
-(gument, or is used outside a function and not during e)-.18 F -.15(xe)
--.15 G .705(cution of a script by).15 F/F1 10/Times-Bold@0 SF(.)3.205 E
-F0(or)4.038 E F1(sour)3.205 E(ce)-.18 E F0 5.705(.A)C -.15(ny)-5.705 G
-.365(command associated with the)144 96 R F1(RETURN)2.865 E F0 .365
-(trap is e)2.865 F -.15(xe)-.15 G .365(cuted before e).15 F -.15(xe)-.15
-G .366(cution resumes after the func-).15 F(tion or script.)144 108 Q F1
-(set)108 124.8 Q F0([)2.5 E F1(\255\255abefhkmnptuvxBCEHPT)A F0 2.5(][)C
-F1<ad6f>-2.5 E/F2 10/Times-Italic@0 SF(option\255name)2.5 E F0 2.5(][)C
-F2(ar)-2.5 E(g)-.37 E F0(...])2.5 E F1(set)108 136.8 Q F0([)2.5 E F1
-(+abefhkmnptuvxBCEHPT)A F0 2.5(][)C F1(+o)-2.5 E F2(option\255name)2.5 E
-F0 2.5(][)C F2(ar)-2.5 E(g)-.37 E F0(...])2.5 E -.4(Wi)144 148.8 S .836
-(thout options, the name and v).4 F .835(alue of each shell v)-.25 F
-.835(ariable are displayed in a format that can be)-.25 F .784
-(reused as input for setting or resetting the currently-set v)144 160.8
-R 3.284(ariables. Read-only)-.25 F -.25(va)3.284 G .784
-(riables cannot be).25 F 2.947(reset. In)144 172.8 R F2 .447(posix mode)
-2.947 F F0 2.947(,o)C .447(nly shell v)-2.947 F .447
-(ariables are listed.)-.25 F .447
-(The output is sorted according to the current)5.447 F 3.53
-(locale. When)144 184.8 R 1.031(options are speci\214ed, the)3.53 F
-3.531(ys)-.15 G 1.031(et or unset shell attrib)-3.531 F 3.531(utes. An)
--.2 F 3.531(ya)-.15 G -.18(rg)-3.531 G 1.031(uments remaining).18 F .585
-(after option processing are treated as v)144 196.8 R .584
-(alues for the positional parameters and are assigned, in or)-.25 F(-)
--.2 E(der)144 208.8 Q 2.5(,t)-.4 G(o)-2.5 E F1($1)2.5 E F0(,)A F1($2)2.5
-E F0(,)A F1 2.5(... $)2.5 F F2(n)A F0 5(.O)C(ptions, if speci\214ed, ha)
--5 E .3 -.15(ve t)-.2 H(he follo).15 E(wing meanings:)-.25 E F1<ad61>144
-220.8 Q F0 1.377(Each v)184 220.8 R 1.377
+(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 232.8 Q(ed for e)-.1 E(xport to the en)-.15
-E(vironment of subsequent commands.)-.4 E F1<ad62>144 244.8 Q F0 .132
-(Report the status of terminated background jobs immediately)184 244.8 R
+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 256.8 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 268.8 Q F0
-.087(Exit immediately if a)184 268.8 R F2(pipeline)2.587 E F0 .087
+(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 280.8 Q
-F2 1.521(compound command)4.021 F F0(\(see)4.021 E/F3 9/Times-Bold@0 SF
-1.521(SHELL GRAMMAR)4.021 F F0(abo)3.771 E -.15(ve)-.15 G 1.521(\), e)
-.15 F 1.521(xits with a non-zero status.)-.15 F .079
-(The shell does not e)184 292.8 R .079(xit if the command that f)-.15 F
-.08(ails is part of the command list immediately)-.1 F(follo)184 304.8 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 316.8 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 328.8 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
--.25(va)184 340.8 S .66(lue is being in).25 F -.15(ve)-.4 G .66
-(rted with).15 F F1(!)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 352.8 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 364.8 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 376.8 R .617
-(vironment and each subshell en)-.4 F .617(vironment separately \(see)
--.4 F F3 .617(COMMAND EXE-)3.117 F .642(CUTION ENVIR)184 388.8 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 400.8
-Q .999(If a compound command or shell function e)184 418.8 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
-430.8 R -.15(xe)-.15 G .089
-(cuted within the compound command or function body).15 F .503
-(will be af)184 442.8 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 454.8 R 4.183(ac)4.183 G 1.683
-(ompound command or shell function sets)-4.183 F F1<ad65>4.184 E F0
+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 466.8 Q F1<ad65>3.154 E F0 .654
+-.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 478.8 Q F1
-<ad66>144 490.8 Q F0(Disable pathname e)184 490.8 Q(xpansion.)-.15 E F1
-<ad68>144 502.8 Q F0 .988(Remember the location of commands as the)184
-502.8 R 3.488(ya)-.15 G .988(re look)-3.488 F .988(ed up for e)-.1 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 514.8 Q(ault.)-.1 E F1<ad6b>144 526.8 Q F0 .514
-(All ar)184 526.8 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 538.8 Q F1
-<ad6d>144 550.8 Q F0 .148(Monitor mode.)184 550.8 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 562.8 R F3 .651(JOB CONTR)3.151 F
-(OL)-.27 E F0(abo)2.901 E -.15(ve)-.15 G 3.151(\). All).15 F .65
-(processes run in a separate)3.151 F .678(process group.)184 574.8 R
-.679(When a background job completes, the shell prints a line containin\
-g its)5.678 F -.15(ex)184 586.8 S(it status.).15 E F1<ad6e>144 598.8 Q
-F0 .653(Read commands b)184 598.8 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
-610.8 Q(This is ignored by interacti)5 E .3 -.15(ve s)-.25 H(hells.).15
-E F1<ad6f>144 622.8 Q F2(option\255name)2.5 E F0(The)184 634.8 Q F2
-(option\255name)2.5 E F0(can be one of the follo)2.5 E(wing:)-.25 E F1
-(allexport)184 646.8 Q F0(Same as)224 658.8 Q F1<ad61>2.5 E F0(.)A F1
-(braceexpand)184 670.8 Q F0(Same as)224 682.8 Q F1<ad42>2.5 E F0(.)A F1
-(emacs)184 694.8 Q F0 .089
-(Use an emacs-style command line editing interf)224 694.8 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 706.8 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 718.8 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(GNU Bash 5.0)72 768 Q(2004 Apr 20)149.565 E(15)
-198.725 E 0 Cg EP
+(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(err)184 84 Q(exit)
--.18 E F0(Same as)224 84 Q F1<ad65>2.5 E F0(.)A F1(errtrace)184 96 Q F0
-(Same as)224 96 Q F1<ad45>2.5 E F0(.)A F1(functrace)184 108 Q F0
-(Same as)224 120 Q F1<ad54>2.5 E F0(.)A F1(hashall)184 132 Q F0(Same as)
-224 132 Q F1<ad68>2.5 E F0(.)A F1(histexpand)184 144 Q F0(Same as)224
-156 Q F1<ad48>2.5 E F0(.)A F1(history)184 168 Q F0 .586
-(Enable command history)224 168 R 3.087(,a)-.65 G 3.087(sd)-3.087 G .587
-(escribed abo)-3.087 F .887 -.15(ve u)-.15 H(nder).15 E/F2 9
-/Times-Bold@0 SF(HIST)3.087 E(OR)-.162 E(Y)-.315 E/F3 9/Times-Roman@0 SF
-(.)A F0 .587(This option is)5.087 F(on by def)224 180 Q
+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
-192 Q(eeof)-.18 E F0 1.657(The ef)224 204 R 1.657
-(fect is as if the shell command)-.25 F/F4 10/Courier@0 SF(IGNOREEOF=10)
+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
-216 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 228 S(yw).1 E(ord)-.1 E F0(Same as)224 240 Q F1
-<ad6b>2.5 E F0(.)A F1(monitor)184 252 Q F0(Same as)224 252 Q F1<ad6d>2.5
-E F0(.)A F1(noclob)184 264 Q(ber)-.1 E F0(Same as)224 276 Q F1<ad43>2.5
-E F0(.)A F1(noexec)184 288 Q F0(Same as)224 288 Q F1<ad6e>2.5 E F0(.)A
-F1(noglob)184 300 Q F0(Same as)224 300 Q F1<ad66>2.5 E F0(.)A F1(nolog)
-184 312 Q F0(Currently ignored.)224 312 Q F1(notify)184 324 Q F0
-(Same as)224 324 Q F1<ad62>2.5 E F0(.)A F1(nounset)184 336 Q F0(Same as)
-224 336 Q F1<ad75>2.5 E F0(.)A F1(onecmd)184 348 Q F0(Same as)224 348 Q
-F1<ad74>2.5 E F0(.)A F1(ph)184 360 Q(ysical)-.15 E F0(Same as)224 360 Q
-F1<ad50>2.5 E F0(.)A F1(pipefail)184 372 Q F0 1.029
-(If set, the return v)224 372 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 384
+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 396 S(it successfully).15 E 5(.T)-.65 G
-(his option is disabled by def)-5 E(ault.)-.1 E F1(posix)184 408 Q F0
-2.09(Change the beha)224 408 R 2.091(vior of)-.2 F F1(bash)4.591 E F0
+-.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 1.212(POSIX standard to match the standard \()224
-420 R/F5 10/Times-Italic@0 SF 1.212(posix mode)B F0 3.712(\). See)B F2
-1.212(SEE ALSO)3.712 F F0(belo)3.462 E(w)-.25 E .954
-(for a reference to a document that details ho)224 432 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 444 Q(vior)-.2 E(.)-.55 E F1(pri)184 456 Q(vileged)-.1 E
-F0(Same as)224 468 Q F1<ad70>2.5 E F0(.)A F1 -.1(ve)184 480 S(rbose).1 E
-F0(Same as)224 480 Q F1<ad76>2.5 E F0(.)A F1(vi)184 492 Q F0 .209
-(Use a vi-style command line editing interf)224 492 R 2.709(ace. This)
+(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
-504 Q(ace used for)-.1 E F1 -.18(re)2.5 G(ad \255e).18 E F0(.)A F1
-(xtrace)184 516 Q F0(Same as)224 516 Q F1<ad78>2.5 E F0(.)A(If)184 534 Q
-F1<ad6f>3.052 E F0 .552(is supplied with no)3.052 F F5(option\255name)
+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
-546 Q F0 1.072(is supplied with no)3.572 F F5(option\255name)3.572 E F0
+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 558 Q F1<ad70>
-144 570 Q F0 -.45(Tu)184 570 S 1.071(rn on).45 F F5(privile)4.821 E -.1
+(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
-F2($ENV)3.572 E F0(and)3.322 E F2($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 582 R 1.5
-(vironment, and the)-.4 F F2(SHELLOPTS)4 E F3(,)A F2 -.27(BA)184 594 S
-(SHOPTS).27 E F3(,)A F2(CDP)2.774 E -.855(AT)-.666 G(H).855 E F3(,)A F0
-(and)2.774 E F2(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 606 R .38
+/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 618 R F1<ad70>2.961 E F0 .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 630 Q .695 -.15(ve u)-.25 H .395
+(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 642 R -.45(Tu)5.386 G
+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 654 Q F1<ad74>144 666 Q F0
-(Exit after reading and e)184 666 Q -.15(xe)-.15 G(cuting one command.)
-.15 E F1<ad75>144 678 Q F0 -.35(Tr)184 678 S .044(eat unset v).35 F .044
-(ariables and parameters other than the special parameters "@" and "*" \
-as an)-.25 F .182(error when performing parameter e)184 690 R 2.682
-(xpansion. If)-.15 F -.15(ex)2.682 G .183
-(pansion is attempted on an unset v).15 F(ari-)-.25 E .746
-(able or parameter)184 702 R 3.246(,t)-.4 G .746
-(he shell prints an error message, and, if not interacti)-3.246 F -.15
-(ve)-.25 G 3.246(,e).15 G .746(xits with a)-3.396 F(non-zero status.)184
-714 Q(GNU Bash 5.0)72 768 Q(2004 Apr 20)149.565 E(16)198.725 E 0 Cg EP
-%%Page: 17 17
-%%BeginPageSetup
-BP
-%%EndPageSetup
-/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61
-(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35
-E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10/Times-Bold@0 SF<ad76>144 84 Q F0
-(Print shell input lines as the)184 84 Q 2.5(ya)-.15 G(re read.)-2.5 E
-F1<ad78>144 96 Q F0 .315(After e)184 96 R .315(xpanding each)-.15 F/F2
-10/Times-Italic@0 SF .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 108 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 9/Times-Bold@0 SF(PS4)3.736 E
-/F4 9/Times-Roman@0 SF(,)A F0(follo)3.486 E 1.236(wed by the com-)-.25 F
-(mand and its e)184 120 Q(xpanded ar)-.15 E(guments or associated w)-.18
-E(ord list.)-.1 E F1<ad42>144 132 Q F0 1.205(The shell performs brace e)
-184 132 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 144 S(ult.).1 E F1<ad43>144 156 Q F0 .214(If set,)184
-156 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 168 R .553(may be o)
-3.053 F -.15(ve)-.15 G .553
+(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 180 Q F1(>|)2.5 E F0(instead of)2.5 E F1(>)2.5 E F0(.)A F1
-<ad45>144 192 Q F0 .104(If set, an)184 192 R 2.604(yt)-.15 G .104
+.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 204 R -.15(xe)-.15 G .838(cuted in a subshell en).15
+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 216 Q F1
-<ad48>144 228 Q F0(Enable)184 228 Q F1(!)3.032 E F0 .532
+(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 240 Q -.15
-(ve)-.25 G(.).15 E F1<ad50>144 252 Q F0 .959
-(If set, the shell does not resolv)184 252 R 3.459(es)-.15 G .959
+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 264 R 1.453(orking directory)-.1 F 6.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 276 R(def)
+(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 288 Q(.)-.65 E F1<ad54>144
-300 Q F0 .89(If set, an)184 300 R 3.39(yt)-.15 G .89(raps on)-3.39 F F1
+(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 312 R -.15(xe)-.15 G 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 324 Q F0
-(traps are normally not inherited in such cases.)2.5 E F1<adad>144 336 Q
-F0 .401(If no ar)184 336 R .401(guments follo)-.18 F 2.901(wt)-.25 G
+(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 348 Q F2
+(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
-360 Q F0 .796(Signal the end of options, cause all remaining)184 360 R
+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 372
+.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 384 Q .425(The options are of)144 400.8
+(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 412.8 R 2.678(f. The)-.25 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 424.8 R F1<24ad>2.566 E F0
+(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 436.8 Q F1(shift)108 453.6 Q F0([)2.5 E F2(n)A F0
-(])A .429(The positional parameters from)144 465.6 R F2(n)2.929 E F0
+(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 477.6 Q F1($#)2.582
+.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 489.6 R(If)5.06 E F2(n)2.92 E F0
+(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 501.6 R
+(,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
-(or less than zero; otherwise 0.)144 513.6 Q F1(shopt)108 530.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 542.4 S .64(ggle the v).8 F .639
+.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 554.4 R 1.674 -.65(w, o)-.25 H 1.174 -.4(r, i).65 H
+(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 566.4 R .066
+(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 578.4 R F2
+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 590.4 R F1<ad70>3.105 E F0 .605(option causes output to\
+(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 602.4 Q .3 -.15(ve t)-.2 H(he follo).15 E
-(wing meanings:)-.25 E F1<ad73>144 614.4 Q F0(Enable \(set\) each)180
-614.4 Q F2(optname)2.5 E F0(.)A F1<ad75>144 626.4 Q F0
-(Disable \(unset\) each)180 626.4 Q F2(optname)2.5 E F0(.)A F1<ad71>144
-638.4 Q F0 .003(Suppresses normal output \(quiet mode\); the return sta\
-tus indicates whether the)180 638.4 R F2(optname)2.504 E F0(is)2.504 E
-.256(set or unset.)180 650.4 R .256(If multiple)5.256 F F2(optname)2.756
+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 662.4 Q F2(optnames)2.5 E
-F0(are enabled; non-zero otherwise.)2.5 E F1<ad6f>144 674.4 Q F0
-(Restricts the v)180 674.4 Q(alues of)-.25 E F2(optname)2.5 E F0
+(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 691.2 R F1
+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 703.2 R -.15(ve)-.25 G(ly).15 E 5.984(.U)
+(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 715.2 S(ult.)
-.1 E(GNU Bash 5.0)72 768 Q(2004 Apr 20)149.565 E(17)198.725 E 0 Cg EP
-%%Page: 18 18
-%%BeginPageSetup
-BP
-%%EndPageSetup
-/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61
-(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35
-E(UIL)-.1 E(TINS\(1\))-.92 E 1.544
-(The return status when listing options is zero if all)144 84 R/F1 10
-/Times-Italic@0 SF(optnames)4.044 E F0 1.545
-(are enabled, non-zero otherwise.)4.045 F .696
+(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 96 R F1(optname)3.196 E F0 .696(is not a v)3.196 F .695(alid shell)
--.25 F(option.)144 108 Q(The list of)144 124.8 Q/F2 10/Times-Bold@0 SF
-(shopt)2.5 E F0(options is:)2.5 E F2(assoc_expand_once)144 142.8 Q F0
-1.944(If set, the shell suppresses multiple e)184 154.8 R -.25(va)-.25 G
+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 166.8 R .885
+(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 178.8 Q -.15(xe)-.15 G
-(cuting b).15 E(uiltins that perform array dereferencing.)-.2 E F2
-(autocd)144 190.8 Q F0 .199
-(If set, a command name that is the name of a directory is e)184 190.8 R
+(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 202.8 Q F2(cd)2.5 E F0 2.5(command. This)2.5 F
+(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
-F2(cdable_v)144 214.8 Q(ars)-.1 E F0 .156(If set, an ar)184 226.8 R .156
-(gument to the)-.18 F F2(cd)2.656 E F0 -.2(bu)2.656 G .155
+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 238.8 Q(ariable whose v)-.25 E
-(alue is the directory to change to.)-.25 E F2(cdspell)144 250.8 Q F0
+(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
-250.8 R F2(cd)3.555 E F0 1.055(command will be)3.555 F 3.988
-(corrected. The)184 262.8 R 1.488(errors check)3.988 F 1.487
+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 274.8 R 4.57 -.65(y. I)
+-.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 286.8 Q
+(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 F2(checkhash)144 298.8 Q F0 .737(If set,)184 310.8 R F2(bash)3.237
+.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
-322.8 Q(If a hashed command no longer e)5 E
-(xists, a normal path search is performed.)-.15 E F2(checkjobs)144 334.8
-Q F0 .448(If set,)184 346.8 R F2(bash)2.948 E F0 .448
+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 358.8 R(an)2.662 E 2.661(yj)-.15 G
+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.472
-(tempted without an interv)184 370.8 R 1.473(ening command \(see)-.15 F
-/F3 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
-382.8 S(ys postpones e).1 E(xiting if an)-.15 E 2.5(yj)-.15 G
-(obs are stopped.)-2.5 E F2(checkwinsize)144 394.8 Q F0 1.09(If set,)184
-406.8 R F2(bash)3.59 E F0 1.09(checks the windo)3.59 F 3.59(ws)-.25 G
+(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 418.8 Q 3.35(,u)-.65 G .85
+(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 430.8 S(ult.).1 E F2
-(cmdhist)144 442.8 Q F0 .173(If set,)184 442.8 R F2(bash)2.673 E F0 .173
+(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 454.8 Q 5.596(.T)-.65 G .597(his allo)-5.596 F .597
+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 466.8 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 F3(HIST)184 478.8 Q(OR)-.162 E(Y)-.315 E F4(.)A
-F2(compat31)144 490.8 Q(compat32)144 502.8 Q(compat40)144 514.8 Q
-(compat41)144 526.8 Q(compat42)144 538.8 Q(compat43)144 550.8 Q
-(compat44)144 562.8 Q F0 .889(These control aspects of the shell')184
-574.8 R 3.389(sc)-.55 G .889(ompatibility mode \(see)-3.389 F F3 .889
-(SHELL COMP)3.389 F -.855(AT)-.666 G(IBILITY).855 E(MODE)184 586.8 Q F0
-(belo)2.25 E(w\).)-.25 E F2(complete_fullquote)144 603.6 Q F0 .654
-(If set,)184 615.6 R F2(bash)3.153 E F0 .653(quotes all shell metachara\
-cters in \214lenames and directory names when per)3.153 F(-)-.2 E 1.524
-(forming completion.)184 627.6 R 1.524(If not set,)6.524 F F2(bash)4.024
-E F0(remo)4.024 E -.15(ve)-.15 G 4.024(sm).15 G 1.524
+(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
-639.6 R .028(metacharacters appear in shell v)184 651.6 R .028
+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 663.6 R 1.073
+(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 675.6 T 1.922 -.4(r, a).25 H 1.422 -.15(ny d).4 H 1.123
+(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
-687.6 R .59(This v)5.59 F .59(ariable is set)-.25 F(by def)184 699.6 Q
+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(GNU Bash 5.0)72 768 Q(2004 Apr 20)149.565 E
-(18)198.725 E 0 Cg EP
-%%Page: 19 19
-%%BeginPageSetup
-BP
-%%EndPageSetup
-/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61
-(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35
-E(UIL)-.1 E(TINS\(1\))-.92 E/F1 10/Times-Bold@0 SF(dir)144 84 Q(expand)
--.18 E F0 .486(If set,)184 96 R F1(bash)2.986 E F0 .486
+(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
-108 R .179(This changes the contents of the readline editing b)5.18 F
+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 120 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 136.8 Q F0 .858(If set,)184
-136.8 R F1(bash)3.358 E F0 .858
+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 148.8 Q(xist.)-.15
-E F1(dotglob)144 165.6 Q F0 .165(If set,)184 165.6 R F1(bash)2.665 E F0
+(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 177.6 Q F1 -.63(``)2.5 G -.55(.')
+(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 194.4 Q F0 .516(If set, a non-interacti)
-184 194.4 R .816 -.15(ve s)-.25 H .516(hell will not e).15 F .516
+(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
-206.4 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 223.2 Q F0 .717
-(If set, aliases are e)184 235.2 R .717(xpanded as described abo)-.15 F
-1.017 -.15(ve u)-.15 H(nder).15 E/F2 9/Times-Bold@0 SF(ALIASES)3.217 E
-/F3 9/Times-Roman@0 SF(.)A F0 .716(This option is enabled)5.217 F
-(by def)184 247.2 Q(ault for interacti)-.1 E .3 -.15(ve s)-.25 H(hells.)
-.15 E F1(extdeb)144 264 Q(ug)-.2 E F0 .17(If set at shell in)184 276 R
--.2(vo)-.4 G .17(cation, or in a shell startup \214le, arrange to e).2 F
+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 288 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 300 Q
+(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
-316.8 Q F0(The)220 316.8 Q F1<ad46>4.25 E F0 1.75(option to the)4.25 F
+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 328.8
-Q(gument.)-.18 E F1(2.)184 345.6 Q F0 1.667(If the command run by the)
-220 345.6 R F1(DEB)4.167 E(UG)-.1 E F0 1.667(trap returns a non-zero v)
+(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 357.6 Q -.15(xe)-.15 G(cuted.).15 E F1
-(3.)184 374.4 Q F0 .84(If the command run by the)220 374.4 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 386.4 S .488
+(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 398.4 Q(ce)-.18 E F0 -.2(bu)2.5 G
+(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 415.2 Q F2 -.27(BA)220 415.2 S(SH_ARGC).27 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(abo)220 427.2 Q
--.15(ve)-.15 G(.).15 E F1(5.)184 444 Q F0 1.637(Function tracing is ena\
-bled: command substitution, shell functions, and sub-)220 444 R
-(shells in)220 456 Q -.2(vo)-.4 G -.1(ke).2 G 2.5(dw).1 G(ith)-2.5 E F1
-(\()2.5 E/F4 10/Times-Italic@0 SF(command)2.5 E F1(\))2.5 E F0
-(inherit the)2.5 E F1(DEB)2.5 E(UG)-.1 E F0(and)2.5 E F1(RETURN)2.5 E F0
-(traps.)2.5 E F1(6.)184 472.8 Q F0 1.082(Error tracing is enabled: comm\
-and substitution, shell functions, and subshells)220 472.8 R(in)220
-484.8 Q -.2(vo)-.4 G -.1(ke).2 G 2.5(dw).1 G(ith)-2.5 E F1(\()2.5 E F4
-(command)2.5 E F1(\))2.5 E F0(inherit the)2.5 E F1(ERR)2.5 E F0(trap.)
-2.5 E F1(extglob)144 501.6 Q F0 .4(If set, the e)184 501.6 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 513.6 Q
-F0(are enabled.)2.5 E F1(extquote)144 530.4 Q F0 .86(If set,)184 542.4 R
-F1($)3.36 E F0<08>A F4(string)A F0 3.36<0861>C(nd)-3.36 E F1($)3.36 E F0
-(")A F4(string)A F0 3.36("q)C .86(uoting is performed within)-3.36 F F1
-(${)3.36 E F4(par)A(ameter)-.15 E F1(})A F0 -.15(ex)3.36 G .86
-(pansions en-).15 F(closed in double quotes.)184 554.4 Q
-(This option is enabled by def)5 E(ault.)-.1 E F1(failglob)144 571.2 Q
-F0 .243(If set, patterns which f)184 571.2 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 583.2 Q(.)
--.55 E F1 -.25(fo)144 600 S -.18(rc).25 G(e_\214gnor).18 E(e)-.18 E F0
-.936(If set, the suf)184 612 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 624 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 636 R F2 .447(SHELL V)2.947 F(ARIABLES)-1.215 E F0
-(abo)2.697 E .747 -.15(ve f)-.15 H .448(or a description of).15 F F2
-(FIGNORE)2.948 E F3(.)A F0 .448(This option is)4.948 F(enabled by def)
-184 648 Q(ault.)-.1 E F1(globasciiranges)144 664.8 Q F0 2.519
-(If set, range e)184 676.8 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 688.8 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 700.8 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 712.8 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 724.8 Q(.)-.55 E
-(GNU Bash 5.0)72 768 Q(2004 Apr 20)149.565 E(19)198.725 E 0 Cg EP
+(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(globstar)144 84 Q F0
-.519(If set, the pattern)184 84 R F1(**)3.019 E F0 .519
-(used in a pathname e)3.019 F .519(xpansion conte)-.15 F .518
-(xt will match all \214les and zero)-.15 F .431
-(or more directories and subdirectories.)184 96 R .431
-(If the pattern is follo)5.431 F .432(wed by a)-.25 F F1(/)2.932 E F0
-2.932(,o)C .432(nly directories)-2.932 F(and subdirectories match.)184
-108 Q F1(gnu_errfmt)144 124.8 Q F0(If set, shell error messages are wri\
-tten in the standard GNU error message format.)184 136.8 Q F1
-(histappend)144 153.6 Q F0 .676
+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
-165.6 R .676(alue of the)-.25 F/F2 9/Times-Bold@0 SF(HISTFILE)3.176 E F0
--.25(va)2.926 G(ri-).25 E(able when the shell e)184 177.6 Q
-(xits, rather than o)-.15 E -.15(ve)-.15 G(rwriting the \214le.).15 E F1
-(histr)144 194.4 Q(eedit)-.18 E F0 .575(If set, and)184 206.4 R F1 -.18
-(re)3.075 G(adline).18 E F0 .575(is being used, a user is gi)3.075 F
--.15(ve)-.25 G 3.075(nt).15 G .576(he opportunity to re-edit a f)-3.075
-F .576(ailed his-)-.1 F(tory substitution.)184 218.4 Q F1(histv)144
-235.2 Q(erify)-.1 E F0 .403(If set, and)184 247.2 R F1 -.18(re)2.903 G
-(adline).18 E F0 .403
+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 .661(passed to the shell parser)184 259.2 R 5.661(.I)-.55 G .662
-(nstead, the resulting line is loaded into the)-5.661 F F1 -.18(re)3.162
-G(adline).18 E F0(editing)3.162 E -.2(bu)184 271.2 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 288 Q F0 1.182(If set, and)184 300 R F1 -.18(re)3.682
-G(adline).18 E F0 1.182(is being used,)3.682 F F1(bash)3.682 E F0 1.181
-(will attempt to perform hostname completion)3.681 F 1.38(when a w)184
-312 R 1.38(ord containing a)-.1 F F1(@)3.881 E F0 1.381
-(is being completed \(see)3.881 F F1(Completing)3.881 E F0(under)3.881 E
-F2(READLINE)3.881 E F0(abo)184 324 Q -.15(ve)-.15 G 2.5(\). This).15 F
-(is enabled by def)2.5 E(ault.)-.1 E F1(huponexit)144 340.8 Q F0
-(If set,)184 352.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 369.6 Q(exit)-.18 E F0 .22
-(If set, command substitution inherits the v)184 381.6 R .219
-(alue of the)-.25 F F1(err)2.719 E(exit)-.18 E F0 .219
-(option, instead of unsetting)2.719 F(it in the subshell en)184 393.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 410.4 Q -.1(ve)-.1 G(_comments).1 E F0 .33(If set, allo)184 422.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 434.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 .967(option is)3.467 F
-(enabled by def)184 446.4 Q(ault.)-.1 E F1(lastpipe)144 463.2 Q F0 .066
-(If set, and job control is not acti)184 463.2 R -.15(ve)-.25 G 2.566
+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 475.2 Q(vironment.)
--.4 E F1(lithist)144 492 Q F0 .655(If set, and the)184 492 R F1(cmdhist)
-3.155 E F0 .654(option is enabled, multi-line commands are sa)3.154 F
--.15(ve)-.2 G 3.154(dt).15 G 3.154(ot)-3.154 G .654(he history)-3.154 F
-(with embedded ne)184 504 Q
+(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 520.8 Q(ar_inherit)-.1 E F0 .421(If set, local v)184 532.8 R
+(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
-544.8 S .174(ists at a pre).15 F .174(vious scope before an)-.25 F 2.673
-(yn)-.15 G .673 -.25(ew va)-2.673 H .173(lue is assigned.).25 F .173
-(The nameref attrib)5.173 F .173(ute is not)-.2 F(inherited.)184 556.8 Q
-F1(localv)144 573.6 Q(ar_unset)-.1 E F0 .328(If set, calling)184 585.6 R
-F1(unset)2.828 E F0 .328(on local v)2.828 F .329(ariables in pre)-.25 F
-.329(vious function scopes marks them so subse-)-.25 F .543(quent looku\
+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 597.6 R(v-)-.2 E(ior of unsetting local v)184 609.6 Q
-(ariables at the current function scope.)-.25 E F1(login_shell)144 626.4
-Q F0 .486
+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
-638.4 R F2(INV)2.987 E(OCA)-.405 E(TION)-.855 E F0(abo)2.737 E -.15(ve)
--.15 G 2.987(\). The).15 F -.25(va)184 650.4 S(lue may not be changed.)
-.25 E F1(mailwar)144 667.2 Q(n)-.15 E F0 .815(If set, and a \214le that)
-184 679.2 R F1(bash)3.315 E F0 .814
-(is checking for mail has been accessed since the last time it)3.315 F
--.1(wa)184 691.2 S 2.5(sc).1 G(heck)-2.5 E(ed, the message `)-.1 E
+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(GNU Bash 5.0)72 768 Q(2004 Apr 20)
-149.565 E(20)198.725 E 0 Cg EP
-%%Page: 21 21
+-.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
-(no_empty_cmd_completion)144 84 Q F0 .324(If set, and)184 96 R F1 -.18
-(re)2.824 G(adline).18 E F0 .324(is being used,)2.824 F F1(bash)2.824 E
-F0 .324(will not attempt to search the)2.824 F/F2 9/Times-Bold@0 SF
--.666(PA)2.825 G(TH)-.189 E F0 .325(for possible)2.575 F
-(completions when completion is attempted on an empty line.)184 108 Q F1
-(nocaseglob)144 124.8 Q F0 .437(If set,)184 136.8 R F1(bash)2.937 E F0
-.436(matches \214lenames in a case\255insensiti)2.937 F .736 -.15(ve f)
--.25 H .436(ashion when performing pathname).05 F -.15(ex)184 148.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 165.6 Q F0 1.193(If set,)184
-177.6 R F1(bash)3.693 E F0 1.194
-(matches patterns in a case\255insensiti)3.693 F 1.494 -.15(ve f)-.25 H
-1.194(ashion when performing matching).05 F .551(while e)184 189.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 201.6 S .622(rd e).1 F .623(xpansions, or when \214ltering\
- possible completions as part of programmable com-)-.15 F(pletion.)184
-213.6 Q F1(nullglob)144 230.4 Q F0 .855(If set,)184 242.4 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 254.4 S
-(pand to a null string, rather than themselv).15 E(es.)-.15 E F1(pr)144
-271.2 Q(ogcomp)-.18 E F0 .676(If set, the programmable completion f)184
-283.2 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 295.2 Q(This option is enabled by def)5 E(ault.)-.1 E
-F1(pr)144 312 Q(ogcomp_alias)-.18 E F0 2.124
-(If set, and programmable completion is enabled,)184 324 R F1(bash)4.624
-E F0 2.124(treats a command name that)4.624 F(doesn')184 336 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 348 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 360 Q(xpanded alias.)-.15 E F1(pr)
-144 376.8 Q(omptv)-.18 E(ars)-.1 E F0 1.447
-(If set, prompt strings under)184 388.8 R 1.448(go parameter e)-.18 F
-1.448(xpansion, command substitution, arithmetic)-.15 F -.15(ex)184
-400.8 S .171(pansion, and quote remo).15 F -.25(va)-.15 G 2.67(la).25 G
-.17(fter being e)-2.67 F .17(xpanded as described in)-.15 F F2(PR)2.67 E
-(OMPTING)-.27 E F0(abo)2.42 E -.15(ve)-.15 G(.).15 E
-(This option is enabled by def)184 412.8 Q(ault.)-.1 E F1 -.18(re)144
-429.6 S(stricted_shell).18 E F0 1.069
+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 441.6 R F2 1.069(RESTRICTED SHELL)3.569 F F0(belo)184 453.6 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 465.6 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 482.4 Q(erbose)-.1 E F0 .501(If set, the)184 494.4 R F1
+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 506.4 Q F1(sour)
-144 523.2 Q(cepath)-.18 E F0 .771(If set, the)184 535.2 R F1(sour)3.271
-E(ce)-.18 E F0(\()3.271 E F1(.)A F0 3.271(\)b)C .771(uiltin uses the v)
+(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 547.2 Q 2.5(gument. This)-.18 F(option is enabled by def)2.5 E
-(ault.)-.1 E F1(xpg_echo)144 564 Q F0(If set, the)184 576 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 592.8 Q F0([)2.5 E F1<ad66>A F0(])A
-1.001(Suspend the e)144 604.8 R -.15(xe)-.15 G 1.001
-(cution of this shell until it recei).15 F -.15(ve)-.25 G 3.501(sa).15 G
-F2(SIGCONT)A F0 3.502(signal. A)3.252 F 1.002(login shell cannot be)
-3.502 F .023(suspended; the)144 616.8 R F1<ad66>2.523 E F0 .023
-(option can be used to o)2.523 F -.15(ve)-.15 G .022
-(rride this and force the suspension.).15 F .022(The return status is)
-5.022 F 2.5(0u)144 628.8 S(nless the shell is a login shell and)-2.5 E
-F1<ad66>2.5 E F0(is not supplied, or if job control is not enabled.)2.5
-E F1(test)108 645.6 Q/F3 10/Times-Italic@0 SF -.2(ex)2.5 G(pr).2 E F1([)
-108 657.6 Q F3 -.2(ex)2.5 G(pr).2 E F1(])2.5 E F0 .877
-(Return a status of 0 \(true\) or 1 \(f)144 657.6 R .878
-(alse\) depending on the e)-.1 F -.25(va)-.25 G .878
-(luation of the conditional e).25 F(xpression)-.15 E F3 -.2(ex)144 669.6
+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 .072
-(primaries described in the)144 681.6 R F1(bash)2.573 E F0 .073
-(manual page under)2.573 F F2(CONDITION)2.573 E .073(AL EXPRESSIONS)-.18
-F/F4 9/Times-Roman@0 SF(.)A F1(test)4.573 E F0 .073(does not)2.573 F
-.695(accept an)144 693.6 R 3.195(yo)-.15 G .695
-(ptions, nor does it accept and ignore an ar)-3.195 F .694(gument of)
--.18 F F1<adad>3.194 E F0 .694(as signifying the end of op-)3.194 F
-(tions.)144 705.6 Q 3.141(Expressions may be combined using the follo)
-144 723.6 R 3.141(wing operators, listed in decreasing order of)-.25 F
-(GNU Bash 5.0)72 768 Q(2004 Apr 20)149.565 E(21)198.725 E 0 Cg EP
-%%Page: 22 22
-%%BeginPageSetup
-BP
-%%EndPageSetup
-/F0 10/Times-Roman@0 SF -.35(BA)72 48 S(SH_B).35 E(UIL)-.1 E 87.61
-(TINS\(1\) General)-.92 F(Commands Manual)2.5 E -.35(BA)90.11 G(SH_B).35
-E(UIL)-.1 E(TINS\(1\))-.92 E 4.114(precedence. The)144 84 R -.25(eva)
-4.114 G 1.613(luation depends on the number of ar).25 F 1.613
-(guments; see belo)-.18 F 5.413 -.65(w. O)-.25 H 1.613(perator prece-)
-.65 F(dence is used when there are \214v)144 96 Q 2.5(eo)-.15 G 2.5(rm)
--2.5 G(ore ar)-2.5 E(guments.)-.18 E/F1 10/Times-Bold@0 SF(!)144 108 Q
-/F2 10/Times-Italic@0 SF -.2(ex)2.5 G(pr).2 E F0 -.35(Tr)180 108 S
-(ue if).35 E F2 -.2(ex)2.5 G(pr).2 E F0(is f)3.23 E(alse.)-.1 E F1(\()
-144 120 Q F2 -.2(ex)2.5 G(pr).2 E F1(\))2.5 E F0 .26(Returns the v)180
-120 R .26(alue of)-.25 F F2 -.2(ex)2.76 G(pr).2 E F0 5.26(.T)C .26
-(his may be used to o)-5.26 F -.15(ve)-.15 G .26
-(rride the normal precedence of opera-).15 F(tors.)180 132 Q F2 -.2(ex)
-144 144 S(pr1).2 E F0<ad>2.5 E F1(a)A F2 -.2(ex)2.5 G(pr2).2 E F0 -.35
-(Tr)180 156 S(ue if both).35 E F2 -.2(ex)2.5 G(pr1).2 E F0(and)2.5 E F2
--.2(ex)2.5 G(pr2).2 E F0(are true.)2.52 E F2 -.2(ex)144 168 S(pr1).2 E
-F0<ad>2.5 E F1(o)A F2 -.2(ex)2.5 G(pr2).2 E F0 -.35(Tr)180 180 S
-(ue if either).35 E F2 -.2(ex)2.5 G(pr1).2 E F0(or)2.5 E F2 -.2(ex)2.5 G
-(pr2).2 E F0(is true.)2.52 E F1(test)144 196.8 Q F0(and)2.5 E F1([)2.5 E
-F0 -.25(eva)2.5 G(luate conditional e).25 E
+(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 214.8 S -.18(rg)-2.5 G(uments).18 E(The e)
-180 226.8 Q(xpression is f)-.15 E(alse.)-.1 E 2.5(1a)144 238.8 S -.18
-(rg)-2.5 G(ument).18 E(The e)180 250.8 Q
+(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 262.8 S -.18(rg)-2.5 G(uments).18 E .37(If the \214rst ar)
-180 274.8 R .37(gument is)-.18 F F1(!)2.87 E F0 2.87(,t)C .37(he e)-2.87
+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 .379(If the \214rst ar)180 286.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
-298.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 310.8 Q
+(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 2.5(3a)144 322.8 S -.18(rg)-2.5 G
-(uments).18 E .236(The follo)180 334.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 346.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 358.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 370.8 R(The)6.333 E F1<ad61>3.833
-E F0(and)3.833 E F1<ad6f>3.832 E F0 1.332
-(operators are considered binary operators when there are)3.832 F .558
-(three ar)180 382.8 R 3.058(guments. If)-.18 F .558(the \214rst ar)3.058
-F .558(gument is)-.18 F F1(!)3.058 E F0 3.058(,t)C .558(he v)-3.058 F
-.558(alue is the ne)-.25 F -.05(ga)-.15 G .558(tion of the tw).05 F
-(o-ar)-.1 E(gument)-.18 E .521(test using the second and third ar)180
-394.8 R 3.021(guments. If)-.18 F .521(the \214rst ar)3.021 F .52
-(gument is e)-.18 F(xactly)-.15 E F1(\()3.02 E F0 .52(and the third)3.02
-F(ar)180 406.8 Q .485(gument is e)-.18 F(xactly)-.15 E F1(\))2.985 E F0
-2.985(,t)C .485(he result is the one-ar)-2.985 F .485
-(gument test of the second ar)-.18 F 2.985(gument. Other)-.18 F(-)-.2 E
-(wise, the e)180 418.8 Q(xpression is f)-.15 E(alse.)-.1 E 2.5(4a)144
-430.8 S -.18(rg)-2.5 G(uments).18 E .385(If the \214rst ar)180 442.8 R
-.385(gument is)-.18 F F1(!)2.885 E F0 2.885(,t)C .385
-(he result is the ne)-2.885 F -.05(ga)-.15 G .384(tion of the three-ar)
-.05 F .384(gument e)-.18 F .384(xpression com-)-.15 F .284
-(posed of the remaining ar)180 454.8 R 2.784(guments. Otherwise,)-.18 F
-.284(the e)2.784 F .284(xpression is parsed and e)-.15 F -.25(va)-.25 G
-.285(luated ac-).25 F(cording to precedence using the rules listed abo)
-180 466.8 Q -.15(ve)-.15 G(.).15 E 2.5(5o)144 478.8 S 2.5(rm)-2.5 G
-(ore ar)-2.5 E(guments)-.18 E 1.635(The e)180 490.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
-502.8 Q -.15(ve)-.15 G(.).15 E(When used with)144 520.8 Q F1(test)2.5 E
-F0(or)2.5 E F1([)2.5 E F0 2.5(,t)C(he)-2.5 E F1(<)2.5 E F0(and)2.5 E F1
-(>)2.5 E F0(operators sort le)2.5 E
-(xicographically using ASCII ordering.)-.15 E F1(times)108 537.6 Q F0
-1.229(Print the accumulated user and system times for the shell and for\
- processes run from the shell.)144 537.6 R(The return status is 0.)144
-549.6 Q F1(trap)108 566.4 Q F0([)2.5 E F1(\255lp)A F0 2.5(][)C([)-2.5 E
-F2(ar)A(g)-.37 E F0(])A F2(sigspec)2.5 E F0(...])2.5 E .683(The command)
-144 578.4 R F2(ar)3.513 E(g)-.37 E F0 .683(is to be read and e)3.403 F
--.15(xe)-.15 G .682(cuted when the shell recei).15 F -.15(ve)-.25 G
-3.182(ss).15 G(ignal\(s\))-3.182 E F2(sigspec)3.522 E F0 5.682(.I).31 G
-(f)-5.682 E F2(ar)3.512 E(g)-.37 E F0(is)3.402 E .608
-(absent \(and there is a single)144 590.4 R F2(sigspec)3.108 E F0 3.108
-(\)o)C(r)-3.108 E F1<ad>3.108 E F0 3.108(,e)C .608
-(ach speci\214ed signal is reset to its original disposition)-3.108 F
-.659(\(the v)144 602.4 R .659(alue it had upon entrance to the shell\).)
--.25 F(If)5.658 E F2(ar)3.488 E(g)-.37 E F0 .658
-(is the null string the signal speci\214ed by each)3.378 F F2(sigspec)
-144.34 614.4 Q F0 .58(is ignored by the shell and by the commands it in)
-3.39 F -.2(vo)-.4 G -.1(ke).2 G 3.081(s. If).1 F F2(ar)3.411 E(g)-.37 E
-F0 .581(is not present and)3.301 F F1<ad70>3.081 E F0(has)3.081 E 1.215
-(been supplied, then the trap commands associated with each)144 626.4 R
-F2(sigspec)4.054 E F0 1.214(are displayed.)4.024 F 1.214(If no ar)6.214
-F(gu-)-.18 E .86(ments are supplied or if only)144 638.4 R F1<ad70>3.36
-E F0 .86(is gi)3.36 F -.15(ve)-.25 G(n,).15 E F1(trap)3.36 E F0 .86
-(prints the list of commands associated with each)3.36 F 2.83
-(signal. The)144 650.4 R F1<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.31
-(bers. Each)144 662.4 R F2(sigspec)4.65 E F0 1.811
-(is either a signal name de\214ned in <)4.62 F F2(signal.h)A F0 1.811
-(>, or a signal number)B 6.811(.S)-.55 G(ignal)-6.811 E
-(names are case insensiti)144 674.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 .667(If a)144 692.4 R F2
-(sigspec)3.507 E F0(is)3.477 E F3(EXIT)3.167 E F0 .667
-(\(0\) the command)2.917 F F2(ar)3.496 E(g)-.37 E F0 .666(is e)3.386 F
--.15(xe)-.15 G .666(cuted on e).15 F .666(xit from the shell.)-.15 F
-.666(If a)5.666 F F2(sigspec)3.506 E F0(is)3.476 E F3(DE-)3.166 E -.09
-(BU)144 704.4 S(G).09 E F4(,)A F0 .483(the command)2.733 F F2(ar)3.313 E
-(g)-.37 E F0 .483(is e)3.203 F -.15(xe)-.15 G .484(cuted before e).15 F
--.15(ve)-.25 G(ry).15 E F2 .484(simple command)2.984 F F0(,)A F2(for)
-2.984 E F0(command,)2.984 E F2(case)2.984 E F0(command,)2.984 E F2
-(select)144 716.4 Q F0 .563(command, e)3.063 F -.15(ve)-.25 G .563
-(ry arithmetic).15 F F2(for)3.063 E F0 .563
-(command, and before the \214rst command e)3.063 F -.15(xe)-.15 G .562
-(cutes in a shell).15 F .622(function \(see)144 728.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 F1(extdeb)3.122 E(ug)-.2 E F0
-.622(option to the)3.122 F(GNU Bash 5.0)72 768 Q(2004 Apr 20)149.565 E
-(22)198.725 E 0 Cg EP
+(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/F1 10/Times-Bold@0 SF(shopt)144 84 Q F0 -.2
-(bu)2.996 G .496(iltin for details of its ef).2 F .496(fect on the)-.25
-F F1(DEB)2.996 E(UG)-.1 E F0 2.996(trap. If)2.996 F(a)2.996 E/F2 10
-/Times-Italic@0 SF(sigspec)3.336 E F0(is)3.306 E/F3 9/Times-Bold@0 SF
-(RETURN)2.996 E/F4 9/Times-Roman@0 SF(,)A F0 .496(the command)2.746 F F2
-(ar)144.33 96 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 F1(.)2.68 E F0(or)2.68 E F1(sour)2.68 E(ce)-.18 E
-F0 -.2(bu)2.68 G .18(iltins \214nishes).2 F -.15(exe)144 108 S(cuting.)
-.15 E .961(If a)144 126 R F2(sigspec)3.801 E F0(is)3.771 E F3(ERR)3.461
-E F4(,)A F0 .961(the command)3.211 F F2(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
-(ra).15 G .96(pipeline \(which may consist of a)-.001 F .185(single sim\
-ple command\), a list, or a compound command returns a non\255zero e)144
-138 R .185(xit status, subject to)-.15 F .452(the follo)144 150 R .452
-(wing conditions.)-.25 F(The)5.452 E F3(ERR)2.952 E F0 .451
-(trap is not e)2.701 F -.15(xe)-.15 G .451(cuted if the f).15 F .451
-(ailed command is part of the com-)-.1 F .387
-(mand list immediately follo)144 162 R .387(wing a)-.25 F F1(while)2.887
-E F0(or)2.887 E F1(until)2.888 E F0 -.1(ke)2.888 G(yw)-.05 E .388
-(ord, part of the test in an)-.1 F F2(if)2.898 E F0 .388
-(statement, part)4.848 F .778(of a command e)144 174 R -.15(xe)-.15 G
-.778(cuted in a).15 F F1(&&)3.278 E F0(or)3.278 E F1(||)3.278 E F0 .778
+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 F1(&&)3.278 E F0(or)3.278 E F1(||)3.277 E F0
-3.277(,a)C -.15(ny)-3.277 G 1.28(command in a pipeline b)144 186 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 F1(!)
-3.78 E F0(.)A(These are the same conditions obe)144 198 Q(yed by the)
--.15 E F1(err)2.5 E(exit)-.18 E F0(\()2.5 E F1<ad65>A F0 2.5(\)o)C
-(ption.)-2.5 E .133
+(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
-216 R -.35(Tr)5.132 G .132(apped signals that are not be-).35 F .117
-(ing ignored are reset to their original v)144 228 R .117
+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 240 R
-(return status is f)2.5 E(alse if an)-.1 E(y)-.15 E F2(sigspec)2.84 E F0
-(is in)2.81 E -.25(va)-.4 G(lid; otherwise).25 E F1(trap)2.5 E F0
-(returns true.)2.5 E F1(type)108 256.8 Q F0([)2.5 E F1(\255aftpP)A F0(])
-A F2(name)2.5 E F0([)2.5 E F2(name)A F0(...])2.5 E -.4(Wi)144 268.8 S
-.174(th no options, indicate ho).4 F 2.674(we)-.25 G(ach)-2.674 E F2
-(name)3.034 E F0 -.1(wo)2.854 G .173
-(uld be interpreted if used as a command name.).1 F .173(If the)5.173 F
-F1<ad74>144 280.8 Q F0 .715(option is used,)3.215 F F1(type)3.215 E F0
+(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 292.8 Q F0 .087
-(is an alias, shell reserv)2.767 F .087(ed w)-.15 F .087
-(ord, function, b)-.1 F .086(uiltin, or disk \214le, respecti)-.2 F -.15
-(ve)-.25 G(ly).15 E 5.086(.I)-.65 G 2.586(ft)-5.086 G(he)-2.586 E F2
-(name)2.946 E F0 .086(is not)2.766 F .118
-(found, then nothing is printed, and an e)144 304.8 R .118
-(xit status of f)-.15 F .118(alse is returned.)-.1 F .119(If the)5.119 F
-F1<ad70>2.619 E F0 .119(option is used,)2.619 F F1(type)2.619 E F0 .855
-(either returns the name of the disk \214le that w)144 316.8 R .855
+(\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 .528(mand name, or nothing if)
-144 328.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 F2(\214le)4.938 E F0 5.528(.T).18 G(he)-5.528
-E F1<ad50>3.028 E F0 .529(option forces a)3.028 F F3 -.666(PA)3.029 G
-(TH)-.189 E F0 .007(search for each)144 340.8 R F2(name)2.507 E F0 2.507
-(,e)C -.15(ve)-2.757 G 2.507(ni).15 G(f)-2.507 E F5 .007(type -t name)
-2.507 F F0 -.1(wo)2.507 G .007(uld not return).1 F F2(\214le)4.417 E F0
-5.006(.I).18 G 2.506(fac)-5.006 G .006(ommand is hashed,)-2.506 F F1
-<ad70>2.506 E F0(and)144 352.8 Q F1<ad50>3.23 E F0 .73
-(print the hashed v)3.23 F .731
+.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 F3 -.666(PA)3.231 G(TH)-.189 E F4(.)A F0 .731(If the)5.231 F F1<ad61>
-144 364.8 Q F0 .824(option is used,)3.324 F F1(type)3.324 E F0 .824
-(prints all of the places that contain an e)3.324 F -.15(xe)-.15 G .823
-(cutable named).15 F F2(name)3.683 E F0 5.823(.T).18 G .823(his in-)
--5.823 F 1.176(cludes aliases and functions, if and only if the)144
-376.8 R F1<ad70>3.676 E F0 1.176(option is not also used.)3.676 F 1.177
+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 388.8 R F1<ad61>3.723 E F0 6.223(.T)C(he)-6.223 E F1<ad66>3.723 E F0
-1.223(option suppresses shell function lookup, as)3.723 F .325(with the)
-144 400.8 R F1(command)2.825 E F0 -.2(bu)2.825 G(iltin.).2 E F1(type)
-5.325 E F0 .325(returns true if all of the ar)2.825 F .326
-(guments are found, f)-.18 F .326(alse if an)-.1 F 2.826(ya)-.15 G .326
-(re not)-2.826 F(found.)144 412.8 Q F1(ulimit)108 429.6 Q F0([)2.5 E F1
-(\255HS)A F0(])A F1<ad61>2.5 E(ulimit)108 441.6 Q F0([)2.5 E F1(\255HS)A
+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 453.6 Q .244(vides control o)-.15 F -.15(ve)
--.15 G 2.744(rt).15 G .244(he resources a)-2.744 F -.25(va)-.2 G .244
+(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
-.943(that allo)144 465.6 R 3.443(ws)-.25 G .943(uch control.)-3.443 F
-(The)5.943 E F1<ad48>3.443 E F0(and)3.443 E F1<ad53>3.444 E F0 .944
+.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 477.6 Q -.15(ve)-.25 G 2.709(nr).15 G 2.709(esource. A)-2.709 F .208
+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.709 F .425(be increased up to the v)144 489.6 R .425
-(alue of the hard limit.)-.25 F .426(If neither)5.425 F F1<ad48>2.926 E
-F0(nor)2.926 E F1<ad53>2.926 E F0 .426
-(is speci\214ed, both the soft and)2.926 F .139(hard limits are set.)144
-501.6 R .139(The v)5.139 F .139(alue of)-.25 F F2(limit)2.729 E F0 .139
+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
-.741(of the special v)144 513.6 R(alues)-.25 E F1(hard)3.241 E F0(,)A F1
+.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 .024
-(soft limit, and no limit, respecti)144 525.6 R -.15(ve)-.25 G(ly).15 E
+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 .984
-(source is printed, unless the)144 537.6 R F1<ad48>3.484 E F0 .984
-(option is gi)3.484 F -.15(ve)-.25 G 3.484(n. When).15 F .985
+(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 549.6
+(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
-561.6 Q(ws:)-.25 E F1<ad61>144 573.6 Q F0
-(All current limits are reported; no limits are set)180 573.6 Q F1<ad62>
-144 585.6 Q F0(The maximum sock)180 585.6 Q(et b)-.1 E(uf)-.2 E
-(fer size)-.25 E F1<ad63>144 597.6 Q F0
-(The maximum size of core \214les created)180 597.6 Q F1<ad64>144 609.6
-Q F0(The maximum size of a process')180 609.6 Q 2.5(sd)-.55 G(ata se)
--2.5 E(gment)-.15 E F1<ad65>144 621.6 Q F0
-(The maximum scheduling priority \("nice"\))180 621.6 Q F1<ad66>144
-633.6 Q F0
+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
-633.6 Q F1<ad69>144 645.6 Q F0(The maximum number of pending signals)180
-645.6 Q F1<ad6b>144 657.6 Q F0
-(The maximum number of kqueues that may be allocated)180 657.6 Q F1
-<ad6c>144 669.6 Q F0(The maximum size that may be lock)180 669.6 Q
-(ed into memory)-.1 E F1<ad6d>144 681.6 Q F0
-(The maximum resident set size \(man)180 681.6 Q 2.5(ys)-.15 G
-(ystems do not honor this limit\))-2.5 E F1<ad6e>144 693.6 Q F0 .791(Th\
+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 693.6 R 3.291(wt)-.25 G .791(his v)-3.291 F .791(alue to)-.25 F
-(be set\))180 705.6 Q F1<ad70>144 717.6 Q F0
-(The pipe size in 512-byte blocks \(this may not be set\))180 717.6 Q
-(GNU Bash 5.0)72 768 Q(2004 Apr 20)149.565 E(23)198.725 E 0 Cg EP
-%%Page: 24 24
+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/F1 10/Times-Bold@0 SF<ad71>144 84 Q F0
-(The maximum number of bytes in POSIX message queues)180 84 Q F1<ad72>
-144 96 Q F0(The maximum real-time scheduling priority)180 96 Q F1<ad73>
-144 108 Q F0(The maximum stack size)180 108 Q F1<ad74>144 120 Q F0
-(The maximum amount of cpu time in seconds)180 120 Q F1<ad75>144 132 Q
-F0(The maximum number of processes a)180 132 Q -.25(va)-.2 G
-(ilable to a single user).25 E F1<ad76>144 144 Q F0 .47
-(The maximum amount of virtual memory a)180 144 R -.25(va)-.2 G .47
-(ilable to the shell and, on some systems, to).25 F(its children)180 156
-Q F1<ad78>144 168 Q F0(The maximum number of \214le locks)180 168 Q F1
-<ad50>144 180 Q F0(The maximum number of pseudoterminals)180 180 Q F1
-<ad52>144 192 Q F0(The maximum time a real-time process can run before \
-blocking, in microseconds)180 192 Q F1<ad54>144 204 Q F0
-(The maximum number of threads)180 204 Q(If)144 220.8 Q/F2 10
-/Times-Italic@0 SF(limit)3.058 E F0 .468(is gi)3.648 F -.15(ve)-.25 G
-.468(n, and the).15 F F1<ad61>2.968 E F0 .468(option is not used,)2.968
-F F2(limit)2.968 E F0 .468(is the ne)2.968 F 2.968(wv)-.25 G .468
-(alue of the speci\214ed resource.)-3.218 F(If)5.468 E .045
-(no option is gi)144 232.8 R -.15(ve)-.25 G .045(n, then).15 F F1<ad66>
-2.545 E F0 .045(is assumed.)2.545 F -1.11(Va)5.045 G .045
-(lues are in 1024-byte increments, e)1.11 F .044(xcept for)-.15 F F1
-<ad74>2.544 E F0 2.544(,w)C .044(hich is)-2.544 F .67(in seconds;)144
-244.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 256.8 Q F0(,)A F1<ad6e>3.737 E F0 3.737(,a)C(nd)-3.737 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.236(hich are in)-3.736 F .238
-(512-byte increments.)144 268.8 R .238
-(The return status is 0 unless an in)5.238 F -.25(va)-.4 G .238
+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 280.8 Q 2.5(wl)-.25 G(imit.)-2.5 E
-F1(umask)108 297.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 309.6 R F2(mode)3.06 E F0
+(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 321.6 R F2 -.15(ch)2.566 G(mod).15 E F0(\(1\).).77 E(If)144
-333.6 Q F2(mode)3.263 E F0 .382(is omitted, the current v)3.063 F .382
+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 345.6 R .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 357.6 Q F0 .552
-(is omitted, the output is in a form that may be reused as input.)3.232
-F .551(The return status is 0 if the)5.551 F(mode w)144 369.6 Q
+(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 386.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 398.4 Q 1.057 -.15(ve e)-.15 H(ach).15 E F2(name)
-3.257 E F0 .757(from the list of de\214ned aliases.)3.257 F(If)5.758 E
-F1<ad61>3.258 E F0 .758(is supplied, all alias de\214nitions are re-)
-3.258 F(mo)144 410.4 Q -.15(ve)-.15 G 2.5(d. The).15 F(return v)2.5 E
+(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 427.2 Q F0<5bad>2.5 E F1
+(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 439.2 S 3.804(re).15 G(ach)-3.804 E F2(name)4.164 E F0
-3.804(,r).18 G(emo)-3.804 E 1.604 -.15(ve t)-.15 H 1.304
+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.803 E F0 1.303(option is gi)3.803 F -.15(ve)
--.25 G 1.303(n, each).15 F F2(name)144.36 451.2 Q F0 .464
-(refers to a shell v)3.144 F .464(ariable, and that v)-.25 F .464
-(ariable is remo)-.25 F -.15(ve)-.15 G 2.965(d. Read-only).15 F -.25(va)
-2.965 G .465(riables may not be un-).25 F 2.769(set. If)144 463.2 R F1
-<ad66>2.769 E F0 .269(is speci\214ed, each)2.769 F F2(name)3.129 E F0
+(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 .403(If the)144 475.2 R F1<ad6e>2.903 E
+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 .404(will be unset)2.904 F
-.72(rather than the v)144 487.2 R .72(ariable it references.)-.25 F F1
-<ad6e>5.72 E F0 .72(has no ef)3.22 F .719(fect if the)-.25 F F1<ad66>
-3.219 E F0 .719(option is supplied.)3.219 F .719(If no options)5.719 F
-.736(are supplied, each)144 499.2 R F2(name)3.236 E F0 .736
-(refers to a v)3.236 F .737(ariable; if there is no v)-.25 F .737
-(ariable by that name, a function with)-.25 F 1.762(that name, if an)144
-511.2 R 3.062 -.65(y, i)-.15 H 4.262(su).65 G 4.261(nset. Each)-4.262 F
+(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.261(df).15 G 1.761(rom the en)-4.261 F(vironment)-.4 E 3.171
-(passed to subsequent commands.)144 523.2 R 3.172(If an)8.172 F 5.672
+-.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.422 G(SH_ARGV0).27 E F4(,)A
-F3 -.27(BA)5.422 G(SH_CMDS).27 E F4(,)A F3 -.27(BA)144 535.2 S
-(SH_COMMAND).27 E F4(,)A F3 -.27(BA)11.482 G(SH_SUBSHELL).27 E F4(,)A F3
+.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.481 E -.495(AC)-.81 G(K).495 E F4(,)A F3(EPOCHREAL)
-144 547.2 Q(TIME)-.828 E F4(,)A F3(EPOCHSECONDS)2.67 E F4(,)A F3(FUNCN)
+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
-559.2 Q F4(,)A F0(or)4.03 E F3(SRANDOM)4.28 E F0 1.779(are unset, the)
-4.03 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.279(ft)-4.279 G(he)-4.279 E 4.279(ya)
--.15 G 1.779(re subse-)-4.279 F(quently reset.)144 571.2 Q(The e)5 E
-(xit status is true unless a)-.15 E F2(name)2.86 E F0(is readonly)2.68 E
-(.)-.65 E F1(wait)108 588 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
-600 S .659(it for each speci\214ed child process and return its termina\
-tion status.).8 F(Each)5.659 E F2(id)3.169 E F0 .659(may be a process)
-3.929 F .009(ID or a job speci\214cation; if a job spec is gi)144 612 R
--.15(ve)-.25 G .008(n, all processes in that job').15 F 2.508(sp)-.55 G
-.008(ipeline are w)-2.508 F .008(aited for)-.1 F 5.008(.I)-.55 G(f)
--5.008 E F2(id)144.01 624 Q F0 .441(is not gi)3.711 F -.15(ve)-.25 G(n,)
-.15 E F1(wait)2.941 E F0 -.1(wa)2.941 G .441
+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
-.442(cuted process substitu-).15 F .598
-(tion, if its process id is the same as)144 636 R F1($!)3.098 E F0 3.098
-(,a)C .598(nd the return status is zero.)-3.098 F .597(If the)5.597 F F1
-<ad6e>3.097 E F0 .597(option is supplied,)3.097 F F1(wait)144 648 Q F0
--.1(wa)3.082 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 .583(ob, to complete and)-3.083 F .404(returns its e)144 660 R .404
-(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 .572
-(are supplied and the shell has no unw)144 672 R .573
-(aited-for children, the e)-.1 F .573(xit status is 127.)-.15 F .573
-(If the)5.573 F F1<ad70>3.073 E F0 .573(option is)3.073 F .39
+.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 684 R .39(xit status is returned is assigned to)-.15 F .905(the v)
-144 696 R(ariable)-.25 E F2(varname)3.405 E F0 .905
+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 708 Q 3.89(ya)-.15 G 3.89(ssignment. This)-3.89 F 1.39
+(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 1.461(when job control is enabled, forces)144 720 R F1
-(wait)3.961 E F0 1.461(to w)3.961 F 1.461(ait for)-.1 F F2(id)3.961 E F0
-1.462(to terminate before returning its status,)3.961 F(GNU Bash 5.0)72
-768 Q(2004 Apr 20)149.565 E(24)198.725 E 0 Cg EP
-%%Page: 25 25
+(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 .149
-(instead of returning when it changes status.)144 84 R(If)5.149 E/F1 10
-/Times-Italic@0 SF(id)2.659 E F0 .149(speci\214es a non-e)3.419 F .148
-(xistent process or job, the return)-.15 F(status is 127.)144 96 Q
-(Otherwise, the return status is the e)5 E
-(xit status of the last process or job w)-.15 E(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 .911
-(Bash-4.0 introduced the concept of a `shell compatibility le)108 124.8
-R -.15(ve)-.25 G .912(l', speci\214ed as a set of options to the shopt)
-.15 F -.2(bu)108 136.8 S(iltin).2 E/F3 10/Times-Bold@0 SF(compat31)3.378
-E F0(,)A F3(compat32)3.378 E F0(,)A F3(compat40)3.378 E F0(,)A F3
-(compat41)3.378 E F0 3.378(,a)C .878(nd so on\).)-3.378 F .877
-(There is only one current compatibility)5.878 F(le)108 148.8 Q -.15(ve)
--.25 G 3.253(l-).15 G 3.253(-e)-3.253 G .753(ach option is mutually e)
--3.253 F(xclusi)-.15 E -.15(ve)-.25 G 5.753(.T).15 G .753
-(he compatibility le)-5.753 F -.15(ve)-.25 G 3.254(li).15 G 3.254(si)
--3.254 G .754(ntended to allo)-3.254 F 3.254(wu)-.25 G .754
-(sers to select be-)-3.254 F(ha)108 160.8 Q 1.084(vior from pre)-.2 F
-1.084(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.583(ym)-.15 G 1.083
-(igrate scripts to use)-3.583 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.456
-(This section does not mention beha)108 189.6 R 1.457
-(vior that is standard for a particular v)-.2 F 1.457
-(ersion \(e.g., setting)-.15 F F3(compat32)3.957 E F0 .887
-(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 .886
-(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 abo)-.2 E -.15(ve)-.15 G(\).).15 E
-.522(If a user enables, say)108 230.4 R(,)-.65 E F3(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 .523
-(ls up to and includ-).15 F .26(ing the current compatibility le)108
-242.4 R -.15(ve)-.25 G 2.76(l. The).15 F .259
-(idea is that each compatibility le)2.759 F -.15(ve)-.25 G 2.759(lc).15
-G .259(ontrols beha)-2.759 F .259(vior that changed)-.2 F 1.645
-(in that v)108 254.4 R 1.646(ersion of)-.15 F F3(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.646(or instance, the)-.15 F .761
-(change to use locale-based comparisons with the)108 266.4 R F3([[)3.261
-E F0 .76(command came in bash-4.1, and earlier v)3.261 F .76
-(ersions used)-.15 F 1.904(ASCII-based comparisons, so enabling)108
-278.4 R F3(compat32)4.404 E F0 1.905
-(will enable ASCII-based comparisons as well.)4.404 F(That)6.905 E .296
-(granularity may not be suf)108 290.4 R .296
+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 .295(ompatibility le)-2.796 F -.15(ve)-.25 G .295(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 .531
-(Bash-4.3 introduced a ne)108 319.2 R 3.031(ws)-.25 G .531(hell v)-3.031
-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 .532(ariable \(a decimal)-.25 F -.15
-(ve)108 331.2 S .108(rsion number lik).15 F 2.608(e4)-.1 G .108
-(.2, or an inte)-2.608 F .108(ger corresponding to the)-.15 F F3(compat)
-2.607 E F1(NN)A F0 .107(option, lik)2.607 F 2.607(e4)-.1 G .107
-(2\) determines the com-)-2.607 F(patibility le)108 343.2 Q -.15(ve)-.25
-G(l.).15 E .387(Starting with bash-4.4, Bash has be)108 360 R .388
-(gun deprecating older compatibility le)-.15 F -.15(ve)-.25 G 2.888
-(ls. Ev).15 F(entually)-.15 E 2.888(,t)-.65 G .388(he options will)
--2.888 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.164(Bash-5.0 is the \214nal v)108 388.8 R
-1.164(ersion for which there will be an indi)-.15 F 1.163
-(vidual shopt option for the pre)-.25 F 1.163(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.613
-(The follo)108 417.6 R 1.613(wing table describes the beha)-.25 F 1.613
+(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.114(etting. The)-4.113 F F3(compat)108 429.6 Q F1(NN)A
-F0 1.186(tag is used as shorthand for setting the compatibility le)3.686
-F -.15(ve)-.25 G 3.686(lt).15 G(o)-3.686 E F1(NN)3.686 E F0 1.186
-(using one of the follo)3.686 F(wing)-.25 E 3.806(mechanisms. F)108
-441.6 R 1.306(or v)-.15 F 1.306
+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.807(lm).15 G 1.307(ay be set using the corresponding)-3.807 F F3
-(compat)108 453.6 Q F1(NN)A F0 .502(shopt option.)3.002 F -.15(Fo)5.502
+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 F4 -.27(BA)3.002 G(SH_COMP).27 E -.855(AT)-.666 G F0 -.25(va)
+-.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 465.6 Q(ersions.)-.15 E F3
-(compat31)108 482.4 Q F0<83>144 494.4 Q(quoting the rhs of the)180 494.4
-Q F3([[)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 F3(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 .018
-(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.517(dt)
-.15 G .017(he interrupt, so in-)-2.517 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 F3(compat40)108 564 Q F0<83>144 576
-Q(the)180 576 Q F3(<)2.673 E F0(and)2.673 E F3(>)2.673 E F0 .173
-(operators to the)2.673 F F3([[)2.673 E F0 .173
+(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
-.068(ing strings; the)180 588 R 2.568(yu)-.15 G .068(se ASCII ordering.)
--2.568 F .068(Bash v)5.068 F .067
-(ersions prior to bash-4.1 use ASCII collation)-.15 F(and)180 600 Q F1
-(str)4.742 E(cmp)-.37 E F0 1.902
-(\(3\); bash-4.1 and later use the current locale').19 F 4.403(sc)-.55 G
-1.903(ollation sequence and)-4.403 F F1(str)4.743 E(-)-.2 E(coll)180 612
-Q F0(\(3\).).51 E F3(compat41)108 628.8 Q F0<83>144 640.8 Q(in)180 640.8
-Q F1(posix)3.79 E F0(mode,)3.79 E F3(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 F1(posix)2.708 E F0 .208
-(mode, the parser requires that an e)2.708 F -.15(ve)-.25 G 2.708(nn).15
-G .208(umber of single quotes occur in the)-2.708 F F1(wor)2.709 E(d)
--.37 E F0 .282(portion of a double-quoted parameter e)180 676.8 R .282
-(xpansion and treats them specially)-.15 F 2.781(,s)-.65 G 2.781(ot)
--2.781 G .281(hat charac-)-2.781 F(ters within the single quotes are co\
-nsidered quoted \(this is POSIX interpretation 221\))180 688.8 Q F3
-(compat42)108 705.6 Q F0<83>144 717.6 Q 1.055(the replacement string in\
- double-quoted pattern substitution does not under)180 717.6 R 1.056
-(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.0)72 768 Q(2004 Apr 20)
-149.565 E(25)198.725 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<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.52 E(d)-.37 E F0
-.02(portion of a)2.52 F .017(double-quoted parameter e)180 96 R .017
+.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
-.999(cial character \(this is part of POSIX interpretation 221\); in la\
-ter v)180 108 R .998(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.07
-(the shell does not print a w)180 148.8 R 1.071
-(arning message if an attempt is made to use a quoted com-)-.1 F .249
-(pound assignment as an ar)180 160.8 R .248
-(gument to declare \(declare -a foo='\(1 2\)'\). Later v)-.18 F .248
-(ersions w)-.15 F(arn)-.1 E(that this usage is deprecated)180 172.8 Q
-<83>144 184.8 Q -.1(wo)180 184.8 S .5(rd e).1 F .501
+.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 196.8 S
+(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 208.8 Q(xit\))-.15 E
-<83>144 220.8 Q .354(when e)180 220.8 R -.15(xe)-.15 G .354
-(cuting a shell function, the loop state \(while/until/etc.\)).15 F .355
-(is not reset, so)5.354 F F2(br)2.855 E(eak)-.18 E F0(or)2.855 E F2
-(continue)180 232.8 Q F0 .052
+(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.553 F .052(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.219(yc)-.15 G
-.719(an e)-3.219 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.635(as)180 297.6 S .135(ubshell inherits loops from its parent conte)
--2.635 F .135(xt, so)-.15 F F2(br)2.635 E(eak)-.18 E F0(or)2.635 E F2
-(continue)2.634 E F0 .134(will cause the sub-)2.634 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 .618(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 .619(utes con-)-.2 F .12
-(tinue to af)180 333.6 R .12(fect v)-.25 F .119
-(ariables with the same name in the calling en)-.25 F .119(vironment e)
--.4 F -.15(ve)-.25 G 2.619(ni).15 G 2.619(ft)-2.619 G .119(he shell is)
--2.619 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.019(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.018
-(rts to the method from).25 F .732(bash-5.0 and pre)180 398.4 R .732
-(vious v)-.25 F .733
+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 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
-.696(If the command hash table is empty)180 422.4 R 3.196(,b)-.65 G .696
-(ash v)-3.196 F .695(ersions prior to bash-5.1 printed an informa-)-.15
-F 1.32(tional message to that ef)180 434.4 R 1.321(fect, e)-.25 F -.15
+-.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 446.4 Q F2<ad6c>2.5 E F0
-(option is supplied.)2.5 E/F4 10.95/Times-Bold@0 SF(SEE ALSO)72 463.2 Q
-F0(bash\(1\), sh\(1\))108 475.2 Q(GNU Bash 5.0)72 768 Q(2004 Apr 20)
-149.565 E(26)198.725 E 0 Cg EP
+(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
index b602a70220e3bf73dce3bb5cc65f5466ee00ef82..96845d0c2fd4d78ebd4edd9975a26f195cf412cd 100644 (file)
@@ -48,11 +48,12 @@ R\bRE\bES\bST\bTR\bRI\bIC\bCT\bTE\bED\bD S\bSH\bHE\bEL\bLL\bL
 
        +\bo      specifying the -\b-p\bp option to the c\bco\bom\bmm\bma\ban\bnd\bd builtin command
 
-       +\bo      turning off restricted mode with s\bse\bet\bt +\b+r\br or s\bse\bet\bt +\b+o\bo r\bre\bes\bst\btr\bri\bic\bct\bte\bed\bd.
+       +\bo      turning  off  restricted  mode  with  s\bse\bet\bt  +\b+r\br  or  s\bsh\bho\bop\bpt\bt  -\b-u\bu r\bre\be-\b-
+              s\bst\btr\bri\bic\bct\bte\bed\bd_\b_s\bsh\bhe\bel\bll\bl.
 
        These restrictions are enforced after any startup files are read.
 
-       When  a  command  that is found to be a shell script is executed, r\brb\bba\bas\bsh\bh
+       When a command that is found to be a shell script  is  executed,  r\brb\bba\bas\bsh\bh
        turns off any restrictions in the shell spawned to execute the script.
 
 S\bSE\bEE\bE A\bAL\bLS\bSO\bO
@@ -60,4 +61,4 @@ S\bSE\bEE\bE A\bAL\bLS\bSO\bO
 
 
 
-GNU Bash-4.0                      2004 Apr 20                         RBASH(1)
+Bash-5.2                       2021 November 22                       RBASH(1)
index 56e38fd030a516f3293f66a741d93bc1bb9fd396..39309b4cb9f0f66ff25417a4afbcbf21c5f7007e 100644 (file)
@@ -1,4 +1,4 @@
-.TH RBASH 1 "2004 Apr 20" "GNU Bash-4.0"
+.TH RBASH 1 "2021 November 22" "Bash-5.2"
 .SH NAME
 rbash \- restricted bash, see \fBbash\fR(1)
 .SH RESTRICTED SHELL
index 45c9f66be158874bf23eb3fd15dc98cf5df4b18c..06fe883dcf03862e0654ae422951be9a8ecb0b25 100644 (file)
@@ -1,6 +1,6 @@
 %!PS-Adobe-3.0
 %%Creator: groff version 1.22.4
-%%CreationDate: Wed Nov 18 15:13:06 2020
+%%CreationDate: Mon Sep 19 12:02:42 2022
 %%DocumentNeededResources: font Times-Roman
 %%+ font Times-Bold
 %%DocumentSuppliedResources: procset grops 1.22 4
@@ -276,15 +276,15 @@ F2<ad66>2.5 E F0(and)2.5 E F2<ad64>2.5 E F0(options to the)2.5 E F2
 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(set +o r)2.5 E(estricted)-.18 E F0(.)A
-(These restrictions are enforced after an)108 412.8 Q 2.5(ys)-.15 G
+(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(GNU Bash-4.0)72 768 Q
-(2004 Apr 20)148.735 E(1)203.725 E 0 Cg EP
+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
index 561a6d0e1304064796037bdb7cb7155b536ed7ba..175aa07a9418941295738996ee71a134c7512599 100644 (file)
@@ -1,11 +1,11 @@
 @ignore
-Copyright (C) 1988-2020 Free Software Foundation, Inc.
+Copyright (C) 1988-2022 Free Software Foundation, Inc.
 @end ignore
 
-@set LASTCHANGE Thu Oct 29 16:18:54 EDT 2020
+@set LASTCHANGE Mon Sep 19 11:13:51 EDT 2022
 
-@set EDITION 5.1
-@set VERSION 5.1
+@set EDITION 5.2
+@set VERSION 5.2
 
-@set UPDATED 29 October 2020
-@set UPDATED-MONTH October 2020
+@set UPDATED 19 September 2022
+@set UPDATED-MONTH September 2022
diff --git a/error.c b/error.c
index 7df4b146ccdd6f8ddc5535594553f90c7c6ccd2e..3e7a2d6170df22c56d115a76637714c3e42bb959 100644 (file)
--- a/error.c
+++ b/error.c
@@ -1,6 +1,6 @@
 /* error.c -- Functions for handling errors. */
 
-/* Copyright (C) 1993-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1993-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -294,6 +294,32 @@ internal_inform (format, va_alist)
   va_end (args);
 }
 
+void
+#if defined (PREFER_STDARG)
+internal_debug (const char *format, ...)
+#else
+internal_debug (format, va_alist)
+     const char *format;
+     va_dcl
+#endif
+{
+#ifdef DEBUG
+  va_list args;
+
+  error_prolog (1);
+  fprintf (stderr, _("DEBUG warning: "));
+
+  SH_VA_START (args, format);
+
+  vfprintf (stderr, format, args);
+  fprintf (stderr, "\n");
+
+  va_end (args);
+#else
+  return;
+#endif
+}
+
 void
 #if defined (PREFER_STDARG)
 sys_error (const char *format, ...)
diff --git a/error.h b/error.h
index 30828095b13b51eabbc59a2d406b35bdcd3ade5f..785c1deb5a9f80ab39eee3d5d02aea3af4eb6293 100644 (file)
--- a/error.h
+++ b/error.h
@@ -50,6 +50,9 @@ extern void internal_error PARAMS((const char *, ...))  __attribute__((__format_
 /* Report an internal warning. */
 extern void internal_warning PARAMS((const char *, ...))  __attribute__((__format__ (printf, 1, 2)));
 
+/* Report an internal warning for debugging purposes. */
+extern void internal_debug PARAMS((const char *, ...))  __attribute__((__format__ (printf, 1, 2)));
+
 /* Report an internal informational notice. */
 extern void internal_inform PARAMS((const char *, ...))  __attribute__((__format__ (printf, 1, 2)));
 
@@ -70,4 +73,10 @@ extern void err_badarraysub PARAMS((const char *));
 extern void err_unboundvar PARAMS((const char *));
 extern void err_readonly PARAMS((const char *));
 
+#ifdef DEBUG
+#  define INTERNAL_DEBUG(x)    internal_debug x
+#else
+#  define INTERNAL_DEBUG(x)
+#endif
+
 #endif /* !_ERROR_H_ */
diff --git a/eval.c b/eval.c
index 1d967da1f8978bb1a6b4206c3519d147e821c497..17fbf7366b4de3beab84f17e8d037bc5f0a61ae6 100644 (file)
--- a/eval.c
+++ b/eval.c
@@ -1,6 +1,6 @@
 /* eval.c -- reading and evaluating commands. */
 
-/* Copyright (C) 1996-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1996-2022 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -90,12 +90,13 @@ reader_loop ()
          switch (code)
            {
              /* Some kind of throw to top_level has occurred. */
-           case FORCE_EOF:
            case ERREXIT:
+             if (exit_immediately_on_error)
+               reset_local_contexts ();        /* not in a function */
+           case FORCE_EOF:
            case EXITPROG:
+           case EXITBLTIN:
              current_command = (COMMAND *)NULL;
-             if (exit_immediately_on_error)
-               variable_context = 0;   /* not in a function */
              EOF_Reached = EOF;
              goto exec_done;
 
@@ -139,7 +140,7 @@ reader_loop ()
        {
          if (interactive_shell == 0 && read_but_dont_execute)
            {
-             set_exit_status (EXECUTION_SUCCESS);
+             set_exit_status (last_command_exit_value);
              dispose_command (global_command);
              global_command = (COMMAND *)NULL;
            }
index 7f60563bd80ed15137883d86b203008eec7144dc..850c614857ac6f1d9c2cea93752369257ab95b62 100644 (file)
@@ -427,7 +427,7 @@ NOTES
           bypass the shim creation and just source in the function's file
           directly. For a few calls, the overhead of repeatedly running the
           shim is not expensive, but in a tight loop, it might be. Caveat
-          Programer.
+          Programmer.
 
         o Although the number of functions in the environment does not change
           by using 'autoload', the amount of memory they take up can be greatly
@@ -453,7 +453,7 @@ NOTES
           the simplest to implement for -p and -s operations that are not
           heavily used.
 
-          As a consquence of this (and other reasons), the AUTOLOAD* namespace
+          As a consequence of this (and other reasons), the AUTOLOAD* namespace
           is reserved for autoloading. Make sure you check any functions that
           you bring under autoload for use of variables or functions that start
           with AUTOLOAD and change them.
index 54c8488c9e18a5901d7e899c477f0ffc2278ae2f..6671ca85005f7a956e7745507d53f540dbbf09d7 100644 (file)
@@ -1,4 +1,4 @@
-# C-shell compatibilty package.
+# C-shell compatibility package.
 # setenv VAR VALUE
 function setenv ()
 {
index be46121bd5414955b2174a2c72192d91a85466a5..956f018933f861ff157841f42247a778f04ba909 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Simple makefile for the sample loadable builtins
 #
-# Copyright (C) 1996-2019 Free Software Foundation, Inc.
+# Copyright (C) 1996-2022 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
@@ -58,6 +58,7 @@ host_os = @host_os@
 host_cpu = @host_cpu@
 host_vendor = @host_vendor@
 
+STYLE_CFLAGS = @STYLE_CFLAGS@
 CFLAGS = @CFLAGS@
 LOCAL_CFLAGS = @LOCAL_CFLAGS@
 DEFS = @DEFS@
@@ -76,7 +77,7 @@ INTL_BUILDDIR = ${LIBBUILD}/intl
 INTL_INC = @INTL_INC@
 LIBINTL_H = @LIBINTL_H@
 
-CCFLAGS = $(DEFS) $(LOCAL_DEFS) $(LOCAL_CFLAGS) $(CPPFLAGS) $(CFLAGS)
+CCFLAGS = $(DEFS) $(LOCAL_DEFS) $(LOCAL_CFLAGS) $(CPPFLAGS) $(CFLAGS) $(STYLE_CFLAGS)
 
 #
 # These values are generated for configure by ${topdir}/support/shobj-conf.
@@ -103,8 +104,8 @@ INC = -I. -I.. -I$(topdir) -I$(topdir)/lib -I$(topdir)/builtins -I${srcdir} \
 ALLPROG = print truefalse sleep finfo logname basename dirname fdflags \
          tty pathchk tee head mkdir rmdir mkfifo mktemp printenv id whoami \
          uname sync push ln unlink realpath strftime mypid setpgid seq rm \
-         accept csv cut
-OTHERPROG = necho hello cat pushd stat asort
+         accept csv dsv cut stat getconf
+OTHERPROG = necho hello cat pushd asort
 
 all:   $(SHOBJ_STATUS)
 
@@ -191,6 +192,9 @@ head:       head.o
 printenv:      printenv.o
        $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ printenv.o $(SHOBJ_LIBS)
 
+getconf:       getconf.o
+       $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ getconf.o $(SHOBJ_LIBS)
+
 id:    id.o
        $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ id.o $(SHOBJ_LIBS)
 
@@ -218,6 +222,9 @@ realpath:   realpath.o
 csv:   csv.o
        $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ csv.o $(SHOBJ_LIBS)
 
+dsv:   dsv.o
+       $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ dsv.o $(SHOBJ_LIBS)
+
 cut:   cut.o
        $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ cut.o $(SHOBJ_LIBS)
 
@@ -245,7 +252,7 @@ pushd.c:    ${topdir}/builtins/pushd.def
 
 pushd.o:       pushd.c
        $(RM) $@
-       $(SHOBJ_CC) -DHAVE_CONFIG_H -DPUSHD_AND_POPD -DLOADABLE_BUILTIN $(SHOBJ_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(INC) -c -o $@ $<
+       $(SHOBJ_CC) -Wno-format-security -DHAVE_CONFIG_H -DPUSHD_AND_POPD -DLOADABLE_BUILTIN $(SHOBJ_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(INC) -c -o $@ $<
 
 pushd: pushd.o
        $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ pushd.o $(SHOBJ_LIBS)
@@ -258,7 +265,7 @@ mostlyclean:        clean
        -( cd perl && ${MAKE} ${MFLAGS} $@ )
 
 distclean maintainer-clean: clean
-       $(RM) Makefile Makefile.inc pushd.c
+       $(RM) Makefile Makefile.inc Makefile.sample pushd.c
        -( cd perl && ${MAKE} ${MFLAGS} $@ )
 
 installdirs:
@@ -266,6 +273,7 @@ installdirs:
 
 install-dev:   installdirs
        @$(INSTALL_DATA) Makefile.inc $(DESTDIR)$(loadablesdir)/Makefile.inc
+       @$(INSTALL_DATA) Makefile.sample $(DESTDIR)$(loadablesdir)/Makefile.sample
        @$(INSTALL_DATA) $(srcdir)/loadables.h $(DESTDIR)$(loadablesdir)/loadables.h
        @( cd $(BUILD_DIR) && ${MAKE} ${MFLAGS} DESTDIR="$(DESTDIR)" install-headers)
 
@@ -277,7 +285,8 @@ install-supported:  all installdirs install-dev
        done
 
 uninstall-dev:
-       -$(RM) $(DESTDIR)$(loadablesdir)/Makefile.inc $(DESTDIR)$(loadablesdir)/loadables.h
+       -$(RM) $(DESTDIR)$(loadablesdir)/Makefile.inc $(DESTDIR)$(loadablesdir)/Makefile.sample
+       -$(RM) $(DESTDIR)$(loadablesdir)/loadables.h
        -( cd $(BUILD_DIR) && ${MAKE} ${MFLAGS} DESTDIR="$(DESTDIR)" uninstall-headers)
 
 uninstall-supported:   uninstall-dev
@@ -294,6 +303,7 @@ truefalse.o: truefalse.c
 accept.o: accept.c
 sleep.o: sleep.c
 finfo.o: finfo.c
+getconf.o: getconf.c getconf.h
 logname.o: logname.c
 basename.o: basename.c
 dirname.o: dirname.c
@@ -306,6 +316,7 @@ necho.o: necho.c
 hello.o: hello.c
 cat.o: cat.c
 csv.o: csv.c
+dsv.o: dsv.c
 cut.o: cut.c
 printenv.o: printenv.c
 id.o: id.c
index 8b419a78de2a3fd81c02e6a3172a2ceaaa227be1..ee3c30357770e46daebb8341c18197ee4161508c 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Sample makefile for bash loadable builtin development
 #
-# Copyright (C) 2015 Free Software Foundation, Inc.     
+# Copyright (C) 2015-2022 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
@@ -99,10 +99,3 @@ INC = -I$(headersdir) -I$(headersdir)/include -I$(headersdir)/builtins
 
 .c.o:
        $(SHOBJ_CC) $(SHOBJ_CFLAGS) $(CCFLAGS) $(INC) -c -o $@ $<
-
-all:   example
-
-example:       example.o
-       $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ example.o $(SHOBJ_LIBS)
-
-example.o: example.c
diff --git a/examples/loadables/Makefile.sample.in b/examples/loadables/Makefile.sample.in
new file mode 100644 (file)
index 0000000..fe9b06a
--- /dev/null
@@ -0,0 +1,44 @@
+#
+# Sample makefile for bash loadable builtin development
+#
+# Copyright (C) 2022 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/>.
+#
+
+# these should match the ones in Makefile.in (for the make install target)
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+libdir = @libdir@
+
+# ${loadablesdir} is where the example loadable builtins and data files
+# are installed (make install target in Makefile.in)
+
+loadablesdir = @loadablesdir@
+DESTDIR =
+
+# include Makefile.inc for all boilerplate definitions
+
+include $(DESTDIR)$(loadablesdir)/Makefile.inc
+
+# here, `example' is the name of the shared object
+# replace `example' with the appropriate filename
+
+all:   example
+
+example:       example.o
+       $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ example.o $(SHOBJ_LIBS)
+
+example.o: example.c
index 6820c9604272748a5e3152fc6ddcdbf227f66837..c729a6a6be439bbeae17eecb15f5a7e80bce5e03 100644 (file)
@@ -1,11 +1,13 @@
 Some examples of ready-to-dynamic-load builtins.  Most of the
 examples given are reimplementations of standard commands whose
-execution time is dominated by process startup time.  The
+execution time is dominated by process startup time.  Some
 exceptions are sleep, which allows you to sleep for fractions
 of a second, finfo, which provides access to the rest of the
 elements of the `stat' structure that `test' doesn't let you
-see, and pushd/popd/dirs, which allows you to compile them out
-of the shell.
+see, csv, which allows you to manipulate data from comma-separated
+values files, fdflags, which lets you change the flags associated
+with one of the shell's file descriptors, and pushd/popd/dirs, which
+allows you to compile them out of the shell.
 
 All of the new builtins in ksh93 that bash didn't already have
 are included here, as is the ksh `print' builtin.
@@ -40,6 +42,8 @@ without having to search for the right CFLAGS and LDFLAGS.
 
 basename.c     Return non-directory portion of pathname.
 cat.c          cat(1) replacement with no options - the way cat was intended.
+csv.c          Process a line of csv data and store it in an indexed array.
+cut.c          Cut out selected portions of each line of a file.
 dirname.c      Return directory portion of pathname.
 fdflags.c      Change the flag associated with one of bash's open file descriptors.
 finfo.c                Print file info.
@@ -52,7 +56,9 @@ logname.c     Print login name of current user.
 Makefile.in    Simple makefile for the sample loadable builtins.
 Makefile.inc.in        Sample makefile to use for loadable builtin development.
 mkdir.c                Make directories.
-mypid.c                Add $MYPID variable, demonstrate use of unload hook functio.n
+mkfifo.c       Create named pipes.
+mktemp.c       Make unique temporary file name.
+mypid.c                Add $MYPID variable, demonstrate use of unload hook function.
 necho.c                echo without options or argument interpretation.
 pathchk.c      Check pathnames for validity and portability.
 print.c                Loadable ksh-93 style print builtin.
index 54cf38c8ab4b409d8778dd86b6c24e208b9623ee..ff98423dd0b256a79cd6d033abb381705daac868 100644 (file)
@@ -30,6 +30,7 @@
 #include "bashtypes.h"
 #include <errno.h>
 #include <time.h>
+#include <limits.h>
 #include "typemax.h"
 
 #include <sys/socket.h>
@@ -44,11 +45,10 @@ int
 accept_builtin (list)
      WORD_LIST *list;
 {
-  WORD_LIST *l;
   SHELL_VAR *v;
   intmax_t iport;
   int opt;
-  char *tmoutarg, *fdvar, *rhostvar, *rhost;
+  char *tmoutarg, *fdvar, *rhostvar, *rhost, *bindaddr;
   unsigned short uport;
   int servsock, clisock;
   struct sockaddr_in server, client;
@@ -56,13 +56,16 @@ accept_builtin (list)
   struct timeval timeval;
   struct linger linger = { 0, 0 };
 
-  rhostvar = tmoutarg = fdvar = rhost = (char *)NULL;
+  rhostvar = tmoutarg = fdvar = rhost = bindaddr = (char *)NULL;
 
   reset_internal_getopt ();
-  while ((opt = internal_getopt (list, "r:t:v:")) != -1)
+  while ((opt = internal_getopt (list, "b:r:t:v:")) != -1)
     {
       switch (opt)
        {
+       case 'b':
+         bindaddr = list_optarg;
+         break;
        case 'r':
          rhostvar = list_optarg;
          break;
@@ -125,12 +128,11 @@ accept_builtin (list)
   memset ((char *)&server, 0, sizeof (server));
   server.sin_family = AF_INET;
   server.sin_port = htons(uport);
-  server.sin_addr.s_addr = htonl(INADDR_ANY);
+  server.sin_addr.s_addr = bindaddr ? inet_addr (bindaddr) : htonl(INADDR_ANY);
 
-  if (bind (servsock, (struct sockaddr *)&server, sizeof (server)) < 0)
+  if (server.sin_addr.s_addr == INADDR_NONE)
     {
-      builtin_error ("socket bind failure: %s", strerror (errno));
-      close (servsock);
+      builtin_error ("invalid address: %s", strerror (errno));
       return (EXECUTION_FAILURE);
     }
 
@@ -138,6 +140,13 @@ accept_builtin (list)
   setsockopt (servsock, SOL_SOCKET, SO_REUSEADDR, (void *)&opt, sizeof (opt));
   setsockopt (servsock, SOL_SOCKET, SO_LINGER, (void *)&linger, sizeof (linger));
 
+  if (bind (servsock, (struct sockaddr *)&server, sizeof (server)) < 0)
+    {
+      builtin_error ("socket bind failure: %s", strerror (errno));
+      close (servsock);
+      return (EXECUTION_FAILURE);
+    }
+
   if (listen (servsock, 1) < 0)
     {
       builtin_error ("listen failure: %s", strerror (errno));
@@ -154,12 +163,12 @@ accept_builtin (list)
 
       opt = select (servsock+1, &iofds, 0, 0, &timeval);
       if (opt < 0)
-        builtin_error ("select failure: %s", strerror (errno));
+       builtin_error ("select failure: %s", strerror (errno));
       if (opt <= 0)
-        {
-          close (servsock);
-          return (EXECUTION_FAILURE);
-        }
+       {
+         close (servsock);
+         return (EXECUTION_FAILURE);
+       }
     }
 
   clientlen = sizeof (client);
@@ -193,7 +202,7 @@ accept_bind_variable (varname, intval)
   char ibuf[INT_STRLEN_BOUND (int) + 1], *p;
 
   p = fmtulong (intval, 10, ibuf, sizeof (ibuf), 0);
-  v = builtin_bind_variable (varname, p, 0);
+  v = builtin_bind_variable (varname, p, 0);           /* XXX */
   if (v == 0 || readonly_p (v) || noassign_p (v))
     builtin_error ("%s: cannot set variable", varname);
   return (v != 0);
@@ -205,6 +214,8 @@ char *accept_doc[] = {
        "This builtin allows a bash script to act as a TCP/IP server.",
        "",
        "Options, if supplied, have the following meanings:",
+       "    -b address    use ADDRESS as the IP address to listen on; the",
+       "                  default is INADDR_ANY",
        "    -t timeout    wait TIMEOUT seconds for a connection. TIMEOUT may",
        "                  be a decimal number including a fractional portion",
        "    -v varname    store the numeric file descriptor of the connected",
@@ -229,6 +240,6 @@ struct builtin accept_struct = {
        accept_builtin,         /* function implementing the builtin */
        BUILTIN_ENABLED,        /* initial flags for builtin */
        accept_doc,             /* array of long documentation strings. */
-       "accept [-t timeout] [-v varname] [-r addrvar ] port",          /* usage synopsis; becomes short_doc */
+       "accept [-b address] [-t timeout] [-v varname] [-r addrvar ] port",             /* usage synopsis; becomes short_doc */
        0                       /* reserved for internal use */
 };
index be99c4cd997ae09ac115da6b38cf49ed1da808ba..71685f33b5df7051817dd2017e999c5210ce40a0 100644 (file)
@@ -5,7 +5,7 @@
  */
 
 /*
-   Copyright (C) 1999-2009 Free Software Foundation, Inc.
+   Copyright (C) 1999-2009,2022 Free Software Foundation, Inc.
 
    This file is part of GNU Bash.
    Bash is free software: you can redistribute it and/or modify
@@ -36,13 +36,25 @@ extern char *strerror ();
 extern char **make_builtin_argv ();
 
 static int
-fcopy(fd)
+fcopy(fd, fn)
 int    fd;
+char   *fn;
 {
-       char    buf[1024], *s;
+       char    buf[4096], *s;
        int     n, w, e;
 
        while (n = read(fd, buf, sizeof (buf))) {
+               if (n < 0) {
+                       e = errno;
+                       write(2, "cat: read error: ", 18);
+                       write(2, fn, strlen(fn));
+                       write(2, ": ", 2);
+                       s = strerror(e);
+                       write(2, s, strlen(s));
+                       write(2, "\n", 1);
+                       return 1;
+               }
+               QUIT;
                w = write(1, buf, n);
                if (w != n) {
                        e = errno;
@@ -52,6 +64,7 @@ int   fd;
                        write(2, "\n", 1);
                        return 1;
                }
+               QUIT;
        }
        return 0;
 }
@@ -65,9 +78,10 @@ char **argv;
        char    *s;
 
        if (argc == 1)
-               return (fcopy(0));
+               return (fcopy(0, "standard input"));
 
        for (i = r = 1; i < argc; i++) {
+               QUIT;
                if (argv[i][0] == '-' && argv[i][1] == '\0')
                        fd = 0;
                else {
@@ -82,10 +96,11 @@ char        **argv;
                                continue;
                        }
                }
-               r = fcopy(fd);
+               r = fcopy(fd, argv[i]);
                if (fd != 0)
                        close(fd);
        }
+       QUIT;
        return (r);
 }
 
@@ -97,6 +112,7 @@ WORD_LIST *list;
        int     c, r;
 
        v = make_builtin_argv(list, &c);
+       QUIT;
        r = cat_main(c, v);
        free(v);
 
index 11228f1ab30daa8ea7d83d6aa85991079aa99249..75b37725733ee63ba61f019a104bf17aed9e9b98 100644 (file)
@@ -39,9 +39,9 @@
    element of array variable CSV, starting at index 0. The format of LINE is
    as described in RFC 4180. */
 static int
-csvsplit (csv, line)
+csvsplit (csv, line, dstring)
      SHELL_VAR *csv;
-     char *line;
+     char *line, *dstring;
 {
   arrayind_t ind;
   char *field, *prev, *buf, *xbuf;
@@ -67,7 +67,7 @@ csvsplit (csv, line)
                buf[b++] = *field++;    /* skip double quote */
              else if (qstate == DQUOTE && *field == '"')
                qstate = NQUOTE;
-             else if (qstate == NQUOTE && *field == ',')
+             else if (qstate == NQUOTE && *field == *dstring)
                break;
              else
                /* This copies any text between a closing double quote and the
@@ -80,7 +80,7 @@ csvsplit (csv, line)
       else
        {
          buf = prev;
-         field = prev + strcspn (prev, ",");
+         field = prev + strcspn (prev, dstring);
        }
 
       delim = *field;
@@ -91,10 +91,10 @@ csvsplit (csv, line)
 
       *field = delim;
 
-      if (delim == ',')
+      if (delim == *dstring)
        prev = field + 1;
     }
-  while (delim == ',');
+  while (delim == *dstring);
 
   if (xbuf)
     free (xbuf);
@@ -165,7 +165,7 @@ csv_builtin (list)
   if (csvstring == 0 || *csvstring == 0)
     return (EXECUTION_SUCCESS);
 
-  opt = csvsplit (v, csvstring);
+  opt = csvsplit (v, csvstring, ",");
   /* Maybe do something with OPT here, it's the number of fields */
 
   return (rval);
index ad9a83357a266d1d4eb27092756b95545b3dc4ef..48f80047d1f5e66e1439f864909421e422a0d02f 100644 (file)
@@ -415,10 +415,16 @@ cutfile (v, list, ops)
 #endif
 
       while ((n = zgetline (fd, &line, &llen, '\n', unbuffered_read)) != -1)
-         cutline (v, line, ops);               /* can modify line */
+       {
+         QUIT;
+         if (line[n] == '\n')
+           line[n] = '\0';             /* cutline expects no newline terminator */
+         cutline (v, line, ops);       /* can modify line */
+       }
       if (fd > 0)
        close (fd);
 
+      QUIT;
       if (l)
        l = l->next;
     }
diff --git a/examples/loadables/dsv.c b/examples/loadables/dsv.c
new file mode 100644 (file)
index 0000000..70e59cb
--- /dev/null
@@ -0,0 +1,300 @@
+/* dsv - process a line of delimiter-separated data and populate an indexed
+        array with the fields */
+
+/*
+   Copyright (C) 2022 Free Software Foundation, Inc.
+
+   Bash is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+
+   Bash is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with Bash.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/* See Makefile for compilation details. */
+
+#include <config.h>
+
+#if defined (HAVE_UNISTD_H)
+#  include <unistd.h>
+#endif
+#include "bashansi.h"
+#include <stdio.h>
+
+#include "loadables.h"
+
+#define DSV_ARRAY_DEFAULT      "DSV"
+
+#define NQUOTE 0
+#define DQUOTE 1
+#define SQUOTE 2
+
+#define F_SHELLQUOTE   0x01
+#define F_GREEDY       0x02
+#define F_PRESERVE     0x04
+
+/* Split LINE into delimiter-separated fields, storing each field into a
+   separate element of array variable DSV, starting at index 0. The format
+   of LINE is delimiter-separated values. By default, this splits lines of
+   CSV data as described in RFC 4180. If *DSTRING is any other value than
+   ',', this uses that character as a field delimiter. Pass F_SHELLQUOTE in
+   FLAGS to understand shell-like double-quoting and backslash-escaping in
+   double quotes instead of the "" CSV behavior, and shell-like single quotes.
+   Pass F_GREEDY in FLAGS to consume multiple leading and trailing instances
+   of *DSTRING and consecutive instances of *DSTRING in LINE without creating
+   null fields. If you want to preserve the quote characters in the generated
+   fields, pass F_PRESERVE; by default, this removes them. */
+static int
+dsvsplit (dsv, line, dstring, flags)
+     SHELL_VAR *dsv;
+     char *line, *dstring;
+     int flags;
+{
+  arrayind_t ind;
+  char *field, *prev, *buf, *xbuf;
+  int delim, qstate;
+  int b, rval;
+
+  xbuf = 0;
+  ind = 0;
+  field = prev = line;
+
+  /* If we want a greedy split, consume leading instances of *DSTRING */
+  if (flags & F_GREEDY)
+    {
+      while (*prev == *dstring)
+       prev++;
+      field = prev;
+    }
+
+  do
+    {
+      if (*prev == '"')
+       {
+         if (xbuf == 0)
+           xbuf = xmalloc (strlen (prev) + 1);
+         buf = xbuf;
+         b = 0;
+         if (flags & F_PRESERVE)
+           buf[b++] = *prev;
+         qstate = DQUOTE;
+         for (field = ++prev; *field; field++)
+           {
+             if (qstate == DQUOTE && *field == '"' && field[1] == '"' && (flags & F_SHELLQUOTE) == 0)
+               buf[b++] = *field++;    /* skip double quote */
+             else if (qstate == DQUOTE && (flags & F_SHELLQUOTE) && *field == '\\' && strchr (slashify_in_quotes, field[1]) != 0)
+               buf[b++] = *++field;    /* backslash quoted double quote */
+             else if (qstate == DQUOTE && *field == '"')
+               {
+                 qstate = NQUOTE;
+                 if (flags & F_PRESERVE)
+                   buf[b++] = *field;
+               }
+             else if (qstate == NQUOTE && *field == *dstring)
+               break;
+             else
+               /* This copies any text between a closing double quote and the
+                  delimiter. If you want to change that, make sure to do the
+                  copy only if qstate == DQUOTE. */
+               buf[b++] = *field;
+           }
+         buf[b] = '\0';
+       }
+      else if ((flags & F_SHELLQUOTE) && *prev == '\'')
+       {
+         if (xbuf == 0)
+           xbuf = xmalloc (strlen (prev) + 1);
+         buf = xbuf;
+         b = 0;
+         if (flags & F_PRESERVE)
+           buf[b++] = *prev;
+         qstate = SQUOTE;
+         for (field = ++prev; *field; field++)
+           {
+             if (qstate == SQUOTE && *field == '\'')
+               {
+                 qstate = NQUOTE;
+                 if (flags & F_PRESERVE)
+                   buf[b++] = *field;
+               }
+             else if (qstate == NQUOTE && *field == *dstring)
+               break;
+             else
+               /* This copies any text between a closing single quote and the
+                  delimiter. If you want to change that, make sure to do the
+                  copy only if qstate == SQUOTE. */
+               buf[b++] = *field;
+           }
+         buf[b] = '\0';
+       }
+      else
+       {
+         buf = prev;
+         field = prev + strcspn (prev, dstring);
+       }
+
+      delim = *field;
+      *field = '\0';
+
+      if ((flags & F_GREEDY) == 0 || buf[0])
+       {
+         bind_array_element (dsv, ind, buf, 0);
+         ind++;
+       }
+
+      *field = delim;
+
+      if (delim == *dstring)
+       prev = field + 1;
+    }
+  while (delim == *dstring);
+
+  if (xbuf)
+    free (xbuf);
+
+  return (rval = ind);                         /* number of fields */
+}
+
+int
+dsv_builtin (list)
+     WORD_LIST *list;
+{
+  int opt, rval, flags;
+  char *array_name, *dsvstring, *delims;
+  SHELL_VAR *v;
+
+  array_name = 0;
+  rval = EXECUTION_SUCCESS;
+
+  delims = ",";
+  flags = 0;
+
+  reset_internal_getopt ();
+  while ((opt = internal_getopt (list, "a:d:Sgp")) != -1)
+    {
+      switch (opt)
+       {
+       case 'a':
+         array_name = list_optarg;
+         break;
+       case 'd':
+         delims = list_optarg;
+         break;
+       case 'S':
+         flags |= F_SHELLQUOTE;
+         break;
+       case 'g':
+         flags |= F_GREEDY;
+         break;
+       case 'p':
+         flags |= F_PRESERVE;
+         break;
+       CASE_HELPOPT;
+       default:
+         builtin_usage ();
+         return (EX_USAGE);
+       }
+    }
+  list = loptend;
+
+  if (array_name == 0)
+    array_name = DSV_ARRAY_DEFAULT;
+
+  if (legal_identifier (array_name) == 0)
+    {
+      sh_invalidid (array_name);
+      return (EXECUTION_FAILURE);
+    }
+
+  if (list == 0)
+    {
+      builtin_error ("dsv string argument required");
+      return (EX_USAGE);
+    }
+
+  v = find_or_make_array_variable (array_name, 1);
+  if (v == 0 || readonly_p (v) || noassign_p (v))
+    {
+      if (v && readonly_p (v))
+       err_readonly (array_name);
+      return (EXECUTION_FAILURE);
+    }
+  else if (array_p (v) == 0)
+    {
+      builtin_error ("%s: not an indexed array", array_name);
+      return (EXECUTION_FAILURE);
+    }
+  if (invisible_p (v))
+    VUNSETATTR (v, att_invisible);
+  array_flush (array_cell (v));
+
+  dsvstring = list->word->word;
+
+  if (dsvstring == 0 || *dsvstring == 0)
+    return (EXECUTION_SUCCESS);
+
+  opt = dsvsplit (v, dsvstring, delims, flags);
+  /* Maybe do something with OPT here, it's the number of fields */
+
+  return (rval);
+}
+
+/* Called when builtin is enabled and loaded from the shared object.  If this
+   function returns 0, the load fails. */
+int
+dsv_builtin_load (name)
+     char *name;
+{
+  return (1);
+}
+
+/* Called when builtin is disabled. */
+void
+dsv_builtin_unload (name)
+     char *name;
+{
+}
+
+char *dsv_doc[] = {
+       "Read delimiter-separated fields from STRING.",
+       "",     
+       "Parse STRING, a line of delimiter-separated values, into individual",
+       "fields, and store them into the indexed array ARRAYNAME starting at",
+       "index 0. The parsing understands and skips over double-quoted strings. ",
+       "If ARRAYNAME is not supplied, \"DSV\" is the default array name.",
+       "If the delimiter is a comma, the default, this parses comma-",
+       "separated values as specified in RFC 4180.",
+       "",
+       "The -d option specifies the delimiter. The delimiter is the first",
+       "character of the DELIMS argument. Specifying a DELIMS argument that",
+       "contains more than one character is not supported and will produce",
+       "unexpected results. The -S option enables shell-like quoting: double-",
+       "quoted strings can contain backslashes preceding special characters,",
+       "and the backslash will be removed; and single-quoted strings are",
+       "processed as the shell would process them. The -g option enables a",
+       "greedy split: sequences of the delimiter are skipped at the beginning",
+       "and end of STRING, and consecutive instances of the delimiter in STRING",
+       "do not generate empty fields. If the -p option is supplied, dsv leaves",
+       "quote characters as part of the generated field; otherwise they are",
+       "removed.",
+       "",
+       "The return value is 0 unless an invalid option is supplied or the ARRAYNAME",
+       "argument is invalid or readonly.",
+       (char *)NULL
+};
+
+struct builtin dsv_struct = {
+       "dsv",                  /* builtin name */
+       dsv_builtin,            /* function implementing the builtin */
+       BUILTIN_ENABLED,        /* initial flags for builtin */
+       dsv_doc,                /* array of long documentation strings. */
+       "dsv [-a ARRAYNAME] [-d DELIMS] [-Sgp] string", /* usage synopsis; becomes short_doc */
+       0                       /* reserved for internal use */
+};
index fbe52304c96463400476997230e14a111ad365cb..9f2d089f9512e0cf114f9b9afc53d3c99c0d310a 100644 (file)
@@ -3,7 +3,7 @@
 /* See Makefile for compilation details. */
 
 /*
-   Copyright (C) 2017,2018,2019 Free Software Foundation, Inc.
+   Copyright (C) 2017-2022 Free Software Foundation, Inc.
 
    This file is part of GNU Bash.
    Bash is free software: you can redistribute it and/or modify
@@ -102,7 +102,7 @@ static const struct
 #  define ALLFLAGS (O_APPEND|O_ASYNC|O_SYNC|O_NONBLOCK|O_FSYNC|O_DSYNC|\
        O_RSYNC|O_ALT_IO|O_DIRECT|O_NOATIME|O_NOSIGPIPE)
 
-/* An unsed bit in the file status flags word we can use to pass around the
+/* An unused bit in the file status flags word we can use to pass around the
    state of close-on-exec. */
 # define O_CLOEXEC      ((~ALLFLAGS) ^ ((~ALLFLAGS) & ((~ALLFLAGS) - 1)))
 #endif
diff --git a/examples/loadables/getconf.c b/examples/loadables/getconf.c
new file mode 100644 (file)
index 0000000..75a0a56
--- /dev/null
@@ -0,0 +1,1163 @@
+/* Copyright (C) 1991-2021 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   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; version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, see <https://www.gnu.org/licenses/>.  */
+
+/* Modified by Chet Ramey <chet.ramey@case.edu> for inclusion in bash. */
+
+#include <config.h>
+
+#include <unistd.h>
+#include <errno.h>
+#include <error.h>
+#include <libintl.h>
+#include <locale.h>
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "typemax.h"
+#include "loadables.h"
+#include "getconf.h"
+
+#ifndef errno
+extern int errno;
+#endif
+
+/* Hack to `encode' values wider than long into a conf_variable */
+#define VAL_LLONG_MIN           -1000
+#define VAL_LLONG_MAX           -1001
+#define VAL_ULLONG_MAX          -1002
+#define VAL_ULONG_MAX          -1003
+#define VAL_SSIZE_MAX          -1004
+#define VAL_SIZE_MAX           -1005
+
+struct conf
+  {
+    const char *name;
+    const long call_name;      /* or value for CONSTANT */
+    const enum { SYSCONF, CONFSTR, PATHCONF, CONSTANT, UNDEFINED } call;
+  };
+
+static const struct conf vars[] =
+  {
+#ifdef _PC_LINK_MAX
+    { "LINK_MAX", _PC_LINK_MAX, PATHCONF },
+    { "_POSIX_LINK_MAX", _PC_LINK_MAX, PATHCONF },
+#else
+    { "LINK_MAX", _POSIX_LINK_MAX, CONSTANT },
+    { "_POSIX_LINK_MAX", _POSIX_LINK_MAX, CONSTANT },
+#endif
+#ifdef _PC_MAX_CANON
+    { "MAX_CANON", _PC_MAX_CANON, PATHCONF },
+    { "_POSIX_MAX_CANON", _PC_MAX_CANON, PATHCONF },
+#else
+    { "MAX_CANON", _POSIX_MAX_CANON, CONSTANT },
+    { "_POSIX_MAX_CANON", _POSIX_MAX_CANON, CONSTANT },
+#endif
+#ifdef _PC_MAX_INPUT
+    { "MAX_INPUT", _PC_MAX_INPUT, PATHCONF },
+    { "_POSIX_MAX_INPUT", _PC_MAX_INPUT, PATHCONF },
+#else
+    { "MAX_INPUT", _POSIX_MAX_INPUT, CONSTANT },
+    { "_POSIX_MAX_INPUT", _POSIX_MAX_INPUT, CONSTANT },
+#endif
+#ifdef _PC_NAME_MAX
+    { "NAME_MAX", _PC_NAME_MAX, PATHCONF },
+    { "_POSIX_NAME_MAX", _PC_NAME_MAX, PATHCONF },
+#else
+    { "NAME_MAX", _POSIX_NAME_MAX, CONSTANT },
+    { "_POSIX_NAME_MAX", _POSIX_NAME_MAX, CONSTANT },
+#endif
+#ifdef _PC_PATH_MAX
+    { "PATH_MAX", _PC_PATH_MAX, PATHCONF },
+    { "_POSIX_PATH_MAX", _PC_PATH_MAX, PATHCONF },
+#else
+    { "PATH_MAX", _POSIX_PATH_MAX, CONSTANT },
+    { "_POSIX_PATH_MAX", _POSIX_PATH_MAX, CONSTANT },
+#endif
+#ifdef _PC_PIPE_BUF
+    { "PIPE_BUF", _PC_PIPE_BUF, PATHCONF },
+    { "_POSIX_PIPE_BUF", _PC_PIPE_BUF, PATHCONF },
+#else
+    { "PIPE_BUF", _POSIX_PIPE_BUF, CONSTANT },
+    { "_POSIX_PIPE_BUF", _POSIX_PIPE_BUF, CONSTANT },
+#endif
+#ifdef _PC_SOCK_MAXBUF
+    { "SOCK_MAXBUF", _PC_SOCK_MAXBUF, PATHCONF },
+#endif
+#ifdef _PC_ASYNC_IO
+    { "_POSIX_ASYNC_IO", _PC_ASYNC_IO, PATHCONF },
+#endif
+    { "_POSIX_CHOWN_RESTRICTED", _PC_CHOWN_RESTRICTED, PATHCONF },
+    { "_POSIX_NO_TRUNC", _PC_NO_TRUNC, PATHCONF },
+#ifdef _PC_PRIO_IO
+    { "_POSIX_PRIO_IO", _PC_PRIO_IO, PATHCONF },
+#endif
+#ifdef _PC_SYNC_IO
+    { "_POSIX_SYNC_IO", _PC_SYNC_IO, PATHCONF },
+#endif
+    { "_POSIX_VDISABLE", _PC_VDISABLE, PATHCONF },
+
+    { "ARG_MAX", _SC_ARG_MAX, SYSCONF },
+    { "ATEXIT_MAX", _SC_ATEXIT_MAX, SYSCONF },
+#ifdef _SC_CHAR_BIT
+    { "CHAR_BIT", _SC_CHAR_BIT, SYSCONF },
+#else
+    { "CHAR_BIT", CHAR_BIT, CONSTANT },
+#endif
+#ifdef _SC_CHAR_MAX
+    { "CHAR_MAX", _SC_CHAR_MAX, SYSCONF },
+#else
+    { "CHAR_BIT", CHAR_MAX, CONSTANT },
+#endif
+#ifdef _SC_CHAR_MIN
+    { "CHAR_MIN", _SC_CHAR_MIN, SYSCONF },
+#else
+    { "CHAR_MIN", CHAR_MIN, CONSTANT },
+#endif
+    { "CHILD_MAX", _SC_CHILD_MAX, SYSCONF },
+    { "CLK_TCK", _SC_CLK_TCK, SYSCONF },
+#ifdef _SC_INT_BIT
+    { "INT_BIT", _SC_INT_BIT, SYSCONF },
+#else
+    { "INT_BIT", INT_BIT, CONSTANT },
+#endif
+#ifdef _SC_INT_MAX
+    { "INT_MAX", _SC_INT_MAX, SYSCONF },
+#else
+    { "INT_MAX", INT_MAX, CONSTANT },
+#endif
+#ifdef _SC_INT_MIN
+    { "INT_MIN", _SC_INT_MIN, SYSCONF },
+#else
+    { "INT_MIN", INT_MIN, CONSTANT },
+#endif
+#ifdef _SC_UIO_MAXIOV
+    { "IOV_MAX", _SC_UIO_MAXIOV, SYSCONF },
+#endif
+    { "LOGNAME_MAX", _SC_LOGIN_NAME_MAX, SYSCONF },
+#ifdef _SC_LONG_BIT
+    { "LONG_BIT", _SC_LONG_BIT, SYSCONF },
+#else
+    { "LONG_BIT", LONG_BIT, CONSTANT },
+#endif
+    { "LONG_MIN", LONG_MIN, CONSTANT },
+    { "LONG_MAX", LONG_MAX, CONSTANT },
+#if HAVE_LONG_LONG_INT
+    { "LLONG_MIN", VAL_LLONG_MIN, CONSTANT },
+    { "LLONG_MAX", VAL_LLONG_MAX, CONSTANT },
+#else
+    { "LLONG_MIN", LLONG_MIN, CONSTANT },
+    { "LLONG_MAX", LLONG_MAX, CONSTANT },
+#endif
+#ifdef _SC_MB_LEN_MAX
+    { "MB_LEN_MAX", _SC_MB_LEN_MAX, SYSCONF },
+#else
+    { "MB_LEN_MAX", MB_LEN_MAX, CONSTANT },
+#endif
+    { "NGROUPS_MAX", _SC_NGROUPS_MAX, SYSCONF },
+#ifdef _SC_NL_ARGMAX
+    { "NL_ARGMAX", _SC_NL_ARGMAX, SYSCONF },
+#endif
+#ifdef _SC_NL_LANGMAX
+    { "NL_LANGMAX", _SC_NL_LANGMAX, SYSCONF },
+#endif
+#ifdef _SC_NL_MSGMAX
+    { "NL_MSGMAX", _SC_NL_MSGMAX, SYSCONF },
+#endif
+#ifdef _SC_NL_NMAX
+    { "NL_NMAX", _SC_NL_NMAX, SYSCONF },
+#endif
+#ifdef _SC_NL_SETMAX
+    { "NL_SETMAX", _SC_NL_SETMAX, SYSCONF },
+#endif
+#ifdef _SC_NL_TEXTMAX
+    { "NL_TEXTMAX", _SC_NL_TEXTMAX, SYSCONF },
+#endif
+    { "NSS_BUFLEN_GROUP", _SC_GETGR_R_SIZE_MAX, SYSCONF },
+    { "NSS_BUFLEN_PASSWD", _SC_GETPW_R_SIZE_MAX, SYSCONF },
+#ifdef _SC_NZERO
+    { "NZERO", _SC_NZERO, SYSCONF },
+#endif
+    { "OPEN_MAX", _SC_OPEN_MAX, SYSCONF },
+    { "PAGESIZE", _SC_PAGESIZE, SYSCONF },
+    { "PAGE_SIZE", _SC_PAGESIZE, SYSCONF },
+#ifdef _SC_PASS_MAX
+    { "PASS_MAX", _SC_PASS_MAX, SYSCONF },
+#endif
+    { "PTHREAD_DESTRUCTOR_ITERATIONS", _SC_THREAD_DESTRUCTOR_ITERATIONS, SYSCONF },
+    { "PTHREAD_KEYS_MAX", _SC_THREAD_KEYS_MAX, SYSCONF },
+    { "PTHREAD_STACK_MIN", _SC_THREAD_STACK_MIN, SYSCONF },
+    { "PTHREAD_THREADS_MAX", _SC_THREAD_THREADS_MAX, SYSCONF },
+#ifdef _SC_SCHAR_MAX
+    { "SCHAR_MAX", _SC_SCHAR_MAX, SYSCONF },
+#else
+    { "SCHAR_MAX", SCHAR_MAX, CONSTANT },
+#endif
+#ifdef _SC_SCHAR_MIN
+    { "SCHAR_MIN", _SC_SCHAR_MIN, SYSCONF },
+#else
+    { "SCHAR_MIN", SCHAR_MIN, CONSTANT },
+#endif
+#ifdef _SC_SHRT_MAX
+    { "SHRT_MAX", _SC_SHRT_MAX, SYSCONF },
+#else
+    { "SHRT_MAX", SHRT_MAX, CONSTANT },
+#endif
+#ifdef _SC_SHRT_MIN
+    { "SHRT_MIN", _SC_SHRT_MIN, SYSCONF },
+#else
+    { "SHRT_MIN", SHRT_MIN, CONSTANT },
+#endif
+#ifdef _SC_SIZE_MAX
+    { "SIZE_MAX", _SC_SIZE_MAX, SYSCONF },
+#else
+    { "SIZE_MAX", VAL_SIZE_MAX, CONSTANT },
+#endif
+#ifdef _SC_SSIZE_MAX
+    { "SSIZE_MAX", _SC_SSIZE_MAX, SYSCONF },
+#elif SIZEOF_SIZE_MAX == 8
+    { "SSIZE_MAX", VAL_SSIZE_MAX, CONSTANT },
+#else
+    { "SSIZE_MAX", VAL_SSIZE_MAX, CONSTANT },
+#endif
+    { "TTY_NAME_MAX", _SC_TTY_NAME_MAX, SYSCONF },
+    { "TZNAME_MAX", _SC_TZNAME_MAX, SYSCONF },
+#ifdef _SC_UCHAR_MAX
+    { "UCHAR_MAX", _SC_UCHAR_MAX, SYSCONF },
+#else
+    { "UCHAR_MAX", UCHAR_MAX, CONSTANT },
+#endif
+#ifdef _SC_UINT_MAX
+    { "UINT_MAX", _SC_UINT_MAX, SYSCONF },
+#else
+    { "UINT_MAX", UINT_MAX, CONSTANT },
+#endif
+#ifdef _SC_UIO_MAXIOV
+    { "UIO_MAXIOV", _SC_UIO_MAXIOV, SYSCONF },
+#endif
+#ifdef _SC_ULONG_MAX
+    { "ULONG_MAX", _SC_ULONG_MAX, SYSCONF },
+#else
+    { "ULONG_MAX", VAL_ULONG_MAX, CONSTANT },
+#endif
+#ifdef HAVE_LONG_LONG_INT
+    { "ULLONG_MAX", VAL_ULLONG_MAX, CONSTANT },
+#endif
+#ifdef _SC_USHRT_MAX
+    { "USHRT_MAX", _SC_USHRT_MAX, SYSCONF },
+#else
+    { "USHRT_MAX", USHRT_MAX, CONSTANT },
+#endif
+#ifdef _SC_WORD_BIT
+    { "WORD_BIT", _SC_WORD_BIT, SYSCONF },
+#else
+    { "WORD_BIT", WORD_BIT, CONSTANT },
+#endif
+#ifdef _SC_AVPHYS_PAGES
+    { "_AVPHYS_PAGES", _SC_AVPHYS_PAGES, SYSCONF },
+#endif
+    { "_NPROCESSORS_CONF", _SC_NPROCESSORS_CONF, SYSCONF },
+    { "_NPROCESSORS_ONLN", _SC_NPROCESSORS_ONLN, SYSCONF },
+    { "_PHYS_PAGES", _SC_PHYS_PAGES, SYSCONF },
+#ifdef _SC_ARG_MAX
+    { "_POSIX_ARG_MAX", _SC_ARG_MAX, SYSCONF },
+#else
+    { "_POSIX_ARG_MAX", _POSIX_ARG_MAX, CONSTANT },
+#endif
+    { "_POSIX_ASYNCHRONOUS_IO", _SC_ASYNCHRONOUS_IO, SYSCONF },
+#ifdef _SC_CHILD_MAX
+    { "_POSIX_CHILD_MAX", _SC_CHILD_MAX, SYSCONF },
+#else
+    { "_POSIX_CHILD_MAX", _POSIX_CHILD_MAX, CONSTANT },
+#endif
+    { "_POSIX_FSYNC", _SC_FSYNC, SYSCONF },
+    { "_POSIX_JOB_CONTROL", _SC_JOB_CONTROL, SYSCONF },
+    { "_POSIX_MAPPED_FILES", _SC_MAPPED_FILES, SYSCONF },
+    { "_POSIX_MEMLOCK", _SC_MEMLOCK, SYSCONF },
+    { "_POSIX_MEMLOCK_RANGE", _SC_MEMLOCK_RANGE, SYSCONF },
+    { "_POSIX_MEMORY_PROTECTION", _SC_MEMORY_PROTECTION, SYSCONF },
+    { "_POSIX_MESSAGE_PASSING", _SC_MESSAGE_PASSING, SYSCONF },
+    { "_POSIX_NGROUPS_MAX", _SC_NGROUPS_MAX, SYSCONF },
+    { "_POSIX_OPEN_MAX", _SC_OPEN_MAX, SYSCONF },
+#ifdef _SC_PII
+    { "_POSIX_PII", _SC_PII, SYSCONF },
+#endif
+#ifdef _SC_PII_INTERNET
+    { "_POSIX_PII_INTERNET", _SC_PII_INTERNET, SYSCONF },
+#endif
+#ifdef _SC_PII_INTERNET_DGRAM
+    { "_POSIX_PII_INTERNET_DGRAM", _SC_PII_INTERNET_DGRAM, SYSCONF },
+#endif
+#ifdef _SC_PII_INTERNET_STREAM
+    { "_POSIX_PII_INTERNET_STREAM", _SC_PII_INTERNET_STREAM, SYSCONF },
+#endif
+#ifdef _SC_PII_OSI
+    { "_POSIX_PII_OSI", _SC_PII_OSI, SYSCONF },
+#endif
+#ifdef _SC_PII_OSI_CLTS
+    { "_POSIX_PII_OSI_CLTS", _SC_PII_OSI_CLTS, SYSCONF },
+#endif
+#ifdef _SC_PII_OSI_COTS
+    { "_POSIX_PII_OSI_COTS", _SC_PII_OSI_COTS, SYSCONF },
+#endif
+#ifdef _SC_PII_OSI_M
+    { "_POSIX_PII_OSI_M", _SC_PII_OSI_M, SYSCONF },
+#endif
+#ifdef _SC_PII_SOCKET
+    { "_POSIX_PII_SOCKET", _SC_PII_SOCKET, SYSCONF },
+#endif
+#ifdef _SC_PII_XTI
+    { "_POSIX_PII_XTI", _SC_PII_XTI, SYSCONF },
+#endif
+#ifdef _SC_POLL
+    { "_POSIX_POLL", _SC_POLL, SYSCONF },
+#endif
+#ifdef _SC_PRIORITIZED_IO
+    { "_POSIX_PRIORITIZED_IO", _SC_PRIORITIZED_IO, SYSCONF },
+#endif
+    { "_POSIX_PRIORITY_SCHEDULING", _SC_PRIORITY_SCHEDULING, SYSCONF },
+    { "_POSIX_REALTIME_SIGNALS", _SC_REALTIME_SIGNALS, SYSCONF },
+    { "_POSIX_SAVED_IDS", _SC_SAVED_IDS, SYSCONF },
+#ifdef _SC_SELECT
+    { "_POSIX_SELECT", _SC_SELECT, SYSCONF },
+#endif
+    { "_POSIX_SEMAPHORES", _SC_SEMAPHORES, SYSCONF },
+    { "_POSIX_SHARED_MEMORY_OBJECTS", _SC_SHARED_MEMORY_OBJECTS, SYSCONF },
+#ifdef _SC_SSIZE_MAX
+    { "_POSIX_SSIZE_MAX", _SC_SSIZE_MAX, SYSCONF },
+#elif SIZEOF_SIZE_T == 8
+    { "_POSIX_SSIZE_MAX", VAL_SSIZE_MAX, CONSTANT },
+#else
+    { "_POSIX_SSIZE_MAX", VAL_SSIZE_MAX, CONSTANT },
+#endif
+#ifdef _SC_STREAM_MAX
+    { "_POSIX_STREAM_MAX", _SC_STREAM_MAX, SYSCONF },
+#else
+    { "_POSIX_STREAM_MAX", _POSIX_STREAM_MAX, CONSTANT },
+#endif
+    { "_POSIX_SYNCHRONIZED_IO", _SC_SYNCHRONIZED_IO, SYSCONF },
+    { "_POSIX_THREADS", _SC_THREADS, SYSCONF },
+    { "_POSIX_THREAD_ATTR_STACKADDR", _SC_THREAD_ATTR_STACKADDR, SYSCONF },
+    { "_POSIX_THREAD_ATTR_STACKSIZE", _SC_THREAD_ATTR_STACKSIZE, SYSCONF },
+    { "_POSIX_THREAD_PRIORITY_SCHEDULING", _SC_THREAD_PRIORITY_SCHEDULING, SYSCONF },
+    { "_POSIX_THREAD_PRIO_INHERIT", _SC_THREAD_PRIO_INHERIT, SYSCONF },
+    { "_POSIX_THREAD_PRIO_PROTECT", _SC_THREAD_PRIO_PROTECT, SYSCONF },
+#ifdef _SC_THREAD_ROBUST_PRIO_INHERIT
+    { "_POSIX_THREAD_ROBUST_PRIO_INHERIT", _SC_THREAD_ROBUST_PRIO_INHERIT,
+      SYSCONF },
+#endif
+#ifdef _SC_THREAD_ROBUST_PRIO_PROTECT
+    { "_POSIX_THREAD_ROBUST_PRIO_PROTECT", _SC_THREAD_ROBUST_PRIO_PROTECT,
+      SYSCONF },
+#endif
+    { "_POSIX_THREAD_PROCESS_SHARED", _SC_THREAD_PROCESS_SHARED, SYSCONF },
+    { "_POSIX_THREAD_SAFE_FUNCTIONS", _SC_THREAD_SAFE_FUNCTIONS, SYSCONF },
+    { "_POSIX_TIMERS", _SC_TIMERS, SYSCONF },
+    { "TIMER_MAX", _SC_TIMER_MAX, SYSCONF },
+#ifdef _POSIX_TZNAME_MAX
+    { "_POSIX_TZNAME_MAX", _SC_TZNAME_MAX, SYSCONF },
+#else
+    { "_POSIX_TZNAME_MAX", _POSIX_TZNAME_MAX, CONSTANT },
+#endif
+    { "_POSIX_VERSION", _SC_VERSION, SYSCONF },
+#ifdef _SC_T_IOV_MAX
+    { "_T_IOV_MAX", _SC_T_IOV_MAX, SYSCONF },
+#endif
+#ifdef _SC_XOPEN_CRYPT
+    { "_XOPEN_CRYPT", _SC_XOPEN_CRYPT, SYSCONF },
+#endif
+#ifdef _SC_XOPEN_ENH_I18N
+    { "_XOPEN_ENH_I18N", _SC_XOPEN_ENH_I18N, SYSCONF },
+#endif
+#ifdef _SC_XOPEN_LEGACY
+    { "_XOPEN_LEGACY", _SC_XOPEN_LEGACY, SYSCONF },
+#endif
+#ifdef _SC_XOPEN_REALTIME
+    { "_XOPEN_REALTIME", _SC_XOPEN_REALTIME, SYSCONF },
+#endif
+#ifdef _SC_XOPEN_REALTIME_THREADS
+    { "_XOPEN_REALTIME_THREADS", _SC_XOPEN_REALTIME_THREADS, SYSCONF },
+#endif
+#ifdef _SC_XOPEN_SHM
+    { "_XOPEN_SHM", _SC_XOPEN_SHM, SYSCONF },
+#endif
+#ifdef _SC_XOPEN_UNIX
+    { "_XOPEN_UNIX", _SC_XOPEN_UNIX, SYSCONF },
+#endif
+#ifdef _SC_XOPEN_VERSION
+    { "_XOPEN_VERSION", _SC_XOPEN_VERSION, SYSCONF },
+#endif
+#ifdef _SC_XOPEN_XCU_VERSION
+    { "_XOPEN_XCU_VERSION", _SC_XOPEN_XCU_VERSION, SYSCONF },
+#endif
+#ifdef _SC_XOPEN_XPG2
+    { "_XOPEN_XPG2", _SC_XOPEN_XPG2, SYSCONF },
+#endif
+#ifdef _SC_XOPEN_XPG3
+    { "_XOPEN_XPG3", _SC_XOPEN_XPG3, SYSCONF },
+#endif
+#ifdef _SC_XOPEN_XPG4
+    { "_XOPEN_XPG4", _SC_XOPEN_XPG4, SYSCONF },
+#endif
+    /* POSIX.2  */
+#ifdef _SC_BC_BASE_MAX
+    { "BC_BASE_MAX", _SC_BC_BASE_MAX, SYSCONF },
+    { "POSIX2_BC_BASE_MAX", _SC_BC_BASE_MAX, SYSCONF },
+#else
+    { "BC_BASE_MAX", _POSIX2_BC_BASE_MAX, CONSTANT },
+#endif
+#ifdef _SC_BC_BASE_MAX
+    { "BC_DIM_MAX", _SC_BC_DIM_MAX, SYSCONF },
+    { "POSIX2_BC_DIM_MAX", _SC_BC_DIM_MAX, SYSCONF },
+#else
+    { "BC_DIM_MAX", _POSIX2_BC_DIM_MAX, CONSTANT },
+#endif
+#ifdef _SC_BC_SCALE_MAX
+    { "BC_SCALE_MAX", _SC_BC_SCALE_MAX, SYSCONF },
+    { "POSIX2_BC_SCALE_MAX", _SC_BC_SCALE_MAX, SYSCONF },
+#else
+    { "BC_SCALE_MAX", _POSIX2_BC_SCALE_MAX, CONSTANT },
+#endif
+#ifdef _SC_BC_STRING_MAX
+    { "BC_STRING_MAX", _SC_BC_STRING_MAX, SYSCONF },
+    { "POSIX2_BC_STRING_MAX", _SC_BC_STRING_MAX, SYSCONF },
+#else
+    { "BC_STRING_MAX", _POSIX2_BC_STRING_MAX, CONSTANT },
+    { "POSIX2_BC_STRING_MAX", _POSIX2_BC_STRING_MAX, CONSTANT },
+#endif
+#ifdef _SC_CHARCLASS_NAME_MAX
+    { "CHARCLASS_NAME_MAX", _SC_CHARCLASS_NAME_MAX, SYSCONF },
+#endif
+#ifdef _SC_COLL_WEIGHTS_MAX
+    { "COLL_WEIGHTS_MAX", _SC_COLL_WEIGHTS_MAX, SYSCONF },
+    { "POSIX2_COLL_WEIGHTS_MAX", _SC_COLL_WEIGHTS_MAX, SYSCONF },
+#else
+    { "COLL_WEIGHTS_MAX", _POSIX2_COLL_WEIGHTS_MAX, CONSTANT },
+    { "POSIX2_COLL_WEIGHTS_MAX", _POSIX2_COLL_WEIGHTS_MAX, CONSTANT },
+#endif
+#ifdef _SC_EQUIV_CLASS_MAX
+    { "EQUIV_CLASS_MAX", _SC_EQUIV_CLASS_MAX, SYSCONF },
+#else
+    { "EQUIV_CLASS_MAX", _POSIX2_EQUIV_CLASS_MAX, CONSTANT },
+#endif
+#ifdef _SC_EXPR_NEST_MAX
+    { "EXPR_NEST_MAX", _SC_EXPR_NEST_MAX, SYSCONF },
+    { "POSIX2_EXPR_NEST_MAX", _SC_EXPR_NEST_MAX, SYSCONF },
+#else
+    { "EXPR_NEST_MAX", _POSIX2_EXPR_NEST_MAX, CONSTANT },
+    { "POSIX2_EXPR_NEST_MAX", _POSIX2_EXPR_NEST_MAX, CONSTANT },
+#endif
+#ifdef _SC_LINE_MAX
+    { "LINE_MAX", _SC_LINE_MAX, SYSCONF },
+    { "_POSIX2_LINE_MAX", _SC_LINE_MAX, SYSCONF },
+    { "POSIX2_LINE_MAX", _SC_LINE_MAX, SYSCONF },
+#else
+    { "LINE_MAX", _POSIX2_LINE_MAX, CONSTANT },
+    { "_POSIX2_LINE_MAX", _POSIX2_LINE_MAX, CONSTANT },
+    { "POSIX2_LINE_MAX", _POSIX2_LINE_MAX, CONSTANT },
+#endif
+#ifdef _SC_RE_DUP_MAX
+    { "POSIX2_RE_DUP_MAX", _SC_RE_DUP_MAX, SYSCONF },
+    { "RE_DUP_MAX", _SC_RE_DUP_MAX, SYSCONF },
+#else
+    { "POSIX2_RE_DUP_MAX", _POSIX2_RE_DUP_MAX, CONSTANT },
+    { "RE_DUP_MAX", _POSIX2_RE_DUP_MAX, CONSTANT },
+#endif
+    { "POSIX2_CHAR_TERM", _SC_2_CHAR_TERM, SYSCONF },
+    { "POSIX2_C_BIND", _SC_2_C_BIND, SYSCONF },
+    { "POSIX2_C_DEV", _SC_2_C_DEV, SYSCONF },
+#ifdef _SC_2_C_VERSION
+    { "POSIX2_C_VERSION", _SC_2_C_VERSION, SYSCONF },
+#endif
+    { "POSIX2_FORT_DEV", _SC_2_FORT_DEV, SYSCONF },
+    { "POSIX2_FORT_RUN", _SC_2_FORT_RUN, SYSCONF },
+    { "POSIX2_LOCALEDEF", _SC_2_LOCALEDEF, SYSCONF },
+    { "POSIX2_SW_DEV", _SC_2_SW_DEV, SYSCONF },
+    { "POSIX2_UPE", _SC_2_UPE, SYSCONF },
+    { "POSIX2_VERSION", _SC_2_VERSION, SYSCONF },
+
+    { "PATH", _CS_PATH, CONFSTR },
+    { "CS_PATH", _CS_PATH, CONFSTR },
+
+    /* LFS */
+#ifdef _CS_LFS_CFLAGS
+    { "LFS_CFLAGS", _CS_LFS_CFLAGS, CONFSTR },
+#endif
+#ifdef _CS_LFS_LDFLAGS
+    { "LFS_LDFLAGS", _CS_LFS_LDFLAGS, CONFSTR },
+#endif
+#ifdef _CS_LFS_LIBS
+    { "LFS_LIBS", _CS_LFS_LIBS, CONFSTR },
+#endif
+#ifdef _CS_LFS_LINTFLAGS
+    { "LFS_LINTFLAGS", _CS_LFS_LINTFLAGS, CONFSTR },
+#endif
+#ifdef _CS_LFS64_CFLAGS
+    { "LFS64_CFLAGS", _CS_LFS64_CFLAGS, CONFSTR },
+#endif
+#ifdef _CS_LFS64_LDFLAGS
+    { "LFS64_LDFLAGS", _CS_LFS64_LDFLAGS, CONFSTR },
+#endif
+#ifdef _CS_LFS64_LIBS
+    { "LFS64_LIBS", _CS_LFS64_LIBS, CONFSTR },
+#endif
+
+#ifdef _CS_LFS64_LINTFLAGS
+    { "LFS64_LINTFLAGS", _CS_LFS64_LINTFLAGS, CONFSTR },
+#endif
+
+    /* Programming environments.  */
+#ifdef _CS_V5_WIDTH_RESTRICTED_ENVS
+    { "_XBS5_WIDTH_RESTRICTED_ENVS", _CS_V5_WIDTH_RESTRICTED_ENVS, CONFSTR },
+    { "XBS5_WIDTH_RESTRICTED_ENVS", _CS_V5_WIDTH_RESTRICTED_ENVS, CONFSTR },
+#endif
+
+#ifdef _SC_XBS5_ILP32_OFF32
+    { "_XBS5_ILP32_OFF32", _SC_XBS5_ILP32_OFF32, SYSCONF },
+#endif
+#ifdef _CS_XBS5_ILP32_OFF32_CFLAGS
+    { "XBS5_ILP32_OFF32_CFLAGS", _CS_XBS5_ILP32_OFF32_CFLAGS, CONFSTR },
+#endif
+#ifdef _CS_XBS5_ILP32_OFF32_LDFLAGS
+    { "XBS5_ILP32_OFF32_LDFLAGS", _CS_XBS5_ILP32_OFF32_LDFLAGS, CONFSTR },
+#endif
+#ifdef _CS_XBS5_ILP32_OFF32_LIBS
+    { "XBS5_ILP32_OFF32_LIBS", _CS_XBS5_ILP32_OFF32_LIBS, CONFSTR },
+#endif
+#ifdef _CS_XBS5_ILP32_OFF32_LINTFLAGS
+    { "XBS5_ILP32_OFF32_LINTFLAGS", _CS_XBS5_ILP32_OFF32_LINTFLAGS, CONFSTR },
+#endif
+
+#ifdef _SC_XBS5_ILP32_OFFBIG
+    { "_XBS5_ILP32_OFFBIG", _SC_XBS5_ILP32_OFFBIG, SYSCONF },
+#endif
+#ifdef _CS_XBS5_ILP32_OFFBIG_CFLAGS
+    { "XBS5_ILP32_OFFBIG_CFLAGS", _CS_XBS5_ILP32_OFFBIG_CFLAGS, CONFSTR },
+#endif
+#ifdef _CS_XBS5_ILP32_OFFBIG_LDFLAGS
+    { "XBS5_ILP32_OFFBIG_LDFLAGS", _CS_XBS5_ILP32_OFFBIG_LDFLAGS, CONFSTR },
+#endif
+#ifdef _CS_XBS5_ILP32_OFFBIG_LIBS
+    { "XBS5_ILP32_OFFBIG_LIBS", _CS_XBS5_ILP32_OFFBIG_LIBS, CONFSTR },
+#endif
+#ifdef _CS_XBS5_ILP32_OFFBIG_LINTFLAGS
+    { "XBS5_ILP32_OFFBIG_LINTFLAGS", _CS_XBS5_ILP32_OFFBIG_LINTFLAGS, CONFSTR },
+#endif
+
+#ifdef _SC_XBS5_LP64_OFF64
+    { "_XBS5_LP64_OFF64", _SC_XBS5_LP64_OFF64, SYSCONF },
+#endif
+#ifdef _CS_XBS5_LP64_OFF64_CFLAGS
+    { "XBS5_LP64_OFF64_CFLAGS", _CS_XBS5_LP64_OFF64_CFLAGS, CONFSTR },
+#endif
+#ifdef _CS_XBS5_LP64_OFF64_LDFLAGS
+    { "XBS5_LP64_OFF64_LDFLAGS", _CS_XBS5_LP64_OFF64_LDFLAGS, CONFSTR },
+#endif
+#ifdef _CS_XBS5_LP64_OFF64_LIBS
+    { "XBS5_LP64_OFF64_LIBS", _CS_XBS5_LP64_OFF64_LIBS, CONFSTR },
+#endif
+#ifdef _CS_XBS5_LP64_OFF64_LINTFLAGS
+    { "XBS5_LP64_OFF64_LINTFLAGS", _CS_XBS5_LP64_OFF64_LINTFLAGS, CONFSTR },
+#endif
+
+#ifdef _SC_XBS5_LPBIG_OFFBIG
+    { "_XBS5_LPBIG_OFFBIG", _SC_XBS5_LPBIG_OFFBIG, SYSCONF },
+#endif
+#ifdef _CS_XBS5_LPBIG_OFFBIG_CFLAGS
+    { "XBS5_LPBIG_OFFBIG_CFLAGS", _CS_XBS5_LPBIG_OFFBIG_CFLAGS, CONFSTR },
+#endif
+#ifdef _CS_XBS5_LPBIG_OFFBIG_LDFLAGS
+    { "XBS5_LPBIG_OFFBIG_LDFLAGS", _CS_XBS5_LPBIG_OFFBIG_LDFLAGS, CONFSTR },
+#endif
+#ifdef _CS_XBS5_LPBIG_OFFBIG_LIBS
+    { "XBS5_LPBIG_OFFBIG_LIBS", _CS_XBS5_LPBIG_OFFBIG_LIBS, CONFSTR },
+#endif
+#ifdef _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS
+    { "XBS5_LPBIG_OFFBIG_LINTFLAGS", _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS, CONFSTR },
+#endif
+
+#ifdef _SC_V6_ILP32_OFF32
+    { "_POSIX_V6_ILP32_OFF32", _SC_V6_ILP32_OFF32, SYSCONF },
+#endif
+#ifdef _CS_POSIX_V6_ILP32_OFF32_CFLAGS
+    { "POSIX_V6_ILP32_OFF32_CFLAGS", _CS_POSIX_V6_ILP32_OFF32_CFLAGS, CONFSTR },
+#endif
+#ifdef _CS_POSIX_V6_ILP32_OFF32_LDFLAGS
+    { "POSIX_V6_ILP32_OFF32_LDFLAGS", _CS_POSIX_V6_ILP32_OFF32_LDFLAGS, CONFSTR },
+#endif
+#ifdef _CS_POSIX_V6_ILP32_OFF32_LIBS
+    { "POSIX_V6_ILP32_OFF32_LIBS", _CS_POSIX_V6_ILP32_OFF32_LIBS, CONFSTR },
+#endif
+#ifdef _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS
+    { "POSIX_V6_ILP32_OFF32_LINTFLAGS", _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS, CONFSTR },
+#endif
+
+#ifdef _CS_V6_WIDTH_RESTRICTED_ENVS
+    { "_POSIX_V6_WIDTH_RESTRICTED_ENVS", _CS_V6_WIDTH_RESTRICTED_ENVS, CONFSTR },
+    { "POSIX_V6_WIDTH_RESTRICTED_ENVS", _CS_V6_WIDTH_RESTRICTED_ENVS, CONFSTR },
+#endif
+
+#ifdef _SC_V6_ILP32_OFFBIG
+    { "_POSIX_V6_ILP32_OFFBIG", _SC_V6_ILP32_OFFBIG, SYSCONF },
+#endif
+#ifdef _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS
+    { "POSIX_V6_ILP32_OFFBIG_CFLAGS", _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS, CONFSTR },
+#endif
+#ifdef _CS_POSIX_V6_ILP32_OFF32_LDFLAGS
+    { "POSIX_V6_ILP32_OFFBIG_LDFLAGS", _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS, CONFSTR },
+#endif
+#ifdef _CS_POSIX_V6_ILP32_OFF32_LIBS
+    { "POSIX_V6_ILP32_OFFBIG_LIBS", _CS_POSIX_V6_ILP32_OFFBIG_LIBS, CONFSTR },
+#endif
+#ifdef _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS
+    { "POSIX_V6_ILP32_OFFBIG_LINTFLAGS", _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS, CONFSTR },
+#endif
+
+#ifdef _SC_V6_LP64_OFF64
+    { "_POSIX_V6_LP64_OFF64", _SC_V6_LP64_OFF64, SYSCONF },
+#endif
+#ifdef _CS_POSIX_V6_LP64_OFF64_CFLAGS
+    { "POSIX_V6_LP64_OFF64_CFLAGS", _CS_POSIX_V6_LP64_OFF64_CFLAGS, CONFSTR },
+#endif
+#ifdef _CS_POSIX_V6_LP64_OFF64_LDFLAGS
+    { "POSIX_V6_LP64_OFF64_LDFLAGS", _CS_POSIX_V6_LP64_OFF64_LDFLAGS, CONFSTR },
+#endif
+#ifdef _CS_POSIX_V6_LP64_OFF64_LIBS
+    { "POSIX_V6_LP64_OFF64_LIBS", _CS_POSIX_V6_LP64_OFF64_LIBS, CONFSTR },
+#endif
+#ifdef _CS_POSIX_V6_LP64_OFF64_LINTFLAGS
+    { "POSIX_V6_LP64_OFF64_LINTFLAGS", _CS_POSIX_V6_LP64_OFF64_LINTFLAGS, CONFSTR },
+#endif
+
+#ifdef _SC_V6_LPBIG_OFFBIG
+    { "_POSIX_V6_LPBIG_OFFBIG", _SC_V6_LPBIG_OFFBIG, SYSCONF },
+#endif
+#ifdef _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS
+    { "POSIX_V6_LPBIG_OFFBIG_CFLAGS", _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS, CONFSTR },
+#endif
+#ifdef _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS
+    { "POSIX_V6_LPBIG_OFFBIG_LDFLAGS", _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS, CONFSTR },
+#endif
+#ifdef _CS_POSIX_V6_LPBIG_OFFBIG_LIBS
+    { "POSIX_V6_LPBIG_OFFBIG_LIBS", _CS_POSIX_V6_LPBIG_OFFBIG_LIBS, CONFSTR },
+#endif
+#ifdef _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS
+    { "POSIX_V6_LPBIG_OFFBIG_LINTFLAGS", _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS, CONFSTR },
+#endif
+
+#ifdef _SC_V7_ILP32_OFF32
+    { "_POSIX_V7_ILP32_OFF32", _SC_V7_ILP32_OFF32, SYSCONF },
+#endif
+#ifdef _CS_POSIX_V7_ILP32_OFF32_CFLAGS
+    { "POSIX_V7_ILP32_OFF32_CFLAGS", _CS_POSIX_V7_ILP32_OFF32_CFLAGS, CONFSTR },
+#endif
+#ifdef _CS_POSIX_V7_ILP32_OFF32_LDFLAGS
+    { "POSIX_V7_ILP32_OFF32_LDFLAGS", _CS_POSIX_V7_ILP32_OFF32_LDFLAGS, CONFSTR },
+#endif
+#ifdef _CS_POSIX_V7_ILP32_OFF32_LIBS
+    { "POSIX_V7_ILP32_OFF32_LIBS", _CS_POSIX_V7_ILP32_OFF32_LIBS, CONFSTR },
+#endif
+#ifdef _CS_POSIX_V7_ILP32_OFF32_LINTFLAGS
+    { "POSIX_V7_ILP32_OFF32_LINTFLAGS", _CS_POSIX_V7_ILP32_OFF32_LINTFLAGS, CONFSTR },
+#endif
+
+#ifdef _CS_V7_WIDTH_RESTRICTED_ENVS
+    { "_POSIX_V7_WIDTH_RESTRICTED_ENVS", _CS_V7_WIDTH_RESTRICTED_ENVS, CONFSTR },
+    { "POSIX_V7_WIDTH_RESTRICTED_ENVS", _CS_V7_WIDTH_RESTRICTED_ENVS, CONFSTR },
+#endif
+
+#ifdef _SC_V7_ILP32_OFFBIG
+    { "_POSIX_V7_ILP32_OFFBIG", _SC_V7_ILP32_OFFBIG, SYSCONF },
+#endif
+#ifdef _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS
+    { "POSIX_V7_ILP32_OFFBIG_CFLAGS", _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS, CONFSTR },
+#endif
+#ifdef _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS
+    { "POSIX_V7_ILP32_OFFBIG_LDFLAGS", _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS, CONFSTR },
+#endif
+#ifdef _CS_POSIX_V7_ILP32_OFFBIG_LIBS
+    { "POSIX_V7_ILP32_OFFBIG_LIBS", _CS_POSIX_V7_ILP32_OFFBIG_LIBS, CONFSTR },
+#endif
+#ifdef _CS_POSIX_V7_ILP32_OFFBIG_LINTFLAGS
+    { "POSIX_V7_ILP32_OFFBIG_LINTFLAGS", _CS_POSIX_V7_ILP32_OFFBIG_LINTFLAGS, CONFSTR },
+#endif
+
+#ifdef _SC_V7_LP64_OFF64
+    { "_POSIX_V7_LP64_OFF64", _SC_V7_LP64_OFF64, SYSCONF },
+#endif
+#ifdef _CS_POSIX_V7_LP64_OFF64_CFLAGS
+    { "POSIX_V7_LP64_OFF64_CFLAGS", _CS_POSIX_V7_LP64_OFF64_CFLAGS, CONFSTR },
+#endif
+#ifdef _CS_POSIX_V7_LP64_OFF64_LDFLAGS
+    { "POSIX_V7_LP64_OFF64_LDFLAGS", _CS_POSIX_V7_LP64_OFF64_LDFLAGS, CONFSTR },
+#endif
+#ifdef _CS_POSIX_V7_LP64_OFF64_LIBS
+    { "POSIX_V7_LP64_OFF64_LIBS", _CS_POSIX_V7_LP64_OFF64_LIBS, CONFSTR },
+#endif
+#ifdef _CS_POSIX_V7_LP64_OFF64_LINTFLAGS
+    { "POSIX_V7_LP64_OFF64_LINTFLAGS", _CS_POSIX_V7_LP64_OFF64_LINTFLAGS, CONFSTR },
+#endif
+
+#ifdef _SC_V7_LPBIG_OFFBIG
+    { "_POSIX_V7_LPBIG_OFFBIG", _SC_V7_LPBIG_OFFBIG, SYSCONF },
+#endif
+#ifdef _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS
+    { "POSIX_V7_LPBIG_OFFBIG_CFLAGS", _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS, CONFSTR },
+#endif
+#ifdef _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS
+    { "POSIX_V7_LPBIG_OFFBIG_LDFLAGS", _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS, CONFSTR },
+#endif
+#ifdef _CS_POSIX_V7_LPBIG_OFFBIG_LIBS
+    { "POSIX_V7_LPBIG_OFFBIG_LIBS", _CS_POSIX_V7_LPBIG_OFFBIG_LIBS, CONFSTR },
+#endif
+#ifdef _CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS
+    { "POSIX_V7_LPBIG_OFFBIG_LINTFLAGS", _CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS, CONFSTR },
+#endif
+
+#ifdef _SC_ADVISORY_INFO
+    { "_POSIX_ADVISORY_INFO", _SC_ADVISORY_INFO, SYSCONF },
+#endif
+#ifdef _SC_BARRIERS
+    { "_POSIX_BARRIERS", _SC_BARRIERS, SYSCONF },
+#endif
+#ifdef _SC_BASE
+    { "_POSIX_BASE", _SC_BASE, SYSCONF },
+#endif
+#ifdef _SC_C_LANG_SUPPORT
+    { "_POSIX_C_LANG_SUPPORT", _SC_C_LANG_SUPPORT, SYSCONF },
+#endif
+#ifdef _SC_C_LANG_SUPPORT_R
+    { "_POSIX_C_LANG_SUPPORT_R", _SC_C_LANG_SUPPORT_R, SYSCONF },
+#endif
+    { "_POSIX_CLOCK_SELECTION", _SC_CLOCK_SELECTION, SYSCONF },
+    { "_POSIX_CPUTIME", _SC_CPUTIME, SYSCONF },
+    { "_POSIX_THREAD_CPUTIME", _SC_THREAD_CPUTIME, SYSCONF },
+#ifdef _SC_DEVICE_SPECIFIC
+    { "_POSIX_DEVICE_SPECIFIC", _SC_DEVICE_SPECIFIC, SYSCONF },
+#endif
+#ifdef _SC_DEVICE_SPECIFIC_R
+    { "_POSIX_DEVICE_SPECIFIC_R", _SC_DEVICE_SPECIFIC_R, SYSCONF },
+#endif
+#ifdef _SC_FD_MGMT
+    { "_POSIX_FD_MGMT", _SC_FD_MGMT, SYSCONF },
+#endif
+#ifdef _SC_FIFO
+    { "_POSIX_FIFO", _SC_FIFO, SYSCONF },
+#endif
+#ifdef _SC_PIPE
+    { "_POSIX_PIPE", _SC_PIPE, SYSCONF },
+#endif
+#ifdef _SC_FILE_ATTRIBUTES
+    { "_POSIX_FILE_ATTRIBUTES", _SC_FILE_ATTRIBUTES, SYSCONF },
+#endif
+#ifdef _SC_FILE_LOCKING
+    { "_POSIX_FILE_LOCKING", _SC_FILE_LOCKING, SYSCONF },
+#endif
+#ifdef _SC_FILE_SYSTEM
+    { "_POSIX_FILE_SYSTEM", _SC_FILE_SYSTEM, SYSCONF },
+#endif
+    { "_POSIX_MONOTONIC_CLOCK", _SC_MONOTONIC_CLOCK, SYSCONF },
+#ifdef _SC_MULTI_PROCESS
+    { "_POSIX_MULTI_PROCESS", _SC_MULTI_PROCESS, SYSCONF },
+#endif
+#ifdef _SC_SINGLE_PROCESS
+    { "_POSIX_SINGLE_PROCESS", _SC_SINGLE_PROCESS, SYSCONF },
+#endif
+#ifdef _SC_NETWORKING
+    { "_POSIX_NETWORKING", _SC_NETWORKING, SYSCONF },
+#endif
+    { "_POSIX_READER_WRITER_LOCKS", _SC_READER_WRITER_LOCKS, SYSCONF },
+    { "_POSIX_SPIN_LOCKS", _SC_SPIN_LOCKS, SYSCONF },
+    { "_POSIX_REGEXP", _SC_REGEXP, SYSCONF },
+#ifdef _SC_REGEX_VERSION
+    { "_REGEX_VERSION", _SC_REGEX_VERSION, SYSCONF },
+#endif
+    { "_POSIX_SHELL", _SC_SHELL, SYSCONF },
+#ifdef _SC_SIGNALS
+    { "_POSIX_SIGNALS", _SC_SIGNALS, SYSCONF },
+#endif
+    { "_POSIX_SPAWN", _SC_SPAWN, SYSCONF },
+#ifdef _SC_SPORADIC_SERVER
+    { "_POSIX_SPORADIC_SERVER", _SC_SPORADIC_SERVER, SYSCONF },
+#endif
+#ifdef _SC_THREAD_SPORADIC_SERVER
+    { "_POSIX_THREAD_SPORADIC_SERVER", _SC_THREAD_SPORADIC_SERVER, SYSCONF },
+#endif
+#ifdef _SC_SYSTEM_DATABASE
+    { "_POSIX_SYSTEM_DATABASE", _SC_SYSTEM_DATABASE, SYSCONF },
+#endif
+#ifdef _SC_SYSTEM_DATABASE_R
+    { "_POSIX_SYSTEM_DATABASE_R", _SC_SYSTEM_DATABASE_R, SYSCONF },
+#endif
+#ifdef _SC_TIMEOUTS
+    { "_POSIX_TIMEOUTS", _SC_TIMEOUTS, SYSCONF },
+#endif
+#ifdef _SC_TYPED_MEMORY_OBJECTS
+    { "_POSIX_TYPED_MEMORY_OBJECTS", _SC_TYPED_MEMORY_OBJECTS, SYSCONF },
+#endif
+#ifdef _SC_USER_GROUPS
+    { "_POSIX_USER_GROUPS", _SC_USER_GROUPS, SYSCONF },
+#endif
+#ifdef _SC_USER_GROUPS_R
+    { "_POSIX_USER_GROUPS_R", _SC_USER_GROUPS_R, SYSCONF },
+#endif
+    { "POSIX2_PBS", _SC_2_PBS, SYSCONF },
+    { "POSIX2_PBS_ACCOUNTING", _SC_2_PBS_ACCOUNTING, SYSCONF },
+    { "POSIX2_PBS_LOCATE", _SC_2_PBS_LOCATE, SYSCONF },
+    { "POSIX2_PBS_TRACK", _SC_2_PBS_TRACK, SYSCONF },
+    { "POSIX2_PBS_MESSAGE", _SC_2_PBS_MESSAGE, SYSCONF },
+    { "SYMLOOP_MAX", _SC_SYMLOOP_MAX, SYSCONF },
+    { "STREAM_MAX", _SC_STREAM_MAX, SYSCONF },
+    { "AIO_LISTIO_MAX", _SC_AIO_LISTIO_MAX, SYSCONF },
+    { "AIO_MAX", _SC_AIO_MAX, SYSCONF },
+#ifdef _SC_AIO_PRIO_DELTA_MAX
+    { "AIO_PRIO_DELTA_MAX", _SC_AIO_PRIO_DELTA_MAX, SYSCONF },
+#endif
+    { "DELAYTIMER_MAX", _SC_DELAYTIMER_MAX, SYSCONF },
+    { "HOST_NAME_MAX", _SC_HOST_NAME_MAX, SYSCONF },
+    { "LOGIN_NAME_MAX", _SC_LOGIN_NAME_MAX, SYSCONF },
+    { "MQ_OPEN_MAX", _SC_MQ_OPEN_MAX, SYSCONF },
+    { "MQ_PRIO_MAX", _SC_MQ_PRIO_MAX, SYSCONF },
+#ifdef _SC_DEVICE_IO
+    { "_POSIX_DEVICE_IO", _SC_DEVICE_IO, SYSCONF },
+#endif
+#ifdef _SC_TRACE
+    { "_POSIX_TRACE", _SC_TRACE, SYSCONF },
+#endif
+#ifdef _SC_TRACE_EVENT_FILTER
+    { "_POSIX_TRACE_EVENT_FILTER", _SC_TRACE_EVENT_FILTER, SYSCONF },
+#endif
+#ifdef _SC_TRACE_INHERIT
+    { "_POSIX_TRACE_INHERIT", _SC_TRACE_INHERIT, SYSCONF },
+#endif
+#ifdef _SC_TRACE_LOG
+    { "_POSIX_TRACE_LOG", _SC_TRACE_LOG, SYSCONF },
+#endif
+    { "RTSIG_MAX", _SC_RTSIG_MAX, SYSCONF },
+#ifdef _SC_SEM_NSEMS_MAX
+    { "SEM_NSEMS_MAX", _SC_SEM_NSEMS_MAX, SYSCONF },
+#endif
+#ifdef _SC_SEM_VALUE_MAX
+    { "SEM_VALUE_MAX", _SC_SEM_VALUE_MAX, SYSCONF },
+#endif
+    { "SIGQUEUE_MAX", _SC_SIGQUEUE_MAX, SYSCONF },
+    { "FILESIZEBITS", _PC_FILESIZEBITS, PATHCONF },
+#ifdef _PC_ALLOC_SIZE_MIN
+    { "POSIX_ALLOC_SIZE_MIN", _PC_ALLOC_SIZE_MIN, PATHCONF },
+#endif
+#ifdef _PC_REC_INCR_XFER_SIZE
+    { "POSIX_REC_INCR_XFER_SIZE", _PC_REC_INCR_XFER_SIZE, PATHCONF },
+#endif
+#ifdef _PC_REC_MAX_XFER_SIZE
+    { "POSIX_REC_MAX_XFER_SIZE", _PC_REC_MAX_XFER_SIZE, PATHCONF },
+#endif
+#ifdef _PC_REC_MIN_XFER_SIZE
+    { "POSIX_REC_MIN_XFER_SIZE", _PC_REC_MIN_XFER_SIZE, PATHCONF },
+#endif
+#ifdef _PC_REC_XFER_ALIGN
+    { "POSIX_REC_XFER_ALIGN", _PC_REC_XFER_ALIGN, PATHCONF },
+#endif
+    { "SYMLINK_MAX", _PC_SYMLINK_MAX, PATHCONF },
+#ifdef _PC_2_SYMLINKS
+    { "POSIX2_SYMLINKS", _PC_2_SYMLINKS, PATHCONF },
+#endif
+
+#ifdef _SC_LEVEL1_ICACHE_SIZE
+    { "LEVEL1_ICACHE_SIZE", _SC_LEVEL1_ICACHE_SIZE, SYSCONF },
+    { "LEVEL1_ICACHE_ASSOC", _SC_LEVEL1_ICACHE_ASSOC, SYSCONF },
+    { "LEVEL1_ICACHE_LINESIZE", _SC_LEVEL1_ICACHE_LINESIZE, SYSCONF },
+    { "LEVEL1_DCACHE_SIZE", _SC_LEVEL1_DCACHE_SIZE, SYSCONF },
+    { "LEVEL1_DCACHE_ASSOC", _SC_LEVEL1_DCACHE_ASSOC, SYSCONF },
+    { "LEVEL1_DCACHE_LINESIZE", _SC_LEVEL1_DCACHE_LINESIZE, SYSCONF },
+#endif
+#ifdef _SC_LEVEL2_CACHE_SIZE
+    { "LEVEL2_CACHE_SIZE", _SC_LEVEL2_CACHE_SIZE, SYSCONF },
+    { "LEVEL2_CACHE_ASSOC", _SC_LEVEL2_CACHE_ASSOC, SYSCONF },
+    { "LEVEL2_CACHE_LINESIZE", _SC_LEVEL2_CACHE_LINESIZE, SYSCONF },
+#endif
+#ifdef _SC_LEVEL3_CACHE_SIZE
+    { "LEVEL3_CACHE_SIZE", _SC_LEVEL3_CACHE_SIZE, SYSCONF },
+    { "LEVEL3_CACHE_ASSOC", _SC_LEVEL3_CACHE_ASSOC, SYSCONF },
+    { "LEVEL3_CACHE_LINESIZE", _SC_LEVEL3_CACHE_LINESIZE, SYSCONF },
+#endif
+#ifdef _SC_LEVEL4_CACHE_SIZE
+    { "LEVEL4_CACHE_SIZE", _SC_LEVEL4_CACHE_SIZE, SYSCONF },
+    { "LEVEL4_CACHE_ASSOC", _SC_LEVEL4_CACHE_ASSOC, SYSCONF },
+    { "LEVEL4_CACHE_LINESIZE", _SC_LEVEL4_CACHE_LINESIZE, SYSCONF },
+#endif
+
+#ifdef _SC_IPV6
+    { "IPV6", _SC_IPV6, SYSCONF },
+    { "_POSIX_IPV6", _SC_IPV6, SYSCONF },
+#endif
+#ifdef _SC_RAW_SOCKETS
+    { "RAW_SOCKETS", _SC_RAW_SOCKETS, SYSCONF },
+    { "_POSIX_RAW_SOCKETS", _SC_RAW_SOCKETS, SYSCONF },
+#endif
+
+    { NULL, 0, SYSCONF }
+  };
+
+static int getconf_print (const struct conf *, const char *, int);
+static int getconf_all (void);
+static int getconf_one (WORD_LIST *);
+static int getconf_internal (const struct conf *, int);
+
+static int
+getconf_internal (const struct conf *c, int all)
+{
+  long l, val;
+  intmax_t v;
+  uintmax_t uv;
+  unsigned long ul;
+#if HAVE_LONG_LONG_INT
+  unsigned long long ull;
+  long long ll;
+#endif
+  int r;
+
+  val = c->call_name;
+  r = EXECUTION_SUCCESS;
+  if (val == VAL_ULONG_MAX)
+    {
+      ul = ULONG_MAX;
+      printf ("%lu", ul);
+    }
+#if HAVE_LONG_LONG_INT
+  else if (val == VAL_ULLONG_MAX)
+    {
+      ull = ULLONG_MAX;
+      printf ("%llu", ull);
+    }
+  else if (val == VAL_LLONG_MIN || val == VAL_LLONG_MAX)
+    {
+      ll = (val == VAL_LLONG_MIN) ? LLONG_MIN : LLONG_MAX;
+      printf ("%lld", ll);
+    }
+#endif
+#if HAVE_LONG_LONG_INT
+  else if (val == VAL_SSIZE_MAX)
+    {
+      ll = SSIZE_MAX;
+      printf ("%lld", ll);
+    }
+  else if (val == VAL_SIZE_MAX)
+    {
+      ul = SIZE_MAX;
+      printf ("%lu", ul);
+    }
+#else
+  else if (val == VAL_SSIZE_MAX)
+    {
+      v = SSIZE_MAX;
+      printf ("%jd", v);
+    }
+  else if (val == VAL_SIZE_MAX)
+    {
+      uv = SIZE_MAX;
+      printf ("%ju", uv);
+    }
+#endif
+  else
+    printf ("%ld", val);
+
+  if (r == EXECUTION_SUCCESS)
+    printf ("\n");
+
+  return (r);
+}
+    
+static int
+getconf_all (void)
+{
+  const struct conf *c;
+  char *path;
+  int r;
+
+  r = EXECUTION_SUCCESS;
+  for (c = vars; c->name != NULL; ++c)
+    {
+      printf("%-35s", c->name);
+      path = "/";              /* XXX for now */
+      if (getconf_print (c, path, 1) == EXECUTION_FAILURE)
+        r = EXECUTION_FAILURE;
+    }
+  return (r);
+}
+
+static int
+getconf_one (WORD_LIST *list)
+{
+  const struct conf *c;
+  char *vname, *vpath;
+
+  vname = list->word->word;
+  vpath = (list->next && list->next->word) ? list->next->word->word : 0;
+
+  for (c = vars; c->name != NULL; ++c)
+    {
+      if (strcmp (c->name, vname) == 0 || (strncmp (c->name, "_POSIX_", 7) == 0 &&
+                                         strcmp (c->name + 7, vname) == 0))
+       break;
+    }
+  if (c->name == NULL)
+    {
+      builtin_error ("%s: unknown variable", vname);
+      return (EXECUTION_FAILURE);
+    }
+
+  if (c->call_name == PATHCONF && list->next == 0)
+    {
+      builtin_usage ();
+      return (EX_USAGE);
+    }
+  else if (c->call_name != PATHCONF && list->next)
+    {
+      builtin_usage ();
+      return (EX_USAGE);
+    }
+     
+  return (getconf_print (c, vpath, 0));
+}
+
+static int
+getconf_print (const struct conf *c, const char *vpath, int all)
+{
+  long value;
+  size_t clen;
+  char *cvalue;
+  int cn;
+
+  cn = c->call_name;
+  switch (c->call)
+    {
+    case PATHCONF:
+      errno = 0;
+      value = pathconf (vpath, cn);
+      if (value == -1L)
+       {
+         if (errno)
+           builtin_error ("pathconf %s: %s: %s", c->name, vpath, strerror (errno));
+         printf ("undefined\n");
+         return (EXECUTION_FAILURE);
+       }
+      else
+        printf ("%ld\n", value);
+      return (EXECUTION_SUCCESS);
+
+    case SYSCONF:
+      errno = 0;
+      value = sysconf (cn);
+      if (value == -1L)
+       {
+         if (errno)
+           builtin_error ("%s: %s", c->name, strerror (errno));
+         printf ("undefined\n");
+         return (EXECUTION_FAILURE);
+       }
+      else
+       printf ("%ld\n", value);
+      return (EXECUTION_SUCCESS);
+
+    case CONFSTR:
+      errno = 0;
+      clen = confstr (cn, (char *) NULL, 0);
+      cvalue = (char *) malloc (clen);
+      if (cvalue == NULL)
+        {
+          builtin_error ("memory allocation failure");
+          return (EXECUTION_FAILURE);
+        }
+      if (confstr (c->call_name, cvalue, clen) != clen)
+       {
+         if (errno != 0)
+           builtin_error ("%s: confstr: %s", c->name, strerror (errno));
+         printf ("undefined\n");
+         return (EXECUTION_FAILURE);
+       }
+      else
+       printf ("%.*s\n", (int) clen, cvalue);
+      free (cvalue);
+      return (EXECUTION_SUCCESS);
+
+    case CONSTANT:
+      return (getconf_internal (c, all));
+
+    case UNDEFINED:
+      builtin_error ("%s: undefined", c->name);
+      return (EXECUTION_FAILURE);
+    }   
+
+  /* NOTREACHED */
+  return (EX_USAGE);
+}
+
+int
+getconf_builtin (WORD_LIST *list)
+{
+  const struct conf *c;
+  int r, opt, aflag, vflag;
+  char *varg;
+
+  aflag = vflag = 0;
+  varg = 0;
+  reset_internal_getopt ();
+  while ((opt = internal_getopt (list, "ahv:")) != -1)
+    {
+      switch (opt)
+       {
+       case 'a':
+         aflag = 1;
+         break;
+       CASE_HELPOPT;
+       case 'h':
+         builtin_help ();
+         return (EX_USAGE);
+       case 'v':
+         return (EX_DISKFALLBACK);
+       default:
+         builtin_usage ();
+         return (EX_USAGE);
+       }
+    }
+
+  list = loptend;
+  if ((aflag == 0 && list == 0) || (aflag && list) || list_length(list) > 2)
+    {
+      builtin_usage();
+      return (EX_USAGE);
+    }
+
+  r = aflag ? getconf_all () : getconf_one (list);
+  return r;
+}
+
+static char *getconf_doc[] = {
+       "Display values of system limits and options.",
+       "",
+       "getconf writes the current value of a configurable system limit or",
+       "option variable to the standard output.",
+       (char *)NULL
+};
+
+struct builtin getconf_struct = {
+       "getconf",
+       getconf_builtin,
+       BUILTIN_ENABLED,
+       getconf_doc,
+       "getconf -[ah] or getconf [-v spec] sysvar or getconf [-v spec] pathvar pathname",
+       0
+};
diff --git a/examples/loadables/getconf.h b/examples/loadables/getconf.h
new file mode 100644 (file)
index 0000000..b8b9f10
--- /dev/null
@@ -0,0 +1,136 @@
+/*
+   Copyright (C) 2021 Free Software Foundation, Inc.
+   
+   This file is part of GNU Bash.
+   Bash is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+
+   Bash is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with Bash.  If not, see <http://www.gnu.org/licenses/>.
+*/
+/* getconf.h -- replacement definitions for ones the system doesn't provide
+   and don't appear in <typemax.h> */
+
+#ifndef _GETCONF_H
+#define _GETCONF_H
+
+/* Some systems do not define these; use POSIX.2 minimum recommended values. */
+#ifndef _POSIX2_COLL_WEIGHTS_MAX
+#  define _POSIX2_COLL_WEIGHTS_MAX 2
+#endif
+
+/* If we're on a posix system, but the system doesn't define the necessary
+   constants, use posix.1 minimum values. */
+#if defined (_POSIX_VERSION)
+
+#ifndef _POSIX_ARG_MAX
+#  define _POSIX_ARG_MAX       4096
+#endif
+#ifndef _POSIX_CHILD_MAX
+#  define _POSIX_CHILD_MAX     6
+#endif
+#ifndef _POSIX_LINK_MAX
+#  define _POSIX_LINK_MAX      8
+#endif
+#ifndef _POSIX_MAX_CANON
+#  define _POSIX_MAX_CANON     255
+#endif
+#ifndef _POSIX_MAX_INPUT
+#  define _POSIX_MAX_INPUT     255
+#endif
+#ifndef _POSIX_NAME_MAX
+#  define _POSIX_NAME_MAX      14
+#endif
+#ifndef _POSIX_NGROUPS_MAX
+#  define _POSIX_NGROUPS_MAX   0
+#endif
+#ifndef _POSIX_OPEN_MAX
+#  define _POSIX_OPEN_MAX      16
+#endif
+#ifndef _POSIX_PATH_MAX
+#  define _POSIX_PATH_MAX      255
+#endif
+#ifndef _POSIX_PIPE_BUF
+#  define _POSIX_PIPE_BUF      512
+#endif
+#ifndef _POSIX_SSIZE_MAX
+#  define _POSIX_SSIZE_MAX     32767
+#endif
+#ifndef _POSIX_STREAM_MAX
+#  define _POSIX_STREAM_MAX    8
+#endif
+#ifndef _POSIX_TZNAME_MAX
+#  define _POSIX_TZNAME_MAX    3
+#endif
+
+#ifndef _POSIX2_BC_BASE_MAX
+#  define _POSIX2_BC_BASE_MAX     99
+#endif
+#ifndef _POSIX2_BC_DIM_MAX
+#  define _POSIX2_BC_DIM_MAX      2048
+#endif
+#ifndef _POSIX2_BC_SCALE_MAX
+#  define _POSIX2_BC_SCALE_MAX    99
+#endif
+#ifndef _POSIX2_BC_STRING_MAX
+#  define _POSIX2_BC_STRING_MAX   1000
+#endif
+#ifndef _POSIX2_EQUIV_CLASS_MAX
+#  define _POSIX2_EQUIV_CLASS_MAX 2
+#endif
+#ifndef _POSIX2_EXPR_NEST_MAX
+#  define _POSIX2_EXPR_NEST_MAX   32
+#endif
+#ifndef _POSIX2_LINE_MAX
+#  define _POSIX2_LINE_MAX        2048
+#endif
+#ifndef _POSIX2_RE_DUP_MAX
+#  define _POSIX2_RE_DUP_MAX      255
+#endif
+
+#endif /* _POSIX_VERSION */
+
+/* ANSI/ISO C, POSIX.1-200x, XPG 4.2, and C language type limits.
+   Defined only if the system include files and <typemax.h> don't. */
+
+#ifndef CHAR_MAX
+#  define CHAR_MAX     127
+#endif
+#ifndef CHAR_MIN
+#  define CHAR_MIN     -128
+#endif
+#ifndef SCHAR_MAX
+#  define SCHAR_MAX    127
+#endif
+#ifndef SCHAR_MIN
+#  define SCHAR_MIN    -128
+#endif
+
+#ifndef INT_BIT
+#  define INT_BIT      (sizeof (int) * CHAR_BIT)
+#endif
+
+#ifndef LONG_BIT
+#  define LONG_BIT     (sizeof (long int) * CHAR_BIT)
+#endif
+
+#ifndef WORD_BIT
+#  define WORD_BIT     (sizeof (int) * CHAR_BIT)
+#endif
+
+#if !defined (PRIdMAX)
+#  if HAVE_LONG_LONG
+#    define PRIdMAX     "lld"
+#  else
+#    define PRIdMAX     "ld"
+#  endif
+#endif
+
+#endif /* _GETCONF_H */
index 1edca6c555b9a8d1265af66112f6a8acc743f0e3..f9f022a6082b4cf4f51bb8e7b60a169fa5831522 100644 (file)
@@ -79,11 +79,13 @@ file_head (fp, cnt)
     {
       while ((ch = getc (fp)) != EOF)
        {
+         QUIT;
          if (putchar (ch) == EOF)
            {
              builtin_error ("write error: %s", strerror (errno));
              return EXECUTION_FAILURE;
            }
+         QUIT;
          if (ch == '\n')
            break;
        }
@@ -141,6 +143,7 @@ head_builtin (list)
          printf ("%s==> %s <==\n", opt ? "" : "\n", l->word->word);
          opt = 0;
        }
+      QUIT;
       rval = file_head (fp, nline);
       fclose (fp);
     }
index d5d395510b7c224116960fee1892a3d6b7c4c19b..a5b49309e3d57bf2af1c7552a1344b59a314d1f8 100644 (file)
@@ -228,7 +228,7 @@ char *mkdir_doc[] = {
        "a symbolic mode is used, the operations are interpreted relative to",
        "an initial mode of \"a=rwx\".  The -p option causes any required",
        "intermediate directories in PATH to be created.  The directories",
-       "are created with permssion bits of rwxrwxrwx as modified by the current",
+       "are created with permission bits of rwxrwxrwx as modified by the current",
        "umask, plus write and search permissions for the owner.  mkdir",
        "returns 0 if the directories are created successfully, and non-zero",
        "if an error occurs.",
index 77e3f7c1b1013efba884035a37d6c92f8d924034..5b15258b21e467af69f9deb538747c4020a0f720 100644 (file)
@@ -3,23 +3,24 @@
  */
 #include <config.h>
 
-#include <fcntl.h>
 #include <errno.h>
 
 #include "builtins.h"
 #include "shell.h"
+#include "common.h"
 
 #ifndef errno
 extern int errno;
 #endif
 
-extern char **make_builtin_argv ();
+extern char **make_builtin_argv (WORD_LIST *, int *);
 extern char **export_env;
 
-extern int perl_main();
+extern void perl_close(void);
+extern int perl_main(int, char **, char **);
 
-bperl_builtin(list)
-WORD_LIST *list;
+int
+bperl_builtin(WORD_LIST *list)
 {
        char    **v;
        int     c, r;
@@ -31,6 +32,12 @@ WORD_LIST *list;
        return r;
 }
 
+void
+bperl_builtin_unload (char *s)
+{
+       perl_close();
+}
+
 char *bperl_doc[] = {
        "An interface to a perl5 interpreter.",
        (char *)0
index 92a60387d8d928e894af987c12ab380b7e9e120a..89438af1698195c69f51f26727720400d225eb34 100644 (file)
@@ -1,15 +1,29 @@
 #include <EXTERN.h>               /* from the Perl distribution     */
 #include <perl.h>                 /* from the Perl distribution     */
 
-extern void xs_init _((void));
+#define iperl my_perl          /* I guess the name `my_perl' is required */
+
+extern void xs_init (pTHX);
 
 static PerlInterpreter *iperl;  /***    The Perl interpreter    ***/
 
+static int first = 1;
+
+void
+perl_close (void)
+{
+       PERL_SYS_TERM();
+}
+
 int
 perl_main(int argc, char **argv, char **env)
 {
        int     r;
 
+       if (first) {
+               first = 0;
+               PERL_SYS_INIT3(&argc, &argv, &env);
+       }
        iperl = perl_alloc();
        perl_construct(iperl);
        perl_parse(iperl, xs_init, argc, argv, (char **)NULL);
index 0120dbf41bccd7a37b8e2838ca4a6956a1f21f3e..d6c590352bda8f2bfb7bbe840ccc146d8dd4aa31 100644 (file)
@@ -181,7 +181,8 @@ printargs (list, ofp)
   for (sawc = 0, l = list; l; l = l->next)
     {
       ostr = ansicstr (l->word->word, strlen (l->word->word), 0, &sawc, (int *)0);
-      fprintf (ofp, "%s", ostr);
+      if (ostr)
+       fprintf (ofp, "%s", ostr);
       free (ostr);
       if (sawc)
         return (0);
index 0974ac41b15a344a46a09b7cc9d75b4a9a60eb23..ef836713827ee0787a809e21f44aa1f9889a40a3 100644 (file)
@@ -1,10 +1,13 @@
 /*
  * realpath -- canonicalize pathnames, resolving symlinks
  *
- * usage: realpath [-csv] pathname [pathname...]
+ * usage: realpath [-cqsv] [-a name] pathname [pathname...]
  *
- * options:    -c      check whether or not each resolved path exists
- *             -s      no output, exit status determines whether path is valid
+ * options:    -a name assign each canonicalized pathname to indexed array
+ *                     variable NAME
+ *             -c      check whether or not each resolved path exists
+ *             -q      no output, exit status determines whether path is valid
+ *             -s      strip . and .. from the pathname only, no symlink resolution
  *             -v      produce verbose output
  *
  *
@@ -19,7 +22,7 @@
  */
 
 /*
-   Copyright (C) 1999-2009 Free Software Foundation, Inc.
+   Copyright (C) 1999-2009,2021,2022 Free Software Foundation, Inc.
 
    This file is part of GNU Bash.
    Bash is free software: you can redistribute it and/or modify
@@ -61,25 +64,43 @@ extern int  errno;
 extern char    *sh_realpath();
 
 int
-realpath_builtin(list)
-WORD_LIST      *list;
+realpath_builtin(WORD_LIST *list)
 {
-       int     opt, cflag, vflag, sflag, es;
-       char    *r, realbuf[PATH_MAX], *p;
+       int     opt, cflag, vflag, qflag, sflag, aflag, es;
+       char    *r, realbuf[PATH_MAX], *p, *newpath;
        struct stat sb;
+#if defined (ARRAY_VARS)
+       arrayind_t      ind;
+       char    *aname;
+       SHELL_VAR       *v;
+#endif
 
        if (list == 0) {
                builtin_usage();
                return (EX_USAGE);
        }
 
-       vflag = cflag = sflag = 0;
+       vflag = cflag = qflag = aflag = sflag = 0;
+#if defined (ARRAY_VARS)
+       aname = NULL;
+       v = NULL;
+       ind = 0;
+#endif
        reset_internal_getopt();
-       while ((opt = internal_getopt (list, "csv")) != -1) {
+       while ((opt = internal_getopt (list, "a:cqsv")) != -1) {
                switch (opt) {
+#if defined (ARRAY_VARS)
+               case 'a':
+                       aflag = 1;
+                       aname = list_optarg;
+                       break;
+#endif
                case 'c':
                        cflag = 1;
                        break;
+               case 'q':
+                       qflag = 1;
+                       break;
                case 's':
                        sflag = 1;
                        break;
@@ -100,26 +121,61 @@ WORD_LIST *list;
                return (EX_USAGE);
        }
 
+#if defined (ARRAY_VARS)
+       if (aflag && legal_identifier (aname) == 0) {
+               sh_invalidid(aname);
+               return (EXECUTION_FAILURE);
+       }
+       if (aname && builtin_unbind_variable (aname) == -2)
+               return (EXECUTION_FAILURE);
+       if (aname) {
+               v = find_or_make_array_variable (aname, 1);
+               if (v == 0 || readonly_p (v) || noassign_p (v)) {
+                       if (v && readonly_p (v))
+                               err_readonly (aname);
+                       return (EXECUTION_FAILURE);
+               } else if (array_p (v) == 0) {
+                       builtin_error ("%s: not an indexed array", aname);
+                       return (EXECUTION_FAILURE);
+               }
+               if (invisible_p (v))
+                       VUNSETATTR (v, att_invisible);
+               array_flush (array_cell (v));
+       }
+#endif
+
        for (es = EXECUTION_SUCCESS; list; list = list->next) {
                p = list->word->word;
-               r = sh_realpath(p, realbuf);
+               if (sflag) {
+                       /* sh_canonpath doesn't convert to absolute pathnames */
+                       newpath = make_absolute(p, get_string_value("PWD"));
+                       r = sh_canonpath(newpath, PATH_CHECKDOTDOT|PATH_CHECKEXISTS);
+                       free(newpath);
+               } else
+                       r = sh_realpath(p, realbuf);
                if (r == 0) {
                        es = EXECUTION_FAILURE;
-                       if (sflag == 0)
+                       if (qflag == 0)
                                builtin_error("%s: cannot resolve: %s", p, strerror(errno));
                        continue;
                }
-               if (cflag && (stat(realbuf, &sb) < 0)) {
+               if (cflag && (stat(r, &sb) < 0)) {
                        es = EXECUTION_FAILURE;
-                       if (sflag == 0)
+                       if (qflag == 0)
                                builtin_error("%s: %s", p, strerror(errno));
                        continue;
                }
-               if (sflag == 0) {
+               if (aflag) {
+                       bind_array_element (v, ind, r, 0);
+                       ind++;
+               }
+               if (qflag == 0) {
                        if (vflag)
                                printf ("%s -> ", p);
-                       printf("%s\n", realbuf);
+                       printf("%s\n", r);
                }
+               if (sflag)
+                       free (r);
        }
        return es;
 }
@@ -128,10 +184,16 @@ char *realpath_doc[] = {
        "Display pathname in canonical form.",
        "",
        "Display the canonicalized version of each PATHNAME argument, resolving",
-       "symbolic links.  The -c option checks whether or not each resolved name",
-       "exists.  The -s option produces no output; the exit status determines the",
-       "validity of each PATHNAME.  The -v option produces verbose output.  The",
-       "exit status is 0 if each PATHNAME was resolved; non-zero otherwise.",
+       "symbolic links.",
+       "The -a option stores each canonicalized PATHNAME argument into the indexed",
+       "array VARNAME.",
+       "The -c option checks whether or not each resolved name exists.",
+       "The -q option produces no output; the exit status determines the",
+       "validity of each PATHNAME, but any array assignment is still performed.",
+       "If the -s option is supplied, canonicalize . and .. pathname components",
+       "without resolving symbolic links.",
+       "The -v option produces verbose output.",
+       "The exit status is 0 if each PATHNAME was resolved; non-zero otherwise.",
        (char *)NULL
 };
 
@@ -140,6 +202,6 @@ struct builtin realpath_struct = {
        realpath_builtin,       /* function implementing the builtin */
        BUILTIN_ENABLED,        /* initial flags for builtin */
        realpath_doc,           /* array of long documentation strings */
-       "realpath [-csv] pathname [pathname...]",       /* usage synopsis */
+       "realpath [-a varname] [-cqsv] pathname [pathname...]", /* usage synopsis */
        0                       /* reserved for internal use */
 };
index 0af5493c8065c8f42d93289c6d178c9d3fba33cc..d8d1522b81fa205ae6f1c1eb9fedbca724ae9677 100644 (file)
@@ -59,7 +59,8 @@ _remove_directory(const char *dirname)
          char *fname;
          int fnsize;
 #endif
-         
+
+         QUIT;   
           if (*dp->d_name == '.' && (dp->d_name[1] == 0 || (dp->d_name[1] == '.' && dp->d_name[2] == 0)))
             continue;
 
@@ -76,6 +77,7 @@ _remove_directory(const char *dirname)
 #ifndef __GNUC__
            free (fname);
 #endif
+          QUIT;
         }
 
       closedir(dir);
@@ -98,6 +100,7 @@ rm_file(const char *fname)
   if (unlink (fname) == 0)
     return 0;
 
+  QUIT;
   /* If FNAME is a directory glibc returns EISDIR but correct POSIX value
      would be EPERM.  If we get that error and FNAME is a directory and -r
      was supplied, recursively remove the directory and its contents */
@@ -155,6 +158,7 @@ rm_builtin (list)
 
   for (l = list; l; l = l->next)
     {
+      QUIT;
       if (rm_file(l->word->word) && force == 0)
        rval = EXECUTION_FAILURE;
     }
index e56240791f9510d078db01ac7d92480a82905891..f8eec5bbae65587560ea0a7aa57e75c31bdc8cdb 100644 (file)
 extern int errno;
 #endif
 
+#if defined (PRI_MACROS_BROKEN)
+#  undef PRIdMAX
+#endif
+
+#if !defined (PRIdMAX)
+#  if HAVE_LONG_LONG
+#    define PRIdMAX     "lld"
+#  else
+#    define PRIdMAX     "ld"
+#  endif
+#endif
+
 #if defined (HAVE_LONG_DOUBLE) && HAVE_DECL_STRTOLD && !defined(STRTOLD_BROKEN)
 typedef long double floatmax_t;
 #  define FLOATMAX_CONV "L"
index fc2203d4a8962ec3e9cf52ef075a64fc85d1063e..204601f5282eda3091e278654b71e99ace331623 100644 (file)
@@ -2,10 +2,12 @@
  * sleep -- sleep for fractions of a second
  *
  * usage: sleep seconds[.fraction]
+ *
+ * as an extension, we support the GNU time interval format (2m20s)
  */
 
 /*
-   Copyright (C) 1999-2020 Free Software Foundation, Inc.
+   Copyright (C) 1999-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash.
    Bash is free software: you can redistribute it and/or modify
 #include <stdio.h>
 #include "chartypes.h"
 
-#include "shell.h"
-#include "builtins.h"
-#include "common.h"
+#include "loadables.h"
+
+#define S_SEC  1
+#define S_MIN  (60*S_SEC)
+#define S_HOUR (60*S_MIN)
+#define S_DAY  (24*S_HOUR)
+
+static int
+parse_gnutimefmt (char *string, long *sp, long *up)
+{
+       int     c, r;
+       char    *s, *ep;
+       long    tsec, tusec, accumsec, accumusec, t;
+       int     mult;
+
+       tsec = tusec = 0;
+       accumsec = accumusec = 0;
+       mult = 1;
+
+       for (s = string; s && *s; s++) {
+               r = uconvert(s, &accumsec, &accumusec, &ep);
+               if (r == 0 && *ep == 0)
+                       return r;
+               c = *ep;
+               mult = 1;
+               switch (c) {
+                       case '\0':
+                       case 's':
+                               mult = S_SEC;
+                               break;
+                       case 'm':
+                               mult = S_MIN;
+                               break;
+                       case 'h':
+                               mult = S_HOUR;
+                               break;
+                       case 'd':
+                               mult = S_DAY;
+                               break;
+                       default:
+                               return 0;
+               }
+
+               /* multiply the accumulated value by the multiplier */
+               t = accumusec * mult;
+               accumsec = accumsec * mult + (t / 1000000);
+               accumusec = t % 1000000;
+
+               /* add to running total */
+               tsec += accumsec;
+               tusec += accumusec;
+               if (tusec >= 1000000) {
+                       tsec++;
+                       tusec -= 1000000;
+               }
+
+               /* reset and continue */
+               accumsec = accumusec = 0;
+               mult = 1;
+               if (c == 0)
+                       break;
+               s = ep;
+       }
+
+       if (sp)
+               *sp = tsec;
+       if (up)
+               *up = tusec;
+
+       return 1;
+}
 
 int
-sleep_builtin (list)
-WORD_LIST      *list;
+sleep_builtin (WORD_LIST *list)
 {
        long    sec, usec;
        char    *ep;
@@ -72,14 +141,22 @@ WORD_LIST  *list;
        }
 
        r = uconvert(list->word->word, &sec, &usec, &ep);
-       /* Maybe postprocess conversion failures here based on EP */
+       /*
+        * Maybe postprocess conversion failures here based on EP
+        *
+        * A heuristic: if the conversion failed, but the argument appears to
+        * contain a GNU-like interval specifier (e.g. "1m30s"), try to parse
+        * it. If we can't, return the right exit code to tell
+        * execute_builtin to try and execute a disk command instead.
+        */
+       if (r == 0 && (strchr ("dhms", *ep) || strpbrk (list->word->word, "dhms")))
+               r = parse_gnutimefmt (list->word->word, &sec, &usec);
                
-       if (r) {
+       if (r) {
                fsleep(sec, usec);
                QUIT;
                return(EXECUTION_SUCCESS);
-       }
-
+       }
        builtin_error("%s: bad sleep interval", list->word->word);
        return (EXECUTION_FAILURE);
 }
@@ -88,6 +165,7 @@ static char *sleep_doc[] = {
        "Suspend execution for specified period.",
        ""
        "sleep suspends execution for a minimum of SECONDS[.FRACTION] seconds.",
+       "As an extension, sleep accepts GNU-style time intervals (e.g., 2m30s).",
        (char *)NULL
 };
 
index 52b9580fb6743c72f4af11ff9e248ab0fabad5ce..1e60e7b6d005e5c65317cc2294432855fd5b09c6 100644 (file)
@@ -3,7 +3,7 @@
 /* See Makefile for compilation details. */
 
 /*
-   Copyright (C) 2016 Free Software Foundation, Inc.
+   Copyright (C) 2016,2022 Free Software Foundation, Inc.
 
    This file is part of GNU Bash.
    Bash is free software: you can redistribute it and/or modify
@@ -72,6 +72,13 @@ static char *arraysubs[] =
     0
   };
 
+#define DEFTIMEFMT     "%a %b %e %k:%M:%S %Z %Y"
+#ifndef TIMELEN_MAX
+#  define TIMELEN_MAX 128
+#endif
+
+static char *stattime (time_t, const char *);
+
 static int
 getstat (fname, flags, sp)
      const char *fname;
@@ -253,24 +260,33 @@ statmode(mode)
 }
 
 static char *
-stattime (t)
+stattime (t, timefmt)
      time_t t;
+     const char *timefmt;
 {
   char *tbuf, *ret;
+  const char *fmt;
   size_t tlen;
+  struct tm *tm;
+
+  fmt = timefmt ? timefmt : DEFTIMEFMT;
+  tm = localtime (&t);
+
+  ret = xmalloc (TIMELEN_MAX);
+
+  tlen = strftime (ret, TIMELEN_MAX, fmt, tm);
+  if (tlen == 0)
+    tlen = strftime (ret, TIMELEN_MAX, DEFTIMEFMT, tm);
 
-  tbuf = ctime (&t);
-  tlen = strlen (tbuf);
-  ret = savestring (tbuf);
-  ret[tlen-1] = '\0';
   return ret;
 }
 
 static char *
-statval (which, fname, flags, sp)
+statval (which, fname, flags, fmt, sp)
      int which;
      char *fname;
      int flags;
+     char *fmt;
      struct stat *sp;
 {
   int temp;
@@ -296,11 +312,11 @@ statval (which, fname, flags, sp)
     case ST_SIZE:
       return itos (sp->st_size);
     case ST_ATIME:
-      return ((flags & 2) ? stattime (sp->st_atime) : itos (sp->st_atime));
+      return ((flags & 2) ? stattime (sp->st_atime, fmt) : itos (sp->st_atime));
     case ST_MTIME:
-      return ((flags & 2) ? stattime (sp->st_mtime) : itos (sp->st_mtime));
+      return ((flags & 2) ? stattime (sp->st_mtime, fmt) : itos (sp->st_mtime));
     case ST_CTIME:
-      return ((flags & 2) ? stattime (sp->st_ctime) : itos (sp->st_ctime));
+      return ((flags & 2) ? stattime (sp->st_ctime, fmt) : itos (sp->st_ctime));
     case ST_BLKSIZE:
       return itos (sp->st_blksize);
     case ST_BLOCKS:
@@ -316,11 +332,12 @@ statval (which, fname, flags, sp)
 }
 
 static int
-loadstat (vname, var, fname, flags, sp)
+loadstat (vname, var, fname, flags, fmt, sp)
      char *vname;
      SHELL_VAR *var;
      char *fname;
      int flags;
+     char *fmt;
      struct stat *sp;
 {
   int i;
@@ -330,7 +347,7 @@ loadstat (vname, var, fname, flags, sp)
   for (i = 0; arraysubs[i]; i++)
     {
       key = savestring (arraysubs[i]);
-      value = statval (i, fname, flags, sp);
+      value = statval (i, fname, flags, fmt, sp);
       v = bind_assoc_variable (var, vname, key, value, ASS_FORCE);
     }
   return 0;
@@ -341,15 +358,16 @@ stat_builtin (list)
      WORD_LIST *list;
 {
   int opt, flags;
-  char *aname, *fname;
+  char *aname, *fname, *timefmt;
   struct stat st;
   SHELL_VAR *v;
 
   aname = "STAT";
   flags = 0;
+  timefmt = 0;
 
   reset_internal_getopt ();
-  while ((opt = internal_getopt (list, "A:Ll")) != -1)
+  while ((opt = internal_getopt (list, "A:F:Ll")) != -1)
     {
       switch (opt)
        {
@@ -362,6 +380,9 @@ stat_builtin (list)
        case 'l':
          flags |= 2;
          break;
+       case 'F':
+         timefmt = list_optarg;
+         break;
        CASE_HELPOPT;
        default:
          builtin_usage ();
@@ -369,6 +390,12 @@ stat_builtin (list)
        }
     }
 
+  if (legal_identifier (aname) == 0)
+    {
+      sh_invalidid (aname);
+      return (EXECUTION_FAILURE);
+    }
+
   list = loptend;
   if (list == 0)
     {
@@ -376,6 +403,10 @@ stat_builtin (list)
       return (EX_USAGE);
     }
 
+
+#if 0
+  unbind_variable (aname);
+#endif
   fname = list->word->word;
 
   if (getstat (fname, flags, &st) < 0)
@@ -384,14 +415,13 @@ stat_builtin (list)
       return (EXECUTION_FAILURE);
     }
 
-  unbind_variable (aname);
-  v = make_new_assoc_variable (aname);
+  v = find_or_make_array_variable (aname, 3);
   if (v == 0)
     {
       builtin_error ("%s: cannot create variable", aname);
       return (EXECUTION_FAILURE);
     }
-  if (loadstat (aname, v, fname, flags, &st) < 0)
+  if (loadstat (aname, v, fname, flags, timefmt, &st) < 0)
     {
       builtin_error ("%s: cannot assign file status information", aname);
       unbind_variable (aname);
@@ -409,11 +439,15 @@ char *stat_doc[] = {
        "",
        "Take a filename and load the status information returned by a",
        "stat(2) call on that file into the associative array specified",
-       "by the -A option.  The default array name is STAT.  If the -L",
-       "option is supplied, stat does not resolve symbolic links and",
-       "reports information about the link itself.  The -l option results",
-       "in longer-form listings for some of the fields. The exit status is 0",
-       "unless the stat fails or assigning the array is unsuccessful.",
+       "by the -A option.  The default array name is STAT.",
+       "",
+       "If the -L option is supplied, stat does not resolve symbolic links",
+       "and reports information about the link itself.  The -l option results",
+       "in longer-form listings for some of the fields. When -l is used,",
+       "the -F option supplies a format string passed to strftime(3) to",
+       "display the file time information.",
+       "The exit status is 0 unless the stat fails or assigning the array",
+       "is unsuccessful.",
        (char *)NULL
 };
 
index 283f23f1acc695f755af40b13e0abe013c263b65..0365aa9a49b3e454459c307754838967516ad0ed 100644 (file)
@@ -3,7 +3,7 @@
 /* See Makefile for compilation details. */
 
 /*
-   Copyright (C) 1999-2009 Free Software Foundation, Inc.
+   Copyright (C) 1999-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash.
    Bash is free software: you can redistribute it and/or modify
@@ -121,6 +121,7 @@ tee_builtin (list)
           fl = fl->next;
           fl->next = (FLIST *)NULL;
         }
+      QUIT;
     }
 
   while ((nr = read(0, buf, TEE_BUFSIZE)) > 0)
@@ -137,6 +138,7 @@ tee_builtin (list)
                break;
              }
             bp += nw;
+            QUIT;
          }
        while (n -= nw);
       }
@@ -156,7 +158,8 @@ tee_builtin (list)
       tee_flist = tee_flist->next;
       free (fl);
     }
-  
+
+  QUIT;  
   return (rval);
 }
 
index febf518ba4ee5fb025e43d1dfd5f0619bbc49d39..381df2578c754e31d9b8e3ef091396b59e6f2eb2 100644 (file)
@@ -3,7 +3,7 @@
 /* See Makefile for compilation details. */
 
 /*
-   Copyright (C) 1999-2009 Free Software Foundation, Inc.
+   Copyright (C) 1999-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash.
    Bash is free software: you can redistribute it and/or modify
@@ -55,6 +55,7 @@ tty_builtin (list)
   list = loptend;
 
   t = ttyname (0);
+  QUIT;
   if (sflag == 0)
     puts (t ? t : "not a tty");
   return (t ? EXECUTION_SUCCESS : EXECUTION_FAILURE);
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
diff --git a/examples/scripts/bcalc b/examples/scripts/bcalc
new file mode 100644 (file)
index 0000000..bc7e2b4
--- /dev/null
@@ -0,0 +1,104 @@
+#! /bin/bash
+#
+# bcalc - a coproc example that uses bc to evaluate floating point expressions
+#
+#   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/>.
+#
+# If supplied command-line arguments, it uses them as the expression to have
+# bc evaluate, and exits after reading the result. Otherwise, it enters an
+# interactive mode, reading expressions and passing them to bc for evaluation,
+# with line editing and history.
+#
+# You could even use this to write bc programs, but you'd have to rework the
+# single-line REPL a little bit to do that (and get over the annoying timeout
+# on the read)
+#
+# Chet Ramey
+# chet.ramey@case.edu
+
+# we force stderr to avoid synchronization issues on calculation errors, even
+# with the read timeout
+init()
+{
+       coproc BC { bc -q 2>&1; }
+       # set scale
+       printf "scale = 10\n" >&${BC[1]}
+       # bash automatically sets BC_PID to the coproc pid; we store it so we
+       # can be sure to use it even after bash reaps the coproc and unsets
+       # the variables
+       coproc_pid=$BC_PID
+}
+
+# not strictly necessary; the pipes will be closed when the program exits
+# but we can use it in reset() below
+fini()
+{
+       eval exec "${BC[1]}>&- ${BC[0]}<&-"
+}
+
+reset()
+{
+       fini    # close the old pipes
+
+       sleep 1
+       kill -1 $coproc_pid >/dev/null 2>&1     # make sure the coproc is dead
+       unset coproc_pid
+
+       init            
+}
+       
+# set a read timeout of a half second to avoid synchronization problems
+calc()
+{
+       printf "%s\n" "$1" >&${BC[1]}
+       read -t 0.5 ANSWER <&${BC[0]}
+}
+
+init
+
+# if we have command line options, process them as a single expression and
+# print the result. we could just run `bc <<<"scale = 10 ; $*"' and be done
+# with it, but we init the coproc before this and run the calculation through
+# the pipes in case we want to do something else with the answer
+
+if [ $# -gt 0 ] ; then
+       calc "$*"
+       printf "%s\n" "$ANSWER"
+       fini
+       exit 0
+fi
+
+# we don't want to save the history anywhere
+unset HISTFILE
+
+while read -e -p 'equation: ' EQN
+do
+       case "$EQN" in
+       '')             continue ;;
+       exit|quit)      break ;;
+       reset)          reset ; continue ;;
+       esac
+
+       # save to the history list
+       history -s "$EQN"
+
+       # run it through bc
+       calc "$EQN"
+       if [ -n "$ANSWER" ] ; then
+               printf "%s\n" "$ANSWER"
+       fi
+done
+fini
+
+exit 0
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
diff --git a/examples/shellmath/LICENSE b/examples/shellmath/LICENSE
new file mode 100644 (file)
index 0000000..e3bf3bb
--- /dev/null
@@ -0,0 +1,677 @@
+Shellfloat is copyright (c) 2020 by Michael Wood.
+================================================================================
+
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  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, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 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 <https://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    <program>  Copyright (C) <year>  <name of author>
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<https://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<https://www.gnu.org/licenses/why-not-lgpl.html>.
diff --git a/examples/shellmath/README.md b/examples/shellmath/README.md
new file mode 100644 (file)
index 0000000..1b47256
--- /dev/null
@@ -0,0 +1,166 @@
+# Shellmath
+Introducing decimal arithmetic libraries for the Bash shell, because
+they said it couldn't be done... and because:
+
+.
+
+![image info](./image.png)
+
+## Quick-start guide
+Download this project and source the file `shellmath.sh` into your shell script,
+then fire away at the shellmath API!
+
+The ___basic___ API looks like this:
+```
+    _shellmath_add        arg1   arg2  [...]  argN
+    _shellmath_subtract   arg1   arg2               # means arg1 - arg2
+    _shellmath_multiply   arg1   arg2  [...]  argN
+    _shellmath_divide     arg1   arg2               # means arg1 / arg2
+```
+
+The ___extended___ API introduces one more function:
+```
+    _shellmath_getReturnValue   arg
+```
+
+This function optimizes away the need for ___$(___ subshelling ___)___ in order to capture `shellmath`'s output.
+To use this feature, just be sure to set `__shellmath_isOptimized=1` at the top
+of your script. (You can find an example in `faster_e_demo.sh`.)
+
+Operands to the _shellmath_ functions can be integers or decimal
+numbers presented in either standard or scientific notation:
+```
+    _shellmath_add   1.009   4.223e-2
+    _shellmath_getReturnValue   sum
+    echo "The sum is $sum"
+```
+Addition and multiplication are of arbitrary arity; try this on for size:
+```
+    _shellmath_multiply  1  2  3  4  5  6
+    _shellmath_getReturnValue   sixFactorial
+    echo "6 factorial is $sixFactorial"
+```
+Subtraction and division, OTOH, are exclusively binary operations. 
+
+## The demos
+For a gentle introduction to `shellmath` run the demo `slower_e_demo.sh` 
+with a small whole-number argument, say 15:
+```
+$ slower_e_demo.sh 15
+e = 2.7182818284589936
+```
+
+This script uses a few `shellmath` API calls to calculate *e*, the mathematical
+constant also known as [Euler's number](https://oeis.org/A001113). The argument 
+*15* tells the script to evaluate the *15th-degree* Maclaurin polynomial for *e*.
+(That's the Taylor polynomial centered at 0.) Take a look inside the script to
+see how it uses the `shellmath` APIs.
+
+There is another demo script very much like this one but *different*, and the
+sensitive user can *feel* the difference. Try the following, but don't blink 
+or you'll miss it ;)
+```
+$ faster_e_demo.sh 15
+e = 2.7182818284589936
+```
+
+Did you feel the difference? Try the `-t` option with both scripts; this will produce
+timing statistics. Here are my results
+when running from my minGW64 command prompt on Windows 10 with an Intel i3 Core CPU:
+```
+$ for n in {1..5}; do faster_e_demo.sh -t 15 2>&1; done | awk '/^real/ {print $2}'
+0m0.055s
+0m0.051s
+0m0.056s
+0m0.054s
+0m0.054s
+
+$ for n in {1..5}; do slower_e_demo.sh -t 15 2>&1; done | awk '/^real/ {print $2}'
+0m0.498s
+0m0.594s
+0m0.536s
+0m0.511s
+0m0.580s
+```
+
+(When sizing up these timings, do keep in mind that ___we are timing the
+calculation of e from its Maclaurin polynomial. Every invocation of either
+script is exercising the shellmath arithmetic subroutines 31 times.___)
+
+The comment header in `faster_e_demo.sh` explains the optimization and shows
+how to put this faster version to work for you.
+
+## Runtime efficiency competitive with awk and bc
+The file `timingData.txt` captures the results of some timing experiments that compare 
+`shellmath` against the GNU versions of the calculators `awk` and `bc`. The experiments
+exercised each of the arithmetic operations and captured the results in a shell variable.
+The result summary below shows that `shellmath` is competitive with `awk` and runs faster
+than `bc` in these experiments. (One commenter noted that the differences in execution speed
+can be partially explained by the fact that `shellmath` and `awk` use finite precision 
+whereas `bc` uses arbitrary precision. Another factor in these measurements is the need to 
+subshell 'awk' and 'bc' to capture their results, whereas 'shellmath' writes directly to
+the shell's global memory.)
+
+Here are the run times of `shellmath` as a percentage of the `awk` and `bc` equivalents:
+```
+                    versus awk    versus bc
+   Addition:          82.2%         40.6%
+   Subtraction:       95.9%         50.5%
+   Multiplication:   135.9%         73.3%
+   Division:          80.3%         43.2%
+```
+
+Astute observers will note the experiments provide approximations to the sum, difference, 
+product, and quotient of *pi* and *e*. Unfortunately I did not gain insight as to which 
+of these values, if any, are
+[transcendental](https://en.wikipedia.org/wiki/Transcendental_number#Possible_transcendental_numbers).
+
+You can find a deeper discussion of shellmath's runtime efficiency
+[here](https://github.com/clarity20/shellmath/wiki/Shellmath-and-runtime-efficiency).
+
+## Background
+The Bash shell does not have built-in operators for decimal arithmetic, making it
+something of an oddity among well-known, widely-used programming languages. For the most part,
+practitioners in need of powerful computational building blocks have naturally opted
+for *other* languages and tools. Their widespread availability has diverted attention
+from the possibility of *implementing* decimal arithmetic in Bash and it's easy to assume
+that this ***cannot*** be done:
+
++ From the indispensable _Bash FAQ_ (on _Greg's Wiki_): [How can I calculate with floating point numbers?](http://mywiki.wooledge.org/BashFAQ/022)  
+  *"For most operations... an external program must be used."*
++ From Mendel Cooper's wonderful and encyclopedic _Advanced Bash Scripting Guide_:  
+  [Bash does not understand floating point arithmetic. Use bc instead.](https://tldp.org/LDP/abs/html/ops.html#NOFLOATINGPOINT)
++ From a community discussion on Stack Overflow, _How do I use floating point division in bash?_  
+  The user's [preferred answer](https://stackoverflow.com/questions/12722095/how-do-i-use-floating-point-division-in-bash#12722107)
+  is a good example of _prevailing thought_ on this subject.
+
+Meanwhile, 
+
++ Bash maintainer (BDFL?) Chet Ramey sounds a (brighter?) note in [The Bash Reference Guide, Section 6.5](https://tiswww.case.edu/php/chet/bash/bashref.html#Shell-Arithmetic)
+  by emphasizing what the built-in arithmetic operators ***can*** do.
+
+But finally, a glimmer of hope:
+
++ A [diamond-in-the-rough](http://stackoverflow.com/a/24431665/3776858) buried elsewhere
+  on Stack Overflow.  
+  This down-and-dirty milestone computes the decimal quotient of two integer arguments. At a casual
+  glance, it seems to have drawn inspiration from the [Euclidean algorithm](https://mathworld.wolfram.com/EuclideanAlgorithm.html)
+  for computing GCDs, an entirely different approach than `shellmath`'s.
+
+Please try `shellmath` on for size and draw your own conclusions!
+
+## How it works
+`shellmath` splits decimal numbers into their integer and fractional parts,
+performs the appropriate integer operations on the parts, and recombines the results.
+(In the spirit of Bash, numerical overflow is silently ignored.)
+
+Because if we can get carrying, borrowing, place value, and the distributive
+law right, then the sky's the limit! As they say--erm, as they ___said___ in Rome,
+
+        Ad astra per aspera.
+
+## And now...
+You can run your floating-point calculations directly in Bash!
+
+## Please see also:
+[A short discussion on arbitrary precision and shellmath](https://github.com/clarity20/shellmath/wiki/Shellmath-and-arbitrary-precision-arithmetic)
diff --git a/examples/shellmath/assert.sh b/examples/shellmath/assert.sh
new file mode 100644 (file)
index 0000000..bc4122e
--- /dev/null
@@ -0,0 +1,85 @@
+#!/bin/env bash
+###############################################################################
+# Internal test engine functions
+###############################################################################
+
+RED='\033[0;31m'
+GREEN='\033[0;32m'
+NO_COLOR='\033[0m'
+
+function _shellmath_assert_returnCode()
+{
+    _shellmath_assert_functionReturn -c "$@"
+    return $?
+}
+
+function _shellmath_assert_returnString()
+{
+    _shellmath_assert_functionReturn "$@"
+    return $?
+}
+
+function _shellmath_assert_functionReturn()
+{
+    if [[ $# -lt 2 ]]; then
+        echo "USAGE: ${FUNCNAME[0]} [-c] returnStringOrCode functionName [ functionArgs ... ]"
+        echo "    By default, asserts against the string output by the function."
+        echo "    Use -c to assert against the numeric return code instead."
+        return "${__shellmath_returnCodes[FAIL]}"
+    fi
+
+    if [[ "${1,,}" == '-c' ]]; then
+        mode=RETURN_CODE
+        shift
+    else
+        mode=RETURN_STRING
+    fi
+
+    expectedReturn="$1"
+    func="$2"
+    shift 2
+
+    args=("$@")
+
+    # Exercise the function in optimized mode; it will run faster by avoiding
+    # subshelling. This also suppresses dumping of function output to stdout.
+    __shellmath_isOptimized=${__shellmath_true}
+    "$func" "${args[@]}"
+    returnCode=$?
+    __shellmath_isOptimized=${__shellmath_false}
+
+    # Fetch the return value(s)
+    local numReturnValues
+    declare -a actualReturn
+    _shellmath_getReturnValueCount numReturnValues
+    if ((numReturnValues == 1)); then
+        _shellmath_getReturnValue actualReturn[0]
+    else
+        # Multiple returns? Join them into one string
+        local _i evalString="_shellmath_getReturnValues"
+        for ((_i=0; _i<numReturnValues; _i++)); do
+            evalString+=" actualReturn[$_i]"
+        done
+        eval "$evalString"
+    fi
+
+    if [[ $mode == RETURN_STRING ]]; then
+        if [[ "${actualReturn[*]}" == "$expectedReturn" ]]; then
+            _shellmath_setReturnValue  "${GREEN}ok${NO_COLOR}   "
+            return "$__shellmath_SUCCESS"
+        else
+            _shellmath_setReturnValue "${RED}FAIL${NO_COLOR} (${actualReturn[*]}) "
+            return "$__shellmath_FAIL"
+        fi
+    elif [[ $mode == RETURN_CODE ]]; then
+        if [[ "$returnCode" == "$expectedReturn" ]]; then
+            _shellmath_setReturnValue  "${GREEN}ok${NO_COLOR}   "
+            return "$__shellmath_SUCCESS"
+        else
+            _shellmath_setReturnValue "${RED}FAIL${NO_COLOR} ($returnCode) "
+            return "$__shellmath_FAIL"
+        fi
+    fi
+
+}
+
diff --git a/examples/shellmath/faster_e_demo.sh b/examples/shellmath/faster_e_demo.sh
new file mode 100644 (file)
index 0000000..84558a2
--- /dev/null
@@ -0,0 +1,68 @@
+#!/usr/bin/env bash
+
+###############################################################################
+# This script performs the same task as "slower_e_demo.sh" but with a major
+# performance optimization. The speedup is especially noticeable on GNU
+# emulation layers for Windows such as Cygwin and minGW, where the overhead
+# of subshelling is quite significant.
+#
+# The speedup uses global storage space to simulate pass-and-return by
+# reference so that you can capture the side effects of a function call without
+# writing to stdout and wrapping the call in a subshell. How to use:
+#
+#    Turn on  "__shellmath_isOptimized"  as shown below.
+#    Then instead of invoking  "mySum = $(_shellmath_add  $x  $y)",
+#    call  "_shellmath_add  $x  $y;  _shellmath_getReturnValue  mySum".
+###############################################################################
+
+source shellmath.sh
+
+# Setting the '-t' flag will cause the script to time the algorithm
+if [[ "$1" == '-t' ]]; then
+    do_timing=${__shellmath_true}
+    shift
+fi
+
+if [[ $# -ne 1 ]]; then
+    echo "USAGE: ${BASH_SOURCE##*/}  [-t]  *N*"
+    echo "       Approximates 'e' using the N-th order Maclaurin polynomial"
+    echo "       (i.e. the Taylor polynomial centered at 0)."
+    echo "       Specify the '-t' flag to time the main algorithm."
+    exit 0
+elif [[ ! "$1" =~ ^[0-9]+$ ]]; then
+    echo "Illegal argument. Whole numbers only, please."
+    exit 1
+fi
+
+__shellmath_isOptimized=${__shellmath_true}
+
+
+function run_algorithm()
+{
+    # Initialize
+    n=0;  N=$1;  zero_factorial=1
+
+    # Initialize "e" to its zeroth-order term
+    _shellmath_divide  1  $zero_factorial
+    _shellmath_getReturnValue term
+    e=$term
+
+    # Compute successive terms T(n) := T(n-1)/n and accumulate into e
+    for ((n=1; n<=N; n++)); do
+        _shellmath_divide  "$term"  "$n"
+        _shellmath_getReturnValue term
+        _shellmath_add  "$e"  "$term"
+        _shellmath_getReturnValue e
+    done
+
+    echo "e = $e"
+}
+
+if (( do_timing == __shellmath_true )); then
+    time run_algorithm "$1"
+else
+    run_algorithm "$1"
+fi
+
+exit 0
+
diff --git a/examples/shellmath/image.png b/examples/shellmath/image.png
new file mode 100644 (file)
index 0000000..4d3b898
Binary files /dev/null and b/examples/shellmath/image.png differ
diff --git a/examples/shellmath/runTests.sh b/examples/shellmath/runTests.sh
new file mode 100644 (file)
index 0000000..c9687e5
--- /dev/null
@@ -0,0 +1,124 @@
+#!/bin/env bash
+
+###############################################################################
+# runTests.sh
+#
+# Usage: runTests.sh  [testFile]
+#        where testFile defaults to testCases.in
+#
+# Processes a test file such as the testCases.in included with this package
+###############################################################################
+
+# Process one line from the test cases file. Invoked below through mapfile.
+function _shellmath_runTests()
+{
+    local lineNumber=$1
+    local text=$2
+
+    # Trim leading whitespace
+    [[ $text =~ ^[$' \t']*(.*) ]]
+    text=${BASH_REMATCH[1]}
+
+    # Skip comments and blank lines
+    [[ "$text" =~ ^# || -z $text ]] && return 0
+
+    # Check for line continuation
+    local len="${#text}"
+    if [[ ${text:$((len-1))} == '\' ]]; then
+
+        # Eat the continuation character and add to the buffer
+        __shellfloat_commandBuffer+="${text/%\\/ }"
+        
+        # Defer processing
+        return
+
+    # No line continuation
+    else
+
+        # Assemble the command
+        local command=${__shellfloat_commandBuffer}${text}
+        __shellfloat_commandBuffer=""
+
+        words=($command)
+
+        # Expand first word to an assertion function
+        case ${words[0]} in
+
+            Code)
+                words[0]=_shellmath_assert_return${words[0]}
+
+                # Validate next word as a positive integer
+                if [[ ! "${words[1]}" =~ ^[0-9]+$ ]]; then
+                    echo Line: "$lineNumber": Command "$command"
+                    echo FAIL: \"Code\" requires integer return code
+                    return 1
+                else
+                    nextWord=2
+                fi
+                ;;
+
+            String)
+                words[0]=_shellmath_assert_return${words[0]}
+                # Allow multiword arguments if quoted
+                if [[ ${words[1]} =~ ^\" ]]; then
+                    if [[ ${words[1]} =~ \"$ ]]; then
+                        nextWord=2
+                    else
+                        for ((nextWord=2;;nextWord++)); do
+                            if [[ ${words[nextWord]} =~ \"$ ]]; then
+                                ((nextWord++))
+                                break
+                            fi
+                        done
+                    fi
+                else
+                    nextWord=2
+                fi
+                ;;
+
+            Both)
+                ;;
+
+            *)
+                echo -e ${RED}FAIL${NO_COLOR} Line "$lineNumber": Command "$command": Code or String indicator required
+                return 2
+                ;;
+        esac
+
+        # Expand the next word to a shellmath function name
+        words[nextWord]=_shellmath_${words[nextWord]}
+        if ! type -t "${words[nextWord]}" >/dev/null; then
+            echo "${RED}FAIL${NO_COLOR} Line $lineNumber: Command "$command": Syntax error. Required: String|Code  value  operation  args..."
+            return 3
+        fi
+
+        # Run the command, being respectful of shell metacharacters
+        fullCommand="${words[*]}"
+        eval "$fullCommand"
+        local returnString
+        _shellmath_getReturnValue returnString
+        echo -e "$returnString" Line "$lineNumber": "$command"
+
+    fi
+
+}
+
+
+function _main()
+{
+    source shellmath.sh
+    source assert.sh
+
+    # Initialize certain globals. As "public" functions, the arithmetic
+    # functions need to do this themselves, but there are some "private"
+    # functions that need this here when they are auto-tested.
+    _shellmath_precalc; __shellmath_didPrecalc=$__shellmath_true
+
+    # Process the test file line-by-line using the above runTests() function
+    mapfile -t -c 1 -C _shellmath_runTests -O 1 < "${1:-testCases.in}"
+    
+    exit 0
+}
+
+_main "$@"
+
diff --git a/examples/shellmath/shellmath.sh b/examples/shellmath/shellmath.sh
new file mode 100644 (file)
index 0000000..5804ad2
--- /dev/null
@@ -0,0 +1,1068 @@
+#!/bin/env bash
+################################################################################
+# shellmath.sh
+# Shell functions for floating-point arithmetic using only builtins
+#
+# Copyright (c) 2020 by Michael Wood. All rights reserved.
+#
+# Usage:
+#
+#    source  _thisPath_/_thisFileName_
+#
+#    # Conventional method: call the APIs by subshelling
+#    mySum=$( _shellmath_add 202.895 6.00311 )
+#    echo $mySum
+#
+#    # Optimized method: use hidden globals to simulate more flexible pass-and-return
+#    _shellmath_isOptimized=1
+#    _shellmath_add 44.2 -87
+#    _shellmath_getReturnValue mySum
+#    echo $mySum
+# 
+################################################################################
+
+
+################################################################################
+# Program constants
+################################################################################
+declare -A -r __shellmath_numericTypes=(
+    [INTEGER]=0
+    [DECIMAL]=1
+)
+
+declare -A -r __shellmath_returnCodes=(
+    [SUCCESS]="0:Success"
+    [FAIL]="1:General failure"
+    [ILLEGAL_NUMBER]="2:Invalid argument; decimal number required: '%s'"
+    [DIVIDE_BY_ZERO]="3:Divide by zero error"
+)
+
+declare -r -i __shellmath_true=1
+declare -r -i __shellmath_false=0
+
+declare __shellmath_SUCCESS  __shellmath_FAIL  __shellmath_ILLEGAL_NUMBER
+
+################################################################################
+# Program state
+################################################################################
+declare __shellmath_isOptimized=${__shellmath_false}
+declare __shellmath_didPrecalc=${__shellmath_false}
+
+
+################################################################################
+# Error-handling utilities
+################################################################################
+function _shellmath_getReturnCode()
+{
+    local errorName=$1
+    return "${__shellmath_returnCodes[$errorName]%%:*}"
+}
+
+function _shellmath_warn()
+{
+    # Generate an error message and return control to the caller
+    _shellmath_handleError -r "$@"
+    return $?
+}
+
+function _shellmath_exit()
+{
+    # Generate an error message and EXIT THE SCRIPT / interpreter
+    _shellmath_handleError "$@"
+}
+
+function _shellmath_handleError()
+{
+    # Hidden option "-r" causes return instead of exit
+    local returnDontExit=$__shellmath_false
+    if [[ "$1" == "-r" ]]; then
+        returnDontExit=${__shellmath_true}
+        shift
+    fi
+
+    # Format of $1:  returnCode:msgTemplate
+    [[ "$1" =~ ^([0-9]+):(.*) ]]
+    returnCode=${BASH_REMATCH[1]}
+    msgTemplate=${BASH_REMATCH[2]}
+    shift
+    
+    # Display error msg, making parameter substitutions as needed
+    msgParameters="$*"
+    printf  "$msgTemplate" "${msgParameters[@]}"
+
+    if ((returnDontExit)); then
+        return "$returnCode"
+    else
+        exit "$returnCode"
+    fi
+}
+
+
+################################################################################
+# precalc()
+#
+# Pre-calculates certain global data and by setting the global variable
+# "__shellmath_didPrecalc" records that this routine has been called. As an
+# optimization, the caller should check that global to prevent needless
+# invocations.
+################################################################################
+function _shellmath_precalc()
+{
+    # Set a few global constants
+    _shellmath_getReturnCode SUCCESS; __shellmath_SUCCESS=$?
+    _shellmath_getReturnCode FAIL; __shellmath_FAIL=$?
+    _shellmath_getReturnCode ILLEGAL_NUMBER; __shellmath_ILLEGAL_NUMBER=$?
+
+    # Determine the decimal precision to which we can accurately calculate.
+    # To do this we probe for the threshold at which integers overflow and
+    # take the integer floor of that number's base-10 logarithm.
+    # We check the 64-bit, 32-bit and 16-bit thresholds only.
+    if ((2**63 < 2**63-1)); then
+        __shellmath_precision=18
+        __shellmath_maxValue=$((2**63-1))
+    elif ((2**31 < 2**31-1)); then
+        __shellmath_precision=9
+        __shellmath_maxValue=$((2**31-1))
+    else     ## ((2**15 < 2**15-1))
+        __shellmath_precision=4
+        __shellmath_maxValue=$((2**15-1))
+    fi
+
+    __shellmath_didPrecalc=$__shellmath_true
+}
+
+
+################################################################################
+# Simulate pass-and-return by reference using a secret global storage array
+################################################################################
+
+declare -a __shellmath_storage
+
+function _shellmath_setReturnValues()
+{
+    local -i _i
+
+    for ((_i=1; _i<=$#; _i++)); do
+        __shellmath_storage[_i]="${!_i}"
+    done
+
+    __shellmath_storage[0]=$#
+}
+
+function _shellmath_getReturnValues()
+{
+    local -i _i
+    local evalString
+
+    for ((_i=1; _i<=$#; _i++)); do
+        evalString+=${!_i}="${__shellmath_storage[_i]}"" "
+    done
+
+    eval "$evalString"
+}
+
+function _shellmath_setReturnValue() { __shellmath_storage=(1 "$1"); }
+function _shellmath_getReturnValue() { eval "$1"=\"${__shellmath_storage[1]}\"; }
+function _shellmath_getReturnValueCount() { eval "$1"=\"${__shellmath_storage[0]}\"; }
+
+################################################################################
+# validateAndParse(numericString)
+# Return Code:      SUCCESS or ILLEGAL_NUMBER
+# Return Signature: integerPart fractionalPart isNegative numericType isScientific
+#
+# Validate and parse arguments to the main arithmetic routines
+################################################################################
+
+function _shellmath_validateAndParse()
+{
+    local n="$1"
+    local isNegative=${__shellmath_false}
+    local isScientific=${__shellmath_false}
+    local numericType returnCode
+
+    ((returnCode = __shellmath_SUCCESS))
+    
+    # Accept decimals: leading digits (optional), decimal point, trailing digits
+    if [[ "$n" =~ ^[-]?([0-9]*)\.([0-9]+)$ ]]; then
+        local integerPart=${BASH_REMATCH[1]:-0}
+        local fractionalPart=${BASH_REMATCH[2]}
+
+        # Strip superfluous trailing zeros
+        if [[ "$fractionalPart" =~ ^(.*[^0])0*$ ]]; then
+            fractionalPart=${BASH_REMATCH[1]}
+        fi
+
+        numericType=${__shellmath_numericTypes[DECIMAL]}
+
+        # Factor out the negative sign if it is present
+        if [[ "$n" =~ ^- ]]; then
+            isNegative=${__shellmath_true}
+            n=${n:1}
+        fi
+
+        _shellmath_setReturnValues "$integerPart" "$fractionalPart" \
+                    $isNegative "$numericType" $isScientific
+        return "$returnCode"
+
+    # Accept integers
+    elif [[ "$n" =~ ^[-]?[0-9]+$ ]]; then
+        numericType=${__shellmath_numericTypes[INTEGER]}
+
+        # Factor out the negative sign if it is present
+        if [[ "$n" =~ ^- ]]; then
+            isNegative=${__shellmath_true}
+            n=${n:1}
+        fi
+
+        _shellmath_setReturnValues "$n" 0 $isNegative "$numericType" $isScientific
+        return "$returnCode"
+
+    # Accept scientific notation: 1e5, 2.44E+10, etc.
+    elif [[ "$n" =~ (.*)[Ee](.*) ]]; then
+        local significand=${BASH_REMATCH[1]}
+        local exponent=${BASH_REMATCH[2]}
+
+        # Validate the significand: optional sign, integer part,
+        # optional decimal point and fractional part
+        if [[ "$significand" =~ ^[-]?([0-9]+)(\.([0-9]+))?$ ]]; then
+
+            isScientific=${__shellmath_true}
+
+            # Separate the integer and fractional parts
+            local sigInteger=${BASH_REMATCH[1]}
+            local sigIntLength=${#sigInteger}
+            local sigFraction=${BASH_REMATCH[3]}
+
+            # Strip superfluous trailing zeros
+            if [[ "$sigFraction" =~ ^(.*[^0])0*$ ]]; then
+                sigFraction=${BASH_REMATCH[1]}
+            fi
+
+            local sigFracLength=${#sigFraction}
+
+            if [[ "$n" =~ ^- ]]; then
+                isNegative=${__shellmath_true}
+                n=${n:1}
+            fi
+
+            # Rewrite the scientifically-notated number in ordinary decimal notation.
+            # IOW, realign the integer and fractional parts. Separate with a space
+            # so they can be returned as two separate values
+            if ((exponent > 0)); then
+                local zeroCount integer fraction
+                ((zeroCount = exponent - sigFracLength))
+                if ((zeroCount > 0)); then
+                    printf -v zeros "%0*d" "$zeroCount" 0
+                    n=${sigInteger}${sigFraction}${zeros}" 0"
+                    numericType=${__shellmath_numericTypes[INTEGER]}
+                elif ((zeroCount < 0)); then
+                    n=${sigInteger}${sigFraction:0:exponent}" "${sigFraction:exponent}
+                    numericType=${__shellmath_numericTypes[DECIMAL]}
+                else
+                    n=${sigInteger}${sigFraction}" 0"
+                    numericType=${__shellmath_numericTypes[INTEGER]}
+                fi
+                integer=${n% *}; fraction=${n#* }
+                _shellmath_setReturnValues "$integer" "$fraction" $isNegative "$numericType" $isScientific
+                return "$returnCode"
+
+            elif ((exponent < 0)); then
+                local zeroCount integer fraction
+                ((zeroCount = -exponent - sigIntLength))
+                if ((zeroCount > 0)); then
+                    printf -v zeros "%0*d" "$zeroCount" 0
+                    n="0 "${zeros}${sigInteger}${sigFraction}
+                    numericType=${__shellmath_numericTypes[DECIMAL]}
+                elif ((zeroCount < 0)); then
+                    n=${sigInteger:0:-zeroCount}" "${sigInteger:(-zeroCount)}${sigFraction}
+                    numericType=${__shellmath_numericTypes[DECIMAL]}
+                else
+                    n="0 "${sigInteger}${sigFraction}
+                    numericType=${__shellmath_numericTypes[DECIMAL]}
+                fi
+                integer=${n% *}; fraction=${n#* }
+                _shellmath_setReturnValues "$integer" "$fraction" $isNegative "$numericType" $isScientific
+                return "$returnCode"
+
+            else
+                # exponent == 0 means the number is already aligned as desired
+                numericType=${__shellmath_numericTypes[DECIMAL]}
+                _shellmath_setReturnValues "$sigInteger" "$sigFraction" $isNegative "$numericType" $isScientific
+                return "$returnCode"
+            fi
+
+        # Reject strings like xxx[Ee]yyy where xxx, yyy are not valid numbers
+        else
+            ((returnCode = __shellmath_ILLEGAL_NUMBER))
+            _shellmath_setReturnValues ""
+            return "$returnCode"
+        fi
+
+    # Reject everything else
+    else
+        ((returnCode = __shellmath_ILLEGAL_NUMBER))
+        _shellmath_setReturnValues ""
+        return "$returnCode"
+    fi
+}
+
+
+################################################################################
+# numToScientific (integerPart, fractionalPart)
+#
+# Format conversion utility function
+################################################################################
+function _shellmath_numToScientific()
+{
+    local integerPart=$1 fractionalPart=$2
+    local exponent head tail scientific
+
+    if ((integerPart > 0)); then
+        ((exponent = ${#integerPart}-1))
+        head=${integerPart:0:1}
+        tail=${integerPart:1}${fractionalPart}
+    elif ((integerPart < 0)); then
+        ((exponent = ${#integerPart}-2))   # skip "-" and first digit
+        head=${integerPart:0:2}
+        tail=${integerPart:2}${fractionalPart}
+    else
+        [[ "$fractionalPart" =~ ^[-]?(0*)([^0])(.*)$ ]]
+        exponent=$((-(${#BASH_REMATCH[1]} + 1)))
+        head=${BASH_REMATCH[2]}
+        tail=${BASH_REMATCH[3]}
+    fi
+
+    # Remove trailing zeros
+    [[ $tail =~ ^.*[^0] ]]; tail=${BASH_REMATCH[0]:-0}
+
+    printf -v scientific "%d.%de%d" "$head" "$tail" "$exponent"
+
+    _shellmath_setReturnValue "$scientific"
+}
+
+
+################################################################################
+# _shellmath_add (addend_1, addend_2)
+################################################################################
+function _shellmath_add()
+{
+    local n1="$1"
+    local n2="$2"
+
+    if ((! __shellmath_didPrecalc)); then
+        _shellmath_precalc; __shellmath_didPrecalc=$__shellmath_true
+    fi
+
+    local isVerbose=$(( __shellmath_isOptimized == __shellmath_false ))
+
+    # Is the caller itself an arithmetic function?
+    local isSubcall=${__shellmath_false}
+    local isMultiplication=${__shellmath_false}
+    if [[ "${FUNCNAME[1]}" =~ shellmath_(add|subtract|multiply|divide)$ ]]; then
+        isSubcall=${__shellmath_true}
+        if [[ "${BASH_REMATCH[1]}" == multiply ]]; then
+            isMultiplication=${__shellmath_true}
+        fi
+    fi
+
+    # Handle corner cases where argument count is not 2
+    local argCount=$#
+    if ((argCount == 0)); then
+        echo "Usage: ${FUNCNAME[0]}  addend_1  addend_2"
+        return "$__shellmath_SUCCESS"
+    elif ((argCount == 1)); then
+        # Note the result as-is, print if running "normally", and return
+        _shellmath_setReturnValue "$n1"
+        (( isVerbose && ! isSubcall )) && echo "$n1"
+        return "$__shellmath_SUCCESS"
+    elif ((argCount > 2 && !isSubcall)); then
+        local recursiveReturn
+
+        # Use a binary recursion tree to add everything up
+        # 1) left branch
+        _shellmath_add "${@:1:$((argCount/2))}"; recursiveReturn=$?
+        _shellmath_getReturnValue n1
+        if (( recursiveReturn != __shellmath_SUCCESS )); then
+            _shellmath_setReturnValue "$n1"
+            return "$recursiveReturn"
+        fi
+        # 2) right branch
+        _shellmath_add "${@:$((argCount/2+1))}"; recursiveReturn=$?
+        _shellmath_getReturnValue n2
+        if (( recursiveReturn != __shellmath_SUCCESS )); then
+            _shellmath_setReturnValue "$n2"
+            return "$recursiveReturn"
+        fi
+        # 3) head node
+        local sum
+        _shellmath_add "$n1" "$n2"; recursiveReturn=$?
+        _shellmath_getReturnValue sum
+        _shellmath_setReturnValue "$sum"
+        if (( isVerbose && ! isSubcall )); then
+            echo "$sum"
+        fi
+        return "$recursiveReturn"
+    fi
+
+    local integerPart1  fractionalPart1  integerPart2  fractionalPart2
+    local isNegative1 type1 isScientific1 isNegative2 type2 isScientific2
+    local flags
+
+    if ((isMultiplication)); then
+        integerPart1="$1"
+        fractionalPart1="$2"
+        integerPart2="$3"
+        fractionalPart2="$4"
+
+        type1=${__shellmath_numericTypes[DECIMAL]}
+        type2=${__shellmath_numericTypes[DECIMAL]}
+        isNegative1=$__shellmath_false
+        isNegative2=$__shellmath_false
+        isScientific1=$__shellmath_false
+        isScientific2=$__shellmath_false
+    else
+        # Check and parse the arguments
+        _shellmath_validateAndParse "$n1";  flags=$?
+        _shellmath_getReturnValues  integerPart1  fractionalPart1  isNegative1  type1  isScientific1
+        if ((flags == __shellmath_ILLEGAL_NUMBER)); then
+            _shellmath_warn  "${__shellmath_returnCodes[ILLEGAL_NUMBER]}"  "$n1"
+            return $?
+        fi
+        _shellmath_validateAndParse "$n2";  flags=$?
+        _shellmath_getReturnValues  integerPart2  fractionalPart2  isNegative2  type2  isScientific2
+        if ((flags == __shellmath_ILLEGAL_NUMBER)); then
+            _shellmath_warn  "${__shellmath_returnCodes[ILLEGAL_NUMBER]}"  "$n2"
+            return $?
+        fi
+    fi
+
+    # Quick add & return for integer adds
+    if ((type1==type2 && type1==__shellmath_numericTypes[INTEGER])); then
+        ((isNegative1)) && ((integerPart1*=-1))
+        ((isNegative2)) && ((integerPart2*=-1))
+        local sum=$((integerPart1 + integerPart2))
+        if (( (!isSubcall) && (isScientific1 || isScientific2) )); then
+            _shellmath_numToScientific $sum "" 
+            _shellmath_getReturnValue sum
+        fi
+        _shellmath_setReturnValue $sum
+        if (( isVerbose && ! isSubcall )); then
+            echo "$sum"
+        fi
+        return "$__shellmath_SUCCESS"
+    fi
+
+    # Right-pad both fractional parts with zeros to the same length
+    local fractionalLen1=${#fractionalPart1}
+    local fractionalLen2=${#fractionalPart2}
+    if ((fractionalLen1 > fractionalLen2)); then
+        # Use printf to zero-pad. This avoids mathematical side effects.
+        printf -v fractionalPart2 %-*s "$fractionalLen1" "$fractionalPart2"
+        fractionalPart2=${fractionalPart2// /0}
+    elif ((fractionalLen2 > fractionalLen1)); then
+        printf -v fractionalPart1 %-*s "$fractionalLen2" "$fractionalPart1"
+        fractionalPart1=${fractionalPart1// /0}
+    fi
+    local unsignedFracLength=${#fractionalPart1}
+
+    # Implement a sign convention that will enable us to detect carries by
+    # comparing string lengths of addends and sums: propagate the sign across
+    # both numeric parts (whether unsigned or zero).
+    if ((isNegative1)); then
+        fractionalPart1="-"$fractionalPart1
+        integerPart1="-"$integerPart1
+    fi
+    if ((isNegative2)); then
+        fractionalPart2="-"$fractionalPart2
+        integerPart2="-"$integerPart2
+    fi
+
+    local integerSum=0
+    local fractionalSum=0
+
+    ((integerSum = integerPart1+integerPart2))
+
+    # Summing the fractional parts is tricky: We need to override the shell's
+    # default interpretation of leading zeros, but the operator for doing this
+    # (the "10#" operator) cannot work directly with negative numbers. So we
+    # break it all down.
+    if ((isNegative1)); then
+        ((fractionalSum += (-1) * 10#${fractionalPart1:1}))
+    else
+        ((fractionalSum += 10#$fractionalPart1))
+    fi
+    if ((isNegative2)); then
+        ((fractionalSum += (-1) * 10#${fractionalPart2:1}))
+    else
+        ((fractionalSum += 10#$fractionalPart2))
+    fi
+
+    unsignedFracSumLength=${#fractionalSum}
+    if [[ "$fractionalSum" =~ ^[-] ]]; then
+        ((unsignedFracSumLength--))
+    fi
+
+    # Restore any leading zeroes that were lost when adding
+    if ((unsignedFracSumLength < unsignedFracLength)); then
+        local lengthDiff=$((unsignedFracLength - unsignedFracSumLength))
+        local zeroPrefix
+        printf -v zeroPrefix "%0*d" "$lengthDiff" 0
+        if ((fractionalSum < 0)); then
+            fractionalSum="-"${zeroPrefix}${fractionalSum:1}
+        else
+            fractionalSum=${zeroPrefix}${fractionalSum}
+        fi
+    fi
+
+    # Carry a digit from fraction to integer if required
+    if ((10#$fractionalSum!=0 && unsignedFracSumLength > unsignedFracLength)); then
+        local carryAmount
+        ((carryAmount = isNegative1?-1:1))
+        ((integerSum += carryAmount))
+        # Remove the leading 1-digit whether the fraction is + or -
+        fractionalSum=${fractionalSum/1/}
+    fi
+
+    # Transform the partial sums from additive to concatenative. Example: the
+    # pair (-2,3) is not -2.3 but rather (-2)+(0.3), i.e. -1.7 so we want to
+    # transform (-2,3) to (-1,7). This transformation is meaningful when
+    # the two parts have opposite signs, so that's what we look for.
+    if ((integerSum < 0 && 10#$fractionalSum > 0)); then
+        ((integerSum += 1))
+        ((fractionalSum = 10#$fractionalSum - 10**unsignedFracSumLength))
+    elif ((integerSum > 0 && 10#$fractionalSum < 0)); then
+        ((integerSum -= 1))
+        ((fractionalSum = 10**unsignedFracSumLength + 10#$fractionalSum))
+    fi
+    # This last case needs to function either as an "else" for the above,
+    # or as a coda to the "if" clause when integerSum is -1 initially.
+    if ((integerSum == 0 && 10#$fractionalSum < 0)); then
+        integerSum="-"$integerSum
+        ((fractionalSum *= -1))
+    fi
+
+    # Touch up the numbers for display
+    local sum
+    ((10#$fractionalSum < 0)) && fractionalSum=${fractionalSum:1}
+    if (( (!isSubcall) && (isScientific1 || isScientific2) )); then
+        _shellmath_numToScientific "$integerSum" "$fractionalSum"
+        _shellmath_getReturnValue sum
+    elif ((10#$fractionalSum)); then
+        printf -v sum "%s.%s" "$integerSum" "$fractionalSum"
+    else
+        sum=$integerSum
+    fi
+
+    # Note the result, print if running "normally", and return
+    _shellmath_setReturnValue $sum
+    if (( isVerbose && ! isSubcall )); then
+        echo "$sum"
+    fi
+
+    return "$__shellmath_SUCCESS"
+}
+
+
+################################################################################
+# subtract (subtrahend, minuend)
+################################################################################
+function _shellmath_subtract()
+{
+    local n1="$1"
+    local n2="$2"
+    local isVerbose=$(( __shellmath_isOptimized == __shellmath_false ))
+
+    if ((! __shellmath_didPrecalc)); then
+        _shellmath_precalc; __shellmath_didPrecalc=$__shellmath_true
+    fi
+
+    if (( $# == 0 || $# > 2 )); then
+        echo "Usage: ${FUNCNAME[0]}  subtrahend  minuend"
+        return "$__shellmath_SUCCESS"
+    elif (( $# == 1 )); then
+        # Note the value as-is and return
+        _shellmath_setReturnValue "$n1"
+        ((isVerbose)) && echo "$n1"
+        return "$__shellmath_SUCCESS"
+    fi
+
+    # Symbolically negate the second argument
+    if [[ "$n2" =~ ^- ]]; then
+        n2=${n2:1}
+    else
+        n2="-"$n2
+    fi
+
+    # Calculate, note the result, print if running "normally", and return
+    local difference
+    _shellmath_add "$n1" "$n2"
+    _shellmath_getReturnValue difference
+    if ((isVerbose)); then
+        echo "$difference"
+    fi
+
+    return $?
+}
+
+
+################################################################################
+# reduceOuterPairs (two integer parts [, two fractional parts])
+#
+# Examines the magnitudes of two numbers in advance of a multiplication
+# and either chops off their lowest-order digits or pushes them to the
+# corresponding lower-order parts in order to prevent overflow in the product.
+# The choice depends on whether 2 or 4 arguments are supplied.
+################################################################################
+function _shellmath_reduceOuterPairs()
+{
+    local value1="$1" value2="$2" subvalue1="$3" subvalue2="$4"
+
+    local digitExcess value1Len=${#value1} value2Len=${#value2}
+    ((digitExcess = value1Len + value2Len - __shellmath_precision))
+
+    # Be very precise about detecting overflow. The "digit excess" underestimates
+    # this: floor(log_10(longLongMax)). We don't want to needlessly lose precision
+    # when a product barely squeezes under the exact threshold.
+    if ((digitExcess>1 || (digitExcess==1 && value1 > __shellmath_maxValue/value2) )); then
+
+        # Identify the digit-tails to be pruned off and either discarded or
+        # pushed past the decimal point. In pruning the two values we want to
+        # retain as much "significance" as possible, so we try to equalize the
+        # lengths of the remaining digit sequences.
+        local tail1 tail2
+        local lengthDiff leftOver
+
+        # Which digit string is longer, and by how much?
+        ((lengthDiff = value1Len - value2Len))
+        if ((lengthDiff > 0)); then
+            if ((digitExcess <= lengthDiff)); then
+                # Chop digits from the longer string only
+                tail1=${value1:(-digitExcess)}
+                tail2=""     # do not chop anything
+            else
+                # Chop more digits from the longer string so the two strings
+                # end up as nearly-equal in length as possible
+                ((leftOver = digitExcess - lengthDiff))
+                tail1=${value1:(-(lengthDiff + leftOver/2))}
+                tail2=${value2:(-((leftOver+1)/2))}
+            fi
+        else
+            ((lengthDiff *= -1))
+            # Mirror the above code block but swap 1 and 2
+            if ((digitExcess <= lengthDiff)); then
+                tail1=""
+                tail2=${value2:(-digitExcess)}
+            else
+                ((leftOver = digitExcess - lengthDiff))
+                tail1=${value1:(-((leftOver+1)/2))}
+                tail2=${value2:(-(lengthDiff + leftOver/2))}
+            fi
+        fi
+
+        # Discard the least-significant digits or move them past the decimal point
+        value1=${value1%${tail1}}
+        [[ -n "$subvalue1" ]] && subvalue1=${tail1}${subvalue1%0}  # remove placeholder zero
+        value2=${value2%${tail2}}
+        [[ -n "$subvalue2" ]] && subvalue2=${tail2}${subvalue2%0}
+    else
+        # Signal the caller that no rescaling was actually done
+        ((digitExcess = 0))
+    fi
+
+    _shellmath_setReturnValues "$value1" "$value2" \
+                         "$subvalue1" "$subvalue2" "$digitExcess"
+}
+
+################################################################################
+# rescaleValue(value, rescaleFactor)
+#
+# Upscales a decimal value by "factor" orders of magnitude:  3.14159 --> 3141.59
+################################################################################
+function _shellmath_rescaleValue()
+{
+    local value="$1" rescalingFactor="$2"
+    local head tail zeroCount zeroTail
+
+    [[ "$value" =~ ^(.*)\.(.*)$ ]]
+    head=${BASH_REMATCH[1]}
+    tail=${BASH_REMATCH[2]}
+    ((zeroCount = rescalingFactor - ${#tail}))
+    if ((zeroCount > 0)); then
+        printf -v zeroTail "%0*d" "$zeroCount" 0
+        value=${head}${tail}${zeroTail}
+    elif ((zeroCount < 0)); then
+        value=${head}${tail:0:rescalingFactor}"."${tail:rescalingFactor}
+    else
+        value=${head}${tail}
+    fi
+
+    _shellmath_setReturnValue "$value"
+}
+
+################################################################################
+# reduceCrossPairs (two integer parts, two fractional parts)
+#
+# Examines the precision of the inner products (of "multiplication by parts")
+# and if necessary truncates the fractional part(s) to prevent overflow
+################################################################################
+function _shellmath_reduceCrossPairs()
+{
+    local value1="$1" value2="$2" subvalue1="$3" subvalue2="$4"
+
+    local digitExcess value1Len=${#value1} value2Len=${#value2}
+    local subvalue1Len=${#subvalue1} subvalue2Len=${#subvalue2}
+
+    # Check BOTH cross-products
+    ((digitExcess = value1Len + subvalue2Len - __shellmath_precision))
+    if ((digitExcess > 1 || (digitExcess==1 && value1 > __shellmath_maxValue/subvalue2) )); then
+        subvalue2=${subvalue2:0:(-digitExcess)}
+    fi
+    ((digitExcess = value2Len + subvalue1Len - __shellmath_precision))
+    if ((digitExcess > 1 || (digitExcess==1 && value2 > __shellmath_maxValue/subvalue1) )); then
+        subvalue1=${subvalue1:0:(-digitExcess)}
+    fi
+
+    _shellmath_setReturnValues "$subvalue1" "$subvalue2"
+}
+
+
+function _shellmath_round()
+{
+    local number="$1" digitCount="$2"
+    local nextDigit=${number:digitCount:1}
+
+    number=${number:0:digitCount}
+    if ((nextDigit >= 5)); then
+        printf -v number "%0*d" "$digitCount" $((10#$number + 1))
+    fi
+
+    _shellmath_setReturnValue "$number"
+}
+
+################################################################################
+# multiply (multiplicand, multiplier)
+################################################################################
+function _shellmath_multiply()
+{
+    local n1="$1"
+    local n2="$2"
+
+    if ((! __shellmath_didPrecalc)); then
+        _shellmath_precalc; __shellmath_didPrecalc=$__shellmath_true
+    fi
+
+    local isVerbose=$(( __shellmath_isOptimized == __shellmath_false ))
+
+    # Is the caller itself an arithmetic function?
+    local isSubcall=${__shellmath_false}
+    if [[ "${FUNCNAME[1]}" =~ shellmath_(add|subtract|multiply|divide)$ ]]; then
+        isSubcall=${__shellmath_true}
+    fi
+
+    # Handle corner cases where argument count is not 2
+    local argCount=$#
+    if ((argCount == 0)); then
+        echo "Usage: ${FUNCNAME[0]}  factor_1  factor_2"
+        return "$__shellmath_SUCCESS"
+    elif ((argCount == 1)); then
+        # Note the value as-is and return
+        _shellmath_setReturnValue "$n1"
+        (( isVerbose && ! isSubcall )) && echo "$n1"
+        return "$__shellmath_SUCCESS"
+    elif ((argCount > 2)); then
+        local recursiveReturn
+
+        # Use a binary recursion tree to multiply everything out
+        # 1) left branch
+        _shellmath_multiply "${@:1:$((argCount/2))}"; recursiveReturn=$?
+        _shellmath_getReturnValue n1
+        if (( recursiveReturn != __shellmath_SUCCESS )); then
+            _shellmath_setReturnValue "$n1"
+            return "$recursiveReturn"
+        fi
+        # 2) right branch
+        _shellmath_multiply "${@:$((argCount/2+1))}"; recursiveReturn=$?
+        _shellmath_getReturnValue n2
+        if (( recursiveReturn != __shellmath_SUCCESS )); then
+            _shellmath_setReturnValue "$n2"
+            return "$recursiveReturn"
+        fi
+        # 3) head node
+        local product
+        _shellmath_multiply "$n1" "$n2"; recursiveReturn=$?
+        _shellmath_getReturnValue product
+        _shellmath_setReturnValue "$product"
+        if (( isVerbose && ! isSubcall )); then
+            echo "$product"
+        fi
+        return "$recursiveReturn"
+    fi
+
+    local integerPart1  fractionalPart1  integerPart2  fractionalPart2
+    local isNegative1 type1 isScientific1 isNegative2 type2 isScientific2
+    local flags
+
+    # Check and parse the arguments
+    _shellmath_validateAndParse "$n1";  flags=$?
+    _shellmath_getReturnValues  integerPart1  fractionalPart1  isNegative1  type1  isScientific1
+    if ((flags == __shellmath_ILLEGAL_NUMBER)); then
+        _shellmath_warn  "${__shellmath_returnCodes[ILLEGAL_NUMBER]}"  "$n1"
+        return $?
+    fi
+    _shellmath_validateAndParse "$n2";  flags=$?
+    _shellmath_getReturnValues  integerPart2  fractionalPart2  isNegative2  type2  isScientific2
+    if ((flags == __shellmath_ILLEGAL_NUMBER)); then
+        _shellmath_warn  "${__shellmath_returnCodes[ILLEGAL_NUMBER]}"  "$n2"
+        return $?
+    fi
+
+    # Overflow / underflow detection and accommodation
+    local rescalingFactor=0
+    if ((${#integerPart1} + ${#integerPart2} + ${#fractionalPart1} + ${#fractionalPart2} >= ${__shellmath_precision})); then
+        _shellmath_reduceOuterPairs "$integerPart1" "$integerPart2" "$fractionalPart1" "$fractionalPart2"
+        _shellmath_getReturnValues integerPart1 integerPart2 fractionalPart1 fractionalPart2 rescalingFactor
+        if ((10#$fractionalPart1)); then type1=${__shellmath_numericTypes[DECIMAL]}; fi
+        if ((10#$fractionalPart2)); then type2=${__shellmath_numericTypes[DECIMAL]}; fi
+
+        _shellmath_reduceCrossPairs "$integerPart1" "$integerPart2" "$fractionalPart1" "$fractionalPart2"
+        _shellmath_getReturnValues fractionalPart1 fractionalPart2
+
+        _shellmath_reduceOuterPairs "$fractionalPart1" "$fractionalPart2"
+        _shellmath_getReturnValues fractionalPart1 fractionalPart2
+    fi
+
+    # Quick multiply & return for integer multiplies
+    if ((type1==type2 && type1==__shellmath_numericTypes[INTEGER])); then
+        ((isNegative1)) && ((integerPart1*=-1))
+        ((isNegative2)) && ((integerPart2*=-1))
+        local product=$((integerPart1 * integerPart2))
+        if ((rescalingFactor > 0)); then
+            _shellmath_rescaleValue "$product" "$rescalingFactor"
+            _shellmath_getReturnValue product
+        fi
+        if (( (!isSubcall) && (isScientific1 || isScientific2) )); then
+            _shellmath_numToScientific $product "" 
+            _shellmath_getReturnValue product
+        fi
+        _shellmath_setReturnValue $product
+        if (( isVerbose && ! isSubcall )); then
+            echo "$product"
+        fi
+        return "$__shellmath_SUCCESS"
+    fi
+
+    # The product has four components per the distributive law
+    local intProduct floatProduct innerProduct1 innerProduct2
+    # Widths of the decimal parts
+    local floatWidth fractionalWidth1 fractionalWidth2
+
+    # Compute the integer and floating-point components
+    ((intProduct = integerPart1 * integerPart2))
+
+    fractionalWidth1=${#fractionalPart1}
+    fractionalWidth2=${#fractionalPart2}
+    ((floatWidth = fractionalWidth1 + fractionalWidth2))
+    ((floatProduct = 10#$fractionalPart1 * 10#$fractionalPart2))
+    if ((${#floatProduct} < floatWidth)); then
+        printf -v floatProduct "%0*d" "$floatWidth" "$floatProduct"
+    fi
+
+    # Compute the inner products: First integer-multiply, then rescale
+    ((innerProduct1 = integerPart1 * 10#$fractionalPart2))
+    ((innerProduct2 = integerPart2 * 10#$fractionalPart1))
+
+    # Rescale the inner products back to decimals so we can shellmath_add() them
+    if ((fractionalWidth2 <= ${#innerProduct1})); then
+        local innerInt1=${innerProduct1:0:(-$fractionalWidth2)}
+        local innerFloat1=${innerProduct1:(-$fractionalWidth2)}
+        integerPart1=${innerInt1}
+        fractionalPart1=${innerFloat1}
+    else
+        integerPart1=0
+        printf -v fractionalPart1 "%0*d" "$fractionalWidth2" "$innerProduct1"
+    fi
+    if ((fractionalWidth1 <= ${#innerProduct2})); then
+        local innerInt2=${innerProduct2:0:(-$fractionalWidth1)}
+        local innerFloat2=${innerProduct2:(-$fractionalWidth1)}
+        integerPart2=${innerInt2}
+        fractionalPart2=${innerFloat2}
+    else
+        integerPart2=0
+        printf -v fractionalPart2 "%0*d" "$fractionalWidth1" "$innerProduct2"
+    fi
+
+    # Combine the distributed parts
+    local innerSum product
+    # Add the inner products to get the inner sum
+    _shellmath_add  "$integerPart1" "$fractionalPart1" "$integerPart2" "$fractionalPart2"
+    _shellmath_getReturnValue innerSum
+    [[ "$innerSum" =~ (.*)\.(.*) ]]
+    integerPart1=${BASH_REMATCH[1]}
+    fractionalPart1=${BASH_REMATCH[2]}
+    # Add inner sum + outer sum
+    _shellmath_add "$integerPart1" "$fractionalPart1" "$intProduct" "$floatProduct"
+    _shellmath_getReturnValue product
+
+    # Determine the sign of the product
+    if ((isNegative1 != isNegative2)); then
+        product="-"$product
+    fi
+
+    # When we pre-detect overflow in the integer part of the computation,
+    # we compensate by shrinking the inputs by some order of magnitude.
+    # Having now finished the computation, we revert to the original magnitude.
+    if ((rescalingFactor > 0)); then
+        _shellmath_rescaleValue "$product" "$rescalingFactor"
+        _shellmath_getReturnValue product
+    fi
+
+    # Convert to scientific notation if appropriate
+    if (( (!isSubcall) && (isScientific1 || isScientific2) )); then
+        _shellmath_numToScientific "${product%.*}" "${product#*.}"
+        _shellmath_getReturnValue product
+    fi
+
+    # Note the result, print if running "normally", and return
+    _shellmath_setReturnValue $product
+    if (( isVerbose && ! isSubcall )); then
+        echo "$product"
+    fi
+
+    return "$__shellmath_SUCCESS"
+}
+
+
+################################################################################
+# divide (dividend, divisor)
+################################################################################
+function _shellmath_divide()
+{
+    local n1="$1"
+    local n2="$2"
+    local integerPart1  fractionalPart1  integerPart2  fractionalPart2
+    local isNegative1 type1 isScientific1 isNegative2 type2 isScientific2
+
+    if ((! __shellmath_didPrecalc)); then
+        _shellmath_precalc; __shellmath_didPrecalc=$__shellmath_true
+    fi
+
+    local isVerbose=$(( __shellmath_isOptimized == __shellmath_false ))
+
+    local isTesting=${__shellmath_false}
+    if [[ "${FUNCNAME[1]}" == "_shellmath_assert_functionReturn" ]]; then
+        isTesting=${__shellmath_true}
+    fi
+
+    if [[ $# -eq 0 || $# -gt 2 ]]; then
+        echo "Usage: ${FUNCNAME[0]}  dividend  divisor"
+        return "$__shellmath_SUCCESS"
+    elif [[ $# -eq 1 ]]; then
+        # Note the value as-is and return
+        _shellmath_setReturnValue "$n1"
+        ((isVerbose)) && echo "$n1"
+        return "$__shellmath_SUCCESS"
+    fi
+
+    # Check and parse the arguments
+    local flags
+    _shellmath_validateAndParse "$n1";  flags=$?
+    _shellmath_getReturnValues  integerPart1  fractionalPart1  isNegative1  type1  isScientific1
+    if ((flags == __shellmath_ILLEGAL_NUMBER)); then
+        _shellmath_warn  "${__shellmath_returnCodes[ILLEGAL_NUMBER]}"  "$n1"
+        return $?
+    fi
+    _shellmath_validateAndParse "$n2";  flags=$?
+    _shellmath_getReturnValues  integerPart2  fractionalPart2  isNegative2  type2  isScientific2
+    if ((flags == __shellmath_ILLEGAL_NUMBER)); then
+        _shellmath_warn  "${__shellmath_returnCodes[ILLEGAL_NUMBER]}"  "$n2"
+        return $?
+    fi
+
+    # Throw error on divide by zero
+    if ((integerPart2 == 0 && 10#$fractionalPart2 == 0)); then
+        _shellmath_warn  "${__shellmath_returnCodes[DIVIDE_BY_ZERO]}"  "$n2"
+        return $?
+    fi
+
+    # Convert the division problem to an *integer* division problem by rescaling
+    # both inputs so as to lose their decimal points. To obtain maximal precision,
+    # we scale up the numerator further, padding with as many zeros as it can hold
+    local numerator denominator quotient
+    local rescaleFactor zeroCount zeroTail
+
+    if ((integerPart1 == 0)); then
+        integerPart1=""
+    fi
+    ((zeroCount = __shellmath_precision - ${#integerPart1} - ${#fractionalPart1}))
+    ((rescaleFactor = __shellmath_precision - ${#integerPart1} - ${#fractionalPart2}))
+    if ((zeroCount > 0)); then
+        printf -v zeroTail "%0*d" "$zeroCount" 0
+    fi
+
+    # Rescale and rewrite the fraction to be computed, and compute it
+    numerator=${integerPart1}${fractionalPart1}${zeroTail}
+    denominator=${integerPart2}${fractionalPart2}
+    ((quotient = 10#$numerator / 10#$denominator))
+
+    # For greater precision, re-divide by the remainder to get the next digits of the quotient
+    local remainder quotient_2
+    ((remainder = 10#$numerator % 10#$denominator))   # cannot exceed numerator or thus, maxValue
+    ((zeroCount = __shellmath_precision - ${#remainder}))
+    if ((zeroCount > 0)); then
+        printf -v zeroTail "%0*d" "$zeroCount" 0
+    else
+        zeroTail=""
+    fi
+    # Derive the new numerator from the remainder. Do not change the denominator.
+    numerator=${remainder}${zeroTail}
+    ((quotient_2 = 10#$numerator / 10#$denominator))
+    quotient=${quotient}${quotient_2}
+    ((rescaleFactor += ${#quotient_2}))
+
+    # Rescale back. For aesthetic reasons we also round off at the "precision"th decimal place
+    ((zeroCount = rescaleFactor - ${#quotient}))
+    if ((zeroCount >= 0)); then
+        local zeroPrefix="" fractionalPart
+        if ((zeroCount > 0)); then
+            printf -v zeroPrefix "%0*d" "$((rescaleFactor - ${#quotient}))" 0
+        fi
+        fractionalPart=${zeroPrefix}${quotient}
+        _shellmath_round "$fractionalPart" $__shellmath_precision
+        _shellmath_getReturnValue fractionalPart
+        quotient="0."${fractionalPart}
+    else
+        fractionalPart=${quotient:(-$rescaleFactor)}
+        _shellmath_round "$fractionalPart" $__shellmath_precision
+        _shellmath_getReturnValue fractionalPart
+        quotient=${quotient:0:(-$rescaleFactor)}"."${fractionalPart}
+    fi
+
+    # Determine the sign of the quotient
+    if ((isNegative1 != isNegative2)); then
+        quotient="-"$quotient
+    fi
+
+    if ((isTesting)); then
+        # Trim zeros. (Requires decimal point and zero tail.)
+        if [[ "$quotient" =~ [\.].*0$ ]]; then
+            # If the decimal point IMMEDIATELY precedes the 0s, remove that too
+            [[ $quotient =~ [\.]?0+$ ]]
+            quotient=${quotient%${BASH_REMATCH[0]}}
+        fi
+    fi
+
+    # Convert to scientific notation if appropriate
+    if ((isScientific1 || isScientific2)); then
+        _shellmath_numToScientific "${quotient%.*}" "${quotient#*.}"
+        _shellmath_getReturnValue quotient
+    fi
+
+    # Note the result, print if running "normally", and return
+    _shellmath_setReturnValue "$quotient"
+    if ((isVerbose)); then
+        echo "$quotient"
+    fi
+
+    return "$__shellmath_SUCCESS"
+}
+
diff --git a/examples/shellmath/slower_e_demo.sh b/examples/shellmath/slower_e_demo.sh
new file mode 100644 (file)
index 0000000..d8fc931
--- /dev/null
@@ -0,0 +1,55 @@
+#!/usr/bin/env bash
+
+###############################################################################
+# This script illustrates the use of the shellmath APIs to perform
+# decimal calculations. Here we approximate the mathematical constant 'e'
+# using its Maclaurin polynomials (i.e. its Taylor polynomials centered at 0).
+###############################################################################
+
+source shellmath.sh
+
+# Setting the '-t' flag will cause the script to time the algorithm
+if [[ "$1" == '-t' ]]; then
+    do_timing=${__shellmath_true}
+    shift
+fi
+
+if [[ $# -ne 1 ]]; then
+    echo "USAGE: ${BASH_SOURCE##*/}  [-t]  *N*"
+    echo "       Approximates 'e' using the N-th order Maclaurin polynomial"
+    echo "       (i.e. the Taylor polynomial centered at 0)."
+    echo "       Specify the '-t' flag to time the main algorithm."
+    exit 0
+elif [[ ! "$1" =~ ^[0-9]+$ ]]; then
+    echo "Illegal argument. Whole numbers only, please."
+    exit 1
+fi
+
+
+function run_algorithm()
+{
+    # Initialize
+    n=0;  N=$1;  zero_factorial=1
+
+    # Initialize e to the zeroth-order term
+    term=$(_shellmath_divide  1  $zero_factorial)
+    e=$term
+
+    # Compute successive terms T(n) := T(n-1)/n and accumulate into e
+    for ((n=1; n<=N; n++)); do
+        term=$(_shellmath_divide  "$term"  "$n")
+        e=$(_shellmath_add  "$e"  "$term")
+    done
+
+    echo "e = $e"
+}
+
+
+if (( do_timing == __shellmath_true )); then
+    time run_algorithm "$1"
+else
+    run_algorithm "$1"
+fi
+
+exit 0
+
diff --git a/examples/shellmath/testCases.in b/examples/shellmath/testCases.in
new file mode 100644 (file)
index 0000000..54e3a82
--- /dev/null
@@ -0,0 +1,142 @@
+################################################################
+# The general testcase syntax is 
+#    assertionType  expectedValue   functionUnderTest [args ... ]
+#
+# where assertionType is either of:
+#    Code      to indicate the (bash-style) integer return code
+#    String    to indicate the string "printed" as a side effect
+#
+# and functionUnderTest is the function name
+# with the "_shellmath_" prefix removed.
+################################################################
+
+################################
+# Tests for SUPPORTING FUNCTIONS
+################################
+
+# Tests for getReturnCode()
+Code 0   getReturnCode SUCCESS
+Code 1   getReturnCode FAIL
+Code 2   getReturnCode ILLEGAL_NUMBER
+
+## Tests for validateAndParse():
+## Validate a number, determine its type and sign, split it into parts
+
+# Detect Invalid input
+Code    2      validateAndParse NaN
+String    ""   validateAndParse NaN
+# Positive integers
+String  "4 0 0 0 0"    validateAndParse 4
+# Negative integers
+String  "9 0 1 0 0"    validateAndParse -9
+# Decimals
+String  "4 2 0 1 0"  validateAndParse 4.2
+# Negative decimals
+String "4 2 1 1 0"  validateAndParse -4.2
+# Scientific / exponential notation: Check all code branches
+String  "340000 0 0 0 1" validateAndParse 3.4e5
+String  "344 4 0 1 1"    validateAndParse 3.444e2
+String  "34567 0 0 0 1"  validateAndParse 3.4567e4
+String  "0 003456 0 1 1" validateAndParse 3.456e-3
+String  "34 56 0 1 1"    validateAndParse 345.6e-1
+String  "0 23011 0 1 1"  validateAndParse 23.011e-2
+String  "23 011 0 1 1"   validateAndParse 23.011e0
+
+####################
+# Tests for ADDITION
+####################
+String 4     add 4
+String 9     add 4 5
+
+# Same-length decimal tails with no leading zeros, no carry across decimal point
+String 2.214    add 1.105 1.109
+
+# Carry across decimal point
+String 3.8    add 1.9 1.9
+String -3.8    add -1.9 -1.9
+
+# Different-length decimals, one with leading zero
+String 2.195    add 1.105 1.09
+String -2.195    add -1.105 -1.09
+
+# Same-length tails having leading zeros
+String 2.014    add 1.005 1.009
+String -2.014    add -1.005 -1.009
+# Different-length tails with and without leading zeros
+String 3.31462    add 1.905 1.40962
+String 2.01462    add 1.005 1.00962
+
+# Subtraction
+String 2.5   subtract 5.2 2.7
+String -2.5   subtract 2.7 5.2
+String 2.5   add 5.2 -2.7
+
+# Integer part equal to 0
+String 1.5  add 0.6 0.9
+String 1.5  add .6 .9
+String -0.3 add 0.6 -0.9
+String -0.3 add .6 -.9
+
+# Recursive/multiple addition
+String 12     add 2 4 6
+String 6.6    add 1.1 2.2 3.3
+
+##########################
+# Tests for MULTIPLICATION
+##########################
+String 4     multiply 4
+String 20     multiply 4 5
+
+String 21.32   multiply 4.1 5.2
+String -21.32   multiply -4.1 5.2
+
+# Carry-heavy products
+String 98.901  multiply 9.9 9.99
+
+# Leading zeros after decimal point:
+# Track place value with zero-padding
+String 1.0201  multiply 1.01 1.01
+String 0.0001  multiply 0.01 0.01
+String 0.0001  add 0 0.0001
+
+# Staggered decimal precisions
+String 0.000001 multiply 0.01 0.0001
+
+# Interpret in base 10
+String 2.2781  multiply 1.09 2.09
+
+# Recursive multiplication
+String 35.1384  multiply 1.1 2.2 3.3 4.4
+
+####################
+# Tests for DIVISION
+####################
+String 4     divide 4
+String 4     divide 20 5
+
+String 0.5   divide 1 2
+String -0.5   divide -1 2
+
+# Mixed fractions
+String 34.54   divide 3454 100
+
+# Non-terminating decimals
+String 0.166666666666666667   divide  1 6
+
+# Decimal arguments
+String 0.25     divide 0.5 2
+String 0.04165  divide 0.1666 4
+
+###########################
+# Tests for scientific math
+###########################
+String 8.8e4      add  1.1e4  7.7e4
+String 4.239e1    add  1.224e1 3.015e1
+String -6.6e4     add  1.1e4  -7.7e4
+String -66000     add  11000  -77000
+String 1.23123e2  add 1.23e2 1.23e-1
+String 8.1403e7   multiply 2.03e5 4.01e2
+String 1.0e-7     multiply 1.0e-3 1.0e-4
+String 1.0e-7     multiply 1e-3 1e-4
+
+
diff --git a/examples/shellmath/timingData.txt b/examples/shellmath/timingData.txt
new file mode 100644 (file)
index 0000000..d1de887
--- /dev/null
@@ -0,0 +1,42 @@
+$ ######## Activate optimized mode as described in the README ########
+$ __shellmath_isOptimized=1
+
+$ ######## Addition ########
+$ time { for ((i=0; i<100; i++)); do _shellmath_add  3.1415926  2.7182818; _shellmath_getReturnValue sum; done; }
+real    0m0.196s
+user    0m0.195s
+sys     0m0.000s
+$ time { for ((i=0; i<100; i++)); do sum=$(bc <<< "3.1415926+2.7182818"); done; }
+real    0m0.488s
+user    0m0.092s
+sys     0m0.384s
+
+$ ######## Subtraction ########
+$ time { for ((i=0; i<100; i++)); do _shellmath_subtract  3.1415926  2.7182818; _shellmath_getReturnValue diff; done; }
+real    0m0.236s
+user    0m0.234s
+sys     0m0.001s
+$ time { for ((i=0; i<100; i++)); do diff=$(bc <<< "3.1415926-2.7182818"); done; }
+real    0m0.461s
+user    0m0.090s
+sys     0m0.388s
+
+$ ######## Multiplication ########
+$ time { for ((i=0; i<100; i++)); do _shellmath_multiply  3.1415926 2.7182818; _shellmath_getReturnValue prod; done; }
+real    0m0.340s
+user    0m0.333s
+sys     0m0.005s
+$ time { for ((i=0; i<100; i++)); do prod=$(bc <<< "3.1415926*2.7182818"); done; }
+real    0m0.465s
+user    0m0.105s
+sys     0m0.377s
+
+$ ######## Division ########
+$ time { for ((i=0; i<100; i++)); do _shellmath_divide  3.1415926/2.7182818; _shellmath_getReturnValue quot; done; }
+real    0m0.196s
+user    0m0.195s
+sys     0m0.000s
+$ time { for ((i=0; i<100; i++)); do quot=$(bc <<< "scale=8; 3.1415926/2.7182818"); done; }
+real    0m0.463s
+user    0m0.116s
+sys     0m0.364s
index 425679a20f3f1b5e448bfe1dbb2f0055a89e3800..e5c6b9ab79431b248ac4b3c1ddcb7ad7a657980f 100644 (file)
@@ -1,6 +1,6 @@
 /* execute_cmd.c -- Execute a COMMAND structure. */
 
-/* Copyright (C) 1987-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2022 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -165,6 +165,7 @@ static int execute_while_or_until PARAMS((WHILE_COM *, int));
 static int execute_if_command PARAMS((IF_COM *));
 static int execute_null_command PARAMS((REDIRECT *, int, int, int));
 static void fix_assignment_words PARAMS((WORD_LIST *));
+static void fix_arrayref_words PARAMS((WORD_LIST *));
 static int execute_simple_command PARAMS((SIMPLE_COM *, int, int, int, struct fd_bitmap *));
 static int execute_builtin PARAMS((sh_builtin_func_t *, WORD_LIST *, int, int));
 static int execute_function PARAMS((SHELL_VAR *, WORD_LIST *, int, struct fd_bitmap *, int, int));
@@ -279,6 +280,23 @@ static int connection_count;
    can save and restore it. */
 int line_number_for_err_trap;
 
+/* A convenience macro to avoid resetting line_number_for_err_trap while
+   running the ERR trap. */
+#define SET_LINE_NUMBER(v) \
+do { \
+  line_number = v; \
+  if (signal_in_progress (ERROR_TRAP) == 0 && running_trap != (ERROR_TRAP + 1)) \
+    line_number_for_err_trap = line_number; \
+} while (0)
+
+/* This can't be in executing_line_number() because that's used for LINENO
+   and we want LINENO to reflect the line number of commands run during
+   the ERR trap. Right now this is only used to push to BASH_LINENO. */
+#define GET_LINE_NUMBER() \
+  (signal_in_progress (ERROR_TRAP) && running_trap == ERROR_TRAP+1) \
+    ? line_number_for_err_trap \
+    : executing_line_number ()
+
 /* A sort of function nesting level counter */
 int funcnest = 0;
 int funcnest_max = 0;
@@ -366,7 +384,7 @@ executing_line_number ()
        return currently_executing_command->value.ArithFor->line;
 #endif
 
-       return line_number;
+      return line_number;
     }
   else
     return line_number;
@@ -505,7 +523,7 @@ restore_signal_mask (set)
 #ifdef DEBUG
 /* A debugging function that can be called from gdb, for instance. */
 void
-open_files ()
+open_files (void)
 {
   register int i;
   int f, fd_table_size;
@@ -570,7 +588,9 @@ execute_command_internal (command, asynchronous, pipe_in, pipe_out,
 
   if (breaking || continuing)
     return (last_command_exit_value);
-  if (command == 0 || read_but_dont_execute)
+  if (read_but_dont_execute)
+    return (last_command_exit_value);
+  if (command == 0)
     return (EXECUTION_SUCCESS);
 
   QUIT;
@@ -627,7 +647,7 @@ execute_command_internal (command, asynchronous, pipe_in, pipe_out,
         control and call execute_command () on the command again. */
       save_line_number = line_number;
       if (command->type == cm_subshell)
-       line_number_for_err_trap = line_number = command->value.Subshell->line; /* XXX - save value? */
+       SET_LINE_NUMBER (command->value.Subshell->line);        /* XXX - save value? */
        /* Otherwise we defer setting line_number */
       tcmd = make_command_string (command);
       fork_flags = asynchronous ? FORK_ASYNC : 0;
@@ -841,7 +861,7 @@ execute_command_internal (command, asynchronous, pipe_in, pipe_out,
        if (command->flags & CMD_STDIN_REDIR)
          command->value.Simple->flags |= CMD_STDIN_REDIR;
 
-       line_number_for_err_trap = line_number = command->value.Simple->line;
+       SET_LINE_NUMBER (command->value.Simple->line);
        exec_result =
          execute_simple_command (command->value.Simple, pipe_in, pipe_out,
                                  asynchronous, fds_to_close);
@@ -1041,7 +1061,7 @@ execute_command_internal (command, asynchronous, pipe_in, pipe_out,
        command->value.Cond->flags |= CMD_IGNORE_RETURN;
 #endif
 
-      line_number_for_err_trap = save_line_number = line_number;
+      line_number_for_err_trap = save_line_number = line_number;       /* XXX */
 #if defined (DPAREN_ARITHMETIC)
       if (command->type == cm_arith)
        exec_result = execute_arith_command (command->value.Arith);
@@ -1323,6 +1343,7 @@ time_command (command, asynchronous, pipe_in, pipe_out, fds_to_close)
   int cpu;
   char *time_format;
   volatile procenv_t save_top_level;
+  volatile int old_subshell;
 
 #if defined (HAVE_GETRUSAGE) && defined (HAVE_GETTIMEOFDAY)
   struct timeval real, user, sys;
@@ -1352,6 +1373,7 @@ time_command (command, asynchronous, pipe_in, pipe_out, fds_to_close)
 #  endif
 #endif
 
+  old_subshell = subshell_environment;
   posix_time = command && (command->flags & CMD_TIME_POSIX);
 
   nullcmd = (command == 0) || (command->type == cm_simple && command->value.Simple->words == 0 && command->value.Simple->redirects == 0);
@@ -1372,12 +1394,17 @@ time_command (command, asynchronous, pipe_in, pipe_out, fds_to_close)
   command->flags &= ~(CMD_TIME_PIPELINE|CMD_TIME_POSIX);
   code = setjmp_nosigs (top_level);
   if (code == NOT_JUMPED)
-    {
-      rv = execute_command_internal (command, asynchronous, pipe_in, pipe_out, fds_to_close);
-      command->flags = old_flags;
-    }
+    rv = execute_command_internal (command, asynchronous, pipe_in, pipe_out, fds_to_close);
   COPY_PROCENV (save_top_level, top_level);
 
+  command->flags = old_flags;
+
+  /* If we're jumping in a different subshell environment than we started,
+     don't bother printing timing stats, just keep longjmping back to the
+     original top level. */
+  if (code != NOT_JUMPED && subshell_environment && subshell_environment != old_subshell)
+    sh_longjmp (top_level, code);
+
   rs = us = ss = 0;
   rsf = usf = ssf = cpu = 0;
 
@@ -1476,6 +1503,7 @@ execute_in_subshell (command, asynchronous, pipe_in, pipe_out, fds_to_close)
 
   /* If a command is asynchronous in a subshell (like ( foo ) & or
      the special case of an asynchronous GROUP command where the
+
      the subshell bit is turned on down in case cm_group: below),
      turn off `asynchronous', so that two subshells aren't spawned.
      XXX - asynchronous used to be set to 0 in this block, but that
@@ -1553,6 +1581,8 @@ execute_in_subshell (command, asynchronous, pipe_in, pipe_out, fds_to_close)
 
   /* We are in a subshell, so forget that we are running a trap handler or
      that the signal handler has changed (we haven't changed it!) */
+  /* XXX - maybe do this for `real' signals and not ERR/DEBUG/RETURN/EXIT
+     traps? */
   if (running_trap > 0)
     {
       run_trap_cleanup (running_trap - 1);
@@ -1620,10 +1650,12 @@ execute_in_subshell (command, asynchronous, pipe_in, pipe_out, fds_to_close)
   default_buffered_input = -1;
 #endif
 
-#if 0 /* TAG: bash-5.2 */
+  /* We can't optimize away forks if one of the commands executed by the
+     subshell sets an exit trap, so we set CMD_NO_FORK for simple commands
+     and set CMD_TRY_OPTIMIZING for simple commands on the right side of an
+     and-or or `;' list to test for optimizing forks when they are executed. */
   if (user_subshell && command->type == cm_subshell)
     optimize_subshell_command (command->value.Subshell->command);
-#endif
 
   /* Do redirections, then dispose of them before recursive call. */
   if (command->redirects)
@@ -1678,7 +1710,7 @@ execute_in_subshell (command, asynchronous, pipe_in, pipe_out, fds_to_close)
 
   /* If we're going to exit the shell, we don't want to invert the return
      status. */
-  if (result == EXITPROG)
+  if (result == EXITPROG || result == EXITBLTIN)
     invert = 0, return_code = last_command_exit_value;
   else if (result)
     return_code = (last_command_exit_value == EXECUTION_SUCCESS) ? EXECUTION_FAILURE : last_command_exit_value;
@@ -1805,9 +1837,7 @@ cpl_delete (pid)
   if (p == 0)
     return 0;          /* not found */
 
-#if defined (DEBUG)
-  itrace("cpl_delete: deleting %d", pid);
-#endif
+  INTERNAL_DEBUG (("cpl_delete: deleting %d", pid));
 
   /* Housekeeping in the border cases. */
   if (p == coproc_list.head)
@@ -1838,11 +1868,7 @@ cpl_reap ()
       if (p->coproc->c_flags & COPROC_DEAD)
        {
          coproc_list.ncoproc--;        /* keep running count, fix up pointers later */
-
-#if defined (DEBUG)
-         itrace("cpl_reap: deleting %d", p->coproc->c_pid);
-#endif
-
+         INTERNAL_DEBUG (("cpl_reap: deleting %d", p->coproc->c_pid));
          coproc_dispose (p->coproc);
          cpe_dispose (p);
        }
@@ -2239,7 +2265,7 @@ coproc_setvars (cp)
 {
   SHELL_VAR *v;
   char *namevar, *t;
-  int l;
+  size_t l;
   WORD_DESC w;
 #if defined (ARRAY_VARS)
   arrayind_t ind;
@@ -2374,6 +2400,7 @@ execute_coproc (command, pipe_in, pipe_out, fds_to_close)
   if (legal_identifier (name) == 0)
     {
       internal_error (_("`%s': not a valid identifier"), name);
+      free (name);
       return (invert ? EXECUTION_SUCCESS : EXECUTION_FAILURE);
     }
   else
@@ -2442,12 +2469,18 @@ execute_coproc (command, pipe_in, pipe_out, fds_to_close)
 }
 #endif
 
+/* If S == -1, it's a special value saying to close stdin */
 static void
 restore_stdin (s)
      int s;
 {
-  dup2 (s, 0);
-  close (s);
+  if (s == -1)
+    close (0);
+  else
+    {
+      dup2 (s, 0);
+      close (s);
+    }
 }
 
 /* Catch-all cleanup function for lastpipe code for unwind-protects */
@@ -2465,7 +2498,7 @@ execute_pipeline (command, asynchronous, pipe_in, pipe_out, fds_to_close)
      struct fd_bitmap *fds_to_close;
 {
   int prev, fildes[2], new_bitmap_size, dummyfd, ignore_return, exec_result;
-  int lstdin, lastpipe_flag, lastpipe_jid, old_frozen;
+  int lstdin, lastpipe_flag, lastpipe_jid, old_frozen, stdin_valid;
   COMMAND *cmd;
   struct fd_bitmap *fd_bitmap;
   pid_t lastpid;
@@ -2477,6 +2510,8 @@ execute_pipeline (command, asynchronous, pipe_in, pipe_out, fds_to_close)
 
   ignore_return = (command->flags & CMD_IGNORE_RETURN) != 0;
 
+  stdin_valid = sh_validfd (0);
+
   prev = pipe_in;
   cmd = command;
 
@@ -2567,14 +2602,18 @@ execute_pipeline (command, asynchronous, pipe_in, pipe_out, fds_to_close)
   lastpipe_flag = 0;
 
   begin_unwind_frame ("lastpipe-exec");
-  lstdin = -1;
+  lstdin = -2;         /* -1 is special, meaning fd 0 is closed */
   /* If the `lastpipe' option is set with shopt, and job control is not
      enabled, execute the last element of non-async pipelines in the
      current shell environment. */
-  if (lastpipe_opt && job_control == 0 && asynchronous == 0 && pipe_out == NO_PIPE && prev > 0)
-    {
-      lstdin = move_to_high_fd (0, 1, -1);
-      if (lstdin > 0)
+  /* prev can be 0 if fd 0 was closed when this function was executed. prev
+     will never be 0 at this point if fd 0 was valid when this function was
+     executed (though we check above). */
+  if (lastpipe_opt && job_control == 0 && asynchronous == 0 && pipe_out == NO_PIPE && prev >= 0)
+    {
+      /* -1 is a special value meaning to close stdin */
+      lstdin = (prev > 0 && stdin_valid) ? move_to_high_fd (0, 1, -1) : -1;
+      if (lstdin > 0 || lstdin == -1)
        {
          do_piping (prev, pipe_out);
          prev = NO_PIPE;
@@ -2595,12 +2634,12 @@ execute_pipeline (command, asynchronous, pipe_in, pipe_out, fds_to_close)
 
   exec_result = execute_command_internal (cmd, asynchronous, prev, pipe_out, fds_to_close);
 
-  if (lstdin > 0)
-    restore_stdin (lstdin);
-
   if (prev >= 0)
     close (prev);
 
+  if (lstdin > 0 || lstdin == -1)
+    restore_stdin (lstdin);
+
 #if defined (JOB_CONTROL)
   UNBLOCK_CHILD (oset);
 #endif
@@ -2616,7 +2655,11 @@ execute_pipeline (command, asynchronous, pipe_in, pipe_out, fds_to_close)
           lstdin = wait_for (lastpid, 0);
         }
       else
-        lstdin = wait_for_single_pid (lastpid, 0);             /* checks bgpids list */
+       {
+         lstdin = wait_for_single_pid (lastpid, 0);            /* checks bgpids list */
+         if (lstdin > 256)             /* error sentinel */
+           lstdin = 127;
+       }
 #else
       lstdin = wait_for (lastpid, 0);
 #endif
@@ -2695,6 +2738,7 @@ execute_connection (command, asynchronous, pipe_in, pipe_out, fds_to_close)
 
     /* Just call execute command on both sides. */
     case ';':
+    case '\n':         /* special case, happens in command substitutions */
       if (ignore_return)
        {
          if (command->value.Connection->first)
@@ -2714,7 +2758,7 @@ execute_connection (command, asynchronous, pipe_in, pipe_out, fds_to_close)
 #endif
 
       QUIT;
-      optimize_fork (command);                 /* XXX */
+      optimize_connection_fork (command);                      /* XXX */
       exec_result = execute_command_internal (command->value.Connection->second,
                                      asynchronous, pipe_in, pipe_out,
                                      fds_to_close);
@@ -2726,7 +2770,7 @@ execute_connection (command, asynchronous, pipe_in, pipe_out, fds_to_close)
       invert = (command->flags & CMD_INVERT_RETURN) != 0;
       ignore_return = (command->flags & CMD_IGNORE_RETURN) != 0;
 
-      line_number_for_err_trap = line_number;  /* XXX - save value? */
+      SET_LINE_NUMBER (line_number);   /* XXX - save value? */
       exec_result = execute_pipeline (command, asynchronous, pipe_in, pipe_out, fds_to_close);
 
       if (asynchronous)
@@ -2787,7 +2831,7 @@ execute_connection (command, asynchronous, pipe_in, pipe_out, fds_to_close)
          ((command->value.Connection->connector == OR_OR) &&
           (exec_result != EXECUTION_SUCCESS)))
        {
-         optimize_fork (command);
+         optimize_connection_fork (command);
 
          second = command->value.Connection->second;
          if (ignore_return && second)
@@ -2998,14 +3042,20 @@ eval_arith_for_expr (l, okp)
 {
   WORD_LIST *new;
   intmax_t expresult;
-  int r;
+  int r, eflag;
+  char *expr, *temp;
+
+  expr = l->next ? string_list (l) : l->word->word;
+  temp = expand_arith_string (expr, Q_DOUBLE_QUOTES|Q_ARITH);
+  if (l->next)
+    free (expr);
+  new = make_word_list (make_word (temp), (WORD_LIST *)NULL);
+  free (temp);
 
-  new = expand_words_no_vars (l);
   if (new)
     {
       if (echo_command_at_execute)
        xtrace_print_arith_cmd (new);
-      this_command_name = "((";                /* )) for expression error messages */
 
       command_string_index = 0;
       print_arith_command (new);
@@ -3018,9 +3068,12 @@ eval_arith_for_expr (l, okp)
       r = run_debug_trap ();
       /* In debugging mode, if the DEBUG trap returns a non-zero status, we
         skip the command. */
+      eflag = (shell_compatibility_level > 51) ? 0 : EXP_EXPANDED;
+      this_command_name = "((";                /* )) for expression error messages */
+      
 #if defined (DEBUGGER)
       if (debugging_mode == 0 || r == EXECUTION_SUCCESS)
-       expresult = evalexp (new->word->word, EXP_EXPANDED, okp);
+       expresult = evalexp (new->word->word, eflag, okp);
       else
        {
          expresult = 0;
@@ -3028,7 +3081,7 @@ eval_arith_for_expr (l, okp)
            *okp = 1;
        }
 #else
-      expresult = evalexp (new->word->word, EXP_EXPANDED, okp);
+      expresult = evalexp (new->word->word, eflag, okp);
 #endif
       dispose_words (new);
     }
@@ -3371,6 +3424,8 @@ execute_select_command (select_command)
     return (EXECUTION_SUCCESS);
 #endif
 
+  this_command_name = (char *)0;
+
   loop_level++;
   identifier = select_command->name->word;
 
@@ -3725,7 +3780,7 @@ static int
 execute_arith_command (arith_command)
      ARITH_COM *arith_command;
 {
-  int expok, save_line_number, retval;
+  int expok, save_line_number, retval, eflag;
   intmax_t expresult;
   WORD_LIST *new;
   char *exp, *t;
@@ -3734,7 +3789,7 @@ execute_arith_command (arith_command)
 
   save_line_number = line_number;
   this_command_name = "((";    /* )) */
-  line_number_for_err_trap = line_number = arith_command->line;
+  SET_LINE_NUMBER (arith_command->line);
   /* If we're in a function, update the line number information. */
   if (variable_context && interactive_shell && sourcelevel == 0)
     {
@@ -3767,14 +3822,13 @@ execute_arith_command (arith_command)
     }
 #endif
 
+  this_command_name = "((";    /* )) */
   t = (char *)NULL;
   new = arith_command->exp;
-  if (new->next)
-    exp = t = string_list (new);       /* just in case */
-  else
-    exp = new->word->word;
+  exp = (new->next) ? (t = string_list (new)) : new->word->word;
 
   exp = expand_arith_string (exp, Q_DOUBLE_QUOTES|Q_ARITH);
+  FREE (t);
 
   /* If we're tracing, make a new word list with `((' at the front and `))'
      at the back and print it. Change xtrace_print_arith_cmd to take a string
@@ -3788,7 +3842,8 @@ execute_arith_command (arith_command)
 
   if (exp)
     {
-      expresult = evalexp (exp, EXP_EXPANDED, &expok);
+      eflag = (shell_compatibility_level > 51) ? 0 : EXP_EXPANDED;
+      expresult = evalexp (exp, eflag, &expok);
       line_number = save_line_number;
       free (exp);
     }
@@ -3797,7 +3852,6 @@ execute_arith_command (arith_command)
       expresult = 0;
       expok = 1;
     }
-  FREE (t);
 
   if (expok == 0)
     return (EXECUTION_FAILURE);
@@ -3815,8 +3869,8 @@ static int
 execute_cond_node (cond)
      COND_COM *cond;
 {
-  int result, invert, patmatch, rmatch, mflags, ignore;
-  char *arg1, *arg2;
+  int result, invert, patmatch, rmatch, arith, mode, mflags, ignore;
+  char *arg1, *arg2, *op;
 #if 0
   char *t1, *t2;
 #endif
@@ -3847,41 +3901,66 @@ execute_cond_node (cond)
     }
   else if (cond->type == COND_UNARY)
     {
+      int oa, varop, varflag;
+
       if (ignore)
        comsub_ignore_return++;
-      arg1 = cond_expand_word (cond->left->op, 0);
+      varop = STREQ (cond->op->word, "-v");
+#if defined (ARRAY_VARS)
+      varflag = (varop && valid_array_reference (cond->left->op->word, VA_NOEXPAND)) ? TEST_ARRAYEXP : 0;
+#else
+      varflag = 0;
+#endif
+      arg1 = cond_expand_word (cond->left->op, varop ? 3 : 0);
       if (ignore)
        comsub_ignore_return--;
       if (arg1 == 0)
        arg1 = nullstr;
       if (echo_command_at_execute)
        xtrace_print_cond_term (cond->type, invert, cond->op, arg1, (char *)NULL);
-      result = unary_test (cond->op->word, arg1) ? EXECUTION_SUCCESS : EXECUTION_FAILURE;
+#if defined (ARRAY_VARS)
+      if (varop)
+       oa = set_expand_once (0, 0);    /* no-op for compatibility levels <= 51 */
+#endif
+      result = unary_test (cond->op->word, arg1, varflag) ? EXECUTION_SUCCESS : EXECUTION_FAILURE;
+#if defined (ARRAY_VARS)
+      if (varop)
+       assoc_expand_once = oa;
+#endif
       if (arg1 != nullstr)
        free (arg1);
     }
   else if (cond->type == COND_BINARY)
     {
       rmatch = 0;
-      patmatch = (((cond->op->word[1] == '=') && (cond->op->word[2] == '\0') &&
-                  (cond->op->word[0] == '!' || cond->op->word[0] == '=')) ||
-                 (cond->op->word[0] == '=' && cond->op->word[1] == '\0'));
+      op = cond->op->word;
+      mode = 0;
+      patmatch = (((op[1] == '=') && (op[2] == '\0') &&
+                  (op[0] == '!' || op[0] == '=')) ||
+                 (op[0] == '=' && op[1] == '\0'));
 #if defined (COND_REGEXP)
-      rmatch = (cond->op->word[0] == '=' && cond->op->word[1] == '~' &&
-               cond->op->word[2] == '\0');
+      rmatch = (op[0] == '=' && op[1] == '~' && op[2] == '\0');
 #endif
+      arith = STREQ (op, "-eq") || STREQ (op, "-ne") || STREQ (op, "-lt") ||
+             STREQ (op, "-le") || STREQ (op, "-gt") || STREQ (op, "-ge");
+
+      if (arith)
+       mode = 3;
+      else if (rmatch && shell_compatibility_level > 31)
+       mode = 2;
+      else if (patmatch)
+       mode = 1;
 
       if (ignore)
        comsub_ignore_return++;
-      arg1 = cond_expand_word (cond->left->op, 0);
+      arg1 = cond_expand_word (cond->left->op, arith ? mode : 0);
       if (ignore)
        comsub_ignore_return--;
       if (arg1 == 0)
        arg1 = nullstr;
       if (ignore)
        comsub_ignore_return++;
-      arg2 = cond_expand_word (cond->right->op,
-                              (rmatch && shell_compatibility_level > 31) ? 2 : (patmatch ? 1 : 0));
+      arg2 = cond_expand_word (cond->right->op, mode);
       if (ignore)
        comsub_ignore_return--;
       if (arg2 == 0)
@@ -3945,8 +4024,7 @@ execute_cond_command (cond_command)
 
   save_line_number = line_number;
 
-  this_command_name = "[[";
-  line_number_for_err_trap = line_number = cond_command->line;
+  SET_LINE_NUMBER (cond_command->line);
   /* If we're in a function, update the line number information. */
   if (variable_context && interactive_shell && sourcelevel == 0)
     {
@@ -3977,6 +4055,8 @@ execute_cond_command (cond_command)
     }
 #endif
 
+  this_command_name = "[[";    /* ]] */
+
 #if 0
   debug_print_cond_command (cond_command);
 #endif
@@ -4165,6 +4245,48 @@ fix_assignment_words (words)
       }
 }
 
+#if defined (ARRAY_VARS)
+/* Set W_ARRAYREF on words that are valid array references to a builtin that
+   accepts them. This is intended to completely replace assoc_expand_once in
+   time. */
+static void
+fix_arrayref_words (words)
+     WORD_LIST *words;
+{
+  WORD_LIST *w, *wcmd;
+  struct builtin *b;
+
+  if (words == 0)
+    return;
+
+  b = 0;
+
+  /* Skip over assignment statements preceding a command name */
+  wcmd = words;
+  for (wcmd = words; wcmd; wcmd = wcmd->next)
+    if ((wcmd->word->flags & W_ASSIGNMENT) == 0)
+      break;
+
+  /* Skip over `command' */
+  while (wcmd && wcmd->word && wcmd->word->word && STREQ (wcmd->word->word, "command"))
+    wcmd = wcmd->next;
+
+  if (wcmd == 0)
+    return;
+
+  /* If it's not an array reference builtin, we have nothing to do. */
+  b = builtin_address_internal (wcmd->word->word, 0);
+  if (b == 0 || (b->flags & ARRAYREF_BUILTIN) == 0)
+    return;
+
+  for (w = wcmd->next; w; w = w->next)
+    {
+      if (w->word && w->word->word && valid_array_reference (w->word->word, 0))
+       w->word->flags |= W_ARRAYREF;
+    }
+}
+#endif
+
 #ifndef ISOPTION
 #  define ISOPTION(s, c)  (s[0] == '-' && s[1] == c && s[2] == 0)
 #endif
@@ -4375,6 +4497,9 @@ execute_simple_command (simple_command, pipe_in, pipe_out, async, fds_to_close)
     {
       current_fds_to_close = fds_to_close;
       fix_assignment_words (simple_command->words);
+#if defined (ARRAY_VARS)
+      fix_arrayref_words (simple_command->words);
+#endif
       /* Pass the ignore return flag down to command substitutions */
       if (cmdflags & CMD_IGNORE_RETURN)        /* XXX */
        comsub_ignore_return++;
@@ -4436,17 +4561,27 @@ execute_simple_command (simple_command, pipe_in, pipe_out, async, fds_to_close)
        func = find_function (words->word->word);
     }
 
-  /* In POSIX mode, assignment errors in the temporary environment cause a
-     non-interactive shell to exit. */
-#if 1
-  if (posixly_correct && builtin_is_special && interactive_shell == 0 && tempenv_assign_error)
-#else
-  /* This is for strict posix conformance. */
-  if (posixly_correct && interactive_shell == 0 && tempenv_assign_error)
-#endif
+  /* What happens in posix mode when an assignment preceding a command name
+     fails.  This should agree with the code in execute_cmd.c:
+     do_assignment_statements(), even though I don't think it's executed any
+     more. */
+  if (posixly_correct && tempenv_assign_error)
     {
+#if defined (DEBUG)
+      /* I don't know if this clause is ever executed, so let's check */
+itrace("execute_simple_command: posix mode tempenv assignment error");
+#endif
       last_command_exit_value = EXECUTION_FAILURE;
-      jump_to_top_level (ERREXIT);
+#if defined (STRICT_POSIX)
+      jump_to_top_level ((interactive_shell == 0) ? FORCE_EOF : DISCARD);
+#else
+      if (interactive_shell == 0 && builtin_is_special)
+       jump_to_top_level (FORCE_EOF);
+      else if (interactive_shell == 0)
+       jump_to_top_level (DISCARD);    /* XXX - maybe change later */
+      else
+       jump_to_top_level (DISCARD);
+#endif
     }
   tempenv_assign_error = 0;    /* don't care about this any more */
 
@@ -4623,7 +4758,10 @@ run_builtin:
                      executing_builtin = old_builtin;
                      executing_command_builtin = old_command_builtin;
                      builtin = 0;
-                     /* XXX - redirections will have to be performed again */
+
+                     /* The redirections have already been `undone', so this
+                        will have to do them again. But piping is forever. */
+                     pipe_in = pipe_out = -1;
                      goto execute_from_filesystem;
                    }
                  result = builtin_status (result);
@@ -4896,7 +5034,7 @@ execute_function (var, words, flags, fds_to_close, async, subshell)
      struct fd_bitmap *fds_to_close;
      int async, subshell;
 {
-  int return_val, result;
+  int return_val, result, lineno;
   COMMAND *tc, *fc, *save_current;
   char *debug_trap, *error_trap, *return_trap;
 #if defined (ARRAY_VARS)
@@ -5024,7 +5162,8 @@ execute_function (var, words, flags, fds_to_close, async, subshell)
   array_push ((ARRAY *)funcname_a, this_shell_function->name);
 
   array_push ((ARRAY *)bash_source_a, sfile);
-  t = itos (executing_line_number ());
+  lineno = GET_LINE_NUMBER ();
+  t = itos (lineno);
   array_push ((ARRAY *)bash_lineno_a, t);
   free (t);
 #endif
@@ -5245,7 +5384,7 @@ execute_subshell_builtin_or_function (words, redirects, builtin, var,
       if (return_catch_flag && builtin == return_builtin)
         funcvalue = setjmp_nosigs (return_catch);
 
-      if (result == EXITPROG)
+      if (result == EXITPROG || result == EXITBLTIN)
        subshell_exit (last_command_exit_value);
       else if (result)
        subshell_exit (EXECUTION_FAILURE);
@@ -5482,18 +5621,19 @@ execute_disk_command (words, redirects, command_line, pipe_in, pipe_out,
     }
 #endif /* RESTRICTED_SHELL */
 
+  /* If we want to change this so `command -p' (CMD_STDPATH) does not insert
+     any pathname it finds into the hash table, it should read
+     command = search_for_command (pathname, stdpath ? CMDSRCH_STDPATH : CMDSRCH_HASH);
+  */
   command = search_for_command (pathname, CMDSRCH_HASH|(stdpath ? CMDSRCH_STDPATH : 0));
   QUIT;
 
   if (command)
     {
       /* If we're optimizing out the fork (implicit `exec'), decrement the
-        shell level like `exec' would do. */
-#if 0 /* TAG: bash-5.2 psmith 10/11/2020 */
+        shell level like `exec' would do. Don't do this if we are already
+        in a pipeline environment, assuming it's already been done. */
       if (nofork && pipe_in == NO_PIPE && pipe_out == NO_PIPE && (subshell_environment & SUBSHELL_PIPE) == 0)
-#else
-      if (nofork && pipe_in == NO_PIPE && pipe_out == NO_PIPE)
-#endif
        adjust_shell_level (-1);
 
       maybe_make_export_env ();
@@ -5557,6 +5697,8 @@ execute_disk_command (words, redirects, command_line, pipe_in, pipe_out,
       clear_fifo_list ();      /* XXX - we haven't created any FIFOs */
 #endif
 
+      /* reset shell_pgrp to pipeline_pgrp here for word expansions performed
+         by the redirections here? */
       if (redirects && (do_redirections (redirects, RX_ACTIVE) != 0))
        {
 #if defined (PROCESS_SUBSTITUTION)
@@ -5840,6 +5982,11 @@ shell_execve (command, args, env)
          errno = i;
          file_error (command);
        }
+      else if (i == ENOENT)
+       {
+         errno = i;
+         internal_error (_("%s: cannot execute: required file not found"), command);
+       }
       else
        {
          /* The file has the execute bits set, but the kernel refuses to
@@ -5889,7 +6036,7 @@ shell_execve (command, args, env)
      If so, the format of the line is "#! interpreter [argument]".
      A single argument is allowed.  The BSD kernel restricts
      the length of the entire line to 32 characters (32 bytes
-     being the size of the BSD exec header), but we allow 80
+     being the size of the BSD exec header), but we allow up to 128
      characters. */
   if (sample_len > 0)
     {
diff --git a/expr.c b/expr.c
index bbff95e93121787fbfa785b859c3ab921332b7ae..5079bd476309a46f1b7a8eba7cbee6e35b712cd3 100644 (file)
--- a/expr.c
+++ b/expr.c
@@ -1,6 +1,6 @@
 /* expr.c -- arithmetic expression evaluation. */
 
-/* Copyright (C) 1990-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1990-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
 #define COMMA  ','
 
 /* This should be the function corresponding to the operator with the
-   highest precedence. */
-#define EXP_HIGHEST    expcomma
+   lowest precedence. */
+#define EXP_LOWEST     expcomma
 
 #ifndef MAX_INT_LEN
 #  define MAX_INT_LEN 32
@@ -330,6 +330,7 @@ expr_bind_variable (lhs, rhs)
 
 #if defined (ARRAY_VARS)
   aflags = (assoc_expand_once && already_expanded) ? ASS_NOEXPAND : 0;
+  aflags |= ASS_ALLOWALLSUB;           /* allow assoc[@]=value */
 #else
   aflags = 0;
 #endif
@@ -340,7 +341,7 @@ expr_bind_variable (lhs, rhs)
 }
 
 #if defined (ARRAY_VARS)
-/* This is similar to the logic in arrayfunc.c:valid_array_subscript when
+/* This is similar to the logic in arrayfunc.c:valid_array_reference when
    you pass VA_NOEXPAND. */
 static int
 expr_skipsubscript (vp, cp)
@@ -471,8 +472,9 @@ subexpr (expr)
 
   readtok ();
 
-  val = EXP_HIGHEST ();
+  val = EXP_LOWEST ();
 
+  /*TAG:bash-5.3 make it clear that these are arithmetic syntax errors */
   if (curtok != 0)
     evalerror (_("syntax error in expression"));
 
@@ -638,7 +640,7 @@ expcond ()
       if (curtok == 0 || curtok == COL)
        evalerror (_("expression expected"));
 
-      val1 = EXP_HIGHEST ();
+      val1 = EXP_LOWEST ();
 
       if (set_noeval)
        noeval--;
@@ -1050,7 +1052,7 @@ exp0 ()
     {
       /* XXX - save curlval here?  Or entire expression context? */
       readtok ();
-      val = EXP_HIGHEST ();
+      val = EXP_LOWEST ();
 
       if (curtok != RPAR) /* ( */
        evalerror (_("missing `)'"));
@@ -1148,6 +1150,7 @@ expr_streval (tok, e, lvalue)
 #if defined (ARRAY_VARS)
   arrayind_t ind;
   int tflag, aflag;
+  array_eltstate_t es;
 #endif
 
 /*itrace("expr_streval: %s: noeval = %d expanded=%d", tok, noeval, already_expanded);*/
@@ -1159,12 +1162,12 @@ expr_streval (tok, e, lvalue)
   initial_depth = expr_depth;
 
 #if defined (ARRAY_VARS)
-  tflag = assoc_expand_once && already_expanded;       /* for a start */
+  tflag = (assoc_expand_once && already_expanded) ? AV_NOEXPAND : 0;   /* for a start */
 #endif
 
   /* [[[[[ */
 #if defined (ARRAY_VARS)
-  aflag = (tflag) ? AV_NOEXPAND : 0;
+  aflag = tflag;       /* use a different variable for now */
   v = (e == ']') ? array_variable_part (tok, tflag, (char **)0, (int *)0) : find_variable (tok);
 #else
   v = find_variable (tok);
@@ -1202,13 +1205,16 @@ expr_streval (tok, e, lvalue)
     }
 
 #if defined (ARRAY_VARS)
-  ind = -1;
+  init_eltstate (&es);
+  es.ind = -1;
   /* If the second argument to get_array_value doesn't include AV_ALLOWALL,
      we don't allow references like array[@].  In this case, get_array_value
      is just like get_variable_value in that it does not return newly-allocated
      memory or quote the results.  AFLAG is set above and is either AV_NOEXPAND
      or 0. */
-  value = (e == ']') ? get_array_value (tok, aflag, (int *)NULL, &ind) : get_variable_value (v);
+  value = (e == ']') ? get_array_value (tok, aflag, &es) : get_variable_value (v);
+  ind = es.ind;
+  flush_eltstate (&es);
 #else
   value = get_variable_value (v);
 #endif
@@ -1441,9 +1447,14 @@ readtok ()
        c = POWER;
       else if ((c == '-' || c == '+') && c1 == c && curtok == STR)
        c = (c == '-') ? POSTDEC : POSTINC;
+#if STRICT_ARITH_PARSING
+      else if ((c == '-' || c == '+') && c1 == c && curtok == NUM)
+#else
       else if ((c == '-' || c == '+') && c1 == c && curtok == NUM && (lasttok == PREINC || lasttok == PREDEC))
+#endif
        {
          /* This catches something like --FOO++ */
+         /* TAG:bash-5.3 add gettext calls here or make this a separate function */
          if (c == '-')
            evalerror ("--: assignment requires lvalue");
          else
@@ -1460,7 +1471,7 @@ readtok ()
            c = (c == '-') ? PREDEC : PREINC;
          else
            /* Could force parsing as preinc or predec and throw an error */
-#if 0
+#if STRICT_ARITH_PARSING
            {
              /* Posix says unary plus and minus have higher priority than
                 preinc and predec. */
@@ -1536,7 +1547,7 @@ strlong (num)
   register char *s;
   register unsigned char c;
   int base, foundbase;
-  intmax_t val;
+  intmax_t val, pval;
 
   s = num;
 
@@ -1554,6 +1565,10 @@ strlong (num)
        {
          base = 16;
          s++;
+#if STRICT_ARITH_PARSING
+         if (*s == 0)
+           evalerror (_("invalid number"));
+#endif     
        }
       else
        base = 8;
@@ -1597,7 +1612,14 @@ strlong (num)
          if (c >= base)
            evalerror (_("value too great for base"));
 
+#ifdef CHECK_OVERFLOW
+         pval = val;
          val = (val * base) + c;
+         if (val < 0 || val < pval)    /* overflow */
+           return INTMAX_MAX;
+#else
+         val = (val * base) + c;
+#endif
        }
       else
        break;
index 3d7716c6d1f58d979ac6361b8628b1b71683116a..931dba9cd3c317199115c093e08c21f14960cc9d 100644 (file)
--- a/externs.h
+++ b/externs.h
@@ -1,7 +1,7 @@
 /* externs.h -- extern function declarations which do not appear in their
    own header file. */
 
-/* Copyright (C) 1993-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1993-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -36,6 +36,7 @@ extern intmax_t evalexp PARAMS((char *, int, int *));
 #define FUNC_EXTERNAL  0x02
 
 extern char *make_command_string PARAMS((COMMAND *));
+extern char *print_comsub PARAMS((COMMAND *));
 extern char *named_function_string PARAMS((char *, COMMAND *, int));
 
 extern void print_command PARAMS((COMMAND *));
@@ -109,6 +110,7 @@ extern int yyparse PARAMS((void));
 extern int return_EOF PARAMS((void));
 extern void push_token PARAMS((int));
 extern char *xparse_dolparen PARAMS((char *, char *, int *, int));
+extern COMMAND *parse_string_to_command PARAMS((char *, int));
 extern void reset_parser PARAMS((void));
 extern void reset_readahead_token PARAMS((void));
 extern WORD_LIST *parse_string_to_word_list PARAMS((char *, int, const char *));
@@ -142,7 +144,7 @@ extern void set_default_lang PARAMS((void));
 extern char *get_locale_var PARAMS((char *));
 extern char *localetrans PARAMS((char *, int, int *));
 extern char *mk_msgstr PARAMS((char *, int *));
-extern char *localeexpand PARAMS((char *, int, int, int, int *));
+extern char *locale_expand PARAMS((char *, int, int, int, int *));
 #ifndef locale_decpoint
 extern int locale_decpoint PARAMS((void));
 #endif
@@ -211,7 +213,7 @@ extern void dprintf PARAMS((int, const char *, ...))  __attribute__((__format__
 extern char *fmtulong PARAMS((unsigned long int, int, char *, size_t, int));
 
 /* Declarations for functions defined in lib/sh/fmtulong.c */
-#if defined (HAVE_LONG_LONG)
+#if defined (HAVE_LONG_LONG_INT)
 extern char *fmtullong PARAMS((unsigned long long int, int, char *, size_t, int));
 #endif
 
@@ -341,7 +343,7 @@ extern char *sh_double_quote PARAMS((const char *));
 extern char *sh_mkdoublequoted PARAMS((const char *, int, int));
 extern char *sh_un_double_quote PARAMS((char *));
 extern char *sh_backslash_quote PARAMS((char *, const char *, int));
-extern char *sh_backslash_quote_for_double_quotes PARAMS((char *));
+extern char *sh_backslash_quote_for_double_quotes PARAMS((char *, int));
 extern char *sh_quote_reusable PARAMS((char *, int));
 extern int sh_contains_shell_metas PARAMS((const char *));
 extern int sh_contains_quotes PARAMS((const char *));
@@ -440,7 +442,7 @@ extern long strtol PARAMS((const char *, char **, int));
 #endif
 
 /* declarations for functions defined in lib/sh/strtoll.c */
-#if defined (HAVE_LONG_LONG) && !HAVE_DECL_STRTOLL
+#if defined (HAVE_LONG_LONG_INT) && !HAVE_DECL_STRTOLL
 extern long long strtoll PARAMS((const char *, char **, int));
 #endif
 
@@ -450,7 +452,7 @@ extern unsigned long strtoul PARAMS((const char *, char **, int));
 #endif
 
 /* declarations for functions defined in lib/sh/strtoull.c */
-#if defined (HAVE_LONG_LONG) && !HAVE_DECL_STRTOULL
+#if defined (HAVE_UNSIGNED_LONG_LONG_INT) && !HAVE_DECL_STRTOULL
 extern unsigned long long strtoull PARAMS((const char *, char **, int));
 #endif
 
@@ -470,6 +472,10 @@ extern char *ansic_quote PARAMS((char *, int, int *));
 extern int ansic_shouldquote PARAMS((const char *));
 extern char *ansiexpand PARAMS((char *, int, int, int *));
 
+/* declarations for functions defined in lib/sh/strvis.c */
+extern int sh_charvis PARAMS((const char *, size_t *, size_t, char *, size_t *));
+extern char *sh_strvis PARAMS((const char *));
+
 /* declarations for functions defined in lib/sh/timeval.c.  No prototypes
    so we don't have to count on having a definition of struct timeval in
    scope when this file is included. */
index e235705a37e0e5ecf1ca28caedaad2b7e62d75dc..95f231e5cd5741ebea68e5e505fee7272d3f6059 100644 (file)
--- a/findcmd.c
+++ b/findcmd.c
@@ -1,6 +1,6 @@
 /* findcmd.c -- Functions to search for commands by name. */
 
-/* Copyright (C) 1997-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1997-2022 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -54,8 +54,8 @@ extern int errno;
 /* Static functions defined and used in this file. */
 static char *_find_user_command_internal PARAMS((const char *, int));
 static char *find_user_command_internal PARAMS((const char *, int));
-static char *find_user_command_in_path PARAMS((const char *, char *, int));
-static char *find_in_path_element PARAMS((const char *, char *, int, int, struct stat *));
+static char *find_user_command_in_path PARAMS((const char *, char *, int, int *));
+static char *find_in_path_element PARAMS((const char *, char *, int, int, struct stat *, int *));
 static char *find_absolute_program PARAMS((const char *, int));
 
 static char *get_next_path_element PARAMS((char *, int *));
@@ -109,7 +109,7 @@ exec_name_should_ignore (name)
 
 /* Return some flags based on information about this file.
    The EXISTS bit is non-zero if the file is found.
-   The EXECABLE bit is non-zero the file is executble.
+   The EXECABLE bit is non-zero the file is executable.
    Zero is returned if the file is not found. */
 int
 file_status (name)
@@ -274,7 +274,7 @@ _find_user_command_internal (name, flags)
   if (path_list == 0 || *path_list == '\0')
     return (savestring (name));
 
-  cmd = find_user_command_in_path (name, path_list, flags);
+  cmd = find_user_command_in_path (name, path_list, flags, (int *)0);
 
   return (cmd);
 }
@@ -328,9 +328,9 @@ get_next_path_element (path_list, path_index_pointer)
 /* Look for PATHNAME in $PATH.  Returns either the hashed command
    corresponding to PATHNAME or the first instance of PATHNAME found
    in $PATH.  If (FLAGS&CMDSRCH_HASH) is non-zero, insert the instance of
-   PATHNAME found in $PATH into the command hash table.  If (FLAGS&CMDSRCH_STDPATH)
-   is non-zero, we are running in a `command -p' environment and should use
-   the Posix standard path.
+   PATHNAME found in $PATH into the command hash table.
+   If (FLAGS&CMDSRCH_STDPATH) is non-zero, we are running in a `command -p'
+   environment and should use the Posix standard path.
    Returns a newly-allocated string. */
 char *
 search_for_command (pathname, flags)
@@ -351,7 +351,7 @@ search_for_command (pathname, flags)
   /* Don't waste time trying to find hashed data for a pathname
      that is already completely specified or if we're using a command-
      specific value for PATH. */
-  if (temp_path == 0 && absolute_program (pathname) == 0)
+  if (temp_path == 0 && (flags & CMDSRCH_STDPATH) == 0 && absolute_program (pathname) == 0)
     hashed_file = phash_search (pathname);
 
   /* If a command found in the hash table no longer exists, we need to
@@ -384,24 +384,22 @@ search_for_command (pathname, flags)
       else
        path_list = 0;
 
-      command = find_user_command_in_path (pathname, path_list, FS_EXEC_PREFERRED|FS_NODIRS);
+      command = find_user_command_in_path (pathname, path_list, FS_EXEC_PREFERRED|FS_NODIRS, &st);
 
       if (command && hashing_enabled && temp_path == 0 && (flags & CMDSRCH_HASH))
        {
          /* If we found the full pathname the same as the command name, the
             command probably doesn't exist.  Don't put it into the hash
-            table. */
+            table unless it's an executable file in the current directory. */
          if (STREQ (command, pathname))
            {
-             st = file_status (command);
              if (st & FS_EXECABLE)
                phash_insert ((char *)pathname, command, dot_found_in_search, 1);
            }
          /* If we're in posix mode, don't add files without the execute bit
             to the hash table. */
-         else if (posixly_correct)
+         else if (posixly_correct || check_hashed_filenames)
            {
-             st = file_status (command);
              if (st & FS_EXECABLE)
                phash_insert ((char *)pathname, command, dot_found_in_search, 1);
            }
@@ -469,8 +467,7 @@ user_command_matches (name, flags, state)
          if (path_element == 0)
            break;
 
-         match = find_in_path_element (name, path_element, flags, name_len, &dotinfo);
-
+         match = find_in_path_element (name, path_element, flags, name_len, &dotinfo, (int *)0);
          free (path_element);
 
          if (match == 0)
@@ -523,11 +520,12 @@ find_absolute_program (name, flags)
 }
 
 static char *
-find_in_path_element (name, path, flags, name_len, dotinfop)
+find_in_path_element (name, path, flags, name_len, dotinfop, rflagsp)
      const char *name;
      char *path;
      int flags, name_len;
      struct stat *dotinfop;
+     int *rflagsp;
 {
   int status;
   char *full_path, *xpath;
@@ -536,6 +534,8 @@ find_in_path_element (name, path, flags, name_len, dotinfop)
 
   /* Remember the location of "." in the path, in all its forms
      (as long as they begin with a `.', e.g. `./.') */
+  /* We could also do this or something similar for all relative pathnames
+     found while searching PATH. */
   if (dot_found_in_search == 0 && *xpath == '.')
     dot_found_in_search = same_file (".", xpath, dotinfop, (struct stat *)NULL);
 
@@ -546,6 +546,9 @@ find_in_path_element (name, path, flags, name_len, dotinfop)
   if (xpath != path)
     free (xpath);
 
+  if (rflagsp)
+    *rflagsp = status;
+
   if ((status & FS_EXISTS) == 0)
     {
       free (full_path);
@@ -604,19 +607,22 @@ find_in_path_element (name, path, flags, name_len, dotinfop)
       FS_NODIRS:               Don't find any directories.
 */
 static char *
-find_user_command_in_path (name, path_list, flags)
+find_user_command_in_path (name, path_list, flags, rflagsp)
      const char *name;
      char *path_list;
-     int flags;
+     int flags, *rflagsp;
 {
   char *full_path, *path;
-  int path_index, name_len;
+  int path_index, name_len, rflags;
   struct stat dotinfo;
 
   /* We haven't started looking, so we certainly haven't seen
      a `.' as the directory path yet. */
   dot_found_in_search = 0;
 
+  if (rflagsp)
+    *rflagsp = 0;
+
   if (absolute_program (name))
     {
       full_path = find_absolute_program (name, flags);
@@ -643,12 +649,12 @@ find_user_command_in_path (name, path_list, flags)
 
       /* Side effects: sets dot_found_in_search, possibly sets
         file_to_lose_on. */
-      full_path = find_in_path_element (name, path, flags, name_len, &dotinfo);
+      full_path = find_in_path_element (name, path, flags, name_len, &dotinfo, &rflags);
       free (path);
 
-      /* This should really be in find_in_path_element, but there isn't the
-        right combination of flags. */
-      if (full_path && is_directory (full_path))
+      /* We use the file status flag bits to check whether full_path is a
+        directory, which we reject here. */
+      if (full_path && (rflags & FS_DIRECTORY))
        {
          free (full_path);
          continue;
@@ -656,6 +662,8 @@ find_user_command_in_path (name, path_list, flags)
 
       if (full_path)
        {
+         if (rflagsp)
+           *rflagsp = rflags;
          FREE (file_to_lose_on);
          return (full_path);
        }
@@ -667,7 +675,7 @@ find_user_command_in_path (name, path_list, flags)
      search would accept a non-executable as a last resort.  If the
      caller specified FS_NODIRS, and file_to_lose_on is a directory,
      return NULL. */
-  if (file_to_lose_on && (flags & FS_NODIRS) && is_directory (file_to_lose_on))
+  if (file_to_lose_on && (flags & FS_NODIRS) && file_isdir (file_to_lose_on))
     {
       free (file_to_lose_on);
       file_to_lose_on = (char *)NULL;
@@ -684,5 +692,5 @@ find_in_path (name, path_list, flags)
      char *path_list;
      int flags;
 {
-  return (find_user_command_in_path (name, path_list, flags));
+  return (find_user_command_in_path (name, path_list, flags, (int *)0));
 }
diff --git a/flags.c b/flags.c
index 983f9a507c8040de00e8b64b4c579a1a381ac809..30f6c13d4262c14643eb786125955e6f09138d80 100644 (file)
--- a/flags.c
+++ b/flags.c
@@ -1,7 +1,7 @@
 /* flags.c -- Everything about flags except the `set' command.  That
    is in builtins.c */
 
-/* Copyright (C) 1987-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
index 50d52167cea847e6bd389f1681cec35bb0a83805..85c5a8b685908a432992bd5035c612398884a11a 100644 (file)
--- a/general.c
+++ b/general.c
@@ -1,6 +1,6 @@
 /* general.c -- Stuff that is used by all files. */
 
-/* Copyright (C) 1987-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -683,6 +683,15 @@ check_binary_file (sample, sample_len)
   register int i;
   unsigned char c;
 
+  if (sample_len >= 4 && sample[0] == 0x7f && sample[1] == 'E' && sample[2] == 'L' && sample[3] == 'F')
+    return 1;
+
+  /* Generally we check the first line for NULs. If the first line looks like
+     a `#!' interpreter specifier, we just look for NULs anywhere in the
+     buffer. */
+  if (sample[0] == '#' && sample[1] == '!')
+    return (memchr (sample, '\0', sample_len) != NULL);
+
   for (i = 0; i < sample_len; i++)
     {
       c = sample[i];
index 7e4db8e6796691f2ae0aef1b98f8c97b5993d0ef..8064c50eb51edcafdc7af705b76494589ecd007f 100644 (file)
--- a/general.h
+++ b/general.h
@@ -1,6 +1,6 @@
 /* general.h -- defines that everybody likes to use. */
 
-/* Copyright (C) 1993-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1993-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -289,6 +289,7 @@ typedef int QSFUNC ();
 #define PATHSEP(c)     (ISDIRSEP(c) || (c) == 0)
 
 #define DOT_OR_DOTDOT(s)       (s[0] == '.' && (s[1] == 0 || (s[1] == '.' && s[2] == 0)))
+
 #if defined (HANDLE_MULTIBYTE)
 #define WDOT_OR_DOTDOT(w)      (w[0] == L'.' && (w[1] == L'\0' || (w[1] == L'.' && w[2] == L'\0')))
 #endif
index da3af005c206cb160d2e231f347469b285d7f794..891f967a58846e4d6bfbd7366df87143c9b9454b 100644 (file)
--- a/hashcmd.c
+++ b/hashcmd.c
@@ -1,7 +1,7 @@
 /* hashcmd.c - functions for managing a hash table mapping command names to
               full pathnames. */
 
-/* Copyright (C) 1997-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1997-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
index 098cfb96731f15c1131203cfe7bd0576fb114b61..d5be4a3ce73e7d5b30d5d21a8fd3e42831132e99 100644 (file)
@@ -1,6 +1,6 @@
 /* chartypes.h -- extend ctype.h */
 
-/* Copyright (C) 2001 Free Software Foundation, Inc.
+/* Copyright (C) 2001-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
 
 #include <ctype.h>
 
-/* Jim Meyering writes:
-
-   "... Some ctype macros are valid only for character codes that
-   isascii says are ASCII (SGI's IRIX-4.0.5 is one such system --when
-   using /bin/cc or gcc but without giving an ansi option).  So, all
-   ctype uses should be through macros like ISPRINT...  If
-   STDC_HEADERS is defined, then autoconf has verified that the ctype
-   macros don't need to be guarded with references to isascii. ...
-   Defining IN_CTYPE_DOMAIN to 1 should let any compiler worth its salt
-   eliminate the && through constant folding."
-   Solaris defines some of these symbols so we must undefine them first.  */
+#ifndef UCHAR_MAX
+#  define UCHAR_MAX 255
+#endif
+#ifndef CHAR_MAX
+#  define CHAR_MAX 127
+#endif
 
-#if STDC_HEADERS || (!defined (isascii) && !HAVE_ISASCII)
+/* use this as a proxy for C89 */
+#if defined (HAVE_STDLIB_H) && defined (HAVE_STRING_H)
 #  define IN_CTYPE_DOMAIN(c) 1
 #else
-#  define IN_CTYPE_DOMAIN(c) isascii(c)
+#  define IN_CTYPE_DOMAIN(c) ((c) >= 0 && (c) <= CHAR_MAX)
 #endif
 
 #if !defined (isspace) && !defined (HAVE_ISSPACE)
 #endif
 #ifndef UNCTRL
    /* control char to letter -- ASCII */
-#  define UNCTRL(x)    (TOUPPER(x) ^ 0x40)
+#  define UNCTRL(x)    (TOUPPER(x ^ 0x40))
 #endif
 
 #endif /* _SH_CHARTYPES_H */
index af5be8012b347eee3b62ba0e78f36109619999e0..b737bd7d1ce1e9a06fccc1bbf369119d772f85ee 100644 (file)
@@ -1,6 +1,6 @@
 /* posixdir.h -- Posix directory reading includes and defines. */
 
-/* Copyright (C) 1987,1991,2012 Free Software Foundation, Inc.
+/* Copyright (C) 1987,1991,2012,2019,2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
index a83e436bbced8900c5d8803c8ec1d8166659bdfb..e70ebec67cf08e756b0f32af79234ff11de103d8 100644 (file)
@@ -1,6 +1,6 @@
 /* posixtime.h -- wrapper for time.h, sys/times.h mess. */
 
-/* Copyright (C) 1999 Free Software Foundation, Inc.
+/* Copyright (C) 1999-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
 /* Some systems require this, mostly for the definition of `struct timezone'.
    For example, Dynix/ptx has that definition in <time.h> rather than
       sys/time.h */
-#if defined (TIME_WITH_SYS_TIME)
+#if defined (HAVE_SYS_TIME_H)
 #  include <sys/time.h>
-#  include <time.h>
-#else
-#  if defined (HAVE_SYS_TIME_H)
-#    include <sys/time.h>
-#  else
-#    include <time.h>
-#  endif
 #endif
+#include <time.h>
 
 #if !defined (HAVE_SYSCONF) || !defined (_SC_CLK_TCK)
 #  if !defined (CLK_TCK)
@@ -58,4 +52,33 @@ struct timeval
 extern int gettimeofday PARAMS((struct timeval *, void *));
 #endif
 
+/* These exist on BSD systems, at least. */
+#if !defined (timerclear)
+#  define timerclear(tvp)      do { (tvp)->tv_sec = 0; (tvp)->tv_usec = 0; } while (0)
+#endif
+#if !defined (timerisset)
+#  define timerisset(tvp)      ((tvp)->tv_sec || (tvp)->tv_usec)
+#endif
+#if !defined (timercmp)
+#  define timercmp(a, b, CMP) \
+       (((a)->tv_sec == (b)->tv_sec) ? ((a)->tv_usec CMP (b)->tv_usec) \
+                                     : ((a)->tv_sec CMP (b)->tv_sec))
+#endif
+
+/* These are non-standard. */
+#if !defined (timerisunset)
+#  define timerisunset(tvp)    ((tvp)->tv_sec == 0 && (tvp)->tv_usec == 0)
+#endif
+#if !defined (timerset)
+#  define timerset(tvp, s, u)  do { tvp->tv_sec = s; tvp->tv_usec = u; } while (0)
+#endif
+
+#ifndef TIMEVAL_TO_TIMESPEC
+#  define TIMEVAL_TO_TIMESPEC(tv, ts) \
+  do { \
+    (ts)->tv_sec = (tv)->tv_sec; \
+    (ts)->tv_nsec = (tv)->tv_usec * 1000; \
+  } while (0)
+#endif
+
 #endif /* _POSIXTIME_H_ */
index a4f3f2472cfc1aa249db769b3ceaf8a1b2333f5f..27b0024fb2729f58dff736a4b73fad89a89a2259 100644 (file)
@@ -1,5 +1,5 @@
 /* Multibyte character data type.
-   Copyright (C) 2001, 2005-2007, 2009-2010 Free Software Foundation, Inc.
+   Copyright (C) 2001, 2005-2007, 2009-2010, 2021 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
index 835fb80cdb6ee23f2e70216fb1fb8bb3e438bd82..0f711eab73f28944d92bfe350ddf5c8ab79a1829 100644 (file)
@@ -318,9 +318,11 @@ extern int locale_utf8locale;      /* XXX */
            size_t mblength; \
            int _k; \
 \
-           _k = is_basic (*((_src) + (_si))); \
+           _k = is_basic ((_src)[(_si)]); \
            if (_k) \
              mblength = 1; \
+           else if (locale_utf8locale && ((_src)[(_si)] & 0x80) == 0) \
+             mblength = (_src)[(_si)] != 0; \
            else \
              {\
                state_bak = state; \
@@ -361,9 +363,11 @@ extern int locale_utf8locale;      /* XXX */
            size_t mblength; \
            int _i; \
 \
-           _i = is_basic (*((_src) + (_si))); \
+           _i = is_basic ((_src)[(_si)]); \
            if (_i) \
              mblength = 1; \
+           else if (locale_utf8locale && ((_src)[(_si)] & 0x80) == 0) \
+             mblength = (_src)[(_si)] != 0; \
            else \
              { \
                state_bak = state; \
@@ -411,6 +415,8 @@ extern int locale_utf8locale;       /* XXX */
            _i = is_basic (*((_src) + (_si))); \
            if (_i) \
              mblength = 1; \
+           else if (locale_utf8locale && (((_src)[_si] & 0x80) == 0)) \
+              mblength = (_src)[_si] != 0; \
            else \
              { \
                state_bak = state; \
@@ -527,7 +533,9 @@ extern int locale_utf8locale;       /* XXX */
            i = is_basic (*((_src) + (_si))); \
            if (i) \
              mblength = 1; \
-           else \
+           else if (locale_utf8locale && (((_src)[_si] & 0x80) == 0)) \
+              mblength = (_src)[_si] != 0; \
+            else \
              { \
                state_bak = state; \
                mblength = mbrlen ((_src) + (_si), (_srcsize) - (_si), &state); \
index 7b9282cc721e5fbf69547134067b0be35cf0f950..38516ae5d0c18ef245075f6b1743cbdef1e08107 100644 (file)
@@ -1,7 +1,7 @@
 /* stdc.h -- macros to make source compile on both ANSI C and K&R C
    compilers. */
 
-/* Copyright (C) 1993 Free Software Foundation, Inc.
+/* Copyright (C) 1993-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
diff --git a/include/timer.h b/include/timer.h
new file mode 100644 (file)
index 0000000..2779475
--- /dev/null
@@ -0,0 +1,64 @@
+/* timer.h -- data structures used by the shell timers in lib/sh/timers.c */
+
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+
+   This file is part of GNU Bash, the Bourne Again SHell.
+
+   Bash is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+
+   Bash is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with Bash.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "bashjmp.h"
+typedef struct _shtimer
+{
+  struct timeval tmout;
+
+  int fd;
+  int flags;
+
+  int alrmflag;                                        /* should be set by alrm_handler */
+
+  SigHandler *alrm_handler;
+  SigHandler *old_handler;
+
+  procenv_t jmpenv;
+
+  int (*tm_handler) (struct _shtimer *);       /* called on timeout if set */
+  PTR_T        *data;                                  /* reserved */
+} sh_timer;
+
+#define SHTIMER_ALARM  0x01                    /* mutually exclusive */
+#define SHTIMER_SELECT 0x02
+#define SHTIMER_LONGJMP        0x04
+
+#define SHTIMER_SIGSET 0x100
+#define SHTIMER_ALRMSET        0x200
+
+extern sh_timer *shtimer_alloc (void);
+extern void shtimer_flush (sh_timer *);
+extern void shtimer_dispose (sh_timer *);
+
+extern void shtimer_set (sh_timer *, time_t, long);
+extern void shtimer_unset (sh_timer *);
+
+extern void shtimer_cleanup (sh_timer *);
+extern void shtimer_clear (sh_timer *);
+
+extern int shtimer_chktimeout (sh_timer *);
+
+extern int shtimer_select (sh_timer *);
+extern int shtimer_alrm (sh_timer *);
index 9853d5674ecbd1e50803f0998a4b071ac6ebaf35..e3b98f472ab5564f3be095e68d90da655c7e123e 100644 (file)
@@ -1,6 +1,6 @@
 /* typemax.h -- encapsulate max values for long, long long, etc. */
 
-/* Copyright (C) 2001 Free Software Foundation, Inc.
+/* Copyright (C) 2001-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -54,7 +54,7 @@
         : ((((t) 1 << (TYPE_WIDTH (t) - 2)) - 1) * 2 + 1)))
 #endif
 
-#ifdef HAVE_LONG_LONG
+#ifdef HAVE_LONG_LONG_INT
 #  ifndef LLONG_MAX
 #    define LLONG_MAX   TYPE_MAXIMUM(long long int)
 #    define LLONG_MIN  TYPE_MINIMUM(long long int)
 #  define UINT_MAX     ((unsigned int) ~(unsigned int)0)
 #endif
 
+#ifndef SHRT_MAX
+#  define SHRT_MAX     TYPE_MAXIMUM(short)
+#  define SHRT_MIN     TYPE_MINIMUM(short)
+#  define USHRT_MAX    ((unsigned short) ~(unsigned short)0)
+#endif
+
+#ifndef UCHAR_MAX
+#  define UCHAR_MAX    255
+#endif
+
 /* workaround for gcc bug in versions < 2.7 */
-#if defined (HAVE_LONG_LONG) && __GNUC__ == 2 && __GNUC_MINOR__ < 7
+#if defined (HAVE_LONG_LONG_INT) && __GNUC__ == 2 && __GNUC_MINOR__ < 7
 static const unsigned long long int maxquad = ULLONG_MAX;
 #  undef ULLONG_MAX
 #  define ULLONG_MAX maxquad
@@ -102,11 +112,11 @@ static const unsigned long long int maxquad = ULLONG_MAX;
 #endif
 
 #ifndef SSIZE_MAX
-#  define SSIZE_MAX    32767           /* POSIX minimum max */
+#  define SSIZE_MAX    INT_MAX
 #endif
 
 #ifndef SIZE_MAX
-#  define SIZE_MAX     65535           /* POSIX minimum max */
+#  define SIZE_MAX     ((size_t) ~(size_t)0)
 #endif
 
 #ifndef sh_imaxabs
diff --git a/input.c b/input.c
index c57e81c362f9514b07aedf6d4c8d5d5d06635b45..7b439f8c8943808699db33f163c1447c8964f81f 100644 (file)
--- a/input.c
+++ b/input.c
@@ -1,6 +1,6 @@
 /* input.c -- functions to perform buffered input with synchronization. */
 
-/* Copyright (C) 1992-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1992-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
diff --git a/jobs.c b/jobs.c
index 7c3b6e838f64c00460671cc9b82bcaca33c73ffd..6b986ed76ace7e249198d61c04aff6da26f02823 100644 (file)
--- a/jobs.c
+++ b/jobs.c
@@ -3,7 +3,7 @@
 /* This file works with both POSIX and BSD systems.  It implements job
    control. */
 
-/* Copyright (C) 1989-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2022 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -643,6 +643,9 @@ stop_pipeline (async, deferred)
 
       the_pipeline = (PROCESS *)NULL;
       newjob->pgrp = pipeline_pgrp;
+
+      /* Invariant: if the shell is executing a command substitution,
+        pipeline_pgrp == shell_pgrp. Other parts of the shell assume this. */
       if (pipeline_pgrp != shell_pgrp)
        pipeline_pgrp = 0;
 
@@ -832,9 +835,7 @@ bgp_add (pid, status)
   /* XXX - what if psi == *bucket? */
   if (psi == *bucket)
     {
-#ifdef DEBUG
-      internal_warning ("hashed pid %d (pid %d) collides with bgpids.head, skipping", psi, pid);
-#endif
+      internal_debug ("hashed pid %d (pid %d) collides with bgpids.head, skipping", psi, pid);
       bgpids.storage[psi].pid = NO_PID;                /* make sure */
       psi = bgp_getindex ();                   /* skip to next one */
     }
@@ -911,7 +912,7 @@ bgp_delete (pid)
   if (psi == NO_PIDSTAT)
     return 0;          /* not found */
 
-#if defined (DEBUG)
+#if 0
   itrace("bgp_delete: deleting %d", pid);
 #endif
 
@@ -1220,12 +1221,10 @@ cleanup_dead_jobs ()
   /* XXX could use js.j_firstj and js.j_lastj here */
   for (i = 0; i < js.j_jobslots; i++)
     {
-#if defined (DEBUG)
       if (i < js.j_firstj && jobs[i])
-       itrace("cleanup_dead_jobs: job %d non-null before js.j_firstj (%d)", i, js.j_firstj);
+       INTERNAL_DEBUG (("cleanup_dead_jobs: job %d non-null before js.j_firstj (%d)", i, js.j_firstj));
       if (i > js.j_lastj && jobs[i])
-       itrace("cleanup_dead_jobs: job %d non-null after js.j_lastj (%d)", i, js.j_lastj);
-#endif
+       INTERNAL_DEBUG(("cleanup_dead_jobs: job %d non-null after js.j_lastj (%d)", i, js.j_lastj));
 
       if (jobs[i] && DEADJOB (i) && IS_NOTIFIED (i))
        delete_job (i, 0);
@@ -1272,16 +1271,12 @@ delete_old_job (pid)
   job = find_job (pid, 0, &p);
   if (job != NO_JOB)
     {
-#ifdef DEBUG
-      itrace ("delete_old_job: found pid %d in job %d with state %d", pid, job, jobs[job]->state);
-#endif
+      INTERNAL_DEBUG (("delete_old_job: found pid %d in job %d with state %d", pid, job, jobs[job]->state));
       if (JOBSTATE (job) == JDEAD)
        delete_job (job, DEL_NOBGPID);
       else
        {
-#ifdef DEBUG
-         internal_warning (_("forked pid %d appears in running job %d"), pid, job+1);
-#endif
+         internal_debug (_("forked pid %d appears in running job %d"), pid, job+1);
          if (p)
            p->pid = 0;
        }
@@ -1429,9 +1424,7 @@ delete_job (job_index, dflags)
       js.j_ndead--;
       if (js.c_reaped < 0)
        {
-#ifdef DEBUG
-         itrace("delete_job (%d pgrp %d): js.c_reaped (%d) < 0 ndel = %d js.j_ndead = %d", job_index, temp->pgrp, js.c_reaped, ndel, js.j_ndead);
-#endif
+         INTERNAL_DEBUG (("delete_job (%d pgrp %d): js.c_reaped (%d) < 0 ndel = %d js.j_ndead = %d", job_index, temp->pgrp, js.c_reaped, ndel, js.j_ndead));
          js.c_reaped = 0;
        }
     }
@@ -1503,10 +1496,8 @@ add_process (name, pid)
   p = find_process (pid, 0, &j);
   if (p)
     {
-#  ifdef DEBUG
       if (j == NO_JOB)
-       internal_warning ("add_process: process %5ld (%s) in the_pipeline", (long)p->pid, p->command);
-#  endif
+       internal_debug ("add_process: process %5ld (%s) in the_pipeline", (long)p->pid, p->command);
       if (PALIVE (p))
        internal_warning (_("add_process: pid %5ld (%s) marked as still alive"), (long)p->pid, p->command);
       p->running = PS_RECYCLED;                /* mark as recycled */
@@ -1618,12 +1609,11 @@ map_over_jobs (func, arg1, arg2)
   /* XXX could use js.j_firstj here */
   for (i = result = 0; i < js.j_jobslots; i++)
     {
-#if defined (DEBUG)
       if (i < js.j_firstj && jobs[i])
-       itrace("map_over_jobs: job %d non-null before js.j_firstj (%d)", i, js.j_firstj);
+       INTERNAL_DEBUG (("map_over_jobs: job %d non-null before js.j_firstj (%d)", i, js.j_firstj));
       if (i > js.j_lastj && jobs[i])
-       itrace("map_over_jobs: job %d non-null after js.j_lastj (%d)", i, js.j_lastj);
-#endif
+       INTERNAL_DEBUG (("map_over_jobs: job %d non-null after js.j_lastj (%d)", i, js.j_lastj));
+
       if (jobs[i])
        {
          result = (*func)(jobs[i], arg1, arg2, i);
@@ -1782,12 +1772,11 @@ find_job (pid, alive_only, procp)
   /* XXX could use js.j_firstj here, and should check js.j_lastj */
   for (i = 0; i < js.j_jobslots; i++)
     {
-#if defined (DEBUG)
       if (i < js.j_firstj && jobs[i])
-       itrace("find_job: job %d non-null before js.j_firstj (%d)", i, js.j_firstj);
+       INTERNAL_DEBUG (("find_job: job %d non-null before js.j_firstj (%d)", i, js.j_firstj));
       if (i > js.j_lastj && jobs[i])
-       itrace("find_job: job %d non-null after js.j_lastj (%d)", i, js.j_lastj);
-#endif
+       INTERNAL_DEBUG (("find_job: job %d non-null after js.j_lastj (%d)", i, js.j_lastj));
+
       if (jobs[i])
        {
          p = jobs[i]->pipe;
@@ -2617,7 +2606,7 @@ wait_for_single_pid (pid, flags)
     {
       if (flags & JWAIT_PERROR)
        internal_error (_("wait: pid %ld is not a child of this shell"), (long)pid);
-      return (127);
+      return (257);
     }
 
   alive = 0;
@@ -2655,16 +2644,16 @@ wait_for_single_pid (pid, flags)
 }
 
 /* Wait for all of the background processes started by this shell to finish. */
-void
+int
 wait_for_background_pids (ps)
      struct procstat *ps;
 {
   register int i, r;
-  int any_stopped, check_async;
+  int any_stopped, check_async, njobs;
   sigset_t set, oset;
   pid_t pid;
 
-  for (any_stopped = 0, check_async = 1;;)
+  for (njobs = any_stopped = 0, check_async = 1;;)
     {
       BLOCK_CHILD (set, oset);
 
@@ -2672,12 +2661,11 @@ wait_for_background_pids (ps)
       /* XXX could use js.j_firstj and js.j_lastj here */
       for (i = 0; i < js.j_jobslots; i++)
        {
-#if defined (DEBUG)
          if (i < js.j_firstj && jobs[i])
-           itrace("wait_for_background_pids: job %d non-null before js.j_firstj (%d)", i, js.j_firstj);
+           INTERNAL_DEBUG (("wait_for_background_pids: job %d non-null before js.j_firstj (%d)", i, js.j_firstj));
          if (i > js.j_lastj && jobs[i])
-           itrace("wait_for_background_pids: job %d non-null after js.j_lastj (%d)", i, js.j_lastj);
-#endif
+           INTERNAL_DEBUG (("wait_for_background_pids: job %d non-null after js.j_lastj (%d)", i, js.j_lastj));
+
          if (jobs[i] && STOPPED (i))
            {
              builtin_warning ("job %d[%d] stopped", i+1, find_last_pid (i, 0));
@@ -2702,7 +2690,7 @@ wait_for_background_pids (ps)
       if (ps)
        {
          ps->pid = pid;
-         ps->status = (r < 0) ? 127 : r;
+         ps->status = (r < 0 || r > 256) ? 127 : r;
        }
       if (r == -1 && errno == ECHILD)
        {
@@ -2710,6 +2698,7 @@ wait_for_background_pids (ps)
          check_async = 0;
          mark_all_jobs_as_dead ();
        }
+      njobs++;
     }
 
 #if defined (PROCESS_SUBSTITUTION)
@@ -2721,6 +2710,8 @@ wait_for_background_pids (ps)
   mark_dead_jobs_as_notified (1);
   cleanup_dead_jobs ();
   bgp_clear ();
+
+  return njobs;
 }
 
 /* Make OLD_SIGINT_HANDLER the SIGINT signal handler. */
@@ -2738,6 +2729,7 @@ wait_sigint_cleanup ()
 {
   queue_sigchld = 0;
   waiting_for_child = 0;
+  restore_sigint_handler ();
 }
 
 static void
@@ -2936,11 +2928,7 @@ wait_for (pid, flags)
 
       temp_sigint_handler = set_signal_handler (SIGINT, wait_sigint_handler);
       if (temp_sigint_handler == wait_sigint_handler)
-       {
-#if defined (DEBUG)
-         internal_warning ("wait_for: recursively setting old_sigint_handler to wait_sigint_handler: running_trap = %d", running_trap);
-#endif
-       }
+       internal_debug ("wait_for: recursively setting old_sigint_handler to wait_sigint_handler: running_trap = %d", running_trap);
       else
        old_sigint_handler = temp_sigint_handler;
       waiting_for_child = 0;
@@ -3129,8 +3117,8 @@ if (job == NO_JOB)
          else
 #if defined (READLINE)
            /* We don't want to do this if we are running a process during
-              programmable completion. */
-           if (RL_ISSTATE (RL_STATE_COMPLETING) == 0)
+              programmable completion or a command bound to `bind -x'. */
+           if (RL_ISSTATE (RL_STATE_COMPLETING|RL_STATE_DISPATCHING|RL_STATE_TERMPREPPED) == 0)
 #endif
            get_tty_state ();
 
@@ -3707,7 +3695,7 @@ kill_pid (pid, sig, group)
            result = killpg (pid, sig);
          /* If we're killing using job control notification, for example,
             without job control active, we have to do things ourselves. */
-         else if (jobs[job]->pgrp == shell_pgrp)
+         else if (jobs[job]->pgrp == shell_pgrp)       /* XXX - IS_JOBCONTROL(job) == 0? */
            {
              p = jobs[job]->pipe;
              do
@@ -4536,6 +4524,7 @@ debug_print_pgrps ()
         (long)original_pgrp, (long)shell_pgrp, (long)terminal_pgrp);
   itrace("tcgetpgrp(%d) -> %ld, getpgid(0) -> %ld",
         shell_tty, (long)tcgetpgrp (shell_tty), (long)getpgid(0));
+  itrace("pipeline_pgrp -> %ld", (long)pipeline_pgrp);
 }
 #endif
 
@@ -4707,9 +4696,7 @@ maybe_give_terminal_to (opgrp, npgrp, flags)
     }
   else if (tpgrp != opgrp)
     {
-#if defined (DEBUG)
-      internal_warning ("%d: maybe_give_terminal_to: terminal pgrp == %d shell pgrp = %d new pgrp = %d in_background = %d", (int)getpid(), tpgrp, opgrp, npgrp, running_in_background);
-#endif
+      internal_debug ("%d: maybe_give_terminal_to: terminal pgrp == %d shell pgrp = %d new pgrp = %d in_background = %d", (int)getpid(), tpgrp, opgrp, npgrp, running_in_background);
       return -1;
     }
   else
@@ -4738,12 +4725,11 @@ delete_all_jobs (running_only)
       /* XXX could use js.j_firstj here */
       for (i = 0; i < js.j_jobslots; i++)
        {
-#if defined (DEBUG)
          if (i < js.j_firstj && jobs[i])
-           itrace("delete_all_jobs: job %d non-null before js.j_firstj (%d)", i, js.j_firstj);
+           INTERNAL_DEBUG (("delete_all_jobs: job %d non-null before js.j_firstj (%d)", i, js.j_firstj));
          if (i > js.j_lastj && jobs[i])
-           itrace("delete_all_jobs: job %d non-null after js.j_lastj (%d)", i, js.j_lastj);
-#endif
+           INTERNAL_DEBUG (("delete_all_jobs: job %d non-null after js.j_lastj (%d)", i, js.j_lastj));
+
          if (jobs[i] && (running_only == 0 || (running_only && RUNNING(i))))
            /* We don't want to add any of these pids to bgpids.  If running_only
               is non-zero, we don't want to add running jobs to the list.
@@ -4799,12 +4785,11 @@ count_all_jobs ()
   /* XXX could use js.j_firstj here */
   for (i = n = 0; i < js.j_jobslots; i++)
     {
-#if defined (DEBUG)
       if (i < js.j_firstj && jobs[i])
-       itrace("count_all_jobs: job %d non-null before js.j_firstj (%d)", i, js.j_firstj);
+       INTERNAL_DEBUG (("count_all_jobs: job %d non-null before js.j_firstj (%d)", i, js.j_firstj));
       if (i > js.j_lastj && jobs[i])
-       itrace("count_all_jobs: job %d non-null after js.j_lastj (%d)", i, js.j_lastj);
-#endif
+       INTERNAL_DEBUG (("count_all_jobs: job %d non-null after js.j_lastj (%d)", i, js.j_lastj));
+
       if (jobs[i] && DEADJOB(i) == 0)
        n++;
     }
@@ -4874,12 +4859,11 @@ mark_dead_jobs_as_notified (force)
   /* XXX could use js.j_firstj here */
   for (i = ndead = ndeadproc = 0; i < js.j_jobslots; i++)
     {
-#if defined (DEBUG)
       if (i < js.j_firstj && jobs[i])
-       itrace("mark_dead_jobs_as_notified: job %d non-null before js.j_firstj (%d)", i, js.j_firstj);
+       INTERNAL_DEBUG (("mark_dead_jobs_as_notified: job %d non-null before js.j_firstj (%d)", i, js.j_firstj));
       if (i > js.j_lastj && jobs[i])
-       itrace("mark_dead_jobs_as_notified: job %d non-null after js.j_lastj (%d)", i, js.j_lastj);
-#endif
+       INTERNAL_DEBUG (("mark_dead_jobs_as_notified: job %d non-null after js.j_lastj (%d)", i, js.j_lastj));
+
       if (jobs[i] && DEADJOB (i))
        {
          ndead++;
@@ -4887,14 +4871,12 @@ mark_dead_jobs_as_notified (force)
        }
     }
 
-#ifdef DEBUG
 # if 0
   if (ndeadproc != js.c_reaped)
     itrace("mark_dead_jobs_as_notified: ndeadproc (%d) != js.c_reaped (%d)", ndeadproc, js.c_reaped);
 # endif
   if (ndead != js.j_ndead)
-    itrace("mark_dead_jobs_as_notified: ndead (%d) != js.j_ndead (%d)", ndead, js.j_ndead);
-#endif
+    INTERNAL_DEBUG (("mark_dead_jobs_as_notified: ndead (%d) != js.j_ndead (%d)", ndead, js.j_ndead));
 
   if (js.c_childmax < 0)
     set_maxchild (0);
@@ -4927,12 +4909,11 @@ itrace("mark_dead_jobs_as_notified: child_max = %d ndead = %d ndeadproc = %d", j
     {
       if (jobs[i] && DEADJOB (i) && (interactive_shell || (find_last_pid (i, 0) != last_asynchronous_pid)))
        {
-#if defined (DEBUG)
          if (i < js.j_firstj && jobs[i])
-           itrace("mark_dead_jobs_as_notified: job %d non-null before js.j_firstj (%d)", i, js.j_firstj);
+           INTERNAL_DEBUG (("mark_dead_jobs_as_notified: job %d non-null before js.j_firstj (%d)", i, js.j_firstj));
          if (i > js.j_lastj && jobs[i])
-           itrace("mark_dead_jobs_as_notified: job %d non-null after js.j_lastj (%d)", i, js.j_lastj);
-#endif
+           INTERNAL_DEBUG (("mark_dead_jobs_as_notified: job %d non-null after js.j_lastj (%d)", i, js.j_lastj));
+
          /* If marking this job as notified would drop us down below
             child_max, don't mark it so we can keep at least child_max
             statuses.  XXX -- need to check what Posix actually says
@@ -4982,7 +4963,7 @@ set_job_control (arg)
   old = job_control;
   job_control = arg;
 
-  if (terminal_pgrp == NO_PID)
+  if (terminal_pgrp == NO_PID && shell_tty >= 0)
     terminal_pgrp = tcgetpgrp (shell_tty);
 
   /* If we're turning on job control we're going to want to know the shell's
diff --git a/jobs.h b/jobs.h
index 43ba8c23b291623230a5230e0ba55ee73ac78522..276204f0c7f4763defe37374b2382cf95fa11426 100644 (file)
--- a/jobs.h
+++ b/jobs.h
@@ -1,6 +1,6 @@
 /* jobs.h -- structures and definitions used by the jobs.c file. */
 
-/* Copyright (C) 1993-2019  Free Software Foundation, Inc.
+/* Copyright (C) 1993-2022  Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -279,7 +279,7 @@ extern int job_exit_status PARAMS((int));
 extern int job_exit_signal PARAMS((int));
 
 extern int wait_for_single_pid PARAMS((pid_t, int));
-extern void wait_for_background_pids PARAMS((struct procstat *));
+extern int wait_for_background_pids PARAMS((struct procstat *));
 extern int wait_for PARAMS((pid_t, int));
 extern int wait_for_job PARAMS((int, int, struct procstat *));
 extern int wait_for_any_job PARAMS((int, struct procstat *));
@@ -316,6 +316,10 @@ extern void restore_pgrp_pipe PARAMS((int *));
 
 extern void set_maxchild PARAMS((int));
 
+#ifdef DEBUG
+extern void debug_print_pgrps (void);
+#endif
+
 extern int job_control;                /* set to 0 in nojobs.c */
 
 #endif /* _JOBS_H_ */
index 314622f13e54d65f0a13989ef4c7e384365a816f..27e34f9ded015cf524aed44398507bac6d3b43be 100644 (file)
@@ -42,6 +42,7 @@ PROFILE_FLAGS = @PROFILE_FLAGS@
 
 CFLAGS = @CFLAGS@
 LOCAL_CFLAGS = @LOCAL_CFLAGS@
+STYLE_CFLAGS = @STYLE_CFLAGS@
 CPPFLAGS = @CPPFLAGS@
 LDFLAGS = @LDFLAGS@ @LOCAL_LDFLAGS@
 
@@ -53,7 +54,7 @@ BASHINCDIR = ${topdir}/include
 INCLUDES = -I. -I../.. -I$(topdir) -I$(BASHINCDIR) -I$(topdir)/lib
 
 CCFLAGS = $(PROFILE_FLAGS) $(DEFS) $(LOCAL_DEFS) ${INCLUDES} $(CPPFLAGS) \
-         $(LOCAL_CFLAGS) $(CFLAGS) ${ADDON_CFLAGS}
+         $(STYLE_CFLAGS) $(LOCAL_CFLAGS) $(CFLAGS) ${ADDON_CFLAGS}
 
 # Here is a rule for making .o files from .c files that doesn't force
 # the type of the machine (like -sun3) into the flags.
index eb6277f0458f9626e8221c71bf3beb3545e2ae62..b66af85c67fc90e67b8e29f51adf41f20d242fb9 100644 (file)
@@ -1,6 +1,6 @@
 /* glob.c -- file-name wildcard pattern matching for Bash.
 
-   Copyright (C) 1985-2020 Free Software Foundation, Inc.
+   Copyright (C) 1985-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne-Again SHell.
    
@@ -103,7 +103,7 @@ int glob_ignore_case = 0;
 /* Global variable controlling whether globbing ever returns . or ..
    regardless of the pattern. If set to 1, no glob pattern will ever
    match `.' or `..'. Disabled by default. */
-int glob_always_skip_dot_and_dotdot = 0;
+int glob_always_skip_dot_and_dotdot = 1;
 
 /* Global variable to return to signify an error in globbing. */
 char *glob_error_return;
@@ -119,10 +119,10 @@ void udequote_pathname PARAMS((char *));
 #if HANDLE_MULTIBYTE
 void wcdequote_pathname PARAMS((wchar_t *));
 static void wdequote_pathname PARAMS((char *));
+static void dequote_pathname PARAMS((char *));
 #else
-#  define dequote_pathname udequote_pathname
+#  define dequote_pathname(p) udequote_pathname(p)
 #endif
-static void dequote_pathname PARAMS((char *));
 static int glob_testdir PARAMS((char *, int));
 static char **glob_dir_to_array PARAMS((char *, char **, int));
 
@@ -185,6 +185,13 @@ glob_pattern_p (pattern)
 }
 
 #if EXTENDED_GLOB
+
+#if defined (HANDLE_MULTIBYTE)
+#  define XSKIPNAME(p, d, f)   mbskipname(p, d, f)
+#else
+#  define XSKIPNAME(p, d, f)   skipname(p, d, f)
+#endif
+
 /* Return 1 if all subpatterns in the extended globbing pattern PAT indicate
    that the name should be skipped.  XXX - doesn't handle pattern negation,
    not sure if it should */
@@ -194,30 +201,30 @@ extglob_skipname (pat, dname, flags)
      int flags;
 {
   char *pp, *pe, *t, *se;
-  int n, r, negate, wild, nullpat;
+  int n, r, negate, wild, nullpat, xflags;
 
   negate = *pat == '!';
   wild = *pat == '*' || *pat == '?';
   pp = pat + 2;
-  se = pp + strlen (pp) - 1;           /* end of string */
-  pe = glob_patscan (pp, se, 0);       /* end of extglob pattern (( */
-  /* we should check for invalid extglob pattern here */
+  se = pp + strlen (pp);               /* end of pattern string */
+  pe = glob_patscan (pp, se, 0);       /* end of extglob pattern */
+
+  /* if pe == 0, this is an invalid extglob pattern */
   if (pe == 0)
     return 0;
 
+  xflags = flags | ( negate ? GX_NEGATE : 0);
+
   /* if pe != se we have more of the pattern at the end of the extglob
      pattern. Check the easy case first ( */
-  if (pe == se && *pe == ')' && (t = strchr (pp, '|')) == 0)
+  if (pe == se && *pe == 0 && pe[-1] == ')' && (t = strchr (pp, '|')) == 0)
     {
-      *pe = '\0';
-#if defined (HANDLE_MULTIBYTE)
-      r = mbskipname (pp, dname, flags);
-#else
-      r = skipname (pp, dname, flags); /*(*/
-#endif
-      *pe = ')';
-      if (wild && pe[1])       /* if we can match zero instances, check further */
-        return (skipname (pe+1, dname, flags));
+      pe[-1] = '\0';
+      /* This is where we check whether the pattern is being negated and
+        match all files beginning with `.' if the pattern begins with a
+        literal `.'. */
+      r = XSKIPNAME (pp, dname, xflags); /*(*/
+      pe[-1] = ')';
       return r;
     }
 
@@ -229,21 +236,21 @@ extglob_skipname (pat, dname, flags)
   /* check every subpattern */
   while (t = glob_patscan (pp, pe, '|'))
     {
+      /* If T == PE and *T == 0 (&& PE[-1] == RPAREN), we have hit the end
+        of a pattern with no trailing characters. */
       n = t[-1];       /* ( */
-      if (extglob_pattern_p (pp) && n == ')')
+      if (extglob_pattern_p (pp) && n == ')')          /* nested extglob? */
        t[-1] = n;      /* no-op for now */
       else
        t[-1] = '\0';
-#if defined (HANDLE_MULTIBYTE)
-      r = mbskipname (pp, dname, flags);
-#else
-      r = skipname (pp, dname, flags);
-#endif
+      r = XSKIPNAME (pp, dname, xflags);
       t[-1] = n;
       if (r == 0)      /* if any pattern says not skip, we don't skip */
         return r;
       pp = t;
-    }  /*(*/
+      if (pp == pe)
+       break;
+    }
 
   /* glob_patscan might find end of string */
   if (pp == se)
@@ -251,7 +258,8 @@ extglob_skipname (pat, dname, flags)
 
   /* but if it doesn't then we didn't match a leading dot */
   if (wild && *pe)     /* if we can match zero instances, check further */
-    return (skipname (pe, dname, flags));
+    return (XSKIPNAME (pe, dname, flags));
+
   return 1;
 }
 #endif
@@ -264,6 +272,8 @@ skipname (pat, dname, flags)
      char *dname;
      int flags;
 {
+  int i;
+
 #if EXTENDED_GLOB
   if (extglob_pattern_p (pat))         /* XXX */
     return (extglob_skipname (pat, dname, flags));
@@ -279,9 +289,19 @@ skipname (pat, dname, flags)
        DOT_OR_DOTDOT (dname))
     return 1;
 
+#if 0
+  /* This is where we check whether the pattern is being negated and
+     match all files beginning with `.' if the pattern begins with a
+     literal `.'. This is the negation of the next clause. */
+  else if ((flags & GX_NEGATE) && noglob_dot_filenames == 0 &&
+       dname[0] == '.' &&
+       (pat[0] == '.' || (pat[0] == '\\' && pat[1] == '.')))
+    return 0;
+#endif
+
   /* If a dot must be explicitly matched, check to see if they do. */
-  else if (noglob_dot_filenames && dname[0] == '.' && pat[0] != '.' &&
-       (pat[0] != '\\' || pat[1] != '.'))
+  else if (noglob_dot_filenames && dname[0] == '.' &&
+          pat[0] != '.' && (pat[0] != '\\' || pat[1] != '.'))
     return 1;
 
   return 0;
@@ -294,6 +314,8 @@ wskipname (pat, dname, flags)
      wchar_t *pat, *dname;
      int flags;
 {
+  int i;
+
   if (glob_always_skip_dot_and_dotdot && WDOT_OR_DOTDOT (dname))
     return 1;
 
@@ -304,11 +326,20 @@ wskipname (pat, dname, flags)
        WDOT_OR_DOTDOT (dname))
     return 1;
 
+#if 0
+  /* This is where we check whether the pattern is being negated and
+     match all files beginning with `.' if the pattern begins with a
+     literal `.'. This is the negation of the next clause. */
+  else if ((flags & GX_NEGATE) && noglob_dot_filenames == 0 &&
+       dname[0] == L'.' &&
+       (pat[0] == L'.' || (pat[0] == L'\\' && pat[1] == L'.')))
+    return 0;
+#endif
+
   /* If a leading dot must be explicitly matched, check to see if the
      pattern and dirname both have one. */
- else if (noglob_dot_filenames && dname[0] == L'.' &&
-       pat[0] != L'.' &&
-          (pat[0] != L'\\' || pat[1] != L'.'))
+  else if (noglob_dot_filenames && dname[0] == L'.' &&
+       pat[0] != L'.' && (pat[0] != L'\\' || pat[1] != L'.'))
     return 1;
 
   return 0;
@@ -320,22 +351,28 @@ wextglob_skipname (pat, dname, flags)
      int flags;
 {
 #if EXTENDED_GLOB
-  wchar_t *pp, *pe, *t, n, *se;
-  int r, negate, wild, nullpat;
+  wchar_t *pp, *pe, *t, *se, n;
+  int r, negate, wild, nullpat, xflags;
 
   negate = *pat == L'!';
   wild = *pat == L'*' || *pat == L'?';
   pp = pat + 2;
-  se = pp + wcslen (pp) - 1;   /*(*/
+  se = pp + wcslen (pp);
   pe = glob_patscan_wc (pp, se, 0);
 
-  if (pe == se && *pe == ')' && (t = wcschr (pp, L'|')) == 0)
+  /* if pe == 0, this is an invalid extglob pattern */
+  if (pe == 0)
+    return 0;
+
+  xflags = flags | ( negate ? GX_NEGATE : 0);
+
+  /* if pe != se we have more of the pattern at the end of the extglob
+     pattern. Check the easy case first ( */
+  if (pe == se && *pe == L'\0' && pe[-1] == L')' && (t = wcschr (pp, L'|')) == 0)
     {
-      *pe = L'\0';
-      r = wskipname (pp, dname, flags); /*(*/
-      *pe = L')';
-      if (wild && pe[1] != L'\0')
-        return (wskipname (pe+1, dname, flags));
+      pe[-1] = L'\0';
+      r = wskipname (pp, dname, xflags); /*(*/
+      pe[-1] = L')';
       return r;
     }
 
@@ -348,23 +385,27 @@ wextglob_skipname (pat, dname, flags)
   while (t = glob_patscan_wc (pp, pe, '|'))
     {
       n = t[-1];       /* ( */
-      if (wextglob_pattern_p (pp) && n == L')')
+      if (wextglob_pattern_p (pp) && n == L')')                /* nested extglob? */
        t[-1] = n;      /* no-op for now */
       else
        t[-1] = L'\0';
-      r = wskipname (pp, dname, flags);
+      r = wskipname (pp, dname, xflags);
       t[-1] = n;
       if (r == 0)
        return 0;
       pp = t;
+      if (pp == pe)
+       break;
     }
 
-  if (pp == pe)                /* glob_patscan_wc might find end of pattern */
+  /* glob_patscan_wc might find end of string */
+  if (pp == se)
     return r;
 
   /* but if it doesn't then we didn't match a leading dot */
   if (wild && *pe != L'\0')
     return (wskipname (pe, dname, flags));
+
   return 1;
 #else
   return (wskipname (pat, dname, flags));
@@ -765,7 +806,7 @@ glob_vector (pat, dir, flags)
 
       /* Compute the flags that will be passed to strmatch().  We don't
         need to do this every time through the loop. */
-      mflags = (noglob_dot_filenames ? FNM_PERIOD : 0) | FNM_PATHNAME;
+      mflags = (noglob_dot_filenames ? FNM_PERIOD : FNM_DOTDOT) | FNM_PATHNAME;
 
 #ifdef FNM_CASEFOLD
       if (glob_ignore_case)
@@ -777,8 +818,7 @@ glob_vector (pat, dir, flags)
 
       add_current = ((flags & (GX_ALLDIRS|GX_ADDCURDIR)) == (GX_ALLDIRS|GX_ADDCURDIR));
 
-      /* Scan the directory, finding all names that match.
-        For each name that matches, allocate a struct globval
+      /* Scan the directory, finding all names that match       For each name that matches, allocate a struct globval
         on the stack and store the name in it.
         Chain those structs together; lastlink is the front of the chain.  */
       while (1)
@@ -860,6 +900,9 @@ glob_vector (pat, dir, flags)
              nextname = (char *) malloc (sdlen + 1);
              if (nextlink == 0 || nextname == 0)
                {
+                 if (firstmalloc && firstmalloc == nextlink)
+                   firstmalloc = 0;
+                 /* If we reset FIRSTMALLOC we can free this here. */
                  FREE (nextlink);
                  FREE (nextname);
                  free (subdir);
@@ -895,7 +938,18 @@ glob_vector (pat, dir, flags)
              nextname = (char *) malloc (D_NAMLEN (dp) + 1);
              if (nextlink == 0 || nextname == 0)
                {
-                 FREE (nextlink);
+                 /* We free NEXTLINK here, since it won't be added to the
+                    LASTLINK chain. If we used malloc, and it returned non-
+                    NULL, firstmalloc will be set to something valid. If it's
+                    NEXTLINK, reset it before we free NEXTLINK to avoid
+                    duplicate frees. If not, it will be taken care of by the
+                    loop below with TMPLINK. */
+                 if (firstmalloc)
+                   {
+                     if (firstmalloc == nextlink)
+                       firstmalloc = 0;
+                     FREE (nextlink);
+                   }
                  FREE (nextname);
                  lose = 1;
                  break;
@@ -914,7 +968,7 @@ glob_vector (pat, dir, flags)
   /* compat: if GX_ADDCURDIR, add the passed directory also.  Add an empty
      directory name as a placeholder if GX_NULLDIR (in which case the passed
      directory name is "."). */
-  if (add_current)
+  if (add_current && lose == 0)
     {
       sdlen = strlen (dir);
       nextname = (char *)malloc (sdlen + 1);
@@ -944,7 +998,7 @@ glob_vector (pat, dir, flags)
       lose |= name_vector == NULL;
     }
 
-  /* Have we run out of memory?         */
+  /* Have we run out of memory or been interrupted? */
   if (lose)
     {
       tmplink = 0;
@@ -1441,6 +1495,7 @@ only_filename:
            {
              if (free_dirname)
                free (directory_name);
+             free ((char *) result);
              return ((char **)&glob_error_return);
            }
        }
index ca3a66cf1e218b3cff856fd1608c7a4e1241deb7..47410577c2c09864aecfd76dc1dd23edb1937568 100644 (file)
@@ -1,5 +1,5 @@
 /* File-name wildcard pattern matching for GNU.
-   Copyright (C) 1985-2020 Free Software Foundation, Inc.
+   Copyright (C) 1985-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne-Again SHell.
 
@@ -32,6 +32,7 @@
 #define GX_GLOBSTAR    0x400   /* turn on special handling of ** */
 #define GX_RECURSE     0x800   /* internal -- glob_filename called recursively */
 #define GX_SYMLINK     0x1000  /* internal -- symlink to a directory */
+#define GX_NEGATE      0x2000  /* internal -- extglob pattern being negated */
 
 extern int glob_pattern_p PARAMS((const char *));
 extern char **glob_vector PARAMS((char *, char *, int));
index a98c14bd578b6482875834f68c4dd13ca394e5a3..247ba28aa5c0e7fccc3bd328b5fc8f2e5de21889 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1991-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
    
@@ -16,6 +16,8 @@
    along with Bash.  If not, see <http://www.gnu.org/licenses/>.
 */
 
+extern int interrupt_state, terminating_signal;
+
 struct STRUCT
 {
   CHAR *pattern;
@@ -81,6 +83,9 @@ fprintf(stderr, "gmatch: pattern = %s; pe = %s\n", pattern, pe);
 
       sc = n < se ? *n : '\0';
 
+      if (interrupt_state || terminating_signal)
+       return FNM_NOMATCH;
+
 #ifdef EXTENDED_GLOB
       /* EXTMATCH () will handle recursively calling GMATCH, so we can
         just return what EXTMATCH() returns. */
@@ -90,7 +95,7 @@ fprintf(stderr, "gmatch: pattern = %s; pe = %s\n", pattern, pe);
          int lflags;
          /* If we're not matching the start of the string, we're not
             concerned about the special cases for matching `.' */
-         lflags = (n == string) ? flags : (flags & ~FNM_PERIOD);
+         lflags = (n == string) ? flags : (flags & ~(FNM_PERIOD|FNM_DOTDOT));
          return (EXTMATCH (c, n, se, p, pe, lflags));
        }
 #endif /* EXTENDED_GLOB */
@@ -109,6 +114,15 @@ fprintf(stderr, "gmatch: pattern = %s; pe = %s\n", pattern, pe);
               string or if it is the first character following a slash and
               we are matching a pathname. */
            return FNM_NOMATCH;
+
+         /* `?' cannot match `.' or `..' if it is the first character of the
+            string or if it is the first character following a slash and
+            we are matching a pathname. */
+         if ((flags & FNM_DOTDOT) &&
+             ((n == string && SDOT_OR_DOTDOT(n)) ||
+              ((flags & FNM_PATHNAME) && n[-1] == L('/') && PDOT_OR_DOTDOT(n))))
+           return FNM_NOMATCH;
+
          break;
 
        case L('\\'):           /* backslash escape removes special meaning */
@@ -147,6 +161,14 @@ fprintf(stderr, "gmatch: pattern = %s; pe = %s\n", pattern, pe);
               we are matching a pathname. */
            return FNM_NOMATCH;
 
+         /* `*' cannot match `.' or `..' if it is the first character of the
+            string or if it is the first character following a slash and
+            we are matching a pathname. */
+         if ((flags & FNM_DOTDOT) &&
+             ((n == string && SDOT_OR_DOTDOT(n)) ||
+              ((flags & FNM_PATHNAME) && n[-1] == L('/') && PDOT_OR_DOTDOT(n))))
+           return FNM_NOMATCH;
+
          if (p == pe)
            return 0;
 
@@ -288,7 +310,7 @@ fprintf(stderr, "gmatch: pattern = %s; pe = %s\n", pattern, pe);
                  continue;
 
                /* Otherwise, we just recurse. */
-               if (GMATCH (n, se, p, pe, &end, flags & ~FNM_PERIOD) == 0)
+               if (GMATCH (n, se, p, pe, &end, flags & ~(FNM_PERIOD|FNM_DOTDOT)) == 0)
                  {
                    if (end.pattern == NULL)
                      return (0);
@@ -321,6 +343,14 @@ fprintf(stderr, "gmatch: pattern = %s; pe = %s\n", pattern, pe);
                (n == string || ((flags & FNM_PATHNAME) && n[-1] == L('/'))))
              return (FNM_NOMATCH);
 
+           /* `?' cannot match `.' or `..' if it is the first character of the
+              string or if it is the first character following a slash and
+              we are matching a pathname. */
+           if ((flags & FNM_DOTDOT) &&
+               ((n == string && SDOT_OR_DOTDOT(n)) ||
+               ((flags & FNM_PATHNAME) && n[-1] == L('/') && PDOT_OR_DOTDOT(n))))
+             return FNM_NOMATCH;
+
            p = BRACKMATCH (p, sc, flags);
            if (p == 0)
              return FNM_NOMATCH;
@@ -843,7 +873,7 @@ fprintf(stderr, "extmatch: flags = %d\n", flags);
              if (m1)
                {
                  /* if srest > s, we are not at start of string */
-                 xflags = (srest > s) ? (flags & ~FNM_PERIOD) : flags;
+                 xflags = (srest > s) ? (flags & ~(FNM_PERIOD|FNM_DOTDOT)) : flags;
                  m2 = (GMATCH (srest, se, prest, pe, NULL, xflags) == 0) ||
                        (s != srest && GMATCH (srest, se, p - 1, pe, NULL, xflags) == 0);
                }
@@ -873,7 +903,7 @@ fprintf(stderr, "extmatch: flags = %d\n", flags);
          for ( ; srest <= se; srest++)
            {
              /* if srest > s, we are not at start of string */
-             xflags = (srest > s) ? (flags & ~FNM_PERIOD) : flags;
+             xflags = (srest > s) ? (flags & ~(FNM_PERIOD|FNM_DOTDOT)) : flags;
              if (GMATCH (s, srest, psub, pnext - 1, NULL, flags) == 0 &&
                  GMATCH (srest, se, prest, pe, NULL, xflags) == 0)
                return (0);
@@ -899,12 +929,17 @@ fprintf(stderr, "extmatch: flags = %d\n", flags);
 
          /* If nothing matched, but the string starts with a period and we
             need to match periods explicitly, don't return this as a match,
-            even for negation. Might need to do this only if srest == s. */
-         if (m1 == 0 && *s == '.' && (flags & FNM_PERIOD))
+            even for negation. */
+         if (m1 == 0 && (flags & FNM_PERIOD) && *s == '.')
+           return (FNM_NOMATCH);
+
+         if (m1 == 0 && (flags & FNM_DOTDOT) &&
+             (SDOT_OR_DOTDOT (s) ||
+              ((flags & FNM_PATHNAME) && s[-1] == L('/') && PDOT_OR_DOTDOT(s))))
            return (FNM_NOMATCH);
 
          /* if srest > s, we are not at start of string */
-         xflags = (srest > s) ? (flags & ~FNM_PERIOD) : flags;
+         xflags = (srest > s) ? (flags & ~(FNM_PERIOD|FNM_DOTDOT)) : flags;
          if (m1 == 0 && GMATCH (srest, se, prest, pe, NULL, xflags) == 0)
            return (0);
        }
@@ -939,4 +974,8 @@ fprintf(stderr, "extmatch: flags = %d\n", flags);
 #undef MEMCHR
 #undef COLLEQUIV
 #undef RANGECMP
+#undef ISDIRSEP
+#undef PATHSEP
+#undef PDOT_OR_DOTDOT
+#undef SDOT_OR_DOTDOT
 #undef L
index a58456d7e613bc56858af3e649172d1a22ac3da9..379c2d2e62d5e8452706a1b5a4ba5d5f364bf5fc 100644 (file)
@@ -1,7 +1,7 @@
 /* strmatch.c -- ksh-like extended pattern matching for the shell and filename
                globbing. */
 
-/* Copyright (C) 1991-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1991-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
    
@@ -308,6 +308,16 @@ is_cclass (c, name)
        ? TOLOWER ((unsigned char)c) \
        : ((unsigned char)c))
 
+#if !defined (__CYGWIN__)
+#  define ISDIRSEP(c)  ((c) == '/')
+#else
+#  define ISDIRSEP(c)  ((c) == '/' || (c) == '\\')
+#endif /* __CYGWIN__ */
+#define PATHSEP(c)     (ISDIRSEP(c) || (c) == 0)
+
+#  define PDOT_OR_DOTDOT(s)    (s[0] == '.' && (PATHSEP (s[1]) || (s[1] == '.' && PATHSEP (s[2]))))
+#  define SDOT_OR_DOTDOT(s)    (s[0] == '.' && (s[1] == 0 || (s[1] == '.' && s[2] == 0)))
+
 #define FCT                    internal_strmatch
 #define GMATCH                 gmatch
 #define COLLSYM                        collsym
@@ -553,6 +563,17 @@ posix_cclass_only (pattern)
 
 /* Now include `sm_loop.c' for multibyte characters. */
 #define FOLD(c) ((flags & FNM_CASEFOLD) && iswupper (c) ? towlower (c) : (c))
+
+#  if !defined (__CYGWIN__)
+#    define ISDIRSEP(c)        ((c) == L'/')
+#  else
+#    define ISDIRSEP(c)        ((c) == L'/' || (c) == L'\\')
+#  endif /* __CYGWIN__ */
+#  define PATHSEP(c)   (ISDIRSEP(c) || (c) == L'\0')
+
+#  define PDOT_OR_DOTDOT(w)    (w[0] == L'.' && (PATHSEP(w[1]) || (w[1] == L'.' && PATHSEP(w[2]))))
+#  define SDOT_OR_DOTDOT(w)    (w[0] == L'.' && (w[1] == L'\0' || (w[1] == L'.' && w[2] == L'\0')))
+
 #define FCT                    internal_wstrmatch
 #define GMATCH                 gmatch_wc
 #define COLLSYM                        collwcsym
index fa7be7bb2f76974b7846ceb7cc6da4e9eb0abf55..d6a6b0fb397669e165dcf1f080b960386e9d5661 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1991-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne-Again SHell.
 
@@ -47,6 +47,7 @@
 #define FNM_EXTMATCH   (1 << 5) /* Use ksh-like extended matching. */
 
 #define FNM_FIRSTCHAR  (1 << 6) /* Match only the first character */
+#define FNM_DOTDOT     (1 << 7) /* force `.' and `..' to match explicitly even if FNM_PERIOD not supplied. */
 
 /* Value returned by `strmatch' if STRING does not match PATTERN.  */
 #undef FNM_NOMATCH
index 130318357bbec430d9b26966fabbe1038100e3c3..f49e0dd829d949f82afedd8506f89560edbf3578 100644 (file)
@@ -1 +1,3 @@
 GNU gettext library from gettext-0.12.1
+
+This is here only in the case the system doesn't provide it
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index 0ef3cfd5362ea500d3ee00f93a7f0b4c53d838a4..7ec8f64f82bed6134cdd0707902f606a681655ac 100644 (file)
@@ -1,6 +1,6 @@
 # Skeleton Makefile for the GNU malloc code
 #
-# Copyright (C) 1996-2009 Free Software Foundation, Inc.
+# Copyright (C) 1996-2021 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
@@ -38,6 +38,7 @@ PROFILE_FLAGS = @PROFILE_FLAGS@
 
 CFLAGS = @CFLAGS@
 LOCAL_CFLAGS = @LOCAL_CFLAGS@
+STYLE_CFLAGS = @STYLE_CFLAGS@
 CPPFLAGS = @CPPFLAGS@
 LDFLAGS = @LDFLAGS@
 
@@ -56,7 +57,7 @@ LIBINTL_H = @LIBINTL_H@
 INCLUDES = -I. -I../.. -I$(topdir) -I$(BASHINCDIR) -I$(topdir)/lib $(INTL_INC)
 
 CCFLAGS = ${PROFILE_FLAGS} ${INCLUDES} $(DEFS) $(LOCAL_DEFS) $(LOCAL_CFLAGS) \
-         $(CFLAGS) $(MALLOC_CFLAGS) $(CPPFLAGS)
+         $(CFLAGS) $(MALLOC_CFLAGS) $(STYLE_CFLAGS) $(CPPFLAGS)
 
 .c.o:
        $(CC) $(CCFLAGS) -c $<
index d07adac2a211eb68d553d24adc076e020be13bf0..bebd136434aa7c4470119315340e3efd60c4d0ba 100644 (file)
 
 #define MALLOC_WRAPFUNCS
 
+/* If defined, as it is by default, use the lesscore() function to attempt
+   to reduce the top of the heap when freeing memory blocks larger than a
+   defined threshold. */
+#define USE_LESSCORE
+
 /* Generic pointer type. */
 #ifndef PTR_T
 #  if defined (__STDC__)
index 92e6efa52f7be3ed009f13b3cd63aa7d80d6bcd9..f61f02715da3188934602eef429cc554cc08be2a 100644 (file)
@@ -1,6 +1,6 @@
 /* malloc.c - dynamic memory allocation for bash. */
 
-/*  Copyright (C) 1985-2020 Free Software Foundation, Inc.
+/*  Copyright (C) 1985-2021 Free Software Foundation, Inc.
 
     This file is part of GNU Bash, the Bourne-Again SHell.
     
  */
 
 /*
- * nextf[i] is the pointer to the next free block of size 2^(i+3).  The
- * smallest allocatable block is 8 bytes.  The overhead information will
- * go in the first int of the block, and the returned pointer will point
- * to the second.
+ * nextf[i] is the pointer to the next free block of size 2^(i+5).  The
+ * smallest allocatable block is 32 bytes. The overhead information will
+ * go in the first 16 bytes of the block, and the returned pointer will point
+ * to the rest.
  */
 
 /* Define MEMSCRAMBLE to have free() write 0xcf into memory as it's freed, to
 #  define NO_VALLOC
 #endif
 
-/* SIZEOF_LONG * 4 - 2, usable bins from 1..NBUCKETS-1 */
-#define NBUCKETS       30
+#define MALLOC_PAGESIZE_MIN    4096
+#define MALLOC_INCR_PAGES      8192
 
 #define ISALLOC ((char) 0xf7)  /* magic byte that implies allocation */
 #define ISFREE ((char) 0x54)   /* magic byte that implies free block */
    enough room in the block for the new size.  Range checking is always
    done. */
 union mhead {
-#if SIZEOF_CHAR_P == 8
   bits64_t mh_align[2];                                                /* 16 */
-#else
-  bits64_t mh_align;                                           /* 8 */
-#endif
   struct {
     char mi_alloc;             /* ISALLOC or ISFREE */         /* 1 */
     char mi_index;             /* index in nextf[] */          /* 1 */
     /* Remainder are valid only when block is allocated */
     u_bits16_t mi_magic2;      /* should be == MAGIC2 */       /* 2 */
     u_bits32_t mi_nbytes;      /* # of bytes allocated */      /* 4 */
-#if SIZEOF_CHAR_P == 8
     char mi_magic8[8];         /* MAGIC1 guard bytes */        /* 8 */
-#endif
   } minfo;
 };
 #define mh_alloc       minfo.mi_alloc
@@ -162,14 +156,14 @@ union mhead {
 #define mh_magic2      minfo.mi_magic2
 #define mh_magic8      minfo.mi_magic8
 
+#define MAGIC8_NUMBYTES        8
+#define MALLOC_SIZE_T          u_bits32_t
+
 #define MOVERHEAD      sizeof(union mhead)
 
-#if SIZEOF_CHAR_P == 8
-#define MALIGN_MASK    15
-#else
-#define MALIGN_MASK    7       /* one less than desired alignment */
-#endif
+#define MALIGN_MASK    15              /* one less than desired alignment */
 
+/* Guard bytes we write at the end of the allocation, encoding the size. */
 typedef union _malloc_guard {
   char s[4];
   u_bits32_t i;
@@ -181,6 +175,8 @@ typedef union _malloc_guard {
    because we want sizeof (union mhead)
    to describe the overhead for when the block is in use,
    and we do not want the free-list pointer to count in that.  */
+/* If we have mmap, this is not used for chunks larger than mmap_threshold,
+   since we munmap immediately on free(). */
 
 /* If SIZEOF_CHAR_P == 8, this goes into the mh_magic8 buffer at the end of
    the rest of the struct. This may need adjusting. */
@@ -194,10 +190,11 @@ typedef union _malloc_guard {
 /* Written in the bytes before the block's real space (-SIZEOF_CHAR_P bytes) */
 #define MAGIC1 0x55
 #define MAGIC2 0x5555
-#define MSLOP  4               /* 4 bytes extra for u_bits32_t size */
+
+#define MSLOP  4               /* 4 bytes extra for u_bits32_t end guard size */
 
 /* How many bytes are actually allocated for a request of size N --
-   rounded up to nearest multiple of 2*SIZEOF_CHAR_P after accounting for
+   rounded up to nearest multiple of 16 (alignment) after accounting for
    malloc overhead. */
 #define ALLOCATED_BYTES(n) \
        (((n) + MOVERHEAD + MSLOP + MALIGN_MASK) & ~MALIGN_MASK)
@@ -211,18 +208,22 @@ typedef union _malloc_guard {
 
 /* Minimum and maximum bucket indices for block splitting (and to bound
    the search for a block to split). */
-#define SPLIT_MIN      2       /* XXX - was 3 */
-#define SPLIT_MID      11
-#define SPLIT_MAX      14
+#define SPLIT_MIN      1               /* 64 */
+#define SPLIT_MID      9               /* 16384 */
+#define SPLIT_MAX      12              /* 131072 */
 
 /* Minimum and maximum bucket indices for block coalescing. */
-#define COMBINE_MIN    2
-#define COMBINE_MAX    (pagebucket - 1)        /* XXX */
+#define COMBINE_MIN    1               /* 64 */
+#define COMBINE_MAX    (pagebucket - 1)        /* 2048 for 4096-byte pages */
 
-#define LESSCORE_MIN   10
-#define LESSCORE_FRC   13
+#define LESSCORE_MIN   8               /* 8192 */
+#define LESSCORE_FRC   11              /* 65536 */
+
+/* Which bin do we prepopulate with the initial sbrk memory? */
+#define PREPOP_BIN     1
+#define PREPOP_SIZE    64
 
-#define STARTBUCK      1
+#define STARTBUCK      0
 
 /* Should we use mmap for large allocations? */
 #if defined (HAVE_MMAP)
@@ -232,15 +233,25 @@ typedef union _malloc_guard {
 #endif
 
 #if defined (HAVE_MMAP) && defined (MAP_ANONYMOUS)
-#  define USE_MMAP
+#  define USE_MMAP     1
 #endif
 
 #if defined (USE_MMAP)
-#  define MMAP_THRESHOLD       14      /* must be >= SPLIT_MAX, COMBINE_MAX */
+#  define MMAP_THRESHOLD       12      /* must be >= SPLIT_MAX, COMBINE_MAX */
 #else
 #  define MMAP_THRESHOLD       (8 * SIZEOF_LONG)
 #endif
 
+/* We don't try to decipher the differences between the Linux-style and
+   BSD-style implementations of mremap here; we use the Linux one. */
+#if USE_MMAP == 1 && defined (HAVE_MREMAP) && defined (MREMAP_MAYMOVE)
+#  define USE_MREMAP 1
+#endif
+
+/* usable bins from STARTBUCK..NBUCKETS-1 */
+
+#define NBUCKETS       28
+
 /* Flags for the internal functions. */
 #define MALLOC_WRAPPER 0x01    /* wrapper function */
 #define MALLOC_INTERNAL        0x02    /* internal function calling another */
@@ -265,7 +276,7 @@ typedef union _malloc_guard {
 #define RIGHT_BUCKET(nb, nu) \
        (((nb) > binsizes[(nu)-1]) && ((nb) <= binsizes[(nu)]))
 
-/* nextf[i] is free list of blocks of size 2**(i + 3)  */
+/* nextf[i] is free list of blocks of size 2**(i + 5)  */
 
 static union mhead *nextf[NBUCKETS];
 
@@ -280,16 +291,18 @@ static int maxbuck;       /* highest bucket receiving allocation request. */
 static char *memtop;   /* top of heap */
 
 static const unsigned long binsizes[NBUCKETS] = {
-       8UL, 16UL, 32UL, 64UL, 128UL, 256UL, 512UL, 1024UL, 2048UL, 4096UL,
+       32UL, 64UL, 128UL, 256UL, 512UL, 1024UL, 2048UL, 4096UL,
        8192UL, 16384UL, 32768UL, 65536UL, 131072UL, 262144UL, 524288UL,
        1048576UL, 2097152UL, 4194304UL, 8388608UL, 16777216UL, 33554432UL,
        67108864UL, 134217728UL, 268435456UL, 536870912UL, 1073741824UL,
        2147483648UL, 4294967295UL
 };
 
-/* binsizes[x] == (1 << ((x) + 3)) */
+/* binsizes[x] == (1 << ((x) + 5)) */
 #define binsize(x)     binsizes[(x)]
 
+#define MAXALLOC_SIZE  binsizes[NBUCKETS-1]
+
 #if !defined (errno)
 extern int errno;
 #endif
@@ -306,6 +319,7 @@ static void internal_cfree PARAMS((PTR_T, const char *, int, int));
 #ifndef NO_VALLOC
 static PTR_T internal_valloc PARAMS((size_t, const char *, int, int));
 #endif
+static PTR_T internal_remap PARAMS((PTR_T, size_t, int, int));
 
 #if defined (botch)
 extern void botch ();
@@ -583,6 +597,7 @@ _malloc_unblock_signals (setp, osetp)
 #endif
 }
 
+#if defined (USE_LESSCORE)
 /* Return some memory to the system by reducing the break.  This is only
    called with NU > pagebucket, so we're always assured of giving back
    more than one page of memory. */  
@@ -603,6 +618,7 @@ lesscore (nu)                       /* give system back some memory */
   _mstats.nlesscore[nu]++;
 #endif
 }
+#endif /* USE_LESSCORE */
 
 /* Ask system for more memory; add to NEXTF[NU].  BUSY[NU] must be set to 1. */  
 static void
@@ -741,14 +757,6 @@ malloc_debug_dummy ()
   write (1, "malloc_debug_dummy\n", 19);
 }
 
-#if SIZEOF_CHAR_P == 8
-#define PREPOP_BIN     3
-#define PREPOP_SIZE    64
-#else
-#define PREPOP_BIN     2
-#define PREPOP_SIZE    32
-#endif
-
 static int
 pagealign ()
 {
@@ -758,8 +766,8 @@ pagealign ()
   char *curbrk;
 
   pagesz = getpagesize ();
-  if (pagesz < 1024)
-    pagesz = 1024;
+  if (pagesz < MALLOC_PAGESIZE_MIN)
+    pagesz = MALLOC_PAGESIZE_MIN;
 
   /* OK, how much do we need to allocate to make things page-aligned?
      Some of this partial page will be wasted space, but we'll use as
@@ -825,7 +833,7 @@ internal_malloc (n, file, line, flags)              /* get a block */
   register union mhead *p;
   register int nunits;
   register char *m, *z;
-  long nbytes;
+  MALLOC_SIZE_T nbytes;
   mguard_t mg;
 
   /* Get the system page size and align break pointer so future sbrks will
@@ -839,6 +847,10 @@ internal_malloc (n, file, line, flags)             /* get a block */
      multiple of 8, then figure out which nextf[] area to use.  Try to
      be smart about where to start searching -- if the number of bytes
      needed is greater than the page size, we can start at pagebucket. */
+#if SIZEOF_SIZE_T == 8
+  if (ALLOCATED_BYTES(n) > MAXALLOC_SIZE)
+    return ((PTR_T) NULL);
+#endif
   nbytes = ALLOCATED_BYTES(n);
   nunits = (nbytes <= (pagesz >> 1)) ? STARTBUCK : pagebucket;
   for ( ; nunits < NBUCKETS; nunits++)
@@ -886,10 +898,8 @@ internal_malloc (n, file, line, flags)             /* get a block */
   p->mh_magic2 = MAGIC2;
   p->mh_nbytes = n;
 
-#if SIZEOF_CHAR_P == 8
   /* Begin guard */
-  MALLOC_MEMSET ((char *)p->mh_magic8, MAGIC1, 8);
-#endif
+  MALLOC_MEMSET ((char *)p->mh_magic8, MAGIC1, MAGIC8_NUMBYTES);
 
   /* End guard */
   mg.i = n;
@@ -945,8 +955,8 @@ internal_free (mem, file, line, flags)
   register union mhead *p;
   register char *ap, *z;
   register int nunits;
-  register unsigned int nbytes;
-  int ubytes;          /* caller-requested size */
+  register MALLOC_SIZE_T nbytes;
+  MALLOC_SIZE_T ubytes;                /* caller-requested size */
   mguard_t mg;
 
   if ((ap = (char *)mem) == 0)
@@ -979,28 +989,25 @@ internal_free (mem, file, line, flags)
 
   nunits = p->mh_index;
   nbytes = ALLOCATED_BYTES(p->mh_nbytes);
-  /* Since the sizeof(u_bits32_t) bytes before the memory handed to the user
-     are now used for the number of bytes allocated, a simple check of
-     mh_magic2 is no longer sufficient to catch things like p[-1] = 'x'.
+  /* The MAGIC8_NUMBYTES bytes before the memory handed to the user are now
+     used for a simple check to catch things like p[-1] = 'x'.
      We sanity-check the value of mh_nbytes against the size of the blocks
      in the appropriate bucket before we use it.  This can still cause problems
      and obscure errors if mh_nbytes is wrong but still within range; the
      checks against the size recorded at the end of the chunk will probably
-     fail then.  Using MALLOC_REGISTER will help here, since it saves the
+     fail then. Using MALLOC_REGISTER will help here, since it saves the
      original number of bytes requested. */
 
   if (IN_BUCKET(nbytes, nunits) == 0)
     xbotch (mem, ERR_UNDERFLOW,
            _("free: underflow detected; mh_nbytes out of range"), file, line);
-#if SIZEOF_CHAR_P == 8
   {
     int i;
-    for (i = 0, z = p->mh_magic8; i < 8; i++)
+    for (i = 0, z = p->mh_magic8; i < MAGIC8_NUMBYTES; i++)
       if (*z++ != MAGIC1)
        xbotch (mem, ERR_UNDERFLOW,
                _("free: underflow detected; magic8 corrupted"), file, line);
   }
-#endif
 
   ap += p->mh_nbytes;
   z = mg.s;
@@ -1019,11 +1026,9 @@ internal_free (mem, file, line, flags)
     }
 #endif
 
-#if GLIBC21
-  if (nunits >= LESSCORE_MIN && ((char *)p + binsize(nunits) == sbrk (0)))
-#else
+#if defined (USE_LESSCORE)
+  /* We take care of the mmap case and munmap above */
   if (nunits >= LESSCORE_MIN && ((char *)p + binsize(nunits) == memtop))
-#endif
     {
       /* If above LESSCORE_FRC, give back unconditionally.  This should be set
         high enough to be infrequently encountered.  If between LESSCORE_MIN
@@ -1036,6 +1041,7 @@ internal_free (mem, file, line, flags)
          goto free_return;
        }
     }
+#endif /* USE_LESSCORE */
 
 #ifdef MEMSCRAMBLE
   if (p->mh_nbytes)
@@ -1084,6 +1090,58 @@ free_return:
 #endif
 }
 
+#if USE_MREMAP == 1
+/* Assume the caller (internal_realloc) has already performed the sanity and
+   overflow tests. Basically we kill the old guard information, determine the
+   new size, call mremap with the new size, and add the bookkeeping and guard
+   information back in. */
+static PTR_T
+internal_remap (mem, n, nunits, flags)
+     PTR_T mem;
+     register size_t n;
+     int nunits;
+     int flags;
+{
+  register union mhead *p, *np;
+  char *m, *z;
+  mguard_t mg;
+  MALLOC_SIZE_T nbytes;
+
+  if (nunits >= NBUCKETS)      /* Uh oh */
+    return ((PTR_T) NULL);
+
+  p = (union mhead *)mem - 1;
+
+  m = (char *)mem + p->mh_nbytes;
+  z = mg.s;
+  *m++ = 0;  *m++ = 0;  *m++ = 0;  *m++ = 0;   /* erase guard */
+
+  nbytes = ALLOCATED_BYTES(n);
+
+  busy[nunits] = 1;
+  np = (union mhead *)mremap (p, binsize (p->mh_index), binsize (nunits), MREMAP_MAYMOVE);
+  busy[nunits] = 0;
+  if (np == MAP_FAILED)
+    return (PTR_T)NULL;
+
+  if (np != p)
+    {
+      np->mh_alloc = ISALLOC;
+      np->mh_magic2 = MAGIC2;
+      MALLOC_MEMSET ((char *)np->mh_magic8, MAGIC1, MAGIC8_NUMBYTES);
+    }
+  np->mh_index = nunits;
+  np->mh_nbytes = n;
+
+  mg.i = n;
+  z = mg.s;
+  m = (char *)(np + 1) + n;
+  *m++ = *z++, *m++ = *z++, *m++ = *z++, *m++ = *z++;
+
+  return ((PTR_T)(np + 1));
+}
+#endif
+
 static PTR_T
 internal_realloc (mem, n, file, line, flags)
      PTR_T mem;
@@ -1092,9 +1150,9 @@ internal_realloc (mem, n, file, line, flags)
      int line, flags;
 {
   register union mhead *p;
-  register u_bits32_t tocopy;
-  register unsigned int nbytes;
-  register int nunits;
+  register MALLOC_SIZE_T tocopy;
+  register MALLOC_SIZE_T nbytes;
+  register int newunits, nunits;
   register char *m, *z;
   mguard_t mg;
 
@@ -1132,16 +1190,14 @@ internal_realloc (mem, n, file, line, flags)
   if (IN_BUCKET(nbytes, nunits) == 0)
     xbotch (mem, ERR_UNDERFLOW,
            _("realloc: underflow detected; mh_nbytes out of range"), file, line);
-#if SIZEOF_CHAR_P == 8
   {
     int i;
-    for (i = 0, z = p->mh_magic8; i < 8; i++)
+    for (i = 0, z = p->mh_magic8; i < MAGIC8_NUMBYTES; i++)
       if (*z++ != MAGIC1)
        xbotch (mem, ERR_UNDERFLOW,
                _("realloc: underflow detected; magic8 corrupted"), file, line);
 
   }
-#endif
 
   m = (char *)mem + (tocopy = p->mh_nbytes);
   z = mg.s;
@@ -1161,6 +1217,10 @@ internal_realloc (mem, n, file, line, flags)
   if (n == p->mh_nbytes)
     return mem;
 
+#if SIZEOF_SIZE_T == 8
+  if (ALLOCATED_BYTES(n) > MAXALLOC_SIZE)
+    return ((PTR_T) NULL);
+#endif
   /* See if desired size rounds to same power of 2 as actual size. */
   nbytes = ALLOCATED_BYTES(n);
 
@@ -1187,12 +1247,31 @@ internal_realloc (mem, n, file, line, flags)
   _mstats.nrcopy++;
 #endif
 
-  /* If we are using mmap and have mremap, we could use it here. */
+#if USE_MREMAP == 1
+  /* If we are using mmap and have mremap, we use it here. Make sure that
+     the old size and new size are above the threshold where we use mmap */
+  if (nbytes > p->mh_nbytes)
+    newunits = nunits;
+  else
+    newunits = (nbytes <= (pagesz >> 1)) ? STARTBUCK : pagebucket;
+  for ( ; newunits < NBUCKETS; newunits++)
+    if (nbytes <= binsize(newunits))
+     break;
 
+  if (nunits > malloc_mmap_threshold && newunits > malloc_mmap_threshold)
+    {
+      m = internal_remap (mem, n, newunits, MALLOC_INTERNAL);
+      if (m == 0)
+        return 0;
+    }
+  else
+#endif /* USE_MREMAP */
+    {
   if ((m = internal_malloc (n, file, line, MALLOC_INTERNAL|MALLOC_NOTRACE|MALLOC_NOREG)) == 0)
     return 0;
   FASTCOPY (mem, m, tocopy);
   internal_free (mem, file, line, MALLOC_INTERNAL);
+    }
 
 #ifdef MALLOC_TRACE
   if (malloc_trace && (flags & MALLOC_NOTRACE) == 0)
@@ -1272,14 +1351,13 @@ malloc_usable_size (mem)
 {
   register union mhead *p;
   register char *ap;
-  register int maxbytes;
-
 
   if ((ap = (char *)mem) == 0)
     return 0;
 
   /* Find the true start of the memory block to discover which bin */
   p = (union mhead *) ap - 1;
+
   if (p->mh_alloc == ISMEMALIGN)
     {
       ap -= p->mh_nbytes;
index ce8aaeca7b781db173fcbde9a9fe4c37cb5f5e18..aa3fa33b465fba64b853fe7e544a9d60253b1434 100644 (file)
@@ -1,6 +1,6 @@
 /* mstats.h - definitions for malloc statistics */
 
-/*  Copyright (C) 2001-2020 Free Software Foundation, Inc.
+/*  Copyright (C) 2001-2021 Free Software Foundation, Inc.
 
     This file is part of GNU Bash, the Bourne-Again SHell.
 
@@ -27,7 +27,7 @@
 
 /* This needs to change if the definition in malloc.c changes */
 #ifndef NBUCKETS
-#  define NBUCKETS 30
+#  define NBUCKETS 28
 #endif
 
 /*
index b2358c67ac2c18a1a5ef1dc0375994dfc64b0f7d..3b16139d5729332d4a22acbdeabb48958caff221 100644 (file)
@@ -56,6 +56,7 @@ DEBUG = @DEBUG@
 
 CFLAGS = @CFLAGS@
 LOCAL_CFLAGS = @LOCAL_CFLAGS@ ${DEBUG}
+STYLE_CFLAGS = @STYLE_CFLAGS@
 CPPFLAGS = @CPPFLAGS@
 LDFLAGS = @LDFLAGS@
 
@@ -65,7 +66,7 @@ LOCAL_DEFS = @LOCAL_DEFS@
 INCLUDES = -I. -I$(BUILD_DIR) -I$(topdir) -I$(topdir)/lib
 
 CCFLAGS = $(DEFS) $(LOCAL_DEFS) $(APP_CFLAGS) $(CPPFLAGS) ${INCLUDES} \
-         $(LOCAL_CFLAGS) $(CFLAGS) ${ADDON_CFLAGS}
+         $(STYLE_CFLAGS) $(LOCAL_CFLAGS) $(CFLAGS) ${ADDON_CFLAGS}
 
 .c.o:
        ${RM} $@
index 76103786a66880aac0208fee8162802eaf536ec8..971116a90c58ef1ad5d27b4718f6db89fc7b6026 100644 (file)
@@ -1,6 +1,6 @@
 /* bind.c -- key binding and startup file support for the readline library. */
 
-/* Copyright (C) 1987-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2022 Free Software Foundation, Inc.
 
    This file is part of the GNU Readline Library (Readline), a library
    for reading lines of text with interactive input and history editing.
@@ -72,7 +72,7 @@ extern char *strchr (), *strrchr ();
 /* Variables exported by this file. */
 Keymap rl_binding_keymap;
 
-static int _rl_skip_to_delim PARAMS((char *, int, int));
+static int _rl_skip_to_delim (char *, int, int);
 
 #if defined (USE_VARARGS) && defined (PREFER_STDARG)
 static void _rl_init_file_error (const char *, ...)  __attribute__((__format__ (printf, 1, 2)));
@@ -80,23 +80,23 @@ static void _rl_init_file_error (const char *, ...)  __attribute__((__format__ (
 static void _rl_init_file_error ();
 #endif
 
-static rl_command_func_t *_rl_function_of_keyseq_internal PARAMS((const char *, size_t, Keymap, int *));
+static rl_command_func_t *_rl_function_of_keyseq_internal (const char *, size_t, Keymap, int *);
 
-static char *_rl_read_file PARAMS((char *, size_t *));
-static int _rl_read_init_file PARAMS((const char *, int));
-static int glean_key_from_name PARAMS((char *));
+static char *_rl_read_file (char *, size_t *);
+static int _rl_read_init_file (const char *, int);
+static int glean_key_from_name (char *);
 
-static int find_boolean_var PARAMS((const char *));
-static int find_string_var PARAMS((const char *));
+static int find_boolean_var (const char *);
+static int find_string_var (const char *);
 
-static const char *boolean_varname PARAMS((int));
-static const char *string_varname PARAMS((int));
+static const char *boolean_varname (int);
+static const char *string_varname (int);
 
-static char *_rl_get_string_variable_value PARAMS((const char *));
-static int substring_member_of_array PARAMS((const char *, const char * const *));
+static char *_rl_get_string_variable_value (const char *);
+static int substring_member_of_array (const char *, const char * const *);
 
-static int _rl_get_keymap_by_name PARAMS((const char *));
-static int _rl_get_keymap_by_map PARAMS((Keymap));
+static int _rl_get_keymap_by_name (const char *);
+static int _rl_get_keymap_by_map (Keymap);
 
 static int currently_reading_init_file;
 
@@ -880,6 +880,85 @@ rl_function_of_keyseq_len (const char *keyseq, size_t len, Keymap map, int *type
   return _rl_function_of_keyseq_internal (keyseq, len, map, type);
 }
 
+/* Assuming there is a numeric argument at the beginning of KEYSEQ (the
+   caller is responsible for checking), return the index of the portion of
+   the key sequence following the numeric argument. If there's no numeric
+   argument (?), or if KEYSEQ consists solely of a numeric argument (?),
+   return -1. */
+int
+rl_trim_arg_from_keyseq        (const char *keyseq, size_t len, Keymap map)
+{
+  register int i, j, parsing_digits;
+  unsigned char ic;
+  Keymap map0;
+
+  if (map == 0)
+    map = _rl_keymap;
+  map0 = map;
+
+  /* The digits following the initial one (e.g., the binding to digit-argument)
+    or the optional `-' in a binding to digit-argument or universal-argument
+    are not added to rl_executing_keyseq. This is basically everything read by
+    rl_digit_loop. The parsing_digits logic is here in case they ever are. */
+  for (i = j = parsing_digits = 0; keyseq && i < len; i++)
+    {
+      ic = keyseq[i];
+
+      if (parsing_digits)
+       {
+         if (_rl_digit_p (ic))
+           {
+             j = i + 1;
+             continue;
+           }
+         parsing_digits = 0;
+       }
+
+      if (map[ic].type == ISKMAP)
+       {
+         if (i + 1 == len)
+           return -1;
+         map = FUNCTION_TO_KEYMAP (map, ic);
+         continue;
+       }
+      if (map[ic].type == ISFUNC)
+       {
+#if defined (VI_MODE)
+         if (map[ic].function != rl_digit_argument && map[ic].function != rl_universal_argument && map[ic].function != rl_vi_arg_digit)
+#else
+         if (map[ic].function != rl_digit_argument && map[ic].function != rl_universal_argument)
+#endif
+           return (j);
+
+         /* We don't bother with a keyseq that is only a numeric argument */
+         if (i + 1 == len)
+           return -1;
+
+         parsing_digits = 1;
+
+         /* This logic should be identical to rl_digit_loop */
+         /* We accept M-- as equivalent to M--1, C-u- as equivalent to C-u-1
+            but set parsing_digits to 2 to note that we saw `-' */
+         if (map[ic].function == rl_universal_argument && (i + 1 == '-'))
+           {
+             i++;
+             parsing_digits = 2;
+           }
+         if (map[ic].function == rl_digit_argument && ic == '-')
+           {
+             parsing_digits = 2;
+           }
+
+         map = map0;
+         j = i + 1;
+       }
+    }
+
+  /* If we're still parsing digits by the time we get here, we don't allow a
+     key sequence that consists solely of a numeric argument */
+  return -1;
+}
+  
 /* The last key bindings file read. */
 static char *last_readline_init_file = (char *)NULL;
 
@@ -1143,7 +1222,7 @@ parse_comparison_op (s, indp)
 /*                                                                 */
 /* **************************************************************** */
 
-typedef int _rl_parser_func_t PARAMS((char *));
+typedef int _rl_parser_func_t (char *);
 
 /* Things that mean `Control'. */
 const char * const _rl_possible_control_prefixes[] = {
@@ -1154,6 +1233,12 @@ const char * const _rl_possible_meta_prefixes[] = {
   "Meta", "M-", (const char *)NULL
 };
 
+/* Forward declarations */
+static int parser_if (char *);
+static int parser_else (char *);
+static int parser_endif (char *);
+static int parser_include (char *);
+
 /* Conditionals. */
 
 /* Calling programs set this to have their argv[0]. */
@@ -1813,6 +1898,7 @@ static const struct {
   { "convert-meta",            &_rl_convert_meta_chars_to_ascii, 0 },
   { "disable-completion",      &rl_inhibit_completion,         0 },
   { "echo-control-characters", &_rl_echo_control_chars,        0 },
+  { "enable-active-region",    &_rl_enable_active_region,      0 },
   { "enable-bracketed-paste",  &_rl_enable_bracketed_paste,    V_SPECIAL },
   { "enable-keypad",           &_rl_enable_keypad,             0 },
   { "enable-meta-key",         &_rl_enable_meta,               0 },
@@ -1883,7 +1969,7 @@ hack_special_boolean_var (int i)
     _rl_enable_active_region = _rl_enable_bracketed_paste;
 }
 
-typedef int _rl_sv_func_t PARAMS((const char *));
+typedef int _rl_sv_func_t (const char *);
 
 /* These *must* correspond to the array indices for the appropriate
    string variable.  (Though they're not used right now.) */
@@ -1897,25 +1983,29 @@ typedef int _rl_sv_func_t PARAMS((const char *));
 #define V_INT          2
 
 /* Forward declarations */
-static int sv_bell_style PARAMS((const char *));
-static int sv_combegin PARAMS((const char *));
-static int sv_dispprefix PARAMS((const char *));
-static int sv_compquery PARAMS((const char *));
-static int sv_compwidth PARAMS((const char *));
-static int sv_editmode PARAMS((const char *));
-static int sv_emacs_modestr PARAMS((const char *));
-static int sv_histsize PARAMS((const char *));
-static int sv_isrchterm PARAMS((const char *));
-static int sv_keymap PARAMS((const char *));
-static int sv_seqtimeout PARAMS((const char *));
-static int sv_viins_modestr PARAMS((const char *));
-static int sv_vicmd_modestr PARAMS((const char *));
+static int sv_region_start_color (const char *);
+static int sv_region_end_color (const char *);
+static int sv_bell_style (const char *);
+static int sv_combegin (const char *);
+static int sv_dispprefix (const char *);
+static int sv_compquery (const char *);
+static int sv_compwidth (const char *);
+static int sv_editmode (const char *);
+static int sv_emacs_modestr (const char *);
+static int sv_histsize (const char *);
+static int sv_isrchterm (const char *);
+static int sv_keymap (const char *);
+static int sv_seqtimeout (const char *);
+static int sv_viins_modestr (const char *);
+static int sv_vicmd_modestr (const char *);
 
 static const struct {
   const char * const name;
   int flags;
   _rl_sv_func_t *set_func;
 } string_varlist[] = {
+  { "active-region-end-color", V_STRING, sv_region_end_color },
+  { "active-region-start-color", V_STRING, sv_region_start_color },
   { "bell-style",      V_STRING,       sv_bell_style },
   { "comment-begin",   V_STRING,       sv_combegin },
   { "completion-display-width", V_INT, sv_compwidth },
@@ -2134,6 +2224,18 @@ sv_seqtimeout (const char *value)
   return 0;
 }
 
+static int
+sv_region_start_color (const char *value)
+{
+  return (_rl_reset_region_color (0, value));
+}
+
+static int
+sv_region_end_color (const char *value)
+{
+  return (_rl_reset_region_color (1, value));
+}
+
 static int
 sv_bell_style (const char *value)
 {
@@ -2548,6 +2650,15 @@ _rl_get_keyname (int key)
       keyname[i++] = (c / 8) + '0';
       c = (c % 8) + '0';
     }
+  /* These characters are valid UTF-8; convert them into octal escape
+     sequences as well. This changes C. */
+  else if (c >= 160)
+    {
+      keyname[i++] = '\\';
+      keyname[i++] = '0' + ((((unsigned char)c) >> 6) & 0x07);
+      keyname[i++] = '0' + ((((unsigned char)c) >> 3) & 0x07);
+      c = (c % 8) + '0';
+    }
 
   /* Now, if the character needs to be quoted with a backslash, do that. */
   if (c == '\\' || c == '"')
index a466cf9b6ef1a5712a00f8837e86c23c55165e34..69df77df709590dcbbec9f05c263d96826f0411a 100644 (file)
@@ -1,6 +1,6 @@
 /* callback.c -- functions to use readline as an X `callback' mechanism. */
 
-/* Copyright (C) 1987-2017 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2022 Free Software Foundation, Inc.
 
    This file is part of the GNU Readline Library (Readline), a library
    for reading lines of text with interactive input and history editing.
@@ -136,6 +136,8 @@ rl_callback_read_char (void)
       abort ();
     }
 
+  eof = 0;
+
   memcpy ((void *)olevel, (void *)_rl_top_level, sizeof (procenv_t));
 #if defined (HAVE_POSIX_SIGSETJMP)
   jcode = sigsetjmp (_rl_top_level, 0);
@@ -147,6 +149,14 @@ rl_callback_read_char (void)
       (*rl_redisplay_function) ();
       _rl_want_redisplay = 0;
       memcpy ((void *)_rl_top_level, (void *)olevel, sizeof (procenv_t));
+
+      /* If we longjmped because of a timeout, handle it here. */
+      if (RL_ISSTATE (RL_STATE_TIMEOUT))
+       {
+         RL_SETSTATE (RL_STATE_DONE);
+         rl_done = 1;
+       }
+
       CALLBACK_READ_RETURN ();
     }
 
@@ -268,6 +278,13 @@ rl_callback_read_char (void)
          _rl_want_redisplay = 0;
        }
 
+      /* Make sure application hooks can see whether we saw EOF. */
+      if (eof > 0)
+       {
+         rl_eof_found = eof;
+         RL_SETSTATE(RL_STATE_EOF);
+       }
+
       if (rl_done)
        {
          line = readline_internal_teardown (eof);
@@ -278,7 +295,8 @@ rl_callback_read_char (void)
          rl_clear_signals ();
 #endif
          in_handler = 0;
-         (*rl_linefunc) (line);
+         if (rl_linefunc)                      /* just in case */
+           (*rl_linefunc) (line);
 
          /* If the user did not clear out the line, do it for him. */
          if (rl_line_buffer[0])
index 3cf1326aab7515d572d405ad3330a4757735331c..24a25f1f105bb45b41c8eefc5ad9b34d93aa941b 100644 (file)
@@ -1,6 +1,6 @@
 /* chardefs.h -- Character definitions for readline. */
 
-/* Copyright (C) 1994-2015 Free Software Foundation, Inc.
+/* Copyright (C) 1994-2021 Free Software Foundation, Inc.
 
    This file is part of the GNU Readline Library (Readline), a library
    for reading lines of text with interactive input and history editing.
@@ -26,9 +26,6 @@
 
 #if defined (HAVE_CONFIG_H)
 #  if defined (HAVE_STRING_H)
-#    if ! defined (STDC_HEADERS) && defined (HAVE_MEMORY_H)
-#      include <memory.h>
-#    endif
 #    include <string.h>
 #  endif /* HAVE_STRING_H */
 #  if defined (HAVE_STRINGS_H)
 #define UNMETA(c) ((c) & (~meta_character_bit))
 #define UNCTRL(c) _rl_to_upper(((c)|control_character_bit))
 
-#if defined STDC_HEADERS || (!defined (isascii) && !defined (HAVE_ISASCII))
-#  define IN_CTYPE_DOMAIN(c) 1
-#else
-#  define IN_CTYPE_DOMAIN(c) isascii(c)
+#ifndef UCHAR_MAX
+#  define UCHAR_MAX 255
 #endif
-
-#if !defined (isxdigit) && !defined (HAVE_ISXDIGIT) && !defined (__cplusplus)
-#  define isxdigit(c)   (isdigit((unsigned char)(c)) || ((c) >= 'a' && (c) <= 'f') || ((c) >= 'A' && (c) <= 'F'))
+#ifndef CHAR_MAX
+#  define CHAR_MAX 127
 #endif
 
-#if defined (CTYPE_NON_ASCII)
+/* use this as a proxy for C89 */
+#if defined (HAVE_STDLIB_H) && defined (HAVE_STRING_H)
+#  define IN_CTYPE_DOMAIN(c) 1
 #  define NON_NEGATIVE(c) 1
 #else
+#  define IN_CTYPE_DOMAIN(c) ((c) >= 0 && (c) <= CHAR_MAX)
 #  define NON_NEGATIVE(c) ((unsigned char)(c) == (c))
 #endif
 
+#if !defined (isxdigit) && !defined (HAVE_ISXDIGIT) && !defined (__cplusplus)
+#  define isxdigit(c)   (isdigit((unsigned char)(c)) || ((c) >= 'a' && (c) <= 'f') || ((c) >= 'A' && (c) <= 'F'))
+#endif
+
 /* Some systems define these; we want our definitions. */
 #undef ISPRINT
 
 #define _rl_uppercase_p(c)     (NON_NEGATIVE(c) && ISUPPER(c))
 #define _rl_digit_p(c)         ((c) >= '0' && (c) <= '9')
 
+#define _rl_alphabetic_p(c)    (NON_NEGATIVE(c) && ISALNUM(c))
 #define _rl_pure_alphabetic(c) (NON_NEGATIVE(c) && ISALPHA(c))
-#define ALPHABETIC(c)          (NON_NEGATIVE(c) && ISALNUM(c))
 
 #ifndef _rl_to_upper
-#  define _rl_to_upper(c) (_rl_lowercase_p(c) ? toupper((unsigned char)c) : (c))
-#  define _rl_to_lower(c) (_rl_uppercase_p(c) ? tolower((unsigned char)c) : (c))
+#  define _rl_to_upper(c) (_rl_lowercase_p(c) ? toupper((unsigned char)(c)) : (c))
+#  define _rl_to_lower(c) (_rl_uppercase_p(c) ? tolower((unsigned char)(c)) : (c))
 #endif
 
 #ifndef _rl_digit_value
index 9e37527ef3509ce4ae33094fd26d67831c9551ce..dba81a279ac7b5d285834f7cf7fc1e03c593450d 100644 (file)
@@ -2,7 +2,7 @@
 
    Modified by Chet Ramey for Readline.
 
-   Copyright (C) 1985, 1988, 1990-1991, 1995-2010, 2012, 2015, 2017, 2019
+   Copyright (C) 1985, 1988, 1990-1991, 1995-2021
    Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
@@ -73,6 +73,8 @@
 static bool is_colored (enum indicator_no type);
 static void restore_default_color (void);
 
+#define RL_COLOR_PREFIX_EXTENSION      "readline-colored-completion-prefix"
+
 COLOR_EXT_TYPE *_rl_color_ext_list = 0;
 
 /* Output a color indicator (which may contain nulls).  */
@@ -110,13 +112,28 @@ _rl_set_normal_color (void)
     }
 }
 
+static struct bin_str *
+_rl_custom_readline_prefix (void)
+{
+  size_t len;
+  COLOR_EXT_TYPE *ext;
+
+  len = strlen (RL_COLOR_PREFIX_EXTENSION);
+  for (ext = _rl_color_ext_list; ext; ext = ext->next)
+    if (ext->ext.len == len && STREQN (ext->ext.string, RL_COLOR_PREFIX_EXTENSION, len))
+      return (&ext->seq);
+  return (NULL);
+}
+
 bool
 _rl_print_prefix_color (void)
 {
   struct bin_str *s;
 
   /* What do we want to use for the prefix? Let's try cyan first, see colors.h */
-  s = &_rl_color_indicator[C_PREFIX];
+  s = _rl_custom_readline_prefix ();
+  if (s == 0)
+    s = &_rl_color_indicator[C_PREFIX];
   if (s->string != NULL)
     {
       if (is_colored (C_NORM))
@@ -239,8 +256,10 @@ _rl_print_color_indicator (const char *f)
       else if (S_ISSOCK (mode))
         colored_filetype = C_SOCK;
 #endif
+#if defined (S_ISBLK)
       else if (S_ISBLK (mode))
         colored_filetype = C_BLK;
+#endif
       else if (S_ISCHR (mode))
         colored_filetype = C_CHR;
       else
index 3ade3629aef440a4d8bec22cc1419e49704c4eef..fc2a48f4aafa2896647bb6e8087e8da21e94de76 100644 (file)
@@ -1,6 +1,6 @@
 /* compat.c -- backwards compatibility functions. */
 
-/* Copyright (C) 2000-2017 Free Software Foundation, Inc.
+/* Copyright (C) 2000-2021 Free Software Foundation, Inc.
 
    This file is part of the GNU Readline Library (Readline), a library
    for reading lines of text with interactive input and history editing.
 #include "rlstdc.h"
 #include "rltypedefs.h"
 
-extern void rl_free_undo_list PARAMS((void));
-extern int rl_maybe_save_line PARAMS((void));
-extern int rl_maybe_unsave_line PARAMS((void));
-extern int rl_maybe_replace_line PARAMS((void));
+extern void rl_free_undo_list (void);
+extern int rl_maybe_save_line (void);
+extern int rl_maybe_unsave_line (void);
+extern int rl_maybe_replace_line (void);
 
-extern int rl_crlf PARAMS((void));
-extern int rl_ding PARAMS((void));
-extern int rl_alphabetic PARAMS((int));
+extern int rl_crlf (void);
+extern int rl_ding (void);
+extern int rl_alphabetic (int);
 
-extern char **rl_completion_matches PARAMS((const char *, rl_compentry_func_t *));
-extern char *rl_username_completion_function PARAMS((const char *, int));
-extern char *rl_filename_completion_function PARAMS((const char *, int));
+extern char **rl_completion_matches (const char *, rl_compentry_func_t *);
+extern char *rl_username_completion_function (const char *, int);
+extern char *rl_filename_completion_function (const char *, int);
 
 /* Provide backwards-compatible entry points for old function names. */
 
index fc5c3adb3564d6408214f74a0a3e64a0f0437cd4..e5d224ed040e71b6405846e651d694bacffb9663 100644 (file)
@@ -1,6 +1,6 @@
 /* complete.c -- filename completion for readline. */
 
-/* Copyright (C) 1987-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2021 Free Software Foundation, Inc.
 
    This file is part of the GNU Readline Library (Readline), a library
    for reading lines of text with interactive input and history editing.
@@ -95,7 +95,7 @@ typedef int QSFUNC ();
 /* Most systems don't declare getpwent in <pwd.h> if _POSIX_SOURCE is
    defined. */
 #if defined (HAVE_GETPWENT) && (!defined (HAVE_GETPW_DECLS) || defined (_POSIX_SOURCE))
-extern struct passwd *getpwent PARAMS((void));
+extern struct passwd *getpwent (void);
 #endif /* HAVE_GETPWENT && (!HAVE_GETPW_DECLS || _POSIX_SOURCE) */
 
 /* If non-zero, then this is the address of a function to call when
@@ -114,44 +114,44 @@ rl_compdisp_func_t *rl_completion_display_matches_hook = (rl_compdisp_func_t *)N
 #endif
 
 #if defined (VISIBLE_STATS)
-static int stat_char PARAMS((char *));
+static int stat_char (char *);
 #endif
 
 #if defined (COLOR_SUPPORT)
-static int colored_stat_start PARAMS((const char *));
-static void colored_stat_end PARAMS((void));
-static int colored_prefix_start PARAMS((void));
-static void colored_prefix_end PARAMS((void));
+static int colored_stat_start (const char *);
+static void colored_stat_end (void);
+static int colored_prefix_start (void);
+static void colored_prefix_end (void);
 #endif
 
-static int path_isdir PARAMS((const char *));
+static int path_isdir (const char *);
 
-static char *rl_quote_filename PARAMS((char *, int, char *));
+static char *rl_quote_filename (char *, int, char *);
 
-static void _rl_complete_sigcleanup PARAMS((int, void *));
+static void _rl_complete_sigcleanup (int, void *);
 
-static void set_completion_defaults PARAMS((int));
-static int get_y_or_n PARAMS((int));
-static int _rl_internal_pager PARAMS((int));
-static char *printable_part PARAMS((char *));
-static int fnwidth PARAMS((const char *));
-static int fnprint PARAMS((const char *, int, const char *));
-static int print_filename PARAMS((char *, char *, int));
+static void set_completion_defaults (int);
+static int get_y_or_n (int);
+static int _rl_internal_pager (int);
+static char *printable_part (char *);
+static int fnwidth (const char *);
+static int fnprint (const char *, int, const char *);
+static int print_filename (char *, char *, int);
 
-static char **gen_completion_matches PARAMS((char *, int, int, rl_compentry_func_t *, int, int));
+static char **gen_completion_matches (char *, int, int, rl_compentry_func_t *, int, int);
 
-static char **remove_duplicate_matches PARAMS((char **));
-static void insert_match PARAMS((char *, int, int, char *));
-static int append_to_match PARAMS((char *, int, int, int));
-static void insert_all_matches PARAMS((char **, int, char *));
-static int complete_fncmp PARAMS((const char *, int, const char *, int));
-static void display_matches PARAMS((char **));
-static int compute_lcd_of_matches PARAMS((char **, int, const char *));
-static int postprocess_matches PARAMS((char ***, int));
-static int compare_match PARAMS((char *, const char *));
-static int complete_get_screenwidth PARAMS((void));
+static char **remove_duplicate_matches (char **);
+static void insert_match (char *, int, int, char *);
+static int append_to_match (char *, int, int, int);
+static void insert_all_matches (char **, int, char *);
+static int complete_fncmp (const char *, int, const char *, int);
+static void display_matches (char **);
+static int compute_lcd_of_matches (char **, int, const char *);
+static int postprocess_matches (char ***, int);
+static int compare_match (char *, const char *);
+static int complete_get_screenwidth (void);
 
-static char *make_quoted_replacement PARAMS((char *, int, char *));
+static char *make_quoted_replacement (char *, int, char *);
 
 /* **************************************************************** */
 /*                                                                 */
@@ -304,7 +304,7 @@ const char *rl_basic_quote_characters = "\"'";
 /* The list of characters that signal a break between words for
    rl_complete_internal.  The default list is the contents of
    rl_basic_word_break_characters.  */
-/*const*/ char *rl_completer_word_break_characters = (/*const*/ char *)NULL;
+const char *rl_completer_word_break_characters = 0;
 
 /* Hook function to allow an application to set the completion word
    break characters before readline breaks up the line.  Allows
@@ -757,7 +757,7 @@ fnwidth (const char *string)
   mbstate_t ps;
   int left, w;
   size_t clen;
-  wchar_t wc;
+  WCHAR_T wc;
 
   left = strlen (string) + 1;
   memset (&ps, 0, sizeof (mbstate_t));
@@ -774,7 +774,7 @@ fnwidth (const char *string)
       else
        {
 #if defined (HANDLE_MULTIBYTE)
-         clen = mbrtowc (&wc, string + pos, left - pos, &ps);
+         clen = MBRTOWC (&wc, string + pos, left - pos, &ps);
          if (MB_INVALIDCH (clen))
            {
              width++;
@@ -812,7 +812,7 @@ fnprint (const char *to_print, int prefix_bytes, const char *real_pathname)
   const char *end;
   size_t tlen;
   int width;
-  wchar_t wc;
+  WCHAR_T wc;
 
   print_len = strlen (to_print);
   end = to_print + print_len + 1;
@@ -835,7 +835,8 @@ fnprint (const char *to_print, int prefix_bytes, const char *real_pathname)
     colored_stat_start (real_pathname);
 #endif
 
-  if (prefix_bytes && _rl_completion_prefix_display_length > 0)
+  if (prefix_bytes && _rl_completion_prefix_display_length > 0 &&
+      prefix_bytes > _rl_completion_prefix_display_length)
     {
       char ellipsis;
 
@@ -880,7 +881,7 @@ fnprint (const char *to_print, int prefix_bytes, const char *real_pathname)
       else
        {
 #if defined (HANDLE_MULTIBYTE)
-         tlen = mbrtowc (&wc, s, end - s, &ps);
+         tlen = MBRTOWC (&wc, s, end - s, &ps);
          if (MB_INVALIDCH (tlen))
            {
              tlen = 1;
@@ -1078,7 +1079,8 @@ char
 _rl_find_completion_word (int *fp, int *dp)
 {
   int scan, end, found_quote, delimiter, pass_next, isbrk;
-  char quote_char, *brkchars;
+  char quote_char;
+  const char *brkchars;
 
   end = rl_point;
   found_quote = delimiter = 0;
@@ -1321,7 +1323,7 @@ compute_lcd_of_matches (char **match_list, int matches, const char *text)
   int v;
   size_t v1, v2;
   mbstate_t ps1, ps2;
-  wchar_t wc1, wc2;
+  WCHAR_T wc1, wc2;
 #endif
 
   /* If only one match, just use that.  Otherwise, compare each
@@ -1353,8 +1355,8 @@ compute_lcd_of_matches (char **match_list, int matches, const char *text)
 #if defined (HANDLE_MULTIBYTE)
            if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
              {
-               v1 = mbrtowc(&wc1, match_list[i]+si, strlen (match_list[i]+si), &ps1);
-               v2 = mbrtowc (&wc2, match_list[i+1]+si, strlen (match_list[i+1]+si), &ps2);
+               v1 = MBRTOWC (&wc1, match_list[i]+si, strlen (match_list[i]+si), &ps1);
+               v2 = MBRTOWC (&wc2, match_list[i+1]+si, strlen (match_list[i+1]+si), &ps2);
                if (MB_INVALIDCH (v1) || MB_INVALIDCH (v2))
                  {
                    if (c1 != c2)       /* do byte comparison */
@@ -1364,7 +1366,7 @@ compute_lcd_of_matches (char **match_list, int matches, const char *text)
                if (_rl_completion_case_fold)
                  {
                    wc1 = towlower (wc1);
-                  wc2 = towlower (wc2);
+                   wc2 = towlower (wc2);
                  }
                if (wc1 != wc2)
                  break;
@@ -1547,7 +1549,7 @@ rl_display_match_list (char **matches, int len, int max)
 
       if (common_length > _rl_completion_prefix_display_length && common_length > ELLIPSIS_LEN)
        max -= common_length - ELLIPSIS_LEN;
-      else
+      else if (_rl_colored_completion_prefix <= 0)
        common_length = sind = 0;
     }
 #if defined (COLOR_SUPPORT)
@@ -1979,7 +1981,7 @@ compare_match (char *text, const char *match)
     {
       temp = (*rl_filename_dequoting_function) (text, rl_completion_quote_character);
       r = strcmp (temp, match);
-      free (temp);
+      xfree (temp);
       return r;
     }      
   return (strcmp (text, match));
@@ -2330,7 +2332,7 @@ complete_fncmp (const char *convfn, int convlen, const char *filename, int filen
 #if defined (HANDLE_MULTIBYTE)
   size_t v1, v2;
   mbstate_t ps1, ps2;
-  wchar_t wc1, wc2;
+  WCHAR_T wc1, wc2;
 #endif
 
 #if defined (HANDLE_MULTIBYTE)
@@ -2357,8 +2359,8 @@ complete_fncmp (const char *convfn, int convlen, const char *filename, int filen
        {
          do
            {
-             v1 = mbrtowc (&wc1, s1, convlen, &ps1);
-             v2 = mbrtowc (&wc2, s2, filename_len, &ps2);
+             v1 = MBRTOWC (&wc1, s1, convlen, &ps1);
+             v2 = MBRTOWC (&wc2, s2, filename_len, &ps2);
              if (v1 == 0 && v2 == 0)
                return 1;
              else if (MB_INVALIDCH (v1) || MB_INVALIDCH (v2))
@@ -2407,8 +2409,8 @@ complete_fncmp (const char *convfn, int convlen, const char *filename, int filen
        {
          do
            {
-             v1 = mbrtowc (&wc1, s1, convlen, &ps1);
-             v2 = mbrtowc (&wc2, s2, filename_len, &ps2);
+             v1 = MBRTOWC (&wc1, s1, convlen, &ps1);
+             v2 = MBRTOWC (&wc2, s2, filename_len, &ps2);
              if (v1 == 0 && v2 == 0)
                return 1;
              else if (MB_INVALIDCH (v1) || MB_INVALIDCH (v2))
index f5d32945c828184767e45e6b1bac18a38dea8134..c1135ec59294a394e8b852b37c2e4d420a3dca87 100644 (file)
@@ -1,6 +1,6 @@
 /* display.c -- readline redisplay facility. */
 
-/* Copyright (C) 1987-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2022 Free Software Foundation, Inc.
 
    This file is part of the GNU Readline Library (Readline), a library    
    for reading lines of text with interactive input and history editing.
 extern char *strchr (), *strrchr ();
 #endif /* !strchr && !__STDC__ */
 
-static void putc_face PARAMS((int, int, char *));
-static void puts_face PARAMS((const char *, const char *, int));
-static void norm_face PARAMS((char *, int));
+static void putc_face (int, int, char *);
+static void puts_face (const char *, const char *, int);
+static void norm_face (char *, int);
 
-static void update_line PARAMS((char *, char *, char *, char *, int, int, int, int));
-static void space_to_eol PARAMS((int));
-static void delete_chars PARAMS((int));
-static void insert_some_chars PARAMS((char *, int, int));
-static void open_some_spaces PARAMS((int));
-static void cr PARAMS((void));
-static void redraw_prompt PARAMS((char *));
-static void _rl_move_cursor_relative PARAMS((int, const char *, const char *));
+static void update_line (char *, char *, char *, char *, int, int, int, int);
+static void space_to_eol (int);
+static void delete_chars (int);
+static void insert_some_chars (char *, int, int);
+static void open_some_spaces (int);
+static void cr (void);
+static void redraw_prompt (char *);
+static void _rl_move_cursor_relative (int, const char *, const char *);
 
 /* Values for FLAGS */
 #define PMT_MULTILINE  0x01
 
-static char *expand_prompt PARAMS((char *, int, int *, int *, int *, int *));
+static char *expand_prompt (char *, int, int *, int *, int *, int *);
 
 #define DEFAULT_LINE_BUFFER_SIZE       1024
 
@@ -115,7 +115,7 @@ static int line_structures_initialized = 0;
 #define inv_face       (line_state_invisible->lface)
 
 #if defined (HANDLE_MULTIBYTE)
-static int _rl_col_width PARAMS((const char *, int, int, int));
+static int _rl_col_width (const char *, int, int, int);
 #else
 #  define _rl_col_width(l, s, e, f)    (((e) <= (s)) ? 0 : (e) - (s))
 #endif
@@ -356,7 +356,7 @@ expand_prompt (char *pmt, int flags, int *lp, int *lip, int *niflp, int *vlp)
 {
   char *r, *ret, *p, *igstart, *nprompt, *ms;
   int l, rl, last, ignoring, ninvis, invfl, invflset, ind, pind, physchars;
-  int mlen, newlines, newlines_guess, bound;
+  int mlen, newlines, newlines_guess, bound, can_add_invis;
   int mb_cur_max;
 
   /* We only expand the mode string for the last line of a multiline prompt
@@ -372,6 +372,7 @@ expand_prompt (char *pmt, int flags, int *lp, int *lip, int *niflp, int *vlp)
   else
     nprompt = pmt;
 
+  can_add_invis = 0;
   mb_cur_max = MB_CUR_MAX;
 
   if (_rl_screenwidth == 0)
@@ -434,6 +435,19 @@ expand_prompt (char *pmt, int flags, int *lp, int *lip, int *niflp, int *vlp)
       else if (ignoring && *p == RL_PROMPT_END_IGNORE)
        {
          ignoring = 0;
+         /* If we have a run of invisible characters, adjust local_prompt_newlines
+            to add them, since update_line expects them to be counted before
+            wrapping the line. */
+         if (can_add_invis)
+           {
+             local_prompt_newlines[newlines] = r - ret;
+             /* If we're adding to the number of invisible characters on the
+                first line of the prompt, but we've already set the number of
+                invisible characters on that line, we need to adjust the
+                counter. */
+             if (invflset && newlines == 1)
+               invfl = ninvis;
+           }
          if (p != (igstart + 1))
            last = r - ret - 1;
          continue;
@@ -498,10 +512,17 @@ expand_prompt (char *pmt, int flags, int *lp, int *lip, int *niflp, int *vlp)
                new = r - ret;
              local_prompt_newlines[++newlines] = new;
            }
+
+         /* What if a physical character of width >= 2 is split? There is
+            code that wraps before the physical screen width if the character
+            width would exceed it, but it needs to be checked against this
+            code and local_prompt_newlines[]. */
+         if (ignoring == 0)
+           can_add_invis = (physchars == bound); 
        }
     }
 
-  if (rl < _rl_screenwidth)
+  if (rl <= _rl_screenwidth)
     invfl = ninvis;
 
   *r = '\0';
@@ -515,7 +536,7 @@ expand_prompt (char *pmt, int flags, int *lp, int *lip, int *niflp, int *vlp)
     *vlp = physchars;
 
   if (nprompt != pmt)
-    free (nprompt);
+    xfree (nprompt);
 
   return ret;
 }
@@ -749,7 +770,7 @@ rl_redisplay (void)
   int hl_begin, hl_end;
   int mb_cur_max = MB_CUR_MAX;
 #if defined (HANDLE_MULTIBYTE)
-  wchar_t wc;
+  WCHAR_T wc;
   size_t wc_bytes;
   int wc_width;
   mbstate_t ps;
@@ -983,11 +1004,11 @@ rl_redisplay (void)
       memset (&ps, 0, sizeof (mbstate_t));
       if (_rl_utf8locale && UTF8_SINGLEBYTE(rl_line_buffer[0]))
        {
-         wc = (wchar_t)rl_line_buffer[0];
+         wc = (WCHAR_T)rl_line_buffer[0];
          wc_bytes = 1;
        }
       else
-       wc_bytes = mbrtowc (&wc, rl_line_buffer, rl_end, &ps);
+       wc_bytes = MBRTOWC (&wc, rl_line_buffer, rl_end, &ps);
     }
   else
     wc_bytes = 1;
@@ -1158,12 +1179,12 @@ rl_redisplay (void)
          in += wc_bytes;
          if (_rl_utf8locale && UTF8_SINGLEBYTE(rl_line_buffer[in]))
            {
-             wc = (wchar_t)rl_line_buffer[in];
+             wc = (WCHAR_T)rl_line_buffer[in];
              wc_bytes = 1;
              memset (&ps, 0, sizeof (mbstate_t));      /* re-init state */
            }
          else
-           wc_bytes = mbrtowc (&wc, rl_line_buffer + in, rl_end - in, &ps);
+           wc_bytes = MBRTOWC (&wc, rl_line_buffer + in, rl_end - in, &ps);
        }
       else
         in++;
@@ -1582,9 +1603,9 @@ putc_face (int c, int face, char *cur_face)
       if (face != FACE_NORMAL && face != FACE_STANDOUT)
        return;
       if (face == FACE_STANDOUT && cf == FACE_NORMAL)
-        _rl_standout_on ();
+       _rl_region_color_on ();
       if (face == FACE_NORMAL && cf == FACE_STANDOUT)
-        _rl_standout_off ();
+       _rl_region_color_off ();
       *cur_face = face;
     }
   if (c != EOF)
@@ -1662,7 +1683,7 @@ update_line (char *old, char *old_face, char *new, char *new_face, int current_l
 #if defined (HANDLE_MULTIBYTE)
       if (mb_cur_max > 1 && rl_byte_oriented == 0)
        {
-         wchar_t wc;
+         WCHAR_T wc;
          mbstate_t ps;
          int oldwidth, newwidth;
          int oldbytes, newbytes;
@@ -1681,7 +1702,7 @@ update_line (char *old, char *old_face, char *new, char *new_face, int current_l
 
          /* 1. how many screen positions does first char in old consume? */
          memset (&ps, 0, sizeof (mbstate_t));
-         ret = mbrtowc (&wc, old, mb_cur_max, &ps);
+         ret = MBRTOWC (&wc, old, mb_cur_max, &ps);
          oldbytes = ret;
          if (MB_INVALIDCH (ret))
            {
@@ -1697,7 +1718,7 @@ update_line (char *old, char *old_face, char *new, char *new_face, int current_l
 
          /* 2. how many screen positions does the first char in new consume? */
          memset (&ps, 0, sizeof (mbstate_t));
-         ret = mbrtowc (&wc, new, mb_cur_max, &ps);
+         ret = MBRTOWC (&wc, new, mb_cur_max, &ps);
          newbytes = ret;
          if (MB_INVALIDCH (ret))
            {
@@ -1718,7 +1739,7 @@ update_line (char *old, char *old_face, char *new, char *new_face, int current_l
            {
              int t;
 
-             ret = mbrtowc (&wc, new+newbytes, mb_cur_max, &ps);
+             ret = MBRTOWC (&wc, new+newbytes, mb_cur_max, &ps);
              if (MB_INVALIDCH (ret))
                {
                  newwidth += 1;
@@ -1740,7 +1761,7 @@ update_line (char *old, char *old_face, char *new, char *new_face, int current_l
            {
              int t;
 
-             ret = mbrtowc (&wc, old+oldbytes, mb_cur_max, &ps);
+             ret = MBRTOWC (&wc, old+oldbytes, mb_cur_max, &ps);
              if (MB_INVALIDCH (ret))
                {
                  oldwidth += 1;
@@ -1952,14 +1973,14 @@ update_line (char *old, char *old_face, char *new, char *new_face, int current_l
 #if defined (HANDLE_MULTIBYTE)
   if (mb_cur_max > 1 && rl_byte_oriented == 0 && _rl_utf8locale)
     {
-      wchar_t wc;
+      WCHAR_T wc;
       mbstate_t ps = { 0 };
       int t;
 
       /* If the first character in the difference is a zero-width character,
         assume it's a combining character and back one up so the two base
         characters no longer compare equivalently. */
-      t = mbrtowc (&wc, ofd, mb_cur_max, &ps);
+      t = MBRTOWC (&wc, ofd, mb_cur_max, &ps);
       if (t > 0 && UNICODE_COMBINING_CHAR (wc) && WCWIDTH (wc) == 0)
        {
          old_offset = _rl_find_prev_mbchar (old, ofd - old, MB_FIND_ANY);
@@ -2421,9 +2442,24 @@ dumb_update:
                ((nfd-new) < (prompt_last_invisible-(current_line*_rl_screenwidth+prompt_invis_chars_first_line))))
            ADJUST_CPOS (wrap_offset - prompt_invis_chars_first_line);
 
-         /* XXX - what happens if wrap_offset == prompt_invis_chars_first_line
-            and we are drawing the first line (current_line == 0)? We should
-            adjust by _rl_last_c_pos -= prompt_invis_chars_first_line */
+         /* What happens if wrap_offset == prompt_invis_chars_first_line
+            and we are drawing the first line (current_line == 0), or if we
+            are drawing the first line and changing the number of invisible
+            characters in the line? If we're starting to draw before the last
+            invisible character in the prompt, we need to adjust by
+            _rl_last_c_pos -= prompt_invis_chars_first_line. This can happen
+            when we finish reading a digit argument (with the "(arg: N)"
+            prompt) and are switching back to displaying a line with a prompt
+            containing invisible characters, since we have to redraw the
+            entire prompt string. */
+         if ((mb_cur_max > 1 && rl_byte_oriented == 0) &&
+               current_line == 0 && wrap_offset &&
+               displaying_prompt_first_line &&
+               wrap_offset == prompt_invis_chars_first_line &&
+               visible_wrap_offset != current_invis_chars &&
+               visible_wrap_offset != prompt_invis_chars_first_line &&
+               ((nfd-new) < prompt_last_invisible))
+           ADJUST_CPOS (prompt_invis_chars_first_line);
        }
     }
   else                         /* Delete characters from line. */
@@ -2573,7 +2609,8 @@ rl_clear_visible_line (void)
   for (curr_line = _rl_last_v_pos; curr_line >= 0; curr_line--)
     {
       _rl_move_vert (curr_line);
-      _rl_clear_to_eol (0);
+      _rl_clear_to_eol (_rl_screenwidth);
+      _rl_cr ();               /* in case we use space_to_eol() */
     }
 
   return 0;
@@ -3357,27 +3394,16 @@ _rl_redisplay_after_sigwinch (void)
      screen line. */
   if (_rl_term_cr)
     {
-      _rl_move_vert (_rl_vis_botlin);
-
-      _rl_cr ();
-      _rl_last_c_pos = 0;
-
-#if !defined (__MSDOS__)
-      if (_rl_term_clreol)
-       tputs (_rl_term_clreol, 1, _rl_output_character_function);
-      else
-#endif
-       {
-         space_to_eol (_rl_screenwidth);
-         _rl_cr ();
-       }
-
+      rl_clear_visible_line ();
       if (_rl_last_v_pos > 0)
        _rl_move_vert (0);
     }
   else
     rl_crlf ();
 
+  if (_rl_screenwidth < prompt_visible_length)
+    _rl_reset_prompt ();               /* update local_prompt_newlines array */
+
   /* Redraw only the last line of a multi-line prompt. */
   t = strrchr (rl_display_prompt, '\n');
   if (t)
@@ -3451,7 +3477,7 @@ _rl_refresh_line (void)
 static int
 _rl_col_width (const char *str, int start, int end, int flags)
 {
-  wchar_t wc;
+  WCHAR_T wc;
   mbstate_t ps;
   int tmp, point, width, max;
 
@@ -3520,10 +3546,10 @@ _rl_col_width (const char *str, int start, int end, int flags)
       if (_rl_utf8locale && UTF8_SINGLEBYTE(str[point]))
        {
          tmp = 1;
-         wc = (wchar_t) str[point];
+         wc = (WCHAR_T) str[point];
        }
       else
-       tmp = mbrtowc (&wc, str + point, max, &ps);
+       tmp = MBRTOWC (&wc, str + point, max, &ps);
       if (MB_INVALIDCH ((size_t)tmp))
        {
          /* In this case, the bytes are invalid or too short to compose a
index af5ee3e572815f0020f371e3fd4f888f3bce878b..2ad833a95edf84ff3bada871247a55205c49cbf9 100644 (file)
@@ -18,7 +18,6 @@
 #   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
 
-
 topdir = .
 srcdir = .
 VPATH = .
@@ -49,6 +48,8 @@ TEXI2HTML   = $(srcdir)/texi2html
 QUIETPS     = #set this to -q to shut up dvips
 PSDPI       = 300      # I don't have any 600-dpi printers
 DVIPS       = dvips -D ${PSDPI} $(QUIETPS) -o $@     # tricky
+DVIPDF      = dvipdfm -o $@ -p ${PAPERSIZE}
+PSPDF       = gs -sPAPERSIZE=${PAPERSIZE} -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -sOutputFile=$@
 
 RLSRC = $(srcdir)/rlman.texi $(srcdir)/rluser.texi \
        $(srcdir)/rltech.texi $(srcdir)/version.texi \
@@ -66,15 +67,25 @@ DVIOBJ = readline.dvi history.dvi rluserman.dvi
 INFOOBJ = readline.info history.info rluserman.info
 PSOBJ = readline.ps history.ps rluserman.ps
 HTMLOBJ = readline.html history.html rluserman.html
+PDFOBJ = readline.pdf history.pdf rluserman.pdf
 
 INTERMEDIATE_OBJ = rlman.dvi
 
-CREATED_DOCS = $(DVIOBJ) $(INFOOBJ) $(PSOBJ) $(HTMLOBJ)
+CREATED_DOCS = $(DVIOBJ) $(INFOOBJ) $(PSOBJ) $(HTMLOBJ) $(PDFOBJ)
+
+.SUFFIXES:      .ps .txt .dvi .html .pdf
 
-.SUFFIXES:      .ps .txt .dvi
+.ps.pdf:
+       $(RM) $@
+       -${PSPDF} $<
 
-all: info dvi html ps 
+.dvi.pdf:
+       $(RM) $@
+       -${DVIPDF} $<
+
+all: info dvi html ps
 nodvi: info html
+pdf: $(PDFOBJ)
 
 readline.dvi: $(RLSRC)
        TEXINPUTS=.:$(TEXINPUTDIR):$$TEXINPUTS $(TEXI2DVI) $(srcdir)/rlman.texi
@@ -123,14 +134,17 @@ dvi:      $(DVIOBJ)
 ps:    $(PSOBJ)
 html:  $(HTMLOBJ)
 
+readline.pdf:   readline.dvi
+history.pdf:    history.dvi
+rluserman.pdf:  rluserman.dvi
+
 clean:
        $(RM) *.aux *.cp *.fn *.ky *.log *.pg *.toc *.tp *.vr *.cps *.pgs \
-             *.fns *.kys *.tps *.vrs *.core
+             *.fns *.kys *.tps *.vrs *.bt *.bts *.o core *.core
 
 distclean: clean
        $(RM) $(CREATED_DOCS)
        $(RM) $(INTERMEDIATE_OBJ)
-       $(RM) Makefile
 
 mostlyclean: clean
 
index 7a3a4767e7a591ded5f14e0b4879cd4a28358e37..721118bce1e8bfb9a9bbf75da627c22fb5ef458e 100644 (file)
@@ -12,7 +12,7 @@ This document describes the GNU History library
 a programming tool that provides a consistent user interface for
 recalling lines of previously typed input.
 
-Copyright @copyright{} 1988--2020 Free Software Foundation, Inc.
+Copyright @copyright{} 1988--2022 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
index 7ac11953df304255a3f64424ab073656ab731e84..da6417b48fda487e24853fab3d7176912ba89e10 100644 (file)
@@ -1,7 +1,7 @@
 @ignore
 This file documents the user interface to the GNU History library.
 
-Copyright (C) 1988-2020 Free Software Foundation, Inc.
+Copyright (C) 1988-2022 Free Software Foundation, Inc.
 Authored by Brian Fox and Chet Ramey.
 
 Permission is granted to make and distribute verbatim copies of this manual
index b8fedf331f10a9577cf195a95c69ce7c6b089fbb..9081baf8bd205c55091c00911fb9acb234857005 100644 (file)
@@ -1,7 +1,7 @@
 @ignore
 This file documents the user interface to the GNU History library.
 
-Copyright (C) 1988--2020 Free Software Foundation, Inc.
+Copyright (C) 1988--2022 Free Software Foundation, Inc.
 Authored by Brian Fox and Chet Ramey.
 
 Permission is granted to make and distribute verbatim copies of this manual
@@ -214,8 +214,9 @@ end of the history, and an index of @samp{-1} refers to the current
 @code{history -d} command.
 
 @item -d @var{start}-@var{end}
-Delete the history entries between positions @var{start} and @var{end},
-inclusive.  Positive and negative values for @var{start} and @var{end}
+Delete the range of history entries between positions @var{start} and
+@var{end}, inclusive.
+Positive and negative values for @var{start} and @var{end}
 are interpreted as described above.
 
 @item -a
@@ -245,10 +246,15 @@ the history list as a single entry.
 
 @end table
 
-When any of the @option{-w}, @option{-r}, @option{-a}, or @option{-n} options is
-used, if @var{filename}
-is given, then it is used as the history file.  If not, then
-the value of the @env{HISTFILE} variable is used.
+If a @var{filename} argument is supplied
+when any of the @option{-w}, @option{-r}, @option{-a}, or @option{-n} options
+is used, Bash uses @var{filename} as the history file.
+If not, then the value of the @env{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
+@var{offset} or range is supplied as an argument to @option{-d}, or the
+history expansion supplied as an argument to @option{-p} fails.
 
 @end table
 @end ifset
@@ -507,7 +513,7 @@ substituted, or, if no previous history substitutions took place,
 the last @var{string}
 in a !?@var{string}@code{[?]}
 search.
-If @var{new} is is null, each matching @var{old} is deleted.
+If @var{new} is null, each matching @var{old} is deleted.
 The final delimiter is optional if it is the last
 character on the input line.
 
index ec7487b7a78812f10d236078f88fd1b431aa03c5..d046b87d1fbdfa5bcfe15cd8f64979104b56cadb 100644 (file)
@@ -13,7 +13,7 @@ This manual describes the GNU Readline Library
 consistency of user interface across discrete programs which provide
 a command line interface.
 
-Copyright @copyright{} 1988--2020 Free Software Foundation, Inc.
+Copyright @copyright{} 1988--2022 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
index bbf57c239c92fad7286aa15ee3508ca08fc277b3..a93f77dabf81de0d9575aaf0947747f3f0bc96d5 100644 (file)
@@ -7,7 +7,7 @@ This document describes the GNU Readline Library, a utility for aiding
 in the consistency of user interface across discrete programs that need
 to provide a command line interface.
 
-Copyright (C) 1988--2020 Free Software Foundation, Inc.
+Copyright (C) 1988--2022 Free Software Foundation, Inc.
 
 Permission is granted to make and distribute verbatim copies of
 this manual provided the copyright notice and this permission notice
@@ -323,6 +323,14 @@ and point define a @emph{region}.
 @deftypevar int rl_done
 Setting this to a non-zero value causes Readline to return the current
 line immediately.
+Readline will set this variable when it has read a key sequence bound
+to @code{accept-line} and is about to return the line to the caller.
+@end deftypevar
+
+@deftypevar int rl_eof_found
+Readline will set this variable when it has read an EOF character (e.g., the
+stty @samp{EOF} character) on an empty line or encountered a read error and
+is about to return a NULL line to the caller.
 @end deftypevar
 
 @deftypevar int rl_num_chars_to_read
@@ -385,7 +393,7 @@ value 0x0402.
 @end deftypevar
 
 @deftypevar {int} rl_gnu_readline_p
-Always set to 1, denoting that this is @sc{gnu} readline rather than some
+Always set to 1, denoting that this is @sc{gnu} Readline rather than some
 emulation.
 @end deftypevar
 
@@ -455,6 +463,11 @@ If non-zero, this is the address of a function to call if a read system
 call is interrupted when Readline is reading terminal input.
 @end deftypevar
 
+@deftypevar {rl_hook_func_t *} rl_timeout_event_hook
+If non-zero, this is the address of a function to call if Readline times
+out while reading input.
+@end deftypevar
+
 @deftypevar {rl_hook_func_t *} rl_input_available_hook
 If non-zero, Readline will use this function's return value when it needs
 to determine whether or not there is available input on the current input
@@ -502,7 +515,7 @@ By default, this is set to @code{rl_deprep_terminal}
 
 @deftypevar {Keymap} rl_executing_keymap
 This variable is set to the keymap (@pxref{Keymaps}) in which the
-currently executing readline function was found.
+currently executing Readline function was found.
 @end deftypevar 
 
 @deftypevar {Keymap} rl_binding_keymap
@@ -588,6 +601,13 @@ the current call to @code{readline()}.
 @item RL_STATE_DONE
 Readline has read a key sequence bound to @code{accept-line}
 and is about to return the line to the caller.
+@item RL_STATE_TIMEOUT
+Readline has timed out (it did not receive a line or specified number of
+characters before the timeout duration specified by @code{rl_set_timeout}
+elapsed) and is returning that status to the caller.
+@item RL_STATE_EOF
+Readline has read an EOF character (e.g., the stty @samp{EOF} character)
+or encountered a read error and is about to return a NULL line to the caller.
 @end table
 
 @end deftypevar
@@ -876,6 +896,15 @@ It takes a "translated" key sequence and should be used if the key sequence
 can include NUL.
 @end deftypefun
 
+@deftypefun {int} rl_trim_arg_from_keyseq (const char *keyseq, size_t len, Keymap map)
+If there is a numeric argument at the beginning of @var{keyseq}, possibly
+including digits, return the index of the first character in @var{keyseq}
+following the numeric argument.
+This can be used to skip over the numeric argument (which is available as
+@code{rl_numeric_arg} while traversing the key sequence that invoked the
+current command.
+@end deftypefun
+
 @deftypefun {char **} rl_invoking_keyseqs (rl_command_func_t *function)
 Return an array of strings representing the key sequences used to
 invoke @var{function} in the current keymap.
@@ -887,7 +916,7 @@ invoke @var{function} in the keymap @var{map}.
 @end deftypefun
 
 @deftypefun void rl_function_dumper (int readable)
-Print the readline function names and the key sequences currently
+Print the Readline function names and the key sequences currently
 bound to them to @code{rl_outstream}.  If @var{readable} is non-zero,
 the list is formatted in such a way that it can be made part of an
 @code{inputrc} file and re-read.
@@ -1063,8 +1092,9 @@ It returns the number of visible characters on the last line of the
 Applications may indicate that the prompt contains characters that take
 up no physical screen space when displayed by bracketing a sequence of
 such characters with the special markers @code{RL_PROMPT_START_IGNORE}
-and @code{RL_PROMPT_END_IGNORE} (declared in @file{readline.h}).  This may
-be used to embed terminal-specific escape sequences in prompts.
+and @code{RL_PROMPT_END_IGNORE} (declared in @file{readline.h} as
+@samp{\001} and @samp{\002}, respectively).
+This may be used to embed terminal-specific escape sequences in prompts.
 @end deftypefun
 
 @deftypefun int rl_set_prompt (const char *prompt)
@@ -1151,6 +1181,30 @@ The default waiting period is one-tenth of a second.
 Returns the old timeout value.
 @end deftypefun
 
+@deftypefun int rl_set_timeout (unsigned int secs, unsigned int usecs)
+Set a timeout for subsequent calls to @code{readline()}. If Readline does
+not read a complete line, or the number of characters specified by
+@code{rl_num_chars_to_read}, before the duration specified by @var{secs}
+(in seconds) and @var{usecs} (microseconds), it returns and sets
+@code{RL_STATE_TIMEOUT} in @code{rl_readline_state}.
+Passing 0 for @code{secs} and @code{usecs} cancels any previously set
+timeout; the convenience macro @code{rl_clear_timeout()} is shorthand
+for this.
+Returns 0 if the timeout is set successfully.
+@end deftypefun
+
+@deftypefun int rl_timeout_remaining (unsigned int *secs, unsigned int *usecs)
+Return the number of seconds and microseconds remaining in the current
+timeout duration in @var{*secs} and @var{*usecs}, respectively.
+Both @var{*secs} and @var{*usecs} must be non-NULL to return any values.
+The return value is -1 on error or when there is no timeout set,
+0 when the timeout has expired (leaving @var{*secs} and @var{*usecs}
+unchanged),
+and 1 if the timeout has not expired.
+If either of @var{secs} and @var{usecs} is @code{NULL},
+the return value indicates whether the timeout has expired.
+@end deftypefun
+
 @node Terminal Management
 @subsection Terminal Management
 
@@ -1304,7 +1358,7 @@ that it can be made part of an @code{inputrc} file and re-read.
 
 @deftypefun int rl_variable_bind (const char *variable, const char *value)
 Make the Readline variable @var{variable} have @var{value}.
-This behaves as if the readline command
+This behaves as if the Readline command
 @samp{set @var{variable} @var{value}} had been executed in an @code{inputrc}
 file (@pxref{Readline Init File Syntax}).
 @end deftypefun
@@ -1315,7 +1369,7 @@ For boolean variables, this string is either @samp{on} or @samp{off}.
 @end deftypefun
 
 @deftypefun void rl_variable_dumper (int readable)
-Print the readline variable names and their current values
+Print the Readline variable names and their current values
 to @code{rl_outstream}.
 If @var{readable} is non-zero, the list is formatted in such a way
 that it can be made part of an @code{inputrc} file and re-read.
@@ -1346,7 +1400,7 @@ Readline saves in the history list.
 Enable an @emph{active} mark.
 When this is enabled, the text between point and mark (the @var{region}) is
 displayed in the terminal's standout mode (a @var{face}).
-This is called by various readline functions that set the mark and insert
+This is called by various Readline functions that set the mark and insert
 text, and is available for applications to call.
 @end deftypefun
 
@@ -1355,10 +1409,10 @@ Turn off the active mark.
 @end deftypefun
 
 @deftypefun {void} rl_keep_mark_active (void)
-Indicate that the mark should remain active when the current readline function
-completes and after redisplay occurs.
+Indicate that the mark should remain active when the current Readline
+function completes and after redisplay occurs.
 In most cases, the mark remains active for only the duration of a single
-bindable readline function.
+bindable Readline function.
 @end deftypefun
 
 @deftypefun {int} rl_mark_active_p (void)
@@ -1371,12 +1425,12 @@ Return a non-zero value if the mark is currently active; zero otherwise.
 An alternate interface is available to plain @code{readline()}.  Some
 applications need to interleave keyboard I/O with file, device, or
 window system I/O, typically by using a main loop to @code{select()}
-on various file descriptors.  To accommodate this need, readline can
+on various file descriptors.  To accommodate this need, Readline can
 also be invoked as a `callback' function from an event loop.  There
 are functions available to make this easy.
 
 @deftypefun void rl_callback_handler_install (const char *prompt, rl_vcpfunc_t *lhandler)
-Set up the terminal for readline I/O and display the initial
+Set up the terminal for Readline I/O and display the initial
 expanded value of @var{prompt}.  Save the value of @var{lhandler} to
 use as a handler function to call when a complete line of input has been
 entered.
@@ -1611,7 +1665,7 @@ main (int c, char **v)
 
 Signals are asynchronous events sent to a process by the Unix kernel,
 sometimes on behalf of another process.  They are intended to indicate
-exceptional events, like a user pressing the interrupt key on his terminal,
+exceptional events, like a user pressing the terminal's interrupt key,
 or a network connection being broken.  There is a class of signals that can
 be sent to the process currently reading input from the keyboard.  Since
 Readline changes the terminal attributes when it is called, it needs to
@@ -1761,7 +1815,7 @@ a @code{SIGWINCH}.
 
 @deftypefun void rl_echo_signal_char (int sig)
 If an application wishes to install its own signal handlers, but still
-have readline display characters that generate signals, calling this
+have Readline display characters that generate signals, calling this
 function with @var{sig} set to @code{SIGINT}, @code{SIGQUIT}, or
 @code{SIGTSTP} will display the character generating that signal.
 @end deftypefun
@@ -2159,9 +2213,10 @@ shell variables and hostnames.
 
 @deftypevar int rl_completion_query_items
 Up to this many items will be displayed in response to a
-possible-completions call.  After that, readline asks the user if she is sure
-she wants to see them all.  The default value is 100.  A negative value 
-indicates that Readline should never ask the user.
+possible-completions call.  After that, Readline asks the user for
+confirmation before displaying them.
+The default value is 100.  A negative value 
+indicates that Readline should never ask for confirmation.
 @end deftypevar
 
 @deftypevar {int} rl_completion_append_character
@@ -2313,6 +2368,7 @@ history list.
 #include <fcntl.h>
 #include <stdio.h>
 #include <errno.h>
+#include <locale.h>
 
 #if defined (HAVE_STRING_H)
 #  include <string.h>
@@ -2393,6 +2449,8 @@ main (argc, argv)
 @{
   char *line, *s;
 
+  setlocale (LC_ALL, "");
+
   progname = argv[0];
 
   initialize_readline ();      /* Bind our completer. */
index 26b0ff072c7a8503f3e9e567ca4cfecdd3dcc506..cbcbb45cf4c033aeac748bf44debb78ce392e2a2 100644 (file)
@@ -9,7 +9,7 @@ use these features.  There is a document entitled "readline.texinfo"
 which contains both end-user and programmer documentation for the
 GNU Readline Library.
 
-Copyright (C) 1988--2020 Free Software Foundation, Inc.
+Copyright (C) 1988--2022 Free Software Foundation, Inc.
 
 Authored by Brian Fox and Chet Ramey.
 
@@ -179,7 +179,7 @@ empty line.
 @end table
 
 @noindent
-(Depending on your configuration, the @key{Backspace} key be set to
+(Depending on your configuration, the @key{Backspace} key might be set to
 delete the character to the left of the cursor and the @key{DEL} key set
 to delete the character underneath the cursor, like @kbd{C-d}, rather
 than the character to the left of the cursor.)
@@ -246,7 +246,7 @@ words, to the end of the next word.
 Word boundaries are the same as those used by @kbd{M-f}.
 
 @item M-@key{DEL}
-Kill from the cursor the start of the current word, or, if between
+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}.
 
@@ -339,7 +339,8 @@ 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 @dfn{inputrc} file, conventionally in his home directory.
+commands in an @dfn{inputrc} file,
+conventionally in their home directory.
 The name of this
 @ifset BashFeatures
 file is taken from the value of the shell variable @env{INPUTRC}.  If
@@ -418,6 +419,32 @@ variables.
 @cindex variables, readline
 @table @code
 
+@item active-region-start-color
+@vindex 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
+@code{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 @samp{\e[01;33m}.
+
+@item active-region-end-color
+@vindex active-region-end-color
+A string variable that "undoes" the effects of @code{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 @samp{\e[0m}.
+
 @item bell-style
 @vindex bell-style
 Controls what happens when Readline wants to ring the terminal bell.
@@ -444,6 +471,9 @@ If set to @samp{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 @env{LS_COLORS}
 environment variable.
+If there is a color definition in @env{LS_COLORS} for the custom suffix
+@samp{readline-colored-completion-prefix}, Readline uses this color for
+the common prefix instead of its default.
 The default is @samp{off}.
 
 @item colored-stats
@@ -496,8 +526,9 @@ 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 0.
-A negative value means Readline should never ask.
+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}.
 
 @item convert-meta
@@ -505,9 +536,12 @@ The default limit is @code{100}.
 If set to @samp{on}, Readline will convert characters with the
 eighth bit set to an @sc{ascii} key sequence by stripping the eighth
 bit and prefixing an @key{ESC} character, converting them to a
-meta-prefixed key sequence.  The default value is @samp{on}, but
+meta-prefixed key sequence.
+The default value is @samp{on}, but
 will be set to @samp{off} if the locale is one that contains
 eight-bit characters.
+This variable is dependent on the @code{LC_CTYPE} locale category, and
+may change if the locale is changed.
 
 @item disable-completion
 @vindex disable-completion
@@ -518,7 +552,7 @@ been mapped to @code{self-insert}.  The default is @samp{off}.
 @item echo-control-characters
 @vindex echo-control-characters
 When set to @samp{on}, on operating systems that indicate they support it,
-readline echoes a character corresponding to a signal generated from the
+Readline echoes a character corresponding to a signal generated from the
 keyboard.  The default is @samp{on}.
 
 @item editing-mode
@@ -540,13 +574,30 @@ non-printing characters, which can be used to embed a terminal control
 sequence into the mode string.
 The default is @samp{@@}.
 
+@item enable-active-region
+@vindex enable-active-region
+The @dfn{point} is the current cursor position, and @dfn{mark} refers
+to a saved cursor position (@pxref{Commands For Moving}).
+The text between the point and mark is referred to as the @dfn{region}.
+When this variable is set to @samp{On}, Readline allows certain commands
+to designate the region as @dfn{active}.
+When the region is active, Readline highlights the text in the region using
+the value of the @code{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 @samp{On}.
+
 @item enable-bracketed-paste
 @vindex enable-bracketed-paste
-When set to @samp{On}, Readline will configure the terminal in a way
-that will enable it to insert each paste into the editing buffer as a
-single string of characters, instead of treating each character as if
-it had been read from the keyboard.  This can prevent pasted characters
-from being interpreted as editing commands.  The default is @samp{On}.
+When set to @samp{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 @dfn{bracketed paste mode};
+it prevents Readline from executing any editing commands bound to key
+sequences appearing in the pasted text.
+The default is @samp{On}.
 
 @item enable-keypad
 @vindex enable-keypad
@@ -601,6 +652,8 @@ regardless of what the terminal claims it can support.  The
 default value is @samp{off}, but Readline will set it to @samp{on} if the 
 locale contains eight-bit characters.
 The name @code{meta-flag} is a synonym for this variable.
+This variable is dependent on the @code{LC_CTYPE} locale category, and
+may change if the locale is changed.
 
 @item isearch-terminators
 @vindex isearch-terminators
@@ -683,6 +736,8 @@ eighth bit set directly rather than as a meta-prefixed escape
 sequence.
 The default is @samp{off}, but Readline will set it to @samp{on} if the
 locale contains eight-bit characters.
+This variable is dependent on the @code{LC_CTYPE} locale category, and
+may change if the locale is changed.
 
 @item page-completions
 @vindex page-completions
@@ -700,7 +755,7 @@ The default is @samp{off}.
 If set to @samp{on}, Readline will undo all changes to history lines
 before returning when @code{accept-line} is executed.  By default,
 history lines may be modified and retain individual undo lists across
-calls to @code{readline}.  The default is @samp{off}.
+calls to @code{readline()}.  The default is @samp{off}.
 
 @item show-all-if-ambiguous
 @vindex show-all-if-ambiguous
@@ -732,7 +787,7 @@ The default value is @samp{off}.
 @vindex skip-completed-text
 If set to @samp{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
+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.
@@ -792,12 +847,12 @@ 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
+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}).
 
 @ifset BashFeatures
 The @w{@code{bind -p}} command displays Readline function names and
-bindings in a format that can put directly into an initialization file.
+bindings in a format that can be put directly into an initialization file.
 @xref{Bash Builtins}.
 @end ifset
 
@@ -1332,6 +1387,11 @@ for editing.
 A numeric argument, if supplied, specifies the history entry to use instead
 of the current line.
 
+@item 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.
+
 @end ftable
 
 @node Commands For Text
@@ -1668,7 +1728,7 @@ Re-execute the last keyboard macro defined, by making the characters
 in the macro appear as if typed at the keyboard.
 
 @item print-last-kbd-macro ()
-Print the last keboard macro defined in a format suitable for the
+Print the last keyboard macro defined in a format suitable for the
 @var{inputrc} file.
 
 @end ftable
@@ -1721,11 +1781,11 @@ the saved position, and the old cursor position is saved as the mark.
 
 @item character-search (C-])
 A character is read and point is moved to the next occurrence of that
-character.  A negative count searches for previous occurrences.
+character.  A negative argument searches for previous occurrences.
 
 @item character-search-backward (M-C-])
 A character is read and point is moved to the previous occurrence
-of that character.  A negative count searches for subsequent
+of that character.  A negative argument searches for subsequent
 occurrences.
 
 @item skip-csi-sequence ()
@@ -1733,7 +1793,7 @@ 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
+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-[.
 
@@ -1772,6 +1832,11 @@ the output is formatted in such a way that it can be made part
 of an @var{inputrc} file.  This command is unbound by default.
 
 @ifset BashFeatures
+@item 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 @code{cdspell} shell option.
+Word boundaries are the same as those used by @code{shell-forward-word}.
+
 @item 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
@@ -2224,6 +2289,7 @@ Names of all shell variables.  May also be specified as @option{-v}.
 @item -C @var{command}
 @var{command} is executed in a subshell environment, and its output is
 used as the possible completions.
+Arguments are passed as with the @option{-F} option.
 
 @item -F @var{function}
 The shell function @var{function} is executed in the current shell
@@ -2401,7 +2467,7 @@ via @var{CDPATH}: Readline can't tell those completions are directories).
 The @option{-o nospace} option tells Readline to not append a space
 character to the directory name, in case we want to append to it.
 The @option{-o bashdefault} option brings in the rest of the "Bash default"
-completions -- possible completion that Bash adds to the default Readline
+completions -- possible completions that Bash adds to the default Readline
 set.  These include things like command name completion, variable completion
 for words beginning with @samp{$} or @samp{$@{}, completions containing pathname
 expansion patterns (@pxref{Filename Expansion}), and so on.
index 6e8e848b6e5ae993259eb3a964e8573fe3a73fc5..ae9ec6eb4f8f267d80202adccfe193aa622b7fd1 100644 (file)
@@ -12,7 +12,7 @@ This manual describes the end user interface of the GNU Readline Library
 consistency of user interface across discrete programs which provide
 a command line interface.
 
-Copyright @copyright{} 1988--2020 Free Software Foundation, Inc.
+Copyright @copyright{} 1988--2022 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
index abb9cb6ba573493530f878612d271b4c80848fce..d310273405152877ce211fe53d644851f6fad667 100644 (file)
@@ -1,10 +1,11 @@
 @ignore
-Copyright (C) 1988-2020 Free Software Foundation, Inc. 
+Copyright (C) 1988-2022 Free Software Foundation, Inc. 
 @end ignore
 
-@set EDITION 8.1
-@set VERSION 8.1
-@set UPDATED 29 October 2020
-@set UPDATED-MONTH October 2020
+@set EDITION 8.2
+@set VERSION 8.2
 
-@set LASTCHANGE Thu Oct 29 16:49:01 EDT 2020
+@set UPDATED 19 September 2022
+@set UPDATED-MONTH September 2022
+
+@set LASTCHANGE Mon Sep 19 11:15:16 EDT 2022
index 4206acfca4a518c8081d1e5389e2fdcb1b51bb8c..923c9238b6ecaf9d799171ec6aa9002f4089c1a5 100644 (file)
@@ -50,6 +50,8 @@ Copyright (C) 1999 Jeff Solomon
 #include <stdio.h>
 #include <termios.h>   /* xxx - should make this more general */
 
+#include <locale.h>
+
 #ifdef READLINE_LIBRARY
 #  include "readline.h"
 #else
@@ -104,6 +106,8 @@ main()
 {
     fd_set fds;
 
+    setlocale (LC_ALL, "");
+
     /* Adjust the terminal slightly before the handler is installed. Disable
      * canonical mode processing and set the input character time flag to be
      * non-blocking.
index 3b43674f79dd9142a7e4ae798a84fdecd7a684ac..309d769b3845e254132dab0aac3fb11050b4e150 100644 (file)
 #  include <readline/history.h>
 #endif
 
+#include <unistd.h>
+#include <stdlib.h>
 #include <string.h>
 
+int
 main (argc, argv)
      int argc;
      char **argv;
index 0f00e57c564e6b98b58f920cde02333a25157d8c..7febacd14c47f69ddc9f71cfbc2d6e9b6791b8b8 100644 (file)
@@ -7,9 +7,13 @@
 #include <sys/types.h>
 #include <sys/select.h>
 
+#include <signal.h>
+
 #include <errno.h>
 #include <stdio.h>
 
+#include <locale.h>
+
 /* Standard readline include files. */
 #if defined (READLINE_LIBRARY)
 #  include "readline.h"
 extern int errno;
 
 static void cb_linehandler (char *);
+static void signandler (int);
 
-int running;
+int running, sigwinch_received;
 const char *prompt = "rltest$ ";
 
+/* Handle SIGWINCH and window size changes when readline is not active and
+   reading a character. */
+static void
+sighandler (int sig)
+{
+  sigwinch_received = 1;
+}
+
 /* Callback function called for each line when accept-line executed, EOF
    seen, or EOF character read.  This sets a flag and returns; it could
    also call exit(3). */
@@ -60,6 +73,11 @@ main (int c, char **v)
   fd_set fds;
   int r;
 
+  setlocale (LC_ALL, "");
+
+  /* Handle SIGWINCH */
+  signal (SIGWINCH, sighandler);
+  
   /* Install the line handler. */
   rl_callback_handler_install (prompt, cb_linehandler);
 
@@ -80,6 +98,13 @@ main (int c, char **v)
          rl_callback_handler_remove ();
          break;
        }
+      if (sigwinch_received)
+       {
+         rl_resize_terminal ();
+         sigwinch_received = 0;
+       }
+      if (r < 0)
+       continue;
 
       if (FD_ISSET (fileno (rl_instream), &fds))
        rl_callback_read_char ();
index a5cf276cb943afcf88a12691c2d7c160dcb11262..39e5b8ebb5d1be6b748a9d8bab3d3feb190e0784 100644 (file)
 extern void exit();
 #endif
 
+#ifdef HAVE_LOCALE_H
+#  include <locale.h>
+#endif
+
 #if defined (READLINE_LIBRARY)
 #  include "posixstat.h"
 #  include "readline.h"
@@ -93,6 +97,10 @@ main (argc, argv)
   else
     progname++;
 
+#ifdef HAVE_SETLOCALE
+  setlocale (LC_ALL, "");
+#endif
+
   /* defaults */
   prompt = "readline$ ";
   fd = nch = 0;
index b4942413f8bebb6d08b83e035ce7dde3a9c52bf7..aabe0ca3e98673179a77d0f647122639e3028fa9 100644 (file)
 extern void exit();
 #endif
 
+#ifdef HAVE_LOCALE_H
+#  include <locale.h>
+#endif
+
 #ifndef errno
 extern int errno;
 #endif
@@ -79,6 +83,10 @@ main (argc, argv)
   char *temp;
   int opt, Vflag, Nflag;
 
+#ifdef HAVE_SETLOCALE
+  setlocale (LC_ALL, ""):
+#endif
+
   progname = strrchr(argv[0], '/');
   if (progname == 0)
     progname = argv[0];
index 65abe87cc044d39175d58408d60ad27674c3e8be..8b7c00c8c49a0e7f071c09f1d93d818b597afd23 100644 (file)
 extern void exit();
 #endif
 
+#ifdef HAVE_LOCALE_H
+#  include <locale.h>
+#endif
+
 #ifdef READLINE_LIBRARY
 #  include "readline.h"
 #  include "history.h"
@@ -52,6 +56,10 @@ main ()
   char *temp, *prompt;
   int done;
 
+#ifdef HAVE_SETLOCALE
+  setlocale (LC_ALL, "");
+#endif
+
   temp = (char *)NULL;
   prompt = "readline$ ";
   done = 0;
index eca49a3e4f61c0e57289d10352219830c59214ba..8b1cb4028db7fb0afe1e677d08d2a0ee12cac007 100644 (file)
@@ -1,6 +1,6 @@
 /* funmap.c -- attach names to functions. */
 
-/* Copyright (C) 1987-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2021 Free Software Foundation, Inc.
 
    This file is part of the GNU Readline Library (Readline), a library
    for reading lines of text with interactive input and history editing.      
@@ -46,7 +46,7 @@ typedef int QSFUNC (const void *, const void *);
 typedef int QSFUNC ();
 #endif
 
-extern int _rl_qsort_string_compare PARAMS((char **, char **));
+extern int _rl_qsort_string_compare (char **, char **);
 
 FUNMAP **funmap;
 static int funmap_size;
@@ -93,6 +93,7 @@ static const FUNMAP default_funmap[] = {
   { "end-of-history", rl_end_of_history },
   { "end-of-line", rl_end_of_line },
   { "exchange-point-and-mark", rl_exchange_point_and_mark },
+  { "fetch-history", rl_fetch_history },
   { "forward-backward-delete-char", rl_rubout_or_delete },
   { "forward-byte", rl_forward_byte },
   { "forward-char", rl_forward_char },
@@ -198,6 +199,7 @@ static const FUNMAP default_funmap[] = {
   { "vi-set-mark", rl_vi_set_mark },
   { "vi-subst", rl_vi_subst },
   { "vi-tilde-expand", rl_vi_tilde_expand },
+  { "vi-undo", rl_vi_undo },
   { "vi-unix-word-rubout", rl_vi_unix_word_rubout },
   { "vi-yank-arg", rl_vi_yank_arg },
   { "vi-yank-pop", rl_vi_yank_pop },
index b986dba0513f4cf4e28c167953df53f3ae5fa505..8ab68091e64cd750c58d785f2aa1a05a061a3d9b 100644 (file)
@@ -1,6 +1,6 @@
 /* histexpand.c -- history expansion. */
 
-/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2021 Free Software Foundation, Inc.
 
    This file contains the GNU History Library (History), a set of
    routines for managing the text of previously typed lines.
@@ -57,7 +57,7 @@
 
 #define fielddelim(c)  (whitespace(c) || (c) == '\n')
 
-typedef int _hist_search_func_t PARAMS((const char *, int));
+typedef int _hist_search_func_t (const char *, int);
 
 static char error_pointer;
 
@@ -70,14 +70,14 @@ static int subst_rhs_len;
    specifications from word designators.  Static for now */
 static char *history_event_delimiter_chars = HISTORY_EVENT_DELIMITERS;
 
-static char *get_history_word_specifier PARAMS((char *, char *, int *));
-static int history_tokenize_word PARAMS((const char *, int));
-static char **history_tokenize_internal PARAMS((const char *, int, int *));
-static char *history_substring PARAMS((const char *, int, int));
-static void freewords PARAMS((char **, int));
-static char *history_find_word PARAMS((char *, int));
+static char *get_history_word_specifier (char *, char *, int *);
+static int history_tokenize_word (const char *, int);
+static char **history_tokenize_internal (const char *, int, int *);
+static char *history_substring (const char *, int, int);
+static void freewords (char **, int);
+static char *history_find_word (char *, int);
 
-static char *quote_breaks PARAMS((char *));
+static char *quote_breaks (char *);
 
 /* Variables exported by this file. */
 /* The character that represents the start of a history expansion
@@ -1207,13 +1207,36 @@ history_expand (char *hstring, char **output)
             characters in history_no_expand_chars, then it is not a
             candidate for expansion of any kind. */
          if (cc == 0 || member (cc, history_no_expand_chars) ||
-                        (dquote && cc == '"') ||
-                        (history_inhibit_expansion_function && (*history_inhibit_expansion_function) (string, i)))
+                        (dquote && cc == '"'))
            {
              ADD_CHAR (string[i]);
              break;
            }
 
+         /* If the application has defined a function to determine whether
+            or not a history expansion should be performed, call it here. */
+         /* We check against what we've expanded so far, with the current
+            expansion appended, because that seems to be what csh does. We
+            decide to expand based on what we have to this point, not what
+            we started with. */
+         if (history_inhibit_expansion_function)
+           {
+             int save_j, temp;
+
+             save_j = j;
+             ADD_CHAR (string[i]);
+             ADD_CHAR (cc);
+
+             temp = (*history_inhibit_expansion_function) (result, save_j);
+             if (temp)
+               {
+                 result[--j] = '\0';   /* `unadd' cc, leaving ADD_CHAR(string[i]) */
+                 break;
+               }
+             else
+               result[j = save_j] = '\0';
+           }
+
 #if defined (NO_BANG_HASH_MODIFIERS)
          /* There is something that is listed as a `word specifier' in csh
             documentation which means `the expanded text to this point'.
index f0fa5ce15fe1a90d2e6c28e9f0729893e5589fee..3bfec5500db515ebafc2310555019711bdd93f4a 100644 (file)
@@ -114,8 +114,6 @@ extern int errno;
 #  define PATH_MAX     1024    /* default */
 #endif
 
-extern void _hs_append_history_line PARAMS((int, const char *));
-
 /* history file version; currently unused */
 int history_file_version = 1;
 
@@ -141,11 +139,11 @@ int history_lines_written_to_file = 0;
    for more extensive tests. */
 #define HIST_TIMESTAMP_START(s)                (*(s) == history_comment_char && isdigit ((unsigned char)(s)[1]) )
 
-static char *history_backupfile PARAMS((const char *));
-static char *history_tempfile PARAMS((const char *));
-static int histfile_backup PARAMS((const char *, const char *));
-static int histfile_restore PARAMS((const char *, const char *));
-static int history_rename PARAMS((const char *, const char *));
+static char *history_backupfile (const char *);
+static char *history_tempfile (const char *);
+static int histfile_backup (const char *, const char *);
+static int histfile_restore (const char *, const char *);
+static int history_rename (const char *, const char *);
 
 /* Return the string that should be used in the place of this
    filename.  This only matters when you don't specify the
@@ -312,7 +310,7 @@ read_history_range (const char *filename, int from, int to)
 
   if (file_size == 0)
     {
-      free (input);
+      xfree (input);
       close (file);
       return 0;        /* don't waste time if we don't have to */
     }
index 9627b24500012e03eefa8ad0e7dc056b756ed246..29fc4d2e5781dc24d6885f6317f2604695799002 100644 (file)
@@ -1,6 +1,6 @@
 /* histlib.h -- internal definitions for the history library. */
 
-/* Copyright (C) 1989-2009 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2009,2021-2022 Free Software Foundation, Inc.
 
    This file contains the GNU History Library (History), a set of
    routines for managing the text of previously typed lines.
@@ -80,6 +80,13 @@ extern char *strchr ();
 /* internal extern function declarations used by other parts of the library */
 
 /* histsearch.c */
-extern int _hs_history_patsearch PARAMS((const char *, int, int));
+extern int _hs_history_patsearch (const char *, int, int);
+
+/* history.c */
+extern void _hs_replace_history_data (int, histdata_t *, histdata_t *);
+extern int _hs_at_end_of_history (void);
+
+/* histfile.c */
+extern void _hs_append_history_line (int, const char *);
 
 #endif /* !_HISTLIB_H_ */
index 67158b14bc711b73462dca023f69873bde271459..81d4c1687b659045f9da5b3b82c58ff9bb4d37b7 100644 (file)
@@ -1,6 +1,6 @@
 /* history.c -- standalone history library */
 
-/* Copyright (C) 1989-2017 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2021 Free Software Foundation, Inc.
 
    This file contains the GNU History Library (History), a set of
    routines for managing the text of previously typed lines.
@@ -62,7 +62,7 @@ extern int errno;
 /* The number of slots to increase the_history by. */
 #define DEFAULT_HISTORY_GROW_SIZE 50
 
-static char *hist_inittime PARAMS((void));
+static char *hist_inittime (void);
 
 /* **************************************************************** */
 /*                                                                 */
@@ -165,6 +165,13 @@ history_set_pos (int pos)
   history_offset = pos;
   return (1);
 }
+
+/* Are we currently at the end of the history list? */
+int
+_hs_at_end_of_history (void)
+{
+  return (the_history == 0 || history_offset == history_length);
+}
  
 /* Return the current history array.  The caller has to be careful, since this
    is the actual array of data, and could be bashed or made corrupt easily.
@@ -390,7 +397,7 @@ replace_history_entry (int which, const char *line, histdata_t data)
 
   temp->line = savestring (line);
   temp->data = data;
-  temp->timestamp = savestring (old_value->timestamp);
+  temp->timestamp = old_value->timestamp ? savestring (old_value->timestamp) : 0;
   the_history[which] = temp;
 
   return (old_value);
index cc3de29a64231d083d7b282e2eb247d692dbe521..5208f9a463b2a18c5a6e9ee32d120980e989eaaf 100644 (file)
@@ -1,6 +1,6 @@
 /* history.h -- the names of functions that you can call in history. */
 
-/* Copyright (C) 1989-2015 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2022 Free Software Foundation, Inc.
 
    This file contains the GNU History Library (History), a set of
    routines for managing the text of previously typed lines.
@@ -42,6 +42,11 @@ typedef void *histdata_t;
 typedef char *histdata_t;
 #endif
 
+/* Let's not step on anyone else's define for now, since we don't use this yet. */
+#ifndef HS_HISTORY_VERSION
+#  define HS_HISTORY_VERSION 0x0802    /* History 8.2 */
+#endif
+
 /* The structure used to store a history entry. */
 typedef struct _hist_entry {
   char *line;
@@ -68,102 +73,102 @@ typedef struct _hist_state {
 
 /* Begin a session in which the history functions might be used.  This
    just initializes the interactive variables. */
-extern void using_history PARAMS((void));
+extern void using_history (void);
 
 /* Return the current HISTORY_STATE of the history. */
-extern HISTORY_STATE *history_get_history_state PARAMS((void));
+extern HISTORY_STATE *history_get_history_state (void);
 
 /* Set the state of the current history array to STATE. */
-extern void history_set_history_state PARAMS((HISTORY_STATE *));
+extern void history_set_history_state (HISTORY_STATE *);
 
 /* Manage the history list. */
 
 /* Place STRING at the end of the history list.
    The associated data field (if any) is set to NULL. */
-extern void add_history PARAMS((const char *));
+extern void add_history (const char *);
 
 /* Change the timestamp associated with the most recent history entry to
    STRING. */
-extern void add_history_time PARAMS((const char *));
+extern void add_history_time (const char *);
 
 /* Remove an entry from the history list.  WHICH is the magic number that
    tells us which element to delete.  The elements are numbered from 0. */
-extern HIST_ENTRY *remove_history PARAMS((int));
+extern HIST_ENTRY *remove_history (int);
 
 /* Remove a set of entries from the history list: FIRST to LAST, inclusive */
-extern HIST_ENTRY **remove_history_range PARAMS((int, int));
+extern HIST_ENTRY **remove_history_range (int, int);
 
 /* Allocate a history entry consisting of STRING and TIMESTAMP and return
    a pointer to it. */
-extern HIST_ENTRY *alloc_history_entry PARAMS((char *, char *));
+extern HIST_ENTRY *alloc_history_entry (char *, char *);
 
 /* Copy the history entry H, but not the (opaque) data pointer */
-extern HIST_ENTRY *copy_history_entry PARAMS((HIST_ENTRY *));
+extern HIST_ENTRY *copy_history_entry (HIST_ENTRY *);
 
 /* Free the history entry H and return any application-specific data
    associated with it. */
-extern histdata_t free_history_entry PARAMS((HIST_ENTRY *));
+extern histdata_t free_history_entry (HIST_ENTRY *);
 
 /* Make the history entry at WHICH have LINE and DATA.  This returns
    the old entry so you can dispose of the data.  In the case of an
    invalid WHICH, a NULL pointer is returned. */
-extern HIST_ENTRY *replace_history_entry PARAMS((int, const char *, histdata_t));
+extern HIST_ENTRY *replace_history_entry (int, const char *, histdata_t);
 
 /* Clear the history list and start over. */
-extern void clear_history PARAMS((void));
+extern void clear_history (void);
 
 /* Stifle the history list, remembering only MAX number of entries. */
-extern void stifle_history PARAMS((int));
+extern void stifle_history (int);
 
 /* Stop stifling the history.  This returns the previous amount the
    history was stifled by.  The value is positive if the history was
    stifled, negative if it wasn't. */
-extern int unstifle_history PARAMS((void));
+extern int unstifle_history (void);
 
 /* Return 1 if the history is stifled, 0 if it is not. */
-extern int history_is_stifled PARAMS((void));
+extern int history_is_stifled (void);
 
 /* Information about the history list. */
 
 /* Return a NULL terminated array of HIST_ENTRY which is the current input
    history.  Element 0 of this list is the beginning of time.  If there
    is no history, return NULL. */
-extern HIST_ENTRY **history_list PARAMS((void));
+extern HIST_ENTRY **history_list (void);
 
 /* Returns the number which says what history element we are now
    looking at.  */
-extern int where_history PARAMS((void));
+extern int where_history (void);
   
 /* Return the history entry at the current position, as determined by
    history_offset.  If there is no entry there, return a NULL pointer. */
-extern HIST_ENTRY *current_history PARAMS((void));
+extern HIST_ENTRY *current_history (void);
 
 /* Return the history entry which is logically at OFFSET in the history
    array.  OFFSET is relative to history_base. */
-extern HIST_ENTRY *history_get PARAMS((int));
+extern HIST_ENTRY *history_get (int);
 
 /* Return the timestamp associated with the HIST_ENTRY * passed as an
    argument */
-extern time_t history_get_time PARAMS((HIST_ENTRY *));
+extern time_t history_get_time (HIST_ENTRY *);
 
 /* Return the number of bytes that the primary history entries are using.
    This just adds up the lengths of the_history->lines. */
-extern int history_total_bytes PARAMS((void));
+extern int history_total_bytes (void);
 
 /* Moving around the history list. */
 
 /* Set the position in the history list to POS. */
-extern int history_set_pos PARAMS((int));
+extern int history_set_pos (int);
 
 /* Back up history_offset to the previous history entry, and return
    a pointer to that entry.  If there is no previous entry, return
    a NULL pointer. */
-extern HIST_ENTRY *previous_history PARAMS((void));
+extern HIST_ENTRY *previous_history (void);
 
 /* Move history_offset forward to the next item in the input_history,
    and return the a pointer to that entry.  If there is no next entry,
    return a NULL pointer. */
-extern HIST_ENTRY *next_history PARAMS((void));
+extern HIST_ENTRY *next_history (void);
 
 /* Searching the history list. */
 
@@ -173,45 +178,45 @@ extern HIST_ENTRY *next_history PARAMS((void));
    current_history () is the history entry, and the value of this function
    is the offset in the line of that history entry that the string was
    found in.  Otherwise, nothing is changed, and a -1 is returned. */
-extern int history_search PARAMS((const char *, int));
+extern int history_search (const char *, int);
 
 /* Search the history for STRING, starting at history_offset.
    The search is anchored: matching lines must begin with string.
    DIRECTION is as in history_search(). */
-extern int history_search_prefix PARAMS((const char *, int));
+extern int history_search_prefix (const char *, int);
 
 /* Search for STRING in the history list, starting at POS, an
    absolute index into the list.  DIR, if negative, says to search
    backwards from POS, else forwards.
    Returns the absolute index of the history element where STRING
    was found, or -1 otherwise. */
-extern int history_search_pos PARAMS((const char *, int, int));
+extern int history_search_pos (const char *, int, int);
 
 /* Managing the history file. */
 
 /* Add the contents of FILENAME to the history list, a line at a time.
    If FILENAME is NULL, then read from ~/.history.  Returns 0 if
    successful, or errno if not. */
-extern int read_history PARAMS((const char *));
+extern int read_history (const char *);
 
 /* Read a range of lines from FILENAME, adding them to the history list.
    Start reading at the FROM'th line and end at the TO'th.  If FROM
    is zero, start at the beginning.  If TO is less than FROM, read
    until the end of the file.  If FILENAME is NULL, then read from
    ~/.history.  Returns 0 if successful, or errno if not. */
-extern int read_history_range PARAMS((const char *, int, int));
+extern int read_history_range (const char *, int, int);
 
 /* Write the current history to FILENAME.  If FILENAME is NULL,
    then write the history list to ~/.history.  Values returned
    are as in read_history ().  */
-extern int write_history PARAMS((const char *));
+extern int write_history (const char *);
 
 /* Append NELEMENT entries to FILENAME.  The entries appended are from
    the end of the list minus NELEMENTs up to the end of the list. */
-extern int append_history PARAMS((int, const char *));
+extern int append_history (int, const char *);
 
 /* Truncate the history file, leaving only the last NLINES lines. */
-extern int history_truncate_file PARAMS((const char *, int));
+extern int history_truncate_file (const char *, int);
 
 /* History expansion. */
 
@@ -227,12 +232,12 @@ extern int history_truncate_file PARAMS((const char *, int));
 
   If an error occurred in expansion, then OUTPUT contains a descriptive
   error message. */
-extern int history_expand PARAMS((char *, char **));
+extern int history_expand (char *, char **);
 
 /* Extract a string segment consisting of the FIRST through LAST
    arguments present in STRING.  Arguments are broken up as in
    the shell. */
-extern char *history_arg_extract PARAMS((int, int, const char *));
+extern char *history_arg_extract (int, int, const char *);
 
 /* Return the text of the history event beginning at the current
    offset into STRING.  Pass STRING with *INDEX equal to the
@@ -240,11 +245,11 @@ extern char *history_arg_extract PARAMS((int, int, const char *));
    DELIMITING_QUOTE is a character that is allowed to end the string
    specification for what to search for in addition to the normal
    characters `:', ` ', `\t', `\n', and sometimes `?'. */
-extern char *get_history_event PARAMS((const char *, int *, int));
+extern char *get_history_event (const char *, int *, int);
 
 /* Return an array of tokens, much as the shell might.  The tokens are
    parsed out of STRING. */
-extern char **history_tokenize PARAMS((const char *));
+extern char **history_tokenize (const char *);
 
 /* Exported history variables. */
 extern int history_base;
index 7a426c96781429785f1b44ad3241da43e63df545..b62c06b7bf066a32fcc4b24bc8b3aa8c8910488c 100644 (file)
@@ -1,6 +1,6 @@
 /* histsearch.c -- searching the history list. */
 
-/* Copyright (C) 1989, 1992-2009,2017 Free Software Foundation, Inc.
+/* Copyright (C) 1989, 1992-2009,2017,2021 Free Software Foundation, Inc.
 
    This file contains the GNU History Library (History), a set of
    routines for managing the text of previously typed lines.
@@ -51,7 +51,7 @@
    string. */
 char *history_search_delimiter_chars = (char *)NULL;
 
-static int history_search_internal PARAMS((const char *, int, int));
+static int history_search_internal (const char *, int, int);
 
 /* Search the history for STRING, starting at history_offset.
    If DIRECTION < 0, then the search is through previous entries, else
@@ -248,7 +248,7 @@ _hs_history_patsearch (const char *string, int direction, int flags)
   ret = history_search_internal (pat, direction, flags|PATTERN_SEARCH);
 
   if (pat != string)
-    free (pat);
+    xfree (pat);
   return ret;
 }
        
index 61b0fde3c87f25644fd9ff7ec1ef0e02d14c403c..6f038d4508a457d8a52f24ab65a51a61cd5af4c7 100644 (file)
@@ -1,6 +1,6 @@
 /* input.c -- character input functions for readline. */
 
-/* Copyright (C) 1994-2017 Free Software Foundation, Inc.
+/* Copyright (C) 1994-2021 Free Software Foundation, Inc.
 
    This file is part of the GNU Readline Library (Readline), a library
    for reading lines of text with interactive input and history editing.      
@@ -50,6 +50,7 @@
 #include <signal.h>
 
 #include "posixselect.h"
+#include "posixtime.h"
 
 #if defined (FIONREAD_IN_SYS_IOCTL)
 #  include <sys/ioctl.h>
@@ -78,7 +79,7 @@ extern int errno;
 #  define O_NDELAY O_NONBLOCK  /* Posix style */
 #endif
 
-#if defined (HAVE_PSELECT)
+#if defined (HAVE_PSELECT) || defined (HAVE_SELECT)
 extern sigset_t _rl_orig_sigset;
 #endif
 
@@ -89,6 +90,9 @@ rl_hook_func_t *rl_event_hook = (rl_hook_func_t *)NULL;
 /* A function to call if a read(2) is interrupted by a signal. */
 rl_hook_func_t *rl_signal_event_hook = (rl_hook_func_t *)NULL;
 
+/* A function to call when readline times out after a time is specified. */
+rl_hook_func_t *rl_timeout_event_hook = (rl_hook_func_t *)NULL;
+
 /* A function to replace _rl_input_available for applications using the
    callback interface. */
 rl_hook_func_t *rl_input_available_hook = (rl_hook_func_t *)NULL;
@@ -97,9 +101,9 @@ rl_getc_func_t *rl_getc_function = rl_getc;
 
 static int _keyboard_input_timeout = 100000;           /* 0.1 seconds; it's in usec */
 
-static int ibuffer_space PARAMS((void));
-static int rl_get_char PARAMS((int *));
-static int rl_gather_tyi PARAMS((void));
+static int ibuffer_space (void);
+static int rl_get_char (int *);
+static int rl_gather_tyi (void);
 
 /* Windows isatty returns true for every character device, including the null
    device, so we need to perform additional checks. */
@@ -132,6 +136,36 @@ win32_isatty (int fd)
 #define isatty(x)      win32_isatty(x)
 #endif
 
+/* Readline timeouts */
+
+/* I don't know how to set a timeout for _getch() in MinGW32, so we use
+   SIGALRM. */
+#if (defined (HAVE_PSELECT) || defined (HAVE_SELECT)) && !defined (__MINGW32__)
+#  define RL_TIMEOUT_USE_SELECT
+#else
+#  define RL_TIMEOUT_USE_SIGALRM
+#endif
+
+int rl_set_timeout (unsigned int, unsigned int);
+int rl_timeout_remaining (unsigned int *, unsigned int *);
+
+int _rl_timeout_init (void);
+int _rl_timeout_sigalrm_handler (void);
+int _rl_timeout_select (int, fd_set *, fd_set *, fd_set *, const struct timeval *, const sigset_t *);
+
+static void _rl_timeout_handle (void);
+#if defined (RL_TIMEOUT_USE_SIGALRM)
+static int set_alarm (unsigned int *, unsigned int *);
+static void reset_alarm (void);
+#endif
+
+/* We implement timeouts as a future time using a supplied interval
+   (timeout_duration) from when the timeout is set (timeout_point).
+   That allows us to easily determine whether the timeout has occurred
+   and compute the time remaining until it does. */
+static struct timeval timeout_point;
+static struct timeval timeout_duration;
+
 /* **************************************************************** */
 /*                                                                 */
 /*                     Character Input Buffering                   */
@@ -223,13 +257,17 @@ rl_gather_tyi (void)
   input = 0;
   tty = fileno (rl_instream);
 
-#if defined (HAVE_SELECT)
+#if defined (HAVE_PSELECT) || defined (HAVE_SELECT)
   FD_ZERO (&readfds);
   FD_ZERO (&exceptfds);
   FD_SET (tty, &readfds);
   FD_SET (tty, &exceptfds);
   USEC_TO_TIMEVAL (_keyboard_input_timeout, timeout);
+#if defined (RL_TIMEOUT_USE_SELECT)
+  result = _rl_timeout_select (tty + 1, &readfds, (fd_set *)NULL, &exceptfds, &timeout, NULL);
+#else
   result = select (tty + 1, &readfds, (fd_set *)NULL, &exceptfds, &timeout);
+#endif
   if (result <= 0)
     return 0;  /* Nothing to read. */
 #endif
@@ -330,11 +368,11 @@ rl_set_keyboard_input_timeout (int u)
 int
 _rl_input_available (void)
 {
-#if defined(HAVE_SELECT)
+#if defined (HAVE_PSELECT) || defined (HAVE_SELECT)
   fd_set readfds, exceptfds;
   struct timeval timeout;
 #endif
-#if !defined (HAVE_SELECT) && defined(FIONREAD)
+#if !defined (HAVE_SELECT) && defined (FIONREAD)
   int chars_avail;
 #endif
   int tty;
@@ -344,13 +382,17 @@ _rl_input_available (void)
 
   tty = fileno (rl_instream);
 
-#if defined (HAVE_SELECT)
+#if defined (HAVE_PSELECT) || defined (HAVE_SELECT)
   FD_ZERO (&readfds);
   FD_ZERO (&exceptfds);
   FD_SET (tty, &readfds);
   FD_SET (tty, &exceptfds);
   USEC_TO_TIMEVAL (_keyboard_input_timeout, timeout);
+#  if defined (RL_TIMEOUT_USE_SELECT)
+  return (_rl_timeout_select (tty + 1, &readfds, (fd_set *)NULL, &exceptfds, &timeout, NULL) > 0);
+#  else
   return (select (tty + 1, &readfds, (fd_set *)NULL, &exceptfds, &timeout) > 0);
+#  endif
 #else
 
 #if defined (FIONREAD)
@@ -463,6 +505,242 @@ rl_clear_pending_input (void)
   return 0;
 }
 
+/* **************************************************************** */
+/*                                                                 */
+/*                         Timeout utility                         */
+/*                                                                 */
+/* **************************************************************** */
+
+#if defined (RL_TIMEOUT_USE_SIGALRM)
+#  if defined (HAVE_SETITIMER)
+
+static int
+set_alarm (unsigned int *secs, unsigned int *usecs)
+{
+  struct itimerval it;
+
+  timerclear (&it.it_interval);
+  timerset (&it.it_value, *secs, *usecs);
+  return setitimer (ITIMER_REAL, &it, NULL);
+}
+
+static void
+reset_alarm ()
+{
+  struct itimerval it;
+
+  timerclear (&it.it_interval);
+  timerclear (&it.it_value);
+  setitimer (ITIMER_REAL, &it, NULL);
+}
+#  else
+static int
+set_alarm (unsigned int *secs, unsigned int *usecs)
+{
+  if (*secs == 0 || *usecs >= USEC_PER_SEC / 2)
+    (*secs)++;
+  *usecs = 0;
+
+  return alarm (*secs);
+}
+static void
+reset_alarm ()
+{
+  alarm (0);
+}
+#  endif
+#endif
+
+/* Set a timeout which will be used for the next call of `readline
+   ()'.  When (0, 0) are specified the timeout is cleared.  */
+int
+rl_set_timeout (unsigned int secs, unsigned int usecs)
+{
+  timeout_duration.tv_sec = secs + usecs / USEC_PER_SEC;
+  timeout_duration.tv_usec = usecs % USEC_PER_SEC;
+
+  return 0;
+}
+
+/* Start measuring the time.  Returns 0 on success.  Returns -1 on
+   error. */
+int
+_rl_timeout_init (void)
+{
+  unsigned int secs, usecs;
+
+  /* Clear the timeout state of the previous edit */
+  RL_UNSETSTATE(RL_STATE_TIMEOUT);
+  timerclear (&timeout_point);
+
+  /* Return 0 when timeout is unset. */
+  if (timerisunset (&timeout_duration))
+    return 0;
+
+  /* Return -1 on gettimeofday error. */
+  if (gettimeofday(&timeout_point, 0) != 0)
+    {
+      timerclear (&timeout_point);
+      return -1;
+    }
+
+  secs = timeout_duration.tv_sec;
+  usecs = timeout_duration.tv_usec;
+
+#if defined (RL_TIMEOUT_USE_SIGALRM)
+  /* If select(2)/pselect(2) is unavailable, use SIGALRM. */
+  if (set_alarm (&secs, &usecs) < 0)
+    return -1;
+#endif
+
+  timeout_point.tv_sec += secs;
+  timeout_point.tv_usec += usecs;
+  if (timeout_point.tv_usec >= USEC_PER_SEC)
+    {
+      timeout_point.tv_sec++;
+      timeout_point.tv_usec -= USEC_PER_SEC;
+    }
+
+  return 0;
+}
+
+/* Get the remaining time until the scheduled timeout.  Returns -1 on
+   error or no timeout set with secs and usecs unchanged.  Returns 0
+   on an expired timeout with secs and usecs unchanged.  Returns 1
+   when the timeout has not yet expired.  The remaining time is stored
+   in secs and usecs.  When NULL is specified to either of the
+   arguments, just the expiration is tested. */
+int
+rl_timeout_remaining (unsigned int *secs, unsigned int *usecs)
+{
+  struct timeval current_time;
+
+  /* Return -1 when timeout is unset. */
+  if (timerisunset (&timeout_point))
+    {
+      errno = 0;
+      return -1;
+    }
+
+  /* Return -1 on error. errno is set by gettimeofday. */
+  if (gettimeofday(&current_time, 0) != 0)
+    return -1;
+
+  /* Return 0 when timeout has already expired. */
+  /* could use timercmp (&timeout_point, &current_time, <) here */
+  if (current_time.tv_sec > timeout_point.tv_sec ||
+       (current_time.tv_sec == timeout_point.tv_sec &&
+        current_time.tv_usec >= timeout_point.tv_usec))
+    return 0;
+
+  if (secs && usecs)
+    {
+      *secs = timeout_point.tv_sec - current_time.tv_sec;
+      *usecs = timeout_point.tv_usec - current_time.tv_usec;
+      if (timeout_point.tv_usec < current_time.tv_usec)
+       {
+         (*secs)--;
+         *usecs += USEC_PER_SEC;
+       }
+    }
+
+  return 1;
+}
+
+/* This should only be called if RL_TIMEOUT_USE_SELECT is defined. */
+
+#if defined (HAVE_PSELECT) || defined (HAVE_SELECT)
+int
+_rl_timeout_select (int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, const struct timeval *timeout, const sigset_t *sigmask)
+{
+  int result;
+#if defined (HAVE_PSELECT)
+  struct timespec ts;
+#else
+  sigset_t origmask;
+  struct timeval tv;
+#endif
+  int tmout_status;
+  struct timeval tmout;
+  unsigned int sec, usec;
+
+  /* When the remaining time for rl_timeout is shorter than the
+     keyboard input timeout, replace `timeout' with the remaining time
+     for `rl_timeout' and set `tmout_status = 1'. */
+  tmout_status = rl_timeout_remaining (&sec, &usec);
+  tmout.tv_sec = sec;
+  tmout.tv_usec = usec;
+
+  if (tmout_status == 0)
+    _rl_timeout_handle ();
+  else if (tmout_status == 1)
+    {
+      if (timeout == NULL || timercmp (&tmout, timeout, <))
+       timeout = &tmout;
+      else
+       tmout_status = -1;
+    }
+
+#if defined (HAVE_PSELECT)
+  if (timeout)
+    {
+      TIMEVAL_TO_TIMESPEC (timeout, &ts);
+      result = pselect (nfds, readfds, writefds, exceptfds, &ts, sigmask);
+    }
+  else
+    result = pselect (nfds, readfds, writefds, exceptfds, NULL, sigmask);
+#else
+  if (sigmask)
+    sigprocmask (SIG_SETMASK, sigmask, &origmask);
+
+  if (timeout)
+    {
+      tv.tv_sec = timeout->tv_sec;
+      tv.tv_usec = timeout->tv_usec;
+      result = select (nfds, readfds, writefds, exceptfds, &tv);
+    }
+  else
+    result = select (nfds, readfds, writefds, exceptfds, NULL);
+
+  if (sigmask)
+    sigprocmask (SIG_SETMASK, &origmask, NULL);
+#endif
+
+  if (tmout_status == 1 && result == 0)
+    _rl_timeout_handle ();
+
+  return result;
+}
+#endif
+
+static void
+_rl_timeout_handle ()
+{
+  if (rl_timeout_event_hook)
+    (*rl_timeout_event_hook) ();
+
+  RL_SETSTATE(RL_STATE_TIMEOUT);
+  _rl_abort_internal ();
+}
+
+int
+_rl_timeout_handle_sigalrm ()
+{
+#if defined (RL_TIMEOUT_USE_SIGALRM)
+  if (timerisunset (&timeout_point))
+    return -1;
+
+  /* Reset `timeout_point' to the current time to ensure that later
+     calls of `rl_timeout_pending ()' return 0 (timeout expired). */
+  if (gettimeofday(&timeout_point, 0) != 0)
+    timerclear (&timeout_point);
+
+  reset_alarm ();
+
+  _rl_timeout_handle ();
+#endif
+  return -1;
+}
 /* **************************************************************** */
 /*                                                                 */
 /*                          Character Input                        */
@@ -497,6 +775,7 @@ rl_read_key (void)
              if ((r = rl_gather_tyi ()) < 0)   /* XXX - EIO */
                {
                  rl_done = 1;
+                 RL_SETSTATE (RL_STATE_DONE);
                  return (errno == EIO ? (RL_ISSTATE (RL_STATE_READCMD) ? READERR : EOF) : '\n');
                }
              else if (r > 0)                   /* read something */
@@ -525,11 +804,13 @@ rl_getc (FILE *stream)
 {
   int result;
   unsigned char c;
+  int fd;
 #if defined (HAVE_PSELECT)
   sigset_t empty_set;
   fd_set readfds;
 #endif
 
+  fd = fileno (stream);
   while (1)
     {
       RL_CHECK_SIGNALS ();
@@ -537,23 +818,27 @@ rl_getc (FILE *stream)
       /* We know at this point that _rl_caught_signal == 0 */
 
 #if defined (__MINGW32__)
-      if (isatty (fileno (stream)))
+      if (isatty (fd)
        return (_getch ());     /* "There is no error return." */
 #endif
       result = 0;
-#if defined (HAVE_PSELECT)
+#if defined (HAVE_PSELECT) || defined (HAVE_SELECT)
+      /* At this point, if we have pselect, we're using select/pselect for the
+        timeouts. We handled MinGW above. */
       FD_ZERO (&readfds);
-      FD_SET (fileno (stream), &readfds);
+      FD_SET (fd, &readfds);
 #  if defined (HANDLE_SIGNALS)
-      result = pselect (fileno (stream) + 1, &readfds, NULL, NULL, NULL, &_rl_orig_sigset);
+      result = _rl_timeout_select (fd + 1, &readfds, NULL, NULL, NULL, &_rl_orig_sigset);
 #  else
       sigemptyset (&empty_set);
       sigprocmask (SIG_BLOCK, (sigset_t *)NULL, &empty_set);
-      result = pselect (fileno (stream) + 1, &readfds, NULL, NULL, NULL, &empty_set);
+      result = _rl_timeout_select (fd + 1, &readfds, NULL, NULL, NULL, &empty_set);
 #  endif /* HANDLE_SIGNALS */
+      if (result == 0)
+        _rl_timeout_handle ();         /* check the timeout */
 #endif
       if (result >= 0)
-       result = read (fileno (stream), &c, sizeof (unsigned char));
+       result = read (fd, &c, sizeof (unsigned char));
 
       if (result == sizeof (unsigned char))
        return (c);
@@ -582,7 +867,7 @@ rl_getc (FILE *stream)
 
       if (errno == X_EWOULDBLOCK || errno == X_EAGAIN)
        {
-         if (sh_unset_nodelay_mode (fileno (stream)) < 0)
+         if (sh_unset_nodelay_mode (fd) < 0)
            return (EOF);
          continue;
        }
@@ -645,7 +930,7 @@ _rl_read_mbchar (char *mbchar, int size)
 {
   int mb_len, c;
   size_t mbchar_bytes_length;
-  wchar_t wc;
+  WCHAR_T wc;
   mbstate_t ps, ps_back;
 
   memset(&ps, 0, sizeof (mbstate_t));
@@ -661,7 +946,7 @@ _rl_read_mbchar (char *mbchar, int size)
 
       mbchar[mb_len++] = c;
 
-      mbchar_bytes_length = mbrtowc (&wc, mbchar, mb_len, &ps);
+      mbchar_bytes_length = MBRTOWC (&wc, mbchar, mb_len, &ps);
       if (mbchar_bytes_length == (size_t)(-1))
        break;          /* invalid byte sequence for the current locale */
       else if (mbchar_bytes_length == (size_t)(-2))
index 080ba3cbb9c56ca617a306873c731b55ef561e0e..c2d4d236e9993e8b0fd35e959edf3e38d83e86e3 100644 (file)
@@ -6,7 +6,7 @@
 /*                                                                 */
 /* **************************************************************** */
 
-/* Copyright (C) 1987-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2021 Free Software Foundation, Inc.
 
    This file is part of the GNU Readline Library (Readline), a library
    for reading lines of text with interactive input and history editing.      
@@ -59,13 +59,10 @@ char *_rl_isearch_terminators = (char *)NULL;
 
 _rl_search_cxt *_rl_iscxt = 0;
 
-/* Variables imported from other files in the readline library. */
-extern HIST_ENTRY *_rl_saved_line_for_history;
+static int rl_search_history (int, int);
 
-static int rl_search_history PARAMS((int, int));
-
-static _rl_search_cxt *_rl_isearch_init PARAMS((int));
-static void _rl_isearch_fini PARAMS((_rl_search_cxt *));
+static _rl_search_cxt *_rl_isearch_init (int);
+static void _rl_isearch_fini (_rl_search_cxt *);
 
 /* Last line found by the current incremental search, so we don't `find'
    identical lines many times in a row.  Now part of isearch context. */
@@ -197,7 +194,10 @@ rl_display_search (char *search_string, int flags, int where)
 
   rl_message ("%s", message);
   xfree (message);
+#if 0
+  /* rl_message calls this */
   (*rl_redisplay_function) ();
+#endif
 }
 
 static _rl_search_cxt *
@@ -276,6 +276,8 @@ _rl_isearch_fini (_rl_search_cxt *cxt)
   last_isearch_string = cxt->search_string;
   last_isearch_string_len = cxt->search_string_index;
   cxt->search_string = 0;
+  cxt->search_string_size = 0;
+  cxt->search_string_index = 0;
 
   if (cxt->last_found_line < cxt->save_line)
     rl_get_previous_history (cxt->save_line - cxt->last_found_line, 0);
@@ -321,7 +323,7 @@ _rl_search_getchar (_rl_search_cxt *cxt)
 #if defined (HANDLE_MULTIBYTE)
   /* This ends up with C (and LASTC) being set to the last byte of the
      multibyte character.  In most cases c == lastc == mb[0] */
-  if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+  if (c >= 0 && MB_CUR_MAX > 1 && rl_byte_oriented == 0)
     c = cxt->lastc = _rl_read_mbstring (cxt->lastc, cxt->mb, MB_LEN_MAX);
 #endif
 
@@ -680,7 +682,7 @@ opcode_dispatch:
       paste = _rl_bracketed_text (&pastelen);
       if (paste == 0 || *paste == 0)
        {
-         free (paste);
+         xfree (paste);
          break;
        }
       if (_rl_enable_active_region)
@@ -690,9 +692,10 @@ opcode_dispatch:
          cxt->search_string_size += pastelen + 2;
          cxt->search_string = (char *)xrealloc (cxt->search_string, cxt->search_string_size);
        }
-      strcpy (cxt->search_string + cxt->search_string_index, paste);
+      memcpy (cxt->search_string + cxt->search_string_index, paste, pastelen);
       cxt->search_string_index += pastelen;
-      free (paste);
+      cxt->search_string[cxt->search_string_index] = '\0';
+      xfree (paste);
       break;
 
     /* Add character to search string and continue search. */
index 1fa853d8c1e6a68a9e06d79c880e7d246759ced6..2903814838620ffaa72cc4bbbb93e4a9c63ab172 100644 (file)
@@ -1,6 +1,6 @@
 /* keymaps.h -- Manipulation of readline keymaps. */
 
-/* Copyright (C) 1987, 1989, 1992 Free Software Foundation, Inc.
+/* Copyright (C) 1987, 1989, 1992-2021 Free Software Foundation, Inc.
 
    This file is part of the GNU Readline Library (Readline), a library
    for reading lines of text with interactive input and history editing.      
@@ -65,33 +65,33 @@ extern KEYMAP_ENTRY_ARRAY vi_insertion_keymap, vi_movement_keymap;
 
 /* Return a new, empty keymap.
    Free it with free() when you are done. */
-extern Keymap rl_make_bare_keymap PARAMS((void));
+extern Keymap rl_make_bare_keymap (void);
 
 /* Return a new keymap which is a copy of MAP. */
-extern Keymap rl_copy_keymap PARAMS((Keymap));
+extern Keymap rl_copy_keymap (Keymap);
 
 /* Return a new keymap with the printing characters bound to rl_insert,
    the lowercase Meta characters bound to run their equivalents, and
    the Meta digits bound to produce numeric arguments. */
-extern Keymap rl_make_keymap PARAMS((void));
+extern Keymap rl_make_keymap (void);
 
 /* Free the storage associated with a keymap. */
-extern void rl_discard_keymap PARAMS((Keymap));
+extern void rl_discard_keymap (Keymap);
 
 /* These functions actually appear in bind.c */
 
 /* Return the keymap corresponding to a given name.  Names look like
    `emacs' or `emacs-meta' or `vi-insert'.  */
-extern Keymap rl_get_keymap_by_name PARAMS((const char *));
+extern Keymap rl_get_keymap_by_name (const char *);
 
 /* Return the current keymap. */
-extern Keymap rl_get_keymap PARAMS((void));
+extern Keymap rl_get_keymap (void);
 
 /* Set the current keymap to MAP. */
-extern void rl_set_keymap PARAMS((Keymap));
+extern void rl_set_keymap (Keymap);
 
 /* Set the name of MAP to NAME */
-extern int rl_set_keymap_name PARAMS((const char *, Keymap));
+extern int rl_set_keymap_name (const char *, Keymap);
 
 #ifdef __cplusplus
 }
index 50c3fdead765bc71b0e3e2d1ef81e4155982aa8a..4cf933b20096ec0ceafa573fa3f06d43f4a178af 100644 (file)
@@ -1,6 +1,6 @@
 /* kill.c -- kill ring management. */
 
-/* Copyright (C) 1994-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1994-2021 Free Software Foundation, Inc.
 
    This file is part of the GNU Readline Library (Readline), a library
    for reading lines of text with interactive input and history editing.      
@@ -70,10 +70,10 @@ static int rl_kill_index;
 /* How many slots we have in the kill ring. */
 static int rl_kill_ring_length;
 
-static int _rl_copy_to_kill_ring PARAMS((char *, int));
-static int region_kill_internal PARAMS((int));
-static int _rl_copy_word_as_kill PARAMS((int, int));
-static int rl_yank_nth_arg_internal PARAMS((int, int, int));
+static int _rl_copy_to_kill_ring (char *, int);
+static int region_kill_internal (int);
+static int _rl_copy_word_as_kill (int, int);
+static int rl_yank_nth_arg_internal (int, int, int);
 
 /* How to say that you only want to save a certain amount
    of kill material. */
@@ -351,6 +351,30 @@ rl_unix_filename_rubout (int count, int key)
       while (count--)
        {
          c = rl_line_buffer[rl_point - 1];
+
+         /* First move backwards through whitespace */
+         while (rl_point && whitespace (c))
+           {
+             rl_point--;
+             c = rl_line_buffer[rl_point - 1];
+           }
+
+         /* Consume one or more slashes. */
+         if (c == '/')
+           {
+             int i;
+
+             i = rl_point - 1;
+             while (i > 0 && c == '/')
+               c = rl_line_buffer[--i];
+             if (i == 0 || whitespace (c))
+               {
+                 rl_point = i + whitespace (c);
+                 continue;     /* slashes only */
+               }
+             c = '/';
+           }
+
          while (rl_point && (whitespace (c) || c == '/'))
            {
              rl_point--;
@@ -535,7 +559,7 @@ rl_yank_pop (int count, int key)
 int
 rl_vi_yank_pop (int count, int key)
 {
-  int l, n;
+  int l, n, origpoint;
 
   if (((rl_last_func != rl_vi_yank_pop) && (rl_last_func != rl_vi_put)) ||
       !rl_kill_ring)
@@ -545,11 +569,21 @@ rl_vi_yank_pop (int count, int key)
     }
 
   l = strlen (rl_kill_ring[rl_kill_index]);
+#if 0 /* TAG:readline-8.3 8/29/2022 matteopaolini1995@gmail.com */
+  origpoint = rl_point;
+  n = rl_point - l + 1;
+#else
   n = rl_point - l;
+#endif
   if (n >= 0 && STREQN (rl_line_buffer + n, rl_kill_ring[rl_kill_index], l))
     {
+#if 0 /* TAG:readline-8.3 */
+      rl_delete_text (n, n + l);               /* remember vi cursor positioning */
+      rl_point = origpoint - l;
+#else
       rl_delete_text (n, rl_point);
       rl_point = n;
+#endif
       rl_kill_index--;
       if (rl_kill_index < 0)
        rl_kill_index = rl_kill_ring_length - 1;
index 92cc55c36dc001e78ddddd1e488dee0b1d42ab8a..231a24bcda3d2a865f7c4890010cfd0e8dcd5ca5 100644 (file)
@@ -276,6 +276,8 @@ rl_end_kbd_macro (int count, int ignore)
     }
 
   current_macro_index -= rl_key_sequence_length;
+  if (current_macro_index < 0)
+    current_macro_index = 0;
   current_macro[current_macro_index] = '\0';
 
   RL_UNSETSTATE(RL_STATE_MACRODEF);
index dc62b4cc24dd55df745c1e623a24f3ca94f21059..47e9100a68cc3eb525cd1a90f4ac1c05421ff074 100644 (file)
@@ -1,6 +1,6 @@
 /* mbutil.c -- readline multibyte character utility functions */
 
-/* Copyright (C) 2001-2020 Free Software Foundation, Inc.
+/* Copyright (C) 2001-2021 Free Software Foundation, Inc.
 
    This file is part of the GNU Readline Library (Readline), a library
    for reading lines of text with interactive input and history editing.      
@@ -153,7 +153,7 @@ _rl_find_next_mbchar_internal (char *string, int seed, int count, int find_non_z
   size_t tmp, len;
   mbstate_t ps;
   int point;
-  wchar_t wc;
+  WCHAR_T wc;
 
   tmp = 0;
 
@@ -183,11 +183,11 @@ _rl_find_next_mbchar_internal (char *string, int seed, int count, int find_non_z
       if (_rl_utf8locale && UTF8_SINGLEBYTE(string[point]))
        {
          tmp = 1;
-         wc = (wchar_t) string[point];
+         wc = (WCHAR_T) string[point];
          memset(&ps, 0, sizeof(mbstate_t));
        }
       else
-       tmp = mbrtowc (&wc, string+point, len, &ps);
+       tmp = MBRTOWC (&wc, string+point, len, &ps);
       if (MB_INVALIDCH ((size_t)tmp))
        {
          /* invalid bytes. assume a byte represents a character */
@@ -216,11 +216,11 @@ _rl_find_next_mbchar_internal (char *string, int seed, int count, int find_non_z
 
   if (find_non_zero)
     {
-      tmp = mbrtowc (&wc, string + point, strlen (string + point), &ps);
+      tmp = MBRTOWC (&wc, string + point, strlen (string + point), &ps);
       while (MB_NULLWCH (tmp) == 0 && MB_INVALIDCH (tmp) == 0 && WCWIDTH (wc) == 0)
        {
          point += tmp;
-         tmp = mbrtowc (&wc, string + point, strlen (string + point), &ps);
+         tmp = MBRTOWC (&wc, string + point, strlen (string + point), &ps);
        }
     }
 
@@ -231,11 +231,11 @@ static inline int
 _rl_test_nonzero (char *string, int ind, int len)
 {
   size_t tmp;
-  wchar_t wc;
+  WCHAR_T wc;
   mbstate_t ps;
 
   memset (&ps, 0, sizeof (mbstate_t));
-  tmp = mbrtowc (&wc, string + ind, len - ind, &ps);
+  tmp = MBRTOWC (&wc, string + ind, len - ind, &ps);
   /* treat invalid multibyte sequences as non-zero-width */
   return (MB_INVALIDCH (tmp) || MB_NULLWCH (tmp) || WCWIDTH (wc) > 0);
 }
@@ -293,7 +293,7 @@ _rl_find_prev_mbchar_internal (char *string, int seed, int find_non_zero)
   mbstate_t ps;
   int prev, non_zero_prev, point, length;
   size_t tmp;
-  wchar_t wc;
+  WCHAR_T wc;
 
   if (_rl_utf8locale)
     return (_rl_find_prev_utf8char (string, seed, find_non_zero));
@@ -312,11 +312,11 @@ _rl_find_prev_mbchar_internal (char *string, int seed, int find_non_zero)
       if (_rl_utf8locale && UTF8_SINGLEBYTE(string[point]))
        {
          tmp = 1;
-         wc = (wchar_t) string[point];
+         wc = (WCHAR_T) string[point];
          memset(&ps, 0, sizeof(mbstate_t));
        }
       else
-       tmp = mbrtowc (&wc, string + point, length - point, &ps);
+       tmp = MBRTOWC (&wc, string + point, length - point, &ps);
       if (MB_INVALIDCH ((size_t)tmp))
        {
          /* in this case, bytes are invalid or too short to compose
@@ -470,27 +470,27 @@ _rl_is_mbchar_matched (char *string, int seed, int end, char *mbchar, int length
   return 1;
 }
 
-wchar_t
+WCHAR_T
 _rl_char_value (char *buf, int ind)
 {
   size_t tmp;
-  wchar_t wc;
+  WCHAR_T wc;
   mbstate_t ps;
   int l;
 
   if (MB_LEN_MAX == 1 || rl_byte_oriented)
-    return ((wchar_t) buf[ind]);
+    return ((WCHAR_T) buf[ind]);
   if (_rl_utf8locale && UTF8_SINGLEBYTE(buf[ind]))
-    return ((wchar_t) buf[ind]);
+    return ((WCHAR_T) buf[ind]);
   l = strlen (buf);
   if (ind >= l - 1)
-    return ((wchar_t) buf[ind]);
+    return ((WCHAR_T) buf[ind]);
   if (l < ind)                 /* Sanity check */
     l = strlen (buf+ind);
   memset (&ps, 0, sizeof (mbstate_t));
-  tmp = mbrtowc (&wc, buf + ind, l - ind, &ps);
+  tmp = MBRTOWC (&wc, buf + ind, l - ind, &ps);
   if (MB_INVALIDCH (tmp) || MB_NULLWCH (tmp))  
-    return ((wchar_t) buf[ind]);
+    return ((WCHAR_T) buf[ind]);
   return wc;
 }
 #endif /* HANDLE_MULTIBYTE */
index 3d9a674ca59d9a4de961ac846cd66fe221c4f2c6..4bca9c586101954061d5ccae5ac2153ac6526186 100644 (file)
@@ -1,6 +1,6 @@
 /* misc.c -- miscellaneous bindable readline functions. */
 
-/* Copyright (C) 1987-2019 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2022 Free Software Foundation, Inc.
 
    This file is part of the GNU Readline Library (Readline), a library
    for reading lines of text with interactive input and history editing.      
 #include "history.h"
 
 #include "rlprivate.h"
+#include "histlib.h"
 #include "rlshell.h"
 #include "xmalloc.h"
 
-static int rl_digit_loop PARAMS((void));
-static void _rl_history_set_point PARAMS((void));
-
-/* Forward declarations used in this file */
-void _rl_free_history_entry PARAMS((HIST_ENTRY *));
+static int rl_digit_loop (void);
+static void _rl_history_set_point (void);
 
 /* If non-zero, rl_get_previous_history and rl_get_next_history attempt
    to preserve the value of rl_point from line to line. */
@@ -309,9 +307,9 @@ _rl_start_using_history (void)
 {
   using_history ();
   if (_rl_saved_line_for_history)
-    _rl_free_history_entry (_rl_saved_line_for_history);
-
+    _rl_free_saved_history_line ();
   _rl_saved_line_for_history = (HIST_ENTRY *)NULL;
+  _rl_history_search_pos = -99;                /* some random invalid history position */
 }
 
 /* Free the contents (and containing structure) of a HIST_ENTRY. */
@@ -355,6 +353,8 @@ rl_maybe_unsave_line (void)
         list from a history entry, as in rl_replace_from_history() below. */
       rl_replace_line (_rl_saved_line_for_history->line, 0);
       rl_undo_list = (UNDO_LIST *)_rl_saved_line_for_history->data;
+
+      /* Doesn't free `data'. */
       _rl_free_history_entry (_rl_saved_line_for_history);
       _rl_saved_line_for_history = (HIST_ENTRY *)NULL;
       rl_point = rl_end;       /* rl_replace_line sets rl_end */
@@ -382,8 +382,18 @@ rl_maybe_save_line (void)
 int
 _rl_free_saved_history_line (void)
 {
+  UNDO_LIST *orig;
+
   if (_rl_saved_line_for_history)
     {
+      if (rl_undo_list && rl_undo_list == (UNDO_LIST *)_rl_saved_line_for_history->data)
+       rl_undo_list = 0;
+      /* Have to free this separately because _rl_free_history entry can't:
+        it doesn't know whether or not this has application data. Only the
+        callers that know this is _rl_saved_line_for_history can know that
+        it's an undo list. */
+      if (_rl_saved_line_for_history->data)
+       _rl_free_undo_list ((UNDO_LIST *)_rl_saved_line_for_history->data);
       _rl_free_history_entry (_rl_saved_line_for_history);
       _rl_saved_line_for_history = (HIST_ENTRY *)NULL;
     }
@@ -625,7 +635,7 @@ rl_get_previous_history (int count, int key)
   if (temp == 0)
     {
       if (had_saved_line == 0)
-        _rl_free_saved_history_line ();
+       _rl_free_saved_history_line ();
       rl_ding ();
     }
   else
@@ -637,6 +647,42 @@ rl_get_previous_history (int count, int key)
   return 0;
 }
 
+/* With an argument, move back that many history lines, else move to the
+   beginning of history. */
+int
+rl_fetch_history (int count, int c)
+{
+  int wanted, nhist;
+
+  /* Giving an argument of n means we want the nth command in the history
+     file.  The command number is interpreted the same way that the bash
+     `history' command does it -- that is, giving an argument count of 450
+     to this command would get the command listed as number 450 in the
+     output of `history'. */
+  if (rl_explicit_arg)
+    {
+      nhist = history_base + where_history ();
+      /* Negative arguments count back from the end of the history list. */
+      wanted = (count >= 0) ? nhist - count : -count;
+
+      if (wanted <= 0 || wanted >= nhist)
+       {
+         /* In vi mode, we don't change the line with an out-of-range
+            argument, as for the `G' command. */
+         if (rl_editing_mode == vi_mode)
+           rl_ding ();
+         else
+           rl_beginning_of_history (0, 0);
+       }
+      else
+        rl_get_previous_history (wanted, c);
+    }
+  else
+    rl_beginning_of_history (count, 0);
+
+  return (0);
+}
+
 /* The equivalent of the Korn shell C-o operate-and-get-next-history-line
    editing command. */
 
@@ -664,15 +710,13 @@ set_saved_history ()
 }
 
 int
-rl_operate_and_get_next (count, c)
-     int count, c;
+rl_operate_and_get_next (int count, int c)
 {
   /* Accept the current line. */
   rl_newline (1, c);
 
   saved_history_logical_offset = rl_explicit_arg ? count : where_history () + history_base + 1;
 
-
   _rl_saved_internal_startup_hook = _rl_internal_startup_hook;
   _rl_internal_startup_hook = set_saved_history;
 
index d2f67e0d3e1ac1a9f085d3e10fbc7af0c129d8e0..5c6a13b6e9ce6687b72410cf29c399215aef0003 100644 (file)
@@ -1,6 +1,6 @@
 /* nls.c -- skeletal internationalization code. */
 
-/* Copyright (C) 1996-2017 Free Software Foundation, Inc.
+/* Copyright (C) 1996-2022 Free Software Foundation, Inc.
 
    This file is part of the GNU Readline Library (Readline), a library
    for reading lines of text with interactive input and history editing.      
 #include "readline.h"
 #include "rlshell.h"
 #include "rlprivate.h"
+#include "xmalloc.h"
 
-static int utf8locale PARAMS((char *));
+static int utf8locale (char *);
+
+#define RL_DEFAULT_LOCALE "C"
+static char *_rl_current_locale = 0;
 
 #if !defined (HAVE_SETLOCALE)    
 /* A list of legal values for the LANG or LC_CTYPE environment variables.
@@ -78,12 +82,12 @@ static char *legal_lang_values[] =
   0
 };
 
-static char *normalize_codeset PARAMS((char *));
+static char *normalize_codeset (char *);
 #endif /* !HAVE_SETLOCALE */
 
-static char *find_codeset PARAMS((char *, size_t *));
+static char *find_codeset (char *, size_t *);
 
-static char *_rl_get_locale_var PARAMS((const char *));
+static char *_rl_get_locale_var (const char *);
 
 static char *
 _rl_get_locale_var (const char *v)
@@ -131,50 +135,61 @@ _rl_init_locale (void)
      that doesn't return anything, we set lspec to the empty string to
      force the subsequent call to setlocale() to define the `native'
      environment. */
+#if defined (HAVE_SETLOCALE)
   if (lspec == 0 || *lspec == 0)
     lspec = setlocale (LC_CTYPE, (char *)NULL);
   if (lspec == 0)
     lspec = "";
   ret = setlocale (LC_CTYPE, lspec);   /* ok, since it does not change locale */
+#else
+  ret = (lspec == 0 || *lspec == 0) ? RL_DEFAULT_LOCALE : lspec;
+#endif
 
   _rl_utf8locale = (ret && *ret) ? utf8locale (ret) : 0;
 
+  _rl_current_locale = savestring (ret);
   return ret;
 }
 
-/* Check for LC_ALL, LC_CTYPE, and LANG and use the first with a value
-   to decide the defaults for 8-bit character input and output.  Returns
-   1 if we set eight-bit mode. */
-int
-_rl_init_eightbit (void)
-{
 /* If we have setlocale(3), just check the current LC_CTYPE category
-   value, and go into eight-bit mode if it's not C or POSIX. */
+   value (passed as LOCALESTR), and go into eight-bit mode if it's not "C"
+   or "POSIX". If FORCE is non-zero, we reset the locale variables to values
+   appropriate for the C locale if the locale is "C" or "POSIX". FORCE is 0
+   when this is called from _rl_init_eightbit, since we're modifying the
+   default initial values and don't need to change anything else. If we
+   don't have setlocale(3), we check the codeset portion of LOCALESTR against
+   a set of known values and go into eight-bit mode if it matches one of those.
+   Returns 1 if we set eight-bit (multibyte) mode. */
+static int
+_rl_set_localevars (char *localestr, int force)
+{
 #if defined (HAVE_SETLOCALE)
-  char *lspec, *t;
-
-  t = _rl_init_locale ();      /* returns static pointer */
-
-  if (t && *t && (t[0] != 'C' || t[1]) && (STREQ (t, "POSIX") == 0))
+  if (localestr && *localestr && (localestr[0] != 'C' || localestr[1]) && (STREQ (localestr, "POSIX") == 0))
     {
       _rl_meta_flag = 1;
       _rl_convert_meta_chars_to_ascii = 0;
       _rl_output_meta_chars = 1;
       return (1);
     }
+  else if (force)
+    {
+      /* Default "C" locale settings. */
+      _rl_meta_flag = 0;
+      _rl_convert_meta_chars_to_ascii = 1;
+      _rl_output_meta_chars = 0;
+      return (0);
+    }
   else
     return (0);
 
 #else /* !HAVE_SETLOCALE */
-  char *lspec, *t;
+  char *t;
   int i;
 
   /* We don't have setlocale.  Finesse it.  Check the environment for the
      appropriate variables and set eight-bit mode if they have the right
      values. */
-  lspec = _rl_get_locale_var ("LC_CTYPE");
-
-  if (lspec == 0 || (t = normalize_codeset (lspec)) == 0)
+  if (localestr == 0 || (t = normalize_codeset (localestr)) == 0)
     return (0);
   for (i = 0; t && legal_lang_values[i]; i++)
     if (STREQ (t, legal_lang_values[i]))
@@ -185,6 +200,14 @@ _rl_init_eightbit (void)
        break;
       }
 
+  if (force && legal_lang_values[i] == 0)      /* didn't find it */
+    {
+      /* Default "C" locale settings. */
+      _rl_meta_flag = 0;
+      _rl_convert_meta_chars_to_ascii = 1;
+      _rl_output_meta_chars = 0;
+    }
+
   _rl_utf8locale = *t ? STREQ (t, "utf8") : 0;
 
   xfree (t);
@@ -192,6 +215,21 @@ _rl_init_eightbit (void)
 #endif /* !HAVE_SETLOCALE */
 }
 
+/* Check for LC_ALL, LC_CTYPE, and LANG and use the first with a value
+   to decide the defaults for 8-bit character input and output.  Returns
+   1 if we set eight-bit mode. */
+int
+_rl_init_eightbit (void)
+{
+  char *t, *ol;
+
+  ol = _rl_current_locale;
+  t = _rl_init_locale ();      /* resets _rl_current_locale, returns static pointer */
+  xfree (ol);
+
+  return (_rl_set_localevars (t, 0));
+}
+
 #if !defined (HAVE_SETLOCALE)
 static char *
 normalize_codeset (char *codeset)
@@ -288,3 +326,19 @@ find_codeset (char *name, size_t *lenp)
 
   return result;
 }
+
+void
+_rl_reset_locale (void)
+{
+  char *ol, *nl;
+
+  /* This should not be NULL; _rl_init_eightbit sets it on the first call to
+     readline() or rl_initialize(). */
+  ol = _rl_current_locale;
+  nl = _rl_init_locale ();             /* resets _rl_current_locale */
+
+  if ((ol == 0 && nl) || (ol && nl && (STREQ (ol, nl) == 0)))
+    (void)_rl_set_localevars (nl, 1);
+
+  xfree (ol);
+}
index af4797736293d4cefa2d9c57784a1c83a03b434c..57ce70458dad86f8532d009a5d2a1a9643067470 100644 (file)
@@ -1,6 +1,6 @@
 /* parens.c -- implementation of matching parentheses feature. */
 
-/* Copyright (C) 1987, 1989, 1992-2015, 2017 Free Software Foundation, Inc.
+/* Copyright (C) 1987, 1989, 1992-2015, 2017, 2021 Free Software Foundation, Inc.
 
    This file is part of the GNU Readline Library (Readline), a library
    for reading lines of text with interactive input and history editing.      
@@ -53,7 +53,7 @@ extern char *strchr (), *strrchr ();
 #include "readline.h"
 #include "rlprivate.h"
 
-static int find_matching_open PARAMS((char *, int, int));
+static int find_matching_open (char *, int, int);
 
 /* Non-zero means try to blink the matching open parenthesis when the
    close parenthesis is inserted. */
@@ -135,7 +135,11 @@ rl_insert_close (int count, int invoking_key)
       orig_point = rl_point;
       rl_point = match_point;
       (*rl_redisplay_function) ();
+#  if defined (RL_TIMEOUT_USE_SELECT)
+      ready = _rl_timeout_select (1, &readfds, (fd_set *)NULL, (fd_set *)NULL, &timer, NULL);
+#  else
       ready = select (1, &readfds, (fd_set *)NULL, (fd_set *)NULL, &timer);
+#  endif
       rl_point = orig_point;
 #else /* !HAVE_SELECT */
       _rl_insert_char (count, invoking_key);
index af5be8012b347eee3b62ba0e78f36109619999e0..b737bd7d1ce1e9a06fccc1bbf369119d772f85ee 100644 (file)
@@ -1,6 +1,6 @@
 /* posixdir.h -- Posix directory reading includes and defines. */
 
-/* Copyright (C) 1987,1991,2012 Free Software Foundation, Inc.
+/* Copyright (C) 1987,1991,2012,2019,2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
diff --git a/lib/readline/posixtime.h b/lib/readline/posixtime.h
new file mode 100644 (file)
index 0000000..e70ebec
--- /dev/null
@@ -0,0 +1,84 @@
+/* posixtime.h -- wrapper for time.h, sys/times.h mess. */
+
+/* Copyright (C) 1999-2021 Free Software Foundation, Inc.
+
+   This file is part of GNU Bash, the Bourne Again SHell.
+
+   Bash is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+
+   Bash is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with Bash.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef _POSIXTIME_H_
+#define _POSIXTIME_H_
+
+/* include this after config.h */
+/* Some systems require this, mostly for the definition of `struct timezone'.
+   For example, Dynix/ptx has that definition in <time.h> rather than
+      sys/time.h */
+#if defined (HAVE_SYS_TIME_H)
+#  include <sys/time.h>
+#endif
+#include <time.h>
+
+#if !defined (HAVE_SYSCONF) || !defined (_SC_CLK_TCK)
+#  if !defined (CLK_TCK)
+#    if defined (HZ)
+#      define CLK_TCK  HZ
+#    else
+#      define CLK_TCK  60                      /* 60HZ */
+#    endif
+#  endif /* !CLK_TCK */
+#endif /* !HAVE_SYSCONF && !_SC_CLK_TCK */
+
+#if !HAVE_TIMEVAL
+struct timeval
+{
+  time_t tv_sec;
+  long int tv_usec;
+};
+#endif
+
+#if !HAVE_GETTIMEOFDAY
+extern int gettimeofday PARAMS((struct timeval *, void *));
+#endif
+
+/* These exist on BSD systems, at least. */
+#if !defined (timerclear)
+#  define timerclear(tvp)      do { (tvp)->tv_sec = 0; (tvp)->tv_usec = 0; } while (0)
+#endif
+#if !defined (timerisset)
+#  define timerisset(tvp)      ((tvp)->tv_sec || (tvp)->tv_usec)
+#endif
+#if !defined (timercmp)
+#  define timercmp(a, b, CMP) \
+       (((a)->tv_sec == (b)->tv_sec) ? ((a)->tv_usec CMP (b)->tv_usec) \
+                                     : ((a)->tv_sec CMP (b)->tv_sec))
+#endif
+
+/* These are non-standard. */
+#if !defined (timerisunset)
+#  define timerisunset(tvp)    ((tvp)->tv_sec == 0 && (tvp)->tv_usec == 0)
+#endif
+#if !defined (timerset)
+#  define timerset(tvp, s, u)  do { tvp->tv_sec = s; tvp->tv_usec = u; } while (0)
+#endif
+
+#ifndef TIMEVAL_TO_TIMESPEC
+#  define TIMEVAL_TO_TIMESPEC(tv, ts) \
+  do { \
+    (ts)->tv_sec = (tv)->tv_sec; \
+    (ts)->tv_nsec = (tv)->tv_usec * 1000; \
+  } while (0)
+#endif
+
+#endif /* _POSIXTIME_H_ */
index e61d188bbe944264e8e6cbdd8a878bfb1db33a9a..9d42a8d6d66a50ee741efb883ea64e290a053f42 100644 (file)
@@ -1,7 +1,7 @@
 /* readline.c -- a general facility for reading lines of input
    with emacs style editing and completion. */
 
-/* Copyright (C) 1987-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2022 Free Software Foundation, Inc.
 
    This file is part of the GNU Readline Library (Readline), a library
    for reading lines of text with interactive input and history editing.      
@@ -72,35 +72,34 @@ extern int errno;
 #include "rlshell.h"
 #include "xmalloc.h"
 
-#ifndef RL_LIBRARY_VERSION
-#  define RL_LIBRARY_VERSION "8.0"
+#if defined (COLOR_SUPPORT)
+#  include "parse-colors.h"
 #endif
 
-#ifndef RL_READLINE_VERSION
-#  define RL_READLINE_VERSION  0x0800
+#ifndef RL_LIBRARY_VERSION
+#  define RL_LIBRARY_VERSION "8.1"
 #endif
 
-extern void _rl_free_history_entry PARAMS((HIST_ENTRY *));
-
-#if defined (COLOR_SUPPORT)
-extern void _rl_parse_colors PARAMS((void));           /* XXX */
+#ifndef RL_READLINE_VERSION
+#  define RL_READLINE_VERSION  0x0801
 #endif
 
-
 /* Forward declarations used in this file. */
-static char *readline_internal PARAMS((void));
-static void readline_initialize_everything PARAMS((void));
+static char *readline_internal (void);
+static void readline_initialize_everything (void);
+
+static void run_startup_hooks (void);
 
-static void bind_arrow_keys_internal PARAMS((Keymap));
-static void bind_arrow_keys PARAMS((void));
+static void bind_arrow_keys_internal (Keymap);
+static void bind_arrow_keys (void);
 
-static void bind_bracketed_paste_prefix PARAMS((void));
+static void bind_bracketed_paste_prefix (void);
 
-static void readline_default_bindings PARAMS((void));
-static void reset_default_bindings PARAMS((void));
+static void readline_default_bindings (void);
+static void reset_default_bindings (void);
 
-static int _rl_subseq_result PARAMS((int, Keymap, int, int));
-static int _rl_subseq_getchar PARAMS((int));
+static int _rl_subseq_result (int, Keymap, int, int);
+static int _rl_subseq_getchar (int);
 
 /* **************************************************************** */
 /*                                                                 */
@@ -165,6 +164,9 @@ int rl_end;
 /* Make this non-zero to return the current input_line. */
 int rl_done;
 
+/* If non-zero when readline_internal returns, it means we found EOF */
+int rl_eof_found = 0;
+
 /* The last function executed by readline. */
 rl_command_func_t *rl_last_func = (rl_command_func_t *)NULL;
 
@@ -218,9 +220,6 @@ int _rl_eof_char = CTRL ('D');
 /* Non-zero makes this the next keystroke to read. */
 int rl_pending_input = 0;
 
-/* If non-zero when readline_internal returns, it means we found EOF */
-int _rl_eof_found = 0;
-
 /* Pointer to a useful terminal name. */
 const char *rl_terminal_name = (const char *)NULL;
 
@@ -241,6 +240,9 @@ char *_rl_comment_begin;
 /* Keymap holding the function currently being executed. */
 Keymap rl_executing_keymap;
 
+/* The function currently being executed. */
+rl_command_func_t *_rl_executing_func;
+
 /* Keymap we're currently using to dispatch. */
 Keymap _rl_dispatching_keymap;
 
@@ -403,6 +405,16 @@ readline (const char *prompt)
   return (value);
 }
 
+static void
+run_startup_hooks (void)
+{
+  if (rl_startup_hook)
+    (*rl_startup_hook) ();
+
+  if (_rl_internal_startup_hook)
+    (*_rl_internal_startup_hook) ();
+}
+
 #if defined (READLINE_CALLBACKS)
 #  define STATIC_CALLBACK
 #else
@@ -422,11 +434,7 @@ readline_internal_setup (void)
   if (_rl_enable_meta & RL_ISSTATE (RL_STATE_TERMPREPPED))
     _rl_enable_meta_key ();
 
-  if (rl_startup_hook)
-    (*rl_startup_hook) ();
-
-  if (_rl_internal_startup_hook)
-    (*_rl_internal_startup_hook) ();
+  run_startup_hooks ();
 
   rl_deactivate_mark ();
 
@@ -474,12 +482,18 @@ readline_internal_teardown (int eof)
 
   RL_CHECK_SIGNALS ();
 
+  if (eof)
+    RL_SETSTATE (RL_STATE_EOF);                /* XXX */
+
   /* Restore the original of this history line, iff the line that we
      are editing was originally in the history, AND the line has changed. */
   entry = current_history ();
 
+  /* We don't want to do this if we executed functions that call
+     history_set_pos to set the history offset to the line containing the
+     non-incremental search string. */
   if (entry && rl_undo_list)
-    {
+   {
       temp = savestring (the_line);
       rl_revert_line (1, 0);
       entry = replace_history_entry (where_history (), the_line, (histdata_t)NULL);
@@ -511,6 +525,11 @@ readline_internal_teardown (int eof)
 void
 _rl_internal_char_cleanup (void)
 {
+  if (_rl_keep_mark_active)
+    _rl_keep_mark_active = 0;
+  else if (rl_mark_active_p ())
+    rl_deactivate_mark ();
+
 #if defined (VI_MODE)
   /* In vi mode, when you exit insert mode, the cursor moves back
      over the previous character.  We explicitly check for that here. */
@@ -567,6 +586,15 @@ readline_internal_charloop (void)
        {
          (*rl_redisplay_function) ();
          _rl_want_redisplay = 0;
+
+         /* If we longjmped because of a timeout, handle it here. */
+         if (RL_ISSTATE (RL_STATE_TIMEOUT))
+           {
+             RL_SETSTATE (RL_STATE_DONE);
+             rl_done = 1;
+             return 1;
+           }
+
          /* If we get here, we're not being called from something dispatched
             from _rl_callback_read_char(), which sets up its own value of
             _rl_top_level (saving and restoring the old, of course), so
@@ -596,6 +624,7 @@ readline_internal_charloop (void)
          RL_SETSTATE(RL_STATE_DONE);
          return (rl_done = 1);
 #else
+         RL_SETSTATE(RL_STATE_EOF);
          eof_found = 1;
          break;
 #endif
@@ -636,6 +665,7 @@ readline_internal_charloop (void)
          RL_SETSTATE(RL_STATE_DONE);
          return (rl_done = 1);
 #else
+         RL_SETSTATE(RL_STATE_EOF);
          eof_found = 1;
          break;
 #endif
@@ -652,6 +682,8 @@ readline_internal_charloop (void)
          rl_executing_keymap = _rl_command_to_execute->map;
          rl_executing_key = _rl_command_to_execute->key;
 
+         _rl_executing_func = _rl_command_to_execute->func;
+
          rl_dispatching = 1;
          RL_SETSTATE(RL_STATE_DISPATCHING);
          r = (*(_rl_command_to_execute->func)) (_rl_command_to_execute->count, _rl_command_to_execute->key);
@@ -668,11 +700,6 @@ readline_internal_charloop (void)
       if (rl_pending_input == 0 && lk == _rl_last_command_was_kill)
        _rl_last_command_was_kill = 0;
 
-      if (_rl_keep_mark_active)
-        _rl_keep_mark_active = 0;
-      else if (rl_mark_active_p ())
-        rl_deactivate_mark ();
-
       _rl_internal_char_cleanup ();
 
 #if defined (READLINE_CALLBACKS)
@@ -703,8 +730,8 @@ static char *
 readline_internal (void)
 {
   readline_internal_setup ();
-  _rl_eof_found = readline_internal_charloop ();
-  return (readline_internal_teardown (_rl_eof_found));
+  rl_eof_found = readline_internal_charloop ();
+  return (readline_internal_teardown (rl_eof_found));
 }
 
 void
@@ -878,6 +905,8 @@ _rl_dispatch_subseq (register int key, Keymap map, int got_subseq)
          rl_executing_keymap = map;
          rl_executing_key = key;
 
+         _rl_executing_func = func;
+
          RESIZE_KEYSEQ_BUFFER();
          rl_executing_keyseq[rl_key_sequence_length++] = key;
          rl_executing_keyseq[rl_key_sequence_length] = '\0';
@@ -1143,6 +1172,9 @@ _rl_subseq_result (int r, Keymap map, int key, int got_subseq)
 int
 rl_initialize (void)
 {
+  /* Initialize the timeout first to get the precise start time. */
+  _rl_timeout_init ();
+
   /* If we have never been called before, initialize the
      terminal and data structures. */
   if (rl_initialized == 0)
@@ -1154,14 +1186,14 @@ rl_initialize (void)
       RL_SETSTATE(RL_STATE_INITIALIZED);
     }
   else
-    (void)_rl_init_locale ();  /* check current locale */
+    _rl_reset_locale ();       /* check current locale and set locale variables */
 
   /* Initialize the current line information. */
   _rl_init_line_state ();
 
   /* We aren't done yet.  We haven't even gotten started yet! */
   rl_done = 0;
-  RL_UNSETSTATE(RL_STATE_DONE);
+  RL_UNSETSTATE(RL_STATE_DONE|RL_STATE_TIMEOUT|RL_STATE_EOF);
 
   /* Tell the history routines what is going on. */
   _rl_start_using_history ();
@@ -1282,8 +1314,8 @@ readline_initialize_everything (void)
 
   /* If the completion parser's default word break characters haven't
      been set yet, then do so now. */
-  if (rl_completer_word_break_characters == (char *)NULL)
-    rl_completer_word_break_characters = (char *)rl_basic_word_break_characters;
+  if (rl_completer_word_break_characters == 0)
+    rl_completer_word_break_characters = rl_basic_word_break_characters;
 
 #if defined (COLOR_SUPPORT)
   if (_rl_colored_stats || _rl_colored_completion_prefix)
@@ -1532,3 +1564,12 @@ _rl_add_executing_keyseq (int key)
   RESIZE_KEYSEQ_BUFFER ();
  rl_executing_keyseq[rl_key_sequence_length++] = key;
 }
+
+/* `delete' the last character added to the executing key sequence. Use this
+   before calling rl_execute_next to avoid keys being added twice. */
+void
+_rl_del_executing_keyseq (void)
+{
+  if (rl_key_sequence_length > 0)
+    rl_key_sequence_length--;
+}
index 78fa39d02a1d59c0d17bbcca01944b488f0d8a86..cac269f0b433ca795a929e0c4c4ebde42446f7de 100644 (file)
@@ -1,6 +1,6 @@
 /* Readline.h -- the names of functions callable from within readline. */
 
-/* Copyright (C) 1987-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2022 Free Software Foundation, Inc.
 
    This file is part of the GNU Readline Library (Readline), a library
    for reading lines of text with interactive input and history editing.      
@@ -39,9 +39,9 @@ extern "C" {
 #endif
 
 /* Hex-encoded Readline version number. */
-#define RL_READLINE_VERSION    0x0801          /* Readline 8.0 */
+#define RL_READLINE_VERSION    0x0802          /* Readline 8.2 */
 #define RL_VERSION_MAJOR       8
-#define RL_VERSION_MINOR       1
+#define RL_VERSION_MINOR       2
 
 /* Readline data structures. */
 
@@ -79,211 +79,212 @@ extern FUNMAP **funmap;
 /* **************************************************************** */
 
 /* Bindable commands for numeric arguments. */
-extern int rl_digit_argument PARAMS((int, int));
-extern int rl_universal_argument PARAMS((int, int));
+extern int rl_digit_argument (int, int);
+extern int rl_universal_argument (int, int);
 
 /* Bindable commands for moving the cursor. */
-extern int rl_forward_byte PARAMS((int, int));
-extern int rl_forward_char PARAMS((int, int));
-extern int rl_forward PARAMS((int, int));
-extern int rl_backward_byte PARAMS((int, int));
-extern int rl_backward_char PARAMS((int, int));
-extern int rl_backward PARAMS((int, int));
-extern int rl_beg_of_line PARAMS((int, int));
-extern int rl_end_of_line PARAMS((int, int));
-extern int rl_forward_word PARAMS((int, int));
-extern int rl_backward_word PARAMS((int, int));
-extern int rl_refresh_line PARAMS((int, int));
-extern int rl_clear_screen PARAMS((int, int));
-extern int rl_clear_display PARAMS((int, int));
-extern int rl_skip_csi_sequence PARAMS((int, int));
-extern int rl_arrow_keys PARAMS((int, int));
-
-extern int rl_previous_screen_line PARAMS((int, int));
-extern int rl_next_screen_line PARAMS((int, int));
+extern int rl_forward_byte (int, int);
+extern int rl_forward_char (int, int);
+extern int rl_forward (int, int);
+extern int rl_backward_byte (int, int);
+extern int rl_backward_char (int, int);
+extern int rl_backward (int, int);
+extern int rl_beg_of_line (int, int);
+extern int rl_end_of_line (int, int);
+extern int rl_forward_word (int, int);
+extern int rl_backward_word (int, int);
+extern int rl_refresh_line (int, int);
+extern int rl_clear_screen (int, int);
+extern int rl_clear_display (int, int);
+extern int rl_skip_csi_sequence (int, int);
+extern int rl_arrow_keys (int, int);
+
+extern int rl_previous_screen_line (int, int);
+extern int rl_next_screen_line (int, int);
 
 /* Bindable commands for inserting and deleting text. */
-extern int rl_insert PARAMS((int, int));
-extern int rl_quoted_insert PARAMS((int, int));
-extern int rl_tab_insert PARAMS((int, int));
-extern int rl_newline PARAMS((int, int));
-extern int rl_do_lowercase_version PARAMS((int, int));
-extern int rl_rubout PARAMS((int, int));
-extern int rl_delete PARAMS((int, int));
-extern int rl_rubout_or_delete PARAMS((int, int));
-extern int rl_delete_horizontal_space PARAMS((int, int));
-extern int rl_delete_or_show_completions PARAMS((int, int));
-extern int rl_insert_comment PARAMS((int, int));
+extern int rl_insert (int, int);
+extern int rl_quoted_insert (int, int);
+extern int rl_tab_insert (int, int);
+extern int rl_newline (int, int);
+extern int rl_do_lowercase_version (int, int);
+extern int rl_rubout (int, int);
+extern int rl_delete (int, int);
+extern int rl_rubout_or_delete (int, int);
+extern int rl_delete_horizontal_space (int, int);
+extern int rl_delete_or_show_completions (int, int);
+extern int rl_insert_comment (int, int);
 
 /* Bindable commands for changing case. */
-extern int rl_upcase_word PARAMS((int, int));
-extern int rl_downcase_word PARAMS((int, int));
-extern int rl_capitalize_word PARAMS((int, int));
+extern int rl_upcase_word (int, int);
+extern int rl_downcase_word (int, int);
+extern int rl_capitalize_word (int, int);
 
 /* Bindable commands for transposing characters and words. */
-extern int rl_transpose_words PARAMS((int, int));
-extern int rl_transpose_chars PARAMS((int, int));
+extern int rl_transpose_words (int, int);
+extern int rl_transpose_chars (int, int);
 
 /* Bindable commands for searching within a line. */
-extern int rl_char_search PARAMS((int, int));
-extern int rl_backward_char_search PARAMS((int, int));
+extern int rl_char_search (int, int);
+extern int rl_backward_char_search (int, int);
 
 /* Bindable commands for readline's interface to the command history. */
-extern int rl_beginning_of_history PARAMS((int, int));
-extern int rl_end_of_history PARAMS((int, int));
-extern int rl_get_next_history PARAMS((int, int));
-extern int rl_get_previous_history PARAMS((int, int));
-extern int rl_operate_and_get_next PARAMS((int, int));
+extern int rl_beginning_of_history (int, int);
+extern int rl_end_of_history (int, int);
+extern int rl_get_next_history (int, int);
+extern int rl_get_previous_history (int, int);
+extern int rl_operate_and_get_next (int, int);
+extern int rl_fetch_history (int, int);
 
 /* Bindable commands for managing the mark and region. */
-extern int rl_set_mark PARAMS((int, int));
-extern int rl_exchange_point_and_mark PARAMS((int, int));
+extern int rl_set_mark (int, int);
+extern int rl_exchange_point_and_mark (int, int);
 
 /* Bindable commands to set the editing mode (emacs or vi). */
-extern int rl_vi_editing_mode PARAMS((int, int));
-extern int rl_emacs_editing_mode PARAMS((int, int));
+extern int rl_vi_editing_mode (int, int);
+extern int rl_emacs_editing_mode (int, int);
 
 /* Bindable commands to change the insert mode (insert or overwrite) */
-extern int rl_overwrite_mode PARAMS((int, int));
+extern int rl_overwrite_mode (int, int);
 
 /* Bindable commands for managing key bindings. */
-extern int rl_re_read_init_file PARAMS((int, int));
-extern int rl_dump_functions PARAMS((int, int));
-extern int rl_dump_macros PARAMS((int, int));
-extern int rl_dump_variables PARAMS((int, int));
+extern int rl_re_read_init_file (int, int);
+extern int rl_dump_functions (int, int);
+extern int rl_dump_macros (int, int);
+extern int rl_dump_variables (int, int);
 
 /* Bindable commands for word completion. */
-extern int rl_complete PARAMS((int, int));
-extern int rl_possible_completions PARAMS((int, int));
-extern int rl_insert_completions PARAMS((int, int));
-extern int rl_old_menu_complete PARAMS((int, int));
-extern int rl_menu_complete PARAMS((int, int));
-extern int rl_backward_menu_complete PARAMS((int, int));
+extern int rl_complete (int, int);
+extern int rl_possible_completions (int, int);
+extern int rl_insert_completions (int, int);
+extern int rl_old_menu_complete (int, int);
+extern int rl_menu_complete (int, int);
+extern int rl_backward_menu_complete (int, int);
 
 /* Bindable commands for killing and yanking text, and managing the kill ring. */
-extern int rl_kill_word PARAMS((int, int));
-extern int rl_backward_kill_word PARAMS((int, int));
-extern int rl_kill_line PARAMS((int, int));
-extern int rl_backward_kill_line PARAMS((int, int));
-extern int rl_kill_full_line PARAMS((int, int));
-extern int rl_unix_word_rubout PARAMS((int, int));
-extern int rl_unix_filename_rubout PARAMS((int, int));
-extern int rl_unix_line_discard PARAMS((int, int));
-extern int rl_copy_region_to_kill PARAMS((int, int));
-extern int rl_kill_region PARAMS((int, int));
-extern int rl_copy_forward_word PARAMS((int, int));
-extern int rl_copy_backward_word PARAMS((int, int));
-extern int rl_yank PARAMS((int, int));
-extern int rl_yank_pop PARAMS((int, int));
-extern int rl_yank_nth_arg PARAMS((int, int));
-extern int rl_yank_last_arg PARAMS((int, int));
-extern int rl_bracketed_paste_begin PARAMS((int, int));
+extern int rl_kill_word (int, int);
+extern int rl_backward_kill_word (int, int);
+extern int rl_kill_line (int, int);
+extern int rl_backward_kill_line (int, int);
+extern int rl_kill_full_line (int, int);
+extern int rl_unix_word_rubout (int, int);
+extern int rl_unix_filename_rubout (int, int);
+extern int rl_unix_line_discard (int, int);
+extern int rl_copy_region_to_kill (int, int);
+extern int rl_kill_region (int, int);
+extern int rl_copy_forward_word (int, int);
+extern int rl_copy_backward_word (int, int);
+extern int rl_yank (int, int);
+extern int rl_yank_pop (int, int);
+extern int rl_yank_nth_arg (int, int);
+extern int rl_yank_last_arg (int, int);
+extern int rl_bracketed_paste_begin (int, int);
 /* Not available unless _WIN32 is defined. */
 #if defined (_WIN32)
-extern int rl_paste_from_clipboard PARAMS((int, int));
+extern int rl_paste_from_clipboard (int, int);
 #endif
 
 /* Bindable commands for incremental searching. */
-extern int rl_reverse_search_history PARAMS((int, int));
-extern int rl_forward_search_history PARAMS((int, int));
+extern int rl_reverse_search_history (int, int);
+extern int rl_forward_search_history (int, int);
 
 /* Bindable keyboard macro commands. */
-extern int rl_start_kbd_macro PARAMS((int, int));
-extern int rl_end_kbd_macro PARAMS((int, int));
-extern int rl_call_last_kbd_macro PARAMS((int, int));
-extern int rl_print_last_kbd_macro PARAMS((int, int));
+extern int rl_start_kbd_macro (int, int);
+extern int rl_end_kbd_macro (int, int);
+extern int rl_call_last_kbd_macro (int, int);
+extern int rl_print_last_kbd_macro (int, int);
 
 /* Bindable undo commands. */
-extern int rl_revert_line PARAMS((int, int));
-extern int rl_undo_command PARAMS((int, int));
+extern int rl_revert_line (int, int);
+extern int rl_undo_command (int, int);
 
 /* Bindable tilde expansion commands. */
-extern int rl_tilde_expand PARAMS((int, int));
+extern int rl_tilde_expand (int, int);
 
 /* Bindable terminal control commands. */
-extern int rl_restart_output PARAMS((int, int));
-extern int rl_stop_output PARAMS((int, int));
+extern int rl_restart_output (int, int);
+extern int rl_stop_output (int, int);
 
 /* Miscellaneous bindable commands. */
-extern int rl_abort PARAMS((int, int));
-extern int rl_tty_status PARAMS((int, int));
+extern int rl_abort (int, int);
+extern int rl_tty_status (int, int);
 
 /* Bindable commands for incremental and non-incremental history searching. */
-extern int rl_history_search_forward PARAMS((int, int));
-extern int rl_history_search_backward PARAMS((int, int));
-extern int rl_history_substr_search_forward PARAMS((int, int));
-extern int rl_history_substr_search_backward PARAMS((int, int));
-extern int rl_noninc_forward_search PARAMS((int, int));
-extern int rl_noninc_reverse_search PARAMS((int, int));
-extern int rl_noninc_forward_search_again PARAMS((int, int));
-extern int rl_noninc_reverse_search_again PARAMS((int, int));
+extern int rl_history_search_forward (int, int);
+extern int rl_history_search_backward (int, int);
+extern int rl_history_substr_search_forward (int, int);
+extern int rl_history_substr_search_backward (int, int);
+extern int rl_noninc_forward_search (int, int);
+extern int rl_noninc_reverse_search (int, int);
+extern int rl_noninc_forward_search_again (int, int);
+extern int rl_noninc_reverse_search_again (int, int);
 
 /* Bindable command used when inserting a matching close character. */
-extern int rl_insert_close PARAMS((int, int));
+extern int rl_insert_close (int, int);
 
 /* Not available unless READLINE_CALLBACKS is defined. */
-extern void rl_callback_handler_install PARAMS((const char *, rl_vcpfunc_t *));
-extern void rl_callback_read_char PARAMS((void));
-extern void rl_callback_handler_remove PARAMS((void));
-extern void rl_callback_sigcleanup PARAMS((void));
+extern void rl_callback_handler_install (const char *, rl_vcpfunc_t *);
+extern void rl_callback_read_char (void);
+extern void rl_callback_handler_remove (void);
+extern void rl_callback_sigcleanup (void);
 
 /* Things for vi mode. Not available unless readline is compiled -DVI_MODE. */
 /* VI-mode bindable commands. */
-extern int rl_vi_redo PARAMS((int, int));
-extern int rl_vi_undo PARAMS((int, int));
-extern int rl_vi_yank_arg PARAMS((int, int));
-extern int rl_vi_fetch_history PARAMS((int, int));
-extern int rl_vi_search_again PARAMS((int, int));
-extern int rl_vi_search PARAMS((int, int));
-extern int rl_vi_complete PARAMS((int, int));
-extern int rl_vi_tilde_expand PARAMS((int, int));
-extern int rl_vi_prev_word PARAMS((int, int));
-extern int rl_vi_next_word PARAMS((int, int));
-extern int rl_vi_end_word PARAMS((int, int));
-extern int rl_vi_insert_beg PARAMS((int, int));
-extern int rl_vi_append_mode PARAMS((int, int));
-extern int rl_vi_append_eol PARAMS((int, int));
-extern int rl_vi_eof_maybe PARAMS((int, int));
-extern int rl_vi_insertion_mode PARAMS((int, int));
-extern int rl_vi_insert_mode PARAMS((int, int));
-extern int rl_vi_movement_mode PARAMS((int, int));
-extern int rl_vi_arg_digit PARAMS((int, int));
-extern int rl_vi_change_case PARAMS((int, int));
-extern int rl_vi_put PARAMS((int, int));
-extern int rl_vi_column PARAMS((int, int));
-extern int rl_vi_delete_to PARAMS((int, int));
-extern int rl_vi_change_to PARAMS((int, int));
-extern int rl_vi_yank_to PARAMS((int, int));
-extern int rl_vi_yank_pop PARAMS((int, int));
-extern int rl_vi_rubout PARAMS((int, int));
-extern int rl_vi_delete PARAMS((int, int));
-extern int rl_vi_back_to_indent PARAMS((int, int));
-extern int rl_vi_unix_word_rubout PARAMS((int, int));
-extern int rl_vi_first_print PARAMS((int, int));
-extern int rl_vi_char_search PARAMS((int, int));
-extern int rl_vi_match PARAMS((int, int));
-extern int rl_vi_change_char PARAMS((int, int));
-extern int rl_vi_subst PARAMS((int, int));
-extern int rl_vi_overstrike PARAMS((int, int));
-extern int rl_vi_overstrike_delete PARAMS((int, int));
-extern int rl_vi_replace PARAMS((int, int));
-extern int rl_vi_set_mark PARAMS((int, int));
-extern int rl_vi_goto_mark PARAMS((int, int));
+extern int rl_vi_redo (int, int);
+extern int rl_vi_undo (int, int);
+extern int rl_vi_yank_arg (int, int);
+extern int rl_vi_fetch_history (int, int);
+extern int rl_vi_search_again (int, int);
+extern int rl_vi_search (int, int);
+extern int rl_vi_complete (int, int);
+extern int rl_vi_tilde_expand (int, int);
+extern int rl_vi_prev_word (int, int);
+extern int rl_vi_next_word (int, int);
+extern int rl_vi_end_word (int, int);
+extern int rl_vi_insert_beg (int, int);
+extern int rl_vi_append_mode (int, int);
+extern int rl_vi_append_eol (int, int);
+extern int rl_vi_eof_maybe (int, int);
+extern int rl_vi_insertion_mode (int, int);
+extern int rl_vi_insert_mode (int, int);
+extern int rl_vi_movement_mode (int, int);
+extern int rl_vi_arg_digit (int, int);
+extern int rl_vi_change_case (int, int);
+extern int rl_vi_put (int, int);
+extern int rl_vi_column (int, int);
+extern int rl_vi_delete_to (int, int);
+extern int rl_vi_change_to (int, int);
+extern int rl_vi_yank_to (int, int);
+extern int rl_vi_yank_pop (int, int);
+extern int rl_vi_rubout (int, int);
+extern int rl_vi_delete (int, int);
+extern int rl_vi_back_to_indent (int, int);
+extern int rl_vi_unix_word_rubout (int, int);
+extern int rl_vi_first_print (int, int);
+extern int rl_vi_char_search (int, int);
+extern int rl_vi_match (int, int);
+extern int rl_vi_change_char (int, int);
+extern int rl_vi_subst (int, int);
+extern int rl_vi_overstrike (int, int);
+extern int rl_vi_overstrike_delete (int, int);
+extern int rl_vi_replace (int, int);
+extern int rl_vi_set_mark (int, int);
+extern int rl_vi_goto_mark (int, int);
 
 /* VI-mode utility functions. */
-extern int rl_vi_check PARAMS((void));
-extern int rl_vi_domove PARAMS((int, int *));
-extern int rl_vi_bracktype PARAMS((int));
+extern int rl_vi_check (void);
+extern int rl_vi_domove (int, int *);
+extern int rl_vi_bracktype (int);
 
-extern void rl_vi_start_inserting PARAMS((int, int, int));
+extern void rl_vi_start_inserting (int, int, int);
 
 /* VI-mode pseudo-bindable commands, used as utility functions. */
-extern int rl_vi_fWord PARAMS((int, int));
-extern int rl_vi_bWord PARAMS((int, int));
-extern int rl_vi_eWord PARAMS((int, int));
-extern int rl_vi_fword PARAMS((int, int));
-extern int rl_vi_bword PARAMS((int, int));
-extern int rl_vi_eword PARAMS((int, int));
+extern int rl_vi_fWord (int, int);
+extern int rl_vi_bWord (int, int);
+extern int rl_vi_eWord (int, int);
+extern int rl_vi_fword (int, int);
+extern int rl_vi_bword (int, int);
+extern int rl_vi_eword (int, int);
 
 /* **************************************************************** */
 /*                                                                 */
@@ -293,114 +294,115 @@ extern int rl_vi_eword PARAMS((int, int));
 
 /* Readline functions. */
 /* Read a line of input.  Prompt with PROMPT.  A NULL PROMPT means none. */
-extern char *readline PARAMS((const char *));
+extern char *readline (const char *);
 
-extern int rl_set_prompt PARAMS((const char *));
-extern int rl_expand_prompt PARAMS((char *));
+extern int rl_set_prompt (const char *);
+extern int rl_expand_prompt (char *);
 
-extern int rl_initialize PARAMS((void));
+extern int rl_initialize (void);
 
 /* Undocumented; unused by readline */
-extern int rl_discard_argument PARAMS((void));
+extern int rl_discard_argument (void);
 
 /* Utility functions to bind keys to readline commands. */
-extern int rl_add_defun PARAMS((const char *, rl_command_func_t *, int));
-extern int rl_bind_key PARAMS((int, rl_command_func_t *));
-extern int rl_bind_key_in_map PARAMS((int, rl_command_func_t *, Keymap));
-extern int rl_unbind_key PARAMS((int));
-extern int rl_unbind_key_in_map PARAMS((int, Keymap));
-extern int rl_bind_key_if_unbound PARAMS((int, rl_command_func_t *));
-extern int rl_bind_key_if_unbound_in_map PARAMS((int, rl_command_func_t *, Keymap));
-extern int rl_unbind_function_in_map PARAMS((rl_command_func_t *, Keymap));
-extern int rl_unbind_command_in_map PARAMS((const char *, Keymap));
-extern int rl_bind_keyseq PARAMS((const char *, rl_command_func_t *));
-extern int rl_bind_keyseq_in_map PARAMS((const char *, rl_command_func_t *, Keymap));
-extern int rl_bind_keyseq_if_unbound PARAMS((const char *, rl_command_func_t *));
-extern int rl_bind_keyseq_if_unbound_in_map PARAMS((const char *, rl_command_func_t *, Keymap));
-extern int rl_generic_bind PARAMS((int, const char *, char *, Keymap));
-
-extern char *rl_variable_value PARAMS((const char *));
-extern int rl_variable_bind PARAMS((const char *, const char *));
+extern int rl_add_defun (const char *, rl_command_func_t *, int);
+extern int rl_bind_key (int, rl_command_func_t *);
+extern int rl_bind_key_in_map (int, rl_command_func_t *, Keymap);
+extern int rl_unbind_key (int);
+extern int rl_unbind_key_in_map (int, Keymap);
+extern int rl_bind_key_if_unbound (int, rl_command_func_t *);
+extern int rl_bind_key_if_unbound_in_map (int, rl_command_func_t *, Keymap);
+extern int rl_unbind_function_in_map (rl_command_func_t *, Keymap);
+extern int rl_unbind_command_in_map (const char *, Keymap);
+extern int rl_bind_keyseq (const char *, rl_command_func_t *);
+extern int rl_bind_keyseq_in_map (const char *, rl_command_func_t *, Keymap);
+extern int rl_bind_keyseq_if_unbound (const char *, rl_command_func_t *);
+extern int rl_bind_keyseq_if_unbound_in_map (const char *, rl_command_func_t *, Keymap);
+extern int rl_generic_bind (int, const char *, char *, Keymap);
+
+extern char *rl_variable_value (const char *);
+extern int rl_variable_bind (const char *, const char *);
 
 /* Backwards compatibility, use rl_bind_keyseq_in_map instead. */
-extern int rl_set_key PARAMS((const char *, rl_command_func_t *, Keymap));
+extern int rl_set_key (const char *, rl_command_func_t *, Keymap);
 
 /* Backwards compatibility, use rl_generic_bind instead. */
-extern int rl_macro_bind PARAMS((const char *, const char *, Keymap));
+extern int rl_macro_bind (const char *, const char *, Keymap);
 
 /* Undocumented in the texinfo manual; not really useful to programs. */
-extern int rl_translate_keyseq PARAMS((const char *, char *, int *));
-extern char *rl_untranslate_keyseq PARAMS((int));
+extern int rl_translate_keyseq (const char *, char *, int *);
+extern char *rl_untranslate_keyseq (int);
 
-extern rl_command_func_t *rl_named_function PARAMS((const char *));
-extern rl_command_func_t *rl_function_of_keyseq PARAMS((const char *, Keymap, int *));
-extern rl_command_func_t *rl_function_of_keyseq_len PARAMS((const char *, size_t, Keymap, int *));
+extern rl_command_func_t *rl_named_function (const char *);
+extern rl_command_func_t *rl_function_of_keyseq (const char *, Keymap, int *);
+extern rl_command_func_t *rl_function_of_keyseq_len (const char *, size_t, Keymap, int *);
+extern int rl_trim_arg_from_keyseq (const char *, size_t, Keymap);
 
-extern void rl_list_funmap_names PARAMS((void));
-extern char **rl_invoking_keyseqs_in_map PARAMS((rl_command_func_t *, Keymap));
-extern char **rl_invoking_keyseqs PARAMS((rl_command_func_t *));
+extern void rl_list_funmap_names (void);
+extern char **rl_invoking_keyseqs_in_map (rl_command_func_t *, Keymap);
+extern char **rl_invoking_keyseqs (rl_command_func_t *);
  
-extern void rl_function_dumper PARAMS((int));
-extern void rl_macro_dumper PARAMS((int));
-extern void rl_variable_dumper PARAMS((int));
+extern void rl_function_dumper (int);
+extern void rl_macro_dumper (int);
+extern void rl_variable_dumper (int);
 
-extern int rl_read_init_file PARAMS((const char *));
-extern int rl_parse_and_bind PARAMS((char *));
+extern int rl_read_init_file (const char *);
+extern int rl_parse_and_bind (char *);
 
 /* Functions for manipulating keymaps. */
-extern Keymap rl_make_bare_keymap PARAMS((void));
-extern int rl_empty_keymap PARAMS((Keymap));
-extern Keymap rl_copy_keymap PARAMS((Keymap));
-extern Keymap rl_make_keymap PARAMS((void));
-extern void rl_discard_keymap PARAMS((Keymap));
-extern void rl_free_keymap PARAMS((Keymap));
+extern Keymap rl_make_bare_keymap (void);
+extern int rl_empty_keymap (Keymap);
+extern Keymap rl_copy_keymap (Keymap);
+extern Keymap rl_make_keymap (void);
+extern void rl_discard_keymap (Keymap);
+extern void rl_free_keymap (Keymap);
 
-extern Keymap rl_get_keymap_by_name PARAMS((const char *));
-extern char *rl_get_keymap_name PARAMS((Keymap));
-extern void rl_set_keymap PARAMS((Keymap));
-extern Keymap rl_get_keymap PARAMS((void));
+extern Keymap rl_get_keymap_by_name (const char *);
+extern char *rl_get_keymap_name (Keymap);
+extern void rl_set_keymap (Keymap);
+extern Keymap rl_get_keymap (void);
 
-extern int rl_set_keymap_name PARAMS((const char *, Keymap));
+extern int rl_set_keymap_name (const char *, Keymap);
 
 /* Undocumented; used internally only. */
-extern void rl_set_keymap_from_edit_mode PARAMS((void));
-extern char *rl_get_keymap_name_from_edit_mode PARAMS((void));
+extern void rl_set_keymap_from_edit_mode (void);
+extern char *rl_get_keymap_name_from_edit_mode (void);
 
 /* Functions for manipulating the funmap, which maps command names to functions. */
-extern int rl_add_funmap_entry PARAMS((const char *, rl_command_func_t *));
-extern const char **rl_funmap_names PARAMS((void));
+extern int rl_add_funmap_entry (const char *, rl_command_func_t *);
+extern const char **rl_funmap_names (void);
 /* Undocumented, only used internally -- there is only one funmap, and this
    function may be called only once. */
-extern void rl_initialize_funmap PARAMS((void));
+extern void rl_initialize_funmap (void);
 
 /* Utility functions for managing keyboard macros. */
-extern void rl_push_macro_input PARAMS((char *));
+extern void rl_push_macro_input (char *);
 
 /* Functions for undoing, from undo.c */
-extern void rl_add_undo PARAMS((enum undo_code, int, int, char *));
-extern void rl_free_undo_list PARAMS((void));
-extern int rl_do_undo PARAMS((void));
-extern int rl_begin_undo_group PARAMS((void));
-extern int rl_end_undo_group PARAMS((void));
-extern int rl_modifying PARAMS((int, int));
+extern void rl_add_undo (enum undo_code, int, int, char *);
+extern void rl_free_undo_list (void);
+extern int rl_do_undo (void);
+extern int rl_begin_undo_group (void);
+extern int rl_end_undo_group (void);
+extern int rl_modifying (int, int);
 
 /* Functions for redisplay. */
-extern void rl_redisplay PARAMS((void));
-extern int rl_on_new_line PARAMS((void));
-extern int rl_on_new_line_with_prompt PARAMS((void));
-extern int rl_forced_update_display PARAMS((void));
-extern int rl_clear_visible_line PARAMS((void));
-extern int rl_clear_message PARAMS((void));
-extern int rl_reset_line_state PARAMS((void));
-extern int rl_crlf PARAMS((void));
+extern void rl_redisplay (void);
+extern int rl_on_new_line (void);
+extern int rl_on_new_line_with_prompt (void);
+extern int rl_forced_update_display (void);
+extern int rl_clear_visible_line (void);
+extern int rl_clear_message (void);
+extern int rl_reset_line_state (void);
+extern int rl_crlf (void);
 
 /* Functions to manage the mark and region, especially the notion of an
    active mark and an active region. */
-extern void rl_keep_mark_active PARAMS((void));
+extern void rl_keep_mark_active (void);
 
-extern void rl_activate_mark PARAMS((void));
-extern void rl_deactivate_mark PARAMS((void));
-extern int rl_mark_active_p PARAMS((void));
+extern void rl_activate_mark (void);
+extern void rl_deactivate_mark (void);
+extern int rl_mark_active_p (void);
 
 #if defined (USE_VARARGS) && defined (PREFER_STDARG)
 extern int rl_message (const char *, ...)  __attribute__((__format__ (printf, 1, 2)));
@@ -408,99 +410,106 @@ extern int rl_message (const char *, ...)  __attribute__((__format__ (printf, 1,
 extern int rl_message ();
 #endif
 
-extern int rl_show_char PARAMS((int));
+extern int rl_show_char (int);
 
 /* Undocumented in texinfo manual. */
-extern int rl_character_len PARAMS((int, int));
-extern void rl_redraw_prompt_last_line PARAMS((void));
+extern int rl_character_len (int, int);
+extern void rl_redraw_prompt_last_line (void);
 
 /* Save and restore internal prompt redisplay information. */
-extern void rl_save_prompt PARAMS((void));
-extern void rl_restore_prompt PARAMS((void));
+extern void rl_save_prompt (void);
+extern void rl_restore_prompt (void);
 
 /* Modifying text. */
-extern void rl_replace_line PARAMS((const char *, int));
-extern int rl_insert_text PARAMS((const char *));
-extern int rl_delete_text PARAMS((int, int));
-extern int rl_kill_text PARAMS((int, int));
-extern char *rl_copy_text PARAMS((int, int));
+extern void rl_replace_line (const char *, int);
+extern int rl_insert_text (const char *);
+extern int rl_delete_text (int, int);
+extern int rl_kill_text (int, int);
+extern char *rl_copy_text (int, int);
 
 /* Terminal and tty mode management. */
-extern void rl_prep_terminal PARAMS((int));
-extern void rl_deprep_terminal PARAMS((void));
-extern void rl_tty_set_default_bindings PARAMS((Keymap));
-extern void rl_tty_unset_default_bindings PARAMS((Keymap));
+extern void rl_prep_terminal (int);
+extern void rl_deprep_terminal (void);
+extern void rl_tty_set_default_bindings (Keymap);
+extern void rl_tty_unset_default_bindings (Keymap);
 
-extern int rl_tty_set_echoing PARAMS((int));
-extern int rl_reset_terminal PARAMS((const char *));
-extern void rl_resize_terminal PARAMS((void));
-extern void rl_set_screen_size PARAMS((int, int));
-extern void rl_get_screen_size PARAMS((int *, int *));
-extern void rl_reset_screen_size PARAMS((void));
+extern int rl_tty_set_echoing (int);
+extern int rl_reset_terminal (const char *);
+extern void rl_resize_terminal (void);
+extern void rl_set_screen_size (int, int);
+extern void rl_get_screen_size (int *, int *);
+extern void rl_reset_screen_size (void);
 
-extern char *rl_get_termcap PARAMS((const char *));
+extern char *rl_get_termcap (const char *);
 
 /* Functions for character input. */
-extern int rl_stuff_char PARAMS((int));
-extern int rl_execute_next PARAMS((int));
-extern int rl_clear_pending_input PARAMS((void));
-extern int rl_read_key PARAMS((void));
-extern int rl_getc PARAMS((FILE *));
-extern int rl_set_keyboard_input_timeout PARAMS((int));
+extern int rl_stuff_char (int);
+extern int rl_execute_next (int);
+extern int rl_clear_pending_input (void);
+extern int rl_read_key (void);
+extern int rl_getc (FILE *);
+extern int rl_set_keyboard_input_timeout (int);
+
+/* Functions to set and reset timeouts. */
+extern int rl_set_timeout (unsigned int, unsigned int);
+extern int rl_timeout_remaining (unsigned int *, unsigned int *);
+
+#undef rl_clear_timeout
+#define rl_clear_timeout() rl_set_timeout (0, 0)
 
 /* `Public' utility functions . */
-extern void rl_extend_line_buffer PARAMS((int));
-extern int rl_ding PARAMS((void));
-extern int rl_alphabetic PARAMS((int));
-extern void rl_free PARAMS((void *));
+extern void rl_extend_line_buffer (int);
+extern int rl_ding (void);
+extern int rl_alphabetic (int);
+extern void rl_free (void *);
 
 /* Readline signal handling, from signals.c */
-extern int rl_set_signals PARAMS((void));
-extern int rl_clear_signals PARAMS((void));
-extern void rl_cleanup_after_signal PARAMS((void));
-extern void rl_reset_after_signal PARAMS((void));
-extern void rl_free_line_state PARAMS((void));
+extern int rl_set_signals (void);
+extern int rl_clear_signals (void);
+extern void rl_cleanup_after_signal (void);
+extern void rl_reset_after_signal (void);
+extern void rl_free_line_state (void);
 
-extern int rl_pending_signal PARAMS((void));
-extern void rl_check_signals PARAMS((void));
+extern int rl_pending_signal (void);
+extern void rl_check_signals (void);
 
-extern void rl_echo_signal_char PARAMS((int)); 
+extern void rl_echo_signal_char (int); 
 
-extern int rl_set_paren_blink_timeout PARAMS((int));
+extern int rl_set_paren_blink_timeout (int);
 
 /* History management functions. */
 
-extern void rl_clear_history PARAMS((void));
+extern void rl_clear_history (void);
 
 /* Undocumented. */
-extern int rl_maybe_save_line PARAMS((void));
-extern int rl_maybe_unsave_line PARAMS((void));
-extern int rl_maybe_replace_line PARAMS((void));
+extern int rl_maybe_save_line (void);
+extern int rl_maybe_unsave_line (void);
+extern int rl_maybe_replace_line (void);
 
 /* Completion functions. */
-extern int rl_complete_internal PARAMS((int));
-extern void rl_display_match_list PARAMS((char **, int, int));
+extern int rl_complete_internal (int);
+extern void rl_display_match_list (char **, int, int);
 
-extern char **rl_completion_matches PARAMS((const char *, rl_compentry_func_t *));
-extern char *rl_username_completion_function PARAMS((const char *, int));
-extern char *rl_filename_completion_function PARAMS((const char *, int));
+extern char **rl_completion_matches (const char *, rl_compentry_func_t *);
+extern char *rl_username_completion_function (const char *, int);
+extern char *rl_filename_completion_function (const char *, int);
 
-extern int rl_completion_mode PARAMS((rl_command_func_t *));
+extern int rl_completion_mode (rl_command_func_t *);
 
 #if 0
 /* Backwards compatibility (compat.c).  These will go away sometime. */
-extern void free_undo_list PARAMS((void));
-extern int maybe_save_line PARAMS((void));
-extern int maybe_unsave_line PARAMS((void));
-extern int maybe_replace_line PARAMS((void));
-
-extern int ding PARAMS((void));
-extern int alphabetic PARAMS((int));
-extern int crlf PARAMS((void));
-
-extern char **completion_matches PARAMS((char *, rl_compentry_func_t *));
-extern char *username_completion_function PARAMS((const char *, int));
-extern char *filename_completion_function PARAMS((const char *, int));
+extern void free_undo_list (void);
+extern int maybe_save_line (void);
+extern int maybe_unsave_line (void);
+extern int maybe_replace_line (void);
+
+extern int ding (void);
+extern int alphabetic (int);
+extern int crlf (void);
+
+extern char **completion_matches (char *, rl_compentry_func_t *);
+extern char *username_completion_function (const char *, int);
+extern char *filename_completion_function (const char *, int);
 #endif
 
 /* **************************************************************** */
@@ -553,6 +562,10 @@ extern int rl_mark;
    line and should return it. */
 extern int rl_done;
 
+/* Flag to indicate that readline has read an EOF character or read has
+   returned 0 or error, and is returning a NULL line as a result. */
+extern int rl_eof_found;
+
 /* If set to a character value, that will be the next keystroke read. */
 extern int rl_pending_input;
 
@@ -599,6 +612,8 @@ extern rl_hook_func_t *rl_event_hook;
 /* The address of a function to call if a read is interrupted by a signal. */
 extern rl_hook_func_t *rl_signal_event_hook;
 
+extern rl_hook_func_t *rl_timeout_event_hook;
+
 /* The address of a function to call if Readline needs to know whether or not
    there is data available from the current input source. */
 extern rl_hook_func_t *rl_input_available_hook;
@@ -689,7 +704,7 @@ extern const char *rl_basic_word_break_characters;
 /* The list of characters that signal a break between words for
    rl_complete_internal.  The default list is the contents of
    rl_basic_word_break_characters.  */
-extern /*const*/ char *rl_completer_word_break_characters;
+extern const char *rl_completer_word_break_characters;
 
 /* Hook function to allow an application to set the completion word
    break characters before readline breaks up the line.  Allows
@@ -906,6 +921,8 @@ extern int rl_persistent_signal_handlers;
 #define RL_STATE_REDISPLAYING  0x1000000       /* updating terminal display */
 
 #define RL_STATE_DONE          0x2000000       /* done; accepted line */
+#define RL_STATE_TIMEOUT       0x4000000       /* done; timed out */
+#define RL_STATE_EOF           0x8000000       /* done; got eof on read */
 
 #define RL_SETSTATE(x)         (rl_readline_state |= (x))
 #define RL_UNSETSTATE(x)       (rl_readline_state &= ~(x))
@@ -949,7 +966,7 @@ struct readline_state {
   rl_compentry_func_t *menuentryfunc;
   rl_compignore_func_t *ignorefunc;
   rl_completion_func_t *attemptfunc;
-  char *wordbreakchars;
+  const char *wordbreakchars;
 
   /* options state */
 
@@ -959,8 +976,8 @@ struct readline_state {
   char reserved[64];
 };
 
-extern int rl_save_state PARAMS((struct readline_state *));
-extern int rl_restore_state PARAMS((struct readline_state *));
+extern int rl_save_state (struct readline_state *);
+extern int rl_restore_state (struct readline_state *);
 
 #ifdef __cplusplus
 }
index dab1beba1d72fbc6288f361b8c59fe2e3c78582e..98577a64b98d6c5997775874d7e1d75835862439 100644 (file)
@@ -2,7 +2,7 @@
    for readline.  This should be included after any files that define
    system-specific constants like _POSIX_VERSION or USG. */
 
-/* Copyright (C) 1987-2011 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2021 Free Software Foundation, Inc.
 
    This file is part of the GNU Readline Library (Readline), a library
    for reading lines of text with interactive input and history editing.      
@@ -79,14 +79,14 @@ extern char *strchr (), *strrchr ();
 #define _rl_stricmp strcasecmp
 #define _rl_strnicmp strncasecmp
 #else
-extern int _rl_stricmp PARAMS((const char *, const char *));
-extern int _rl_strnicmp PARAMS((const char *, const char *, int));
+extern int _rl_stricmp (const char *, const char *);
+extern int _rl_strnicmp (const char *, const char *, int);
 #endif
 
 #if defined (HAVE_STRPBRK) && !defined (HAVE_MULTIBYTE)
 #  define _rl_strpbrk(a,b)     strpbrk((a),(b))
 #else
-extern char *_rl_strpbrk PARAMS((const char *, const char *));
+extern char *_rl_strpbrk (const char *, const char *);
 #endif
 
 #if !defined (emacs_mode)
index 4d3e90706a2534e3d8cb524b99ff78ebe9cf96aa..d9060572e5821f6811d1482b741b8490357c85cb 100644 (file)
@@ -1,6 +1,6 @@
 /* rlmbutil.h -- utility functions for multibyte characters. */
 
-/* Copyright (C) 2001-2015 Free Software Foundation, Inc.
+/* Copyright (C) 2001-2021 Free Software Foundation, Inc.
 
    This file is part of the GNU Readline Library (Readline), a library
    for reading lines of text with interactive input and history editing.      
 /* end of multibyte capability checks for I18N  */
 /************************************************/
 
+/*
+ * wchar_t doesn't work for 32-bit values on Windows using MSVC
+ */
+#ifdef WCHAR_T_BROKEN
+#  define WCHAR_T char32_t
+#  define MBRTOWC mbrtoc32
+#  define WCRTOMB c32rtomb
+#else  /* normal systems */
+#  define WCHAR_T wchar_t
+#  define MBRTOWC mbrtowc
+#  define WCRTOMB wcrtomb
+#endif
+
 /*
  * Flags for _rl_find_prev_mbchar and _rl_find_next_mbchar:
  *
 #define MB_FIND_ANY    0x00
 #define MB_FIND_NONZERO        0x01
 
-extern int _rl_find_prev_mbchar PARAMS((char *, int, int));
-extern int _rl_find_next_mbchar PARAMS((char *, int, int, int));
+extern int _rl_find_prev_mbchar (char *, int, int);
+extern int _rl_find_next_mbchar (char *, int, int, int);
 
 #ifdef HANDLE_MULTIBYTE
 
-extern int _rl_compare_chars PARAMS((char *, int, mbstate_t *, char *, int, mbstate_t *));
-extern int _rl_get_char_len PARAMS((char *, mbstate_t *));
-extern int _rl_adjust_point PARAMS((char *, int, mbstate_t *));
+extern int _rl_compare_chars (char *, int, mbstate_t *, char *, int, mbstate_t *);
+extern int _rl_get_char_len (char *, mbstate_t *);
+extern int _rl_adjust_point (char *, int, mbstate_t *);
 
-extern int _rl_read_mbchar PARAMS((char *, int));
-extern int _rl_read_mbstring PARAMS((int, char *, int));
+extern int _rl_read_mbchar (char *, int);
+extern int _rl_read_mbstring (int, char *, int);
 
-extern int _rl_is_mbchar_matched PARAMS((char *, int, int, char *, int));
+extern int _rl_is_mbchar_matched (char *, int, int, char *, int);
 
-extern wchar_t _rl_char_value PARAMS((char *, int));
-extern int _rl_walphabetic PARAMS((wchar_t));
+extern WCHAR_T _rl_char_value (char *, int);
+extern int _rl_walphabetic (WCHAR_T);
 
 #define _rl_to_wupper(wc)      (iswlower (wc) ? towupper (wc) : (wc))
 #define _rl_to_wlower(wc)      (iswupper (wc) ? towlower (wc) : (wc))
@@ -126,8 +139,7 @@ extern int _rl_walphabetic PARAMS((wchar_t));
 /* Try and shortcut the printable ascii characters to cut down the number of
    calls to a libc wcwidth() */
 static inline int
-_rl_wcwidth (wc)
-     wchar_t wc;
+_rl_wcwidth (WCHAR_T wc)
 {
   switch (wc)
     {
index 23ab2d8cec0d02d1b862ae707ec4ff3c03d9f1d2..d87d07a72ee19c06b24338ac2f7c4ab80eb83870 100644 (file)
@@ -1,10 +1,10 @@
 /* rlprivate.h -- functions and variables global to the readline library,
                  but not intended for use by applications. */
 
-/* Copyright (C) 1999-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1999-2022 Free Software Foundation, Inc.
 
    This file is part of the GNU Readline Library (Readline), a library
-   for reading lines of text with interactive input and history editing.      
+   for reading lines of text with interactive input and history editing.
 
    Readline is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -78,7 +78,7 @@ typedef struct  __rl_search_context
   int search_string_size;
 
   char **lines;
-  char *allocated_line;    
+  char *allocated_line;
   int hlen;
   int hindex;
 
@@ -169,16 +169,16 @@ typedef struct __rl_vimotion_context
 
 /* fill in more as needed */
 /* `Generic' callback data and functions */
-typedef struct __rl_callback_generic_arg 
+typedef struct __rl_callback_generic_arg
 {
   int count;
   int i1, i2;
   /* add here as needed */
 } _rl_callback_generic_arg;
 
-typedef int _rl_callback_func_t PARAMS((_rl_callback_generic_arg *));
+typedef int _rl_callback_func_t (_rl_callback_generic_arg *);
 
-typedef void _rl_sigcleanup_func_t PARAMS((int, void *));
+typedef void _rl_sigcleanup_func_t (int, void *);
 
 /*************************************************************************
  *                                                                      *
@@ -221,16 +221,16 @@ extern int rl_blink_matching_paren;
  *************************************************************************/
 
 /* kill.c */
-extern int rl_set_retained_kills PARAMS((int));
+extern int rl_set_retained_kills (int);
 
 /* terminal.c */
-extern void _rl_set_screen_size PARAMS((int, int));
+extern void _rl_set_screen_size (int, int);
 
 /* undo.c */
-extern int _rl_fix_last_undo_of_type PARAMS((int, int, int));
+extern int _rl_fix_last_undo_of_type (int, int, int);
 
 /* util.c */
-extern char *_rl_savestring PARAMS((const char *));
+extern char *_rl_savestring (const char *);
 
 /*************************************************************************
  *                                                                      *
@@ -250,66 +250,73 @@ extern char *_rl_savestring PARAMS((const char *));
 #if defined(READLINE_CALLBACKS)
 
 /* readline.c */
-extern void readline_internal_setup PARAMS((void));
-extern char *readline_internal_teardown PARAMS((int));
-extern int readline_internal_char PARAMS((void));
+extern void readline_internal_setup (void);
+extern char *readline_internal_teardown (int);
+extern int readline_internal_char (void);
 
-extern _rl_keyseq_cxt *_rl_keyseq_cxt_alloc PARAMS((void));
-extern void _rl_keyseq_cxt_dispose PARAMS((_rl_keyseq_cxt *));
-extern void _rl_keyseq_chain_dispose PARAMS((void));
+extern _rl_keyseq_cxt *_rl_keyseq_cxt_alloc (void);
+extern void _rl_keyseq_cxt_dispose (_rl_keyseq_cxt *);
+extern void _rl_keyseq_chain_dispose (void);
+
+extern int _rl_dispatch_callback (_rl_keyseq_cxt *);
 
-extern int _rl_dispatch_callback PARAMS((_rl_keyseq_cxt *));
-     
 /* callback.c */
-extern _rl_callback_generic_arg *_rl_callback_data_alloc PARAMS((int));
-extern void _rl_callback_data_dispose PARAMS((_rl_callback_generic_arg *));
+extern _rl_callback_generic_arg *_rl_callback_data_alloc (int);
+extern void _rl_callback_data_dispose (_rl_callback_generic_arg *);
 
 #endif /* READLINE_CALLBACKS */
 
 /* bind.c */
-extern char *_rl_untranslate_macro_value PARAMS((char *, int));
+extern char *_rl_untranslate_macro_value (char *, int);
 
 /* complete.c */
-extern void _rl_reset_completion_state PARAMS((void));
-extern char _rl_find_completion_word PARAMS((int *, int *));
-extern void _rl_free_match_list PARAMS((char **));
+extern void _rl_reset_completion_state (void);
+extern char _rl_find_completion_word (int *, int *);
+extern void _rl_free_match_list (char **);
 
 /* display.c */
-extern char *_rl_strip_prompt PARAMS((char *));
-extern void _rl_reset_prompt PARAMS((void));
-extern void _rl_move_vert PARAMS((int));
-extern void _rl_save_prompt PARAMS((void));
-extern void _rl_restore_prompt PARAMS((void));
-extern char *_rl_make_prompt_for_search PARAMS((int));
-extern void _rl_erase_at_end_of_line PARAMS((int));
-extern void _rl_clear_to_eol PARAMS((int));
-extern void _rl_clear_screen PARAMS((int));
-extern void _rl_update_final PARAMS((void));
-extern void _rl_optimize_redisplay PARAMS((void));
-extern void _rl_redisplay_after_sigwinch PARAMS((void));
-extern void _rl_clean_up_for_exit PARAMS((void));
-extern void _rl_erase_entire_line PARAMS((void));
-extern int _rl_current_display_line PARAMS((void));
-extern void _rl_refresh_line PARAMS((void));
+extern char *_rl_strip_prompt (char *);
+extern void _rl_reset_prompt (void);
+extern void _rl_move_vert (int);
+extern void _rl_save_prompt (void);
+extern void _rl_restore_prompt (void);
+extern char *_rl_make_prompt_for_search (int);
+extern void _rl_erase_at_end_of_line (int);
+extern void _rl_clear_to_eol (int);
+extern void _rl_clear_screen (int);
+extern void _rl_update_final (void);
+extern void _rl_optimize_redisplay (void);
+extern void _rl_redisplay_after_sigwinch (void);
+extern void _rl_clean_up_for_exit (void);
+extern void _rl_erase_entire_line (void);
+extern int _rl_current_display_line (void);
+extern void _rl_refresh_line (void);
 
 /* input.c */
-extern int _rl_any_typein PARAMS((void));
-extern int _rl_input_available PARAMS((void));
-extern int _rl_nchars_available PARAMS((void));
-extern int _rl_input_queued PARAMS((int));
-extern void _rl_insert_typein PARAMS((int));
-extern int _rl_unget_char PARAMS((int));
-extern int _rl_pushed_input_available PARAMS((void));
+extern int _rl_any_typein (void);
+extern int _rl_input_available (void);
+extern int _rl_nchars_available (void);
+extern int _rl_input_queued (int);
+extern void _rl_insert_typein (int);
+extern int _rl_unget_char (int);
+extern int _rl_pushed_input_available (void);
+
+extern int _rl_timeout_init (void);
+extern int _rl_timeout_handle_sigalrm (void);
+#if defined (_POSIXSELECT_H_)
+/* use as a sentinel for fd_set, struct timeval,  and sigset_t definitions */
+extern int _rl_timeout_select (int, fd_set *, fd_set *, fd_set *, const struct timeval *, const sigset_t *);
+#endif
 
 /* isearch.c */
-extern _rl_search_cxt *_rl_scxt_alloc PARAMS((int, int));
-extern void _rl_scxt_dispose PARAMS((_rl_search_cxt *, int));
+extern _rl_search_cxt *_rl_scxt_alloc (int, int);
+extern void _rl_scxt_dispose (_rl_search_cxt *, int);
 
-extern int _rl_isearch_dispatch PARAMS((_rl_search_cxt *, int));
-extern int _rl_isearch_callback PARAMS((_rl_search_cxt *));
-extern int _rl_isearch_cleanup PARAMS((_rl_search_cxt *, int));
+extern int _rl_isearch_dispatch (_rl_search_cxt *, int);
+extern int _rl_isearch_callback (_rl_search_cxt *);
+extern int _rl_isearch_cleanup (_rl_search_cxt *, int);
 
-extern int _rl_search_getchar PARAMS((_rl_search_cxt *));
+extern int _rl_search_getchar (_rl_search_cxt *);
 
 /* kill.c */
 #ifndef BRACKETED_PASTE_DEFAULT
@@ -325,110 +332,117 @@ extern int _rl_search_getchar PARAMS((_rl_search_cxt *));
 #define BRACK_PASTE_INIT       "\033[?2004h"
 #define BRACK_PASTE_FINI       "\033[?2004l\r"
 
-extern int _rl_read_bracketed_paste_prefix PARAMS((int));
-extern char *_rl_bracketed_text PARAMS((size_t *));
-extern int _rl_bracketed_read_key PARAMS((void));
-extern int _rl_bracketed_read_mbstring PARAMS((char *, int));
+extern int _rl_read_bracketed_paste_prefix (int);
+extern char *_rl_bracketed_text (size_t *);
+extern int _rl_bracketed_read_key (void);
+extern int _rl_bracketed_read_mbstring (char *, int);
 
 /* macro.c */
-extern void _rl_with_macro_input PARAMS((char *));
-extern int _rl_peek_macro_key PARAMS((void));
-extern int _rl_next_macro_key PARAMS((void));
-extern int _rl_prev_macro_key PARAMS((void));
-extern void _rl_push_executing_macro PARAMS((void));
-extern void _rl_pop_executing_macro PARAMS((void));
-extern void _rl_add_macro_char PARAMS((int));
-extern void _rl_kill_kbd_macro PARAMS((void));
+extern void _rl_with_macro_input (char *);
+extern int _rl_peek_macro_key (void);
+extern int _rl_next_macro_key (void);
+extern int _rl_prev_macro_key (void);
+extern void _rl_push_executing_macro (void);
+extern void _rl_pop_executing_macro (void);
+extern void _rl_add_macro_char (int);
+extern void _rl_kill_kbd_macro (void);
 
 /* misc.c */
-extern int _rl_arg_overflow PARAMS((void));
-extern void _rl_arg_init PARAMS((void));
-extern int _rl_arg_getchar PARAMS((void));
-extern int _rl_arg_callback PARAMS((_rl_arg_cxt));
-extern void _rl_reset_argument PARAMS((void));
+extern int _rl_arg_overflow (void);
+extern void _rl_arg_init (void);
+extern int _rl_arg_getchar (void);
+extern int _rl_arg_callback (_rl_arg_cxt);
+extern void _rl_reset_argument (void);
 
-extern void _rl_start_using_history PARAMS((void));
-extern int _rl_free_saved_history_line PARAMS((void));
-extern void _rl_set_insert_mode PARAMS((int, int));
+extern void _rl_start_using_history (void);
+extern int _rl_free_saved_history_line (void);
+extern void _rl_set_insert_mode (int, int);
 
-extern void _rl_revert_previous_lines PARAMS((void));
-extern void _rl_revert_all_lines PARAMS((void));
+extern void _rl_revert_previous_lines (void);
+extern void _rl_revert_all_lines (void);
 
 /* nls.c */
-extern char *_rl_init_locale PARAMS((void));
-extern int _rl_init_eightbit PARAMS((void));
+extern char *_rl_init_locale (void);
+extern int _rl_init_eightbit (void);
+extern void _rl_reset_locale (void);
 
 /* parens.c */
-extern void _rl_enable_paren_matching PARAMS((int));
+extern void _rl_enable_paren_matching (int);
 
 /* readline.c */
-extern void _rl_init_line_state PARAMS((void));
-extern void _rl_set_the_line PARAMS((void));
-extern int _rl_dispatch PARAMS((int, Keymap));
-extern int _rl_dispatch_subseq PARAMS((int, Keymap, int));
-extern void _rl_internal_char_cleanup PARAMS((void));
+extern void _rl_init_line_state (void);
+extern void _rl_set_the_line (void);
+extern int _rl_dispatch (int, Keymap);
+extern int _rl_dispatch_subseq (int, Keymap, int);
+extern void _rl_internal_char_cleanup (void);
+
+extern void _rl_init_executing_keyseq (void);
+extern void _rl_term_executing_keyseq (void);
+extern void _rl_end_executing_keyseq (void);
+extern void _rl_add_executing_keyseq (int);
+extern void _rl_del_executing_keyseq (void);
 
-extern void _rl_init_executing_keyseq PARAMS((void));
-extern void _rl_term_executing_keyseq PARAMS((void));
-extern void _rl_end_executing_keyseq PARAMS((void));
-extern void _rl_add_executing_keyseq PARAMS((int)); 
+extern rl_command_func_t *_rl_executing_func;
 
 /* rltty.c */
-extern int _rl_disable_tty_signals PARAMS((void));
-extern int _rl_restore_tty_signals PARAMS((void));
+extern int _rl_disable_tty_signals (void);
+extern int _rl_restore_tty_signals (void);
 
 /* search.c */
-extern int _rl_nsearch_callback PARAMS((_rl_search_cxt *));
-extern int _rl_nsearch_cleanup PARAMS((_rl_search_cxt *, int));
+extern int _rl_nsearch_callback (_rl_search_cxt *);
+extern int _rl_nsearch_cleanup (_rl_search_cxt *, int);
 
 /* signals.c */
-extern void _rl_signal_handler PARAMS((int));
+extern void _rl_signal_handler (int);
 
-extern void _rl_block_sigint PARAMS((void));
-extern void _rl_release_sigint PARAMS((void));
-extern void _rl_block_sigwinch PARAMS((void));
-extern void _rl_release_sigwinch PARAMS((void));
+extern void _rl_block_sigint (void);
+extern void _rl_release_sigint (void);
+extern void _rl_block_sigwinch (void);
+extern void _rl_release_sigwinch (void);
 
 /* terminal.c */
-extern void _rl_get_screen_size PARAMS((int, int));
-extern void _rl_sigwinch_resize_terminal PARAMS((void));
-extern int _rl_init_terminal_io PARAMS((const char *));
+extern void _rl_get_screen_size (int, int);
+extern void _rl_sigwinch_resize_terminal (void);
+extern int _rl_init_terminal_io (const char *);
 #ifdef _MINIX
-extern void _rl_output_character_function PARAMS((int));
+extern void _rl_output_character_function (int);
 #else
-extern int _rl_output_character_function PARAMS((int));
+extern int _rl_output_character_function (int);
 #endif
-extern void _rl_cr PARAMS((void));
-extern void _rl_output_some_chars PARAMS((const char *, int));
-extern int _rl_backspace PARAMS((int));
-extern void _rl_enable_meta_key PARAMS((void));
-extern void _rl_disable_meta_key PARAMS((void));
-extern void _rl_control_keypad PARAMS((int));
-extern void _rl_set_cursor PARAMS((int, int));
-extern void _rl_standout_on PARAMS((void));
-extern void _rl_standout_off PARAMS((void));
+extern void _rl_cr (void);
+extern void _rl_output_some_chars (const char *, int);
+extern int _rl_backspace (int);
+extern void _rl_enable_meta_key (void);
+extern void _rl_disable_meta_key (void);
+extern void _rl_control_keypad (int);
+extern void _rl_set_cursor (int, int);
+extern void _rl_standout_on (void);
+extern void _rl_standout_off (void);
+extern int _rl_reset_region_color (int, const char *);
+extern void _rl_region_color_on (void);
+extern void _rl_region_color_off (void);
 
 /* text.c */
-extern void _rl_fix_point PARAMS((int));
-extern void _rl_fix_mark PARAMS((void));
-extern int _rl_replace_text PARAMS((const char *, int, int));
-extern int _rl_forward_char_internal PARAMS((int));
-extern int _rl_backward_char_internal PARAMS((int));
-extern int _rl_insert_char PARAMS((int, int));
-extern int _rl_overwrite_char PARAMS((int, int));
-extern int _rl_overwrite_rubout PARAMS((int, int));
-extern int _rl_rubout_char PARAMS((int, int));
+extern void _rl_fix_point (int);
+extern void _rl_fix_mark (void);
+extern int _rl_replace_text (const char *, int, int);
+extern int _rl_forward_char_internal (int);
+extern int _rl_backward_char_internal (int);
+extern int _rl_insert_char (int, int);
+extern int _rl_overwrite_char (int, int);
+extern int _rl_overwrite_rubout (int, int);
+extern int _rl_rubout_char (int, int);
 #if defined (HANDLE_MULTIBYTE)
-extern int _rl_char_search_internal PARAMS((int, int, char *, int));
+extern int _rl_char_search_internal (int, int, char *, int);
 #else
-extern int _rl_char_search_internal PARAMS((int, int, int));
+extern int _rl_char_search_internal (int, int, int);
 #endif
-extern int _rl_set_mark_at_pos PARAMS((int));
+extern int _rl_set_mark_at_pos (int);
 
 /* undo.c */
-extern UNDO_LIST *_rl_copy_undo_entry PARAMS((UNDO_LIST *));
-extern UNDO_LIST *_rl_copy_undo_list PARAMS((UNDO_LIST *));
-extern void _rl_free_undo_list PARAMS((UNDO_LIST *));
+extern UNDO_LIST *_rl_copy_undo_entry (UNDO_LIST *);
+extern UNDO_LIST *_rl_copy_undo_list (UNDO_LIST *);
+extern void _rl_free_undo_list (UNDO_LIST *);
 
 /* util.c */
 #if defined (USE_VARARGS) && defined (PREFER_STDARG)
@@ -440,31 +454,37 @@ extern void _rl_ttymsg ();
 extern void _rl_errmsg ();
 extern void _rl_trace ();
 #endif
-extern void _rl_audit_tty PARAMS((char *));
-
-extern int _rl_tropen PARAMS((void));
-
-extern int _rl_abort_internal PARAMS((void));
-extern int _rl_null_function PARAMS((int, int));
-extern char *_rl_strindex PARAMS((const char *, const char *));
-extern int _rl_qsort_string_compare PARAMS((char **, char **));
-extern int (_rl_uppercase_p) PARAMS((int));
-extern int (_rl_lowercase_p) PARAMS((int));
-extern int (_rl_pure_alphabetic) PARAMS((int));
-extern int (_rl_digit_p) PARAMS((int));
-extern int (_rl_to_lower) PARAMS((int));
-extern int (_rl_to_upper) PARAMS((int));
-extern int (_rl_digit_value) PARAMS((int));
+extern void _rl_audit_tty (char *);
+
+extern int _rl_tropen (void);
+
+extern int _rl_abort_internal (void);
+extern int _rl_null_function (int, int);
+extern char *_rl_strindex (const char *, const char *);
+extern int _rl_qsort_string_compare (char **, char **);
+extern int (_rl_uppercase_p) (int);
+extern int (_rl_lowercase_p) (int);
+extern int (_rl_pure_alphabetic) (int);
+extern int (_rl_digit_p) (int);
+extern int (_rl_to_lower) (int);
+extern int (_rl_to_upper) (int);
+extern int (_rl_digit_value) (int);
 
 /* vi_mode.c */
-extern void _rl_vi_initialize_line PARAMS((void));
-extern void _rl_vi_reset_last PARAMS((void));
-extern void _rl_vi_set_last PARAMS((int, int, int));
-extern int _rl_vi_textmod_command PARAMS((int));
-extern int _rl_vi_motion_command PARAMS((int));
-extern void _rl_vi_done_inserting PARAMS((void));
-extern int _rl_vi_domove_callback PARAMS((_rl_vimotion_cxt *));
-extern int _rl_vi_domove_motion_cleanup PARAMS((int, _rl_vimotion_cxt *));
+extern void _rl_vi_initialize_line (void);
+extern void _rl_vi_reset_last (void);
+extern void _rl_vi_set_last (int, int, int);
+extern int _rl_vi_textmod_command (int);
+extern int _rl_vi_motion_command (int);
+extern void _rl_vi_done_inserting (void);
+extern int _rl_vi_domove_callback (_rl_vimotion_cxt *);
+extern int _rl_vi_domove_motion_cleanup (int, _rl_vimotion_cxt *);
+
+/* Use HS_HISTORY_VERSION as the sentinel to see if we've included history.h
+   and so can use HIST_ENTRY */
+#if defined (HS_HISTORY_VERSION)
+extern void _rl_free_history_entry (HIST_ENTRY *);
+#endif
 
 /*************************************************************************
  * Undocumented private variables                                       *
@@ -537,6 +557,8 @@ extern int _rl_echo_control_chars;
 extern int _rl_show_mode_in_prompt;
 extern int _rl_enable_bracketed_paste;
 extern int _rl_enable_active_region;
+extern char *_rl_active_region_start_color;
+extern char *_rl_active_region_end_color;
 extern char *_rl_comment_begin;
 extern unsigned char _rl_parsing_conditionalized_out;
 extern Keymap _rl_keymap;
@@ -544,7 +566,6 @@ extern FILE *_rl_in_stream;
 extern FILE *_rl_out_stream;
 extern int _rl_last_command_was_kill;
 extern int _rl_eof_char;
-extern int _rl_eof_found;
 extern procenv_t _rl_top_level;
 extern _rl_keyseq_cxt *_rl_kscxt;
 extern int _rl_keyseq_timeout;
@@ -555,6 +576,7 @@ extern rl_hook_func_t *_rl_internal_startup_hook;
 
 /* search.c */
 extern _rl_search_cxt *_rl_nscxt;
+extern int _rl_history_search_pos;
 
 /* signals.c */
 extern int volatile _rl_caught_signal;
@@ -602,4 +624,10 @@ extern int _rl_vi_last_command;
 extern int _rl_vi_redoing;
 extern _rl_vimotion_cxt *_rl_vimvcxt;
 
+/* Use HS_HISTORY_VERSION as the sentinel to see if we've included history.h
+   and so can use HIST_ENTRY */
+#if defined (HS_HISTORY_VERSION)
+extern HIST_ENTRY *_rl_saved_line_for_history;
+#endif
+
 #endif /* _RL_PRIVATE_H_ */
index 3e17d8bc7f1ff78494979eb77fd1772a881bfc1e..6055b1442ff9a1712c8501784c1df30ad067cf0f 100644 (file)
@@ -1,6 +1,6 @@
 /* rlshell.h -- utility functions normally provided by bash. */
 
-/* Copyright (C) 1999-2009 Free Software Foundation, Inc.
+/* Copyright (C) 1999-2021 Free Software Foundation, Inc.
 
    This file is part of the GNU Readline Library (Readline), a library
    for reading lines of text with interactive input and history editing.      
 
 #include "rlstdc.h"
 
-extern char *sh_single_quote PARAMS((char *));
-extern void sh_set_lines_and_columns PARAMS((int, int));
-extern char *sh_get_env_value PARAMS((const char *));
-extern char *sh_get_home_dir PARAMS((void));
-extern int sh_unset_nodelay_mode PARAMS((int));
+extern char *sh_single_quote (char *);
+extern void sh_set_lines_and_columns (int, int);
+extern char *sh_get_env_value (const char *);
+extern char *sh_get_home_dir (void);
+extern int sh_unset_nodelay_mode (int);
 
 #endif /* _RL_SHELL_H_ */
index d0cd572713a9bea108e0a8bd58fbb9e7582aa3a7..882a3d46b1347f24471c0ccb5708ff7fb662f776 100644 (file)
@@ -1,7 +1,7 @@
 /* rltty.c -- functions to prepare and restore the terminal for readline's
    use. */
 
-/* Copyright (C) 1992-2017 Free Software Foundation, Inc.
+/* Copyright (C) 1992-2022 Free Software Foundation, Inc.
 
    This file is part of the GNU Readline Library (Readline), a library
    for reading lines of text with interactive input and history editing.
@@ -52,7 +52,7 @@ extern int errno;
 rl_vintfunc_t *rl_prep_term_function = rl_prep_terminal;
 rl_voidfunc_t *rl_deprep_term_function = rl_deprep_terminal;
 
-static void set_winsize PARAMS((int));
+static void set_winsize (int);
 
 /* **************************************************************** */
 /*                                                                 */
@@ -119,15 +119,15 @@ struct bsdtty {
 
 static TIOTYPE otio;
 
-static void save_tty_chars PARAMS((TIOTYPE *));
-static int _get_tty_settings PARAMS((int, TIOTYPE *));
-static int get_tty_settings PARAMS((int, TIOTYPE *));
-static int _set_tty_settings PARAMS((int, TIOTYPE *));
-static int set_tty_settings PARAMS((int, TIOTYPE *));
+static void save_tty_chars (TIOTYPE *);
+static int _get_tty_settings (int, TIOTYPE *);
+static int get_tty_settings (int, TIOTYPE *);
+static int _set_tty_settings (int, TIOTYPE *);
+static int set_tty_settings (int, TIOTYPE *);
 
-static void prepare_terminal_settings PARAMS((int, TIOTYPE, TIOTYPE *));
+static void prepare_terminal_settings (int, TIOTYPE, TIOTYPE *);
 
-static void set_special_char PARAMS((Keymap, TIOTYPE *, int, rl_command_func_t *));
+static void set_special_char (Keymap, TIOTYPE *, int, rl_command_func_t *);
 
 static void
 save_tty_chars (TIOTYPE *tiop)
@@ -332,16 +332,16 @@ prepare_terminal_settings (int meta_flag, TIOTYPE oldtio, TIOTYPE *tiop)
 
 static TIOTYPE otio;
 
-static void save_tty_chars PARAMS((TIOTYPE *));
-static int _get_tty_settings PARAMS((int, TIOTYPE *));
-static int get_tty_settings PARAMS((int, TIOTYPE *));
-static int _set_tty_settings PARAMS((int, TIOTYPE *));
-static int set_tty_settings PARAMS((int, TIOTYPE *));
+static void save_tty_chars (TIOTYPE *);
+static int _get_tty_settings (int, TIOTYPE *);
+static int get_tty_settings (int, TIOTYPE *);
+static int _set_tty_settings (int, TIOTYPE *);
+static int set_tty_settings (int, TIOTYPE *);
 
-static void prepare_terminal_settings PARAMS((int, TIOTYPE, TIOTYPE *));
+static void prepare_terminal_settings (int, TIOTYPE, TIOTYPE *);
 
-static void set_special_char PARAMS((Keymap, TIOTYPE *, int, rl_command_func_t *));
-static void _rl_bind_tty_special_chars PARAMS((Keymap, TIOTYPE));
+static void set_special_char (Keymap, TIOTYPE *, int, rl_command_func_t *);
+static void _rl_bind_tty_special_chars (Keymap, TIOTYPE);
 
 #if defined (FLUSHO)
 #  define OUTPUT_BEING_FLUSHED(tp)  (tp->c_lflag & FLUSHO)
@@ -692,7 +692,11 @@ rl_deprep_terminal (void)
   if (terminal_prepped & TPX_BRACKPASTE)
     {
       fprintf (rl_outstream, BRACK_PASTE_FINI);
-      if (_rl_eof_found)
+      /* Since the last character in BRACK_PASTE_FINI is \r */
+      _rl_last_c_pos = 0;
+      if (rl_eof_found && (RL_ISSTATE (RL_STATE_TIMEOUT) == 0))
+       fprintf (rl_outstream, "\n");
+      else if (_rl_echoing_p == 0)
        fprintf (rl_outstream, "\n");
     }
 
index f9f5cd3a5b64d8b1a64c6eeaf6c17ddba1f7e6ff..163654921e61e1f8c16b864e3fcab4ea177c153e 100644 (file)
@@ -1,6 +1,6 @@
 /* rltypedefs.h -- Type declarations for readline functions. */
 
-/* Copyright (C) 2000-2011 Free Software Foundation, Inc.
+/* Copyright (C) 2000-2021 Free Software Foundation, Inc.
 
    This file is part of the GNU Readline Library (Readline), a library
    for reading lines of text with interactive input and history editing.      
@@ -32,10 +32,10 @@ extern "C" {
 #  define _FUNCTION_DEF
 
 #if defined(__GNUC__) || defined(__clang__)
-typedef int Function () __attribute__ ((deprecated));
-typedef void VFunction () __attribute__ ((deprecated));
-typedef char *CPFunction () __attribute__ ((deprecated));
-typedef char **CPPFunction () __attribute__ ((deprecated));
+typedef int Function () __attribute__((deprecated));
+typedef void VFunction () __attribute__((deprecated));
+typedef char *CPFunction () __attribute__((deprecated));
+typedef char **CPPFunction () __attribute__((deprecated));
 #else
 typedef int Function ();
 typedef void VFunction ();
@@ -51,45 +51,45 @@ typedef char **CPPFunction ();
 #  define _RL_FUNCTION_TYPEDEF
 
 /* Bindable functions */
-typedef int rl_command_func_t PARAMS((int, int));
+typedef int rl_command_func_t (int, int);
 
 /* Typedefs for the completion system */
-typedef char *rl_compentry_func_t PARAMS((const char *, int));
-typedef char **rl_completion_func_t PARAMS((const char *, int, int));
+typedef char *rl_compentry_func_t (const char *, int);
+typedef char **rl_completion_func_t (const char *, int, int);
 
-typedef char *rl_quote_func_t PARAMS((char *, int, char *));
-typedef char *rl_dequote_func_t PARAMS((char *, int));
+typedef char *rl_quote_func_t (char *, int, char *);
+typedef char *rl_dequote_func_t (char *, int);
 
-typedef int rl_compignore_func_t PARAMS((char **));
+typedef int rl_compignore_func_t (char **);
 
-typedef void rl_compdisp_func_t PARAMS((char **, int, int));
+typedef void rl_compdisp_func_t (char **, int, int);
 
 /* Type for input and pre-read hook functions like rl_event_hook */
-typedef int rl_hook_func_t PARAMS((void));
+typedef int rl_hook_func_t (void);
 
 /* Input function type */
-typedef int rl_getc_func_t PARAMS((FILE *));
+typedef int rl_getc_func_t (FILE *);
 
 /* Generic function that takes a character buffer (which could be the readline
    line buffer) and an index into it (which could be rl_point) and returns
    an int. */
-typedef int rl_linebuf_func_t PARAMS((char *, int));
+typedef int rl_linebuf_func_t (char *, int);
 
 /* `Generic' function pointer typedefs */
-typedef int rl_intfunc_t PARAMS((int));
+typedef int rl_intfunc_t (int);
 #define rl_ivoidfunc_t rl_hook_func_t
-typedef int rl_icpfunc_t PARAMS((char *));
-typedef int rl_icppfunc_t PARAMS((char **));
-
-typedef void rl_voidfunc_t PARAMS((void));
-typedef void rl_vintfunc_t PARAMS((int));
-typedef void rl_vcpfunc_t PARAMS((char *));
-typedef void rl_vcppfunc_t PARAMS((char **));
-
-typedef char *rl_cpvfunc_t PARAMS((void));
-typedef char *rl_cpifunc_t PARAMS((int));
-typedef char *rl_cpcpfunc_t PARAMS((char  *));
-typedef char *rl_cpcppfunc_t PARAMS((char  **));
+typedef int rl_icpfunc_t (char *);
+typedef int rl_icppfunc_t (char **);
+
+typedef void rl_voidfunc_t (void);
+typedef void rl_vintfunc_t (int);
+typedef void rl_vcpfunc_t (char *);
+typedef void rl_vcppfunc_t (char **);
+
+typedef char *rl_cpvfunc_t (void);
+typedef char *rl_cpifunc_t (int);
+typedef char *rl_cpcpfunc_t (char  *);
+typedef char *rl_cpcppfunc_t (char  **);
 
 #endif /* _RL_FUNCTION_TYPEDEF */
 
index 38a29361d7020897ebbc7cea7d7eeb4559223359..eea2301115ef6b9e757b50db93b98c20cab7215a 100644 (file)
@@ -1,6 +1,6 @@
 /* search.c - code for non-incremental searching in emacs and vi modes. */
 
-/* Copyright (C) 1992-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1992-2022 Free Software Foundation, Inc.
 
    This file is part of the GNU Readline Library (Readline), a library
    for reading lines of text with interactive input and history editing.      
 
 _rl_search_cxt *_rl_nscxt = 0;
 
-extern HIST_ENTRY *_rl_saved_line_for_history;
-
-/* Functions imported from the rest of the library. */
-extern void _rl_free_history_entry PARAMS((HIST_ENTRY *));
-
 static char *noninc_search_string = (char *) NULL;
 static int noninc_history_pos;
 
 static char *prev_line_found = (char *) NULL;
 
-static int rl_history_search_len;
-static int rl_history_search_pos;
-static int rl_history_search_flags;
+static int _rl_history_search_len;
+/*static*/ int _rl_history_search_pos;
+static int _rl_history_search_flags;
 
 static char *history_search_string;
 static int history_string_size;
 
-static void make_history_line_current PARAMS((HIST_ENTRY *));
-static int noninc_search_from_pos PARAMS((char *, int, int, int, int *));
-static int noninc_dosearch PARAMS((char *, int, int));
-static int noninc_search PARAMS((int, int));
-static int rl_history_search_internal PARAMS((int, int));
-static void rl_history_search_reinit PARAMS((int));
+static void make_history_line_current (HIST_ENTRY *);
+static int noninc_search_from_pos (char *, int, int, int, int *);
+static int noninc_dosearch (char *, int, int);
+static int noninc_search (int, int);
+static int rl_history_search_internal (int, int);
+static void rl_history_search_reinit (int);
 
-static _rl_search_cxt *_rl_nsearch_init PARAMS((int, int));
-static void _rl_nsearch_abort PARAMS((_rl_search_cxt *));
-static int _rl_nsearch_dispatch PARAMS((_rl_search_cxt *, int));
+static _rl_search_cxt *_rl_nsearch_init (int, int);
+static void _rl_nsearch_abort (_rl_search_cxt *);
+static int _rl_nsearch_dispatch (_rl_search_cxt *, int);
 
 /* Make the data from the history entry ENTRY be the contents of the
    current line.  This doesn't do anything with rl_point; the caller
@@ -89,6 +84,15 @@ static int _rl_nsearch_dispatch PARAMS((_rl_search_cxt *, int));
 static void
 make_history_line_current (HIST_ENTRY *entry)
 {
+  UNDO_LIST *xlist;
+
+  xlist = _rl_saved_line_for_history ? (UNDO_LIST *)_rl_saved_line_for_history->data : 0;
+  /* At this point, rl_undo_list points to a private search string list. */
+  if (rl_undo_list && rl_undo_list != (UNDO_LIST *)entry->data && rl_undo_list != xlist)
+    rl_free_undo_list ();
+
+  /* Now we create a new undo list with a single insert for this text.
+     WE DON'T CHANGE THE ORIGINAL HISTORY ENTRY UNDO LIST */
   _rl_replace_text (entry->line, 0, rl_end);
   _rl_fix_point (1);
 #if defined (VI_MODE)
@@ -100,6 +104,11 @@ make_history_line_current (HIST_ENTRY *entry)
     rl_free_undo_list ();
 #endif
 
+  /* This will need to free the saved undo list associated with the original
+     (pre-search) line buffer.
+     XXX - look at _rl_free_saved_history_line and consider calling it if
+     rl_undo_list != xlist (or calling rl_free_undo list directly on
+     _rl_saved_line_for_history->data) */
   if (_rl_saved_line_for_history)
     _rl_free_history_entry (_rl_saved_line_for_history);
   _rl_saved_line_for_history = (HIST_ENTRY *)NULL;
@@ -264,11 +273,11 @@ static void
 _rl_nsearch_abort (_rl_search_cxt *cxt)
 {
   rl_maybe_unsave_line ();
-  rl_clear_message ();
   rl_point = cxt->save_point;
   rl_mark = cxt->save_mark;
-  _rl_fix_point (1);
   rl_restore_prompt ();
+  rl_clear_message ();
+  _rl_fix_point (1);
 
   RL_UNSETSTATE (RL_STATE_NSEARCH);
 }
@@ -521,8 +530,10 @@ rl_history_search_internal (int count, int dir)
 {
   HIST_ENTRY *temp;
   int ret, oldpos, newcol;
+  int had_saved_line;
   char *t;
 
+  had_saved_line = _rl_saved_line_for_history != 0;
   rl_maybe_save_line ();
   temp = (HIST_ENTRY *)NULL;
 
@@ -534,14 +545,14 @@ rl_history_search_internal (int count, int dir)
   while (count)
     {
       RL_CHECK_SIGNALS ();
-      ret = noninc_search_from_pos (history_search_string, rl_history_search_pos + dir, dir, 0, &newcol);
+      ret = noninc_search_from_pos (history_search_string, _rl_history_search_pos + dir, dir, 0, &newcol);
       if (ret == -1)
        break;
 
       /* Get the history entry we found. */
-      rl_history_search_pos = ret;
+      _rl_history_search_pos = ret;
       oldpos = where_history ();
-      history_set_pos (rl_history_search_pos);
+      history_set_pos (_rl_history_search_pos);
       temp = current_history ();       /* will never be NULL after successful search */
       history_set_pos (oldpos);
 
@@ -555,20 +566,21 @@ rl_history_search_internal (int count, int dir)
   /* If we didn't find anything at all, return. */
   if (temp == 0)
     {
+      /* XXX - check had_saved_line here? */
       rl_maybe_unsave_line ();
       rl_ding ();
       /* If you don't want the saved history line (last match) to show up
          in the line buffer after the search fails, change the #if 0 to
          #if 1 */
 #if 0
-      if (rl_point > rl_history_search_len)
+      if (rl_point > _rl_history_search_len)
         {
-          rl_point = rl_end = rl_history_search_len;
+          rl_point = rl_end = _rl_history_search_len;
           rl_line_buffer[rl_end] = '\0';
           rl_mark = 0;
         }
 #else
-      rl_point = rl_history_search_len;        /* rl_maybe_unsave_line changes it */
+      rl_point = _rl_history_search_len;       /* rl_maybe_unsave_line changes it */
       rl_mark = rl_end;
 #endif
       return 1;
@@ -578,13 +590,13 @@ rl_history_search_internal (int count, int dir)
   make_history_line_current (temp);
 
   /* decide where to put rl_point -- need to change this for pattern search */
-  if (rl_history_search_flags & ANCHORED_SEARCH)
-    rl_point = rl_history_search_len;  /* easy case */
+  if (_rl_history_search_flags & ANCHORED_SEARCH)
+    rl_point = _rl_history_search_len; /* easy case */
   else
     {
 #if 0
       t = strstr (rl_line_buffer, history_search_string);      /* XXX */
-      rl_point = t ? (int)(t - rl_line_buffer) + rl_history_search_len : rl_end;
+      rl_point = t ? (int)(t - rl_line_buffer) + _rl_history_search_len : rl_end;
 #else
       rl_point = (newcol >= 0) ? newcol : rl_end;
 #endif
@@ -599,17 +611,17 @@ rl_history_search_reinit (int flags)
 {
   int sind;
 
-  rl_history_search_pos = where_history ();
-  rl_history_search_len = rl_point;
-  rl_history_search_flags = flags;
+  _rl_history_search_pos = where_history ();
+  _rl_history_search_len = rl_point;
+  _rl_history_search_flags = flags;
 
   prev_line_found = (char *)NULL;
   if (rl_point)
     {
       /* Allocate enough space for anchored and non-anchored searches */
-      if (rl_history_search_len >= history_string_size - 2)
+      if (_rl_history_search_len >= history_string_size - 2)
        {
-         history_string_size = rl_history_search_len + 2;
+         history_string_size = _rl_history_search_len + 2;
          history_search_string = (char *)xrealloc (history_search_string, history_string_size);
        }
       sind = 0;
@@ -618,7 +630,7 @@ rl_history_search_reinit (int flags)
       strncpy (history_search_string + sind, rl_line_buffer, rl_point);
       history_search_string[rl_point + sind] = '\0';
     }
-  _rl_free_saved_history_line ();
+  _rl_free_saved_history_line ();      /* XXX rl_undo_list? */
 }
 
 /* Search forward in the history for the string of characters
@@ -634,7 +646,7 @@ rl_history_search_forward (int count, int ignore)
       rl_last_func != rl_history_search_backward)
     rl_history_search_reinit (ANCHORED_SEARCH);
 
-  if (rl_history_search_len == 0)
+  if (_rl_history_search_len == 0)
     return (rl_get_next_history (count, ignore));
   return (rl_history_search_internal (abs (count), (count > 0) ? 1 : -1));
 }
@@ -652,7 +664,7 @@ rl_history_search_backward (int count, int ignore)
       rl_last_func != rl_history_search_backward)
     rl_history_search_reinit (ANCHORED_SEARCH);
 
-  if (rl_history_search_len == 0)
+  if (_rl_history_search_len == 0)
     return (rl_get_previous_history (count, ignore));
   return (rl_history_search_internal (abs (count), (count > 0) ? -1 : 1));
 }
@@ -671,7 +683,7 @@ rl_history_substr_search_forward (int count, int ignore)
       rl_last_func != rl_history_substr_search_backward)
     rl_history_search_reinit (NON_ANCHORED_SEARCH);
 
-  if (rl_history_search_len == 0)
+  if (_rl_history_search_len == 0)
     return (rl_get_next_history (count, ignore));
   return (rl_history_search_internal (abs (count), (count > 0) ? 1 : -1));
 }
@@ -689,7 +701,7 @@ rl_history_substr_search_backward (int count, int ignore)
       rl_last_func != rl_history_substr_search_backward)
     rl_history_search_reinit (NON_ANCHORED_SEARCH);
 
-  if (rl_history_search_len == 0)
+  if (_rl_history_search_len == 0)
     return (rl_get_previous_history (count, ignore));
   return (rl_history_search_internal (abs (count), (count > 0) ? -1 : 1));
 }
index 7fe2e97c983360641288ca4ecca254932c6bf053..36c91484c94f64dcdb154c829958a3907c363ebd 100644 (file)
@@ -1,7 +1,7 @@
 /* shell.c -- readline utility functions that are normally provided by
              bash when readline is linked as part of the shell. */
 
-/* Copyright (C) 1997-2009,2017 Free Software Foundation, Inc.
+/* Copyright (C) 1997-2009,2017,2021 Free Software Foundation, Inc.
 
    This file is part of the GNU Readline Library (Readline), a library
    for reading lines of text with interactive input and history editing.      
@@ -64,7 +64,7 @@
 #include "xmalloc.h"
 
 #if defined (HAVE_GETPWUID) && !defined (HAVE_GETPW_DECLS)
-extern struct passwd *getpwuid PARAMS((uid_t));
+extern struct passwd *getpwuid (uid_t);
 #endif /* HAVE_GETPWUID && !HAVE_GETPW_DECLS */
 
 #ifndef NULL
index f9174ab8a0149a1a078553715643da4f49d20fef..9df365e48e4cd5b0602668e579f1274a43c647d8 100644 (file)
@@ -1,6 +1,6 @@
 /* signals.c -- signal handling support for readline. */
 
-/* Copyright (C) 1987-2017 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2021 Free Software Foundation, Inc.
 
    This file is part of the GNU Readline Library (Readline), a library
    for reading lines of text with interactive input and history editing.      
 
 #if defined (HANDLE_SIGNALS)
 
-#if !defined (RETSIGTYPE)
-#  if defined (VOID_SIGHANDLER)
-#    define RETSIGTYPE void
-#  else
-#    define RETSIGTYPE int
-#  endif /* !VOID_SIGHANDLER */
-#endif /* !RETSIGTYPE */
-
-#if defined (VOID_SIGHANDLER)
-#  define SIGHANDLER_RETURN return
-#else
-#  define SIGHANDLER_RETURN return (0)
-#endif
+#define SIGHANDLER_RETURN return
 
 /* This typedef is equivalent to the one for Function; it allows us
    to say SigHandler *foo = signal (SIGKILL, SIG_IGN); */
-typedef RETSIGTYPE SigHandler ();
+typedef void SigHandler (int);
 
 #if defined (HAVE_POSIX_SIGNALS)
 typedef struct sigaction sighandler_cxt;
@@ -78,12 +66,12 @@ typedef struct { SigHandler *sa_handler; int sa_mask, sa_flags; } sighandler_cxt
 #  define SA_RESTART 0
 #endif
 
-static SigHandler *rl_set_sighandler PARAMS((int, SigHandler *, sighandler_cxt *));
-static void rl_maybe_set_sighandler PARAMS((int, SigHandler *, sighandler_cxt *));
-static void rl_maybe_restore_sighandler PARAMS((int, sighandler_cxt *));
+static SigHandler *rl_set_sighandler (int, SigHandler *, sighandler_cxt *);
+static void rl_maybe_set_sighandler (int, SigHandler *, sighandler_cxt *);
+static void rl_maybe_restore_sighandler (int, sighandler_cxt *);
 
-static RETSIGTYPE rl_signal_handler PARAMS((int));
-static RETSIGTYPE _rl_handle_signal PARAMS((int));
+static void rl_signal_handler (int);
+static void _rl_handle_signal (int);
      
 /* Exported variables for use by applications. */
 
@@ -136,7 +124,7 @@ void *_rl_sigcleanarg;
 /* Readline signal handler functions. */
 
 /* Called from RL_CHECK_SIGNALS() macro to run signal handling code. */
-RETSIGTYPE
+void
 _rl_signal_handler (int sig)
 {
   _rl_caught_signal = 0;       /* XXX */
@@ -163,7 +151,7 @@ _rl_signal_handler (int sig)
   SIGHANDLER_RETURN;
 }
 
-static RETSIGTYPE
+static void
 rl_signal_handler (int sig)
 {
   _rl_caught_signal = sig;
@@ -173,7 +161,7 @@ rl_signal_handler (int sig)
 /* This is called to handle a signal when it is safe to do so (out of the
    signal handler execution path). Called by _rl_signal_handler for all the
    signals readline catches except SIGWINCH. */
-static RETSIGTYPE
+static void
 _rl_handle_signal (int sig)
 {
   int block_sig;
@@ -222,6 +210,9 @@ _rl_handle_signal (int sig)
   switch (sig)
     {
     case SIGINT:
+      /* We will end up blocking SIGTTOU while we are resetting the tty, so
+        watch out for this if it causes problems. We could prevent this by
+        setting block_sig to 1 without modifying SET. */
       _rl_reset_completion_state ();
       rl_free_line_state ();
 #if defined (READLINE_CALLBACKS)
@@ -242,8 +233,11 @@ _rl_handle_signal (int sig)
         this even if we've been stopped on SIGTTOU, since we handle signals
         when we have returned from the signal handler and the signal is no
         longer blocked. */
-      sigaddset (&set, SIGTTOU);
-      block_sig = 1;
+      if (block_sig == 0)
+       {
+         sigaddset (&set, SIGTTOU);
+         block_sig = 1;
+       }
 #  endif
 #endif /* SIGTSTP */
    /* Any signals that should be blocked during cleanup should go here. */
@@ -261,13 +255,17 @@ _rl_handle_signal (int sig)
     case SIGTERM:
 #if defined (SIGALRM)
     case SIGALRM:
+      if (sig == SIGALRM)
+       _rl_timeout_handle_sigalrm ();
 #endif
 #if defined (SIGQUIT)
     case SIGQUIT:
 #endif
 
+#if defined (HAVE_POSIX_SIGNALS)
       if (block_sig)
        sigprocmask (SIG_BLOCK, &set, &oset);
+#endif
 
       rl_echo_signal_char (sig);
       rl_cleanup_after_signal ();
@@ -283,19 +281,6 @@ _rl_handle_signal (int sig)
 
       /* We don't have to bother unblocking the signal because we are not
         running in a signal handler context. */
-#if 0
-#if defined (HAVE_POSIX_SIGNALS)
-      /* Make sure this signal is not blocked when we resend it to the
-        calling application. */
-      sigemptyset (&set);
-      sigprocmask (SIG_BLOCK, (sigset_t *)NULL, &set);
-      sigdelset (&set, sig);
-#else /* !HAVE_POSIX_SIGNALS */
-#  if defined (HAVE_BSD_SIGNALS)
-      omask = sigblock (0);
-#  endif /* HAVE_BSD_SIGNALS */
-#endif /* !HAVE_POSIX_SIGNALS */
-#endif
 
 #if defined (__EMX__)
       signal (sig, SIG_ACK);
@@ -309,16 +294,6 @@ _rl_handle_signal (int sig)
 
       /* We don't need to modify the signal mask now that this is not run in
         a signal handler context. */
-#if 0
-      /* Let the signal that we just sent through if it is blocked.  */
-#if defined (HAVE_POSIX_SIGNALS)
-      sigprocmask (SIG_SETMASK, &set, (sigset_t *)NULL);
-#else /* !HAVE_POSIX_SIGNALS */
-#  if defined (HAVE_BSD_SIGNALS)
-      sigsetmask (omask & ~(sigmask (sig)));
-#  endif /* HAVE_BSD_SIGNALS */
-#endif /* !HAVE_POSIX_SIGNALS */
-#endif
 
       rl_reset_after_signal ();      
     }
@@ -328,7 +303,7 @@ _rl_handle_signal (int sig)
 }
 
 #if defined (SIGWINCH)
-static RETSIGTYPE
+static void
 rl_sigwinch_handler (int sig)
 {
   SigHandler *oh;
index 05415dc42de1dca338d4047b168bc8b5aedd12ae..9997161f818e934875d12fec50e7f1caccfd5ec0 100644 (file)
@@ -1,6 +1,6 @@
 /* terminal.c -- controlling the terminal with termcap. */
 
-/* Copyright (C) 1996-2017 Free Software Foundation, Inc.
+/* Copyright (C) 1996-2022 Free Software Foundation, Inc.
 
    This file is part of the GNU Readline Library (Readline), a library
    for reading lines of text with interactive input and history editing.      
 #  include <windows.h>
 #  include <wincon.h>
 
-static void _win_get_screensize PARAMS((int *, int *));
+static void _win_get_screensize (int *, int *);
 #endif
 
 #if defined (__EMX__)
-static void _emx_get_screensize PARAMS((int *, int *));
+static void _emx_get_screensize (int *, int *);
 #endif
 
 /* If the calling application sets this to a non-zero value, readline will
@@ -177,10 +177,19 @@ static char *_rl_term_kD;
 /* Insert key */
 static char *_rl_term_kI;
 
+/* Page up and page down keys */
+static char *_rl_term_kP;
+static char *_rl_term_kN;
+
 /* Cursor control */
 static char *_rl_term_vs;      /* very visible */
 static char *_rl_term_ve;      /* normal */
 
+/* User-settable color sequences to begin and end the active region. Defaults
+   are rl_term_so and rl_term_se on non-dumb terminals. */
+char *_rl_active_region_start_color = NULL;
+char *_rl_active_region_end_color = NULL;
+
 /* It's not clear how HPUX is so broken here. */
 #ifdef TGETENT_BROKEN
 #  define TGETENT_SUCCESS 0
@@ -194,7 +203,7 @@ static char *_rl_term_ve;   /* normal */
 #endif
 #define TGETFLAG(cap)  (tgetflag (cap) == TGETFLAG_SUCCESS)
 
-static void bind_termcap_arrow_keys PARAMS((Keymap));
+static void bind_termcap_arrow_keys (Keymap);
 
 /* Variables that hold the screen dimensions, used by the display code. */
 int _rl_screenwidth, _rl_screenheight, _rl_screenchars;
@@ -382,8 +391,12 @@ _rl_sigwinch_resize_terminal (void)
 void
 rl_resize_terminal (void)
 {
+  int width, height;
+
+  width = _rl_screenwidth;
+  height = _rl_screenheight;
   _rl_get_screen_size (fileno (rl_instream), 1);
-  if (_rl_echoing_p)
+  if (_rl_echoing_p && (width != _rl_screenwidth || height != _rl_screenheight))
     {
       if (CUSTOM_REDISPLAY_FUNC ())
        rl_forced_update_display ();
@@ -415,6 +428,8 @@ static const struct _tc_string tc_strings[] =
   { "kD", &_rl_term_kD },      /* delete */
   { "kH", &_rl_term_kH },      /* home down ?? */
   { "kI", &_rl_term_kI },      /* insert */
+  { "kN", &_rl_term_kN },      /* page down */
+  { "kP", &_rl_term_kP },      /* page up */
   { "kd", &_rl_term_kd },
   { "ke", &_rl_term_ke },      /* end keypad mode */
   { "kh", &_rl_term_kh },      /* home */
@@ -456,7 +471,7 @@ _rl_init_terminal_io (const char *terminal_name)
 {
   const char *term;
   char *buffer;
-  int tty, tgetent_ret, dumbterm;
+  int tty, tgetent_ret, dumbterm, reset_region_colors;
 
   term = terminal_name ? terminal_name : sh_get_env_value ("TERM");
   _rl_term_clrpag = _rl_term_cr = _rl_term_clreol = _rl_term_clrscroll = (char *)NULL;
@@ -467,6 +482,8 @@ _rl_init_terminal_io (const char *terminal_name)
 
   dumbterm = STREQ (term, "dumb");
 
+  reset_region_colors = 1;
+
 #ifdef __MSDOS__
   _rl_term_im = _rl_term_ei = _rl_term_ic = _rl_term_IC = (char *)NULL;
   _rl_term_up = _rl_term_dc = _rl_term_DC = _rl_visible_bell = (char *)NULL;
@@ -478,6 +495,7 @@ _rl_init_terminal_io (const char *terminal_name)
   _rl_term_goto = _rl_term_pc = _rl_term_ip = (char *)NULL;
   _rl_term_ks = _rl_term_ke =_rl_term_vs = _rl_term_ve = (char *)NULL;
   _rl_term_kh = _rl_term_kH = _rl_term_at7 = _rl_term_kI = (char *)NULL;
+  _rl_term_kN = _rl_term_kP = (char *)NULL;
   _rl_term_so = _rl_term_se = (char *)NULL;
 #if defined(HACK_TERMCAP_MOTION)
   _rl_term_forward_char = (char *)NULL;
@@ -540,6 +558,7 @@ _rl_init_terminal_io (const char *terminal_name)
       _rl_term_ku = _rl_term_kd = _rl_term_kl = _rl_term_kr = (char *)NULL;
       _rl_term_kh = _rl_term_kH = _rl_term_kI = _rl_term_kD = (char *)NULL;
       _rl_term_ks = _rl_term_ke = _rl_term_at7 = (char *)NULL;
+      _rl_term_kN = _rl_term_kP = (char *)NULL;
       _rl_term_mm = _rl_term_mo = (char *)NULL;
       _rl_term_ve = _rl_term_vs = (char *)NULL;
       _rl_term_forward_char = (char *)NULL;
@@ -550,6 +569,11 @@ _rl_init_terminal_io (const char *terminal_name)
         escape sequences */
       _rl_enable_bracketed_paste = 0;
 
+      /* No terminal so/se capabilities. */
+      _rl_enable_active_region = 0;
+      _rl_reset_region_color (0, NULL);
+      _rl_reset_region_color (1, NULL);
+    
       /* Reasonable defaults for tgoto().  Readline currently only uses
          tgoto if _rl_term_IC or _rl_term_DC is defined, but just in case we
          change that later... */
@@ -604,8 +628,14 @@ _rl_init_terminal_io (const char *terminal_name)
   /* There's no way to determine whether or not a given terminal supports
      bracketed paste mode, so we assume a terminal named "dumb" does not. */
   if (dumbterm)
-    _rl_enable_bracketed_paste = 0;
-    
+    _rl_enable_bracketed_paste = _rl_enable_active_region = 0;
+
+  if (reset_region_colors)
+    {
+      _rl_reset_region_color (0, _rl_term_so);
+      _rl_reset_region_color (1, _rl_term_se);
+    }
+
   return 0;
 }
 
@@ -629,6 +659,9 @@ bind_termcap_arrow_keys (Keymap map)
   rl_bind_keyseq_if_unbound (_rl_term_kD, rl_delete);
   rl_bind_keyseq_if_unbound (_rl_term_kI, rl_overwrite_mode);  /* Insert */
 
+  rl_bind_keyseq_if_unbound (_rl_term_kN, rl_history_search_forward);  /* Page Down */
+  rl_bind_keyseq_if_unbound (_rl_term_kP, rl_history_search_backward); /* Page Up */
+
   _rl_keymap = xkeymap;
 }
 
@@ -774,6 +807,67 @@ _rl_standout_off (void)
 #endif
 }
 
+/* **************************************************************** */
+/*                                                                 */
+/*          Controlling color for a portion of the line            */
+/*                                                                 */
+/* **************************************************************** */
+
+/* Reset the region color variables to VALUE depending on WHICH (0 == start,
+   1 == end). This is where all the memory allocation for the color variable
+   strings is performed. We might want to pass a flag saying whether or not
+   to translate VALUE like a key sequence, but it doesn't really matter. */
+int
+_rl_reset_region_color (int which, const char *value)
+{
+  int len;
+
+  if (which == 0)
+    {
+      xfree (_rl_active_region_start_color);
+      if (value && *value)
+       {
+         _rl_active_region_start_color = (char *)xmalloc (2 * strlen (value) + 1);
+         rl_translate_keyseq (value, _rl_active_region_start_color, &len);
+         _rl_active_region_start_color[len] = '\0';
+       }
+      else
+       _rl_active_region_start_color = NULL;
+    }
+  else
+    {
+      xfree (_rl_active_region_end_color);
+      if (value && *value)
+       {
+         _rl_active_region_end_color = (char *)xmalloc (2 * strlen (value) + 1);
+         rl_translate_keyseq (value, _rl_active_region_end_color, &len);
+         _rl_active_region_end_color[len] = '\0';
+       }
+      else
+       _rl_active_region_end_color = NULL;
+    }
+
+  return 0;
+}
+
+void
+_rl_region_color_on (void)
+{
+#ifndef __MSDOS__
+  if (_rl_active_region_start_color && _rl_active_region_end_color)
+    tputs (_rl_active_region_start_color, 1, _rl_output_character_function);
+#endif
+}
+
+void
+_rl_region_color_off (void)
+{
+#ifndef __MSDOS__
+  if (_rl_active_region_start_color && _rl_active_region_end_color)
+    tputs (_rl_active_region_end_color, 1, _rl_output_character_function);
+#endif
+}
+
 /* **************************************************************** */
 /*                                                                 */
 /*             Controlling the Meta Key and Keypad                 */
index 2567dea268ae2412dda65d9c9fbd898e1ac11e86..91c3f330d897d03c88ad3459fbcdf090acb4f2fd 100644 (file)
@@ -1,6 +1,6 @@
 /* text.c -- text handling commands for readline. */
 
-/* Copyright (C) 1987-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2021 Free Software Foundation, Inc.
 
    This file is part of the GNU Readline Library (Readline), a library
    for reading lines of text with interactive input and history editing.      
 #include "xmalloc.h"
 
 /* Forward declarations. */
-static int rl_change_case PARAMS((int, int));
-static int _rl_char_search PARAMS((int, int, int));
+static int rl_change_case (int, int);
+static int _rl_char_search (int, int, int);
 
 #if defined (READLINE_CALLBACKS)
-static int _rl_insert_next_callback PARAMS((_rl_callback_generic_arg *));
-static int _rl_char_search_callback PARAMS((_rl_callback_generic_arg *));
+static int _rl_insert_next_callback (_rl_callback_generic_arg *);
+static int _rl_char_search_callback (_rl_callback_generic_arg *);
 #endif
 
 /* The largest chunk of text that can be inserted in one call to
@@ -96,6 +96,7 @@ rl_insert_text (const char *string)
 
   for (i = rl_end; i >= rl_point; i--)
     rl_line_buffer[i + l] = rl_line_buffer[i];
+
   strncpy (rl_line_buffer + rl_point, string, l);
 
   /* Remember how to undo this if we aren't undoing something. */
@@ -735,7 +736,7 @@ _rl_insert_char (int count, int c)
     }
   else
     {
-      wchar_t wc;
+      WCHAR_T wc;
       size_t ret;
 
       if (stored_count <= 0)
@@ -745,7 +746,7 @@ _rl_insert_char (int count, int c)
 
       ps_back = ps;
       pending_bytes[pending_bytes_length++] = c;
-      ret = mbrtowc (&wc, pending_bytes, pending_bytes_length, &ps);
+      ret = MBRTOWC (&wc, pending_bytes, pending_bytes_length, &ps);
 
       if (ret == (size_t)-2)
        {
@@ -919,8 +920,11 @@ _rl_overwrite_char (int count, int c)
   int k;
 
   /* Read an entire multibyte character sequence to insert COUNT times. */
+  k = 1;
   if (count > 0 && MB_CUR_MAX > 1 && rl_byte_oriented == 0)
     k = _rl_read_mbstring (c, mbkey, MB_LEN_MAX);
+  if (k < 0)
+    return 1;
 #endif
 
   rl_begin_undo_group ();
@@ -1132,7 +1136,7 @@ rl_newline (int count, int key)
 int
 rl_do_lowercase_version (int ignore1, int ignore2)
 {
-  return 0;
+  return 99999;                /* prevent from being combined with _rl_null_function */
 }
 
 /* This is different from what vi does, so the code's not shared.  Emacs
@@ -1401,9 +1405,9 @@ rl_change_case (int count, int op)
 {
   int start, next, end;
   int inword, nc, nop;
-  wchar_t c;
+  WCHAR_T c;
 #if defined (HANDLE_MULTIBYTE)
-  wchar_t wc, nwc;
+  WCHAR_T wc, nwc;
   char mb[MB_LEN_MAX+1];
   int mlen;
   size_t m;
@@ -1462,9 +1466,9 @@ rl_change_case (int count, int op)
 #if defined (HANDLE_MULTIBYTE)
       else
        {
-         m = mbrtowc (&wc, rl_line_buffer + start, end - start, &mps);
+         m = MBRTOWC (&wc, rl_line_buffer + start, end - start, &mps);
          if (MB_INVALIDCH (m))
-           wc = (wchar_t)rl_line_buffer[start];
+           wc = (WCHAR_T)rl_line_buffer[start];
          else if (MB_NULLWCH (m))
            wc = L'\0';
          nwc = (nop == UpCase) ? _rl_to_wupper (wc) : _rl_to_wlower (wc);
@@ -1474,12 +1478,12 @@ rl_change_case (int count, int op)
              mbstate_t ts;
 
              memset (&ts, 0, sizeof (mbstate_t));
-             mlen = wcrtomb (mb, nwc, &ts);
+             mlen = WCRTOMB (mb, nwc, &ts);
              if (mlen < 0)
                {
                  nwc = wc;
                  memset (&ts, 0, sizeof (mbstate_t));
-                 mlen = wcrtomb (mb, nwc, &ts);
+                 mlen = WCRTOMB (mb, nwc, &ts);
                  if (mlen < 0)         /* should not happen */
                    strncpy (mb, rl_line_buffer + start, mlen = m);
                }
@@ -1536,7 +1540,10 @@ rl_transpose_words (int count, int key)
 {
   char *word1, *word2;
   int w1_beg, w1_end, w2_beg, w2_end;
-  int orig_point = rl_point;
+  int orig_point, orig_end;
+
+  orig_point = rl_point;
+  orig_end = rl_end;
 
   if (!count)
     return 0;
@@ -1580,6 +1587,7 @@ rl_transpose_words (int count, int key)
   /* This is exactly correct since the text before this point has not
      changed in length. */
   rl_point = w2_end;
+  rl_end = orig_end;           /* just make sure */
 
   /* I think that does it. */
   rl_end_undo_group ();
index e26dd0476f7b3369ff842c26716640b7a4b99b89..bc8022afc329f3997a7f43548a73f212d09a0952 100644 (file)
@@ -1,6 +1,6 @@
 /* tilde.h: Externally available variables and function in libtilde.a. */
 
-/* Copyright (C) 1992-2009 Free Software Foundation, Inc.
+/* Copyright (C) 1992-2009,2021 Free Software Foundation, Inc.
 
    This file contains the Readline Library (Readline), a set of
    routines for providing Emacs style line input to programs that ask
 extern "C" {
 #endif
 
-/* A function can be defined using prototypes and compile on both ANSI C
-   and traditional C compilers with something like this:
-       extern char *func PARAMS((char *, char *, int)); */
-
-#if !defined (PARAMS)
-#  if defined (__STDC__) || defined (__GNUC__) || defined (__cplusplus)
-#    define PARAMS(protos) protos
-#  else
-#    define PARAMS(protos) ()
-#  endif
-#endif
-
-typedef char *tilde_hook_func_t PARAMS((char *));
+typedef char *tilde_hook_func_t (char *);
 
 /* If non-null, this contains the address of a function that the application
    wants called before trying the standard tilde expansions.  The function
@@ -64,14 +52,14 @@ extern char **tilde_additional_prefixes;
 extern char **tilde_additional_suffixes;
 
 /* Return a new string which is the result of tilde expanding STRING. */
-extern char *tilde_expand PARAMS((const char *));
+extern char *tilde_expand (const char *);
 
 /* Do the work of tilde expansion on FILENAME.  FILENAME starts with a
    tilde.  If there is no expansion, call tilde_expansion_failure_hook. */
-extern char *tilde_expand_word PARAMS((const char *));
+extern char *tilde_expand_word (const char *);
 
 /* Find the portion of the string beginning with ~ that should be expanded. */
-extern char *tilde_find_word PARAMS((const char *, int, int *));
+extern char *tilde_find_word (const char *, int, int *);
 
 #ifdef __cplusplus
 }
index 147999119a6123532e8d932f2ccb1783e4c1a7a7..e4c457dce328a210c0a77e94903421f3f3251b74 100644 (file)
@@ -1,6 +1,6 @@
 /* undo.c - manage list of changes to lines, offering opportunity to undo them */
 
-/* Copyright (C) 1987-2017 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2021 Free Software Foundation, Inc.
 
    This file is part of the GNU Readline Library (Readline), a library
    for reading lines of text with interactive input and history editing.      
@@ -49,9 +49,7 @@
 #include "rlprivate.h"
 #include "xmalloc.h"
 
-extern void _hs_replace_history_data PARAMS((int, histdata_t *, histdata_t *));
-
-extern HIST_ENTRY *_rl_saved_line_for_history;
+#include "histlib.h"
 
 /* Non-zero tells rl_delete_text and rl_insert_text to not add to
    the undo list. */
index 1576b55d50d53cf2a61b32a879697b9a338f5647..2e986db0a5ed34350ce5155ec66468adfc7e8de2 100644 (file)
@@ -72,7 +72,7 @@ static const char * const pathname_alphabetic_chars = "/-_=~.#$";
 int
 rl_alphabetic (int c)
 {
-  if (ALPHABETIC (c))
+  if (_rl_alphabetic_p (c))
     return (1);
 
   return (_rl_allow_pathname_alphabetic_chars &&
@@ -81,7 +81,7 @@ rl_alphabetic (int c)
 
 #if defined (HANDLE_MULTIBYTE)
 int
-_rl_walphabetic (wchar_t wc)
+_rl_walphabetic (WCHAR_T wc)
 {
   int c;
 
@@ -98,7 +98,8 @@ _rl_walphabetic (wchar_t wc)
 int
 _rl_abort_internal (void)
 {
-  rl_ding ();
+  if (RL_ISSTATE (RL_STATE_TIMEOUT) == 0)
+    rl_ding ();                        /* Don't ring the bell on a timeout */
   rl_clear_message ();
   _rl_reset_argument ();
   rl_clear_pending_input ();
index 742341e362836fb72f361465856992e586a0fb6a..3a033bab46f8eb9c3eca32145adc0fe325bdf0be 100644 (file)
@@ -1,7 +1,7 @@
 /* vi_mode.c -- A vi emulation mode for Bash.
    Derived from code written by Jeff Sparkes (jsparkes@bnr.ca).  */
 
-/* Copyright (C) 1987-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2021 Free Software Foundation, Inc.
 
    This file is part of the GNU Readline Library (Readline), a library
    for reading lines of text with interactive input and history editing.      
@@ -124,44 +124,44 @@ static const char * const vi_textmod = "_*\\AaIiCcDdPpYyRrSsXx~";
 /* Arrays for the saved marks. */
 static int vi_mark_chars['z' - 'a' + 1];
 
-static void _rl_vi_replace_insert PARAMS((int));
-static void _rl_vi_save_replace PARAMS((void));
-static void _rl_vi_stuff_insert PARAMS((int));
-static void _rl_vi_save_insert PARAMS((UNDO_LIST *));
+static void _rl_vi_replace_insert (int);
+static void _rl_vi_save_replace (void);
+static void _rl_vi_stuff_insert (int);
+static void _rl_vi_save_insert (UNDO_LIST *);
 
-static void vi_save_insert_buffer PARAMS ((int, int));
+static void vi_save_insert_buffer (int, int);
 
-static inline void _rl_vi_backup PARAMS((void));
+static inline void _rl_vi_backup (void);
 
-static int _rl_vi_arg_dispatch PARAMS((int));
-static int rl_digit_loop1 PARAMS((void));
+static int _rl_vi_arg_dispatch (int);
+static int rl_digit_loop1 (void);
 
-static int _rl_vi_set_mark PARAMS((void));
-static int _rl_vi_goto_mark PARAMS((void));
+static int _rl_vi_set_mark (void);
+static int _rl_vi_goto_mark (void);
 
-static inline int _rl_vi_advance_point PARAMS((void));
-static inline int _rl_vi_backup_point PARAMS((void));
+static inline int _rl_vi_advance_point (void);
+static inline int _rl_vi_backup_point (void);
 
-static void _rl_vi_append_forward PARAMS((int));
+static void _rl_vi_append_forward (int);
 
-static int _rl_vi_callback_getchar PARAMS((char *, int));
+static int _rl_vi_callback_getchar (char *, int);
 
 #if defined (READLINE_CALLBACKS)
-static int _rl_vi_callback_set_mark PARAMS((_rl_callback_generic_arg *));
-static int _rl_vi_callback_goto_mark PARAMS((_rl_callback_generic_arg *));
-static int _rl_vi_callback_change_char PARAMS((_rl_callback_generic_arg *));
-static int _rl_vi_callback_char_search PARAMS((_rl_callback_generic_arg *));
+static int _rl_vi_callback_set_mark (_rl_callback_generic_arg *);
+static int _rl_vi_callback_goto_mark (_rl_callback_generic_arg *);
+static int _rl_vi_callback_change_char (_rl_callback_generic_arg *);
+static int _rl_vi_callback_char_search (_rl_callback_generic_arg *);
 #endif
 
-static int rl_domove_read_callback PARAMS((_rl_vimotion_cxt *));
-static int rl_domove_motion_callback PARAMS((_rl_vimotion_cxt *));
-static int rl_vi_domove_getchar PARAMS((_rl_vimotion_cxt *));
+static int rl_domove_read_callback (_rl_vimotion_cxt *);
+static int rl_domove_motion_callback (_rl_vimotion_cxt *);
+static int rl_vi_domove_getchar (_rl_vimotion_cxt *);
 
-static int vi_change_dispatch PARAMS((_rl_vimotion_cxt *));
-static int vi_delete_dispatch PARAMS((_rl_vimotion_cxt *));
-static int vi_yank_dispatch PARAMS((_rl_vimotion_cxt *));
+static int vi_change_dispatch (_rl_vimotion_cxt *);
+static int vi_delete_dispatch (_rl_vimotion_cxt *);
+static int vi_yank_dispatch (_rl_vimotion_cxt *);
 
-static int vidomove_dispatch PARAMS((_rl_vimotion_cxt *));
+static int vidomove_dispatch (_rl_vimotion_cxt *);
 
 void
 _rl_vi_initialize_line (void)
@@ -337,24 +337,7 @@ rl_vi_yank_arg (int count, int key)
 int
 rl_vi_fetch_history (int count, int c)
 {
-  int wanted;
-
-  /* Giving an argument of n means we want the nth command in the history
-     file.  The command number is interpreted the same way that the bash
-     `history' command does it -- that is, giving an argument count of 450
-     to this command would get the command listed as number 450 in the
-     output of `history'. */
-  if (rl_explicit_arg)
-    {
-      wanted = history_base + where_history () - count;
-      if (wanted <= 0)
-        rl_beginning_of_history (0, 0);
-      else
-        rl_get_previous_history (wanted, c);
-    }
-  else
-    rl_beginning_of_history (count, 0);
-  return (0);
+  return (rl_fetch_history (count, c));
 }
 
 /* Search again for the last thing searched for. */
@@ -944,7 +927,7 @@ rl_vi_arg_digit (int count, int c)
 static int
 _rl_vi_change_mbchar_case (int count)
 {
-  wchar_t wc;
+  WCHAR_T wc;
   char mb[MB_LEN_MAX+1];
   int mlen, p;
   size_t m;
@@ -955,9 +938,9 @@ _rl_vi_change_mbchar_case (int count)
     count--;
   while (count-- && rl_point < rl_end)
     {
-      m = mbrtowc (&wc, rl_line_buffer + rl_point, rl_end - rl_point, &ps);
+      m = MBRTOWC (&wc, rl_line_buffer + rl_point, rl_end - rl_point, &ps);
       if (MB_INVALIDCH (m))
-       wc = (wchar_t)rl_line_buffer[rl_point];
+       wc = (WCHAR_T)rl_line_buffer[rl_point];
       else if (MB_NULLWCH (m))
        wc = L'\0';
       if (iswupper (wc))
@@ -975,7 +958,7 @@ _rl_vi_change_mbchar_case (int count)
       if (wc)
        {
          p = rl_point;
-         mlen = wcrtomb (mb, wc, &ps);
+         mlen = WCRTOMB (mb, wc, &ps);
          if (mlen >= 0)
            mb[mlen] = '\0';
          rl_begin_undo_group ();
@@ -1389,8 +1372,15 @@ int
 rl_vi_delete_to (int count, int key)
 {
   int c, r;
+  _rl_vimotion_cxt *savecxt;
 
-  if (_rl_vimvcxt)
+  savecxt = 0;
+  if (_rl_vi_redoing)
+    {
+      savecxt = _rl_vimvcxt;
+      _rl_vimvcxt = _rl_mvcxt_alloc (VIM_DELETE, key);
+    }
+  else if (_rl_vimvcxt)
     _rl_mvcxt_init (_rl_vimvcxt, VIM_DELETE, key);
   else
     _rl_vimvcxt = _rl_mvcxt_alloc (VIM_DELETE, key);
@@ -1433,7 +1423,7 @@ rl_vi_delete_to (int count, int key)
     }
 
   _rl_mvcxt_dispose (_rl_vimvcxt);
-  _rl_vimvcxt = 0;
+  _rl_vimvcxt = savecxt;
 
   return r;
 }
@@ -1481,8 +1471,15 @@ int
 rl_vi_change_to (int count, int key)
 {
   int c, r;
+  _rl_vimotion_cxt *savecxt;
 
-  if (_rl_vimvcxt)
+  savecxt = 0;
+  if (_rl_vi_redoing)
+    {
+      savecxt = _rl_vimvcxt;
+      _rl_vimvcxt = _rl_mvcxt_alloc (VIM_CHANGE, key);
+    }
+  else if (_rl_vimvcxt)
     _rl_mvcxt_init (_rl_vimvcxt, VIM_CHANGE, key);
   else
     _rl_vimvcxt = _rl_mvcxt_alloc (VIM_CHANGE, key);
@@ -1524,7 +1521,7 @@ rl_vi_change_to (int count, int key)
     }
 
   _rl_mvcxt_dispose (_rl_vimvcxt);
-  _rl_vimvcxt = 0;
+  _rl_vimvcxt = savecxt;
 
   return r;
 }
@@ -1553,8 +1550,15 @@ int
 rl_vi_yank_to (int count, int key)
 {
   int c, r;
+  _rl_vimotion_cxt *savecxt;
 
-  if (_rl_vimvcxt)
+  savecxt = 0;
+  if (_rl_vi_redoing)
+    {
+      savecxt = _rl_vimvcxt;
+      _rl_vimvcxt = _rl_mvcxt_alloc (VIM_YANK, key);
+    }
+  else if (_rl_vimvcxt)
     _rl_mvcxt_init (_rl_vimvcxt, VIM_YANK, key);
   else
     _rl_vimvcxt = _rl_mvcxt_alloc (VIM_YANK, key);
@@ -1596,7 +1600,7 @@ rl_vi_yank_to (int count, int key)
     }
 
   _rl_mvcxt_dispose (_rl_vimvcxt);
-  _rl_vimvcxt = 0;
+  _rl_vimvcxt = savecxt;
 
   return r;
 }
@@ -2036,6 +2040,9 @@ _rl_vi_callback_change_char (_rl_callback_generic_arg *data)
   char mb[MB_LEN_MAX+1];
 
   c = _rl_vi_callback_getchar (mb, MB_LEN_MAX);
+  if (c < 0)
+    return -1;
+
 #if defined (HANDLE_MULTIBYTE)
   if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
     strncpy (_rl_vi_last_replacement, mb, MB_LEN_MAX);
@@ -2044,9 +2051,6 @@ _rl_vi_callback_change_char (_rl_callback_generic_arg *data)
     _rl_vi_last_replacement[0] = c;
   _rl_vi_last_replacement[MB_LEN_MAX] = '\0';  /* XXX */
 
-  if (c < 0)
-    return -1;
-
   _rl_callback_func = 0;
   _rl_want_redisplay = 1;
 
@@ -2077,6 +2081,8 @@ rl_vi_change_char (int count, int key)
   else
     {
       c = _rl_vi_callback_getchar (mb, MB_LEN_MAX);
+      if (c < 0)
+       return -1;
 #ifdef HANDLE_MULTIBYTE
       if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
        strncpy (_rl_vi_last_replacement, mb, MB_LEN_MAX);
@@ -2113,7 +2119,8 @@ rl_vi_overstrike (int count, int key)
 
   if (count > 0)
     {
-      _rl_overwrite_char (count, key);
+      if (_rl_overwrite_char (count, key) != 0)
+       return (1);
       vi_replace_count += count;
     }
 
index f40d7a596a287c3024598f47f769b0694eaf44a5..0fb9df9c00b4973c61da6f53a5519505e4dc6ae5 100644 (file)
@@ -1,6 +1,6 @@
 /* xmalloc.h -- memory allocation that aborts on errors. */
 
-/* Copyright (C) 1999-2009 Free Software Foundation, Inc.
+/* Copyright (C) 1999-2009,2010-2021 Free Software Foundation, Inc.
 
    This file is part of the GNU Readline Library (Readline), a library
    for reading lines of text with interactive input and history editing.      
@@ -38,8 +38,8 @@
 
 #endif /* !PTR_T */
 
-extern PTR_T xmalloc PARAMS((size_t));
-extern PTR_T xrealloc PARAMS((void *, size_t));
-extern void xfree PARAMS((void *));
+extern PTR_T xmalloc (size_t);
+extern PTR_T xrealloc (void *, size_t);
+extern void xfree (void *);
 
 #endif /* _XMALLOC_H_ */
index 98064de55712dfbf73c5c9d2198a58559c66c0cc..8c42c73d057a2c66b64c0d74723a9bbc76536bb4 100644 (file)
@@ -2,7 +2,7 @@
 # Makefile for the Bash library
 #
 #
-# Copyright (C) 1998-2020 Free Software Foundation, Inc.
+# Copyright (C) 1998-2022 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
@@ -57,6 +57,7 @@ SHELL = @MAKE_SHELL@
 
 CFLAGS = @CFLAGS@
 LOCAL_CFLAGS = @LOCAL_CFLAGS@ ${DEBUG}
+STYLE_CFLAGS = @STYLE_CFLAGS@
 CPPFLAGS = @CPPFLAGS@
 LDFLAGS = @LDFLAGS@ @LOCAL_LDFLAGS@
 
@@ -68,7 +69,7 @@ LOCAL_DEFS = @LOCAL_DEFS@
 INCLUDES = -I. -I../.. -I$(topdir) -I$(topdir)/lib -I$(BASHINCDIR) -I$(srcdir) $(INTL_INC)
 
 CCFLAGS = ${ADDON_CFLAGS} ${PROFILE_FLAGS} ${INCLUDES} $(DEFS) $(LOCAL_DEFS) \
-         $(LOCAL_CFLAGS) $(CFLAGS) $(CPPFLAGS) 
+         $(LOCAL_CFLAGS) $(STYLE_CFLAGS) $(CFLAGS) $(CPPFLAGS) 
 
 GCC_LINT_FLAGS = -Wall -Wshadow -Wpointer-arith -Wcast-qual \
                 -Wcast-align -Wstrict-prototypes -Wconversion \
@@ -93,7 +94,7 @@ CSOURCES = clktck.c clock.c getcwd.c getenv.c oslib.c setlinebuf.c \
           wcsdup.c fpurge.c zgetline.c mbscmp.c uconvert.c ufuncs.c \
           casemod.c dprintf.c input_avail.c mbscasecmp.c fnxform.c \
           strchrnul.c unicode.c wcswidth.c wcsnwidth.c shmbchar.c strdup.c \
-          utf8.c random.c gettimeofday.c
+          strvis.c utf8.c random.c gettimeofday.c timers.c
 
 # The header files for this library.
 HSOURCES = 
@@ -107,8 +108,8 @@ OBJECTS = clktck.o clock.o getenv.o oslib.o setlinebuf.o strnlen.o \
          strtrans.o snprintf.o mailstat.o fmtulong.o \
          fmtullong.o fmtumax.o zcatfd.o zmapfd.o winsize.o wcsdup.o \
          fpurge.o zgetline.o mbscmp.o uconvert.o ufuncs.o casemod.o \
-         input_avail.o mbscasecmp.o fnxform.o unicode.o shmbchar.o \
-         utf8.o random.o gettimeofday.o wcsnwidth.o ${LIBOBJS}
+         input_avail.o mbscasecmp.o fnxform.o unicode.o shmbchar.o strvis.o \
+         utf8.o random.o gettimeofday.o timers.o wcsnwidth.o ${LIBOBJS}
 
 SUPPORT = Makefile
 
@@ -197,6 +198,8 @@ strtoul.o: strtoul.c
 strtoull.o: strtoull.c
 strtoumax.o: strtoumax.c
 strtrans.o: strtrans.c
+strvis.o: strvis.c
+timers.o: timers.c
 times.o: times.c
 timeval.o: timeval.c
 tmpfile.o: tmpfile.c
@@ -277,6 +280,8 @@ strtoul.o: ${BUILD_DIR}/config.h
 strtoull.o: ${BUILD_DIR}/config.h
 strtoumax.o: ${BUILD_DIR}/config.h
 strtrans.o: ${BUILD_DIR}/config.h
+strvis.o: ${BUILD_DIR}/config.h
+timers.o: ${BUILD_DIR}/config.h
 times.o: ${BUILD_DIR}/config.h
 timeval.o: ${BUILD_DIR}/config.h
 tmpfile.o: ${BUILD_DIR}/config.h ${topdir}/config-top.h 
@@ -509,6 +514,11 @@ strtrans.o: ${BUILD_DIR}/pathnames.h ${topdir}/externs.h
 strtrans.o: ${BASHINCDIR}/shmbutil.h ${BASHINCDIR}/shmbchar.h
 #strtrans.o: ${BUILD_DIR}/version.h
 
+strvis.o: ${topdir}/bashansi.h
+strvis.o: ${BASHINCDIR}/ansi_stdlib.h ${BASHINCDIR}/chartypes.h
+strvis.o: ${BASHINCDIR}/shmbutil.h ${BASHINCDIR}/shmbchar.h
+strvis.o: ${topdir}/bashintl.h ${LIBINTL_H} $(BASHINCDIR)/gettext.h
+
 times.o: ${BASHINCDIR}/systimes.h
 times.o: ${BASHINCDIR}/posixtime.h
 
@@ -620,6 +630,14 @@ fnxform.o: ${topdir}/bashintl.h ${LIBINTL_H} ${BASHINCDIR}/gettext.h
 shmbchar.o: ${BASHINCDIR}/shmbchar.h
 shmbchar.o: ${BASHINCDIR}/shmbutil.h
 
+timers.o: ${topdir}/bashansi.h ${BASHINCDIR}/ansi_stdlib.h
+timers.o: ${BASHINCDIR}/stdc.h
+timers.o: ${topdir}/xmalloc.h ${topdir}/sig.h
+timers.o: ${BASHINCDIR}/posixtime.h ${BASHINCDIR}/stat-time.h
+timers.o: ${BASHINCDIR}/posixselect.h
+timers.o: ${topdir}/bashjmp.h ${BASHINCDIR}/posixjmp.h
+timers.o: ${BASHINCDIR}/timer.h
+
 unicode.o: ${topdir}/bashansi.h ${BASHINCDIR}/ansi_stdlib.h
 unicode.o: ${BASHINCDIR}/stdc.h
 unicode.o: ${topdir}/xmalloc.h
index bdd96f840613e129eec959ec649c6228df7f99ad..0403f91cf817eef839a0a95d428b758b6cc5a54a 100644 (file)
@@ -47,7 +47,7 @@
 #define _to_wlower(wc) (iswupper (wc) ? towlower (wc) : (wc))
 
 #if !defined (HANDLE_MULTIBYTE)
-#  define cval(s, i)   ((s)[(i)])
+#  define cval(s, i, l)        ((s)[(i)])
 #  define iswalnum(c)  (isalnum(c))
 #  define TOGGLE(x)    (ISUPPER (x) ? tolower ((unsigned char)x) : (TOUPPER (x)))
 #else
@@ -75,18 +75,16 @@ extern char *substring PARAMS((char *, int, int));
 
 #if defined (HANDLE_MULTIBYTE)
 static wchar_t
-cval (s, i)
+cval (s, i, l)
      char *s;
-     int i;
+     int i, l;
 {
   size_t tmp;
   wchar_t wc;
-  int l;
   mbstate_t mps;  
 
   if (MB_CUR_MAX == 1 || is_basic (s[i]))
     return ((wchar_t)s[i]);
-  l = strlen (s);
   if (i >= (l - 1))
     return ((wchar_t)s[i]);
   memset (&mps, 0, sizeof (mbstate_t));
@@ -143,7 +141,7 @@ sh_modcase (string, pat, flags)
   inword = 0;
   while (start < end)
     {
-      wc = cval ((char *)string, start);
+      wc = cval ((char *)string, start, end);
 
       if (iswalnum (wc) == 0)
        inword = 0;
index 97a1dc18c1d37c6f355829a867c46848d94a8e7d..46eaf509b126e36c8f7091e74c65bc98f7384677 100644 (file)
@@ -20,7 +20,7 @@
 
 #include <config.h>
 
-#ifdef HAVE_LONG_LONG
+#ifdef HAVE_LONG_LONG_INT
 
 #define LONG           long long
 #define UNSIGNED_LONG  unsigned long long
index 695165fdcd0d99e2ad5dbe7ec40ee779ec5e985e..2ac446165fb008402e533f105f0b557544ad8b9b 100644 (file)
@@ -110,7 +110,7 @@ nchars_avail (fd, nchars)
 #if defined(HAVE_SELECT)
   fd_set readfds, exceptfds;
 #endif
-#if defined (HAVE_PSELECT)
+#if defined (HAVE_PSELECT) || defined (HAVE_SELECT)
   sigset_t set, oset;
 #endif
 
index 65eb99d9f9c6bda31c38218951fbf40bf0da1d84..edc5c6f20258c71457f41afe709070ecd7149b4f 100644 (file)
@@ -167,8 +167,8 @@ getdtablesize ()
 #  endif
 void
 bcopy (s,d,n)
-     char *d, *s;
-     int n;
+     void *d, *s;
+     size_t n;
 {
   FASTCOPY (s, d, n);
 }
@@ -180,8 +180,8 @@ bcopy (s,d,n)
 #  endif
 void
 bzero (s, n)
-     char *s;
-     int n;
+     void *s; 
+     size_t n;
 {
   register int i;
   register char *r;
@@ -197,7 +197,7 @@ bzero (s, n)
 int
 gethostname (name, namelen)
      char *name;
-     int namelen;
+     size_t namelen;
 {
   int i;
   struct utsname ut;
@@ -214,7 +214,7 @@ gethostname (name, namelen)
 int
 gethostname (name, namelen)
      char *name;
-     int namelen;
+     size_t namelen;
 {
   strncpy (name, "unknown", namelen);
   name[namelen] = '\0';
@@ -237,7 +237,7 @@ killpg (pgrp, sig)
 int
 mkfifo (path, mode)
      char *path;
-     int mode;
+     mode_t mode;
 {
 #if defined (S_IFIFO)
   return (mknod (path, (mode | S_IFIFO), 0));
index 6473ddfccafaa904d41cb8da59c9bc27f985e046..dd76e9fcb7c5bccba1726b00d411343600ab71c7 100644 (file)
@@ -1,6 +1,6 @@
 /* setlinebuf.c - line-buffer a stdio stream. */
 
-/* Copyright (C) 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1997,2022 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
 #include <xmalloc.h>
 
 #if defined (USING_BASH_MALLOC)
-#  define LBUF_BUFSIZE 1008
+#  define LBUF_BUFSIZE 2016
 #else
 #  define LBUF_BUFSIZE BUFSIZ
 #endif
 
+static char *stdoutbuf = 0;
+static char *stderrbuf = 0;
+
 /* Cause STREAM to buffer lines as opposed to characters or blocks. */
 int
 sh_setlinebuf (stream)
      FILE *stream;
 {
-  char *local_linebuf;
-
 #if !defined (HAVE_SETLINEBUF) && !defined (HAVE_SETVBUF)
   return (0);
 #endif
 
+#if defined (HAVE_SETVBUF)
+  char *local_linebuf;
+
 #if defined (USING_BASH_MALLOC)
-  local_linebuf = (char *)xmalloc (LBUF_BUFSIZE);
+  if (stream == stdout && stdoutbuf == 0)
+    local_linebuf = stdoutbuf = (char *)xmalloc (LBUF_BUFSIZE);
+  else if (stream == stderr && stderrbuf == 0)
+    local_linebuf = stderrbuf = (char *)xmalloc (LBUF_BUFSIZE);
+  else
+    local_linebuf = (char *)NULL;      /* let stdio handle it */
 #else
   local_linebuf = (char *)NULL;
 #endif
 
-#if defined (HAVE_SETVBUF)
-
-#  if defined (SETVBUF_REVERSED)
-  return (setvbuf (stream, _IOLBF, local_linebuf, LBUF_BUFSIZE));
-#  else /* !SETVBUF_REVERSED */
   return (setvbuf (stream, local_linebuf, _IOLBF, LBUF_BUFSIZE));
-#  endif /* !SETVBUF_REVERSED */
-# else /* !HAVE_SETVBUF */
+#else /* !HAVE_SETVBUF */
 
   setlinebuf (stream);
   return (0);
index d6e7f904e4567685d32ba7582d735ec707fe341c..a717d45c9fd71aa33a3b0cbe0661336f95e3e33e 100644 (file)
@@ -2,7 +2,7 @@
  * shmatch.c -- shell interface to posix regular expression matching.
  */
 
-/* Copyright (C) 2003-2015 Free Software Foundation, Inc.
+/* Copyright (C) 2003-2022 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
 
 extern int glob_ignore_case, match_ignore_case;
 
+#if defined (ARRAY_VARS)
+extern SHELL_VAR *builtin_find_indexed_array (char *, int);
+#endif
+
 int
 sh_regmatch (string, pattern, flags)
      const char *string;
@@ -92,11 +96,16 @@ sh_regmatch (string, pattern, flags)
   /* Store the parenthesized subexpressions in the array BASH_REMATCH.
      Element 0 is the portion that matched the entire regexp.  Element 1
      is the part that matched the first subexpression, and so on. */
-  unbind_variable_noref ("BASH_REMATCH");
+#if 1
+  unbind_global_variable_noref ("BASH_REMATCH");
   rematch = make_new_array_variable ("BASH_REMATCH");
-  amatch = array_cell (rematch);
+#else
+  /* TAG:bash-5.3 */
+  rematch = builtin_find_indexed_array ("BASH_REMATCH", 1);
+#endif
+  amatch = rematch ? array_cell (rematch) : (ARRAY *)0;
 
-  if (matches && (flags & SHMAT_SUBEXP) && result == EXECUTION_SUCCESS && subexp_str)
+  if (matches && amatch && (flags & SHMAT_SUBEXP) && result == EXECUTION_SUCCESS && subexp_str)
     {
       for (subexp_ind = 0; subexp_ind <= regex.re_nsub; subexp_ind++)
        {
index 680f84ed87e80502a69591bd85b88784bd6ef584..26fe0185372c388f297c9d4bc7b3effc5fe3df75 100644 (file)
@@ -311,12 +311,13 @@ sh_backslash_quote (string, table, flags)
   return (result);
 }
 
-#if defined (PROMPT_STRING_DECODE)
+#if defined (PROMPT_STRING_DECODE) || defined (TRANSLATABLE_STRINGS)
 /* Quote characters that get special treatment when in double quotes in STRING
-   using backslashes.  Return a new string. */
+   using backslashes. FLAGS is reserved for future use. Return a new string. */
 char *
-sh_backslash_quote_for_double_quotes (string)
+sh_backslash_quote_for_double_quotes (string, flags)
      char *string;
+     int flags;
 {
   unsigned char c;
   char *result, *r, *s, *send;
index 406a3a507078bbe1c37015f05665d3ac63409e33..1f0f4c736f16e2ace663e1a437cefb349e11c76f 100644 (file)
@@ -70,7 +70,7 @@
 #endif
 
 #if defined(DRIVER) && !defined(HAVE_CONFIG_H)
-#define HAVE_LONG_LONG
+#define HAVE_LONG_LONG_INT
 #define HAVE_LONG_DOUBLE
 #ifdef __linux__
 #define HAVE_PRINTF_A_FORMAT
@@ -286,7 +286,7 @@ static void floating PARAMS((struct DATA *, double));
 static void exponent PARAMS((struct DATA *, double));
 #endif
 static void number PARAMS((struct DATA *, unsigned long, int));
-#ifdef HAVE_LONG_LONG
+#ifdef HAVE_LONG_LONG_INT
 static void lnumber PARAMS((struct DATA *, unsigned long long, int));
 #endif
 static void pointer PARAMS((struct DATA *, unsigned long));
@@ -767,7 +767,7 @@ number(p, d, base)
   FREE (t);
 }
 
-#ifdef HAVE_LONG_LONG
+#ifdef HAVE_LONG_LONG_INT
 /*
  * identical to number() but works for `long long'
  */
@@ -1262,7 +1262,7 @@ vsnprintf_internal(data, string, length, format, args)
   long double ld;      /* for later */
 #endif
   unsigned long ul;
-#ifdef HAVE_LONG_LONG
+#ifdef HAVE_UNSIGNED_LONG_LONG_INT
   unsigned long long ull;
 #endif
   int state, i, c, n;
@@ -1486,7 +1486,7 @@ conv_break:
                /* FALLTHROUGH */
              case 'u':
                STAR_ARGS(data);
-#ifdef HAVE_LONG_LONG
+#ifdef HAVE_LONG_LONG_INT
                if (data->flags & PF_LONGLONG)
                  {
                    ull = GETARG (unsigned long long);
@@ -1506,7 +1506,7 @@ conv_break:
              case 'd':  /* decimal */
              case 'i':
                STAR_ARGS(data);
-#ifdef HAVE_LONG_LONG
+#ifdef HAVE_LONG_LONG_INT
                if (data->flags & PF_LONGLONG)
                  {
                    ull = GETARG (long long);
@@ -1522,7 +1522,7 @@ conv_break:
                break;
              case 'o':  /* octal */
                STAR_ARGS(data);
-#ifdef HAVE_LONG_LONG
+#ifdef HAVE_LONG_LONG_INT
                if (data->flags & PF_LONGLONG)
                  {
                    ull = GETARG (unsigned long long);
@@ -1539,7 +1539,7 @@ conv_break:
              case 'x': 
              case 'X':  /* hexadecimal */
                STAR_ARGS(data);
-#ifdef HAVE_LONG_LONG
+#ifdef HAVE_LONG_LONG_INT
                if (data->flags & PF_LONGLONG)
                  {
                    ull = GETARG (unsigned long long);
@@ -1602,7 +1602,7 @@ conv_break:
                state = 0;
                break;
              case 'n':
-#ifdef HAVE_LONG_LONG
+#ifdef HAVE_LONG_LONG_INT
                if (data->flags & PF_LONGLONG)
                  *(GETARG (long long *)) = data->counter;
                else
@@ -2082,7 +2082,7 @@ main()
   printf("<%s>\n", holder);
   printf("<%s>\n\n", h);
 
-#ifdef HAVE_LONG_LONG
+#ifdef HAVE_LONG_LONG_INT
   printf ("<%%llu> LLONG_MAX+1\n");
   i = snprintf(holder, 100, "%llu", (unsigned long long)(LLONG_MAX)+1);
   i = asprintf(&h, "%llu", (unsigned long long)(LLONG_MAX)+1);
index 90fa3532c500aadbe15674cfe881afe25edcb42d..3d35f7c0aedd1d71b889eaadfe08a7a582576363 100644 (file)
@@ -17,7 +17,6 @@
    You should have received a copy of the GNU General Public License
    along with Bash.  If not, see <http://www.gnu.org/licenses/>.
 */
-                              
 
 #include <config.h>
 
index 08ccb9a34b63647e32aebb88d7974779a3f41178..60bee79f723e0a4d2a88414562144f9dd549f4f7 100644 (file)
  */
 #include <config.h>
 
+#include <sys/types.h>
+
 #include <stdio.h>
 #include <ctype.h>
-#include <time.h>
+#include <posixtime.h>
 #include <errno.h>
 
-#if defined(TM_IN_SYS_TIME)
-#include <sys/types.h>
-#include <sys/time.h>
-#endif
-
 #include <stdlib.h>
 #include <string.h>
 
index 676e02ef0eed4ffdb5f65c3a27a98bd09b96f6eb..584fa0ba20f5fc81c9beaac689da7e98ceb5383d 100644 (file)
@@ -51,7 +51,7 @@ extern long strtol PARAMS((const char *, char **, int));
 #ifndef HAVE_DECL_STRTOLL
 "this configure-time declaration test was not run"
 #endif
-#if !HAVE_DECL_STRTOLL && HAVE_LONG_LONG
+#if !HAVE_DECL_STRTOLL && HAVE_LONG_LONG_INT
 extern long long strtoll PARAMS((const char *, char **, int));
 #endif
 
@@ -65,7 +65,7 @@ strtoimax (ptr, endptr, base)
      char **endptr;
      int base;
 {
-#if HAVE_LONG_LONG
+#if HAVE_LONG_LONG_INT
   verify(size_is_that_of_long_or_long_long,
         (sizeof (intmax_t) == sizeof (long) ||
          sizeof (intmax_t) == sizeof (long long)));
@@ -86,20 +86,20 @@ main ()
 {
   char *p, *endptr;
   intmax_t x;
-#if HAVE_LONG_LONG
+#if HAVE_LONG_LONG_INT
   long long y;
 #endif
   long z;
   
   printf ("sizeof intmax_t: %d\n", sizeof (intmax_t));
 
-#if HAVE_LONG_LONG
+#if HAVE_LONG_LONG_INT
   printf ("sizeof long long: %d\n", sizeof (long long));
 #endif
   printf ("sizeof long: %d\n", sizeof (long));
 
   x = strtoimax("42", &endptr, 10);
-#if HAVE_LONG_LONG
+#if HAVE_LONG_LONG_INT
   y = strtoll("42", &endptr, 10);
 #else
   y = -1;
index 8aa7478806e4b14d7dd8d0df8ca03a8907a66d21..c839a97ca75f713d4376aca654169db8707c0ec3 100644 (file)
@@ -20,7 +20,7 @@
 
 #include <config.h>
 
-#if !defined (HAVE_STRTOL)
+#if !HAVE_STRTOL
 
 #include <chartypes.h>
 #include <errno.h>
index f6060eefa44d0da4f675e54813069f8373eb257c..f90300b9fbcf71e8a4fe8b30e2caa5ef10c639b6 100644 (file)
 
 #include <config.h>
 
-#if defined (HAVE_LONG_LONG) && !defined (HAVE_STRTOLL)
+#if defined (HAVE_LONG_LONG_INT) && !HAVE_STRTOLL
 
 #define QUAD           1
 #undef HAVE_STRTOL
 
 #include "strtol.c"
 
-#endif /* HAVE_LONG_LONG && !HAVE_STRTOLL */
+#endif /* HAVE_LONG_LONG_INT && !HAVE_STRTOLL */
index 02ddebb902a2494b26ab90207661104876c8358f..fe6592e5a1fac0ab01abe111e5a4fab6d2a664f2 100644 (file)
@@ -20,7 +20,7 @@
 
 #include <config.h>
 
-#if defined (HAVE_LONG_LONG) && !defined (HAVE_STRTOULL)
+#if defined (HAVE_UNSIGNED_LONG_LONG_INT) && !HAVE_STRTOULL
 
 #define QUAD           1
 #define        UNSIGNED        1
@@ -28,4 +28,4 @@
 
 #include "strtol.c"
 
-#endif /* HAVE_LONG_LONG && !HAVE_STRTOULL */
+#endif /* HAVE_UNSIGNED_LONG_LONG_INT && !HAVE_STRTOULL */
index 0247e57bd96b2c630fe6074fd7f6b80ae231fbfb..2e26efcf2e93875ad16737f29e8153f6f89b3513 100644 (file)
@@ -51,7 +51,7 @@ extern unsigned long strtoul PARAMS((const char *, char **, int));
 #ifndef HAVE_DECL_STRTOULL
 "this configure-time declaration test was not run"
 #endif
-#if !HAVE_DECL_STRTOULL && HAVE_UNSIGNED_LONG_LONG
+#if !HAVE_DECL_STRTOULL && HAVE_UNSIGNED_LONG_LONG_INT
 extern unsigned long long strtoull PARAMS((const char *, char **, int));
 #endif
 
@@ -65,7 +65,7 @@ strtoumax (ptr, endptr, base)
      char **endptr;
      int base;
 {
-#if HAVE_UNSIGNED_LONG_LONG
+#if HAVE_UNSIGNED_LONG_LONG_INT
   verify (size_is_that_of_unsigned_long_or_unsigned_long_long,
          (sizeof (uintmax_t) == sizeof (unsigned long) ||
           sizeof (uintmax_t) == sizeof (unsigned long long)));
@@ -86,20 +86,20 @@ main ()
 {
   char *p, *endptr;
   uintmax_t x;
-#if HAVE_UNSIGNED_LONG_LONG
+#if HAVE_UNSIGNED_LONG_LONG_INT
   unsigned long long y;
 #endif
   unsigned long z;
 
   printf ("sizeof uintmax_t: %d\n", sizeof (uintmax_t));
 
-#if HAVE_UNSIGNED_LONG_LONG
+#if HAVE_UNSIGNED_LONG_LONG_INT
   printf ("sizeof unsigned long long: %d\n", sizeof (unsigned long long));
 #endif
   printf ("sizeof unsigned long: %d\n", sizeof (unsigned long));
 
   x = strtoumax("42", &endptr, 10);
-#if HAVE_LONG_LONG
+#if HAVE_LONG_LONG_INT
   y = strtoull("42", &endptr, 10);
 #else
   y = 0;
diff --git a/lib/sh/strvis.c b/lib/sh/strvis.c
new file mode 100644 (file)
index 0000000..7a11d57
--- /dev/null
@@ -0,0 +1,154 @@
+/* strvis.c - make unsafe graphical characters in a string visible. */
+
+/* Copyright (C) 2022 Free Software Foundation, Inc.
+
+   This file is part of GNU Bash, the Bourne Again SHell.
+   
+   Bash is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+
+   Bash is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with Bash.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/* This is a stripped-down version suitable for the shell's use. */
+#include <config.h>
+
+#include <unistd.h>
+
+#include "bashansi.h"
+#include <stdio.h>
+
+#include "chartypes.h"
+#include "bashintl.h"
+#include "shmbutil.h"
+
+#define SAFECHAR(c)   ((c) == ' ' || (c) == '\t')
+
+#ifndef RUBOUT
+#define RUBOUT 0x7f
+#endif
+
+#ifndef CTRL_CHAR
+#define CTRL_CHAR(c)   ((c) < 0x20)
+#endif
+
+#ifndef META_CHAR
+#define META_CHAR(c)   ((c) > 0x7f && (c) <= UCHAR_MAX)
+#endif
+
+#ifndef UNCTRL
+#define UNCTRL(c)      (TOUPPER ((c) | 0x40))
+#endif
+
+#ifndef UNMETA
+#define UNMETA(c)      ((c) & 0x7f)
+#endif
+
+int
+sh_charvis (s, sindp, slen, ret, rindp)
+     const char *s;
+     size_t *sindp;
+     size_t slen;
+     char *ret;
+     size_t *rindp;
+{
+  unsigned char c;
+  size_t si, ri;
+  const char *send;
+  DECLARE_MBSTATE;
+
+  si = *sindp;
+  ri = *rindp;
+  c = s[*sindp];
+
+#if defined (HANDLE_MULTIBYTE)
+  send = (locale_mb_cur_max > 1) ? s + slen : 0;
+#else
+  send = 0;
+#endif
+
+  if (SAFECHAR (c))
+    {
+      ret[ri++] = c;
+      si++;
+    }
+  else if (c == RUBOUT)
+    {
+      ret[ri++] = '^';
+      ret[ri++] = '?';
+      si++;
+    }
+  else if (CTRL_CHAR (c))
+    {
+      ret[ri++] = '^';
+      ret[ri++] = UNCTRL (c);
+      si++;
+    }
+#if defined (HANDLE_MULTIBYTE)
+  else if (locale_utf8locale && (c & 0x80))
+    COPY_CHAR_I (ret, ri, s, send, si);
+  else if (locale_mb_cur_max > 1 && is_basic (c) == 0)
+    COPY_CHAR_I (ret, ri, s, send, si);
+#endif
+  else if (META_CHAR (c))
+    {
+      ret[ri++] = 'M';
+      ret[ri++] = '-';
+      ret[ri++] = UNMETA (c);
+      si++;
+    }
+  else
+    ret[ri++] = s[si++];
+  
+  *sindp = si;
+  *rindp = ri;
+
+  return si;    
+}
+
+/* Return a new string with `unsafe' non-graphical characters in S rendered
+   in a visible way. */
+char *
+sh_strvis (string)
+     const char *string;
+{
+  size_t slen, sind;
+  char *ret;
+  size_t retind, retsize;
+  unsigned char c;
+  DECLARE_MBSTATE;
+
+  if (string == 0)
+    return 0;
+  if (*string == '\0')
+    {
+      if ((ret = (char *)malloc (1)) == 0)
+       return 0;
+      ret[0] = '\0';
+      return ret;
+    }
+
+  slen = strlen (string);
+  retsize = 3 * slen + 1;
+
+  ret = (char *)malloc (retsize);
+  if (ret == 0)
+    return 0;
+
+  retind = 0;
+  sind = 0;
+
+  while (string[sind])
+    sind = sh_charvis (string, &sind, slen, ret, &retind);
+
+  ret[retind] = '\0';
+  return ret;
+}
diff --git a/lib/sh/timers.c b/lib/sh/timers.c
new file mode 100644 (file)
index 0000000..69b754c
--- /dev/null
@@ -0,0 +1,262 @@
+/* timers - functions to manage shell timers */
+
+/* Copyright (C) 2021 Free Software Foundation, Inc.
+
+   This file is part of GNU Bash, the Bourne Again SHell.
+
+   Bash is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+
+   Bash is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with Bash.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "config.h"
+
+#include "bashtypes.h"
+#include "posixtime.h"
+
+#if defined (HAVE_UNISTD_H)
+#include <unistd.h>
+#endif
+
+#if defined (HAVE_SELECT)
+#  include "posixselect.h"
+#  include "stat-time.h"
+#endif
+
+#include "sig.h"
+#include "bashjmp.h"
+#include "xmalloc.h"
+
+#include "timer.h"
+
+#include <errno.h>
+#if !defined (errno)
+extern int errno;
+#endif /* !errno */
+
+#ifndef FREE
+#define FREE(s)  do { if (s) free (s); } while (0)
+#endif
+
+extern unsigned int falarm (unsigned int, unsigned int);
+
+static void shtimer_zero (sh_timer *);
+
+static void
+shtimer_zero (sh_timer *t)
+{
+  t->tmout.tv_sec = 0;
+  t->tmout.tv_usec = 0;
+
+  t->fd = -1;
+  t->flags = t->alrmflag = 0;
+
+  t->alrm_handler = t->old_handler = 0;
+
+  memset (t->jmpenv, '\0', sizeof (t->jmpenv));
+
+  t->tm_handler = 0;
+  t->data = 0;
+}
+
+sh_timer *
+shtimer_alloc (void)
+{
+  sh_timer *t;
+
+  t = (sh_timer *)xmalloc (sizeof (sh_timer));
+  shtimer_zero (t);
+  return t;
+}
+
+void
+shtimer_flush (sh_timer *t)
+{
+  /* The caller can manage t->data arbitrarily as long as it frees and sets
+     t->data to 0 before calling this function. Otherwise, we do what we can
+     to avoid memleaks. */
+  FREE (t->data);
+  shtimer_zero (t);
+}
+
+void
+shtimer_dispose (sh_timer *t)
+{
+  free (t);
+}
+
+/* We keep the timer as an offset into the future from the time it's set. */
+void
+shtimer_set (sh_timer *t, time_t sec, long usec)
+{
+  struct timeval now;
+
+  if (t->flags & SHTIMER_ALARM)
+    {
+      t->alrmflag = 0;         /* just paranoia */
+      t->old_handler = set_signal_handler (SIGALRM, t->alrm_handler);
+      t->flags |= SHTIMER_SIGSET;
+      falarm (t->tmout.tv_sec = sec, t->tmout.tv_usec = usec);
+      t->flags |= SHTIMER_ALRMSET;
+      return;
+    }
+
+  if (gettimeofday (&now, 0) < 0)
+    timerclear (&now);
+
+  t->tmout.tv_sec = now.tv_sec + sec;
+  t->tmout.tv_usec = now.tv_usec + usec;
+  if (t->tmout.tv_usec > USEC_PER_SEC)
+    {
+      t->tmout.tv_sec++;
+      t->tmout.tv_usec -= USEC_PER_SEC;
+    }
+}
+
+void
+shtimer_unset (sh_timer *t)
+{
+  t->tmout.tv_sec = 0;
+  t->tmout.tv_usec = 0;
+
+  if (t->flags & SHTIMER_ALARM)
+    {
+      t->alrmflag = 0;
+      if (t->flags & SHTIMER_ALRMSET)
+       falarm (0, 0);
+      if (t->old_handler && (t->flags & SHTIMER_SIGSET))
+       {
+         set_signal_handler (SIGALRM, t->old_handler);
+         t->flags &= ~SHTIMER_SIGSET;
+         t->old_handler = 0;
+       }
+    }
+}
+
+void
+shtimer_cleanup (sh_timer *t)
+{
+  shtimer_unset (t);
+}
+
+void
+shtimer_clear (sh_timer *t)
+{
+  shtimer_unset (t);
+  shtimer_dispose (t);
+}
+
+int
+shtimer_chktimeout (sh_timer *t)
+{
+  struct timeval now;
+  int r;
+
+  /* Use the flag to avoid returning sigalrm_seen here */
+  if (t->flags & SHTIMER_ALARM)
+    return t->alrmflag;
+
+  /* Could check a flag for this */
+  if (t->tmout.tv_sec == 0 && t->tmout.tv_usec == 0)
+    return 0;
+
+  if (gettimeofday (&now, 0) < 0)
+    return 0;
+  r = ((now.tv_sec > t->tmout.tv_sec) ||
+       (now.tv_sec == t->tmout.tv_sec && now.tv_usec >= t->tmout.tv_usec));
+
+  return r;
+}
+
+#if defined (HAVE_SELECT) || defined (HAVE_PSELECT)
+int
+shtimer_select (sh_timer *t)
+{
+  int r, nfd;
+  sigset_t blocked_sigs, prevmask;
+  struct timeval now, tv;
+  fd_set readfds;
+#if defined (HAVE_PSELECT)
+  struct timespec ts;
+#endif
+
+  /* We don't want a SIGCHLD to interrupt this */
+  sigemptyset (&blocked_sigs);
+#  if defined (SIGCHLD)
+  sigaddset (&blocked_sigs, SIGCHLD);
+#  endif
+
+  if (gettimeofday (&now, 0) < 0)
+    {
+      if (t->flags & SHTIMER_LONGJMP)
+       sh_longjmp (t->jmpenv, 1);
+      else
+       return -1;
+    }
+
+  /* If the timer has already expired, return immediately */    
+  if ((now.tv_sec > t->tmout.tv_sec) ||
+       (now.tv_sec == t->tmout.tv_sec && now.tv_usec >= t->tmout.tv_usec))
+    {
+      if (t->flags & SHTIMER_LONGJMP)
+       sh_longjmp (t->jmpenv, 1);
+      else if (t->tm_handler)
+       return ((*t->tm_handler) (t));
+      else
+       return 0;
+    }
+
+  /* compute timeout */
+  tv.tv_sec = t->tmout.tv_sec - now.tv_sec;
+  tv.tv_usec = t->tmout.tv_usec - now.tv_usec;
+  if (tv.tv_usec < 0)
+    {
+      tv.tv_sec--;
+      tv.tv_usec += USEC_PER_SEC;
+    }
+
+#if defined (HAVE_PSELECT)
+  ts.tv_sec = tv.tv_sec;
+  ts.tv_nsec = tv.tv_usec * 1000;
+#else
+  sigemptyset (&prevmask);
+#endif /* !HAVE_PSELECT */
+
+  nfd = (t->fd >= 0) ? t->fd + 1 : 0;
+  FD_ZERO (&readfds);
+  if (t->fd >= 0)
+    FD_SET (t->fd, &readfds);
+
+#if defined (HAVE_PSELECT)
+  r = pselect(nfd, &readfds, (fd_set *)0, (fd_set *)0, &ts, &blocked_sigs);
+#else
+  sigprocmask (SIG_SETMASK, &blocked_sigs, &prevmask);
+  r = select(nfd, &readfds, (fd_set *)0, (fd_set *)0, &tv);
+  sigprocmask (SIG_SETMASK, &prevmask, NULL);
+#endif
+
+  if (r < 0)
+    return r;          /* caller will handle */
+  else if (r == 0 && (t->flags & SHTIMER_LONGJMP))
+    sh_longjmp (t->jmpenv, 1);
+  else if (r == 0 && t->tm_handler)
+    return ((*t->tm_handler) (t));
+  else
+    return r;
+}
+#endif /* !HAVE_TIMEVAL || !HAVE_SELECT */
+
+int
+shtimer_alrm (sh_timer *t)
+{
+  return 0;
+}
index d95d1e25f282d961ed8a3736cc775e114219a9b1..d781353b6b4cda33448d2eb1febbdb690d1f8e4c 100644 (file)
@@ -145,7 +145,7 @@ u32tocesc (wc, s)
   if (wc < 0x10000)
     l = sprintf (s, "\\u%04X", wc);
   else
-    l = sprintf (s, "\\u%08X", wc);
+    l = sprintf (s, "\\U%08X", wc);
   return l;
 }
 
index 861c7c89b571a0908d73c6cc8aa3bee813b256e7..846fcd58a3b1fe410b06386611b54f731f76b587 100644 (file)
@@ -68,6 +68,11 @@ extern int errno;
 extern int shell_tty;
 
 #if defined (READLINE)
+/* Let's not call readline, forcing readline to initialize the termcap/terminfo
+   variables it needs, unless we have to. */
+extern int interactive_shell;
+extern int no_line_editing;
+extern int bash_readline_initialized;
 extern void rl_set_screen_size PARAMS((int, int));
 #endif
 extern void sh_set_lines_and_columns PARAMS((int, int));
@@ -87,12 +92,13 @@ get_new_window_size (from_sig, rp, cp)
     {
       sh_set_lines_and_columns (win.ws_row, win.ws_col);
 #if defined (READLINE)
-      rl_set_screen_size (win.ws_row, win.ws_col);
+      if ((interactive_shell && no_line_editing == 0) || bash_readline_initialized)
+       rl_set_screen_size (win.ws_row, win.ws_col);
+#endif
       if (rp)
        *rp = win.ws_row;
       if (cp)
        *cp = win.ws_col;
-#endif
     }
 #endif
 }
index 8ded144263642190619e38b7b3ad8aa1ac25399a..5e1ef724294f79793d4f7d0810355a649be057aa 100644 (file)
@@ -68,7 +68,8 @@ zgetline (fd, lineptr, n, delim, unbuffered_read)
      int delim;
      int unbuffered_read;
 {
-  int nr, retval;
+  int retval;
+  size_t nr;
   char *line, c;
 
   if (lineptr == 0 || n == 0 || (*lineptr == 0 && *n != 0))
index f9e9ed71e6cd24a6e9cdb6b832781e0a6e79586d..9ff50a474d7b0f65e016f923d326086d1ed9b579 100644 (file)
@@ -54,7 +54,7 @@ zmapfd (fd, ostr, fn)
   int rval;
   char lbuf[ZBUFSIZ];
   char *result;
-  int rsize, rind;
+  size_t rsize, rind;
 
   rval = 0;
   result = (char *)xmalloc (rsize = ZBUFSIZ);
index 71a06a76dae3964eb4dbd0651de0b34692aecd99..dafb7f60ab0ced1da03c2ba739777b57d0199dd1 100644 (file)
@@ -46,6 +46,7 @@ extern int executing_builtin;
 extern void check_signals_and_traps (void);
 extern void check_signals (void);
 extern int signal_is_trapped (int);
+extern int read_builtin_timeout (int);
 
 /* Read LEN bytes from FD into BUF.  Retry the read on EINTR.  Any other
    error causes the loop to break. */
@@ -58,7 +59,10 @@ zread (fd, buf, len)
   ssize_t r;
 
   check_signals ();    /* check for signals before a blocking read */
-  while ((r = read (fd, buf, len)) < 0 && errno == EINTR)
+  /* should generalize into a mechanism where different parts of the shell can
+     `register' timeouts and have them checked here. */
+  while (((r = read_builtin_timeout (fd)) < 0 || (r = read (fd, buf, len)) < 0) &&
+            errno == EINTR)
     {
       int t;
       t = errno;
index ba3dab2c235e7c592d10007d97cf932976a69423..87fae05f6d84a7b6773e7ca3909f05e521d42f5f 100644 (file)
@@ -52,15 +52,18 @@ extern char *realloc ();
 
 #else /* not HAVE_CONFIG_H */
 
-#ifdef STDC_HEADERS
+#ifdef HAVE_STDLIB_H
 #include <stdlib.h>
-#include <string.h>
 #else
 char *getenv ();
 char *malloc ();
 char *realloc ();
 #endif
 
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
 /* Do this after the include, in case string.h prototypes bcopy.  */
 #if (defined(HAVE_STRING_H) || defined(STDC_HEADERS)) && !defined(bcopy)
 #define bcopy(s, d, n) memcpy ((d), (s), (n))
index c21d3897c9280d389895a9cd616e2cd2981152db..e61c6718dc2f03e5a06db5e2fe15eb9ada24aad3 100644 (file)
@@ -4,7 +4,7 @@
 #                                                                 #
 ####################################################################
 
-# Copyright (C) 1996-2009 Free Software Foundation, Inc.     
+# Copyright (C) 1996-2021 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
@@ -42,6 +42,7 @@ PROFILE_FLAGS = @PROFILE_FLAGS@
 
 CFLAGS = @CFLAGS@
 LOCAL_CFLAGS = @LOCAL_CFLAGS@
+STYLE_CFLAGS = @STYLE_CFLAGS@
 CPPFLAGS = @CPPFLAGS@
 LDFLAGS = @LDFLAGS@ @LOCAL_LDFLAGS@
 
@@ -53,7 +54,7 @@ BASHINCDIR = ${topdir}/include
 INCLUDES = -I. -I../.. -I$(topdir) -I${BASHINCDIR} -I$(topdir)/lib
 
 CCFLAGS = ${ASAN_CFLAGS} $(PROFILE_FLAGS) $(DEFS) $(LOCAL_DEFS) $(CPPFLAGS) \
-         ${INCLUDES} $(LOCAL_CFLAGS) $(CFLAGS)
+         ${INCLUDES} $(STYLE_CFLAGS) $(LOCAL_CFLAGS) $(CFLAGS)
 
 .c.o:
        $(CC) -c $(CCFLAGS) $<
index e26dd0476f7b3369ff842c26716640b7a4b99b89..bc8022afc329f3997a7f43548a73f212d09a0952 100644 (file)
@@ -1,6 +1,6 @@
 /* tilde.h: Externally available variables and function in libtilde.a. */
 
-/* Copyright (C) 1992-2009 Free Software Foundation, Inc.
+/* Copyright (C) 1992-2009,2021 Free Software Foundation, Inc.
 
    This file contains the Readline Library (Readline), a set of
    routines for providing Emacs style line input to programs that ask
 extern "C" {
 #endif
 
-/* A function can be defined using prototypes and compile on both ANSI C
-   and traditional C compilers with something like this:
-       extern char *func PARAMS((char *, char *, int)); */
-
-#if !defined (PARAMS)
-#  if defined (__STDC__) || defined (__GNUC__) || defined (__cplusplus)
-#    define PARAMS(protos) protos
-#  else
-#    define PARAMS(protos) ()
-#  endif
-#endif
-
-typedef char *tilde_hook_func_t PARAMS((char *));
+typedef char *tilde_hook_func_t (char *);
 
 /* If non-null, this contains the address of a function that the application
    wants called before trying the standard tilde expansions.  The function
@@ -64,14 +52,14 @@ extern char **tilde_additional_prefixes;
 extern char **tilde_additional_suffixes;
 
 /* Return a new string which is the result of tilde expanding STRING. */
-extern char *tilde_expand PARAMS((const char *));
+extern char *tilde_expand (const char *);
 
 /* Do the work of tilde expansion on FILENAME.  FILENAME starts with a
    tilde.  If there is no expansion, call tilde_expansion_failure_hook. */
-extern char *tilde_expand_word PARAMS((const char *));
+extern char *tilde_expand_word (const char *);
 
 /* Find the portion of the string beginning with ~ that should be expanded. */
-extern char *tilde_find_word PARAMS((const char *, int, int *));
+extern char *tilde_find_word (const char *, int, int *);
 
 #ifdef __cplusplus
 }
index 17ccc5856e11b0d4bd29e6f5ddd870ee764dd39f..fabf7b12537cf0ffb74e6c5de68ae3af4add9af4 100644 (file)
--- a/locale.c
+++ b/locale.c
@@ -1,6 +1,6 @@
 /* locale.c - Miscellaneous internationalization functions. */
 
-/* Copyright (C) 1996-2009,2012,2016,2020 Free Software Foundation, Inc.
+/* Copyright (C) 1996-2009,2012,2016-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -47,6 +47,8 @@ int locale_utf8locale;
 int locale_mb_cur_max; /* value of MB_CUR_MAX for current locale (LC_CTYPE) */
 int locale_shiftstates = 0;
 
+int singlequote_translations = 0;      /* single-quote output of $"..." */
+
 extern int dump_translatable_strings, dump_po_strings;
 
 /* The current locale when the program begins */
@@ -91,7 +93,7 @@ set_default_locale ()
 #if defined (HANDLE_MULTIBYTE)
   locale_shiftstates = mblen ((char *)NULL, 0);
 #else
-  local_shiftstates = 0;
+  locale_shiftstates = 0;
 #endif
 }
 
@@ -117,7 +119,7 @@ set_default_locale_vars ()
 #    if defined (HANDLE_MULTIBYTE)
       locale_shiftstates = mblen ((char *)NULL, 0);
 #    else
-      local_shiftstates = 0;
+      locale_shiftstates = 0;
 #    endif
 
       u32reset ();
@@ -226,7 +228,7 @@ set_locale_var (var, value)
 #  if defined (HANDLE_MULTIBYTE)
       locale_shiftstates = mblen ((char *)NULL, 0);
 #  else
-      local_shiftstates = 0;
+      locale_shiftstates = 0;
 #  endif
       u32reset ();
       return r;
@@ -250,7 +252,7 @@ set_locale_var (var, value)
 #if defined (HANDLE_MULTIBYTE)
          locale_shiftstates = mblen ((char *)NULL, 0);
 #else
-         local_shiftstates = 0;
+         locale_shiftstates = 0;
 #endif
          u32reset ();
        }
@@ -391,13 +393,14 @@ reset_locale_vars ()
 #  if defined (HANDLE_MULTIBYTE)
   locale_shiftstates = mblen ((char *)NULL, 0);
 #  else
-  local_shiftstates = 0;
+  locale_shiftstates = 0;
 #  endif
   u32reset ();
 #endif
   return 1;
 }
 
+#if defined (TRANSLATABLE_STRINGS)
 /* Translate the contents of STRING, a $"..." quoted string, according
    to the current locale.  In the `C' or `POSIX' locale, or if gettext()
    is not available, the passed string is returned unchanged.  The
@@ -512,7 +515,7 @@ mk_msgstr (string, foundnlp)
    by the caller.  The length of the translated string is returned in LENP,
    if non-null. */
 char *
-localeexpand (string, start, end, lineno, lenp)
+locale_expand (string, start, end, lineno, lenp)
      char *string;
      int start, end, lineno, *lenp;
 {
@@ -565,6 +568,7 @@ localeexpand (string, start, end, lineno, lenp)
       return (temp);
     }
 }
+#endif
 
 /* Set every character in the <blank> character class to be a shell break
    character for the lexical analyzer when the locale changes. */
index fec3804575840c85b1d0d1302896f1d10b7f4aac..8231ce05aa636a1362fd7d8d8a7c7aed145bf48b 100644 (file)
@@ -1,5 +1,5 @@
 # gettext.m4 serial 69 (gettext-0.19.9)
-dnl Copyright (C) 1995-2014, 2016, 2018-2019 Free Software Foundation, Inc.
+dnl Copyright (C) 1995-2014, 2016, 2018-2019, 2021 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -16,10 +16,12 @@ dnl They are *not* in the public domain.
 dnl Authors:
 dnl   Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
 dnl   Bruno Haible <haible@clisp.cons.org>, 2000-2006, 2008-2010.
+dnl
+dnl Modified for bash use by Chet Ramey <chet.ramey@case.edu>, 2021
 
 dnl Macro to add for using GNU gettext.
 
-dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]).
+dnl Usage: BASH_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]).
 dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The
 dnl    default (if it is not specified or empty) is 'no-libtool'.
 dnl    INTLSYMBOL should be 'external' for packages with no intl directory,
@@ -54,14 +56,12 @@ dnl GNU format catalogs when building on a platform with an X/Open gettext),
 dnl but we keep it in order not to force irrelevant filename changes on the
 dnl maintainers.
 dnl
-AC_DEFUN([AM_GNU_GETTEXT],
+AC_DEFUN([BASH_GNU_GETTEXT],
 [
   dnl Argument checking.
   ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], ,
     [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT
 ])])])])])
-  ifelse(ifelse([$1], [], [old])[]ifelse([$1], [no-libtool], [old]), [old],
-    [AC_DIAGNOSE([obsolete], [Use of AM_GNU_GETTEXT without [external] argument is deprecated.])])
   ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], ,
     [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT
 ])])])])
diff --git a/m4/strtoimax.m4 b/m4/strtoimax.m4
new file mode 100644 (file)
index 0000000..3098572
--- /dev/null
@@ -0,0 +1,35 @@
+dnl Copyright (C) 2022 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Make sure we replace strtoimax if we don't have a declaration
+dnl We can use this as a template for future function checks
+
+AC_DEFUN([BASH_FUNC_STRTOIMAX], [
+AC_MSG_CHECKING([for usable strtoimax])
+AC_CACHE_VAL(bash_cv_func_strtoimax,
+[
+  HAVE_STRTOIMAX=0 HAVE_DECL_STRTOIMAX=0
+
+  AC_CHECK_FUNCS([strtoimax])
+  AC_CHECK_DECLS([strtoimax])
+
+  if test "$ac_cv_func_strtoimax" = "yes" ; then
+    HAVE_STRTOIMAX=1
+  fi
+  if test "$ac_cv_have_decl_strtoimax" = "yes" ; then
+    HAVE_DECL_STRTOIMAX=1
+  fi
+
+  if test "$HAVE_STRTOIMAX" = 0 || test "$HAVE_DECL_STRTOIMAX" = 0 ; then
+    bash_cv_func_strtoimax=no REPLACE_STRTOIMAX=1
+  else
+    bash_cv_func_strtoimax=yes
+  fi
+])
+AC_MSG_RESULT($bash_cv_func_strtoimax)
+if test $bash_cv_func_strtoimax = yes; then
+AC_LIBOBJ(strtoimax)
+fi
+])
index bfc3bac853693c22836877f911a1400210d37159..60e4197b1c9f6f481bfbabe43b5b92b57c981a02 100644 (file)
@@ -51,8 +51,8 @@ AC_DEFUN([gl_THREADLIB_EARLY_BODY],
     [m4_divert_text([DEFAULTS], [gl_use_threads_default=no])],
     [m4_divert_text([DEFAULTS], [gl_use_threads_default=])])
   AC_ARG_ENABLE([threads],
-AC_HELP_STRING([--enable-threads={posix|solaris|pth|windows}], [specify multithreading API])m4_ifdef([gl_THREADLIB_DEFAULT_NO], [], [
-AC_HELP_STRING([--disable-threads], [build without multithread safety])]),
+AS_HELP_STRING([--enable-threads={posix|solaris|pth|windows}], [specify multithreading API])m4_ifdef([gl_THREADLIB_DEFAULT_NO], [], [
+AS_HELP_STRING([--disable-threads], [build without multithread safety])]),
     [gl_use_threads=$enableval],
     [if test -n "$gl_use_threads_default"; then
        gl_use_threads="$gl_use_threads_default"
@@ -94,7 +94,7 @@ changequote([,])dnl
     # need special flags to disable these optimizations. For example, the
     # definition of 'errno' in <errno.h>.
     case "$host_os" in
-      aix* | freebsd*) CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE" ;;
+      aix* | freebsd* | midnightbsd*) CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE" ;;
       solaris*) CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;;
     esac
   fi
index 2d7ac9609a058bb3b83533ca134a8021d0212148..98151a41a5f19ccc9c0c025a191379b984c183b5 100644 (file)
@@ -1,7 +1,7 @@
 /* make_cmd.c -- Functions for making instances of the various
    parser constructs. */
 
-/* Copyright (C) 1989-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2022 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -251,10 +251,7 @@ make_arith_for_expr (s)
   if (s == 0 || *s == '\0')
     return ((WORD_LIST *)NULL);
   wd = make_word (s);
-  wd->flags |= W_NOGLOB|W_NOSPLIT|W_QUOTED|W_DQUOTE;   /* no word splitting or globbing */
-#if defined (PROCESS_SUBSTITUTION)
-  wd->flags |= W_NOPROCSUB;    /* no process substitution */
-#endif
+  wd->flags |= W_NOGLOB|W_NOSPLIT|W_QUOTED|W_NOTILDE|W_NOPROCSUB;      /* no word splitting or globbing */
   result = make_word_list (wd, (WORD_LIST *)NULL);
   return result;
 }
@@ -575,12 +572,19 @@ make_here_document (temp, lineno)
 
   kill_leading = temp->instruction == r_deblank_reading_until;
 
-  document = (char *)NULL;
+  full_line = document = (char *)NULL;
   document_index = document_size = 0;
 
+  delim_unquoted = (temp->redirectee.filename->flags & W_QUOTED) == 0;
+
   /* Quote removal is the only expansion performed on the delimiter
      for here documents, making it an extremely special case. */
-  redir_word = string_quote_removal (temp->redirectee.filename->word, 0);
+  /* "If any part of word is quoted, the delimiter shall be formed by
+     performing quote removal on word." */
+  if (delim_unquoted == 0)
+    redir_word = string_quote_removal (temp->redirectee.filename->word, 0);
+  else
+    redir_word = savestring (temp->redirectee.filename->word);
 
   /* redirection_expand will return NULL if the expansion results in
      multiple words or no words.  Check for that here, and just abort
@@ -607,7 +611,6 @@ make_here_document (temp, lineno)
   /* If the here-document delimiter was quoted, the lines should
      be read verbatim from the input.  If it was not quoted, we
      need to perform backslash-quoted newline removal. */
-  delim_unquoted = (temp->redirectee.filename->flags & W_QUOTED) == 0;
   while (full_line = read_secondary_line (delim_unquoted))
     {
       register char *line;
@@ -628,7 +631,7 @@ make_here_document (temp, lineno)
             check the word before stripping the whitespace.  This
             is a hack, though. */
          if (STREQN (line, redir_word, redir_len) && line[redir_len] == '\n')
-           goto document_done;
+           break;
 
          while (*line == '\t')
            line++;
@@ -638,7 +641,15 @@ make_here_document (temp, lineno)
        continue;
 
       if (STREQN (line, redir_word, redir_len) && line[redir_len] == '\n')
-       goto document_done;
+       break;
+
+      /* Backwards compatibility here */
+      if (STREQN (line, redir_word, redir_len) && (parser_state & PST_EOFTOKEN) && shell_eof_token && strchr (line+redir_len, shell_eof_token))
+       {
+         shell_ungets (line + redir_len);
+         full_line = 0;
+         break;
+       }
 
       len = strlen (line);
       if (len + document_index >= document_size)
index f2563ca09b8a4e1e88cf819747378d663fe86fcf..b7504cd80c019be7e4f35df775e8eb4050288719 100644 (file)
--- a/nojobs.c
+++ b/nojobs.c
@@ -3,7 +3,7 @@
 /* This file works under BSD, System V, minix, and Posix systems.  It does
    not implement job control. */
 
-/* Copyright (C) 1987-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2022 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -664,7 +664,7 @@ wait_for_single_pid (pid, flags)
   if (pstatus == PROC_BAD)
     {
       internal_error (_("wait: pid %ld is not a child of this shell"), (long)pid);
-      return (127);
+      return (257);
     }
 
   if (pstatus != PROC_STILL_ALIVE)
@@ -707,18 +707,20 @@ wait_for_single_pid (pid, flags)
 
 /* Wait for all of the shell's children to exit.  Called by the `wait'
    builtin. */
-void
+int
 wait_for_background_pids (ps)
      struct procstat *ps;
 {
   pid_t got_pid;
   WAIT status;
+  int njobs;
 
   /* If we aren't using job control, we let the kernel take care of the
      bookkeeping for us.  wait () will return -1 and set errno to ECHILD
      when there are no more unwaited-for child processes on both
      4.2 BSD-based and System V-based systems. */
 
+  njobs = 0;
   siginterrupt (SIGINT, 1);
 
   /* Wait for ECHILD */
@@ -726,6 +728,7 @@ wait_for_background_pids (ps)
   while ((got_pid = WAITPID (-1, &status, 0)) != -1)
     {
       waiting_for_child = 0;
+      njobs++;
       set_pid_status (got_pid, status);
       if (ps)
        {
@@ -749,6 +752,8 @@ wait_for_background_pids (ps)
 
   mark_dead_jobs_as_notified (1);
   cleanup_dead_jobs ();
+
+  return njobs;
 }
 
 void
diff --git a/parse.y b/parse.y
index f4168c7cd40158c4c1a89063ff179b644bfaf1c5..d887eecb6cddba6877952d6f60944e913e626b1b 100644 (file)
--- a/parse.y
+++ b/parse.y
@@ -1,6 +1,6 @@
 /* parse.y - Yacc grammar for bash. */
 
-/* Copyright (C) 1989-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2022 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -114,11 +114,24 @@ typedef void *alias_t;
 #  define MBTEST(x)    ((x))
 #endif
 
+#define EXTEND_SHELL_INPUT_LINE_PROPERTY() \
+do { \
+    if (shell_input_line_len + 2 > shell_input_line_propsize) \
+      { \
+       shell_input_line_propsize = shell_input_line_len + 2; \
+       shell_input_line_property = (char *)xrealloc (shell_input_line_property, \
+                                   shell_input_line_propsize); \
+      } \
+} while (0)
+
 #if defined (EXTENDED_GLOB)
 extern int extended_glob;
 #endif
 
+#if defined (TRANSLATABLE_STRINGS)
 extern int dump_translatable_strings, dump_po_strings;
+extern int singlequote_translations;
+#endif /* TRANSLATABLE_STRINGS */
 
 #if !defined (errno)
 extern int errno;
@@ -144,7 +157,6 @@ static int yy_readline_unget PARAMS((int));
 
 static int yy_string_get PARAMS((void));
 static int yy_string_unget PARAMS((int));
-static void rewind_input_string PARAMS((void));
 static int yy_stream_get PARAMS((void));
 static int yy_stream_unget PARAMS((int));
 
@@ -152,11 +164,9 @@ static int shell_getc PARAMS((int));
 static void shell_ungetc PARAMS((int));
 static void discard_until PARAMS((int));
 
-#if defined (ALIAS) || defined (DPAREN_ARITHMETIC)
 static void push_string PARAMS((char *, int, alias_t *));
 static void pop_string PARAMS((void));
 static void free_string_list PARAMS((void));
-#endif
 
 static char *read_a_line PARAMS((int));
 
@@ -200,7 +210,7 @@ static void print_offending_line PARAMS((void));
 static void report_syntax_error PARAMS((char *));
 
 static void handle_eof_input_unit PARAMS((void));
-static void prompt_again PARAMS((void));
+static void prompt_again PARAMS((int));
 #if 0
 static void reset_readline_prompt PARAMS((void));
 #endif
@@ -353,16 +363,20 @@ static FILE *yyerrstream;
 %token LESS_LESS_MINUS AND_GREATER AND_GREATER_GREATER LESS_GREATER
 %token GREATER_BAR BAR_AND
 
+/* Special; never created by yylex; only set by parse_comsub and xparse_dolparen */
+%token DOLPAREN
+
 /* The types that the various syntactical units return. */
 
 %type <command> inputunit command pipeline pipeline_command
-%type <command> list list0 list1 compound_list simple_list simple_list1
+%type <command> list0 list1 compound_list simple_list simple_list1
 %type <command> simple_command shell_command
 %type <command> for_command select_command case_command group_command
 %type <command> arith_command
 %type <command> cond_command
 %type <command> arith_for_command
 %type <command> coproc
+%type <command> comsub
 %type <command> function_def function_body if_command elif_clause subshell
 %type <redirect> redirection redirection_list
 %type <element> simple_command_element
@@ -389,6 +403,14 @@ inputunit: simple_list simple_list_terminator
                            parser_state |= PST_EOFTOKEN;
                          YYACCEPT;
                        }
+       |       comsub
+                       {
+                         /* This is special; look at the production and how
+                            parse_comsub sets token_to_read */
+                         global_command = $1;
+                         eof_encountered = 0;
+                         YYACCEPT;
+                       }
        |       '\n'
                        {
                          /* Case of regular command, but not a very
@@ -865,32 +887,32 @@ arith_for_command:        FOR ARITH_FOR_EXPRS list_terminator newline_list DO compound_
                                }
        ;
 
-select_command:        SELECT WORD newline_list DO list DONE
+select_command:        SELECT WORD newline_list DO compound_list DONE
                        {
                          $$ = make_select_command ($2, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), $5, word_lineno[word_top]);
                          if (word_top > 0) word_top--;
                        }
-       |       SELECT WORD newline_list '{' list '}'
+       |       SELECT WORD newline_list '{' compound_list '}'
                        {
                          $$ = make_select_command ($2, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), $5, word_lineno[word_top]);
                          if (word_top > 0) word_top--;
                        }
-       |       SELECT WORD ';' newline_list DO list DONE
+       |       SELECT WORD ';' newline_list DO compound_list DONE
                        {
                          $$ = make_select_command ($2, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), $6, word_lineno[word_top]);
                          if (word_top > 0) word_top--;
                        }
-       |       SELECT WORD ';' newline_list '{' list '}'
+       |       SELECT WORD ';' newline_list '{' compound_list '}'
                        {
                          $$ = make_select_command ($2, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), $6, word_lineno[word_top]);
                          if (word_top > 0) word_top--;
                        }
-       |       SELECT WORD newline_list IN word_list list_terminator newline_list DO list DONE
+       |       SELECT WORD newline_list IN word_list list_terminator newline_list DO compound_list DONE
                        {
                          $$ = make_select_command ($2, REVERSE_LIST ($5, WORD_LIST *), $9, word_lineno[word_top]);
                          if (word_top > 0) word_top--;
                        }
-       |       SELECT WORD newline_list IN word_list list_terminator newline_list '{' list '}'
+       |       SELECT WORD newline_list IN word_list list_terminator newline_list '{' compound_list '}'
                        {
                          $$ = make_select_command ($2, REVERSE_LIST ($5, WORD_LIST *), $9, word_lineno[word_top]);
                          if (word_top > 0) word_top--;
@@ -974,6 +996,16 @@ subshell:  '(' compound_list ')'
                        }
        ;
 
+comsub:                DOLPAREN compound_list ')'
+                       {
+                         $$ = $2;
+                       }
+       |       DOLPAREN newline_list ')'
+                       {
+                         $$ = (COMMAND *)NULL;
+                       }
+       ;
+
 coproc:                COPROC shell_command
                        {
                          $$ = make_coproc_command ("COPROC", $2);
@@ -1094,15 +1126,12 @@ pattern:        WORD
    It must end with a newline or semicolon.
    Lists are used within commands such as if, for, while.  */
 
-list:          newline_list list0
+compound_list: newline_list list0
                        {
                          $$ = $2;
-                         if (need_here_doc)
+                         if (need_here_doc && last_read_token == '\n')
                            gather_here_documents ();
                         }
-       ;
-
-compound_list: list
        |       newline_list list1
                        {
                          $$ = $2;
@@ -1135,7 +1164,12 @@ list1:           list1 AND_AND newline_list list1
        |       list1 ';' newline_list list1
                        { $$ = command_connect ($1, $4, ';'); }
        |       list1 '\n' newline_list list1
-                       { $$ = command_connect ($1, $4, ';'); }
+                       {
+                         if (parser_state & PST_CMDSUBST)
+                           $$ = command_connect ($1, $4, '\n');
+                         else
+                           $$ = command_connect ($1, $4, ';');
+                       }
        |       pipeline_command
                        { $$ = $1; }
        ;
@@ -1166,12 +1200,14 @@ simple_list:    simple_list1
                        {
                          $$ = $1;
                          if (need_here_doc)
-                           gather_here_documents ();
+                           gather_here_documents ();   /* XXX */
                          if ((parser_state & PST_CMDSUBST) && current_token == shell_eof_token)
                            {
+INTERNAL_DEBUG (("LEGACY: parser: command substitution simple_list1 -> simple_list"));
                              global_command = $1;
                              eof_encountered = 0;
-                             rewind_input_string ();
+                             if (bash_input.type == st_string)
+                               rewind_input_string ();
                              YYACCEPT;
                            }
                        }
@@ -1182,12 +1218,14 @@ simple_list:    simple_list1
                          else
                            $$ = command_connect ($1, (COMMAND *)NULL, '&');
                          if (need_here_doc)
-                           gather_here_documents ();
+                           gather_here_documents (); /* XXX */
                          if ((parser_state & PST_CMDSUBST) && current_token == shell_eof_token)
                            {
+INTERNAL_DEBUG (("LEGACY: parser: command substitution simple_list1 '&' -> simple_list"));
                              global_command = $1;
                              eof_encountered = 0;
-                             rewind_input_string ();
+                             if (bash_input.type == st_string)
+                               rewind_input_string ();
                              YYACCEPT;
                            }
                        }
@@ -1195,12 +1233,14 @@ simple_list:    simple_list1
                        {
                          $$ = $1;
                          if (need_here_doc)
-                           gather_here_documents ();
+                           gather_here_documents ();   /* XXX */
                          if ((parser_state & PST_CMDSUBST) && current_token == shell_eof_token)
                            {
+INTERNAL_DEBUG (("LEGACY: parser: command substitution simple_list1 ';' -> simple_list"));
                              global_command = $1;
                              eof_encountered = 0;
-                             rewind_input_string ();
+                             if (bash_input.type == st_string)
+                               rewind_input_string ();
                              YYACCEPT;
                            }
                        }
@@ -1614,7 +1654,7 @@ with_input_from_string (string, name)
    That is the true input location.  Rewind bash_input.location.string by
    that number of characters, so it points to the last character actually
    consumed by the parser. */
-static void
+void
 rewind_input_string ()
 {
   int xchars;
@@ -1626,7 +1666,7 @@ rewind_input_string ()
     xchars++;
 
   /* XXX - how to reflect bash_input.location.string back to string passed to
-     parse_and_execute or xparse_dolparen?  xparse_dolparen needs to know how
+     parse_and_execute or xparse_dolparen? xparse_dolparen needs to know how
      far into the string we parsed.  parse_and_execute knows where bash_input.
      location.string is, and how far from orig_string that is -- that's the
      number of characters the command consumed. */
@@ -1823,8 +1863,6 @@ restore_token_state (ts)
  *     everything between a `;;' and the next `)' or `esac'
  */
 
-#if defined (ALIAS) || defined (DPAREN_ARITHMETIC)
-
 #define END_OF_ALIAS 0
 
 /*
@@ -1848,7 +1886,7 @@ typedef struct string_saver {
 #if defined (ALIAS)
   alias_t *expander;   /* alias that caused this line to be pushed. */
 #endif
-  size_t saved_line_size, saved_line_index;
+  size_t saved_line_size, saved_line_index, saved_line_len;
   int saved_line_terminator;
   int flags;
 } STRING_SAVER;
@@ -1874,6 +1912,7 @@ push_string (s, expand, ap)
   temp->expand_alias = expand;
   temp->saved_line = shell_input_line;
   temp->saved_line_size = shell_input_line_size;
+  temp->saved_line_len = shell_input_line_len;
   temp->saved_line_index = shell_input_line_index;
   temp->saved_line_terminator = shell_input_line_terminator;
   temp->flags = 0;
@@ -1891,7 +1930,7 @@ push_string (s, expand, ap)
 #endif
 
   shell_input_line = s;
-  shell_input_line_size = STRLEN (s);
+  shell_input_line_size = shell_input_line_len = STRLEN (s);
   shell_input_line_index = 0;
   shell_input_line_terminator = '\0';
 #if 0
@@ -1916,12 +1955,15 @@ pop_string ()
   shell_input_line = pushed_string_list->saved_line;
   shell_input_line_index = pushed_string_list->saved_line_index;
   shell_input_line_size = pushed_string_list->saved_line_size;
+  shell_input_line_len = pushed_string_list->saved_line_len;
   shell_input_line_terminator = pushed_string_list->saved_line_terminator;
 
+#if defined (ALIAS)
   if (pushed_string_list->expand_alias)
     parser_state |= PST_ALEXPNEXT;
   else
     parser_state &= ~PST_ALEXPNEXT;
+#endif
 
   t = pushed_string_list;
   pushed_string_list = pushed_string_list->next;
@@ -1955,8 +1997,6 @@ free_string_list ()
   pushed_string_list = (STRING_SAVER *)NULL;
 }
 
-#endif /* ALIAS || DPAREN_ARITHMETIC */
-
 void
 free_pushed_string_input ()
 {
@@ -2046,12 +2086,7 @@ read_a_line (remove_quoted_newline)
 
       /* Ignore null bytes in input. */
       if (c == 0)
-       {
-#if 0
-         internal_warning ("read_a_line: ignored null byte in input");
-#endif
-         continue;
-       }
+       continue;
 
       /* If there is no more input, then we return NULL. */
       if (c == EOF)
@@ -2125,8 +2160,8 @@ read_secondary_line (remove_quoted_newline)
   int n, c;
 
   prompt_string_pointer = &ps2_prompt;
-  if (SHOULD_PROMPT())
-    prompt_again ();
+  if (SHOULD_PROMPT ())
+    prompt_again (0);
   ret = read_a_line (remove_quoted_newline);
 #if defined (HISTORY)
   if (ret && remember_on_history && (parser_state & PST_HEREDOC))
@@ -2362,9 +2397,6 @@ shell_getc (remove_quoted_newline)
 
          if (c == '\0')
            {
-#if 0
-             internal_warning ("shell_getc: ignored null byte in input");
-#endif
              /* If we get EOS while parsing a string, treat it as EOF so we
                 don't just keep looping. Happens very rarely */
              if (bash_input.type == st_string)
@@ -2511,7 +2543,7 @@ shell_getc (remove_quoted_newline)
          shell_input_line_size = 0;
          prompt_string_pointer = &current_prompt_string;
          if (SHOULD_PROMPT ())
-           prompt_again ();
+           prompt_again (0);
          goto restart_read;
        }
 
@@ -2533,21 +2565,12 @@ shell_getc (remove_quoted_newline)
            shell_input_line[shell_input_line_len] = '\n';
          shell_input_line[shell_input_line_len + 1] = '\0';
 
-#if 0
-         set_line_mbstate ();          /* XXX - this is wasteful */
-#else
-#  if defined (HANDLE_MULTIBYTE)
+#if defined (HANDLE_MULTIBYTE)
          /* This is kind of an abstraction violation, but there's no need to
             go through the entire shell_input_line again with a call to
             set_line_mbstate(). */
-         if (shell_input_line_len + 2 > shell_input_line_propsize)
-           {
-             shell_input_line_propsize = shell_input_line_len + 2;
-             shell_input_line_property = (char *)xrealloc (shell_input_line_property,
-                                                           shell_input_line_propsize);
-           }
+         EXTEND_SHELL_INPUT_LINE_PROPERTY();
          shell_input_line_property[shell_input_line_len] = 1;
-#  endif
 #endif
        }
     }
@@ -2600,12 +2623,29 @@ next_alias_char:
       (current_delimiter (dstack) != '\'' && current_delimiter (dstack) != '"'))
     {
       parser_state |= PST_ENDALIAS;
+      /* We need to do this to make sure last_shell_getc_is_singlebyte returns
+        true, since we are returning a single-byte space. */
+      if (shell_input_line_index == shell_input_line_len && last_shell_getc_is_singlebyte == 0)
+       {
+#if 0
+         EXTEND_SHELL_INPUT_LINE_PROPERTY();
+         shell_input_line_property[shell_input_line_len++] = 1;
+         /* extend shell_input_line to accommodate the shell_ungetc that
+            read_token_word() will perform, since we're extending the index */
+         RESIZE_MALLOCED_BUFFER (shell_input_line, shell_input_line_index, 2, shell_input_line_size, 16);
+          shell_input_line[++shell_input_line_index] = '\0';   /* XXX */
+#else
+         shell_input_line_property[shell_input_line_index - 1] = 1;
+#endif
+       }
       return ' ';      /* END_ALIAS */
     }
 #endif
 
 pop_alias:
-  /* This case works for PSH_DPAREN as well */
+#endif /* ALIAS || DPAREN_ARITHMETIC */
+  /* This case works for PSH_DPAREN as well as the shell_ungets() case that uses
+     push_string */
   if (uc == 0 && pushed_string_list && pushed_string_list->flags != PSH_SOURCE)
     {
       parser_state &= ~PST_ENDALIAS;
@@ -2614,12 +2654,11 @@ pop_alias:
       if (uc)
        shell_input_line_index++;
     }
-#endif /* ALIAS || DPAREN_ARITHMETIC */
 
   if MBTEST(uc == '\\' && remove_quoted_newline && shell_input_line[shell_input_line_index] == '\n')
     {
        if (SHOULD_PROMPT ())
-         prompt_again ();
+         prompt_again (0);
        line_number++;
 
        /* What do we do here if we're expanding an alias whose definition
@@ -2687,6 +2726,60 @@ shell_ungetc (c)
     eol_ungetc_lookahead = c;
 }
 
+/* Push S back into shell_input_line; updating shell_input_line_index */
+void
+shell_ungets (s)
+     char *s;
+{
+  size_t slen, chars_left;
+
+  slen = strlen (s);
+
+  if (shell_input_line[shell_input_line_index] == '\0')
+    {
+      /* Easy, just overwrite shell_input_line. This is preferred because it
+        saves on set_line_mbstate () and other overhead like push_string */
+      if (shell_input_line_size <= slen)
+       RESIZE_MALLOCED_BUFFER (shell_input_line, shell_input_line_index, slen + 1, shell_input_line_size, 64);
+      strcpy (shell_input_line, s);
+      shell_input_line_index = 0;
+      shell_input_line_len = slen;
+      shell_input_line_terminator = 0;
+    }
+  else if (shell_input_line_index >= slen)
+    {
+      /* Just as easy, just back up shell_input_line_index, but it means we
+        will re-process some characters in set_line_mbstate(). Need to
+        watch pushing back newlines here. */
+      while (slen > 0)
+        shell_input_line[--shell_input_line_index] = s[--slen];
+    }
+  else if (s[slen - 1] == '\n')
+    {
+      push_string (savestring (s), 0, (alias_t *)NULL);
+      /* push_string does set_line_mbstate () */
+      return;
+    }
+  else
+    {
+      /* Harder case: pushing back input string that's longer than what we've
+        consumed from shell_input_line so far. */
+      INTERNAL_DEBUG (("shell_ungets: not at end of shell_input_line"));
+
+      chars_left = shell_input_line_len - shell_input_line_index;
+      if (shell_input_line_size <= (slen + chars_left))
+       RESIZE_MALLOCED_BUFFER (shell_input_line, shell_input_line_index, chars_left + slen + 1, shell_input_line_size, 64);
+      memmove (shell_input_line + slen, shell_input_line + shell_input_line_index, shell_input_line_len - shell_input_line_index);
+      strcpy (shell_input_line, s);
+      shell_input_line_index = 0;
+      shell_input_line_len = strlen (shell_input_line);        /* chars_left + slen? */
+    }
+
+#if defined (HANDLE_MULTIBYTE)
+  set_line_mbstate (); /* XXX */
+#endif
+}
+
 char *
 parser_remaining_input ()
 {
@@ -2760,7 +2853,7 @@ push_token (x)
 static char *token = (char *)NULL;
 
 /* Current size of the token buffer. */
-static int token_buffer_size;
+static size_t token_buffer_size;
 
 /* Command to read_token () explaining what we want it to do. */
 #define READ 0
@@ -2788,7 +2881,7 @@ yylex ()
       /* Avoid printing a prompt if we're not going to read anything, e.g.
         after resetting the parser with read_token (RESET). */
       if (token_to_read == 0 && SHOULD_PROMPT ())
-       prompt_again ();
+       prompt_again (0);
     }
 
   two_tokens_ago = token_before_that;
@@ -2798,11 +2891,16 @@ yylex ()
 
   if ((parser_state & PST_EOFTOKEN) && current_token == shell_eof_token)
     {
-      current_token = yacc_EOF;
-      if (bash_input.type == st_string)
-       rewind_input_string ();
+      /* placeholder for any special handling. */
+      return (current_token);
     }
-  parser_state &= ~PST_EOFTOKEN;       /* ??? */
+
+  if (current_token < 0)
+#if defined (YYERRCODE) && !defined (YYUNDEF)
+    current_token = YYERRCODE;
+#else
+    current_token = YYerror;
+#endif
 
   return (current_token);
 }
@@ -2893,9 +2991,12 @@ static int open_brace_count;
                break; \
              if ((parser_state & PST_CASEPAT) && last_read_token == '|' && word_token_alist[i].token == ESAC) \
                break; /* Posix grammar rule 4 */ \
-             if (word_token_alist[i].token == ESAC) \
+             if ((parser_state & PST_CASEPAT) && last_read_token == '(' && word_token_alist[i].token == ESAC) /*)*/ \
+               break; /* phantom Posix grammar rule 4 */ \
+             if (word_token_alist[i].token == ESAC) { \
                parser_state &= ~(PST_CASEPAT|PST_CASESTMT); \
-             else if (word_token_alist[i].token == CASE) \
+               esacs_needed_count--; \
+             } else if (word_token_alist[i].token == CASE) \
                parser_state |= PST_CASESTMT; \
              else if (word_token_alist[i].token == COND_END) \
                parser_state &= ~(PST_CONDCMD|PST_CONDEXPR); \
@@ -2955,8 +3056,12 @@ alias_expand_token (tokstr)
   char *expanded;
   alias_t *ap;
 
+#if 0
   if (((parser_state & PST_ALEXPNEXT) || command_token_position (last_read_token)) &&
        (parser_state & PST_CASEPAT) == 0)
+#else
+  if ((parser_state & PST_ALEXPNEXT) || assignment_acceptable (last_read_token))
+#endif
     {
       ap = find_alias (tokstr);
 
@@ -3198,7 +3303,7 @@ reset_parser ()
 
 #if defined (EXTENDED_GLOB)
   /* Reset to global value of extended glob */
-  if (parser_state & PST_EXTPAT)
+  if (parser_state & (PST_EXTPAT|PST_CMDSUBST))
     extended_glob = global_extglob;
 #endif
 
@@ -3223,6 +3328,11 @@ reset_parser ()
 
   eol_ungetc_lookahead = 0;
 
+  /* added post-bash-5.1 */
+  need_here_doc = 0;
+  redir_stack[0] = 0;
+  esacs_needed_count = expecting_in_token = 0;
+
   current_token = '\n';                /* XXX */
   last_read_token = '\n';
   token_to_read = '\n';
@@ -3300,9 +3410,7 @@ read_token (command)
      we are eval'ing a string that is an incomplete command), return EOF */
   if (character == '\0' && bash_input.type == st_string && expanding_alias() == 0)
     {
-#if defined (DEBUG)
-itrace("shell_getc: bash_input.location.string = `%s'", bash_input.location.string);
-#endif
+      INTERNAL_DEBUG (("shell_getc: bash_input.location.string = `%s'", bash_input.location.string));
       EOF_Reached = 1;
       return (yacc_EOF);
     }
@@ -3317,7 +3425,7 @@ itrace("shell_getc: bash_input.location.string = `%s'", bash_input.location.stri
       character = '\n';        /* this will take the next if statement and return. */
     }
 
-  if (character == '\n')
+  if MBTEST(character == '\n')
     {
       /* If we're about to return an unquoted newline, we can go and collect
         the text of any pending here document. */
@@ -3337,7 +3445,7 @@ itrace("shell_getc: bash_input.location.string = `%s'", bash_input.location.stri
     goto tokword;
 
   /* Shell meta-characters. */
-  if MBTEST(shellmeta (character) && ((parser_state & PST_DBLPAREN) == 0))
+  if MBTEST(shellmeta (character))
     {
 #if defined (ALIAS)
       /* Turn off alias tokenization iff this character sequence would
@@ -3358,7 +3466,7 @@ itrace("shell_getc: bash_input.location.string = `%s'", bash_input.location.stri
       else
        peek_char = shell_getc (1);
 
-      if (character == peek_char)
+      if MBTEST(character == peek_char)
        {
          switch (character)
            {
@@ -3517,6 +3625,9 @@ tokword:
 #define LEX_QUOTEDDOC  0x0400          /* here doc with quoted delim */
 #define LEX_INWORD     0x0800
 #define LEX_GTLT       0x1000
+#define LEX_CKESAC     0x2000          /* check esac after in -- for later */
+#define LEX_CASEWD     0x4000          /* word after case */
+#define LEX_PATLIST    0x8000          /* case statement pattern list */
 
 #define COMSUB_META(ch)                ((ch) == ';' || (ch) == '&' || (ch) == '|')
 
@@ -3584,8 +3695,8 @@ parse_matched_pair (qc, open, close, lenp, flags)
        }
 
       /* Possible reprompting. */
-      if (ch == '\n' && SHOULD_PROMPT ())
-       prompt_again ();
+      if MBTEST(ch == '\n' && SHOULD_PROMPT ())
+       prompt_again (0);
 
       /* Don't bother counting parens or doing anything else if in a comment
         or part of a case statement */
@@ -3595,7 +3706,7 @@ parse_matched_pair (qc, open, close, lenp, flags)
          RESIZE_MALLOCED_BUFFER (ret, retind, 1, retsize, 64);
          ret[retind++] = ch;
 
-         if (ch == '\n')
+         if MBTEST(ch == '\n')
            tflags &= ~LEX_INCOMMENT;
 
          continue;
@@ -3610,7 +3721,8 @@ parse_matched_pair (qc, open, close, lenp, flags)
       if (tflags & LEX_PASSNEXT)               /* last char was backslash */
        {
          tflags &= ~LEX_PASSNEXT;
-         if (qc != '\'' && ch == '\n') /* double-quoted \<newline> disappears. */
+         /* XXX - PST_NOEXPAND? */
+         if MBTEST(qc != '\'' && ch == '\n')   /* double-quoted \<newline> disappears. */
            {
              if (retind > 0)
                retind--;       /* swallow previously-added backslash */
@@ -3719,9 +3831,10 @@ parse_matched_pair (qc, open, close, lenp, flags)
              pop_delimiter (dstack);
              CHECK_NESTRET_ERROR ();
 
-             if MBTEST((tflags & LEX_WASDOL) && ch == '\'' && (extended_quote || (rflags & P_DQUOTE) == 0))
+             if MBTEST((tflags & LEX_WASDOL) && ch == '\'' && (extended_quote || (rflags & P_DQUOTE) == 0 || dolbrace_state == DOLBRACE_QUOTE || dolbrace_state == DOLBRACE_QUOTE2))
                {
                  /* Translate $'...' here. */
+                 /* PST_NOEXPAND */
                  ttrans = ansiexpand (nestret, 0, nestlen - 1, &ttranslen);
                  free (nestret);
 
@@ -3730,12 +3843,22 @@ parse_matched_pair (qc, open, close, lenp, flags)
                     make sure we single-quote the results of the ansi
                     expansion because quote removal should remove them later */
                  /* FLAG POSIX INTERP 221 */
-                 if ((shell_compatibility_level > 42) && (rflags & P_DQUOTE) && (dolbrace_state == DOLBRACE_QUOTE2) && (flags & P_DOLBRACE))
+                 if ((shell_compatibility_level > 42) && (rflags & P_DQUOTE) && (dolbrace_state == DOLBRACE_QUOTE2 || dolbrace_state == DOLBRACE_QUOTE) && (flags & P_DOLBRACE))
+                   {
+                     nestret = sh_single_quote (ttrans);
+                     free (ttrans);
+                     nestlen = strlen (nestret);
+                   }
+#if 0 /* TAG:bash-5.3 */
+                 /* This single-quotes PARAM in ${PARAM OP WORD} when PARAM
+                    contains a $'...' even when extended_quote is set. */
+                 else if ((rflags & P_DQUOTE) && (dolbrace_state == DOLBRACE_PARAM) && (flags & P_DOLBRACE))
                    {
                      nestret = sh_single_quote (ttrans);
                      free (ttrans);
                      nestlen = strlen (nestret);
                    }
+#endif
                  else if ((rflags & P_DQUOTE) == 0)
                    {
                      nestret = sh_single_quote (ttrans);
@@ -3744,22 +3867,41 @@ parse_matched_pair (qc, open, close, lenp, flags)
                    }
                  else
                    {
+                     /* Should we quote CTLESC here? */
                      nestret = ttrans;
                      nestlen = ttranslen;
                    }
                  retind -= 2;          /* back up before the $' */
                }
+#if defined (TRANSLATABLE_STRINGS)
              else if MBTEST((tflags & LEX_WASDOL) && ch == '"' && (extended_quote || (rflags & P_DQUOTE) == 0))
                {
                  /* Locale expand $"..." here. */
-                 ttrans = localeexpand (nestret, 0, nestlen - 1, start_lineno, &ttranslen);
+                 /* PST_NOEXPAND */
+                 ttrans = locale_expand (nestret, 0, nestlen - 1, start_lineno, &ttranslen);
                  free (nestret);
 
-                 nestret = sh_mkdoublequoted (ttrans, ttranslen, 0);
+                 /* If we're supposed to single-quote translated strings,
+                    check whether the translated result is different from
+                    the original and single-quote the string if it is. */
+                 if (singlequote_translations &&
+                       ((nestlen - 1) != ttranslen || STREQN (nestret, ttrans, ttranslen) == 0))
+                   {
+                     if ((rflags & P_DQUOTE) == 0)
+                       nestret = sh_single_quote (ttrans);
+                     else if ((rflags & P_DQUOTE) && (dolbrace_state == DOLBRACE_QUOTE2) && (flags & P_DOLBRACE))
+                       nestret = sh_single_quote (ttrans);
+                     else
+                       /* single quotes aren't special, use backslash instead */
+                       nestret = sh_backslash_quote_for_double_quotes (ttrans, 0);
+                   }
+                 else
+                   nestret = sh_mkdoublequoted (ttrans, ttranslen, 0);
                  free (ttrans);
-                 nestlen = ttranslen + 2;
+                 nestlen = strlen (nestret);
                  retind -= 2;          /* back up before the $" */
                }
+#endif /* TRANSLATABLE_STRINGS */
 
              APPEND_NESTRET ();
              FREE (nestret);
@@ -3861,11 +4003,26 @@ dump_tflags (flags)
       f &= ~LEX_CKCASE;
       fprintf (stderr, "LEX_CKCASE%s", f ? "|" : "");
     }
+  if (f & LEX_CKESAC)
+    {
+      f &= ~LEX_CKESAC;
+      fprintf (stderr, "LEX_CKESAC%s", f ? "|" : "");
+    }
   if (f & LEX_INCASE)
     {
       f &= ~LEX_INCASE;
       fprintf (stderr, "LEX_INCASE%s", f ? "|" : "");
     }
+  if (f & LEX_CASEWD)
+    {
+      f &= ~LEX_CASEWD;
+      fprintf (stderr, "LEX_CASEWD%s", f ? "|" : "");
+    }
+  if (f & LEX_PATLIST)
+    {
+      f &= ~LEX_PATLIST;
+      fprintf (stderr, "LEX_PATLIST%s", f ? "|" : "");
+    }
   if (f & LEX_INHEREDOC)
     {
       f &= ~LEX_INHEREDOC;
@@ -3897,554 +4054,172 @@ dump_tflags (flags)
 }
 #endif
 
-/* Parse a $(...) command substitution.  This is messier than I'd like, and
-   reproduces a lot more of the token-reading code than I'd like. */
+/* Parse a $(...) command substitution.  This reads input from the current
+   input stream. */
 static char *
 parse_comsub (qc, open, close, lenp, flags)
      int qc;   /* `"' if this construct is within double quotes */
      int open, close;
      int *lenp, flags;
 {
-  int count, ch, peekc, tflags, lex_rwlen, lex_wlen, lex_firstind;
-  int nestlen, ttranslen, start_lineno, orig_histexp;
-  char *ret, *nestret, *ttrans, *heredelim;
-  int retind, retsize, rflags, hdlen;
+  int peekc, r;
+  int start_lineno, local_extglob, was_extpat;
+  char *ret, *tcmd;
+  int retlen;
+  sh_parser_state_t ps;
+  STRING_SAVER *saved_strings;
+  COMMAND *saved_global, *parsed_command;
 
   /* Posix interp 217 says arithmetic expressions have precedence, so
      assume $(( introduces arithmetic expansion and parse accordingly. */
-  peekc = shell_getc (0);
-  shell_ungetc (peekc);
-  if (peekc == '(')
-    return (parse_matched_pair (qc, open, close, lenp, 0));
+  if (open == '(')             /*)*/
+    {
+      peekc = shell_getc (1);
+      shell_ungetc (peekc);
+      if (peekc == '(')                /*)*/
+       return (parse_matched_pair (qc, open, close, lenp, 0));
+    }
 
 /*itrace("parse_comsub: qc = `%c' open = %c close = %c", qc, open, close);*/
-  count = 1;
-  tflags = LEX_RESWDOK;
-#if defined (BANG_HISTORY)
-  orig_histexp = history_expansion_inhibited;
-#endif
-
-  if ((flags & P_COMMAND) && qc != '\'' && qc != '"' && (flags & P_DQUOTE) == 0)
-    tflags |= LEX_CKCASE;
-  if ((tflags & LEX_CKCASE) && (interactive == 0 || interactive_comments))
-    tflags |= LEX_CKCOMMENT;
-
-  /* RFLAGS is the set of flags we want to pass to recursive calls. */
-  rflags = (flags & P_DQUOTE);
-
-  ret = (char *)xmalloc (retsize = 64);
-  retind = 0;
 
+  /*debug_parser(1);*/
   start_lineno = line_number;
-  lex_rwlen = lex_wlen = 0;
 
-  heredelim = 0;
-  lex_firstind = -1;
+  save_parser_state (&ps);
 
-  while (count)
+  was_extpat = (parser_state & PST_EXTPAT);
+
+  /* State flags we don't want to persist into command substitutions. */
+  parser_state &= ~(PST_REGEXP|PST_EXTPAT|PST_CONDCMD|PST_CONDEXPR|PST_COMPASSIGN);
+  /* Could do PST_CASESTMT too, but that also affects history. Setting
+     expecting_in_token below should take care of the parsing requirements.
+     Unsetting PST_REDIRLIST isn't strictly necessary because of how we set
+     token_to_read below, but we do it anyway. */
+  parser_state &= ~(PST_CASEPAT|PST_ALEXPNEXT|PST_SUBSHELL|PST_REDIRLIST);
+  /* State flags we want to set for this run through the parser. */
+  parser_state |= PST_CMDSUBST|PST_EOFTOKEN|PST_NOEXPAND;
+
+  /* leave pushed_string_list alone, since we might need to consume characters
+     from it to satisfy this command substitution (in some perverse case). */
+  shell_eof_token = close;
+
+  saved_global = global_command;               /* might not be necessary */
+  global_command = (COMMAND *)NULL;
+
+  /* These are reset by reset_parser() */
+  need_here_doc = 0;
+  esacs_needed_count = expecting_in_token = 0;
+
+  /* We want to expand aliases on this pass if we're in posix mode, since the
+     standard says you have to take aliases into account when looking for the
+     terminating right paren. Otherwise, we defer until execution time for
+     backwards compatibility. */
+  if (expand_aliases)
+    expand_aliases = posixly_correct != 0;
+#if defined (EXTENDED_GLOB)
+  /* If (parser_state & PST_EXTPAT), we're parsing an extended pattern for a
+     conditional command and have already set global_extglob appropriately. */
+  if (shell_compatibility_level <= 51 && was_extpat == 0)
     {
-comsub_readchar:
-      ch = shell_getc (qc != '\'' && (tflags & (LEX_INCOMMENT|LEX_PASSNEXT|LEX_QUOTEDDOC)) == 0);
-
-      if (ch == EOF)
-       {
-eof_error:
-#if defined (BANG_HISTORY)
-         history_expansion_inhibited = orig_histexp;
+      local_extglob = global_extglob = extended_glob;
+      extended_glob = 1;
+    }
 #endif
-         free (ret);
-         FREE (heredelim);
-         parser_error (start_lineno, _("unexpected EOF while looking for matching `%c'"), close);
-         EOF_Reached = 1;      /* XXX */
-         return (&matched_pair_error);
-       }
 
-      /* If we hit the end of a line and are reading the contents of a here
-        document, and it's not the same line that the document starts on,
-        check for this line being the here doc delimiter.  Otherwise, if
-        we're in a here document, mark the next character as the beginning
-        of a line. */
-      if (ch == '\n')
-       {
-         if ((tflags & LEX_HEREDELIM) && heredelim)
-           {
-             tflags &= ~LEX_HEREDELIM;
-             tflags |= LEX_INHEREDOC;
-#if defined (BANG_HISTORY)
-             history_expansion_inhibited = 1;
-#endif
-             lex_firstind = retind + 1;
-           }
-         else if (tflags & LEX_INHEREDOC)
-           {
-             int tind;
-             tind = lex_firstind;
-             while ((tflags & LEX_STRIPDOC) && ret[tind] == '\t')
-               tind++;
-             if (retind-tind == hdlen && STREQN (ret + tind, heredelim, hdlen))
-               {
-                 tflags &= ~(LEX_STRIPDOC|LEX_INHEREDOC|LEX_QUOTEDDOC);
-/*itrace("parse_comsub:%d: found here doc end `%s'", line_number, ret + tind);*/
-                 free (heredelim);
-                 heredelim = 0;
-                 lex_firstind = -1;
-#if defined (BANG_HISTORY)
-                 history_expansion_inhibited = orig_histexp;
-#endif
-               }
-             else
-               lex_firstind = retind + 1;
-           }
-       }
+  current_token = '\n';                                /* XXX */
+  token_to_read = DOLPAREN;                    /* let's trick the parser */
 
-      /* Possible reprompting. */
-      if (ch == '\n' && SHOULD_PROMPT ())
-       prompt_again ();
+  r = yyparse ();
 
-      /* XXX -- we currently allow here doc to be delimited by ending right
-        paren in default mode and posix mode. To change posix mode, change
-        the #if 1 to #if 0 below */
-      if ((tflags & LEX_INHEREDOC) && ch == close && count == 1)
-       {
-         int tind;
-/*itrace("parse_comsub:%d: in here doc, ch == close, retind - firstind = %d hdlen = %d retind = %d", line_number, retind-lex_firstind, hdlen, retind);*/
-         tind = lex_firstind;
-         while ((tflags & LEX_STRIPDOC) && ret[tind] == '\t')
-           tind++;
-#if 1
-         if (retind-tind == hdlen && STREQN (ret + tind, heredelim, hdlen))
-#else
-         /* Posix-mode shells require the newline after the here-document
-            delimiter. */
-         if (retind-tind == hdlen && STREQN (ret + tind, heredelim, hdlen) &&
-             posixly_correct == 0)
-#endif
-           {
-             tflags &= ~(LEX_STRIPDOC|LEX_INHEREDOC|LEX_QUOTEDDOC);
-/*itrace("parse_comsub:%d: found here doc end `%*s'", line_number, hdlen, ret + tind);*/
-             free (heredelim);
-             heredelim = 0;
-             lex_firstind = -1;
-#if defined (BANG_HISTORY)
-             history_expansion_inhibited = orig_histexp;
-#endif
-           }
-       }
-
-      /* Don't bother counting parens or doing anything else if in a comment or
-        here document (not exactly right for here-docs -- if we want to allow
-        recursive calls to parse_comsub to have their own here documents,
-        change the LEX_INHEREDOC to LEX_QUOTEDDOC here and uncomment the next
-        clause below.  Note that to make this work completely, we need to make
-        additional changes to allow xparse_dolparen to work right when the
-        command substitution is parsed, because read_secondary_line doesn't know
-        to recursively parse through command substitutions embedded in here-
-        documents */
-      if (tflags & (LEX_INCOMMENT|LEX_INHEREDOC))
-       {
-         /* Add this character. */
-         RESIZE_MALLOCED_BUFFER (ret, retind, 1, retsize, 64);
-         ret[retind++] = ch;
-
-         if ((tflags & LEX_INCOMMENT) && ch == '\n')
-           {
-/*itrace("parse_comsub:%d: lex_incomment -> 0 ch = `%c'", line_number, ch);*/
-             tflags &= ~LEX_INCOMMENT;
-           }
+  if (need_here_doc > 0)
+    {
+      internal_warning ("command substitution: %d unterminated here-document%s", need_here_doc, (need_here_doc == 1) ? "" : "s");
+      gather_here_documents ();        /* XXX check compatibility level? */
+    }
 
-         continue;
-       }
-#if 0
-      /* If we're going to recursively parse a command substitution inside a
-        here-document, make sure we call parse_comsub recursively below.  See
-        above for additional caveats. */
-      if ((tflags & LEX_INHEREDOC) && ((tflags & LEX_WASDOL) == 0 || ch != '(')) /*)*/
-       {
-         /* Add this character. */
-         RESIZE_MALLOCED_BUFFER (ret, retind, 1, retsize, 64);
-         ret[retind++] = ch;
-         if MBTEST(ch == '$')
-           tflags |= LEX_WASDOL;
-         else
-           tflags &= ~LEX_WASDOL;
-       }
+#if defined (EXTENDED_GLOB)
+  if (shell_compatibility_level <= 51 && was_extpat == 0)
+    extended_glob = local_extglob;
 #endif
 
-      if (tflags & LEX_PASSNEXT)               /* last char was backslash */
-       {
-/*itrace("parse_comsub:%d: lex_passnext -> 0 ch = `%c' (%d)", line_number, ch, __LINE__);*/
-         tflags &= ~LEX_PASSNEXT;
-         if (qc != '\'' && ch == '\n') /* double-quoted \<newline> disappears. */
-           {
-             if (retind > 0)
-               retind--;       /* swallow previously-added backslash */
-             continue;
-           }
+  parsed_command = global_command;
 
-         RESIZE_MALLOCED_BUFFER (ret, retind, 2, retsize, 64);
-         if MBTEST(ch == CTLESC)
-           ret[retind++] = CTLESC;
-         ret[retind++] = ch;
-         continue;
-       }
+  if (EOF_Reached)
+    {
+      shell_eof_token = ps.eof_token;
+      expand_aliases = ps.expand_aliases;
 
-      /* If this is a shell break character, we are not in a word.  If not,
-        we either start or continue a word. */
-      if MBTEST(shellbreak (ch))
-       {
-         tflags &= ~LEX_INWORD;
-/*itrace("parse_comsub:%d: lex_inword -> 0 ch = `%c' (%d)", line_number, ch, __LINE__);*/
-       }
+      /* yyparse() has already called yyerror() and reset_parser() */
+      return (&matched_pair_error);
+    }
+  else if (r != 0)
+    {
+      /* parser_error (start_lineno, _("could not parse command substitution")); */
+      /* Non-interactive shells exit on parse error in a command substitution. */
+      if (last_command_exit_value == 0)
+       last_command_exit_value = EXECUTION_FAILURE;
+      set_exit_status (last_command_exit_value);
+      if (interactive_shell == 0)
+       jump_to_top_level (FORCE_EOF);  /* This is like reader_loop() */
       else
        {
-         if (tflags & LEX_INWORD)
-           {
-             lex_wlen++;
-/*itrace("parse_comsub:%d: lex_inword == 1 ch = `%c' lex_wlen = %d (%d)", line_number, ch, lex_wlen, __LINE__);*/
-           }         
-         else
-           {
-/*itrace("parse_comsub:%d: lex_inword -> 1 ch = `%c' (%d)", line_number, ch, __LINE__);*/
-             tflags |= LEX_INWORD;
-             lex_wlen = 0;
-             if (tflags & LEX_RESWDOK)
-               lex_rwlen = 0;
-           }
-       }
-
-      /* Skip whitespace */
-      if MBTEST(shellblank (ch) && (tflags & LEX_HEREDELIM) == 0 && lex_rwlen == 0)
-        {
-         /* Add this character. */
-         RESIZE_MALLOCED_BUFFER (ret, retind, 1, retsize, 64);
-         ret[retind++] = ch;
-         continue;
-        }
-
-      /* Either we are looking for the start of the here-doc delimiter
-        (lex_firstind == -1) or we are reading one (lex_firstind >= 0).
-        If this character is a shell break character and we are reading
-        the delimiter, save it and note that we are now reading a here
-        document.  If we've found the start of the delimiter, note it by
-        setting lex_firstind.  Backslashes can quote shell metacharacters
-        in here-doc delimiters. */
-      if (tflags & LEX_HEREDELIM)
-       {
-         if (lex_firstind == -1 && shellbreak (ch) == 0)
-           lex_firstind = retind;
-#if 0
-         else if (heredelim && (tflags & LEX_PASSNEXT) == 0 && ch == '\n')
-           {
-             tflags |= LEX_INHEREDOC;
-             tflags &= ~LEX_HEREDELIM;
-             lex_firstind = retind + 1;
-#if defined (BANG_HISTORY)
-             history_expansion_inhibited = 1;
-#endif
-           }
-#endif
-         else if (lex_firstind >= 0 && (tflags & LEX_PASSNEXT) == 0 && shellbreak (ch))
-           {
-             if (heredelim == 0)
-               {
-                 nestret = substring (ret, lex_firstind, retind);
-                 heredelim = string_quote_removal (nestret, 0);
-                 hdlen = STRLEN(heredelim);
-/*itrace("parse_comsub:%d: found here doc delimiter `%s' (%d)", line_number, heredelim, hdlen);*/
-                 if (STREQ (heredelim, nestret) == 0)
-                   tflags |= LEX_QUOTEDDOC;
-                 free (nestret);
-               }
-             if (ch == '\n')
-               {
-                 tflags |= LEX_INHEREDOC;
-                 tflags &= ~LEX_HEREDELIM;
-                 lex_firstind = retind + 1;
-#if defined (BANG_HISTORY)
-                 history_expansion_inhibited = 1;
-#endif
-               }
-             else
-               lex_firstind = -1;
-           }
-       }
+         shell_eof_token = ps.eof_token;
+         expand_aliases = ps.expand_aliases;
 
-      /* Meta-characters that can introduce a reserved word.  Not perfect yet. */
-      if MBTEST((tflags & LEX_RESWDOK) == 0 && (tflags & LEX_CKCASE) && (tflags & LEX_INCOMMENT) == 0 && (shellmeta(ch) || ch == '\n'))
-       {
-         /* Add this character. */
-         RESIZE_MALLOCED_BUFFER (ret, retind, 1, retsize, 64);
-         ret[retind++] = ch;
-         peekc = shell_getc (1);
-         if (ch == peekc && (ch == '&' || ch == '|' || ch == ';'))     /* two-character tokens */
-           {
-             RESIZE_MALLOCED_BUFFER (ret, retind, 1, retsize, 64);
-             ret[retind++] = peekc;
-/*itrace("parse_comsub:%d: set lex_reswordok = 1, ch = `%c'", line_number, ch);*/
-             tflags |= LEX_RESWDOK;
-             lex_rwlen = 0;
-             continue;
-           }
-         else if (ch == '\n' || COMSUB_META(ch))
-           {
-             shell_ungetc (peekc);
-/*itrace("parse_comsub:%d: set lex_reswordok = 1, ch = `%c'", line_number, ch);*/
-             tflags |= LEX_RESWDOK;
-             lex_rwlen = 0;
-             continue;
-           }
-         else if (ch == EOF)
-           goto eof_error;
-         else
-           {
-             /* `unget' the character we just added and fall through */
-             retind--;
-             shell_ungetc (peekc);
-           }
+         jump_to_top_level (DISCARD);  /* XXX - return (&matched_pair_error)? */
        }
+    }
 
-      /* If we can read a reserved word, try to read one. */
-      if (tflags & LEX_RESWDOK)
-       {
-         if MBTEST(islower ((unsigned char)ch))
-           {
-             /* Add this character. */
-             RESIZE_MALLOCED_BUFFER (ret, retind, 1, retsize, 64);
-             ret[retind++] = ch;
-             lex_rwlen++;
-             continue;
-           }
-         else if MBTEST(lex_rwlen == 4 && shellbreak (ch))
-           {
-             if (STREQN (ret + retind - 4, "case", 4))
-               {
-                 tflags |= LEX_INCASE;
-                 tflags &= ~LEX_RESWDOK;
-/*itrace("parse_comsub:%d: found `case', lex_incase -> 1 lex_reswdok -> 0", line_number);*/
-               }
-             else if (STREQN (ret + retind - 4, "esac", 4))
-               {
-                 tflags &= ~LEX_INCASE;
-/*itrace("parse_comsub:%d: found `esac', lex_incase -> 0 lex_reswdok -> 1", line_number);*/
-                 tflags |= LEX_RESWDOK;
-                 lex_rwlen = 0;
-               }
-             else if (STREQN (ret + retind - 4, "done", 4) ||
-                      STREQN (ret + retind - 4, "then", 4) ||
-                      STREQN (ret + retind - 4, "else", 4) ||
-                      STREQN (ret + retind - 4, "elif", 4) ||
-                      STREQN (ret + retind - 4, "time", 4))
-               {
-                 /* these are four-character reserved words that can be
-                    followed by a reserved word; anything else turns off
-                    the reserved-word-ok flag */
-/*itrace("parse_comsub:%d: found `%.4s', lex_reswdok -> 1", line_number, ret+retind-4);*/
-                 tflags |= LEX_RESWDOK;
-                 lex_rwlen = 0;
-               }
-              else if (shellmeta (ch) == 0)
-               {
-                 tflags &= ~LEX_RESWDOK;
-/*itrace("parse_comsub:%d: found `%.4s', lex_reswdok -> 0", line_number, ret+retind-4);*/
-               }
-             else      /* can't be in a reserved word any more */
-               lex_rwlen = 0;
-           }
-         else if MBTEST((tflags & LEX_CKCOMMENT) && ch == '#' && (lex_rwlen == 0 || ((tflags & LEX_INWORD) && lex_wlen == 0)))
-           ;   /* don't modify LEX_RESWDOK if we're starting a comment */
-         /* Allow `do' followed by space, tab, or newline to preserve the
-            RESWDOK flag, but reset the reserved word length counter so we
-            can read another one. */
-         else if MBTEST(((tflags & LEX_INCASE) == 0) &&
-                         (isblank((unsigned char)ch) || ch == '\n') &&
-                         lex_rwlen == 2 &&
-                         STREQN (ret + retind - 2, "do", 2))
-           {
-/*itrace("parse_comsub:%d: lex_incase == 0 found `%c', found \"do\"", line_number, ch);*/
-             lex_rwlen = 0;
-           }
-         else if MBTEST((tflags & LEX_INCASE) && ch != '\n')
-           /* If we can read a reserved word and we're in case, we're at the
-              point where we can read a new pattern list or an esac.  We
-              handle the esac case above.  If we read a newline, we want to
-              leave LEX_RESWDOK alone.  If we read anything else, we want to
-              turn off LEX_RESWDOK, since we're going to read a pattern list. */
-           {
-             tflags &= ~LEX_RESWDOK;
-/*itrace("parse_comsub:%d: lex_incase == 1 found `%c', lex_reswordok -> 0", line_number, ch);*/
-           }
-         else if MBTEST(shellbreak (ch) == 0)
-           {
-             tflags &= ~LEX_RESWDOK;
-/*itrace("parse_comsub:%d: found `%c', lex_reswordok -> 0", line_number, ch);*/
-           }
-#if 0
-         /* If we find a space or tab but have read something and it's not
-            `do', turn off the reserved-word-ok flag */
-         else if MBTEST(isblank ((unsigned char)ch) && lex_rwlen > 0)
-           {
-             tflags &= ~LEX_RESWDOK;
-/*itrace("parse_comsub:%d: found `%c', lex_reswordok -> 0", line_number, ch);*/
-           }
-#endif
-       }
-
-      /* Might be the start of a here-doc delimiter */
-      if MBTEST((tflags & LEX_INCOMMENT) == 0 && (tflags & LEX_CKCASE) && ch == '<')
-       {
-         /* Add this character. */
-         RESIZE_MALLOCED_BUFFER (ret, retind, 1, retsize, 64);
-         ret[retind++] = ch;
-         peekc = shell_getc (1);
-         if (peekc == EOF)
-           goto eof_error;
-         if (peekc == ch)
-           {
-             RESIZE_MALLOCED_BUFFER (ret, retind, 1, retsize, 64);
-             ret[retind++] = peekc;
-             peekc = shell_getc (1);
-             if (peekc == EOF)
-               goto eof_error;
-             if (peekc == '-')
-               {
-                 RESIZE_MALLOCED_BUFFER (ret, retind, 1, retsize, 64);
-                 ret[retind++] = peekc;
-                 tflags |= LEX_STRIPDOC;
-               }
-             else
-               shell_ungetc (peekc);
-             if (peekc != '<')
-               {
-                 tflags |= LEX_HEREDELIM;
-                 lex_firstind = -1;
-               }
-             continue;
-           }
-         else
-           {
-             shell_ungetc (peekc);     /* not a here-doc, start over */
-             continue;
-           }
-       }
-      else if MBTEST((tflags & LEX_CKCOMMENT) && (tflags & LEX_INCOMMENT) == 0 && ch == '#' && (((tflags & LEX_RESWDOK) && lex_rwlen == 0) || ((tflags & LEX_INWORD) && lex_wlen == 0)))
-       {
-/*itrace("parse_comsub:%d: lex_incomment -> 1 (%d)", line_number, __LINE__);*/
-         tflags |= LEX_INCOMMENT;
-       }
-
-      if MBTEST(ch == CTLESC || ch == CTLNUL)  /* special shell escapes */
-       {
-         RESIZE_MALLOCED_BUFFER (ret, retind, 2, retsize, 64);
-         ret[retind++] = CTLESC;
-         ret[retind++] = ch;
-         continue;
-       }
-#if 0
-      else if MBTEST((tflags & LEX_INCASE) && ch == close && close == ')')
-        tflags &= ~LEX_INCASE;         /* XXX */
-#endif
-      else if MBTEST(ch == close && (tflags & LEX_INCASE) == 0)                /* ending delimiter */
-       {
-         count--;
-/*itrace("parse_comsub:%d: found close: count = %d", line_number, count);*/
-       }
-      else if MBTEST(((flags & P_FIRSTCLOSE) == 0) && (tflags & LEX_INCASE) == 0 && ch == open)        /* nested begin */
-       {
-         count++;
-/*itrace("parse_comsub:%d: found open: count = %d", line_number, count);*/
-       }
-
-      /* Add this character. */
-      RESIZE_MALLOCED_BUFFER (ret, retind, 1, retsize, 64);
-      ret[retind++] = ch;
-
-      /* If we just read the ending character, don't bother continuing. */
-      if (count == 0)
-       break;
-
-      if MBTEST(ch == '\\')                    /* backslashes */
-       tflags |= LEX_PASSNEXT;
-
-      if MBTEST(shellquote (ch))
-        {
-          /* '', ``, or "" inside $(...). */
-          push_delimiter (dstack, ch);
-          if MBTEST((tflags & LEX_WASDOL) && ch == '\'')       /* $'...' inside group */
-           nestret = parse_matched_pair (ch, ch, ch, &nestlen, P_ALLOWESC|rflags);
-         else
-           nestret = parse_matched_pair (ch, ch, ch, &nestlen, rflags);
-         pop_delimiter (dstack);
-         CHECK_NESTRET_ERROR ();
-
-         if MBTEST((tflags & LEX_WASDOL) && ch == '\'' && (extended_quote || (rflags & P_DQUOTE) == 0))
-           {
-             /* Translate $'...' here. */
-             ttrans = ansiexpand (nestret, 0, nestlen - 1, &ttranslen);
-             free (nestret);
-
-             if ((rflags & P_DQUOTE) == 0)
-               {
-                 nestret = sh_single_quote (ttrans);
-                 free (ttrans);
-                 nestlen = strlen (nestret);
-               }
-             else
-               {
-                 nestret = ttrans;
-                 nestlen = ttranslen;
-               }
-             retind -= 2;              /* back up before the $' */
-           }
-         else if MBTEST((tflags & LEX_WASDOL) && ch == '"' && (extended_quote || (rflags & P_DQUOTE) == 0))
-           {
-             /* Locale expand $"..." here. */
-             ttrans = localeexpand (nestret, 0, nestlen - 1, start_lineno, &ttranslen);
-             free (nestret);
-
-             nestret = sh_mkdoublequoted (ttrans, ttranslen, 0);
-             free (ttrans);
-             nestlen = ttranslen + 2;
-             retind -= 2;              /* back up before the $" */
-           }
+  if (current_token != shell_eof_token)
+    {
+INTERNAL_DEBUG(("current_token (%d) != shell_eof_token (%c)", current_token, shell_eof_token));
+      token_to_read = current_token;
 
-         APPEND_NESTRET ();
-         FREE (nestret);
-       }
-      else if MBTEST((tflags & LEX_WASDOL) && (ch == '(' || ch == '{' || ch == '['))   /* ) } ] */
-       /* check for $(), $[], or ${} inside command substitution. */
-       {
-         if ((tflags & LEX_INCASE) == 0 && open == ch) /* undo previous increment */
-           count--;
-         if (ch == '(')                /* ) */
-           nestret = parse_comsub (0, '(', ')', &nestlen, (rflags|P_COMMAND) & ~P_DQUOTE);
-         else if (ch == '{')           /* } */
-           nestret = parse_matched_pair (0, '{', '}', &nestlen, P_FIRSTCLOSE|P_DOLBRACE|rflags);
-         else if (ch == '[')           /* ] */
-           nestret = parse_matched_pair (0, '[', ']', &nestlen, rflags);
+      /* If we get here we can check eof_encountered and if it's 1 but the
+        previous EOF_Reached test didn't succeed, we can assume that the shell
+        is interactive and ignoreeof is set. We might want to restore the
+        parser state in this case. */
+      shell_eof_token = ps.eof_token;
+      expand_aliases = ps.expand_aliases;
 
-         CHECK_NESTRET_ERROR ();
-         APPEND_NESTRET ();
+      return (&matched_pair_error);
+    }
 
-         FREE (nestret);
-       }
-      if MBTEST(ch == '$' && (tflags & LEX_WASDOL) == 0)
-       tflags |= LEX_WASDOL;
-      else
-       tflags &= ~LEX_WASDOL;
+  /* We don't want to restore the old pushed string list, since we might have
+     used it to consume additional input from an alias while parsing this
+     command substitution. */
+  saved_strings = pushed_string_list;
+  restore_parser_state (&ps);
+  pushed_string_list = saved_strings;
+
+  tcmd = print_comsub (parsed_command);                /* returns static memory */
+  retlen = strlen (tcmd);
+  if (tcmd[0] == '(')                  /* ) need a space to prevent arithmetic expansion */
+    retlen++;
+  ret = xmalloc (retlen + 2);
+  if (tcmd[0] == '(')                  /* ) */
+    {
+      ret[0] = ' ';
+      strcpy (ret + 1, tcmd);
     }
+  else
+    strcpy (ret, tcmd);
+  ret[retlen++] = ')';
+  ret[retlen] = '\0';
+
+  dispose_command (parsed_command);
+  global_command = saved_global;
 
-#if defined (BANG_HISTORY)
-  history_expansion_inhibited = orig_histexp;
-#endif
-  FREE (heredelim);
-  ret[retind] = '\0';
   if (lenp)
-    *lenp = retind;
+    *lenp = retlen;
+
 /*itrace("parse_comsub:%d: returning `%s'", line_number, ret);*/
   return ret;
 }
 
-/* Recursively call the parser to parse a $(...) command substitution. */
+/* Recursively call the parser to parse a $(...) command substitution. This is
+   called by the word expansion code and so does not have to reset as much
+   parser state before calling yyparse(). */
 char *
 xparse_dolparen (base, string, indp, flags)
      char *base;
@@ -4454,11 +4229,8 @@ xparse_dolparen (base, string, indp, flags)
 {
   sh_parser_state_t ps;
   sh_input_line_state_t ls;
-  int orig_ind, nc, sflags, orig_eof_token, start_lineno;
+  int orig_ind, nc, sflags, start_lineno;
   char *ret, *ep, *ostring;
-#if defined (ALIAS) || defined (DPAREN_ARITHMETIC)
-  STRING_SAVER *saved_pushed_strings;
-#endif
 
 /*debug_parser(1);*/
   orig_ind = *indp;
@@ -4476,41 +4248,48 @@ xparse_dolparen (base, string, indp, flags)
     }
 
 /*itrace("xparse_dolparen: size = %d shell_input_line = `%s' string=`%s'", shell_input_line_size, shell_input_line, string);*/
+
   sflags = SEVAL_NONINT|SEVAL_NOHIST|SEVAL_NOFREE;
   if (flags & SX_NOLONGJMP)
     sflags |= SEVAL_NOLONGJMP;
+
   save_parser_state (&ps);
   save_input_line_state (&ls);
-  orig_eof_token = shell_eof_token;
+
 #if defined (ALIAS) || defined (DPAREN_ARITHMETIC)
-  saved_pushed_strings = pushed_string_list;   /* separate parsing context */
   pushed_string_list = (STRING_SAVER *)NULL;
 #endif
-
   /*(*/
   parser_state |= PST_CMDSUBST|PST_EOFTOKEN;   /* allow instant ')' */ /*(*/
   shell_eof_token = ')';
+  if (flags & SX_COMPLETE)
+    parser_state |= PST_NOERROR;
+
+  /* Don't expand aliases on this pass at all. Either parse_comsub() does it
+     at parse time, in which case this string already has aliases expanded,
+     or command_substitute() does it in the child process executing the
+     command substitution and we want to defer it completely until then. The
+     old value will be restored by restore_parser_state(). */
+  expand_aliases = 0;
+#if defined (EXTENDED_GLOB)
+  global_extglob = extended_glob;              /* for reset_parser() */
+#endif
 
-  /* Should we save and restore the bison/yacc lookahead token (yychar) here?
-     Or only if it's not YYEMPTY? */
+  token_to_read = DOLPAREN;                    /* let's trick the parser */
 
-  nc = parse_string (string, "command substitution", sflags, &ep);
+  nc = parse_string (string, "command substitution", sflags, (COMMAND **)NULL, &ep);
 
+  /* Should we save and restore the bison/yacc lookahead token (yychar) here?
+     Or only if it's not YYEMPTY? */
   if (current_token == shell_eof_token)
     yyclearin;         /* might want to clear lookahead token unconditionally */
 
-  reset_parser ();
+  reset_parser ();     /* resets extended_glob too */
   /* reset_parser() clears shell_input_line and associated variables, including
      parser_state, so we want to reset things, then restore what we need. */
   restore_input_line_state (&ls);
-
-  shell_eof_token = orig_eof_token;
   restore_parser_state (&ps);
 
-#if defined (ALIAS) || defined (DPAREN_ARITHMETIC)
-  pushed_string_list = saved_pushed_strings;
-#endif
-
   token_to_read = 0;
 
   /* If parse_string returns < 0, we need to jump to top level with the
@@ -4521,17 +4300,18 @@ xparse_dolparen (base, string, indp, flags)
       clear_shell_input_line ();       /* XXX */
       if (bash_input.type != st_string)        /* paranoia */
        parser_state &= ~(PST_CMDSUBST|PST_EOFTOKEN);
-      jump_to_top_level (-nc); /* XXX */
+      if ((flags & SX_NOLONGJMP) == 0)
+       jump_to_top_level (-nc);        /* XXX */
     }
 
-  /* Need to find how many characters parse_and_execute consumed, update
+  /* Need to find how many characters parse_string() consumed, update
      *indp, if flags != 0, copy the portion of the string parsed into RET
      and return it.  If flags & 1 (SX_NOALLOC) we can return NULL. */
 
   /*(*/
   if (ep[-1] != ')')
     {
-#if DEBUG
+#if 0
       if (ep[-1] != '\n')
        itrace("xparse_dolparen:%d: ep[-1] != RPAREN (%d), ep = `%s'", line_number, ep[-1], ep);
 #endif
@@ -4543,17 +4323,18 @@ xparse_dolparen (base, string, indp, flags)
   *indp = ep - base - 1;
 
   /*((*/
-#if DEBUG
+#if 0
   if (base[*indp] != ')')
     itrace("xparse_dolparen:%d: base[%d] != RPAREN (%d), base = `%s'", line_number, *indp, base[*indp], base);
   if (*indp < orig_ind)
     itrace("xparse_dolparen:%d: *indp (%d) < orig_ind (%d), orig_string = `%s'", line_number, *indp, orig_ind, ostring);
 #endif
 
-  if (base[*indp] != ')')
+  if (base[*indp] != ')' && (flags & SX_NOLONGJMP) == 0)
     {
       /*(*/
-      parser_error (start_lineno, _("unexpected EOF while looking for matching `%c'"), ')');
+      if ((flags & SX_NOERROR) == 0)
+       parser_error (start_lineno, _("unexpected EOF while looking for matching `%c'"), ')');
       jump_to_top_level (DISCARD);
     }
 
@@ -4571,6 +4352,74 @@ xparse_dolparen (base, string, indp, flags)
   return ret;
 }
 
+/* Recursively call the parser to parse the string from a $(...) command
+   substitution to a COMMAND *. This is called from command_substitute() and
+   has the same parser state constraints as xparse_dolparen(). */
+COMMAND *
+parse_string_to_command (string, flags)
+     char *string;
+     int flags;
+{
+  sh_parser_state_t ps;
+  sh_input_line_state_t ls;
+  int nc, sflags;
+  size_t slen;
+  char *ret, *ep;
+  COMMAND *cmd;
+
+  if (*string == 0)
+    return (COMMAND *)NULL;
+
+  ep = string;
+  slen = STRLEN (string);
+
+/*itrace("parse_string_to_command: size = %d shell_input_line = `%s' string=`%s'", shell_input_line_size, shell_input_line, string);*/
+
+  sflags = SEVAL_NONINT|SEVAL_NOHIST|SEVAL_NOFREE;
+  if (flags & SX_NOLONGJMP)
+    sflags |= SEVAL_NOLONGJMP;
+
+  save_parser_state (&ps);
+  save_input_line_state (&ls);
+
+#if defined (ALIAS) || defined (DPAREN_ARITHMETIC)
+  pushed_string_list = (STRING_SAVER *)NULL;
+#endif
+  if (flags & SX_COMPLETE)
+    parser_state |= PST_NOERROR;
+
+  expand_aliases = 0;
+
+  cmd = 0;
+  nc = parse_string (string, "command substitution", sflags, &cmd, &ep);
+
+  reset_parser ();
+  /* reset_parser() clears shell_input_line and associated variables, including
+     parser_state, so we want to reset things, then restore what we need. */
+  restore_input_line_state (&ls);
+  restore_parser_state (&ps);
+
+  /* If parse_string returns < 0, we need to jump to top level with the
+     negative of the return value. We abandon the rest of this input line
+     first */
+  if (nc < 0)
+    {
+      clear_shell_input_line ();       /* XXX */
+      if ((flags & SX_NOLONGJMP) == 0)
+        jump_to_top_level (-nc);       /* XXX */
+    }
+
+  /* Need to check how many characters parse_string() consumed, make sure it's
+     the entire string. */
+  if (nc < slen)
+    {
+      dispose_command (cmd);
+      return (COMMAND *)NULL;
+    }
+
+  return cmd;
+}
+
 #if defined (DPAREN_ARITHMETIC) || defined (ARITH_FOR_COMMAND)
 /* Parse a double-paren construct.  It can be either an arithmetic
    command, an arithmetic `for' command, or a nested subshell.  Returns
@@ -4587,7 +4436,9 @@ parse_dparen (c)
 #if defined (ARITH_FOR_COMMAND)
   if (last_read_token == FOR)
     {
-      arith_for_lineno = line_number;
+      if (word_top < MAX_CASE_NEST)
+       word_top++;
+      arith_for_lineno = word_lineno[word_top] = line_number;
       cmdtyp = parse_arith_cmd (&wval, 0);
       if (cmdtyp == 1)
        {
@@ -4611,7 +4462,7 @@ parse_dparen (c)
        {
          wd = alloc_word_desc ();
          wd->word = wval;
-         wd->flags = W_QUOTED|W_NOSPLIT|W_NOGLOB|W_DQUOTE;
+         wd->flags = W_QUOTED|W_NOSPLIT|W_NOGLOB|W_NOTILDE|W_NOPROCSUB;
          yylval.word_list = make_word_list (wd, (WORD_LIST *)NULL);
          return (ARITH_CMD);
        }
@@ -4746,7 +4597,7 @@ cond_skip_newlines ()
   while ((cond_token = read_token (READ)) == '\n')
     {
       if (SHOULD_PROMPT ())
-       prompt_again ();
+       prompt_again (0);
     }
   return (cond_token);
 }
@@ -4759,7 +4610,7 @@ cond_term ()
 {
   WORD_DESC *op;
   COND_COM *term, *tleft, *tright;
-  int tok, lineno;
+  int tok, lineno, local_extglob;
   char *etext;
 
   /* Read a token.  It can be a left paren, a `!', a unary operator, or a
@@ -4828,6 +4679,7 @@ cond_term ()
       tleft = make_cond_node (COND_TERM, yylval.word, (COND_COM *)NULL, (COND_COM *)NULL);
 
       /* binop */
+      /* tok = cond_skip_newlines (); ? */
       tok = read_token (READ);
       if (tok == WORD && test_binop (yylval.word->word))
        {
@@ -4872,11 +4724,12 @@ cond_term ()
        }
 
       /* rhs */
+      local_extglob = extended_glob;
       if (parser_state & PST_EXTPAT)
        extended_glob = 1;
       tok = read_token (READ);
       if (parser_state & PST_EXTPAT)
-       extended_glob = global_extglob;
+       extended_glob = local_extglob;
       parser_state &= ~(PST_REGEXP|PST_EXTPAT);
 
       if (tok == WORD)
@@ -5032,11 +4885,18 @@ read_token_word (character)
         double-quotes, quote some things inside of double-quotes. */
       if MBTEST(character == '\\')
        {
+         if (parser_state & PST_NOEXPAND)
+           {
+             pass_next_character++;
+             quoted = 1;
+             goto got_character;
+           }
+             
          peek_char = shell_getc (0);
 
          /* Backslash-newline is ignored in all cases except
             when quoted with single quotes. */
-         if (peek_char == '\n')
+         if MBTEST(peek_char == '\n')
            {
              character = '\n';
              goto next_character;
@@ -5046,7 +4906,7 @@ read_token_word (character)
              shell_ungetc (peek_char);
 
              /* If the next character is to be quoted, note it now. */
-             if (cd == 0 || cd == '`' ||
+             if MBTEST(cd == 0 || cd == '`' ||
                  (cd == '"' && peek_char >= 0 && (sh_syntaxtab[peek_char] & CBSDQUOTE)))
                pass_next_character++;
 
@@ -5131,7 +4991,7 @@ read_token_word (character)
 
       /* If the delimiter character is not single quote, parse some of
         the shell expansions that must be read as a single word. */
-      if (shellexp (character))
+      if MBTEST(shellexp (character))
        {
          peek_char = shell_getc (1);
          /* $(...), <(...), >(...), $((...)), ${...}, and $[...] constructs */
@@ -5168,7 +5028,11 @@ read_token_word (character)
              goto next_character;
            }
          /* This handles $'...' and $"..." new-style quoted strings. */
+#if defined (TRANSLATABLE_STRINGS)
          else if MBTEST(character == '$' && (peek_char == '\'' || peek_char == '"'))
+#else
+         else if MBTEST(character == '$' && peek_char == '\'')
+#endif
            {
              int first_line;
 
@@ -5182,6 +5046,7 @@ read_token_word (character)
                return -1;
              if (peek_char == '\'')
                {
+                 /* PST_NOEXPAND */
                  ttrans = ansiexpand (ttok, 0, ttoklen - 1, &ttranslen);
                  free (ttok);
 
@@ -5193,18 +5058,27 @@ read_token_word (character)
                  ttranslen = strlen (ttok);
                  ttrans = ttok;
                }
+#if defined (TRANSLATABLE_STRINGS)
              else
                {
+                 /* PST_NOEXPAND */
                  /* Try to locale-expand the converted string. */
-                 ttrans = localeexpand (ttok, 0, ttoklen - 1, first_line, &ttranslen);
+                 ttrans = locale_expand (ttok, 0, ttoklen - 1, first_line, &ttranslen);
                  free (ttok);
 
-                 /* Add the double quotes back */
-                 ttok = sh_mkdoublequoted (ttrans, ttranslen, 0);
+                 /* Add the double quotes back (or single quotes if the user
+                    has set that option). */
+                 if (singlequote_translations &&
+                       ((ttoklen - 1) != ttranslen || STREQN (ttok, ttrans, ttranslen) == 0))
+                   ttok = sh_single_quote (ttrans);
+                 else
+                   ttok = sh_mkdoublequoted (ttrans, ttranslen, 0);
+
                  free (ttrans);
-                 ttranslen += 2;
                  ttrans = ttok;
+                 ttranslen = strlen (ttrans);
                }
+#endif /* TRANSLATABLE_STRINGS */
 
              RESIZE_MALLOCED_BUFFER (token, token_index, ttranslen + 1,
                                      token_buffer_size,
@@ -5297,7 +5171,7 @@ read_token_word (character)
        }
 
 got_character:
-      if (character == CTLESC || character == CTLNUL)
+      if MBTEST(character == CTLESC || character == CTLNUL)
        {
          RESIZE_MALLOCED_BUFFER (token, token_index, 2, token_buffer_size,
                                  TOKEN_DEFAULT_GROW_SIZE);
@@ -5315,7 +5189,7 @@ got_escaped_character:
 
     next_character:
       if (character == '\n' && SHOULD_PROMPT ())
-       prompt_again ();
+       prompt_again (0);
 
       /* We want to remove quoted newlines (that is, a \<newline> pair)
         unless we are within single quotes or pass_next_character is
@@ -5411,7 +5285,7 @@ got_token:
   yylval.word = the_word;
 
   /* should we check that quoted == 0 as well? */
-  if (token[0] == '{' && token[token_index-1] == '}' &&
+  if MBTEST(token[0] == '{' && token[token_index-1] == '}' &&
       (character == '<' || character == '>'))
     {
       /* can use token; already copied to the_word */
@@ -5473,8 +5347,10 @@ reserved_word_acceptable (toksym)
     case '{':
     case '}':          /* XXX */
     case AND_AND:
+    case ARITH_CMD:
     case BANG:
     case BAR_AND:
+    case COND_END:
     case DO:
     case DONE:
     case ELIF:
@@ -5494,6 +5370,7 @@ reserved_word_acceptable (toksym)
     case UNTIL:
     case WHILE:
     case 0:
+    case DOLPAREN:
       return 1;
     default:
 #if defined (COPROCESS_SUPPORT)
@@ -5653,8 +5530,11 @@ history_delimiting_chars (line)
        return (" ");
     }
 
+  /* Assume that by this point we are reading lines in a multi-line command.
+     If we have multiple consecutive blank lines we want to return only one
+     semicolon. */
   if (line_isblank (line))
-    return ("");
+    return (current_command_line_count > 1 && last_read_token == '\n' && token_before_that != '\n') ? "; " : "";
 
   return ("; ");
 }
@@ -5663,7 +5543,8 @@ history_delimiting_chars (line)
 /* Issue a prompt, or prepare to issue a prompt when the next character
    is read. */
 static void
-prompt_again ()
+prompt_again (force)
+     int force;
 {
   char *temp_prompt;
 
@@ -5793,7 +5674,7 @@ decode_prompt_string (string)
   int last_exit_value, last_comsub_pid;
 #if defined (PROMPT_STRING_DECODE)
   size_t result_size;
-  int result_index;
+  size_t result_index;
   int c, n, i;
   char *temp, *t_host, octal_string[4];
   struct tm *tm;  
@@ -5930,7 +5811,7 @@ decode_prompt_string (string)
                /* Make sure that expand_prompt_string is called with a
                   second argument of Q_DOUBLE_QUOTES if we use this
                   function here. */
-               temp = sh_backslash_quote_for_double_quotes (timebuf);
+               temp = sh_backslash_quote_for_double_quotes (timebuf, 0);
              else
                temp = savestring (timebuf);
              goto add_string;
@@ -5946,9 +5827,14 @@ decode_prompt_string (string)
              temp = base_pathname (shell_name);
              /* Try to quote anything the user can set in the file system */
              if (promptvars || posixly_correct)
-               temp = sh_backslash_quote_for_double_quotes (temp);
+               {
+                 char *t;
+                 t = sh_strvis (temp);
+                 temp = sh_backslash_quote_for_double_quotes (t, 0);
+                 free (t);
+               }
              else
-               temp = savestring (temp);
+               temp = sh_strvis (temp);
              goto add_string;
 
            case 'v':
@@ -6023,9 +5909,14 @@ decode_prompt_string (string)
                  /* Make sure that expand_prompt_string is called with a
                     second argument of Q_DOUBLE_QUOTES if we use this
                     function here. */
-                 temp = sh_backslash_quote_for_double_quotes (t_string);
+                 {
+                   char *t;
+                   t = sh_strvis (t_string);
+                   temp = sh_backslash_quote_for_double_quotes (t, 0);
+                   free (t);
+                 }
                else
-                 temp = savestring (t_string);
+                 temp = sh_strvis (t_string);
 
                goto add_string;
              }
@@ -6045,7 +5936,7 @@ decode_prompt_string (string)
                /* Make sure that expand_prompt_string is called with a
                   second argument of Q_DOUBLE_QUOTES if we use this
                   function here. */
-               temp = sh_backslash_quote_for_double_quotes (t_host);
+               temp = sh_backslash_quote_for_double_quotes (t_host, 0);
              else
                temp = savestring (t_host);
              free (t_host);
@@ -6200,7 +6091,8 @@ int
 yyerror (msg)
      const char *msg;
 {
-  report_syntax_error ((char *)NULL);
+  if ((parser_state & PST_NOERROR) == 0)
+    report_syntax_error ((char *)NULL);
   reset_parser ();
   return (0);
 }
@@ -6362,8 +6254,14 @@ report_syntax_error (message)
     }
   else
     {
-      msg = EOF_Reached ? _("syntax error: unexpected end of file") : _("syntax error");
-      parser_error (line_number, "%s", msg);
+      if (EOF_Reached && shell_eof_token && current_token != shell_eof_token)
+       parser_error (line_number, _("unexpected EOF while looking for matching `%c'"), shell_eof_token);
+      else
+       {
+         msg = EOF_Reached ? _("syntax error: unexpected end of file") : _("syntax error");
+         parser_error (line_number, "%s", msg);
+       }
+
       /* When the shell is interactive, this file uses EOF_Reached
         only for error reporting.  Other mechanisms are used to
         decide whether or not to exit. */
@@ -6432,7 +6330,7 @@ handle_eof_input_unit ()
              last_read_token = current_token = '\n';
              /* Reset the prompt string to be $PS1. */
              prompt_string_pointer = (char **)NULL;
-             prompt_again ();
+             prompt_again (0);
              return;
            }
        }
@@ -6471,31 +6369,26 @@ parse_string_to_word_list (s, flags, whom)
      const char *whom;
 {
   WORD_LIST *wl;
-  int tok, orig_current_token, orig_line_number, orig_input_terminator;
-  int orig_line_count;
-  int old_echo_input, old_expand_aliases, ea;
-#if defined (HISTORY)
-  int old_remember_on_history, old_history_expansion_inhibited;
-#endif
+  int tok, orig_current_token, orig_line_number;
+  int orig_parser_state;
+  sh_parser_state_t ps;
+  int ea;
+
+  orig_line_number = line_number;
+  save_parser_state (&ps);
 
 #if defined (HISTORY)
-  old_remember_on_history = remember_on_history;
-#  if defined (BANG_HISTORY)
-  old_history_expansion_inhibited = history_expansion_inhibited;
-#  endif
   bash_history_disable ();
 #endif
 
-  orig_line_number = line_number;
-  orig_line_count = current_command_line_count;
-  orig_input_terminator = shell_input_line_terminator;
-  old_echo_input = echo_input_at_read;
-  old_expand_aliases = expand_aliases;
-
   push_stream (1);
   if (ea = expanding_alias ())
     parser_save_alias ();
-  last_read_token = WORD;              /* WORD to allow reserved words here */
+
+  /* WORD to avoid parsing reserved words as themselves and just parse them as
+     WORDs. */
+  last_read_token = WORD;
+
   current_command_line_count = 0;
   echo_input_at_read = expand_aliases = 0;
 
@@ -6503,7 +6396,13 @@ parse_string_to_word_list (s, flags, whom)
   wl = (WORD_LIST *)NULL;
 
   if (flags & 1)
-    parser_state |= PST_COMPASSIGN|PST_REPARSE;
+    {
+      orig_parser_state = parser_state;                /* XXX - not needed? */
+      /* State flags we don't want to persist into compound assignments. */
+      parser_state &= ~PST_NOEXPAND;   /* parse_comsub sentinel */
+      /* State flags we want to set for this run through the tokenizer. */
+      parser_state |= PST_COMPASSIGN|PST_REPARSE;
+    }
 
   while ((tok = read_token (READ)) != yacc_EOF)
     {
@@ -6532,21 +6431,10 @@ parse_string_to_word_list (s, flags, whom)
   if (ea)
     parser_restore_alias ();
 
-#if defined (HISTORY)
-  remember_on_history = old_remember_on_history;
-#  if defined (BANG_HISTORY)
-  history_expansion_inhibited = old_history_expansion_inhibited;
-#  endif /* BANG_HISTORY */
-#endif /* HISTORY */
-
-  echo_input_at_read = old_echo_input;
-  expand_aliases = old_expand_aliases;
-
-  current_command_line_count = orig_line_count;
-  shell_input_line_terminator = orig_input_terminator;
+  restore_parser_state (&ps);
 
   if (flags & 1)
-    parser_state &= ~(PST_COMPASSIGN|PST_REPARSE);
+    parser_state = orig_parser_state;  /* XXX - not needed? */
 
   if (wl == &parse_string_error)
     {
@@ -6565,30 +6453,37 @@ parse_compound_assignment (retlenp)
      int *retlenp;
 {
   WORD_LIST *wl, *rl;
-  int tok, orig_line_number, orig_token_size, orig_last_token, assignok;
-  char *saved_token, *ret;
+  int tok, orig_line_number, assignok;
+  sh_parser_state_t ps;
+  char *ret;
 
-  saved_token = token;
-  orig_token_size = token_buffer_size;
   orig_line_number = line_number;
-  orig_last_token = last_read_token;
+  save_parser_state (&ps);
 
-  last_read_token = WORD;      /* WORD to allow reserved words here */
+  /* WORD to avoid parsing reserved words as themselves and just parse them as
+     WORDs. Plus it means we won't be in a command position and so alias
+     expansion won't happen. */
+  last_read_token = WORD;
 
   token = (char *)NULL;
   token_buffer_size = 0;
+  wl = (WORD_LIST *)NULL;      /* ( */
 
   assignok = parser_state&PST_ASSIGNOK;                /* XXX */
 
-  wl = (WORD_LIST *)NULL;      /* ( */
+  /* State flags we don't want to persist into compound assignments. */
+  parser_state &= ~(PST_NOEXPAND|PST_CONDCMD|PST_CONDEXPR|PST_REGEXP|PST_EXTPAT);
+  /* State flags we want to set for this run through the tokenizer. */
   parser_state |= PST_COMPASSIGN;
 
+  esacs_needed_count = expecting_in_token = 0;
+
   while ((tok = read_token (READ)) != ')')
     {
       if (tok == '\n')                 /* Allow newlines in compound assignments */
        {
          if (SHOULD_PROMPT ())
-           prompt_again ();
+           prompt_again (0);
          continue;
        }
       if (tok != WORD && tok != ASSIGNMENT_WORD)
@@ -6606,11 +6501,7 @@ parse_compound_assignment (retlenp)
       wl = make_word_list (yylval.word, wl);
     }
 
-  FREE (token);
-  token = saved_token;
-  token_buffer_size = orig_token_size;
-
-  parser_state &= ~PST_COMPASSIGN;
+  restore_parser_state (&ps);
 
   if (wl == &parse_string_error)
     {
@@ -6622,8 +6513,6 @@ parse_compound_assignment (retlenp)
        jump_to_top_level (DISCARD);
     }
 
-  last_read_token = orig_last_token;           /* XXX - was WORD? */
-
   if (wl)
     {
       rl = REVERSE_LIST (wl, WORD_LIST *);
@@ -6662,6 +6551,7 @@ save_parser_state (ps)
 
   ps->input_line_terminator = shell_input_line_terminator;
   ps->eof_encountered = eof_encountered;
+  ps->eol_lookahead = eol_ungetc_lookahead;
 
   ps->prompt_string_pointer = prompt_string_pointer;
 
@@ -6687,11 +6577,19 @@ save_parser_state (ps)
   ps->need_here_doc = need_here_doc;
   ps->here_doc_first_line = here_doc_first_line;
 
+  ps->esacs_needed = esacs_needed_count;
+  ps->expecting_in = expecting_in_token;
+
   if (need_here_doc == 0)
     ps->redir_stack[0] = 0;
   else
     memcpy (ps->redir_stack, redir_stack, sizeof (redir_stack[0]) * HEREDOC_MAX);
 
+#if defined (ALIAS) || defined (DPAREN_ARITHMETIC)
+  ps->pushed_strings = pushed_string_list;
+#endif
+
+  ps->eof_token = shell_eof_token;
   ps->token = token;
   ps->token_buffer_size = token_buffer_size;
   /* Force reallocation on next call to read_token_word */
@@ -6719,6 +6617,7 @@ restore_parser_state (ps)
 
   shell_input_line_terminator = ps->input_line_terminator;
   eof_encountered = ps->eof_encountered;
+  eol_ungetc_lookahead = ps->eol_lookahead;
 
   prompt_string_pointer = ps->prompt_string_pointer;
 
@@ -6744,6 +6643,9 @@ restore_parser_state (ps)
   need_here_doc = ps->need_here_doc;
   here_doc_first_line = ps->here_doc_first_line;
 
+  esacs_needed_count = ps->esacs_needed;
+  expecting_in_token = ps->expecting_in;
+
 #if 0
   for (i = 0; i < HEREDOC_MAX; i++)
     redir_stack[i] = ps->redir_stack[i];
@@ -6754,9 +6656,14 @@ restore_parser_state (ps)
     memcpy (redir_stack, ps->redir_stack, sizeof (redir_stack[0]) * HEREDOC_MAX);
 #endif
 
+#if defined (ALIAS) || defined (DPAREN_ARITHMETIC)
+  pushed_string_list = (STRING_SAVER *)ps->pushed_strings;
+#endif
+
   FREE (token);
   token = ps->token;
   token_buffer_size = ps->token_buffer_size;
+  shell_eof_token = ps->eof_token;
 }
 
 sh_input_line_state_t *
index 41bdea08ec7af4e45a161da01014dcd872e92a64..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 (file)
@@ -1,186 +0,0 @@
-/* A Bison parser, made by GNU Bison 3.6.4.  */
-
-/* Bison interface for Yacc-like parsers in C
-
-   Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 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/>.  */
-
-/* As a special exception, you may create a larger work that contains
-   part or all of the Bison parser skeleton and distribute that work
-   under terms of your choice, so long as that work isn't itself a
-   parser generator using the skeleton or a modified version thereof
-   as a parser skeleton.  Alternatively, if you modify or redistribute
-   the parser skeleton itself, you may (at your option) remove this
-   special exception, which will cause the skeleton and the resulting
-   Bison output files to be licensed under the GNU General Public
-   License without this special exception.
-
-   This special exception was added by the Free Software Foundation in
-   version 2.2 of Bison.  */
-
-/* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
-   especially those whose name start with YY_ or yy_.  They are
-   private implementation details that can be changed or removed.  */
-
-#ifndef YY_YY_Y_TAB_H_INCLUDED
-# define YY_YY_Y_TAB_H_INCLUDED
-/* Debug traces.  */
-#ifndef YYDEBUG
-# define YYDEBUG 0
-#endif
-#if YYDEBUG
-extern int yydebug;
-#endif
-
-/* Token kinds.  */
-#ifndef YYTOKENTYPE
-# define YYTOKENTYPE
-  enum yytokentype
-  {
-    YYEMPTY = -2,
-    YYEOF = 0,                     /* "end of file"  */
-    YYerror = 256,                 /* error  */
-    YYUNDEF = 257,                 /* "invalid token"  */
-    IF = 258,                      /* IF  */
-    THEN = 259,                    /* THEN  */
-    ELSE = 260,                    /* ELSE  */
-    ELIF = 261,                    /* ELIF  */
-    FI = 262,                      /* FI  */
-    CASE = 263,                    /* CASE  */
-    ESAC = 264,                    /* ESAC  */
-    FOR = 265,                     /* FOR  */
-    SELECT = 266,                  /* SELECT  */
-    WHILE = 267,                   /* WHILE  */
-    UNTIL = 268,                   /* UNTIL  */
-    DO = 269,                      /* DO  */
-    DONE = 270,                    /* DONE  */
-    FUNCTION = 271,                /* FUNCTION  */
-    COPROC = 272,                  /* COPROC  */
-    COND_START = 273,              /* COND_START  */
-    COND_END = 274,                /* COND_END  */
-    COND_ERROR = 275,              /* COND_ERROR  */
-    IN = 276,                      /* IN  */
-    BANG = 277,                    /* BANG  */
-    TIME = 278,                    /* TIME  */
-    TIMEOPT = 279,                 /* TIMEOPT  */
-    TIMEIGN = 280,                 /* TIMEIGN  */
-    WORD = 281,                    /* WORD  */
-    ASSIGNMENT_WORD = 282,         /* ASSIGNMENT_WORD  */
-    REDIR_WORD = 283,              /* REDIR_WORD  */
-    NUMBER = 284,                  /* NUMBER  */
-    ARITH_CMD = 285,               /* ARITH_CMD  */
-    ARITH_FOR_EXPRS = 286,         /* ARITH_FOR_EXPRS  */
-    COND_CMD = 287,                /* COND_CMD  */
-    AND_AND = 288,                 /* AND_AND  */
-    OR_OR = 289,                   /* OR_OR  */
-    GREATER_GREATER = 290,         /* GREATER_GREATER  */
-    LESS_LESS = 291,               /* LESS_LESS  */
-    LESS_AND = 292,                /* LESS_AND  */
-    LESS_LESS_LESS = 293,          /* LESS_LESS_LESS  */
-    GREATER_AND = 294,             /* GREATER_AND  */
-    SEMI_SEMI = 295,               /* SEMI_SEMI  */
-    SEMI_AND = 296,                /* SEMI_AND  */
-    SEMI_SEMI_AND = 297,           /* SEMI_SEMI_AND  */
-    LESS_LESS_MINUS = 298,         /* LESS_LESS_MINUS  */
-    AND_GREATER = 299,             /* AND_GREATER  */
-    AND_GREATER_GREATER = 300,     /* AND_GREATER_GREATER  */
-    LESS_GREATER = 301,            /* LESS_GREATER  */
-    GREATER_BAR = 302,             /* GREATER_BAR  */
-    BAR_AND = 303,                 /* BAR_AND  */
-    yacc_EOF = 304                 /* yacc_EOF  */
-  };
-  typedef enum yytokentype yytoken_kind_t;
-#endif
-/* Token kinds.  */
-#define YYEOF 0
-#define YYerror 256
-#define YYUNDEF 257
-#define IF 258
-#define THEN 259
-#define ELSE 260
-#define ELIF 261
-#define FI 262
-#define CASE 263
-#define ESAC 264
-#define FOR 265
-#define SELECT 266
-#define WHILE 267
-#define UNTIL 268
-#define DO 269
-#define DONE 270
-#define FUNCTION 271
-#define COPROC 272
-#define COND_START 273
-#define COND_END 274
-#define COND_ERROR 275
-#define IN 276
-#define BANG 277
-#define TIME 278
-#define TIMEOPT 279
-#define TIMEIGN 280
-#define WORD 281
-#define ASSIGNMENT_WORD 282
-#define REDIR_WORD 283
-#define NUMBER 284
-#define ARITH_CMD 285
-#define ARITH_FOR_EXPRS 286
-#define COND_CMD 287
-#define AND_AND 288
-#define OR_OR 289
-#define GREATER_GREATER 290
-#define LESS_LESS 291
-#define LESS_AND 292
-#define LESS_LESS_LESS 293
-#define GREATER_AND 294
-#define SEMI_SEMI 295
-#define SEMI_AND 296
-#define SEMI_SEMI_AND 297
-#define LESS_LESS_MINUS 298
-#define AND_GREATER 299
-#define AND_GREATER_GREATER 300
-#define LESS_GREATER 301
-#define GREATER_BAR 302
-#define BAR_AND 303
-#define yacc_EOF 304
-
-/* Value type.  */
-#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-union YYSTYPE
-{
-#line 328 "/Users/chet/src/bash/src/parse.y"
-
-  WORD_DESC *word;             /* the word that we read. */
-  int number;                  /* the number that we read. */
-  WORD_LIST *word_list;
-  COMMAND *command;
-  REDIRECT *redirect;
-  ELEMENT element;
-  PATTERN_LIST *pattern;
-
-#line 174 "y.tab.h"
-
-};
-typedef union YYSTYPE YYSTYPE;
-# define YYSTYPE_IS_TRIVIAL 1
-# define YYSTYPE_IS_DECLARED 1
-#endif
-
-
-extern YYSTYPE yylval;
-
-int yyparse (void);
-
-#endif /* !YY_YY_Y_TAB_H_INCLUDED  */
index 59bddacaf6405553a6ea00611bea7e00db411ec7..59bf0fec4c427cdd4d009e8319f84e2d762b4ccc 100644 (file)
--- a/parser.h
+++ b/parser.h
@@ -1,7 +1,7 @@
 /* parser.h -- Everything you wanted to know about the parser, but were
    afraid to ask. */
 
-/* Copyright (C) 1995-2019 Free Software Foundation, Inc.
+/* Copyright (C) 1995-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -30,7 +30,7 @@
 #define PST_ALEXPNEXT  0x000002        /* expand next word for aliases */
 #define PST_ALLOWOPNBRC        0x000004        /* allow open brace for function def */
 #define PST_NEEDCLOSBRC        0x000008        /* need close brace */
-#define PST_DBLPAREN   0x000010        /* double-paren parsing */
+#define PST_DBLPAREN   0x000010        /* double-paren parsing - unused */
 #define PST_SUBSHELL   0x000020        /* ( ... ) subshell */
 #define PST_CMDSUBST   0x000040        /* $( ... ) command substitution */
 #define PST_CASESTMT   0x000080        /* parsing a case statement */
@@ -48,6 +48,8 @@
 #define PST_REDIRLIST  0x080000        /* parsing a list of redirections preceding a simple command name */
 #define PST_COMMENT    0x100000        /* parsing a shell comment; used by aliases */
 #define PST_ENDALIAS   0x200000        /* just finished expanding and consuming an alias */
+#define PST_NOEXPAND   0x400000        /* don't expand anything in read_token_word; for command substitution */
+#define PST_NOERROR    0x800000        /* don't print error messages in yyerror */
 
 /* Definition of the delimiter stack.  Needed by parse.y and bashhist.c. */
 struct dstack {
index 3c226949a0b5cc93e8b24335cd206da5db16d18c..165390c155411545a5e05f0ed98d1c85d0098955 100644 (file)
@@ -1,6 +1,6 @@
 /* patchlevel.h -- current bash patch level */
 
-/* Copyright (C) 2001-2020 Free Software Foundation, Inc.
+/* Copyright (C) 2001-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -25,6 +25,6 @@
    regexp `^#define[   ]*PATCHLEVEL', since that's what support/mkversion.sh
    looks for to find the patch level (for the sccs version string). */
 
-#define PATCHLEVEL 16
+#define PATCHLEVEL 0
 
 #endif /* _PATCHLEVEL_H_ */
index 6e7ef283d8960419c056724e840c87891ea5e41d..379128e79a8ac8fc091d7f67cd052859ec591ee3 100644 (file)
--- a/pathexp.c
+++ b/pathexp.c
@@ -42,12 +42,7 @@ static int glob_name_is_acceptable PARAMS((const char *));
 static void ignore_globbed_names PARAMS((char **, sh_ignore_func_t *));
 static char *split_ignorespec PARAMS((char *, int *));
               
-#if defined (USE_POSIX_GLOB_LIBRARY)
-#  include <glob.h>
-typedef int posix_glob_errfunc_t PARAMS((const char *, int));
-#else
-#  include <glob/glob.h>
-#endif
+#include <glob/glob.h>
 
 /* Control whether * matches .files in globbing. */
 int glob_dot_filenames;
@@ -171,6 +166,7 @@ ere_char (c)
   return (0);
 }
 
+/* This is only used to determine whether to backslash-quote a character. */
 int
 glob_char_p (s)
      const char *s;
@@ -412,54 +408,6 @@ shell_glob_filename (pathname, qflags)
      const char *pathname;
      int qflags;
 {
-#if defined (USE_POSIX_GLOB_LIBRARY)
-  register int i;
-  char *temp, **results;
-  glob_t filenames;
-  int glob_flags;
-
-  temp = quote_string_for_globbing (pathname, QGLOB_FILENAME|qflags);
-
-  filenames.gl_offs = 0;
-
-#  if defined (GLOB_PERIOD)
-  glob_flags = glob_dot_filenames ? GLOB_PERIOD : 0;
-#  else
-  glob_flags = 0;
-#  endif /* !GLOB_PERIOD */
-
-  glob_flags |= (GLOB_ERR | GLOB_DOOFFS);
-
-  i = glob (temp, glob_flags, (posix_glob_errfunc_t *)NULL, &filenames);
-
-  free (temp);
-
-  if (i == GLOB_NOSPACE || i == GLOB_ABORTED)
-    return ((char **)NULL);
-  else if (i == GLOB_NOMATCH)
-    filenames.gl_pathv = (char **)NULL;
-  else if (i != 0)             /* other error codes not in POSIX.2 */
-    filenames.gl_pathv = (char **)NULL;
-
-  results = filenames.gl_pathv;
-
-  if (results && ((GLOB_FAILED (results)) == 0))
-    {
-      if (should_ignore_glob_matches ())
-       ignore_glob_matches (results);
-      if (results && results[0])
-       strvec_sort (results, 1);               /* posix sort */
-      else
-       {
-         FREE (results);
-         results = (char **)NULL;
-       }
-    }
-
-  return (results);
-
-#else /* !USE_POSIX_GLOB_LIBRARY */
-
   char *temp, **results;
   int gflags, quoted_pattern;
 
@@ -484,7 +432,6 @@ shell_glob_filename (pathname, qflags)
     }
 
   return (results);
-#endif /* !USE_POSIX_GLOB_LIBRARY */
 }
 
 /* Stuff for GLOBIGNORE. */
index 7ed0d2ad6904be1c8873073465f67b87b35030ec..b96f92af488a6f874f43e871b86ed2a7841da298 100644 (file)
--- a/pathexp.h
+++ b/pathexp.h
 #if !defined (_PATHEXP_H_)
 #define _PATHEXP_H_
 
-#if defined (USE_POSIX_GLOB_LIBRARY)
-#  define GLOB_FAILED(glist)   !(glist)
-#else /* !USE_POSIX_GLOB_LIBRARY */
-#  define GLOB_FAILED(glist)   (glist) == (char **)&glob_error_return
+#define GLOB_FAILED(glist)     (glist) == (char **)&glob_error_return
+
 extern int noglob_dot_filenames;
 extern char *glob_error_return;
-#endif /* !USE_POSIX_GLOB_LIBRARY */
 
 /* Flag values for quote_string_for_globbing */
 #define QGLOB_CVTNULL  0x01    /* convert QUOTED_NULL strings to '\0' */
index fe1a03200a3d044ed2efaf2d4565c434ef67b40c..9612406d9e02e50a78edcccd9bb62687c57a6319 100644 (file)
@@ -1,6 +1,6 @@
 /* pcomplete.c - functions to generate lists of matches for programmable completion. */
 
-/* Copyright (C) 1999-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1999-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -414,6 +414,7 @@ init_itemlist_from_varlist (itp, svfunc)
     sl->list[i] = savestring (vlist[i]->name);
   sl->list[sl->list_len = n] = (char *)NULL;
   itp->slist = sl;
+  free (vlist);
 }
 
 static int
@@ -884,16 +885,18 @@ gen_action_completions (cs, text)
    TEXT as a match prefix, or just go without?  Currently, the code does not
    use TEXT, just globs CS->globpat and returns the results.  If we do decide
    to use TEXT, we should call quote_string_for_globbing before the call to
-   glob_filename. */
+   glob_filename (in which case we could use shell_glob_filename). */
 static STRINGLIST *
 gen_globpat_matches (cs, text)
       COMPSPEC *cs;
       const char *text;
 {
   STRINGLIST *sl;
+  int gflags;
 
   sl = strlist_create (0);
-  sl->list = glob_filename (cs->globpat, 0);
+  gflags = glob_star ? GX_GLOBSTAR : 0;
+  sl->list = glob_filename (cs->globpat, gflags);
   if (GLOB_FAILED (sl->list))
     sl->list = (char **)NULL;
   if (sl->list)
@@ -1296,7 +1299,7 @@ command_line_to_word_list (line, llen, sentinel, nwp, cwp)
      int llen, sentinel, *nwp, *cwp;
 {
   WORD_LIST *ret;
-  char *delims;
+  const char *delims;
 
 #if 0
   delims = "()<>;&| \t\n";     /* shell metacharacters break words */
index 075fce7374c802d3ab330e592b414c51a0b1d155..e8df62ece99628a390c9c14f1de23b59852e5a34 100644 (file)
@@ -1,6 +1,6 @@
 /* pcomplib.c - library functions for programmable completion. */
 
-/* Copyright (C) 1999-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1999-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -37,7 +37,7 @@
 #include "shell.h"
 #include "pcomplete.h"
 
-#define COMPLETE_HASH_BUCKETS  256     /* must be power of two */
+#define COMPLETE_HASH_BUCKETS  512     /* must be power of two */
 
 #define STRDUP(x)      ((x) ? savestring (x) : (char *)NULL)
 
index 28fbbfb6732df3cea30cd3b6bdc3db7afc1e74ec..56f6b5aab324daa15127accf18f6cd0040d6abc9 100644 (file)
Binary files a/po/af.gmo and b/po/af.gmo differ
index c35068142285172a54c41f0e3d9d0ae7eb01676f..d9e5f0845691e3fa2f28041c599e379f457d4caa 100644 (file)
--- a/po/af.po
+++ b/po/af.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: bash 2.0\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-11-28 12:51-0500\n"
+"POT-Creation-Date: 2022-01-11 14:50-0500\n"
 "PO-Revision-Date: 2004-03-17 13:48+0200\n"
 "Last-Translator: Petri Jooste <rkwjpj@puk.ac.za>\n"
 "Language-Team: Afrikaans <i18n@af.org.za>\n"
@@ -21,57 +21,52 @@ msgstr ""
 msgid "bad array subscript"
 msgstr "Os/2 Biskaart Skikking"
 
-#: arrayfunc.c:421 builtins/declare.def:638 variables.c:2274 variables.c:2300
-#: variables.c:3133
+#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268
+#: variables.c:3101
 #, c-format
 msgid "%s: removing nameref attribute"
 msgstr ""
 
-#: arrayfunc.c:446 builtins/declare.def:851
+#: arrayfunc.c:496 builtins/declare.def:868
 #, c-format
 msgid "%s: cannot convert indexed to associative array"
 msgstr ""
 
-#: arrayfunc.c:700
-#, c-format
-msgid "%s: invalid associative array key"
-msgstr ""
-
-#: arrayfunc.c:702
+#: arrayfunc.c:777
 #, c-format
 msgid "%s: cannot assign to non-numeric index"
 msgstr ""
 
-#: arrayfunc.c:747
+#: arrayfunc.c:822
 #, c-format
 msgid "%s: %s: must use subscript when assigning associative array"
 msgstr ""
 
-#: bashhist.c:452
+#: bashhist.c:455
 #, c-format
 msgid "%s: cannot create: %s"
 msgstr "%s: kan nie %s skep nie"
 
-#: bashline.c:4310
+#: bashline.c:4479
 msgid "bash_execute_unix_command: cannot find keymap for command"
 msgstr ""
 
-#: bashline.c:4459
+#: bashline.c:4637
 #, c-format
 msgid "%s: first non-whitespace character is not `\"'"
 msgstr ""
 
-#: bashline.c:4488
+#: bashline.c:4666
 #, c-format
 msgid "no closing `%c' in %s"
 msgstr ""
 
-#: bashline.c:4519
+#: bashline.c:4697
 #, c-format
 msgid "%s: missing colon separator"
 msgstr ""
 
-#: bashline.c:4555
+#: bashline.c:4733
 #, fuzzy, c-format
 msgid "`%s': cannot unbind in command keymap"
 msgstr "%s: bevel nie gevind nie"
@@ -91,7 +86,7 @@ msgstr ""
 msgid "brace expansion: failed to allocate memory for `%s'"
 msgstr ""
 
-#: builtins/alias.def:131 variables.c:1844
+#: builtins/alias.def:131 variables.c:1817
 #, c-format
 msgid "`%s': invalid alias name"
 msgstr ""
@@ -154,7 +149,7 @@ msgstr ""
 msgid "HOME not set"
 msgstr ""
 
-#: builtins/cd.def:335 builtins/common.c:161 test.c:901
+#: builtins/cd.def:335 builtins/common.c:161 test.c:916
 #, fuzzy
 msgid "too many arguments"
 msgstr "te veel parameters"
@@ -183,7 +178,7 @@ msgstr ""
 msgid "%s: usage: "
 msgstr ""
 
-#: builtins/common.c:193 shell.c:516 shell.c:844
+#: builtins/common.c:193 shell.c:524 shell.c:866
 #, fuzzy, c-format
 msgid "%s: option requires an argument"
 msgstr "%s: option `%s' requires an argument\n"
@@ -198,7 +193,7 @@ msgstr ""
 msgid "%s: not found"
 msgstr "%s: bevel nie gevind nie"
 
-#: builtins/common.c:216 shell.c:857
+#: builtins/common.c:216 shell.c:879
 #, fuzzy, c-format
 msgid "%s: invalid option"
 msgstr "%s: illegal option -- %c\n"
@@ -208,7 +203,7 @@ msgstr "%s: illegal option -- %c\n"
 msgid "%s: invalid option name"
 msgstr "%s: illegal option -- %c\n"
 
-#: builtins/common.c:230 execute_cmd.c:2373 general.c:368 general.c:373
+#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373
 #, fuzzy, c-format
 msgid "`%s': not a valid identifier"
 msgstr "Die datum is nie geldige!"
@@ -223,7 +218,7 @@ msgstr "Die sein nommer wat was gevang het"
 msgid "invalid hex number"
 msgstr "Die sein nommer wat was gevang het"
 
-#: builtins/common.c:244 expr.c:1569
+#: builtins/common.c:244 expr.c:1574
 #, fuzzy
 msgid "invalid number"
 msgstr "Die sein nommer wat was gevang het"
@@ -238,90 +233,95 @@ msgstr ""
 msgid "`%s': not a pid or valid job spec"
 msgstr ""
 
-#: builtins/common.c:266 error.c:510
+#: builtins/common.c:266 error.c:536
 #, fuzzy, c-format
 msgid "%s: readonly variable"
 msgstr "Veranderlike boom"
 
-#: builtins/common.c:274
+#: builtins/common.c:273
+#, fuzzy, c-format
+msgid "%s: cannot assign"
+msgstr "%s: kan nie %s skep nie"
+
+#: builtins/common.c:281
 #, c-format
 msgid "%s: %s out of range"
 msgstr ""
 
-#: builtins/common.c:274 builtins/common.c:276
+#: builtins/common.c:281 builtins/common.c:283
 #, fuzzy
 msgid "argument"
 msgstr "argument verwag\n"
 
-#: builtins/common.c:276
+#: builtins/common.c:283
 #, c-format
 msgid "%s out of range"
 msgstr ""
 
-#: builtins/common.c:284
+#: builtins/common.c:291
 #, c-format
 msgid "%s: no such job"
 msgstr ""
 
-#: builtins/common.c:292
+#: builtins/common.c:299
 #, fuzzy, c-format
 msgid "%s: no job control"
 msgstr "geen taakbeheer in hierdie dop nie"
 
-#: builtins/common.c:294
+#: builtins/common.c:301
 #, fuzzy
 msgid "no job control"
 msgstr "geen taakbeheer in hierdie dop nie"
 
-#: builtins/common.c:304
+#: builtins/common.c:311
 #, fuzzy, c-format
 msgid "%s: restricted"
 msgstr "Die bediener beëindig Die verbinding."
 
-#: builtins/common.c:306
+#: builtins/common.c:313
 msgid "restricted"
 msgstr ""
 
-#: builtins/common.c:314
+#: builtins/common.c:321
 #, c-format
 msgid "%s: not a shell builtin"
 msgstr ""
 
-#: builtins/common.c:323
+#: builtins/common.c:330
 #, fuzzy, c-format
 msgid "write error: %s"
 msgstr "pypfout: %s"
 
-#: builtins/common.c:331
+#: builtins/common.c:338
 #, c-format
 msgid "error setting terminal attributes: %s"
 msgstr ""
 
-#: builtins/common.c:333
+#: builtins/common.c:340
 #, c-format
 msgid "error getting terminal attributes: %s"
 msgstr ""
 
-#: builtins/common.c:635
+#: builtins/common.c:642
 #, c-format
 msgid "%s: error retrieving current directory: %s: %s\n"
 msgstr ""
 
-#: builtins/common.c:701 builtins/common.c:703
+#: builtins/common.c:708 builtins/common.c:710
 #, fuzzy, c-format
 msgid "%s: ambiguous job spec"
 msgstr "%s: dubbelsinnige herroetering"
 
-#: builtins/common.c:964
+#: builtins/common.c:971
 msgid "help not available in this version"
 msgstr ""
 
-#: builtins/common.c:1008 builtins/set.def:953 variables.c:3839
+#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825
 #, fuzzy, c-format
 msgid "%s: cannot unset: readonly %s"
 msgstr "%s: kan nie %s skep nie"
 
-#: builtins/common.c:1013 builtins/set.def:932 variables.c:3844
+#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830
 #, fuzzy, c-format
 msgid "%s: cannot unset"
 msgstr "%s: kan nie %s skep nie"
@@ -331,108 +331,108 @@ msgstr "%s: kan nie %s skep nie"
 msgid "%s: invalid action name"
 msgstr ""
 
-#: builtins/complete.def:486 builtins/complete.def:634
-#: builtins/complete.def:865
+#: builtins/complete.def:486 builtins/complete.def:642
+#: builtins/complete.def:873
 #, c-format
 msgid "%s: no completion specification"
 msgstr ""
 
-#: builtins/complete.def:688
+#: builtins/complete.def:696
 msgid "warning: -F option may not work as you expect"
 msgstr ""
 
-#: builtins/complete.def:690
+#: builtins/complete.def:698
 msgid "warning: -C option may not work as you expect"
 msgstr ""
 
-#: builtins/complete.def:838
+#: builtins/complete.def:846
 msgid "not currently executing completion function"
 msgstr ""
 
-#: builtins/declare.def:134
+#: builtins/declare.def:137
 msgid "can only be used in a function"
 msgstr ""
 
-#: builtins/declare.def:363 builtins/declare.def:756
+#: builtins/declare.def:437
+msgid "cannot use `-f' to make functions"
+msgstr ""
+
+#: builtins/declare.def:464 execute_cmd.c:6132
+#, c-format
+msgid "%s: readonly function"
+msgstr "%s: leesalleen-funksie"
+
+#: builtins/declare.def:521 builtins/declare.def:804
 #, c-format
 msgid "%s: reference variable cannot be an array"
 msgstr ""
 
-#: builtins/declare.def:374 variables.c:3385
+#: builtins/declare.def:532 variables.c:3359
 #, c-format
 msgid "%s: nameref variable self references not allowed"
 msgstr ""
 
-#: builtins/declare.def:379 variables.c:2104 variables.c:3304 variables.c:3312
-#: variables.c:3382
+#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286
+#: variables.c:3356
 #, c-format
 msgid "%s: circular name reference"
 msgstr ""
 
-#: builtins/declare.def:384 builtins/declare.def:762 builtins/declare.def:773
+#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820
 #, c-format
 msgid "`%s': invalid variable name for name reference"
 msgstr ""
 
-#: builtins/declare.def:514
-msgid "cannot use `-f' to make functions"
-msgstr ""
-
-#: builtins/declare.def:526 execute_cmd.c:5986
-#, c-format
-msgid "%s: readonly function"
-msgstr "%s: leesalleen-funksie"
-
-#: builtins/declare.def:824
-#, c-format
-msgid "%s: quoted compound array assignment deprecated"
-msgstr ""
-
-#: builtins/declare.def:838
+#: builtins/declare.def:856
 #, fuzzy, c-format
 msgid "%s: cannot destroy array variables in this way"
 msgstr "Kan nie soek 'n handtekening in hierdie boodskap!"
 
-#: builtins/declare.def:845 builtins/read.def:815
+#: builtins/declare.def:862 builtins/read.def:887
 #, c-format
 msgid "%s: cannot convert associative to indexed array"
 msgstr ""
 
-#: builtins/enable.def:143 builtins/enable.def:151
+#: builtins/declare.def:891
+#, c-format
+msgid "%s: quoted compound array assignment deprecated"
+msgstr ""
+
+#: builtins/enable.def:145 builtins/enable.def:153
 msgid "dynamic loading not available"
 msgstr ""
 
-#: builtins/enable.def:343
+#: builtins/enable.def:376
 #, fuzzy, c-format
 msgid "cannot open shared object %s: %s"
 msgstr "Kan nie oopmaak vir skrip-afvoer nie: \""
 
-#: builtins/enable.def:371
+#: builtins/enable.def:405
 #, c-format
 msgid "cannot find %s in shared object %s: %s"
 msgstr ""
 
-#: builtins/enable.def:388
+#: builtins/enable.def:422
 #, c-format
 msgid "%s: dynamic builtin already loaded"
 msgstr ""
 
-#: builtins/enable.def:392
+#: builtins/enable.def:426
 #, c-format
 msgid "load function for %s returns failure (%d): not loaded"
 msgstr ""
 
-#: builtins/enable.def:517
+#: builtins/enable.def:551
 #, c-format
 msgid "%s: not dynamically loaded"
 msgstr ""
 
-#: builtins/enable.def:543
+#: builtins/enable.def:577
 #, fuzzy, c-format
 msgid "%s: cannot delete: %s"
 msgstr "%s: kan nie %s skep nie"
 
-#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5818
+#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959
 #, c-format
 msgid "%s: is a directory"
 msgstr "%s: is 'n gids"
@@ -447,7 +447,7 @@ msgstr "%s: kan nie 'n bin
 msgid "%s: file is too large"
 msgstr ""
 
-#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1647
+#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673
 #, c-format
 msgid "%s: cannot execute binary file"
 msgstr "%s: kan nie 'n binêre lêer uitvoer nie"
@@ -542,12 +542,12 @@ msgid ""
 "no help topics match `%s'.  Try `help help' or `man -k %s' or `info %s'."
 msgstr ""
 
-#: builtins/help.def:224
+#: builtins/help.def:223
 #, fuzzy, c-format
 msgid "%s: cannot open: %s"
 msgstr "%s: kan nie %s skep nie"
 
-#: builtins/help.def:524
+#: builtins/help.def:523
 #, c-format
 msgid ""
 "These shell commands are defined internally.  Type `help' to see this list.\n"
@@ -559,21 +559,21 @@ msgid ""
 "\n"
 msgstr ""
 
-#: builtins/history.def:155
+#: builtins/history.def:159
 msgid "cannot use more than one of -anrw"
 msgstr ""
 
-#: builtins/history.def:188 builtins/history.def:198 builtins/history.def:213
-#: builtins/history.def:230 builtins/history.def:242 builtins/history.def:249
+#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215
+#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247
 msgid "history position"
 msgstr ""
 
-#: builtins/history.def:340
+#: builtins/history.def:338
 #, c-format
 msgid "%s: invalid timestamp"
 msgstr ""
 
-#: builtins/history.def:451
+#: builtins/history.def:449
 #, fuzzy, c-format
 msgid "%s: history expansion failed"
 msgstr "%s: heelgetal-uitdrukking is verwag\n"
@@ -597,79 +597,79 @@ msgstr ""
 msgid "Unknown error"
 msgstr "Onbekende fout %d"
 
-#: builtins/let.def:97 builtins/let.def:122 expr.c:639 expr.c:657
+#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658
 #, fuzzy
 msgid "expression expected"
 msgstr "Bools uitdrukking verwag"
 
-#: builtins/mapfile.def:178
+#: builtins/mapfile.def:180
 #, c-format
 msgid "%s: not an indexed array"
 msgstr ""
 
-#: builtins/mapfile.def:271 builtins/read.def:308
+#: builtins/mapfile.def:276 builtins/read.def:336
 #, c-format
 msgid "%s: invalid file descriptor specification"
 msgstr ""
 
-#: builtins/mapfile.def:279 builtins/read.def:315
+#: builtins/mapfile.def:284 builtins/read.def:343
 #, c-format
 msgid "%d: invalid file descriptor: %s"
 msgstr ""
 
-#: builtins/mapfile.def:288 builtins/mapfile.def:326
+#: builtins/mapfile.def:293 builtins/mapfile.def:331
 #, c-format
 msgid "%s: invalid line count"
 msgstr ""
 
-#: builtins/mapfile.def:299
+#: builtins/mapfile.def:304
 #, fuzzy, c-format
 msgid "%s: invalid array origin"
 msgstr "Os/2 Biskaart Skikking"
 
-#: builtins/mapfile.def:316
+#: builtins/mapfile.def:321
 #, c-format
 msgid "%s: invalid callback quantum"
 msgstr ""
 
-#: builtins/mapfile.def:349
+#: builtins/mapfile.def:354
 msgid "empty array variable name"
 msgstr ""
 
-#: builtins/mapfile.def:370
+#: builtins/mapfile.def:375
 msgid "array variable support required"
 msgstr ""
 
-#: builtins/printf.def:419
+#: builtins/printf.def:430
 #, c-format
 msgid "`%s': missing format character"
 msgstr ""
 
-#: builtins/printf.def:474
+#: builtins/printf.def:485
 #, c-format
 msgid "`%c': invalid time format specification"
 msgstr ""
 
-#: builtins/printf.def:676
+#: builtins/printf.def:708
 #, c-format
 msgid "`%c': invalid format character"
 msgstr ""
 
-#: builtins/printf.def:702
+#: builtins/printf.def:734
 #, c-format
 msgid "warning: %s: %s"
 msgstr ""
 
-#: builtins/printf.def:788
+#: builtins/printf.def:822
 #, c-format
 msgid "format parsing problem: %s"
 msgstr ""
 
-#: builtins/printf.def:885
+#: builtins/printf.def:919
 msgid "missing hex digit for \\x"
 msgstr ""
 
-#: builtins/printf.def:900
+#: builtins/printf.def:934
 #, c-format
 msgid "missing unicode digit for \\%c"
 msgstr ""
@@ -767,12 +767,12 @@ msgid ""
 "    The `dirs' builtin displays the directory stack."
 msgstr ""
 
-#: builtins/read.def:280
+#: builtins/read.def:308
 #, c-format
 msgid "%s: invalid timeout specification"
 msgstr ""
 
-#: builtins/read.def:755
+#: builtins/read.def:827
 #, fuzzy, c-format
 msgid "read error: %d: %s"
 msgstr "pypfout: %s"
@@ -785,7 +785,7 @@ msgstr ""
 msgid "cannot simultaneously unset a function and a variable"
 msgstr ""
 
-#: builtins/set.def:966
+#: builtins/set.def:969
 #, fuzzy, c-format
 msgid "%s: not an array variable"
 msgstr "Veranderlike boom"
@@ -805,11 +805,11 @@ msgstr "%s: kan nie %s skep nie"
 msgid "shift count"
 msgstr "Shift"
 
-#: builtins/shopt.def:310
+#: builtins/shopt.def:323
 msgid "cannot set and unset shell options simultaneously"
 msgstr ""
 
-#: builtins/shopt.def:428
+#: builtins/shopt.def:444
 #, c-format
 msgid "%s: invalid shell option name"
 msgstr ""
@@ -877,17 +877,17 @@ msgstr ""
 msgid "`%c': bad command"
 msgstr "%s: illegal option -- %c\n"
 
-#: builtins/ulimit.def:455
+#: builtins/ulimit.def:464
 #, fuzzy, c-format
 msgid "%s: cannot get limit: %s"
 msgstr "%s: kan nie %s skep nie"
 
-#: builtins/ulimit.def:481
+#: builtins/ulimit.def:490
 #, fuzzy
 msgid "limit"
 msgstr "Filter beperk:"
 
-#: builtins/ulimit.def:493 builtins/ulimit.def:793
+#: builtins/ulimit.def:502 builtins/ulimit.def:802
 #, fuzzy, c-format
 msgid "%s: cannot modify limit: %s"
 msgstr "%s: kan nie %s skep nie"
@@ -907,7 +907,7 @@ msgstr ""
 msgid "`%c': invalid symbolic mode character"
 msgstr ""
 
-#: error.c:89 error.c:347 error.c:349 error.c:351
+#: error.c:89 error.c:373 error.c:375 error.c:377
 msgid " line "
 msgstr ""
 
@@ -927,101 +927,111 @@ msgstr ""
 msgid "INFORM: "
 msgstr ""
 
-#: error.c:462
+#: error.c:310
+#, c-format
+msgid "DEBUG warning: "
+msgstr ""
+
+#: error.c:488
 #, fuzzy
 msgid "unknown command error"
 msgstr "Onbekende fout %d"
 
-#: error.c:463
+#: error.c:489
 #, fuzzy
 msgid "bad command type"
 msgstr "bevelnaam"
 
-#: error.c:464
+#: error.c:490
 #, fuzzy
 msgid "bad connector"
 msgstr "foutiewe verbinder`%d'"
 
-#: error.c:465
+#: error.c:491
 #, fuzzy
 msgid "bad jump"
 msgstr "Spring na:"
 
-#: error.c:503
+#: error.c:529
 #, fuzzy, c-format
 msgid "%s: unbound variable"
 msgstr "Veranderlike boom"
 
-#: eval.c:242
+#: eval.c:243
 msgid "\atimed out waiting for input: auto-logout\n"
 msgstr ""
 
-#: execute_cmd.c:537
+#: execute_cmd.c:555
 #, c-format
 msgid "cannot redirect standard input from /dev/null: %s"
 msgstr ""
 
-#: execute_cmd.c:1297
+#: execute_cmd.c:1317
 #, c-format
 msgid "TIMEFORMAT: `%c': invalid format character"
 msgstr ""
 
-#: execute_cmd.c:2362
+#: execute_cmd.c:2391
 #, c-format
 msgid "execute_coproc: coproc [%d:%s] still exists"
 msgstr ""
 
-#: execute_cmd.c:2486
+#: execute_cmd.c:2524
 #, fuzzy
 msgid "pipe error"
 msgstr "pypfout: %s"
 
-#: execute_cmd.c:4793
+#: execute_cmd.c:4923
 #, c-format
 msgid "eval: maximum eval nesting level exceeded (%d)"
 msgstr ""
 
-#: execute_cmd.c:4805
+#: execute_cmd.c:4935
 #, c-format
 msgid "%s: maximum source nesting level exceeded (%d)"
 msgstr ""
 
-#: execute_cmd.c:4913
+#: execute_cmd.c:5043
 #, c-format
 msgid "%s: maximum function nesting level exceeded (%d)"
 msgstr ""
 
-#: execute_cmd.c:5467
+#: execute_cmd.c:5598
 #, c-format
 msgid "%s: restricted: cannot specify `/' in command names"
 msgstr ""
 
-#: execute_cmd.c:5574
+#: execute_cmd.c:5715
 #, c-format
 msgid "%s: command not found"
 msgstr "%s: bevel nie gevind nie"
 
-#: execute_cmd.c:5816
+#: execute_cmd.c:5957
 #, c-format
 msgid "%s: %s"
 msgstr ""
 
-#: execute_cmd.c:5854
+#: execute_cmd.c:5975
+#, fuzzy, c-format
+msgid "%s: cannot execute: required file not found"
+msgstr "%s: kan nie 'n binêre lêer uitvoer nie"
+
+#: execute_cmd.c:6000
 #, fuzzy, c-format
 msgid "%s: %s: bad interpreter"
 msgstr "%s: is 'n gids"
 
-#: execute_cmd.c:5891
+#: execute_cmd.c:6037
 #, fuzzy, c-format
 msgid "%s: cannot execute binary file: %s"
 msgstr "%s: kan nie 'n binêre lêer uitvoer nie"
 
-#: execute_cmd.c:5977
+#: execute_cmd.c:6123
 #, c-format
 msgid "`%s': is a special builtin"
 msgstr ""
 
-#: execute_cmd.c:6029
+#: execute_cmd.c:6175
 #, fuzzy, c-format
 msgid "cannot duplicate fd %d to fd %d"
 msgstr "kan nie fd %d na fd 0 dupliseer nie: %s"
@@ -1035,76 +1045,76 @@ msgstr ""
 msgid "recursion stack underflow"
 msgstr "Stapel grootte verhoog"
 
-#: expr.c:477
+#: expr.c:478
 #, fuzzy
 msgid "syntax error in expression"
 msgstr "Sintaks fout in patroon"
 
-#: expr.c:521
+#: expr.c:522
 msgid "attempted assignment to non-variable"
 msgstr ""
 
-#: expr.c:530
+#: expr.c:531
 #, fuzzy
 msgid "syntax error in variable assignment"
 msgstr "Sintaks fout in patroon"
 
-#: expr.c:544 expr.c:911
+#: expr.c:545 expr.c:912
 #, fuzzy
 msgid "division by 0"
 msgstr "devisie by nul."
 
-#: expr.c:592
+#: expr.c:593
 msgid "bug: bad expassign token"
 msgstr ""
 
-#: expr.c:646
+#: expr.c:647
 #, fuzzy
 msgid "`:' expected for conditional expression"
 msgstr "Soek die lêer vir 'n uitdrukking"
 
-#: expr.c:972
+#: expr.c:973
 msgid "exponent less than 0"
 msgstr ""
 
-#: expr.c:1029
+#: expr.c:1030
 msgid "identifier expected after pre-increment or pre-decrement"
 msgstr ""
 
-#: expr.c:1056
+#: expr.c:1057
 #, fuzzy
 msgid "missing `)'"
 msgstr "Ontbrekende '>'"
 
-#: expr.c:1107 expr.c:1487
+#: expr.c:1108 expr.c:1492
 #, fuzzy
 msgid "syntax error: operand expected"
 msgstr "Onverwagte einde van lêer tydens inlees van hulpbron."
 
-#: expr.c:1489
+#: expr.c:1494
 msgid "syntax error: invalid arithmetic operator"
 msgstr ""
 
-#: expr.c:1513
+#: expr.c:1518
 #, fuzzy, c-format
 msgid "%s%s%s: %s (error token is \"%s\")"
 msgstr ""
 "Hierdie is die fout boodskap van %1:\n"
 "%2"
 
-#: expr.c:1573
+#: expr.c:1578
 msgid "invalid arithmetic base"
 msgstr ""
 
-#: expr.c:1582
+#: expr.c:1587
 msgid "invalid integer constant"
 msgstr ""
 
-#: expr.c:1598
+#: expr.c:1603
 msgid "value too great for base"
 msgstr "waarde te groot vir basis"
 
-#: expr.c:1647
+#: expr.c:1652
 #, fuzzy, c-format
 msgid "%s: expression error\n"
 msgstr "Pypfout.\n"
@@ -1114,7 +1124,7 @@ msgstr "Pypfout.\n"
 msgid "getcwd: cannot access parent directories"
 msgstr "Kan nie die program uitvoer nie:"
 
-#: input.c:99 subst.c:6069
+#: input.c:99 subst.c:6208
 #, c-format
 msgid "cannot reset nodelay mode for fd %d"
 msgstr ""
@@ -1133,218 +1143,218 @@ msgstr ""
 msgid "start_pipeline: pgrp pipe"
 msgstr ""
 
-#: jobs.c:906
+#: jobs.c:907
 #, c-format
 msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr ""
 
-#: jobs.c:959
+#: jobs.c:960
 #, c-format
 msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr ""
 
-#: jobs.c:1283
+#: jobs.c:1279
 #, c-format
 msgid "forked pid %d appears in running job %d"
 msgstr ""
 
-#: jobs.c:1402
+#: jobs.c:1397
 #, c-format
 msgid "deleting stopped job %d with process group %ld"
 msgstr ""
 
-#: jobs.c:1511
+#: jobs.c:1502
 #, c-format
 msgid "add_process: pid %5ld (%s) marked as still alive"
 msgstr ""
 
-#: jobs.c:1850
+#: jobs.c:1839
 #, fuzzy, c-format
 msgid "describe_pid: %ld: no such pid"
 msgstr "E108: Geen veranderlike: \"%s\""
 
-#: jobs.c:1865
+#: jobs.c:1854
 #, fuzzy, c-format
 msgid "Signal %d"
 msgstr "Sein kwaliteit:"
 
-#: jobs.c:1879 jobs.c:1905
+#: jobs.c:1868 jobs.c:1894
 msgid "Done"
 msgstr "Klaar"
 
-#: jobs.c:1884 siglist.c:122
+#: jobs.c:1873 siglist.c:123
 #, fuzzy
 msgid "Stopped"
 msgstr "Op gehou"
 
-#: jobs.c:1888
+#: jobs.c:1877
 #, fuzzy, c-format
 msgid "Stopped(%s)"
 msgstr "Op gehou"
 
-#: jobs.c:1892
+#: jobs.c:1881
 #, fuzzy
 msgid "Running"
 msgstr "aktief"
 
-#: jobs.c:1909
+#: jobs.c:1898
 #, c-format
 msgid "Done(%d)"
 msgstr "Klaar(%d)"
 
-#: jobs.c:1911
+#: jobs.c:1900
 #, c-format
 msgid "Exit %d"
 msgstr "Verlaat %d"
 
-#: jobs.c:1914
+#: jobs.c:1903
 msgid "Unknown status"
 msgstr "Onbekende status"
 
-#: jobs.c:2001
+#: jobs.c:1990
 #, fuzzy, c-format
 msgid "(core dumped) "
 msgstr "Kern Ontwikkelaar"
 
-#: jobs.c:2020
+#: jobs.c:2009
 #, fuzzy, c-format
 msgid "  (wd: %s)"
 msgstr "Aktiveer nou dadelik"
 
-#: jobs.c:2259
+#: jobs.c:2250
 #, fuzzy, c-format
 msgid "child setpgid (%ld to %ld)"
 msgstr "Fout in die skryf van %s"
 
-#: jobs.c:2617 nojobs.c:664
+#: jobs.c:2608 nojobs.c:666
 #, c-format
 msgid "wait: pid %ld is not a child of this shell"
 msgstr ""
 
-#: jobs.c:2893
+#: jobs.c:2884
 #, c-format
 msgid "wait_for: No record of process %ld"
 msgstr ""
 
-#: jobs.c:3236
+#: jobs.c:3223
 #, c-format
 msgid "wait_for_job: job %d is stopped"
 msgstr ""
 
-#: jobs.c:3564
+#: jobs.c:3551
 #, fuzzy, c-format
 msgid "%s: no current jobs"
 msgstr "%s: kan nie %s skep nie"
 
-#: jobs.c:3571
+#: jobs.c:3558
 #, fuzzy, c-format
 msgid "%s: job has terminated"
 msgstr "Die bediener beëindig Die verbinding."
 
-#: jobs.c:3580
+#: jobs.c:3567
 #, c-format
 msgid "%s: job %d already in background"
 msgstr ""
 
-#: jobs.c:3806
+#: jobs.c:3793
 msgid "waitchld: turning on WNOHANG to avoid indefinite block"
 msgstr ""
 
-#: jobs.c:4320
+#: jobs.c:4307
 #, c-format
 msgid "%s: line %d: "
 msgstr ""
 
-#: jobs.c:4334 nojobs.c:919
+#: jobs.c:4321 nojobs.c:921
 #, fuzzy, c-format
 msgid " (core dumped)"
 msgstr "Kern Ontwikkelaar"
 
-#: jobs.c:4346 jobs.c:4359
+#: jobs.c:4333 jobs.c:4346
 #, fuzzy, c-format
 msgid "(wd now: %s)\n"
 msgstr "Aktiveer nou dadelik"
 
-#: jobs.c:4391
+#: jobs.c:4378
 #, fuzzy
 msgid "initialize_job_control: getpgrp failed"
 msgstr "Inisialisering van OpenGL het misluk."
 
-#: jobs.c:4447
+#: jobs.c:4434
 msgid "initialize_job_control: no job control in background"
 msgstr ""
 
-#: jobs.c:4463
+#: jobs.c:4450
 msgid "initialize_job_control: line discipline"
 msgstr ""
 
-#: jobs.c:4473
+#: jobs.c:4460
 #, fuzzy
 msgid "initialize_job_control: setpgid"
 msgstr "Inisialisering van OpenGL het misluk."
 
-#: jobs.c:4494 jobs.c:4503
+#: jobs.c:4481 jobs.c:4490
 #, c-format
 msgid "cannot set terminal process group (%d)"
 msgstr ""
 
-#: jobs.c:4508
+#: jobs.c:4495
 msgid "no job control in this shell"
 msgstr "geen taakbeheer in hierdie dop nie"
 
-#: lib/malloc/malloc.c:353
+#: lib/malloc/malloc.c:367
 #, c-format
 msgid "malloc: failed assertion: %s\n"
 msgstr ""
 
-#: lib/malloc/malloc.c:369
+#: lib/malloc/malloc.c:383
 #, c-format
 msgid ""
 "\r\n"
 "malloc: %s:%d: assertion botched\r\n"
 msgstr ""
 
-#: lib/malloc/malloc.c:370 lib/malloc/malloc.c:933
+#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941
 msgid "unknown"
 msgstr "onbekend"
 
-#: lib/malloc/malloc.c:882
+#: lib/malloc/malloc.c:892
 msgid "malloc: block on free list clobbered"
 msgstr ""
 
-#: lib/malloc/malloc.c:972
+#: lib/malloc/malloc.c:980
 msgid "free: called with already freed block argument"
 msgstr ""
 
-#: lib/malloc/malloc.c:975
+#: lib/malloc/malloc.c:983
 msgid "free: called with unallocated block argument"
 msgstr ""
 
-#: lib/malloc/malloc.c:994
+#: lib/malloc/malloc.c:1001
 msgid "free: underflow detected; mh_nbytes out of range"
 msgstr ""
 
-#: lib/malloc/malloc.c:1001
+#: lib/malloc/malloc.c:1007
 msgid "free: underflow detected; magic8 corrupted"
 msgstr ""
 
-#: lib/malloc/malloc.c:1009
+#: lib/malloc/malloc.c:1014
 msgid "free: start and end chunk sizes differ"
 msgstr ""
 
-#: lib/malloc/malloc.c:1119
+#: lib/malloc/malloc.c:1176
 msgid "realloc: called with unallocated block argument"
 msgstr ""
 
-#: lib/malloc/malloc.c:1134
+#: lib/malloc/malloc.c:1191
 msgid "realloc: underflow detected; mh_nbytes out of range"
 msgstr ""
 
-#: lib/malloc/malloc.c:1141
+#: lib/malloc/malloc.c:1197
 msgid "realloc: underflow detected; magic8 corrupted"
 msgstr ""
 
-#: lib/malloc/malloc.c:1150
+#: lib/malloc/malloc.c:1205
 msgid "realloc: start and end chunk sizes differ"
 msgstr ""
 
@@ -1386,22 +1396,22 @@ msgstr ""
 msgid "network operations not supported"
 msgstr ""
 
-#: locale.c:217
+#: locale.c:219
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s)"
 msgstr ""
 
-#: locale.c:219
+#: locale.c:221
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s): %s"
 msgstr ""
 
-#: locale.c:292
+#: locale.c:294
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s)"
 msgstr ""
 
-#: locale.c:294
+#: locale.c:296
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s): %s"
 msgstr ""
@@ -1421,144 +1431,144 @@ msgstr "Wanneer nuwe pos arriveer in"
 msgid "The mail in %s has been read\n"
 msgstr ""
 
-#: make_cmd.c:317
+#: make_cmd.c:314
 #, fuzzy
 msgid "syntax error: arithmetic expression required"
 msgstr "Sintaks fout in patroon"
 
-#: make_cmd.c:319
+#: make_cmd.c:316
 #, fuzzy
 msgid "syntax error: `;' unexpected"
 msgstr "Onverwagte einde van lêer tydens inlees van hulpbron."
 
-#: make_cmd.c:320
+#: make_cmd.c:317
 #, fuzzy, c-format
 msgid "syntax error: `((%s))'"
 msgstr "sintaksfout"
 
-#: make_cmd.c:572
+#: make_cmd.c:569
 #, c-format
 msgid "make_here_document: bad instruction type %d"
 msgstr ""
 
-#: make_cmd.c:657
+#: make_cmd.c:668
 #, c-format
 msgid "here-document at line %d delimited by end-of-file (wanted `%s')"
 msgstr ""
 
-#: make_cmd.c:756
+#: make_cmd.c:769
 #, c-format
 msgid "make_redirection: redirection instruction `%d' out of range"
 msgstr ""
 
-#: parse.y:2393
+#: parse.y:2428
 #, c-format
 msgid ""
 "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line "
 "truncated"
 msgstr ""
 
-#: parse.y:2826
+#: parse.y:2921
 msgid "maximum here-document count exceeded"
 msgstr ""
 
-#: parse.y:3581 parse.y:3957 parse.y:4556
+#: parse.y:3684 parse.y:4244 parse.y:6148
 #, c-format
 msgid "unexpected EOF while looking for matching `%c'"
 msgstr ""
 
-#: parse.y:4696
+#: parse.y:4452
 msgid "unexpected EOF while looking for `]]'"
 msgstr ""
 
-#: parse.y:4701
+#: parse.y:4457
 #, c-format
 msgid "syntax error in conditional expression: unexpected token `%s'"
 msgstr ""
 
-#: parse.y:4705
+#: parse.y:4461
 #, fuzzy
 msgid "syntax error in conditional expression"
 msgstr "Sintaks fout in patroon"
 
-#: parse.y:4783
+#: parse.y:4539
 #, c-format
 msgid "unexpected token `%s', expected `)'"
 msgstr ""
 
-#: parse.y:4787
+#: parse.y:4543
 #, fuzzy
 msgid "expected `)'"
 msgstr "')' is verwag\n"
 
-#: parse.y:4815
+#: parse.y:4571
 #, c-format
 msgid "unexpected argument `%s' to conditional unary operator"
 msgstr ""
 
-#: parse.y:4819
+#: parse.y:4575
 msgid "unexpected argument to conditional unary operator"
 msgstr ""
 
-#: parse.y:4865
+#: parse.y:4621
 #, fuzzy, c-format
 msgid "unexpected token `%s', conditional binary operator expected"
 msgstr "%s: binêre operator is verwag\n"
 
-#: parse.y:4869
+#: parse.y:4625
 #, fuzzy
 msgid "conditional binary operator expected"
 msgstr "%s: binêre operator is verwag\n"
 
-#: parse.y:4891
+#: parse.y:4647
 #, c-format
 msgid "unexpected argument `%s' to conditional binary operator"
 msgstr ""
 
-#: parse.y:4895
+#: parse.y:4651
 msgid "unexpected argument to conditional binary operator"
 msgstr ""
 
-#: parse.y:4906
+#: parse.y:4662
 #, fuzzy, c-format
 msgid "unexpected token `%c' in conditional command"
 msgstr "Soek die lêer vir 'n uitdrukking"
 
-#: parse.y:4909
+#: parse.y:4665
 #, fuzzy, c-format
 msgid "unexpected token `%s' in conditional command"
 msgstr "Soek die lêer vir 'n uitdrukking"
 
-#: parse.y:4913
+#: parse.y:4669
 #, fuzzy, c-format
 msgid "unexpected token %d in conditional command"
 msgstr "Soek die lêer vir 'n uitdrukking"
 
-#: parse.y:6336
+#: parse.y:6118
 #, c-format
 msgid "syntax error near unexpected token `%s'"
 msgstr ""
 
-#: parse.y:6355
+#: parse.y:6137
 #, fuzzy, c-format
 msgid "syntax error near `%s'"
 msgstr "Sintaks fout in patroon"
 
-#: parse.y:6365
+#: parse.y:6151
 #, fuzzy
 msgid "syntax error: unexpected end of file"
 msgstr "Onverwagte einde van lêer tydens inlees van hulpbron."
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error"
 msgstr "sintaksfout"
 
-#: parse.y:6428
+#: parse.y:6216
 #, fuzzy, c-format
 msgid "Use \"%s\" to leave the shell.\n"
 msgstr "Gebruik Kaart na Los Tronk"
 
-#: parse.y:6602
+#: parse.y:6394
 msgid "unexpected EOF while looking for matching `)'"
 msgstr ""
 
@@ -1596,456 +1606,456 @@ msgstr ""
 msgid "xtrace fd (%d) != fileno xtrace fp (%d)"
 msgstr ""
 
-#: print_cmd.c:1540
+#: print_cmd.c:1545
 #, c-format
 msgid "cprintf: `%c': invalid format character"
 msgstr ""
 
-#: redir.c:149 redir.c:197
+#: redir.c:150 redir.c:198
 msgid "file descriptor out of range"
 msgstr ""
 
-#: redir.c:204
+#: redir.c:205
 #, fuzzy, c-format
 msgid "%s: ambiguous redirect"
 msgstr "%s: dubbelsinnige herroetering"
 
-#: redir.c:208
+#: redir.c:209
 #, fuzzy, c-format
 msgid "%s: cannot overwrite existing file"
 msgstr "Jy het gespesifiseer 'n bestaande lêer"
 
-#: redir.c:213
+#: redir.c:214
 #, c-format
 msgid "%s: restricted: cannot redirect output"
 msgstr ""
 
-#: redir.c:218
+#: redir.c:219
 #, c-format
 msgid "cannot create temp file for here-document: %s"
 msgstr ""
 
-#: redir.c:222
+#: redir.c:223
 #, fuzzy, c-format
 msgid "%s: cannot assign fd to variable"
 msgstr "Kan nie soek 'n handtekening in hierdie boodskap!"
 
-#: redir.c:649
+#: redir.c:650
 msgid "/dev/(tcp|udp)/host/port not supported without networking"
 msgstr ""
 
-#: redir.c:938 redir.c:1053 redir.c:1114 redir.c:1284
+#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303
 #, fuzzy
 msgid "redirection error: cannot duplicate fd"
 msgstr "Pypfout.\n"
 
-#: shell.c:347
+#: shell.c:353
 msgid "could not find /tmp, please create!"
 msgstr ""
 
-#: shell.c:351
+#: shell.c:357
 msgid "/tmp must be a valid directory name"
 msgstr ""
 
-#: shell.c:804
+#: shell.c:826
 msgid "pretty-printing mode ignored in interactive shells"
 msgstr ""
 
-#: shell.c:948
+#: shell.c:972
 #, fuzzy, c-format
 msgid "%c%c: invalid option"
 msgstr "%s: illegal option -- %c\n"
 
-#: shell.c:1319
+#: shell.c:1343
 #, c-format
 msgid "cannot set uid to %d: effective uid %d"
 msgstr ""
 
-#: shell.c:1330
+#: shell.c:1354
 #, c-format
 msgid "cannot set gid to %d: effective gid %d"
 msgstr ""
 
-#: shell.c:1518
+#: shell.c:1544
 msgid "cannot start debugger; debugging mode disabled"
 msgstr ""
 
-#: shell.c:1632
+#: shell.c:1658
 #, fuzzy, c-format
 msgid "%s: Is a directory"
 msgstr "%s: is 'n gids"
 
-#: shell.c:1881
+#: shell.c:1907
 msgid "I have no name!"
 msgstr "Ek het nie 'n naam nie!"
 
-#: shell.c:2035
+#: shell.c:2061
 #, fuzzy, c-format
 msgid "GNU bash, version %s-(%s)\n"
 msgstr "bedryfstelselkernweergawe"
 
-#: shell.c:2036
+#: shell.c:2062
 #, c-format
 msgid ""
 "Usage:\t%s [GNU long option] [option] ...\n"
 "\t%s [GNU long option] [option] script-file ...\n"
 msgstr ""
 
-#: shell.c:2038
+#: shell.c:2064
 #, fuzzy
 msgid "GNU long options:\n"
 msgstr "Gnu C Saamsteller Opsies"
 
-#: shell.c:2042
+#: shell.c:2068
 #, fuzzy
 msgid "Shell options:\n"
 msgstr "opneem opsies"
 
-#: shell.c:2043
+#: shell.c:2069
 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n"
 msgstr ""
 
-#: shell.c:2062
+#: shell.c:2088
 #, fuzzy, c-format
 msgid "\t-%s or -o option\n"
 msgstr ""
 "Gebruik so: %s LÊER \n"
 "   of:  %s OPSIE\n"
 
-#: shell.c:2068
+#: shell.c:2094
 #, c-format
 msgid "Type `%s -c \"help set\"' for more information about shell options.\n"
 msgstr ""
 
-#: shell.c:2069
+#: shell.c:2095
 #, c-format
 msgid "Type `%s -c help' for more information about shell builtin commands.\n"
 msgstr ""
 
-#: shell.c:2070
+#: shell.c:2096
 #, c-format
 msgid "Use the `bashbug' command to report bugs.\n"
 msgstr ""
 
-#: shell.c:2072
+#: shell.c:2098
 #, c-format
 msgid "bash home page: <http://www.gnu.org/software/bash>\n"
 msgstr ""
 
-#: shell.c:2073
+#: shell.c:2099
 #, c-format
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 msgstr ""
 
-#: sig.c:757
+#: sig.c:765
 #, c-format
 msgid "sigprocmask: %d: invalid operation"
 msgstr ""
 
-#: siglist.c:47
+#: siglist.c:48
 msgid "Bogus signal"
 msgstr "Foutiewe sein"
 
-#: siglist.c:50
+#: siglist.c:51
 #, fuzzy
 msgid "Hangup"
 msgstr "Ophang"
 
-#: siglist.c:54
+#: siglist.c:55
 #, fuzzy
 msgid "Interrupt"
 msgstr "Interrupt"
 
-#: siglist.c:58
+#: siglist.c:59
 #, fuzzy
 msgid "Quit"
 msgstr "Verlaat"
 
-#: siglist.c:62
+#: siglist.c:63
 #, fuzzy
 msgid "Illegal instruction"
 msgstr "Sigill (onwettige instruksie)"
 
-#: siglist.c:66
+#: siglist.c:67
 msgid "BPT trace/trap"
 msgstr ""
 
-#: siglist.c:74
+#: siglist.c:75
 #, fuzzy
 msgid "ABORT instruction"
 msgstr "Verwerking Instruksie"
 
-#: siglist.c:78
+#: siglist.c:79
 #, fuzzy
 msgid "EMT instruction"
 msgstr "Verwerking Instruksie"
 
-#: siglist.c:82
+#: siglist.c:83
 #, fuzzy
 msgid "Floating point exception"
 msgstr "wisselpuntgetaluitsondering"
 
-#: siglist.c:86
+#: siglist.c:87
 #, fuzzy
 msgid "Killed"
 msgstr "Doodgemaak proses."
 
-#: siglist.c:90
+#: siglist.c:91
 #, fuzzy
 msgid "Bus error"
 msgstr "Pypfout.\n"
 
-#: siglist.c:94
+#: siglist.c:95
 #, fuzzy
 msgid "Segmentation fault"
 msgstr "Sigsegv (segmentasie oortreding)"
 
-#: siglist.c:98
+#: siglist.c:99
 #, fuzzy
 msgid "Bad system call"
 msgstr "fork-stelselroep het gefaal"
 
-#: siglist.c:102
+#: siglist.c:103
 #, fuzzy
 msgid "Broken pipe"
 msgstr "Sigpipe (gebroke pyp)"
 
-#: siglist.c:106
+#: siglist.c:107
 #, fuzzy
 msgid "Alarm clock"
 msgstr "wêreld horlosie"
 
-#: siglist.c:110
+#: siglist.c:111
 #, fuzzy
 msgid "Terminated"
 msgstr ""
 "\n"
 "Bevel beëindig\n"
 
-#: siglist.c:114
+#: siglist.c:115
 #, fuzzy
 msgid "Urgent IO condition"
 msgstr "Ooreenstem enige kondisie"
 
-#: siglist.c:118
+#: siglist.c:119
 #, fuzzy
 msgid "Stopped (signal)"
 msgstr "Sein kwaliteit:"
 
-#: siglist.c:126
+#: siglist.c:127
 #, fuzzy
 msgid "Continue"
 msgstr "Gaan voort"
 
-#: siglist.c:134
+#: siglist.c:135
 msgid "Child death or stop"
 msgstr ""
 
-#: siglist.c:138
+#: siglist.c:139
 #, fuzzy
 msgid "Stopped (tty input)"
 msgstr "Sigttin (tty invoer)"
 
-#: siglist.c:142
+#: siglist.c:143
 #, fuzzy
 msgid "Stopped (tty output)"
 msgstr "Sigttou (tty uitset)"
 
-#: siglist.c:146
+#: siglist.c:147
 #, fuzzy
 msgid "I/O ready"
 msgstr "Gereed."
 
-#: siglist.c:150
+#: siglist.c:151
 #, fuzzy
 msgid "CPU limit"
 msgstr "Filter beperk:"
 
-#: siglist.c:154
+#: siglist.c:155
 #, fuzzy
 msgid "File limit"
 msgstr "Filter beperk:"
 
-#: siglist.c:158
+#: siglist.c:159
 #, fuzzy
 msgid "Alarm (virtual)"
 msgstr "virtuele werkskerms"
 
-#: siglist.c:162
+#: siglist.c:163
 #, fuzzy
 msgid "Alarm (profile)"
 msgstr "Vee profiel uit..."
 
-#: siglist.c:166
+#: siglist.c:167
 #, fuzzy
 msgid "Window changed"
 msgstr "Lêer Het verander"
 
-#: siglist.c:170
+#: siglist.c:171
 #, fuzzy
 msgid "Record lock"
 msgstr "Sluit Lêers"
 
-#: siglist.c:174
+#: siglist.c:175
 #, fuzzy
 msgid "User signal 1"
 msgstr "Gebruiker Sein 1"
 
-#: siglist.c:178
+#: siglist.c:179
 #, fuzzy
 msgid "User signal 2"
 msgstr "Gebruiker Sein 1"
 
-#: siglist.c:182
+#: siglist.c:183
 msgid "HFT input data pending"
 msgstr ""
 
-#: siglist.c:186
+#: siglist.c:187
 #, fuzzy
 msgid "power failure imminent"
 msgstr "Vaaling na Uitpak"
 
-#: siglist.c:190
+#: siglist.c:191
 #, fuzzy
 msgid "system crash imminent"
 msgstr "Die Kde Omval Handteerder"
 
-#: siglist.c:194
+#: siglist.c:195
 msgid "migrate process to another CPU"
 msgstr ""
 
-#: siglist.c:198
+#: siglist.c:199
 #, fuzzy
 msgid "programming error"
 msgstr "Pypfout.\n"
 
-#: siglist.c:202
+#: siglist.c:203
 msgid "HFT monitor mode granted"
 msgstr ""
 
-#: siglist.c:206
+#: siglist.c:207
 msgid "HFT monitor mode retracted"
 msgstr ""
 
-#: siglist.c:210
+#: siglist.c:211
 msgid "HFT sound sequence has completed"
 msgstr ""
 
-#: siglist.c:214
+#: siglist.c:215
 msgid "Information request"
 msgstr ""
 
-#: siglist.c:222 siglist.c:224
+#: siglist.c:223 siglist.c:225
 #, fuzzy, c-format
 msgid "Unknown Signal #%d"
 msgstr "Sein kwaliteit:"
 
-#: subst.c:1476 subst.c:1666
+#: subst.c:1480 subst.c:1670
 #, fuzzy, c-format
 msgid "bad substitution: no closing `%s' in %s"
 msgstr "--Geen reëls in buffer--"
 
-#: subst.c:3281
+#: subst.c:3307
 #, c-format
 msgid "%s: cannot assign list to array member"
 msgstr ""
 
-#: subst.c:5910 subst.c:5926
+#: subst.c:6048 subst.c:6064
 #, fuzzy
 msgid "cannot make pipe for process substitution"
 msgstr "Woord Substitusie"
 
-#: subst.c:5985
+#: subst.c:6124
 #, fuzzy
 msgid "cannot make child for process substitution"
 msgstr "Woord Substitusie"
 
-#: subst.c:6059
+#: subst.c:6198
 #, fuzzy, c-format
 msgid "cannot open named pipe %s for reading"
 msgstr "Kan nie oopmaak vir skrip-afvoer nie: \""
 
-#: subst.c:6061
+#: subst.c:6200
 #, fuzzy, c-format
 msgid "cannot open named pipe %s for writing"
 msgstr "Kan nie oopmaak vir skrip-afvoer nie: \""
 
-#: subst.c:6084
+#: subst.c:6223
 #, fuzzy, c-format
 msgid "cannot duplicate named pipe %s as fd %d"
 msgstr "Kan nie oopmaak vir skrip-afvoer nie: \""
 
-#: subst.c:6213
+#: subst.c:6370
 #, fuzzy
 msgid "command substitution: ignored null byte in input"
 msgstr "--Geen reëls in buffer--"
 
-#: subst.c:6353
+#: subst.c:6533
 #, fuzzy
 msgid "cannot make pipe for command substitution"
 msgstr "Woord Substitusie"
 
-#: subst.c:6397
+#: subst.c:6580
 #, fuzzy
 msgid "cannot make child for command substitution"
 msgstr "Woord Substitusie"
 
-#: subst.c:6423
+#: subst.c:6613
 msgid "command_substitute: cannot duplicate pipe as fd 1"
 msgstr ""
 
-#: subst.c:6883 subst.c:9952
+#: subst.c:7082 subst.c:10252
 #, c-format
 msgid "%s: invalid variable name for name reference"
 msgstr ""
 
-#: subst.c:6979 subst.c:6997 subst.c:7169
+#: subst.c:7178 subst.c:7196 subst.c:7369
 #, c-format
 msgid "%s: invalid indirect expansion"
 msgstr ""
 
-#: subst.c:7013 subst.c:7177
+#: subst.c:7212 subst.c:7377
 #, fuzzy, c-format
 msgid "%s: invalid variable name"
 msgstr "Veranderlike boom"
 
-#: subst.c:7256
+#: subst.c:7478
 #, c-format
 msgid "%s: parameter not set"
 msgstr ""
 
-#: subst.c:7258
+#: subst.c:7480
 #, c-format
 msgid "%s: parameter null or not set"
 msgstr ""
 
-#: subst.c:7503 subst.c:7518
+#: subst.c:7727 subst.c:7742
 #, fuzzy, c-format
 msgid "%s: substring expression < 0"
 msgstr "ongeldige uitdrukking"
 
-#: subst.c:9281 subst.c:9302
+#: subst.c:9560 subst.c:9587
 #, fuzzy, c-format
 msgid "%s: bad substitution"
 msgstr "Woord Substitusie"
 
-#: subst.c:9390
+#: subst.c:9678
 #, fuzzy, c-format
 msgid "$%s: cannot assign in this way"
 msgstr "Kan nie soek 'n handtekening in hierdie boodskap!"
 
-#: subst.c:9814
+#: subst.c:10111
 msgid ""
 "future versions of the shell will force evaluation as an arithmetic "
 "substitution"
 msgstr ""
 
-#: subst.c:10367
+#: subst.c:10795
 #, fuzzy, c-format
 msgid "bad substitution: no closing \"`\" in %s"
 msgstr "--Geen reëls in buffer--"
 
-#: subst.c:11434
+#: subst.c:11874
 #, c-format
 msgid "no match: %s"
 msgstr ""
@@ -2070,22 +2080,22 @@ msgstr "')' is verwag\n"
 msgid "`)' expected, found %s"
 msgstr "')' is verwag, maar %s gevind\n"
 
-#: test.c:466 test.c:799
+#: test.c:469 test.c:814
 #, fuzzy, c-format
 msgid "%s: binary operator expected"
 msgstr "%s: binêre operator is verwag\n"
 
-#: test.c:756 test.c:759
+#: test.c:771 test.c:774
 #, fuzzy, c-format
 msgid "%s: unary operator expected"
 msgstr "%s: unitêre operator is verwag\n"
 
-#: test.c:881
+#: test.c:896
 #, fuzzy
 msgid "missing `]'"
 msgstr "Ontbrekende '>'"
 
-#: test.c:899
+#: test.c:914
 #, fuzzy, c-format
 msgid "syntax error: `%s' unexpected"
 msgstr "Onverwagte einde van lêer tydens inlees van hulpbron."
@@ -2095,99 +2105,104 @@ msgstr "Onverwagte einde van l
 msgid "invalid signal number"
 msgstr "Die sein nommer wat was gevang het"
 
-#: trap.c:325
+#: trap.c:323
 #, c-format
 msgid "trap handler: maximum trap handler level exceeded (%d)"
 msgstr ""
 
-#: trap.c:414
+#: trap.c:412
 #, c-format
 msgid "run_pending_traps: bad value in trap_list[%d]: %p"
 msgstr ""
 
-#: trap.c:418
+#: trap.c:416
 #, c-format
 msgid ""
 "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
 msgstr ""
 
-#: trap.c:487
+#: trap.c:509
 #, c-format
 msgid "trap_handler: bad signal %d"
 msgstr ""
 
-#: variables.c:421
+#: variables.c:424
 #, c-format
 msgid "error importing function definition for `%s'"
 msgstr ""
 
-#: variables.c:833
+#: variables.c:838
 #, c-format
 msgid "shell level (%d) too high, resetting to 1"
 msgstr ""
 
-#: variables.c:2674
+#: variables.c:2642
 msgid "make_local_variable: no function context at current scope"
 msgstr ""
 
-#: variables.c:2693
+#: variables.c:2661
 #, c-format
 msgid "%s: variable may not be assigned value"
 msgstr ""
 
-#: variables.c:3475
+#: variables.c:2818 variables.c:2874
+#, c-format
+msgid "%s: cannot inherit value from incompatible type"
+msgstr ""
+
+#: variables.c:3459
 #, c-format
 msgid "%s: assigning integer to name reference"
 msgstr ""
 
-#: variables.c:4404
+#: variables.c:4390
 msgid "all_local_variables: no function context at current scope"
 msgstr ""
 
-#: variables.c:4771
+#: variables.c:4757
 #, c-format
 msgid "%s has null exportstr"
 msgstr ""
 
-#: variables.c:4776 variables.c:4785
+#: variables.c:4762 variables.c:4771
 #, c-format
 msgid "invalid character %d in exportstr for %s"
 msgstr ""
 
-#: variables.c:4791
+#: variables.c:4777
 #, c-format
 msgid "no `=' in exportstr for %s"
 msgstr ""
 
-#: variables.c:5331
+#: variables.c:5317
 msgid "pop_var_context: head of shell_variables not a function context"
 msgstr ""
 
-#: variables.c:5344
+#: variables.c:5330
 msgid "pop_var_context: no global_variables context"
 msgstr ""
 
-#: variables.c:5424
+#: variables.c:5410
 msgid "pop_scope: head of shell_variables not a temporary environment scope"
 msgstr ""
 
-#: variables.c:6387
+#: variables.c:6400
 #, c-format
 msgid "%s: %s: cannot open as FILE"
 msgstr ""
 
-#: variables.c:6392
+#: variables.c:6405
 #, c-format
 msgid "%s: %s: invalid value for trace file descriptor"
 msgstr ""
 
-#: variables.c:6437
+#: variables.c:6450
 #, c-format
 msgid "%s: %s: compatibility value out of range"
 msgstr ""
 
 #: version.c:46 version2.c:46
-msgid "Copyright (C) 2020 Free Software Foundation, Inc."
+msgid "Copyright (C) 2022 Free Software Foundation, Inc."
 msgstr ""
 
 #: version.c:47 version2.c:47
@@ -2282,12 +2297,16 @@ msgstr "Gebruik so: %s [OPSIE] [BEVEL [ARG]...]\n"
 
 #: builtins.c:78
 #, fuzzy
-msgid "declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]"
+msgid ""
+"declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] "
+"[name ...]"
 msgstr "E418: Ongeldige waarde: %s"
 
 #: builtins.c:80
 #, fuzzy
-msgid "typeset [-aAfFgiIlnrtux] [-p] name[=value] ..."
+msgid ""
+"typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] "
+"[name ...]"
 msgstr "E418: Ongeldige waarde: %s"
 
 #: builtins.c:82
@@ -2396,7 +2415,7 @@ msgstr "Terug Adres - 3/4 x 2\""
 
 #: builtins.c:142
 #, fuzzy
-msgid "set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]"
+msgid "set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]"
 msgstr "Gebruik so: %s [OPSIE]... [-] [GEBRUIKER [ARG]...]\n"
 
 #: builtins.c:144
@@ -2455,7 +2474,7 @@ msgstr "Tipe die naam van die %1 speler."
 
 #: builtins.c:171
 #, fuzzy
-msgid "ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]"
+msgid "ulimit [-SHabcdefiklmnpqrstuvxPRT] [limit]"
 msgstr "Grootte beperk (Kb):"
 
 #: builtins.c:174
@@ -2500,12 +2519,13 @@ msgid ""
 msgstr ""
 
 #: builtins.c:196
-msgid "while COMMANDS; do COMMANDS; done"
+msgid "while COMMANDS; do COMMANDS-2; done"
 msgstr ""
 
 #: builtins.c:198
-msgid "until COMMANDS; do COMMANDS; done"
-msgstr ""
+#, fuzzy
+msgid "until COMMANDS; do COMMANDS-2; done"
+msgstr "Bediener of domein naam:"
 
 #: builtins.c:200
 msgid "coproc [NAME] command [redirections]"
@@ -3316,7 +3336,9 @@ msgid ""
 "    word to the second NAME, and so on, with any leftover words assigned to\n"
 "    the last NAME.  Only the characters found in $IFS are recognized as "
 "word\n"
-"    delimiters.\n"
+"    delimiters. By default, the backslash character escapes delimiter "
+"characters\n"
+"    and newline.\n"
 "    \n"
 "    If no NAMEs are supplied, the line read is stored in the REPLY "
 "variable.\n"
@@ -3357,7 +3379,7 @@ msgid ""
 "    or an invalid file descriptor is supplied as the argument to -u."
 msgstr ""
 
-#: builtins.c:1041
+#: builtins.c:1042
 msgid ""
 "Return from a shell function.\n"
 "    \n"
@@ -3369,7 +3391,7 @@ msgid ""
 "    Returns N, or failure if the shell is not executing a function or script."
 msgstr ""
 
-#: builtins.c:1054
+#: builtins.c:1055
 msgid ""
 "Set or unset values of shell options and positional parameters.\n"
 "    \n"
@@ -3455,7 +3477,7 @@ msgid ""
 "    Returns success unless an invalid option is given."
 msgstr ""
 
-#: builtins.c:1139
+#: builtins.c:1140
 msgid ""
 "Unset values and attributes of shell variables and functions.\n"
 "    \n"
@@ -3477,7 +3499,7 @@ msgid ""
 "    Returns success unless an invalid option is given or a NAME is read-only."
 msgstr ""
 
-#: builtins.c:1161
+#: builtins.c:1162
 msgid ""
 "Set export attribute for shell variables.\n"
 "    \n"
@@ -3496,7 +3518,7 @@ msgid ""
 "    Returns success unless an invalid option is given or NAME is invalid."
 msgstr ""
 
-#: builtins.c:1180
+#: builtins.c:1181
 msgid ""
 "Mark shell variables as unchangeable.\n"
 "    \n"
@@ -3517,7 +3539,7 @@ msgid ""
 "    Returns success unless an invalid option is given or NAME is invalid."
 msgstr ""
 
-#: builtins.c:1202
+#: builtins.c:1203
 msgid ""
 "Shift positional parameters.\n"
 "    \n"
@@ -3528,7 +3550,7 @@ msgid ""
 "    Returns success unless N is negative or greater than $#."
 msgstr ""
 
-#: builtins.c:1214 builtins.c:1229
+#: builtins.c:1215 builtins.c:1230
 msgid ""
 "Execute commands from a file in the current shell.\n"
 "    \n"
@@ -3542,7 +3564,7 @@ msgid ""
 "    FILENAME cannot be read."
 msgstr ""
 
-#: builtins.c:1245
+#: builtins.c:1246
 msgid ""
 "Suspend shell execution.\n"
 "    \n"
@@ -3556,7 +3578,7 @@ msgid ""
 "    Returns success unless job control is not enabled or an error occurs."
 msgstr ""
 
-#: builtins.c:1261
+#: builtins.c:1262
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -3639,7 +3661,7 @@ msgid ""
 "    false or an invalid argument is given."
 msgstr ""
 
-#: builtins.c:1343
+#: builtins.c:1344
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -3647,7 +3669,7 @@ msgid ""
 "    be a literal `]', to match the opening `['."
 msgstr ""
 
-#: builtins.c:1352
+#: builtins.c:1353
 msgid ""
 "Display process times.\n"
 "    \n"
@@ -3659,7 +3681,7 @@ msgid ""
 "    Always succeeds."
 msgstr ""
 
-#: builtins.c:1364
+#: builtins.c:1365
 msgid ""
 "Trap signals and other events.\n"
 "    \n"
@@ -3703,7 +3725,7 @@ msgid ""
 "given."
 msgstr ""
 
-#: builtins.c:1400
+#: builtins.c:1401
 msgid ""
 "Display information about command type.\n"
 "    \n"
@@ -3733,7 +3755,7 @@ msgid ""
 "found."
 msgstr ""
 
-#: builtins.c:1431
+#: builtins.c:1432
 msgid ""
 "Modify shell resource limits.\n"
 "    \n"
@@ -3783,7 +3805,7 @@ msgid ""
 "    Returns success unless an invalid option is supplied or an error occurs."
 msgstr ""
 
-#: builtins.c:1482
+#: builtins.c:1483
 msgid ""
 "Display or set file mode mask.\n"
 "    \n"
@@ -3801,7 +3823,7 @@ msgid ""
 "    Returns success unless MODE is invalid or an invalid option is given."
 msgstr ""
 
-#: builtins.c:1502
+#: builtins.c:1503
 msgid ""
 "Wait for job completion and return exit status.\n"
 "    \n"
@@ -3833,7 +3855,7 @@ msgid ""
 "    children."
 msgstr ""
 
-#: builtins.c:1533
+#: builtins.c:1534
 msgid ""
 "Wait for process completion and return exit status.\n"
 "    \n"
@@ -3848,7 +3870,7 @@ msgid ""
 "    option is given."
 msgstr ""
 
-#: builtins.c:1548
+#: builtins.c:1549
 msgid ""
 "Execute commands for each member in a list.\n"
 "    \n"
@@ -3861,7 +3883,7 @@ msgid ""
 "    Returns the status of the last command executed."
 msgstr ""
 
-#: builtins.c:1562
+#: builtins.c:1563
 msgid ""
 "Arithmetic for loop.\n"
 "    \n"
@@ -3878,7 +3900,7 @@ msgid ""
 "    Returns the status of the last command executed."
 msgstr ""
 
-#: builtins.c:1580
+#: builtins.c:1581
 msgid ""
 "Select words from a list and execute commands.\n"
 "    \n"
@@ -3898,7 +3920,7 @@ msgid ""
 "    Returns the status of the last command executed."
 msgstr ""
 
-#: builtins.c:1601
+#: builtins.c:1602
 msgid ""
 "Report time consumed by pipeline's execution.\n"
 "    \n"
@@ -3914,7 +3936,7 @@ msgid ""
 "    The return status is the return status of PIPELINE."
 msgstr ""
 
-#: builtins.c:1618
+#: builtins.c:1619
 msgid ""
 "Execute commands based on pattern matching.\n"
 "    \n"
@@ -3925,7 +3947,7 @@ msgid ""
 "    Returns the status of the last command executed."
 msgstr ""
 
-#: builtins.c:1630
+#: builtins.c:1631
 msgid ""
 "Execute commands based on conditional.\n"
 "    \n"
@@ -3946,29 +3968,31 @@ msgid ""
 "    Returns the status of the last command executed."
 msgstr ""
 
-#: builtins.c:1647
+#: builtins.c:1648
 msgid ""
 "Execute commands as long as a test succeeds.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `while' COMMANDS has an exit status of zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS "
+"has\n"
+"    an exit status of zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
 
-#: builtins.c:1659
+#: builtins.c:1660
 msgid ""
 "Execute commands as long as a test does not succeed.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `until' COMMANDS has an exit status which is not zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS "
+"has\n"
+"    an exit status which is not zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
 
-#: builtins.c:1671
+#: builtins.c:1672
 msgid ""
 "Create a coprocess named NAME.\n"
 "    \n"
@@ -3981,7 +4005,7 @@ msgid ""
 "    The coproc command returns an exit status of 0."
 msgstr ""
 
-#: builtins.c:1685
+#: builtins.c:1686
 msgid ""
 "Define shell function.\n"
 "    \n"
@@ -3995,7 +4019,7 @@ msgid ""
 "    Returns success unless NAME is readonly."
 msgstr ""
 
-#: builtins.c:1699
+#: builtins.c:1700
 msgid ""
 "Group commands as a unit.\n"
 "    \n"
@@ -4006,7 +4030,7 @@ msgid ""
 "    Returns the status of the last command executed."
 msgstr ""
 
-#: builtins.c:1711
+#: builtins.c:1712
 msgid ""
 "Resume job in foreground.\n"
 "    \n"
@@ -4020,7 +4044,7 @@ msgid ""
 "    Returns the status of the resumed job."
 msgstr ""
 
-#: builtins.c:1726
+#: builtins.c:1727
 msgid ""
 "Evaluate arithmetic expression.\n"
 "    \n"
@@ -4031,7 +4055,7 @@ msgid ""
 "    Returns 1 if EXPRESSION evaluates to 0; returns 0 otherwise."
 msgstr ""
 
-#: builtins.c:1738
+#: builtins.c:1739
 msgid ""
 "Execute conditional command.\n"
 "    \n"
@@ -4059,7 +4083,7 @@ msgid ""
 "    0 or 1 depending on value of EXPRESSION."
 msgstr ""
 
-#: builtins.c:1764
+#: builtins.c:1765
 msgid ""
 "Common shell variable names and usage.\n"
 "    \n"
@@ -4113,7 +4137,7 @@ msgid ""
 "    \t\tcommands should be saved on the history list.\n"
 msgstr ""
 
-#: builtins.c:1821
+#: builtins.c:1822
 msgid ""
 "Add directories to stack.\n"
 "    \n"
@@ -4144,7 +4168,7 @@ msgid ""
 "    change fails."
 msgstr ""
 
-#: builtins.c:1855
+#: builtins.c:1856
 msgid ""
 "Remove directories from stack.\n"
 "    \n"
@@ -4171,7 +4195,7 @@ msgid ""
 "    change fails."
 msgstr ""
 
-#: builtins.c:1885
+#: builtins.c:1886
 msgid ""
 "Display directory stack.\n"
 "    \n"
@@ -4200,7 +4224,7 @@ msgid ""
 "    Returns success unless an invalid option is supplied or an error occurs."
 msgstr ""
 
-#: builtins.c:1916
+#: builtins.c:1917
 msgid ""
 "Set and unset shell options.\n"
 "    \n"
@@ -4220,7 +4244,7 @@ msgid ""
 "    given or OPTNAME is disabled."
 msgstr ""
 
-#: builtins.c:1937
+#: builtins.c:1938
 msgid ""
 "Formats and prints ARGUMENTS under control of the FORMAT.\n"
 "    \n"
@@ -4243,6 +4267,8 @@ msgid ""
 "    \n"
 "      %b\texpand backslash escape sequences in the corresponding argument\n"
 "      %q\tquote the argument in a way that can be reused as shell input\n"
+"      %Q\tlike %q, but apply any precision to the unquoted argument before\n"
+"    \t\tquoting\n"
 "      %(fmt)T\toutput the date-time string resulting from using FMT as a "
 "format\n"
 "    \t        string for strftime(3)\n"
@@ -4259,7 +4285,7 @@ msgid ""
 "    error occurs."
 msgstr ""
 
-#: builtins.c:1971
+#: builtins.c:1974
 msgid ""
 "Specify how arguments are to be completed by Readline.\n"
 "    \n"
@@ -4290,7 +4316,7 @@ msgid ""
 "    Returns success unless an invalid option is supplied or an error occurs."
 msgstr ""
 
-#: builtins.c:2001
+#: builtins.c:2004
 msgid ""
 "Display possible completions depending on the options.\n"
 "    \n"
@@ -4303,7 +4329,7 @@ msgid ""
 "    Returns success unless an invalid option is supplied or an error occurs."
 msgstr ""
 
-#: builtins.c:2016
+#: builtins.c:2019
 msgid ""
 "Modify or display completion options.\n"
 "    \n"
@@ -4335,7 +4361,7 @@ msgid ""
 "    have a completion specification defined."
 msgstr ""
 
-#: builtins.c:2047
+#: builtins.c:2050
 msgid ""
 "Read lines from the standard input into an indexed array variable.\n"
 "    \n"
@@ -4377,7 +4403,7 @@ msgid ""
 "    not an indexed array."
 msgstr ""
 
-#: builtins.c:2083
+#: builtins.c:2086
 msgid ""
 "Read lines from a file into an array variable.\n"
 "    \n"
index fb895a274621da2fcf701dd2b7b3877e33c8d25c..767b0af9402050dbe7c221a466a3d05d59d6ce46 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-11-28 12:51-0500\n"
+"POT-Creation-Date: 2022-01-11 14:50-0500\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -22,57 +22,52 @@ msgstr ""
 msgid "bad array subscript"
 msgstr ""
 
-#: arrayfunc.c:421 builtins/declare.def:638 variables.c:2274 variables.c:2300
-#: variables.c:3133
+#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268
+#: variables.c:3101
 #, c-format
 msgid "%s: removing nameref attribute"
 msgstr ""
 
-#: arrayfunc.c:446 builtins/declare.def:851
+#: arrayfunc.c:496 builtins/declare.def:868
 #, c-format
 msgid "%s: cannot convert indexed to associative array"
 msgstr ""
 
-#: arrayfunc.c:700
-#, c-format
-msgid "%s: invalid associative array key"
-msgstr ""
-
-#: arrayfunc.c:702
+#: arrayfunc.c:777
 #, c-format
 msgid "%s: cannot assign to non-numeric index"
 msgstr ""
 
-#: arrayfunc.c:747
+#: arrayfunc.c:822
 #, c-format
 msgid "%s: %s: must use subscript when assigning associative array"
 msgstr ""
 
-#: bashhist.c:452
+#: bashhist.c:455
 #, c-format
 msgid "%s: cannot create: %s"
 msgstr ""
 
-#: bashline.c:4310
+#: bashline.c:4479
 msgid "bash_execute_unix_command: cannot find keymap for command"
 msgstr ""
 
-#: bashline.c:4459
+#: bashline.c:4637
 #, c-format
 msgid "%s: first non-whitespace character is not `\"'"
 msgstr ""
 
-#: bashline.c:4488
+#: bashline.c:4666
 #, c-format
 msgid "no closing `%c' in %s"
 msgstr ""
 
-#: bashline.c:4519
+#: bashline.c:4697
 #, c-format
 msgid "%s: missing colon separator"
 msgstr ""
 
-#: bashline.c:4555
+#: bashline.c:4733
 #, c-format
 msgid "`%s': cannot unbind in command keymap"
 msgstr ""
@@ -92,7 +87,7 @@ msgstr ""
 msgid "brace expansion: failed to allocate memory for `%s'"
 msgstr ""
 
-#: builtins/alias.def:131 variables.c:1844
+#: builtins/alias.def:131 variables.c:1817
 #, c-format
 msgid "`%s': invalid alias name"
 msgstr ""
@@ -155,7 +150,7 @@ msgstr ""
 msgid "HOME not set"
 msgstr ""
 
-#: builtins/cd.def:335 builtins/common.c:161 test.c:901
+#: builtins/cd.def:335 builtins/common.c:161 test.c:916
 msgid "too many arguments"
 msgstr ""
 
@@ -182,7 +177,7 @@ msgstr ""
 msgid "%s: usage: "
 msgstr ""
 
-#: builtins/common.c:193 shell.c:516 shell.c:844
+#: builtins/common.c:193 shell.c:524 shell.c:866
 #, c-format
 msgid "%s: option requires an argument"
 msgstr ""
@@ -197,7 +192,7 @@ msgstr ""
 msgid "%s: not found"
 msgstr ""
 
-#: builtins/common.c:216 shell.c:857
+#: builtins/common.c:216 shell.c:879
 #, c-format
 msgid "%s: invalid option"
 msgstr ""
@@ -207,7 +202,7 @@ msgstr ""
 msgid "%s: invalid option name"
 msgstr ""
 
-#: builtins/common.c:230 execute_cmd.c:2373 general.c:368 general.c:373
+#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373
 #, c-format
 msgid "`%s': not a valid identifier"
 msgstr ""
@@ -220,7 +215,7 @@ msgstr ""
 msgid "invalid hex number"
 msgstr ""
 
-#: builtins/common.c:244 expr.c:1569
+#: builtins/common.c:244 expr.c:1574
 msgid "invalid number"
 msgstr ""
 
@@ -234,88 +229,93 @@ msgstr ""
 msgid "`%s': not a pid or valid job spec"
 msgstr ""
 
-#: builtins/common.c:266 error.c:510
+#: builtins/common.c:266 error.c:536
 #, c-format
 msgid "%s: readonly variable"
 msgstr ""
 
-#: builtins/common.c:274
+#: builtins/common.c:273
+#, c-format
+msgid "%s: cannot assign"
+msgstr ""
+
+#: builtins/common.c:281
 #, c-format
 msgid "%s: %s out of range"
 msgstr ""
 
-#: builtins/common.c:274 builtins/common.c:276
+#: builtins/common.c:281 builtins/common.c:283
 msgid "argument"
 msgstr ""
 
-#: builtins/common.c:276
+#: builtins/common.c:283
 #, c-format
 msgid "%s out of range"
 msgstr ""
 
-#: builtins/common.c:284
+#: builtins/common.c:291
 #, c-format
 msgid "%s: no such job"
 msgstr ""
 
-#: builtins/common.c:292
+#: builtins/common.c:299
 #, c-format
 msgid "%s: no job control"
 msgstr ""
 
-#: builtins/common.c:294
+#: builtins/common.c:301
 msgid "no job control"
 msgstr ""
 
-#: builtins/common.c:304
+#: builtins/common.c:311
 #, c-format
 msgid "%s: restricted"
 msgstr ""
 
-#: builtins/common.c:306
+#: builtins/common.c:313
 msgid "restricted"
 msgstr ""
 
-#: builtins/common.c:314
+#: builtins/common.c:321
 #, c-format
 msgid "%s: not a shell builtin"
 msgstr ""
 
-#: builtins/common.c:323
+#: builtins/common.c:330
 #, c-format
 msgid "write error: %s"
 msgstr ""
 
-#: builtins/common.c:331
+#: builtins/common.c:338
 #, c-format
 msgid "error setting terminal attributes: %s"
 msgstr ""
 
-#: builtins/common.c:333
+#: builtins/common.c:340
 #, c-format
 msgid "error getting terminal attributes: %s"
 msgstr ""
 
-#: builtins/common.c:635
+#: builtins/common.c:642
 #, c-format
 msgid "%s: error retrieving current directory: %s: %s\n"
 msgstr ""
 
-#: builtins/common.c:701 builtins/common.c:703
+#: builtins/common.c:708 builtins/common.c:710
 #, c-format
 msgid "%s: ambiguous job spec"
 msgstr ""
 
-#: builtins/common.c:964
+#: builtins/common.c:971
 msgid "help not available in this version"
 msgstr ""
 
-#: builtins/common.c:1008 builtins/set.def:953 variables.c:3839
+#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825
 #, c-format
 msgid "%s: cannot unset: readonly %s"
 msgstr ""
 
-#: builtins/common.c:1013 builtins/set.def:932 variables.c:3844
+#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830
 #, c-format
 msgid "%s: cannot unset"
 msgstr ""
@@ -325,108 +325,108 @@ msgstr ""
 msgid "%s: invalid action name"
 msgstr ""
 
-#: builtins/complete.def:486 builtins/complete.def:634
-#: builtins/complete.def:865
+#: builtins/complete.def:486 builtins/complete.def:642
+#: builtins/complete.def:873
 #, c-format
 msgid "%s: no completion specification"
 msgstr ""
 
-#: builtins/complete.def:688
+#: builtins/complete.def:696
 msgid "warning: -F option may not work as you expect"
 msgstr ""
 
-#: builtins/complete.def:690
+#: builtins/complete.def:698
 msgid "warning: -C option may not work as you expect"
 msgstr ""
 
-#: builtins/complete.def:838
+#: builtins/complete.def:846
 msgid "not currently executing completion function"
 msgstr ""
 
-#: builtins/declare.def:134
+#: builtins/declare.def:137
 msgid "can only be used in a function"
 msgstr ""
 
-#: builtins/declare.def:363 builtins/declare.def:756
-#, c-format
-msgid "%s: reference variable cannot be an array"
+#: builtins/declare.def:437
+msgid "cannot use `-f' to make functions"
 msgstr ""
 
-#: builtins/declare.def:374 variables.c:3385
+#: builtins/declare.def:464 execute_cmd.c:6132
 #, c-format
-msgid "%s: nameref variable self references not allowed"
+msgid "%s: readonly function"
 msgstr ""
 
-#: builtins/declare.def:379 variables.c:2104 variables.c:3304 variables.c:3312
-#: variables.c:3382
+#: builtins/declare.def:521 builtins/declare.def:804
 #, c-format
-msgid "%s: circular name reference"
+msgid "%s: reference variable cannot be an array"
 msgstr ""
 
-#: builtins/declare.def:384 builtins/declare.def:762 builtins/declare.def:773
+#: builtins/declare.def:532 variables.c:3359
 #, c-format
-msgid "`%s': invalid variable name for name reference"
-msgstr ""
-
-#: builtins/declare.def:514
-msgid "cannot use `-f' to make functions"
+msgid "%s: nameref variable self references not allowed"
 msgstr ""
 
-#: builtins/declare.def:526 execute_cmd.c:5986
+#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286
+#: variables.c:3356
 #, c-format
-msgid "%s: readonly function"
+msgid "%s: circular name reference"
 msgstr ""
 
-#: builtins/declare.def:824
+#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820
 #, c-format
-msgid "%s: quoted compound array assignment deprecated"
+msgid "`%s': invalid variable name for name reference"
 msgstr ""
 
-#: builtins/declare.def:838
+#: builtins/declare.def:856
 #, c-format
 msgid "%s: cannot destroy array variables in this way"
 msgstr ""
 
-#: builtins/declare.def:845 builtins/read.def:815
+#: builtins/declare.def:862 builtins/read.def:887
 #, c-format
 msgid "%s: cannot convert associative to indexed array"
 msgstr ""
 
-#: builtins/enable.def:143 builtins/enable.def:151
+#: builtins/declare.def:891
+#, c-format
+msgid "%s: quoted compound array assignment deprecated"
+msgstr ""
+
+#: builtins/enable.def:145 builtins/enable.def:153
 msgid "dynamic loading not available"
 msgstr ""
 
-#: builtins/enable.def:343
+#: builtins/enable.def:376
 #, c-format
 msgid "cannot open shared object %s: %s"
 msgstr ""
 
-#: builtins/enable.def:371
+#: builtins/enable.def:405
 #, c-format
 msgid "cannot find %s in shared object %s: %s"
 msgstr ""
 
-#: builtins/enable.def:388
+#: builtins/enable.def:422
 #, c-format
 msgid "%s: dynamic builtin already loaded"
 msgstr ""
 
-#: builtins/enable.def:392
+#: builtins/enable.def:426
 #, c-format
 msgid "load function for %s returns failure (%d): not loaded"
 msgstr ""
 
-#: builtins/enable.def:517
+#: builtins/enable.def:551
 #, c-format
 msgid "%s: not dynamically loaded"
 msgstr ""
 
-#: builtins/enable.def:543
+#: builtins/enable.def:577
 #, c-format
 msgid "%s: cannot delete: %s"
 msgstr ""
 
-#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5818
+#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959
 #, c-format
 msgid "%s: is a directory"
 msgstr ""
@@ -441,7 +441,7 @@ msgstr ""
 msgid "%s: file is too large"
 msgstr ""
 
-#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1647
+#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673
 #, c-format
 msgid "%s: cannot execute binary file"
 msgstr ""
@@ -535,12 +535,12 @@ msgid ""
 "no help topics match `%s'.  Try `help help' or `man -k %s' or `info %s'."
 msgstr ""
 
-#: builtins/help.def:224
+#: builtins/help.def:223
 #, c-format
 msgid "%s: cannot open: %s"
 msgstr ""
 
-#: builtins/help.def:524
+#: builtins/help.def:523
 #, c-format
 msgid ""
 "These shell commands are defined internally.  Type `help' to see this list.\n"
@@ -552,21 +552,21 @@ msgid ""
 "\n"
 msgstr ""
 
-#: builtins/history.def:155
+#: builtins/history.def:159
 msgid "cannot use more than one of -anrw"
 msgstr ""
 
-#: builtins/history.def:188 builtins/history.def:198 builtins/history.def:213
-#: builtins/history.def:230 builtins/history.def:242 builtins/history.def:249
+#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215
+#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247
 msgid "history position"
 msgstr ""
 
-#: builtins/history.def:340
+#: builtins/history.def:338
 #, c-format
 msgid "%s: invalid timestamp"
 msgstr ""
 
-#: builtins/history.def:451
+#: builtins/history.def:449
 #, c-format
 msgid "%s: history expansion failed"
 msgstr ""
@@ -589,78 +589,78 @@ msgstr ""
 msgid "Unknown error"
 msgstr ""
 
-#: builtins/let.def:97 builtins/let.def:122 expr.c:639 expr.c:657
+#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658
 msgid "expression expected"
 msgstr ""
 
-#: builtins/mapfile.def:178
+#: builtins/mapfile.def:180
 #, c-format
 msgid "%s: not an indexed array"
 msgstr ""
 
-#: builtins/mapfile.def:271 builtins/read.def:308
+#: builtins/mapfile.def:276 builtins/read.def:336
 #, c-format
 msgid "%s: invalid file descriptor specification"
 msgstr ""
 
-#: builtins/mapfile.def:279 builtins/read.def:315
+#: builtins/mapfile.def:284 builtins/read.def:343
 #, c-format
 msgid "%d: invalid file descriptor: %s"
 msgstr ""
 
-#: builtins/mapfile.def:288 builtins/mapfile.def:326
+#: builtins/mapfile.def:293 builtins/mapfile.def:331
 #, c-format
 msgid "%s: invalid line count"
 msgstr ""
 
-#: builtins/mapfile.def:299
+#: builtins/mapfile.def:304
 #, c-format
 msgid "%s: invalid array origin"
 msgstr ""
 
-#: builtins/mapfile.def:316
+#: builtins/mapfile.def:321
 #, c-format
 msgid "%s: invalid callback quantum"
 msgstr ""
 
-#: builtins/mapfile.def:349
+#: builtins/mapfile.def:354
 msgid "empty array variable name"
 msgstr ""
 
-#: builtins/mapfile.def:370
+#: builtins/mapfile.def:375
 msgid "array variable support required"
 msgstr ""
 
-#: builtins/printf.def:419
+#: builtins/printf.def:430
 #, c-format
 msgid "`%s': missing format character"
 msgstr ""
 
-#: builtins/printf.def:474
+#: builtins/printf.def:485
 #, c-format
 msgid "`%c': invalid time format specification"
 msgstr ""
 
-#: builtins/printf.def:676
+#: builtins/printf.def:708
 #, c-format
 msgid "`%c': invalid format character"
 msgstr ""
 
-#: builtins/printf.def:702
+#: builtins/printf.def:734
 #, c-format
 msgid "warning: %s: %s"
 msgstr ""
 
-#: builtins/printf.def:788
+#: builtins/printf.def:822
 #, c-format
 msgid "format parsing problem: %s"
 msgstr ""
 
-#: builtins/printf.def:885
+#: builtins/printf.def:919
 msgid "missing hex digit for \\x"
 msgstr ""
 
-#: builtins/printf.def:900
+#: builtins/printf.def:934
 #, c-format
 msgid "missing unicode digit for \\%c"
 msgstr ""
@@ -756,12 +756,12 @@ msgid ""
 "    The `dirs' builtin displays the directory stack."
 msgstr ""
 
-#: builtins/read.def:280
+#: builtins/read.def:308
 #, c-format
 msgid "%s: invalid timeout specification"
 msgstr ""
 
-#: builtins/read.def:755
+#: builtins/read.def:827
 #, c-format
 msgid "read error: %d: %s"
 msgstr ""
@@ -774,7 +774,7 @@ msgstr ""
 msgid "cannot simultaneously unset a function and a variable"
 msgstr ""
 
-#: builtins/set.def:966
+#: builtins/set.def:969
 #, c-format
 msgid "%s: not an array variable"
 msgstr ""
@@ -793,11 +793,11 @@ msgstr ""
 msgid "shift count"
 msgstr ""
 
-#: builtins/shopt.def:310
+#: builtins/shopt.def:323
 msgid "cannot set and unset shell options simultaneously"
 msgstr ""
 
-#: builtins/shopt.def:428
+#: builtins/shopt.def:444
 #, c-format
 msgid "%s: invalid shell option name"
 msgstr ""
@@ -864,16 +864,16 @@ msgstr ""
 msgid "`%c': bad command"
 msgstr ""
 
-#: builtins/ulimit.def:455
+#: builtins/ulimit.def:464
 #, c-format
 msgid "%s: cannot get limit: %s"
 msgstr ""
 
-#: builtins/ulimit.def:481
+#: builtins/ulimit.def:490
 msgid "limit"
 msgstr ""
 
-#: builtins/ulimit.def:493 builtins/ulimit.def:793
+#: builtins/ulimit.def:502 builtins/ulimit.def:802
 #, c-format
 msgid "%s: cannot modify limit: %s"
 msgstr ""
@@ -892,7 +892,7 @@ msgstr ""
 msgid "`%c': invalid symbolic mode character"
 msgstr ""
 
-#: error.c:89 error.c:347 error.c:349 error.c:351
+#: error.c:89 error.c:373 error.c:375 error.c:377
 msgid " line "
 msgstr ""
 
@@ -912,96 +912,106 @@ msgstr ""
 msgid "INFORM: "
 msgstr ""
 
-#: error.c:462
+#: error.c:310
+#, c-format
+msgid "DEBUG warning: "
+msgstr ""
+
+#: error.c:488
 msgid "unknown command error"
 msgstr ""
 
-#: error.c:463
+#: error.c:489
 msgid "bad command type"
 msgstr ""
 
-#: error.c:464
+#: error.c:490
 msgid "bad connector"
 msgstr ""
 
-#: error.c:465
+#: error.c:491
 msgid "bad jump"
 msgstr ""
 
-#: error.c:503
+#: error.c:529
 #, c-format
 msgid "%s: unbound variable"
 msgstr ""
 
-#: eval.c:242
+#: eval.c:243
 msgid "\atimed out waiting for input: auto-logout\n"
 msgstr ""
 
-#: execute_cmd.c:537
+#: execute_cmd.c:555
 #, c-format
 msgid "cannot redirect standard input from /dev/null: %s"
 msgstr ""
 
-#: execute_cmd.c:1297
+#: execute_cmd.c:1317
 #, c-format
 msgid "TIMEFORMAT: `%c': invalid format character"
 msgstr ""
 
-#: execute_cmd.c:2362
+#: execute_cmd.c:2391
 #, c-format
 msgid "execute_coproc: coproc [%d:%s] still exists"
 msgstr ""
 
-#: execute_cmd.c:2486
+#: execute_cmd.c:2524
 msgid "pipe error"
 msgstr ""
 
-#: execute_cmd.c:4793
+#: execute_cmd.c:4923
 #, c-format
 msgid "eval: maximum eval nesting level exceeded (%d)"
 msgstr ""
 
-#: execute_cmd.c:4805
+#: execute_cmd.c:4935
 #, c-format
 msgid "%s: maximum source nesting level exceeded (%d)"
 msgstr ""
 
-#: execute_cmd.c:4913
+#: execute_cmd.c:5043
 #, c-format
 msgid "%s: maximum function nesting level exceeded (%d)"
 msgstr ""
 
-#: execute_cmd.c:5467
+#: execute_cmd.c:5598
 #, c-format
 msgid "%s: restricted: cannot specify `/' in command names"
 msgstr ""
 
-#: execute_cmd.c:5574
+#: execute_cmd.c:5715
 #, c-format
 msgid "%s: command not found"
 msgstr ""
 
-#: execute_cmd.c:5816
+#: execute_cmd.c:5957
 #, c-format
 msgid "%s: %s"
 msgstr ""
 
-#: execute_cmd.c:5854
+#: execute_cmd.c:5975
+#, c-format
+msgid "%s: cannot execute: required file not found"
+msgstr ""
+
+#: execute_cmd.c:6000
 #, c-format
 msgid "%s: %s: bad interpreter"
 msgstr ""
 
-#: execute_cmd.c:5891
+#: execute_cmd.c:6037
 #, c-format
 msgid "%s: cannot execute binary file: %s"
 msgstr ""
 
-#: execute_cmd.c:5977
+#: execute_cmd.c:6123
 #, c-format
 msgid "`%s': is a special builtin"
 msgstr ""
 
-#: execute_cmd.c:6029
+#: execute_cmd.c:6175
 #, c-format
 msgid "cannot duplicate fd %d to fd %d"
 msgstr ""
@@ -1014,68 +1024,68 @@ msgstr ""
 msgid "recursion stack underflow"
 msgstr ""
 
-#: expr.c:477
+#: expr.c:478
 msgid "syntax error in expression"
 msgstr ""
 
-#: expr.c:521
+#: expr.c:522
 msgid "attempted assignment to non-variable"
 msgstr ""
 
-#: expr.c:530
+#: expr.c:531
 msgid "syntax error in variable assignment"
 msgstr ""
 
-#: expr.c:544 expr.c:911
+#: expr.c:545 expr.c:912
 msgid "division by 0"
 msgstr ""
 
-#: expr.c:592
+#: expr.c:593
 msgid "bug: bad expassign token"
 msgstr ""
 
-#: expr.c:646
+#: expr.c:647
 msgid "`:' expected for conditional expression"
 msgstr ""
 
-#: expr.c:972
+#: expr.c:973
 msgid "exponent less than 0"
 msgstr ""
 
-#: expr.c:1029
+#: expr.c:1030
 msgid "identifier expected after pre-increment or pre-decrement"
 msgstr ""
 
-#: expr.c:1056
+#: expr.c:1057
 msgid "missing `)'"
 msgstr ""
 
-#: expr.c:1107 expr.c:1487
+#: expr.c:1108 expr.c:1492
 msgid "syntax error: operand expected"
 msgstr ""
 
-#: expr.c:1489
+#: expr.c:1494
 msgid "syntax error: invalid arithmetic operator"
 msgstr ""
 
-#: expr.c:1513
+#: expr.c:1518
 #, c-format
 msgid "%s%s%s: %s (error token is \"%s\")"
 msgstr ""
 
-#: expr.c:1573
+#: expr.c:1578
 msgid "invalid arithmetic base"
 msgstr ""
 
-#: expr.c:1582
+#: expr.c:1587
 msgid "invalid integer constant"
 msgstr ""
 
-#: expr.c:1598
+#: expr.c:1603
 msgid "value too great for base"
 msgstr ""
 
-#: expr.c:1647
+#: expr.c:1652
 #, c-format
 msgid "%s: expression error\n"
 msgstr ""
@@ -1084,7 +1094,7 @@ msgstr ""
 msgid "getcwd: cannot access parent directories"
 msgstr ""
 
-#: input.c:99 subst.c:6069
+#: input.c:99 subst.c:6208
 #, c-format
 msgid "cannot reset nodelay mode for fd %d"
 msgstr ""
@@ -1103,214 +1113,214 @@ msgstr ""
 msgid "start_pipeline: pgrp pipe"
 msgstr ""
 
-#: jobs.c:906
+#: jobs.c:907
 #, c-format
 msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr ""
 
-#: jobs.c:959
+#: jobs.c:960
 #, c-format
 msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr ""
 
-#: jobs.c:1283
+#: jobs.c:1279
 #, c-format
 msgid "forked pid %d appears in running job %d"
 msgstr ""
 
-#: jobs.c:1402
+#: jobs.c:1397
 #, c-format
 msgid "deleting stopped job %d with process group %ld"
 msgstr ""
 
-#: jobs.c:1511
+#: jobs.c:1502
 #, c-format
 msgid "add_process: pid %5ld (%s) marked as still alive"
 msgstr ""
 
-#: jobs.c:1850
+#: jobs.c:1839
 #, c-format
 msgid "describe_pid: %ld: no such pid"
 msgstr ""
 
-#: jobs.c:1865
+#: jobs.c:1854
 #, c-format
 msgid "Signal %d"
 msgstr ""
 
-#: jobs.c:1879 jobs.c:1905
+#: jobs.c:1868 jobs.c:1894
 msgid "Done"
 msgstr ""
 
-#: jobs.c:1884 siglist.c:122
+#: jobs.c:1873 siglist.c:123
 msgid "Stopped"
 msgstr ""
 
-#: jobs.c:1888
+#: jobs.c:1877
 #, c-format
 msgid "Stopped(%s)"
 msgstr ""
 
-#: jobs.c:1892
+#: jobs.c:1881
 msgid "Running"
 msgstr ""
 
-#: jobs.c:1909
+#: jobs.c:1898
 #, c-format
 msgid "Done(%d)"
 msgstr ""
 
-#: jobs.c:1911
+#: jobs.c:1900
 #, c-format
 msgid "Exit %d"
 msgstr ""
 
-#: jobs.c:1914
+#: jobs.c:1903
 msgid "Unknown status"
 msgstr ""
 
-#: jobs.c:2001
+#: jobs.c:1990
 #, c-format
 msgid "(core dumped) "
 msgstr ""
 
-#: jobs.c:2020
+#: jobs.c:2009
 #, c-format
 msgid "  (wd: %s)"
 msgstr ""
 
-#: jobs.c:2259
+#: jobs.c:2250
 #, c-format
 msgid "child setpgid (%ld to %ld)"
 msgstr ""
 
-#: jobs.c:2617 nojobs.c:664
+#: jobs.c:2608 nojobs.c:666
 #, c-format
 msgid "wait: pid %ld is not a child of this shell"
 msgstr ""
 
-#: jobs.c:2893
+#: jobs.c:2884
 #, c-format
 msgid "wait_for: No record of process %ld"
 msgstr ""
 
-#: jobs.c:3236
+#: jobs.c:3223
 #, c-format
 msgid "wait_for_job: job %d is stopped"
 msgstr ""
 
-#: jobs.c:3564
+#: jobs.c:3551
 #, c-format
 msgid "%s: no current jobs"
 msgstr ""
 
-#: jobs.c:3571
+#: jobs.c:3558
 #, c-format
 msgid "%s: job has terminated"
 msgstr ""
 
-#: jobs.c:3580
+#: jobs.c:3567
 #, c-format
 msgid "%s: job %d already in background"
 msgstr ""
 
-#: jobs.c:3806
+#: jobs.c:3793
 msgid "waitchld: turning on WNOHANG to avoid indefinite block"
 msgstr ""
 
-#: jobs.c:4320
+#: jobs.c:4307
 #, c-format
 msgid "%s: line %d: "
 msgstr ""
 
-#: jobs.c:4334 nojobs.c:919
+#: jobs.c:4321 nojobs.c:921
 #, c-format
 msgid " (core dumped)"
 msgstr ""
 
-#: jobs.c:4346 jobs.c:4359
+#: jobs.c:4333 jobs.c:4346
 #, c-format
 msgid "(wd now: %s)\n"
 msgstr ""
 
-#: jobs.c:4391
+#: jobs.c:4378
 msgid "initialize_job_control: getpgrp failed"
 msgstr ""
 
-#: jobs.c:4447
+#: jobs.c:4434
 msgid "initialize_job_control: no job control in background"
 msgstr ""
 
-#: jobs.c:4463
+#: jobs.c:4450
 msgid "initialize_job_control: line discipline"
 msgstr ""
 
-#: jobs.c:4473
+#: jobs.c:4460
 msgid "initialize_job_control: setpgid"
 msgstr ""
 
-#: jobs.c:4494 jobs.c:4503
+#: jobs.c:4481 jobs.c:4490
 #, c-format
 msgid "cannot set terminal process group (%d)"
 msgstr ""
 
-#: jobs.c:4508
+#: jobs.c:4495
 msgid "no job control in this shell"
 msgstr ""
 
-#: lib/malloc/malloc.c:353
+#: lib/malloc/malloc.c:367
 #, c-format
 msgid "malloc: failed assertion: %s\n"
 msgstr ""
 
-#: lib/malloc/malloc.c:369
+#: lib/malloc/malloc.c:383
 #, c-format
 msgid ""
 "\r\n"
 "malloc: %s:%d: assertion botched\r\n"
 msgstr ""
 
-#: lib/malloc/malloc.c:370 lib/malloc/malloc.c:933
+#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941
 msgid "unknown"
 msgstr ""
 
-#: lib/malloc/malloc.c:882
+#: lib/malloc/malloc.c:892
 msgid "malloc: block on free list clobbered"
 msgstr ""
 
-#: lib/malloc/malloc.c:972
+#: lib/malloc/malloc.c:980
 msgid "free: called with already freed block argument"
 msgstr ""
 
-#: lib/malloc/malloc.c:975
+#: lib/malloc/malloc.c:983
 msgid "free: called with unallocated block argument"
 msgstr ""
 
-#: lib/malloc/malloc.c:994
+#: lib/malloc/malloc.c:1001
 msgid "free: underflow detected; mh_nbytes out of range"
 msgstr ""
 
-#: lib/malloc/malloc.c:1001
+#: lib/malloc/malloc.c:1007
 msgid "free: underflow detected; magic8 corrupted"
 msgstr ""
 
-#: lib/malloc/malloc.c:1009
+#: lib/malloc/malloc.c:1014
 msgid "free: start and end chunk sizes differ"
 msgstr ""
 
-#: lib/malloc/malloc.c:1119
+#: lib/malloc/malloc.c:1176
 msgid "realloc: called with unallocated block argument"
 msgstr ""
 
-#: lib/malloc/malloc.c:1134
+#: lib/malloc/malloc.c:1191
 msgid "realloc: underflow detected; mh_nbytes out of range"
 msgstr ""
 
-#: lib/malloc/malloc.c:1141
+#: lib/malloc/malloc.c:1197
 msgid "realloc: underflow detected; magic8 corrupted"
 msgstr ""
 
-#: lib/malloc/malloc.c:1150
+#: lib/malloc/malloc.c:1205
 msgid "realloc: start and end chunk sizes differ"
 msgstr ""
 
@@ -1352,22 +1362,22 @@ msgstr ""
 msgid "network operations not supported"
 msgstr ""
 
-#: locale.c:217
+#: locale.c:219
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s)"
 msgstr ""
 
-#: locale.c:219
+#: locale.c:221
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s): %s"
 msgstr ""
 
-#: locale.c:292
+#: locale.c:294
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s)"
 msgstr ""
 
-#: locale.c:294
+#: locale.c:296
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s): %s"
 msgstr ""
@@ -1385,138 +1395,138 @@ msgstr ""
 msgid "The mail in %s has been read\n"
 msgstr ""
 
-#: make_cmd.c:317
+#: make_cmd.c:314
 msgid "syntax error: arithmetic expression required"
 msgstr ""
 
-#: make_cmd.c:319
+#: make_cmd.c:316
 msgid "syntax error: `;' unexpected"
 msgstr ""
 
-#: make_cmd.c:320
+#: make_cmd.c:317
 #, c-format
 msgid "syntax error: `((%s))'"
 msgstr ""
 
-#: make_cmd.c:572
+#: make_cmd.c:569
 #, c-format
 msgid "make_here_document: bad instruction type %d"
 msgstr ""
 
-#: make_cmd.c:657
+#: make_cmd.c:668
 #, c-format
 msgid "here-document at line %d delimited by end-of-file (wanted `%s')"
 msgstr ""
 
-#: make_cmd.c:756
+#: make_cmd.c:769
 #, c-format
 msgid "make_redirection: redirection instruction `%d' out of range"
 msgstr ""
 
-#: parse.y:2393
+#: parse.y:2428
 #, c-format
 msgid ""
 "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line "
 "truncated"
 msgstr ""
 
-#: parse.y:2826
+#: parse.y:2921
 msgid "maximum here-document count exceeded"
 msgstr ""
 
-#: parse.y:3581 parse.y:3957 parse.y:4556
+#: parse.y:3684 parse.y:4244 parse.y:6148
 #, c-format
 msgid "unexpected EOF while looking for matching `%c'"
 msgstr ""
 
-#: parse.y:4696
+#: parse.y:4452
 msgid "unexpected EOF while looking for `]]'"
 msgstr ""
 
-#: parse.y:4701
+#: parse.y:4457
 #, c-format
 msgid "syntax error in conditional expression: unexpected token `%s'"
 msgstr ""
 
-#: parse.y:4705
+#: parse.y:4461
 msgid "syntax error in conditional expression"
 msgstr ""
 
-#: parse.y:4783
+#: parse.y:4539
 #, c-format
 msgid "unexpected token `%s', expected `)'"
 msgstr ""
 
-#: parse.y:4787
+#: parse.y:4543
 msgid "expected `)'"
 msgstr ""
 
-#: parse.y:4815
+#: parse.y:4571
 #, c-format
 msgid "unexpected argument `%s' to conditional unary operator"
 msgstr ""
 
-#: parse.y:4819
+#: parse.y:4575
 msgid "unexpected argument to conditional unary operator"
 msgstr ""
 
-#: parse.y:4865
+#: parse.y:4621
 #, c-format
 msgid "unexpected token `%s', conditional binary operator expected"
 msgstr ""
 
-#: parse.y:4869
+#: parse.y:4625
 msgid "conditional binary operator expected"
 msgstr ""
 
-#: parse.y:4891
+#: parse.y:4647
 #, c-format
 msgid "unexpected argument `%s' to conditional binary operator"
 msgstr ""
 
-#: parse.y:4895
+#: parse.y:4651
 msgid "unexpected argument to conditional binary operator"
 msgstr ""
 
-#: parse.y:4906
+#: parse.y:4662
 #, c-format
 msgid "unexpected token `%c' in conditional command"
 msgstr ""
 
-#: parse.y:4909
+#: parse.y:4665
 #, c-format
 msgid "unexpected token `%s' in conditional command"
 msgstr ""
 
-#: parse.y:4913
+#: parse.y:4669
 #, c-format
 msgid "unexpected token %d in conditional command"
 msgstr ""
 
-#: parse.y:6336
+#: parse.y:6118
 #, c-format
 msgid "syntax error near unexpected token `%s'"
 msgstr ""
 
-#: parse.y:6355
+#: parse.y:6137
 #, c-format
 msgid "syntax error near `%s'"
 msgstr ""
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error: unexpected end of file"
 msgstr ""
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error"
 msgstr ""
 
-#: parse.y:6428
+#: parse.y:6216
 #, c-format
 msgid "Use \"%s\" to leave the shell.\n"
 msgstr ""
 
-#: parse.y:6602
+#: parse.y:6394
 msgid "unexpected EOF while looking for matching `)'"
 msgstr ""
 
@@ -1554,413 +1564,413 @@ msgstr ""
 msgid "xtrace fd (%d) != fileno xtrace fp (%d)"
 msgstr ""
 
-#: print_cmd.c:1540
+#: print_cmd.c:1545
 #, c-format
 msgid "cprintf: `%c': invalid format character"
 msgstr ""
 
-#: redir.c:149 redir.c:197
+#: redir.c:150 redir.c:198
 msgid "file descriptor out of range"
 msgstr ""
 
-#: redir.c:204
+#: redir.c:205
 #, c-format
 msgid "%s: ambiguous redirect"
 msgstr ""
 
-#: redir.c:208
+#: redir.c:209
 #, c-format
 msgid "%s: cannot overwrite existing file"
 msgstr ""
 
-#: redir.c:213
+#: redir.c:214
 #, c-format
 msgid "%s: restricted: cannot redirect output"
 msgstr ""
 
-#: redir.c:218
+#: redir.c:219
 #, c-format
 msgid "cannot create temp file for here-document: %s"
 msgstr ""
 
-#: redir.c:222
+#: redir.c:223
 #, c-format
 msgid "%s: cannot assign fd to variable"
 msgstr ""
 
-#: redir.c:649
+#: redir.c:650
 msgid "/dev/(tcp|udp)/host/port not supported without networking"
 msgstr ""
 
-#: redir.c:938 redir.c:1053 redir.c:1114 redir.c:1284
+#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303
 msgid "redirection error: cannot duplicate fd"
 msgstr ""
 
-#: shell.c:347
+#: shell.c:353
 msgid "could not find /tmp, please create!"
 msgstr ""
 
-#: shell.c:351
+#: shell.c:357
 msgid "/tmp must be a valid directory name"
 msgstr ""
 
-#: shell.c:804
+#: shell.c:826
 msgid "pretty-printing mode ignored in interactive shells"
 msgstr ""
 
-#: shell.c:948
+#: shell.c:972
 #, c-format
 msgid "%c%c: invalid option"
 msgstr ""
 
-#: shell.c:1319
+#: shell.c:1343
 #, c-format
 msgid "cannot set uid to %d: effective uid %d"
 msgstr ""
 
-#: shell.c:1330
+#: shell.c:1354
 #, c-format
 msgid "cannot set gid to %d: effective gid %d"
 msgstr ""
 
-#: shell.c:1518
+#: shell.c:1544
 msgid "cannot start debugger; debugging mode disabled"
 msgstr ""
 
-#: shell.c:1632
+#: shell.c:1658
 #, c-format
 msgid "%s: Is a directory"
 msgstr ""
 
-#: shell.c:1881
+#: shell.c:1907
 msgid "I have no name!"
 msgstr ""
 
-#: shell.c:2035
+#: shell.c:2061
 #, c-format
 msgid "GNU bash, version %s-(%s)\n"
 msgstr ""
 
-#: shell.c:2036
+#: shell.c:2062
 #, c-format
 msgid ""
 "Usage:\t%s [GNU long option] [option] ...\n"
 "\t%s [GNU long option] [option] script-file ...\n"
 msgstr ""
 
-#: shell.c:2038
+#: shell.c:2064
 msgid "GNU long options:\n"
 msgstr ""
 
-#: shell.c:2042
+#: shell.c:2068
 msgid "Shell options:\n"
 msgstr ""
 
-#: shell.c:2043
+#: shell.c:2069
 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n"
 msgstr ""
 
-#: shell.c:2062
+#: shell.c:2088
 #, c-format
 msgid "\t-%s or -o option\n"
 msgstr ""
 
-#: shell.c:2068
+#: shell.c:2094
 #, c-format
 msgid "Type `%s -c \"help set\"' for more information about shell options.\n"
 msgstr ""
 
-#: shell.c:2069
+#: shell.c:2095
 #, c-format
 msgid "Type `%s -c help' for more information about shell builtin commands.\n"
 msgstr ""
 
-#: shell.c:2070
+#: shell.c:2096
 #, c-format
 msgid "Use the `bashbug' command to report bugs.\n"
 msgstr ""
 
-#: shell.c:2072
+#: shell.c:2098
 #, c-format
 msgid "bash home page: <http://www.gnu.org/software/bash>\n"
 msgstr ""
 
-#: shell.c:2073
+#: shell.c:2099
 #, c-format
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 msgstr ""
 
-#: sig.c:757
+#: sig.c:765
 #, c-format
 msgid "sigprocmask: %d: invalid operation"
 msgstr ""
 
-#: siglist.c:47
+#: siglist.c:48
 msgid "Bogus signal"
 msgstr ""
 
-#: siglist.c:50
+#: siglist.c:51
 msgid "Hangup"
 msgstr ""
 
-#: siglist.c:54
+#: siglist.c:55
 msgid "Interrupt"
 msgstr ""
 
-#: siglist.c:58
+#: siglist.c:59
 msgid "Quit"
 msgstr ""
 
-#: siglist.c:62
+#: siglist.c:63
 msgid "Illegal instruction"
 msgstr ""
 
-#: siglist.c:66
+#: siglist.c:67
 msgid "BPT trace/trap"
 msgstr ""
 
-#: siglist.c:74
+#: siglist.c:75
 msgid "ABORT instruction"
 msgstr ""
 
-#: siglist.c:78
+#: siglist.c:79
 msgid "EMT instruction"
 msgstr ""
 
-#: siglist.c:82
+#: siglist.c:83
 msgid "Floating point exception"
 msgstr ""
 
-#: siglist.c:86
+#: siglist.c:87
 msgid "Killed"
 msgstr ""
 
-#: siglist.c:90
+#: siglist.c:91
 msgid "Bus error"
 msgstr ""
 
-#: siglist.c:94
+#: siglist.c:95
 msgid "Segmentation fault"
 msgstr ""
 
-#: siglist.c:98
+#: siglist.c:99
 msgid "Bad system call"
 msgstr ""
 
-#: siglist.c:102
+#: siglist.c:103
 msgid "Broken pipe"
 msgstr ""
 
-#: siglist.c:106
+#: siglist.c:107
 msgid "Alarm clock"
 msgstr ""
 
-#: siglist.c:110
+#: siglist.c:111
 msgid "Terminated"
 msgstr ""
 
-#: siglist.c:114
+#: siglist.c:115
 msgid "Urgent IO condition"
 msgstr ""
 
-#: siglist.c:118
+#: siglist.c:119
 msgid "Stopped (signal)"
 msgstr ""
 
-#: siglist.c:126
+#: siglist.c:127
 msgid "Continue"
 msgstr ""
 
-#: siglist.c:134
+#: siglist.c:135
 msgid "Child death or stop"
 msgstr ""
 
-#: siglist.c:138
+#: siglist.c:139
 msgid "Stopped (tty input)"
 msgstr ""
 
-#: siglist.c:142
+#: siglist.c:143
 msgid "Stopped (tty output)"
 msgstr ""
 
-#: siglist.c:146
+#: siglist.c:147
 msgid "I/O ready"
 msgstr ""
 
-#: siglist.c:150
+#: siglist.c:151
 msgid "CPU limit"
 msgstr ""
 
-#: siglist.c:154
+#: siglist.c:155
 msgid "File limit"
 msgstr ""
 
-#: siglist.c:158
+#: siglist.c:159
 msgid "Alarm (virtual)"
 msgstr ""
 
-#: siglist.c:162
+#: siglist.c:163
 msgid "Alarm (profile)"
 msgstr ""
 
-#: siglist.c:166
+#: siglist.c:167
 msgid "Window changed"
 msgstr ""
 
-#: siglist.c:170
+#: siglist.c:171
 msgid "Record lock"
 msgstr ""
 
-#: siglist.c:174
+#: siglist.c:175
 msgid "User signal 1"
 msgstr ""
 
-#: siglist.c:178
+#: siglist.c:179
 msgid "User signal 2"
 msgstr ""
 
-#: siglist.c:182
+#: siglist.c:183
 msgid "HFT input data pending"
 msgstr ""
 
-#: siglist.c:186
+#: siglist.c:187
 msgid "power failure imminent"
 msgstr ""
 
-#: siglist.c:190
+#: siglist.c:191
 msgid "system crash imminent"
 msgstr ""
 
-#: siglist.c:194
+#: siglist.c:195
 msgid "migrate process to another CPU"
 msgstr ""
 
-#: siglist.c:198
+#: siglist.c:199
 msgid "programming error"
 msgstr ""
 
-#: siglist.c:202
+#: siglist.c:203
 msgid "HFT monitor mode granted"
 msgstr ""
 
-#: siglist.c:206
+#: siglist.c:207
 msgid "HFT monitor mode retracted"
 msgstr ""
 
-#: siglist.c:210
+#: siglist.c:211
 msgid "HFT sound sequence has completed"
 msgstr ""
 
-#: siglist.c:214
+#: siglist.c:215
 msgid "Information request"
 msgstr ""
 
-#: siglist.c:222 siglist.c:224
+#: siglist.c:223 siglist.c:225
 #, c-format
 msgid "Unknown Signal #%d"
 msgstr ""
 
-#: subst.c:1476 subst.c:1666
+#: subst.c:1480 subst.c:1670
 #, c-format
 msgid "bad substitution: no closing `%s' in %s"
 msgstr ""
 
-#: subst.c:3281
+#: subst.c:3307
 #, c-format
 msgid "%s: cannot assign list to array member"
 msgstr ""
 
-#: subst.c:5910 subst.c:5926
+#: subst.c:6048 subst.c:6064
 msgid "cannot make pipe for process substitution"
 msgstr ""
 
-#: subst.c:5985
+#: subst.c:6124
 msgid "cannot make child for process substitution"
 msgstr ""
 
-#: subst.c:6059
+#: subst.c:6198
 #, c-format
 msgid "cannot open named pipe %s for reading"
 msgstr ""
 
-#: subst.c:6061
+#: subst.c:6200
 #, c-format
 msgid "cannot open named pipe %s for writing"
 msgstr ""
 
-#: subst.c:6084
+#: subst.c:6223
 #, c-format
 msgid "cannot duplicate named pipe %s as fd %d"
 msgstr ""
 
-#: subst.c:6213
+#: subst.c:6370
 msgid "command substitution: ignored null byte in input"
 msgstr ""
 
-#: subst.c:6353
+#: subst.c:6533
 msgid "cannot make pipe for command substitution"
 msgstr ""
 
-#: subst.c:6397
+#: subst.c:6580
 msgid "cannot make child for command substitution"
 msgstr ""
 
-#: subst.c:6423
+#: subst.c:6613
 msgid "command_substitute: cannot duplicate pipe as fd 1"
 msgstr ""
 
-#: subst.c:6883 subst.c:9952
+#: subst.c:7082 subst.c:10252
 #, c-format
 msgid "%s: invalid variable name for name reference"
 msgstr ""
 
-#: subst.c:6979 subst.c:6997 subst.c:7169
+#: subst.c:7178 subst.c:7196 subst.c:7369
 #, c-format
 msgid "%s: invalid indirect expansion"
 msgstr ""
 
-#: subst.c:7013 subst.c:7177
+#: subst.c:7212 subst.c:7377
 #, c-format
 msgid "%s: invalid variable name"
 msgstr ""
 
-#: subst.c:7256
+#: subst.c:7478
 #, c-format
 msgid "%s: parameter not set"
 msgstr ""
 
-#: subst.c:7258
+#: subst.c:7480
 #, c-format
 msgid "%s: parameter null or not set"
 msgstr ""
 
-#: subst.c:7503 subst.c:7518
+#: subst.c:7727 subst.c:7742
 #, c-format
 msgid "%s: substring expression < 0"
 msgstr ""
 
-#: subst.c:9281 subst.c:9302
+#: subst.c:9560 subst.c:9587
 #, c-format
 msgid "%s: bad substitution"
 msgstr ""
 
-#: subst.c:9390
+#: subst.c:9678
 #, c-format
 msgid "$%s: cannot assign in this way"
 msgstr ""
 
-#: subst.c:9814
+#: subst.c:10111
 msgid ""
 "future versions of the shell will force evaluation as an arithmetic "
 "substitution"
 msgstr ""
 
-#: subst.c:10367
+#: subst.c:10795
 #, c-format
 msgid "bad substitution: no closing \"`\" in %s"
 msgstr ""
 
-#: subst.c:11434
+#: subst.c:11874
 #, c-format
 msgid "no match: %s"
 msgstr ""
@@ -1983,21 +1993,21 @@ msgstr ""
 msgid "`)' expected, found %s"
 msgstr ""
 
-#: test.c:466 test.c:799
+#: test.c:469 test.c:814
 #, c-format
 msgid "%s: binary operator expected"
 msgstr ""
 
-#: test.c:756 test.c:759
+#: test.c:771 test.c:774
 #, c-format
 msgid "%s: unary operator expected"
 msgstr ""
 
-#: test.c:881
+#: test.c:896
 msgid "missing `]'"
 msgstr ""
 
-#: test.c:899
+#: test.c:914
 #, c-format
 msgid "syntax error: `%s' unexpected"
 msgstr ""
@@ -2006,99 +2016,104 @@ msgstr ""
 msgid "invalid signal number"
 msgstr ""
 
-#: trap.c:325
+#: trap.c:323
 #, c-format
 msgid "trap handler: maximum trap handler level exceeded (%d)"
 msgstr ""
 
-#: trap.c:414
+#: trap.c:412
 #, c-format
 msgid "run_pending_traps: bad value in trap_list[%d]: %p"
 msgstr ""
 
-#: trap.c:418
+#: trap.c:416
 #, c-format
 msgid ""
 "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
 msgstr ""
 
-#: trap.c:487
+#: trap.c:509
 #, c-format
 msgid "trap_handler: bad signal %d"
 msgstr ""
 
-#: variables.c:421
+#: variables.c:424
 #, c-format
 msgid "error importing function definition for `%s'"
 msgstr ""
 
-#: variables.c:833
+#: variables.c:838
 #, c-format
 msgid "shell level (%d) too high, resetting to 1"
 msgstr ""
 
-#: variables.c:2674
+#: variables.c:2642
 msgid "make_local_variable: no function context at current scope"
 msgstr ""
 
-#: variables.c:2693
+#: variables.c:2661
 #, c-format
 msgid "%s: variable may not be assigned value"
 msgstr ""
 
-#: variables.c:3475
+#: variables.c:2818 variables.c:2874
+#, c-format
+msgid "%s: cannot inherit value from incompatible type"
+msgstr ""
+
+#: variables.c:3459
 #, c-format
 msgid "%s: assigning integer to name reference"
 msgstr ""
 
-#: variables.c:4404
+#: variables.c:4390
 msgid "all_local_variables: no function context at current scope"
 msgstr ""
 
-#: variables.c:4771
+#: variables.c:4757
 #, c-format
 msgid "%s has null exportstr"
 msgstr ""
 
-#: variables.c:4776 variables.c:4785
+#: variables.c:4762 variables.c:4771
 #, c-format
 msgid "invalid character %d in exportstr for %s"
 msgstr ""
 
-#: variables.c:4791
+#: variables.c:4777
 #, c-format
 msgid "no `=' in exportstr for %s"
 msgstr ""
 
-#: variables.c:5331
+#: variables.c:5317
 msgid "pop_var_context: head of shell_variables not a function context"
 msgstr ""
 
-#: variables.c:5344
+#: variables.c:5330
 msgid "pop_var_context: no global_variables context"
 msgstr ""
 
-#: variables.c:5424
+#: variables.c:5410
 msgid "pop_scope: head of shell_variables not a temporary environment scope"
 msgstr ""
 
-#: variables.c:6387
+#: variables.c:6400
 #, c-format
 msgid "%s: %s: cannot open as FILE"
 msgstr ""
 
-#: variables.c:6392
+#: variables.c:6405
 #, c-format
 msgid "%s: %s: invalid value for trace file descriptor"
 msgstr ""
 
-#: variables.c:6437
+#: variables.c:6450
 #, c-format
 msgid "%s: %s: compatibility value out of range"
 msgstr ""
 
 #: version.c:46 version2.c:46
-msgid "Copyright (C) 2020 Free Software Foundation, Inc."
+msgid "Copyright (C) 2022 Free Software Foundation, Inc."
 msgstr ""
 
 #: version.c:47 version2.c:47
@@ -2183,11 +2198,15 @@ msgid "command [-pVv] command [arg ...]"
 msgstr ""
 
 #: builtins.c:78
-msgid "declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]"
+msgid ""
+"declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] "
+"[name ...]"
 msgstr ""
 
 #: builtins.c:80
-msgid "typeset [-aAfFgiIlnrtux] [-p] name[=value] ..."
+msgid ""
+"typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] "
+"[name ...]"
 msgstr ""
 
 #: builtins.c:82
@@ -2281,7 +2300,7 @@ msgid "return [n]"
 msgstr ""
 
 #: builtins.c:142
-msgid "set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]"
+msgid "set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]"
 msgstr ""
 
 #: builtins.c:144
@@ -2329,7 +2348,7 @@ msgid "type [-afptP] name [name ...]"
 msgstr ""
 
 #: builtins.c:171
-msgid "ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]"
+msgid "ulimit [-SHabcdefiklmnpqrstuvxPRT] [limit]"
 msgstr ""
 
 #: builtins.c:174
@@ -2371,11 +2390,11 @@ msgid ""
 msgstr ""
 
 #: builtins.c:196
-msgid "while COMMANDS; do COMMANDS; done"
+msgid "while COMMANDS; do COMMANDS-2; done"
 msgstr ""
 
 #: builtins.c:198
-msgid "until COMMANDS; do COMMANDS; done"
+msgid "until COMMANDS; do COMMANDS-2; done"
 msgstr ""
 
 #: builtins.c:200
@@ -3179,7 +3198,9 @@ msgid ""
 "    word to the second NAME, and so on, with any leftover words assigned to\n"
 "    the last NAME.  Only the characters found in $IFS are recognized as "
 "word\n"
-"    delimiters.\n"
+"    delimiters. By default, the backslash character escapes delimiter "
+"characters\n"
+"    and newline.\n"
 "    \n"
 "    If no NAMEs are supplied, the line read is stored in the REPLY "
 "variable.\n"
@@ -3220,7 +3241,7 @@ msgid ""
 "    or an invalid file descriptor is supplied as the argument to -u."
 msgstr ""
 
-#: builtins.c:1041
+#: builtins.c:1042
 msgid ""
 "Return from a shell function.\n"
 "    \n"
@@ -3232,7 +3253,7 @@ msgid ""
 "    Returns N, or failure if the shell is not executing a function or script."
 msgstr ""
 
-#: builtins.c:1054
+#: builtins.c:1055
 msgid ""
 "Set or unset values of shell options and positional parameters.\n"
 "    \n"
@@ -3318,7 +3339,7 @@ msgid ""
 "    Returns success unless an invalid option is given."
 msgstr ""
 
-#: builtins.c:1139
+#: builtins.c:1140
 msgid ""
 "Unset values and attributes of shell variables and functions.\n"
 "    \n"
@@ -3340,7 +3361,7 @@ msgid ""
 "    Returns success unless an invalid option is given or a NAME is read-only."
 msgstr ""
 
-#: builtins.c:1161
+#: builtins.c:1162
 msgid ""
 "Set export attribute for shell variables.\n"
 "    \n"
@@ -3359,7 +3380,7 @@ msgid ""
 "    Returns success unless an invalid option is given or NAME is invalid."
 msgstr ""
 
-#: builtins.c:1180
+#: builtins.c:1181
 msgid ""
 "Mark shell variables as unchangeable.\n"
 "    \n"
@@ -3380,7 +3401,7 @@ msgid ""
 "    Returns success unless an invalid option is given or NAME is invalid."
 msgstr ""
 
-#: builtins.c:1202
+#: builtins.c:1203
 msgid ""
 "Shift positional parameters.\n"
 "    \n"
@@ -3391,7 +3412,7 @@ msgid ""
 "    Returns success unless N is negative or greater than $#."
 msgstr ""
 
-#: builtins.c:1214 builtins.c:1229
+#: builtins.c:1215 builtins.c:1230
 msgid ""
 "Execute commands from a file in the current shell.\n"
 "    \n"
@@ -3405,7 +3426,7 @@ msgid ""
 "    FILENAME cannot be read."
 msgstr ""
 
-#: builtins.c:1245
+#: builtins.c:1246
 msgid ""
 "Suspend shell execution.\n"
 "    \n"
@@ -3419,7 +3440,7 @@ msgid ""
 "    Returns success unless job control is not enabled or an error occurs."
 msgstr ""
 
-#: builtins.c:1261
+#: builtins.c:1262
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -3502,7 +3523,7 @@ msgid ""
 "    false or an invalid argument is given."
 msgstr ""
 
-#: builtins.c:1343
+#: builtins.c:1344
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -3510,7 +3531,7 @@ msgid ""
 "    be a literal `]', to match the opening `['."
 msgstr ""
 
-#: builtins.c:1352
+#: builtins.c:1353
 msgid ""
 "Display process times.\n"
 "    \n"
@@ -3522,7 +3543,7 @@ msgid ""
 "    Always succeeds."
 msgstr ""
 
-#: builtins.c:1364
+#: builtins.c:1365
 msgid ""
 "Trap signals and other events.\n"
 "    \n"
@@ -3566,7 +3587,7 @@ msgid ""
 "given."
 msgstr ""
 
-#: builtins.c:1400
+#: builtins.c:1401
 msgid ""
 "Display information about command type.\n"
 "    \n"
@@ -3596,7 +3617,7 @@ msgid ""
 "found."
 msgstr ""
 
-#: builtins.c:1431
+#: builtins.c:1432
 msgid ""
 "Modify shell resource limits.\n"
 "    \n"
@@ -3646,7 +3667,7 @@ msgid ""
 "    Returns success unless an invalid option is supplied or an error occurs."
 msgstr ""
 
-#: builtins.c:1482
+#: builtins.c:1483
 msgid ""
 "Display or set file mode mask.\n"
 "    \n"
@@ -3664,7 +3685,7 @@ msgid ""
 "    Returns success unless MODE is invalid or an invalid option is given."
 msgstr ""
 
-#: builtins.c:1502
+#: builtins.c:1503
 msgid ""
 "Wait for job completion and return exit status.\n"
 "    \n"
@@ -3696,7 +3717,7 @@ msgid ""
 "    children."
 msgstr ""
 
-#: builtins.c:1533
+#: builtins.c:1534
 msgid ""
 "Wait for process completion and return exit status.\n"
 "    \n"
@@ -3711,7 +3732,7 @@ msgid ""
 "    option is given."
 msgstr ""
 
-#: builtins.c:1548
+#: builtins.c:1549
 msgid ""
 "Execute commands for each member in a list.\n"
 "    \n"
@@ -3724,7 +3745,7 @@ msgid ""
 "    Returns the status of the last command executed."
 msgstr ""
 
-#: builtins.c:1562
+#: builtins.c:1563
 msgid ""
 "Arithmetic for loop.\n"
 "    \n"
@@ -3741,7 +3762,7 @@ msgid ""
 "    Returns the status of the last command executed."
 msgstr ""
 
-#: builtins.c:1580
+#: builtins.c:1581
 msgid ""
 "Select words from a list and execute commands.\n"
 "    \n"
@@ -3761,7 +3782,7 @@ msgid ""
 "    Returns the status of the last command executed."
 msgstr ""
 
-#: builtins.c:1601
+#: builtins.c:1602
 msgid ""
 "Report time consumed by pipeline's execution.\n"
 "    \n"
@@ -3777,7 +3798,7 @@ msgid ""
 "    The return status is the return status of PIPELINE."
 msgstr ""
 
-#: builtins.c:1618
+#: builtins.c:1619
 msgid ""
 "Execute commands based on pattern matching.\n"
 "    \n"
@@ -3788,7 +3809,7 @@ msgid ""
 "    Returns the status of the last command executed."
 msgstr ""
 
-#: builtins.c:1630
+#: builtins.c:1631
 msgid ""
 "Execute commands based on conditional.\n"
 "    \n"
@@ -3809,29 +3830,31 @@ msgid ""
 "    Returns the status of the last command executed."
 msgstr ""
 
-#: builtins.c:1647
+#: builtins.c:1648
 msgid ""
 "Execute commands as long as a test succeeds.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `while' COMMANDS has an exit status of zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS "
+"has\n"
+"    an exit status of zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
 
-#: builtins.c:1659
+#: builtins.c:1660
 msgid ""
 "Execute commands as long as a test does not succeed.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `until' COMMANDS has an exit status which is not zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS "
+"has\n"
+"    an exit status which is not zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
 
-#: builtins.c:1671
+#: builtins.c:1672
 msgid ""
 "Create a coprocess named NAME.\n"
 "    \n"
@@ -3844,7 +3867,7 @@ msgid ""
 "    The coproc command returns an exit status of 0."
 msgstr ""
 
-#: builtins.c:1685
+#: builtins.c:1686
 msgid ""
 "Define shell function.\n"
 "    \n"
@@ -3858,7 +3881,7 @@ msgid ""
 "    Returns success unless NAME is readonly."
 msgstr ""
 
-#: builtins.c:1699
+#: builtins.c:1700
 msgid ""
 "Group commands as a unit.\n"
 "    \n"
@@ -3869,7 +3892,7 @@ msgid ""
 "    Returns the status of the last command executed."
 msgstr ""
 
-#: builtins.c:1711
+#: builtins.c:1712
 msgid ""
 "Resume job in foreground.\n"
 "    \n"
@@ -3883,7 +3906,7 @@ msgid ""
 "    Returns the status of the resumed job."
 msgstr ""
 
-#: builtins.c:1726
+#: builtins.c:1727
 msgid ""
 "Evaluate arithmetic expression.\n"
 "    \n"
@@ -3894,7 +3917,7 @@ msgid ""
 "    Returns 1 if EXPRESSION evaluates to 0; returns 0 otherwise."
 msgstr ""
 
-#: builtins.c:1738
+#: builtins.c:1739
 msgid ""
 "Execute conditional command.\n"
 "    \n"
@@ -3922,7 +3945,7 @@ msgid ""
 "    0 or 1 depending on value of EXPRESSION."
 msgstr ""
 
-#: builtins.c:1764
+#: builtins.c:1765
 msgid ""
 "Common shell variable names and usage.\n"
 "    \n"
@@ -3976,7 +3999,7 @@ msgid ""
 "    \t\tcommands should be saved on the history list.\n"
 msgstr ""
 
-#: builtins.c:1821
+#: builtins.c:1822
 msgid ""
 "Add directories to stack.\n"
 "    \n"
@@ -4007,7 +4030,7 @@ msgid ""
 "    change fails."
 msgstr ""
 
-#: builtins.c:1855
+#: builtins.c:1856
 msgid ""
 "Remove directories from stack.\n"
 "    \n"
@@ -4034,7 +4057,7 @@ msgid ""
 "    change fails."
 msgstr ""
 
-#: builtins.c:1885
+#: builtins.c:1886
 msgid ""
 "Display directory stack.\n"
 "    \n"
@@ -4063,7 +4086,7 @@ msgid ""
 "    Returns success unless an invalid option is supplied or an error occurs."
 msgstr ""
 
-#: builtins.c:1916
+#: builtins.c:1917
 msgid ""
 "Set and unset shell options.\n"
 "    \n"
@@ -4083,7 +4106,7 @@ msgid ""
 "    given or OPTNAME is disabled."
 msgstr ""
 
-#: builtins.c:1937
+#: builtins.c:1938
 msgid ""
 "Formats and prints ARGUMENTS under control of the FORMAT.\n"
 "    \n"
@@ -4106,6 +4129,8 @@ msgid ""
 "    \n"
 "      %b\texpand backslash escape sequences in the corresponding argument\n"
 "      %q\tquote the argument in a way that can be reused as shell input\n"
+"      %Q\tlike %q, but apply any precision to the unquoted argument before\n"
+"    \t\tquoting\n"
 "      %(fmt)T\toutput the date-time string resulting from using FMT as a "
 "format\n"
 "    \t        string for strftime(3)\n"
@@ -4122,7 +4147,7 @@ msgid ""
 "    error occurs."
 msgstr ""
 
-#: builtins.c:1971
+#: builtins.c:1974
 msgid ""
 "Specify how arguments are to be completed by Readline.\n"
 "    \n"
@@ -4153,7 +4178,7 @@ msgid ""
 "    Returns success unless an invalid option is supplied or an error occurs."
 msgstr ""
 
-#: builtins.c:2001
+#: builtins.c:2004
 msgid ""
 "Display possible completions depending on the options.\n"
 "    \n"
@@ -4166,7 +4191,7 @@ msgid ""
 "    Returns success unless an invalid option is supplied or an error occurs."
 msgstr ""
 
-#: builtins.c:2016
+#: builtins.c:2019
 msgid ""
 "Modify or display completion options.\n"
 "    \n"
@@ -4198,7 +4223,7 @@ msgid ""
 "    have a completion specification defined."
 msgstr ""
 
-#: builtins.c:2047
+#: builtins.c:2050
 msgid ""
 "Read lines from the standard input into an indexed array variable.\n"
 "    \n"
@@ -4240,7 +4265,7 @@ msgid ""
 "    not an indexed array."
 msgstr ""
 
-#: builtins.c:2083
+#: builtins.c:2086
 msgid ""
 "Read lines from a file into an array variable.\n"
 "    \n"
index b8337414c5d72d5c60c8afef678143fd0cd2d0e9..8638773e11f4f409518252d786f787db6c67f7e6 100644 (file)
Binary files a/po/bg.gmo and b/po/bg.gmo differ
index 9e876f4912922e29508bd426947d8503f7fbf9f0..68331a5877fc2f7a92c7907c65be11f65218f9ba 100644 (file)
--- a/po/bg.po
+++ b/po/bg.po
@@ -1,14 +1,14 @@
 # Bulgarian translation of bash po-file.
-# Copyright (C) 2007, 2010, 2012, 2013, 2014, 2015, 2016, 2018, 2020 Free Software Foundation, Inc.
+# Copyright (C) 2007, 2010, 2012, 2013, 2014, 2015, 2016, 2018, 2020, 2022 Free Software Foundation, Inc.
 # This file is distributed under the same license as the bash package.
-# Alexander Shopov <ash@kambanaria.org>, 2007, 2010, 2012, 2013, 2014, 2015, 2016, 2018, 2020.
+# Alexander Shopov <ash@kambanaria.org>, 2007, 2010, 2012, 2013, 2014, 2015, 2016, 2018, 2020, 2022.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: bash-5.1\n"
+"Project-Id-Version: bash-5.2-rc1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-11-28 12:51-0500\n"
-"PO-Revision-Date: 2020-12-12 16:27+0100\n"
+"POT-Creation-Date: 2022-01-11 14:50-0500\n"
+"PO-Revision-Date: 2022-06-18 14:33+0200\n"
 "Last-Translator: Alexander Shopov <ash@kambanaria.org>\n"
 "Language-Team: Bulgarian <dict@ludost.net>\n"
 "Language: bg\n"
@@ -22,59 +22,54 @@ msgstr ""
 msgid "bad array subscript"
 msgstr "грешен индекс на масив"
 
-#: arrayfunc.c:421 builtins/declare.def:638 variables.c:2274 variables.c:2300
-#: variables.c:3133
+#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268
+#: variables.c:3101
 #, c-format
 msgid "%s: removing nameref attribute"
 msgstr "%s: изтриване на атрибута за указател от променливата"
 
-#: arrayfunc.c:446 builtins/declare.def:851
+#: arrayfunc.c:496 builtins/declare.def:868
 #, c-format
 msgid "%s: cannot convert indexed to associative array"
 msgstr "%s: масивът не може да бъде преобразуван към речник"
 
-#: arrayfunc.c:700
-#, c-format
-msgid "%s: invalid associative array key"
-msgstr "%s: грешно име на ключ в речник"
-
-#: arrayfunc.c:702
+#: arrayfunc.c:777
 #, c-format
 msgid "%s: cannot assign to non-numeric index"
 msgstr "%s: не може да се присвоява на нецифров индекс"
 
-#: arrayfunc.c:747
+#: arrayfunc.c:822
 #, c-format
 msgid "%s: %s: must use subscript when assigning associative array"
 msgstr "%s: %s: при присвояване към речник трябва да се използва индекс"
 
-#: bashhist.c:452
+#: bashhist.c:455
 #, c-format
 msgid "%s: cannot create: %s"
 msgstr "%s: не може да се създаде: %s"
 
-#: bashline.c:4310
+#: bashline.c:4479
 msgid "bash_execute_unix_command: cannot find keymap for command"
 msgstr ""
 "изпълнение на команда на Юникс от bash: не може да се открие подредбата на\n"
 "функциите на клавишите за командата"
 
-#: bashline.c:4459
+#: bashline.c:4637
 #, c-format
 msgid "%s: first non-whitespace character is not `\"'"
 msgstr "%s: първият непразен знак не е „\"“"
 
-#: bashline.c:4488
+#: bashline.c:4666
 #, c-format
 msgid "no closing `%c' in %s"
 msgstr "в %2$s липсва затварящ знак „%1$c“"
 
-#: bashline.c:4519
+#: bashline.c:4697
 #, c-format
 msgid "%s: missing colon separator"
 msgstr "%s: разделителят „:“ липсва"
 
-#: bashline.c:4555
+#: bashline.c:4733
 #, c-format
 msgid "`%s': cannot unbind in command keymap"
 msgstr "„%s“: неуспешно премахне на присвояване в подредбата на функциите на клавишите"
@@ -94,7 +89,7 @@ msgstr "заместване на изразите с фигурни скоби:
 msgid "brace expansion: failed to allocate memory for `%s'"
 msgstr "заместване на изразите с фигурни скоби: неуспешно заделяне на памет за „%s“"
 
-#: builtins/alias.def:131 variables.c:1844
+#: builtins/alias.def:131 variables.c:1817
 #, c-format
 msgid "`%s': invalid alias name"
 msgstr "„%s“: грешно име на синоним"
@@ -165,7 +160,7 @@ msgstr ""
 msgid "HOME not set"
 msgstr "Променливата „HOME“ не е зададена"
 
-#: builtins/cd.def:335 builtins/common.c:161 test.c:901
+#: builtins/cd.def:335 builtins/common.c:161 test.c:916
 msgid "too many arguments"
 msgstr "прекалено много аргументи"
 
@@ -192,7 +187,7 @@ msgstr "предупреждение: "
 msgid "%s: usage: "
 msgstr "%s: употреба: "
 
-#: builtins/common.c:193 shell.c:516 shell.c:844
+#: builtins/common.c:193 shell.c:524 shell.c:866
 #, c-format
 msgid "%s: option requires an argument"
 msgstr "%s: опцията изисква аргумент"
@@ -207,7 +202,7 @@ msgstr "%s: изисква се числов аргумент"
 msgid "%s: not found"
 msgstr "%s: не е открит"
 
-#: builtins/common.c:216 shell.c:857
+#: builtins/common.c:216 shell.c:879
 #, c-format
 msgid "%s: invalid option"
 msgstr "%s: грешна опция"
@@ -217,7 +212,7 @@ msgstr "%s: грешна опция"
 msgid "%s: invalid option name"
 msgstr "%s: грешно име на опция"
 
-#: builtins/common.c:230 execute_cmd.c:2373 general.c:368 general.c:373
+#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373
 #, c-format
 msgid "`%s': not a valid identifier"
 msgstr "„%s“: грешен идентификатор"
@@ -230,7 +225,7 @@ msgstr "грешно осмично число"
 msgid "invalid hex number"
 msgstr "грешно шестнайсетично число"
 
-#: builtins/common.c:244 expr.c:1569
+#: builtins/common.c:244 expr.c:1574
 msgid "invalid number"
 msgstr "грешно число"
 
@@ -244,88 +239,93 @@ msgstr "%s: грешно указване на сигнал"
 msgid "`%s': not a pid or valid job spec"
 msgstr "„%s“: грешен идентификатор на процес или задача"
 
-#: builtins/common.c:266 error.c:510
+#: builtins/common.c:266 error.c:536
 #, c-format
 msgid "%s: readonly variable"
 msgstr "%s: променлива с права само за четене"
 
-#: builtins/common.c:274
+#: builtins/common.c:273
+#, c-format
+msgid "%s: cannot assign"
+msgstr "%s: не може да се присвои"
+
+#: builtins/common.c:281
 #, c-format
 msgid "%s: %s out of range"
 msgstr "%s: %s е извън допустимия диапазон"
 
-#: builtins/common.c:274 builtins/common.c:276
+#: builtins/common.c:281 builtins/common.c:283
 msgid "argument"
 msgstr "аргументът"
 
-#: builtins/common.c:276
+#: builtins/common.c:283
 #, c-format
 msgid "%s out of range"
 msgstr "%s е извън допустимия диапазон"
 
-#: builtins/common.c:284
+#: builtins/common.c:291
 #, c-format
 msgid "%s: no such job"
 msgstr "%s: няма такава задача"
 
-#: builtins/common.c:292
+#: builtins/common.c:299
 #, c-format
 msgid "%s: no job control"
 msgstr "%s: няма управление на задачите"
 
-#: builtins/common.c:294
+#: builtins/common.c:301
 msgid "no job control"
 msgstr "няма управление на задачите"
 
-#: builtins/common.c:304
+#: builtins/common.c:311
 #, c-format
 msgid "%s: restricted"
 msgstr "%s: ограничена обвивка"
 
-#: builtins/common.c:306
+#: builtins/common.c:313
 msgid "restricted"
 msgstr "ограничена обвивка"
 
-#: builtins/common.c:314
+#: builtins/common.c:321
 #, c-format
 msgid "%s: not a shell builtin"
 msgstr "%s: не е команда вградена в обвивката"
 
-#: builtins/common.c:323
+#: builtins/common.c:330
 #, c-format
 msgid "write error: %s"
 msgstr "грешка при запис: %s"
 
-#: builtins/common.c:331
+#: builtins/common.c:338
 #, c-format
 msgid "error setting terminal attributes: %s"
 msgstr "грешка при задаване на атрибутите на терминала: %s"
 
-#: builtins/common.c:333
+#: builtins/common.c:340
 #, c-format
 msgid "error getting terminal attributes: %s"
 msgstr "грешка при получаване на атрибутите на терминала: %s"
 
-#: builtins/common.c:635
+#: builtins/common.c:642
 #, c-format
 msgid "%s: error retrieving current directory: %s: %s\n"
 msgstr "%s: грешка при получаване на текущата директория: %s: %s\n"
 
-#: builtins/common.c:701 builtins/common.c:703
+#: builtins/common.c:708 builtins/common.c:710
 #, c-format
 msgid "%s: ambiguous job spec"
 msgstr "%s: нееднозначно указана задача"
 
-#: builtins/common.c:964
+#: builtins/common.c:971
 msgid "help not available in this version"
 msgstr "помощта не е включена в тази версия"
 
-#: builtins/common.c:1008 builtins/set.def:953 variables.c:3839
+#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825
 #, c-format
 msgid "%s: cannot unset: readonly %s"
 msgstr "%s: не може да се премахне: %s е само за четене"
 
-#: builtins/common.c:1013 builtins/set.def:932 variables.c:3844
+#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830
 #, c-format
 msgid "%s: cannot unset"
 msgstr "%s: не може да се премахне"
@@ -335,108 +335,108 @@ msgstr "%s: не може да се премахне"
 msgid "%s: invalid action name"
 msgstr "%s: грешно име на действие"
 
-#: builtins/complete.def:486 builtins/complete.def:634
-#: builtins/complete.def:865
+#: builtins/complete.def:486 builtins/complete.def:642
+#: builtins/complete.def:873
 #, c-format
 msgid "%s: no completion specification"
 msgstr "%s: не е указано дописване"
 
-#: builtins/complete.def:688
+#: builtins/complete.def:696
 msgid "warning: -F option may not work as you expect"
 msgstr "предупреждение: опцията „-F“ може да не работи според очакванията ви"
 
-#: builtins/complete.def:690
+#: builtins/complete.def:698
 msgid "warning: -C option may not work as you expect"
 msgstr "предупреждение: опцията „-C“ може да не работи според очакванията ви"
 
-#: builtins/complete.def:838
+#: builtins/complete.def:846
 msgid "not currently executing completion function"
 msgstr "в момента не се изпълнява функция за дописване"
 
-#: builtins/declare.def:134
+#: builtins/declare.def:137
 msgid "can only be used in a function"
 msgstr "може да се използва само във функция"
 
-#: builtins/declare.def:363 builtins/declare.def:756
+#: builtins/declare.def:437
+msgid "cannot use `-f' to make functions"
+msgstr "„-f“ не може да се използва за създаването на функции"
+
+#: builtins/declare.def:464 execute_cmd.c:6132
+#, c-format
+msgid "%s: readonly function"
+msgstr "%s: функция с права само за четене"
+
+#: builtins/declare.def:521 builtins/declare.def:804
 #, c-format
 msgid "%s: reference variable cannot be an array"
 msgstr "%s: променливата-указател не може да е масив"
 
-#: builtins/declare.def:374 variables.c:3385
+#: builtins/declare.def:532 variables.c:3359
 #, c-format
 msgid "%s: nameref variable self references not allowed"
 msgstr "%s: променливата-указател не може да сочи към себе си"
 
-#: builtins/declare.def:379 variables.c:2104 variables.c:3304 variables.c:3312
-#: variables.c:3382
+#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286
+#: variables.c:3356
 #, c-format
 msgid "%s: circular name reference"
 msgstr "%s: цикъл в променливите-указатели"
 
-#: builtins/declare.def:384 builtins/declare.def:762 builtins/declare.def:773
+#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820
 #, c-format
 msgid "`%s': invalid variable name for name reference"
 msgstr "„%s“: неправилно име за променлива-указател"
 
-#: builtins/declare.def:514
-msgid "cannot use `-f' to make functions"
-msgstr "„-f“ не може да се използва за създаването на функции"
-
-#: builtins/declare.def:526 execute_cmd.c:5986
-#, c-format
-msgid "%s: readonly function"
-msgstr "%s: функция с права само за четене"
-
-#: builtins/declare.def:824
-#, c-format
-msgid "%s: quoted compound array assignment deprecated"
-msgstr "%s: съставното присвояване на масив чрез цитат е остаряло"
-
-#: builtins/declare.def:838
+#: builtins/declare.def:856
 #, c-format
 msgid "%s: cannot destroy array variables in this way"
 msgstr "%s: променливите за масиви не могат да се унищожават така"
 
-#: builtins/declare.def:845 builtins/read.def:815
+#: builtins/declare.def:862 builtins/read.def:887
 #, c-format
 msgid "%s: cannot convert associative to indexed array"
 msgstr "%s: речник не може да се преобразува в масив"
 
-#: builtins/enable.def:143 builtins/enable.def:151
+#: builtins/declare.def:891
+#, c-format
+msgid "%s: quoted compound array assignment deprecated"
+msgstr "%s: съставното присвояване на масив чрез цитат е остаряло"
+
+#: builtins/enable.def:145 builtins/enable.def:153
 msgid "dynamic loading not available"
 msgstr "липсва възможност за динамично зареждане"
 
-#: builtins/enable.def:343
+#: builtins/enable.def:376
 #, c-format
 msgid "cannot open shared object %s: %s"
 msgstr "споделеният обект „%s“ не може да бъде зареден: %s"
 
-#: builtins/enable.def:371
+#: builtins/enable.def:405
 #, c-format
 msgid "cannot find %s in shared object %s: %s"
 msgstr "„%s“ не може да се открие в споделения обект %s: %s"
 
-#: builtins/enable.def:388
+#: builtins/enable.def:422
 #, c-format
 msgid "%s: dynamic builtin already loaded"
 msgstr "%s: вградената команда вече е динамично заредена"
 
-#: builtins/enable.def:392
+#: builtins/enable.def:426
 #, c-format
 msgid "load function for %s returns failure (%d): not loaded"
 msgstr "зареждащата функция за „%s“ върна грешка (%d): не е зареден"
 
-#: builtins/enable.def:517
+#: builtins/enable.def:551
 #, c-format
 msgid "%s: not dynamically loaded"
 msgstr "%s: не е зареден динамично"
 
-#: builtins/enable.def:543
+#: builtins/enable.def:577
 #, c-format
 msgid "%s: cannot delete: %s"
 msgstr "%s: не може да се изтрие: %s"
 
-#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5818
+#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959
 #, c-format
 msgid "%s: is a directory"
 msgstr "%s: е директория"
@@ -451,7 +451,7 @@ msgstr "%s: не е обикновен файл"
 msgid "%s: file is too large"
 msgstr "%s: файлът е прекалено голям"
 
-#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1647
+#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673
 #, c-format
 msgid "%s: cannot execute binary file"
 msgstr "%s: двоичният файл не може да бъде изпълнен"
@@ -548,12 +548,12 @@ msgstr ""
 "няма теми в помощта, които да отговарят на „%s“.  Опитайте с\n"
 "„help help“, „man -k %s“ или „info %s“."
 
-#: builtins/help.def:224
+#: builtins/help.def:223
 #, c-format
 msgid "%s: cannot open: %s"
 msgstr "%s: не може да се отвори: %s"
 
-#: builtins/help.def:524
+#: builtins/help.def:523
 #, c-format
 msgid ""
 "These shell commands are defined internally.  Type `help' to see this list.\n"
@@ -573,21 +573,21 @@ msgstr ""
 "Знакът звездичка „*“ до името на команда означава, че тя е изключена.\n"
 "\n"
 
-#: builtins/history.def:155
+#: builtins/history.def:159
 msgid "cannot use more than one of -anrw"
 msgstr "не може да се ползва едновременно повече от една от опциите „-anrw“"
 
-#: builtins/history.def:188 builtins/history.def:198 builtins/history.def:213
-#: builtins/history.def:230 builtins/history.def:242 builtins/history.def:249
+#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215
+#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247
 msgid "history position"
 msgstr "позиция в историята"
 
-#: builtins/history.def:340
+#: builtins/history.def:338
 #, c-format
 msgid "%s: invalid timestamp"
 msgstr "%s: грешна дата с време"
 
-#: builtins/history.def:451
+#: builtins/history.def:449
 #, c-format
 msgid "%s: history expansion failed"
 msgstr "%s: неуспешно заместване чрез историята"
@@ -610,78 +610,78 @@ msgstr "%s: аргументите трябва да са идентификат
 msgid "Unknown error"
 msgstr "Неизвестна грешка"
 
-#: builtins/let.def:97 builtins/let.def:122 expr.c:639 expr.c:657
+#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658
 msgid "expression expected"
 msgstr "очаква се израз"
 
-#: builtins/mapfile.def:178
+#: builtins/mapfile.def:180
 #, c-format
 msgid "%s: not an indexed array"
 msgstr "%s: не е масив"
 
-#: builtins/mapfile.def:271 builtins/read.def:308
+#: builtins/mapfile.def:276 builtins/read.def:336
 #, c-format
 msgid "%s: invalid file descriptor specification"
 msgstr "%s: грешно указване на файловия дескриптор"
 
-#: builtins/mapfile.def:279 builtins/read.def:315
+#: builtins/mapfile.def:284 builtins/read.def:343
 #, c-format
 msgid "%d: invalid file descriptor: %s"
 msgstr "%d: грешен файлов дескриптор: %s"
 
-#: builtins/mapfile.def:288 builtins/mapfile.def:326
+#: builtins/mapfile.def:293 builtins/mapfile.def:331
 #, c-format
 msgid "%s: invalid line count"
 msgstr "%s: грешен номер на ред"
 
-#: builtins/mapfile.def:299
+#: builtins/mapfile.def:304
 #, c-format
 msgid "%s: invalid array origin"
 msgstr "%s: грешен начален индекс за масив"
 
-#: builtins/mapfile.def:316
+#: builtins/mapfile.def:321
 #, c-format
 msgid "%s: invalid callback quantum"
 msgstr "%s: грешно количество редове за обработка"
 
-#: builtins/mapfile.def:349
+#: builtins/mapfile.def:354
 msgid "empty array variable name"
 msgstr "празно име на променлива за масив"
 
-#: builtins/mapfile.def:370
+#: builtins/mapfile.def:375
 msgid "array variable support required"
 msgstr "изисква се поддръжка на променливи за масиви"
 
-#: builtins/printf.def:419
+#: builtins/printf.def:430
 #, c-format
 msgid "`%s': missing format character"
 msgstr "„%s“: липсва форматиращ знак"
 
-#: builtins/printf.def:474
+#: builtins/printf.def:485
 #, c-format
 msgid "`%c': invalid time format specification"
 msgstr "„%c“: грешен формат на времето"
 
-#: builtins/printf.def:676
+#: builtins/printf.def:708
 #, c-format
 msgid "`%c': invalid format character"
 msgstr "„%c“: грешен форматиращ знак"
 
-#: builtins/printf.def:702
+#: builtins/printf.def:734
 #, c-format
 msgid "warning: %s: %s"
 msgstr "предупреждение: %s: %s"
 
-#: builtins/printf.def:788
+#: builtins/printf.def:822
 #, c-format
 msgid "format parsing problem: %s"
 msgstr "неуспешен анализ на форма̀та: %s"
 
-#: builtins/printf.def:885
+#: builtins/printf.def:919
 msgid "missing hex digit for \\x"
 msgstr "липсва шестнадесетична цифра за \\x"
 
-#: builtins/printf.def:900
+#: builtins/printf.def:934
 #, c-format
 msgid "missing unicode digit for \\%c"
 msgstr "липсва цифра за Уникод за \\%c"
@@ -831,12 +831,12 @@ msgstr ""
 "    \n"
 "    Можете да изведете стека на директорията с командата „dirs“."
 
-#: builtins/read.def:280
+#: builtins/read.def:308
 #, c-format
 msgid "%s: invalid timeout specification"
 msgstr "%s: грешно указване на изтичането на времето"
 
-#: builtins/read.def:755
+#: builtins/read.def:827
 #, c-format
 msgid "read error: %d: %s"
 msgstr "грешка при четене: %d: %s"
@@ -849,7 +849,7 @@ msgstr "„return“ е възможен само от функция или и
 msgid "cannot simultaneously unset a function and a variable"
 msgstr "не може едновременно да се премахват задаванията на функция и променлива"
 
-#: builtins/set.def:966
+#: builtins/set.def:969
 #, c-format
 msgid "%s: not an array variable"
 msgstr "%s: не е променлива за масив"
@@ -868,11 +868,11 @@ msgstr "%s: не може да се изнесе"
 msgid "shift count"
 msgstr "брой на преместванията"
 
-#: builtins/shopt.def:310
+#: builtins/shopt.def:323
 msgid "cannot set and unset shell options simultaneously"
 msgstr "не може едновременно да се задават и да се премахват опции на обвивката"
 
-#: builtins/shopt.def:428
+#: builtins/shopt.def:444
 #, c-format
 msgid "%s: invalid shell option name"
 msgstr "%s: грешно име на опция на обвивката"
@@ -939,16 +939,16 @@ msgstr "%s: грешен аргумент за ограничение"
 msgid "`%c': bad command"
 msgstr "„%c“: грешна команда"
 
-#: builtins/ulimit.def:455
+#: builtins/ulimit.def:464
 #, c-format
 msgid "%s: cannot get limit: %s"
 msgstr "%s: ограничението не може да бъде получено: %s"
 
-#: builtins/ulimit.def:481
+#: builtins/ulimit.def:490
 msgid "limit"
 msgstr "ограничение"
 
-#: builtins/ulimit.def:493 builtins/ulimit.def:793
+#: builtins/ulimit.def:502 builtins/ulimit.def:802
 #, c-format
 msgid "%s: cannot modify limit: %s"
 msgstr "%s: ограничението не може да бъде променено: %s"
@@ -967,7 +967,7 @@ msgstr "„%c“: неправилен оператор за описателе
 msgid "`%c': invalid symbolic mode character"
 msgstr "„%c“: неправилен знак за описателен режим"
 
-#: error.c:89 error.c:347 error.c:349 error.c:351
+#: error.c:89 error.c:373 error.c:375 error.c:377
 msgid " line "
 msgstr " ред "
 
@@ -987,96 +987,106 @@ msgstr "Преустановяване…"
 msgid "INFORM: "
 msgstr "ИНФОРМАЦИЯ: "
 
-#: error.c:462
+#: error.c:310
+#, c-format
+msgid "DEBUG warning: "
+msgstr "ПРЕДУПРЕЖДЕНИЕ: "
+
+#: error.c:488
 msgid "unknown command error"
 msgstr "неизвестна грешка в команда"
 
-#: error.c:463
+#: error.c:489
 msgid "bad command type"
 msgstr "грешен вид команда"
 
-#: error.c:464
+#: error.c:490
 msgid "bad connector"
 msgstr "грешна връзка"
 
-#: error.c:465
+#: error.c:491
 msgid "bad jump"
 msgstr "грешен преход"
 
-#: error.c:503
+#: error.c:529
 #, c-format
 msgid "%s: unbound variable"
 msgstr "%s: променлива без стойност"
 
-#: eval.c:242
+#: eval.c:243
 msgid "\atimed out waiting for input: auto-logout\n"
 msgstr "\aвремето за изчакване на вход изтече: следва автоматично излизане от системата\n"
 
-#: execute_cmd.c:537
+#: execute_cmd.c:555
 #, c-format
 msgid "cannot redirect standard input from /dev/null: %s"
 msgstr "стандартният вход не може да бъде пренасочен от „/dev/null“: %s"
 
-#: execute_cmd.c:1297
+#: execute_cmd.c:1317
 #, c-format
 msgid "TIMEFORMAT: `%c': invalid format character"
 msgstr "в променливата $TIMEFORMAT: „%c“: грешен форматиращ знак"
 
-#: execute_cmd.c:2362
+#: execute_cmd.c:2391
 #, c-format
 msgid "execute_coproc: coproc [%d:%s] still exists"
 msgstr "execute_coproc: копроцесът [%d:%s] все още съществува"
 
-#: execute_cmd.c:2486
+#: execute_cmd.c:2524
 msgid "pipe error"
 msgstr "грешка в програмен канал"
 
-#: execute_cmd.c:4793
+#: execute_cmd.c:4923
 #, c-format
 msgid "eval: maximum eval nesting level exceeded (%d)"
 msgstr "eval: превишено е максималното ниво на влагане на „eval“ (%d)"
 
-#: execute_cmd.c:4805
+#: execute_cmd.c:4935
 #, c-format
 msgid "%s: maximum source nesting level exceeded (%d)"
 msgstr "%s: превишено е максималното ниво на влагане на код (%d)"
 
-#: execute_cmd.c:4913
+#: execute_cmd.c:5043
 #, c-format
 msgid "%s: maximum function nesting level exceeded (%d)"
 msgstr "%s: превишено е максималното ниво на влагане на функции (%d)"
 
-#: execute_cmd.c:5467
+#: execute_cmd.c:5598
 #, c-format
 msgid "%s: restricted: cannot specify `/' in command names"
 msgstr "%s: ограничение: в имената на командите не може да присъства знакът „/“"
 
-#: execute_cmd.c:5574
+#: execute_cmd.c:5715
 #, c-format
 msgid "%s: command not found"
 msgstr "%s: командата не е открита"
 
-#: execute_cmd.c:5816
+#: execute_cmd.c:5957
 #, c-format
 msgid "%s: %s"
 msgstr "%s: %s"
 
-#: execute_cmd.c:5854
+#: execute_cmd.c:5975
+#, c-format
+msgid "%s: cannot execute: required file not found"
+msgstr "%s: не може да се изпълни — липсва необходим файл "
+
+#: execute_cmd.c:6000
 #, c-format
 msgid "%s: %s: bad interpreter"
 msgstr "%s: %s: лош интерпретатор"
 
-#: execute_cmd.c:5891
+#: execute_cmd.c:6037
 #, c-format
 msgid "%s: cannot execute binary file: %s"
 msgstr "%s: двоичният файл не може да бъде изпълнен: %s"
 
-#: execute_cmd.c:5977
+#: execute_cmd.c:6123
 #, c-format
 msgid "`%s': is a special builtin"
 msgstr "„%s“ е вградена команда в обвивката"
 
-#: execute_cmd.c:6029
+#: execute_cmd.c:6175
 #, c-format
 msgid "cannot duplicate fd %d to fd %d"
 msgstr "файловият дескриптор %d не може да се дублира като дескриптор %d"
@@ -1089,68 +1099,68 @@ msgstr "максималният брой нива за рекурсия в из
 msgid "recursion stack underflow"
 msgstr "отрицателно препълване на стека за рекурсии"
 
-#: expr.c:477
+#: expr.c:478
 msgid "syntax error in expression"
 msgstr "синтактична грешка в израз"
 
-#: expr.c:521
+#: expr.c:522
 msgid "attempted assignment to non-variable"
 msgstr "опит за присвояване на стойност на нещо, което не е променлива"
 
-#: expr.c:530
+#: expr.c:531
 msgid "syntax error in variable assignment"
 msgstr "синтактична грешка при присвояване на променлива"
 
-#: expr.c:544 expr.c:911
+#: expr.c:545 expr.c:912
 msgid "division by 0"
 msgstr "деление на 0"
 
-#: expr.c:592
+#: expr.c:593
 msgid "bug: bad expassign token"
 msgstr "програмна грешка: неправилна лексема за присвояване на израз"
 
-#: expr.c:646
+#: expr.c:647
 msgid "`:' expected for conditional expression"
 msgstr "за условен израз се изисква „:“"
 
-#: expr.c:972
+#: expr.c:973
 msgid "exponent less than 0"
 msgstr "степента е по-малка от 0"
 
-#: expr.c:1029
+#: expr.c:1030
 msgid "identifier expected after pre-increment or pre-decrement"
 msgstr "очаква се идентификатор след предварително увеличаване или намаляване"
 
-#: expr.c:1056
+#: expr.c:1057
 msgid "missing `)'"
 msgstr "липсва „)“"
 
-#: expr.c:1107 expr.c:1487
+#: expr.c:1108 expr.c:1492
 msgid "syntax error: operand expected"
 msgstr "синтактична грешка: очаква се оператор"
 
-#: expr.c:1489
+#: expr.c:1494
 msgid "syntax error: invalid arithmetic operator"
 msgstr "синтактична грешка: грешен аритметичен оператор"
 
-#: expr.c:1513
+#: expr.c:1518
 #, c-format
 msgid "%s%s%s: %s (error token is \"%s\")"
 msgstr "%s%s%s: %s (грешната лексема е „%s“)"
 
-#: expr.c:1573
+#: expr.c:1578
 msgid "invalid arithmetic base"
 msgstr "грешна аритметична основа на бройна система"
 
-#: expr.c:1582
+#: expr.c:1587
 msgid "invalid integer constant"
 msgstr "неправилна целочислена константа"
 
-#: expr.c:1598
+#: expr.c:1603
 msgid "value too great for base"
 msgstr "стойността е прекалено голяма за основата"
 
-#: expr.c:1647
+#: expr.c:1652
 #, c-format
 msgid "%s: expression error\n"
 msgstr "%s: грешка в израза\n"
@@ -1159,7 +1169,7 @@ msgstr "%s: грешка в израза\n"
 msgid "getcwd: cannot access parent directories"
 msgstr "getcwd: няма достъп до родителските директории"
 
-#: input.c:99 subst.c:6069
+#: input.c:99 subst.c:6208
 #, c-format
 msgid "cannot reset nodelay mode for fd %d"
 msgstr "неуспешно изчистване на режима без забавяне на файловия дескриптор %d"
@@ -1180,169 +1190,169 @@ msgstr ""
 "стартиране на програмен канал: не може да се комуникира с водача на канала\n"
 "(pgrp pipe)"
 
-#: jobs.c:906
+#: jobs.c:907
 #, c-format
 msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr "bgp_delete: ЦИКЪЛ: psi (%d) == storage[psi].bucket_next"
 
-#: jobs.c:959
+#: jobs.c:960
 #, c-format
 msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr "bgp_search: ЦИКЪЛ: psi (%d) == storage[psi].bucket_next"
 
-#: jobs.c:1283
+#: jobs.c:1279
 #, c-format
 msgid "forked pid %d appears in running job %d"
 msgstr "стартираният процес %d е в изпълняваната задача %d"
 
-#: jobs.c:1402
+#: jobs.c:1397
 #, c-format
 msgid "deleting stopped job %d with process group %ld"
 msgstr "изтриване на спряната задача %d в групата процеси %ld"
 
-#: jobs.c:1511
+#: jobs.c:1502
 #, c-format
 msgid "add_process: pid %5ld (%s) marked as still alive"
 msgstr "добавяне на процес: процесът %5ld (%s) е отбелязан като още жив"
 
-#: jobs.c:1850
+#: jobs.c:1839
 #, c-format
 msgid "describe_pid: %ld: no such pid"
 msgstr "описателен идентификатор на процес: %ld: няма такъв идентификатор на процес"
 
-#: jobs.c:1865
+#: jobs.c:1854
 #, c-format
 msgid "Signal %d"
 msgstr "Сигнал %d"
 
-#: jobs.c:1879 jobs.c:1905
+#: jobs.c:1868 jobs.c:1894
 msgid "Done"
 msgstr "Завършен"
 
-#: jobs.c:1884 siglist.c:122
+#: jobs.c:1873 siglist.c:123
 msgid "Stopped"
 msgstr "Спрян"
 
-#: jobs.c:1888
+#: jobs.c:1877
 #, c-format
 msgid "Stopped(%s)"
 msgstr "Спрян (%s)"
 
-#: jobs.c:1892
+#: jobs.c:1881
 msgid "Running"
 msgstr "Изпълняван"
 
-#: jobs.c:1909
+#: jobs.c:1898
 #, c-format
 msgid "Done(%d)"
 msgstr "Завършен (%d)"
 
-#: jobs.c:1911
+#: jobs.c:1900
 #, c-format
 msgid "Exit %d"
 msgstr "Изход %d"
 
-#: jobs.c:1914
+#: jobs.c:1903
 msgid "Unknown status"
 msgstr "Непознато състояние"
 
-#: jobs.c:2001
+#: jobs.c:1990
 #, c-format
 msgid "(core dumped) "
 msgstr "(паметта е разтоварена)"
 
-#: jobs.c:2020
+#: jobs.c:2009
 #, c-format
 msgid "  (wd: %s)"
 msgstr "  (wd: %s)"
 
-#: jobs.c:2259
+#: jobs.c:2250
 #, c-format
 msgid "child setpgid (%ld to %ld)"
 msgstr "дъщерният процес смени групата при изпълнение (от %ld на %ld)"
 
-#: jobs.c:2617 nojobs.c:664
+#: jobs.c:2608 nojobs.c:666
 #, c-format
 msgid "wait: pid %ld is not a child of this shell"
 msgstr "изчакване: процесът с идентификатор %ld не е дъщерен на тази обвивка"
 
-#: jobs.c:2893
+#: jobs.c:2884
 #, c-format
 msgid "wait_for: No record of process %ld"
 msgstr "изчакване: липсват данни за процес с идентификатор %ld"
 
-#: jobs.c:3236
+#: jobs.c:3223
 #, c-format
 msgid "wait_for_job: job %d is stopped"
 msgstr "изчакване на задача: задачата %d е спряна"
 
-#: jobs.c:3564
+#: jobs.c:3551
 #, c-format
 msgid "%s: no current jobs"
 msgstr "%s: няма текуща задача"
 
-#: jobs.c:3571
+#: jobs.c:3558
 #, c-format
 msgid "%s: job has terminated"
 msgstr "%s: задачата е приключила"
 
-#: jobs.c:3580
+#: jobs.c:3567
 #, c-format
 msgid "%s: job %d already in background"
 msgstr "%s: задача %d вече е във фонов режим"
 
-#: jobs.c:3806
+#: jobs.c:3793
 msgid "waitchld: turning on WNOHANG to avoid indefinite block"
 msgstr ""
 "изчакване на дъщерен процес: включване на незабавното излизане от функцията\n"
 "чрез WNOHANG, за да се избегне недефиниран блок"
 
-#: jobs.c:4320
+#: jobs.c:4307
 #, c-format
 msgid "%s: line %d: "
 msgstr "%s: ред %d: "
 
-#: jobs.c:4334 nojobs.c:919
+#: jobs.c:4321 nojobs.c:921
 #, c-format
 msgid " (core dumped)"
 msgstr " (паметта е разтоварена)"
 
-#: jobs.c:4346 jobs.c:4359
+#: jobs.c:4333 jobs.c:4346
 #, c-format
 msgid "(wd now: %s)\n"
 msgstr "(работната директория е: %s)\n"
 
-#: jobs.c:4391
+#: jobs.c:4378
 msgid "initialize_job_control: getpgrp failed"
 msgstr "инициализация на контрола на задачите: неуспешно изпълнение на getpgrp"
 
-#: jobs.c:4447
+#: jobs.c:4434
 msgid "initialize_job_control: no job control in background"
 msgstr "инициализация на контрола на задачите: няма управление на задачите във фонов режим"
 
-#: jobs.c:4463
+#: jobs.c:4450
 msgid "initialize_job_control: line discipline"
 msgstr "инициализация на контрола на задачите: дисциплина на линията"
 
-#: jobs.c:4473
+#: jobs.c:4460
 msgid "initialize_job_control: setpgid"
 msgstr "инициализация на контрола на задачите: задаване на група при изпълнение (setpgid)"
 
-#: jobs.c:4494 jobs.c:4503
+#: jobs.c:4481 jobs.c:4490
 #, c-format
 msgid "cannot set terminal process group (%d)"
 msgstr "групата на процесите на терминала не може да бъде зададена (%d)"
 
-#: jobs.c:4508
+#: jobs.c:4495
 msgid "no job control in this shell"
 msgstr "в тази обвивка няма управление на задачите"
 
-#: lib/malloc/malloc.c:353
+#: lib/malloc/malloc.c:367
 #, c-format
 msgid "malloc: failed assertion: %s\n"
 msgstr "заделяне на памет: грешно предположение: %s\n"
 
-#: lib/malloc/malloc.c:369
+#: lib/malloc/malloc.c:383
 #, c-format
 msgid ""
 "\r\n"
@@ -1351,53 +1361,53 @@ msgstr ""
 "\r\n"
 "заделяне на памет: %s:%d: предположението е отпечатано\r\n"
 
-#: lib/malloc/malloc.c:370 lib/malloc/malloc.c:933
+#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941
 msgid "unknown"
 msgstr "непознат"
 
-#: lib/malloc/malloc.c:882
+#: lib/malloc/malloc.c:892
 msgid "malloc: block on free list clobbered"
 msgstr "заделяне на памет: блок в списъка със свободни блокове е зает или неподходящ"
 
-#: lib/malloc/malloc.c:972
+#: lib/malloc/malloc.c:980
 msgid "free: called with already freed block argument"
 msgstr "изчистване на памет: извикано е с блоков аргумент, който вече е изчистен"
 
-#: lib/malloc/malloc.c:975
+#: lib/malloc/malloc.c:983
 msgid "free: called with unallocated block argument"
 msgstr "изчистване на памет: извикано е с незаделен блоков аргумент"
 
-#: lib/malloc/malloc.c:994
+#: lib/malloc/malloc.c:1001
 msgid "free: underflow detected; mh_nbytes out of range"
 msgstr ""
 "изчистване на памет: открито е отрицателно препълване с mh_nbytes извън\n"
 "допустимия диапазон"
 
-#: lib/malloc/malloc.c:1001
+#: lib/malloc/malloc.c:1007
 msgid "free: underflow detected; magic8 corrupted"
 msgstr ""
 "изчистване на памет: открито е отрицателно препълване, неправилна стойност\n"
 "за magic8"
 
-#: lib/malloc/malloc.c:1009
+#: lib/malloc/malloc.c:1014
 msgid "free: start and end chunk sizes differ"
 msgstr "изчистване на памет: късовете на началната и крайната области се различават"
 
-#: lib/malloc/malloc.c:1119
+#: lib/malloc/malloc.c:1176
 msgid "realloc: called with unallocated block argument"
 msgstr "презаделяне: извикано е с аргумент с незаделен блок"
 
-#: lib/malloc/malloc.c:1134
+#: lib/malloc/malloc.c:1191
 msgid "realloc: underflow detected; mh_nbytes out of range"
 msgstr ""
 "презаделяне: открито е отрицателно препълване с mh_nbytes извън допустимия\n"
 "диапазон"
 
-#: lib/malloc/malloc.c:1141
+#: lib/malloc/malloc.c:1197
 msgid "realloc: underflow detected; magic8 corrupted"
 msgstr "презаделяне: открито е отрицателно препълване,  неправилна стойност за magic8"
 
-#: lib/malloc/malloc.c:1150
+#: lib/malloc/malloc.c:1205
 msgid "realloc: start and end chunk sizes differ"
 msgstr "презаделяне: късовете на началната и крайната области се различават"
 
@@ -1439,22 +1449,22 @@ msgstr "%s: неправилно указан мрежов път"
 msgid "network operations not supported"
 msgstr "не се поддържат мрежови операции"
 
-#: locale.c:217
+#: locale.c:219
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s)"
 msgstr "setlocale: LC_ALL: локалът не може да бъде сменен (%s)"
 
-#: locale.c:219
+#: locale.c:221
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s): %s"
 msgstr "setlocale: LC_ALL: локалът не може да бъде сменен (%s): %s"
 
-#: locale.c:292
+#: locale.c:294
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s)"
 msgstr "setlocale: %s: локалът не може да бъде сменен (%s)"
 
-#: locale.c:294
+#: locale.c:296
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s): %s"
 msgstr "setlocale: %s: локалът не може да бъде сменен (%s): %s"
@@ -1472,136 +1482,136 @@ msgstr "Имате нова поща в $_"
 msgid "The mail in %s has been read\n"
 msgstr "Пощата в %s вече е прочетена\n"
 
-#: make_cmd.c:317
+#: make_cmd.c:314
 msgid "syntax error: arithmetic expression required"
 msgstr "синтактична грешка: изисква се аритметичен израз"
 
-#: make_cmd.c:319
+#: make_cmd.c:316
 msgid "syntax error: `;' unexpected"
 msgstr "синтактична грешка: неочакван знак „;“"
 
-#: make_cmd.c:320
+#: make_cmd.c:317
 #, c-format
 msgid "syntax error: `((%s))'"
 msgstr "синтактична грешка: „((%s))“"
 
-#: make_cmd.c:572
+#: make_cmd.c:569
 #, c-format
 msgid "make_here_document: bad instruction type %d"
 msgstr "вътрешен документ с „<<“: неправилен вид инструкция %d"
 
-#: make_cmd.c:657
+#: make_cmd.c:668
 #, c-format
 msgid "here-document at line %d delimited by end-of-file (wanted `%s')"
 msgstr "вътрешният документ на ред %d е отделен със знак за нов ред (а трябва да е „%s“)"
 
-#: make_cmd.c:756
+#: make_cmd.c:769
 #, c-format
 msgid "make_redirection: redirection instruction `%d' out of range"
 msgstr "пренасочване: инструкцията за пренасочване „%d“ е извън допустимия диапазон"
 
-#: parse.y:2393
+#: parse.y:2428
 #, c-format
 msgid "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line truncated"
 msgstr "shell_getc: shell_input_line_size (%zu) надвишава SIZE_MAX (%lu): редът е отрязан"
 
-#: parse.y:2826
+#: parse.y:2921
 msgid "maximum here-document count exceeded"
 msgstr "превишен е максималният брой възможни вътрешни документи"
 
-#: parse.y:3581 parse.y:3957 parse.y:4556
+#: parse.y:3684 parse.y:4244 parse.y:6148
 #, c-format
 msgid "unexpected EOF while looking for matching `%c'"
 msgstr "неочакван знак за край на файл „EOF“, а се очакваше съответстващ знак „%c“"
 
-#: parse.y:4696
+#: parse.y:4452
 msgid "unexpected EOF while looking for `]]'"
 msgstr "неочакван знак за край на файл „EOF“, а се очакваше „]]“"
 
-#: parse.y:4701
+#: parse.y:4457
 #, c-format
 msgid "syntax error in conditional expression: unexpected token `%s'"
 msgstr "синтактична грешка в условен израз: неочаквана лексема „%s“"
 
-#: parse.y:4705
+#: parse.y:4461
 msgid "syntax error in conditional expression"
 msgstr "синтактична грешка в условен израз"
 
-#: parse.y:4783
+#: parse.y:4539
 #, c-format
 msgid "unexpected token `%s', expected `)'"
 msgstr "неочаквана лексема „%s“, а се очакваше знакът „)“"
 
-#: parse.y:4787
+#: parse.y:4543
 msgid "expected `)'"
 msgstr "очакваше се „)“"
 
-#: parse.y:4815
+#: parse.y:4571
 #, c-format
 msgid "unexpected argument `%s' to conditional unary operator"
 msgstr "неочакван аргумент „%s“ за унарен условен оператор"
 
-#: parse.y:4819
+#: parse.y:4575
 msgid "unexpected argument to conditional unary operator"
 msgstr "неочакван аргумент за унарен условен оператор"
 
-#: parse.y:4865
+#: parse.y:4621
 #, c-format
 msgid "unexpected token `%s', conditional binary operator expected"
 msgstr "неочаквана лексема „%s“, очакваше се бинарен условен оператор"
 
-#: parse.y:4869
+#: parse.y:4625
 msgid "conditional binary operator expected"
 msgstr "очакваше се бинарен условен оператор"
 
-#: parse.y:4891
+#: parse.y:4647
 #, c-format
 msgid "unexpected argument `%s' to conditional binary operator"
 msgstr "неочакван аргумент „%s“ за бинарен условен оператор"
 
-#: parse.y:4895
+#: parse.y:4651
 msgid "unexpected argument to conditional binary operator"
 msgstr "неочакван аргумент за бинарен условен оператор"
 
-#: parse.y:4906
+#: parse.y:4662
 #, c-format
 msgid "unexpected token `%c' in conditional command"
 msgstr "неочаквана лексема „%c“ в условна команда"
 
-#: parse.y:4909
+#: parse.y:4665
 #, c-format
 msgid "unexpected token `%s' in conditional command"
 msgstr "неочаквана лексема „%s“ в условна команда"
 
-#: parse.y:4913
+#: parse.y:4669
 #, c-format
 msgid "unexpected token %d in conditional command"
 msgstr "неочаквана лексема %d в условна команда"
 
-#: parse.y:6336
+#: parse.y:6118
 #, c-format
 msgid "syntax error near unexpected token `%s'"
 msgstr "синтактична грешка в близост до неочакваната лексема „%s“"
 
-#: parse.y:6355
+#: parse.y:6137
 #, c-format
 msgid "syntax error near `%s'"
 msgstr "синтактична грешка в близост до „%s“"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error: unexpected end of file"
 msgstr "синтактична грешка: неочакван край на файл"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error"
 msgstr "синтактична грешка"
 
-#: parse.y:6428
+#: parse.y:6216
 #, c-format
 msgid "Use \"%s\" to leave the shell.\n"
 msgstr "Използвайте „%s“, за да излезете от обвивката.\n"
 
-#: parse.y:6602
+#: parse.y:6394
 msgid "unexpected EOF while looking for matching `)'"
 msgstr "неочакван знак за край на файл „EOF“, очакваше се знакът „)“"
 
@@ -1639,98 +1649,98 @@ msgstr "xtrace_set: указател към файл – NULL"
 msgid "xtrace fd (%d) != fileno xtrace fp (%d)"
 msgstr "xtrace fd (%d) != fileno xtrace fp (%d)"
 
-#: print_cmd.c:1540
+#: print_cmd.c:1545
 #, c-format
 msgid "cprintf: `%c': invalid format character"
 msgstr "отпечатване: „%c“: неправилен форматиращ знак"
 
-#: redir.c:149 redir.c:197
+#: redir.c:150 redir.c:198
 msgid "file descriptor out of range"
 msgstr "файловият дескриптор е извън допустимия диапазон"
 
-#: redir.c:204
+#: redir.c:205
 #, c-format
 msgid "%s: ambiguous redirect"
 msgstr "%s: двусмислено пренасочване"
 
-#: redir.c:208
+#: redir.c:209
 #, c-format
 msgid "%s: cannot overwrite existing file"
 msgstr "%s: не може да се презапише съществуващ файл"
 
-#: redir.c:213
+#: redir.c:214
 #, c-format
 msgid "%s: restricted: cannot redirect output"
 msgstr "%s: поради ограничение изходът не може да се пренасочи"
 
-#: redir.c:218
+#: redir.c:219
 #, c-format
 msgid "cannot create temp file for here-document: %s"
 msgstr "не може да се създаде временен файл за вътрешен документ: %s"
 
-#: redir.c:222
+#: redir.c:223
 #, c-format
 msgid "%s: cannot assign fd to variable"
 msgstr "%s: на променлива не може да се присвои файлов дескриптор"
 
-#: redir.c:649
+#: redir.c:650
 msgid "/dev/(tcp|udp)/host/port not supported without networking"
 msgstr "„/dev/(tcp|udp)/host/port“ не се поддържат, ако няма поддръжка на мрежа"
 
-#: redir.c:938 redir.c:1053 redir.c:1114 redir.c:1284
+#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303
 msgid "redirection error: cannot duplicate fd"
 msgstr "грешка при пренасочване: файловият дескриптор не може да бъде дублиран"
 
-#: shell.c:347
+#: shell.c:353
 msgid "could not find /tmp, please create!"
 msgstr "не е открита директорията „/tmp“. Създайте я!"
 
-#: shell.c:351
+#: shell.c:357
 msgid "/tmp must be a valid directory name"
 msgstr "„/tmp“ трябва да е директория"
 
-#: shell.c:804
+#: shell.c:826
 msgid "pretty-printing mode ignored in interactive shells"
 msgstr "режимът за красив изход се игнорира при интерактивна работа"
 
-#: shell.c:948
+#: shell.c:972
 #, c-format
 msgid "%c%c: invalid option"
 msgstr "%c%c: неправилна опция"
 
-#: shell.c:1319
+#: shell.c:1343
 #, c-format
 msgid "cannot set uid to %d: effective uid %d"
 msgstr ""
 "идентификаторът на потребител на процеса не може да се зададе да е %d,\n"
 "ефективният идентификатор на потребител на процеса е %d"
 
-#: shell.c:1330
+#: shell.c:1354
 #, c-format
 msgid "cannot set gid to %d: effective gid %d"
 msgstr ""
 "идентификаторът на група на процеса не може да се зададе да е %d,\n"
 "ефективният идентификатор на група на процеса е %d"
 
-#: shell.c:1518
+#: shell.c:1544
 msgid "cannot start debugger; debugging mode disabled"
 msgstr "режимът на изчистване на грешки е недостъпен, защото е изключен"
 
-#: shell.c:1632
+#: shell.c:1658
 #, c-format
 msgid "%s: Is a directory"
 msgstr "%s: е директория"
 
-#: shell.c:1881
+#: shell.c:1907
 msgid "I have no name!"
 msgstr "Не може да се получи името на текущия потребител!"
 
-#: shell.c:2035
+#: shell.c:2061
 #, c-format
 msgid "GNU bash, version %s-(%s)\n"
 msgstr "GNU bash, версия %s-(%s)\n"
 
-#: shell.c:2036
+#: shell.c:2062
 #, c-format
 msgid ""
 "Usage:\t%s [GNU long option] [option] ...\n"
@@ -1739,321 +1749,321 @@ msgstr ""
 "Употреба:    %s [дълга опция на GNU] [опция]…\n"
 "             %s [дълга опция на GNU] [опция] файл-скрипт…\n"
 
-#: shell.c:2038
+#: shell.c:2064
 msgid "GNU long options:\n"
 msgstr "Дълги опции на GNU:\n"
 
-#: shell.c:2042
+#: shell.c:2068
 msgid "Shell options:\n"
 msgstr "Опции на обвивката:\n"
 
-#: shell.c:2043
+#: shell.c:2069
 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n"
 msgstr "    -ilrsD или -c команда, или -O къса_опция        (само при стартиране)\n"
 
-#: shell.c:2062
+#: shell.c:2088
 #, c-format
 msgid "\t-%s or -o option\n"
 msgstr "    -%s или -o опция\n"
 
-#: shell.c:2068
+#: shell.c:2094
 #, c-format
 msgid "Type `%s -c \"help set\"' for more information about shell options.\n"
 msgstr "За повече информация за опциите на обвивката въведете „%s -c \"help set\"“.\n"
 
-#: shell.c:2069
+#: shell.c:2095
 #, c-format
 msgid "Type `%s -c help' for more information about shell builtin commands.\n"
 msgstr "За повече информация за вградените в обвивката команди въведете „%s -c help“.\n"
 
-#: shell.c:2070
+#: shell.c:2096
 #, c-format
 msgid "Use the `bashbug' command to report bugs.\n"
 msgstr "За да докладвате грешки, използвайте командата „bashbug“.\n"
 
-#: shell.c:2072
+#: shell.c:2098
 #, c-format
 msgid "bash home page: <http://www.gnu.org/software/bash>\n"
 msgstr "Интернет страница на bash: <http://www.gnu.org/software/bash>\n"
 
-#: shell.c:2073
+#: shell.c:2099
 #, c-format
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 msgstr "Обща помощ за програмите на GNU: <http://www.gnu.org/gethelp/>\n"
 
-#: sig.c:757
+#: sig.c:765
 #, c-format
 msgid "sigprocmask: %d: invalid operation"
 msgstr "маска за обработката на сигнали: %d: грешна операция"
 
-#: siglist.c:47
+#: siglist.c:48
 msgid "Bogus signal"
 msgstr "Фалшив сигнал"
 
-#: siglist.c:50
+#: siglist.c:51
 msgid "Hangup"
 msgstr "Прекъсване на връзката"
 
-#: siglist.c:54
+#: siglist.c:55
 msgid "Interrupt"
 msgstr "Прекъсване"
 
-#: siglist.c:58
+#: siglist.c:59
 msgid "Quit"
 msgstr "Спиране"
 
-#: siglist.c:62
+#: siglist.c:63
 msgid "Illegal instruction"
 msgstr "Неправилна инструкция"
 
-#: siglist.c:66
+#: siglist.c:67
 msgid "BPT trace/trap"
 msgstr "Капан за авариен изход чрез BPT"
 
-#: siglist.c:74
+#: siglist.c:75
 msgid "ABORT instruction"
 msgstr "Инструкция за прекратяване"
 
-#: siglist.c:78
+#: siglist.c:79
 msgid "EMT instruction"
 msgstr "Капан с EMT"
 
-#: siglist.c:82
+#: siglist.c:83
 msgid "Floating point exception"
 msgstr "Изключение от плаваща запетая"
 
-#: siglist.c:86
+#: siglist.c:87
 msgid "Killed"
 msgstr "Убит"
 
-#: siglist.c:90
+#: siglist.c:91
 msgid "Bus error"
 msgstr "Грешка в шината"
 
-#: siglist.c:94
+#: siglist.c:95
 msgid "Segmentation fault"
 msgstr "Грешка в разделянето"
 
-#: siglist.c:98
+#: siglist.c:99
 msgid "Bad system call"
 msgstr "Грешно системно извикване"
 
-#: siglist.c:102
+#: siglist.c:103
 msgid "Broken pipe"
 msgstr "Прекъснат програмен канал"
 
-#: siglist.c:106
+#: siglist.c:107
 msgid "Alarm clock"
 msgstr "Аларма"
 
-#: siglist.c:110
+#: siglist.c:111
 msgid "Terminated"
 msgstr "Прекратен"
 
-#: siglist.c:114
+#: siglist.c:115
 msgid "Urgent IO condition"
 msgstr "Спешно вх./изх. състояние"
 
-#: siglist.c:118
+#: siglist.c:119
 msgid "Stopped (signal)"
 msgstr "Спрян (сигнал)"
 
-#: siglist.c:126
+#: siglist.c:127
 msgid "Continue"
 msgstr "Продължаване"
 
-#: siglist.c:134
+#: siglist.c:135
 msgid "Child death or stop"
 msgstr "Смърт или спиране на дъщерен процес"
 
-#: siglist.c:138
+#: siglist.c:139
 msgid "Stopped (tty input)"
 msgstr "Спиране (вход от tty)"
 
-#: siglist.c:142
+#: siglist.c:143
 msgid "Stopped (tty output)"
 msgstr "Спиране (изход към tty)"
 
-#: siglist.c:146
+#: siglist.c:147
 msgid "I/O ready"
 msgstr "Готовност за вх./изх."
 
-#: siglist.c:150
+#: siglist.c:151
 msgid "CPU limit"
 msgstr "Ограничение на процесора"
 
-#: siglist.c:154
+#: siglist.c:155
 msgid "File limit"
 msgstr "Ограничение на файловете"
 
-#: siglist.c:158
+#: siglist.c:159
 msgid "Alarm (virtual)"
 msgstr "Аларма (виртуална)"
 
-#: siglist.c:162
+#: siglist.c:163
 msgid "Alarm (profile)"
 msgstr "Аларма (по профил)"
 
-#: siglist.c:166
+#: siglist.c:167
 msgid "Window changed"
 msgstr "Преоразмерен прозорец"
 
-#: siglist.c:170
+#: siglist.c:171
 msgid "Record lock"
 msgstr "Заключен запис"
 
-#: siglist.c:174
+#: siglist.c:175
 msgid "User signal 1"
 msgstr "Потребителски сигнал 1"
 
-#: siglist.c:178
+#: siglist.c:179
 msgid "User signal 2"
 msgstr "Потребителски сигнал 2"
 
-#: siglist.c:182
+#: siglist.c:183
 msgid "HFT input data pending"
 msgstr "Идват данни по конзола HFT"
 
-#: siglist.c:186
+#: siglist.c:187
 msgid "power failure imminent"
 msgstr "Предстои спиране на захранването"
 
-#: siglist.c:190
+#: siglist.c:191
 msgid "system crash imminent"
 msgstr "Предстои забиване на системата"
 
-#: siglist.c:194
+#: siglist.c:195
 msgid "migrate process to another CPU"
 msgstr "Преместване на процеса на друг процесор"
 
-#: siglist.c:198
+#: siglist.c:199
 msgid "programming error"
 msgstr "Програмна грешка"
 
-#: siglist.c:202
+#: siglist.c:203
 msgid "HFT monitor mode granted"
 msgstr "Дадено право за управление чрез конзола HFT"
 
-#: siglist.c:206
+#: siglist.c:207
 msgid "HFT monitor mode retracted"
 msgstr "Отнето право за управление чрез конзола HFT"
 
-#: siglist.c:210
+#: siglist.c:211
 msgid "HFT sound sequence has completed"
 msgstr "Завършена звукова поредица през HFT"
 
-#: siglist.c:214
+#: siglist.c:215
 msgid "Information request"
 msgstr "Заявка за информация"
 
-#: siglist.c:222 siglist.c:224
+#: siglist.c:223 siglist.c:225
 #, c-format
 msgid "Unknown Signal #%d"
 msgstr "Непознат сигнал #%d"
 
-#: subst.c:1476 subst.c:1666
+#: subst.c:1480 subst.c:1670
 #, c-format
 msgid "bad substitution: no closing `%s' in %s"
 msgstr "лошо заместване: липсва затварящ знак „%s“ в %s"
 
-#: subst.c:3281
+#: subst.c:3307
 #, c-format
 msgid "%s: cannot assign list to array member"
 msgstr "%s: на член от масив не може да се присвои списък"
 
-#: subst.c:5910 subst.c:5926
+#: subst.c:6048 subst.c:6064
 msgid "cannot make pipe for process substitution"
 msgstr "не може да се създаде програмен канал за заместване на процеси"
 
-#: subst.c:5985
+#: subst.c:6124
 msgid "cannot make child for process substitution"
 msgstr "не може да се създаде дъщерен процес за заместване на процеси"
 
-#: subst.c:6059
+#: subst.c:6198
 #, c-format
 msgid "cannot open named pipe %s for reading"
 msgstr "именуваният програмен канал %s не може да се отвори за четене"
 
-#: subst.c:6061
+#: subst.c:6200
 #, c-format
 msgid "cannot open named pipe %s for writing"
 msgstr "именуваният програмен канал %s не може да се отвори за запис"
 
-#: subst.c:6084
+#: subst.c:6223
 #, c-format
 msgid "cannot duplicate named pipe %s as fd %d"
 msgstr ""
 "именуваният програмен канал %s не може да се\n"
 "дублира като файловия дескриптор %d"
 
-#: subst.c:6213
+#: subst.c:6370
 msgid "command substitution: ignored null byte in input"
 msgstr "заместване на команди: знакът „null“ във входа е прескочен"
 
-#: subst.c:6353
+#: subst.c:6533
 msgid "cannot make pipe for command substitution"
 msgstr "не може да се създаде програмен канал за заместване на команди"
 
-#: subst.c:6397
+#: subst.c:6580
 msgid "cannot make child for command substitution"
 msgstr "не може да се създаде дъщерен процес за заместване на команди"
 
-#: subst.c:6423
+#: subst.c:6613
 msgid "command_substitute: cannot duplicate pipe as fd 1"
 msgstr "заместване на команди: каналът не може да се дублира като fd 1"
 
-#: subst.c:6883 subst.c:9952
+#: subst.c:7082 subst.c:10252
 #, c-format
 msgid "%s: invalid variable name for name reference"
 msgstr "%s: неправилно име за променлива-указател"
 
-#: subst.c:6979 subst.c:6997 subst.c:7169
+#: subst.c:7178 subst.c:7196 subst.c:7369
 #, c-format
 msgid "%s: invalid indirect expansion"
 msgstr "%s: грешно непряко заместване"
 
-#: subst.c:7013 subst.c:7177
+#: subst.c:7212 subst.c:7377
 #, c-format
 msgid "%s: invalid variable name"
 msgstr "„%s“: грешно име на променлива"
 
-#: subst.c:7256
+#: subst.c:7478
 #, c-format
 msgid "%s: parameter not set"
 msgstr "%s: аргументът не е зададен"
 
-#: subst.c:7258
+#: subst.c:7480
 #, c-format
 msgid "%s: parameter null or not set"
 msgstr "%s: аргументът е „null“ или не е зададен"
 
-#: subst.c:7503 subst.c:7518
+#: subst.c:7727 subst.c:7742
 #, c-format
 msgid "%s: substring expression < 0"
 msgstr "%s: изразът от подниза е < 0"
 
-#: subst.c:9281 subst.c:9302
+#: subst.c:9560 subst.c:9587
 #, c-format
 msgid "%s: bad substitution"
 msgstr "%s: лошо заместване"
 
-#: subst.c:9390
+#: subst.c:9678
 #, c-format
 msgid "$%s: cannot assign in this way"
 msgstr "$%s: не може да се задава по този начин"
 
-#: subst.c:9814
+#: subst.c:10111
 msgid "future versions of the shell will force evaluation as an arithmetic substitution"
 msgstr ""
 "бъдещите версии на обвивката ще използват изчисляване като аритметично\n"
 "заместване"
 
-#: subst.c:10367
+#: subst.c:10795
 #, c-format
 msgid "bad substitution: no closing \"`\" in %s"
 msgstr "лошо заместване: липсва затварящ знак „`“ в %s"
 
-#: subst.c:11434
+#: subst.c:11874
 #, c-format
 msgid "no match: %s"
 msgstr "няма съвпадение: %s"
@@ -2076,21 +2086,21 @@ msgstr "очаква се „)“"
 msgid "`)' expected, found %s"
 msgstr "очаква се „)“, а е получено %s"
 
-#: test.c:466 test.c:799
+#: test.c:469 test.c:814
 #, c-format
 msgid "%s: binary operator expected"
 msgstr "%s: очаква се бинарен оператор"
 
-#: test.c:756 test.c:759
+#: test.c:771 test.c:774
 #, c-format
 msgid "%s: unary operator expected"
 msgstr "%s: очаква се унарен оператор"
 
-#: test.c:881
+#: test.c:896
 msgid "missing `]'"
 msgstr "липсва „]“"
 
-#: test.c:899
+#: test.c:914
 #, c-format
 msgid "syntax error: `%s' unexpected"
 msgstr "синтактична грешка: неочакван знак/ци „%s“"
@@ -2099,113 +2109,118 @@ msgstr "синтактична грешка: неочакван знак/ци 
 msgid "invalid signal number"
 msgstr "неправилен номер на сигнал"
 
-#: trap.c:325
+#: trap.c:323
 #, c-format
 msgid "trap handler: maximum trap handler level exceeded (%d)"
 msgstr "eval: превишено е максималното ниво на влагане на „eval“ (%d)"
 
-#: trap.c:414
+#: trap.c:412
 #, c-format
 msgid "run_pending_traps: bad value in trap_list[%d]: %p"
 msgstr ""
 "стартиране на предстоящите прихващания: неправилна стойност в\n"
 "trap_list[%d]: %p"
 
-#: trap.c:418
+#: trap.c:416
 #, c-format
 msgid "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
 msgstr ""
 "стартиране на предстоящите прихващания: обработката на сигнали е SIG_DFL.\n"
 "%d (%s) е преизпратен на текущата обвивка"
 
-#: trap.c:487
+#: trap.c:509
 #, c-format
 msgid "trap_handler: bad signal %d"
 msgstr "обработка на прихващания: неправилен сигнал %d"
 
-#: variables.c:421
+#: variables.c:424
 #, c-format
 msgid "error importing function definition for `%s'"
 msgstr "грешка при внасянето на дефиницията на функция за „%s“"
 
-#: variables.c:833
+#: variables.c:838
 #, c-format
 msgid "shell level (%d) too high, resetting to 1"
 msgstr "нивото на обвивката (%d) е прекалено голямо. Задава се да е 1"
 
-#: variables.c:2674
+#: variables.c:2642
 msgid "make_local_variable: no function context at current scope"
 msgstr ""
 "създаване на локална променлива: липсва контекст на функция в текущата област\n"
 "на видимост"
 
-#: variables.c:2693
+#: variables.c:2661
 #, c-format
 msgid "%s: variable may not be assigned value"
 msgstr "%s: на тази променлива не може да се присвои стойност"
 
-#: variables.c:3475
+#: variables.c:2818 variables.c:2874
+#, c-format
+msgid "%s: cannot inherit value from incompatible type"
+msgstr "%s: не може да се наследи стойност от несъвместим вид"
+
+#: variables.c:3459
 #, c-format
 msgid "%s: assigning integer to name reference"
 msgstr "%s: присвояване на число на променлива-указател"
 
-#: variables.c:4404
+#: variables.c:4390
 msgid "all_local_variables: no function context at current scope"
 msgstr ""
 "всички локални променливи: липсва контекст на функция в текущата област на\n"
 "видимост"
 
-#: variables.c:4771
+#: variables.c:4757
 #, c-format
 msgid "%s has null exportstr"
 msgstr "%s: аргументът за низа за изнасяне не трябва да е „null“"
 
-#: variables.c:4776 variables.c:4785
+#: variables.c:4762 variables.c:4771
 #, c-format
 msgid "invalid character %d in exportstr for %s"
 msgstr "неправилен знак на позиция %d в низа за изнасяне за %s"
 
-#: variables.c:4791
+#: variables.c:4777
 #, c-format
 msgid "no `=' in exportstr for %s"
 msgstr "липсва „=“ в низа за изнасяне за %s"
 
-#: variables.c:5331
+#: variables.c:5317
 msgid "pop_var_context: head of shell_variables not a function context"
 msgstr ""
 "изваждане на контекст на променливи: в началото на структурата за променливи на\n"
 "обвивката (shell_variables) е нещо, което не е контекст на функция"
 
-#: variables.c:5344
+#: variables.c:5330
 msgid "pop_var_context: no global_variables context"
 msgstr ""
 "изваждане на контекст на променливи: липсва контекст за глобални променливи\n"
 "(global_variables)"
 
-#: variables.c:5424
+#: variables.c:5410
 msgid "pop_scope: head of shell_variables not a temporary environment scope"
 msgstr ""
 "изваждане на област: в началото на структурата за променливи на обвивката\n"
 "(shell_variables)  е нещо, което не е временна област в обкръжението"
 
-#: variables.c:6387
+#: variables.c:6400
 #, c-format
 msgid "%s: %s: cannot open as FILE"
 msgstr "%s: %s не може да се отвори като ФАЙЛ"
 
-#: variables.c:6392
+#: variables.c:6405
 #, c-format
 msgid "%s: %s: invalid value for trace file descriptor"
 msgstr "%s: %s: грешен файлов дескриптор за файла за трасиране"
 
-#: variables.c:6437
+#: variables.c:6450
 #, c-format
 msgid "%s: %s: compatibility value out of range"
 msgstr "%s: %s: е извън допустимия диапазон"
 
 #: version.c:46 version2.c:46
-msgid "Copyright (C) 2020 Free Software Foundation, Inc."
-msgstr "Авторски права © 2020 Free Software Foundation, Inc."
+msgid "Copyright (C) 2022 Free Software Foundation, Inc."
+msgstr "Авторски права © 2022 Free Software Foundation, Inc."
 
 #: version.c:47 version2.c:47
 msgid "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n"
@@ -2289,12 +2304,12 @@ msgid "command [-pVv] command [arg ...]"
 msgstr "command [-pVv] команда [АРГУМЕНТ…]"
 
 #: builtins.c:78
-msgid "declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]"
-msgstr "declare [-aAfFgiIlnrtux] [-p] [ИМЕ[=СТОЙНОСТ]…]"
+msgid "declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] [name ...]"
+msgstr "declare [-aAfFgiIlnrtux] [ИМЕ[=СТОЙНОСТ]…] или declare -p [-aAfFilnrtux] [ИМЕ…]"
 
 #: builtins.c:80
-msgid "typeset [-aAfFgiIlnrtux] [-p] name[=value] ..."
-msgstr "typeset [-aAfFgiIlnrtux] [-p] ИМЕ[=СТОЙНОСТ]…"
+msgid "typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] [name ...]"
+msgstr "typeset [-aAfFgiIlnrtux] ИМЕ[=СТОЙНОСТ]… или typeset -p [-aAfFilnrtux] [ИМЕ…]"
 
 #: builtins.c:82
 msgid "local [option] name[=value] ..."
@@ -2390,8 +2405,8 @@ msgid "return [n]"
 msgstr "return [ЦИФРОВ_КОД]"
 
 #: builtins.c:142
-msgid "set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]"
-msgstr "set [-abefhkmnptuvxBCHP] [-o ОПЦИЯ] [--] [АРГУМЕНТИ…]"
+msgid "set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]"
+msgstr "set [-abefhkmnptuvxBCEHPT] [-o ОПЦИЯ] [--] [АРГУМЕНТ…]"
 
 #: builtins.c:144
 msgid "unset [-f] [-v] [-n] [name ...]"
@@ -2438,8 +2453,8 @@ msgid "type [-afptP] name [name ...]"
 msgstr "type [-afptP] ИМЕ [ИМЕ…]"
 
 #: builtins.c:171
-msgid "ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]"
-msgstr "ulimit [-SHabcdefiklmnpqrstuvxPT] [ОГРАНИЧЕНИЕ]"
+msgid "ulimit [-SHabcdefiklmnpqrstuvxPRT] [limit]"
+msgstr "ulimit [-SHabcdefiklmnpqrstuvxPRT] [ОГРАНИЧЕНИЕ]"
 
 #: builtins.c:174
 msgid "umask [-p] [-S] [mode]"
@@ -2478,12 +2493,12 @@ msgid "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else C
 msgstr "if КОМАНДИ; then КОМАНДИ; [ elif КОМАНДИ; then КОМАНДИ; ]… [ else КОМАНДИ; ] fi"
 
 #: builtins.c:196
-msgid "while COMMANDS; do COMMANDS; done"
-msgstr "while КОМАНДИ; do КОМАНДИ; done"
+msgid "while COMMANDS; do COMMANDS-2; done"
+msgstr "while КОМАНДИ; do КОМАНДИ_2; done"
 
 #: builtins.c:198
-msgid "until COMMANDS; do COMMANDS; done"
-msgstr "until КОМАНДИ; do КОМАНДИ; done"
+msgid "until COMMANDS; do COMMANDS-2; done"
+msgstr "until КОМАНДИ; do КОМАНДИ_2; done"
 
 #: builtins.c:200
 msgid "coproc [NAME] command [redirections]"
@@ -3833,7 +3848,8 @@ msgid ""
 "    splitting, and the first word is assigned to the first NAME, the second\n"
 "    word to the second NAME, and so on, with any leftover words assigned to\n"
 "    the last NAME.  Only the characters found in $IFS are recognized as word\n"
-"    delimiters.\n"
+"    delimiters. By default, the backslash character escapes delimiter characters\n"
+"    and newline.\n"
 "    \n"
 "    If no NAMEs are supplied, the line read is stored in the REPLY variable.\n"
 "    \n"
@@ -3875,8 +3891,9 @@ msgstr ""
 "    „-u“, се прочита един ред.  Редът се разделя на полета — думи.  Първата дума\n"
 "    се присвоява на първото ИМЕ, втората дума на второто ИМЕ и т.н., а на\n"
 "    последното ИМЕ се присвояват оставащите думи.   Като разделители на думи се\n"
-"    използват само знаците указани в променливата „IFS“.\n"
-"    \n"
+"    използват само знаците указани в променливата „IFS“.  Стандартно знакът „\\“\n"
+"    екранира разделителите и новите редове.\n"
+"\n"
 "    Ако не са дадени ИМЕна, прочетеният ред се запазва в променливата „REPLY“.\n"
 "    \n"
 "    Опции:\n"
@@ -3915,7 +3932,7 @@ msgstr ""
 "    грешка при задаване на стойност на променлива или е зададен неправилен\n"
 "    файлов дескриптор като аргумент на -u."
 
-#: builtins.c:1041
+#: builtins.c:1042
 msgid ""
 "Return from a shell function.\n"
 "    \n"
@@ -3936,7 +3953,7 @@ msgstr ""
 "    Връща ЦИФРОВия_КОД или грешка, ако обвивката в момента не изпълнява функция\n"
 "    или скрипт."
 
-#: builtins.c:1054
+#: builtins.c:1055
 msgid ""
 "Set or unset values of shell options and positional parameters.\n"
 "    \n"
@@ -4102,7 +4119,7 @@ msgstr ""
 "    Изходен код:\n"
 "    0, освен ако не е зададена неправилна опция."
 
-#: builtins.c:1139
+#: builtins.c:1140
 msgid ""
 "Unset values and attributes of shell variables and functions.\n"
 "    \n"
@@ -4142,7 +4159,7 @@ msgstr ""
 "    0, освен ако е зададена неправилна опция или някое от ИМЕната е само за\n"
 "    четене."
 
-#: builtins.c:1161
+#: builtins.c:1162
 msgid ""
 "Set export attribute for shell variables.\n"
 "    \n"
@@ -4176,7 +4193,7 @@ msgstr ""
 "    Изходен код:\n"
 "    0, освен ако е зададена неправилна опция или някое от ИМЕната е неправилно."
 
-#: builtins.c:1180
+#: builtins.c:1181
 msgid ""
 "Mark shell variables as unchangeable.\n"
 "    \n"
@@ -4214,7 +4231,7 @@ msgstr ""
 "    Изходен код:\n"
 "    0, освен ако е зададена неправилна опция или някое от ИМЕната е неправилно."
 
-#: builtins.c:1202
+#: builtins.c:1203
 msgid ""
 "Shift positional parameters.\n"
 "    \n"
@@ -4233,7 +4250,7 @@ msgstr ""
 "    Изходен код:\n"
 "    0, освен ако БРОят е отрицателно или по-голямо от стойността „$#“."
 
-#: builtins.c:1214 builtins.c:1229
+#: builtins.c:1215 builtins.c:1230
 msgid ""
 "Execute commands from a file in the current shell.\n"
 "    \n"
@@ -4257,7 +4274,7 @@ msgstr ""
 "    Връща състоянието на последно изпълнената команда във ФАЙЛа.  Ако той не\n"
 "    може да бъде открит, изходът е грешка."
 
-#: builtins.c:1245
+#: builtins.c:1246
 msgid ""
 "Suspend shell execution.\n"
 "    \n"
@@ -4282,7 +4299,7 @@ msgstr ""
 "    Изходен код:\n"
 "    0, освен ако не възникне грешка или управлението на задачи е изключено."
 
-#: builtins.c:1261
+#: builtins.c:1262
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -4439,7 +4456,7 @@ msgstr ""
 "    0, ако ИЗРАЗът е верен.  Грешка, когато ИЗРАЗът е неверен или е даден\n"
 "    неправилен аргумент."
 
-#: builtins.c:1343
+#: builtins.c:1344
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -4452,7 +4469,7 @@ msgstr ""
 "    задължително да е знакът „]“, който да съответства на отварящата квадратна\n"
 "    скоба „[“."
 
-#: builtins.c:1352
+#: builtins.c:1353
 msgid ""
 "Display process times.\n"
 "    \n"
@@ -4470,7 +4487,7 @@ msgstr ""
 "    Изходен код:\n"
 "    Винаги 0."
 
-#: builtins.c:1364
+#: builtins.c:1365
 msgid ""
 "Trap signals and other events.\n"
 "    \n"
@@ -4539,7 +4556,7 @@ msgstr ""
 "    Изходен код:\n"
 "    0, освен ако е зададен неправилен сигнал или опция."
 
-#: builtins.c:1400
+#: builtins.c:1401
 msgid ""
 "Display information about command type.\n"
 "    \n"
@@ -4593,7 +4610,7 @@ msgstr ""
 "    Изходен код:\n"
 "    0, ако всички подадени ИМЕна са открити, неуспех, ако някое от тях липсва."
 
-#: builtins.c:1431
+#: builtins.c:1432
 msgid ""
 "Modify shell resource limits.\n"
 "    \n"
@@ -4690,7 +4707,7 @@ msgstr ""
 "    Изходен код:\n"
 "    0, освен ако не възникни грешка или е дадена неправилна опция."
 
-#: builtins.c:1482
+#: builtins.c:1483
 msgid ""
 "Display or set file mode mask.\n"
 "    \n"
@@ -4723,7 +4740,7 @@ msgstr ""
 "    Изходен код:\n"
 "    0, освен ако МАСКАта или някоя от зададените опции са неправилни."
 
-#: builtins.c:1502
+#: builtins.c:1503
 msgid ""
 "Wait for job completion and return exit status.\n"
 "    \n"
@@ -4777,7 +4794,7 @@ msgstr ""
 "    връща и при задаването на опцията „-n“, а обвивката няма дъщерни процеси,\n"
 "    които не се чакат."
 
-#: builtins.c:1533
+#: builtins.c:1534
 msgid ""
 "Wait for process completion and return exit status.\n"
 "    \n"
@@ -4800,7 +4817,7 @@ msgstr ""
 "    Изходния код на процеса с последния идентификатор.  Грешка, ако е даден\n"
 "    неправилен идентификатор или е дадена неправилна опция."
 
-#: builtins.c:1548
+#: builtins.c:1549
 msgid ""
 "Execute commands for each member in a list.\n"
 "    \n"
@@ -4822,7 +4839,7 @@ msgstr ""
 "    Изходен код:\n"
 "    Връща изходния код на последно изпълнената команда."
 
-#: builtins.c:1562
+#: builtins.c:1563
 msgid ""
 "Arithmetic for loop.\n"
 "    \n"
@@ -4851,7 +4868,7 @@ msgstr ""
 "    Изходен код:\n"
 "    Връща изходния код на последно изпълнената команда."
 
-#: builtins.c:1580
+#: builtins.c:1581
 msgid ""
 "Select words from a list and execute commands.\n"
 "    \n"
@@ -4887,7 +4904,7 @@ msgstr ""
 "    Изходен код:\n"
 "    Връща изходния код на последно изпълнената команда."
 
-#: builtins.c:1601
+#: builtins.c:1602
 msgid ""
 "Report time consumed by pipeline's execution.\n"
 "    \n"
@@ -4917,7 +4934,7 @@ msgstr ""
 "    Изходен код:\n"
 "    Изходният код е този на ПРОГРАМНия_КАНАЛ."
 
-#: builtins.c:1618
+#: builtins.c:1619
 msgid ""
 "Execute commands based on pattern matching.\n"
 "    \n"
@@ -4935,7 +4952,7 @@ msgstr ""
 "    Изходен код:\n"
 "    Изходният код е този на последно изпълнената команда."
 
-#: builtins.c:1630
+#: builtins.c:1631
 msgid ""
 "Execute commands based on conditional.\n"
 "    \n"
@@ -4965,43 +4982,43 @@ msgstr ""
 "    Изходен код:\n"
 "    Изходният код е този на последно изпълнената команда."
 
-#: builtins.c:1647
+#: builtins.c:1648
 msgid ""
 "Execute commands as long as a test succeeds.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `while' COMMANDS has an exit status of zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n"
+"    an exit status of zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
 "Изпълнение на команда докато определен тест е успешен.\n"
 "    \n"
-"    Заместване и изпълнение на КОМАНДИте докато последната команда в блока\n"
-"    „while“ е с изходен код, който е 0.\n"
+"    Заместване и изпълнение на КОМАНДИ_2 докато последната команда в блока\n"
+"    КОМАНДИ е с изходен код, който е 0.\n"
 "    \n"
 "    Изходен код:\n"
 "    Изходният код е този на последно изпълнената команда."
 
-#: builtins.c:1659
+#: builtins.c:1660
 msgid ""
 "Execute commands as long as a test does not succeed.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `until' COMMANDS has an exit status which is not zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n"
+"    an exit status which is not zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
 "Изпълнение на команда докато определен тест е неуспешен.\n"
 "    \n"
-"    Заместване и изпълнение на КОМАНДИте докато последната команда в блока\n"
-"    „until“ е с изходен код, който не е 0.\n"
+"    Заместване и изпълнение на КОМАНДИ_2 докато последната команда в блока\n"
+"    КОМАНДИ е с изходен код, който не е 0.\n"
 "    \n"
 "    Изходен код:\n"
 "    Изходният код е този на последно изпълнената команда."
 
-#: builtins.c:1671
+#: builtins.c:1672
 msgid ""
 "Create a coprocess named NAME.\n"
 "    \n"
@@ -5023,7 +5040,7 @@ msgstr ""
 "    Изходен код:\n"
 "    Изходният код е 0."
 
-#: builtins.c:1685
+#: builtins.c:1686
 msgid ""
 "Define shell function.\n"
 "    \n"
@@ -5045,7 +5062,7 @@ msgstr ""
 "    Изходен код:\n"
 "    0, освен ако ИМЕто не е само за четене."
 
-#: builtins.c:1699
+#: builtins.c:1700
 msgid ""
 "Group commands as a unit.\n"
 "    \n"
@@ -5063,7 +5080,7 @@ msgstr ""
 "    Изходен код:\n"
 "    Изходният код е този на последно изпълнената команда."
 
-#: builtins.c:1711
+#: builtins.c:1712
 msgid ""
 "Resume job in foreground.\n"
 "    \n"
@@ -5087,7 +5104,7 @@ msgstr ""
 "    Изходен код:\n"
 "    Изходният код е този възобновената задача."
 
-#: builtins.c:1726
+#: builtins.c:1727
 msgid ""
 "Evaluate arithmetic expression.\n"
 "    \n"
@@ -5105,7 +5122,7 @@ msgstr ""
 "    Изходен код:\n"
 "    1, ако резултатът на ИЗРАЗа е 0.  В противен случай — 0."
 
-#: builtins.c:1738
+#: builtins.c:1739
 msgid ""
 "Execute conditional command.\n"
 "    \n"
@@ -5155,7 +5172,7 @@ msgstr ""
 "    Изходен код:\n"
 "    0 или едно според стойността на ИЗРАЗа."
 
-#: builtins.c:1764
+#: builtins.c:1765
 msgid ""
 "Common shell variable names and usage.\n"
 "    \n"
@@ -5260,7 +5277,7 @@ msgstr ""
 "    HISTIGNORE      Списък с шаблони, разделени с двоеточие, които указват кои\n"
 "                    команди да не се запазват в историята\n"
 
-#: builtins.c:1821
+#: builtins.c:1822
 msgid ""
 "Add directories to stack.\n"
 "    \n"
@@ -5318,7 +5335,7 @@ msgstr ""
 "    0, освен ако е подаден неправилен аргумент или не може да се премине към\n"
 "    съответната директория."
 
-#: builtins.c:1855
+#: builtins.c:1856
 msgid ""
 "Remove directories from stack.\n"
 "    \n"
@@ -5369,7 +5386,7 @@ msgstr ""
 "    0, освен ако е подаден неправилен аргумент или не може да се премине към\n"
 "    съответната директория."
 
-#: builtins.c:1885
+#: builtins.c:1886
 msgid ""
 "Display directory stack.\n"
 "    \n"
@@ -5419,7 +5436,7 @@ msgstr ""
 "    Изходен код:\n"
 "    0, освен ако е дадена неправилна опция или възникне грешка."
 
-#: builtins.c:1916
+#: builtins.c:1917
 msgid ""
 "Set and unset shell options.\n"
 "    \n"
@@ -5455,7 +5472,7 @@ msgstr ""
 "    0, ако ОПЦИЯта е включена, грешка, ако е зададена неправилна или изключена\n"
 "    ОПЦИЯ."
 
-#: builtins.c:1937
+#: builtins.c:1938
 msgid ""
 "Formats and prints ARGUMENTS under control of the FORMAT.\n"
 "    \n"
@@ -5474,6 +5491,8 @@ msgid ""
 "    \n"
 "      %b\texpand backslash escape sequences in the corresponding argument\n"
 "      %q\tquote the argument in a way that can be reused as shell input\n"
+"      %Q\tlike %q, but apply any precision to the unquoted argument before\n"
+"    \t\tquoting\n"
 "      %(fmt)T\toutput the date-time string resulting from using FMT as a format\n"
 "    \t        string for strftime(3)\n"
 "    \n"
@@ -5505,6 +5524,8 @@ msgstr ""
 "              черти в съответния аргумент\n"
 "      %q      предизвиква цитирането на аргумента, така че да може да бъде\n"
 "              използван като вход за обвивката\n"
+"      %Q      подобно на „%q“, но се прилага някаква точност към нецитирания\n"
+"              аргумент преди цитирането му\n"
 "      %(fmt)  отпечатване на низа при третиране на аргумента като дата и време\n"
 "              според strftime(3)\n"
 "    \n"
@@ -5516,7 +5537,7 @@ msgstr ""
 "    0, освен ако не е дадена неправилна опция или възникне грешка при\n"
 "    извеждането на резултата или при присвояването на стойността."
 
-#: builtins.c:1971
+#: builtins.c:1974
 msgid ""
 "Specify how arguments are to be completed by Readline.\n"
 "    \n"
@@ -5567,7 +5588,7 @@ msgstr ""
 "    Изходен код:\n"
 "    0, освен когато е дадена неправилна опция или възникне грешка."
 
-#: builtins.c:2001
+#: builtins.c:2004
 msgid ""
 "Display possible completions depending on the options.\n"
 "    \n"
@@ -5587,7 +5608,7 @@ msgstr ""
 "    Изходен код:\n"
 "    0, освен ако е дадена неправилна опция или възникне грешка."
 
-#: builtins.c:2016
+#: builtins.c:2019
 msgid ""
 "Modify or display completion options.\n"
 "    \n"
@@ -5642,7 +5663,7 @@ msgstr ""
 "    0, освен когато е дадена неправилна опция или липсват инструкции към ИМЕто\n"
 "    за автоматично дописване."
 
-#: builtins.c:2047
+#: builtins.c:2050
 msgid ""
 "Read lines from the standard input into an indexed array variable.\n"
 "    \n"
@@ -5712,7 +5733,7 @@ msgstr ""
 "    Връща 0, освен ако е дадена неправилна опция или ако МАСИВът е променлива\n"
 "    само за четене или не е индексиран масив."
 
-#: builtins.c:2083
+#: builtins.c:2086
 msgid ""
 "Read lines from a file into an array variable.\n"
 "    \n"
index 0b94a7a0c4a33dba042b7450f868af413767e0ca..c144d0ed78169904dcca4b2f9e8dca69c82abb56 100644 (file)
Binary files a/po/ca.gmo and b/po/ca.gmo differ
index f1cadd2b448aa6b0db95c47f94bc2de9ba8256bb..eb9791a01ddc7dc3d0f7c3c2313b6585c4670cbe 100644 (file)
--- a/po/ca.po
+++ b/po/ca.po
@@ -1,15 +1,15 @@
 # Catalan messages for GNU bash.
-# Copyright (C) 2002, 2003, 2010, 2014, 2015, 2017 Free Software Foundation, Inc.
+# Copyright (C) 2022 Free Software Foundation, Inc.
 # This file is distributed under the same license as the bash package.
 # Montxo Vicente i Sempere <montxo@enmoviment.com>, 2003 (traducció), 2010 (revisions).
 # Jordi Mas i Hernàndez <jmas@softcatala.org>, 2004 (correccions).
-# Ernest Adrogué Calveras <eadrogue@gmx.net>, 2014, 2015, 2017.
+# Ernest Adrogué i Calveras <nr9@posteo.net>, 2014-2022.
 msgid ""
 msgstr ""
-"Project-Id-Version: bash-4.4\n"
+"Project-Id-Version: bash-5.2-rc1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-11-28 12:51-0500\n"
-"PO-Revision-Date: 2017-01-10 20:11+0100\n"
+"POT-Creation-Date: 2022-01-11 14:50-0500\n"
+"PO-Revision-Date: 2022-07-06 20:08+0200\n"
 "Last-Translator: Ernest Adrogué Calveras <eadrogue@gmx.net>\n"
 "Language-Team: Catalan <ca@dodds.net>\n"
 "Language: ca\n"
@@ -23,61 +23,55 @@ msgstr ""
 msgid "bad array subscript"
 msgstr "subíndex erroni"
 
-#: arrayfunc.c:421 builtins/declare.def:638 variables.c:2274 variables.c:2300
-#: variables.c:3133
+#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268
+#: variables.c:3101
 #, c-format
 msgid "%s: removing nameref attribute"
 msgstr "%s: s'elimina l'atribut «nameref»"
 
-#: arrayfunc.c:446 builtins/declare.def:851
+#: arrayfunc.c:496 builtins/declare.def:868
 #, c-format
 msgid "%s: cannot convert indexed to associative array"
 msgstr "%s: no és possible convertir un vector indexat en associatiu"
 
-#: arrayfunc.c:700
-#, c-format
-msgid "%s: invalid associative array key"
-msgstr "%s: clau de vector associatiu no vàlida"
-
-#: arrayfunc.c:702
+#: arrayfunc.c:777
 #, c-format
 msgid "%s: cannot assign to non-numeric index"
 msgstr "%s: no es pot assignar a un índex no-numèric"
 
-#: arrayfunc.c:747
+#: arrayfunc.c:822
 #, c-format
 msgid "%s: %s: must use subscript when assigning associative array"
 msgstr "%s: %s: l'assignació en vectors associatius requereix un subíndex"
 
-#: bashhist.c:452
+#: bashhist.c:455
 #, c-format
 msgid "%s: cannot create: %s"
 msgstr "%s: no es pot crear: %s"
 
-#: bashline.c:4310
+#: bashline.c:4479
 msgid "bash_execute_unix_command: cannot find keymap for command"
-msgstr ""
-"bash_execute_unix_command: no s'ha trobat el mapa de tecles per a l'ordre"
+msgstr "bash_execute_unix_command: no s'ha trobat el mapa de tecles per a l'ordre"
 
-#: bashline.c:4459
+#: bashline.c:4637
 #, c-format
 msgid "%s: first non-whitespace character is not `\"'"
 msgstr "%s: el primer caràcter no-blanc no és «\"»"
 
-#: bashline.c:4488
+#: bashline.c:4666
 #, c-format
 msgid "no closing `%c' in %s"
 msgstr "falta un caràcter de tancament «%c» a %s"
 
-#: bashline.c:4519
+#: bashline.c:4697
 #, c-format
 msgid "%s: missing colon separator"
 msgstr "%s: falta un caràcter «:» de separació"
 
-#: bashline.c:4555
-#, fuzzy, c-format
+#: bashline.c:4733
+#, c-format
 msgid "`%s': cannot unbind in command keymap"
-msgstr "«%s»: no es pot desvincular"
+msgstr "«%s»: no es pot desvincular en el mapa de tecles de l'ordre"
 
 #: braces.c:327
 #, c-format
@@ -85,16 +79,16 @@ msgid "brace expansion: cannot allocate memory for %s"
 msgstr "expansió de claus: no es pot assignar memòria per a %s"
 
 #: braces.c:406
-#, fuzzy, c-format
+#, c-format
 msgid "brace expansion: failed to allocate memory for %u elements"
-msgstr "expansió de claus: ha fallat l'assignació de memòria per a %d elements"
+msgstr "expansió de claus: ha fallat l'assignació de memòria per a %u elements"
 
 #: braces.c:451
 #, c-format
 msgid "brace expansion: failed to allocate memory for `%s'"
 msgstr "expansió de claus: ha fallat l'assignació de memòria per a «%s»"
 
-#: builtins/alias.def:131 variables.c:1844
+#: builtins/alias.def:131 variables.c:1817
 #, c-format
 msgid "`%s': invalid alias name"
 msgstr "«%s»: el nom de l'àlies no és valid"
@@ -143,7 +137,6 @@ msgstr "només té sentit en una iteració de tipus «for», «while» o «until
 
 # help caller
 #: builtins/caller.def:136
-#, fuzzy
 msgid ""
 "Returns the context of the current subroutine call.\n"
 "    \n"
@@ -161,17 +154,13 @@ msgstr ""
 "    per a proporcionar un traçat de la pila.\n"
 "\n"
 "    El valor de EXPR indica quants «frames» retrocedir des de l'actual; el\n"
-"    «frame» superior és el 0.\n"
-"\n"
-"    Estat de sortida:\n"
-"    Retorna 0 excepte si l'intèrpret no està executant una funció o si EXPR\n"
-"    no és una expressió vàlida."
+"    «frame» superior és el 0."
 
 #: builtins/cd.def:327
 msgid "HOME not set"
 msgstr "la variable HOME no està definida"
 
-#: builtins/cd.def:335 builtins/common.c:161 test.c:901
+#: builtins/cd.def:335 builtins/common.c:161 test.c:916
 msgid "too many arguments"
 msgstr "sobren arguments"
 
@@ -198,7 +187,7 @@ msgstr "atenció: "
 msgid "%s: usage: "
 msgstr "%s: sintaxi: "
 
-#: builtins/common.c:193 shell.c:516 shell.c:844
+#: builtins/common.c:193 shell.c:524 shell.c:866
 #, c-format
 msgid "%s: option requires an argument"
 msgstr "%s: l'opció requereix un argument"
@@ -213,7 +202,7 @@ msgstr "%s: falta un argument numèric"
 msgid "%s: not found"
 msgstr "%s: no s'ha trobat"
 
-#: builtins/common.c:216 shell.c:857
+#: builtins/common.c:216 shell.c:879
 #, c-format
 msgid "%s: invalid option"
 msgstr "%s: l'opció no és vàlida"
@@ -223,7 +212,7 @@ msgstr "%s: l'opció no és vàlida"
 msgid "%s: invalid option name"
 msgstr "%s: el nom de l'opció no és vàlid"
 
-#: builtins/common.c:230 execute_cmd.c:2373 general.c:368 general.c:373
+#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373
 #, c-format
 msgid "`%s': not a valid identifier"
 msgstr "«%s»: no és un identificador vàlid"
@@ -236,7 +225,7 @@ msgstr "nombre octal no vàlid"
 msgid "invalid hex number"
 msgstr "nombre hexadecimal no vàlid"
 
-#: builtins/common.c:244 expr.c:1569
+#: builtins/common.c:244 expr.c:1574
 msgid "invalid number"
 msgstr "nombre no vàlid"
 
@@ -250,90 +239,95 @@ msgstr "%s: especificació de senyal no vàlida"
 msgid "`%s': not a pid or valid job spec"
 msgstr "«%s»: pid o especificació de feina no vàlids"
 
-#: builtins/common.c:266 error.c:510
+#: builtins/common.c:266 error.c:536
 #, c-format
 msgid "%s: readonly variable"
 msgstr "%s: variable de només lectura"
 
-#: builtins/common.c:274
+#: builtins/common.c:273
+#, c-format
+msgid "%s: cannot assign"
+msgstr "%s: no es pot assignar"
+
+#: builtins/common.c:281
 #, c-format
 msgid "%s: %s out of range"
 msgstr "%s: %s fora del domini"
 
-#: builtins/common.c:274 builtins/common.c:276
+#: builtins/common.c:281 builtins/common.c:283
 msgid "argument"
 msgstr "argument"
 
-#: builtins/common.c:276
+#: builtins/common.c:283
 #, c-format
 msgid "%s out of range"
 msgstr "%s fora del domini"
 
-#: builtins/common.c:284
+#: builtins/common.c:291
 #, c-format
 msgid "%s: no such job"
 msgstr "%s: no existeix tal feina"
 
-#: builtins/common.c:292
+#: builtins/common.c:299
 #, c-format
 msgid "%s: no job control"
 msgstr "%s: no hi ha control de feines"
 
-#: builtins/common.c:294
+#: builtins/common.c:301
 msgid "no job control"
 msgstr "no hi ha control de feines"
 
 # cd .. en un intèrpret restringit
-#: builtins/common.c:304
+#: builtins/common.c:311
 #, c-format
 msgid "%s: restricted"
 msgstr "%s: restringit"
 
-#: builtins/common.c:306
+#: builtins/common.c:313
 msgid "restricted"
 msgstr "restringit"
 
-#: builtins/common.c:314
+#: builtins/common.c:321
 #, c-format
 msgid "%s: not a shell builtin"
 msgstr "%s: no és una ordre interna de l'intèrpret"
 
-#: builtins/common.c:323
+#: builtins/common.c:330
 #, c-format
 msgid "write error: %s"
 msgstr "error d'escriptura: %s"
 
-#: builtins/common.c:331
+#: builtins/common.c:338
 #, c-format
 msgid "error setting terminal attributes: %s"
 msgstr "error en establir els atributs del terminal: %s"
 
-#: builtins/common.c:333
+#: builtins/common.c:340
 #, c-format
 msgid "error getting terminal attributes: %s"
 msgstr "error en obtenir els atributs del terminal: %s"
 
-#: builtins/common.c:635
+#: builtins/common.c:642
 #, c-format
 msgid "%s: error retrieving current directory: %s: %s\n"
 msgstr "%s: error en obtenir el directori actual: %s: %s\n"
 
-#: builtins/common.c:701 builtins/common.c:703
+#: builtins/common.c:708 builtins/common.c:710
 #, c-format
 msgid "%s: ambiguous job spec"
 msgstr "%s: l'especificació de feina és ambigua"
 
-#: builtins/common.c:964
+#: builtins/common.c:971
 msgid "help not available in this version"
 msgstr "aquesta versió no té ajuda disponible"
 
 # unset UID
-#: builtins/common.c:1008 builtins/set.def:953 variables.c:3839
+#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825
 #, c-format
 msgid "%s: cannot unset: readonly %s"
 msgstr "%s: no es pot suprimir: %s de només lectura"
 
-#: builtins/common.c:1013 builtins/set.def:932 variables.c:3844
+#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830
 #, c-format
 msgid "%s: cannot unset"
 msgstr "%s: no es pot suprimir"
@@ -343,109 +337,109 @@ msgstr "%s: no es pot suprimir"
 msgid "%s: invalid action name"
 msgstr "%s: nom d'acció no vàlid"
 
-#: builtins/complete.def:486 builtins/complete.def:634
-#: builtins/complete.def:865
+#: builtins/complete.def:486 builtins/complete.def:642
+#: builtins/complete.def:873
 #, c-format
 msgid "%s: no completion specification"
 msgstr "%s: no hi ha especificació de compleció"
 
-#: builtins/complete.def:688
+#: builtins/complete.def:696
 msgid "warning: -F option may not work as you expect"
 msgstr "atenció: l'opció -F pot no funcionar com us espereu"
 
-#: builtins/complete.def:690
+#: builtins/complete.def:698
 msgid "warning: -C option may not work as you expect"
 msgstr "atenció: l'opció -C pot no funcionar com us espereu"
 
-#: builtins/complete.def:838
+#: builtins/complete.def:846
 msgid "not currently executing completion function"
 msgstr "no s'està executant una funció de compleció"
 
-#: builtins/declare.def:134
+#: builtins/declare.def:137
 msgid "can only be used in a function"
 msgstr "només es pot utilitzar en una funció"
 
-#: builtins/declare.def:363 builtins/declare.def:756
+#: builtins/declare.def:437
+msgid "cannot use `-f' to make functions"
+msgstr "no és possible usar «-f» per convertir en funció"
+
+#: builtins/declare.def:464 execute_cmd.c:6132
+#, c-format
+msgid "%s: readonly function"
+msgstr "%s: funció de només lectura"
+
+#: builtins/declare.def:521 builtins/declare.def:804
 #, c-format
 msgid "%s: reference variable cannot be an array"
 msgstr "%s: una variable referència no pot ser un vector"
 
-#: builtins/declare.def:374 variables.c:3385
+#: builtins/declare.def:532 variables.c:3359
 #, c-format
 msgid "%s: nameref variable self references not allowed"
 msgstr "%s: no es permeten autoreferències en variables referència"
 
-#: builtins/declare.def:379 variables.c:2104 variables.c:3304 variables.c:3312
-#: variables.c:3382
+#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286
+#: variables.c:3356
 #, c-format
 msgid "%s: circular name reference"
 msgstr "%s: referència circular"
 
-#: builtins/declare.def:384 builtins/declare.def:762 builtins/declare.def:773
+#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820
 #, c-format
 msgid "`%s': invalid variable name for name reference"
 msgstr "«%s»: la variable referència conté un nom de variable no vàlid"
 
-#: builtins/declare.def:514
-msgid "cannot use `-f' to make functions"
-msgstr "no és possible usar «-f» per convertir en funció"
-
-#: builtins/declare.def:526 execute_cmd.c:5986
-#, c-format
-msgid "%s: readonly function"
-msgstr "%s: funció de només lectura"
-
-#: builtins/declare.def:824
-#, c-format
-msgid "%s: quoted compound array assignment deprecated"
-msgstr ""
-"%s: es desaconsella l'assignació múltiple en vectors utilitzant cometes"
-
-#: builtins/declare.def:838
+#: builtins/declare.def:856
 #, c-format
 msgid "%s: cannot destroy array variables in this way"
 msgstr "%s: no és possible destruir variables vector d'aquesta manera"
 
-#: builtins/declare.def:845 builtins/read.def:815
+#: builtins/declare.def:862 builtins/read.def:887
 #, c-format
 msgid "%s: cannot convert associative to indexed array"
 msgstr "%s: no és possible convertir un vector associatiu en indexat"
 
-#: builtins/enable.def:143 builtins/enable.def:151
+#: builtins/declare.def:891
+#, c-format
+msgid "%s: quoted compound array assignment deprecated"
+msgstr "%s: es desaconsella l'assignació múltiple en vectors utilitzant cometes"
+
+#: builtins/enable.def:145 builtins/enable.def:153
 msgid "dynamic loading not available"
 msgstr "no es poden carregar biblioteques dinàmicament"
 
-#: builtins/enable.def:343
+#: builtins/enable.def:376
 #, c-format
 msgid "cannot open shared object %s: %s"
 msgstr "no es pot obrir l'objecte compartit %s: %s"
 
-#: builtins/enable.def:371
+#: builtins/enable.def:405
 #, c-format
 msgid "cannot find %s in shared object %s: %s"
 msgstr "no s'ha trobat %s a l'objecte compartit %s: %s"
 
-#: builtins/enable.def:388
-#, fuzzy, c-format
+# help enable
+#: builtins/enable.def:422
+#, c-format
 msgid "%s: dynamic builtin already loaded"
-msgstr "%s: no s'ha carregat dinàmicament"
+msgstr "%s: ordre interna dinàmica ja carregada"
 
-#: builtins/enable.def:392
+#: builtins/enable.def:426
 #, c-format
 msgid "load function for %s returns failure (%d): not loaded"
 msgstr "l'intent de carregar %s ha fallat (%d): no carregat"
 
-#: builtins/enable.def:517
+#: builtins/enable.def:551
 #, c-format
 msgid "%s: not dynamically loaded"
 msgstr "%s: no s'ha carregat dinàmicament"
 
-#: builtins/enable.def:543
+#: builtins/enable.def:577
 #, c-format
 msgid "%s: cannot delete: %s"
 msgstr "%s: no es pot eliminar: %s"
 
-#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5818
+#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959
 #, c-format
 msgid "%s: is a directory"
 msgstr "%s: és un directori"
@@ -460,7 +454,7 @@ msgstr "%s: no és un fitxer ordinari"
 msgid "%s: file is too large"
 msgstr "%s: el fitxer és massa gran"
 
-#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1647
+#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673
 #, c-format
 msgid "%s: cannot execute binary file"
 msgstr "%s: no es poden executar fitxers binaris"
@@ -549,20 +543,20 @@ msgid ""
 "'\n"
 "\n"
 msgstr ""
+"'\n"
+"\n"
 
 #: builtins/help.def:185
 #, c-format
-msgid ""
-"no help topics match `%s'.  Try `help help' or `man -k %s' or `info %s'."
-msgstr ""
-"no hi ha ajuda sobre «%s».  Proveu «help help», «man -k %s» o «info %s»."
+msgid "no help topics match `%s'.  Try `help help' or `man -k %s' or `info %s'."
+msgstr "no hi ha ajuda sobre «%s».  Proveu «help help», «man -k %s» o «info %s»."
 
-#: builtins/help.def:224
+#: builtins/help.def:223
 #, c-format
 msgid "%s: cannot open: %s"
 msgstr "%s: no es pot obrir: %s"
 
-#: builtins/help.def:524
+#: builtins/help.def:523
 #, c-format
 msgid ""
 "These shell commands are defined internally.  Type `help' to see this list.\n"
@@ -582,21 +576,21 @@ msgstr ""
 "Un asterisc (*) significa que l'ordre està deshabilitada.\n"
 "\n"
 
-#: builtins/history.def:155
+#: builtins/history.def:159
 msgid "cannot use more than one of -anrw"
 msgstr "no és possible usar més d'una opció d'entre -anrw"
 
-#: builtins/history.def:188 builtins/history.def:198 builtins/history.def:213
-#: builtins/history.def:230 builtins/history.def:242 builtins/history.def:249
+#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215
+#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247
 msgid "history position"
 msgstr "posició a l'historial"
 
-#: builtins/history.def:340
+#: builtins/history.def:338
 #, c-format
 msgid "%s: invalid timestamp"
 msgstr "%s: la marca horària no és vàlida"
 
-#: builtins/history.def:451
+#: builtins/history.def:449
 #, c-format
 msgid "%s: history expansion failed"
 msgstr "%s: ha fallat l'expansió de l'historial"
@@ -619,78 +613,78 @@ msgstr "%s: els arguments han de ser ids de processos o feines"
 msgid "Unknown error"
 msgstr "Error desconegut"
 
-#: builtins/let.def:97 builtins/let.def:122 expr.c:639 expr.c:657
+#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658
 msgid "expression expected"
 msgstr "s'esperava una expressió"
 
-#: builtins/mapfile.def:178
+#: builtins/mapfile.def:180
 #, c-format
 msgid "%s: not an indexed array"
 msgstr "%s: no és un vector indexat"
 
-#: builtins/mapfile.def:271 builtins/read.def:308
+#: builtins/mapfile.def:276 builtins/read.def:336
 #, c-format
 msgid "%s: invalid file descriptor specification"
 msgstr "%s: l'especificació de descriptor de fitxer no és vàlida"
 
-#: builtins/mapfile.def:279 builtins/read.def:315
+#: builtins/mapfile.def:284 builtins/read.def:343
 #, c-format
 msgid "%d: invalid file descriptor: %s"
 msgstr "%d: el descriptor de fitxer no és vàlid: %s"
 
-#: builtins/mapfile.def:288 builtins/mapfile.def:326
+#: builtins/mapfile.def:293 builtins/mapfile.def:331
 #, c-format
 msgid "%s: invalid line count"
 msgstr "%s: el nombre de línies no és vàlid"
 
-#: builtins/mapfile.def:299
+#: builtins/mapfile.def:304
 #, c-format
 msgid "%s: invalid array origin"
 msgstr "%s: l'origen del vector no és vàlid"
 
-#: builtins/mapfile.def:316
+#: builtins/mapfile.def:321
 #, c-format
 msgid "%s: invalid callback quantum"
 msgstr "%s: el quàntum de retorn no és vàlid"
 
-#: builtins/mapfile.def:349
+#: builtins/mapfile.def:354
 msgid "empty array variable name"
 msgstr "nom de variable vector en blanc"
 
-#: builtins/mapfile.def:370
+#: builtins/mapfile.def:375
 msgid "array variable support required"
 msgstr "fa falta suport per a variables vector"
 
-#: builtins/printf.def:419
+#: builtins/printf.def:430
 #, c-format
 msgid "`%s': missing format character"
 msgstr "«%s»: falta un caràcter de format"
 
-#: builtins/printf.def:474
+#: builtins/printf.def:485
 #, c-format
 msgid "`%c': invalid time format specification"
 msgstr "«%c»: l'especificació de format de temps no és vàlida"
 
-#: builtins/printf.def:676
+#: builtins/printf.def:708
 #, c-format
 msgid "`%c': invalid format character"
 msgstr "«%c»: el caràcter de format no és vàlid"
 
-#: builtins/printf.def:702
+#: builtins/printf.def:734
 #, c-format
 msgid "warning: %s: %s"
 msgstr "atenció: %s: %s"
 
-#: builtins/printf.def:788
+#: builtins/printf.def:822
 #, c-format
 msgid "format parsing problem: %s"
 msgstr "problema en interpretar el format: %s"
 
-#: builtins/printf.def:885
+#: builtins/printf.def:919
 msgid "missing hex digit for \\x"
 msgstr "falta un dígit hexadecimal a \\x"
 
-#: builtins/printf.def:900
+#: builtins/printf.def:934
 #, c-format
 msgid "missing unicode digit for \\%c"
 msgstr "falta un dígit Unicode a \\%c"
@@ -732,16 +726,13 @@ msgid ""
 "    \twith its position in the stack\n"
 "    \n"
 "    Arguments:\n"
-"      +N\tDisplays the Nth entry counting from the left of the list shown "
-"by\n"
+"      +N\tDisplays the Nth entry counting from the left of the list shown by\n"
 "    \tdirs when invoked without options, starting with zero.\n"
 "    \n"
-"      -N\tDisplays the Nth entry counting from the right of the list shown "
-"by\n"
+"      -N\tDisplays the Nth entry counting from the right of the list shown by\n"
 "\tdirs when invoked without options, starting with zero."
 msgstr ""
-"Mostra la llista actual de directoris recordats.  Els directoris són "
-"afegits\n"
+"Mostra la llista actual de directoris recordats.  Els directoris són afegits\n"
 "    a la llista mitjançant l'ordre «pushd»; podeu recórrer la llista de\n"
 "    directoris cap enrere amb l'ordre «popd».\n"
 "\n"
@@ -789,8 +780,7 @@ msgid ""
 msgstr ""
 "Afegeix un directori al capdamunt de la pila de directoris, o fa girar la\n"
 "    llista, de manera que al capdamunt de la pila hi queda el directori de\n"
-"    treball corrent.  Sense arguments, intercanvia els dos directoris de "
-"més\n"
+"    treball corrent.  Sense arguments, intercanvia els dos directoris de més\n"
 "    amunt.\n"
 "\n"
 "    Opcions:\n"
@@ -855,12 +845,12 @@ msgstr ""
 "    Podeu veure el contingut de la pila de directoris amb l'ordre «dirs»."
 
 # read -t -5
-#: builtins/read.def:280
+#: builtins/read.def:308
 #, c-format
 msgid "%s: invalid timeout specification"
 msgstr "%s: el límit de temps no és vàlid"
 
-#: builtins/read.def:755
+#: builtins/read.def:827
 #, c-format
 msgid "read error: %d: %s"
 msgstr "error de lectura: %d: %s"
@@ -874,7 +864,7 @@ msgstr "només es permet fer «return» des d'una funció o script"
 msgid "cannot simultaneously unset a function and a variable"
 msgstr "no és possible suprimir una funció i una variable alhora"
 
-#: builtins/set.def:966
+#: builtins/set.def:969
 #, c-format
 msgid "%s: not an array variable"
 msgstr "%s: no és una variable vector"
@@ -894,12 +884,12 @@ msgstr "%s: no es pot exportar"
 msgid "shift count"
 msgstr "nombre de «shifts»"
 
-#: builtins/shopt.def:310
+#: builtins/shopt.def:323
 msgid "cannot set and unset shell options simultaneously"
 msgstr "no es poden activar i desactivar opcions de forma simultània"
 
 # shopt -s foo
-#: builtins/shopt.def:428
+#: builtins/shopt.def:444
 #, c-format
 msgid "%s: invalid shell option name"
 msgstr "%s: l'opció de l'intèrpret no és vàlida"
@@ -969,16 +959,16 @@ msgstr "%s: el límit no és vàlid"
 msgid "`%c': bad command"
 msgstr "«%c»: ordre errònia"
 
-#: builtins/ulimit.def:455
+#: builtins/ulimit.def:464
 #, c-format
 msgid "%s: cannot get limit: %s"
 msgstr "%s: no es pot obtenir el límit: %s"
 
-#: builtins/ulimit.def:481
+#: builtins/ulimit.def:490
 msgid "limit"
 msgstr "límit"
 
-#: builtins/ulimit.def:493 builtins/ulimit.def:793
+#: builtins/ulimit.def:502 builtins/ulimit.def:802
 #, c-format
 msgid "%s: cannot modify limit: %s"
 msgstr "%s: no es pot modificar el límit: %s"
@@ -999,7 +989,7 @@ msgstr "«%c»: l'operador de mode simbòlic no és vàlid"
 msgid "`%c': invalid symbolic mode character"
 msgstr "«%c»: el mode simbòlic conté caràcters no vàlids"
 
-#: error.c:89 error.c:347 error.c:349 error.c:351
+#: error.c:89 error.c:373 error.c:375 error.c:377
 msgid " line "
 msgstr " línia "
 
@@ -1020,100 +1010,110 @@ msgstr "Avortant..."
 msgid "INFORM: "
 msgstr "INFORMACIÓ: "
 
-#: error.c:462
+#: error.c:310
+#, c-format
+msgid "DEBUG warning: "
+msgstr "atenció: "
+
+#: error.c:488
 msgid "unknown command error"
 msgstr "error no identificat"
 
-#: error.c:463
+#: error.c:489
 msgid "bad command type"
 msgstr "tipus d'ordre erroni"
 
-#: error.c:464
+#: error.c:490
 msgid "bad connector"
 msgstr "connector erroni"
 
-#: error.c:465
+#: error.c:491
 msgid "bad jump"
 msgstr "salt erroni"
 
-#: error.c:503
+#: error.c:529
 #, c-format
 msgid "%s: unbound variable"
 msgstr "%s: variable no definida"
 
 # SIGALRM
-#: eval.c:242
+#: eval.c:243
 msgid "\atimed out waiting for input: auto-logout\n"
 msgstr "\atemps esgotat mentre s'esperaven dades: autodesconnexió\n"
 
 # error intern
-#: execute_cmd.c:537
+#: execute_cmd.c:555
 #, c-format
 msgid "cannot redirect standard input from /dev/null: %s"
 msgstr "no s'ha pogut redirigir l'entrada estàndard des de /dev/null: %s"
 
 # error intern
-#: execute_cmd.c:1297
+#: execute_cmd.c:1317
 #, c-format
 msgid "TIMEFORMAT: `%c': invalid format character"
 msgstr "TIMEFORMAT: «%c»: el caràcter de format no és vàlid"
 
-#: execute_cmd.c:2362
+#: execute_cmd.c:2391
 #, c-format
 msgid "execute_coproc: coproc [%d:%s] still exists"
 msgstr "execute_coproc: el coprocés [%d:%s] encara existeix"
 
-#: execute_cmd.c:2486
+#: execute_cmd.c:2524
 msgid "pipe error"
 msgstr "error de canonada"
 
-#: execute_cmd.c:4793
+#: execute_cmd.c:4923
 #, c-format
 msgid "eval: maximum eval nesting level exceeded (%d)"
 msgstr "eval: excedit el nombre màxim d'avaluacions imbricades (%d)"
 
-#: execute_cmd.c:4805
+#: execute_cmd.c:4935
 #, c-format
 msgid "%s: maximum source nesting level exceeded (%d)"
 msgstr "%s: excedit el nombre màxim d'imbricacions per a «source» (%d)"
 
-#: execute_cmd.c:4913
+#: execute_cmd.c:5043
 #, c-format
 msgid "%s: maximum function nesting level exceeded (%d)"
 msgstr "%s: excedit el nombre màxim de funcions imbricades (%d)"
 
-#: execute_cmd.c:5467
+#: execute_cmd.c:5598
 #, c-format
 msgid "%s: restricted: cannot specify `/' in command names"
 msgstr "%s: restricció: no podeu especificar «/» en noms d'ordres"
 
-#: execute_cmd.c:5574
+#: execute_cmd.c:5715
 #, c-format
 msgid "%s: command not found"
 msgstr "%s: no s'ha trobat l'ordre"
 
-#: execute_cmd.c:5816
+#: execute_cmd.c:5957
 #, c-format
 msgid "%s: %s"
 msgstr "%s: %s"
 
-#: execute_cmd.c:5854
+#: execute_cmd.c:5975
+#, c-format
+msgid "%s: cannot execute: required file not found"
+msgstr "%s: no es pot executar: no s'ha trobat un fitxer necessari"
+
+#: execute_cmd.c:6000
 #, c-format
 msgid "%s: %s: bad interpreter"
 msgstr "%s: %s: intèrpret erroni"
 
 # error intern
-#: execute_cmd.c:5891
+#: execute_cmd.c:6037
 #, c-format
 msgid "%s: cannot execute binary file: %s"
 msgstr "%s: no es pot executar el fitxer binari: %s"
 
-#: execute_cmd.c:5977
+#: execute_cmd.c:6123
 #, c-format
 msgid "`%s': is a special builtin"
 msgstr "«%s»: és una ordre interna especial"
 
-#: execute_cmd.c:6029
+#: execute_cmd.c:6175
 #, c-format
 msgid "cannot duplicate fd %d to fd %d"
 msgstr "no s'ha pogut duplicar l'fd %d com a fd %d"
@@ -1126,72 +1126,70 @@ msgstr "excedit el nivell màxim de recursivitat per a expressions"
 msgid "recursion stack underflow"
 msgstr "«underflow» a la pila de recursivitat"
 
-#: expr.c:477
+#: expr.c:478
 msgid "syntax error in expression"
 msgstr "error de sintaxi a l'expressió"
 
-#: expr.c:521
+#: expr.c:522
 msgid "attempted assignment to non-variable"
 msgstr "intent d'assignació a una no-variable"
 
-#: expr.c:530
-#, fuzzy
+#: expr.c:531
 msgid "syntax error in variable assignment"
-msgstr "error de sintaxi a l'expressió"
+msgstr "error de sintaxi en una assignació de variable"
 
-#: expr.c:544 expr.c:911
+#: expr.c:545 expr.c:912
 msgid "division by 0"
 msgstr "divisió per 0"
 
-#: expr.c:592
+#: expr.c:593
 msgid "bug: bad expassign token"
 msgstr "bug: el component «expassign» és erroni"
 
 # echo $((4 > 5 ? 0))
-#: expr.c:646
+#: expr.c:647
 msgid "`:' expected for conditional expression"
 msgstr "falta un caràcter «:» a l'expressió condicional"
 
 # echo $((4 ** -1))
-#: expr.c:972
+#: expr.c:973
 msgid "exponent less than 0"
 msgstr "exponent menor que 0"
 
-#: expr.c:1029
+#: expr.c:1030
 msgid "identifier expected after pre-increment or pre-decrement"
 msgstr "fa falta un identificador després del pre-increment o pre-decrement"
 
-#: expr.c:1056
+#: expr.c:1057
 msgid "missing `)'"
 msgstr "falta un caràcter «)»"
 
-#: expr.c:1107 expr.c:1487
+#: expr.c:1108 expr.c:1492
 msgid "syntax error: operand expected"
 msgstr "error de sintaxi: s'esperava un operand"
 
-#: expr.c:1489
+#: expr.c:1494
 msgid "syntax error: invalid arithmetic operator"
 msgstr "error de sintaxi: l'operador aritmètic no és vàlid"
 
-#: expr.c:1513
+#: expr.c:1518
 #, c-format
 msgid "%s%s%s: %s (error token is \"%s\")"
 msgstr "%s%s%s: %s (l'element erroni és «%s»)"
 
-#: expr.c:1573
+#: expr.c:1578
 msgid "invalid arithmetic base"
 msgstr "la base aritmètica no és vàlida"
 
-#: expr.c:1582
-#, fuzzy
+#: expr.c:1587
 msgid "invalid integer constant"
-msgstr "%s: el nombre de línies no és vàlid"
+msgstr "nombre enter invàlid"
 
-#: expr.c:1598
+#: expr.c:1603
 msgid "value too great for base"
 msgstr "el valor de la base és massa gran"
 
-#: expr.c:1647
+#: expr.c:1652
 #, c-format
 msgid "%s: expression error\n"
 msgstr "%s: expressió errònia\n"
@@ -1200,7 +1198,7 @@ msgstr "%s: expressió errònia\n"
 msgid "getcwd: cannot access parent directories"
 msgstr "getcwd: els directoris superiors són inaccessibles"
 
-#: input.c:99 subst.c:6069
+#: input.c:99 subst.c:6208
 #, c-format
 msgid "cannot reset nodelay mode for fd %d"
 msgstr "no s'ha pogut restablir el mode «nodelay» per a l'fd %d"
@@ -1219,220 +1217,219 @@ msgstr "save_bash_input: ja existia un «buffer» per al nou fd %d"
 msgid "start_pipeline: pgrp pipe"
 msgstr "start_pipeline: pgrp de la canonada"
 
-#: jobs.c:906
+#: jobs.c:907
 #, c-format
 msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
-msgstr ""
+msgstr "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
 
-#: jobs.c:959
+#: jobs.c:960
 #, c-format
 msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
-msgstr ""
+msgstr "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
 
-#: jobs.c:1283
+#: jobs.c:1279
 #, c-format
 msgid "forked pid %d appears in running job %d"
 msgstr "el pid bifurcat %d apareix a la feina en execució %d"
 
-#: jobs.c:1402
+#: jobs.c:1397
 #, c-format
 msgid "deleting stopped job %d with process group %ld"
 msgstr "s'elimina la feina aturada %d amb grup de procés %ld"
 
-#: jobs.c:1511
+#: jobs.c:1502
 #, c-format
 msgid "add_process: pid %5ld (%s) marked as still alive"
 msgstr "add_process: el pid %5ld (%s) està marcat com a viu"
 
-#: jobs.c:1850
+#: jobs.c:1839
 #, c-format
 msgid "describe_pid: %ld: no such pid"
 msgstr "describe_pid: %ld: no existeix tal pid"
 
-#: jobs.c:1865
+#: jobs.c:1854
 #, c-format
 msgid "Signal %d"
 msgstr "Senyal %d"
 
-#: jobs.c:1879 jobs.c:1905
+#: jobs.c:1868 jobs.c:1894
 msgid "Done"
 msgstr "Fet"
 
-#: jobs.c:1884 siglist.c:122
+#: jobs.c:1873 siglist.c:123
 msgid "Stopped"
 msgstr "Aturat"
 
-#: jobs.c:1888
+#: jobs.c:1877
 #, c-format
 msgid "Stopped(%s)"
 msgstr "Aturat(%s)"
 
 # ha de tenir menys de 10 caràcters o no queda alineat
-#: jobs.c:1892
+#: jobs.c:1881
 msgid "Running"
 msgstr "Funcionant"
 
-#: jobs.c:1909
+#: jobs.c:1898
 #, c-format
 msgid "Done(%d)"
 msgstr "Fet(%d)"
 
-#: jobs.c:1911
+#: jobs.c:1900
 #, c-format
 msgid "Exit %d"
 msgstr "Sortida %d"
 
-#: jobs.c:1914
+#: jobs.c:1903
 msgid "Unknown status"
 msgstr "Estat desconegut"
 
-#: jobs.c:2001
+#: jobs.c:1990
 #, c-format
 msgid "(core dumped) "
 msgstr "(s'ha bolcat la memòria)"
 
 # wd = working directory
-#: jobs.c:2020
+#: jobs.c:2009
 #, c-format
 msgid "  (wd: %s)"
 msgstr "  (dt: %s)"
 
-#: jobs.c:2259
+#: jobs.c:2250
 #, c-format
 msgid "child setpgid (%ld to %ld)"
 msgstr "setpgid (de %ld a %ld) per al procés inferior"
 
-#: jobs.c:2617 nojobs.c:664
+#: jobs.c:2608 nojobs.c:666
 #, c-format
 msgid "wait: pid %ld is not a child of this shell"
 msgstr "wait: el pid %ld no és un fill d'aquest intèrpret"
 
-#: jobs.c:2893
+#: jobs.c:2884
 #, c-format
 msgid "wait_for: No record of process %ld"
-msgstr "wait_for: No es té constància del procés %ld"
+msgstr "wait_for: No hi ha constància del procés %ld"
 
-#: jobs.c:3236
+#: jobs.c:3223
 #, c-format
 msgid "wait_for_job: job %d is stopped"
 msgstr "wait_for_job: la feina %d està aturada"
 
-#: jobs.c:3564
-#, fuzzy, c-format
+#: jobs.c:3551
+#, c-format
 msgid "%s: no current jobs"
-msgstr "%s: no existeix tal feina"
+msgstr "%s: no hi ha feines en curs"
 
-#: jobs.c:3571
+#: jobs.c:3558
 #, c-format
 msgid "%s: job has terminated"
 msgstr "%s: la feina ha acabat"
 
-#: jobs.c:3580
+#: jobs.c:3567
 #, c-format
 msgid "%s: job %d already in background"
 msgstr "%s: la feina %d ja es troba en segon pla"
 
-#: jobs.c:3806
+#: jobs.c:3793
 msgid "waitchld: turning on WNOHANG to avoid indefinite block"
 msgstr "waitchld: s'activa «WNOHANG» per a evitar un bloqueig indefinit"
 
-#: jobs.c:4320
+#: jobs.c:4307
 #, c-format
 msgid "%s: line %d: "
 msgstr "%s línia %d: "
 
-#: jobs.c:4334 nojobs.c:919
+#: jobs.c:4321 nojobs.c:921
 #, c-format
 msgid " (core dumped)"
 msgstr " (s'ha bolcat la memòria)"
 
-#: jobs.c:4346 jobs.c:4359
+#: jobs.c:4333 jobs.c:4346
 #, c-format
 msgid "(wd now: %s)\n"
 msgstr "(dt ara: %s)\n"
 
-#: jobs.c:4391
+#: jobs.c:4378
 msgid "initialize_job_control: getpgrp failed"
 msgstr "initialize_job_control: getpgrp ha fallat"
 
-#: jobs.c:4447
-#, fuzzy
+#: jobs.c:4434
 msgid "initialize_job_control: no job control in background"
-msgstr "initialize_job_control: disciplina de línia"
+msgstr "initialize_job_control: no s'està executant el control de feines"
 
-#: jobs.c:4463
+#: jobs.c:4450
 msgid "initialize_job_control: line discipline"
 msgstr "initialize_job_control: disciplina de línia"
 
-#: jobs.c:4473
+#: jobs.c:4460
 msgid "initialize_job_control: setpgid"
 msgstr "initialize_job_control: setpgid"
 
-#: jobs.c:4494 jobs.c:4503
+#: jobs.c:4481 jobs.c:4490
 #, c-format
 msgid "cannot set terminal process group (%d)"
 msgstr "no s'ha pogut establir el grup de procés del terminal (%d)"
 
-#: jobs.c:4508
+#: jobs.c:4495
 msgid "no job control in this shell"
 msgstr "aquesta sessió no té control de feines"
 
-#: lib/malloc/malloc.c:353
+#: lib/malloc/malloc.c:367
 #, c-format
 msgid "malloc: failed assertion: %s\n"
 msgstr "malloc: asserció fallida: %s\n"
 
 # error intern i el \r provoca warnings
-#: lib/malloc/malloc.c:369
+#: lib/malloc/malloc.c:383
 #, c-format
 msgid ""
 "\r\n"
 "malloc: %s:%d: assertion botched\r\n"
 msgstr ""
+"\\r\n"
+"malloc: %s:%d: asserció mal executada\\r\n"
 
-#: lib/malloc/malloc.c:370 lib/malloc/malloc.c:933
+#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941
 msgid "unknown"
 msgstr "desconegut"
 
-#: lib/malloc/malloc.c:882
+#: lib/malloc/malloc.c:892
 msgid "malloc: block on free list clobbered"
 msgstr "malloc: bloc abatussat a la llista de disponibles"
 
-#: lib/malloc/malloc.c:972
+#: lib/malloc/malloc.c:980
 msgid "free: called with already freed block argument"
 msgstr "free: cridat amb un argument de bloc ja alliberat"
 
-#: lib/malloc/malloc.c:975
+#: lib/malloc/malloc.c:983
 msgid "free: called with unallocated block argument"
 msgstr "free: cridat amb un argument bloc no assignat"
 
-#: lib/malloc/malloc.c:994
+#: lib/malloc/malloc.c:1001
 msgid "free: underflow detected; mh_nbytes out of range"
 msgstr "free: underflow detectat; mh_nbytes fora del domini"
 
-#: lib/malloc/malloc.c:1001
-#, fuzzy
+#: lib/malloc/malloc.c:1007
 msgid "free: underflow detected; magic8 corrupted"
-msgstr "free: underflow detectat; mh_nbytes fora del domini"
+msgstr "free: underflow detectat; la variable magic8 està corrompuda"
 
-#: lib/malloc/malloc.c:1009
+#: lib/malloc/malloc.c:1014
 msgid "free: start and end chunk sizes differ"
 msgstr "free: les mides inicial i final del fragment difereixen"
 
-#: lib/malloc/malloc.c:1119
+#: lib/malloc/malloc.c:1176
 msgid "realloc: called with unallocated block argument"
 msgstr "realloc: cridat amb un argument de bloc no assignat"
 
-#: lib/malloc/malloc.c:1134
+#: lib/malloc/malloc.c:1191
 msgid "realloc: underflow detected; mh_nbytes out of range"
 msgstr "realloc: underflow detectat: mh_nbytes fora del domini"
 
-#: lib/malloc/malloc.c:1141
-#, fuzzy
+#: lib/malloc/malloc.c:1197
 msgid "realloc: underflow detected; magic8 corrupted"
-msgstr "realloc: underflow detectat: mh_nbytes fora del domini"
+msgstr "realloc: underflow detectat: la variable magic8 està corrumpuda"
 
-#: lib/malloc/malloc.c:1150
+#: lib/malloc/malloc.c:1205
 msgid "realloc: start and end chunk sizes differ"
 msgstr "realloc: les mides inicial i final del fragment difereixen"
 
@@ -1474,22 +1471,22 @@ msgstr "%s: la ubicació remota no és vàlida"
 msgid "network operations not supported"
 msgstr "les operacions de xarxa no estan suportades"
 
-#: locale.c:217
+#: locale.c:219
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s)"
 msgstr "setlocale: LC_ALL: no s'ha pogut canviar el local (%s)"
 
-#: locale.c:219
+#: locale.c:221
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s): %s"
 msgstr "setlocale: LC_ALL: no s'ha pogut canviar el local (%s): %s"
 
-#: locale.c:292
+#: locale.c:294
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s)"
 msgstr "setlocale: %s: no s'ha pogut canviar el local (%s)"
 
-#: locale.c:294
+#: locale.c:296
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s): %s"
 msgstr "setlocale: %s: no s'ha pogut canviar el local (%s): %s"
@@ -1507,142 +1504,138 @@ msgstr "Teniu correu nou a $_"
 msgid "The mail in %s has been read\n"
 msgstr "El correu a %s ha estat llegit\n"
 
-#: make_cmd.c:317
+#: make_cmd.c:314
 msgid "syntax error: arithmetic expression required"
 msgstr "error de sintaxi: fa falta una expressió aritmètica"
 
-#: make_cmd.c:319
+#: make_cmd.c:316
 msgid "syntax error: `;' unexpected"
 msgstr "error de sintaxi: «;» inesperat"
 
-#: make_cmd.c:320
+#: make_cmd.c:317
 #, c-format
 msgid "syntax error: `((%s))'"
 msgstr "error de sintaxi: «((%s))»"
 
-#: make_cmd.c:572
+#: make_cmd.c:569
 #, c-format
 msgid "make_here_document: bad instruction type %d"
 msgstr "make_here_document: tipus d'instrucció erroni %d"
 
-#: make_cmd.c:657
+#: make_cmd.c:668
 #, c-format
 msgid "here-document at line %d delimited by end-of-file (wanted `%s')"
 msgstr "document literal a la línia %d delimitat per EOF (volia «%s»)"
 
-#: make_cmd.c:756
+#: make_cmd.c:769
 #, c-format
 msgid "make_redirection: redirection instruction `%d' out of range"
 msgstr "make_redirection: instrucció de redirecció «%d» fora del domini"
 
-#: parse.y:2393
+#: parse.y:2428
 #, c-format
-msgid ""
-"shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line "
-"truncated"
-msgstr ""
-"shell_getc: shell_input_line_size (%zu) excedeix «SIZE_MAX» (%lu): línia "
-"truncada"
+msgid "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line truncated"
+msgstr "shell_getc: shell_input_line_size (%zu) excedeix «SIZE_MAX» (%lu): línia truncada"
 
-#: parse.y:2826
+#: parse.y:2921
 msgid "maximum here-document count exceeded"
 msgstr "excedit el nombre màxim de documents literals"
 
 # "echo $(echo" en un script
-#: parse.y:3581 parse.y:3957 parse.y:4556
+#: parse.y:3684 parse.y:4244 parse.y:6148
 #, c-format
 msgid "unexpected EOF while looking for matching `%c'"
 msgstr "EOF inesperat mentre es cercava «%c»"
 
-#: parse.y:4696
+#: parse.y:4452
 msgid "unexpected EOF while looking for `]]'"
 msgstr "EOF inesperat mentre es cercava «]]»"
 
-#: parse.y:4701
+#: parse.y:4457
 #, c-format
 msgid "syntax error in conditional expression: unexpected token `%s'"
 msgstr "error de sintaxi a l'expressió condicional: element «%s» inesperat"
 
-#: parse.y:4705
+#: parse.y:4461
 msgid "syntax error in conditional expression"
 msgstr "error de sintaxi a l'expressió condicional"
 
-#: parse.y:4783
+#: parse.y:4539
 #, c-format
 msgid "unexpected token `%s', expected `)'"
 msgstr "element «%s» inesperat, s'esperava «)»"
 
-#: parse.y:4787
+#: parse.y:4543
 msgid "expected `)'"
 msgstr "s'esperava «)»"
 
 # [[ -d ]]
-#: parse.y:4815
+#: parse.y:4571
 #, c-format
 msgid "unexpected argument `%s' to conditional unary operator"
 msgstr "argument «%s» inesperat a un operador unari condicional"
 
-#: parse.y:4819
+#: parse.y:4575
 msgid "unexpected argument to conditional unary operator"
 msgstr "argument inesperat a un operador unari condicional"
 
-#: parse.y:4865
+#: parse.y:4621
 #, c-format
 msgid "unexpected token `%s', conditional binary operator expected"
 msgstr "element «%s» inesperat, s'esperava un operador binari condicional"
 
-#: parse.y:4869
+#: parse.y:4625
 msgid "conditional binary operator expected"
 msgstr "s'esperava un operador binari condicional"
 
-#: parse.y:4891
+#: parse.y:4647
 #, c-format
 msgid "unexpected argument `%s' to conditional binary operator"
 msgstr "argument inesperat «%s» a un operador binari condicional"
 
-#: parse.y:4895
+#: parse.y:4651
 msgid "unexpected argument to conditional binary operator"
 msgstr "argument inesperat a un operador binari condicional"
 
-#: parse.y:4906
+#: parse.y:4662
 #, c-format
 msgid "unexpected token `%c' in conditional command"
 msgstr "element «%c» inesperat en una ordre condicional"
 
-#: parse.y:4909
+#: parse.y:4665
 #, c-format
 msgid "unexpected token `%s' in conditional command"
 msgstr "element «%s» inesperat en una ordre condicional"
 
-#: parse.y:4913
+#: parse.y:4669
 #, c-format
 msgid "unexpected token %d in conditional command"
 msgstr "element %d inesperat en una ordre condicional"
 
-#: parse.y:6336
+#: parse.y:6118
 #, c-format
 msgid "syntax error near unexpected token `%s'"
 msgstr "error de sintaxi a prop de l'element inesperat «%s»"
 
-#: parse.y:6355
+#: parse.y:6137
 #, c-format
 msgid "syntax error near `%s'"
 msgstr "error de sintaxi a prop de «%s»"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error: unexpected end of file"
 msgstr "error de sintaxi: final de fitxer inesperat"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error"
 msgstr "error de sintaxi"
 
-#: parse.y:6428
+#: parse.y:6216
 #, c-format
 msgid "Use \"%s\" to leave the shell.\n"
 msgstr "Useu \"%s\" per a abandonar l'intèrpret.\n"
 
-#: parse.y:6602
+#: parse.y:6394
 msgid "unexpected EOF while looking for matching `)'"
 msgstr "EOF inesperat mentre es cercava un «)»"
 
@@ -1680,96 +1673,96 @@ msgstr "xtrace_set: el punter de fitxer és NUL"
 msgid "xtrace fd (%d) != fileno xtrace fp (%d)"
 msgstr "xtrace fd (%d) != fileno xtrace fp (%d)"
 
-#: print_cmd.c:1540
+#: print_cmd.c:1545
 #, c-format
 msgid "cprintf: `%c': invalid format character"
 msgstr "cprintf: «%c»: el caràcter de format no és vàlid"
 
-#: redir.c:149 redir.c:197
+#: redir.c:150 redir.c:198
 msgid "file descriptor out of range"
 msgstr "descriptor de fitxer fora del domini"
 
-#: redir.c:204
+#: redir.c:205
 #, c-format
 msgid "%s: ambiguous redirect"
 msgstr "%s: redirecció ambigua"
 
 # opció noclobber
-#: redir.c:208
+#: redir.c:209
 #, c-format
 msgid "%s: cannot overwrite existing file"
 msgstr "%s: no es pot escriure sobre un fitxer existent"
 
-#: redir.c:213
+#: redir.c:214
 #, c-format
 msgid "%s: restricted: cannot redirect output"
 msgstr "%s: restricció: no podeu redirigir la sortida"
 
-#: redir.c:218
+#: redir.c:219
 #, c-format
 msgid "cannot create temp file for here-document: %s"
 msgstr "no s'ha pogut crear el fitxer temporal per a un document literal: %s"
 
-#: redir.c:222
+#: redir.c:223
 #, c-format
 msgid "%s: cannot assign fd to variable"
 msgstr "%s: no és possible assignar un fd a una variable"
 
-#: redir.c:649
+#: redir.c:650
 msgid "/dev/(tcp|udp)/host/port not supported without networking"
 msgstr "/dev/(tcp|udp)/host/port no està suportat si no hi ha xarxa"
 
-#: redir.c:938 redir.c:1053 redir.c:1114 redir.c:1284
+#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303
 msgid "redirection error: cannot duplicate fd"
 msgstr "error de redirecció: no es pot duplicar l'fd"
 
-#: shell.c:347
+#: shell.c:353
 msgid "could not find /tmp, please create!"
 msgstr "no s'ha trobat el directori /tmp, sis-plau creeu-lo!"
 
-#: shell.c:351
+#: shell.c:357
 msgid "/tmp must be a valid directory name"
 msgstr "/tmp ha de ser un nom de directori vàlid"
 
-#: shell.c:804
+#: shell.c:826
 msgid "pretty-printing mode ignored in interactive shells"
-msgstr ""
+msgstr "el mode «pretty-printing» s'ignora en sessions interactives"
 
-#: shell.c:948
+#: shell.c:972
 #, c-format
 msgid "%c%c: invalid option"
 msgstr "%c%c: l'opció no és vàlida"
 
-#: shell.c:1319
+#: shell.c:1343
 #, c-format
 msgid "cannot set uid to %d: effective uid %d"
 msgstr "no s'ha pogut establir l'uid com a %d: uid effectiu %d"
 
-#: shell.c:1330
+#: shell.c:1354
 #, c-format
 msgid "cannot set gid to %d: effective gid %d"
 msgstr "no s'ha pogut establir el gid com a %d: gid effectiu %d"
 
-#: shell.c:1518
+#: shell.c:1544
 msgid "cannot start debugger; debugging mode disabled"
 msgstr "no es pot iniciar el depurador; mode de depuració desactivat"
 
-#: shell.c:1632
+#: shell.c:1658
 #, c-format
 msgid "%s: Is a directory"
 msgstr "%s: És un directori"
 
-#: shell.c:1881
+#: shell.c:1907
 msgid "I have no name!"
 msgstr "No teniu nom!"
 
-#: shell.c:2035
+#: shell.c:2061
 #, c-format
 msgid "GNU bash, version %s-(%s)\n"
 msgstr "GNU bash, versió %s-(%s)\n"
 
 #
-#: shell.c:2036
+#: shell.c:2062
 #, c-format
 msgid ""
 "Usage:\t%s [GNU long option] [option] ...\n"
@@ -1778,324 +1771,321 @@ msgstr ""
 "Sintaxi:  %s [opció GNU llarga] [opció] ...\n"
 "          %s [opció GNU llarga] [opció] fitxer-script ...\n"
 
-#: shell.c:2038
+#: shell.c:2064
 msgid "GNU long options:\n"
 msgstr "Opcions GNU llargues:\n"
 
-#: shell.c:2042
+#: shell.c:2068
 msgid "Shell options:\n"
 msgstr "Opcions de l'intèrpret:\n"
 
-#: shell.c:2043
+#: shell.c:2069
 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n"
 msgstr "\t-ilrsD, o -c ordre, o bé -O opció_intèrpret\t(només invocació)\n"
 
-#: shell.c:2062
+#: shell.c:2088
 #, c-format
 msgid "\t-%s or -o option\n"
 msgstr "\t-%s, o bé -o opció\n"
 
-#: shell.c:2068
+#: shell.c:2094
 #, c-format
 msgid "Type `%s -c \"help set\"' for more information about shell options.\n"
-msgstr ""
-"Feu «%s -c \"help set\"» per a informació sobre les opcions de l'intèrpret.\n"
+msgstr "Feu «%s -c \"help set\"» per a informació sobre les opcions de l'intèrpret.\n"
 
-#: shell.c:2069
+#: shell.c:2095
 #, c-format
 msgid "Type `%s -c help' for more information about shell builtin commands.\n"
 msgstr "Feu «%s -c help» per a obtenir informació sobre les ordres internes.\n"
 
-#: shell.c:2070
+#: shell.c:2096
 #, c-format
 msgid "Use the `bashbug' command to report bugs.\n"
 msgstr "Feu servir l'ordre «bashbug» per a informar de «bugs».\n"
 
-#: shell.c:2072
+#: shell.c:2098
 #, c-format
 msgid "bash home page: <http://www.gnu.org/software/bash>\n"
 msgstr "pàgina web de bash: <http://www.gnu.org/software/bash>\n"
 
-#: shell.c:2073
+#: shell.c:2099
 #, c-format
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 msgstr "Ajuda general per a programari GNU: <http://www.gnu.org/gethelp/>\n"
 
-#: sig.c:757
+#: sig.c:765
 #, c-format
 msgid "sigprocmask: %d: invalid operation"
 msgstr "sigprocmask: %d: l'operació no és vàlida"
 
-#: siglist.c:47
+#: siglist.c:48
 msgid "Bogus signal"
 msgstr "Senyal no fiable"
 
 # Senyals POSIX
-#: siglist.c:50
+#: siglist.c:51
 msgid "Hangup"
 msgstr "Desconnexió"
 
-#: siglist.c:54
+#: siglist.c:55
 msgid "Interrupt"
 msgstr "Interrupció"
 
-#: siglist.c:58
+#: siglist.c:59
 msgid "Quit"
 msgstr "Sortida"
 
-#: siglist.c:62
+#: siglist.c:63
 msgid "Illegal instruction"
 msgstr "Instrucció il·legal"
 
-#: siglist.c:66
+#: siglist.c:67
 msgid "BPT trace/trap"
 msgstr "Traçat/trampa BPT"
 
-#: siglist.c:74
+#: siglist.c:75
 msgid "ABORT instruction"
 msgstr "Instrucció «ABORT»"
 
-#: siglist.c:78
+#: siglist.c:79
 msgid "EMT instruction"
 msgstr "Instrucció «EMT»"
 
-#: siglist.c:82
+#: siglist.c:83
 msgid "Floating point exception"
 msgstr "Excepció de coma flotant"
 
-#: siglist.c:86
+#: siglist.c:87
 msgid "Killed"
 msgstr "Mort"
 
-#: siglist.c:90
+#: siglist.c:91
 msgid "Bus error"
 msgstr "Error de bus"
 
-#: siglist.c:94
+#: siglist.c:95
 msgid "Segmentation fault"
 msgstr "Violació de segment"
 
-#: siglist.c:98
+#: siglist.c:99
 msgid "Bad system call"
 msgstr "Crida de sistema errònia"
 
-#: siglist.c:102
+#: siglist.c:103
 msgid "Broken pipe"
 msgstr "Canonada trencada"
 
-#: siglist.c:106
+#: siglist.c:107
 msgid "Alarm clock"
 msgstr "Alarma"
 
-#: siglist.c:110
+#: siglist.c:111
 msgid "Terminated"
 msgstr "Finalitzat"
 
-#: siglist.c:114
+#: siglist.c:115
 msgid "Urgent IO condition"
 msgstr "Estat E/S urgent"
 
-#: siglist.c:118
+#: siglist.c:119
 msgid "Stopped (signal)"
 msgstr "Aturat (senyal)"
 
-#: siglist.c:126
+#: siglist.c:127
 msgid "Continue"
 msgstr "Continua"
 
-#: siglist.c:134
+#: siglist.c:135
 msgid "Child death or stop"
 msgstr "Procés inferior mort o aturat"
 
-#: siglist.c:138
+#: siglist.c:139
 msgid "Stopped (tty input)"
 msgstr "Aturat (entrada tty)"
 
-#: siglist.c:142
+#: siglist.c:143
 msgid "Stopped (tty output)"
 msgstr "Aturat (sortida tty)"
 
-#: siglist.c:146
+#: siglist.c:147
 msgid "I/O ready"
 msgstr "E/S a punt"
 
-#: siglist.c:150
+#: siglist.c:151
 msgid "CPU limit"
 msgstr "Limitació de CPU"
 
-#: siglist.c:154
+#: siglist.c:155
 msgid "File limit"
 msgstr "Limitació de fitxers"
 
-#: siglist.c:158
+#: siglist.c:159
 msgid "Alarm (virtual)"
 msgstr "Alarma (virtual)"
 
-#: siglist.c:162
+#: siglist.c:163
 msgid "Alarm (profile)"
 msgstr "Alarma (perfil)"
 
-#: siglist.c:166
+#: siglist.c:167
 msgid "Window changed"
 msgstr "Canvi de finestra"
 
-#: siglist.c:170
+#: siglist.c:171
 msgid "Record lock"
 msgstr "Bloqueig de registre"
 
-#: siglist.c:174
+#: siglist.c:175
 msgid "User signal 1"
 msgstr "Senyal d'usuari 1"
 
-#: siglist.c:178
+#: siglist.c:179
 msgid "User signal 2"
 msgstr "Senyal d'usuari 2"
 
-#: siglist.c:182
+#: siglist.c:183
 msgid "HFT input data pending"
 msgstr "Dades HFT d'entrada pendents"
 
-#: siglist.c:186
+#: siglist.c:187
 msgid "power failure imminent"
 msgstr "fallada imminent de l'alimentació"
 
-#: siglist.c:190
+#: siglist.c:191
 msgid "system crash imminent"
 msgstr "fallada imminent del sistema"
 
-#: siglist.c:194
+#: siglist.c:195
 msgid "migrate process to another CPU"
 msgstr "migració del procés a una altra CPU"
 
-#: siglist.c:198
+#: siglist.c:199
 msgid "programming error"
 msgstr "error de programació"
 
-#: siglist.c:202
+#: siglist.c:203
 msgid "HFT monitor mode granted"
 msgstr "mode de monitoratge HFT concedit"
 
-#: siglist.c:206
+#: siglist.c:207
 msgid "HFT monitor mode retracted"
 msgstr "mode de monitoratge HFT retractat"
 
-#: siglist.c:210
+#: siglist.c:211
 msgid "HFT sound sequence has completed"
 msgstr "seqüència d'àudio HFT completada"
 
-#: siglist.c:214
+#: siglist.c:215
 msgid "Information request"
 msgstr "Petició d'informació"
 
-#: siglist.c:222 siglist.c:224
+#: siglist.c:223 siglist.c:225
 #, c-format
 msgid "Unknown Signal #%d"
 msgstr "Senyal Desconegut #%d"
 
 # missatge similar a subst.c:75XX
-#: subst.c:1476 subst.c:1666
+#: subst.c:1480 subst.c:1670
 #, c-format
 msgid "bad substitution: no closing `%s' in %s"
 msgstr "substitució errònia: falta un «%s» a %s"
 
 # foo[1]=(1 2 3)
-#: subst.c:3281
+#: subst.c:3307
 #, c-format
 msgid "%s: cannot assign list to array member"
 msgstr "%s: no és possible assignar llistes a l'element d'un vector"
 
-#: subst.c:5910 subst.c:5926
+#: subst.c:6048 subst.c:6064
 msgid "cannot make pipe for process substitution"
 msgstr "no s'ha pogut crear la canonada per a la substitució de procés"
 
-#: subst.c:5985
+#: subst.c:6124
 msgid "cannot make child for process substitution"
 msgstr "no s'ha pogut crear el fill per a la substitució de procés"
 
-#: subst.c:6059
+#: subst.c:6198
 #, c-format
 msgid "cannot open named pipe %s for reading"
 msgstr "no s'ha pogut obrir la canonada %s per a lectura"
 
-#: subst.c:6061
+#: subst.c:6200
 #, c-format
 msgid "cannot open named pipe %s for writing"
 msgstr "no s'ha pogut obrir la canonada %s per a escriptura"
 
-#: subst.c:6084
+#: subst.c:6223
 #, c-format
 msgid "cannot duplicate named pipe %s as fd %d"
 msgstr "no s'ha pogut duplicar la canonada %s com a fd %d"
 
-#: subst.c:6213
+#: subst.c:6370
 msgid "command substitution: ignored null byte in input"
 msgstr "substitució d'ordre: s'ignora un octet nul en l'entrada"
 
-#: subst.c:6353
+#: subst.c:6533
 msgid "cannot make pipe for command substitution"
 msgstr "no s'ha pogut crear la canonada per a la substitució d'ordre"
 
-#: subst.c:6397
+#: subst.c:6580
 msgid "cannot make child for command substitution"
 msgstr "no s'ha pogut crear un fill per a la substitució d'ordre"
 
-#: subst.c:6423
+#: subst.c:6613
 msgid "command_substitute: cannot duplicate pipe as fd 1"
 msgstr "command_substitute: no s'ha pogut duplicar la canonada com a fd 1"
 
 # buscar context
-#: subst.c:6883 subst.c:9952
+#: subst.c:7082 subst.c:10252
 #, c-format
 msgid "%s: invalid variable name for name reference"
 msgstr "%s: el nom de la variable referenciada no és vàlid"
 
-#: subst.c:6979 subst.c:6997 subst.c:7169
+#: subst.c:7178 subst.c:7196 subst.c:7369
 #, c-format
 msgid "%s: invalid indirect expansion"
 msgstr "%s: expansió indirecta no vàlida"
 
-#: subst.c:7013 subst.c:7177
+#: subst.c:7212 subst.c:7377
 #, c-format
 msgid "%s: invalid variable name"
 msgstr "%s: nom de variable no vàlid"
 
-#: subst.c:7256
-#, fuzzy, c-format
+#: subst.c:7478
+#, c-format
 msgid "%s: parameter not set"
-msgstr "%s: paràmetre nul o no definit"
+msgstr "%s: paràmetre no definit"
 
-#: subst.c:7258
+#: subst.c:7480
 #, c-format
 msgid "%s: parameter null or not set"
 msgstr "%s: paràmetre nul o no definit"
 
-#: subst.c:7503 subst.c:7518
+#: subst.c:7727 subst.c:7742
 #, c-format
 msgid "%s: substring expression < 0"
 msgstr "%s: expressió de subcadena < 0"
 
-#: subst.c:9281 subst.c:9302
+#: subst.c:9560 subst.c:9587
 #, c-format
 msgid "%s: bad substitution"
 msgstr "%s: substitució errònia"
 
-#: subst.c:9390
+#: subst.c:9678
 #, c-format
 msgid "$%s: cannot assign in this way"
 msgstr "$%s: no és possible assignar d'aquesta manera"
 
-#: subst.c:9814
-msgid ""
-"future versions of the shell will force evaluation as an arithmetic "
-"substitution"
+#: subst.c:10111
+msgid "future versions of the shell will force evaluation as an arithmetic substitution"
 msgstr "en futures versions de bash s'avaluarà com a substitució aritmètica"
 
-#: subst.c:10367
+#: subst.c:10795
 #, c-format
 msgid "bad substitution: no closing \"`\" in %s"
 msgstr "subtitució errònia: falta un caràcter «`» final a %s"
 
-#: subst.c:11434
+#: subst.c:11874
 #, c-format
 msgid "no match: %s"
 msgstr "cap coincidència: %s"
@@ -2118,139 +2108,140 @@ msgstr "s'esperava «)»"
 msgid "`)' expected, found %s"
 msgstr "s'esperava «)», s'ha trobat %s"
 
-#: test.c:466 test.c:799
+#: test.c:469 test.c:814
 #, c-format
 msgid "%s: binary operator expected"
 msgstr "%s: s'esperava un operador binari"
 
-#: test.c:756 test.c:759
+#: test.c:771 test.c:774
 #, c-format
 msgid "%s: unary operator expected"
 msgstr "%s: s'esperava un operador unari"
 
-#: test.c:881
+#: test.c:896
 msgid "missing `]'"
 msgstr "falta un «]»"
 
-#: test.c:899
-#, fuzzy, c-format
+#: test.c:914
+#, c-format
 msgid "syntax error: `%s' unexpected"
-msgstr "error de sintaxi: «;» inesperat"
+msgstr "error de sintaxi: «%s» inesperat"
 
 #: trap.c:220
 msgid "invalid signal number"
 msgstr "el número de senyal no és vàlid"
 
-#: trap.c:325
-#, fuzzy, c-format
+#: trap.c:323
+#, c-format
 msgid "trap handler: maximum trap handler level exceeded (%d)"
-msgstr "eval: excedit el nombre màxim d'avaluacions imbricades (%d)"
+msgstr "trap handler: excedit el nivell màxim d'interceptació de senyals (%d)"
 
 # internal warning
-#: trap.c:414
+#: trap.c:412
 #, c-format
 msgid "run_pending_traps: bad value in trap_list[%d]: %p"
 msgstr "run_pending_traps: valor incorrecte a trap_list[%d]: %p"
 
 # internal warning
-#: trap.c:418
+#: trap.c:416
 #, c-format
-msgid ""
-"run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
-msgstr ""
+msgid "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
+msgstr "run_pending_traps: el gestor de senyal és SIG_DFL, em re-envio %d (%s) a mi mateix"
 
-#: trap.c:487
+#: trap.c:509
 #, c-format
 msgid "trap_handler: bad signal %d"
 msgstr "trap_handler: senyal erroni %d"
 
-#: variables.c:421
+#: variables.c:424
 #, c-format
 msgid "error importing function definition for `%s'"
 msgstr "error en importar la definició de funció de «%s»"
 
-#: variables.c:833
+#: variables.c:838
 #, c-format
 msgid "shell level (%d) too high, resetting to 1"
 msgstr "el nivell de l'intèrpret (%d) és massa elevat, es restableix a 1"
 
 # error intern
-#: variables.c:2674
+#: variables.c:2642
 msgid "make_local_variable: no function context at current scope"
-msgstr ""
+msgstr "make_local_variable: no existeix un context de funció en l'àmbit actual"
 
-#: variables.c:2693
+#: variables.c:2661
 #, c-format
 msgid "%s: variable may not be assigned value"
 msgstr "%s: no és possible assignar un valor a la variable"
 
+#: variables.c:2818 variables.c:2874
+#, c-format
+msgid "%s: cannot inherit value from incompatible type"
+msgstr "%s: no es pot heretar un valor de tipus incompatible"
+
 # buscar context
-#: variables.c:3475
+#: variables.c:3459
 #, c-format
 msgid "%s: assigning integer to name reference"
 msgstr "%s: assignació numèrica a una variable referència"
 
 # error intern
-#: variables.c:4404
+#: variables.c:4390
 msgid "all_local_variables: no function context at current scope"
-msgstr ""
+msgstr "all_local_variables: no existeix un context de función en l'àmbit actual"
 
-#: variables.c:4771
+#: variables.c:4757
 #, c-format
 msgid "%s has null exportstr"
 msgstr "el paràmetre «exportstr» de la variable %s és nul"
 
-#: variables.c:4776 variables.c:4785
+#: variables.c:4762 variables.c:4771
 #, c-format
 msgid "invalid character %d in exportstr for %s"
 msgstr "el caràcter %d en el paràmetre «exportstr» de %s no és vàlid"
 
-#: variables.c:4791
+#: variables.c:4777
 #, c-format
 msgid "no `=' in exportstr for %s"
 msgstr "falta un «=» en el paràmetre «exportstr» de %s"
 
 # error intern
-#: variables.c:5331
+#: variables.c:5317
 msgid "pop_var_context: head of shell_variables not a function context"
-msgstr ""
+msgstr "pop_var_context: la capçalera de shell_variables no és un context de funció"
 
 # error intern
-#: variables.c:5344
+#: variables.c:5330
 msgid "pop_var_context: no global_variables context"
-msgstr ""
+msgstr "pop_var_context: no existeix un context de global_variables"
 
 # error intern
-#: variables.c:5424
+#: variables.c:5410
 msgid "pop_scope: head of shell_variables not a temporary environment scope"
-msgstr ""
+msgstr "pop_scope: la capçaleras shell_variables no és un àmbit temporal d'entorn"
 
 # error intern
-#: variables.c:6387
+#: variables.c:6400
 #, c-format
 msgid "%s: %s: cannot open as FILE"
 msgstr "%s: %s: no s'ha pogut obrir com a FITXER"
 
 # error intern
-#: variables.c:6392
+#: variables.c:6405
 #, c-format
 msgid "%s: %s: invalid value for trace file descriptor"
-msgstr ""
+msgstr "%s: %s: valor invàlid per a una traça de descriptor de fitxer"
 
-#: variables.c:6437
+#: variables.c:6450
 #, c-format
 msgid "%s: %s: compatibility value out of range"
 msgstr "%s: %s: el valor de compatibilitat és fora del domini"
 
 #: version.c:46 version2.c:46
-#, fuzzy
-msgid "Copyright (C) 2020 Free Software Foundation, Inc."
-msgstr "Copyright (C) 2012 Free Software Foundation, Inc."
+msgid "Copyright (C) 2022 Free Software Foundation, Inc."
+msgstr "Copyright (C) 2022 Free Software Foundation, Inc."
 
 #: version.c:47 version2.c:47
-msgid ""
-"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
-"html>\n"
+msgid "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n"
 msgstr ""
 "Llicència GPLv3+: GNU GPL versió 3 o posterior\n"
 "  <http://gnu.org/licenses/gpl.html>\n"
@@ -2262,8 +2253,7 @@ msgstr "GNU bash, versió %s (%s)\n"
 
 #: version.c:91 version2.c:91
 msgid "This is free software; you are free to change and redistribute it."
-msgstr ""
-"Aquest programa és lliure; sou lliures de modificar-lo i redistribuir-lo."
+msgstr "Aquest programa és lliure; sou lliures de modificar-lo i redistribuir-lo."
 
 #: version.c:92 version2.c:92
 msgid "There is NO WARRANTY, to the extent permitted by law."
@@ -2301,12 +2291,8 @@ msgstr "unalias [-a] nom [nom ...]"
 
 # help bind
 #: builtins.c:53
-msgid ""
-"bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-"
-"x keyseq:shell-command] [keyseq:readline-function or readline-command]"
-msgstr ""
-"bind [-lpsvPSVX] [-m mapa] [-f fitxer] [-q nom] [-u nom] [-r tecles] [-x "
-"tecles:ordre-intèrpret] [tecles:funció-readline o ordre-readline]"
+msgid "bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-x keyseq:shell-command] [keyseq:readline-function or readline-command]"
+msgstr "bind [-lpsvPSVX] [-m mapa] [-f fitxer] [-q nom] [-u nom] [-r tecles] [-x tecles:ordre-intèrpret] [tecles:funció-readline o ordre-readline]"
 
 #: builtins.c:56
 msgid "break [n]"
@@ -2337,14 +2323,12 @@ msgid "command [-pVv] command [arg ...]"
 msgstr "command [-pVv] ordre [arg ...]"
 
 #: builtins.c:78
-#, fuzzy
-msgid "declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]"
-msgstr "declare [-aAfFgilnrtux] [-p] [nom[=valor] ...]"
+msgid "declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] [name ...]"
+msgstr "declare [-aAfFgiIlnrtux] [nom[=valor] ...] o declare -p [-aAfFilnrtux] [nom ...]"
 
 #: builtins.c:80
-#, fuzzy
-msgid "typeset [-aAfFgiIlnrtux] [-p] name[=value] ..."
-msgstr "typeset [-aAfFgilnrtux] [-p] nom[=valor] ..."
+msgid "typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] [name ...]"
+msgstr "typeset [-aAfFgiIlnrtux] nom[=valor] ... o typeset -p [-aAfFilnrtux] [nom ...]"
 
 #: builtins.c:82
 msgid "local [option] name[=value] ..."
@@ -2367,14 +2351,12 @@ msgid "eval [arg ...]"
 msgstr "eval [arg ...]"
 
 #: builtins.c:96
-#, fuzzy
 msgid "getopts optstring name [arg ...]"
-msgstr "getopts cadena nom [arg]"
+msgstr "getopts cadena nom [arg ...]"
 
 #: builtins.c:98
-#, fuzzy
 msgid "exec [-cl] [-a name] [command [argument ...]] [redirection ...]"
-msgstr "exec [-cl] [-a nom] [ordre [arguments ...]] [redirecció ...]"
+msgstr "exec [-cl] [-a nom] [ordre [argument ...]] [redirecció ...]"
 
 #: builtins.c:100
 msgid "exit [n]"
@@ -2405,12 +2387,8 @@ msgid "help [-dms] [pattern ...]"
 msgstr "help [-dms] [patró ...]"
 
 #: builtins.c:123
-msgid ""
-"history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg "
-"[arg...]"
-msgstr ""
-"history [-c] [-d offset] [n] o history -anrw [fitxer] o history -ps arg "
-"[arg...]"
+msgid "history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg...]"
+msgstr "history [-c] [-d offset] [n] o history -anrw [fitxer] o history -ps arg [arg...]"
 
 #: builtins.c:127
 msgid "jobs [-lnprs] [jobspec ...] or jobs -x command [args]"
@@ -2421,31 +2399,24 @@ msgid "disown [-h] [-ar] [jobspec ... | pid ...]"
 msgstr "disown [-h] [-ar] [feina ... | pid ...]"
 
 #: builtins.c:134
-msgid ""
-"kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l "
-"[sigspec]"
-msgstr ""
-"kill [-s senyal | -n númsenyal | -senyal] pid | feina ... o kill -l [senyal]"
+msgid "kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]"
+msgstr "kill [-s senyal | -n númsenyal | -senyal] pid | feina ... o kill -l [senyal]"
 
 #: builtins.c:136
 msgid "let arg [arg ...]"
 msgstr "let arg [arg ...]"
 
 #: builtins.c:138
-msgid ""
-"read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p "
-"prompt] [-t timeout] [-u fd] [name ...]"
-msgstr ""
-"read [-ers] [-a vector] [-d delim] [-i text] [-n núm] [-N núm] [-p introd] [-"
-"t espera] [-u fd] [nom ...]"
+msgid "read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]"
+msgstr "read [-ers] [-a vector] [-d delim] [-i text] [-n núm] [-N núm] [-p introd] [-t espera] [-u fd] [nom ...]"
 
 #: builtins.c:140
 msgid "return [n]"
 msgstr "return [n]"
 
 #: builtins.c:142
-msgid "set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]"
-msgstr "set [-abefhkmnptuvxBCHP] [-o nom-opció] [--] [arg ...]"
+msgid "set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]"
+msgstr "set [-abefhkmnptuvxBCEHPT] [-o nom-opció] [--] [-] [arg ...]"
 
 #: builtins.c:144
 msgid "unset [-f] [-v] [-n] [name ...]"
@@ -2492,17 +2463,16 @@ msgid "type [-afptP] name [name ...]"
 msgstr "type [-afptP] nom [nom ...]"
 
 #: builtins.c:171
-msgid "ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]"
-msgstr "ulimit [-SHabcdefiklmnpqrstuvxPT] [límit]"
+msgid "ulimit [-SHabcdefiklmnpqrstuvxPRT] [limit]"
+msgstr "ulimit [-SHabcdefiklmnpqrstuvxPRT] [límit]"
 
 #: builtins.c:174
 msgid "umask [-p] [-S] [mode]"
 msgstr "umask [-p] [-S] [mode]"
 
 #: builtins.c:177
-#, fuzzy
 msgid "wait [-fn] [-p var] [id ...]"
-msgstr "wait [-n] [id ...]"
+msgstr "wait [-fn] [-p var] [id ...]"
 
 #: builtins.c:181
 msgid "wait [pid ...]"
@@ -2529,19 +2499,16 @@ msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac"
 msgstr "case PARAULA in [PATRÓ [| PATRÓ]...) ORDRES ;;]... esac"
 
 #: builtins.c:194
-msgid ""
-"if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else "
-"COMMANDS; ] fi"
-msgstr ""
-"if ORDRES; then ORDRES; [ elif ORDRES; then ORDRES; ]... [ else ORDRES; ] fi"
+msgid "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi"
+msgstr "if ORDRES; then ORDRES; [ elif ORDRES; then ORDRES; ]... [ else ORDRES; ] fi"
 
 #: builtins.c:196
-msgid "while COMMANDS; do COMMANDS; done"
-msgstr "while ORDRES; do ORDRES; done"
+msgid "while COMMANDS; do COMMANDS-2; done"
+msgstr "while ORDRES; do ORDRES-2; done"
 
 #: builtins.c:198
-msgid "until COMMANDS; do COMMANDS; done"
-msgstr "until ORDRES; do ORDRES; done"
+msgid "until COMMANDS; do COMMANDS-2; done"
+msgstr "until ORDRES; do ORDRES-2; done"
 
 #: builtins.c:200
 msgid "coproc [NAME] command [redirections]"
@@ -2592,45 +2559,24 @@ msgid "printf [-v var] format [arguments]"
 msgstr "printf [-v var] format [arguments]"
 
 #: builtins.c:231
-#, fuzzy
-msgid ""
-"complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-"
-"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S "
-"suffix] [name ...]"
-msgstr ""
-"complete [-abcdefgjksuv] [-pr] [-DE] [-o opció] [-A acció] [-G patró] [-W "
-"llista]  [-F funció] [-C ordre] [-X filtre] [-P prefix] [-S sufix] [nom ...]"
+msgid "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [name ...]"
+msgstr "complete [-abcdefgjksuv] [-pr] [-DEI] [-o opció] [-A acció] [-G patró] [-W paraules] [-F funció] [-C ordre] [-X patró] [-P prefix] [-S sufix] [nom ...]"
 
 #: builtins.c:235
-#, fuzzy
-msgid ""
-"compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-"
-"F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]"
-msgstr ""
-"compgen [-abcdefgjksuv] [-o opció] [-A acció] [-G patró] [-W paraules]\n"
-"[-F funció] [-C ordre] [-X filtre] [-P prefix] [-S sufix] [paraula]"
+msgid "compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]"
+msgstr "compgen [-abcdefgjksuv] [-o opció] [-A acció] [-G patró] [-W paraules] [-F funció] [-C ordre] [-X filtre] [-P prefix] [-S sufix] [paraula]"
 
 #: builtins.c:239
-#, fuzzy
 msgid "compopt [-o|+o option] [-DEI] [name ...]"
-msgstr "compopt [-o|+o opció] [-DE] [nom ...]"
+msgstr "compopt [-o|+o opció] [-DEI] [nom ...]"
 
 #: builtins.c:242
-msgid ""
-"mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C "
-"callback] [-c quantum] [array]"
-msgstr ""
-"mapfile [-d delim] [-n nombre] [-O origen] [-s nombre] [-t] [-u fd] [-C "
-"callback] [-c quàntum] [vector]"
+msgid "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]"
+msgstr "mapfile [-d delim] [-n nombre] [-O origen] [-s nombre] [-t] [-u fd] [-C callback] [-c quàntum] [vector]"
 
 #: builtins.c:244
-#, fuzzy
-msgid ""
-"readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C "
-"callback] [-c quantum] [array]"
-msgstr ""
-"readarray [-n nombre] [-O origen] [-s nombre] [-t] [-u fd] [-C callback] [-c "
-"quàntum] [vector]"
+msgid "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]"
+msgstr "readarray  [-d delim] [-n nombre] [-O origen] [-s nombre] [-t] [-u fd] [-C callback] [-c quàntum] [vector]"
 
 #: builtins.c:256
 msgid ""
@@ -2647,8 +2593,7 @@ msgid ""
 "      -p\tprint all defined aliases in a reusable format\n"
 "    \n"
 "    Exit Status:\n"
-"    alias returns true unless a NAME is supplied for which no alias has "
-"been\n"
+"    alias returns true unless a NAME is supplied for which no alias has been\n"
 "    defined."
 msgstr ""
 "Defineix o mostra àlies.\n"
@@ -2695,30 +2640,25 @@ msgid ""
 "    Options:\n"
 "      -m  keymap         Use KEYMAP as the keymap for the duration of this\n"
 "                         command.  Acceptable keymap names are emacs,\n"
-"                         emacs-standard, emacs-meta, emacs-ctlx, vi, vi-"
-"move,\n"
+"                         emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,\n"
 "                         vi-command, and vi-insert.\n"
 "      -l                 List names of functions.\n"
 "      -P                 List function names and bindings.\n"
 "      -p                 List functions and bindings in a form that can be\n"
 "                         reused as input.\n"
-"      -S                 List key sequences that invoke macros and their "
-"values\n"
-"      -s                 List key sequences that invoke macros and their "
-"values\n"
+"      -S                 List key sequences that invoke macros and their values\n"
+"      -s                 List key sequences that invoke macros and their values\n"
 "                         in a form that can be reused as input.\n"
 "      -V                 List variable names and values\n"
 "      -v                 List variable names and values in a form that can\n"
 "                         be reused as input.\n"
 "      -q  function-name  Query about which keys invoke the named function.\n"
-"      -u  function-name  Unbind all keys which are bound to the named "
-"function.\n"
+"      -u  function-name  Unbind all keys which are bound to the named function.\n"
 "      -r  keyseq         Remove the binding for KEYSEQ.\n"
 "      -f  filename       Read key bindings from FILENAME.\n"
 "      -x  keyseq:shell-command\tCause SHELL-COMMAND to be executed when\n"
 "    \t\t\t\tKEYSEQ is entered.\n"
-"      -X                 List key sequences bound with -x and associated "
-"commands\n"
+"      -X                 List key sequences bound with -x and associated commands\n"
 "                         in a form that can be reused as input.\n"
 "    \n"
 "    Exit Status:\n"
@@ -2734,8 +2674,7 @@ msgstr ""
 "    Opcions:\n"
 "      -m mapa     Usa MAPA com a mapa de tecles mentre duri aquesta\n"
 "                  ordre.  Els noms de mapes acceptables són emacs, emacs-\n"
-"                  standard, emacs-meta, emacs-ctlx, vi, vi-move, vi-"
-"command,\n"
+"                  standard, emacs-meta, emacs-ctlx, vi, vi-move, vi-command,\n"
 "                  i vi-insert.\n"
 "      -l          Mostra els noms de les funcions\n"
 "      -P          Mostra els noms de les funcions i els vincles de tecla.\n"
@@ -2744,15 +2683,13 @@ msgstr ""
 "      -S          Mostra les seqüències de tecles que invoquen macros i els\n"
 "                  seus valors respectius.\n"
 "      -s          Mostra les seqüències de tecles que invoquen macros i els\n"
-"                  seus valors respectius en un format que es pot "
-"reutilitzar\n"
+"                  seus valors respectius en un format que es pot reutilitzar\n"
 "                  com a entrada.\n"
 "      -V          Mostra els noms de les variables i els seus valors.\n"
 "      -v          Mostra els noms de les variables i els seus respectius\n"
 "                  valors en un format que es pot reutilitzar com a entrada.\n"
 "      -q funció   Consulta quines tecles invoquen la funció especificada.\n"
-"      -u funció   Desvincula les tecles vinculades a la funció "
-"especificada.\n"
+"      -u funció   Desvincula les tecles vinculades a la funció especificada.\n"
 "      -r tecles   Elimina el vincle associat a TECLES.\n"
 "      -f fitxer   Obté els vincles de tecles de FITXER.\n"
 "      -x tecles:ordre     Fa que s'executi ORDRE quan es prem TECLES.\n"
@@ -2802,14 +2739,12 @@ msgstr ""
 "    L'estat de sortida és 0 excepte si N és més petit que 1."
 
 #: builtins.c:354
-#, fuzzy
 msgid ""
 "Execute shell builtins.\n"
 "    \n"
 "    Execute SHELL-BUILTIN with arguments ARGs without performing command\n"
 "    lookup.  This is useful when you wish to reimplement a shell builtin\n"
-"    as a shell function, but need to execute the builtin within the "
-"function.\n"
+"    as a shell function, but need to execute the builtin within the function.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the exit status of SHELL-BUILTIN, or false if SHELL-BUILTIN is\n"
@@ -2823,8 +2758,7 @@ msgstr ""
 "    pròpia funció.\n"
 "\n"
 "    Estat de sortida:\n"
-"    Torna l'estat de sortida de ORDRE-INTERNA, o fals si ORDRE-INTERNA no "
-"és\n"
+"    Torna l'estat de sortida de ORDRE-INTERNA, o fals si ORDRE-INTERNA no és\n"
 "    una ordre interna."
 
 # help caller
@@ -2860,22 +2794,16 @@ msgstr ""
 msgid ""
 "Change the shell working directory.\n"
 "    \n"
-"    Change the current directory to DIR.  The default DIR is the value of "
-"the\n"
+"    Change the current directory to DIR.  The default DIR is the value of the\n"
 "    HOME shell variable.\n"
 "    \n"
-"    The variable CDPATH defines the search path for the directory "
-"containing\n"
-"    DIR.  Alternative directory names in CDPATH are separated by a colon "
-"(:).\n"
-"    A null directory name is the same as the current directory.  If DIR "
-"begins\n"
+"    The variable CDPATH defines the search path for the directory containing\n"
+"    DIR.  Alternative directory names in CDPATH are separated by a colon (:).\n"
+"    A null directory name is the same as the current directory.  If DIR begins\n"
 "    with a slash (/), then CDPATH is not used.\n"
 "    \n"
-"    If the directory is not found, and the shell option `cdable_vars' is "
-"set,\n"
-"    the word is assumed to be  a variable name.  If that variable has a "
-"value,\n"
+"    If the directory is not found, and the shell option `cdable_vars' is set,\n"
+"    the word is assumed to be  a variable name.  If that variable has a value,\n"
 "    its value is used for DIR.\n"
 "    \n"
 "    Options:\n"
@@ -2891,13 +2819,11 @@ msgid ""
 "    \t\tattributes as a directory containing the file attributes\n"
 "    \n"
 "    The default is to follow symbolic links, as if `-L' were specified.\n"
-"    `..' is processed by removing the immediately previous pathname "
-"component\n"
+"    `..' is processed by removing the immediately previous pathname component\n"
 "    back to a slash or the beginning of DIR.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns 0 if the directory is changed, and if $PWD is set successfully "
-"when\n"
+"    Returns 0 if the directory is changed, and if $PWD is set successfully when\n"
 "    -P is used; non-zero otherwise."
 msgstr ""
 "Canvia el directori de treball de l'intèrpret.\n"
@@ -2910,8 +2836,7 @@ msgstr ""
 "    punts (:).  Un nom de directori nul s'interpreta com al directori\n"
 "    actual.  Si DIR comença amb una barra, aleshores no s'usa CDPATH.\n"
 "\n"
-"    Si no es troba el directori, i l'opció de l'intèrpret «cdable_vars» "
-"està\n"
+"    Si no es troba el directori, i l'opció de l'intèrpret «cdable_vars» està\n"
 "    activada, aleshores la paraula s'interpreta com a un nom de variable.\n"
 "    Si la variable especificada té algun valor, aquest valor s'usa en lloc\n"
 "    de DIR.\n"
@@ -2919,8 +2844,7 @@ msgstr ""
 "    Opcions:\n"
 "        -L      força el seguiment d'enllaços simbòlics: resol els enllaços\n"
 "                simbòlics que conté DIR després de processar «..»\n"
-"        -P      usa l'estructura de directoris física sense seguir "
-"possibles\n"
+"        -P      usa l'estructura de directoris física sense seguir possibles\n"
 "                enllaços simbòlics: resol els enllaços simbòlics que conté\n"
 "                DIR abans de processar «..»\n"
 "        -e      amb l'opció -P, si no es pot determinar el directori de\n"
@@ -2929,8 +2853,7 @@ msgstr ""
 "                estesos com a directoris que contenen els atributs del\n"
 "                fitxer\n"
 "\n"
-"    Per defecte, se segueixen els enllaços simbòlics, com si "
-"especifiquéssiu\n"
+"    Per defecte, se segueixen els enllaços simbòlics, com si especifiquéssiu\n"
 "    l'opció «-L».  El component «..» es processa eliminant el component del\n"
 "    camí immediatament previ fins a la primera barra o fins al principi de\n"
 "    DIR.\n"
@@ -3012,8 +2935,7 @@ msgid ""
 "Execute a simple command or display information about commands.\n"
 "    \n"
 "    Runs COMMAND with ARGS suppressing  shell function lookup, or display\n"
-"    information about the specified COMMANDs.  Can be used to invoke "
-"commands\n"
+"    information about the specified COMMANDs.  Can be used to invoke commands\n"
 "    on disk when a function with the same name exists.\n"
 "    \n"
 "    Options:\n"
@@ -3044,7 +2966,6 @@ msgstr ""
 
 # help declare
 #: builtins.c:490
-#, fuzzy
 msgid ""
 "Set variable values and attributes.\n"
 "    \n"
@@ -3077,8 +2998,7 @@ msgid ""
 "    Variables with the integer attribute have arithmetic evaluation (see\n"
 "    the `let' command) performed when the variable is assigned a value.\n"
 "    \n"
-"    When used in a function, `declare' makes NAMEs local, as with the "
-"`local'\n"
+"    When used in a function, `declare' makes NAMEs local, as with the `local'\n"
 "    command.  The `-g' option suppresses this behavior.\n"
 "    \n"
 "    Exit Status:\n"
@@ -3096,18 +3016,20 @@ msgstr ""
 "                el nom del fitxer, en mode de depuració)\n"
 "      -g        crea variables globals quan s'utilitza dins d'una funció,\n"
 "                altrament s'ignora\n"
+"      -I        en crear una variable local, hereda els atributs i valor de \n"
+"                la variable del mateix nom d'un àmbit anterior\n"
 "      -p        mostra els atributs i el valor de cada NOM\n"
 "\n"
 "    Opcions que estableixen atributs:\n"
 "      -a        per a fer NOMs vectors indexats (si estan suportats)\n"
 "      -A        per a fer NOMs vectors associatius (si estan suportats)\n"
 "      -i        per a assignar l'atribut de nombre enter a NOMs\n"
-"      -l        per a convertir NOMs a minúscules en l'assignació\n"
+"      -l        per a convertir els valors de NOMs a minúscules en l'assignació\n"
 "      -n        per a fer NOM una referència a la variable que té per nom\n"
 "                el seu valor\n"
 "      -r        per a fer NOMs variables de només lectura\n"
 "      -t        per a assignar l'atribut «traça» a NOMs\n"
-"      -u        per a convertir NOMs a majúscules en l'assignació\n"
+"      -u        per a convertir els valors de NOMs a majúscules en l'assignació\n"
 "      -x        per a exportar NOMs\n"
 "\n"
 "    Si feu servir «+» en lloc de «-», elimina l'atribut.\n"
@@ -3116,10 +3038,8 @@ msgstr ""
 "    aritmèticament (vegeu l'ordre «let») quan s'assigna un valor a la\n"
 "    variable.\n"
 "\n"
-"    Quan s'usa en una funció, «declare» converteix NOMs en variables "
-"locals,\n"
-"    igual que l'ordre «local».  L'opció «-g» inhabilita aquest "
-"comportament.\n"
+"    Quan s'usa en una funció, «declare» converteix NOMs en variables locals,\n"
+"    igual que l'ordre «local».  L'opció «-g» suprimeix aquest comportament.\n"
 "\n"
 "    Estat de sortida:\n"
 "    Torna èxit, excepte si rep una opció invàlida o es produeix un error."
@@ -3151,13 +3071,11 @@ msgid ""
 msgstr ""
 "Defineix variables locals.\n"
 "\n"
-"    Crea una variable local anomenada NOM i li assigna VALOR.  OPCIÓ pot "
-"ser\n"
+"    Crea una variable local anomenada NOM i li assigna VALOR.  OPCIÓ pot ser\n"
 "    qualsevol opció que «declare» admeti.\n"
 "\n"
 "    Les variables locals només es poden utilitzar dins d'una funció; només\n"
-"    són visibles a dins de la funció on són definides i dins de les "
-"funcions\n"
+"    són visibles a dins de la funció on són definides i dins de les funcions\n"
 "    imbricades dins d'aquestes.\n"
 "\n"
 "    Estat de sortida:\n"
@@ -3165,12 +3083,10 @@ msgstr ""
 "    un error, o l'intèrpret no està executant una funció."
 
 #: builtins.c:557
-#, fuzzy
 msgid ""
 "Write arguments to the standard output.\n"
 "    \n"
-"    Display the ARGs, separated by a single space character and followed by "
-"a\n"
+"    Display the ARGs, separated by a single space character and followed by a\n"
 "    newline, on the standard output.\n"
 "    \n"
 "    Options:\n"
@@ -3194,11 +3110,9 @@ msgid ""
 "    \t\t0 to 3 octal digits\n"
 "      \\xHH\tthe eight-bit character whose value is HH (hexadecimal).  HH\n"
 "    \t\tcan be one or two hex digits\n"
-"      \\uHHHH\tthe Unicode character whose value is the hexadecimal value "
-"HHHH.\n"
+"      \\uHHHH\tthe Unicode character whose value is the hexadecimal value HHHH.\n"
 "    \t\tHHHH can be one to four hex digits.\n"
-"      \\UHHHHHHHH the Unicode character whose value is the hexadecimal "
-"value\n"
+"      \\UHHHHHHHH the Unicode character whose value is the hexadecimal value\n"
 "    \t\tHHHHHHHH. HHHHHHHH can be one to eight hex digits.\n"
 "    \n"
 "    Exit Status:\n"
@@ -3214,8 +3128,7 @@ msgstr ""
 "       -e       activa la interpretació de seqüències d'escapada\n"
 "       -E       desactiva la interpretació de seqüències d'escapada\n"
 "\n"
-"    «echo» interpreta els següents caràcters escapats amb una barra "
-"inversa:\n"
+"    «echo» interpreta els següents caràcters escapats amb una barra inversa:\n"
 "       \\a       alerta (campana)\n"
 "       \\b       retrocés\n"
 "       \\c       suprimeix tota sortida ulterior\n"
@@ -3227,11 +3140,14 @@ msgstr ""
 "       \\t       tabulació horitzontal\n"
 "       \\v       tabulació vertical\n"
 "       \\\\       barra invertida\n"
-"       \\0nnn    caràcter corresponent al codi ASCII número NNN, on NNN és "
-"un\n"
+"       \\0nnn    caràcter corresponent al codi ASCII número NNN, on NNN és un\n"
 "                número octal de 0 a 3 dígits.\n"
 "       \\xHH     caràcter de 8 bits corresponent al valor HH, on HH és un\n"
 "                número hexadecimal d'1 o 2 dígits.\n"
+"       \\uHHHH   caràcter Unicode corresponent al valor hexadecimal HHHH, on\n"
+"                HHHH pot tenir de 1 a 4 dígits.\n"
+"       \\uHHHHHHHH  caràcter Unicode corresponent al valor hexadecimal HHHHHHHH,\n"
+"                on HHHHHHHH pot tenir de 1 a 8 dígits.\n"
 "\n"
 "    Estat de sortida:\n"
 "    Torna èxit, tret que es produeixi un error d'escriptura."
@@ -3288,15 +3204,13 @@ msgstr ""
 "Habilita o inhabilita ordres internes de l'intèrpret.\n"
 "\n"
 "    Habilita o inhabilita ordres internes de l'intèrpret.  Inhabilitar una\n"
-"    ordre interna permet executar una ordre que es troba en el disc i que "
-"té\n"
+"    ordre interna permet executar una ordre que es troba en el disc i que té\n"
 "    el mateix nom que l'ordre interna, sense necessitat d'escriure'n la\n"
 "    ubicació completa.\n"
 "\n"
 "    Opcions:\n"
 "      -a        mostra una llista d'ordres internes indicant-ne l'estat\n"
-"      -n        inhabilita NOM o bé mostra una llista de les ordres "
-"internes\n"
+"      -n        inhabilita NOM o bé mostra una llista de les ordres internes\n"
 "                que es troben inhabilitades\n"
 "      -p        mostra la llista en format reutilitzable\n"
 "      -s        mostra només les ordres internes «especials» Posix\n"
@@ -3317,8 +3231,7 @@ msgstr ""
 msgid ""
 "Execute arguments as a shell command.\n"
 "    \n"
-"    Combine ARGs into a single string, use the result as input to the "
-"shell,\n"
+"    Combine ARGs into a single string, use the result as input to the shell,\n"
 "    and execute the resulting commands.\n"
 "    \n"
 "    Exit Status:\n"
@@ -3326,15 +3239,13 @@ msgid ""
 msgstr ""
 "Executa els arguments com una ordre.\n"
 "\n"
-"    Combina ARGs en una única cadena, utilitza el resultat com a entrada "
-"per\n"
+"    Combina ARGs en una única cadena, utilitza el resultat com a entrada per\n"
 "    a l'intèrpret i executa les ordres resultants.\n"
 "\n"
 "    Estat de sortida:\n"
 "    Torna l'estat de sortida de l'ordre, o èxit si l'ordre és nul·la."
 
 #: builtins.c:652
-#, fuzzy
 msgid ""
 "Parse option arguments.\n"
 "    \n"
@@ -3374,33 +3285,28 @@ msgid ""
 "    Returns success if an option is found; fails if the end of options is\n"
 "    encountered or an error occurs."
 msgstr ""
-"Interpreta arguments que representen opcions.\n"
+"Processa arguments que representen opcions.\n"
 "\n"
-"    getopts és utilitzat per les utilitats de bash per a interpretar els\n"
+"    getopts és utilitzat per les utilitats de bash per a processar els\n"
 "    paràmetres posicionals com a opcions.\n"
 "\n"
 "    CADENA conté les lletres de les opcions a reconèixer; si una lletra va\n"
-"    seguida de dos punts, l'opció requereix un argument, que s'ha de "
-"separar\n"
-"    amb un espai en blanc.\n"
+"    seguida de dos punts, l'opció requereix un argument, que s'ha de separar\n"
+"    de l'opció amb un espai en blanc.\n"
 "\n"
-"    Cada cop que s'invoca, getopts posa l'opció successiva a la variable\n"
+"    Cada cop que s'invoca, getopts posa l'opció successiva a la variable\n"
 "    d'entorn $nom, inicialitzant nom si no existeix, i l'índex del següent\n"
 "    argument a la variable OPTIND.  La variable OPTIND s'inicialitza a 1\n"
-"    cada cop que s'invoca l'intèrpret o un script.  Quan una opció "
-"requereix\n"
+"    cada cop que s'invoca l'intèrpret o un script.  Quan una opció requereix\n"
 "    un argument, getopts col·loca l'argument a la variable OPTARG.\n"
 "\n"
-"    getopts pot informar d'errors de dues maneres.  Si el primer caràcter "
-"de\n"
-"    CADENA és un caràcter de dos punts (:), getopts entra en mode "
-"silenciós.\n"
+"    getopts pot informar d'errors de dues maneres.  Si el primer caràcter de\n"
+"    CADENA és un caràcter de dos punts (:), getopts entra en mode silenciós.\n"
 "    En aquest mode, no es mostra cap missatge d'error.  Si es detecta una\n"
 "    opció no vàlida, getopts col·loca el caràcter de l'opció a OPTARG.  Si\n"
 "    no es troba un argument requerit, getopts posa un ':' a NOM, i el\n"
 "    caràcter de l'opció trobada a OPTARG.  Si getopts no es troba en mode\n"
-"    silenciós, i es detecta una opció no vàlida, getopts posa un '?' a NOM "
-"i\n"
+"    silenciós, i es detecta una opció no vàlida, getopts posa un '?' a NOM i\n"
 "    elimina la variable OPTARG.  Si no troba un argument requerit, posa un\n"
 "    '?' a NOM, elimina OPTARG, i mostra un missatge de diagnòstic.\n"
 "\n"
@@ -3408,12 +3314,11 @@ msgstr ""
 "    d'error, encara que el primer caràcter de CADENA no siguin dos punts.\n"
 "    Per defecte, OPTERR té el valor 1.\n"
 "\n"
-"    Normalment, getopts interpreta els paràmetres posicionals ($0 - $9),\n"
-"    però si hi ha més arguments, s'interpreten aquests.\n"
+"    Normalment, getopts interpreta els paràmetres posicionals, però si\n"
+"    es proporcionen arguments com a valors ARG, s'intepreten aquests.\n"
 "\n"
 "    Estat de sortida:\n"
-"    Retorna èxit si es troba alguna opció; falla si s'arriba al final de "
-"les\n"
+"    Retorna èxit si es troba alguna opció; falla si s'arriba al final de les\n"
 "    opcions o si es produeix un error."
 
 #: builtins.c:694
@@ -3421,8 +3326,7 @@ msgid ""
 "Replace the shell with the given command.\n"
 "    \n"
 "    Execute COMMAND, replacing this shell with the specified program.\n"
-"    ARGUMENTS become the arguments to COMMAND.  If COMMAND is not "
-"specified,\n"
+"    ARGUMENTS become the arguments to COMMAND.  If COMMAND is not specified,\n"
 "    any redirections take effect in the current shell.\n"
 "    \n"
 "    Options:\n"
@@ -3430,13 +3334,11 @@ msgid ""
 "      -c\texecute COMMAND with an empty environment\n"
 "      -l\tplace a dash in the zeroth argument to COMMAND\n"
 "    \n"
-"    If the command cannot be executed, a non-interactive shell exits, "
-"unless\n"
+"    If the command cannot be executed, a non-interactive shell exits, unless\n"
 "    the shell option `execfail' is set.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success unless COMMAND is not found or a redirection error "
-"occurs."
+"    Returns success unless COMMAND is not found or a redirection error occurs."
 msgstr ""
 "Substitueix el procés de l'intèrpret per l'ordre especificada.\n"
 "\n"
@@ -3449,8 +3351,7 @@ msgstr ""
 "      -c        executa ORDRE en un entorn buit\n"
 "      -t        passa un guionet a ORDRE com a argument número zero\n"
 "\n"
-"    Si l'ordre no es pot executar i la sessió és no-interactiva, "
-"l'intèrpret\n"
+"    Si l'ordre no es pot executar i la sessió és no-interactiva, l'intèrpret\n"
 "    surt, excepte si l'opció «execfail» està habilitada.\n"
 "\n"
 "    Estat de sortida:\n"
@@ -3473,14 +3374,12 @@ msgstr ""
 msgid ""
 "Exit a login shell.\n"
 "    \n"
-"    Exits a login shell with exit status N.  Returns an error if not "
-"executed\n"
+"    Exits a login shell with exit status N.  Returns an error if not executed\n"
 "    in a login shell."
 msgstr ""
 "Abandona una sessió d'entrada.\n"
 "\n"
-"    Abandona una sessió d'entrada amb estat de sortida N.  Torna un error "
-"si\n"
+"    Abandona una sessió d'entrada amb estat de sortida N.  Torna un error si\n"
 "    no s'està executant en una sessió d'entrada."
 
 # help fc (hi ha un bug a la cadena original)
@@ -3488,15 +3387,13 @@ msgstr ""
 msgid ""
 "Display or execute commands from the history list.\n"
 "    \n"
-"    fc is used to list or edit and re-execute commands from the history "
-"list.\n"
+"    fc is used to list or edit and re-execute commands from the history list.\n"
 "    FIRST and LAST can be numbers specifying the range, or FIRST can be a\n"
 "    string, which means the most recent command beginning with that\n"
 "    string.\n"
 "    \n"
 "    Options:\n"
-"      -e ENAME\tselect which editor to use.  Default is FCEDIT, then "
-"EDITOR,\n"
+"      -e ENAME\tselect which editor to use.  Default is FCEDIT, then EDITOR,\n"
 "    \t\tthen vi\n"
 "      -l \tlist lines instead of editing\n"
 "      -n\tomit line numbers when listing\n"
@@ -3510,8 +3407,7 @@ msgid ""
 "    the last command.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success or status of executed command; non-zero if an error "
-"occurs."
+"    Returns success or status of executed command; non-zero if an error occurs."
 msgstr ""
 "Mostra o executa ordres de l'historial.\n"
 "\n"
@@ -3524,20 +3420,18 @@ msgstr ""
 "      -e EDITOR selecciona quin editor utilitzar.  Per defecte és el valor\n"
 "                de la variable FCEDIT, després el valor de EDITOR, i\n"
 "                finalment vi\n"
-"      -l\tmostra les línies en lloc d'editar-les\n"
-"      -n\tomet els números de línia a l'hora de mostrar la llista\n"
-"      -r\tinverteix l'ordre de les línies (més recents primer)\n"
+"      -l        mostra les línies en lloc d'editar-les\n"
+"      -n        omet els números de línia a l'hora de mostrar la llista\n"
+"      -r        inverteix l'ordre de les línies (més recents primer)\n"
 "\n"
-"    Amb el format «fc -s [pat=sub ...] [ordre]», ORDRE es re-executa "
-"després\n"
+"    Amb el format «fc -s [pat=sub ...] [ordre]», ORDRE es re-executa després\n"
 "    d'haver fet la substitució PAT=SUB.\n"
 "\n"
 "    Un àlies útil és r='fc -s', de manera que «r cc» executa l'última ordre\n"
 "    que comença per «cc» i «r» re-executa l'última ordre.\n"
 "\n"
 "    Estat de sortida:\n"
-"    Torna èxit o l'estat de l'última ordre executada; diferent de zero si "
-"es\n"
+"    Torna èxit o l'estat de l'última ordre executada; diferent de zero si es\n"
 "    produeix un error."
 
 #: builtins.c:764
@@ -3558,18 +3452,15 @@ msgstr ""
 "    considera com a corrent.\n"
 "\n"
 "    Estat de sortida:\n"
-"    L'estat de l'ordre que es mou al primer pla, o fallada si es produeix "
-"un\n"
+"    L'estat de l'ordre que es mou al primer pla, o fallada si es produeix un\n"
 "    error."
 
 #: builtins.c:779
 msgid ""
 "Move jobs to the background.\n"
 "    \n"
-"    Place the jobs identified by each JOB_SPEC in the background, as if "
-"they\n"
-"    had been started with `&'.  If JOB_SPEC is not present, the shell's "
-"notion\n"
+"    Place the jobs identified by each JOB_SPEC in the background, as if they\n"
+"    had been started with `&'.  If JOB_SPEC is not present, the shell's notion\n"
 "    of the current job is used.\n"
 "    \n"
 "    Exit Status:\n"
@@ -3591,8 +3482,7 @@ msgid ""
 "Remember or display program locations.\n"
 "    \n"
 "    Determine and remember the full pathname of each command NAME.  If\n"
-"    no arguments are given, information about remembered commands is "
-"displayed.\n"
+"    no arguments are given, information about remembered commands is displayed.\n"
 "    \n"
 "    Options:\n"
 "      -d\tforget the remembered location of each NAME\n"
@@ -3616,8 +3506,7 @@ msgstr ""
 "\n"
 "    Opcions:\n"
 "      -d                oblida la ubicació recordada per a cada NOM\n"
-"      -l                utilitza un format que es pot reciclar com a "
-"entrada\n"
+"      -l                utilitza un format que es pot reciclar com a entrada\n"
 "      -p ubicació       utilitza UBICACIÓ com a ubicació completa per a NOM\n"
 "      -r                oblida totes les ubicacions recordades\n"
 "      -t                mostra la ubicació recordada per a cada NOM,\n"
@@ -3632,7 +3521,6 @@ msgstr ""
 
 # help help
 #: builtins.c:818
-#, fuzzy
 msgid ""
 "Display information about builtin commands.\n"
 "    \n"
@@ -3650,14 +3538,13 @@ msgid ""
 "      PATTERN\tPattern specifying a help topic\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success unless PATTERN is not found or an invalid option is "
-"given."
+"    Returns success unless PATTERN is not found or an invalid option is given."
 msgstr ""
 "Mostra informació sobre ordres internes.\n"
 "\n"
-"    Mostra ajuda sobre les ordres internes.  Amb PATRÓ, dóna informació\n"
-"    detallada sobre aquelles ordres que coincideixen amb PATRÓ, altrament\n"
-"    mostra una llista amb temes d'ajuda.\n"
+"    Mostra ajuda sobre les ordres internes.  Si s'especifica PATRÓ,\n"
+"    dóna informació detallada sobre aquelles ordres que coincideixen\n"
+"    amb PATRÓ, altrament mostra una llista amb temes d'ajuda.\n"
 "\n"
 "    Opcions:\n"
 "      -d        mostra una descripció curta de cada tema\n"
@@ -3671,7 +3558,6 @@ msgstr ""
 "    Torna èxit, excepte si PATRÓ no es troba o passeu una opció invàlida."
 
 #: builtins.c:842
-#, fuzzy
 msgid ""
 "Display or manipulate the history list.\n"
 "    \n"
@@ -3699,8 +3585,7 @@ msgid ""
 "    \n"
 "    If the HISTTIMEFORMAT variable is set and not null, its value is used\n"
 "    as a format string for strftime(3) to print the time stamp associated\n"
-"    with each displayed history entry.  No time stamps are printed "
-"otherwise.\n"
+"    with each displayed history entry.  No time stamps are printed otherwise.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns success unless an invalid option is given or an error occurs."
@@ -3724,16 +3609,14 @@ msgstr ""
 "                a la llista\n"
 "      -s        afegeix ARGs a la llista com una única entrada\n"
 "\n"
-"    Si passeu un nom de FITXER, s'utilitza com a fitxer d'historial.  En "
-"cas\n"
-"    contrari, si $HISTFILE té algun valor, s'utilitza aquest, si no\n"
+"    Si proporcioneu un nom de FITXER, s'utilitza com a fitxer d'historial.\n"
+"    En cas contrari, si $HISTFILE té algun valor, s'utilitza aquest, si no\n"
 "    s'utilitza ~/.bash_history.\n"
 "\n"
-"    Si la variable $HISTTIMEFORMAT està definida i no és nul·la, el seu\n"
-"    valor s'utilitza com a cadena de format strftime(3) per a mostrar "
-"l'hora\n"
+"    Si la variable HISTTIMEFORMAT està definida i no és nul·la, el seu valor\n"
+"    s'utilitza com a cadena de format strftime(3) per a mostrar l'hora\n"
 "    associada a cada entrada de l'historial.  En cas contrari no es mostra\n"
-"    informació horària.\n"
+"    la marca horària.\n"
 "\n"
 "    Estat de sortida: \n"
 "    Torna èxit, excepte si passeu una opció invàlida o es produeix un error."
@@ -3764,8 +3647,7 @@ msgstr ""
 "Mostra l'estat de feines.\n"
 "\n"
 "    Mostra les feines actives.  Si especifiqueu FEINA, es restringeix la\n"
-"    sortida a la feina especificada.  Sense opcions, mostra l'estat de "
-"totes\n"
+"    sortida a la feina especificada.  Sense opcions, mostra l'estat de totes\n"
 "    les feines actives.\n"
 "\n"
 "    Opcions:\n"
@@ -3781,8 +3663,7 @@ msgstr ""
 "    processos d'aquella feina, a ARGS.\n"
 "\n"
 "    Estat de sortida:\n"
-"    Torna èxit, excepte si passeu una opció invàlida o es produeix un "
-"error.\n"
+"    Torna èxit, excepte si passeu una opció invàlida o es produeix un error.\n"
 "    Si utilitzeu -x, torna l'estat de sortida d'ORDRE."
 
 # help disown
@@ -3809,7 +3690,7 @@ msgstr ""
 "\n"
 "    Opcions:\n"
 "      -a        suprimeix totes les feines si no especifiqueu FEINA\n"
-"      -h\tmarca FEINA per a no enviar-li un senyal SIGHUP si\n"
+"      -h        marca FEINA per a no enviar-li un senyal SIGHUP si\n"
 "                l'intèrpret rep un SIGHUP\n"
 "      -r        suprimeix totes les feines en execució\n"
 "\n"
@@ -3841,20 +3722,18 @@ msgid ""
 msgstr ""
 "Envia un senyal a una feina.\n"
 "\n"
-"    Envia el senyal SENYAL o NÚMSENYAL al procés corresponent a PID o "
-"FEINA.\n"
+"    Envia el senyal SENYAL o NÚMSENYAL al procés corresponent a PID o FEINA.\n"
 "    Si no especifiqueu cap senyal, s'envia un SIGTERM.\n"
 "\n"
 "    Opcions:\n"
 "      -s senyal         SENYAL és el nom d'un senyal\n"
-"      -n númsenyal\tNÚMSENYAL és el número d'un senyal\n"
+"      -n númsenyal      NÚMSENYAL és el número d'un senyal\n"
 "      -l                mostra els noms dels senyals; si hi ha arguments \n"
 "                        després de «-l» s'interpreten com a números de\n"
 "                        senyals, els noms dels quals s'han de mostrar\n"
 "      -L                sinònim de -l\n"
 "\n"
-"    kill és una ordre interna per dues raons: perquè això permet usar IDs "
-"de\n"
+"    kill és una ordre interna per dues raons: perquè això permet usar IDs de\n"
 "    feina en lloc de IDs de procés, i perquè permet matar processos encara\n"
 "    que arribeu al límit de processos que se us permet crear.\n"
 "\n"
@@ -3869,8 +3748,7 @@ msgid ""
 "    Evaluate each ARG as an arithmetic expression.  Evaluation is done in\n"
 "    fixed-width integers with no check for overflow, though division by 0\n"
 "    is trapped and flagged as an error.  The following list of operators is\n"
-"    grouped into levels of equal-precedence operators.  The levels are "
-"listed\n"
+"    grouped into levels of equal-precedence operators.  The levels are listed\n"
 "    in order of decreasing precedence.\n"
 "    \n"
 "    \tid++, id--\tvariable post-increment, post-decrement\n"
@@ -3909,33 +3787,31 @@ msgstr ""
 "Avalua expressions aritmètiques.\n"
 "\n"
 "    Avalua cada ARG com a expressió aritmètica.  Les operacions es fan amb\n"
-"    enters d'amplada fixa sense comprovacions de desbordament, tot i que "
-"les\n"
-"    divisions per 0 es detecten i es marquen com a error.  La següent "
-"llista\n"
+"    enters d'amplada fixa sense comprovacions de desbordament, tot i que les\n"
+"    divisions per 0 es detecten i es marquen com a error.  La següent llista\n"
 "    mostra els operadors, agrupats en nivells d'igual precedència.  Els\n"
 "    nivells apareixen en ordre descendent de precedència.\n"
 "\n"
-"    \tid++, id--\tpostincrement, postdecrement\n"
-"    \t++id, --id\tpreincrement, predecrement\n"
-"    \t-, +\t\tnegatiu, positiu unaris\n"
-"    \t!, ~\t\tnegació lògica i a nivell de bits\n"
-"    \t**\t\texponenciació\n"
-"    \t*, /, %\t\tmultiplicació, divisió, residu\n"
-"    \t+, -\t\taddició, subtracció\n"
-"    \t<<, >>\t\tdesplaçament de bits a l'esquerra i a la dreta\n"
-"    \t<=, >=, <, >\tcomparació\n"
-"    \t==, !=\t\tigualtat, desigualtat\n"
-"    \t&\t\tAND a nivell de bits\n"
-"    \t^\t\tXOR a nivell de bits\n"
-"    \t|\t\tOR a nivell de bits\n"
-"    \t&&\t\tAND lògic\n"
-"    \t||\t\tOR lògic\n"
-"    \texpr ? expr : expr\n"
-"    \t\t\toperador condicional\n"
-"    \t=, *=, /=, %=,\n"
-"    \t+=, -=, <<=, >>=,\n"
-"    \t&=, ^=, |=\tassignació\n"
+"        id++, id--      postincrement, postdecrement\n"
+"        ++id, --id      preincrement, predecrement\n"
+"        -, +            negatiu, positiu unaris\n"
+"        !, ~            negació lògica i a nivell de bits\n"
+"        **              exponenciació\n"
+"        *, /, %         multiplicació, divisió, residu\n"
+"        +, -            addició, subtracció\n"
+"        <<, >>          desplaçament de bits a l'esquerra i a la dreta\n"
+"        <=, >=, <, >    comparació\n"
+"        ==, !=          igualtat, desigualtat\n"
+"        &               AND a nivell de bits\n"
+"        ^               XOR a nivell de bits\n"
+"        |               OR a nivell de bits\n"
+"        &&              AND lògic\n"
+"        ||              OR lògic\n"
+"        expr ? expr : expr\n"
+"                        operador condicional\n"
+"        =, *=, /=, %=,\n"
+"        +=, -=, <<=, >>=,\n"
+"        &=, ^=, |=      assignació\n"
 "\n"
 "    S'admeten variables de l'intèrpret com a operands.  El nom de la\n"
 "    variable se substitueix pel seu valor (convertit en enter d'amplada\n"
@@ -3950,21 +3826,18 @@ msgstr ""
 "    Si l'avaluació de l'últim ARG és 0, let torna 1; altrament torna 0."
 
 #: builtins.c:994
-#, fuzzy
 msgid ""
 "Read a line from the standard input and split it into fields.\n"
 "    \n"
 "    Reads a single line from the standard input, or from file descriptor FD\n"
-"    if the -u option is supplied.  The line is split into fields as with "
-"word\n"
+"    if the -u option is supplied.  The line is split into fields as with word\n"
 "    splitting, and the first word is assigned to the first NAME, the second\n"
 "    word to the second NAME, and so on, with any leftover words assigned to\n"
-"    the last NAME.  Only the characters found in $IFS are recognized as "
-"word\n"
-"    delimiters.\n"
+"    the last NAME.  Only the characters found in $IFS are recognized as word\n"
+"    delimiters. By default, the backslash character escapes delimiter characters\n"
+"    and newline.\n"
 "    \n"
-"    If no NAMEs are supplied, the line read is stored in the REPLY "
-"variable.\n"
+"    If no NAMEs are supplied, the line read is stored in the REPLY variable.\n"
 "    \n"
 "    Options:\n"
 "      -a array\tassign the words read to sequential indices of the array\n"
@@ -3976,8 +3849,7 @@ msgid ""
 "      -n nchars\treturn after reading NCHARS characters rather than waiting\n"
 "    \t\tfor a newline, but honor a delimiter if fewer than\n"
 "    \t\tNCHARS characters are read before the delimiter\n"
-"      -N nchars\treturn only after reading exactly NCHARS characters, "
-"unless\n"
+"      -N nchars\treturn only after reading exactly NCHARS characters, unless\n"
 "    \t\tEOF is encountered or read times out, ignoring any\n"
 "    \t\tdelimiter\n"
 "      -p prompt\toutput the string PROMPT without a trailing newline before\n"
@@ -3995,36 +3867,31 @@ msgid ""
 "      -u fd\tread from file descriptor FD instead of the standard input\n"
 "    \n"
 "    Exit Status:\n"
-"    The return code is zero, unless end-of-file is encountered, read times "
-"out\n"
-"    (in which case it's greater than 128), a variable assignment error "
-"occurs,\n"
+"    The return code is zero, unless end-of-file is encountered, read times out\n"
+"    (in which case it's greater than 128), a variable assignment error occurs,\n"
 "    or an invalid file descriptor is supplied as the argument to -u."
 msgstr ""
 "Llegeix una línia a l'entrada estàndard i la divideix en camps.\n"
 "\n"
 "    Llegeix una sola línia a l'entrada estàndard, o al descriptor de fitxer\n"
-"    FD si especifiqueu l'opció -u.  La línia es divideix en camps, segons\n"
+"    FD si especifiqueu l'opció -u.  La línia és dividida en camps, segons\n"
 "    les mateixes regles que en la separació de paraules, i la primera\n"
 "    paraula s'assigna al primer NOM, la segona al segon NOM, etc., mentre\n"
 "    que les paraules sobrants, si n'hi ha, s'assignen a l'últim NOM.  Només\n"
 "    es reconeixen com a delimitadors de paraula els caràcters que conté la\n"
 "    variable $IFS.\n"
 "\n"
-"    Si no especifiqueu cap NOM, en aquest cas la línia llegida es desa a la\n"
-"    variable REPLY.\n"
+"    Si no especifiqueu cap NOM, la línia es desa a la variable REPLY.\n"
 "\n"
 "    Opcions:\n"
-"      -a vector\tassigna les paraules llegides a VECTOR, de forma "
-"seqüencial\n"
+"      -a vector assigna les paraules llegides a VECTOR, de forma seqüencial\n"
 "                començant des de l'índex número 0.\n"
-"      -d delim\tcontinue llegint fins a trobar el caràcter DELIM, en lloc "
-"de\n"
+"      -d delim  continua llegint fins a trobar el caràcter DELIM, en lloc de\n"
 "                fins a trobar un salt de línia\n"
-"      -e\tsi la sessió és interactiva, utilitza Readline per a obtenir\n"
+"      -e        si la sessió és interactiva, utilitza Readline per a obtenir\n"
 "                la línia\n"
-"      -i text\tUtilitza TEXT com a text inicial per a Readline\n"
-"      -n núm\ttorna després de llegir exactament NÚM caràcters, o quan es\n"
+"      -i text   Utilitza TEXT com a text inicial per a Readline\n"
+"      -n núm    torna després de llegir exactament NÚM caràcters, o quan es\n"
 "                trobi el delimitador si apareix abans de NÚM caràcters\n"
 "      -N núm    torna només després de llegir exactament NÚM caràcters,\n"
 "                excepte si es troba EOF o s'esgota el temps d'espera,\n"
@@ -4032,29 +3899,26 @@ msgstr ""
 "      -p introd mostra la cadena INTROD sense cap caràcter de salt de línia\n"
 "                afegit, abans d'intentar llegir res\n"
 "      -r        prohibeix escapar caràcters amb una barra invertida\n"
-"      -s        suprimeix l'eco quan l'entrada està connectada a un "
-"terminal\n"
+"      -s        suprimeix l'eco quan l'entrada està connectada a un terminal\n"
 "      -t temps  surt si transcorre TEMPS (en segons) abans d'haver\n"
 "                aconseguit llegir una línia sencera.  Per defecte, el límit\n"
-"                de temps és el valor de la variable TMOUT.  TEMPS pot ser "
-"un\n"
+"                de temps és el valor de la variable TMOUT.  TEMPS pot ser un\n"
 "                número amb decimals.  Si TEMPS és 0, read torna\n"
 "                immediatament, sense intentar llegir cap dada, i torna èxit\n"
 "                només si hi ha dades disponibles en el descriptor de fitxer\n"
-"                FD especificat.  Un estat de sortida més gran que 128 "
-"indica\n"
+"                FD especificat.  Un estat de sortida més gran que 128 indica\n"
 "                que s'ha esgotat el temps d'espera.\n"
 "      -u fd     llegeix dades al descriptor de fitxer FD, en lloc de a\n"
 "                l'entrada estàndard.\n"
 "\n"
 "    Estat de sortida:\n"
 "    El codi de retorn és zero, excepte si es troba EOF (final de fitxer),\n"
-"    s'arriba al límit de temps (en aquest cas, és major que 128), es\n"
-"    produeix un error d'assignació de variable, o si heu especificat un\n"
-"    descriptor de fitxer invàlid amb l'opció -u."
+"    s'arriba al límit de temps (en aquest cas, retorna un número major que\n"
+"    128), es produeix un error d'assignació de variable, o si heu\n"
+"    especificat un descriptor de fitxer invàlid amb l'opció -u."
 
 # help return
-#: builtins.c:1041
+#: builtins.c:1042
 msgid ""
 "Return from a shell function.\n"
 "    \n"
@@ -4067,15 +3931,14 @@ msgid ""
 msgstr ""
 "Torna des d'una funció de l'intèrpret.\n"
 "\n"
-"    Provoca que una funció o script executat amb «source» torni amb el "
-"valor\n"
+"    Provoca que una funció o script executat amb «source» torni amb el valor\n"
 "    de retorn especificat per N.  Si s'omet N, l'estat de retorn és aquell\n"
 "    de l'última ordre executada dins la funció o script.\n"
 "\n"
 "    Estat de sortida:\n"
 "    Torna N, o fallada si l'intèrpret no està executant cap funció o script."
 
-#: builtins.c:1054
+#: builtins.c:1055
 msgid ""
 "Set or unset values of shell options and positional parameters.\n"
 "    \n"
@@ -4118,8 +3981,7 @@ msgid ""
 "              physical     same as -P\n"
 "              pipefail     the return value of a pipeline is the status of\n"
 "                           the last command to exit with a non-zero status,\n"
-"                           or zero if no command exited with a non-zero "
-"status\n"
+"                           or zero if no command exited with a non-zero status\n"
 "              posix        change the behavior of bash where the default\n"
 "                           operation differs from the Posix standard to\n"
 "                           match the standard\n"
@@ -4143,8 +4005,7 @@ msgid ""
 "          by default when the shell is interactive.\n"
 "      -P  If set, do not resolve symbolic links when executing commands\n"
 "          such as cd which change the current directory.\n"
-"      -T  If set, the DEBUG and RETURN traps are inherited by shell "
-"functions.\n"
+"      -T  If set, the DEBUG and RETURN traps are inherited by shell functions.\n"
 "      --  Assign any remaining arguments to the positional parameters.\n"
 "          If there are no remaining arguments, the positional parameters\n"
 "          are unset.\n"
@@ -4162,8 +4023,7 @@ msgid ""
 msgstr ""
 "Estableix opcions de l'intèrpret i paràmetres posicionals.\n"
 "\n"
-"    Modifica el valor d'atributs de l'intèrpret i de paràmetres "
-"posicionals,\n"
+"    Modifica el valor d'atributs de l'intèrpret i de paràmetres posicionals,\n"
 "    o mostra els noms i valors de les variables de l'intèrpret.\n"
 "\n"
 "    Opcions:\n"
@@ -4204,8 +4064,7 @@ msgstr ""
 "                           l'última ordre que ha acabat amb estat no-zero,\n"
 "                           o zero si cap ordre ha acabat amb estat diferent\n"
 "                           de zero\n"
-"              posix        ajusta el comportament de bash a l'estàndard "
-"Posix\n"
+"              posix        ajusta el comportament de bash a l'estàndard Posix\n"
 "              privileged   igual que -p\n"
 "              verbose      igual que -v\n"
 "              vi           usa una interfície d'edició estil vi\n"
@@ -4245,7 +4104,7 @@ msgstr ""
 "    Estat de sortida:\n"
 "    Torna èxit, excepte si especifiqueu una opció no vàlida."
 
-#: builtins.c:1139
+#: builtins.c:1140
 msgid ""
 "Unset values and attributes of shell variables and functions.\n"
 "    \n"
@@ -4257,8 +4116,7 @@ msgid ""
 "      -n\ttreat each NAME as a name reference and unset the variable itself\n"
 "    \t\trather than the variable it references\n"
 "    \n"
-"    Without options, unset first tries to unset a variable, and if that "
-"fails,\n"
+"    Without options, unset first tries to unset a variable, and if that fails,\n"
 "    tries to unset a function.\n"
 "    \n"
 "    Some variables cannot be unset; also see `readonly'.\n"
@@ -4286,13 +4144,12 @@ msgstr ""
 "    Torna èxit, excepte si especifiqueu una opció no vàlida o NOM és una\n"
 "    variable o funció de només lectura."
 
-#: builtins.c:1161
+#: builtins.c:1162
 msgid ""
 "Set export attribute for shell variables.\n"
 "    \n"
 "    Marks each NAME for automatic export to the environment of subsequently\n"
-"    executed commands.  If VALUE is supplied, assign VALUE before "
-"exporting.\n"
+"    executed commands.  If VALUE is supplied, assign VALUE before exporting.\n"
 "    \n"
 "    Options:\n"
 "      -f\trefer to shell functions\n"
@@ -4322,7 +4179,7 @@ msgstr ""
 "    Torna èxit, excepte si especifiqueu una opció no vàlida o NOM no és\n"
 "    vàlid."
 
-#: builtins.c:1180
+#: builtins.c:1181
 msgid ""
 "Mark shell variables as unchangeable.\n"
 "    \n"
@@ -4362,7 +4219,7 @@ msgstr ""
 "    Torna èxit, excepte si especifiqueu una opció no vàlida o NOM no és\n"
 "    vàlid."
 
-#: builtins.c:1202
+#: builtins.c:1203
 msgid ""
 "Shift positional parameters.\n"
 "    \n"
@@ -4374,14 +4231,13 @@ msgid ""
 msgstr ""
 "Desplaça els paràmetres posicionals.\n"
 "\n"
-"    Reanomena els paràmetres posicionals $N+1, $N+2 ... com a $1, $2 ...  "
-"Si\n"
+"    Reanomena els paràmetres posicionals $N+1, $N+2 ... com a $1, $2 ...  Si\n"
 "    ometeu N, s'assumeix que és 1.\n"
 "\n"
 "    Estat de sortida:\n"
 "    Torna èxit, excepte si N és negatiu o més gran que $#."
 
-#: builtins.c:1214 builtins.c:1229
+#: builtins.c:1215 builtins.c:1230
 msgid ""
 "Execute commands from a file in the current shell.\n"
 "    \n"
@@ -4405,7 +4261,7 @@ msgstr ""
 "    Torna l'estat de l'última ordre a FITXER executada; falla si FITXER no\n"
 "    es pot llegir."
 
-#: builtins.c:1245
+#: builtins.c:1246
 msgid ""
 "Suspend shell execution.\n"
 "    \n"
@@ -4420,8 +4276,7 @@ msgid ""
 msgstr ""
 "Suspèn l'execució de l'intèrpret.\n"
 "\n"
-"    Suspèn l'execució d'aquest intèrpret fins a rebre un senyal SIGCONT.  "
-"Si\n"
+"    Suspèn l'execució d'aquest intèrpret fins a rebre un senyal SIGCONT.  Si\n"
 "    no es força, les sessions d'entrada no es poden suspendre.\n"
 "\n"
 "    Opcions:\n"
@@ -4430,7 +4285,7 @@ msgstr ""
 "    Estat de sortida:\n"
 "    Torna èxit, excepte si no hi ha control de feines o es produeix un error."
 
-#: builtins.c:1261
+#: builtins.c:1262
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -4464,8 +4319,7 @@ msgid ""
 "      -x FILE        True if the file is executable by you.\n"
 "      -O FILE        True if the file is effectively owned by you.\n"
 "      -G FILE        True if the file is effectively owned by your group.\n"
-"      -N FILE        True if the file has been modified since it was last "
-"read.\n"
+"      -N FILE        True if the file has been modified since it was last read.\n"
 "    \n"
 "      FILE1 -nt FILE2  True if file1 is newer than file2 (according to\n"
 "                       modification date).\n"
@@ -4486,8 +4340,7 @@ msgid ""
 "      STRING1 != STRING2\n"
 "                     True if the strings are not equal.\n"
 "      STRING1 < STRING2\n"
-"                     True if STRING1 sorts before STRING2 "
-"lexicographically.\n"
+"                     True if STRING1 sorts before STRING2 lexicographically.\n"
 "      STRING1 > STRING2\n"
 "                     True if STRING1 sorts after STRING2 lexicographically.\n"
 "    \n"
@@ -4514,8 +4367,7 @@ msgid ""
 msgstr ""
 "Avalua una expressió condicional.\n"
 "\n"
-"    Surt amb estat 0 (cert) o 1 (fals) en funció de l'avaluació d'EXPR.  "
-"Les\n"
+"    Surt amb estat 0 (cert) o 1 (fals) en funció de l'avaluació d'EXPR.  Les\n"
 "    expressions poden ser unàries o binàries.  Les expressions unàries\n"
 "    s'utilitzen sovint per a determinar l'estat de fitxers.  També podeu\n"
 "    utilitzar operadors de cadenes, i operadors de comparació numèrica.\n"
@@ -4547,8 +4399,7 @@ msgstr ""
 "      -G FITXER      Cert si el vostre grup és propietari del fitxer.\n"
 "      -N FITXER      Cert si el fitxer ha canviat des de l'última lectura.\n"
 "\n"
-"      FITXER1 -nt FITXER2  Cert si fitxer1 és més nou que fitxer2 (segons "
-"la\n"
+"      FITXER1 -nt FITXER2  Cert si fitxer1 és més nou que fitxer2 (segons la\n"
 "                           data de modificació).\n"
 "\n"
 "      FITXER1 -ot FITXER2  Cert si fitxer1 és més antic que fitxer2.\n"
@@ -4580,8 +4431,7 @@ msgstr ""
 "      EXPR1 -a EXPR2 Cert si tant expr1 com expr2 són cert.\n"
 "      EXPR1 -o EXPR2 Cert si qualsevol de expr1 o expr2 són certes.\n"
 "\n"
-"      arg1 OP arg2   Tests aritmètics.  OP és un de -eq, -ne, -lt, -le, -"
-"gt,\n"
+"      arg1 OP arg2   Tests aritmètics.  OP és un de -eq, -ne, -lt, -le, -gt,\n"
 "                     o -ge.\n"
 "\n"
 "      Els operadors aritmètics binaris tornen cert si ARG1 és igual, no\n"
@@ -4592,7 +4442,7 @@ msgstr ""
 "      Torna èxit si EXPR s'avalua com a cert; falla si EXPR s'avalua com a\n"
 "      fals o si especifiqueu un argument no vàlid."
 
-#: builtins.c:1343
+#: builtins.c:1344
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -4605,12 +4455,11 @@ msgstr ""
 "    l'últim argument ha de ser un signe «]» que tanqui el «[» inicial."
 
 # help times
-#: builtins.c:1352
+#: builtins.c:1353
 msgid ""
 "Display process times.\n"
 "    \n"
-"    Prints the accumulated user and system times for the shell and all of "
-"its\n"
+"    Prints the accumulated user and system times for the shell and all of its\n"
 "    child processes.\n"
 "    \n"
 "    Exit Status:\n"
@@ -4618,19 +4467,17 @@ msgid ""
 msgstr ""
 "Mostra els temps d'execució.\n"
 "\n"
-"    Mostra el temps d'execució d'usuari i sistema acumulat per l'intèrpret "
-"i\n"
+"    Mostra el temps d'execució d'usuari i sistema acumulat per l'intèrpret i\n"
 "    per tots els seus processos inferiors.\n"
 "\n"
 "    Estat de sortida:\n"
 "    Sempre reïx."
 
-#: builtins.c:1364
+#: builtins.c:1365
 msgid ""
 "Trap signals and other events.\n"
 "    \n"
-"    Defines and activates handlers to be run when the shell receives "
-"signals\n"
+"    Defines and activates handlers to be run when the shell receives signals\n"
 "    or other conditions.\n"
 "    \n"
 "    ARG is a command to be read and executed when the shell receives the\n"
@@ -4639,42 +4486,33 @@ msgid ""
 "    value.  If ARG is the null string each SIGNAL_SPEC is ignored by the\n"
 "    shell and by the commands it invokes.\n"
 "    \n"
-"    If a SIGNAL_SPEC is EXIT (0) ARG is executed on exit from the shell.  "
-"If\n"
-"    a SIGNAL_SPEC is DEBUG, ARG is executed before every simple command.  "
-"If\n"
-"    a SIGNAL_SPEC is RETURN, ARG is executed each time a shell function or "
-"a\n"
-"    script run by the . or source builtins finishes executing.  A "
-"SIGNAL_SPEC\n"
-"    of ERR means to execute ARG each time a command's failure would cause "
-"the\n"
+"    If a SIGNAL_SPEC is EXIT (0) ARG is executed on exit from the shell.  If\n"
+"    a SIGNAL_SPEC is DEBUG, ARG is executed before every simple command.  If\n"
+"    a SIGNAL_SPEC is RETURN, ARG is executed each time a shell function or a\n"
+"    script run by the . or source builtins finishes executing.  A SIGNAL_SPEC\n"
+"    of ERR means to execute ARG each time a command's failure would cause the\n"
 "    shell to exit when the -e option is enabled.\n"
 "    \n"
-"    If no arguments are supplied, trap prints the list of commands "
-"associated\n"
+"    If no arguments are supplied, trap prints the list of commands associated\n"
 "    with each signal.\n"
 "    \n"
 "    Options:\n"
 "      -l\tprint a list of signal names and their corresponding numbers\n"
 "      -p\tdisplay the trap commands associated with each SIGNAL_SPEC\n"
 "    \n"
-"    Each SIGNAL_SPEC is either a signal name in <signal.h> or a signal "
-"number.\n"
+"    Each SIGNAL_SPEC is either a signal name in <signal.h> or a signal number.\n"
 "    Signal names are case insensitive and the SIG prefix is optional.  A\n"
 "    signal may be sent to the shell with \"kill -signal $$\".\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success unless a SIGSPEC is invalid or an invalid option is "
-"given."
+"    Returns success unless a SIGSPEC is invalid or an invalid option is given."
 msgstr ""
 "Intercepta senyals i altres esdeveniments.\n"
 "\n"
 "    Defineix i activa controladors de senyal, que són executats quan\n"
 "    l'intèrpret rep senyals o en altres circumstàncies.\n"
 "\n"
-"    ARG és una ordre que es llegeix i s'executa quan l'intèrpret rep "
-"SENYAL.\n"
+"    ARG és una ordre que es llegeix i s'executa quan l'intèrpret rep SENYAL.\n"
 "    Si ometeu ARG (i especifiqueu un únic SENYAL) o ARG és «-», cada senyal\n"
 "    és restablert al seu valor original.  Si ARG és una cadena nul·la,\n"
 "    aleshores SENYAL és ignorat per l'intèrpret i per tots els programes\n"
@@ -4704,7 +4542,7 @@ msgstr ""
 "    Torna èxit, excepte si algun SENYAL no és vàlid o especifiqueu una\n"
 "    ordre no vàlida."
 
-#: builtins.c:1400
+#: builtins.c:1401
 msgid ""
 "Display information about command type.\n"
 "    \n"
@@ -4730,8 +4568,7 @@ msgid ""
 "      NAME\tCommand name to be interpreted.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success if all of the NAMEs are found; fails if any are not "
-"found."
+"    Returns success if all of the NAMEs are found; fails if any are not found."
 msgstr ""
 "Mostra informació sobre el tipus d'ordre.\n"
 "\n"
@@ -4760,13 +4597,11 @@ msgstr ""
 "    Torna èxit si es troben tots els NOMs; falla si n'hi ha algun que no es\n"
 "    pot trobar."
 
-#: builtins.c:1431
-#, fuzzy
+#: builtins.c:1432
 msgid ""
 "Modify shell resource limits.\n"
 "    \n"
-"    Provides control over the resources available to the shell and "
-"processes\n"
+"    Provides control over the resources available to the shell and processes\n"
 "    it creates, on systems that allow such control.\n"
 "    \n"
 "    Options:\n"
@@ -4810,48 +4645,47 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless an invalid option is supplied or an error occurs."
 msgstr ""
-"Canvia els límits d'utilització de recursos per part de l'intèrpret.\n"
+"Modifica la limitació de recursos de l'intèrpret.\n"
 "\n"
-"    Permet controlar la quantitat de recursos disponibles per a l'intèrpret\n"
-"    d'ordres i per als processos que aquest crea, en els sistemes que\n"
-"    admeten tal control.\n"
+"    Permet especificar la quantitat de recursos disponibles per a\n"
+"    l'intèrpret d'ordres i per als processos que aquest crea, en els\n"
+"    sistemes que permeten tal control.\n"
 "\n"
 "    Opcions:\n"
 "      -S        estableix una limitació «tova»\n"
 "      -H        estableix una limitació «dura»\n"
-"      -a\tmostra tots els límits establerts\n"
-"      -b\tmida màxima de la memòria intermèdia per a «sockets»\n"
-"      -c\tmida màxima dels fitxers de bolcat de memòria\n"
-"      -d\tmida màxima del segment de dades d'un procés\n"
-"      -e\tprioritat màxima d'un procés («nice»)\n"
-"      -f\tmida màxima dels fitxers escrits per l'intèrpret i fills\n"
-"      -i\tnombre màxim de senyals pendents\n"
+"      -a        mostra tots els límits establerts\n"
+"      -b        mida màxima de la memòria intermèdia per a «sockets»\n"
+"      -c        mida màxima dels fitxers de bolcat de memòria\n"
+"      -d        mida màxima del segment de dades d'un procés\n"
+"      -e        prioritat màxima d'un procés («nice»)\n"
+"      -f        mida màxima dels fitxers escrits per l'intèrpret i fills\n"
+"      -i        nombre màxim de senyals pendents\n"
 "      -k        nombre màxim de cues («kqueue») obertes per a aquest procés\n"
-"      -l\tquantitat màxima de memòria que un procés pot blocar\n"
-"      -m\tmida màxima del conjunt resident (RSS)\n"
-"      -n\tnombre màxim de descriptors de fitxers oberts\n"
-"      -p\tmida màxima de la memòria intermèdia per a canonades\n"
-"      -q\tnombre màxim d'octets a les cues de missatges POSIX\n"
-"      -r\tprioritat màxima de temps-real\n"
-"      -s\tmida màxima de la pila\n"
-"      -t\tquantitat màxima de temps de CPU en segons\n"
-"      -u\tnombre màxim de processos d'usuari\n"
-"      -v\tmida de la memòria virtual\n"
-"      -x\tnombre màxim de fitxers de bloqueig\n"
+"      -l        quantitat màxima de memòria que un procés pot blocar\n"
+"      -m        mida màxima del conjunt resident (RSS)\n"
+"      -n        nombre màxim de descriptors de fitxers oberts\n"
+"      -p        mida màxima de la memòria intermèdia per a canonades\n"
+"      -q        nombre màxim d'octets a les cues de missatges POSIX\n"
+"      -r        prioritat màxima de temps-real\n"
+"      -s        mida màxima de la pila\n"
+"      -t        quantitat màxima de temps de CPU en segons\n"
+"      -u        nombre màxim de processos d'usuari\n"
+"      -v        mida de la memòria virtual\n"
+"      -x        nombre màxim de fitxers de bloqueig\n"
 "      -P        nombre màxim de pseudoterminals\n"
+"      -R        temps màxim d'execució per a processos de temps real\n"
 "      -T        nombre màxim de fils d'execució\n"
 "\n"
 "    Algunes opcions poden no estar disponibles en algunes plataformes.\n"
 "\n"
 "    Si especifiqueu un LÍMIT, aquest s'utilitza com a nou valor per al\n"
 "    recurs indicat; els valors especials de LÍMIT són «soft», «hard» i\n"
-"    «unlimited», que signifiquen límit tou actual, límit dur actual, i "
-"sense\n"
+"    «unlimited», que signifiquen límit tou actual, límit dur actual, i sense\n"
 "    límit, respectivament.  En cas contrari, es mostra el valor actual per\n"
 "    al recurs especificat.  Si no especifiqueu cap opció, se suposa -f.\n"
 "\n"
-"    Els valors s'indiquen en increments de 1024 octets, excepte en el cas "
-"de\n"
+"    Els valors s'indiquen en increments de 1024 octets, excepte en el cas de\n"
 "    l'opció -t, que és en segons, -p, que és en increments de 512 octets, i\n"
 "    -u, que és en nombre de processos.\n"
 "\n"
@@ -4859,7 +4693,7 @@ msgstr ""
 "    Torna èxit, tret que especifiqueu una opció invàlida o es produeixi un\n"
 "    error."
 
-#: builtins.c:1482
+#: builtins.c:1483
 msgid ""
 "Display or set file mode mask.\n"
 "    \n"
@@ -4887,34 +4721,29 @@ msgstr ""
 "    Opcions:\n"
 "      -p        sense MODE, mostra la sortida en un format que es pot\n"
 "                reciclar com a entrada\n"
-"      -S\tmostra la màscara en forma simbòlica; altrament produeix un\n"
+"      -S        mostra la màscara en forma simbòlica; altrament produeix un\n"
 "                número octal\n"
 "\n"
 "    Estat de sortida:\n"
 "    Torna èxit, excepte si MODE no és vàlid o passeu una opció no vàlida."
 
-#: builtins.c:1502
-#, fuzzy
+#: builtins.c:1503
 msgid ""
 "Wait for job completion and return exit status.\n"
 "    \n"
-"    Waits for each process identified by an ID, which may be a process ID or "
-"a\n"
+"    Waits for each process identified by an ID, which may be a process ID or a\n"
 "    job specification, and reports its termination status.  If ID is not\n"
 "    given, waits for all currently active child processes, and the return\n"
 "    status is zero.  If ID is a job specification, waits for all processes\n"
 "    in that job's pipeline.\n"
 "    \n"
-"    If the -n option is supplied, waits for a single job from the list of "
-"IDs,\n"
-"    or, if no IDs are supplied, for the next job to complete and returns "
-"its\n"
+"    If the -n option is supplied, waits for a single job from the list of IDs,\n"
+"    or, if no IDs are supplied, for the next job to complete and returns its\n"
 "    exit status.\n"
 "    \n"
 "    If the -p option is supplied, the process or job identifier of the job\n"
 "    for which the exit status is returned is assigned to the variable VAR\n"
-"    named by the option argument. The variable will be unset initially, "
-"before\n"
+"    named by the option argument. The variable will be unset initially, before\n"
 "    any assignment. This is useful only when the -n option is supplied.\n"
 "    \n"
 "    If the -f option is supplied, and job control is enabled, waits for the\n"
@@ -4925,32 +4754,43 @@ msgid ""
 "    option is given, or if -n is supplied and the shell has no unwaited-for\n"
 "    children."
 msgstr ""
-"Espera la finalització de feines i en retorna l'estat de sortida.\n"
+"Espera la finalització de feines i retorna l'estat de sortida.\n"
 "\n"
 "    Espera que cada procés identificat per un ID, que pot ser l'ID del\n"
-"    procés o una especificació de feina, acabi d'executar-se, i en torna\n"
+"    procés o una especificació de feina, acabi d'executar-se, i informa de\n"
 "    l'estat de sortida.  Si ometeu ID, espera que acabin d'executar-se tots\n"
 "    els processos inferiors, i surt amb estat zero.  Si ID és una\n"
 "    especificació de feina, espera cada un dels processos a la canonada\n"
 "    d'aquella feina.\n"
 "\n"
+"    Si especifiqueu l'opció -n, espera que finalitzi una única feina de la\n"
+"    llista d'IDs.  Si no s'ha especificat cap ID, espera que finalitzi la\n"
+"    propera feina i en retorna l'estat de sortida.\n"
+"\n"
+"    Si especifiqueu l'opció -p, el procés o l'identificador de la feina\n"
+"    s'assigna a la variable VAR.  La variable inicialment serà esborrada,\n"
+"    abans de que es podueixi assignació.  L'opció -p només és útil en\n"
+"    combinació amb l'opció -n.\n"
+"\n"
+"    Si especifiqueu l'opció -f, i el control de feines està habilitat,\n"
+"    espera fins que les IDs especificades finalitzin, enlloc d'esperar fins\n"
+"    que canviïn d'estat.\n"
+"\n"
 "    Estat de sortida:\n"
-"    Torna l'estat de sortida de l'últim ID; falla si ID no és vàlid o "
-"passeu\n"
-"    una opció no vàlida."
+"    Torna l'estat de sortida de l'última ID; falla si ID no és vàlid o\n"
+"    passeu una opció no vàlida, o si s'ha especificat -n i l'intèrpret no té\n"
+"    processos inferiors que no s'estiguin esperant."
 
-#: builtins.c:1533
+#: builtins.c:1534
 msgid ""
 "Wait for process completion and return exit status.\n"
 "    \n"
-"    Waits for each process specified by a PID and reports its termination "
-"status.\n"
+"    Waits for each process specified by a PID and reports its termination status.\n"
 "    If PID is not given, waits for all currently active child processes,\n"
 "    and the return status is zero.  PID must be a process ID.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns the status of the last PID; fails if PID is invalid or an "
-"invalid\n"
+"    Returns the status of the last PID; fails if PID is invalid or an invalid\n"
 "    option is given."
 msgstr ""
 "Espera la finalització de processos i en retorna l'estat de sortida.\n"
@@ -4964,7 +4804,7 @@ msgstr ""
 "    Torna l'estat de sortida de l'últim PID; falla si PID no és vàlid o es\n"
 "    passa una opció no vàlida."
 
-#: builtins.c:1548
+#: builtins.c:1549
 msgid ""
 "Execute commands for each member in a list.\n"
 "    \n"
@@ -4980,14 +4820,13 @@ msgstr ""
 "\n"
 "    Els bucles «for» executen una seqüència d'ordres per a cada un dels\n"
 "    elements d'una llista.  Si «in PARAULES ...;» s'omet, aleshores se\n"
-"    suposa «in \"$@\"».  Per a cada element de la llista PARAULES, "
-"l'element\n"
+"    suposa «in \"$@\"».  Per a cada element de la llista PARAULES, l'element\n"
 "    s'assigna a NOM, i les ORDRES s'executen.\n"
 "\n"
 "    Estat de sortida:\n"
 "    Torna l'estat de sortida de l'última ordre executada."
 
-#: builtins.c:1562
+#: builtins.c:1563
 msgid ""
 "Arithmetic for loop.\n"
 "    \n"
@@ -5006,11 +4845,11 @@ msgstr ""
 "Bucle «for» aritmètic.\n"
 "\n"
 "    Equivalent a\n"
-"    \t(( EXP1 ))\n"
-"    \twhile (( EXP2 )); do\n"
-"    \t\tORDRES\n"
-"    \t\t(( EXP 3 ))\n"
-"    \tdone\n"
+"        (( EXP1 ))\n"
+"        while (( EXP2 )); do\n"
+"                ORDRES\n"
+"                (( EXP 3 ))\n"
+"        done\n"
 "\n"
 "    EXP1, EXP2 i EXP3 són expressions aritmètiques.  Si s'omet qualsevol de\n"
 "    les expressions, es comporta com si el resultat de l'avaluació de\n"
@@ -5019,7 +4858,7 @@ msgstr ""
 "    Estat de sortida:\n"
 "    Torna l'estat de sortida de l'última ordre executada."
 
-#: builtins.c:1580
+#: builtins.c:1581
 msgid ""
 "Select words from a list and execute commands.\n"
 "    \n"
@@ -5042,11 +4881,9 @@ msgstr ""
 "\n"
 "    Les PARAULES s'expandeixen i generen una llista de paraules.  Les\n"
 "    paraules expandides s'envien a la sortida d'errors estàndard, cada una\n"
-"    precedida per un número.  Si «in PARAULES» s'omet, se suposa «in \"$@"
-"\"».\n"
+"    precedida per un número.  Si «in PARAULES» s'omet, se suposa «in \"$@\"».\n"
 "    Llavors, es mostra l'introductor PS3 i es llegeix una línia a l'entrada\n"
-"    estàndard.  Si la línia correspon amb el número d'alguna de les "
-"paraules\n"
+"    estàndard.  Si la línia correspon amb el número d'alguna de les paraules\n"
 "    mostrades, aleshores aquesta paraula s'assigna a NOM.  Si la línia està\n"
 "    buida, les PARAULES i l'introductor es tornen a mostrar.  Si es llegeix\n"
 "    EOF, l'ordre finalitza.  Qualsevol altre valor llegit, fa que s'assigni\n"
@@ -5058,7 +4895,7 @@ msgstr ""
 "    Torna l'estat de sortida de l'última ordre executada."
 
 # help time
-#: builtins.c:1601
+#: builtins.c:1602
 msgid ""
 "Report time consumed by pipeline's execution.\n"
 "    \n"
@@ -5076,8 +4913,7 @@ msgstr ""
 "Informa del temps transcorregut durant l'execució d'una canonada.\n"
 "\n"
 "    Executa CANONADA i mostra un resum del temps real, el temps de CPU\n"
-"    d'usuari i el temps de CPU de sistema transcorregut durant l'execució "
-"de\n"
+"    d'usuari i el temps de CPU de sistema transcorregut durant l'execució de\n"
 "    CANONADA.\n"
 "\n"
 "    Opcions:\n"
@@ -5088,7 +4924,7 @@ msgstr ""
 "    Estat de sortida:\n"
 "    L'estat de sortida és l'estat de sortida de la CANONADA."
 
-#: builtins.c:1618
+#: builtins.c:1619
 msgid ""
 "Execute commands based on pattern matching.\n"
 "    \n"
@@ -5100,28 +4936,22 @@ msgid ""
 msgstr ""
 "Executa ordres segons la coincidència amb patrons.\n"
 "\n"
-"    Executa ORDRES de forma selectiva en funció de si PARAULA coincideix "
-"amb\n"
+"    Executa ORDRES de forma selectiva en funció de si PARAULA coincideix amb\n"
 "    PATRÓ.  El signe «|» serveix per a separar múltiples patrons.\n"
 "\n"
 "    Estat de sortida:\n"
 "    Torna l'estat de sortida de l'última ordre executada."
 
-#: builtins.c:1630
+#: builtins.c:1631
 msgid ""
 "Execute commands based on conditional.\n"
 "    \n"
-"    The `if COMMANDS' list is executed.  If its exit status is zero, then "
-"the\n"
-"    `then COMMANDS' list is executed.  Otherwise, each `elif COMMANDS' list "
-"is\n"
+"    The `if COMMANDS' list is executed.  If its exit status is zero, then the\n"
+"    `then COMMANDS' list is executed.  Otherwise, each `elif COMMANDS' list is\n"
 "    executed in turn, and if its exit status is zero, the corresponding\n"
-"    `then COMMANDS' list is executed and the if command completes.  "
-"Otherwise,\n"
-"    the `else COMMANDS' list is executed, if present.  The exit status of "
-"the\n"
-"    entire construct is the exit status of the last command executed, or "
-"zero\n"
+"    `then COMMANDS' list is executed and the if command completes.  Otherwise,\n"
+"    the `else COMMANDS' list is executed, if present.  The exit status of the\n"
+"    entire construct is the exit status of the last command executed, or zero\n"
 "    if no condition tested true.\n"
 "    \n"
 "    Exit Status:\n"
@@ -5135,51 +4965,50 @@ msgstr ""
 "    sortida zero, també s'executa la corresponent llista «then ORDRES», i\n"
 "    l'ordre if finalitza.  En cas contrari, la llista «else ORDRES»\n"
 "    s'executa, si és que existeix.  L'estat de sortida la construcció\n"
-"    sencera és l'estat de sortida de l'última ordre executada, o zero si "
-"cap\n"
+"    sencera és l'estat de sortida de l'última ordre executada, o zero si cap\n"
 "    de les condicions s'avalua com a certa.\n"
 "\n"
 "    Estat de sortida:\n"
 "    Torna l'estat de l'última ordre executada."
 
-#: builtins.c:1647
+#: builtins.c:1648
 msgid ""
 "Execute commands as long as a test succeeds.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `while' COMMANDS has an exit status of zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n"
+"    an exit status of zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
 "Executa ordres repetidament mentre es compleixi una condició.\n"
 "\n"
-"    Expandeix i executa ORDRES repetidament mentre l'última ordre de les\n"
-"    «ORDRES while» tingui estat de sortida igual a zero.\n"
+"    Expandeix i executa ORDRES-2 repetidament mentre l'última ordre de\n"
+"    les ORDRES tingui estat de sortida igual a zero.\n"
 "\n"
 "    Estat de sortida:\n"
 "    Torna l'estat de l'última ordre executada."
 
-#: builtins.c:1659
+#: builtins.c:1660
 msgid ""
 "Execute commands as long as a test does not succeed.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `until' COMMANDS has an exit status which is not zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n"
+"    an exit status which is not zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
 "Executa ordres repetidament mentre no es compleixi una condició.\n"
 "\n"
-"    Expandeix i executa ORDRES repetidament mentre l'última ordre de les\n"
-"    ORDRES «until» tingui estat de sortida diferent de zero.\n"
+"    Expandeix i executa ORDRES-2 repetidament mentre l'última ordre de\n"
+"    les ORDRES tingui estat de sortida diferent de zero.\n"
 "\n"
 "    Estat de sortida:\n"
 "    Torna l'estat de l'última ordre executada."
 
 # help coproc
-#: builtins.c:1671
+#: builtins.c:1672
 msgid ""
 "Create a coprocess named NAME.\n"
 "    \n"
@@ -5193,8 +5022,7 @@ msgid ""
 msgstr ""
 "Crea un coprocés anomenat NOM.\n"
 "\n"
-"    Executa ORDRE de forma asincrònica, amb la sortida estàndard i "
-"l'entrada\n"
+"    Executa ORDRE de forma asincrònica, amb la sortida estàndard i l'entrada\n"
 "    estàndard de l'ordre connectades via canonada als descriptors de fitxer\n"
 "    assignats als índexs 0 i 1 de la variable vector NOM.  Per defecte NOM\n"
 "    és \"COPROC\".\n"
@@ -5202,13 +5030,12 @@ msgstr ""
 "    Estat de sortida:\n"
 "    Torna l'estat de sortida d'ORDRE."
 
-#: builtins.c:1685
+#: builtins.c:1686
 msgid ""
 "Define shell function.\n"
 "    \n"
 "    Create a shell function named NAME.  When invoked as a simple command,\n"
-"    NAME runs COMMANDs in the calling shell's context.  When NAME is "
-"invoked,\n"
+"    NAME runs COMMANDs in the calling shell's context.  When NAME is invoked,\n"
 "    the arguments are passed to the function as $1...$n, and the function's\n"
 "    name is in $FUNCNAME.\n"
 "    \n"
@@ -5217,8 +5044,7 @@ msgid ""
 msgstr ""
 "Defineix una funció.\n"
 "\n"
-"    Crea una funció de l'intèrpret anomenada NOM.  Quan s'invoca com a "
-"ordre\n"
+"    Crea una funció de l'intèrpret anomenada NOM.  Quan s'invoca com a ordre\n"
 "    simple, NOM executa ORDRES en el context de l'intèrpret de qui fa la\n"
 "    crida.  Quan NOM s'invoca, els arguments es passen a la funció com a\n"
 "    $1...$n, i el nom de la funció es troba a $FUNCNAME.\n"
@@ -5226,7 +5052,7 @@ msgstr ""
 "    Estat de sortida:\n"
 "    Torna èxit, excepte si NOM és de només lectura."
 
-#: builtins.c:1699
+#: builtins.c:1700
 msgid ""
 "Group commands as a unit.\n"
 "    \n"
@@ -5244,7 +5070,7 @@ msgstr ""
 "    Estat de sortida:\n"
 "    Torna l'estat de sortida de l'última ordre executada."
 
-#: builtins.c:1711
+#: builtins.c:1712
 msgid ""
 "Resume job in foreground.\n"
 "    \n"
@@ -5259,8 +5085,7 @@ msgid ""
 msgstr ""
 "Reprèn una feina i la porta al primer pla.\n"
 "\n"
-"    Equivalent a utilitzar FEINA com a argument en l'ordre «fg».  Reprèn "
-"una\n"
+"    Equivalent a utilitzar FEINA com a argument en l'ordre «fg».  Reprèn una\n"
 "    feina aturada o en segon pla.  FEINA pot ser el nom d'una feina, o el\n"
 "    número d'una feina.  Si es troba un «&» després de FEINA, llavors la\n"
 "    feina s'envia en un segon pla, com si l'especificació de feina\n"
@@ -5270,8 +5095,7 @@ msgstr ""
 "    Torna l'estat de sortida de la feina represa."
 
 # help '(('
-#: builtins.c:1726
-#, fuzzy
+#: builtins.c:1727
 msgid ""
 "Evaluate arithmetic expression.\n"
 "    \n"
@@ -5290,16 +5114,13 @@ msgstr ""
 "    Si el resultat de l'avaluació és 0, torna 1; altrament torna 0."
 
 # help '[['
-#: builtins.c:1738
+#: builtins.c:1739
 msgid ""
 "Execute conditional command.\n"
 "    \n"
-"    Returns a status of 0 or 1 depending on the evaluation of the "
-"conditional\n"
-"    expression EXPRESSION.  Expressions are composed of the same primaries "
-"used\n"
-"    by the `test' builtin, and may be combined using the following "
-"operators:\n"
+"    Returns a status of 0 or 1 depending on the evaluation of the conditional\n"
+"    expression EXPRESSION.  Expressions are composed of the same primaries used\n"
+"    by the `test' builtin, and may be combined using the following operators:\n"
 "    \n"
 "      ( EXPRESSION )\tReturns the value of EXPRESSION\n"
 "      ! EXPRESSION\t\tTrue if EXPRESSION is false; else false\n"
@@ -5330,10 +5151,8 @@ msgstr ""
 "      EXPR1 || EXPR2    Cert si EXPR1 o EXPR2 és cert; si no, fals.\n"
 "\n"
 "    Quan s'utilitzen els operadors «==» o «!=», el component de la dreta\n"
-"    s'interpreta com a un patró i es comprova si coincideix amb la cadena "
-"de\n"
-"    l'esquerra de l'operador.  Quan s'utilitza l'operador «=~», el "
-"component\n"
+"    s'interpreta com a un patró i es comprova si coincideix amb la cadena de\n"
+"    l'esquerra de l'operador.  Quan s'utilitza l'operador «=~», el component\n"
 "    de la dreta de l'operador s'interpreta com a expressió regular i es\n"
 "    comprova si coincideix amb la cadena de l'esquerra de l'operador.\n"
 "\n"
@@ -5343,7 +5162,7 @@ msgstr ""
 "    Estat de sortida:\n"
 "    0 o 1, depenent del valor d'EXPRESSIÓ."
 
-#: builtins.c:1764
+#: builtins.c:1765
 msgid ""
 "Common shell variable names and usage.\n"
 "    \n"
@@ -5399,45 +5218,45 @@ msgstr ""
 "Nom i ús de variables de l'intèrpret habituals.\n"
 "\n"
 "    BASH_VERSION        Informació de la versió de Bash.\n"
-"    CDPATH\t\tLlista de directoris separats per «:» on buscar\n"
+"    CDPATH              Llista de directoris separats per «:» on buscar\n"
 "                        directoris passats com a arguments a «cd».\n"
-"    GLOBIGNORE\t\tLlista de patrons separats per «:» que indiquen noms\n"
+"    GLOBIGNORE          Llista de patrons separats per «:» que indiquen noms\n"
 "                        que s'ignoren en fer expansions de noms de fitxer.\n"
-"    HISTFILE\t\tNom del fitxer on es desa l'historial d'ordres.\n"
-"    HISTFILESIZE\tNombre màxim de línies que pot contenir el\n"
+"    HISTFILE            Nom del fitxer on es desa l'historial d'ordres.\n"
+"    HISTFILESIZE        Nombre màxim de línies que pot contenir el\n"
 "                        fitxer de l'historial.\n"
-"    HISTSIZE\t\tNombre màxim de línies de l'historial a què un\n"
-"    \t\t\tintèrpret té accés.\n"
-"    HOME\t\tCamí complet cap al vostre directori personal.\n"
-"    HOSTNAME\t\tNom de la màquina actual.\n"
-"    HOSTTYPE\t\tTipus de CPU de la màquina en què corre Bash.\n"
-"    IGNOREEOF\t        Controla el comportament de l'intèrpret en trobar un\n"
-"    \t\t\tcaràcter EOF (final de fitxer) com a únic caràcter.\n"
+"    HISTSIZE            Nombre màxim de línies de l'historial a què un\n"
+"                        intèrpret té accés.\n"
+"    HOME                Camí complet cap al vostre directori personal.\n"
+"    HOSTNAME            Nom de la màquina actual.\n"
+"    HOSTTYPE            Tipus de CPU de la màquina en què corre Bash.\n"
+"    IGNOREEOF           Controla el comportament de l'intèrpret en trobar un\n"
+"                        caràcter EOF (final de fitxer) com a únic caràcter.\n"
 "                        Si la variable està definida, llavors el seu valor\n"
 "                        és el nombre de caràcters EOF seguits que es poden\n"
 "                        llegir en una línia buida abans que l'intèrpret\n"
 "                        surti (per defecte: 10).  Si no està definida, EOF\n"
 "                        s'interpreta com el final de les dades d'entrada.\n"
-"    MACHTYPE\t\tCadena que descriu el sistema en què corre Bash.\n"
-"    MAILCHECK\t\tAmb quina freqüència, en segons, Bash comprova si hi\n"
+"    MACHTYPE            Cadena que descriu el sistema en què corre Bash.\n"
+"    MAILCHECK           Amb quina freqüència, en segons, Bash comprova si hi\n"
 "                        ha correu nou.\n"
-"    MAILPATH\t\tLlista de fitxers separats per «:» que Bash comprova\n"
+"    MAILPATH            Llista de fitxers separats per «:» que Bash comprova\n"
 "                        si tenen correu nou.\n"
-"    OSTYPE\t\tLa versió de Unix en què corre Bash.\n"
-"    PATH\t\tLlista de directoris separats per «:» on buscar quan\n"
-"    \t\t\tse cerquen ordres.\n"
-"    PROMPT_COMMAND\tOrdre que s'executa cada cop abans de mostrar\n"
-"    \t\t\tl'introductor de l'intèrpret.\n"
-"    PS1\t\t\tCadena de l'introductor principal.\n"
-"    PS2\t\t\tCadena de l'introductor secundari.\n"
-"    PWD\t\t\tCamí complet cap al directori corrent.\n"
-"    SHELLOPTS\t\tLlista d'opcions habilitades separades per «:».\n"
-"    TERM\t\tNom del tipus de terminal actual.\n"
-"    TIMEFORMAT\t\tFormat de sortida per a les estadístiques de temps\n"
-"    \t\t\tproduïdes per l'ordre «time».\n"
-"    auto_resume\t\tNo-nul·la significa que una ordre sola en una línia\n"
-"    \t\t\tes busca en primera instància a la llista actual de\n"
-"    \t\t\tfeines aturades.  Si es troba, aquella feina es\n"
+"    OSTYPE              La versió de Unix en què corre Bash.\n"
+"    PATH                Llista de directoris separats per «:» on buscar quan\n"
+"                        se cerquen ordres.\n"
+"    PROMPT_COMMAND      Ordre que s'executa cada cop abans de mostrar\n"
+"                        l'introductor de l'intèrpret.\n"
+"    PS1                 Cadena de l'introductor principal.\n"
+"    PS2                 Cadena de l'introductor secundari.\n"
+"    PWD                 Camí complet cap al directori corrent.\n"
+"    SHELLOPTS           Llista d'opcions habilitades separades per «:».\n"
+"    TERM                Nom del tipus de terminal actual.\n"
+"    TIMEFORMAT          Format de sortida per a les estadístiques de temps\n"
+"                        produïdes per l'ordre «time».\n"
+"    auto_resume         No-nul·la significa que una ordre sola en una línia\n"
+"                        es busca en primera instància a la llista actual de\n"
+"                        feines aturades.  Si es troba, aquella feina es\n"
 "                        passa a primer pla.  El valor «exact» significa que\n"
 "                        l'ordre ha de coincidir exactament amb alguna ordre\n"
 "                        de la llista de feines aturades.  El valor\n"
@@ -5445,18 +5264,18 @@ msgstr ""
 "                        amb una subcadena de la feina.  Qualsevol altre\n"
 "                        valor significa que l'ordre ha de ser el prefix\n"
 "                        d'una feina aturada.\n"
-"    histchars\t\tCaràcters que controlen l'expansió de l'historial i\n"
-"    \t\t\tles substitucions ràpides.  El primer caràcter és el\n"
-"   \t\t\tcaràcter de substitució de l'historial, habitualment\n"
-"    \t\t\t«!».  El segon és el caràcter de «substitució\n"
+"    histchars           Caràcters que controlen l'expansió de l'historial i\n"
+"                        les substitucions ràpides.  El primer caràcter és el\n"
+"                        caràcter de substitució de l'historial, habitualment\n"
+"                        «!».  El segon és el caràcter de «substitució\n"
 "                        ràpida», normalment «^».  El tercer és el caràcter\n"
 "                        de «comentari d'historial», normalment «#».\n"
-"    HISTIGNORE\t\tLlista de patrons separats per «:» utilitzats per a\n"
-"    \t\t\tdecidir si les ordres s'han de desar a l'historial.\n"
+"    HISTIGNORE          Llista de patrons separats per «:» utilitzats per a\n"
+"                        decidir si les ordres s'han de desar a l'historial.\n"
 
 # si modifiqueu aquesta cadena cal actualitzar la còpia que es troba més
 # enrere en aquest fitxer
-#: builtins.c:1821
+#: builtins.c:1822
 msgid ""
 "Add directories to stack.\n"
 "    \n"
@@ -5518,7 +5337,7 @@ msgstr ""
 
 # si modifiqueu aquesta cadena cal actualitzar la còpia que es troba més
 # enrere en aquest fitxer
-#: builtins.c:1855
+#: builtins.c:1856
 msgid ""
 "Remove directories from stack.\n"
 "    \n"
@@ -5573,7 +5392,7 @@ msgstr ""
 
 # si modifiqueu aquesta cadena cal actualitzar la còpia que es troba més
 # enrere en aquest fitxer
-#: builtins.c:1885
+#: builtins.c:1886
 msgid ""
 "Display directory stack.\n"
 "    \n"
@@ -5604,8 +5423,7 @@ msgstr ""
 "Mostra la pila de directoris.\n"
 "\n"
 "    Mostra la llista actual de directoris recordats.  Els directoris són\n"
-"    afegits a la llista mitjançant l'ordre «pushd»; podeu recórrer la "
-"llista\n"
+"    afegits a la llista mitjançant l'ordre «pushd»; podeu recórrer la llista\n"
 "    de directoris cap enrere amb l'ordre «popd».\n"
 "\n"
 "    Opcions:\n"
@@ -5629,8 +5447,7 @@ msgstr ""
 "    Retorna èxit, excepte si es rep una opció invàlida o es produeix un\n"
 "    error."
 
-#: builtins.c:1916
-#, fuzzy
+#: builtins.c:1917
 msgid ""
 "Set and unset shell options.\n"
 "    \n"
@@ -5651,21 +5468,23 @@ msgid ""
 msgstr ""
 "Activa i desactiva opcions de l'intèrpret.\n"
 "\n"
-"    Canvia l'estat de cada OPCIÓ.  Si no especifiqueu cap OPCIÓ, mostra una\n"
-"    llista de totes les opcions indicant si estan activades o no.\n"
+"    Canvia l'estat de cada OPCIÓ.  Sense cap argument d'opció, mostra un\n"
+"    llistat amb cada OPCIÓ, o un llistat amb totes les opcions de\n"
+"    l'intèrpret si no s'ha especificat cap OPCIÓ, indicant si les opcions\n"
+"    estan activades o no.\n"
 "\n"
 "    Opcions:\n"
 "      -o        limita les opcions a les que es poden canviar amb «set -o»\n"
-"      -p\tmostra totes les opcions indicant-ne l'estat\n"
-"      -q\tsuprimeix la sortida\n"
-"      -s\tactiva OPCIÓ\n"
-"      -u\tdesactiva OPCIÓ\n"
+"      -p        mostra totes les opcions indicant-ne l'estat\n"
+"      -q        suprimeix la sortida\n"
+"      -s        activa OPCIÓ\n"
+"      -u        desactiva OPCIÓ\n"
 "\n"
 "    Estat de sortida:\n"
 "    Torna èxit si OPCIÓ està activada; falla si especifiqueu una opció\n"
 "    invàlida o OPCIÓ està desactivada."
 
-#: builtins.c:1937
+#: builtins.c:1938
 msgid ""
 "Formats and prints ARGUMENTS under control of the FORMAT.\n"
 "    \n"
@@ -5673,34 +5492,29 @@ msgid ""
 "      -v var\tassign the output to shell variable VAR rather than\n"
 "    \t\tdisplay it on the standard output\n"
 "    \n"
-"    FORMAT is a character string which contains three types of objects: "
-"plain\n"
-"    characters, which are simply copied to standard output; character "
-"escape\n"
+"    FORMAT is a character string which contains three types of objects: plain\n"
+"    characters, which are simply copied to standard output; character escape\n"
 "    sequences, which are converted and copied to the standard output; and\n"
-"    format specifications, each of which causes printing of the next "
-"successive\n"
+"    format specifications, each of which causes printing of the next successive\n"
 "    argument.\n"
 "    \n"
-"    In addition to the standard format specifications described in "
-"printf(1),\n"
+"    In addition to the standard format specifications described in printf(1),\n"
 "    printf interprets:\n"
 "    \n"
 "      %b\texpand backslash escape sequences in the corresponding argument\n"
 "      %q\tquote the argument in a way that can be reused as shell input\n"
-"      %(fmt)T\toutput the date-time string resulting from using FMT as a "
-"format\n"
+"      %Q\tlike %q, but apply any precision to the unquoted argument before\n"
+"    \t\tquoting\n"
+"      %(fmt)T\toutput the date-time string resulting from using FMT as a format\n"
 "    \t        string for strftime(3)\n"
 "    \n"
 "    The format is re-used as necessary to consume all of the arguments.  If\n"
 "    there are fewer arguments than the format requires,  extra format\n"
-"    specifications behave as if a zero value or null string, as "
-"appropriate,\n"
+"    specifications behave as if a zero value or null string, as appropriate,\n"
 "    had been supplied.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success unless an invalid option is given or a write or "
-"assignment\n"
+"    Returns success unless an invalid option is given or a write or assignment\n"
 "    error occurs."
 msgstr ""
 "Formata i escriu ARGUMENTS d'acord amb FORMAT.\n"
@@ -5721,6 +5535,8 @@ msgstr ""
 "      %b       expandeix seqüències d'escapada a l'argument corresponent\n"
 "      %q       afegeix les cometes necessàries perquè l'argument pugui ser\n"
 "               utilitzat com a entrada de l'intèrpret\n"
+"      %Q       com %q, però aplica qualsevol precisió a l'argument abans\n"
+"               d'afegir les cometes \n"
 "      %(fmt)T  escriu la cadena resultant de passar FMT a strftime(3) com a\n"
 "               argument\n"
 "\n"
@@ -5733,15 +5549,12 @@ msgstr ""
 "    Retorna èxit, excepte si es rep una opció invàlida o es produeix un\n"
 "    error d'assignació o d'escriptura."
 
-#: builtins.c:1971
-#, fuzzy
+#: builtins.c:1974
 msgid ""
 "Specify how arguments are to be completed by Readline.\n"
 "    \n"
-"    For each NAME, specify how arguments are to be completed.  If no "
-"options\n"
-"    are supplied, existing completion specifications are printed in a way "
-"that\n"
+"    For each NAME, specify how arguments are to be completed.  If no options\n"
+"    are supplied, existing completion specifications are printed in a way that\n"
 "    allows them to be reused as input.\n"
 "    \n"
 "    Options:\n"
@@ -5756,10 +5569,8 @@ msgid ""
 "    \t\tcommand) word\n"
 "    \n"
 "    When completion is attempted, the actions are applied in the order the\n"
-"    uppercase-letter options are listed above. If multiple options are "
-"supplied,\n"
-"    the -D option takes precedence over -E, and both take precedence over -"
-"I.\n"
+"    uppercase-letter options are listed above. If multiple options are supplied,\n"
+"    the -D option takes precedence over -E, and both take precedence over -I.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns success unless an invalid option is supplied or an error occurs."
@@ -5773,26 +5584,29 @@ msgstr ""
 "    Opcions:\n"
 "      -p        mostra les especificacions existents en format reciclable\n"
 "      -r        suprimeix l'especificació de compleció per a NOM, o, si no\n"
-"      \t\ts'indica cap NOM, totes les especificacions de compleció\n"
-"      -D        assigna les accions o complecions a totes les ordres que no\n"
+"                s'indica cap NOM, totes les especificacions de compleció\n"
+"      -D        assigna les accions i complecions a totes les ordres que no\n"
 "                tenen definida una compleció específica\n"
-"      -E        assigna les accions o complecions a ordres \"en blanc\", o\n"
+"      -E        assigna les accions i complecions a ordres \"en blanc\", o\n"
 "                sigui, als intents de completar una línia en blanc\n"
+"      -I        assigna les accions i complecions a la paraula inicial\n"
+"                (normalment una ordre)\n"
 "\n"
-"    Quan s'intenta una compleció, les accions s'apliquen en l'ordre en què\n"
-"    les opcions -D i -E apareixen al paràgraf anterior.  L'opció -D té\n"
-"    preferència sobre l'opció -E.\n"
+"    Quan s'intenta una compleció, s'apliquen primer les accions\n"
+"    especificades amb l'opció -D, seguides de les acciones especificades amb\n"
+"    l'opció -E, i l'opció -I (en aquest ordre).  Si es proporcionen\n"
+"    múltiples opcions, l'opció -D té preferència sobre l'opció -E, i ambdues\n"
+"    opcions tenen preferència sobre l'opció -I.\n"
 "\n"
 "    Estat de sortida:\n"
 "    Torna èxit, excepte si passeu una opció invàlida o es produeix un error."
 
-#: builtins.c:2001
+#: builtins.c:2004
 msgid ""
 "Display possible completions depending on the options.\n"
 "    \n"
 "    Intended to be used from within a shell function generating possible\n"
-"    completions.  If the optional WORD argument is supplied, matches "
-"against\n"
+"    completions.  If the optional WORD argument is supplied, matches against\n"
 "    WORD are generated.\n"
 "    \n"
 "    Exit Status:\n"
@@ -5800,25 +5614,20 @@ msgid ""
 msgstr ""
 "Mostra possibles complecions en funció de les opcions.\n"
 "\n"
-"    Aquesta ordre està pensada per a ser utilitzada en una funció que "
-"generi\n"
+"    Aquesta ordre està pensada per a ser utilitzada en una funció que generi\n"
 "    possibles complecions.  Si especifiqueu l'argument opcional PARAULA, es\n"
 "    limiten les complecions a aquelles que coincideixen amb PARAULA.\n"
 "\n"
 "    Estat de sortida:\n"
 "    Torna èxit, excepte si passeu una opció invàlida o es produeix un error."
 
-#: builtins.c:2016
-#, fuzzy
+#: builtins.c:2019
 msgid ""
 "Modify or display completion options.\n"
 "    \n"
-"    Modify the completion options for each NAME, or, if no NAMEs are "
-"supplied,\n"
-"    the completion currently being executed.  If no OPTIONs are given, "
-"print\n"
-"    the completion options for each NAME or the current completion "
-"specification.\n"
+"    Modify the completion options for each NAME, or, if no NAMEs are supplied,\n"
+"    the completion currently being executed.  If no OPTIONs are given, print\n"
+"    the completion options for each NAME or the current completion specification.\n"
 "    \n"
 "    Options:\n"
 "    \t-o option\tSet completion option OPTION for each NAME\n"
@@ -5842,17 +5651,16 @@ msgid ""
 msgstr ""
 "Modifica o mostra opcions de compleció.\n"
 "\n"
-"    Modifica les opcions de compleció de NOM, o, si no especifiqueu cap "
-"NOM,\n"
+"    Modifica les opcions de compleció de NOM, o, si no especifiqueu cap NOM,\n"
 "    la compleció que s'està executant en el moment.  Si no s'indica cap\n"
 "    OPCIÓ, mostra les opcions de compleció per a cada NOM o\n"
 "    l'especificació de compleció en ús.\n"
 "\n"
 "    Opcions:\n"
 "        -o opció        Activa OPCIÓ per a NOM\n"
-"        -D              Canvia les opcions de compleció d'ordres per "
-"defecte\n"
-"        -E              Canvia les opcions de compleció d'ordres \"buides\"\n"
+"        -D              Canvia les opcions de compleció d'ordres per defecte\n"
+"        -E              Canvia les opcions de compleció d'ordres «buides»\n"
+"        -I              Canvia les opcions de compleció de la paraula inicial\n"
 "\n"
 "    Si utilitzeu «+o» en lloc de «-o», desactiva l'opció especificada.\n"
 "\n"
@@ -5860,8 +5668,7 @@ msgstr ""
 "\n"
 "    Cada NOM és el nom d'una ordre per la qual s'ha d'haver definit una\n"
 "    especificació de compleció amb l'ordre interna «complete».  Si no\n"
-"    especifiqueu cap NOM, compopt s'ha de cridar des d'una funció "
-"generadora\n"
+"    especifiqueu cap NOM, compopt s'ha de cridar des d'una funció generadora\n"
 "    de complecions, i les opcions que es modifiquen afecten la generació de\n"
 "    complecions que s'està executant en aquell moment.\n"
 "\n"
@@ -5870,26 +5677,21 @@ msgstr ""
 "    definida cap especificació de compleció."
 
 # help readarray
-#: builtins.c:2047
+#: builtins.c:2050
 msgid ""
 "Read lines from the standard input into an indexed array variable.\n"
 "    \n"
-"    Read lines from the standard input into the indexed array variable "
-"ARRAY, or\n"
-"    from file descriptor FD if the -u option is supplied.  The variable "
-"MAPFILE\n"
+"    Read lines from the standard input into the indexed array variable ARRAY, or\n"
+"    from file descriptor FD if the -u option is supplied.  The variable MAPFILE\n"
 "    is the default ARRAY.\n"
 "    \n"
 "    Options:\n"
 "      -d delim\tUse DELIM to terminate lines, instead of newline\n"
-"      -n count\tCopy at most COUNT lines.  If COUNT is 0, all lines are "
-"copied\n"
-"      -O origin\tBegin assigning to ARRAY at index ORIGIN.  The default "
-"index is 0\n"
+"      -n count\tCopy at most COUNT lines.  If COUNT is 0, all lines are copied\n"
+"      -O origin\tBegin assigning to ARRAY at index ORIGIN.  The default index is 0\n"
 "      -s count\tDiscard the first COUNT lines read\n"
 "      -t\tRemove a trailing DELIM from each line read (default newline)\n"
-"      -u fd\tRead lines from file descriptor FD instead of the standard "
-"input\n"
+"      -u fd\tRead lines from file descriptor FD instead of the standard input\n"
 "      -C callback\tEvaluate CALLBACK each time QUANTUM lines are read\n"
 "      -c quantum\tSpecify the number of lines read between each call to\n"
 "    \t\t\tCALLBACK\n"
@@ -5902,13 +5704,11 @@ msgid ""
 "    element to be assigned and the line to be assigned to that element\n"
 "    as additional arguments.\n"
 "    \n"
-"    If not supplied with an explicit origin, mapfile will clear ARRAY "
-"before\n"
+"    If not supplied with an explicit origin, mapfile will clear ARRAY before\n"
 "    assigning to it.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success unless an invalid option is given or ARRAY is readonly "
-"or\n"
+"    Returns success unless an invalid option is given or ARRAY is readonly or\n"
 "    not an indexed array."
 msgstr ""
 "Llegeix línies d'un fitxer cap a una variable vector.\n"
@@ -5918,26 +5718,23 @@ msgstr ""
 "    per defecte és MAPFILE.\n"
 "\n"
 "    Opcions:\n"
-"      -d delim  Usa DELIM com delimitador de línies, en lloc del caràcter "
-"de\n"
+"      -d delim  Usa DELIM com delimitador de línies, en lloc del caràcter de\n"
 "                salt de línia\n"
 "      -n nombre Copia com a màxim NOMBRE línies.  Si NOMBRE és 0, es copien\n"
-"    \t\ttotes les línies.\n"
+"                totes les línies.\n"
 "      -O origen Comença l'assignació a l'índex ORIGEN, per defecte 0.\n"
 "      -s nombre Descarta les primeres NOMBRE línies.\n"
 "      -t        Estripa el caràcter de salt de línia de cada línia llegida.\n"
 "      -u fd     Llegeix el descriptor de fitxer FD, en lloc de l'entrada\n"
 "                estàndard.\n"
 "      -C callback         Avalua CALLBACK cada QUÀNTUM línies llegides.\n"
-"      -c quàntum          Nombre de línies llegides abans de cridar "
-"CALLBACK\n"
+"      -c quàntum          Nombre de línies llegides abans de cridar CALLBACK\n"
 "\n"
 "    Arguments:\n"
 "      VECTOR    Nom de la variable vector per a les dades.\n"
 "\n"
 "    Si especifiqueu l'opció -C sense -c, el quàntum per defecte és 5000.\n"
-"    Quan s'avalua la funció CALLBACK, se li passa l'índex del proper "
-"element\n"
+"    Quan s'avalua la funció CALLBACK, se li passa l'índex del proper element\n"
 "    del vector i la línia que s'assigna a aquest element, com a arguments\n"
 "    addicionals.\n"
 "\n"
@@ -5948,7 +5745,7 @@ msgstr ""
 "    Torna èxit, excepte si passeu una opció no vàlida o VECTOR és de només\n"
 "    lectura o no és una variable vector."
 
-#: builtins.c:2083
+#: builtins.c:2086
 msgid ""
 "Read lines from a file into an array variable.\n"
 "    \n"
@@ -5958,9 +5755,8 @@ msgstr ""
 "\n"
 "    Un sinònim de «mapfile»."
 
-#, fuzzy
-#~ msgid "Copyright (C) 2019 Free Software Foundation, Inc."
-#~ msgstr "Copyright (C) 2016 Free Software Foundation, Inc."
+#~ msgid "%s: invalid associative array key"
+#~ msgstr "%s: clau de vector associatiu no vàlida"
 
 #~ msgid "add_process: process %5ld (%s) in the_pipeline"
 #~ msgstr "add_process: procés %5ld (%s) a the_pipeline"
@@ -5968,6 +5764,9 @@ msgstr ""
 #~ msgid "Unknown Signal #"
 #~ msgstr "Senyal Desconegut #"
 
+#~ msgid "Copyright (C) 2016 Free Software Foundation, Inc."
+#~ msgstr "Copyright (C) 2016 Free Software Foundation, Inc."
+
 #, fuzzy
 #~ msgid "Copyright (C) 2014 Free Software Foundation, Inc."
 #~ msgstr "Copyright (C) 2013 Free Software Foundation, Inc."
index aa75fcc52b49071ee3961c62307f662515cd8d7d..39e0b6c70435f9b50ad42d31a54a148c27d42322 100644 (file)
Binary files a/po/cs.gmo and b/po/cs.gmo differ
index bb123dbde910c30c0460111f29ea431626453493..d2df43b127bebc9bf406b7039204be50bf72a4d8 100644 (file)
--- a/po/cs.po
+++ b/po/cs.po
@@ -2,7 +2,7 @@
 # Copyright (C) 2008 Free Software Foundation, Inc.
 # This file is distributed under the same license as the bash package.
 # Petr Pisar <petr.pisar@atlas.cz>, 2008, 2009, 2010, 2011, 2012, 2013, 2014.
-# Petr Pisar <petr.pisar@atlas.cz>, 2015, 2016, 2018, 2019, 2020.
+# Petr Pisar <petr.pisar@atlas.cz>, 2015, 2016, 2018, 2019, 2020, 2022.
 #
 # alias → alias
 # subscript → podskript
 # Názvy signálů a stavů procesu by měly souhlasit se signal(7).
 msgid ""
 msgstr ""
-"Project-Id-Version: bash 5.1\n"
+"Project-Id-Version: bash 5.2-rc1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-11-28 12:51-0500\n"
-"PO-Revision-Date: 2020-12-10 10:46+01:00\n"
+"POT-Creation-Date: 2022-01-11 14:50-0500\n"
+"PO-Revision-Date: 2022-06-21 20:10+02:00\n"
 "Last-Translator: Petr Pisar <petr.pisar@atlas.cz>\n"
 "Language-Team: Czech <translation-team-cs@lists.sourceforge.net>\n"
 "Language: cs\n"
@@ -29,57 +29,52 @@ msgstr ""
 msgid "bad array subscript"
 msgstr "chybný podskript pole"
 
-#: arrayfunc.c:421 builtins/declare.def:638 variables.c:2274 variables.c:2300
-#: variables.c:3133
+#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268
+#: variables.c:3101
 #, c-format
 msgid "%s: removing nameref attribute"
 msgstr "%s: odstraňuje se atribut odkazu na název"
 
-#: arrayfunc.c:446 builtins/declare.def:851
+#: arrayfunc.c:496 builtins/declare.def:868
 #, c-format
 msgid "%s: cannot convert indexed to associative array"
 msgstr "%s: číslované pole nezle převést na pole asociativní"
 
-#: arrayfunc.c:700
-#, c-format
-msgid "%s: invalid associative array key"
-msgstr "%s: neplatný klíč asociativního pole"
-
-#: arrayfunc.c:702
+#: arrayfunc.c:777
 #, c-format
 msgid "%s: cannot assign to non-numeric index"
 msgstr "%s: přes nečíselný indexu nelze dosadit"
 
-#: arrayfunc.c:747
+#: arrayfunc.c:822
 #, c-format
 msgid "%s: %s: must use subscript when assigning associative array"
 msgstr "%s: %s: při přiřazovaní asociativního pole se musí použít podskript"
 
-#: bashhist.c:452
+#: bashhist.c:455
 #, c-format
 msgid "%s: cannot create: %s"
 msgstr "%s: nelze vytvořit: %s"
 
-#: bashline.c:4310
+#: bashline.c:4479
 msgid "bash_execute_unix_command: cannot find keymap for command"
 msgstr "bash_execute_unix_command: pro příkaz nelze nalézt klávesovou mapu "
 
-#: bashline.c:4459
+#: bashline.c:4637
 #, c-format
 msgid "%s: first non-whitespace character is not `\"'"
 msgstr "%s: první nebílý znak není „\"“"
 
-#: bashline.c:4488
+#: bashline.c:4666
 #, c-format
 msgid "no closing `%c' in %s"
 msgstr "ne zavírající „%c“ v %s"
 
-#: bashline.c:4519
+#: bashline.c:4697
 #, c-format
 msgid "%s: missing colon separator"
 msgstr "%s: chybí dvojtečkový oddělovač"
 
-#: bashline.c:4555
+#: bashline.c:4733
 #, c-format
 msgid "`%s': cannot unbind in command keymap"
 msgstr "„%s“: v mapě kláves příkazů nelze zrušit vazbu"
@@ -100,7 +95,7 @@ msgstr "závorková expanze: alokace paměti pro %u prvků selhala"
 msgid "brace expansion: failed to allocate memory for `%s'"
 msgstr "závorková expanze: alokace paměti pro „%s“ selhala"
 
-#: builtins/alias.def:131 variables.c:1844
+#: builtins/alias.def:131 variables.c:1817
 #, c-format
 msgid "`%s': invalid alias name"
 msgstr "„%s“: chybný název aliasu"
@@ -171,7 +166,7 @@ msgstr ""
 msgid "HOME not set"
 msgstr "není nestavena HOME"
 
-#: builtins/cd.def:335 builtins/common.c:161 test.c:901
+#: builtins/cd.def:335 builtins/common.c:161 test.c:916
 msgid "too many arguments"
 msgstr "příliš mnoho argumentů"
 
@@ -198,7 +193,7 @@ msgstr "varování: "
 msgid "%s: usage: "
 msgstr "%s: užití: "
 
-#: builtins/common.c:193 shell.c:516 shell.c:844
+#: builtins/common.c:193 shell.c:524 shell.c:866
 #, c-format
 msgid "%s: option requires an argument"
 msgstr "%s: přepínač vyžaduje argument"
@@ -213,7 +208,7 @@ msgstr "%s: vyžadován číselný argument"
 msgid "%s: not found"
 msgstr "%s: nenalezeno"
 
-#: builtins/common.c:216 shell.c:857
+#: builtins/common.c:216 shell.c:879
 #, c-format
 msgid "%s: invalid option"
 msgstr "%s: chybný přepínač"
@@ -223,7 +218,7 @@ msgstr "%s: chybný přepínač"
 msgid "%s: invalid option name"
 msgstr "%s: chybný název přepínače"
 
-#: builtins/common.c:230 execute_cmd.c:2373 general.c:368 general.c:373
+#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373
 #, c-format
 msgid "`%s': not a valid identifier"
 msgstr "„%s“: není platným identifikátorem"
@@ -236,7 +231,7 @@ msgstr "neplatné osmičkové číslo"
 msgid "invalid hex number"
 msgstr "chybné šestnáctkové číslo"
 
-#: builtins/common.c:244 expr.c:1569
+#: builtins/common.c:244 expr.c:1574
 msgid "invalid number"
 msgstr "chybné číslo"
 
@@ -250,88 +245,93 @@ msgstr "%s: chybné určení signálu"
 msgid "`%s': not a pid or valid job spec"
 msgstr "„%s“: není PID ani platným označením úlohy"
 
-#: builtins/common.c:266 error.c:510
+#: builtins/common.c:266 error.c:536
 #, c-format
 msgid "%s: readonly variable"
 msgstr "%s: proměnná pouze pro čtení"
 
-#: builtins/common.c:274
+#: builtins/common.c:273
+#, c-format
+msgid "%s: cannot assign"
+msgstr "%s: nelze přiřadit"
+
+#: builtins/common.c:281
 #, c-format
 msgid "%s: %s out of range"
 msgstr "%s: %s mimo rozsah"
 
-#: builtins/common.c:274 builtins/common.c:276
+#: builtins/common.c:281 builtins/common.c:283
 msgid "argument"
 msgstr "argument"
 
-#: builtins/common.c:276
+#: builtins/common.c:283
 #, c-format
 msgid "%s out of range"
 msgstr "%s mimo rozsah"
 
-#: builtins/common.c:284
+#: builtins/common.c:291
 #, c-format
 msgid "%s: no such job"
 msgstr "%s: žádná taková úloha"
 
-#: builtins/common.c:292
+#: builtins/common.c:299
 #, c-format
 msgid "%s: no job control"
 msgstr "%s: žádné řízení úloh"
 
-#: builtins/common.c:294
+#: builtins/common.c:301
 msgid "no job control"
 msgstr "žádné řízení úloh"
 
-#: builtins/common.c:304
+#: builtins/common.c:311
 #, c-format
 msgid "%s: restricted"
 msgstr "%s: omezeno"
 
-#: builtins/common.c:306
+#: builtins/common.c:313
 msgid "restricted"
 msgstr "omezeno"
 
-#: builtins/common.c:314
+#: builtins/common.c:321
 #, c-format
 msgid "%s: not a shell builtin"
 msgstr "%s: není vestavěným příkazem shellu"
 
-#: builtins/common.c:323
+#: builtins/common.c:330
 #, c-format
 msgid "write error: %s"
 msgstr "chyba zápisu: %s"
 
-#: builtins/common.c:331
+#: builtins/common.c:338
 #, c-format
 msgid "error setting terminal attributes: %s"
 msgstr "chyba při nastavování vlastností terminálu: %s"
 
-#: builtins/common.c:333
+#: builtins/common.c:340
 #, c-format
 msgid "error getting terminal attributes: %s"
 msgstr "chyba při získávání vlastností terminálu: %s"
 
-#: builtins/common.c:635
+#: builtins/common.c:642
 #, c-format
 msgid "%s: error retrieving current directory: %s: %s\n"
 msgstr "%s: chyba při zjišťování současného adresáře: %s: %s\n"
 
-#: builtins/common.c:701 builtins/common.c:703
+#: builtins/common.c:708 builtins/common.c:710
 #, c-format
 msgid "%s: ambiguous job spec"
 msgstr "%s: nejednoznačné určení úlohy"
 
-#: builtins/common.c:964
+#: builtins/common.c:971
 msgid "help not available in this version"
 msgstr "k této verzi není dostupná nápověda"
 
-#: builtins/common.c:1008 builtins/set.def:953 variables.c:3839
+#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825
 #, c-format
 msgid "%s: cannot unset: readonly %s"
 msgstr "%s: nelze zrušit: %s jen pro čtení"
 
-#: builtins/common.c:1013 builtins/set.def:932 variables.c:3844
+#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830
 #, c-format
 msgid "%s: cannot unset"
 msgstr "%s: nelze zrušit"
@@ -341,108 +341,108 @@ msgstr "%s: nelze zrušit"
 msgid "%s: invalid action name"
 msgstr "%s: neplatný název akce"
 
-#: builtins/complete.def:486 builtins/complete.def:634
-#: builtins/complete.def:865
+#: builtins/complete.def:486 builtins/complete.def:642
+#: builtins/complete.def:873
 #, c-format
 msgid "%s: no completion specification"
 msgstr "%s: žádné doplňování neurčeno"
 
-#: builtins/complete.def:688
+#: builtins/complete.def:696
 msgid "warning: -F option may not work as you expect"
 msgstr "varování: přepínač -F možná nebude dělat, co jste čekali"
 
-#: builtins/complete.def:690
+#: builtins/complete.def:698
 msgid "warning: -C option may not work as you expect"
 msgstr "varování: přepínač -C možná nebude dělat, co jste čekali"
 
-#: builtins/complete.def:838
+#: builtins/complete.def:846
 msgid "not currently executing completion function"
 msgstr "doplňovací funkce se právě nevykonává"
 
-#: builtins/declare.def:134
+#: builtins/declare.def:137
 msgid "can only be used in a function"
 msgstr "může být použito jen ve funkci"
 
-#: builtins/declare.def:363 builtins/declare.def:756
+#: builtins/declare.def:437
+msgid "cannot use `-f' to make functions"
+msgstr "„-f“ nezle použít na výrobu funkce"
+
+#: builtins/declare.def:464 execute_cmd.c:6132
+#, c-format
+msgid "%s: readonly function"
+msgstr "%s: funkce jen pro čtení"
+
+#: builtins/declare.def:521 builtins/declare.def:804
 #, c-format
 msgid "%s: reference variable cannot be an array"
 msgstr "%s: proměnná s odkazem nemůže být polem"
 
-#: builtins/declare.def:374 variables.c:3385
+#: builtins/declare.def:532 variables.c:3359
 #, c-format
 msgid "%s: nameref variable self references not allowed"
 msgstr "%s: proměnná s odkazem na název nemůže odkazovat sama na sebe"
 
-#: builtins/declare.def:379 variables.c:2104 variables.c:3304 variables.c:3312
-#: variables.c:3382
+#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286
+#: variables.c:3356
 #, c-format
 msgid "%s: circular name reference"
 msgstr "%s: kruhový odkaz na název"
 
-#: builtins/declare.def:384 builtins/declare.def:762 builtins/declare.def:773
+#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820
 #, c-format
 msgid "`%s': invalid variable name for name reference"
 msgstr "„%s“: neplatný název proměnné pro odkaz na název"
 
-#: builtins/declare.def:514
-msgid "cannot use `-f' to make functions"
-msgstr "„-f“ nezle použít na výrobu funkce"
-
-#: builtins/declare.def:526 execute_cmd.c:5986
-#, c-format
-msgid "%s: readonly function"
-msgstr "%s: funkce jen pro čtení"
-
-#: builtins/declare.def:824
-#, c-format
-msgid "%s: quoted compound array assignment deprecated"
-msgstr "%s: přiřazení do složeného pole uzavřeného v uvozovkách je zastaralé"
-
-#: builtins/declare.def:838
+#: builtins/declare.def:856
 #, c-format
 msgid "%s: cannot destroy array variables in this way"
 msgstr "%s: takto nelze likvidovat pole"
 
-#: builtins/declare.def:845 builtins/read.def:815
+#: builtins/declare.def:862 builtins/read.def:887
 #, c-format
 msgid "%s: cannot convert associative to indexed array"
 msgstr "%s: asociativní pole nelze převést na číslované pole"
 
-#: builtins/enable.def:143 builtins/enable.def:151
+#: builtins/declare.def:891
+#, c-format
+msgid "%s: quoted compound array assignment deprecated"
+msgstr "%s: přiřazení do složeného pole uzavřeného v uvozovkách je zastaralé"
+
+#: builtins/enable.def:145 builtins/enable.def:153
 msgid "dynamic loading not available"
 msgstr "dynamické nahrávání není dostupné"
 
-#: builtins/enable.def:343
+#: builtins/enable.def:376
 #, c-format
 msgid "cannot open shared object %s: %s"
 msgstr "sdílený objekt %s nelze otevřít: %s"
 
-#: builtins/enable.def:371
+#: builtins/enable.def:405
 #, c-format
 msgid "cannot find %s in shared object %s: %s"
 msgstr "ve sdílením objektu %2$s nelze nalézt %1$s: %3$s"
 
-#: builtins/enable.def:388
+#: builtins/enable.def:422
 #, c-format
 msgid "%s: dynamic builtin already loaded"
 msgstr "%s: vestavěné příkazy již dynamicky zavedeny"
 
-#: builtins/enable.def:392
+#: builtins/enable.def:426
 #, c-format
 msgid "load function for %s returns failure (%d): not loaded"
 msgstr "zaváděcí funkce pro %s vrací chybu (%d): nezavedeno"
 
-#: builtins/enable.def:517
+#: builtins/enable.def:551
 #, c-format
 msgid "%s: not dynamically loaded"
 msgstr "%s: není dynamicky nahráno"
 
-#: builtins/enable.def:543
+#: builtins/enable.def:577
 #, c-format
 msgid "%s: cannot delete: %s"
 msgstr "%s: nelze smazat: %s"
 
-#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5818
+#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959
 #, c-format
 msgid "%s: is a directory"
 msgstr "%s: je adresářem"
@@ -457,7 +457,7 @@ msgstr "%s: není obyčejný soubor"
 msgid "%s: file is too large"
 msgstr "%s: soubor je příliš velký"
 
-#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1647
+#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673
 #, c-format
 msgid "%s: cannot execute binary file"
 msgstr "%s: binární soubor nelze spustit"
@@ -555,12 +555,12 @@ msgstr ""
 msgid "no help topics match `%s'.  Try `help help' or `man -k %s' or `info %s'."
 msgstr "žádné téma nápovědy se nehodí pro „%s“. Zkuste „help help“ nebo „man -k %s“ nebo „info %s“."
 
-#: builtins/help.def:224
+#: builtins/help.def:223
 #, c-format
 msgid "%s: cannot open: %s"
 msgstr "%s: nelze otevřít: %s"
 
-#: builtins/help.def:524
+#: builtins/help.def:523
 #, c-format
 msgid ""
 "These shell commands are defined internally.  Type `help' to see this list.\n"
@@ -580,21 +580,21 @@ msgstr ""
 "Hvězdička (*) vedle jména znamená, že příkaz je zakázán.\n"
 "\n"
 
-#: builtins/history.def:155
+#: builtins/history.def:159
 msgid "cannot use more than one of -anrw"
 msgstr "nelze použít více jak jeden z -anrw"
 
-#: builtins/history.def:188 builtins/history.def:198 builtins/history.def:213
-#: builtins/history.def:230 builtins/history.def:242 builtins/history.def:249
+#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215
+#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247
 msgid "history position"
 msgstr "místo v historii"
 
-#: builtins/history.def:340
+#: builtins/history.def:338
 #, c-format
 msgid "%s: invalid timestamp"
 msgstr "%s: neplatný časový údaj"
 
-#: builtins/history.def:451
+#: builtins/history.def:449
 #, c-format
 msgid "%s: history expansion failed"
 msgstr "%s: expanze historie selhala"
@@ -617,78 +617,78 @@ msgstr "%s: argumenty musí být proces nebo identifikátor úlohy"
 msgid "Unknown error"
 msgstr "Neznámá chyba"
 
-#: builtins/let.def:97 builtins/let.def:122 expr.c:639 expr.c:657
+#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658
 msgid "expression expected"
 msgstr "očekáván výraz"
 
-#: builtins/mapfile.def:178
+#: builtins/mapfile.def:180
 #, c-format
 msgid "%s: not an indexed array"
 msgstr "%s: není (proměnnou typu) indexované pole"
 
-#: builtins/mapfile.def:271 builtins/read.def:308
+#: builtins/mapfile.def:276 builtins/read.def:336
 #, c-format
 msgid "%s: invalid file descriptor specification"
 msgstr "%s: chybné určení deskriptoru souboru"
 
-#: builtins/mapfile.def:279 builtins/read.def:315
+#: builtins/mapfile.def:284 builtins/read.def:343
 #, c-format
 msgid "%d: invalid file descriptor: %s"
 msgstr "%d: neplatný deskriptor souboru: %s"
 
-#: builtins/mapfile.def:288 builtins/mapfile.def:326
+#: builtins/mapfile.def:293 builtins/mapfile.def:331
 #, c-format
 msgid "%s: invalid line count"
 msgstr "%s: chybný počet řádků"
 
-#: builtins/mapfile.def:299
+#: builtins/mapfile.def:304
 #, c-format
 msgid "%s: invalid array origin"
 msgstr "%s: chybný počátek pole"
 
-#: builtins/mapfile.def:316
+#: builtins/mapfile.def:321
 #, c-format
 msgid "%s: invalid callback quantum"
 msgstr "%s: neplatné množství mezi voláními"
 
-#: builtins/mapfile.def:349
+#: builtins/mapfile.def:354
 msgid "empty array variable name"
 msgstr "prázdný název proměnné typu pole"
 
-#: builtins/mapfile.def:370
+#: builtins/mapfile.def:375
 msgid "array variable support required"
 msgstr "je vyžadována podpora proměnných typu pole"
 
-#: builtins/printf.def:419
+#: builtins/printf.def:430
 #, c-format
 msgid "`%s': missing format character"
 msgstr "„%s“: postrádám formátovací znak"
 
-#: builtins/printf.def:474
+#: builtins/printf.def:485
 #, c-format
 msgid "`%c': invalid time format specification"
 msgstr "„%c“: chybné určení časového limitu"
 
-#: builtins/printf.def:676
+#: builtins/printf.def:708
 #, c-format
 msgid "`%c': invalid format character"
 msgstr "„%c“: neplatný formátovací znak"
 
-#: builtins/printf.def:702
+#: builtins/printf.def:734
 #, c-format
 msgid "warning: %s: %s"
 msgstr "varování: %s: %s"
 
-#: builtins/printf.def:788
+#: builtins/printf.def:822
 #, c-format
 msgid "format parsing problem: %s"
 msgstr "potíže s rozebráním formátovacího řetězce: %s"
 
-#: builtins/printf.def:885
+#: builtins/printf.def:919
 msgid "missing hex digit for \\x"
 msgstr "u \\x chybí šestnáctková číslovka"
 
-#: builtins/printf.def:900
+#: builtins/printf.def:934
 #, c-format
 msgid "missing unicode digit for \\%c"
 msgstr "u \\%c chybí unikódová číslovka"
@@ -837,12 +837,12 @@ msgstr ""
 "    \n"
 "    Zásobník adresářů si můžete prohlédnout příkazem „dirs“."
 
-#: builtins/read.def:280
+#: builtins/read.def:308
 #, c-format
 msgid "%s: invalid timeout specification"
 msgstr "%s: chybné určení časového limitu"
 
-#: builtins/read.def:755
+#: builtins/read.def:827
 #, c-format
 msgid "read error: %d: %s"
 msgstr "chyba čtení: %d: %s"
@@ -855,7 +855,7 @@ msgstr "„return“ lze provést jen z funkce nebo skriptu načteného přes 
 msgid "cannot simultaneously unset a function and a variable"
 msgstr "funkci i proměnnou nelze rušit současně"
 
-#: builtins/set.def:966
+#: builtins/set.def:969
 #, c-format
 msgid "%s: not an array variable"
 msgstr "%s: není (proměnnou typu) pole"
@@ -874,11 +874,11 @@ msgstr "%s: nelze exportovat"
 msgid "shift count"
 msgstr "počet shiftů"
 
-#: builtins/shopt.def:310
+#: builtins/shopt.def:323
 msgid "cannot set and unset shell options simultaneously"
 msgstr "přepínač shellu nelze zároveň nastavit a zrušit"
 
-#: builtins/shopt.def:428
+#: builtins/shopt.def:444
 #, c-format
 msgid "%s: invalid shell option name"
 msgstr "%s: chybný název přepínače shellu"
@@ -945,16 +945,16 @@ msgstr "%s: chybný argument s limitou"
 msgid "`%c': bad command"
 msgstr "„%c“: chybný příkaz"
 
-#: builtins/ulimit.def:455
+#: builtins/ulimit.def:464
 #, c-format
 msgid "%s: cannot get limit: %s"
 msgstr "%s: limit nelze zjistit: %s"
 
-#: builtins/ulimit.def:481
+#: builtins/ulimit.def:490
 msgid "limit"
 msgstr "limit"
 
-#: builtins/ulimit.def:493 builtins/ulimit.def:793
+#: builtins/ulimit.def:502 builtins/ulimit.def:802
 #, c-format
 msgid "%s: cannot modify limit: %s"
 msgstr "%s: limit nelze změnit: %s"
@@ -973,7 +973,7 @@ msgstr "„%c“: chybný operátor symbolických práv"
 msgid "`%c': invalid symbolic mode character"
 msgstr "„%c“: chybný znak symbolický práv "
 
-#: error.c:89 error.c:347 error.c:349 error.c:351
+#: error.c:89 error.c:373 error.c:375 error.c:377
 msgid " line "
 msgstr " řádek "
 
@@ -993,96 +993,106 @@ msgstr "Ukončuji…"
 msgid "INFORM: "
 msgstr "INFORMACE: "
 
-#: error.c:462
+#: error.c:310
+#, c-format
+msgid "DEBUG warning: "
+msgstr "LADICÍ upozornění: "
+
+#: error.c:488
 msgid "unknown command error"
 msgstr "chyba neznámého příkazu"
 
-#: error.c:463
+#: error.c:489
 msgid "bad command type"
 msgstr "chybný druh příkazu"
 
-#: error.c:464
+#: error.c:490
 msgid "bad connector"
 msgstr "chybný konektor"
 
-#: error.c:465
+#: error.c:491
 msgid "bad jump"
 msgstr "chybný skok"
 
-#: error.c:503
+#: error.c:529
 #, c-format
 msgid "%s: unbound variable"
 msgstr "%s: nevázaná proměnná"
 
-#: eval.c:242
+#: eval.c:243
 msgid "\atimed out waiting for input: auto-logout\n"
 msgstr "\ačasový limit pro čekání na vstup vypršel: automatické odhlášení\n"
 
-#: execute_cmd.c:537
+#: execute_cmd.c:555
 #, c-format
 msgid "cannot redirect standard input from /dev/null: %s"
 msgstr "standardní vstup nelze přesměrovat z /dev/null: %s"
 
-#: execute_cmd.c:1297
+#: execute_cmd.c:1317
 #, c-format
 msgid "TIMEFORMAT: `%c': invalid format character"
 msgstr "TIMEFORMAT: „%c“: chybný formátovací znak"
 
-#: execute_cmd.c:2362
+#: execute_cmd.c:2391
 #, c-format
 msgid "execute_coproc: coproc [%d:%s] still exists"
 msgstr "execute_coproc: koproces [%d:%s] stále existuje"
 
-#: execute_cmd.c:2486
+#: execute_cmd.c:2524
 msgid "pipe error"
 msgstr "chyba v rouře"
 
-#: execute_cmd.c:4793
+#: execute_cmd.c:4923
 #, c-format
 msgid "eval: maximum eval nesting level exceeded (%d)"
 msgstr "eval: maximální úroveň zanoření funkce eval byla překročena (%d)"
 
-#: execute_cmd.c:4805
+#: execute_cmd.c:4935
 #, c-format
 msgid "%s: maximum source nesting level exceeded (%d)"
 msgstr "%s: maximální úroveň zanoření funkce source byla překročena (%d)"
 
-#: execute_cmd.c:4913
+#: execute_cmd.c:5043
 #, c-format
 msgid "%s: maximum function nesting level exceeded (%d)"
 msgstr "%s: maximální úroveň zanoření funkcí byla překročena (%d)"
 
-#: execute_cmd.c:5467
+#: execute_cmd.c:5598
 #, c-format
 msgid "%s: restricted: cannot specify `/' in command names"
 msgstr "%s: omezeno: v názvu příkazu nesmí být „/“"
 
-#: execute_cmd.c:5574
+#: execute_cmd.c:5715
 #, c-format
 msgid "%s: command not found"
 msgstr "%s: příkaz nenalezen"
 
-#: execute_cmd.c:5816
+#: execute_cmd.c:5957
 #, c-format
 msgid "%s: %s"
 msgstr "%s: %s"
 
-#: execute_cmd.c:5854
+#: execute_cmd.c:5975
+#, c-format
+msgid "%s: cannot execute: required file not found"
+msgstr "%s: nelze spustit: požadovaný soubor neexistuje"
+
+#: execute_cmd.c:6000
 #, c-format
 msgid "%s: %s: bad interpreter"
 msgstr "%s: %s: chybný interpretr"
 
-#: execute_cmd.c:5891
+#: execute_cmd.c:6037
 #, c-format
 msgid "%s: cannot execute binary file: %s"
 msgstr "%s: binární soubor nelze spustit: %s"
 
-#: execute_cmd.c:5977
+#: execute_cmd.c:6123
 #, c-format
 msgid "`%s': is a special builtin"
 msgstr "„%s“: je zvláštní vestavěný příkaz shellu"
 
-#: execute_cmd.c:6029
+#: execute_cmd.c:6175
 #, c-format
 msgid "cannot duplicate fd %d to fd %d"
 msgstr "deskriptor souboru %d nelze duplikovat na deskriptor %d"
@@ -1095,68 +1105,68 @@ msgstr "úroveň rekurze výrazu byla překročena"
 msgid "recursion stack underflow"
 msgstr "zásobník rekurze podtekl"
 
-#: expr.c:477
+#: expr.c:478
 msgid "syntax error in expression"
 msgstr "syntaktická chyba ve výrazu"
 
-#: expr.c:521
+#: expr.c:522
 msgid "attempted assignment to non-variable"
 msgstr "pokus o přiřazení do ne-proměnné"
 
-#: expr.c:530
+#: expr.c:531
 msgid "syntax error in variable assignment"
 msgstr "syntaktická chyba v přiřazení do proměnné"
 
-#: expr.c:544 expr.c:911
+#: expr.c:545 expr.c:912
 msgid "division by 0"
 msgstr "dělení nulou"
 
-#: expr.c:592
+#: expr.c:593
 msgid "bug: bad expassign token"
 msgstr "chyba: chybný expassing token"
 
-#: expr.c:646
+#: expr.c:647
 msgid "`:' expected for conditional expression"
 msgstr "v podmíněném výrazu očekávána „:“"
 
-#: expr.c:972
+#: expr.c:973
 msgid "exponent less than 0"
 msgstr "mocnitel menší než 0"
 
-#: expr.c:1029
+#: expr.c:1030
 msgid "identifier expected after pre-increment or pre-decrement"
 msgstr "po přednostním zvýšení nebo snížení očekáván identifikátor"
 
-#: expr.c:1056
+#: expr.c:1057
 msgid "missing `)'"
 msgstr "postrádám „)“"
 
-#: expr.c:1107 expr.c:1487
+#: expr.c:1108 expr.c:1492
 msgid "syntax error: operand expected"
 msgstr "syntaktická chyba: očekáván operand"
 
-#: expr.c:1489
+#: expr.c:1494
 msgid "syntax error: invalid arithmetic operator"
 msgstr "syntaktická chyba: chybný aritmetický operátor"
 
-#: expr.c:1513
+#: expr.c:1518
 #, c-format
 msgid "%s%s%s: %s (error token is \"%s\")"
 msgstr "%s%s%s: %s (chybný token je „%s“)"
 
-#: expr.c:1573
+#: expr.c:1578
 msgid "invalid arithmetic base"
 msgstr "chybný aritmetický základ"
 
-#: expr.c:1582
+#: expr.c:1587
 msgid "invalid integer constant"
 msgstr "chybná celočíselná konstanta"
 
-#: expr.c:1598
+#: expr.c:1603
 msgid "value too great for base"
 msgstr "hodnot je pro základ příliš velká"
 
-#: expr.c:1647
+#: expr.c:1652
 #, c-format
 msgid "%s: expression error\n"
 msgstr "%s: chyba výrazu\n"
@@ -1165,7 +1175,7 @@ msgstr "%s: chyba výrazu\n"
 msgid "getcwd: cannot access parent directories"
 msgstr "getcwd: rodičovské adresáře nejsou přístupné"
 
-#: input.c:99 subst.c:6069
+#: input.c:99 subst.c:6208
 #, c-format
 msgid "cannot reset nodelay mode for fd %d"
 msgstr "na deskriptoru %d nelze resetovat režim nodelay"
@@ -1184,169 +1194,169 @@ msgstr "save_bash_input: buffer již pro nový deskriptor %d existuje"
 msgid "start_pipeline: pgrp pipe"
 msgstr "start_pipeline: pgrp roury"
 
-#: jobs.c:906
+#: jobs.c:907
 #, c-format
 msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr "bgp_delete: SMYČKA: psi (%d) == storage[psi].bucket_next"
 
-#: jobs.c:959
+#: jobs.c:960
 #, c-format
 msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr "bgp_search: SMYČKA: psi (%d) == storage[psi].bucket_next"
 
-#: jobs.c:1283
+#: jobs.c:1279
 #, c-format
 msgid "forked pid %d appears in running job %d"
 msgstr "forknutý PID %d se objevil v běžící úloze %d"
 
-#: jobs.c:1402
+#: jobs.c:1397
 #, c-format
 msgid "deleting stopped job %d with process group %ld"
 msgstr "mažu pozastavenou úlohu %d se skupinou procesů %ld"
 
-#: jobs.c:1511
+#: jobs.c:1502
 #, c-format
 msgid "add_process: pid %5ld (%s) marked as still alive"
 msgstr "add_process: PID %5ld (%s) označen za stále živého"
 
-#: jobs.c:1850
+#: jobs.c:1839
 #, c-format
 msgid "describe_pid: %ld: no such pid"
 msgstr "describe_pid: %ld: žádný takový PID"
 
-#: jobs.c:1865
+#: jobs.c:1854
 #, c-format
 msgid "Signal %d"
 msgstr "Signál %d"
 
 # XXX: (úloha) dokončna. Používat ženský rod i unásledujících. Jedná se
 # o výpis úloh.
-#: jobs.c:1879 jobs.c:1905
+#: jobs.c:1868 jobs.c:1894
 msgid "Done"
 msgstr "Dokončena"
 
-#: jobs.c:1884 siglist.c:122
+#: jobs.c:1873 siglist.c:123
 msgid "Stopped"
 msgstr "Pozastavena"
 
-#: jobs.c:1888
+#: jobs.c:1877
 #, c-format
 msgid "Stopped(%s)"
 msgstr "Pozastavena (%s)"
 
-#: jobs.c:1892
+#: jobs.c:1881
 msgid "Running"
 msgstr "Běží"
 
-#: jobs.c:1909
+#: jobs.c:1898
 #, c-format
 msgid "Done(%d)"
 msgstr "Dokončena (%d)"
 
-#: jobs.c:1911
+#: jobs.c:1900
 #, c-format
 msgid "Exit %d"
 msgstr "Ukončena %d"
 
-#: jobs.c:1914
+#: jobs.c:1903
 msgid "Unknown status"
 msgstr "Stav neznámý"
 
-#: jobs.c:2001
+#: jobs.c:1990
 #, c-format
 msgid "(core dumped) "
 msgstr "(core dumped [obraz paměti uložen]) "
 
-#: jobs.c:2020
+#: jobs.c:2009
 #, c-format
 msgid "  (wd: %s)"
 msgstr "  (cwd: %s)"
 
-#: jobs.c:2259
+#: jobs.c:2250
 #, c-format
 msgid "child setpgid (%ld to %ld)"
 msgstr "setpgid na potomku (z %ld na %ld)"
 
-#: jobs.c:2617 nojobs.c:664
+#: jobs.c:2608 nojobs.c:666
 #, c-format
 msgid "wait: pid %ld is not a child of this shell"
 msgstr "wait: PID %ld není potomkem tohoto shellu"
 
-#: jobs.c:2893
+#: jobs.c:2884
 #, c-format
 msgid "wait_for: No record of process %ld"
 msgstr "wait_for: Žádný záznam o procesu %ld"
 
-#: jobs.c:3236
+#: jobs.c:3223
 #, c-format
 msgid "wait_for_job: job %d is stopped"
 msgstr "wait_for_job: úloha %d je pozastavena"
 
-#: jobs.c:3564
+#: jobs.c:3551
 #, c-format
 msgid "%s: no current jobs"
 msgstr "%s: žádné současné úlohy"
 
-#: jobs.c:3571
+#: jobs.c:3558
 #, c-format
 msgid "%s: job has terminated"
 msgstr "%s: úloha skončila"
 
-#: jobs.c:3580
+#: jobs.c:3567
 #, c-format
 msgid "%s: job %d already in background"
 msgstr "%s: úloha %d je již na pozadí"
 
-#: jobs.c:3806
+#: jobs.c:3793
 msgid "waitchld: turning on WNOHANG to avoid indefinite block"
 msgstr "waitchld: zapíná se WNOHANG, aby se zabránilo neurčitému zablokování"
 
-#: jobs.c:4320
+#: jobs.c:4307
 #, c-format
 msgid "%s: line %d: "
 msgstr "%s: řádek %d: "
 
-#: jobs.c:4334 nojobs.c:919
+#: jobs.c:4321 nojobs.c:921
 #, c-format
 msgid " (core dumped)"
 msgstr " (core dumped [obraz paměti uložen])"
 
-#: jobs.c:4346 jobs.c:4359
+#: jobs.c:4333 jobs.c:4346
 #, c-format
 msgid "(wd now: %s)\n"
 msgstr "(cwd nyní: %s)\n"
 
-#: jobs.c:4391
+#: jobs.c:4378
 msgid "initialize_job_control: getpgrp failed"
 msgstr "initialize_job_control: getpgrp selhalo"
 
-#: jobs.c:4447
+#: jobs.c:4434
 msgid "initialize_job_control: no job control in background"
 msgstr "initialize_job_control: správa úloh nefunguje na pozadí"
 
-#: jobs.c:4463
+#: jobs.c:4450
 msgid "initialize_job_control: line discipline"
 msgstr "initialize_job_control: disciplína linky"
 
-#: jobs.c:4473
+#: jobs.c:4460
 msgid "initialize_job_control: setpgid"
 msgstr "initialize_job_control: setpgid"
 
-#: jobs.c:4494 jobs.c:4503
+#: jobs.c:4481 jobs.c:4490
 #, c-format
 msgid "cannot set terminal process group (%d)"
 msgstr "nelze nastavit skupinu procesů terminálu (%d)"
 
-#: jobs.c:4508
+#: jobs.c:4495
 msgid "no job control in this shell"
 msgstr "žádná správa úloh v tomto shellu"
 
-#: lib/malloc/malloc.c:353
+#: lib/malloc/malloc.c:367
 #, c-format
 msgid "malloc: failed assertion: %s\n"
 msgstr "malloc: předpoklad nesplněn: %s\n"
 
-#: lib/malloc/malloc.c:369
+#: lib/malloc/malloc.c:383
 #, c-format
 msgid ""
 "\r\n"
@@ -1355,47 +1365,47 @@ msgstr ""
 "\r\n"
 "malloc: %s:%d: zbabraný předpoklad\r\n"
 
-#: lib/malloc/malloc.c:370 lib/malloc/malloc.c:933
+#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941
 msgid "unknown"
 msgstr "není známo"
 
-#: lib/malloc/malloc.c:882
+#: lib/malloc/malloc.c:892
 msgid "malloc: block on free list clobbered"
 msgstr "malloc: blok v seznamu uvolněných zbit"
 
-#: lib/malloc/malloc.c:972
+#: lib/malloc/malloc.c:980
 msgid "free: called with already freed block argument"
 msgstr "free: zavoláno s argumentem již uvolněného bloku"
 
-#: lib/malloc/malloc.c:975
+#: lib/malloc/malloc.c:983
 msgid "free: called with unallocated block argument"
 msgstr "free: zavoláno s argumentem nenaalokovaného bloku"
 
-#: lib/malloc/malloc.c:994
+#: lib/malloc/malloc.c:1001
 msgid "free: underflow detected; mh_nbytes out of range"
 msgstr "free: zjištěno podtečení, mh_nbytes mimo rozsah"
 
-#: lib/malloc/malloc.c:1001
+#: lib/malloc/malloc.c:1007
 msgid "free: underflow detected; magic8 corrupted"
 msgstr "free: zjištěno podtečení, magic8 poškozeno"
 
-#: lib/malloc/malloc.c:1009
+#: lib/malloc/malloc.c:1014
 msgid "free: start and end chunk sizes differ"
 msgstr "free: velikosti počátečního a koncového kusu se liší"
 
-#: lib/malloc/malloc.c:1119
+#: lib/malloc/malloc.c:1176
 msgid "realloc: called with unallocated block argument"
 msgstr "realloc: zavoláno s argumentem nenaalokovaného bloku"
 
-#: lib/malloc/malloc.c:1134
+#: lib/malloc/malloc.c:1191
 msgid "realloc: underflow detected; mh_nbytes out of range"
 msgstr "realloc: zjištěno podtečení, mh_nbytes mimo rozsah"
 
-#: lib/malloc/malloc.c:1141
+#: lib/malloc/malloc.c:1197
 msgid "realloc: underflow detected; magic8 corrupted"
 msgstr "realloc: zjištěno podtečení, magic8 poškozeno"
 
-#: lib/malloc/malloc.c:1150
+#: lib/malloc/malloc.c:1205
 msgid "realloc: start and end chunk sizes differ"
 msgstr "realloc: velikosti počátečního a koncového kusu se liší"
 
@@ -1437,22 +1447,22 @@ msgstr "%s: chybné určení síťové cesty"
 msgid "network operations not supported"
 msgstr "síťové operace nejsou podporovány"
 
-#: locale.c:217
+#: locale.c:219
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s)"
 msgstr "setlocale: LC_ALL: národní prostředí nelze změnit (%s)"
 
-#: locale.c:219
+#: locale.c:221
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s): %s"
 msgstr "setlocale: LC_ALL: národní prostředí nelze změnit (%s): %s"
 
-#: locale.c:292
+#: locale.c:294
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s)"
 msgstr "setlocale: %s: národní prostředí nelze změnit (%s)"
 
-#: locale.c:294
+#: locale.c:296
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s): %s"
 msgstr "setlocale: %s: národní prostředí nelze změnit (%s): %s"
@@ -1470,139 +1480,139 @@ msgstr "V $_ máte novou poštu"
 msgid "The mail in %s has been read\n"
 msgstr "Pošta v %s je přečtená\n"
 
-#: make_cmd.c:317
+#: make_cmd.c:314
 msgid "syntax error: arithmetic expression required"
 msgstr "chyba syntaxe: vyžadován aritmetický výraz"
 
-#: make_cmd.c:319
+#: make_cmd.c:316
 msgid "syntax error: `;' unexpected"
 msgstr "chyba syntaxe: neočekávaný „;“"
 
-#: make_cmd.c:320
+#: make_cmd.c:317
 #, c-format
 msgid "syntax error: `((%s))'"
 msgstr "chyba syntaxe: „((%s))“"
 
-#: make_cmd.c:572
+#: make_cmd.c:569
 #, c-format
 msgid "make_here_document: bad instruction type %d"
 msgstr "make_here_document: chybný druh instrukce %d"
 
-#: make_cmd.c:657
+#: make_cmd.c:668
 #, c-format
 msgid "here-document at line %d delimited by end-of-file (wanted `%s')"
 msgstr "„here“ dokument na řádku %d ukončen koncem souboru (požadováno „%s“)"
 
-#: make_cmd.c:756
+#: make_cmd.c:769
 #, c-format
 msgid "make_redirection: redirection instruction `%d' out of range"
 msgstr "make_redirection: instrukce přesměrování „%d“ mimo rozsah"
 
-#: parse.y:2393
+#: parse.y:2428
 #, c-format
 msgid "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line truncated"
 msgstr "shell_getc: shell_input_line_size (%zu) přesahuje SIZE_MAX (%lu): řádek zkrácen"
 
-#: parse.y:2826
+#: parse.y:2921
 msgid "maximum here-document count exceeded"
 msgstr "maximální počet here dokumentů překročen"
 
-#: parse.y:3581 parse.y:3957 parse.y:4556
+#: parse.y:3684 parse.y:4244 parse.y:6148
 #, c-format
 msgid "unexpected EOF while looking for matching `%c'"
 msgstr "neočekávaný konec souboru při hledání znaku odpovídajícímu „%c“"
 
-#: parse.y:4696
+#: parse.y:4452
 msgid "unexpected EOF while looking for `]]'"
 msgstr "neočekávaný konec souboru při hledání „]]“"
 
 # XXX: Condional means condition (adj.) probably. Can English distinguish
 # between the condition (podmínkový) and the code branch (podmíněný)? Check
 # for all "conditional" string occurences.
-#: parse.y:4701
+#: parse.y:4457
 #, c-format
 msgid "syntax error in conditional expression: unexpected token `%s'"
 msgstr "chyba syntaxe ve výrazu podmínky: neočekávaný token „%s“"
 
-#: parse.y:4705
+#: parse.y:4461
 msgid "syntax error in conditional expression"
 msgstr "chyba syntaxe ve výrazu podmínky"
 
-#: parse.y:4783
+#: parse.y:4539
 #, c-format
 msgid "unexpected token `%s', expected `)'"
 msgstr "neočekávaný token „%s“, očekávána „)“"
 
-#: parse.y:4787
+#: parse.y:4543
 msgid "expected `)'"
 msgstr "očekávána „)“"
 
-#: parse.y:4815
+#: parse.y:4571
 #, c-format
 msgid "unexpected argument `%s' to conditional unary operator"
 msgstr "neočekávaný argument „%s“ u podmínkového unárního operátoru"
 
-#: parse.y:4819
+#: parse.y:4575
 msgid "unexpected argument to conditional unary operator"
 msgstr "neočekávaný argument u podmínkového unárního operátoru"
 
-#: parse.y:4865
+#: parse.y:4621
 #, c-format
 msgid "unexpected token `%s', conditional binary operator expected"
 msgstr "neočekávaný token „%s“, očekáván podmínkový binární operátor"
 
-#: parse.y:4869
+#: parse.y:4625
 msgid "conditional binary operator expected"
 msgstr "očekáván podmínkový binární operátor"
 
-#: parse.y:4891
+#: parse.y:4647
 #, c-format
 msgid "unexpected argument `%s' to conditional binary operator"
 msgstr "neočekávaný argument „%s„ u podmínkového binárního operátoru"
 
-#: parse.y:4895
+#: parse.y:4651
 msgid "unexpected argument to conditional binary operator"
 msgstr "neočekávaný argument u podmínkového binárního operátoru"
 
-#: parse.y:4906
+#: parse.y:4662
 #, c-format
 msgid "unexpected token `%c' in conditional command"
 msgstr "neočekávaný token „%c“ v podmínkovém příkazu"
 
-#: parse.y:4909
+#: parse.y:4665
 #, c-format
 msgid "unexpected token `%s' in conditional command"
 msgstr "neočekávaný token „%s“ v podmínkovém příkazu"
 
-#: parse.y:4913
+#: parse.y:4669
 #, c-format
 msgid "unexpected token %d in conditional command"
 msgstr "neočekávaný token %d v podmínkovém příkazu"
 
-#: parse.y:6336
+#: parse.y:6118
 #, c-format
 msgid "syntax error near unexpected token `%s'"
 msgstr "chyba syntaxe poblíž neočekávaného tokenu „%s“"
 
-#: parse.y:6355
+#: parse.y:6137
 #, c-format
 msgid "syntax error near `%s'"
 msgstr "chyba syntaxe poblíž „%s“"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error: unexpected end of file"
 msgstr "chyba syntaxe: nenadálý konec souboru"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error"
 msgstr "chyba syntaxe"
 
-#: parse.y:6428
+#: parse.y:6216
 #, c-format
 msgid "Use \"%s\" to leave the shell.\n"
 msgstr "Shell lze ukončit příkazem „%s“.\n"
 
-#: parse.y:6602
+#: parse.y:6394
 msgid "unexpected EOF while looking for matching `)'"
 msgstr "nenadálý konec souboru při hledání odpovídající „)“"
 
@@ -1641,94 +1651,94 @@ msgstr "xtrace_set: nullový ukazatel na soubor"
 msgid "xtrace fd (%d) != fileno xtrace fp (%d)"
 msgstr "xtrace: fd (%d) != fileno fp (%d)"
 
-#: print_cmd.c:1540
+#: print_cmd.c:1545
 #, c-format
 msgid "cprintf: `%c': invalid format character"
 msgstr "cprintf: „%c“: chybný formátovací znak"
 
-#: redir.c:149 redir.c:197
+#: redir.c:150 redir.c:198
 msgid "file descriptor out of range"
 msgstr "deskriptor souboru mimo rozsah"
 
-#: redir.c:204
+#: redir.c:205
 #, c-format
 msgid "%s: ambiguous redirect"
 msgstr "%s: nejednoznačné přesměrování"
 
-#: redir.c:208
+#: redir.c:209
 #, c-format
 msgid "%s: cannot overwrite existing file"
 msgstr "%s: existující soubor nelze přepsat"
 
-#: redir.c:213
+#: redir.c:214
 #, c-format
 msgid "%s: restricted: cannot redirect output"
 msgstr "%s: omezeno: výstup nelze přesměrovat"
 
-#: redir.c:218
+#: redir.c:219
 #, c-format
 msgid "cannot create temp file for here-document: %s"
 msgstr "pro „here“ dokument nelze vytvořit dočasný soubor: %s"
 
-#: redir.c:222
+#: redir.c:223
 #, c-format
 msgid "%s: cannot assign fd to variable"
 msgstr "%s: deskriptor souboru nelze přiřadit do proměnné"
 
-#: redir.c:649
+#: redir.c:650
 msgid "/dev/(tcp|udp)/host/port not supported without networking"
 msgstr "/dev/(tcp|udp)/host/port není bez síťování podporováno"
 
-#: redir.c:938 redir.c:1053 redir.c:1114 redir.c:1284
+#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303
 msgid "redirection error: cannot duplicate fd"
 msgstr "chyba přesměrování: deskriptor souboru nelze duplikovat"
 
-#: shell.c:347
+#: shell.c:353
 msgid "could not find /tmp, please create!"
 msgstr "nelze nalézt /tmp, vytvořte jej, prosím!"
 
-#: shell.c:351
+#: shell.c:357
 msgid "/tmp must be a valid directory name"
 msgstr "/tmp musí být platným názvem pro adresář"
 
-#: shell.c:804
+#: shell.c:826
 msgid "pretty-printing mode ignored in interactive shells"
 msgstr "v interaktivních shellech se režim krásného výpisu nepoužije"
 
-#: shell.c:948
+#: shell.c:972
 #, c-format
 msgid "%c%c: invalid option"
 msgstr "%c%c: chybný přepínač"
 
-#: shell.c:1319
+#: shell.c:1343
 #, c-format
 msgid "cannot set uid to %d: effective uid %d"
 msgstr "UID nelze nastavit na %d: efektivní UID je %d"
 
-#: shell.c:1330
+#: shell.c:1354
 #, c-format
 msgid "cannot set gid to %d: effective gid %d"
 msgstr "GID nelze nastavit na %d: efektivní GID je %d"
 
-#: shell.c:1518
+#: shell.c:1544
 msgid "cannot start debugger; debugging mode disabled"
 msgstr "debuger nelze spustit, ladicí režim zakázán"
 
-#: shell.c:1632
+#: shell.c:1658
 #, c-format
 msgid "%s: Is a directory"
 msgstr "%s: Je adresářem"
 
-#: shell.c:1881
+#: shell.c:1907
 msgid "I have no name!"
 msgstr "Nemám žádné jméno!"
 
-#: shell.c:2035
+#: shell.c:2061
 #, c-format
 msgid "GNU bash, version %s-(%s)\n"
 msgstr "GNU bash, verze %s-(%s)\n"
 
-#: shell.c:2036
+#: shell.c:2062
 #, c-format
 msgid ""
 "Usage:\t%s [GNU long option] [option] ...\n"
@@ -1737,323 +1747,323 @@ msgstr ""
 "Použití:\t%s [Dlouhý GNU přepínač] [přepínač]…\n"
 "\t%s [Dlouhý GNU přepínač] [přepínač] skriptový_soubor…\n"
 
-#: shell.c:2038
+#: shell.c:2064
 msgid "GNU long options:\n"
 msgstr "Dlouhé GNU přepínače:\n"
 
-#: shell.c:2042
+#: shell.c:2068
 msgid "Shell options:\n"
 msgstr "Přepínače shellu:\n"
 
-#: shell.c:2043
+#: shell.c:2069
 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n"
 msgstr "\t-ilrsD nebo -c příkaz nebo -O shopt_přepínač\t(pouze při vyvolání)\n"
 
-#: shell.c:2062
+#: shell.c:2088
 #, c-format
 msgid "\t-%s or -o option\n"
 msgstr "\t-%s nebo -o přepínač\n"
 
-#: shell.c:2068
+#: shell.c:2094
 #, c-format
 msgid "Type `%s -c \"help set\"' for more information about shell options.\n"
 msgstr "Podrobnosti o přepínačích shellu získáte tím, že napíšete „%s -c \"help set\"“.\n"
 
-#: shell.c:2069
+#: shell.c:2095
 #, c-format
 msgid "Type `%s -c help' for more information about shell builtin commands.\n"
 msgstr ""
 "Podrobnosti o příkazech vestavěných do shellu získáte tím, že\n"
 "napište „%s -c help“.\n"
 
-#: shell.c:2070
+#: shell.c:2096
 #, c-format
 msgid "Use the `bashbug' command to report bugs.\n"
 msgstr "Chyby nahlásíte příkazem „bashbug“.\n"
 
-#: shell.c:2072
+#: shell.c:2098
 #, c-format
 msgid "bash home page: <http://www.gnu.org/software/bash>\n"
 msgstr "Domovská stránka bashe: <http://www.gnu.org/software/bash>\n"
 
-#: shell.c:2073
+#: shell.c:2099
 #, c-format
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 msgstr "Obecný návod na použití softwaru GNU: <http://www.gnu.org/gethelp/>\n"
 
-#: sig.c:757
+#: sig.c:765
 #, c-format
 msgid "sigprocmask: %d: invalid operation"
 msgstr "sigprocmask: %d: neplatná operace"
 
-#: siglist.c:47
+#: siglist.c:48
 msgid "Bogus signal"
 msgstr "Falešný signál"
 
 # Překlady názvů signálů převzaty (s mírnými úpravami) z české překladu
 # manuálové stránky signal(7). 
-#: siglist.c:50
+#: siglist.c:51
 msgid "Hangup"
 msgstr "Linka terminálu zavěšena"
 
-#: siglist.c:54
+#: siglist.c:55
 msgid "Interrupt"
 msgstr "Přerušení"
 
-#: siglist.c:58
+#: siglist.c:59
 msgid "Quit"
 msgstr "Ukončení"
 
-#: siglist.c:62
+#: siglist.c:63
 msgid "Illegal instruction"
 msgstr "Neplatná instrukce"
 
-#: siglist.c:66
+#: siglist.c:67
 msgid "BPT trace/trap"
 msgstr "Přerušení při ladění"
 
-#: siglist.c:74
+#: siglist.c:75
 msgid "ABORT instruction"
 msgstr "Ukončení funkcí abort()"
 
-#: siglist.c:78
+#: siglist.c:79
 msgid "EMT instruction"
 msgstr "Instrukce EMT"
 
-#: siglist.c:82
+#: siglist.c:83
 msgid "Floating point exception"
 msgstr "Výjimka při práci s pohyblivou řádovou čárkou"
 
-#: siglist.c:86
+#: siglist.c:87
 msgid "Killed"
 msgstr "Zabit"
 
-#: siglist.c:90
+#: siglist.c:91
 msgid "Bus error"
 msgstr "Chyba sběrnice"
 
-#: siglist.c:94
+#: siglist.c:95
 msgid "Segmentation fault"
 msgstr "Chyba segmentace"
 
-#: siglist.c:98
+#: siglist.c:99
 msgid "Bad system call"
 msgstr "Špatné volání systému"
 
-#: siglist.c:102
+#: siglist.c:103
 msgid "Broken pipe"
 msgstr "Z roury nikdo nečte"
 
-#: siglist.c:106
+#: siglist.c:107
 msgid "Alarm clock"
 msgstr "Signál časovače"
 
-#: siglist.c:110
+#: siglist.c:111
 msgid "Terminated"
 msgstr "Ukončit"
 
-#: siglist.c:114
+#: siglist.c:115
 msgid "Urgent IO condition"
 msgstr "Čekají urgentní I/O data"
 
-#: siglist.c:118
+#: siglist.c:119
 msgid "Stopped (signal)"
 msgstr "Pozastaveno (signálem)"
 
-#: siglist.c:126
+#: siglist.c:127
 msgid "Continue"
 msgstr "Pokračovat"
 
-#: siglist.c:134
+#: siglist.c:135
 msgid "Child death or stop"
 msgstr "Potomek byl pozastaven nebo zemřel"
 
-#: siglist.c:138
+#: siglist.c:139
 msgid "Stopped (tty input)"
 msgstr "Pozastaveno (vstupem TTY)"
 
-#: siglist.c:142
+#: siglist.c:143
 msgid "Stopped (tty output)"
 msgstr "Pozastaveno (výstupem na TTY)"
 
-#: siglist.c:146
+#: siglist.c:147
 msgid "I/O ready"
 msgstr "I/O je připraveno"
 
-#: siglist.c:150
+#: siglist.c:151
 msgid "CPU limit"
 msgstr "Dosažen limit procesorového času"
 
-#: siglist.c:154
+#: siglist.c:155
 msgid "File limit"
 msgstr "Dosažen limit velikosti souboru"
 
-#: siglist.c:158
+#: siglist.c:159
 msgid "Alarm (virtual)"
 msgstr "Časovač (virtuální)"
 
-#: siglist.c:162
+#: siglist.c:163
 msgid "Alarm (profile)"
 msgstr "Časovač (profilovací)"
 
-#: siglist.c:166
+#: siglist.c:167
 msgid "Window changed"
 msgstr "Změna okna"
 
 # XXX: SIGLOST
-#: siglist.c:170
+#: siglist.c:171
 msgid "Record lock"
 msgstr "Zámek záznamu"
 
-#: siglist.c:174
+#: siglist.c:175
 msgid "User signal 1"
 msgstr "Uživatelský signal 1"
 
-#: siglist.c:178
+#: siglist.c:179
 msgid "User signal 2"
 msgstr "Uživatelský signál 2"
 
 # FIXME: HFT znamená High Frequency Timer? Zkontrolovat i další výskyty
-#: siglist.c:182
+#: siglist.c:183
 msgid "HFT input data pending"
 msgstr "vstupní data HFT čekají"
 
-#: siglist.c:186
+#: siglist.c:187
 msgid "power failure imminent"
 msgstr "hrozí selhání napájení"
 
-#: siglist.c:190
+#: siglist.c:191
 msgid "system crash imminent"
 msgstr "hrozí selhání systému"
 
-#: siglist.c:194
+#: siglist.c:195
 msgid "migrate process to another CPU"
 msgstr "přesunout proces na jiný procesor"
 
-#: siglist.c:198
+#: siglist.c:199
 msgid "programming error"
 msgstr "chyba programování"
 
-#: siglist.c:202
+#: siglist.c:203
 msgid "HFT monitor mode granted"
 msgstr "Režim HFT sledování přidělen"
 
-#: siglist.c:206
+#: siglist.c:207
 msgid "HFT monitor mode retracted"
 msgstr "Režim HFT sledování odebrán"
 
-#: siglist.c:210
+#: siglist.c:211
 msgid "HFT sound sequence has completed"
 msgstr "HFT zvuková posloupnost byla dokončena"
 
-#: siglist.c:214
+#: siglist.c:215
 msgid "Information request"
 msgstr "Požadavek o informaci"
 
-#: siglist.c:222 siglist.c:224
+#: siglist.c:223 siglist.c:225
 #, c-format
 msgid "Unknown Signal #%d"
 msgstr "Neznámý signál č. %d"
 
-#: subst.c:1476 subst.c:1666
+#: subst.c:1480 subst.c:1670
 #, c-format
 msgid "bad substitution: no closing `%s' in %s"
 msgstr "chybná substituce: v %2$s chybí uzavírací „%1$s“"
 
-#: subst.c:3281
+#: subst.c:3307
 #, c-format
 msgid "%s: cannot assign list to array member"
 msgstr "%s: seznam nelze přiřadit do prvku pole"
 
-#: subst.c:5910 subst.c:5926
+#: subst.c:6048 subst.c:6064
 msgid "cannot make pipe for process substitution"
 msgstr "nelze vyrobit rouru za účelem substituce procesu"
 
-#: subst.c:5985
+#: subst.c:6124
 msgid "cannot make child for process substitution"
 msgstr "nelze vytvořit potomka za účelem substituce procesu"
 
-#: subst.c:6059
+#: subst.c:6198
 #, c-format
 msgid "cannot open named pipe %s for reading"
 msgstr "pojmenovanou rouru %s nelze otevřít pro čtení"
 
-#: subst.c:6061
+#: subst.c:6200
 #, c-format
 msgid "cannot open named pipe %s for writing"
 msgstr "pojmenovanou rouru %s nelze otevřít pro zápis"
 
-#: subst.c:6084
+#: subst.c:6223
 #, c-format
 msgid "cannot duplicate named pipe %s as fd %d"
 msgstr "pojmenovanou rouru %s nelze zdvojit jako deskriptor %d"
 
-#: subst.c:6213
+#: subst.c:6370
 msgid "command substitution: ignored null byte in input"
 msgstr "substituce příkazu: nulový bajt ve vstupu ignorován"
 
-#: subst.c:6353
+#: subst.c:6533
 msgid "cannot make pipe for command substitution"
 msgstr "nelze vytvořit rouru pro substituci příkazu"
 
-#: subst.c:6397
+#: subst.c:6580
 msgid "cannot make child for command substitution"
 msgstr "nelze vytvořit potomka pro substituci příkazu"
 
-#: subst.c:6423
+#: subst.c:6613
 msgid "command_substitute: cannot duplicate pipe as fd 1"
 msgstr "command_substitute: rouru nelze zdvojit jako deskriptor 1"
 
-#: subst.c:6883 subst.c:9952
+#: subst.c:7082 subst.c:10252
 #, c-format
 msgid "%s: invalid variable name for name reference"
 msgstr "%s: neplatný název proměnné pro odkaz na název"
 
-#: subst.c:6979 subst.c:6997 subst.c:7169
+#: subst.c:7178 subst.c:7196 subst.c:7369
 #, c-format
 msgid "%s: invalid indirect expansion"
 msgstr "%s: chybná nepřímá expanze"
 
-#: subst.c:7013 subst.c:7177
+#: subst.c:7212 subst.c:7377
 #, c-format
 msgid "%s: invalid variable name"
 msgstr "%s: chybný název proměnné"
 
-#: subst.c:7256
+#: subst.c:7478
 #, c-format
 msgid "%s: parameter not set"
 msgstr "%s: parametr nenastaven"
 
-#: subst.c:7258
+#: subst.c:7480
 #, c-format
 msgid "%s: parameter null or not set"
 msgstr "%s: parametr null nebo nenastaven"
 
-#: subst.c:7503 subst.c:7518
+#: subst.c:7727 subst.c:7742
 #, c-format
 msgid "%s: substring expression < 0"
 msgstr "%s: výraz podřetězce < 0"
 
-#: subst.c:9281 subst.c:9302
+#: subst.c:9560 subst.c:9587
 #, c-format
 msgid "%s: bad substitution"
 msgstr "%s: chybná substituce"
 
-#: subst.c:9390
+#: subst.c:9678
 #, c-format
 msgid "$%s: cannot assign in this way"
 msgstr "$%s: takto nelze přiřazovat"
 
-#: subst.c:9814
+#: subst.c:10111
 msgid "future versions of the shell will force evaluation as an arithmetic substitution"
 msgstr "budoucá verze tohoto shellu budou vynucovat vyhodnocení jako aritmetickou substituci"
 
-#: subst.c:10367
+#: subst.c:10795
 #, c-format
 msgid "bad substitution: no closing \"`\" in %s"
 msgstr "chybná substituce: v %s chybí uzavírací „`“"
 
-#: subst.c:11434
+#: subst.c:11874
 #, c-format
 msgid "no match: %s"
 msgstr "žádná shoda: %s"
@@ -2076,21 +2086,21 @@ msgstr "očekávána „)“"
 msgid "`)' expected, found %s"
 msgstr "očekávána „)“, nalezeno %s"
 
-#: test.c:466 test.c:799
+#: test.c:469 test.c:814
 #, c-format
 msgid "%s: binary operator expected"
 msgstr "%s: očekáván binární operátor"
 
-#: test.c:756 test.c:759
+#: test.c:771 test.c:774
 #, c-format
 msgid "%s: unary operator expected"
 msgstr "%s: očekáván unární operátor"
 
-#: test.c:881
+#: test.c:896
 msgid "missing `]'"
 msgstr "postrádám „]“"
 
-#: test.c:899
+#: test.c:914
 #, c-format
 msgid "syntax error: `%s' unexpected"
 msgstr "chyba syntaxe: neočekávaný řetězec „%s“"
@@ -2099,99 +2109,104 @@ msgstr "chyba syntaxe: neočekávaný řetězec „%s“"
 msgid "invalid signal number"
 msgstr "neplatné číslo signálu"
 
-#: trap.c:325
+#: trap.c:323
 #, c-format
 msgid "trap handler: maximum trap handler level exceeded (%d)"
 msgstr "obsluha signálů: maximální úroveň zanoření obsluhy signálů byla překročena (%d)"
 
-#: trap.c:414
+#: trap.c:412
 #, c-format
 msgid "run_pending_traps: bad value in trap_list[%d]: %p"
 msgstr "run_pending_traps: chybná hodnota v trap_list[%d]: %p"
 
-#: trap.c:418
+#: trap.c:416
 #, c-format
 msgid "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
 msgstr "run_pending_traps: obsluha signálu je SIG_DFL, přeposílám %d (%s) sobě"
 
-#: trap.c:487
+#: trap.c:509
 #, c-format
 msgid "trap_handler: bad signal %d"
 msgstr "trap_handler: chybný signál %d"
 
-#: variables.c:421
+#: variables.c:424
 #, c-format
 msgid "error importing function definition for `%s'"
 msgstr "chyba při importu definice „%s“"
 
-#: variables.c:833
+#: variables.c:838
 #, c-format
 msgid "shell level (%d) too high, resetting to 1"
 msgstr "úroveň shellu (%d) příliš vysoká, resetuji na 1"
 
-#: variables.c:2674
+#: variables.c:2642
 msgid "make_local_variable: no function context at current scope"
 msgstr "make_local_variable: žádný kontext funkce v aktuálním rozsahu"
 
-#: variables.c:2693
+#: variables.c:2661
 #, c-format
 msgid "%s: variable may not be assigned value"
 msgstr "%s: hodnotu nelze do proměnné přiřadit"
 
-#: variables.c:3475
+#: variables.c:2818 variables.c:2874
+#, c-format
+msgid "%s: cannot inherit value from incompatible type"
+msgstr "%s: z nekompatibilního typu nelze hodnotu zdědit"
+
+#: variables.c:3459
 #, c-format
 msgid "%s: assigning integer to name reference"
 msgstr "%s: přiřazení čísla odkazu na název"
 
-#: variables.c:4404
+#: variables.c:4390
 msgid "all_local_variables: no function context at current scope"
 msgstr "all_local_variables: žádný kontext funkce v aktuálním rozsahu"
 
-#: variables.c:4771
+#: variables.c:4757
 #, c-format
 msgid "%s has null exportstr"
 msgstr "%s: má nullový exportstr"
 
-#: variables.c:4776 variables.c:4785
+#: variables.c:4762 variables.c:4771
 #, c-format
 msgid "invalid character %d in exportstr for %s"
 msgstr "neplatný znak %d v exportstr pro %s"
 
-#: variables.c:4791
+#: variables.c:4777
 #, c-format
 msgid "no `=' in exportstr for %s"
 msgstr "v exportstr pro %s chybí „=“"
 
-#: variables.c:5331
+#: variables.c:5317
 msgid "pop_var_context: head of shell_variables not a function context"
 msgstr "pop_var_context: hlava shell_variables není kontextem funkce"
 
-#: variables.c:5344
+#: variables.c:5330
 msgid "pop_var_context: no global_variables context"
 msgstr "pop_var_context: chybí kontext global_variables"
 
-#: variables.c:5424
+#: variables.c:5410
 msgid "pop_scope: head of shell_variables not a temporary environment scope"
 msgstr "pop_scope: hlava shell_variables není dočasným rozsahem prostředí"
 
-#: variables.c:6387
+#: variables.c:6400
 #, c-format
 msgid "%s: %s: cannot open as FILE"
 msgstr "%s: %s: nelze otevřít jako SOUBOR"
 
-#: variables.c:6392
+#: variables.c:6405
 #, c-format
 msgid "%s: %s: invalid value for trace file descriptor"
 msgstr "%s: %s: neplatná hodnota pro deskriptor trasovacího souboru"
 
-#: variables.c:6437
+#: variables.c:6450
 #, c-format
 msgid "%s: %s: compatibility value out of range"
 msgstr "%s: %s: hodnota kompatibility je mimo rozsah"
 
 #: version.c:46 version2.c:46
-msgid "Copyright (C) 2020 Free Software Foundation, Inc."
-msgstr "Copyright © 2020 Free Software Foundation, Inc."
+msgid "Copyright (C) 2022 Free Software Foundation, Inc."
+msgstr "Copyright © 2022 Free Software Foundation, Inc."
 
 #: version.c:47 version2.c:47
 msgid "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n"
@@ -2271,12 +2286,12 @@ msgid "command [-pVv] command [arg ...]"
 msgstr "command [-pVv] příkaz [argument…]"
 
 #: builtins.c:78
-msgid "declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]"
-msgstr "declare [-aAfFgiIlnrtux] [-p] [název[=hodnota]…]"
+msgid "declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] [name ...]"
+msgstr "declare [-aAfFgiIlnrtux] [název[=hodnota]…] nebo declare [-p] [-aAfFilnrtux] [název…]"
 
 #: builtins.c:80
-msgid "typeset [-aAfFgiIlnrtux] [-p] name[=value] ..."
-msgstr "typeset [-aAfFgiIlnrtux] [-p] název[=hodnota]…"
+msgid "typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] [name ...]"
+msgstr "typeset [-aAfFgiIlnrtux] název[=hodnota]… nebo typeset -p [-aAfFilnrtux] [název…]"
 
 #: builtins.c:82
 msgid "local [option] name[=value] ..."
@@ -2363,8 +2378,8 @@ msgid "return [n]"
 msgstr "return [n]"
 
 #: builtins.c:142
-msgid "set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]"
-msgstr "set [-abefhkmnptuvxBCHP] [-o název_přepínače] [--] [argument…]"
+msgid "set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]"
+msgstr "set [-abefhkmnptuvxBCEHPT] [-o název_přepínače] [--] [-] [argument…]"
 
 #: builtins.c:144
 msgid "unset [-f] [-v] [-n] [name ...]"
@@ -2411,8 +2426,8 @@ msgid "type [-afptP] name [name ...]"
 msgstr "type [-afptP] název [název…]"
 
 #: builtins.c:171
-msgid "ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]"
-msgstr "ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]"
+msgid "ulimit [-SHabcdefiklmnpqrstuvxPRT] [limit]"
+msgstr "ulimit [-SHabcdefiklmnpqrstuvxPRT] [limit]"
 
 #: builtins.c:174
 msgid "umask [-p] [-S] [mode]"
@@ -2451,12 +2466,12 @@ msgid "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else C
 msgstr "if PŘÍKAZY; then PŘÍKAZY; [ elif PŘÍKAZY; then PŘÍKAZY; ]… [ else PŘÍKAZY; ] fi"
 
 #: builtins.c:196
-msgid "while COMMANDS; do COMMANDS; done"
-msgstr "while PŘÍKAZY; do PŘÍKAZY; done"
+msgid "while COMMANDS; do COMMANDS-2; done"
+msgstr "while PŘÍKAZY; do PŘÍKAZY-2; done"
 
 #: builtins.c:198
-msgid "until COMMANDS; do COMMANDS; done"
-msgstr "until PŘÍKAZY; do PŘÍKAZY; done"
+msgid "until COMMANDS; do COMMANDS-2; done"
+msgstr "until PŘÍKAZY; do PŘÍKAZY-2; done"
 
 #: builtins.c:200
 msgid "coproc [NAME] command [redirections]"
@@ -3753,7 +3768,8 @@ msgid ""
 "    splitting, and the first word is assigned to the first NAME, the second\n"
 "    word to the second NAME, and so on, with any leftover words assigned to\n"
 "    the last NAME.  Only the characters found in $IFS are recognized as word\n"
-"    delimiters.\n"
+"    delimiters. By default, the backslash character escapes delimiter characters\n"
+"    and newline.\n"
 "    \n"
 "    If no NAMEs are supplied, the line read is stored in the REPLY variable.\n"
 "    \n"
@@ -3796,7 +3812,8 @@ msgstr ""
 "    dělení na slova a první slovo je přiřazeno do prvního JMÉNA, druhé slovo\n"
 "    do druhého JMÉNA a tak dále, přičemž přebývající slova se přiřadí do\n"
 "    posledního JMÉNA. Pouze znaky uvedené v $IFS jsou považovány za\n"
-"    oddělovače slov.\n"
+"    oddělovače slov. Ve výchozím nastavení znak zpětného lomítka ruší\n"
+"    zvláštní význam znaků oddělovače a nového řádku.\n"
 "    \n"
 "    Nejsou-li uvedena žádná JMÉNA, načtený řádek bude uložen do proměnné REPLY.\n"
 "    \n"
@@ -3832,7 +3849,7 @@ msgstr ""
 "    přiřazování do proměnné, nebo není poskytnut neplatný deskriptor souboru\n"
 "    jako argument -u."
 
-#: builtins.c:1041
+#: builtins.c:1042
 msgid ""
 "Return from a shell function.\n"
 "    \n"
@@ -3852,7 +3869,7 @@ msgstr ""
 "    Návratová hodnota:\n"
 "    Vrátí N, nebo selže, pokud shell neprovádí funkci nebo skript."
 
-#: builtins.c:1054
+#: builtins.c:1055
 msgid ""
 "Set or unset values of shell options and positional parameters.\n"
 "    \n"
@@ -4020,7 +4037,7 @@ msgstr ""
 "    Návratový kód:\n"
 "    Vrátí úspěch, pokud nebyl zadán neplatný argument."
 
-#: builtins.c:1139
+#: builtins.c:1140
 msgid ""
 "Unset values and attributes of shell variables and functions.\n"
 "    \n"
@@ -4059,7 +4076,7 @@ msgstr ""
 "    Vrátí úspěch, pokud nebyl zadán neplatný přepínač a JMÉNO není jen pro\n"
 "    čtení."
 
-#: builtins.c:1161
+#: builtins.c:1162
 msgid ""
 "Set export attribute for shell variables.\n"
 "    \n"
@@ -4091,7 +4108,7 @@ msgstr ""
 "    Návratový kód:\n"
 "    Vrátí úspěch, pokud nebyl zadán neplatný přepínač nebo NÁZEV."
 
-#: builtins.c:1180
+#: builtins.c:1181
 msgid ""
 "Mark shell variables as unchangeable.\n"
 "    \n"
@@ -4129,7 +4146,7 @@ msgstr ""
 "    Návratový kód:\n"
 "    Vrátí úspěch, pokud nebyl zadán neplatný přepínač nebo NÁZEV."
 
-#: builtins.c:1202
+#: builtins.c:1203
 msgid ""
 "Shift positional parameters.\n"
 "    \n"
@@ -4147,7 +4164,7 @@ msgstr ""
 "    Návratový kód:\n"
 "    Vrátí úspěch, pokud N není záporný a není větší než $#."
 
-#: builtins.c:1214 builtins.c:1229
+#: builtins.c:1215 builtins.c:1230
 msgid ""
 "Execute commands from a file in the current shell.\n"
 "    \n"
@@ -4171,7 +4188,7 @@ msgstr ""
 "    Vrací návratový kód posledního provedeného příkazu z NÁZVU_SOUBORU.\n"
 "    Selže, pokud NÁZEV_SOUBORU nelze načíst."
 
-#: builtins.c:1245
+#: builtins.c:1246
 msgid ""
 "Suspend shell execution.\n"
 "    \n"
@@ -4195,7 +4212,7 @@ msgstr ""
 "    Návratový kód:\n"
 "    Vrací úspěch, pokud je správa úloh zapnuta a nevyskytla se chyba."
 
-#: builtins.c:1261
+#: builtins.c:1262
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -4362,7 +4379,7 @@ msgstr ""
 "    Vrací úspěch, je-li VÝRAZ vyhodnocen jako pravdivý. Selže, je-li VÝRAZ\n"
 "    vyhodnocen jako nepravdivý nebo je-li zadán neplatný argument."
 
-#: builtins.c:1343
+#: builtins.c:1344
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -4374,7 +4391,7 @@ msgstr ""
 "    Toto je synonymum pro vestavěný příkaz „test“, až na to, že poslední\n"
 "    argument musí být doslovně „]“, aby se shodoval s otevírající „[“."
 
-#: builtins.c:1352
+#: builtins.c:1353
 msgid ""
 "Display process times.\n"
 "    \n"
@@ -4392,7 +4409,7 @@ msgstr ""
 "    Návratový kód:\n"
 "    Vždy uspěje."
 
-#: builtins.c:1364
+#: builtins.c:1365
 msgid ""
 "Trap signals and other events.\n"
 "    \n"
@@ -4459,7 +4476,7 @@ msgstr ""
 "    Návratový kód:\n"
 "    Vrátí úspěch, pokud SIGSPEC a zadané přepínače jsou platné."
 
-#: builtins.c:1400
+#: builtins.c:1401
 msgid ""
 "Display information about command type.\n"
 "    \n"
@@ -4514,7 +4531,7 @@ msgstr ""
 "    Vrátí úspěch, pokud všechny NÁZVY byly nalezeny. Selže, pokud některé\n"
 "    nalezeny nebyly."
 
-#: builtins.c:1431
+#: builtins.c:1432
 msgid ""
 "Modify shell resource limits.\n"
 "    \n"
@@ -4609,7 +4626,7 @@ msgstr ""
 "    Návratová hodnota:\n"
 "    Vrací úspěch, pokud nebyl zadán neplatný přepínač a nevyskytla se chyba."
 
-#: builtins.c:1482
+#: builtins.c:1483
 msgid ""
 "Display or set file mode mask.\n"
 "    \n"
@@ -4642,7 +4659,7 @@ msgstr ""
 "    Návratový kód\n"
 "    Vrátí úspěch, pokud nebyl zadán neplatný MÓD nebo přepínač."
 
-#: builtins.c:1502
+#: builtins.c:1503
 msgid ""
 "Wait for job completion and return exit status.\n"
 "    \n"
@@ -4693,7 +4710,7 @@ msgstr ""
 "    neplatný přepínač nebo byl použit přepínač -n a shell nemá žádné\n"
 "    nevyhodnocené potomky."
 
-#: builtins.c:1533
+#: builtins.c:1534
 msgid ""
 "Wait for process completion and return exit status.\n"
 "    \n"
@@ -4715,7 +4732,7 @@ msgstr ""
 "    Vrátí kód posledního PID. Selže, pokud PID není platný nebo byl zadán\n"
 "    neplatný přepínač."
 
-#: builtins.c:1548
+#: builtins.c:1549
 msgid ""
 "Execute commands for each member in a list.\n"
 "    \n"
@@ -4736,7 +4753,7 @@ msgstr ""
 "    Návratový kód:\n"
 "    Vrátí kód naposledy provedeného příkazu."
 
-#: builtins.c:1562
+#: builtins.c:1563
 msgid ""
 "Arithmetic for loop.\n"
 "    \n"
@@ -4765,7 +4782,7 @@ msgstr ""
 "    Návratový kód:\n"
 "    Vrátí kód naposledy vykonaného příkazu."
 
-#: builtins.c:1580
+#: builtins.c:1581
 msgid ""
 "Select words from a list and execute commands.\n"
 "    \n"
@@ -4800,7 +4817,7 @@ msgstr ""
 "    Návratový kód:\n"
 "    Vrátí kód naposledy prováděného příkazu."
 
-#: builtins.c:1601
+#: builtins.c:1602
 msgid ""
 "Report time consumed by pipeline's execution.\n"
 "    \n"
@@ -4829,7 +4846,7 @@ msgstr ""
 "    Návratový kód:\n"
 "    Návratová hodnota je návratová hodnota KOLONY."
 
-#: builtins.c:1618
+#: builtins.c:1619
 msgid ""
 "Execute commands based on pattern matching.\n"
 "    \n"
@@ -4847,7 +4864,7 @@ msgstr ""
 "    Návratový kód:\n"
 "    Vrátí kód naposledy provedeného příkazu."
 
-#: builtins.c:1630
+#: builtins.c:1631
 msgid ""
 "Execute commands based on conditional.\n"
 "    \n"
@@ -4875,42 +4892,43 @@ msgstr ""
 "    Návratový kód:\n"
 "    Vrátí kód naposledy provedeného příkazu."
 
-#: builtins.c:1647
+#: builtins.c:1648
 msgid ""
 "Execute commands as long as a test succeeds.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `while' COMMANDS has an exit status of zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n"
+"    an exit status of zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
 "Vykonává příkazy, dokud test úspěšně prochází.\n"
 "    \n"
-"    Expanduje a provádí PŘÍKAZY tak dlouho, dokud poslední příkaz ve „while“\n"
-"    PŘÍKAZECH má nulový návratový kód.\n"
+"    Expanduje a provádí PŘÍKAZY-2 tak dlouho, dokud poslední příkaz v PŘÍKAZECH\n"
+"    má nulový návratový kód.\n"
 "    \n"
 "    Návratový kód:\n"
 "    Vrátí kód naposledy provedeného příkazu."
 
-#: builtins.c:1659
+#: builtins.c:1660
 msgid ""
 "Execute commands as long as a test does not succeed.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `until' COMMANDS has an exit status which is not zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n"
+"    an exit status which is not zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
 "Vykonává příkazy, dokud test končí neúspěšně.\n"
 "    \n"
-"    Expanduje a provádí PŘÍKAZY tak dlouho, dokud poslední příkaz ve „until“\n"
-"    PŘÍKAZECH má nenulový návratový kód.    \n"
+"    Expanduje a provádí PŘÍKAZY-2 tak dlouho, dokud poslední příkaz v PŘÍKAZECH\n"
+"    má nenulový návratový kód.\n"
+"    \n"
 "    Návratový kód:\n"
 "    Vrátí kód naposledy provedeného příkazu."
 
-#: builtins.c:1671
+#: builtins.c:1672
 msgid ""
 "Create a coprocess named NAME.\n"
 "    \n"
@@ -4931,7 +4949,7 @@ msgstr ""
 "    Návratový kód:\n"
 "    Příkaz coproc vrací návratový kód 0."
 
-#: builtins.c:1685
+#: builtins.c:1686
 msgid ""
 "Define shell function.\n"
 "    \n"
@@ -4953,7 +4971,7 @@ msgstr ""
 "    Návratový kód:\n"
 "    Vrátí úspěch, pokud NÁZEV není jen pro čtení."
 
-#: builtins.c:1699
+#: builtins.c:1700
 msgid ""
 "Group commands as a unit.\n"
 "    \n"
@@ -4970,7 +4988,7 @@ msgstr ""
 "    Návratový kód:\n"
 "    Vrátí kód naposledy spuštěného příkazu."
 
-#: builtins.c:1711
+#: builtins.c:1712
 msgid ""
 "Resume job in foreground.\n"
 "    \n"
@@ -4993,7 +5011,7 @@ msgstr ""
 "    Návratový kód:\n"
 "    Vrátí kód obnovené úlohy."
 
-#: builtins.c:1726
+#: builtins.c:1727
 msgid ""
 "Evaluate arithmetic expression.\n"
 "    \n"
@@ -5015,7 +5033,7 @@ msgstr ""
 # příkaz, který by byl vykonán na základě splnění jiné podmínky. Tj. překlad
 # „podmíněný příkaz“ je chybný.
 # Toto je nápověda k vestavěnému příkazu „[“.
-#: builtins.c:1738
+#: builtins.c:1739
 msgid ""
 "Execute conditional command.\n"
 "    \n"
@@ -5062,7 +5080,7 @@ msgstr ""
 "    Návratový kód:\n"
 "    0 nebo 1 podle hodnoty VÝRAZU."
 
-#: builtins.c:1764
+#: builtins.c:1765
 msgid ""
 "Common shell variable names and usage.\n"
 "    \n"
@@ -5166,7 +5184,7 @@ msgstr ""
 "    \t\trozlišení, které příkazy by měly být uloženy do seznamu\n"
 "    \t\thistorie.\n"
 
-#: builtins.c:1821
+#: builtins.c:1822
 msgid ""
 "Add directories to stack.\n"
 "    \n"
@@ -5223,7 +5241,7 @@ msgstr ""
 "    Vrátí úspěch, pokud nebyl zadán neplatný argument a změna adresáře\n"
 "    neselhala."
 
-#: builtins.c:1855
+#: builtins.c:1856
 msgid ""
 "Remove directories from stack.\n"
 "    \n"
@@ -5273,7 +5291,7 @@ msgstr ""
 "    Vrátí úspěch, pokud nebyl zadán neplatný argument nebo neselhala změna\n"
 "    adresáře."
 
-#: builtins.c:1885
+#: builtins.c:1886
 msgid ""
 "Display directory stack.\n"
 "    \n"
@@ -5323,7 +5341,7 @@ msgstr ""
 "    Návratový kód:\n"
 "    Vrátí úspěch, pokud nebyl zadán neplatný přepínač a nevyskytla se chyba."
 
-#: builtins.c:1916
+#: builtins.c:1917
 msgid ""
 "Set and unset shell options.\n"
 "    \n"
@@ -5360,7 +5378,7 @@ msgstr ""
 "    Vrátí úspěch, je-li NÁZEV_VOLBY zapnut. Selže, byl-li zadán neplatný\n"
 "    přepínač nebo je-li NÁZEV_VOLBY vypnut."
 
-#: builtins.c:1937
+#: builtins.c:1938
 msgid ""
 "Formats and prints ARGUMENTS under control of the FORMAT.\n"
 "    \n"
@@ -5379,6 +5397,8 @@ msgid ""
 "    \n"
 "      %b\texpand backslash escape sequences in the corresponding argument\n"
 "      %q\tquote the argument in a way that can be reused as shell input\n"
+"      %Q\tlike %q, but apply any precision to the unquoted argument before\n"
+"    \t\tquoting\n"
 "      %(fmt)T\toutput the date-time string resulting from using FMT as a format\n"
 "    \t        string for strftime(3)\n"
 "    \n"
@@ -5409,6 +5429,8 @@ msgstr ""
 "                   v odpovídajícím argumentu\n"
 "      %q           oescapuje argument takovým způsobem, že jej bude možné\n"
 "                   použít jako vstup shellu\n"
+"      %Q           jako %q, ale použije libovolnou přesnost na neescapovaný\n"
+"                   argument před samotným escapováním\n"
 "      %(FORMÁT)T   vypíše řetězec data-času tak, jako by to byl výstup\n"
 "                   funkce strftime(3) s formátovacím řetězcem FORMÁT\n"
 "    \n"
@@ -5421,7 +5443,7 @@ msgstr ""
 "    Vrátí úspěch, pokud nebyl zadán neplatný přepínač a nedošlo k chybě\n"
 "    zápisu nebo přiřazení."
 
-#: builtins.c:1971
+#: builtins.c:1974
 msgid ""
 "Specify how arguments are to be completed by Readline.\n"
 "    \n"
@@ -5471,7 +5493,7 @@ msgstr ""
 "    Návratový kód:\n"
 "    Vrátí úspěch, pokud nebyl zadán neplatný přepínač a nevyskytla se chyba."
 
-#: builtins.c:2001
+#: builtins.c:2004
 msgid ""
 "Display possible completions depending on the options.\n"
 "    \n"
@@ -5491,7 +5513,7 @@ msgstr ""
 "    Návratový kód:\n"
 "    Vrátí úspěch, pokud nebyl zadán neplatný přepínač a nevyskytla se chyba."
 
-#: builtins.c:2016
+#: builtins.c:2019
 msgid ""
 "Modify or display completion options.\n"
 "    \n"
@@ -5545,7 +5567,7 @@ msgstr ""
 "    Vrátí úspěch, pokud nebyl zadán neplatný přepínač a NÁZEV měl definováno\n"
 "    pravidlo doplňování."
 
-#: builtins.c:2047
+#: builtins.c:2050
 msgid ""
 "Read lines from the standard input into an indexed array variable.\n"
 "    \n"
@@ -5615,7 +5637,7 @@ msgstr ""
 "    Vrátí úspěch, pokud nebyl zadán neplatný přepínač, POLE nebylo jen pro\n"
 "    čtení a bylo indexovaným polem."
 
-#: builtins.c:2083
+#: builtins.c:2086
 msgid ""
 "Read lines from a file into an array variable.\n"
 "    \n"
@@ -5625,6 +5647,9 @@ msgstr ""
 "    \n"
 "    Synonymum pro „mapfile“."
 
+#~ msgid "%s: invalid associative array key"
+#~ msgstr "%s: neplatný klíč asociativního pole"
+
 #~ msgid ""
 #~ "Returns the context of the current subroutine call.\n"
 #~ "    \n"
index 44572c77b2362e24f7e3791e79a5a093951b4fae..46243f38ef63b08ded67fd9806d1cb6c77895f54 100644 (file)
Binary files a/po/da.gmo and b/po/da.gmo differ
index 09b2cf64fb70b100f77c68b3f3b75d6d022011c0..d5334e2857c46742515b3b2362d9bd3a12be9b63 100644 (file)
--- a/po/da.po
+++ b/po/da.po
@@ -12,7 +12,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: bash 4.2\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-11-28 12:51-0500\n"
+"POT-Creation-Date: 2022-01-11 14:50-0500\n"
 "PO-Revision-Date: 2011-03-18 01:36+0100\n"
 "Last-Translator: Kenneth Nielsen <k.nielsen81@gmail.com>\n"
 "Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
@@ -29,59 +29,54 @@ msgstr ""
 msgid "bad array subscript"
 msgstr "ugyldigt arrayindeks"
 
-#: arrayfunc.c:421 builtins/declare.def:638 variables.c:2274 variables.c:2300
-#: variables.c:3133
+#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268
+#: variables.c:3101
 #, c-format
 msgid "%s: removing nameref attribute"
 msgstr ""
 
-#: arrayfunc.c:446 builtins/declare.def:851
+#: arrayfunc.c:496 builtins/declare.def:868
 #, c-format
 msgid "%s: cannot convert indexed to associative array"
 msgstr "%s: kan ikke konvertere indekseret til associativt array"
 
-#: arrayfunc.c:700
-#, c-format
-msgid "%s: invalid associative array key"
-msgstr "%s: ugyldig nøgle til associativt array"
-
-#: arrayfunc.c:702
+#: arrayfunc.c:777
 #, c-format
 msgid "%s: cannot assign to non-numeric index"
 msgstr "%s: kan ikke tildele til ikkenumerisk indeks"
 
-#: arrayfunc.c:747
+#: arrayfunc.c:822
 #, c-format
 msgid "%s: %s: must use subscript when assigning associative array"
 msgstr "%s: %s: et indeks skal bruges ved tildeling til associativt array"
 
-#: bashhist.c:452
+#: bashhist.c:455
 #, c-format
 msgid "%s: cannot create: %s"
 msgstr "%s: kan ikke oprette %s"
 
-#: bashline.c:4310
+#: bashline.c:4479
 msgid "bash_execute_unix_command: cannot find keymap for command"
 msgstr "bash_execute_unix_command: kan ikke finde tastetildeling for kommando"
 
-#: bashline.c:4459
+#: bashline.c:4637
 #, c-format
 msgid "%s: first non-whitespace character is not `\"'"
 msgstr "%s: første ikke-blank-tegn er ikke '\"'"
 
 # Kønnet her er et gæt, hvis det er parenteser eller anførselstegn passer det
 # FEJLRAPPORT
-#: bashline.c:4488
+#: bashline.c:4666
 #, c-format
 msgid "no closing `%c' in %s"
 msgstr "ingen afsluttende \"%c\" i %s"
 
-#: bashline.c:4519
+#: bashline.c:4697
 #, c-format
 msgid "%s: missing colon separator"
 msgstr "%s: manglende kolonseparator"
 
-#: bashline.c:4555
+#: bashline.c:4733
 #, fuzzy, c-format
 msgid "`%s': cannot unbind in command keymap"
 msgstr "\"%s\": kan ikke løsne"
@@ -101,7 +96,7 @@ msgstr ""
 msgid "brace expansion: failed to allocate memory for `%s'"
 msgstr ""
 
-#: builtins/alias.def:131 variables.c:1844
+#: builtins/alias.def:131 variables.c:1817
 #, fuzzy, c-format
 msgid "`%s': invalid alias name"
 msgstr "\"%s\": ugyldigt tastetildelingsnavn"
@@ -178,7 +173,7 @@ msgstr ""
 msgid "HOME not set"
 msgstr "HOME ikke indstillet"
 
-#: builtins/cd.def:335 builtins/common.c:161 test.c:901
+#: builtins/cd.def:335 builtins/common.c:161 test.c:916
 msgid "too many arguments"
 msgstr "for mange argumenter"
 
@@ -206,7 +201,7 @@ msgstr "advarsel: "
 msgid "%s: usage: "
 msgstr "%s: brug: "
 
-#: builtins/common.c:193 shell.c:516 shell.c:844
+#: builtins/common.c:193 shell.c:524 shell.c:866
 #, c-format
 msgid "%s: option requires an argument"
 msgstr "%s: tilvalg kræver et argument"
@@ -221,7 +216,7 @@ msgstr "%s: numerisk argument påkrævet"
 msgid "%s: not found"
 msgstr "%s: ikke fundet"
 
-#: builtins/common.c:216 shell.c:857
+#: builtins/common.c:216 shell.c:879
 #, c-format
 msgid "%s: invalid option"
 msgstr "%s: ugyldigt tilvalg"
@@ -231,7 +226,7 @@ msgstr "%s: ugyldigt tilvalg"
 msgid "%s: invalid option name"
 msgstr "%s: ugyldigt tilvalgsnavn"
 
-#: builtins/common.c:230 execute_cmd.c:2373 general.c:368 general.c:373
+#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373
 #, c-format
 msgid "`%s': not a valid identifier"
 msgstr "\"%s\": ikke et gyldigt identificeringsnavn"
@@ -244,7 +239,7 @@ msgstr "ugyldigt oktaltal"
 msgid "invalid hex number"
 msgstr "ugyldigt heksadecimalt tal"
 
-#: builtins/common.c:244 expr.c:1569
+#: builtins/common.c:244 expr.c:1574
 msgid "invalid number"
 msgstr "ugyldigt tal"
 
@@ -258,88 +253,93 @@ msgstr "%s: ugyldig signalspecifikation"
 msgid "`%s': not a pid or valid job spec"
 msgstr "\"%s\": ikke en pid eller gyldig job-spec"
 
-#: builtins/common.c:266 error.c:510
+#: builtins/common.c:266 error.c:536
 #, c-format
 msgid "%s: readonly variable"
 msgstr "%s: skrivebeskyttet variabel"
 
-#: builtins/common.c:274
+#: builtins/common.c:273
+#, fuzzy, c-format
+msgid "%s: cannot assign"
+msgstr "%s: kan ikke fjerne"
+
+#: builtins/common.c:281
 #, c-format
 msgid "%s: %s out of range"
 msgstr "%s: %s udenfor rækkevidde"
 
-#: builtins/common.c:274 builtins/common.c:276
+#: builtins/common.c:281 builtins/common.c:283
 msgid "argument"
 msgstr "argument"
 
-#: builtins/common.c:276
+#: builtins/common.c:283
 #, c-format
 msgid "%s out of range"
 msgstr "%s udenfor rækkevidde"
 
-#: builtins/common.c:284
+#: builtins/common.c:291
 #, c-format
 msgid "%s: no such job"
 msgstr "%s: intet sådant job"
 
-#: builtins/common.c:292
+#: builtins/common.c:299
 #, c-format
 msgid "%s: no job control"
 msgstr "%s: ingen jobkontrol"
 
-#: builtins/common.c:294
+#: builtins/common.c:301
 msgid "no job control"
 msgstr "ingen jobkontrol"
 
-#: builtins/common.c:304
+#: builtins/common.c:311
 #, c-format
 msgid "%s: restricted"
 msgstr "%s: begrænset"
 
-#: builtins/common.c:306
+#: builtins/common.c:313
 msgid "restricted"
 msgstr "begrænset"
 
-#: builtins/common.c:314
+#: builtins/common.c:321
 #, c-format
 msgid "%s: not a shell builtin"
 msgstr "%s: ikke indbygget i skallen"
 
-#: builtins/common.c:323
+#: builtins/common.c:330
 #, c-format
 msgid "write error: %s"
 msgstr "skrivefejl: %s"
 
-#: builtins/common.c:331
+#: builtins/common.c:338
 #, c-format
 msgid "error setting terminal attributes: %s"
 msgstr "fejl ved indstilling af terminalattribut: %s"
 
-#: builtins/common.c:333
+#: builtins/common.c:340
 #, c-format
 msgid "error getting terminal attributes: %s"
 msgstr "fejl ved indhentning af terminalattribut: %s"
 
-#: builtins/common.c:635
+#: builtins/common.c:642
 #, c-format
 msgid "%s: error retrieving current directory: %s: %s\n"
 msgstr "%s: fejl ved indhentning af nuværende mappe: %s: %s\n"
 
-#: builtins/common.c:701 builtins/common.c:703
+#: builtins/common.c:708 builtins/common.c:710
 #, c-format
 msgid "%s: ambiguous job spec"
 msgstr "%s: tvetydig job-spec"
 
-#: builtins/common.c:964
+#: builtins/common.c:971
 msgid "help not available in this version"
 msgstr ""
 
-#: builtins/common.c:1008 builtins/set.def:953 variables.c:3839
+#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825
 #, c-format
 msgid "%s: cannot unset: readonly %s"
 msgstr "%s: kan ikke fjerne: skrivebeskyttet %s"
 
-#: builtins/common.c:1013 builtins/set.def:932 variables.c:3844
+#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830
 #, c-format
 msgid "%s: cannot unset"
 msgstr "%s: kan ikke fjerne"
@@ -349,108 +349,108 @@ msgstr "%s: kan ikke fjerne"
 msgid "%s: invalid action name"
 msgstr "%s: ugyldigt handlingsnavn"
 
-#: builtins/complete.def:486 builtins/complete.def:634
-#: builtins/complete.def:865
+#: builtins/complete.def:486 builtins/complete.def:642
+#: builtins/complete.def:873
 #, c-format
 msgid "%s: no completion specification"
 msgstr "%s: ingen fuldførselsspecifikation"
 
-#: builtins/complete.def:688
+#: builtins/complete.def:696
 msgid "warning: -F option may not work as you expect"
 msgstr "advarsel: tilvalget -F vil måske ikke virke, som du forventer"
 
-#: builtins/complete.def:690
+#: builtins/complete.def:698
 msgid "warning: -C option may not work as you expect"
 msgstr "advarsel: tilvalget -C vil måske ikke virke, som du forventer"
 
-#: builtins/complete.def:838
+#: builtins/complete.def:846
 msgid "not currently executing completion function"
 msgstr "ikke i gang med at eksekvere fuldførelsesfunktion"
 
-#: builtins/declare.def:134
+#: builtins/declare.def:137
 msgid "can only be used in a function"
 msgstr "kan kun bruges i en funktion"
 
-#: builtins/declare.def:363 builtins/declare.def:756
+#: builtins/declare.def:437
+msgid "cannot use `-f' to make functions"
+msgstr "kan ikke bruge \"-f\" til at lave funktioner"
+
+#: builtins/declare.def:464 execute_cmd.c:6132
+#, c-format
+msgid "%s: readonly function"
+msgstr "%s: skrivebeskyttet funktion"
+
+#: builtins/declare.def:521 builtins/declare.def:804
 #, c-format
 msgid "%s: reference variable cannot be an array"
 msgstr ""
 
-#: builtins/declare.def:374 variables.c:3385
+#: builtins/declare.def:532 variables.c:3359
 #, c-format
 msgid "%s: nameref variable self references not allowed"
 msgstr ""
 
-#: builtins/declare.def:379 variables.c:2104 variables.c:3304 variables.c:3312
-#: variables.c:3382
+#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286
+#: variables.c:3356
 #, c-format
 msgid "%s: circular name reference"
 msgstr ""
 
-#: builtins/declare.def:384 builtins/declare.def:762 builtins/declare.def:773
+#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820
 #, fuzzy, c-format
 msgid "`%s': invalid variable name for name reference"
 msgstr "\"%s\": ugyldigt tastetildelingsnavn"
 
-#: builtins/declare.def:514
-msgid "cannot use `-f' to make functions"
-msgstr "kan ikke bruge \"-f\" til at lave funktioner"
-
-#: builtins/declare.def:526 execute_cmd.c:5986
-#, c-format
-msgid "%s: readonly function"
-msgstr "%s: skrivebeskyttet funktion"
-
-#: builtins/declare.def:824
-#, c-format
-msgid "%s: quoted compound array assignment deprecated"
-msgstr ""
-
-#: builtins/declare.def:838
+#: builtins/declare.def:856
 #, c-format
 msgid "%s: cannot destroy array variables in this way"
 msgstr "%s: kan ikke destruere arrayvariabel på denne måde"
 
-#: builtins/declare.def:845 builtins/read.def:815
+#: builtins/declare.def:862 builtins/read.def:887
 #, c-format
 msgid "%s: cannot convert associative to indexed array"
 msgstr "%s: kan ikke konvertere associativt til indekseret array"
 
-#: builtins/enable.def:143 builtins/enable.def:151
+#: builtins/declare.def:891
+#, c-format
+msgid "%s: quoted compound array assignment deprecated"
+msgstr ""
+
+#: builtins/enable.def:145 builtins/enable.def:153
 msgid "dynamic loading not available"
 msgstr "dynamisk indlæsning ikke tilgængelig"
 
-#: builtins/enable.def:343
+#: builtins/enable.def:376
 #, c-format
 msgid "cannot open shared object %s: %s"
 msgstr "kan ikke åbne delt objekt %s: %s"
 
-#: builtins/enable.def:371
+#: builtins/enable.def:405
 #, c-format
 msgid "cannot find %s in shared object %s: %s"
 msgstr "kan ikke finde %s i delt objekt %s: %s"
 
-#: builtins/enable.def:388
+#: builtins/enable.def:422
 #, fuzzy, c-format
 msgid "%s: dynamic builtin already loaded"
 msgstr "%s: ikke dynamisk indlæst"
 
-#: builtins/enable.def:392
+#: builtins/enable.def:426
 #, c-format
 msgid "load function for %s returns failure (%d): not loaded"
 msgstr ""
 
-#: builtins/enable.def:517
+#: builtins/enable.def:551
 #, c-format
 msgid "%s: not dynamically loaded"
 msgstr "%s: ikke dynamisk indlæst"
 
-#: builtins/enable.def:543
+#: builtins/enable.def:577
 #, c-format
 msgid "%s: cannot delete: %s"
 msgstr "%s: kan ikke slette: %s"
 
-#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5818
+#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959
 #, c-format
 msgid "%s: is a directory"
 msgstr "%s: er en mappe"
@@ -465,7 +465,7 @@ msgstr "%s: ikke en regulær fil"
 msgid "%s: file is too large"
 msgstr "%s: fil er for stor"
 
-#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1647
+#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673
 #, c-format
 msgid "%s: cannot execute binary file"
 msgstr "%s: kan ikke eksekvere binær fil"
@@ -563,12 +563,12 @@ msgstr ""
 "ingen hjælpeemner matcher \"%s\". Prøv \"help help\" eller \"man -k %s\" "
 "eller \"info %s\"."
 
-#: builtins/help.def:224
+#: builtins/help.def:223
 #, c-format
 msgid "%s: cannot open: %s"
 msgstr "%s: kan ikke åbne: %s"
 
-#: builtins/help.def:524
+#: builtins/help.def:523
 #, c-format
 msgid ""
 "These shell commands are defined internally.  Type `help' to see this list.\n"
@@ -590,21 +590,21 @@ msgstr ""
 "En stjerne (*) ved siden af et navn betyder at kommandoen er slået fra.\n"
 "\n"
 
-#: builtins/history.def:155
+#: builtins/history.def:159
 msgid "cannot use more than one of -anrw"
 msgstr "kan ikke bruge mere end en af -anrw"
 
-#: builtins/history.def:188 builtins/history.def:198 builtins/history.def:213
-#: builtins/history.def:230 builtins/history.def:242 builtins/history.def:249
+#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215
+#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247
 msgid "history position"
 msgstr "historikposition"
 
-#: builtins/history.def:340
+#: builtins/history.def:338
 #, fuzzy, c-format
 msgid "%s: invalid timestamp"
 msgstr "%s: ugyldigt tilvalgsnavn"
 
-#: builtins/history.def:451
+#: builtins/history.def:449
 #, c-format
 msgid "%s: history expansion failed"
 msgstr "%s: historikudvidelse fejlede"
@@ -627,79 +627,79 @@ msgstr "%s: argumenter skal være processer eller job-id'er"
 msgid "Unknown error"
 msgstr "Ukendt fejl"
 
-#: builtins/let.def:97 builtins/let.def:122 expr.c:639 expr.c:657
+#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658
 msgid "expression expected"
 msgstr "forventede et udtryk"
 
-#: builtins/mapfile.def:178
+#: builtins/mapfile.def:180
 #, fuzzy, c-format
 msgid "%s: not an indexed array"
 msgstr "%s: ikke en arrayvariabel"
 
-#: builtins/mapfile.def:271 builtins/read.def:308
+#: builtins/mapfile.def:276 builtins/read.def:336
 #, c-format
 msgid "%s: invalid file descriptor specification"
 msgstr "%s: ugyldig filbeskrivelsesspecifikation"
 
-#: builtins/mapfile.def:279 builtins/read.def:315
+#: builtins/mapfile.def:284 builtins/read.def:343
 #, c-format
 msgid "%d: invalid file descriptor: %s"
 msgstr "%d: ugyldig filbeskrivelse: %s"
 
 # -c     Specify the number of lines read between each call to callback.
-#: builtins/mapfile.def:288 builtins/mapfile.def:326
+#: builtins/mapfile.def:293 builtins/mapfile.def:331
 #, c-format
 msgid "%s: invalid line count"
 msgstr "%s: ugyldigt antal linjer"
 
-#: builtins/mapfile.def:299
+#: builtins/mapfile.def:304
 #, c-format
 msgid "%s: invalid array origin"
 msgstr "%s: ugyldig array-startindeks"
 
-#: builtins/mapfile.def:316
+#: builtins/mapfile.def:321
 #, c-format
 msgid "%s: invalid callback quantum"
 msgstr "%s: ugyldigt tilbagekaldskvantum"
 
-#: builtins/mapfile.def:349
+#: builtins/mapfile.def:354
 msgid "empty array variable name"
 msgstr "tomt arrayvariabelnavn"
 
-#: builtins/mapfile.def:370
+#: builtins/mapfile.def:375
 msgid "array variable support required"
 msgstr "understøttelse af arrayvariabel påkrævet"
 
-#: builtins/printf.def:419
+#: builtins/printf.def:430
 #, c-format
 msgid "`%s': missing format character"
 msgstr "\"%s\": manglende formattegn"
 
-#: builtins/printf.def:474
+#: builtins/printf.def:485
 #, fuzzy, c-format
 msgid "`%c': invalid time format specification"
 msgstr "%s: ugyldig specifikation af tidsudløb"
 
-#: builtins/printf.def:676
+#: builtins/printf.def:708
 #, c-format
 msgid "`%c': invalid format character"
 msgstr "\"%c\": ugyldigt formattegn"
 
-#: builtins/printf.def:702
+#: builtins/printf.def:734
 #, c-format
 msgid "warning: %s: %s"
 msgstr "advarsel: %s: %s"
 
-#: builtins/printf.def:788
+#: builtins/printf.def:822
 #, c-format
 msgid "format parsing problem: %s"
 msgstr ""
 
-#: builtins/printf.def:885
+#: builtins/printf.def:919
 msgid "missing hex digit for \\x"
 msgstr "manglende heksciffer for \\x"
 
-#: builtins/printf.def:900
+#: builtins/printf.def:934
 #, fuzzy, c-format
 msgid "missing unicode digit for \\%c"
 msgstr "manglende heksciffer for \\x"
@@ -853,12 +853,12 @@ msgstr ""
 "    \n"
 "Den indbyggede funktion \"dirs\" viser mappestakken."
 
-#: builtins/read.def:280
+#: builtins/read.def:308
 #, c-format
 msgid "%s: invalid timeout specification"
 msgstr "%s: ugyldig specifikation af tidsudløb"
 
-#: builtins/read.def:755
+#: builtins/read.def:827
 #, c-format
 msgid "read error: %d: %s"
 msgstr "læsefejl: %d: %s"
@@ -871,7 +871,7 @@ msgstr "kan kun udføre \"return\" fra en funktion eller indlæst skript"
 msgid "cannot simultaneously unset a function and a variable"
 msgstr "kan ikke fjerne en funktion og en variabel samtidig"
 
-#: builtins/set.def:966
+#: builtins/set.def:969
 #, c-format
 msgid "%s: not an array variable"
 msgstr "%s: ikke en arrayvariabel"
@@ -890,11 +890,11 @@ msgstr "%s: kan ikke fjerne"
 msgid "shift count"
 msgstr "skifttæller"
 
-#: builtins/shopt.def:310
+#: builtins/shopt.def:323
 msgid "cannot set and unset shell options simultaneously"
 msgstr "kan ikke indstille og fjerne skaltilvalg samtidig"
 
-#: builtins/shopt.def:428
+#: builtins/shopt.def:444
 #, c-format
 msgid "%s: invalid shell option name"
 msgstr "%s: ugyldigt navn for skaltilvalg"
@@ -961,16 +961,16 @@ msgstr "%s: ugyldigt grænseargument"
 msgid "`%c': bad command"
 msgstr "\"%c\": ugyldig kommando"
 
-#: builtins/ulimit.def:455
+#: builtins/ulimit.def:464
 #, c-format
 msgid "%s: cannot get limit: %s"
 msgstr "%s: kan ikke indhente grænse: %s"
 
-#: builtins/ulimit.def:481
+#: builtins/ulimit.def:490
 msgid "limit"
 msgstr "grænse"
 
-#: builtins/ulimit.def:493 builtins/ulimit.def:793
+#: builtins/ulimit.def:502 builtins/ulimit.def:802
 #, c-format
 msgid "%s: cannot modify limit: %s"
 msgstr "%s: kan ikke modificere grænse: %s"
@@ -989,7 +989,7 @@ msgstr "\"%c\": ugyldig symbolsk tilstandsoperator"
 msgid "`%c': invalid symbolic mode character"
 msgstr "\"%c\": ugyldigt symbolsk tilstandstegn"
 
-#: error.c:89 error.c:347 error.c:349 error.c:351
+#: error.c:89 error.c:373 error.c:375 error.c:377
 msgid " line "
 msgstr " linje "
 
@@ -1009,91 +1009,101 @@ msgstr "Afbryder..."
 msgid "INFORM: "
 msgstr ""
 
-#: error.c:462
+#: error.c:310
+#, fuzzy, c-format
+msgid "DEBUG warning: "
+msgstr "advarsel: "
+
+#: error.c:488
 msgid "unknown command error"
 msgstr "ukendt kommandofejl"
 
-#: error.c:463
+#: error.c:489
 msgid "bad command type"
 msgstr "ugyldig kommandotype"
 
-#: error.c:464
+#: error.c:490
 msgid "bad connector"
 msgstr "dårligt mellemled"
 
-#: error.c:465
+#: error.c:491
 msgid "bad jump"
 msgstr "dårligt hop"
 
-#: error.c:503
+#: error.c:529
 #, c-format
 msgid "%s: unbound variable"
 msgstr "%s: ubundet variabel"
 
-#: eval.c:242
+#: eval.c:243
 msgid "\atimed out waiting for input: auto-logout\n"
 msgstr "\atidsudløb mens der ventedes på input: auto-logud\n"
 
-#: execute_cmd.c:537
+#: execute_cmd.c:555
 #, c-format
 msgid "cannot redirect standard input from /dev/null: %s"
 msgstr "kan ikke videresende standardinput fra /dev/null: %s"
 
-#: execute_cmd.c:1297
+#: execute_cmd.c:1317
 #, c-format
 msgid "TIMEFORMAT: `%c': invalid format character"
 msgstr "TIMEFORMAT: \"%c\": ugyldigt formateringstegn"
 
-#: execute_cmd.c:2362
+#: execute_cmd.c:2391
 #, c-format
 msgid "execute_coproc: coproc [%d:%s] still exists"
 msgstr ""
 
-#: execute_cmd.c:2486
+#: execute_cmd.c:2524
 msgid "pipe error"
 msgstr "datakanalfejl (pipe error)"
 
-#: execute_cmd.c:4793
+#: execute_cmd.c:4923
 #, c-format
 msgid "eval: maximum eval nesting level exceeded (%d)"
 msgstr ""
 
-#: execute_cmd.c:4805
+#: execute_cmd.c:4935
 #, c-format
 msgid "%s: maximum source nesting level exceeded (%d)"
 msgstr ""
 
-#: execute_cmd.c:4913
+#: execute_cmd.c:5043
 #, c-format
 msgid "%s: maximum function nesting level exceeded (%d)"
 msgstr ""
 
-#: execute_cmd.c:5467
+#: execute_cmd.c:5598
 #, c-format
 msgid "%s: restricted: cannot specify `/' in command names"
 msgstr "%s: begrænset: kan ikke specificere \"/\" i kommandonavne"
 
-#: execute_cmd.c:5574
+#: execute_cmd.c:5715
 #, c-format
 msgid "%s: command not found"
 msgstr "%s: kommando ikke fundet"
 
-#: execute_cmd.c:5816
+#: execute_cmd.c:5957
 #, c-format
 msgid "%s: %s"
 msgstr ""
 
-#: execute_cmd.c:5854
+#: execute_cmd.c:5975
+#, fuzzy, c-format
+msgid "%s: cannot execute: required file not found"
+msgstr "%s: kan ikke eksekvere binær fil"
+
+#: execute_cmd.c:6000
 #, c-format
 msgid "%s: %s: bad interpreter"
 msgstr "%s: %s: dårlig fortolker"
 
-#: execute_cmd.c:5891
+#: execute_cmd.c:6037
 #, fuzzy, c-format
 msgid "%s: cannot execute binary file: %s"
 msgstr "%s: kan ikke eksekvere binær fil"
 
-#: execute_cmd.c:5977
+#: execute_cmd.c:6123
 #, fuzzy, c-format
 msgid "`%s': is a special builtin"
 msgstr "%s er indbygget i skallen\n"
@@ -1107,7 +1117,7 @@ msgstr "%s er indbygget i skallen\n"
 #        expansion.   If the >(list) form is used, writing to the file will pro‐
 #        vide input for list.  If the <(list) form is used, the file  passed  as
 #        an argument should be read to obtain the output of list.
-#: execute_cmd.c:6029
+#: execute_cmd.c:6175
 #, c-format
 msgid "cannot duplicate fd %d to fd %d"
 msgstr "kan ikke duplikere fd %d til fd %d"
@@ -1120,72 +1130,72 @@ msgstr "grænse for rekursion af udtryk overskredet"
 msgid "recursion stack underflow"
 msgstr "underløb i rekursionsstak"
 
-#: expr.c:477
+#: expr.c:478
 msgid "syntax error in expression"
 msgstr "syntaksfejl i udtryk"
 
-#: expr.c:521
+#: expr.c:522
 msgid "attempted assignment to non-variable"
 msgstr "forsøgte tildeling til ikke-variabel"
 
-#: expr.c:530
+#: expr.c:531
 #, fuzzy
 msgid "syntax error in variable assignment"
 msgstr "syntaksfejl i udtryk"
 
-#: expr.c:544 expr.c:911
+#: expr.c:545 expr.c:912
 msgid "division by 0"
 msgstr "division med 0"
 
 # denne her streng er dårlig på så mange måder at det fatter man slet ikke. Skal bug oversætter og hvad er expassign. Jeg laver et bud og har fejlmeldt den
-#: expr.c:592
+#: expr.c:593
 msgid "bug: bad expassign token"
 msgstr "bug: dårligt expassign-udtryk"
 
-#: expr.c:646
+#: expr.c:647
 msgid "`:' expected for conditional expression"
 msgstr "\":\" forventet for betingede udtryk"
 
-#: expr.c:972
+#: expr.c:973
 msgid "exponent less than 0"
 msgstr "eksponent mindre end 0"
 
-#: expr.c:1029
+#: expr.c:1030
 msgid "identifier expected after pre-increment or pre-decrement"
 msgstr "identifikator forventet efter præforøgelse eller -formindskelse"
 
-#: expr.c:1056
+#: expr.c:1057
 msgid "missing `)'"
 msgstr "manglende \")\""
 
-#: expr.c:1107 expr.c:1487
+#: expr.c:1108 expr.c:1492
 msgid "syntax error: operand expected"
 msgstr "syntaksfejl: operand forventet"
 
-#: expr.c:1489
+#: expr.c:1494
 msgid "syntax error: invalid arithmetic operator"
 msgstr "syntaksfejl: ugyldig aritmetisk operator"
 
-#: expr.c:1513
+#: expr.c:1518
 #, c-format
 msgid "%s%s%s: %s (error token is \"%s\")"
 msgstr "%s%s%s: %s (fejlelement er \"%s\")"
 
-#: expr.c:1573
+#: expr.c:1578
 msgid "invalid arithmetic base"
 msgstr "ugyldig aritmetisk grundtal"
 
 # -c     Specify the number of lines read between each call to callback.
-#: expr.c:1582
+#: expr.c:1587
 #, fuzzy
 msgid "invalid integer constant"
 msgstr "%s: ugyldigt antal linjer"
 
-#: expr.c:1598
+#: expr.c:1603
 msgid "value too great for base"
 msgstr "værdi for stor til grundtal"
 
-#: expr.c:1647
+#: expr.c:1652
 #, c-format
 msgid "%s: expression error\n"
 msgstr "%s: fejl i udtryk\n"
@@ -1195,7 +1205,7 @@ msgid "getcwd: cannot access parent directories"
 msgstr "getcwd: kan ikke tilgå overliggende mapper"
 
 # Har ladet nodelay stå, idet jeg gætter på at det er et navn
-#: input.c:99 subst.c:6069
+#: input.c:99 subst.c:6208
 #, c-format
 msgid "cannot reset nodelay mode for fd %d"
 msgstr "kan ikke nulstille \"nodelay\"-tilstand for fd %d"
@@ -1215,168 +1225,168 @@ msgstr "save_bash_input: buffer eksisterer allerede til ny fd %d"
 msgid "start_pipeline: pgrp pipe"
 msgstr "start_pipeline: pgrp-datakanal (pipe)"
 
-#: jobs.c:906
+#: jobs.c:907
 #, c-format
 msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr ""
 
-#: jobs.c:959
+#: jobs.c:960
 #, c-format
 msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr ""
 
-#: jobs.c:1283
+#: jobs.c:1279
 #, c-format
 msgid "forked pid %d appears in running job %d"
 msgstr "forgrenet pid %d figurerer i kørende job %d"
 
-#: jobs.c:1402
+#: jobs.c:1397
 #, c-format
 msgid "deleting stopped job %d with process group %ld"
 msgstr "sletter stoppet job %d med procesgruppe %ld"
 
-#: jobs.c:1511
+#: jobs.c:1502
 #, c-format
 msgid "add_process: pid %5ld (%s) marked as still alive"
 msgstr "add_process: pid %5ld (%s) markeret som stadig i live"
 
-#: jobs.c:1850
+#: jobs.c:1839
 #, c-format
 msgid "describe_pid: %ld: no such pid"
 msgstr "describe_pid: %ld: ingen process med det pid"
 
-#: jobs.c:1865
+#: jobs.c:1854
 #, c-format
 msgid "Signal %d"
 msgstr "Signal %d"
 
-#: jobs.c:1879 jobs.c:1905
+#: jobs.c:1868 jobs.c:1894
 msgid "Done"
 msgstr "Færdig"
 
-#: jobs.c:1884 siglist.c:122
+#: jobs.c:1873 siglist.c:123
 msgid "Stopped"
 msgstr "Stoppet"
 
-#: jobs.c:1888
+#: jobs.c:1877
 #, c-format
 msgid "Stopped(%s)"
 msgstr "Stoppet(%s)"
 
-#: jobs.c:1892
+#: jobs.c:1881
 msgid "Running"
 msgstr "Kører"
 
-#: jobs.c:1909
+#: jobs.c:1898
 #, c-format
 msgid "Done(%d)"
 msgstr "Færdig(%d)"
 
-#: jobs.c:1911
+#: jobs.c:1900
 #, c-format
 msgid "Exit %d"
 msgstr "Afslut %d"
 
-#: jobs.c:1914
+#: jobs.c:1903
 msgid "Unknown status"
 msgstr "Ukendt status"
 
-#: jobs.c:2001
+#: jobs.c:1990
 #, c-format
 msgid "(core dumped) "
 msgstr "(smed kerne) "
 
-#: jobs.c:2020
+#: jobs.c:2009
 #, c-format
 msgid "  (wd: %s)"
 msgstr "  (wd: %s)"
 
-#: jobs.c:2259
+#: jobs.c:2250
 #, c-format
 msgid "child setpgid (%ld to %ld)"
 msgstr "underproces setpgid (%ld til %ld)"
 
-#: jobs.c:2617 nojobs.c:664
+#: jobs.c:2608 nojobs.c:666
 #, c-format
 msgid "wait: pid %ld is not a child of this shell"
 msgstr "wait: pid %ld er ikke en underproces af denne skal"
 
-#: jobs.c:2893
+#: jobs.c:2884
 #, c-format
 msgid "wait_for: No record of process %ld"
 msgstr "wait_for: Ingen optegnelse af proces %ld"
 
-#: jobs.c:3236
+#: jobs.c:3223
 #, c-format
 msgid "wait_for_job: job %d is stopped"
 msgstr "wait_for_job: job %d er stoppet"
 
-#: jobs.c:3564
+#: jobs.c:3551
 #, fuzzy, c-format
 msgid "%s: no current jobs"
 msgstr "%s: intet sådant job"
 
-#: jobs.c:3571
+#: jobs.c:3558
 #, c-format
 msgid "%s: job has terminated"
 msgstr "%s: job er afbrudt"
 
-#: jobs.c:3580
+#: jobs.c:3567
 #, c-format
 msgid "%s: job %d already in background"
 msgstr "%s: job %d er allerede i baggrunden"
 
-#: jobs.c:3806
+#: jobs.c:3793
 msgid "waitchld: turning on WNOHANG to avoid indefinite block"
 msgstr ""
 
-#: jobs.c:4320
+#: jobs.c:4307
 #, c-format
 msgid "%s: line %d: "
 msgstr "%s: linje %d: "
 
-#: jobs.c:4334 nojobs.c:919
+#: jobs.c:4321 nojobs.c:921
 #, c-format
 msgid " (core dumped)"
 msgstr " (smed kerne)"
 
-#: jobs.c:4346 jobs.c:4359
+#: jobs.c:4333 jobs.c:4346
 #, c-format
 msgid "(wd now: %s)\n"
 msgstr "(wd nu: %s)\n"
 
-#: jobs.c:4391
+#: jobs.c:4378
 msgid "initialize_job_control: getpgrp failed"
 msgstr "initialize_job_control: getpgrp fejlede"
 
-#: jobs.c:4447
+#: jobs.c:4434
 #, fuzzy
 msgid "initialize_job_control: no job control in background"
 msgstr "initialize_job_control: linjedisciplin"
 
-#: jobs.c:4463
+#: jobs.c:4450
 msgid "initialize_job_control: line discipline"
 msgstr "initialize_job_control: linjedisciplin"
 
-#: jobs.c:4473
+#: jobs.c:4460
 msgid "initialize_job_control: setpgid"
 msgstr "initialize_job_control: setpgid"
 
-#: jobs.c:4494 jobs.c:4503
+#: jobs.c:4481 jobs.c:4490
 #, c-format
 msgid "cannot set terminal process group (%d)"
 msgstr "kan ikke indstille terminal-procesgruppe (%d)"
 
-#: jobs.c:4508
+#: jobs.c:4495
 msgid "no job control in this shell"
 msgstr "ingen jobkontrol i denne skal"
 
-#: lib/malloc/malloc.c:353
+#: lib/malloc/malloc.c:367
 #, c-format
 msgid "malloc: failed assertion: %s\n"
 msgstr "malloc: forfejlet hævdelse: %s\n"
 
-#: lib/malloc/malloc.c:369
+#: lib/malloc/malloc.c:383
 #, c-format
 msgid ""
 "\r\n"
@@ -1385,49 +1395,49 @@ msgstr ""
 "\r\n"
 "malloc: %s:%d: hævdelse forkludret\r\n"
 
-#: lib/malloc/malloc.c:370 lib/malloc/malloc.c:933
+#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941
 msgid "unknown"
 msgstr "ukendt"
 
-#: lib/malloc/malloc.c:882
+#: lib/malloc/malloc.c:892
 msgid "malloc: block on free list clobbered"
 msgstr "malloc: blok i fri liste tværet ud"
 
-#: lib/malloc/malloc.c:972
+#: lib/malloc/malloc.c:980
 msgid "free: called with already freed block argument"
 msgstr "free: kaldt med blokargument som allerede er fri"
 
-#: lib/malloc/malloc.c:975
+#: lib/malloc/malloc.c:983
 msgid "free: called with unallocated block argument"
 msgstr "free: kaldt med ikke-allokeret blokargument"
 
-#: lib/malloc/malloc.c:994
+#: lib/malloc/malloc.c:1001
 msgid "free: underflow detected; mh_nbytes out of range"
 msgstr "free: underløb detekteret, mh_nbytes uden for interval"
 
-#: lib/malloc/malloc.c:1001
+#: lib/malloc/malloc.c:1007
 #, fuzzy
 msgid "free: underflow detected; magic8 corrupted"
 msgstr "free: underløb detekteret, mh_nbytes uden for interval"
 
-#: lib/malloc/malloc.c:1009
+#: lib/malloc/malloc.c:1014
 msgid "free: start and end chunk sizes differ"
 msgstr "free: størrelse på start- og slut-bid afviger"
 
-#: lib/malloc/malloc.c:1119
+#: lib/malloc/malloc.c:1176
 msgid "realloc: called with unallocated block argument"
 msgstr "realloc: kaldt med ikke-allokeret blokargument"
 
-#: lib/malloc/malloc.c:1134
+#: lib/malloc/malloc.c:1191
 msgid "realloc: underflow detected; mh_nbytes out of range"
 msgstr "realloc: underløb detekteret, mh_nbytes uden for interval"
 
-#: lib/malloc/malloc.c:1141
+#: lib/malloc/malloc.c:1197
 #, fuzzy
 msgid "realloc: underflow detected; magic8 corrupted"
 msgstr "realloc: underløb detekteret, mh_nbytes uden for interval"
 
-#: lib/malloc/malloc.c:1150
+#: lib/malloc/malloc.c:1205
 msgid "realloc: start and end chunk sizes differ"
 msgstr "realloc: størrelse på start- og slut-bid afviger"
 
@@ -1469,22 +1479,22 @@ msgstr "%s: dårlig specifikation for netværkssti"
 msgid "network operations not supported"
 msgstr "netværksoperation ikke understøttet"
 
-#: locale.c:217
+#: locale.c:219
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s)"
 msgstr ""
 
-#: locale.c:219
+#: locale.c:221
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s): %s"
 msgstr ""
 
-#: locale.c:292
+#: locale.c:294
 #, fuzzy, c-format
 msgid "setlocale: %s: cannot change locale (%s)"
 msgstr "xrealloc: %s:%d: kan ikke allokere %lu bytes"
 
-#: locale.c:294
+#: locale.c:296
 #, fuzzy, c-format
 msgid "setlocale: %s: cannot change locale (%s): %s"
 msgstr "xrealloc: %s:%d: kan ikke allokere %lu bytes"
@@ -1502,144 +1512,144 @@ msgstr "Du har ny post i $_"
 msgid "The mail in %s has been read\n"
 msgstr "Posten i %s er blevet læst\n"
 
-#: make_cmd.c:317
+#: make_cmd.c:314
 msgid "syntax error: arithmetic expression required"
 msgstr "syntaksfejl: aritmetisk udtryk påkrævet"
 
-#: make_cmd.c:319
+#: make_cmd.c:316
 msgid "syntax error: `;' unexpected"
 msgstr "syntaksfejl: \";\" uventet"
 
-#: make_cmd.c:320
+#: make_cmd.c:317
 #, c-format
 msgid "syntax error: `((%s))'"
 msgstr "syntaksfejl: \"((%s))\""
 
-#: make_cmd.c:572
+#: make_cmd.c:569
 #, c-format
 msgid "make_here_document: bad instruction type %d"
 msgstr "make_here_document: dårlig instruktionstype %d"
 
-#: make_cmd.c:657
+#: make_cmd.c:668
 #, c-format
 msgid "here-document at line %d delimited by end-of-file (wanted `%s')"
 msgstr ""
 "here-document ved linje %d er adskilt af slut-på-linje (ønskede \"%s\")"
 
-#: make_cmd.c:756
+#: make_cmd.c:769
 #, c-format
 msgid "make_redirection: redirection instruction `%d' out of range"
 msgstr "make_direction: videresendelsesinstruktion \"%d\" uden for interval"
 
-#: parse.y:2393
+#: parse.y:2428
 #, c-format
 msgid ""
 "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line "
 "truncated"
 msgstr ""
 
-#: parse.y:2826
+#: parse.y:2921
 msgid "maximum here-document count exceeded"
 msgstr ""
 
-#: parse.y:3581 parse.y:3957 parse.y:4556
+#: parse.y:3684 parse.y:4244 parse.y:6148
 #, c-format
 msgid "unexpected EOF while looking for matching `%c'"
 msgstr "uventet EOF mens der ledtes efter samhørende \"%c\""
 
-#: parse.y:4696
+#: parse.y:4452
 msgid "unexpected EOF while looking for `]]'"
 msgstr "uventet EOF mens der ledtes efter \"]]\""
 
 # word   A sequence of characters considered as  a  single  unit  by  the
 #        shell.  Also known as a token.
 # Jeg har valgt udtryk
-#: parse.y:4701
+#: parse.y:4457
 #, c-format
 msgid "syntax error in conditional expression: unexpected token `%s'"
 msgstr "syntaksfejl i betingelsesudtryk: uventet element \"%s\""
 
-#: parse.y:4705
+#: parse.y:4461
 msgid "syntax error in conditional expression"
 msgstr "syntaksfejl i betingelsesudtryk"
 
 # word   A sequence of characters considered as  a  single  unit  by  the
 #        shell.  Also known as a token.
-#: parse.y:4783
+#: parse.y:4539
 #, c-format
 msgid "unexpected token `%s', expected `)'"
 msgstr "uventet element \"%s\", forventede \")\""
 
-#: parse.y:4787
+#: parse.y:4543
 msgid "expected `)'"
 msgstr "forventede \")\""
 
-#: parse.y:4815
+#: parse.y:4571
 #, c-format
 msgid "unexpected argument `%s' to conditional unary operator"
 msgstr "uventet argument \"%s\" til unær betingelsesoperator"
 
-#: parse.y:4819
+#: parse.y:4575
 msgid "unexpected argument to conditional unary operator"
 msgstr "uventet argument til unær betingelsesoperator"
 
-#: parse.y:4865
+#: parse.y:4621
 #, c-format
 msgid "unexpected token `%s', conditional binary operator expected"
 msgstr "uventet udtryk \"%s\", ventede binær betingelsesoperator"
 
-#: parse.y:4869
+#: parse.y:4625
 msgid "conditional binary operator expected"
 msgstr "ventedet binær betingelsesoperator"
 
-#: parse.y:4891
+#: parse.y:4647
 #, c-format
 msgid "unexpected argument `%s' to conditional binary operator"
 msgstr "uventet argument \"%s\" til binær betingelsesoperator"
 
-#: parse.y:4895
+#: parse.y:4651
 msgid "unexpected argument to conditional binary operator"
 msgstr "uventet argument til binær betingelsesoperator"
 
-#: parse.y:4906
+#: parse.y:4662
 #, c-format
 msgid "unexpected token `%c' in conditional command"
 msgstr "uventet udtryk \"%c\" i betingelseskommando"
 
-#: parse.y:4909
+#: parse.y:4665
 #, c-format
 msgid "unexpected token `%s' in conditional command"
 msgstr "uventet udtryk \"%s\" i betingelseskommando"
 
-#: parse.y:4913
+#: parse.y:4669
 #, c-format
 msgid "unexpected token %d in conditional command"
 msgstr "uventet udtryk \"%d\" i betingelseskommando"
 
-#: parse.y:6336
+#: parse.y:6118
 #, c-format
 msgid "syntax error near unexpected token `%s'"
 msgstr "syntaksfejl nær uventet udtryk \"%s\""
 
-#: parse.y:6355
+#: parse.y:6137
 #, c-format
 msgid "syntax error near `%s'"
 msgstr "syntaksfejl nær \"%s\""
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error: unexpected end of file"
 msgstr "syntaksfejl: uventet slutning på fil"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error"
 msgstr "syntaksfejl"
 
-#: parse.y:6428
+#: parse.y:6216
 #, c-format
 msgid "Use \"%s\" to leave the shell.\n"
 msgstr "Brug \"%s\" for at forlade skallen.\n"
 
-#: parse.y:6602
+#: parse.y:6394
 msgid "unexpected EOF while looking for matching `)'"
 msgstr "uventet EOF mens der ledtes efter samhørende \")\""
 
@@ -1677,96 +1687,96 @@ msgstr ""
 msgid "xtrace fd (%d) != fileno xtrace fp (%d)"
 msgstr ""
 
-#: print_cmd.c:1540
+#: print_cmd.c:1545
 #, c-format
 msgid "cprintf: `%c': invalid format character"
 msgstr "cprintf: \"%c\": ugyldigt formateringstegn"
 
-#: redir.c:149 redir.c:197
+#: redir.c:150 redir.c:198
 msgid "file descriptor out of range"
 msgstr "fil-deskriptor uden for interval"
 
-#: redir.c:204
+#: redir.c:205
 #, c-format
 msgid "%s: ambiguous redirect"
 msgstr "%s: tvetydig videresendelse"
 
-#: redir.c:208
+#: redir.c:209
 #, c-format
 msgid "%s: cannot overwrite existing file"
 msgstr "%s: kan ikke overskrive eksisterende fil"
 
-#: redir.c:213
+#: redir.c:214
 #, c-format
 msgid "%s: restricted: cannot redirect output"
 msgstr "%s: begrænset: kan ikke videresende output"
 
-#: redir.c:218
+#: redir.c:219
 #, c-format
 msgid "cannot create temp file for here-document: %s"
 msgstr "kan ikke danne midlertidig fil til here-dokument: %s"
 
-#: redir.c:222
+#: redir.c:223
 #, fuzzy, c-format
 msgid "%s: cannot assign fd to variable"
 msgstr "%s: kan ikke tildele liste til arrayelementer"
 
-#: redir.c:649
+#: redir.c:650
 msgid "/dev/(tcp|udp)/host/port not supported without networking"
 msgstr "/dev/(tcp|udp)/vært/port ikke understøttet uden netværk"
 
-#: redir.c:938 redir.c:1053 redir.c:1114 redir.c:1284
+#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303
 msgid "redirection error: cannot duplicate fd"
 msgstr "videresendelsesfejl: kan ikke duplikere fd"
 
-#: shell.c:347
+#: shell.c:353
 msgid "could not find /tmp, please create!"
 msgstr "kan ikke finde /tmp, opret venligst mappen!"
 
-#: shell.c:351
+#: shell.c:357
 msgid "/tmp must be a valid directory name"
 msgstr "/tmp skal være et gyldigt mappenavn"
 
-#: shell.c:804
+#: shell.c:826
 msgid "pretty-printing mode ignored in interactive shells"
 msgstr ""
 
-#: shell.c:948
+#: shell.c:972
 #, c-format
 msgid "%c%c: invalid option"
 msgstr "%c%c: ugyldigt tilvalg"
 
 # Har ladet nodelay stå, idet jeg gætter på at det er et navn
-#: shell.c:1319
+#: shell.c:1343
 #, fuzzy, c-format
 msgid "cannot set uid to %d: effective uid %d"
 msgstr "kan ikke nulstille \"nodelay\"-tilstand for fd %d"
 
 # Har ladet nodelay stå, idet jeg gætter på at det er et navn
-#: shell.c:1330
+#: shell.c:1354
 #, fuzzy, c-format
 msgid "cannot set gid to %d: effective gid %d"
 msgstr "kan ikke nulstille \"nodelay\"-tilstand for fd %d"
 
-#: shell.c:1518
+#: shell.c:1544
 msgid "cannot start debugger; debugging mode disabled"
 msgstr ""
 
-#: shell.c:1632
+#: shell.c:1658
 #, fuzzy, c-format
 msgid "%s: Is a directory"
 msgstr "%s: er en mappe"
 
-#: shell.c:1881
+#: shell.c:1907
 msgid "I have no name!"
 msgstr "Jeg har ikke noget navn!"
 
-#: shell.c:2035
+#: shell.c:2061
 #, c-format
 msgid "GNU bash, version %s-(%s)\n"
 msgstr "GNU bash, version %s-(%s)\n"
 
-#: shell.c:2036
+#: shell.c:2062
 #, c-format
 msgid ""
 "Usage:\t%s [GNU long option] [option] ...\n"
@@ -1775,327 +1785,327 @@ msgstr ""
 "Brug:\t%s [langt GNU-tilvalg] [tilvalg] ...\n"
 "\t%s [langt GNU-tilvalg] [tilvalg] skript-fil ...\n"
 
-#: shell.c:2038
+#: shell.c:2064
 msgid "GNU long options:\n"
 msgstr "Lange GNU-tilvalg:\n"
 
-#: shell.c:2042
+#: shell.c:2068
 msgid "Shell options:\n"
 msgstr "Skal-tilvalg:\n"
 
-#: shell.c:2043
+#: shell.c:2069
 #, fuzzy
 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n"
 msgstr "\t-irsD eller -c kommando eller -O shopt_option\t\t(kun programkald)\n"
 
-#: shell.c:2062
+#: shell.c:2088
 #, c-format
 msgid "\t-%s or -o option\n"
 msgstr "\tTilvalg -%s eller -o\n"
 
-#: shell.c:2068
+#: shell.c:2094
 #, c-format
 msgid "Type `%s -c \"help set\"' for more information about shell options.\n"
 msgstr ""
 "Skriv \"%s -c \"help set\"\" for at få mere information om skaltilvalg.\n"
 
-#: shell.c:2069
+#: shell.c:2095
 #, c-format
 msgid "Type `%s -c help' for more information about shell builtin commands.\n"
 msgstr ""
 "Skriv \"%s -c help\" for at få mere information om indbyggede "
 "skalkommandoer.\n"
 
-#: shell.c:2070
+#: shell.c:2096
 #, c-format
 msgid "Use the `bashbug' command to report bugs.\n"
 msgstr "Brug kommandoen \"bashbug\" til at rapportere fejl.\n"
 
-#: shell.c:2072
+#: shell.c:2098
 #, c-format
 msgid "bash home page: <http://www.gnu.org/software/bash>\n"
 msgstr ""
 
-#: shell.c:2073
+#: shell.c:2099
 #, c-format
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 msgstr ""
 
-#: sig.c:757
+#: sig.c:765
 #, c-format
 msgid "sigprocmask: %d: invalid operation"
 msgstr "sigprocmask: %d: ugyldig handling"
 
-#: siglist.c:47
+#: siglist.c:48
 msgid "Bogus signal"
 msgstr "Falsk signal"
 
-#: siglist.c:50
+#: siglist.c:51
 msgid "Hangup"
 msgstr "Læg på"
 
-#: siglist.c:54
+#: siglist.c:55
 msgid "Interrupt"
 msgstr "Afbryd"
 
-#: siglist.c:58
+#: siglist.c:59
 msgid "Quit"
 msgstr "Afslut"
 
-#: siglist.c:62
+#: siglist.c:63
 msgid "Illegal instruction"
 msgstr "Ugyldig instruktion"
 
-#: siglist.c:66
+#: siglist.c:67
 msgid "BPT trace/trap"
 msgstr "BPT-spor/fang"
 
-#: siglist.c:74
+#: siglist.c:75
 msgid "ABORT instruction"
 msgstr "ABORT-instruktion"
 
-#: siglist.c:78
+#: siglist.c:79
 msgid "EMT instruction"
 msgstr "EMT-instruktion"
 
-#: siglist.c:82
+#: siglist.c:83
 msgid "Floating point exception"
 msgstr "Kommatalsundtagelse"
 
-#: siglist.c:86
+#: siglist.c:87
 msgid "Killed"
 msgstr "Slået ihjel"
 
-#: siglist.c:90
+#: siglist.c:91
 msgid "Bus error"
 msgstr "Bus-fejl"
 
-#: siglist.c:94
+#: siglist.c:95
 msgid "Segmentation fault"
 msgstr "Segmenteringsfejl"
 
-#: siglist.c:98
+#: siglist.c:99
 msgid "Bad system call"
 msgstr "Ugyldigt systemkald"
 
-#: siglist.c:102
+#: siglist.c:103
 msgid "Broken pipe"
 msgstr "Ødelagt datakanal"
 
-#: siglist.c:106
+#: siglist.c:107
 msgid "Alarm clock"
 msgstr "Alarmklokke"
 
-#: siglist.c:110
+#: siglist.c:111
 msgid "Terminated"
 msgstr "Afsluttet"
 
-#: siglist.c:114
+#: siglist.c:115
 msgid "Urgent IO condition"
 msgstr "Presserende IO-forhold"
 
-#: siglist.c:118
+#: siglist.c:119
 msgid "Stopped (signal)"
 msgstr "Stoppet (signal)"
 
-#: siglist.c:126
+#: siglist.c:127
 msgid "Continue"
 msgstr "Fortsæt"
 
-#: siglist.c:134
+#: siglist.c:135
 msgid "Child death or stop"
 msgstr "Død eller stop af underproces"
 
-#: siglist.c:138
+#: siglist.c:139
 msgid "Stopped (tty input)"
 msgstr "Stoppet (tty-input)"
 
-#: siglist.c:142
+#: siglist.c:143
 msgid "Stopped (tty output)"
 msgstr "Stoppet (tty-output)"
 
-#: siglist.c:146
+#: siglist.c:147
 msgid "I/O ready"
 msgstr "I/O klar"
 
-#: siglist.c:150
+#: siglist.c:151
 msgid "CPU limit"
 msgstr "CPU-grænse"
 
-#: siglist.c:154
+#: siglist.c:155
 msgid "File limit"
 msgstr "Filgrænse"
 
-#: siglist.c:158
+#: siglist.c:159
 msgid "Alarm (virtual)"
 msgstr "Alarm (virtuel)"
 
-#: siglist.c:162
+#: siglist.c:163
 msgid "Alarm (profile)"
 msgstr "Alarm (profil)"
 
-#: siglist.c:166
+#: siglist.c:167
 msgid "Window changed"
 msgstr "Vindue ændret"
 
 # I fejlrapport for at få meningen
-#: siglist.c:170
+#: siglist.c:171
 msgid "Record lock"
 msgstr "Optag lås"
 
-#: siglist.c:174
+#: siglist.c:175
 msgid "User signal 1"
 msgstr "Brugersignal 1"
 
-#: siglist.c:178
+#: siglist.c:179
 msgid "User signal 2"
 msgstr "Brugersignal 2"
 
 # Fejlrapport
-#: siglist.c:182
+#: siglist.c:183
 msgid "HFT input data pending"
 msgstr "HFT-inputdata afventer"
 
-#: siglist.c:186
+#: siglist.c:187
 msgid "power failure imminent"
 msgstr "strømsvigt nært forestående"
 
-#: siglist.c:190
+#: siglist.c:191
 msgid "system crash imminent"
 msgstr "systemnedbrud nært forestående"
 
-#: siglist.c:194
+#: siglist.c:195
 msgid "migrate process to another CPU"
 msgstr "flyt proces til en anden CPU"
 
-#: siglist.c:198
+#: siglist.c:199
 msgid "programming error"
 msgstr "programmeringsfejl"
 
-#: siglist.c:202
+#: siglist.c:203
 msgid "HFT monitor mode granted"
 msgstr "HFT-skærmtilstand tildelt"
 
-#: siglist.c:206
+#: siglist.c:207
 msgid "HFT monitor mode retracted"
 msgstr "HFT-skærmtilstand trukket tilbage"
 
-#: siglist.c:210
+#: siglist.c:211
 msgid "HFT sound sequence has completed"
 msgstr "HFT-lydsekvens er afsluttet"
 
-#: siglist.c:214
+#: siglist.c:215
 msgid "Information request"
 msgstr "Informationsforespørgsel"
 
-#: siglist.c:222 siglist.c:224
+#: siglist.c:223 siglist.c:225
 #, c-format
 msgid "Unknown Signal #%d"
 msgstr "Ukendt signal #%d"
 
-#: subst.c:1476 subst.c:1666
+#: subst.c:1480 subst.c:1670
 #, c-format
 msgid "bad substitution: no closing `%s' in %s"
 msgstr "dårlig udskiftning: ingen lukkende \"%s\" i %s"
 
-#: subst.c:3281
+#: subst.c:3307
 #, c-format
 msgid "%s: cannot assign list to array member"
 msgstr "%s: kan ikke tildele liste til arrayelementer"
 
-#: subst.c:5910 subst.c:5926
+#: subst.c:6048 subst.c:6064
 msgid "cannot make pipe for process substitution"
 msgstr "kan ikke lave datakanal (pipe) til procesudskiftning"
 
-#: subst.c:5985
+#: subst.c:6124
 msgid "cannot make child for process substitution"
 msgstr "kan ikke danne underproces til procesudskiftning"
 
-#: subst.c:6059
+#: subst.c:6198
 #, c-format
 msgid "cannot open named pipe %s for reading"
 msgstr "kan ikke åbne navngiven datakanal (pipe) %s til læsning"
 
-#: subst.c:6061
+#: subst.c:6200
 #, c-format
 msgid "cannot open named pipe %s for writing"
 msgstr "kan ikke åbne navngiven datakanal (pipe) %s til skrivning"
 
-#: subst.c:6084
+#: subst.c:6223
 #, c-format
 msgid "cannot duplicate named pipe %s as fd %d"
 msgstr "kan ikke duplikere navngiven datakanal (pipe) %s som %d"
 
-#: subst.c:6213
+#: subst.c:6370
 #, fuzzy
 msgid "command substitution: ignored null byte in input"
 msgstr "dårlig udskiftning: ingen lukkende \"`\" i %s"
 
-#: subst.c:6353
+#: subst.c:6533
 msgid "cannot make pipe for command substitution"
 msgstr "kan ikke danne datakanal (pipe) til kommandoudskiftning"
 
-#: subst.c:6397
+#: subst.c:6580
 msgid "cannot make child for command substitution"
 msgstr "kan ikke danne underproces til kommandoudskiftning"
 
-#: subst.c:6423
+#: subst.c:6613
 msgid "command_substitute: cannot duplicate pipe as fd 1"
 msgstr "command_substitute: kan ikke duplikere datakanal (pipe) som fd 1"
 
-#: subst.c:6883 subst.c:9952
+#: subst.c:7082 subst.c:10252
 #, fuzzy, c-format
 msgid "%s: invalid variable name for name reference"
 msgstr "%d: ugyldig filbeskrivelse: %s"
 
 # -c     Specify the number of lines read between each call to callback.
-#: subst.c:6979 subst.c:6997 subst.c:7169
+#: subst.c:7178 subst.c:7196 subst.c:7369
 #, fuzzy, c-format
 msgid "%s: invalid indirect expansion"
 msgstr "%s: ugyldigt antal linjer"
 
-#: subst.c:7013 subst.c:7177
+#: subst.c:7212 subst.c:7377
 #, fuzzy, c-format
 msgid "%s: invalid variable name"
 msgstr "\"%s\": ugyldigt tastetildelingsnavn"
 
-#: subst.c:7256
+#: subst.c:7478
 #, fuzzy, c-format
 msgid "%s: parameter not set"
 msgstr "%s: parameter null eller ikke indstillet"
 
-#: subst.c:7258
+#: subst.c:7480
 #, c-format
 msgid "%s: parameter null or not set"
 msgstr "%s: parameter null eller ikke indstillet"
 
-#: subst.c:7503 subst.c:7518
+#: subst.c:7727 subst.c:7742
 #, c-format
 msgid "%s: substring expression < 0"
 msgstr "%s: understreng-udtryk < 0"
 
-#: subst.c:9281 subst.c:9302
+#: subst.c:9560 subst.c:9587
 #, c-format
 msgid "%s: bad substitution"
 msgstr "%s: dårlig udskiftning"
 
-#: subst.c:9390
+#: subst.c:9678
 #, c-format
 msgid "$%s: cannot assign in this way"
 msgstr "$%s: kan ikke tildele på denne måde"
 
-#: subst.c:9814
+#: subst.c:10111
 msgid ""
 "future versions of the shell will force evaluation as an arithmetic "
 "substitution"
 msgstr ""
 
-#: subst.c:10367
+#: subst.c:10795
 #, c-format
 msgid "bad substitution: no closing \"`\" in %s"
 msgstr "dårlig udskiftning: ingen lukkende \"`\" i %s"
 
-#: subst.c:11434
+#: subst.c:11874
 #, c-format
 msgid "no match: %s"
 msgstr "intet match: %s"
@@ -2118,21 +2128,21 @@ msgstr "\")\" forventet"
 msgid "`)' expected, found %s"
 msgstr "\")\" forventet, fandt %s"
 
-#: test.c:466 test.c:799
+#: test.c:469 test.c:814
 #, c-format
 msgid "%s: binary operator expected"
 msgstr "%s: binær operator forventet"
 
-#: test.c:756 test.c:759
+#: test.c:771 test.c:774
 #, c-format
 msgid "%s: unary operator expected"
 msgstr "%s: unær operator forventet"
 
-#: test.c:881
+#: test.c:896
 msgid "missing `]'"
 msgstr "manglende \"]\""
 
-#: test.c:899
+#: test.c:914
 #, fuzzy, c-format
 msgid "syntax error: `%s' unexpected"
 msgstr "syntaksfejl: \";\" uventet"
@@ -2141,17 +2151,17 @@ msgstr "syntaksfejl: \";\" uventet"
 msgid "invalid signal number"
 msgstr "ugyldigt signalnummer"
 
-#: trap.c:325
+#: trap.c:323
 #, c-format
 msgid "trap handler: maximum trap handler level exceeded (%d)"
 msgstr ""
 
-#: trap.c:414
+#: trap.c:412
 #, c-format
 msgid "run_pending_traps: bad value in trap_list[%d]: %p"
 msgstr "run_pending_traps: dårlig værdi i trap_list[%d]: %p"
 
-#: trap.c:418
+#: trap.c:416
 #, c-format
 msgid ""
 "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
@@ -2159,85 +2169,90 @@ msgstr ""
 "run_pending_traps: signalhåndtering er SIG_DFL, gensender %d (%s) til mig "
 "selv"
 
-#: trap.c:487
+#: trap.c:509
 #, c-format
 msgid "trap_handler: bad signal %d"
 msgstr "trap_handler: ugyldigt signal %d"
 
-#: variables.c:421
+#: variables.c:424
 #, c-format
 msgid "error importing function definition for `%s'"
 msgstr "fejl under importering af funktionsdefinition for \"%s\""
 
-#: variables.c:833
+#: variables.c:838
 #, c-format
 msgid "shell level (%d) too high, resetting to 1"
 msgstr "skalniveau (%d) for højt, genindstiller til 1"
 
-#: variables.c:2674
+#: variables.c:2642
 msgid "make_local_variable: no function context at current scope"
 msgstr "make_local_variable: ingen funktionskontekst ved nuværende navneområde"
 
-#: variables.c:2693
+#: variables.c:2661
 #, fuzzy, c-format
 msgid "%s: variable may not be assigned value"
 msgstr "%s: kan ikke tildele liste til arrayelementer"
 
-#: variables.c:3475
+#: variables.c:2818 variables.c:2874
+#, c-format
+msgid "%s: cannot inherit value from incompatible type"
+msgstr ""
+
+#: variables.c:3459
 #, c-format
 msgid "%s: assigning integer to name reference"
 msgstr ""
 
-#: variables.c:4404
+#: variables.c:4390
 msgid "all_local_variables: no function context at current scope"
 msgstr "all_local_variables: ingen funktionskontekst ved nuværende navneområde"
 
-#: variables.c:4771
+#: variables.c:4757
 #, fuzzy, c-format
 msgid "%s has null exportstr"
 msgstr "%s: parameter null eller ikke indstillet"
 
-#: variables.c:4776 variables.c:4785
+#: variables.c:4762 variables.c:4771
 #, c-format
 msgid "invalid character %d in exportstr for %s"
 msgstr "ugyldigt tegn %d i exportstr for %s"
 
-#: variables.c:4791
+#: variables.c:4777
 #, c-format
 msgid "no `=' in exportstr for %s"
 msgstr "intet \"=\" i exportstr for %s"
 
-#: variables.c:5331
+#: variables.c:5317
 msgid "pop_var_context: head of shell_variables not a function context"
 msgstr "pop_var_context: hoved af shell_variables er ikke en funktionskontekst"
 
-#: variables.c:5344
+#: variables.c:5330
 msgid "pop_var_context: no global_variables context"
 msgstr "pop_var_context: ingen global_variables-kontekst"
 
-#: variables.c:5424
+#: variables.c:5410
 msgid "pop_scope: head of shell_variables not a temporary environment scope"
 msgstr ""
 "pop_scope: hoved af shell_variables er ikke et midlertidigt miljønavnerum"
 
-#: variables.c:6387
+#: variables.c:6400
 #, fuzzy, c-format
 msgid "%s: %s: cannot open as FILE"
 msgstr "%s: kan ikke åbne: %s"
 
-#: variables.c:6392
+#: variables.c:6405
 #, fuzzy, c-format
 msgid "%s: %s: invalid value for trace file descriptor"
 msgstr "%d: ugyldig filbeskrivelse: %s"
 
-#: variables.c:6437
+#: variables.c:6450
 #, fuzzy, c-format
 msgid "%s: %s: compatibility value out of range"
 msgstr "%s: %s udenfor rækkevidde"
 
 #: version.c:46 version2.c:46
 #, fuzzy
-msgid "Copyright (C) 2020 Free Software Foundation, Inc."
+msgid "Copyright (C) 2022 Free Software Foundation, Inc."
 msgstr "Ophavsret (C) 2009 Free Software Foundation, Inc."
 
 #: version.c:47 version2.c:47
@@ -2332,12 +2347,16 @@ msgstr "command [-pVv] kommando [arg ...]"
 
 #: builtins.c:78
 #, fuzzy
-msgid "declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]"
+msgid ""
+"declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] "
+"[name ...]"
 msgstr "declare [-aAfFilrtux] [-p] [navn[=værdi] ...]"
 
 #: builtins.c:80
 #, fuzzy
-msgid "typeset [-aAfFgiIlnrtux] [-p] name[=value] ..."
+msgid ""
+"typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] "
+"[name ...]"
 msgstr "typeset [-aAfFilrtux] [-p] navn[=værdi] ..."
 
 #: builtins.c:82
@@ -2445,7 +2464,7 @@ msgstr "return [n]"
 
 #: builtins.c:142
 #, fuzzy
-msgid "set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]"
+msgid "set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]"
 msgstr "set [--abefhkmnptuvxBCHP] [-o tilvalgsnavn] [arg ...]"
 
 #: builtins.c:144
@@ -2496,7 +2515,7 @@ msgstr "type [-afptP] navn [navn ...]"
 
 #: builtins.c:171
 #, fuzzy
-msgid "ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]"
+msgid "ulimit [-SHabcdefiklmnpqrstuvxPRT] [limit]"
 msgstr "ulimit [-SHacdefilmnpqrstuvx] [grænse]"
 
 #: builtins.c:174
@@ -2542,11 +2561,13 @@ msgstr ""
 "[ else KOMMANDOER; ] fi"
 
 #: builtins.c:196
-msgid "while COMMANDS; do COMMANDS; done"
+#, fuzzy
+msgid "while COMMANDS; do COMMANDS-2; done"
 msgstr "while KOMMANDOER; do KOMMANDOER; done"
 
 #: builtins.c:198
-msgid "until COMMANDS; do COMMANDS; done"
+#, fuzzy
+msgid "until COMMANDS; do COMMANDS-2; done"
 msgstr "until KOMMANDOER; do KOMMANDOER; done"
 
 #: builtins.c:200
@@ -3986,7 +4007,9 @@ msgid ""
 "    word to the second NAME, and so on, with any leftover words assigned to\n"
 "    the last NAME.  Only the characters found in $IFS are recognized as "
 "word\n"
-"    delimiters.\n"
+"    delimiters. By default, the backslash character escapes delimiter "
+"characters\n"
+"    and newline.\n"
 "    \n"
 "    If no NAMEs are supplied, the line read is stored in the REPLY "
 "variable.\n"
@@ -4071,7 +4094,7 @@ msgstr ""
 "indtræffer,\n"
 "    eller hvis en ugyldig fildeskriptor gives som argument til -u."
 
-#: builtins.c:1041
+#: builtins.c:1042
 msgid ""
 "Return from a shell function.\n"
 "    \n"
@@ -4096,7 +4119,7 @@ msgstr ""
 "en\n"
 "    funktion eller et skript."
 
-#: builtins.c:1054
+#: builtins.c:1055
 #, fuzzy
 msgid ""
 "Set or unset values of shell options and positional parameters.\n"
@@ -4281,7 +4304,7 @@ msgstr ""
 "    Afslutningsstatus:\n"
 "    Returnerer succes med mindre der angives et ugyldigt tilvalg."
 
-#: builtins.c:1139
+#: builtins.c:1140
 #, fuzzy
 msgid ""
 "Unset values and attributes of shell variables and functions.\n"
@@ -4323,7 +4346,7 @@ msgstr ""
 "et\n"
 "    givent navn er skrivebeskyttet."
 
-#: builtins.c:1161
+#: builtins.c:1162
 msgid ""
 "Set export attribute for shell variables.\n"
 "    \n"
@@ -4359,7 +4382,7 @@ msgstr ""
 "    Returnerer succes med mindre der angives et ugyldigt tilvalg eller hvis\n"
 "    NAVN er ugyldig."
 
-#: builtins.c:1180
+#: builtins.c:1181
 #, fuzzy
 msgid ""
 "Mark shell variables as unchangeable.\n"
@@ -4399,7 +4422,7 @@ msgstr ""
 "    Returnerer succes med mindre der angives et ugyldigt tilvalg eller hvis\n"
 "    NAVN er ugyldigt."
 
-#: builtins.c:1202
+#: builtins.c:1203
 msgid ""
 "Shift positional parameters.\n"
 "    \n"
@@ -4418,7 +4441,7 @@ msgstr ""
 "    Afslutningsstatus:\n"
 "    Returnerer succes med mindre N er negativ eller større end $#."
 
-#: builtins.c:1214 builtins.c:1229
+#: builtins.c:1215 builtins.c:1230
 msgid ""
 "Execute commands from a file in the current shell.\n"
 "    \n"
@@ -4444,7 +4467,7 @@ msgstr ""
 "hvis\n"
 "    FILNAVN ikke kan læses."
 
-#: builtins.c:1245
+#: builtins.c:1246
 msgid ""
 "Suspend shell execution.\n"
 "    \n"
@@ -4471,7 +4494,7 @@ msgstr ""
 "der\n"
 "    opstår en fejl."
 
-#: builtins.c:1261
+#: builtins.c:1262
 #, fuzzy
 msgid ""
 "Evaluate conditional expression.\n"
@@ -4633,7 +4656,7 @@ msgstr ""
 "    Returnerer succes hvis UDTRYK evalueres til sand, og fejler hvis UDTRYK\n"
 "    evalueres til falsk eller hvis der gives et ugyldigt argument."
 
-#: builtins.c:1343
+#: builtins.c:1344
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -4646,7 +4669,7 @@ msgstr ""
 "sidste\n"
 "    argument skal være \"]\", for at den passer til den åbnende \"[\"."
 
-#: builtins.c:1352
+#: builtins.c:1353
 msgid ""
 "Display process times.\n"
 "    \n"
@@ -4666,7 +4689,7 @@ msgstr ""
 "    Afslutningsstatus:\n"
 "    Lykkes altid."
 
-#: builtins.c:1364
+#: builtins.c:1365
 #, fuzzy
 msgid ""
 "Trap signals and other events.\n"
@@ -4747,7 +4770,7 @@ msgstr ""
 "angivet\n"
 "    et ugyldigt tilvalg."
 
-#: builtins.c:1400
+#: builtins.c:1401
 #, fuzzy
 msgid ""
 "Display information about command type.\n"
@@ -4810,7 +4833,7 @@ msgstr ""
 "enkelt\n"
 "    ikke findes."
 
-#: builtins.c:1431
+#: builtins.c:1432
 #, fuzzy
 msgid ""
 "Modify shell resource limits.\n"
@@ -4907,7 +4930,7 @@ msgstr ""
 "der\n"
 "    opstår en fejl."
 
-#: builtins.c:1482
+#: builtins.c:1483
 msgid ""
 "Display or set file mode mask.\n"
 "    \n"
@@ -4945,7 +4968,7 @@ msgstr ""
 "ugyldigt\n"
 "    tilvalg angives."
 
-#: builtins.c:1502
+#: builtins.c:1503
 #, fuzzy
 msgid ""
 "Wait for job completion and return exit status.\n"
@@ -4992,7 +5015,7 @@ msgstr ""
 "angives\n"
 "    et ugyldigt tilvalg."
 
-#: builtins.c:1533
+#: builtins.c:1534
 #, fuzzy
 msgid ""
 "Wait for process completion and return exit status.\n"
@@ -5018,7 +5041,7 @@ msgstr ""
 "    Returnerer statussen for ID, fejler hvis ID er ugyldig eller hvis der\n"
 "    angives et ugyldigt tilvalg."
 
-#: builtins.c:1548
+#: builtins.c:1549
 msgid ""
 "Execute commands for each member in a list.\n"
 "    \n"
@@ -5043,7 +5066,7 @@ msgstr ""
 "    Afslutningsstatus:\n"
 "    Returnerer statussen for den sidst eksekverede kommando."
 
-#: builtins.c:1562
+#: builtins.c:1563
 msgid ""
 "Arithmetic for loop.\n"
 "    \n"
@@ -5073,7 +5096,7 @@ msgstr ""
 "    Afslutningsstatus:\n"
 "    Returnerer afslutningsstatussen for den sidst eksekverede kommando."
 
-#: builtins.c:1580
+#: builtins.c:1581
 msgid ""
 "Select words from a list and execute commands.\n"
 "    \n"
@@ -5111,7 +5134,7 @@ msgstr ""
 "    Afslutningsstatus:\n"
 "    Returnerer statussen fra den sidst eksekverede kommando."
 
-#: builtins.c:1601
+#: builtins.c:1602
 msgid ""
 "Report time consumed by pipeline's execution.\n"
 "    \n"
@@ -5140,7 +5163,7 @@ msgstr ""
 "    Afslutningsstatus:\n"
 "    Afslutningsstatus er afslutningsstatus for DATAKANAL."
 
-#: builtins.c:1618
+#: builtins.c:1619
 msgid ""
 "Execute commands based on pattern matching.\n"
 "    \n"
@@ -5159,7 +5182,7 @@ msgstr ""
 "    Afslutningsstatus:\n"
 "    Returnerer statussen fra den sidst eksekverede kommando."
 
-#: builtins.c:1630
+#: builtins.c:1631
 msgid ""
 "Execute commands based on conditional.\n"
 "    \n"
@@ -5198,12 +5221,14 @@ msgstr ""
 "    Afslutningsstatus:\n"
 "    Returnerer statussen fra den sidst eksekverede kommando."
 
-#: builtins.c:1647
+#: builtins.c:1648
+#, fuzzy
 msgid ""
 "Execute commands as long as a test succeeds.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `while' COMMANDS has an exit status of zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS "
+"has\n"
+"    an exit status of zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
@@ -5216,12 +5241,14 @@ msgstr ""
 "    Afslutningsstatus:\n"
 "    Returnerer statussen fra den sidst eksekverede kommando."
 
-#: builtins.c:1659
+#: builtins.c:1660
+#, fuzzy
 msgid ""
 "Execute commands as long as a test does not succeed.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `until' COMMANDS has an exit status which is not zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS "
+"has\n"
+"    an exit status which is not zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
@@ -5234,7 +5261,7 @@ msgstr ""
 "    Afslutningsstatus:\n"
 "    Returnerer statussen fra den sidst eksekverede kommando."
 
-#: builtins.c:1671
+#: builtins.c:1672
 #, fuzzy
 msgid ""
 "Create a coprocess named NAME.\n"
@@ -5258,7 +5285,7 @@ msgstr ""
 "    Afslutningsstatus:\n"
 "    Returnerer afslutningsstatussen for KOMMANDO."
 
-#: builtins.c:1685
+#: builtins.c:1686
 msgid ""
 "Define shell function.\n"
 "    \n"
@@ -5282,7 +5309,7 @@ msgstr ""
 "    Afslutningsstatus:\n"
 "    Returnerer succes med mindre NAVN er skrivebeskyttet."
 
-#: builtins.c:1699
+#: builtins.c:1700
 msgid ""
 "Group commands as a unit.\n"
 "    \n"
@@ -5300,7 +5327,7 @@ msgstr ""
 "    Afslutningsstatus:\n"
 "    Returnerer statussen fra den sidst eksekverede kommando."
 
-#: builtins.c:1711
+#: builtins.c:1712
 msgid ""
 "Resume job in foreground.\n"
 "    \n"
@@ -5327,7 +5354,7 @@ msgstr ""
 "    Afslutningsstatus:\n"
 "    Returnerer statussen af det genoptagede job."
 
-#: builtins.c:1726
+#: builtins.c:1727
 #, fuzzy
 msgid ""
 "Evaluate arithmetic expression.\n"
@@ -5347,7 +5374,7 @@ msgstr ""
 "    Afslutningsstatus:\n"
 "    Returnerer 1 hvis udtrykket evalueres til 0, ellers returneres 0."
 
-#: builtins.c:1738
+#: builtins.c:1739
 msgid ""
 "Execute conditional command.\n"
 "    \n"
@@ -5402,7 +5429,7 @@ msgstr ""
 "    Afslutningsstatus:\n"
 "    0 eller 1 afhængigt af udtrykkets værdi."
 
-#: builtins.c:1764
+#: builtins.c:1765
 msgid ""
 "Common shell variable names and usage.\n"
 "    \n"
@@ -5515,7 +5542,7 @@ msgstr ""
 "    HISTIGNORE\tEn kolonsepareret liste af mønstre som bliver brugt til at\n"
 "    \t\tbestemme hvilke kommandoer der skal gemmes i historikken.\n"
 
-#: builtins.c:1821
+#: builtins.c:1822
 #, fuzzy
 msgid ""
 "Add directories to stack.\n"
@@ -5575,7 +5602,7 @@ msgstr ""
 "hvis\n"
 "      mappeskiftet mislykkes."
 
-#: builtins.c:1855
+#: builtins.c:1856
 #, fuzzy
 msgid ""
 "Remove directories from stack.\n"
@@ -5630,7 +5657,7 @@ msgstr ""
 "hvis\n"
 "      mappeskiftet mislykkes."
 
-#: builtins.c:1885
+#: builtins.c:1886
 #, fuzzy
 msgid ""
 "Display directory stack.\n"
@@ -5685,7 +5712,7 @@ msgstr ""
 "der\n"
 "    opstår en fejl."
 
-#: builtins.c:1916
+#: builtins.c:1917
 #, fuzzy
 msgid ""
 "Set and unset shell options.\n"
@@ -5726,7 +5753,7 @@ msgstr ""
 "et\n"
 "    ugyldigt tilvalg eller hvis INDSTNAVN er deaktiveret."
 
-#: builtins.c:1937
+#: builtins.c:1938
 #, fuzzy
 msgid ""
 "Formats and prints ARGUMENTS under control of the FORMAT.\n"
@@ -5750,6 +5777,8 @@ msgid ""
 "    \n"
 "      %b\texpand backslash escape sequences in the corresponding argument\n"
 "      %q\tquote the argument in a way that can be reused as shell input\n"
+"      %Q\tlike %q, but apply any precision to the unquoted argument before\n"
+"    \t\tquoting\n"
 "      %(fmt)T\toutput the date-time string resulting from using FMT as a "
 "format\n"
 "    \t        string for strftime(3)\n"
@@ -5793,7 +5822,7 @@ msgstr ""
 "hvis\n"
 "    der opstår en skrive- eller tildelingsfejl."
 
-#: builtins.c:1971
+#: builtins.c:1974
 #, fuzzy
 msgid ""
 "Specify how arguments are to be completed by Readline.\n"
@@ -5845,7 +5874,7 @@ msgstr ""
 "hvis\n"
 "    der opstår en fejl."
 
-#: builtins.c:2001
+#: builtins.c:2004
 msgid ""
 "Display possible completions depending on the options.\n"
 "    \n"
@@ -5870,7 +5899,7 @@ msgstr ""
 "    der opstår en fejl."
 
 # Fejlrapport
-#: builtins.c:2016
+#: builtins.c:2019
 #, fuzzy
 msgid ""
 "Modify or display completion options.\n"
@@ -5933,7 +5962,7 @@ msgstr ""
 "hvis\n"
 "    der ikke er defineret en fuldførselsspecifikation for NAVN."
 
-#: builtins.c:2047
+#: builtins.c:2050
 #, fuzzy
 msgid ""
 "Read lines from the standard input into an indexed array variable.\n"
@@ -6012,7 +6041,7 @@ msgstr ""
 "hvis\n"
 "    ARRAY er skrivebeskyttet."
 
-#: builtins.c:2083
+#: builtins.c:2086
 msgid ""
 "Read lines from a file into an array variable.\n"
 "    \n"
@@ -6022,6 +6051,10 @@ msgstr ""
 "    \n"
 "    Et synonym for \"mapfile\"."
 
+#, c-format
+#~ msgid "%s: invalid associative array key"
+#~ msgstr "%s: ugyldig nøgle til associativt array"
+
 #, fuzzy
 #~ msgid "Copyright (C) 2019 Free Software Foundation, Inc."
 #~ msgstr "Ophavsret (C) 2009 Free Software Foundation, Inc."
index 7a31bc581436aa2ead234c0a866d79a02dbd85dc..388ad49eb559986846a748a5e6dda019c0ad6d92 100644 (file)
Binary files a/po/de.gmo and b/po/de.gmo differ
index 64d676fea6baf89a16facf361befd8ca8f697480..c73aef46feef4c6a528ffa516488dd32b8029e92 100644 (file)
--- a/po/de.po
+++ b/po/de.po
@@ -2,13 +2,14 @@
 # Copyright (C) 2019 Free Software Foundation, Inc.
 # This file is distributed under the same license as the bash package.
 # Roland Illig <roland.illig@gmx.de> 2019
-# Nils Naumann <nau@gmx.net>, 1996-2019.
+# Nils Naumann <nau@gmx.net>, 1996-2021.
+#
 msgid ""
 msgstr ""
-"Project-Id-Version: bash 5.0\n"
+"Project-Id-Version: bash 5.1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-11-28 12:51-0500\n"
-"PO-Revision-Date: 2019-10-21 20:58+0200\n"
+"POT-Creation-Date: 2022-01-11 14:50-0500\n"
+"PO-Revision-Date: 2021-12-29 22:04+0100\n"
 "Last-Translator: Nils Naumann <nau@gmx.net>\n"
 "Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
 "Language: de\n"
@@ -16,67 +17,62 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "X-Bugs: Report translation errors to the Language-Team address.\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
 
 #: arrayfunc.c:66
 msgid "bad array subscript"
 msgstr "Falscher Feldindex."
 
-#: arrayfunc.c:421 builtins/declare.def:638 variables.c:2274 variables.c:2300
-#: variables.c:3133
+#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268
+#: variables.c:3101
 #, c-format
 msgid "%s: removing nameref attribute"
 msgstr "%s: Entferne das Nameref Attribut."
 
-#: arrayfunc.c:446 builtins/declare.def:851
+#: arrayfunc.c:496 builtins/declare.def:868
 #, c-format
 msgid "%s: cannot convert indexed to associative array"
 msgstr ""
 "%s: Das indizierte Array kann in kein assoziatives Array umgewandelt werden."
 
-#: arrayfunc.c:700
-#, c-format
-msgid "%s: invalid associative array key"
-msgstr "%s: Ungültiger Schlüssel für das assoziative Array."
-
-#: arrayfunc.c:702
+#: arrayfunc.c:777
 #, c-format
 msgid "%s: cannot assign to non-numeric index"
 msgstr "%s: Das Zuweisen auf einen nicht-numerischen Index ist nicht möglich."
 
-#: arrayfunc.c:747
+#: arrayfunc.c:822
 #, c-format
 msgid "%s: %s: must use subscript when assigning associative array"
 msgstr ""
 "%s: %s: Ein Feldindex wird zum Zuweisen eines assoziativen Arrays benötigt."
 
-#: bashhist.c:452
+#: bashhist.c:455
 #, c-format
 msgid "%s: cannot create: %s"
 msgstr "%s: Kann die Datei %s nicht erzeugen."
 
-#: bashline.c:4310
+#: bashline.c:4479
 msgid "bash_execute_unix_command: cannot find keymap for command"
 msgstr ""
 "bash_execute_unix_command: Kann nicht die Tastenzuordnung für das Kommando "
 "finden."
 
-#: bashline.c:4459
+#: bashline.c:4637
 #, c-format
 msgid "%s: first non-whitespace character is not `\"'"
 msgstr " %s: Das erste Zeichen ist nicht `\\'."
 
-#: bashline.c:4488
+#: bashline.c:4666
 #, c-format
 msgid "no closing `%c' in %s"
 msgstr "fehlende schließende `%c' in %s."
 
-#: bashline.c:4519
+#: bashline.c:4697
 #, c-format
 msgid "%s: missing colon separator"
 msgstr "%s: Fehlender Doppelpunkt."
 
-#: bashline.c:4555
+#: bashline.c:4733
 #, fuzzy, c-format
 msgid "`%s': cannot unbind in command keymap"
 msgstr "»%s«: Bindung kann nicht gelöst werden."
@@ -96,7 +92,7 @@ msgstr "Klammererweiterung: Konnte keinen Speicher für %u Elemente zuweisen."
 msgid "brace expansion: failed to allocate memory for `%s'"
 msgstr "Klammererweiterung: Konnte keinen Speicher für »%s« zuweisen."
 
-#: builtins/alias.def:131 variables.c:1844
+#: builtins/alias.def:131 variables.c:1817
 #, c-format
 msgid "`%s': invalid alias name"
 msgstr "»%s«: Ungültiger Aliasname."
@@ -145,7 +141,6 @@ msgstr "nur in einer for-, while- oder until-Schleife sinnvoll."
 
 # caller
 #: builtins/caller.def:136
-#, fuzzy
 msgid ""
 "Returns the context of the current subroutine call.\n"
 "    \n"
@@ -163,18 +158,13 @@ msgstr ""
 "    Mit diesen Informationen kann ein Stacktrace erzeugt werden.\n"
 "\n"
 "    Das Argument gibt die angezeigte Position im Funktionsaufrufstapel an,\n"
-"    wobei 0 der aktuelle Funktionsaufruf ist.\n"
-"\n"
-"    Rückgabewert:\n"
-"    Ist ungleich 0 wenn keine Shellfunktion ausgeführt wird oder das "
-"Argument\n"
-"    ungültig ist, sonst 0."
+"    wobei 0 der aktuelle Funktionsaufruf ist."
 
 #: builtins/cd.def:327
 msgid "HOME not set"
 msgstr "HOME ist nicht zugewiesen."
 
-#: builtins/cd.def:335 builtins/common.c:161 test.c:901
+#: builtins/cd.def:335 builtins/common.c:161 test.c:916
 msgid "too many arguments"
 msgstr "Zu viele Argumente."
 
@@ -202,7 +192,7 @@ msgstr "Warnung: "
 msgid "%s: usage: "
 msgstr "%s: Aufruf: "
 
-#: builtins/common.c:193 shell.c:516 shell.c:844
+#: builtins/common.c:193 shell.c:524 shell.c:866
 #, c-format
 msgid "%s: option requires an argument"
 msgstr "%s: Die Option erfordert ein Argument."
@@ -217,7 +207,7 @@ msgstr "%s: Ein numerischer Parameter ist erforderlich."
 msgid "%s: not found"
 msgstr "%s: Nicht gefunden."
 
-#: builtins/common.c:216 shell.c:857
+#: builtins/common.c:216 shell.c:879
 #, c-format
 msgid "%s: invalid option"
 msgstr "%s: Ungültige Option."
@@ -227,7 +217,7 @@ msgstr "%s: Ungültige Option."
 msgid "%s: invalid option name"
 msgstr "%s: Ungültiger Optionsname."
 
-#: builtins/common.c:230 execute_cmd.c:2373 general.c:368 general.c:373
+#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373
 #, c-format
 msgid "`%s': not a valid identifier"
 msgstr "»%s«: Ist kein gültiger Bezeichner."
@@ -240,7 +230,7 @@ msgstr "Ungültige Oktalzahl."
 msgid "invalid hex number"
 msgstr "Ungültige hexadezimale Zahl."
 
-#: builtins/common.c:244 expr.c:1569
+#: builtins/common.c:244 expr.c:1574
 msgid "invalid number"
 msgstr "Ungültige Zahl."
 
@@ -254,88 +244,93 @@ msgstr "%s: Ungültige Signalbezeichnung."
 msgid "`%s': not a pid or valid job spec"
 msgstr "»%s«: Ist keine gültige Prozess-ID oder Jobbezeichnung."
 
-#: builtins/common.c:266 error.c:510
+#: builtins/common.c:266 error.c:536
 #, c-format
 msgid "%s: readonly variable"
 msgstr "%s: Schreibgeschützte Variable."
 
-#: builtins/common.c:274
+#: builtins/common.c:273
+#, fuzzy, c-format
+msgid "%s: cannot assign"
+msgstr "%s: »unset« nicht möglich."
+
+#: builtins/common.c:281
 #, c-format
 msgid "%s: %s out of range"
 msgstr "%s: %s ist außerhalb des Gültigkeitsbereiches."
 
-#: builtins/common.c:274 builtins/common.c:276
+#: builtins/common.c:281 builtins/common.c:283
 msgid "argument"
 msgstr "Argument"
 
-#: builtins/common.c:276
+#: builtins/common.c:283
 #, c-format
 msgid "%s out of range"
 msgstr "%s ist außerhalb des Gültigkeitsbereiches."
 
-#: builtins/common.c:284
+#: builtins/common.c:291
 #, c-format
 msgid "%s: no such job"
 msgstr "%s: Kein solcher Job."
 
-#: builtins/common.c:292
+#: builtins/common.c:299
 #, c-format
 msgid "%s: no job control"
 msgstr "%s: Keine Jobsteuerung in dieser Shell."
 
-#: builtins/common.c:294
+#: builtins/common.c:301
 msgid "no job control"
 msgstr "Keine Jobsteuerung in dieser Shell."
 
-#: builtins/common.c:304
+#: builtins/common.c:311
 #, c-format
 msgid "%s: restricted"
 msgstr "%s: eingeschränkt"
 
-#: builtins/common.c:306
+#: builtins/common.c:313
 msgid "restricted"
 msgstr "eingeschränkt"
 
-#: builtins/common.c:314
+#: builtins/common.c:321
 #, c-format
 msgid "%s: not a shell builtin"
 msgstr "%s: Ist kein eingebautes Shellkommando."
 
-#: builtins/common.c:323
+#: builtins/common.c:330
 #, c-format
 msgid "write error: %s"
 msgstr "Schreibfehler: %s."
 
-#: builtins/common.c:331
+#: builtins/common.c:338
 #, c-format
 msgid "error setting terminal attributes: %s"
 msgstr "Fehler beim Setzen der Terminalattribute: %s"
 
-#: builtins/common.c:333
+#: builtins/common.c:340
 #, c-format
 msgid "error getting terminal attributes: %s"
 msgstr "Fehler beim Ermitteln der Terminalattribute: %s"
 
-#: builtins/common.c:635
+#: builtins/common.c:642
 #, c-format
 msgid "%s: error retrieving current directory: %s: %s\n"
 msgstr "%s: Kann das aktuelle Verzeichnis nicht wiederfinden: %s: %s\n"
 
-#: builtins/common.c:701 builtins/common.c:703
+#: builtins/common.c:708 builtins/common.c:710
 #, c-format
 msgid "%s: ambiguous job spec"
 msgstr "%s: Mehrdeutige Jobbezeichnung."
 
-#: builtins/common.c:964
+#: builtins/common.c:971
 msgid "help not available in this version"
 msgstr "In dieser Version ist keine Hilfe verfügbar."
 
-#: builtins/common.c:1008 builtins/set.def:953 variables.c:3839
+#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825
 #, c-format
 msgid "%s: cannot unset: readonly %s"
 msgstr "%s: »unset« nicht möglich: %s ist schreibgeschützt"
 
-#: builtins/common.c:1013 builtins/set.def:932 variables.c:3844
+#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830
 #, c-format
 msgid "%s: cannot unset"
 msgstr "%s: »unset« nicht möglich."
@@ -345,110 +340,110 @@ msgstr "%s: »unset« nicht möglich."
 msgid "%s: invalid action name"
 msgstr "%s: Ungültiger Aktionsname."
 
-#: builtins/complete.def:486 builtins/complete.def:634
-#: builtins/complete.def:865
+#: builtins/complete.def:486 builtins/complete.def:642
+#: builtins/complete.def:873
 #, c-format
 msgid "%s: no completion specification"
 msgstr "%s: Keine Komplettierung angegeben."
 
-#: builtins/complete.def:688
+#: builtins/complete.def:696
 msgid "warning: -F option may not work as you expect"
 msgstr "Warnung: Die Option -F könnte unerwartete Ergebnisse liefern."
 
-#: builtins/complete.def:690
+#: builtins/complete.def:698
 msgid "warning: -C option may not work as you expect"
 msgstr "Warnung: Die Option -C könnte unerwartete Ergebnisse liefern."
 
-#: builtins/complete.def:838
+#: builtins/complete.def:846
 msgid "not currently executing completion function"
 msgstr "Gegenwärtig wird keine Komplettierungsfunktion ausgeführt."
 
-#: builtins/declare.def:134
+#: builtins/declare.def:137
 msgid "can only be used in a function"
 msgstr "Kann nur innerhalb einer Funktion benutzt werden."
 
-#: builtins/declare.def:363 builtins/declare.def:756
+#: builtins/declare.def:437
+msgid "cannot use `-f' to make functions"
+msgstr "Mit »-f« können keine Funktionen erzeugt werden."
+
+#: builtins/declare.def:464 execute_cmd.c:6132
+#, c-format
+msgid "%s: readonly function"
+msgstr "%s: Schreibgeschützte Funktion."
+
+#: builtins/declare.def:521 builtins/declare.def:804
 #, c-format
 msgid "%s: reference variable cannot be an array"
-msgstr ""
+msgstr "%s: Referenzvariable darf kein Array sein."
 
-#: builtins/declare.def:374 variables.c:3385
+#: builtins/declare.def:532 variables.c:3359
 #, c-format
 msgid "%s: nameref variable self references not allowed"
 msgstr ""
 
-#: builtins/declare.def:379 variables.c:2104 variables.c:3304 variables.c:3312
-#: variables.c:3382
+#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286
+#: variables.c:3356
 #, c-format
 msgid "%s: circular name reference"
 msgstr "%s: Zirkularbezug auf indirekte Variable."
 
-#: builtins/declare.def:384 builtins/declare.def:762 builtins/declare.def:773
+#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820
 #, c-format
 msgid "`%s': invalid variable name for name reference"
 msgstr "»%s«: Ungültiger Name für indirekte Variablenreferenz."
 
-#: builtins/declare.def:514
-msgid "cannot use `-f' to make functions"
-msgstr "Mit »-f« können keine Funktionen erzeugt werden."
-
-#: builtins/declare.def:526 execute_cmd.c:5986
-#, c-format
-msgid "%s: readonly function"
-msgstr "%s: Schreibgeschützte Funktion."
-
-#: builtins/declare.def:824
-#, c-format
-msgid "%s: quoted compound array assignment deprecated"
-msgstr ""
-
-#: builtins/declare.def:838
+#: builtins/declare.def:856
 #, c-format
 msgid "%s: cannot destroy array variables in this way"
 msgstr "%s: Kann Feldvariablen nicht auf diese Art löschen."
 
-#: builtins/declare.def:845 builtins/read.def:815
+#: builtins/declare.def:862 builtins/read.def:887
 #, c-format
 msgid "%s: cannot convert associative to indexed array"
 msgstr ""
 "%s: Konvertieren von assoziativen in indizierte Arrays ist nicht möglich."
 
-#: builtins/enable.def:143 builtins/enable.def:151
+#: builtins/declare.def:891
+#, c-format
+msgid "%s: quoted compound array assignment deprecated"
+msgstr ""
+
+#: builtins/enable.def:145 builtins/enable.def:153
 msgid "dynamic loading not available"
 msgstr "Dynamisches Laden ist nicht verfügbar."
 
-#: builtins/enable.def:343
+#: builtins/enable.def:376
 #, c-format
 msgid "cannot open shared object %s: %s"
 msgstr "Kann die dynamische Bibliothek nicht laden %s: %s"
 
-#: builtins/enable.def:371
+#: builtins/enable.def:405
 #, c-format
 msgid "cannot find %s in shared object %s: %s"
 msgstr "Kann %s nicht in der dynamischen Bibliothek finden %s: %s"
 
-#: builtins/enable.def:388
-#, fuzzy, c-format
+#: builtins/enable.def:422
+#, c-format
 msgid "%s: dynamic builtin already loaded"
-msgstr "%s: Ist nicht dynamisch geladen."
+msgstr "%s: Ist bereits geladen."
 
-#: builtins/enable.def:392
+#: builtins/enable.def:426
 #, c-format
 msgid "load function for %s returns failure (%d): not loaded"
 msgstr ""
 "Die Ladefunktion von %s lieferte einen Fehler (%d), daher nicht geladen."
 
-#: builtins/enable.def:517
+#: builtins/enable.def:551
 #, c-format
 msgid "%s: not dynamically loaded"
 msgstr "%s: Ist nicht dynamisch geladen."
 
-#: builtins/enable.def:543
+#: builtins/enable.def:577
 #, c-format
 msgid "%s: cannot delete: %s"
 msgstr "%s: Kann nicht löschen: %s"
 
-#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5818
+#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959
 #, c-format
 msgid "%s: is a directory"
 msgstr "%s: ist ein Verzeichnis."
@@ -463,7 +458,7 @@ msgstr "%s: Ist keine normale Datei."
 msgid "%s: file is too large"
 msgstr "%s: Die Datei ist zu groß."
 
-#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1647
+#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673
 #, c-format
 msgid "%s: cannot execute binary file"
 msgstr "%s: Kann die Datei nicht ausführen."
@@ -551,6 +546,8 @@ msgid ""
 "'\n"
 "\n"
 msgstr ""
+"'\n"
+"\n"
 
 #: builtins/help.def:185
 #, c-format
@@ -560,12 +557,12 @@ msgstr ""
 "Kein passendes Hilfethema für »%s«. Probieren Sie »help help«, »man -k %s« "
 "oder »info %s«."
 
-#: builtins/help.def:224
+#: builtins/help.def:223
 #, c-format
 msgid "%s: cannot open: %s"
 msgstr "%s: Kann die Datei nicht öffnen: %s"
 
-#: builtins/help.def:524
+#: builtins/help.def:523
 #, c-format
 msgid ""
 "These shell commands are defined internally.  Type `help' to see this list.\n"
@@ -587,21 +584,21 @@ msgstr ""
 "Ein Stern (*) neben dem Namen kennzeichnet deaktivierte Kommandos.\n"
 "\n"
 
-#: builtins/history.def:155
+#: builtins/history.def:159
 msgid "cannot use more than one of -anrw"
 msgstr "Es darf höchstens eine Option aus -anrw angegeben werden."
 
-#: builtins/history.def:188 builtins/history.def:198 builtins/history.def:213
-#: builtins/history.def:230 builtins/history.def:242 builtins/history.def:249
+#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215
+#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247
 msgid "history position"
 msgstr "Kommandostapelposition."
 
-#: builtins/history.def:340
+#: builtins/history.def:338
 #, c-format
 msgid "%s: invalid timestamp"
 msgstr "%s: Ungültiger Zeitstempel."
 
-#: builtins/history.def:451
+#: builtins/history.def:449
 #, c-format
 msgid "%s: history expansion failed"
 msgstr "%s: Kommandoersetzung gescheitert."
@@ -624,79 +621,79 @@ msgstr "%s: Die Argumente müssen Prozess- oder Job-IDs sein."
 msgid "Unknown error"
 msgstr "Unbekannter Fehler."
 
-#: builtins/let.def:97 builtins/let.def:122 expr.c:639 expr.c:657
+#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658
 msgid "expression expected"
 msgstr "Ausdruck erwartet."
 
-#: builtins/mapfile.def:178
+#: builtins/mapfile.def:180
 #, c-format
 msgid "%s: not an indexed array"
 msgstr "%s: Ist kein indiziertes Array."
 
-#: builtins/mapfile.def:271 builtins/read.def:308
+#: builtins/mapfile.def:276 builtins/read.def:336
 #, c-format
 msgid "%s: invalid file descriptor specification"
 msgstr "%s: Ungültige Dateideskriptor-Angabe."
 
-#: builtins/mapfile.def:279 builtins/read.def:315
+#: builtins/mapfile.def:284 builtins/read.def:343
 #, c-format
 msgid "%d: invalid file descriptor: %s"
 msgstr "%d: Ungültiger Dateideskriptor: %s"
 
-#: builtins/mapfile.def:288 builtins/mapfile.def:326
+#: builtins/mapfile.def:293 builtins/mapfile.def:331
 #, c-format
 msgid "%s: invalid line count"
 msgstr "%s: Ungültige Zeilenanzahlangabe."
 
-#: builtins/mapfile.def:299
+#: builtins/mapfile.def:304
 #, c-format
 msgid "%s: invalid array origin"
 msgstr "%s: Ungültiger Arrayanfang."
 
-#: builtins/mapfile.def:316
+#: builtins/mapfile.def:321
 #, c-format
 msgid "%s: invalid callback quantum"
 msgstr ""
 
-#: builtins/mapfile.def:349
+#: builtins/mapfile.def:354
 msgid "empty array variable name"
 msgstr "Fehlender Name für die Arrayvariable."
 
-#: builtins/mapfile.def:370
+#: builtins/mapfile.def:375
 msgid "array variable support required"
 msgstr ""
 "Die Unterstützung für Arrayvariablen ist in dieser Shell nicht vorhanden."
 
-#: builtins/printf.def:419
+#: builtins/printf.def:430
 #, c-format
 msgid "`%s': missing format character"
 msgstr "»%s«: Fehlendes Formatierungszeichen."
 
-#: builtins/printf.def:474
+#: builtins/printf.def:485
 #, c-format
 msgid "`%c': invalid time format specification"
 msgstr "»%c«: Ungültige Zeitformatangabe."
 
-#: builtins/printf.def:676
+#: builtins/printf.def:708
 #, c-format
 msgid "`%c': invalid format character"
 msgstr "»%c«: Ungültiges Formatierungszeichen."
 
-#: builtins/printf.def:702
+#: builtins/printf.def:734
 #, c-format
 msgid "warning: %s: %s"
 msgstr "Warnung: %s: %s"
 
-#: builtins/printf.def:788
+#: builtins/printf.def:822
 #, c-format
 msgid "format parsing problem: %s"
 msgstr "Formatleseproblem: %s"
 
-#: builtins/printf.def:885
+#: builtins/printf.def:919
 msgid "missing hex digit for \\x"
 msgstr "Fehlende hexadezimale Ziffer nach \\x."
 
-#: builtins/printf.def:900
+#: builtins/printf.def:934
 #, c-format
 msgid "missing unicode digit for \\%c"
 msgstr "Fehlende Unicode-Ziffer für \\%c."
@@ -851,12 +848,12 @@ msgstr ""
 "    \n"
 "    Das Kommando »dirs« zeigt den Verzeichnisstapel an."
 
-#: builtins/read.def:280
+#: builtins/read.def:308
 #, c-format
 msgid "%s: invalid timeout specification"
 msgstr "%s: Ungültige Wartezeitangebe."
 
-#: builtins/read.def:755
+#: builtins/read.def:827
 #, c-format
 msgid "read error: %d: %s"
 msgstr "Lesefehler: %d: %s"
@@ -872,7 +869,7 @@ msgid "cannot simultaneously unset a function and a variable"
 msgstr ""
 "Gleichzeitiges »unset« einer Funktion und einer Variable ist nicht möglich."
 
-#: builtins/set.def:966
+#: builtins/set.def:969
 #, c-format
 msgid "%s: not an array variable"
 msgstr "%s: Ist keine Feldvariable."
@@ -891,11 +888,11 @@ msgstr "%s: Exportieren nicht möglich."
 msgid "shift count"
 msgstr "Verschiebeanzahl"
 
-#: builtins/shopt.def:310
+#: builtins/shopt.def:323
 msgid "cannot set and unset shell options simultaneously"
 msgstr "Kann nicht Shelloptionen gleichzeitig aktivieren und deaktivieren."
 
-#: builtins/shopt.def:428
+#: builtins/shopt.def:444
 #, c-format
 msgid "%s: invalid shell option name"
 msgstr "%s: Ungültiger Name für Shelloption."
@@ -963,16 +960,16 @@ msgstr "%s: Ungültiges Grenzwertargument."
 msgid "`%c': bad command"
 msgstr "`%c': Falsches Kommando."
 
-#: builtins/ulimit.def:455
+#: builtins/ulimit.def:464
 #, c-format
 msgid "%s: cannot get limit: %s"
 msgstr "%s: Kann die nicht Grenze setzen: %s"
 
-#: builtins/ulimit.def:481
+#: builtins/ulimit.def:490
 msgid "limit"
 msgstr "Grenze"
 
-#: builtins/ulimit.def:493 builtins/ulimit.def:793
+#: builtins/ulimit.def:502 builtins/ulimit.def:802
 #, c-format
 msgid "%s: cannot modify limit: %s"
 msgstr "%s: Kann die Grenze nicht ändern: %s"
@@ -991,7 +988,7 @@ msgstr "`%c': Ungültiger Operator für den symbolischen Modus."
 msgid "`%c': invalid symbolic mode character"
 msgstr "`%c': Ungültiges Zeichen im symbolischen Modus."
 
-#: error.c:89 error.c:347 error.c:349 error.c:351
+#: error.c:89 error.c:373 error.c:375 error.c:377
 msgid " line "
 msgstr " Zeile "
 
@@ -1011,97 +1008,107 @@ msgstr "Abbruch..."
 msgid "INFORM: "
 msgstr "INFO: "
 
-#: error.c:462
+#: error.c:310
+#, fuzzy, c-format
+msgid "DEBUG warning: "
+msgstr "Warnung: "
+
+#: error.c:488
 msgid "unknown command error"
 msgstr "Unbekanntes Kommando"
 
-#: error.c:463
+#: error.c:489
 msgid "bad command type"
-msgstr ""
+msgstr "Falscher Kommandotyp"
 
 # Programmierfehler
-#: error.c:464
+#: error.c:490
 msgid "bad connector"
 msgstr ""
 
-#: error.c:465
+#: error.c:491
 msgid "bad jump"
 msgstr "Falscher Sprung"
 
-#: error.c:503
+#: error.c:529
 #, c-format
 msgid "%s: unbound variable"
 msgstr "%s ist nicht gesetzt."
 
-#: eval.c:242
+#: eval.c:243
 msgid "\atimed out waiting for input: auto-logout\n"
 msgstr "\aZu lange keine Eingabe: Automatisch ausgeloggt.\n"
 
-#: execute_cmd.c:537
+#: execute_cmd.c:555
 #, c-format
 msgid "cannot redirect standard input from /dev/null: %s"
 msgstr "Kann nicht die Standardeingabe von /dev/null umleiten: %s"
 
-#: execute_cmd.c:1297
+#: execute_cmd.c:1317
 #, c-format
 msgid "TIMEFORMAT: `%c': invalid format character"
 msgstr "TIMEFORMAT: »%c«: Ungültiges Formatzeichen."
 
-#: execute_cmd.c:2362
+#: execute_cmd.c:2391
 #, c-format
 msgid "execute_coproc: coproc [%d:%s] still exists"
 msgstr ""
 
-#: execute_cmd.c:2486
+#: execute_cmd.c:2524
 msgid "pipe error"
 msgstr "Pipe-Fehler"
 
-#: execute_cmd.c:4793
+#: execute_cmd.c:4923
 #, c-format
 msgid "eval: maximum eval nesting level exceeded (%d)"
 msgstr "eval: Maximale Schachtelungstiefe überschritten (%d)"
 
-#: execute_cmd.c:4805
+#: execute_cmd.c:4935
 #, c-format
 msgid "%s: maximum source nesting level exceeded (%d)"
 msgstr "%s: Maximale Quellcode-Schachtelungstiefe überschritten (%d)"
 
-#: execute_cmd.c:4913
+#: execute_cmd.c:5043
 #, c-format
 msgid "%s: maximum function nesting level exceeded (%d)"
 msgstr "%s: maximale Schachtelungstiefe für Funktionen überschritten (%d)"
 
-#: execute_cmd.c:5467
+#: execute_cmd.c:5598
 #, c-format
 msgid "%s: restricted: cannot specify `/' in command names"
 msgstr "%s: eingeschränkt: `/' ist in Kommandonamen unzulässig."
 
-#: execute_cmd.c:5574
+#: execute_cmd.c:5715
 #, c-format
 msgid "%s: command not found"
 msgstr "%s: Kommando nicht gefunden."
 
-#: execute_cmd.c:5816
+#: execute_cmd.c:5957
 #, c-format
 msgid "%s: %s"
 msgstr "%s: %s"
 
-#: execute_cmd.c:5854
+#: execute_cmd.c:5975
+#, fuzzy, c-format
+msgid "%s: cannot execute: required file not found"
+msgstr "%s: Kann die Datei nicht ausführen."
+
+#: execute_cmd.c:6000
 #, c-format
 msgid "%s: %s: bad interpreter"
 msgstr "%s: %s: Defekter Interpreter"
 
-#: execute_cmd.c:5891
+#: execute_cmd.c:6037
 #, c-format
 msgid "%s: cannot execute binary file: %s"
 msgstr "%s: Kann die Binärdatei nicht ausführen: %s"
 
-#: execute_cmd.c:5977
+#: execute_cmd.c:6123
 #, c-format
 msgid "`%s': is a special builtin"
 msgstr "»%s« ist eine spezielle eingebaute Funktion."
 
-#: execute_cmd.c:6029
+#: execute_cmd.c:6175
 #, c-format
 msgid "cannot duplicate fd %d to fd %d"
 msgstr "Kann fd %d nicht auf fd %d verdoppeln."
@@ -1114,70 +1121,69 @@ msgstr "Zu viele Rekursionen in Ausdruck."
 msgid "recursion stack underflow"
 msgstr "Rekursionsstapel leer."
 
-#: expr.c:477
+#: expr.c:478
 msgid "syntax error in expression"
 msgstr "Syntaxfehler im Ausdruck."
 
-#: expr.c:521
+#: expr.c:522
 msgid "attempted assignment to non-variable"
 msgstr "Versuchte Zuweisung zu etwas, das keine Variable ist."
 
-#: expr.c:530
+#: expr.c:531
 msgid "syntax error in variable assignment"
 msgstr "Syntaxfehler in der Variablenzuweisung."
 
-#: expr.c:544 expr.c:911
+#: expr.c:545 expr.c:912
 msgid "division by 0"
 msgstr "Division durch 0."
 
-#: expr.c:592
+#: expr.c:593
 msgid "bug: bad expassign token"
 msgstr "Fehler: Falscher Zuweisungsoperator."
 
-#: expr.c:646
+#: expr.c:647
 msgid "`:' expected for conditional expression"
 msgstr "»:« für ein bedingten Ausdruck erwartet."
 
-#: expr.c:972
+#: expr.c:973
 msgid "exponent less than 0"
 msgstr "Der Exponent ist kleiner als 0."
 
-#: expr.c:1029
+#: expr.c:1030
 msgid "identifier expected after pre-increment or pre-decrement"
 msgstr ""
 "Nach einem Präinkrement oder Prädekrement wird ein Bezeichner erwartet."
 
-#: expr.c:1056
+#: expr.c:1057
 msgid "missing `)'"
 msgstr "Fehlende »)«"
 
-#: expr.c:1107 expr.c:1487
+#: expr.c:1108 expr.c:1492
 msgid "syntax error: operand expected"
 msgstr "Syntaxfehler: Operator erwartet."
 
-#: expr.c:1489
+#: expr.c:1494
 msgid "syntax error: invalid arithmetic operator"
 msgstr "Syntaxfehler: Ungültiger arithmetischer Operator."
 
-#: expr.c:1513
+#: expr.c:1518
 #, c-format
 msgid "%s%s%s: %s (error token is \"%s\")"
 msgstr "%s%s%s: %s (Fehlerverursachendes Zeichen ist \"%s\")."
 
-#: expr.c:1573
+#: expr.c:1578
 msgid "invalid arithmetic base"
 msgstr "Ungültige Basis."
 
-#: expr.c:1582
-#, fuzzy
+#: expr.c:1587
 msgid "invalid integer constant"
-msgstr "%s: Ungültige Zeilenanzahlangabe."
+msgstr "Ungültige Ganzzahlenkonstante."
 
-#: expr.c:1598
+#: expr.c:1603
 msgid "value too great for base"
 msgstr "Der Wert ist für die aktuelle Basis zu groß."
 
-#: expr.c:1647
+#: expr.c:1652
 #, c-format
 msgid "%s: expression error\n"
 msgstr "%s: Fehler im Ausdruck.\n"
@@ -1186,7 +1192,7 @@ msgstr "%s: Fehler im Ausdruck.\n"
 msgid "getcwd: cannot access parent directories"
 msgstr "getcwd: Kann auf die übergeordneten Verzeichnisse nicht zugreifen."
 
-#: input.c:99 subst.c:6069
+#: input.c:99 subst.c:6208
 #, c-format
 msgid "cannot reset nodelay mode for fd %d"
 msgstr "Konnte den No-Delay-Modus für fd %d nicht wiederherstellen."
@@ -1206,175 +1212,175 @@ msgstr "save_bash_input: Es existiert bereits ein Puffer für den neuen fd %d."
 msgid "start_pipeline: pgrp pipe"
 msgstr "start_pipeline: pgrp pipe"
 
-#: jobs.c:906
+#: jobs.c:907
 #, c-format
 msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr ""
 
-#: jobs.c:959
+#: jobs.c:960
 #, c-format
 msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr ""
 
-#: jobs.c:1283
+#: jobs.c:1279
 #, c-format
 msgid "forked pid %d appears in running job %d"
 msgstr "Die geforkte PID %d erscheint im laufenden Prozess %d."
 
-#: jobs.c:1402
+#: jobs.c:1397
 #, c-format
 msgid "deleting stopped job %d with process group %ld"
 msgstr "Lösche den gestoppten Prozess %d der Prozessgruppe %ld."
 
 # https://lists.gnu.org/archive/html/bug-bash/2019-09/msg00024.html
-#: jobs.c:1511
+#: jobs.c:1502
 #, c-format
 msgid "add_process: pid %5ld (%s) marked as still alive"
 msgstr ""
 
 # Programmierfehler
-#: jobs.c:1850
+#: jobs.c:1839
 #, c-format
 msgid "describe_pid: %ld: no such pid"
 msgstr "describe_pid: %ld: Prozessnummer existiert nicht."
 
-#: jobs.c:1865
+#: jobs.c:1854
 #, c-format
 msgid "Signal %d"
 msgstr "Signal %d"
 
-#: jobs.c:1879 jobs.c:1905
+#: jobs.c:1868 jobs.c:1894
 msgid "Done"
 msgstr "Fertig"
 
-#: jobs.c:1884 siglist.c:122
+#: jobs.c:1873 siglist.c:123
 msgid "Stopped"
 msgstr "Angehalten"
 
-#: jobs.c:1888
+#: jobs.c:1877
 #, c-format
 msgid "Stopped(%s)"
 msgstr "Angehalten(%s)"
 
-#: jobs.c:1892
+#: jobs.c:1881
 msgid "Running"
 msgstr "Läuft"
 
-#: jobs.c:1909
+#: jobs.c:1898
 #, c-format
 msgid "Done(%d)"
 msgstr "Fertig(%d)"
 
-#: jobs.c:1911
+#: jobs.c:1900
 #, c-format
 msgid "Exit %d"
 msgstr "Exit %d"
 
-#: jobs.c:1914
+#: jobs.c:1903
 msgid "Unknown status"
 msgstr "Unbekannter Status"
 
-#: jobs.c:2001
+#: jobs.c:1990
 #, c-format
 msgid "(core dumped) "
 msgstr "(Speicherabzug geschrieben) "
 
-#: jobs.c:2020
+#: jobs.c:2009
 #, c-format
 msgid "  (wd: %s)"
 msgstr "  (Verz.: %s)"
 
 # interner Fehler
-#: jobs.c:2259
+#: jobs.c:2250
 #, c-format
 msgid "child setpgid (%ld to %ld)"
 msgstr ""
 
-#: jobs.c:2617 nojobs.c:664
+#: jobs.c:2608 nojobs.c:666
 #, c-format
 msgid "wait: pid %ld is not a child of this shell"
 msgstr "wait: Prozess %ld wurde nicht von dieser Shell gestartet."
 
-#: jobs.c:2893
+#: jobs.c:2884
 #, c-format
 msgid "wait_for: No record of process %ld"
 msgstr ""
 
-#: jobs.c:3236
+#: jobs.c:3223
 #, c-format
 msgid "wait_for_job: job %d is stopped"
 msgstr "wait_for_job: Der Job %d ist gestoppt."
 
-#: jobs.c:3564
-#, fuzzy, c-format
+#: jobs.c:3551
+#, c-format
 msgid "%s: no current jobs"
-msgstr "%s: Kein solcher Job."
+msgstr "%s: Kein aktueller Job."
 
-#: jobs.c:3571
+#: jobs.c:3558
 #, c-format
 msgid "%s: job has terminated"
 msgstr "%s: Der Job ist beendet."
 
-#: jobs.c:3580
+#: jobs.c:3567
 #, c-format
 msgid "%s: job %d already in background"
 msgstr "%s: Der Job %d läuft bereits im Hintergrund."
 
-#: jobs.c:3806
+#: jobs.c:3793
 msgid "waitchld: turning on WNOHANG to avoid indefinite block"
 msgstr ""
 
 # Debug Ausgabe
-#: jobs.c:4320
+#: jobs.c:4307
 #, c-format
 msgid "%s: line %d: "
 msgstr "%s: Zeile %d: "
 
-#: jobs.c:4334 nojobs.c:919
+#: jobs.c:4321 nojobs.c:921
 #, c-format
 msgid " (core dumped)"
 msgstr " (Speicherabzug geschrieben)"
 
-#: jobs.c:4346 jobs.c:4359
+#: jobs.c:4333 jobs.c:4346
 #, c-format
 msgid "(wd now: %s)\n"
 msgstr "(gegenwärtiges Arbeitsverzeichnis ist: %s)\n"
 
 # interner Fehler
-#: jobs.c:4391
+#: jobs.c:4378
 msgid "initialize_job_control: getpgrp failed"
 msgstr "initialize_job_control: getpgrp war nicht erfolgreich."
 
 # interner Fehler
-#: jobs.c:4447
+#: jobs.c:4434
 msgid "initialize_job_control: no job control in background"
 msgstr "initialize_job_control: Keine Jobsteuerung im Hintergrund."
 
 # interner Fehler
-#: jobs.c:4463
+#: jobs.c:4450
 msgid "initialize_job_control: line discipline"
 msgstr "initialize_job_control: line discipline"
 
 # interner Fehler
-#: jobs.c:4473
+#: jobs.c:4460
 msgid "initialize_job_control: setpgid"
 msgstr "initialize_job_control: setpgid"
 
-#: jobs.c:4494 jobs.c:4503
+#: jobs.c:4481 jobs.c:4490
 #, c-format
 msgid "cannot set terminal process group (%d)"
 msgstr "Kann die Prozessgruppe des Terminals nicht setzen (%d)."
 
-#: jobs.c:4508
+#: jobs.c:4495
 msgid "no job control in this shell"
 msgstr "Keine Jobsteuerung in dieser Shell."
 
-#: lib/malloc/malloc.c:353
+#: lib/malloc/malloc.c:367
 #, c-format
 msgid "malloc: failed assertion: %s\n"
 msgstr "malloc: Zusicherung gescheitert: %s.\n"
 
-#: lib/malloc/malloc.c:369
+#: lib/malloc/malloc.c:383
 #, c-format
 msgid ""
 "\r\n"
@@ -1383,51 +1389,48 @@ msgstr ""
 "\r\n"
 "malloc: %s:%d: Zusicherung verpfuscht\\r\n"
 
-#: lib/malloc/malloc.c:370 lib/malloc/malloc.c:933
+#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941
 msgid "unknown"
 msgstr "Unbekannt"
 
-#: lib/malloc/malloc.c:882
+#: lib/malloc/malloc.c:892
 msgid "malloc: block on free list clobbered"
 msgstr "Malloc: Ein internet Speicherbereich (free list) wurde überschrieben."
 
-#: lib/malloc/malloc.c:972
+#: lib/malloc/malloc.c:980
 msgid "free: called with already freed block argument"
 msgstr "free: Wurde für bereits freigegebenen Speicherbereich aufgerufen."
 
-#: lib/malloc/malloc.c:975
+#: lib/malloc/malloc.c:983
 msgid "free: called with unallocated block argument"
 msgstr "free: Wurde für nicht zugeordneten Speicherbereich aufgerufen."
 
-#: lib/malloc/malloc.c:994
+#: lib/malloc/malloc.c:1001
 msgid "free: underflow detected; mh_nbytes out of range"
 msgstr "free: Underflow erkannt; mh_nbytes außerhalb des Gültigkeitsbereichs."
 
-#: lib/malloc/malloc.c:1001
-#, fuzzy
+#: lib/malloc/malloc.c:1007
 msgid "free: underflow detected; magic8 corrupted"
-msgstr "free: Underflow erkannt; mh_nbytes außerhalb des Gültigkeitsbereichs."
+msgstr "free: Underflow erkannt; magic8 beschädigt."
 
-#: lib/malloc/malloc.c:1009
+#: lib/malloc/malloc.c:1014
 msgid "free: start and end chunk sizes differ"
 msgstr "free: Beginn und Ende Segmentgrößen sind unterschiedlich."
 
-#: lib/malloc/malloc.c:1119
+#: lib/malloc/malloc.c:1176
 msgid "realloc: called with unallocated block argument"
 msgstr "realloc: Mit nicht zugewiesenen Argument aufgerufen."
 
-#: lib/malloc/malloc.c:1134
+#: lib/malloc/malloc.c:1191
 msgid "realloc: underflow detected; mh_nbytes out of range"
 msgstr ""
 "realloc: Underflow erkannt; mh_nbytes außerhalb des Gültigkeitsbereichs."
 
-#: lib/malloc/malloc.c:1141
-#, fuzzy
+#: lib/malloc/malloc.c:1197
 msgid "realloc: underflow detected; magic8 corrupted"
-msgstr ""
-"realloc: Underflow erkannt; mh_nbytes außerhalb des Gültigkeitsbereichs."
+msgstr "realloc: Underflow erkannt; magic8 beschädigt."
 
-#: lib/malloc/malloc.c:1150
+#: lib/malloc/malloc.c:1205
 msgid "realloc: start and end chunk sizes differ"
 msgstr "realloc: Beginn und Ende Segmentgrößen sind unterschiedlich.<"
 
@@ -1474,22 +1477,22 @@ msgstr "%s: Fehlerhafte Netzwerkspfadangabe."
 msgid "network operations not supported"
 msgstr "Der Netzwerkbetrieb ist nicht unterstützt."
 
-#: locale.c:217
+#: locale.c:219
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s)"
 msgstr "setlocale: LC_ALL: Kann die Regionseinstellungen nicht ändern (%s)."
 
-#: locale.c:219
+#: locale.c:221
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s): %s"
 msgstr "setlocale: LC_ALL: Kann die Regionseinstellungen nicht ändern (%s): %s"
 
-#: locale.c:292
+#: locale.c:294
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s)"
 msgstr "setlocale: %s: Kann die Regionseinstellungen nicht ändern (%s)."
 
-#: locale.c:294
+#: locale.c:296
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s): %s"
 msgstr "setlocale: %s: Kann die Regionseinstellungen nicht ändern (%s): %s"
@@ -1508,142 +1511,142 @@ msgstr "Sie haben neue Post in $_."
 msgid "The mail in %s has been read\n"
 msgstr "Die Post in %s wurde bereits gelesen.\n"
 
-#: make_cmd.c:317
+#: make_cmd.c:314
 msgid "syntax error: arithmetic expression required"
 msgstr "Syntaxfehler: Es wird ein arithmetischer Ausdruck benötigt."
 
-#: make_cmd.c:319
+#: make_cmd.c:316
 msgid "syntax error: `;' unexpected"
 msgstr "Syntax Fehler: unerwartetes `;'."
 
-#: make_cmd.c:320
+#: make_cmd.c:317
 #, c-format
 msgid "syntax error: `((%s))'"
 msgstr "Syntaxfehler: »((%s))«."
 
 # interner Fehler
-#: make_cmd.c:572
+#: make_cmd.c:569
 #, c-format
 msgid "make_here_document: bad instruction type %d"
 msgstr "make_here_document: Falscher Befehlstyp %d."
 
-#: make_cmd.c:657
+#: make_cmd.c:668
 #, c-format
 msgid "here-document at line %d delimited by end-of-file (wanted `%s')"
 msgstr ""
 "Das in der Zeile %d beginnende Here-Dokument geht bis zum Dateiende "
 "(erwartet wird »%s«)."
 
-#: make_cmd.c:756
+#: make_cmd.c:769
 #, c-format
 msgid "make_redirection: redirection instruction `%d' out of range"
 msgstr ""
 
-#: parse.y:2393
+#: parse.y:2428
 #, c-format
 msgid ""
 "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line "
 "truncated"
 msgstr ""
 
-#: parse.y:2826
+#: parse.y:2921
 msgid "maximum here-document count exceeded"
 msgstr ""
 
-#: parse.y:3581 parse.y:3957 parse.y:4556
+#: parse.y:3684 parse.y:4244 parse.y:6148
 #, c-format
 msgid "unexpected EOF while looking for matching `%c'"
 msgstr "Dateiende beim Suchen nach »%c« erreicht."
 
-#: parse.y:4696
+#: parse.y:4452
 msgid "unexpected EOF while looking for `]]'"
 msgstr "Dateiende beim Suchen nach »]]« erreicht."
 
-#: parse.y:4701
+#: parse.y:4457
 #, c-format
 msgid "syntax error in conditional expression: unexpected token `%s'"
 msgstr "Syntaxfehler im bedingten Ausdruck: Unerwartetes Symbol »%s«."
 
-#: parse.y:4705
+#: parse.y:4461
 msgid "syntax error in conditional expression"
 msgstr "Syntaxfehler im bedingten Ausdruck."
 
-#: parse.y:4783
+#: parse.y:4539
 #, c-format
 msgid "unexpected token `%s', expected `)'"
 msgstr "Unerwartetes Zeichen: »%s« anstatt von »)«"
 
-#: parse.y:4787
+#: parse.y:4543
 msgid "expected `)'"
 msgstr "»)« erwartet."
 
-#: parse.y:4815
+#: parse.y:4571
 #, c-format
 msgid "unexpected argument `%s' to conditional unary operator"
 msgstr ""
 
-#: parse.y:4819
+#: parse.y:4575
 msgid "unexpected argument to conditional unary operator"
 msgstr ""
 
-#: parse.y:4865
+#: parse.y:4621
 #, c-format
 msgid "unexpected token `%s', conditional binary operator expected"
 msgstr ""
 
-#: parse.y:4869
+#: parse.y:4625
 msgid "conditional binary operator expected"
 msgstr ""
 
-#: parse.y:4891
+#: parse.y:4647
 #, c-format
 msgid "unexpected argument `%s' to conditional binary operator"
 msgstr ""
 
-#: parse.y:4895
+#: parse.y:4651
 msgid "unexpected argument to conditional binary operator"
 msgstr ""
 
-#: parse.y:4906
+#: parse.y:4662
 #, c-format
 msgid "unexpected token `%c' in conditional command"
 msgstr ""
 
-#: parse.y:4909
+#: parse.y:4665
 #, c-format
 msgid "unexpected token `%s' in conditional command"
 msgstr ""
 
-#: parse.y:4913
+#: parse.y:4669
 #, c-format
 msgid "unexpected token %d in conditional command"
 msgstr ""
 
-#: parse.y:6336
+#: parse.y:6118
 #, c-format
 msgid "syntax error near unexpected token `%s'"
 msgstr "Syntaxfehler beim unerwarteten Symbol »%s«"
 
-#: parse.y:6355
+#: parse.y:6137
 #, c-format
 msgid "syntax error near `%s'"
 msgstr "Syntaxfehler bei »%s«"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error: unexpected end of file"
 msgstr "Syntaxfehler: Unerwartetes Dateiende."
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error"
 msgstr "Syntaxfehler"
 
 # Du oder Sie?
-#: parse.y:6428
+#: parse.y:6216
 #, c-format
 msgid "Use \"%s\" to leave the shell.\n"
 msgstr "Verwenden Sie »%s«, um die Shell zu verlassen.\n"
 
-#: parse.y:6602
+#: parse.y:6394
 msgid "unexpected EOF while looking for matching `)'"
 msgstr "Dateiende beim Suchen nach zugehöriger »)« erreicht."
 
@@ -1681,96 +1684,96 @@ msgstr ""
 msgid "xtrace fd (%d) != fileno xtrace fp (%d)"
 msgstr ""
 
-#: print_cmd.c:1540
+#: print_cmd.c:1545
 #, c-format
 msgid "cprintf: `%c': invalid format character"
 msgstr "cprintf: »%c«: Ungültiges Formatsymbol."
 
-#: redir.c:149 redir.c:197
+#: redir.c:150 redir.c:198
 msgid "file descriptor out of range"
 msgstr "Dateideskriptor außerhalb des gültigen Bereichs."
 
-#: redir.c:204
+#: redir.c:205
 #, c-format
 msgid "%s: ambiguous redirect"
 msgstr "%s: Mehrdeutige Umlenkung."
 
-#: redir.c:208
+#: redir.c:209
 #, c-format
 msgid "%s: cannot overwrite existing file"
 msgstr "%s: Kann existierende Datei nicht überschreiben."
 
-#: redir.c:213
+#: redir.c:214
 #, c-format
 msgid "%s: restricted: cannot redirect output"
 msgstr "%s: eingeschränkt: Die Ausgabe darf nicht umgeleitet werden."
 
-#: redir.c:218
+#: redir.c:219
 #, c-format
 msgid "cannot create temp file for here-document: %s"
 msgstr "Kann die temporäre Datei für das Hier-Dokument nicht anlegen: %s"
 
-#: redir.c:222
+#: redir.c:223
 #, c-format
 msgid "%s: cannot assign fd to variable"
 msgstr "%s: Kann fd keiner Variable zuweisen."
 
-#: redir.c:649
+#: redir.c:650
 msgid "/dev/(tcp|udp)/host/port not supported without networking"
 msgstr ""
 "Dateinamen der Form /dev/(tcp|udp)/host/port werden ohne Netzwerk nicht "
 "unterstützt"
 
-#: redir.c:938 redir.c:1053 redir.c:1114 redir.c:1284
+#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303
 msgid "redirection error: cannot duplicate fd"
 msgstr "Umleitungsfehler: Verdoppeln des Dateibezeichners nicht möglich."
 
-#: shell.c:347
+#: shell.c:353
 msgid "could not find /tmp, please create!"
 msgstr "Konnte das Verzeichnis »/tmp« nicht finden, bitte anlegen."
 
-#: shell.c:351
+#: shell.c:357
 msgid "/tmp must be a valid directory name"
 msgstr "/tmp muss ein Verzeichnis sein."
 
-#: shell.c:804
+#: shell.c:826
 msgid "pretty-printing mode ignored in interactive shells"
 msgstr "Der hübsche Druckmodus wird in interaktiven Schells ignoriert."
 
-#: shell.c:948
+#: shell.c:972
 #, c-format
 msgid "%c%c: invalid option"
 msgstr "%c%c: Ungültige Option"
 
-#: shell.c:1319
+#: shell.c:1343
 #, c-format
 msgid "cannot set uid to %d: effective uid %d"
 msgstr "Konnte die UID nicht in %d ändern: Die effektive UID ist %d"
 
-#: shell.c:1330
+#: shell.c:1354
 #, c-format
 msgid "cannot set gid to %d: effective gid %d"
 msgstr "Konnte die GID nicht in %d ändern: Die effektive GID ist %d"
 
-#: shell.c:1518
+#: shell.c:1544
 msgid "cannot start debugger; debugging mode disabled"
 msgstr "Kann keinen Debugger starten. Der Debugmodus ist gesperrt."
 
-#: shell.c:1632
+#: shell.c:1658
 #, c-format
 msgid "%s: Is a directory"
 msgstr "%s: Ist ein Verzeichnis."
 
-#: shell.c:1881
+#: shell.c:1907
 msgid "I have no name!"
 msgstr "Ich habe keinen Benutzernamen!"
 
-#: shell.c:2035
+#: shell.c:2061
 #, c-format
 msgid "GNU bash, version %s-(%s)\n"
 msgstr "GNU bash, Version %s-(%s)\n"
 
-#: shell.c:2036
+#: shell.c:2062
 #, c-format
 msgid ""
 "Usage:\t%s [GNU long option] [option] ...\n"
@@ -1779,315 +1782,315 @@ msgstr ""
 "Aufruf:\t%s [Lange GNU-Option] [Option] ...\n"
 "\t%s [Lange GNU-Option] [Option] Script-Datei ...\n"
 
-#: shell.c:2038
+#: shell.c:2064
 msgid "GNU long options:\n"
 msgstr "Lange GNU-Optionen:\n"
 
-#: shell.c:2042
+#: shell.c:2068
 msgid "Shell options:\n"
 msgstr "Shell-Optionen:\n"
 
-#: shell.c:2043
+#: shell.c:2069
 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n"
 msgstr "\t-ilrsD oder -c Kommando oder -O shopt_option\t\t(Nur Aufruf)\n"
 
-#: shell.c:2062
+#: shell.c:2088
 #, c-format
 msgid "\t-%s or -o option\n"
 msgstr "\t-%s oder Option -o\n"
 
-#: shell.c:2068
+#: shell.c:2094
 #, c-format
 msgid "Type `%s -c \"help set\"' for more information about shell options.\n"
 msgstr ""
 "Geben Sie »%s -c \"help set\"« ein, um mehr über Shell-Optionen zu "
 "erfahren.\n"
 
-#: shell.c:2069
+#: shell.c:2095
 #, c-format
 msgid "Type `%s -c help' for more information about shell builtin commands.\n"
 msgstr ""
 "Geben Sie »%s -c help« ein, um mehr über eingebaute Shellkommandos zu "
 "erfahren.\n"
 
-#: shell.c:2070
+#: shell.c:2096
 #, c-format
 msgid "Use the `bashbug' command to report bugs.\n"
 msgstr "Mit dem Kommando »bashbug« Kommando können Sie Fehler melden.\n"
 
-#: shell.c:2072
+#: shell.c:2098
 #, c-format
 msgid "bash home page: <http://www.gnu.org/software/bash>\n"
 msgstr "Bash-Homepage: <https://www.gnu.org/software/bash>\n"
 
-#: shell.c:2073
+#: shell.c:2099
 #, c-format
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 msgstr "Allgemeine Hilfe für GNU-Software: <https://www.gnu.org/gethelp/>\n"
 
-#: sig.c:757
+#: sig.c:765
 #, c-format
 msgid "sigprocmask: %d: invalid operation"
 msgstr "sigprocmask: %d: Ungültige Operation"
 
-#: siglist.c:47
+#: siglist.c:48
 msgid "Bogus signal"
 msgstr "Falsches Signal."
 
-#: siglist.c:50
+#: siglist.c:51
 msgid "Hangup"
 msgstr "Aufgelegt"
 
-#: siglist.c:54
+#: siglist.c:55
 msgid "Interrupt"
 msgstr "Unterbrochen (Interrupt)"
 
-#: siglist.c:58
+#: siglist.c:59
 msgid "Quit"
 msgstr "Quit"
 
-#: siglist.c:62
+#: siglist.c:63
 msgid "Illegal instruction"
 msgstr "Ungültige Anweisung."
 
-#: siglist.c:66
+#: siglist.c:67
 msgid "BPT trace/trap"
 msgstr "Verfolgen/anhalten abfangen (Trace/breakpoint trap)"
 
-#: siglist.c:74
+#: siglist.c:75
 msgid "ABORT instruction"
 msgstr "Abbruchkommando"
 
-#: siglist.c:78
+#: siglist.c:79
 msgid "EMT instruction"
 msgstr "EMT abfangen (EMT trap)"
 
-#: siglist.c:82
+#: siglist.c:83
 msgid "Floating point exception"
 msgstr "Gleitkommafehler"
 
-#: siglist.c:86
+#: siglist.c:87
 msgid "Killed"
 msgstr "Abgebrochen (Killed)"
 
-#: siglist.c:90
+#: siglist.c:91
 msgid "Bus error"
 msgstr "Bus-Fehler"
 
-#: siglist.c:94
+#: siglist.c:95
 msgid "Segmentation fault"
 msgstr "Adressierungsfehler"
 
-#: siglist.c:98
+#: siglist.c:99
 msgid "Bad system call"
 msgstr "Falscher Systemaufruf"
 
-#: siglist.c:102
+#: siglist.c:103
 msgid "Broken pipe"
 msgstr "Unterbrochene Pipe"
 
-#: siglist.c:106
+#: siglist.c:107
 msgid "Alarm clock"
 msgstr "Wecker"
 
-#: siglist.c:110
+#: siglist.c:111
 msgid "Terminated"
 msgstr "Abgebrochen (Terminated)"
 
-#: siglist.c:114
+#: siglist.c:115
 msgid "Urgent IO condition"
 msgstr "Dringende IO-Bedingung"
 
-#: siglist.c:118
+#: siglist.c:119
 msgid "Stopped (signal)"
 msgstr "Angehalten (Signal)"
 
-#: siglist.c:126
+#: siglist.c:127
 msgid "Continue"
 msgstr "Prozessbearbeitung wieder aufgenommen."
 
-#: siglist.c:134
+#: siglist.c:135
 msgid "Child death or stop"
 msgstr "Kindprozess abgebrochen oder gestoppt."
 
-#: siglist.c:138
+#: siglist.c:139
 msgid "Stopped (tty input)"
 msgstr "Angehalten (Terminaleingabe)"
 
-#: siglist.c:142
+#: siglist.c:143
 msgid "Stopped (tty output)"
 msgstr "Angehalten (Terminalausgabe)"
 
-#: siglist.c:146
+#: siglist.c:147
 msgid "I/O ready"
 msgstr "E/A fertig"
 
-#: siglist.c:150
+#: siglist.c:151
 msgid "CPU limit"
 msgstr "Rechenzeitgrenze"
 
-#: siglist.c:154
+#: siglist.c:155
 msgid "File limit"
 msgstr "Grenze für Dateigröße"
 
-#: siglist.c:158
+#: siglist.c:159
 msgid "Alarm (virtual)"
 msgstr "Alarm (Virtuell)"
 
-#: siglist.c:162
+#: siglist.c:163
 msgid "Alarm (profile)"
 msgstr "Alarm (Profil)"
 
-#: siglist.c:166
+#: siglist.c:167
 msgid "Window changed"
 msgstr "Fenster geändert"
 
-#: siglist.c:170
+#: siglist.c:171
 msgid "Record lock"
 msgstr "Datei blockiert"
 
-#: siglist.c:174
+#: siglist.c:175
 msgid "User signal 1"
 msgstr "Nutzersignal 1"
 
-#: siglist.c:178
+#: siglist.c:179
 msgid "User signal 2"
 msgstr "Nutzersignal 2"
 
-#: siglist.c:182
+#: siglist.c:183
 msgid "HFT input data pending"
 msgstr "HFT Eingabedaten ausstehend"
 
-#: siglist.c:186
+#: siglist.c:187
 msgid "power failure imminent"
 msgstr "Spannungsausfall steht bevor"
 
-#: siglist.c:190
+#: siglist.c:191
 msgid "system crash imminent"
 msgstr "Systemausfall steht bevor"
 
-#: siglist.c:194
+#: siglist.c:195
 msgid "migrate process to another CPU"
 msgstr "Verlege den Prozess auf einen anderen Prozessor"
 
-#: siglist.c:198
+#: siglist.c:199
 msgid "programming error"
 msgstr "Programmierfehler"
 
-#: siglist.c:202
+#: siglist.c:203
 msgid "HFT monitor mode granted"
 msgstr "HFT-Monitormodus erlaubt"
 
-#: siglist.c:206
+#: siglist.c:207
 msgid "HFT monitor mode retracted"
 msgstr "HFT-Monitormodus abgeschaltet"
 
-#: siglist.c:210
+#: siglist.c:211
 msgid "HFT sound sequence has completed"
 msgstr "HFT-Tonfolge beendet"
 
-#: siglist.c:214
+#: siglist.c:215
 msgid "Information request"
 msgstr "Informationsanforderung"
 
 # https://lists.gnu.org/archive/html/bug-bash/2019-09/msg00025.html
-#: siglist.c:222 siglist.c:224
+#: siglist.c:223 siglist.c:225
 #, c-format
 msgid "Unknown Signal #%d"
 msgstr "Unbekanntes Signal Nr.: %d."
 
-#: subst.c:1476 subst.c:1666
+#: subst.c:1480 subst.c:1670
 #, c-format
 msgid "bad substitution: no closing `%s' in %s"
 msgstr "Falsche Ersetzung: Kein schließendes »%s« in »%s« enthalten."
 
-#: subst.c:3281
+#: subst.c:3307
 #, c-format
 msgid "%s: cannot assign list to array member"
 msgstr "%s: Kann einem Feldelement keine Liste zuweisen."
 
-#: subst.c:5910 subst.c:5926
+#: subst.c:6048 subst.c:6064
 msgid "cannot make pipe for process substitution"
 msgstr "Kann keine Pipe für die Prozessersetzung erzeugen."
 
-#: subst.c:5985
+#: subst.c:6124
 msgid "cannot make child for process substitution"
 msgstr "Kann den Kindsprozess für die Prozessersetzung nicht erzeugen."
 
-#: subst.c:6059
+#: subst.c:6198
 #, c-format
 msgid "cannot open named pipe %s for reading"
 msgstr "Kann nicht die benannte Pipe %s zum Lesen öffnen."
 
-#: subst.c:6061
+#: subst.c:6200
 #, c-format
 msgid "cannot open named pipe %s for writing"
 msgstr "Kann nicht die benannte Pipe %s zum Schreiben öffnen."
 
-#: subst.c:6084
+#: subst.c:6223
 #, c-format
 msgid "cannot duplicate named pipe %s as fd %d"
 msgstr "Kann die benannte Pipe %s nicht auf fd %d duplizieren."
 
-#: subst.c:6213
+#: subst.c:6370
 msgid "command substitution: ignored null byte in input"
 msgstr "Kommandoersetzung: NULL-Byte in der Eingabe ignoriert."
 
-#: subst.c:6353
+#: subst.c:6533
 msgid "cannot make pipe for command substitution"
 msgstr "Kann keine Pipes für Kommandoersetzung erzeugen."
 
-#: subst.c:6397
+#: subst.c:6580
 msgid "cannot make child for command substitution"
 msgstr "Kann keinen Unterprozess für die Kommandoersetzung erzeugen."
 
 # interner Fehler
-#: subst.c:6423
+#: subst.c:6613
 msgid "command_substitute: cannot duplicate pipe as fd 1"
 msgstr "command_substitute: Kann Pipe nicht als Dateideskriptor 1 duplizieren."
 
-#: subst.c:6883 subst.c:9952
+#: subst.c:7082 subst.c:10252
 #, c-format
 msgid "%s: invalid variable name for name reference"
 msgstr "%s: Ungültiger Variablenname für Namensreferenz."
 
-#: subst.c:6979 subst.c:6997 subst.c:7169
+#: subst.c:7178 subst.c:7196 subst.c:7369
 #, c-format
 msgid "%s: invalid indirect expansion"
 msgstr "%s: Ungültige indirekte Expansion."
 
-#: subst.c:7013 subst.c:7177
+#: subst.c:7212 subst.c:7377
 #, c-format
 msgid "%s: invalid variable name"
 msgstr "%s: Ungültiger Variablenname."
 
-#: subst.c:7256
+#: subst.c:7478
 #, c-format
 msgid "%s: parameter not set"
 msgstr "%s: Der Parameter ist nicht gesetzt."
 
-#: subst.c:7258
+#: subst.c:7480
 #, c-format
 msgid "%s: parameter null or not set"
 msgstr "%s: Parameter ist leer oder nicht gesetzt."
 
 # interner Fehler
-#: subst.c:7503 subst.c:7518
+#: subst.c:7727 subst.c:7742
 #, c-format
 msgid "%s: substring expression < 0"
 msgstr "%s: Teilstring-Ausdruck < 0."
 
-#: subst.c:9281 subst.c:9302
+#: subst.c:9560 subst.c:9587
 #, c-format
 msgid "%s: bad substitution"
 msgstr "%s: Falsche Substitution."
 
-#: subst.c:9390
+#: subst.c:9678
 #, c-format
 msgid "$%s: cannot assign in this way"
 msgstr "$%s: Kann so nicht zuweisen."
 
-#: subst.c:9814
+#: subst.c:10111
 msgid ""
 "future versions of the shell will force evaluation as an arithmetic "
 "substitution"
@@ -2095,12 +2098,12 @@ msgstr ""
 "Zukünftige Versionen dieser Shell werden das Auswerten arithmetischer "
 "Ersetzungen erzwingen."
 
-#: subst.c:10367
+#: subst.c:10795
 #, c-format
 msgid "bad substitution: no closing \"`\" in %s"
 msgstr "Falsche Ersetzung: Kein schließendes »`« in %s."
 
-#: subst.c:11434
+#: subst.c:11874
 #, c-format
 msgid "no match: %s"
 msgstr "Keine Entsprechung: %s"
@@ -2123,136 +2126,141 @@ msgstr "»)« erwartet."
 msgid "`)' expected, found %s"
 msgstr "»)« erwartet, %s gefunden."
 
-#: test.c:466 test.c:799
+#: test.c:469 test.c:814
 #, c-format
 msgid "%s: binary operator expected"
 msgstr "%s: Zweistelliger (binärer) Operator erwartet."
 
-#: test.c:756 test.c:759
+#: test.c:771 test.c:774
 #, c-format
 msgid "%s: unary operator expected"
 msgstr "%s: Einstelliger (unärer) Operator erwartet."
 
-#: test.c:881
+#: test.c:896
 msgid "missing `]'"
 msgstr "Fehlende »]«"
 
-#: test.c:899
-#, fuzzy, c-format
+#: test.c:914
+#, c-format
 msgid "syntax error: `%s' unexpected"
-msgstr "Syntax Fehler: unerwartetes `;'."
+msgstr "Syntax Fehler: »%s« unerwartet."
 
 #: trap.c:220
 msgid "invalid signal number"
 msgstr "Ungültige Signalnummer."
 
-#: trap.c:325
+#: trap.c:323
 #, c-format
 msgid "trap handler: maximum trap handler level exceeded (%d)"
 msgstr "Traphandler: Maximale Traphandler-Ebene überschritten (%d)"
 
-#: trap.c:414
+#: trap.c:412
 #, c-format
 msgid "run_pending_traps: bad value in trap_list[%d]: %p"
 msgstr "run_pending_traps: Ungültiger Wert in trap_list[%d]: %p"
 
-#: trap.c:418
+#: trap.c:416
 #, c-format
 msgid ""
 "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
 msgstr ""
 
 # Programmierfehler
-#: trap.c:487
+#: trap.c:509
 #, c-format
 msgid "trap_handler: bad signal %d"
 msgstr "trap_handler: Falsches Signal %d."
 
-#: variables.c:421
+#: variables.c:424
 #, c-format
 msgid "error importing function definition for `%s'"
 msgstr "Fehler beim Importieren der Funktionsdefinition für »%s«."
 
-#: variables.c:833
+#: variables.c:838
 #, c-format
 msgid "shell level (%d) too high, resetting to 1"
 msgstr "Der Shell-Level (%d) ist zu hoch und wird auf 1 zurückgesetzt."
 
-#: variables.c:2674
+#: variables.c:2642
 msgid "make_local_variable: no function context at current scope"
 msgstr "make_local_variable: no function context at current scope"
 
-#: variables.c:2693
+#: variables.c:2661
 #, c-format
 msgid "%s: variable may not be assigned value"
 msgstr "%s: Der Variable darf kein Wert zugewiesen werden."
 
+#: variables.c:2818 variables.c:2874
+#, c-format
+msgid "%s: cannot inherit value from incompatible type"
+msgstr ""
+
 # Interner Fehler
-#: variables.c:3475
+#: variables.c:3459
 #, c-format
 msgid "%s: assigning integer to name reference"
 msgstr "%s: assigning integer to name reference"
 
 # Interner Fehler
-#: variables.c:4404
+#: variables.c:4390
 msgid "all_local_variables: no function context at current scope"
 msgstr "all_local_variables: no function context at current scope"
 
 # Interner Fehler
-#: variables.c:4771
+#: variables.c:4757
 #, c-format
 msgid "%s has null exportstr"
 msgstr "%s has null exportstr"
 
 # Interner Fehler
-#: variables.c:4776 variables.c:4785
+#: variables.c:4762 variables.c:4771
 #, c-format
 msgid "invalid character %d in exportstr for %s"
 msgstr "invalid character %d in exportstr for %s"
 
 # Interner Fehler
-#: variables.c:4791
+#: variables.c:4777
 #, c-format
 msgid "no `=' in exportstr for %s"
 msgstr "no `=' in exportstr for %s"
 
 # Interner Fehler
-#: variables.c:5331
+#: variables.c:5317
 msgid "pop_var_context: head of shell_variables not a function context"
 msgstr "pop_var_context: head of shell_variables not a function context"
 
 # Interner Fehler
-#: variables.c:5344
+#: variables.c:5330
 msgid "pop_var_context: no global_variables context"
 msgstr "pop_var_context: no global_variables context"
 
 # Interner Fehler
-#: variables.c:5424
+#: variables.c:5410
 msgid "pop_scope: head of shell_variables not a temporary environment scope"
 msgstr "pop_scope: head of shell_variables not a temporary environment scope"
 
 # Interner Fehler
-#: variables.c:6387
+#: variables.c:6400
 #, c-format
 msgid "%s: %s: cannot open as FILE"
 msgstr "%s: %s: cannot open as FILE"
 
 # Interner Fehler
-#: variables.c:6392
+#: variables.c:6405
 #, c-format
 msgid "%s: %s: invalid value for trace file descriptor"
 msgstr "%s: %s: invalid value for trace file descriptor"
 
 # Interner Fehler
-#: variables.c:6437
+#: variables.c:6450
 #, c-format
 msgid "%s: %s: compatibility value out of range"
 msgstr "%s: %s: compatibility value out of range"
 
 #: version.c:46 version2.c:46
 #, fuzzy
-msgid "Copyright (C) 2020 Free Software Foundation, Inc."
-msgstr "Copyright (C) 2018 Free Software Foundation, Inc."
+msgid "Copyright (C) 2022 Free Software Foundation, Inc."
+msgstr "Copyright (C) 2020 Free Software Foundation, Inc."
 
 #: version.c:47 version2.c:47
 msgid ""
@@ -2342,14 +2350,18 @@ msgstr "command [-pVv] Kommando [Argument ...]"
 
 #: builtins.c:78
 #, fuzzy
-msgid "declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]"
-msgstr "declare [-aAfFgilrntux] [-p] [Name[=Wert] ...]"
+msgid ""
+"declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] "
+"[name ...]"
+msgstr "declare [-aAfFgiIlrntux] [-p] [Name[=Wert] ...]"
 
 #
 #: builtins.c:80
 #, fuzzy
-msgid "typeset [-aAfFgiIlnrtux] [-p] name[=value] ..."
-msgstr "typeset [-aAfFgilnrtux] [-p] Name[=Wert] ..."
+msgid ""
+"typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] "
+"[name ...]"
+msgstr "typeset [-aAfFgiIlnrtux] [-p] Name[=Wert] ..."
 
 #: builtins.c:82
 msgid "local [option] name[=value] ..."
@@ -2373,15 +2385,13 @@ msgstr "eval [Argument ...]"
 
 # https://lists.gnu.org/archive/html/bug-bash/2019-09/msg00026.html
 #: builtins.c:96
-#, fuzzy
 msgid "getopts optstring name [arg ...]"
-msgstr "getopts Optionen Variable [Argumente]"
+msgstr "getopts Optionen [Argumente ...]"
 
 # https://lists.gnu.org/archive/html/bug-bash/2019-09/msg00026.html
 #: builtins.c:98
-#, fuzzy
 msgid "exec [-cl] [-a name] [command [argument ...]] [redirection ...]"
-msgstr "exec [-cl] [-a Name] [Kommando [Argumente ...]] [Umleitung ...]"
+msgstr "exec [-cl] [-a Name] [Kommando [Argument ...]] [Umleitung ...]"
 
 #: builtins.c:100
 msgid "exit [n]"
@@ -2454,7 +2464,8 @@ msgid "return [n]"
 msgstr "return [n]"
 
 #: builtins.c:142
-msgid "set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]"
+#, fuzzy
+msgid "set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]"
 msgstr "set [-abefhkmnptuvxBCHP] [-o Option] [--] [Argument ...]"
 
 #: builtins.c:144
@@ -2502,7 +2513,8 @@ msgid "type [-afptP] name [name ...]"
 msgstr "type [-afptP] Name [Name ...]"
 
 #: builtins.c:171
-msgid "ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]"
+#, fuzzy
+msgid "ulimit [-SHabcdefiklmnpqrstuvxPRT] [limit]"
 msgstr "ulimit [-SHabcdefiklmnpqrstuvxPT] [Grenze]"
 
 #: builtins.c:174
@@ -2510,9 +2522,8 @@ msgid "umask [-p] [-S] [mode]"
 msgstr "umask [-p] [-S] [Modus]"
 
 #: builtins.c:177
-#, fuzzy
 msgid "wait [-fn] [-p var] [id ...]"
-msgstr "wait [-fn] [id ...]"
+msgstr "wait [-fn] [-p Variable] [id ...]"
 
 #: builtins.c:181
 msgid "wait [pid ...]"
@@ -2547,11 +2558,13 @@ msgstr ""
 "Kommandos; ] fi"
 
 #: builtins.c:196
-msgid "while COMMANDS; do COMMANDS; done"
+#, fuzzy
+msgid "while COMMANDS; do COMMANDS-2; done"
 msgstr "while Kommandos; do Kommandos; done"
 
 #: builtins.c:198
-msgid "until COMMANDS; do COMMANDS; done"
+#, fuzzy
+msgid "until COMMANDS; do COMMANDS-2; done"
 msgstr "until Kommandos; do Kommandos; done"
 
 #: builtins.c:200
@@ -2604,28 +2617,25 @@ msgstr "printf [-v var] Format [Argumente]"
 
 # https://lists.gnu.org/archive/html/bug-bash/2019-09/msg00027.html
 #: builtins.c:231
-#, fuzzy
 msgid ""
 "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-"
 "W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S "
 "suffix] [name ...]"
 msgstr ""
-"complete [-abcdefgjksuv] [-pr] [-DE] [-o Option] [-A Aktion]\n"
-"         [-G Suchmuster] [-W Wortliste]  [-F Funktion] [-C Kommando]\n"
-"         [-X Filtermuster] [-P Prefix] [-S Suffix] [Name ...]"
+"complete [-abcdefgjksuv] [-pr] [-DEI] [-o Option] [-A Aktion] [-G "
+"Suchmuster] [-W Wortliste]  [-F Funktion] [-C Kommando] [-X Filtermuster] [-"
+"P Prefix] [-S Suffix] [Name \n"
+"...]"
 
 # https://lists.gnu.org/archive/html/bug-bash/2019-09/msg00027.html
 #: builtins.c:235
-#, fuzzy
 msgid ""
 "compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-"
 "F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]"
 msgstr ""
 "compgen [-abcdefgjksuv] [-o Option] [-A Aktion] [-G Suchmuster] [-W "
-"Wortliste]\n"
-"        [-F Funktion] [-C Kommando] [-X Filtermuster] [-P Prefix] [-S "
-"Suffix]\n"
-"        [Wort]"
+"Wortliste] [-F Funktion] [-C Kommando] [-X Filtermuster] [-P Prefix] [-S "
+"Suffix] [Wort]"
 
 #: builtins.c:239
 msgid "compopt [-o|+o option] [-DEI] [name ...]"
@@ -3095,7 +3105,6 @@ msgstr ""
 
 # declare
 #: builtins.c:490
-#, fuzzy
 msgid ""
 "Set variable values and attributes.\n"
 "    \n"
@@ -3149,6 +3158,10 @@ msgstr ""
 "                und Quelldatei beim Debuggen).\n"
 "      -g        Deklariert globale Varieblen innerhalb einer\n"
 "                Shellfunktion; wird ansonsten ignoriert.\n"
+"      -I        Eine neue lokale Variable erhält die Attribute und Werte "
+"der\n"
+"                Variable mit gleichen Namen im vorherigen "
+"Gültigkeitsbereich. \n"
 "      -p        Zeigt die Attribute und Werte jeder angegebenen\n"
 "                Variable an.\n"
 "\n"
@@ -3156,13 +3169,12 @@ msgstr ""
 "      -a\tDeklariert ein indiziertes Feld (wenn unterstützt).\n"
 "      -A\tDeklariert ein assoziatives Feld (wenn unterstützt).\n"
 "      -i\tDeklariert eine ganzzahlige Variable.\n"
-"      -l\tKonvertiert die Variabennmamen in Kleinbuchstaben.\n"
+"      -l\tKonvertiert die übergebenen Werte zu Kleinbuchstaben.\n"
 "      -n\tDer Name wird als Variable interpretiert. \n"
 "      -r\tDeklariert nur lesbare Variablen.\n"
 "      -t\tWeist das Attribut »trace« zu.\n"
-"      -u\tKonvertiert die Variablennamen in Großbuchstaben.\n"
-"      -x\tExportiert die Variablen über die aktuelle Shell-\n"
-"                Umgebung hinaus.\n"
+"      -u\tKonvertiert die übergebenen Werte in Großbuchstaben.\n"
+"      -x\tExportiert die Variablen.\n"
 "\n"
 "    Das Voranstellen von »+« anstelle von »-« schaltet die angegebenen\n"
 "    Attribute ab.\n"
@@ -3387,7 +3399,6 @@ msgstr ""
 
 # getopts
 #: builtins.c:652
-#, fuzzy
 msgid ""
 "Parse option arguments.\n"
 "    \n"
@@ -3429,7 +3440,7 @@ msgid ""
 msgstr ""
 "Verarbeitet Optionsargumente.\n"
 "\n"
-"    Getopts wird von Shell-Prozeduren verwendet, um die\n"
+"    Getopts wird von Shellprozeduren verwendet, um die\n"
 "    Kommandozeilenoptionen auszuwerten.\n"
 "\n"
 "    \"Optionen\" enthält die auszuwertenden Buchstaben. Ein Doppelpunkt\n"
@@ -3569,6 +3580,31 @@ msgid ""
 "    Returns success or status of executed command; non-zero if an error "
 "occurs."
 msgstr ""
+"Anzeigen oder Ausführen von Befehlen aus der History-Liste.\n"
+"    \n"
+"    fc wird verwendet, um Befehle aus der History-Liste aufzulisten,\n"
+"    zu bearbeiten und erneut auszuführen.  FIRST und LAST können\n"
+"    Zahlen sein, die den Bereich angeben, oder FIRST kann eine\n"
+"    Zeichenkette sein, was bedeutet, dass der jüngste Befehl mit\n"
+"    dieser Zeichenfolge beginnt.\n"
+"    \n"
+"    Optionen:\n"
+"      -e ENAME Auswahl des zu verwendenden Editors.  Standard sind FCEDIT,\n"
+"         dann EDITOR, dann vi.\n"
+"      -l Zeilen auflisten statt bearbeiten.\n"
+"      -n Zeilennummern beim Auflisten weglassen.\n"
+"      -r kehrt die Reihenfolge der Zeilen um (die neuesten Zeilen zuerst).\n"
+"    \n"
+"    Mit `fc -s [pat=rep ...] [command]' wird COMMAND erneut\n"
+"    ausgeführt, nachdem die Ersetzung OLD=NEW durchgeführt wurde.\n"
+"    \n"
+"    Ein nützlicher Alias ist r='fc -s', so dass die Eingabe von `r cc'\n"
+"    den letzten Befehl ausführt, der mit \"cc\" beginnt, und die Eingabe\n"
+"    von \"r\" den letzten Befehl erneut ausführt.\n"
+"    \n"
+"    Exit-Status:\n"
+"    Gibt den Erfolg oder den Status des ausgeführten Befehls zurück;\n"
+"    ungleich Null, wenn ein Fehler auftritt."
 
 #: builtins.c:764
 msgid ""
@@ -3612,6 +3648,7 @@ msgstr ""
 "    Immer Erfolg, außer wenn die Jobsteuerung nicht verfügbar ist\n"
 "    oder ein Fehler auftritt."
 
+# hash
 #: builtins.c:793
 msgid ""
 "Remember or display program locations.\n"
@@ -3635,6 +3672,31 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless NAME is not found or an invalid option is given."
 msgstr ""
+"Programpfade merken oder anzeigen.\n"
+"    \n"
+"    Ermittelt und speichert den vollständigen Pfadnamen jedes\n"
+"    Kommandos NAME.  Wenn keine Argumente angegeben werden, werden\n"
+"    Informationen über gespeicherte Kommandod angezeigt.\n"
+"    \n"
+"    Optionen:\n"
+"      -d Vergessen des Speicherortes für jeden NAME\n"
+"      -l Anzeige in einem Format, das als Eingabe wiederverwendet werden "
+"kann\n"
+"      -p Pfadname verwendet PATHNAME als den vollständigen Pfadnamen von "
+"NAME\n"
+"      -r vergisst alle gespeicherten Pfade\n"
+"      \n"
+"      -t gibt den Speicherort jedes NAMENS aus, wobei jedem\n"
+"         Speicherort der entsprechende NAME vorangestellt wird,\n"
+"         wenn mehrere NAMEs angegeben sind\n"
+"                \n"
+"    Argumente:\n"
+"        NAME    Jeder NAME wird in $PATH gesucht und in die Liste\n"
+"        der gespeicherten Befehle hinzugefügt.\n"
+"    \n"
+"    Exit-Status:\n"
+"    Gibt Erfolg zurück, es sei denn, NAME wird nicht gefunden oder es\n"
+"    wird eine ungültige Option angegeben."
 
 # help
 #: builtins.c:818
@@ -3678,6 +3740,7 @@ msgstr ""
 "    Erfolg, außer wenn das Muster nicht gefunden oder eine ungültige Option\n"
 "    angegeben wurde."
 
+# history
 #: builtins.c:842
 msgid ""
 "Display or manipulate the history list.\n"
@@ -3712,7 +3775,42 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless an invalid option is given or an error occurs."
 msgstr ""
+"Zeigt die Verlaufsliste an oder bearbeitet sie.\n"
+"    \n"
+"    Zeigt die Verlaufsliste mit Zeilennummern an und stellt jedem\n"
+"    geänderten Eintrag ein `*' vorangestellt.  Ein Argument von N\n"
+"    listet nur die letzten N Einträge auf.\n"
+"    \n"
+"    Optionen:\n"
+"      -c Löscht die Verlaufsliste, indem alle Einträge gelöscht werden.\n"
+"      -d offset löscht den Verlaufseintrag an der Position\n"
+"         OFFSET. Negative Offsets zählen vom Verlaufslistenende\n"
+"         zurück.\n"
+"      -a Anhängen vom Verlauf dieser Sitzung an die Verlaufsdatei.\n"
+"      -n alle nicht bereits aus der Verlaufsdatei gelesenen.\n"
+"         Verlaufszeilen lesen und an die Verlaufsliste anhängen.\n"
+"      -r liest die Verlaufsdatei und hängt den Inhalt an die\n"
+"         Verlaufsliste an.\n"
+"      -w schreibt den aktuellen Verlauf in die Verlaufsdatei.\n"
+"      -p führt eine Verlaufserweiterung für jedes ARG durch und zeigt\n"
+"         das Ergebnis an, ohne es in der Verlaufslise einzutragen.\n"
+"      -s die ARGs als einen einzigen Eintrag an die History-Liste anhängen.\n"
+"    \n"
+"    Wenn FILENAME angegeben ist, wird dieser als History-Datei verwendet.\n"
+"    Andernfalls, wenn HISTFILE einen Wert hat, wird dieser verwendet,\n"
+"    sonst ~/.bash_history.\n"
+"    \n"
+"    Wenn die Variable HISTTIMEFORMAT gesetzt und nicht null ist, wird\n"
+"    ihr Wert verwendet als Formatierungszeichenfolge für strftime(3)\n"
+"    verwendet, um den Zeitstempel zu Zeitstempel für jeden angezeigten\n"
+"    History-Eintrag zu drucken.  Andernfalls werden keine Zeitstempel\n"
+"    gedruckt.\n"
+"    \n"
+"    Rückgabewert:\n"
+"    Gibt einen Erfolg zurück, es sei denn, es wurde eine ungültige\n"
+"    Option angegeben oder es ist ein Fehler aufgetreten."
 
+# jobs
 #: builtins.c:879
 msgid ""
 "Display status of jobs.\n"
@@ -3736,7 +3834,30 @@ msgid ""
 "    Returns success unless an invalid option is given or an error occurs.\n"
 "    If -x is used, returns the exit status of COMMAND."
 msgstr ""
+"Auftragstatus anzeigen.\n"
+"    \n"
+"    Listet die aktiven Aufträge auf.  JOBSPEC schränkt die Ausgabe auf\n"
+"    diesen Auftrag ein.  Ohne Optionen werden die Status der aktiven\n"
+"    Aufträge angezeigt.\n"
+"    \n"
+"    Optionen:\n"
+"      -l zeigt zusätzlich auch die Prozessnummern an.\n"
+"      -n zeigt nur die Prozesse an, deren Status sich seit der letzten\n"
+"         Benachrichtigung geändert haben.\n"
+"      -p zeigt nur Prozessnummern an.\n"
+"      -r zeigt nur laufende Aufträge an.\n"
+"      -s zeigt nur gestoppte Aufträge an\n"
+"    \n"
+"    Mit der Option -x wird COMMAND ausgeführt, nachdem alle in ARGS\n"
+"    enthaltenen Auftragsspezifikationen durch die zugehörigen\n"
+"    Prozesnummern ersetzt worden sind.\n"
+"    \n"
+"    Rückgabewert:\n"
+"    Gibt einen Erfolg zurück, es sei denn, es wurde eine ungültige\n"
+"    Option angegeben oder es ist ein Fehler aufgetreten.  Wenn -x\n"
+"    verwendet wird, wird der Rückgebewert von COMMAND zurückgegeben."
 
+# disown
 #: builtins.c:906
 msgid ""
 "Remove jobs from current shell.\n"
@@ -3753,7 +3874,23 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless an invalid option or JOBSPEC is given."
 msgstr ""
+"Entfernt Aufträge aus der aktuellen Shell.\n"
+"    \n"
+"    Entfernt jedes JOBSPEC-Argument aus der Tabelle der aktiven\n"
+"    Aufträge. Ohne JOBSPECs verwendet die Shell ihre Vorstellung vom\n"
+"    aktuellen Auftrag.\n"
+"    \n"
+"    Optionen:\n"
+"      -a entfernt alle Aufträge, wenn JOBSPEC nicht angegeben wird.\n"
+"      -h JOBSPEC maskieren, so dass der Auftrag kein SIGHUP erhält,\n"
+"         wenn die Shell ein SIGHUP empfängt.\n"
+"      -r entfernt nur laufende Aufträge.\n"
+"    \n"
+"    Beenden Status:\n"
+"    Gibt Erfolg zurück, außer wenn eine ungültige Option oder\n"
+"    JOBSPEC angegeben wurde."
 
+# kill
 #: builtins.c:925
 msgid ""
 "Send a signal to a job.\n"
@@ -3776,6 +3913,27 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless an invalid option is given or an error occurs."
 msgstr ""
+"Sendet ein Signal an einen Auftrag.\n"
+"    \n"
+"    Sendet den durch PID oder JOBSPEC identifizierten Prozessen das\n"
+"    mit SIGSPEC oder SIGNUM anggebene Signal. Wenn weder SIGSPEC\n"
+"    noch SIGNUM angegeben sind, dann wird wird SIGTERM gesendet.\n"
+"    \n"
+"    Optionen:\n"
+"      -s sig SIG ist ein Signalname.\n"
+"      -n sig SIG ist eine Signalnummer.\n"
+"      -l listet die Signalnamen auf. Wenn Argumente auf `-l' folgen,\n"
+"         werden für diese Signalnummern die Namen aufgelistet.\n"
+"      -L Synonym für -l.\n"
+"    \n"
+"    Kill ist ein in die Shell eingebaute Funktion, da diese erlaubt,\n"
+"    Auftrags- statt Prozessnummern anzugeben. Weierhin kann Kill\n"
+"    Prozesse auch dann beenden, wenn die maximal erlaubte\n"
+"    Prozessanzahl erreicht ist.\n"
+"    \n"
+"    Exit-Status:\n"
+"    Gibt Erfolg zurück, es sei denn, es wurde eine ungültige Option\n"
+"    angegeben oder es ist ein Fehler aufgetreten."
 
 #: builtins.c:949
 msgid ""
@@ -3821,8 +3979,52 @@ msgid ""
 "    Exit Status:\n"
 "    If the last ARG evaluates to 0, let returns 1; let returns 0 otherwise."
 msgstr ""
+"Auswerten arithmetischer Ausdrücke.\n"
+"    \n"
+"    Jedes ARG wird als arithmetischer Ausdruck ausgewertet.  Die\n"
+"    Auswertung erfolgt in Ganzzahlen mit fester Breite ohne\n"
+"    Überprüfung auf Überlauf. Division durch 0 wird abgefangen und als\n"
+"    Fehler gekennzeichnet.  Die folgende Liste von Operatoren ist in\n"
+"    abnehmender Präferenz nach gleichrangigen Operatoren gruppiert.\n"
+"    \n"
+"    \tid++, id-- Variable post-increment, post-decrement\n"
+"    \t++id, --id Variable pre-increment, pre-decrement\n"
+"    \t-, + unäres Minus, Plus\n"
+"    \t!, ~ logische und bitweise Negation\n"
+"    \t** Potenzierung\n"
+"    \t*, /, % Multiplikation, Division, Rest\n"
+"    \t+, - Addition, Subtraktion\n"
+"    \t<<, >> bitweise Links- und Rechtsverschiebung\n"
+"    \t<=, >=, <, > Vergleich\n"
+"    \t==, != Gleichheit, Ungleichheit\n"
+"    \t& bitweises UND\n"
+"    \t^ bitweises XOR\n"
+"    \t| bitweises ODER\n"
+"    \t&& logisches UND\n"
+"    \t|| logisches OR\n"
+"    \texpr ? expr : expr\n"
+"               Bedingte Ausführung\n"
+"    \t=, *=, /=, %=,\n"
+"    \t+=, -=, <<=, >>=,\n"
+"    \t&=, ^=, |= Zuweisung\n"
+"    \n"
+"    Shell-Variablen sind als Operanden zulässig. Der Variablenname\n"
+"    wird innerhalb eines Ausdrucks durch seinen Wert (der in eine\n"
+"    Ganzzahl mit fester Breite umgewandelt wird) ersetzt.  Das\n"
+"    Integer-Attribut der Variablen muss nicht eingeschaltet sein, um\n"
+"    in einem Ausdruck verwendet zu werden.\n"
+"    \n"
+"    Die Operatoren werden in der Reihenfolge ihres Vorrangs\n"
+"    ausgewertet. Unterausdrücke in Klammern werden zuerst ausgewertet\n"
+"    und können die obigen Rangfolge Regeln außer Kraft setzen.\n"
+"    \n"
+"    Rückgabewert:\n"
+"    Wenn der letzte ARG 0 ergibt, gibt let 1 zurück; andernfalls gibt let 0 "
+"zurück."
 
+# read
 #: builtins.c:994
+#, fuzzy
 msgid ""
 "Read a line from the standard input and split it into fields.\n"
 "    \n"
@@ -3833,7 +4035,9 @@ msgid ""
 "    word to the second NAME, and so on, with any leftover words assigned to\n"
 "    the last NAME.  Only the characters found in $IFS are recognized as "
 "word\n"
-"    delimiters.\n"
+"    delimiters. By default, the backslash character escapes delimiter "
+"characters\n"
+"    and newline.\n"
 "    \n"
 "    If no NAMEs are supplied, the line read is stored in the REPLY "
 "variable.\n"
@@ -3873,8 +4077,53 @@ msgid ""
 "occurs,\n"
 "    or an invalid file descriptor is supplied as the argument to -u."
 msgstr ""
+"Liest eine Zeile von der Standardeingabe und teilt sie in Felder auf.\n"
+"    \n"
+"    Liest eine einzelne Zeile aus der Standardeingabe oder vom\n"
+"    Dateideskriptor FD wenn die Option -u angegeben ist.  Die Zeile\n"
+"    wird wie bei der Wortaufteilung in Felder aufgeteilt aufgeteilt,\n"
+"    und das erste Wort wird dem ersten NAME zugewiesen, das zweite\n"
+"    NAME zugewiesen, das zweite Wort dem zweiten NAME usw., wobei alle\n"
+"    verbleibenden Wörter dem dem letzten NAME zugeordnet werden. Die\n"
+"    in $IFS enthaltenen Zeichen werden als Worttrennzeichen verwendet.\n"
+"    \n"
+"    Wenn keine NAMEn angegeben werden, wird die gelesene Zeile in der\n"
+"    REPLY-Variablen gespeichert.\n"
+"    \n"
+"    Optionen:\n"
+"      -a array weist die gelesenen Wörter den aufeinanderfolgenden\n"
+"               Indizes der Array Variable ARRAY, beginnend bei Null.\n"
+"      -d delim fortfahren, bis das erste Zeichen von DELIM gelesen\n"
+"               wird, anstelle von statt Newline.\n"
+"      -e Readline verwenden, um die Zeile zu lesen.\n"
+"      -i text TEXT als Anfangstext für Readline verwenden.\n"
+"      -n nchars Liest maximal NCHARS Zeichen, ohne ein Zeilenumbruch\n"
+"    \t\tzu suchen. Worttrennzeichen werden ausgewertet.\n"
+"      -N nchars Liest genau NCHARS Zeichen, bis EOF oder einer\n"
+"    \t\tZeitüberschreitung. Worttrennzeichen werden ignoriert.\n"
+"      -p prompt Gibt vor dem Lesen die Zeichenkette PROMPT ohne einen\n"
+"    \t\tabschließenden Zeilenumbruch aus.\n"
+"      -r        lässt keine Backslashes als Escape-Zeichen zu\n"
+"      -s        keine Echo-Eingabe von einem Terminal\n"
+"      -t timeout\n"
+"                Zeitüberschreitung und Rückgabe eines Fehlers, wenn\n"
+"    \t\teine vollständige Eingabezeile nicht innerhalb von\n"
+"    \t\tTIMEOUT Sekunden gelesen wird. Die TMOUT Variable\n"
+"    \t\tenthält das Standard-Timeout.  TIMEOUT kann als\n"
+"    \t\tBruchteil angegeben werden.  Wenn TIMEOUT gleich 0\n"
+"    \t\tist, werden keine daten geleden und gibt Erfolg\n"
+"    \t\tzurück, wenn Daten dem angegebenen Dateideskriptor\n"
+"    \t\tverfügbar sind.  Der Rückgabewert ist größer als 128,\n"
+"    \t\twenn die Zeitüberschreitung abgelaufen ist.\n"
+"      -u fd Lesen von Dateideskriptor FD statt von der Standardeingabe\n"
+"    \n"
+"    Rückgabewert: \n"
+"    Der Rückgabewert ist Null. Es sei denn, das Dateiende wurde\n"
+"    erreicht, die Lesezeit überschritten (in diesem Fall ist er größer\n"
+"    als 128), ein Variablenzuweisungsfehler tritt auf oder ein\n"
+"    ungültiger Dateideskriptor wurde als Argument von -u übergeben."
 
-#: builtins.c:1041
+#: builtins.c:1042
 msgid ""
 "Return from a shell function.\n"
 "    \n"
@@ -3885,8 +4134,19 @@ msgid ""
 "    Exit Status:\n"
 "    Returns N, or failure if the shell is not executing a function or script."
 msgstr ""
+"Rückkehr aus einer Shell-Funktion.\n"
+"    \n"
+"    Bewirkt, dass eine Funktion oder ein geladenes Skript mit dem\n"
+"    durch N angegebenen Rückgabewert beendet wird.  Wenn N weggelassen\n"
+"    wird, wird als Rückgabewert der des zuletzt ausgeführten Befehls\n"
+"    verwendet.\n"
+"    \n"
+"    Rückgabewert:\n"
+"    Gibt N zurück, oder einen Fehler, wenn return außerhalb einer Funktion\n"
+"    oder Skript aufgerufen wird."
 
-#: builtins.c:1054
+# set
+#: builtins.c:1055
 msgid ""
 "Set or unset values of shell options and positional parameters.\n"
 "    \n"
@@ -3971,8 +4231,99 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless an invalid option is given."
 msgstr ""
+"Setzen oder Aufheben von Shell-Optionen und Positionsparametern.\n"
+"    \n"
+"    Den Wert von Shell-Attributen und Positionsparametern ändern, oder\n"
+"    die Namen und Werte von Shell-Variablen anzeigen.\n"
+"    \n"
+"    Optionen:\n"
+"      -a Markieren von Variablen die geändert oder erstellt wurden, für den "
+"Export.\n"
+"      -b Sofortige Benachrichtigung über das Auftragsende.\n"
+"      -e Sofortiger Abbruch, wenn ein Befehl mit einem Status ungleich Null "
+"beendet wird.\n"
+"      -f Deaktiviert das Generieren von Dateinamen (globbing).\n"
+"      -h Merkt sich den Speicherort von Befehlen, wenn sie nachgeschlagen "
+"werden.\n"
+"      -k Alle Zuweisungsargumente werden in die Umgebung für einen\n"
+"         Befehl in die Umgebung aufgenommen, nicht nur diejenigen,\n"
+"         die dem Befehl vorangestellt sind.\n"
+"      -m Die Auftragskontrolle ist aktiviert.\n"
+"      -n Befehle lesen, aber nicht ausführen.\n"
+"      -o Optionsname\n"
+"          Setzt die Variable, die dem Optionsname entspricht:\n"
+"              allexport wie -a\n"
+"              braceexpand wie -B\n"
+"              emacs verwendet eine emacsähnliche Schnittstelle zur "
+"Zeilenbearbeitung\n"
+"              errexit gleich wie -e\n"
+"              errtrace dasselbe wie -E\n"
+"              functrace dasselbe wie -T\n"
+"              hashall dasselbe wie -h\n"
+"              histexpand gleich wie -H\n"
+"              history Befehlshistorie aktivieren\n"
+"              ignoreeof die Shell wird beim Lesen von EOF nicht beendet\n"
+"              interaktive-Kommentare\n"
+"                           erlaubt das Erscheinen von Kommentaren in "
+"interaktiven Befehlen\n"
+"              keyword dasselbe wie -k\n"
+"              monitor gleich wie -m\n"
+"              noclobber dasselbe wie -C\n"
+"              noexec gleich wie -n\n"
+"              noglob gleich wie -f\n"
+"              nolog wird derzeit akzeptiert, aber ignoriert\n"
+"              notify gleich wie -b\n"
+"              nounset dasselbe wie -u\n"
+"              onecmd dasselbe wie -t\n"
+"              physical wie -P\n"
+"              pipefail der Rückgabewert einer Pipeline ist der Status\n"
+"                       des des letzten Befehls, der mit einem Status\n"
+"                       ungleich Null beendet wurde, oder Null, wenn\n"
+"                       kein Befehl mit einem Status ungleich Null\n"
+"                       beendet wurde.\n"
+"             posix     Ändert das Verhalten von bash, wo die Standard\n"
+"                       Operation vom Posix-Standard abweicht, um mit\n"
+"                       dem Standard übereinstimmen.\n"
+"              privilegiert gleich wie -p\n"
+"              verbose dasselbe wie -v\n"
+"              vi eine vi-ähnliche Schnittstelle zur Zeilenbearbeitung "
+"verwenden\n"
+"              xtrace dasselbe wie -x\n"
+"      -p Wird eingeschaltet, wenn die realen und effektiven\n"
+"         Benutzerkennungen nicht übereinstimmen.  Deaktiviert die\n"
+"         Verarbeitung der $ENV-Datei und das Importieren von Shell\n"
+"         Funktionen.  Wenn diese Option ausgeschalten ist, werden die\n"
+"         effektive uid und gid auf die reale uid und gid gesetzt. \n"
+"      -t Beenden nach dem Lesen und Ausführen eines Befehls.\n"
+"      -u Nicht gesetzte Variablen beim Substituieren als Fehler behandeln.\n"
+"      -v Shell-Eingabezeilen ausgeben, wenn sie gelesen werden.\n"
+"      -x Befehle und ihre Argumente ausgeben, wenn sie ausgeführt werden.\n"
+"      -B Die Shell führt eine Klammererweiterung durch\n"
+"      -C Dateien werden bei Ausgabeumleitung nicht überschrieben.\n"
+"      -E Wenn gesetzt, wird die Fehlerfalle (trap) an Shell-Funktionen "
+"vererbt.\n"
+"      -H Aktiviert die !-Stil Verlaufsersetzung.  Diese Option ist\n"
+"         bei einer interaktiven Shell standardmäßig aktiviert.\n"
+"      -P Symbolische Links werden nicht aufgelöst, wenn Befehle wie\n"
+"         z.B. cd, das aktuelle Verzeichnis ändern.\n"
+"      -T DEBUG und RETURN Fallen (trap) werden an Shellfunktionen vererbt.\n"
+"      -- Weist alle verbleibenden Argumente den Positionsparametern\n"
+"         zu.  Sind keine Argumente verblieben, werden die\n"
+"         Positionsparameter nicht gesetzt.\n"
+"      - Weist alle verbleibenden Argumente den Positionsparametern zu.\n"
+"        Die Optionen -x und -v sind ausgeschaltet.\n"
+"    \n"
+"    Durch Verwenden von + anstelle von - werden Option ausgeschaltet.\n"
+"    Die Optionen können auch beim Shellaufruf verwendet werden.  Die\n"
+"    aktuelle aktiven Optionen sind in $- gespeichert.  Die restlichen\n"
+"    n ARGs sind positionale Parameter und werden der Reihe nach $1,\n"
+"    $2, ... $n zugewiesen.  Wenn keine ARGs angegeben werden, werden\n"
+"    alle Shell-Variablen ausgegeben.\n"
+"    \n"
+"    Rückgabewert:\n"
+"    Gibt Erfolg zurück, es sei denn, eine ungültige Option wurde angegeben."
 
-#: builtins.c:1139
+#: builtins.c:1140
 msgid ""
 "Unset values and attributes of shell variables and functions.\n"
 "    \n"
@@ -3994,7 +4345,7 @@ msgid ""
 "    Returns success unless an invalid option is given or a NAME is read-only."
 msgstr ""
 
-#: builtins.c:1161
+#: builtins.c:1162
 msgid ""
 "Set export attribute for shell variables.\n"
 "    \n"
@@ -4013,7 +4364,7 @@ msgid ""
 "    Returns success unless an invalid option is given or NAME is invalid."
 msgstr ""
 
-#: builtins.c:1180
+#: builtins.c:1181
 msgid ""
 "Mark shell variables as unchangeable.\n"
 "    \n"
@@ -4034,7 +4385,7 @@ msgid ""
 "    Returns success unless an invalid option is given or NAME is invalid."
 msgstr ""
 
-#: builtins.c:1202
+#: builtins.c:1203
 msgid ""
 "Shift positional parameters.\n"
 "    \n"
@@ -4045,7 +4396,7 @@ msgid ""
 "    Returns success unless N is negative or greater than $#."
 msgstr ""
 
-#: builtins.c:1214 builtins.c:1229
+#: builtins.c:1215 builtins.c:1230
 msgid ""
 "Execute commands from a file in the current shell.\n"
 "    \n"
@@ -4059,7 +4410,7 @@ msgid ""
 "    FILENAME cannot be read."
 msgstr ""
 
-#: builtins.c:1245
+#: builtins.c:1246
 msgid ""
 "Suspend shell execution.\n"
 "    \n"
@@ -4073,7 +4424,7 @@ msgid ""
 "    Returns success unless job control is not enabled or an error occurs."
 msgstr ""
 
-#: builtins.c:1261
+#: builtins.c:1262
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -4157,7 +4508,7 @@ msgid ""
 msgstr ""
 
 # [
-#: builtins.c:1343
+#: builtins.c:1344
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -4171,7 +4522,7 @@ msgstr ""
 "    schließt."
 
 # times
-#: builtins.c:1352
+#: builtins.c:1353
 msgid ""
 "Display process times.\n"
 "    \n"
@@ -4190,7 +4541,7 @@ msgstr ""
 "    Rückgabewert:\n"
 "    Immer 0."
 
-#: builtins.c:1364
+#: builtins.c:1365
 msgid ""
 "Trap signals and other events.\n"
 "    \n"
@@ -4234,7 +4585,7 @@ msgid ""
 "given."
 msgstr ""
 
-#: builtins.c:1400
+#: builtins.c:1401
 msgid ""
 "Display information about command type.\n"
 "    \n"
@@ -4264,7 +4615,7 @@ msgid ""
 "found."
 msgstr ""
 
-#: builtins.c:1431
+#: builtins.c:1432
 msgid ""
 "Modify shell resource limits.\n"
 "    \n"
@@ -4314,7 +4665,7 @@ msgid ""
 "    Returns success unless an invalid option is supplied or an error occurs."
 msgstr ""
 
-#: builtins.c:1482
+#: builtins.c:1483
 msgid ""
 "Display or set file mode mask.\n"
 "    \n"
@@ -4332,7 +4683,7 @@ msgid ""
 "    Returns success unless MODE is invalid or an invalid option is given."
 msgstr ""
 
-#: builtins.c:1502
+#: builtins.c:1503
 msgid ""
 "Wait for job completion and return exit status.\n"
 "    \n"
@@ -4364,7 +4715,7 @@ msgid ""
 "    children."
 msgstr ""
 
-#: builtins.c:1533
+#: builtins.c:1534
 msgid ""
 "Wait for process completion and return exit status.\n"
 "    \n"
@@ -4379,7 +4730,7 @@ msgid ""
 "    option is given."
 msgstr ""
 
-#: builtins.c:1548
+#: builtins.c:1549
 msgid ""
 "Execute commands for each member in a list.\n"
 "    \n"
@@ -4392,7 +4743,7 @@ msgid ""
 "    Returns the status of the last command executed."
 msgstr ""
 
-#: builtins.c:1562
+#: builtins.c:1563
 msgid ""
 "Arithmetic for loop.\n"
 "    \n"
@@ -4409,7 +4760,7 @@ msgid ""
 "    Returns the status of the last command executed."
 msgstr ""
 
-#: builtins.c:1580
+#: builtins.c:1581
 msgid ""
 "Select words from a list and execute commands.\n"
 "    \n"
@@ -4429,7 +4780,7 @@ msgid ""
 "    Returns the status of the last command executed."
 msgstr ""
 
-#: builtins.c:1601
+#: builtins.c:1602
 msgid ""
 "Report time consumed by pipeline's execution.\n"
 "    \n"
@@ -4445,7 +4796,7 @@ msgid ""
 "    The return status is the return status of PIPELINE."
 msgstr ""
 
-#: builtins.c:1618
+#: builtins.c:1619
 msgid ""
 "Execute commands based on pattern matching.\n"
 "    \n"
@@ -4456,7 +4807,7 @@ msgid ""
 "    Returns the status of the last command executed."
 msgstr ""
 
-#: builtins.c:1630
+#: builtins.c:1631
 msgid ""
 "Execute commands based on conditional.\n"
 "    \n"
@@ -4477,29 +4828,31 @@ msgid ""
 "    Returns the status of the last command executed."
 msgstr ""
 
-#: builtins.c:1647
+#: builtins.c:1648
 msgid ""
 "Execute commands as long as a test succeeds.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `while' COMMANDS has an exit status of zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS "
+"has\n"
+"    an exit status of zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
 
-#: builtins.c:1659
+#: builtins.c:1660
 msgid ""
 "Execute commands as long as a test does not succeed.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `until' COMMANDS has an exit status which is not zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS "
+"has\n"
+"    an exit status which is not zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
 
-#: builtins.c:1671
+#: builtins.c:1672
 msgid ""
 "Create a coprocess named NAME.\n"
 "    \n"
@@ -4512,7 +4865,7 @@ msgid ""
 "    The coproc command returns an exit status of 0."
 msgstr ""
 
-#: builtins.c:1685
+#: builtins.c:1686
 msgid ""
 "Define shell function.\n"
 "    \n"
@@ -4526,7 +4879,7 @@ msgid ""
 "    Returns success unless NAME is readonly."
 msgstr ""
 
-#: builtins.c:1699
+#: builtins.c:1700
 msgid ""
 "Group commands as a unit.\n"
 "    \n"
@@ -4537,7 +4890,7 @@ msgid ""
 "    Returns the status of the last command executed."
 msgstr ""
 
-#: builtins.c:1711
+#: builtins.c:1712
 msgid ""
 "Resume job in foreground.\n"
 "    \n"
@@ -4552,8 +4905,7 @@ msgid ""
 msgstr ""
 
 # (( ))
-#: builtins.c:1726
-#, fuzzy
+#: builtins.c:1727
 msgid ""
 "Evaluate arithmetic expression.\n"
 "    \n"
@@ -4568,12 +4920,11 @@ msgstr ""
 "    Der Ausdruck wird nach den Regeln für arithmetische Berechnungen\n"
 "    ausgewertet. Diese Schreibweise entspricht »let Ausdruck«.\n"
 "\n"
-"    Rückgabewert: \n"
-"    Gibt »1« zurück, wenn die Auswertung des letzten Arguments Null\n"
-"    ergibt, sonst »0«."
+"    Rückgabewert:\n"
+"    Ist »1«, wenn der arithmetische Ausdruck 0 ergibt, sonst »0«."
 
 # [[
-#: builtins.c:1738
+#: builtins.c:1739
 msgid ""
 "Execute conditional command.\n"
 "    \n"
@@ -4624,7 +4975,7 @@ msgstr ""
 "    0 oder 1 abhängig vom Wert des AUSDRUCKs."
 
 # variable_help
-#: builtins.c:1764
+#: builtins.c:1765
 msgid ""
 "Common shell variable names and usage.\n"
 "    \n"
@@ -4736,7 +5087,7 @@ msgstr ""
 "                Kommandos angibt.\n"
 
 # pushd
-#: builtins.c:1821
+#: builtins.c:1822
 msgid ""
 "Add directories to stack.\n"
 "    \n"
@@ -4792,7 +5143,7 @@ msgstr ""
 "    wurde oder der Verzeichniswechsel nicht erfolgreich war."
 
 # popd
-#: builtins.c:1855
+#: builtins.c:1856
 msgid ""
 "Remove directories from stack.\n"
 "    \n"
@@ -4846,7 +5197,7 @@ msgstr ""
 "        wurde oder der Verzeichniswechsel nicht erfolgreich war."
 
 # dirs
-#: builtins.c:1885
+#: builtins.c:1886
 msgid ""
 "Display directory stack.\n"
 "    \n"
@@ -4900,7 +5251,7 @@ msgstr ""
 "    Gibt Erfolg zurück, außer bei einer ungültigen Option oder wenn\n"
 "    ein Fehler auftritt."
 
-#: builtins.c:1916
+#: builtins.c:1917
 msgid ""
 "Set and unset shell options.\n"
 "    \n"
@@ -4939,7 +5290,8 @@ msgstr ""
 "    worden ist, wird ein Fehler zurückgegeben."
 
 # printf
-#: builtins.c:1937
+#: builtins.c:1938
+#, fuzzy
 msgid ""
 "Formats and prints ARGUMENTS under control of the FORMAT.\n"
 "    \n"
@@ -4962,6 +5314,8 @@ msgid ""
 "    \n"
 "      %b\texpand backslash escape sequences in the corresponding argument\n"
 "      %q\tquote the argument in a way that can be reused as shell input\n"
+"      %Q\tlike %q, but apply any precision to the unquoted argument before\n"
+"    \t\tquoting\n"
 "      %(fmt)T\toutput the date-time string resulting from using FMT as a "
 "format\n"
 "    \t        string for strftime(3)\n"
@@ -5012,7 +5366,7 @@ msgstr ""
 "ein\n"
 "    Aus- bzw. Zuweisungsfehler auftritt."
 
-#: builtins.c:1971
+#: builtins.c:1974
 msgid ""
 "Specify how arguments are to be completed by Readline.\n"
 "    \n"
@@ -5044,7 +5398,7 @@ msgid ""
 msgstr ""
 
 # compgen
-#: builtins.c:2001
+#: builtins.c:2004
 msgid ""
 "Display possible completions depending on the options.\n"
 "    \n"
@@ -5066,7 +5420,7 @@ msgstr ""
 "    Rückgabewert:\n"
 "    Falsche Optionen oder Fehler führen zu Rückgabewerten ungleich Null."
 
-#: builtins.c:2016
+#: builtins.c:2019
 msgid ""
 "Modify or display completion options.\n"
 "    \n"
@@ -5098,7 +5452,7 @@ msgid ""
 "    have a completion specification defined."
 msgstr ""
 
-#: builtins.c:2047
+#: builtins.c:2050
 msgid ""
 "Read lines from the standard input into an indexed array variable.\n"
 "    \n"
@@ -5141,7 +5495,7 @@ msgid ""
 msgstr ""
 
 # readarray
-#: builtins.c:2083
+#: builtins.c:2086
 msgid ""
 "Read lines from a file into an array variable.\n"
 "    \n"
@@ -5151,6 +5505,10 @@ msgstr ""
 "\n"
 "    Ist ein Synonym für »mapfile«."
 
+#, c-format
+#~ msgid "%s: invalid associative array key"
+#~ msgstr "%s: Ungültiger Schlüssel für das assoziative Array."
+
 # https://lists.gnu.org/archive/html/bug-bash/2019-09/msg00025.html
 #~ msgid "Unknown Signal #"
 #~ msgstr "Unbekannte Signalnummer"
index 97304da9e17ce96948b65c587ad07cd67159658f..809aac8661be61008ba4ff04c47adf5ab6ccd122 100644 (file)
Binary files a/po/el.gmo and b/po/el.gmo differ
index ed9fb5b40771832ca50a1beb2197530367610df6..a84b8f07d96a88f786788c32c48158717bd23852 100644 (file)
--- a/po/el.po
+++ b/po/el.po
@@ -2,13 +2,13 @@
 # Copyright (C) 2013 Free Software Foundation, Inc.
 # This file is distributed under the same license as the bash package.
 #
-# Lefteris Dimitroulakis <ledimitro@gmail.com>, 2013, 2016, 2017.
+# Lefteris Dimitroulakis <ledimitro@gmail.com>, 2013, 2016, 2017, 2021
 msgid ""
 msgstr ""
-"Project-Id-Version: bash-4.4\n"
+"Project-Id-Version: bash-5.1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-11-28 12:51-0500\n"
-"PO-Revision-Date: 2017-06-21 17:08+0300\n"
+"POT-Creation-Date: 2022-01-11 14:50-0500\n"
+"PO-Revision-Date: 2021-04-12 10:35+0300\n"
 "Last-Translator: Lefteris Dimitroulakis <ledimitro@gmail.com>\n"
 "Language-Team: Greek <team@lists.gnome.gr>\n"
 "Language: el\n"
@@ -17,86 +17,81 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Lokalize 1.5\n"
+"X-Generator: Poedit 2.3\n"
 
 #: arrayfunc.c:66
 msgid "bad array subscript"
-msgstr "κακÏ\8cς δείκτης πίνακα"
+msgstr "λάθος δείκτης πίνακα"
 
-#: arrayfunc.c:421 builtins/declare.def:638 variables.c:2274 variables.c:2300
-#: variables.c:3133
+#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268
+#: variables.c:3101
 #, c-format
 msgid "%s: removing nameref attribute"
-msgstr "%s: αφαίρεση του χαρακτηριστικού nameref "
+msgstr "%s: αφαίρεση του χαρακτηριστικού nameref"
 
-#: arrayfunc.c:446 builtins/declare.def:851
+#: arrayfunc.c:496 builtins/declare.def:868
 #, c-format
 msgid "%s: cannot convert indexed to associative array"
-msgstr "%s: αδυναμία μετατροπής indexed πίνακα σε associative πίνακα "
+msgstr "%s: αδυναμία μετατροπής indexed πίνακα σε associative πίνακα"
 
-#: arrayfunc.c:700
-#, c-format
-msgid "%s: invalid associative array key"
-msgstr "%s: μη έγκυρο κλειδί associative πίνακα "
-
-#: arrayfunc.c:702
+#: arrayfunc.c:777
 #, c-format
 msgid "%s: cannot assign to non-numeric index"
-msgstr "%s: αδυναμία εκχώρησης σε μη αριθμητικό δείκτη "
+msgstr "%s: αδυναμία εκχώρησης σε μη αριθμητικό δείκτη"
 
-#: arrayfunc.c:747
+#: arrayfunc.c:822
 #, c-format
 msgid "%s: %s: must use subscript when assigning associative array"
 msgstr ""
 
-#: bashhist.c:452
+#: bashhist.c:455
 #, c-format
 msgid "%s: cannot create: %s"
 msgstr "%s: αδυναμία δημιουργίας: %s"
 
-#: bashline.c:4310
+#: bashline.c:4479
 msgid "bash_execute_unix_command: cannot find keymap for command"
 msgstr "bash_execute_unix_command: δεν μπορώ να βρω keymap για εντολή"
 
-#: bashline.c:4459
+#: bashline.c:4637
 #, c-format
 msgid "%s: first non-whitespace character is not `\"'"
-msgstr "%s: ο πρώτος μη-λευκό διάστημα χαρακτήρας δεν είναι «\"» "
+msgstr "%s: ο πρώτος μη-λευκό διάστημα χαρακτήρας δεν είναι «\"»"
 
-#: bashline.c:4488
+#: bashline.c:4666
 #, c-format
 msgid "no closing `%c' in %s"
 msgstr "όχι «%c» κλεισήματος σε %s"
 
-#: bashline.c:4519
+#: bashline.c:4697
 #, c-format
 msgid "%s: missing colon separator"
-msgstr "%s: Î±Ï\80οÏ\85Ï\83ιάζει Î´Î¹Î±Ï\87Ï\89Ï\81ιÏ\83Ï\84ήÏ\82 Î´Î¯Ï\83Ï\84ιγμο "
+msgstr "%s: Î±Ï\80οÏ\85Ï\83ιάζει Î¿ Î´Î¹Î±Ï\87Ï\89Ï\81ιÏ\83Ï\84ήÏ\82 Î´Î¯Ï\83Ï\84ιγμο"
 
-#: bashline.c:4555
-#, fuzzy, c-format
+#: bashline.c:4733
+#, c-format
 msgid "`%s': cannot unbind in command keymap"
 msgstr "«%s»: αδυναμία αποσύνδεσης"
 
 #: braces.c:327
 #, c-format
 msgid "brace expansion: cannot allocate memory for %s"
-msgstr "brace expansion: αδυναμία εκχώρησης μνήμης για %s "
+msgstr "brace expansion: αδυναμία εκχώρησης μνήμης για %s"
 
 #: braces.c:406
-#, fuzzy, c-format
+#, c-format
 msgid "brace expansion: failed to allocate memory for %u elements"
-msgstr "brace expansion: αδυναμία εκχώρησης μνήμης για %d στοιχεία "
+msgstr "brace expansion: αδυναμία εκχώρησης μνήμης για %u στοιχεία"
 
 #: braces.c:451
 #, c-format
 msgid "brace expansion: failed to allocate memory for `%s'"
 msgstr "brace expansion: αδυναμία εκχώρησης μνήμης για «%s»"
 
-#: builtins/alias.def:131 variables.c:1844
+#: builtins/alias.def:131 variables.c:1817
 #, c-format
 msgid "`%s': invalid alias name"
-msgstr "«%s»: Î¼Î· Î­Î³ÎºÏ\85Ï\81ο Ï\88εÏ\85δÏ\8eνημο"
+msgstr "«%s»: Î¼Î· Î­Î³ÎºÏ\85Ï\81ο Ï\83Ï\85νÏ\8eνÏ\85μο"
 
 #: builtins/bind.def:122 builtins/bind.def:125
 msgid "line editing not enabled"
@@ -151,12 +146,21 @@ msgid ""
 "    The value of EXPR indicates how many call frames to go back before the\n"
 "    current one; the top frame is frame 0."
 msgstr ""
+"Επιστρέφει το context της κλήσης της τρέχουσας υπορουτίνας.\n"
+"    \n"
+"    Χωρίς EXPR, επιστρέφει \"$line $filename\".  Με EXPR, επιστρέφει\n"
+"    \"$line $subroutine $filename\", αυτή η έξτρα πληροφορία μπορεί να "
+"χρησιμοποιηθει\n"
+"    για να δώσει ένα stack trace.\n"
+"    \n"
+"    Η τιμή του EXPR δηλώνει πόσα call frames να πας πίσω πριν\n"
+"    από το τρέχον, το ανώτατο είναι το frame 0."
 
 #: builtins/cd.def:327
 msgid "HOME not set"
 msgstr "HOME δεν έχει οριστεί"
 
-#: builtins/cd.def:335 builtins/common.c:161 test.c:901
+#: builtins/cd.def:335 builtins/common.c:161 test.c:916
 msgid "too many arguments"
 msgstr "πάρα πολλά ορίσματα"
 
@@ -183,7 +187,7 @@ msgstr "προειδοποίηση: "
 msgid "%s: usage: "
 msgstr "%s: χρήση: "
 
-#: builtins/common.c:193 shell.c:516 shell.c:844
+#: builtins/common.c:193 shell.c:524 shell.c:866
 #, c-format
 msgid "%s: option requires an argument"
 msgstr "%s: η επιλογή απαιτεί όρισμα"
@@ -198,7 +202,7 @@ msgstr "%s: απαιτείται αριθμητικό όρισμα"
 msgid "%s: not found"
 msgstr "%s: δεν βρέθηκε"
 
-#: builtins/common.c:216 shell.c:857
+#: builtins/common.c:216 shell.c:879
 #, c-format
 msgid "%s: invalid option"
 msgstr "%s: μη έγκυρη επιλογή"
@@ -208,10 +212,10 @@ msgstr "%s: μη έγκυρη επιλογή"
 msgid "%s: invalid option name"
 msgstr "%s: μη έγκυρο όνομα επιλογής"
 
-#: builtins/common.c:230 execute_cmd.c:2373 general.c:368 general.c:373
+#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373
 #, c-format
 msgid "`%s': not a valid identifier"
-msgstr "«%s»: μή έγκυρο αναγνωριστικό "
+msgstr "«%s»: μή έγκυρο αναγνωριστικό"
 
 #: builtins/common.c:240
 msgid "invalid octal number"
@@ -221,7 +225,7 @@ msgstr "μη έγκυρος οκταδικός αριθμός"
 msgid "invalid hex number"
 msgstr "μη έγκυρος εξαδικός αριθμός"
 
-#: builtins/common.c:244 expr.c:1569
+#: builtins/common.c:244 expr.c:1574
 msgid "invalid number"
 msgstr "μη έγκυρος αριθμός"
 
@@ -235,88 +239,93 @@ msgstr "%s: μη έγκυρη προδιαγραφή σήματος"
 msgid "`%s': not a pid or valid job spec"
 msgstr "«%s»: όχι pid ή έγκυρο job spec"
 
-#: builtins/common.c:266 error.c:510
+#: builtins/common.c:266 error.c:536
 #, c-format
 msgid "%s: readonly variable"
 msgstr "%s: μεταβλητή μόνο για ανάγνωση"
 
-#: builtins/common.c:274
+#: builtins/common.c:273
+#, fuzzy, c-format
+msgid "%s: cannot assign"
+msgstr "%s: αδυναμία «unset»"
+
+#: builtins/common.c:281
 #, c-format
 msgid "%s: %s out of range"
 msgstr "%s: %s εκτός ορίων"
 
-#: builtins/common.c:274 builtins/common.c:276
+#: builtins/common.c:281 builtins/common.c:283
 msgid "argument"
 msgstr "όρισμα"
 
-#: builtins/common.c:276
+#: builtins/common.c:283
 #, c-format
 msgid "%s out of range"
 msgstr "%s εκτός ορίων"
 
-#: builtins/common.c:284
+#: builtins/common.c:291
 #, c-format
 msgid "%s: no such job"
 msgstr "%s: δεν υπάρχει τέτοια εργασία"
 
-#: builtins/common.c:292
+#: builtins/common.c:299
 #, c-format
 msgid "%s: no job control"
-msgstr "%s: όχι έλεγχος εγασιών "
+msgstr "%s: όχι έλεγχος εγασιών"
 
-#: builtins/common.c:294
+#: builtins/common.c:301
 msgid "no job control"
 msgstr "όχι έλεγχος εργασιών"
 
-#: builtins/common.c:304
+#: builtins/common.c:311
 #, c-format
 msgid "%s: restricted"
-msgstr "%s: περιορισμένο "
+msgstr "%s: περιορισμένο"
 
-#: builtins/common.c:306
+#: builtins/common.c:313
 msgid "restricted"
 msgstr "περιορισμένο"
 
-#: builtins/common.c:314
+#: builtins/common.c:321
 #, c-format
 msgid "%s: not a shell builtin"
-msgstr "%s: όχι ένα builtin κελύφους "
+msgstr "%s: όχι ένα builtin κελύφους"
 
-#: builtins/common.c:323
+#: builtins/common.c:330
 #, c-format
 msgid "write error: %s"
 msgstr "σφάλμα εγγραφής: %s"
 
-#: builtins/common.c:331
+#: builtins/common.c:338
 #, c-format
 msgid "error setting terminal attributes: %s"
-msgstr "σφάλμα κατά τον ορισμό των χαρακτηριστικών τερματικού: %s "
+msgstr "σφάλμα κατά τον ορισμό των χαρακτηριστικών τερματικού: %s"
 
-#: builtins/common.c:333
+#: builtins/common.c:340
 #, c-format
 msgid "error getting terminal attributes: %s"
 msgstr "σφάλμα κατά την λήψη των χαρακτηριστικών τερματικού: %s"
 
-#: builtins/common.c:635
+#: builtins/common.c:642
 #, c-format
 msgid "%s: error retrieving current directory: %s: %s\n"
 msgstr "%s: σφάλμα κατά την ανάκτηση τρέχοντος καταλόγου: %s: %s\n"
 
-#: builtins/common.c:701 builtins/common.c:703
+#: builtins/common.c:708 builtins/common.c:710
 #, c-format
 msgid "%s: ambiguous job spec"
 msgstr "%s: ασαφείς προδιαγραφές εργασίας"
 
-#: builtins/common.c:964
+#: builtins/common.c:971
 msgid "help not available in this version"
-msgstr "βοήθεια μη διαθέσιμη σ' αυτήν την έκδοση "
+msgstr "βοήθεια μη διαθέσιμη σ' αυτήν την έκδοση"
 
-#: builtins/common.c:1008 builtins/set.def:953 variables.c:3839
+#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825
 #, c-format
 msgid "%s: cannot unset: readonly %s"
 msgstr "%s: αδυναμία unset: %s μόνο για ανάγνωση"
 
-#: builtins/common.c:1013 builtins/set.def:932 variables.c:3844
+#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830
 #, c-format
 msgid "%s: cannot unset"
 msgstr "%s: αδυναμία «unset»"
@@ -326,109 +335,109 @@ msgstr "%s: αδυναμία «unset»"
 msgid "%s: invalid action name"
 msgstr "%s: μη έγκυρο όνομα ενέργειας"
 
-#: builtins/complete.def:486 builtins/complete.def:634
-#: builtins/complete.def:865
+#: builtins/complete.def:486 builtins/complete.def:642
+#: builtins/complete.def:873
 #, c-format
 msgid "%s: no completion specification"
 msgstr "%s: δεν υπάρχει προδιαγραφή συμπλήρωσης"
 
-#: builtins/complete.def:688
+#: builtins/complete.def:696
 msgid "warning: -F option may not work as you expect"
 msgstr "προειδοποίηση: η επιλογή -F μπορεί να μη δουλέψει όπως περιμένεις"
 
-#: builtins/complete.def:690
+#: builtins/complete.def:698
 msgid "warning: -C option may not work as you expect"
 msgstr "προειδοποίηση: η επιλογή -C ίσως δεν δουλέψει όπως αναμένετε"
 
-#: builtins/complete.def:838
+#: builtins/complete.def:846
 msgid "not currently executing completion function"
-msgstr "η λειτουργία συμπλήρωσης δεν εκτελείται επί του παρόντος "
+msgstr "η λειτουργία συμπλήρωσης δεν εκτελείται επί του παρόντος"
 
-#: builtins/declare.def:134
+#: builtins/declare.def:137
 msgid "can only be used in a function"
 msgstr "μπορεί να χρησιμοποιηθεί μόνο μέσα σε συνάρτηση"
 
-#: builtins/declare.def:363 builtins/declare.def:756
+#: builtins/declare.def:437
+msgid "cannot use `-f' to make functions"
+msgstr ""
+"η επιλογή «-f» δεν μπορεί να χρησιμοποιηθεί για τη δημιουργία συναρτήσεων"
+
+#: builtins/declare.def:464 execute_cmd.c:6132
+#, c-format
+msgid "%s: readonly function"
+msgstr "%s: συνάρτηση μόνο για ανάγνωση"
+
+#: builtins/declare.def:521 builtins/declare.def:804
 #, c-format
 msgid "%s: reference variable cannot be an array"
-msgstr "%s: η μεταβλητή αναφοράς δεν μπορεί να είναι πίνακας "
+msgstr "%s: η μεταβλητή αναφοράς δεν μπορεί να είναι πίνακας"
 
-#: builtins/declare.def:374 variables.c:3385
+#: builtins/declare.def:532 variables.c:3359
 #, c-format
 msgid "%s: nameref variable self references not allowed"
-msgstr "%s: nameref αυτοαναφορά μεταβλητής δεν επιτρέπεται "
+msgstr "%s: nameref αυτοαναφορά μεταβλητής δεν επιτρέπεται"
 
-#: builtins/declare.def:379 variables.c:2104 variables.c:3304 variables.c:3312
-#: variables.c:3382
+#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286
+#: variables.c:3356
 #, c-format
 msgid "%s: circular name reference"
-msgstr "%s: κυκλική αναφορά ονόματος "
+msgstr "%s: κυκλική αναφορά ονόματος"
 
-#: builtins/declare.def:384 builtins/declare.def:762 builtins/declare.def:773
+#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820
 #, c-format
 msgid "`%s': invalid variable name for name reference"
-msgstr "«%s»: μη έγκυρο όνομα μεταβλητής για όνομα αναφοράς "
+msgstr "«%s»: μη έγκυρο όνομα μεταβλητής για όνομα αναφοράς"
 
-#: builtins/declare.def:514
-msgid "cannot use `-f' to make functions"
-msgstr ""
-"η επιλογή «-f» δεν μπορεί να χρησιμοποιηθεί για τη δημιουργία συναρτήσεων"
+#: builtins/declare.def:856
+#, c-format
+msgid "%s: cannot destroy array variables in this way"
+msgstr "%s: αδυναμία καταστροφής μεταβλητής πίνακα κατ' αυτόν τον τρόπο"
 
-#: builtins/declare.def:526 execute_cmd.c:5986
+#: builtins/declare.def:862 builtins/read.def:887
 #, c-format
-msgid "%s: readonly function"
-msgstr "%s: συνάρτηση μόνο για ανάγνωση"
+msgid "%s: cannot convert associative to indexed array"
+msgstr "%s: αδυναμία μετατροπής associative πίνακα σε indexed πίνακα"
 
-#: builtins/declare.def:824
+#: builtins/declare.def:891
 #, c-format
 msgid "%s: quoted compound array assignment deprecated"
 msgstr "%s: η σύνθετη εκχώρηση πίνακα απορρίφθηκε"
 
-#: builtins/declare.def:838
-#, c-format
-msgid "%s: cannot destroy array variables in this way"
-msgstr "%s: αδυναμία καταστροφής μεταβλητής πίνακα κατ' αυτόν τον τρόπο "
-
-#: builtins/declare.def:845 builtins/read.def:815
-#, c-format
-msgid "%s: cannot convert associative to indexed array"
-msgstr "%s: αδυναμία μετατροπής associative πίνακα σε indexed πίνακα "
-
-#: builtins/enable.def:143 builtins/enable.def:151
+#: builtins/enable.def:145 builtins/enable.def:153
 msgid "dynamic loading not available"
 msgstr "δυναμική φόρτωση μη διαθέσημη"
 
-#: builtins/enable.def:343
+#: builtins/enable.def:376
 #, c-format
 msgid "cannot open shared object %s: %s"
 msgstr "αδυναμία ανοίγματος κοινόχρηστου αντικειμένου %s: %s"
 
-#: builtins/enable.def:371
+#: builtins/enable.def:405
 #, c-format
 msgid "cannot find %s in shared object %s: %s"
 msgstr "αδυναμία εύρεσης %s στο κοινόχρηστο αντικείμενο %s: %s"
 
-#: builtins/enable.def:388
-#, fuzzy, c-format
+#: builtins/enable.def:422
+#, c-format
 msgid "%s: dynamic builtin already loaded"
-msgstr "%s: δεν φορτώθηκε δυναμικά"
+msgstr "%s: δυναμικό builtin ήδη φορτωμένο"
 
-#: builtins/enable.def:392
+#: builtins/enable.def:426
 #, c-format
 msgid "load function for %s returns failure (%d): not loaded"
-msgstr "Η συνάρτηση φορτώματος του %s επιστρέφει λάθος (%d): δεν φορτώθηκε "
+msgstr "h συνάρτηση φορτώματος του %s επιστρέφει λάθος (%d): δεν φορτώθηκε"
 
-#: builtins/enable.def:517
+#: builtins/enable.def:551
 #, c-format
 msgid "%s: not dynamically loaded"
 msgstr "%s: δεν φορτώθηκε δυναμικά"
 
-#: builtins/enable.def:543
+#: builtins/enable.def:577
 #, c-format
 msgid "%s: cannot delete: %s"
 msgstr "%s: αδυναμία διαγραφής: %s"
 
-#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5818
+#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959
 #, c-format
 msgid "%s: is a directory"
 msgstr "%s: είναι κατάλογος"
@@ -443,7 +452,7 @@ msgstr "%s: όχι κανονικό αρχείο"
 msgid "%s: file is too large"
 msgstr "%s: αρχείο πολύ μεγάλο"
 
-#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1647
+#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673
 #, c-format
 msgid "%s: cannot execute binary file"
 msgstr "%s: αδυναμία εκτέλεσης δυαδικού αρχείου"
@@ -493,7 +502,7 @@ msgstr "τρέχων"
 #: builtins/fg_bg.def:161
 #, c-format
 msgid "job %d started without job control"
-msgstr "η εργασία %d ξεκίνησε χωρίς έλεγχο εργασιών "
+msgstr "η εργασία %d ξεκίνησε χωρίς έλεγχο εργασιών"
 
 #: builtins/getopt.c:110
 #, c-format
@@ -507,7 +516,7 @@ msgstr "%s: η επιλογή απαιτεί ένα όρισμα -- %c\n"
 
 #: builtins/hash.def:91
 msgid "hashing disabled"
-msgstr "hashing απενεργοποιημένο "
+msgstr "hashing απενεργοποιημένο"
 
 #: builtins/hash.def:139
 #, c-format
@@ -530,6 +539,8 @@ msgid ""
 "'\n"
 "\n"
 msgstr ""
+"'\n"
+"\n"
 
 #: builtins/help.def:185
 #, c-format
@@ -539,12 +550,12 @@ msgstr ""
 "ουδεμία βοήθεια ταιριάζει με «%s».  Δοκιμάστε «help help» ή «man -k %s» ή "
 "«info %s»."
 
-#: builtins/help.def:224
+#: builtins/help.def:223
 #, c-format
 msgid "%s: cannot open: %s"
 msgstr "%s: αδυναμία ανοίγματος: %s"
 
-#: builtins/help.def:524
+#: builtins/help.def:523
 #, c-format
 msgid ""
 "These shell commands are defined internally.  Type `help' to see this list.\n"
@@ -565,24 +576,24 @@ msgstr ""
 "απενεργοποιημένη.\n"
 "\n"
 
-#: builtins/history.def:155
+#: builtins/history.def:159
 msgid "cannot use more than one of -anrw"
 msgstr "δεν μπορώ να χρησιμοποιήσω περισσότερες της μιας από τις -anrw"
 
-#: builtins/history.def:188 builtins/history.def:198 builtins/history.def:213
-#: builtins/history.def:230 builtins/history.def:242 builtins/history.def:249
+#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215
+#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247
 msgid "history position"
 msgstr "θέση στο ιστορικό"
 
-#: builtins/history.def:340
+#: builtins/history.def:338
 #, c-format
 msgid "%s: invalid timestamp"
 msgstr "%s: μη έγκυρη χρονοσήμανση"
 
-#: builtins/history.def:451
+#: builtins/history.def:449
 #, c-format
 msgid "%s: history expansion failed"
-msgstr ""
+msgstr "%s: η ανάπτυξη του ιστορικού σταμάτησε"
 
 #: builtins/inlib.def:71
 #, c-format
@@ -602,78 +613,78 @@ msgstr "%s: ορίσματα πρέπει να είναι ID διεργασιώ
 msgid "Unknown error"
 msgstr "Άγνωστο σφάλμα"
 
-#: builtins/let.def:97 builtins/let.def:122 expr.c:639 expr.c:657
+#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658
 msgid "expression expected"
 msgstr "αναμενόταν έκφραση"
 
-#: builtins/mapfile.def:178
+#: builtins/mapfile.def:180
 #, c-format
 msgid "%s: not an indexed array"
 msgstr "%s: μη δικτοδοτημένος πίνακας"
 
-#: builtins/mapfile.def:271 builtins/read.def:308
+#: builtins/mapfile.def:276 builtins/read.def:336
 #, c-format
 msgid "%s: invalid file descriptor specification"
 msgstr "%s: μη έγκυρη προδιαγραφή περιγραφέα αρχείου"
 
-#: builtins/mapfile.def:279 builtins/read.def:315
+#: builtins/mapfile.def:284 builtins/read.def:343
 #, c-format
 msgid "%d: invalid file descriptor: %s"
 msgstr "%d: μη έγκυρος περιγραφέας αρχείου: %s"
 
-#: builtins/mapfile.def:288 builtins/mapfile.def:326
+#: builtins/mapfile.def:293 builtins/mapfile.def:331
 #, c-format
 msgid "%s: invalid line count"
 msgstr "%s: μη έγκυρος αριθμός γραμμής"
 
-#: builtins/mapfile.def:299
+#: builtins/mapfile.def:304
 #, c-format
 msgid "%s: invalid array origin"
-msgstr "%s: μη έγκυρη αρχή πίνακα "
+msgstr "%s: μη έγκυρη αρχή πίνακα"
 
-#: builtins/mapfile.def:316
+#: builtins/mapfile.def:321
 #, c-format
 msgid "%s: invalid callback quantum"
-msgstr "%s: μη έγκυρο κβάντο του callback "
+msgstr "%s: μη έγκυρο κβάντο του callback"
 
-#: builtins/mapfile.def:349
+#: builtins/mapfile.def:354
 msgid "empty array variable name"
-msgstr "όνομα μεταβλητής πίνακα κενό "
+msgstr "όνομα μεταβλητής πίνακα κενό"
 
-#: builtins/mapfile.def:370
+#: builtins/mapfile.def:375
 msgid "array variable support required"
 msgstr "απαιτείται υποστήριξη μεταβλητής πίνακος"
 
-#: builtins/printf.def:419
+#: builtins/printf.def:430
 #, c-format
 msgid "`%s': missing format character"
-msgstr "«%s»: απουσία χαρακτήρα φορμαρίσματος   "
+msgstr "«%s»: απουσία χαρακτήρα φορμαρίσματος"
 
-#: builtins/printf.def:474
+#: builtins/printf.def:485
 #, c-format
 msgid "`%c': invalid time format specification"
 msgstr "«%c»: μη έγκυρη προδιαγραφή για φορμά χρόνου"
 
-#: builtins/printf.def:676
+#: builtins/printf.def:708
 #, c-format
 msgid "`%c': invalid format character"
 msgstr "«%c»: μη έγκυρος χαρακτήρας φορμαρίσματος"
 
-#: builtins/printf.def:702
+#: builtins/printf.def:734
 #, c-format
 msgid "warning: %s: %s"
 msgstr "προειδοποίηση: %s: %s"
 
-#: builtins/printf.def:788
+#: builtins/printf.def:822
 #, c-format
 msgid "format parsing problem: %s"
 msgstr "πρόβλημα ανάλυσης του format: %s"
 
-#: builtins/printf.def:885
+#: builtins/printf.def:919
 msgid "missing hex digit for \\x"
 msgstr "απουσία hex ψηφίου για \\x"
 
-#: builtins/printf.def:900
+#: builtins/printf.def:934
 #, c-format
 msgid "missing unicode digit for \\%c"
 msgstr "απουσία ψηφίου unicode για \\%c"
@@ -769,25 +780,25 @@ msgid ""
 "    The `dirs' builtin displays the directory stack."
 msgstr ""
 
-#: builtins/read.def:280
+#: builtins/read.def:308
 #, c-format
 msgid "%s: invalid timeout specification"
-msgstr "%s: μη έγκυρη προδιαγραφή timeout "
+msgstr "%s: μη έγκυρη προδιαγραφή timeout"
 
-#: builtins/read.def:755
+#: builtins/read.def:827
 #, c-format
 msgid "read error: %d: %s"
 msgstr "σφάλμα ανάγνωσης: %d: %s"
 
 #: builtins/return.def:68
 msgid "can only `return' from a function or sourced script"
-msgstr "«επιστροφή» είναι μόνο δυνατή από συνάρτηση ή sourced script "
+msgstr "«επιστροφή» είναι μόνο δυνατή από συνάρτηση ή sourced script"
 
 #: builtins/set.def:869
 msgid "cannot simultaneously unset a function and a variable"
 msgstr "«unset» δεν μπορεί να εφαρμοστεί συγχρόνως σε συνάρτηση και μεταβλητή"
 
-#: builtins/set.def:966
+#: builtins/set.def:969
 #, c-format
 msgid "%s: not an array variable"
 msgstr "%s: δεν είναι μεταβλητή πίνακα"
@@ -806,13 +817,13 @@ msgstr "%s: αδυναμία εξαγωγής"
 msgid "shift count"
 msgstr "αριθμός του « shift »"
 
-#: builtins/shopt.def:310
+#: builtins/shopt.def:323
 msgid "cannot set and unset shell options simultaneously"
 msgstr ""
 "οι επιλογές κελύφους δεν είναι δυνατόν συγχρόνως να ενεργοποιηθούν και "
 "απενεργοποιηθούν"
 
-#: builtins/shopt.def:428
+#: builtins/shopt.def:444
 #, c-format
 msgid "%s: invalid shell option name"
 msgstr "%s: μη έγκυρο όνομα επιλογής"
@@ -828,16 +839,16 @@ msgstr "%s: αρχείο δεν βρέθηκε"
 
 #: builtins/suspend.def:102
 msgid "cannot suspend"
-msgstr "αναστολή αδύνατη "
+msgstr "αναστολή αδύνατη"
 
 #: builtins/suspend.def:112
 msgid "cannot suspend a login shell"
-msgstr "ένα κέλυφος σύνδεσης δεν μπορεί ν' ανασταλεί "
+msgstr "ένα κέλυφος σύνδεσης δεν μπορεί ν' ανασταλεί"
 
 #: builtins/type.def:235
 #, c-format
 msgid "%s is aliased to `%s'\n"
-msgstr "%s ÎµÎ¯Î½Î±Î¹ Ï\88εÏ\85δÏ\8eνημο του «%s»\n"
+msgstr "%s ÎµÎ¯Î½Î±Î¹ Ï\83Ï\85νÏ\8eνÏ\85μο του «%s»\n"
 
 #: builtins/type.def:256
 #, c-format
@@ -879,16 +890,16 @@ msgstr "%s: μη έγκυρο όρισμα ορίου"
 msgid "`%c': bad command"
 msgstr "«%c»: λάθος διαταγή"
 
-#: builtins/ulimit.def:455
+#: builtins/ulimit.def:464
 #, c-format
 msgid "%s: cannot get limit: %s"
 msgstr "%s: αδύνατον να πάρω το όριο: %s"
 
-#: builtins/ulimit.def:481
+#: builtins/ulimit.def:490
 msgid "limit"
 msgstr "όριο"
 
-#: builtins/ulimit.def:493 builtins/ulimit.def:793
+#: builtins/ulimit.def:502 builtins/ulimit.def:802
 #, c-format
 msgid "%s: cannot modify limit: %s"
 msgstr "%s: αδυναμία μεταβολής ορίου: %s"
@@ -905,9 +916,9 @@ msgstr "`%c': μη έγκυρος τελεστής συμβολικού mode"
 #: builtins/umask.def:287
 #, c-format
 msgid "`%c': invalid symbolic mode character"
-msgstr "`%c': μη έγκυρος χαρακτήρας συμβολικού mode "
+msgstr "`%c': μη έγκυρος χαρακτήρας συμβολικού mode"
 
-#: error.c:89 error.c:347 error.c:349 error.c:351
+#: error.c:89 error.c:373 error.c:375 error.c:377
 msgid " line "
 msgstr " γραμμή "
 
@@ -927,172 +938,180 @@ msgstr "Ακύρωση..."
 msgid "INFORM: "
 msgstr "INFORM: "
 
-#: error.c:462
+#: error.c:310
+#, fuzzy, c-format
+msgid "DEBUG warning: "
+msgstr "προειδοποίηση: "
+
+#: error.c:488
 msgid "unknown command error"
 msgstr "σφάλμα άγνωστης εντολής"
 
-#: error.c:463
+#: error.c:489
 msgid "bad command type"
 msgstr "λάθος τύπος εντολής"
 
-#: error.c:464
+#: error.c:490
 msgid "bad connector"
 msgstr "bad connector"
 
-#: error.c:465
+#: error.c:491
 msgid "bad jump"
 msgstr "κακό άλμα"
 
-#: error.c:503
+#: error.c:529
 #, c-format
 msgid "%s: unbound variable"
-msgstr "%s: μεταβλητή χωρίς σύνδεση "
+msgstr "%s: μεταβλητή χωρίς σύνδεση"
 
-#: eval.c:242
+#: eval.c:243
 msgid "\atimed out waiting for input: auto-logout\n"
 msgstr "\aη αναμονή για δεδομένα έληξε: αυτόματη αποσύνδεση\n"
 
-#: execute_cmd.c:537
+#: execute_cmd.c:555
 #, c-format
 msgid "cannot redirect standard input from /dev/null: %s"
 msgstr "αδυναμία ανακατεύθυνσης τυπικής εισόδου από /dev/null: %s"
 
-#: execute_cmd.c:1297
+#: execute_cmd.c:1317
 #, c-format
 msgid "TIMEFORMAT: `%c': invalid format character"
 msgstr "TIMEFORMAT: «%c»: μη έγκυρος χαρακτήρας μορφοποίησης"
 
-#: execute_cmd.c:2362
+#: execute_cmd.c:2391
 #, c-format
 msgid "execute_coproc: coproc [%d:%s] still exists"
-msgstr "execute_coproc: coproc [%d:%s] υφίσταται ακόμη "
+msgstr "execute_coproc: coproc [%d:%s] υφίσταται ακόμη"
 
-#: execute_cmd.c:2486
+#: execute_cmd.c:2524
 msgid "pipe error"
 msgstr "pipe error"
 
-#: execute_cmd.c:4793
+#: execute_cmd.c:4923
 #, c-format
 msgid "eval: maximum eval nesting level exceeded (%d)"
-msgstr "eval: μέγιστο επίπεδο φωλιάσματος eval ξεπεράστηκε (%d) "
+msgstr "eval: μέγιστο επίπεδο φωλιάσματος eval ξεπεράστηκε (%d)"
 
-#: execute_cmd.c:4805
+#: execute_cmd.c:4935
 #, c-format
 msgid "%s: maximum source nesting level exceeded (%d)"
-msgstr "%s: μέγιστο επίπεδο φωλιάσματος source ξεπεράστηκε (%d) "
+msgstr "%s: μέγιστο επίπεδο φωλιάσματος source ξεπεράστηκε (%d)"
 
-#: execute_cmd.c:4913
+#: execute_cmd.c:5043
 #, c-format
 msgid "%s: maximum function nesting level exceeded (%d)"
-msgstr "%s: μέγιστο επίπεδο φωλιάσματος συνάρτησης ξεπεράστηκε (%d) "
+msgstr "%s: μέγιστο επίπεδο φωλιάσματος συνάρτησης ξεπεράστηκε (%d)"
 
-#: execute_cmd.c:5467
+#: execute_cmd.c:5598
 #, c-format
 msgid "%s: restricted: cannot specify `/' in command names"
 msgstr "%s: περιορισμός: δεν μπορεί να περιέχεται «/» σε όνομα εντολής"
 
-#: execute_cmd.c:5574
+#: execute_cmd.c:5715
 #, c-format
 msgid "%s: command not found"
 msgstr "%s: εντολή δεν βρέθηκε"
 
-#: execute_cmd.c:5816
+#: execute_cmd.c:5957
 #, c-format
 msgid "%s: %s"
 msgstr "%s: %s"
 
-#: execute_cmd.c:5854
+#: execute_cmd.c:5975
+#, fuzzy, c-format
+msgid "%s: cannot execute: required file not found"
+msgstr "%s: αδυναμία εκτέλεσης δυαδικού αρχείου"
+
+#: execute_cmd.c:6000
 #, c-format
 msgid "%s: %s: bad interpreter"
-msgstr "%s: %s: κακός interpreter "
+msgstr "%s: %s: κακός interpreter"
 
-#: execute_cmd.c:5891
+#: execute_cmd.c:6037
 #, c-format
 msgid "%s: cannot execute binary file: %s"
 msgstr "%s: αδυναμία εκτέλεσης δυαδικού αρχείου: %s"
 
-#: execute_cmd.c:5977
+#: execute_cmd.c:6123
 #, c-format
 msgid "`%s': is a special builtin"
 msgstr "«%s»: είναι ειδικό builtin"
 
-#: execute_cmd.c:6029
+#: execute_cmd.c:6175
 #, c-format
 msgid "cannot duplicate fd %d to fd %d"
 msgstr "αδυναμία αντιγραφής του fd %d στον fd %d"
 
 #: expr.c:263
 msgid "expression recursion level exceeded"
-msgstr ""
+msgstr "υπέρβαση του επιπέδου αναδρομικότητας στην έκφραση"
 
 #: expr.c:291
 msgid "recursion stack underflow"
-msgstr ""
+msgstr "αρνητική υπερχείλιση στοίβας"
 
-#: expr.c:477
+#: expr.c:478
 msgid "syntax error in expression"
 msgstr "συντακτικό σφάλμα στην έκφραση"
 
-#: expr.c:521
+#: expr.c:522
 msgid "attempted assignment to non-variable"
 msgstr "απόπειρα ανάθεσης σε μη-μεταβλητή"
 
-#: expr.c:530
-#, fuzzy
+#: expr.c:531
 msgid "syntax error in variable assignment"
-msgstr "Ï\83Ï\85νÏ\84ακÏ\84ικÏ\8c Ï\83Ï\86άλμα Ï\83Ï\84ην Î­ÎºÏ\86Ï\81αÏ\83η"
+msgstr "Ï\83Ï\85νÏ\84ακÏ\84ικÏ\8c Ï\83Ï\86άλμα Ï\83Ï\84ην Î±Î½Î¬Î¸ÎµÏ\83η Î¼ÎµÏ\84αβληÏ\84ήÏ\82"
 
-#: expr.c:544 expr.c:911
+#: expr.c:545 expr.c:912
 msgid "division by 0"
-msgstr "διαίρεση διά 0"
+msgstr "διαίρεση διά του 0"
 
-#: expr.c:592
+#: expr.c:593
 msgid "bug: bad expassign token"
-msgstr "bug: κακό σύμβολο για expassign "
+msgstr "bug: κακό σύμβολο για expassign"
 
-#: expr.c:646
+#: expr.c:647
 msgid "`:' expected for conditional expression"
 msgstr "«:» αναμενόταν για μια έκφραση υπό συνθήκη"
 
-#: expr.c:972
+#: expr.c:973
 msgid "exponent less than 0"
 msgstr "εκθέτης μικρότερος του 0"
 
-#: expr.c:1029
+#: expr.c:1030
 msgid "identifier expected after pre-increment or pre-decrement"
-msgstr "αναγνωριστικό αναμενόταν μετά από pre-increment ή pre-decrement "
+msgstr "αναγνωριστικό αναμενόταν μετά από pre-increment ή pre-decrement"
 
-#: expr.c:1056
+#: expr.c:1057
 msgid "missing `)'"
 msgstr "λείπει «)»"
 
-#: expr.c:1107 expr.c:1487
+#: expr.c:1108 expr.c:1492
 msgid "syntax error: operand expected"
 msgstr "syntax error: αναμενόταν τελεστέος"
 
-#: expr.c:1489
+#: expr.c:1494
 msgid "syntax error: invalid arithmetic operator"
 msgstr "syntax error: μη έγκυρος αριθμητικός τελεστής"
 
-#: expr.c:1513
+#: expr.c:1518
 #, c-format
 msgid "%s%s%s: %s (error token is \"%s\")"
 msgstr "%s%s%s: %s (το λανθασμένο σύμβολο είναι \"%s\")"
 
-#: expr.c:1573
+#: expr.c:1578
 msgid "invalid arithmetic base"
 msgstr "μη έγκυρη αριθμητική βάση"
 
-#: expr.c:1582
-#, fuzzy
+#: expr.c:1587
 msgid "invalid integer constant"
-msgstr "%s: μη έγκυρος αριθμός γραμμής"
+msgstr "μη έγκυρη ακέραιη σταθερά"
 
-#: expr.c:1598
+#: expr.c:1603
 msgid "value too great for base"
 msgstr "τιμή πολύ μεγάλη για βάση"
 
-#: expr.c:1647
+#: expr.c:1652
 #, c-format
 msgid "%s: expression error\n"
 msgstr "%s: σφάλμα έκφρασης\n"
@@ -1101,7 +1120,7 @@ msgstr "%s: σφάλμα έκφρασης\n"
 msgid "getcwd: cannot access parent directories"
 msgstr "getcwd: αδυναμία πρόσβασης στο γονικό κατάλογο"
 
-#: input.c:99 subst.c:6069
+#: input.c:99 subst.c:6208
 #, c-format
 msgid "cannot reset nodelay mode for fd %d"
 msgstr "αδυναμία επανάταξης nodelay mode για fd %d"
@@ -1115,226 +1134,224 @@ msgstr ""
 #: input.c:274
 #, c-format
 msgid "save_bash_input: buffer already exists for new fd %d"
-msgstr "save_bash_input: ο buffer υπάρχει ήδη για νέο fd %d "
+msgstr "save_bash_input: ο buffer υπάρχει ήδη για νέο fd %d"
 
 #: jobs.c:543
 msgid "start_pipeline: pgrp pipe"
 msgstr "start_pipeline: pgrp pipe"
 
-#: jobs.c:906
+#: jobs.c:907
 #, c-format
 msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
-msgstr ""
+msgstr "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
 
-#: jobs.c:959
+#: jobs.c:960
 #, c-format
 msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
-msgstr ""
+msgstr "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
 
-#: jobs.c:1283
+#: jobs.c:1279
 #, c-format
 msgid "forked pid %d appears in running job %d"
 msgstr "η διεργασία κλώνος %d εμφανίζεται στην εργασία που τρέχει %d"
 
-#: jobs.c:1402
+#: jobs.c:1397
 #, c-format
 msgid "deleting stopped job %d with process group %ld"
 msgstr "διαγραφή σταματημένης εγασίας %d με ομάδα %ld"
 
-#: jobs.c:1511
+#: jobs.c:1502
 #, c-format
 msgid "add_process: pid %5ld (%s) marked as still alive"
-msgstr "add_process: pid %5ld (%s) μαρκαρισμένη ως ακόμα ζωντανή "
+msgstr "add_process: pid %5ld (%s) μαρκαρισμένη ως ακόμα ζωντανή"
 
-#: jobs.c:1850
+#: jobs.c:1839
 #, c-format
 msgid "describe_pid: %ld: no such pid"
 msgstr "describe_pid: %ld: δεν υπάρχει τέτοιο pid"
 
-#: jobs.c:1865
+#: jobs.c:1854
 #, c-format
 msgid "Signal %d"
 msgstr "Σήμα %d"
 
-#: jobs.c:1879 jobs.c:1905
+#: jobs.c:1868 jobs.c:1894
 msgid "Done"
 msgstr "Done"
 
-#: jobs.c:1884 siglist.c:122
+#: jobs.c:1873 siglist.c:123
 msgid "Stopped"
-msgstr "σταματημένο"
+msgstr "Sταματημένο"
 
-#: jobs.c:1888
+#: jobs.c:1877
 #, c-format
 msgid "Stopped(%s)"
-msgstr "σταματημένο(%s)"
+msgstr "Σταματημένο(%s)"
 
-#: jobs.c:1892
+#: jobs.c:1881
 msgid "Running"
-msgstr "υπό εκτέλεση"
+msgstr "Υπό εκτέλεση"
 
-#: jobs.c:1909
+#: jobs.c:1898
 #, c-format
 msgid "Done(%d)"
 msgstr "Done(%d)"
 
-#: jobs.c:1911
+#: jobs.c:1900
 #, c-format
 msgid "Exit %d"
 msgstr "Έξοδος %d"
 
-#: jobs.c:1914
+#: jobs.c:1903
 msgid "Unknown status"
 msgstr "Άγνωστη κατάσταση"
 
-#: jobs.c:2001
+#: jobs.c:1990
 #, c-format
 msgid "(core dumped) "
 msgstr "(core dumped) "
 
-#: jobs.c:2020
+#: jobs.c:2009
 #, c-format
 msgid "  (wd: %s)"
 msgstr "  (wd: %s)"
 
-#: jobs.c:2259
+#: jobs.c:2250
 #, c-format
 msgid "child setpgid (%ld to %ld)"
 msgstr "child setpgid (%ld to %ld)"
 
-#: jobs.c:2617 nojobs.c:664
+#: jobs.c:2608 nojobs.c:666
 #, c-format
 msgid "wait: pid %ld is not a child of this shell"
 msgstr "wait: διεργασία %ld δεν αποτελεί θυγατρική αυτού του κελύφους"
 
-#: jobs.c:2893
+#: jobs.c:2884
 #, c-format
 msgid "wait_for: No record of process %ld"
 msgstr "wait_for: Δεν υπάρχουν στοιχεία για διεργασία %ld"
 
-#: jobs.c:3236
+#: jobs.c:3223
 #, c-format
 msgid "wait_for_job: job %d is stopped"
 msgstr "wait_for_job: η εργασία %d είναι σταματημένη"
 
-#: jobs.c:3564
-#, fuzzy, c-format
+#: jobs.c:3551
+#, c-format
 msgid "%s: no current jobs"
 msgstr "%s: δεν υπάρχει τέτοια εργασία"
 
-#: jobs.c:3571
+#: jobs.c:3558
 #, c-format
 msgid "%s: job has terminated"
 msgstr "%s: η εργασία τερματίστηκε"
 
-#: jobs.c:3580
+#: jobs.c:3567
 #, c-format
 msgid "%s: job %d already in background"
 msgstr "%s: εργασία %d ήδη στο παρασκήνιο"
 
-#: jobs.c:3806
+#: jobs.c:3793
 msgid "waitchld: turning on WNOHANG to avoid indefinite block"
-msgstr ""
-"waitchld: ενεργοποίηση WNOHANG ώστε ν' αποφευχθεί οριστικό μπλοκάρισμα "
+msgstr "waitchld: ενεργοποίηση WNOHANG ώστε ν' αποφευχθεί οριστικό μπλοκάρισμα"
 
-#: jobs.c:4320
+#: jobs.c:4307
 #, c-format
 msgid "%s: line %d: "
 msgstr "%s: γραμμή %d: "
 
-#: jobs.c:4334 nojobs.c:919
+#: jobs.c:4321 nojobs.c:921
 #, c-format
 msgid " (core dumped)"
 msgstr " (core dumped)"
 
-#: jobs.c:4346 jobs.c:4359
+#: jobs.c:4333 jobs.c:4346
 #, c-format
 msgid "(wd now: %s)\n"
 msgstr "(τώρα wd: %s)\n"
 
-#: jobs.c:4391
+#: jobs.c:4378
 msgid "initialize_job_control: getpgrp failed"
 msgstr "initialize_job_control: αποτυχία getpgrp"
 
-#: jobs.c:4447
-#, fuzzy
+#: jobs.c:4434
 msgid "initialize_job_control: no job control in background"
-msgstr "initialize_job_control: setpgid"
+msgstr "initialize_job_control: όχι έλεγχος εργασιών στο παρασκήνιο"
 
-#: jobs.c:4463
+#: jobs.c:4450
 msgid "initialize_job_control: line discipline"
-msgstr ""
+msgstr "initialize_job_control: line discipline"
 
-#: jobs.c:4473
+#: jobs.c:4460
 msgid "initialize_job_control: setpgid"
 msgstr "initialize_job_control: setpgid"
 
-#: jobs.c:4494 jobs.c:4503
+#: jobs.c:4481 jobs.c:4490
 #, c-format
 msgid "cannot set terminal process group (%d)"
-msgstr "αδυναμία ρύθμισης της ομάδας της διεργασίας του τερματικού (%d) "
+msgstr "αδυναμία ρύθμισης της ομάδας της διεργασίας του τερματικού (%d)"
 
-#: jobs.c:4508
+#: jobs.c:4495
 msgid "no job control in this shell"
 msgstr "δεν υπάρχει job control σ'αυτό το κέλυφος"
 
-#: lib/malloc/malloc.c:353
+#: lib/malloc/malloc.c:367
 #, c-format
 msgid "malloc: failed assertion: %s\n"
 msgstr "malloc: αποτυχημένη assertion: %s\n"
 
-#: lib/malloc/malloc.c:369
+#: lib/malloc/malloc.c:383
 #, c-format
 msgid ""
 "\r\n"
 "malloc: %s:%d: assertion botched\r\n"
 msgstr ""
+"\r\n"
+"malloc: %s:%d: αποτυχιμένη επιβεβαίωση\r\n"
 
-#: lib/malloc/malloc.c:370 lib/malloc/malloc.c:933
+#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941
 msgid "unknown"
 msgstr "άγνωστο"
 
-#: lib/malloc/malloc.c:882
+#: lib/malloc/malloc.c:892
 msgid "malloc: block on free list clobbered"
-msgstr ""
+msgstr "malloc: μπλοκ στην ελεύθερη λίστα clobbered"
 
-#: lib/malloc/malloc.c:972
+#: lib/malloc/malloc.c:980
 msgid "free: called with already freed block argument"
-msgstr "free: κλήθηκε με όρισμα ήδη ελευθερωμένο μπλοκ "
+msgstr "free: κλήθηκε με όρισμα ήδη ελευθερωμένο μπλοκ"
 
-#: lib/malloc/malloc.c:975
+#: lib/malloc/malloc.c:983
 msgid "free: called with unallocated block argument"
-msgstr "free: κλήθηκε με όρισμα ένα μη εκχωρημένο μπλοκ "
+msgstr "free: κλήθηκε με όρισμα ένα μη εκχωρημένο μπλοκ"
 
-#: lib/malloc/malloc.c:994
+#: lib/malloc/malloc.c:1001
 msgid "free: underflow detected; mh_nbytes out of range"
-msgstr "free: εντοπίστηκε αρνητική υπερχείληση, mh_nbytes εκτός ορίου "
+msgstr "free: εντοπίστηκε αρνητική υπερχείληση, mh_nbytes εκτός ορίου"
 
-#: lib/malloc/malloc.c:1001
-#, fuzzy
+#: lib/malloc/malloc.c:1007
 msgid "free: underflow detected; magic8 corrupted"
-msgstr "free: εντοπίστηκε αρνητική υπερχείληση, mh_nbytes εκτός ορίου "
+msgstr "free: εντοπίστηκε αρνητική υπερχείληση, magic8 corrupted"
 
-#: lib/malloc/malloc.c:1009
+#: lib/malloc/malloc.c:1014
 msgid "free: start and end chunk sizes differ"
-msgstr "free: τα μεγέθη των κομματιών στην αρχή και το τέλος διαφέρουν "
+msgstr "free: τα μεγέθη των κομματιών στην αρχή και το τέλος διαφέρουν"
 
-#: lib/malloc/malloc.c:1119
+#: lib/malloc/malloc.c:1176
 msgid "realloc: called with unallocated block argument"
-msgstr "realloc: κλήθηκε με όρισμα ένα μη εκχωρημένο μπλοκ "
+msgstr "realloc: κλήθηκε με όρισμα ένα μη εκχωρημένο μπλοκ"
 
-#: lib/malloc/malloc.c:1134
+#: lib/malloc/malloc.c:1191
 msgid "realloc: underflow detected; mh_nbytes out of range"
 msgstr "realloc: εντοπίστηκε αρνητική υπερχείληση, mh_nbytes εκτός ορίου"
 
-#: lib/malloc/malloc.c:1141
-#, fuzzy
+#: lib/malloc/malloc.c:1197
 msgid "realloc: underflow detected; magic8 corrupted"
-msgstr "realloc: εντοπίστηκε αρνητική υπερχείληση, mh_nbytes εκτός ορίου"
+msgstr "realloc: εντοπίστηκε αρνητική υπερχείληση, magic8 αλλειωμένο"
 
-#: lib/malloc/malloc.c:1150
+#: lib/malloc/malloc.c:1205
 msgid "realloc: start and end chunk sizes differ"
-msgstr "realloc: μεγέθη κομματιών σ' αρχή και τέλος διαφέρουν "
+msgstr "realloc: μεγέθη κομματιών σ' αρχή και τέλος διαφέρουν"
 
 #: lib/malloc/table.c:191
 #, c-format
@@ -1368,28 +1385,28 @@ msgstr "%s: μη έγκυρη υπηρεσία"
 #: lib/sh/netopen.c:306
 #, c-format
 msgid "%s: bad network path specification"
-msgstr "%s: κακιά προδιαγραφή διαδρομής δικτύου "
+msgstr "%s: κακιά προδιαγραφή διαδρομής δικτύου"
 
 #: lib/sh/netopen.c:347
 msgid "network operations not supported"
 msgstr "μη υποστηριζόμενες δικτιακές υπηρεσίες"
 
-#: locale.c:217
+#: locale.c:219
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s)"
 msgstr "setlocale: LC_ALL: αδυναμία μεταβολής locale (%s)"
 
-#: locale.c:219
+#: locale.c:221
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s): %s"
 msgstr "setlocale: LC_ALL: αδυναμία μεταβολής locale (%s): %s"
 
-#: locale.c:292
+#: locale.c:294
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s)"
 msgstr "setlocale: %s: αδυναμία μεταβολής locale (%s)"
 
-#: locale.c:294
+#: locale.c:296
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s): %s"
 msgstr "setlocale: %s: αδυναμία μεταβολής locale (%s): %s"
@@ -1407,141 +1424,141 @@ msgstr "Έχεις νέο μήνυμα στο $_"
 msgid "The mail in %s has been read\n"
 msgstr "Το μήνυμα στο %s διαβάστηκε\n"
 
-#: make_cmd.c:317
+#: make_cmd.c:314
 msgid "syntax error: arithmetic expression required"
 msgstr "syntax error: απαιτείται αριθμητική έκφραση"
 
-#: make_cmd.c:319
+#: make_cmd.c:316
 msgid "syntax error: `;' unexpected"
 msgstr "συντακτικό σφάλμα: δεν αναμενόταν «;»"
 
-#: make_cmd.c:320
+#: make_cmd.c:317
 #, c-format
 msgid "syntax error: `((%s))'"
 msgstr "συντακτικό σφάλμα: «((%s))»"
 
-#: make_cmd.c:572
+#: make_cmd.c:569
 #, c-format
 msgid "make_here_document: bad instruction type %d"
 msgstr "make_here_document: ο τύπος οδηγίας δεν είναι σωστός %d"
 
-#: make_cmd.c:657
+#: make_cmd.c:668
 #, c-format
 msgid "here-document at line %d delimited by end-of-file (wanted `%s')"
 msgstr ""
 "here-document στη γραμμή %d με όριο το τέλος του αρχείου (αντί του «%s»)"
 
-#: make_cmd.c:756
+#: make_cmd.c:769
 #, c-format
 msgid "make_redirection: redirection instruction `%d' out of range"
 msgstr "make_redirection: η οδηγία της ανακατεύθυνσης «%d» εκτός ορίων"
 
-#: parse.y:2393
+#: parse.y:2428
 #, c-format
 msgid ""
 "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line "
 "truncated"
 msgstr ""
 "shell_getc: shell_input_line_size (%zu) υπερβαίνει το SIZE_MAX (%lu): γραμμή "
-"κόπηκε "
+"κόπηκε"
 
-#: parse.y:2826
+#: parse.y:2921
 msgid "maximum here-document count exceeded"
-msgstr "ο μέγιστος αριθμός here-document ξεπεράστηκε "
+msgstr "ο μέγιστος αριθμός here-document ξεπεράστηκε"
 
-#: parse.y:3581 parse.y:3957 parse.y:4556
+#: parse.y:3684 parse.y:4244 parse.y:6148
 #, c-format
 msgid "unexpected EOF while looking for matching `%c'"
 msgstr "μη αναμενόμενο EOF κατά την αναζήτηση «%c»"
 
-#: parse.y:4696
+#: parse.y:4452
 msgid "unexpected EOF while looking for `]]'"
 msgstr "μη αναμενόμενο EOF ενώ έψαχνα για «]]»"
 
-#: parse.y:4701
+#: parse.y:4457
 #, c-format
 msgid "syntax error in conditional expression: unexpected token `%s'"
 msgstr "syntax error in conditional expression: μη αναμενόμενο σύμβολο «%s»"
 
-#: parse.y:4705
+#: parse.y:4461
 msgid "syntax error in conditional expression"
-msgstr "συντακτικό σφάλμα σ' έκφραση υπό συνθήκη "
+msgstr "συντακτικό σφάλμα σ' έκφραση υπό συνθήκη"
 
-#: parse.y:4783
+#: parse.y:4539
 #, c-format
 msgid "unexpected token `%s', expected `)'"
 msgstr "μη αναμενόμενο σύμβολο «%s», αναμενόταν «)»"
 
-#: parse.y:4787
+#: parse.y:4543
 msgid "expected `)'"
 msgstr "αναμενόταν «)»"
 
-#: parse.y:4815
+#: parse.y:4571
 #, c-format
 msgid "unexpected argument `%s' to conditional unary operator"
-msgstr "απροσδόκητο όρισμα «%s» στον υπό αίρεση μοναδιαίο τελεστή  "
+msgstr "απροσδόκητο όρισμα «%s» στον υπό αίρεση μοναδιαίο τελεστή"
 
-#: parse.y:4819
+#: parse.y:4575
 msgid "unexpected argument to conditional unary operator"
-msgstr "απροσδόκητο όρισμα για τον μοναδιαίο τελεστή "
+msgstr "απροσδόκητο όρισμα για τον μοναδιαίο τελεστή"
 
-#: parse.y:4865
+#: parse.y:4621
 #, c-format
 msgid "unexpected token `%s', conditional binary operator expected"
-msgstr "απροσδόκητο σύμβολο «%s» βρέθηκε αντί για δυαδικό τελεστή υπό αίρεση "
+msgstr "απροσδόκητο σύμβολο «%s» βρέθηκε αντί για δυαδικό τελεστή υπό αίρεση"
 
-#: parse.y:4869
+#: parse.y:4625
 msgid "conditional binary operator expected"
-msgstr "αναμενόταν δυαδικός τελεστής υπό αίρεση "
+msgstr "αναμενόταν δυαδικός τελεστής υπό αίρεση"
 
-#: parse.y:4891
+#: parse.y:4647
 #, c-format
 msgid "unexpected argument `%s' to conditional binary operator"
-msgstr "απροσδόκητο όρισμα «%s» για δυαδικό τελεστή υπό αίρεση "
+msgstr "απροσδόκητο όρισμα «%s» για δυαδικό τελεστή υπό αίρεση"
 
-#: parse.y:4895
+#: parse.y:4651
 msgid "unexpected argument to conditional binary operator"
-msgstr "απροσδόκητο όρισμα για δυαδικό τελεστή υπό αίρεση "
+msgstr "απροσδόκητο όρισμα για δυαδικό τελεστή υπό αίρεση"
 
-#: parse.y:4906
+#: parse.y:4662
 #, c-format
 msgid "unexpected token `%c' in conditional command"
-msgstr "απροσδόκητο σύμβολο «%c» σε εντολή υπό αίρεση "
+msgstr "απροσδόκητο σύμβολο «%c» σε εντολή υπό αίρεση"
 
-#: parse.y:4909
+#: parse.y:4665
 #, c-format
 msgid "unexpected token `%s' in conditional command"
-msgstr "απροσδόκητο σύμβολο «%s» σε εντολή υπό αίρεση "
+msgstr "απροσδόκητο σύμβολο «%s» σε εντολή υπό αίρεση"
 
-#: parse.y:4913
+#: parse.y:4669
 #, c-format
 msgid "unexpected token %d in conditional command"
-msgstr "απροσδόκητο σύμβολο %d σε εντολή υπό αίρεση "
+msgstr "απροσδόκητο σύμβολο %d σε εντολή υπό αίρεση"
 
-#: parse.y:6336
+#: parse.y:6118
 #, c-format
 msgid "syntax error near unexpected token `%s'"
 msgstr "συντακτικό σφάλμα κοντά στο μη αναμενόμενο σύμβολο «%s»"
 
-#: parse.y:6355
+#: parse.y:6137
 #, c-format
 msgid "syntax error near `%s'"
 msgstr "συντακτικό σφάλμα κοντά σε «%s»"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error: unexpected end of file"
 msgstr "syntax error: μη αναμενόμενο τέλος αρχείου"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error"
 msgstr "συντακτικό σφάλμα"
 
-#: parse.y:6428
+#: parse.y:6216
 #, c-format
 msgid "Use \"%s\" to leave the shell.\n"
 msgstr "Χρήση «%s» για έξοδο από το κέλυφος.\n"
 
-#: parse.y:6602
+#: parse.y:6394
 msgid "unexpected EOF while looking for matching `)'"
 msgstr "μη αναμενόμενο EOF ενώ έψαχνα «)»"
 
@@ -1563,7 +1580,7 @@ msgstr "progcomp_insert: %s: NULL COMPSPEC"
 #: print_cmd.c:302
 #, c-format
 msgid "print_command: bad connector `%d'"
-msgstr ""
+msgstr "print_command: λάθος connector «%d»"
 
 #: print_cmd.c:375
 #, c-format
@@ -1579,94 +1596,96 @@ msgstr "xtrace_set: NULL file pointer"
 msgid "xtrace fd (%d) != fileno xtrace fp (%d)"
 msgstr "xtrace fd (%d) != fileno xtrace fp (%d)"
 
-#: print_cmd.c:1540
+#: print_cmd.c:1545
 #, c-format
 msgid "cprintf: `%c': invalid format character"
 msgstr "cprintf: «%c»: μη έγκυρη μορφή χαρακτήρα"
 
-#: redir.c:149 redir.c:197
+#: redir.c:150 redir.c:198
 msgid "file descriptor out of range"
 msgstr "περιγραφέας αρχείου εκτός ορίων"
 
-#: redir.c:204
+#: redir.c:205
 #, c-format
 msgid "%s: ambiguous redirect"
 msgstr "%s: ασαφής ανακατεύθυνση"
 
-#: redir.c:208
+#: redir.c:209
 #, c-format
 msgid "%s: cannot overwrite existing file"
 msgstr "%s: αδυναμία εγγραφής πάνω σε υπάρχον αρχείο"
 
-#: redir.c:213
+#: redir.c:214
 #, c-format
 msgid "%s: restricted: cannot redirect output"
 msgstr "%s: restricted: αδυναμία ανακατεύθυνσης εξόδου"
 
-#: redir.c:218
+#: redir.c:219
 #, c-format
 msgid "cannot create temp file for here-document: %s"
 msgstr "αδυναμία δημιουργίας προσωρινού αρχείου για here-document: %s"
 
-#: redir.c:222
+#: redir.c:223
 #, c-format
 msgid "%s: cannot assign fd to variable"
 msgstr "%s: αδυναμία ανάθεσης fd σε μεταβλητή"
 
-#: redir.c:649
+#: redir.c:650
 msgid "/dev/(tcp|udp)/host/port not supported without networking"
 msgstr "/dev/(tcp|udp)/host/port δεν υποστηρίζεται χωρίς δικτύωση"
 
-#: redir.c:938 redir.c:1053 redir.c:1114 redir.c:1284
+#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303
 msgid "redirection error: cannot duplicate fd"
-msgstr ""
+msgstr "redirection error: ντουμπλάρισμα fd αδύνατον"
 
-#: shell.c:347
+#: shell.c:353
 msgid "could not find /tmp, please create!"
 msgstr "δεν μπόρεσα να βρω /tmp, παρακαλώ να τον δημιουργήσετε!"
 
-#: shell.c:351
+#: shell.c:357
 msgid "/tmp must be a valid directory name"
 msgstr "/tmp πρέπει να είναι ένα έγκυρο όνομα αρχείου"
 
-#: shell.c:804
+#: shell.c:826
 msgid "pretty-printing mode ignored in interactive shells"
 msgstr ""
+"κατάσταση βελτιωμένης εμφάνισης δεδομένων παρακάμπτεται στο "
+"αλληλοεπιδραστικό κέλυφος"
 
-#: shell.c:948
+#: shell.c:972
 #, c-format
 msgid "%c%c: invalid option"
 msgstr "%c%c: μη έγκυρη επιλογή"
 
-#: shell.c:1319
+#: shell.c:1343
 #, c-format
 msgid "cannot set uid to %d: effective uid %d"
-msgstr "αδυναμία ρύθμισης uid σε %d: effective uid %d "
+msgstr "αδυναμία ρύθμισης uid σε %d: effective uid %d"
 
-#: shell.c:1330
+#: shell.c:1354
 #, c-format
 msgid "cannot set gid to %d: effective gid %d"
-msgstr "αδυναμί ρύθμισης gid σε %d: effective gid %d "
+msgstr "αδυναμί ρύθμισης gid σε %d: effective gid %d"
 
-#: shell.c:1518
+#: shell.c:1544
 msgid "cannot start debugger; debugging mode disabled"
-msgstr "αδυναμία εκκίνησης του debugger, debugging απενεργοποιημένο  "
+msgstr "αδυναμία εκκίνησης του debugger, debugging απενεργοποιημένο"
 
-#: shell.c:1632
+#: shell.c:1658
 #, c-format
 msgid "%s: Is a directory"
 msgstr "%s: είναι κατάλογος"
 
-#: shell.c:1881
+#: shell.c:1907
 msgid "I have no name!"
 msgstr "Δεν έχω όνομα!"
 
-#: shell.c:2035
+#: shell.c:2061
 #, c-format
 msgid "GNU bash, version %s-(%s)\n"
 msgstr "GNU bash, έκδοση %s-(%s)\n"
 
-#: shell.c:2036
+#: shell.c:2062
 #, c-format
 msgid ""
 "Usage:\t%s [GNU long option] [option] ...\n"
@@ -1675,314 +1694,314 @@ msgstr ""
 "Χρήση:\t%s [μακρά επιλογή GNU] [επιλογή] ...\n"
 "\t%s [μακρά επιλογή GNU] [επιλοη] script-file ...\n"
 
-#: shell.c:2038
+#: shell.c:2064
 msgid "GNU long options:\n"
 msgstr "Μακρές επιλογές GNU:\n"
 
-#: shell.c:2042
+#: shell.c:2068
 msgid "Shell options:\n"
 msgstr "Επιλογές κελύφους:\n"
 
-#: shell.c:2043
+#: shell.c:2069
 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n"
 msgstr "\t-ilrsD ή -c εντολή ή -O shopt_option\t\t(invocation only)\n"
 
-#: shell.c:2062
+#: shell.c:2088
 #, c-format
 msgid "\t-%s or -o option\n"
 msgstr "\t-%s ή επιλογή -o\n"
 
-#: shell.c:2068
+#: shell.c:2094
 #, c-format
 msgid "Type `%s -c \"help set\"' for more information about shell options.\n"
 msgstr ""
 "Πληκτρολόγησε «%s -c \"help set\"» για πληροφορίες επί των επιλογών "
 "κελύφους.\n"
 
-#: shell.c:2069
+#: shell.c:2095
 #, c-format
 msgid "Type `%s -c help' for more information about shell builtin commands.\n"
 msgstr ""
 "Πληκτρολόγησε «%s -c help» για περισσότερες πληροφορίες σχετικά με τις "
 "ενσωματομένες στο κέλυφος εντολές.\n"
 
-#: shell.c:2070
+#: shell.c:2096
 #, c-format
 msgid "Use the `bashbug' command to report bugs.\n"
 msgstr "Χρησιμοποίησε την εντολή «bashbug» για αναφορά σφαλμάτων.\n"
 
-#: shell.c:2072
+#: shell.c:2098
 #, c-format
 msgid "bash home page: <http://www.gnu.org/software/bash>\n"
 msgstr "σελίδα του bash: <http://www.gnu.org/software/bash>\n"
 
-#: shell.c:2073
+#: shell.c:2099
 #, c-format
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 msgstr ""
 "Γενική βοήθεια για την χρήση του λογισμικού GNU: <http://www.gnu.org/gethelp/"
 ">\n"
 
-#: sig.c:757
+#: sig.c:765
 #, c-format
 msgid "sigprocmask: %d: invalid operation"
 msgstr "sigprocmask: %d: μη έγκυρη λειτουργία"
 
-#: siglist.c:47
+#: siglist.c:48
 msgid "Bogus signal"
-msgstr "Ψεύτικο σήματος "
+msgstr "Ψεύτικο σήμα"
 
-#: siglist.c:50
+#: siglist.c:51
 msgid "Hangup"
 msgstr "Hangup"
 
-#: siglist.c:54
+#: siglist.c:55
 msgid "Interrupt"
 msgstr "Διακοπή"
 
-#: siglist.c:58
+#: siglist.c:59
 msgid "Quit"
 msgstr "Quit"
 
-#: siglist.c:62
+#: siglist.c:63
 msgid "Illegal instruction"
 msgstr "Μη έγκυρη οδηγία"
 
-#: siglist.c:66
+#: siglist.c:67
 msgid "BPT trace/trap"
 msgstr "BPT trace/trap"
 
-#: siglist.c:74
+#: siglist.c:75
 msgid "ABORT instruction"
-msgstr "οδηγία ABORT"
+msgstr "Î\9fδηγία ABORT"
 
-#: siglist.c:78
+#: siglist.c:79
 msgid "EMT instruction"
-msgstr "οδηγία EMT"
+msgstr "Î\9fδηγία EMT"
 
-#: siglist.c:82
+#: siglist.c:83
 msgid "Floating point exception"
 msgstr "Εξαίρεση κινητής υποδιαστολής"
 
-#: siglist.c:86
+#: siglist.c:87
 msgid "Killed"
 msgstr "Killed"
 
-#: siglist.c:90
+#: siglist.c:91
 msgid "Bus error"
 msgstr "Bus error"
 
-#: siglist.c:94
+#: siglist.c:95
 msgid "Segmentation fault"
 msgstr "Σφάλμα κατάτμησης"
 
-#: siglist.c:98
+#: siglist.c:99
 msgid "Bad system call"
-msgstr "Κακή κλήση συστήματος "
+msgstr "Κακή κλήση συστήματος"
 
-#: siglist.c:102
+#: siglist.c:103
 msgid "Broken pipe"
 msgstr "Σπασμένη σωλήνα"
 
-#: siglist.c:106
+#: siglist.c:107
 msgid "Alarm clock"
 msgstr "Ρολόι συναγερμού"
 
-#: siglist.c:110
+#: siglist.c:111
 msgid "Terminated"
-msgstr "τερματισμός"
+msgstr "Τερματισμός"
 
-#: siglist.c:114
+#: siglist.c:115
 msgid "Urgent IO condition"
 msgstr "Επείγουσα κατάσταση IO"
 
-#: siglist.c:118
+#: siglist.c:119
 msgid "Stopped (signal)"
 msgstr "Σταματημένο (σήμα)"
 
-#: siglist.c:126
+#: siglist.c:127
 msgid "Continue"
 msgstr "Συνέχεια"
 
-#: siglist.c:134
+#: siglist.c:135
 msgid "Child death or stop"
 msgstr "Child death or stop"
 
-#: siglist.c:138
+#: siglist.c:139
 msgid "Stopped (tty input)"
 msgstr "Σταματημένο (είσοδος tty)"
 
-#: siglist.c:142
+#: siglist.c:143
 msgid "Stopped (tty output)"
 msgstr "Σταματημένο (έξοδος tty)"
 
-#: siglist.c:146
+#: siglist.c:147
 msgid "I/O ready"
 msgstr "I/O ready"
 
-#: siglist.c:150
+#: siglist.c:151
 msgid "CPU limit"
 msgstr "όριο CPU"
 
-#: siglist.c:154
+#: siglist.c:155
 msgid "File limit"
 msgstr "Όριο αρχείου"
 
-#: siglist.c:158
+#: siglist.c:159
 msgid "Alarm (virtual)"
 msgstr "Alarm (virtual)"
 
-#: siglist.c:162
+#: siglist.c:163
 msgid "Alarm (profile)"
 msgstr "Alarm (profile)"
 
-#: siglist.c:166
+#: siglist.c:167
 msgid "Window changed"
 msgstr "Παράθυρο άλλαξε"
 
-#: siglist.c:170
+#: siglist.c:171
 msgid "Record lock"
-msgstr ""
+msgstr "Κλείδωμα καταγραφής"
 
-#: siglist.c:174
+#: siglist.c:175
 msgid "User signal 1"
 msgstr "Σήμα χρήστη 1"
 
-#: siglist.c:178
+#: siglist.c:179
 msgid "User signal 2"
-msgstr "Σήμα χρήστη 2 "
+msgstr "Σήμα χρήστη 2"
 
-#: siglist.c:182
+#: siglist.c:183
 msgid "HFT input data pending"
 msgstr "Δεδομένα εισόδου HFT στην αναμονή"
 
-#: siglist.c:186
+#: siglist.c:187
 msgid "power failure imminent"
 msgstr "επικείμενη έλλειψη ρεύματος"
 
-#: siglist.c:190
+#: siglist.c:191
 msgid "system crash imminent"
 msgstr "επικείμενη πτώση συστήματος"
 
-#: siglist.c:194
+#: siglist.c:195
 msgid "migrate process to another CPU"
 msgstr "μετανάστευση διεργασίας σε άλλη CPU"
 
-#: siglist.c:198
+#: siglist.c:199
 msgid "programming error"
 msgstr "προγραμματιστικό σφάλμα"
 
-#: siglist.c:202
+#: siglist.c:203
 msgid "HFT monitor mode granted"
-msgstr ""
+msgstr "Κατάσταση επιτήρησης HFT δόθηκε"
 
-#: siglist.c:206
+#: siglist.c:207
 msgid "HFT monitor mode retracted"
-msgstr ""
+msgstr "Κατάσταση επιτήρησης HFT αναιρέθηκε"
 
-#: siglist.c:210
+#: siglist.c:211
 msgid "HFT sound sequence has completed"
-msgstr ""
+msgstr "Στιγμιότυπο ήχου HFT περατώθηκε."
 
-#: siglist.c:214
+#: siglist.c:215
 msgid "Information request"
 msgstr "Αίτηση για πληροφορίες"
 
-#: siglist.c:222 siglist.c:224
+#: siglist.c:223 siglist.c:225
 #, c-format
 msgid "Unknown Signal #%d"
 msgstr "Άγνωστο σήμα #%d"
 
-#: subst.c:1476 subst.c:1666
+#: subst.c:1480 subst.c:1670
 #, c-format
 msgid "bad substitution: no closing `%s' in %s"
 msgstr "κακή αντικατάσταση: όχι «%s» που κλείνει στο %s"
 
-#: subst.c:3281
+#: subst.c:3307
 #, c-format
 msgid "%s: cannot assign list to array member"
-msgstr "%s: αδυναμία εκχώρησης λίστας σε στοιχείο του πίνακα "
+msgstr "%s: αδυναμία εκχώρησης λίστας σε στοιχείο του πίνακα"
 
-#: subst.c:5910 subst.c:5926
+#: subst.c:6048 subst.c:6064
 msgid "cannot make pipe for process substitution"
-msgstr "αδυναμία δημιουργίας σωλήνα για αντικατάσταση διεργασίας  "
+msgstr "αδυναμία δημιουργίας σωλήνα για αντικατάσταση διεργασίας"
 
-#: subst.c:5985
+#: subst.c:6124
 msgid "cannot make child for process substitution"
-msgstr "αδυναμία δημιουργίας θυγατρικής για αντικατάσταση διεργασίας "
+msgstr "αδυναμία δημιουργίας θυγατρικής για αντικατάσταση διεργασίας"
 
-#: subst.c:6059
+#: subst.c:6198
 #, c-format
 msgid "cannot open named pipe %s for reading"
 msgstr "αδυναμία ανοίγματοε επώνυμης σωλήνας %s προς ανάγνωση"
 
-#: subst.c:6061
+#: subst.c:6200
 #, c-format
 msgid "cannot open named pipe %s for writing"
 msgstr "αδυναμία ανοίγματος επώνυμης σωλήνας %s προς εγγραφή"
 
-#: subst.c:6084
+#: subst.c:6223
 #, c-format
 msgid "cannot duplicate named pipe %s as fd %d"
-msgstr "αδυναμία αναπαραγωγής named pipe %s ως fd %d "
+msgstr "αδυναμία αναπαραγωγής named pipe %s ως fd %d"
 
-#: subst.c:6213
+#: subst.c:6370
 msgid "command substitution: ignored null byte in input"
-msgstr "αντικατάσταση εντολής: null byte αγνοήθηκε στην είσοδο "
+msgstr "αντικατάσταση εντολής: null byte αγνοήθηκε στην είσοδο"
 
-#: subst.c:6353
+#: subst.c:6533
 msgid "cannot make pipe for command substitution"
-msgstr "αδυναμία δημιουργίας σωλήνα για αντικατάσταση εντολής "
+msgstr "αδυναμία δημιουργίας σωλήνα για αντικατάσταση εντολής"
 
-#: subst.c:6397
+#: subst.c:6580
 msgid "cannot make child for command substitution"
-msgstr "αδυναμία δημιουργίας θυγατρικής για αντικατάσταση εντολής "
+msgstr "αδυναμία δημιουργίας θυγατρικής για αντικατάσταση εντολής"
 
-#: subst.c:6423
+#: subst.c:6613
 msgid "command_substitute: cannot duplicate pipe as fd 1"
-msgstr "command_substitute: αδυναμία αναπαραγωγής σωλήνα ως fd 1 "
+msgstr "command_substitute: αδυναμία αναπαραγωγής σωλήνα ως fd 1"
 
-#: subst.c:6883 subst.c:9952
+#: subst.c:7082 subst.c:10252
 #, c-format
 msgid "%s: invalid variable name for name reference"
-msgstr "%s: μη έγκυρο όνομα μεταβλητής ως όνομα αναφοράς "
+msgstr "%s: μη έγκυρο όνομα μεταβλητής ως όνομα αναφοράς"
 
-#: subst.c:6979 subst.c:6997 subst.c:7169
+#: subst.c:7178 subst.c:7196 subst.c:7369
 #, c-format
 msgid "%s: invalid indirect expansion"
-msgstr "%s: μη έγκυρη έμμεση επέκταση "
+msgstr "%s: μη έγκυρη έμμεση επέκταση"
 
-#: subst.c:7013 subst.c:7177
+#: subst.c:7212 subst.c:7377
 #, c-format
 msgid "%s: invalid variable name"
 msgstr "%s: μη έγκυρο όνομα μεταβλητής"
 
-#: subst.c:7256
-#, fuzzy, c-format
+#: subst.c:7478
+#, c-format
 msgid "%s: parameter not set"
-msgstr "%s: Ï\80αÏ\81άμεÏ\84Ï\81οÏ\82 ÎºÎµÎ½Î® Î® Î´ÎµÎ½ Î­Ï\87ει Î¿Ï\81ιÏ\83Ï\84εί"
+msgstr "%s: παράμετρος δεν έχει οριστεί"
 
-#: subst.c:7258
+#: subst.c:7480
 #, c-format
 msgid "%s: parameter null or not set"
 msgstr "%s: παράμετρος κενή ή δεν έχει οριστεί"
 
-#: subst.c:7503 subst.c:7518
+#: subst.c:7727 subst.c:7742
 #, c-format
 msgid "%s: substring expression < 0"
 msgstr "%s: έκφραση αρνητική < 0"
 
-#: subst.c:9281 subst.c:9302
+#: subst.c:9560 subst.c:9587
 #, c-format
 msgid "%s: bad substitution"
 msgstr "%s: κακή αντικατάσταση"
 
-#: subst.c:9390
+#: subst.c:9678
 #, c-format
 msgid "$%s: cannot assign in this way"
 msgstr "$%s: αδύνατη ανάθεση κατ' αυτόν τον τρόπο"
 
-#: subst.c:9814
+#: subst.c:10111
 msgid ""
 "future versions of the shell will force evaluation as an arithmetic "
 "substitution"
@@ -1990,12 +2009,12 @@ msgstr ""
 "μελλοντικές εκδόσεις του κελύφους θα επιβάλουν την αποτίμηση ως μια "
 "αριθμητική αντικατάσταση"
 
-#: subst.c:10367
+#: subst.c:10795
 #, c-format
 msgid "bad substitution: no closing \"`\" in %s"
 msgstr "κακή αντικατάσταση: δεν υπάρχει «`» που κλείνει στο %s"
 
-#: subst.c:11434
+#: subst.c:11874
 #, c-format
 msgid "no match: %s"
 msgstr "χωρίς ταίριασμα: %s"
@@ -2018,126 +2037,131 @@ msgstr "αναμενόταν «)»"
 msgid "`)' expected, found %s"
 msgstr "σναμενόταν «)», βρέθηκε %s"
 
-#: test.c:466 test.c:799
+#: test.c:469 test.c:814
 #, c-format
 msgid "%s: binary operator expected"
 msgstr "%s: αναμενόταν δυαδικός τελεστής"
 
-#: test.c:756 test.c:759
+#: test.c:771 test.c:774
 #, c-format
 msgid "%s: unary operator expected"
-msgstr "%s: αναμενόταν μοναδιαίος τελεστής "
+msgstr "%s: αναμενόταν μοναδιαίος τελεστής"
 
-#: test.c:881
+#: test.c:896
 msgid "missing `]'"
 msgstr "απούσα «]»"
 
-#: test.c:899
-#, fuzzy, c-format
+#: test.c:914
+#, c-format
 msgid "syntax error: `%s' unexpected"
-msgstr "συντακτικό σφάλμα: δεν αναμενόταν «;»"
+msgstr "συντακτικό σφάλμα: δεν αναμενόταν «%s»"
 
 #: trap.c:220
 msgid "invalid signal number"
 msgstr "μη έγκυρος αριθμός σήματος"
 
-#: trap.c:325
-#, fuzzy, c-format
+#: trap.c:323
+#, c-format
 msgid "trap handler: maximum trap handler level exceeded (%d)"
-msgstr "eval: μέγιστο επίπεδο φωλιάσματος eval ξεπεράστηκε (%d) "
+msgstr "trap handler: μέγιστο επίπεδο φωλιάσματος ξεπεράστηκε (%d)"
 
-#: trap.c:414
+#: trap.c:412
 #, c-format
 msgid "run_pending_traps: bad value in trap_list[%d]: %p"
-msgstr "run_pending_traps: κακή τιμή  στην trap_list[%d]: %p "
+msgstr "run_pending_traps: κακή τιμή  στην trap_list[%d]: %p"
 
-#: trap.c:418
+#: trap.c:416
 #, c-format
 msgid ""
 "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
 msgstr ""
 "run_pending_traps: ο διαχειριστής σήματος είναι ο SIG_DFL, στέλνει %d (%s) "
-"σε μένα "
+"σε μένα"
 
-#: trap.c:487
+#: trap.c:509
 #, c-format
 msgid "trap_handler: bad signal %d"
 msgstr "trap_handler: κακό σήμα %d"
 
-#: variables.c:421
+#: variables.c:424
 #, c-format
 msgid "error importing function definition for `%s'"
 msgstr "σφάλμα κατά την εισαγωγή του ορισμού της συνάρτησης «%s»"
 
-#: variables.c:833
+#: variables.c:838
 #, c-format
 msgid "shell level (%d) too high, resetting to 1"
 msgstr "επίπεδο κελύφους (%d) πολύ υψηλό, επαναφορά στο 1"
 
-#: variables.c:2674
+#: variables.c:2642
 msgid "make_local_variable: no function context at current scope"
 msgstr "make_local_variable: no function context at current scope"
 
-#: variables.c:2693
+#: variables.c:2661
 #, c-format
 msgid "%s: variable may not be assigned value"
-msgstr "%s: η μεταβλητή δεν μπορεί να δεχτεί τιμή  "
+msgstr "%s: η μεταβλητή δεν μπορεί να δεχτεί τιμή"
+
+#: variables.c:2818 variables.c:2874
+#, c-format
+msgid "%s: cannot inherit value from incompatible type"
+msgstr ""
 
-#: variables.c:3475
+#: variables.c:3459
 #, c-format
 msgid "%s: assigning integer to name reference"
 msgstr ""
 
-#: variables.c:4404
+#: variables.c:4390
 msgid "all_local_variables: no function context at current scope"
 msgstr ""
 
-#: variables.c:4771
+#: variables.c:4757
 #, c-format
 msgid "%s has null exportstr"
 msgstr "%s έχει κενό exportstr"
 
-#: variables.c:4776 variables.c:4785
+#: variables.c:4762 variables.c:4771
 #, c-format
 msgid "invalid character %d in exportstr for %s"
 msgstr "ο χαρακτήρας %d δεν έίναι έγκυρος στην exportstr για %s"
 
-#: variables.c:4791
+#: variables.c:4777
 #, c-format
 msgid "no `=' in exportstr for %s"
 msgstr "απουσία «=» στην exportstr για %s"
 
-#: variables.c:5331
+#: variables.c:5317
 msgid "pop_var_context: head of shell_variables not a function context"
 msgstr "pop_var_context: head of shell_variables not a function context"
 
-#: variables.c:5344
+#: variables.c:5330
 msgid "pop_var_context: no global_variables context"
 msgstr "pop_var_context: no global_variables context"
 
-#: variables.c:5424
+#: variables.c:5410
 msgid "pop_scope: head of shell_variables not a temporary environment scope"
 msgstr "pop_scope: head of shell_variables not a temporary environment scope"
 
-#: variables.c:6387
+#: variables.c:6400
 #, c-format
 msgid "%s: %s: cannot open as FILE"
 msgstr "%s: %s: αδυναμία ανοίγματος ως ΑΡΧΕΙΟ"
 
-#: variables.c:6392
+#: variables.c:6405
 #, c-format
 msgid "%s: %s: invalid value for trace file descriptor"
 msgstr "%s: %s: μη έγκυρη τιμή για trace file descriptor"
 
-#: variables.c:6437
+#: variables.c:6450
 #, c-format
 msgid "%s: %s: compatibility value out of range"
-msgstr "%s: %s: τιμή συμβατότητας εκτός ορίου "
+msgstr "%s: %s: τιμή συμβατότητας εκτός ορίου"
 
 #: version.c:46 version2.c:46
 #, fuzzy
-msgid "Copyright (C) 2020 Free Software Foundation, Inc."
-msgstr "Copyright (C) 2016 Free Software Foundation, Inc."
+msgid "Copyright (C) 2022 Free Software Foundation, Inc."
+msgstr "Copyright (C) 2020 Free Software Foundation, Inc."
 
 #: version.c:47 version2.c:47
 msgid ""
@@ -2226,12 +2250,16 @@ msgstr "command [-pVv] command [arg ...]"
 
 #: builtins.c:78
 #, fuzzy
-msgid "declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]"
+msgid ""
+"declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] "
+"[name ...]"
 msgstr "declare [-aAfFgilnrtux] [-p] [name[=value] ...]"
 
 #: builtins.c:80
 #, fuzzy
-msgid "typeset [-aAfFgiIlnrtux] [-p] name[=value] ..."
+msgid ""
+"typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] "
+"[name ...]"
 msgstr "typeset [-aAfFgilnrtux] [-p] name[=value] ..."
 
 #: builtins.c:82
@@ -2255,12 +2283,10 @@ msgid "eval [arg ...]"
 msgstr "eval [arg ...]"
 
 #: builtins.c:96
-#, fuzzy
 msgid "getopts optstring name [arg ...]"
-msgstr "getopts optstring name [arg]"
+msgstr "getopts optstring όνομα [arg]"
 
 #: builtins.c:98
-#, fuzzy
 msgid "exec [-cl] [-a name] [command [argument ...]] [redirection ...]"
 msgstr "exec [-cl] [-a name] [command [arguments ...]] [redirection ...]"
 
@@ -2333,7 +2359,8 @@ msgid "return [n]"
 msgstr "return [n]"
 
 #: builtins.c:142
-msgid "set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]"
+#, fuzzy
+msgid "set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]"
 msgstr "set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]"
 
 #: builtins.c:144
@@ -2381,7 +2408,8 @@ msgid "type [-afptP] name [name ...]"
 msgstr "type [-afptP] name [name ...]"
 
 #: builtins.c:171
-msgid "ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]"
+#, fuzzy
+msgid "ulimit [-SHabcdefiklmnpqrstuvxPRT] [limit]"
 msgstr "ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]"
 
 #: builtins.c:174
@@ -2389,7 +2417,6 @@ msgid "umask [-p] [-S] [mode]"
 msgstr "umask [-p] [-S] [mode]"
 
 #: builtins.c:177
-#, fuzzy
 msgid "wait [-fn] [-p var] [id ...]"
 msgstr "wait [-n] [id ...]"
 
@@ -2426,11 +2453,13 @@ msgstr ""
 "COMMANDS; ] fi"
 
 #: builtins.c:196
-msgid "while COMMANDS; do COMMANDS; done"
+#, fuzzy
+msgid "while COMMANDS; do COMMANDS-2; done"
 msgstr "while COMMANDS; do COMMANDS; done"
 
 #: builtins.c:198
-msgid "until COMMANDS; do COMMANDS; done"
+#, fuzzy
+msgid "until COMMANDS; do COMMANDS-2; done"
 msgstr "until COMMANDS; do COMMANDS; done"
 
 #: builtins.c:200
@@ -2482,7 +2511,6 @@ msgid "printf [-v var] format [arguments]"
 msgstr "printf [-v var] format [ορίσματα]"
 
 #: builtins.c:231
-#, fuzzy
 msgid ""
 "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-"
 "W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S "
@@ -2493,7 +2521,6 @@ msgstr ""
 "suffix] [name ...]"
 
 #: builtins.c:235
-#, fuzzy
 msgid ""
 "compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-"
 "F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]"
@@ -2502,7 +2529,6 @@ msgstr ""
 "[-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]"
 
 #: builtins.c:239
-#, fuzzy
 msgid "compopt [-o|+o option] [-DEI] [name ...]"
 msgstr "compopt [-o|+o option] [-DE] [name ...]"
 
@@ -2515,7 +2541,6 @@ msgstr ""
 "callback] [-c quantum] [array]"
 
 #: builtins.c:244
-#, fuzzy
 msgid ""
 "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C "
 "callback] [-c quantum] [array]"
@@ -2552,12 +2577,12 @@ msgid ""
 "    \n"
 "    Return success unless a NAME is not an existing alias."
 msgstr ""
-"Î\91Ï\86αίÏ\81εÏ\83η ÎºÎ¬Î¸Îµ Î\9fÎ\9dÎ\9fÎ\9cÎ\91Ï\84οÏ\82 Î±Ï\80Ï\8c Ï\84η Î»Î¯Ï\83Ï\84α Ï\84Ï\89ν ÎºÎ±Î¸Î¿Ï\81ιÏ\83μένÏ\89ν Ï\88εÏ\85δωνύμων.\n"
+"Î\91Ï\86αίÏ\81εÏ\83η ÎºÎ¬Î¸Îµ Î\9fÎ\9dÎ\9fÎ\9cÎ\91Ï\84οÏ\82 Î±Ï\80Ï\8c Ï\84η Î»Î¯Ï\83Ï\84α Ï\84Ï\89ν ÎºÎ±Î¸Î¿Ï\81ιÏ\83μένÏ\89ν Ï\83Ï\85νωνύμων.\n"
 "    \n"
 "    Επιλογές:\n"
-"      -a\tαÏ\86αίÏ\81εÏ\83η Ï\8cλÏ\89ν Ï\84Ï\89ν Ï\88εÏ\85δωνύμων.\n"
+"      -a\tαÏ\86αίÏ\81εÏ\83η Ï\8cλÏ\89ν Ï\84Ï\89ν Ï\83Ï\85νωνύμων.\n"
 "    \n"
-"    Î\95Ï\80ιÏ\83Ï\84Ï\81έÏ\86ει ÎµÏ\80ιÏ\84Ï\85Ï\87ία ÎµÎºÏ\84Ï\8cÏ\82 Î±Î½ Ï\84ο Î\9fÎ\9dÎ\9fÎ\9cÎ\91 Î´ÎµÎ½ ÎµÎ¯Î½Î±Î¹ Ï\85Ï\80αÏ\81κÏ\84Ï\8c Ï\88εÏ\85δώνυμο."
+"    Î\95Ï\80ιÏ\83Ï\84Ï\81έÏ\86ει ÎµÏ\80ιÏ\84Ï\85Ï\87ία ÎµÎºÏ\84Ï\8cÏ\82 Î±Î½ Ï\84ο Î\9fÎ\9dÎ\9fÎ\9cÎ\91 Î´ÎµÎ½ ÎµÎ¯Î½Î±Î¹ Ï\85Ï\80αÏ\81κÏ\84Ï\8c Ï\83Ï\85νώνυμο."
 
 #: builtins.c:291
 msgid ""
@@ -2860,7 +2885,6 @@ msgid ""
 msgstr ""
 
 #: builtins.c:557
-#, fuzzy
 msgid ""
 "Write arguments to the standard output.\n"
 "    \n"
@@ -2911,7 +2935,7 @@ msgstr ""
 "      -E\tρητή απενεργοποίηση ερμηνείας του backslash διαφυγής\n"
 "    \n"
 "    η «echo» ερμηνεύει τους επόμενους backslash-escaped χαρακτήρες:\n"
-"      \\a\tσυναγερμός (κουδούνι)\n"
+"      \a\tσυναγερμός (κουδούνι)\n"
 "      \\b\tbackspace\n"
 "      \\c\tκαταστέλλει την παραπέρα έξοδο\n"
 "      \\e\tχαρακτήρας διαφυγής\n"
@@ -2928,7 +2952,7 @@ msgstr ""
 "    \t\tμπορεί να είναι ένα ή δύο εξαδικά ψηφία\n"
 "    \n"
 "    Κατάσταση εξόδου:\n"
-"    Επιστρέφει επιτυχία εκτός αν συμβεί λάθος εγγραφής. "
+"    Επιστρέφει επιτυχία εκτός αν συμβεί λάθος εγγραφής."
 
 #: builtins.c:597
 msgid ""
@@ -2950,7 +2974,7 @@ msgstr ""
 "      -n\tδεν επισυνάπτεις μια νέα γραμμή\n"
 "    \n"
 "    Κατάσταση εξόδου:\n"
-"    Επιστρέφει επιτυχία εκτός αν συμβεί σφάλμα. "
+"    Επιστρέφει επιτυχία εκτός αν συμβεί σφάλμα."
 
 #: builtins.c:612
 msgid ""
@@ -2998,7 +3022,7 @@ msgstr ""
 "    \n"
 "    Κατάσταση εξόδου:\n"
 "    Επιστρέφει τον ίδιο κωδικό εξόδου με την εντολή ή επιτυχία αν ή εντολή "
-"είναι κενή. "
+"είναι κενή."
 
 #: builtins.c:652
 msgid ""
@@ -3089,7 +3113,7 @@ msgstr ""
 "    \n"
 "    Τερματίζει ένα κέλυφος σύνδεσης με κατάσταση εξόδου N. Επιστρέφει σφάλμα "
 "αν δεν εκτελείται\n"
-"    σ' ένα κέλυφος σύνδεσης. "
+"    σ' ένα κέλυφος σύνδεσης."
 
 #: builtins.c:734
 msgid ""
@@ -3384,7 +3408,9 @@ msgid ""
 "    word to the second NAME, and so on, with any leftover words assigned to\n"
 "    the last NAME.  Only the characters found in $IFS are recognized as "
 "word\n"
-"    delimiters.\n"
+"    delimiters. By default, the backslash character escapes delimiter "
+"characters\n"
+"    and newline.\n"
 "    \n"
 "    If no NAMEs are supplied, the line read is stored in the REPLY "
 "variable.\n"
@@ -3425,7 +3451,7 @@ msgid ""
 "    or an invalid file descriptor is supplied as the argument to -u."
 msgstr ""
 
-#: builtins.c:1041
+#: builtins.c:1042
 msgid ""
 "Return from a shell function.\n"
 "    \n"
@@ -3437,7 +3463,7 @@ msgid ""
 "    Returns N, or failure if the shell is not executing a function or script."
 msgstr ""
 
-#: builtins.c:1054
+#: builtins.c:1055
 msgid ""
 "Set or unset values of shell options and positional parameters.\n"
 "    \n"
@@ -3523,7 +3549,7 @@ msgid ""
 "    Returns success unless an invalid option is given."
 msgstr ""
 
-#: builtins.c:1139
+#: builtins.c:1140
 msgid ""
 "Unset values and attributes of shell variables and functions.\n"
 "    \n"
@@ -3545,7 +3571,7 @@ msgid ""
 "    Returns success unless an invalid option is given or a NAME is read-only."
 msgstr ""
 
-#: builtins.c:1161
+#: builtins.c:1162
 msgid ""
 "Set export attribute for shell variables.\n"
 "    \n"
@@ -3564,7 +3590,7 @@ msgid ""
 "    Returns success unless an invalid option is given or NAME is invalid."
 msgstr ""
 
-#: builtins.c:1180
+#: builtins.c:1181
 msgid ""
 "Mark shell variables as unchangeable.\n"
 "    \n"
@@ -3585,7 +3611,7 @@ msgid ""
 "    Returns success unless an invalid option is given or NAME is invalid."
 msgstr ""
 
-#: builtins.c:1202
+#: builtins.c:1203
 msgid ""
 "Shift positional parameters.\n"
 "    \n"
@@ -3601,9 +3627,9 @@ msgstr ""
 "    δεν δίνεται, υποτίθεται πως είναι 1.\n"
 "    \n"
 "    Κατάσταση εξόδου:\n"
-"    Επιστρέφει επιτυχία εκτός αν N είναι αρνητικός ή μαγαλύτερο; από $#. "
+"    Επιστρέφει επιτυχία εκτός αν N είναι αρνητικός ή μαγαλύτερο; από $#."
 
-#: builtins.c:1214 builtins.c:1229
+#: builtins.c:1215 builtins.c:1230
 msgid ""
 "Execute commands from a file in the current shell.\n"
 "    \n"
@@ -3617,7 +3643,7 @@ msgid ""
 "    FILENAME cannot be read."
 msgstr ""
 
-#: builtins.c:1245
+#: builtins.c:1246
 msgid ""
 "Suspend shell execution.\n"
 "    \n"
@@ -3631,7 +3657,7 @@ msgid ""
 "    Returns success unless job control is not enabled or an error occurs."
 msgstr ""
 
-#: builtins.c:1261
+#: builtins.c:1262
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -3733,7 +3759,7 @@ msgstr ""
 "      -c ΑΡΧΕΙΟ        Αληθής αν το αρχείο είναι ειδικό αρχείο χαρακτήρων.\n"
 "      -d ΑΡΧΕΙΟ        Αληθής αν το αρχείο είναι κατάλογος.\n"
 "      -e ΑΡΧΕΙΟ        Αληθής αν το αρχείο υπάρχει.\n"
-"      -f  ΑΡΧΕΙΟ        Αληθής αν το αρχείο υπάρχει και είναι κανονικό "
+"      -f  ΑΡΧΕΙΟ       Αληθής αν το αρχείο υπάρχει και είναι κανονικό "
 "αρχείο.\n"
 "      -g  ΑΡΧΕΙΟ       Αληθής αν το αρχείο είναι «set-group-id».\n"
 "      -h ΑΡΧΕΙΟ        Αληθής αν το αρχείο είναι συμβολικός σύνδεσμος.\n"
@@ -3743,8 +3769,7 @@ msgstr ""
 "      -r ΑΡΧΕΙΟ        Αληθής αν το αρχείο είναι αναγνώσιμο από εσάς.\n"
 "      -s ΑΡΧΕΙΟ        Αληθής αν το αρχείο υπάρχει και δεν είναι κενό.\n"
 "      -S ΑΡΧΕΙΟ        Αληθής αν το αρχείο είναι ένα socket.\n"
-"      -t FD                Αληθής αν ο FD είναι ανοιγμένος σ' ενα "
-"τερματικό.\n"
+"      -t FD            Αληθής αν ο FD είναι ανοιγμένος σ' ενα τερματικό.\n"
 "      -u ΑΡΧΕΙΟ        Αληθής αν το αρχείο είναι «set-user-id».\n"
 "      -w ΑΡΧΕΙΟ        Αληθής αν το αρχείο εγγράψιμο από εσάς.\n"
 "      -x ΑΡΧΕΙΟ        Αληθής αν το αρχείο είναι εκτελέσιμο από εσάς.\n"
@@ -3806,7 +3831,7 @@ msgstr ""
 "αποτιμάται σε\n"
 "    ψευδές ή αν δίδεται ένα μη έγκυρο όρισμα."
 
-#: builtins.c:1343
+#: builtins.c:1344
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -3818,7 +3843,7 @@ msgstr ""
 "    Συνώνυμο με το «test» builtin, αλλά το τελευταίο όρισμα πρέπει\n"
 "να είναι ένα «]», ώστε να κλείνει το αντίστοιχο «[»."
 
-#: builtins.c:1352
+#: builtins.c:1353
 msgid ""
 "Display process times.\n"
 "    \n"
@@ -3838,7 +3863,7 @@ msgstr ""
 "    Κατάσταση εξόδου:\n"
 "    Πάντα επιτυχία."
 
-#: builtins.c:1364
+#: builtins.c:1365
 msgid ""
 "Trap signals and other events.\n"
 "    \n"
@@ -3882,7 +3907,7 @@ msgid ""
 "given."
 msgstr ""
 
-#: builtins.c:1400
+#: builtins.c:1401
 msgid ""
 "Display information about command type.\n"
 "    \n"
@@ -3912,7 +3937,7 @@ msgid ""
 "found."
 msgstr ""
 
-#: builtins.c:1431
+#: builtins.c:1432
 msgid ""
 "Modify shell resource limits.\n"
 "    \n"
@@ -3962,7 +3987,7 @@ msgid ""
 "    Returns success unless an invalid option is supplied or an error occurs."
 msgstr ""
 
-#: builtins.c:1482
+#: builtins.c:1483
 msgid ""
 "Display or set file mode mask.\n"
 "    \n"
@@ -3980,7 +4005,7 @@ msgid ""
 "    Returns success unless MODE is invalid or an invalid option is given."
 msgstr ""
 
-#: builtins.c:1502
+#: builtins.c:1503
 msgid ""
 "Wait for job completion and return exit status.\n"
 "    \n"
@@ -4012,7 +4037,7 @@ msgid ""
 "    children."
 msgstr ""
 
-#: builtins.c:1533
+#: builtins.c:1534
 msgid ""
 "Wait for process completion and return exit status.\n"
 "    \n"
@@ -4027,7 +4052,7 @@ msgid ""
 "    option is given."
 msgstr ""
 
-#: builtins.c:1548
+#: builtins.c:1549
 msgid ""
 "Execute commands for each member in a list.\n"
 "    \n"
@@ -4050,7 +4075,7 @@ msgstr ""
 "    Κατάσταση εξόδου:\n"
 "    Επιστρέφει την κατάσταση της τελευταίας εκτελεσμένης εντολής."
 
-#: builtins.c:1562
+#: builtins.c:1563
 msgid ""
 "Arithmetic for loop.\n"
 "    \n"
@@ -4080,7 +4105,7 @@ msgstr ""
 "    Κατάσταση εξόδου:\n"
 "    Επιστρέφει τη κατάσταση της τελευταίας εκτελεσμένης εντολής."
 
-#: builtins.c:1580
+#: builtins.c:1581
 msgid ""
 "Select words from a list and execute commands.\n"
 "    \n"
@@ -4100,7 +4125,7 @@ msgid ""
 "    Returns the status of the last command executed."
 msgstr ""
 
-#: builtins.c:1601
+#: builtins.c:1602
 msgid ""
 "Report time consumed by pipeline's execution.\n"
 "    \n"
@@ -4116,7 +4141,7 @@ msgid ""
 "    The return status is the return status of PIPELINE."
 msgstr ""
 
-#: builtins.c:1618
+#: builtins.c:1619
 msgid ""
 "Execute commands based on pattern matching.\n"
 "    \n"
@@ -4127,7 +4152,7 @@ msgid ""
 "    Returns the status of the last command executed."
 msgstr ""
 
-#: builtins.c:1630
+#: builtins.c:1631
 msgid ""
 "Execute commands based on conditional.\n"
 "    \n"
@@ -4148,29 +4173,49 @@ msgid ""
 "    Returns the status of the last command executed."
 msgstr ""
 
-#: builtins.c:1647
+#: builtins.c:1648
+#, fuzzy
 msgid ""
 "Execute commands as long as a test succeeds.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `while' COMMANDS has an exit status of zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS "
+"has\n"
+"    an exit status of zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
+"Ομαδοποιεί εντολές σαν να είναι μία.\n"
+"    \n"
+"    Τρέχει ένα σύνολο εντολών μιας ομάδας. Αυτό είναι ένας τρόπος "
+"ανακατεύθυνσης\n"
+"    ενός συνόλου εντολών.\n"
+"    \n"
+"    Κατάσταση εξόδου:\n"
+"    Επιστρέφει την κατάσταση της τελευταίας εντολής που εκτελέστηκε."
 
-#: builtins.c:1659
+#: builtins.c:1660
+#, fuzzy
 msgid ""
 "Execute commands as long as a test does not succeed.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `until' COMMANDS has an exit status which is not zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS "
+"has\n"
+"    an exit status which is not zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
+"Ομαδοποιεί εντολές σαν να είναι μία.\n"
+"    \n"
+"    Τρέχει ένα σύνολο εντολών μιας ομάδας. Αυτό είναι ένας τρόπος "
+"ανακατεύθυνσης\n"
+"    ενός συνόλου εντολών.\n"
+"    \n"
+"    Κατάσταση εξόδου:\n"
+"    Επιστρέφει την κατάσταση της τελευταίας εντολής που εκτελέστηκε."
 
-#: builtins.c:1671
+#: builtins.c:1672
 msgid ""
 "Create a coprocess named NAME.\n"
 "    \n"
@@ -4183,7 +4228,7 @@ msgid ""
 "    The coproc command returns an exit status of 0."
 msgstr ""
 
-#: builtins.c:1685
+#: builtins.c:1686
 msgid ""
 "Define shell function.\n"
 "    \n"
@@ -4197,7 +4242,7 @@ msgid ""
 "    Returns success unless NAME is readonly."
 msgstr ""
 
-#: builtins.c:1699
+#: builtins.c:1700
 msgid ""
 "Group commands as a unit.\n"
 "    \n"
@@ -4207,8 +4252,16 @@ msgid ""
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
+"Ομαδοποιεί εντολές σαν να είναι μία.\n"
+"    \n"
+"    Τρέχει ένα σύνολο εντολών μιας ομάδας. Αυτό είναι ένας τρόπος "
+"ανακατεύθυνσης\n"
+"    ενός συνόλου εντολών.\n"
+"    \n"
+"    Κατάσταση εξόδου:\n"
+"    Επιστρέφει την κατάσταση της τελευταίας εντολής που εκτελέστηκε."
 
-#: builtins.c:1711
+#: builtins.c:1712
 msgid ""
 "Resume job in foreground.\n"
 "    \n"
@@ -4222,8 +4275,7 @@ msgid ""
 "    Returns the status of the resumed job."
 msgstr ""
 
-#: builtins.c:1726
-#, fuzzy
+#: builtins.c:1727
 msgid ""
 "Evaluate arithmetic expression.\n"
 "    \n"
@@ -4235,13 +4287,13 @@ msgid ""
 msgstr ""
 "Αποτίμηση αριθμητικής εκφράσεως.\n"
 "    \n"
-"    Î\97 Î\95Î\9aΦΡÎ\91ΣÎ\97 Î±Ï\80οÏ\84ιμάÏ\84αι Ï\83Ï\8dμÏ\86Ï\89να Î¼Îµ Ï\84οÏ\85Ï\82 Î±Ï\81ιθμηÏ\84ικοÏ\8dÏ\82 ÎºÎ±Î½Ï\8cνες.\n"
-"    Ισοδύναμο με το \"let ΕΚΦΡΑΣΗ\".\n"
+"    Î\97 Î\95Î\9aΦΡÎ\91ΣÎ\97 Î±Ï\80οÏ\84ιμάÏ\84αι Ï\83Ï\8dμÏ\86Ï\89να Î¼Îµ Ï\84οÏ\85Ï\82 ÎºÎ±Î½Ï\8cνεÏ\82 Ï\84ηÏ\82 Î±Ï\81ιθμηÏ\84ικής.\n"
+"    Ισοδύναμο με το `let \"ΕΚΦΡΑΣΗ\"'.\n"
 "    \n"
 "    Κωδικός εξόδου:\n"
 "    Επιστρέφει 1 αν η ΕΚΦΡΑΣΗ αποτιμάται σε 0, αλλιώς επιστρέφει 0."
 
-#: builtins.c:1738
+#: builtins.c:1739
 msgid ""
 "Execute conditional command.\n"
 "    \n"
@@ -4269,7 +4321,7 @@ msgid ""
 "    0 or 1 depending on value of EXPRESSION."
 msgstr ""
 
-#: builtins.c:1764
+#: builtins.c:1765
 msgid ""
 "Common shell variable names and usage.\n"
 "    \n"
@@ -4323,7 +4375,7 @@ msgid ""
 "    \t\tcommands should be saved on the history list.\n"
 msgstr ""
 
-#: builtins.c:1821
+#: builtins.c:1822
 msgid ""
 "Add directories to stack.\n"
 "    \n"
@@ -4354,7 +4406,7 @@ msgid ""
 "    change fails."
 msgstr ""
 
-#: builtins.c:1855
+#: builtins.c:1856
 msgid ""
 "Remove directories from stack.\n"
 "    \n"
@@ -4381,7 +4433,7 @@ msgid ""
 "    change fails."
 msgstr ""
 
-#: builtins.c:1885
+#: builtins.c:1886
 msgid ""
 "Display directory stack.\n"
 "    \n"
@@ -4410,7 +4462,7 @@ msgid ""
 "    Returns success unless an invalid option is supplied or an error occurs."
 msgstr ""
 
-#: builtins.c:1916
+#: builtins.c:1917
 msgid ""
 "Set and unset shell options.\n"
 "    \n"
@@ -4430,7 +4482,7 @@ msgid ""
 "    given or OPTNAME is disabled."
 msgstr ""
 
-#: builtins.c:1937
+#: builtins.c:1938
 msgid ""
 "Formats and prints ARGUMENTS under control of the FORMAT.\n"
 "    \n"
@@ -4453,6 +4505,8 @@ msgid ""
 "    \n"
 "      %b\texpand backslash escape sequences in the corresponding argument\n"
 "      %q\tquote the argument in a way that can be reused as shell input\n"
+"      %Q\tlike %q, but apply any precision to the unquoted argument before\n"
+"    \t\tquoting\n"
 "      %(fmt)T\toutput the date-time string resulting from using FMT as a "
 "format\n"
 "    \t        string for strftime(3)\n"
@@ -4469,7 +4523,7 @@ msgid ""
 "    error occurs."
 msgstr ""
 
-#: builtins.c:1971
+#: builtins.c:1974
 msgid ""
 "Specify how arguments are to be completed by Readline.\n"
 "    \n"
@@ -4500,7 +4554,7 @@ msgid ""
 "    Returns success unless an invalid option is supplied or an error occurs."
 msgstr ""
 
-#: builtins.c:2001
+#: builtins.c:2004
 msgid ""
 "Display possible completions depending on the options.\n"
 "    \n"
@@ -4513,7 +4567,7 @@ msgid ""
 "    Returns success unless an invalid option is supplied or an error occurs."
 msgstr ""
 
-#: builtins.c:2016
+#: builtins.c:2019
 msgid ""
 "Modify or display completion options.\n"
 "    \n"
@@ -4545,7 +4599,7 @@ msgid ""
 "    have a completion specification defined."
 msgstr ""
 
-#: builtins.c:2047
+#: builtins.c:2050
 msgid ""
 "Read lines from the standard input into an indexed array variable.\n"
 "    \n"
@@ -4587,7 +4641,7 @@ msgid ""
 "    not an indexed array."
 msgstr ""
 
-#: builtins.c:2083
+#: builtins.c:2086
 msgid ""
 "Read lines from a file into an array variable.\n"
 "    \n"
@@ -4595,19 +4649,8 @@ msgid ""
 msgstr ""
 "Διαβάζει γραμμές από αρχείο σε μεταβλητή τύπου πίνακα.\n"
 "    \n"
-"    Συνώνημο του «mapfile»."
+"    Συνώνυμο του «mapfile»."
 
-#~ msgid ""
-#~ "Returns the context of the current subroutine call.\n"
-#~ "    \n"
-#~ "    Without EXPR, returns "
-#~ msgstr ""
-#~ "Επιστρέφει το context της κλήσης της τρέχουσας υπορουτίνας.\n"
-#~ "    \n"
-#~ "    Χωρίς EXPR, επιστρέφει "
-
-#~ msgid "add_process: process %5ld (%s) in the_pipeline"
-#~ msgstr "add_process: διεργασία %5ld (%s) στη the_pipeline "
-
-#~ msgid "Unknown Signal #"
-#~ msgstr "Άγνωστο σήμα #"
+#, c-format
+#~ msgid "%s: invalid associative array key"
+#~ msgstr "%s: μη έγκυρο κλειδί associative πίνακα"
index 15cd5f1ffd73254d78738e793629d5d55baf343a..21505e33c7b93b2c2e5bb8b7506a9c7a053eeebe 100644 (file)
Binary files a/po/en@boldquot.gmo and b/po/en@boldquot.gmo differ
index edfa3c7d1b250e3108312108e3969f2240772a1d..6b388ff2e30b36a43ebc85b95562bc657a161540 100644 (file)
@@ -32,7 +32,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GNU bash 5.1-rc3\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-11-28 12:51-0500\n"
+"POT-Creation-Date: 2022-01-11 14:50-0500\n"
 "PO-Revision-Date: 2020-11-28 12:51-0500\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
@@ -46,57 +46,52 @@ msgstr ""
 msgid "bad array subscript"
 msgstr "bad array subscript"
 
-#: arrayfunc.c:421 builtins/declare.def:638 variables.c:2274 variables.c:2300
-#: variables.c:3133
+#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268
+#: variables.c:3101
 #, c-format
 msgid "%s: removing nameref attribute"
 msgstr "%s: removing nameref attribute"
 
-#: arrayfunc.c:446 builtins/declare.def:851
+#: arrayfunc.c:496 builtins/declare.def:868
 #, c-format
 msgid "%s: cannot convert indexed to associative array"
 msgstr "%s: cannot convert indexed to associative array"
 
-#: arrayfunc.c:700
-#, c-format
-msgid "%s: invalid associative array key"
-msgstr "%s: invalid associative array key"
-
-#: arrayfunc.c:702
+#: arrayfunc.c:777
 #, c-format
 msgid "%s: cannot assign to non-numeric index"
 msgstr "%s: cannot assign to non-numeric index"
 
-#: arrayfunc.c:747
+#: arrayfunc.c:822
 #, c-format
 msgid "%s: %s: must use subscript when assigning associative array"
 msgstr "%s: %s: must use subscript when assigning associative array"
 
-#: bashhist.c:452
+#: bashhist.c:455
 #, c-format
 msgid "%s: cannot create: %s"
 msgstr "%s: cannot create: %s"
 
-#: bashline.c:4310
+#: bashline.c:4479
 msgid "bash_execute_unix_command: cannot find keymap for command"
 msgstr "bash_execute_unix_command: cannot find keymap for command"
 
-#: bashline.c:4459
+#: bashline.c:4637
 #, c-format
 msgid "%s: first non-whitespace character is not `\"'"
 msgstr "%s: first non-whitespace character is not ‘\e[1m\"\e[0m’"
 
-#: bashline.c:4488
+#: bashline.c:4666
 #, c-format
 msgid "no closing `%c' in %s"
 msgstr "no closing ‘\e[1m%c\e[0m’ in %s"
 
-#: bashline.c:4519
+#: bashline.c:4697
 #, c-format
 msgid "%s: missing colon separator"
 msgstr "%s: missing colon separator"
 
-#: bashline.c:4555
+#: bashline.c:4733
 #, c-format
 msgid "`%s': cannot unbind in command keymap"
 msgstr "‘\e[1m%s\e[0m’: cannot unbind in command keymap"
@@ -116,7 +111,7 @@ msgstr "brace expansion: failed to allocate memory for %u elements"
 msgid "brace expansion: failed to allocate memory for `%s'"
 msgstr "brace expansion: failed to allocate memory for ‘\e[1m%s\e[0m’"
 
-#: builtins/alias.def:131 variables.c:1844
+#: builtins/alias.def:131 variables.c:1817
 #, c-format
 msgid "`%s': invalid alias name"
 msgstr "‘\e[1m%s\e[0m’: invalid alias name"
@@ -188,7 +183,7 @@ msgstr ""
 msgid "HOME not set"
 msgstr "HOME not set"
 
-#: builtins/cd.def:335 builtins/common.c:161 test.c:901
+#: builtins/cd.def:335 builtins/common.c:161 test.c:916
 msgid "too many arguments"
 msgstr "too many arguments"
 
@@ -215,7 +210,7 @@ msgstr "warning: "
 msgid "%s: usage: "
 msgstr "%s: usage: "
 
-#: builtins/common.c:193 shell.c:516 shell.c:844
+#: builtins/common.c:193 shell.c:524 shell.c:866
 #, c-format
 msgid "%s: option requires an argument"
 msgstr "%s: option requires an argument"
@@ -230,7 +225,7 @@ msgstr "%s: numeric argument required"
 msgid "%s: not found"
 msgstr "%s: not found"
 
-#: builtins/common.c:216 shell.c:857
+#: builtins/common.c:216 shell.c:879
 #, c-format
 msgid "%s: invalid option"
 msgstr "%s: invalid option"
@@ -240,7 +235,7 @@ msgstr "%s: invalid option"
 msgid "%s: invalid option name"
 msgstr "%s: invalid option name"
 
-#: builtins/common.c:230 execute_cmd.c:2373 general.c:368 general.c:373
+#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373
 #, c-format
 msgid "`%s': not a valid identifier"
 msgstr "‘\e[1m%s\e[0m’: not a valid identifier"
@@ -253,7 +248,7 @@ msgstr "invalid octal number"
 msgid "invalid hex number"
 msgstr "invalid hex number"
 
-#: builtins/common.c:244 expr.c:1569
+#: builtins/common.c:244 expr.c:1574
 msgid "invalid number"
 msgstr "invalid number"
 
@@ -267,88 +262,93 @@ msgstr "%s: invalid signal specification"
 msgid "`%s': not a pid or valid job spec"
 msgstr "‘\e[1m%s\e[0m’: not a pid or valid job spec"
 
-#: builtins/common.c:266 error.c:510
+#: builtins/common.c:266 error.c:536
 #, c-format
 msgid "%s: readonly variable"
 msgstr "%s: readonly variable"
 
-#: builtins/common.c:274
+#: builtins/common.c:273
+#, fuzzy, c-format
+msgid "%s: cannot assign"
+msgstr "%s: cannot unset"
+
+#: builtins/common.c:281
 #, c-format
 msgid "%s: %s out of range"
 msgstr "%s: %s out of range"
 
-#: builtins/common.c:274 builtins/common.c:276
+#: builtins/common.c:281 builtins/common.c:283
 msgid "argument"
 msgstr "argument"
 
-#: builtins/common.c:276
+#: builtins/common.c:283
 #, c-format
 msgid "%s out of range"
 msgstr "%s out of range"
 
-#: builtins/common.c:284
+#: builtins/common.c:291
 #, c-format
 msgid "%s: no such job"
 msgstr "%s: no such job"
 
-#: builtins/common.c:292
+#: builtins/common.c:299
 #, c-format
 msgid "%s: no job control"
 msgstr "%s: no job control"
 
-#: builtins/common.c:294
+#: builtins/common.c:301
 msgid "no job control"
 msgstr "no job control"
 
-#: builtins/common.c:304
+#: builtins/common.c:311
 #, c-format
 msgid "%s: restricted"
 msgstr "%s: restricted"
 
-#: builtins/common.c:306
+#: builtins/common.c:313
 msgid "restricted"
 msgstr "restricted"
 
-#: builtins/common.c:314
+#: builtins/common.c:321
 #, c-format
 msgid "%s: not a shell builtin"
 msgstr "%s: not a shell builtin"
 
-#: builtins/common.c:323
+#: builtins/common.c:330
 #, c-format
 msgid "write error: %s"
 msgstr "write error: %s"
 
-#: builtins/common.c:331
+#: builtins/common.c:338
 #, c-format
 msgid "error setting terminal attributes: %s"
 msgstr "error setting terminal attributes: %s"
 
-#: builtins/common.c:333
+#: builtins/common.c:340
 #, c-format
 msgid "error getting terminal attributes: %s"
 msgstr "error getting terminal attributes: %s"
 
-#: builtins/common.c:635
+#: builtins/common.c:642
 #, c-format
 msgid "%s: error retrieving current directory: %s: %s\n"
 msgstr "%s: error retrieving current directory: %s: %s\n"
 
-#: builtins/common.c:701 builtins/common.c:703
+#: builtins/common.c:708 builtins/common.c:710
 #, c-format
 msgid "%s: ambiguous job spec"
 msgstr "%s: ambiguous job spec"
 
-#: builtins/common.c:964
+#: builtins/common.c:971
 msgid "help not available in this version"
 msgstr "help not available in this version"
 
-#: builtins/common.c:1008 builtins/set.def:953 variables.c:3839
+#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825
 #, c-format
 msgid "%s: cannot unset: readonly %s"
 msgstr "%s: cannot unset: readonly %s"
 
-#: builtins/common.c:1013 builtins/set.def:932 variables.c:3844
+#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830
 #, c-format
 msgid "%s: cannot unset"
 msgstr "%s: cannot unset"
@@ -358,108 +358,108 @@ msgstr "%s: cannot unset"
 msgid "%s: invalid action name"
 msgstr "%s: invalid action name"
 
-#: builtins/complete.def:486 builtins/complete.def:634
-#: builtins/complete.def:865
+#: builtins/complete.def:486 builtins/complete.def:642
+#: builtins/complete.def:873
 #, c-format
 msgid "%s: no completion specification"
 msgstr "%s: no completion specification"
 
-#: builtins/complete.def:688
+#: builtins/complete.def:696
 msgid "warning: -F option may not work as you expect"
 msgstr "warning: -F option may not work as you expect"
 
-#: builtins/complete.def:690
+#: builtins/complete.def:698
 msgid "warning: -C option may not work as you expect"
 msgstr "warning: -C option may not work as you expect"
 
-#: builtins/complete.def:838
+#: builtins/complete.def:846
 msgid "not currently executing completion function"
 msgstr "not currently executing completion function"
 
-#: builtins/declare.def:134
+#: builtins/declare.def:137
 msgid "can only be used in a function"
 msgstr "can only be used in a function"
 
-#: builtins/declare.def:363 builtins/declare.def:756
+#: builtins/declare.def:437
+msgid "cannot use `-f' to make functions"
+msgstr "cannot use ‘\e[1m-f\e[0m’ to make functions"
+
+#: builtins/declare.def:464 execute_cmd.c:6132
+#, c-format
+msgid "%s: readonly function"
+msgstr "%s: readonly function"
+
+#: builtins/declare.def:521 builtins/declare.def:804
 #, c-format
 msgid "%s: reference variable cannot be an array"
 msgstr "%s: reference variable cannot be an array"
 
-#: builtins/declare.def:374 variables.c:3385
+#: builtins/declare.def:532 variables.c:3359
 #, c-format
 msgid "%s: nameref variable self references not allowed"
 msgstr "%s: nameref variable self references not allowed"
 
-#: builtins/declare.def:379 variables.c:2104 variables.c:3304 variables.c:3312
-#: variables.c:3382
+#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286
+#: variables.c:3356
 #, c-format
 msgid "%s: circular name reference"
 msgstr "%s: circular name reference"
 
-#: builtins/declare.def:384 builtins/declare.def:762 builtins/declare.def:773
+#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820
 #, c-format
 msgid "`%s': invalid variable name for name reference"
 msgstr "‘\e[1m%s\e[0m’: invalid variable name for name reference"
 
-#: builtins/declare.def:514
-msgid "cannot use `-f' to make functions"
-msgstr "cannot use ‘\e[1m-f\e[0m’ to make functions"
-
-#: builtins/declare.def:526 execute_cmd.c:5986
-#, c-format
-msgid "%s: readonly function"
-msgstr "%s: readonly function"
-
-#: builtins/declare.def:824
-#, c-format
-msgid "%s: quoted compound array assignment deprecated"
-msgstr "%s: quoted compound array assignment deprecated"
-
-#: builtins/declare.def:838
+#: builtins/declare.def:856
 #, c-format
 msgid "%s: cannot destroy array variables in this way"
 msgstr "%s: cannot destroy array variables in this way"
 
-#: builtins/declare.def:845 builtins/read.def:815
+#: builtins/declare.def:862 builtins/read.def:887
 #, c-format
 msgid "%s: cannot convert associative to indexed array"
 msgstr "%s: cannot convert associative to indexed array"
 
-#: builtins/enable.def:143 builtins/enable.def:151
+#: builtins/declare.def:891
+#, c-format
+msgid "%s: quoted compound array assignment deprecated"
+msgstr "%s: quoted compound array assignment deprecated"
+
+#: builtins/enable.def:145 builtins/enable.def:153
 msgid "dynamic loading not available"
 msgstr "dynamic loading not available"
 
-#: builtins/enable.def:343
+#: builtins/enable.def:376
 #, c-format
 msgid "cannot open shared object %s: %s"
 msgstr "cannot open shared object %s: %s"
 
-#: builtins/enable.def:371
+#: builtins/enable.def:405
 #, c-format
 msgid "cannot find %s in shared object %s: %s"
 msgstr "cannot find %s in shared object %s: %s"
 
-#: builtins/enable.def:388
+#: builtins/enable.def:422
 #, c-format
 msgid "%s: dynamic builtin already loaded"
 msgstr "%s: dynamic builtin already loaded"
 
-#: builtins/enable.def:392
+#: builtins/enable.def:426
 #, c-format
 msgid "load function for %s returns failure (%d): not loaded"
 msgstr "load function for %s returns failure (%d): not loaded"
 
-#: builtins/enable.def:517
+#: builtins/enable.def:551
 #, c-format
 msgid "%s: not dynamically loaded"
 msgstr "%s: not dynamically loaded"
 
-#: builtins/enable.def:543
+#: builtins/enable.def:577
 #, c-format
 msgid "%s: cannot delete: %s"
 msgstr "%s: cannot delete: %s"
 
-#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5818
+#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959
 #, c-format
 msgid "%s: is a directory"
 msgstr "%s: is a directory"
@@ -474,7 +474,7 @@ msgstr "%s: not a regular file"
 msgid "%s: file is too large"
 msgstr "%s: file is too large"
 
-#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1647
+#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673
 #, c-format
 msgid "%s: cannot execute binary file"
 msgstr "%s: cannot execute binary file"
@@ -572,12 +572,12 @@ msgstr ""
 "no help topics match ‘\e[1m%s\e[0m’.  Try ‘\e[1mhelp help\e[0m’ or ‘\e[1mman -k %s\e[0m’ "
 "or ‘\e[1minfo %s\e[0m’."
 
-#: builtins/help.def:224
+#: builtins/help.def:223
 #, c-format
 msgid "%s: cannot open: %s"
 msgstr "%s: cannot open: %s"
 
-#: builtins/help.def:524
+#: builtins/help.def:523
 #, c-format
 msgid ""
 "These shell commands are defined internally.  Type `help' to see this list.\n"
@@ -598,21 +598,21 @@ msgstr ""
 "A star (*) next to a name means that the command is disabled.\n"
 "\n"
 
-#: builtins/history.def:155
+#: builtins/history.def:159
 msgid "cannot use more than one of -anrw"
 msgstr "cannot use more than one of -anrw"
 
-#: builtins/history.def:188 builtins/history.def:198 builtins/history.def:213
-#: builtins/history.def:230 builtins/history.def:242 builtins/history.def:249
+#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215
+#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247
 msgid "history position"
 msgstr "history position"
 
-#: builtins/history.def:340
+#: builtins/history.def:338
 #, c-format
 msgid "%s: invalid timestamp"
 msgstr "%s: invalid timestamp"
 
-#: builtins/history.def:451
+#: builtins/history.def:449
 #, c-format
 msgid "%s: history expansion failed"
 msgstr "%s: history expansion failed"
@@ -635,78 +635,78 @@ msgstr "%s: arguments must be process or job IDs"
 msgid "Unknown error"
 msgstr "Unknown error"
 
-#: builtins/let.def:97 builtins/let.def:122 expr.c:639 expr.c:657
+#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658
 msgid "expression expected"
 msgstr "expression expected"
 
-#: builtins/mapfile.def:178
+#: builtins/mapfile.def:180
 #, c-format
 msgid "%s: not an indexed array"
 msgstr "%s: not an indexed array"
 
-#: builtins/mapfile.def:271 builtins/read.def:308
+#: builtins/mapfile.def:276 builtins/read.def:336
 #, c-format
 msgid "%s: invalid file descriptor specification"
 msgstr "%s: invalid file descriptor specification"
 
-#: builtins/mapfile.def:279 builtins/read.def:315
+#: builtins/mapfile.def:284 builtins/read.def:343
 #, c-format
 msgid "%d: invalid file descriptor: %s"
 msgstr "%d: invalid file descriptor: %s"
 
-#: builtins/mapfile.def:288 builtins/mapfile.def:326
+#: builtins/mapfile.def:293 builtins/mapfile.def:331
 #, c-format
 msgid "%s: invalid line count"
 msgstr "%s: invalid line count"
 
-#: builtins/mapfile.def:299
+#: builtins/mapfile.def:304
 #, c-format
 msgid "%s: invalid array origin"
 msgstr "%s: invalid array origin"
 
-#: builtins/mapfile.def:316
+#: builtins/mapfile.def:321
 #, c-format
 msgid "%s: invalid callback quantum"
 msgstr "%s: invalid callback quantum"
 
-#: builtins/mapfile.def:349
+#: builtins/mapfile.def:354
 msgid "empty array variable name"
 msgstr "empty array variable name"
 
-#: builtins/mapfile.def:370
+#: builtins/mapfile.def:375
 msgid "array variable support required"
 msgstr "array variable support required"
 
-#: builtins/printf.def:419
+#: builtins/printf.def:430
 #, c-format
 msgid "`%s': missing format character"
 msgstr "‘\e[1m%s\e[0m’: missing format character"
 
-#: builtins/printf.def:474
+#: builtins/printf.def:485
 #, c-format
 msgid "`%c': invalid time format specification"
 msgstr "‘\e[1m%c\e[0m’: invalid time format specification"
 
-#: builtins/printf.def:676
+#: builtins/printf.def:708
 #, c-format
 msgid "`%c': invalid format character"
 msgstr "‘\e[1m%c\e[0m’: invalid format character"
 
-#: builtins/printf.def:702
+#: builtins/printf.def:734
 #, c-format
 msgid "warning: %s: %s"
 msgstr "warning: %s: %s"
 
-#: builtins/printf.def:788
+#: builtins/printf.def:822
 #, c-format
 msgid "format parsing problem: %s"
 msgstr "format parsing problem: %s"
 
-#: builtins/printf.def:885
+#: builtins/printf.def:919
 msgid "missing hex digit for \\x"
 msgstr "missing hex digit for \\x"
 
-#: builtins/printf.def:900
+#: builtins/printf.def:934
 #, c-format
 msgid "missing unicode digit for \\%c"
 msgstr "missing unicode digit for \\%c"
@@ -863,12 +863,12 @@ msgstr ""
 "    \n"
 "    The ‘\e[1mdirs\e[0m’ builtin displays the directory stack."
 
-#: builtins/read.def:280
+#: builtins/read.def:308
 #, c-format
 msgid "%s: invalid timeout specification"
 msgstr "%s: invalid timeout specification"
 
-#: builtins/read.def:755
+#: builtins/read.def:827
 #, c-format
 msgid "read error: %d: %s"
 msgstr "read error: %d: %s"
@@ -881,7 +881,7 @@ msgstr "can only ‘\e[1mreturn\e[0m’ from a function or sourced script"
 msgid "cannot simultaneously unset a function and a variable"
 msgstr "cannot simultaneously unset a function and a variable"
 
-#: builtins/set.def:966
+#: builtins/set.def:969
 #, c-format
 msgid "%s: not an array variable"
 msgstr "%s: not an array variable"
@@ -900,11 +900,11 @@ msgstr "%s: cannot export"
 msgid "shift count"
 msgstr "shift count"
 
-#: builtins/shopt.def:310
+#: builtins/shopt.def:323
 msgid "cannot set and unset shell options simultaneously"
 msgstr "cannot set and unset shell options simultaneously"
 
-#: builtins/shopt.def:428
+#: builtins/shopt.def:444
 #, c-format
 msgid "%s: invalid shell option name"
 msgstr "%s: invalid shell option name"
@@ -971,16 +971,16 @@ msgstr "%s: invalid limit argument"
 msgid "`%c': bad command"
 msgstr "‘\e[1m%c\e[0m’: bad command"
 
-#: builtins/ulimit.def:455
+#: builtins/ulimit.def:464
 #, c-format
 msgid "%s: cannot get limit: %s"
 msgstr "%s: cannot get limit: %s"
 
-#: builtins/ulimit.def:481
+#: builtins/ulimit.def:490
 msgid "limit"
 msgstr "limit"
 
-#: builtins/ulimit.def:493 builtins/ulimit.def:793
+#: builtins/ulimit.def:502 builtins/ulimit.def:802
 #, c-format
 msgid "%s: cannot modify limit: %s"
 msgstr "%s: cannot modify limit: %s"
@@ -999,7 +999,7 @@ msgstr "‘\e[1m%c\e[0m’: invalid symbolic mode operator"
 msgid "`%c': invalid symbolic mode character"
 msgstr "‘\e[1m%c\e[0m’: invalid symbolic mode character"
 
-#: error.c:89 error.c:347 error.c:349 error.c:351
+#: error.c:89 error.c:373 error.c:375 error.c:377
 msgid " line "
 msgstr " line "
 
@@ -1019,96 +1019,106 @@ msgstr "Aborting..."
 msgid "INFORM: "
 msgstr "INFORM: "
 
-#: error.c:462
+#: error.c:310
+#, fuzzy, c-format
+msgid "DEBUG warning: "
+msgstr "warning: "
+
+#: error.c:488
 msgid "unknown command error"
 msgstr "unknown command error"
 
-#: error.c:463
+#: error.c:489
 msgid "bad command type"
 msgstr "bad command type"
 
-#: error.c:464
+#: error.c:490
 msgid "bad connector"
 msgstr "bad connector"
 
-#: error.c:465
+#: error.c:491
 msgid "bad jump"
 msgstr "bad jump"
 
-#: error.c:503
+#: error.c:529
 #, c-format
 msgid "%s: unbound variable"
 msgstr "%s: unbound variable"
 
-#: eval.c:242
+#: eval.c:243
 msgid "\atimed out waiting for input: auto-logout\n"
 msgstr "\atimed out waiting for input: auto-logout\n"
 
-#: execute_cmd.c:537
+#: execute_cmd.c:555
 #, c-format
 msgid "cannot redirect standard input from /dev/null: %s"
 msgstr "cannot redirect standard input from /dev/null: %s"
 
-#: execute_cmd.c:1297
+#: execute_cmd.c:1317
 #, c-format
 msgid "TIMEFORMAT: `%c': invalid format character"
 msgstr "TIMEFORMAT: ‘\e[1m%c\e[0m’: invalid format character"
 
-#: execute_cmd.c:2362
+#: execute_cmd.c:2391
 #, c-format
 msgid "execute_coproc: coproc [%d:%s] still exists"
 msgstr "execute_coproc: coproc [%d:%s] still exists"
 
-#: execute_cmd.c:2486
+#: execute_cmd.c:2524
 msgid "pipe error"
 msgstr "pipe error"
 
-#: execute_cmd.c:4793
+#: execute_cmd.c:4923
 #, c-format
 msgid "eval: maximum eval nesting level exceeded (%d)"
 msgstr "eval: maximum eval nesting level exceeded (%d)"
 
-#: execute_cmd.c:4805
+#: execute_cmd.c:4935
 #, c-format
 msgid "%s: maximum source nesting level exceeded (%d)"
 msgstr "%s: maximum source nesting level exceeded (%d)"
 
-#: execute_cmd.c:4913
+#: execute_cmd.c:5043
 #, c-format
 msgid "%s: maximum function nesting level exceeded (%d)"
 msgstr "%s: maximum function nesting level exceeded (%d)"
 
-#: execute_cmd.c:5467
+#: execute_cmd.c:5598
 #, c-format
 msgid "%s: restricted: cannot specify `/' in command names"
 msgstr "%s: restricted: cannot specify ‘\e[1m/\e[0m’ in command names"
 
-#: execute_cmd.c:5574
+#: execute_cmd.c:5715
 #, c-format
 msgid "%s: command not found"
 msgstr "%s: command not found"
 
-#: execute_cmd.c:5816
+#: execute_cmd.c:5957
 #, c-format
 msgid "%s: %s"
 msgstr "%s: %s"
 
-#: execute_cmd.c:5854
+#: execute_cmd.c:5975
+#, fuzzy, c-format
+msgid "%s: cannot execute: required file not found"
+msgstr "%s: cannot execute binary file"
+
+#: execute_cmd.c:6000
 #, c-format
 msgid "%s: %s: bad interpreter"
 msgstr "%s: %s: bad interpreter"
 
-#: execute_cmd.c:5891
+#: execute_cmd.c:6037
 #, c-format
 msgid "%s: cannot execute binary file: %s"
 msgstr "%s: cannot execute binary file: %s"
 
-#: execute_cmd.c:5977
+#: execute_cmd.c:6123
 #, c-format
 msgid "`%s': is a special builtin"
 msgstr "‘\e[1m%s\e[0m’: is a special builtin"
 
-#: execute_cmd.c:6029
+#: execute_cmd.c:6175
 #, c-format
 msgid "cannot duplicate fd %d to fd %d"
 msgstr "cannot duplicate fd %d to fd %d"
@@ -1121,68 +1131,68 @@ msgstr "expression recursion level exceeded"
 msgid "recursion stack underflow"
 msgstr "recursion stack underflow"
 
-#: expr.c:477
+#: expr.c:478
 msgid "syntax error in expression"
 msgstr "syntax error in expression"
 
-#: expr.c:521
+#: expr.c:522
 msgid "attempted assignment to non-variable"
 msgstr "attempted assignment to non-variable"
 
-#: expr.c:530
+#: expr.c:531
 msgid "syntax error in variable assignment"
 msgstr "syntax error in variable assignment"
 
-#: expr.c:544 expr.c:911
+#: expr.c:545 expr.c:912
 msgid "division by 0"
 msgstr "division by 0"
 
-#: expr.c:592
+#: expr.c:593
 msgid "bug: bad expassign token"
 msgstr "bug: bad expassign token"
 
-#: expr.c:646
+#: expr.c:647
 msgid "`:' expected for conditional expression"
 msgstr "‘\e[1m:\e[0m’ expected for conditional expression"
 
-#: expr.c:972
+#: expr.c:973
 msgid "exponent less than 0"
 msgstr "exponent less than 0"
 
-#: expr.c:1029
+#: expr.c:1030
 msgid "identifier expected after pre-increment or pre-decrement"
 msgstr "identifier expected after pre-increment or pre-decrement"
 
-#: expr.c:1056
+#: expr.c:1057
 msgid "missing `)'"
 msgstr "missing ‘\e[1m)\e[0m’"
 
-#: expr.c:1107 expr.c:1487
+#: expr.c:1108 expr.c:1492
 msgid "syntax error: operand expected"
 msgstr "syntax error: operand expected"
 
-#: expr.c:1489
+#: expr.c:1494
 msgid "syntax error: invalid arithmetic operator"
 msgstr "syntax error: invalid arithmetic operator"
 
-#: expr.c:1513
+#: expr.c:1518
 #, c-format
 msgid "%s%s%s: %s (error token is \"%s\")"
 msgstr "%s%s%s: %s (error token is “\e[1m%s\e[0m”)"
 
-#: expr.c:1573
+#: expr.c:1578
 msgid "invalid arithmetic base"
 msgstr "invalid arithmetic base"
 
-#: expr.c:1582
+#: expr.c:1587
 msgid "invalid integer constant"
 msgstr "invalid integer constant"
 
-#: expr.c:1598
+#: expr.c:1603
 msgid "value too great for base"
 msgstr "value too great for base"
 
-#: expr.c:1647
+#: expr.c:1652
 #, c-format
 msgid "%s: expression error\n"
 msgstr "%s: expression error\n"
@@ -1191,7 +1201,7 @@ msgstr "%s: expression error\n"
 msgid "getcwd: cannot access parent directories"
 msgstr "getcwd: cannot access parent directories"
 
-#: input.c:99 subst.c:6069
+#: input.c:99 subst.c:6208
 #, c-format
 msgid "cannot reset nodelay mode for fd %d"
 msgstr "cannot reset nodelay mode for fd %d"
@@ -1210,167 +1220,167 @@ msgstr "save_bash_input: buffer already exists for new fd %d"
 msgid "start_pipeline: pgrp pipe"
 msgstr "start_pipeline: pgrp pipe"
 
-#: jobs.c:906
+#: jobs.c:907
 #, c-format
 msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
 
-#: jobs.c:959
+#: jobs.c:960
 #, c-format
 msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
 
-#: jobs.c:1283
+#: jobs.c:1279
 #, c-format
 msgid "forked pid %d appears in running job %d"
 msgstr "forked pid %d appears in running job %d"
 
-#: jobs.c:1402
+#: jobs.c:1397
 #, c-format
 msgid "deleting stopped job %d with process group %ld"
 msgstr "deleting stopped job %d with process group %ld"
 
-#: jobs.c:1511
+#: jobs.c:1502
 #, c-format
 msgid "add_process: pid %5ld (%s) marked as still alive"
 msgstr "add_process: pid %5ld (%s) marked as still alive"
 
-#: jobs.c:1850
+#: jobs.c:1839
 #, c-format
 msgid "describe_pid: %ld: no such pid"
 msgstr "describe_pid: %ld: no such pid"
 
-#: jobs.c:1865
+#: jobs.c:1854
 #, c-format
 msgid "Signal %d"
 msgstr "Signal %d"
 
-#: jobs.c:1879 jobs.c:1905
+#: jobs.c:1868 jobs.c:1894
 msgid "Done"
 msgstr "Done"
 
-#: jobs.c:1884 siglist.c:122
+#: jobs.c:1873 siglist.c:123
 msgid "Stopped"
 msgstr "Stopped"
 
-#: jobs.c:1888
+#: jobs.c:1877
 #, c-format
 msgid "Stopped(%s)"
 msgstr "Stopped(%s)"
 
-#: jobs.c:1892
+#: jobs.c:1881
 msgid "Running"
 msgstr "Running"
 
-#: jobs.c:1909
+#: jobs.c:1898
 #, c-format
 msgid "Done(%d)"
 msgstr "Done(%d)"
 
-#: jobs.c:1911
+#: jobs.c:1900
 #, c-format
 msgid "Exit %d"
 msgstr "Exit %d"
 
-#: jobs.c:1914
+#: jobs.c:1903
 msgid "Unknown status"
 msgstr "Unknown status"
 
-#: jobs.c:2001
+#: jobs.c:1990
 #, c-format
 msgid "(core dumped) "
 msgstr "(core dumped) "
 
-#: jobs.c:2020
+#: jobs.c:2009
 #, c-format
 msgid "  (wd: %s)"
 msgstr "  (wd: %s)"
 
-#: jobs.c:2259
+#: jobs.c:2250
 #, c-format
 msgid "child setpgid (%ld to %ld)"
 msgstr "child setpgid (%ld to %ld)"
 
-#: jobs.c:2617 nojobs.c:664
+#: jobs.c:2608 nojobs.c:666
 #, c-format
 msgid "wait: pid %ld is not a child of this shell"
 msgstr "wait: pid %ld is not a child of this shell"
 
-#: jobs.c:2893
+#: jobs.c:2884
 #, c-format
 msgid "wait_for: No record of process %ld"
 msgstr "wait_for: No record of process %ld"
 
-#: jobs.c:3236
+#: jobs.c:3223
 #, c-format
 msgid "wait_for_job: job %d is stopped"
 msgstr "wait_for_job: job %d is stopped"
 
-#: jobs.c:3564
+#: jobs.c:3551
 #, c-format
 msgid "%s: no current jobs"
 msgstr "%s: no current jobs"
 
-#: jobs.c:3571
+#: jobs.c:3558
 #, c-format
 msgid "%s: job has terminated"
 msgstr "%s: job has terminated"
 
-#: jobs.c:3580
+#: jobs.c:3567
 #, c-format
 msgid "%s: job %d already in background"
 msgstr "%s: job %d already in background"
 
-#: jobs.c:3806
+#: jobs.c:3793
 msgid "waitchld: turning on WNOHANG to avoid indefinite block"
 msgstr "waitchld: turning on WNOHANG to avoid indefinite block"
 
-#: jobs.c:4320
+#: jobs.c:4307
 #, c-format
 msgid "%s: line %d: "
 msgstr "%s: line %d: "
 
-#: jobs.c:4334 nojobs.c:919
+#: jobs.c:4321 nojobs.c:921
 #, c-format
 msgid " (core dumped)"
 msgstr " (core dumped)"
 
-#: jobs.c:4346 jobs.c:4359
+#: jobs.c:4333 jobs.c:4346
 #, c-format
 msgid "(wd now: %s)\n"
 msgstr "(wd now: %s)\n"
 
-#: jobs.c:4391
+#: jobs.c:4378
 msgid "initialize_job_control: getpgrp failed"
 msgstr "initialize_job_control: getpgrp failed"
 
-#: jobs.c:4447
+#: jobs.c:4434
 msgid "initialize_job_control: no job control in background"
 msgstr "initialize_job_control: no job control in background"
 
-#: jobs.c:4463
+#: jobs.c:4450
 msgid "initialize_job_control: line discipline"
 msgstr "initialize_job_control: line discipline"
 
-#: jobs.c:4473
+#: jobs.c:4460
 msgid "initialize_job_control: setpgid"
 msgstr "initialize_job_control: setpgid"
 
-#: jobs.c:4494 jobs.c:4503
+#: jobs.c:4481 jobs.c:4490
 #, c-format
 msgid "cannot set terminal process group (%d)"
 msgstr "cannot set terminal process group (%d)"
 
-#: jobs.c:4508
+#: jobs.c:4495
 msgid "no job control in this shell"
 msgstr "no job control in this shell"
 
-#: lib/malloc/malloc.c:353
+#: lib/malloc/malloc.c:367
 #, c-format
 msgid "malloc: failed assertion: %s\n"
 msgstr "malloc: failed assertion: %s\n"
 
-#: lib/malloc/malloc.c:369
+#: lib/malloc/malloc.c:383
 #, c-format
 msgid ""
 "\r\n"
@@ -1379,47 +1389,47 @@ msgstr ""
 "\r\n"
 "malloc: %s:%d: assertion botched\r\n"
 
-#: lib/malloc/malloc.c:370 lib/malloc/malloc.c:933
+#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941
 msgid "unknown"
 msgstr "unknown"
 
-#: lib/malloc/malloc.c:882
+#: lib/malloc/malloc.c:892
 msgid "malloc: block on free list clobbered"
 msgstr "malloc: block on free list clobbered"
 
-#: lib/malloc/malloc.c:972
+#: lib/malloc/malloc.c:980
 msgid "free: called with already freed block argument"
 msgstr "free: called with already freed block argument"
 
-#: lib/malloc/malloc.c:975
+#: lib/malloc/malloc.c:983
 msgid "free: called with unallocated block argument"
 msgstr "free: called with unallocated block argument"
 
-#: lib/malloc/malloc.c:994
+#: lib/malloc/malloc.c:1001
 msgid "free: underflow detected; mh_nbytes out of range"
 msgstr "free: underflow detected; mh_nbytes out of range"
 
-#: lib/malloc/malloc.c:1001
+#: lib/malloc/malloc.c:1007
 msgid "free: underflow detected; magic8 corrupted"
 msgstr "free: underflow detected; magic8 corrupted"
 
-#: lib/malloc/malloc.c:1009
+#: lib/malloc/malloc.c:1014
 msgid "free: start and end chunk sizes differ"
 msgstr "free: start and end chunk sizes differ"
 
-#: lib/malloc/malloc.c:1119
+#: lib/malloc/malloc.c:1176
 msgid "realloc: called with unallocated block argument"
 msgstr "realloc: called with unallocated block argument"
 
-#: lib/malloc/malloc.c:1134
+#: lib/malloc/malloc.c:1191
 msgid "realloc: underflow detected; mh_nbytes out of range"
 msgstr "realloc: underflow detected; mh_nbytes out of range"
 
-#: lib/malloc/malloc.c:1141
+#: lib/malloc/malloc.c:1197
 msgid "realloc: underflow detected; magic8 corrupted"
 msgstr "realloc: underflow detected; magic8 corrupted"
 
-#: lib/malloc/malloc.c:1150
+#: lib/malloc/malloc.c:1205
 msgid "realloc: start and end chunk sizes differ"
 msgstr "realloc: start and end chunk sizes differ"
 
@@ -1461,22 +1471,22 @@ msgstr "%s: bad network path specification"
 msgid "network operations not supported"
 msgstr "network operations not supported"
 
-#: locale.c:217
+#: locale.c:219
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s)"
 msgstr "setlocale: LC_ALL: cannot change locale (%s)"
 
-#: locale.c:219
+#: locale.c:221
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s): %s"
 msgstr "setlocale: LC_ALL: cannot change locale (%s): %s"
 
-#: locale.c:292
+#: locale.c:294
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s)"
 msgstr "setlocale: %s: cannot change locale (%s)"
 
-#: locale.c:294
+#: locale.c:296
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s): %s"
 msgstr "setlocale: %s: cannot change locale (%s): %s"
@@ -1494,35 +1504,35 @@ msgstr "You have new mail in $_"
 msgid "The mail in %s has been read\n"
 msgstr "The mail in %s has been read\n"
 
-#: make_cmd.c:317
+#: make_cmd.c:314
 msgid "syntax error: arithmetic expression required"
 msgstr "syntax error: arithmetic expression required"
 
-#: make_cmd.c:319
+#: make_cmd.c:316
 msgid "syntax error: `;' unexpected"
 msgstr "syntax error: ‘\e[1m;\e[0m’ unexpected"
 
-#: make_cmd.c:320
+#: make_cmd.c:317
 #, c-format
 msgid "syntax error: `((%s))'"
 msgstr "syntax error: ‘\e[1m((%s))\e[0m’"
 
-#: make_cmd.c:572
+#: make_cmd.c:569
 #, c-format
 msgid "make_here_document: bad instruction type %d"
 msgstr "make_here_document: bad instruction type %d"
 
-#: make_cmd.c:657
+#: make_cmd.c:668
 #, c-format
 msgid "here-document at line %d delimited by end-of-file (wanted `%s')"
 msgstr "here-document at line %d delimited by end-of-file (wanted ‘\e[1m%s\e[0m’)"
 
-#: make_cmd.c:756
+#: make_cmd.c:769
 #, c-format
 msgid "make_redirection: redirection instruction `%d' out of range"
 msgstr "make_redirection: redirection instruction ‘\e[1m%d\e[0m’ out of range"
 
-#: parse.y:2393
+#: parse.y:2428
 #, c-format
 msgid ""
 "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line "
@@ -1531,103 +1541,103 @@ msgstr ""
 "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line "
 "truncated"
 
-#: parse.y:2826
+#: parse.y:2921
 msgid "maximum here-document count exceeded"
 msgstr "maximum here-document count exceeded"
 
-#: parse.y:3581 parse.y:3957 parse.y:4556
+#: parse.y:3684 parse.y:4244 parse.y:6148
 #, c-format
 msgid "unexpected EOF while looking for matching `%c'"
 msgstr "unexpected EOF while looking for matching ‘\e[1m%c\e[0m’"
 
-#: parse.y:4696
+#: parse.y:4452
 msgid "unexpected EOF while looking for `]]'"
 msgstr "unexpected EOF while looking for ‘\e[1m]]\e[0m’"
 
-#: parse.y:4701
+#: parse.y:4457
 #, c-format
 msgid "syntax error in conditional expression: unexpected token `%s'"
 msgstr "syntax error in conditional expression: unexpected token ‘\e[1m%s\e[0m’"
 
-#: parse.y:4705
+#: parse.y:4461
 msgid "syntax error in conditional expression"
 msgstr "syntax error in conditional expression"
 
-#: parse.y:4783
+#: parse.y:4539
 #, c-format
 msgid "unexpected token `%s', expected `)'"
 msgstr "unexpected token ‘\e[1m%s\e[0m’, expected ‘\e[1m)\e[0m’"
 
-#: parse.y:4787
+#: parse.y:4543
 msgid "expected `)'"
 msgstr "expected ‘\e[1m)\e[0m’"
 
-#: parse.y:4815
+#: parse.y:4571
 #, c-format
 msgid "unexpected argument `%s' to conditional unary operator"
 msgstr "unexpected argument ‘\e[1m%s\e[0m’ to conditional unary operator"
 
-#: parse.y:4819
+#: parse.y:4575
 msgid "unexpected argument to conditional unary operator"
 msgstr "unexpected argument to conditional unary operator"
 
-#: parse.y:4865
+#: parse.y:4621
 #, c-format
 msgid "unexpected token `%s', conditional binary operator expected"
 msgstr "unexpected token ‘\e[1m%s\e[0m’, conditional binary operator expected"
 
-#: parse.y:4869
+#: parse.y:4625
 msgid "conditional binary operator expected"
 msgstr "conditional binary operator expected"
 
-#: parse.y:4891
+#: parse.y:4647
 #, c-format
 msgid "unexpected argument `%s' to conditional binary operator"
 msgstr "unexpected argument ‘\e[1m%s\e[0m’ to conditional binary operator"
 
-#: parse.y:4895
+#: parse.y:4651
 msgid "unexpected argument to conditional binary operator"
 msgstr "unexpected argument to conditional binary operator"
 
-#: parse.y:4906
+#: parse.y:4662
 #, c-format
 msgid "unexpected token `%c' in conditional command"
 msgstr "unexpected token ‘\e[1m%c\e[0m’ in conditional command"
 
-#: parse.y:4909
+#: parse.y:4665
 #, c-format
 msgid "unexpected token `%s' in conditional command"
 msgstr "unexpected token ‘\e[1m%s\e[0m’ in conditional command"
 
-#: parse.y:4913
+#: parse.y:4669
 #, c-format
 msgid "unexpected token %d in conditional command"
 msgstr "unexpected token %d in conditional command"
 
-#: parse.y:6336
+#: parse.y:6118
 #, c-format
 msgid "syntax error near unexpected token `%s'"
 msgstr "syntax error near unexpected token ‘\e[1m%s\e[0m’"
 
-#: parse.y:6355
+#: parse.y:6137
 #, c-format
 msgid "syntax error near `%s'"
 msgstr "syntax error near ‘\e[1m%s\e[0m’"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error: unexpected end of file"
 msgstr "syntax error: unexpected end of file"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error"
 msgstr "syntax error"
 
-#: parse.y:6428
+#: parse.y:6216
 #, c-format
 msgid "Use \"%s\" to leave the shell.\n"
 msgstr "Use “\e[1m%s\e[0m” to leave the shell.\n"
 
-#: parse.y:6602
+#: parse.y:6394
 msgid "unexpected EOF while looking for matching `)'"
 msgstr "unexpected EOF while looking for matching ‘\e[1m)\e[0m’"
 
@@ -1665,94 +1675,94 @@ msgstr "xtrace_set: NULL file pointer"
 msgid "xtrace fd (%d) != fileno xtrace fp (%d)"
 msgstr "xtrace fd (%d) != fileno xtrace fp (%d)"
 
-#: print_cmd.c:1540
+#: print_cmd.c:1545
 #, c-format
 msgid "cprintf: `%c': invalid format character"
 msgstr "cprintf: ‘\e[1m%c\e[0m’: invalid format character"
 
-#: redir.c:149 redir.c:197
+#: redir.c:150 redir.c:198
 msgid "file descriptor out of range"
 msgstr "file descriptor out of range"
 
-#: redir.c:204
+#: redir.c:205
 #, c-format
 msgid "%s: ambiguous redirect"
 msgstr "%s: ambiguous redirect"
 
-#: redir.c:208
+#: redir.c:209
 #, c-format
 msgid "%s: cannot overwrite existing file"
 msgstr "%s: cannot overwrite existing file"
 
-#: redir.c:213
+#: redir.c:214
 #, c-format
 msgid "%s: restricted: cannot redirect output"
 msgstr "%s: restricted: cannot redirect output"
 
-#: redir.c:218
+#: redir.c:219
 #, c-format
 msgid "cannot create temp file for here-document: %s"
 msgstr "cannot create temp file for here-document: %s"
 
-#: redir.c:222
+#: redir.c:223
 #, c-format
 msgid "%s: cannot assign fd to variable"
 msgstr "%s: cannot assign fd to variable"
 
-#: redir.c:649
+#: redir.c:650
 msgid "/dev/(tcp|udp)/host/port not supported without networking"
 msgstr "/dev/(tcp|udp)/host/port not supported without networking"
 
-#: redir.c:938 redir.c:1053 redir.c:1114 redir.c:1284
+#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303
 msgid "redirection error: cannot duplicate fd"
 msgstr "redirection error: cannot duplicate fd"
 
-#: shell.c:347
+#: shell.c:353
 msgid "could not find /tmp, please create!"
 msgstr "could not find /tmp, please create!"
 
-#: shell.c:351
+#: shell.c:357
 msgid "/tmp must be a valid directory name"
 msgstr "/tmp must be a valid directory name"
 
-#: shell.c:804
+#: shell.c:826
 msgid "pretty-printing mode ignored in interactive shells"
 msgstr "pretty-printing mode ignored in interactive shells"
 
-#: shell.c:948
+#: shell.c:972
 #, c-format
 msgid "%c%c: invalid option"
 msgstr "%c%c: invalid option"
 
-#: shell.c:1319
+#: shell.c:1343
 #, c-format
 msgid "cannot set uid to %d: effective uid %d"
 msgstr "cannot set uid to %d: effective uid %d"
 
-#: shell.c:1330
+#: shell.c:1354
 #, c-format
 msgid "cannot set gid to %d: effective gid %d"
 msgstr "cannot set gid to %d: effective gid %d"
 
-#: shell.c:1518
+#: shell.c:1544
 msgid "cannot start debugger; debugging mode disabled"
 msgstr "cannot start debugger; debugging mode disabled"
 
-#: shell.c:1632
+#: shell.c:1658
 #, c-format
 msgid "%s: Is a directory"
 msgstr "%s: Is a directory"
 
-#: shell.c:1881
+#: shell.c:1907
 msgid "I have no name!"
 msgstr "I have no name!"
 
-#: shell.c:2035
+#: shell.c:2061
 #, c-format
 msgid "GNU bash, version %s-(%s)\n"
 msgstr "GNU bash, version %s-(%s)\n"
 
-#: shell.c:2036
+#: shell.c:2062
 #, c-format
 msgid ""
 "Usage:\t%s [GNU long option] [option] ...\n"
@@ -1761,311 +1771,311 @@ msgstr ""
 "Usage:\t%s [GNU long option] [option] ...\n"
 "\t%s [GNU long option] [option] script-file ...\n"
 
-#: shell.c:2038
+#: shell.c:2064
 msgid "GNU long options:\n"
 msgstr "GNU long options:\n"
 
-#: shell.c:2042
+#: shell.c:2068
 msgid "Shell options:\n"
 msgstr "Shell options:\n"
 
-#: shell.c:2043
+#: shell.c:2069
 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n"
 msgstr "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n"
 
-#: shell.c:2062
+#: shell.c:2088
 #, c-format
 msgid "\t-%s or -o option\n"
 msgstr "\t-%s or -o option\n"
 
-#: shell.c:2068
+#: shell.c:2094
 #, c-format
 msgid "Type `%s -c \"help set\"' for more information about shell options.\n"
 msgstr ""
 "Type ‘\e[1m%s -c “\e[1mhelp set\e[0m”\e[0m’ for more information about shell "
 "options.\n"
 
-#: shell.c:2069
+#: shell.c:2095
 #, c-format
 msgid "Type `%s -c help' for more information about shell builtin commands.\n"
 msgstr ""
 "Type ‘\e[1m%s -c help\e[0m’ for more information about shell builtin commands.\n"
 
-#: shell.c:2070
+#: shell.c:2096
 #, c-format
 msgid "Use the `bashbug' command to report bugs.\n"
 msgstr "Use the ‘\e[1mbashbug\e[0m’ command to report bugs.\n"
 
-#: shell.c:2072
+#: shell.c:2098
 #, c-format
 msgid "bash home page: <http://www.gnu.org/software/bash>\n"
 msgstr "bash home page: <http://www.gnu.org/software/bash>\n"
 
-#: shell.c:2073
+#: shell.c:2099
 #, c-format
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 msgstr "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 
-#: sig.c:757
+#: sig.c:765
 #, c-format
 msgid "sigprocmask: %d: invalid operation"
 msgstr "sigprocmask: %d: invalid operation"
 
-#: siglist.c:47
+#: siglist.c:48
 msgid "Bogus signal"
 msgstr "Bogus signal"
 
-#: siglist.c:50
+#: siglist.c:51
 msgid "Hangup"
 msgstr "Hangup"
 
-#: siglist.c:54
+#: siglist.c:55
 msgid "Interrupt"
 msgstr "Interrupt"
 
-#: siglist.c:58
+#: siglist.c:59
 msgid "Quit"
 msgstr "Quit"
 
-#: siglist.c:62
+#: siglist.c:63
 msgid "Illegal instruction"
 msgstr "Illegal instruction"
 
-#: siglist.c:66
+#: siglist.c:67
 msgid "BPT trace/trap"
 msgstr "BPT trace/trap"
 
-#: siglist.c:74
+#: siglist.c:75
 msgid "ABORT instruction"
 msgstr "ABORT instruction"
 
-#: siglist.c:78
+#: siglist.c:79
 msgid "EMT instruction"
 msgstr "EMT instruction"
 
-#: siglist.c:82
+#: siglist.c:83
 msgid "Floating point exception"
 msgstr "Floating point exception"
 
-#: siglist.c:86
+#: siglist.c:87
 msgid "Killed"
 msgstr "Killed"
 
-#: siglist.c:90
+#: siglist.c:91
 msgid "Bus error"
 msgstr "Bus error"
 
-#: siglist.c:94
+#: siglist.c:95
 msgid "Segmentation fault"
 msgstr "Segmentation fault"
 
-#: siglist.c:98
+#: siglist.c:99
 msgid "Bad system call"
 msgstr "Bad system call"
 
-#: siglist.c:102
+#: siglist.c:103
 msgid "Broken pipe"
 msgstr "Broken pipe"
 
-#: siglist.c:106
+#: siglist.c:107
 msgid "Alarm clock"
 msgstr "Alarm clock"
 
-#: siglist.c:110
+#: siglist.c:111
 msgid "Terminated"
 msgstr "Terminated"
 
-#: siglist.c:114
+#: siglist.c:115
 msgid "Urgent IO condition"
 msgstr "Urgent IO condition"
 
-#: siglist.c:118
+#: siglist.c:119
 msgid "Stopped (signal)"
 msgstr "Stopped (signal)"
 
-#: siglist.c:126
+#: siglist.c:127
 msgid "Continue"
 msgstr "Continue"
 
-#: siglist.c:134
+#: siglist.c:135
 msgid "Child death or stop"
 msgstr "Child death or stop"
 
-#: siglist.c:138
+#: siglist.c:139
 msgid "Stopped (tty input)"
 msgstr "Stopped (tty input)"
 
-#: siglist.c:142
+#: siglist.c:143
 msgid "Stopped (tty output)"
 msgstr "Stopped (tty output)"
 
-#: siglist.c:146
+#: siglist.c:147
 msgid "I/O ready"
 msgstr "I/O ready"
 
-#: siglist.c:150
+#: siglist.c:151
 msgid "CPU limit"
 msgstr "CPU limit"
 
-#: siglist.c:154
+#: siglist.c:155
 msgid "File limit"
 msgstr "File limit"
 
-#: siglist.c:158
+#: siglist.c:159
 msgid "Alarm (virtual)"
 msgstr "Alarm (virtual)"
 
-#: siglist.c:162
+#: siglist.c:163
 msgid "Alarm (profile)"
 msgstr "Alarm (profile)"
 
-#: siglist.c:166
+#: siglist.c:167
 msgid "Window changed"
 msgstr "Window changed"
 
-#: siglist.c:170
+#: siglist.c:171
 msgid "Record lock"
 msgstr "Record lock"
 
-#: siglist.c:174
+#: siglist.c:175
 msgid "User signal 1"
 msgstr "User signal 1"
 
-#: siglist.c:178
+#: siglist.c:179
 msgid "User signal 2"
 msgstr "User signal 2"
 
-#: siglist.c:182
+#: siglist.c:183
 msgid "HFT input data pending"
 msgstr "HFT input data pending"
 
-#: siglist.c:186
+#: siglist.c:187
 msgid "power failure imminent"
 msgstr "power failure imminent"
 
-#: siglist.c:190
+#: siglist.c:191
 msgid "system crash imminent"
 msgstr "system crash imminent"
 
-#: siglist.c:194
+#: siglist.c:195
 msgid "migrate process to another CPU"
 msgstr "migrate process to another CPU"
 
-#: siglist.c:198
+#: siglist.c:199
 msgid "programming error"
 msgstr "programming error"
 
-#: siglist.c:202
+#: siglist.c:203
 msgid "HFT monitor mode granted"
 msgstr "HFT monitor mode granted"
 
-#: siglist.c:206
+#: siglist.c:207
 msgid "HFT monitor mode retracted"
 msgstr "HFT monitor mode retracted"
 
-#: siglist.c:210
+#: siglist.c:211
 msgid "HFT sound sequence has completed"
 msgstr "HFT sound sequence has completed"
 
-#: siglist.c:214
+#: siglist.c:215
 msgid "Information request"
 msgstr "Information request"
 
-#: siglist.c:222 siglist.c:224
+#: siglist.c:223 siglist.c:225
 #, c-format
 msgid "Unknown Signal #%d"
 msgstr "Unknown Signal #%d"
 
-#: subst.c:1476 subst.c:1666
+#: subst.c:1480 subst.c:1670
 #, c-format
 msgid "bad substitution: no closing `%s' in %s"
 msgstr "bad substitution: no closing ‘\e[1m%s\e[0m’ in %s"
 
-#: subst.c:3281
+#: subst.c:3307
 #, c-format
 msgid "%s: cannot assign list to array member"
 msgstr "%s: cannot assign list to array member"
 
-#: subst.c:5910 subst.c:5926
+#: subst.c:6048 subst.c:6064
 msgid "cannot make pipe for process substitution"
 msgstr "cannot make pipe for process substitution"
 
-#: subst.c:5985
+#: subst.c:6124
 msgid "cannot make child for process substitution"
 msgstr "cannot make child for process substitution"
 
-#: subst.c:6059
+#: subst.c:6198
 #, c-format
 msgid "cannot open named pipe %s for reading"
 msgstr "cannot open named pipe %s for reading"
 
-#: subst.c:6061
+#: subst.c:6200
 #, c-format
 msgid "cannot open named pipe %s for writing"
 msgstr "cannot open named pipe %s for writing"
 
-#: subst.c:6084
+#: subst.c:6223
 #, c-format
 msgid "cannot duplicate named pipe %s as fd %d"
 msgstr "cannot duplicate named pipe %s as fd %d"
 
-#: subst.c:6213
+#: subst.c:6370
 msgid "command substitution: ignored null byte in input"
 msgstr "command substitution: ignored null byte in input"
 
-#: subst.c:6353
+#: subst.c:6533
 msgid "cannot make pipe for command substitution"
 msgstr "cannot make pipe for command substitution"
 
-#: subst.c:6397
+#: subst.c:6580
 msgid "cannot make child for command substitution"
 msgstr "cannot make child for command substitution"
 
-#: subst.c:6423
+#: subst.c:6613
 msgid "command_substitute: cannot duplicate pipe as fd 1"
 msgstr "command_substitute: cannot duplicate pipe as fd 1"
 
-#: subst.c:6883 subst.c:9952
+#: subst.c:7082 subst.c:10252
 #, c-format
 msgid "%s: invalid variable name for name reference"
 msgstr "%s: invalid variable name for name reference"
 
-#: subst.c:6979 subst.c:6997 subst.c:7169
+#: subst.c:7178 subst.c:7196 subst.c:7369
 #, c-format
 msgid "%s: invalid indirect expansion"
 msgstr "%s: invalid indirect expansion"
 
-#: subst.c:7013 subst.c:7177
+#: subst.c:7212 subst.c:7377
 #, c-format
 msgid "%s: invalid variable name"
 msgstr "%s: invalid variable name"
 
-#: subst.c:7256
+#: subst.c:7478
 #, c-format
 msgid "%s: parameter not set"
 msgstr "%s: parameter not set"
 
-#: subst.c:7258
+#: subst.c:7480
 #, c-format
 msgid "%s: parameter null or not set"
 msgstr "%s: parameter null or not set"
 
-#: subst.c:7503 subst.c:7518
+#: subst.c:7727 subst.c:7742
 #, c-format
 msgid "%s: substring expression < 0"
 msgstr "%s: substring expression < 0"
 
-#: subst.c:9281 subst.c:9302
+#: subst.c:9560 subst.c:9587
 #, c-format
 msgid "%s: bad substitution"
 msgstr "%s: bad substitution"
 
-#: subst.c:9390
+#: subst.c:9678
 #, c-format
 msgid "$%s: cannot assign in this way"
 msgstr "$%s: cannot assign in this way"
 
-#: subst.c:9814
+#: subst.c:10111
 msgid ""
 "future versions of the shell will force evaluation as an arithmetic "
 "substitution"
@@ -2073,12 +2083,12 @@ msgstr ""
 "future versions of the shell will force evaluation as an arithmetic "
 "substitution"
 
-#: subst.c:10367
+#: subst.c:10795
 #, c-format
 msgid "bad substitution: no closing \"`\" in %s"
 msgstr "bad substitution: no closing “\e[1m`\e[0m” in %s"
 
-#: subst.c:11434
+#: subst.c:11874
 #, c-format
 msgid "no match: %s"
 msgstr "no match: %s"
@@ -2101,21 +2111,21 @@ msgstr "‘\e[1m)\e[0m’ expected"
 msgid "`)' expected, found %s"
 msgstr "‘\e[1m)\e[0m’ expected, found %s"
 
-#: test.c:466 test.c:799
+#: test.c:469 test.c:814
 #, c-format
 msgid "%s: binary operator expected"
 msgstr "%s: binary operator expected"
 
-#: test.c:756 test.c:759
+#: test.c:771 test.c:774
 #, c-format
 msgid "%s: unary operator expected"
 msgstr "%s: unary operator expected"
 
-#: test.c:881
+#: test.c:896
 msgid "missing `]'"
 msgstr "missing ‘\e[1m]\e[0m’"
 
-#: test.c:899
+#: test.c:914
 #, c-format
 msgid "syntax error: `%s' unexpected"
 msgstr "syntax error: ‘\e[1m%s\e[0m’ unexpected"
@@ -2124,100 +2134,106 @@ msgstr "syntax error: ‘\e[1m%s\e[0m’ unexpected"
 msgid "invalid signal number"
 msgstr "invalid signal number"
 
-#: trap.c:325
+#: trap.c:323
 #, c-format
 msgid "trap handler: maximum trap handler level exceeded (%d)"
 msgstr "trap handler: maximum trap handler level exceeded (%d)"
 
-#: trap.c:414
+#: trap.c:412
 #, c-format
 msgid "run_pending_traps: bad value in trap_list[%d]: %p"
 msgstr "run_pending_traps: bad value in trap_list[%d]: %p"
 
-#: trap.c:418
+#: trap.c:416
 #, c-format
 msgid ""
 "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
 msgstr ""
 "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
 
-#: trap.c:487
+#: trap.c:509
 #, c-format
 msgid "trap_handler: bad signal %d"
 msgstr "trap_handler: bad signal %d"
 
-#: variables.c:421
+#: variables.c:424
 #, c-format
 msgid "error importing function definition for `%s'"
 msgstr "error importing function definition for ‘\e[1m%s\e[0m’"
 
-#: variables.c:833
+#: variables.c:838
 #, c-format
 msgid "shell level (%d) too high, resetting to 1"
 msgstr "shell level (%d) too high, resetting to 1"
 
-#: variables.c:2674
+#: variables.c:2642
 msgid "make_local_variable: no function context at current scope"
 msgstr "make_local_variable: no function context at current scope"
 
-#: variables.c:2693
+#: variables.c:2661
 #, c-format
 msgid "%s: variable may not be assigned value"
 msgstr "%s: variable may not be assigned value"
 
-#: variables.c:3475
+#: variables.c:2818 variables.c:2874
+#, c-format
+msgid "%s: cannot inherit value from incompatible type"
+msgstr ""
+
+#: variables.c:3459
 #, c-format
 msgid "%s: assigning integer to name reference"
 msgstr "%s: assigning integer to name reference"
 
-#: variables.c:4404
+#: variables.c:4390
 msgid "all_local_variables: no function context at current scope"
 msgstr "all_local_variables: no function context at current scope"
 
-#: variables.c:4771
+#: variables.c:4757
 #, c-format
 msgid "%s has null exportstr"
 msgstr "%s has null exportstr"
 
-#: variables.c:4776 variables.c:4785
+#: variables.c:4762 variables.c:4771
 #, c-format
 msgid "invalid character %d in exportstr for %s"
 msgstr "invalid character %d in exportstr for %s"
 
-#: variables.c:4791
+#: variables.c:4777
 #, c-format
 msgid "no `=' in exportstr for %s"
 msgstr "no ‘\e[1m=\e[0m’ in exportstr for %s"
 
-#: variables.c:5331
+#: variables.c:5317
 msgid "pop_var_context: head of shell_variables not a function context"
 msgstr "pop_var_context: head of shell_variables not a function context"
 
-#: variables.c:5344
+#: variables.c:5330
 msgid "pop_var_context: no global_variables context"
 msgstr "pop_var_context: no global_variables context"
 
-#: variables.c:5424
+#: variables.c:5410
 msgid "pop_scope: head of shell_variables not a temporary environment scope"
 msgstr "pop_scope: head of shell_variables not a temporary environment scope"
 
-#: variables.c:6387
+#: variables.c:6400
 #, c-format
 msgid "%s: %s: cannot open as FILE"
 msgstr "%s: %s: cannot open as FILE"
 
-#: variables.c:6392
+#: variables.c:6405
 #, c-format
 msgid "%s: %s: invalid value for trace file descriptor"
 msgstr "%s: %s: invalid value for trace file descriptor"
 
-#: variables.c:6437
+#: variables.c:6450
 #, c-format
 msgid "%s: %s: compatibility value out of range"
 msgstr "%s: %s: compatibility value out of range"
 
 #: version.c:46 version2.c:46
-msgid "Copyright (C) 2020 Free Software Foundation, Inc."
+#, fuzzy
+msgid "Copyright (C) 2022 Free Software Foundation, Inc."
 msgstr "Copyright (C) 2020 Free Software Foundation, Inc."
 
 #: version.c:47 version2.c:47
@@ -2306,11 +2322,17 @@ msgid "command [-pVv] command [arg ...]"
 msgstr "command [-pVv] command [arg ...]"
 
 #: builtins.c:78
-msgid "declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]"
+#, fuzzy
+msgid ""
+"declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] "
+"[name ...]"
 msgstr "declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]"
 
 #: builtins.c:80
-msgid "typeset [-aAfFgiIlnrtux] [-p] name[=value] ..."
+#, fuzzy
+msgid ""
+"typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] "
+"[name ...]"
 msgstr "typeset [-aAfFgiIlnrtux] [-p] name[=value] ..."
 
 #: builtins.c:82
@@ -2410,7 +2432,8 @@ msgid "return [n]"
 msgstr "return [n]"
 
 #: builtins.c:142
-msgid "set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]"
+#, fuzzy
+msgid "set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]"
 msgstr "set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]"
 
 #: builtins.c:144
@@ -2458,7 +2481,8 @@ msgid "type [-afptP] name [name ...]"
 msgstr "type [-afptP] name [name ...]"
 
 #: builtins.c:171
-msgid "ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]"
+#, fuzzy
+msgid "ulimit [-SHabcdefiklmnpqrstuvxPRT] [limit]"
 msgstr "ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]"
 
 #: builtins.c:174
@@ -2502,11 +2526,13 @@ msgstr ""
 "COMMANDS; ] fi"
 
 #: builtins.c:196
-msgid "while COMMANDS; do COMMANDS; done"
+#, fuzzy
+msgid "while COMMANDS; do COMMANDS-2; done"
 msgstr "while COMMANDS; do COMMANDS; done"
 
 #: builtins.c:198
-msgid "until COMMANDS; do COMMANDS; done"
+#, fuzzy
+msgid "until COMMANDS; do COMMANDS-2; done"
 msgstr "until COMMANDS; do COMMANDS; done"
 
 #: builtins.c:200
@@ -3897,6 +3923,7 @@ msgstr ""
 "    If the last ARG evaluates to 0, let returns 1; let returns 0 otherwise."
 
 #: builtins.c:994
+#, fuzzy
 msgid ""
 "Read a line from the standard input and split it into fields.\n"
 "    \n"
@@ -3907,7 +3934,9 @@ msgid ""
 "    word to the second NAME, and so on, with any leftover words assigned to\n"
 "    the last NAME.  Only the characters found in $IFS are recognized as "
 "word\n"
-"    delimiters.\n"
+"    delimiters. By default, the backslash character escapes delimiter "
+"characters\n"
+"    and newline.\n"
 "    \n"
 "    If no NAMEs are supplied, the line read is stored in the REPLY "
 "variable.\n"
@@ -3996,7 +4025,7 @@ msgstr ""
 "occurs,\n"
 "    or an invalid file descriptor is supplied as the argument to -u."
 
-#: builtins.c:1041
+#: builtins.c:1042
 msgid ""
 "Return from a shell function.\n"
 "    \n"
@@ -4016,7 +4045,7 @@ msgstr ""
 "    Exit Status:\n"
 "    Returns N, or failure if the shell is not executing a function or script."
 
-#: builtins.c:1054
+#: builtins.c:1055
 msgid ""
 "Set or unset values of shell options and positional parameters.\n"
 "    \n"
@@ -4184,7 +4213,7 @@ msgstr ""
 "    Exit Status:\n"
 "    Returns success unless an invalid option is given."
 
-#: builtins.c:1139
+#: builtins.c:1140
 msgid ""
 "Unset values and attributes of shell variables and functions.\n"
 "    \n"
@@ -4224,7 +4253,7 @@ msgstr ""
 "    Exit Status:\n"
 "    Returns success unless an invalid option is given or a NAME is read-only."
 
-#: builtins.c:1161
+#: builtins.c:1162
 msgid ""
 "Set export attribute for shell variables.\n"
 "    \n"
@@ -4258,7 +4287,7 @@ msgstr ""
 "    Exit Status:\n"
 "    Returns success unless an invalid option is given or NAME is invalid."
 
-#: builtins.c:1180
+#: builtins.c:1181
 msgid ""
 "Mark shell variables as unchangeable.\n"
 "    \n"
@@ -4296,7 +4325,7 @@ msgstr ""
 "    Exit Status:\n"
 "    Returns success unless an invalid option is given or NAME is invalid."
 
-#: builtins.c:1202
+#: builtins.c:1203
 msgid ""
 "Shift positional parameters.\n"
 "    \n"
@@ -4314,7 +4343,7 @@ msgstr ""
 "    Exit Status:\n"
 "    Returns success unless N is negative or greater than $#."
 
-#: builtins.c:1214 builtins.c:1229
+#: builtins.c:1215 builtins.c:1230
 msgid ""
 "Execute commands from a file in the current shell.\n"
 "    \n"
@@ -4338,7 +4367,7 @@ msgstr ""
 "    Returns the status of the last command executed in FILENAME; fails if\n"
 "    FILENAME cannot be read."
 
-#: builtins.c:1245
+#: builtins.c:1246
 msgid ""
 "Suspend shell execution.\n"
 "    \n"
@@ -4362,7 +4391,7 @@ msgstr ""
 "    Exit Status:\n"
 "    Returns success unless job control is not enabled or an error occurs."
 
-#: builtins.c:1261
+#: builtins.c:1262
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -4524,7 +4553,7 @@ msgstr ""
 "    Returns success if EXPR evaluates to true; fails if EXPR evaluates to\n"
 "    false or an invalid argument is given."
 
-#: builtins.c:1343
+#: builtins.c:1344
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -4537,7 +4566,7 @@ msgstr ""
 "must\n"
 "    be a literal ‘\e[1m]\e[0m’, to match the opening ‘\e[1m[\e[0m’."
 
-#: builtins.c:1352
+#: builtins.c:1353
 msgid ""
 "Display process times.\n"
 "    \n"
@@ -4557,7 +4586,7 @@ msgstr ""
 "    Exit Status:\n"
 "    Always succeeds."
 
-#: builtins.c:1364
+#: builtins.c:1365
 msgid ""
 "Trap signals and other events.\n"
 "    \n"
@@ -4642,7 +4671,7 @@ msgstr ""
 "    Returns success unless a SIGSPEC is invalid or an invalid option is "
 "given."
 
-#: builtins.c:1400
+#: builtins.c:1401
 msgid ""
 "Display information about command type.\n"
 "    \n"
@@ -4700,7 +4729,7 @@ msgstr ""
 "    Returns success if all of the NAMEs are found; fails if any are not "
 "found."
 
-#: builtins.c:1431
+#: builtins.c:1432
 msgid ""
 "Modify shell resource limits.\n"
 "    \n"
@@ -4797,7 +4826,7 @@ msgstr ""
 "    Exit Status:\n"
 "    Returns success unless an invalid option is supplied or an error occurs."
 
-#: builtins.c:1482
+#: builtins.c:1483
 msgid ""
 "Display or set file mode mask.\n"
 "    \n"
@@ -4829,7 +4858,7 @@ msgstr ""
 "    Exit Status:\n"
 "    Returns success unless MODE is invalid or an invalid option is given."
 
-#: builtins.c:1502
+#: builtins.c:1503
 msgid ""
 "Wait for job completion and return exit status.\n"
 "    \n"
@@ -4889,7 +4918,7 @@ msgstr ""
 "    option is given, or if -n is supplied and the shell has no unwaited-for\n"
 "    children."
 
-#: builtins.c:1533
+#: builtins.c:1534
 msgid ""
 "Wait for process completion and return exit status.\n"
 "    \n"
@@ -4915,7 +4944,7 @@ msgstr ""
 "invalid\n"
 "    option is given."
 
-#: builtins.c:1548
+#: builtins.c:1549
 msgid ""
 "Execute commands for each member in a list.\n"
 "    \n"
@@ -4939,7 +4968,7 @@ msgstr ""
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 
-#: builtins.c:1562
+#: builtins.c:1563
 msgid ""
 "Arithmetic for loop.\n"
 "    \n"
@@ -4969,7 +4998,7 @@ msgstr ""
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 
-#: builtins.c:1580
+#: builtins.c:1581
 msgid ""
 "Select words from a list and execute commands.\n"
 "    \n"
@@ -5006,7 +5035,7 @@ msgstr ""
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 
-#: builtins.c:1601
+#: builtins.c:1602
 msgid ""
 "Report time consumed by pipeline's execution.\n"
 "    \n"
@@ -5034,7 +5063,7 @@ msgstr ""
 "    Exit Status:\n"
 "    The return status is the return status of PIPELINE."
 
-#: builtins.c:1618
+#: builtins.c:1619
 msgid ""
 "Execute commands based on pattern matching.\n"
 "    \n"
@@ -5052,7 +5081,7 @@ msgstr ""
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 
-#: builtins.c:1630
+#: builtins.c:1631
 msgid ""
 "Execute commands based on conditional.\n"
 "    \n"
@@ -5090,12 +5119,14 @@ msgstr ""
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 
-#: builtins.c:1647
+#: builtins.c:1648
+#, fuzzy
 msgid ""
 "Execute commands as long as a test succeeds.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `while' COMMANDS has an exit status of zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS "
+"has\n"
+"    an exit status of zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
@@ -5108,12 +5139,14 @@ msgstr ""
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 
-#: builtins.c:1659
+#: builtins.c:1660
+#, fuzzy
 msgid ""
 "Execute commands as long as a test does not succeed.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `until' COMMANDS has an exit status which is not zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS "
+"has\n"
+"    an exit status which is not zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
@@ -5126,7 +5159,7 @@ msgstr ""
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 
-#: builtins.c:1671
+#: builtins.c:1672
 msgid ""
 "Create a coprocess named NAME.\n"
 "    \n"
@@ -5148,7 +5181,7 @@ msgstr ""
 "    Exit Status:\n"
 "    The coproc command returns an exit status of 0."
 
-#: builtins.c:1685
+#: builtins.c:1686
 msgid ""
 "Define shell function.\n"
 "    \n"
@@ -5172,7 +5205,7 @@ msgstr ""
 "    Exit Status:\n"
 "    Returns success unless NAME is readonly."
 
-#: builtins.c:1699
+#: builtins.c:1700
 msgid ""
 "Group commands as a unit.\n"
 "    \n"
@@ -5190,7 +5223,7 @@ msgstr ""
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 
-#: builtins.c:1711
+#: builtins.c:1712
 msgid ""
 "Resume job in foreground.\n"
 "    \n"
@@ -5215,7 +5248,7 @@ msgstr ""
 "    Exit Status:\n"
 "    Returns the status of the resumed job."
 
-#: builtins.c:1726
+#: builtins.c:1727
 msgid ""
 "Evaluate arithmetic expression.\n"
 "    \n"
@@ -5233,7 +5266,7 @@ msgstr ""
 "    Exit Status:\n"
 "    Returns 1 if EXPRESSION evaluates to 0; returns 0 otherwise."
 
-#: builtins.c:1738
+#: builtins.c:1739
 msgid ""
 "Execute conditional command.\n"
 "    \n"
@@ -5287,7 +5320,7 @@ msgstr ""
 "    Exit Status:\n"
 "    0 or 1 depending on value of EXPRESSION."
 
-#: builtins.c:1764
+#: builtins.c:1765
 msgid ""
 "Common shell variable names and usage.\n"
 "    \n"
@@ -5391,7 +5424,7 @@ msgstr ""
 "    HISTIGNORE\tA colon-separated list of patterns used to decide which\n"
 "    \t\tcommands should be saved on the history list.\n"
 
-#: builtins.c:1821
+#: builtins.c:1822
 msgid ""
 "Add directories to stack.\n"
 "    \n"
@@ -5449,7 +5482,7 @@ msgstr ""
 "    Returns success unless an invalid argument is supplied or the directory\n"
 "    change fails."
 
-#: builtins.c:1855
+#: builtins.c:1856
 msgid ""
 "Remove directories from stack.\n"
 "    \n"
@@ -5501,7 +5534,7 @@ msgstr ""
 "    Returns success unless an invalid argument is supplied or the directory\n"
 "    change fails."
 
-#: builtins.c:1885
+#: builtins.c:1886
 msgid ""
 "Display directory stack.\n"
 "    \n"
@@ -5556,7 +5589,7 @@ msgstr ""
 "    Exit Status:\n"
 "    Returns success unless an invalid option is supplied or an error occurs."
 
-#: builtins.c:1916
+#: builtins.c:1917
 msgid ""
 "Set and unset shell options.\n"
 "    \n"
@@ -5592,7 +5625,8 @@ msgstr ""
 "    Returns success if OPTNAME is enabled; fails if an invalid option is\n"
 "    given or OPTNAME is disabled."
 
-#: builtins.c:1937
+#: builtins.c:1938
+#, fuzzy
 msgid ""
 "Formats and prints ARGUMENTS under control of the FORMAT.\n"
 "    \n"
@@ -5615,6 +5649,8 @@ msgid ""
 "    \n"
 "      %b\texpand backslash escape sequences in the corresponding argument\n"
 "      %q\tquote the argument in a way that can be reused as shell input\n"
+"      %Q\tlike %q, but apply any precision to the unquoted argument before\n"
+"    \t\tquoting\n"
 "      %(fmt)T\toutput the date-time string resulting from using FMT as a "
 "format\n"
 "    \t        string for strftime(3)\n"
@@ -5666,7 +5702,7 @@ msgstr ""
 "assignment\n"
 "    error occurs."
 
-#: builtins.c:1971
+#: builtins.c:1974
 msgid ""
 "Specify how arguments are to be completed by Readline.\n"
 "    \n"
@@ -5724,7 +5760,7 @@ msgstr ""
 "    Exit Status:\n"
 "    Returns success unless an invalid option is supplied or an error occurs."
 
-#: builtins.c:2001
+#: builtins.c:2004
 msgid ""
 "Display possible completions depending on the options.\n"
 "    \n"
@@ -5746,7 +5782,7 @@ msgstr ""
 "    Exit Status:\n"
 "    Returns success unless an invalid option is supplied or an error occurs."
 
-#: builtins.c:2016
+#: builtins.c:2019
 msgid ""
 "Modify or display completion options.\n"
 "    \n"
@@ -5807,7 +5843,7 @@ msgstr ""
 "    Returns success unless an invalid option is supplied or NAME does not\n"
 "    have a completion specification defined."
 
-#: builtins.c:2047
+#: builtins.c:2050
 msgid ""
 "Read lines from the standard input into an indexed array variable.\n"
 "    \n"
@@ -5887,7 +5923,7 @@ msgstr ""
 "or\n"
 "    not an indexed array."
 
-#: builtins.c:2083
+#: builtins.c:2086
 msgid ""
 "Read lines from a file into an array variable.\n"
 "    \n"
@@ -5896,3 +5932,7 @@ msgstr ""
 "Read lines from a file into an array variable.\n"
 "    \n"
 "    A synonym for ‘\e[1mmapfile\e[0m’."
+
+#, c-format
+#~ msgid "%s: invalid associative array key"
+#~ msgstr "%s: invalid associative array key"
index 749c3a704addbb59e3ce21d7142fead3470b11d9..710a9d7cd07e07776bd2c11abe4dbd22c4479b04 100644 (file)
Binary files a/po/en@quot.gmo and b/po/en@quot.gmo differ
index 5d978b23106517430b3f2cf07661a094c9320e89..b7668e289066d82fe725a325c66844ef60b6aa11 100644 (file)
@@ -29,7 +29,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GNU bash 5.1-rc3\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-11-28 12:51-0500\n"
+"POT-Creation-Date: 2022-01-11 14:50-0500\n"
 "PO-Revision-Date: 2020-11-28 12:51-0500\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
@@ -43,57 +43,52 @@ msgstr ""
 msgid "bad array subscript"
 msgstr "bad array subscript"
 
-#: arrayfunc.c:421 builtins/declare.def:638 variables.c:2274 variables.c:2300
-#: variables.c:3133
+#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268
+#: variables.c:3101
 #, c-format
 msgid "%s: removing nameref attribute"
 msgstr "%s: removing nameref attribute"
 
-#: arrayfunc.c:446 builtins/declare.def:851
+#: arrayfunc.c:496 builtins/declare.def:868
 #, c-format
 msgid "%s: cannot convert indexed to associative array"
 msgstr "%s: cannot convert indexed to associative array"
 
-#: arrayfunc.c:700
-#, c-format
-msgid "%s: invalid associative array key"
-msgstr "%s: invalid associative array key"
-
-#: arrayfunc.c:702
+#: arrayfunc.c:777
 #, c-format
 msgid "%s: cannot assign to non-numeric index"
 msgstr "%s: cannot assign to non-numeric index"
 
-#: arrayfunc.c:747
+#: arrayfunc.c:822
 #, c-format
 msgid "%s: %s: must use subscript when assigning associative array"
 msgstr "%s: %s: must use subscript when assigning associative array"
 
-#: bashhist.c:452
+#: bashhist.c:455
 #, c-format
 msgid "%s: cannot create: %s"
 msgstr "%s: cannot create: %s"
 
-#: bashline.c:4310
+#: bashline.c:4479
 msgid "bash_execute_unix_command: cannot find keymap for command"
 msgstr "bash_execute_unix_command: cannot find keymap for command"
 
-#: bashline.c:4459
+#: bashline.c:4637
 #, c-format
 msgid "%s: first non-whitespace character is not `\"'"
 msgstr "%s: first non-whitespace character is not ‘\"’"
 
-#: bashline.c:4488
+#: bashline.c:4666
 #, c-format
 msgid "no closing `%c' in %s"
 msgstr "no closing ‘%c’ in %s"
 
-#: bashline.c:4519
+#: bashline.c:4697
 #, c-format
 msgid "%s: missing colon separator"
 msgstr "%s: missing colon separator"
 
-#: bashline.c:4555
+#: bashline.c:4733
 #, c-format
 msgid "`%s': cannot unbind in command keymap"
 msgstr "‘%s’: cannot unbind in command keymap"
@@ -113,7 +108,7 @@ msgstr "brace expansion: failed to allocate memory for %u elements"
 msgid "brace expansion: failed to allocate memory for `%s'"
 msgstr "brace expansion: failed to allocate memory for ‘%s’"
 
-#: builtins/alias.def:131 variables.c:1844
+#: builtins/alias.def:131 variables.c:1817
 #, c-format
 msgid "`%s': invalid alias name"
 msgstr "‘%s’: invalid alias name"
@@ -184,7 +179,7 @@ msgstr ""
 msgid "HOME not set"
 msgstr "HOME not set"
 
-#: builtins/cd.def:335 builtins/common.c:161 test.c:901
+#: builtins/cd.def:335 builtins/common.c:161 test.c:916
 msgid "too many arguments"
 msgstr "too many arguments"
 
@@ -211,7 +206,7 @@ msgstr "warning: "
 msgid "%s: usage: "
 msgstr "%s: usage: "
 
-#: builtins/common.c:193 shell.c:516 shell.c:844
+#: builtins/common.c:193 shell.c:524 shell.c:866
 #, c-format
 msgid "%s: option requires an argument"
 msgstr "%s: option requires an argument"
@@ -226,7 +221,7 @@ msgstr "%s: numeric argument required"
 msgid "%s: not found"
 msgstr "%s: not found"
 
-#: builtins/common.c:216 shell.c:857
+#: builtins/common.c:216 shell.c:879
 #, c-format
 msgid "%s: invalid option"
 msgstr "%s: invalid option"
@@ -236,7 +231,7 @@ msgstr "%s: invalid option"
 msgid "%s: invalid option name"
 msgstr "%s: invalid option name"
 
-#: builtins/common.c:230 execute_cmd.c:2373 general.c:368 general.c:373
+#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373
 #, c-format
 msgid "`%s': not a valid identifier"
 msgstr "‘%s’: not a valid identifier"
@@ -249,7 +244,7 @@ msgstr "invalid octal number"
 msgid "invalid hex number"
 msgstr "invalid hex number"
 
-#: builtins/common.c:244 expr.c:1569
+#: builtins/common.c:244 expr.c:1574
 msgid "invalid number"
 msgstr "invalid number"
 
@@ -263,88 +258,93 @@ msgstr "%s: invalid signal specification"
 msgid "`%s': not a pid or valid job spec"
 msgstr "‘%s’: not a pid or valid job spec"
 
-#: builtins/common.c:266 error.c:510
+#: builtins/common.c:266 error.c:536
 #, c-format
 msgid "%s: readonly variable"
 msgstr "%s: readonly variable"
 
-#: builtins/common.c:274
+#: builtins/common.c:273
+#, fuzzy, c-format
+msgid "%s: cannot assign"
+msgstr "%s: cannot unset"
+
+#: builtins/common.c:281
 #, c-format
 msgid "%s: %s out of range"
 msgstr "%s: %s out of range"
 
-#: builtins/common.c:274 builtins/common.c:276
+#: builtins/common.c:281 builtins/common.c:283
 msgid "argument"
 msgstr "argument"
 
-#: builtins/common.c:276
+#: builtins/common.c:283
 #, c-format
 msgid "%s out of range"
 msgstr "%s out of range"
 
-#: builtins/common.c:284
+#: builtins/common.c:291
 #, c-format
 msgid "%s: no such job"
 msgstr "%s: no such job"
 
-#: builtins/common.c:292
+#: builtins/common.c:299
 #, c-format
 msgid "%s: no job control"
 msgstr "%s: no job control"
 
-#: builtins/common.c:294
+#: builtins/common.c:301
 msgid "no job control"
 msgstr "no job control"
 
-#: builtins/common.c:304
+#: builtins/common.c:311
 #, c-format
 msgid "%s: restricted"
 msgstr "%s: restricted"
 
-#: builtins/common.c:306
+#: builtins/common.c:313
 msgid "restricted"
 msgstr "restricted"
 
-#: builtins/common.c:314
+#: builtins/common.c:321
 #, c-format
 msgid "%s: not a shell builtin"
 msgstr "%s: not a shell builtin"
 
-#: builtins/common.c:323
+#: builtins/common.c:330
 #, c-format
 msgid "write error: %s"
 msgstr "write error: %s"
 
-#: builtins/common.c:331
+#: builtins/common.c:338
 #, c-format
 msgid "error setting terminal attributes: %s"
 msgstr "error setting terminal attributes: %s"
 
-#: builtins/common.c:333
+#: builtins/common.c:340
 #, c-format
 msgid "error getting terminal attributes: %s"
 msgstr "error getting terminal attributes: %s"
 
-#: builtins/common.c:635
+#: builtins/common.c:642
 #, c-format
 msgid "%s: error retrieving current directory: %s: %s\n"
 msgstr "%s: error retrieving current directory: %s: %s\n"
 
-#: builtins/common.c:701 builtins/common.c:703
+#: builtins/common.c:708 builtins/common.c:710
 #, c-format
 msgid "%s: ambiguous job spec"
 msgstr "%s: ambiguous job spec"
 
-#: builtins/common.c:964
+#: builtins/common.c:971
 msgid "help not available in this version"
 msgstr "help not available in this version"
 
-#: builtins/common.c:1008 builtins/set.def:953 variables.c:3839
+#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825
 #, c-format
 msgid "%s: cannot unset: readonly %s"
 msgstr "%s: cannot unset: readonly %s"
 
-#: builtins/common.c:1013 builtins/set.def:932 variables.c:3844
+#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830
 #, c-format
 msgid "%s: cannot unset"
 msgstr "%s: cannot unset"
@@ -354,108 +354,108 @@ msgstr "%s: cannot unset"
 msgid "%s: invalid action name"
 msgstr "%s: invalid action name"
 
-#: builtins/complete.def:486 builtins/complete.def:634
-#: builtins/complete.def:865
+#: builtins/complete.def:486 builtins/complete.def:642
+#: builtins/complete.def:873
 #, c-format
 msgid "%s: no completion specification"
 msgstr "%s: no completion specification"
 
-#: builtins/complete.def:688
+#: builtins/complete.def:696
 msgid "warning: -F option may not work as you expect"
 msgstr "warning: -F option may not work as you expect"
 
-#: builtins/complete.def:690
+#: builtins/complete.def:698
 msgid "warning: -C option may not work as you expect"
 msgstr "warning: -C option may not work as you expect"
 
-#: builtins/complete.def:838
+#: builtins/complete.def:846
 msgid "not currently executing completion function"
 msgstr "not currently executing completion function"
 
-#: builtins/declare.def:134
+#: builtins/declare.def:137
 msgid "can only be used in a function"
 msgstr "can only be used in a function"
 
-#: builtins/declare.def:363 builtins/declare.def:756
+#: builtins/declare.def:437
+msgid "cannot use `-f' to make functions"
+msgstr "cannot use ‘-f’ to make functions"
+
+#: builtins/declare.def:464 execute_cmd.c:6132
+#, c-format
+msgid "%s: readonly function"
+msgstr "%s: readonly function"
+
+#: builtins/declare.def:521 builtins/declare.def:804
 #, c-format
 msgid "%s: reference variable cannot be an array"
 msgstr "%s: reference variable cannot be an array"
 
-#: builtins/declare.def:374 variables.c:3385
+#: builtins/declare.def:532 variables.c:3359
 #, c-format
 msgid "%s: nameref variable self references not allowed"
 msgstr "%s: nameref variable self references not allowed"
 
-#: builtins/declare.def:379 variables.c:2104 variables.c:3304 variables.c:3312
-#: variables.c:3382
+#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286
+#: variables.c:3356
 #, c-format
 msgid "%s: circular name reference"
 msgstr "%s: circular name reference"
 
-#: builtins/declare.def:384 builtins/declare.def:762 builtins/declare.def:773
+#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820
 #, c-format
 msgid "`%s': invalid variable name for name reference"
 msgstr "‘%s’: invalid variable name for name reference"
 
-#: builtins/declare.def:514
-msgid "cannot use `-f' to make functions"
-msgstr "cannot use ‘-f’ to make functions"
-
-#: builtins/declare.def:526 execute_cmd.c:5986
-#, c-format
-msgid "%s: readonly function"
-msgstr "%s: readonly function"
-
-#: builtins/declare.def:824
-#, c-format
-msgid "%s: quoted compound array assignment deprecated"
-msgstr "%s: quoted compound array assignment deprecated"
-
-#: builtins/declare.def:838
+#: builtins/declare.def:856
 #, c-format
 msgid "%s: cannot destroy array variables in this way"
 msgstr "%s: cannot destroy array variables in this way"
 
-#: builtins/declare.def:845 builtins/read.def:815
+#: builtins/declare.def:862 builtins/read.def:887
 #, c-format
 msgid "%s: cannot convert associative to indexed array"
 msgstr "%s: cannot convert associative to indexed array"
 
-#: builtins/enable.def:143 builtins/enable.def:151
+#: builtins/declare.def:891
+#, c-format
+msgid "%s: quoted compound array assignment deprecated"
+msgstr "%s: quoted compound array assignment deprecated"
+
+#: builtins/enable.def:145 builtins/enable.def:153
 msgid "dynamic loading not available"
 msgstr "dynamic loading not available"
 
-#: builtins/enable.def:343
+#: builtins/enable.def:376
 #, c-format
 msgid "cannot open shared object %s: %s"
 msgstr "cannot open shared object %s: %s"
 
-#: builtins/enable.def:371
+#: builtins/enable.def:405
 #, c-format
 msgid "cannot find %s in shared object %s: %s"
 msgstr "cannot find %s in shared object %s: %s"
 
-#: builtins/enable.def:388
+#: builtins/enable.def:422
 #, c-format
 msgid "%s: dynamic builtin already loaded"
 msgstr "%s: dynamic builtin already loaded"
 
-#: builtins/enable.def:392
+#: builtins/enable.def:426
 #, c-format
 msgid "load function for %s returns failure (%d): not loaded"
 msgstr "load function for %s returns failure (%d): not loaded"
 
-#: builtins/enable.def:517
+#: builtins/enable.def:551
 #, c-format
 msgid "%s: not dynamically loaded"
 msgstr "%s: not dynamically loaded"
 
-#: builtins/enable.def:543
+#: builtins/enable.def:577
 #, c-format
 msgid "%s: cannot delete: %s"
 msgstr "%s: cannot delete: %s"
 
-#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5818
+#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959
 #, c-format
 msgid "%s: is a directory"
 msgstr "%s: is a directory"
@@ -470,7 +470,7 @@ msgstr "%s: not a regular file"
 msgid "%s: file is too large"
 msgstr "%s: file is too large"
 
-#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1647
+#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673
 #, c-format
 msgid "%s: cannot execute binary file"
 msgstr "%s: cannot execute binary file"
@@ -567,12 +567,12 @@ msgid ""
 msgstr ""
 "no help topics match ‘%s’.  Try ‘help help’ or ‘man -k %s’ or ‘info %s’."
 
-#: builtins/help.def:224
+#: builtins/help.def:223
 #, c-format
 msgid "%s: cannot open: %s"
 msgstr "%s: cannot open: %s"
 
-#: builtins/help.def:524
+#: builtins/help.def:523
 #, c-format
 msgid ""
 "These shell commands are defined internally.  Type `help' to see this list.\n"
@@ -591,21 +591,21 @@ msgstr ""
 "A star (*) next to a name means that the command is disabled.\n"
 "\n"
 
-#: builtins/history.def:155
+#: builtins/history.def:159
 msgid "cannot use more than one of -anrw"
 msgstr "cannot use more than one of -anrw"
 
-#: builtins/history.def:188 builtins/history.def:198 builtins/history.def:213
-#: builtins/history.def:230 builtins/history.def:242 builtins/history.def:249
+#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215
+#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247
 msgid "history position"
 msgstr "history position"
 
-#: builtins/history.def:340
+#: builtins/history.def:338
 #, c-format
 msgid "%s: invalid timestamp"
 msgstr "%s: invalid timestamp"
 
-#: builtins/history.def:451
+#: builtins/history.def:449
 #, c-format
 msgid "%s: history expansion failed"
 msgstr "%s: history expansion failed"
@@ -628,78 +628,78 @@ msgstr "%s: arguments must be process or job IDs"
 msgid "Unknown error"
 msgstr "Unknown error"
 
-#: builtins/let.def:97 builtins/let.def:122 expr.c:639 expr.c:657
+#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658
 msgid "expression expected"
 msgstr "expression expected"
 
-#: builtins/mapfile.def:178
+#: builtins/mapfile.def:180
 #, c-format
 msgid "%s: not an indexed array"
 msgstr "%s: not an indexed array"
 
-#: builtins/mapfile.def:271 builtins/read.def:308
+#: builtins/mapfile.def:276 builtins/read.def:336
 #, c-format
 msgid "%s: invalid file descriptor specification"
 msgstr "%s: invalid file descriptor specification"
 
-#: builtins/mapfile.def:279 builtins/read.def:315
+#: builtins/mapfile.def:284 builtins/read.def:343
 #, c-format
 msgid "%d: invalid file descriptor: %s"
 msgstr "%d: invalid file descriptor: %s"
 
-#: builtins/mapfile.def:288 builtins/mapfile.def:326
+#: builtins/mapfile.def:293 builtins/mapfile.def:331
 #, c-format
 msgid "%s: invalid line count"
 msgstr "%s: invalid line count"
 
-#: builtins/mapfile.def:299
+#: builtins/mapfile.def:304
 #, c-format
 msgid "%s: invalid array origin"
 msgstr "%s: invalid array origin"
 
-#: builtins/mapfile.def:316
+#: builtins/mapfile.def:321
 #, c-format
 msgid "%s: invalid callback quantum"
 msgstr "%s: invalid callback quantum"
 
-#: builtins/mapfile.def:349
+#: builtins/mapfile.def:354
 msgid "empty array variable name"
 msgstr "empty array variable name"
 
-#: builtins/mapfile.def:370
+#: builtins/mapfile.def:375
 msgid "array variable support required"
 msgstr "array variable support required"
 
-#: builtins/printf.def:419
+#: builtins/printf.def:430
 #, c-format
 msgid "`%s': missing format character"
 msgstr "‘%s’: missing format character"
 
-#: builtins/printf.def:474
+#: builtins/printf.def:485
 #, c-format
 msgid "`%c': invalid time format specification"
 msgstr "‘%c’: invalid time format specification"
 
-#: builtins/printf.def:676
+#: builtins/printf.def:708
 #, c-format
 msgid "`%c': invalid format character"
 msgstr "‘%c’: invalid format character"
 
-#: builtins/printf.def:702
+#: builtins/printf.def:734
 #, c-format
 msgid "warning: %s: %s"
 msgstr "warning: %s: %s"
 
-#: builtins/printf.def:788
+#: builtins/printf.def:822
 #, c-format
 msgid "format parsing problem: %s"
 msgstr "format parsing problem: %s"
 
-#: builtins/printf.def:885
+#: builtins/printf.def:919
 msgid "missing hex digit for \\x"
 msgstr "missing hex digit for \\x"
 
-#: builtins/printf.def:900
+#: builtins/printf.def:934
 #, c-format
 msgid "missing unicode digit for \\%c"
 msgstr "missing unicode digit for \\%c"
@@ -853,12 +853,12 @@ msgstr ""
 "    \n"
 "    The ‘dirs’ builtin displays the directory stack."
 
-#: builtins/read.def:280
+#: builtins/read.def:308
 #, c-format
 msgid "%s: invalid timeout specification"
 msgstr "%s: invalid timeout specification"
 
-#: builtins/read.def:755
+#: builtins/read.def:827
 #, c-format
 msgid "read error: %d: %s"
 msgstr "read error: %d: %s"
@@ -871,7 +871,7 @@ msgstr "can only ‘return’ from a function or sourced script"
 msgid "cannot simultaneously unset a function and a variable"
 msgstr "cannot simultaneously unset a function and a variable"
 
-#: builtins/set.def:966
+#: builtins/set.def:969
 #, c-format
 msgid "%s: not an array variable"
 msgstr "%s: not an array variable"
@@ -890,11 +890,11 @@ msgstr "%s: cannot export"
 msgid "shift count"
 msgstr "shift count"
 
-#: builtins/shopt.def:310
+#: builtins/shopt.def:323
 msgid "cannot set and unset shell options simultaneously"
 msgstr "cannot set and unset shell options simultaneously"
 
-#: builtins/shopt.def:428
+#: builtins/shopt.def:444
 #, c-format
 msgid "%s: invalid shell option name"
 msgstr "%s: invalid shell option name"
@@ -961,16 +961,16 @@ msgstr "%s: invalid limit argument"
 msgid "`%c': bad command"
 msgstr "‘%c’: bad command"
 
-#: builtins/ulimit.def:455
+#: builtins/ulimit.def:464
 #, c-format
 msgid "%s: cannot get limit: %s"
 msgstr "%s: cannot get limit: %s"
 
-#: builtins/ulimit.def:481
+#: builtins/ulimit.def:490
 msgid "limit"
 msgstr "limit"
 
-#: builtins/ulimit.def:493 builtins/ulimit.def:793
+#: builtins/ulimit.def:502 builtins/ulimit.def:802
 #, c-format
 msgid "%s: cannot modify limit: %s"
 msgstr "%s: cannot modify limit: %s"
@@ -989,7 +989,7 @@ msgstr "‘%c’: invalid symbolic mode operator"
 msgid "`%c': invalid symbolic mode character"
 msgstr "‘%c’: invalid symbolic mode character"
 
-#: error.c:89 error.c:347 error.c:349 error.c:351
+#: error.c:89 error.c:373 error.c:375 error.c:377
 msgid " line "
 msgstr " line "
 
@@ -1009,96 +1009,106 @@ msgstr "Aborting..."
 msgid "INFORM: "
 msgstr "INFORM: "
 
-#: error.c:462
+#: error.c:310
+#, fuzzy, c-format
+msgid "DEBUG warning: "
+msgstr "warning: "
+
+#: error.c:488
 msgid "unknown command error"
 msgstr "unknown command error"
 
-#: error.c:463
+#: error.c:489
 msgid "bad command type"
 msgstr "bad command type"
 
-#: error.c:464
+#: error.c:490
 msgid "bad connector"
 msgstr "bad connector"
 
-#: error.c:465
+#: error.c:491
 msgid "bad jump"
 msgstr "bad jump"
 
-#: error.c:503
+#: error.c:529
 #, c-format
 msgid "%s: unbound variable"
 msgstr "%s: unbound variable"
 
-#: eval.c:242
+#: eval.c:243
 msgid "\atimed out waiting for input: auto-logout\n"
 msgstr "\atimed out waiting for input: auto-logout\n"
 
-#: execute_cmd.c:537
+#: execute_cmd.c:555
 #, c-format
 msgid "cannot redirect standard input from /dev/null: %s"
 msgstr "cannot redirect standard input from /dev/null: %s"
 
-#: execute_cmd.c:1297
+#: execute_cmd.c:1317
 #, c-format
 msgid "TIMEFORMAT: `%c': invalid format character"
 msgstr "TIMEFORMAT: ‘%c’: invalid format character"
 
-#: execute_cmd.c:2362
+#: execute_cmd.c:2391
 #, c-format
 msgid "execute_coproc: coproc [%d:%s] still exists"
 msgstr "execute_coproc: coproc [%d:%s] still exists"
 
-#: execute_cmd.c:2486
+#: execute_cmd.c:2524
 msgid "pipe error"
 msgstr "pipe error"
 
-#: execute_cmd.c:4793
+#: execute_cmd.c:4923
 #, c-format
 msgid "eval: maximum eval nesting level exceeded (%d)"
 msgstr "eval: maximum eval nesting level exceeded (%d)"
 
-#: execute_cmd.c:4805
+#: execute_cmd.c:4935
 #, c-format
 msgid "%s: maximum source nesting level exceeded (%d)"
 msgstr "%s: maximum source nesting level exceeded (%d)"
 
-#: execute_cmd.c:4913
+#: execute_cmd.c:5043
 #, c-format
 msgid "%s: maximum function nesting level exceeded (%d)"
 msgstr "%s: maximum function nesting level exceeded (%d)"
 
-#: execute_cmd.c:5467
+#: execute_cmd.c:5598
 #, c-format
 msgid "%s: restricted: cannot specify `/' in command names"
 msgstr "%s: restricted: cannot specify ‘/’ in command names"
 
-#: execute_cmd.c:5574
+#: execute_cmd.c:5715
 #, c-format
 msgid "%s: command not found"
 msgstr "%s: command not found"
 
-#: execute_cmd.c:5816
+#: execute_cmd.c:5957
 #, c-format
 msgid "%s: %s"
 msgstr "%s: %s"
 
-#: execute_cmd.c:5854
+#: execute_cmd.c:5975
+#, fuzzy, c-format
+msgid "%s: cannot execute: required file not found"
+msgstr "%s: cannot execute binary file"
+
+#: execute_cmd.c:6000
 #, c-format
 msgid "%s: %s: bad interpreter"
 msgstr "%s: %s: bad interpreter"
 
-#: execute_cmd.c:5891
+#: execute_cmd.c:6037
 #, c-format
 msgid "%s: cannot execute binary file: %s"
 msgstr "%s: cannot execute binary file: %s"
 
-#: execute_cmd.c:5977
+#: execute_cmd.c:6123
 #, c-format
 msgid "`%s': is a special builtin"
 msgstr "‘%s’: is a special builtin"
 
-#: execute_cmd.c:6029
+#: execute_cmd.c:6175
 #, c-format
 msgid "cannot duplicate fd %d to fd %d"
 msgstr "cannot duplicate fd %d to fd %d"
@@ -1111,68 +1121,68 @@ msgstr "expression recursion level exceeded"
 msgid "recursion stack underflow"
 msgstr "recursion stack underflow"
 
-#: expr.c:477
+#: expr.c:478
 msgid "syntax error in expression"
 msgstr "syntax error in expression"
 
-#: expr.c:521
+#: expr.c:522
 msgid "attempted assignment to non-variable"
 msgstr "attempted assignment to non-variable"
 
-#: expr.c:530
+#: expr.c:531
 msgid "syntax error in variable assignment"
 msgstr "syntax error in variable assignment"
 
-#: expr.c:544 expr.c:911
+#: expr.c:545 expr.c:912
 msgid "division by 0"
 msgstr "division by 0"
 
-#: expr.c:592
+#: expr.c:593
 msgid "bug: bad expassign token"
 msgstr "bug: bad expassign token"
 
-#: expr.c:646
+#: expr.c:647
 msgid "`:' expected for conditional expression"
 msgstr "‘:’ expected for conditional expression"
 
-#: expr.c:972
+#: expr.c:973
 msgid "exponent less than 0"
 msgstr "exponent less than 0"
 
-#: expr.c:1029
+#: expr.c:1030
 msgid "identifier expected after pre-increment or pre-decrement"
 msgstr "identifier expected after pre-increment or pre-decrement"
 
-#: expr.c:1056
+#: expr.c:1057
 msgid "missing `)'"
 msgstr "missing ‘)’"
 
-#: expr.c:1107 expr.c:1487
+#: expr.c:1108 expr.c:1492
 msgid "syntax error: operand expected"
 msgstr "syntax error: operand expected"
 
-#: expr.c:1489
+#: expr.c:1494
 msgid "syntax error: invalid arithmetic operator"
 msgstr "syntax error: invalid arithmetic operator"
 
-#: expr.c:1513
+#: expr.c:1518
 #, c-format
 msgid "%s%s%s: %s (error token is \"%s\")"
 msgstr "%s%s%s: %s (error token is “%s”)"
 
-#: expr.c:1573
+#: expr.c:1578
 msgid "invalid arithmetic base"
 msgstr "invalid arithmetic base"
 
-#: expr.c:1582
+#: expr.c:1587
 msgid "invalid integer constant"
 msgstr "invalid integer constant"
 
-#: expr.c:1598
+#: expr.c:1603
 msgid "value too great for base"
 msgstr "value too great for base"
 
-#: expr.c:1647
+#: expr.c:1652
 #, c-format
 msgid "%s: expression error\n"
 msgstr "%s: expression error\n"
@@ -1181,7 +1191,7 @@ msgstr "%s: expression error\n"
 msgid "getcwd: cannot access parent directories"
 msgstr "getcwd: cannot access parent directories"
 
-#: input.c:99 subst.c:6069
+#: input.c:99 subst.c:6208
 #, c-format
 msgid "cannot reset nodelay mode for fd %d"
 msgstr "cannot reset nodelay mode for fd %d"
@@ -1200,167 +1210,167 @@ msgstr "save_bash_input: buffer already exists for new fd %d"
 msgid "start_pipeline: pgrp pipe"
 msgstr "start_pipeline: pgrp pipe"
 
-#: jobs.c:906
+#: jobs.c:907
 #, c-format
 msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
 
-#: jobs.c:959
+#: jobs.c:960
 #, c-format
 msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
 
-#: jobs.c:1283
+#: jobs.c:1279
 #, c-format
 msgid "forked pid %d appears in running job %d"
 msgstr "forked pid %d appears in running job %d"
 
-#: jobs.c:1402
+#: jobs.c:1397
 #, c-format
 msgid "deleting stopped job %d with process group %ld"
 msgstr "deleting stopped job %d with process group %ld"
 
-#: jobs.c:1511
+#: jobs.c:1502
 #, c-format
 msgid "add_process: pid %5ld (%s) marked as still alive"
 msgstr "add_process: pid %5ld (%s) marked as still alive"
 
-#: jobs.c:1850
+#: jobs.c:1839
 #, c-format
 msgid "describe_pid: %ld: no such pid"
 msgstr "describe_pid: %ld: no such pid"
 
-#: jobs.c:1865
+#: jobs.c:1854
 #, c-format
 msgid "Signal %d"
 msgstr "Signal %d"
 
-#: jobs.c:1879 jobs.c:1905
+#: jobs.c:1868 jobs.c:1894
 msgid "Done"
 msgstr "Done"
 
-#: jobs.c:1884 siglist.c:122
+#: jobs.c:1873 siglist.c:123
 msgid "Stopped"
 msgstr "Stopped"
 
-#: jobs.c:1888
+#: jobs.c:1877
 #, c-format
 msgid "Stopped(%s)"
 msgstr "Stopped(%s)"
 
-#: jobs.c:1892
+#: jobs.c:1881
 msgid "Running"
 msgstr "Running"
 
-#: jobs.c:1909
+#: jobs.c:1898
 #, c-format
 msgid "Done(%d)"
 msgstr "Done(%d)"
 
-#: jobs.c:1911
+#: jobs.c:1900
 #, c-format
 msgid "Exit %d"
 msgstr "Exit %d"
 
-#: jobs.c:1914
+#: jobs.c:1903
 msgid "Unknown status"
 msgstr "Unknown status"
 
-#: jobs.c:2001
+#: jobs.c:1990
 #, c-format
 msgid "(core dumped) "
 msgstr "(core dumped) "
 
-#: jobs.c:2020
+#: jobs.c:2009
 #, c-format
 msgid "  (wd: %s)"
 msgstr "  (wd: %s)"
 
-#: jobs.c:2259
+#: jobs.c:2250
 #, c-format
 msgid "child setpgid (%ld to %ld)"
 msgstr "child setpgid (%ld to %ld)"
 
-#: jobs.c:2617 nojobs.c:664
+#: jobs.c:2608 nojobs.c:666
 #, c-format
 msgid "wait: pid %ld is not a child of this shell"
 msgstr "wait: pid %ld is not a child of this shell"
 
-#: jobs.c:2893
+#: jobs.c:2884
 #, c-format
 msgid "wait_for: No record of process %ld"
 msgstr "wait_for: No record of process %ld"
 
-#: jobs.c:3236
+#: jobs.c:3223
 #, c-format
 msgid "wait_for_job: job %d is stopped"
 msgstr "wait_for_job: job %d is stopped"
 
-#: jobs.c:3564
+#: jobs.c:3551
 #, c-format
 msgid "%s: no current jobs"
 msgstr "%s: no current jobs"
 
-#: jobs.c:3571
+#: jobs.c:3558
 #, c-format
 msgid "%s: job has terminated"
 msgstr "%s: job has terminated"
 
-#: jobs.c:3580
+#: jobs.c:3567
 #, c-format
 msgid "%s: job %d already in background"
 msgstr "%s: job %d already in background"
 
-#: jobs.c:3806
+#: jobs.c:3793
 msgid "waitchld: turning on WNOHANG to avoid indefinite block"
 msgstr "waitchld: turning on WNOHANG to avoid indefinite block"
 
-#: jobs.c:4320
+#: jobs.c:4307
 #, c-format
 msgid "%s: line %d: "
 msgstr "%s: line %d: "
 
-#: jobs.c:4334 nojobs.c:919
+#: jobs.c:4321 nojobs.c:921
 #, c-format
 msgid " (core dumped)"
 msgstr " (core dumped)"
 
-#: jobs.c:4346 jobs.c:4359
+#: jobs.c:4333 jobs.c:4346
 #, c-format
 msgid "(wd now: %s)\n"
 msgstr "(wd now: %s)\n"
 
-#: jobs.c:4391
+#: jobs.c:4378
 msgid "initialize_job_control: getpgrp failed"
 msgstr "initialize_job_control: getpgrp failed"
 
-#: jobs.c:4447
+#: jobs.c:4434
 msgid "initialize_job_control: no job control in background"
 msgstr "initialize_job_control: no job control in background"
 
-#: jobs.c:4463
+#: jobs.c:4450
 msgid "initialize_job_control: line discipline"
 msgstr "initialize_job_control: line discipline"
 
-#: jobs.c:4473
+#: jobs.c:4460
 msgid "initialize_job_control: setpgid"
 msgstr "initialize_job_control: setpgid"
 
-#: jobs.c:4494 jobs.c:4503
+#: jobs.c:4481 jobs.c:4490
 #, c-format
 msgid "cannot set terminal process group (%d)"
 msgstr "cannot set terminal process group (%d)"
 
-#: jobs.c:4508
+#: jobs.c:4495
 msgid "no job control in this shell"
 msgstr "no job control in this shell"
 
-#: lib/malloc/malloc.c:353
+#: lib/malloc/malloc.c:367
 #, c-format
 msgid "malloc: failed assertion: %s\n"
 msgstr "malloc: failed assertion: %s\n"
 
-#: lib/malloc/malloc.c:369
+#: lib/malloc/malloc.c:383
 #, c-format
 msgid ""
 "\r\n"
@@ -1369,47 +1379,47 @@ msgstr ""
 "\r\n"
 "malloc: %s:%d: assertion botched\r\n"
 
-#: lib/malloc/malloc.c:370 lib/malloc/malloc.c:933
+#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941
 msgid "unknown"
 msgstr "unknown"
 
-#: lib/malloc/malloc.c:882
+#: lib/malloc/malloc.c:892
 msgid "malloc: block on free list clobbered"
 msgstr "malloc: block on free list clobbered"
 
-#: lib/malloc/malloc.c:972
+#: lib/malloc/malloc.c:980
 msgid "free: called with already freed block argument"
 msgstr "free: called with already freed block argument"
 
-#: lib/malloc/malloc.c:975
+#: lib/malloc/malloc.c:983
 msgid "free: called with unallocated block argument"
 msgstr "free: called with unallocated block argument"
 
-#: lib/malloc/malloc.c:994
+#: lib/malloc/malloc.c:1001
 msgid "free: underflow detected; mh_nbytes out of range"
 msgstr "free: underflow detected; mh_nbytes out of range"
 
-#: lib/malloc/malloc.c:1001
+#: lib/malloc/malloc.c:1007
 msgid "free: underflow detected; magic8 corrupted"
 msgstr "free: underflow detected; magic8 corrupted"
 
-#: lib/malloc/malloc.c:1009
+#: lib/malloc/malloc.c:1014
 msgid "free: start and end chunk sizes differ"
 msgstr "free: start and end chunk sizes differ"
 
-#: lib/malloc/malloc.c:1119
+#: lib/malloc/malloc.c:1176
 msgid "realloc: called with unallocated block argument"
 msgstr "realloc: called with unallocated block argument"
 
-#: lib/malloc/malloc.c:1134
+#: lib/malloc/malloc.c:1191
 msgid "realloc: underflow detected; mh_nbytes out of range"
 msgstr "realloc: underflow detected; mh_nbytes out of range"
 
-#: lib/malloc/malloc.c:1141
+#: lib/malloc/malloc.c:1197
 msgid "realloc: underflow detected; magic8 corrupted"
 msgstr "realloc: underflow detected; magic8 corrupted"
 
-#: lib/malloc/malloc.c:1150
+#: lib/malloc/malloc.c:1205
 msgid "realloc: start and end chunk sizes differ"
 msgstr "realloc: start and end chunk sizes differ"
 
@@ -1451,22 +1461,22 @@ msgstr "%s: bad network path specification"
 msgid "network operations not supported"
 msgstr "network operations not supported"
 
-#: locale.c:217
+#: locale.c:219
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s)"
 msgstr "setlocale: LC_ALL: cannot change locale (%s)"
 
-#: locale.c:219
+#: locale.c:221
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s): %s"
 msgstr "setlocale: LC_ALL: cannot change locale (%s): %s"
 
-#: locale.c:292
+#: locale.c:294
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s)"
 msgstr "setlocale: %s: cannot change locale (%s)"
 
-#: locale.c:294
+#: locale.c:296
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s): %s"
 msgstr "setlocale: %s: cannot change locale (%s): %s"
@@ -1484,35 +1494,35 @@ msgstr "You have new mail in $_"
 msgid "The mail in %s has been read\n"
 msgstr "The mail in %s has been read\n"
 
-#: make_cmd.c:317
+#: make_cmd.c:314
 msgid "syntax error: arithmetic expression required"
 msgstr "syntax error: arithmetic expression required"
 
-#: make_cmd.c:319
+#: make_cmd.c:316
 msgid "syntax error: `;' unexpected"
 msgstr "syntax error: ‘;’ unexpected"
 
-#: make_cmd.c:320
+#: make_cmd.c:317
 #, c-format
 msgid "syntax error: `((%s))'"
 msgstr "syntax error: ‘((%s))’"
 
-#: make_cmd.c:572
+#: make_cmd.c:569
 #, c-format
 msgid "make_here_document: bad instruction type %d"
 msgstr "make_here_document: bad instruction type %d"
 
-#: make_cmd.c:657
+#: make_cmd.c:668
 #, c-format
 msgid "here-document at line %d delimited by end-of-file (wanted `%s')"
 msgstr "here-document at line %d delimited by end-of-file (wanted ‘%s’)"
 
-#: make_cmd.c:756
+#: make_cmd.c:769
 #, c-format
 msgid "make_redirection: redirection instruction `%d' out of range"
 msgstr "make_redirection: redirection instruction ‘%d’ out of range"
 
-#: parse.y:2393
+#: parse.y:2428
 #, c-format
 msgid ""
 "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line "
@@ -1521,103 +1531,103 @@ msgstr ""
 "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line "
 "truncated"
 
-#: parse.y:2826
+#: parse.y:2921
 msgid "maximum here-document count exceeded"
 msgstr "maximum here-document count exceeded"
 
-#: parse.y:3581 parse.y:3957 parse.y:4556
+#: parse.y:3684 parse.y:4244 parse.y:6148
 #, c-format
 msgid "unexpected EOF while looking for matching `%c'"
 msgstr "unexpected EOF while looking for matching ‘%c’"
 
-#: parse.y:4696
+#: parse.y:4452
 msgid "unexpected EOF while looking for `]]'"
 msgstr "unexpected EOF while looking for ‘]]’"
 
-#: parse.y:4701
+#: parse.y:4457
 #, c-format
 msgid "syntax error in conditional expression: unexpected token `%s'"
 msgstr "syntax error in conditional expression: unexpected token ‘%s’"
 
-#: parse.y:4705
+#: parse.y:4461
 msgid "syntax error in conditional expression"
 msgstr "syntax error in conditional expression"
 
-#: parse.y:4783
+#: parse.y:4539
 #, c-format
 msgid "unexpected token `%s', expected `)'"
 msgstr "unexpected token ‘%s’, expected ‘)’"
 
-#: parse.y:4787
+#: parse.y:4543
 msgid "expected `)'"
 msgstr "expected ‘)’"
 
-#: parse.y:4815
+#: parse.y:4571
 #, c-format
 msgid "unexpected argument `%s' to conditional unary operator"
 msgstr "unexpected argument ‘%s’ to conditional unary operator"
 
-#: parse.y:4819
+#: parse.y:4575
 msgid "unexpected argument to conditional unary operator"
 msgstr "unexpected argument to conditional unary operator"
 
-#: parse.y:4865
+#: parse.y:4621
 #, c-format
 msgid "unexpected token `%s', conditional binary operator expected"
 msgstr "unexpected token ‘%s’, conditional binary operator expected"
 
-#: parse.y:4869
+#: parse.y:4625
 msgid "conditional binary operator expected"
 msgstr "conditional binary operator expected"
 
-#: parse.y:4891
+#: parse.y:4647
 #, c-format
 msgid "unexpected argument `%s' to conditional binary operator"
 msgstr "unexpected argument ‘%s’ to conditional binary operator"
 
-#: parse.y:4895
+#: parse.y:4651
 msgid "unexpected argument to conditional binary operator"
 msgstr "unexpected argument to conditional binary operator"
 
-#: parse.y:4906
+#: parse.y:4662
 #, c-format
 msgid "unexpected token `%c' in conditional command"
 msgstr "unexpected token ‘%c’ in conditional command"
 
-#: parse.y:4909
+#: parse.y:4665
 #, c-format
 msgid "unexpected token `%s' in conditional command"
 msgstr "unexpected token ‘%s’ in conditional command"
 
-#: parse.y:4913
+#: parse.y:4669
 #, c-format
 msgid "unexpected token %d in conditional command"
 msgstr "unexpected token %d in conditional command"
 
-#: parse.y:6336
+#: parse.y:6118
 #, c-format
 msgid "syntax error near unexpected token `%s'"
 msgstr "syntax error near unexpected token ‘%s’"
 
-#: parse.y:6355
+#: parse.y:6137
 #, c-format
 msgid "syntax error near `%s'"
 msgstr "syntax error near ‘%s’"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error: unexpected end of file"
 msgstr "syntax error: unexpected end of file"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error"
 msgstr "syntax error"
 
-#: parse.y:6428
+#: parse.y:6216
 #, c-format
 msgid "Use \"%s\" to leave the shell.\n"
 msgstr "Use “%s” to leave the shell.\n"
 
-#: parse.y:6602
+#: parse.y:6394
 msgid "unexpected EOF while looking for matching `)'"
 msgstr "unexpected EOF while looking for matching ‘)’"
 
@@ -1655,94 +1665,94 @@ msgstr "xtrace_set: NULL file pointer"
 msgid "xtrace fd (%d) != fileno xtrace fp (%d)"
 msgstr "xtrace fd (%d) != fileno xtrace fp (%d)"
 
-#: print_cmd.c:1540
+#: print_cmd.c:1545
 #, c-format
 msgid "cprintf: `%c': invalid format character"
 msgstr "cprintf: ‘%c’: invalid format character"
 
-#: redir.c:149 redir.c:197
+#: redir.c:150 redir.c:198
 msgid "file descriptor out of range"
 msgstr "file descriptor out of range"
 
-#: redir.c:204
+#: redir.c:205
 #, c-format
 msgid "%s: ambiguous redirect"
 msgstr "%s: ambiguous redirect"
 
-#: redir.c:208
+#: redir.c:209
 #, c-format
 msgid "%s: cannot overwrite existing file"
 msgstr "%s: cannot overwrite existing file"
 
-#: redir.c:213
+#: redir.c:214
 #, c-format
 msgid "%s: restricted: cannot redirect output"
 msgstr "%s: restricted: cannot redirect output"
 
-#: redir.c:218
+#: redir.c:219
 #, c-format
 msgid "cannot create temp file for here-document: %s"
 msgstr "cannot create temp file for here-document: %s"
 
-#: redir.c:222
+#: redir.c:223
 #, c-format
 msgid "%s: cannot assign fd to variable"
 msgstr "%s: cannot assign fd to variable"
 
-#: redir.c:649
+#: redir.c:650
 msgid "/dev/(tcp|udp)/host/port not supported without networking"
 msgstr "/dev/(tcp|udp)/host/port not supported without networking"
 
-#: redir.c:938 redir.c:1053 redir.c:1114 redir.c:1284
+#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303
 msgid "redirection error: cannot duplicate fd"
 msgstr "redirection error: cannot duplicate fd"
 
-#: shell.c:347
+#: shell.c:353
 msgid "could not find /tmp, please create!"
 msgstr "could not find /tmp, please create!"
 
-#: shell.c:351
+#: shell.c:357
 msgid "/tmp must be a valid directory name"
 msgstr "/tmp must be a valid directory name"
 
-#: shell.c:804
+#: shell.c:826
 msgid "pretty-printing mode ignored in interactive shells"
 msgstr "pretty-printing mode ignored in interactive shells"
 
-#: shell.c:948
+#: shell.c:972
 #, c-format
 msgid "%c%c: invalid option"
 msgstr "%c%c: invalid option"
 
-#: shell.c:1319
+#: shell.c:1343
 #, c-format
 msgid "cannot set uid to %d: effective uid %d"
 msgstr "cannot set uid to %d: effective uid %d"
 
-#: shell.c:1330
+#: shell.c:1354
 #, c-format
 msgid "cannot set gid to %d: effective gid %d"
 msgstr "cannot set gid to %d: effective gid %d"
 
-#: shell.c:1518
+#: shell.c:1544
 msgid "cannot start debugger; debugging mode disabled"
 msgstr "cannot start debugger; debugging mode disabled"
 
-#: shell.c:1632
+#: shell.c:1658
 #, c-format
 msgid "%s: Is a directory"
 msgstr "%s: Is a directory"
 
-#: shell.c:1881
+#: shell.c:1907
 msgid "I have no name!"
 msgstr "I have no name!"
 
-#: shell.c:2035
+#: shell.c:2061
 #, c-format
 msgid "GNU bash, version %s-(%s)\n"
 msgstr "GNU bash, version %s-(%s)\n"
 
-#: shell.c:2036
+#: shell.c:2062
 #, c-format
 msgid ""
 "Usage:\t%s [GNU long option] [option] ...\n"
@@ -1751,308 +1761,308 @@ msgstr ""
 "Usage:\t%s [GNU long option] [option] ...\n"
 "\t%s [GNU long option] [option] script-file ...\n"
 
-#: shell.c:2038
+#: shell.c:2064
 msgid "GNU long options:\n"
 msgstr "GNU long options:\n"
 
-#: shell.c:2042
+#: shell.c:2068
 msgid "Shell options:\n"
 msgstr "Shell options:\n"
 
-#: shell.c:2043
+#: shell.c:2069
 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n"
 msgstr "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n"
 
-#: shell.c:2062
+#: shell.c:2088
 #, c-format
 msgid "\t-%s or -o option\n"
 msgstr "\t-%s or -o option\n"
 
-#: shell.c:2068
+#: shell.c:2094
 #, c-format
 msgid "Type `%s -c \"help set\"' for more information about shell options.\n"
 msgstr "Type ‘%s -c “help set”’ for more information about shell options.\n"
 
-#: shell.c:2069
+#: shell.c:2095
 #, c-format
 msgid "Type `%s -c help' for more information about shell builtin commands.\n"
 msgstr "Type ‘%s -c help’ for more information about shell builtin commands.\n"
 
-#: shell.c:2070
+#: shell.c:2096
 #, c-format
 msgid "Use the `bashbug' command to report bugs.\n"
 msgstr "Use the ‘bashbug’ command to report bugs.\n"
 
-#: shell.c:2072
+#: shell.c:2098
 #, c-format
 msgid "bash home page: <http://www.gnu.org/software/bash>\n"
 msgstr "bash home page: <http://www.gnu.org/software/bash>\n"
 
-#: shell.c:2073
+#: shell.c:2099
 #, c-format
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 msgstr "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 
-#: sig.c:757
+#: sig.c:765
 #, c-format
 msgid "sigprocmask: %d: invalid operation"
 msgstr "sigprocmask: %d: invalid operation"
 
-#: siglist.c:47
+#: siglist.c:48
 msgid "Bogus signal"
 msgstr "Bogus signal"
 
-#: siglist.c:50
+#: siglist.c:51
 msgid "Hangup"
 msgstr "Hangup"
 
-#: siglist.c:54
+#: siglist.c:55
 msgid "Interrupt"
 msgstr "Interrupt"
 
-#: siglist.c:58
+#: siglist.c:59
 msgid "Quit"
 msgstr "Quit"
 
-#: siglist.c:62
+#: siglist.c:63
 msgid "Illegal instruction"
 msgstr "Illegal instruction"
 
-#: siglist.c:66
+#: siglist.c:67
 msgid "BPT trace/trap"
 msgstr "BPT trace/trap"
 
-#: siglist.c:74
+#: siglist.c:75
 msgid "ABORT instruction"
 msgstr "ABORT instruction"
 
-#: siglist.c:78
+#: siglist.c:79
 msgid "EMT instruction"
 msgstr "EMT instruction"
 
-#: siglist.c:82
+#: siglist.c:83
 msgid "Floating point exception"
 msgstr "Floating point exception"
 
-#: siglist.c:86
+#: siglist.c:87
 msgid "Killed"
 msgstr "Killed"
 
-#: siglist.c:90
+#: siglist.c:91
 msgid "Bus error"
 msgstr "Bus error"
 
-#: siglist.c:94
+#: siglist.c:95
 msgid "Segmentation fault"
 msgstr "Segmentation fault"
 
-#: siglist.c:98
+#: siglist.c:99
 msgid "Bad system call"
 msgstr "Bad system call"
 
-#: siglist.c:102
+#: siglist.c:103
 msgid "Broken pipe"
 msgstr "Broken pipe"
 
-#: siglist.c:106
+#: siglist.c:107
 msgid "Alarm clock"
 msgstr "Alarm clock"
 
-#: siglist.c:110
+#: siglist.c:111
 msgid "Terminated"
 msgstr "Terminated"
 
-#: siglist.c:114
+#: siglist.c:115
 msgid "Urgent IO condition"
 msgstr "Urgent IO condition"
 
-#: siglist.c:118
+#: siglist.c:119
 msgid "Stopped (signal)"
 msgstr "Stopped (signal)"
 
-#: siglist.c:126
+#: siglist.c:127
 msgid "Continue"
 msgstr "Continue"
 
-#: siglist.c:134
+#: siglist.c:135
 msgid "Child death or stop"
 msgstr "Child death or stop"
 
-#: siglist.c:138
+#: siglist.c:139
 msgid "Stopped (tty input)"
 msgstr "Stopped (tty input)"
 
-#: siglist.c:142
+#: siglist.c:143
 msgid "Stopped (tty output)"
 msgstr "Stopped (tty output)"
 
-#: siglist.c:146
+#: siglist.c:147
 msgid "I/O ready"
 msgstr "I/O ready"
 
-#: siglist.c:150
+#: siglist.c:151
 msgid "CPU limit"
 msgstr "CPU limit"
 
-#: siglist.c:154
+#: siglist.c:155
 msgid "File limit"
 msgstr "File limit"
 
-#: siglist.c:158
+#: siglist.c:159
 msgid "Alarm (virtual)"
 msgstr "Alarm (virtual)"
 
-#: siglist.c:162
+#: siglist.c:163
 msgid "Alarm (profile)"
 msgstr "Alarm (profile)"
 
-#: siglist.c:166
+#: siglist.c:167
 msgid "Window changed"
 msgstr "Window changed"
 
-#: siglist.c:170
+#: siglist.c:171
 msgid "Record lock"
 msgstr "Record lock"
 
-#: siglist.c:174
+#: siglist.c:175
 msgid "User signal 1"
 msgstr "User signal 1"
 
-#: siglist.c:178
+#: siglist.c:179
 msgid "User signal 2"
 msgstr "User signal 2"
 
-#: siglist.c:182
+#: siglist.c:183
 msgid "HFT input data pending"
 msgstr "HFT input data pending"
 
-#: siglist.c:186
+#: siglist.c:187
 msgid "power failure imminent"
 msgstr "power failure imminent"
 
-#: siglist.c:190
+#: siglist.c:191
 msgid "system crash imminent"
 msgstr "system crash imminent"
 
-#: siglist.c:194
+#: siglist.c:195
 msgid "migrate process to another CPU"
 msgstr "migrate process to another CPU"
 
-#: siglist.c:198
+#: siglist.c:199
 msgid "programming error"
 msgstr "programming error"
 
-#: siglist.c:202
+#: siglist.c:203
 msgid "HFT monitor mode granted"
 msgstr "HFT monitor mode granted"
 
-#: siglist.c:206
+#: siglist.c:207
 msgid "HFT monitor mode retracted"
 msgstr "HFT monitor mode retracted"
 
-#: siglist.c:210
+#: siglist.c:211
 msgid "HFT sound sequence has completed"
 msgstr "HFT sound sequence has completed"
 
-#: siglist.c:214
+#: siglist.c:215
 msgid "Information request"
 msgstr "Information request"
 
-#: siglist.c:222 siglist.c:224
+#: siglist.c:223 siglist.c:225
 #, c-format
 msgid "Unknown Signal #%d"
 msgstr "Unknown Signal #%d"
 
-#: subst.c:1476 subst.c:1666
+#: subst.c:1480 subst.c:1670
 #, c-format
 msgid "bad substitution: no closing `%s' in %s"
 msgstr "bad substitution: no closing ‘%s’ in %s"
 
-#: subst.c:3281
+#: subst.c:3307
 #, c-format
 msgid "%s: cannot assign list to array member"
 msgstr "%s: cannot assign list to array member"
 
-#: subst.c:5910 subst.c:5926
+#: subst.c:6048 subst.c:6064
 msgid "cannot make pipe for process substitution"
 msgstr "cannot make pipe for process substitution"
 
-#: subst.c:5985
+#: subst.c:6124
 msgid "cannot make child for process substitution"
 msgstr "cannot make child for process substitution"
 
-#: subst.c:6059
+#: subst.c:6198
 #, c-format
 msgid "cannot open named pipe %s for reading"
 msgstr "cannot open named pipe %s for reading"
 
-#: subst.c:6061
+#: subst.c:6200
 #, c-format
 msgid "cannot open named pipe %s for writing"
 msgstr "cannot open named pipe %s for writing"
 
-#: subst.c:6084
+#: subst.c:6223
 #, c-format
 msgid "cannot duplicate named pipe %s as fd %d"
 msgstr "cannot duplicate named pipe %s as fd %d"
 
-#: subst.c:6213
+#: subst.c:6370
 msgid "command substitution: ignored null byte in input"
 msgstr "command substitution: ignored null byte in input"
 
-#: subst.c:6353
+#: subst.c:6533
 msgid "cannot make pipe for command substitution"
 msgstr "cannot make pipe for command substitution"
 
-#: subst.c:6397
+#: subst.c:6580
 msgid "cannot make child for command substitution"
 msgstr "cannot make child for command substitution"
 
-#: subst.c:6423
+#: subst.c:6613
 msgid "command_substitute: cannot duplicate pipe as fd 1"
 msgstr "command_substitute: cannot duplicate pipe as fd 1"
 
-#: subst.c:6883 subst.c:9952
+#: subst.c:7082 subst.c:10252
 #, c-format
 msgid "%s: invalid variable name for name reference"
 msgstr "%s: invalid variable name for name reference"
 
-#: subst.c:6979 subst.c:6997 subst.c:7169
+#: subst.c:7178 subst.c:7196 subst.c:7369
 #, c-format
 msgid "%s: invalid indirect expansion"
 msgstr "%s: invalid indirect expansion"
 
-#: subst.c:7013 subst.c:7177
+#: subst.c:7212 subst.c:7377
 #, c-format
 msgid "%s: invalid variable name"
 msgstr "%s: invalid variable name"
 
-#: subst.c:7256
+#: subst.c:7478
 #, c-format
 msgid "%s: parameter not set"
 msgstr "%s: parameter not set"
 
-#: subst.c:7258
+#: subst.c:7480
 #, c-format
 msgid "%s: parameter null or not set"
 msgstr "%s: parameter null or not set"
 
-#: subst.c:7503 subst.c:7518
+#: subst.c:7727 subst.c:7742
 #, c-format
 msgid "%s: substring expression < 0"
 msgstr "%s: substring expression < 0"
 
-#: subst.c:9281 subst.c:9302
+#: subst.c:9560 subst.c:9587
 #, c-format
 msgid "%s: bad substitution"
 msgstr "%s: bad substitution"
 
-#: subst.c:9390
+#: subst.c:9678
 #, c-format
 msgid "$%s: cannot assign in this way"
 msgstr "$%s: cannot assign in this way"
 
-#: subst.c:9814
+#: subst.c:10111
 msgid ""
 "future versions of the shell will force evaluation as an arithmetic "
 "substitution"
@@ -2060,12 +2070,12 @@ msgstr ""
 "future versions of the shell will force evaluation as an arithmetic "
 "substitution"
 
-#: subst.c:10367
+#: subst.c:10795
 #, c-format
 msgid "bad substitution: no closing \"`\" in %s"
 msgstr "bad substitution: no closing “`” in %s"
 
-#: subst.c:11434
+#: subst.c:11874
 #, c-format
 msgid "no match: %s"
 msgstr "no match: %s"
@@ -2088,21 +2098,21 @@ msgstr "‘)’ expected"
 msgid "`)' expected, found %s"
 msgstr "‘)’ expected, found %s"
 
-#: test.c:466 test.c:799
+#: test.c:469 test.c:814
 #, c-format
 msgid "%s: binary operator expected"
 msgstr "%s: binary operator expected"
 
-#: test.c:756 test.c:759
+#: test.c:771 test.c:774
 #, c-format
 msgid "%s: unary operator expected"
 msgstr "%s: unary operator expected"
 
-#: test.c:881
+#: test.c:896
 msgid "missing `]'"
 msgstr "missing ‘]’"
 
-#: test.c:899
+#: test.c:914
 #, c-format
 msgid "syntax error: `%s' unexpected"
 msgstr "syntax error: ‘%s’ unexpected"
@@ -2111,100 +2121,106 @@ msgstr "syntax error: ‘%s’ unexpected"
 msgid "invalid signal number"
 msgstr "invalid signal number"
 
-#: trap.c:325
+#: trap.c:323
 #, c-format
 msgid "trap handler: maximum trap handler level exceeded (%d)"
 msgstr "trap handler: maximum trap handler level exceeded (%d)"
 
-#: trap.c:414
+#: trap.c:412
 #, c-format
 msgid "run_pending_traps: bad value in trap_list[%d]: %p"
 msgstr "run_pending_traps: bad value in trap_list[%d]: %p"
 
-#: trap.c:418
+#: trap.c:416
 #, c-format
 msgid ""
 "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
 msgstr ""
 "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
 
-#: trap.c:487
+#: trap.c:509
 #, c-format
 msgid "trap_handler: bad signal %d"
 msgstr "trap_handler: bad signal %d"
 
-#: variables.c:421
+#: variables.c:424
 #, c-format
 msgid "error importing function definition for `%s'"
 msgstr "error importing function definition for ‘%s’"
 
-#: variables.c:833
+#: variables.c:838
 #, c-format
 msgid "shell level (%d) too high, resetting to 1"
 msgstr "shell level (%d) too high, resetting to 1"
 
-#: variables.c:2674
+#: variables.c:2642
 msgid "make_local_variable: no function context at current scope"
 msgstr "make_local_variable: no function context at current scope"
 
-#: variables.c:2693
+#: variables.c:2661
 #, c-format
 msgid "%s: variable may not be assigned value"
 msgstr "%s: variable may not be assigned value"
 
-#: variables.c:3475
+#: variables.c:2818 variables.c:2874
+#, c-format
+msgid "%s: cannot inherit value from incompatible type"
+msgstr ""
+
+#: variables.c:3459
 #, c-format
 msgid "%s: assigning integer to name reference"
 msgstr "%s: assigning integer to name reference"
 
-#: variables.c:4404
+#: variables.c:4390
 msgid "all_local_variables: no function context at current scope"
 msgstr "all_local_variables: no function context at current scope"
 
-#: variables.c:4771
+#: variables.c:4757
 #, c-format
 msgid "%s has null exportstr"
 msgstr "%s has null exportstr"
 
-#: variables.c:4776 variables.c:4785
+#: variables.c:4762 variables.c:4771
 #, c-format
 msgid "invalid character %d in exportstr for %s"
 msgstr "invalid character %d in exportstr for %s"
 
-#: variables.c:4791
+#: variables.c:4777
 #, c-format
 msgid "no `=' in exportstr for %s"
 msgstr "no ‘=’ in exportstr for %s"
 
-#: variables.c:5331
+#: variables.c:5317
 msgid "pop_var_context: head of shell_variables not a function context"
 msgstr "pop_var_context: head of shell_variables not a function context"
 
-#: variables.c:5344
+#: variables.c:5330
 msgid "pop_var_context: no global_variables context"
 msgstr "pop_var_context: no global_variables context"
 
-#: variables.c:5424
+#: variables.c:5410
 msgid "pop_scope: head of shell_variables not a temporary environment scope"
 msgstr "pop_scope: head of shell_variables not a temporary environment scope"
 
-#: variables.c:6387
+#: variables.c:6400
 #, c-format
 msgid "%s: %s: cannot open as FILE"
 msgstr "%s: %s: cannot open as FILE"
 
-#: variables.c:6392
+#: variables.c:6405
 #, c-format
 msgid "%s: %s: invalid value for trace file descriptor"
 msgstr "%s: %s: invalid value for trace file descriptor"
 
-#: variables.c:6437
+#: variables.c:6450
 #, c-format
 msgid "%s: %s: compatibility value out of range"
 msgstr "%s: %s: compatibility value out of range"
 
 #: version.c:46 version2.c:46
-msgid "Copyright (C) 2020 Free Software Foundation, Inc."
+#, fuzzy
+msgid "Copyright (C) 2022 Free Software Foundation, Inc."
 msgstr "Copyright (C) 2020 Free Software Foundation, Inc."
 
 #: version.c:47 version2.c:47
@@ -2293,11 +2309,17 @@ msgid "command [-pVv] command [arg ...]"
 msgstr "command [-pVv] command [arg ...]"
 
 #: builtins.c:78
-msgid "declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]"
+#, fuzzy
+msgid ""
+"declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] "
+"[name ...]"
 msgstr "declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]"
 
 #: builtins.c:80
-msgid "typeset [-aAfFgiIlnrtux] [-p] name[=value] ..."
+#, fuzzy
+msgid ""
+"typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] "
+"[name ...]"
 msgstr "typeset [-aAfFgiIlnrtux] [-p] name[=value] ..."
 
 #: builtins.c:82
@@ -2397,7 +2419,8 @@ msgid "return [n]"
 msgstr "return [n]"
 
 #: builtins.c:142
-msgid "set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]"
+#, fuzzy
+msgid "set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]"
 msgstr "set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]"
 
 #: builtins.c:144
@@ -2445,7 +2468,8 @@ msgid "type [-afptP] name [name ...]"
 msgstr "type [-afptP] name [name ...]"
 
 #: builtins.c:171
-msgid "ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]"
+#, fuzzy
+msgid "ulimit [-SHabcdefiklmnpqrstuvxPRT] [limit]"
 msgstr "ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]"
 
 #: builtins.c:174
@@ -2489,11 +2513,13 @@ msgstr ""
 "COMMANDS; ] fi"
 
 #: builtins.c:196
-msgid "while COMMANDS; do COMMANDS; done"
+#, fuzzy
+msgid "while COMMANDS; do COMMANDS-2; done"
 msgstr "while COMMANDS; do COMMANDS; done"
 
 #: builtins.c:198
-msgid "until COMMANDS; do COMMANDS; done"
+#, fuzzy
+msgid "until COMMANDS; do COMMANDS-2; done"
 msgstr "until COMMANDS; do COMMANDS; done"
 
 #: builtins.c:200
@@ -3873,6 +3899,7 @@ msgstr ""
 "    If the last ARG evaluates to 0, let returns 1; let returns 0 otherwise."
 
 #: builtins.c:994
+#, fuzzy
 msgid ""
 "Read a line from the standard input and split it into fields.\n"
 "    \n"
@@ -3883,7 +3910,9 @@ msgid ""
 "    word to the second NAME, and so on, with any leftover words assigned to\n"
 "    the last NAME.  Only the characters found in $IFS are recognized as "
 "word\n"
-"    delimiters.\n"
+"    delimiters. By default, the backslash character escapes delimiter "
+"characters\n"
+"    and newline.\n"
 "    \n"
 "    If no NAMEs are supplied, the line read is stored in the REPLY "
 "variable.\n"
@@ -3972,7 +4001,7 @@ msgstr ""
 "occurs,\n"
 "    or an invalid file descriptor is supplied as the argument to -u."
 
-#: builtins.c:1041
+#: builtins.c:1042
 msgid ""
 "Return from a shell function.\n"
 "    \n"
@@ -3992,7 +4021,7 @@ msgstr ""
 "    Exit Status:\n"
 "    Returns N, or failure if the shell is not executing a function or script."
 
-#: builtins.c:1054
+#: builtins.c:1055
 msgid ""
 "Set or unset values of shell options and positional parameters.\n"
 "    \n"
@@ -4160,7 +4189,7 @@ msgstr ""
 "    Exit Status:\n"
 "    Returns success unless an invalid option is given."
 
-#: builtins.c:1139
+#: builtins.c:1140
 msgid ""
 "Unset values and attributes of shell variables and functions.\n"
 "    \n"
@@ -4200,7 +4229,7 @@ msgstr ""
 "    Exit Status:\n"
 "    Returns success unless an invalid option is given or a NAME is read-only."
 
-#: builtins.c:1161
+#: builtins.c:1162
 msgid ""
 "Set export attribute for shell variables.\n"
 "    \n"
@@ -4234,7 +4263,7 @@ msgstr ""
 "    Exit Status:\n"
 "    Returns success unless an invalid option is given or NAME is invalid."
 
-#: builtins.c:1180
+#: builtins.c:1181
 msgid ""
 "Mark shell variables as unchangeable.\n"
 "    \n"
@@ -4272,7 +4301,7 @@ msgstr ""
 "    Exit Status:\n"
 "    Returns success unless an invalid option is given or NAME is invalid."
 
-#: builtins.c:1202
+#: builtins.c:1203
 msgid ""
 "Shift positional parameters.\n"
 "    \n"
@@ -4290,7 +4319,7 @@ msgstr ""
 "    Exit Status:\n"
 "    Returns success unless N is negative or greater than $#."
 
-#: builtins.c:1214 builtins.c:1229
+#: builtins.c:1215 builtins.c:1230
 msgid ""
 "Execute commands from a file in the current shell.\n"
 "    \n"
@@ -4314,7 +4343,7 @@ msgstr ""
 "    Returns the status of the last command executed in FILENAME; fails if\n"
 "    FILENAME cannot be read."
 
-#: builtins.c:1245
+#: builtins.c:1246
 msgid ""
 "Suspend shell execution.\n"
 "    \n"
@@ -4338,7 +4367,7 @@ msgstr ""
 "    Exit Status:\n"
 "    Returns success unless job control is not enabled or an error occurs."
 
-#: builtins.c:1261
+#: builtins.c:1262
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -4500,7 +4529,7 @@ msgstr ""
 "    Returns success if EXPR evaluates to true; fails if EXPR evaluates to\n"
 "    false or an invalid argument is given."
 
-#: builtins.c:1343
+#: builtins.c:1344
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -4512,7 +4541,7 @@ msgstr ""
 "    This is a synonym for the “test” builtin, but the last argument must\n"
 "    be a literal ‘]’, to match the opening ‘[’."
 
-#: builtins.c:1352
+#: builtins.c:1353
 msgid ""
 "Display process times.\n"
 "    \n"
@@ -4532,7 +4561,7 @@ msgstr ""
 "    Exit Status:\n"
 "    Always succeeds."
 
-#: builtins.c:1364
+#: builtins.c:1365
 msgid ""
 "Trap signals and other events.\n"
 "    \n"
@@ -4616,7 +4645,7 @@ msgstr ""
 "    Returns success unless a SIGSPEC is invalid or an invalid option is "
 "given."
 
-#: builtins.c:1400
+#: builtins.c:1401
 msgid ""
 "Display information about command type.\n"
 "    \n"
@@ -4672,7 +4701,7 @@ msgstr ""
 "    Returns success if all of the NAMEs are found; fails if any are not "
 "found."
 
-#: builtins.c:1431
+#: builtins.c:1432
 msgid ""
 "Modify shell resource limits.\n"
 "    \n"
@@ -4768,7 +4797,7 @@ msgstr ""
 "    Exit Status:\n"
 "    Returns success unless an invalid option is supplied or an error occurs."
 
-#: builtins.c:1482
+#: builtins.c:1483
 msgid ""
 "Display or set file mode mask.\n"
 "    \n"
@@ -4800,7 +4829,7 @@ msgstr ""
 "    Exit Status:\n"
 "    Returns success unless MODE is invalid or an invalid option is given."
 
-#: builtins.c:1502
+#: builtins.c:1503
 msgid ""
 "Wait for job completion and return exit status.\n"
 "    \n"
@@ -4860,7 +4889,7 @@ msgstr ""
 "    option is given, or if -n is supplied and the shell has no unwaited-for\n"
 "    children."
 
-#: builtins.c:1533
+#: builtins.c:1534
 msgid ""
 "Wait for process completion and return exit status.\n"
 "    \n"
@@ -4886,7 +4915,7 @@ msgstr ""
 "invalid\n"
 "    option is given."
 
-#: builtins.c:1548
+#: builtins.c:1549
 msgid ""
 "Execute commands for each member in a list.\n"
 "    \n"
@@ -4908,7 +4937,7 @@ msgstr ""
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 
-#: builtins.c:1562
+#: builtins.c:1563
 msgid ""
 "Arithmetic for loop.\n"
 "    \n"
@@ -4938,7 +4967,7 @@ msgstr ""
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 
-#: builtins.c:1580
+#: builtins.c:1581
 msgid ""
 "Select words from a list and execute commands.\n"
 "    \n"
@@ -4974,7 +5003,7 @@ msgstr ""
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 
-#: builtins.c:1601
+#: builtins.c:1602
 msgid ""
 "Report time consumed by pipeline's execution.\n"
 "    \n"
@@ -5002,7 +5031,7 @@ msgstr ""
 "    Exit Status:\n"
 "    The return status is the return status of PIPELINE."
 
-#: builtins.c:1618
+#: builtins.c:1619
 msgid ""
 "Execute commands based on pattern matching.\n"
 "    \n"
@@ -5020,7 +5049,7 @@ msgstr ""
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 
-#: builtins.c:1630
+#: builtins.c:1631
 msgid ""
 "Execute commands based on conditional.\n"
 "    \n"
@@ -5058,12 +5087,14 @@ msgstr ""
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 
-#: builtins.c:1647
+#: builtins.c:1648
+#, fuzzy
 msgid ""
 "Execute commands as long as a test succeeds.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `while' COMMANDS has an exit status of zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS "
+"has\n"
+"    an exit status of zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
@@ -5076,12 +5107,14 @@ msgstr ""
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 
-#: builtins.c:1659
+#: builtins.c:1660
+#, fuzzy
 msgid ""
 "Execute commands as long as a test does not succeed.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `until' COMMANDS has an exit status which is not zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS "
+"has\n"
+"    an exit status which is not zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
@@ -5094,7 +5127,7 @@ msgstr ""
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 
-#: builtins.c:1671
+#: builtins.c:1672
 msgid ""
 "Create a coprocess named NAME.\n"
 "    \n"
@@ -5116,7 +5149,7 @@ msgstr ""
 "    Exit Status:\n"
 "    The coproc command returns an exit status of 0."
 
-#: builtins.c:1685
+#: builtins.c:1686
 msgid ""
 "Define shell function.\n"
 "    \n"
@@ -5140,7 +5173,7 @@ msgstr ""
 "    Exit Status:\n"
 "    Returns success unless NAME is readonly."
 
-#: builtins.c:1699
+#: builtins.c:1700
 msgid ""
 "Group commands as a unit.\n"
 "    \n"
@@ -5158,7 +5191,7 @@ msgstr ""
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 
-#: builtins.c:1711
+#: builtins.c:1712
 msgid ""
 "Resume job in foreground.\n"
 "    \n"
@@ -5182,7 +5215,7 @@ msgstr ""
 "    Exit Status:\n"
 "    Returns the status of the resumed job."
 
-#: builtins.c:1726
+#: builtins.c:1727
 msgid ""
 "Evaluate arithmetic expression.\n"
 "    \n"
@@ -5200,7 +5233,7 @@ msgstr ""
 "    Exit Status:\n"
 "    Returns 1 if EXPRESSION evaluates to 0; returns 0 otherwise."
 
-#: builtins.c:1738
+#: builtins.c:1739
 msgid ""
 "Execute conditional command.\n"
 "    \n"
@@ -5252,7 +5285,7 @@ msgstr ""
 "    Exit Status:\n"
 "    0 or 1 depending on value of EXPRESSION."
 
-#: builtins.c:1764
+#: builtins.c:1765
 msgid ""
 "Common shell variable names and usage.\n"
 "    \n"
@@ -5356,7 +5389,7 @@ msgstr ""
 "    HISTIGNORE\tA colon-separated list of patterns used to decide which\n"
 "    \t\tcommands should be saved on the history list.\n"
 
-#: builtins.c:1821
+#: builtins.c:1822
 msgid ""
 "Add directories to stack.\n"
 "    \n"
@@ -5414,7 +5447,7 @@ msgstr ""
 "    Returns success unless an invalid argument is supplied or the directory\n"
 "    change fails."
 
-#: builtins.c:1855
+#: builtins.c:1856
 msgid ""
 "Remove directories from stack.\n"
 "    \n"
@@ -5464,7 +5497,7 @@ msgstr ""
 "    Returns success unless an invalid argument is supplied or the directory\n"
 "    change fails."
 
-#: builtins.c:1885
+#: builtins.c:1886
 msgid ""
 "Display directory stack.\n"
 "    \n"
@@ -5518,7 +5551,7 @@ msgstr ""
 "    Exit Status:\n"
 "    Returns success unless an invalid option is supplied or an error occurs."
 
-#: builtins.c:1916
+#: builtins.c:1917
 msgid ""
 "Set and unset shell options.\n"
 "    \n"
@@ -5554,7 +5587,8 @@ msgstr ""
 "    Returns success if OPTNAME is enabled; fails if an invalid option is\n"
 "    given or OPTNAME is disabled."
 
-#: builtins.c:1937
+#: builtins.c:1938
+#, fuzzy
 msgid ""
 "Formats and prints ARGUMENTS under control of the FORMAT.\n"
 "    \n"
@@ -5577,6 +5611,8 @@ msgid ""
 "    \n"
 "      %b\texpand backslash escape sequences in the corresponding argument\n"
 "      %q\tquote the argument in a way that can be reused as shell input\n"
+"      %Q\tlike %q, but apply any precision to the unquoted argument before\n"
+"    \t\tquoting\n"
 "      %(fmt)T\toutput the date-time string resulting from using FMT as a "
 "format\n"
 "    \t        string for strftime(3)\n"
@@ -5628,7 +5664,7 @@ msgstr ""
 "assignment\n"
 "    error occurs."
 
-#: builtins.c:1971
+#: builtins.c:1974
 msgid ""
 "Specify how arguments are to be completed by Readline.\n"
 "    \n"
@@ -5686,7 +5722,7 @@ msgstr ""
 "    Exit Status:\n"
 "    Returns success unless an invalid option is supplied or an error occurs."
 
-#: builtins.c:2001
+#: builtins.c:2004
 msgid ""
 "Display possible completions depending on the options.\n"
 "    \n"
@@ -5708,7 +5744,7 @@ msgstr ""
 "    Exit Status:\n"
 "    Returns success unless an invalid option is supplied or an error occurs."
 
-#: builtins.c:2016
+#: builtins.c:2019
 msgid ""
 "Modify or display completion options.\n"
 "    \n"
@@ -5768,7 +5804,7 @@ msgstr ""
 "    Returns success unless an invalid option is supplied or NAME does not\n"
 "    have a completion specification defined."
 
-#: builtins.c:2047
+#: builtins.c:2050
 msgid ""
 "Read lines from the standard input into an indexed array variable.\n"
 "    \n"
@@ -5848,7 +5884,7 @@ msgstr ""
 "or\n"
 "    not an indexed array."
 
-#: builtins.c:2083
+#: builtins.c:2086
 msgid ""
 "Read lines from a file into an array variable.\n"
 "    \n"
@@ -5857,3 +5893,7 @@ msgstr ""
 "Read lines from a file into an array variable.\n"
 "    \n"
 "    A synonym for ‘mapfile’."
+
+#, c-format
+#~ msgid "%s: invalid associative array key"
+#~ msgstr "%s: invalid associative array key"
index 586b9ef926f42405f88cb81a3498d181c774ef52..b0227e55d7238f512891490871f24fc7fc2c9cef 100644 (file)
Binary files a/po/eo.gmo and b/po/eo.gmo differ
index 65268c3cc2b008ea9270e7443c0f959d273792c9..1e781094e5633c8a83206d0e7ff8316709045c6f 100644 (file)
--- a/po/eo.po
+++ b/po/eo.po
@@ -30,7 +30,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GNU bash 5.1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-11-28 12:51-0500\n"
+"POT-Creation-Date: 2022-01-11 14:50-0500\n"
 "PO-Revision-Date: 2020-12-13 10:53+0700\n"
 "Last-Translator: Sergio Pokrovskij <sergio.pokrovskij@gmail.com>\n"
 "Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n"
@@ -45,58 +45,53 @@ msgstr ""
 msgid "bad array subscript"
 msgstr "Misa tabel-indico"
 
-#: arrayfunc.c:421 builtins/declare.def:638 variables.c:2274 variables.c:2300
-#: variables.c:3133
+#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268
+#: variables.c:3101
 #, c-format
 msgid "%s: removing nameref attribute"
 msgstr "%s: ne plu nomreferenco (la atributo nameref forigitas)"
 
-#: arrayfunc.c:446 builtins/declare.def:851
+#: arrayfunc.c:496 builtins/declare.def:868
 #, c-format
 msgid "%s: cannot convert indexed to associative array"
 msgstr "%s: Maleblas konverti entjerindican tabelon en asocitabelon"
 
-#: arrayfunc.c:700
-#, c-format
-msgid "%s: invalid associative array key"
-msgstr "%s: Misa asocitabela ŝlosilo"
-
-#: arrayfunc.c:702
+#: arrayfunc.c:777
 #, c-format
 msgid "%s: cannot assign to non-numeric index"
 msgstr "%s: Valorizato havu nombran indicon"
 
-#: arrayfunc.c:747
+#: arrayfunc.c:822
 #, c-format
 msgid "%s: %s: must use subscript when assigning associative array"
 msgstr "%s: %s: Valorizante per asocitabelo uzu indicon"
 
-#: bashhist.c:452
+#: bashhist.c:455
 #, c-format
 msgid "%s: cannot create: %s"
 msgstr "%s: Ne prosperis krei: %s"
 
 # XXX: internal_error
-#: bashline.c:4310
+#: bashline.c:4479
 msgid "bash_execute_unix_command: cannot find keymap for command"
 msgstr "bash_execute_unix_command: Mankas klavartabelo por komando"
 
-#: bashline.c:4459
+#: bashline.c:4637
 #, c-format
 msgid "%s: first non-whitespace character is not `\"'"
 msgstr "%s: La unua ne-blankspaca signo ne estas „\"‟"
 
-#: bashline.c:4488
+#: bashline.c:4666
 #, c-format
 msgid "no closing `%c' in %s"
 msgstr "Mankas ferma „%c‟ en %s"
 
-#: bashline.c:4519
+#: bashline.c:4697
 #, c-format
 msgid "%s: missing colon separator"
 msgstr "%s: Mankas disiga dupunkto"
 
-#: bashline.c:4555
+#: bashline.c:4733
 #, c-format
 msgid "`%s': cannot unbind in command keymap"
 msgstr "«%s»: Ne eblas malligi en komandaj klavaĵoj"
@@ -119,7 +114,7 @@ msgstr "vinkulmalvolvo: Fiaskis memorhavigo por %u elementoj"
 msgid "brace expansion: failed to allocate memory for `%s'"
 msgstr "vinkulmalvolvo: Fiaskis memorhavigo por %s"
 
-#: builtins/alias.def:131 variables.c:1844
+#: builtins/alias.def:131 variables.c:1817
 #, c-format
 msgid "`%s': invalid alias name"
 msgstr "%s: Maltaŭgas por uzi kiel alinomon"
@@ -192,7 +187,7 @@ msgstr ""
 msgid "HOME not set"
 msgstr "HOME malhavas valoron"
 
-#: builtins/cd.def:335 builtins/common.c:161 test.c:901
+#: builtins/cd.def:335 builtins/common.c:161 test.c:916
 msgid "too many arguments"
 msgstr "Tro multe da argumentoj"
 
@@ -219,7 +214,7 @@ msgstr "Averto: "
 msgid "%s: usage: "
 msgstr "%s: Uzmaniero: "
 
-#: builtins/common.c:193 shell.c:516 shell.c:844
+#: builtins/common.c:193 shell.c:524 shell.c:866
 #, c-format
 msgid "%s: option requires an argument"
 msgstr "%s: La opcio bezonas argumenton"
@@ -234,7 +229,7 @@ msgstr "%s: Necesas nombra argumento"
 msgid "%s: not found"
 msgstr "%s: Ne trovita"
 
-#: builtins/common.c:216 shell.c:857
+#: builtins/common.c:216 shell.c:879
 #, c-format
 msgid "%s: invalid option"
 msgstr "%s: Misa opcio"
@@ -244,7 +239,7 @@ msgstr "%s: Misa opcio"
 msgid "%s: invalid option name"
 msgstr "%s: Misa opcinomo"
 
-#: builtins/common.c:230 execute_cmd.c:2373 general.c:368 general.c:373
+#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373
 #, c-format
 msgid "`%s': not a valid identifier"
 msgstr "„%s‟ ne estas taŭga nomo"
@@ -257,7 +252,7 @@ msgstr "Misa okuma nombro"
 msgid "invalid hex number"
 msgstr "Misa 16uma nombro"
 
-#: builtins/common.c:244 expr.c:1569
+#: builtins/common.c:244 expr.c:1574
 msgid "invalid number"
 msgstr "Misa nombro"
 
@@ -271,88 +266,93 @@ msgstr "%s: Misa signalindiko"
 msgid "`%s': not a pid or valid job spec"
 msgstr "„%s‟: Nek proceznumero, nek taŭga laborindiko"
 
-#: builtins/common.c:266 error.c:510
+#: builtins/common.c:266 error.c:536
 #, c-format
 msgid "%s: readonly variable"
 msgstr "%s: Nurlega variablo"
 
-#: builtins/common.c:274
+#: builtins/common.c:273
+#, fuzzy, c-format
+msgid "%s: cannot assign"
+msgstr "%s: Malaktivigo fiaskis"
+
+#: builtins/common.c:281
 #, c-format
 msgid "%s: %s out of range"
 msgstr "%s: %s estas ekster sia variejo"
 
-#: builtins/common.c:274 builtins/common.c:276
+#: builtins/common.c:281 builtins/common.c:283
 msgid "argument"
 msgstr "argumento"
 
-#: builtins/common.c:276
+#: builtins/common.c:283
 #, c-format
 msgid "%s out of range"
 msgstr "%s estas ekster sia variejo"
 
-#: builtins/common.c:284
+#: builtins/common.c:291
 #, c-format
 msgid "%s: no such job"
 msgstr "%s: Ne estas tia laboro"
 
-#: builtins/common.c:292
+#: builtins/common.c:299
 #, c-format
 msgid "%s: no job control"
 msgstr "%s: Ĉi tiu ŝelo ne disponigas laborregadon"
 
-#: builtins/common.c:294
+#: builtins/common.c:301
 msgid "no job control"
 msgstr "Laborregado ne disponeblas"
 
-#: builtins/common.c:304
+#: builtins/common.c:311
 #, c-format
 msgid "%s: restricted"
 msgstr "%s: Limigita"
 
-#: builtins/common.c:306
+#: builtins/common.c:313
 msgid "restricted"
 msgstr "limigita"
 
-#: builtins/common.c:314
+#: builtins/common.c:321
 #, c-format
 msgid "%s: not a shell builtin"
 msgstr "„%s‟ ne estas primitiva komando ŝela"
 
-#: builtins/common.c:323
+#: builtins/common.c:330
 #, c-format
 msgid "write error: %s"
 msgstr "Eraro ĉe skribo: %s"
 
-#: builtins/common.c:331
+#: builtins/common.c:338
 #, c-format
 msgid "error setting terminal attributes: %s"
 msgstr "Eraro ĉe agordado de terminalaj atributoj: %s"
 
-#: builtins/common.c:333
+#: builtins/common.c:340
 #, c-format
 msgid "error getting terminal attributes: %s"
 msgstr "Eraro ĉe akiro de terminalaj atributoj: %s"
 
-#: builtins/common.c:635
+#: builtins/common.c:642
 #, c-format
 msgid "%s: error retrieving current directory: %s: %s\n"
 msgstr "%s: Eraro ĉe provo determini la kurantan dosierujon: %s: %s\n"
 
-#: builtins/common.c:701 builtins/common.c:703
+#: builtins/common.c:708 builtins/common.c:710
 #, c-format
 msgid "%s: ambiguous job spec"
 msgstr "%s: Ambigua laborindiko"
 
-#: builtins/common.c:964
+#: builtins/common.c:971
 msgid "help not available in this version"
 msgstr "helpilo mankas en ĉi tiu versio"
 
-#: builtins/common.c:1008 builtins/set.def:953 variables.c:3839
+#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825
 #, c-format
 msgid "%s: cannot unset: readonly %s"
 msgstr "%s: Malaktivigo fiaskis: nurlega %s"
 
-#: builtins/common.c:1013 builtins/set.def:932 variables.c:3844
+#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830
 #, c-format
 msgid "%s: cannot unset"
 msgstr "%s: Malaktivigo fiaskis"
@@ -362,108 +362,108 @@ msgstr "%s: Malaktivigo fiaskis"
 msgid "%s: invalid action name"
 msgstr "%s: Misa nomo de ago"
 
-#: builtins/complete.def:486 builtins/complete.def:634
-#: builtins/complete.def:865
+#: builtins/complete.def:486 builtins/complete.def:642
+#: builtins/complete.def:873
 #, c-format
 msgid "%s: no completion specification"
 msgstr "%s: Kompletigo ne estas specifita"
 
-#: builtins/complete.def:688
+#: builtins/complete.def:696
 msgid "warning: -F option may not work as you expect"
 msgstr "Averto: La opcio -F povas funkcii alie ol vi eble supozas"
 
-#: builtins/complete.def:690
+#: builtins/complete.def:698
 msgid "warning: -C option may not work as you expect"
 msgstr "Averto: La opcio -C povas funkcii alie ol vi eble supozas"
 
-#: builtins/complete.def:838
+#: builtins/complete.def:846
 msgid "not currently executing completion function"
 msgstr "Ni ne estas en plenumado de kompletiga funkcio"
 
-#: builtins/declare.def:134
+#: builtins/declare.def:137
 msgid "can only be used in a function"
 msgstr "Uzeblas nur ene de funkcio"
 
-#: builtins/declare.def:363 builtins/declare.def:756
+#: builtins/declare.def:437
+msgid "cannot use `-f' to make functions"
+msgstr "„-f‟ ne estas uzebla por fari funkciojn"
+
+#: builtins/declare.def:464 execute_cmd.c:6132
+#, c-format
+msgid "%s: readonly function"
+msgstr "%s: Nurlega funkcio"
+
+#: builtins/declare.def:521 builtins/declare.def:804
 #, c-format
 msgid "%s: reference variable cannot be an array"
 msgstr "%s: Referenca variablo ne povas esti tabelo"
 
-#: builtins/declare.def:374 variables.c:3385
+#: builtins/declare.def:532 variables.c:3359
 #, c-format
 msgid "%s: nameref variable self references not allowed"
 msgstr "%s: Nomreferenca variablo ne referencu sin mem"
 
-#: builtins/declare.def:379 variables.c:2104 variables.c:3304 variables.c:3312
-#: variables.c:3382
+#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286
+#: variables.c:3356
 #, c-format
 msgid "%s: circular name reference"
 msgstr "%s: Cikla nomreferenco"
 
-#: builtins/declare.def:384 builtins/declare.def:762 builtins/declare.def:773
+#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820
 #, c-format
 msgid "`%s': invalid variable name for name reference"
 msgstr "„%s“: Misa variablonomo por nomreferenco"
 
-#: builtins/declare.def:514
-msgid "cannot use `-f' to make functions"
-msgstr "„-f‟ ne estas uzebla por fari funkciojn"
-
-#: builtins/declare.def:526 execute_cmd.c:5986
-#, c-format
-msgid "%s: readonly function"
-msgstr "%s: Nurlega funkcio"
-
-#: builtins/declare.def:824
-#, c-format
-msgid "%s: quoted compound array assignment deprecated"
-msgstr "%s: Tutopa tabelvalorizo citila estas evitinda"
-
-#: builtins/declare.def:838
+#: builtins/declare.def:856
 #, c-format
 msgid "%s: cannot destroy array variables in this way"
 msgstr "%s: Ĉi tiel ne eblas neniigi tabelvariablojn"
 
-#: builtins/declare.def:845 builtins/read.def:815
+#: builtins/declare.def:862 builtins/read.def:887
 #, c-format
 msgid "%s: cannot convert associative to indexed array"
 msgstr "%s: Ne eblas konverti asocitabelon en entjerindican tabelon"
 
-#: builtins/enable.def:143 builtins/enable.def:151
+#: builtins/declare.def:891
+#, c-format
+msgid "%s: quoted compound array assignment deprecated"
+msgstr "%s: Tutopa tabelvalorizo citila estas evitinda"
+
+#: builtins/enable.def:145 builtins/enable.def:153
 msgid "dynamic loading not available"
 msgstr "Rultempa ŝargo ne disponeblas"
 
-#: builtins/enable.def:343
+#: builtins/enable.def:376
 #, c-format
 msgid "cannot open shared object %s: %s"
 msgstr "Ne malfermiĝis dinamika biblioteko %s: %s"
 
-#: builtins/enable.def:371
+#: builtins/enable.def:405
 #, c-format
 msgid "cannot find %s in shared object %s: %s"
 msgstr "Mankas %s en la dinamika biblioteko%s: %s"
 
-#: builtins/enable.def:388
+#: builtins/enable.def:422
 #, c-format
 msgid "%s: dynamic builtin already loaded"
 msgstr "%s: primitiva komando dinamika jam ŝargitas"
 
-#: builtins/enable.def:392
+#: builtins/enable.def:426
 #, c-format
 msgid "load function for %s returns failure (%d): not loaded"
 msgstr "Ŝarga funkcio por %s liveris fiaskon (%d): ne ŝargite"
 
-#: builtins/enable.def:517
+#: builtins/enable.def:551
 #, c-format
 msgid "%s: not dynamically loaded"
 msgstr "%s: Ne ŝargita dinamike"
 
-#: builtins/enable.def:543
+#: builtins/enable.def:577
 #, c-format
 msgid "%s: cannot delete: %s"
 msgstr "%s: Ne eblas forigi: %s"
 
-#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5818
+#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959
 #, c-format
 msgid "%s: is a directory"
 msgstr "%s estas dosierujo"
@@ -478,7 +478,7 @@ msgstr "%s: Ne ordinara dosiero"
 msgid "%s: file is too large"
 msgstr "%s: Tro granda dosiero"
 
-#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1647
+#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673
 #, c-format
 msgid "%s: cannot execute binary file"
 msgstr "%s: Neplenumebla duuma dosiero"
@@ -570,17 +570,18 @@ msgstr ""
 
 #: builtins/help.def:185
 #, c-format
-msgid "no help topics match `%s'.  Try `help help' or `man -k %s' or `info %s'."
+msgid ""
+"no help topics match `%s'.  Try `help help' or `man -k %s' or `info %s'."
 msgstr ""
 "Helpaĵo pri „%s‟ malestas.\n"
 "Provu «help help» aŭ «man -k %s» aŭ «info %s»."
 
-#: builtins/help.def:224
+#: builtins/help.def:223
 #, c-format
 msgid "%s: cannot open: %s"
 msgstr "%s: Fiaskis malfermo de %s"
 
-#: builtins/help.def:524
+#: builtins/help.def:523
 #, c-format
 msgid ""
 "These shell commands are defined internally.  Type `help' to see this list.\n"
@@ -599,21 +600,21 @@ msgstr ""
 "Steleto (*) tuj post nomo indikas, ke la komando estas malebligita.\n"
 "\n"
 
-#: builtins/history.def:155
+#: builtins/history.def:159
 msgid "cannot use more than one of -anrw"
 msgstr "Ne pli ol unu el -anrw estas uzebla"
 
-#: builtins/history.def:188 builtins/history.def:198 builtins/history.def:213
-#: builtins/history.def:230 builtins/history.def:242 builtins/history.def:249
+#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215
+#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247
 msgid "history position"
 msgstr "pozicio en la historio"
 
-#: builtins/history.def:340
+#: builtins/history.def:338
 #, c-format
 msgid "%s: invalid timestamp"
 msgstr "%s: Maltaŭga tempomarko"
 
-#: builtins/history.def:451
+#: builtins/history.def:449
 #, c-format
 msgid "%s: history expansion failed"
 msgstr "%s: Historia malvolvo fiaskis"
@@ -636,80 +637,80 @@ msgstr "%s: Argumento estu proceznumero aŭ laborindiko"
 msgid "Unknown error"
 msgstr "Nekonata eraro"
 
-#: builtins/let.def:97 builtins/let.def:122 expr.c:639 expr.c:657
+#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658
 msgid "expression expected"
 msgstr "Mankas esprimo"
 
-#: builtins/mapfile.def:178
+#: builtins/mapfile.def:180
 #, c-format
 msgid "%s: not an indexed array"
 msgstr "%s: ĝi ne estas entjerindica tabelo"
 
-#: builtins/mapfile.def:271 builtins/read.def:308
+#: builtins/mapfile.def:276 builtins/read.def:336
 #, c-format
 msgid "%s: invalid file descriptor specification"
 msgstr "%s: Misa indiko de dosiernumero"
 
-#: builtins/mapfile.def:279 builtins/read.def:315
+#: builtins/mapfile.def:284 builtins/read.def:343
 #, c-format
 msgid "%d: invalid file descriptor: %s"
 msgstr "%d: Misa dosiernumero: %s"
 
-#: builtins/mapfile.def:288 builtins/mapfile.def:326
+#: builtins/mapfile.def:293 builtins/mapfile.def:331
 #, c-format
 msgid "%s: invalid line count"
 msgstr "%s: Misa lininombro"
 
-#: builtins/mapfile.def:299
+#: builtins/mapfile.def:304
 #, c-format
 msgid "%s: invalid array origin"
 msgstr "%s: Misa tabelbazo"
 
 # Supozeble callback => retrovoko ??
-#: builtins/mapfile.def:316
+#: builtins/mapfile.def:321
 #, c-format
 msgid "%s: invalid callback quantum"
 msgstr "%s: Misa kvanto ĉe retrovoko"
 
-#: builtins/mapfile.def:349
+#: builtins/mapfile.def:354
 msgid "empty array variable name"
 msgstr "Mankas nomo de tabelvariablo"
 
-#: builtins/mapfile.def:370
+#: builtins/mapfile.def:375
 msgid "array variable support required"
 msgstr "necesas subteno de tabelvariabloj"
 
-#: builtins/printf.def:419
+#: builtins/printf.def:430
 #, c-format
 msgid "`%s': missing format character"
 msgstr "„%s‟: Mankas formata signo"
 
-#: builtins/printf.def:474
+#: builtins/printf.def:485
 #, c-format
 msgid "`%c': invalid time format specification"
 msgstr "%c: Misa tempoformato"
 
-#: builtins/printf.def:676
+#: builtins/printf.def:708
 #, c-format
 msgid "`%c': invalid format character"
 msgstr "„%c‟: Misa signo formata"
 
-#: builtins/printf.def:702
+#: builtins/printf.def:734
 #, c-format
 msgid "warning: %s: %s"
 msgstr "Averto: %s: %s"
 
 # XXX: internal_error
-#: builtins/printf.def:788
+#: builtins/printf.def:822
 #, c-format
 msgid "format parsing problem: %s"
 msgstr "Miso ĉe analizado de formato: %s"
 
-#: builtins/printf.def:885
+#: builtins/printf.def:919
 msgid "missing hex digit for \\x"
 msgstr "Mankas 16uma cifero por \\x"
 
-#: builtins/printf.def:900
+#: builtins/printf.def:934
 #, c-format
 msgid "missing unicode digit for \\%c"
 msgstr "Post „%c‟ mankas unikoda cifero"
@@ -751,10 +752,12 @@ msgid ""
 "    \twith its position in the stack\n"
 "    \n"
 "    Arguments:\n"
-"      +N\tDisplays the Nth entry counting from the left of the list shown by\n"
+"      +N\tDisplays the Nth entry counting from the left of the list shown "
+"by\n"
 "    \tdirs when invoked without options, starting with zero.\n"
 "    \n"
-"      -N\tDisplays the Nth entry counting from the right of the list shown by\n"
+"      -N\tDisplays the Nth entry counting from the right of the list shown "
+"by\n"
 "\tdirs when invoked without options, starting with zero."
 msgstr ""
 "Listigu la kurantan dosierujstakon. La dosierujoj trafas en\n"
@@ -862,25 +865,26 @@ msgstr ""
 "\n"
 "    Vi povas vidigi la stakon da dosierujoj per la komando „dirs‟."
 
-#: builtins/read.def:280
+#: builtins/read.def:308
 #, c-format
 msgid "%s: invalid timeout specification"
 msgstr "%s: Misa indiko de atendotempo"
 
-#: builtins/read.def:755
+#: builtins/read.def:827
 #, c-format
 msgid "read error: %d: %s"
 msgstr "Lega (read) eraro: %d: %s"
 
 #: builtins/return.def:68
 msgid "can only `return' from a function or sourced script"
-msgstr "„return‟ sencas nur en funkcio aŭ punkte vokita („.‟, „source‟) skripto"
+msgstr ""
+"„return‟ sencas nur en funkcio aŭ punkte vokita („.‟, „source‟) skripto"
 
 #: builtins/set.def:869
 msgid "cannot simultaneously unset a function and a variable"
 msgstr "Ne eblas samtempe malaktivigi funkcion kaj variablon"
 
-#: builtins/set.def:966
+#: builtins/set.def:969
 #, c-format
 msgid "%s: not an array variable"
 msgstr "%s: Ne tabela variablo"
@@ -899,11 +903,11 @@ msgstr "%s: Ne eblas eksporti"
 msgid "shift count"
 msgstr "Nombrilo de „shift‟"
 
-#: builtins/shopt.def:310
+#: builtins/shopt.def:323
 msgid "cannot set and unset shell options simultaneously"
 msgstr "Maleblas samtempe ŝalti kaj malŝalti ŝelan opcion"
 
-#: builtins/shopt.def:428
+#: builtins/shopt.def:444
 #, c-format
 msgid "%s: invalid shell option name"
 msgstr "%s: Misa nomo de ŝela opcio"
@@ -970,16 +974,16 @@ msgstr "%s: Maltaŭga argumento por limo"
 msgid "`%c': bad command"
 msgstr "„%c‟: Misa komando"
 
-#: builtins/ulimit.def:455
+#: builtins/ulimit.def:464
 #, c-format
 msgid "%s: cannot get limit: %s"
 msgstr "%s: Fiaskis provo legi limon: %s"
 
-#: builtins/ulimit.def:481
+#: builtins/ulimit.def:490
 msgid "limit"
 msgstr "limo"
 
-#: builtins/ulimit.def:493 builtins/ulimit.def:793
+#: builtins/ulimit.def:502 builtins/ulimit.def:802
 #, c-format
 msgid "%s: cannot modify limit: %s"
 msgstr "%s: Malprosperis ŝanĝi limon: %s"
@@ -1000,7 +1004,7 @@ msgstr "„%c‟: Maltaŭga simbolo por atingorajta modifilo"
 msgid "`%c': invalid symbolic mode character"
 msgstr "„%c‟: La signo ne estas simbolo de atingorajta kategorio"
 
-#: error.c:89 error.c:347 error.c:349 error.c:351
+#: error.c:89 error.c:373 error.c:375 error.c:377
 msgid " line "
 msgstr " linio "
 
@@ -1020,99 +1024,109 @@ msgstr "Ĉesigado ..."
 msgid "INFORM: "
 msgstr "INFORMO: "
 
-#: error.c:462
+#: error.c:310
+#, fuzzy, c-format
+msgid "DEBUG warning: "
+msgstr "Averto: "
+
+#: error.c:488
 msgid "unknown command error"
 msgstr "Nekonata komand-eraro"
 
-#: error.c:463
+#: error.c:489
 msgid "bad command type"
 msgstr "Misa komandotipo"
 
-#: error.c:464
+#: error.c:490
 msgid "bad connector"
 msgstr "Misa stir-operacio"
 
-#: error.c:465
+#: error.c:491
 msgid "bad jump"
 msgstr "Misa salto"
 
-#: error.c:503
+#: error.c:529
 #, c-format
 msgid "%s: unbound variable"
 msgstr "%s: Neligita variablo"
 
-#: eval.c:242
+#: eval.c:243
 msgid "\atimed out waiting for input: auto-logout\n"
 msgstr "\aTro longe sen enigo: Aŭtomata seancofino\n"
 
 # XXX: internal error:
-#: execute_cmd.c:537
+#: execute_cmd.c:555
 #, c-format
 msgid "cannot redirect standard input from /dev/null: %s"
 msgstr "Fiaskis provo nomumi la disponaĵon «/dev/null» ĉefenigujo: %s"
 
 # XXX: internal error:
-#: execute_cmd.c:1297
+#: execute_cmd.c:1317
 #, c-format
 msgid "TIMEFORMAT: `%c': invalid format character"
 msgstr "TIMEFORMAT: „%c‟: Misa formatsigno"
 
-#: execute_cmd.c:2362
+#: execute_cmd.c:2391
 #, c-format
 msgid "execute_coproc: coproc [%d:%s] still exists"
 msgstr "execute_coproc: la kunprocezo [%d:%s] ankoraŭ ekzistas"
 
-#: execute_cmd.c:2486
+#: execute_cmd.c:2524
 msgid "pipe error"
 msgstr "Eraro en dukto"
 
-#: execute_cmd.c:4793
+#: execute_cmd.c:4923
 #, c-format
 msgid "eval: maximum eval nesting level exceeded (%d)"
 msgstr "eval: La ingado de „eval“oj superis sian maksimumon (%d)"
 
-#: execute_cmd.c:4805
+#: execute_cmd.c:4935
 #, c-format
 msgid "%s: maximum source nesting level exceeded (%d)"
 msgstr "%s: La ingado de „source“oj superis sian maksimumon (%d)"
 
-#: execute_cmd.c:4913
+#: execute_cmd.c:5043
 #, c-format
 msgid "%s: maximum function nesting level exceeded (%d)"
 msgstr "%s: La ingado de funkcioj superis sian maksimumon (%d)"
 
-#: execute_cmd.c:5467
+#: execute_cmd.c:5598
 #, c-format
 msgid "%s: restricted: cannot specify `/' in command names"
 msgstr "%s: Malpermesitas uzi „/‟ en komandonomoj"
 
-#: execute_cmd.c:5574
+#: execute_cmd.c:5715
 #, c-format
 msgid "%s: command not found"
 msgstr "%s: Komando ne trovita"
 
 # XXX: internal error:
-#: execute_cmd.c:5816
+#: execute_cmd.c:5957
 #, c-format
 msgid "%s: %s"
 msgstr "%s: %s"
 
-#: execute_cmd.c:5854
+#: execute_cmd.c:5975
+#, fuzzy, c-format
+msgid "%s: cannot execute: required file not found"
+msgstr "%s: Neplenumebla duuma dosiero"
+
+#: execute_cmd.c:6000
 #, c-format
 msgid "%s: %s: bad interpreter"
 msgstr "%s: %s: Misa interpretilo"
 
-#: execute_cmd.c:5891
+#: execute_cmd.c:6037
 #, c-format
 msgid "%s: cannot execute binary file: %s"
 msgstr "%s: Neplenumebla duuma dosiero: %s"
 
-#: execute_cmd.c:5977
+#: execute_cmd.c:6123
 #, c-format
 msgid "`%s': is a special builtin"
 msgstr "„%s‟ estas primitiva komando speciala"
 
-#: execute_cmd.c:6029
+#: execute_cmd.c:6175
 #, c-format
 msgid "cannot duplicate fd %d to fd %d"
 msgstr "Ne eblas kunnomumi al dosiernumero %d la dosiernumeron %d"
@@ -1125,68 +1139,68 @@ msgstr "Tro profunda rekursio en esprimo"
 msgid "recursion stack underflow"
 msgstr "Rekursistako elĉerpita"
 
-#: expr.c:477
+#: expr.c:478
 msgid "syntax error in expression"
 msgstr "Sintaksa eraro en esprimo"
 
-#: expr.c:521
+#: expr.c:522
 msgid "attempted assignment to non-variable"
 msgstr "Provo valorizi ne-variablon"
 
-#: expr.c:530
+#: expr.c:531
 msgid "syntax error in variable assignment"
 msgstr "Sintaksa eraro en valorizo de variablo"
 
-#: expr.c:544 expr.c:911
+#: expr.c:545 expr.c:912
 msgid "division by 0"
 msgstr "Divido per 0"
 
-#: expr.c:592
+#: expr.c:593
 msgid "bug: bad expassign token"
 msgstr "CIMO: Misa operacisigno en kombinita valorizsimbolo"
 
-#: expr.c:646
+#: expr.c:647
 msgid "`:' expected for conditional expression"
 msgstr "„:‟ mankas kondiĉa esprimo"
 
-#: expr.c:972
+#: expr.c:973
 msgid "exponent less than 0"
 msgstr "Negativa eksponento"
 
-#: expr.c:1029
+#: expr.c:1030
 msgid "identifier expected after pre-increment or pre-decrement"
 msgstr "Post antaŭkremento aperu nomo de variablo"
 
-#: expr.c:1056
+#: expr.c:1057
 msgid "missing `)'"
 msgstr "Mankas „)‟"
 
-#: expr.c:1107 expr.c:1487
+#: expr.c:1108 expr.c:1492
 msgid "syntax error: operand expected"
 msgstr "Sintaksa eraro: Mankas operando"
 
-#: expr.c:1489
+#: expr.c:1494
 msgid "syntax error: invalid arithmetic operator"
 msgstr "Sintaksa eraro: Misa operacisimbolo aritmetika"
 
-#: expr.c:1513
+#: expr.c:1518
 #, c-format
 msgid "%s%s%s: %s (error token is \"%s\")"
 msgstr "%s%s%s: %s (misa simbolo estas „%s‟)"
 
-#: expr.c:1573
+#: expr.c:1578
 msgid "invalid arithmetic base"
 msgstr "Maltaŭga bazo nombrosistema"
 
-#: expr.c:1582
+#: expr.c:1587
 msgid "invalid integer constant"
 msgstr "Maltaŭga konstanto entjera"
 
-#: expr.c:1598
+#: expr.c:1603
 msgid "value too great for base"
 msgstr "Tro granda valoro por bazo de nombrosistemo"
 
-#: expr.c:1647
+#: expr.c:1652
 #, c-format
 msgid "%s: expression error\n"
 msgstr "%s: Misa esprimo\n"
@@ -1195,7 +1209,7 @@ msgstr "%s: Misa esprimo\n"
 msgid "getcwd: cannot access parent directories"
 msgstr "getwd: Ne eblas atingi patrajn dosierujojn"
 
-#: input.c:99 subst.c:6069
+#: input.c:99 subst.c:6208
 #, c-format
 msgid "cannot reset nodelay mode for fd %d"
 msgstr "Ne eblas reŝalti senprokrastan reĝimon por dosiernumero %d"
@@ -1216,172 +1230,172 @@ msgid "start_pipeline: pgrp pipe"
 msgstr "start_pipeline: procezgrupo dukto"
 
 # ZZZ: internal_warning
-#: jobs.c:906
+#: jobs.c:907
 #, c-format
 msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
 
 # ZZZ: internal_warning
-#: jobs.c:959
+#: jobs.c:960
 #, c-format
 msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
 
-#: jobs.c:1283
+#: jobs.c:1279
 #, c-format
 msgid "forked pid %d appears in running job %d"
 msgstr "Forke farita proceznumero %d aperas en rulata laboro %d"
 
-#: jobs.c:1402
+#: jobs.c:1397
 #, c-format
 msgid "deleting stopped job %d with process group %ld"
 msgstr "Haltigita laboro %d kun procezgrupo %ld estas forigata"
 
 # ifdef DEBUG ... internal_warning():
-#: jobs.c:1511
+#: jobs.c:1502
 #, c-format
 msgid "add_process: pid %5ld (%s) marked as still alive"
 msgstr "add_process: pid %5ld (%s) marked as still alive"
 
-#: jobs.c:1850
+#: jobs.c:1839
 #, c-format
 msgid "describe_pid: %ld: no such pid"
 msgstr "describe_pid: Ne estas tia proceznumero (%ld)!"
 
-#: jobs.c:1865
+#: jobs.c:1854
 #, c-format
 msgid "Signal %d"
 msgstr "Signalo %d"
 
-#: jobs.c:1879 jobs.c:1905
+#: jobs.c:1868 jobs.c:1894
 msgid "Done"
 msgstr "Farite"
 
-#: jobs.c:1884 siglist.c:122
+#: jobs.c:1873 siglist.c:123
 msgid "Stopped"
 msgstr "Haltigita"
 
-#: jobs.c:1888
+#: jobs.c:1877
 #, c-format
 msgid "Stopped(%s)"
 msgstr "Haltigita(%s)"
 
-#: jobs.c:1892
+#: jobs.c:1881
 msgid "Running"
 msgstr "Rulata"
 
-#: jobs.c:1909
+#: jobs.c:1898
 #, c-format
 msgid "Done(%d)"
 msgstr "Farite(%d)"
 
-#: jobs.c:1911
+#: jobs.c:1900
 #, c-format
 msgid "Exit %d"
 msgstr "Eliro %d"
 
-#: jobs.c:1914
+#: jobs.c:1903
 msgid "Unknown status"
 msgstr "Nekonata stato"
 
-#: jobs.c:2001
+#: jobs.c:1990
 #, c-format
 msgid "(core dumped) "
 msgstr "(nekropsio elŝutita)"
 
-#: jobs.c:2020
+#: jobs.c:2009
 #, c-format
 msgid "  (wd: %s)"
 msgstr "  (labordosierujo: %s)"
 
-#: jobs.c:2259
+#: jobs.c:2250
 #, c-format
 msgid "child setpgid (%ld to %ld)"
 msgstr "provo atribui (setpgid) procezgrupon %2$ld de la procezido %1$ld"
 
-#: jobs.c:2617 nojobs.c:664
+#: jobs.c:2608 nojobs.c:666
 #, c-format
 msgid "wait: pid %ld is not a child of this shell"
 msgstr "wait: La procezo %ld ne estas ido de ĉi tiu ŝelo"
 
-#: jobs.c:2893
+#: jobs.c:2884
 #, c-format
 msgid "wait_for: No record of process %ld"
 msgstr "wait_for: Malestas informoj pri procezo %ld"
 
-#: jobs.c:3236
+#: jobs.c:3223
 #, c-format
 msgid "wait_for_job: job %d is stopped"
 msgstr "wait_for_job: La laboro %d estas haltigita"
 
 # XXX: internal_error
-#: jobs.c:3564
+#: jobs.c:3551
 #, c-format
 msgid "%s: no current jobs"
 msgstr "%s: no current jobs"
 
-#: jobs.c:3571
+#: jobs.c:3558
 #, c-format
 msgid "%s: job has terminated"
 msgstr "%s: La laboro finiĝis"
 
-#: jobs.c:3580
+#: jobs.c:3567
 #, c-format
 msgid "%s: job %d already in background"
 msgstr "%s: La laboro %d jam estas fona"
 
 # XXX: internal warning:
-#: jobs.c:3806
+#: jobs.c:3793
 msgid "waitchld: turning on WNOHANG to avoid indefinite block"
 msgstr "waitchld: WNOHANG iĝas ŝaltita por eviti nedifintan pendiĝon"
 
-#: jobs.c:4320
+#: jobs.c:4307
 #, c-format
 msgid "%s: line %d: "
 msgstr "%s: linio %dª: "
 
-#: jobs.c:4334 nojobs.c:919
+#: jobs.c:4321 nojobs.c:921
 #, c-format
 msgid " (core dumped)"
 msgstr "(nekropsio elŝutita)"
 
-#: jobs.c:4346 jobs.c:4359
+#: jobs.c:4333 jobs.c:4346
 #, c-format
 msgid "(wd now: %s)\n"
 msgstr "(nun labordosierujo estas: %s)\n"
 
-#: jobs.c:4391
+#: jobs.c:4378
 msgid "initialize_job_control: getpgrp failed"
 msgstr "initialize_job_control: getpgrp fiaskis"
 
-#: jobs.c:4447
+#: jobs.c:4434
 msgid "initialize_job_control: no job control in background"
 msgstr "initialize_job_control: laborregado ne funkcias en la fono"
 
-#: jobs.c:4463
+#: jobs.c:4450
 msgid "initialize_job_control: line discipline"
 msgstr "initialize_job_control: liniaranĝo"
 
-#: jobs.c:4473
+#: jobs.c:4460
 msgid "initialize_job_control: setpgid"
 msgstr "initialize_job_control: setpgid()"
 
-#: jobs.c:4494 jobs.c:4503
+#: jobs.c:4481 jobs.c:4490
 #, c-format
 msgid "cannot set terminal process group (%d)"
 msgstr "ne prosperis atribui grupon (%d) de terminala procezo"
 
-#: jobs.c:4508
+#: jobs.c:4495
 msgid "no job control in this shell"
 msgstr "Ĉi tiu ŝelo ne disponigas laborregadon"
 
-#: lib/malloc/malloc.c:353
+#: lib/malloc/malloc.c:367
 #, c-format
 msgid "malloc: failed assertion: %s\n"
 msgstr "malloc: Malveras la aserto: %s\n"
 
 # XXX: debug?
-#: lib/malloc/malloc.c:369
+#: lib/malloc/malloc.c:383
 #, c-format
 msgid ""
 "\r\n"
@@ -1391,57 +1405,57 @@ msgstr ""
 "malloc: %s:%d: aserto sufokita\r\n"
 
 # XXX: internal error
-#: lib/malloc/malloc.c:370 lib/malloc/malloc.c:933
+#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941
 msgid "unknown"
 msgstr "nekonata"
 
 # XXX: debug?
-#: lib/malloc/malloc.c:882
+#: lib/malloc/malloc.c:892
 msgid "malloc: block on free list clobbered"
 msgstr "malloc: Skribdifektita bloko en malokupa listo (free list)"
 
 # XXX: debug?
-#: lib/malloc/malloc.c:972
+#: lib/malloc/malloc.c:980
 msgid "free: called with already freed block argument"
 msgstr "free: La argumento montras blokon jam malokupitan"
 
 # XXX: debug?
-#: lib/malloc/malloc.c:975
+#: lib/malloc/malloc.c:983
 msgid "free: called with unallocated block argument"
 msgstr "free: La argumento ne montras generitan memoron"
 
 # XXX: debug?
-#: lib/malloc/malloc.c:994
+#: lib/malloc/malloc.c:1001
 msgid "free: underflow detected; mh_nbytes out of range"
 msgstr "free: Okazis maltroo; mh_nbytes estas ekster sia variejo"
 
 # XXX: debug?
-#: lib/malloc/malloc.c:1001
+#: lib/malloc/malloc.c:1007
 msgid "free: underflow detected; magic8 corrupted"
 msgstr "free: Okazis maltroo; «magic8» difektitas"
 
 # XXX: debug?
-#: lib/malloc/malloc.c:1009
+#: lib/malloc/malloc.c:1014
 msgid "free: start and end chunk sizes differ"
 msgstr "free: La ĉapa kaj vosta longoj de memorpeco ne estas egalaj"
 
 # XXX: debug?
-#: lib/malloc/malloc.c:1119
+#: lib/malloc/malloc.c:1176
 msgid "realloc: called with unallocated block argument"
 msgstr "realloc: La argumento ne montras generitan memoron"
 
 # XXX: debug?
-#: lib/malloc/malloc.c:1134
+#: lib/malloc/malloc.c:1191
 msgid "realloc: underflow detected; mh_nbytes out of range"
 msgstr "realloc: Okazis maltroo; mh_nbytes estas ekster sia variejo"
 
 # XXX: debug?
-#: lib/malloc/malloc.c:1141
+#: lib/malloc/malloc.c:1197
 msgid "realloc: underflow detected; magic8 corrupted"
 msgstr "realloc: Okazis maltroo; «magic8» difektitas"
 
 # XXX: debug?
-#: lib/malloc/malloc.c:1150
+#: lib/malloc/malloc.c:1205
 msgid "realloc: start and end chunk sizes differ"
 msgstr "realloc: La ĉapa kaj vosta longoj de memorpeco ne estas egalaj"
 
@@ -1491,25 +1505,25 @@ msgid "network operations not supported"
 msgstr "Reta funkciado ne disponeblas"
 
 # XXX: internal warning:
-#: locale.c:217
+#: locale.c:219
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s)"
 msgstr "setlocale: LC_ALL: Maleblas ŝanĝi lokaĵaron (%s)"
 
 # XXX: internal warning:
-#: locale.c:219
+#: locale.c:221
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s): %s"
 msgstr "setlocale: LC_ALL: Maleblas ŝanĝi lokaĵaron (%s): %s"
 
 # XXX: fatal_error
-#: locale.c:292
+#: locale.c:294
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s)"
 msgstr "setlocale: %s: ne eblas ŝanĝi la lokaĵaron (%s)"
 
 # XXX: fatal_error
-#: locale.c:294
+#: locale.c:296
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s): %s"
 msgstr "setlocale: %s: ne eblas ŝanĝi la lokaĵaron (%s): %s"
@@ -1527,139 +1541,143 @@ msgstr "Nova poŝto en $_"
 msgid "The mail in %s has been read\n"
 msgstr "La poŝto en %s estas jam legita\n"
 
-#: make_cmd.c:317
+#: make_cmd.c:314
 msgid "syntax error: arithmetic expression required"
 msgstr "Sintaksa eraro: Necesas aritmetika esprimo"
 
-#: make_cmd.c:319
+#: make_cmd.c:316
 msgid "syntax error: `;' unexpected"
 msgstr "Sintaksa eraro: Neatendita „;‟"
 
-#: make_cmd.c:320
+#: make_cmd.c:317
 #, c-format
 msgid "syntax error: `((%s))'"
 msgstr "Sintaksa eraro: „((%s))‟"
 
-#: make_cmd.c:572
+#: make_cmd.c:569
 #, c-format
 msgid "make_here_document: bad instruction type %d"
 msgstr "make_here_document: Misa ordontipo %d"
 
 # internal_warning():
-#: make_cmd.c:657
+#: make_cmd.c:668
 #, c-format
 msgid "here-document at line %d delimited by end-of-file (wanted `%s')"
 msgstr "Tuj-dokumenton de linio %d limigas dosierfino (mankas „%s‟)"
 
 # XXX: programming_error
-#: make_cmd.c:756
+#: make_cmd.c:769
 #, c-format
 msgid "make_redirection: redirection instruction `%d' out of range"
 msgstr "make_redirection: Alidirektada komando „%d‟ ekster sia variejo"
 
 # internal_warning():
-#: parse.y:2393
+#: parse.y:2428
 #, c-format
-msgid "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line truncated"
-msgstr "shell_getc: shell_input_line_size (%zu) superas SIZE_MAX (%lu): la linio tranĉita"
+msgid ""
+"shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line "
+"truncated"
+msgstr ""
+"shell_getc: shell_input_line_size (%zu) superas SIZE_MAX (%lu): la linio "
+"tranĉita"
 
-#: parse.y:2826
+#: parse.y:2921
 msgid "maximum here-document count exceeded"
 msgstr "La nombro de tuj-documentoj superis sian maksimumon"
 
-#: parse.y:3581 parse.y:3957 parse.y:4556
+#: parse.y:3684 parse.y:4244 parse.y:6148
 #, c-format
 msgid "unexpected EOF while looking for matching `%c'"
 msgstr "Neatendita dosierfino dum serĉo de responda „%c‟"
 
-#: parse.y:4696
+#: parse.y:4452
 msgid "unexpected EOF while looking for `]]'"
 msgstr "Neatendita dosierfino dum serĉo de „]]‟"
 
-#: parse.y:4701
+#: parse.y:4457
 #, c-format
 msgid "syntax error in conditional expression: unexpected token `%s'"
 msgstr "Sintaksa eraro en kondiĉa esprimo: Neatendita simbolo „%s‟"
 
-#: parse.y:4705
+#: parse.y:4461
 msgid "syntax error in conditional expression"
 msgstr "Sintaksa eraro en kondiĉa esprimo"
 
-#: parse.y:4783
+#: parse.y:4539
 #, c-format
 msgid "unexpected token `%s', expected `)'"
 msgstr "Nekonvena simbolo „%s‟ anstataŭ „)‟"
 
-#: parse.y:4787
+#: parse.y:4543
 msgid "expected `)'"
 msgstr "Mankas „)‟"
 
-#: parse.y:4815
+#: parse.y:4571
 #, c-format
 msgid "unexpected argument `%s' to conditional unary operator"
 msgstr "La argumento „%s‟ ne konvenas por unuloka kondiĉa operacisimbolo"
 
-#: parse.y:4819
+#: parse.y:4575
 msgid "unexpected argument to conditional unary operator"
 msgstr "Maltaŭga argumento por unuloka kondiĉa operacisimbolo"
 
-#: parse.y:4865
+#: parse.y:4621
 #, c-format
 msgid "unexpected token `%s', conditional binary operator expected"
 msgstr "Misa simbolo „%s‟ anstataŭ duloka kondiĉa operacisigno"
 
-#: parse.y:4869
+#: parse.y:4625
 msgid "conditional binary operator expected"
 msgstr "ĉi tie devas esti duloka kondiĉa operacisigno"
 
-#: parse.y:4891
+#: parse.y:4647
 #, c-format
 msgid "unexpected argument `%s' to conditional binary operator"
 msgstr "La argumento „%s‟ ne konvenas por duloka kondiĉa operacisimbolo"
 
-#: parse.y:4895
+#: parse.y:4651
 msgid "unexpected argument to conditional binary operator"
 msgstr "<maltaŭga argumento por duloka kondiĉa operacisimbolo"
 
-#: parse.y:4906
+#: parse.y:4662
 #, c-format
 msgid "unexpected token `%c' in conditional command"
 msgstr "Misa simbolo „%c‟ en kondiĉa komando"
 
-#: parse.y:4909
+#: parse.y:4665
 #, c-format
 msgid "unexpected token `%s' in conditional command"
 msgstr "Misa simbolo „%s‟ en kondiĉa komando"
 
-#: parse.y:4913
+#: parse.y:4669
 #, c-format
 msgid "unexpected token %d in conditional command"
 msgstr "Misa simbolo „%d‟ en kondiĉa komando"
 
-#: parse.y:6336
+#: parse.y:6118
 #, c-format
 msgid "syntax error near unexpected token `%s'"
 msgstr "Sintaksa eraro apud neatendita simbolo „%s‟"
 
-#: parse.y:6355
+#: parse.y:6137
 #, c-format
 msgid "syntax error near `%s'"
 msgstr "Sintaksa eraro apud „%s‟"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error: unexpected end of file"
 msgstr "Sintaksa eraro: Neatendita dosierfino"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error"
 msgstr "Sintaksa eraro"
 
-#: parse.y:6428
+#: parse.y:6216
 #, c-format
 msgid "Use \"%s\" to leave the shell.\n"
 msgstr "Uzu «%s» por eliri el la ŝelo.\n"
 
-#: parse.y:6602
+#: parse.y:6394
 msgid "unexpected EOF while looking for matching `)'"
 msgstr "Neatendita dosierfino dum serĉo de responda „)‟"
 
@@ -1703,100 +1721,100 @@ msgid "xtrace fd (%d) != fileno xtrace fp (%d)"
 msgstr "xtrace fd (%d) != fileno xtrace fp (%d)"
 
 # XXX: programming_error
-#: print_cmd.c:1540
+#: print_cmd.c:1545
 #, c-format
 msgid "cprintf: `%c': invalid format character"
 msgstr "cprintf: „%c‟: Misa formatsigno"
 
-#: redir.c:149 redir.c:197
+#: redir.c:150 redir.c:198
 msgid "file descriptor out of range"
 msgstr "Ekstervarieja dosiernumero"
 
 # XXX: internal_error
-#: redir.c:204
+#: redir.c:205
 #, c-format
 msgid "%s: ambiguous redirect"
 msgstr "%s: Ambigua alidirektado"
 
 # XXX: internal_error
-#: redir.c:208
+#: redir.c:209
 #, c-format
 msgid "%s: cannot overwrite existing file"
 msgstr "%s: Maleblas surskribi ekzistantan dosieron"
 
 # XXX: internal_error
-#: redir.c:213
+#: redir.c:214
 #, c-format
 msgid "%s: restricted: cannot redirect output"
 msgstr "%s: Limigita ŝelo: malpermesitas alidirekti eligon"
 
 # XXX: internal_error
-#: redir.c:218
+#: redir.c:219
 #, c-format
 msgid "cannot create temp file for here-document: %s"
 msgstr "Malprosperis krei labordosieron por tuj-dokumento: %s"
 
-#: redir.c:222
+#: redir.c:223
 #, c-format
 msgid "%s: cannot assign fd to variable"
 msgstr "%s: Maleblas konservi la dosiernumeron en la variablo"
 
 # XXX: internal_warning
-#: redir.c:649
+#: redir.c:650
 msgid "/dev/(tcp|udp)/host/port not supported without networking"
 msgstr "«/dev/(tcp|udp)/host/port» ne disponeblas ekster retumado"
 
-#: redir.c:938 redir.c:1053 redir.c:1114 redir.c:1284
+#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303
 msgid "redirection error: cannot duplicate fd"
 msgstr "Alidirektada eraro: Fiaskis kunnomumo al dosiernumero"
 
-#: shell.c:347
+#: shell.c:353
 msgid "could not find /tmp, please create!"
 msgstr "Mankas «/tmp», bv krei ĝin!"
 
-#: shell.c:351
+#: shell.c:357
 msgid "/tmp must be a valid directory name"
 msgstr "«/tmp» devas esti valida dosierujo"
 
-#: shell.c:804
+#: shell.c:826
 msgid "pretty-printing mode ignored in interactive shells"
 msgstr "La reĝimo de struktura tekstaranĝo ne funkcias en dialogaj ŝeloj"
 
-#: shell.c:948
+#: shell.c:972
 #, c-format
 msgid "%c%c: invalid option"
 msgstr "%c%c: Misa opcio"
 
-#: shell.c:1319
+#: shell.c:1343
 #, c-format
 msgid "cannot set uid to %d: effective uid %d"
 msgstr "Ne eblas ŝanĝi UID-on al %d: la efektiva UID estas %d"
 
-#: shell.c:1330
+#: shell.c:1354
 #, c-format
 msgid "cannot set gid to %d: effective gid %d"
 msgstr "Ne eblas ŝanĝi GID-on al %d: la efektiva GID estas %d"
 
 # XXX: internal_warning
-#: shell.c:1518
+#: shell.c:1544
 msgid "cannot start debugger; debugging mode disabled"
 msgstr "Maleblas lanĉi erarserĉilon: la erarserĉa reĝimo malŝaltitas."
 
-#: shell.c:1632
+#: shell.c:1658
 #, c-format
 msgid "%s: Is a directory"
 msgstr "%s : ĉi tio estas dosierujo"
 
-#: shell.c:1881
+#: shell.c:1907
 msgid "I have no name!"
 msgstr "Mi ne havas nomon!"
 
-#: shell.c:2035
+#: shell.c:2061
 #, c-format
 msgid "GNU bash, version %s-(%s)\n"
 msgstr "GNUa «bash», versio %s-(%s)\n"
 
-#: shell.c:2036
+#: shell.c:2062
 #, c-format
 msgid ""
 "Usage:\t%s [GNU long option] [option] ...\n"
@@ -1805,359 +1823,364 @@ msgstr ""
 "Uzo:\t%s [GNUa opcio longforma] [opcio] ...\n"
 "\t%s [GNUa opcio longforma] [opcio] SKRIPTODOSIERO ...\n"
 
-#: shell.c:2038
+#: shell.c:2064
 msgid "GNU long options:\n"
 msgstr "GNUaj opcioj longformaj:\n"
 
-#: shell.c:2042
+#: shell.c:2068
 msgid "Shell options:\n"
 msgstr "Ŝelaj opcioj:\n"
 
-#: shell.c:2043
+#: shell.c:2069
 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n"
 msgstr "\t-ilrsD aŭ -c KOMANDO aŭ -O SHOPT_OPCIO\t\t(nur ĉe voko)\n"
 
-#: shell.c:2062
+#: shell.c:2088
 #, c-format
 msgid "\t-%s or -o option\n"
 msgstr "\t-%s aŭ -o opcio\n"
 
 # bash --help
-#: shell.c:2068
+#: shell.c:2094
 #, c-format
 msgid "Type `%s -c \"help set\"' for more information about shell options.\n"
 msgstr "Por pluaj informoj pri la opcioj tajpu: «%s -c \"help set\"»\n"
 
-#: shell.c:2069
+#: shell.c:2095
 #, c-format
 msgid "Type `%s -c help' for more information about shell builtin commands.\n"
 msgstr "Por scii pli pri la primitivaj ŝelkomandoj tajpu: „%s -c help‟\n"
 
-#: shell.c:2070
+#: shell.c:2096
 #, c-format
 msgid "Use the `bashbug' command to report bugs.\n"
 msgstr "Por raporti pri eraroj uzu la komandon „bashbug‟\n"
 
-#: shell.c:2072
+#: shell.c:2098
 #, c-format
 msgid "bash home page: <http://www.gnu.org/software/bash>\n"
-msgstr "La hejmpaĝo de Baŝo (anglalingva): <http://www.gnu.org/software/bash>\n"
+msgstr ""
+"La hejmpaĝo de Baŝo (anglalingva): <http://www.gnu.org/software/bash>\n"
 
-#: shell.c:2073
+#: shell.c:2099
 #, c-format
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
-msgstr "Ĝenerala helpilo pri uzo de GNUa programaro: <http://www.gnu.org/gethelp/>\n"
+msgstr ""
+"Ĝenerala helpilo pri uzo de GNUa programaro: <http://www.gnu.org/gethelp/>\n"
 
 # XXX: internal_error
-#: sig.c:757
+#: sig.c:765
 #, c-format
 msgid "sigprocmask: %d: invalid operation"
 msgstr "sigprocmask: %d: Misa operacio"
 
-#: siglist.c:47
+#: siglist.c:48
 msgid "Bogus signal"
 msgstr "Ŝtopsignalo"
 
 # Hangup detected on controlling terminal or death of controlling
 # process
-#: siglist.c:50
+#: siglist.c:51
 msgid "Hangup"
 msgstr "Malkonekto"
 
 # Interrupt from keyboard
-#: siglist.c:54
+#: siglist.c:55
 msgid "Interrupt"
 msgstr "Interrompo"
 
 # Quit from keyboard
-#: siglist.c:58
+#: siglist.c:59
 msgid "Quit"
 msgstr "Klavara eliro"
 
-#: siglist.c:62
+#: siglist.c:63
 msgid "Illegal instruction"
 msgstr "Miskomando"
 
 # SIGTRAP        5        Core    Trace/breakpoint trap
-#: siglist.c:66
+#: siglist.c:67
 msgid "BPT trace/trap"
 msgstr "Spurada kontrolpunkto"
 
 # Abort signal from abort(3)
-#: siglist.c:74
+#: siglist.c:75
 msgid "ABORT instruction"
 msgstr "Komando ABORT"
 
 # SIGEMT is not specified in POSIX 1003.1-2001, but  neverthless  appears
 # on  most  other Unices, where its default action is typically to termi-
 # nate the process with a core dump.
-#: siglist.c:78
+#: siglist.c:79
 msgid "EMT instruction"
 msgstr "EMT-komando"
 
-#: siglist.c:82
+#: siglist.c:83
 msgid "Floating point exception"
 msgstr "Glitpunkta escepto"
 
 # SIGKILL       9       Term    Kill signal
 # Nek kaptebla nek ignorebla (malkiel ABORT)
-#: siglist.c:86
+#: siglist.c:87
 msgid "Killed"
 msgstr "Murdu"
 
-#: siglist.c:90
+#: siglist.c:91
 msgid "Bus error"
 msgstr "Bus-eraro"
 
 # SIGSEGV      11       Core    Invalid memory reference
-#: siglist.c:94
+#: siglist.c:95
 msgid "Segmentation fault"
 msgstr "Adreseraro"
 
 # SIGSYS      12,-,12     Core    Bad argument to routine (SVID)
-#: siglist.c:98
+#: siglist.c:99
 msgid "Bad system call"
 msgstr "Misa sistemvoko"
 
 # SIGPIPE      13       Term    Broken pipe: write to pipe with no readers
-#: siglist.c:102
+#: siglist.c:103
 msgid "Broken pipe"
 msgstr "Rompita dukto"
 
 # SIGALRM      14       Term    Timer signal from alarm(2)
-#: siglist.c:106
+#: siglist.c:107
 msgid "Alarm clock"
 msgstr "Vekhorloĝo"
 
 # SIGTERM     15       Term    Termination signal
-#: siglist.c:110
+#: siglist.c:111
 msgid "Terminated"
 msgstr "Finiĝu"
 
 # SIGURG      16,23,21    Ign     Urgent condition on socket (4.2 BSD)
-#: siglist.c:114
+#: siglist.c:115
 msgid "Urgent IO condition"
 msgstr "Urĝa stato eneliga"
 
 # SIGSTOP   17,19,23    Stop    Stop process
 # Nek kaptebla nek ignorebla (samkiel SIGKILL)
 # Haltu (poste eblos plu iri, vd SIGCONT)
-#: siglist.c:118
+#: siglist.c:119
 msgid "Stopped (signal)"
 msgstr "Haltu (signalo)"
 
 # SIGCONT   19,18,25            Continue if stopped
-#: siglist.c:126
+#: siglist.c:127
 msgid "Continue"
 msgstr "Pluen"
 
 # SIGCHLD   20,17,18    Ign     Child stopped or terminated
-#: siglist.c:134
+#: siglist.c:135
 msgid "Child death or stop"
 msgstr "Procezido mortis aŭ haltis"
 
 # SIGTTIN   21,21,26    Stop    tty input for background process
-#: siglist.c:138
+#: siglist.c:139
 msgid "Stopped (tty input)"
 msgstr "Haltu (pro terminalenigo)"
 
 # SIGTTOU   22,22,27    Stop    tty output for background process
-#: siglist.c:142
+#: siglist.c:143
 msgid "Stopped (tty output)"
 msgstr "Haltu (pro terminaleligo)"
 
 # SIGIO       23,29,22    Term    I/O now possible (4.2 BSD)
-#: siglist.c:146
+#: siglist.c:147
 msgid "I/O ready"
 msgstr "Eneligo pretas"
 
 # SIGXCPU     24,24,30    Core    CPU time limit exceeded (4.2 BSD)
-#: siglist.c:150
+#: siglist.c:151
 msgid "CPU limit"
 msgstr "Ĉefprocesora tempolimo"
 
 # SIGXFSZ     25,25,31    Core    File size limit exceeded (4.2 BSD)
-#: siglist.c:154
+#: siglist.c:155
 msgid "File limit"
 msgstr "Dosiera longolimo"
 
 # SIGVTALRM   26,26,28    Term    Virtual alarm clock (4.2 BSD)
-#: siglist.c:158
+#: siglist.c:159
 msgid "Alarm (virtual)"
 msgstr "Vekilo (virtuala)"
 
 # SIGPROF     27,27,29    Term    Profiling timer expired
-#: siglist.c:162
+#: siglist.c:163
 msgid "Alarm (profile)"
 msgstr "Vekilo (profilada)"
 
 # SIGWINCH    28,28,20    Ign     Window resize signal (4.3 BSD, Sun)
-#: siglist.c:166
+#: siglist.c:167
 msgid "Window changed"
 msgstr "Fenestro ŝanĝiĝis"
 
 # SIGLOST      -,-,-      Term    File lock lost
-#: siglist.c:170
+#: siglist.c:171
 msgid "Record lock"
 msgstr "Dosierŝloso"
 
 # SIGUSR1   30,10,16    Term    User-defined signal 1
-#: siglist.c:174
+#: siglist.c:175
 msgid "User signal 1"
 msgstr "Uzulsignalo 1ª"
 
-#: siglist.c:178
+#: siglist.c:179
 msgid "User signal 2"
 msgstr "Uzulsignalo 2ª"
 
 # Harbor File Transfer:
-#: siglist.c:182
+#: siglist.c:183
 msgid "HFT input data pending"
 msgstr "Pendas HFT-enigo"
 
 # SIGPWR      29,30,19    Term    Power failure (System V)
-#: siglist.c:186
+#: siglist.c:187
 msgid "power failure imminent"
 msgstr "Energiprovizo paneontas"
 
 # SIGDANGER
-#: siglist.c:190
+#: siglist.c:191
 msgid "system crash imminent"
 msgstr "La sistemo estas kraŝonta"
 
 # SIGMIGRATE:
-#: siglist.c:194
+#: siglist.c:195
 msgid "migrate process to another CPU"
 msgstr "La procezo iru al alia ĉefprocesoro"
 
 # SIGPRE
-#: siglist.c:198
+#: siglist.c:199
 msgid "programming error"
 msgstr "Programeraro"
 
 # SIGGRANT (monopola??)
-#: siglist.c:202
+#: siglist.c:203
 msgid "HFT monitor mode granted"
 msgstr "HFT-monitorreĝimo jesigita"
 
-#: siglist.c:206
+#: siglist.c:207
 msgid "HFT monitor mode retracted"
 msgstr "HFT-monitorreĝimo forprenita"
 
-#: siglist.c:210
+#: siglist.c:211
 msgid "HFT sound sequence has completed"
 msgstr "HFT-sonsekvenco finiĝis"
 
 # SIGINFO      29,-,-             A synonym for SIGPWR
-#: siglist.c:214
+#: siglist.c:215
 msgid "Information request"
 msgstr "Informmendo"
 
-#: siglist.c:222 siglist.c:224
+#: siglist.c:223 siglist.c:225
 #, c-format
 msgid "Unknown Signal #%d"
 msgstr "Nekonata signalo n-ro %d"
 
-#: subst.c:1476 subst.c:1666
+#: subst.c:1480 subst.c:1670
 #, c-format
 msgid "bad substitution: no closing `%s' in %s"
 msgstr "Misa anstataŭigo: Mankas ferma „%s‟ en %s"
 
-#: subst.c:3281
+#: subst.c:3307
 #, c-format
 msgid "%s: cannot assign list to array member"
 msgstr "%s: Maleblas valorizi tabelanon per listo"
 
-#: subst.c:5910 subst.c:5926
+#: subst.c:6048 subst.c:6064
 msgid "cannot make pipe for process substitution"
 msgstr "Ne prosperis fari dukton por proceza anstataŭigo"
 
-#: subst.c:5985
+#: subst.c:6124
 msgid "cannot make child for process substitution"
 msgstr "Ne prosperis krei idon por proceza anstataŭigo"
 
-#: subst.c:6059
+#: subst.c:6198
 #, c-format
 msgid "cannot open named pipe %s for reading"
 msgstr "Ne prosperis malfermi nomitan dukton %s porlegan"
 
-#: subst.c:6061
+#: subst.c:6200
 #, c-format
 msgid "cannot open named pipe %s for writing"
 msgstr "Ne prosperis malfermi nomitan dukton %s por skribado"
 
-#: subst.c:6084
+#: subst.c:6223
 #, c-format
 msgid "cannot duplicate named pipe %s as fd %d"
 msgstr "Ne prosperis kunnomumi nomhavan dukton %s kiel dosiernumeron %d"
 
-#: subst.c:6213
+#: subst.c:6370
 msgid "command substitution: ignored null byte in input"
 msgstr "Komanda anstataŭigo: nul-bajto en enigaĵo, ignorita"
 
-#: subst.c:6353
+#: subst.c:6533
 msgid "cannot make pipe for command substitution"
 msgstr "Ne prosperis fari dukton por komanda anstataŭigo"
 
-#: subst.c:6397
+#: subst.c:6580
 msgid "cannot make child for command substitution"
 msgstr "Ne prosperis krei procezidon por komanda anstataŭigo"
 
-#: subst.c:6423
+#: subst.c:6613
 msgid "command_substitute: cannot duplicate pipe as fd 1"
 msgstr "command_substitute: Ne prosperis kunnomumi la dosiernumeron 1 al dukto"
 
-#: subst.c:6883 subst.c:9952
+#: subst.c:7082 subst.c:10252
 #, c-format
 msgid "%s: invalid variable name for name reference"
 msgstr "%s: Misa variablonomo por nomreferenco"
 
-#: subst.c:6979 subst.c:6997 subst.c:7169
+#: subst.c:7178 subst.c:7196 subst.c:7369
 #, c-format
 msgid "%s: invalid indirect expansion"
 msgstr "%s: Misa malvolvo malrekta"
 
-#: subst.c:7013 subst.c:7177
+#: subst.c:7212 subst.c:7377
 #, c-format
 msgid "%s: invalid variable name"
 msgstr "%s: Maltaŭga variablonomo"
 
-#: subst.c:7256
+#: subst.c:7478
 #, c-format
 msgid "%s: parameter not set"
 msgstr "%s: Parametro estas malaktiva"
 
-#: subst.c:7258
+#: subst.c:7480
 #, c-format
 msgid "%s: parameter null or not set"
 msgstr "%s: Parametro estas NUL aŭ malaktiva"
 
-#: subst.c:7503 subst.c:7518
+#: subst.c:7727 subst.c:7742
 #, c-format
 msgid "%s: substring expression < 0"
 msgstr "%s: subĉeno-esprimo < 0"
 
-#: subst.c:9281 subst.c:9302
+#: subst.c:9560 subst.c:9587
 #, c-format
 msgid "%s: bad substitution"
 msgstr "%s: Misa anstataŭigo"
 
-#: subst.c:9390
+#: subst.c:9678
 #, c-format
 msgid "$%s: cannot assign in this way"
 msgstr "$%s: ĉi tiel ne valorizebla"
 
 # XXX: internal warning:
-#: subst.c:9814
-msgid "future versions of the shell will force evaluation as an arithmetic substitution"
-msgstr "Ontaj versioj de la ŝelo plenumos komputon kiel aritmetikan anstataŭigon"
+#: subst.c:10111
+msgid ""
+"future versions of the shell will force evaluation as an arithmetic "
+"substitution"
+msgstr ""
+"Ontaj versioj de la ŝelo plenumos komputon kiel aritmetikan anstataŭigon"
 
-#: subst.c:10367
+#: subst.c:10795
 #, c-format
 msgid "bad substitution: no closing \"`\" in %s"
 msgstr "Misa anstataŭigo: Mankas ferma „`‟ en %s"
 
-#: subst.c:11434
+#: subst.c:11874
 #, c-format
 msgid "no match: %s"
 msgstr "Nenio kongrua: %s"
@@ -2180,21 +2203,21 @@ msgstr "Mankas „)‟"
 msgid "`)' expected, found %s"
 msgstr "Anstataŭ „)‟ troviĝas %s"
 
-#: test.c:466 test.c:799
+#: test.c:469 test.c:814
 #, c-format
 msgid "%s: binary operator expected"
 msgstr "%s: Tie devas esti duloka operacisigno"
 
-#: test.c:756 test.c:759
+#: test.c:771 test.c:774
 #, c-format
 msgid "%s: unary operator expected"
 msgstr "%s: Tie devas esti unuloka operacisigno"
 
-#: test.c:881
+#: test.c:896
 msgid "missing `]'"
 msgstr "Mankas „]‟"
 
-#: test.c:899
+#: test.c:914
 #, c-format
 msgid "syntax error: `%s' unexpected"
 msgstr "Sintaksa eraro: Neatendita «%s»"
@@ -2203,116 +2226,127 @@ msgstr "Sintaksa eraro: Neatendita «%s»"
 msgid "invalid signal number"
 msgstr "Misa signalnumero"
 
-#: trap.c:325
+#: trap.c:323
 #, c-format
 msgid "trap handler: maximum trap handler level exceeded (%d)"
-msgstr "trap handler: La nivelo de kaptilotraktiloj superis sian maksimumon (%d)"
+msgstr ""
+"trap handler: La nivelo de kaptilotraktiloj superis sian maksimumon (%d)"
 
 # XXX: internal_warning
-#: trap.c:414
+#: trap.c:412
 #, c-format
 msgid "run_pending_traps: bad value in trap_list[%d]: %p"
 msgstr "run_pending_traps: Misa valoro en trap_list[%d]: %p"
 
 # XXX: internal_warning
-#: trap.c:418
+#: trap.c:416
 #, c-format
-msgid "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
+msgid ""
+"run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
 msgstr "run_pending_traps: Signaltraktilo SIG_DFL resendas %d (%s) al mi mem"
 
-#: trap.c:487
+#: trap.c:509
 #, c-format
 msgid "trap_handler: bad signal %d"
 msgstr "trap_handler: Misa signalnumero %d"
 
-#: variables.c:421
+#: variables.c:424
 #, c-format
 msgid "error importing function definition for `%s'"
 msgstr "Eraro ĉe importo de funkcidifino por „%s‟"
 
 # XXX: internal_warning
-#: variables.c:833
+#: variables.c:838
 #, c-format
 msgid "shell level (%d) too high, resetting to 1"
 msgstr "%d estas tro granda ŝelnivelo; mallevita ĝis 1"
 
 # XXX: internal_error
-#: variables.c:2674
+#: variables.c:2642
 msgid "make_local_variable: no function context at current scope"
 msgstr "make_local_variable: Malestas funkcia kunteksto en ĉi-regiono"
 
-#: variables.c:2693
+#: variables.c:2661
 #, c-format
 msgid "%s: variable may not be assigned value"
 msgstr "%s: Variablo ne valorizebla"
 
-#: variables.c:3475
+#: variables.c:2818 variables.c:2874
+#, c-format
+msgid "%s: cannot inherit value from incompatible type"
+msgstr ""
+
+#: variables.c:3459
 #, c-format
 msgid "%s: assigning integer to name reference"
 msgstr "%s: Nomreferenco valorizata per entjero"
 
 # XXX: internal_error
-#: variables.c:4404
+#: variables.c:4390
 msgid "all_local_variables: no function context at current scope"
 msgstr "all_local_variables: Malestas funkcia kunteksto en ĉi-regiono"
 
 # XXX: internal_error
-#: variables.c:4771
+#: variables.c:4757
 #, c-format
 msgid "%s has null exportstr"
 msgstr "«exportstr» de %s estas NUL"
 
 # XXX: internal_error
-#: variables.c:4776 variables.c:4785
+#: variables.c:4762 variables.c:4771
 #, c-format
 msgid "invalid character %d in exportstr for %s"
 msgstr "Misa signo %d en eksporta signoĉeno por „%s‟"
 
 # XXX: internal_error
-#: variables.c:4791
+#: variables.c:4777
 #, c-format
 msgid "no `=' in exportstr for %s"
 msgstr "Mankas „=‟ en eksporta signoĉeno por „%s‟"
 
 # XXX: internal_error
-#: variables.c:5331
+#: variables.c:5317
 msgid "pop_var_context: head of shell_variables not a function context"
-msgstr "pop_var_context: La kapo de „shell_variables‟ ne estas funkcia kunteksto"
+msgstr ""
+"pop_var_context: La kapo de „shell_variables‟ ne estas funkcia kunteksto"
 
 # XXX: internal_error
-#: variables.c:5344
+#: variables.c:5330
 msgid "pop_var_context: no global_variables context"
 msgstr "pop_var_context: Mankas kunteksto de „global_variables‟"
 
 # XXX: internal_error
-#: variables.c:5424
+#: variables.c:5410
 msgid "pop_scope: head of shell_variables not a temporary environment scope"
 msgstr "pop_scope: La kapo de „shell_variables‟ ne estas provizora regiono"
 
 # XXX: internal_error
-#: variables.c:6387
+#: variables.c:6400
 #, c-format
 msgid "%s: %s: cannot open as FILE"
 msgstr "%s: %s: Ne malfermeblas kiel DOSIERO"
 
 # XXX: internal_error
-#: variables.c:6392
+#: variables.c:6405
 #, c-format
 msgid "%s: %s: invalid value for trace file descriptor"
 msgstr "%s: %s: Misa valoro por spurada dosiernumero (trace file descriptor)"
 
 # # XXX: internal_error
-#: variables.c:6437
+#: variables.c:6450
 #, c-format
 msgid "%s: %s: compatibility value out of range"
 msgstr "%s: %s kongruo-nivelo estas ekster sia variejo"
 
 #: version.c:46 version2.c:46
-msgid "Copyright (C) 2020 Free Software Foundation, Inc."
+#, fuzzy
+msgid "Copyright (C) 2022 Free Software Foundation, Inc."
 msgstr "Copyright (C) 2020 ĉe «Free Software Foundation, Inc.»"
 
 #: version.c:47 version2.c:47
-msgid "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n"
+msgid ""
+"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
+"html>\n"
 msgstr ""
 "La permesilo estas GPLv3+; t.e. GNU GPL, versio 3ª aŭ pli nova.\n"
 "La tekston vd ĉe <http://gnu.org/licenses/gpl.html>\n"
@@ -2361,7 +2395,9 @@ msgid "unalias [-a] name [name ...]"
 msgstr "unalias [-a] NOMO [NOMO ...]"
 
 #: builtins.c:53
-msgid "bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-x keyseq:shell-command] [keyseq:readline-function or readline-command]"
+msgid ""
+"bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-"
+"x keyseq:shell-command] [keyseq:readline-function or readline-command]"
 msgstr ""
 "bind [-lpsvPSVX] [-m KLAVARTABELO] [-f DOSIERNOMO] [-q NOMO]\n"
 "          [-u NOMO] [-r KLAVAĴO] [-x KLAVAĴO:ŜELKOMANDO]\n"
@@ -2396,11 +2432,17 @@ msgid "command [-pVv] command [arg ...]"
 msgstr "command [-pVv] KOMANDO [ARG ...]"
 
 #: builtins.c:78
-msgid "declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]"
+#, fuzzy
+msgid ""
+"declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] "
+"[name ...]"
 msgstr "declare [-aAfFgiIlnrtux] [-p] [NOMO[=VALORO] ...]"
 
 #: builtins.c:80
-msgid "typeset [-aAfFgiIlnrtux] [-p] name[=value] ..."
+#, fuzzy
+msgid ""
+"typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] "
+"[name ...]"
 msgstr "typeset [-aAfFgiIlnrtux] [-p] NOMO[=VALORO] ..."
 
 #: builtins.c:82
@@ -2462,7 +2504,9 @@ msgid "help [-dms] [pattern ...]"
 msgstr "help [-dms] [ŜABLONO ...]"
 
 #: builtins.c:123
-msgid "history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg...]"
+msgid ""
+"history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg "
+"[arg...]"
 msgstr ""
 "history [-c] [-d POZICIO] [n] aŭ\n"
 "history -awr [DOSIERNOMO] aŭ\n"
@@ -2479,7 +2523,9 @@ msgid "disown [-h] [-ar] [jobspec ... | pid ...]"
 msgstr "disown [-h] [-ar] [LABORINDIKO ... | PROCEZNUMERO ...]"
 
 #: builtins.c:134
-msgid "kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]"
+msgid ""
+"kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l "
+"[sigspec]"
 msgstr ""
 "kill [-s SIGSNOM | -n SIGNUM | -SIGNOM] [PN | LABORINDIKO] ... aŭ\n"
 "kill -l [SIGNOM]"
@@ -2489,7 +2535,9 @@ msgid "let arg [arg ...]"
 msgstr "let ARG [ARG ...]"
 
 #: builtins.c:138
-msgid "read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]"
+msgid ""
+"read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p "
+"prompt] [-t timeout] [-u fd] [name ...]"
 msgstr ""
 "read [-ers] [-a TABELO] [-d DISIG] [-i TEKSTO]\n"
 "     [-n NSIGN] [-N NSIGN] [-p INVIT] [-t TLIM]\n"
@@ -2500,7 +2548,8 @@ msgid "return [n]"
 msgstr "return [N]"
 
 #: builtins.c:142
-msgid "set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]"
+#, fuzzy
+msgid "set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]"
 msgstr "set [-abefhkmnptuvxBCHP] [-o OPCINOMO] [--] [ARG ...]"
 
 #: builtins.c:144
@@ -2548,7 +2597,8 @@ msgid "type [-afptP] name [name ...]"
 msgstr "type [-afptP] NOMO [NOMO ...]"
 
 #: builtins.c:171
-msgid "ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]"
+#, fuzzy
+msgid "ulimit [-SHabcdefiklmnpqrstuvxPRT] [limit]"
 msgstr "ulimit [-SHabcdefiklmnpqrstuvxPT] [LIMO]"
 
 #: builtins.c:174
@@ -2584,15 +2634,21 @@ msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac"
 msgstr "case VORTO in [ŜABLONO [| ŜABLONO]...) KOMANDOJ ;;]... esac"
 
 #: builtins.c:194
-msgid "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi"
-msgstr "if KOMANDOJ; then KOMANDOJ; [ elif KOMANDOJ; then KOMANDOJ; ]... [ else KOMANDOJ; ] fi"
+msgid ""
+"if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else "
+"COMMANDS; ] fi"
+msgstr ""
+"if KOMANDOJ; then KOMANDOJ; [ elif KOMANDOJ; then KOMANDOJ; ]... [ else "
+"KOMANDOJ; ] fi"
 
 #: builtins.c:196
-msgid "while COMMANDS; do COMMANDS; done"
+#, fuzzy
+msgid "while COMMANDS; do COMMANDS-2; done"
 msgstr "while KOMANDOJ; do KOMANDOJ; done"
 
 #: builtins.c:198
-msgid "until COMMANDS; do COMMANDS; done"
+#, fuzzy
+msgid "until COMMANDS; do COMMANDS-2; done"
 msgstr "until KOMANDOJ; do KOMANDOJ; done"
 
 #: builtins.c:200
@@ -2646,14 +2702,19 @@ msgid "printf [-v var] format [arguments]"
 msgstr "printf [-v VAR] FORMATO [ARGUMENTOJ]"
 
 #: builtins.c:231
-msgid "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [name ...]"
+msgid ""
+"complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-"
+"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S "
+"suffix] [name ...]"
 msgstr ""
 "complete [-abcdefgjksuv] [-pr] [-DEI] [-o OPCIO] [-A AGO] [-G ŜABLONO]\n"
 "         [-W VORTLISTO] [-F FUNKCIO] [-C KOMANDO] [-X FILTRILO]\n"
 "         [-P PREFIKSO] [-S SUFIKSO] [NOMO ...]"
 
 #: builtins.c:235
-msgid "compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]"
+msgid ""
+"compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-"
+"F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]"
 msgstr ""
 "compgen [-abcdefgjksuv] [-o OPCIO]  [-A AGO] [-G ŜABLONO]\n"
 "        [-W VORTLISTO] [-F FUNKCIO] [-C KOMANDO] [-X FILTRILO]\n"
@@ -2664,13 +2725,17 @@ msgid "compopt [-o|+o option] [-DEI] [name ...]"
 msgstr "compopt [-o|+o OPCIO] [-DEI] [NOMO ...]"
 
 #: builtins.c:242
-msgid "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]"
+msgid ""
+"mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C "
+"callback] [-c quantum] [array]"
 msgstr ""
 "mapfile [-d DISIG] [-n KIOM] [-O ORIGINO] [-s KIOM] [-t] [-u DN]\n"
 "        [-C RETROVOKO] [-c KVANTO] [TABELO]"
 
 #: builtins.c:244
-msgid "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]"
+msgid ""
+"readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C "
+"callback] [-c quantum] [array]"
 msgstr ""
 "readarray [-d DISIG] [-n KIOM] [-O ORIGINO] [-s KIOM] [-t]\n"
 "          [-u DN] [-C RETROVOKO] [-c KVANTO] [TABELO]"
@@ -2691,7 +2756,8 @@ msgid ""
 "      -p\tprint all defined aliases in a reusable format\n"
 "    \n"
 "    Exit Status:\n"
-"    alias returns true unless a NAME is supplied for which no alias has been\n"
+"    alias returns true unless a NAME is supplied for which no alias has "
+"been\n"
 "    defined."
 msgstr ""
 "Difinu aŭ listigu alinomojn.\n"
@@ -2743,25 +2809,30 @@ msgid ""
 "    Options:\n"
 "      -m  keymap         Use KEYMAP as the keymap for the duration of this\n"
 "                         command.  Acceptable keymap names are emacs,\n"
-"                         emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,\n"
+"                         emacs-standard, emacs-meta, emacs-ctlx, vi, vi-"
+"move,\n"
 "                         vi-command, and vi-insert.\n"
 "      -l                 List names of functions.\n"
 "      -P                 List function names and bindings.\n"
 "      -p                 List functions and bindings in a form that can be\n"
 "                         reused as input.\n"
-"      -S                 List key sequences that invoke macros and their values\n"
-"      -s                 List key sequences that invoke macros and their values\n"
+"      -S                 List key sequences that invoke macros and their "
+"values\n"
+"      -s                 List key sequences that invoke macros and their "
+"values\n"
 "                         in a form that can be reused as input.\n"
 "      -V                 List variable names and values\n"
 "      -v                 List variable names and values in a form that can\n"
 "                         be reused as input.\n"
 "      -q  function-name  Query about which keys invoke the named function.\n"
-"      -u  function-name  Unbind all keys which are bound to the named function.\n"
+"      -u  function-name  Unbind all keys which are bound to the named "
+"function.\n"
 "      -r  keyseq         Remove the binding for KEYSEQ.\n"
 "      -f  filename       Read key bindings from FILENAME.\n"
 "      -x  keyseq:shell-command\tCause SHELL-COMMAND to be executed when\n"
 "    \t\t\t\tKEYSEQ is entered.\n"
-"      -X                 List key sequences bound with -x and associated commands\n"
+"      -X                 List key sequences bound with -x and associated "
+"commands\n"
 "                         in a form that can be reused as input.\n"
 "    \n"
 "    Exit Status:\n"
@@ -2847,7 +2918,8 @@ msgid ""
 "    \n"
 "    Execute SHELL-BUILTIN with arguments ARGs without performing command\n"
 "    lookup.  This is useful when you wish to reimplement a shell builtin\n"
-"    as a shell function, but need to execute the builtin within the function.\n"
+"    as a shell function, but need to execute the builtin within the "
+"function.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the exit status of SHELL-BUILTIN, or false if SHELL-BUILTIN is\n"
@@ -2899,16 +2971,22 @@ msgstr ""
 msgid ""
 "Change the shell working directory.\n"
 "    \n"
-"    Change the current directory to DIR.  The default DIR is the value of the\n"
+"    Change the current directory to DIR.  The default DIR is the value of "
+"the\n"
 "    HOME shell variable.\n"
 "    \n"
-"    The variable CDPATH defines the search path for the directory containing\n"
-"    DIR.  Alternative directory names in CDPATH are separated by a colon (:).\n"
-"    A null directory name is the same as the current directory.  If DIR begins\n"
+"    The variable CDPATH defines the search path for the directory "
+"containing\n"
+"    DIR.  Alternative directory names in CDPATH are separated by a colon "
+"(:).\n"
+"    A null directory name is the same as the current directory.  If DIR "
+"begins\n"
 "    with a slash (/), then CDPATH is not used.\n"
 "    \n"
-"    If the directory is not found, and the shell option `cdable_vars' is set,\n"
-"    the word is assumed to be  a variable name.  If that variable has a value,\n"
+"    If the directory is not found, and the shell option `cdable_vars' is "
+"set,\n"
+"    the word is assumed to be  a variable name.  If that variable has a "
+"value,\n"
 "    its value is used for DIR.\n"
 "    \n"
 "    Options:\n"
@@ -2924,11 +3002,13 @@ msgid ""
 "    \t\tattributes as a directory containing the file attributes\n"
 "    \n"
 "    The default is to follow symbolic links, as if `-L' were specified.\n"
-"    `..' is processed by removing the immediately previous pathname component\n"
+"    `..' is processed by removing the immediately previous pathname "
+"component\n"
 "    back to a slash or the beginning of DIR.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns 0 if the directory is changed, and if $PWD is set successfully when\n"
+"    Returns 0 if the directory is changed, and if $PWD is set successfully "
+"when\n"
 "    -P is used; non-zero otherwise."
 msgstr ""
 "Ŝanĝu la kurantan laboran dosierujon de la ŝelo.\n"
@@ -3042,7 +3122,8 @@ msgid ""
 "Execute a simple command or display information about commands.\n"
 "    \n"
 "    Runs COMMAND with ARGS suppressing  shell function lookup, or display\n"
-"    information about the specified COMMANDs.  Can be used to invoke commands\n"
+"    information about the specified COMMANDs.  Can be used to invoke "
+"commands\n"
 "    on disk when a function with the same name exists.\n"
 "    \n"
 "    Options:\n"
@@ -3105,7 +3186,8 @@ msgid ""
 "    Variables with the integer attribute have arithmetic evaluation (see\n"
 "    the `let' command) performed when the variable is assigned a value.\n"
 "    \n"
-"    When used in a function, `declare' makes NAMEs local, as with the `local'\n"
+"    When used in a function, `declare' makes NAMEs local, as with the "
+"`local'\n"
 "    command.  The `-g' option suppresses this behavior.\n"
 "    \n"
 "    Exit Status:\n"
@@ -3147,7 +3229,8 @@ msgstr ""
 "    komando „local‟.  La opcio „-g‟ ĉi tiun efikon abolas.\n"
 "\n"
 "    Eliistato:\n"
-"    Sukceso, krom se aperas misa opcio aŭ okazas eraro ĉe valorizo de variablo."
+"    Sukceso, krom se aperas misa opcio aŭ okazas eraro ĉe valorizo de "
+"variablo."
 
 # typeset [-aAfFgilrtux] [-p] name[=value] ...
 #: builtins.c:532
@@ -3193,7 +3276,8 @@ msgstr ""
 msgid ""
 "Write arguments to the standard output.\n"
 "    \n"
-"    Display the ARGs, separated by a single space character and followed by a\n"
+"    Display the ARGs, separated by a single space character and followed by "
+"a\n"
 "    newline, on the standard output.\n"
 "    \n"
 "    Options:\n"
@@ -3217,9 +3301,11 @@ msgid ""
 "    \t\t0 to 3 octal digits\n"
 "      \\xHH\tthe eight-bit character whose value is HH (hexadecimal).  HH\n"
 "    \t\tcan be one or two hex digits\n"
-"      \\uHHHH\tthe Unicode character whose value is the hexadecimal value HHHH.\n"
+"      \\uHHHH\tthe Unicode character whose value is the hexadecimal value "
+"HHHH.\n"
 "    \t\tHHHH can be one to four hex digits.\n"
-"      \\UHHHHHHHH the Unicode character whose value is the hexadecimal value\n"
+"      \\UHHHHHHHH the Unicode character whose value is the hexadecimal "
+"value\n"
 "    \t\tHHHHHHHH. HHHHHHHH can be one to eight hex digits.\n"
 "    \n"
 "    Exit Status:\n"
@@ -3343,7 +3429,8 @@ msgstr ""
 msgid ""
 "Execute arguments as a shell command.\n"
 "    \n"
-"    Combine ARGs into a single string, use the result as input to the shell,\n"
+"    Combine ARGs into a single string, use the result as input to the "
+"shell,\n"
 "    and execute the resulting commands.\n"
 "    \n"
 "    Exit Status:\n"
@@ -3445,7 +3532,8 @@ msgid ""
 "Replace the shell with the given command.\n"
 "    \n"
 "    Execute COMMAND, replacing this shell with the specified program.\n"
-"    ARGUMENTS become the arguments to COMMAND.  If COMMAND is not specified,\n"
+"    ARGUMENTS become the arguments to COMMAND.  If COMMAND is not "
+"specified,\n"
 "    any redirections take effect in the current shell.\n"
 "    \n"
 "    Options:\n"
@@ -3453,11 +3541,13 @@ msgid ""
 "      -c\texecute COMMAND with an empty environment\n"
 "      -l\tplace a dash in the zeroth argument to COMMAND\n"
 "    \n"
-"    If the command cannot be executed, a non-interactive shell exits, unless\n"
+"    If the command cannot be executed, a non-interactive shell exits, "
+"unless\n"
 "    the shell option `execfail' is set.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success unless COMMAND is not found or a redirection error occurs."
+"    Returns success unless COMMAND is not found or a redirection error "
+"occurs."
 msgstr ""
 "Anstataŭigu la ŝelon je la donita komando\n"
 "\n"
@@ -3496,7 +3586,8 @@ msgstr ""
 msgid ""
 "Exit a login shell.\n"
 "    \n"
-"    Exits a login shell with exit status N.  Returns an error if not executed\n"
+"    Exits a login shell with exit status N.  Returns an error if not "
+"executed\n"
 "    in a login shell."
 msgstr ""
 "Adiaŭ, saluta ŝelo!\n"
@@ -3512,13 +3603,15 @@ msgstr ""
 msgid ""
 "Display or execute commands from the history list.\n"
 "    \n"
-"    fc is used to list or edit and re-execute commands from the history list.\n"
+"    fc is used to list or edit and re-execute commands from the history "
+"list.\n"
 "    FIRST and LAST can be numbers specifying the range, or FIRST can be a\n"
 "    string, which means the most recent command beginning with that\n"
 "    string.\n"
 "    \n"
 "    Options:\n"
-"      -e ENAME\tselect which editor to use.  Default is FCEDIT, then EDITOR,\n"
+"      -e ENAME\tselect which editor to use.  Default is FCEDIT, then "
+"EDITOR,\n"
 "    \t\tthen vi\n"
 "      -l \tlist lines instead of editing\n"
 "      -n\tomit line numbers when listing\n"
@@ -3532,7 +3625,8 @@ msgid ""
 "    the last command.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success or status of executed command; non-zero if an error occurs."
+"    Returns success or status of executed command; non-zero if an error "
+"occurs."
 msgstr ""
 "Eligu aŭ plenumu komandojn el la historilisto\n"
 "\n"
@@ -3585,8 +3679,10 @@ msgstr ""
 msgid ""
 "Move jobs to the background.\n"
 "    \n"
-"    Place the jobs identified by each JOB_SPEC in the background, as if they\n"
-"    had been started with `&'.  If JOB_SPEC is not present, the shell's notion\n"
+"    Place the jobs identified by each JOB_SPEC in the background, as if "
+"they\n"
+"    had been started with `&'.  If JOB_SPEC is not present, the shell's "
+"notion\n"
 "    of the current job is used.\n"
 "    \n"
 "    Exit Status:\n"
@@ -3608,7 +3704,8 @@ msgid ""
 "Remember or display program locations.\n"
 "    \n"
 "    Determine and remember the full pathname of each command NAME.  If\n"
-"    no arguments are given, information about remembered commands is displayed.\n"
+"    no arguments are given, information about remembered commands is "
+"displayed.\n"
 "    \n"
 "    Options:\n"
 "      -d\tforget the remembered location of each NAME\n"
@@ -3666,7 +3763,8 @@ msgid ""
 "      PATTERN\tPattern specifying a help topic\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success unless PATTERN is not found or an invalid option is given."
+"    Returns success unless PATTERN is not found or an invalid option is "
+"given."
 msgstr ""
 "Vidigu informon pri prmitivaj komandoj\n"
 "\n"
@@ -3720,7 +3818,8 @@ msgid ""
 "    \n"
 "    If the HISTTIMEFORMAT variable is set and not null, its value is used\n"
 "    as a format string for strftime(3) to print the time stamp associated\n"
-"    with each displayed history entry.  No time stamps are printed otherwise.\n"
+"    with each displayed history entry.  No time stamps are printed "
+"otherwise.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns success unless an invalid option is given or an error occurs."
@@ -3901,7 +4000,8 @@ msgid ""
 "    Evaluate each ARG as an arithmetic expression.  Evaluation is done in\n"
 "    fixed-width integers with no check for overflow, though division by 0\n"
 "    is trapped and flagged as an error.  The following list of operators is\n"
-"    grouped into levels of equal-precedence operators.  The levels are listed\n"
+"    grouped into levels of equal-precedence operators.  The levels are "
+"listed\n"
 "    in order of decreasing precedence.\n"
 "    \n"
 "    \tid++, id--\tvariable post-increment, post-decrement\n"
@@ -3984,17 +4084,23 @@ msgstr ""
 # read [-ers] [-a TABELO] [-d DISIG] [-i TEKSTO] [-n NSIGN] [-N NSIGN]
 #      [-p INVIT] [-t TLIM] [-u DN] [NOMO ...]
 #: builtins.c:994
+#, fuzzy
 msgid ""
 "Read a line from the standard input and split it into fields.\n"
 "    \n"
 "    Reads a single line from the standard input, or from file descriptor FD\n"
-"    if the -u option is supplied.  The line is split into fields as with word\n"
+"    if the -u option is supplied.  The line is split into fields as with "
+"word\n"
 "    splitting, and the first word is assigned to the first NAME, the second\n"
 "    word to the second NAME, and so on, with any leftover words assigned to\n"
-"    the last NAME.  Only the characters found in $IFS are recognized as word\n"
-"    delimiters.\n"
+"    the last NAME.  Only the characters found in $IFS are recognized as "
+"word\n"
+"    delimiters. By default, the backslash character escapes delimiter "
+"characters\n"
+"    and newline.\n"
 "    \n"
-"    If no NAMEs are supplied, the line read is stored in the REPLY variable.\n"
+"    If no NAMEs are supplied, the line read is stored in the REPLY "
+"variable.\n"
 "    \n"
 "    Options:\n"
 "      -a array\tassign the words read to sequential indices of the array\n"
@@ -4006,7 +4112,8 @@ msgid ""
 "      -n nchars\treturn after reading NCHARS characters rather than waiting\n"
 "    \t\tfor a newline, but honor a delimiter if fewer than\n"
 "    \t\tNCHARS characters are read before the delimiter\n"
-"      -N nchars\treturn only after reading exactly NCHARS characters, unless\n"
+"      -N nchars\treturn only after reading exactly NCHARS characters, "
+"unless\n"
 "    \t\tEOF is encountered or read times out, ignoring any\n"
 "    \t\tdelimiter\n"
 "      -p prompt\toutput the string PROMPT without a trailing newline before\n"
@@ -4024,8 +4131,10 @@ msgid ""
 "      -u fd\tread from file descriptor FD instead of the standard input\n"
 "    \n"
 "    Exit Status:\n"
-"    The return code is zero, unless end-of-file is encountered, read times out\n"
-"    (in which case it's greater than 128), a variable assignment error occurs,\n"
+"    The return code is zero, unless end-of-file is encountered, read times "
+"out\n"
+"    (in which case it's greater than 128), a variable assignment error "
+"occurs,\n"
 "    or an invalid file descriptor is supplied as the argument to -u."
 msgstr ""
 "Legu linion el la ĉefenigujo kaj disigu ĝin en kampojn\n"
@@ -4072,7 +4181,7 @@ msgstr ""
 
 # return [n]
 # return [N]
-#: builtins.c:1041
+#: builtins.c:1042
 msgid ""
 "Return from a shell function.\n"
 "    \n"
@@ -4094,7 +4203,7 @@ msgstr ""
 
 # set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]
 # set [-abefhkmnptuvxBCHP] [-o OPCINOMO] [--] [ARG ...]
-#: builtins.c:1054
+#: builtins.c:1055
 msgid ""
 "Set or unset values of shell options and positional parameters.\n"
 "    \n"
@@ -4137,7 +4246,8 @@ msgid ""
 "              physical     same as -P\n"
 "              pipefail     the return value of a pipeline is the status of\n"
 "                           the last command to exit with a non-zero status,\n"
-"                           or zero if no command exited with a non-zero status\n"
+"                           or zero if no command exited with a non-zero "
+"status\n"
 "              posix        change the behavior of bash where the default\n"
 "                           operation differs from the Posix standard to\n"
 "                           match the standard\n"
@@ -4161,7 +4271,8 @@ msgid ""
 "          by default when the shell is interactive.\n"
 "      -P  If set, do not resolve symbolic links when executing commands\n"
 "          such as cd which change the current directory.\n"
-"      -T  If set, the DEBUG and RETURN traps are inherited by shell functions.\n"
+"      -T  If set, the DEBUG and RETURN traps are inherited by shell "
+"functions.\n"
 "      --  Assign any remaining arguments to the positional parameters.\n"
 "          If there are no remaining arguments, the positional parameters\n"
 "          are unset.\n"
@@ -4263,7 +4374,7 @@ msgstr ""
 
 # unset [-f] [-v] [name ...]
 # unset [-f] [-v] [NOMO ...]
-#: builtins.c:1139
+#: builtins.c:1140
 msgid ""
 "Unset values and attributes of shell variables and functions.\n"
 "    \n"
@@ -4275,7 +4386,8 @@ msgid ""
 "      -n\ttreat each NAME as a name reference and unset the variable itself\n"
 "    \t\trather than the variable it references\n"
 "    \n"
-"    Without options, unset first tries to unset a variable, and if that fails,\n"
+"    Without options, unset first tries to unset a variable, and if that "
+"fails,\n"
 "    tries to unset a function.\n"
 "    \n"
 "    Some variables cannot be unset; also see `readonly'.\n"
@@ -4303,12 +4415,13 @@ msgstr ""
 
 # export [-fn] [name[=value] ...] or export -p
 # export [-fn] [NOMO[=VALORO] ...]  aŭ  export -p
-#: builtins.c:1161
+#: builtins.c:1162
 msgid ""
 "Set export attribute for shell variables.\n"
 "    \n"
 "    Marks each NAME for automatic export to the environment of subsequently\n"
-"    executed commands.  If VALUE is supplied, assign VALUE before exporting.\n"
+"    executed commands.  If VALUE is supplied, assign VALUE before "
+"exporting.\n"
 "    \n"
 "    Options:\n"
 "      -f\trefer to shell functions\n"
@@ -4338,7 +4451,7 @@ msgstr ""
 
 # readonly [-aAf] [name[=value] ...] or readonly -p
 # readonly [-aAf] [NOMO[=VALORO] ...]  aŭ  readonly -p
-#: builtins.c:1180
+#: builtins.c:1181
 msgid ""
 "Mark shell variables as unchangeable.\n"
 "    \n"
@@ -4377,7 +4490,7 @@ msgstr ""
 "    Sukceso, krom se aperas nevalida nomo aŭ misa opcio."
 
 # shift [n]
-#: builtins.c:1202
+#: builtins.c:1203
 msgid ""
 "Shift positional parameters.\n"
 "    \n"
@@ -4394,7 +4507,7 @@ msgstr ""
 
 # source filename [arguments]
 # source DOSIERNOMO [ARGUMENTOJ]
-#: builtins.c:1214 builtins.c:1229
+#: builtins.c:1215 builtins.c:1230
 msgid ""
 "Execute commands from a file in the current shell.\n"
 "    \n"
@@ -4419,7 +4532,7 @@ msgstr ""
 "    DOSIERNOMO ne legeblas."
 
 # suspend [-f]
-#: builtins.c:1245
+#: builtins.c:1246
 msgid ""
 "Suspend shell execution.\n"
 "    \n"
@@ -4445,7 +4558,7 @@ msgstr ""
 
 # test [expr]
 # test [ESPRIMO]
-#: builtins.c:1261
+#: builtins.c:1262
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -4479,7 +4592,8 @@ msgid ""
 "      -x FILE        True if the file is executable by you.\n"
 "      -O FILE        True if the file is effectively owned by you.\n"
 "      -G FILE        True if the file is effectively owned by your group.\n"
-"      -N FILE        True if the file has been modified since it was last read.\n"
+"      -N FILE        True if the file has been modified since it was last "
+"read.\n"
 "    \n"
 "      FILE1 -nt FILE2  True if file1 is newer than file2 (according to\n"
 "                       modification date).\n"
@@ -4500,7 +4614,8 @@ msgid ""
 "      STRING1 != STRING2\n"
 "                     True if the strings are not equal.\n"
 "      STRING1 < STRING2\n"
-"                     True if STRING1 sorts before STRING2 lexicographically.\n"
+"                     True if STRING1 sorts before STRING2 "
+"lexicographically.\n"
 "      STRING1 > STRING2\n"
 "                     True if STRING1 sorts after STRING2 lexicographically.\n"
 "    \n"
@@ -4600,7 +4715,7 @@ msgstr ""
 "    argumento."
 
 # [ arg... ]
-#: builtins.c:1343
+#: builtins.c:1344
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -4610,11 +4725,12 @@ msgstr ""
 "Ĉi tiu estas sinonimo de la primitivo „test‟; tamen la lasta\n"
 "    argumento devas esti „]‟ fermanta la esprimon komencitan per „[‟."
 
-#: builtins.c:1352
+#: builtins.c:1353
 msgid ""
 "Display process times.\n"
 "    \n"
-"    Prints the accumulated user and system times for the shell and all of its\n"
+"    Prints the accumulated user and system times for the shell and all of "
+"its\n"
 "    child processes.\n"
 "    \n"
 "    Exit Status:\n"
@@ -4630,11 +4746,12 @@ msgstr ""
 
 # trap [-lp] [[arg] signal_spec ...]
 # trap [-lp] [[ARG] SIGNALINDIKO ...]
-#: builtins.c:1364
+#: builtins.c:1365
 msgid ""
 "Trap signals and other events.\n"
 "    \n"
-"    Defines and activates handlers to be run when the shell receives signals\n"
+"    Defines and activates handlers to be run when the shell receives "
+"signals\n"
 "    or other conditions.\n"
 "    \n"
 "    ARG is a command to be read and executed when the shell receives the\n"
@@ -4643,26 +4760,34 @@ msgid ""
 "    value.  If ARG is the null string each SIGNAL_SPEC is ignored by the\n"
 "    shell and by the commands it invokes.\n"
 "    \n"
-"    If a SIGNAL_SPEC is EXIT (0) ARG is executed on exit from the shell.  If\n"
-"    a SIGNAL_SPEC is DEBUG, ARG is executed before every simple command.  If\n"
-"    a SIGNAL_SPEC is RETURN, ARG is executed each time a shell function or a\n"
-"    script run by the . or source builtins finishes executing.  A SIGNAL_SPEC\n"
-"    of ERR means to execute ARG each time a command's failure would cause the\n"
+"    If a SIGNAL_SPEC is EXIT (0) ARG is executed on exit from the shell.  "
+"If\n"
+"    a SIGNAL_SPEC is DEBUG, ARG is executed before every simple command.  "
+"If\n"
+"    a SIGNAL_SPEC is RETURN, ARG is executed each time a shell function or "
+"a\n"
+"    script run by the . or source builtins finishes executing.  A "
+"SIGNAL_SPEC\n"
+"    of ERR means to execute ARG each time a command's failure would cause "
+"the\n"
 "    shell to exit when the -e option is enabled.\n"
 "    \n"
-"    If no arguments are supplied, trap prints the list of commands associated\n"
+"    If no arguments are supplied, trap prints the list of commands "
+"associated\n"
 "    with each signal.\n"
 "    \n"
 "    Options:\n"
 "      -l\tprint a list of signal names and their corresponding numbers\n"
 "      -p\tdisplay the trap commands associated with each SIGNAL_SPEC\n"
 "    \n"
-"    Each SIGNAL_SPEC is either a signal name in <signal.h> or a signal number.\n"
+"    Each SIGNAL_SPEC is either a signal name in <signal.h> or a signal "
+"number.\n"
 "    Signal names are case insensitive and the SIG prefix is optional.  A\n"
 "    signal may be sent to the shell with \"kill -signal $$\".\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success unless a SIGSPEC is invalid or an invalid option is given."
+"    Returns success unless a SIGSPEC is invalid or an invalid option is "
+"given."
 msgstr ""
 "Kaptu signalojn kaj aliajn eventojn\n"
 "\n"
@@ -4700,7 +4825,7 @@ msgstr ""
 
 # type [-afptP] name [name ...]
 # type [-afptP] NOMO [NOMO ...]
-#: builtins.c:1400
+#: builtins.c:1401
 msgid ""
 "Display information about command type.\n"
 "    \n"
@@ -4726,7 +4851,8 @@ msgid ""
 "      NAME\tCommand name to be interpreted.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success if all of the NAMEs are found; fails if any are not found."
+"    Returns success if all of the NAMEs are found; fails if any are not "
+"found."
 msgstr ""
 "Vidigu informon pri tipo de komando\n"
 "\n"
@@ -4757,11 +4883,12 @@ msgstr ""
 
 # ulimit [-SHacdefilmnpqrstuvx] [limit]
 # ulimit [-SHacdefilmnpqrstuvx] [LIMO]
-#: builtins.c:1431
+#: builtins.c:1432
 msgid ""
 "Modify shell resource limits.\n"
 "    \n"
-"    Provides control over the resources available to the shell and processes\n"
+"    Provides control over the resources available to the shell and "
+"processes\n"
 "    it creates, on systems that allow such control.\n"
 "    \n"
 "    Options:\n"
@@ -4854,7 +4981,7 @@ msgstr ""
 
 # umask [-p] [-S] [mode]
 # umask [-p] [-S] [REĜIMO]
-#: builtins.c:1482
+#: builtins.c:1483
 msgid ""
 "Display or set file mode mask.\n"
 "    \n"
@@ -4889,23 +5016,27 @@ msgstr ""
 
 # wait [-fn] [id ...]
 # wait [-fn] [IND ...]
-#: builtins.c:1502
+#: builtins.c:1503
 msgid ""
 "Wait for job completion and return exit status.\n"
 "    \n"
-"    Waits for each process identified by an ID, which may be a process ID or a\n"
+"    Waits for each process identified by an ID, which may be a process ID or "
+"a\n"
 "    job specification, and reports its termination status.  If ID is not\n"
 "    given, waits for all currently active child processes, and the return\n"
 "    status is zero.  If ID is a job specification, waits for all processes\n"
 "    in that job's pipeline.\n"
 "    \n"
-"    If the -n option is supplied, waits for a single job from the list of IDs,\n"
-"    or, if no IDs are supplied, for the next job to complete and returns its\n"
+"    If the -n option is supplied, waits for a single job from the list of "
+"IDs,\n"
+"    or, if no IDs are supplied, for the next job to complete and returns "
+"its\n"
 "    exit status.\n"
 "    \n"
 "    If the -p option is supplied, the process or job identifier of the job\n"
 "    for which the exit status is returned is assigned to the variable VAR\n"
-"    named by the option argument. The variable will be unset initially, before\n"
+"    named by the option argument. The variable will be unset initially, "
+"before\n"
 "    any assignment. This is useful only when the -n option is supplied.\n"
 "    \n"
 "    If the -f option is supplied, and job control is enabled, waits for the\n"
@@ -4943,16 +5074,18 @@ msgstr ""
 
 # wait [pid ...]
 # wait [PN ...]
-#: builtins.c:1533
+#: builtins.c:1534
 msgid ""
 "Wait for process completion and return exit status.\n"
 "    \n"
-"    Waits for each process specified by a PID and reports its termination status.\n"
+"    Waits for each process specified by a PID and reports its termination "
+"status.\n"
 "    If PID is not given, waits for all currently active child processes,\n"
 "    and the return status is zero.  PID must be a process ID.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns the status of the last PID; fails if PID is invalid or an invalid\n"
+"    Returns the status of the last PID; fails if PID is invalid or an "
+"invalid\n"
 "    option is given."
 msgstr ""
 "Atendu ke procezoj finiĝu, kaj liveru elirstaton\n"
@@ -4967,7 +5100,7 @@ msgstr ""
 
 # for NAME [in WORDS ... ] ; do COMMANDS; done
 # for NOMO [in VORTOJ ... ] ; do KOMANDOJ; done
-#: builtins.c:1548
+#: builtins.c:1549
 msgid ""
 "Execute commands for each member in a list.\n"
 "    \n"
@@ -4991,7 +5124,7 @@ msgstr ""
 
 # for (( exp1; exp2; exp3 )); do COMMANDS; done
 # for (( ESPR1; ESPR2; ESPR3 )); do KOMANDOJ; done
-#: builtins.c:1562
+#: builtins.c:1563
 msgid ""
 "Arithmetic for loop.\n"
 "    \n"
@@ -5023,7 +5156,7 @@ msgstr ""
 
 # select NAME [in WORDS ... ;] do COMMANDS; done
 # select NONO [in VORTOJ ... ;] do KOMANDOJ; done
-#: builtins.c:1580
+#: builtins.c:1581
 msgid ""
 "Select words from a list and execute commands.\n"
 "    \n"
@@ -5060,7 +5193,7 @@ msgstr ""
 
 # time [-p] PIPELINE
 # time [-p] DUKTO
-#: builtins.c:1601
+#: builtins.c:1602
 msgid ""
 "Report time consumed by pipeline's execution.\n"
 "    \n"
@@ -5091,7 +5224,7 @@ msgstr ""
 
 # case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac
 # case VORTO in [ŜABLONO [| ŜABLONO]...) KOMANDOJ ;;]... esac
-#: builtins.c:1618
+#: builtins.c:1619
 msgid ""
 "Execute commands based on pattern matching.\n"
 "    \n"
@@ -5113,16 +5246,21 @@ msgstr ""
 # [ else COMMANDS; ] fi
 # if KOMANDOJ; then KOMANDOJ;[ elif KOMANDOJ; then KOMANDOJ; ]...
 # [ else KOMANDOJ; ] fi
-#: builtins.c:1630
+#: builtins.c:1631
 msgid ""
 "Execute commands based on conditional.\n"
 "    \n"
-"    The `if COMMANDS' list is executed.  If its exit status is zero, then the\n"
-"    `then COMMANDS' list is executed.  Otherwise, each `elif COMMANDS' list is\n"
+"    The `if COMMANDS' list is executed.  If its exit status is zero, then "
+"the\n"
+"    `then COMMANDS' list is executed.  Otherwise, each `elif COMMANDS' list "
+"is\n"
 "    executed in turn, and if its exit status is zero, the corresponding\n"
-"    `then COMMANDS' list is executed and the if command completes.  Otherwise,\n"
-"    the `else COMMANDS' list is executed, if present.  The exit status of the\n"
-"    entire construct is the exit status of the last command executed, or zero\n"
+"    `then COMMANDS' list is executed and the if command completes.  "
+"Otherwise,\n"
+"    the `else COMMANDS' list is executed, if present.  The exit status of "
+"the\n"
+"    entire construct is the exit status of the last command executed, or "
+"zero\n"
 "    if no condition tested true.\n"
 "    \n"
 "    Exit Status:\n"
@@ -5140,12 +5278,14 @@ msgstr ""
 
 # while COMMANDS; do COMMANDS; done
 # while KOMANDOJ; do KOMANDOJ; done
-#: builtins.c:1647
+#: builtins.c:1648
+#, fuzzy
 msgid ""
 "Execute commands as long as a test succeeds.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `while' COMMANDS has an exit status of zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS "
+"has\n"
+"    an exit status of zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
@@ -5160,12 +5300,14 @@ msgstr ""
 
 # until COMMANDS; do COMMANDS; done
 # until KOMANDOJ; do KOMANDOJ; done
-#: builtins.c:1659
+#: builtins.c:1660
+#, fuzzy
 msgid ""
 "Execute commands as long as a test does not succeed.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `until' COMMANDS has an exit status which is not zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS "
+"has\n"
+"    an exit status which is not zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
@@ -5180,7 +5322,7 @@ msgstr ""
 
 # coproc [NAME] command [redirections]
 # coproc [NOMO] KOMANDO [ALIDIREKTADOJ]
-#: builtins.c:1671
+#: builtins.c:1672
 msgid ""
 "Create a coprocess named NAME.\n"
 "    \n"
@@ -5204,12 +5346,13 @@ msgstr ""
 
 # function name { COMMANDS ; } or name () { COMMANDS ; }
 # function NOMO { KOMANDOJ ; }  aŭ  NOMO () { KOMANDOJ ; }
-#: builtins.c:1685
+#: builtins.c:1686
 msgid ""
 "Define shell function.\n"
 "    \n"
 "    Create a shell function named NAME.  When invoked as a simple command,\n"
-"    NAME runs COMMANDs in the calling shell's context.  When NAME is invoked,\n"
+"    NAME runs COMMANDs in the calling shell's context.  When NAME is "
+"invoked,\n"
 "    the arguments are passed to the function as $1...$n, and the function's\n"
 "    name is in $FUNCNAME.\n"
 "    \n"
@@ -5228,7 +5371,7 @@ msgstr ""
 
 # grouping_braces: { COMMANDS ; }
 # { KOMANDOJ ; }
-#: builtins.c:1699
+#: builtins.c:1700
 msgid ""
 "Group commands as a unit.\n"
 "    \n"
@@ -5248,7 +5391,7 @@ msgstr ""
 
 # job_spec [&]
 # LABORINDIKO [&]
-#: builtins.c:1711
+#: builtins.c:1712
 msgid ""
 "Resume job in foreground.\n"
 "    \n"
@@ -5273,7 +5416,7 @@ msgstr ""
 
 # (( expression ))
 # (( ESPRIMO ))
-#: builtins.c:1726
+#: builtins.c:1727
 msgid ""
 "Evaluate arithmetic expression.\n"
 "    \n"
@@ -5293,13 +5436,16 @@ msgstr ""
 
 # [[ expression ]]
 # [[ ESPRIMO ]]
-#: builtins.c:1738
+#: builtins.c:1739
 msgid ""
 "Execute conditional command.\n"
 "    \n"
-"    Returns a status of 0 or 1 depending on the evaluation of the conditional\n"
-"    expression EXPRESSION.  Expressions are composed of the same primaries used\n"
-"    by the `test' builtin, and may be combined using the following operators:\n"
+"    Returns a status of 0 or 1 depending on the evaluation of the "
+"conditional\n"
+"    expression EXPRESSION.  Expressions are composed of the same primaries "
+"used\n"
+"    by the `test' builtin, and may be combined using the following "
+"operators:\n"
 "    \n"
 "      ( EXPRESSION )\tReturns the value of EXPRESSION\n"
 "      ! EXPRESSION\t\tTrue if EXPRESSION is false; else false\n"
@@ -5341,7 +5487,7 @@ msgstr ""
 
 # help var
 # variables - Names and meanings of some shell variables
-#: builtins.c:1764
+#: builtins.c:1765
 msgid ""
 "Common shell variable names and usage.\n"
 "    \n"
@@ -5448,7 +5594,7 @@ msgstr ""
 
 # pushd [-n] [+N | -N | dir]
 # pushd [-n] [+N | -N | DOSIERUJO]
-#: builtins.c:1821
+#: builtins.c:1822
 msgid ""
 "Add directories to stack.\n"
 "    \n"
@@ -5507,7 +5653,7 @@ msgstr ""
 "    Sukceso, krom se aperas misa argumento aŭ se cd malsukcesas."
 
 # popd [-n] [+N | -N]
-#: builtins.c:1855
+#: builtins.c:1856
 msgid ""
 "Remove directories from stack.\n"
 "    \n"
@@ -5556,7 +5702,7 @@ msgstr ""
 "    Sukceso, krom se aperas misa argumento aŭ se cd malsukcesas."
 
 # dirs [-clpv] [+N] [-N]
-#: builtins.c:1885
+#: builtins.c:1886
 msgid ""
 "Display directory stack.\n"
 "    \n"
@@ -5610,7 +5756,7 @@ msgstr ""
 
 # shopt [-pqsu] [-o] [optname ...]
 # shopt [-pqsu] [-o] [OPCINOMO ...]
-#: builtins.c:1916
+#: builtins.c:1917
 msgid ""
 "Set and unset shell options.\n"
 "    \n"
@@ -5649,7 +5795,8 @@ msgstr ""
 
 # printf [-v var] format [arguments]
 # printf [-v VAR] FORMATO [ARGUMENTOJ]
-#: builtins.c:1937
+#: builtins.c:1938
+#, fuzzy
 msgid ""
 "Formats and prints ARGUMENTS under control of the FORMAT.\n"
 "    \n"
@@ -5657,27 +5804,36 @@ msgid ""
 "      -v var\tassign the output to shell variable VAR rather than\n"
 "    \t\tdisplay it on the standard output\n"
 "    \n"
-"    FORMAT is a character string which contains three types of objects: plain\n"
-"    characters, which are simply copied to standard output; character escape\n"
+"    FORMAT is a character string which contains three types of objects: "
+"plain\n"
+"    characters, which are simply copied to standard output; character "
+"escape\n"
 "    sequences, which are converted and copied to the standard output; and\n"
-"    format specifications, each of which causes printing of the next successive\n"
+"    format specifications, each of which causes printing of the next "
+"successive\n"
 "    argument.\n"
 "    \n"
-"    In addition to the standard format specifications described in printf(1),\n"
+"    In addition to the standard format specifications described in "
+"printf(1),\n"
 "    printf interprets:\n"
 "    \n"
 "      %b\texpand backslash escape sequences in the corresponding argument\n"
 "      %q\tquote the argument in a way that can be reused as shell input\n"
-"      %(fmt)T\toutput the date-time string resulting from using FMT as a format\n"
+"      %Q\tlike %q, but apply any precision to the unquoted argument before\n"
+"    \t\tquoting\n"
+"      %(fmt)T\toutput the date-time string resulting from using FMT as a "
+"format\n"
 "    \t        string for strftime(3)\n"
 "    \n"
 "    The format is re-used as necessary to consume all of the arguments.  If\n"
 "    there are fewer arguments than the format requires,  extra format\n"
-"    specifications behave as if a zero value or null string, as appropriate,\n"
+"    specifications behave as if a zero value or null string, as "
+"appropriate,\n"
 "    had been supplied.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success unless an invalid option is given or a write or assignment\n"
+"    Returns success unless an invalid option is given or a write or "
+"assignment\n"
 "    error occurs."
 msgstr ""
 "Aranĝu kaj eligu ARGUMENTOJn laŭ FORMATO.\n"
@@ -5709,12 +5865,14 @@ msgstr ""
 # complete [-abcdefgjksuv] [-pr] [-DEI] [-o OPCIO] [-A AGO] [-G ŜABLONO]
 #          [-W VORTLISTO]  [-F FUNKCIO] [-C KOMANDO] [-X FILTRILO]
 #          [-P PREFIKSO] [-S SUFIKSO] [NOMO ...]
-#: builtins.c:1971
+#: builtins.c:1974
 msgid ""
 "Specify how arguments are to be completed by Readline.\n"
 "    \n"
-"    For each NAME, specify how arguments are to be completed.  If no options\n"
-"    are supplied, existing completion specifications are printed in a way that\n"
+"    For each NAME, specify how arguments are to be completed.  If no "
+"options\n"
+"    are supplied, existing completion specifications are printed in a way "
+"that\n"
 "    allows them to be reused as input.\n"
 "    \n"
 "    Options:\n"
@@ -5729,8 +5887,10 @@ msgid ""
 "    \t\tcommand) word\n"
 "    \n"
 "    When completion is attempted, the actions are applied in the order the\n"
-"    uppercase-letter options are listed above. If multiple options are supplied,\n"
-"    the -D option takes precedence over -E, and both take precedence over -I.\n"
+"    uppercase-letter options are listed above. If multiple options are "
+"supplied,\n"
+"    the -D option takes precedence over -E, and both take precedence over -"
+"I.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns success unless an invalid option is supplied or an error occurs."
@@ -5766,12 +5926,13 @@ msgstr ""
 # compgen [-abcdefgjksuv] [-o OPCIO]  [-A AGO] [-G ŜABLONO]
 #      [-W VORTLISTO]  [-F FUNKCIO] [-C KOMANDO] [-X FILTRILO]
 #      [-P PREFIKSO] [-S SUFIKSO] [VORTO]
-#: builtins.c:2001
+#: builtins.c:2004
 msgid ""
 "Display possible completions depending on the options.\n"
 "    \n"
 "    Intended to be used from within a shell function generating possible\n"
-"    completions.  If the optional WORD argument is supplied, matches against\n"
+"    completions.  If the optional WORD argument is supplied, matches "
+"against\n"
 "    WORD are generated.\n"
 "    \n"
 "    Exit Status:\n"
@@ -5786,13 +5947,16 @@ msgstr ""
 "    Sukceso, krom se aperas misa opcio aŭ okazas eraro."
 
 # compopt [-o|+o OPCIO] [-DE] [NOMO ...]
-#: builtins.c:2016
+#: builtins.c:2019
 msgid ""
 "Modify or display completion options.\n"
 "    \n"
-"    Modify the completion options for each NAME, or, if no NAMEs are supplied,\n"
-"    the completion currently being executed.  If no OPTIONs are given, print\n"
-"    the completion options for each NAME or the current completion specification.\n"
+"    Modify the completion options for each NAME, or, if no NAMEs are "
+"supplied,\n"
+"    the completion currently being executed.  If no OPTIONs are given, "
+"print\n"
+"    the completion options for each NAME or the current completion "
+"specification.\n"
 "    \n"
 "    Options:\n"
 "    \t-o option\tSet completion option OPTION for each NAME\n"
@@ -5844,21 +6008,26 @@ msgstr ""
 #      [-c quantum] [array]
 # mapfile [-n NOMBRILO] [-O ORIGINO] [-s NOMBRILO] [-t] [-u DN] [-C RETROVOKO]
 #      [-c KVANTO] [TABELO] 
-#: builtins.c:2047
+#: builtins.c:2050
 msgid ""
 "Read lines from the standard input into an indexed array variable.\n"
 "    \n"
-"    Read lines from the standard input into the indexed array variable ARRAY, or\n"
-"    from file descriptor FD if the -u option is supplied.  The variable MAPFILE\n"
+"    Read lines from the standard input into the indexed array variable "
+"ARRAY, or\n"
+"    from file descriptor FD if the -u option is supplied.  The variable "
+"MAPFILE\n"
 "    is the default ARRAY.\n"
 "    \n"
 "    Options:\n"
 "      -d delim\tUse DELIM to terminate lines, instead of newline\n"
-"      -n count\tCopy at most COUNT lines.  If COUNT is 0, all lines are copied\n"
-"      -O origin\tBegin assigning to ARRAY at index ORIGIN.  The default index is 0\n"
+"      -n count\tCopy at most COUNT lines.  If COUNT is 0, all lines are "
+"copied\n"
+"      -O origin\tBegin assigning to ARRAY at index ORIGIN.  The default "
+"index is 0\n"
 "      -s count\tDiscard the first COUNT lines read\n"
 "      -t\tRemove a trailing DELIM from each line read (default newline)\n"
-"      -u fd\tRead lines from file descriptor FD instead of the standard input\n"
+"      -u fd\tRead lines from file descriptor FD instead of the standard "
+"input\n"
 "      -C callback\tEvaluate CALLBACK each time QUANTUM lines are read\n"
 "      -c quantum\tSpecify the number of lines read between each call to\n"
 "    \t\t\tCALLBACK\n"
@@ -5871,11 +6040,13 @@ msgid ""
 "    element to be assigned and the line to be assigned to that element\n"
 "    as additional arguments.\n"
 "    \n"
-"    If not supplied with an explicit origin, mapfile will clear ARRAY before\n"
+"    If not supplied with an explicit origin, mapfile will clear ARRAY "
+"before\n"
 "    assigning to it.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success unless an invalid option is given or ARRAY is readonly or\n"
+"    Returns success unless an invalid option is given or ARRAY is readonly "
+"or\n"
 "    not an indexed array."
 msgstr ""
 "Legu liniojn el la ĉefenigujo en tabelvariablon\n"
@@ -5914,7 +6085,7 @@ msgstr ""
 
 # readarray [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback]
 #        [-c quantum] [array]
-#: builtins.c:2083
+#: builtins.c:2086
 msgid ""
 "Read lines from a file into an array variable.\n"
 "    \n"
@@ -5923,3 +6094,7 @@ msgstr ""
 "Legu liniojn el dosiero en tabelvariablon.\n"
 "\n"
 "    Sinonimo de „mapfile‟."
+
+#, c-format
+#~ msgid "%s: invalid associative array key"
+#~ msgstr "%s: Misa asocitabela ŝlosilo"
index 06e833a9efe106eed977c0e7aae3603dfd44515c..68edd53ccae3d245191c213fe10b810a6e26ca25 100644 (file)
Binary files a/po/es.gmo and b/po/es.gmo differ
index 526963c8461685d7f5bc48aeabacd4885681097c..66ac8e6617021fd9941b952779e79532927d1f40 100644 (file)
--- a/po/es.po
+++ b/po/es.po
@@ -3,14 +3,14 @@
 # This file is distributed under the same license as the bash package.
 # Cristian Othón Martínez Vera <cfuga@cfuga.mx>, 2000 - 2011.
 # Francisco Javier Serrador <fserrador@gmail.com>
-# Antonio Ceballos Roa <aceballos@gmail.com>, 2018, 2019, 2020
+# Antonio Ceballos Roa <aceballos@gmail.com>, 2018, 2019, 2020, 2022
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: GNU bash 5.1\n"
+"Project-Id-Version: GNU bash 5.2-rc1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-11-28 12:51-0500\n"
-"PO-Revision-Date: 2020-12-08 20:10+0100\n"
+"POT-Creation-Date: 2022-01-11 14:50-0500\n"
+"PO-Revision-Date: 2022-09-21 08:56+0200\n"
 "Last-Translator: Antonio Ceballos Roa <aceballos@gmail.com>\n"
 "Language-Team: Spanish <es@tp.org.es>\n"
 "Language: es\n"
@@ -24,57 +24,52 @@ msgstr ""
 msgid "bad array subscript"
 msgstr "subíndice de matriz incorrecto"
 
-#: arrayfunc.c:421 builtins/declare.def:638 variables.c:2274 variables.c:2300
-#: variables.c:3133
+#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268
+#: variables.c:3101
 #, c-format
 msgid "%s: removing nameref attribute"
 msgstr "%s: se elimina el atributo nameref"
 
-#: arrayfunc.c:446 builtins/declare.def:851
+#: arrayfunc.c:496 builtins/declare.def:868
 #, c-format
 msgid "%s: cannot convert indexed to associative array"
 msgstr "%s: no se puede convertir la matriz indexada en asociativa"
 
-#: arrayfunc.c:700
-#, c-format
-msgid "%s: invalid associative array key"
-msgstr "%s: clave de matriz asociativa no válida"
-
-#: arrayfunc.c:702
+#: arrayfunc.c:777
 #, c-format
 msgid "%s: cannot assign to non-numeric index"
 msgstr "%s: no se puede asignar a un índice que no es numérico"
 
-#: arrayfunc.c:747
+#: arrayfunc.c:822
 #, c-format
 msgid "%s: %s: must use subscript when assigning associative array"
 msgstr "%s: %s: se debe usar un subíndice al asignar a una matriz asociativa"
 
-#: bashhist.c:452
+#: bashhist.c:455
 #, c-format
 msgid "%s: cannot create: %s"
 msgstr "%s: no se puede crear: %s"
 
-#: bashline.c:4310
+#: bashline.c:4479
 msgid "bash_execute_unix_command: cannot find keymap for command"
 msgstr "bash_execute_unix_command: no se puede encontrar la combinación de teclas para la orden"
 
-#: bashline.c:4459
+#: bashline.c:4637
 #, c-format
 msgid "%s: first non-whitespace character is not `\"'"
 msgstr "%s: el primer carácter que no es espacio en blanco no es «\"»"
 
-#: bashline.c:4488
+#: bashline.c:4666
 #, c-format
 msgid "no closing `%c' in %s"
 msgstr "no hay un `%c' que cierre en %s"
 
-#: bashline.c:4519
+#: bashline.c:4697
 #, c-format
 msgid "%s: missing colon separator"
 msgstr "%s: falta un «:» separador"
 
-#: bashline.c:4555
+#: bashline.c:4733
 #, c-format
 msgid "`%s': cannot unbind in command keymap"
 msgstr "`%s': no se puede borrar la asignación en la combinación de teclas de órdenes"
@@ -94,7 +89,7 @@ msgstr "expansión de llaves: fallo al asignar memoria a %u elementos"
 msgid "brace expansion: failed to allocate memory for `%s'"
 msgstr "expansión de llaves: fallo al asignar memoria a «%s»"
 
-#: builtins/alias.def:131 variables.c:1844
+#: builtins/alias.def:131 variables.c:1817
 #, c-format
 msgid "`%s': invalid alias name"
 msgstr "`%s': nombre de alias inválido"
@@ -165,7 +160,7 @@ msgstr ""
 msgid "HOME not set"
 msgstr "HOME no está definido"
 
-#: builtins/cd.def:335 builtins/common.c:161 test.c:901
+#: builtins/cd.def:335 builtins/common.c:161 test.c:916
 msgid "too many arguments"
 msgstr "demasiados argumentos"
 
@@ -192,7 +187,7 @@ msgstr "aviso: "
 msgid "%s: usage: "
 msgstr "%s: modo de empleo: "
 
-#: builtins/common.c:193 shell.c:516 shell.c:844
+#: builtins/common.c:193 shell.c:524 shell.c:866
 #, c-format
 msgid "%s: option requires an argument"
 msgstr "%s: la opción requiere un argumento"
@@ -207,7 +202,7 @@ msgstr "%s: se requiere un argumento numérico"
 msgid "%s: not found"
 msgstr "%s: no encontrado"
 
-#: builtins/common.c:216 shell.c:857
+#: builtins/common.c:216 shell.c:879
 #, c-format
 msgid "%s: invalid option"
 msgstr "%s: opción inválida"
@@ -217,7 +212,7 @@ msgstr "%s: opción inválida"
 msgid "%s: invalid option name"
 msgstr "%s: nombre de opción inválido"
 
-#: builtins/common.c:230 execute_cmd.c:2373 general.c:368 general.c:373
+#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373
 #, c-format
 msgid "`%s': not a valid identifier"
 msgstr "`%s': no es un identificador válido"
@@ -230,7 +225,7 @@ msgstr "número octal inválido"
 msgid "invalid hex number"
 msgstr "número hexadecimal inválido"
 
-#: builtins/common.c:244 expr.c:1569
+#: builtins/common.c:244 expr.c:1574
 msgid "invalid number"
 msgstr "número inválido"
 
@@ -244,88 +239,93 @@ msgstr "%s: la especificación de señal no es válida"
 msgid "`%s': not a pid or valid job spec"
 msgstr "`%s': no es un pid o una especificación válida de trabajo"
 
-#: builtins/common.c:266 error.c:510
+#: builtins/common.c:266 error.c:536
 #, c-format
 msgid "%s: readonly variable"
 msgstr "%s: variable de sólo lectura"
 
-#: builtins/common.c:274
+#: builtins/common.c:273
+#, c-format
+msgid "%s: cannot assign"
+msgstr "%s: no se puede asignar"
+
+#: builtins/common.c:281
 #, c-format
 msgid "%s: %s out of range"
 msgstr "%s: %s fuera de rango"
 
-#: builtins/common.c:274 builtins/common.c:276
+#: builtins/common.c:281 builtins/common.c:283
 msgid "argument"
 msgstr "argumento"
 
-#: builtins/common.c:276
+#: builtins/common.c:283
 #, c-format
 msgid "%s out of range"
 msgstr "%s fuera de rango"
 
-#: builtins/common.c:284
+#: builtins/common.c:291
 #, c-format
 msgid "%s: no such job"
 msgstr "%s: no existe ese trabajo"
 
-#: builtins/common.c:292
+#: builtins/common.c:299
 #, c-format
 msgid "%s: no job control"
 msgstr "%s: no hay control de trabajos"
 
-#: builtins/common.c:294
+#: builtins/common.c:301
 msgid "no job control"
 msgstr "no hay control de trabajos"
 
-#: builtins/common.c:304
+#: builtins/common.c:311
 #, c-format
 msgid "%s: restricted"
 msgstr "%s: restringido"
 
-#: builtins/common.c:306
+#: builtins/common.c:313
 msgid "restricted"
 msgstr "restringido"
 
-#: builtins/common.c:314
+#: builtins/common.c:321
 #, c-format
 msgid "%s: not a shell builtin"
 msgstr "%s: no es una orden interna de shell"
 
-#: builtins/common.c:323
+#: builtins/common.c:330
 #, c-format
 msgid "write error: %s"
 msgstr "error de escritura: %s"
 
-#: builtins/common.c:331
+#: builtins/common.c:338
 #, c-format
 msgid "error setting terminal attributes: %s"
 msgstr "error al establecer los atributos de la terminal: %s"
 
-#: builtins/common.c:333
+#: builtins/common.c:340
 #, c-format
 msgid "error getting terminal attributes: %s"
 msgstr "error al obtener los atributos de la terminal: %s"
 
-#: builtins/common.c:635
+#: builtins/common.c:642
 #, c-format
 msgid "%s: error retrieving current directory: %s: %s\n"
 msgstr "%s: error al obtener el directorio actual: %s: %s\n"
 
-#: builtins/common.c:701 builtins/common.c:703
+#: builtins/common.c:708 builtins/common.c:710
 #, c-format
 msgid "%s: ambiguous job spec"
 msgstr "%s: especificación de trabajo ambigua"
 
-#: builtins/common.c:964
+#: builtins/common.c:971
 msgid "help not available in this version"
 msgstr "ayuda no disponible en esta versión"
 
-#: builtins/common.c:1008 builtins/set.def:953 variables.c:3839
+#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825
 #, c-format
 msgid "%s: cannot unset: readonly %s"
 msgstr "%s: no se puede borrar: %s es de solo lectura"
 
-#: builtins/common.c:1013 builtins/set.def:932 variables.c:3844
+#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830
 #, c-format
 msgid "%s: cannot unset"
 msgstr "%s: no se puede borrar"
@@ -335,110 +335,110 @@ msgstr "%s: no se puede borrar"
 msgid "%s: invalid action name"
 msgstr "%s: nombre de acción inválido"
 
-#: builtins/complete.def:486 builtins/complete.def:634
-#: builtins/complete.def:865
+#: builtins/complete.def:486 builtins/complete.def:642
+#: builtins/complete.def:873
 #, c-format
 msgid "%s: no completion specification"
 msgstr "%s: no hay especificación para completado"
 
-#: builtins/complete.def:688
+#: builtins/complete.def:696
 msgid "warning: -F option may not work as you expect"
 msgstr "aviso: es posible que la opción -F no funcione como se espera"
 
-#: builtins/complete.def:690
+#: builtins/complete.def:698
 msgid "warning: -C option may not work as you expect"
 msgstr "aviso: es posible que la opción -C no funcione como se espera"
 
-#: builtins/complete.def:838
+#: builtins/complete.def:846
 msgid "not currently executing completion function"
 msgstr "no se está ejecutando la función de completado"
 
 # sólo se puede usar. sv
 # De acuerdo. cfuga
-#: builtins/declare.def:134
+#: builtins/declare.def:137
 msgid "can only be used in a function"
 msgstr "sólo se puede usar dentro de una función"
 
-#: builtins/declare.def:363 builtins/declare.def:756
+#: builtins/declare.def:437
+msgid "cannot use `-f' to make functions"
+msgstr "no se puede usar `-f' para hacer funciones"
+
+#: builtins/declare.def:464 execute_cmd.c:6132
+#, c-format
+msgid "%s: readonly function"
+msgstr "%s: función de sólo lectura"
+
+#: builtins/declare.def:521 builtins/declare.def:804
 #, c-format
 msgid "%s: reference variable cannot be an array"
 msgstr "%s: referencia variable no puede ser una matriz"
 
-#: builtins/declare.def:374 variables.c:3385
+#: builtins/declare.def:532 variables.c:3359
 #, c-format
 msgid "%s: nameref variable self references not allowed"
 msgstr "%s: no se permiten las autoreferencias a variables nameref"
 
-#: builtins/declare.def:379 variables.c:2104 variables.c:3304 variables.c:3312
-#: variables.c:3382
+#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286
+#: variables.c:3356
 #, c-format
 msgid "%s: circular name reference"
 msgstr "%s: referencia de nombre circular"
 
-#: builtins/declare.def:384 builtins/declare.def:762 builtins/declare.def:773
+#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820
 #, c-format
 msgid "`%s': invalid variable name for name reference"
 msgstr "`%s': nombre variable inválido para referencia de nombre"
 
-#: builtins/declare.def:514
-msgid "cannot use `-f' to make functions"
-msgstr "no se puede usar `-f' para hacer funciones"
-
-#: builtins/declare.def:526 execute_cmd.c:5986
-#, c-format
-msgid "%s: readonly function"
-msgstr "%s: función de sólo lectura"
-
-#: builtins/declare.def:824
-#, c-format
-msgid "%s: quoted compound array assignment deprecated"
-msgstr "%s: asignación obsoleta de matriz compuesta entrecomillada"
-
-#: builtins/declare.def:838
+#: builtins/declare.def:856
 #, c-format
 msgid "%s: cannot destroy array variables in this way"
 msgstr "%s: no se pueden destruir variables de matriz de esta forma"
 
-#: builtins/declare.def:845 builtins/read.def:815
+#: builtins/declare.def:862 builtins/read.def:887
 #, c-format
 msgid "%s: cannot convert associative to indexed array"
 msgstr "%s: no se puede convertir una matriz asociativa a indexada"
 
-#: builtins/enable.def:143 builtins/enable.def:151
+#: builtins/declare.def:891
+#, c-format
+msgid "%s: quoted compound array assignment deprecated"
+msgstr "%s: asignación obsoleta de matriz compuesta entrecomillada"
+
+#: builtins/enable.def:145 builtins/enable.def:153
 msgid "dynamic loading not available"
 msgstr "la carga dinámica no está disponible"
 
-#: builtins/enable.def:343
+#: builtins/enable.def:376
 #, c-format
 msgid "cannot open shared object %s: %s"
 msgstr "no se puede abrir el objeto compartido %s: %s"
 
-#: builtins/enable.def:371
+#: builtins/enable.def:405
 #, c-format
 msgid "cannot find %s in shared object %s: %s"
 msgstr "no se puede encontrar %s en el objeto compartido %s: %s"
 
-#: builtins/enable.def:388
+#: builtins/enable.def:422
 #, c-format
 msgid "%s: dynamic builtin already loaded"
 msgstr "%s: la orden interna dinámica ya está cargada"
 
-#: builtins/enable.def:392
+#: builtins/enable.def:426
 #, c-format
 msgid "load function for %s returns failure (%d): not loaded"
 msgstr "función de carga para %s devuelve fallo (%d): no se ha efectuado la carga"
 
-#: builtins/enable.def:517
+#: builtins/enable.def:551
 #, c-format
 msgid "%s: not dynamically loaded"
 msgstr "%s: no cargado dinámicamente"
 
-#: builtins/enable.def:543
+#: builtins/enable.def:577
 #, c-format
 msgid "%s: cannot delete: %s"
 msgstr "%s: no se puede borrar: %s"
 
-#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5818
+#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959
 #, c-format
 msgid "%s: is a directory"
 msgstr "%s: es un directorio"
@@ -455,7 +455,7 @@ msgstr "%s: el fichero es demasiado grande"
 
 # file=fichero. archive=archivo. Si no, es imposible traducir tar. sv
 # De acuerdo. Corregido en todo el fichero. cfuga
-#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1647
+#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673
 #, c-format
 msgid "%s: cannot execute binary file"
 msgstr "%s: no se puede ejecutar el fichero binario"
@@ -550,12 +550,12 @@ msgstr ""
 msgid "no help topics match `%s'.  Try `help help' or `man -k %s' or `info %s'."
 msgstr "no hay temas de ayuda que coincidan con `%s'.  Pruebe `help help' o `man -k %s' o `info %s'."
 
-#: builtins/help.def:224
+#: builtins/help.def:223
 #, c-format
 msgid "%s: cannot open: %s"
 msgstr "%s: no se puede abrir: %s"
 
-#: builtins/help.def:524
+#: builtins/help.def:523
 #, c-format
 msgid ""
 "These shell commands are defined internally.  Type `help' to see this list.\n"
@@ -576,21 +576,21 @@ msgstr ""
 "Un asterisco (*) junto a un nombre significa que la orden está desactivada.\n"
 "\n"
 
-#: builtins/history.def:155
+#: builtins/history.def:159
 msgid "cannot use more than one of -anrw"
 msgstr "no se puede usar más de uno de -anrw"
 
-#: builtins/history.def:188 builtins/history.def:198 builtins/history.def:213
-#: builtins/history.def:230 builtins/history.def:242 builtins/history.def:249
+#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215
+#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247
 msgid "history position"
 msgstr "posición en la historia"
 
-#: builtins/history.def:340
+#: builtins/history.def:338
 #, c-format
 msgid "%s: invalid timestamp"
 msgstr "%s: marca de tiempo inválida"
 
-#: builtins/history.def:451
+#: builtins/history.def:449
 #, c-format
 msgid "%s: history expansion failed"
 msgstr "%s: falló la expansión de la historia"
@@ -613,78 +613,78 @@ msgstr "%s: los argumentos deben ser IDs de procesos o trabajos"
 msgid "Unknown error"
 msgstr "Error desconocido"
 
-#: builtins/let.def:97 builtins/let.def:122 expr.c:639 expr.c:657
+#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658
 msgid "expression expected"
 msgstr "se esperaba una expresión"
 
-#: builtins/mapfile.def:178
+#: builtins/mapfile.def:180
 #, c-format
 msgid "%s: not an indexed array"
 msgstr "%s: no es una matriz indexada"
 
-#: builtins/mapfile.def:271 builtins/read.def:308
+#: builtins/mapfile.def:276 builtins/read.def:336
 #, c-format
 msgid "%s: invalid file descriptor specification"
 msgstr "%s: especificación de descriptor de fichero inválida"
 
-#: builtins/mapfile.def:279 builtins/read.def:315
+#: builtins/mapfile.def:284 builtins/read.def:343
 #, c-format
 msgid "%d: invalid file descriptor: %s"
 msgstr "%d: descriptor de fichero inválido: %s"
 
-#: builtins/mapfile.def:288 builtins/mapfile.def:326
+#: builtins/mapfile.def:293 builtins/mapfile.def:331
 #, c-format
 msgid "%s: invalid line count"
 msgstr "%s: cuenta de líneas inválida"
 
-#: builtins/mapfile.def:299
+#: builtins/mapfile.def:304
 #, c-format
 msgid "%s: invalid array origin"
 msgstr "%s: origen de matriz inválido"
 
-#: builtins/mapfile.def:316
+#: builtins/mapfile.def:321
 #, c-format
 msgid "%s: invalid callback quantum"
 msgstr "%s: quantum de llamada inválido"
 
-#: builtins/mapfile.def:349
+#: builtins/mapfile.def:354
 msgid "empty array variable name"
 msgstr "nombre de variable matriz vacío"
 
-#: builtins/mapfile.def:370
+#: builtins/mapfile.def:375
 msgid "array variable support required"
 msgstr "se requiere el soporte de variable de matriz"
 
-#: builtins/printf.def:419
+#: builtins/printf.def:430
 #, c-format
 msgid "`%s': missing format character"
 msgstr "`%s': falta el carácter de formato"
 
-#: builtins/printf.def:474
+#: builtins/printf.def:485
 #, c-format
 msgid "`%c': invalid time format specification"
 msgstr "`%c': especificación de formato de tiempo inválida"
 
-#: builtins/printf.def:676
+#: builtins/printf.def:708
 #, c-format
 msgid "`%c': invalid format character"
 msgstr "`%c': carácter de formato inválido"
 
-#: builtins/printf.def:702
+#: builtins/printf.def:734
 #, c-format
 msgid "warning: %s: %s"
 msgstr "aviso: %s: %s"
 
-#: builtins/printf.def:788
+#: builtins/printf.def:822
 #, c-format
 msgid "format parsing problem: %s"
 msgstr "problema con el análisis del formato: %s"
 
-#: builtins/printf.def:885
+#: builtins/printf.def:919
 msgid "missing hex digit for \\x"
 msgstr "falta el dígito hexadecimal para \\x"
 
-#: builtins/printf.def:900
+#: builtins/printf.def:934
 #, c-format
 msgid "missing unicode digit for \\%c"
 msgstr "falta el dígito unicode para \\%c"
@@ -836,12 +836,12 @@ msgstr ""
 "    \n"
 "    La orden interna `dirs' muestra la pila de directorios."
 
-#: builtins/read.def:280
+#: builtins/read.def:308
 #, c-format
 msgid "%s: invalid timeout specification"
 msgstr "%s: especificación del tiempo de expiración inválida"
 
-#: builtins/read.def:755
+#: builtins/read.def:827
 #, c-format
 msgid "read error: %d: %s"
 msgstr "error de lectura: %d: %s"
@@ -854,7 +854,7 @@ msgstr "sólo se puede usar `return' desde una función o un script leído con `
 msgid "cannot simultaneously unset a function and a variable"
 msgstr "no se puede borrar al mismo tiempo una función y una variable"
 
-#: builtins/set.def:966
+#: builtins/set.def:969
 #, c-format
 msgid "%s: not an array variable"
 msgstr "%s: no es una variable de matriz"
@@ -873,11 +873,11 @@ msgstr "%s: no se puede exportar"
 msgid "shift count"
 msgstr "contador de desplazamiento"
 
-#: builtins/shopt.def:310
+#: builtins/shopt.def:323
 msgid "cannot set and unset shell options simultaneously"
 msgstr "no se pueden activar y desactivar opciones del shell simultáneamente"
 
-#: builtins/shopt.def:428
+#: builtins/shopt.def:444
 #, c-format
 msgid "%s: invalid shell option name"
 msgstr "%s: nombre de opción de shell inválido"
@@ -944,16 +944,16 @@ msgstr "%s: límite de argumento inválido"
 msgid "`%c': bad command"
 msgstr "`%c': orden incorrecta"
 
-#: builtins/ulimit.def:455
+#: builtins/ulimit.def:464
 #, c-format
 msgid "%s: cannot get limit: %s"
 msgstr "%s: no se puede obtener el límite: %s"
 
-#: builtins/ulimit.def:481
+#: builtins/ulimit.def:490
 msgid "limit"
 msgstr "límite"
 
-#: builtins/ulimit.def:493 builtins/ulimit.def:793
+#: builtins/ulimit.def:502 builtins/ulimit.def:802
 #, c-format
 msgid "%s: cannot modify limit: %s"
 msgstr "%s: no se puede modificar el límite: %s"
@@ -972,7 +972,7 @@ msgstr "`%c': operador de modo simbólico inválido"
 msgid "`%c': invalid symbolic mode character"
 msgstr "`%c': carácter de modo simbólico inválido"
 
-#: error.c:89 error.c:347 error.c:349 error.c:351
+#: error.c:89 error.c:373 error.c:375 error.c:377
 msgid " line "
 msgstr " línea "
 
@@ -992,98 +992,110 @@ msgstr "Abortando..."
 msgid "INFORM: "
 msgstr "INFORME: "
 
-#: error.c:462
+#: error.c:310
+#, c-format
+msgid "DEBUG warning: "
+msgstr "DEBUG aviso: "
+
+#: error.c:488
 msgid "unknown command error"
 msgstr "error de orden desconocida"
 
-#: error.c:463
+#: error.c:489
 msgid "bad command type"
 msgstr "tipo de orden incorrecto"
 
-#: error.c:464
+#: error.c:490
 msgid "bad connector"
 msgstr "conector erróneo"
 
-#: error.c:465
+#: error.c:491
 msgid "bad jump"
 msgstr "salto erróneo"
 
-#: error.c:503
+#: error.c:529
 #, c-format
 msgid "%s: unbound variable"
 msgstr "%s: variable sin asignar"
 
-#: eval.c:242
+#: eval.c:243
 msgid "\atimed out waiting for input: auto-logout\n"
 msgstr "\aha expirado mientras esperaba alguna entrada: auto-logout\n"
 
-#: execute_cmd.c:537
+#: execute_cmd.c:555
 #, c-format
 msgid "cannot redirect standard input from /dev/null: %s"
 msgstr "no se puede redirigir la entrada estándar desde /dev/null: %s"
 
-#: execute_cmd.c:1297
+#: execute_cmd.c:1317
 #, c-format
 msgid "TIMEFORMAT: `%c': invalid format character"
 msgstr "TIMEFORMAT: `%c': carácter de formato inválido"
 
-#: execute_cmd.c:2362
+#: execute_cmd.c:2391
 #, c-format
 msgid "execute_coproc: coproc [%d:%s] still exists"
 msgstr "execute_coproc: coproc [%d:%s] aún existe"
 
-#: execute_cmd.c:2486
+#: execute_cmd.c:2524
 msgid "pipe error"
 msgstr "error de tubería"
 
-#: execute_cmd.c:4793
+#: execute_cmd.c:4923
 #, c-format
 msgid "eval: maximum eval nesting level exceeded (%d)"
 msgstr "eval: nivel máximo de anidamiento de evaluaciones excedido (%d)"
 
-#: execute_cmd.c:4805
+#: execute_cmd.c:4935
 #, c-format
 msgid "%s: maximum source nesting level exceeded (%d)"
 msgstr "%s: nivel máximo de anidamiento de lecturas con `source' excedido (%d)"
 
-#: execute_cmd.c:4913
+#: execute_cmd.c:5043
 #, c-format
 msgid "%s: maximum function nesting level exceeded (%d)"
 msgstr "%s: nivel máximo de anidamiento de funciones excedido (%d)"
 
-#: execute_cmd.c:5467
+#: execute_cmd.c:5598
 #, c-format
 msgid "%s: restricted: cannot specify `/' in command names"
 msgstr "%s: restringido: no se puede especificar `/' en nombres de órdenes"
 
-#: execute_cmd.c:5574
+#: execute_cmd.c:5715
 #, c-format
 msgid "%s: command not found"
 msgstr "%s: orden no encontrada"
 
-#: execute_cmd.c:5816
+#: execute_cmd.c:5957
 #, c-format
 msgid "%s: %s"
 msgstr "%s: %s"
 
-#: execute_cmd.c:5854
+# file=fichero. archive=archivo. Si no, es imposible traducir tar. sv
+# De acuerdo. Corregido en todo el fichero. cfuga
+#: execute_cmd.c:5975
+#, c-format
+msgid "%s: cannot execute: required file not found"
+msgstr "%s: no se puede ejecutar: no se ha encontrado el fichero requerido"
+
+#: execute_cmd.c:6000
 #, c-format
 msgid "%s: %s: bad interpreter"
 msgstr "%s: %s: intérprete erróneo"
 
 # file=fichero. archive=archivo. Si no, es imposible traducir tar. sv
 # De acuerdo. Corregido en todo el fichero. cfuga
-#: execute_cmd.c:5891
+#: execute_cmd.c:6037
 #, c-format
 msgid "%s: cannot execute binary file: %s"
 msgstr "%s: no se puede ejecutar fichero binario: %s"
 
-#: execute_cmd.c:5977
+#: execute_cmd.c:6123
 #, c-format
 msgid "`%s': is a special builtin"
 msgstr "`%s': es una orden interna especial"
 
-#: execute_cmd.c:6029
+#: execute_cmd.c:6175
 #, c-format
 msgid "cannot duplicate fd %d to fd %d"
 msgstr "no se puede duplicar el df %d al df %d"
@@ -1096,73 +1108,73 @@ msgstr "se ha excedido el nivel de recursión de la expresión"
 msgid "recursion stack underflow"
 msgstr "desbordamiento de la pila de recursión"
 
-#: expr.c:477
+#: expr.c:478
 msgid "syntax error in expression"
 msgstr "error sintáctico en la expresión"
 
-#: expr.c:521
+#: expr.c:522
 msgid "attempted assignment to non-variable"
 msgstr "se intentó asignar a algo que no es una variable"
 
-#: expr.c:530
+#: expr.c:531
 msgid "syntax error in variable assignment"
 msgstr "error sintáctico en asignación de variable"
 
-#: expr.c:544 expr.c:911
+#: expr.c:545 expr.c:912
 msgid "division by 0"
 msgstr "división por 0"
 
 # token en bison fue traducido como terminal. ¿Lo traducimos igual aquí
 # o lo dejamos como 'unidad' o 'elemento'? cfuga
-#: expr.c:592
+#: expr.c:593
 msgid "bug: bad expassign token"
 msgstr "defecto: elemento de asignación de expresión erróneo"
 
-#: expr.c:646
+#: expr.c:647
 msgid "`:' expected for conditional expression"
 msgstr "se esperaba `:' para la expresión condicional"
 
-#: expr.c:972
+#: expr.c:973
 msgid "exponent less than 0"
 msgstr "exponente menor que 0"
 
-#: expr.c:1029
+#: expr.c:1030
 msgid "identifier expected after pre-increment or pre-decrement"
 msgstr "se esperaba un identificador después del pre-incremento o pre-decremento"
 
 # falta , singular em+
 # mmmh, puede faltar más de un paréntesis cfuga
 # tiene razón Enrique, es singular. cfuga
-#: expr.c:1056
+#: expr.c:1057
 msgid "missing `)'"
 msgstr "falta un `)'"
 
-#: expr.c:1107 expr.c:1487
+#: expr.c:1108 expr.c:1492
 msgid "syntax error: operand expected"
 msgstr "error sintáctico: se esperaba un operando"
 
-#: expr.c:1489
+#: expr.c:1494
 msgid "syntax error: invalid arithmetic operator"
 msgstr "error sintáctico: operador aritmético inválido"
 
-#: expr.c:1513
+#: expr.c:1518
 #, c-format
 msgid "%s%s%s: %s (error token is \"%s\")"
 msgstr "%s%s%s: %s (el elemento de error es \"%s\")"
 
-#: expr.c:1573
+#: expr.c:1578
 msgid "invalid arithmetic base"
 msgstr "base aritmética inválida"
 
-#: expr.c:1582
+#: expr.c:1587
 msgid "invalid integer constant"
 msgstr "constante entera inválida"
 
-#: expr.c:1598
+#: expr.c:1603
 msgid "value too great for base"
 msgstr "valor demasiado grande para la base"
 
-#: expr.c:1647
+#: expr.c:1652
 #, c-format
 msgid "%s: expression error\n"
 msgstr "%s: error de expresión\n"
@@ -1171,7 +1183,7 @@ msgstr "%s: error de expresión\n"
 msgid "getcwd: cannot access parent directories"
 msgstr "getcwd: no se puede acceder a los directorios padre"
 
-#: input.c:99 subst.c:6069
+#: input.c:99 subst.c:6208
 #, c-format
 msgid "cannot reset nodelay mode for fd %d"
 msgstr "no se puede reestablecer el modo nodelay para el df %d"
@@ -1193,168 +1205,168 @@ msgstr "save_bash_input: el almacenamiento intermedio ya existe para el nuevo df
 msgid "start_pipeline: pgrp pipe"
 msgstr "start_pipeline: tubería de pgrp"
 
-#: jobs.c:906
+#: jobs.c:907
 #, c-format
 msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr "bgp_delete: BUCLE: psi (%d) == storage[psi].bucket_next"
 
-#: jobs.c:959
+#: jobs.c:960
 #, c-format
 msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr "bgp_search: BUCLE: psi (%d) == storage[psi].bucket_next"
 
-#: jobs.c:1283
+#: jobs.c:1279
 #, c-format
 msgid "forked pid %d appears in running job %d"
 msgstr "el pid `forked' %d aparece en el trabajo en ejecución %d"
 
-#: jobs.c:1402
+#: jobs.c:1397
 #, c-format
 msgid "deleting stopped job %d with process group %ld"
 msgstr "borrando el trabajo detenido %d con grupo de proceso %ld"
 
-#: jobs.c:1511
+#: jobs.c:1502
 #, c-format
 msgid "add_process: pid %5ld (%s) marked as still alive"
 msgstr "add_process: pid %5ld (%s) se marca como vivo aún"
 
 # Cambiaría 'hay' por 'existe' em+
-#: jobs.c:1850
+#: jobs.c:1839
 #, c-format
 msgid "describe_pid: %ld: no such pid"
 msgstr "describe_pid: %ld: no existe tal pid"
 
-#: jobs.c:1865
+#: jobs.c:1854
 #, c-format
 msgid "Signal %d"
 msgstr "Señal %d"
 
-#: jobs.c:1879 jobs.c:1905
+#: jobs.c:1868 jobs.c:1894
 msgid "Done"
 msgstr "Hecho"
 
-#: jobs.c:1884 siglist.c:122
+#: jobs.c:1873 siglist.c:123
 msgid "Stopped"
 msgstr "Detenido"
 
-#: jobs.c:1888
+#: jobs.c:1877
 #, c-format
 msgid "Stopped(%s)"
 msgstr "Detenido(%s)"
 
-#: jobs.c:1892
+#: jobs.c:1881
 msgid "Running"
 msgstr "Ejecutando"
 
-#: jobs.c:1909
+#: jobs.c:1898
 #, c-format
 msgid "Done(%d)"
 msgstr "Hecho(%d)"
 
-#: jobs.c:1911
+#: jobs.c:1900
 #, c-format
 msgid "Exit %d"
 msgstr "Salida %d"
 
-#: jobs.c:1914
+#: jobs.c:1903
 msgid "Unknown status"
 msgstr "Estado desconocido"
 
-#: jobs.c:2001
+#: jobs.c:1990
 #, c-format
 msgid "(core dumped) "
 msgstr "(`core' generado) "
 
-#: jobs.c:2020
+#: jobs.c:2009
 #, c-format
 msgid "  (wd: %s)"
 msgstr "  (da: %s)"
 
-#: jobs.c:2259
+#: jobs.c:2250
 #, c-format
 msgid "child setpgid (%ld to %ld)"
 msgstr "setpgid hijo (%ld a %ld)"
 
-#: jobs.c:2617 nojobs.c:664
+#: jobs.c:2608 nojobs.c:666
 #, c-format
 msgid "wait: pid %ld is not a child of this shell"
 msgstr "wait: pid %ld no es un proceso hijo de este shell"
 
-#: jobs.c:2893
+#: jobs.c:2884
 #, c-format
 msgid "wait_for: No record of process %ld"
 msgstr "wait_for: No hay un registro del proceso %ld"
 
-#: jobs.c:3236
+#: jobs.c:3223
 #, c-format
 msgid "wait_for_job: job %d is stopped"
 msgstr "wait_for_job: el trabajo %d está detenido"
 
-#: jobs.c:3564
+#: jobs.c:3551
 #, c-format
 msgid "%s: no current jobs"
 msgstr "%s: no hay trabajos actuales"
 
-#: jobs.c:3571
+#: jobs.c:3558
 #, c-format
 msgid "%s: job has terminated"
 msgstr "%s: el trabajo ha terminado"
 
-#: jobs.c:3580
+#: jobs.c:3567
 #, c-format
 msgid "%s: job %d already in background"
 msgstr "%s: el trabajo %d ya está en segundo plano"
 
-#: jobs.c:3806
+#: jobs.c:3793
 msgid "waitchld: turning on WNOHANG to avoid indefinite block"
 msgstr "waitchld: se activa WNOHANG para evitar el bloque indefinido"
 
-#: jobs.c:4320
+#: jobs.c:4307
 #, c-format
 msgid "%s: line %d: "
 msgstr "%s: línea %d: "
 
-#: jobs.c:4334 nojobs.c:919
+#: jobs.c:4321 nojobs.c:921
 #, c-format
 msgid " (core dumped)"
 msgstr " (`core' generado)"
 
-#: jobs.c:4346 jobs.c:4359
+#: jobs.c:4333 jobs.c:4346
 #, c-format
 msgid "(wd now: %s)\n"
 msgstr "(dir ahora: %s)\n"
 
-#: jobs.c:4391
+#: jobs.c:4378
 msgid "initialize_job_control: getpgrp failed"
 msgstr "initialize_job_control: falló getpgrp"
 
-#: jobs.c:4447
+#: jobs.c:4434
 msgid "initialize_job_control: no job control in background"
 msgstr "initialize_job_control: no hay control de trabajos en segundo plano"
 
-#: jobs.c:4463
+#: jobs.c:4450
 msgid "initialize_job_control: line discipline"
 msgstr "initialize_job_control: disciplina de línea"
 
-#: jobs.c:4473
+#: jobs.c:4460
 msgid "initialize_job_control: setpgid"
 msgstr "initialize_job_control: setpgid"
 
-#: jobs.c:4494 jobs.c:4503
+#: jobs.c:4481 jobs.c:4490
 #, c-format
 msgid "cannot set terminal process group (%d)"
 msgstr "no se puede establecer el grupo de proceso de terminal (%d)"
 
-#: jobs.c:4508
+#: jobs.c:4495
 msgid "no job control in this shell"
 msgstr "no hay control de trabajos en este shell"
 
-#: lib/malloc/malloc.c:353
+#: lib/malloc/malloc.c:367
 #, c-format
 msgid "malloc: failed assertion: %s\n"
 msgstr "malloc: falló la aserción: %s\n"
 
-#: lib/malloc/malloc.c:369
+#: lib/malloc/malloc.c:383
 #, c-format
 msgid ""
 "\r\n"
@@ -1363,47 +1375,47 @@ msgstr ""
 "\r\n"
 "malloc: %s:%d: aserción arruinada\r\n"
 
-#: lib/malloc/malloc.c:370 lib/malloc/malloc.c:933
+#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941
 msgid "unknown"
 msgstr "desconocido"
 
-#: lib/malloc/malloc.c:882
+#: lib/malloc/malloc.c:892
 msgid "malloc: block on free list clobbered"
 msgstr "malloc: bloque en la lista libre sobreescrito"
 
-#: lib/malloc/malloc.c:972
+#: lib/malloc/malloc.c:980
 msgid "free: called with already freed block argument"
 msgstr "free: se llamó con un argumento de bloque previamente liberado"
 
-#: lib/malloc/malloc.c:975
+#: lib/malloc/malloc.c:983
 msgid "free: called with unallocated block argument"
 msgstr "free: se llamó con un argumento de bloque sin asignar"
 
-#: lib/malloc/malloc.c:994
+#: lib/malloc/malloc.c:1001
 msgid "free: underflow detected; mh_nbytes out of range"
 msgstr "free: se detectó un desbordamiento por debajo; mh_nbytes fuera de rango"
 
-#: lib/malloc/malloc.c:1001
+#: lib/malloc/malloc.c:1007
 msgid "free: underflow detected; magic8 corrupted"
 msgstr "free: se detectó un desbordamiento por debajo; magic8 corrupto"
 
-#: lib/malloc/malloc.c:1009
+#: lib/malloc/malloc.c:1014
 msgid "free: start and end chunk sizes differ"
 msgstr "free: los tamaños de los fragmentos del inicio y del final son diferentes"
 
-#: lib/malloc/malloc.c:1119
+#: lib/malloc/malloc.c:1176
 msgid "realloc: called with unallocated block argument"
 msgstr "realloc: se llamó con un argumento de bloque sin asignar"
 
-#: lib/malloc/malloc.c:1134
+#: lib/malloc/malloc.c:1191
 msgid "realloc: underflow detected; mh_nbytes out of range"
 msgstr "realloc: se detectó un desbordamiento por debajo; mh_nbytes fuera de rango"
 
-#: lib/malloc/malloc.c:1141
+#: lib/malloc/malloc.c:1197
 msgid "realloc: underflow detected; magic8 corrupted"
 msgstr "realloc: se detectó un desbordamiento por debajo; magic8 corrupto"
 
-#: lib/malloc/malloc.c:1150
+#: lib/malloc/malloc.c:1205
 msgid "realloc: start and end chunk sizes differ"
 msgstr "realloc: los tamaños de los pedazos de inicio y fin son diferentes"
 
@@ -1445,22 +1457,22 @@ msgstr "%s: especificación de ruta de red errónea"
 msgid "network operations not supported"
 msgstr "no hay soporte para operaciones de red"
 
-#: locale.c:217
+#: locale.c:219
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s)"
 msgstr "setlocale: LC_ALL: no se puede cambiar el local (%s)"
 
-#: locale.c:219
+#: locale.c:221
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s): %s"
 msgstr "setlocale: LC_ALL: no se puede cambiar el local (%s): %s"
 
-#: locale.c:292
+#: locale.c:294
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s)"
 msgstr "setlocale: %s: no se puede cambiar el local (%s)"
 
-#: locale.c:294
+#: locale.c:296
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s): %s"
 msgstr "setlocale: %s: no se puede cambiar el local (%s): %s"
@@ -1478,108 +1490,108 @@ msgstr "Tiene correo nuevo en $_"
 msgid "The mail in %s has been read\n"
 msgstr "El correo en %s fue leído\n"
 
-#: make_cmd.c:317
+#: make_cmd.c:314
 msgid "syntax error: arithmetic expression required"
 msgstr "error sintáctico: se requiere una expresión aritmética"
 
-#: make_cmd.c:319
+#: make_cmd.c:316
 msgid "syntax error: `;' unexpected"
 msgstr "error sintáctico: `;' inesperado"
 
-#: make_cmd.c:320
+#: make_cmd.c:317
 #, c-format
 msgid "syntax error: `((%s))'"
 msgstr "error sintáctico: `((%s))'"
 
-#: make_cmd.c:572
+#: make_cmd.c:569
 #, c-format
 msgid "make_here_document: bad instruction type %d"
 msgstr "make_here_document: tipo de instrucción %d erróneo"
 
-#: make_cmd.c:657
+#: make_cmd.c:668
 #, c-format
 msgid "here-document at line %d delimited by end-of-file (wanted `%s')"
 msgstr "el documento-aquí en la línea %d está delimitado por fin-de-fichero (se esperaba `%s')"
 
-#: make_cmd.c:756
+#: make_cmd.c:769
 #, c-format
 msgid "make_redirection: redirection instruction `%d' out of range"
 msgstr "make_redirection: la instrucción de redirección `%d' está fuera de rango"
 
-#: parse.y:2393
+#: parse.y:2428
 #, c-format
 msgid "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line truncated"
 msgstr "shell_getc: shell_input_line_size (%zu) excede TAMAÑO_MAX (%lu): línea truncada"
 
-#: parse.y:2826
+#: parse.y:2921
 msgid "maximum here-document count exceeded"
 msgstr "número máximo de documentos en «here--document» excedido"
 
-#: parse.y:3581 parse.y:3957 parse.y:4556
+#: parse.y:3684 parse.y:4244 parse.y:6148
 #, c-format
 msgid "unexpected EOF while looking for matching `%c'"
 msgstr "EOF inesperado mientras se buscaba un `%c' coincidente"
 
-#: parse.y:4696
+#: parse.y:4452
 msgid "unexpected EOF while looking for `]]'"
 msgstr "EOF inesperado mientras se buscaba `]]'"
 
-#: parse.y:4701
+#: parse.y:4457
 #, c-format
 msgid "syntax error in conditional expression: unexpected token `%s'"
 msgstr "error sintáctico en la expresión condicional: elemento inesperado `%s'"
 
-#: parse.y:4705
+#: parse.y:4461
 msgid "syntax error in conditional expression"
 msgstr "error sintáctico en la expresión condicional"
 
-#: parse.y:4783
+#: parse.y:4539
 #, c-format
 msgid "unexpected token `%s', expected `)'"
 msgstr "elemento inesperado `%s', se esperaba `)'"
 
-#: parse.y:4787
+#: parse.y:4543
 msgid "expected `)'"
 msgstr "se esperaba `)'"
 
-#: parse.y:4815
+#: parse.y:4571
 #, c-format
 msgid "unexpected argument `%s' to conditional unary operator"
 msgstr "argumento inesperado `%s' para el operador unario condicional"
 
-#: parse.y:4819
+#: parse.y:4575
 msgid "unexpected argument to conditional unary operator"
 msgstr "argumento inesperado para el operador unario condicional"
 
-#: parse.y:4865
+#: parse.y:4621
 #, c-format
 msgid "unexpected token `%s', conditional binary operator expected"
 msgstr "elemento inesperado `%s', se esperaba un operador binario condicional"
 
-#: parse.y:4869
+#: parse.y:4625
 msgid "conditional binary operator expected"
 msgstr "se esperaba un operador binario condicional"
 
-#: parse.y:4891
+#: parse.y:4647
 #, c-format
 msgid "unexpected argument `%s' to conditional binary operator"
 msgstr "argumento inesperado `%s' para el operador binario condicional"
 
-#: parse.y:4895
+#: parse.y:4651
 msgid "unexpected argument to conditional binary operator"
 msgstr "argumento inesperado para el operador binario condicional"
 
-#: parse.y:4906
+#: parse.y:4662
 #, c-format
 msgid "unexpected token `%c' in conditional command"
 msgstr "elemento inesperado `%c' en la orden condicional"
 
-#: parse.y:4909
+#: parse.y:4665
 #, c-format
 msgid "unexpected token `%s' in conditional command"
 msgstr "elemento inesperado `%s' en la orden condicional"
 
-#: parse.y:4913
+#: parse.y:4669
 #, c-format
 msgid "unexpected token %d in conditional command"
 msgstr "elemento inesperado %d en la orden condicional"
@@ -1590,12 +1602,12 @@ msgstr "elemento inesperado %d en la orden condicional"
 # provocado por el símbolo. Simplemente estar cerca del mismo. cfuga
 # Por consistencia con el siguiente, yo borraría la coma. sv
 # Cierto. Coma borrada. cfuga
-#: parse.y:6336
+#: parse.y:6118
 #, c-format
 msgid "syntax error near unexpected token `%s'"
 msgstr "error sintáctico cerca del elemento inesperado `%s'"
 
-#: parse.y:6355
+#: parse.y:6137
 #, c-format
 msgid "syntax error near `%s'"
 msgstr "error sintáctico cerca de `%s'"
@@ -1604,20 +1616,20 @@ msgstr "error sintáctico cerca de `%s'"
 # no se esperaba el final de la línea em+
 # Ojo, que end of file es fin de fichero, no de línea. sv
 # Se hicieron ambos cambios. cfuga
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error: unexpected end of file"
 msgstr "error sintáctico: no se esperaba el final del fichero"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error"
 msgstr "error sintáctico"
 
-#: parse.y:6428
+#: parse.y:6216
 #, c-format
 msgid "Use \"%s\" to leave the shell.\n"
 msgstr "Utilice \"%s\" para dejar el shell.\n"
 
-#: parse.y:6602
+#: parse.y:6394
 msgid "unexpected EOF while looking for matching `)'"
 msgstr "EOF inesperado mientras se buscaba un `)' coincidente"
 
@@ -1655,80 +1667,80 @@ msgstr "xtrace_set: puntero NULL a fichero"
 msgid "xtrace fd (%d) != fileno xtrace fp (%d)"
 msgstr "xtrace fd (%d) != numfich xtrace fp (%d)"
 
-#: print_cmd.c:1540
+#: print_cmd.c:1545
 #, c-format
 msgid "cprintf: `%c': invalid format character"
 msgstr "cprintf: `%c': carácter de formato inválido"
 
-#: redir.c:149 redir.c:197
+#: redir.c:150 redir.c:198
 msgid "file descriptor out of range"
 msgstr "descriptor de fichero fuera de rango"
 
-#: redir.c:204
+#: redir.c:205
 #, c-format
 msgid "%s: ambiguous redirect"
 msgstr "%s: redireccionamiento ambiguo"
 
-#: redir.c:208
+#: redir.c:209
 #, c-format
 msgid "%s: cannot overwrite existing file"
 msgstr "%s: no se puede sobreescribir un fichero existente"
 
-#: redir.c:213
+#: redir.c:214
 #, c-format
 msgid "%s: restricted: cannot redirect output"
 msgstr "%s: restringido: no se puede redirigir la salida"
 
-#: redir.c:218
+#: redir.c:219
 #, c-format
 msgid "cannot create temp file for here-document: %s"
 msgstr "no se puede crear un fichero temporal para el documento-aquí: %s"
 
-#: redir.c:222
+#: redir.c:223
 #, c-format
 msgid "%s: cannot assign fd to variable"
 msgstr "%s: no se puede asignar el fd a la variable"
 
-#: redir.c:649
+#: redir.c:650
 msgid "/dev/(tcp|udp)/host/port not supported without networking"
 msgstr "no se admite /dev/(tcp|udp)/anfitrion/puerto sin red"
 
-#: redir.c:938 redir.c:1053 redir.c:1114 redir.c:1284
+#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303
 msgid "redirection error: cannot duplicate fd"
 msgstr "error de redirección: no se puede duplicar el df"
 
-#: shell.c:347
+#: shell.c:353
 msgid "could not find /tmp, please create!"
 msgstr "¡no se puede encontrar /tmp, crear por favor!"
 
-#: shell.c:351
+#: shell.c:357
 msgid "/tmp must be a valid directory name"
 msgstr "/tmp debe ser un nombre de directorio válido"
 
-#: shell.c:804
+#: shell.c:826
 msgid "pretty-printing mode ignored in interactive shells"
 msgstr "modo de impresión bonita desactivado en shells interactivos"
 
-#: shell.c:948
+#: shell.c:972
 #, c-format
 msgid "%c%c: invalid option"
 msgstr "%c%c: opción inválida"
 
-#: shell.c:1319
+#: shell.c:1343
 #, c-format
 msgid "cannot set uid to %d: effective uid %d"
 msgstr "no se puede establecer el uid %d: uid efectivo %d"
 
-#: shell.c:1330
+#: shell.c:1354
 #, c-format
 msgid "cannot set gid to %d: effective gid %d"
 msgstr "no se puede establecer gid a %d: gid efectivo %d"
 
-#: shell.c:1518
+#: shell.c:1544
 msgid "cannot start debugger; debugging mode disabled"
 msgstr "no puede ejecutar el depurador; modo depurado desactivado"
 
-#: shell.c:1632
+#: shell.c:1658
 #, c-format
 msgid "%s: Is a directory"
 msgstr "%s: es un directorio"
@@ -1736,11 +1748,11 @@ msgstr "%s: es un directorio"
 # Yo pondría "no tengo ningún nombre". sv
 # Revisé el código fuente de bash. Es un mensaje de error cuando no se
 # encuentra el nombre del usuario que ejecuta el shell. cfuga
-#: shell.c:1881
+#: shell.c:1907
 msgid "I have no name!"
 msgstr "¡No tengo nombre de usuario!"
 
-#: shell.c:2035
+#: shell.c:2061
 #, c-format
 msgid "GNU bash, version %s-(%s)\n"
 msgstr "GNU bash, versión %s-(%s)\n"
@@ -1750,7 +1762,7 @@ msgstr "GNU bash, versión %s-(%s)\n"
 # traducido en otras ocasiones. Sehll script lo henmos traducido
 # como guión del shell , eso es seguro ... así que puede estar
 # bien así , ya lo verán otros em+
-#: shell.c:2036
+#: shell.c:2062
 #, c-format
 msgid ""
 "Usage:\t%s [GNU long option] [option] ...\n"
@@ -1759,98 +1771,98 @@ msgstr ""
 "Modo de empleo:\t%s [opción GNU larga] [opción] ...\n"
 "\t%s [opción GNU larga] [opción] fichero de shell ...\n"
 
-#: shell.c:2038
+#: shell.c:2064
 msgid "GNU long options:\n"
 msgstr "Opciones GNU largas:\n"
 
-#: shell.c:2042
+#: shell.c:2068
 msgid "Shell options:\n"
 msgstr "Opciones del shell:\n"
 
-#: shell.c:2043
+#: shell.c:2069
 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n"
 msgstr "\t-irsD o -c orden o -O opción_shopt\t\t(sólo invocación)\n"
 
-#: shell.c:2062
+#: shell.c:2088
 #, c-format
 msgid "\t-%s or -o option\n"
 msgstr "\t-%s o -o opción\n"
 
-#: shell.c:2068
+#: shell.c:2094
 #, c-format
 msgid "Type `%s -c \"help set\"' for more information about shell options.\n"
 msgstr "Teclee `%s -c \"help set\"' para más información sobre las opciones del shell.\n"
 
-#: shell.c:2069
+#: shell.c:2095
 #, c-format
 msgid "Type `%s -c help' for more information about shell builtin commands.\n"
 msgstr "Teclee `%s -c help' para más información sobre las órdenes internas del shell.\n"
 
-#: shell.c:2070
+#: shell.c:2096
 #, c-format
 msgid "Use the `bashbug' command to report bugs.\n"
 msgstr "Utilice la orden `bashbug' para reportar defectos.\n"
 
-#: shell.c:2072
+#: shell.c:2098
 #, c-format
 msgid "bash home page: <http://www.gnu.org/software/bash>\n"
 msgstr "página inicial bash: <http://www.gnu.org/software/bash>\n"
 
-#: shell.c:2073
+#: shell.c:2099
 #, c-format
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 msgstr "Ayuda general utilizando software GNU: <http://www.gnu.org/gethelp/>\n"
 
-#: sig.c:757
+#: sig.c:765
 #, c-format
 msgid "sigprocmask: %d: invalid operation"
 msgstr "sigprocmask: %d: operación inválida"
 
-#: siglist.c:47
+#: siglist.c:48
 msgid "Bogus signal"
 msgstr "Señal ambigua"
 
-#: siglist.c:50
+#: siglist.c:51
 msgid "Hangup"
 msgstr "Colgar"
 
-#: siglist.c:54
+#: siglist.c:55
 msgid "Interrupt"
 msgstr "Interrumpir"
 
-#: siglist.c:58
+#: siglist.c:59
 msgid "Quit"
 msgstr "Salir"
 
-#: siglist.c:62
+#: siglist.c:63
 msgid "Illegal instruction"
 msgstr "Instrucción ilegal"
 
-#: siglist.c:66
+#: siglist.c:67
 msgid "BPT trace/trap"
 msgstr "BPT rastreo/captura"
 
-#: siglist.c:74
+#: siglist.c:75
 msgid "ABORT instruction"
 msgstr "instrucción ABORT"
 
-#: siglist.c:78
+#: siglist.c:79
 msgid "EMT instruction"
 msgstr "instrucción EMT"
 
-#: siglist.c:82
+#: siglist.c:83
 msgid "Floating point exception"
 msgstr "Excepción de coma flotante"
 
-#: siglist.c:86
+#: siglist.c:87
 msgid "Killed"
 msgstr "Matado"
 
-#: siglist.c:90
+#: siglist.c:91
 msgid "Bus error"
 msgstr "Error del bus"
 
-#: siglist.c:94
+#: siglist.c:95
 msgid "Segmentation fault"
 msgstr "Violación de segmento"
 
@@ -1858,86 +1870,86 @@ msgstr "Violación de segmento"
 # Es una llamada a una función del sistema em+
 # De acuerdo, pero lo que está mal es la forma de invocar la
 # llamada a la función del sistema, no la llamada en sí cfuga
-#: siglist.c:98
+#: siglist.c:99
 msgid "Bad system call"
 msgstr "Llamada al sistema errónea"
 
 # (pipe) no, por favor. Esto ya está traducido en libc, así que a estas
 # alturas, la gente ya debería saber qué es eso de la tubería. sv
 # De acuerdo. cfuga
-#: siglist.c:102
+#: siglist.c:103
 msgid "Broken pipe"
 msgstr "Tubería rota"
 
-#: siglist.c:106
+#: siglist.c:107
 msgid "Alarm clock"
 msgstr "Temporizador"
 
-#: siglist.c:110
+#: siglist.c:111
 msgid "Terminated"
 msgstr "Terminado"
 
-#: siglist.c:114
+#: siglist.c:115
 msgid "Urgent IO condition"
 msgstr "Condición de E/S urgente"
 
-#: siglist.c:118
+#: siglist.c:119
 msgid "Stopped (signal)"
 msgstr "Detenido (señal)"
 
-#: siglist.c:126
+#: siglist.c:127
 msgid "Continue"
 msgstr "Continúa"
 
-#: siglist.c:134
+#: siglist.c:135
 msgid "Child death or stop"
 msgstr "El proceso hijo ha muerto o está parado"
 
-#: siglist.c:138
+#: siglist.c:139
 msgid "Stopped (tty input)"
 msgstr "Detenido (entrada por terminal)"
 
-#: siglist.c:142
+#: siglist.c:143
 msgid "Stopped (tty output)"
 msgstr "Detenido (salida por terminal)"
 
-#: siglist.c:146
+#: siglist.c:147
 msgid "I/O ready"
 msgstr "E/S listas"
 
-#: siglist.c:150
+#: siglist.c:151
 msgid "CPU limit"
 msgstr "Límite de CPU"
 
-#: siglist.c:154
+#: siglist.c:155
 msgid "File limit"
 msgstr "Límite de ficheros"
 
-#: siglist.c:158
+#: siglist.c:159
 msgid "Alarm (virtual)"
 msgstr "Alarma (virtual)"
 
-#: siglist.c:162
+#: siglist.c:163
 msgid "Alarm (profile)"
 msgstr "Alarma (entorno)"
 
-#: siglist.c:166
+#: siglist.c:167
 msgid "Window changed"
 msgstr "Ventana cambiada"
 
-#: siglist.c:170
+#: siglist.c:171
 msgid "Record lock"
 msgstr "Bloqueo de registro"
 
-#: siglist.c:174
+#: siglist.c:175
 msgid "User signal 1"
 msgstr "Señal de usuario 1"
 
-#: siglist.c:178
+#: siglist.c:179
 msgid "User signal 2"
 msgstr "Señal de usuario 2"
 
-#: siglist.c:182
+#: siglist.c:183
 msgid "HFT input data pending"
 msgstr "entrada de datos HFT pendiente"
 
@@ -1945,142 +1957,142 @@ msgstr "entrada de datos HFT pendiente"
 # Suscribo lo anterior. falla suena muy raro.
 # Yo lo pondría además al revés: fallo de energía inminente. sv
 # Me gusta como lo sugieres. Cambio hecho. cfuga
-#: siglist.c:186
+#: siglist.c:187
 msgid "power failure imminent"
 msgstr "fallo de energía inminente"
 
-#: siglist.c:190
+#: siglist.c:191
 msgid "system crash imminent"
 msgstr "caída del sistema inminente"
 
-#: siglist.c:194
+#: siglist.c:195
 msgid "migrate process to another CPU"
 msgstr "migrando el proceso a otra CPU"
 
-#: siglist.c:198
+#: siglist.c:199
 msgid "programming error"
 msgstr "error de programación"
 
-#: siglist.c:202
+#: siglist.c:203
 msgid "HFT monitor mode granted"
 msgstr "el modo monitor HFT ha sido concedido"
 
-#: siglist.c:206
+#: siglist.c:207
 msgid "HFT monitor mode retracted"
 msgstr "el modo monitor HTF ha sido retirado"
 
-#: siglist.c:210
+#: siglist.c:211
 msgid "HFT sound sequence has completed"
 msgstr "la secuencia de sonido HFT ha sido completada"
 
-#: siglist.c:214
+#: siglist.c:215
 msgid "Information request"
 msgstr "Solicitud de información"
 
-#: siglist.c:222 siglist.c:224
+#: siglist.c:223 siglist.c:225
 #, c-format
 msgid "Unknown Signal #%d"
 msgstr "Señal Desconocida #%d"
 
-#: subst.c:1476 subst.c:1666
+#: subst.c:1480 subst.c:1670
 #, c-format
 msgid "bad substitution: no closing `%s' in %s"
 msgstr "sustitución errónea: no hay un `%s' que cierre en %s"
 
-#: subst.c:3281
+#: subst.c:3307
 #, c-format
 msgid "%s: cannot assign list to array member"
 msgstr "%s: no se puede asignar una lista a un miembro de la matriz"
 
-#: subst.c:5910 subst.c:5926
+#: subst.c:6048 subst.c:6064
 msgid "cannot make pipe for process substitution"
 msgstr "no se puede crear la tubería para la sustitución del proceso"
 
-#: subst.c:5985
+#: subst.c:6124
 msgid "cannot make child for process substitution"
 msgstr "no se puede crear un proceso hijo para la sustitución del proceso"
 
-#: subst.c:6059
+#: subst.c:6198
 #, c-format
 msgid "cannot open named pipe %s for reading"
 msgstr "no se puede abrir la tubería llamada %s para lectura"
 
-#: subst.c:6061
+#: subst.c:6200
 #, c-format
 msgid "cannot open named pipe %s for writing"
 msgstr "no se puede abrir la tubería llamada %s para escritura"
 
-#: subst.c:6084
+#: subst.c:6223
 #, c-format
 msgid "cannot duplicate named pipe %s as fd %d"
 msgstr "no se puede duplicar la tubería llamada %s como df %d"
 
-#: subst.c:6213
+#: subst.c:6370
 msgid "command substitution: ignored null byte in input"
 msgstr "sustitución de orden: se ignora byte nulo en la entrada"
 
-#: subst.c:6353
+#: subst.c:6533
 msgid "cannot make pipe for command substitution"
 msgstr "no se puede crear la tubería para la sustitución de la orden"
 
-#: subst.c:6397
+#: subst.c:6580
 msgid "cannot make child for command substitution"
 msgstr "no se puede crear un proceso hijo para la sustitución de la orden"
 
-#: subst.c:6423
+#: subst.c:6613
 msgid "command_substitute: cannot duplicate pipe as fd 1"
 msgstr "command_substitute: no se puede duplicar la tubería como df 1"
 
-#: subst.c:6883 subst.c:9952
+#: subst.c:7082 subst.c:10252
 #, c-format
 msgid "%s: invalid variable name for name reference"
 msgstr "%s: nombre de variable inválido para referencia de nombre"
 
-#: subst.c:6979 subst.c:6997 subst.c:7169
+#: subst.c:7178 subst.c:7196 subst.c:7369
 #, c-format
 msgid "%s: invalid indirect expansion"
 msgstr "%s: expansión indirecta inválida"
 
-#: subst.c:7013 subst.c:7177
+#: subst.c:7212 subst.c:7377
 #, c-format
 msgid "%s: invalid variable name"
 msgstr "%s: nombre de variable inválido"
 
-#: subst.c:7256
+#: subst.c:7478
 #, c-format
 msgid "%s: parameter not set"
 msgstr "%s: parámetro no establecido"
 
-#: subst.c:7258
+#: subst.c:7480
 #, c-format
 msgid "%s: parameter null or not set"
 msgstr "%s: parámetro nulo o no establecido"
 
-#: subst.c:7503 subst.c:7518
+#: subst.c:7727 subst.c:7742
 #, c-format
 msgid "%s: substring expression < 0"
 msgstr "%s: expresión de subcadena < 0"
 
-#: subst.c:9281 subst.c:9302
+#: subst.c:9560 subst.c:9587
 #, c-format
 msgid "%s: bad substitution"
 msgstr "%s: sustitución errónea"
 
-#: subst.c:9390
+#: subst.c:9678
 #, c-format
 msgid "$%s: cannot assign in this way"
 msgstr "$%s: no se puede asignar de esta forma"
 
-#: subst.c:9814
+#: subst.c:10111
 msgid "future versions of the shell will force evaluation as an arithmetic substitution"
 msgstr "versiones futuras del intérprete obligarán la evaluación como una sustitución aritmética"
 
-#: subst.c:10367
+#: subst.c:10795
 #, c-format
 msgid "bad substitution: no closing \"`\" in %s"
 msgstr "sustitución errónea: no hay una \"`\" que cierre en %s"
 
-#: subst.c:11434
+#: subst.c:11874
 #, c-format
 msgid "no match: %s"
 msgstr "no hay coincidencia: %s"
@@ -2103,12 +2115,12 @@ msgstr "`)' esperado"
 msgid "`)' expected, found %s"
 msgstr "se esperaba `)', se encontró %s"
 
-#: test.c:466 test.c:799
+#: test.c:469 test.c:814
 #, c-format
 msgid "%s: binary operator expected"
 msgstr "%s: se esperaba un operador binario"
 
-#: test.c:756 test.c:759
+#: test.c:771 test.c:774
 #, c-format
 msgid "%s: unary operator expected"
 msgstr "%s: se esperaba un operador unario"
@@ -2120,11 +2132,11 @@ msgstr "%s: se esperaba un operador unario"
 # Abreviando "falta [al menos] un `]'" saldría: "falta un `]'".
 # ¿No es mejor "falta algún `]'"? cfuga
 # Tiene razón Enrique: singular. cfuga
-#: test.c:881
+#: test.c:896
 msgid "missing `]'"
 msgstr "falta un `]'"
 
-#: test.c:899
+#: test.c:914
 #, c-format
 msgid "syntax error: `%s' unexpected"
 msgstr "error sintáctico: `%s' inesperado"
@@ -2133,99 +2145,104 @@ msgstr "error sintáctico: `%s' inesperado"
 msgid "invalid signal number"
 msgstr "número de señal inválido"
 
-#: trap.c:325
+#: trap.c:323
 #, c-format
 msgid "trap handler: maximum trap handler level exceeded (%d)"
 msgstr "manejador de capturas: se ha excedido el nivel máximo de manejadores de capturas (%d)"
 
-#: trap.c:414
+#: trap.c:412
 #, c-format
 msgid "run_pending_traps: bad value in trap_list[%d]: %p"
 msgstr "run_pending_traps: valor erróneo en trap_list[%d]: %p"
 
-#: trap.c:418
+#: trap.c:416
 #, c-format
 msgid "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
 msgstr "run_pending_traps: el manejador de señal es SIG_DFL, reenviando %d (%s) a mí mismo"
 
-#: trap.c:487
+#: trap.c:509
 #, c-format
 msgid "trap_handler: bad signal %d"
 msgstr "trap_handler: señal errónea %d"
 
-#: variables.c:421
+#: variables.c:424
 #, c-format
 msgid "error importing function definition for `%s'"
 msgstr "error al importar la definición de la función para `%s'"
 
-#: variables.c:833
+#: variables.c:838
 #, c-format
 msgid "shell level (%d) too high, resetting to 1"
 msgstr "el nivel de shell (%d) es demasiado alto, se reestablece a 1"
 
-#: variables.c:2674
+#: variables.c:2642
 msgid "make_local_variable: no function context at current scope"
 msgstr "make_local_variable: no hay contexto de función en el ámbito actual"
 
-#: variables.c:2693
+#: variables.c:2661
 #, c-format
 msgid "%s: variable may not be assigned value"
 msgstr "%s: variable quizá no es valor asignado"
 
-#: variables.c:3475
+#: variables.c:2818 variables.c:2874
+#, c-format
+msgid "%s: cannot inherit value from incompatible type"
+msgstr "%s: no se puede heredar un valor de un tipo incompatible"
+
+#: variables.c:3459
 #, c-format
 msgid "%s: assigning integer to name reference"
 msgstr "%s: asignando entero a nombre referencia"
 
-#: variables.c:4404
+#: variables.c:4390
 msgid "all_local_variables: no function context at current scope"
 msgstr "all_local_variables: no hay contexto de función en el ámbito actual"
 
-#: variables.c:4771
+#: variables.c:4757
 #, c-format
 msgid "%s has null exportstr"
 msgstr "%s tiene exportstr nulo"
 
-#: variables.c:4776 variables.c:4785
+#: variables.c:4762 variables.c:4771
 #, c-format
 msgid "invalid character %d in exportstr for %s"
 msgstr "carácter inválido %d en exportstr para %s"
 
-#: variables.c:4791
+#: variables.c:4777
 #, c-format
 msgid "no `=' in exportstr for %s"
 msgstr "no hay `=' en exportstr para %s"
 
-#: variables.c:5331
+#: variables.c:5317
 msgid "pop_var_context: head of shell_variables not a function context"
 msgstr "pop_var_context: la cabeza de shell_variables no es un contexto de función"
 
-#: variables.c:5344
+#: variables.c:5330
 msgid "pop_var_context: no global_variables context"
 msgstr "pop_var_context: no es un contexto global_variables"
 
-#: variables.c:5424
+#: variables.c:5410
 msgid "pop_scope: head of shell_variables not a temporary environment scope"
 msgstr "pop_scope: la cabeza de shell_variables no es un ámbito de entorno temporal"
 
-#: variables.c:6387
+#: variables.c:6400
 #, c-format
 msgid "%s: %s: cannot open as FILE"
 msgstr "%s: %s: no se puede abrir como FICHERO"
 
-#: variables.c:6392
+#: variables.c:6405
 #, c-format
 msgid "%s: %s: invalid value for trace file descriptor"
 msgstr "%s: %s: valor inválido para el descriptor de fichero de rastreo"
 
-#: variables.c:6437
+#: variables.c:6450
 #, c-format
 msgid "%s: %s: compatibility value out of range"
 msgstr "%s: %s: valor de compatibilidad fuera del rango"
 
 #: version.c:46 version2.c:46
-msgid "Copyright (C) 2020 Free Software Foundation, Inc."
-msgstr "Copyright (C) 2020 Free Software Foundation, Inc."
+msgid "Copyright (C) 2022 Free Software Foundation, Inc."
+msgstr "Copyright (C) 2022 Free Software Foundation, Inc."
 
 #: version.c:47 version2.c:47
 msgid "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n"
@@ -2305,12 +2322,12 @@ msgid "command [-pVv] command [arg ...]"
 msgstr "command [-pVv] orden [arg ...]"
 
 #: builtins.c:78
-msgid "declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]"
-msgstr "declare [-aAfFgiIlnrtux] [-p] [nombre[=valor] ...]"
+msgid "declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] [name ...]"
+msgstr "declare [-aAfFgiIlnrtux] [nombre[=valor] ...] o declare -p [-aAfFilnrtux] [nombre ...]"
 
 #: builtins.c:80
-msgid "typeset [-aAfFgiIlnrtux] [-p] name[=value] ..."
-msgstr "typeset [-aAfFgiIlnrtux] [-p] nombre[=valor] ..."
+msgid "typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] [name ...]"
+msgstr "typeset [-aAfFgiIlnrtux] nombre[=valor] ... o typeset -p [-aAfFilnrtux] [nombre ...]"
 
 #: builtins.c:82
 msgid "local [option] name[=value] ..."
@@ -2402,8 +2419,8 @@ msgid "return [n]"
 msgstr "return [n]"
 
 #: builtins.c:142
-msgid "set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]"
-msgstr "set [-abefhkmnptuvxBCHP] [-o nombre-opción] [--] [arg ...]"
+msgid "set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]"
+msgstr "set [-abefhkmnptuvxBCEHPT] [-o nombre-opción] [--] [-] [arg ...]"
 
 #: builtins.c:144
 msgid "unset [-f] [-v] [-n] [name ...]"
@@ -2450,8 +2467,8 @@ msgid "type [-afptP] name [name ...]"
 msgstr "type [-afptP] nombre [nombre ...]"
 
 #: builtins.c:171
-msgid "ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]"
-msgstr "ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]"
+msgid "ulimit [-SHabcdefiklmnpqrstuvxPRT] [limit]"
+msgstr "ulimit [-SHabcdefiklmnpqrstuvxPRT] [límite]"
 
 #: builtins.c:174
 msgid "umask [-p] [-S] [mode]"
@@ -2490,12 +2507,12 @@ msgid "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else C
 msgstr "if ÓRDENES; then ÓRDENES; [ elif ÓRDENES; then ÓRDENES; ]...[ else ÓRDENES; ] fi"
 
 #: builtins.c:196
-msgid "while COMMANDS; do COMMANDS; done"
-msgstr "while ÓRDENES; do ÓRDENES; done"
+msgid "while COMMANDS; do COMMANDS-2; done"
+msgstr "while ÓRDENES; do ÓRDENES-2; done"
 
 #: builtins.c:198
-msgid "until COMMANDS; do COMMANDS; done"
-msgstr "until ÓRDENES; do ÓRDENES; done"
+msgid "until COMMANDS; do COMMANDS-2; done"
+msgstr "until ÓRDENES; do ÓRDENES-2; done"
 
 #: builtins.c:200
 msgid "coproc [NAME] command [redirections]"
@@ -3849,7 +3866,8 @@ msgid ""
 "    splitting, and the first word is assigned to the first NAME, the second\n"
 "    word to the second NAME, and so on, with any leftover words assigned to\n"
 "    the last NAME.  Only the characters found in $IFS are recognized as word\n"
-"    delimiters.\n"
+"    delimiters. By default, the backslash character escapes delimiter characters\n"
+"    and newline.\n"
 "    \n"
 "    If no NAMEs are supplied, the line read is stored in the REPLY variable.\n"
 "    \n"
@@ -3893,6 +3911,8 @@ msgstr ""
 "    NOMBRE, la segunda palabra al segundo NOMBRE, y así sucesivamente, con\n"
 "    las palabras restantes asignadas al último NOMBRE.  Sólo los caracteres\n"
 "    que se encuentran en $IFS se reconocen como delimitadores de palabras.\n"
+"    Lo predefinido es que el carácter de barra inclinada inversa escape los\n"
+"    delimitadores de caracteres y las nuevas líneas.\n"
 "    \n"
 "    Si no se proporciona ningún NOMBRE, la línea leída se guarda en la\n"
 "    variable REPLY.\n"
@@ -3929,7 +3949,7 @@ msgstr ""
 "    línea, el tiempo de lectura se agote, o se proporcione un descriptor\n"
 "    de fichero inválido como el argumento de -u."
 
-#: builtins.c:1041
+#: builtins.c:1042
 msgid ""
 "Return from a shell function.\n"
 "    \n"
@@ -3949,7 +3969,7 @@ msgstr ""
 "    Estado de Salida:\n"
 "    Devuelve N, o falla si el shell no está ejecutando una función o un script."
 
-#: builtins.c:1054
+#: builtins.c:1055
 msgid ""
 "Set or unset values of shell options and positional parameters.\n"
 "    \n"
@@ -4115,7 +4135,7 @@ msgstr ""
 "    Estado de Salida:\n"
 "    Devuelve correcto a menos que se proporcione una opción inválida."
 
-#: builtins.c:1139
+#: builtins.c:1140
 msgid ""
 "Unset values and attributes of shell variables and functions.\n"
 "    \n"
@@ -4154,7 +4174,7 @@ msgstr ""
 "    Devuelve correcto a menos que se proporcione una opción inválida o\n"
 "    un NOMBRE sea de sólo lectura."
 
-#: builtins.c:1161
+#: builtins.c:1162
 msgid ""
 "Set export attribute for shell variables.\n"
 "    \n"
@@ -4188,7 +4208,7 @@ msgstr ""
 "    Devuelve correcto a menos que se proporcione una opción inválida o que\n"
 "    NOMBRE sea inválido."
 
-#: builtins.c:1180
+#: builtins.c:1181
 msgid ""
 "Mark shell variables as unchangeable.\n"
 "    \n"
@@ -4227,7 +4247,7 @@ msgstr ""
 "    Devuelve correcto a menos que se proporcione una opción inválida o\n"
 "    el NOMBRE sea inválido."
 
-#: builtins.c:1202
+#: builtins.c:1203
 msgid ""
 "Shift positional parameters.\n"
 "    \n"
@@ -4245,7 +4265,7 @@ msgstr ""
 "    Estado de Salida:\n"
 "    Devuelve correcto a menos que N sea negativo o mayor que $#."
 
-#: builtins.c:1214 builtins.c:1229
+#: builtins.c:1215 builtins.c:1230
 msgid ""
 "Execute commands from a file in the current shell.\n"
 "    \n"
@@ -4269,7 +4289,7 @@ msgstr ""
 "    Devuelve el estado de la última orden ejecutada del FICHERO; falla si\n"
 "    no se puede leer el FICHERO."
 
-#: builtins.c:1245
+#: builtins.c:1246
 msgid ""
 "Suspend shell execution.\n"
 "    \n"
@@ -4294,7 +4314,7 @@ msgstr ""
 "    Devuelve correcto a menos que no esté activo el control de trabajos o\n"
 "    suceda un error."
 
-#: builtins.c:1261
+#: builtins.c:1262
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -4454,7 +4474,7 @@ msgstr ""
 "    Devuelve correcto si EXPR evalúa a verdadero; falla si EXPR evalúa a\n"
 "    falso o se proporciona un argumento inválido."
 
-#: builtins.c:1343
+#: builtins.c:1344
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -4466,7 +4486,7 @@ msgstr ""
 "    Este es un sinónimo para la orden interna \"test\", pero el último\n"
 "    argumento debe ser un `]' literal, que concuerde con el `[' inicial."
 
-#: builtins.c:1352
+#: builtins.c:1353
 msgid ""
 "Display process times.\n"
 "    \n"
@@ -4484,7 +4504,7 @@ msgstr ""
 "    Estado de Salida:\n"
 "    Siempre correcto."
 
-#: builtins.c:1364
+#: builtins.c:1365
 msgid ""
 "Trap signals and other events.\n"
 "    \n"
@@ -4555,7 +4575,7 @@ msgstr ""
 
 #  No he visto que este fichero incluya la posibilidad de traducir las
 #  palabras que muestra `type -t'. Por esta razón, se dejan en inglés. cfuga
-#: builtins.c:1400
+#: builtins.c:1401
 msgid ""
 "Display information about command type.\n"
 "    \n"
@@ -4610,7 +4630,7 @@ msgstr ""
 "    Devuelve correcto si se encuentran todos los NOMBREs; falla si alguno\n"
 "    no se encuentra."
 
-#: builtins.c:1431
+#: builtins.c:1432
 msgid ""
 "Modify shell resource limits.\n"
 "    \n"
@@ -4707,7 +4727,7 @@ msgstr ""
 "    Devuelve correcto a menos que se proporcione una opción inválida o suceda\n"
 "    un error."
 
-#: builtins.c:1482
+#: builtins.c:1483
 msgid ""
 "Display or set file mode mask.\n"
 "    \n"
@@ -4740,7 +4760,7 @@ msgstr ""
 "    Devuelve correcto a menos que el MODO sea inválido o se proporcione\n"
 "    una opción inválida."
 
-#: builtins.c:1502
+#: builtins.c:1503
 msgid ""
 "Wait for job completion and return exit status.\n"
 "    \n"
@@ -4794,7 +4814,7 @@ msgstr ""
 "    opción inválida o si proporciona -n y la shell no tiene ningún hijo al que\n"
 "    esperar."
 
-#: builtins.c:1533
+#: builtins.c:1534
 msgid ""
 "Wait for process completion and return exit status.\n"
 "    \n"
@@ -4817,7 +4837,7 @@ msgstr ""
 "    Devuelve el estado del último PID; falla si PID es inválido o se proporciona\n"
 "    una opción inválida."
 
-#: builtins.c:1548
+#: builtins.c:1549
 msgid ""
 "Execute commands for each member in a list.\n"
 "    \n"
@@ -4839,7 +4859,7 @@ msgstr ""
 "    Estado de Salida:\n"
 "    Devuelve el estado de la última orden ejecutada."
 
-#: builtins.c:1562
+#: builtins.c:1563
 msgid ""
 "Arithmetic for loop.\n"
 "    \n"
@@ -4869,7 +4889,7 @@ msgstr ""
 "    Estado de Salida:\n"
 "    Devuelve el estado de la última orden ejecutada."
 
-#: builtins.c:1580
+#: builtins.c:1581
 msgid ""
 "Select words from a list and execute commands.\n"
 "    \n"
@@ -4906,7 +4926,7 @@ msgstr ""
 "    Estado de Salida:\n"
 "    Devuelve el estado de la última orden ejecutada."
 
-#: builtins.c:1601
+#: builtins.c:1602
 msgid ""
 "Report time consumed by pipeline's execution.\n"
 "    \n"
@@ -4933,7 +4953,7 @@ msgstr ""
 "    Estado de Salida:\n"
 "    El estado de devolución es el estado de devolución de la TUBERÍA."
 
-#: builtins.c:1618
+#: builtins.c:1619
 msgid ""
 "Execute commands based on pattern matching.\n"
 "    \n"
@@ -4951,7 +4971,7 @@ msgstr ""
 "    Estado de Salida:\n"
 "    Devuelve el estado de la última orden ejecutada."
 
-#: builtins.c:1630
+#: builtins.c:1631
 msgid ""
 "Execute commands based on conditional.\n"
 "    \n"
@@ -4980,43 +5000,43 @@ msgstr ""
 "    Estado de Salida:\n"
 "    Devuelve el estado de la última orden ejecutada."
 
-#: builtins.c:1647
+#: builtins.c:1648
 msgid ""
 "Execute commands as long as a test succeeds.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `while' COMMANDS has an exit status of zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n"
+"    an exit status of zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
 "Ejecuta órdenes mientras una prueba sea correcta.\n"
 "    \n"
-"    Expande y ejecuta ÓRDENES mientras la orden final en las ÓRDENES\n"
-"    `while' tenga un estado de salida de cero.\n"
+"    Expande y ejecuta ÓRDENES-2 mientras la orden final en ÓRDENES\n"
+"    tenga un estado de salida de cero.\n"
 "    \n"
 "    Estado de Salida:\n"
 "    Devuelve el estado de la última orden ejecutada."
 
-#: builtins.c:1659
+#: builtins.c:1660
 msgid ""
 "Execute commands as long as a test does not succeed.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `until' COMMANDS has an exit status which is not zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n"
+"    an exit status which is not zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
 "Ejecuta órdenes mientras una prueba sea correcta.\n"
 "    \n"
-"    Expande y ejecuta ÓRDENES mientras la orden final en las ÓRDENES\n"
-"    `until' tengan un estado de salida que no sea cero.\n"
+"    Expande y ejecuta ÓRDENES-2 mientras la orden final en ÓRDENES\n"
+"    tenga un estado de salida que no sea cero.\n"
 "    \n"
 "    Estado de Salida:\n"
 "    Devuelve el estado de la última orden ejecutada."
 
-#: builtins.c:1671
+#: builtins.c:1672
 msgid ""
 "Create a coprocess named NAME.\n"
 "    \n"
@@ -5039,7 +5059,7 @@ msgstr ""
 "    Estado de Salida:\n"
 "    La orden «coproc» devuelve un estado de salida de 0."
 
-#: builtins.c:1685
+#: builtins.c:1686
 msgid ""
 "Define shell function.\n"
 "    \n"
@@ -5061,7 +5081,7 @@ msgstr ""
 "    Estado de Salida:\n"
 "    Devuelve correcto a menos que NOMBRE sea de sólo lectura."
 
-#: builtins.c:1699
+#: builtins.c:1700
 msgid ""
 "Group commands as a unit.\n"
 "    \n"
@@ -5079,7 +5099,7 @@ msgstr ""
 "    Estado de Salida:\n"
 "    Devuelve el estado de la última orden ejecutada."
 
-#: builtins.c:1711
+#: builtins.c:1712
 msgid ""
 "Resume job in foreground.\n"
 "    \n"
@@ -5104,7 +5124,7 @@ msgstr ""
 "    Estado de Salida:\n"
 "    Devuelve el estado del trabajo reiniciado."
 
-#: builtins.c:1726
+#: builtins.c:1727
 msgid ""
 "Evaluate arithmetic expression.\n"
 "    \n"
@@ -5122,7 +5142,7 @@ msgstr ""
 "    Estado de Salida:\n"
 "    Devuelve 1 si la EXPRESIÓN evalúa a 0; devuelve 0 en caso contrario."
 
-#: builtins.c:1738
+#: builtins.c:1739
 msgid ""
 "Execute conditional command.\n"
 "    \n"
@@ -5170,7 +5190,7 @@ msgstr ""
 "    Estado de Salida:\n"
 "    0 o 1 dependiendo del valor de la EXPRESIÓN."
 
-#: builtins.c:1764
+#: builtins.c:1765
 msgid ""
 "Common shell variable names and usage.\n"
 "    \n"
@@ -5285,7 +5305,7 @@ msgstr ""
 "    \t\tutilizados para decidir qué órdenes se deben guardar en\n"
 "    \t\tel listado histórico.\n"
 
-#: builtins.c:1821
+#: builtins.c:1822
 msgid ""
 "Add directories to stack.\n"
 "    \n"
@@ -5344,7 +5364,7 @@ msgstr ""
 "    Devuelve correcto a menos que se proporcione un argumento\n"
 "    inválido o falle el cambio de directorio."
 
-#: builtins.c:1855
+#: builtins.c:1856
 msgid ""
 "Remove directories from stack.\n"
 "    \n"
@@ -5398,7 +5418,7 @@ msgstr ""
 "    Devuelve correcto a menos que se proporcione un\n"
 "    argumento inválido o falle el cambio de directorio."
 
-#: builtins.c:1885
+#: builtins.c:1886
 msgid ""
 "Display directory stack.\n"
 "    \n"
@@ -5453,7 +5473,7 @@ msgstr ""
 "    Devuelve correcto, a menos que se proporcione una opción inválida o\n"
 "    suceda un error."
 
-#: builtins.c:1916
+#: builtins.c:1917
 msgid ""
 "Set and unset shell options.\n"
 "    \n"
@@ -5491,7 +5511,7 @@ msgstr ""
 "    Devuelve correcto si se activa NOMBRE_OPCIÓN; falla si se proporciona\n"
 "    una opción inválida o NOMBRE_OPCIÓN está desactivado."
 
-#: builtins.c:1937
+#: builtins.c:1938
 msgid ""
 "Formats and prints ARGUMENTS under control of the FORMAT.\n"
 "    \n"
@@ -5510,6 +5530,8 @@ msgid ""
 "    \n"
 "      %b\texpand backslash escape sequences in the corresponding argument\n"
 "      %q\tquote the argument in a way that can be reused as shell input\n"
+"      %Q\tlike %q, but apply any precision to the unquoted argument before\n"
+"    \t\tquoting\n"
 "      %(fmt)T\toutput the date-time string resulting from using FMT as a format\n"
 "    \t        string for strftime(3)\n"
 "    \n"
@@ -5539,9 +5561,11 @@ msgstr ""
 "    printf(1) y printf(3), printf interpreta:\n"
 "    \n"
 "      %b\texpande las secuencias de escape de barra invertida en\n"
-"            el argumento correspondiente\n"
-"      %q\tcita el argumento de tal forma que se pueda reutilizar como\n"
-"            entrada del shell.\n"
+"    \t\tel argumento correspondiente\n"
+"      %q\tentrecomilla el argumento de tal forma que se pueda reutilizar\n"
+"    \t\tcomo entrada del shell.\n"
+"      %Q\tigual que %q, pero aplica la precisión al argumento sin\n"
+"    \t\tentrecomillar antes de entrecomillarlo\n"
 "      %(fmt)T muestra la cadena fecha hora resultante de usar FMT como\n"
 "            una cadena de formato para strftime(3)\n"
 "    \n"
@@ -5554,7 +5578,7 @@ msgstr ""
 "    Devuelve correcto a menos que se proporcione una opción inválida o\n"
 "    suceda un error de escritura o de asignación."
 
-#: builtins.c:1971
+#: builtins.c:1974
 msgid ""
 "Specify how arguments are to be completed by Readline.\n"
 "    \n"
@@ -5608,7 +5632,7 @@ msgstr ""
 "    Devuelve correcto a menos que se proporcione una opción inválida o\n"
 "    suceda un error."
 
-#: builtins.c:2001
+#: builtins.c:2004
 msgid ""
 "Display possible completions depending on the options.\n"
 "    \n"
@@ -5629,7 +5653,7 @@ msgstr ""
 "    Devuelve correcto a menos que se proporcione una opción inválida o\n"
 "    suceda un error."
 
-#: builtins.c:2016
+#: builtins.c:2019
 msgid ""
 "Modify or display completion options.\n"
 "    \n"
@@ -5684,7 +5708,7 @@ msgstr ""
 "    Devuelve correcto a menos que se proporcione una opción inválida o\n"
 "    NOMBRE no tenga una especificación de completado definida."
 
-#: builtins.c:2047
+#: builtins.c:2050
 msgid ""
 "Read lines from the standard input into an indexed array variable.\n"
 "    \n"
@@ -5751,7 +5775,7 @@ msgstr ""
 "    Devuelve correcto a menos que se proporcione una opción inválida o\n"
 "    la MATRIZ sea de sólo lectura o no sea una matriz indexada."
 
-#: builtins.c:2083
+#: builtins.c:2086
 msgid ""
 "Read lines from a file into an array variable.\n"
 "    \n"
@@ -5761,6 +5785,9 @@ msgstr ""
 "    \n"
 "    Sinónimo de `mapfile'."
 
+#~ msgid "%s: invalid associative array key"
+#~ msgstr "%s: clave de matriz asociativa no válida"
+
 #~ msgid ""
 #~ "Returns the context of the current subroutine call.\n"
 #~ "    \n"
index c0181254887b6a0aa67d8e4ec6a7766316e8dd71..ac47880e2d4648bb06fbd2fa9e7623072d53d348 100644 (file)
Binary files a/po/et.gmo and b/po/et.gmo differ
index 58f0e27e4c20327f2b001e5cbb7c18e3c47ec4fe..80c092e671c2e8001c0c3ec7798743840d91d180 100644 (file)
--- a/po/et.po
+++ b/po/et.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: bash 3.2\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-11-28 12:51-0500\n"
+"POT-Creation-Date: 2022-01-11 14:50-0500\n"
 "PO-Revision-Date: 2006-11-11 16:38+0200\n"
 "Last-Translator: Toomas Soome <Toomas.Soome@microlink.ee>\n"
 "Language-Team: Estonian <et@li.org>\n"
@@ -20,57 +20,52 @@ msgstr ""
 msgid "bad array subscript"
 msgstr "vigane massiivi indeks"
 
-#: arrayfunc.c:421 builtins/declare.def:638 variables.c:2274 variables.c:2300
-#: variables.c:3133
+#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268
+#: variables.c:3101
 #, c-format
 msgid "%s: removing nameref attribute"
 msgstr ""
 
-#: arrayfunc.c:446 builtins/declare.def:851
+#: arrayfunc.c:496 builtins/declare.def:868
 #, c-format
 msgid "%s: cannot convert indexed to associative array"
 msgstr ""
 
-#: arrayfunc.c:700
-#, fuzzy, c-format
-msgid "%s: invalid associative array key"
-msgstr "%s: vigane tegevuse nimi"
-
-#: arrayfunc.c:702
+#: arrayfunc.c:777
 #, c-format
 msgid "%s: cannot assign to non-numeric index"
 msgstr "%s: mitte-numbrilisele indeksile ei saa omistada"
 
-#: arrayfunc.c:747
+#: arrayfunc.c:822
 #, c-format
 msgid "%s: %s: must use subscript when assigning associative array"
 msgstr ""
 
-#: bashhist.c:452
+#: bashhist.c:455
 #, c-format
 msgid "%s: cannot create: %s"
 msgstr "%s: ei saa luua: %s"
 
-#: bashline.c:4310
+#: bashline.c:4479
 msgid "bash_execute_unix_command: cannot find keymap for command"
 msgstr ""
 
-#: bashline.c:4459
+#: bashline.c:4637
 #, c-format
 msgid "%s: first non-whitespace character is not `\"'"
 msgstr "%s: esimine mitte-tühemik sümbol pole `\"'"
 
-#: bashline.c:4488
+#: bashline.c:4666
 #, c-format
 msgid "no closing `%c' in %s"
 msgstr "sulgev `%c' puudub %s sees"
 
-#: bashline.c:4519
+#: bashline.c:4697
 #, c-format
 msgid "%s: missing colon separator"
 msgstr "%s: puudub eraldav koolon"
 
-#: bashline.c:4555
+#: bashline.c:4733
 #, fuzzy, c-format
 msgid "`%s': cannot unbind in command keymap"
 msgstr "`%s': ei saa lahti siduda"
@@ -90,7 +85,7 @@ msgstr ""
 msgid "brace expansion: failed to allocate memory for `%s'"
 msgstr ""
 
-#: builtins/alias.def:131 variables.c:1844
+#: builtins/alias.def:131 variables.c:1817
 #, fuzzy, c-format
 msgid "`%s': invalid alias name"
 msgstr "%s: vigane tegevuse nimi"
@@ -153,7 +148,7 @@ msgstr ""
 msgid "HOME not set"
 msgstr "HOME pole seatud"
 
-#: builtins/cd.def:335 builtins/common.c:161 test.c:901
+#: builtins/cd.def:335 builtins/common.c:161 test.c:916
 msgid "too many arguments"
 msgstr "liiga palju argumente"
 
@@ -181,7 +176,7 @@ msgstr "%s: hoiatus: "
 msgid "%s: usage: "
 msgstr "%s: hoiatus: "
 
-#: builtins/common.c:193 shell.c:516 shell.c:844
+#: builtins/common.c:193 shell.c:524 shell.c:866
 #, c-format
 msgid "%s: option requires an argument"
 msgstr "%s: võti nõuab argumenti"
@@ -196,7 +191,7 @@ msgstr "%s: n
 msgid "%s: not found"
 msgstr "%s: ei leitud"
 
-#: builtins/common.c:216 shell.c:857
+#: builtins/common.c:216 shell.c:879
 #, c-format
 msgid "%s: invalid option"
 msgstr "%s: vigane võti"
@@ -206,7 +201,7 @@ msgstr "%s: vigane v
 msgid "%s: invalid option name"
 msgstr "%s: vigane võtme nimi"
 
-#: builtins/common.c:230 execute_cmd.c:2373 general.c:368 general.c:373
+#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373
 #, c-format
 msgid "`%s': not a valid identifier"
 msgstr "`%s': ei ole lubatud identifikaator"
@@ -221,7 +216,7 @@ msgstr "vigane signaali number"
 msgid "invalid hex number"
 msgstr "vigane number"
 
-#: builtins/common.c:244 expr.c:1569
+#: builtins/common.c:244 expr.c:1574
 msgid "invalid number"
 msgstr "vigane number"
 
@@ -235,88 +230,93 @@ msgstr "%s: vigane signaali spetsifikatsioon"
 msgid "`%s': not a pid or valid job spec"
 msgstr "`%s': ei ole pid ega korrektne töö spetsifikatsioon"
 
-#: builtins/common.c:266 error.c:510
+#: builtins/common.c:266 error.c:536
 #, c-format
 msgid "%s: readonly variable"
 msgstr "%s: mittemuudetav muutuja"
 
-#: builtins/common.c:274
+#: builtins/common.c:273
+#, fuzzy, c-format
+msgid "%s: cannot assign"
+msgstr "%s: ei saa eemaldada"
+
+#: builtins/common.c:281
 #, c-format
 msgid "%s: %s out of range"
 msgstr "%s: %s on piiridest väljas"
 
-#: builtins/common.c:274 builtins/common.c:276
+#: builtins/common.c:281 builtins/common.c:283
 msgid "argument"
 msgstr "argument"
 
-#: builtins/common.c:276
+#: builtins/common.c:283
 #, c-format
 msgid "%s out of range"
 msgstr "%s on piiridest väljas"
 
-#: builtins/common.c:284
+#: builtins/common.c:291
 #, c-format
 msgid "%s: no such job"
 msgstr "%s: sellist tööd pole"
 
-#: builtins/common.c:292
+#: builtins/common.c:299
 #, c-format
 msgid "%s: no job control"
 msgstr "%s: töökontroll puudub"
 
-#: builtins/common.c:294
+#: builtins/common.c:301
 msgid "no job control"
 msgstr "töökontroll puudub"
 
-#: builtins/common.c:304
+#: builtins/common.c:311
 #, c-format
 msgid "%s: restricted"
 msgstr "%s: piiratud"
 
-#: builtins/common.c:306
+#: builtins/common.c:313
 msgid "restricted"
 msgstr "piiratud"
 
-#: builtins/common.c:314
+#: builtins/common.c:321
 #, c-format
 msgid "%s: not a shell builtin"
 msgstr "%s: ei ole sisekäsk"
 
-#: builtins/common.c:323
+#: builtins/common.c:330
 #, c-format
 msgid "write error: %s"
 msgstr "kirjutamise viga: %s"
 
-#: builtins/common.c:331
+#: builtins/common.c:338
 #, c-format
 msgid "error setting terminal attributes: %s"
 msgstr ""
 
-#: builtins/common.c:333
+#: builtins/common.c:340
 #, c-format
 msgid "error getting terminal attributes: %s"
 msgstr ""
 
-#: builtins/common.c:635
+#: builtins/common.c:642
 #, c-format
 msgid "%s: error retrieving current directory: %s: %s\n"
 msgstr ""
 
-#: builtins/common.c:701 builtins/common.c:703
+#: builtins/common.c:708 builtins/common.c:710
 #, c-format
 msgid "%s: ambiguous job spec"
 msgstr "%s: segane töö"
 
-#: builtins/common.c:964
+#: builtins/common.c:971
 msgid "help not available in this version"
 msgstr ""
 
-#: builtins/common.c:1008 builtins/set.def:953 variables.c:3839
+#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825
 #, c-format
 msgid "%s: cannot unset: readonly %s"
 msgstr "%s: ei saa eemaldada: %s on ainult lugemiseks"
 
-#: builtins/common.c:1013 builtins/set.def:932 variables.c:3844
+#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830
 #, c-format
 msgid "%s: cannot unset"
 msgstr "%s: ei saa eemaldada"
@@ -326,108 +326,108 @@ msgstr "%s: ei saa eemaldada"
 msgid "%s: invalid action name"
 msgstr "%s: vigane tegevuse nimi"
 
-#: builtins/complete.def:486 builtins/complete.def:634
-#: builtins/complete.def:865
+#: builtins/complete.def:486 builtins/complete.def:642
+#: builtins/complete.def:873
 #, c-format
 msgid "%s: no completion specification"
 msgstr ""
 
-#: builtins/complete.def:688
+#: builtins/complete.def:696
 msgid "warning: -F option may not work as you expect"
 msgstr "hoiatus: võti -F ei pruugi töötada nagu te ootate"
 
-#: builtins/complete.def:690
+#: builtins/complete.def:698
 msgid "warning: -C option may not work as you expect"
 msgstr "hoiatus: võti -C ei pruugi töötada nagu te ootate"
 
-#: builtins/complete.def:838
+#: builtins/complete.def:846
 msgid "not currently executing completion function"
 msgstr ""
 
-#: builtins/declare.def:134
+#: builtins/declare.def:137
 msgid "can only be used in a function"
 msgstr "saab kasutada ainult funktsioonis"
 
-#: builtins/declare.def:363 builtins/declare.def:756
+#: builtins/declare.def:437
+msgid "cannot use `-f' to make functions"
+msgstr "võtit `-f' ei saa funktsiooni loomiseks kasutada"
+
+#: builtins/declare.def:464 execute_cmd.c:6132
+#, c-format
+msgid "%s: readonly function"
+msgstr "%s: funktsioon ei ole muudetav"
+
+#: builtins/declare.def:521 builtins/declare.def:804
 #, c-format
 msgid "%s: reference variable cannot be an array"
 msgstr ""
 
-#: builtins/declare.def:374 variables.c:3385
+#: builtins/declare.def:532 variables.c:3359
 #, c-format
 msgid "%s: nameref variable self references not allowed"
 msgstr ""
 
-#: builtins/declare.def:379 variables.c:2104 variables.c:3304 variables.c:3312
-#: variables.c:3382
+#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286
+#: variables.c:3356
 #, c-format
 msgid "%s: circular name reference"
 msgstr ""
 
-#: builtins/declare.def:384 builtins/declare.def:762 builtins/declare.def:773
+#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820
 #, c-format
 msgid "`%s': invalid variable name for name reference"
 msgstr ""
 
-#: builtins/declare.def:514
-msgid "cannot use `-f' to make functions"
-msgstr "võtit `-f' ei saa funktsiooni loomiseks kasutada"
-
-#: builtins/declare.def:526 execute_cmd.c:5986
-#, c-format
-msgid "%s: readonly function"
-msgstr "%s: funktsioon ei ole muudetav"
-
-#: builtins/declare.def:824
-#, c-format
-msgid "%s: quoted compound array assignment deprecated"
-msgstr ""
-
-#: builtins/declare.def:838
+#: builtins/declare.def:856
 #, c-format
 msgid "%s: cannot destroy array variables in this way"
 msgstr "%s: masiivi muutujaid ei saa nii kustutada"
 
-#: builtins/declare.def:845 builtins/read.def:815
+#: builtins/declare.def:862 builtins/read.def:887
 #, c-format
 msgid "%s: cannot convert associative to indexed array"
 msgstr ""
 
-#: builtins/enable.def:143 builtins/enable.def:151
+#: builtins/declare.def:891
+#, c-format
+msgid "%s: quoted compound array assignment deprecated"
+msgstr ""
+
+#: builtins/enable.def:145 builtins/enable.def:153
 msgid "dynamic loading not available"
 msgstr "dünaamilist laadimist et saa kasutada"
 
-#: builtins/enable.def:343
+#: builtins/enable.def:376
 #, c-format
 msgid "cannot open shared object %s: %s"
 msgstr "jagatud objekti %s ei saa avada: %s"
 
-#: builtins/enable.def:371
+#: builtins/enable.def:405
 #, c-format
 msgid "cannot find %s in shared object %s: %s"
 msgstr "%s puudub jagatud objektis %s: %s"
 
-#: builtins/enable.def:388
+#: builtins/enable.def:422
 #, fuzzy, c-format
 msgid "%s: dynamic builtin already loaded"
 msgstr "%s: pole dünaamiliselt laetud"
 
-#: builtins/enable.def:392
+#: builtins/enable.def:426
 #, c-format
 msgid "load function for %s returns failure (%d): not loaded"
 msgstr ""
 
-#: builtins/enable.def:517
+#: builtins/enable.def:551
 #, c-format
 msgid "%s: not dynamically loaded"
 msgstr "%s: pole dünaamiliselt laetud"
 
-#: builtins/enable.def:543
+#: builtins/enable.def:577
 #, c-format
 msgid "%s: cannot delete: %s"
 msgstr "%s: ei saa kustutada: %s"
 
-#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5818
+#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959
 #, c-format
 msgid "%s: is a directory"
 msgstr "%s: on kataloog"
@@ -442,7 +442,7 @@ msgstr "%s: ei ole tavaline fail"
 msgid "%s: file is too large"
 msgstr "%s: fail on liiga suur"
 
-#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1647
+#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673
 #, c-format
 msgid "%s: cannot execute binary file"
 msgstr "%s: kahendfaili ei õnnestu käivitada"
@@ -536,12 +536,12 @@ msgid ""
 "no help topics match `%s'.  Try `help help' or `man -k %s' or `info %s'."
 msgstr ""
 
-#: builtins/help.def:224
+#: builtins/help.def:223
 #, c-format
 msgid "%s: cannot open: %s"
 msgstr "%s: ei saa avada: %s"
 
-#: builtins/help.def:524
+#: builtins/help.def:523
 #, c-format
 msgid ""
 "These shell commands are defined internally.  Type `help' to see this list.\n"
@@ -553,21 +553,21 @@ msgid ""
 "\n"
 msgstr ""
 
-#: builtins/history.def:155
+#: builtins/history.def:159
 msgid "cannot use more than one of -anrw"
 msgstr ""
 
-#: builtins/history.def:188 builtins/history.def:198 builtins/history.def:213
-#: builtins/history.def:230 builtins/history.def:242 builtins/history.def:249
+#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215
+#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247
 msgid "history position"
 msgstr ""
 
-#: builtins/history.def:340
+#: builtins/history.def:338
 #, fuzzy, c-format
 msgid "%s: invalid timestamp"
 msgstr "%s: vigane võtme nimi"
 
-#: builtins/history.def:451
+#: builtins/history.def:449
 #, c-format
 msgid "%s: history expansion failed"
 msgstr ""
@@ -590,79 +590,79 @@ msgstr ""
 msgid "Unknown error"
 msgstr "Tundmatu viga"
 
-#: builtins/let.def:97 builtins/let.def:122 expr.c:639 expr.c:657
+#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658
 msgid "expression expected"
 msgstr "oodati avaldist"
 
-#: builtins/mapfile.def:178
+#: builtins/mapfile.def:180
 #, fuzzy, c-format
 msgid "%s: not an indexed array"
 msgstr "%s: pole massiiv"
 
-#: builtins/mapfile.def:271 builtins/read.def:308
+#: builtins/mapfile.def:276 builtins/read.def:336
 #, c-format
 msgid "%s: invalid file descriptor specification"
 msgstr ""
 
-#: builtins/mapfile.def:279 builtins/read.def:315
+#: builtins/mapfile.def:284 builtins/read.def:343
 #, c-format
 msgid "%d: invalid file descriptor: %s"
 msgstr ""
 
-#: builtins/mapfile.def:288 builtins/mapfile.def:326
+#: builtins/mapfile.def:293 builtins/mapfile.def:331
 #, fuzzy, c-format
 msgid "%s: invalid line count"
 msgstr "%s: vigane võti"
 
-#: builtins/mapfile.def:299
+#: builtins/mapfile.def:304
 #, fuzzy, c-format
 msgid "%s: invalid array origin"
 msgstr "%s: vigane võti"
 
-#: builtins/mapfile.def:316
+#: builtins/mapfile.def:321
 #, fuzzy, c-format
 msgid "%s: invalid callback quantum"
 msgstr "%s: vigane tegevuse nimi"
 
-#: builtins/mapfile.def:349
+#: builtins/mapfile.def:354
 #, fuzzy
 msgid "empty array variable name"
 msgstr "%s: pole massiiv"
 
-#: builtins/mapfile.def:370
+#: builtins/mapfile.def:375
 msgid "array variable support required"
 msgstr ""
 
-#: builtins/printf.def:419
+#: builtins/printf.def:430
 #, c-format
 msgid "`%s': missing format character"
 msgstr ""
 
-#: builtins/printf.def:474
+#: builtins/printf.def:485
 #, fuzzy, c-format
 msgid "`%c': invalid time format specification"
 msgstr "%s: vigane signaali spetsifikatsioon"
 
-#: builtins/printf.def:676
+#: builtins/printf.def:708
 #, c-format
 msgid "`%c': invalid format character"
 msgstr ""
 
-#: builtins/printf.def:702
+#: builtins/printf.def:734
 #, fuzzy, c-format
 msgid "warning: %s: %s"
 msgstr "%s: hoiatus: "
 
-#: builtins/printf.def:788
+#: builtins/printf.def:822
 #, c-format
 msgid "format parsing problem: %s"
 msgstr ""
 
-#: builtins/printf.def:885
+#: builtins/printf.def:919
 msgid "missing hex digit for \\x"
 msgstr ""
 
-#: builtins/printf.def:900
+#: builtins/printf.def:934
 #, c-format
 msgid "missing unicode digit for \\%c"
 msgstr ""
@@ -758,12 +758,12 @@ msgid ""
 "    The `dirs' builtin displays the directory stack."
 msgstr ""
 
-#: builtins/read.def:280
+#: builtins/read.def:308
 #, c-format
 msgid "%s: invalid timeout specification"
 msgstr ""
 
-#: builtins/read.def:755
+#: builtins/read.def:827
 #, c-format
 msgid "read error: %d: %s"
 msgstr "viga lugemisel: %d: %s"
@@ -776,7 +776,7 @@ msgstr ""
 msgid "cannot simultaneously unset a function and a variable"
 msgstr ""
 
-#: builtins/set.def:966
+#: builtins/set.def:969
 #, c-format
 msgid "%s: not an array variable"
 msgstr "%s: pole massiiv"
@@ -795,11 +795,11 @@ msgstr "%s: ei saa eemaldada"
 msgid "shift count"
 msgstr "shift arv"
 
-#: builtins/shopt.def:310
+#: builtins/shopt.def:323
 msgid "cannot set and unset shell options simultaneously"
 msgstr ""
 
-#: builtins/shopt.def:428
+#: builtins/shopt.def:444
 #, c-format
 msgid "%s: invalid shell option name"
 msgstr ""
@@ -866,16 +866,16 @@ msgstr ""
 msgid "`%c': bad command"
 msgstr "`%c': halb käsklus"
 
-#: builtins/ulimit.def:455
+#: builtins/ulimit.def:464
 #, c-format
 msgid "%s: cannot get limit: %s"
 msgstr "%s: ei õnnestu lugeda piirangut: %s"
 
-#: builtins/ulimit.def:481
+#: builtins/ulimit.def:490
 msgid "limit"
 msgstr ""
 
-#: builtins/ulimit.def:493 builtins/ulimit.def:793
+#: builtins/ulimit.def:502 builtins/ulimit.def:802
 #, c-format
 msgid "%s: cannot modify limit: %s"
 msgstr "%s: ei õnnestu muuta piirangut: %s"
@@ -894,7 +894,7 @@ msgstr ""
 msgid "`%c': invalid symbolic mode character"
 msgstr ""
 
-#: error.c:89 error.c:347 error.c:349 error.c:351
+#: error.c:89 error.c:373 error.c:375 error.c:377
 msgid " line "
 msgstr ""
 
@@ -914,97 +914,107 @@ msgstr "Katkestan..."
 msgid "INFORM: "
 msgstr ""
 
-#: error.c:462
+#: error.c:310
+#, fuzzy, c-format
+msgid "DEBUG warning: "
+msgstr "%s: hoiatus: "
+
+#: error.c:488
 msgid "unknown command error"
 msgstr "tundmatu viga käsus"
 
-#: error.c:463
+#: error.c:489
 msgid "bad command type"
 msgstr ""
 
-#: error.c:464
+#: error.c:490
 msgid "bad connector"
 msgstr ""
 
-#: error.c:465
+#: error.c:491
 msgid "bad jump"
 msgstr ""
 
-#: error.c:503
+#: error.c:529
 #, c-format
 msgid "%s: unbound variable"
 msgstr "%s: sidumata muutuja"
 
-#: eval.c:242
+#: eval.c:243
 msgid "\atimed out waiting for input: auto-logout\n"
 msgstr ""
 
-#: execute_cmd.c:537
+#: execute_cmd.c:555
 #, c-format
 msgid "cannot redirect standard input from /dev/null: %s"
 msgstr ""
 
-#: execute_cmd.c:1297
+#: execute_cmd.c:1317
 #, c-format
 msgid "TIMEFORMAT: `%c': invalid format character"
 msgstr ""
 
-#: execute_cmd.c:2362
+#: execute_cmd.c:2391
 #, c-format
 msgid "execute_coproc: coproc [%d:%s] still exists"
 msgstr ""
 
-#: execute_cmd.c:2486
+#: execute_cmd.c:2524
 #, fuzzy
 msgid "pipe error"
 msgstr "kirjutamise viga: %s"
 
-#: execute_cmd.c:4793
+#: execute_cmd.c:4923
 #, c-format
 msgid "eval: maximum eval nesting level exceeded (%d)"
 msgstr ""
 
-#: execute_cmd.c:4805
+#: execute_cmd.c:4935
 #, c-format
 msgid "%s: maximum source nesting level exceeded (%d)"
 msgstr ""
 
-#: execute_cmd.c:4913
+#: execute_cmd.c:5043
 #, c-format
 msgid "%s: maximum function nesting level exceeded (%d)"
 msgstr ""
 
-#: execute_cmd.c:5467
+#: execute_cmd.c:5598
 #, c-format
 msgid "%s: restricted: cannot specify `/' in command names"
 msgstr "%s: piiratud: käskudes ei saa kasutada sümboleid `/'"
 
-#: execute_cmd.c:5574
+#: execute_cmd.c:5715
 #, c-format
 msgid "%s: command not found"
 msgstr "%s: käsku ei ole"
 
-#: execute_cmd.c:5816
+#: execute_cmd.c:5957
 #, c-format
 msgid "%s: %s"
 msgstr ""
 
-#: execute_cmd.c:5854
+#: execute_cmd.c:5975
+#, fuzzy, c-format
+msgid "%s: cannot execute: required file not found"
+msgstr "%s: kahendfaili ei õnnestu käivitada"
+
+#: execute_cmd.c:6000
 #, c-format
 msgid "%s: %s: bad interpreter"
 msgstr "%s: %s: halb interpretaator"
 
-#: execute_cmd.c:5891
+#: execute_cmd.c:6037
 #, fuzzy, c-format
 msgid "%s: cannot execute binary file: %s"
 msgstr "%s: kahendfaili ei õnnestu käivitada"
 
-#: execute_cmd.c:5977
+#: execute_cmd.c:6123
 #, fuzzy, c-format
 msgid "`%s': is a special builtin"
 msgstr "%s on shelli sisekäsk\n"
 
-#: execute_cmd.c:6029
+#: execute_cmd.c:6175
 #, c-format
 msgid "cannot duplicate fd %d to fd %d"
 msgstr ""
@@ -1017,70 +1027,70 @@ msgstr "avaldise rekursioon on liiga s
 msgid "recursion stack underflow"
 msgstr ""
 
-#: expr.c:477
+#: expr.c:478
 msgid "syntax error in expression"
 msgstr "süntaksi viga avaldises"
 
-#: expr.c:521
+#: expr.c:522
 msgid "attempted assignment to non-variable"
 msgstr "üritati omistada mitte-muutujale"
 
-#: expr.c:530
+#: expr.c:531
 #, fuzzy
 msgid "syntax error in variable assignment"
 msgstr "süntaksi viga avaldises"
 
-#: expr.c:544 expr.c:911
+#: expr.c:545 expr.c:912
 msgid "division by 0"
 msgstr "nulliga jagamine"
 
-#: expr.c:592
+#: expr.c:593
 msgid "bug: bad expassign token"
 msgstr ""
 
-#: expr.c:646
+#: expr.c:647
 msgid "`:' expected for conditional expression"
 msgstr ""
 
-#: expr.c:972
+#: expr.c:973
 msgid "exponent less than 0"
 msgstr "eksponent on väiksem kui 0"
 
-#: expr.c:1029
+#: expr.c:1030
 msgid "identifier expected after pre-increment or pre-decrement"
 msgstr ""
 
-#: expr.c:1056
+#: expr.c:1057
 msgid "missing `)'"
 msgstr "puudub `)'"
 
-#: expr.c:1107 expr.c:1487
+#: expr.c:1108 expr.c:1492
 msgid "syntax error: operand expected"
 msgstr "süntaksi viga: oodati operandi"
 
-#: expr.c:1489
+#: expr.c:1494
 msgid "syntax error: invalid arithmetic operator"
 msgstr "süntaksi viga: vigane aritmeetiline operaator"
 
-#: expr.c:1513
+#: expr.c:1518
 #, c-format
 msgid "%s%s%s: %s (error token is \"%s\")"
 msgstr ""
 
-#: expr.c:1573
+#: expr.c:1578
 msgid "invalid arithmetic base"
 msgstr "vigane aritmeetiline baas"
 
-#: expr.c:1582
+#: expr.c:1587
 #, fuzzy
 msgid "invalid integer constant"
 msgstr "%s: vigane võti"
 
-#: expr.c:1598
+#: expr.c:1603
 msgid "value too great for base"
 msgstr "väärtus on baasiks liiga suur"
 
-#: expr.c:1647
+#: expr.c:1652
 #, fuzzy, c-format
 msgid "%s: expression error\n"
 msgstr "%s: oodati täisarvude avaldist"
@@ -1089,7 +1099,7 @@ msgstr "%s: oodati t
 msgid "getcwd: cannot access parent directories"
 msgstr "getcwd: vanemkataloogidele ei ole juurdepääsu"
 
-#: input.c:99 subst.c:6069
+#: input.c:99 subst.c:6208
 #, c-format
 msgid "cannot reset nodelay mode for fd %d"
 msgstr ""
@@ -1108,215 +1118,215 @@ msgstr ""
 msgid "start_pipeline: pgrp pipe"
 msgstr ""
 
-#: jobs.c:906
+#: jobs.c:907
 #, c-format
 msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr ""
 
-#: jobs.c:959
+#: jobs.c:960
 #, c-format
 msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr ""
 
-#: jobs.c:1283
+#: jobs.c:1279
 #, c-format
 msgid "forked pid %d appears in running job %d"
 msgstr ""
 
-#: jobs.c:1402
+#: jobs.c:1397
 #, c-format
 msgid "deleting stopped job %d with process group %ld"
 msgstr ""
 
-#: jobs.c:1511
+#: jobs.c:1502
 #, c-format
 msgid "add_process: pid %5ld (%s) marked as still alive"
 msgstr ""
 
-#: jobs.c:1850
+#: jobs.c:1839
 #, c-format
 msgid "describe_pid: %ld: no such pid"
 msgstr "describe_pid: %ld: pid puudub"
 
-#: jobs.c:1865
+#: jobs.c:1854
 #, c-format
 msgid "Signal %d"
 msgstr ""
 
-#: jobs.c:1879 jobs.c:1905
+#: jobs.c:1868 jobs.c:1894
 msgid "Done"
 msgstr ""
 
-#: jobs.c:1884 siglist.c:122
+#: jobs.c:1873 siglist.c:123
 msgid "Stopped"
 msgstr ""
 
-#: jobs.c:1888
+#: jobs.c:1877
 #, c-format
 msgid "Stopped(%s)"
 msgstr ""
 
-#: jobs.c:1892
+#: jobs.c:1881
 msgid "Running"
 msgstr ""
 
-#: jobs.c:1909
+#: jobs.c:1898
 #, c-format
 msgid "Done(%d)"
 msgstr ""
 
-#: jobs.c:1911
+#: jobs.c:1900
 #, c-format
 msgid "Exit %d"
 msgstr ""
 
-#: jobs.c:1914
+#: jobs.c:1903
 msgid "Unknown status"
 msgstr ""
 
-#: jobs.c:2001
+#: jobs.c:1990
 #, c-format
 msgid "(core dumped) "
 msgstr ""
 
-#: jobs.c:2020
+#: jobs.c:2009
 #, c-format
 msgid "  (wd: %s)"
 msgstr ""
 
-#: jobs.c:2259
+#: jobs.c:2250
 #, c-format
 msgid "child setpgid (%ld to %ld)"
 msgstr ""
 
-#: jobs.c:2617 nojobs.c:664
+#: jobs.c:2608 nojobs.c:666
 #, c-format
 msgid "wait: pid %ld is not a child of this shell"
 msgstr ""
 
-#: jobs.c:2893
+#: jobs.c:2884
 #, c-format
 msgid "wait_for: No record of process %ld"
 msgstr ""
 
-#: jobs.c:3236
+#: jobs.c:3223
 #, c-format
 msgid "wait_for_job: job %d is stopped"
 msgstr "wait_for_job: töö %d on peatatud"
 
-#: jobs.c:3564
+#: jobs.c:3551
 #, fuzzy, c-format
 msgid "%s: no current jobs"
 msgstr "%s: sellist tööd pole"
 
-#: jobs.c:3571
+#: jobs.c:3558
 #, c-format
 msgid "%s: job has terminated"
 msgstr "%s: töö on lõpetatud"
 
-#: jobs.c:3580
+#: jobs.c:3567
 #, c-format
 msgid "%s: job %d already in background"
 msgstr "%s: töö %d on juba taustal"
 
-#: jobs.c:3806
+#: jobs.c:3793
 msgid "waitchld: turning on WNOHANG to avoid indefinite block"
 msgstr ""
 
-#: jobs.c:4320
+#: jobs.c:4307
 #, fuzzy, c-format
 msgid "%s: line %d: "
 msgstr "%s: hoiatus: "
 
-#: jobs.c:4334 nojobs.c:919
+#: jobs.c:4321 nojobs.c:921
 #, c-format
 msgid " (core dumped)"
 msgstr ""
 
-#: jobs.c:4346 jobs.c:4359
+#: jobs.c:4333 jobs.c:4346
 #, c-format
 msgid "(wd now: %s)\n"
 msgstr ""
 
-#: jobs.c:4391
+#: jobs.c:4378
 msgid "initialize_job_control: getpgrp failed"
 msgstr ""
 
-#: jobs.c:4447
+#: jobs.c:4434
 msgid "initialize_job_control: no job control in background"
 msgstr ""
 
-#: jobs.c:4463
+#: jobs.c:4450
 msgid "initialize_job_control: line discipline"
 msgstr ""
 
-#: jobs.c:4473
+#: jobs.c:4460
 msgid "initialize_job_control: setpgid"
 msgstr ""
 
-#: jobs.c:4494 jobs.c:4503
+#: jobs.c:4481 jobs.c:4490
 #, c-format
 msgid "cannot set terminal process group (%d)"
 msgstr ""
 
-#: jobs.c:4508
+#: jobs.c:4495
 msgid "no job control in this shell"
 msgstr ""
 
-#: lib/malloc/malloc.c:353
+#: lib/malloc/malloc.c:367
 #, c-format
 msgid "malloc: failed assertion: %s\n"
 msgstr ""
 
-#: lib/malloc/malloc.c:369
+#: lib/malloc/malloc.c:383
 #, c-format
 msgid ""
 "\r\n"
 "malloc: %s:%d: assertion botched\r\n"
 msgstr ""
 
-#: lib/malloc/malloc.c:370 lib/malloc/malloc.c:933
+#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941
 #, fuzzy
 msgid "unknown"
 msgstr "%s: tundmatu masin"
 
-#: lib/malloc/malloc.c:882
+#: lib/malloc/malloc.c:892
 msgid "malloc: block on free list clobbered"
 msgstr ""
 
-#: lib/malloc/malloc.c:972
+#: lib/malloc/malloc.c:980
 msgid "free: called with already freed block argument"
 msgstr ""
 
-#: lib/malloc/malloc.c:975
+#: lib/malloc/malloc.c:983
 msgid "free: called with unallocated block argument"
 msgstr ""
 
-#: lib/malloc/malloc.c:994
+#: lib/malloc/malloc.c:1001
 msgid "free: underflow detected; mh_nbytes out of range"
 msgstr ""
 
-#: lib/malloc/malloc.c:1001
+#: lib/malloc/malloc.c:1007
 msgid "free: underflow detected; magic8 corrupted"
 msgstr ""
 
-#: lib/malloc/malloc.c:1009
+#: lib/malloc/malloc.c:1014
 msgid "free: start and end chunk sizes differ"
 msgstr ""
 
-#: lib/malloc/malloc.c:1119
+#: lib/malloc/malloc.c:1176
 msgid "realloc: called with unallocated block argument"
 msgstr ""
 
-#: lib/malloc/malloc.c:1134
+#: lib/malloc/malloc.c:1191
 msgid "realloc: underflow detected; mh_nbytes out of range"
 msgstr ""
 
-#: lib/malloc/malloc.c:1141
+#: lib/malloc/malloc.c:1197
 msgid "realloc: underflow detected; magic8 corrupted"
 msgstr ""
 
-#: lib/malloc/malloc.c:1150
+#: lib/malloc/malloc.c:1205
 msgid "realloc: start and end chunk sizes differ"
 msgstr ""
 
@@ -1358,22 +1368,22 @@ msgstr ""
 msgid "network operations not supported"
 msgstr ""
 
-#: locale.c:217
+#: locale.c:219
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s)"
 msgstr ""
 
-#: locale.c:219
+#: locale.c:221
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s): %s"
 msgstr ""
 
-#: locale.c:292
+#: locale.c:294
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s)"
 msgstr ""
 
-#: locale.c:294
+#: locale.c:296
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s): %s"
 msgstr ""
@@ -1391,138 +1401,138 @@ msgstr "Teil on uus kiri kaustas $_"
 msgid "The mail in %s has been read\n"
 msgstr "Kiri kaustas %s on loetud\n"
 
-#: make_cmd.c:317
+#: make_cmd.c:314
 msgid "syntax error: arithmetic expression required"
 msgstr "süntaksi viga: nõutakse aritmeetilist avaldist"
 
-#: make_cmd.c:319
+#: make_cmd.c:316
 msgid "syntax error: `;' unexpected"
 msgstr "süntaksi viga: ootamatu `;'"
 
-#: make_cmd.c:320
+#: make_cmd.c:317
 #, c-format
 msgid "syntax error: `((%s))'"
 msgstr "süntaksi viga: `((%s))'"
 
-#: make_cmd.c:572
+#: make_cmd.c:569
 #, c-format
 msgid "make_here_document: bad instruction type %d"
 msgstr ""
 
-#: make_cmd.c:657
+#: make_cmd.c:668
 #, c-format
 msgid "here-document at line %d delimited by end-of-file (wanted `%s')"
 msgstr ""
 
-#: make_cmd.c:756
+#: make_cmd.c:769
 #, c-format
 msgid "make_redirection: redirection instruction `%d' out of range"
 msgstr ""
 
-#: parse.y:2393
+#: parse.y:2428
 #, c-format
 msgid ""
 "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line "
 "truncated"
 msgstr ""
 
-#: parse.y:2826
+#: parse.y:2921
 msgid "maximum here-document count exceeded"
 msgstr ""
 
-#: parse.y:3581 parse.y:3957 parse.y:4556
+#: parse.y:3684 parse.y:4244 parse.y:6148
 #, c-format
 msgid "unexpected EOF while looking for matching `%c'"
 msgstr ""
 
-#: parse.y:4696
+#: parse.y:4452
 msgid "unexpected EOF while looking for `]]'"
 msgstr ""
 
-#: parse.y:4701
+#: parse.y:4457
 #, c-format
 msgid "syntax error in conditional expression: unexpected token `%s'"
 msgstr ""
 
-#: parse.y:4705
+#: parse.y:4461
 msgid "syntax error in conditional expression"
 msgstr "süntaksi viga tingimuslikus avaldises"
 
-#: parse.y:4783
+#: parse.y:4539
 #, c-format
 msgid "unexpected token `%s', expected `)'"
 msgstr "ootamatu märk `%s', oodati `)'"
 
-#: parse.y:4787
+#: parse.y:4543
 msgid "expected `)'"
 msgstr "oodati `)'"
 
-#: parse.y:4815
+#: parse.y:4571
 #, c-format
 msgid "unexpected argument `%s' to conditional unary operator"
 msgstr ""
 
-#: parse.y:4819
+#: parse.y:4575
 msgid "unexpected argument to conditional unary operator"
 msgstr ""
 
-#: parse.y:4865
+#: parse.y:4621
 #, c-format
 msgid "unexpected token `%s', conditional binary operator expected"
 msgstr ""
 
-#: parse.y:4869
+#: parse.y:4625
 msgid "conditional binary operator expected"
 msgstr ""
 
-#: parse.y:4891
+#: parse.y:4647
 #, c-format
 msgid "unexpected argument `%s' to conditional binary operator"
 msgstr ""
 
-#: parse.y:4895
+#: parse.y:4651
 msgid "unexpected argument to conditional binary operator"
 msgstr ""
 
-#: parse.y:4906
+#: parse.y:4662
 #, c-format
 msgid "unexpected token `%c' in conditional command"
 msgstr ""
 
-#: parse.y:4909
+#: parse.y:4665
 #, c-format
 msgid "unexpected token `%s' in conditional command"
 msgstr ""
 
-#: parse.y:4913
+#: parse.y:4669
 #, c-format
 msgid "unexpected token %d in conditional command"
 msgstr ""
 
-#: parse.y:6336
+#: parse.y:6118
 #, c-format
 msgid "syntax error near unexpected token `%s'"
 msgstr ""
 
-#: parse.y:6355
+#: parse.y:6137
 #, c-format
 msgid "syntax error near `%s'"
 msgstr "süntaksi viga kohal `%s'"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error: unexpected end of file"
 msgstr "süntaksi viga: ootamatu faililõpp"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error"
 msgstr "süntaksi viga"
 
-#: parse.y:6428
+#: parse.y:6216
 #, c-format
 msgid "Use \"%s\" to leave the shell.\n"
 msgstr "Käsuinterpretaatorist väljumiseks kasutage \"%s\".\n"
 
-#: parse.y:6602
+#: parse.y:6394
 msgid "unexpected EOF while looking for matching `)'"
 msgstr ""
 
@@ -1560,94 +1570,94 @@ msgstr ""
 msgid "xtrace fd (%d) != fileno xtrace fp (%d)"
 msgstr ""
 
-#: print_cmd.c:1540
+#: print_cmd.c:1545
 #, c-format
 msgid "cprintf: `%c': invalid format character"
 msgstr ""
 
-#: redir.c:149 redir.c:197
+#: redir.c:150 redir.c:198
 msgid "file descriptor out of range"
 msgstr "faili deskriptor on piiridest väljas"
 
-#: redir.c:204
+#: redir.c:205
 #, c-format
 msgid "%s: ambiguous redirect"
 msgstr "%s: segane ümbersuunamine"
 
-#: redir.c:208
+#: redir.c:209
 #, c-format
 msgid "%s: cannot overwrite existing file"
 msgstr "%s: fail on olemas, ei kirjuta üle"
 
-#: redir.c:213
+#: redir.c:214
 #, c-format
 msgid "%s: restricted: cannot redirect output"
 msgstr "%s: piiratud: väljundit ei saa ümber suunata"
 
-#: redir.c:218
+#: redir.c:219
 #, c-format
 msgid "cannot create temp file for here-document: %s"
 msgstr ""
 
-#: redir.c:222
+#: redir.c:223
 #, fuzzy, c-format
 msgid "%s: cannot assign fd to variable"
 msgstr "$%s: sedasi ei saa omistada"
 
-#: redir.c:649
+#: redir.c:650
 msgid "/dev/(tcp|udp)/host/port not supported without networking"
 msgstr ""
 
-#: redir.c:938 redir.c:1053 redir.c:1114 redir.c:1284
+#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303
 msgid "redirection error: cannot duplicate fd"
 msgstr "viga ümbersuunamisel: fd duplikaadi loomine ei õnnestu"
 
-#: shell.c:347
+#: shell.c:353
 msgid "could not find /tmp, please create!"
 msgstr "/tmp puudub, palun looge see!"
 
-#: shell.c:351
+#: shell.c:357
 msgid "/tmp must be a valid directory name"
 msgstr "/tmp peab olema kataloogi nimi"
 
-#: shell.c:804
+#: shell.c:826
 msgid "pretty-printing mode ignored in interactive shells"
 msgstr ""
 
-#: shell.c:948
+#: shell.c:972
 #, c-format
 msgid "%c%c: invalid option"
 msgstr "%c%c: vigane võti"
 
-#: shell.c:1319
+#: shell.c:1343
 #, c-format
 msgid "cannot set uid to %d: effective uid %d"
 msgstr ""
 
-#: shell.c:1330
+#: shell.c:1354
 #, c-format
 msgid "cannot set gid to %d: effective gid %d"
 msgstr ""
 
-#: shell.c:1518
+#: shell.c:1544
 msgid "cannot start debugger; debugging mode disabled"
 msgstr ""
 
-#: shell.c:1632
+#: shell.c:1658
 #, fuzzy, c-format
 msgid "%s: Is a directory"
 msgstr "%s: on kataloog"
 
-#: shell.c:1881
+#: shell.c:1907
 msgid "I have no name!"
 msgstr "Mul ei ole nime!"
 
-#: shell.c:2035
+#: shell.c:2061
 #, c-format
 msgid "GNU bash, version %s-(%s)\n"
 msgstr ""
 
-#: shell.c:2036
+#: shell.c:2062
 #, c-format
 msgid ""
 "Usage:\t%s [GNU long option] [option] ...\n"
@@ -1656,321 +1666,321 @@ msgstr ""
 "Kasuta:\t%s [GNU pikk võti] [võti] ...\n"
 "\t%s [GNU pikk võti] [võti] skript-fail ...\n"
 
-#: shell.c:2038
+#: shell.c:2064
 msgid "GNU long options:\n"
 msgstr "GNU pikad võtmed:\n"
 
-#: shell.c:2042
+#: shell.c:2068
 msgid "Shell options:\n"
 msgstr "Käsuinterpretaatori võtmed:\n"
 
-#: shell.c:2043
+#: shell.c:2069
 #, fuzzy
 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n"
 msgstr "\t-irsD või -c käsklus või -O lühivõti\t\t(ainult käivitamine)\n"
 
-#: shell.c:2062
+#: shell.c:2088
 #, c-format
 msgid "\t-%s or -o option\n"
 msgstr "\t-%s või -o võti\n"
 
-#: shell.c:2068
+#: shell.c:2094
 #, c-format
 msgid "Type `%s -c \"help set\"' for more information about shell options.\n"
 msgstr ""
 
-#: shell.c:2069
+#: shell.c:2095
 #, c-format
 msgid "Type `%s -c help' for more information about shell builtin commands.\n"
 msgstr ""
 
-#: shell.c:2070
+#: shell.c:2096
 #, c-format
 msgid "Use the `bashbug' command to report bugs.\n"
 msgstr "Vigadest teatamiseks kasutage käsku `bashbug'.\n"
 
-#: shell.c:2072
+#: shell.c:2098
 #, c-format
 msgid "bash home page: <http://www.gnu.org/software/bash>\n"
 msgstr ""
 
-#: shell.c:2073
+#: shell.c:2099
 #, c-format
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 msgstr ""
 
-#: sig.c:757
+#: sig.c:765
 #, c-format
 msgid "sigprocmask: %d: invalid operation"
 msgstr "sigprocmask: %d: vigane operatsioon"
 
-#: siglist.c:47
+#: siglist.c:48
 msgid "Bogus signal"
 msgstr ""
 
-#: siglist.c:50
+#: siglist.c:51
 msgid "Hangup"
 msgstr ""
 
-#: siglist.c:54
+#: siglist.c:55
 msgid "Interrupt"
 msgstr ""
 
-#: siglist.c:58
+#: siglist.c:59
 msgid "Quit"
 msgstr ""
 
-#: siglist.c:62
+#: siglist.c:63
 msgid "Illegal instruction"
 msgstr ""
 
-#: siglist.c:66
+#: siglist.c:67
 msgid "BPT trace/trap"
 msgstr ""
 
-#: siglist.c:74
+#: siglist.c:75
 msgid "ABORT instruction"
 msgstr ""
 
-#: siglist.c:78
+#: siglist.c:79
 msgid "EMT instruction"
 msgstr ""
 
-#: siglist.c:82
+#: siglist.c:83
 msgid "Floating point exception"
 msgstr ""
 
-#: siglist.c:86
+#: siglist.c:87
 msgid "Killed"
 msgstr ""
 
-#: siglist.c:90
+#: siglist.c:91
 #, fuzzy
 msgid "Bus error"
 msgstr "süntaksi viga"
 
-#: siglist.c:94
+#: siglist.c:95
 msgid "Segmentation fault"
 msgstr ""
 
-#: siglist.c:98
+#: siglist.c:99
 msgid "Bad system call"
 msgstr ""
 
-#: siglist.c:102
+#: siglist.c:103
 msgid "Broken pipe"
 msgstr ""
 
-#: siglist.c:106
+#: siglist.c:107
 msgid "Alarm clock"
 msgstr ""
 
-#: siglist.c:110
+#: siglist.c:111
 msgid "Terminated"
 msgstr ""
 
-#: siglist.c:114
+#: siglist.c:115
 msgid "Urgent IO condition"
 msgstr ""
 
-#: siglist.c:118
+#: siglist.c:119
 msgid "Stopped (signal)"
 msgstr ""
 
-#: siglist.c:126
+#: siglist.c:127
 msgid "Continue"
 msgstr ""
 
-#: siglist.c:134
+#: siglist.c:135
 msgid "Child death or stop"
 msgstr ""
 
-#: siglist.c:138
+#: siglist.c:139
 msgid "Stopped (tty input)"
 msgstr ""
 
-#: siglist.c:142
+#: siglist.c:143
 msgid "Stopped (tty output)"
 msgstr ""
 
-#: siglist.c:146
+#: siglist.c:147
 msgid "I/O ready"
 msgstr ""
 
-#: siglist.c:150
+#: siglist.c:151
 msgid "CPU limit"
 msgstr ""
 
-#: siglist.c:154
+#: siglist.c:155
 msgid "File limit"
 msgstr ""
 
-#: siglist.c:158
+#: siglist.c:159
 msgid "Alarm (virtual)"
 msgstr ""
 
-#: siglist.c:162
+#: siglist.c:163
 msgid "Alarm (profile)"
 msgstr ""
 
-#: siglist.c:166
+#: siglist.c:167
 msgid "Window changed"
 msgstr ""
 
-#: siglist.c:170
+#: siglist.c:171
 msgid "Record lock"
 msgstr ""
 
-#: siglist.c:174
+#: siglist.c:175
 msgid "User signal 1"
 msgstr ""
 
-#: siglist.c:178
+#: siglist.c:179
 msgid "User signal 2"
 msgstr ""
 
-#: siglist.c:182
+#: siglist.c:183
 msgid "HFT input data pending"
 msgstr ""
 
-#: siglist.c:186
+#: siglist.c:187
 msgid "power failure imminent"
 msgstr ""
 
-#: siglist.c:190
+#: siglist.c:191
 msgid "system crash imminent"
 msgstr ""
 
-#: siglist.c:194
+#: siglist.c:195
 msgid "migrate process to another CPU"
 msgstr ""
 
-#: siglist.c:198
+#: siglist.c:199
 msgid "programming error"
 msgstr ""
 
-#: siglist.c:202
+#: siglist.c:203
 msgid "HFT monitor mode granted"
 msgstr ""
 
-#: siglist.c:206
+#: siglist.c:207
 msgid "HFT monitor mode retracted"
 msgstr ""
 
-#: siglist.c:210
+#: siglist.c:211
 msgid "HFT sound sequence has completed"
 msgstr ""
 
-#: siglist.c:214
+#: siglist.c:215
 msgid "Information request"
 msgstr ""
 
-#: siglist.c:222 siglist.c:224
+#: siglist.c:223 siglist.c:225
 #, c-format
 msgid "Unknown Signal #%d"
 msgstr ""
 
-#: subst.c:1476 subst.c:1666
+#: subst.c:1480 subst.c:1670
 #, c-format
 msgid "bad substitution: no closing `%s' in %s"
 msgstr ""
 
-#: subst.c:3281
+#: subst.c:3307
 #, c-format
 msgid "%s: cannot assign list to array member"
 msgstr ""
 
-#: subst.c:5910 subst.c:5926
+#: subst.c:6048 subst.c:6064
 msgid "cannot make pipe for process substitution"
 msgstr ""
 
-#: subst.c:5985
+#: subst.c:6124
 msgid "cannot make child for process substitution"
 msgstr ""
 
-#: subst.c:6059
+#: subst.c:6198
 #, c-format
 msgid "cannot open named pipe %s for reading"
 msgstr ""
 
-#: subst.c:6061
+#: subst.c:6200
 #, c-format
 msgid "cannot open named pipe %s for writing"
 msgstr ""
 
-#: subst.c:6084
+#: subst.c:6223
 #, c-format
 msgid "cannot duplicate named pipe %s as fd %d"
 msgstr ""
 
-#: subst.c:6213
+#: subst.c:6370
 msgid "command substitution: ignored null byte in input"
 msgstr ""
 
-#: subst.c:6353
+#: subst.c:6533
 msgid "cannot make pipe for command substitution"
 msgstr ""
 
-#: subst.c:6397
+#: subst.c:6580
 msgid "cannot make child for command substitution"
 msgstr ""
 
-#: subst.c:6423
+#: subst.c:6613
 msgid "command_substitute: cannot duplicate pipe as fd 1"
 msgstr ""
 
-#: subst.c:6883 subst.c:9952
+#: subst.c:7082 subst.c:10252
 #, c-format
 msgid "%s: invalid variable name for name reference"
 msgstr ""
 
-#: subst.c:6979 subst.c:6997 subst.c:7169
+#: subst.c:7178 subst.c:7196 subst.c:7369
 #, fuzzy, c-format
 msgid "%s: invalid indirect expansion"
 msgstr "%s: vigane võti"
 
-#: subst.c:7013 subst.c:7177
+#: subst.c:7212 subst.c:7377
 #, fuzzy, c-format
 msgid "%s: invalid variable name"
 msgstr "%s: vigane tegevuse nimi"
 
-#: subst.c:7256
+#: subst.c:7478
 #, fuzzy, c-format
 msgid "%s: parameter not set"
 msgstr "%s: parameeter on null või pole seatud"
 
-#: subst.c:7258
+#: subst.c:7480
 #, c-format
 msgid "%s: parameter null or not set"
 msgstr "%s: parameeter on null või pole seatud"
 
-#: subst.c:7503 subst.c:7518
+#: subst.c:7727 subst.c:7742
 #, c-format
 msgid "%s: substring expression < 0"
 msgstr ""
 
-#: subst.c:9281 subst.c:9302
+#: subst.c:9560 subst.c:9587
 #, c-format
 msgid "%s: bad substitution"
 msgstr "%s: halb asendus"
 
-#: subst.c:9390
+#: subst.c:9678
 #, c-format
 msgid "$%s: cannot assign in this way"
 msgstr "$%s: sedasi ei saa omistada"
 
-#: subst.c:9814
+#: subst.c:10111
 msgid ""
 "future versions of the shell will force evaluation as an arithmetic "
 "substitution"
 msgstr ""
 
-#: subst.c:10367
+#: subst.c:10795
 #, fuzzy, c-format
 msgid "bad substitution: no closing \"`\" in %s"
 msgstr "sulgev `%c' puudub %s sees"
 
-#: subst.c:11434
+#: subst.c:11874
 #, c-format
 msgid "no match: %s"
 msgstr "ei leitud: %s"
@@ -1993,21 +2003,21 @@ msgstr "oodati `)'"
 msgid "`)' expected, found %s"
 msgstr "oodati `)', saadi %s"
 
-#: test.c:466 test.c:799
+#: test.c:469 test.c:814
 #, c-format
 msgid "%s: binary operator expected"
 msgstr "%s: eeldati binaarset operaatorit"
 
-#: test.c:756 test.c:759
+#: test.c:771 test.c:774
 #, c-format
 msgid "%s: unary operator expected"
 msgstr "%s: eeldati unaarset operaatorit"
 
-#: test.c:881
+#: test.c:896
 msgid "missing `]'"
 msgstr "puudub `]'"
 
-#: test.c:899
+#: test.c:914
 #, fuzzy, c-format
 msgid "syntax error: `%s' unexpected"
 msgstr "süntaksi viga: ootamatu `;'"
@@ -2016,101 +2026,106 @@ msgstr "s
 msgid "invalid signal number"
 msgstr "vigane signaali number"
 
-#: trap.c:325
+#: trap.c:323
 #, c-format
 msgid "trap handler: maximum trap handler level exceeded (%d)"
 msgstr ""
 
-#: trap.c:414
+#: trap.c:412
 #, c-format
 msgid "run_pending_traps: bad value in trap_list[%d]: %p"
 msgstr "run_pending_traps: halb väärtus muutujas trap_list[%d]: %p"
 
-#: trap.c:418
+#: trap.c:416
 #, c-format
 msgid ""
 "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
 msgstr ""
 "run_pending_traps: signaali käsitleja on SIG_DFL, saadan %d (%s) iseendale"
 
-#: trap.c:487
+#: trap.c:509
 #, c-format
 msgid "trap_handler: bad signal %d"
 msgstr "trap_handler: vigane signaal %d"
 
-#: variables.c:421
+#: variables.c:424
 #, c-format
 msgid "error importing function definition for `%s'"
 msgstr ""
 
-#: variables.c:833
+#: variables.c:838
 #, c-format
 msgid "shell level (%d) too high, resetting to 1"
 msgstr "shelli tase (%d) on liiga kõrge, kasutan väärtust 1"
 
-#: variables.c:2674
+#: variables.c:2642
 msgid "make_local_variable: no function context at current scope"
 msgstr "make_local_variable: praegune skoop pole funktsiooni kontekst"
 
-#: variables.c:2693
+#: variables.c:2661
 #, c-format
 msgid "%s: variable may not be assigned value"
 msgstr ""
 
-#: variables.c:3475
+#: variables.c:2818 variables.c:2874
+#, c-format
+msgid "%s: cannot inherit value from incompatible type"
+msgstr ""
+
+#: variables.c:3459
 #, c-format
 msgid "%s: assigning integer to name reference"
 msgstr ""
 
-#: variables.c:4404
+#: variables.c:4390
 msgid "all_local_variables: no function context at current scope"
 msgstr "all_local_variables: praegune skoop pole funktsiooni kontekst"
 
-#: variables.c:4771
+#: variables.c:4757
 #, fuzzy, c-format
 msgid "%s has null exportstr"
 msgstr "%s: parameeter on null või pole seatud"
 
-#: variables.c:4776 variables.c:4785
+#: variables.c:4762 variables.c:4771
 #, c-format
 msgid "invalid character %d in exportstr for %s"
 msgstr ""
 
-#: variables.c:4791
+#: variables.c:4777
 #, c-format
 msgid "no `=' in exportstr for %s"
 msgstr ""
 
-#: variables.c:5331
+#: variables.c:5317
 msgid "pop_var_context: head of shell_variables not a function context"
 msgstr ""
 
-#: variables.c:5344
+#: variables.c:5330
 msgid "pop_var_context: no global_variables context"
 msgstr "pop_var_context: pole global_variables kontekst"
 
-#: variables.c:5424
+#: variables.c:5410
 msgid "pop_scope: head of shell_variables not a temporary environment scope"
 msgstr ""
 
-#: variables.c:6387
+#: variables.c:6400
 #, fuzzy, c-format
 msgid "%s: %s: cannot open as FILE"
 msgstr "%s: ei saa avada: %s"
 
-#: variables.c:6392
+#: variables.c:6405
 #, c-format
 msgid "%s: %s: invalid value for trace file descriptor"
 msgstr ""
 
-#: variables.c:6437
+#: variables.c:6450
 #, fuzzy, c-format
 msgid "%s: %s: compatibility value out of range"
 msgstr "%s: %s on piiridest väljas"
 
 #: version.c:46 version2.c:46
 #, fuzzy
-msgid "Copyright (C) 2020 Free Software Foundation, Inc."
+msgid "Copyright (C) 2022 Free Software Foundation, Inc."
 msgstr "Autoriõigus © 2006 Free Software Foundation, Inc.\n"
 
 #: version.c:47 version2.c:47
@@ -2195,11 +2210,15 @@ msgid "command [-pVv] command [arg ...]"
 msgstr ""
 
 #: builtins.c:78
-msgid "declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]"
+msgid ""
+"declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] "
+"[name ...]"
 msgstr ""
 
 #: builtins.c:80
-msgid "typeset [-aAfFgiIlnrtux] [-p] name[=value] ..."
+msgid ""
+"typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] "
+"[name ...]"
 msgstr ""
 
 #: builtins.c:82
@@ -2293,7 +2312,7 @@ msgid "return [n]"
 msgstr ""
 
 #: builtins.c:142
-msgid "set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]"
+msgid "set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]"
 msgstr ""
 
 #: builtins.c:144
@@ -2343,7 +2362,7 @@ msgid "type [-afptP] name [name ...]"
 msgstr ""
 
 #: builtins.c:171
-msgid "ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]"
+msgid "ulimit [-SHabcdefiklmnpqrstuvxPRT] [limit]"
 msgstr ""
 
 #: builtins.c:174
@@ -2385,11 +2404,11 @@ msgid ""
 msgstr ""
 
 #: builtins.c:196
-msgid "while COMMANDS; do COMMANDS; done"
+msgid "while COMMANDS; do COMMANDS-2; done"
 msgstr ""
 
 #: builtins.c:198
-msgid "until COMMANDS; do COMMANDS; done"
+msgid "until COMMANDS; do COMMANDS-2; done"
 msgstr ""
 
 #: builtins.c:200
@@ -3195,7 +3214,9 @@ msgid ""
 "    word to the second NAME, and so on, with any leftover words assigned to\n"
 "    the last NAME.  Only the characters found in $IFS are recognized as "
 "word\n"
-"    delimiters.\n"
+"    delimiters. By default, the backslash character escapes delimiter "
+"characters\n"
+"    and newline.\n"
 "    \n"
 "    If no NAMEs are supplied, the line read is stored in the REPLY "
 "variable.\n"
@@ -3236,7 +3257,7 @@ msgid ""
 "    or an invalid file descriptor is supplied as the argument to -u."
 msgstr ""
 
-#: builtins.c:1041
+#: builtins.c:1042
 msgid ""
 "Return from a shell function.\n"
 "    \n"
@@ -3248,7 +3269,7 @@ msgid ""
 "    Returns N, or failure if the shell is not executing a function or script."
 msgstr ""
 
-#: builtins.c:1054
+#: builtins.c:1055
 msgid ""
 "Set or unset values of shell options and positional parameters.\n"
 "    \n"
@@ -3334,7 +3355,7 @@ msgid ""
 "    Returns success unless an invalid option is given."
 msgstr ""
 
-#: builtins.c:1139
+#: builtins.c:1140
 msgid ""
 "Unset values and attributes of shell variables and functions.\n"
 "    \n"
@@ -3356,7 +3377,7 @@ msgid ""
 "    Returns success unless an invalid option is given or a NAME is read-only."
 msgstr ""
 
-#: builtins.c:1161
+#: builtins.c:1162
 msgid ""
 "Set export attribute for shell variables.\n"
 "    \n"
@@ -3375,7 +3396,7 @@ msgid ""
 "    Returns success unless an invalid option is given or NAME is invalid."
 msgstr ""
 
-#: builtins.c:1180
+#: builtins.c:1181
 msgid ""
 "Mark shell variables as unchangeable.\n"
 "    \n"
@@ -3396,7 +3417,7 @@ msgid ""
 "    Returns success unless an invalid option is given or NAME is invalid."
 msgstr ""
 
-#: builtins.c:1202
+#: builtins.c:1203
 msgid ""
 "Shift positional parameters.\n"
 "    \n"
@@ -3407,7 +3428,7 @@ msgid ""
 "    Returns success unless N is negative or greater than $#."
 msgstr ""
 
-#: builtins.c:1214 builtins.c:1229
+#: builtins.c:1215 builtins.c:1230
 msgid ""
 "Execute commands from a file in the current shell.\n"
 "    \n"
@@ -3421,7 +3442,7 @@ msgid ""
 "    FILENAME cannot be read."
 msgstr ""
 
-#: builtins.c:1245
+#: builtins.c:1246
 msgid ""
 "Suspend shell execution.\n"
 "    \n"
@@ -3435,7 +3456,7 @@ msgid ""
 "    Returns success unless job control is not enabled or an error occurs."
 msgstr ""
 
-#: builtins.c:1261
+#: builtins.c:1262
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -3518,7 +3539,7 @@ msgid ""
 "    false or an invalid argument is given."
 msgstr ""
 
-#: builtins.c:1343
+#: builtins.c:1344
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -3526,7 +3547,7 @@ msgid ""
 "    be a literal `]', to match the opening `['."
 msgstr ""
 
-#: builtins.c:1352
+#: builtins.c:1353
 msgid ""
 "Display process times.\n"
 "    \n"
@@ -3538,7 +3559,7 @@ msgid ""
 "    Always succeeds."
 msgstr ""
 
-#: builtins.c:1364
+#: builtins.c:1365
 msgid ""
 "Trap signals and other events.\n"
 "    \n"
@@ -3582,7 +3603,7 @@ msgid ""
 "given."
 msgstr ""
 
-#: builtins.c:1400
+#: builtins.c:1401
 msgid ""
 "Display information about command type.\n"
 "    \n"
@@ -3612,7 +3633,7 @@ msgid ""
 "found."
 msgstr ""
 
-#: builtins.c:1431
+#: builtins.c:1432
 msgid ""
 "Modify shell resource limits.\n"
 "    \n"
@@ -3662,7 +3683,7 @@ msgid ""
 "    Returns success unless an invalid option is supplied or an error occurs."
 msgstr ""
 
-#: builtins.c:1482
+#: builtins.c:1483
 msgid ""
 "Display or set file mode mask.\n"
 "    \n"
@@ -3680,7 +3701,7 @@ msgid ""
 "    Returns success unless MODE is invalid or an invalid option is given."
 msgstr ""
 
-#: builtins.c:1502
+#: builtins.c:1503
 msgid ""
 "Wait for job completion and return exit status.\n"
 "    \n"
@@ -3712,7 +3733,7 @@ msgid ""
 "    children."
 msgstr ""
 
-#: builtins.c:1533
+#: builtins.c:1534
 msgid ""
 "Wait for process completion and return exit status.\n"
 "    \n"
@@ -3727,7 +3748,7 @@ msgid ""
 "    option is given."
 msgstr ""
 
-#: builtins.c:1548
+#: builtins.c:1549
 msgid ""
 "Execute commands for each member in a list.\n"
 "    \n"
@@ -3740,7 +3761,7 @@ msgid ""
 "    Returns the status of the last command executed."
 msgstr ""
 
-#: builtins.c:1562
+#: builtins.c:1563
 msgid ""
 "Arithmetic for loop.\n"
 "    \n"
@@ -3757,7 +3778,7 @@ msgid ""
 "    Returns the status of the last command executed."
 msgstr ""
 
-#: builtins.c:1580
+#: builtins.c:1581
 msgid ""
 "Select words from a list and execute commands.\n"
 "    \n"
@@ -3777,7 +3798,7 @@ msgid ""
 "    Returns the status of the last command executed."
 msgstr ""
 
-#: builtins.c:1601
+#: builtins.c:1602
 msgid ""
 "Report time consumed by pipeline's execution.\n"
 "    \n"
@@ -3793,7 +3814,7 @@ msgid ""
 "    The return status is the return status of PIPELINE."
 msgstr ""
 
-#: builtins.c:1618
+#: builtins.c:1619
 msgid ""
 "Execute commands based on pattern matching.\n"
 "    \n"
@@ -3804,7 +3825,7 @@ msgid ""
 "    Returns the status of the last command executed."
 msgstr ""
 
-#: builtins.c:1630
+#: builtins.c:1631
 msgid ""
 "Execute commands based on conditional.\n"
 "    \n"
@@ -3825,29 +3846,31 @@ msgid ""
 "    Returns the status of the last command executed."
 msgstr ""
 
-#: builtins.c:1647
+#: builtins.c:1648
 msgid ""
 "Execute commands as long as a test succeeds.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `while' COMMANDS has an exit status of zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS "
+"has\n"
+"    an exit status of zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
 
-#: builtins.c:1659
+#: builtins.c:1660
 msgid ""
 "Execute commands as long as a test does not succeed.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `until' COMMANDS has an exit status which is not zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS "
+"has\n"
+"    an exit status which is not zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
 
-#: builtins.c:1671
+#: builtins.c:1672
 msgid ""
 "Create a coprocess named NAME.\n"
 "    \n"
@@ -3860,7 +3883,7 @@ msgid ""
 "    The coproc command returns an exit status of 0."
 msgstr ""
 
-#: builtins.c:1685
+#: builtins.c:1686
 msgid ""
 "Define shell function.\n"
 "    \n"
@@ -3874,7 +3897,7 @@ msgid ""
 "    Returns success unless NAME is readonly."
 msgstr ""
 
-#: builtins.c:1699
+#: builtins.c:1700
 msgid ""
 "Group commands as a unit.\n"
 "    \n"
@@ -3885,7 +3908,7 @@ msgid ""
 "    Returns the status of the last command executed."
 msgstr ""
 
-#: builtins.c:1711
+#: builtins.c:1712
 msgid ""
 "Resume job in foreground.\n"
 "    \n"
@@ -3899,7 +3922,7 @@ msgid ""
 "    Returns the status of the resumed job."
 msgstr ""
 
-#: builtins.c:1726
+#: builtins.c:1727
 msgid ""
 "Evaluate arithmetic expression.\n"
 "    \n"
@@ -3910,7 +3933,7 @@ msgid ""
 "    Returns 1 if EXPRESSION evaluates to 0; returns 0 otherwise."
 msgstr ""
 
-#: builtins.c:1738
+#: builtins.c:1739
 msgid ""
 "Execute conditional command.\n"
 "    \n"
@@ -3938,7 +3961,7 @@ msgid ""
 "    0 or 1 depending on value of EXPRESSION."
 msgstr ""
 
-#: builtins.c:1764
+#: builtins.c:1765
 msgid ""
 "Common shell variable names and usage.\n"
 "    \n"
@@ -3992,7 +4015,7 @@ msgid ""
 "    \t\tcommands should be saved on the history list.\n"
 msgstr ""
 
-#: builtins.c:1821
+#: builtins.c:1822
 msgid ""
 "Add directories to stack.\n"
 "    \n"
@@ -4023,7 +4046,7 @@ msgid ""
 "    change fails."
 msgstr ""
 
-#: builtins.c:1855
+#: builtins.c:1856
 msgid ""
 "Remove directories from stack.\n"
 "    \n"
@@ -4050,7 +4073,7 @@ msgid ""
 "    change fails."
 msgstr ""
 
-#: builtins.c:1885
+#: builtins.c:1886
 msgid ""
 "Display directory stack.\n"
 "    \n"
@@ -4079,7 +4102,7 @@ msgid ""
 "    Returns success unless an invalid option is supplied or an error occurs."
 msgstr ""
 
-#: builtins.c:1916
+#: builtins.c:1917
 msgid ""
 "Set and unset shell options.\n"
 "    \n"
@@ -4099,7 +4122,7 @@ msgid ""
 "    given or OPTNAME is disabled."
 msgstr ""
 
-#: builtins.c:1937
+#: builtins.c:1938
 msgid ""
 "Formats and prints ARGUMENTS under control of the FORMAT.\n"
 "    \n"
@@ -4122,6 +4145,8 @@ msgid ""
 "    \n"
 "      %b\texpand backslash escape sequences in the corresponding argument\n"
 "      %q\tquote the argument in a way that can be reused as shell input\n"
+"      %Q\tlike %q, but apply any precision to the unquoted argument before\n"
+"    \t\tquoting\n"
 "      %(fmt)T\toutput the date-time string resulting from using FMT as a "
 "format\n"
 "    \t        string for strftime(3)\n"
@@ -4138,7 +4163,7 @@ msgid ""
 "    error occurs."
 msgstr ""
 
-#: builtins.c:1971
+#: builtins.c:1974
 msgid ""
 "Specify how arguments are to be completed by Readline.\n"
 "    \n"
@@ -4169,7 +4194,7 @@ msgid ""
 "    Returns success unless an invalid option is supplied or an error occurs."
 msgstr ""
 
-#: builtins.c:2001
+#: builtins.c:2004
 msgid ""
 "Display possible completions depending on the options.\n"
 "    \n"
@@ -4182,7 +4207,7 @@ msgid ""
 "    Returns success unless an invalid option is supplied or an error occurs."
 msgstr ""
 
-#: builtins.c:2016
+#: builtins.c:2019
 msgid ""
 "Modify or display completion options.\n"
 "    \n"
@@ -4214,7 +4239,7 @@ msgid ""
 "    have a completion specification defined."
 msgstr ""
 
-#: builtins.c:2047
+#: builtins.c:2050
 msgid ""
 "Read lines from the standard input into an indexed array variable.\n"
 "    \n"
@@ -4256,13 +4281,17 @@ msgid ""
 "    not an indexed array."
 msgstr ""
 
-#: builtins.c:2083
+#: builtins.c:2086
 msgid ""
 "Read lines from a file into an array variable.\n"
 "    \n"
 "    A synonym for `mapfile'."
 msgstr ""
 
+#, fuzzy, c-format
+#~ msgid "%s: invalid associative array key"
+#~ msgstr "%s: vigane tegevuse nimi"
+
 #, fuzzy
 #~ msgid ""
 #~ "Returns the context of the current subroutine call.\n"
index 31ddbe4522e8b95c95b5120bc5edf01562d8b747..7f4b31dda156760256a86bd36651737d49353a02 100644 (file)
Binary files a/po/fi.gmo and b/po/fi.gmo differ
index 6d13f2d309b56a683827fcea073f55932826d89b..166fe272d7cc70a9abfd0e1c6dc450708f5202d1 100644 (file)
--- a/po/fi.po
+++ b/po/fi.po
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: bash-4.0\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-11-28 12:51-0500\n"
+"POT-Creation-Date: 2022-01-11 14:50-0500\n"
 "PO-Revision-Date: 2009-05-09 15:13+0300\n"
 "Last-Translator: Pekka Niemi <pekka.niemi@iki.fi>\n"
 "Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n"
@@ -25,59 +25,54 @@ msgstr ""
 msgid "bad array subscript"
 msgstr "virheellinen taulukkoindeksi"
 
-#: arrayfunc.c:421 builtins/declare.def:638 variables.c:2274 variables.c:2300
-#: variables.c:3133
+#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268
+#: variables.c:3101
 #, c-format
 msgid "%s: removing nameref attribute"
 msgstr ""
 
-#: arrayfunc.c:446 builtins/declare.def:851
+#: arrayfunc.c:496 builtins/declare.def:868
 #, c-format
 msgid "%s: cannot convert indexed to associative array"
 msgstr "%s: indeksoitua taulukkoa ei voi muuttaa assosiatiiviseksi"
 
-#: arrayfunc.c:700
-#, c-format
-msgid "%s: invalid associative array key"
-msgstr "%s: virheellinen assosiatiivinen indeksi"
-
-#: arrayfunc.c:702
+#: arrayfunc.c:777
 #, c-format
 msgid "%s: cannot assign to non-numeric index"
 msgstr "%s: ei voida sijoittaa epänumeeriseen indeksiin"
 
-#: arrayfunc.c:747
+#: arrayfunc.c:822
 #, c-format
 msgid "%s: %s: must use subscript when assigning associative array"
 msgstr ""
 "%s: %s: assosiatiiviseen taulukkoon sijoitettaessa täytyy käyttää "
 "avainindeksiä"
 
-#: bashhist.c:452
+#: bashhist.c:455
 #, c-format
 msgid "%s: cannot create: %s"
 msgstr "%s: ei voida luoda: %s"
 
-#: bashline.c:4310
+#: bashline.c:4479
 msgid "bash_execute_unix_command: cannot find keymap for command"
 msgstr "bash_execute_unix_command: komennolle ei löydy näppäinkarttaa"
 
-#: bashline.c:4459
+#: bashline.c:4637
 #, c-format
 msgid "%s: first non-whitespace character is not `\"'"
 msgstr "%s: ensimmäinen ei-tyhjä merkki ei ole ”\"”"
 
-#: bashline.c:4488
+#: bashline.c:4666
 #, c-format
 msgid "no closing `%c' in %s"
 msgstr "ei loppumerkkiä ”%c” rivissä %s"
 
-#: bashline.c:4519
+#: bashline.c:4697
 #, c-format
 msgid "%s: missing colon separator"
 msgstr "%s: puuttuva kaksoispiste-erotin"
 
-#: bashline.c:4555
+#: bashline.c:4733
 #, fuzzy, c-format
 msgid "`%s': cannot unbind in command keymap"
 msgstr "”%s”: ei voida irrottaa"
@@ -97,7 +92,7 @@ msgstr ""
 msgid "brace expansion: failed to allocate memory for `%s'"
 msgstr ""
 
-#: builtins/alias.def:131 variables.c:1844
+#: builtins/alias.def:131 variables.c:1817
 #, fuzzy, c-format
 msgid "`%s': invalid alias name"
 msgstr "”%s”: virheellinen näppäinkartan nimi"
@@ -174,7 +169,7 @@ msgstr ""
 msgid "HOME not set"
 msgstr "HOME-ympäristömuuttujaa ei ole asetettu"
 
-#: builtins/cd.def:335 builtins/common.c:161 test.c:901
+#: builtins/cd.def:335 builtins/common.c:161 test.c:916
 msgid "too many arguments"
 msgstr "liian monta argumenttia"
 
@@ -202,7 +197,7 @@ msgstr "varoitus: "
 msgid "%s: usage: "
 msgstr "%s: käyttö: "
 
-#: builtins/common.c:193 shell.c:516 shell.c:844
+#: builtins/common.c:193 shell.c:524 shell.c:866
 #, c-format
 msgid "%s: option requires an argument"
 msgstr "%s: valitsin vaatii argumentin"
@@ -217,7 +212,7 @@ msgstr "%s: vaaditaan numeerinen argumentti"
 msgid "%s: not found"
 msgstr "%s: ei löytynyt"
 
-#: builtins/common.c:216 shell.c:857
+#: builtins/common.c:216 shell.c:879
 #, c-format
 msgid "%s: invalid option"
 msgstr "%s: virheellinen valitsin"
@@ -227,7 +222,7 @@ msgstr "%s: virheellinen valitsin"
 msgid "%s: invalid option name"
 msgstr "%s: virheellinen valitsimen nimi"
 
-#: builtins/common.c:230 execute_cmd.c:2373 general.c:368 general.c:373
+#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373
 #, c-format
 msgid "`%s': not a valid identifier"
 msgstr "”%s”: virheellinen tunniste"
@@ -240,7 +235,7 @@ msgstr "virheellinen oktaaliluku"
 msgid "invalid hex number"
 msgstr "virheellinen heksadesimaaliluku"
 
-#: builtins/common.c:244 expr.c:1569
+#: builtins/common.c:244 expr.c:1574
 msgid "invalid number"
 msgstr "virheellinen luku"
 
@@ -254,88 +249,93 @@ msgstr "%s: virheellinen signaalimääritys"
 msgid "`%s': not a pid or valid job spec"
 msgstr "”%s”: ei ole prosessitunnus eikä kelvollinen työtunniste"
 
-#: builtins/common.c:266 error.c:510
+#: builtins/common.c:266 error.c:536
 #, c-format
 msgid "%s: readonly variable"
 msgstr "%s: kirjoitussuojattu muuttuja"
 
-#: builtins/common.c:274
+#: builtins/common.c:273
+#, fuzzy, c-format
+msgid "%s: cannot assign"
+msgstr "%s: ei voida poistaa"
+
+#: builtins/common.c:281
 #, c-format
 msgid "%s: %s out of range"
 msgstr "%s: %s rajojen ulkopuolella"
 
-#: builtins/common.c:274 builtins/common.c:276
+#: builtins/common.c:281 builtins/common.c:283
 msgid "argument"
 msgstr "argumentti"
 
-#: builtins/common.c:276
+#: builtins/common.c:283
 #, c-format
 msgid "%s out of range"
 msgstr "%s rajojen ulkopuolella"
 
-#: builtins/common.c:284
+#: builtins/common.c:291
 #, c-format
 msgid "%s: no such job"
 msgstr "%s: työtä ei löydy"
 
-#: builtins/common.c:292
+#: builtins/common.c:299
 #, c-format
 msgid "%s: no job control"
 msgstr "%s: ei työnohjausta"
 
-#: builtins/common.c:294
+#: builtins/common.c:301
 msgid "no job control"
 msgstr "ei työnohjausta"
 
-#: builtins/common.c:304
+#: builtins/common.c:311
 #, c-format
 msgid "%s: restricted"
 msgstr "%s: rajoitettu"
 
-#: builtins/common.c:306
+#: builtins/common.c:313
 msgid "restricted"
 msgstr "rajoitettu"
 
-#: builtins/common.c:314
+#: builtins/common.c:321
 #, c-format
 msgid "%s: not a shell builtin"
 msgstr "%s: ei ole komentotulkin sisäänrakennettu komento"
 
-#: builtins/common.c:323
+#: builtins/common.c:330
 #, c-format
 msgid "write error: %s"
 msgstr "kirjoitusvirhe: %s"
 
-#: builtins/common.c:331
+#: builtins/common.c:338
 #, c-format
 msgid "error setting terminal attributes: %s"
 msgstr "pääteasetuksia asetettaessa tapahtui virhe: %s"
 
-#: builtins/common.c:333
+#: builtins/common.c:340
 #, c-format
 msgid "error getting terminal attributes: %s"
 msgstr "pääteasetuksia luettaessa tapahtui virhe: %s"
 
-#: builtins/common.c:635
+#: builtins/common.c:642
 #, c-format
 msgid "%s: error retrieving current directory: %s: %s\n"
 msgstr "%s: nykyhakemistoa luettaessa tapahtui virhe: %s: %s\n"
 
-#: builtins/common.c:701 builtins/common.c:703
+#: builtins/common.c:708 builtins/common.c:710
 #, c-format
 msgid "%s: ambiguous job spec"
 msgstr "%s: ei ole yksiselitteinen työtunniste"
 
-#: builtins/common.c:964
+#: builtins/common.c:971
 msgid "help not available in this version"
 msgstr ""
 
-#: builtins/common.c:1008 builtins/set.def:953 variables.c:3839
+#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825
 #, c-format
 msgid "%s: cannot unset: readonly %s"
 msgstr "%s: ei voida poistaa: kirjoitussuojattu %s"
 
-#: builtins/common.c:1013 builtins/set.def:932 variables.c:3844
+#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830
 #, c-format
 msgid "%s: cannot unset"
 msgstr "%s: ei voida poistaa"
@@ -345,108 +345,108 @@ msgstr "%s: ei voida poistaa"
 msgid "%s: invalid action name"
 msgstr "%s: virheellinen toiminnon nimi"
 
-#: builtins/complete.def:486 builtins/complete.def:634
-#: builtins/complete.def:865
+#: builtins/complete.def:486 builtins/complete.def:642
+#: builtins/complete.def:873
 #, c-format
 msgid "%s: no completion specification"
 msgstr "%s: ei lavennusmääritystä"
 
-#: builtins/complete.def:688
+#: builtins/complete.def:696
 msgid "warning: -F option may not work as you expect"
 msgstr "varoitus: -F -valitsin ei ehkä toimi odotetusti"
 
-#: builtins/complete.def:690
+#: builtins/complete.def:698
 msgid "warning: -C option may not work as you expect"
 msgstr "varoitus: -C -valitsin ei ehkä toimi odotetusti"
 
-#: builtins/complete.def:838
+#: builtins/complete.def:846
 msgid "not currently executing completion function"
 msgstr "tällä hetkellä komennon lavennusfunktiota ei suoriteta"
 
-#: builtins/declare.def:134
+#: builtins/declare.def:137
 msgid "can only be used in a function"
 msgstr "voidaan käyttää ainoastaan funktiossa"
 
-#: builtins/declare.def:363 builtins/declare.def:756
+#: builtins/declare.def:437
+msgid "cannot use `-f' to make functions"
+msgstr "”-f”:ää ei voida käyttää funktioiden luomiseen"
+
+#: builtins/declare.def:464 execute_cmd.c:6132
+#, c-format
+msgid "%s: readonly function"
+msgstr "%s: kirjoitussuojattu funktio"
+
+#: builtins/declare.def:521 builtins/declare.def:804
 #, c-format
 msgid "%s: reference variable cannot be an array"
 msgstr ""
 
-#: builtins/declare.def:374 variables.c:3385
+#: builtins/declare.def:532 variables.c:3359
 #, c-format
 msgid "%s: nameref variable self references not allowed"
 msgstr ""
 
-#: builtins/declare.def:379 variables.c:2104 variables.c:3304 variables.c:3312
-#: variables.c:3382
+#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286
+#: variables.c:3356
 #, c-format
 msgid "%s: circular name reference"
 msgstr ""
 
-#: builtins/declare.def:384 builtins/declare.def:762 builtins/declare.def:773
+#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820
 #, c-format
 msgid "`%s': invalid variable name for name reference"
 msgstr ""
 
-#: builtins/declare.def:514
-msgid "cannot use `-f' to make functions"
-msgstr "”-f”:ää ei voida käyttää funktioiden luomiseen"
-
-#: builtins/declare.def:526 execute_cmd.c:5986
-#, c-format
-msgid "%s: readonly function"
-msgstr "%s: kirjoitussuojattu funktio"
-
-#: builtins/declare.def:824
-#, c-format
-msgid "%s: quoted compound array assignment deprecated"
-msgstr ""
-
-#: builtins/declare.def:838
+#: builtins/declare.def:856
 #, c-format
 msgid "%s: cannot destroy array variables in this way"
 msgstr "%s: taulukkomuuttujia ei voi tuhota näin"
 
-#: builtins/declare.def:845 builtins/read.def:815
+#: builtins/declare.def:862 builtins/read.def:887
 #, c-format
 msgid "%s: cannot convert associative to indexed array"
 msgstr "%s: assosiatiivista taulukkoa ei voi muuttaa indeksoiduksi"
 
-#: builtins/enable.def:143 builtins/enable.def:151
+#: builtins/declare.def:891
+#, c-format
+msgid "%s: quoted compound array assignment deprecated"
+msgstr ""
+
+#: builtins/enable.def:145 builtins/enable.def:153
 msgid "dynamic loading not available"
 msgstr "dynaaminen lataus ei ole käytettävissä"
 
-#: builtins/enable.def:343
+#: builtins/enable.def:376
 #, c-format
 msgid "cannot open shared object %s: %s"
 msgstr "jaettua objektia %s ei voida avata: %s"
 
-#: builtins/enable.def:371
+#: builtins/enable.def:405
 #, c-format
 msgid "cannot find %s in shared object %s: %s"
 msgstr "kohdetta %s ei löydy jaetusta objektista %s: %s"
 
-#: builtins/enable.def:388
+#: builtins/enable.def:422
 #, fuzzy, c-format
 msgid "%s: dynamic builtin already loaded"
 msgstr "%s: ei dynaamisesti ladattu"
 
-#: builtins/enable.def:392
+#: builtins/enable.def:426
 #, c-format
 msgid "load function for %s returns failure (%d): not loaded"
 msgstr ""
 
-#: builtins/enable.def:517
+#: builtins/enable.def:551
 #, c-format
 msgid "%s: not dynamically loaded"
 msgstr "%s: ei dynaamisesti ladattu"
 
-#: builtins/enable.def:543
+#: builtins/enable.def:577
 #, c-format
 msgid "%s: cannot delete: %s"
 msgstr "%s: ei voida poistaa: %s"
 
-#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5818
+#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959
 #, c-format
 msgid "%s: is a directory"
 msgstr "%s: on hakemisto"
@@ -461,7 +461,7 @@ msgstr "%s: ei tavallinen tiedosto"
 msgid "%s: file is too large"
 msgstr "%s: tiedosto on liian iso"
 
-#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1647
+#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673
 #, c-format
 msgid "%s: cannot execute binary file"
 msgstr "%s: binääritiedostoa ei voida suorittaa"
@@ -557,12 +557,12 @@ msgstr ""
 "Ohjeita kohteelle ”%s” ei löydy. Kokeile ”help help”, ”man -k %s” tai \n"
 "”info %s”."
 
-#: builtins/help.def:224
+#: builtins/help.def:223
 #, c-format
 msgid "%s: cannot open: %s"
 msgstr "%s: ei voida avata: %s"
 
-#: builtins/help.def:524
+#: builtins/help.def:523
 #, c-format
 msgid ""
 "These shell commands are defined internally.  Type `help' to see this list.\n"
@@ -583,21 +583,21 @@ msgstr ""
 "Asteriski (*) nimen vieressä tarkoittaa, että komennon käyttö on estetty.\n"
 "\n"
 
-#: builtins/history.def:155
+#: builtins/history.def:159
 msgid "cannot use more than one of -anrw"
 msgstr "valitsimista -anrw voidaan käyttää vain yhtä"
 
-#: builtins/history.def:188 builtins/history.def:198 builtins/history.def:213
-#: builtins/history.def:230 builtins/history.def:242 builtins/history.def:249
+#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215
+#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247
 msgid "history position"
 msgstr "sijainti komentohistoriassa"
 
-#: builtins/history.def:340
+#: builtins/history.def:338
 #, fuzzy, c-format
 msgid "%s: invalid timestamp"
 msgstr "%s: virheellinen valitsimen nimi"
 
-#: builtins/history.def:451
+#: builtins/history.def:449
 #, c-format
 msgid "%s: history expansion failed"
 msgstr "%s: historiaviittaus epäonnistui"
@@ -620,78 +620,78 @@ msgstr "%s: argumenttien pitää olla prosessi- tai työtunnisteita"
 msgid "Unknown error"
 msgstr "Tuntematon virhe"
 
-#: builtins/let.def:97 builtins/let.def:122 expr.c:639 expr.c:657
+#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658
 msgid "expression expected"
 msgstr "odotettiin lauseketta"
 
-#: builtins/mapfile.def:178
+#: builtins/mapfile.def:180
 #, fuzzy, c-format
 msgid "%s: not an indexed array"
 msgstr "%s: ei ole taulukkomuuttuja"
 
-#: builtins/mapfile.def:271 builtins/read.def:308
+#: builtins/mapfile.def:276 builtins/read.def:336
 #, c-format
 msgid "%s: invalid file descriptor specification"
 msgstr "%s: virheellinen tiedostokahvamääritys"
 
-#: builtins/mapfile.def:279 builtins/read.def:315
+#: builtins/mapfile.def:284 builtins/read.def:343
 #, c-format
 msgid "%d: invalid file descriptor: %s"
 msgstr "%d: virheellinen tiedostokahva: %s"
 
-#: builtins/mapfile.def:288 builtins/mapfile.def:326
+#: builtins/mapfile.def:293 builtins/mapfile.def:331
 #, c-format
 msgid "%s: invalid line count"
 msgstr "%s: virheellinen rivimäärä"
 
-#: builtins/mapfile.def:299
+#: builtins/mapfile.def:304
 #, c-format
 msgid "%s: invalid array origin"
 msgstr "%s: virheellinen taulukkoindeksi"
 
-#: builtins/mapfile.def:316
+#: builtins/mapfile.def:321
 #, c-format
 msgid "%s: invalid callback quantum"
 msgstr "%s: virheellinen paluukutsumäärä"
 
-#: builtins/mapfile.def:349
+#: builtins/mapfile.def:354
 msgid "empty array variable name"
 msgstr "tyhjä taulukkomuuttujan nimi"
 
-#: builtins/mapfile.def:370
+#: builtins/mapfile.def:375
 msgid "array variable support required"
 msgstr "vaaditaan tukea taulukkomuuttujille"
 
-#: builtins/printf.def:419
+#: builtins/printf.def:430
 #, c-format
 msgid "`%s': missing format character"
 msgstr "”%s”: puuttuva muotoilumerkki"
 
-#: builtins/printf.def:474
+#: builtins/printf.def:485
 #, fuzzy, c-format
 msgid "`%c': invalid time format specification"
 msgstr "%s: virheellinen aikakatkaisumääritys"
 
-#: builtins/printf.def:676
+#: builtins/printf.def:708
 #, c-format
 msgid "`%c': invalid format character"
 msgstr "”%c”: virheellinen muotoilumerkki"
 
-#: builtins/printf.def:702
+#: builtins/printf.def:734
 #, c-format
 msgid "warning: %s: %s"
 msgstr "varoitus: %s: %s"
 
-#: builtins/printf.def:788
+#: builtins/printf.def:822
 #, c-format
 msgid "format parsing problem: %s"
 msgstr ""
 
-#: builtins/printf.def:885
+#: builtins/printf.def:919
 msgid "missing hex digit for \\x"
 msgstr "\\x:stä puuttuu heksadesimaalinumero"
 
-#: builtins/printf.def:900
+#: builtins/printf.def:934
 #, fuzzy, c-format
 msgid "missing unicode digit for \\%c"
 msgstr "\\x:stä puuttuu heksadesimaalinumero"
@@ -839,12 +839,12 @@ msgstr ""
 "    \n"
 "    Sisäänrakennettu ”dirs”-komento näyttää hakemistopinon sisällön."
 
-#: builtins/read.def:280
+#: builtins/read.def:308
 #, c-format
 msgid "%s: invalid timeout specification"
 msgstr "%s: virheellinen aikakatkaisumääritys"
 
-#: builtins/read.def:755
+#: builtins/read.def:827
 #, c-format
 msgid "read error: %d: %s"
 msgstr "lukuvirhe: %d: %s"
@@ -857,7 +857,7 @@ msgstr "”return” on käytettävissä vain funktiossa tai ladatussa skriptiss
 msgid "cannot simultaneously unset a function and a variable"
 msgstr "funktiota ja muuttujaa ei voi poistaa yhtä aikaa"
 
-#: builtins/set.def:966
+#: builtins/set.def:969
 #, c-format
 msgid "%s: not an array variable"
 msgstr "%s: ei ole taulukkomuuttuja"
@@ -876,13 +876,13 @@ msgstr "%s: ei voida poistaa"
 msgid "shift count"
 msgstr "siirtolaskuri"
 
-#: builtins/shopt.def:310
+#: builtins/shopt.def:323
 msgid "cannot set and unset shell options simultaneously"
 msgstr ""
 "komentotulkin valitsimia ei voida laittaa päällä ja ottaa pois päältä "
 "samanaikaisesti"
 
-#: builtins/shopt.def:428
+#: builtins/shopt.def:444
 #, c-format
 msgid "%s: invalid shell option name"
 msgstr "%s: virheellinen komentotulkin valitsimen nimi"
@@ -949,16 +949,16 @@ msgstr "%s: virheellinen rajoitusargumentti"
 msgid "`%c': bad command"
 msgstr "”%c”: virheellinen komento"
 
-#: builtins/ulimit.def:455
+#: builtins/ulimit.def:464
 #, c-format
 msgid "%s: cannot get limit: %s"
 msgstr "%s: rajoitusta ei saada: %s"
 
-#: builtins/ulimit.def:481
+#: builtins/ulimit.def:490
 msgid "limit"
 msgstr "rajoitus"
 
-#: builtins/ulimit.def:493 builtins/ulimit.def:793
+#: builtins/ulimit.def:502 builtins/ulimit.def:802
 #, c-format
 msgid "%s: cannot modify limit: %s"
 msgstr "%s: rajoitusta ei voida muokata: %s"
@@ -977,7 +977,7 @@ msgstr "”%c”: virheellinen symbolisen tilan operaattori"
 msgid "`%c': invalid symbolic mode character"
 msgstr "”%c”: virheellinen symbolisen tilan merkki"
 
-#: error.c:89 error.c:347 error.c:349 error.c:351
+#: error.c:89 error.c:373 error.c:375 error.c:377
 msgid " line "
 msgstr " rivi "
 
@@ -997,96 +997,106 @@ msgstr "Keskeytetään..."
 msgid "INFORM: "
 msgstr ""
 
-#: error.c:462
+#: error.c:310
+#, fuzzy, c-format
+msgid "DEBUG warning: "
+msgstr "varoitus: "
+
+#: error.c:488
 msgid "unknown command error"
 msgstr "tuntematon komentovirhe"
 
-#: error.c:463
+#: error.c:489
 msgid "bad command type"
 msgstr "virheellinen komentotyyppi"
 
-#: error.c:464
+#: error.c:490
 msgid "bad connector"
 msgstr "virheellinen liittäjä"
 
-#: error.c:465
+#: error.c:491
 msgid "bad jump"
 msgstr "virheellinen hyppy"
 
-#: error.c:503
+#: error.c:529
 #, c-format
 msgid "%s: unbound variable"
 msgstr "%s: sitomaton muuttuja"
 
-#: eval.c:242
+#: eval.c:243
 msgid "\atimed out waiting for input: auto-logout\n"
 msgstr "\aaikakatkaisu: automaattinen uloskirjautuminen\n"
 
-#: execute_cmd.c:537
+#: execute_cmd.c:555
 #, c-format
 msgid "cannot redirect standard input from /dev/null: %s"
 msgstr "syötettä ei voida lukea tiedostosta /dev/null: %s"
 
-#: execute_cmd.c:1297
+#: execute_cmd.c:1317
 #, c-format
 msgid "TIMEFORMAT: `%c': invalid format character"
 msgstr "AJAN MUOTOMÄÄRITYS: ”%c”: virheellinen muotoilumerkki"
 
-#: execute_cmd.c:2362
+#: execute_cmd.c:2391
 #, c-format
 msgid "execute_coproc: coproc [%d:%s] still exists"
 msgstr ""
 
-#: execute_cmd.c:2486
+#: execute_cmd.c:2524
 msgid "pipe error"
 msgstr "putkitusvirhe"
 
-#: execute_cmd.c:4793
+#: execute_cmd.c:4923
 #, c-format
 msgid "eval: maximum eval nesting level exceeded (%d)"
 msgstr ""
 
-#: execute_cmd.c:4805
+#: execute_cmd.c:4935
 #, c-format
 msgid "%s: maximum source nesting level exceeded (%d)"
 msgstr ""
 
-#: execute_cmd.c:4913
+#: execute_cmd.c:5043
 #, c-format
 msgid "%s: maximum function nesting level exceeded (%d)"
 msgstr ""
 
-#: execute_cmd.c:5467
+#: execute_cmd.c:5598
 #, c-format
 msgid "%s: restricted: cannot specify `/' in command names"
 msgstr "%s: rajoitettu: komentojen nimissä ei voi käyttää ”/”-merkkiä"
 
-#: execute_cmd.c:5574
+#: execute_cmd.c:5715
 #, c-format
 msgid "%s: command not found"
 msgstr "%s: komentoa ei löydy"
 
-#: execute_cmd.c:5816
+#: execute_cmd.c:5957
 #, c-format
 msgid "%s: %s"
 msgstr ""
 
-#: execute_cmd.c:5854
+#: execute_cmd.c:5975
+#, fuzzy, c-format
+msgid "%s: cannot execute: required file not found"
+msgstr "%s: binääritiedostoa ei voida suorittaa"
+
+#: execute_cmd.c:6000
 #, c-format
 msgid "%s: %s: bad interpreter"
 msgstr "%s: %s: virheellinen tulkki"
 
-#: execute_cmd.c:5891
+#: execute_cmd.c:6037
 #, fuzzy, c-format
 msgid "%s: cannot execute binary file: %s"
 msgstr "%s: binääritiedostoa ei voida suorittaa"
 
-#: execute_cmd.c:5977
+#: execute_cmd.c:6123
 #, fuzzy, c-format
 msgid "`%s': is a special builtin"
 msgstr "%s on komentotulkin sisäänrakennettu komento\n"
 
-#: execute_cmd.c:6029
+#: execute_cmd.c:6175
 #, c-format
 msgid "cannot duplicate fd %d to fd %d"
 msgstr "tiedostokahvaa %d ei voida kopioida kahvaksi %d"
@@ -1099,70 +1109,70 @@ msgstr "lausekkeen rekursiomäärä ylittyi"
 msgid "recursion stack underflow"
 msgstr "rekursiopinon alivuoto"
 
-#: expr.c:477
+#: expr.c:478
 msgid "syntax error in expression"
 msgstr "lauseoppivirhe lausekkeessa"
 
-#: expr.c:521
+#: expr.c:522
 msgid "attempted assignment to non-variable"
 msgstr "yritettiin sijoittaa objektiin, joka ei ole muuttuja"
 
-#: expr.c:530
+#: expr.c:531
 #, fuzzy
 msgid "syntax error in variable assignment"
 msgstr "lauseoppivirhe lausekkeessa"
 
-#: expr.c:544 expr.c:911
+#: expr.c:545 expr.c:912
 msgid "division by 0"
 msgstr "jako nollalla"
 
-#: expr.c:592
+#: expr.c:593
 msgid "bug: bad expassign token"
 msgstr "bugi: virheellinen sijoitusavainsana"
 
-#: expr.c:646
+#: expr.c:647
 msgid "`:' expected for conditional expression"
 msgstr "”:”:ttä odotettiin ehdolliseen lausekkeeseen"
 
-#: expr.c:972
+#: expr.c:973
 msgid "exponent less than 0"
 msgstr "eksponentti on pienempi kuin 0"
 
-#: expr.c:1029
+#: expr.c:1030
 msgid "identifier expected after pre-increment or pre-decrement"
 msgstr "odotettiin muuttujaa ++:n tai --:n jälkeen"
 
-#: expr.c:1056
+#: expr.c:1057
 msgid "missing `)'"
 msgstr "puuttuva ”)”"
 
-#: expr.c:1107 expr.c:1487
+#: expr.c:1108 expr.c:1492
 msgid "syntax error: operand expected"
 msgstr "lauseoppivirhe: odotettiin operandia"
 
-#: expr.c:1489
+#: expr.c:1494
 msgid "syntax error: invalid arithmetic operator"
 msgstr "lauseoppivirhe: virheellinen aritmetiikkaoperaattori"
 
-#: expr.c:1513
+#: expr.c:1518
 #, c-format
 msgid "%s%s%s: %s (error token is \"%s\")"
 msgstr "%s%s%s: %s (virheellinen avainsana on ”%s”)"
 
-#: expr.c:1573
+#: expr.c:1578
 msgid "invalid arithmetic base"
 msgstr "virheellinen lukujärjestelmä"
 
-#: expr.c:1582
+#: expr.c:1587
 #, fuzzy
 msgid "invalid integer constant"
 msgstr "%s: virheellinen rivimäärä"
 
-#: expr.c:1598
+#: expr.c:1603
 msgid "value too great for base"
 msgstr "liian iso luku lukujärjestelmälle"
 
-#: expr.c:1647
+#: expr.c:1652
 #, c-format
 msgid "%s: expression error\n"
 msgstr "%s: virhe lausekkeessa\n"
@@ -1171,7 +1181,7 @@ msgstr "%s: virhe lausekkeessa\n"
 msgid "getcwd: cannot access parent directories"
 msgstr "getcwd: ylempiin hakemistoihin ei päästä"
 
-#: input.c:99 subst.c:6069
+#: input.c:99 subst.c:6208
 #, c-format
 msgid "cannot reset nodelay mode for fd %d"
 msgstr "nodelay-tilaa ei voida asettaa tiedostokahvalle %d"
@@ -1190,168 +1200,168 @@ msgstr "save_bash_input: uudella tiedostokahvalla %d on jo puskuri"
 msgid "start_pipeline: pgrp pipe"
 msgstr "start_pipeline: pgrp-putki"
 
-#: jobs.c:906
+#: jobs.c:907
 #, c-format
 msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr ""
 
-#: jobs.c:959
+#: jobs.c:960
 #, c-format
 msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr ""
 
-#: jobs.c:1283
+#: jobs.c:1279
 #, c-format
 msgid "forked pid %d appears in running job %d"
 msgstr "haarautettu prosessi-id %d on ajossa olevalla työllä %d"
 
-#: jobs.c:1402
+#: jobs.c:1397
 #, c-format
 msgid "deleting stopped job %d with process group %ld"
 msgstr "poistetaan pysäytetty työ %d prosessiryhmästä %ld"
 
-#: jobs.c:1511
+#: jobs.c:1502
 #, c-format
 msgid "add_process: pid %5ld (%s) marked as still alive"
 msgstr "add_process: prosessi %5ld (%s) on merkattu vielä toimivaksi"
 
-#: jobs.c:1850
+#: jobs.c:1839
 #, c-format
 msgid "describe_pid: %ld: no such pid"
 msgstr "describe_pid: %ld: prosessitunnusta ei löydy."
 
-#: jobs.c:1865
+#: jobs.c:1854
 #, c-format
 msgid "Signal %d"
 msgstr "Signaali %d"
 
-#: jobs.c:1879 jobs.c:1905
+#: jobs.c:1868 jobs.c:1894
 msgid "Done"
 msgstr "Valmis"
 
-#: jobs.c:1884 siglist.c:122
+#: jobs.c:1873 siglist.c:123
 msgid "Stopped"
 msgstr "Pysäytetty"
 
-#: jobs.c:1888
+#: jobs.c:1877
 #, c-format
 msgid "Stopped(%s)"
 msgstr "Pysäytetty(%s)"
 
-#: jobs.c:1892
+#: jobs.c:1881
 msgid "Running"
 msgstr "Ajossa"
 
-#: jobs.c:1909
+#: jobs.c:1898
 #, c-format
 msgid "Done(%d)"
 msgstr "Valmis(%d)"
 
-#: jobs.c:1911
+#: jobs.c:1900
 #, c-format
 msgid "Exit %d"
 msgstr "Poistui %d"
 
-#: jobs.c:1914
+#: jobs.c:1903
 msgid "Unknown status"
 msgstr "Tuntematon tila"
 
-#: jobs.c:2001
+#: jobs.c:1990
 #, c-format
 msgid "(core dumped) "
 msgstr "(luotiin core-tiedosto)"
 
-#: jobs.c:2020
+#: jobs.c:2009
 #, c-format
 msgid "  (wd: %s)"
 msgstr "  (työhakemisto: %s)"
 
-#: jobs.c:2259
+#: jobs.c:2250
 #, c-format
 msgid "child setpgid (%ld to %ld)"
 msgstr "lapsiprosessin setpgid (%ld => %ld)"
 
-#: jobs.c:2617 nojobs.c:664
+#: jobs.c:2608 nojobs.c:666
 #, c-format
 msgid "wait: pid %ld is not a child of this shell"
 msgstr "wait: prosessi %ld ei ole tämän komentotulkin lapsiprosessi"
 
-#: jobs.c:2893
+#: jobs.c:2884
 #, c-format
 msgid "wait_for: No record of process %ld"
 msgstr "wait_for: Prosessista %ld ei ole tietoja"
 
-#: jobs.c:3236
+#: jobs.c:3223
 #, c-format
 msgid "wait_for_job: job %d is stopped"
 msgstr "wait_for_job: työ %d on pysäytetty"
 
-#: jobs.c:3564
+#: jobs.c:3551
 #, fuzzy, c-format
 msgid "%s: no current jobs"
 msgstr "%s: työtä ei löydy"
 
-#: jobs.c:3571
+#: jobs.c:3558
 #, c-format
 msgid "%s: job has terminated"
 msgstr "%s: työ on lopetettu"
 
-#: jobs.c:3580
+#: jobs.c:3567
 #, c-format
 msgid "%s: job %d already in background"
 msgstr "%s: työ %d on jo taustalla"
 
-#: jobs.c:3806
+#: jobs.c:3793
 msgid "waitchld: turning on WNOHANG to avoid indefinite block"
 msgstr ""
 
-#: jobs.c:4320
+#: jobs.c:4307
 #, c-format
 msgid "%s: line %d: "
 msgstr "%s: rivi %d:"
 
-#: jobs.c:4334 nojobs.c:919
+#: jobs.c:4321 nojobs.c:921
 #, c-format
 msgid " (core dumped)"
 msgstr " (luotiin core-tiedosto)"
 
-#: jobs.c:4346 jobs.c:4359
+#: jobs.c:4333 jobs.c:4346
 #, c-format
 msgid "(wd now: %s)\n"
 msgstr "(työhakemisto nyt: %s)\n"
 
-#: jobs.c:4391
+#: jobs.c:4378
 msgid "initialize_job_control: getpgrp failed"
 msgstr "initialize_job_control: getpgrp epäonnistui"
 
-#: jobs.c:4447
+#: jobs.c:4434
 #, fuzzy
 msgid "initialize_job_control: no job control in background"
 msgstr "initialize_job_control: vuonhallinta"
 
-#: jobs.c:4463
+#: jobs.c:4450
 msgid "initialize_job_control: line discipline"
 msgstr "initialize_job_control: vuonhallinta"
 
-#: jobs.c:4473
+#: jobs.c:4460
 msgid "initialize_job_control: setpgid"
 msgstr "initialize_job_control: setpgid"
 
-#: jobs.c:4494 jobs.c:4503
+#: jobs.c:4481 jobs.c:4490
 #, c-format
 msgid "cannot set terminal process group (%d)"
 msgstr "päätteen prosessiryhmää ei voitu asettaa (%d)"
 
-#: jobs.c:4508
+#: jobs.c:4495
 msgid "no job control in this shell"
 msgstr "tällä komentotulkilla ei ole työnohjausta"
 
-#: lib/malloc/malloc.c:353
+#: lib/malloc/malloc.c:367
 #, c-format
 msgid "malloc: failed assertion: %s\n"
 msgstr "malloc: varmistus epäonnistui: %s\n"
 
-#: lib/malloc/malloc.c:369
+#: lib/malloc/malloc.c:383
 #, c-format
 msgid ""
 "\r\n"
@@ -1360,49 +1370,49 @@ msgstr ""
 "\r\n"
 "malloc: %s:%d: varmistus epäonnistui\r\n"
 
-#: lib/malloc/malloc.c:370 lib/malloc/malloc.c:933
+#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941
 msgid "unknown"
 msgstr "tuntematon"
 
-#: lib/malloc/malloc.c:882
+#: lib/malloc/malloc.c:892
 msgid "malloc: block on free list clobbered"
 msgstr "malloc: vapaitten listan lohko ylikirjoittui"
 
-#: lib/malloc/malloc.c:972
+#: lib/malloc/malloc.c:980
 msgid "free: called with already freed block argument"
 msgstr "free: kutsuttiin argumenttina jo vapautettu lohko"
 
-#: lib/malloc/malloc.c:975
+#: lib/malloc/malloc.c:983
 msgid "free: called with unallocated block argument"
 msgstr "free: kutsuttuun argumenttina varaamaton lohko"
 
-#: lib/malloc/malloc.c:994
+#: lib/malloc/malloc.c:1001
 msgid "free: underflow detected; mh_nbytes out of range"
 msgstr "free: havaittiin alivuoto; mh_nbytes rajojen ulkopuolella"
 
-#: lib/malloc/malloc.c:1001
+#: lib/malloc/malloc.c:1007
 #, fuzzy
 msgid "free: underflow detected; magic8 corrupted"
 msgstr "free: havaittiin alivuoto; mh_nbytes rajojen ulkopuolella"
 
-#: lib/malloc/malloc.c:1009
+#: lib/malloc/malloc.c:1014
 msgid "free: start and end chunk sizes differ"
 msgstr "free: alku- ja loppulohkojen koot eroavat"
 
-#: lib/malloc/malloc.c:1119
+#: lib/malloc/malloc.c:1176
 msgid "realloc: called with unallocated block argument"
 msgstr "realloc: kutsuargumentti on varaamaton lohko"
 
-#: lib/malloc/malloc.c:1134
+#: lib/malloc/malloc.c:1191
 msgid "realloc: underflow detected; mh_nbytes out of range"
 msgstr "realloc: havaittiin alivuoto; mh_nbytes rajojen ulkopuolella"
 
-#: lib/malloc/malloc.c:1141
+#: lib/malloc/malloc.c:1197
 #, fuzzy
 msgid "realloc: underflow detected; magic8 corrupted"
 msgstr "realloc: havaittiin alivuoto; mh_nbytes rajojen ulkopuolella"
 
-#: lib/malloc/malloc.c:1150
+#: lib/malloc/malloc.c:1205
 msgid "realloc: start and end chunk sizes differ"
 msgstr "realloc: alku- ja loppulohkojen koot eroavat"
 
@@ -1444,22 +1454,22 @@ msgstr "%s: virheellinen verkkopolkumääritys"
 msgid "network operations not supported"
 msgstr "verkko-operaatioita ei ole tuettu"
 
-#: locale.c:217
+#: locale.c:219
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s)"
 msgstr ""
 
-#: locale.c:219
+#: locale.c:221
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s): %s"
 msgstr ""
 
-#: locale.c:292
+#: locale.c:294
 #, fuzzy, c-format
 msgid "setlocale: %s: cannot change locale (%s)"
 msgstr "xrealloc: %s:%d: ei voida varata %lu tavua"
 
-#: locale.c:294
+#: locale.c:296
 #, fuzzy, c-format
 msgid "setlocale: %s: cannot change locale (%s): %s"
 msgstr "xrealloc: %s:%d: ei voida varata %lu tavua"
@@ -1477,140 +1487,140 @@ msgstr "Sinulla on uutta postia laatikossa $_"
 msgid "The mail in %s has been read\n"
 msgstr "Posti laatikossa %s on luettu\n"
 
-#: make_cmd.c:317
+#: make_cmd.c:314
 msgid "syntax error: arithmetic expression required"
 msgstr "lauseoppivirhe: vaaditaan aritmeettinen lauseke"
 
-#: make_cmd.c:319
+#: make_cmd.c:316
 msgid "syntax error: `;' unexpected"
 msgstr "lauseoppivirhe: odottamaton ”;”"
 
-#: make_cmd.c:320
+#: make_cmd.c:317
 #, c-format
 msgid "syntax error: `((%s))'"
 msgstr "lauseoppivirhe: ”((%s))”"
 
-#: make_cmd.c:572
+#: make_cmd.c:569
 #, c-format
 msgid "make_here_document: bad instruction type %d"
 msgstr "make_here_document: virheellinen käskytyyppi %d"
 
-#: make_cmd.c:657
+#: make_cmd.c:668
 #, c-format
 msgid "here-document at line %d delimited by end-of-file (wanted `%s')"
 msgstr ""
 "here-dokumentti rivillä %d päättyi tiedoston loppumiseen (haluttiin ”%s”)"
 
-#: make_cmd.c:756
+#: make_cmd.c:769
 #, c-format
 msgid "make_redirection: redirection instruction `%d' out of range"
 msgstr "make_redirection: uudelleenohjaus ”%d” rajojen ulkopuolella"
 
-#: parse.y:2393
+#: parse.y:2428
 #, c-format
 msgid ""
 "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line "
 "truncated"
 msgstr ""
 
-#: parse.y:2826
+#: parse.y:2921
 msgid "maximum here-document count exceeded"
 msgstr ""
 
-#: parse.y:3581 parse.y:3957 parse.y:4556
+#: parse.y:3684 parse.y:4244 parse.y:6148
 #, c-format
 msgid "unexpected EOF while looking for matching `%c'"
 msgstr "odottamaton EOF (tiedostonloppu) odotettaessa sulkevaa ”%c”"
 
-#: parse.y:4696
+#: parse.y:4452
 msgid "unexpected EOF while looking for `]]'"
 msgstr "odottamaton EOF odotettaessa ”]]”"
 
-#: parse.y:4701
+#: parse.y:4457
 #, c-format
 msgid "syntax error in conditional expression: unexpected token `%s'"
 msgstr "lauseoppivirhe ehdollisessa lausekkeessa: odottamaton avainsana ”%s”"
 
-#: parse.y:4705
+#: parse.y:4461
 msgid "syntax error in conditional expression"
 msgstr "lauseoppivirhe ehdollisessa lausekkeessa"
 
-#: parse.y:4783
+#: parse.y:4539
 #, c-format
 msgid "unexpected token `%s', expected `)'"
 msgstr "odottamaton avainsana ”%s”, odotettiin ”)”"
 
-#: parse.y:4787
+#: parse.y:4543
 msgid "expected `)'"
 msgstr "odototettiin ”)”"
 
-#: parse.y:4815
+#: parse.y:4571
 #, c-format
 msgid "unexpected argument `%s' to conditional unary operator"
 msgstr "odottamaton argumentti ”%s” ehdolliselle unaariselle operaattorille"
 
-#: parse.y:4819
+#: parse.y:4575
 msgid "unexpected argument to conditional unary operator"
 msgstr "odottamaton argumentti ehdolliselle unaariselle operaattorille"
 
-#: parse.y:4865
+#: parse.y:4621
 #, c-format
 msgid "unexpected token `%s', conditional binary operator expected"
 msgstr ""
 "odottamaton avainsana ”%s”, odotettiin ehdollista binääristä operaattoria"
 
-#: parse.y:4869
+#: parse.y:4625
 msgid "conditional binary operator expected"
 msgstr "odotettiin ehdollista binääristä operaattoria"
 
-#: parse.y:4891
+#: parse.y:4647
 #, c-format
 msgid "unexpected argument `%s' to conditional binary operator"
 msgstr "odottamaton argumentti ”%s” ehdolliselle binääriselle operaattorille"
 
-#: parse.y:4895
+#: parse.y:4651
 msgid "unexpected argument to conditional binary operator"
 msgstr "odottamaton argumentti ehdolliselle binääriselle operaattorille"
 
-#: parse.y:4906
+#: parse.y:4662
 #, c-format
 msgid "unexpected token `%c' in conditional command"
 msgstr "odottamaton avainsana ”%c” ehdollisessa komennossa"
 
-#: parse.y:4909
+#: parse.y:4665
 #, c-format
 msgid "unexpected token `%s' in conditional command"
 msgstr "odottamaton avainsana ”%s” ehdollisessa komennossa"
 
-#: parse.y:4913
+#: parse.y:4669
 #, c-format
 msgid "unexpected token %d in conditional command"
 msgstr "odottamaton avainsana %d ehdollisessa komennossa"
 
-#: parse.y:6336
+#: parse.y:6118
 #, c-format
 msgid "syntax error near unexpected token `%s'"
 msgstr "lauseoppivirhe lähellä odottamatonta avainsanaa ”%s”"
 
-#: parse.y:6355
+#: parse.y:6137
 #, c-format
 msgid "syntax error near `%s'"
 msgstr "lauseoppivirhe lähellä ”%s”"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error: unexpected end of file"
 msgstr "lauseoppivirhe: odottamaton tiedostonloppu"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error"
 msgstr "lauseoppivirhe"
 
-#: parse.y:6428
+#: parse.y:6216
 #, c-format
 msgid "Use \"%s\" to leave the shell.\n"
 msgstr "Kirjoita ”%s” poistuaksesi komentotulkista.\n"
 
-#: parse.y:6602
+#: parse.y:6394
 msgid "unexpected EOF while looking for matching `)'"
 msgstr "Odottamaton EOF odotettaessa vastaavaa ”)”"
 
@@ -1648,94 +1658,94 @@ msgstr ""
 msgid "xtrace fd (%d) != fileno xtrace fp (%d)"
 msgstr ""
 
-#: print_cmd.c:1540
+#: print_cmd.c:1545
 #, c-format
 msgid "cprintf: `%c': invalid format character"
 msgstr "cprintf: ”%c”: virheellinen muotoilumerkki"
 
-#: redir.c:149 redir.c:197
+#: redir.c:150 redir.c:198
 msgid "file descriptor out of range"
 msgstr "tiedostokahva rajojen ulkopuolella"
 
-#: redir.c:204
+#: redir.c:205
 #, c-format
 msgid "%s: ambiguous redirect"
 msgstr "%s: epämääräinen uudelleenohjaus"
 
-#: redir.c:208
+#: redir.c:209
 #, c-format
 msgid "%s: cannot overwrite existing file"
 msgstr "%s: olemassa olevan tiedoston päälle ei voida kirjoittaa"
 
-#: redir.c:213
+#: redir.c:214
 #, c-format
 msgid "%s: restricted: cannot redirect output"
 msgstr "%s: rajoitettu: tulostusta ei voida uudelleenohjata"
 
-#: redir.c:218
+#: redir.c:219
 #, c-format
 msgid "cannot create temp file for here-document: %s"
 msgstr "here-dokumentille ei voida luoda väliaikaistiedostoa: %s"
 
-#: redir.c:222
+#: redir.c:223
 #, fuzzy, c-format
 msgid "%s: cannot assign fd to variable"
 msgstr "%s: listaa ei voida sijoittaa taulukon alkioon"
 
-#: redir.c:649
+#: redir.c:650
 msgid "/dev/(tcp|udp)/host/port not supported without networking"
 msgstr "/dev/(tcp|udp)/host/port-muotoa ei tueta ilman tietoliikennettä"
 
-#: redir.c:938 redir.c:1053 redir.c:1114 redir.c:1284
+#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303
 msgid "redirection error: cannot duplicate fd"
 msgstr "virhe uudelleenohjauksessa: tiedostokahvaa ei voida kopioida"
 
-#: shell.c:347
+#: shell.c:353
 msgid "could not find /tmp, please create!"
 msgstr "/tmp-hakemistoa ei löytynyt, luo se!"
 
-#: shell.c:351
+#: shell.c:357
 msgid "/tmp must be a valid directory name"
 msgstr "/tmp:n pitää olla kelvollinen hakemiston nimi"
 
-#: shell.c:804
+#: shell.c:826
 msgid "pretty-printing mode ignored in interactive shells"
 msgstr ""
 
-#: shell.c:948
+#: shell.c:972
 #, c-format
 msgid "%c%c: invalid option"
 msgstr "%c%c: virheellinen valitsin"
 
-#: shell.c:1319
+#: shell.c:1343
 #, fuzzy, c-format
 msgid "cannot set uid to %d: effective uid %d"
 msgstr "nodelay-tilaa ei voida asettaa tiedostokahvalle %d"
 
-#: shell.c:1330
+#: shell.c:1354
 #, fuzzy, c-format
 msgid "cannot set gid to %d: effective gid %d"
 msgstr "nodelay-tilaa ei voida asettaa tiedostokahvalle %d"
 
-#: shell.c:1518
+#: shell.c:1544
 msgid "cannot start debugger; debugging mode disabled"
 msgstr ""
 
-#: shell.c:1632
+#: shell.c:1658
 #, fuzzy, c-format
 msgid "%s: Is a directory"
 msgstr "%s: on hakemisto"
 
-#: shell.c:1881
+#: shell.c:1907
 msgid "I have no name!"
 msgstr "Minulla ei ole nimeä!"
 
-#: shell.c:2035
+#: shell.c:2061
 #, c-format
 msgid "GNU bash, version %s-(%s)\n"
 msgstr "GNU bash, versio %s-(%s)\n"
 
-#: shell.c:2036
+#: shell.c:2062
 #, c-format
 msgid ""
 "Usage:\t%s [GNU long option] [option] ...\n"
@@ -1744,326 +1754,326 @@ msgstr ""
 "Käyttö:\t%s[GNU:n pitkä valitsin] [valitsin] ...\n"
 "\t%s [GNU:n pitkä valitsin] [valitsin] komentotiedosto ...\n"
 
-#: shell.c:2038
+#: shell.c:2064
 msgid "GNU long options:\n"
 msgstr "GNU:n pitkät valitsimet:\n"
 
-#: shell.c:2042
+#: shell.c:2068
 msgid "Shell options:\n"
 msgstr "Komentotulkin valitsimet:\n"
 
-#: shell.c:2043
+#: shell.c:2069
 #, fuzzy
 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n"
 msgstr ""
 "\t-irsD tai -c komento tai -O shopt_option (ainoastaan käynnistettäessä)\n"
 
-#: shell.c:2062
+#: shell.c:2088
 #, c-format
 msgid "\t-%s or -o option\n"
 msgstr "\t-%s tai -o -valitsin\n"
 
-#: shell.c:2068
+#: shell.c:2094
 #, c-format
 msgid "Type `%s -c \"help set\"' for more information about shell options.\n"
 msgstr ""
 "Kirjoita ”%s -c 'help set'” saadaksesi lisätietoja komentotulkin "
 "valitsimista.\n"
 
-#: shell.c:2069
+#: shell.c:2095
 #, c-format
 msgid "Type `%s -c help' for more information about shell builtin commands.\n"
 msgstr ""
 "Kirjoita ”%s -c help” saadaksesi lisätietoja komentotulkin "
 "sisäänrakennetuista komennoista.\n"
 
-#: shell.c:2070
+#: shell.c:2096
 #, c-format
 msgid "Use the `bashbug' command to report bugs.\n"
 msgstr "Raportoi virheet komennolla ”bashbug”.\n"
 
-#: shell.c:2072
+#: shell.c:2098
 #, c-format
 msgid "bash home page: <http://www.gnu.org/software/bash>\n"
 msgstr ""
 
-#: shell.c:2073
+#: shell.c:2099
 #, c-format
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 msgstr ""
 
-#: sig.c:757
+#: sig.c:765
 #, c-format
 msgid "sigprocmask: %d: invalid operation"
 msgstr "sigprocmask: %d: virheellinen operaatio"
 
-#: siglist.c:47
+#: siglist.c:48
 msgid "Bogus signal"
 msgstr "Väärä signaali"
 
-#: siglist.c:50
+#: siglist.c:51
 msgid "Hangup"
 msgstr "Linjankatkaisu"
 
-#: siglist.c:54
+#: siglist.c:55
 msgid "Interrupt"
 msgstr "Keskeytys"
 
-#: siglist.c:58
+#: siglist.c:59
 msgid "Quit"
 msgstr "Lopetettu"
 
-#: siglist.c:62
+#: siglist.c:63
 msgid "Illegal instruction"
 msgstr "Virheellinen käsky"
 
-#: siglist.c:66
+#: siglist.c:67
 msgid "BPT trace/trap"
 msgstr "Jäljitys/katkaisupisteansa"
 
-#: siglist.c:74
+#: siglist.c:75
 msgid "ABORT instruction"
 msgstr "ABORT-käsky"
 
-#: siglist.c:78
+#: siglist.c:79
 msgid "EMT instruction"
 msgstr "EMT-käsky"
 
-#: siglist.c:82
+#: siglist.c:83
 msgid "Floating point exception"
 msgstr "Liukulukupoikkeus"
 
-#: siglist.c:86
+#: siglist.c:87
 msgid "Killed"
 msgstr "Tapettu"
 
-#: siglist.c:90
+#: siglist.c:91
 msgid "Bus error"
 msgstr "Väylävirhe"
 
-#: siglist.c:94
+#: siglist.c:95
 msgid "Segmentation fault"
 msgstr "Muistialueen ylitys"
 
-#: siglist.c:98
+#: siglist.c:99
 msgid "Bad system call"
 msgstr "Virheellinen järjestelmäkutsu"
 
-#: siglist.c:102
+#: siglist.c:103
 msgid "Broken pipe"
 msgstr "Katkennut putki"
 
-#: siglist.c:106
+#: siglist.c:107
 msgid "Alarm clock"
 msgstr "Herätyskello"
 
-#: siglist.c:110
+#: siglist.c:111
 msgid "Terminated"
 msgstr "Päätetty"
 
-#: siglist.c:114
+#: siglist.c:115
 msgid "Urgent IO condition"
 msgstr "Kiireellinen I/O-ehto"
 
-#: siglist.c:118
+#: siglist.c:119
 msgid "Stopped (signal)"
 msgstr "Pysäytetty (signaali)"
 
-#: siglist.c:126
+#: siglist.c:127
 msgid "Continue"
 msgstr "Jatka"
 
-#: siglist.c:134
+#: siglist.c:135
 msgid "Child death or stop"
 msgstr "Lapsiprosessin kuolema tai pysähtyminen"
 
-#: siglist.c:138
+#: siglist.c:139
 msgid "Stopped (tty input)"
 msgstr "Pysäytetty (päätteen syöte)"
 
-#: siglist.c:142
+#: siglist.c:143
 msgid "Stopped (tty output)"
 msgstr "Pysäytetty (päätteen tuloste)"
 
-#: siglist.c:146
+#: siglist.c:147
 msgid "I/O ready"
 msgstr "I/O on valmis"
 
-#: siglist.c:150
+#: siglist.c:151
 msgid "CPU limit"
 msgstr "CPU-rajoitus"
 
-#: siglist.c:154
+#: siglist.c:155
 msgid "File limit"
 msgstr "Tiedostorajoitus"
 
-#: siglist.c:158
+#: siglist.c:159
 msgid "Alarm (virtual)"
 msgstr "Hälytys (virtuaalinen)"
 
-#: siglist.c:162
+#: siglist.c:163
 msgid "Alarm (profile)"
 msgstr "Hälytys (profiili)"
 
-#: siglist.c:166
+#: siglist.c:167
 msgid "Window changed"
 msgstr "Ikkuna vaihtunut"
 
-#: siglist.c:170
+#: siglist.c:171
 msgid "Record lock"
 msgstr "Tietuelukko"
 
-#: siglist.c:174
+#: siglist.c:175
 msgid "User signal 1"
 msgstr "Käyttäjän määrittelemä signaali 1"
 
-#: siglist.c:178
+#: siglist.c:179
 msgid "User signal 2"
 msgstr "Käyttäjän määrittelemä signaali 2"
 
-#: siglist.c:182
+#: siglist.c:183
 msgid "HFT input data pending"
 msgstr "HFT-syöte odottaa"
 
-#: siglist.c:186
+#: siglist.c:187
 msgid "power failure imminent"
 msgstr "sähkökatko lähellä"
 
-#: siglist.c:190
+#: siglist.c:191
 msgid "system crash imminent"
 msgstr "järjestelmän kaatuminen lähellä"
 
-#: siglist.c:194
+#: siglist.c:195
 msgid "migrate process to another CPU"
 msgstr "siirrä prosessi toiselle CPU:lle"
 
-#: siglist.c:198
+#: siglist.c:199
 msgid "programming error"
 msgstr "ohjelmointivirhe"
 
-#: siglist.c:202
+#: siglist.c:203
 msgid "HFT monitor mode granted"
 msgstr "HFT-monitorointitila käytössä"
 
-#: siglist.c:206
+#: siglist.c:207
 msgid "HFT monitor mode retracted"
 msgstr "HFT-monitorointitila peruttu"
 
-#: siglist.c:210
+#: siglist.c:211
 msgid "HFT sound sequence has completed"
 msgstr "HFT-äänisekvenssi on valmistunut"
 
-#: siglist.c:214
+#: siglist.c:215
 msgid "Information request"
 msgstr "Informaatiopyyntö"
 
-#: siglist.c:222 siglist.c:224
+#: siglist.c:223 siglist.c:225
 #, c-format
 msgid "Unknown Signal #%d"
 msgstr "Tuntematon signaali #%d"
 
-#: subst.c:1476 subst.c:1666
+#: subst.c:1480 subst.c:1670
 #, c-format
 msgid "bad substitution: no closing `%s' in %s"
 msgstr "virheellinen korvaus: ei sulkevaa ”%s” jonossa %s"
 
-#: subst.c:3281
+#: subst.c:3307
 #, c-format
 msgid "%s: cannot assign list to array member"
 msgstr "%s: listaa ei voida sijoittaa taulukon alkioon"
 
-#: subst.c:5910 subst.c:5926
+#: subst.c:6048 subst.c:6064
 msgid "cannot make pipe for process substitution"
 msgstr "putkea ei voida luoda prosessin korvaamista varten"
 
-#: subst.c:5985
+#: subst.c:6124
 msgid "cannot make child for process substitution"
 msgstr "lapsiprosessia ei voida luoda prosessin korvaamista varten"
 
-#: subst.c:6059
+#: subst.c:6198
 #, c-format
 msgid "cannot open named pipe %s for reading"
 msgstr "nimettyä putkea %s ei voida avata lukemista varten"
 
-#: subst.c:6061
+#: subst.c:6200
 #, c-format
 msgid "cannot open named pipe %s for writing"
 msgstr "nimettyä putkea %s ei voida avata kirjoitusta varten"
 
-#: subst.c:6084
+#: subst.c:6223
 #, c-format
 msgid "cannot duplicate named pipe %s as fd %d"
 msgstr "nimettyä putkea %s ei voida kopioida tiedostokahvaksi %d"
 
-#: subst.c:6213
+#: subst.c:6370
 #, fuzzy
 msgid "command substitution: ignored null byte in input"
 msgstr "virheellinen korvaus: ei sulkevaa ”`” jonossa %s"
 
-#: subst.c:6353
+#: subst.c:6533
 msgid "cannot make pipe for command substitution"
 msgstr "putkea ei voida luoda komennon korvaamista varten"
 
-#: subst.c:6397
+#: subst.c:6580
 msgid "cannot make child for command substitution"
 msgstr "ei voida luoda lapsiprosessia komennon korvaamista varten"
 
-#: subst.c:6423
+#: subst.c:6613
 msgid "command_substitute: cannot duplicate pipe as fd 1"
 msgstr "command_substitute: putkea ei voida kopioida tiedostokahvaksi 1"
 
-#: subst.c:6883 subst.c:9952
+#: subst.c:7082 subst.c:10252
 #, c-format
 msgid "%s: invalid variable name for name reference"
 msgstr ""
 
-#: subst.c:6979 subst.c:6997 subst.c:7169
+#: subst.c:7178 subst.c:7196 subst.c:7369
 #, fuzzy, c-format
 msgid "%s: invalid indirect expansion"
 msgstr "%s: virheellinen rivimäärä"
 
-#: subst.c:7013 subst.c:7177
+#: subst.c:7212 subst.c:7377
 #, fuzzy, c-format
 msgid "%s: invalid variable name"
 msgstr "%s: virheellinen toiminnon nimi"
 
-#: subst.c:7256
+#: subst.c:7478
 #, fuzzy, c-format
 msgid "%s: parameter not set"
 msgstr "%s: parametria ei ole tai sitä ei ole asetettu"
 
-#: subst.c:7258
+#: subst.c:7480
 #, c-format
 msgid "%s: parameter null or not set"
 msgstr "%s: parametria ei ole tai sitä ei ole asetettu"
 
-#: subst.c:7503 subst.c:7518
+#: subst.c:7727 subst.c:7742
 #, c-format
 msgid "%s: substring expression < 0"
 msgstr "%s: alimerkkijonolauseke < 0"
 
-#: subst.c:9281 subst.c:9302
+#: subst.c:9560 subst.c:9587
 #, c-format
 msgid "%s: bad substitution"
 msgstr "%s: virheellinen korvaus"
 
-#: subst.c:9390
+#: subst.c:9678
 #, c-format
 msgid "$%s: cannot assign in this way"
 msgstr "$%s: ei voida asettaa näin"
 
-#: subst.c:9814
+#: subst.c:10111
 msgid ""
 "future versions of the shell will force evaluation as an arithmetic "
 "substitution"
 msgstr ""
 
-#: subst.c:10367
+#: subst.c:10795
 #, c-format
 msgid "bad substitution: no closing \"`\" in %s"
 msgstr "virheellinen korvaus: ei sulkevaa ”`” jonossa %s"
 
-#: subst.c:11434
+#: subst.c:11874
 #, c-format
 msgid "no match: %s"
 msgstr "ei osumia: %s"
@@ -2086,21 +2096,21 @@ msgstr "odotettiin ”)”"
 msgid "`)' expected, found %s"
 msgstr "odotettiin ”)”, löydettiin %s"
 
-#: test.c:466 test.c:799
+#: test.c:469 test.c:814
 #, c-format
 msgid "%s: binary operator expected"
 msgstr "%s: odotettiin binääristä operaattoria"
 
-#: test.c:756 test.c:759
+#: test.c:771 test.c:774
 #, c-format
 msgid "%s: unary operator expected"
 msgstr "%s: odotettiin unaarista operaattoria"
 
-#: test.c:881
+#: test.c:896
 msgid "missing `]'"
 msgstr "puuttuva ”]”"
 
-#: test.c:899
+#: test.c:914
 #, fuzzy, c-format
 msgid "syntax error: `%s' unexpected"
 msgstr "lauseoppivirhe: odottamaton ”;”"
@@ -2109,17 +2119,17 @@ msgstr "lauseoppivirhe: odottamaton ”;”"
 msgid "invalid signal number"
 msgstr "virheellinen signaalinumero"
 
-#: trap.c:325
+#: trap.c:323
 #, c-format
 msgid "trap handler: maximum trap handler level exceeded (%d)"
 msgstr ""
 
-#: trap.c:414
+#: trap.c:412
 #, c-format
 msgid "run_pending_traps: bad value in trap_list[%d]: %p"
 msgstr "run_pending_traps: virheellinen arvo trap_list[%d]: %p"
 
-#: trap.c:418
+#: trap.c:416
 #, c-format
 msgid ""
 "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
@@ -2127,86 +2137,91 @@ msgstr ""
 "run_pending_traps: signaalikäsittelijä on SIG_DFL, lähetän %d (%s) uudelleen "
 "itselleni"
 
-#: trap.c:487
+#: trap.c:509
 #, c-format
 msgid "trap_handler: bad signal %d"
 msgstr "trap_handler: virheellinen signaali %d"
 
-#: variables.c:421
+#: variables.c:424
 #, c-format
 msgid "error importing function definition for `%s'"
 msgstr "virhe tuotaessa ”%s”:n funktiomääritystä"
 
-#: variables.c:833
+#: variables.c:838
 #, c-format
 msgid "shell level (%d) too high, resetting to 1"
 msgstr "komentotulkkitaso (%d) liian korkea, palautetaan 1:ksi"
 
-#: variables.c:2674
+#: variables.c:2642
 msgid "make_local_variable: no function context at current scope"
 msgstr "make_local_variable: ei funktiokontekstia nykytilassa"
 
-#: variables.c:2693
+#: variables.c:2661
 #, c-format
 msgid "%s: variable may not be assigned value"
 msgstr ""
 
-#: variables.c:3475
+#: variables.c:2818 variables.c:2874
+#, c-format
+msgid "%s: cannot inherit value from incompatible type"
+msgstr ""
+
+#: variables.c:3459
 #, c-format
 msgid "%s: assigning integer to name reference"
 msgstr ""
 
-#: variables.c:4404
+#: variables.c:4390
 msgid "all_local_variables: no function context at current scope"
 msgstr "all_local_variables: ei funktiokontekstia nykytilassa"
 
-#: variables.c:4771
+#: variables.c:4757
 #, fuzzy, c-format
 msgid "%s has null exportstr"
 msgstr "%s: parametria ei ole tai sitä ei ole asetettu"
 
-#: variables.c:4776 variables.c:4785
+#: variables.c:4762 variables.c:4771
 #, c-format
 msgid "invalid character %d in exportstr for %s"
 msgstr "virheellinen merkki %d %s:n exportstr:ssä"
 
-#: variables.c:4791
+#: variables.c:4777
 #, c-format
 msgid "no `=' in exportstr for %s"
 msgstr "ei =:ä kohteen %s exportstr:ssä"
 
-#: variables.c:5331
+#: variables.c:5317
 msgid "pop_var_context: head of shell_variables not a function context"
 msgstr "pop_var_context: shell_variablesin alku ei ole funktiokonteksti"
 
-#: variables.c:5344
+#: variables.c:5330
 msgid "pop_var_context: no global_variables context"
 msgstr "pop_var_context: ei global_variables-kontekstia"
 
-#: variables.c:5424
+#: variables.c:5410
 msgid "pop_scope: head of shell_variables not a temporary environment scope"
 msgstr ""
 "pop_scope: shell_variablesin alku ei väliaikaisten ympäristömuuttujien "
 "ympäristössä"
 
-#: variables.c:6387
+#: variables.c:6400
 #, fuzzy, c-format
 msgid "%s: %s: cannot open as FILE"
 msgstr "%s: ei voida avata: %s"
 
-#: variables.c:6392
+#: variables.c:6405
 #, fuzzy, c-format
 msgid "%s: %s: invalid value for trace file descriptor"
 msgstr "%d: virheellinen tiedostokahva: %s"
 
-#: variables.c:6437
+#: variables.c:6450
 #, fuzzy, c-format
 msgid "%s: %s: compatibility value out of range"
 msgstr "%s: %s rajojen ulkopuolella"
 
 #: version.c:46 version2.c:46
 #, fuzzy
-msgid "Copyright (C) 2020 Free Software Foundation, Inc."
+msgid "Copyright (C) 2022 Free Software Foundation, Inc."
 msgstr "Copyright © 2009 Free Software Foundation, Inc."
 
 #: version.c:47 version2.c:47
@@ -2301,12 +2316,16 @@ msgstr "command [-pVv] komento [arg ...]"
 
 #: builtins.c:78
 #, fuzzy
-msgid "declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]"
+msgid ""
+"declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] "
+"[name ...]"
 msgstr "declare [-aAfFilrtux] [-p] [niemi[=arvo] ...]"
 
 #: builtins.c:80
 #, fuzzy
-msgid "typeset [-aAfFgiIlnrtux] [-p] name[=value] ..."
+msgid ""
+"typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] "
+"[name ...]"
 msgstr "typeset [-aAfFilrtux] [-p] nimi[=arvo] ..."
 
 #: builtins.c:82
@@ -2413,7 +2432,7 @@ msgstr "return [n]"
 
 #: builtins.c:142
 #, fuzzy
-msgid "set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]"
+msgid "set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]"
 msgstr "set [--abefhkmnptuvxBCHP] [-o valitsinnimi] [arg ...]"
 
 #: builtins.c:144
@@ -2464,7 +2483,7 @@ msgstr "type [-afptP] nimi [nimi ...]"
 
 #: builtins.c:171
 #, fuzzy
-msgid "ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]"
+msgid "ulimit [-SHabcdefiklmnpqrstuvxPRT] [limit]"
 msgstr "ulimit [-SHacdefilmnpqrstuvx] [raja]"
 
 #: builtins.c:174
@@ -2510,11 +2529,13 @@ msgstr ""
 "KOMENNOT; ] fi"
 
 #: builtins.c:196
-msgid "while COMMANDS; do COMMANDS; done"
+#, fuzzy
+msgid "while COMMANDS; do COMMANDS-2; done"
 msgstr "while KOMENNOT; do KOMENNOT; done"
 
 #: builtins.c:198
-msgid "until COMMANDS; do COMMANDS; done"
+#, fuzzy
+msgid "until COMMANDS; do COMMANDS-2; done"
 msgstr "until KOMENNOT; do KOMENNOT; done"
 
 #: builtins.c:200
@@ -3920,7 +3941,9 @@ msgid ""
 "    word to the second NAME, and so on, with any leftover words assigned to\n"
 "    the last NAME.  Only the characters found in $IFS are recognized as "
 "word\n"
-"    delimiters.\n"
+"    delimiters. By default, the backslash character escapes delimiter "
+"characters\n"
+"    and newline.\n"
 "    \n"
 "    If no NAMEs are supplied, the line read is stored in the REPLY "
 "variable.\n"
@@ -3999,7 +4022,7 @@ msgstr ""
 "    Paluuarvo on nolla, ellei törmätä tiedoston loppumiseen, aikarajan\n"
 "    ylitykseen tai mikäli -u:lle annetaan virheellinen tiedostokahva."
 
-#: builtins.c:1041
+#: builtins.c:1042
 msgid ""
 "Return from a shell function.\n"
 "    \n"
@@ -4023,7 +4046,7 @@ msgstr ""
 "suorittamassa\n"
 "    funktiota tai skriptiä."
 
-#: builtins.c:1054
+#: builtins.c:1055
 #, fuzzy
 msgid ""
 "Set or unset values of shell options and positional parameters.\n"
@@ -4194,7 +4217,7 @@ msgstr ""
 "    Paluuarvo:\n"
 "    Palauttaa onnistumisen ellei ole annettu virheellistä valitsinta."
 
-#: builtins.c:1139
+#: builtins.c:1140
 #, fuzzy
 msgid ""
 "Unset values and attributes of shell variables and functions.\n"
@@ -4233,7 +4256,7 @@ msgstr ""
 "    Palauttaa onnistuneen paitsi jos on annettu virheellinen valitsin\n"
 "    tai NIMI on kirjoitussuojattu."
 
-#: builtins.c:1161
+#: builtins.c:1162
 msgid ""
 "Set export attribute for shell variables.\n"
 "    \n"
@@ -4267,7 +4290,7 @@ msgstr ""
 "    Palauttaa onnistuneen paitsi jos on annettu virheellinen valitsin\n"
 "    tai NIMI on virheellinen."
 
-#: builtins.c:1180
+#: builtins.c:1181
 #, fuzzy
 msgid ""
 "Mark shell variables as unchangeable.\n"
@@ -4306,7 +4329,7 @@ msgstr ""
 "    Palauttaa onnistuneen paitsi jos on annettu virheellinen valitsin\n"
 "    tai NIMI on virheellinen."
 
-#: builtins.c:1202
+#: builtins.c:1203
 msgid ""
 "Shift positional parameters.\n"
 "    \n"
@@ -4325,7 +4348,7 @@ msgstr ""
 "    Paluuarvo:\n"
 "    Palauttaa onnistuneen ellei N ole negatiivinen tai suurempi kuin $#."
 
-#: builtins.c:1214 builtins.c:1229
+#: builtins.c:1215 builtins.c:1230
 msgid ""
 "Execute commands from a file in the current shell.\n"
 "    \n"
@@ -4350,7 +4373,7 @@ msgstr ""
 "epäonnistuu\n"
 "    mikäli TIEDOSTOA ei voida lukea."
 
-#: builtins.c:1245
+#: builtins.c:1246
 msgid ""
 "Suspend shell execution.\n"
 "    \n"
@@ -4377,7 +4400,7 @@ msgstr ""
 "tapahtuu\n"
 "    virhe."
 
-#: builtins.c:1261
+#: builtins.c:1262
 #, fuzzy
 msgid ""
 "Evaluate conditional expression.\n"
@@ -4540,7 +4563,7 @@ msgstr ""
 "    Palauttaa onnistumisen jos LAUSEKE evaluoituu todeksi; epäonnistuu jos\n"
 "    LAUSEKE evaluoituu vääräksi tai on annettu virheellinen argumentti."
 
-#: builtins.c:1343
+#: builtins.c:1344
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -4552,7 +4575,7 @@ msgstr ""
 "    Tämä on sisäänrakennetun ”test”-komennon synonyymi, mutta viimeisen\n"
 "    argumentin pitää olla ”]”, joka sulkee avaavan ”[”:n."
 
-#: builtins.c:1352
+#: builtins.c:1353
 msgid ""
 "Display process times.\n"
 "    \n"
@@ -4572,7 +4595,7 @@ msgstr ""
 "    Paluuarvo:\n"
 "    Onnistuu aina."
 
-#: builtins.c:1364
+#: builtins.c:1365
 #, fuzzy
 msgid ""
 "Trap signals and other events.\n"
@@ -4654,7 +4677,7 @@ msgstr ""
 "annettu\n"
 "    virheellinen valitsin."
 
-#: builtins.c:1400
+#: builtins.c:1401
 #, fuzzy
 msgid ""
 "Display information about command type.\n"
@@ -4711,7 +4734,7 @@ msgstr ""
 "    Palauttaa onnistuneen mikäli kaikki NIMET löytyivät, muussa tapauksessa\n"
 "    epäonnistuu."
 
-#: builtins.c:1431
+#: builtins.c:1432
 #, fuzzy
 msgid ""
 "Modify shell resource limits.\n"
@@ -4803,7 +4826,7 @@ msgstr ""
 "    Palauttaa onnistuneen paitsi jos on annettu virheellinen valitsin\n"
 "    tai tapahtuu virhe."
 
-#: builtins.c:1482
+#: builtins.c:1483
 msgid ""
 "Display or set file mode mask.\n"
 "    \n"
@@ -4838,7 +4861,7 @@ msgstr ""
 "    Palauttaa onnistuneen ellei TILA ole virheellinen tai on annettu \n"
 "    virheellinen valitsin."
 
-#: builtins.c:1502
+#: builtins.c:1503
 #, fuzzy
 msgid ""
 "Wait for job completion and return exit status.\n"
@@ -4884,7 +4907,7 @@ msgstr ""
 "    Palauttaa ID:n tilan; epäonnistuu jos ID on virheellinen tai on annettu\n"
 "    virheellinen valitsin."
 
-#: builtins.c:1533
+#: builtins.c:1534
 #, fuzzy
 msgid ""
 "Wait for process completion and return exit status.\n"
@@ -4910,7 +4933,7 @@ msgstr ""
 "    Palauttaa ID:n tilan; epäonnistuu jos ID on virheellinen tai on annettu\n"
 "    virheellinen valitsin."
 
-#: builtins.c:1548
+#: builtins.c:1549
 msgid ""
 "Execute commands for each member in a list.\n"
 "    \n"
@@ -4932,7 +4955,7 @@ msgstr ""
 "    Paluuarvo:\n"
 "    Viimeisen suoritetun komennon paluuarvo."
 
-#: builtins.c:1562
+#: builtins.c:1563
 msgid ""
 "Arithmetic for loop.\n"
 "    \n"
@@ -4964,7 +4987,7 @@ msgstr ""
 "    Paluuarvo:\n"
 "    Viimeisen suoritetun komennon paluuarvo."
 
-#: builtins.c:1580
+#: builtins.c:1581
 msgid ""
 "Select words from a list and execute commands.\n"
 "    \n"
@@ -5001,7 +5024,7 @@ msgstr ""
 "    Paluuarvo:\n"
 "    Viimeisen suoritetun komennon paluuarvo."
 
-#: builtins.c:1601
+#: builtins.c:1602
 msgid ""
 "Report time consumed by pipeline's execution.\n"
 "    \n"
@@ -5030,7 +5053,7 @@ msgstr ""
 "    Paluuarvo:\n"
 "    KOMENTOKETJUN paluuarvo."
 
-#: builtins.c:1618
+#: builtins.c:1619
 msgid ""
 "Execute commands based on pattern matching.\n"
 "    \n"
@@ -5049,7 +5072,7 @@ msgstr ""
 "    Paluuarvo:\n"
 "    Viimeisen suoritetun komennon paluuarvo."
 
-#: builtins.c:1630
+#: builtins.c:1631
 msgid ""
 "Execute commands based on conditional.\n"
 "    \n"
@@ -5083,12 +5106,14 @@ msgstr ""
 "    Paluuarvo:\n"
 "    Viimeisen suoritetun komennon paluuarvo."
 
-#: builtins.c:1647
+#: builtins.c:1648
+#, fuzzy
 msgid ""
 "Execute commands as long as a test succeeds.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `while' COMMANDS has an exit status of zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS "
+"has\n"
+"    an exit status of zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
@@ -5101,12 +5126,14 @@ msgstr ""
 "    Paluuarvo:\n"
 "    Viimeisen komennon paluuarvo."
 
-#: builtins.c:1659
+#: builtins.c:1660
+#, fuzzy
 msgid ""
 "Execute commands as long as a test does not succeed.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `until' COMMANDS has an exit status which is not zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS "
+"has\n"
+"    an exit status which is not zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
@@ -5119,7 +5146,7 @@ msgstr ""
 "    Paluuarvo:\n"
 "    Viimeisen suoritetun komennon paluuarvo."
 
-#: builtins.c:1671
+#: builtins.c:1672
 #, fuzzy
 msgid ""
 "Create a coprocess named NAME.\n"
@@ -5142,7 +5169,7 @@ msgstr ""
 "    Paluuarvo:\n"
 "    KOMENNON paluuarvo."
 
-#: builtins.c:1685
+#: builtins.c:1686
 msgid ""
 "Define shell function.\n"
 "    \n"
@@ -5165,7 +5192,7 @@ msgstr ""
 "    Paluuarvo:\n"
 "    Onnistuu, ellei NIMI ole kirjoitussuojattu."
 
-#: builtins.c:1699
+#: builtins.c:1700
 msgid ""
 "Group commands as a unit.\n"
 "    \n"
@@ -5184,7 +5211,7 @@ msgstr ""
 "    Paluuarvo:\n"
 "    Viimeisen suoritetun komennon paluuarvo."
 
-#: builtins.c:1711
+#: builtins.c:1712
 msgid ""
 "Resume job in foreground.\n"
 "    \n"
@@ -5210,7 +5237,7 @@ msgstr ""
 "    Paluuarvo:\n"
 "    Työn tila."
 
-#: builtins.c:1726
+#: builtins.c:1727
 #, fuzzy
 msgid ""
 "Evaluate arithmetic expression.\n"
@@ -5229,7 +5256,7 @@ msgstr ""
 "    Paluuarvo:\n"
 "    Palauttaa 1, jos LAUSEKKEEN arvo on 0; muuten palauttaa 0."
 
-#: builtins.c:1738
+#: builtins.c:1739
 msgid ""
 "Execute conditional command.\n"
 "    \n"
@@ -5283,7 +5310,7 @@ msgstr ""
 "    Paluuarvo:\n"
 "    0 tai 1 riippuen LAUSEKKEEN arvosta."
 
-#: builtins.c:1764
+#: builtins.c:1765
 msgid ""
 "Common shell variable names and usage.\n"
 "    \n"
@@ -5386,7 +5413,7 @@ msgstr ""
 "    HISTIGNORE\tKaksoispistein eroteltu lista mallineista, joita käytetään\n"
 "    \t\tpäätettäessä komentojen tallentamisesta historialistaan.\n"
 
-#: builtins.c:1821
+#: builtins.c:1822
 #, fuzzy
 msgid ""
 "Add directories to stack.\n"
@@ -5445,7 +5472,7 @@ msgstr ""
 "tai\n"
 "    hakemiston vaihtaminen epäonnistuu."
 
-#: builtins.c:1855
+#: builtins.c:1856
 #, fuzzy
 msgid ""
 "Remove directories from stack.\n"
@@ -5493,7 +5520,7 @@ msgstr ""
 "    Palauttaa onnistuneen paitsi jos on annettu virheellinen argumentti tai\n"
 "    hakemiston vaihto epäonnistuu."
 
-#: builtins.c:1885
+#: builtins.c:1886
 #, fuzzy
 msgid ""
 "Display directory stack.\n"
@@ -5548,7 +5575,7 @@ msgstr ""
 "    Palauttaa onnistuneen paitsi jos on annettu virheellinen valitsin\n"
 "    tai tapahtuu virhe."
 
-#: builtins.c:1916
+#: builtins.c:1917
 #, fuzzy
 msgid ""
 "Set and unset shell options.\n"
@@ -5586,7 +5613,7 @@ msgstr ""
 "    Palauttaa onnistuneen, mikäli VALITSIN on käytössä, epäonnistuu jos on\n"
 "    annettu virheellinen VALITSIN tai VALITSIN ei ole käytössä."
 
-#: builtins.c:1937
+#: builtins.c:1938
 #, fuzzy
 msgid ""
 "Formats and prints ARGUMENTS under control of the FORMAT.\n"
@@ -5610,6 +5637,8 @@ msgid ""
 "    \n"
 "      %b\texpand backslash escape sequences in the corresponding argument\n"
 "      %q\tquote the argument in a way that can be reused as shell input\n"
+"      %Q\tlike %q, but apply any precision to the unquoted argument before\n"
+"    \t\tquoting\n"
 "      %(fmt)T\toutput the date-time string resulting from using FMT as a "
 "format\n"
 "    \t        string for strftime(3)\n"
@@ -5646,7 +5675,7 @@ msgstr ""
 "    Palauttaa onnistuneen paitsi jos on annettu virheellinen valitsin tai\n"
 "    tapahtuu kirjoitus- tai sijoitusvirhe."
 
-#: builtins.c:1971
+#: builtins.c:1974
 #, fuzzy
 msgid ""
 "Specify how arguments are to be completed by Readline.\n"
@@ -5698,7 +5727,7 @@ msgstr ""
 "    Palauttaa onnistuneen paitsi jos on annettu virheellinen valitsin tai \n"
 "    tapahtuu virhe."
 
-#: builtins.c:2001
+#: builtins.c:2004
 msgid ""
 "Display possible completions depending on the options.\n"
 "    \n"
@@ -5721,7 +5750,7 @@ msgstr ""
 "    Palauttaa onnistuneen paitsi jos on annettu virheellinen valitsin tai\n"
 "    tapahtuu virhe."
 
-#: builtins.c:2016
+#: builtins.c:2019
 #, fuzzy
 msgid ""
 "Modify or display completion options.\n"
@@ -5776,7 +5805,7 @@ msgstr ""
 "    Palauttaa onnistuneen paitsi jos on annettu virheellinen valitsin tai\n"
 "    NIMELLE ei ole määritetty täydennysmääritystä."
 
-#: builtins.c:2047
+#: builtins.c:2050
 #, fuzzy
 msgid ""
 "Read lines from the standard input into an indexed array variable.\n"
@@ -5850,7 +5879,7 @@ msgstr ""
 "    tai TAULUKKO on kirjoitussuojattu."
 
 # Changed " characters into ”...
-#: builtins.c:2083
+#: builtins.c:2086
 msgid ""
 "Read lines from a file into an array variable.\n"
 "    \n"
@@ -5860,6 +5889,10 @@ msgstr ""
 "    \n"
 "    ”mapfile”:n synonyymi."
 
+#, c-format
+#~ msgid "%s: invalid associative array key"
+#~ msgstr "%s: virheellinen assosiatiivinen indeksi"
+
 #~ msgid ""
 #~ "Returns the context of the current subroutine call.\n"
 #~ "    \n"
index c093d8c0605a266ce579014ecb6fd1d77c33bb23..39d8520c920932198b421ac5af6716f073d85bf6 100644 (file)
Binary files a/po/fr.gmo and b/po/fr.gmo differ
index e2f758904aaf327250b60986dce19610d7b35667..2d503ed4cd1d75c310b984ac42a0133d0e3f171b 100644 (file)
--- a/po/fr.po
+++ b/po/fr.po
@@ -1,15 +1,15 @@
 # Messages français pour GNU concernant bash.
-# Copyright (C) 2020 Free Software Foundation, Inc.
+# Copyright (C) 2022 Free Software Foundation, Inc.
 # This file is distributed under the same license as the bash package.
 # Michel Robitaille <robitail@IRO.UMontreal.CA>, 2004
 # Christophe Combelles <ccomb@free.fr>, 2008, 2009, 2010, 2011
-# Frédéric Marchal <fmarchal@perso.be>, 2020
+# Frédéric Marchal <fmarchal@perso.be>, 2022
 msgid ""
 msgstr ""
-"Project-Id-Version: bash-5.1\n"
+"Project-Id-Version: bash-5.2-rc1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-11-28 12:51-0500\n"
-"PO-Revision-Date: 2020-12-11 14:47+0100\n"
+"POT-Creation-Date: 2022-01-11 14:50-0500\n"
+"PO-Revision-Date: 2022-06-19 10:44+0200\n"
 "Last-Translator: Frédéric Marchal <fmarchal@perso.be>\n"
 "Language-Team: French <traduc@traduc.org>\n"
 "Language: fr\n"
@@ -23,57 +23,52 @@ msgstr ""
 msgid "bad array subscript"
 msgstr "mauvais indice de tableau"
 
-#: arrayfunc.c:421 builtins/declare.def:638 variables.c:2274 variables.c:2300
-#: variables.c:3133
+#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268
+#: variables.c:3101
 #, c-format
 msgid "%s: removing nameref attribute"
 msgstr "%s: retire l'attribut nameref"
 
-#: arrayfunc.c:446 builtins/declare.def:851
+#: arrayfunc.c:496 builtins/declare.def:868
 #, c-format
 msgid "%s: cannot convert indexed to associative array"
 msgstr "%s : impossible de convertir un tableau indexé en associatif"
 
-#: arrayfunc.c:700
-#, c-format
-msgid "%s: invalid associative array key"
-msgstr "%s : clé non valable pour le tableau associatif"
-
-#: arrayfunc.c:702
+#: arrayfunc.c:777
 #, c-format
 msgid "%s: cannot assign to non-numeric index"
 msgstr "%s : impossible d'assigner à un index non numérique"
 
-#: arrayfunc.c:747
+#: arrayfunc.c:822
 #, c-format
 msgid "%s: %s: must use subscript when assigning associative array"
 msgstr "%s : %s : l'assignation d'un tableau associatif doit se faire avec un indice"
 
-#: bashhist.c:452
+#: bashhist.c:455
 #, c-format
 msgid "%s: cannot create: %s"
 msgstr "%s : impossible de créer : %s"
 
-#: bashline.c:4310
+#: bashline.c:4479
 msgid "bash_execute_unix_command: cannot find keymap for command"
 msgstr "bash_execute_unix_command : impossible de trouver le mappage clavier pour la commande"
 
-#: bashline.c:4459
+#: bashline.c:4637
 #, c-format
 msgid "%s: first non-whitespace character is not `\"'"
 msgstr "%s : le premier caractère non vide n'est pas « \" »"
 
-#: bashline.c:4488
+#: bashline.c:4666
 #, c-format
 msgid "no closing `%c' in %s"
 msgstr "pas de « %c » de fermeture dans %s"
 
-#: bashline.c:4519
+#: bashline.c:4697
 #, c-format
 msgid "%s: missing colon separator"
 msgstr "%s : virgule de séparation manquante"
 
-#: bashline.c:4555
+#: bashline.c:4733
 #, c-format
 msgid "`%s': cannot unbind in command keymap"
 msgstr "« %s » : impossible à délier dans la commande keymap"
@@ -93,7 +88,7 @@ msgstr "expansion des accolades : échec lors de l'allocation mémoire pour %u
 msgid "brace expansion: failed to allocate memory for `%s'"
 msgstr "expansion des accolades : échec de l'allocation mémoire pour « %s »"
 
-#: builtins/alias.def:131 variables.c:1844
+#: builtins/alias.def:131 variables.c:1817
 #, c-format
 msgid "`%s': invalid alias name"
 msgstr "« %s » : nom d'alias non valable"
@@ -164,7 +159,7 @@ msgstr ""
 msgid "HOME not set"
 msgstr "« HOME » non défini"
 
-#: builtins/cd.def:335 builtins/common.c:161 test.c:901
+#: builtins/cd.def:335 builtins/common.c:161 test.c:916
 msgid "too many arguments"
 msgstr "trop d'arguments"
 
@@ -191,7 +186,7 @@ msgstr "avertissement :"
 msgid "%s: usage: "
 msgstr "%s : utilisation :"
 
-#: builtins/common.c:193 shell.c:516 shell.c:844
+#: builtins/common.c:193 shell.c:524 shell.c:866
 #, c-format
 msgid "%s: option requires an argument"
 msgstr "%s : l'option nécessite un argument"
@@ -206,7 +201,7 @@ msgstr "%s : argument numérique nécessaire"
 msgid "%s: not found"
 msgstr "%s : non trouvé"
 
-#: builtins/common.c:216 shell.c:857
+#: builtins/common.c:216 shell.c:879
 #, c-format
 msgid "%s: invalid option"
 msgstr "%s : option non valable"
@@ -216,7 +211,7 @@ msgstr "%s : option non valable"
 msgid "%s: invalid option name"
 msgstr "%s : nom d'option non valable"
 
-#: builtins/common.c:230 execute_cmd.c:2373 general.c:368 general.c:373
+#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373
 #, c-format
 msgid "`%s': not a valid identifier"
 msgstr "« %s » : identifiant non valable"
@@ -229,7 +224,7 @@ msgstr "nombre octal non valable"
 msgid "invalid hex number"
 msgstr "nombre hexadécimal non valable"
 
-#: builtins/common.c:244 expr.c:1569
+#: builtins/common.c:244 expr.c:1574
 msgid "invalid number"
 msgstr "nombre non valable"
 
@@ -243,88 +238,93 @@ msgstr "%s : indication de signal non valable"
 msgid "`%s': not a pid or valid job spec"
 msgstr "« %s » : ce n'est pas un n° de processus ou une spécification de tâche valable"
 
-#: builtins/common.c:266 error.c:510
+#: builtins/common.c:266 error.c:536
 #, c-format
 msgid "%s: readonly variable"
 msgstr "%s : variable en lecture seule"
 
-#: builtins/common.c:274
+#: builtins/common.c:273
+#, c-format
+msgid "%s: cannot assign"
+msgstr "%s : impossible d'assigner"
+
+#: builtins/common.c:281
 #, c-format
 msgid "%s: %s out of range"
 msgstr "%s : %s hors plage"
 
-#: builtins/common.c:274 builtins/common.c:276
+#: builtins/common.c:281 builtins/common.c:283
 msgid "argument"
 msgstr "argument"
 
-#: builtins/common.c:276
+#: builtins/common.c:283
 #, c-format
 msgid "%s out of range"
 msgstr "%s hors plage"
 
-#: builtins/common.c:284
+#: builtins/common.c:291
 #, c-format
 msgid "%s: no such job"
 msgstr "%s : tâche inexistante"
 
-#: builtins/common.c:292
+#: builtins/common.c:299
 #, c-format
 msgid "%s: no job control"
 msgstr "%s : pas de contrôle de tâche"
 
-#: builtins/common.c:294
+#: builtins/common.c:301
 msgid "no job control"
 msgstr "pas de contrôle de tâche"
 
-#: builtins/common.c:304
+#: builtins/common.c:311
 #, c-format
 msgid "%s: restricted"
 msgstr "%s : restreint"
 
-#: builtins/common.c:306
+#: builtins/common.c:313
 msgid "restricted"
 msgstr "restreint"
 
-#: builtins/common.c:314
+#: builtins/common.c:321
 #, c-format
 msgid "%s: not a shell builtin"
 msgstr "%s : ceci n'est pas une primitive du shell"
 
-#: builtins/common.c:323
+#: builtins/common.c:330
 #, c-format
 msgid "write error: %s"
 msgstr "erreur d'écriture : %s"
 
-#: builtins/common.c:331
+#: builtins/common.c:338
 #, c-format
 msgid "error setting terminal attributes: %s"
 msgstr "erreur lors de la définition de l'attribut du terminal : %s"
 
-#: builtins/common.c:333
+#: builtins/common.c:340
 #, c-format
 msgid "error getting terminal attributes: %s"
 msgstr "erreur lors de la récupération de l'attribut du terminal : %s"
 
-#: builtins/common.c:635
+#: builtins/common.c:642
 #, c-format
 msgid "%s: error retrieving current directory: %s: %s\n"
 msgstr "%s : erreur de détermination du répertoire actuel : %s : %s\n"
 
-#: builtins/common.c:701 builtins/common.c:703
+#: builtins/common.c:708 builtins/common.c:710
 #, c-format
 msgid "%s: ambiguous job spec"
 msgstr "%s : spécification de tâche ambiguë"
 
-#: builtins/common.c:964
+#: builtins/common.c:971
 msgid "help not available in this version"
 msgstr "l'aide n'est pas disponible dans cette version"
 
-#: builtins/common.c:1008 builtins/set.def:953 variables.c:3839
+#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825
 #, c-format
 msgid "%s: cannot unset: readonly %s"
 msgstr "%s : « unset » impossible : %s est en lecture seule"
 
-#: builtins/common.c:1013 builtins/set.def:932 variables.c:3844
+#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830
 #, c-format
 msgid "%s: cannot unset"
 msgstr "%s : « unset » impossible"
@@ -334,108 +334,108 @@ msgstr "%s : « unset » impossible"
 msgid "%s: invalid action name"
 msgstr "%s : nom d'action non valable"
 
-#: builtins/complete.def:486 builtins/complete.def:634
-#: builtins/complete.def:865
+#: builtins/complete.def:486 builtins/complete.def:642
+#: builtins/complete.def:873
 #, c-format
 msgid "%s: no completion specification"
 msgstr "%s : pas d'indication de complètement"
 
-#: builtins/complete.def:688
+#: builtins/complete.def:696
 msgid "warning: -F option may not work as you expect"
 msgstr "avertissement : l'option « -F » peut fonctionner différemment de ce à quoi vous vous attendez"
 
-#: builtins/complete.def:690
+#: builtins/complete.def:698
 msgid "warning: -C option may not work as you expect"
 msgstr "avertissement : l'option « -C » peut fonctionner différemment de ce à quoi vous vous attendez"
 
-#: builtins/complete.def:838
+#: builtins/complete.def:846
 msgid "not currently executing completion function"
 msgstr "fonction de complétion actuellement non en cours d'exécution"
 
-#: builtins/declare.def:134
+#: builtins/declare.def:137
 msgid "can only be used in a function"
 msgstr "utilisable seulement dans une fonction"
 
-#: builtins/declare.def:363 builtins/declare.def:756
+#: builtins/declare.def:437
+msgid "cannot use `-f' to make functions"
+msgstr "« -f » ne peut pas être utilisé pour fabriquer des fonctions"
+
+#: builtins/declare.def:464 execute_cmd.c:6132
+#, c-format
+msgid "%s: readonly function"
+msgstr "%s : fonction en lecture seule"
+
+#: builtins/declare.def:521 builtins/declare.def:804
 #, c-format
 msgid "%s: reference variable cannot be an array"
 msgstr "%s : la variable de référence ne peut pas être un tableau"
 
-#: builtins/declare.def:374 variables.c:3385
+#: builtins/declare.def:532 variables.c:3359
 #, c-format
 msgid "%s: nameref variable self references not allowed"
 msgstr "%s : références bouclées sur la même variable interdites"
 
-#: builtins/declare.def:379 variables.c:2104 variables.c:3304 variables.c:3312
-#: variables.c:3382
+#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286
+#: variables.c:3356
 #, c-format
 msgid "%s: circular name reference"
 msgstr "%s : référence de nom circulaire"
 
-#: builtins/declare.def:384 builtins/declare.def:762 builtins/declare.def:773
+#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820
 #, c-format
 msgid "`%s': invalid variable name for name reference"
 msgstr "« %s » : nom de variable invalide pour une référence de nom"
 
-#: builtins/declare.def:514
-msgid "cannot use `-f' to make functions"
-msgstr "« -f » ne peut pas être utilisé pour fabriquer des fonctions"
-
-#: builtins/declare.def:526 execute_cmd.c:5986
-#, c-format
-msgid "%s: readonly function"
-msgstr "%s : fonction en lecture seule"
-
-#: builtins/declare.def:824
-#, c-format
-msgid "%s: quoted compound array assignment deprecated"
-msgstr "%s : l'assignation d'un tableau composé entre apostrophes est dépréciée"
-
-#: builtins/declare.def:838
+#: builtins/declare.def:856
 #, c-format
 msgid "%s: cannot destroy array variables in this way"
 msgstr "%s : impossible de détruire des variables tableaux de cette façon"
 
-#: builtins/declare.def:845 builtins/read.def:815
+#: builtins/declare.def:862 builtins/read.def:887
 #, c-format
 msgid "%s: cannot convert associative to indexed array"
 msgstr "%s : impossible de convertir un tableau indexé en tableau associatif"
 
-#: builtins/enable.def:143 builtins/enable.def:151
+#: builtins/declare.def:891
+#, c-format
+msgid "%s: quoted compound array assignment deprecated"
+msgstr "%s : l'assignation d'un tableau composé entre apostrophes est dépréciée"
+
+#: builtins/enable.def:145 builtins/enable.def:153
 msgid "dynamic loading not available"
 msgstr "chargement dynamique non disponible"
 
-#: builtins/enable.def:343
+#: builtins/enable.def:376
 #, c-format
 msgid "cannot open shared object %s: %s"
 msgstr "impossible d'ouvrir l'objet partagé %s : %s"
 
-#: builtins/enable.def:371
+#: builtins/enable.def:405
 #, c-format
 msgid "cannot find %s in shared object %s: %s"
 msgstr "impossible de trouver %s dans l'objet partagé %s : %s"
 
-#: builtins/enable.def:388
+#: builtins/enable.def:422
 #, c-format
 msgid "%s: dynamic builtin already loaded"
 msgstr "%s : la primitive dynamique a déjà été chargée"
 
-#: builtins/enable.def:392
+#: builtins/enable.def:426
 #, c-format
 msgid "load function for %s returns failure (%d): not loaded"
 msgstr "la fonction de chargement de %s retourne un échec (%d) : pas chargé"
 
-#: builtins/enable.def:517
+#: builtins/enable.def:551
 #, c-format
 msgid "%s: not dynamically loaded"
 msgstr "%s : non chargé dynamiquement"
 
-#: builtins/enable.def:543
+#: builtins/enable.def:577
 #, c-format
 msgid "%s: cannot delete: %s"
 msgstr "%s : impossible d'effacer : %s"
 
-#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5818
+#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959
 #, c-format
 msgid "%s: is a directory"
 msgstr "%s : ceci est un répertoire"
@@ -450,7 +450,7 @@ msgstr "%s : ceci n'est pas un fichier régulier"
 msgid "%s: file is too large"
 msgstr "%s : le fichier est trop grand"
 
-#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1647
+#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673
 #, c-format
 msgid "%s: cannot execute binary file"
 msgstr "%s : ne peut exécuter le fichier binaire"
@@ -545,12 +545,12 @@ msgstr ""
 msgid "no help topics match `%s'.  Try `help help' or `man -k %s' or `info %s'."
 msgstr "Aucune rubrique d'aide ne correspond à « %s ». Essayez « help help », « man -k %s » ou « info %s »."
 
-#: builtins/help.def:224
+#: builtins/help.def:223
 #, c-format
 msgid "%s: cannot open: %s"
 msgstr "%s : impossible d'ouvrir : %s"
 
-#: builtins/help.def:524
+#: builtins/help.def:523
 #, c-format
 msgid ""
 "These shell commands are defined internally.  Type `help' to see this list.\n"
@@ -570,21 +570,21 @@ msgstr ""
 "Une astérisque (*) à côté d'un nom signifie que la commande est désactivée.\n"
 "\n"
 
-#: builtins/history.def:155
+#: builtins/history.def:159
 msgid "cannot use more than one of -anrw"
 msgstr "impossible d'utiliser plus d'une option parmi « -anrw »"
 
-#: builtins/history.def:188 builtins/history.def:198 builtins/history.def:213
-#: builtins/history.def:230 builtins/history.def:242 builtins/history.def:249
+#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215
+#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247
 msgid "history position"
 msgstr "position dans l'historique"
 
-#: builtins/history.def:340
+#: builtins/history.def:338
 #, c-format
 msgid "%s: invalid timestamp"
 msgstr "%s : horodatage non valable"
 
-#: builtins/history.def:451
+#: builtins/history.def:449
 #, c-format
 msgid "%s: history expansion failed"
 msgstr "%s : l'expansion de l'historique a échoué"
@@ -607,78 +607,78 @@ msgstr "%s : les arguments doivent être des identifiants de tâche ou de proces
 msgid "Unknown error"
 msgstr "Erreur inconnue"
 
-#: builtins/let.def:97 builtins/let.def:122 expr.c:639 expr.c:657
+#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658
 msgid "expression expected"
 msgstr "une expression est attendue"
 
-#: builtins/mapfile.def:178
+#: builtins/mapfile.def:180
 #, c-format
 msgid "%s: not an indexed array"
 msgstr "%s : n'est pas un tableau indexé"
 
-#: builtins/mapfile.def:271 builtins/read.def:308
+#: builtins/mapfile.def:276 builtins/read.def:336
 #, c-format
 msgid "%s: invalid file descriptor specification"
 msgstr "%s : spécification de descripteur de fichier non valable"
 
-#: builtins/mapfile.def:279 builtins/read.def:315
+#: builtins/mapfile.def:284 builtins/read.def:343
 #, c-format
 msgid "%d: invalid file descriptor: %s"
 msgstr "%d : descripteur de fichier non valable : %s"
 
-#: builtins/mapfile.def:288 builtins/mapfile.def:326
+#: builtins/mapfile.def:293 builtins/mapfile.def:331
 #, c-format
 msgid "%s: invalid line count"
 msgstr "%s : nombre de lignes non valable"
 
-#: builtins/mapfile.def:299
+#: builtins/mapfile.def:304
 #, c-format
 msgid "%s: invalid array origin"
 msgstr "%s : origine de tableau non valable"
 
-#: builtins/mapfile.def:316
+#: builtins/mapfile.def:321
 #, c-format
 msgid "%s: invalid callback quantum"
 msgstr "%s : quantum de callback non valable"
 
-#: builtins/mapfile.def:349
+#: builtins/mapfile.def:354
 msgid "empty array variable name"
 msgstr "nom de variable tableau vide"
 
-#: builtins/mapfile.def:370
+#: builtins/mapfile.def:375
 msgid "array variable support required"
 msgstr "nécessité de prise en charge des variables tableaux"
 
-#: builtins/printf.def:419
+#: builtins/printf.def:430
 #, c-format
 msgid "`%s': missing format character"
 msgstr "« %s » : caractère de format manquant"
 
-#: builtins/printf.def:474
+#: builtins/printf.def:485
 #, c-format
 msgid "`%c': invalid time format specification"
 msgstr "« %c » : spécification de format d'heure incorrecte"
 
-#: builtins/printf.def:676
+#: builtins/printf.def:708
 #, c-format
 msgid "`%c': invalid format character"
 msgstr "« %c » : caractère de format non permis"
 
-#: builtins/printf.def:702
+#: builtins/printf.def:734
 #, c-format
 msgid "warning: %s: %s"
 msgstr "avertissement : %s: %s"
 
-#: builtins/printf.def:788
+#: builtins/printf.def:822
 #, c-format
 msgid "format parsing problem: %s"
 msgstr "problème d'analyse du format : %s"
 
-#: builtins/printf.def:885
+#: builtins/printf.def:919
 msgid "missing hex digit for \\x"
 msgstr "chiffre hexadécimal manquant pour \\x"
 
-#: builtins/printf.def:900
+#: builtins/printf.def:934
 #, c-format
 msgid "missing unicode digit for \\%c"
 msgstr "chiffre unicode manquant pour \\%c"
@@ -828,12 +828,12 @@ msgstr ""
 "    \n"
 "    Vous pouvez voir la pile des répertoires avec la commande « dirs »."
 
-#: builtins/read.def:280
+#: builtins/read.def:308
 #, c-format
 msgid "%s: invalid timeout specification"
 msgstr "%s : spécification de délai d'expiration non valable"
 
-#: builtins/read.def:755
+#: builtins/read.def:827
 #, c-format
 msgid "read error: %d: %s"
 msgstr "erreur de lecture : %d : %s"
@@ -846,7 +846,7 @@ msgstr "« return » n'est possible que depuis une fonction ou depuis un scrip
 msgid "cannot simultaneously unset a function and a variable"
 msgstr "« unset » ne peut pas s'appliquer simultanément à une fonction et à une variable"
 
-#: builtins/set.def:966
+#: builtins/set.def:969
 #, c-format
 msgid "%s: not an array variable"
 msgstr "%s : n'est pas une variable tableau"
@@ -865,11 +865,11 @@ msgstr "%s : impossible d'exporter"
 msgid "shift count"
 msgstr "nombre de « shift »"
 
-#: builtins/shopt.def:310
+#: builtins/shopt.def:323
 msgid "cannot set and unset shell options simultaneously"
 msgstr "les options du shell ne peuvent pas être simultanément activées et désactivées"
 
-#: builtins/shopt.def:428
+#: builtins/shopt.def:444
 #, c-format
 msgid "%s: invalid shell option name"
 msgstr "%s : nom d'option du shell non valable"
@@ -936,16 +936,16 @@ msgstr "%s : argument de limite non valable"
 msgid "`%c': bad command"
 msgstr "« %c » : mauvaise commande"
 
-#: builtins/ulimit.def:455
+#: builtins/ulimit.def:464
 #, c-format
 msgid "%s: cannot get limit: %s"
 msgstr "%s : impossible d'obtenir la limite : %s"
 
-#: builtins/ulimit.def:481
+#: builtins/ulimit.def:490
 msgid "limit"
 msgstr "limite"
 
-#: builtins/ulimit.def:493 builtins/ulimit.def:793
+#: builtins/ulimit.def:502 builtins/ulimit.def:802
 #, c-format
 msgid "%s: cannot modify limit: %s"
 msgstr "%s : impossible de modifier la limite : %s"
@@ -964,7 +964,7 @@ msgstr "« %c » : opérateur de mode symbolique non valable"
 msgid "`%c': invalid symbolic mode character"
 msgstr "« %c » : caractère de mode symbolique non valable"
 
-#: error.c:89 error.c:347 error.c:349 error.c:351
+#: error.c:89 error.c:373 error.c:375 error.c:377
 msgid " line "
 msgstr " ligne "
 
@@ -982,98 +982,108 @@ msgstr "Annulation…"
 #: error.c:287
 #, c-format
 msgid "INFORM: "
-msgstr "INFORM: "
+msgstr "INFORM : "
+
+#: error.c:310
+#, c-format
+msgid "DEBUG warning: "
+msgstr "avertissement de DÉBOGAGE :"
 
-#: error.c:462
+#: error.c:488
 msgid "unknown command error"
 msgstr "erreur de commande inconnue"
 
-#: error.c:463
+#: error.c:489
 msgid "bad command type"
 msgstr "mauvais type de commande"
 
-#: error.c:464
+#: error.c:490
 msgid "bad connector"
 msgstr "mauvais connecteur"
 
-#: error.c:465
+#: error.c:491
 msgid "bad jump"
 msgstr "mauvais saut"
 
-#: error.c:503
+#: error.c:529
 #, c-format
 msgid "%s: unbound variable"
 msgstr "%s : variable sans liaison"
 
-#: eval.c:242
+#: eval.c:243
 msgid "\atimed out waiting for input: auto-logout\n"
 msgstr "\aattente de données expirée : déconnexion automatique\n"
 
-#: execute_cmd.c:537
+#: execute_cmd.c:555
 #, c-format
 msgid "cannot redirect standard input from /dev/null: %s"
 msgstr "l'entrée standard ne peut pas être redirigée depuis /dev/null : %s"
 
-#: execute_cmd.c:1297
+#: execute_cmd.c:1317
 #, c-format
 msgid "TIMEFORMAT: `%c': invalid format character"
 msgstr "TIMEFORMAT : « %c » : caractère de format non valable"
 
-#: execute_cmd.c:2362
+#: execute_cmd.c:2391
 #, c-format
 msgid "execute_coproc: coproc [%d:%s] still exists"
 msgstr "execute_coproc: coproc [%d:%s] existe encore"
 
-#: execute_cmd.c:2486
+#: execute_cmd.c:2524
 msgid "pipe error"
 msgstr "erreur de tube"
 
-#: execute_cmd.c:4793
+#: execute_cmd.c:4923
 #, c-format
 msgid "eval: maximum eval nesting level exceeded (%d)"
 msgstr "eval : dépassement de la profondeur maximum d'imbrication d'évaluations (%d)"
 
-#: execute_cmd.c:4805
+#: execute_cmd.c:4935
 #, c-format
 msgid "%s: maximum source nesting level exceeded (%d)"
 msgstr "%s : dépassement de la profondeur maximum d'imbrication de sources (%d)"
 
-#: execute_cmd.c:4913
+#: execute_cmd.c:5043
 #, c-format
 msgid "%s: maximum function nesting level exceeded (%d)"
 msgstr "%s : dépassement de la profondeur maximum d'imbrication de fonctions (%d)"
 
-#: execute_cmd.c:5467
+#: execute_cmd.c:5598
 #, c-format
 msgid "%s: restricted: cannot specify `/' in command names"
-msgstr "%s : restriction : « / » ne peut pas être spécifié dans un nom de commande"
+msgstr "%s : restriction : « / » ne peut pas être spécifié dans un nom de commande"
 
-#: execute_cmd.c:5574
+#: execute_cmd.c:5715
 #, c-format
 msgid "%s: command not found"
-msgstr "%s : commande introuvable"
+msgstr "%s : commande introuvable"
 
-#: execute_cmd.c:5816
+#: execute_cmd.c:5957
 #, c-format
 msgid "%s: %s"
-msgstr "%s : %s"
+msgstr "%s : %s"
+
+#: execute_cmd.c:5975
+#, c-format
+msgid "%s: cannot execute: required file not found"
+msgstr "%s : ne peut exécuter : le fichier requis n'a pas été trouvé"
 
-#: execute_cmd.c:5854
+#: execute_cmd.c:6000
 #, c-format
 msgid "%s: %s: bad interpreter"
-msgstr "%s : %s : mauvais interpréteur"
+msgstr "%s : %s : mauvais interpréteur"
 
-#: execute_cmd.c:5891
+#: execute_cmd.c:6037
 #, c-format
 msgid "%s: cannot execute binary file: %s"
-msgstr "%s : impossible d'exécuter le fichier binaire : %s"
+msgstr "%s : impossible d'exécuter le fichier binaire : %s"
 
-#: execute_cmd.c:5977
+#: execute_cmd.c:6123
 #, c-format
 msgid "`%s': is a special builtin"
 msgstr "« %s » : est une primitive spéciale"
 
-#: execute_cmd.c:6029
+#: execute_cmd.c:6175
 #, c-format
 msgid "cannot duplicate fd %d to fd %d"
 msgstr "impossible de dupliquer le fd %d vers le fd %d"
@@ -1086,68 +1096,68 @@ msgstr "dépassement du niveau de récursivité dans l'expression"
 msgid "recursion stack underflow"
 msgstr "débordement négatif de la pile de récursivité"
 
-#: expr.c:477
+#: expr.c:478
 msgid "syntax error in expression"
 msgstr "erreur de syntaxe dans l'expression"
 
-#: expr.c:521
+#: expr.c:522
 msgid "attempted assignment to non-variable"
 msgstr "tentative d'affectation à une non-variable"
 
-#: expr.c:530
+#: expr.c:531
 msgid "syntax error in variable assignment"
 msgstr "erreur de syntaxe dans l'affectation d'une variable"
 
-#: expr.c:544 expr.c:911
+#: expr.c:545 expr.c:912
 msgid "division by 0"
 msgstr "division par 0"
 
-#: expr.c:592
+#: expr.c:593
 msgid "bug: bad expassign token"
 msgstr "bogue : mauvais symbole pour expassign"
 
-#: expr.c:646
+#: expr.c:647
 msgid "`:' expected for conditional expression"
 msgstr "« : » attendu pour une expression conditionnelle"
 
-#: expr.c:972
+#: expr.c:973
 msgid "exponent less than 0"
 msgstr "exposant négatif"
 
-#: expr.c:1029
+#: expr.c:1030
 msgid "identifier expected after pre-increment or pre-decrement"
 msgstr "identifiant attendu après un pré-incrément ou un pré-décrément"
 
-#: expr.c:1056
+#: expr.c:1057
 msgid "missing `)'"
 msgstr "« ) » manquante"
 
-#: expr.c:1107 expr.c:1487
+#: expr.c:1108 expr.c:1492
 msgid "syntax error: operand expected"
 msgstr "erreur de syntaxe : opérande attendu"
 
-#: expr.c:1489
+#: expr.c:1494
 msgid "syntax error: invalid arithmetic operator"
 msgstr "erreur de syntaxe : opérateur arithmétique non valable"
 
-#: expr.c:1513
+#: expr.c:1518
 #, c-format
 msgid "%s%s%s: %s (error token is \"%s\")"
 msgstr "%s%s%s : %s (le symbole erroné est « %s »)"
 
-#: expr.c:1573
+#: expr.c:1578
 msgid "invalid arithmetic base"
 msgstr "base arithmétique non valable"
 
-#: expr.c:1582
+#: expr.c:1587
 msgid "invalid integer constant"
 msgstr "constante entière invalide"
 
-#: expr.c:1598
+#: expr.c:1603
 msgid "value too great for base"
 msgstr "valeur trop grande pour la base"
 
-#: expr.c:1647
+#: expr.c:1652
 #, c-format
 msgid "%s: expression error\n"
 msgstr "%s : erreur d'expression\n"
@@ -1156,7 +1166,7 @@ msgstr "%s : erreur d'expression\n"
 msgid "getcwd: cannot access parent directories"
 msgstr "getcwd : ne peut accéder aux répertoires parents"
 
-#: input.c:99 subst.c:6069
+#: input.c:99 subst.c:6208
 #, c-format
 msgid "cannot reset nodelay mode for fd %d"
 msgstr "impossible de réinitialiser le mode « nodelay » pour le fd %d"
@@ -1175,167 +1185,167 @@ msgstr "save_bash_input : le tampon existe déjà pour le nouveau fd %d"
 msgid "start_pipeline: pgrp pipe"
 msgstr "start_pipeline : pgrp pipe"
 
-#: jobs.c:906
+#: jobs.c:907
 #, c-format
 msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
 
-#: jobs.c:959
+#: jobs.c:960
 #, c-format
 msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
 
-#: jobs.c:1283
+#: jobs.c:1279
 #, c-format
 msgid "forked pid %d appears in running job %d"
 msgstr "le processus cloné n°%d apparaît dans la tâche en fonctionnement %d"
 
-#: jobs.c:1402
+#: jobs.c:1397
 #, c-format
 msgid "deleting stopped job %d with process group %ld"
 msgstr "suppression de la tâche stoppée %d avec le groupe de processus %ld"
 
-#: jobs.c:1511
+#: jobs.c:1502
 #, c-format
 msgid "add_process: pid %5ld (%s) marked as still alive"
 msgstr "add_process : pid %5ld (%s) signalé toujours en vie"
 
-#: jobs.c:1850
+#: jobs.c:1839
 #, c-format
 msgid "describe_pid: %ld: no such pid"
 msgstr "describe_pid : %ld : n° de processus inexistant"
 
-#: jobs.c:1865
+#: jobs.c:1854
 #, c-format
 msgid "Signal %d"
 msgstr "Signal %d"
 
-#: jobs.c:1879 jobs.c:1905
+#: jobs.c:1868 jobs.c:1894
 msgid "Done"
 msgstr "Fini"
 
-#: jobs.c:1884 siglist.c:122
+#: jobs.c:1873 siglist.c:123
 msgid "Stopped"
 msgstr "Stoppé"
 
-#: jobs.c:1888
+#: jobs.c:1877
 #, c-format
 msgid "Stopped(%s)"
 msgstr "Stoppé(%s)"
 
-#: jobs.c:1892
+#: jobs.c:1881
 msgid "Running"
 msgstr "En cours d'exécution"
 
-#: jobs.c:1909
+#: jobs.c:1898
 #, c-format
 msgid "Done(%d)"
 msgstr "Fini(%d)"
 
-#: jobs.c:1911
+#: jobs.c:1900
 #, c-format
 msgid "Exit %d"
 msgstr "Termine %d"
 
-#: jobs.c:1914
+#: jobs.c:1903
 msgid "Unknown status"
 msgstr "État inconnu"
 
-#: jobs.c:2001
+#: jobs.c:1990
 #, c-format
 msgid "(core dumped) "
 msgstr "(core dumped)"
 
-#: jobs.c:2020
+#: jobs.c:2009
 #, c-format
 msgid "  (wd: %s)"
 msgstr "  (wd : %s)"
 
-#: jobs.c:2259
+#: jobs.c:2250
 #, c-format
 msgid "child setpgid (%ld to %ld)"
 msgstr "fils setpgid (%ld à %ld)"
 
-#: jobs.c:2617 nojobs.c:664
+#: jobs.c:2608 nojobs.c:666
 #, c-format
 msgid "wait: pid %ld is not a child of this shell"
 msgstr "wait : le processus n°%ld n'est pas un fils de ce shell"
 
-#: jobs.c:2893
+#: jobs.c:2884
 #, c-format
 msgid "wait_for: No record of process %ld"
 msgstr "wait_for : Aucun enregistrement du processus n°%ld"
 
-#: jobs.c:3236
+#: jobs.c:3223
 #, c-format
 msgid "wait_for_job: job %d is stopped"
 msgstr "wait_for_job : la tâche %d est stoppée"
 
-#: jobs.c:3564
+#: jobs.c:3551
 #, c-format
 msgid "%s: no current jobs"
 msgstr "%s : pas de tâche actuelle"
 
-#: jobs.c:3571
+#: jobs.c:3558
 #, c-format
 msgid "%s: job has terminated"
 msgstr "%s : la tâche s'est terminée"
 
-#: jobs.c:3580
+#: jobs.c:3567
 #, c-format
 msgid "%s: job %d already in background"
 msgstr "%s : la tâche %d est déjà en arrière plan"
 
-#: jobs.c:3806
+#: jobs.c:3793
 msgid "waitchld: turning on WNOHANG to avoid indefinite block"
 msgstr "waitchld : activation de WNOHANG pour éviter un blocage définitif"
 
-#: jobs.c:4320
+#: jobs.c:4307
 #, c-format
 msgid "%s: line %d: "
 msgstr "%s : ligne %d : "
 
-#: jobs.c:4334 nojobs.c:919
+#: jobs.c:4321 nojobs.c:921
 #, c-format
 msgid " (core dumped)"
 msgstr " (core dumped)"
 
-#: jobs.c:4346 jobs.c:4359
+#: jobs.c:4333 jobs.c:4346
 #, c-format
 msgid "(wd now: %s)\n"
 msgstr "(maintenant, wd : %s)\n"
 
-#: jobs.c:4391
+#: jobs.c:4378
 msgid "initialize_job_control: getpgrp failed"
 msgstr "initialize_job_control : getpgrp a échoué"
 
-#: jobs.c:4447
+#: jobs.c:4434
 msgid "initialize_job_control: no job control in background"
 msgstr "initialize_job_control : pas de contrôle de tâche en tâche de fond"
 
-#: jobs.c:4463
+#: jobs.c:4450
 msgid "initialize_job_control: line discipline"
 msgstr "initialize_job_control : discipline de ligne"
 
-#: jobs.c:4473
+#: jobs.c:4460
 msgid "initialize_job_control: setpgid"
 msgstr "initialize_job_control : setpgid"
 
-#: jobs.c:4494 jobs.c:4503
+#: jobs.c:4481 jobs.c:4490
 #, c-format
 msgid "cannot set terminal process group (%d)"
 msgstr "impossible de régler le groupe de processus du terminal (%d)"
 
-#: jobs.c:4508
+#: jobs.c:4495
 msgid "no job control in this shell"
 msgstr "pas de contrôle de tâche dans ce shell"
 
-#: lib/malloc/malloc.c:353
+#: lib/malloc/malloc.c:367
 #, c-format
 msgid "malloc: failed assertion: %s\n"
 msgstr "malloc : échec de l'assertion : %s\n"
 
-#: lib/malloc/malloc.c:369
+#: lib/malloc/malloc.c:383
 #, c-format
 msgid ""
 "\r\n"
@@ -1344,47 +1354,47 @@ msgstr ""
 "\r\n"
 "malloc : %s:%d : assertion manquée\r\n"
 
-#: lib/malloc/malloc.c:370 lib/malloc/malloc.c:933
+#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941
 msgid "unknown"
 msgstr "inconnu"
 
-#: lib/malloc/malloc.c:882
+#: lib/malloc/malloc.c:892
 msgid "malloc: block on free list clobbered"
 msgstr "malloc : bloc écrasé sur liste libre"
 
-#: lib/malloc/malloc.c:972
+#: lib/malloc/malloc.c:980
 msgid "free: called with already freed block argument"
 msgstr "free : appelé avec un bloc déjà libéré comme argument"
 
-#: lib/malloc/malloc.c:975
+#: lib/malloc/malloc.c:983
 msgid "free: called with unallocated block argument"
 msgstr "free : appelé avec un bloc non alloué comme argument"
 
-#: lib/malloc/malloc.c:994
+#: lib/malloc/malloc.c:1001
 msgid "free: underflow detected; mh_nbytes out of range"
 msgstr "free : débordement négatif détecté ; « mh_nbytes » est hors plage"
 
-#: lib/malloc/malloc.c:1001
+#: lib/malloc/malloc.c:1007
 msgid "free: underflow detected; magic8 corrupted"
 msgstr "free : débordement négatif détecté ; « magic8 » est hors plage"
 
-#: lib/malloc/malloc.c:1009
+#: lib/malloc/malloc.c:1014
 msgid "free: start and end chunk sizes differ"
 msgstr "free : les tailles de fragment au début et à la fin sont différentes"
 
-#: lib/malloc/malloc.c:1119
+#: lib/malloc/malloc.c:1176
 msgid "realloc: called with unallocated block argument"
 msgstr "realloc : appelé avec un bloc non alloué comme argument"
 
-#: lib/malloc/malloc.c:1134
+#: lib/malloc/malloc.c:1191
 msgid "realloc: underflow detected; mh_nbytes out of range"
 msgstr "realloc : débordement négatif détecté ; « mh_nbytes » est hors plage"
 
-#: lib/malloc/malloc.c:1141
+#: lib/malloc/malloc.c:1197
 msgid "realloc: underflow detected; magic8 corrupted"
 msgstr "realloc : débordement négatif détecté ; « magic8 » est hors plage"
 
-#: lib/malloc/malloc.c:1150
+#: lib/malloc/malloc.c:1205
 msgid "realloc: start and end chunk sizes differ"
 msgstr "realloc : les tailles de fragment au début et à la fin sont différentes"
 
@@ -1426,22 +1436,22 @@ msgstr "%s : mauvaise spécification de chemin réseau"
 msgid "network operations not supported"
 msgstr "opérations sur le réseau non prises en charge"
 
-#: locale.c:217
+#: locale.c:219
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s)"
 msgstr "setlocale : LC_ALL : impossible de changer le paramètre de langue (%s)"
 
-#: locale.c:219
+#: locale.c:221
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s): %s"
 msgstr "setlocale : LC_ALL :  impossible de changer le paramètre de langue (%s) : %s"
 
-#: locale.c:292
+#: locale.c:294
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s)"
 msgstr "setlocale : %s : impossible de changer le paramètre de langue (%s)"
 
-#: locale.c:294
+#: locale.c:296
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s): %s"
 msgstr "setlocale : %s : impossible de changer le paramètre de langue (%s) : %s"
@@ -1459,136 +1469,136 @@ msgstr "Vous avez du nouveau courrier dans $_"
 msgid "The mail in %s has been read\n"
 msgstr "Le courrier dans %s a été lu\n"
 
-#: make_cmd.c:317
+#: make_cmd.c:314
 msgid "syntax error: arithmetic expression required"
 msgstr "erreur de syntaxe : expression arithmétique nécessaire"
 
-#: make_cmd.c:319
+#: make_cmd.c:316
 msgid "syntax error: `;' unexpected"
 msgstr "erreur de syntaxe : « ; » non attendu"
 
-#: make_cmd.c:320
+#: make_cmd.c:317
 #, c-format
 msgid "syntax error: `((%s))'"
 msgstr "erreur de syntaxe : « ((%s)) »"
 
-#: make_cmd.c:572
+#: make_cmd.c:569
 #, c-format
 msgid "make_here_document: bad instruction type %d"
 msgstr "make_here_document : le type d'instruction %d est incorrect"
 
-#: make_cmd.c:657
+#: make_cmd.c:668
 #, c-format
 msgid "here-document at line %d delimited by end-of-file (wanted `%s')"
 msgstr "« here-document » à la ligne %d délimité par la fin du fichier (au lieu de « %s »)"
 
-#: make_cmd.c:756
+#: make_cmd.c:769
 #, c-format
 msgid "make_redirection: redirection instruction `%d' out of range"
 msgstr "make_redirection : l'instruction de redirection « %d » est hors plage"
 
-#: parse.y:2393
+#: parse.y:2428
 #, c-format
 msgid "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line truncated"
 msgstr "shell_getc: shell_input_line_size (%zu) dépasse SIZE_MAX (%lu): ligne tronquée"
 
-#: parse.y:2826
+#: parse.y:2921
 msgid "maximum here-document count exceeded"
 msgstr "nombre maximum de documents en ligne (« here-document ») dépassé"
 
-#: parse.y:3581 parse.y:3957 parse.y:4556
+#: parse.y:3684 parse.y:4244 parse.y:6148
 #, c-format
 msgid "unexpected EOF while looking for matching `%c'"
 msgstr "fin de fichier (EOF) prématurée lors de la recherche du « %c » correspondant"
 
-#: parse.y:4696
+#: parse.y:4452
 msgid "unexpected EOF while looking for `]]'"
 msgstr "fin de fichier (EOF) prématurée lors de la recherche de « ]] »"
 
-#: parse.y:4701
+#: parse.y:4457
 #, c-format
 msgid "syntax error in conditional expression: unexpected token `%s'"
 msgstr "erreur de syntaxe dans une expression conditionnelle : symbole « %s » inattendu"
 
-#: parse.y:4705
+#: parse.y:4461
 msgid "syntax error in conditional expression"
 msgstr "erreur de syntaxe dans une expression conditionnelle"
 
-#: parse.y:4783
+#: parse.y:4539
 #, c-format
 msgid "unexpected token `%s', expected `)'"
 msgstr "symbole inattendu « %s » au lieu de « ) »"
 
-#: parse.y:4787
+#: parse.y:4543
 msgid "expected `)'"
 msgstr "« ) » attendu"
 
-#: parse.y:4815
+#: parse.y:4571
 #, c-format
 msgid "unexpected argument `%s' to conditional unary operator"
 msgstr "argument inattendu « %s » pour l'opérateur conditionnel à un argument"
 
-#: parse.y:4819
+#: parse.y:4575
 msgid "unexpected argument to conditional unary operator"
 msgstr "argument inattendu pour l'opérateur conditionnel à un argument"
 
-#: parse.y:4865
+#: parse.y:4621
 #, c-format
 msgid "unexpected token `%s', conditional binary operator expected"
 msgstr "symbole « %s » trouvé à la place d'un opérateur binaire conditionnel"
 
-#: parse.y:4869
+#: parse.y:4625
 msgid "conditional binary operator expected"
 msgstr "opérateur binaire conditionnel attendu"
 
-#: parse.y:4891
+#: parse.y:4647
 #, c-format
 msgid "unexpected argument `%s' to conditional binary operator"
 msgstr "argument « %s » inattendu pour l'opérateur binaire conditionnel"
 
-#: parse.y:4895
+#: parse.y:4651
 msgid "unexpected argument to conditional binary operator"
 msgstr "argument inattendu pour l'opérateur binaire conditionnel"
 
-#: parse.y:4906
+#: parse.y:4662
 #, c-format
 msgid "unexpected token `%c' in conditional command"
 msgstr "symbole « %c » inattendu dans la commande conditionnelle"
 
-#: parse.y:4909
+#: parse.y:4665
 #, c-format
 msgid "unexpected token `%s' in conditional command"
 msgstr "symbole « %s » inattendu dans la commande conditionnelle"
 
-#: parse.y:4913
+#: parse.y:4669
 #, c-format
 msgid "unexpected token %d in conditional command"
 msgstr "symbole « %d » inattendu dans la commande conditionnelle"
 
-#: parse.y:6336
+#: parse.y:6118
 #, c-format
 msgid "syntax error near unexpected token `%s'"
 msgstr "erreur de syntaxe près du symbole inattendu « %s »"
 
-#: parse.y:6355
+#: parse.y:6137
 #, c-format
 msgid "syntax error near `%s'"
 msgstr "erreur de syntaxe près de « %s »"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error: unexpected end of file"
 msgstr "erreur de syntaxe : fin de fichier prématurée"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error"
 msgstr "erreur de syntaxe"
 
-#: parse.y:6428
+#: parse.y:6216
 #, c-format
 msgid "Use \"%s\" to leave the shell.\n"
 msgstr "Utilisez « %s » pour quitter le shell.\n"
 
-#: parse.y:6602
+#: parse.y:6394
 msgid "unexpected EOF while looking for matching `)'"
 msgstr "fin de fichier (EOF) prématurée lors de la recherche d'une « ) » correspondante"
 
@@ -1626,94 +1636,94 @@ msgstr "xtrace_set : pointeur de fichier NULL"
 msgid "xtrace fd (%d) != fileno xtrace fp (%d)"
 msgstr "xtrace fd (%d) != fileno xtrace fp (%d)"
 
-#: print_cmd.c:1540
+#: print_cmd.c:1545
 #, c-format
 msgid "cprintf: `%c': invalid format character"
 msgstr "cprintf : « %c » : caractère de format invalide"
 
-#: redir.c:149 redir.c:197
+#: redir.c:150 redir.c:198
 msgid "file descriptor out of range"
 msgstr "descripteur de fichier hors plage"
 
-#: redir.c:204
+#: redir.c:205
 #, c-format
 msgid "%s: ambiguous redirect"
 msgstr "%s : redirection ambiguë"
 
-#: redir.c:208
+#: redir.c:209
 #, c-format
 msgid "%s: cannot overwrite existing file"
 msgstr "%s : impossible d'écraser le fichier existant"
 
-#: redir.c:213
+#: redir.c:214
 #, c-format
 msgid "%s: restricted: cannot redirect output"
 msgstr "%s : restreint : impossible de rediriger la sortie"
 
-#: redir.c:218
+#: redir.c:219
 #, c-format
 msgid "cannot create temp file for here-document: %s"
 msgstr "impossible de créer un fichier temporaire pour le « here-document » : %s"
 
-#: redir.c:222
+#: redir.c:223
 #, c-format
 msgid "%s: cannot assign fd to variable"
 msgstr "%s : impossible d'affecter le descripteur de fichier à la variable"
 
-#: redir.c:649
+#: redir.c:650
 msgid "/dev/(tcp|udp)/host/port not supported without networking"
 msgstr "/dev/(tcp|udp)/host/port non pris en charge sans réseau"
 
-#: redir.c:938 redir.c:1053 redir.c:1114 redir.c:1284
+#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303
 msgid "redirection error: cannot duplicate fd"
 msgstr "erreur de redirection : impossible de dupliquer le descripteur de fichier"
 
-#: shell.c:347
+#: shell.c:353
 msgid "could not find /tmp, please create!"
 msgstr "« /tmp » introuvable, veuillez le créer !"
 
-#: shell.c:351
+#: shell.c:357
 msgid "/tmp must be a valid directory name"
 msgstr "« /tmp » doit être un nom de répertoire valable"
 
-#: shell.c:804
+#: shell.c:826
 msgid "pretty-printing mode ignored in interactive shells"
 msgstr "le mode d'affichage amélioré est ignoré dans les shells interactifs"
 
-#: shell.c:948
+#: shell.c:972
 #, c-format
 msgid "%c%c: invalid option"
 msgstr "%c%c : option non valable"
 
-#: shell.c:1319
+#: shell.c:1343
 #, c-format
 msgid "cannot set uid to %d: effective uid %d"
 msgstr "impossible de changer le uid en %d : uid effectif %d"
 
-#: shell.c:1330
+#: shell.c:1354
 #, c-format
 msgid "cannot set gid to %d: effective gid %d"
 msgstr "impossible de changer le gid en %d: gid effectif %d"
 
-#: shell.c:1518
+#: shell.c:1544
 msgid "cannot start debugger; debugging mode disabled"
 msgstr "impossible de démarrer le débogueur: mode déboguage désactivé"
 
-#: shell.c:1632
+#: shell.c:1658
 #, c-format
 msgid "%s: Is a directory"
 msgstr "%s : Ceci est un répertoire"
 
-#: shell.c:1881
+#: shell.c:1907
 msgid "I have no name!"
 msgstr "Je n'ai pas de nom !"
 
-#: shell.c:2035
+#: shell.c:2061
 #, c-format
 msgid "GNU bash, version %s-(%s)\n"
 msgstr "GNU bash, version %s-(%s)\n"
 
-#: shell.c:2036
+#: shell.c:2062
 #, c-format
 msgid ""
 "Usage:\t%s [GNU long option] [option] ...\n"
@@ -1722,317 +1732,317 @@ msgstr ""
 "Utilisation :\t%s [option longue GNU] [option] ...\n"
 "\t%s [option longue GNU] [option] fichier-script ...\n"
 
-#: shell.c:2038
+#: shell.c:2064
 msgid "GNU long options:\n"
 msgstr "Options longues GNU :\n"
 
-#: shell.c:2042
+#: shell.c:2068
 msgid "Shell options:\n"
 msgstr "Options du shell :\n"
 
-#: shell.c:2043
+#: shell.c:2069
 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n"
 msgstr "\t-ilrsD ou -c commande ou -O shopt_option\t\t(invocation seulement)\n"
 
-#: shell.c:2062
+#: shell.c:2088
 #, c-format
 msgid "\t-%s or -o option\n"
 msgstr "\t-%s ou -o option\n"
 
-#: shell.c:2068
+#: shell.c:2094
 #, c-format
 msgid "Type `%s -c \"help set\"' for more information about shell options.\n"
 msgstr "Pour en savoir plus sur les options du shell, saisissez « %s -c \"help set\" ».\n"
 
-#: shell.c:2069
+#: shell.c:2095
 #, c-format
 msgid "Type `%s -c help' for more information about shell builtin commands.\n"
 msgstr "Pour en savoir plus sur les primitives du shell, saisissez « %s -c help ».\n"
 
-#: shell.c:2070
+#: shell.c:2096
 #, c-format
 msgid "Use the `bashbug' command to report bugs.\n"
 msgstr "Utilisez la commande « bashbug » pour faire un rapport de bogue.\n"
 
-#: shell.c:2072
+#: shell.c:2098
 #, c-format
 msgid "bash home page: <http://www.gnu.org/software/bash>\n"
 msgstr "page d'accueil de bash : <http://www.gnu.org/software/bash>\n"
 
-#: shell.c:2073
+#: shell.c:2099
 #, c-format
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 msgstr "Aide générale sur l'utilisation de logiciels GNU : <http://www.gnu.org/gethelp/>\n"
 
-#: sig.c:757
+#: sig.c:765
 #, c-format
 msgid "sigprocmask: %d: invalid operation"
 msgstr "sigprocmask : %d : opération non valable"
 
-#: siglist.c:47
+#: siglist.c:48
 msgid "Bogus signal"
 msgstr "Signal falsifié"
 
-#: siglist.c:50
+#: siglist.c:51
 msgid "Hangup"
 msgstr "Raccroche"
 
-#: siglist.c:54
+#: siglist.c:55
 msgid "Interrupt"
 msgstr "Interrompt"
 
-#: siglist.c:58
+#: siglist.c:59
 msgid "Quit"
 msgstr "Quitte"
 
-#: siglist.c:62
+#: siglist.c:63
 msgid "Illegal instruction"
 msgstr "Instruction incorrecte"
 
-#: siglist.c:66
+#: siglist.c:67
 msgid "BPT trace/trap"
 msgstr "trace/trap BPT"
 
-#: siglist.c:74
+#: siglist.c:75
 msgid "ABORT instruction"
 msgstr "Instruction ABORT"
 
-#: siglist.c:78
+#: siglist.c:79
 msgid "EMT instruction"
 msgstr "Instruction EMT"
 
-#: siglist.c:82
+#: siglist.c:83
 msgid "Floating point exception"
 msgstr "Exception en virgule flottante"
 
-#: siglist.c:86
+#: siglist.c:87
 msgid "Killed"
 msgstr "Tué"
 
-#: siglist.c:90
+#: siglist.c:91
 msgid "Bus error"
 msgstr "Erreur de bus"
 
-#: siglist.c:94
+#: siglist.c:95
 msgid "Segmentation fault"
 msgstr "Erreur de segmentation"
 
-#: siglist.c:98
+#: siglist.c:99
 msgid "Bad system call"
 msgstr "Mauvais appel système"
 
-#: siglist.c:102
+#: siglist.c:103
 msgid "Broken pipe"
 msgstr "Tube brisé"
 
-#: siglist.c:106
+#: siglist.c:107
 msgid "Alarm clock"
 msgstr "Horloge d'alarme"
 
-#: siglist.c:110
+#: siglist.c:111
 msgid "Terminated"
 msgstr "Terminé"
 
-#: siglist.c:114
+#: siglist.c:115
 msgid "Urgent IO condition"
 msgstr "Condition d'E/S urgente"
 
-#: siglist.c:118
+#: siglist.c:119
 msgid "Stopped (signal)"
 msgstr "Stoppé (signal)"
 
-#: siglist.c:126
+#: siglist.c:127
 msgid "Continue"
 msgstr "Continue"
 
-#: siglist.c:134
+#: siglist.c:135
 msgid "Child death or stop"
 msgstr "Mort ou arrêt du fils"
 
-#: siglist.c:138
+#: siglist.c:139
 msgid "Stopped (tty input)"
 msgstr "Stoppé (entrée tty)"
 
-#: siglist.c:142
+#: siglist.c:143
 msgid "Stopped (tty output)"
 msgstr "Stoppé (sortie tty)"
 
-#: siglist.c:146
+#: siglist.c:147
 msgid "I/O ready"
 msgstr "E/S prête"
 
-#: siglist.c:150
+#: siglist.c:151
 msgid "CPU limit"
 msgstr "Limite CPU"
 
-#: siglist.c:154
+#: siglist.c:155
 msgid "File limit"
 msgstr "Limite fichier"
 
-#: siglist.c:158
+#: siglist.c:159
 msgid "Alarm (virtual)"
 msgstr "Alarme (virtuelle)"
 
-#: siglist.c:162
+#: siglist.c:163
 msgid "Alarm (profile)"
 msgstr "Alarme (profile)"
 
-#: siglist.c:166
+#: siglist.c:167
 msgid "Window changed"
 msgstr "Fenêtre changée"
 
-#: siglist.c:170
+#: siglist.c:171
 msgid "Record lock"
 msgstr "Verrou d'enregistrement"
 
-#: siglist.c:174
+#: siglist.c:175
 msgid "User signal 1"
 msgstr "Signal utilisateur 1"
 
-#: siglist.c:178
+#: siglist.c:179
 msgid "User signal 2"
 msgstr "Signal utilisateur 2"
 
-#: siglist.c:182
+#: siglist.c:183
 msgid "HFT input data pending"
 msgstr "données d'entrée HFT en attente"
 
-#: siglist.c:186
+#: siglist.c:187
 msgid "power failure imminent"
 msgstr "coupure d'alimentation imminente"
 
-#: siglist.c:190
+#: siglist.c:191
 msgid "system crash imminent"
 msgstr "panne système imminente"
 
-#: siglist.c:194
+#: siglist.c:195
 msgid "migrate process to another CPU"
 msgstr "migration processus vers un autre CPU"
 
-#: siglist.c:198
+#: siglist.c:199
 msgid "programming error"
 msgstr "erreur de programmation"
 
-#: siglist.c:202
+#: siglist.c:203
 msgid "HFT monitor mode granted"
 msgstr "Mode de surveillance HFT accordé"
 
-#: siglist.c:206
+#: siglist.c:207
 msgid "HFT monitor mode retracted"
 msgstr "Mode de surveillance HFT rétracté"
 
-#: siglist.c:210
+#: siglist.c:211
 msgid "HFT sound sequence has completed"
 msgstr "Séquence de son HFT terminée"
 
-#: siglist.c:214
+#: siglist.c:215
 msgid "Information request"
 msgstr "Demande d'information"
 
-#: siglist.c:222 siglist.c:224
+#: siglist.c:223 siglist.c:225
 #, c-format
 msgid "Unknown Signal #%d"
 msgstr "Signal n°%d inconnu"
 
-#: subst.c:1476 subst.c:1666
+#: subst.c:1480 subst.c:1670
 #, c-format
 msgid "bad substitution: no closing `%s' in %s"
 msgstr "Mauvaise substitution : pas de « %s » de fermeture dans %s"
 
-#: subst.c:3281
+#: subst.c:3307
 #, c-format
 msgid "%s: cannot assign list to array member"
 msgstr "%s : impossible d'affecter une liste à un élément de tableau"
 
-#: subst.c:5910 subst.c:5926
+#: subst.c:6048 subst.c:6064
 msgid "cannot make pipe for process substitution"
 msgstr "impossible de fabriquer un tube pour une substitution de processus"
 
-#: subst.c:5985
+#: subst.c:6124
 msgid "cannot make child for process substitution"
 msgstr "impossible de fabriquer un fils pour une substitution de processus"
 
-#: subst.c:6059
+#: subst.c:6198
 #, c-format
 msgid "cannot open named pipe %s for reading"
 msgstr "impossible d'ouvrir le tube nommé « %s » en lecture"
 
-#: subst.c:6061
+#: subst.c:6200
 #, c-format
 msgid "cannot open named pipe %s for writing"
 msgstr "impossible d'ouvrir le tube nommé « %s » en écriture"
 
-#: subst.c:6084
+#: subst.c:6223
 #, c-format
 msgid "cannot duplicate named pipe %s as fd %d"
 msgstr "impossible de dupliquer le tube nommé « %s » vers le fd %d"
 
-#: subst.c:6213
+#: subst.c:6370
 msgid "command substitution: ignored null byte in input"
 msgstr "substitution de commande: octet nul ignoré en entrée"
 
-#: subst.c:6353
+#: subst.c:6533
 msgid "cannot make pipe for command substitution"
 msgstr "impossible de fabriquer un tube pour une substitution de commande"
 
-#: subst.c:6397
+#: subst.c:6580
 msgid "cannot make child for command substitution"
 msgstr "impossible de fabriquer un processus fils pour une substitution de commande"
 
-#: subst.c:6423
+#: subst.c:6613
 msgid "command_substitute: cannot duplicate pipe as fd 1"
 msgstr "command_substitute : impossible de dupliquer le tube vers le fd 1"
 
-#: subst.c:6883 subst.c:9952
+#: subst.c:7082 subst.c:10252
 #, c-format
 msgid "%s: invalid variable name for name reference"
 msgstr "%s : nom de variable invalide pour une référence de nom"
 
-#: subst.c:6979 subst.c:6997 subst.c:7169
+#: subst.c:7178 subst.c:7196 subst.c:7369
 #, c-format
 msgid "%s: invalid indirect expansion"
 msgstr "%s : expansion indirecte invalide"
 
-#: subst.c:7013 subst.c:7177
+#: subst.c:7212 subst.c:7377
 #, c-format
 msgid "%s: invalid variable name"
 msgstr "%s: nom de variable invalide"
 
-#: subst.c:7256
+#: subst.c:7478
 #, c-format
 msgid "%s: parameter not set"
 msgstr "%s : paramètre non défini"
 
-#: subst.c:7258
+#: subst.c:7480
 #, c-format
 msgid "%s: parameter null or not set"
 msgstr "%s : paramètre vide ou non défini"
 
-#: subst.c:7503 subst.c:7518
+#: subst.c:7727 subst.c:7742
 #, c-format
 msgid "%s: substring expression < 0"
 msgstr "%s : expression de sous-chaîne négative"
 
-#: subst.c:9281 subst.c:9302
+#: subst.c:9560 subst.c:9587
 #, c-format
 msgid "%s: bad substitution"
 msgstr "%s : mauvaise substitution"
 
-#: subst.c:9390
+#: subst.c:9678
 #, c-format
 msgid "$%s: cannot assign in this way"
 msgstr "$%s : affectation impossible de cette façon"
 
-#: subst.c:9814
+#: subst.c:10111
 msgid "future versions of the shell will force evaluation as an arithmetic substitution"
 msgstr "les versions futures du shell forceront l'évaluation comme une substitution arithmétique"
 
-#: subst.c:10367
+#: subst.c:10795
 #, c-format
 msgid "bad substitution: no closing \"`\" in %s"
 msgstr "mauvais remplacement : pas de « ` » de fermeture dans %s"
 
-#: subst.c:11434
+#: subst.c:11874
 #, c-format
 msgid "no match: %s"
 msgstr "pas de correspondance : %s"
@@ -2055,21 +2065,21 @@ msgstr "« ) » attendue"
 msgid "`)' expected, found %s"
 msgstr "« ) » attendue au lieu de %s"
 
-#: test.c:466 test.c:799
+#: test.c:469 test.c:814
 #, c-format
 msgid "%s: binary operator expected"
 msgstr "%s : opérateur binaire attendu"
 
-#: test.c:756 test.c:759
+#: test.c:771 test.c:774
 #, c-format
 msgid "%s: unary operator expected"
 msgstr "%s : opérateur unaire attendu"
 
-#: test.c:881
+#: test.c:896
 msgid "missing `]'"
 msgstr "« ] » manquant"
 
-#: test.c:899
+#: test.c:914
 #, c-format
 msgid "syntax error: `%s' unexpected"
 msgstr "erreur de syntaxe : « %s » non attendu"
@@ -2078,103 +2088,108 @@ msgstr "erreur de syntaxe : « %s » non attendu"
 msgid "invalid signal number"
 msgstr "numéro de signal non valable"
 
-#: trap.c:325
+#: trap.c:323
 #, c-format
 msgid "trap handler: maximum trap handler level exceeded (%d)"
 msgstr "gestionnaire trap : dépassement de la profondeur maximum du gestionnaire « trap » (%d)"
 
-#: trap.c:414
+#: trap.c:412
 #, c-format
 msgid "run_pending_traps: bad value in trap_list[%d]: %p"
 msgstr "run_pending_traps : mauvaise valeur dans trap_list[%d] : %p"
 
-#: trap.c:418
+#: trap.c:416
 #, c-format
 msgid "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
 msgstr "run_pending_traps : le gestionnaire de signal est SIG_DFL, renvoi de %d (%s) à moi-même"
 
-#: trap.c:487
+#: trap.c:509
 #, c-format
 msgid "trap_handler: bad signal %d"
-msgstr "trap_handler : mauvais signal %d"
+msgstr "trap_handler : mauvais signal %d"
 
-#: variables.c:421
+#: variables.c:424
 #, c-format
 msgid "error importing function definition for `%s'"
 msgstr "erreur lors de l'importation de la définition de fonction pour « %s »"
 
-#: variables.c:833
+#: variables.c:838
 #, c-format
 msgid "shell level (%d) too high, resetting to 1"
 msgstr "niveau de shell trop élevé (%d), initialisation à 1"
 
-#: variables.c:2674
+#: variables.c:2642
 msgid "make_local_variable: no function context at current scope"
-msgstr "make_local_variable : aucun contexte de fonction dans le champ d'application actuel"
+msgstr "make_local_variable : aucun contexte de fonction dans le champ d'application actuel"
 
-#: variables.c:2693
+#: variables.c:2661
 #, c-format
 msgid "%s: variable may not be assigned value"
-msgstr "%s : la variable ne peut se voir assigner une valeur"
+msgstr "%s : la variable ne peut se voir assigner une valeur"
 
-#: variables.c:3475
+#: variables.c:2818 variables.c:2874
+#, c-format
+msgid "%s: cannot inherit value from incompatible type"
+msgstr "%s : impossible d'hériter de la valeur d'un type incompatible"
+
+#: variables.c:3459
 #, c-format
 msgid "%s: assigning integer to name reference"
-msgstr "%s : assigne un entier à la référence de nom"
+msgstr "%s : assigne un entier à la référence de nom"
 
-#: variables.c:4404
+#: variables.c:4390
 msgid "all_local_variables: no function context at current scope"
-msgstr "all_local_variables : aucun contexte de fonction dans le champ d'application actuel"
+msgstr "all_local_variables : aucun contexte de fonction dans le champ d'application actuel"
 
-#: variables.c:4771
+#: variables.c:4757
 #, c-format
 msgid "%s has null exportstr"
 msgstr "%s a un « exportstr » nul"
 
-#: variables.c:4776 variables.c:4785
+#: variables.c:4762 variables.c:4771
 #, c-format
 msgid "invalid character %d in exportstr for %s"
 msgstr "caractère %d non valable dans « exportstr » pour %s"
 
-#: variables.c:4791
+#: variables.c:4777
 #, c-format
 msgid "no `=' in exportstr for %s"
 msgstr "pas de « = » dans « exportstr » pour %s"
 
-#: variables.c:5331
+#: variables.c:5317
 msgid "pop_var_context: head of shell_variables not a function context"
-msgstr "pop_var_context : le début de « shell_variables » n'est pas un contexte de fonction"
+msgstr "pop_var_context : le début de « shell_variables » n'est pas un contexte de fonction"
 
-#: variables.c:5344
+#: variables.c:5330
 msgid "pop_var_context: no global_variables context"
-msgstr "pop_var_context : aucun contexte à « global_variables »"
+msgstr "pop_var_context : aucun contexte à « global_variables »"
 
-#: variables.c:5424
+#: variables.c:5410
 msgid "pop_scope: head of shell_variables not a temporary environment scope"
-msgstr "pop_scope : le début de « shell_variables » n'est pas un champ d'application temporaire d'environnement"
+msgstr "pop_scope : le début de « shell_variables » n'est pas un champ d'application temporaire d'environnement"
 
-#: variables.c:6387
+#: variables.c:6400
 #, c-format
 msgid "%s: %s: cannot open as FILE"
-msgstr "%s : %s : impossible d'ouvrir comme FILE"
+msgstr "%s : %s : impossible d'ouvrir comme FILE"
 
-#: variables.c:6392
+#: variables.c:6405
 #, c-format
 msgid "%s: %s: invalid value for trace file descriptor"
-msgstr "%s : %s : valeur non valable pour un descripteur de fichier de trace"
+msgstr "%s : %s : valeur non valable pour un descripteur de fichier de trace"
 
-#: variables.c:6437
+#: variables.c:6450
 #, c-format
 msgid "%s: %s: compatibility value out of range"
-msgstr "%s : %s : valeur de compatibilité hors plage"
+msgstr "%s : %s : valeur de compatibilité hors plage"
 
 #: version.c:46 version2.c:46
-msgid "Copyright (C) 2020 Free Software Foundation, Inc."
-msgstr "Copyright (C) 2020 Free Software Foundation, Inc."
+msgid "Copyright (C) 2022 Free Software Foundation, Inc."
+msgstr "Copyright (C) 2022 Free Software Foundation, Inc."
 
 #: version.c:47 version2.c:47
 msgid "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n"
-msgstr "Licence GPLv3+ : GNU GPL version 3 ou ultérieure <http://gnu.org/licenses/gpl.html>\n"
+msgstr "Licence GPLv3+ : GNU GPL version 3 ou ultérieure <http://gnu.org/licenses/gpl.html>\n"
 
 #: version.c:86 version2.c:86
 #, c-format
@@ -2192,12 +2207,12 @@ msgstr "AUCUNE GARANTIE n'est fournie, dans les limites permises par la loi."
 #: xmalloc.c:93
 #, c-format
 msgid "%s: cannot allocate %lu bytes (%lu bytes allocated)"
-msgstr "%s : impossible d'allouer %lu octets (%lu octets alloués)"
+msgstr "%s : impossible d'allouer %lu octets (%lu octets alloués)"
 
 #: xmalloc.c:95
 #, c-format
 msgid "%s: cannot allocate %lu bytes"
-msgstr "%s : impossible d'allouer %lu octets"
+msgstr "%s : impossible d'allouer %lu octets"
 
 #: xmalloc.c:165
 #, c-format
@@ -2250,12 +2265,12 @@ msgid "command [-pVv] command [arg ...]"
 msgstr "command [-pVv] commande [arg ...]"
 
 #: builtins.c:78
-msgid "declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]"
-msgstr "declare [-aAfFgiIlnrtux] [-p] [nom[=valeur] ...]"
+msgid "declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] [name ...]"
+msgstr "declare [-aAfFgiIlnrtux] [nom[=valeur] ...] ou declare -p [-aAfFilnrtux] [nom ...]"
 
 #: builtins.c:80
-msgid "typeset [-aAfFgiIlnrtux] [-p] name[=value] ..."
-msgstr "typeset [-aAfFgiIlnrtux] [-p] nom[=valeur] ..."
+msgid "typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] [name ...]"
+msgstr "typeset [-aAfFgiIlnrtux] nom[=valeur] ... ou typeset -p [-aAfFilnrtux] [nom ...]"
 
 #: builtins.c:82
 msgid "local [option] name[=value] ..."
@@ -2342,8 +2357,8 @@ msgid "return [n]"
 msgstr "return [n]"
 
 #: builtins.c:142
-msgid "set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]"
-msgstr "set [-abefhkmnptuvxBCHP] [-o nom-option] [--] [arg ...]"
+msgid "set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]"
+msgstr "set [-abefhkmnptuvxBCEHPT] [-o nom-option] [--] [-] [arg ...]"
 
 #: builtins.c:144
 msgid "unset [-f] [-v] [-n] [name ...]"
@@ -2390,8 +2405,8 @@ msgid "type [-afptP] name [name ...]"
 msgstr "type [-afptP] nom [nom ...]"
 
 #: builtins.c:171
-msgid "ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]"
-msgstr "ulimit [-SHabcdefiklmnpqrstuvxPT] [limite]"
+msgid "ulimit [-SHabcdefiklmnpqrstuvxPRT] [limit]"
+msgstr "ulimit [-SHabcdefiklmnpqrstuvxPRT] [limite]"
 
 #: builtins.c:174
 msgid "umask [-p] [-S] [mode]"
@@ -2430,12 +2445,12 @@ msgid "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else C
 msgstr "if COMMANDES; then COMMANDES; [ elif COMMANDES; then COMMANDES; ]... [ else COMMANDES; ] fi"
 
 #: builtins.c:196
-msgid "while COMMANDS; do COMMANDS; done"
-msgstr "while COMMANDES; do COMMANDES; done"
+msgid "while COMMANDS; do COMMANDS-2; done"
+msgstr "while COMMANDES; do COMMANDES-2; done"
 
 #: builtins.c:198
-msgid "until COMMANDS; do COMMANDS; done"
-msgstr "until COMMANDES; do COMMANDES; done"
+msgid "until COMMANDS; do COMMANDS-2; done"
+msgstr "until COMMANDES; do COMMANDES-2; done"
 
 #: builtins.c:200
 msgid "coproc [NAME] command [redirections]"
@@ -3753,7 +3768,8 @@ msgid ""
 "    splitting, and the first word is assigned to the first NAME, the second\n"
 "    word to the second NAME, and so on, with any leftover words assigned to\n"
 "    the last NAME.  Only the characters found in $IFS are recognized as word\n"
-"    delimiters.\n"
+"    delimiters. By default, the backslash character escapes delimiter characters\n"
+"    and newline.\n"
 "    \n"
 "    If no NAMEs are supplied, the line read is stored in the REPLY variable.\n"
 "    \n"
@@ -3796,11 +3812,12 @@ msgstr ""
 "    comme des mots, et le premier mot est assigné au premier NOM, le deuxième mot\n"
 "    au deuxième NOM, et ainsi de suite, le dernier NOM récupérant la liste des mots\n"
 "    restants. Seuls les caractères trouvés dans $IFS sont reconnus comme délimiteurs\n"
-"    de mots\n"
+"    de mots. Par défaut, la barre oblique inverse échappe les caractères délimiteurs\n"
+"    et les sauts de ligne.\n"
 "    \n"
 "    Si aucun NOM n'est fourni, la ligne lue est stockée dans la variable REPLY.\n"
 "    \n"
-"    Options :\n"
+"    Options :\n"
 "      -a tableau\taffecte les mots lus séquentiellement aux indices de la variable\n"
 "    \t\ttableau ARRAY en commençant à 0\n"
 "      -d délim\tcontinue jusqu'à ce que le premier caractère de DELIM soit lu,\n"
@@ -3827,11 +3844,12 @@ msgstr ""
 "    \t\tde sortie est supérieur à 128 si le délai a expiré\n"
 "      -u fd\tlit depuis le descripteur de fichier FD plutôt que l'entrée standard\n"
 "    \n"
-"    Code de sortie :\n"
-"    Le code de retour est 0, à moins qu'une fin de fichier ne survienne, que le délai expire,\n"
+"    Code de sortie :\n"
+"    Le code de retour est 0, à moins qu'une fin de fichier ne survienne, que le délai expire\n"
+"    (auquel cas, il est plus grand que 128), une erreur d'affectation à une variable survient\n"
 "    ou qu'un descripteur de fichier non valable ne soit fourni comme argument à « -u »."
 
-#: builtins.c:1041
+#: builtins.c:1042
 msgid ""
 "Return from a shell function.\n"
 "    \n"
@@ -3853,7 +3871,7 @@ msgstr ""
 "    Renvoie N ou le code d'échec si le shell n'est pas en train d'exécuter\n"
 "    une fonction ou un script."
 
-#: builtins.c:1054
+#: builtins.c:1055
 msgid ""
 "Set or unset values of shell options and positional parameters.\n"
 "    \n"
@@ -4017,7 +4035,7 @@ msgstr ""
 "    Code de sortie :\n"
 "    Renvoie le code de succès à moins qu'une option non valable ne soit donnée."
 
-#: builtins.c:1139
+#: builtins.c:1140
 msgid ""
 "Unset values and attributes of shell variables and functions.\n"
 "    \n"
@@ -4056,7 +4074,7 @@ msgstr ""
 "    Renvoie le code de succès à moins qu'une option non valable ne soit\n"
 "    donnée ou que NOM soit en lecture seule."
 
-#: builtins.c:1161
+#: builtins.c:1162
 msgid ""
 "Set export attribute for shell variables.\n"
 "    \n"
@@ -4090,7 +4108,7 @@ msgstr ""
 "    Renvoie le code de succès à moins qu'une option non valable ne soit données\n"
 "    ou que NOM ne soit pas valable."
 
-#: builtins.c:1180
+#: builtins.c:1181
 msgid ""
 "Mark shell variables as unchangeable.\n"
 "    \n"
@@ -4129,7 +4147,7 @@ msgstr ""
 "    Renvoie le code de succès à moins qu'une option non valable ne soit\n"
 "    donnée ou que NOM ne soit pas valable."
 
-#: builtins.c:1202
+#: builtins.c:1203
 msgid ""
 "Shift positional parameters.\n"
 "    \n"
@@ -4147,7 +4165,7 @@ msgstr ""
 "    Code de retour :\n"
 "    Renvoie le code de succès à moins que N soit négatif ou supérieur à $#."
 
-#: builtins.c:1214 builtins.c:1229
+#: builtins.c:1215 builtins.c:1230
 msgid ""
 "Execute commands from a file in the current shell.\n"
 "    \n"
@@ -4171,7 +4189,7 @@ msgstr ""
 "    Renvoie le code de la dernière commande exécutée dans NOMFICHIER, ou le code\n"
 "    d'échec si NOMFICHIER ne peut pas être lu."
 
-#: builtins.c:1245
+#: builtins.c:1246
 msgid ""
 "Suspend shell execution.\n"
 "    \n"
@@ -4196,7 +4214,7 @@ msgstr ""
 "    Renvoie le code de succès à moins que le contrôle de tâche ne soit pas activé\n"
 "    ou qu'une erreur survienne."
 
-#: builtins.c:1261
+#: builtins.c:1262
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -4353,7 +4371,7 @@ msgstr ""
 "    Renvoie le code de succès si EXPR est vraie, le code d'échec si EXPR est fausse ou si\n"
 "    un argument non valable est donné."
 
-#: builtins.c:1343
+#: builtins.c:1344
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -4365,7 +4383,7 @@ msgstr ""
 "    Ceci est un synonyme de la primitive « test », mais le dernier argument\n"
 "    doit être le caractère « ] », pour fermer le « [ » correspondant."
 
-#: builtins.c:1352
+#: builtins.c:1353
 msgid ""
 "Display process times.\n"
 "    \n"
@@ -4383,7 +4401,7 @@ msgstr ""
 "    Code de retour :\n"
 "    Toujours le code de succès."
 
-#: builtins.c:1364
+#: builtins.c:1365
 msgid ""
 "Trap signals and other events.\n"
 "    \n"
@@ -4451,7 +4469,7 @@ msgstr ""
 "    Renvoie le code de succès à moins que SIGSPEC ne soit pas valable ou qu'une\n"
 "    option non valable ne soit donnée."
 
-#: builtins.c:1400
+#: builtins.c:1401
 msgid ""
 "Display information about command type.\n"
 "    \n"
@@ -4507,7 +4525,7 @@ msgstr ""
 "    Renvoie le code de succès si tous les NOMs sont trouvés, le code d'échec si l'un\n"
 "    d'entre eux n'est pas trouvé."
 
-#: builtins.c:1431
+#: builtins.c:1432
 msgid ""
 "Modify shell resource limits.\n"
 "    \n"
@@ -4603,7 +4621,7 @@ msgstr ""
 "    Renvoie le code de succès à moins qu'une option non valable ne soit fournie ou\n"
 "    qu'une erreur ne survienne."
 
-#: builtins.c:1482
+#: builtins.c:1483
 msgid ""
 "Display or set file mode mask.\n"
 "    \n"
@@ -4636,7 +4654,7 @@ msgstr ""
 "    Renvoie le code de succès à moins que MODE ne soit pas valable ou qu'une\n"
 "    option non valable ne soit donnée."
 
-#: builtins.c:1502
+#: builtins.c:1503
 msgid ""
 "Wait for job completion and return exit status.\n"
 "    \n"
@@ -4687,7 +4705,7 @@ msgstr ""
 "    ou si une option non valable et fournie ou si -n est employé et que le shell\n"
 "    n'a aucun enfant sur lequel attendre."
 
-#: builtins.c:1533
+#: builtins.c:1534
 msgid ""
 "Wait for process completion and return exit status.\n"
 "    \n"
@@ -4710,7 +4728,7 @@ msgstr ""
 "    Renvoie le code de retour du dernier PID. Échoue si PID n'est pas valable ou\n"
 "    si une option non valable est donnée."
 
-#: builtins.c:1548
+#: builtins.c:1549
 msgid ""
 "Execute commands for each member in a list.\n"
 "    \n"
@@ -4732,7 +4750,7 @@ msgstr ""
 "    Code de sortie :\n"
 "    Renvoie le code de la dernière commande exécutée."
 
-#: builtins.c:1562
+#: builtins.c:1563
 msgid ""
 "Arithmetic for loop.\n"
 "    \n"
@@ -4762,7 +4780,7 @@ msgstr ""
 "    Code de sortie :\n"
 "    Renvoie le code de la dernière commande exécutée."
 
-#: builtins.c:1580
+#: builtins.c:1581
 msgid ""
 "Select words from a list and execute commands.\n"
 "    \n"
@@ -4798,7 +4816,7 @@ msgstr ""
 "    Code de sortie :\n"
 "    Renvoie le code de la dernière commande exécutée."
 
-#: builtins.c:1601
+#: builtins.c:1602
 msgid ""
 "Report time consumed by pipeline's execution.\n"
 "    \n"
@@ -4827,7 +4845,7 @@ msgstr ""
 "    Code de sortie :\n"
 "    Le code de retour est celui du PIPELINE."
 
-#: builtins.c:1618
+#: builtins.c:1619
 msgid ""
 "Execute commands based on pattern matching.\n"
 "    \n"
@@ -4845,7 +4863,7 @@ msgstr ""
 "    Code de sortie :\n"
 "    Renvoie le code de la dernière commande exécutée."
 
-#: builtins.c:1630
+#: builtins.c:1631
 msgid ""
 "Execute commands based on conditional.\n"
 "    \n"
@@ -4873,45 +4891,45 @@ msgstr ""
 "    Code de sortie :\n"
 "    Renvoie le code de la dernière commande exécutée."
 
-#: builtins.c:1647
+#: builtins.c:1648
 msgid ""
 "Execute commands as long as a test succeeds.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `while' COMMANDS has an exit status of zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n"
+"    an exit status of zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
 "Exécute des commandes aussi longtemps qu'elles réussissent.\n"
 "    \n"
-"    Effectue une expansion et exécute les COMMANDES aussi longtemps\n"
-"    que la commande finale du « while » se termine avec un code de\n"
-"    retour à zéro.\n"
+"    Effectue une expansion et exécute les COMMANDES-2 aussi longtemps\n"
+"    que la commande finale de COMMANDES se termine avec un code de retour\n"
+"    à zéro.\n"
 "    \n"
-"    Code de sortie :\n"
+"    Code de sortie :\n"
 "    Renvoie le code de la dernière commande exécutée."
 
-#: builtins.c:1659
+#: builtins.c:1660
 msgid ""
 "Execute commands as long as a test does not succeed.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `until' COMMANDS has an exit status which is not zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n"
+"    an exit status which is not zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
 "Exécute des commandes aussi longtemps qu'un test échoue.\n"
 "    \n"
-"    Effectue une expansion et exécute les commandes « COMMANDES »\n"
-"    aussi longtemps que les commandes de « until » se terminent avec\n"
-"    un code de retour différent de zéro.\n"
+"    Effectue une expansion et exécute les commandes COMMANDES-2\n"
+"    aussi longtemps que la commande finale de COMMANDES se termine\n"
+"    avec un code de retour différent de zéro.\n"
 "    \n"
 "    Code de sortie :\n"
 "    Renvoie le code de la dernière commande exécutée."
 
-#: builtins.c:1671
+#: builtins.c:1672
 msgid ""
 "Create a coprocess named NAME.\n"
 "    \n"
@@ -4933,7 +4951,7 @@ msgstr ""
 "    Code de retour :\n"
 "    La commande coproc renvoie le code de sortie 0."
 
-#: builtins.c:1685
+#: builtins.c:1686
 msgid ""
 "Define shell function.\n"
 "    \n"
@@ -4955,7 +4973,7 @@ msgstr ""
 "    Code de retour :\n"
 "    Renvoie le code de succès à moins que NOM ne soit en lecture seule."
 
-#: builtins.c:1699
+#: builtins.c:1700
 msgid ""
 "Group commands as a unit.\n"
 "    \n"
@@ -4973,7 +4991,7 @@ msgstr ""
 "    Code de sortie :\n"
 "    Renvoie le code de la dernière commande exécutée."
 
-#: builtins.c:1711
+#: builtins.c:1712
 msgid ""
 "Resume job in foreground.\n"
 "    \n"
@@ -4997,7 +5015,7 @@ msgstr ""
 "    Code de sortie :\n"
 "    Renvoie le code de la commande reprise."
 
-#: builtins.c:1726
+#: builtins.c:1727
 msgid ""
 "Evaluate arithmetic expression.\n"
 "    \n"
@@ -5015,7 +5033,7 @@ msgstr ""
 "    Code de sortie :\n"
 "    Renvoie 1 si EXPRESSION est évaluée à 0, sinon renvoie 0."
 
-#: builtins.c:1738
+#: builtins.c:1739
 msgid ""
 "Execute conditional command.\n"
 "    \n"
@@ -5061,7 +5079,7 @@ msgstr ""
 "    Code de sortie :\n"
 "    0 ou 1 selon la valeur de l'EXPRESSION."
 
-#: builtins.c:1764
+#: builtins.c:1765
 msgid ""
 "Common shell variable names and usage.\n"
 "    \n"
@@ -5165,7 +5183,7 @@ msgstr ""
 "    HISTIGNORE\tUne liste de motifs séparés par un deux-points, utilisés pour\n"
 "    \t\tdécider quelles commandes doivent être conservées dans la liste d'historique.\n"
 
-#: builtins.c:1821
+#: builtins.c:1822
 msgid ""
 "Add directories to stack.\n"
 "    \n"
@@ -5222,7 +5240,7 @@ msgstr ""
 "    Renvoie le code de succès à moins qu'un argument non valable ne soit fourni\n"
 "    ou que le changement de répertoire n'échoue."
 
-#: builtins.c:1855
+#: builtins.c:1856
 msgid ""
 "Remove directories from stack.\n"
 "    \n"
@@ -5273,7 +5291,7 @@ msgstr ""
 "    Renvoie le code de succès à moins qu'un argument non valable ne soit donné\n"
 "    ou que le changement de répertoire n'échoue."
 
-#: builtins.c:1885
+#: builtins.c:1886
 msgid ""
 "Display directory stack.\n"
 "    \n"
@@ -5326,7 +5344,7 @@ msgstr ""
 "    Renvoie le code de succès à moins qu'une option non valable ne soit\n"
 "    fournie ou qu'une erreur ne survienne."
 
-#: builtins.c:1916
+#: builtins.c:1917
 msgid ""
 "Set and unset shell options.\n"
 "    \n"
@@ -5362,7 +5380,7 @@ msgstr ""
 "    Renvoie le code de succès si NOMOPT est active ; échec si une option non valable\n"
 "    est donnée ou si NOMOPT est inactive."
 
-#: builtins.c:1937
+#: builtins.c:1938
 msgid ""
 "Formats and prints ARGUMENTS under control of the FORMAT.\n"
 "    \n"
@@ -5381,6 +5399,8 @@ msgid ""
 "    \n"
 "      %b\texpand backslash escape sequences in the corresponding argument\n"
 "      %q\tquote the argument in a way that can be reused as shell input\n"
+"      %Q\tlike %q, but apply any precision to the unquoted argument before\n"
+"    \t\tquoting\n"
 "      %(fmt)T\toutput the date-time string resulting from using FMT as a format\n"
 "    \t        string for strftime(3)\n"
 "    \n"
@@ -5395,33 +5415,35 @@ msgid ""
 msgstr ""
 "Formate et affiche des ARGUMENTS en contrôlant le FORMAT.\n"
 "    \n"
-"    Options :\n"
+"    Options :\n"
 "      -v var\taffecte la sortie à la variable VAR du shell plutôt que de l'afficher\n"
 "    \t\tsur la sortie standard\n"
 "    \n"
-"    Le FORMAT est une chaîne de caractères qui contient trois types d'objets : des caractères\n"
+"    Le FORMAT est une chaîne de caractères qui contient trois types d'objets : des caractères\n"
 "    normaux qui sont simplement copiés vers la sortie standard ; des séquences d'échappement\n"
 "    qui sont converties et copiées vers la sortie standard et des spécifications de\n"
 "    format, chacun entraînant l'affichage de l'argument suivant.\n"
 "    \n"
-"    En plus des formats standards décrits dans printf(1), « printf » interprète :\n"
+"    En plus des formats standards décrits dans printf(1), « printf » interprète :\n"
 "    \n"
 "      %b\tdéveloppe les séquences d'échappement à contre-oblique dans l'argument correspondant\n"
 "      %q\tprotège les arguments avec des guillemets de façon qu'ils puissent être réutilisés\n"
 "      comme entrée du shell.\n"
+"      %Q\tcomme %q mais applique une éventuelle précision à l'argument sans guillemets avant\n"
+"      d'ajouter les guillemets.\n"
 "      %(fmt)T\trenvoie la chaîne date-heure résultant de l'utilisation de FMT comme\n"
 "    \t        chaîne de format pour strftime(3)\n"
 "    \n"
-"    Le format est réutilisé si nécessaire pour consommer tous les arguments. Sil y a\n"
-"    moins d'arguments quexigé par le format, les spécificateurs de format surnuméraires\n"
-"    se comportent comme si la valeur zéro ou une chaîne nulle avait été fournie (selon\n"
+"    Le format est réutilisé si nécessaire pour consommer tous les arguments. S'il y a\n"
+"    moins d'arguments qu'exigé par le format, les spécificateurs de format surnuméraires\n"
+"    se comportent comme si la valeur zéro ou une chaîne nulle avait été fournies (selon\n"
 "    ce qui est approprié).\n"
 "    \n"
-"    Code de sortie :\n"
+"    Code de sortie :\n"
 "    Renvoie le code de succès à moins qu'une option non valable ne soit donnée ou qu'une\n"
 "    erreur d'écriture ou d'affectation ne survienne."
 
-#: builtins.c:1971
+#: builtins.c:1974
 msgid ""
 "Specify how arguments are to be completed by Readline.\n"
 "    \n"
@@ -5473,7 +5495,7 @@ msgstr ""
 "    Renvoie le code de succès à moins qu'une option non valable ne soit fournie ou\n"
 "    qu'une erreur ne survienne."
 
-#: builtins.c:2001
+#: builtins.c:2004
 msgid ""
 "Display possible completions depending on the options.\n"
 "    \n"
@@ -5494,7 +5516,7 @@ msgstr ""
 "    Renvoie le code de succès à moins qu'une option non valable ne soit\n"
 "    fournie ou qu'une erreur ne survienne."
 
-#: builtins.c:2016
+#: builtins.c:2019
 msgid ""
 "Modify or display completion options.\n"
 "    \n"
@@ -5549,7 +5571,7 @@ msgstr ""
 "    Renvoie le code de succès à moins qu'une option non valable ne soit fournie\n"
 "    ou que NOM n'ait aucun réglage d'auto-complètement."
 
-#: builtins.c:2047
+#: builtins.c:2050
 msgid ""
 "Read lines from the standard input into an indexed array variable.\n"
 "    \n"
@@ -5613,7 +5635,7 @@ msgstr ""
 "    Renvoie le code de succès à moins qu'une option non valable ne soit donnée ou que\n"
 "    le TABLEAU soit en lecture seule ou ne soit pas un tableau indexé."
 
-#: builtins.c:2083
+#: builtins.c:2086
 msgid ""
 "Read lines from a file into an array variable.\n"
 "    \n"
@@ -5623,6 +5645,9 @@ msgstr ""
 "    \n"
 "    Synonyme de « mapfile »."
 
+#~ msgid "%s: invalid associative array key"
+#~ msgstr "%s : clé non valable pour le tableau associatif"
+
 #~ msgid ""
 #~ "Returns the context of the current subroutine call.\n"
 #~ "    \n"
index 70423c34e373e15dc2efd2d003ed50476bd6f71c..88309c9d9a07c418e7e4204d96bfb09564458b2d 100644 (file)
Binary files a/po/ga.gmo and b/po/ga.gmo differ
index 36f1b27492f87f48c14066a0a1c7a7ba71b648f5..d62526123fa534a9a420f91bce6b4004afe51837 100644 (file)
--- a/po/ga.po
+++ b/po/ga.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: bash 5.0\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-11-28 12:51-0500\n"
+"POT-Creation-Date: 2022-01-11 14:50-0500\n"
 "PO-Revision-Date: 2019-01-16 21:05+0000\n"
 "Last-Translator: Séamus Ó Ciardhuáin <sociardhuain@gmail.com>\n"
 "Language-Team: Irish <gaeilge-gnulinux@lists.sourceforge.net>\n"
@@ -24,60 +24,55 @@ msgstr ""
 msgid "bad array subscript"
 msgstr "droch-fhoscript eagair"
 
-#: arrayfunc.c:421 builtins/declare.def:638 variables.c:2274 variables.c:2300
-#: variables.c:3133
+#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268
+#: variables.c:3101
 #, c-format
 msgid "%s: removing nameref attribute"
 msgstr "%s: aitreabúid nameref (tagairt athróga) á baint"
 
-#: arrayfunc.c:446 builtins/declare.def:851
+#: arrayfunc.c:496 builtins/declare.def:868
 #, c-format
 msgid "%s: cannot convert indexed to associative array"
 msgstr ""
 "%s: ní féidir eagar innéacsaithe a thiontú go heagar comhthiomsaitheach"
 
-#: arrayfunc.c:700
-#, c-format
-msgid "%s: invalid associative array key"
-msgstr "%s: eochair neamhbhailí eagair chomhthiomsaithigh"
-
-#: arrayfunc.c:702
+#: arrayfunc.c:777
 #, c-format
 msgid "%s: cannot assign to non-numeric index"
 msgstr "%s: ní féidir sannadh go hinnéacs neamhuimhriúil."
 
-#: arrayfunc.c:747
+#: arrayfunc.c:822
 #, c-format
 msgid "%s: %s: must use subscript when assigning associative array"
 msgstr ""
 "%s: %s: caithfear foscript a úsáid le sannadh chuig eagar comhthiomsaitheach"
 
-#: bashhist.c:452
+#: bashhist.c:455
 #, c-format
 msgid "%s: cannot create: %s"
 msgstr "%s: ní féidir cruthú: %s"
 
-#: bashline.c:4310
+#: bashline.c:4479
 msgid "bash_execute_unix_command: cannot find keymap for command"
 msgstr ""
 "bash_execute_unix_command: ní féidir mapa eochrach an ordaithe a aimsiú"
 
-#: bashline.c:4459
+#: bashline.c:4637
 #, c-format
 msgid "%s: first non-whitespace character is not `\"'"
 msgstr "%s: ní \" an chéad charachtar nach spás bán é."
 
-#: bashline.c:4488
+#: bashline.c:4666
 #, c-format
 msgid "no closing `%c' in %s"
 msgstr "Níl '%c' dúnta i %s"
 
-#: bashline.c:4519
+#: bashline.c:4697
 #, c-format
 msgid "%s: missing colon separator"
 msgstr "%s: deighilteoir idirstaid ar iarraidh"
 
-#: bashline.c:4555
+#: bashline.c:4733
 #, fuzzy, c-format
 msgid "`%s': cannot unbind in command keymap"
 msgstr "'%s': ní féidir dícheangail"
@@ -98,7 +93,7 @@ msgstr ""
 msgid "brace expansion: failed to allocate memory for `%s'"
 msgstr "fairsingiú lúibíní: theip ar leithdháileadh cuimhne le haghaidh '%s'"
 
-#: builtins/alias.def:131 variables.c:1844
+#: builtins/alias.def:131 variables.c:1817
 #, c-format
 msgid "`%s': invalid alias name"
 msgstr "'%s': ainm neamhbhailí ar mhapa eochrach"
@@ -176,7 +171,7 @@ msgstr ""
 msgid "HOME not set"
 msgstr "Níl HOME socruithe"
 
-#: builtins/cd.def:335 builtins/common.c:161 test.c:901
+#: builtins/cd.def:335 builtins/common.c:161 test.c:916
 msgid "too many arguments"
 msgstr "An iomarca argóintí"
 
@@ -203,7 +198,7 @@ msgstr "rabhadh: "
 msgid "%s: usage: "
 msgstr "%s: úsáid: "
 
-#: builtins/common.c:193 shell.c:516 shell.c:844
+#: builtins/common.c:193 shell.c:524 shell.c:866
 #, c-format
 msgid "%s: option requires an argument"
 msgstr "%s: tá argóint riachtanach don rogha"
@@ -218,7 +213,7 @@ msgstr "%s: argóint uimhriúil de dhíth"
 msgid "%s: not found"
 msgstr "%s: gan aimsiú"
 
-#: builtins/common.c:216 shell.c:857
+#: builtins/common.c:216 shell.c:879
 #, c-format
 msgid "%s: invalid option"
 msgstr "%s: rogha neamhbhailí"
@@ -228,7 +223,7 @@ msgstr "%s: rogha neamhbhailí"
 msgid "%s: invalid option name"
 msgstr "%s: ainm neamhbhailí rogha"
 
-#: builtins/common.c:230 execute_cmd.c:2373 general.c:368 general.c:373
+#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373
 #, c-format
 msgid "`%s': not a valid identifier"
 msgstr "'%s': ní aitheantóir bailí é"
@@ -241,7 +236,7 @@ msgstr "uimhir ochtnártha neamhbhailí"
 msgid "invalid hex number"
 msgstr "uimhir heicsidheachúlach neamhbhailí"
 
-#: builtins/common.c:244 expr.c:1569
+#: builtins/common.c:244 expr.c:1574
 msgid "invalid number"
 msgstr "uimhir neamhbhailí"
 
@@ -255,88 +250,93 @@ msgstr "%s: sonrú neamhbhailí comhartha"
 msgid "`%s': not a pid or valid job spec"
 msgstr "'%s': ní aitheantas próisis nó sonrú taisc bailí é"
 
-#: builtins/common.c:266 error.c:510
+#: builtins/common.c:266 error.c:536
 #, c-format
 msgid "%s: readonly variable"
 msgstr "%s: athróg inléite amháin"
 
-#: builtins/common.c:274
+#: builtins/common.c:273
+#, fuzzy, c-format
+msgid "%s: cannot assign"
+msgstr "%s: ní féidir díshocrú"
+
+#: builtins/common.c:281
 #, c-format
 msgid "%s: %s out of range"
 msgstr "%s: %s as raon"
 
-#: builtins/common.c:274 builtins/common.c:276
+#: builtins/common.c:281 builtins/common.c:283
 msgid "argument"
 msgstr "argóint"
 
-#: builtins/common.c:276
+#: builtins/common.c:283
 #, c-format
 msgid "%s out of range"
 msgstr "%s as raon"
 
-#: builtins/common.c:284
+#: builtins/common.c:291
 #, c-format
 msgid "%s: no such job"
 msgstr "%s: níl a léithéid de tasc ann."
 
-#: builtins/common.c:292
+#: builtins/common.c:299
 #, c-format
 msgid "%s: no job control"
 msgstr "%s: gan rialú tascanna."
 
-#: builtins/common.c:294
+#: builtins/common.c:301
 msgid "no job control"
 msgstr "Gan rialú tascanna."
 
-#: builtins/common.c:304
+#: builtins/common.c:311
 #, c-format
 msgid "%s: restricted"
 msgstr "%s: srianta"
 
-#: builtins/common.c:306
+#: builtins/common.c:313
 msgid "restricted"
 msgstr "srianta"
 
-#: builtins/common.c:314
+#: builtins/common.c:321
 #, c-format
 msgid "%s: not a shell builtin"
 msgstr "%s: ní ordú ionsuite blaoisce é."
 
-#: builtins/common.c:323
+#: builtins/common.c:330
 #, c-format
 msgid "write error: %s"
 msgstr "earráid scríofa: %s"
 
-#: builtins/common.c:331
+#: builtins/common.c:338
 #, c-format
 msgid "error setting terminal attributes: %s"
 msgstr "earráid agus airíonna teirminéil á socrú: %s"
 
-#: builtins/common.c:333
+#: builtins/common.c:340
 #, c-format
 msgid "error getting terminal attributes: %s"
 msgstr "earráid agus airíonna teirminéil á fáil: %s"
 
-#: builtins/common.c:635
+#: builtins/common.c:642
 #, c-format
 msgid "%s: error retrieving current directory: %s: %s\n"
 msgstr "%s: earráid ag fáil na comhadlainne reatha: %s: %s\n"
 
-#: builtins/common.c:701 builtins/common.c:703
+#: builtins/common.c:708 builtins/common.c:710
 #, c-format
 msgid "%s: ambiguous job spec"
 msgstr "%s: sonrú taisc athbhríoch"
 
-#: builtins/common.c:964
+#: builtins/common.c:971
 msgid "help not available in this version"
 msgstr "Níl cabhair ar fáil sa leagan seo."
 
-#: builtins/common.c:1008 builtins/set.def:953 variables.c:3839
+#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825
 #, c-format
 msgid "%s: cannot unset: readonly %s"
 msgstr "%s: ní féidir díshocrú: %s inléite amháin"
 
-#: builtins/common.c:1013 builtins/set.def:932 variables.c:3844
+#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830
 #, c-format
 msgid "%s: cannot unset"
 msgstr "%s: ní féidir díshocrú"
@@ -346,114 +346,114 @@ msgstr "%s: ní féidir díshocrú"
 msgid "%s: invalid action name"
 msgstr "%s: ainm neamhbhailí gnímh"
 
-#: builtins/complete.def:486 builtins/complete.def:634
-#: builtins/complete.def:865
+#: builtins/complete.def:486 builtins/complete.def:642
+#: builtins/complete.def:873
 #, c-format
 msgid "%s: no completion specification"
 msgstr "%s: níl sonrú iomlánaithe ann."
 
-#: builtins/complete.def:688
+#: builtins/complete.def:696
 msgid "warning: -F option may not work as you expect"
 msgstr ""
 "Rabhadh: b'fhéidir nach n-oibríonn an rogha -F mar a bheifeá ag súil leis."
 
-#: builtins/complete.def:690
+#: builtins/complete.def:698
 msgid "warning: -C option may not work as you expect"
 msgstr ""
 "Rabhadh: b'fhéidir nach n-oibríonn an rogha -C mar a bheifeá ag súil leis."
 
-#: builtins/complete.def:838
+#: builtins/complete.def:846
 msgid "not currently executing completion function"
 msgstr "níl an fheidhm chomhlánaithe á rith faoi láthair"
 
-#: builtins/declare.def:134
+#: builtins/declare.def:137
 msgid "can only be used in a function"
 msgstr "Inúsáidte i bhfeidhmeanna amháin. "
 
-#: builtins/declare.def:363 builtins/declare.def:756
+#: builtins/declare.def:437
+msgid "cannot use `-f' to make functions"
+msgstr "Ní féidir '-f' a úsáid chun feidhmeanna a dhéanamh"
+
+#: builtins/declare.def:464 execute_cmd.c:6132
+#, c-format
+msgid "%s: readonly function"
+msgstr "%s: feidhm inléite amháin"
+
+#: builtins/declare.def:521 builtins/declare.def:804
 #, c-format
 msgid "%s: reference variable cannot be an array"
 msgstr "%s: ní féidir le athróg thagartha bheith ina h-eagar"
 
-#: builtins/declare.def:374 variables.c:3385
+#: builtins/declare.def:532 variables.c:3359
 #, c-format
 msgid "%s: nameref variable self references not allowed"
 msgstr ""
 "%s: ní cheadaítear tagairtí don athróg féin i nameref (tagairt athróga)"
 
-#: builtins/declare.def:379 variables.c:2104 variables.c:3304 variables.c:3312
-#: variables.c:3382
+#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286
+#: variables.c:3356
 #, c-format
 msgid "%s: circular name reference"
 msgstr "%s: tagairt ainm ciorclach"
 
-#: builtins/declare.def:384 builtins/declare.def:762 builtins/declare.def:773
+#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820
 #, c-format
 msgid "`%s': invalid variable name for name reference"
 msgstr "'%s': ainm neamhbhailí athróige le haghaidh tagairt ainm"
 
-#: builtins/declare.def:514
-msgid "cannot use `-f' to make functions"
-msgstr "Ní féidir '-f' a úsáid chun feidhmeanna a dhéanamh"
-
-#: builtins/declare.def:526 execute_cmd.c:5986
-#, c-format
-msgid "%s: readonly function"
-msgstr "%s: feidhm inléite amháin"
-
-#: builtins/declare.def:824
-#, c-format
-msgid "%s: quoted compound array assignment deprecated"
-msgstr "%s: cáintear sannadh na gcomheagar athfhriotail"
-
-#: builtins/declare.def:838
+#: builtins/declare.def:856
 #, c-format
 msgid "%s: cannot destroy array variables in this way"
 msgstr "%s: ní féidir athróga eagair a scrios mar seo."
 
-#: builtins/declare.def:845 builtins/read.def:815
+#: builtins/declare.def:862 builtins/read.def:887
 #, c-format
 msgid "%s: cannot convert associative to indexed array"
 msgstr ""
 "%s: ní féidir eagar comhthiomsaitheach a thiontú go heagar innéacsaithe"
 
-#: builtins/enable.def:143 builtins/enable.def:151
+#: builtins/declare.def:891
+#, c-format
+msgid "%s: quoted compound array assignment deprecated"
+msgstr "%s: cáintear sannadh na gcomheagar athfhriotail"
+
+#: builtins/enable.def:145 builtins/enable.def:153
 msgid "dynamic loading not available"
 msgstr "Níl luchtú dinimiciúil ar fáil"
 
-#: builtins/enable.def:343
+#: builtins/enable.def:376
 #, c-format
 msgid "cannot open shared object %s: %s"
 msgstr "Ní féidir an réad comhroinnte %s a oscailt: %s"
 
-#: builtins/enable.def:371
+#: builtins/enable.def:405
 #, c-format
 msgid "cannot find %s in shared object %s: %s"
 msgstr "Ní féidir %s a aimsiú sa réad comhroinnte %s: %s"
 
-#: builtins/enable.def:388
+#: builtins/enable.def:422
 #, fuzzy, c-format
 msgid "%s: dynamic builtin already loaded"
 msgstr "%s: níl sé luchtaithe go dinimiciúil"
 
-#: builtins/enable.def:392
+#: builtins/enable.def:426
 #, c-format
 msgid "load function for %s returns failure (%d): not loaded"
 msgstr ""
 "Theip ar an ngníomh luchtála le haghaidh %s (aiscuireadh %d): níor "
 "luchtáladh é"
 
-#: builtins/enable.def:517
+#: builtins/enable.def:551
 #, c-format
 msgid "%s: not dynamically loaded"
 msgstr "%s: níl sé luchtaithe go dinimiciúil"
 
-#: builtins/enable.def:543
+#: builtins/enable.def:577
 #, c-format
 msgid "%s: cannot delete: %s"
 msgstr "%s: ní féidir scrios: %s"
 
-#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5818
+#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959
 #, c-format
 msgid "%s: is a directory"
 msgstr "%s: is comhadlann é"
@@ -468,7 +468,7 @@ msgstr "%s: ní gnáthchomhad é"
 msgid "%s: file is too large"
 msgstr "%s: tá an comhad ró-mhór"
 
-#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1647
+#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673
 #, c-format
 msgid "%s: cannot execute binary file"
 msgstr "%s: ní féidir comhad dénártha a rith"
@@ -567,12 +567,12 @@ msgstr ""
 "Ní mheaitseálann ábhar cabhrach ar bith \"%s\". Bain triail as \"help help\" "
 "nó \"man -k %s\" nó \"info %s\"."
 
-#: builtins/help.def:224
+#: builtins/help.def:223
 #, c-format
 msgid "%s: cannot open: %s"
 msgstr "%s: ní féidir oscailt: %s"
 
-#: builtins/help.def:524
+#: builtins/help.def:523
 #, c-format
 msgid ""
 "These shell commands are defined internally.  Type `help' to see this list.\n"
@@ -592,21 +592,21 @@ msgstr ""
 "Ciallaíonn réalt (*) ar ainm go bhfuil an t-ordú díchumasaithe.\n"
 "\n"
 
-#: builtins/history.def:155
+#: builtins/history.def:159
 msgid "cannot use more than one of -anrw"
 msgstr "Ní féidir níos mó ná ceann amháin as -anrw a úsáid."
 
-#: builtins/history.def:188 builtins/history.def:198 builtins/history.def:213
-#: builtins/history.def:230 builtins/history.def:242 builtins/history.def:249
+#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215
+#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247
 msgid "history position"
 msgstr "suíomh staire"
 
-#: builtins/history.def:340
+#: builtins/history.def:338
 #, c-format
 msgid "%s: invalid timestamp"
 msgstr "%s: stampa ama neamhbhailí"
 
-#: builtins/history.def:451
+#: builtins/history.def:449
 #, c-format
 msgid "%s: history expansion failed"
 msgstr "%s: theip ar fhairsingiú staire."
@@ -629,78 +629,78 @@ msgstr "%s: is gá le argóintí bheith ina aitheantais phróisis nó taisc"
 msgid "Unknown error"
 msgstr "Earráid neamhaithnid"
 
-#: builtins/let.def:97 builtins/let.def:122 expr.c:639 expr.c:657
+#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658
 msgid "expression expected"
 msgstr "Ag súil le slonn"
 
-#: builtins/mapfile.def:178
+#: builtins/mapfile.def:180
 #, c-format
 msgid "%s: not an indexed array"
 msgstr "%s: ní eagar innéacsaithe é"
 
-#: builtins/mapfile.def:271 builtins/read.def:308
+#: builtins/mapfile.def:276 builtins/read.def:336
 #, c-format
 msgid "%s: invalid file descriptor specification"
 msgstr "%s: sonrú neamhbhailí tuairisceora comhaid"
 
-#: builtins/mapfile.def:279 builtins/read.def:315
+#: builtins/mapfile.def:284 builtins/read.def:343
 #, c-format
 msgid "%d: invalid file descriptor: %s"
 msgstr "%d: tuairisceoir comhaid neamhbhailí: %s"
 
-#: builtins/mapfile.def:288 builtins/mapfile.def:326
+#: builtins/mapfile.def:293 builtins/mapfile.def:331
 #, c-format
 msgid "%s: invalid line count"
 msgstr "%s: comhaireamh neamhbhailí línte"
 
-#: builtins/mapfile.def:299
+#: builtins/mapfile.def:304
 #, c-format
 msgid "%s: invalid array origin"
 msgstr "%s: bunphointe neamhbhailí eagair"
 
-#: builtins/mapfile.def:316
+#: builtins/mapfile.def:321
 #, c-format
 msgid "%s: invalid callback quantum"
 msgstr "%s: candam neamhbhailí aisghlaoigh"
 
-#: builtins/mapfile.def:349
+#: builtins/mapfile.def:354
 msgid "empty array variable name"
 msgstr "ainm folamh athróga eagair"
 
-#: builtins/mapfile.def:370
+#: builtins/mapfile.def:375
 msgid "array variable support required"
 msgstr "tacaíocht le hathróga eagair de dhíth"
 
-#: builtins/printf.def:419
+#: builtins/printf.def:430
 #, c-format
 msgid "`%s': missing format character"
 msgstr "'%s': carachtar formáide ar iarraidh."
 
-#: builtins/printf.def:474
+#: builtins/printf.def:485
 #, c-format
 msgid "`%c': invalid time format specification"
 msgstr "'%c': sonrú neamhbhailí formáide ama"
 
-#: builtins/printf.def:676
+#: builtins/printf.def:708
 #, c-format
 msgid "`%c': invalid format character"
 msgstr "'%c': carachtar formáide neamhbhailí."
 
-#: builtins/printf.def:702
+#: builtins/printf.def:734
 #, c-format
 msgid "warning: %s: %s"
 msgstr "rabhadh: %s: %s"
 
-#: builtins/printf.def:788
+#: builtins/printf.def:822
 #, c-format
 msgid "format parsing problem: %s"
 msgstr "fadhb i bpársáil formáide: %s"
 
-#: builtins/printf.def:885
+#: builtins/printf.def:919
 msgid "missing hex digit for \\x"
 msgstr "digit heicsidheachúlach ar iarraidh le haghaidh \\x"
 
-#: builtins/printf.def:900
+#: builtins/printf.def:934
 #, c-format
 msgid "missing unicode digit for \\%c"
 msgstr "digit Unicode ar iarraidh le haghaidh \\%c"
@@ -861,12 +861,12 @@ msgstr ""
 "    \n"
 "    Taispeánann an t-ordú ionsuite \"dirs\" cruach na gcomhadlann."
 
-#: builtins/read.def:280
+#: builtins/read.def:308
 #, c-format
 msgid "%s: invalid timeout specification"
 msgstr "%s: sonrú neamhbhailí teorann ama"
 
-#: builtins/read.def:755
+#: builtins/read.def:827
 #, c-format
 msgid "read error: %d: %s"
 msgstr "Earráid léite: %d: %s"
@@ -880,7 +880,7 @@ msgstr ""
 msgid "cannot simultaneously unset a function and a variable"
 msgstr "Ní féidir feidhm agus athróg a dhíshocrú ag an am céanna."
 
-#: builtins/set.def:966
+#: builtins/set.def:969
 #, c-format
 msgid "%s: not an array variable"
 msgstr "%s: ní athróg eagair é"
@@ -899,11 +899,11 @@ msgstr "%s: ní féidir easpórtáil"
 msgid "shift count"
 msgstr "comhaireamh iomlaoide"
 
-#: builtins/shopt.def:310
+#: builtins/shopt.def:323
 msgid "cannot set and unset shell options simultaneously"
 msgstr "Ní féidir roghanna blaoisce a shocrú agus a dhíshocrú ag an am céanna."
 
-#: builtins/shopt.def:428
+#: builtins/shopt.def:444
 #, c-format
 msgid "%s: invalid shell option name"
 msgstr "%s: ainm neamhbhailí ar rogha blaoisce"
@@ -970,16 +970,16 @@ msgstr "%s: argóint teorann neamhbhailí"
 msgid "`%c': bad command"
 msgstr "'%c': droch-ordú"
 
-#: builtins/ulimit.def:455
+#: builtins/ulimit.def:464
 #, c-format
 msgid "%s: cannot get limit: %s"
 msgstr "%s: ní féidir teorainn a fháil: %s"
 
-#: builtins/ulimit.def:481
+#: builtins/ulimit.def:490
 msgid "limit"
 msgstr "teorainn"
 
-#: builtins/ulimit.def:493 builtins/ulimit.def:793
+#: builtins/ulimit.def:502 builtins/ulimit.def:802
 #, c-format
 msgid "%s: cannot modify limit: %s"
 msgstr "%s: ní féidir teorainn a athrú: %s"
@@ -998,7 +998,7 @@ msgstr "'%c': oibreoir neamhbhailí móid shiombalaigh"
 msgid "`%c': invalid symbolic mode character"
 msgstr "'%c': carachtar neamhbhailí móid shiombalaigh"
 
-#: error.c:89 error.c:347 error.c:349 error.c:351
+#: error.c:89 error.c:373 error.c:375 error.c:377
 msgid " line "
 msgstr " líne "
 
@@ -1018,96 +1018,106 @@ msgstr "Ag tobscor..."
 msgid "INFORM: "
 msgstr "EOLAS: "
 
-#: error.c:462
+#: error.c:310
+#, fuzzy, c-format
+msgid "DEBUG warning: "
+msgstr "rabhadh: "
+
+#: error.c:488
 msgid "unknown command error"
 msgstr "earráid ordaithe neamhaithnid"
 
-#: error.c:463
+#: error.c:489
 msgid "bad command type"
 msgstr "droch-chineál ordaithe"
 
-#: error.c:464
+#: error.c:490
 msgid "bad connector"
 msgstr "drochnascóir"
 
-#: error.c:465
+#: error.c:491
 msgid "bad jump"
 msgstr "drochléim"
 
-#: error.c:503
+#: error.c:529
 #, c-format
 msgid "%s: unbound variable"
 msgstr "%s: athróg neamhcheangailte"
 
-#: eval.c:242
+#: eval.c:243
 msgid "\atimed out waiting for input: auto-logout\n"
 msgstr "\aImithe thar am ag feitheamh le hionchur: logáil amach uathoibríoch\n"
 
-#: execute_cmd.c:537
+#: execute_cmd.c:555
 #, c-format
 msgid "cannot redirect standard input from /dev/null: %s"
 msgstr "Ní féidir an ionchur caighdeánach a atreorú ó /dev/null: %s"
 
-#: execute_cmd.c:1297
+#: execute_cmd.c:1317
 #, c-format
 msgid "TIMEFORMAT: `%c': invalid format character"
 msgstr "FORMÁID_AMA: '%c': carachtar formáide neamhbhaií."
 
-#: execute_cmd.c:2362
+#: execute_cmd.c:2391
 #, c-format
 msgid "execute_coproc: coproc [%d:%s] still exists"
 msgstr "execute_coproc: tá an comhphróiseas [%d:%s] fós ann"
 
-#: execute_cmd.c:2486
+#: execute_cmd.c:2524
 msgid "pipe error"
 msgstr "earráid phíopa"
 
-#: execute_cmd.c:4793
+#: execute_cmd.c:4923
 #, c-format
 msgid "eval: maximum eval nesting level exceeded (%d)"
 msgstr "eval: imithe thar uasleibhéal neadaithe eval (%d)"
 
-#: execute_cmd.c:4805
+#: execute_cmd.c:4935
 #, c-format
 msgid "%s: maximum source nesting level exceeded (%d)"
 msgstr "%s: imithe thar uasleibhéal neadaithe foinse (%d)"
 
-#: execute_cmd.c:4913
+#: execute_cmd.c:5043
 #, c-format
 msgid "%s: maximum function nesting level exceeded (%d)"
 msgstr "%s: imithe thar uasleibhéal neadaithe feidhme (%d)"
 
-#: execute_cmd.c:5467
+#: execute_cmd.c:5598
 #, c-format
 msgid "%s: restricted: cannot specify `/' in command names"
 msgstr "%s: srianta: ní féidir \"/\" a shonrú in ainmneacha ordaithe"
 
-#: execute_cmd.c:5574
+#: execute_cmd.c:5715
 #, c-format
 msgid "%s: command not found"
 msgstr "%s: níor aimsíodh an t-ordú"
 
-#: execute_cmd.c:5816
+#: execute_cmd.c:5957
 #, c-format
 msgid "%s: %s"
 msgstr "%s: %s"
 
-#: execute_cmd.c:5854
+#: execute_cmd.c:5975
+#, fuzzy, c-format
+msgid "%s: cannot execute: required file not found"
+msgstr "%s: ní féidir comhad dénártha a rith"
+
+#: execute_cmd.c:6000
 #, c-format
 msgid "%s: %s: bad interpreter"
 msgstr "%s: %s: drochléirmhínitheoir"
 
-#: execute_cmd.c:5891
+#: execute_cmd.c:6037
 #, c-format
 msgid "%s: cannot execute binary file: %s"
 msgstr "%s: ní féidir comhad dénártha a rith: %s"
 
-#: execute_cmd.c:5977
+#: execute_cmd.c:6123
 #, c-format
 msgid "`%s': is a special builtin"
 msgstr "Is ordú ionsuite speisialta é '%s'"
 
-#: execute_cmd.c:6029
+#: execute_cmd.c:6175
 #, c-format
 msgid "cannot duplicate fd %d to fd %d"
 msgstr ""
@@ -1121,69 +1131,69 @@ msgstr "Imithe thar leibhéal athchursála sloinn"
 msgid "recursion stack underflow"
 msgstr "Gannsreabhadh na cruaiche athchúrsála"
 
-#: expr.c:477
+#: expr.c:478
 msgid "syntax error in expression"
 msgstr "Earráid chomhréire sa slonn."
 
-#: expr.c:521
+#: expr.c:522
 msgid "attempted assignment to non-variable"
 msgstr "Deineadh iarracht sannadh go rud nach athróg é."
 
-#: expr.c:530
+#: expr.c:531
 msgid "syntax error in variable assignment"
 msgstr "Earráid chomhréire i sannadh athróige."
 
-#: expr.c:544 expr.c:911
+#: expr.c:545 expr.c:912
 msgid "division by 0"
 msgstr "Roinnt ar 0"
 
-#: expr.c:592
+#: expr.c:593
 msgid "bug: bad expassign token"
 msgstr "Fabht: droch-chomhartha expassign"
 
-#: expr.c:646
+#: expr.c:647
 msgid "`:' expected for conditional expression"
 msgstr "Bhíothas ag súil le \":\" le haghaidh sloinn choinníollaigh."
 
-#: expr.c:972
+#: expr.c:973
 msgid "exponent less than 0"
 msgstr "Easpónant níos lú ná 0."
 
-#: expr.c:1029
+#: expr.c:1030
 msgid "identifier expected after pre-increment or pre-decrement"
 msgstr "Ag súil le aitheantóir tar éis réamhincriminte nó réamhdeicriminte"
 
-#: expr.c:1056
+#: expr.c:1057
 msgid "missing `)'"
 msgstr "\")\" ar iarraidh"
 
-#: expr.c:1107 expr.c:1487
+#: expr.c:1108 expr.c:1492
 msgid "syntax error: operand expected"
 msgstr "Earráid chomhréire: bhíothas ag súil le hoibreann."
 
-#: expr.c:1489
+#: expr.c:1494
 msgid "syntax error: invalid arithmetic operator"
 msgstr "Earráid chomhréire: oibreoir neamhbhailí uimhríochta"
 
-#: expr.c:1513
+#: expr.c:1518
 #, c-format
 msgid "%s%s%s: %s (error token is \"%s\")"
 msgstr "%s%s%s: %s (comhartha earráide '%s')"
 
-#: expr.c:1573
+#: expr.c:1578
 msgid "invalid arithmetic base"
 msgstr "Bonnuimhir uimhríochtúil neamhbhailí."
 
-#: expr.c:1582
+#: expr.c:1587
 #, fuzzy
 msgid "invalid integer constant"
 msgstr "%s: comhaireamh neamhbhailí línte"
 
-#: expr.c:1598
+#: expr.c:1603
 msgid "value too great for base"
 msgstr "Tá an luach rómhór don bhonnuimhir."
 
-#: expr.c:1647
+#: expr.c:1652
 #, c-format
 msgid "%s: expression error\n"
 msgstr "%s: earráid sloinn\n"
@@ -1192,7 +1202,7 @@ msgstr "%s: earráid sloinn\n"
 msgid "getcwd: cannot access parent directories"
 msgstr "getcwd: ní féidir na máthairchomhadlanna a rochtain."
 
-#: input.c:99 subst.c:6069
+#: input.c:99 subst.c:6208
 #, c-format
 msgid "cannot reset nodelay mode for fd %d"
 msgstr ""
@@ -1217,167 +1227,167 @@ msgstr ""
 msgid "start_pipeline: pgrp pipe"
 msgstr "start_pipeline: pgrp píopa"
 
-#: jobs.c:906
+#: jobs.c:907
 #, c-format
 msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr ""
 
-#: jobs.c:959
+#: jobs.c:960
 #, c-format
 msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr ""
 
-#: jobs.c:1283
+#: jobs.c:1279
 #, c-format
 msgid "forked pid %d appears in running job %d"
 msgstr "Tá aitheantas an phróisis ghabhlaithe %d sa tasc %d atá ag rith"
 
-#: jobs.c:1402
+#: jobs.c:1397
 #, c-format
 msgid "deleting stopped job %d with process group %ld"
 msgstr "Tá an tasc stoptha %d leis an ngrúpa próisis %ld á scrios."
 
-#: jobs.c:1511
+#: jobs.c:1502
 #, c-format
 msgid "add_process: pid %5ld (%s) marked as still alive"
 msgstr "add_process: próiseas %5ld (%s) marcáilte mar fós beo"
 
-#: jobs.c:1850
+#: jobs.c:1839
 #, c-format
 msgid "describe_pid: %ld: no such pid"
 msgstr "describe_pid: %ld: níl an aitheantóir próisis sin ann."
 
-#: jobs.c:1865
+#: jobs.c:1854
 #, c-format
 msgid "Signal %d"
 msgstr "Comhartha %d"
 
-#: jobs.c:1879 jobs.c:1905
+#: jobs.c:1868 jobs.c:1894
 msgid "Done"
 msgstr "Déanta"
 
-#: jobs.c:1884 siglist.c:122
+#: jobs.c:1873 siglist.c:123
 msgid "Stopped"
 msgstr "Stoptha"
 
-#: jobs.c:1888
+#: jobs.c:1877
 #, c-format
 msgid "Stopped(%s)"
 msgstr "Stoptha(%s)"
 
-#: jobs.c:1892
+#: jobs.c:1881
 msgid "Running"
 msgstr "Ag Rith"
 
-#: jobs.c:1909
+#: jobs.c:1898
 #, c-format
 msgid "Done(%d)"
 msgstr "Déanta(%d)"
 
-#: jobs.c:1911
+#: jobs.c:1900
 #, c-format
 msgid "Exit %d"
 msgstr "Scoir %d"
 
-#: jobs.c:1914
+#: jobs.c:1903
 msgid "Unknown status"
 msgstr "Stádas neamhaithnid"
 
-#: jobs.c:2001
+#: jobs.c:1990
 #, c-format
 msgid "(core dumped) "
 msgstr "(cuimhne dumpáilte)"
 
-#: jobs.c:2020
+#: jobs.c:2009
 #, c-format
 msgid "  (wd: %s)"
 msgstr "  (comhadlann oibre: %s)"
 
-#: jobs.c:2259
+#: jobs.c:2250
 #, c-format
 msgid "child setpgid (%ld to %ld)"
 msgstr "setpgid macphróisis (%ld go %ld)"
 
-#: jobs.c:2617 nojobs.c:664
+#: jobs.c:2608 nojobs.c:666
 #, c-format
 msgid "wait: pid %ld is not a child of this shell"
 msgstr "wait: níl an próiseas %ld ina mhacphróiseas den bhlaosc seo."
 
-#: jobs.c:2893
+#: jobs.c:2884
 #, c-format
 msgid "wait_for: No record of process %ld"
 msgstr "wait_for: níl taifead den phróiseas %ld"
 
-#: jobs.c:3236
+#: jobs.c:3223
 #, c-format
 msgid "wait_for_job: job %d is stopped"
 msgstr "wait_for_job: tá an tasc %d stoptha."
 
-#: jobs.c:3564
+#: jobs.c:3551
 #, fuzzy, c-format
 msgid "%s: no current jobs"
 msgstr "%s: níl a léithéid de tasc ann."
 
-#: jobs.c:3571
+#: jobs.c:3558
 #, c-format
 msgid "%s: job has terminated"
 msgstr "%s: tá an tasc críochnaithe."
 
-#: jobs.c:3580
+#: jobs.c:3567
 #, c-format
 msgid "%s: job %d already in background"
 msgstr "%s: tá an tasc %d sa chúlra cheana."
 
-#: jobs.c:3806
+#: jobs.c:3793
 msgid "waitchld: turning on WNOHANG to avoid indefinite block"
 msgstr "waitchld: ag cumasú WNOHANG chun stad éiginnte a sheachaint"
 
-#: jobs.c:4320
+#: jobs.c:4307
 #, c-format
 msgid "%s: line %d: "
 msgstr "%s: líne %d: "
 
-#: jobs.c:4334 nojobs.c:919
+#: jobs.c:4321 nojobs.c:921
 #, c-format
 msgid " (core dumped)"
 msgstr " (cuimhne dumpáilte)"
 
-#: jobs.c:4346 jobs.c:4359
+#: jobs.c:4333 jobs.c:4346
 #, c-format
 msgid "(wd now: %s)\n"
 msgstr "(comhadlann oibre anois: %s)\n"
 
-#: jobs.c:4391
+#: jobs.c:4378
 msgid "initialize_job_control: getpgrp failed"
 msgstr "initialize_job_control: theip ar getpgrp"
 
-#: jobs.c:4447
+#: jobs.c:4434
 msgid "initialize_job_control: no job control in background"
 msgstr "initialize_job_control: níl rialú jabanna ar fáil sa chúlra"
 
-#: jobs.c:4463
+#: jobs.c:4450
 msgid "initialize_job_control: line discipline"
 msgstr "initialize_job_control: araíonacht líne"
 
-#: jobs.c:4473
+#: jobs.c:4460
 msgid "initialize_job_control: setpgid"
 msgstr "initialize_job_control: setpgid"
 
-#: jobs.c:4494 jobs.c:4503
+#: jobs.c:4481 jobs.c:4490
 #, c-format
 msgid "cannot set terminal process group (%d)"
 msgstr "ní féidir an grúpa próisis teirminéil a athrú (%d)"
 
-#: jobs.c:4508
+#: jobs.c:4495
 msgid "no job control in this shell"
 msgstr "Níl rialú tascanna sa bhlaosc seo."
 
-#: lib/malloc/malloc.c:353
+#: lib/malloc/malloc.c:367
 #, c-format
 msgid "malloc: failed assertion: %s\n"
 msgstr "malloc: dearbhú teipthe: %s\n"
 
-#: lib/malloc/malloc.c:369
+#: lib/malloc/malloc.c:383
 #, c-format
 msgid ""
 "\r\n"
@@ -1386,49 +1396,49 @@ msgstr ""
 "\r\n"
 "malloc: %s:%d: dearbhú ina phraiseach\r\n"
 
-#: lib/malloc/malloc.c:370 lib/malloc/malloc.c:933
+#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941
 msgid "unknown"
 msgstr "neamhaithnid"
 
-#: lib/malloc/malloc.c:882
+#: lib/malloc/malloc.c:892
 msgid "malloc: block on free list clobbered"
 msgstr "malloc: bloc ar an liosta saor scriosta"
 
-#: lib/malloc/malloc.c:972
+#: lib/malloc/malloc.c:980
 msgid "free: called with already freed block argument"
 msgstr "free: glaoite le argóint bhloic á saoradh cheana"
 
-#: lib/malloc/malloc.c:975
+#: lib/malloc/malloc.c:983
 msgid "free: called with unallocated block argument"
 msgstr "free: glaoite le argóint bhloic nár leithdháileadh"
 
-#: lib/malloc/malloc.c:994
+#: lib/malloc/malloc.c:1001
 msgid "free: underflow detected; mh_nbytes out of range"
 msgstr "free: gannsreabhadh; tá mh_nbytes as raon"
 
-#: lib/malloc/malloc.c:1001
+#: lib/malloc/malloc.c:1007
 #, fuzzy
 msgid "free: underflow detected; magic8 corrupted"
 msgstr "free: gannsreabhadh; tá mh_nbytes as raon"
 
-#: lib/malloc/malloc.c:1009
+#: lib/malloc/malloc.c:1014
 msgid "free: start and end chunk sizes differ"
 msgstr "free: ní ionann méid na smután túis agus deiridh"
 
-#: lib/malloc/malloc.c:1119
+#: lib/malloc/malloc.c:1176
 msgid "realloc: called with unallocated block argument"
 msgstr "realloc: glaoite le argóint bhloic nár leithdháileadh"
 
-#: lib/malloc/malloc.c:1134
+#: lib/malloc/malloc.c:1191
 msgid "realloc: underflow detected; mh_nbytes out of range"
 msgstr "realloc: gannsreabhadh; tá mh_nbytes as raon"
 
-#: lib/malloc/malloc.c:1141
+#: lib/malloc/malloc.c:1197
 #, fuzzy
 msgid "realloc: underflow detected; magic8 corrupted"
 msgstr "realloc: gannsreabhadh; tá mh_nbytes as raon"
 
-#: lib/malloc/malloc.c:1150
+#: lib/malloc/malloc.c:1205
 msgid "realloc: start and end chunk sizes differ"
 msgstr "realloc: ní ionann méideanna na smután túis agus deiridh"
 
@@ -1471,22 +1481,22 @@ msgstr "%s: drochshonrú conaire líonra"
 msgid "network operations not supported"
 msgstr "Ní thacaítear le oibríochtaí líonra."
 
-#: locale.c:217
+#: locale.c:219
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s)"
 msgstr "setlocale: LC_ALL: ní féidir an logchaighdeán a athrú (%s)"
 
-#: locale.c:219
+#: locale.c:221
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s): %s"
 msgstr "setlocale: LC_ALL: ní féidir an logchaighdeán a athrú (%s): %s"
 
-#: locale.c:292
+#: locale.c:294
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s)"
 msgstr "setlocale: %s: ní féidir an logchaighdeán a athrú (%s)"
 
-#: locale.c:294
+#: locale.c:296
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s): %s"
 msgstr "setlocale: %s: ní féidir an logchaighdeán a athrú (%s): %s"
@@ -1504,37 +1514,37 @@ msgstr "Tá ríomhphost nua agat i $_"
 msgid "The mail in %s has been read\n"
 msgstr "Tá an ríomhphost i %s léite\n"
 
-#: make_cmd.c:317
+#: make_cmd.c:314
 msgid "syntax error: arithmetic expression required"
 msgstr "Earráid chomhréire: tá slonn uimhríochtúil de dhith."
 
-#: make_cmd.c:319
+#: make_cmd.c:316
 msgid "syntax error: `;' unexpected"
 msgstr "Earráid chomhréire: ';' gan súil leis."
 
-#: make_cmd.c:320
+#: make_cmd.c:317
 #, c-format
 msgid "syntax error: `((%s))'"
 msgstr "Earráid chomhréire: '((%s))'"
 
-#: make_cmd.c:572
+#: make_cmd.c:569
 #, c-format
 msgid "make_here_document: bad instruction type %d"
 msgstr "make_here_document: drochchineál ordaithe %d"
 
-#: make_cmd.c:657
+#: make_cmd.c:668
 #, c-format
 msgid "here-document at line %d delimited by end-of-file (wanted `%s')"
 msgstr ""
 "Cáipéis leabaithe ag líne %d teormharcáilte le deireadh comhaid (\"%s\" á "
 "lorg)"
 
-#: make_cmd.c:756
+#: make_cmd.c:769
 #, c-format
 msgid "make_redirection: redirection instruction `%d' out of range"
 msgstr "make_redirection: ordú atreoraithe \"%d\" as raon."
 
-#: parse.y:2393
+#: parse.y:2428
 #, c-format
 msgid ""
 "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line "
@@ -1543,106 +1553,106 @@ msgstr ""
 "shell_getc: tá méid an líne ionchuir blaoisce (%zu) níos mó ná SIZE_MAX "
 "(%lu): líne giorraithe"
 
-#: parse.y:2826
+#: parse.y:2921
 msgid "maximum here-document count exceeded"
 msgstr "Imithe thar uasfhad na cáipéise-anseo"
 
-#: parse.y:3581 parse.y:3957 parse.y:4556
+#: parse.y:3684 parse.y:4244 parse.y:6148
 #, c-format
 msgid "unexpected EOF while looking for matching `%c'"
 msgstr "Deireadh comhaid gan súil leis agus \"%c\" a mheaitseálann á lorg."
 
-#: parse.y:4696
+#: parse.y:4452
 msgid "unexpected EOF while looking for `]]'"
 msgstr "Deireadh comhaid gan súil leis agus \"]]\" á lorg."
 
-#: parse.y:4701
+#: parse.y:4457
 #, c-format
 msgid "syntax error in conditional expression: unexpected token `%s'"
 msgstr ""
 "Earráid chomhréire i slonn coinníollach: comhartha \"%s\" gan suil leis."
 
-#: parse.y:4705
+#: parse.y:4461
 msgid "syntax error in conditional expression"
 msgstr "Earráid chomhréire i slonn coinníollach."
 
-#: parse.y:4783
+#: parse.y:4539
 #, c-format
 msgid "unexpected token `%s', expected `)'"
 msgstr "Comhartha '%s' gan súil leis; ag súil le ')'."
 
-#: parse.y:4787
+#: parse.y:4543
 msgid "expected `)'"
 msgstr "Ag súil le \")\""
 
-#: parse.y:4815
+#: parse.y:4571
 #, c-format
 msgid "unexpected argument `%s' to conditional unary operator"
 msgstr "Argóint \"%s\" gan súil lei go hoibreoir aonártha coinníollach."
 
-#: parse.y:4819
+#: parse.y:4575
 msgid "unexpected argument to conditional unary operator"
 msgstr "Argóint gan súil lei go hoibreoir coinníollach aonártha ."
 
-#: parse.y:4865
+#: parse.y:4621
 #, c-format
 msgid "unexpected token `%s', conditional binary operator expected"
 msgstr ""
 "Comhartha \"%s\" gan súil leis. Bhíothas ag súil le hoibreoir coinníollach "
 "dénártha."
 
-#: parse.y:4869
+#: parse.y:4625
 msgid "conditional binary operator expected"
 msgstr "Bhíothas ag súil le hoibreoir coinníollach dénártha."
 
-#: parse.y:4891
+#: parse.y:4647
 #, c-format
 msgid "unexpected argument `%s' to conditional binary operator"
 msgstr "Argóint '%s' gan súil lei go hoibreoir dénártha coinníollach."
 
-#: parse.y:4895
+#: parse.y:4651
 msgid "unexpected argument to conditional binary operator"
 msgstr "Argóint gan súil lei go hoibreoir dénártha coinníollach."
 
-#: parse.y:4906
+#: parse.y:4662
 #, c-format
 msgid "unexpected token `%c' in conditional command"
 msgstr "Comhartha '%c' gan súil leis in ordú coinníollach."
 
-#: parse.y:4909
+#: parse.y:4665
 #, c-format
 msgid "unexpected token `%s' in conditional command"
 msgstr "Comhartha \"%s\" gan súil leis in ordú coinníollach."
 
-#: parse.y:4913
+#: parse.y:4669
 #, c-format
 msgid "unexpected token %d in conditional command"
 msgstr "Comhartha %d gan súil leis in ordú coinníollach."
 
-#: parse.y:6336
+#: parse.y:6118
 #, c-format
 msgid "syntax error near unexpected token `%s'"
 msgstr "Earráid chomhréire in aice comhartha '%s' nach rabhthas ag súil leis."
 
-#: parse.y:6355
+#: parse.y:6137
 #, c-format
 msgid "syntax error near `%s'"
 msgstr "Earráid chomhréire in aice '%s'"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error: unexpected end of file"
 msgstr "Earráid chomhréire: deireadh comhaid gan súil leis."
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error"
 msgstr "Earráid chomhréire"
 
-#: parse.y:6428
+#: parse.y:6216
 #, c-format
 msgid "Use \"%s\" to leave the shell.\n"
 msgstr "Úsáid '%s' le scoir den mblaosc.\n"
 
-#: parse.y:6602
+#: parse.y:6394
 msgid "unexpected EOF while looking for matching `)'"
 msgstr "Deireadh comhaid gan súil leis agus ')' á lorg le meaitseáil."
 
@@ -1680,100 +1690,100 @@ msgstr "xtrace_set: pointeoir folamh comhaid"
 msgid "xtrace fd (%d) != fileno xtrace fp (%d)"
 msgstr "xtrace fd (%d) != fileno xtrace fp (%d)"
 
-#: print_cmd.c:1540
+#: print_cmd.c:1545
 #, c-format
 msgid "cprintf: `%c': invalid format character"
 msgstr "cprintf: '%c': carachtar formáide neamhbhailí"
 
-#: redir.c:149 redir.c:197
+#: redir.c:150 redir.c:198
 msgid "file descriptor out of range"
 msgstr "tuairisceoir comhaid as raon"
 
-#: redir.c:204
+#: redir.c:205
 #, c-format
 msgid "%s: ambiguous redirect"
 msgstr "%s: atreorú athbhríoch"
 
-#: redir.c:208
+#: redir.c:209
 #, c-format
 msgid "%s: cannot overwrite existing file"
 msgstr "%s: ní féidir comhad atá ann cheana a fhorscríobh."
 
-#: redir.c:213
+#: redir.c:214
 #, c-format
 msgid "%s: restricted: cannot redirect output"
 msgstr "%s: srianta: ní féidir aschur a atreorú."
 
-#: redir.c:218
+#: redir.c:219
 #, c-format
 msgid "cannot create temp file for here-document: %s"
 msgstr "ní féidir cáipéis shealadach a chruthú don cháipéis leabaithe: %s"
 
-#: redir.c:222
+#: redir.c:223
 #, c-format
 msgid "%s: cannot assign fd to variable"
 msgstr "%s: ní féidir tuairisceoir comhaid a shannadh go hathróg."
 
-#: redir.c:649
+#: redir.c:650
 msgid "/dev/(tcp|udp)/host/port not supported without networking"
 msgstr "Ní thacaítear le /dev/(tcp|udp)/óstríomhaire/port gan líonrú."
 
-#: redir.c:938 redir.c:1053 redir.c:1114 redir.c:1284
+#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303
 msgid "redirection error: cannot duplicate fd"
 msgstr "Earráid atreoraithe: ní féidir an tuairisceoir comhaid a dhúbailt."
 
-#: shell.c:347
+#: shell.c:353
 msgid "could not find /tmp, please create!"
 msgstr "Níorbh fhéidir /tmp a aimsiú. Cruthaigh é le do thoil!"
 
-#: shell.c:351
+#: shell.c:357
 msgid "/tmp must be a valid directory name"
 msgstr "Caithfidh /tmp bheith ina ainm comhadlainne bailí."
 
-#: shell.c:804
+#: shell.c:826
 msgid "pretty-printing mode ignored in interactive shells"
 msgstr ""
 "Tabharfar neamhaird ar an mód deaphriontála i mblaoscanna idirghníomhacha."
 
-#: shell.c:948
+#: shell.c:972
 #, c-format
 msgid "%c%c: invalid option"
 msgstr "%c%c: rogha neamhbhailí"
 
-#: shell.c:1319
+#: shell.c:1343
 #, c-format
 msgid "cannot set uid to %d: effective uid %d"
 msgstr ""
 "Ní féidir an t-aitheantóir úsáideora (uid) a athrú go %d: aitheantóir "
 "éifeachtach %d"
 
-#: shell.c:1330
+#: shell.c:1354
 #, c-format
 msgid "cannot set gid to %d: effective gid %d"
 msgstr ""
 "Ní féidir an t-aitheantóir grúpa (gid) a athrú go %d: aitheantóir "
 "éifeachtach %d"
 
-#: shell.c:1518
+#: shell.c:1544
 msgid "cannot start debugger; debugging mode disabled"
 msgstr ""
 "Ní féidir an dífhabhtóir a thosú; tá an mód dífhabhtaithe díchumasaithe."
 
-#: shell.c:1632
+#: shell.c:1658
 #, c-format
 msgid "%s: Is a directory"
 msgstr "%s: is comhadlann é"
 
-#: shell.c:1881
+#: shell.c:1907
 msgid "I have no name!"
 msgstr "Níl ainm orm!"
 
-#: shell.c:2035
+#: shell.c:2061
 #, c-format
 msgid "GNU bash, version %s-(%s)\n"
 msgstr "GNU bash, leagan %s-(%s)\n"
 
-#: shell.c:2036
+#: shell.c:2062
 #, c-format
 msgid ""
 "Usage:\t%s [GNU long option] [option] ...\n"
@@ -1782,314 +1792,314 @@ msgstr ""
 "Úsáid:\t%s [rogha fada GNU] [rogha] ...\n"
 "\t%s [rogha fada GNU] [rogha] comhad_scripte ...\n"
 
-#: shell.c:2038
+#: shell.c:2064
 msgid "GNU long options:\n"
 msgstr "Roghanna fada GNU:\n"
 
-#: shell.c:2042
+#: shell.c:2068
 msgid "Shell options:\n"
 msgstr "Roghanna blaoisce:\n"
 
-#: shell.c:2043
+#: shell.c:2069
 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n"
 msgstr "\t-ilrsD nó -c ordú nó -O rogha_shopt\t\t(glaoch amháin)\n"
 
-#: shell.c:2062
+#: shell.c:2088
 #, c-format
 msgid "\t-%s or -o option\n"
 msgstr "\t-%s nó -o rogha\n"
 
-#: shell.c:2068
+#: shell.c:2094
 #, c-format
 msgid "Type `%s -c \"help set\"' for more information about shell options.\n"
 msgstr ""
 "Úsáid %s -c 'help set' le haghaidh tuilleadh eolais faoi roghanna blaoisce.\n"
 
-#: shell.c:2069
+#: shell.c:2095
 #, c-format
 msgid "Type `%s -c help' for more information about shell builtin commands.\n"
 msgstr ""
 "Úsáid '%s -c help' le haghaidh tuilleadh eolais faoi orduithe ionsuite "
 "blaoisce.\n"
 
-#: shell.c:2070
+#: shell.c:2096
 #, c-format
 msgid "Use the `bashbug' command to report bugs.\n"
 msgstr "Úsáid an t-ordú 'bashbug' le tuarascáil a sheoladh faoi fhabht.\n"
 
-#: shell.c:2072
+#: shell.c:2098
 #, c-format
 msgid "bash home page: <http://www.gnu.org/software/bash>\n"
 msgstr "leathanach baile bash: <http://www.gnu.org/software/bash>\n"
 
-#: shell.c:2073
+#: shell.c:2099
 #, c-format
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 msgstr "Cabhair ghinearálta le bogearraí GNU: <http://www.gnu.org/gethelp/>\n"
 
-#: sig.c:757
+#: sig.c:765
 #, c-format
 msgid "sigprocmask: %d: invalid operation"
 msgstr "sigprocmask: %d: oibríocht neamhbhailí"
 
-#: siglist.c:47
+#: siglist.c:48
 msgid "Bogus signal"
 msgstr "Droch-chomhartha"
 
-#: siglist.c:50
+#: siglist.c:51
 msgid "Hangup"
 msgstr "Crochadh"
 
-#: siglist.c:54
+#: siglist.c:55
 msgid "Interrupt"
 msgstr "Idirbhriseadh"
 
-#: siglist.c:58
+#: siglist.c:59
 msgid "Quit"
 msgstr "Scoir"
 
-#: siglist.c:62
+#: siglist.c:63
 msgid "Illegal instruction"
 msgstr "Treoir mídhleathach"
 
-#: siglist.c:66
+#: siglist.c:67
 msgid "BPT trace/trap"
 msgstr "Rianú/gaistiú brisphointe"
 
-#: siglist.c:74
+#: siglist.c:75
 msgid "ABORT instruction"
 msgstr "Treoir ABORT"
 
-#: siglist.c:78
+#: siglist.c:79
 msgid "EMT instruction"
 msgstr "Treoir EMT"
 
-#: siglist.c:82
+#: siglist.c:83
 msgid "Floating point exception"
 msgstr "Eisceacht snámhphointe"
 
-#: siglist.c:86
+#: siglist.c:87
 msgid "Killed"
 msgstr "Maraithe"
 
-#: siglist.c:90
+#: siglist.c:91
 msgid "Bus error"
 msgstr "Earráid bhus"
 
-#: siglist.c:94
+#: siglist.c:95
 msgid "Segmentation fault"
 msgstr "Fabht deighilte"
 
-#: siglist.c:98
+#: siglist.c:99
 msgid "Bad system call"
 msgstr "Droch-ghlaoch córais"
 
-#: siglist.c:102
+#: siglist.c:103
 msgid "Broken pipe"
 msgstr "Píopa briste"
 
-#: siglist.c:106
+#: siglist.c:107
 msgid "Alarm clock"
 msgstr "Clog aláraim"
 
-#: siglist.c:110
+#: siglist.c:111
 msgid "Terminated"
 msgstr "Críochnaithe"
 
-#: siglist.c:114
+#: siglist.c:115
 msgid "Urgent IO condition"
 msgstr "Staid phráinneach I/A"
 
-#: siglist.c:118
+#: siglist.c:119
 msgid "Stopped (signal)"
 msgstr "Stoptha (comhartha)"
 
-#: siglist.c:126
+#: siglist.c:127
 msgid "Continue"
 msgstr "Lean ar aghaidh"
 
-#: siglist.c:134
+#: siglist.c:135
 msgid "Child death or stop"
 msgstr "Bás macphróisis nó stopadh"
 
-#: siglist.c:138
+#: siglist.c:139
 msgid "Stopped (tty input)"
 msgstr "Stoptha (ionchur teirminéil)"
 
-#: siglist.c:142
+#: siglist.c:143
 msgid "Stopped (tty output)"
 msgstr "Stoptha (aschur teirminéil)"
 
-#: siglist.c:146
+#: siglist.c:147
 msgid "I/O ready"
 msgstr "I/A ullamh"
 
-#: siglist.c:150
+#: siglist.c:151
 msgid "CPU limit"
 msgstr "Teorainn LAP"
 
-#: siglist.c:154
+#: siglist.c:155
 msgid "File limit"
 msgstr "Teorainn chomhad"
 
-#: siglist.c:158
+#: siglist.c:159
 msgid "Alarm (virtual)"
 msgstr "Aláram (fíorúil)"
 
-#: siglist.c:162
+#: siglist.c:163
 msgid "Alarm (profile)"
 msgstr "Aláram (próifíl)"
 
-#: siglist.c:166
+#: siglist.c:167
 msgid "Window changed"
 msgstr "Fuinneog athraithe"
 
-#: siglist.c:170
+#: siglist.c:171
 msgid "Record lock"
 msgstr "Glas taifid"
 
-#: siglist.c:174
+#: siglist.c:175
 msgid "User signal 1"
 msgstr "Comhartha úsáideora 1"
 
-#: siglist.c:178
+#: siglist.c:179
 msgid "User signal 2"
 msgstr "Comhartha úsáideora 2"
 
-#: siglist.c:182
+#: siglist.c:183
 msgid "HFT input data pending"
 msgstr "sonraí ionchuir HFT ar feitheamh"
 
-#: siglist.c:186
+#: siglist.c:187
 msgid "power failure imminent"
 msgstr "teip chumhachta ar tí tarlú"
 
-#: siglist.c:190
+#: siglist.c:191
 msgid "system crash imminent"
 msgstr "cliseadh córais ar tí tarlú"
 
-#: siglist.c:194
+#: siglist.c:195
 msgid "migrate process to another CPU"
 msgstr "bog próiseas go LAP eile"
 
-#: siglist.c:198
+#: siglist.c:199
 msgid "programming error"
 msgstr "earráid ríomhchláraithe"
 
-#: siglist.c:202
+#: siglist.c:203
 msgid "HFT monitor mode granted"
 msgstr "mód monatóireachta HFT ceadaithe"
 
-#: siglist.c:206
+#: siglist.c:207
 msgid "HFT monitor mode retracted"
 msgstr "mód monatóireachta HFT cealaithe"
 
-#: siglist.c:210
+#: siglist.c:211
 msgid "HFT sound sequence has completed"
 msgstr "seicheamh fuaime HFT críochnaithe"
 
-#: siglist.c:214
+#: siglist.c:215
 msgid "Information request"
 msgstr "Iarratas faisnéise"
 
-#: siglist.c:222 siglist.c:224
+#: siglist.c:223 siglist.c:225
 #, c-format
 msgid "Unknown Signal #%d"
 msgstr "Comhartha neamhaithnid #%d"
 
-#: subst.c:1476 subst.c:1666
+#: subst.c:1480 subst.c:1670
 #, c-format
 msgid "bad substitution: no closing `%s' in %s"
 msgstr "Drochionadú: níl '%s' dúnta i %s"
 
-#: subst.c:3281
+#: subst.c:3307
 #, c-format
 msgid "%s: cannot assign list to array member"
 msgstr "%s: ní féidir liosta a shannadh go ball eagair."
 
-#: subst.c:5910 subst.c:5926
+#: subst.c:6048 subst.c:6064
 msgid "cannot make pipe for process substitution"
 msgstr "Ní féidir píopa a dhéanamh le haghaidh ionadaíocht próisis."
 
-#: subst.c:5985
+#: subst.c:6124
 msgid "cannot make child for process substitution"
 msgstr "Ní féidir macphróiseas a dhéanamh le haghaidh ionadaíocht próisis."
 
-#: subst.c:6059
+#: subst.c:6198
 #, c-format
 msgid "cannot open named pipe %s for reading"
 msgstr "Ní féidir píopa ainmnithe %s a oscailt le haghaidh léamh."
 
-#: subst.c:6061
+#: subst.c:6200
 #, c-format
 msgid "cannot open named pipe %s for writing"
 msgstr "Ní féidir píopa ainmnithe %s a oscailt le haghaidh scríofa."
 
-#: subst.c:6084
+#: subst.c:6223
 #, c-format
 msgid "cannot duplicate named pipe %s as fd %d"
 msgstr ""
 "Ní féidir an píopa ainmnithe %s a dhúbailt mar thuairisceoir comhaid %d."
 
-#: subst.c:6213
+#: subst.c:6370
 msgid "command substitution: ignored null byte in input"
 msgstr "ionadú orduithe: tugadh neamhaird ar ghiotán neamhnitheach san ionchur"
 
-#: subst.c:6353
+#: subst.c:6533
 msgid "cannot make pipe for command substitution"
 msgstr "Ní féidir píopa a dhéanamh le haghaidh ionadú ordaithe."
 
-#: subst.c:6397
+#: subst.c:6580
 msgid "cannot make child for command substitution"
 msgstr "Ní féidir macphróiseas a dhéanamh le haghaidh ionadú ordaithe."
 
-#: subst.c:6423
+#: subst.c:6613
 msgid "command_substitute: cannot duplicate pipe as fd 1"
 msgstr ""
 "command_substitute: ní feidir an píopa a dhúbailt mar thuairisceoir comhaid "
 "1."
 
-#: subst.c:6883 subst.c:9952
+#: subst.c:7082 subst.c:10252
 #, c-format
 msgid "%s: invalid variable name for name reference"
 msgstr "'%s': ainm neamhbhailí athróige le haghaidh tagairt ainm"
 
-#: subst.c:6979 subst.c:6997 subst.c:7169
+#: subst.c:7178 subst.c:7196 subst.c:7369
 #, c-format
 msgid "%s: invalid indirect expansion"
 msgstr "%s: fairsingiú neamhbhailí indíreach"
 
-#: subst.c:7013 subst.c:7177
+#: subst.c:7212 subst.c:7377
 #, c-format
 msgid "%s: invalid variable name"
 msgstr "%s: ainm neamhbhailí athróige"
 
-#: subst.c:7256
+#: subst.c:7478
 #, c-format
 msgid "%s: parameter not set"
 msgstr "%s: paraiméadar gan socrú."
 
-#: subst.c:7258
+#: subst.c:7480
 #, c-format
 msgid "%s: parameter null or not set"
 msgstr "%s: paraiméadar neamhnitheach nó gan socrú."
 
-#: subst.c:7503 subst.c:7518
+#: subst.c:7727 subst.c:7742
 #, c-format
 msgid "%s: substring expression < 0"
 msgstr "%s: slonn fotheaghráin < 0"
 
-#: subst.c:9281 subst.c:9302
+#: subst.c:9560 subst.c:9587
 #, c-format
 msgid "%s: bad substitution"
 msgstr "%s: drochionadú"
 
-#: subst.c:9390
+#: subst.c:9678
 #, c-format
 msgid "$%s: cannot assign in this way"
 msgstr "$%s: ní féidir sannadh mar seo."
 
-#: subst.c:9814
+#: subst.c:10111
 msgid ""
 "future versions of the shell will force evaluation as an arithmetic "
 "substitution"
@@ -2097,12 +2107,12 @@ msgstr ""
 "i leaganacha den bhlaosc amach anseo, beidh luachálú mar ionadú uimhríochta "
 "éigeantach"
 
-#: subst.c:10367
+#: subst.c:10795
 #, c-format
 msgid "bad substitution: no closing \"`\" in %s"
 msgstr "drochionadú: níl  '`' dúnta i %s"
 
-#: subst.c:11434
+#: subst.c:11874
 #, c-format
 msgid "no match: %s"
 msgstr "gan meaitseáil: %s"
@@ -2125,21 +2135,21 @@ msgstr "Ag súil le ')'"
 msgid "`)' expected, found %s"
 msgstr "Ag súil le ')', ach fuarthas %s."
 
-#: test.c:466 test.c:799
+#: test.c:469 test.c:814
 #, c-format
 msgid "%s: binary operator expected"
 msgstr "%s: ag súil le hoibreoir dénártha."
 
-#: test.c:756 test.c:759
+#: test.c:771 test.c:774
 #, c-format
 msgid "%s: unary operator expected"
 msgstr "%s: ag súil le hoibreoir aonártha."
 
-#: test.c:881
+#: test.c:896
 msgid "missing `]'"
 msgstr "']' ar iarraidh"
 
-#: test.c:899
+#: test.c:914
 #, fuzzy, c-format
 msgid "syntax error: `%s' unexpected"
 msgstr "Earráid chomhréire: ';' gan súil leis."
@@ -2148,17 +2158,17 @@ msgstr "Earráid chomhréire: ';' gan súil leis."
 msgid "invalid signal number"
 msgstr "Uimhir chomhartha neamhbhailí"
 
-#: trap.c:325
+#: trap.c:323
 #, c-format
 msgid "trap handler: maximum trap handler level exceeded (%d)"
 msgstr "eval: imithe thar uasleibhéal na láimhseálaithe gaistí (%d)"
 
-#: trap.c:414
+#: trap.c:412
 #, c-format
 msgid "run_pending_traps: bad value in trap_list[%d]: %p"
 msgstr "run_pending_traps: drochluach sa liosta_gaistí[%d]: %p"
 
-#: trap.c:418
+#: trap.c:416
 #, c-format
 msgid ""
 "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
@@ -2166,84 +2176,89 @@ msgstr ""
 "run_pending_traps: is SIG_DFL an láimhseálaí comharthaí; %d (%s) á "
 "athsheoladh chugam féin."
 
-#: trap.c:487
+#: trap.c:509
 #, c-format
 msgid "trap_handler: bad signal %d"
 msgstr "trap_handler: droch-chomhartha %d"
 
-#: variables.c:421
+#: variables.c:424
 #, c-format
 msgid "error importing function definition for `%s'"
 msgstr "Earráid agus sainmhíniú na feidhme '%s' á iompórtáil."
 
-#: variables.c:833
+#: variables.c:838
 #, c-format
 msgid "shell level (%d) too high, resetting to 1"
 msgstr "Tá an leibhéal blaoisce (%d) ró-ard; á athshocrú go 1."
 
-#: variables.c:2674
+#: variables.c:2642
 msgid "make_local_variable: no function context at current scope"
 msgstr "make_local_variable: níl comhthéacs feidhme sa scóip reatha."
 
-#: variables.c:2693
+#: variables.c:2661
 #, c-format
 msgid "%s: variable may not be assigned value"
 msgstr "%s: ní féidir luach a shannadh ar an athróg"
 
-#: variables.c:3475
+#: variables.c:2818 variables.c:2874
+#, c-format
+msgid "%s: cannot inherit value from incompatible type"
+msgstr ""
+
+#: variables.c:3459
 #, c-format
 msgid "%s: assigning integer to name reference"
 msgstr "%s: slánuimhir a sannadh go tagairt ainm"
 
-#: variables.c:4404
+#: variables.c:4390
 msgid "all_local_variables: no function context at current scope"
 msgstr "all_local_variables: níl comhthéacs feidhme sa scóip reatha"
 
-#: variables.c:4771
+#: variables.c:4757
 #, c-format
 msgid "%s has null exportstr"
 msgstr "Tá teaghrán easpórtála neamhnitheach ag %s"
 
-#: variables.c:4776 variables.c:4785
+#: variables.c:4762 variables.c:4771
 #, c-format
 msgid "invalid character %d in exportstr for %s"
 msgstr "Carachtar neamhbhailí %d sa teaghrán easpórtála le haghaidh %s."
 
-#: variables.c:4791
+#: variables.c:4777
 #, c-format
 msgid "no `=' in exportstr for %s"
 msgstr "Níl '=' sa teaghrán easpórtála le haghaidh %s."
 
-#: variables.c:5331
+#: variables.c:5317
 msgid "pop_var_context: head of shell_variables not a function context"
 msgstr "pop_var_context: ní comhthéacs feidhme é ceann shell_variables"
 
-#: variables.c:5344
+#: variables.c:5330
 msgid "pop_var_context: no global_variables context"
 msgstr "pop_var_context: níl comhthéacs global_variables ann"
 
-#: variables.c:5424
+#: variables.c:5410
 msgid "pop_scope: head of shell_variables not a temporary environment scope"
 msgstr "pop_scope: ní scóip shealadach thimpeallachta é ceann shell_variables"
 
-#: variables.c:6387
+#: variables.c:6400
 #, c-format
 msgid "%s: %s: cannot open as FILE"
 msgstr "%s: %s: ní féidir a oscailt mar CHOMHAD"
 
-#: variables.c:6392
+#: variables.c:6405
 #, c-format
 msgid "%s: %s: invalid value for trace file descriptor"
 msgstr "%s: %s: luach neamhbhailí le haghaidh tuairisceoir comhaid rianaithe"
 
-#: variables.c:6437
+#: variables.c:6450
 #, c-format
 msgid "%s: %s: compatibility value out of range"
 msgstr "%s: %s: luach comhoiriúnachta as raon"
 
 #: version.c:46 version2.c:46
 #, fuzzy
-msgid "Copyright (C) 2020 Free Software Foundation, Inc."
+msgid "Copyright (C) 2022 Free Software Foundation, Inc."
 msgstr "Cóipcheart © 2012 Free Software Foundation, Inc."
 
 #: version.c:47 version2.c:47
@@ -2336,12 +2351,16 @@ msgstr "command [-pVv] ORDÚ [ARGÓINT ...]"
 
 #: builtins.c:78
 #, fuzzy
-msgid "declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]"
+msgid ""
+"declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] "
+"[name ...]"
 msgstr "declare [-aAfFgilnrtux] [-p] [AINM[=LUACH] ...]"
 
 #: builtins.c:80
 #, fuzzy
-msgid "typeset [-aAfFgiIlnrtux] [-p] name[=value] ..."
+msgid ""
+"typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] "
+"[name ...]"
 msgstr "typeset [-aAfFgilnrtux] [-p] AINM[=LUACH] ..."
 
 #: builtins.c:82
@@ -2445,7 +2464,8 @@ msgid "return [n]"
 msgstr "return [n]"
 
 #: builtins.c:142
-msgid "set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]"
+#, fuzzy
+msgid "set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]"
 msgstr "set [-abefhkmnptuvxBCHP] [-o AINM-ROGHA] [--] [ARGÓINT ...]"
 
 #: builtins.c:144
@@ -2493,7 +2513,8 @@ msgid "type [-afptP] name [name ...]"
 msgstr "type [-afptP] ainm [ainm ...]"
 
 #: builtins.c:171
-msgid "ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]"
+#, fuzzy
+msgid "ulimit [-SHabcdefiklmnpqrstuvxPRT] [limit]"
 msgstr "ulimit [-SHabcdefiklmnpqrstuvxPT] [teorainn]"
 
 #: builtins.c:174
@@ -2538,11 +2559,13 @@ msgstr ""
 "ORDUITHE; ] fi"
 
 #: builtins.c:196
-msgid "while COMMANDS; do COMMANDS; done"
+#, fuzzy
+msgid "while COMMANDS; do COMMANDS-2; done"
 msgstr "while ORDUITHE1; do ORDUITHE2; done"
 
 #: builtins.c:198
-msgid "until COMMANDS; do COMMANDS; done"
+#, fuzzy
+msgid "until COMMANDS; do COMMANDS-2; done"
 msgstr "until ORDUITHE; do ORDUITHE; done"
 
 #: builtins.c:200
@@ -3799,7 +3822,9 @@ msgid ""
 "    word to the second NAME, and so on, with any leftover words assigned to\n"
 "    the last NAME.  Only the characters found in $IFS are recognized as "
 "word\n"
-"    delimiters.\n"
+"    delimiters. By default, the backslash character escapes delimiter "
+"characters\n"
+"    and newline.\n"
 "    \n"
 "    If no NAMEs are supplied, the line read is stored in the REPLY "
 "variable.\n"
@@ -3840,7 +3865,7 @@ msgid ""
 "    or an invalid file descriptor is supplied as the argument to -u."
 msgstr ""
 
-#: builtins.c:1041
+#: builtins.c:1042
 msgid ""
 "Return from a shell function.\n"
 "    \n"
@@ -3862,7 +3887,7 @@ msgstr ""
 "    Aischuirtear N, nó teip sa chás nach bhfuil an bhlaosc ag rith feidhme "
 "nó scripte."
 
-#: builtins.c:1054
+#: builtins.c:1055
 msgid ""
 "Set or unset values of shell options and positional parameters.\n"
 "    \n"
@@ -3948,7 +3973,7 @@ msgid ""
 "    Returns success unless an invalid option is given."
 msgstr ""
 
-#: builtins.c:1139
+#: builtins.c:1140
 msgid ""
 "Unset values and attributes of shell variables and functions.\n"
 "    \n"
@@ -3970,7 +3995,7 @@ msgid ""
 "    Returns success unless an invalid option is given or a NAME is read-only."
 msgstr ""
 
-#: builtins.c:1161
+#: builtins.c:1162
 msgid ""
 "Set export attribute for shell variables.\n"
 "    \n"
@@ -4006,7 +4031,7 @@ msgstr ""
 "    Aischuirtear rath ach sa chás go dtugtar rogha neamhbhailí nó go bhfuil "
 "AINM neamhbhailí."
 
-#: builtins.c:1180
+#: builtins.c:1181
 msgid ""
 "Mark shell variables as unchangeable.\n"
 "    \n"
@@ -4027,7 +4052,7 @@ msgid ""
 "    Returns success unless an invalid option is given or NAME is invalid."
 msgstr ""
 
-#: builtins.c:1202
+#: builtins.c:1203
 msgid ""
 "Shift positional parameters.\n"
 "    \n"
@@ -4045,7 +4070,7 @@ msgstr ""
 "    Stádas Scortha:\n"
 "    Aischuirtear rath ach sa chás go bhfuil N diúltach, nó níos mó ná $#."
 
-#: builtins.c:1214 builtins.c:1229
+#: builtins.c:1215 builtins.c:1230
 msgid ""
 "Execute commands from a file in the current shell.\n"
 "    \n"
@@ -4070,7 +4095,7 @@ msgstr ""
 "AINM_COMHAID.\n"
 "    Teipeann air sa chás nach féidir AINM_CHOMHAID a léamh."
 
-#: builtins.c:1245
+#: builtins.c:1246
 msgid ""
 "Suspend shell execution.\n"
 "    \n"
@@ -4097,7 +4122,7 @@ msgstr ""
 "    Aischuirtear rath ach sa chás nach bhfuil rialú tascanna cumasaithe,\n"
 "    nó go dtarlaíonn earráid."
 
-#: builtins.c:1261
+#: builtins.c:1262
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -4180,7 +4205,7 @@ msgid ""
 "    false or an invalid argument is given."
 msgstr ""
 
-#: builtins.c:1343
+#: builtins.c:1344
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -4193,7 +4218,7 @@ msgstr ""
 "    caithfear \"]\" go díreach a bheith ann mar an argóint\n"
 "    dheireanach, le bheith comhoiriúnach leis an \"[\" ag an tús."
 
-#: builtins.c:1352
+#: builtins.c:1353
 msgid ""
 "Display process times.\n"
 "    \n"
@@ -4213,7 +4238,7 @@ msgstr ""
 "    Stádas Scortha:\n"
 "    Éiríonn leis i gcónaí."
 
-#: builtins.c:1364
+#: builtins.c:1365
 msgid ""
 "Trap signals and other events.\n"
 "    \n"
@@ -4257,7 +4282,7 @@ msgid ""
 "given."
 msgstr ""
 
-#: builtins.c:1400
+#: builtins.c:1401
 msgid ""
 "Display information about command type.\n"
 "    \n"
@@ -4287,7 +4312,7 @@ msgid ""
 "found."
 msgstr ""
 
-#: builtins.c:1431
+#: builtins.c:1432
 msgid ""
 "Modify shell resource limits.\n"
 "    \n"
@@ -4337,7 +4362,7 @@ msgid ""
 "    Returns success unless an invalid option is supplied or an error occurs."
 msgstr ""
 
-#: builtins.c:1482
+#: builtins.c:1483
 msgid ""
 "Display or set file mode mask.\n"
 "    \n"
@@ -4371,7 +4396,7 @@ msgstr ""
 "    Aischuirtear rath ach sa chás go bhfuil MÓD neamhbhailí\n"
 "    nó go sonraítear rogha neamhbhailí."
 
-#: builtins.c:1502
+#: builtins.c:1503
 #, fuzzy
 msgid ""
 "Wait for job completion and return exit status.\n"
@@ -4428,7 +4453,7 @@ msgstr ""
 "tá\n"
 "    AITHEANTAS neamhbhailí nó má sonraítear rogha neamhbhailí."
 
-#: builtins.c:1533
+#: builtins.c:1534
 msgid ""
 "Wait for process completion and return exit status.\n"
 "    \n"
@@ -4455,7 +4480,7 @@ msgstr ""
 "    ordú má tá AITHEANTAS_PRÓISIS neamhbhailí nó má shonraítear\n"
 "    rogha neamhbhailí."
 
-#: builtins.c:1548
+#: builtins.c:1549
 msgid ""
 "Execute commands for each member in a list.\n"
 "    \n"
@@ -4477,7 +4502,7 @@ msgstr ""
 "    Stádas Scortha:\n"
 "    Aischuirtear stádas an ordaithe dheireanaigh a ritheadh."
 
-#: builtins.c:1562
+#: builtins.c:1563
 msgid ""
 "Arithmetic for loop.\n"
 "    \n"
@@ -4508,7 +4533,7 @@ msgstr ""
 "    Stádas Scortha:\n"
 "    Aischuirtear stádas an ordaithe dheireanaigh a ritheadh."
 
-#: builtins.c:1580
+#: builtins.c:1581
 msgid ""
 "Select words from a list and execute commands.\n"
 "    \n"
@@ -4528,7 +4553,7 @@ msgid ""
 "    Returns the status of the last command executed."
 msgstr ""
 
-#: builtins.c:1601
+#: builtins.c:1602
 msgid ""
 "Report time consumed by pipeline's execution.\n"
 "    \n"
@@ -4557,7 +4582,7 @@ msgstr ""
 "    Stádas Scortha:\n"
 "    Is é stadas aischuir PÍBLÍNE an stádas aischuir ó \"time\"."
 
-#: builtins.c:1618
+#: builtins.c:1619
 msgid ""
 "Execute commands based on pattern matching.\n"
 "    \n"
@@ -4575,7 +4600,7 @@ msgstr ""
 "    Stádas Scortha:\n"
 "    Aischuirtear stádas an ordaithe dheireanaigh a ritheadh."
 
-#: builtins.c:1630
+#: builtins.c:1631
 msgid ""
 "Execute commands based on conditional.\n"
 "    \n"
@@ -4610,12 +4635,14 @@ msgstr ""
 "    Stádas Scortha:\n"
 "    Aischuirtear stádas scortha an ordaithe dheireanaigh a ritheadh."
 
-#: builtins.c:1647
+#: builtins.c:1648
+#, fuzzy
 msgid ""
 "Execute commands as long as a test succeeds.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `while' COMMANDS has an exit status of zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS "
+"has\n"
+"    an exit status of zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
@@ -4628,12 +4655,14 @@ msgstr ""
 "   Stádas Scortha:\n"
 "   Aischuirtear stádas an ordaithe deireanach a ritheadh."
 
-#: builtins.c:1659
+#: builtins.c:1660
+#, fuzzy
 msgid ""
 "Execute commands as long as a test does not succeed.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `until' COMMANDS has an exit status which is not zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS "
+"has\n"
+"    an exit status which is not zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
@@ -4646,7 +4675,7 @@ msgstr ""
 "   Stádas Scortha:\n"
 "   Aischuirtear stádas an ordaithe deireanach a ritheadh."
 
-#: builtins.c:1671
+#: builtins.c:1672
 msgid ""
 "Create a coprocess named NAME.\n"
 "    \n"
@@ -4668,7 +4697,7 @@ msgstr ""
 "    Stádas Scortha:\n"
 "    Aischuireann an t-ordú \"coproc\" stádas scortha de 0."
 
-#: builtins.c:1685
+#: builtins.c:1686
 msgid ""
 "Define shell function.\n"
 "    \n"
@@ -4692,7 +4721,7 @@ msgstr ""
 "    Stádas Scortha:\n"
 "    Aischuirtear rath mura bhfuil AINM inléite amháin."
 
-#: builtins.c:1699
+#: builtins.c:1700
 msgid ""
 "Group commands as a unit.\n"
 "    \n"
@@ -4710,7 +4739,7 @@ msgstr ""
 "    Stádas Scortha:\n"
 "    Aischuirtear stádas an ordaithe dheireanaigh a ritheadh."
 
-#: builtins.c:1711
+#: builtins.c:1712
 msgid ""
 "Resume job in foreground.\n"
 "    \n"
@@ -4733,7 +4762,7 @@ msgstr ""
 "   Stádas Scortha:\n"
 "   Aischuirtear stádas an taisc atosaithe."
 
-#: builtins.c:1726
+#: builtins.c:1727
 #, fuzzy
 msgid ""
 "Evaluate arithmetic expression.\n"
@@ -4754,7 +4783,7 @@ msgstr ""
 "    Aischuirtear 1 más 0 an luach atá ag SLONN; aischuirtear 0 i gcásanna "
 "eile."
 
-#: builtins.c:1738
+#: builtins.c:1739
 msgid ""
 "Execute conditional command.\n"
 "    \n"
@@ -4782,7 +4811,7 @@ msgid ""
 "    0 or 1 depending on value of EXPRESSION."
 msgstr ""
 
-#: builtins.c:1764
+#: builtins.c:1765
 msgid ""
 "Common shell variable names and usage.\n"
 "    \n"
@@ -4888,7 +4917,7 @@ msgstr ""
 "    HISTIGNORE\tLiosta deighilte le hidirstaid de phatrúin a shonraíonn\n"
 "    \t\tna horduithe a chuirfear leis an liosta staire.\n"
 
-#: builtins.c:1821
+#: builtins.c:1822
 msgid ""
 "Add directories to stack.\n"
 "    \n"
@@ -4947,7 +4976,7 @@ msgstr ""
 "    Aischuirtear rath ach sa chás go sonraítear argóint neamhbhailí, nó\n"
 "    go dteipeann ar an athrú comhadlainne."
 
-#: builtins.c:1855
+#: builtins.c:1856
 msgid ""
 "Remove directories from stack.\n"
 "    \n"
@@ -5003,7 +5032,7 @@ msgstr ""
 "    Aischuirtear rath ach sa chás go sonraítear argóint neamhbhailí, nó\n"
 "    go dteipeann ar an athrú comhadlainne."
 
-#: builtins.c:1885
+#: builtins.c:1886
 msgid ""
 "Display directory stack.\n"
 "    \n"
@@ -5060,7 +5089,7 @@ msgstr ""
 "      Aischuirtear rath muna bhfuil rogha neamhbhailí ann nó muna tharla "
 "earráid."
 
-#: builtins.c:1916
+#: builtins.c:1917
 msgid ""
 "Set and unset shell options.\n"
 "    \n"
@@ -5099,7 +5128,7 @@ msgstr ""
 "thugtar\n"
 "    rogha neamhbhailí, nó má tá AINM_ROGHA díchumasaithe."
 
-#: builtins.c:1937
+#: builtins.c:1938
 msgid ""
 "Formats and prints ARGUMENTS under control of the FORMAT.\n"
 "    \n"
@@ -5122,6 +5151,8 @@ msgid ""
 "    \n"
 "      %b\texpand backslash escape sequences in the corresponding argument\n"
 "      %q\tquote the argument in a way that can be reused as shell input\n"
+"      %Q\tlike %q, but apply any precision to the unquoted argument before\n"
+"    \t\tquoting\n"
 "      %(fmt)T\toutput the date-time string resulting from using FMT as a "
 "format\n"
 "    \t        string for strftime(3)\n"
@@ -5138,7 +5169,7 @@ msgid ""
 "    error occurs."
 msgstr ""
 
-#: builtins.c:1971
+#: builtins.c:1974
 msgid ""
 "Specify how arguments are to be completed by Readline.\n"
 "    \n"
@@ -5169,7 +5200,7 @@ msgid ""
 "    Returns success unless an invalid option is supplied or an error occurs."
 msgstr ""
 
-#: builtins.c:2001
+#: builtins.c:2004
 msgid ""
 "Display possible completions depending on the options.\n"
 "    \n"
@@ -5192,7 +5223,7 @@ msgstr ""
 "    Aischuirtear rath ach sa chás go dtugtar rogha neamhbhailí nó go "
 "dtarlaíonn earráid."
 
-#: builtins.c:2016
+#: builtins.c:2019
 msgid ""
 "Modify or display completion options.\n"
 "    \n"
@@ -5252,7 +5283,7 @@ msgstr ""
 "    Aischuirtear rath ach sa chás go dtugtar rogha neamhbhailí, nó nach\n"
 "    bhfuil sonrú iomlánaithe ann le haghaih AINM."
 
-#: builtins.c:2047
+#: builtins.c:2050
 msgid ""
 "Read lines from the standard input into an indexed array variable.\n"
 "    \n"
@@ -5340,7 +5371,7 @@ msgstr ""
 "bhfuil\n"
 "      EAGAR inléite amháin, nó nach eagar innéacsaithe é EAGAR."
 
-#: builtins.c:2083
+#: builtins.c:2086
 msgid ""
 "Read lines from a file into an array variable.\n"
 "    \n"
@@ -5350,6 +5381,10 @@ msgstr ""
 "    \n"
 "    Comhchiallach le \"mapfile\"."
 
+#, c-format
+#~ msgid "%s: invalid associative array key"
+#~ msgstr "%s: eochair neamhbhailí eagair chomhthiomsaithigh"
+
 #~ msgid ""
 #~ "Returns the context of the current subroutine call.\n"
 #~ "    \n"
index 36e79c597ef51d20d830d6f010b78b466576405e..ba7923dafff6478b97917dbc866a87829c630daa 100644 (file)
Binary files a/po/gl.gmo and b/po/gl.gmo differ
index ae2841891576719702776558815c64ec29148505..4f1cd40a3f7821760c25fa203b2bbaa0284ddf8b 100644 (file)
--- a/po/gl.po
+++ b/po/gl.po
@@ -13,7 +13,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: bash 4.2\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-11-28 12:51-0500\n"
+"POT-Creation-Date: 2022-01-11 14:50-0500\n"
 "PO-Revision-Date: 2012-02-23 14:38+0100\n"
 "Last-Translator: Leandro Regueiro <leandro.regueiro@gmail.com>\n"
 "Language-Team: Galician <proxecto@trasno.net>\n"
@@ -28,59 +28,54 @@ msgstr ""
 msgid "bad array subscript"
 msgstr "subíndice de matriz incorrecto"
 
-#: arrayfunc.c:421 builtins/declare.def:638 variables.c:2274 variables.c:2300
-#: variables.c:3133
+#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268
+#: variables.c:3101
 #, c-format
 msgid "%s: removing nameref attribute"
 msgstr ""
 
-#: arrayfunc.c:446 builtins/declare.def:851
+#: arrayfunc.c:496 builtins/declare.def:868
 #, c-format
 msgid "%s: cannot convert indexed to associative array"
 msgstr "%s: non é posíbel converter a matriz de indizada a asociativa"
 
-#: arrayfunc.c:700
-#, c-format
-msgid "%s: invalid associative array key"
-msgstr "%s: índice de matriz asociativa non válido"
-
-#: arrayfunc.c:702
+#: arrayfunc.c:777
 #, c-format
 msgid "%s: cannot assign to non-numeric index"
 msgstr "%s: non é posíbel asignar a un índice que non é numérico"
 
-#: arrayfunc.c:747
+#: arrayfunc.c:822
 #, c-format
 msgid "%s: %s: must use subscript when assigning associative array"
 msgstr "%s: %s: se debe usar un subíndice ao asignar a unha matriz asociativa"
 
-#: bashhist.c:452
+#: bashhist.c:455
 #, c-format
 msgid "%s: cannot create: %s"
 msgstr "%s: non foi posíbel crear: %s"
 
-#: bashline.c:4310
+#: bashline.c:4479
 msgid "bash_execute_unix_command: cannot find keymap for command"
 msgstr ""
 "bash_execute_unix_command: non foi posíbel atopar a combinación de teclas "
 "para a orde"
 
-#: bashline.c:4459
+#: bashline.c:4637
 #, c-format
 msgid "%s: first non-whitespace character is not `\"'"
 msgstr "%s: o primeiro carácter que non é espazo en branco non é `\"'"
 
-#: bashline.c:4488
+#: bashline.c:4666
 #, c-format
 msgid "no closing `%c' in %s"
 msgstr "no hai un `%c' que peche en %s"
 
-#: bashline.c:4519
+#: bashline.c:4697
 #, c-format
 msgid "%s: missing colon separator"
 msgstr "%s: falta un `:' separador"
 
-#: bashline.c:4555
+#: bashline.c:4733
 #, fuzzy, c-format
 msgid "`%s': cannot unbind in command keymap"
 msgstr "%s: non se pode borrar a asignación"
@@ -100,7 +95,7 @@ msgstr ""
 msgid "brace expansion: failed to allocate memory for `%s'"
 msgstr ""
 
-#: builtins/alias.def:131 variables.c:1844
+#: builtins/alias.def:131 variables.c:1817
 #, c-format
 msgid "`%s': invalid alias name"
 msgstr "`%s': nome de alias non válido"
@@ -177,7 +172,7 @@ msgstr ""
 msgid "HOME not set"
 msgstr "HOME non está definido"
 
-#: builtins/cd.def:335 builtins/common.c:161 test.c:901
+#: builtins/cd.def:335 builtins/common.c:161 test.c:916
 msgid "too many arguments"
 msgstr "demasiados argumentos"
 
@@ -205,7 +200,7 @@ msgstr "aviso: "
 msgid "%s: usage: "
 msgstr "%s: uso: "
 
-#: builtins/common.c:193 shell.c:516 shell.c:844
+#: builtins/common.c:193 shell.c:524 shell.c:866
 #, c-format
 msgid "%s: option requires an argument"
 msgstr "%s: a opción require un argumento"
@@ -220,7 +215,7 @@ msgstr "%s: requírese un argumento numérico"
 msgid "%s: not found"
 msgstr "%s: non se atopou"
 
-#: builtins/common.c:216 shell.c:857
+#: builtins/common.c:216 shell.c:879
 #, c-format
 msgid "%s: invalid option"
 msgstr "%s: opción non válida"
@@ -230,7 +225,7 @@ msgstr "%s: opción non válida"
 msgid "%s: invalid option name"
 msgstr "%s: nome de opción non válido"
 
-#: builtins/common.c:230 execute_cmd.c:2373 general.c:368 general.c:373
+#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373
 #, c-format
 msgid "`%s': not a valid identifier"
 msgstr "`%s': non é un identificador válido"
@@ -243,7 +238,7 @@ msgstr "número octal non válido"
 msgid "invalid hex number"
 msgstr "número hexadecimal non válido"
 
-#: builtins/common.c:244 expr.c:1569
+#: builtins/common.c:244 expr.c:1574
 msgid "invalid number"
 msgstr "número non válido"
 
@@ -257,88 +252,93 @@ msgstr "%s: especificación de sinal non válida"
 msgid "`%s': not a pid or valid job spec"
 msgstr "`%s': no é un pid ou unha especificación válida de traballo"
 
-#: builtins/common.c:266 error.c:510
+#: builtins/common.c:266 error.c:536
 #, c-format
 msgid "%s: readonly variable"
 msgstr "%s: variábel de só lectura"
 
-#: builtins/common.c:274
+#: builtins/common.c:273
+#, fuzzy, c-format
+msgid "%s: cannot assign"
+msgstr "%s: non é posíbel borrar"
+
+#: builtins/common.c:281
 #, c-format
 msgid "%s: %s out of range"
 msgstr "%s: %s fóra de rango"
 
-#: builtins/common.c:274 builtins/common.c:276
+#: builtins/common.c:281 builtins/common.c:283
 msgid "argument"
 msgstr "argumento"
 
-#: builtins/common.c:276
+#: builtins/common.c:283
 #, c-format
 msgid "%s out of range"
 msgstr "%s fóra de rango"
 
-#: builtins/common.c:284
+#: builtins/common.c:291
 #, c-format
 msgid "%s: no such job"
 msgstr "%s: non existe ese traballo"
 
-#: builtins/common.c:292
+#: builtins/common.c:299
 #, c-format
 msgid "%s: no job control"
 msgstr "%s: no hai control de traballos"
 
-#: builtins/common.c:294
+#: builtins/common.c:301
 msgid "no job control"
 msgstr "no ha control de traballos"
 
-#: builtins/common.c:304
+#: builtins/common.c:311
 #, c-format
 msgid "%s: restricted"
 msgstr "%s: restrinxido"
 
-#: builtins/common.c:306
+#: builtins/common.c:313
 msgid "restricted"
 msgstr "restrinxido"
 
-#: builtins/common.c:314
+#: builtins/common.c:321
 #, c-format
 msgid "%s: not a shell builtin"
 msgstr "%s: no é una orde interna do shell"
 
-#: builtins/common.c:323
+#: builtins/common.c:330
 #, c-format
 msgid "write error: %s"
 msgstr "erro de escritura: %s"
 
-#: builtins/common.c:331
+#: builtins/common.c:338
 #, c-format
 msgid "error setting terminal attributes: %s"
 msgstr "erro ao estabelecer os atributos da terminal: %s"
 
-#: builtins/common.c:333
+#: builtins/common.c:340
 #, c-format
 msgid "error getting terminal attributes: %s"
 msgstr "erro ao obtener os atributos da terminal: %s"
 
-#: builtins/common.c:635
+#: builtins/common.c:642
 #, c-format
 msgid "%s: error retrieving current directory: %s: %s\n"
 msgstr "%s: erro ao obtener o directorio actual: %s: %s\n"
 
-#: builtins/common.c:701 builtins/common.c:703
+#: builtins/common.c:708 builtins/common.c:710
 #, c-format
 msgid "%s: ambiguous job spec"
 msgstr "%s: especificación de traballo ambigüa"
 
-#: builtins/common.c:964
+#: builtins/common.c:971
 msgid "help not available in this version"
 msgstr ""
 
-#: builtins/common.c:1008 builtins/set.def:953 variables.c:3839
+#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825
 #, c-format
 msgid "%s: cannot unset: readonly %s"
 msgstr "%s: non é posíbel borrar: %s é de só lectura"
 
-#: builtins/common.c:1013 builtins/set.def:932 variables.c:3844
+#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830
 #, c-format
 msgid "%s: cannot unset"
 msgstr "%s: non é posíbel borrar"
@@ -348,108 +348,108 @@ msgstr "%s: non é posíbel borrar"
 msgid "%s: invalid action name"
 msgstr "%s: nome de acción non válido"
 
-#: builtins/complete.def:486 builtins/complete.def:634
-#: builtins/complete.def:865
+#: builtins/complete.def:486 builtins/complete.def:642
+#: builtins/complete.def:873
 #, c-format
 msgid "%s: no completion specification"
 msgstr "%s: non hai completado de especificación"
 
-#: builtins/complete.def:688
+#: builtins/complete.def:696
 msgid "warning: -F option may not work as you expect"
 msgstr "aviso: é posíbel que a opción -F non funcione como se espera"
 
-#: builtins/complete.def:690
+#: builtins/complete.def:698
 msgid "warning: -C option may not work as you expect"
 msgstr "aviso: é posíbel que a opción -C non funcione como se espera"
 
-#: builtins/complete.def:838
+#: builtins/complete.def:846
 msgid "not currently executing completion function"
 msgstr "non se está executando a función de completado"
 
-#: builtins/declare.def:134
+#: builtins/declare.def:137
 msgid "can only be used in a function"
 msgstr "só se pode usar dentro dunha función"
 
-#: builtins/declare.def:363 builtins/declare.def:756
+#: builtins/declare.def:437
+msgid "cannot use `-f' to make functions"
+msgstr "non se pode use `-f' para facer funcións"
+
+#: builtins/declare.def:464 execute_cmd.c:6132
+#, c-format
+msgid "%s: readonly function"
+msgstr "%s: función de só lectura"
+
+#: builtins/declare.def:521 builtins/declare.def:804
 #, c-format
 msgid "%s: reference variable cannot be an array"
 msgstr ""
 
-#: builtins/declare.def:374 variables.c:3385
+#: builtins/declare.def:532 variables.c:3359
 #, c-format
 msgid "%s: nameref variable self references not allowed"
 msgstr ""
 
-#: builtins/declare.def:379 variables.c:2104 variables.c:3304 variables.c:3312
-#: variables.c:3382
+#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286
+#: variables.c:3356
 #, c-format
 msgid "%s: circular name reference"
 msgstr ""
 
-#: builtins/declare.def:384 builtins/declare.def:762 builtins/declare.def:773
+#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820
 #, fuzzy, c-format
 msgid "`%s': invalid variable name for name reference"
 msgstr "`%s': nome de alias non válido"
 
-#: builtins/declare.def:514
-msgid "cannot use `-f' to make functions"
-msgstr "non se pode use `-f' para facer funcións"
-
-#: builtins/declare.def:526 execute_cmd.c:5986
-#, c-format
-msgid "%s: readonly function"
-msgstr "%s: función de só lectura"
-
-#: builtins/declare.def:824
-#, c-format
-msgid "%s: quoted compound array assignment deprecated"
-msgstr ""
-
-#: builtins/declare.def:838
+#: builtins/declare.def:856
 #, c-format
 msgid "%s: cannot destroy array variables in this way"
 msgstr "%s: non é posíbel destruír variábeis de matriz desta forma"
 
-#: builtins/declare.def:845 builtins/read.def:815
+#: builtins/declare.def:862 builtins/read.def:887
 #, c-format
 msgid "%s: cannot convert associative to indexed array"
 msgstr "%s: non é posíbel converter unha matriz asociativa a indizada"
 
-#: builtins/enable.def:143 builtins/enable.def:151
+#: builtins/declare.def:891
+#, c-format
+msgid "%s: quoted compound array assignment deprecated"
+msgstr ""
+
+#: builtins/enable.def:145 builtins/enable.def:153
 msgid "dynamic loading not available"
 msgstr "a carga dinámica non está dispoñíbel"
 
-#: builtins/enable.def:343
+#: builtins/enable.def:376
 #, c-format
 msgid "cannot open shared object %s: %s"
 msgstr "non é posíbel abrir o obxecto compartido %s: %s"
 
-#: builtins/enable.def:371
+#: builtins/enable.def:405
 #, c-format
 msgid "cannot find %s in shared object %s: %s"
 msgstr "non é posíbel atopar %s no obxecto compartido %s: %s"
 
-#: builtins/enable.def:388
+#: builtins/enable.def:422
 #, fuzzy, c-format
 msgid "%s: dynamic builtin already loaded"
 msgstr "%s: non foi cargado dinamicamente"
 
-#: builtins/enable.def:392
+#: builtins/enable.def:426
 #, c-format
 msgid "load function for %s returns failure (%d): not loaded"
 msgstr ""
 
-#: builtins/enable.def:517
+#: builtins/enable.def:551
 #, c-format
 msgid "%s: not dynamically loaded"
 msgstr "%s: non foi cargado dinamicamente"
 
-#: builtins/enable.def:543
+#: builtins/enable.def:577
 #, c-format
 msgid "%s: cannot delete: %s"
 msgstr "%s: non foi posíbel eliminar: %s"
 
-#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5818
+#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959
 #, c-format
 msgid "%s: is a directory"
 msgstr "%s: é un directorio"
@@ -464,7 +464,7 @@ msgstr "%s: non é un ficheiro regular"
 msgid "%s: file is too large"
 msgstr "%s: o ficheiro é demasiado grande"
 
-#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1647
+#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673
 #, c-format
 msgid "%s: cannot execute binary file"
 msgstr "%s: non é posíbel executar o ficheiro binario"
@@ -560,12 +560,12 @@ msgstr ""
 "non hai temas de axuda que coincidan con «%s». Probe «help help» ou «man -k "
 "%s» ou «info %s»"
 
-#: builtins/help.def:224
+#: builtins/help.def:223
 #, c-format
 msgid "%s: cannot open: %s"
 msgstr "%s: non foi posíbel abrir: %s"
 
-#: builtins/help.def:524
+#: builtins/help.def:523
 #, c-format
 msgid ""
 "These shell commands are defined internally.  Type `help' to see this list.\n"
@@ -586,21 +586,21 @@ msgstr ""
 "Un asterisco (*) xunto a un nome significa que a orde está desactivada.\n"
 "\n"
 
-#: builtins/history.def:155
+#: builtins/history.def:159
 msgid "cannot use more than one of -anrw"
 msgstr "non foi posíbel usar máis dun de -anrw"
 
-#: builtins/history.def:188 builtins/history.def:198 builtins/history.def:213
-#: builtins/history.def:230 builtins/history.def:242 builtins/history.def:249
+#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215
+#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247
 msgid "history position"
 msgstr "posición no historial"
 
-#: builtins/history.def:340
+#: builtins/history.def:338
 #, fuzzy, c-format
 msgid "%s: invalid timestamp"
 msgstr "%s: nome de opción non válido"
 
-#: builtins/history.def:451
+#: builtins/history.def:449
 #, c-format
 msgid "%s: history expansion failed"
 msgstr "%s: fallou a expansión do historial"
@@ -623,78 +623,78 @@ msgstr "%s: os argumentos deben ser procesos ou IDs de traballos"
 msgid "Unknown error"
 msgstr "Erro descoñecido"
 
-#: builtins/let.def:97 builtins/let.def:122 expr.c:639 expr.c:657
+#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658
 msgid "expression expected"
 msgstr "agardábase unha expresión"
 
-#: builtins/mapfile.def:178
+#: builtins/mapfile.def:180
 #, c-format
 msgid "%s: not an indexed array"
 msgstr "%s: non é unha matriz indizada"
 
-#: builtins/mapfile.def:271 builtins/read.def:308
+#: builtins/mapfile.def:276 builtins/read.def:336
 #, c-format
 msgid "%s: invalid file descriptor specification"
 msgstr "%s: especificación de descritor de ficheiro non válida"
 
-#: builtins/mapfile.def:279 builtins/read.def:315
+#: builtins/mapfile.def:284 builtins/read.def:343
 #, c-format
 msgid "%d: invalid file descriptor: %s"
 msgstr "%d: descritor de ficheiro non válido: %s"
 
-#: builtins/mapfile.def:288 builtins/mapfile.def:326
+#: builtins/mapfile.def:293 builtins/mapfile.def:331
 #, c-format
 msgid "%s: invalid line count"
 msgstr "%s: conta de liñas non válida"
 
-#: builtins/mapfile.def:299
+#: builtins/mapfile.def:304
 #, c-format
 msgid "%s: invalid array origin"
 msgstr "%s: orixe de matriz non válido"
 
-#: builtins/mapfile.def:316
+#: builtins/mapfile.def:321
 #, c-format
 msgid "%s: invalid callback quantum"
 msgstr "%s: quantum de chamada non válido"
 
-#: builtins/mapfile.def:349
+#: builtins/mapfile.def:354
 msgid "empty array variable name"
 msgstr "nome de variábel de matriz baleiro"
 
-#: builtins/mapfile.def:370
+#: builtins/mapfile.def:375
 msgid "array variable support required"
 msgstr "requírese a compatibilidade de variábel de matriz"
 
-#: builtins/printf.def:419
+#: builtins/printf.def:430
 #, c-format
 msgid "`%s': missing format character"
 msgstr "`%s': falta o carácter de formato"
 
-#: builtins/printf.def:474
+#: builtins/printf.def:485
 #, c-format
 msgid "`%c': invalid time format specification"
 msgstr "`%c': especificación de formato de tempo non válida"
 
-#: builtins/printf.def:676
+#: builtins/printf.def:708
 #, c-format
 msgid "`%c': invalid format character"
 msgstr "`%c': carácter de formato non válido"
 
-#: builtins/printf.def:702
+#: builtins/printf.def:734
 #, c-format
 msgid "warning: %s: %s"
 msgstr "aviso: %s: %s"
 
-#: builtins/printf.def:788
+#: builtins/printf.def:822
 #, c-format
 msgid "format parsing problem: %s"
 msgstr ""
 
-#: builtins/printf.def:885
+#: builtins/printf.def:919
 msgid "missing hex digit for \\x"
 msgstr "falta o díxito hexadecimal para \\x"
 
-#: builtins/printf.def:900
+#: builtins/printf.def:934
 #, c-format
 msgid "missing unicode digit for \\%c"
 msgstr "falta o díxito unicode para \\%c"
@@ -846,12 +846,12 @@ msgstr ""
 "    \n"
 "    A orde interna `dirs' mostra a pila de directorios."
 
-#: builtins/read.def:280
+#: builtins/read.def:308
 #, c-format
 msgid "%s: invalid timeout specification"
 msgstr "%s: especificación de tempo de expiración non válida"
 
-#: builtins/read.def:755
+#: builtins/read.def:827
 #, c-format
 msgid "read error: %d: %s"
 msgstr "erro de lectura: %d: %s"
@@ -864,7 +864,7 @@ msgstr "só se pode usar «return» nunha función ou guión lido con «source»
 msgid "cannot simultaneously unset a function and a variable"
 msgstr "non é posíbel borrar ao mesmo tempo unha función e unha variábel"
 
-#: builtins/set.def:966
+#: builtins/set.def:969
 #, c-format
 msgid "%s: not an array variable"
 msgstr "%s: non é unha variábel de matriz"
@@ -883,11 +883,11 @@ msgstr "%s: non é posíbel borrar"
 msgid "shift count"
 msgstr "conta de shift"
 
-#: builtins/shopt.def:310
+#: builtins/shopt.def:323
 msgid "cannot set and unset shell options simultaneously"
 msgstr "non é posíbel activar e desactivar opcións do shell simultaneamente"
 
-#: builtins/shopt.def:428
+#: builtins/shopt.def:444
 #, c-format
 msgid "%s: invalid shell option name"
 msgstr "%s: nome de opción do shell non válido"
@@ -954,16 +954,16 @@ msgstr "%s: límite de argumento non válido"
 msgid "`%c': bad command"
 msgstr "`%c': orde errónea"
 
-#: builtins/ulimit.def:455
+#: builtins/ulimit.def:464
 #, c-format
 msgid "%s: cannot get limit: %s"
 msgstr "%s: non é posíbel obter o límite: %s"
 
-#: builtins/ulimit.def:481
+#: builtins/ulimit.def:490
 msgid "limit"
 msgstr "límite"
 
-#: builtins/ulimit.def:493 builtins/ulimit.def:793
+#: builtins/ulimit.def:502 builtins/ulimit.def:802
 #, c-format
 msgid "%s: cannot modify limit: %s"
 msgstr "%s: non é posíbel modificar o límite: %s"
@@ -982,7 +982,7 @@ msgstr "`%c': operador de modo simbólico non válido"
 msgid "`%c': invalid symbolic mode character"
 msgstr "`%c': carácter de modo simbólico non válido"
 
-#: error.c:89 error.c:347 error.c:349 error.c:351
+#: error.c:89 error.c:373 error.c:375 error.c:377
 msgid " line "
 msgstr " liña "
 
@@ -1002,96 +1002,106 @@ msgstr "Abortando…"
 msgid "INFORM: "
 msgstr ""
 
-#: error.c:462
+#: error.c:310
+#, fuzzy, c-format
+msgid "DEBUG warning: "
+msgstr "aviso: "
+
+#: error.c:488
 msgid "unknown command error"
 msgstr "erro de orde descoñecido"
 
-#: error.c:463
+#: error.c:489
 msgid "bad command type"
 msgstr "tipo de orde erróneo"
 
-#: error.c:464
+#: error.c:490
 msgid "bad connector"
 msgstr "conector erróneo"
 
-#: error.c:465
+#: error.c:491
 msgid "bad jump"
 msgstr "salto erróneo"
 
-#: error.c:503
+#: error.c:529
 #, c-format
 msgid "%s: unbound variable"
 msgstr "%s: variable sen asignar"
 
-#: eval.c:242
+#: eval.c:243
 msgid "\atimed out waiting for input: auto-logout\n"
 msgstr "\aexpirou mentres agardaba algunha entrada: auto-logout\n"
 
-#: execute_cmd.c:537
+#: execute_cmd.c:555
 #, c-format
 msgid "cannot redirect standard input from /dev/null: %s"
 msgstr "non é posíbel redirixir a saída estándar desde /dev/null: %s"
 
-#: execute_cmd.c:1297
+#: execute_cmd.c:1317
 #, c-format
 msgid "TIMEFORMAT: `%c': invalid format character"
 msgstr "TIMEFORMAT: `%c': carácter de formato non válido"
 
-#: execute_cmd.c:2362
+#: execute_cmd.c:2391
 #, c-format
 msgid "execute_coproc: coproc [%d:%s] still exists"
 msgstr ""
 
-#: execute_cmd.c:2486
+#: execute_cmd.c:2524
 msgid "pipe error"
 msgstr "erro de canalización"
 
-#: execute_cmd.c:4793
+#: execute_cmd.c:4923
 #, c-format
 msgid "eval: maximum eval nesting level exceeded (%d)"
 msgstr ""
 
-#: execute_cmd.c:4805
+#: execute_cmd.c:4935
 #, c-format
 msgid "%s: maximum source nesting level exceeded (%d)"
 msgstr ""
 
-#: execute_cmd.c:4913
+#: execute_cmd.c:5043
 #, c-format
 msgid "%s: maximum function nesting level exceeded (%d)"
 msgstr ""
 
-#: execute_cmd.c:5467
+#: execute_cmd.c:5598
 #, c-format
 msgid "%s: restricted: cannot specify `/' in command names"
 msgstr "%s: restrinxido: non se pode especificar `/' en nomes de ordes"
 
-#: execute_cmd.c:5574
+#: execute_cmd.c:5715
 #, c-format
 msgid "%s: command not found"
 msgstr "%s: non se atopou a orde"
 
-#: execute_cmd.c:5816
+#: execute_cmd.c:5957
 #, c-format
 msgid "%s: %s"
 msgstr "%s: %s"
 
-#: execute_cmd.c:5854
+#: execute_cmd.c:5975
+#, fuzzy, c-format
+msgid "%s: cannot execute: required file not found"
+msgstr "%s: non é posíbel executar o ficheiro binario"
+
+#: execute_cmd.c:6000
 #, c-format
 msgid "%s: %s: bad interpreter"
 msgstr "%s: %s: intérprete erróneo"
 
-#: execute_cmd.c:5891
+#: execute_cmd.c:6037
 #, fuzzy, c-format
 msgid "%s: cannot execute binary file: %s"
 msgstr "%s: non é posíbel executar o ficheiro binario"
 
-#: execute_cmd.c:5977
+#: execute_cmd.c:6123
 #, fuzzy, c-format
 msgid "`%s': is a special builtin"
 msgstr "%s é unha orde interna do shell\n"
 
-#: execute_cmd.c:6029
+#: execute_cmd.c:6175
 #, c-format
 msgid "cannot duplicate fd %d to fd %d"
 msgstr "no se pode duplicar o df %d ao df %d"
@@ -1104,71 +1114,71 @@ msgstr "excedeuse o nivel de recursión da expresión"
 msgid "recursion stack underflow"
 msgstr "desbordamento da base da pila de recursión"
 
-#: expr.c:477
+#: expr.c:478
 msgid "syntax error in expression"
 msgstr "erro de sintaxe na expresión"
 
-#: expr.c:521
+#: expr.c:522
 msgid "attempted assignment to non-variable"
 msgstr "tentouse asignar a algo que non é unha variábel"
 
-#: expr.c:530
+#: expr.c:531
 #, fuzzy
 msgid "syntax error in variable assignment"
 msgstr "erro de sintaxe na expresión"
 
-#: expr.c:544 expr.c:911
+#: expr.c:545 expr.c:912
 msgid "division by 0"
 msgstr "división entre 0"
 
-#: expr.c:592
+#: expr.c:593
 msgid "bug: bad expassign token"
 msgstr "erro: elemento de asignación de expresión erróneo"
 
-#: expr.c:646
+#: expr.c:647
 msgid "`:' expected for conditional expression"
 msgstr "agardábase `:' para a expresión condicional"
 
-#: expr.c:972
+#: expr.c:973
 msgid "exponent less than 0"
 msgstr "expoñente menor que 0"
 
-#: expr.c:1029
+#: expr.c:1030
 msgid "identifier expected after pre-increment or pre-decrement"
 msgstr ""
 "agardábase un identificador despois do pre-incremento ou pre-decremento"
 
-#: expr.c:1056
+#: expr.c:1057
 msgid "missing `)'"
 msgstr "falta un `)'"
 
-#: expr.c:1107 expr.c:1487
+#: expr.c:1108 expr.c:1492
 msgid "syntax error: operand expected"
 msgstr "erro de sintaxe: agardábase un operando"
 
-#: expr.c:1489
+#: expr.c:1494
 msgid "syntax error: invalid arithmetic operator"
 msgstr "erro de sintaxe: operador aritmético non válido"
 
-#: expr.c:1513
+#: expr.c:1518
 #, c-format
 msgid "%s%s%s: %s (error token is \"%s\")"
 msgstr "%s%s%s: %s (o elemento de erro é \"%s\")"
 
-#: expr.c:1573
+#: expr.c:1578
 msgid "invalid arithmetic base"
 msgstr "base aritmética non válida"
 
-#: expr.c:1582
+#: expr.c:1587
 #, fuzzy
 msgid "invalid integer constant"
 msgstr "%s: conta de liñas non válida"
 
-#: expr.c:1598
+#: expr.c:1603
 msgid "value too great for base"
 msgstr "valor demasiado grande para a base"
 
-#: expr.c:1647
+#: expr.c:1652
 #, c-format
 msgid "%s: expression error\n"
 msgstr "%s: erro de expresión\n"
@@ -1177,7 +1187,7 @@ msgstr "%s: erro de expresión\n"
 msgid "getcwd: cannot access parent directories"
 msgstr "getcwd: non é posíbel acceder aos directorios pai"
 
-#: input.c:99 subst.c:6069
+#: input.c:99 subst.c:6208
 #, c-format
 msgid "cannot reset nodelay mode for fd %d"
 msgstr "non é posíbel restabelecer o modo nodelay para o df %d"
@@ -1199,168 +1209,168 @@ msgstr ""
 msgid "start_pipeline: pgrp pipe"
 msgstr "start_pipeline: tubería de pgrp"
 
-#: jobs.c:906
+#: jobs.c:907
 #, c-format
 msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr ""
 
-#: jobs.c:959
+#: jobs.c:960
 #, c-format
 msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr ""
 
-#: jobs.c:1283
+#: jobs.c:1279
 #, c-format
 msgid "forked pid %d appears in running job %d"
 msgstr "o pid `forked' %d aparece no traballo en execución %d"
 
-#: jobs.c:1402
+#: jobs.c:1397
 #, c-format
 msgid "deleting stopped job %d with process group %ld"
 msgstr "borrando o trabajo detido %d con grupo de proceso %ld"
 
-#: jobs.c:1511
+#: jobs.c:1502
 #, c-format
 msgid "add_process: pid %5ld (%s) marked as still alive"
 msgstr "add_process: pid %5ld (%s) márcase como vivo aínda"
 
-#: jobs.c:1850
+#: jobs.c:1839
 #, c-format
 msgid "describe_pid: %ld: no such pid"
 msgstr "describe_pid: %ld: non existe tal pid"
 
-#: jobs.c:1865
+#: jobs.c:1854
 #, c-format
 msgid "Signal %d"
 msgstr "Sinal %d"
 
-#: jobs.c:1879 jobs.c:1905
+#: jobs.c:1868 jobs.c:1894
 msgid "Done"
 msgstr "Feito"
 
-#: jobs.c:1884 siglist.c:122
+#: jobs.c:1873 siglist.c:123
 msgid "Stopped"
 msgstr "Detido"
 
-#: jobs.c:1888
+#: jobs.c:1877
 #, c-format
 msgid "Stopped(%s)"
 msgstr "Detido(%s)"
 
-#: jobs.c:1892
+#: jobs.c:1881
 msgid "Running"
 msgstr "En execución"
 
-#: jobs.c:1909
+#: jobs.c:1898
 #, c-format
 msgid "Done(%d)"
 msgstr "Feito(%d)"
 
-#: jobs.c:1911
+#: jobs.c:1900
 #, c-format
 msgid "Exit %d"
 msgstr "Saída %d"
 
-#: jobs.c:1914
+#: jobs.c:1903
 msgid "Unknown status"
 msgstr "Estado descoñecido"
 
-#: jobs.c:2001
+#: jobs.c:1990
 #, c-format
 msgid "(core dumped) "
 msgstr "(«core» xerado) "
 
-#: jobs.c:2020
+#: jobs.c:2009
 #, c-format
 msgid "  (wd: %s)"
 msgstr "  (dir agora: %s)"
 
-#: jobs.c:2259
+#: jobs.c:2250
 #, c-format
 msgid "child setpgid (%ld to %ld)"
 msgstr "setpgid fillo (%ld a %ld)"
 
-#: jobs.c:2617 nojobs.c:664
+#: jobs.c:2608 nojobs.c:666
 #, c-format
 msgid "wait: pid %ld is not a child of this shell"
 msgstr "wait: pid %ld non é un proceso fillo desta shell"
 
-#: jobs.c:2893
+#: jobs.c:2884
 #, c-format
 msgid "wait_for: No record of process %ld"
 msgstr "wait_for: Non hai un rexistro do proceso %ld"
 
-#: jobs.c:3236
+#: jobs.c:3223
 #, c-format
 msgid "wait_for_job: job %d is stopped"
 msgstr "wait_for_job: o traballo %d está detido"
 
-#: jobs.c:3564
+#: jobs.c:3551
 #, fuzzy, c-format
 msgid "%s: no current jobs"
 msgstr "%s: non existe ese traballo"
 
-#: jobs.c:3571
+#: jobs.c:3558
 #, c-format
 msgid "%s: job has terminated"
 msgstr "%s: o traballo rematou"
 
-#: jobs.c:3580
+#: jobs.c:3567
 #, c-format
 msgid "%s: job %d already in background"
 msgstr "%s: o trabajo %d xa está en segundo plano"
 
-#: jobs.c:3806
+#: jobs.c:3793
 msgid "waitchld: turning on WNOHANG to avoid indefinite block"
 msgstr "waitchld: actívase WNOHANG para evitar o bloque indefinido"
 
-#: jobs.c:4320
+#: jobs.c:4307
 #, c-format
 msgid "%s: line %d: "
 msgstr "%s: liña %d: "
 
-#: jobs.c:4334 nojobs.c:919
+#: jobs.c:4321 nojobs.c:921
 #, c-format
 msgid " (core dumped)"
 msgstr " («core» generado)"
 
-#: jobs.c:4346 jobs.c:4359
+#: jobs.c:4333 jobs.c:4346
 #, c-format
 msgid "(wd now: %s)\n"
 msgstr "(dir agora: %s)\n"
 
-#: jobs.c:4391
+#: jobs.c:4378
 msgid "initialize_job_control: getpgrp failed"
 msgstr "initialize_jobs_control: fallou getpgrp"
 
-#: jobs.c:4447
+#: jobs.c:4434
 #, fuzzy
 msgid "initialize_job_control: no job control in background"
 msgstr "initialize_jobs_control: disciplina de liña"
 
-#: jobs.c:4463
+#: jobs.c:4450
 msgid "initialize_job_control: line discipline"
 msgstr "initialize_jobs_control: disciplina de liña"
 
-#: jobs.c:4473
+#: jobs.c:4460
 msgid "initialize_job_control: setpgid"
 msgstr "initialize_jobs_control: setpgid"
 
-#: jobs.c:4494 jobs.c:4503
+#: jobs.c:4481 jobs.c:4490
 #, c-format
 msgid "cannot set terminal process group (%d)"
 msgstr "non é posíbel estabelecer o grupo de procesos de terminal (%d)"
 
-#: jobs.c:4508
+#: jobs.c:4495
 msgid "no job control in this shell"
 msgstr "non hai control de trabalos nesta shell"
 
-#: lib/malloc/malloc.c:353
+#: lib/malloc/malloc.c:367
 #, c-format
 msgid "malloc: failed assertion: %s\n"
 msgstr "malloc: fallou a aserción: %s\n"
 
-#: lib/malloc/malloc.c:369
+#: lib/malloc/malloc.c:383
 #, c-format
 msgid ""
 "\r\n"
@@ -1369,51 +1379,51 @@ msgstr ""
 "\r\n"
 "malloc: %s:%d: aserción arruinada\r\n"
 
-#: lib/malloc/malloc.c:370 lib/malloc/malloc.c:933
+#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941
 msgid "unknown"
 msgstr "descoñecido"
 
-#: lib/malloc/malloc.c:882
+#: lib/malloc/malloc.c:892
 msgid "malloc: block on free list clobbered"
 msgstr "malloc: bloque na lista libre sobreescrito"
 
-#: lib/malloc/malloc.c:972
+#: lib/malloc/malloc.c:980
 msgid "free: called with already freed block argument"
 msgstr "free: chamouse cun argumento de bloque previamente liberado"
 
-#: lib/malloc/malloc.c:975
+#: lib/malloc/malloc.c:983
 msgid "free: called with unallocated block argument"
 msgstr "free: chamouse cun argumento de bloque sen asignar"
 
-#: lib/malloc/malloc.c:994
+#: lib/malloc/malloc.c:1001
 msgid "free: underflow detected; mh_nbytes out of range"
 msgstr "free: detectouse un desbordamento por embaixo; mh_nbytes fóra de rango"
 
-#: lib/malloc/malloc.c:1001
+#: lib/malloc/malloc.c:1007
 #, fuzzy
 msgid "free: underflow detected; magic8 corrupted"
 msgstr "free: detectouse un desbordamento por embaixo; mh_nbytes fóra de rango"
 
-#: lib/malloc/malloc.c:1009
+#: lib/malloc/malloc.c:1014
 msgid "free: start and end chunk sizes differ"
 msgstr "free: os tamaños dos anacos de inicio e fin son diferentes"
 
-#: lib/malloc/malloc.c:1119
+#: lib/malloc/malloc.c:1176
 msgid "realloc: called with unallocated block argument"
 msgstr "realloc: chamouse cun argumento de bloque sen asignar"
 
-#: lib/malloc/malloc.c:1134
+#: lib/malloc/malloc.c:1191
 msgid "realloc: underflow detected; mh_nbytes out of range"
 msgstr ""
 "realloc: detectouse un desbordamento por embaixo; mh_nbytes fóra de rango"
 
-#: lib/malloc/malloc.c:1141
+#: lib/malloc/malloc.c:1197
 #, fuzzy
 msgid "realloc: underflow detected; magic8 corrupted"
 msgstr ""
 "realloc: detectouse un desbordamento por embaixo; mh_nbytes fóra de rango"
 
-#: lib/malloc/malloc.c:1150
+#: lib/malloc/malloc.c:1205
 msgid "realloc: start and end chunk sizes differ"
 msgstr "realloc: os tamaños dos anacos de inicio e fin son diferentes"
 
@@ -1455,23 +1465,23 @@ msgstr "%s: especificación de ruta de rede errónea"
 msgid "network operations not supported"
 msgstr "non hai compatibilidade para operacións de rede"
 
-#: locale.c:217
+#: locale.c:219
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s)"
 msgstr "setlocale: LC_ALL non se pode cambiar a configuración rexional (%s)"
 
-#: locale.c:219
+#: locale.c:221
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s): %s"
 msgstr ""
 "setlocale: LC_ALL: non se pode cambiar a configuración rexional (%s): %s"
 
-#: locale.c:292
+#: locale.c:294
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s)"
 msgstr "setlocale: %s: non se pode cambiar a configuración rexional (%s)"
 
-#: locale.c:294
+#: locale.c:296
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s): %s"
 msgstr "setlocale: %s: non se pode cambiar a configuración rexional (%s): %s"
@@ -1489,140 +1499,140 @@ msgstr "Ten unha nova mensaxe en $_"
 msgid "The mail in %s has been read\n"
 msgstr "O correo en %s foi lido\n"
 
-#: make_cmd.c:317
+#: make_cmd.c:314
 msgid "syntax error: arithmetic expression required"
 msgstr "error de sintaxe: requírese unha expresión aritmética"
 
-#: make_cmd.c:319
+#: make_cmd.c:316
 msgid "syntax error: `;' unexpected"
 msgstr "error sintáctico: `;' non esperado"
 
-#: make_cmd.c:320
+#: make_cmd.c:317
 #, c-format
 msgid "syntax error: `((%s))'"
 msgstr "erro de sintaxe: `((%s))'"
 
-#: make_cmd.c:572
+#: make_cmd.c:569
 #, c-format
 msgid "make_here_document: bad instruction type %d"
 msgstr "make_here_document: tipo de instrución %d erróneo"
 
-#: make_cmd.c:657
+#: make_cmd.c:668
 #, c-format
 msgid "here-document at line %d delimited by end-of-file (wanted `%s')"
 msgstr ""
 "o documento-aquí na liña %d está delimitado por fin-de-fichero (agardábase `"
 "%s')"
 
-#: make_cmd.c:756
+#: make_cmd.c:769
 #, c-format
 msgid "make_redirection: redirection instruction `%d' out of range"
 msgstr "make_redirection: a instrucción de redirección `%d' está fóra de rango"
 
-#: parse.y:2393
+#: parse.y:2428
 #, c-format
 msgid ""
 "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line "
 "truncated"
 msgstr ""
 
-#: parse.y:2826
+#: parse.y:2921
 msgid "maximum here-document count exceeded"
 msgstr ""
 
-#: parse.y:3581 parse.y:3957 parse.y:4556
+#: parse.y:3684 parse.y:4244 parse.y:6148
 #, c-format
 msgid "unexpected EOF while looking for matching `%c'"
 msgstr "EOF inesperado mentres se buscaba un `%c' coincidente"
 
-#: parse.y:4696
+#: parse.y:4452
 msgid "unexpected EOF while looking for `]]'"
 msgstr "EOF inesperado mentres se buscaba `]]'"
 
-#: parse.y:4701
+#: parse.y:4457
 #, c-format
 msgid "syntax error in conditional expression: unexpected token `%s'"
 msgstr "error de sintaxe na expresión condicional: elemento inesperado `%s'"
 
-#: parse.y:4705
+#: parse.y:4461
 msgid "syntax error in conditional expression"
 msgstr "error sintáctico na expresión condicional"
 
-#: parse.y:4783
+#: parse.y:4539
 #, c-format
 msgid "unexpected token `%s', expected `)'"
 msgstr "elemento inesperado `%s', agardábase `)'"
 
-#: parse.y:4787
+#: parse.y:4543
 msgid "expected `)'"
 msgstr "agardábase `)'"
 
-#: parse.y:4815
+#: parse.y:4571
 #, c-format
 msgid "unexpected argument `%s' to conditional unary operator"
 msgstr "argumento inesperado `%s' para o operador unario condicional"
 
-#: parse.y:4819
+#: parse.y:4575
 msgid "unexpected argument to conditional unary operator"
 msgstr "argumento inesperado para o operador unario condicional"
 
-#: parse.y:4865
+#: parse.y:4621
 #, c-format
 msgid "unexpected token `%s', conditional binary operator expected"
 msgstr "elemento inesperado `%s', agardábase un operador binario condicional"
 
-#: parse.y:4869
+#: parse.y:4625
 msgid "conditional binary operator expected"
 msgstr "agardábase un operador binario condicional"
 
-#: parse.y:4891
+#: parse.y:4647
 #, c-format
 msgid "unexpected argument `%s' to conditional binary operator"
 msgstr "argumento inesperado `%s' para o operador binario condicional"
 
-#: parse.y:4895
+#: parse.y:4651
 msgid "unexpected argument to conditional binary operator"
 msgstr "argumento inesperado para o operador binario condicional"
 
-#: parse.y:4906
+#: parse.y:4662
 #, c-format
 msgid "unexpected token `%c' in conditional command"
 msgstr "elemento inesperado `%c' na orde condicional"
 
-#: parse.y:4909
+#: parse.y:4665
 #, c-format
 msgid "unexpected token `%s' in conditional command"
 msgstr "elemento inesperado `%s' na orde condicional"
 
-#: parse.y:4913
+#: parse.y:4669
 #, c-format
 msgid "unexpected token %d in conditional command"
 msgstr "elemento inesperado %d na orde condicional"
 
-#: parse.y:6336
+#: parse.y:6118
 #, c-format
 msgid "syntax error near unexpected token `%s'"
 msgstr "error de sintaxe perto do elemento inesperado `%s'"
 
-#: parse.y:6355
+#: parse.y:6137
 #, c-format
 msgid "syntax error near `%s'"
 msgstr "erro de sintaxe cerca de «%s»"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error: unexpected end of file"
 msgstr "error de sintaxe: non se agardaba o final do fichero"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error"
 msgstr "erro de sintaxe"
 
-#: parse.y:6428
+#: parse.y:6216
 #, c-format
 msgid "Use \"%s\" to leave the shell.\n"
 msgstr "Use «%s» para deixar o shell.\n"
 
-#: parse.y:6602
+#: parse.y:6394
 msgid "unexpected EOF while looking for matching `)'"
 msgstr "EOF non agardado mentres se buscaba un «)» coincidente"
 
@@ -1660,94 +1670,94 @@ msgstr "xtrace_set: punteiro a ficheiro NULL"
 msgid "xtrace fd (%d) != fileno xtrace fp (%d)"
 msgstr "xtrace fd (%d) != numfich xtrace fp (%d)"
 
-#: print_cmd.c:1540
+#: print_cmd.c:1545
 #, c-format
 msgid "cprintf: `%c': invalid format character"
 msgstr "cprintf: `%c': carácter de formato non válido"
 
-#: redir.c:149 redir.c:197
+#: redir.c:150 redir.c:198
 msgid "file descriptor out of range"
 msgstr "descritor de ficheiro fóra de rango"
 
-#: redir.c:204
+#: redir.c:205
 #, c-format
 msgid "%s: ambiguous redirect"
 msgstr "%s: redireccionamento ambigüo"
 
-#: redir.c:208
+#: redir.c:209
 #, c-format
 msgid "%s: cannot overwrite existing file"
 msgstr "%s: non se pode sobreescribir un fichero existente"
 
-#: redir.c:213
+#: redir.c:214
 #, c-format
 msgid "%s: restricted: cannot redirect output"
 msgstr "%s: restrinxido: no se pode redirixir a saída"
 
-#: redir.c:218
+#: redir.c:219
 #, c-format
 msgid "cannot create temp file for here-document: %s"
 msgstr "non se pode crear un fichero temporal para o documento-aquí: %s"
 
-#: redir.c:222
+#: redir.c:223
 #, c-format
 msgid "%s: cannot assign fd to variable"
 msgstr "%s: non é posíbel asignar o gd á variábel"
 
-#: redir.c:649
+#: redir.c:650
 msgid "/dev/(tcp|udp)/host/port not supported without networking"
 msgstr "non se admite /dev/(tcp|udp)/anfitrion/porto sen rede"
 
-#: redir.c:938 redir.c:1053 redir.c:1114 redir.c:1284
+#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303
 msgid "redirection error: cannot duplicate fd"
 msgstr "erro de redirección: non é posíbel duplicar o fd"
 
-#: shell.c:347
+#: shell.c:353
 msgid "could not find /tmp, please create!"
 msgstr "non é posíbel atopar /tmp, por favor creeo!"
 
-#: shell.c:351
+#: shell.c:357
 msgid "/tmp must be a valid directory name"
 msgstr "/tmp debe ser un nome de directorio válido"
 
-#: shell.c:804
+#: shell.c:826
 msgid "pretty-printing mode ignored in interactive shells"
 msgstr ""
 
-#: shell.c:948
+#: shell.c:972
 #, c-format
 msgid "%c%c: invalid option"
 msgstr "%c%c: opción non válida"
 
-#: shell.c:1319
+#: shell.c:1343
 #, fuzzy, c-format
 msgid "cannot set uid to %d: effective uid %d"
 msgstr "non é posíbel restabelecer o modo nodelay para o df %d"
 
-#: shell.c:1330
+#: shell.c:1354
 #, fuzzy, c-format
 msgid "cannot set gid to %d: effective gid %d"
 msgstr "non é posíbel restabelecer o modo nodelay para o df %d"
 
-#: shell.c:1518
+#: shell.c:1544
 msgid "cannot start debugger; debugging mode disabled"
 msgstr ""
 
-#: shell.c:1632
+#: shell.c:1658
 #, fuzzy, c-format
 msgid "%s: Is a directory"
 msgstr "%s: é un directorio"
 
-#: shell.c:1881
+#: shell.c:1907
 msgid "I have no name!"
 msgstr "Non teño nome!"
 
-#: shell.c:2035
+#: shell.c:2061
 #, c-format
 msgid "GNU bash, version %s-(%s)\n"
 msgstr "GNU bash, versión %s-(%s)\n"
 
-#: shell.c:2036
+#: shell.c:2062
 #, c-format
 msgid ""
 "Usage:\t%s [GNU long option] [option] ...\n"
@@ -1756,314 +1766,314 @@ msgstr ""
 "Uso:\t%s [opción GNU longa] [opción] ...\n"
 "\t%s [opción GNU longa] [opción] guión-do-shell\n"
 
-#: shell.c:2038
+#: shell.c:2064
 msgid "GNU long options:\n"
 msgstr "Opcións GNU longas:\n"
 
-#: shell.c:2042
+#: shell.c:2068
 msgid "Shell options:\n"
 msgstr "Opcións do shell:\n"
 
-#: shell.c:2043
+#: shell.c:2069
 #, fuzzy
 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n"
 msgstr "\t-irsD o -c orde ou -O opcion_shopt\t\t(só invocación)\n"
 
-#: shell.c:2062
+#: shell.c:2088
 #, c-format
 msgid "\t-%s or -o option\n"
 msgstr "\t-%s ou -o opción\n"
 
-#: shell.c:2068
+#: shell.c:2094
 #, c-format
 msgid "Type `%s -c \"help set\"' for more information about shell options.\n"
 msgstr ""
 "Escriba `%s -c \"help set\"' para máis información sobre as opcións do "
 "shell.\n"
 
-#: shell.c:2069
+#: shell.c:2095
 #, c-format
 msgid "Type `%s -c help' for more information about shell builtin commands.\n"
 msgstr ""
 "Escriba `%s -c help' para máis información sobre as ordes internas do "
 "shell.\n"
 
-#: shell.c:2070
+#: shell.c:2096
 #, c-format
 msgid "Use the `bashbug' command to report bugs.\n"
 msgstr "Use a orden `bashbug' para reportar erros.\n"
 
-#: shell.c:2072
+#: shell.c:2098
 #, c-format
 msgid "bash home page: <http://www.gnu.org/software/bash>\n"
 msgstr ""
 
-#: shell.c:2073
+#: shell.c:2099
 #, c-format
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 msgstr ""
 
-#: sig.c:757
+#: sig.c:765
 #, c-format
 msgid "sigprocmask: %d: invalid operation"
 msgstr "sigprocmask: %d: operación non válida"
 
-#: siglist.c:47
+#: siglist.c:48
 msgid "Bogus signal"
 msgstr "Sinal ambigüa"
 
-#: siglist.c:50
+#: siglist.c:51
 msgid "Hangup"
 msgstr "Colgar"
 
-#: siglist.c:54
+#: siglist.c:55
 msgid "Interrupt"
 msgstr "Interromper"
 
-#: siglist.c:58
+#: siglist.c:59
 msgid "Quit"
 msgstr "Saír"
 
-#: siglist.c:62
+#: siglist.c:63
 msgid "Illegal instruction"
 msgstr "Instrución ilegal"
 
-#: siglist.c:66
+#: siglist.c:67
 msgid "BPT trace/trap"
 msgstr "BPT rastreo/captura"
 
-#: siglist.c:74
+#: siglist.c:75
 msgid "ABORT instruction"
 msgstr "instrución ABORT"
 
-#: siglist.c:78
+#: siglist.c:79
 msgid "EMT instruction"
 msgstr "instrución EMT"
 
-#: siglist.c:82
+#: siglist.c:83
 msgid "Floating point exception"
 msgstr "Excepción de coma flotante"
 
-#: siglist.c:86
+#: siglist.c:87
 msgid "Killed"
 msgstr "Matado"
 
-#: siglist.c:90
+#: siglist.c:91
 msgid "Bus error"
 msgstr "Erro no bus"
 
-#: siglist.c:94
+#: siglist.c:95
 msgid "Segmentation fault"
 msgstr "Violación de segmento"
 
-#: siglist.c:98
+#: siglist.c:99
 msgid "Bad system call"
 msgstr "Chamada ao sistema errónea"
 
-#: siglist.c:102
+#: siglist.c:103
 msgid "Broken pipe"
 msgstr "Tubería rota"
 
-#: siglist.c:106
+#: siglist.c:107
 msgid "Alarm clock"
 msgstr "Temporizador"
 
-#: siglist.c:110
+#: siglist.c:111
 msgid "Terminated"
 msgstr "Rematado"
 
-#: siglist.c:114
+#: siglist.c:115
 msgid "Urgent IO condition"
 msgstr "Condicón de E/s urxente"
 
-#: siglist.c:118
+#: siglist.c:119
 msgid "Stopped (signal)"
 msgstr "Detido (sinal)"
 
-#: siglist.c:126
+#: siglist.c:127
 msgid "Continue"
 msgstr "Continúa"
 
-#: siglist.c:134
+#: siglist.c:135
 msgid "Child death or stop"
 msgstr "O proceso fillo morreu ou está parado"
 
-#: siglist.c:138
+#: siglist.c:139
 msgid "Stopped (tty input)"
 msgstr "Detido (entrada pola terminal)"
 
-#: siglist.c:142
+#: siglist.c:143
 msgid "Stopped (tty output)"
 msgstr "Detido (saída pola terminal)"
 
-#: siglist.c:146
+#: siglist.c:147
 msgid "I/O ready"
 msgstr "E/S listas"
 
-#: siglist.c:150
+#: siglist.c:151
 msgid "CPU limit"
 msgstr "Límite de CPU"
 
-#: siglist.c:154
+#: siglist.c:155
 msgid "File limit"
 msgstr "Límite de ficheiros"
 
-#: siglist.c:158
+#: siglist.c:159
 msgid "Alarm (virtual)"
 msgstr "Alarma (virtual)"
 
-#: siglist.c:162
+#: siglist.c:163
 msgid "Alarm (profile)"
 msgstr "Alarma (contorno)"
 
-#: siglist.c:166
+#: siglist.c:167
 msgid "Window changed"
 msgstr "Xanela cambiada"
 
-#: siglist.c:170
+#: siglist.c:171
 msgid "Record lock"
 msgstr "Bloqueo de gravación"
 
-#: siglist.c:174
+#: siglist.c:175
 msgid "User signal 1"
 msgstr "Sinal de usuario 1"
 
-#: siglist.c:178
+#: siglist.c:179
 msgid "User signal 2"
 msgstr "Sinal de usuario 2"
 
-#: siglist.c:182
+#: siglist.c:183
 msgid "HFT input data pending"
 msgstr "entrada de datos HFT pendente"
 
-#: siglist.c:186
+#: siglist.c:187
 msgid "power failure imminent"
 msgstr "fallo de enerxía inminente"
 
-#: siglist.c:190
+#: siglist.c:191
 msgid "system crash imminent"
 msgstr "caída do sistema inminente"
 
-#: siglist.c:194
+#: siglist.c:195
 msgid "migrate process to another CPU"
 msgstr "migrando o proceso a outra CPU"
 
-#: siglist.c:198
+#: siglist.c:199
 msgid "programming error"
 msgstr "erro de programación"
 
-#: siglist.c:202
+#: siglist.c:203
 msgid "HFT monitor mode granted"
 msgstr "o modo monitor HFT foi concedido"
 
-#: siglist.c:206
+#: siglist.c:207
 msgid "HFT monitor mode retracted"
 msgstr "o modo monitor HTF foi retirado"
 
-#: siglist.c:210
+#: siglist.c:211
 msgid "HFT sound sequence has completed"
 msgstr "a secuencia de son HFT foi completada"
 
-#: siglist.c:214
+#: siglist.c:215
 msgid "Information request"
 msgstr "Solicitude de información"
 
-#: siglist.c:222 siglist.c:224
+#: siglist.c:223 siglist.c:225
 #, c-format
 msgid "Unknown Signal #%d"
 msgstr "Sinal descoñecido #%d"
 
-#: subst.c:1476 subst.c:1666
+#: subst.c:1480 subst.c:1670
 #, c-format
 msgid "bad substitution: no closing `%s' in %s"
 msgstr "susbtitución errónea: non hai un `%s' que peche en %s"
 
-#: subst.c:3281
+#: subst.c:3307
 #, c-format
 msgid "%s: cannot assign list to array member"
 msgstr "%s: no é posíbel asignar unha lista a un membro da matriz"
 
-#: subst.c:5910 subst.c:5926
+#: subst.c:6048 subst.c:6064
 msgid "cannot make pipe for process substitution"
 msgstr "non é posíbel crear a tubería para a sustitución do proceso"
 
-#: subst.c:5985
+#: subst.c:6124
 msgid "cannot make child for process substitution"
 msgstr "non é posíbel crear un proceso fillo para a substitución do proceso"
 
-#: subst.c:6059
+#: subst.c:6198
 #, c-format
 msgid "cannot open named pipe %s for reading"
 msgstr "non é posíbel abrir a tubería chamada %s para lectura"
 
-#: subst.c:6061
+#: subst.c:6200
 #, c-format
 msgid "cannot open named pipe %s for writing"
 msgstr "non é posíbel abrir a tubería chamada %s para escritura"
 
-#: subst.c:6084
+#: subst.c:6223
 #, c-format
 msgid "cannot duplicate named pipe %s as fd %d"
 msgstr "non é posíbel duplicar a tubería chamada %s como df %d"
 
-#: subst.c:6213
+#: subst.c:6370
 #, fuzzy
 msgid "command substitution: ignored null byte in input"
 msgstr "substitución errónea: non hai unha \"`\" que peche en %s"
 
-#: subst.c:6353
+#: subst.c:6533
 msgid "cannot make pipe for command substitution"
 msgstr "non é posíble crear a tubería para a substitución da orde"
 
-#: subst.c:6397
+#: subst.c:6580
 msgid "cannot make child for command substitution"
 msgstr "non é posíbel crear un proceso fillo para a substitución da orde"
 
-#: subst.c:6423
+#: subst.c:6613
 msgid "command_substitute: cannot duplicate pipe as fd 1"
 msgstr "command_substitute: non é posíbel duplicar a tubería como fd 1"
 
-#: subst.c:6883 subst.c:9952
+#: subst.c:7082 subst.c:10252
 #, fuzzy, c-format
 msgid "%s: invalid variable name for name reference"
 msgstr "%s: %s: valor non válido para o descitor de ficheiro de rastreo"
 
-#: subst.c:6979 subst.c:6997 subst.c:7169
+#: subst.c:7178 subst.c:7196 subst.c:7369
 #, fuzzy, c-format
 msgid "%s: invalid indirect expansion"
 msgstr "%s: conta de liñas non válida"
 
-#: subst.c:7013 subst.c:7177
+#: subst.c:7212 subst.c:7377
 #, fuzzy, c-format
 msgid "%s: invalid variable name"
 msgstr "`%s': nome de alias non válido"
 
-#: subst.c:7256
+#: subst.c:7478
 #, fuzzy, c-format
 msgid "%s: parameter not set"
 msgstr "%s: parámetro nulo ou non estabelecido"
 
-#: subst.c:7258
+#: subst.c:7480
 #, c-format
 msgid "%s: parameter null or not set"
 msgstr "%s: parámetro nulo ou non estabelecido"
 
-#: subst.c:7503 subst.c:7518
+#: subst.c:7727 subst.c:7742
 #, c-format
 msgid "%s: substring expression < 0"
 msgstr "%s: expresión de subcadea < 0"
 
-#: subst.c:9281 subst.c:9302
+#: subst.c:9560 subst.c:9587
 #, c-format
 msgid "%s: bad substitution"
 msgstr "%s: substitución errónea"
 
-#: subst.c:9390
+#: subst.c:9678
 #, c-format
 msgid "$%s: cannot assign in this way"
 msgstr "$%s: non é posíbel asignar de esta forma"
 
-#: subst.c:9814
+#: subst.c:10111
 msgid ""
 "future versions of the shell will force evaluation as an arithmetic "
 "substitution"
@@ -2071,12 +2081,12 @@ msgstr ""
 "versiones futuras do intérprete obligarán a evaluación como unha "
 "substitución aritmética"
 
-#: subst.c:10367
+#: subst.c:10795
 #, c-format
 msgid "bad substitution: no closing \"`\" in %s"
 msgstr "substitución errónea: non hai unha \"`\" que peche en %s"
 
-#: subst.c:11434
+#: subst.c:11874
 #, c-format
 msgid "no match: %s"
 msgstr "non hai concidencia: %s"
@@ -2099,21 +2109,21 @@ msgstr "agardábase `)'"
 msgid "`)' expected, found %s"
 msgstr "`)' agardábase, atopouse %s"
 
-#: test.c:466 test.c:799
+#: test.c:469 test.c:814
 #, c-format
 msgid "%s: binary operator expected"
 msgstr "%s: agardábase un operador binario"
 
-#: test.c:756 test.c:759
+#: test.c:771 test.c:774
 #, c-format
 msgid "%s: unary operator expected"
 msgstr "%s: agardábase un operador unario"
 
-#: test.c:881
+#: test.c:896
 msgid "missing `]'"
 msgstr "falta un «]»"
 
-#: test.c:899
+#: test.c:914
 #, fuzzy, c-format
 msgid "syntax error: `%s' unexpected"
 msgstr "error sintáctico: `;' non esperado"
@@ -2122,17 +2132,17 @@ msgstr "error sintáctico: `;' non esperado"
 msgid "invalid signal number"
 msgstr "número de sinal non válido"
 
-#: trap.c:325
+#: trap.c:323
 #, c-format
 msgid "trap handler: maximum trap handler level exceeded (%d)"
 msgstr ""
 
-#: trap.c:414
+#: trap.c:412
 #, c-format
 msgid "run_pending_traps: bad value in trap_list[%d]: %p"
 msgstr "run_pending_traps: valor erróneo en trap_list[%d]: %p"
 
-#: trap.c:418
+#: trap.c:416
 #, c-format
 msgid ""
 "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
@@ -2140,86 +2150,91 @@ msgstr ""
 "run_pending_traps: o manexador de sinal é SIG_DFL, reenviando %d (%s) a sí "
 "mesmo"
 
-#: trap.c:487
+#: trap.c:509
 #, c-format
 msgid "trap_handler: bad signal %d"
 msgstr "trap_handler: sinal errónea %d"
 
-#: variables.c:421
+#: variables.c:424
 #, c-format
 msgid "error importing function definition for `%s'"
 msgstr "erro ao importar a definición da función para «%s»"
 
-#: variables.c:833
+#: variables.c:838
 #, c-format
 msgid "shell level (%d) too high, resetting to 1"
 msgstr "o nivel de shell (%d) é demasiado alto, restabelécese a 1"
 
-#: variables.c:2674
+#: variables.c:2642
 msgid "make_local_variable: no function context at current scope"
 msgstr "make_local_variable: non hai contexto de función no ámbito actual"
 
-#: variables.c:2693
+#: variables.c:2661
 #, fuzzy, c-format
 msgid "%s: variable may not be assigned value"
 msgstr "%s: non é posíbel asignar o gd á variábel"
 
-#: variables.c:3475
+#: variables.c:2818 variables.c:2874
+#, c-format
+msgid "%s: cannot inherit value from incompatible type"
+msgstr ""
+
+#: variables.c:3459
 #, c-format
 msgid "%s: assigning integer to name reference"
 msgstr ""
 
-#: variables.c:4404
+#: variables.c:4390
 msgid "all_local_variables: no function context at current scope"
 msgstr "all_local_variables: non hai contexto de función no ámbito actual"
 
-#: variables.c:4771
+#: variables.c:4757
 #, c-format
 msgid "%s has null exportstr"
 msgstr "%s ten exportstr nulo"
 
-#: variables.c:4776 variables.c:4785
+#: variables.c:4762 variables.c:4771
 #, c-format
 msgid "invalid character %d in exportstr for %s"
 msgstr "carácter non válido %d en exportsrt para %s"
 
-#: variables.c:4791
+#: variables.c:4777
 #, c-format
 msgid "no `=' in exportstr for %s"
 msgstr "non hai «=» en exportstr para %s"
 
-#: variables.c:5331
+#: variables.c:5317
 msgid "pop_var_context: head of shell_variables not a function context"
 msgstr ""
 "pop_var_context: a cabezak de shell_variables non é un contexto de función"
 
-#: variables.c:5344
+#: variables.c:5330
 msgid "pop_var_context: no global_variables context"
 msgstr "pop_var_context: non é un contexto global_variables "
 
-#: variables.c:5424
+#: variables.c:5410
 msgid "pop_scope: head of shell_variables not a temporary environment scope"
 msgstr ""
 "pop_scope: a cabeza de shell_variables non é un ámbito de ambiente temporal"
 
-#: variables.c:6387
+#: variables.c:6400
 #, c-format
 msgid "%s: %s: cannot open as FILE"
 msgstr "%s: %s: non é posíbel abrir como FICHEIRO"
 
-#: variables.c:6392
+#: variables.c:6405
 #, c-format
 msgid "%s: %s: invalid value for trace file descriptor"
 msgstr "%s: %s: valor non válido para o descitor de ficheiro de rastreo"
 
-#: variables.c:6437
+#: variables.c:6450
 #, fuzzy, c-format
 msgid "%s: %s: compatibility value out of range"
 msgstr "%s: %s fóra de rango"
 
 #: version.c:46 version2.c:46
 #, fuzzy
-msgid "Copyright (C) 2020 Free Software Foundation, Inc."
+msgid "Copyright (C) 2022 Free Software Foundation, Inc."
 msgstr "Copyright (C) 2009 Free Software Foundation, Inc.\n"
 
 #: version.c:47 version2.c:47
@@ -2314,12 +2329,16 @@ msgstr "command [-pVv] orde [arg ...]"
 
 #: builtins.c:78
 #, fuzzy
-msgid "declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]"
+msgid ""
+"declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] "
+"[name ...]"
 msgstr "declare [-aAfFgilrtux] [-p] [nome[=valor] ...]"
 
 #: builtins.c:80
 #, fuzzy
-msgid "typeset [-aAfFgiIlnrtux] [-p] name[=value] ..."
+msgid ""
+"typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] "
+"[name ...]"
 msgstr "typeset [-aAfFgilrtux] [-p] nome[=valor] ..."
 
 #: builtins.c:82
@@ -2422,7 +2441,8 @@ msgid "return [n]"
 msgstr "return [n]"
 
 #: builtins.c:142
-msgid "set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]"
+#, fuzzy
+msgid "set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]"
 msgstr "set [-abefhkmnptuvxBCHP] [-o nome-opción] [--] [arg ...]"
 
 #: builtins.c:144
@@ -2472,7 +2492,7 @@ msgstr "type [-afptP] nome [nome ...]"
 
 #: builtins.c:171
 #, fuzzy
-msgid "ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]"
+msgid "ulimit [-SHabcdefiklmnpqrstuvxPRT] [limit]"
 msgstr "ulimit [-SHacdefilmnpqrstuvx] [límite]"
 
 #: builtins.c:174
@@ -2516,11 +2536,13 @@ msgid ""
 msgstr "if ORDES; then ORDES; [ elif ORDES; then ORDES; ]...[ else ORDES; ] fi"
 
 #: builtins.c:196
-msgid "while COMMANDS; do COMMANDS; done"
+#, fuzzy
+msgid "while COMMANDS; do COMMANDS-2; done"
 msgstr "while ORDES; do ORDES; done"
 
 #: builtins.c:198
-msgid "until COMMANDS; do COMMANDS; done"
+#, fuzzy
+msgid "until COMMANDS; do COMMANDS-2; done"
 msgstr "until ORDES; do ORDES; done"
 
 #: builtins.c:200
@@ -3509,7 +3531,9 @@ msgid ""
 "    word to the second NAME, and so on, with any leftover words assigned to\n"
 "    the last NAME.  Only the characters found in $IFS are recognized as "
 "word\n"
-"    delimiters.\n"
+"    delimiters. By default, the backslash character escapes delimiter "
+"characters\n"
+"    and newline.\n"
 "    \n"
 "    If no NAMEs are supplied, the line read is stored in the REPLY "
 "variable.\n"
@@ -3550,7 +3574,7 @@ msgid ""
 "    or an invalid file descriptor is supplied as the argument to -u."
 msgstr ""
 
-#: builtins.c:1041
+#: builtins.c:1042
 msgid ""
 "Return from a shell function.\n"
 "    \n"
@@ -3562,7 +3586,7 @@ msgid ""
 "    Returns N, or failure if the shell is not executing a function or script."
 msgstr ""
 
-#: builtins.c:1054
+#: builtins.c:1055
 msgid ""
 "Set or unset values of shell options and positional parameters.\n"
 "    \n"
@@ -3648,7 +3672,7 @@ msgid ""
 "    Returns success unless an invalid option is given."
 msgstr ""
 
-#: builtins.c:1139
+#: builtins.c:1140
 msgid ""
 "Unset values and attributes of shell variables and functions.\n"
 "    \n"
@@ -3670,7 +3694,7 @@ msgid ""
 "    Returns success unless an invalid option is given or a NAME is read-only."
 msgstr ""
 
-#: builtins.c:1161
+#: builtins.c:1162
 msgid ""
 "Set export attribute for shell variables.\n"
 "    \n"
@@ -3689,7 +3713,7 @@ msgid ""
 "    Returns success unless an invalid option is given or NAME is invalid."
 msgstr ""
 
-#: builtins.c:1180
+#: builtins.c:1181
 msgid ""
 "Mark shell variables as unchangeable.\n"
 "    \n"
@@ -3710,7 +3734,7 @@ msgid ""
 "    Returns success unless an invalid option is given or NAME is invalid."
 msgstr ""
 
-#: builtins.c:1202
+#: builtins.c:1203
 msgid ""
 "Shift positional parameters.\n"
 "    \n"
@@ -3721,7 +3745,7 @@ msgid ""
 "    Returns success unless N is negative or greater than $#."
 msgstr ""
 
-#: builtins.c:1214 builtins.c:1229
+#: builtins.c:1215 builtins.c:1230
 msgid ""
 "Execute commands from a file in the current shell.\n"
 "    \n"
@@ -3735,7 +3759,7 @@ msgid ""
 "    FILENAME cannot be read."
 msgstr ""
 
-#: builtins.c:1245
+#: builtins.c:1246
 msgid ""
 "Suspend shell execution.\n"
 "    \n"
@@ -3761,7 +3785,7 @@ msgstr ""
 "    Devolve con éxito a menos que non estea activo o control de traballos o\n"
 "    se produza un erro."
 
-#: builtins.c:1261
+#: builtins.c:1262
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -3844,7 +3868,7 @@ msgid ""
 "    false or an invalid argument is given."
 msgstr ""
 
-#: builtins.c:1343
+#: builtins.c:1344
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -3856,7 +3880,7 @@ msgstr ""
 "    Este é un sinónimo para a orde interna \"test\", pero o último\n"
 "    argumento debe ser un `]' literal, que coincida co `[' inicial."
 
-#: builtins.c:1352
+#: builtins.c:1353
 msgid ""
 "Display process times.\n"
 "    \n"
@@ -3875,7 +3899,7 @@ msgstr ""
 "    Estado de saída:\n"
 "    Sempre con éxito."
 
-#: builtins.c:1364
+#: builtins.c:1365
 msgid ""
 "Trap signals and other events.\n"
 "    \n"
@@ -3919,7 +3943,7 @@ msgid ""
 "given."
 msgstr ""
 
-#: builtins.c:1400
+#: builtins.c:1401
 msgid ""
 "Display information about command type.\n"
 "    \n"
@@ -3949,7 +3973,7 @@ msgid ""
 "found."
 msgstr ""
 
-#: builtins.c:1431
+#: builtins.c:1432
 msgid ""
 "Modify shell resource limits.\n"
 "    \n"
@@ -3999,7 +4023,7 @@ msgid ""
 "    Returns success unless an invalid option is supplied or an error occurs."
 msgstr ""
 
-#: builtins.c:1482
+#: builtins.c:1483
 msgid ""
 "Display or set file mode mask.\n"
 "    \n"
@@ -4017,7 +4041,7 @@ msgid ""
 "    Returns success unless MODE is invalid or an invalid option is given."
 msgstr ""
 
-#: builtins.c:1502
+#: builtins.c:1503
 msgid ""
 "Wait for job completion and return exit status.\n"
 "    \n"
@@ -4049,7 +4073,7 @@ msgid ""
 "    children."
 msgstr ""
 
-#: builtins.c:1533
+#: builtins.c:1534
 #, fuzzy
 msgid ""
 "Wait for process completion and return exit status.\n"
@@ -4074,7 +4098,7 @@ msgstr ""
 "    Devolve o estado de ID; falla se ID non é válido ou se se fornece unha\n"
 "    opción non válida."
 
-#: builtins.c:1548
+#: builtins.c:1549
 msgid ""
 "Execute commands for each member in a list.\n"
 "    \n"
@@ -4096,7 +4120,7 @@ msgstr ""
 "    Estado de Saída:\n"
 "    Devuelve o estado da última orden executada."
 
-#: builtins.c:1562
+#: builtins.c:1563
 msgid ""
 "Arithmetic for loop.\n"
 "    \n"
@@ -4126,7 +4150,7 @@ msgstr ""
 "    Estado de saída:\n"
 "    Devolve o estado da última orde executada."
 
-#: builtins.c:1580
+#: builtins.c:1581
 msgid ""
 "Select words from a list and execute commands.\n"
 "    \n"
@@ -4146,7 +4170,7 @@ msgid ""
 "    Returns the status of the last command executed."
 msgstr ""
 
-#: builtins.c:1601
+#: builtins.c:1602
 msgid ""
 "Report time consumed by pipeline's execution.\n"
 "    \n"
@@ -4162,7 +4186,7 @@ msgid ""
 "    The return status is the return status of PIPELINE."
 msgstr ""
 
-#: builtins.c:1618
+#: builtins.c:1619
 msgid ""
 "Execute commands based on pattern matching.\n"
 "    \n"
@@ -4180,7 +4204,7 @@ msgstr ""
 "    Estado de Saída:\n"
 "    Devolve o estado da última orde executada."
 
-#: builtins.c:1630
+#: builtins.c:1631
 msgid ""
 "Execute commands based on conditional.\n"
 "    \n"
@@ -4201,12 +4225,14 @@ msgid ""
 "    Returns the status of the last command executed."
 msgstr ""
 
-#: builtins.c:1647
+#: builtins.c:1648
+#, fuzzy
 msgid ""
 "Execute commands as long as a test succeeds.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `while' COMMANDS has an exit status of zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS "
+"has\n"
+"    an exit status of zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
@@ -4219,12 +4245,14 @@ msgstr ""
 "    Estado de Saída:\n"
 "    Devolve o estado da última orde executada."
 
-#: builtins.c:1659
+#: builtins.c:1660
+#, fuzzy
 msgid ""
 "Execute commands as long as a test does not succeed.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `until' COMMANDS has an exit status which is not zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS "
+"has\n"
+"    an exit status which is not zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
@@ -4237,7 +4265,7 @@ msgstr ""
 "    Estado de Saída:\n"
 "    Devolve o estado da última orde executada."
 
-#: builtins.c:1671
+#: builtins.c:1672
 #, fuzzy
 msgid ""
 "Create a coprocess named NAME.\n"
@@ -4260,7 +4288,7 @@ msgstr ""
 "    Estado de Saída:\n"
 "    Devolve o estado de saída da ORDE."
 
-#: builtins.c:1685
+#: builtins.c:1686
 msgid ""
 "Define shell function.\n"
 "    \n"
@@ -4274,7 +4302,7 @@ msgid ""
 "    Returns success unless NAME is readonly."
 msgstr ""
 
-#: builtins.c:1699
+#: builtins.c:1700
 msgid ""
 "Group commands as a unit.\n"
 "    \n"
@@ -4292,7 +4320,7 @@ msgstr ""
 "    Estado de Saída:\n"
 "    Devolve o estado da última orde executada."
 
-#: builtins.c:1711
+#: builtins.c:1712
 msgid ""
 "Resume job in foreground.\n"
 "    \n"
@@ -4306,7 +4334,7 @@ msgid ""
 "    Returns the status of the resumed job."
 msgstr ""
 
-#: builtins.c:1726
+#: builtins.c:1727
 #, fuzzy
 msgid ""
 "Evaluate arithmetic expression.\n"
@@ -4325,7 +4353,7 @@ msgstr ""
 "    Estado de Saída:\n"
 "    Devolve 1 se a EXPRESIÓN avalía a 0; devovle 0 de outra maneira."
 
-#: builtins.c:1738
+#: builtins.c:1739
 msgid ""
 "Execute conditional command.\n"
 "    \n"
@@ -4353,7 +4381,7 @@ msgid ""
 "    0 or 1 depending on value of EXPRESSION."
 msgstr ""
 
-#: builtins.c:1764
+#: builtins.c:1765
 msgid ""
 "Common shell variable names and usage.\n"
 "    \n"
@@ -4407,7 +4435,7 @@ msgid ""
 "    \t\tcommands should be saved on the history list.\n"
 msgstr ""
 
-#: builtins.c:1821
+#: builtins.c:1822
 #, fuzzy
 msgid ""
 "Add directories to stack.\n"
@@ -4456,7 +4484,7 @@ msgstr ""
 "    \n"
 "    A orde interna `dirs' mostra a rima de directorios."
 
-#: builtins.c:1855
+#: builtins.c:1856
 #, fuzzy
 msgid ""
 "Remove directories from stack.\n"
@@ -4503,7 +4531,7 @@ msgstr ""
 "    \n"
 "    A orde interna `dirs' mostra a pila de directorios."
 
-#: builtins.c:1885
+#: builtins.c:1886
 #, fuzzy
 msgid ""
 "Display directory stack.\n"
@@ -4553,7 +4581,7 @@ msgstr ""
 "\tlista mostrada por dirs cando se chama sen opcións,\n"
 "\tcomezando desde cero."
 
-#: builtins.c:1916
+#: builtins.c:1917
 #, fuzzy
 msgid ""
 "Set and unset shell options.\n"
@@ -4590,7 +4618,7 @@ msgstr ""
 "    Devolve con éxito se se activa NOME_OPCIÓN; falla se se fornece\n"
 "    unha opción non válida ou NOME_OPCIÓN está desactivado."
 
-#: builtins.c:1937
+#: builtins.c:1938
 msgid ""
 "Formats and prints ARGUMENTS under control of the FORMAT.\n"
 "    \n"
@@ -4613,6 +4641,8 @@ msgid ""
 "    \n"
 "      %b\texpand backslash escape sequences in the corresponding argument\n"
 "      %q\tquote the argument in a way that can be reused as shell input\n"
+"      %Q\tlike %q, but apply any precision to the unquoted argument before\n"
+"    \t\tquoting\n"
 "      %(fmt)T\toutput the date-time string resulting from using FMT as a "
 "format\n"
 "    \t        string for strftime(3)\n"
@@ -4629,7 +4659,7 @@ msgid ""
 "    error occurs."
 msgstr ""
 
-#: builtins.c:1971
+#: builtins.c:1974
 msgid ""
 "Specify how arguments are to be completed by Readline.\n"
 "    \n"
@@ -4660,7 +4690,7 @@ msgid ""
 "    Returns success unless an invalid option is supplied or an error occurs."
 msgstr ""
 
-#: builtins.c:2001
+#: builtins.c:2004
 msgid ""
 "Display possible completions depending on the options.\n"
 "    \n"
@@ -4682,7 +4712,7 @@ msgstr ""
 "    Devolve con éxito a menos que se forneza unha opción non válida o\n"
 "    se produza un erro."
 
-#: builtins.c:2016
+#: builtins.c:2019
 msgid ""
 "Modify or display completion options.\n"
 "    \n"
@@ -4714,7 +4744,7 @@ msgid ""
 "    have a completion specification defined."
 msgstr ""
 
-#: builtins.c:2047
+#: builtins.c:2050
 msgid ""
 "Read lines from the standard input into an indexed array variable.\n"
 "    \n"
@@ -4756,7 +4786,7 @@ msgid ""
 "    not an indexed array."
 msgstr ""
 
-#: builtins.c:2083
+#: builtins.c:2086
 msgid ""
 "Read lines from a file into an array variable.\n"
 "    \n"
@@ -4766,6 +4796,10 @@ msgstr ""
 "    \n"
 "    Un sinónimo de `mapfile'."
 
+#, c-format
+#~ msgid "%s: invalid associative array key"
+#~ msgstr "%s: índice de matriz asociativa non válido"
+
 #, fuzzy
 #~ msgid "Copyright (C) 2019 Free Software Foundation, Inc."
 #~ msgstr "Copyright (C) 2011 Free Software Foundation, Inc."
index a7506358e5e6744cdf20bab7dcf18a78068eca9c..228b369eecd208f14b7da572944d2bd3c66110c3 100644 (file)
Binary files a/po/hr.gmo and b/po/hr.gmo differ
index f68280b6b9629bc712a33da53a28c6f14786f94d..624e0d0104d28f87e3bae4fae2c3c91a1d54d7a3 100644 (file)
--- a/po/hr.po
+++ b/po/hr.po
@@ -3,78 +3,73 @@
 # This file is distributed under the same license as the bash package.
 #
 # Tomislav Krznar <tomislav.krznar@gmail.com>, 2012, 2013.
-# Božidar Putanec <bozidarp@yahoo.com>, 2018, 2019, 2020, 2021.
+# Božidar Putanec <bozidarp@yahoo.com>, 2018, 2019, 2020, 2021, 2022.
 msgid ""
 msgstr ""
-"Project-Id-Version: bash 5.1\n"
+"Project-Id-Version: bash 5.2-rc1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-11-28 12:51-0500\n"
-"PO-Revision-Date: 2021-01-02 13:56-0800\n"
+"POT-Creation-Date: 2022-01-11 14:50-0500\n"
+"PO-Revision-Date: 2022-06-17 11:19-0700\n"
 "Last-Translator: Božidar Putanec <bozidarp@yahoo.com>\n"
 "Language-Team: Croatian <lokalizacija@linux.hr>\n"
 "Language: hr\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-"X-Generator: Lokalize 19.12.3\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"X-Generator: Lokalize 22.07.70\n"
 
 #: arrayfunc.c:66
 msgid "bad array subscript"
 msgstr "loši indeks polja"
 
-#: arrayfunc.c:421 builtins/declare.def:638 variables.c:2274 variables.c:2300
-#: variables.c:3133
+#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268
+#: variables.c:3101
 #, c-format
 msgid "%s: removing nameref attribute"
 msgstr "%s: uklanjamo atribut nameref"
 
-#: arrayfunc.c:446 builtins/declare.def:851
+#: arrayfunc.c:496 builtins/declare.def:868
 #, c-format
 msgid "%s: cannot convert indexed to associative array"
 msgstr "%s: nije moguće pretvoriti indeksirano polje u asocijativno polje"
 
-#: arrayfunc.c:700
-#, c-format
-msgid "%s: invalid associative array key"
-msgstr "%s: nevaljan ključ asocijativnog polja"
-
-#: arrayfunc.c:702
+#: arrayfunc.c:777
 #, c-format
 msgid "%s: cannot assign to non-numeric index"
 msgstr "%s: nenumerički indeks nije moguć"
 
-#: arrayfunc.c:747
+#: arrayfunc.c:822
 #, c-format
 msgid "%s: %s: must use subscript when assigning associative array"
 msgstr "%s: %s: indeks je nužan pri dodjeli asocijativnom polju"
 
-#: bashhist.c:452
+#: bashhist.c:455
 #, c-format
 msgid "%s: cannot create: %s"
 msgstr "%s: nije moguće stvoriti: %s"
 
-#: bashline.c:4310
+#: bashline.c:4479
 msgid "bash_execute_unix_command: cannot find keymap for command"
 msgstr "bash_execute_unix_command: nije moguće pronaći prečac (keymap) za naredbu"
 
-#: bashline.c:4459
+#: bashline.c:4637
 #, c-format
 msgid "%s: first non-whitespace character is not `\"'"
 msgstr "%s: prvi nebijeli znak nije „\"“"
 
-#: bashline.c:4488
+#: bashline.c:4666
 #, c-format
 msgid "no closing `%c' in %s"
 msgstr "nema zaključnog „%c“ u %s"
 
-#: bashline.c:4519
+#: bashline.c:4697
 #, c-format
 msgid "%s: missing colon separator"
 msgstr "%s: nedostaje separator (dvotočka)"
 
-#: bashline.c:4555
+#: bashline.c:4733
 #, c-format
 msgid "`%s': cannot unbind in command keymap"
 msgstr "„%s“: nije moguće razvezati prečac (keymap) za naredbu"
@@ -95,7 +90,7 @@ msgstr "zamjena vitičastih zagrada: nema dovoljno memorije za %u elemenata"
 msgid "brace expansion: failed to allocate memory for `%s'"
 msgstr "zamjena vitičastih zagrada: nema dovoljno memorije za „%s“"
 
-#: builtins/alias.def:131 variables.c:1844
+#: builtins/alias.def:131 variables.c:1817
 #, c-format
 msgid "`%s': invalid alias name"
 msgstr "„%s“: ime aliasa nije valjano"
@@ -166,7 +161,7 @@ msgstr ""
 msgid "HOME not set"
 msgstr "HOME nije definiran"
 
-#: builtins/cd.def:335 builtins/common.c:161 test.c:901
+#: builtins/cd.def:335 builtins/common.c:161 test.c:916
 msgid "too many arguments"
 msgstr "previše argumenata"
 
@@ -193,7 +188,7 @@ msgstr "upozorenje: "
 msgid "%s: usage: "
 msgstr "%s: uporaba: "
 
-#: builtins/common.c:193 shell.c:516 shell.c:844
+#: builtins/common.c:193 shell.c:524 shell.c:866
 #, c-format
 msgid "%s: option requires an argument"
 msgstr "%s: opcija zahtijeva argument"
@@ -208,7 +203,7 @@ msgstr "%s: nužan je numerički argument"
 msgid "%s: not found"
 msgstr "%s: nije nađeno"
 
-#: builtins/common.c:216 shell.c:857
+#: builtins/common.c:216 shell.c:879
 #, c-format
 msgid "%s: invalid option"
 msgstr "%s: nevaljana opcija"
@@ -218,7 +213,7 @@ msgstr "%s: nevaljana opcija"
 msgid "%s: invalid option name"
 msgstr "%s: nevaljano ime za opciju"
 
-#: builtins/common.c:230 execute_cmd.c:2373 general.c:368 general.c:373
+#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373
 #, c-format
 msgid "`%s': not a valid identifier"
 msgstr "„%s“: nije valjano ime"
@@ -231,7 +226,7 @@ msgstr "nevaljan oktalni broj"
 msgid "invalid hex number"
 msgstr "nevaljan heksadecimalni broj"
 
-#: builtins/common.c:244 expr.c:1569
+#: builtins/common.c:244 expr.c:1574
 msgid "invalid number"
 msgstr "nevaljan broj"
 
@@ -245,88 +240,93 @@ msgstr "%s: nevaljana specifikacija signala"
 msgid "`%s': not a pid or valid job spec"
 msgstr "„%s“: nije PID ili nije valjana oznaka posla"
 
-#: builtins/common.c:266 error.c:510
+#: builtins/common.c:266 error.c:536
 #, c-format
 msgid "%s: readonly variable"
 msgstr "%s: je samo-za-čitanje varijabla"
 
-#: builtins/common.c:274
+#: builtins/common.c:273
+#, c-format
+msgid "%s: cannot assign"
+msgstr "%s: nije moguće pridružiti"
+
+#: builtins/common.c:281
 #, c-format
 msgid "%s: %s out of range"
 msgstr "%s: %s je izvan raspona"
 
-#: builtins/common.c:274 builtins/common.c:276
+#: builtins/common.c:281 builtins/common.c:283
 msgid "argument"
 msgstr "argument"
 
-#: builtins/common.c:276
+#: builtins/common.c:283
 #, c-format
 msgid "%s out of range"
 msgstr "%s je izvan raspona"
 
-#: builtins/common.c:284
+#: builtins/common.c:291
 #, c-format
 msgid "%s: no such job"
-msgstr "%s: nema takvoga posla"
+msgstr "%s: nema takvog posla"
 
-#: builtins/common.c:292
+#: builtins/common.c:299
 #, c-format
 msgid "%s: no job control"
 msgstr "%s: nema upravljanja poslovima"
 
-#: builtins/common.c:294
+#: builtins/common.c:301
 msgid "no job control"
 msgstr "nema upravljanja poslovima"
 
-#: builtins/common.c:304
+#: builtins/common.c:311
 #, c-format
 msgid "%s: restricted"
 msgstr "%s: ograničeni način rada"
 
-#: builtins/common.c:306
+#: builtins/common.c:313
 msgid "restricted"
 msgstr "ograničeni način rada"
 
-#: builtins/common.c:314
+#: builtins/common.c:321
 #, c-format
 msgid "%s: not a shell builtin"
 msgstr "%s: nije ugrađena naredba ljuske"
 
-#: builtins/common.c:323
+#: builtins/common.c:330
 #, c-format
 msgid "write error: %s"
 msgstr "greška pisanja: %s"
 
-#: builtins/common.c:331
+#: builtins/common.c:338
 #, c-format
 msgid "error setting terminal attributes: %s"
 msgstr "greška pri postavljanju svojstava terminala: %s"
 
-#: builtins/common.c:333
+#: builtins/common.c:340
 #, c-format
 msgid "error getting terminal attributes: %s"
 msgstr "greška pri preuzimanju svojstava terminala: %s"
 
-#: builtins/common.c:635
+#: builtins/common.c:642
 #, c-format
 msgid "%s: error retrieving current directory: %s: %s\n"
 msgstr "%s: greška u određivanju trenutnog direktorija: %s: %s\n"
 
-#: builtins/common.c:701 builtins/common.c:703
+#: builtins/common.c:708 builtins/common.c:710
 #, c-format
 msgid "%s: ambiguous job spec"
 msgstr "%s: oznaka posla nije jednoznačna"
 
-#: builtins/common.c:964
+#: builtins/common.c:971
 msgid "help not available in this version"
 msgstr "u ovoj inačici pomoć nije dostupna"
 
-#: builtins/common.c:1008 builtins/set.def:953 variables.c:3839
+#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825
 #, c-format
 msgid "%s: cannot unset: readonly %s"
 msgstr "%s: nije moguće izbrisati: %s je samo-za-čitanje"
 
-#: builtins/common.c:1013 builtins/set.def:932 variables.c:3844
+#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830
 #, c-format
 msgid "%s: cannot unset"
 msgstr "%s: nije moguće izbrisati"
@@ -336,108 +336,108 @@ msgstr "%s: nije moguće izbrisati"
 msgid "%s: invalid action name"
 msgstr "%s: nevaljano ime za akciju"
 
-#: builtins/complete.def:486 builtins/complete.def:634
-#: builtins/complete.def:865
+#: builtins/complete.def:486 builtins/complete.def:642
+#: builtins/complete.def:873
 #, c-format
 msgid "%s: no completion specification"
 msgstr "%s: nema specifikacije za dovršavanje"
 
-#: builtins/complete.def:688
+#: builtins/complete.def:696
 msgid "warning: -F option may not work as you expect"
 msgstr "upozorenje: opcija -F možda neće raditi prema očekivanju"
 
-#: builtins/complete.def:690
+#: builtins/complete.def:698
 msgid "warning: -C option may not work as you expect"
 msgstr "upozorenje: opcija -C možda neće raditi prema očekivanju"
 
-#: builtins/complete.def:838
+#: builtins/complete.def:846
 msgid "not currently executing completion function"
 msgstr "funkcija dovršavanja trenutno ne radi"
 
-#: builtins/declare.def:134
+#: builtins/declare.def:137
 msgid "can only be used in a function"
 msgstr "može se koristiti samo u funkciji"
 
-#: builtins/declare.def:363 builtins/declare.def:756
+#: builtins/declare.def:437
+msgid "cannot use `-f' to make functions"
+msgstr "„-f“ se ne može koristiti za definiranje funkcija"
+
+#: builtins/declare.def:464 execute_cmd.c:6132
+#, c-format
+msgid "%s: readonly function"
+msgstr "%s: je samo-za-čitanje funkcija"
+
+#: builtins/declare.def:521 builtins/declare.def:804
 #, c-format
 msgid "%s: reference variable cannot be an array"
 msgstr "%s: referentna varijabla ne može biti polje (array)"
 
-#: builtins/declare.def:374 variables.c:3385
+#: builtins/declare.def:532 variables.c:3359
 #, c-format
 msgid "%s: nameref variable self references not allowed"
 msgstr "%s: nameref varijablu nije dopušteno samoreferencirati"
 
-#: builtins/declare.def:379 variables.c:2104 variables.c:3304 variables.c:3312
-#: variables.c:3382
+#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286
+#: variables.c:3356
 #, c-format
 msgid "%s: circular name reference"
 msgstr "%s: kružna referencija imena"
 
-#: builtins/declare.def:384 builtins/declare.def:762 builtins/declare.def:773
+#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820
 #, c-format
 msgid "`%s': invalid variable name for name reference"
 msgstr "„%s“: nevaljano ime varijable za referenciju imena"
 
-#: builtins/declare.def:514
-msgid "cannot use `-f' to make functions"
-msgstr "„-f“ se ne može koristiti za definiranje funkcija"
-
-#: builtins/declare.def:526 execute_cmd.c:5986
-#, c-format
-msgid "%s: readonly function"
-msgstr "%s: je samo-za-čitanje funkcija"
-
-#: builtins/declare.def:824
-#, c-format
-msgid "%s: quoted compound array assignment deprecated"
-msgstr "%s: dodjela vrijednosti u navodnicima složenom polju je zastarjela"
-
-#: builtins/declare.def:838
+#: builtins/declare.def:856
 #, c-format
 msgid "%s: cannot destroy array variables in this way"
 msgstr "%s: nije moguće uništiti varijable polja na ovaj način"
 
-#: builtins/declare.def:845 builtins/read.def:815
+#: builtins/declare.def:862 builtins/read.def:887
 #, c-format
 msgid "%s: cannot convert associative to indexed array"
 msgstr "%s: nije moguće pretvoriti asocijativno u indeksirano polje"
 
-#: builtins/enable.def:143 builtins/enable.def:151
+#: builtins/declare.def:891
+#, c-format
+msgid "%s: quoted compound array assignment deprecated"
+msgstr "%s: dodjela vrijednosti u navodnicima složenom polju je zastarjela"
+
+#: builtins/enable.def:145 builtins/enable.def:153
 msgid "dynamic loading not available"
 msgstr "dinamičko učitavanje nije dostupno"
 
-#: builtins/enable.def:343
+#: builtins/enable.def:376
 #, c-format
 msgid "cannot open shared object %s: %s"
 msgstr "nije moguće otvoriti dijeljeni objekt %s: %s"
 
-#: builtins/enable.def:371
+#: builtins/enable.def:405
 #, c-format
 msgid "cannot find %s in shared object %s: %s"
 msgstr "nije moguće pronaći %s u dijeljenom objektu %s: %s"
 
-#: builtins/enable.def:388
+#: builtins/enable.def:422
 #, c-format
 msgid "%s: dynamic builtin already loaded"
 msgstr "%s: dinamički učitljiva ugrađena naredba već je učitana"
 
-#: builtins/enable.def:392
+#: builtins/enable.def:426
 #, c-format
 msgid "load function for %s returns failure (%d): not loaded"
 msgstr "funkcija učitavanja za %s završila je s greškom (%d): nije učitano"
 
-#: builtins/enable.def:517
+#: builtins/enable.def:551
 #, c-format
 msgid "%s: not dynamically loaded"
 msgstr "%s: nije dinamički učitan"
 
-#: builtins/enable.def:543
+#: builtins/enable.def:577
 #, c-format
 msgid "%s: cannot delete: %s"
 msgstr "%s: nije moguće izbrisati: %s"
 
-#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5818
+#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959
 #, c-format
 msgid "%s: is a directory"
 msgstr "%s: je direktorij"
@@ -452,7 +452,7 @@ msgstr "%s: nije obična datoteka"
 msgid "%s: file is too large"
 msgstr "%s: datoteka je prevelika"
 
-#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1647
+#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673
 #, c-format
 msgid "%s: cannot execute binary file"
 msgstr "%s: nije moguće izvršiti binarnu datoteku"
@@ -489,7 +489,7 @@ msgstr "nijedna naredba nije nađena"
 #: builtins/fc.def:363 builtins/fc.def:368 builtins/fc.def:407
 #: builtins/fc.def:412
 msgid "history specification"
-msgstr "prikaz povijesti"
+msgstr "specifikacija povijesti"
 
 #: builtins/fc.def:444
 #, c-format
@@ -551,12 +551,12 @@ msgstr ""
 "Nema pomoći za „%s“.\n"
 "Pokušajte s „help help“, „man -k %s“ ili „info %s“."
 
-#: builtins/help.def:224
+#: builtins/help.def:223
 #, c-format
 msgid "%s: cannot open: %s"
 msgstr "%s: Nije moguće otvoriti: %s"
 
-#: builtins/help.def:524
+#: builtins/help.def:523
 #, c-format
 msgid ""
 "These shell commands are defined internally.  Type `help' to see this list.\n"
@@ -576,21 +576,21 @@ msgstr ""
 "Zvjezdica (*) pokraj imena znači da je naredba onemogućena.\n"
 "\n"
 
-#: builtins/history.def:155
+#: builtins/history.def:159
 msgid "cannot use more than one of -anrw"
 msgstr "moguć je samo jedan od -a, -n, -r ili -w"
 
-#: builtins/history.def:188 builtins/history.def:198 builtins/history.def:213
-#: builtins/history.def:230 builtins/history.def:242 builtins/history.def:249
+#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215
+#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247
 msgid "history position"
 msgstr "pozicija u povijesti"
 
-#: builtins/history.def:340
+#: builtins/history.def:338
 #, c-format
 msgid "%s: invalid timestamp"
 msgstr "%s: nevaljan vremenski žig"
 
-#: builtins/history.def:451
+#: builtins/history.def:449
 #, c-format
 msgid "%s: history expansion failed"
 msgstr "%s: proširenje povijesti nije uspjelo"
@@ -613,78 +613,78 @@ msgstr "%s: argumenti moraju biti ID-ovi procesa ili ID-ovi posla"
 msgid "Unknown error"
 msgstr "Nepoznata greška"
 
-#: builtins/let.def:97 builtins/let.def:122 expr.c:639 expr.c:657
+#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658
 msgid "expression expected"
 msgstr "očekivan je izraz"
 
-#: builtins/mapfile.def:178
+#: builtins/mapfile.def:180
 #, c-format
 msgid "%s: not an indexed array"
 msgstr "%s: nije indeksirano polje"
 
-#: builtins/mapfile.def:271 builtins/read.def:308
+#: builtins/mapfile.def:276 builtins/read.def:336
 #, c-format
 msgid "%s: invalid file descriptor specification"
 msgstr "%s: nevaljana specifikacija deskriptora datoteke"
 
-#: builtins/mapfile.def:279 builtins/read.def:315
+#: builtins/mapfile.def:284 builtins/read.def:343
 #, c-format
 msgid "%d: invalid file descriptor: %s"
 msgstr "%d: nevaljan deskriptor datoteke: %s"
 
-#: builtins/mapfile.def:288 builtins/mapfile.def:326
+#: builtins/mapfile.def:293 builtins/mapfile.def:331
 #, c-format
 msgid "%s: invalid line count"
 msgstr "%s: nevaljan broj (količina) redaka"
 
-#: builtins/mapfile.def:299
+#: builtins/mapfile.def:304
 #, c-format
 msgid "%s: invalid array origin"
 msgstr "%s: nevaljan početak polja (nevaljan indeks polja)"
 
-#: builtins/mapfile.def:316
+#: builtins/mapfile.def:321
 #, c-format
 msgid "%s: invalid callback quantum"
 msgstr "%s: nevaljana količina (redaka između poziva)"
 
-#: builtins/mapfile.def:349
+#: builtins/mapfile.def:354
 msgid "empty array variable name"
 msgstr "prazno ime varijable polja"
 
-#: builtins/mapfile.def:370
+#: builtins/mapfile.def:375
 msgid "array variable support required"
 msgstr "nužna je podrška za varijable (vrsta) polje"
 
-#: builtins/printf.def:419
+#: builtins/printf.def:430
 #, c-format
 msgid "`%s': missing format character"
 msgstr "„%s“: nedostaje znak u specifikaciji formata"
 
-#: builtins/printf.def:474
+#: builtins/printf.def:485
 #, c-format
 msgid "`%c': invalid time format specification"
 msgstr "„%c“: nevaljana specifikacija za format vremena"
 
-#: builtins/printf.def:676
+#: builtins/printf.def:708
 #, c-format
 msgid "`%c': invalid format character"
 msgstr "„%c“: nevaljan znak u specifikaciji formata"
 
-#: builtins/printf.def:702
+#: builtins/printf.def:734
 #, c-format
 msgid "warning: %s: %s"
 msgstr "upozorenje: %s: %s"
 
-#: builtins/printf.def:788
+#: builtins/printf.def:822
 #, c-format
 msgid "format parsing problem: %s"
 msgstr "problem s raščlanjivanjem formata: %s"
 
-#: builtins/printf.def:885
+#: builtins/printf.def:919
 msgid "missing hex digit for \\x"
 msgstr "nedostaje heksadecimalna znamenka za \\x"
 
-#: builtins/printf.def:900
+#: builtins/printf.def:934
 #, c-format
 msgid "missing unicode digit for \\%c"
 msgstr "nedostaje unikodna (unicode) znamenka za \\%c"
@@ -782,9 +782,9 @@ msgstr ""
 "\n"
 "     Argumenti:\n"
 "      +N   Zarotira stȏg tako, da N-ti direktorij u stȏgu (brojeći od nule s\n"
-"             lijeve strane popisa prikazanoga s „dirs“) postane novi vrh stȏga.\n"
+"             lijeve strane popisa pokazanog s „dirs“) postane novi vrh stȏga.\n"
 "      -N   Zarotira stȏg tako, da N-ti direktorij u stȏgu (brojeći od nule s\n"
-"             desne strane popisa prikazanoga s „dirs“) postane novi vrh stȏga.\n"
+"             desne strane popisa pokazanog s „dirs“) postane novi vrh stȏga.\n"
 "      DIREKTORIJ  Doda DIREKTORIJ na vrh stȏga direktorija i\n"
 "                    učini ga novim trenutnim radnim direktorijem.\n"
 "\n"
@@ -820,20 +820,20 @@ msgstr ""
 "\n"
 "    Argumenti:\n"
 "      +N   Ukloni da N-ti direktorij iz stȏga brojeći od nule s lijeve\n"
-"           strane popisa prikazanoga s „dirs“. Na primjer: „popd +0“\n"
+"           strane popisa pokazanog s „dirs“. Na primjer: „popd +0“\n"
 "           ukloni prvi, a „popd +1“ ukloni drugi direktorij.\n"
 "      +N   Ukloni da N-ti direktorij iz stȏga brojeći od nule s desne\n"
-"           strane popisa prikazanoga s „dirs“. Na primjer.: „popd -0“\n"
+"           strane popisa pokazanog s „dirs“. Na primjer.: „popd -0“\n"
 "           ukloni zadnji, a „popd -1“ ukloni predzadnji direktorij.\n"
 "\n"
 "    Naredba „dirs“ prikaže trenutni sadržaj stȏga direktorija."
 
-#: builtins/read.def:280
+#: builtins/read.def:308
 #, c-format
 msgid "%s: invalid timeout specification"
 msgstr "%s: nevaljana specifikacija za istek vremena (timeout)"
 
-#: builtins/read.def:755
+#: builtins/read.def:827
 #, c-format
 msgid "read error: %d: %s"
 msgstr "greška čitanja: %d: %s"
@@ -846,7 +846,7 @@ msgstr "„return“ je moguć samo iz funkcije ili iz skripte pokrenute sa „s
 msgid "cannot simultaneously unset a function and a variable"
 msgstr "nije moguće istovremeno poništiti funkciju i varijablu"
 
-#: builtins/set.def:966
+#: builtins/set.def:969
 #, c-format
 msgid "%s: not an array variable"
 msgstr "%s: nije varijabla (vrste) polja"
@@ -865,11 +865,11 @@ msgstr "%s: Nije moguće izvesti (export)"
 msgid "shift count"
 msgstr "broj (veličina) pomaka"
 
-#: builtins/shopt.def:310
+#: builtins/shopt.def:323
 msgid "cannot set and unset shell options simultaneously"
 msgstr "nije moguće istovremeno postaviti i poništiti opcije ljuske"
 
-#: builtins/shopt.def:428
+#: builtins/shopt.def:444
 #, c-format
 msgid "%s: invalid shell option name"
 msgstr "%s: nevaljano ime za opciju ljuske"
@@ -936,16 +936,16 @@ msgstr "%s: nevaljan argument za ograničenje"
 msgid "`%c': bad command"
 msgstr "„%c“: loša naredba"
 
-#: builtins/ulimit.def:455
+#: builtins/ulimit.def:464
 #, c-format
 msgid "%s: cannot get limit: %s"
 msgstr "%s: nije moguće odrediti vrijednost ograničenja: %s"
 
-#: builtins/ulimit.def:481
+#: builtins/ulimit.def:490
 msgid "limit"
 msgstr "ograničenje"
 
-#: builtins/ulimit.def:493 builtins/ulimit.def:793
+#: builtins/ulimit.def:502 builtins/ulimit.def:802
 #, c-format
 msgid "%s: cannot modify limit: %s"
 msgstr "%s: nije moguće promijeniti ograničenja: %s"
@@ -964,7 +964,7 @@ msgstr "„%c“: nevaljan operator u simboličkom načinu"
 msgid "`%c': invalid symbolic mode character"
 msgstr "„%c“: nevaljan znak u simboličkom načinu"
 
-#: error.c:89 error.c:347 error.c:349 error.c:351
+#: error.c:89 error.c:373 error.c:375 error.c:377
 msgid " line "
 msgstr " redak "
 
@@ -984,96 +984,106 @@ msgstr "Prekidamo..."
 msgid "INFORM: "
 msgstr "informacija: "
 
-#: error.c:462
+#: error.c:310
+#, c-format
+msgid "DEBUG warning: "
+msgstr "Dijagnostičko upozorenje: "
+
+#: error.c:488
 msgid "unknown command error"
 msgstr "nepoznata greška naredbe"
 
-#: error.c:463
+#: error.c:489
 msgid "bad command type"
 msgstr "loša vrsta naredbe"
 
-#: error.c:464
+#: error.c:490
 msgid "bad connector"
 msgstr "loš konektor"
 
-#: error.c:465
+#: error.c:491
 msgid "bad jump"
 msgstr "loš skok"
 
-#: error.c:503
+#: error.c:529
 #, c-format
 msgid "%s: unbound variable"
 msgstr "%s: nevezana varijabla"
 
-#: eval.c:242
+#: eval.c:243
 msgid "\atimed out waiting for input: auto-logout\n"
 msgstr "\avrijeme čekanja na ulaz je isteklo: automatska-odjava\n"
 
-#: execute_cmd.c:537
+#: execute_cmd.c:555
 #, c-format
 msgid "cannot redirect standard input from /dev/null: %s"
 msgstr "nije moguće preusmjeriti standardni ulaz iz /dev/null: %s"
 
-#: execute_cmd.c:1297
+#: execute_cmd.c:1317
 #, c-format
 msgid "TIMEFORMAT: `%c': invalid format character"
 msgstr "TIMEFORMAT: „%c“: nevaljan znak za format"
 
-#: execute_cmd.c:2362
+#: execute_cmd.c:2391
 #, c-format
 msgid "execute_coproc: coproc [%d:%s] still exists"
 msgstr "execute_coproc(): coproc [%d:%s] još uvijek postoji"
 
-#: execute_cmd.c:2486
+#: execute_cmd.c:2524
 msgid "pipe error"
 msgstr "greška cijevi"
 
-#: execute_cmd.c:4793
+#: execute_cmd.c:4923
 #, c-format
 msgid "eval: maximum eval nesting level exceeded (%d)"
 msgstr "eval: prekoračena je dopuštena razina (dubina) gniježđenja eval (%d)"
 
-#: execute_cmd.c:4805
+#: execute_cmd.c:4935
 #, c-format
 msgid "%s: maximum source nesting level exceeded (%d)"
 msgstr "%s: prekoračena je dopuštena razina gniježđenja source (%d)"
 
-#: execute_cmd.c:4913
+#: execute_cmd.c:5043
 #, c-format
 msgid "%s: maximum function nesting level exceeded (%d)"
 msgstr "%s: prekoračena je dopuštena razina gniježđenja funkcije (%d)"
 
-#: execute_cmd.c:5467
+#: execute_cmd.c:5598
 #, c-format
 msgid "%s: restricted: cannot specify `/' in command names"
 msgstr "%s: ograničenje : znak „/“ nije dopušten u imenima naredba"
 
-#: execute_cmd.c:5574
+#: execute_cmd.c:5715
 #, c-format
 msgid "%s: command not found"
 msgstr "%s: naredba nije pronađena"
 
-#: execute_cmd.c:5816
+#: execute_cmd.c:5957
 #, c-format
 msgid "%s: %s"
 msgstr "%s: %s"
 
-#: execute_cmd.c:5854
+#: execute_cmd.c:5975
+#, c-format
+msgid "%s: cannot execute: required file not found"
+msgstr "%s: nije moguće izvršiti: potrebna datoteka nije nađena"
+
+#: execute_cmd.c:6000
 #, c-format
 msgid "%s: %s: bad interpreter"
 msgstr "%s: %s: loš interpreter"
 
-#: execute_cmd.c:5891
+#: execute_cmd.c:6037
 #, c-format
 msgid "%s: cannot execute binary file: %s"
 msgstr "%s: binarnu datoteku %s nije moguće pokrenuti/izvršiti"
 
-#: execute_cmd.c:5977
+#: execute_cmd.c:6123
 #, c-format
 msgid "`%s': is a special builtin"
 msgstr "„%s“ je specijalna funkcija ugrađena u ljusku"
 
-#: execute_cmd.c:6029
+#: execute_cmd.c:6175
 #, c-format
 msgid "cannot duplicate fd %d to fd %d"
 msgstr "nije moguće duplicirati deskriptor datoteke %d u deskriptor datoteke %d"
@@ -1086,68 +1096,68 @@ msgstr "prekoračena je dopuštena razina rekurzija izraza"
 msgid "recursion stack underflow"
 msgstr "podlijevanje stȏga rekurzija (prazni stȏg)"
 
-#: expr.c:477
+#: expr.c:478
 msgid "syntax error in expression"
 msgstr "sintaktička greška u izrazu"
 
-#: expr.c:521
+#: expr.c:522
 msgid "attempted assignment to non-variable"
 msgstr "pokušaj dodjeljivanja ne-varijabli (objektu koji nije varijabla)"
 
-#: expr.c:530
+#: expr.c:531
 msgid "syntax error in variable assignment"
 msgstr "sintaktička greška u dodjeljivanju varijabli"
 
-#: expr.c:544 expr.c:911
+#: expr.c:545 expr.c:912
 msgid "division by 0"
 msgstr "dijeljenje s 0"
 
-#: expr.c:592
+#: expr.c:593
 msgid "bug: bad expassign token"
 msgstr "**interna greška** : loš simbol u izrazu za dodjelu"
 
-#: expr.c:646
+#: expr.c:647
 msgid "`:' expected for conditional expression"
 msgstr "znak „:“ je nužan u uvjetnom izrazu"
 
-#: expr.c:972
+#: expr.c:973
 msgid "exponent less than 0"
 msgstr "eksponent je manji od 0"
 
-#: expr.c:1029
+#: expr.c:1030
 msgid "identifier expected after pre-increment or pre-decrement"
 msgstr "očekivalo se ime nakon pre-increment ili pre-decrement"
 
-#: expr.c:1056
+#: expr.c:1057
 msgid "missing `)'"
 msgstr "nedostaje „)“"
 
-#: expr.c:1107 expr.c:1487
+#: expr.c:1108 expr.c:1492
 msgid "syntax error: operand expected"
 msgstr "sintaktička greška: očekivan je operand"
 
-#: expr.c:1489
+#: expr.c:1494
 msgid "syntax error: invalid arithmetic operator"
 msgstr "sintaktička greška: nevaljan aritmetički operator"
 
-#: expr.c:1513
+#: expr.c:1518
 #, c-format
 msgid "%s%s%s: %s (error token is \"%s\")"
 msgstr "%s%s%s: %s (simbol greške je „%s“)"
 
-#: expr.c:1573
+#: expr.c:1578
 msgid "invalid arithmetic base"
 msgstr "nevaljana aritmetička baza"
 
-#: expr.c:1582
+#: expr.c:1587
 msgid "invalid integer constant"
 msgstr "%s: nevaljana cijelo brojna (integer) konstanta"
 
-#: expr.c:1598
+#: expr.c:1603
 msgid "value too great for base"
 msgstr "vrijednost baze je prevelika"
 
-#: expr.c:1647
+#: expr.c:1652
 #, c-format
 msgid "%s: expression error\n"
 msgstr "%s: greška u izrazu\n"
@@ -1156,7 +1166,7 @@ msgstr "%s: greška u izrazu\n"
 msgid "getcwd: cannot access parent directories"
 msgstr "getcwd(): nije moguće pristupiti nadređenim direktorijima"
 
-#: input.c:99 subst.c:6069
+#: input.c:99 subst.c:6208
 #, c-format
 msgid "cannot reset nodelay mode for fd %d"
 msgstr "nije moguće onemogućiti „nodelay” način za deskriptor datoteke %d"
@@ -1175,167 +1185,167 @@ msgstr "save_bash_input(): međuspremnik već postoji za novi datotečni deskrip
 msgid "start_pipeline: pgrp pipe"
 msgstr "start_pipeline(): pgrp pipe (procesna skupina cijevi)"
 
-#: jobs.c:906
+#: jobs.c:907
 #, c-format
 msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr "bgp_delete: PETLJA: psi (%d) == storage[psi].bucket_next"
 
-#: jobs.c:959
+#: jobs.c:960
 #, c-format
 msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr "bgp_search: PETLJA: psi (%d) == storage[psi].bucket_next"
 
-#: jobs.c:1283
+#: jobs.c:1279
 #, c-format
 msgid "forked pid %d appears in running job %d"
 msgstr "račvani PID %d pripada tekućem poslu %d"
 
-#: jobs.c:1402
+#: jobs.c:1397
 #, c-format
 msgid "deleting stopped job %d with process group %ld"
 msgstr "uklanjamo zaustavljeni posao %d sa skupinom procesa %ld"
 
-#: jobs.c:1511
+#: jobs.c:1502
 #, c-format
 msgid "add_process: pid %5ld (%s) marked as still alive"
 msgstr "add_process(): PID %5ld (%s) označen kao još uvijek aktivan"
 
-#: jobs.c:1850
+#: jobs.c:1839
 #, c-format
 msgid "describe_pid: %ld: no such pid"
 msgstr "describe_pid(): %ld: PID ne postoji"
 
-#: jobs.c:1865
+#: jobs.c:1854
 #, c-format
 msgid "Signal %d"
 msgstr "Signal %d"
 
-#: jobs.c:1879 jobs.c:1905
+#: jobs.c:1868 jobs.c:1894
 msgid "Done"
 msgstr "Gotovo"
 
-#: jobs.c:1884 siglist.c:122
+#: jobs.c:1873 siglist.c:123
 msgid "Stopped"
 msgstr "Zaustavljeno"
 
-#: jobs.c:1888
+#: jobs.c:1877
 #, c-format
 msgid "Stopped(%s)"
 msgstr "Zaustavljeno(%s)"
 
-#: jobs.c:1892
+#: jobs.c:1881
 msgid "Running"
 msgstr "Pokrenuto"
 
-#: jobs.c:1909
+#: jobs.c:1898
 #, c-format
 msgid "Done(%d)"
 msgstr "Gotovo(%d)"
 
-#: jobs.c:1911
+#: jobs.c:1900
 #, c-format
 msgid "Exit %d"
 msgstr "Izlaz %d"
 
-#: jobs.c:1914
+#: jobs.c:1903
 msgid "Unknown status"
 msgstr "Nepoznata izlazna vrijednost (izlazni kȏd)Nepoznato"
 
-#: jobs.c:2001
+#: jobs.c:1990
 #, c-format
 msgid "(core dumped) "
 msgstr "(snimka (core dump) memorije je spremljena!) "
 
-#: jobs.c:2020
+#: jobs.c:2009
 #, c-format
 msgid "  (wd: %s)"
 msgstr "  (wd: %s)"
 
-#: jobs.c:2259
+#: jobs.c:2250
 #, c-format
 msgid "child setpgid (%ld to %ld)"
 msgstr "promijeni skupinu potomka (% ld u% ld)"
 
-#: jobs.c:2617 nojobs.c:664
+#: jobs.c:2608 nojobs.c:666
 #, c-format
 msgid "wait: pid %ld is not a child of this shell"
 msgstr "wait: PID %ld nije potomak ove ljuske"
 
-#: jobs.c:2893
+#: jobs.c:2884
 #, c-format
 msgid "wait_for: No record of process %ld"
 msgstr "wait_for: proces %ld nije nigdje registriran"
 
-#: jobs.c:3236
+#: jobs.c:3223
 #, c-format
 msgid "wait_for_job: job %d is stopped"
 msgstr "wait_for_job: posao %d je zaustavljen"
 
-#: jobs.c:3564
+#: jobs.c:3551
 #, c-format
 msgid "%s: no current jobs"
 msgstr "%s: nema tekućih poslova"
 
-#: jobs.c:3571
+#: jobs.c:3558
 #, c-format
 msgid "%s: job has terminated"
 msgstr "%s: posao je završen"
 
-#: jobs.c:3580
+#: jobs.c:3567
 #, c-format
 msgid "%s: job %d already in background"
 msgstr "%s: posao %d je već u pozadini"
 
-#: jobs.c:3806
+#: jobs.c:3793
 msgid "waitchld: turning on WNOHANG to avoid indefinite block"
 msgstr "waitchld(): WNOHANG je omogućen kako bi se izbjeglo neograničeno blokiranje"
 
-#: jobs.c:4320
+#: jobs.c:4307
 #, c-format
 msgid "%s: line %d: "
 msgstr "%s: redak %d: "
 
-#: jobs.c:4334 nojobs.c:919
+#: jobs.c:4321 nojobs.c:921
 #, c-format
 msgid " (core dumped)"
 msgstr " (snimka (core dump) memorije je spremljena!)"
 
-#: jobs.c:4346 jobs.c:4359
+#: jobs.c:4333 jobs.c:4346
 #, c-format
 msgid "(wd now: %s)\n"
 msgstr "(radni direktorij je sada: %s)\n"
 
-#: jobs.c:4391
+#: jobs.c:4378
 msgid "initialize_job_control: getpgrp failed"
 msgstr "initialize_job_control: getpgrp() nije uspješna"
 
-#: jobs.c:4447
+#: jobs.c:4434
 msgid "initialize_job_control: no job control in background"
 msgstr "initialize_job_control: nema upravljanja poslom u pozadini"
 
-#: jobs.c:4463
+#: jobs.c:4450
 msgid "initialize_job_control: line discipline"
 msgstr "initialize_job_control: disciplina retka (protokol realizacije stringova/redaka)"
 
-#: jobs.c:4473
+#: jobs.c:4460
 msgid "initialize_job_control: setpgid"
 msgstr "initialize_job_control: setpgid()"
 
-#: jobs.c:4494 jobs.c:4503
+#: jobs.c:4481 jobs.c:4490
 #, c-format
 msgid "cannot set terminal process group (%d)"
 msgstr "nije moguće postaviti procesnu skupinu (%d) terminala"
 
-#: jobs.c:4508
+#: jobs.c:4495
 msgid "no job control in this shell"
 msgstr "nema upravljanja poslom u ovoj ljusci"
 
-#: lib/malloc/malloc.c:353
+#: lib/malloc/malloc.c:367
 #, c-format
 msgid "malloc: failed assertion: %s\n"
 msgstr "malloc(): neuspješni kontrolni test: %s\n"
 
-#: lib/malloc/malloc.c:369
+#: lib/malloc/malloc.c:383
 #, c-format
 msgid ""
 "\r\n"
@@ -1344,47 +1354,47 @@ msgstr ""
 "\r\n"
 "malloc(): %s:%d: loše provedeni kontrolni test\r\n"
 
-#: lib/malloc/malloc.c:370 lib/malloc/malloc.c:933
+#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941
 msgid "unknown"
 msgstr "nepoznato"
 
-#: lib/malloc/malloc.c:882
+#: lib/malloc/malloc.c:892
 msgid "malloc: block on free list clobbered"
 msgstr "malloc(): zauzeti blok na popisu slobodnih blokova"
 
-#: lib/malloc/malloc.c:972
+#: lib/malloc/malloc.c:980
 msgid "free: called with already freed block argument"
 msgstr "free(): pozvana s argumentom bloka koji je već slobodan"
 
-#: lib/malloc/malloc.c:975
+#: lib/malloc/malloc.c:983
 msgid "free: called with unallocated block argument"
 msgstr "free(): pozvana s argumentom bloka koji se ne koristi"
 
-#: lib/malloc/malloc.c:994
+#: lib/malloc/malloc.c:1001
 msgid "free: underflow detected; mh_nbytes out of range"
 msgstr "free(): otkriveno je podlijevanje, mh_nbytes izvan raspona"
 
-#: lib/malloc/malloc.c:1001
+#: lib/malloc/malloc.c:1007
 msgid "free: underflow detected; magic8 corrupted"
 msgstr "free(): otkriveno je podlijevanje; magic8 je oštećen"
 
-#: lib/malloc/malloc.c:1009
+#: lib/malloc/malloc.c:1014
 msgid "free: start and end chunk sizes differ"
 msgstr "free(): veličine početnog i zaključnog (dijela) bloka su različite"
 
-#: lib/malloc/malloc.c:1119
+#: lib/malloc/malloc.c:1176
 msgid "realloc: called with unallocated block argument"
 msgstr "realloc(): je pozvana s nekorištenim blokom kao argument (blok još nije odabran)"
 
-#: lib/malloc/malloc.c:1134
+#: lib/malloc/malloc.c:1191
 msgid "realloc: underflow detected; mh_nbytes out of range"
 msgstr "realloc(): otkriveno je podlijevanje, mh_nbytes izvan raspona"
 
-#: lib/malloc/malloc.c:1141
+#: lib/malloc/malloc.c:1197
 msgid "realloc: underflow detected; magic8 corrupted"
 msgstr "realloc(): otkriveno je podlijevanje; magic8 je oštećen"
 
-#: lib/malloc/malloc.c:1150
+#: lib/malloc/malloc.c:1205
 msgid "realloc: start and end chunk sizes differ"
 msgstr "realloc(): veličine početnog i zaključnog (dijela) bloka su različite"
 
@@ -1426,22 +1436,22 @@ msgstr "%s: loša specifikacija za mrežnu stazu"
 msgid "network operations not supported"
 msgstr "mrežne operacije nisu podržane"
 
-#: locale.c:217
+#: locale.c:219
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s)"
 msgstr "setlocale(): LC_ALL: nije moguće promijeniti jezično područje (%s)"
 
-#: locale.c:219
+#: locale.c:221
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s): %s"
 msgstr "setlocale(): LC_ALL: nije moguće promijeniti jezično područje (%s): %s"
 
-#: locale.c:292
+#: locale.c:294
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s)"
 msgstr "setlocale(): %s: nije moguće promijeniti jezično područje (%s)"
 
-#: locale.c:294
+#: locale.c:296
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s): %s"
 msgstr "setlocale(): %s: nije moguće promijeniti jezično područje (%s): %s"
@@ -1459,138 +1469,138 @@ msgstr "Imate novu poštu u $_"
 msgid "The mail in %s has been read\n"
 msgstr "Pošta u %s je već pročitana\n"
 
-#: make_cmd.c:317
+#: make_cmd.c:314
 msgid "syntax error: arithmetic expression required"
 msgstr "sintaktička greška: nužan je aritmetički izraz"
 
-#: make_cmd.c:319
+#: make_cmd.c:316
 msgid "syntax error: `;' unexpected"
 msgstr "sintaktička greška: neočekivan „;“ znak"
 
-#: make_cmd.c:320
+#: make_cmd.c:317
 #, c-format
 msgid "syntax error: `((%s))'"
 msgstr "sintaktička greška: „((%s))“"
 
-#: make_cmd.c:572
+#: make_cmd.c:569
 #, c-format
 msgid "make_here_document: bad instruction type %d"
 msgstr "make_here_document(): loša vrsta instrukcije %d"
 
-#: make_cmd.c:657
+#: make_cmd.c:668
 #, c-format
 msgid "here-document at line %d delimited by end-of-file (wanted `%s')"
 msgstr "here-document u retku %d završava sa znakom kraj datoteke (očekivan je „%s“)"
 
-#: make_cmd.c:756
+#: make_cmd.c:769
 #, c-format
 msgid "make_redirection: redirection instruction `%d' out of range"
 msgstr "make_redirection(): instrukcija za preusmjeravanje „%d“ je izvan raspona"
 
-#: parse.y:2393
+#: parse.y:2428
 #, c-format
 msgid "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line truncated"
 msgstr ""
 "shell_getc(): shell_input_line_size (%zu) veća je od SIZE_MAX (%lu):\n"
 "  redak je skraćen"
 
-#: parse.y:2826
+#: parse.y:2921
 msgid "maximum here-document count exceeded"
 msgstr "maksimalna broj (količina) here-document-a je premašena"
 
-#: parse.y:3581 parse.y:3957 parse.y:4556
+#: parse.y:3684 parse.y:4244 parse.y:6148
 #, c-format
 msgid "unexpected EOF while looking for matching `%c'"
 msgstr "neočekivan kraj-datoteke (EOF) pri traženju odgovarajućeg „%c“"
 
-#: parse.y:4696
+#: parse.y:4452
 msgid "unexpected EOF while looking for `]]'"
 msgstr "neočekivan kraj datoteke (EOF) pri traženju „]]“"
 
-#: parse.y:4701
+#: parse.y:4457
 #, c-format
 msgid "syntax error in conditional expression: unexpected token `%s'"
 msgstr "sintaktička greška u uvjetnom izrazu: neočekivan simbol „%s“"
 
-#: parse.y:4705
+#: parse.y:4461
 msgid "syntax error in conditional expression"
 msgstr "sintaktička greška u uvjetnom izrazu"
 
-#: parse.y:4783
+#: parse.y:4539
 #, c-format
 msgid "unexpected token `%s', expected `)'"
 msgstr "neočekivan simbol „%s“; očekivana je „)“"
 
-#: parse.y:4787
+#: parse.y:4543
 msgid "expected `)'"
 msgstr "očekivana je „)“"
 
-#: parse.y:4815
+#: parse.y:4571
 #, c-format
 msgid "unexpected argument `%s' to conditional unary operator"
 msgstr "neočekivan argument „%s“ za uvjetni unarni operator"
 
-#: parse.y:4819
+#: parse.y:4575
 msgid "unexpected argument to conditional unary operator"
 msgstr "neočekivan argument za uvjetni unarni operator"
 
-#: parse.y:4865
+#: parse.y:4621
 #, c-format
 msgid "unexpected token `%s', conditional binary operator expected"
 msgstr "neočekivani simbol „%s“; očekivan je uvjetni binarni operator"
 
-#: parse.y:4869
+#: parse.y:4625
 msgid "conditional binary operator expected"
 msgstr "očekivan je uvjetni binarni operator"
 
-#: parse.y:4891
+#: parse.y:4647
 #, c-format
 msgid "unexpected argument `%s' to conditional binary operator"
 msgstr "neočekivan argument „%s“ uvjetnom binarnom operatoru"
 
-#: parse.y:4895
+#: parse.y:4651
 msgid "unexpected argument to conditional binary operator"
 msgstr "neočekivan argument uvjetnom binarnom operatoru"
 
-#: parse.y:4906
+#: parse.y:4662
 #, c-format
 msgid "unexpected token `%c' in conditional command"
 msgstr "neočekivan simbol „%c“ u uvjetnoj naredbi"
 
-#: parse.y:4909
+#: parse.y:4665
 #, c-format
 msgid "unexpected token `%s' in conditional command"
 msgstr "neočekivan simbol „%s“ u uvjetnoj naredbi"
 
-#: parse.y:4913
+#: parse.y:4669
 #, c-format
 msgid "unexpected token %d in conditional command"
 msgstr "neočekivan simbol %d u uvjetnoj naredbi"
 
-#: parse.y:6336
+#: parse.y:6118
 #, c-format
 msgid "syntax error near unexpected token `%s'"
 msgstr "sintaktička greška blizu neočekivanog simbola „%s“"
 
-#: parse.y:6355
+#: parse.y:6137
 #, c-format
 msgid "syntax error near `%s'"
 msgstr "sintaktička greška blizu „%s“"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error: unexpected end of file"
 msgstr "sintaktička greška: neočekivani kraj datoteke"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error"
 msgstr "sintaktička greška"
 
-#: parse.y:6428
+#: parse.y:6216
 #, c-format
 msgid "Use \"%s\" to leave the shell.\n"
 msgstr "Koristite \"%s\" za izlaz iz ljuske.\n"
 
-#: parse.y:6602
+#: parse.y:6394
 msgid "unexpected EOF while looking for matching `)'"
 msgstr "neočekivani kraj datoteke pri traženju odgovarajuće „)“"
 
@@ -1628,94 +1638,94 @@ msgstr "xtrace_set(): pointer datoteke je NULL"
 msgid "xtrace fd (%d) != fileno xtrace fp (%d)"
 msgstr "deskriptor datoteke xtrace (%d) !=  broju datoteke u pointeru datoteke xtrace (%d)"
 
-#: print_cmd.c:1540
+#: print_cmd.c:1545
 #, c-format
 msgid "cprintf: `%c': invalid format character"
 msgstr "cprintf(): „%c“: nevaljan znak za format"
 
-#: redir.c:149 redir.c:197
+#: redir.c:150 redir.c:198
 msgid "file descriptor out of range"
 msgstr "deskriptor datoteke je izvan raspona"
 
-#: redir.c:204
+#: redir.c:205
 #, c-format
 msgid "%s: ambiguous redirect"
 msgstr "%s: preusmjeravanje nije jednoznačno"
 
-#: redir.c:208
+#: redir.c:209
 #, c-format
 msgid "%s: cannot overwrite existing file"
 msgstr "%s: nije moguće pisati preko postojeće datoteke"
 
-#: redir.c:213
+#: redir.c:214
 #, c-format
 msgid "%s: restricted: cannot redirect output"
 msgstr "%s: ograničeno: nije moguće preusmjeriti izlaz"
 
-#: redir.c:218
+#: redir.c:219
 #, c-format
 msgid "cannot create temp file for here-document: %s"
 msgstr "nije moguće stvoriti privremenu datoteku za here-document: %s"
 
-#: redir.c:222
+#: redir.c:223
 #, c-format
 msgid "%s: cannot assign fd to variable"
 msgstr "%s: nije moguće dodijeliti deskriptor datoteke varijabli"
 
-#: redir.c:649
+#: redir.c:650
 msgid "/dev/(tcp|udp)/host/port not supported without networking"
 msgstr "/dev/(tcp|udp)/host/port nije podržan bez umrežavanja"
 
-#: redir.c:938 redir.c:1053 redir.c:1114 redir.c:1284
+#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303
 msgid "redirection error: cannot duplicate fd"
 msgstr "greška  preusmjeravanja: nije moguće duplicirati deskriptor datoteke"
 
-#: shell.c:347
+#: shell.c:353
 msgid "could not find /tmp, please create!"
 msgstr "nije moguće pronaći /tmp; stvorite taj direktorij!"
 
-#: shell.c:351
+#: shell.c:357
 msgid "/tmp must be a valid directory name"
 msgstr "/tmp mora biti valjano ime direktorija"
 
-#: shell.c:804
+#: shell.c:826
 msgid "pretty-printing mode ignored in interactive shells"
 msgstr "u interaktivnoj ljusci pretty-printing se zanemaruje"
 
-#: shell.c:948
+#: shell.c:972
 #, c-format
 msgid "%c%c: invalid option"
 msgstr "%c%c: nevaljana opcija"
 
-#: shell.c:1319
+#: shell.c:1343
 #, c-format
 msgid "cannot set uid to %d: effective uid %d"
 msgstr "nije moguće postaviti UID na %d: efektivni UID je %d"
 
-#: shell.c:1330
+#: shell.c:1354
 #, c-format
 msgid "cannot set gid to %d: effective gid %d"
 msgstr "nije moguće postaviti GID na %d: efektivni GID je %d"
 
-#: shell.c:1518
+#: shell.c:1544
 msgid "cannot start debugger; debugging mode disabled"
 msgstr "nije moguće pokrenuti debugger; dijagnostika je onemogućena"
 
-#: shell.c:1632
+#: shell.c:1658
 #, c-format
 msgid "%s: Is a directory"
 msgstr "%s: to je direktorij"
 
-#: shell.c:1881
+#: shell.c:1907
 msgid "I have no name!"
 msgstr "Nemam ime!"
 
-#: shell.c:2035
+#: shell.c:2061
 #, c-format
 msgid "GNU bash, version %s-(%s)\n"
 msgstr "GNU bash, inačica %s-(%s)\n"
 
-#: shell.c:2036
+#: shell.c:2062
 #, c-format
 msgid ""
 "Usage:\t%s [GNU long option] [option] ...\n"
@@ -1724,319 +1734,319 @@ msgstr ""
 "Uporaba: %s [GNU dugačka opcija] [opcija]...\n"
 "         %s [GNU dugačka opcija] [opcija] skripta...\n"
 
-#: shell.c:2038
+#: shell.c:2064
 msgid "GNU long options:\n"
 msgstr "GNU dugačke opcije:\n"
 
-#: shell.c:2042
+#: shell.c:2068
 msgid "Shell options:\n"
 msgstr "Kratke opcije:\n"
 
-#: shell.c:2043
+#: shell.c:2069
 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n"
 msgstr "\t-ilrsD ili -c NAREDBA ili -O SHOPT-OPCIJA    (samo za pozivanje)\n"
 
-#: shell.c:2062
+#: shell.c:2088
 #, c-format
 msgid "\t-%s or -o option\n"
 msgstr "\t-%s ili -o opcija  (može se promijeniti sa „set”)\n"
 
-#: shell.c:2068
+#: shell.c:2094
 #, c-format
 msgid "Type `%s -c \"help set\"' for more information about shell options.\n"
 msgstr "Utipkajte „%s -c \"help set\"“ za dodatne obavijesti o opcijama ljuske.\n"
 
-#: shell.c:2069
+#: shell.c:2095
 #, c-format
 msgid "Type `%s -c help' for more information about shell builtin commands.\n"
 msgstr "Utipkajte „%s -c help set“ za dodatne obavijesti o ugrađenim naredbama ljuske.\n"
 
-#: shell.c:2070
+#: shell.c:2096
 #, c-format
 msgid "Use the `bashbug' command to report bugs.\n"
 msgstr "Koristite naredbu „bashbug“ za prijavljivanje grešaka.\n"
 
-#: shell.c:2072
+#: shell.c:2098
 #, c-format
 msgid "bash home page: <http://www.gnu.org/software/bash>\n"
 msgstr "Početna mrežna bash stranica: <http://www.gnu.org/software/bash>\n"
 
-#: shell.c:2073
+#: shell.c:2099
 #, c-format
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 msgstr ""
 "Općenita pomoć za korištenje GNU softvera: <http://www.gnu.org/gethelp/>\n"
 "Prijavite primjedbe i greške u prijevodu na lokalizacija@linux.hr/\n"
 
-#: sig.c:757
+#: sig.c:765
 #, c-format
 msgid "sigprocmask: %d: invalid operation"
 msgstr "sigprocmask(): %d: nevaljana operacija"
 
-#: siglist.c:47
+#: siglist.c:48
 msgid "Bogus signal"
 msgstr "Nepostojeći signal"
 
-#: siglist.c:50
+#: siglist.c:51
 msgid "Hangup"
 msgstr "Poklopi"
 
-#: siglist.c:54
+#: siglist.c:55
 msgid "Interrupt"
 msgstr "Prekini"
 
-#: siglist.c:58
+#: siglist.c:59
 msgid "Quit"
 msgstr "Završi"
 
-#: siglist.c:62
+#: siglist.c:63
 msgid "Illegal instruction"
 msgstr "Nedopuštena instrukcija"
 
-#: siglist.c:66
+#: siglist.c:67
 msgid "BPT trace/trap"
 msgstr "BPT trag/zamka instrukcija (Trace/Breakpoint trap)"
 
-#: siglist.c:74
+#: siglist.c:75
 msgid "ABORT instruction"
 msgstr "ABORT instrukcija"
 
-#: siglist.c:78
+#: siglist.c:79
 msgid "EMT instruction"
 msgstr "EMT instrukcija"
 
-#: siglist.c:82
+#: siglist.c:83
 msgid "Floating point exception"
 msgstr "Iznimka (broja) s pomičnim zarezom"
 
-#: siglist.c:86
+#: siglist.c:87
 msgid "Killed"
 msgstr "Ubijen"
 
-#: siglist.c:90
+#: siglist.c:91
 msgid "Bus error"
 msgstr "Greška sabirnice"
 
-#: siglist.c:94
+#: siglist.c:95
 msgid "Segmentation fault"
 msgstr "Segmentacijska greška"
 
-#: siglist.c:98
+#: siglist.c:99
 msgid "Bad system call"
 msgstr "Loš sustavski poziv"
 
-#: siglist.c:102
+#: siglist.c:103
 msgid "Broken pipe"
-msgstr "Slomljena cijev"
+msgstr "Potrgana cijev"
 
-#: siglist.c:106
+#: siglist.c:107
 msgid "Alarm clock"
 msgstr "Budilica"
 
-#: siglist.c:110
+#: siglist.c:111
 msgid "Terminated"
 msgstr "Završeno"
 
-#: siglist.c:114
+#: siglist.c:115
 msgid "Urgent IO condition"
 msgstr "Žurno U/I stanje"
 
-#: siglist.c:118
+#: siglist.c:119
 msgid "Stopped (signal)"
 msgstr "Zaustavljeno (signalom)"
 
-#: siglist.c:126
+#: siglist.c:127
 msgid "Continue"
 msgstr "Nastavljanje"
 
-#: siglist.c:134
+#: siglist.c:135
 msgid "Child death or stop"
 msgstr "Potomak mrtav ili zaustavljen"
 
-#: siglist.c:138
+#: siglist.c:139
 msgid "Stopped (tty input)"
 msgstr "Zaustavljen (ulaz u terminal)"
 
-#: siglist.c:142
+#: siglist.c:143
 msgid "Stopped (tty output)"
 msgstr "Zaustavljen (izlaz iz terminala)"
 
-#: siglist.c:146
+#: siglist.c:147
 msgid "I/O ready"
 msgstr "U/I je spreman"
 
-#: siglist.c:150
+#: siglist.c:151
 msgid "CPU limit"
 msgstr "Ograničenje (vremena) procesora"
 
-#: siglist.c:154
+#: siglist.c:155
 msgid "File limit"
 msgstr "Ograničenje (veličine) datoteke"
 
-#: siglist.c:158
+#: siglist.c:159
 msgid "Alarm (virtual)"
 msgstr "Alarm (virtualni)"
 
-#: siglist.c:162
+#: siglist.c:163
 msgid "Alarm (profile)"
 msgstr "Alarm (profil)"
 
-#: siglist.c:166
+#: siglist.c:167
 msgid "Window changed"
 msgstr "Prozor je promijenjen"
 
-#: siglist.c:170
+#: siglist.c:171
 msgid "Record lock"
 msgstr "Zapis je zaključan"
 
-#: siglist.c:174
+#: siglist.c:175
 msgid "User signal 1"
 msgstr "Korisnički signal 1"
 
-#: siglist.c:178
+#: siglist.c:179
 msgid "User signal 2"
 msgstr "Korisnički signal 2"
 
-#: siglist.c:182
+#: siglist.c:183
 msgid "HFT input data pending"
 msgstr "HFT ulazni podaci čekaju"
 
-#: siglist.c:186
+#: siglist.c:187
 msgid "power failure imminent"
 msgstr "neizbježan prekid napajanja"
 
-#: siglist.c:190
+#: siglist.c:191
 msgid "system crash imminent"
 msgstr "neizbježni pad sustava"
 
-#: siglist.c:194
+#: siglist.c:195
 msgid "migrate process to another CPU"
 msgstr "preseli proces na drugi procesor"
 
-#: siglist.c:198
+#: siglist.c:199
 msgid "programming error"
 msgstr "programska greška"
 
-#: siglist.c:202
+#: siglist.c:203
 msgid "HFT monitor mode granted"
 msgstr "HFT nadzor je dopušten"
 
-#: siglist.c:206
+#: siglist.c:207
 msgid "HFT monitor mode retracted"
 msgstr "HFT nadzor je oduzet"
 
-#: siglist.c:210
+#: siglist.c:211
 msgid "HFT sound sequence has completed"
 msgstr "HFT sekvencija zvukova je završena"
 
-#: siglist.c:214
+#: siglist.c:215
 msgid "Information request"
 msgstr "Zahtjev za obavijestima"
 
-#: siglist.c:222 siglist.c:224
+#: siglist.c:223 siglist.c:225
 #, c-format
 msgid "Unknown Signal #%d"
 msgstr "Nepoznati signal #%d"
 
-#: subst.c:1476 subst.c:1666
+#: subst.c:1480 subst.c:1670
 #, c-format
 msgid "bad substitution: no closing `%s' in %s"
 msgstr "loša supstitucija: nema zaključnog „%s“ u %s"
 
-#: subst.c:3281
+#: subst.c:3307
 #, c-format
 msgid "%s: cannot assign list to array member"
 msgstr "%s: nije moguće dodijeliti popis elementu polja"
 
-#: subst.c:5910 subst.c:5926
+#: subst.c:6048 subst.c:6064
 msgid "cannot make pipe for process substitution"
 msgstr "nije moguće napraviti cijev za zamjenu procesa"
 
-#: subst.c:5985
+#: subst.c:6124
 msgid "cannot make child for process substitution"
 msgstr "nije moguće napraviti potomka za zamjenu procesa"
 
-#: subst.c:6059
+#: subst.c:6198
 #, c-format
 msgid "cannot open named pipe %s for reading"
 msgstr "nije moguće otvoriti imenovanu cijev %s za čitanje"
 
-#: subst.c:6061
+#: subst.c:6200
 #, c-format
 msgid "cannot open named pipe %s for writing"
 msgstr "nije moguće otvoriti imenovanu cijev %s za pisanje"
 
-#: subst.c:6084
+#: subst.c:6223
 #, c-format
 msgid "cannot duplicate named pipe %s as fd %d"
 msgstr "nije moguće duplicirati imenovanu cijev %s kao deskriptor datoteke %d"
 
-#: subst.c:6213
+#: subst.c:6370
 msgid "command substitution: ignored null byte in input"
-msgstr "nevaljana supstitucija: ignorira se prazni (nula) bajt na ulazu"
+msgstr "nevaljana supstitucija: zanemaren prazni (nula) bajt u ulazu"
 
-#: subst.c:6353
+#: subst.c:6533
 msgid "cannot make pipe for command substitution"
 msgstr "nije moguće napraviti cijev za zamjenu naredbi"
 
-#: subst.c:6397
+#: subst.c:6580
 msgid "cannot make child for command substitution"
 msgstr "nije moguće napraviti potomka za zamjenu naredbi"
 
-#: subst.c:6423
+#: subst.c:6613
 msgid "command_substitute: cannot duplicate pipe as fd 1"
 msgstr "command_substitute(): nije moguće duplicirati cijev kao deskriptor datoteke 1"
 
-#: subst.c:6883 subst.c:9952
+#: subst.c:7082 subst.c:10252
 #, c-format
 msgid "%s: invalid variable name for name reference"
 msgstr "%s: nevaljano ime varijable za ime referencije"
 
-#: subst.c:6979 subst.c:6997 subst.c:7169
+#: subst.c:7178 subst.c:7196 subst.c:7369
 #, c-format
 msgid "%s: invalid indirect expansion"
 msgstr "%s: nevaljana neizravna ekspanzija"
 
-#: subst.c:7013 subst.c:7177
+#: subst.c:7212 subst.c:7377
 #, c-format
 msgid "%s: invalid variable name"
 msgstr "„%s“: nevaljano ime varijable"
 
-#: subst.c:7256
+#: subst.c:7478
 #, c-format
 msgid "%s: parameter not set"
 msgstr "%s: parametar nije postavljen"
 
-#: subst.c:7258
+#: subst.c:7480
 #, c-format
 msgid "%s: parameter null or not set"
 msgstr "%s: parametar je prazan ili nedefiniran"
 
-#: subst.c:7503 subst.c:7518
+#: subst.c:7727 subst.c:7742
 #, c-format
 msgid "%s: substring expression < 0"
 msgstr "%s: rezultat od dijela stringa (substring) < 0"
 
-#: subst.c:9281 subst.c:9302
+#: subst.c:9560 subst.c:9587
 #, c-format
 msgid "%s: bad substitution"
 msgstr "%s: loša supstitucija"
 
-#: subst.c:9390
+#: subst.c:9678
 #, c-format
 msgid "$%s: cannot assign in this way"
 msgstr "$%s: nije moguće dodijeliti na ovaj način"
 
-#: subst.c:9814
+#: subst.c:10111
 msgid "future versions of the shell will force evaluation as an arithmetic substitution"
 msgstr "buduće inačice ljuske prisilit će vrednovanje kao aritmetičku supstituciju"
 
-#: subst.c:10367
+#: subst.c:10795
 #, c-format
 msgid "bad substitution: no closing \"`\" in %s"
 msgstr "loša supstitucija: nema zaključnog znaka \"`\" u %s"
 
-#: subst.c:11434
+#: subst.c:11874
 #, c-format
 msgid "no match: %s"
 msgstr "nema podudaranja: %s"
@@ -2059,21 +2069,21 @@ msgstr "očekivana je „)“"
 msgid "`)' expected, found %s"
 msgstr "očekivana je „)“, a nađen je %s"
 
-#: test.c:466 test.c:799
+#: test.c:469 test.c:814
 #, c-format
 msgid "%s: binary operator expected"
 msgstr "%s: očekivan je binarni operator"
 
-#: test.c:756 test.c:759
+#: test.c:771 test.c:774
 #, c-format
 msgid "%s: unary operator expected"
 msgstr "%s: očekivan je unarni operator"
 
-#: test.c:881
+#: test.c:896
 msgid "missing `]'"
 msgstr "nedostaje „]“"
 
-#: test.c:899
+#: test.c:914
 #, c-format
 msgid "syntax error: `%s' unexpected"
 msgstr "sintaktička greška: neočekivan „%s“"
@@ -2082,99 +2092,104 @@ msgstr "sintaktička greška: neočekivan „%s“"
 msgid "invalid signal number"
 msgstr "nevaljani broj za signal"
 
-#: trap.c:325
+#: trap.c:323
 #, c-format
 msgid "trap handler: maximum trap handler level exceeded (%d)"
 msgstr "trap handler: prekoračena je dopuštena razina gniježđenja (%d)"
 
-#: trap.c:414
+#: trap.c:412
 #, c-format
 msgid "run_pending_traps: bad value in trap_list[%d]: %p"
 msgstr "run_pending_traps(): loša vrijednost u trap_list[%d]: %p"
 
-#: trap.c:418
+#: trap.c:416
 #, c-format
 msgid "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
 msgstr "run_pending_traps: signalom rukuje SIG_DFL, opet šalje %d (%s) samom sebi"
 
-#: trap.c:487
+#: trap.c:509
 #, c-format
 msgid "trap_handler: bad signal %d"
 msgstr "trap_handler(): loš signal %d"
 
-#: variables.c:421
+#: variables.c:424
 #, c-format
 msgid "error importing function definition for `%s'"
 msgstr "greška pri uvozu definicije funkcije za „%s“"
 
-#: variables.c:833
+#: variables.c:838
 #, c-format
 msgid "shell level (%d) too high, resetting to 1"
 msgstr "razina ljuske (%d) je previsoka, vraćamo ju na 1"
 
-#: variables.c:2674
+#: variables.c:2642
 msgid "make_local_variable: no function context at current scope"
 msgstr "make_local_variable(): u trenutnom opsegu nema konteksta funkcije"
 
-#: variables.c:2693
+#: variables.c:2661
 #, c-format
 msgid "%s: variable may not be assigned value"
 msgstr "%s: varijabli se ne može dodijeliti vrijednost"
 
-#: variables.c:3475
+#: variables.c:2818 variables.c:2874
+#, c-format
+msgid "%s: cannot inherit value from incompatible type"
+msgstr "%s: nije moguće naslijediti vrijednost od nekompatibilne vrste"
+
+#: variables.c:3459
 #, c-format
 msgid "%s: assigning integer to name reference"
 msgstr "%s: nazivu referencije se dodjeljuje cijeli broj"
 
-#: variables.c:4404
+#: variables.c:4390
 msgid "all_local_variables: no function context at current scope"
 msgstr "all_local_variables(): u trenutnom opsegu nema konteksta funkcije"
 
-#: variables.c:4771
+#: variables.c:4757
 #, c-format
 msgid "%s has null exportstr"
 msgstr "*** %s ima prazni string za izvoz"
 
-#: variables.c:4776 variables.c:4785
+#: variables.c:4762 variables.c:4771
 #, c-format
 msgid "invalid character %d in exportstr for %s"
 msgstr "*** nevaljani znak %d u izvoznom stringu za %s"
 
-#: variables.c:4791
+#: variables.c:4777
 #, c-format
 msgid "no `=' in exportstr for %s"
 msgstr "*** nema „=“ u izvoznom stringu za %s"
 
-#: variables.c:5331
+#: variables.c:5317
 msgid "pop_var_context: head of shell_variables not a function context"
 msgstr "pop_var_context(): glava „shell_variables“ nije funkcijski kontekst"
 
-#: variables.c:5344
+#: variables.c:5330
 msgid "pop_var_context: no global_variables context"
 msgstr "pop_var_context(): nije „global_variables“ kontekst"
 
-#: variables.c:5424
+#: variables.c:5410
 msgid "pop_scope: head of shell_variables not a temporary environment scope"
 msgstr "pop_scope(): vrh od „shell_variables“ nije privremeni raspon valjanosti"
 
-#: variables.c:6387
+#: variables.c:6400
 #, c-format
 msgid "%s: %s: cannot open as FILE"
 msgstr "%s: %s: nije moguće otvoriti kao DATOTEKU"
 
-#: variables.c:6392
+#: variables.c:6405
 #, c-format
 msgid "%s: %s: invalid value for trace file descriptor"
 msgstr "%s: %s: nevaljana vrijednost za „trace” deskriptora datoteke"
 
-#: variables.c:6437
+#: variables.c:6450
 #, c-format
 msgid "%s: %s: compatibility value out of range"
 msgstr "%s: %s vrijednost za kompatibilnost je izvan raspona"
 
 #: version.c:46 version2.c:46
-msgid "Copyright (C) 2020 Free Software Foundation, Inc."
-msgstr "Copyright (C) 2020 Free Software Foundation, Inc."
+msgid "Copyright (C) 2022 Free Software Foundation, Inc."
+msgstr "Copyright (C) 2022 Free Software Foundation, Inc."
 
 #: version.c:47 version2.c:47
 msgid "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n"
@@ -2259,12 +2274,12 @@ msgid "command [-pVv] command [arg ...]"
 msgstr "command [-pVv] NAREDBA [ARGUMENT...]"
 
 #: builtins.c:78
-msgid "declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]"
-msgstr "declare [-aAfFgiIlnrtux] [-p] [IME[=VRIJEDNOST]...]"
+msgid "declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] [name ...]"
+msgstr "declare [aAfFgiIlnrtux] [IME[=VRIJEDNOST]...] ili declare -p [-aAfFilnrtux] [IME...]"
 
 #: builtins.c:80
-msgid "typeset [-aAfFgiIlnrtux] [-p] name[=value] ..."
-msgstr "typeset [-aAfFgiIlnrtux] [-p] IME[=VRIJEDNOST]..."
+msgid "typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] [name ...]"
+msgstr "typeset [-aAfFgiIlnrtux] IME[=VRIJEDNOST]… ili typeset -p [-aAfFilnrtux] [IME...]"
 
 #: builtins.c:82
 msgid "local [option] name[=value] ..."
@@ -2363,8 +2378,8 @@ msgid "return [n]"
 msgstr "return [N]"
 
 #: builtins.c:142
-msgid "set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]"
-msgstr "set [-abefhkmnptuvxBCHP] [-o IME_OPCIJE] [--] [ARGUMENT...]"
+msgid "set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]"
+msgstr "set [-abefhkmnptuvxBCEHPT] [-o IME_OPCIJE] [--] [-] [ARGUMENT...]"
 
 #: builtins.c:144
 msgid "unset [-f] [-v] [-n] [name ...]"
@@ -2415,8 +2430,8 @@ msgid "type [-afptP] name [name ...]"
 msgstr "type [-afptP] IME..."
 
 #: builtins.c:171
-msgid "ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]"
-msgstr "ulimit [-SHabcdefiklmnpqrstuvxPT] [LIMIT]"
+msgid "ulimit [-SHabcdefiklmnpqrstuvxPRT] [limit]"
+msgstr "ulimit [-SHabcdefiklmnpqrstuvxPRT] [LIMIT]"
 
 #: builtins.c:174
 msgid "umask [-p] [-S] [mode]"
@@ -2455,12 +2470,12 @@ msgid "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else C
 msgstr "if NAREDBE; then NAREDBE; [ elif NAREDBE; then NAREDBE; ]... [ else NAREDBE; ] fi"
 
 #: builtins.c:196
-msgid "while COMMANDS; do COMMANDS; done"
-msgstr "while NAREDBE; do NAREDBE; done"
+msgid "while COMMANDS; do COMMANDS-2; done"
+msgstr "while NAREDBE; do NAREDBE-2; done"
 
 #: builtins.c:198
-msgid "until COMMANDS; do COMMANDS; done"
-msgstr "until NAREDBE; do NAREDBE; done"
+msgid "until COMMANDS; do COMMANDS-2; done"
+msgstr "until NAREDBE; do NAREDBE-2; done"
 
 #: builtins.c:200
 msgid "coproc [NAME] command [redirections]"
@@ -2796,10 +2811,10 @@ msgstr ""
 "\n"
 "    Opcije:\n"
 "      -L    slijedi simboličke veze; simboličke veze u DIREKTORIJU razriješi\n"
-"              nakon obrade zapisa „..“\n"
+"              nakon obrade instance „..“\n"
 "      -P    rabi fizičku strukturu direktorija umjesto da slijedi simboličke\n"
 "              veze; simboličke veze u DIREKTORIJU razriješi prije obrade\n"
-"              zapisa „..“\n"
+"              instance „..“\n"
 "      -e    ako je dana s opcijom „-P“, i trenutni radni direktorij nije\n"
 "              moguće uspješno odrediti nakon uspješne promjene direktorija,\n"
 "              „cd“ završi s kȏdom različitim od 0.\n"
@@ -2948,7 +2963,7 @@ msgstr ""
 "      -f   prikaže samo definirane funkcije (ne prikaže varijable)\n"
 "      -F   prikaže samo imena funkcija bez definicija\n"
 "      -g   stvori globalne varijable samo za upotrebu u funkciji ljuske;\n"
-"             inače se ignoriraju\n"
+"             inače su zanemarene\n"
 "      -I   ako stvori lokalnu varijablu, neka naslijedi atribute i vrijednost\n"
 "             varijable s istim imenom u prethodnom opsegu\n"
 "      -p   prikaže atribute i vrijednost za svako dano IME\n"
@@ -3065,7 +3080,7 @@ msgstr ""
 "      \\E   znak za escape (ESC)\n"
 "      \\f   nova stranica (znak za FF, form feed)\n"
 "      \\n   novi redak (znak za LF, line feed)\n"
-"      \\r   na početak novoga retka (Enter, znak za CR, carriage return)\n"
+"      \\r   na početak novog retka (Enter, znak za CR, carriage return)\n"
 "      \\t   horizontalni tabulator\n"
 "      \\v   vertikalni tabulator\n"
 "      \\\\     backslash (\\)\n"
@@ -3139,7 +3154,7 @@ msgstr ""
 "      -f   učita ugrađenu naredbu IME iz dijeljenog objekta DATOTEKA\n"
 "      -d   ukloni ugrađenu naredbu učitanu s „-f“\n"
 "\n"
-"    Bez opcija, omogućena su sva navedena IMENA. Bez imena prikazane su\n"
+"    Bez opcija, omogućena su sva navedena IMENA. Bez imena pokazane su\n"
 "    omogućene naredbe (ili s „-n“ onemogućene).\n"
 "\n"
 "    Primjer: da koristite binarnu datoteku „test“ koja se nalazi na stazi\n"
@@ -3327,7 +3342,7 @@ msgid ""
 msgstr ""
 "Prikaže ili izvrši naredbe iz popisa povijesti.\n"
 "\n"
-"    Koristi se za prikazivanje dosadašnjih, za uređivanje ili za ponovno\n"
+"    Koristi se za pokazivanje dosadašnjih, za uređivanje ili za ponovno\n"
 "    pokretanje naredbi. PRVA i ZADNJA mogu biti brojevi koji specificiraju\n"
 "    raspon ili PRVA može biti string s koji specificira najnoviju naredbu\n"
 "    koja započinje s tim slovima.\n"
@@ -3565,7 +3580,7 @@ msgstr ""
 "\n"
 "    Ako je navedena opcija '-x', dana NAREDBA će se izvršiti tek nakon\n"
 "    zatvaranja svih navedenih poslova u ARGUMENTIMA (tj. njihov ID procesa je\n"
-"    zamijenjen s ID-om njima nadređenoga procesa).\n"
+"    zamijenjen s ID-om njima nadređenog procesa).\n"
 "\n"
 "    Završi s uspjehom osim ako je dana nevaljana opcija ili se dogodila greška.\n"
 "    Ako je dana opcija -x, završi sa izlaznim kȏdom NAREDBE."
@@ -3736,7 +3751,8 @@ msgid ""
 "    splitting, and the first word is assigned to the first NAME, the second\n"
 "    word to the second NAME, and so on, with any leftover words assigned to\n"
 "    the last NAME.  Only the characters found in $IFS are recognized as word\n"
-"    delimiters.\n"
+"    delimiters. By default, the backslash character escapes delimiter characters\n"
+"    and newline.\n"
 "    \n"
 "    If no NAMEs are supplied, the line read is stored in the REPLY variable.\n"
 "    \n"
@@ -3772,14 +3788,16 @@ msgid ""
 "    (in which case it's greater than 128), a variable assignment error occurs,\n"
 "    or an invalid file descriptor is supplied as the argument to -u."
 msgstr ""
-"Pročita redak iz standardnoga ulaza i razdijeli ga na polja.\n"
+"Pročita redak iz standardnog ulaza i razdijeli ga na polja.\n"
 "\n"
-"    Pročita jedan redak iz standardnoga ulaza (ili navedenog deskriptora\n"
+"    Pročita jedan redak iz standardnog ulaza (ili navedenog deskriptora\n"
 "    datoteke FD ako je dana opcija „-u“) i dodijeli prvu riječ prvom IMENU,\n"
 "    drugu riječ drugom IMENU, i tako dalje; preostale riječi dodijeli zadnjem\n"
 "    IMENU. Samo se znakovi sadržani u  varijabli $IFS prepoznaju kao MEĐA\n"
-"    (separator riječi). Ako nije navedeno nijedno IME, pročitani redak se\n"
-"    spremi u varijablu REPLY.\n"
+"    (separator riječi). Zadano, obratna kosa crta (backslash) maskira znakove\n"
+"    za separator i znak za novi redak.\n"
+"\n"
+"    Ako nije navedeno nijedno IME, pročitani redak se spremi u varijablu REPLY.\n"
 "\n"
 "    Opcije:\n"
 "      -a POLJE   pročitane riječi dodijeli sekvencijalnim indeksima POLJA\n"
@@ -3801,13 +3819,13 @@ msgstr ""
 "                   samo ako je ulaz dostupni na specificiranom deskriptoru\n"
 "                   datoteke Završi s uspjehom\n"
 "\n"
-"      -u FD      čita iz deskriptora datoteke FD umjesto iz standardnoga ulaza\n"
+"      -u FD      čita iz deskriptora datoteke FD umjesto iz standardnog ulaza\n"
 "\n"
 "      Završi s uspjehom osim ako ne naiđe na konac datoteke (EOF) ili je\n"
 "      isteklo vrijeme čekanja ili se dogodila greška pri dodjeli ili je\n"
 "      naveden nevaljani deskriptor datoteke kao argument opciji „-u“."
 
-#: builtins.c:1041
+#: builtins.c:1042
 msgid ""
 "Return from a shell function.\n"
 "    \n"
@@ -3826,7 +3844,7 @@ msgstr ""
 "\n"
 "    Vrati vrijednost N ili 1 ako ljuska ne izvrši funkciju ili skriptu."
 
-#: builtins.c:1054
+#: builtins.c:1055
 msgid ""
 "Set or unset values of shell options and positional parameters.\n"
 "    \n"
@@ -3962,7 +3980,7 @@ msgstr ""
 "      hashall      == -h\n"
 "      histexpand   == -H\n"
 "      history      omogući naredbu „history“\n"
-"      ignoreeof    ignorira Ctrl-D; ne završi (ne iziđe iz) ljusku na EOF\n"
+"      ignoreeof    zanemari Ctrl-D; ne završi (ne iziđe iz) ljusku na EOF\n"
 "      interactive-comments  dopusti komentiranje u interaktivnim naredbama\n"
 "      keyword      == -k\n"
 "      monitor      == -m\n"
@@ -3984,7 +4002,7 @@ msgstr ""
 "\n"
 "    Završi s uspjehom osim ako je dana nevaljana opcija."
 
-#: builtins.c:1139
+#: builtins.c:1140
 msgid ""
 "Unset values and attributes of shell variables and functions.\n"
 "    \n"
@@ -4021,7 +4039,7 @@ msgstr ""
 "    Završi s uspjehom osim ako je dana nevaljana opcija ili IME je\n"
 "    „samo-za-čitanje“. (bez navodnika)"
 
-#: builtins.c:1161
+#: builtins.c:1162
 msgid ""
 "Set export attribute for shell variables.\n"
 "    \n"
@@ -4054,7 +4072,7 @@ msgstr ""
 "    Završi s uspjehom osim ako je dana nevaljana opcija ili nije navedeno\n"
 "    valjano IME."
 
-#: builtins.c:1180
+#: builtins.c:1181
 msgid ""
 "Mark shell variables as unchangeable.\n"
 "    \n"
@@ -4081,8 +4099,8 @@ msgstr ""
 "    VRIJEDNOST, prvo mu dodijeli VRIJEDNOST, a zatim ga označi nepromjenjivim.\n"
 "\n"
 "    Opcije:\n"
-"      -a  svako IME se odnosi na varijable indeksiranoga polja\n"
-"      -A  svako IME se odnosi na varijable asocijativnoga polja\n"
+"      -a  svako IME se odnosi na varijable indeksiranog polja\n"
+"      -A  svako IME se odnosi na varijable asocijativnog polja\n"
 "      -f  svako IME se odnosi na funkcije ljuske\n"
 "      -p  prikaže popis svih nepromjenjivih varijabli ili funkcija\n"
 "            ovisno o opciji „-f“ (je li ili nije dana).\n"
@@ -4091,7 +4109,7 @@ msgstr ""
 "\n"
 "    Završi s uspjehom osim ako je dana nevaljana opcija ili je IME nevaljano."
 
-#: builtins.c:1202
+#: builtins.c:1203
 msgid ""
 "Shift positional parameters.\n"
 "    \n"
@@ -4108,7 +4126,7 @@ msgstr ""
 "\n"
 "    Završi s uspjehom osim ako je N negativni ili veći od $#."
 
-#: builtins.c:1214 builtins.c:1229
+#: builtins.c:1215 builtins.c:1230
 msgid ""
 "Execute commands from a file in the current shell.\n"
 "    \n"
@@ -4131,7 +4149,7 @@ msgstr ""
 "    Završi s kȏdom zadnje izvršene naredbe iz DATOTEKE ili s kȏdom 1 ako se\n"
 "    DATOTEKA ne može pročitati."
 
-#: builtins.c:1245
+#: builtins.c:1246
 msgid ""
 "Suspend shell execution.\n"
 "    \n"
@@ -4155,7 +4173,7 @@ msgstr ""
 "    Završi s uspjehom osim ako upravljanje poslovima nije omogućeno\n"
 "    ili se dogodila greška."
 
-#: builtins.c:1261
+#: builtins.c:1262
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -4281,9 +4299,9 @@ msgstr ""
 "      STRING1 = STRING2   istina ako su stringovi jednaki\n"
 "      STRING1 != STRING2  istina ako stringovi nisu jednaki\n"
 "      STRING1 < STRING2   istina ako se leksikografski prvi string\n"
-"                            razvrsta ispred drugoga\n"
+"                            razvrsta ispred drugog\n"
 "      STRING1 > STRING2   istina ako se leksikografski prvi string\n"
-"                            razvrsta iza drugoga\n"
+"                            razvrsta iza drugog\n"
 "\n"
 "    Ostali operatori:\n"
 "        -o OPCIJA         istina ako je ova OPCIJA ljuske omogućena\n"
@@ -4300,7 +4318,7 @@ msgstr ""
 "    Završi s uspjehom ako je IZRAZ istinit, 1 ako je IZRAZ neistinit,\n"
 "    ili 2 ako je dan nevaljan argument."
 
-#: builtins.c:1343
+#: builtins.c:1344
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -4312,7 +4330,7 @@ msgstr ""
 "    To je sinonim za ugrađenu funkciju „test“, ali zadnji argument\n"
 "    mora biti zagrada „]“ kao par zagradi „[“ na početku."
 
-#: builtins.c:1352
+#: builtins.c:1353
 msgid ""
 "Display process times.\n"
 "    \n"
@@ -4329,7 +4347,7 @@ msgstr ""
 "\n"
 "    Završi uvijek s kȏdom 0."
 
-#: builtins.c:1364
+#: builtins.c:1365
 msgid ""
 "Trap signals and other events.\n"
 "    \n"
@@ -4372,7 +4390,7 @@ msgstr ""
 "    specificiranih signala (SIGNAL_SPEC). Ako nema ARGUMENTA (i dan je samo\n"
 "    jedan signal) ili ARGUMENT je „-“, specificirani signal zadobije svoju\n"
 "    originalnu vrijednost (koju je imao na startu ove ljuske). Ako je ARGUMENT\n"
-"    prazni string, ljuska i njezini potomci ignoriraju svaki SIGNAL_SPEC.\n"
+"    prazni string, ljuska i njezini potomci zanemare svaki SIGNAL_SPEC.\n"
 "\n"
 "    Ako je SIGNAL_SPEC 0 ili EXIT, ARGUMENT se izvrši kad zatvorite\n"
 "    (exit) ljusku. Ako je SIGNAL_SPEC DEBUG, ARGUMENT se izvrši prije\n"
@@ -4395,7 +4413,7 @@ msgstr ""
 "    Završi s uspjehom osim ako SIGNAL_SPEC nije valjan ili je dana\n"
 "    nevaljana opcija."
 
-#: builtins.c:1400
+#: builtins.c:1401
 msgid ""
 "Display information about command type.\n"
 "    \n"
@@ -4445,7 +4463,7 @@ msgstr ""
 "\n"
 "    Završi s uspjehom ako se pronađu sva IMENA, inače s 1."
 
-#: builtins.c:1431
+#: builtins.c:1432
 msgid ""
 "Modify shell resource limits.\n"
 "    \n"
@@ -4539,7 +4557,7 @@ msgstr ""
 "    Završi s uspjehom osim ako je dana nevaljana opcija\n"
 "    ili se dogodila greška."
 
-#: builtins.c:1482
+#: builtins.c:1483
 msgid ""
 "Display or set file mode mask.\n"
 "    \n"
@@ -4571,7 +4589,7 @@ msgstr ""
 "\n"
 "    Završi s uspjehom osim ako MODE nije valjan ili je dana nevaljana opcija."
 
-#: builtins.c:1502
+#: builtins.c:1503
 msgid ""
 "Wait for job completion and return exit status.\n"
 "    \n"
@@ -4615,7 +4633,7 @@ msgstr ""
 "    Završi s kȏdom zadnjeg ID-a; s kȏdom 1 ako je ID nevaljan ili je dana\n"
 "    nevaljana opcija ili ako je -n dan, a ljuska nema neočekivane potomke."
 
-#: builtins.c:1533
+#: builtins.c:1534
 msgid ""
 "Wait for process completion and return exit status.\n"
 "    \n"
@@ -4636,7 +4654,7 @@ msgstr ""
 "    Završi s kȏdom zadnjeg PID-a, s kȏdom 1 ako je PID nevaljan,\n"
 "    ili s 2 ako je dana nevaljana opcija."
 
-#: builtins.c:1548
+#: builtins.c:1549
 msgid ""
 "Execute commands for each member in a list.\n"
 "    \n"
@@ -4648,16 +4666,16 @@ msgid ""
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
-"Izvrši naredbe za svakoga člana u popisu.\n"
+"Izvrši naredbe za svakog člana u popisu.\n"
 "\n"
-"    Petlja „for“ izvrši sekvenciju naredbi za svakoga člana u popisu stavki.\n"
+"    Petlja „for“ izvrši sekvenciju naredbi za svakog člana u popisu stavki.\n"
 "    Ako nema operanda „in RIJEČIMA...; podrazumijeva se operand\n"
 "    „in \"$@\"“. Svakom elementu u RIJEČIMA, IME se postavi na taj element\n"
 "    i NAREDBE se izvrše.\n"
 "\n"
 "    Završi s kȏdom zadnje izvršene naredbe."
 
-#: builtins.c:1562
+#: builtins.c:1563
 msgid ""
 "Arithmetic for loop.\n"
 "    \n"
@@ -4684,7 +4702,7 @@ msgstr ""
 "\n"
 "    Završi s kȏdom zadnje izvršene naredbe."
 
-#: builtins.c:1580
+#: builtins.c:1581
 msgid ""
 "Select words from a list and execute commands.\n"
 "    \n"
@@ -4708,8 +4726,8 @@ msgstr ""
 "    Proširenjem RIJEČI, „select“ generira i prikaže izbornik na standardnom\n"
 "    izlazu za greške s brojem ispred svake riječi. Ako operand „u RIJEČIMA“\n"
 "    nije naveden, podrazumijeva se operand „in \"$@\"“.\n"
-"    Nakon izbornika prikaže se PS3 prompt i redak se čita iz standardnoga\n"
-"    ulaza; ako se redak sastoji od broja koji odgovara jednoj od prikazanih\n"
+"    Nakon izbornika prikaže se PS3 prompt i redak se čita iz standardnog\n"
+"    ulaza; ako se redak sastoji od broja koji odgovara jednoj od pokazanih\n"
 "    riječi, onda varijabla IME dobije vrijednost te riječi; ako je redak\n"
 "    prazan, RIJEČI i prompt se ponovno prikažu; ako se pročita EOF (Ctrl-D)\n"
 "    „select“ naredba završi. Bilo koja druga pročitana vrijednost učini da se\n"
@@ -4719,7 +4737,7 @@ msgstr ""
 "\n"
 "    Završi s kȏdom zadnje izvršene naredbe."
 
-#: builtins.c:1601
+#: builtins.c:1602
 msgid ""
 "Report time consumed by pipeline's execution.\n"
 "    \n"
@@ -4741,12 +4759,12 @@ msgstr ""
 "    korisnikom i CPU vrijeme potrošeno sustavom za izvršavanje naredbi.\n"
 "\n"
 "    Izlazni format se može prilagoditi s varijablom okoline TIMEFORMAT.\n"
-"    Opcija „-p“ ignorira TIMEFORMAT i ispiše izlaz u prenosivom POSIX\n"
+"    Opcija „-p“ zanemari TIMEFORMAT i ispiše izlaz u prenosivom POSIX\n"
 "    formatu.\n"
 "\n"
 "    Završi s izlaznim kȏdom CJEVOVODA."
 
-#: builtins.c:1618
+#: builtins.c:1619
 msgid ""
 "Execute commands based on pattern matching.\n"
 "    \n"
@@ -4763,7 +4781,7 @@ msgstr ""
 "\n"
 "    Završi s kȏdom zadnje izvršene naredbe."
 
-#: builtins.c:1630
+#: builtins.c:1631
 msgid ""
 "Execute commands based on conditional.\n"
 "    \n"
@@ -4788,41 +4806,41 @@ msgstr ""
 "\n"
 "    „if“ završi s kȏdom zadnje izvršene naredbe."
 
-#: builtins.c:1647
+#: builtins.c:1648
 msgid ""
 "Execute commands as long as a test succeeds.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `while' COMMANDS has an exit status of zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n"
+"    an exit status of zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
 "Izvršava naredbe tako dugo dok je test uspješan.\n"
 "\n"
-"    Izvršava sukcesivne NAREDBE tako dugo dok zadnja naredba u „while“\n"
-"    NAREDBAMA završava s kȏdom 0.\n"
+"    Proširi i izvrši NAREDBE-2 tako dugo dok zadnja naredba u NAREDBAMA\n"
+"    završi s kȏdom 0.\n"
 "\n"
 "    Završi s kȏdom zadnje izvršene naredbe."
 
-#: builtins.c:1659
+#: builtins.c:1660
 msgid ""
 "Execute commands as long as a test does not succeed.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `until' COMMANDS has an exit status which is not zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n"
+"    an exit status which is not zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
 "Izvršava naredbe tako dugo dok test ne uspije.\n"
 "\n"
-"    Izvršava sukcesivne NAREDBE tako dugo dok zadnja naredba u\n"
-"    „until“ NAREDBAMA završi s kȏdom različitim od 0.\n"
+"    Proširi i izvrši NAREDBE-2 tako dugo dok zadnja naredba u NAREDBAMA\n"
+"    završi s kȏdom različitim od 0.\n"
 "\n"
 "    Završi s kȏdom zadnje izvršene naredbe."
 
-#: builtins.c:1671
+#: builtins.c:1672
 msgid ""
 "Create a coprocess named NAME.\n"
 "    \n"
@@ -4843,7 +4861,7 @@ msgstr ""
 "\n"
 "    Naredba coproc završi s kȏdom 0."
 
-#: builtins.c:1685
+#: builtins.c:1686
 msgid ""
 "Define shell function.\n"
 "    \n"
@@ -4864,7 +4882,7 @@ msgstr ""
 "\n"
 "    Završi s uspjehom osim ako je IME readonly (samo-za-čitanje)."
 
-#: builtins.c:1699
+#: builtins.c:1700
 msgid ""
 "Group commands as a unit.\n"
 "    \n"
@@ -4881,7 +4899,7 @@ msgstr ""
 "\n"
 "    Završi s kȏdom zadnje izvršene naredbe."
 
-#: builtins.c:1711
+#: builtins.c:1712
 msgid ""
 "Resume job in foreground.\n"
 "    \n"
@@ -4903,7 +4921,7 @@ msgstr ""
 "\n"
 "    Završi s kȏdom nastavljenog posla."
 
-#: builtins.c:1726
+#: builtins.c:1727
 msgid ""
 "Evaluate arithmetic expression.\n"
 "    \n"
@@ -4921,7 +4939,7 @@ msgstr ""
 "    Završi s kȏdom 1 ako je rezultat IZRAZA jednak 0;\n"
 "    inače završi s uspjehom."
 
-#: builtins.c:1738
+#: builtins.c:1739
 msgid ""
 "Execute conditional command.\n"
 "    \n"
@@ -4967,7 +4985,7 @@ msgstr ""
 "\n"
 "    Završi s uspjehom ili 1 ovisno o IZRAZU."
 
-#: builtins.c:1764
+#: builtins.c:1765
 msgid ""
 "Common shell variable names and usage.\n"
 "    \n"
@@ -5030,25 +5048,25 @@ msgstr ""
 "                    kad argument od „cd“ (direktorij) nije u\n"
 "                    trenutnom radnom direktoriju\n"
 "    GLOBIGNORE    popis uzoraka koji opisuju imena datoteka koje\n"
-"                    se ignoriraju prilikom ekspanzije imena staza\n"
+"                    su zanemarene prilikom ekspanzije imena staza\n"
 "    HISTFILE      ime datoteke koja sadrži povijest vaših naredbi\n"
 "    HISTFILESIZE  maksimalni broj redaka datoteke s povijesti naredba\n"
 "    HISTIGNORE    popis uzoraka koji opisuju naredbe koje ne treba zapisati\n"
 "                    u datoteku koja sadrži povijest vaših naredbi\n"
 "    HISTSIZE      maksimalni broj redaka koje trenutna ljuska može dosegnuti\n"
-"    HOME          puni naziv staze do vašega osobnoga direktorija\n"
+"    HOME          puni naziv staze do vašega vlastitog direktorija\n"
 "    HOSTNAME      ime računala na kojem se izvršava „bash“\n"
 "    HOSTTYPE      vrsta CPU-a na kojem se izvršava „bash“\n"
-"    IGNOREEOF     broj ignoriranih Ctrl-D (EOF) prije zatvaranja ljuske\n"
+"    IGNOREEOF     broj zanemarenih Ctrl-D (EOF) prije zatvaranja ljuske\n"
 "    MACHTYPE      vrsta računala na kojem se izvršava „bash“\n"
 "    MAILCHECK     kako često (u sekundama) „bash“ gleda ima li nove pošte\n"
 "    MAILPATH      popis datoteka koje „bash“ provjeri za novu poštu\n"
 "    OSTYPE        distribucija Unix-a no kojem se izvršava ovaj „bash“\n"
 "    PATH          popis direktorija u kojima se traže naredbe\n"
-"    PROMPT_COMMAND  naredba koja se izvrši prije ispisa primarnoga prompta\n"
+"    PROMPT_COMMAND  naredba koja se izvrši prije ispisa primarnog prompta\n"
 "    PS1           string koji opisuje primarni prompt\n"
 "    PS2           string koji opisuje sekundarni prompt (zadano, „>“)\n"
-"    PWD           puni naziv staze trenutnog radnoga direktorija\n"
+"    PWD           puni naziv staze trenutnog radnog direktorija\n"
 "    SHELLOPTS     popis svih omogućenih opcija ljuske\n"
 "    TERM          naziv vrste trenutnog terminala\n"
 "    TIMEFORMAT    pravilo za format ispisa „time“ statistika\n"
@@ -5067,7 +5085,7 @@ msgstr ""
 "                    supstitucije“, obično „^“; treći znak je „komentar\n"
 "                    povijesti“, obično „#“.\n"
 
-#: builtins.c:1821
+#: builtins.c:1822
 msgid ""
 "Add directories to stack.\n"
 "    \n"
@@ -5111,16 +5129,16 @@ msgstr ""
 "      DIREKTORIJ  Doda DIREKTORIJ na vrh stȏga direktorija i\n"
 "                    učini ga novim trenutnim radnim direktorijem.\n"
 "      +N   Zarotira stȏg tako, da N-ti direktorij u stȏgu (brojeći od nule s\n"
-"             lijeve strane popisa prikazanoga s „dirs“) postane novi vrh stȏga.\n"
+"             lijeve strane popisa pokazanog s „dirs“) postane novi vrh stȏga.\n"
 "      -N   Zarotira stȏg tako, da N-ti direktorij u stȏgu (brojeći od nule s\n"
-"             desne strane popisa prikazanoga s „dirs“) postane novi vrh stȏga.\n"
+"             desne strane popisa pokazanog s „dirs“) postane novi vrh stȏga.\n"
 "\n"
 "      Naredba „dirs“ prikaže trenutni sadržaj stȏga direktorija.\n"
 "\n"
 "    Završi s uspjehom osim ako je dana nevaljana opcija ili promjena\n"
 "    direktorija nije uspjela"
 
-#: builtins.c:1855
+#: builtins.c:1856
 msgid ""
 "Remove directories from stack.\n"
 "    \n"
@@ -5158,10 +5176,10 @@ msgstr ""
 "\n"
 "    Argumenti:\n"
 "      +N   Ukloni da N-ti direktorij iz stȏga brojeći od nule s lijeve\n"
-"             strane popisa prikazanoga s „dirs“. Na primjer: „popd +0“\n"
+"             strane popisa pokazanog s „dirs“. Na primjer: „popd +0“\n"
 "             ukloni prvi, a „popd +1“ ukloni drugi direktorij.\n"
 "      +N   Ukloni da N-ti direktorij iz stȏga brojeći od nule s desne\n"
-"             strane popisa prikazanoga s „dirs“. Na primjer.: „popd -0“\n"
+"             strane popisa pokazanog s „dirs“. Na primjer.: „popd -0“\n"
 "             ukloni zadnji, a „popd -1“ ukloni predzadnji direktorij.\n"
 "\n"
 "    Naredba „dirs“ prikaže trenutni sadržaj stȏga direktorija.\n"
@@ -5169,7 +5187,7 @@ msgstr ""
 "    Završi s uspjehom osim ako je dana nevaljana opcija ili promjena\n"
 "    direktorija nije uspjela."
 
-#: builtins.c:1885
+#: builtins.c:1886
 msgid ""
 "Display directory stack.\n"
 "    \n"
@@ -5218,7 +5236,7 @@ msgstr ""
 "\n"
 "    Završi s uspjehom osim ako je dana nevaljana opcija ili se dogodila greška."
 
-#: builtins.c:1916
+#: builtins.c:1917
 msgid ""
 "Set and unset shell options.\n"
 "    \n"
@@ -5255,7 +5273,7 @@ msgstr ""
 "    omogućeno, a s 1 ako je onemogućeno. Završi također s 1 ako je dano\n"
 "    nevaljano IME_OPCIJE, a završi s 2 ako je dana nevaljana opcija."
 
-#: builtins.c:1937
+#: builtins.c:1938
 msgid ""
 "Formats and prints ARGUMENTS under control of the FORMAT.\n"
 "    \n"
@@ -5274,6 +5292,8 @@ msgid ""
 "    \n"
 "      %b\texpand backslash escape sequences in the corresponding argument\n"
 "      %q\tquote the argument in a way that can be reused as shell input\n"
+"      %Q\tlike %q, but apply any precision to the unquoted argument before\n"
+"    \t\tquoting\n"
 "      %(fmt)T\toutput the date-time string resulting from using FMT as a format\n"
 "    \t        string for strftime(3)\n"
 "    \n"
@@ -5304,6 +5324,8 @@ msgstr ""
 "      %b       proširi backslash (\\) kontrolne znakove u odgovarajuće\n"
 "               argumente\n"
 "      %q       citira argument tako, da se može iskoristiti kao ulaz za ljusku\n"
+"      %Q       kao %q, ali primijeni bilo kakvu preciznost na necitirani\n"
+"               argument prije citiranja\n"
 "      %(fmt)T  koristeći FMT, ispiše date-time string u obliku format stringa\n"
 "               za strftime(3)\n"
 "\n"
@@ -5314,7 +5336,7 @@ msgstr ""
 "    Završi s uspjehom osim ako je dana nevaljana opcija ili se dogodila greška\n"
 "    u pisanju ili greška pri dodijeli."
 
-#: builtins.c:1971
+#: builtins.c:1974
 msgid ""
 "Specify how arguments are to be completed by Readline.\n"
 "    \n"
@@ -5365,7 +5387,7 @@ msgstr ""
 "    Završi s uspjehom osim ako je dana nevaljana opcija\n"
 "    ili se dogodila greška."
 
-#: builtins.c:2001
+#: builtins.c:2004
 msgid ""
 "Display possible completions depending on the options.\n"
 "    \n"
@@ -5384,7 +5406,7 @@ msgstr ""
 "\n"
 "    Završi s uspjehom osim ako je dana nevaljana opcija ili se dogodila greška."
 
-#: builtins.c:2016
+#: builtins.c:2019
 msgid ""
 "Modify or display completion options.\n"
 "    \n"
@@ -5436,7 +5458,7 @@ msgstr ""
 "    Završi s uspjehom osim ako nije dana nevaljana opcija ili nije definirana\n"
 "    specifikacija za kompletiranje IMENA."
 
-#: builtins.c:2047
+#: builtins.c:2050
 msgid ""
 "Read lines from the standard input into an indexed array variable.\n"
 "    \n"
@@ -5470,7 +5492,7 @@ msgid ""
 "    Returns success unless an invalid option is given or ARRAY is readonly or\n"
 "    not an indexed array."
 msgstr ""
-"Pročitane retke iz standardnoga ulaza upiše u varijablu indeksirano polje.\n"
+"Pročitane retke iz standardnog ulaza upiše u varijablu indeksirano polje.\n"
 "\n"
 "    Pročitane retke iz standardnog ulaza (ili ako je navedena opcija -u, iz\n"
 "    deskriptora datoteke FD) upiše u indeksiranu varijablu POLJE. Ako argument\n"
@@ -5500,7 +5522,7 @@ msgstr ""
 "    Završi s uspjehom osim ako je POLJE readonly (samo-za-čitanje) ili nije\n"
 "    polje ili je dana nevaljana opcija."
 
-#: builtins.c:2083
+#: builtins.c:2086
 msgid ""
 "Read lines from a file into an array variable.\n"
 "    \n"
@@ -5510,6 +5532,9 @@ msgstr ""
 "\n"
 "    Sinonim za „mapfile“."
 
+#~ msgid "%s: invalid associative array key"
+#~ msgstr "%s: nevaljan ključ asocijativnog polja"
+
 #~ msgid ""
 #~ "Returns the context of the current subroutine call.\n"
 #~ "    \n"
index 08cb511553cc7d48bde3d1f89111a15e50a579cc..cfc7843c19751a009a0c8114a72f38bb0d170eb3 100644 (file)
Binary files a/po/hu.gmo and b/po/hu.gmo differ
index 972911d8f8428e6e94eb5cf65e2d302930cc8310..c6d838829008134879d6ec31746283ddda4fd32a 100644 (file)
--- a/po/hu.po
+++ b/po/hu.po
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: bash 5.0\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-11-28 12:51-0500\n"
+"POT-Creation-Date: 2022-01-11 14:50-0500\n"
 "PO-Revision-Date: 2019-11-16 17:58+0100\n"
 "Last-Translator: Balázs Úr <ur.balazs@fsf.hu>\n"
 "Language-Team: Hungarian <translation-team-hu@lists.sourceforge.net>\n"
@@ -25,58 +25,53 @@ msgstr ""
 msgid "bad array subscript"
 msgstr "hibás tömbindex"
 
-#: arrayfunc.c:421 builtins/declare.def:638 variables.c:2274 variables.c:2300
-#: variables.c:3133
+#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268
+#: variables.c:3101
 #, c-format
 msgid "%s: removing nameref attribute"
 msgstr "%s: névhivatkozás attribútum eltávolítása"
 
-#: arrayfunc.c:446 builtins/declare.def:851
+#: arrayfunc.c:496 builtins/declare.def:868
 #, c-format
 msgid "%s: cannot convert indexed to associative array"
 msgstr "%s: nem lehetséges az indexelt tömb asszociatívvá alakítása"
 
-#: arrayfunc.c:700
-#, c-format
-msgid "%s: invalid associative array key"
-msgstr "%s: érvénytelen asszociatívtömb-index"
-
-#: arrayfunc.c:702
+#: arrayfunc.c:777
 #, c-format
 msgid "%s: cannot assign to non-numeric index"
 msgstr "%s: a nem-szám indexnek való értékadás nem lehetséges"
 
-#: arrayfunc.c:747
+#: arrayfunc.c:822
 #, c-format
 msgid "%s: %s: must use subscript when assigning associative array"
 msgstr "%s: %s: asszociatív tömbhöz való értékadásnál meg kell adni az indexet"
 
-#: bashhist.c:452
+#: bashhist.c:455
 #, c-format
 msgid "%s: cannot create: %s"
 msgstr "%s: nem hozható létre: %s"
 
-#: bashline.c:4310
+#: bashline.c:4479
 msgid "bash_execute_unix_command: cannot find keymap for command"
 msgstr ""
 "bash_execute_unix_command: nem található billentyűkiosztás a parancshoz"
 
-#: bashline.c:4459
+#: bashline.c:4637
 #, c-format
 msgid "%s: first non-whitespace character is not `\"'"
 msgstr "%s: az első nem szóközkarakter nem „\"”"
 
-#: bashline.c:4488
+#: bashline.c:4666
 #, c-format
 msgid "no closing `%c' in %s"
 msgstr "nincs záró „%c” a következőben: %s"
 
-#: bashline.c:4519
+#: bashline.c:4697
 #, c-format
 msgid "%s: missing colon separator"
 msgstr "%s: hiányzó kettőspont-elválasztó"
 
-#: bashline.c:4555
+#: bashline.c:4733
 #, fuzzy, c-format
 msgid "`%s': cannot unbind in command keymap"
 msgstr "„%s”: nem lehetséges a kötés megszüntetése"
@@ -98,7 +93,7 @@ msgid "brace expansion: failed to allocate memory for `%s'"
 msgstr ""
 "szögleteszárójel-kiegészítés: nem sikerült a memóriafoglalás „%s” számára"
 
-#: builtins/alias.def:131 variables.c:1844
+#: builtins/alias.def:131 variables.c:1817
 #, c-format
 msgid "`%s': invalid alias name"
 msgstr "„%s”: érvénytelen alias-név"
@@ -174,7 +169,7 @@ msgstr ""
 msgid "HOME not set"
 msgstr "Nincs beállítva HOME"
 
-#: builtins/cd.def:335 builtins/common.c:161 test.c:901
+#: builtins/cd.def:335 builtins/common.c:161 test.c:916
 msgid "too many arguments"
 msgstr "túl sok argumentum"
 
@@ -201,7 +196,7 @@ msgstr "figyelmeztetés: "
 msgid "%s: usage: "
 msgstr "%s: használat: "
 
-#: builtins/common.c:193 shell.c:516 shell.c:844
+#: builtins/common.c:193 shell.c:524 shell.c:866
 #, c-format
 msgid "%s: option requires an argument"
 msgstr "%s: a kapcsolónak kötelező argumentuma van"
@@ -216,7 +211,7 @@ msgstr "%s: a kötelező argumentum egy szám"
 msgid "%s: not found"
 msgstr "%s: nem található"
 
-#: builtins/common.c:216 shell.c:857
+#: builtins/common.c:216 shell.c:879
 #, c-format
 msgid "%s: invalid option"
 msgstr "%s: érvénytelen kapcsoló"
@@ -226,7 +221,7 @@ msgstr "%s: érvénytelen kapcsoló"
 msgid "%s: invalid option name"
 msgstr "%s: érvénytelen kapcsolónév"
 
-#: builtins/common.c:230 execute_cmd.c:2373 general.c:368 general.c:373
+#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373
 #, c-format
 msgid "`%s': not a valid identifier"
 msgstr "„%s”: érvénytelen azonosító"
@@ -239,7 +234,7 @@ msgstr "érvénytelen oktális szám"
 msgid "invalid hex number"
 msgstr "érvénytelen hexadecimális szám"
 
-#: builtins/common.c:244 expr.c:1569
+#: builtins/common.c:244 expr.c:1574
 msgid "invalid number"
 msgstr "érvénytelen szám"
 
@@ -253,88 +248,93 @@ msgstr "%s: érvénytelen szignálmegadás"
 msgid "`%s': not a pid or valid job spec"
 msgstr "„%s”: nem pid vagy munkaazonosító"
 
-#: builtins/common.c:266 error.c:510
+#: builtins/common.c:266 error.c:536
 #, c-format
 msgid "%s: readonly variable"
 msgstr "%s: csak olvasható változó"
 
-#: builtins/common.c:274
+#: builtins/common.c:273
+#, fuzzy, c-format
+msgid "%s: cannot assign"
+msgstr "%s: nem szüntethető meg"
+
+#: builtins/common.c:281
 #, c-format
 msgid "%s: %s out of range"
 msgstr "%s: %s kívül esik a tartományon"
 
-#: builtins/common.c:274 builtins/common.c:276
+#: builtins/common.c:281 builtins/common.c:283
 msgid "argument"
 msgstr "argumentum"
 
-#: builtins/common.c:276
+#: builtins/common.c:283
 #, c-format
 msgid "%s out of range"
 msgstr "%s kívül esik a tartományon"
 
-#: builtins/common.c:284
+#: builtins/common.c:291
 #, c-format
 msgid "%s: no such job"
 msgstr "%s: nincs ilyen munka"
 
-#: builtins/common.c:292
+#: builtins/common.c:299
 #, c-format
 msgid "%s: no job control"
 msgstr "%s: nincs munkakezelés"
 
-#: builtins/common.c:294
+#: builtins/common.c:301
 msgid "no job control"
 msgstr "nincs munkakezelés"
 
-#: builtins/common.c:304
+#: builtins/common.c:311
 #, c-format
 msgid "%s: restricted"
 msgstr "%s: korlátozott"
 
-#: builtins/common.c:306
+#: builtins/common.c:313
 msgid "restricted"
 msgstr "korlátozott"
 
-#: builtins/common.c:314
+#: builtins/common.c:321
 #, c-format
 msgid "%s: not a shell builtin"
 msgstr "%s: nem beépített parancs"
 
-#: builtins/common.c:323
+#: builtins/common.c:330
 #, c-format
 msgid "write error: %s"
 msgstr "írási hiba: %s"
 
-#: builtins/common.c:331
+#: builtins/common.c:338
 #, c-format
 msgid "error setting terminal attributes: %s"
 msgstr "hiba a terminálattribútum beállításakor: %s"
 
-#: builtins/common.c:333
+#: builtins/common.c:340
 #, c-format
 msgid "error getting terminal attributes: %s"
 msgstr "hiba a terminálattribútum lekérdezésekor: %s"
 
-#: builtins/common.c:635
+#: builtins/common.c:642
 #, c-format
 msgid "%s: error retrieving current directory: %s: %s\n"
 msgstr "%s: hiba a munkakönyvtár lekérdezésekor: %s: %s\n"
 
-#: builtins/common.c:701 builtins/common.c:703
+#: builtins/common.c:708 builtins/common.c:710
 #, c-format
 msgid "%s: ambiguous job spec"
 msgstr "%s: kétértelmű munkamegadás"
 
-#: builtins/common.c:964
+#: builtins/common.c:971
 msgid "help not available in this version"
 msgstr "ebben a verzióban nem érhető el súgó"
 
-#: builtins/common.c:1008 builtins/set.def:953 variables.c:3839
+#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825
 #, c-format
 msgid "%s: cannot unset: readonly %s"
 msgstr "%s: nem szüntethető meg: csak olvasható %s"
 
-#: builtins/common.c:1013 builtins/set.def:932 variables.c:3844
+#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830
 #, c-format
 msgid "%s: cannot unset"
 msgstr "%s: nem szüntethető meg"
@@ -344,108 +344,108 @@ msgstr "%s: nem szüntethető meg"
 msgid "%s: invalid action name"
 msgstr "%s: érvénytelen műveletnév"
 
-#: builtins/complete.def:486 builtins/complete.def:634
-#: builtins/complete.def:865
+#: builtins/complete.def:486 builtins/complete.def:642
+#: builtins/complete.def:873
 #, c-format
 msgid "%s: no completion specification"
 msgstr "%s: nincs kiegészítés meghatározva"
 
-#: builtins/complete.def:688
+#: builtins/complete.def:696
 msgid "warning: -F option may not work as you expect"
 msgstr "figyelmeztetés: a -F kapcsoló nem a várt módon működhet"
 
-#: builtins/complete.def:690
+#: builtins/complete.def:698
 msgid "warning: -C option may not work as you expect"
 msgstr "figyelmeztetés: a -C kapcsoló nem a várt módon működhet"
 
-#: builtins/complete.def:838
+#: builtins/complete.def:846
 msgid "not currently executing completion function"
 msgstr "jelenleg nincs kiegészítési függvény végrehajtás alatt"
 
-#: builtins/declare.def:134
+#: builtins/declare.def:137
 msgid "can only be used in a function"
 msgstr "csak függvényben használható"
 
-#: builtins/declare.def:363 builtins/declare.def:756
+#: builtins/declare.def:437
+msgid "cannot use `-f' to make functions"
+msgstr "nem használható a „-f” függvény létrehozására"
+
+#: builtins/declare.def:464 execute_cmd.c:6132
+#, c-format
+msgid "%s: readonly function"
+msgstr "%s: csak olvasható függvény"
+
+#: builtins/declare.def:521 builtins/declare.def:804
 #, c-format
 msgid "%s: reference variable cannot be an array"
 msgstr "%s: a referenciaváltozó nem lehet tömb"
 
-#: builtins/declare.def:374 variables.c:3385
+#: builtins/declare.def:532 variables.c:3359
 #, c-format
 msgid "%s: nameref variable self references not allowed"
 msgstr "%s: a névhivatkozás változó önhivatkozása nem engedélyezett"
 
-#: builtins/declare.def:379 variables.c:2104 variables.c:3304 variables.c:3312
-#: variables.c:3382
+#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286
+#: variables.c:3356
 #, c-format
 msgid "%s: circular name reference"
 msgstr "%s: körkörös névhivatkozás"
 
-#: builtins/declare.def:384 builtins/declare.def:762 builtins/declare.def:773
+#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820
 #, c-format
 msgid "`%s': invalid variable name for name reference"
 msgstr "„%s”: érvénytelen változónév a névhivatkozáshoz"
 
-#: builtins/declare.def:514
-msgid "cannot use `-f' to make functions"
-msgstr "nem használható a „-f” függvény létrehozására"
-
-#: builtins/declare.def:526 execute_cmd.c:5986
-#, c-format
-msgid "%s: readonly function"
-msgstr "%s: csak olvasható függvény"
-
-#: builtins/declare.def:824
-#, c-format
-msgid "%s: quoted compound array assignment deprecated"
-msgstr "%s: az idézőjelezett összetett tömb értékadása elavult"
-
-#: builtins/declare.def:838
+#: builtins/declare.def:856
 #, c-format
 msgid "%s: cannot destroy array variables in this way"
 msgstr "%s: ilyen módon nem lehet tömböt megszüntetni"
 
-#: builtins/declare.def:845 builtins/read.def:815
+#: builtins/declare.def:862 builtins/read.def:887
 #, c-format
 msgid "%s: cannot convert associative to indexed array"
 msgstr "%s: nem lehetséges az asszociatív tömb indexeltté alakítása"
 
-#: builtins/enable.def:143 builtins/enable.def:151
+#: builtins/declare.def:891
+#, c-format
+msgid "%s: quoted compound array assignment deprecated"
+msgstr "%s: az idézőjelezett összetett tömb értékadása elavult"
+
+#: builtins/enable.def:145 builtins/enable.def:153
 msgid "dynamic loading not available"
 msgstr "a dinamikus betöltés nem érhető el"
 
-#: builtins/enable.def:343
+#: builtins/enable.def:376
 #, c-format
 msgid "cannot open shared object %s: %s"
 msgstr "megosztott objektumfájl megnyitása sikertelen: %s: %s"
 
-#: builtins/enable.def:371
+#: builtins/enable.def:405
 #, c-format
 msgid "cannot find %s in shared object %s: %s"
 msgstr "%s nem található a(z) %s megosztott objektumfájlban: %s"
 
-#: builtins/enable.def:388
+#: builtins/enable.def:422
 #, fuzzy, c-format
 msgid "%s: dynamic builtin already loaded"
 msgstr "%s: nem dinamikusan van betöltve"
 
-#: builtins/enable.def:392
+#: builtins/enable.def:426
 #, c-format
 msgid "load function for %s returns failure (%d): not loaded"
 msgstr "%s betöltési függvénye hibát ad vissza (%d): nincs betöltve"
 
-#: builtins/enable.def:517
+#: builtins/enable.def:551
 #, c-format
 msgid "%s: not dynamically loaded"
 msgstr "%s: nem dinamikusan van betöltve"
 
-#: builtins/enable.def:543
+#: builtins/enable.def:577
 #, c-format
 msgid "%s: cannot delete: %s"
 msgstr "%s: nem törölhető: %s"
 
-#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5818
+#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959
 #, c-format
 msgid "%s: is a directory"
 msgstr "%s egy könyvtár"
@@ -460,7 +460,7 @@ msgstr "%s: nem normál fájl"
 msgid "%s: file is too large"
 msgstr "%s: a fájl túl nagy"
 
-#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1647
+#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673
 #, c-format
 msgid "%s: cannot execute binary file"
 msgstr "%s: bináris nem hajtható végre"
@@ -556,12 +556,12 @@ msgstr ""
 "nem illeszkedik egy szócikk sem a következőre: „%s”.\n"
 "A „help help”, „man -k '%s'” vagy „info '%s'” parancsok segíthetnek."
 
-#: builtins/help.def:224
+#: builtins/help.def:223
 #, c-format
 msgid "%s: cannot open: %s"
 msgstr "%s: nem nyitható meg: %s"
 
-#: builtins/help.def:524
+#: builtins/help.def:523
 #, c-format
 msgid ""
 "These shell commands are defined internally.  Type `help' to see this list.\n"
@@ -580,21 +580,21 @@ msgstr ""
 "A parancs nevét követő csillag (*) azt jelzi, hogy le van tiltva.\n"
 "\n"
 
-#: builtins/history.def:155
+#: builtins/history.def:159
 msgid "cannot use more than one of -anrw"
 msgstr "a következő kapcsolók kizárják egymást: -anrw"
 
-#: builtins/history.def:188 builtins/history.def:198 builtins/history.def:213
-#: builtins/history.def:230 builtins/history.def:242 builtins/history.def:249
+#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215
+#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247
 msgid "history position"
 msgstr "előzménypozíció"
 
-#: builtins/history.def:340
+#: builtins/history.def:338
 #, c-format
 msgid "%s: invalid timestamp"
 msgstr "%s: érvénytelen időbélyeg"
 
-#: builtins/history.def:451
+#: builtins/history.def:449
 #, c-format
 msgid "%s: history expansion failed"
 msgstr "%s: sikertelen előzményből való kiegészítés"
@@ -617,78 +617,78 @@ msgstr "%s: az argumentumok folyamat- vagy munkaazonosítók lehetnek"
 msgid "Unknown error"
 msgstr "Ismeretlen hiba"
 
-#: builtins/let.def:97 builtins/let.def:122 expr.c:639 expr.c:657
+#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658
 msgid "expression expected"
 msgstr "az értelmező kifejezést várt"
 
-#: builtins/mapfile.def:178
+#: builtins/mapfile.def:180
 #, c-format
 msgid "%s: not an indexed array"
 msgstr "%s: nem egy indexelt tömb"
 
-#: builtins/mapfile.def:271 builtins/read.def:308
+#: builtins/mapfile.def:276 builtins/read.def:336
 #, c-format
 msgid "%s: invalid file descriptor specification"
 msgstr "%s: érvénytelen fájlleíró-megadás"
 
-#: builtins/mapfile.def:279 builtins/read.def:315
+#: builtins/mapfile.def:284 builtins/read.def:343
 #, c-format
 msgid "%d: invalid file descriptor: %s"
 msgstr "%d: érvénytelen fájlleíró: %s"
 
-#: builtins/mapfile.def:288 builtins/mapfile.def:326
+#: builtins/mapfile.def:293 builtins/mapfile.def:331
 #, c-format
 msgid "%s: invalid line count"
 msgstr "%s: sorok száma érvénytelen"
 
-#: builtins/mapfile.def:299
+#: builtins/mapfile.def:304
 #, c-format
 msgid "%s: invalid array origin"
 msgstr "%s: érvénytelen tömbkezdet"
 
-#: builtins/mapfile.def:316
+#: builtins/mapfile.def:321
 #, c-format
 msgid "%s: invalid callback quantum"
 msgstr "%s: érvénytelen parancshívási távolság"
 
-#: builtins/mapfile.def:349
+#: builtins/mapfile.def:354
 msgid "empty array variable name"
 msgstr "üres tömbváltozó-név"
 
-#: builtins/mapfile.def:370
+#: builtins/mapfile.def:375
 msgid "array variable support required"
 msgstr "a tömbök használata nincs támogatva"
 
-#: builtins/printf.def:419
+#: builtins/printf.def:430
 #, c-format
 msgid "`%s': missing format character"
 msgstr "„%s”: hiányzó formátumkarakter"
 
-#: builtins/printf.def:474
+#: builtins/printf.def:485
 #, c-format
 msgid "`%c': invalid time format specification"
 msgstr "„%c”: érvénytelen időformátum-megadás"
 
-#: builtins/printf.def:676
+#: builtins/printf.def:708
 #, c-format
 msgid "`%c': invalid format character"
 msgstr "„%c”: érvénytelen formátumkarakter"
 
-#: builtins/printf.def:702
+#: builtins/printf.def:734
 #, c-format
 msgid "warning: %s: %s"
 msgstr "figyelmeztetés: %s: %s"
 
-#: builtins/printf.def:788
+#: builtins/printf.def:822
 #, c-format
 msgid "format parsing problem: %s"
 msgstr "formátumfeldolgozási probléma: %s"
 
-#: builtins/printf.def:885
+#: builtins/printf.def:919
 msgid "missing hex digit for \\x"
 msgstr "hiányzó hexadecimális számjegy a következőhöz: \\x"
 
-#: builtins/printf.def:900
+#: builtins/printf.def:934
 #, c-format
 msgid "missing unicode digit for \\%c"
 msgstr "hiányzó unicode számjegy a következőhöz: \\%c"
@@ -837,12 +837,12 @@ msgstr ""
 "    \n"
 "    A „dirs” beépített parancs listázza a könyvtárvermet."
 
-#: builtins/read.def:280
+#: builtins/read.def:308
 #, c-format
 msgid "%s: invalid timeout specification"
 msgstr "%s: érvénytelen időkorlát-megadás"
 
-#: builtins/read.def:755
+#: builtins/read.def:827
 #, c-format
 msgid "read error: %d: %s"
 msgstr "olvasási hiba: %d: %s"
@@ -857,7 +857,7 @@ msgstr ""
 msgid "cannot simultaneously unset a function and a variable"
 msgstr "nem lehet egyszerre függvényt és változót megszüntetni"
 
-#: builtins/set.def:966
+#: builtins/set.def:969
 #, c-format
 msgid "%s: not an array variable"
 msgstr "%s: nem egy tömbváltozó"
@@ -876,12 +876,12 @@ msgstr "%s: nem exportálható"
 msgid "shift count"
 msgstr "shift-szám"
 
-#: builtins/shopt.def:310
+#: builtins/shopt.def:323
 msgid "cannot set and unset shell options simultaneously"
 msgstr ""
 "nem lehet egyszerre beállítani és törölni parancsértelmező-beállításokat"
 
-#: builtins/shopt.def:428
+#: builtins/shopt.def:444
 #, c-format
 msgid "%s: invalid shell option name"
 msgstr "%s: érvénytelen parancsértelmezőkapcsoló-név"
@@ -948,16 +948,16 @@ msgstr "%s: érvénytelen korlátérték"
 msgid "`%c': bad command"
 msgstr "„%c”: érvénytelen parancs"
 
-#: builtins/ulimit.def:455
+#: builtins/ulimit.def:464
 #, c-format
 msgid "%s: cannot get limit: %s"
 msgstr "%s: nem kérdezhető le a korlát: %s"
 
-#: builtins/ulimit.def:481
+#: builtins/ulimit.def:490
 msgid "limit"
 msgstr "korlát"
 
-#: builtins/ulimit.def:493 builtins/ulimit.def:793
+#: builtins/ulimit.def:502 builtins/ulimit.def:802
 #, c-format
 msgid "%s: cannot modify limit: %s"
 msgstr "%s: nem módosítható a korlát: %s"
@@ -976,7 +976,7 @@ msgstr "„%c”: érvénytelen szimbolikus módoperátor"
 msgid "`%c': invalid symbolic mode character"
 msgstr "„%c”: érvénytelen szimbolikus módkarakter"
 
-#: error.c:89 error.c:347 error.c:349 error.c:351
+#: error.c:89 error.c:373 error.c:375 error.c:377
 msgid " line "
 msgstr " sor: "
 
@@ -996,96 +996,106 @@ msgstr "Megszakítás..."
 msgid "INFORM: "
 msgstr "INFORM: "
 
-#: error.c:462
+#: error.c:310
+#, fuzzy, c-format
+msgid "DEBUG warning: "
+msgstr "figyelmeztetés: "
+
+#: error.c:488
 msgid "unknown command error"
 msgstr "hiba: érvénytelen parancs"
 
-#: error.c:463
+#: error.c:489
 msgid "bad command type"
 msgstr "hibás parancstípus"
 
-#: error.c:464
+#: error.c:490
 msgid "bad connector"
 msgstr "hibás csatlakozó"
 
-#: error.c:465
+#: error.c:491
 msgid "bad jump"
 msgstr "hibás ugrás"
 
-#: error.c:503
+#: error.c:529
 #, c-format
 msgid "%s: unbound variable"
 msgstr "%s: kötetlen változó"
 
-#: eval.c:242
+#: eval.c:243
 msgid "\atimed out waiting for input: auto-logout\n"
 msgstr "\aidőtúllépés bemenetre várva: automatikus kijelentkezés\n"
 
-#: execute_cmd.c:537
+#: execute_cmd.c:555
 #, c-format
 msgid "cannot redirect standard input from /dev/null: %s"
 msgstr "szabványos bemenet /dev/null-ra állítása sikertelen: %s"
 
-#: execute_cmd.c:1297
+#: execute_cmd.c:1317
 #, c-format
 msgid "TIMEFORMAT: `%c': invalid format character"
 msgstr "IDŐFORMÁTUM: „%c”: érvénytelen formátumkarakter"
 
-#: execute_cmd.c:2362
+#: execute_cmd.c:2391
 #, c-format
 msgid "execute_coproc: coproc [%d:%s] still exists"
 msgstr "execute_coproc: a coproc [%d:%s] még mindig létezik"
 
-#: execute_cmd.c:2486
+#: execute_cmd.c:2524
 msgid "pipe error"
 msgstr "hibás csővezeték"
 
-#: execute_cmd.c:4793
+#: execute_cmd.c:4923
 #, c-format
 msgid "eval: maximum eval nesting level exceeded (%d)"
 msgstr "eval: a maximális eval beágyazási szint túllépve (%d)"
 
-#: execute_cmd.c:4805
+#: execute_cmd.c:4935
 #, c-format
 msgid "%s: maximum source nesting level exceeded (%d)"
 msgstr "%s: a maximális source beágyazási szint túllépve (%d)"
 
-#: execute_cmd.c:4913
+#: execute_cmd.c:5043
 #, c-format
 msgid "%s: maximum function nesting level exceeded (%d)"
 msgstr "%s: a maximális függvénybeágyazási szint túllépve (%d)"
 
-#: execute_cmd.c:5467
+#: execute_cmd.c:5598
 #, c-format
 msgid "%s: restricted: cannot specify `/' in command names"
 msgstr "%s: korlátozott: nem adható meg „/” a parancsok nevében"
 
-#: execute_cmd.c:5574
+#: execute_cmd.c:5715
 #, c-format
 msgid "%s: command not found"
 msgstr "%s: parancs nem található"
 
-#: execute_cmd.c:5816
+#: execute_cmd.c:5957
 #, c-format
 msgid "%s: %s"
 msgstr "%s: %s"
 
-#: execute_cmd.c:5854
+#: execute_cmd.c:5975
+#, fuzzy, c-format
+msgid "%s: cannot execute: required file not found"
+msgstr "%s: bináris nem hajtható végre"
+
+#: execute_cmd.c:6000
 #, c-format
 msgid "%s: %s: bad interpreter"
 msgstr "%s: %s: rossz parancsértelmező"
 
-#: execute_cmd.c:5891
+#: execute_cmd.c:6037
 #, c-format
 msgid "%s: cannot execute binary file: %s"
 msgstr "%s: a bináris nem hajtható végre: %s"
 
-#: execute_cmd.c:5977
+#: execute_cmd.c:6123
 #, c-format
 msgid "`%s': is a special builtin"
 msgstr "„%s”: egy speciális beépített parancs"
 
-#: execute_cmd.c:6029
+#: execute_cmd.c:6175
 #, c-format
 msgid "cannot duplicate fd %d to fd %d"
 msgstr "nem lehet duplikálni a(z) %d. fájlleírót a(z) %d. helyre"
@@ -1098,69 +1108,69 @@ msgstr "a kifejezés rekurziókorlátot"
 msgid "recursion stack underflow"
 msgstr "alulcsordult a rekurziós verem"
 
-#: expr.c:477
+#: expr.c:478
 msgid "syntax error in expression"
 msgstr "szintaktikai hiba a kifejezésben"
 
-#: expr.c:521
+#: expr.c:522
 msgid "attempted assignment to non-variable"
 msgstr "nem változóhoz próbált értéket rendelni"
 
-#: expr.c:530
+#: expr.c:531
 msgid "syntax error in variable assignment"
 msgstr "szintaktikai hiba a változó-értékadásban"
 
-#: expr.c:544 expr.c:911
+#: expr.c:545 expr.c:912
 msgid "division by 0"
 msgstr "0-val osztás"
 
-#: expr.c:592
+#: expr.c:593
 msgid "bug: bad expassign token"
 msgstr "bug: rossz expassign token"
 
-#: expr.c:646
+#: expr.c:647
 msgid "`:' expected for conditional expression"
 msgstr "„:” egy feltételkifejezés szükséges"
 
-#: expr.c:972
+#: expr.c:973
 msgid "exponent less than 0"
 msgstr "0-nál kisebb kitevő"
 
-#: expr.c:1029
+#: expr.c:1030
 msgid "identifier expected after pre-increment or pre-decrement"
 msgstr "prefix növelés vagy csökkentés után azonosító kell következzen"
 
-#: expr.c:1056
+#: expr.c:1057
 msgid "missing `)'"
 msgstr "hiányzó „)”"
 
-#: expr.c:1107 expr.c:1487
+#: expr.c:1108 expr.c:1492
 msgid "syntax error: operand expected"
 msgstr "szintaktikai hiba: operandus kell következzen"
 
-#: expr.c:1489
+#: expr.c:1494
 msgid "syntax error: invalid arithmetic operator"
 msgstr "szintaktikai hiba: érvénytelen aritmetikai operátor"
 
-#: expr.c:1513
+#: expr.c:1518
 #, c-format
 msgid "%s%s%s: %s (error token is \"%s\")"
 msgstr "%s%s%s: %s (hibás token: „%s”)"
 
-#: expr.c:1573
+#: expr.c:1578
 msgid "invalid arithmetic base"
 msgstr "érvénytelen számrendszer"
 
-#: expr.c:1582
+#: expr.c:1587
 #, fuzzy
 msgid "invalid integer constant"
 msgstr "%s: sorok száma érvénytelen"
 
-#: expr.c:1598
+#: expr.c:1603
 msgid "value too great for base"
 msgstr "túl nagy érték a számrendszerhez"
 
-#: expr.c:1647
+#: expr.c:1652
 #, c-format
 msgid "%s: expression error\n"
 msgstr "%s: hibás kifejezés\n"
@@ -1169,7 +1179,7 @@ msgstr "%s: hibás kifejezés\n"
 msgid "getcwd: cannot access parent directories"
 msgstr "getcwd: nem érhetőek el a szülőkönyvtárak"
 
-#: input.c:99 subst.c:6069
+#: input.c:99 subst.c:6208
 #, c-format
 msgid "cannot reset nodelay mode for fd %d"
 msgstr "nem lehet újraindítani a nodelay módot a(z) %d. fájlleíróhoz"
@@ -1189,167 +1199,167 @@ msgstr "save_bash_input: már van puffer a(z) %d. fájlleíróhoz"
 msgid "start_pipeline: pgrp pipe"
 msgstr "start_pipeline: pgrp csővezeték"
 
-#: jobs.c:906
+#: jobs.c:907
 #, c-format
 msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr ""
 
-#: jobs.c:959
+#: jobs.c:960
 #, c-format
 msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr ""
 
-#: jobs.c:1283
+#: jobs.c:1279
 #, c-format
 msgid "forked pid %d appears in running job %d"
 msgstr "a(z) %d számú forkolt pid a(z) %d számú munkában jelent meg"
 
-#: jobs.c:1402
+#: jobs.c:1397
 #, c-format
 msgid "deleting stopped job %d with process group %ld"
 msgstr "%d. számú megállított munka törlése a %ld számú folyamatcsoporttal"
 
-#: jobs.c:1511
+#: jobs.c:1502
 #, c-format
 msgid "add_process: pid %5ld (%s) marked as still alive"
 msgstr "add_process: %5ld. folyamat (%s) még élőként van jelölve"
 
-#: jobs.c:1850
+#: jobs.c:1839
 #, c-format
 msgid "describe_pid: %ld: no such pid"
 msgstr "describe_pid: %ld: nincs ilyen pid"
 
-#: jobs.c:1865
+#: jobs.c:1854
 #, c-format
 msgid "Signal %d"
 msgstr "%d. szignál"
 
-#: jobs.c:1879 jobs.c:1905
+#: jobs.c:1868 jobs.c:1894
 msgid "Done"
 msgstr "Kész"
 
-#: jobs.c:1884 siglist.c:122
+#: jobs.c:1873 siglist.c:123
 msgid "Stopped"
 msgstr "Megállítva"
 
-#: jobs.c:1888
+#: jobs.c:1877
 #, c-format
 msgid "Stopped(%s)"
 msgstr "Megállítva(%s)"
 
-#: jobs.c:1892
+#: jobs.c:1881
 msgid "Running"
 msgstr "Fut"
 
-#: jobs.c:1909
+#: jobs.c:1898
 #, c-format
 msgid "Done(%d)"
 msgstr "Kész(%d)"
 
-#: jobs.c:1911
+#: jobs.c:1900
 #, c-format
 msgid "Exit %d"
 msgstr "Kilépett(%d)"
 
-#: jobs.c:1914
+#: jobs.c:1903
 msgid "Unknown status"
 msgstr "Ismeretlen állapot"
 
-#: jobs.c:2001
+#: jobs.c:1990
 #, c-format
 msgid "(core dumped) "
 msgstr "(core készült) "
 
-#: jobs.c:2020
+#: jobs.c:2009
 #, c-format
 msgid "  (wd: %s)"
 msgstr " (mk: %s)"
 
-#: jobs.c:2259
+#: jobs.c:2250
 #, c-format
 msgid "child setpgid (%ld to %ld)"
 msgstr "gyermek setpgid (innen: %ld ide: %ld)"
 
-#: jobs.c:2617 nojobs.c:664
+#: jobs.c:2608 nojobs.c:666
 #, c-format
 msgid "wait: pid %ld is not a child of this shell"
 msgstr "wait: %ld. számú folyamat nem gyermeke ennek a parancsértelmezőnek"
 
-#: jobs.c:2893
+#: jobs.c:2884
 #, c-format
 msgid "wait_for: No record of process %ld"
 msgstr "wait_for: Nincs bejegyzés %ld. számú folyamatról"
 
-#: jobs.c:3236
+#: jobs.c:3223
 #, c-format
 msgid "wait_for_job: job %d is stopped"
 msgstr "wait_for_job: %d. számú munka le lett állítva"
 
-#: jobs.c:3564
+#: jobs.c:3551
 #, fuzzy, c-format
 msgid "%s: no current jobs"
 msgstr "%s: nincs ilyen munka"
 
-#: jobs.c:3571
+#: jobs.c:3558
 #, c-format
 msgid "%s: job has terminated"
 msgstr "%s: a munka be lett fejezve"
 
-#: jobs.c:3580
+#: jobs.c:3567
 #, c-format
 msgid "%s: job %d already in background"
 msgstr "%s: %d. számú munka már a háttérben van"
 
-#: jobs.c:3806
+#: jobs.c:3793
 msgid "waitchld: turning on WNOHANG to avoid indefinite block"
 msgstr "waitchld: WNOHANG bekapcsolása a korlátlan blokk elkerülésére"
 
-#: jobs.c:4320
+#: jobs.c:4307
 #, c-format
 msgid "%s: line %d: "
 msgstr "%s: %d. sor: "
 
-#: jobs.c:4334 nojobs.c:919
+#: jobs.c:4321 nojobs.c:921
 #, c-format
 msgid " (core dumped)"
 msgstr " (core készült)"
 
-#: jobs.c:4346 jobs.c:4359
+#: jobs.c:4333 jobs.c:4346
 #, c-format
 msgid "(wd now: %s)\n"
 msgstr "(mk most: %s)\n"
 
-#: jobs.c:4391
+#: jobs.c:4378
 msgid "initialize_job_control: getpgrp failed"
 msgstr "initialize_job_control: getpgrp sikertelen"
 
-#: jobs.c:4447
+#: jobs.c:4434
 msgid "initialize_job_control: no job control in background"
 msgstr "initialize_job_control: nincs munkakezelés a háttérben"
 
-#: jobs.c:4463
+#: jobs.c:4450
 msgid "initialize_job_control: line discipline"
 msgstr "initialize_job_control: line discipline"
 
-#: jobs.c:4473
+#: jobs.c:4460
 msgid "initialize_job_control: setpgid"
 msgstr "initialize_job_control: setpgid"
 
-#: jobs.c:4494 jobs.c:4503
+#: jobs.c:4481 jobs.c:4490
 #, c-format
 msgid "cannot set terminal process group (%d)"
 msgstr "nem állítható be a terminál folyamatcsoportja (%d)"
 
-#: jobs.c:4508
+#: jobs.c:4495
 msgid "no job control in this shell"
 msgstr "nincsen munkakezelés ebben a parancsértelmezőben"
 
-#: lib/malloc/malloc.c:353
+#: lib/malloc/malloc.c:367
 #, c-format
 msgid "malloc: failed assertion: %s\n"
 msgstr "malloc: nem teljesülő feltételezés: %s\n"
 
-#: lib/malloc/malloc.c:369
+#: lib/malloc/malloc.c:383
 #, c-format
 msgid ""
 "\r\n"
@@ -1358,49 +1368,49 @@ msgstr ""
 "\r\n"
 "malloc: %s:%d: téves feltételezés\r\n"
 
-#: lib/malloc/malloc.c:370 lib/malloc/malloc.c:933
+#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941
 msgid "unknown"
 msgstr "ismeretlen"
 
-#: lib/malloc/malloc.c:882
+#: lib/malloc/malloc.c:892
 msgid "malloc: block on free list clobbered"
 msgstr "malloc: a szabadlistán lévő blokk felülírva"
 
-#: lib/malloc/malloc.c:972
+#: lib/malloc/malloc.c:980
 msgid "free: called with already freed block argument"
 msgstr "free: már felszabadított blokkal lett hívva"
 
-#: lib/malloc/malloc.c:975
+#: lib/malloc/malloc.c:983
 msgid "free: called with unallocated block argument"
 msgstr "free: nem lefoglalt blokkal lett hívva"
 
-#: lib/malloc/malloc.c:994
+#: lib/malloc/malloc.c:1001
 msgid "free: underflow detected; mh_nbytes out of range"
 msgstr "free: alulcsordulást érzékelt; mh_nbytes kívül esik a tartományon"
 
-#: lib/malloc/malloc.c:1001
+#: lib/malloc/malloc.c:1007
 #, fuzzy
 msgid "free: underflow detected; magic8 corrupted"
 msgstr "free: alulcsordulást érzékelt; mh_nbytes kívül esik a tartományon"
 
-#: lib/malloc/malloc.c:1009
+#: lib/malloc/malloc.c:1014
 msgid "free: start and end chunk sizes differ"
 msgstr "free: kezdő- és záródarab mérete eltér"
 
-#: lib/malloc/malloc.c:1119
+#: lib/malloc/malloc.c:1176
 msgid "realloc: called with unallocated block argument"
 msgstr "realloc: nem lefoglalt blokkal lett hívva"
 
-#: lib/malloc/malloc.c:1134
+#: lib/malloc/malloc.c:1191
 msgid "realloc: underflow detected; mh_nbytes out of range"
 msgstr "realloc: alulcsordulást érzékelt; mh_nbytes kívül esik a tartományon"
 
-#: lib/malloc/malloc.c:1141
+#: lib/malloc/malloc.c:1197
 #, fuzzy
 msgid "realloc: underflow detected; magic8 corrupted"
 msgstr "realloc: alulcsordulást érzékelt; mh_nbytes kívül esik a tartományon"
 
-#: lib/malloc/malloc.c:1150
+#: lib/malloc/malloc.c:1205
 msgid "realloc: start and end chunk sizes differ"
 msgstr "realloc: kezdő- és záródarab mérete eltér"
 
@@ -1442,22 +1452,22 @@ msgstr "%s: hibás hálózatiútvonal-megadás"
 msgid "network operations not supported"
 msgstr "a hálózati műveletek nincsenek támogatva"
 
-#: locale.c:217
+#: locale.c:219
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s)"
 msgstr "setlocale: LC_ALL: nem lehet területi beállításokat váltani (%s)"
 
-#: locale.c:219
+#: locale.c:221
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s): %s"
 msgstr "setlocale: LC_ALL: nem lehet területi beállításokat váltani (%s): %s"
 
-#: locale.c:292
+#: locale.c:294
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s)"
 msgstr "setlocale: %s: nem lehet területi beállításokat váltani (%s)"
 
-#: locale.c:294
+#: locale.c:296
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s): %s"
 msgstr "setlocale: %s: nem lehet területi beállításokat váltani (%s): %s"
@@ -1475,35 +1485,35 @@ msgstr "Új levél a következőben: $_"
 msgid "The mail in %s has been read\n"
 msgstr "A(z) „%s” helyen lévő levél el van olvasva\n"
 
-#: make_cmd.c:317
+#: make_cmd.c:314
 msgid "syntax error: arithmetic expression required"
 msgstr "szintaktikai hiba: aritmetikai kifejezés szükséges"
 
-#: make_cmd.c:319
+#: make_cmd.c:316
 msgid "syntax error: `;' unexpected"
 msgstr "szintaktikai hiba: váratlan „;”"
 
-#: make_cmd.c:320
+#: make_cmd.c:317
 #, c-format
 msgid "syntax error: `((%s))'"
 msgstr "szintaktikai hiba: „((%s))”"
 
-#: make_cmd.c:572
+#: make_cmd.c:569
 #, c-format
 msgid "make_here_document: bad instruction type %d"
 msgstr "make_here_document: hibás utasítástípus: %d"
 
-#: make_cmd.c:657
+#: make_cmd.c:668
 #, c-format
 msgid "here-document at line %d delimited by end-of-file (wanted `%s')"
 msgstr "a(z) %d. sorban kezdett heredocot EOF zárja („%s” helyett)"
 
-#: make_cmd.c:756
+#: make_cmd.c:769
 #, c-format
 msgid "make_redirection: redirection instruction `%d' out of range"
 msgstr "make_redirection: %d. átirányító utasítás kívül esik a tartományon"
 
-#: parse.y:2393
+#: parse.y:2428
 #, c-format
 msgid ""
 "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line "
@@ -1512,103 +1522,103 @@ msgstr ""
 "shell_getc: a shell_input_line_size (%zu) meghaladja a MÉRET_MAXIMUM értékét "
 "(%lu): a sor csonkolva"
 
-#: parse.y:2826
+#: parse.y:2921
 msgid "maximum here-document count exceeded"
 msgstr "a maximális here-document szám túllépve"
 
-#: parse.y:3581 parse.y:3957 parse.y:4556
+#: parse.y:3684 parse.y:4244 parse.y:6148
 #, c-format
 msgid "unexpected EOF while looking for matching `%c'"
 msgstr "váratlan EOF „%c” helyett"
 
-#: parse.y:4696
+#: parse.y:4452
 msgid "unexpected EOF while looking for `]]'"
 msgstr "váratlan EOF „]]” helyett"
 
-#: parse.y:4701
+#: parse.y:4457
 #, c-format
 msgid "syntax error in conditional expression: unexpected token `%s'"
 msgstr "szintaktikai hiba a feltételben: váratlan token: „%s”"
 
-#: parse.y:4705
+#: parse.y:4461
 msgid "syntax error in conditional expression"
 msgstr "szintaktikai hiba a feltételben"
 
-#: parse.y:4783
+#: parse.y:4539
 #, c-format
 msgid "unexpected token `%s', expected `)'"
 msgstr "váratlan token (%s) „)” helyett"
 
-#: parse.y:4787
+#: parse.y:4543
 msgid "expected `)'"
 msgstr "„)” szükséges"
 
-#: parse.y:4815
+#: parse.y:4571
 #, c-format
 msgid "unexpected argument `%s' to conditional unary operator"
 msgstr "váratlan argumentum (%s) feltételes egyoperandusú operátorhoz"
 
-#: parse.y:4819
+#: parse.y:4575
 msgid "unexpected argument to conditional unary operator"
 msgstr "váratlan argumentum feltételes egyoperandusú operátorhoz"
 
-#: parse.y:4865
+#: parse.y:4621
 #, c-format
 msgid "unexpected token `%s', conditional binary operator expected"
 msgstr "váratlan token (%s), feltételes kétoperandusú operátor szükséges"
 
-#: parse.y:4869
+#: parse.y:4625
 msgid "conditional binary operator expected"
 msgstr "feltételes kétoperandusú operátor szükséges"
 
-#: parse.y:4891
+#: parse.y:4647
 #, c-format
 msgid "unexpected argument `%s' to conditional binary operator"
 msgstr "váratlan argumentum (%s) feltételes kétoperandusú operátorhoz"
 
-#: parse.y:4895
+#: parse.y:4651
 msgid "unexpected argument to conditional binary operator"
 msgstr "váratlan argumentum feltételes kétoperandusú operátorhoz"
 
-#: parse.y:4906
+#: parse.y:4662
 #, c-format
 msgid "unexpected token `%c' in conditional command"
 msgstr "váratlan token (%c) feltételes parancsban"
 
-#: parse.y:4909
+#: parse.y:4665
 #, c-format
 msgid "unexpected token `%s' in conditional command"
 msgstr "váratlan token (%s) feltételes parancsban"
 
-#: parse.y:4913
+#: parse.y:4669
 #, c-format
 msgid "unexpected token %d in conditional command"
 msgstr "váratlan token (%d) feltételes parancsban"
 
-#: parse.y:6336
+#: parse.y:6118
 #, c-format
 msgid "syntax error near unexpected token `%s'"
 msgstr "szintaktikai hiba „%s” váratlan token közelében"
 
-#: parse.y:6355
+#: parse.y:6137
 #, c-format
 msgid "syntax error near `%s'"
 msgstr "szintaktikai hiba „%s” közelében"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error: unexpected end of file"
 msgstr "szintaktikai hiba: váratlan fájlvége"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error"
 msgstr "szintaktikai hiba"
 
-#: parse.y:6428
+#: parse.y:6216
 #, c-format
 msgid "Use \"%s\" to leave the shell.\n"
 msgstr "„%s” használatával lehet elhagyni a parancsértelmezőt.\n"
 
-#: parse.y:6602
+#: parse.y:6394
 msgid "unexpected EOF while looking for matching `)'"
 msgstr "váratlan EOF „)” helyett"
 
@@ -1646,94 +1656,94 @@ msgstr "xtrace_set: NULL fájlmutató"
 msgid "xtrace fd (%d) != fileno xtrace fp (%d)"
 msgstr "xtrace fd (%d) != fileno xtrace fp (%d)"
 
-#: print_cmd.c:1540
+#: print_cmd.c:1545
 #, c-format
 msgid "cprintf: `%c': invalid format character"
 msgstr "cprintf: „%c”: érvénytelen formátumkarakter"
 
-#: redir.c:149 redir.c:197
+#: redir.c:150 redir.c:198
 msgid "file descriptor out of range"
 msgstr "fájlleíró kívül esik a tartományon"
 
-#: redir.c:204
+#: redir.c:205
 #, c-format
 msgid "%s: ambiguous redirect"
 msgstr "%s: kétértelmű átirányítás"
 
-#: redir.c:208
+#: redir.c:209
 #, c-format
 msgid "%s: cannot overwrite existing file"
 msgstr "%s: nem lehet felülírni létező fájlt"
 
-#: redir.c:213
+#: redir.c:214
 #, c-format
 msgid "%s: restricted: cannot redirect output"
 msgstr "%s: korlátozott: nem lehet átirányítani a kimenetet"
 
-#: redir.c:218
+#: redir.c:219
 #, c-format
 msgid "cannot create temp file for here-document: %s"
 msgstr "nem lehet a heredocnak átmeneti fájlt létrehozni: %s"
 
-#: redir.c:222
+#: redir.c:223
 #, c-format
 msgid "%s: cannot assign fd to variable"
 msgstr "%s: nem lehet változóhoz fájlleírót rendelni"
 
-#: redir.c:649
+#: redir.c:650
 msgid "/dev/(tcp|udp)/host/port not supported without networking"
 msgstr "/dev/(tcp|udp)/host/port nincs támogatva hálózat nélkül"
 
-#: redir.c:938 redir.c:1053 redir.c:1114 redir.c:1284
+#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303
 msgid "redirection error: cannot duplicate fd"
 msgstr "átirányítási hiba: nem lehet duplikálni a fájlleírót"
 
-#: shell.c:347
+#: shell.c:353
 msgid "could not find /tmp, please create!"
 msgstr "nem található /tmp, hozza létre!"
 
-#: shell.c:351
+#: shell.c:357
 msgid "/tmp must be a valid directory name"
 msgstr "/tmp érvényes könyvtárnév kell legyen"
 
-#: shell.c:804
+#: shell.c:826
 msgid "pretty-printing mode ignored in interactive shells"
 msgstr "a csinos kiírási mód mellőzve van interaktív az parancsértelmezőkben"
 
-#: shell.c:948
+#: shell.c:972
 #, c-format
 msgid "%c%c: invalid option"
 msgstr "%c%c: érvénytelen kapcsoló"
 
-#: shell.c:1319
+#: shell.c:1343
 #, c-format
 msgid "cannot set uid to %d: effective uid %d"
 msgstr "az uid nem állítható be %d értékre: a hatásos uid %d"
 
-#: shell.c:1330
+#: shell.c:1354
 #, c-format
 msgid "cannot set gid to %d: effective gid %d"
 msgstr "a gid nem állítható be %d értékre: a hatásos gid %d"
 
-#: shell.c:1518
+#: shell.c:1544
 msgid "cannot start debugger; debugging mode disabled"
 msgstr "nem indítható el a hibakereső; a hibakeresési mód letiltva"
 
-#: shell.c:1632
+#: shell.c:1658
 #, c-format
 msgid "%s: Is a directory"
 msgstr "%s: ez egy könyvtár"
 
-#: shell.c:1881
+#: shell.c:1907
 msgid "I have no name!"
 msgstr "Nincs nevem!"
 
-#: shell.c:2035
+#: shell.c:2061
 #, c-format
 msgid "GNU bash, version %s-(%s)\n"
 msgstr "GNU bash, %s-(%s) verzió\n"
 
-#: shell.c:2036
+#: shell.c:2062
 #, c-format
 msgid ""
 "Usage:\t%s [GNU long option] [option] ...\n"
@@ -1742,312 +1752,312 @@ msgstr ""
 "Használat:\t%s [GNU hosszú kapcsoló] [kapcsoló] ...\n"
 "\t%s [GNU hosszú kapcsoló] [kapcsoló] parancsfájl ...\n"
 
-#: shell.c:2038
+#: shell.c:2064
 msgid "GNU long options:\n"
 msgstr "GNU hosszú kapcsolók:\n"
 
-#: shell.c:2042
+#: shell.c:2068
 msgid "Shell options:\n"
 msgstr "Parancsértelmező-kapcsolók:\n"
 
-#: shell.c:2043
+#: shell.c:2069
 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n"
 msgstr "\t-ilrsD vagy -c parancs vagy -O shopt_option\t\t(csak hívás)\n"
 
-#: shell.c:2062
+#: shell.c:2088
 #, c-format
 msgid "\t-%s or -o option\n"
 msgstr "\t-%s vagy -o kapcsoló\n"
 
-#: shell.c:2068
+#: shell.c:2094
 #, c-format
 msgid "Type `%s -c \"help set\"' for more information about shell options.\n"
 msgstr ""
 "A „%s -c \"help set\"” további információt ad a parancsértelmező-"
 "beállításokról.\n"
 
-#: shell.c:2069
+#: shell.c:2095
 #, c-format
 msgid "Type `%s -c help' for more information about shell builtin commands.\n"
 msgstr "A „%s -c help” további információt ad a beépített parancsokról.\n"
 
-#: shell.c:2070
+#: shell.c:2096
 #, c-format
 msgid "Use the `bashbug' command to report bugs.\n"
 msgstr "A „bashbug” paranccsal jelenthet hibákat.\n"
 
-#: shell.c:2072
+#: shell.c:2098
 #, c-format
 msgid "bash home page: <http://www.gnu.org/software/bash>\n"
 msgstr "a bash honlapja: <http://www.gnu.org/software/bash>\n"
 
-#: shell.c:2073
+#: shell.c:2099
 #, c-format
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 msgstr ""
 "Általános segítség a GNU szoftverek használatához: <http://www.gnu.org/"
 "gethelp/>\n"
 
-#: sig.c:757
+#: sig.c:765
 #, c-format
 msgid "sigprocmask: %d: invalid operation"
 msgstr "sigprocmask: %d: érvénytelen művelet"
 
-#: siglist.c:47
+#: siglist.c:48
 msgid "Bogus signal"
 msgstr "Hibás szignál"
 
-#: siglist.c:50
+#: siglist.c:51
 msgid "Hangup"
 msgstr "Bontás"
 
-#: siglist.c:54
+#: siglist.c:55
 msgid "Interrupt"
 msgstr "Megszakítás"
 
-#: siglist.c:58
+#: siglist.c:59
 msgid "Quit"
 msgstr "Abbahagyás"
 
-#: siglist.c:62
+#: siglist.c:63
 msgid "Illegal instruction"
 msgstr "Érvénytelen utasítás"
 
-#: siglist.c:66
+#: siglist.c:67
 msgid "BPT trace/trap"
 msgstr "BPT trace/trap"
 
-#: siglist.c:74
+#: siglist.c:75
 msgid "ABORT instruction"
 msgstr "ABORT utasítás"
 
-#: siglist.c:78
+#: siglist.c:79
 msgid "EMT instruction"
 msgstr "EMT utasítás"
 
-#: siglist.c:82
+#: siglist.c:83
 msgid "Floating point exception"
 msgstr "Lebegőpontos kivétel"
 
-#: siglist.c:86
+#: siglist.c:87
 msgid "Killed"
 msgstr "Kilőve"
 
-#: siglist.c:90
+#: siglist.c:91
 msgid "Bus error"
 msgstr "Buszhiba"
 
-#: siglist.c:94
+#: siglist.c:95
 msgid "Segmentation fault"
 msgstr "Szegmenshiba"
 
-#: siglist.c:98
+#: siglist.c:99
 msgid "Bad system call"
 msgstr "Rossz rendszerhívás"
 
-#: siglist.c:102
+#: siglist.c:103
 msgid "Broken pipe"
 msgstr "Törött csővezeték"
 
-#: siglist.c:106
+#: siglist.c:107
 msgid "Alarm clock"
 msgstr "Ébresztés"
 
-#: siglist.c:110
+#: siglist.c:111
 msgid "Terminated"
 msgstr "Befejezve"
 
-#: siglist.c:114
+#: siglist.c:115
 msgid "Urgent IO condition"
 msgstr "Sürgős IO körülmény"
 
-#: siglist.c:118
+#: siglist.c:119
 msgid "Stopped (signal)"
 msgstr "Megállítva (szignál)"
 
-#: siglist.c:126
+#: siglist.c:127
 msgid "Continue"
 msgstr "Folytatás"
 
-#: siglist.c:134
+#: siglist.c:135
 msgid "Child death or stop"
 msgstr "Gyermek halála vagy megállítása"
 
-#: siglist.c:138
+#: siglist.c:139
 msgid "Stopped (tty input)"
 msgstr "Megállítva (konzolbemenet)"
 
-#: siglist.c:142
+#: siglist.c:143
 msgid "Stopped (tty output)"
 msgstr "Megállítva (konzolkimenet)"
 
-#: siglist.c:146
+#: siglist.c:147
 msgid "I/O ready"
 msgstr "IO kész"
 
-#: siglist.c:150
+#: siglist.c:151
 msgid "CPU limit"
 msgstr "CPU-korlátozás"
 
-#: siglist.c:154
+#: siglist.c:155
 msgid "File limit"
 msgstr "Fájlkorlátozás"
 
-#: siglist.c:158
+#: siglist.c:159
 msgid "Alarm (virtual)"
 msgstr "Ébresztés (virtuális)"
 
-#: siglist.c:162
+#: siglist.c:163
 msgid "Alarm (profile)"
 msgstr "Ébresztés (profilozás)"
 
-#: siglist.c:166
+#: siglist.c:167
 msgid "Window changed"
 msgstr "Ablak változott"
 
-#: siglist.c:170
+#: siglist.c:171
 msgid "Record lock"
 msgstr "Elveszett zárolás"
 
-#: siglist.c:174
+#: siglist.c:175
 msgid "User signal 1"
 msgstr "Felhasználói 1."
 
-#: siglist.c:178
+#: siglist.c:179
 msgid "User signal 2"
 msgstr "Felhasználói 2."
 
-#: siglist.c:182
+#: siglist.c:183
 msgid "HFT input data pending"
 msgstr "HFT bemeneti adat vár"
 
-#: siglist.c:186
+#: siglist.c:187
 msgid "power failure imminent"
 msgstr "táphiba fenyeget"
 
-#: siglist.c:190
+#: siglist.c:191
 msgid "system crash imminent"
 msgstr "rendszerleállás fenyeget"
 
-#: siglist.c:194
+#: siglist.c:195
 msgid "migrate process to another CPU"
 msgstr "folyamat átvitele másik CPU-ra"
 
-#: siglist.c:198
+#: siglist.c:199
 msgid "programming error"
 msgstr "programozási hiba"
 
-#: siglist.c:202
+#: siglist.c:203
 msgid "HFT monitor mode granted"
 msgstr "HFT monitor mód megadva"
 
-#: siglist.c:206
+#: siglist.c:207
 msgid "HFT monitor mode retracted"
 msgstr "HFT monitor mód visszavonva"
 
-#: siglist.c:210
+#: siglist.c:211
 msgid "HFT sound sequence has completed"
 msgstr "HFT hangfolyamat befejezve"
 
-#: siglist.c:214
+#: siglist.c:215
 msgid "Information request"
 msgstr "Információkérés"
 
-#: siglist.c:222 siglist.c:224
+#: siglist.c:223 siglist.c:225
 #, c-format
 msgid "Unknown Signal #%d"
 msgstr "%d. számú ismeretlen szignál"
 
-#: subst.c:1476 subst.c:1666
+#: subst.c:1480 subst.c:1670
 #, c-format
 msgid "bad substitution: no closing `%s' in %s"
 msgstr "hibás helyettesítés: nincs záró „%s” a következőben: %s"
 
-#: subst.c:3281
+#: subst.c:3307
 #, c-format
 msgid "%s: cannot assign list to array member"
 msgstr "%s: lista nem adható tömbelemnek értékül"
 
-#: subst.c:5910 subst.c:5926
+#: subst.c:6048 subst.c:6064
 msgid "cannot make pipe for process substitution"
 msgstr "nem hozható létre a csővezeték a folyamatbehelyettesítéshez"
 
-#: subst.c:5985
+#: subst.c:6124
 msgid "cannot make child for process substitution"
 msgstr "nem hozható létre a gyermek a folyamatbehelyettesítéshez"
 
-#: subst.c:6059
+#: subst.c:6198
 #, c-format
 msgid "cannot open named pipe %s for reading"
 msgstr "nem nyitható meg olvasásra a(z) %s csővezeték"
 
-#: subst.c:6061
+#: subst.c:6200
 #, c-format
 msgid "cannot open named pipe %s for writing"
 msgstr "nem nyitható meg írásra a(z) %s csővezeték"
 
-#: subst.c:6084
+#: subst.c:6223
 #, c-format
 msgid "cannot duplicate named pipe %s as fd %d"
 msgstr "nem duplikálható a(z) %s csővezeték %d. fájlleíróként"
 
-#: subst.c:6213
+#: subst.c:6370
 msgid "command substitution: ignored null byte in input"
 msgstr "parancshelyettesítés: figyelmen kívül hagyott null bájt a bemeneten"
 
-#: subst.c:6353
+#: subst.c:6533
 msgid "cannot make pipe for command substitution"
 msgstr "nem hozható létre csővezeték a parancsbehelyettesítéshez"
 
-#: subst.c:6397
+#: subst.c:6580
 msgid "cannot make child for command substitution"
 msgstr "nem hozható létre gyermek a parancsbehelyettesítéshez"
 
-#: subst.c:6423
+#: subst.c:6613
 msgid "command_substitute: cannot duplicate pipe as fd 1"
 msgstr "command_substitute: nem duplikálható a csővezeték 1. fájlleíróként"
 
-#: subst.c:6883 subst.c:9952
+#: subst.c:7082 subst.c:10252
 #, c-format
 msgid "%s: invalid variable name for name reference"
 msgstr "%s: érvénytelen változóérték a névhivatkozáshoz"
 
-#: subst.c:6979 subst.c:6997 subst.c:7169
+#: subst.c:7178 subst.c:7196 subst.c:7369
 #, c-format
 msgid "%s: invalid indirect expansion"
 msgstr "%s: az indirekt kiegészítés érvénytelen"
 
-#: subst.c:7013 subst.c:7177
+#: subst.c:7212 subst.c:7377
 #, c-format
 msgid "%s: invalid variable name"
 msgstr "%s: érvénytelen változónév"
 
-#: subst.c:7256
+#: subst.c:7478
 #, c-format
 msgid "%s: parameter not set"
 msgstr "%s: a paraméter nincs beállítva"
 
-#: subst.c:7258
+#: subst.c:7480
 #, c-format
 msgid "%s: parameter null or not set"
 msgstr "%s: a paraméter null vagy nincs beállítva"
 
-#: subst.c:7503 subst.c:7518
+#: subst.c:7727 subst.c:7742
 #, c-format
 msgid "%s: substring expression < 0"
 msgstr "%s: részkarakterlánc-kifejezés < 0"
 
-#: subst.c:9281 subst.c:9302
+#: subst.c:9560 subst.c:9587
 #, c-format
 msgid "%s: bad substitution"
 msgstr "%s: rossz helyettesítés"
 
-#: subst.c:9390
+#: subst.c:9678
 #, c-format
 msgid "$%s: cannot assign in this way"
 msgstr "$%s: nem lehet így értéket adni"
 
-#: subst.c:9814
+#: subst.c:10111
 msgid ""
 "future versions of the shell will force evaluation as an arithmetic "
 "substitution"
@@ -2055,12 +2065,12 @@ msgstr ""
 "a parancsértelmező későbbi verziói kötelezővé teszik majd az aritmetikai "
 "kiértékelést"
 
-#: subst.c:10367
+#: subst.c:10795
 #, c-format
 msgid "bad substitution: no closing \"`\" in %s"
 msgstr "hibás helyettesítés: nincs záró „`” a következőben: %s"
 
-#: subst.c:11434
+#: subst.c:11874
 #, c-format
 msgid "no match: %s"
 msgstr "nincs találat: %s"
@@ -2083,21 +2093,21 @@ msgstr "„)” szükséges"
 msgid "`)' expected, found %s"
 msgstr "„)” szükséges %s helyett"
 
-#: test.c:466 test.c:799
+#: test.c:469 test.c:814
 #, c-format
 msgid "%s: binary operator expected"
 msgstr "%s: kétoperandusú operátor szükséges"
 
-#: test.c:756 test.c:759
+#: test.c:771 test.c:774
 #, c-format
 msgid "%s: unary operator expected"
 msgstr "%s: egyoperandusú operátor szükséges"
 
-#: test.c:881
+#: test.c:896
 msgid "missing `]'"
 msgstr "hiányzó „]”"
 
-#: test.c:899
+#: test.c:914
 #, fuzzy, c-format
 msgid "syntax error: `%s' unexpected"
 msgstr "szintaktikai hiba: váratlan „;”"
@@ -2106,101 +2116,106 @@ msgstr "szintaktikai hiba: váratlan „;”"
 msgid "invalid signal number"
 msgstr "érvénytelen szignálszám"
 
-#: trap.c:325
+#: trap.c:323
 #, c-format
 msgid "trap handler: maximum trap handler level exceeded (%d)"
 msgstr "elfogáskezelő: a legnagyobb elfogáskezelő-szint túllépve (%d)"
 
-#: trap.c:414
+#: trap.c:412
 #, c-format
 msgid "run_pending_traps: bad value in trap_list[%d]: %p"
 msgstr "run_pending_traps: rossz érték a trap_list[%d]-ban: %p"
 
-#: trap.c:418
+#: trap.c:416
 #, c-format
 msgid ""
 "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
 msgstr ""
 "run_pending_traps: szignálkezelő a SIG_DFL, %d (%s) újraküldése önmagunknak"
 
-#: trap.c:487
+#: trap.c:509
 #, c-format
 msgid "trap_handler: bad signal %d"
 msgstr "trap_handler: rossz szignál: %d"
 
-#: variables.c:421
+#: variables.c:424
 #, c-format
 msgid "error importing function definition for `%s'"
 msgstr "hiba a függvénydefiníció betöltésekor: „%s”"
 
-#: variables.c:833
+#: variables.c:838
 #, c-format
 msgid "shell level (%d) too high, resetting to 1"
 msgstr "a parancsértelmező szintje (%d) túl magas, visszaállítás 1-re"
 
-#: variables.c:2674
+#: variables.c:2642
 msgid "make_local_variable: no function context at current scope"
 msgstr "make_local_variable: nincs függvénykörnyezet az aktuális látókörben"
 
-#: variables.c:2693
+#: variables.c:2661
 #, c-format
 msgid "%s: variable may not be assigned value"
 msgstr "%s: nem lehet a változóhoz értéket rendelni"
 
-#: variables.c:3475
+#: variables.c:2818 variables.c:2874
+#, c-format
+msgid "%s: cannot inherit value from incompatible type"
+msgstr ""
+
+#: variables.c:3459
 #, c-format
 msgid "%s: assigning integer to name reference"
 msgstr "%s: egész szám hozzárendelése a névhivatkozáshoz"
 
-#: variables.c:4404
+#: variables.c:4390
 msgid "all_local_variables: no function context at current scope"
 msgstr "all_local_variables: nincs függvénykörnyezet az aktuális látókörben"
 
-#: variables.c:4771
+#: variables.c:4757
 #, c-format
 msgid "%s has null exportstr"
 msgstr "%s exportstr-je null"
 
-#: variables.c:4776 variables.c:4785
+#: variables.c:4762 variables.c:4771
 #, c-format
 msgid "invalid character %d in exportstr for %s"
 msgstr "érvénytelen karakter (%d) %s exportstr-jében"
 
-#: variables.c:4791
+#: variables.c:4777
 #, c-format
 msgid "no `=' in exportstr for %s"
 msgstr "nincs „=” %s exportstr-jében"
 
-#: variables.c:5331
+#: variables.c:5317
 msgid "pop_var_context: head of shell_variables not a function context"
 msgstr "pop_var_context: shell_variables feje nem egy függvénykörnyezet"
 
-#: variables.c:5344
+#: variables.c:5330
 msgid "pop_var_context: no global_variables context"
 msgstr "pop_var_context: nincs global_variables környezet"
 
-#: variables.c:5424
+#: variables.c:5410
 msgid "pop_scope: head of shell_variables not a temporary environment scope"
 msgstr "pop_scope: shell_variables feje nem egy átmeneti környezeti látókör"
 
-#: variables.c:6387
+#: variables.c:6400
 #, c-format
 msgid "%s: %s: cannot open as FILE"
 msgstr "%s: %s: nem nyitható meg FILE-ként"
 
-#: variables.c:6392
+#: variables.c:6405
 #, c-format
 msgid "%s: %s: invalid value for trace file descriptor"
 msgstr "%s: %s: érvénytelen érték a trace fájlleíróhoz"
 
-#: variables.c:6437
+#: variables.c:6450
 #, c-format
 msgid "%s: %s: compatibility value out of range"
 msgstr "%s: %s: a kompatibilitási érték kívül esik a tartományon"
 
 #: version.c:46 version2.c:46
 #, fuzzy
-msgid "Copyright (C) 2020 Free Software Foundation, Inc."
+msgid "Copyright (C) 2022 Free Software Foundation, Inc."
 msgstr "Copyright (C) 2018 Free Software Foundation, Inc."
 
 #: version.c:47 version2.c:47
@@ -2291,12 +2306,16 @@ msgstr "command [-pVv] parancs [arg ...]"
 
 #: builtins.c:78
 #, fuzzy
-msgid "declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]"
+msgid ""
+"declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] "
+"[name ...]"
 msgstr "declare [-aAfFgilnrtux] [-p] [név[=érték] ...]"
 
 #: builtins.c:80
 #, fuzzy
-msgid "typeset [-aAfFgiIlnrtux] [-p] name[=value] ..."
+msgid ""
+"typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] "
+"[name ...]"
 msgstr "typeset [-aAfFgilnrtux] [-p] név[=érték] ..."
 
 #: builtins.c:82
@@ -2399,7 +2418,8 @@ msgid "return [n]"
 msgstr "return [n]"
 
 #: builtins.c:142
-msgid "set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]"
+#, fuzzy
+msgid "set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]"
 msgstr "set [--abefhkmnptuvxBCHP] [-o beállításnév] [--] [arg ...]"
 
 #: builtins.c:144
@@ -2447,7 +2467,8 @@ msgid "type [-afptP] name [name ...]"
 msgstr "type [-afptP] név [név ...]"
 
 #: builtins.c:171
-msgid "ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]"
+#, fuzzy
+msgid "ulimit [-SHabcdefiklmnpqrstuvxPRT] [limit]"
 msgstr "ulimit [-SHabcdefiklmnpqrstuvxPT] [korlát]"
 
 #: builtins.c:174
@@ -2492,11 +2513,13 @@ msgstr ""
 "PARANCSOK; ] fi"
 
 #: builtins.c:196
-msgid "while COMMANDS; do COMMANDS; done"
+#, fuzzy
+msgid "while COMMANDS; do COMMANDS-2; done"
 msgstr "while PARANCSOK; do PARANCSOK; done"
 
 #: builtins.c:198
-msgid "until COMMANDS; do COMMANDS; done"
+#, fuzzy
+msgid "until COMMANDS; do COMMANDS-2; done"
 msgstr "until PARANCSOK; do PARANCSOK; done"
 
 #: builtins.c:200
@@ -3883,6 +3906,7 @@ msgstr ""
 "    Ha az utolsó argumentum 0, a let 1-gyel tér vissza, különben 0-val."
 
 #: builtins.c:994
+#, fuzzy
 msgid ""
 "Read a line from the standard input and split it into fields.\n"
 "    \n"
@@ -3893,7 +3917,9 @@ msgid ""
 "    word to the second NAME, and so on, with any leftover words assigned to\n"
 "    the last NAME.  Only the characters found in $IFS are recognized as "
 "word\n"
-"    delimiters.\n"
+"    delimiters. By default, the backslash character escapes delimiter "
+"characters\n"
+"    and newline.\n"
 "    \n"
 "    If no NAMEs are supplied, the line read is stored in the REPLY "
 "variable.\n"
@@ -3971,7 +3997,7 @@ msgstr ""
 "    A kilépési kód nulla, kivéve ha EOF-ot ér a beolvasás, időtúllépéskor\n"
 "    (ekkor > 128) vagy érvénytelen fájlleíró megadásakor a -u kapcsolónak."
 
-#: builtins.c:1041
+#: builtins.c:1042
 msgid ""
 "Return from a shell function.\n"
 "    \n"
@@ -3993,7 +4019,7 @@ msgstr ""
 "    N-nel tér vissza, kivéve ha nem függvényből vagy parancsfájlból akar\n"
 "    visszatérni – ekkor sikertelenséget jelez."
 
-#: builtins.c:1054
+#: builtins.c:1055
 msgid ""
 "Set or unset values of shell options and positional parameters.\n"
 "    \n"
@@ -4163,7 +4189,7 @@ msgstr ""
 "    Kilépési kód:\n"
 "    Sikerrel tér vissza, kivéve ha érvénytelen kapcsolót kap."
 
-#: builtins.c:1139
+#: builtins.c:1140
 msgid ""
 "Unset values and attributes of shell variables and functions.\n"
 "    \n"
@@ -4205,7 +4231,7 @@ msgstr ""
 "    Sikerrel tér vissza, kivéve ha hibás kapcsolót kap, vagy egy NÉV csak\n"
 "    olvasható."
 
-#: builtins.c:1161
+#: builtins.c:1162
 msgid ""
 "Set export attribute for shell variables.\n"
 "    \n"
@@ -4239,7 +4265,7 @@ msgstr ""
 "    Kilépési kód:\n"
 "    Sikerrel tér vissza, kivéve ha érvénytelen kapcsolót vagy NEVET kap."
 
-#: builtins.c:1180
+#: builtins.c:1181
 msgid ""
 "Mark shell variables as unchangeable.\n"
 "    \n"
@@ -4277,7 +4303,7 @@ msgstr ""
 "    Kilépési kód:\n"
 "    Sikerrel tér vissza, kivéve ha érvénytelen kapcsolót vagy NEVET kap."
 
-#: builtins.c:1202
+#: builtins.c:1203
 msgid ""
 "Shift positional parameters.\n"
 "    \n"
@@ -4295,7 +4321,7 @@ msgstr ""
 "    Kilépési kód:\n"
 "    Sikerrel tér vissza, kivéve ha N negatív vagy nagyobb mint $#."
 
-#: builtins.c:1214 builtins.c:1229
+#: builtins.c:1215 builtins.c:1230
 msgid ""
 "Execute commands from a file in the current shell.\n"
 "    \n"
@@ -4320,7 +4346,7 @@ msgstr ""
 "sikertelenül,\n"
 "    ha a FÁJLNÉV nem olvasható."
 
-#: builtins.c:1245
+#: builtins.c:1246
 msgid ""
 "Suspend shell execution.\n"
 "    \n"
@@ -4346,7 +4372,7 @@ msgstr ""
 "    Sikerrel tér vissza, kivéve ha a munkakezelés nem támogatott vagy hiba\n"
 "    történt."
 
-#: builtins.c:1261
+#: builtins.c:1262
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -4507,7 +4533,7 @@ msgstr ""
 "vagy\n"
 "    érvénytelen argumentumokat kap."
 
-#: builtins.c:1343
+#: builtins.c:1344
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -4519,7 +4545,7 @@ msgstr ""
 "    Ez a „test” beépített parancs szinonimája, de annyiban eltér tőle,\n"
 "    hogy az utolsó argumentuma „]” kell legyen – a nyitó „]”-lel összhangban."
 
-#: builtins.c:1352
+#: builtins.c:1353
 msgid ""
 "Display process times.\n"
 "    \n"
@@ -4538,7 +4564,7 @@ msgstr ""
 "    Kilépési kód:\n"
 "    Mindig sikeres."
 
-#: builtins.c:1364
+#: builtins.c:1365
 msgid ""
 "Trap signals and other events.\n"
 "    \n"
@@ -4621,7 +4647,7 @@ msgstr ""
 "    Sikerrel tér vissza, kivéve ha a SZIGNÁL érvénytelen, vagy érvénytelen\n"
 "    kapcsolót kap."
 
-#: builtins.c:1400
+#: builtins.c:1401
 msgid ""
 "Display information about command type.\n"
 "    \n"
@@ -4673,7 +4699,7 @@ msgstr ""
 "    Kilépési kód:\n"
 "    Sikerrel lép ki, ha minden NÉV megtalálható, sikertelenül, ha nem."
 
-#: builtins.c:1431
+#: builtins.c:1432
 #, fuzzy
 msgid ""
 "Modify shell resource limits.\n"
@@ -4770,7 +4796,7 @@ msgstr ""
 "    Kilépési kód:\n"
 "    Sikerrel tér vissza, kivéve érvénytelen kapcsoló vagy hiba esetében."
 
-#: builtins.c:1482
+#: builtins.c:1483
 msgid ""
 "Display or set file mode mask.\n"
 "    \n"
@@ -4806,7 +4832,7 @@ msgstr ""
 "    Kilépési kód:\n"
 "    Sikerrel lép ki, kivéve ha a MÓD vagy egy kapcsoló érvénytelen."
 
-#: builtins.c:1502
+#: builtins.c:1503
 #, fuzzy
 msgid ""
 "Wait for job completion and return exit status.\n"
@@ -4858,7 +4884,7 @@ msgstr ""
 "    ID kilépési kódjával tér vissza; érvénytelen ID vagy kapcsoló esetén\n"
 "    sikertelenül."
 
-#: builtins.c:1533
+#: builtins.c:1534
 msgid ""
 "Wait for process completion and return exit status.\n"
 "    \n"
@@ -4883,7 +4909,7 @@ msgstr ""
 "kapcsoló\n"
 "    esetén sikertelenül."
 
-#: builtins.c:1548
+#: builtins.c:1549
 msgid ""
 "Execute commands for each member in a list.\n"
 "    \n"
@@ -4905,7 +4931,7 @@ msgstr ""
 "    Kilépési kód:\n"
 "    Az utolsó parancs kilépési kódját adja vissza."
 
-#: builtins.c:1562
+#: builtins.c:1563
 msgid ""
 "Arithmetic for loop.\n"
 "    \n"
@@ -4936,7 +4962,7 @@ msgstr ""
 "    Kilépési kód:\n"
 "    Az utolsó parancs kilépési kódját adja."
 
-#: builtins.c:1580
+#: builtins.c:1581
 msgid ""
 "Select words from a list and execute commands.\n"
 "    \n"
@@ -4972,7 +4998,7 @@ msgstr ""
 "    Kilépési kód:\n"
 "    Az utolsó parancs kilépési kódját adja vissza."
 
-#: builtins.c:1601
+#: builtins.c:1602
 msgid ""
 "Report time consumed by pipeline's execution.\n"
 "    \n"
@@ -5002,7 +5028,7 @@ msgstr ""
 "    Kilépési kód:\n"
 "    A kilépési kód a CSŐVEZETÉK kilépési kódja lesz."
 
-#: builtins.c:1618
+#: builtins.c:1619
 msgid ""
 "Execute commands based on pattern matching.\n"
 "    \n"
@@ -5022,7 +5048,7 @@ msgstr ""
 "    Kilépési kód:\n"
 "    Az utolsó parancs kilépési kódját adja vissza."
 
-#: builtins.c:1630
+#: builtins.c:1631
 msgid ""
 "Execute commands based on conditional.\n"
 "    \n"
@@ -5055,12 +5081,14 @@ msgstr ""
 "    Kilépési kód:\n"
 "    Az utoljára végrehajtott parancs kilépési kódja."
 
-#: builtins.c:1647
+#: builtins.c:1648
+#, fuzzy
 msgid ""
 "Execute commands as long as a test succeeds.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `while' COMMANDS has an exit status of zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS "
+"has\n"
+"    an exit status of zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
@@ -5074,12 +5102,14 @@ msgstr ""
 "    Kilépési kód:\n"
 "    Az utolsónak végrehajtott parancs kilépési kódja."
 
-#: builtins.c:1659
+#: builtins.c:1660
+#, fuzzy
 msgid ""
 "Execute commands as long as a test does not succeed.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `until' COMMANDS has an exit status which is not zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS "
+"has\n"
+"    an exit status which is not zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
@@ -5093,7 +5123,7 @@ msgstr ""
 "    Kilépési kód:\n"
 "    Az utolsónak végrehajtott parancs kilépési kódja."
 
-#: builtins.c:1671
+#: builtins.c:1672
 msgid ""
 "Create a coprocess named NAME.\n"
 "    \n"
@@ -5115,7 +5145,7 @@ msgstr ""
 "    Kilépési kód:\n"
 "    A coproc parancs 0-s kilépési kóddal tér vissza."
 
-#: builtins.c:1685
+#: builtins.c:1686
 msgid ""
 "Define shell function.\n"
 "    \n"
@@ -5139,7 +5169,7 @@ msgstr ""
 "    Kilépési kód:\n"
 "    Sikerrel tér vissza, kivéve ha a NÉV csak olvasható."
 
-#: builtins.c:1699
+#: builtins.c:1700
 msgid ""
 "Group commands as a unit.\n"
 "    \n"
@@ -5157,7 +5187,7 @@ msgstr ""
 "    Kilépési kód:\n"
 "    Az utolsó parancs kilépési kódját adja vissza."
 
-#: builtins.c:1711
+#: builtins.c:1712
 msgid ""
 "Resume job in foreground.\n"
 "    \n"
@@ -5181,7 +5211,7 @@ msgstr ""
 "    Kilépési kód:\n"
 "    A visszaállított parancs kilépési kódjával lép ki."
 
-#: builtins.c:1726
+#: builtins.c:1727
 #, fuzzy
 msgid ""
 "Evaluate arithmetic expression.\n"
@@ -5200,7 +5230,7 @@ msgstr ""
 "    Kilépési kód:\n"
 "    1-gyel tér vissza, ha KIFEJEZÉS értéke 0, különben 0-val."
 
-#: builtins.c:1738
+#: builtins.c:1739
 msgid ""
 "Execute conditional command.\n"
 "    \n"
@@ -5249,7 +5279,7 @@ msgstr ""
 "    Kilépési kód:\n"
 "    0 vagy 1 a KIFEJEZÉSTŐL függően."
 
-#: builtins.c:1764
+#: builtins.c:1765
 msgid ""
 "Common shell variable names and usage.\n"
 "    \n"
@@ -5350,7 +5380,7 @@ msgstr ""
 "    HISTIGNORE\tKettőspontokkal elválasztott mintalista, amely mintákra\n"
 "    \t\tilleszkedő parancsok nem kerülnek az előzmények közé\n"
 
-#: builtins.c:1821
+#: builtins.c:1822
 msgid ""
 "Add directories to stack.\n"
 "    \n"
@@ -5408,7 +5438,7 @@ msgstr ""
 "    Sikerrel tér vissza, kivéve érvénytelen argumentum vagy könyvtárváltás\n"
 "    során történő hiba esetén."
 
-#: builtins.c:1855
+#: builtins.c:1856
 msgid ""
 "Remove directories from stack.\n"
 "    \n"
@@ -5457,7 +5487,7 @@ msgstr ""
 "    Sikerrel tér vissza, kivéve érvénytelen argumentum vagy könyvtárváltás\n"
 "    során történő hiba esetén."
 
-#: builtins.c:1885
+#: builtins.c:1886
 msgid ""
 "Display directory stack.\n"
 "    \n"
@@ -5507,7 +5537,7 @@ msgstr ""
 "    Kilépési kód:\n"
 "    Sikerrel tér vissza, kivéve érvénytelen argumentum vagy hiba esetén."
 
-#: builtins.c:1916
+#: builtins.c:1917
 msgid ""
 "Set and unset shell options.\n"
 "    \n"
@@ -5544,7 +5574,8 @@ msgstr ""
 "    Sikerrel tér vissza, ha az OPTNÉV engedélyezve van; sikertelenül, ha\n"
 "    hibás kapcsolókat kap vagy az OPTNÉV tiltva van."
 
-#: builtins.c:1937
+#: builtins.c:1938
+#, fuzzy
 msgid ""
 "Formats and prints ARGUMENTS under control of the FORMAT.\n"
 "    \n"
@@ -5567,6 +5598,8 @@ msgid ""
 "    \n"
 "      %b\texpand backslash escape sequences in the corresponding argument\n"
 "      %q\tquote the argument in a way that can be reused as shell input\n"
+"      %Q\tlike %q, but apply any precision to the unquoted argument before\n"
+"    \t\tquoting\n"
 "      %(fmt)T\toutput the date-time string resulting from using FMT as a "
 "format\n"
 "    \t        string for strftime(3)\n"
@@ -5614,7 +5647,7 @@ msgstr ""
 "    Sikerrel tér vissza, kivéve ha hibás kapcsolókat kap, vagy az írás/\n"
 "    értékadás hibával járt."
 
-#: builtins.c:1971
+#: builtins.c:1974
 #, fuzzy
 msgid ""
 "Specify how arguments are to be completed by Readline.\n"
@@ -5670,7 +5703,7 @@ msgstr ""
 "    Kilépési kód:\n"
 "    Sikerrel tér vissza, kivéve érvénytelen kapcsoló és hiba esetén."
 
-#: builtins.c:2001
+#: builtins.c:2004
 msgid ""
 "Display possible completions depending on the options.\n"
 "    \n"
@@ -5692,7 +5725,7 @@ msgstr ""
 "    Kilépési kód:\n"
 "    Sikerrel lép ki, kivéve érvénytelen kapcsoló vagy hiba esetén."
 
-#: builtins.c:2016
+#: builtins.c:2019
 msgid ""
 "Modify or display completion options.\n"
 "    \n"
@@ -5751,7 +5784,7 @@ msgstr ""
 "nincs\n"
 "    még megadva."
 
-#: builtins.c:2047
+#: builtins.c:2050
 msgid ""
 "Read lines from the standard input into an indexed array variable.\n"
 "    \n"
@@ -5823,7 +5856,7 @@ msgstr ""
 "    Sikerrel tér vissza, kivéve érvénytelen kapcsoló vagy csak olvasható,\n"
 "    vagy nem indexelt TÖMB megadása esetén."
 
-#: builtins.c:2083
+#: builtins.c:2086
 msgid ""
 "Read lines from a file into an array variable.\n"
 "    \n"
@@ -5833,6 +5866,10 @@ msgstr ""
 "    \n"
 "    A „mapfile” szinonimája."
 
+#, c-format
+#~ msgid "%s: invalid associative array key"
+#~ msgstr "%s: érvénytelen asszociatívtömb-index"
+
 # see $ help caller
 #~ msgid ""
 #~ "Returns the context of the current subroutine call.\n"
index 61f53205e035b064b6f4360f0c7d18e42cc7751f..ca3c6febf0d08170cca3f5af811b33222e98996d 100644 (file)
Binary files a/po/id.gmo and b/po/id.gmo differ
index b0c244e4bbc61cfe35f3c717b82623ff20b07693..272e14310eb0352e5399be4dda58f39dfa1edad8 100644 (file)
--- a/po/id.po
+++ b/po/id.po
@@ -1,14 +1,14 @@
 # Pesan Bahasa Indonesia untuk bash
 # Copyright (C) 2008 Free Software Foundation, Inc.
 # This file is distributed under the same license as the bash package.
-# Arif E. Nugroho <arif_endro@yahoo.com>, 2008, 2009, 2010, 2011, 2012, 2013, 2014.
+# Arif E. Nugroho <arif_endro@yahoo.com>, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: bash 4.3-rc2\n"
+"Project-Id-Version: bash 5.1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-11-28 12:51-0500\n"
-"PO-Revision-Date: 2014-08-06 12:45+0700\n"
+"POT-Creation-Date: 2022-01-11 14:50-0500\n"
+"PO-Revision-Date: 2021-09-17 19:30+0700\n"
 "Last-Translator: Arif E. Nugroho <arif_endro@yahoo.com>\n"
 "Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>\n"
 "Language: id\n"
@@ -22,60 +22,55 @@ msgstr ""
 msgid "bad array subscript"
 msgstr "array subscript buruk"
 
-#: arrayfunc.c:421 builtins/declare.def:638 variables.c:2274 variables.c:2300
-#: variables.c:3133
+#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268
+#: variables.c:3101
 #, c-format
 msgid "%s: removing nameref attribute"
-msgstr ""
+msgstr "%s: menghapus atribut nameref"
 
-#: arrayfunc.c:446 builtins/declare.def:851
+#: arrayfunc.c:496 builtins/declare.def:868
 #, c-format
 msgid "%s: cannot convert indexed to associative array"
 msgstr "%s: tidak dapat mengubah index ke array yang berassosiasi"
 
-#: arrayfunc.c:700
-#, c-format
-msgid "%s: invalid associative array key"
-msgstr "%s: kunci array assosiasi tidak valid"
-
-#: arrayfunc.c:702
+#: arrayfunc.c:777
 #, c-format
 msgid "%s: cannot assign to non-numeric index"
 msgstr "%s: tidak dapat mengassign ke index tidak-numeric"
 
-#: arrayfunc.c:747
+#: arrayfunc.c:822
 #, c-format
 msgid "%s: %s: must use subscript when assigning associative array"
 msgstr "%s: %s: harus menggunakan subscript ketika memberikan assosiasi array"
 
-#: bashhist.c:452
+#: bashhist.c:455
 #, c-format
 msgid "%s: cannot create: %s"
 msgstr "%s: tidak dapat membuat: %s"
 
-#: bashline.c:4310
+#: bashline.c:4479
 msgid "bash_execute_unix_command: cannot find keymap for command"
 msgstr "bash_execute_unix_command: tidak dapat menemukan keymap untuk perintah"
 
-#: bashline.c:4459
+#: bashline.c:4637
 #, c-format
 msgid "%s: first non-whitespace character is not `\"'"
 msgstr "%s: bukan karakter whitespace (spasi) pertama ditemukan `\"'"
 
-#: bashline.c:4488
+#: bashline.c:4666
 #, c-format
 msgid "no closing `%c' in %s"
 msgstr "tidak menutup '%c' dalam %s"
 
-#: bashline.c:4519
+#: bashline.c:4697
 #, c-format
 msgid "%s: missing colon separator"
 msgstr "%s: hilang pemisah colon"
 
-#: bashline.c:4555
-#, fuzzy, c-format
+#: bashline.c:4733
+#, c-format
 msgid "`%s': cannot unbind in command keymap"
-msgstr "'%s': tidak dapat melepaskan"
+msgstr "'%s': tidak dapat melepaskan dalam peta perintah"
 
 #: braces.c:327
 #, c-format
@@ -83,16 +78,16 @@ msgid "brace expansion: cannot allocate memory for %s"
 msgstr "brace expansion: cannot allocate memory for %s"
 
 #: braces.c:406
-#, fuzzy, c-format
+#, c-format
 msgid "brace expansion: failed to allocate memory for %u elements"
-msgstr "brace expansion: failed to allocate memory for %d elements"
+msgstr "brace expansion: failed to allocate memory for %u elements"
 
 #: braces.c:451
 #, c-format
 msgid "brace expansion: failed to allocate memory for `%s'"
 msgstr "brace expansion: failed to allocate memory for `%s'"
 
-#: builtins/alias.def:131 variables.c:1844
+#: builtins/alias.def:131 variables.c:1817
 #, c-format
 msgid "`%s': invalid alias name"
 msgstr "`%s': nama alias tidak valid"
@@ -169,14 +164,13 @@ msgstr ""
 msgid "HOME not set"
 msgstr "HOME tidak diset"
 
-#: builtins/cd.def:335 builtins/common.c:161 test.c:901
+#: builtins/cd.def:335 builtins/common.c:161 test.c:916
 msgid "too many arguments"
 msgstr "terlalu banyak argumen"
 
 #: builtins/cd.def:342
-#, fuzzy
 msgid "null directory"
-msgstr "top direktori yang baru."
+msgstr "null direktori"
 
 #: builtins/cd.def:353
 msgid "OLDPWD not set"
@@ -197,7 +191,7 @@ msgstr "peringatan: "
 msgid "%s: usage: "
 msgstr "%s: penggunaan: "
 
-#: builtins/common.c:193 shell.c:516 shell.c:844
+#: builtins/common.c:193 shell.c:524 shell.c:866
 #, c-format
 msgid "%s: option requires an argument"
 msgstr "%s: pilihan membutuhkan sebuah argumen"
@@ -212,7 +206,7 @@ msgstr "%s: argumen numeric dibutuhkan"
 msgid "%s: not found"
 msgstr "%s: tidak ditemukan"
 
-#: builtins/common.c:216 shell.c:857
+#: builtins/common.c:216 shell.c:879
 #, c-format
 msgid "%s: invalid option"
 msgstr "%s: pilihan tidak valid"
@@ -222,7 +216,7 @@ msgstr "%s: pilihan tidak valid"
 msgid "%s: invalid option name"
 msgstr "%s: nama pilihan tidak valid"
 
-#: builtins/common.c:230 execute_cmd.c:2373 general.c:368 general.c:373
+#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373
 #, c-format
 msgid "`%s': not a valid identifier"
 msgstr "`%s': bukan sebuah identifier yang valid"
@@ -235,7 +229,7 @@ msgstr "nomor oktal tidak valid"
 msgid "invalid hex number"
 msgstr "nomor hexa tidak valid"
 
-#: builtins/common.c:244 expr.c:1569
+#: builtins/common.c:244 expr.c:1574
 msgid "invalid number"
 msgstr "nomor tidak valid"
 
@@ -249,88 +243,93 @@ msgstr "%s: spesifikasi sinyal tidak valid"
 msgid "`%s': not a pid or valid job spec"
 msgstr "`%s': bukan sebuah pid atau spesifikasi pekerjaan yang valid"
 
-#: builtins/common.c:266 error.c:510
+#: builtins/common.c:266 error.c:536
 #, c-format
 msgid "%s: readonly variable"
 msgstr "%s: variabel baca-saja"
 
-#: builtins/common.c:274
+#: builtins/common.c:273
+#, fuzzy, c-format
+msgid "%s: cannot assign"
+msgstr "%s: tidak dapat unset"
+
+#: builtins/common.c:281
 #, c-format
 msgid "%s: %s out of range"
 msgstr "%s: %s diluar jangkauan"
 
-#: builtins/common.c:274 builtins/common.c:276
+#: builtins/common.c:281 builtins/common.c:283
 msgid "argument"
 msgstr "argumen"
 
-#: builtins/common.c:276
+#: builtins/common.c:283
 #, c-format
 msgid "%s out of range"
 msgstr "%s diluar jangkauan"
 
-#: builtins/common.c:284
+#: builtins/common.c:291
 #, c-format
 msgid "%s: no such job"
 msgstr "%s: tidak ada pekerjaan seperti itu"
 
-#: builtins/common.c:292
+#: builtins/common.c:299
 #, c-format
 msgid "%s: no job control"
 msgstr "%s: tidak ada pengontrol kerja"
 
-#: builtins/common.c:294
+#: builtins/common.c:301
 msgid "no job control"
 msgstr "tidak ada pengontrol kerja"
 
-#: builtins/common.c:304
+#: builtins/common.c:311
 #, c-format
 msgid "%s: restricted"
 msgstr "%s: terbatas"
 
-#: builtins/common.c:306
+#: builtins/common.c:313
 msgid "restricted"
 msgstr "terbatas"
 
-#: builtins/common.c:314
+#: builtins/common.c:321
 #, c-format
 msgid "%s: not a shell builtin"
 msgstr "%s: bukan sebuah builtin shell"
 
-#: builtins/common.c:323
+#: builtins/common.c:330
 #, c-format
 msgid "write error: %s"
 msgstr "gagal menulis: %s"
 
-#: builtins/common.c:331
+#: builtins/common.c:338
 #, c-format
 msgid "error setting terminal attributes: %s"
 msgstr "error menentukan atribut terminal: %s"
 
-#: builtins/common.c:333
+#: builtins/common.c:340
 #, c-format
 msgid "error getting terminal attributes: %s"
 msgstr "error mendapatkan atribut terminal: %s"
 
-#: builtins/common.c:635
+#: builtins/common.c:642
 #, c-format
 msgid "%s: error retrieving current directory: %s: %s\n"
 msgstr "%s: error mengambil direktori saat ini: %s: %s\n"
 
-#: builtins/common.c:701 builtins/common.c:703
+#: builtins/common.c:708 builtins/common.c:710
 #, c-format
 msgid "%s: ambiguous job spec"
 msgstr "%s: spesifikasi pekerjaan ambigu"
 
-#: builtins/common.c:964
+#: builtins/common.c:971
 msgid "help not available in this version"
-msgstr ""
+msgstr "bantuan tidak tersedia di versi ini"
 
-#: builtins/common.c:1008 builtins/set.def:953 variables.c:3839
+#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825
 #, c-format
 msgid "%s: cannot unset: readonly %s"
 msgstr "%s: tidak dapat unset: baca-saja %s"
 
-#: builtins/common.c:1013 builtins/set.def:932 variables.c:3844
+#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830
 #, c-format
 msgid "%s: cannot unset"
 msgstr "%s: tidak dapat unset"
@@ -340,110 +339,110 @@ msgstr "%s: tidak dapat unset"
 msgid "%s: invalid action name"
 msgstr "%s: nama aksi tidak valid"
 
-#: builtins/complete.def:486 builtins/complete.def:634
-#: builtins/complete.def:865
+#: builtins/complete.def:486 builtins/complete.def:642
+#: builtins/complete.def:873
 #, c-format
 msgid "%s: no completion specification"
 msgstr "%s: tidak ada spesifikasi completion"
 
-#: builtins/complete.def:688
+#: builtins/complete.def:696
 msgid "warning: -F option may not work as you expect"
 msgstr ""
 "peringatan: pilihan -F mungkin tidak bekerja seperti yang anda harapkan"
 
-#: builtins/complete.def:690
+#: builtins/complete.def:698
 msgid "warning: -C option may not work as you expect"
 msgstr ""
 "peringatan: pilihan -C mungkin tidak bekerja seperti yang anda harapkan"
 
-#: builtins/complete.def:838
+#: builtins/complete.def:846
 msgid "not currently executing completion function"
 msgstr "saat ini sedang tidak menjalankan fungsi completion"
 
-#: builtins/declare.def:134
+#: builtins/declare.def:137
 msgid "can only be used in a function"
 msgstr "hanya dapat digunakan dalam sebuah fungsi"
 
-#: builtins/declare.def:363 builtins/declare.def:756
+#: builtins/declare.def:437
+msgid "cannot use `-f' to make functions"
+msgstr "tidak dapat menggunakan `-f' untuk membuat fungsi"
+
+#: builtins/declare.def:464 execute_cmd.c:6132
+#, c-format
+msgid "%s: readonly function"
+msgstr "%s: fungsi baca-saja"
+
+#: builtins/declare.def:521 builtins/declare.def:804
 #, c-format
 msgid "%s: reference variable cannot be an array"
 msgstr "%s: reference variable cannot be an array"
 
-#: builtins/declare.def:374 variables.c:3385
+#: builtins/declare.def:532 variables.c:3359
 #, c-format
 msgid "%s: nameref variable self references not allowed"
 msgstr "%s: nameref variable self references not allowed"
 
-#: builtins/declare.def:379 variables.c:2104 variables.c:3304 variables.c:3312
-#: variables.c:3382
+#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286
+#: variables.c:3356
 #, c-format
 msgid "%s: circular name reference"
 msgstr "%s: circular name reference"
 
-#: builtins/declare.def:384 builtins/declare.def:762 builtins/declare.def:773
-#, fuzzy, c-format
-msgid "`%s': invalid variable name for name reference"
-msgstr "%s: nilai dari berkas pendeskripsi penelusur tidak valid"
-
-#: builtins/declare.def:514
-msgid "cannot use `-f' to make functions"
-msgstr "tidak dapat menggunakan `-f' untuk membuat fungsi"
-
-#: builtins/declare.def:526 execute_cmd.c:5986
-#, c-format
-msgid "%s: readonly function"
-msgstr "%s: fungsi baca-saja"
-
-#: builtins/declare.def:824
+#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820
 #, c-format
-msgid "%s: quoted compound array assignment deprecated"
-msgstr ""
+msgid "`%s': invalid variable name for name reference"
+msgstr "`%s': nilai dari berkas pendeskripsi penelusur tidak valid"
 
-#: builtins/declare.def:838
+#: builtins/declare.def:856
 #, c-format
 msgid "%s: cannot destroy array variables in this way"
 msgstr "%s: tidak dapat menghapus variabel array secara ini"
 
-#: builtins/declare.def:845 builtins/read.def:815
+#: builtins/declare.def:862 builtins/read.def:887
 #, c-format
 msgid "%s: cannot convert associative to indexed array"
 msgstr "%s: tidak dapat mengubah assosiasi ke array index"
 
-#: builtins/enable.def:143 builtins/enable.def:151
+#: builtins/declare.def:891
+#, c-format
+msgid "%s: quoted compound array assignment deprecated"
+msgstr "%s: quoted compound array assignment ditinggalkan"
+
+#: builtins/enable.def:145 builtins/enable.def:153
 msgid "dynamic loading not available"
 msgstr "dynamic loading tidak tersedia"
 
-#: builtins/enable.def:343
+#: builtins/enable.def:376
 #, c-format
 msgid "cannot open shared object %s: %s"
 msgstr "tidak dapat membuka object shared %s: %s"
 
-#: builtins/enable.def:371
+#: builtins/enable.def:405
 #, c-format
 msgid "cannot find %s in shared object %s: %s"
 msgstr "tidak dapat menemukan %s dalam shared object %s: %s"
 
-#: builtins/enable.def:388
-#, fuzzy, c-format
+#: builtins/enable.def:422
+#, c-format
 msgid "%s: dynamic builtin already loaded"
-msgstr "%s: bukan dinamically loaded"
+msgstr "%s: dynamic builtin telah dimuat"
 
-#: builtins/enable.def:392
+#: builtins/enable.def:426
 #, c-format
 msgid "load function for %s returns failure (%d): not loaded"
-msgstr ""
+msgstr "muat fungsi untuk %s mengembalikan kegagalan (%d): tidak dimuat"
 
-#: builtins/enable.def:517
+#: builtins/enable.def:551
 #, c-format
 msgid "%s: not dynamically loaded"
 msgstr "%s: bukan dinamically loaded"
 
-#: builtins/enable.def:543
+#: builtins/enable.def:577
 #, c-format
 msgid "%s: cannot delete: %s"
 msgstr "%s: tidak dapat menghapus: %s"
 
-#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5818
+#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959
 #, c-format
 msgid "%s: is a directory"
 msgstr "%s: bukan sebuah direktori"
@@ -458,7 +457,7 @@ msgstr "%s: bukan sebuah file umum"
 msgid "%s: file is too large"
 msgstr "%s: file terlalu besar"
 
-#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1647
+#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673
 #, c-format
 msgid "%s: cannot execute binary file"
 msgstr "%s: tidak dapat menjalankan berkas binary"
@@ -545,6 +544,8 @@ msgid ""
 "'\n"
 "\n"
 msgstr ""
+"'\n"
+"\n"
 
 #: builtins/help.def:185
 #, c-format
@@ -554,12 +555,12 @@ msgstr ""
 "tidak ada topik bantuan yang cocok dengan `%s'. Coba `help help' atau 'man -"
 "k %s' atau `info %s'."
 
-#: builtins/help.def:224
+#: builtins/help.def:223
 #, c-format
 msgid "%s: cannot open: %s"
 msgstr "%s: tidak dapat membuka: %s"
 
-#: builtins/help.def:524
+#: builtins/help.def:523
 #, c-format
 msgid ""
 "These shell commands are defined internally.  Type `help' to see this list.\n"
@@ -582,21 +583,21 @@ msgstr ""
 "aktif.\n"
 "\n"
 
-#: builtins/history.def:155
+#: builtins/history.def:159
 msgid "cannot use more than one of -anrw"
 msgstr "tidak dapat menggunakan lebih dari satu pilihan dari -anrw"
 
-#: builtins/history.def:188 builtins/history.def:198 builtins/history.def:213
-#: builtins/history.def:230 builtins/history.def:242 builtins/history.def:249
+#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215
+#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247
 msgid "history position"
 msgstr "posisi sejarah"
 
-#: builtins/history.def:340
-#, fuzzy, c-format
+#: builtins/history.def:338
+#, c-format
 msgid "%s: invalid timestamp"
-msgstr "%s: argumen limit tidak valid"
+msgstr "%s: penanda waktu tidak valid"
 
-#: builtins/history.def:451
+#: builtins/history.def:449
 #, c-format
 msgid "%s: history expansion failed"
 msgstr "%s: expansi sejarah gagal"
@@ -619,78 +620,78 @@ msgstr "%s: argumen harus diproses atau ID pekerjaan"
 msgid "Unknown error"
 msgstr "Kesalahan tidak diketahui"
 
-#: builtins/let.def:97 builtins/let.def:122 expr.c:639 expr.c:657
+#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658
 msgid "expression expected"
 msgstr "diduga sebuah ekspresi"
 
-#: builtins/mapfile.def:178
+#: builtins/mapfile.def:180
 #, c-format
 msgid "%s: not an indexed array"
 msgstr "%s: bukan sebuah indeks array"
 
-#: builtins/mapfile.def:271 builtins/read.def:308
+#: builtins/mapfile.def:276 builtins/read.def:336
 #, c-format
 msgid "%s: invalid file descriptor specification"
 msgstr "%s: spesifikasi file deskripsi tidak valid"
 
-#: builtins/mapfile.def:279 builtins/read.def:315
+#: builtins/mapfile.def:284 builtins/read.def:343
 #, c-format
 msgid "%d: invalid file descriptor: %s"
 msgstr "%d: file deskriptor %s tidak valid"
 
-#: builtins/mapfile.def:288 builtins/mapfile.def:326
+#: builtins/mapfile.def:293 builtins/mapfile.def:331
 #, c-format
 msgid "%s: invalid line count"
 msgstr "%s: jumlah baris tidak valid"
 
-#: builtins/mapfile.def:299
+#: builtins/mapfile.def:304
 #, c-format
 msgid "%s: invalid array origin"
 msgstr "%s: asal array tidak valid"
 
-#: builtins/mapfile.def:316
+#: builtins/mapfile.def:321
 #, c-format
 msgid "%s: invalid callback quantum"
 msgstr "%s: nama aksi tidak valid"
 
-#: builtins/mapfile.def:349
+#: builtins/mapfile.def:354
 msgid "empty array variable name"
 msgstr "nama variabel array kosong"
 
-#: builtins/mapfile.def:370
+#: builtins/mapfile.def:375
 msgid "array variable support required"
 msgstr "bantuan array variabel dibutuhkan"
 
-#: builtins/printf.def:419
+#: builtins/printf.def:430
 #, c-format
 msgid "`%s': missing format character"
 msgstr "`%s': hilang karakter format"
 
-#: builtins/printf.def:474
+#: builtins/printf.def:485
 #, c-format
 msgid "`%c': invalid time format specification"
 msgstr "`%c': spesifikasi timeout tidak valid"
 
-#: builtins/printf.def:676
+#: builtins/printf.def:708
 #, c-format
 msgid "`%c': invalid format character"
 msgstr "`%c': karakter format tidak valid"
 
-#: builtins/printf.def:702
+#: builtins/printf.def:734
 #, c-format
 msgid "warning: %s: %s"
 msgstr "peringatan: %s: %s"
 
-#: builtins/printf.def:788
+#: builtins/printf.def:822
 #, c-format
 msgid "format parsing problem: %s"
 msgstr "format parsing problem: %s"
 
-#: builtins/printf.def:885
+#: builtins/printf.def:919
 msgid "missing hex digit for \\x"
 msgstr "hilang digit hexa untuk \\x"
 
-#: builtins/printf.def:900
+#: builtins/printf.def:934
 #, c-format
 msgid "missing unicode digit for \\%c"
 msgstr "hilang digit hexa untuk \\%c"
@@ -844,12 +845,12 @@ msgstr ""
 "    \n"
 "    Builtin `dirs' menampilkan direktori stack."
 
-#: builtins/read.def:280
+#: builtins/read.def:308
 #, c-format
 msgid "%s: invalid timeout specification"
 msgstr "%s: spesifikasi timeout tidak valid"
 
-#: builtins/read.def:755
+#: builtins/read.def:827
 #, c-format
 msgid "read error: %d: %s"
 msgstr "error baca: %d: %s"
@@ -862,7 +863,7 @@ msgstr "hanya dapat `return' dari sebuah fungsi atau script yang disource"
 msgid "cannot simultaneously unset a function and a variable"
 msgstr "tidak dapat secara simultan unset sebuah fungsi dan sebuah variable"
 
-#: builtins/set.def:966
+#: builtins/set.def:969
 #, c-format
 msgid "%s: not an array variable"
 msgstr "%s: bukan sebuah variabel array"
@@ -873,19 +874,19 @@ msgid "%s: not a function"
 msgstr "%s: bukan sebuah fungsi"
 
 #: builtins/setattr.def:194
-#, fuzzy, c-format
+#, c-format
 msgid "%s: cannot export"
-msgstr "%s: tidak dapat unset"
+msgstr "%s: tidak dapat export"
 
 #: builtins/shift.def:72 builtins/shift.def:79
 msgid "shift count"
 msgstr "shift terhitung"
 
-#: builtins/shopt.def:310
+#: builtins/shopt.def:323
 msgid "cannot set and unset shell options simultaneously"
 msgstr "tidak dapat menset dan menunset pilihan shell secara bersamaan"
 
-#: builtins/shopt.def:428
+#: builtins/shopt.def:444
 #, c-format
 msgid "%s: invalid shell option name"
 msgstr "%s: nama pilihan shell tidak valid"
@@ -923,9 +924,9 @@ msgid "%s is a function\n"
 msgstr "%s adalah sebuah fungsi\n"
 
 #: builtins/type.def:299
-#, fuzzy, c-format
+#, c-format
 msgid "%s is a special shell builtin\n"
-msgstr "%s adalah sebuah shell builtin\n"
+msgstr "%s adalah sebuah shell builtin spesial\n"
 
 #: builtins/type.def:301
 #, c-format
@@ -952,16 +953,16 @@ msgstr "%s: argumen limit tidak valid"
 msgid "`%c': bad command"
 msgstr "`%c': perintah buruk"
 
-#: builtins/ulimit.def:455
+#: builtins/ulimit.def:464
 #, c-format
 msgid "%s: cannot get limit: %s"
 msgstr "%s: tidak dapat get limit: %s"
 
-#: builtins/ulimit.def:481
+#: builtins/ulimit.def:490
 msgid "limit"
 msgstr "batas"
 
-#: builtins/ulimit.def:493 builtins/ulimit.def:793
+#: builtins/ulimit.def:502 builtins/ulimit.def:802
 #, c-format
 msgid "%s: cannot modify limit: %s"
 msgstr "%s: tidak dapat memodifikasi batas: %s"
@@ -980,7 +981,7 @@ msgstr "`%c': operator mode symbolic tidak valid"
 msgid "`%c': invalid symbolic mode character"
 msgstr "`%c': mode karakter symbolic tidak valid"
 
-#: error.c:89 error.c:347 error.c:349 error.c:351
+#: error.c:89 error.c:373 error.c:375 error.c:377
 msgid " line "
 msgstr " baris "
 
@@ -998,99 +999,109 @@ msgstr "membatalkan..."
 #: error.c:287
 #, c-format
 msgid "INFORM: "
-msgstr ""
+msgstr "BERI TAHU: "
 
-#: error.c:462
+#: error.c:310
+#, fuzzy, c-format
+msgid "DEBUG warning: "
+msgstr "peringatan: "
+
+#: error.c:488
 msgid "unknown command error"
 msgstr "perintah error tidak diketahui"
 
-#: error.c:463
+#: error.c:489
 msgid "bad command type"
 msgstr "tipe perintah buruk"
 
-#: error.c:464
+#: error.c:490
 msgid "bad connector"
 msgstr "konektor buruk"
 
-#: error.c:465
+#: error.c:491
 msgid "bad jump"
 msgstr "lompat buruk"
 
-#: error.c:503
+#: error.c:529
 #, c-format
 msgid "%s: unbound variable"
 msgstr "%s: variabel tidak terikat"
 
-#: eval.c:242
+#: eval.c:243
 msgid "\atimed out waiting for input: auto-logout\n"
 msgstr "kehabisan waktu menunggu masukan: otomatis-keluar\n"
 
-#: execute_cmd.c:537
+#: execute_cmd.c:555
 #, c-format
 msgid "cannot redirect standard input from /dev/null: %s"
 msgstr "tidak dapat menyalurkan masukan standar dari /dev/null: %s"
 
-#: execute_cmd.c:1297
+#: execute_cmd.c:1317
 #, c-format
 msgid "TIMEFORMAT: `%c': invalid format character"
 msgstr "TIMEFORMAT: `%c': karakter format tidak valid"
 
-#: execute_cmd.c:2362
+#: execute_cmd.c:2391
 #, c-format
 msgid "execute_coproc: coproc [%d:%s] still exists"
-msgstr ""
+msgstr "execute_coproc: coproc [%d:%s] masih ada"
 
-#: execute_cmd.c:2486
+#: execute_cmd.c:2524
 msgid "pipe error"
 msgstr "pipe error"
 
-#: execute_cmd.c:4793
-#, fuzzy, c-format
+#: execute_cmd.c:4923
+#, c-format
 msgid "eval: maximum eval nesting level exceeded (%d)"
-msgstr "%s: maximum function nesting level exceeded (%d)"
+msgstr "eval: maximum eval nesting level exceeded (%d)"
 
-#: execute_cmd.c:4805
-#, fuzzy, c-format
+#: execute_cmd.c:4935
+#, c-format
 msgid "%s: maximum source nesting level exceeded (%d)"
-msgstr "%s: maximum function nesting level exceeded (%d)"
+msgstr "%s: maximum source nesting level exceeded (%d)"
 
-#: execute_cmd.c:4913
+#: execute_cmd.c:5043
 #, c-format
 msgid "%s: maximum function nesting level exceeded (%d)"
 msgstr "%s: maximum function nesting level exceeded (%d)"
 
-#: execute_cmd.c:5467
+#: execute_cmd.c:5598
 #, c-format
 msgid "%s: restricted: cannot specify `/' in command names"
 msgstr ""
 "%s: dibatasi: tidak dapat menspesifikasikan '/' dalam nama nama perintah"
 
-#: execute_cmd.c:5574
+#: execute_cmd.c:5715
 #, c-format
 msgid "%s: command not found"
 msgstr "%s: perintah tidak ditemukan"
 
-#: execute_cmd.c:5816
+#: execute_cmd.c:5957
 #, c-format
 msgid "%s: %s"
 msgstr "%s: %s"
 
-#: execute_cmd.c:5854
+#: execute_cmd.c:5975
+#, fuzzy, c-format
+msgid "%s: cannot execute: required file not found"
+msgstr "%s: tidak dapat menjalankan berkas binary"
+
+#: execute_cmd.c:6000
 #, c-format
 msgid "%s: %s: bad interpreter"
 msgstr "%s: %s: interpreter buruk"
 
-#: execute_cmd.c:5891
+#: execute_cmd.c:6037
 #, c-format
 msgid "%s: cannot execute binary file: %s"
 msgstr "%s: tidak dapat menjalankan berkas binary: %s"
 
-#: execute_cmd.c:5977
+#: execute_cmd.c:6123
 #, c-format
 msgid "`%s': is a special builtin"
 msgstr "`%s': adalah sebuah shell builtin"
 
-#: execute_cmd.c:6029
+#: execute_cmd.c:6175
 #, c-format
 msgid "cannot duplicate fd %d to fd %d"
 msgstr "tidak dapat menduplikasikan fd %d ke fd %d"
@@ -1103,70 +1114,68 @@ msgstr "expresi level rekursi terlewati"
 msgid "recursion stack underflow"
 msgstr "rekursi stack underflow"
 
-#: expr.c:477
+#: expr.c:478
 msgid "syntax error in expression"
 msgstr "syntax error dalam expresi"
 
-#: expr.c:521
+#: expr.c:522
 msgid "attempted assignment to non-variable"
 msgstr "mencoba menempatkan ke bukan sebuah variabel"
 
-#: expr.c:530
-#, fuzzy
+#: expr.c:531
 msgid "syntax error in variable assignment"
-msgstr "syntax error dalam expresi"
+msgstr "syntax error dalam menempatkan variabel"
 
-#: expr.c:544 expr.c:911
+#: expr.c:545 expr.c:912
 msgid "division by 0"
 msgstr "dibagi oleh 0"
 
-#: expr.c:592
+#: expr.c:593
 msgid "bug: bad expassign token"
 msgstr "bug: tanda expassign buruk"
 
-#: expr.c:646
+#: expr.c:647
 msgid "`:' expected for conditional expression"
 msgstr "`:' diharapkan untuk sebuah pernyataan kondisional"
 
-#: expr.c:972
+#: expr.c:973
 msgid "exponent less than 0"
 msgstr "eksponen kurang dari 0"
 
-#: expr.c:1029
+#: expr.c:1030
 msgid "identifier expected after pre-increment or pre-decrement"
 msgstr "idenfier diharapkan setelah pre-increment atau pre-decrement"
 
-#: expr.c:1056
+#: expr.c:1057
 msgid "missing `)'"
 msgstr "hilang `)'"
 
-#: expr.c:1107 expr.c:1487
+#: expr.c:1108 expr.c:1492
 msgid "syntax error: operand expected"
 msgstr "syntax error: operand diharapkan"
 
-#: expr.c:1489
+#: expr.c:1494
 msgid "syntax error: invalid arithmetic operator"
 msgstr "syntax error: operator arithmetic tidak valid"
 
-#: expr.c:1513
+#: expr.c:1518
 #, c-format
 msgid "%s%s%s: %s (error token is \"%s\")"
 msgstr "%s%s%s: %s (error token adalah \"%s\")"
 
-#: expr.c:1573
+#: expr.c:1578
 msgid "invalid arithmetic base"
 msgstr "basis arithmetic tidak valid"
 
-#: expr.c:1582
-#, fuzzy
+#: expr.c:1587
 msgid "invalid integer constant"
-msgstr "%s: jumlah baris tidak valid"
+msgstr "konstanta bulat tidak valid"
 
-#: expr.c:1598
+#: expr.c:1603
 msgid "value too great for base"
 msgstr "nilai terlalu besar untuk basis"
 
-#: expr.c:1647
+#: expr.c:1652
 #, c-format
 msgid "%s: expression error\n"
 msgstr "%s: expresi error\n"
@@ -1175,7 +1184,7 @@ msgstr "%s: expresi error\n"
 msgid "getcwd: cannot access parent directories"
 msgstr "getcwd: tidak dapat mengakses direktori orang tua"
 
-#: input.c:99 subst.c:6069
+#: input.c:99 subst.c:6208
 #, c-format
 msgid "cannot reset nodelay mode for fd %d"
 msgstr "tidak dapat mereset mode nodelay untuk fd %d"
@@ -1196,168 +1205,167 @@ msgstr "simpan bash_input: buffer telah ada untuk fd %d baru"
 msgid "start_pipeline: pgrp pipe"
 msgstr "start_pipeline: pgrp pipe"
 
-#: jobs.c:906
+#: jobs.c:907
 #, c-format
 msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
-msgstr ""
+msgstr "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
 
-#: jobs.c:959
+#: jobs.c:960
 #, c-format
 msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
-msgstr ""
+msgstr "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
 
-#: jobs.c:1283
+#: jobs.c:1279
 #, c-format
 msgid "forked pid %d appears in running job %d"
 msgstr "forked pid %d terlihat dalam pekerjaan yang sedang berjalan %d"
 
-#: jobs.c:1402
+#: jobs.c:1397
 #, c-format
 msgid "deleting stopped job %d with process group %ld"
 msgstr "menghapus pekerjaan yang terhenti %d dengan proses grup %ld"
 
-#: jobs.c:1511
+#: jobs.c:1502
 #, c-format
 msgid "add_process: pid %5ld (%s) marked as still alive"
 msgstr "add_process: pid %5ld (%s) ditandai dengan tetap hidup"
 
-#: jobs.c:1850
+#: jobs.c:1839
 #, c-format
 msgid "describe_pid: %ld: no such pid"
 msgstr "describe_pid: %ld: tidak ada pid seperti itu"
 
-#: jobs.c:1865
+#: jobs.c:1854
 #, c-format
 msgid "Signal %d"
 msgstr "sinyal %d"
 
-#: jobs.c:1879 jobs.c:1905
+#: jobs.c:1868 jobs.c:1894
 msgid "Done"
 msgstr "Selesai"
 
-#: jobs.c:1884 siglist.c:122
+#: jobs.c:1873 siglist.c:123
 msgid "Stopped"
 msgstr "Terhenti"
 
-#: jobs.c:1888
+#: jobs.c:1877
 #, c-format
 msgid "Stopped(%s)"
 msgstr "Terhenti(%s)"
 
-#: jobs.c:1892
+#: jobs.c:1881
 msgid "Running"
 msgstr "Berjalan"
 
-#: jobs.c:1909
+#: jobs.c:1898
 #, c-format
 msgid "Done(%d)"
 msgstr "Selesai(%d)"
 
-#: jobs.c:1911
+#: jobs.c:1900
 #, c-format
 msgid "Exit %d"
 msgstr "Keluar %d"
 
-#: jobs.c:1914
+#: jobs.c:1903
 msgid "Unknown status"
 msgstr "Status tidak diketahui"
 
-#: jobs.c:2001
+#: jobs.c:1990
 #, c-format
 msgid "(core dumped) "
 msgstr "(core didump) "
 
-#: jobs.c:2020
+#: jobs.c:2009
 #, c-format
 msgid "  (wd: %s)"
 msgstr "  (wd: %s)"
 
-#: jobs.c:2259
+#: jobs.c:2250
 #, c-format
 msgid "child setpgid (%ld to %ld)"
 msgstr "anak setpgid (%ld ke %ld)"
 
-#: jobs.c:2617 nojobs.c:664
+#: jobs.c:2608 nojobs.c:666
 #, c-format
 msgid "wait: pid %ld is not a child of this shell"
 msgstr "wait: pid %ld bukan sebuah anak dari shell ini"
 
-#: jobs.c:2893
+#: jobs.c:2884
 #, c-format
 msgid "wait_for: No record of process %ld"
 msgstr "wait_for: Tidak ada catatan untuk proses %ld"
 
-#: jobs.c:3236
+#: jobs.c:3223
 #, c-format
 msgid "wait_for_job: job %d is stopped"
 msgstr "wait_for_job: pekerjaan %d terhenti"
 
-#: jobs.c:3564
-#, fuzzy, c-format
+#: jobs.c:3551
+#, c-format
 msgid "%s: no current jobs"
-msgstr "%s: tidak ada pekerjaan seperti itu"
+msgstr "%s: tidak ada pekerjaan sekarang"
 
-#: jobs.c:3571
+#: jobs.c:3558
 #, c-format
 msgid "%s: job has terminated"
 msgstr "%s: pekerjaan telah selesai"
 
-#: jobs.c:3580
+#: jobs.c:3567
 #, c-format
 msgid "%s: job %d already in background"
 msgstr "%s: pekerjaan %d sudah berjalan di belakang (background)"
 
-#: jobs.c:3806
+#: jobs.c:3793
 msgid "waitchld: turning on WNOHANG to avoid indefinite block"
 msgstr "waitchld: mengaktifkan WNOHANG untuk menghindari blok tak terhingga"
 
-#: jobs.c:4320
+#: jobs.c:4307
 #, c-format
 msgid "%s: line %d: "
 msgstr "%s: baris %d: "
 
-#: jobs.c:4334 nojobs.c:919
+#: jobs.c:4321 nojobs.c:921
 #, c-format
 msgid " (core dumped)"
 msgstr " (core didump)"
 
-#: jobs.c:4346 jobs.c:4359
+#: jobs.c:4333 jobs.c:4346
 #, c-format
 msgid "(wd now: %s)\n"
 msgstr "(wd sekarang: %s)\n"
 
-#: jobs.c:4391
+#: jobs.c:4378
 msgid "initialize_job_control: getpgrp failed"
 msgstr "initialize_job_control: getpgrp gagal"
 
-#: jobs.c:4447
-#, fuzzy
+#: jobs.c:4434
 msgid "initialize_job_control: no job control in background"
-msgstr "initialize_job_control: baris disiplin"
+msgstr "initialize_job_control: tidak ada kontrol pekerjaan di belakang"
 
-#: jobs.c:4463
+#: jobs.c:4450
 msgid "initialize_job_control: line discipline"
 msgstr "initialize_job_control: baris disiplin"
 
-#: jobs.c:4473
+#: jobs.c:4460
 msgid "initialize_job_control: setpgid"
 msgstr "initialize_job_control: setpgid"
 
-#: jobs.c:4494 jobs.c:4503
+#: jobs.c:4481 jobs.c:4490
 #, c-format
 msgid "cannot set terminal process group (%d)"
 msgstr "tidak dapat menset terminal proses grup (%d)"
 
-#: jobs.c:4508
+#: jobs.c:4495
 msgid "no job control in this shell"
 msgstr "tidak ada pengontrol pekerjaan dalam shell ini"
 
-#: lib/malloc/malloc.c:353
+#: lib/malloc/malloc.c:367
 #, c-format
 msgid "malloc: failed assertion: %s\n"
 msgstr "malloc: gagal assertion: %s\n"
 
-#: lib/malloc/malloc.c:369
+#: lib/malloc/malloc.c:383
 #, c-format
 msgid ""
 "\r\n"
@@ -1366,49 +1374,47 @@ msgstr ""
 "\r\n"
 "malloc: %s:%d: assertion rusak\r\n"
 
-#: lib/malloc/malloc.c:370 lib/malloc/malloc.c:933
+#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941
 msgid "unknown"
 msgstr "tidak diketahui"
 
-#: lib/malloc/malloc.c:882
+#: lib/malloc/malloc.c:892
 msgid "malloc: block on free list clobbered"
 msgstr "malloc: blok dalam daftar bebas clobbered"
 
-#: lib/malloc/malloc.c:972
+#: lib/malloc/malloc.c:980
 msgid "free: called with already freed block argument"
 msgstr "free: dipanggil dengan argumen blok yang sudah dibebaskan"
 
-#: lib/malloc/malloc.c:975
+#: lib/malloc/malloc.c:983
 msgid "free: called with unallocated block argument"
 msgstr "free: dipanggil dengan argumen blok yang tidak dialokasikan"
 
-#: lib/malloc/malloc.c:994
+#: lib/malloc/malloc.c:1001
 msgid "free: underflow detected; mh_nbytes out of range"
 msgstr "free: underflow terdeteksi; mh_nbytes diluar dari jangkauan"
 
-#: lib/malloc/malloc.c:1001
-#, fuzzy
+#: lib/malloc/malloc.c:1007
 msgid "free: underflow detected; magic8 corrupted"
-msgstr "free: underflow terdeteksi; mh_nbytes diluar dari jangkauan"
+msgstr "free: underflow terdeteksi; magic8 terkorupsi"
 
-#: lib/malloc/malloc.c:1009
+#: lib/malloc/malloc.c:1014
 msgid "free: start and end chunk sizes differ"
 msgstr "free: awal dan akhir dari ukuran potongan berbeda"
 
-#: lib/malloc/malloc.c:1119
+#: lib/malloc/malloc.c:1176
 msgid "realloc: called with unallocated block argument"
 msgstr "realloc: dipanggil dengan argumen blok yang tidak teralokasikan"
 
-#: lib/malloc/malloc.c:1134
+#: lib/malloc/malloc.c:1191
 msgid "realloc: underflow detected; mh_nbytes out of range"
 msgstr "realloc: underflow terdeteksi; my_nbytes diluar dari jangkauan"
 
-#: lib/malloc/malloc.c:1141
-#, fuzzy
+#: lib/malloc/malloc.c:1197
 msgid "realloc: underflow detected; magic8 corrupted"
-msgstr "realloc: underflow terdeteksi; my_nbytes diluar dari jangkauan"
+msgstr "realloc: underflow terdeteksi; magic8 terkorupsi"
 
-#: lib/malloc/malloc.c:1150
+#: lib/malloc/malloc.c:1205
 msgid "realloc: start and end chunk sizes differ"
 msgstr "realloc: awal dan akhir dari ukuran potongan berbeda"
 
@@ -1451,22 +1457,22 @@ msgstr "%s: spesifikasi jalur network buruk"
 msgid "network operations not supported"
 msgstr "operasi jaringan tidak dilayani"
 
-#: locale.c:217
+#: locale.c:219
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s)"
 msgstr "setlocale: LC_ALL: tidak dapat mengubah lokal (%s)"
 
-#: locale.c:219
+#: locale.c:221
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s): %s"
 msgstr "setlocale: LC_ALL: tidak dapat mengubah local (%s): %s"
 
-#: locale.c:292
+#: locale.c:294
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s)"
 msgstr "setlocale: %s: tidak dapat mengubah lokal (%s)"
 
-#: locale.c:294
+#: locale.c:296
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s): %s"
 msgstr "setlocale: %s: tidak dapat mengubah lokal (%s): %s"
@@ -1484,139 +1490,141 @@ msgstr "Anda memiliki surat baru dalam $_"
 msgid "The mail in %s has been read\n"
 msgstr "Surat dalam %s telah dibaca\n"
 
-#: make_cmd.c:317
+#: make_cmd.c:314
 msgid "syntax error: arithmetic expression required"
 msgstr "syntax error: membutuhkan ekspresi arithmetic"
 
-#: make_cmd.c:319
+#: make_cmd.c:316
 msgid "syntax error: `;' unexpected"
 msgstr "syntax error: `;' tidak terduga"
 
-#: make_cmd.c:320
+#: make_cmd.c:317
 #, c-format
 msgid "syntax error: `((%s))'"
 msgstr "syntax error: `((%s))'"
 
-#: make_cmd.c:572
+#: make_cmd.c:569
 #, c-format
 msgid "make_here_document: bad instruction type %d"
 msgstr "make_here_document: tipe instruksi buruk %d"
 
-#: make_cmd.c:657
+#: make_cmd.c:668
 #, c-format
 msgid "here-document at line %d delimited by end-of-file (wanted `%s')"
 msgstr ""
 "dokumen-disini di baris %d dibatasi oleh akhir-dari-berkas (diinginkan `%s')"
 
-#: make_cmd.c:756
+#: make_cmd.c:769
 #, c-format
 msgid "make_redirection: redirection instruction `%d' out of range"
 msgstr "make_redirection: instruksi redireksi `%d' diluar dari jangkauan"
 
-#: parse.y:2393
+#: parse.y:2428
 #, c-format
 msgid ""
 "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line "
 "truncated"
 msgstr ""
+"shell_getc: shell_input_line_size (%zu) terlampaui SIZE_MAX (%lu): baris "
+"terpotong"
 
-#: parse.y:2826
+#: parse.y:2921
 msgid "maximum here-document count exceeded"
-msgstr ""
+msgstr "jumlah maksimal dokumen disini tercapai"
 
-#: parse.y:3581 parse.y:3957 parse.y:4556
+#: parse.y:3684 parse.y:4244 parse.y:6148
 #, c-format
 msgid "unexpected EOF while looking for matching `%c'"
 msgstr "EOF tidak terduga ketika mencari untuk pencocokan `%c'"
 
-#: parse.y:4696
+#: parse.y:4452
 msgid "unexpected EOF while looking for `]]'"
 msgstr "EOF tidak terduga ketika mencari untuk `]]'"
 
-#: parse.y:4701
+#: parse.y:4457
 #, c-format
 msgid "syntax error in conditional expression: unexpected token `%s'"
 msgstr "syntax error dalam ekspresi kondisional: tanda `%s' tidak terduga"
 
-#: parse.y:4705
+#: parse.y:4461
 msgid "syntax error in conditional expression"
 msgstr "syntax error dalam ekspresi kondisional"
 
-#: parse.y:4783
+#: parse.y:4539
 #, c-format
 msgid "unexpected token `%s', expected `)'"
 msgstr "tanda `%s' tidak terduga, diduga `)'"
 
-#: parse.y:4787
+#: parse.y:4543
 msgid "expected `)'"
 msgstr "diduga `)'"
 
-#: parse.y:4815
+#: parse.y:4571
 #, c-format
 msgid "unexpected argument `%s' to conditional unary operator"
 msgstr "argumen tidak terduga `%s' ke operator kondisional unary"
 
-#: parse.y:4819
+#: parse.y:4575
 msgid "unexpected argument to conditional unary operator"
 msgstr "argumen tidak terduga untuk operasi unary kondisional"
 
-#: parse.y:4865
+#: parse.y:4621
 #, c-format
 msgid "unexpected token `%s', conditional binary operator expected"
 msgstr "tanda `%s' tidak terduga, operator binary kondisional diduga"
 
-#: parse.y:4869
+#: parse.y:4625
 msgid "conditional binary operator expected"
 msgstr "operator binary kondisional diduga"
 
-#: parse.y:4891
+#: parse.y:4647
 #, c-format
 msgid "unexpected argument `%s' to conditional binary operator"
 msgstr "argumen `%s' tidak terduga ke operator binary kondisional"
 
-#: parse.y:4895
+#: parse.y:4651
 msgid "unexpected argument to conditional binary operator"
 msgstr "argumen tidak terduga ke operasi binary kondisional"
 
-#: parse.y:4906
+#: parse.y:4662
 #, c-format
 msgid "unexpected token `%c' in conditional command"
 msgstr "tanda `%c' tidak terduga dalam perintah kondisional"
 
-#: parse.y:4909
+#: parse.y:4665
 #, c-format
 msgid "unexpected token `%s' in conditional command"
 msgstr "tanda `%s' tidak terduga dalam perintah kondisional"
 
-#: parse.y:4913
+#: parse.y:4669
 #, c-format
 msgid "unexpected token %d in conditional command"
 msgstr "tanda %d tidak terduga dalam perintah kondisional"
 
-#: parse.y:6336
+#: parse.y:6118
 #, c-format
 msgid "syntax error near unexpected token `%s'"
 msgstr "syntax error didekat tanda `%s' yang tidak terduga"
 
-#: parse.y:6355
+#: parse.y:6137
 #, c-format
 msgid "syntax error near `%s'"
 msgstr "syntax error didekat `%s'"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error: unexpected end of file"
 msgstr "syntax error: tidak terduga diakhir dari berkas"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error"
 msgstr "syntax error"
 
-#: parse.y:6428
+#: parse.y:6216
 #, c-format
 msgid "Use \"%s\" to leave the shell.\n"
 msgstr "Gunakan \"%s\" untuk meninggalkan shell.\n"
 
-#: parse.y:6602
+#: parse.y:6394
 msgid "unexpected EOF while looking for matching `)'"
 msgstr "EOF tidak terduga ketika mencari untuk pencocokan ')'"
 
@@ -1628,7 +1636,7 @@ msgstr "completion: fungsi `%s' tidak ditemukan"
 #: pcomplete.c:1722
 #, c-format
 msgid "programmable_completion: %s: possible retry loop"
-msgstr ""
+msgstr "programmable_completion: %s: kemungkinan retry loop"
 
 #: pcomplib.c:182
 #, c-format
@@ -1654,94 +1662,94 @@ msgstr "xtrace_set: berkas penunjuk KOSONG"
 msgid "xtrace fd (%d) != fileno xtrace fp (%d)"
 msgstr "xtrace fd (%d) != fileno xtrace fp (%d)"
 
-#: print_cmd.c:1540
+#: print_cmd.c:1545
 #, c-format
 msgid "cprintf: `%c': invalid format character"
 msgstr "cprintf: '%c': format karakter tidak valid"
 
-#: redir.c:149 redir.c:197
+#: redir.c:150 redir.c:198
 msgid "file descriptor out of range"
 msgstr "berkas deskripsi diluar dari jangkauan"
 
-#: redir.c:204
+#: redir.c:205
 #, c-format
 msgid "%s: ambiguous redirect"
 msgstr "%s: redirect ambigu"
 
-#: redir.c:208
+#: redir.c:209
 #, c-format
 msgid "%s: cannot overwrite existing file"
 msgstr "%s: tidak dapat menulis berkas yang sudah ada"
 
-#: redir.c:213
+#: redir.c:214
 #, c-format
 msgid "%s: restricted: cannot redirect output"
 msgstr "%s: restricted: tidak dapat meredirect keluaran"
 
-#: redir.c:218
+#: redir.c:219
 #, c-format
 msgid "cannot create temp file for here-document: %s"
 msgstr "tidak dapat membuat berkas sementara untuk dokumen disini: %s"
 
-#: redir.c:222
+#: redir.c:223
 #, c-format
 msgid "%s: cannot assign fd to variable"
 msgstr "%s: tidak dapat meng-'assign' fd ke variabel"
 
-#: redir.c:649
+#: redir.c:650
 msgid "/dev/(tcp|udp)/host/port not supported without networking"
 msgstr "/dev/(tcp|udp)/host/port tidak dilayani tanpa jaringan"
 
-#: redir.c:938 redir.c:1053 redir.c:1114 redir.c:1284
+#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303
 msgid "redirection error: cannot duplicate fd"
 msgstr "redirection error: tidak dapat menduplikasi fd"
 
-#: shell.c:347
+#: shell.c:353
 msgid "could not find /tmp, please create!"
 msgstr "tidak dapat menemukan /tmp, tolong buat!"
 
-#: shell.c:351
+#: shell.c:357
 msgid "/tmp must be a valid directory name"
 msgstr "/tmp harus berupa sebuah nama direktori yang valid"
 
-#: shell.c:804
+#: shell.c:826
 msgid "pretty-printing mode ignored in interactive shells"
-msgstr ""
+msgstr "mode pretty-printing diabaikan dalam shells interactive"
 
-#: shell.c:948
+#: shell.c:972
 #, c-format
 msgid "%c%c: invalid option"
 msgstr "%c%c: pilihan tidak valid"
 
-#: shell.c:1319
-#, fuzzy, c-format
+#: shell.c:1343
+#, c-format
 msgid "cannot set uid to %d: effective uid %d"
-msgstr "tidak dapat mereset mode nodelay untuk fd %d"
+msgstr "tidak dapat menset uid ke %d: uid efektif %d"
 
-#: shell.c:1330
-#, fuzzy, c-format
+#: shell.c:1354
+#, c-format
 msgid "cannot set gid to %d: effective gid %d"
-msgstr "tidak dapat mereset mode nodelay untuk fd %d"
+msgstr "tidak dapat menset gid ke %d: gid efektif %d"
 
-#: shell.c:1518
+#: shell.c:1544
 msgid "cannot start debugger; debugging mode disabled"
-msgstr ""
+msgstr "tidak dapat menjalankan debugger; mode debugging tidak aktif"
 
-#: shell.c:1632
-#, fuzzy, c-format
+#: shell.c:1658
+#, c-format
 msgid "%s: Is a directory"
-msgstr "%s: bukan sebuah direktori"
+msgstr "%s: Direktori"
 
-#: shell.c:1881
+#: shell.c:1907
 msgid "I have no name!"
 msgstr "Aku tidak memiliki nama!"
 
-#: shell.c:2035
+#: shell.c:2061
 #, c-format
 msgid "GNU bash, version %s-(%s)\n"
 msgstr "GNU bash, versi %s-(%s)\n"
 
-#: shell.c:2036
+#: shell.c:2062
 #, c-format
 msgid ""
 "Usage:\t%s [GNU long option] [option] ...\n"
@@ -1750,314 +1758,314 @@ msgstr ""
 "Penggunaan:\t%s [GNU pilihan panjang] [pilihan] ...\n"
 "\t%s [GNU pilihan panjang] [pilihan] berkas-script ...\n"
 
-#: shell.c:2038
+#: shell.c:2064
 msgid "GNU long options:\n"
 msgstr "GNU pilihan panjang:\n"
 
-#: shell.c:2042
+#: shell.c:2068
 msgid "Shell options:\n"
 msgstr "Pilihan shell:\n"
 
-#: shell.c:2043
+#: shell.c:2069
 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n"
 msgstr ""
 "\t-ilrsD atau -c perintah atau -O shopt_option\t\t(hanya pemanggilan)\n"
 
-#: shell.c:2062
+#: shell.c:2088
 #, c-format
 msgid "\t-%s or -o option\n"
 msgstr "\t-%s atau pilihan -o\n"
 
-#: shell.c:2068
+#: shell.c:2094
 #, c-format
 msgid "Type `%s -c \"help set\"' for more information about shell options.\n"
 msgstr ""
 "Ketik `%s -c \"help set\"' untuk informasi lebih lanjut mengenai pilihan "
 "shell.\n"
 
-#: shell.c:2069
+#: shell.c:2095
 #, c-format
 msgid "Type `%s -c help' for more information about shell builtin commands.\n"
 msgstr ""
 "Ketik `%s -c help' untuk informasi lebih lanjut mengenai perintah builting "
 "shell.\n"
 
-#: shell.c:2070
+#: shell.c:2096
 #, c-format
 msgid "Use the `bashbug' command to report bugs.\n"
 msgstr "Gunakan perintah 'bashbug' untuk melaporkan bugs.\n"
 
-#: shell.c:2072
+#: shell.c:2098
 #, c-format
 msgid "bash home page: <http://www.gnu.org/software/bash>\n"
-msgstr ""
+msgstr "bash halaman rumah: <http://www.gnu.org/software/bash>\n"
 
-#: shell.c:2073
+#: shell.c:2099
 #, c-format
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 msgstr ""
+"Bantuan umum menggunakan aplikasi GNU: <http:///www.gnu.org/gethelp/>\n"
 
-#: sig.c:757
+#: sig.c:765
 #, c-format
 msgid "sigprocmask: %d: invalid operation"
 msgstr "sigprocmask: %d: operasi tidak valid"
 
-#: siglist.c:47
+#: siglist.c:48
 msgid "Bogus signal"
 msgstr "Sinyal palsu"
 
-#: siglist.c:50
+#: siglist.c:51
 msgid "Hangup"
 msgstr "Hangup"
 
-#: siglist.c:54
+#: siglist.c:55
 msgid "Interrupt"
 msgstr "Interupsi"
 
-#: siglist.c:58
+#: siglist.c:59
 msgid "Quit"
 msgstr "Berhenti"
 
-#: siglist.c:62
+#: siglist.c:63
 msgid "Illegal instruction"
 msgstr "Instruksi ilegal"
 
-#: siglist.c:66
+#: siglist.c:67
 msgid "BPT trace/trap"
 msgstr "BPT trace/trap"
 
-#: siglist.c:74
+#: siglist.c:75
 msgid "ABORT instruction"
 msgstr "Instruksi ABORT"
 
-#: siglist.c:78
+#: siglist.c:79
 msgid "EMT instruction"
 msgstr "Instruksi EMT"
 
-#: siglist.c:82
+#: siglist.c:83
 msgid "Floating point exception"
 msgstr "Floating point exception"
 
-#: siglist.c:86
+#: siglist.c:87
 msgid "Killed"
 msgstr "Dibunuh"
 
-#: siglist.c:90
+#: siglist.c:91
 msgid "Bus error"
 msgstr "Bus error"
 
-#: siglist.c:94
+#: siglist.c:95
 msgid "Segmentation fault"
 msgstr "Kesalahan segmentasi"
 
-#: siglist.c:98
+#: siglist.c:99
 msgid "Bad system call"
 msgstr "Pemanggilan sistem buruk"
 
-#: siglist.c:102
+#: siglist.c:103
 msgid "Broken pipe"
 msgstr "Pipe rusak"
 
-#: siglist.c:106
+#: siglist.c:107
 msgid "Alarm clock"
 msgstr "Alarm clock"
 
-#: siglist.c:110
+#: siglist.c:111
 msgid "Terminated"
 msgstr "Selesai"
 
-#: siglist.c:114
+#: siglist.c:115
 msgid "Urgent IO condition"
 msgstr "Kodisi IO penting"
 
-#: siglist.c:118
+#: siglist.c:119
 msgid "Stopped (signal)"
 msgstr "Terhenti (sinyal)"
 
-#: siglist.c:126
+#: siglist.c:127
 msgid "Continue"
 msgstr "Melanjutkan"
 
-#: siglist.c:134
+#: siglist.c:135
 msgid "Child death or stop"
 msgstr "Anak tewas atau berhenti"
 
-#: siglist.c:138
+#: siglist.c:139
 msgid "Stopped (tty input)"
 msgstr "Terhenti (tty input)"
 
-#: siglist.c:142
+#: siglist.c:143
 msgid "Stopped (tty output)"
 msgstr "Terhenti (tty output)"
 
-#: siglist.c:146
+#: siglist.c:147
 msgid "I/O ready"
 msgstr "I/O siap"
 
-#: siglist.c:150
+#: siglist.c:151
 msgid "CPU limit"
 msgstr "Batas CPU"
 
-#: siglist.c:154
+#: siglist.c:155
 msgid "File limit"
 msgstr "Batas berkas"
 
-#: siglist.c:158
+#: siglist.c:159
 msgid "Alarm (virtual)"
 msgstr "Alarm (virtual)"
 
-#: siglist.c:162
+#: siglist.c:163
 msgid "Alarm (profile)"
 msgstr "Alarm (profile)"
 
-#: siglist.c:166
+#: siglist.c:167
 msgid "Window changed"
 msgstr "Window berubah"
 
-#: siglist.c:170
+#: siglist.c:171
 msgid "Record lock"
 msgstr "Catatan terkunci"
 
-#: siglist.c:174
+#: siglist.c:175
 msgid "User signal 1"
 msgstr "Sinyal pengguna 1"
 
-#: siglist.c:178
+#: siglist.c:179
 msgid "User signal 2"
 msgstr "Sinyal pengguna 2"
 
-#: siglist.c:182
+#: siglist.c:183
 msgid "HFT input data pending"
 msgstr "HFT masukan data tertunda"
 
-#: siglist.c:186
+#: siglist.c:187
 msgid "power failure imminent"
 msgstr "Kelihatannya akan terjadi kegagalan power suply"
 
-#: siglist.c:190
+#: siglist.c:191
 msgid "system crash imminent"
 msgstr "Kelihatannya akan terjadi kerusakan sistem"
 
-#: siglist.c:194
+#: siglist.c:195
 msgid "migrate process to another CPU"
 msgstr "pindahkan proses ke CPU lain"
 
-#: siglist.c:198
+#: siglist.c:199
 msgid "programming error"
 msgstr "error dalam pemrograman"
 
-#: siglist.c:202
+#: siglist.c:203
 msgid "HFT monitor mode granted"
 msgstr "HFT mode monitoring diberikan"
 
-#: siglist.c:206
+#: siglist.c:207
 msgid "HFT monitor mode retracted"
 msgstr "HFT mode monitoring ditarik"
 
-#: siglist.c:210
+#: siglist.c:211
 msgid "HFT sound sequence has completed"
 msgstr "HFTP sound sequence telah selesai"
 
-#: siglist.c:214
+#: siglist.c:215
 msgid "Information request"
 msgstr "Permintaan informasi"
 
-#: siglist.c:222 siglist.c:224
+#: siglist.c:223 siglist.c:225
 #, c-format
 msgid "Unknown Signal #%d"
 msgstr "Sinyal tidak diketahui #%d"
 
-#: subst.c:1476 subst.c:1666
+#: subst.c:1480 subst.c:1670
 #, c-format
 msgid "bad substitution: no closing `%s' in %s"
 msgstr "substitusi buruk: tidak ada penutupan `%s' dalam %s"
 
-#: subst.c:3281
+#: subst.c:3307
 #, c-format
 msgid "%s: cannot assign list to array member"
 msgstr "%s: tidak dapat meng-assign daftar kedalam anggoya array"
 
-#: subst.c:5910 subst.c:5926
+#: subst.c:6048 subst.c:6064
 msgid "cannot make pipe for process substitution"
 msgstr "tidak dapat membuat pipe untuk proses substitusi"
 
-#: subst.c:5985
+#: subst.c:6124
 msgid "cannot make child for process substitution"
 msgstr "tidak dapat membuat anak untuk proses substitusi"
 
-#: subst.c:6059
+#: subst.c:6198
 #, c-format
 msgid "cannot open named pipe %s for reading"
 msgstr "tidak dapat membuka named pipe %s untuk membaca"
 
-#: subst.c:6061
+#: subst.c:6200
 #, c-format
 msgid "cannot open named pipe %s for writing"
 msgstr "tidak dapat membukan named pipe %s untuk menulis"
 
-#: subst.c:6084
+#: subst.c:6223
 #, c-format
 msgid "cannot duplicate named pipe %s as fd %d"
 msgstr "tidak dapat menduplikasi nama pipe %s sebagai fd %d"
 
-#: subst.c:6213
-#, fuzzy
+#: subst.c:6370
 msgid "command substitution: ignored null byte in input"
-msgstr "substitusi buruk: tidak ada penutupan \"\" dalam %s"
+msgstr "substitusi perintah: mengabaikan byte kosong dalam masukan"
 
-#: subst.c:6353
+#: subst.c:6533
 msgid "cannot make pipe for command substitution"
 msgstr "tidak dapat membuat pipe untuk perintah substitusi"
 
-#: subst.c:6397
+#: subst.c:6580
 msgid "cannot make child for command substitution"
 msgstr "tidak dapat membuat anak untuk perintah substitusi"
 
-#: subst.c:6423
+#: subst.c:6613
 msgid "command_substitute: cannot duplicate pipe as fd 1"
 msgstr "command_substitute: tidak dapat menduplikasikan pipe sebagi fd 1"
 
-#: subst.c:6883 subst.c:9952
+#: subst.c:7082 subst.c:10252
 #, c-format
 msgid "%s: invalid variable name for name reference"
 msgstr "%s: nilai dari berkas pendeskripsi penelusur tidak valid"
 
-#: subst.c:6979 subst.c:6997 subst.c:7169
-#, fuzzy, c-format
+#: subst.c:7178 subst.c:7196 subst.c:7369
+#, c-format
 msgid "%s: invalid indirect expansion"
-msgstr "%s: jumlah baris tidak valid"
+msgstr "%s: ekspansi tidak langsung tidak valid"
 
-#: subst.c:7013 subst.c:7177
-#, fuzzy, c-format
+#: subst.c:7212 subst.c:7377
+#, c-format
 msgid "%s: invalid variable name"
-msgstr "`%s': nama alias tidak valid"
+msgstr "`%s': nama variabel tidak valid"
 
-#: subst.c:7256
-#, fuzzy, c-format
+#: subst.c:7478
+#, c-format
 msgid "%s: parameter not set"
-msgstr "%s: parameter kosong atau tidak diset"
+msgstr "%s: parameter tidak diset"
 
-#: subst.c:7258
+#: subst.c:7480
 #, c-format
 msgid "%s: parameter null or not set"
 msgstr "%s: parameter kosong atau tidak diset"
 
-#: subst.c:7503 subst.c:7518
+#: subst.c:7727 subst.c:7742
 #, c-format
 msgid "%s: substring expression < 0"
 msgstr "%s: substring expresi < 0"
 
-#: subst.c:9281 subst.c:9302
+#: subst.c:9560 subst.c:9587
 #, c-format
 msgid "%s: bad substitution"
 msgstr "%s: substitusi buruk"
 
-#: subst.c:9390
+#: subst.c:9678
 #, c-format
 msgid "$%s: cannot assign in this way"
 msgstr "$%s: tidak dapat meng-assign dengan cara ini"
 
-#: subst.c:9814
+#: subst.c:10111
 msgid ""
 "future versions of the shell will force evaluation as an arithmetic "
 "substitution"
@@ -2065,12 +2073,12 @@ msgstr ""
 "versi selanjutnya dari shell akan memaksa evaluasi dari sebuah penggantian "
 "aritmetika"
 
-#: subst.c:10367
+#: subst.c:10795
 #, c-format
 msgid "bad substitution: no closing \"`\" in %s"
 msgstr "substitusi buruk: tidak ada penutupan \"\" dalam %s"
 
-#: subst.c:11434
+#: subst.c:11874
 #, c-format
 msgid "no match: %s"
 msgstr "tidak cocok: %s"
@@ -2093,40 +2101,40 @@ msgstr "')' diduga"
 msgid "`)' expected, found %s"
 msgstr "`)' diduga, ditemukan %s"
 
-#: test.c:466 test.c:799
+#: test.c:469 test.c:814
 #, c-format
 msgid "%s: binary operator expected"
 msgstr "%s: operator binary diduga"
 
-#: test.c:756 test.c:759
+#: test.c:771 test.c:774
 #, c-format
 msgid "%s: unary operator expected"
 msgstr "%s: operator unary diduga"
 
-#: test.c:881
+#: test.c:896
 msgid "missing `]'"
 msgstr "hilang `]'"
 
-#: test.c:899
-#, fuzzy, c-format
+#: test.c:914
+#, c-format
 msgid "syntax error: `%s' unexpected"
-msgstr "syntax error: `;' tidak terduga"
+msgstr "syntax error: `%s' tidak terduga"
 
 #: trap.c:220
 msgid "invalid signal number"
 msgstr "nomor sinyal tidak valid"
 
-#: trap.c:325
-#, fuzzy, c-format
+#: trap.c:323
+#, c-format
 msgid "trap handler: maximum trap handler level exceeded (%d)"
-msgstr "%s: maximum function nesting level exceeded (%d)"
+msgstr "trap handler: maximum trap handler level exceeded (%d)"
 
-#: trap.c:414
+#: trap.c:412
 #, c-format
 msgid "run_pending_traps: bad value in trap_list[%d]: %p"
 msgstr "run_pending_traps: nilai buruk dalam trap_list[%d]: %p"
 
-#: trap.c:418
+#: trap.c:416
 #, c-format
 msgid ""
 "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
@@ -2134,88 +2142,93 @@ msgstr ""
 "run_pending_traps: sinyal handler adalah SIG_DFL, mengirimkan kembali %d "
 "(%s) kediri sendiri"
 
-#: trap.c:487
+#: trap.c:509
 #, c-format
 msgid "trap_handler: bad signal %d"
 msgstr "trap_handler: sinyal buruk %d"
 
-#: variables.c:421
+#: variables.c:424
 #, c-format
 msgid "error importing function definition for `%s'"
 msgstr "error mengimpor definisi fungsi untuk `%s'"
 
-#: variables.c:833
+#: variables.c:838
 #, c-format
 msgid "shell level (%d) too high, resetting to 1"
 msgstr "level shell (%d) terlalu tinggi, mereset ke 1"
 
-#: variables.c:2674
+#: variables.c:2642
 msgid "make_local_variable: no function context at current scope"
 msgstr "make_local_variable: tidak ada context fungsi di scope ini"
 
-#: variables.c:2693
+#: variables.c:2661
 #, c-format
 msgid "%s: variable may not be assigned value"
 msgstr "%s: tidak dapat meng-'assign' fd ke variabel"
 
-#: variables.c:3475
-#, fuzzy, c-format
+#: variables.c:2818 variables.c:2874
+#, c-format
+msgid "%s: cannot inherit value from incompatible type"
+msgstr ""
+
+#: variables.c:3459
+#, c-format
 msgid "%s: assigning integer to name reference"
-msgstr "%s: nilai dari berkas pendeskripsi penelusur tidak valid"
+msgstr "%s: memberikan integer ke berkas pendeskripsi penelusur"
 
-#: variables.c:4404
+#: variables.c:4390
 msgid "all_local_variables: no function context at current scope"
 msgstr "all_local_variables: tidak ada context fungsi dalam scope ini"
 
-#: variables.c:4771
+#: variables.c:4757
 #, c-format
 msgid "%s has null exportstr"
 msgstr "%s memiliki exportstr kosong"
 
-#: variables.c:4776 variables.c:4785
+#: variables.c:4762 variables.c:4771
 #, c-format
 msgid "invalid character %d in exportstr for %s"
 msgstr "karakter %d tidak valid dalam exporstr untuk %s"
 
-#: variables.c:4791
+#: variables.c:4777
 #, c-format
 msgid "no `=' in exportstr for %s"
 msgstr "bukan `=' dalam exportstr untuk %s"
 
-#: variables.c:5331
+#: variables.c:5317
 msgid "pop_var_context: head of shell_variables not a function context"
 msgstr ""
 "pop_var_context: kepala dari shell_variables bukan sebuah fungsi cbntext"
 
-#: variables.c:5344
+#: variables.c:5330
 msgid "pop_var_context: no global_variables context"
 msgstr "pop_var_context: bukan global_variable context"
 
-#: variables.c:5424
+#: variables.c:5410
 msgid "pop_scope: head of shell_variables not a temporary environment scope"
 msgstr ""
 "pop_scope: kepala dari shell_variables bukan sebuah scope lingkungan "
 "sementara"
 
-#: variables.c:6387
+#: variables.c:6400
 #, c-format
 msgid "%s: %s: cannot open as FILE"
 msgstr "%s: %s: tidak dapat membuka sebagai BERKAS"
 
-#: variables.c:6392
+#: variables.c:6405
 #, c-format
 msgid "%s: %s: invalid value for trace file descriptor"
 msgstr "%s: %s: nilai dari berkas pendeskripsi penelusur tidak valid"
 
-#: variables.c:6437
+#: variables.c:6450
 #, c-format
 msgid "%s: %s: compatibility value out of range"
 msgstr "%s: %s: diluar jangkauan"
 
 #: version.c:46 version2.c:46
 #, fuzzy
-msgid "Copyright (C) 2020 Free Software Foundation, Inc."
-msgstr "Hak Cipta (C) 2012 Free Software Foundation, Inc."
+msgid "Copyright (C) 2022 Free Software Foundation, Inc."
+msgstr "Hak Cipta (C) 2020 Free Software Foundation, Inc."
 
 #: version.c:47 version2.c:47
 msgid ""
@@ -2307,13 +2320,17 @@ msgstr "perintah [-pVv] perintah [argumen ...]"
 
 #: builtins.c:78
 #, fuzzy
-msgid "declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]"
-msgstr "declare [-aAfFgilnrtux] [-p] [name[=nilai] ...]"
+msgid ""
+"declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] "
+"[name ...]"
+msgstr "declare [-aAfFgiIlnrtux] [-p] [name[=nilai] ...]"
 
 #: builtins.c:80
 #, fuzzy
-msgid "typeset [-aAfFgiIlnrtux] [-p] name[=value] ..."
-msgstr "typeset [-aAfFgilrtux] [-p] name[=nilai] ..."
+msgid ""
+"typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] "
+"[name ...]"
+msgstr "typeset [-aAfFgiIlnrtux] [-p] name[=nilai] ..."
 
 #: builtins.c:82
 msgid "local [option] name[=value] ..."
@@ -2336,12 +2353,10 @@ msgid "eval [arg ...]"
 msgstr "eval [argumen ...]"
 
 #: builtins.c:96
-#, fuzzy
 msgid "getopts optstring name [arg ...]"
-msgstr "getopts nama optstring [arg]"
+msgstr "getopts nama optstring [arg ...]"
 
 #: builtins.c:98
-#, fuzzy
 msgid "exec [-cl] [-a name] [command [argument ...]] [redirection ...]"
 msgstr "exec [-cl] [-a nama] [perintah [argumen ...]] [redireksi ...]"
 
@@ -2387,9 +2402,8 @@ msgid "jobs [-lnprs] [jobspec ...] or jobs -x command [args]"
 msgstr "jobs [-lnprs] [spesifikasi pekerjaan ...] atau jobs -x perintah [args]"
 
 #: builtins.c:131
-#, fuzzy
 msgid "disown [-h] [-ar] [jobspec ... | pid ...]"
-msgstr "disown [-h] [-ar] [spesifikasi pekerjaan ...]"
+msgstr "disown [-h] [-ar] [spesifikasi pekerjaan ... | pid ...]"
 
 #: builtins.c:134
 msgid ""
@@ -2416,7 +2430,8 @@ msgid "return [n]"
 msgstr "return [n]"
 
 #: builtins.c:142
-msgid "set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]"
+#, fuzzy
+msgid "set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]"
 msgstr "set [-abefhkmnptuvxBCHP] [-o nama-pilihan] [--] [argumen ...]"
 
 #: builtins.c:144
@@ -2465,17 +2480,16 @@ msgstr "type [-afptP] nama [name ...]"
 
 #: builtins.c:171
 #, fuzzy
-msgid "ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]"
-msgstr "ulimit [-SHabcdefilmnpqrstuvxT] [batas]"
+msgid "ulimit [-SHabcdefiklmnpqrstuvxPRT] [limit]"
+msgstr "ulimit [-SHabcdefiklmnpqrstuvxPT] [batas]"
 
 #: builtins.c:174
 msgid "umask [-p] [-S] [mode]"
 msgstr "umask [-p] [-S] [mode]"
 
 #: builtins.c:177
-#, fuzzy
 msgid "wait [-fn] [-p var] [id ...]"
-msgstr "wait [-n] [id ...]"
+msgstr "wait [-fn] [-p var] [id ...]"
 
 #: builtins.c:181
 msgid "wait [pid ...]"
@@ -2510,11 +2524,13 @@ msgstr ""
 "PERINTAH; ] fi"
 
 #: builtins.c:196
-msgid "while COMMANDS; do COMMANDS; done"
+#, fuzzy
+msgid "while COMMANDS; do COMMANDS-2; done"
 msgstr "while PERINTAH; do PERINTAH; done"
 
 #: builtins.c:198
-msgid "until COMMANDS; do COMMANDS; done"
+#, fuzzy
+msgid "until COMMANDS; do COMMANDS-2; done"
 msgstr "until PERINTAH; do PERINTAH; done"
 
 #: builtins.c:200
@@ -2566,18 +2582,16 @@ msgid "printf [-v var] format [arguments]"
 msgstr "printf [-v var] format [argumen]"
 
 #: builtins.c:231
-#, fuzzy
 msgid ""
 "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-"
 "W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S "
 "suffix] [name ...]"
 msgstr ""
-"complete [-abcdefgjksuv] [-pr] [-DE] [-o pilihan] [-A action] [-G globpat] [-"
-"W daftar kata] [-F fungsi] [-C perintah] [-X filterpat] [-P prefix] [-S "
+"complete [-abcdefgjksuv] [-pr] [-DEI] [-o pilihan] [-A action] [-G globpat] "
+"[-W daftar kata] [-F fungsi] [-C perintah] [-X filterpat] [-P prefix] [-S "
 "suffix] [name ...]"
 
 #: builtins.c:235
-#, fuzzy
 msgid ""
 "compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-"
 "F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]"
@@ -2586,27 +2600,24 @@ msgstr ""
 "F fungsi] [-C perintah] [-X filterpat] [-P prefix] [-S suffix] [word]"
 
 #: builtins.c:239
-#, fuzzy
 msgid "compopt [-o|+o option] [-DEI] [name ...]"
-msgstr "compopt [-o|+o pilihan] [-DE] [nama ...]"
+msgstr "compopt [-o|+o pilihan] [-DEI] [nama ...]"
 
 #: builtins.c:242
-#, fuzzy
 msgid ""
 "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C "
 "callback] [-c quantum] [array]"
 msgstr ""
-"mapfile [-n jumlah] [-O asal] [-s jumlah] [-t] [-u fd] [-C callback] [-c "
-"quantum] [array]"
+"mapfile [-d pembatas] [-n jumlah] [-O asal] [-s jumlah] [-t] [-u fd] [-C "
+"callback] [-c quantum] [array]"
 
 #: builtins.c:244
-#, fuzzy
 msgid ""
 "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C "
 "callback] [-c quantum] [array]"
 msgstr ""
-"readarray [-n jumlah] [-O asal] [-s jumlah] [-t] [-u fd] [-C callback] [-c "
-"quantum] [array]"
+"readarray [-d pembatas] [-n jumlah] [-O asal] [-s jumlah] [-t] [-u fd] [-C "
+"callback] [-c quantum] [array]"
 
 #: builtins.c:256
 #, fuzzy
@@ -2649,7 +2660,6 @@ msgstr ""
 "    terdefinisi."
 
 #: builtins.c:278
-#, fuzzy
 msgid ""
 "Remove each NAME from the list of defined aliases.\n"
 "    \n"
@@ -2661,7 +2671,7 @@ msgstr ""
 "Hapus setiap NAMA dari daftar yang mendefinisikan aliases.\n"
 "    \n"
 "    Pilihan:\n"
-"      -a\thapus semua definisi alias.\n"
+"      -a\thapus semua definisi alias\n"
 "    \n"
 "    Mengembalikan sukses kecuali sebuah NAMA bukan alias yang sudah ada."
 
@@ -2789,7 +2799,6 @@ msgstr ""
 "    Status keluar adalah 0 kecuali N tidak lebih besar atau sama dengan 1."
 
 #: builtins.c:354
-#, fuzzy
 msgid ""
 "Execute shell builtins.\n"
 "    \n"
@@ -2814,7 +2823,7 @@ msgstr ""
 "    Status Keluar:\n"
 "    Mengembalikan status keluar dari SHELL-BUILTIN, atau salah jika SHELL-"
 "BUILTIN adalah\n"
-"    bukan sebuah shell builtin.."
+"    bukan sebuah shell builtin."
 
 #: builtins.c:369
 msgid ""
@@ -2919,7 +2928,6 @@ msgstr ""
 "    Mengembalikan 0 jika direktori berubah; bukan nol jika tidak."
 
 #: builtins.c:425
-#, fuzzy
 msgid ""
 "Print the name of the current working directory.\n"
 "    \n"
@@ -2938,7 +2946,7 @@ msgstr ""
 "    \n"
 "    Pilihan:\n"
 "      -L\tmenampilkan nilai dari $PWD jika ini nama dari direktori\n"
-"    \tyang digunakan sekarang\n"
+"    \t\tyang digunakan sekarang\n"
 "      -P\tmenampilkan direktori pisik, tanpa link simbolik apapun\n"
 "    \n"
 "    Secara default, `pwd' berlaku seperi jika pilihan `-L' "
@@ -2990,7 +2998,6 @@ msgstr ""
 "    Selalu gagal."
 
 #: builtins.c:471
-#, fuzzy
 msgid ""
 "Execute a simple command or display information about commands.\n"
 "    \n"
@@ -3018,11 +3025,11 @@ msgstr ""
 "    dalam disk ketika sebuah fungsi dengan nama yang sama ada.\n"
 "    \n"
 "    Pilihan:\n"
-"      -p\tgunakan sebuah nilai default untuk PATH yang menjamin untuk "
+"      -p    gunakan sebuah nilai default untuk PATH yang menjamin untuk "
 "mencari seluruh\n"
-"    \tpenggunaan stadar\n"
-"      -v\tmenampilkan deskripsi dari PERINTAH sama dengan `type' builtin\n"
-"      -V\tmenampilkan lebih jelas deskripsi dari setiap PERINTAH\n"
+"            penggunaan stadar\n"
+"      -v    menampilkan deskripsi dari PERINTAH sama dengan `type' builtin\n"
+"      -V    menampilkan lebih jelas deskripsi dari setiap PERINTAH\n"
 "    \n"
 "    Status Keluar:\n"
 "    Mengembalikan status keluar dari PERINTAH, atau gagal jika PERINTAH "
@@ -3105,7 +3112,6 @@ msgstr ""
 "sebuah error terjadi."
 
 #: builtins.c:532
-#, fuzzy
 msgid ""
 "Set variable values and attributes.\n"
 "    \n"
@@ -3113,7 +3119,7 @@ msgid ""
 msgstr ""
 "Menset nilai variabel dan atribut.\n"
 "    \n"
-"    Kadaluarsa. Lihat `help declare'."
+"    Sama dengan `declare'. Lihat `help declare'."
 
 #: builtins.c:540
 msgid ""
@@ -3788,7 +3794,6 @@ msgstr ""
 "    Jika -x digunakan, mengembalikan status keluar dari PERINTAH."
 
 #: builtins.c:906
-#, fuzzy
 msgid ""
 "Remove jobs from current shell.\n"
 "    \n"
@@ -3813,7 +3818,7 @@ msgstr ""
 "      -a\thapus seluruh pekerjaan jika JOBSPEC tidak diberikan\n"
 "      -h\ttandai setiap JOBSPEC sehingga SIGHUP tidak dikirim ke pekerjaan "
 "jika\n"
-"    \tshell menerima sebuah SIGHUP\n"
+"    \t\tshell menerima sebuah SIGHUP\n"
 "      -r\thapus hanya pekerjaan yang sedang berjalan\n"
 "    \n"
 "    Status Keluar:\n"
@@ -3965,7 +3970,9 @@ msgid ""
 "    word to the second NAME, and so on, with any leftover words assigned to\n"
 "    the last NAME.  Only the characters found in $IFS are recognized as "
 "word\n"
-"    delimiters.\n"
+"    delimiters. By default, the backslash character escapes delimiter "
+"characters\n"
+"    and newline.\n"
 "    \n"
 "    If no NAMEs are supplied, the line read is stored in the REPLY "
 "variable.\n"
@@ -4056,7 +4063,7 @@ msgstr ""
 "    atau sebuah berkas deskripsi disupply sebagai sebuah argumen ke pilihan -"
 "u."
 
-#: builtins.c:1041
+#: builtins.c:1042
 msgid ""
 "Return from a shell function.\n"
 "    \n"
@@ -4078,7 +4085,7 @@ msgstr ""
 "    Mengembalikan N, atau gagal jika shell tidak menjalan sebuah fungsi atau "
 "script."
 
-#: builtins.c:1054
+#: builtins.c:1055
 #, fuzzy
 msgid ""
 "Set or unset values of shell options and positional parameters.\n"
@@ -4255,7 +4262,7 @@ msgstr ""
 "    Status Keluar:\n"
 "    Mengembalikan sukses kecuali sebuah pilihan tidak valid diberikan."
 
-#: builtins.c:1139
+#: builtins.c:1140
 #, fuzzy
 msgid ""
 "Unset values and attributes of shell variables and functions.\n"
@@ -4295,7 +4302,7 @@ msgstr ""
 "    Mengembalikan sukses kecuali sebuah pilihan tidak valid diberikan atau "
 "sebuah NAMA adalah baca-saja."
 
-#: builtins.c:1161
+#: builtins.c:1162
 msgid ""
 "Set export attribute for shell variables.\n"
 "    \n"
@@ -4330,7 +4337,7 @@ msgstr ""
 "    Mengembalikan sukses kecuali sebuah pilihan tidak valid diberikan atau "
 "NAMA tidak valid."
 
-#: builtins.c:1180
+#: builtins.c:1181
 #, fuzzy
 msgid ""
 "Mark shell variables as unchangeable.\n"
@@ -4371,7 +4378,7 @@ msgstr ""
 "    Mengembalikan sukses kecual sebuah pilihan tidak valid diberikan atau "
 "NAMA tidak valid."
 
-#: builtins.c:1202
+#: builtins.c:1203
 msgid ""
 "Shift positional parameters.\n"
 "    \n"
@@ -4389,7 +4396,7 @@ msgstr ""
 "    Status Keluar:\n"
 "    Mengembalikan sukses kecuali N adalah negatif atau lebih besar dari $#."
 
-#: builtins.c:1214 builtins.c:1229
+#: builtins.c:1215 builtins.c:1230
 msgid ""
 "Execute commands from a file in the current shell.\n"
 "    \n"
@@ -4415,7 +4422,7 @@ msgstr ""
 "BERKAS; gagal jika\n"
 "    NAMA BERKAS tidak dapat dibaca."
 
-#: builtins.c:1245
+#: builtins.c:1246
 msgid ""
 "Suspend shell execution.\n"
 "    \n"
@@ -4441,7 +4448,7 @@ msgstr ""
 "    Mengembalikan sukses kecuali pengontrol pekerjaan tidak aktif atau "
 "sebuah error terjadi."
 
-#: builtins.c:1261
+#: builtins.c:1262
 #, fuzzy
 msgid ""
 "Evaluate conditional expression.\n"
@@ -4608,7 +4615,7 @@ msgstr ""
 "EXPR mengevaluasi ke\n"
 "       salah atau sebuah argumen tidak valid diberikan."
 
-#: builtins.c:1343
+#: builtins.c:1344
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -4620,7 +4627,7 @@ msgstr ""
 "    Ini sinonim untuk \"test\" builtin, tetapi argumen terakhir\n"
 "    harus berupa sebuah literal `]', untuk mencocokan dengan pembukaan `['."
 
-#: builtins.c:1352
+#: builtins.c:1353
 msgid ""
 "Display process times.\n"
 "    \n"
@@ -4640,7 +4647,7 @@ msgstr ""
 "    Status Keluar:\n"
 "    Selalu sukses."
 
-#: builtins.c:1364
+#: builtins.c:1365
 msgid ""
 "Trap signals and other events.\n"
 "    \n"
@@ -4721,7 +4728,7 @@ msgstr ""
 "    Mengembalikan sukses kecuali sebuah SIGSPEC adalah tidak valid atau "
 "sebuah pilihan tidak valid diberikan."
 
-#: builtins.c:1400
+#: builtins.c:1401
 #, fuzzy
 msgid ""
 "Display information about command type.\n"
@@ -4784,7 +4791,7 @@ msgstr ""
 "    Mengembalikan sukses jika seluruh dari NAMA ditemukan; gagal jika ada "
 "yang tidak ditemukan."
 
-#: builtins.c:1431
+#: builtins.c:1432
 #, fuzzy
 msgid ""
 "Modify shell resource limits.\n"
@@ -4879,7 +4886,7 @@ msgstr ""
 "    Mengembalikan sukses kecuali sebuah pilihan tidak valid diberikan atau "
 "sebuah error terjadi."
 
-#: builtins.c:1482
+#: builtins.c:1483
 msgid ""
 "Display or set file mode mask.\n"
 "    \n"
@@ -4917,7 +4924,7 @@ msgstr ""
 "    Mengembalikan sukses kecuali MODE tidak valid atau sebuah pilihan tidak "
 "valid diberikan."
 
-#: builtins.c:1502
+#: builtins.c:1503
 #, fuzzy
 msgid ""
 "Wait for job completion and return exit status.\n"
@@ -4965,7 +4972,7 @@ msgstr ""
 "pilihan tidak\n"
 "    valid diberikan."
 
-#: builtins.c:1533
+#: builtins.c:1534
 msgid ""
 "Wait for process completion and return exit status.\n"
 "    \n"
@@ -4991,7 +4998,7 @@ msgstr ""
 "pilihan tidak valid\n"
 "    diberikan."
 
-#: builtins.c:1548
+#: builtins.c:1549
 msgid ""
 "Execute commands for each member in a list.\n"
 "    \n"
@@ -5015,7 +5022,7 @@ msgstr ""
 "    Status Keluar:\n"
 "    Mengembalikan status dari perintah terakhir yang dijalankan."
 
-#: builtins.c:1562
+#: builtins.c:1563
 msgid ""
 "Arithmetic for loop.\n"
 "    \n"
@@ -5045,7 +5052,7 @@ msgstr ""
 "    Status Keluar:\n"
 "    Mengembalikan status dari perintah terakhir yang dijalankan."
 
-#: builtins.c:1580
+#: builtins.c:1581
 msgid ""
 "Select words from a list and execute commands.\n"
 "    \n"
@@ -5082,7 +5089,7 @@ msgstr ""
 "    Status Keluar:\n"
 "    Mengembalikan status dari perintah terakhir yang dijalankan."
 
-#: builtins.c:1601
+#: builtins.c:1602
 msgid ""
 "Report time consumed by pipeline's execution.\n"
 "    \n"
@@ -5110,7 +5117,7 @@ msgstr ""
 "    Status Keluar:\n"
 "    Status kembali adalah status kembali dari PIPELINE."
 
-#: builtins.c:1618
+#: builtins.c:1619
 msgid ""
 "Execute commands based on pattern matching.\n"
 "    \n"
@@ -5128,7 +5135,7 @@ msgstr ""
 "    Status Keluar:\n"
 "    Mengembalikan setatus dari perintah terakhir yang dijalankan."
 
-#: builtins.c:1630
+#: builtins.c:1631
 msgid ""
 "Execute commands based on conditional.\n"
 "    \n"
@@ -5166,12 +5173,14 @@ msgstr ""
 "    Status Keluar:\n"
 "    Mengembalikan status dari perintah terakhir yang dijalankan."
 
-#: builtins.c:1647
+#: builtins.c:1648
+#, fuzzy
 msgid ""
 "Execute commands as long as a test succeeds.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `while' COMMANDS has an exit status of zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS "
+"has\n"
+"    an exit status of zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
@@ -5184,12 +5193,14 @@ msgstr ""
 "    Status Keluar:\n"
 "    Mengembalikan status dari perintah terakhir yang dijalankan."
 
-#: builtins.c:1659
+#: builtins.c:1660
+#, fuzzy
 msgid ""
 "Execute commands as long as a test does not succeed.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `until' COMMANDS has an exit status which is not zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS "
+"has\n"
+"    an exit status which is not zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
@@ -5201,8 +5212,7 @@ msgstr ""
 "    Status Keluar:\n"
 "    Mengembalikan status dari perintah terakhir yang dijalankan."
 
-#: builtins.c:1671
-#, fuzzy
+#: builtins.c:1672
 msgid ""
 "Create a coprocess named NAME.\n"
 "    \n"
@@ -5223,9 +5233,9 @@ msgstr ""
 "    Nama baku adalah \"COPROC\".\n"
 "    \n"
 "    Status Keluar:\n"
-"    Mengembalikan status keluar dari PERINTAH."
+"    Perintah coproc mengembalikan status keluar 0."
 
-#: builtins.c:1685
+#: builtins.c:1686
 msgid ""
 "Define shell function.\n"
 "    \n"
@@ -5250,7 +5260,7 @@ msgstr ""
 "    Status Keluar:\n"
 "    Mengembalikan sukses kecuali NAMA adalah baca-saja."
 
-#: builtins.c:1699
+#: builtins.c:1700
 msgid ""
 "Group commands as a unit.\n"
 "    \n"
@@ -5269,7 +5279,7 @@ msgstr ""
 "    Status Keluar:\n"
 "    Mengembalikan status dari perintah terakhir yang dieksekusi."
 
-#: builtins.c:1711
+#: builtins.c:1712
 msgid ""
 "Resume job in foreground.\n"
 "    \n"
@@ -5296,8 +5306,7 @@ msgstr ""
 "    Status Keluar:\n"
 "    Mengembalikan status dari pekerjaan yang dilanjutkan."
 
-#: builtins.c:1726
-#, fuzzy
+#: builtins.c:1727
 msgid ""
 "Evaluate arithmetic expression.\n"
 "    \n"
@@ -5310,12 +5319,12 @@ msgstr ""
 "Evaluasi ekspresi arithmetic.\n"
 "    \n"
 "    EXPRESI dievaluasi berdasarkan dalam aturan evaluasi\n"
-"    arithmetic. Sama dengan \"let EXPRESI\".\n"
+"    arithmetic. Sama dengan `let \"EXPRESI\"'.\n"
 "    \n"
 "    Status Keluar:\n"
 "    Mengembalikan 1 jika EXPRESI dievaluasi ke 0; mengembalikan 0 jika tidak."
 
-#: builtins.c:1738
+#: builtins.c:1739
 msgid ""
 "Execute conditional command.\n"
 "    \n"
@@ -5372,7 +5381,7 @@ msgstr ""
 "    Status Keluar:\n"
 "    0 atau 1 tergantun dari nilai dari EKSPRESI."
 
-#: builtins.c:1764
+#: builtins.c:1765
 msgid ""
 "Common shell variable names and usage.\n"
 "    \n"
@@ -5486,7 +5495,7 @@ msgstr ""
 "digunakan untuk menentukan dimana\n"
 "    \t\tperintah seharusnya disimpan dalam daftar sejarah.\n"
 
-#: builtins.c:1821
+#: builtins.c:1822
 #, fuzzy
 msgid ""
 "Add directories to stack.\n"
@@ -5547,7 +5556,7 @@ msgstr ""
 "atau pemindahan\n"
 "    direktori gagal."
 
-#: builtins.c:1855
+#: builtins.c:1856
 #, fuzzy
 msgid ""
 "Remove directories from stack.\n"
@@ -5603,7 +5612,7 @@ msgstr ""
 "atau pemindahan\n"
 "    direktori gagal."
 
-#: builtins.c:1885
+#: builtins.c:1886
 #, fuzzy
 msgid ""
 "Display directory stack.\n"
@@ -5660,7 +5669,7 @@ msgstr ""
 "    Mengembalikan sukses kecuali ada sebuah pilihan tidak valid diberikan "
 "atau sebuah error terjadi."
 
-#: builtins.c:1916
+#: builtins.c:1917
 #, fuzzy
 msgid ""
 "Set and unset shell options.\n"
@@ -5699,7 +5708,7 @@ msgstr ""
 "tidak valid diberikan\n"
 "    atau OPTNAME dinonaktifkan."
 
-#: builtins.c:1937
+#: builtins.c:1938
 #, fuzzy
 msgid ""
 "Formats and prints ARGUMENTS under control of the FORMAT.\n"
@@ -5723,6 +5732,8 @@ msgid ""
 "    \n"
 "      %b\texpand backslash escape sequences in the corresponding argument\n"
 "      %q\tquote the argument in a way that can be reused as shell input\n"
+"      %Q\tlike %q, but apply any precision to the unquoted argument before\n"
+"    \t\tquoting\n"
 "      %(fmt)T\toutput the date-time string resulting from using FMT as a "
 "format\n"
 "    \t        string for strftime(3)\n"
@@ -5764,7 +5775,7 @@ msgstr ""
 "sebuah penulisan atau penempatan\n"
 "    error terjadi."
 
-#: builtins.c:1971
+#: builtins.c:1974
 #, fuzzy
 msgid ""
 "Specify how arguments are to be completed by Readline.\n"
@@ -5822,7 +5833,7 @@ msgstr ""
 "    Mengembalikan sukses kecuali sebuah pilihan tidak valid diberikan atau "
 "sebuah error terjadi."
 
-#: builtins.c:2001
+#: builtins.c:2004
 msgid ""
 "Display possible completions depending on the options.\n"
 "    \n"
@@ -5845,7 +5856,7 @@ msgstr ""
 "    Mengembalikan sukses kecuali sebuah pilihan tidak valid diberikan atau "
 "sebuah error terjadi."
 
-#: builtins.c:2016
+#: builtins.c:2019
 #, fuzzy
 msgid ""
 "Modify or display completion options.\n"
@@ -5909,7 +5920,7 @@ msgstr ""
 "NAMA tidak memiliki\n"
 "    spesifikasi penyelesaian yang terdefinisi."
 
-#: builtins.c:2047
+#: builtins.c:2050
 #, fuzzy
 msgid ""
 "Read lines from the standard input into an indexed array variable.\n"
@@ -5987,7 +5998,7 @@ msgstr ""
 "    Mengembalikan sukses kecuali sebuah pilihan tidak valid diberikan atau "
 "ARRAY adalah baca-saja."
 
-#: builtins.c:2083
+#: builtins.c:2086
 msgid ""
 "Read lines from a file into an array variable.\n"
 "    \n"
@@ -5997,9 +6008,9 @@ msgstr ""
 "    \n"
 "    Sebuah sinonim untuk `mapfile'."
 
-#, fuzzy
-#~ msgid "Copyright (C) 2019 Free Software Foundation, Inc."
-#~ msgstr "Hak Cipta (C) 2013 Free Software Foundation, Inc."
+#, c-format
+#~ msgid "%s: invalid associative array key"
+#~ msgstr "%s: kunci array assosiasi tidak valid"
 
 #~ msgid ""
 #~ "Returns the context of the current subroutine call.\n"
@@ -6016,6 +6027,9 @@ msgstr ""
 #~ msgid "Unknown Signal #"
 #~ msgstr "Sinyal tidak diketahui #"
 
+#~ msgid "Copyright (C) 2013 Free Software Foundation, Inc."
+#~ msgstr "Hak Cipta (C) 2013 Free Software Foundation, Inc."
+
 #~ msgid ":"
 #~ msgstr ":"
 
index 4bbd10a4e300f3ea4f654c759073cd8a7cca9e1d..f23813b05ee1d7a26928f8941d0cca9d72a56891 100644 (file)
Binary files a/po/it.gmo and b/po/it.gmo differ
index 1defc4061cfa8bc632c3c08a842d2d0c14651404..ec0ebc4ccb8e5f6f7ae9296eb82359ca793d10be 100644 (file)
--- a/po/it.po
+++ b/po/it.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: bash-4.2\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-11-28 12:51-0500\n"
+"POT-Creation-Date: 2022-01-11 14:50-0500\n"
 "PO-Revision-Date: 2011-10-17 09:14+0200\n"
 "Last-Translator: Sergio Zanchetta <primes2h@ubuntu.com>\n"
 "Language-Team: Italian <tp@lists.linux.it>\n"
@@ -22,59 +22,54 @@ msgstr ""
 msgid "bad array subscript"
 msgstr "indice dell'array errato"
 
-#: arrayfunc.c:421 builtins/declare.def:638 variables.c:2274 variables.c:2300
-#: variables.c:3133
+#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268
+#: variables.c:3101
 #, c-format
 msgid "%s: removing nameref attribute"
 msgstr ""
 
-#: arrayfunc.c:446 builtins/declare.def:851
+#: arrayfunc.c:496 builtins/declare.def:868
 #, c-format
 msgid "%s: cannot convert indexed to associative array"
 msgstr "%s: impossibile convertire un array indicizzato in uno associativo"
 
-#: arrayfunc.c:700
-#, c-format
-msgid "%s: invalid associative array key"
-msgstr "%s: chiave dell'array associativo non valida"
-
-#: arrayfunc.c:702
+#: arrayfunc.c:777
 #, c-format
 msgid "%s: cannot assign to non-numeric index"
 msgstr "%s: impossibile assegnare a un indice non numerico"
 
-#: arrayfunc.c:747
+#: arrayfunc.c:822
 #, c-format
 msgid "%s: %s: must use subscript when assigning associative array"
 msgstr ""
 "%s: %s: deve essere usato un indice nell'assegnazione di un array associativo"
 
-#: bashhist.c:452
+#: bashhist.c:455
 #, c-format
 msgid "%s: cannot create: %s"
 msgstr "%s: impossibile creare: %s"
 
-#: bashline.c:4310
+#: bashline.c:4479
 msgid "bash_execute_unix_command: cannot find keymap for command"
 msgstr ""
 "bash_execute_unix_command: impossibile trovare una mappatura per il comando"
 
-#: bashline.c:4459
+#: bashline.c:4637
 #, c-format
 msgid "%s: first non-whitespace character is not `\"'"
 msgstr "%s: il primo carattere non spazio non è \"\"\""
 
-#: bashline.c:4488
+#: bashline.c:4666
 #, c-format
 msgid "no closing `%c' in %s"
 msgstr "carattere di chiusura \"%c\" non presente in %s"
 
-#: bashline.c:4519
+#: bashline.c:4697
 #, c-format
 msgid "%s: missing colon separator"
 msgstr "%s: separatore di tipo due punti mancante"
 
-#: bashline.c:4555
+#: bashline.c:4733
 #, fuzzy, c-format
 msgid "`%s': cannot unbind in command keymap"
 msgstr "\"%s\": impossibile eliminare l'associazione"
@@ -94,7 +89,7 @@ msgstr ""
 msgid "brace expansion: failed to allocate memory for `%s'"
 msgstr ""
 
-#: builtins/alias.def:131 variables.c:1844
+#: builtins/alias.def:131 variables.c:1817
 #, c-format
 msgid "`%s': invalid alias name"
 msgstr "\"%s\": nome alias non valido"
@@ -173,7 +168,7 @@ msgstr ""
 msgid "HOME not set"
 msgstr "HOME non impostata"
 
-#: builtins/cd.def:335 builtins/common.c:161 test.c:901
+#: builtins/cd.def:335 builtins/common.c:161 test.c:916
 msgid "too many arguments"
 msgstr "troppi argomenti"
 
@@ -201,7 +196,7 @@ msgstr "attenzione: "
 msgid "%s: usage: "
 msgstr "%s: uso: "
 
-#: builtins/common.c:193 shell.c:516 shell.c:844
+#: builtins/common.c:193 shell.c:524 shell.c:866
 #, c-format
 msgid "%s: option requires an argument"
 msgstr "%s: l'opzione richiede un argomento"
@@ -216,7 +211,7 @@ msgstr "%s: è necessario un argomento numerico"
 msgid "%s: not found"
 msgstr "%s: non trovata"
 
-#: builtins/common.c:216 shell.c:857
+#: builtins/common.c:216 shell.c:879
 #, c-format
 msgid "%s: invalid option"
 msgstr "%s: opzione non valida"
@@ -226,7 +221,7 @@ msgstr "%s: opzione non valida"
 msgid "%s: invalid option name"
 msgstr "%s: nome dell'opzione non valido"
 
-#: builtins/common.c:230 execute_cmd.c:2373 general.c:368 general.c:373
+#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373
 #, c-format
 msgid "`%s': not a valid identifier"
 msgstr "\"%s\": non è un identificatore valido"
@@ -239,7 +234,7 @@ msgstr "numero ottale non valido"
 msgid "invalid hex number"
 msgstr "numero esadecimale non valido"
 
-#: builtins/common.c:244 expr.c:1569
+#: builtins/common.c:244 expr.c:1574
 msgid "invalid number"
 msgstr "numero non valido"
 
@@ -253,88 +248,93 @@ msgstr "%s: specifica di segnale non valida"
 msgid "`%s': not a pid or valid job spec"
 msgstr "\"%s\": non è un pid o un numero di job valido"
 
-#: builtins/common.c:266 error.c:510
+#: builtins/common.c:266 error.c:536
 #, c-format
 msgid "%s: readonly variable"
 msgstr "%s: variabile in sola lettura"
 
-#: builtins/common.c:274
+#: builtins/common.c:273
+#, fuzzy, c-format
+msgid "%s: cannot assign"
+msgstr "%s: impossibile azzerare"
+
+#: builtins/common.c:281
 #, c-format
 msgid "%s: %s out of range"
 msgstr "%s: %s fuori dall'intervallo"
 
-#: builtins/common.c:274 builtins/common.c:276
+#: builtins/common.c:281 builtins/common.c:283
 msgid "argument"
 msgstr "argomento"
 
-#: builtins/common.c:276
+#: builtins/common.c:283
 #, c-format
 msgid "%s out of range"
 msgstr "%s fuori dall'intervallo"
 
-#: builtins/common.c:284
+#: builtins/common.c:291
 #, c-format
 msgid "%s: no such job"
 msgstr "%s: job inesistente"
 
-#: builtins/common.c:292
+#: builtins/common.c:299
 #, c-format
 msgid "%s: no job control"
 msgstr "%s: nessun controllo dei job"
 
-#: builtins/common.c:294
+#: builtins/common.c:301
 msgid "no job control"
 msgstr "nessun controllo dei job"
 
-#: builtins/common.c:304
+#: builtins/common.c:311
 #, c-format
 msgid "%s: restricted"
 msgstr "%s: limitato"
 
-#: builtins/common.c:306
+#: builtins/common.c:313
 msgid "restricted"
 msgstr "limitato"
 
-#: builtins/common.c:314
+#: builtins/common.c:321
 #, c-format
 msgid "%s: not a shell builtin"
 msgstr "%s: non è un comando interno di shell"
 
-#: builtins/common.c:323
+#: builtins/common.c:330
 #, c-format
 msgid "write error: %s"
 msgstr "errore in scrittura: %s"
 
-#: builtins/common.c:331
+#: builtins/common.c:338
 #, c-format
 msgid "error setting terminal attributes: %s"
 msgstr "errore nell'impostazione degli attributi del terminale: %s"
 
-#: builtins/common.c:333
+#: builtins/common.c:340
 #, c-format
 msgid "error getting terminal attributes: %s"
 msgstr "errore nel recupero degli attributi del terminale: %s"
 
-#: builtins/common.c:635
+#: builtins/common.c:642
 #, c-format
 msgid "%s: error retrieving current directory: %s: %s\n"
 msgstr "%s: errore nel recupero della directory corrente: %s: %s\n"
 
-#: builtins/common.c:701 builtins/common.c:703
+#: builtins/common.c:708 builtins/common.c:710
 #, c-format
 msgid "%s: ambiguous job spec"
 msgstr "%s: specifica di job ambigua"
 
-#: builtins/common.c:964
+#: builtins/common.c:971
 msgid "help not available in this version"
 msgstr ""
 
-#: builtins/common.c:1008 builtins/set.def:953 variables.c:3839
+#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825
 #, c-format
 msgid "%s: cannot unset: readonly %s"
 msgstr "%s: impossibile azzerare: %s in sola lettura"
 
-#: builtins/common.c:1013 builtins/set.def:932 variables.c:3844
+#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830
 #, c-format
 msgid "%s: cannot unset"
 msgstr "%s: impossibile azzerare"
@@ -344,108 +344,108 @@ msgstr "%s: impossibile azzerare"
 msgid "%s: invalid action name"
 msgstr "%s: nome azione non valido"
 
-#: builtins/complete.def:486 builtins/complete.def:634
-#: builtins/complete.def:865
+#: builtins/complete.def:486 builtins/complete.def:642
+#: builtins/complete.def:873
 #, c-format
 msgid "%s: no completion specification"
 msgstr "%s: nessun completamento specificato"
 
-#: builtins/complete.def:688
+#: builtins/complete.def:696
 msgid "warning: -F option may not work as you expect"
 msgstr "attenzione: l'opzione -F potrebbe non funzionare come previsto"
 
-#: builtins/complete.def:690
+#: builtins/complete.def:698
 msgid "warning: -C option may not work as you expect"
 msgstr "attenzione: l'opzione -C potrebbe non funzionare come previsto"
 
-#: builtins/complete.def:838
+#: builtins/complete.def:846
 msgid "not currently executing completion function"
 msgstr "funzione di completamento attualmente non in esecuzione"
 
-#: builtins/declare.def:134
+#: builtins/declare.def:137
 msgid "can only be used in a function"
 msgstr "può essere usato solo in una funzione"
 
-#: builtins/declare.def:363 builtins/declare.def:756
+#: builtins/declare.def:437
+msgid "cannot use `-f' to make functions"
+msgstr "impossibile usare \"-f\" per creare funzioni"
+
+#: builtins/declare.def:464 execute_cmd.c:6132
+#, c-format
+msgid "%s: readonly function"
+msgstr "%s: funzione in sola lettura"
+
+#: builtins/declare.def:521 builtins/declare.def:804
 #, c-format
 msgid "%s: reference variable cannot be an array"
 msgstr ""
 
-#: builtins/declare.def:374 variables.c:3385
+#: builtins/declare.def:532 variables.c:3359
 #, c-format
 msgid "%s: nameref variable self references not allowed"
 msgstr ""
 
-#: builtins/declare.def:379 variables.c:2104 variables.c:3304 variables.c:3312
-#: variables.c:3382
+#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286
+#: variables.c:3356
 #, c-format
 msgid "%s: circular name reference"
 msgstr ""
 
-#: builtins/declare.def:384 builtins/declare.def:762 builtins/declare.def:773
+#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820
 #, fuzzy, c-format
 msgid "`%s': invalid variable name for name reference"
 msgstr "\"%s\": nome alias non valido"
 
-#: builtins/declare.def:514
-msgid "cannot use `-f' to make functions"
-msgstr "impossibile usare \"-f\" per creare funzioni"
-
-#: builtins/declare.def:526 execute_cmd.c:5986
-#, c-format
-msgid "%s: readonly function"
-msgstr "%s: funzione in sola lettura"
-
-#: builtins/declare.def:824
-#, c-format
-msgid "%s: quoted compound array assignment deprecated"
-msgstr ""
-
-#: builtins/declare.def:838
+#: builtins/declare.def:856
 #, c-format
 msgid "%s: cannot destroy array variables in this way"
 msgstr "%s: impossibile eliminare variabili array in questo modo"
 
-#: builtins/declare.def:845 builtins/read.def:815
+#: builtins/declare.def:862 builtins/read.def:887
 #, c-format
 msgid "%s: cannot convert associative to indexed array"
 msgstr "%s: impossibile convertire un array associativo in uno indicizzato"
 
-#: builtins/enable.def:143 builtins/enable.def:151
+#: builtins/declare.def:891
+#, c-format
+msgid "%s: quoted compound array assignment deprecated"
+msgstr ""
+
+#: builtins/enable.def:145 builtins/enable.def:153
 msgid "dynamic loading not available"
 msgstr "caricamento dinamico non disponibile"
 
-#: builtins/enable.def:343
+#: builtins/enable.def:376
 #, c-format
 msgid "cannot open shared object %s: %s"
 msgstr "impossibile aprire l'oggetto condiviso %s: %s"
 
-#: builtins/enable.def:371
+#: builtins/enable.def:405
 #, c-format
 msgid "cannot find %s in shared object %s: %s"
 msgstr "impossibile trovare %s nell'oggetto condiviso %s: %s"
 
-#: builtins/enable.def:388
+#: builtins/enable.def:422
 #, fuzzy, c-format
 msgid "%s: dynamic builtin already loaded"
 msgstr "%s: non caricato dinamicamente"
 
-#: builtins/enable.def:392
+#: builtins/enable.def:426
 #, c-format
 msgid "load function for %s returns failure (%d): not loaded"
 msgstr ""
 
-#: builtins/enable.def:517
+#: builtins/enable.def:551
 #, c-format
 msgid "%s: not dynamically loaded"
 msgstr "%s: non caricato dinamicamente"
 
-#: builtins/enable.def:543
+#: builtins/enable.def:577
 #, c-format
 msgid "%s: cannot delete: %s"
 msgstr "%s: impossibile eliminare: %s"
 
-#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5818
+#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959
 #, c-format
 msgid "%s: is a directory"
 msgstr "%s: è una directory"
@@ -460,7 +460,7 @@ msgstr "%s: non è un file regolare"
 msgid "%s: file is too large"
 msgstr "%s: file troppo grande"
 
-#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1647
+#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673
 #, c-format
 msgid "%s: cannot execute binary file"
 msgstr "%s: impossibile eseguire il file binario"
@@ -556,12 +556,12 @@ msgstr ""
 "nessun argomento della guida corrisponde a \"%s\". Provare \"help help\" o "
 "\"man -k %s\" o \"info %s\"."
 
-#: builtins/help.def:224
+#: builtins/help.def:223
 #, c-format
 msgid "%s: cannot open: %s"
 msgstr "%s: impossibile aprire: %s"
 
-#: builtins/help.def:524
+#: builtins/help.def:523
 #, c-format
 msgid ""
 "These shell commands are defined internally.  Type `help' to see this list.\n"
@@ -582,21 +582,21 @@ msgstr ""
 "Un asterisco (*) vicino a un nome significa che il comando è disabilitato.\n"
 "\n"
 
-#: builtins/history.def:155
+#: builtins/history.def:159
 msgid "cannot use more than one of -anrw"
 msgstr "impossibile usare più di uno tra -anrw"
 
-#: builtins/history.def:188 builtins/history.def:198 builtins/history.def:213
-#: builtins/history.def:230 builtins/history.def:242 builtins/history.def:249
+#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215
+#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247
 msgid "history position"
 msgstr "posizione nella cronologia"
 
-#: builtins/history.def:340
+#: builtins/history.def:338
 #, fuzzy, c-format
 msgid "%s: invalid timestamp"
 msgstr "%s: nome dell'opzione non valido"
 
-#: builtins/history.def:451
+#: builtins/history.def:449
 #, c-format
 msgid "%s: history expansion failed"
 msgstr "%s: espansione della cronologia non riuscita"
@@ -619,78 +619,78 @@ msgstr "%s: gli argomenti devono essere ID di processo o di job"
 msgid "Unknown error"
 msgstr "Errore sconosciuto"
 
-#: builtins/let.def:97 builtins/let.def:122 expr.c:639 expr.c:657
+#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658
 msgid "expression expected"
 msgstr "attesa espressione"
 
-#: builtins/mapfile.def:178
+#: builtins/mapfile.def:180
 #, c-format
 msgid "%s: not an indexed array"
 msgstr "%s: non è un array indicizzato"
 
-#: builtins/mapfile.def:271 builtins/read.def:308
+#: builtins/mapfile.def:276 builtins/read.def:336
 #, c-format
 msgid "%s: invalid file descriptor specification"
 msgstr "%s: specifica di descrittore di file non valida"
 
-#: builtins/mapfile.def:279 builtins/read.def:315
+#: builtins/mapfile.def:284 builtins/read.def:343
 #, c-format
 msgid "%d: invalid file descriptor: %s"
 msgstr "%d: descrittore di file non valido: %s"
 
-#: builtins/mapfile.def:288 builtins/mapfile.def:326
+#: builtins/mapfile.def:293 builtins/mapfile.def:331
 #, c-format
 msgid "%s: invalid line count"
 msgstr "%s: numero di righe non valido"
 
-#: builtins/mapfile.def:299
+#: builtins/mapfile.def:304
 #, c-format
 msgid "%s: invalid array origin"
 msgstr "%s: origine dell'array non valida"
 
-#: builtins/mapfile.def:316
+#: builtins/mapfile.def:321
 #, c-format
 msgid "%s: invalid callback quantum"
 msgstr "%s: quantum di callback non valido"
 
-#: builtins/mapfile.def:349
+#: builtins/mapfile.def:354
 msgid "empty array variable name"
 msgstr "nome della variabile array vuoto"
 
-#: builtins/mapfile.def:370
+#: builtins/mapfile.def:375
 msgid "array variable support required"
 msgstr "necessario il supporto alla variabile array"
 
-#: builtins/printf.def:419
+#: builtins/printf.def:430
 #, c-format
 msgid "`%s': missing format character"
 msgstr "\"%s\": manca il carattere di formato"
 
-#: builtins/printf.def:474
+#: builtins/printf.def:485
 #, c-format
 msgid "`%c': invalid time format specification"
 msgstr "\"%c\": specifica di formato dell'orario non valida"
 
-#: builtins/printf.def:676
+#: builtins/printf.def:708
 #, c-format
 msgid "`%c': invalid format character"
 msgstr "\"%c\": carattere di formato non valido"
 
-#: builtins/printf.def:702
+#: builtins/printf.def:734
 #, c-format
 msgid "warning: %s: %s"
 msgstr "attenzione: %s: %s"
 
-#: builtins/printf.def:788
+#: builtins/printf.def:822
 #, c-format
 msgid "format parsing problem: %s"
 msgstr ""
 
-#: builtins/printf.def:885
+#: builtins/printf.def:919
 msgid "missing hex digit for \\x"
 msgstr "cifra esadecimale mancante in \\x"
 
-#: builtins/printf.def:900
+#: builtins/printf.def:934
 #, c-format
 msgid "missing unicode digit for \\%c"
 msgstr "cifra unicode mancante in \\%c"
@@ -843,12 +843,12 @@ msgstr ""
 "    \n"
 "    Il comando interno \"dirs\" visualizza lo stack delle directory."
 
-#: builtins/read.def:280
+#: builtins/read.def:308
 #, c-format
 msgid "%s: invalid timeout specification"
 msgstr "%s: specifica di timeout non valida"
 
-#: builtins/read.def:755
+#: builtins/read.def:827
 #, c-format
 msgid "read error: %d: %s"
 msgstr "errore in lettura: %d: %s"
@@ -862,7 +862,7 @@ msgstr ""
 msgid "cannot simultaneously unset a function and a variable"
 msgstr "impossibile azzerare contemporaneamente una funzione e una variabile"
 
-#: builtins/set.def:966
+#: builtins/set.def:969
 #, c-format
 msgid "%s: not an array variable"
 msgstr "%s: non è una variabile array"
@@ -881,11 +881,11 @@ msgstr "%s: impossibile azzerare"
 msgid "shift count"
 msgstr "numero di scorrimenti"
 
-#: builtins/shopt.def:310
+#: builtins/shopt.def:323
 msgid "cannot set and unset shell options simultaneously"
 msgstr "impossibile impostare e azzerare opzioni di shell contemporaneamente"
 
-#: builtins/shopt.def:428
+#: builtins/shopt.def:444
 #, c-format
 msgid "%s: invalid shell option name"
 msgstr "%s: nome dell'opzione di shell non valido"
@@ -952,16 +952,16 @@ msgstr "%s: argomento di limite non valido"
 msgid "`%c': bad command"
 msgstr "\"%c\": comando errato"
 
-#: builtins/ulimit.def:455
+#: builtins/ulimit.def:464
 #, c-format
 msgid "%s: cannot get limit: %s"
 msgstr "%s: impossibile recuperare il limite: %s"
 
-#: builtins/ulimit.def:481
+#: builtins/ulimit.def:490
 msgid "limit"
 msgstr "limite"
 
-#: builtins/ulimit.def:493 builtins/ulimit.def:793
+#: builtins/ulimit.def:502 builtins/ulimit.def:802
 #, c-format
 msgid "%s: cannot modify limit: %s"
 msgstr "%s: impossibile modificare il limite: %s"
@@ -980,7 +980,7 @@ msgstr "\"%c\": operatore di modo simbolico non valido"
 msgid "`%c': invalid symbolic mode character"
 msgstr "\"%c\": carattere di modo simbolico non valido"
 
-#: error.c:89 error.c:347 error.c:349 error.c:351
+#: error.c:89 error.c:373 error.c:375 error.c:377
 msgid " line "
 msgstr " riga "
 
@@ -1000,96 +1000,106 @@ msgstr "Interruzione..."
 msgid "INFORM: "
 msgstr ""
 
-#: error.c:462
+#: error.c:310
+#, fuzzy, c-format
+msgid "DEBUG warning: "
+msgstr "attenzione: "
+
+#: error.c:488
 msgid "unknown command error"
 msgstr "errore di comando sconosciuto"
 
-#: error.c:463
+#: error.c:489
 msgid "bad command type"
 msgstr "tipo di comando errato"
 
-#: error.c:464
+#: error.c:490
 msgid "bad connector"
 msgstr "connettore errato"
 
-#: error.c:465
+#: error.c:491
 msgid "bad jump"
 msgstr "salto errato"
 
-#: error.c:503
+#: error.c:529
 #, c-format
 msgid "%s: unbound variable"
 msgstr "%s: variabile non assegnata"
 
-#: eval.c:242
+#: eval.c:243
 msgid "\atimed out waiting for input: auto-logout\n"
 msgstr "\atempo di attesa scaduto per l'input: auto-logout\n"
 
-#: execute_cmd.c:537
+#: execute_cmd.c:555
 #, c-format
 msgid "cannot redirect standard input from /dev/null: %s"
 msgstr "impossibile redirigere lo standard input da /dev/null: %s"
 
-#: execute_cmd.c:1297
+#: execute_cmd.c:1317
 #, c-format
 msgid "TIMEFORMAT: `%c': invalid format character"
 msgstr "TIMEFORMAT: \"%c\": carattere di formato non valido"
 
-#: execute_cmd.c:2362
+#: execute_cmd.c:2391
 #, c-format
 msgid "execute_coproc: coproc [%d:%s] still exists"
 msgstr ""
 
-#: execute_cmd.c:2486
+#: execute_cmd.c:2524
 msgid "pipe error"
 msgstr "errore della pipe"
 
-#: execute_cmd.c:4793
+#: execute_cmd.c:4923
 #, c-format
 msgid "eval: maximum eval nesting level exceeded (%d)"
 msgstr ""
 
-#: execute_cmd.c:4805
+#: execute_cmd.c:4935
 #, c-format
 msgid "%s: maximum source nesting level exceeded (%d)"
 msgstr ""
 
-#: execute_cmd.c:4913
+#: execute_cmd.c:5043
 #, c-format
 msgid "%s: maximum function nesting level exceeded (%d)"
 msgstr ""
 
-#: execute_cmd.c:5467
+#: execute_cmd.c:5598
 #, c-format
 msgid "%s: restricted: cannot specify `/' in command names"
 msgstr "%s: limitato: impossibile specificare \"/\" nei nomi dei comandi"
 
-#: execute_cmd.c:5574
+#: execute_cmd.c:5715
 #, c-format
 msgid "%s: command not found"
 msgstr "%s: comando non trovato"
 
-#: execute_cmd.c:5816
+#: execute_cmd.c:5957
 #, c-format
 msgid "%s: %s"
 msgstr "%s: %s"
 
-#: execute_cmd.c:5854
+#: execute_cmd.c:5975
+#, fuzzy, c-format
+msgid "%s: cannot execute: required file not found"
+msgstr "%s: impossibile eseguire il file binario"
+
+#: execute_cmd.c:6000
 #, c-format
 msgid "%s: %s: bad interpreter"
 msgstr "%s: %s: interprete errato"
 
-#: execute_cmd.c:5891
+#: execute_cmd.c:6037
 #, fuzzy, c-format
 msgid "%s: cannot execute binary file: %s"
 msgstr "%s: impossibile eseguire il file binario"
 
-#: execute_cmd.c:5977
+#: execute_cmd.c:6123
 #, fuzzy, c-format
 msgid "`%s': is a special builtin"
 msgstr "%s è un comando interno di shell\n"
 
-#: execute_cmd.c:6029
+#: execute_cmd.c:6175
 #, c-format
 msgid "cannot duplicate fd %d to fd %d"
 msgstr "impossibile duplicare fd %d su fd %d"
@@ -1102,70 +1112,70 @@ msgstr "superato il livello di ricorsione dell'espressione"
 msgid "recursion stack underflow"
 msgstr "underflow dello stack di ricorsione"
 
-#: expr.c:477
+#: expr.c:478
 msgid "syntax error in expression"
 msgstr "errore di sintassi nell'espressione"
 
-#: expr.c:521
+#: expr.c:522
 msgid "attempted assignment to non-variable"
 msgstr "tentata un'assegnazione a una non variabile"
 
-#: expr.c:530
+#: expr.c:531
 #, fuzzy
 msgid "syntax error in variable assignment"
 msgstr "errore di sintassi nell'espressione"
 
-#: expr.c:544 expr.c:911
+#: expr.c:545 expr.c:912
 msgid "division by 0"
 msgstr "divisione per 0"
 
-#: expr.c:592
+#: expr.c:593
 msgid "bug: bad expassign token"
 msgstr "bug: token di expassign errato"
 
-#: expr.c:646
+#: expr.c:647
 msgid "`:' expected for conditional expression"
 msgstr "atteso \":\" per l'espressione condizionale"
 
-#: expr.c:972
+#: expr.c:973
 msgid "exponent less than 0"
 msgstr "esponente minore di 0"
 
-#: expr.c:1029
+#: expr.c:1030
 msgid "identifier expected after pre-increment or pre-decrement"
 msgstr "atteso identificatore dopo un pre-incremento o un pre-decremento"
 
-#: expr.c:1056
+#: expr.c:1057
 msgid "missing `)'"
 msgstr "\")\" mancante"
 
-#: expr.c:1107 expr.c:1487
+#: expr.c:1108 expr.c:1492
 msgid "syntax error: operand expected"
 msgstr "errore di sintassi: atteso un operando"
 
-#: expr.c:1489
+#: expr.c:1494
 msgid "syntax error: invalid arithmetic operator"
 msgstr "errore di sintassi: operatore aritmetico non valido"
 
-#: expr.c:1513
+#: expr.c:1518
 #, c-format
 msgid "%s%s%s: %s (error token is \"%s\")"
 msgstr "%s%s%s: %s (il token dell'errore è \"%s\")"
 
-#: expr.c:1573
+#: expr.c:1578
 msgid "invalid arithmetic base"
 msgstr "base aritmetica non valida"
 
-#: expr.c:1582
+#: expr.c:1587
 #, fuzzy
 msgid "invalid integer constant"
 msgstr "%s: numero di righe non valido"
 
-#: expr.c:1598
+#: expr.c:1603
 msgid "value too great for base"
 msgstr "valore troppo grande per la base"
 
-#: expr.c:1647
+#: expr.c:1652
 #, c-format
 msgid "%s: expression error\n"
 msgstr "%s: errore di espressione\n"
@@ -1174,7 +1184,7 @@ msgstr "%s: errore di espressione\n"
 msgid "getcwd: cannot access parent directories"
 msgstr "getcwd: impossibile accedere alle directory padre"
 
-#: input.c:99 subst.c:6069
+#: input.c:99 subst.c:6208
 #, c-format
 msgid "cannot reset nodelay mode for fd %d"
 msgstr "impossibile reimpostare il modo nodelay per fd %d"
@@ -1195,168 +1205,168 @@ msgstr "save_bash_input: buffer già esistente per il nuovo fd %d"
 msgid "start_pipeline: pgrp pipe"
 msgstr "start_pipeline: pipe pgrp"
 
-#: jobs.c:906
+#: jobs.c:907
 #, c-format
 msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr ""
 
-#: jobs.c:959
+#: jobs.c:960
 #, c-format
 msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr ""
 
-#: jobs.c:1283
+#: jobs.c:1279
 #, c-format
 msgid "forked pid %d appears in running job %d"
 msgstr "il pid %d del fork appare nel job in esecuzione %d"
 
-#: jobs.c:1402
+#: jobs.c:1397
 #, c-format
 msgid "deleting stopped job %d with process group %ld"
 msgstr "eliminazione del job %d interrotto con il gruppo di processi %ld"
 
-#: jobs.c:1511
+#: jobs.c:1502
 #, c-format
 msgid "add_process: pid %5ld (%s) marked as still alive"
 msgstr "add_process: pid %5ld (%s) segnato come ancora in vita"
 
-#: jobs.c:1850
+#: jobs.c:1839
 #, c-format
 msgid "describe_pid: %ld: no such pid"
 msgstr "describe_pid: %ld: pid inesistente"
 
-#: jobs.c:1865
+#: jobs.c:1854
 #, c-format
 msgid "Signal %d"
 msgstr "Segnale %d"
 
-#: jobs.c:1879 jobs.c:1905
+#: jobs.c:1868 jobs.c:1894
 msgid "Done"
 msgstr "Completato"
 
-#: jobs.c:1884 siglist.c:122
+#: jobs.c:1873 siglist.c:123
 msgid "Stopped"
 msgstr "Fermato"
 
-#: jobs.c:1888
+#: jobs.c:1877
 #, c-format
 msgid "Stopped(%s)"
 msgstr "Fermato(%s)"
 
-#: jobs.c:1892
+#: jobs.c:1881
 msgid "Running"
 msgstr "In esecuzione"
 
-#: jobs.c:1909
+#: jobs.c:1898
 #, c-format
 msgid "Done(%d)"
 msgstr "Eseguito(%d)"
 
-#: jobs.c:1911
+#: jobs.c:1900
 #, c-format
 msgid "Exit %d"
 msgstr "Uscita %d"
 
-#: jobs.c:1914
+#: jobs.c:1903
 msgid "Unknown status"
 msgstr "Stato sconosciuto"
 
-#: jobs.c:2001
+#: jobs.c:1990
 #, c-format
 msgid "(core dumped) "
 msgstr "(core dump creato) "
 
-#: jobs.c:2020
+#: jobs.c:2009
 #, c-format
 msgid "  (wd: %s)"
 msgstr "  (dir: %s)"
 
-#: jobs.c:2259
+#: jobs.c:2250
 #, c-format
 msgid "child setpgid (%ld to %ld)"
 msgstr "setpgid del figlio (%ld a %ld)"
 
-#: jobs.c:2617 nojobs.c:664
+#: jobs.c:2608 nojobs.c:666
 #, c-format
 msgid "wait: pid %ld is not a child of this shell"
 msgstr "wait: il pid %ld non è un figlio di questa shell"
 
-#: jobs.c:2893
+#: jobs.c:2884
 #, c-format
 msgid "wait_for: No record of process %ld"
 msgstr "wait_for: nessun record del processo %ld"
 
-#: jobs.c:3236
+#: jobs.c:3223
 #, c-format
 msgid "wait_for_job: job %d is stopped"
 msgstr "wait_for_job: il job %d è fermo"
 
-#: jobs.c:3564
+#: jobs.c:3551
 #, fuzzy, c-format
 msgid "%s: no current jobs"
 msgstr "%s: job inesistente"
 
-#: jobs.c:3571
+#: jobs.c:3558
 #, c-format
 msgid "%s: job has terminated"
 msgstr "%s: il job è terminato"
 
-#: jobs.c:3580
+#: jobs.c:3567
 #, c-format
 msgid "%s: job %d already in background"
 msgstr "%s: il job %d è già in background"
 
-#: jobs.c:3806
+#: jobs.c:3793
 msgid "waitchld: turning on WNOHANG to avoid indefinite block"
 msgstr "waitchld: attivato WNOHANG per evitare blocchi indefiniti"
 
-#: jobs.c:4320
+#: jobs.c:4307
 #, c-format
 msgid "%s: line %d: "
 msgstr "%s: riga %d: "
 
-#: jobs.c:4334 nojobs.c:919
+#: jobs.c:4321 nojobs.c:921
 #, c-format
 msgid " (core dumped)"
 msgstr " (core dump creato)"
 
-#: jobs.c:4346 jobs.c:4359
+#: jobs.c:4333 jobs.c:4346
 #, c-format
 msgid "(wd now: %s)\n"
 msgstr "(dir ora: %s)\n"
 
-#: jobs.c:4391
+#: jobs.c:4378
 msgid "initialize_job_control: getpgrp failed"
 msgstr "initialize_job_control: getpgrp non riuscita"
 
-#: jobs.c:4447
+#: jobs.c:4434
 #, fuzzy
 msgid "initialize_job_control: no job control in background"
 msgstr "initialize_job_control: disciplina di linea"
 
-#: jobs.c:4463
+#: jobs.c:4450
 msgid "initialize_job_control: line discipline"
 msgstr "initialize_job_control: disciplina di linea"
 
-#: jobs.c:4473
+#: jobs.c:4460
 msgid "initialize_job_control: setpgid"
 msgstr "initialize_job_control: setpgid"
 
-#: jobs.c:4494 jobs.c:4503
+#: jobs.c:4481 jobs.c:4490
 #, c-format
 msgid "cannot set terminal process group (%d)"
 msgstr "impossibile impostare il gruppo di processi del terminale (%d)"
 
-#: jobs.c:4508
+#: jobs.c:4495
 msgid "no job control in this shell"
 msgstr "nessun controllo dei job in questa shell"
 
-#: lib/malloc/malloc.c:353
+#: lib/malloc/malloc.c:367
 #, c-format
 msgid "malloc: failed assertion: %s\n"
 msgstr "malloc: asserzione non riuscita: %s\n"
 
-#: lib/malloc/malloc.c:369
+#: lib/malloc/malloc.c:383
 #, c-format
 msgid ""
 "\r\n"
@@ -1365,49 +1375,49 @@ msgstr ""
 "\r\n"
 "malloc: %s:%d: asserzione non riuscita\r\n"
 
-#: lib/malloc/malloc.c:370 lib/malloc/malloc.c:933
+#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941
 msgid "unknown"
 msgstr "sconosciuto"
 
-#: lib/malloc/malloc.c:882
+#: lib/malloc/malloc.c:892
 msgid "malloc: block on free list clobbered"
 msgstr "malloc: blocco eliminato nell'elenco dei disponibili"
 
-#: lib/malloc/malloc.c:972
+#: lib/malloc/malloc.c:980
 msgid "free: called with already freed block argument"
 msgstr "free: chiamata con un argomento di blocco già liberato"
 
-#: lib/malloc/malloc.c:975
+#: lib/malloc/malloc.c:983
 msgid "free: called with unallocated block argument"
 msgstr "free: chiamata con un argomento di blocco non allocato"
 
-#: lib/malloc/malloc.c:994
+#: lib/malloc/malloc.c:1001
 msgid "free: underflow detected; mh_nbytes out of range"
 msgstr "free: riscontrato un underflow; mh_nbytes fuori intervallo"
 
-#: lib/malloc/malloc.c:1001
+#: lib/malloc/malloc.c:1007
 #, fuzzy
 msgid "free: underflow detected; magic8 corrupted"
 msgstr "free: riscontrato un underflow; mh_nbytes fuori intervallo"
 
-#: lib/malloc/malloc.c:1009
+#: lib/malloc/malloc.c:1014
 msgid "free: start and end chunk sizes differ"
 msgstr "free: dimensioni diverse dei blocchi di inizio e di fine"
 
-#: lib/malloc/malloc.c:1119
+#: lib/malloc/malloc.c:1176
 msgid "realloc: called with unallocated block argument"
 msgstr "realloc: chiamata con un argomento di blocco non allocato"
 
-#: lib/malloc/malloc.c:1134
+#: lib/malloc/malloc.c:1191
 msgid "realloc: underflow detected; mh_nbytes out of range"
 msgstr "realloc: riscontrato un underflow; mh_nbytes fuori intervallo"
 
-#: lib/malloc/malloc.c:1141
+#: lib/malloc/malloc.c:1197
 #, fuzzy
 msgid "realloc: underflow detected; magic8 corrupted"
 msgstr "realloc: riscontrato un underflow; mh_nbytes fuori intervallo"
 
-#: lib/malloc/malloc.c:1150
+#: lib/malloc/malloc.c:1205
 msgid "realloc: start and end chunk sizes differ"
 msgstr "realloc: dimensioni diverse dei blocchi di inizio e di fine"
 
@@ -1450,22 +1460,22 @@ msgstr "%s: specifica del percorso di rete errata"
 msgid "network operations not supported"
 msgstr "operazione di rete non supportata"
 
-#: locale.c:217
+#: locale.c:219
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s)"
 msgstr "setlocale: LC_ALL: impossibile cambiare la localizzazione (%s)"
 
-#: locale.c:219
+#: locale.c:221
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s): %s"
 msgstr "setlocale: LC_ALL: impossibile cambiare la localizzazione (%s): %s"
 
-#: locale.c:292
+#: locale.c:294
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s)"
 msgstr "setlocale: %s: impossibile cambiare la localizzazione (%s)"
 
-#: locale.c:294
+#: locale.c:296
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s): %s"
 msgstr "setlocale: %s: impossibile cambiare la localizzazione (%s): %s"
@@ -1483,141 +1493,141 @@ msgstr "È presente della nuova posta in $_"
 msgid "The mail in %s has been read\n"
 msgstr "La posta in %s è stata letta\n"
 
-#: make_cmd.c:317
+#: make_cmd.c:314
 msgid "syntax error: arithmetic expression required"
 msgstr "errore di sintassi: richiesta espressione aritmetica"
 
-#: make_cmd.c:319
+#: make_cmd.c:316
 msgid "syntax error: `;' unexpected"
 msgstr "errore di sintassi: \";\" non atteso"
 
-#: make_cmd.c:320
+#: make_cmd.c:317
 #, c-format
 msgid "syntax error: `((%s))'"
 msgstr "errore di sintassi: \"((%s))\""
 
-#: make_cmd.c:572
+#: make_cmd.c:569
 #, c-format
 msgid "make_here_document: bad instruction type %d"
 msgstr "make_here_document: tipo di istruzione errata %d"
 
-#: make_cmd.c:657
+#: make_cmd.c:668
 #, c-format
 msgid "here-document at line %d delimited by end-of-file (wanted `%s')"
 msgstr ""
 "here-document alla riga %d è delimitato da un EOF (era richiesto \"%s\")"
 
-#: make_cmd.c:756
+#: make_cmd.c:769
 #, c-format
 msgid "make_redirection: redirection instruction `%d' out of range"
 msgstr ""
 "make_redirection: istruzione di reindirizzamento \"%d\" fuori dell'intervallo"
 
-#: parse.y:2393
+#: parse.y:2428
 #, c-format
 msgid ""
 "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line "
 "truncated"
 msgstr ""
 
-#: parse.y:2826
+#: parse.y:2921
 msgid "maximum here-document count exceeded"
 msgstr ""
 
-#: parse.y:3581 parse.y:3957 parse.y:4556
+#: parse.y:3684 parse.y:4244 parse.y:6148
 #, c-format
 msgid "unexpected EOF while looking for matching `%c'"
 msgstr "EOF non atteso durante la ricerca di \"%c\""
 
-#: parse.y:4696
+#: parse.y:4452
 msgid "unexpected EOF while looking for `]]'"
 msgstr "EOF non atteso durante la ricerca di \"]]\""
 
-#: parse.y:4701
+#: parse.y:4457
 #, c-format
 msgid "syntax error in conditional expression: unexpected token `%s'"
 msgstr ""
 "errore di sintassi nell'espressione condizionale: token non atteso \"%s\""
 
-#: parse.y:4705
+#: parse.y:4461
 msgid "syntax error in conditional expression"
 msgstr "errore di sintassi nell'espressione condizionale"
 
-#: parse.y:4783
+#: parse.y:4539
 #, c-format
 msgid "unexpected token `%s', expected `)'"
 msgstr "token non atteso \"%s\", era atteso \")\""
 
-#: parse.y:4787
+#: parse.y:4543
 msgid "expected `)'"
 msgstr "atteso \")\""
 
-#: parse.y:4815
+#: parse.y:4571
 #, c-format
 msgid "unexpected argument `%s' to conditional unary operator"
 msgstr "argomento non atteso \"%s\" per l'operatore unario condizionale"
 
-#: parse.y:4819
+#: parse.y:4575
 msgid "unexpected argument to conditional unary operator"
 msgstr "argomento non atteso per l'operatore unario condizionale"
 
-#: parse.y:4865
+#: parse.y:4621
 #, c-format
 msgid "unexpected token `%s', conditional binary operator expected"
 msgstr "token non atteso \"%s\", era atteso un operatore binario condizionale"
 
-#: parse.y:4869
+#: parse.y:4625
 msgid "conditional binary operator expected"
 msgstr "atteso operatore binario condizionale"
 
-#: parse.y:4891
+#: parse.y:4647
 #, c-format
 msgid "unexpected argument `%s' to conditional binary operator"
 msgstr "argomento non atteso \"%s\" per l'operatore binario condizionale"
 
-#: parse.y:4895
+#: parse.y:4651
 msgid "unexpected argument to conditional binary operator"
 msgstr "argomento non atteso per l'operatore binario condizionale"
 
-#: parse.y:4906
+#: parse.y:4662
 #, c-format
 msgid "unexpected token `%c' in conditional command"
 msgstr "token non atteso \"%c\" nel comando condizionale"
 
-#: parse.y:4909
+#: parse.y:4665
 #, c-format
 msgid "unexpected token `%s' in conditional command"
 msgstr "token non atteso \"%s\" nel comando condizionale"
 
-#: parse.y:4913
+#: parse.y:4669
 #, c-format
 msgid "unexpected token %d in conditional command"
 msgstr "token non atteso %d nel comando condizionale"
 
-#: parse.y:6336
+#: parse.y:6118
 #, c-format
 msgid "syntax error near unexpected token `%s'"
 msgstr "errore di sintassi vicino al token non atteso \"%s\""
 
-#: parse.y:6355
+#: parse.y:6137
 #, c-format
 msgid "syntax error near `%s'"
 msgstr "errore di sintassi vicino a \"%s\""
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error: unexpected end of file"
 msgstr "errore di sintassi: EOF non atteso"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error"
 msgstr "errore di sintassi"
 
-#: parse.y:6428
+#: parse.y:6216
 #, c-format
 msgid "Use \"%s\" to leave the shell.\n"
 msgstr "Usare \"%s\" per uscire dalla shell.\n"
 
-#: parse.y:6602
+#: parse.y:6394
 msgid "unexpected EOF while looking for matching `)'"
 msgstr "EOF non atteso durante la ricerca di \")\""
 
@@ -1655,94 +1665,94 @@ msgstr "xtrace_set: puntatore a file NULL"
 msgid "xtrace fd (%d) != fileno xtrace fp (%d)"
 msgstr "xtrace fd (%d) != numfile xtrace fp (%d)"
 
-#: print_cmd.c:1540
+#: print_cmd.c:1545
 #, c-format
 msgid "cprintf: `%c': invalid format character"
 msgstr "cprintf: \"%c\": carattere di formato non valido"
 
-#: redir.c:149 redir.c:197
+#: redir.c:150 redir.c:198
 msgid "file descriptor out of range"
 msgstr "descrittore di file fuori dell'intervallo"
 
-#: redir.c:204
+#: redir.c:205
 #, c-format
 msgid "%s: ambiguous redirect"
 msgstr "%s: redirezione ambigua"
 
-#: redir.c:208
+#: redir.c:209
 #, c-format
 msgid "%s: cannot overwrite existing file"
 msgstr "%s: impossibile sovrascrivere il file esistente"
 
-#: redir.c:213
+#: redir.c:214
 #, c-format
 msgid "%s: restricted: cannot redirect output"
 msgstr "%s: limitato: impossibile redirigere l'output"
 
-#: redir.c:218
+#: redir.c:219
 #, c-format
 msgid "cannot create temp file for here-document: %s"
 msgstr "impossibile creare un file temporaneo per here-document: %s"
 
-#: redir.c:222
+#: redir.c:223
 #, c-format
 msgid "%s: cannot assign fd to variable"
 msgstr "%s: impossibile assegnare fd a una variabile"
 
-#: redir.c:649
+#: redir.c:650
 msgid "/dev/(tcp|udp)/host/port not supported without networking"
 msgstr "/dev/(tcp|udp)/host/port non supportata senza rete"
 
-#: redir.c:938 redir.c:1053 redir.c:1114 redir.c:1284
+#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303
 msgid "redirection error: cannot duplicate fd"
 msgstr "errore di reindirizzamento: impossibile duplicare fd"
 
-#: shell.c:347
+#: shell.c:353
 msgid "could not find /tmp, please create!"
 msgstr "impossibile trovare /tmp, è necessario crearla"
 
-#: shell.c:351
+#: shell.c:357
 msgid "/tmp must be a valid directory name"
 msgstr "/tmp deve essere un nome di directory valido"
 
-#: shell.c:804
+#: shell.c:826
 msgid "pretty-printing mode ignored in interactive shells"
 msgstr ""
 
-#: shell.c:948
+#: shell.c:972
 #, c-format
 msgid "%c%c: invalid option"
 msgstr "%c%c: opzione non valida"
 
-#: shell.c:1319
+#: shell.c:1343
 #, fuzzy, c-format
 msgid "cannot set uid to %d: effective uid %d"
 msgstr "impossibile reimpostare il modo nodelay per fd %d"
 
-#: shell.c:1330
+#: shell.c:1354
 #, fuzzy, c-format
 msgid "cannot set gid to %d: effective gid %d"
 msgstr "impossibile reimpostare il modo nodelay per fd %d"
 
-#: shell.c:1518
+#: shell.c:1544
 msgid "cannot start debugger; debugging mode disabled"
 msgstr ""
 
-#: shell.c:1632
+#: shell.c:1658
 #, fuzzy, c-format
 msgid "%s: Is a directory"
 msgstr "%s: è una directory"
 
-#: shell.c:1881
+#: shell.c:1907
 msgid "I have no name!"
 msgstr "Manca il nome"
 
-#: shell.c:2035
+#: shell.c:2061
 #, c-format
 msgid "GNU bash, version %s-(%s)\n"
 msgstr "GNU bash, versione %s-(%s)\n"
 
-#: shell.c:2036
+#: shell.c:2062
 #, c-format
 msgid ""
 "Usage:\t%s [GNU long option] [option] ...\n"
@@ -1751,314 +1761,314 @@ msgstr ""
 "Uso:\t%s [opzione lunga GNU] [opzione] ...\n"
 "\t%s [opzione lunga GNU] [opzione] file-script ...\n"
 
-#: shell.c:2038
+#: shell.c:2064
 msgid "GNU long options:\n"
 msgstr "Opzioni lunghe GNU:\n"
 
-#: shell.c:2042
+#: shell.c:2068
 msgid "Shell options:\n"
 msgstr "Opzioni di shell:\n"
 
-#: shell.c:2043
+#: shell.c:2069
 #, fuzzy
 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n"
 msgstr "\t-irsD o -c comando o -O opzione_shopt\t\t(solo invocazione)\n"
 
-#: shell.c:2062
+#: shell.c:2088
 #, c-format
 msgid "\t-%s or -o option\n"
 msgstr "\topzione -%s oppure -o\n"
 
-#: shell.c:2068
+#: shell.c:2094
 #, c-format
 msgid "Type `%s -c \"help set\"' for more information about shell options.\n"
 msgstr ""
 "Digitare «%s -c \"help set\"» per ulteriori informazioni sulle opzioni di "
 "shell.\n"
 
-#: shell.c:2069
+#: shell.c:2095
 #, c-format
 msgid "Type `%s -c help' for more information about shell builtin commands.\n"
 msgstr ""
 "Digitare \"%s -c help\" per ulteriori informazioni sui comandi interni di "
 "shell.\n"
 
-#: shell.c:2070
+#: shell.c:2096
 #, c-format
 msgid "Use the `bashbug' command to report bugs.\n"
 msgstr "Usare il comando \"bashbug\" per segnalare i bug.\n"
 
-#: shell.c:2072
+#: shell.c:2098
 #, c-format
 msgid "bash home page: <http://www.gnu.org/software/bash>\n"
 msgstr ""
 
-#: shell.c:2073
+#: shell.c:2099
 #, c-format
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 msgstr ""
 
-#: sig.c:757
+#: sig.c:765
 #, c-format
 msgid "sigprocmask: %d: invalid operation"
 msgstr "sigprocmask: %d: operazione non valida"
 
-#: siglist.c:47
+#: siglist.c:48
 msgid "Bogus signal"
 msgstr "Segnale inesistente"
 
-#: siglist.c:50
+#: siglist.c:51
 msgid "Hangup"
 msgstr "Chiusura"
 
-#: siglist.c:54
+#: siglist.c:55
 msgid "Interrupt"
 msgstr "Interruzione"
 
-#: siglist.c:58
+#: siglist.c:59
 msgid "Quit"
 msgstr "Uscita (con core dump)"
 
-#: siglist.c:62
+#: siglist.c:63
 msgid "Illegal instruction"
 msgstr "Istruzione non consentita"
 
-#: siglist.c:66
+#: siglist.c:67
 msgid "BPT trace/trap"
 msgstr "Rilevato trace/breakpoint"
 
-#: siglist.c:74
+#: siglist.c:75
 msgid "ABORT instruction"
 msgstr "Istruzione ABORT"
 
-#: siglist.c:78
+#: siglist.c:79
 msgid "EMT instruction"
 msgstr "Istruzione EMT"
 
-#: siglist.c:82
+#: siglist.c:83
 msgid "Floating point exception"
 msgstr "Eccezione in virgola mobile"
 
-#: siglist.c:86
+#: siglist.c:87
 msgid "Killed"
 msgstr "Ucciso"
 
-#: siglist.c:90
+#: siglist.c:91
 msgid "Bus error"
 msgstr "Errore di bus"
 
-#: siglist.c:94
+#: siglist.c:95
 msgid "Segmentation fault"
 msgstr "Errore di segmentazione"
 
-#: siglist.c:98
+#: siglist.c:99
 msgid "Bad system call"
 msgstr "Chiamata di sistema errata"
 
-#: siglist.c:102
+#: siglist.c:103
 msgid "Broken pipe"
 msgstr "Pipe interrotta"
 
-#: siglist.c:106
+#: siglist.c:107
 msgid "Alarm clock"
 msgstr "Sveglia"
 
-#: siglist.c:110
+#: siglist.c:111
 msgid "Terminated"
 msgstr "Terminato"
 
-#: siglist.c:114
+#: siglist.c:115
 msgid "Urgent IO condition"
 msgstr "Condizione di I/O urgente"
 
-#: siglist.c:118
+#: siglist.c:119
 msgid "Stopped (signal)"
 msgstr "Fermato (segnale)"
 
-#: siglist.c:126
+#: siglist.c:127
 msgid "Continue"
 msgstr "Continuato"
 
-#: siglist.c:134
+#: siglist.c:135
 msgid "Child death or stop"
 msgstr "Processo figlio concluso o fermato"
 
-#: siglist.c:138
+#: siglist.c:139
 msgid "Stopped (tty input)"
 msgstr "Fermato (input da terminale)"
 
-#: siglist.c:142
+#: siglist.c:143
 msgid "Stopped (tty output)"
 msgstr "Fermato (output da terminale)"
 
-#: siglist.c:146
+#: siglist.c:147
 msgid "I/O ready"
 msgstr "I/O pronto"
 
-#: siglist.c:150
+#: siglist.c:151
 msgid "CPU limit"
 msgstr "Limite di CPU"
 
-#: siglist.c:154
+#: siglist.c:155
 msgid "File limit"
 msgstr "Limite di file"
 
-#: siglist.c:158
+#: siglist.c:159
 msgid "Alarm (virtual)"
 msgstr "Timer (virtuale)"
 
-#: siglist.c:162
+#: siglist.c:163
 msgid "Alarm (profile)"
 msgstr "Timer (profilo)"
 
-#: siglist.c:166
+#: siglist.c:167
 msgid "Window changed"
 msgstr "Finestra modificata"
 
-#: siglist.c:170
+#: siglist.c:171
 msgid "Record lock"
 msgstr "Blocco del record"
 
-#: siglist.c:174
+#: siglist.c:175
 msgid "User signal 1"
 msgstr "Segnale 1 dell'utente"
 
-#: siglist.c:178
+#: siglist.c:179
 msgid "User signal 2"
 msgstr "Segnale 2 dell'utente"
 
-#: siglist.c:182
+#: siglist.c:183
 msgid "HFT input data pending"
 msgstr "Dati di input HTF in sospeso"
 
-#: siglist.c:186
+#: siglist.c:187
 msgid "power failure imminent"
 msgstr "mancanza di alimentazione imminente"
 
-#: siglist.c:190
+#: siglist.c:191
 msgid "system crash imminent"
 msgstr "crash di sistema imminente"
 
-#: siglist.c:194
+#: siglist.c:195
 msgid "migrate process to another CPU"
 msgstr "processo spostato su un'altra CPU"
 
-#: siglist.c:198
+#: siglist.c:199
 msgid "programming error"
 msgstr "errore di programmazione"
 
-#: siglist.c:202
+#: siglist.c:203
 msgid "HFT monitor mode granted"
 msgstr "Modalità di monitoraggio HFT concessa"
 
-#: siglist.c:206
+#: siglist.c:207
 msgid "HFT monitor mode retracted"
 msgstr "Modalità di monitoraggio HFT revocata"
 
-#: siglist.c:210
+#: siglist.c:211
 msgid "HFT sound sequence has completed"
 msgstr "la sequenza sonora HFT è stata completata"
 
-#: siglist.c:214
+#: siglist.c:215
 msgid "Information request"
 msgstr "Richiesta di informazioni"
 
-#: siglist.c:222 siglist.c:224
+#: siglist.c:223 siglist.c:225
 #, c-format
 msgid "Unknown Signal #%d"
 msgstr "Segnale sconosciuto n° %d"
 
-#: subst.c:1476 subst.c:1666
+#: subst.c:1480 subst.c:1670
 #, c-format
 msgid "bad substitution: no closing `%s' in %s"
 msgstr "sostituzione errata: nessuna chiusura di \"%s\" in %s"
 
-#: subst.c:3281
+#: subst.c:3307
 #, c-format
 msgid "%s: cannot assign list to array member"
 msgstr "%s: impossibile assegnare una lista a un membro di un array"
 
-#: subst.c:5910 subst.c:5926
+#: subst.c:6048 subst.c:6064
 msgid "cannot make pipe for process substitution"
 msgstr "impossibile creare una pipe per la sostituzione del processo"
 
-#: subst.c:5985
+#: subst.c:6124
 msgid "cannot make child for process substitution"
 msgstr "impossibile creare un figlio per la sostituzione del processo"
 
-#: subst.c:6059
+#: subst.c:6198
 #, c-format
 msgid "cannot open named pipe %s for reading"
 msgstr "impossibile aprire la pipe con nome %s in lettura"
 
-#: subst.c:6061
+#: subst.c:6200
 #, c-format
 msgid "cannot open named pipe %s for writing"
 msgstr "impossibile aprire la pipe con nome %s in scrittura"
 
-#: subst.c:6084
+#: subst.c:6223
 #, c-format
 msgid "cannot duplicate named pipe %s as fd %d"
 msgstr "impossibile duplicare una pipe con nome %s come fd %d"
 
-#: subst.c:6213
+#: subst.c:6370
 #, fuzzy
 msgid "command substitution: ignored null byte in input"
 msgstr "sostituzione errata: manca «\"» di chiusura in %s"
 
-#: subst.c:6353
+#: subst.c:6533
 msgid "cannot make pipe for command substitution"
 msgstr "impossibile creare una pipe per la sostituzione del comando"
 
-#: subst.c:6397
+#: subst.c:6580
 msgid "cannot make child for command substitution"
 msgstr "impossibile creare un figlio per la sostituzione del comando"
 
-#: subst.c:6423
+#: subst.c:6613
 msgid "command_substitute: cannot duplicate pipe as fd 1"
 msgstr "command_substitute: impossibile duplicare la pipe come fd 1"
 
-#: subst.c:6883 subst.c:9952
+#: subst.c:7082 subst.c:10252
 #, fuzzy, c-format
 msgid "%s: invalid variable name for name reference"
 msgstr "%s: %s: valore non valido per il descrittore del file di traccia"
 
-#: subst.c:6979 subst.c:6997 subst.c:7169
+#: subst.c:7178 subst.c:7196 subst.c:7369
 #, fuzzy, c-format
 msgid "%s: invalid indirect expansion"
 msgstr "%s: numero di righe non valido"
 
-#: subst.c:7013 subst.c:7177
+#: subst.c:7212 subst.c:7377
 #, fuzzy, c-format
 msgid "%s: invalid variable name"
 msgstr "\"%s\": nome alias non valido"
 
-#: subst.c:7256
+#: subst.c:7478
 #, fuzzy, c-format
 msgid "%s: parameter not set"
 msgstr "%s: parametro nullo o non impostato"
 
-#: subst.c:7258
+#: subst.c:7480
 #, c-format
 msgid "%s: parameter null or not set"
 msgstr "%s: parametro nullo o non impostato"
 
-#: subst.c:7503 subst.c:7518
+#: subst.c:7727 subst.c:7742
 #, c-format
 msgid "%s: substring expression < 0"
 msgstr "%s: expressione di sottostringa < 0"
 
-#: subst.c:9281 subst.c:9302
+#: subst.c:9560 subst.c:9587
 #, c-format
 msgid "%s: bad substitution"
 msgstr "%s: sostituzione errata"
 
-#: subst.c:9390
+#: subst.c:9678
 #, c-format
 msgid "$%s: cannot assign in this way"
 msgstr "$%s: impossibile assegnare in questo modo"
 
-#: subst.c:9814
+#: subst.c:10111
 msgid ""
 "future versions of the shell will force evaluation as an arithmetic "
 "substitution"
@@ -2066,12 +2076,12 @@ msgstr ""
 "le versioni future della shell forzeranno la valutazione come fosse una "
 "sostituzione aritmetica"
 
-#: subst.c:10367
+#: subst.c:10795
 #, c-format
 msgid "bad substitution: no closing \"`\" in %s"
 msgstr "sostituzione errata: manca «\"» di chiusura in %s"
 
-#: subst.c:11434
+#: subst.c:11874
 #, c-format
 msgid "no match: %s"
 msgstr "nessuna corrispondenza: %s"
@@ -2094,21 +2104,21 @@ msgstr "atteso \")\""
 msgid "`)' expected, found %s"
 msgstr "atteso \")\", trovato %s"
 
-#: test.c:466 test.c:799
+#: test.c:469 test.c:814
 #, c-format
 msgid "%s: binary operator expected"
 msgstr "%s: atteso operatore binario"
 
-#: test.c:756 test.c:759
+#: test.c:771 test.c:774
 #, c-format
 msgid "%s: unary operator expected"
 msgstr "%s: atteso operatore unario"
 
-#: test.c:881
+#: test.c:896
 msgid "missing `]'"
 msgstr "\"]\" mancante"
 
-#: test.c:899
+#: test.c:914
 #, fuzzy, c-format
 msgid "syntax error: `%s' unexpected"
 msgstr "errore di sintassi: \";\" non atteso"
@@ -2117,17 +2127,17 @@ msgstr "errore di sintassi: \";\" non atteso"
 msgid "invalid signal number"
 msgstr "numero di segnale non valido"
 
-#: trap.c:325
+#: trap.c:323
 #, c-format
 msgid "trap handler: maximum trap handler level exceeded (%d)"
 msgstr ""
 
-#: trap.c:414
+#: trap.c:412
 #, c-format
 msgid "run_pending_traps: bad value in trap_list[%d]: %p"
 msgstr "run_pending_traps: valore errato in trap_list[%d]: %p"
 
-#: trap.c:418
+#: trap.c:416
 #, c-format
 msgid ""
 "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
@@ -2135,88 +2145,93 @@ msgstr ""
 "run_pending_traps: il gestore dei segnali è SIG_DFL, viene inviato "
 "nuovamente %d (%s)"
 
-#: trap.c:487
+#: trap.c:509
 #, c-format
 msgid "trap_handler: bad signal %d"
 msgstr "trap_handler: segnale errato %d"
 
-#: variables.c:421
+#: variables.c:424
 #, c-format
 msgid "error importing function definition for `%s'"
 msgstr "errore nell'importazione della definizione di funzione per \"%s\""
 
-#: variables.c:833
+#: variables.c:838
 #, c-format
 msgid "shell level (%d) too high, resetting to 1"
 msgstr "livello di shell (%d) troppo alto, reimpostato a 1"
 
-#: variables.c:2674
+#: variables.c:2642
 msgid "make_local_variable: no function context at current scope"
 msgstr "make_local_variable: nessun contesto di funzione nell'ambito corrente"
 
-#: variables.c:2693
+#: variables.c:2661
 #, fuzzy, c-format
 msgid "%s: variable may not be assigned value"
 msgstr "%s: impossibile assegnare fd a una variabile"
 
-#: variables.c:3475
+#: variables.c:2818 variables.c:2874
+#, c-format
+msgid "%s: cannot inherit value from incompatible type"
+msgstr ""
+
+#: variables.c:3459
 #, c-format
 msgid "%s: assigning integer to name reference"
 msgstr ""
 
-#: variables.c:4404
+#: variables.c:4390
 msgid "all_local_variables: no function context at current scope"
 msgstr "all_local_variables: nessun contesto di funzione nell'ambito corrente"
 
-#: variables.c:4771
+#: variables.c:4757
 #, c-format
 msgid "%s has null exportstr"
 msgstr "%s ha exportstr null"
 
-#: variables.c:4776 variables.c:4785
+#: variables.c:4762 variables.c:4771
 #, c-format
 msgid "invalid character %d in exportstr for %s"
 msgstr "carattere non valido %d in exportstr per %s"
 
-#: variables.c:4791
+#: variables.c:4777
 #, c-format
 msgid "no `=' in exportstr for %s"
 msgstr "nessun \"=\" in exportstr per %s"
 
-#: variables.c:5331
+#: variables.c:5317
 msgid "pop_var_context: head of shell_variables not a function context"
 msgstr ""
 "pop_var_context: la prima parte di shell_variables non è un contesto di "
 "funzione"
 
-#: variables.c:5344
+#: variables.c:5330
 msgid "pop_var_context: no global_variables context"
 msgstr "pop_var_context: nessun contesto global_variables"
 
-#: variables.c:5424
+#: variables.c:5410
 msgid "pop_scope: head of shell_variables not a temporary environment scope"
 msgstr ""
 "pop_scope: la prima parte di shell_variables non è un ambito temporaneo "
 "d'ambiente"
 
-#: variables.c:6387
+#: variables.c:6400
 #, c-format
 msgid "%s: %s: cannot open as FILE"
 msgstr "%s: %s: impossibile aprire come FILE"
 
-#: variables.c:6392
+#: variables.c:6405
 #, c-format
 msgid "%s: %s: invalid value for trace file descriptor"
 msgstr "%s: %s: valore non valido per il descrittore del file di traccia"
 
-#: variables.c:6437
+#: variables.c:6450
 #, fuzzy, c-format
 msgid "%s: %s: compatibility value out of range"
 msgstr "%s: %s fuori dall'intervallo"
 
 #: version.c:46 version2.c:46
 #, fuzzy
-msgid "Copyright (C) 2020 Free Software Foundation, Inc."
+msgid "Copyright (C) 2022 Free Software Foundation, Inc."
 msgstr "Copyright © 2009 Free Software Foundation, Inc.\n"
 
 #: version.c:47 version2.c:47
@@ -2311,12 +2326,16 @@ msgstr "command [-pVv] comando [arg ...]"
 
 #: builtins.c:78
 #, fuzzy
-msgid "declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]"
+msgid ""
+"declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] "
+"[name ...]"
 msgstr "declare [-aAfFgilrtux] [-p] [nome[=valore] ...]"
 
 #: builtins.c:80
 #, fuzzy
-msgid "typeset [-aAfFgiIlnrtux] [-p] name[=value] ..."
+msgid ""
+"typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] "
+"[name ...]"
 msgstr "typeset [-aAfFgilrtux] [-p] nome[=valore] ..."
 
 #: builtins.c:82
@@ -2419,7 +2438,8 @@ msgid "return [n]"
 msgstr "return [n]"
 
 #: builtins.c:142
-msgid "set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]"
+#, fuzzy
+msgid "set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]"
 msgstr "set [-abefhkmnptuvxBCHP] [-o nome-opzione] [--] [arg ...]"
 
 #: builtins.c:144
@@ -2469,7 +2489,7 @@ msgstr "type [-afptP] nome [nome ...]"
 
 #: builtins.c:171
 #, fuzzy
-msgid "ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]"
+msgid "ulimit [-SHabcdefiklmnpqrstuvxPRT] [limit]"
 msgstr "ulimit [-SHacdefilmnpqrstuvx] [limite]"
 
 #: builtins.c:174
@@ -2515,11 +2535,13 @@ msgstr ""
 "COMANDI; ] fi"
 
 #: builtins.c:196
-msgid "while COMMANDS; do COMMANDS; done"
+#, fuzzy
+msgid "while COMMANDS; do COMMANDS-2; done"
 msgstr "while COMANDI; do COMANDI; done"
 
 #: builtins.c:198
-msgid "until COMMANDS; do COMMANDS; done"
+#, fuzzy
+msgid "until COMMANDS; do COMMANDS-2; done"
 msgstr "until COMANDI; do COMANDI; done"
 
 #: builtins.c:200
@@ -4014,7 +4036,9 @@ msgid ""
 "    word to the second NAME, and so on, with any leftover words assigned to\n"
 "    the last NAME.  Only the characters found in $IFS are recognized as "
 "word\n"
-"    delimiters.\n"
+"    delimiters. By default, the backslash character escapes delimiter "
+"characters\n"
+"    and newline.\n"
 "    \n"
 "    If no NAMEs are supplied, the line read is stored in the REPLY "
 "variable.\n"
@@ -4107,7 +4131,7 @@ msgstr ""
 "timeout in lettura\n"
 "    o venga fornito un descrittore di file non valido come argomento per -u."
 
-#: builtins.c:1041
+#: builtins.c:1042
 msgid ""
 "Return from a shell function.\n"
 "    \n"
@@ -4129,7 +4153,7 @@ msgstr ""
 "    Restituisce N, oppure insuccesso se la shell non sta eseguendo una "
 "funzione o uno script."
 
-#: builtins.c:1054
+#: builtins.c:1055
 #, fuzzy
 msgid ""
 "Set or unset values of shell options and positional parameters.\n"
@@ -4315,7 +4339,7 @@ msgstr ""
 "    Stato di uscita:\n"
 "    Restituisce successo a meno che non venga fornita una opzione non valida."
 
-#: builtins.c:1139
+#: builtins.c:1140
 #, fuzzy
 msgid ""
 "Unset values and attributes of shell variables and functions.\n"
@@ -4356,7 +4380,7 @@ msgstr ""
 "    Restituisce successo a meno che non sia fornita una opzione non valida o "
 "NOME sia in sola lettura."
 
-#: builtins.c:1161
+#: builtins.c:1162
 msgid ""
 "Set export attribute for shell variables.\n"
 "    \n"
@@ -4392,7 +4416,7 @@ msgstr ""
 "    Restituisce successo a meno che non sia fornita una opzione non valida o "
 "il NOME non sia valido."
 
-#: builtins.c:1180
+#: builtins.c:1181
 #, fuzzy
 msgid ""
 "Mark shell variables as unchangeable.\n"
@@ -4432,7 +4456,7 @@ msgstr ""
 "    Restituisce successo a meno che non venga fornita una opzione non valida "
 "o NOME non sia valido."
 
-#: builtins.c:1202
+#: builtins.c:1203
 msgid ""
 "Shift positional parameters.\n"
 "    \n"
@@ -4450,7 +4474,7 @@ msgstr ""
 "    Stato di uscita:\n"
 "    Restituisce successo a meno che N non sia negativo o maggiore di $#."
 
-#: builtins.c:1214 builtins.c:1229
+#: builtins.c:1215 builtins.c:1230
 msgid ""
 "Execute commands from a file in the current shell.\n"
 "    \n"
@@ -4475,7 +4499,7 @@ msgstr ""
 "insuccesso se\n"
 "    il NOMEFILE non può essere letto."
 
-#: builtins.c:1245
+#: builtins.c:1246
 msgid ""
 "Suspend shell execution.\n"
 "    \n"
@@ -4501,7 +4525,7 @@ msgstr ""
 "    Restituisce successo a meno che non sia abilitato il controllo job o si "
 "riscontri un errore."
 
-#: builtins.c:1261
+#: builtins.c:1262
 #, fuzzy
 msgid ""
 "Evaluate conditional expression.\n"
@@ -4671,7 +4695,7 @@ msgstr ""
 "viene valutata\n"
 "    falsa o viene fornito un argomento non valido."
 
-#: builtins.c:1343
+#: builtins.c:1344
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -4684,7 +4708,7 @@ msgstr ""
 "deve\n"
 "    essere un \"]\" letterale per corrispondere al \"[\" di apertura."
 
-#: builtins.c:1352
+#: builtins.c:1353
 msgid ""
 "Display process times.\n"
 "    \n"
@@ -4704,7 +4728,7 @@ msgstr ""
 "    Stato di uscita:\n"
 "    Sempre successo."
 
-#: builtins.c:1364
+#: builtins.c:1365
 msgid ""
 "Trap signals and other events.\n"
 "    \n"
@@ -4790,7 +4814,7 @@ msgstr ""
 "    Restituisce successo a meno che SPEC_SEGNALE non sia valido o si "
 "fornisca una opzione non valida."
 
-#: builtins.c:1400
+#: builtins.c:1401
 #, fuzzy
 msgid ""
 "Display information about command type.\n"
@@ -4853,7 +4877,7 @@ msgstr ""
 "    Restituisce successo se tutti i NOMI vengono trovati; insuccesso in caso "
 "contrario."
 
-#: builtins.c:1431
+#: builtins.c:1432
 #, fuzzy
 msgid ""
 "Modify shell resource limits.\n"
@@ -4950,7 +4974,7 @@ msgstr ""
 "    Restituisce successo a meno che non venga fornita una opzione non valida "
 "o venga riscontrato un errore."
 
-#: builtins.c:1482
+#: builtins.c:1483
 msgid ""
 "Display or set file mode mask.\n"
 "    \n"
@@ -4987,7 +5011,7 @@ msgstr ""
 "    Restituisce successo a meno che MODO non sia valido o venga fornita una "
 "opzione non valida."
 
-#: builtins.c:1502
+#: builtins.c:1503
 #, fuzzy
 msgid ""
 "Wait for job completion and return exit status.\n"
@@ -5035,7 +5059,7 @@ msgstr ""
 "fornita una\n"
 "    opzione non valida."
 
-#: builtins.c:1533
+#: builtins.c:1534
 #, fuzzy
 msgid ""
 "Wait for process completion and return exit status.\n"
@@ -5063,7 +5087,7 @@ msgstr ""
 "fornita una opzione non\n"
 "    valida."
 
-#: builtins.c:1548
+#: builtins.c:1549
 msgid ""
 "Execute commands for each member in a list.\n"
 "    \n"
@@ -5088,7 +5112,7 @@ msgstr ""
 "    Stato di uscita:\n"
 "    Restituisce lo stato dell'ultimo comando eseguito."
 
-#: builtins.c:1562
+#: builtins.c:1563
 msgid ""
 "Arithmetic for loop.\n"
 "    \n"
@@ -5119,7 +5143,7 @@ msgstr ""
 "    Stato di uscita:\n"
 "    Restituisce lo stato dell'ultimo comando eseguito."
 
-#: builtins.c:1580
+#: builtins.c:1581
 msgid ""
 "Select words from a list and execute commands.\n"
 "    \n"
@@ -5157,7 +5181,7 @@ msgstr ""
 "    Stato di uscita:\n"
 "    Restituisce lo stato di uscita dell'ultimo comando eseguito."
 
-#: builtins.c:1601
+#: builtins.c:1602
 msgid ""
 "Report time consumed by pipeline's execution.\n"
 "    \n"
@@ -5186,7 +5210,7 @@ msgstr ""
 "    Stato di uscita:\n"
 "    Viene restituito lo stato della PIPELINE."
 
-#: builtins.c:1618
+#: builtins.c:1619
 msgid ""
 "Execute commands based on pattern matching.\n"
 "    \n"
@@ -5205,7 +5229,7 @@ msgstr ""
 "    Stato di uscita:\n"
 "    Restituisce lo stato dell'ultimo comando eseguito."
 
-#: builtins.c:1630
+#: builtins.c:1631
 msgid ""
 "Execute commands based on conditional.\n"
 "    \n"
@@ -5244,12 +5268,14 @@ msgstr ""
 "    Stato di uscita:\n"
 "    Restituisce lo stato dell'ultimo comando eseguito."
 
-#: builtins.c:1647
+#: builtins.c:1648
+#, fuzzy
 msgid ""
 "Execute commands as long as a test succeeds.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `while' COMMANDS has an exit status of zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS "
+"has\n"
+"    an exit status of zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
@@ -5262,12 +5288,14 @@ msgstr ""
 "    Stato di uscita:\n"
 "    Restituisce lo stato dell'ultimo comando eseguito."
 
-#: builtins.c:1659
+#: builtins.c:1660
+#, fuzzy
 msgid ""
 "Execute commands as long as a test does not succeed.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `until' COMMANDS has an exit status which is not zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS "
+"has\n"
+"    an exit status which is not zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
@@ -5280,7 +5308,7 @@ msgstr ""
 "    Stato di uscita:\n"
 "    Restituisce lo stato dell'ultimo comando eseguito."
 
-#: builtins.c:1671
+#: builtins.c:1672
 #, fuzzy
 msgid ""
 "Create a coprocess named NAME.\n"
@@ -5306,7 +5334,7 @@ msgstr ""
 "    Stato di uscita:\n"
 "    Restituisce lo stato di uscita del COMANDO."
 
-#: builtins.c:1685
+#: builtins.c:1686
 msgid ""
 "Define shell function.\n"
 "    \n"
@@ -5332,7 +5360,7 @@ msgstr ""
 "    Stato di uscita:\n"
 "    Restituisce successo a meno che il NOME non sia in sola lettura."
 
-#: builtins.c:1699
+#: builtins.c:1700
 msgid ""
 "Group commands as a unit.\n"
 "    \n"
@@ -5351,7 +5379,7 @@ msgstr ""
 "    Stato di uscita:\n"
 "    Restituisce lo stato dell'ultimo comando eseguito."
 
-#: builtins.c:1711
+#: builtins.c:1712
 msgid ""
 "Resume job in foreground.\n"
 "    \n"
@@ -5375,7 +5403,7 @@ msgstr ""
 "    Stato di uscita:\n"
 "    Restituisce lo stato del job ripristinato."
 
-#: builtins.c:1726
+#: builtins.c:1727
 #, fuzzy
 msgid ""
 "Evaluate arithmetic expression.\n"
@@ -5394,7 +5422,7 @@ msgstr ""
 "    Stato di uscita:\n"
 "    Restituisce 1 se ESPRESSIONE è valutata 0, altrimenti restituisce 0."
 
-#: builtins.c:1738
+#: builtins.c:1739
 msgid ""
 "Execute conditional command.\n"
 "    \n"
@@ -5451,7 +5479,7 @@ msgstr ""
 "    Stato di uscita:\n"
 "    0 o 1 a seconda del valore dell'ESPRESSIONE."
 
-#: builtins.c:1764
+#: builtins.c:1765
 msgid ""
 "Common shell variable names and usage.\n"
 "    \n"
@@ -5579,7 +5607,7 @@ msgstr ""
 "decidere quale\n"
 "    \t\tcomando dovrebbe essere salvato nell'elenco della cronologia.\n"
 
-#: builtins.c:1821
+#: builtins.c:1822
 #, fuzzy
 msgid ""
 "Add directories to stack.\n"
@@ -5639,7 +5667,7 @@ msgstr ""
 "non abbia\n"
 "    successo il cambio di directory."
 
-#: builtins.c:1855
+#: builtins.c:1856
 #, fuzzy
 msgid ""
 "Remove directories from stack.\n"
@@ -5691,7 +5719,7 @@ msgstr ""
 "valido o non\n"
 "    abbia successo il cambio di directory."
 
-#: builtins.c:1885
+#: builtins.c:1886
 #, fuzzy
 msgid ""
 "Display directory stack.\n"
@@ -5745,7 +5773,7 @@ msgstr ""
 "    Restituisce successo a meno che non sia fornita un'opzione non valida o "
 "si riscontri un errore."
 
-#: builtins.c:1916
+#: builtins.c:1917
 #, fuzzy
 msgid ""
 "Set and unset shell options.\n"
@@ -5786,7 +5814,7 @@ msgstr ""
 "fornita\n"
 "    una opzione non valida o NOMEOPZ è disabilitato."
 
-#: builtins.c:1937
+#: builtins.c:1938
 #, fuzzy
 msgid ""
 "Formats and prints ARGUMENTS under control of the FORMAT.\n"
@@ -5810,6 +5838,8 @@ msgid ""
 "    \n"
 "      %b\texpand backslash escape sequences in the corresponding argument\n"
 "      %q\tquote the argument in a way that can be reused as shell input\n"
+"      %Q\tlike %q, but apply any precision to the unquoted argument before\n"
+"    \t\tquoting\n"
 "      %(fmt)T\toutput the date-time string resulting from using FMT as a "
 "format\n"
 "    \t        string for strftime(3)\n"
@@ -5856,7 +5886,7 @@ msgstr ""
 "o si riscontri\n"
 "    un errore di scrittura o assegnazione."
 
-#: builtins.c:1971
+#: builtins.c:1974
 #, fuzzy
 msgid ""
 "Specify how arguments are to be completed by Readline.\n"
@@ -5916,7 +5946,7 @@ msgstr ""
 "    Restituisce successo a meno che non sia fornita una opzione non valida o "
 "si riscontri un errore."
 
-#: builtins.c:2001
+#: builtins.c:2004
 msgid ""
 "Display possible completions depending on the options.\n"
 "    \n"
@@ -5940,7 +5970,7 @@ msgstr ""
 "    Restituisce successo a meno che non sia fornita una opzione non valida o "
 "si riscontri un errore."
 
-#: builtins.c:2016
+#: builtins.c:2019
 #, fuzzy
 msgid ""
 "Modify or display completion options.\n"
@@ -6006,7 +6036,7 @@ msgstr ""
 "o NOME non\n"
 "    abbia una specifica di completamento definita."
 
-#: builtins.c:2047
+#: builtins.c:2050
 #, fuzzy
 msgid ""
 "Read lines from the standard input into an indexed array variable.\n"
@@ -6087,7 +6117,7 @@ msgstr ""
 "valida, ARRAY sia\n"
 "    in sola lettura oppure non indicizzato."
 
-#: builtins.c:2083
+#: builtins.c:2086
 msgid ""
 "Read lines from a file into an array variable.\n"
 "    \n"
@@ -6097,6 +6127,10 @@ msgstr ""
 "    \n"
 "    Sinonimo per \"mapfile\"."
 
+#, c-format
+#~ msgid "%s: invalid associative array key"
+#~ msgstr "%s: chiave dell'array associativo non valida"
+
 #, fuzzy
 #~ msgid "Copyright (C) 2019 Free Software Foundation, Inc."
 #~ msgstr "Copyright © 2011 Free Software Foundation, Inc."
index 59ab5fd07746acfac3add5ddc7395378b5142d4b..0314f9e81cec8f5c28aa529e5a6af88684222e73 100644 (file)
Binary files a/po/ja.gmo and b/po/ja.gmo differ
index 5ecee86cd6c6f6eef113409063f0b94f0d71063a..332efa3ed5c18e8bde9949217a2d62f21a1af720 100644 (file)
--- a/po/ja.po
+++ b/po/ja.po
@@ -7,10 +7,10 @@
 # Hiroshi Takekawa <sian@big.or.jp>, <sian.ht@gmail.com>, 2020.
 msgid ""
 msgstr ""
-"Project-Id-Version: GNU bash 5.1\n"
+"Project-Id-Version: GNU bash 5.2-rc1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-11-28 12:51-0500\n"
-"PO-Revision-Date: 2020-12-20 21:33+0900\n"
+"POT-Creation-Date: 2022-01-11 14:50-0500\n"
+"PO-Revision-Date: 2022-06-19 23:10+0900\n"
 "Last-Translator: Hiroshi Takekawa <sian@big.or.jp>\n"
 "Language-Team: Japanese <translation-team-ja@lists.sourceforge.net>\n"
 "Language: ja\n"
@@ -25,57 +25,52 @@ msgstr ""
 msgid "bad array subscript"
 msgstr "誤った配列の添字"
 
-#: arrayfunc.c:421 builtins/declare.def:638 variables.c:2274 variables.c:2300
-#: variables.c:3133
+#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268
+#: variables.c:3101
 #, c-format
 msgid "%s: removing nameref attribute"
 msgstr "%s: 名前参照属性を削除します"
 
-#: arrayfunc.c:446 builtins/declare.def:851
+#: arrayfunc.c:496 builtins/declare.def:868
 #, c-format
 msgid "%s: cannot convert indexed to associative array"
 msgstr "%s: インデックス配列から連想配列に変換することはできません"
 
-#: arrayfunc.c:700
-#, c-format
-msgid "%s: invalid associative array key"
-msgstr "%s: 無効な連想配列のキーです"
-
-#: arrayfunc.c:702
+#: arrayfunc.c:777
 #, c-format
 msgid "%s: cannot assign to non-numeric index"
 msgstr "%s: 配列の添字に非数字を設定できません"
 
-#: arrayfunc.c:747
+#: arrayfunc.c:822
 #, c-format
 msgid "%s: %s: must use subscript when assigning associative array"
 msgstr "%s: %s: 連想配列を設定するときには添字をつけなければいけません"
 
-#: bashhist.c:452
+#: bashhist.c:455
 #, c-format
 msgid "%s: cannot create: %s"
 msgstr "%s: %s を作成できません"
 
-#: bashline.c:4310
+#: bashline.c:4479
 msgid "bash_execute_unix_command: cannot find keymap for command"
 msgstr "bash_execute_unix_command: コマンドのキーマップがありません"
 
-#: bashline.c:4459
+#: bashline.c:4637
 #, c-format
 msgid "%s: first non-whitespace character is not `\"'"
 msgstr "%s: 最初の非空白類文字が `\"' ではありません"
 
-#: bashline.c:4488
+#: bashline.c:4666
 #, c-format
 msgid "no closing `%c' in %s"
 msgstr "閉じる `%c' が %s にありません"
 
-#: bashline.c:4519
+#: bashline.c:4697
 #, c-format
 msgid "%s: missing colon separator"
 msgstr "%s: 区切り文字コロン(:)がありません"
 
-#: bashline.c:4555
+#: bashline.c:4733
 #, c-format
 msgid "`%s': cannot unbind in command keymap"
 msgstr "`%s': コマンドキーマップの割り当てを解除できません"
@@ -95,7 +90,7 @@ msgstr "中括弧展開: %u 個の要素のメモリの割り当てに失敗し
 msgid "brace expansion: failed to allocate memory for `%s'"
 msgstr "中括弧展開: `%s' へのメモリ割り当てに失敗しました"
 
-#: builtins/alias.def:131 variables.c:1844
+#: builtins/alias.def:131 variables.c:1817
 #, c-format
 msgid "`%s': invalid alias name"
 msgstr "`%s': 無効なエイリアス名です"
@@ -166,7 +161,7 @@ msgstr ""
 msgid "HOME not set"
 msgstr "HOME が設定されていません"
 
-#: builtins/cd.def:335 builtins/common.c:161 test.c:901
+#: builtins/cd.def:335 builtins/common.c:161 test.c:916
 msgid "too many arguments"
 msgstr "引数が多すぎます"
 
@@ -193,7 +188,7 @@ msgstr "警告: "
 msgid "%s: usage: "
 msgstr "%s: 使用法: "
 
-#: builtins/common.c:193 shell.c:516 shell.c:844
+#: builtins/common.c:193 shell.c:524 shell.c:866
 #, c-format
 msgid "%s: option requires an argument"
 msgstr "%s: オプションには引数が必要です"
@@ -208,7 +203,7 @@ msgstr "%s: 数字の引数が必要です"
 msgid "%s: not found"
 msgstr "%s: 見つかりません"
 
-#: builtins/common.c:216 shell.c:857
+#: builtins/common.c:216 shell.c:879
 #, c-format
 msgid "%s: invalid option"
 msgstr "%s: 無効なオプションです"
@@ -218,7 +213,7 @@ msgstr "%s: 無効なオプションです"
 msgid "%s: invalid option name"
 msgstr "%s: 無効なオプション名です"
 
-#: builtins/common.c:230 execute_cmd.c:2373 general.c:368 general.c:373
+#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373
 #, c-format
 msgid "`%s': not a valid identifier"
 msgstr "`%s': 有効な識別子ではありません"
@@ -231,7 +226,7 @@ msgstr "無効な八進数です"
 msgid "invalid hex number"
 msgstr "無効な十六進数です"
 
-#: builtins/common.c:244 expr.c:1569
+#: builtins/common.c:244 expr.c:1574
 msgid "invalid number"
 msgstr "無効な数字です"
 
@@ -245,88 +240,93 @@ msgstr "%s: 無効なシグナル指定です"
 msgid "`%s': not a pid or valid job spec"
 msgstr "`%s': pid または有効なジョブ指定ではありません"
 
-#: builtins/common.c:266 error.c:510
+#: builtins/common.c:266 error.c:536
 #, c-format
 msgid "%s: readonly variable"
 msgstr "%s: 読み取り専用の変数です"
 
-#: builtins/common.c:274
+#: builtins/common.c:273
+#, c-format
+msgid "%s: cannot assign"
+msgstr "%s: 割り当てできません"
+
+#: builtins/common.c:281
 #, c-format
 msgid "%s: %s out of range"
 msgstr "%s: %s が範囲外です"
 
-#: builtins/common.c:274 builtins/common.c:276
+#: builtins/common.c:281 builtins/common.c:283
 msgid "argument"
 msgstr "引数"
 
-#: builtins/common.c:276
+#: builtins/common.c:283
 #, c-format
 msgid "%s out of range"
 msgstr "%s が範囲外です"
 
-#: builtins/common.c:284
+#: builtins/common.c:291
 #, c-format
 msgid "%s: no such job"
 msgstr "%s: そのようなジョブはありません"
 
-#: builtins/common.c:292
+#: builtins/common.c:299
 #, c-format
 msgid "%s: no job control"
 msgstr "%s: ジョブ制御が無効になっています"
 
-#: builtins/common.c:294
+#: builtins/common.c:301
 msgid "no job control"
 msgstr "ジョブ制御が無効になっています"
 
-#: builtins/common.c:304
+#: builtins/common.c:311
 #, c-format
 msgid "%s: restricted"
 msgstr "%s: 制限されています"
 
-#: builtins/common.c:306
+#: builtins/common.c:313
 msgid "restricted"
 msgstr "制限されています"
 
-#: builtins/common.c:314
+#: builtins/common.c:321
 #, c-format
 msgid "%s: not a shell builtin"
 msgstr "%s: シェルのビルトイン関数ではありません"
 
-#: builtins/common.c:323
+#: builtins/common.c:330
 #, c-format
 msgid "write error: %s"
 msgstr "書き込みエラー: %s"
 
-#: builtins/common.c:331
+#: builtins/common.c:338
 #, c-format
 msgid "error setting terminal attributes: %s"
 msgstr "ターミナル属性の設定時にエラーが発生しました : %s"
 
-#: builtins/common.c:333
+#: builtins/common.c:340
 #, c-format
 msgid "error getting terminal attributes: %s"
 msgstr "ターミナル属性の取得時にエラーが発生しました : %s"
 
-#: builtins/common.c:635
+#: builtins/common.c:642
 #, c-format
 msgid "%s: error retrieving current directory: %s: %s\n"
 msgstr "%s: カレントディレクトリの取得時にエラーが発生しました : %s: %s\n"
 
-#: builtins/common.c:701 builtins/common.c:703
+#: builtins/common.c:708 builtins/common.c:710
 #, c-format
 msgid "%s: ambiguous job spec"
 msgstr "%s: 曖昧なジョブ指定です"
 
-#: builtins/common.c:964
+#: builtins/common.c:971
 msgid "help not available in this version"
 msgstr "このバージョンではヘルプが利用できません"
 
-#: builtins/common.c:1008 builtins/set.def:953 variables.c:3839
+#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825
 #, c-format
 msgid "%s: cannot unset: readonly %s"
 msgstr "%s: 消去できません: %s は読み取り専用です"
 
-#: builtins/common.c:1013 builtins/set.def:932 variables.c:3844
+#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830
 #, c-format
 msgid "%s: cannot unset"
 msgstr "%s: 消去できません"
@@ -336,108 +336,108 @@ msgstr "%s: 消去できません"
 msgid "%s: invalid action name"
 msgstr "%s: 無効なアクション名です"
 
-#: builtins/complete.def:486 builtins/complete.def:634
-#: builtins/complete.def:865
+#: builtins/complete.def:486 builtins/complete.def:642
+#: builtins/complete.def:873
 #, c-format
 msgid "%s: no completion specification"
 msgstr "%s: 補完指定がありません"
 
-#: builtins/complete.def:688
+#: builtins/complete.def:696
 msgid "warning: -F option may not work as you expect"
 msgstr "警告: -F オプションは期待通りに動作しないかもしれません"
 
-#: builtins/complete.def:690
+#: builtins/complete.def:698
 msgid "warning: -C option may not work as you expect"
 msgstr "警告: -C オプションは期待通りに動作しないかもしれません"
 
-#: builtins/complete.def:838
+#: builtins/complete.def:846
 msgid "not currently executing completion function"
 msgstr "補完機能は現在実行されていません"
 
-#: builtins/declare.def:134
+#: builtins/declare.def:137
 msgid "can only be used in a function"
 msgstr "関数の中でのみ使用できます"
 
-#: builtins/declare.def:363 builtins/declare.def:756
+#: builtins/declare.def:437
+msgid "cannot use `-f' to make functions"
+msgstr "関数作成時に `-f' を使用できません"
+
+#: builtins/declare.def:464 execute_cmd.c:6132
+#, c-format
+msgid "%s: readonly function"
+msgstr "%s: 読み取り専用関数です"
+
+#: builtins/declare.def:521 builtins/declare.def:804
 #, c-format
 msgid "%s: reference variable cannot be an array"
 msgstr "%s: 参照変数は配列であってはいけません"
 
-#: builtins/declare.def:374 variables.c:3385
+#: builtins/declare.def:532 variables.c:3359
 #, c-format
 msgid "%s: nameref variable self references not allowed"
 msgstr "%s: 自身を参照する名前参照変数は許可されていません"
 
-#: builtins/declare.def:379 variables.c:2104 variables.c:3304 variables.c:3312
-#: variables.c:3382
+#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286
+#: variables.c:3356
 #, c-format
 msgid "%s: circular name reference"
 msgstr "%s: 循環名前参照です"
 
-#: builtins/declare.def:384 builtins/declare.def:762 builtins/declare.def:773
+#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820
 #, c-format
 msgid "`%s': invalid variable name for name reference"
 msgstr "`%s': 名前参照として無効な変数です"
 
-#: builtins/declare.def:514
-msgid "cannot use `-f' to make functions"
-msgstr "関数作成時に `-f' を使用できません"
-
-#: builtins/declare.def:526 execute_cmd.c:5986
-#, c-format
-msgid "%s: readonly function"
-msgstr "%s: 読み取り専用関数です"
-
-#: builtins/declare.def:824
-#, c-format
-msgid "%s: quoted compound array assignment deprecated"
-msgstr ""
-
-#: builtins/declare.def:838
+#: builtins/declare.def:856
 #, c-format
 msgid "%s: cannot destroy array variables in this way"
 msgstr "%s: この方法で配列変数を消去することはできません"
 
-#: builtins/declare.def:845 builtins/read.def:815
+#: builtins/declare.def:862 builtins/read.def:887
 #, c-format
 msgid "%s: cannot convert associative to indexed array"
 msgstr "%s: 連想配列からインデックス配列に変換することはできません"
 
-#: builtins/enable.def:143 builtins/enable.def:151
+#: builtins/declare.def:891
+#, c-format
+msgid "%s: quoted compound array assignment deprecated"
+msgstr ""
+
+#: builtins/enable.def:145 builtins/enable.def:153
 msgid "dynamic loading not available"
 msgstr "動的ロードは利用できません"
 
-#: builtins/enable.def:343
+#: builtins/enable.def:376
 #, c-format
 msgid "cannot open shared object %s: %s"
 msgstr "共有オブジェクト %s を開くことができません : %s"
 
-#: builtins/enable.def:371
+#: builtins/enable.def:405
 #, c-format
 msgid "cannot find %s in shared object %s: %s"
 msgstr "%s が共有オブジェクト %s に存在しません: %s"
 
-#: builtins/enable.def:388
+#: builtins/enable.def:422
 #, c-format
 msgid "%s: dynamic builtin already loaded"
 msgstr "%s: 動的ビルトインはロード済です"
 
-#: builtins/enable.def:392
+#: builtins/enable.def:426
 #, c-format
 msgid "load function for %s returns failure (%d): not loaded"
 msgstr "関数 %s のロードが失敗を返しました(%d): ロードされませんでした"
 
-#: builtins/enable.def:517
+#: builtins/enable.def:551
 #, c-format
 msgid "%s: not dynamically loaded"
 msgstr "%s: 動的にロードされていません"
 
-#: builtins/enable.def:543
+#: builtins/enable.def:577
 #, c-format
 msgid "%s: cannot delete: %s"
 msgstr "%s: 削除できません: %s"
 
-#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5818
+#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959
 #, c-format
 msgid "%s: is a directory"
 msgstr "%s: ディレクトリです"
@@ -452,7 +452,7 @@ msgstr "%s: 通常ファイルではありません"
 msgid "%s: file is too large"
 msgstr "%s: ファイルが大きすぎます"
 
-#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1647
+#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673
 #, c-format
 msgid "%s: cannot execute binary file"
 msgstr "%s: バイナリファイルを実行できません"
@@ -546,12 +546,12 @@ msgstr ""
 msgid "no help topics match `%s'.  Try `help help' or `man -k %s' or `info %s'."
 msgstr "`%s' に一致するヘルプ項目がありません。`help help'、`man -k %s' または `info %s' を試してください"
 
-#: builtins/help.def:224
+#: builtins/help.def:223
 #, c-format
 msgid "%s: cannot open: %s"
 msgstr "%s: 開くことができません: %s"
 
-#: builtins/help.def:524
+#: builtins/help.def:523
 #, c-format
 msgid ""
 "These shell commands are defined internally.  Type `help' to see this list.\n"
@@ -570,21 +570,21 @@ msgstr ""
 "名前の後にアスタリスク (*) がある場合はそのコマンドが無効になっていることを意味します。\n"
 "\n"
 
-#: builtins/history.def:155
+#: builtins/history.def:159
 msgid "cannot use more than one of -anrw"
 msgstr "-anrw を2つ以上一緒に使用することはできません"
 
-#: builtins/history.def:188 builtins/history.def:198 builtins/history.def:213
-#: builtins/history.def:230 builtins/history.def:242 builtins/history.def:249
+#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215
+#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247
 msgid "history position"
 msgstr "ヒストリ位置"
 
-#: builtins/history.def:340
+#: builtins/history.def:338
 #, c-format
 msgid "%s: invalid timestamp"
 msgstr "%s: 無効なタイムスタンプです"
 
-#: builtins/history.def:451
+#: builtins/history.def:449
 #, c-format
 msgid "%s: history expansion failed"
 msgstr "%s: ヒストリの展開に失敗しました"
@@ -607,78 +607,78 @@ msgstr "%s: 引数はプロセスIDかジョブIDでなければいけません"
 msgid "Unknown error"
 msgstr "不明なエラーです"
 
-#: builtins/let.def:97 builtins/let.def:122 expr.c:639 expr.c:657
+#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658
 msgid "expression expected"
 msgstr "式が予期されます"
 
-#: builtins/mapfile.def:178
+#: builtins/mapfile.def:180
 #, c-format
 msgid "%s: not an indexed array"
 msgstr "%s: インデックス配列ではありません"
 
-#: builtins/mapfile.def:271 builtins/read.def:308
+#: builtins/mapfile.def:276 builtins/read.def:336
 #, c-format
 msgid "%s: invalid file descriptor specification"
 msgstr "%s: 無効なファイル記述子指定です"
 
-#: builtins/mapfile.def:279 builtins/read.def:315
+#: builtins/mapfile.def:284 builtins/read.def:343
 #, c-format
 msgid "%d: invalid file descriptor: %s"
 msgstr "%d: 無効なファイル記述子: %s"
 
-#: builtins/mapfile.def:288 builtins/mapfile.def:326
+#: builtins/mapfile.def:293 builtins/mapfile.def:331
 #, c-format
 msgid "%s: invalid line count"
 msgstr "%s: 無効な行数です"
 
-#: builtins/mapfile.def:299
+#: builtins/mapfile.def:304
 #, c-format
 msgid "%s: invalid array origin"
 msgstr "%s: 無効な配列の原点です"
 
-#: builtins/mapfile.def:316
+#: builtins/mapfile.def:321
 #, c-format
 msgid "%s: invalid callback quantum"
 msgstr "%s: コールバックの quantum が無効です"
 
-#: builtins/mapfile.def:349
+#: builtins/mapfile.def:354
 msgid "empty array variable name"
 msgstr "空の配列変数名です"
 
-#: builtins/mapfile.def:370
+#: builtins/mapfile.def:375
 msgid "array variable support required"
 msgstr "配列変数のサポートが必要です"
 
-#: builtins/printf.def:419
+#: builtins/printf.def:430
 #, c-format
 msgid "`%s': missing format character"
 msgstr "`%s': 書式指定文字がありません"
 
-#: builtins/printf.def:474
+#: builtins/printf.def:485
 #, c-format
 msgid "`%c': invalid time format specification"
 msgstr "`%c': 無効な時間書式指定です"
 
-#: builtins/printf.def:676
+#: builtins/printf.def:708
 #, c-format
 msgid "`%c': invalid format character"
 msgstr "`%c': 無効な書式指定文字です"
 
-#: builtins/printf.def:702
+#: builtins/printf.def:734
 #, c-format
 msgid "warning: %s: %s"
 msgstr "警告: %s: %s"
 
-#: builtins/printf.def:788
+#: builtins/printf.def:822
 #, c-format
 msgid "format parsing problem: %s"
 msgstr "書式解析問題です: %s"
 
-#: builtins/printf.def:885
+#: builtins/printf.def:919
 msgid "missing hex digit for \\x"
 msgstr "\\x 用の十六進数字がありません"
 
-#: builtins/printf.def:900
+#: builtins/printf.def:934
 #, c-format
 msgid "missing unicode digit for \\%c"
 msgstr "\\%c 用のユニコード数値がありません"
@@ -826,12 +826,12 @@ msgstr ""
 "    \n"
 "    `dirs' ビルトインコマンドでディレクトリスタックを表示します。"
 
-#: builtins/read.def:280
+#: builtins/read.def:308
 #, c-format
 msgid "%s: invalid timeout specification"
 msgstr "%s: 無効なタイムアウト指定です"
 
-#: builtins/read.def:755
+#: builtins/read.def:827
 #, c-format
 msgid "read error: %d: %s"
 msgstr "読み込みエラー: %d: %s"
@@ -844,7 +844,7 @@ msgstr "`return' は関数または source されたスクリプト内のみで
 msgid "cannot simultaneously unset a function and a variable"
 msgstr "変数と関数を同時に消去することはできません"
 
-#: builtins/set.def:966
+#: builtins/set.def:969
 #, c-format
 msgid "%s: not an array variable"
 msgstr "%s: 配列変数ではありません"
@@ -863,11 +863,11 @@ msgstr "%s: export できません"
 msgid "shift count"
 msgstr "シフト回数"
 
-#: builtins/shopt.def:310
+#: builtins/shopt.def:323
 msgid "cannot set and unset shell options simultaneously"
 msgstr "シェルオプションを同時に有効かつ無効にできません"
 
-#: builtins/shopt.def:428
+#: builtins/shopt.def:444
 #, c-format
 msgid "%s: invalid shell option name"
 msgstr "%s: 無効なシェルオプション名です"
@@ -934,16 +934,16 @@ msgstr "%s: limit の無効な引数です"
 msgid "`%c': bad command"
 msgstr "`%c': 誤ったコマンドです"
 
-#: builtins/ulimit.def:455
+#: builtins/ulimit.def:464
 #, c-format
 msgid "%s: cannot get limit: %s"
 msgstr "%s: limit を取得できません: %s"
 
-#: builtins/ulimit.def:481
+#: builtins/ulimit.def:490
 msgid "limit"
 msgstr "limit"
 
-#: builtins/ulimit.def:493 builtins/ulimit.def:793
+#: builtins/ulimit.def:502 builtins/ulimit.def:802
 #, c-format
 msgid "%s: cannot modify limit: %s"
 msgstr "%s: limit を変更できません : %s"
@@ -962,7 +962,7 @@ msgstr "`%c': 無効なシンボリックモード演算子です"
 msgid "`%c': invalid symbolic mode character"
 msgstr "`%c': 無効なシンボリックモード文字です"
 
-#: error.c:89 error.c:347 error.c:349 error.c:351
+#: error.c:89 error.c:373 error.c:375 error.c:377
 msgid " line "
 msgstr " 行 "
 
@@ -982,96 +982,106 @@ msgstr "中止しています..."
 msgid "INFORM: "
 msgstr "情報: "
 
-#: error.c:462
+#: error.c:310
+#, c-format
+msgid "DEBUG warning: "
+msgstr "デバッグ 警告: "
+
+#: error.c:488
 msgid "unknown command error"
 msgstr "不明なコマンドエラーです"
 
-#: error.c:463
+#: error.c:489
 msgid "bad command type"
 msgstr "誤ったコマンドタイプです"
 
-#: error.c:464
+#: error.c:490
 msgid "bad connector"
 msgstr "誤った接続です"
 
-#: error.c:465
+#: error.c:491
 msgid "bad jump"
 msgstr "誤ったジャンプです"
 
-#: error.c:503
+#: error.c:529
 #, c-format
 msgid "%s: unbound variable"
 msgstr "%s: 未割り当ての変数です"
 
-#: eval.c:242
+#: eval.c:243
 msgid "\atimed out waiting for input: auto-logout\n"
 msgstr "\a入力待ちがタイムアウトしました: 自動ログアウト\n"
 
-#: execute_cmd.c:537
+#: execute_cmd.c:555
 #, c-format
 msgid "cannot redirect standard input from /dev/null: %s"
 msgstr "/dev/null から標準入力に対してリダイレクトできません: %s"
 
-#: execute_cmd.c:1297
+#: execute_cmd.c:1317
 #, c-format
 msgid "TIMEFORMAT: `%c': invalid format character"
 msgstr "TIMEFORMAT: `%c': 無効な書式文字です"
 
-#: execute_cmd.c:2362
+#: execute_cmd.c:2391
 #, c-format
 msgid "execute_coproc: coproc [%d:%s] still exists"
 msgstr ""
 
-#: execute_cmd.c:2486
+#: execute_cmd.c:2524
 msgid "pipe error"
 msgstr "パイプエラー"
 
-#: execute_cmd.c:4793
+#: execute_cmd.c:4923
 #, c-format
 msgid "eval: maximum eval nesting level exceeded (%d)"
 msgstr "eval: eval の入れ子レベルの最大値を超えています (%d)"
 
-#: execute_cmd.c:4805
+#: execute_cmd.c:4935
 #, c-format
 msgid "%s: maximum source nesting level exceeded (%d)"
 msgstr "%s: source の入れ子レベルの最大値を超えています (%d)"
 
-#: execute_cmd.c:4913
+#: execute_cmd.c:5043
 #, c-format
 msgid "%s: maximum function nesting level exceeded (%d)"
 msgstr "%s: 関数の入れ子レベルの最大値を超えています (%d)"
 
-#: execute_cmd.c:5467
+#: execute_cmd.c:5598
 #, c-format
 msgid "%s: restricted: cannot specify `/' in command names"
 msgstr "%s: 制限されています:  `/' をコマンド名の中に指定できません"
 
-#: execute_cmd.c:5574
+#: execute_cmd.c:5715
 #, c-format
 msgid "%s: command not found"
 msgstr "%s: コマンドが見つかりません"
 
-#: execute_cmd.c:5816
+#: execute_cmd.c:5957
 #, c-format
 msgid "%s: %s"
 msgstr "%s: %s"
 
-#: execute_cmd.c:5854
+#: execute_cmd.c:5975
+#, c-format
+msgid "%s: cannot execute: required file not found"
+msgstr "%s: 実行できません: 必要なファイルがありません"
+
+#: execute_cmd.c:6000
 #, c-format
 msgid "%s: %s: bad interpreter"
 msgstr "%s: %s: 誤ったインタプリタです"
 
-#: execute_cmd.c:5891
+#: execute_cmd.c:6037
 #, c-format
 msgid "%s: cannot execute binary file: %s"
 msgstr "%s: バイナリファイルを実行できません: %s"
 
-#: execute_cmd.c:5977
+#: execute_cmd.c:6123
 #, c-format
 msgid "`%s': is a special builtin"
 msgstr "`%s': 特殊シェル組み込み関数です"
 
-#: execute_cmd.c:6029
+#: execute_cmd.c:6175
 #, c-format
 msgid "cannot duplicate fd %d to fd %d"
 msgstr "fd %d を fd %d に複製できません"
@@ -1084,68 +1094,68 @@ msgstr "式の再帰可能レベルを越えました"
 msgid "recursion stack underflow"
 msgstr "再帰スタックがアンダーフローしました"
 
-#: expr.c:477
+#: expr.c:478
 msgid "syntax error in expression"
 msgstr "式に構文エラーがあります"
 
-#: expr.c:521
+#: expr.c:522
 msgid "attempted assignment to non-variable"
 msgstr "非変数に割り当てを行おうとしてます"
 
-#: expr.c:530
+#: expr.c:531
 msgid "syntax error in variable assignment"
 msgstr "変数の割り当てに構文エラーがあります"
 
-#: expr.c:544 expr.c:911
+#: expr.c:545 expr.c:912
 msgid "division by 0"
 msgstr "0 による除算です"
 
-#: expr.c:592
+#: expr.c:593
 msgid "bug: bad expassign token"
 msgstr "バグ: 誤った式のトークンです"
 
-#: expr.c:646
+#: expr.c:647
 msgid "`:' expected for conditional expression"
 msgstr "条件式には `:' が予期されます"
 
-#: expr.c:972
+#: expr.c:973
 msgid "exponent less than 0"
 msgstr "0より小さい指数部です"
 
-#: expr.c:1029
+#: expr.c:1030
 msgid "identifier expected after pre-increment or pre-decrement"
 msgstr "識別子は前置インクリメントまたは前置デクリメントが予期されます"
 
-#: expr.c:1056
+#: expr.c:1057
 msgid "missing `)'"
 msgstr "`)' がありません"
 
-#: expr.c:1107 expr.c:1487
+#: expr.c:1108 expr.c:1492
 msgid "syntax error: operand expected"
 msgstr "構文エラー: オペランドが予期されます"
 
-#: expr.c:1489
+#: expr.c:1494
 msgid "syntax error: invalid arithmetic operator"
 msgstr "構文エラー: 無効な計算演算子です"
 
-#: expr.c:1513
+#: expr.c:1518
 #, c-format
 msgid "%s%s%s: %s (error token is \"%s\")"
 msgstr "%s%s%s: %s (エラーのあるトークンは \"%s\")"
 
-#: expr.c:1573
+#: expr.c:1578
 msgid "invalid arithmetic base"
 msgstr "無効な基底の数値です"
 
-#: expr.c:1582
+#: expr.c:1587
 msgid "invalid integer constant"
 msgstr "無効な整数定数です"
 
-#: expr.c:1598
+#: expr.c:1603
 msgid "value too great for base"
 msgstr "基底の値が大きすぎます"
 
-#: expr.c:1647
+#: expr.c:1652
 #, c-format
 msgid "%s: expression error\n"
 msgstr "%s: 式のエラー\n"
@@ -1154,7 +1164,7 @@ msgstr "%s: 式のエラー\n"
 msgid "getcwd: cannot access parent directories"
 msgstr "getcwd: 親ディレクトリにアクセスできません"
 
-#: input.c:99 subst.c:6069
+#: input.c:99 subst.c:6208
 #, c-format
 msgid "cannot reset nodelay mode for fd %d"
 msgstr "ファイル記述子(fd) %d を無遅延モードに再設定できません"
@@ -1173,167 +1183,167 @@ msgstr "save_bash_input: 新規 fd %d のバッファはすでに存在します
 msgid "start_pipeline: pgrp pipe"
 msgstr "start_pipeline: pgrp pipe"
 
-#: jobs.c:906
+#: jobs.c:907
 #, c-format
 msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
 
-#: jobs.c:959
+#: jobs.c:960
 #, c-format
 msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
 
-#: jobs.c:1283
+#: jobs.c:1279
 #, c-format
 msgid "forked pid %d appears in running job %d"
 msgstr "実行中のジョブ %2$d で fork した pid %1$d が出現しました"
 
-#: jobs.c:1402
+#: jobs.c:1397
 #, c-format
 msgid "deleting stopped job %d with process group %ld"
 msgstr "プロセスグループ %2$ld のジョブ %1$d を削除しています"
 
-#: jobs.c:1511
+#: jobs.c:1502
 #, c-format
 msgid "add_process: pid %5ld (%s) marked as still alive"
 msgstr "add_process: pid %5ld (%s) はまだ存在しているとマークされています"
 
-#: jobs.c:1850
+#: jobs.c:1839
 #, c-format
 msgid "describe_pid: %ld: no such pid"
 msgstr "describe_pid: %ld: そのような pid は存在しません"
 
-#: jobs.c:1865
+#: jobs.c:1854
 #, c-format
 msgid "Signal %d"
 msgstr "シグナル %d"
 
-#: jobs.c:1879 jobs.c:1905
+#: jobs.c:1868 jobs.c:1894
 msgid "Done"
 msgstr "終了"
 
-#: jobs.c:1884 siglist.c:122
+#: jobs.c:1873 siglist.c:123
 msgid "Stopped"
 msgstr "停止"
 
-#: jobs.c:1888
+#: jobs.c:1877
 #, c-format
 msgid "Stopped(%s)"
 msgstr "停止 (%s)"
 
-#: jobs.c:1892
+#: jobs.c:1881
 msgid "Running"
 msgstr "実行中"
 
-#: jobs.c:1909
+#: jobs.c:1898
 #, c-format
 msgid "Done(%d)"
 msgstr "終了(%d)"
 
-#: jobs.c:1911
+#: jobs.c:1900
 #, c-format
 msgid "Exit %d"
 msgstr "終了 %d"
 
-#: jobs.c:1914
+#: jobs.c:1903
 msgid "Unknown status"
 msgstr "不明なステータス"
 
-#: jobs.c:2001
+#: jobs.c:1990
 #, c-format
 msgid "(core dumped) "
 msgstr "(コアダンプ) "
 
-#: jobs.c:2020
+#: jobs.c:2009
 #, c-format
 msgid "  (wd: %s)"
 msgstr "  (wd: %s)"
 
-#: jobs.c:2259
+#: jobs.c:2250
 #, c-format
 msgid "child setpgid (%ld to %ld)"
 msgstr "子プロセス setpgid (%ld から %ld)"
 
-#: jobs.c:2617 nojobs.c:664
+#: jobs.c:2608 nojobs.c:666
 #, c-format
 msgid "wait: pid %ld is not a child of this shell"
 msgstr "wait: pid %ld はこのシェルの子プロセスではありません"
 
-#: jobs.c:2893
+#: jobs.c:2884
 #, c-format
 msgid "wait_for: No record of process %ld"
 msgstr "wait_for: プロセス %ld の記録がありません"
 
-#: jobs.c:3236
+#: jobs.c:3223
 #, c-format
 msgid "wait_for_job: job %d is stopped"
 msgstr "wait_for_job: ジョブ %d は停止しています"
 
-#: jobs.c:3564
+#: jobs.c:3551
 #, c-format
 msgid "%s: no current jobs"
 msgstr "%s: カレントジョブがありません"
 
-#: jobs.c:3571
+#: jobs.c:3558
 #, c-format
 msgid "%s: job has terminated"
 msgstr "%s: ジョブは終了しました"
 
-#: jobs.c:3580
+#: jobs.c:3567
 #, c-format
 msgid "%s: job %d already in background"
 msgstr "%s: ジョブ %d はすでにバックグラウンドで動作しています"
 
-#: jobs.c:3806
+#: jobs.c:3793
 msgid "waitchld: turning on WNOHANG to avoid indefinite block"
 msgstr "waitchld: 不定のブロックを避けるために WNOHANG をオンにしました。"
 
-#: jobs.c:4320
+#: jobs.c:4307
 #, c-format
 msgid "%s: line %d: "
 msgstr "%s: %d 行: "
 
-#: jobs.c:4334 nojobs.c:919
+#: jobs.c:4321 nojobs.c:921
 #, c-format
 msgid " (core dumped)"
 msgstr " (コアダンプ)"
 
-#: jobs.c:4346 jobs.c:4359
+#: jobs.c:4333 jobs.c:4346
 #, c-format
 msgid "(wd now: %s)\n"
 msgstr "(wd now: %s)\n"
 
-#: jobs.c:4391
+#: jobs.c:4378
 msgid "initialize_job_control: getpgrp failed"
 msgstr "initialize_job_control: getpgrp が失敗しました"
 
-#: jobs.c:4447
+#: jobs.c:4434
 msgid "initialize_job_control: no job control in background"
 msgstr "initialize_job_control: バックグラウンドにジョブコントロールがありません"
 
-#: jobs.c:4463
+#: jobs.c:4450
 msgid "initialize_job_control: line discipline"
 msgstr "initialize_job_control: line discipline"
 
-#: jobs.c:4473
+#: jobs.c:4460
 msgid "initialize_job_control: setpgid"
 msgstr "initialize_job_control: setpgid"
 
-#: jobs.c:4494 jobs.c:4503
+#: jobs.c:4481 jobs.c:4490
 #, c-format
 msgid "cannot set terminal process group (%d)"
 msgstr "端末プロセスグループを設定できません (%d)"
 
-#: jobs.c:4508
+#: jobs.c:4495
 msgid "no job control in this shell"
 msgstr "このシェルではジョブ制御が無効になっています"
 
-#: lib/malloc/malloc.c:353
+#: lib/malloc/malloc.c:367
 #, c-format
 msgid "malloc: failed assertion: %s\n"
 msgstr "malloc: 失敗したアサーション: %s\n"
 
-#: lib/malloc/malloc.c:369
+#: lib/malloc/malloc.c:383
 #, c-format
 msgid ""
 "\r\n"
@@ -1342,47 +1352,47 @@ msgstr ""
 "\r\n"
 "malloc: %s:%d: アサーション失敗\r\n"
 
-#: lib/malloc/malloc.c:370 lib/malloc/malloc.c:933
+#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941
 msgid "unknown"
 msgstr "不明"
 
-#: lib/malloc/malloc.c:882
+#: lib/malloc/malloc.c:892
 msgid "malloc: block on free list clobbered"
 msgstr "malloc: free ブロックリストが壊れています"
 
-#: lib/malloc/malloc.c:972
+#: lib/malloc/malloc.c:980
 msgid "free: called with already freed block argument"
 msgstr "free: 既に free されたブロックを引数として呼び出されました"
 
-#: lib/malloc/malloc.c:975
+#: lib/malloc/malloc.c:983
 msgid "free: called with unallocated block argument"
 msgstr "free: 未割当のブロックを引数として呼び出されました"
 
-#: lib/malloc/malloc.c:994
+#: lib/malloc/malloc.c:1001
 msgid "free: underflow detected; mh_nbytes out of range"
 msgstr "free: アンダーフローを検出しました。 mh_nbytes が範囲外です"
 
-#: lib/malloc/malloc.c:1001
+#: lib/malloc/malloc.c:1007
 msgid "free: underflow detected; magic8 corrupted"
 msgstr "free: アンダーフローを検出しました。magic8 壊れています"
 
-#: lib/malloc/malloc.c:1009
+#: lib/malloc/malloc.c:1014
 msgid "free: start and end chunk sizes differ"
 msgstr "free: 開始と終了の塊の大きさが異なっています"
 
-#: lib/malloc/malloc.c:1119
+#: lib/malloc/malloc.c:1176
 msgid "realloc: called with unallocated block argument"
 msgstr "realloc: 未割当のブロックを引数として呼び出されました"
 
-#: lib/malloc/malloc.c:1134
+#: lib/malloc/malloc.c:1191
 msgid "realloc: underflow detected; mh_nbytes out of range"
 msgstr "realloc: アンダーフローを検出しました。 mh_nbytes が範囲外です"
 
-#: lib/malloc/malloc.c:1141
+#: lib/malloc/malloc.c:1197
 msgid "realloc: underflow detected; magic8 corrupted"
 msgstr "realloc: アンダーフローを検出しました。magic8 が壊れています"
 
-#: lib/malloc/malloc.c:1150
+#: lib/malloc/malloc.c:1205
 msgid "realloc: start and end chunk sizes differ"
 msgstr "realloc: 開始と終了の塊の大きさが異なっています"
 
@@ -1424,22 +1434,22 @@ msgstr "%s: ネットワークパス指定に誤りがあります"
 msgid "network operations not supported"
 msgstr "ネットワーク操作はサポートされていません"
 
-#: locale.c:217
+#: locale.c:219
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s)"
 msgstr "setlocale: LC_ALL: ロケールを変更できません (%s)"
 
-#: locale.c:219
+#: locale.c:221
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s): %s"
 msgstr "setlocale: LC_ALL: ロケールを変更できません (%s): %s"
 
-#: locale.c:292
+#: locale.c:294
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s)"
 msgstr "setlocale: %s: ロケールを変更できません (%s)"
 
-#: locale.c:294
+#: locale.c:296
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s): %s"
 msgstr "setlocale: %s: ロケールを変更できません (%s): %s"
@@ -1457,136 +1467,136 @@ msgstr "新しいメールが $_ にあります"
 msgid "The mail in %s has been read\n"
 msgstr "%s のメールは既読です\n"
 
-#: make_cmd.c:317
+#: make_cmd.c:314
 msgid "syntax error: arithmetic expression required"
 msgstr "構文エラー: 数値の式が必要です"
 
-#: make_cmd.c:319
+#: make_cmd.c:316
 msgid "syntax error: `;' unexpected"
 msgstr "構文エラー: 予期しない `;' です"
 
-#: make_cmd.c:320
+#: make_cmd.c:317
 #, c-format
 msgid "syntax error: `((%s))'"
 msgstr "構文エラー: `((%s))'"
 
-#: make_cmd.c:572
+#: make_cmd.c:569
 #, c-format
 msgid "make_here_document: bad instruction type %d"
 msgstr "make_here_document: 誤った指定の種類 %d"
 
-#: make_cmd.c:657
+#: make_cmd.c:668
 #, c-format
 msgid "here-document at line %d delimited by end-of-file (wanted `%s')"
 msgstr "ヒアドキュメントの %d 行目でファイル終了 (EOF) に達しました (`%s' が必要)"
 
-#: make_cmd.c:756
+#: make_cmd.c:769
 #, c-format
 msgid "make_redirection: redirection instruction `%d' out of range"
 msgstr "make_redirection: リダイレクト指定 `%d' は範囲外です"
 
-#: parse.y:2393
+#: parse.y:2428
 #, c-format
 msgid "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line truncated"
 msgstr ""
 
-#: parse.y:2826
+#: parse.y:2921
 msgid "maximum here-document count exceeded"
 msgstr "ヒアドキュメントの最大数を超えました"
 
-#: parse.y:3581 parse.y:3957 parse.y:4556
+#: parse.y:3684 parse.y:4244 parse.y:6148
 #, c-format
 msgid "unexpected EOF while looking for matching `%c'"
 msgstr "対応する `%c' を探索中に予期しないファイル終了 (EOF) です"
 
-#: parse.y:4696
+#: parse.y:4452
 msgid "unexpected EOF while looking for `]]'"
 msgstr "`]]' を探索中に予期しないファイル終了 (EOF) です"
 
-#: parse.y:4701
+#: parse.y:4457
 #, c-format
 msgid "syntax error in conditional expression: unexpected token `%s'"
 msgstr "条件式に構文エラー: 予期しないトークン `%s' です"
 
-#: parse.y:4705
+#: parse.y:4461
 msgid "syntax error in conditional expression"
 msgstr "条件式に構文エラーがあります"
 
-#: parse.y:4783
+#: parse.y:4539
 #, c-format
 msgid "unexpected token `%s', expected `)'"
 msgstr "予期しないトークン `%s' です。`)' が予期されます"
 
-#: parse.y:4787
+#: parse.y:4543
 msgid "expected `)'"
 msgstr "`)' が予期されます"
 
-#: parse.y:4815
+#: parse.y:4571
 #, c-format
 msgid "unexpected argument `%s' to conditional unary operator"
 msgstr "条件単項演算子に予期しない引数 `%s' です"
 
-#: parse.y:4819
+#: parse.y:4575
 msgid "unexpected argument to conditional unary operator"
 msgstr "条件単項演算子に予期しない引数です"
 
-#: parse.y:4865
+#: parse.y:4621
 #, c-format
 msgid "unexpected token `%s', conditional binary operator expected"
 msgstr "`%s` は予期しないトークンです。条件二項演算子が予期されます"
 
-#: parse.y:4869
+#: parse.y:4625
 msgid "conditional binary operator expected"
 msgstr "条件二項演算子が予期されます"
 
-#: parse.y:4891
+#: parse.y:4647
 #, c-format
 msgid "unexpected argument `%s' to conditional binary operator"
 msgstr "条件二項演算子に予期しない引数 `%s' です"
 
-#: parse.y:4895
+#: parse.y:4651
 msgid "unexpected argument to conditional binary operator"
 msgstr "条件二項演算子に予期しない引数です"
 
-#: parse.y:4906
+#: parse.y:4662
 #, c-format
 msgid "unexpected token `%c' in conditional command"
 msgstr "条件コマンドに予期しないトークン `%c' があります"
 
-#: parse.y:4909
+#: parse.y:4665
 #, c-format
 msgid "unexpected token `%s' in conditional command"
 msgstr "条件コマンドに予期しないトークン `%s' があります"
 
-#: parse.y:4913
+#: parse.y:4669
 #, c-format
 msgid "unexpected token %d in conditional command"
 msgstr "条件コマンドに予期しないトークン %d があります"
 
-#: parse.y:6336
+#: parse.y:6118
 #, c-format
 msgid "syntax error near unexpected token `%s'"
 msgstr "予期しないトークン `%s' 周辺に構文エラーがあります"
 
-#: parse.y:6355
+#: parse.y:6137
 #, c-format
 msgid "syntax error near `%s'"
 msgstr "`%s' 周辺に構文エラーがあります"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error: unexpected end of file"
 msgstr "構文エラー: 予期しないファイル終了 (EOF) です"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error"
 msgstr "構文エラー"
 
-#: parse.y:6428
+#: parse.y:6216
 #, c-format
 msgid "Use \"%s\" to leave the shell.\n"
 msgstr "シェルから脱出するには \"%s\" を使用してください。\n"
 
-#: parse.y:6602
+#: parse.y:6394
 msgid "unexpected EOF while looking for matching `)'"
 msgstr "対応する `)' を探索中に予期しないファイル終了(EOF)です"
 
@@ -1624,94 +1634,94 @@ msgstr "xtrace_set: NULL ファイルポインタです"
 msgid "xtrace fd (%d) != fileno xtrace fp (%d)"
 msgstr "xtrace fd (%d) != fileno xtrace fp (%d)"
 
-#: print_cmd.c:1540
+#: print_cmd.c:1545
 #, c-format
 msgid "cprintf: `%c': invalid format character"
 msgstr "cprintf: `%c': 無効な書式文字です"
 
-#: redir.c:149 redir.c:197
+#: redir.c:150 redir.c:198
 msgid "file descriptor out of range"
 msgstr "ファイル記述子が範囲外です"
 
-#: redir.c:204
+#: redir.c:205
 #, c-format
 msgid "%s: ambiguous redirect"
 msgstr "%s: 曖昧なリダイレクトです"
 
-#: redir.c:208
+#: redir.c:209
 #, c-format
 msgid "%s: cannot overwrite existing file"
 msgstr "%s: 存在するファイルを上書きできません"
 
-#: redir.c:213
+#: redir.c:214
 #, c-format
 msgid "%s: restricted: cannot redirect output"
 msgstr "%s: 制限されています: 出力をリダイレクト出来ません"
 
-#: redir.c:218
+#: redir.c:219
 #, c-format
 msgid "cannot create temp file for here-document: %s"
 msgstr "ヒアドキュメント用一時ファイルを作成できません: %s"
 
-#: redir.c:222
+#: redir.c:223
 #, c-format
 msgid "%s: cannot assign fd to variable"
 msgstr "%s: ファイル記述子 (fd) を変数に設定することはできません"
 
-#: redir.c:649
+#: redir.c:650
 msgid "/dev/(tcp|udp)/host/port not supported without networking"
 msgstr "ネットワークが無効な場合 /dev/(tcp|udp)/host/port はサポートされません"
 
-#: redir.c:938 redir.c:1053 redir.c:1114 redir.c:1284
+#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303
 msgid "redirection error: cannot duplicate fd"
 msgstr "リダイレクトエラー: ファイル記述子を複製できません"
 
-#: shell.c:347
+#: shell.c:353
 msgid "could not find /tmp, please create!"
 msgstr "/tmp が見つかりません。作成してください!"
 
-#: shell.c:351
+#: shell.c:357
 msgid "/tmp must be a valid directory name"
 msgstr "/tmp は有効なディレクトリ名でなければいけません"
 
-#: shell.c:804
+#: shell.c:826
 msgid "pretty-printing mode ignored in interactive shells"
-msgstr ""
+msgstr "pretty-printing モードはインタラクティブシェルでは無視されます"
 
-#: shell.c:948
+#: shell.c:972
 #, c-format
 msgid "%c%c: invalid option"
 msgstr "%c%c: 無効なオプション"
 
-#: shell.c:1319
+#: shell.c:1343
 #, c-format
 msgid "cannot set uid to %d: effective uid %d"
 msgstr "uidを %d に設定できません: 実効uid %d"
 
-#: shell.c:1330
+#: shell.c:1354
 #, c-format
 msgid "cannot set gid to %d: effective gid %d"
 msgstr "gidを %d に設定できません: 実効gid %d"
 
-#: shell.c:1518
+#: shell.c:1544
 msgid "cannot start debugger; debugging mode disabled"
 msgstr "デバッガを開始できません。デバッガモードが無効になっています"
 
-#: shell.c:1632
+#: shell.c:1658
 #, c-format
 msgid "%s: Is a directory"
 msgstr "%s: ディレクトリです"
 
-#: shell.c:1881
+#: shell.c:1907
 msgid "I have no name!"
 msgstr "私は名前がありません!"
 
-#: shell.c:2035
+#: shell.c:2061
 #, c-format
 msgid "GNU bash, version %s-(%s)\n"
 msgstr "GNU bash, バージョン %s-(%s)\n"
 
-#: shell.c:2036
+#: shell.c:2062
 #, c-format
 msgid ""
 "Usage:\t%s [GNU long option] [option] ...\n"
@@ -1720,317 +1730,317 @@ msgstr ""
 "使用法:\t%s [GNU long option] [option] ...\n"
 "\t%s [GNU long option] [option] script-file ...\n"
 
-#: shell.c:2038
+#: shell.c:2064
 msgid "GNU long options:\n"
 msgstr "GNU 形式の長いオプション:\n"
 
-#: shell.c:2042
+#: shell.c:2068
 msgid "Shell options:\n"
 msgstr "シェルオプション:\n"
 
-#: shell.c:2043
+#: shell.c:2069
 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n"
 msgstr "\t-ilrsD, -c command または -O shopt_option\t\t(起動時のみ)\n"
 
-#: shell.c:2062
+#: shell.c:2088
 #, c-format
 msgid "\t-%s or -o option\n"
 msgstr "\t-%s または -o option\n"
 
-#: shell.c:2068
+#: shell.c:2094
 #, c-format
 msgid "Type `%s -c \"help set\"' for more information about shell options.\n"
 msgstr "シェルオプションの詳細については `%s -c \"help set\"'と入力してください。\n"
 
-#: shell.c:2069
+#: shell.c:2095
 #, c-format
 msgid "Type `%s -c help' for more information about shell builtin commands.\n"
 msgstr "シェル組み込みコマンドについては `%s -c help' と入力してください。\n"
 
-#: shell.c:2070
+#: shell.c:2096
 #, c-format
 msgid "Use the `bashbug' command to report bugs.\n"
 msgstr "バグ報告をする場合は `bashbug' コマンドを使用してください。\n"
 
-#: shell.c:2072
+#: shell.c:2098
 #, c-format
 msgid "bash home page: <http://www.gnu.org/software/bash>\n"
 msgstr "bashホームページ: <http://www.gnu.org/software/bash>\n"
 
-#: shell.c:2073
+#: shell.c:2099
 #, c-format
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 msgstr "GNUソフトウェアを使用する時の一般的なヘルプ : <http://www.gnu.org/gethelp/>\n"
 
-#: sig.c:757
+#: sig.c:765
 #, c-format
 msgid "sigprocmask: %d: invalid operation"
 msgstr "sigprocmask: %d: 無効な操作です"
 
-#: siglist.c:47
+#: siglist.c:48
 msgid "Bogus signal"
 msgstr "悪いシグナル"
 
-#: siglist.c:50
+#: siglist.c:51
 msgid "Hangup"
 msgstr "停止"
 
-#: siglist.c:54
+#: siglist.c:55
 msgid "Interrupt"
 msgstr "割り込み"
 
-#: siglist.c:58
+#: siglist.c:59
 msgid "Quit"
 msgstr "終了"
 
-#: siglist.c:62
+#: siglist.c:63
 msgid "Illegal instruction"
 msgstr "不正な指定"
 
-#: siglist.c:66
+#: siglist.c:67
 msgid "BPT trace/trap"
 msgstr "BPT trace/trap"
 
-#: siglist.c:74
+#: siglist.c:75
 msgid "ABORT instruction"
 msgstr "ABORT 指定"
 
-#: siglist.c:78
+#: siglist.c:79
 msgid "EMT instruction"
 msgstr "EMT 指定"
 
-#: siglist.c:82
+#: siglist.c:83
 msgid "Floating point exception"
 msgstr "浮動小数点例外"
 
-#: siglist.c:86
+#: siglist.c:87
 msgid "Killed"
 msgstr "Killed"
 
-#: siglist.c:90
+#: siglist.c:91
 msgid "Bus error"
 msgstr "バスエラー"
 
-#: siglist.c:94
+#: siglist.c:95
 msgid "Segmentation fault"
 msgstr "セグメンテーションフォルト"
 
-#: siglist.c:98
+#: siglist.c:99
 msgid "Bad system call"
 msgstr "誤ったシステムコール"
 
-#: siglist.c:102
+#: siglist.c:103
 msgid "Broken pipe"
 msgstr "パイプが切れました"
 
-#: siglist.c:106
+#: siglist.c:107
 msgid "Alarm clock"
 msgstr "アラーム時計"
 
-#: siglist.c:110
+#: siglist.c:111
 msgid "Terminated"
 msgstr "Terminated"
 
-#: siglist.c:114
+#: siglist.c:115
 msgid "Urgent IO condition"
 msgstr "急ぎの IO 状態"
 
-#: siglist.c:118
+#: siglist.c:119
 msgid "Stopped (signal)"
 msgstr "停止 (シグナル)"
 
-#: siglist.c:126
+#: siglist.c:127
 msgid "Continue"
 msgstr "続行"
 
-#: siglist.c:134
+#: siglist.c:135
 msgid "Child death or stop"
 msgstr "子プロセスの死亡または停止 "
 
-#: siglist.c:138
+#: siglist.c:139
 msgid "Stopped (tty input)"
 msgstr "停止 (tty 入力)"
 
-#: siglist.c:142
+#: siglist.c:143
 msgid "Stopped (tty output)"
 msgstr "停止 (tty 出力)"
 
-#: siglist.c:146
+#: siglist.c:147
 msgid "I/O ready"
 msgstr "I/O 用意ができています"
 
-#: siglist.c:150
+#: siglist.c:151
 msgid "CPU limit"
 msgstr "CPU limit"
 
-#: siglist.c:154
+#: siglist.c:155
 msgid "File limit"
 msgstr "ファイル limit"
 
-#: siglist.c:158
+#: siglist.c:159
 msgid "Alarm (virtual)"
 msgstr "警報 (仮想)"
 
-#: siglist.c:162
+#: siglist.c:163
 msgid "Alarm (profile)"
 msgstr "警報 (プロファイル)"
 
-#: siglist.c:166
+#: siglist.c:167
 msgid "Window changed"
 msgstr "ウィンドウが変更されました"
 
-#: siglist.c:170
+#: siglist.c:171
 msgid "Record lock"
 msgstr "記録のロック"
 
-#: siglist.c:174
+#: siglist.c:175
 msgid "User signal 1"
 msgstr "ユーザシグナル 1"
 
-#: siglist.c:178
+#: siglist.c:179
 msgid "User signal 2"
 msgstr "ユーザシグナル 2"
 
-#: siglist.c:182
+#: siglist.c:183
 msgid "HFT input data pending"
 msgstr "HFT 未決の入力データ"
 
-#: siglist.c:186
+#: siglist.c:187
 msgid "power failure imminent"
 msgstr "電源故障の危険"
 
-#: siglist.c:190
+#: siglist.c:191
 msgid "system crash imminent"
 msgstr "システムクラッシュの危険"
 
-#: siglist.c:194
+#: siglist.c:195
 msgid "migrate process to another CPU"
 msgstr "プロセスを別のCPUに移動"
 
-#: siglist.c:198
+#: siglist.c:199
 msgid "programming error"
 msgstr "プログラミングエラー"
 
-#: siglist.c:202
+#: siglist.c:203
 msgid "HFT monitor mode granted"
 msgstr "HFT monitorモードが与えられました"
 
-#: siglist.c:206
+#: siglist.c:207
 msgid "HFT monitor mode retracted"
 msgstr "HFT monitorモードが奪われました"
 
-#: siglist.c:210
+#: siglist.c:211
 msgid "HFT sound sequence has completed"
 msgstr "HFT サウンドシーケンスが完了しました"
 
-#: siglist.c:214
+#: siglist.c:215
 msgid "Information request"
 msgstr "情報要求"
 
-#: siglist.c:222 siglist.c:224
+#: siglist.c:223 siglist.c:225
 #, c-format
 msgid "Unknown Signal #%d"
 msgstr "不明なシグナル番号 %d"
 
-#: subst.c:1476 subst.c:1666
+#: subst.c:1480 subst.c:1670
 #, c-format
 msgid "bad substitution: no closing `%s' in %s"
 msgstr "誤った代入: 閉じる `%s' が %s に存在しません"
 
-#: subst.c:3281
+#: subst.c:3307
 #, c-format
 msgid "%s: cannot assign list to array member"
 msgstr "%s: リストを配列要素に割り当てできません"
 
-#: subst.c:5910 subst.c:5926
+#: subst.c:6048 subst.c:6064
 msgid "cannot make pipe for process substitution"
 msgstr "プロセス代入ではパイプを作成できません"
 
-#: subst.c:5985
+#: subst.c:6124
 msgid "cannot make child for process substitution"
 msgstr "プロセス代入では子プロセスを作成できません"
 
-#: subst.c:6059
+#: subst.c:6198
 #, c-format
 msgid "cannot open named pipe %s for reading"
 msgstr "名前付きパイプ %s を読み込み用に開けません"
 
-#: subst.c:6061
+#: subst.c:6200
 #, c-format
 msgid "cannot open named pipe %s for writing"
 msgstr "名前付きパイプ %s を書き込み用に開けません"
 
-#: subst.c:6084
+#: subst.c:6223
 #, c-format
 msgid "cannot duplicate named pipe %s as fd %d"
 msgstr "名前付きパイプ %s をファイル記述子(fd) %d として複製できません"
 
-#: subst.c:6213
+#: subst.c:6370
 msgid "command substitution: ignored null byte in input"
 msgstr "コマンド代入: 入力のヌルバイトを無視しました"
 
-#: subst.c:6353
+#: subst.c:6533
 msgid "cannot make pipe for command substitution"
 msgstr "コマンド代入ではパイプを作成できません"
 
-#: subst.c:6397
+#: subst.c:6580
 msgid "cannot make child for command substitution"
 msgstr "コマンド代入では子プロセスを作成できません"
 
-#: subst.c:6423
+#: subst.c:6613
 msgid "command_substitute: cannot duplicate pipe as fd 1"
 msgstr "command_substitute: パイプを fd 1 として複製できません"
 
-#: subst.c:6883 subst.c:9952
+#: subst.c:7082 subst.c:10252
 #, c-format
 msgid "%s: invalid variable name for name reference"
 msgstr "%s: 名前参照として無効な変数です"
 
-#: subst.c:6979 subst.c:6997 subst.c:7169
+#: subst.c:7178 subst.c:7196 subst.c:7369
 #, c-format
 msgid "%s: invalid indirect expansion"
 msgstr "%s: 無効な間接展開です"
 
-#: subst.c:7013 subst.c:7177
+#: subst.c:7212 subst.c:7377
 #, c-format
 msgid "%s: invalid variable name"
 msgstr "%s: 無効な変数名です"
 
-#: subst.c:7256
+#: subst.c:7478
 #, c-format
 msgid "%s: parameter not set"
 msgstr "%s: パラメータが設定されていません"
 
-#: subst.c:7258
+#: subst.c:7480
 #, c-format
 msgid "%s: parameter null or not set"
 msgstr "%s: パラメータが null または設定されていません"
 
-#: subst.c:7503 subst.c:7518
+#: subst.c:7727 subst.c:7742
 #, c-format
 msgid "%s: substring expression < 0"
 msgstr "%s: substring expression < 0"
 
-#: subst.c:9281 subst.c:9302
+#: subst.c:9560 subst.c:9587
 #, c-format
 msgid "%s: bad substitution"
 msgstr "%s: 誤った代入です"
 
-#: subst.c:9390
+#: subst.c:9678
 #, c-format
 msgid "$%s: cannot assign in this way"
 msgstr "$%s: この方法で割当はできません"
 
-#: subst.c:9814
+#: subst.c:10111
 msgid "future versions of the shell will force evaluation as an arithmetic substitution"
 msgstr "将来のバージョンのシェルでは強制的に数値代入として評価されます"
 
-#: subst.c:10367
+#: subst.c:10795
 #, c-format
 msgid "bad substitution: no closing \"`\" in %s"
 msgstr "誤った代入: %s に閉じる \"`\" がありません"
 
-#: subst.c:11434
+#: subst.c:11874
 #, c-format
 msgid "no match: %s"
 msgstr "一致しません: %s"
@@ -2053,21 +2063,21 @@ msgstr "`)' が予期されます"
 msgid "`)' expected, found %s"
 msgstr "`)' が予期されますが、見つかったのは %s です"
 
-#: test.c:466 test.c:799
+#: test.c:469 test.c:814
 #, c-format
 msgid "%s: binary operator expected"
 msgstr "%s: 二項演算子が予期されます"
 
-#: test.c:756 test.c:759
+#: test.c:771 test.c:774
 #, c-format
 msgid "%s: unary operator expected"
 msgstr "%s: 単項演算子が予期されます"
 
-#: test.c:881
+#: test.c:896
 msgid "missing `]'"
 msgstr "`]'がありません"
 
-#: test.c:899
+#: test.c:914
 #, c-format
 msgid "syntax error: `%s' unexpected"
 msgstr "構文エラー: 予期しない `%s' です"
@@ -2076,99 +2086,104 @@ msgstr "構文エラー: 予期しない `%s' です"
 msgid "invalid signal number"
 msgstr "無効なシグナル番号"
 
-#: trap.c:325
+#: trap.c:323
 #, c-format
 msgid "trap handler: maximum trap handler level exceeded (%d)"
 msgstr "trap handler: trap handler の最大レベルを超えています (%d)"
 
-#: trap.c:414
+#: trap.c:412
 #, c-format
 msgid "run_pending_traps: bad value in trap_list[%d]: %p"
 msgstr "run_pending_traps: trap_list[%d] に誤った値があります: %p"
 
-#: trap.c:418
+#: trap.c:416
 #, c-format
 msgid "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
 msgstr "run_pending_traps: シグナルハンドラーは SIG_DFLです。, %d (%s) を自身に再送します。"
 
-#: trap.c:487
+#: trap.c:509
 #, c-format
 msgid "trap_handler: bad signal %d"
 msgstr "trap_handler: 誤ったシグナル %d"
 
-#: variables.c:421
+#: variables.c:424
 #, c-format
 msgid "error importing function definition for `%s'"
 msgstr "`%s' の関数定義をインポート中にエラーが発生しました"
 
-#: variables.c:833
+#: variables.c:838
 #, c-format
 msgid "shell level (%d) too high, resetting to 1"
 msgstr "シェルレベル (%d) は高すぎます。1に再設定されました"
 
-#: variables.c:2674
+#: variables.c:2642
 msgid "make_local_variable: no function context at current scope"
 msgstr "make_local_variable: 現在のスコープは関数コンテキストではありません"
 
-#: variables.c:2693
+#: variables.c:2661
 #, c-format
 msgid "%s: variable may not be assigned value"
 msgstr "%s: 変数が初期化されていないかもしれません"
 
-#: variables.c:3475
+#: variables.c:2818 variables.c:2874
+#, c-format
+msgid "%s: cannot inherit value from incompatible type"
+msgstr "%s: 互換性のないタイプからは継承できません"
+
+#: variables.c:3459
 #, c-format
 msgid "%s: assigning integer to name reference"
 msgstr "%s: 名前参照に整数を代入しようとしています"
 
-#: variables.c:4404
+#: variables.c:4390
 msgid "all_local_variables: no function context at current scope"
 msgstr "all_local_variables: 現在のスコープは関数コンテキストではありません"
 
-#: variables.c:4771
+#: variables.c:4757
 #, c-format
 msgid "%s has null exportstr"
 msgstr "%s は null の exportstr を持っています"
 
-#: variables.c:4776 variables.c:4785
+#: variables.c:4762 variables.c:4771
 #, c-format
 msgid "invalid character %d in exportstr for %s"
 msgstr "%2$s に対する exportstr で %1$d は無効な文字です"
 
-#: variables.c:4791
+#: variables.c:4777
 #, c-format
 msgid "no `=' in exportstr for %s"
 msgstr "%s に対する exportstr に `=' がありません"
 
-#: variables.c:5331
+#: variables.c:5317
 msgid "pop_var_context: head of shell_variables not a function context"
 msgstr "pop_var_context: shell_variables の先頭です。関数コンテキストではありません"
 
-#: variables.c:5344
+#: variables.c:5330
 msgid "pop_var_context: no global_variables context"
 msgstr "pop_var_context: global_variables コンテキストではありません"
 
-#: variables.c:5424
+#: variables.c:5410
 msgid "pop_scope: head of shell_variables not a temporary environment scope"
 msgstr "pop_scope: shell_variables の先頭です。一時環境スコープではありません"
 
-#: variables.c:6387
+#: variables.c:6400
 #, c-format
 msgid "%s: %s: cannot open as FILE"
 msgstr "%s: %s: ファイルとして開くことができません"
 
-#: variables.c:6392
+#: variables.c:6405
 #, c-format
 msgid "%s: %s: invalid value for trace file descriptor"
 msgstr "%s: %s: トレースファイル記述子として無効な値です"
 
-#: variables.c:6437
+#: variables.c:6450
 #, c-format
 msgid "%s: %s: compatibility value out of range"
 msgstr "%s: %s: 値の互換性が範囲外です"
 
 #: version.c:46 version2.c:46
-msgid "Copyright (C) 2020 Free Software Foundation, Inc."
-msgstr "Copyright (C) 2020 Free Software Foundation, Inc."
+msgid "Copyright (C) 2022 Free Software Foundation, Inc."
+msgstr "Copyright (C) 2022 Free Software Foundation, Inc."
 
 #: version.c:47 version2.c:47
 msgid "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n"
@@ -2248,12 +2263,12 @@ msgid "command [-pVv] command [arg ...]"
 msgstr "command [-pVv] command [arg ...]"
 
 #: builtins.c:78
-msgid "declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]"
-msgstr "declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]"
+msgid "declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] [name ...]"
+msgstr "declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] [name ...]"
 
 #: builtins.c:80
-msgid "typeset [-aAfFgiIlnrtux] [-p] name[=value] ..."
-msgstr "typeset [-aAfFgiIlnrtux] [-p] name[=value] ..."
+msgid "typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] [name ...]"
+msgstr "typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] [name ...]"
 
 #: builtins.c:82
 msgid "local [option] name[=value] ..."
@@ -2340,8 +2355,8 @@ msgid "return [n]"
 msgstr "return [n]"
 
 #: builtins.c:142
-msgid "set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]"
-msgstr "set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]"
+msgid "set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]"
+msgstr "set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]"
 
 #: builtins.c:144
 msgid "unset [-f] [-v] [-n] [name ...]"
@@ -2388,8 +2403,8 @@ msgid "type [-afptP] name [name ...]"
 msgstr "type [-afptP] name [name ...]"
 
 #: builtins.c:171
-msgid "ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]"
-msgstr "ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]"
+msgid "ulimit [-SHabcdefiklmnpqrstuvxPRT] [limit]"
+msgstr "ulimit [-SHabcdefiklmnpqrstuvxPRT] [limit]"
 
 #: builtins.c:174
 msgid "umask [-p] [-S] [mode]"
@@ -2428,12 +2443,12 @@ msgid "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else C
 msgstr "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi"
 
 #: builtins.c:196
-msgid "while COMMANDS; do COMMANDS; done"
-msgstr "while COMMANDS; do COMMANDS; done"
+msgid "while COMMANDS; do COMMANDS-2; done"
+msgstr "while COMMANDS; do COMMANDS-2; done"
 
 #: builtins.c:198
-msgid "until COMMANDS; do COMMANDS; done"
-msgstr "until COMMANDS; do COMMANDS; done"
+msgid "until COMMANDS; do COMMANDS-2; done"
+msgstr "until COMMANDS; do COMMANDS-2; done"
 
 #: builtins.c:200
 msgid "coproc [NAME] command [redirections]"
@@ -3726,7 +3741,8 @@ msgid ""
 "    splitting, and the first word is assigned to the first NAME, the second\n"
 "    word to the second NAME, and so on, with any leftover words assigned to\n"
 "    the last NAME.  Only the characters found in $IFS are recognized as word\n"
-"    delimiters.\n"
+"    delimiters. By default, the backslash character escapes delimiter characters\n"
+"    and newline.\n"
 "    \n"
 "    If no NAMEs are supplied, the line read is stored in the REPLY variable.\n"
 "    \n"
@@ -3800,7 +3816,7 @@ msgstr ""
 "    ファイル終了(EOF)、読み込みタイムアウト(この場合は128以上)、変数への代入エ\n"
 "    ラーが発生、 -u に無効なファイル記述子が与えられた場合を除き0を返します。"
 
-#: builtins.c:1041
+#: builtins.c:1042
 msgid ""
 "Return from a shell function.\n"
 "    \n"
@@ -3821,7 +3837,7 @@ msgstr ""
 "    戻り値 N、またはシェルが関数またはスクリプトを実行していない場合は失敗を\n"
 "    返します。"
 
-#: builtins.c:1054
+#: builtins.c:1055
 #, fuzzy
 msgid ""
 "Set or unset values of shell options and positional parameters.\n"
@@ -3984,7 +4000,7 @@ msgstr ""
 "    終了ステータス:\n"
 "    無効なオプションが与えられない限り成功を返します。"
 
-#: builtins.c:1139
+#: builtins.c:1140
 #, fuzzy
 msgid ""
 "Unset values and attributes of shell variables and functions.\n"
@@ -4023,7 +4039,7 @@ msgstr ""
 "    終了ステータス:\n"
 "    無効なオプションが与えられるか NAME が読み取り専用の場合を除き成功を返します。"
 
-#: builtins.c:1161
+#: builtins.c:1162
 msgid ""
 "Set export attribute for shell variables.\n"
 "    \n"
@@ -4057,7 +4073,7 @@ msgstr ""
 "    無効なオプションが与えられるか、無効な NAME が与えられない限り成功\n"
 "    を返します。"
 
-#: builtins.c:1180
+#: builtins.c:1181
 #, fuzzy
 msgid ""
 "Mark shell variables as unchangeable.\n"
@@ -4097,7 +4113,7 @@ msgstr ""
 "    無効なオプションが与えられるか、与えられた NAME が無効な場合を除き成功\n"
 "    を返します。"
 
-#: builtins.c:1202
+#: builtins.c:1203
 msgid ""
 "Shift positional parameters.\n"
 "    \n"
@@ -4115,7 +4131,7 @@ msgstr ""
 "    終了ステータス:\n"
 "    Nが負の値または $# より大きい場合を除き成功を返します。"
 
-#: builtins.c:1214 builtins.c:1229
+#: builtins.c:1215 builtins.c:1230
 msgid ""
 "Execute commands from a file in the current shell.\n"
 "    \n"
@@ -4139,7 +4155,8 @@ msgstr ""
 "    FILENAME で最後に実行したコマンドのステータスを返します。FILENAME が\n"
 "    読み込めなかった場合は失敗を返します。"
 
-#: builtins.c:1245
+#: builtins.c:1246
+#, fuzzy
 msgid ""
 "Suspend shell execution.\n"
 "    \n"
@@ -4163,7 +4180,7 @@ msgstr ""
 "    終了ステータス:\n"
 "    ジョブ制御が有効でないかエラーが発生しない限り成功を返します。"
 
-#: builtins.c:1261
+#: builtins.c:1262
 #, fuzzy
 msgid ""
 "Evaluate conditional expression.\n"
@@ -4318,7 +4335,7 @@ msgstr ""
 "    式 EXPR の評価値が真(true)の時に成功を返します。EXPR の評価値が偽(false) または\n"
 "    引数が無効な場合に失敗を返します。"
 
-#: builtins.c:1343
+#: builtins.c:1344
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -4330,7 +4347,7 @@ msgstr ""
 "    これは test 組み込み関数と同義語です。ただし、最後の引数に開始の`['と一致\n"
 "    するように文字`]'を与えなければいけません。"
 
-#: builtins.c:1352
+#: builtins.c:1353
 msgid ""
 "Display process times.\n"
 "    \n"
@@ -4348,7 +4365,7 @@ msgstr ""
 "    終了ステータス:\n"
 "    常に成功を返します。"
 
-#: builtins.c:1364
+#: builtins.c:1365
 msgid ""
 "Trap signals and other events.\n"
 "    \n"
@@ -4414,7 +4431,7 @@ msgstr ""
 "    終了ステータス:\n"
 "    SIGSPEC が無効か、無効なオプションを与えられない限り成功を返します。"
 
-#: builtins.c:1400
+#: builtins.c:1401
 #, fuzzy
 msgid ""
 "Display information about command type.\n"
@@ -4470,7 +4487,7 @@ msgstr ""
 "    全ての NAME が見つかった場合に成功を返します。どれかが見つからなかった場合\n"
 "    は失敗を返します。"
 
-#: builtins.c:1431
+#: builtins.c:1432
 #, fuzzy
 msgid ""
 "Modify shell resource limits.\n"
@@ -4561,7 +4578,7 @@ msgstr ""
 "    終了ステータス:\n"
 "    無効なオプションを与えるか、エラーが発生しない限り、成功を返します。"
 
-#: builtins.c:1482
+#: builtins.c:1483
 msgid ""
 "Display or set file mode mask.\n"
 "    \n"
@@ -4593,7 +4610,7 @@ msgstr ""
 "    終了ステータス:\n"
 "    MODE が無効か、無効なオプションが与えられない限り成功を返します。"
 
-#: builtins.c:1502
+#: builtins.c:1503
 #, fuzzy
 msgid ""
 "Wait for job completion and return exit status.\n"
@@ -4632,7 +4649,7 @@ msgstr ""
 "    最後の ID の終了ステータスを返します。IDが無効であるか、無効なオプ\n"
 "    ションが与えられた場合には失敗を返します。"
 
-#: builtins.c:1533
+#: builtins.c:1534
 msgid ""
 "Wait for process completion and return exit status.\n"
 "    \n"
@@ -4654,7 +4671,7 @@ msgstr ""
 "    最後の PID の終了ステータスを返します。PIDが無効か、無効なオプションが与えられた\n"
 "    場合は失敗します。"
 
-#: builtins.c:1548
+#: builtins.c:1549
 msgid ""
 "Execute commands for each member in a list.\n"
 "    \n"
@@ -4675,7 +4692,7 @@ msgstr ""
 "    終了ステータス:\n"
 "    最後に実行したコマンドのステータスを返します。"
 
-#: builtins.c:1562
+#: builtins.c:1563
 msgid ""
 "Arithmetic for loop.\n"
 "    \n"
@@ -4705,7 +4722,7 @@ msgstr ""
 "    終了ステータス:\n"
 "    最後に実行したコマンドのステータスを返します。"
 
-#: builtins.c:1580
+#: builtins.c:1581
 msgid ""
 "Select words from a list and execute commands.\n"
 "    \n"
@@ -4740,7 +4757,7 @@ msgstr ""
 "    終了ステータス:\n"
 "    最後に実行したコマンドのステータスを返します。"
 
-#: builtins.c:1601
+#: builtins.c:1602
 msgid ""
 "Report time consumed by pipeline's execution.\n"
 "    \n"
@@ -4768,7 +4785,7 @@ msgstr ""
 "    終了ステータス:\n"
 "    PIPELINE の戻り値が終了ステータスとなります。"
 
-#: builtins.c:1618
+#: builtins.c:1619
 msgid ""
 "Execute commands based on pattern matching.\n"
 "    \n"
@@ -4786,7 +4803,7 @@ msgstr ""
 "    終了ステータス:\n"
 "    最後に実行したコマンドのステータスを返します。"
 
-#: builtins.c:1630
+#: builtins.c:1631
 msgid ""
 "Execute commands based on conditional.\n"
 "    \n"
@@ -4813,12 +4830,13 @@ msgstr ""
 "    終了ステータス:\n"
 "    最後に実行したコマンドの終了ステータスを返します。"
 
-#: builtins.c:1647
+#: builtins.c:1648
+#, fuzzy
 msgid ""
 "Execute commands as long as a test succeeds.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `while' COMMANDS has an exit status of zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n"
+"    an exit status of zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
@@ -4831,12 +4849,13 @@ msgstr ""
 "    終了ステータス:\n"
 "    最後に実行したコマンドのステータスを返します。"
 
-#: builtins.c:1659
+#: builtins.c:1660
+#, fuzzy
 msgid ""
 "Execute commands as long as a test does not succeed.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `until' COMMANDS has an exit status which is not zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n"
+"    an exit status which is not zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
@@ -4849,7 +4868,7 @@ msgstr ""
 "    終了ステータス:\n"
 "    最後に実行したコマンドのステータスを返します。"
 
-#: builtins.c:1671
+#: builtins.c:1672
 #, fuzzy
 msgid ""
 "Create a coprocess named NAME.\n"
@@ -4872,7 +4891,7 @@ msgstr ""
 "    終了ステータス:\n"
 "    COMMAND の終了ステータスを返します。"
 
-#: builtins.c:1685
+#: builtins.c:1686
 msgid ""
 "Define shell function.\n"
 "    \n"
@@ -4894,7 +4913,7 @@ msgstr ""
 "    終了ステータス:\n"
 "    NAME が読み取り専用でない限り成功を返します。"
 
-#: builtins.c:1699
+#: builtins.c:1700
 msgid ""
 "Group commands as a unit.\n"
 "    \n"
@@ -4912,7 +4931,7 @@ msgstr ""
 "    終了ステータス:\n"
 "    最後に実行したコマンドのステータスを返します。"
 
-#: builtins.c:1711
+#: builtins.c:1712
 msgid ""
 "Resume job in foreground.\n"
 "    \n"
@@ -4935,7 +4954,7 @@ msgstr ""
 "    終了ステータス:\n"
 "    再開されたジョブの終了ステータスを返します。"
 
-#: builtins.c:1726
+#: builtins.c:1727
 msgid ""
 "Evaluate arithmetic expression.\n"
 "    \n"
@@ -4953,7 +4972,7 @@ msgstr ""
 "    終了ステータス:\n"
 "    EXPRESSION の評価値が 0 の場合は 1、それ以外は 0 を返します。"
 
-#: builtins.c:1738
+#: builtins.c:1739
 msgid ""
 "Execute conditional command.\n"
 "    \n"
@@ -5002,7 +5021,7 @@ msgstr ""
 "    終了ステータス:\n"
 "    EXPRESSION の値に基づいて 0 または 1 を返します。"
 
-#: builtins.c:1764
+#: builtins.c:1765
 msgid ""
 "Common shell variable names and usage.\n"
 "    \n"
@@ -5103,7 +5122,7 @@ msgstr ""
 "    HISTIGNORE\tヒストリ一覧に保存されるコマンドを決める時に使用される\n"
 "    \t\tコロン (:) で区切られたパターンの一覧。\n"
 
-#: builtins.c:1821
+#: builtins.c:1822
 #, fuzzy
 msgid ""
 "Add directories to stack.\n"
@@ -5163,7 +5182,7 @@ msgstr ""
 "    無効な引数が与えられるかディレクトリ変更が失敗しない限り成功を\n"
 "    返します。"
 
-#: builtins.c:1855
+#: builtins.c:1856
 #, fuzzy
 msgid ""
 "Remove directories from stack.\n"
@@ -5214,7 +5233,7 @@ msgstr ""
 "    無効な引数が与えられるかディレクトリ変更が失敗しない限り成功を\n"
 "    返します。"
 
-#: builtins.c:1885
+#: builtins.c:1886
 #, fuzzy
 msgid ""
 "Display directory stack.\n"
@@ -5267,7 +5286,7 @@ msgstr ""
 "    終了ステータス:\n"
 "    無効なオプションが与えられるかエラーが発生しない限り成功を返します。"
 
-#: builtins.c:1916
+#: builtins.c:1917
 #, fuzzy
 msgid ""
 "Set and unset shell options.\n"
@@ -5303,7 +5322,7 @@ msgstr ""
 "    OPTNAME が有効な場合は成功を返します。無効なオプションが与えられた場合\n"
 "    または OPTNAME が無効な場合は失敗を返します。"
 
-#: builtins.c:1937
+#: builtins.c:1938
 #, fuzzy
 msgid ""
 "Formats and prints ARGUMENTS under control of the FORMAT.\n"
@@ -5323,6 +5342,8 @@ msgid ""
 "    \n"
 "      %b\texpand backslash escape sequences in the corresponding argument\n"
 "      %q\tquote the argument in a way that can be reused as shell input\n"
+"      %Q\tlike %q, but apply any precision to the unquoted argument before\n"
+"    \t\tquoting\n"
 "      %(fmt)T\toutput the date-time string resulting from using FMT as a format\n"
 "    \t        string for strftime(3)\n"
 "    \n"
@@ -5357,7 +5378,7 @@ msgstr ""
 "    終了ステータス:\n"
 "    無効な引数が与えられるか、書き込み、代入エラーが発生しない限り成功を返します。"
 
-#: builtins.c:1971
+#: builtins.c:1974
 #, fuzzy
 msgid ""
 "Specify how arguments are to be completed by Readline.\n"
@@ -5405,7 +5426,7 @@ msgstr ""
 "    終了ステータス:\n"
 "    無効なオプションが与えられるかエラーが発生しない限り成功を返します。"
 
-#: builtins.c:2001
+#: builtins.c:2004
 msgid ""
 "Display possible completions depending on the options.\n"
 "    \n"
@@ -5425,7 +5446,7 @@ msgstr ""
 "    終了ステータス:\n"
 "    無効なオプションが与えられるかエラーが発生しない限り成功を返します。"
 
-#: builtins.c:2016
+#: builtins.c:2019
 #, fuzzy
 msgid ""
 "Modify or display completion options.\n"
@@ -5478,7 +5499,7 @@ msgstr ""
 "    無効なオプションが与えられるか、 NAME が補完指定として定義されていない場合\n"
 "    を除き、成功を返します。"
 
-#: builtins.c:2047
+#: builtins.c:2050
 #, fuzzy
 msgid ""
 "Read lines from the standard input into an indexed array variable.\n"
@@ -5541,7 +5562,7 @@ msgstr ""
 "    無効なオプションが与えられる、配列が読み取り専用、またはインデックス型配列で無い\n"
 "    場合を除き成功を返します。"
 
-#: builtins.c:2083
+#: builtins.c:2086
 msgid ""
 "Read lines from a file into an array variable.\n"
 "    \n"
index e8dbf4963447029ab9a8c8dceee7c1ff22964daa..11fe7d2e9858d04c9db976bb385371ebee86eab1 100644 (file)
Binary files a/po/ko.gmo and b/po/ko.gmo differ
index 0131769131c7fce0746e3dd10ee0555407e74149..4b3fbc621f8fd05f0f8d5ebc0db7ee66db954f57 100644 (file)
--- a/po/ko.po
+++ b/po/ko.po
@@ -2,14 +2,15 @@
 # Copyright (C) 2019 Free Software Foundation, Inc.
 # This file is distributed under the same license as the bash package.
 # SooHyun Kim <soohyunkim@kw.ac.kr>, 2019.
+# Seong-ho Cho <darkcircle.0426@gmail.com>, 2022.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: bash-5.0\n"
+"Project-Id-Version: bash-5.2-rc1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-11-28 12:51-0500\n"
-"PO-Revision-Date: 2019-11-23 16:28+0900\n"
-"Last-Translator: SooHyun Kim <soohyunkim@kw.ac.kr>\n"
+"POT-Creation-Date: 2022-01-11 14:50-0500\n"
+"PO-Revision-Date: 2022-06-25 01:50+0900\n"
+"Last-Translator: Seong-ho Cho <darkcircle.0426@gmail.com>\n"
 "Language-Team: Korean <translation-team-ko@googlegroups.com>\n"
 "Language: ko\n"
 "MIME-Version: 1.0\n"
@@ -17,99 +18,95 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Poedit 2.3.1\n"
 
 #: arrayfunc.c:66
 msgid "bad array subscript"
 msgstr "잘못된 배열 첨자"
 
-#: arrayfunc.c:421 builtins/declare.def:638 variables.c:2274 variables.c:2300
-#: variables.c:3133
+#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268
+#: variables.c:3101
 #, c-format
 msgid "%s: removing nameref attribute"
 msgstr "%s: 이름 참조 속성을 지우는 중"
 
-#: arrayfunc.c:446 builtins/declare.def:851
+#: arrayfunc.c:496 builtins/declare.def:868
 #, c-format
 msgid "%s: cannot convert indexed to associative array"
-msgstr "%s: ì\9d¸ë\8d±ì\8a¤ 배열을 연관 배열로 변환할 수 없음"
+msgstr "%s: ì\83\89ì\9d¸ 배열을 연관 배열로 변환할 수 없음"
 
-#: arrayfunc.c:700
-#, c-format
-msgid "%s: invalid associative array key"
-msgstr "%s: 유효하지 않은 연관 배열 키"
-
-#: arrayfunc.c:702
+#: arrayfunc.c:777
 #, c-format
 msgid "%s: cannot assign to non-numeric index"
 msgstr "%s: 숫자가 아닌 인덱스에 할당할 수 없음"
 
-#: arrayfunc.c:747
+#: arrayfunc.c:822
 #, c-format
 msgid "%s: %s: must use subscript when assigning associative array"
-msgstr "%s: %s: 연관 배열을 할당하기 위해서 반드시 첨자를 사용해야 함"
+msgstr "%s: %s: 연관 배열을 할당하려면 반드시 첨자를 사용해야 함"
 
-#: bashhist.c:452
+#: bashhist.c:455
 #, c-format
 msgid "%s: cannot create: %s"
 msgstr "%s: 생성할 수 없음: %s"
 
-#: bashline.c:4310
+#: bashline.c:4479
 msgid "bash_execute_unix_command: cannot find keymap for command"
-msgstr "bash_execute_unix_command: ëª\85ë ¹ì\96´ë¥¼ ì\9c\84í\95\9c keymap을 찾을 수 없음"
+msgstr "bash_execute_unix_command: ëª\85ë ¹ì\9d\98 keymap을 찾을 수 없음"
 
-#: bashline.c:4459
+#: bashline.c:4637
 #, c-format
 msgid "%s: first non-whitespace character is not `\"'"
-msgstr "%s: 공백이 아닌 첫 문자가 '\"' 가 아님"
+msgstr "%s: 공백이 아닌 첫 문자가 `\"'가 아님"
 
-#: bashline.c:4488
+#: bashline.c:4666
 #, c-format
 msgid "no closing `%c' in %s"
-msgstr "%2$s에 닫는 '%1$c' 없음"
+msgstr "%2$s에 닫는 `%1$c' 없음"
 
-#: bashline.c:4519
+#: bashline.c:4697
 #, c-format
 msgid "%s: missing colon separator"
-msgstr "%s: 콜론(:) 구분자 없음"
+msgstr "%s: 콜론 구분자 없음"
 
-#: bashline.c:4555
-#, fuzzy, c-format
+#: bashline.c:4733
+#, c-format
 msgid "`%s': cannot unbind in command keymap"
-msgstr "'%s': unbind 할 수 없음"
+msgstr "`%s': 명령 keymap의 바인딩을 해제할 수 없음"
 
 #: braces.c:327
 #, c-format
 msgid "brace expansion: cannot allocate memory for %s"
-msgstr "괄호 확장: '%s'를 위해 메모리를 할당할 수 없음"
+msgstr "괄호 확장: %s의 메모리를 할당할 수 없음"
 
 #: braces.c:406
 #, c-format
 msgid "brace expansion: failed to allocate memory for %u elements"
-msgstr "괄호 확장: %uê°\9c ì\9a\94ì\86\8c를 ì\9c\84í\95\9c ë©\94모리 í\95 ë\8b¹ ì\8b¤í\8c¨"
+msgstr "괄호 확장: ì\9a\94ì\86\8c %uê°\9cì\97\90ì\84\9c ë©\94모리 í\95 ë\8b¹ ì\8b¤í\8c¨"
 
 #: braces.c:451
 #, c-format
 msgid "brace expansion: failed to allocate memory for `%s'"
-msgstr "괄호 확장: '%s'를 위한 메모리 할당 실패"
+msgstr "괄호 확장: `%s'의 메모리 할당 실패"
 
-#: builtins/alias.def:131 variables.c:1844
+#: builtins/alias.def:131 variables.c:1817
 #, c-format
 msgid "`%s': invalid alias name"
-msgstr "'%s': 유효하지 않은 별명"
+msgstr "`%s': 부적절한 별명"
 
 #: builtins/bind.def:122 builtins/bind.def:125
 msgid "line editing not enabled"
-msgstr "줄 편집 활성화되어있지 않음"
+msgstr "줄 편집 기능 꺼짐"
 
 #: builtins/bind.def:212
 #, c-format
 msgid "`%s': invalid keymap name"
-msgstr "'%s': 유효하지 않은 keymap 이름"
+msgstr "`%s': 부적절한 keymap 이름"
 
 #: builtins/bind.def:252
 #, c-format
 msgid "%s: cannot read: %s"
-msgstr "%s: %s 읽을 수 없음"
+msgstr "%s: %s을(를) 읽을 수 없음"
 
 #: builtins/bind.def:328 builtins/bind.def:358
 #, c-format
@@ -119,17 +116,17 @@ msgstr "`%s': 알 수 없는 함수 이름"
 #: builtins/bind.def:336
 #, c-format
 msgid "%s is not bound to any keys.\n"
-msgstr "%s 는 어느 키에도 bind 되어있지 않음.\n"
+msgstr "%s은(는) 어떤 키에도 바인딩하지 않음.\n"
 
 #: builtins/bind.def:340
 #, c-format
 msgid "%s can be invoked via "
-msgstr "%s 는 다음을 통해 호출될 수 있음 "
+msgstr "%s은(는) 다음을 통해 호출될 수 있음 "
 
 #: builtins/bind.def:378 builtins/bind.def:395
 #, c-format
 msgid "`%s': cannot unbind"
-msgstr "'%s': unbind 할 수 없음"
+msgstr "`%s': 바인딩 해제 불가"
 
 #: builtins/break.def:77 builtins/break.def:119
 msgid "loop count"
@@ -137,7 +134,7 @@ msgstr "반복 횟수"
 
 #: builtins/break.def:139
 msgid "only meaningful in a `for', `while', or `until' loop"
-msgstr "'for', 'while' 또는 'until' 반복문에서만 의미가 있음"
+msgstr "'for', 'while', 'until' 반복문에서만 의미 있음"
 
 #: builtins/caller.def:136
 msgid ""
@@ -150,27 +147,35 @@ msgid ""
 "    The value of EXPR indicates how many call frames to go back before the\n"
 "    current one; the top frame is frame 0."
 msgstr ""
+"현재 하위루틴 호출의 컨텍스트를 반환합니다.\n"
+"    \n"
+"    <표현식>을 지정하지 않으면 \"$line $filename\"을 반환합니다.\n"
+"    <표현식>을 지정하면 \"$line $subroutine $filename\"을 반환합니다.\n"
+"    추가 정보는 스택 추적을 제공할 때 활용할 수 있습니다.\n"
+"    \n"
+"    <표현식>의 값은 현재 호출 프레임에서 얼마나 뒤로 돌아가야 하는지를\n"
+"    나타냅니다. 최상단 호출 프레임은 프레임 0번입니다."
 
 #: builtins/cd.def:327
 msgid "HOME not set"
-msgstr "HOME 설정ë\90\98ì§\80 ì\95\8aì\9d\8c"
+msgstr "HOME 설정í\95\98ì§\80 ì\95\8aì\9d\8c"
 
-#: builtins/cd.def:335 builtins/common.c:161 test.c:901
+#: builtins/cd.def:335 builtins/common.c:161 test.c:916
 msgid "too many arguments"
 msgstr "인자가 너무 많음"
 
 #: builtins/cd.def:342
 msgid "null directory"
-msgstr "null 디렉토리"
+msgstr "디렉터리 값이 비어있음"
 
 #: builtins/cd.def:353
 msgid "OLDPWD not set"
-msgstr "OLDPWD 설정ë\90\98ì§\80 ì\95\8aì\9d\8c"
+msgstr "OLDPWD 설정í\95\98ì§\80 ì\95\8aì\9d\8c"
 
 #: builtins/common.c:96
 #, c-format
 msgid "line %d: "
-msgstr "%d 줄: "
+msgstr "행 %d번: "
 
 #: builtins/common.c:134 error.c:264
 #, c-format
@@ -182,7 +187,7 @@ msgstr "경고: "
 msgid "%s: usage: "
 msgstr "%s: 사용법: "
 
-#: builtins/common.c:193 shell.c:516 shell.c:844
+#: builtins/common.c:193 shell.c:524 shell.c:866
 #, c-format
 msgid "%s: option requires an argument"
 msgstr "%s: 옵션에 인자가 필요함"
@@ -190,243 +195,248 @@ msgstr "%s: 옵션에 인자가 필요함"
 #: builtins/common.c:200
 #, c-format
 msgid "%s: numeric argument required"
-msgstr "%s: 숫자로 된 인자가 필요함"
+msgstr "%s: 숫자 인자가 필요함"
 
 #: builtins/common.c:207
 #, c-format
 msgid "%s: not found"
 msgstr "%s: 찾을 수 없음"
 
-#: builtins/common.c:216 shell.c:857
+#: builtins/common.c:216 shell.c:879
 #, c-format
 msgid "%s: invalid option"
-msgstr "%s: 유효하지 않은 옵션"
+msgstr "%s: 부적절한 옵션"
 
 #: builtins/common.c:223
 #, c-format
 msgid "%s: invalid option name"
-msgstr "%s: 유효하지 않은 옵션 이름"
+msgstr "%s: 부적절한 옵션 이름"
 
-#: builtins/common.c:230 execute_cmd.c:2373 general.c:368 general.c:373
+#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373
 #, c-format
 msgid "`%s': not a valid identifier"
-msgstr "`%s': ì\9c í\9a¨í\95\9c ì\8b\9dë³\84ì\9e\90ê°\80 아님"
+msgstr "`%s': ì \81ì \88í\95\9c ì\8b\9dë³\84ì\9e\90 아님"
 
 #: builtins/common.c:240
 msgid "invalid octal number"
-msgstr "유효하지 않은 8진수"
+msgstr "부적절한 8진수"
 
 #: builtins/common.c:242
 msgid "invalid hex number"
-msgstr "유효하지 않은 16진수"
+msgstr "부적절한 16진수"
 
-#: builtins/common.c:244 expr.c:1569
+#: builtins/common.c:244 expr.c:1574
 msgid "invalid number"
-msgstr "유효하지 않은 수"
+msgstr "부적절한 숫자"
 
 #: builtins/common.c:252
 #, c-format
 msgid "%s: invalid signal specification"
-msgstr "%s: 유효하지 않은 신호 정의"
+msgstr "%s: 부적절한 시그널 정의"
 
 #: builtins/common.c:259
 #, c-format
 msgid "`%s': not a pid or valid job spec"
-msgstr "'%s': pid가 아니거나 유효한 job spec이 아님"
+msgstr "`%s': PID가 아니거나 적절한 작업 명세 없음"
 
-#: builtins/common.c:266 error.c:510
+#: builtins/common.c:266 error.c:536
 #, c-format
 msgid "%s: readonly variable"
 msgstr "%s: 읽기 전용 변수임"
 
-#: builtins/common.c:274
+#: builtins/common.c:273
+#, c-format
+msgid "%s: cannot assign"
+msgstr "%s: 할당할 수 없음"
+
+#: builtins/common.c:281
 #, c-format
 msgid "%s: %s out of range"
-msgstr "%s: %s 범위를 벗어남"
+msgstr "%s: %s이(가) 범위를 벗어남"
 
-#: builtins/common.c:274 builtins/common.c:276
+#: builtins/common.c:281 builtins/common.c:283
 msgid "argument"
 msgstr "인자"
 
-#: builtins/common.c:276
+#: builtins/common.c:283
 #, c-format
 msgid "%s out of range"
-msgstr "%s 범위를 벗어남"
+msgstr "%s이(가) 범위를 벗어남"
 
-#: builtins/common.c:284
+#: builtins/common.c:291
 #, c-format
 msgid "%s: no such job"
-msgstr "%s: ê·¸ë\9f¬í\95\9c job이 없음"
+msgstr "%s: ê·¸ë\9f° ì\9e\91ì\97\85이 없음"
 
-#: builtins/common.c:292
+#: builtins/common.c:299
 #, c-format
 msgid "%s: no job control"
-msgstr "%s: job control이 없음"
+msgstr "%s: 작업 컨트롤 없음"
 
-#: builtins/common.c:294
+#: builtins/common.c:301
 msgid "no job control"
-msgstr "job control이 없음"
+msgstr "작업 컨트롤 없음"
 
-#: builtins/common.c:304
+#: builtins/common.c:311
 #, c-format
 msgid "%s: restricted"
 msgstr "%s: 제한됨"
 
-#: builtins/common.c:306
+#: builtins/common.c:313
 msgid "restricted"
 msgstr "제한됨"
 
-#: builtins/common.c:314
+#: builtins/common.c:321
 #, c-format
 msgid "%s: not a shell builtin"
-msgstr "%s: ì\89\98 ë\82´ì\9e¥이 아님"
+msgstr "%s: ì\85¸ ë\82´ì\9e¥ ëª\85ë ¹이 아님"
 
-#: builtins/common.c:323
+#: builtins/common.c:330
 #, c-format
 msgid "write error: %s"
 msgstr "쓰기 오류: %s"
 
-#: builtins/common.c:331
+#: builtins/common.c:338
 #, c-format
 msgid "error setting terminal attributes: %s"
 msgstr "터미널 속성 설정 오류: %s"
 
-#: builtins/common.c:333
+#: builtins/common.c:340
 #, c-format
 msgid "error getting terminal attributes: %s"
 msgstr "터미널 속성 읽기 오류: %s"
 
-#: builtins/common.c:635
+#: builtins/common.c:642
 #, c-format
 msgid "%s: error retrieving current directory: %s: %s\n"
-msgstr "%s: í\98\84ì\9e¬ ë\94\94ë \89í\86 ë¦¬ë¥¼ ë°\9bì\95\84ì\98¤ë\8a\94 ë\8d° 오류 발생: %s: %s\n"
+msgstr "%s: í\98\84ì\9e¬ ë\94\94ë \89í\84°ë¦¬ ê°\80ì ¸ì\98¤ë\8a\94 ì¤\91 오류 발생: %s: %s\n"
 
-#: builtins/common.c:701 builtins/common.c:703
+#: builtins/common.c:708 builtins/common.c:710
 #, c-format
 msgid "%s: ambiguous job spec"
-msgstr "%s: 모호한 job spec"
+msgstr "%s: 모호한 작업 명세"
 
-#: builtins/common.c:964
+#: builtins/common.c:971
 msgid "help not available in this version"
-msgstr "ì\9d´ ë²\84ì \84ì\97\90ë\8a\94 ë\8f\84ì\9b\80ë§\90ì\9d´ ì\97\86ì\9d\8c"
+msgstr "ì\9d´ ë²\84ì \84ì\97\90ë\8a\94 ë\8f\84ì\9b\80ë§\90ì\9d´ ì\97\86ì\8aµë\8b\88ë\8b¤"
 
-#: builtins/common.c:1008 builtins/set.def:953 variables.c:3839
+#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825
 #, c-format
 msgid "%s: cannot unset: readonly %s"
-msgstr "%s: unset할 수 없음: %s가 읽기 전용임"
+msgstr "%s: 설정 해제할 수 없음: %s이(가) 읽기 전용임"
 
-#: builtins/common.c:1013 builtins/set.def:932 variables.c:3844
+#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830
 #, c-format
 msgid "%s: cannot unset"
-msgstr "%s: unset할 수 없음"
+msgstr "%s: 설정 해제할 수 없음"
 
 #: builtins/complete.def:287
 #, c-format
 msgid "%s: invalid action name"
-msgstr "%s: 유효하지 않은 액션 이름"
+msgstr "%s: 부적절한 액션 이름"
 
-#: builtins/complete.def:486 builtins/complete.def:634
-#: builtins/complete.def:865
+#: builtins/complete.def:486 builtins/complete.def:642
+#: builtins/complete.def:873
 #, c-format
 msgid "%s: no completion specification"
-msgstr "%s: 완료 사양 없음"
+msgstr "%s: 완성 명세 없음"
 
-#: builtins/complete.def:688
+#: builtins/complete.def:696
 msgid "warning: -F option may not work as you expect"
 msgstr "경고: -F 옵션이 예상대로 작동하지 않을 수 있음"
 
-#: builtins/complete.def:690
+#: builtins/complete.def:698
 msgid "warning: -C option may not work as you expect"
 msgstr "경고: -C 옵션이 예상대로 작동하지 않을 수 있음"
 
-#: builtins/complete.def:838
+#: builtins/complete.def:846
 msgid "not currently executing completion function"
-msgstr "현재 완료 함수가 실행중이 아님"
+msgstr "완성 함수를 현재 실행하고 있지 않음"
 
-#: builtins/declare.def:134
+#: builtins/declare.def:137
 msgid "can only be used in a function"
-msgstr "함수에서만 사용ë\90  ì\88\98 ì\9e\88ì\9d\8c"
+msgstr "함수에서만 사용í\95  ì\88\98 ì\9e\88ì\9d\8c"
 
-#: builtins/declare.def:363 builtins/declare.def:756
+#: builtins/declare.def:437
+msgid "cannot use `-f' to make functions"
+msgstr "함수 구성에 `-f' 옵션을 사용할 수 없음"
+
+#: builtins/declare.def:464 execute_cmd.c:6132
+#, c-format
+msgid "%s: readonly function"
+msgstr "%s: 읽기 전용 함수"
+
+#: builtins/declare.def:521 builtins/declare.def:804
 #, c-format
 msgid "%s: reference variable cannot be an array"
 msgstr "%s: 참조 변수로 배열이 올 수 없음"
 
-#: builtins/declare.def:374 variables.c:3385
+#: builtins/declare.def:532 variables.c:3359
 #, c-format
 msgid "%s: nameref variable self references not allowed"
-msgstr "%s: ì\9d´ë¦\84 ì°¸ì¡° ë³\80ì\88\98ì\9d\98 ì\9e\90ê°\80 ì°¸ì¡°ë\8a\94 í\97\88ì\9a©ë\90\98ì§\80 ì\95\8aì\9d\8c"
+msgstr "%s: ì\9d´ë¦\84 ì°¸ì¡° ë³\80ì\88\98ì\9d\98 ì\9e\90ê°\80 ì°¸ì¡°ë¥¼ í\97\88ì\9a©í\95\98ì§\80 ì\95\8aì\9d\8c"
 
-#: builtins/declare.def:379 variables.c:2104 variables.c:3304 variables.c:3312
-#: variables.c:3382
+#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286
+#: variables.c:3356
 #, c-format
 msgid "%s: circular name reference"
 msgstr "%s: 순환 이름 참조"
 
-#: builtins/declare.def:384 builtins/declare.def:762 builtins/declare.def:773
+#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820
 #, c-format
 msgid "`%s': invalid variable name for name reference"
-msgstr "'%s': 유효하지 않은 이름 참조 변수 이름"
-
-#: builtins/declare.def:514
-msgid "cannot use `-f' to make functions"
-msgstr "함수를 만들기 위해 '-f'를 사용할 수 없음"
+msgstr "`%s': 이름 참조의 부적절한 변수 이름"
 
-#: builtins/declare.def:526 execute_cmd.c:5986
-#, c-format
-msgid "%s: readonly function"
-msgstr "%s: 읽기 전용 함수임"
-
-#: builtins/declare.def:824
-#, c-format
-msgid "%s: quoted compound array assignment deprecated"
-msgstr "%s: 따옴표를 이용한 복합 배열 할당은 향후 제거될 예정임"
-
-#: builtins/declare.def:838
+#: builtins/declare.def:856
 #, c-format
 msgid "%s: cannot destroy array variables in this way"
-msgstr "%s: ì\9d´ ë°©ë²\95ì\9c¼ë¡\9c ë°°ì\97´ ë³\80ì\88\98를 í\8c\8cê´´í\95  ì\88\98 ì\97\86ì\9d\8c"
+msgstr "%s: ì\9d´ ë°©ë²\95ì\9c¼ë¡\9c ë°°ì\97´ ë³\80ì\88\98를 í\95´ì²´í\95  ì\88\98 ì\97\86ì\9d\8c"
 
-#: builtins/declare.def:845 builtins/read.def:815
+#: builtins/declare.def:862 builtins/read.def:887
 #, c-format
 msgid "%s: cannot convert associative to indexed array"
-msgstr "%s: ì°¸ì¡° ë°°ì\97´ì\9d\84 ì\9d¸ë\8d±ì\8a¤ 배열로 변환할 수 없음"
+msgstr "%s: ì°¸ì¡° ë°°ì\97´ì\9d\84 ì\83\89ì\9d¸ 배열로 변환할 수 없음"
 
-#: builtins/enable.def:143 builtins/enable.def:151
+#: builtins/declare.def:891
+#, c-format
+msgid "%s: quoted compound array assignment deprecated"
+msgstr "%s: 따옴표를 이용한 복합 배열 할당은 향후 제거 예정"
+
+#: builtins/enable.def:145 builtins/enable.def:153
 msgid "dynamic loading not available"
-msgstr "ë\8f\99ì \81 ë¡\9cë\94©ì\9d\84 ì\9d´ì\9a©í\95  ì\88\98 ì\97\86ì\9d\8c"
+msgstr "ë\8f\99ì \81 ë\88ë\9f¬ì\98¤ê¸° ë¶\88ê°\80"
 
-#: builtins/enable.def:343
+#: builtins/enable.def:376
 #, c-format
 msgid "cannot open shared object %s: %s"
-msgstr "공유 오브젝트 %s를 열 수 없음: %s"
+msgstr "%s 공유 객체를 열 수 없음: %s"
 
-#: builtins/enable.def:371
+#: builtins/enable.def:405
 #, c-format
 msgid "cannot find %s in shared object %s: %s"
-msgstr "공유 오브젝트 %2$s에서 %1$s를 찾을 수 없음: %3$s"
+msgstr "%2$s 공유 객체에서 %1$s을(를) 찾을 수 없음: %3$s"
 
-#: builtins/enable.def:388
-#, fuzzy, c-format
+#: builtins/enable.def:422
+#, c-format
 msgid "%s: dynamic builtin already loaded"
-msgstr "%s: 동적으로 로드되지 않음"
+msgstr "%s: 동적 내장 명령을 이미 불러왔습니다"
 
-#: builtins/enable.def:392
+#: builtins/enable.def:426
 #, c-format
 msgid "load function for %s returns failure (%d): not loaded"
-msgstr "%sì\97\90 ë\8c\80í\95\9c í\95¨ì\88\98 ë¡\9cë\93\9cê°\80 ì\8b¤í\8c¨ ë°\98í\99\98 (%d): ë¡\9cë\93\9cë\90\98지 않음"
+msgstr "%sì\97\90 ë\8c\80í\95\9c í\95¨ì\88\98 ë\88ë\9f¬ì\98¤ê¸° ì¤\91 ì\8b¤í\8c¨ ë°\98í\99\98 (%d): ë¶\88ë\9f¬ì\98¤지 않음"
 
-#: builtins/enable.def:517
+#: builtins/enable.def:551
 #, c-format
 msgid "%s: not dynamically loaded"
-msgstr "%s: ë\8f\99ì \81ì\9c¼ë¡\9c ë¡\9cë\93\9cë\90\98지 않음"
+msgstr "%s: ë\8f\99ì \81ì\9c¼ë¡\9c ë\88ë\9f¬ì\98¤지 않음"
 
-#: builtins/enable.def:543
+#: builtins/enable.def:577
 #, c-format
 msgid "%s: cannot delete: %s"
 msgstr "%s: 삭제할 수 없음: %s"
 
-#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5818
+#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959
 #, c-format
 msgid "%s: is a directory"
 msgstr "%s: 디렉터리임"
@@ -434,17 +444,17 @@ msgstr "%s: 디렉터리임"
 #: builtins/evalfile.c:144
 #, c-format
 msgid "%s: not a regular file"
-msgstr "%s: 일반적인 파일이 아님"
+msgstr "%s: 일반 파일이 아님"
 
 #: builtins/evalfile.c:153
 #, c-format
 msgid "%s: file is too large"
 msgstr "%s: 파일이 너무 큼"
 
-#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1647
+#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673
 #, c-format
 msgid "%s: cannot execute binary file"
-msgstr "%s: 바이너리 파일을 실행할 수 없음"
+msgstr "%s: 이진 파일을 실행할 수 없음"
 
 #: builtins/exec.def:158 builtins/exec.def:160 builtins/exec.def:246
 #, c-format
@@ -458,26 +468,26 @@ msgstr "로그아웃\n"
 
 #: builtins/exit.def:89
 msgid "not login shell: use `exit'"
-msgstr "ë¡\9cê·¸ì\9d¸ ì\89\98ì\9d´ ì\95\84ë\8b\98: 'exit'를 ì\82¬ì\9a©í\95\98ì\84¸ì\9a\94"
+msgstr "ë¡\9cê·¸ì\9d¸ ì\85¸ì\9d´ ì\95\84ë\8b\98: `exit'를 ì\82¬ì\9a©í\95\98ì\8b­ì\8b\9cì\98¤"
 
 #: builtins/exit.def:121
 #, c-format
 msgid "There are stopped jobs.\n"
-msgstr "정지된 job이 있습니다.\n"
+msgstr "멈춘 작업이 있습니다.\n"
 
 #: builtins/exit.def:123
 #, c-format
 msgid "There are running jobs.\n"
-msgstr "실행중인 job이 있습니다.\n"
+msgstr "실행 중인 작업이 있습니다.\n"
 
 #: builtins/fc.def:275 builtins/fc.def:373 builtins/fc.def:417
 msgid "no command found"
-msgstr "ëª\85ë ¹ì\96´ë¥¼ 찾을 수 없음"
+msgstr "ëª\85ë ¹ì\9d\84 찾을 수 없음"
 
 #: builtins/fc.def:363 builtins/fc.def:368 builtins/fc.def:407
 #: builtins/fc.def:412
 msgid "history specification"
-msgstr "히스토리 사양"
+msgstr "기록 명세"
 
 #: builtins/fc.def:444
 #, c-format
@@ -491,7 +501,7 @@ msgstr "현재"
 #: builtins/fg_bg.def:161
 #, c-format
 msgid "job %d started without job control"
-msgstr "job %d가 job control 없이 시작함"
+msgstr "작업 %d번이 작업 컨트롤 없이 시작했습니다"
 
 #: builtins/getopt.c:110
 #, c-format
@@ -501,7 +511,7 @@ msgstr "%s: 잘못된 옵션 -- %c\n"
 #: builtins/getopt.c:111
 #, c-format
 msgid "%s: option requires an argument -- %c\n"
-msgstr "%s: ì\98µì\85\98ì\9d´ ì\9d¸ì\9e\90를 í\95\84ì\9a\94ë¡\9c 함 -- %c\n"
+msgstr "%s: ì\98µì\85\98ì\97\90 ì\9d¸ì\9e\90ê°\80 í\95\84ì\9a\94함 -- %c\n"
 
 #: builtins/hash.def:91
 msgid "hashing disabled"
@@ -520,28 +530,27 @@ msgstr "hits\tcommand\n"
 #: builtins/help.def:133
 msgid "Shell commands matching keyword `"
 msgid_plural "Shell commands matching keywords `"
-msgstr[0] "ë\8b¤ì\9d\8c í\82¤ì\9b\8cë\93\9cì\97\90 ì\9d¼ì¹\98í\95\98ë\8a\94 ì\89\98 명령어 '"
+msgstr[0] "ë\8b¤ì\9d\8c í\82¤ì\9b\8cë\93\9cì\97\90 ì\9d¼ì¹\98í\95\98ë\8a\94 ì\85¸ 명령어 '"
 
 #: builtins/help.def:135
 msgid ""
 "'\n"
 "\n"
 msgstr ""
+"'\n"
+"\n"
 
 #: builtins/help.def:185
 #, c-format
-msgid ""
-"no help topics match `%s'.  Try `help help' or `man -k %s' or `info %s'."
-msgstr ""
-"'%s'에 해당하는 도움말 주제가 없습니다. 'man -k %s' 또는 'info %s'를 사용해 "
-"보세요."
+msgid "no help topics match `%s'.  Try `help help' or `man -k %s' or `info %s'."
+msgstr "`%s'에 해당하는 도움말 주제가 없습니다. `man -k %s' 또는 `info %s' 명령을 입력하십시오."
 
-#: builtins/help.def:224
+#: builtins/help.def:223
 #, c-format
 msgid "%s: cannot open: %s"
 msgstr "%s: 열 수 없음: %s"
 
-#: builtins/help.def:524
+#: builtins/help.def:523
 #, c-format
 msgid ""
 "These shell commands are defined internally.  Type `help' to see this list.\n"
@@ -552,34 +561,32 @@ msgid ""
 "A star (*) next to a name means that the command is disabled.\n"
 "\n"
 msgstr ""
-"이 쉘 명령어들은 내부적으로 정의되어 있습니다.  목록을 보려면 `help' 를 입력"
-"하세요.\n"
-"`help name' 을 입력하면 함수 `name' 에 대한 정보를 더 확인할 수 있습니다.\n"
-"쉘에 대한 일반적인 정보를 더 확인하려면 `info bash' 를 사용하세요.\n"
-"이 목록에 없는 명령어에 대해 더 알아보려면 `man -k' 또는 `info' 를 사용하세"
-"요.\n"
+"이 셸 명령어는 내부에 지정했습니다.  목록을 보려면 `help'를 입력하십시오.\n"
+"`help name'을 입력하면 함수 `name'의 정보를 더 확인할 수 있습니다.\n"
+"셸에 대한 일반적인 정보를 더 확인하려면 `info bash'를 사용하십시오.\n"
+"이 목록에 없는 명령어에 대해 더 알아보려면 `man -k' 또는 `info'를 사용하십시오.\n"
 "\n"
-"명령어 이름 다음의 별 (*) 은 해당 명령어가 비활성화 되었음을 의미합니다.\n"
+"명령어 이름 다음의 별(*) 표시는 해당 명령어의 비활성 상태을 의미합니다.\n"
 "\n"
 
-#: builtins/history.def:155
+#: builtins/history.def:159
 msgid "cannot use more than one of -anrw"
 msgstr "-anrw를 한 개 이상 사용할 수 없음"
 
-#: builtins/history.def:188 builtins/history.def:198 builtins/history.def:213
-#: builtins/history.def:230 builtins/history.def:242 builtins/history.def:249
+#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215
+#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247
 msgid "history position"
-msgstr "히스토리 위치"
+msgstr "기록 위치"
 
-#: builtins/history.def:340
+#: builtins/history.def:338
 #, c-format
 msgid "%s: invalid timestamp"
-msgstr "%s: 유효하지 않은 타임스탬프"
+msgstr "%s: 부적절한 타임스탬프"
 
-#: builtins/history.def:451
+#: builtins/history.def:449
 #, c-format
 msgid "%s: history expansion failed"
-msgstr "%s: 히스토리 확장 실패"
+msgstr "%s: 기록 확장 실패"
 
 #: builtins/inlib.def:71
 #, c-format
@@ -588,113 +595,113 @@ msgstr "%s: inlib 실패"
 
 #: builtins/jobs.def:109
 msgid "no other options allowed with `-x'"
-msgstr "'-x'와 다른 옵션들은 같이 사용할 수 없음"
+msgstr "`-x'와 다른 옵션을 같이 사용할 수 없음"
 
 #: builtins/kill.def:211
 #, c-format
 msgid "%s: arguments must be process or job IDs"
-msgstr "%s: 인자는 반드시 프로세스 또는 job ID이어야 함"
+msgstr "%s: 인자는 반드시 프로세스 또는 작업 ID이어야 함"
 
 #: builtins/kill.def:274
 msgid "Unknown error"
 msgstr "알 수 없는 오류"
 
-#: builtins/let.def:97 builtins/let.def:122 expr.c:639 expr.c:657
+#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658
 msgid "expression expected"
-msgstr "í\91\9cí\98\84ì\8b\9dì\9d\84 ì\98\88ì\83\81í\95¨"
+msgstr "í\91\9cí\98\84ì\8b\9dì\9d´ í\95\84ì\9a\94í\95©ë\8b\88ë\8b¤"
 
-#: builtins/mapfile.def:178
+#: builtins/mapfile.def:180
 #, c-format
 msgid "%s: not an indexed array"
-msgstr "%s: ì\9d¸ë\8d±ì\8a¤ 배열이 아님"
+msgstr "%s: ì\83\89ì\9d¸ 배열이 아님"
 
-#: builtins/mapfile.def:271 builtins/read.def:308
+#: builtins/mapfile.def:276 builtins/read.def:336
 #, c-format
 msgid "%s: invalid file descriptor specification"
-msgstr "%s: 유효하지 않은 파일 디스크립터 명세"
+msgstr "%s: 부적절한 파일 서술자 명세"
 
-#: builtins/mapfile.def:279 builtins/read.def:315
+#: builtins/mapfile.def:284 builtins/read.def:343
 #, c-format
 msgid "%d: invalid file descriptor: %s"
-msgstr "%d: 유효하지 않은 파일 디스크립터: %s"
+msgstr "%d: 부적절한 파일 서술자: %s"
 
-#: builtins/mapfile.def:288 builtins/mapfile.def:326
+#: builtins/mapfile.def:293 builtins/mapfile.def:331
 #, c-format
 msgid "%s: invalid line count"
-msgstr "%s: 유효하지 않은 줄 수"
+msgstr "%s: 부적절한 줄 수"
 
-#: builtins/mapfile.def:299
+#: builtins/mapfile.def:304
 #, c-format
 msgid "%s: invalid array origin"
-msgstr "%s: 유효하지 않은 배열의 시작"
+msgstr "%s: 부적절한 배열의 시작"
 
-#: builtins/mapfile.def:316
+#: builtins/mapfile.def:321
 #, c-format
 msgid "%s: invalid callback quantum"
-msgstr "%s: 유효하지 않은 콜백 양자"
+msgstr "%s: 부적절한 콜백 양자"
 
-#: builtins/mapfile.def:349
+#: builtins/mapfile.def:354
 msgid "empty array variable name"
 msgstr "빈 배열 변수 이름"
 
-#: builtins/mapfile.def:370
+#: builtins/mapfile.def:375
 msgid "array variable support required"
 msgstr "배열 변수 지원이 필요함"
 
-#: builtins/printf.def:419
+#: builtins/printf.def:430
 #, c-format
 msgid "`%s': missing format character"
-msgstr "'%s': 서식 문자 없음"
+msgstr "`%s': 서식 문자 없음"
 
-#: builtins/printf.def:474
+#: builtins/printf.def:485
 #, c-format
 msgid "`%c': invalid time format specification"
-msgstr "'%c': 유효하지 않은 시간 포맷 사양"
+msgstr "`%c': 부적절한 시간 포맷 사양"
 
-#: builtins/printf.def:676
+#: builtins/printf.def:708
 #, c-format
 msgid "`%c': invalid format character"
-msgstr "'%c': 유효하지 않은 서식 문자"
+msgstr "`%c': 부적절한 서식 문자"
 
-#: builtins/printf.def:702
+#: builtins/printf.def:734
 #, c-format
 msgid "warning: %s: %s"
 msgstr "경고: %s: %s"
 
-#: builtins/printf.def:788
+#: builtins/printf.def:822
 #, c-format
 msgid "format parsing problem: %s"
-msgstr "í\98\95ì\8b\9d í\8c\8cì\8b± 문제: %s"
+msgstr "í\98\95ì\8b\9d í\95´ì\84\9d 문제: %s"
 
-#: builtins/printf.def:885
+#: builtins/printf.def:919
 msgid "missing hex digit for \\x"
 msgstr "\\x에 16진수 숫자 없음"
 
-#: builtins/printf.def:900
+#: builtins/printf.def:934
 #, c-format
 msgid "missing unicode digit for \\%c"
-msgstr "\\%c에 해당하는 유니코드 문자 없음"
+msgstr "\\%c에 유니코드 문자 없음"
 
 #: builtins/pushd.def:199
 msgid "no other directory"
-msgstr "ë\8b¤ë¥¸ ë\94\94ë \89í\86 리 없음"
+msgstr "ë\8b¤ë¥¸ ë\94\94ë \89í\84°리 없음"
 
 #: builtins/pushd.def:360
 #, c-format
 msgid "%s: invalid argument"
-msgstr "%s: 유효하지 않은 인자"
+msgstr "%s: 부적절한 인자"
 
 #: builtins/pushd.def:480
 msgid "<no current directory>"
-msgstr "<í\98\84ì\9e¬ ë\94\94ë \89í\86 리 없음>"
+msgstr "<í\98\84ì\9e¬ ë\94\94ë \89í\84°리 없음>"
 
 #: builtins/pushd.def:524
 msgid "directory stack empty"
-msgstr "ë\94\94ë \89í\86 리 스택이 비어있음"
+msgstr "ë\94\94ë \89í\84°리 스택이 비어있음"
 
 #: builtins/pushd.def:526
 msgid "directory stack index"
-msgstr "ë\94\94ë \89í\86 ë¦¬ ì\8a¤í\83\9d ì\9d¸ë\8d±ì\8a¤"
+msgstr "ë\94\94ë \89í\84°ë¦¬ ì\8a¤í\83\9d ì\83\89ì\9d¸"
 
 #: builtins/pushd.def:701
 msgid ""
@@ -711,35 +718,30 @@ msgid ""
 "    \twith its position in the stack\n"
 "    \n"
 "    Arguments:\n"
-"      +N\tDisplays the Nth entry counting from the left of the list shown "
-"by\n"
+"      +N\tDisplays the Nth entry counting from the left of the list shown by\n"
 "    \tdirs when invoked without options, starting with zero.\n"
 "    \n"
-"      -N\tDisplays the Nth entry counting from the right of the list shown "
-"by\n"
+"      -N\tDisplays the Nth entry counting from the right of the list shown by\n"
 "\tdirs when invoked without options, starting with zero."
 msgstr ""
-"현재 기억된 디렉토리의 목록을 보여줍니다.  디렉토리들은\n"
-"    `pushd' ëª\85ë ¹ì\9d\84 í\86µí\95´ ëª©ë¡\9dì\97\90 ê²½ë¡\9c를 ì \80ì\9e¥í\95  ì\88\98 ì\9e\88ê³ ; 'popd' \n"
-"    ëª\85ë ¹ì\9d\84 í\86µí\95´ 거슬러 올라갈 수 있습니다.\n"
+"현재 기억한 디렉터리의 목록을 보여줍니다.  디렉터리는\n"
+"    `pushd' ëª\85ë ¹ì\9c¼ë¡\9c ëª©ë¡\9dì\97\90 ê²½ë¡\9c를 ì \80ì\9e¥í\95  ì\88\98 ì\9e\88ê³  'popd' \n"
+"    ëª\85ë ¹ì\9c¼ë¡\9c 거슬러 올라갈 수 있습니다.\n"
 "    \n"
 "    옵션:\n"
-"      -c\tì\9b\90ì\86\8c를 ì \84ë¶\80 ì\82­ì \9cí\95¨ì\9c¼ë¡\9cì\8d¨ ë\94\94ë \89í\86 리 스택을 초기화합니다\n"
-"      -l\tí\99\88 ë\94\94ë \89í\86 ë¦¬ê¹\8cì§\80 ~ë¡\9c ì¶\95ì\95½ë\90\9c 상대경로를 표시하지 않습니다\n"
-"      -p\tí\95\9c ì¤\84ì\97\90 í\95\98ë\82\98ì\94© ë\94\94ë \89í\86 리 스택을 표시합니다\n"
-"      -v\t한 줄에 하나씩 스택의 위치와 함께 디렉토리 스택을 표시합니다\n"
+"      -c\tì\9b\90ì\86\8c를 ì \84ë¶\80 ì\82­ì \9cí\95\98ì\97¬ ë\94\94ë \89í\84°리 스택을 초기화합니다\n"
+"      -l\tí\99\88 ë\94\94ë \89í\84°ë¦¬ê¹\8cì§\80 ~ ì¶\95ì\95½ 상대경로를 표시하지 않습니다\n"
+"      -p\tí\95\9c ì¤\84ì\97\90 í\95\98ë\82\98ì\94© ë\94\94ë \89í\84°리 스택을 표시합니다\n"
+"      -v\t한 줄에 하나씩 스택의 위치와 디렉터리 스택을 표시합니다\n"
 "    \n"
 "    인자:\n"
-"      +N\t인자 없이 실행될 때 보여지는 목록의 왼쪽부터 N번째 항목을 보여줍니"
-"다.\n"
-"    \t세는 수는 0부터 시작합니다.\n"
+"      +N\t인자 없이 실행할 때 dirs에서 보여주는 목록의 왼쪽부터 N번째\n"
+"    \t항목을 보여줍니다. 세는 수는 0부터 시작합니다.\n"
 "    \n"
-"      -N\t인자 없이 실행될 때 보여지는 목록의 오른쪽부터 N번째 항목을 보여줍"
-"니다.\n"
-"\t세는 수는 0부터 시작합니다."
+"      -N\t인자 없이 실행할 때 dirs에서 보여주는 목록의 오른쪽부터 N번째\n"
+"   \t 항목을 보여줍니다. 세는 수는 0부터 시작합니다."
 
 #: builtins/pushd.def:723
-#, fuzzy
 msgid ""
 "Adds a directory to the top of the directory stack, or rotates\n"
 "    the stack, making the new top of the stack the current working\n"
@@ -763,30 +765,27 @@ msgid ""
 "    \n"
 "    The `dirs' builtin displays the directory stack."
 msgstr ""
-"ë\94\94ë \89í\86 ë¦¬ ì\8a¤í\83\9dì\9d\98 ìµ\9cì\83\81ì\9c\84ì\97\90 ë\94\94ë \89í\86 리를 추가하거나 스택을 회전\n"
-"    í\95\98ê±°ë\82\98, í\98\84ì\9e¬ ì\9e\91ì\97\85ì¤\91ì\9d¸ ë\94\94ë \89í\86 리에서 스택의 새 최상위를 \n"
-"    ë§\8cë\93­ë\8b\88ë\8b¤.  ì\9d¸ì\9e\90ê°\80 ì\97\86ë\8b¤ë©´ ì\83\81ì\9c\84 ë\91\90 ë\94\94ë \89í\86 리를 교환합니다.\n"
+"ë\94\94ë \89í\84°ë¦¬ ì\8a¤í\83\9dì\9d\98 ìµ\9cì\83\81ì\9c\84ì\97\90 ë\94\94ë \89í\84°리를 추가하거나 스택을 회전\n"
+"    í\95\98ê±°ë\82\98, í\98\84ì\9e¬ ì\9e\91ì\97\85ì¤\91ì\9d¸ ë\94\94ë \89í\84°리에서 스택의 새 최상위를 \n"
+"    ë§\8cë\93­ë\8b\88ë\8b¤.  ì\9d¸ì\9e\90ê°\80 ì\97\86ë\8b¤ë©´ ì\83\81ì\9c\84 ë\91\90 ë\94\94ë \89í\84°리를 교환합니다.\n"
 "    \n"
 "    옵션:\n"
-"      -n\tSuppresses the normal change of directory when adding\n"
-"    \tdirectories to the stack, so only the stack is manipulated.\n"
+"      -n\t스택에 디렉터리를 추가할 때 디렉터리 일반 변경 동작을\n"
+"    \t억제해서 스택만 바뀌게 합니다.\n"
 "    \n"
-"    Arguments:\n"
-"      +N\tRotates the stack so that the Nth directory (counting\n"
-"    \tfrom the left of the list shown by `dirs', starting with\n"
-"    \tzero) is at the top.\n"
+"    인자:\n"
+"      +N\tN번째 디렉터리가 최상단이 되도록(0부터 시작해서\n"
+"    \t`dirs' 내장 명령 목록 왼쪽부터 갯수를 셈) 스택을 뒤집습니다.\n"
 "    \n"
-"      -N\tRotates the stack so that the Nth directory (counting\n"
-"    \tfrom the right of the list shown by `dirs', starting with\n"
-"    \tzero) is at the top.\n"
+"      -N\tN 번째 디렉터리가 최상단이 되도록(0부터 시작해서\n"
+"    \t`dirs' 내장 명령 목록 오른쪽부터 갯수를 셈) 스택을 뒤집습니다.\n"
 "    \n"
-"      dir\tAdds DIR to the directory stack at the top, making it the\n"
-"    \tnew current working directory.\n"
+"      dir\t새 현재 작업 디렉터리로 만들 DIR을 상단 디렉터리\n"
+"    \t 스택에 추가합니다.\n"
 "    \n"
-"    `dirs' 내장은 디렉토리 스택을 보여줍니다."
+"    `dirs' 내장 명령은 디렉터리 스택을 보여줍니다."
 
 #: builtins/pushd.def:748
-#, fuzzy
 msgid ""
 "Removes entries from the directory stack.  With no arguments, removes\n"
 "    the top directory from the stack, and changes to the new top directory.\n"
@@ -806,43 +805,43 @@ msgid ""
 "    \n"
 "    The `dirs' builtin displays the directory stack."
 msgstr ""
-"ë\94\94ë \89í\86 리 스택에서 항목을 제거합니다.  주어진 인자가 없을 경우\n"
-"    ìµ\9cì\83\81ì\9c\84 ë\94\94ë \89í\86 ë¦¬ë¥¼ ì\8a¤í\83\9dì\97\90ì\84\9c ì \9cê±°í\95\98ê³  ì\83\88 ìµ\9cì\83\81ì\9c\84 ë\94\94ë \89í\86 리로 변경합니다.\n"
+"ë\94\94ë \89í\84°리 스택에서 항목을 제거합니다.  주어진 인자가 없을 경우\n"
+"    ìµ\9cì\83\81ì\9c\84 ë\94\94ë \89í\84°ë¦¬ë¥¼ ì\8a¤í\83\9dì\97\90ì\84\9c ì \9cê±°í\95\98ê³  ì\83\88 ìµ\9cì\83\81ì\9c\84 ë\94\94ë \89í\84°리로 변경합니다.\n"
 "    \n"
 "    옵션:\n"
-"      -n\tSuppresses the normal change of directory when removing\n"
-"    \tdirectories from the stack, so only the stack is manipulated.\n"
+"      -n\t스택에 디렉터리를 제거할 때 디렉터리 일반 변경 동작을\n"
+"    \t억제해서 스택만 바뀌게 합니다.\n"
 "    \n"
-"    Arguments:\n"
-"      +N\tRemoves the Nth entry counting from the left of the list\n"
-"    \tshown by `dirs', starting with zero.  For example: `popd +0'\n"
-"    \tremoves the first directory, `popd +1' the second.\n"
+"    인자:\n"
+"      +N\t0부터 시작해서 `dirs' 내장 명령 목록 왼쪽부터 갯수를 세어\n"
+"    \tN번째 항목을 제거합니다. 예: `popd +0'는 첫번째 디렉터리를, \n"
+"    \t`popd +1'는 두번째 디렉터리를 제거합니다.\n"
 "    \n"
-"      -N\tRemoves the Nth entry counting from the right of the list\n"
-"    \tshown by `dirs', starting with zero.  For example: `popd -0'\n"
-"    \tremoves the last directory, `popd -1' the next to last.\n"
+"      -N\t0부터 시작해서 `dirs' 내장 명령 목록 오른쪽부터 갯수를 세어\n"
+"    \tN번째 항목을 제거합니다. 예: `popd -0'는 마지막 디렉터리를, \n"
+"    \t`popd -1'는 마지막의 그 전 디렉터리를 제거합니다.\n"
 "    \n"
-"    The `dirs' builtin displays the directory stack."
+"    `dirs' 내장 명령은 디렉터리 스택을 나타냅니다."
 
-#: builtins/read.def:280
+#: builtins/read.def:308
 #, c-format
 msgid "%s: invalid timeout specification"
-msgstr "%s: 유효하지 않은 타임아웃 정의"
+msgstr "%s: 부적절한 타임아웃 정의"
 
-#: builtins/read.def:755
+#: builtins/read.def:827
 #, c-format
 msgid "read error: %d: %s"
 msgstr "읽기 오류: %d: %s"
 
 #: builtins/return.def:68
 msgid "can only `return' from a function or sourced script"
-msgstr "í\95¨ì\88\98 ë\98\90ë\8a\94 ì\86\8cì\8a¤ë\90\9c 스크립트에서만 'return' 할 수 있음"
+msgstr "í\95¨ì\88\98 ë\98\90ë\8a\94 ì\9b\90본 ì°¸ì¡° 스크립트에서만 'return' 할 수 있음"
 
 #: builtins/set.def:869
 msgid "cannot simultaneously unset a function and a variable"
-msgstr "함수와 변수를 동시에 unset할 수 없음"
+msgstr "함수와 변수를 동시에 설정 해제할 수 없음"
 
-#: builtins/set.def:966
+#: builtins/set.def:969
 #, c-format
 msgid "%s: not an array variable"
 msgstr "%s: 배열 변수가 아님"
@@ -855,20 +854,20 @@ msgstr "%s: 함수가 아님"
 #: builtins/setattr.def:194
 #, c-format
 msgid "%s: cannot export"
-msgstr "%s: export할 수 없음"
+msgstr "%s: 환경으로 내보낼 수 없음"
 
 #: builtins/shift.def:72 builtins/shift.def:79
 msgid "shift count"
 msgstr "시프트 횟수"
 
-#: builtins/shopt.def:310
+#: builtins/shopt.def:323
 msgid "cannot set and unset shell options simultaneously"
-msgstr "ì\89\98 ì\98µì\85\98ì\9d\84 ë\8f\99ì\8b\9cì\97\90 set í\95\98ê³  unset 할 수 없음"
+msgstr "ì\85¸ ì\98µì\85\98ì\9d\84 ë\8f\99ì\8b\9cì\97\90 ì\84¤ì \95 ë°\8f ì\84¤ì \95 í\95´ì \9c할 수 없음"
 
-#: builtins/shopt.def:428
+#: builtins/shopt.def:444
 #, c-format
 msgid "%s: invalid shell option name"
-msgstr "%s: 유효하지 않은 쉘 옵션 이름"
+msgstr "%s: 부적절한 셸 옵션 이름"
 
 #: builtins/source.def:128
 msgid "filename argument required"
@@ -885,66 +884,66 @@ msgstr "일시 정지할 수 없음"
 
 #: builtins/suspend.def:112
 msgid "cannot suspend a login shell"
-msgstr "ë¡\9cê·¸ì\9d¸ ì\89\98을 일시 정지할 수 없음"
+msgstr "ë¡\9cê·¸ì\9d¸ ì\85¸을 일시 정지할 수 없음"
 
 #: builtins/type.def:235
 #, c-format
 msgid "%s is aliased to `%s'\n"
-msgstr "%s는 '%s'의 별칭임\n"
+msgstr "%s은(는) `%s'의 별칭임\n"
 
 #: builtins/type.def:256
 #, c-format
 msgid "%s is a shell keyword\n"
-msgstr "%s 는 쉘 키워드임\n"
+msgstr "%s은(는) 셸 키워드임\n"
 
 #: builtins/type.def:275
 #, c-format
 msgid "%s is a function\n"
-msgstr "%s 는 함수임\n"
+msgstr "%s은(는) 함수임\n"
 
 #: builtins/type.def:299
 #, c-format
 msgid "%s is a special shell builtin\n"
-msgstr "%s 는 특수한 쉘 내장임\n"
+msgstr "%s은(는) 특수 셸 내장 명령임\n"
 
 #: builtins/type.def:301
 #, c-format
 msgid "%s is a shell builtin\n"
-msgstr "%s 는 쉘 내장임\n"
+msgstr "%s은(는) 셸 내장임\n"
 
 #: builtins/type.def:323 builtins/type.def:408
 #, c-format
 msgid "%s is %s\n"
-msgstr "%s 는 %s 임\n"
+msgstr "%s은(는) %s 임\n"
 
 #: builtins/type.def:343
 #, c-format
 msgid "%s is hashed (%s)\n"
-msgstr "%s 는 해시됨 (%s)\n"
+msgstr "%s은(는) 해시됨 (%s)\n"
 
 #: builtins/ulimit.def:400
 #, c-format
 msgid "%s: invalid limit argument"
-msgstr "%s: 유효하지 않은 제한 인자"
+msgstr "%s: 부적절한 제한 인자"
 
 #: builtins/ulimit.def:426
 #, c-format
 msgid "`%c': bad command"
-msgstr "'%c': 잘못된 명령어"
+msgstr "`%c': 잘못된 명령어"
 
-#: builtins/ulimit.def:455
+#: builtins/ulimit.def:464
 #, c-format
 msgid "%s: cannot get limit: %s"
 msgstr "%s: 제한을 읽을 수 없음: %s"
 
-#: builtins/ulimit.def:481
+#: builtins/ulimit.def:490
 msgid "limit"
 msgstr "제한"
 
-#: builtins/ulimit.def:493 builtins/ulimit.def:793
+#: builtins/ulimit.def:502 builtins/ulimit.def:802
 #, c-format
 msgid "%s: cannot modify limit: %s"
-msgstr "%s: ì \9cí\95\9cì\9d\84 ë³\80ê²½í\95  수 없음: %s"
+msgstr "%s: ì \9cí\95\9cì\9d\84 ë°\94ê¿\80 수 없음: %s"
 
 #: builtins/umask.def:115
 msgid "octal number"
@@ -953,14 +952,14 @@ msgstr "8진수"
 #: builtins/umask.def:232
 #, c-format
 msgid "`%c': invalid symbolic mode operator"
-msgstr "'%c': 유효하지 않은 심볼릭 모드 연산자"
+msgstr "`%c': 부적절한 심볼릭 모드 연산자"
 
 #: builtins/umask.def:287
 #, c-format
 msgid "`%c': invalid symbolic mode character"
-msgstr "'%c': 유효하지 않은 심볼릭 모드 문자"
+msgstr "`%c': 부적절한 심볼릭 모드 문자"
 
-#: error.c:89 error.c:347 error.c:349 error.c:351
+#: error.c:89 error.c:373 error.c:375 error.c:377
 msgid " line "
 msgstr " 줄 "
 
@@ -980,359 +979,368 @@ msgstr "취소중..."
 msgid "INFORM: "
 msgstr "정보: "
 
-#: error.c:462
+#: error.c:310
+#, c-format
+msgid "DEBUG warning: "
+msgstr "디버깅 경고: "
+
+#: error.c:488
 msgid "unknown command error"
-msgstr "알 수 없는 명령 오류"
+msgstr "알 수 없는 명령 오류"
 
-#: error.c:463
+#: error.c:489
 msgid "bad command type"
-msgstr "잘못된 명령어 타입"
+msgstr "잘못된 명령 형식"
 
-#: error.c:464
+#: error.c:490
 msgid "bad connector"
 msgstr "잘못된 커넥터"
 
-#: error.c:465
+#: error.c:491
 msgid "bad jump"
 msgstr "잘못된 점프"
 
-#: error.c:503
+#: error.c:529
 #, c-format
 msgid "%s: unbound variable"
-msgstr "%s: í\95´ì \9cë\90\9c ë³\80ì\88\98"
+msgstr "%s: ë°\94ì\9d¸ë\94© í\95´ì \9cí\95\9c ë³\80ì\88\98"
 
-#: eval.c:242
+#: eval.c:243
 msgid "\atimed out waiting for input: auto-logout\n"
 msgstr "\a입력 대기중 시간 초과: 자동으로 로그아웃\n"
 
-#: execute_cmd.c:537
+#: execute_cmd.c:555
 #, c-format
 msgid "cannot redirect standard input from /dev/null: %s"
-msgstr "í\91\9cì¤\80 ì\9e\85ë ¥ì\9d\84 /dev/nullì\97\90ì\84\9c ë¦¬ë\8b¤ì\9d´ë \89í\8a¸ 할 수 없음: %s"
+msgstr "í\91\9cì¤\80 ì\9e\85ë ¥ì\9d\84 /dev/nullì\97\90ì\84\9c ë°©í\96¥ì\9e¬ì§\80ì \95 ì²\98리할 수 없음: %s"
 
-#: execute_cmd.c:1297
+#: execute_cmd.c:1317
 #, c-format
 msgid "TIMEFORMAT: `%c': invalid format character"
-msgstr "TIMEFORMAT: `%c': 유효하지 않은 서식 문자"
+msgstr "TIMEFORMAT: `%c': 부적절한 서식 문자"
 
-#: execute_cmd.c:2362
+#: execute_cmd.c:2391
 #, c-format
 msgid "execute_coproc: coproc [%d:%s] still exists"
 msgstr "execute_coproc: coproc [%d:%s] 가 여전히 존재"
 
-#: execute_cmd.c:2486
+#: execute_cmd.c:2524
 msgid "pipe error"
 msgstr "파이프 오류"
 
-#: execute_cmd.c:4793
+#: execute_cmd.c:4923
 #, c-format
 msgid "eval: maximum eval nesting level exceeded (%d)"
 msgstr "eval: 최대 eval 중첩 레벨 초과 (%d)"
 
-#: execute_cmd.c:4805
+#: execute_cmd.c:4935
 #, c-format
 msgid "%s: maximum source nesting level exceeded (%d)"
 msgstr "%s: 최대 소스 중첩 레벨 초과 (%d)"
 
-#: execute_cmd.c:4913
+#: execute_cmd.c:5043
 #, c-format
 msgid "%s: maximum function nesting level exceeded (%d)"
 msgstr "%s: 최대 함수 중첩 레벨 초과 (%d)"
 
-#: execute_cmd.c:5467
+#: execute_cmd.c:5598
 #, c-format
 msgid "%s: restricted: cannot specify `/' in command names"
 msgstr "%s: 제한됨: 명령 이름에 '/'를 지정할 수 없음"
 
-#: execute_cmd.c:5574
+#: execute_cmd.c:5715
 #, c-format
 msgid "%s: command not found"
 msgstr "%s: 명령어를 찾을 수 없음"
 
-#: execute_cmd.c:5816
+#: execute_cmd.c:5957
 #, c-format
 msgid "%s: %s"
 msgstr "%s: %s"
 
-#: execute_cmd.c:5854
+#: execute_cmd.c:5975
+#, c-format
+msgid "%s: cannot execute: required file not found"
+msgstr "%s: 실행할 수 없음: 필요한 파일이 없습니다"
+
+#: execute_cmd.c:6000
 #, c-format
 msgid "%s: %s: bad interpreter"
 msgstr "%s: %s: 잘못된 인터프리터"
 
-#: execute_cmd.c:5891
+#: execute_cmd.c:6037
 #, c-format
 msgid "%s: cannot execute binary file: %s"
 msgstr "%s: 이진 파일을 실행할 수 없음: %s"
 
-#: execute_cmd.c:5977
+#: execute_cmd.c:6123
 #, c-format
 msgid "`%s': is a special builtin"
-msgstr "'%s': 특수한 내장 명령임"
+msgstr "`%s': 특수한 내장 명령임"
 
-#: execute_cmd.c:6029
+#: execute_cmd.c:6175
 #, c-format
 msgid "cannot duplicate fd %d to fd %d"
-msgstr "fd %d를 fd %d로 복제할 수 없음"
+msgstr "파일 서술자 %d번을 파일 서술자 %d번으로 복제할 수 없음"
 
 #: expr.c:263
 msgid "expression recursion level exceeded"
-msgstr "표현식 재귀 레벨 초과"
+msgstr "표현식 재귀 레벨 초과"
 
 #: expr.c:291
 msgid "recursion stack underflow"
 msgstr "재귀 스택 언더플로우"
 
-#: expr.c:477
+#: expr.c:478
 msgid "syntax error in expression"
 msgstr "표현식 문법 오류"
 
-#: expr.c:521
+#: expr.c:522
 msgid "attempted assignment to non-variable"
-msgstr "ë³\80ì\88\98ê°\80 ì\95\84ë\8b\8c ê²\83ì\97\90 í\95 ë\8b¹ì\9d\84 ì\8b\9cë\8f\84í\95¨"
+msgstr "ë¹\84 ë³\80ì\88\98ì\97\90 í\95 ë\8b¹ ì\8b\9cë\8f\84"
 
-#: expr.c:530
+#: expr.c:531
 msgid "syntax error in variable assignment"
 msgstr "변수 할당 문법 오류"
 
-#: expr.c:544 expr.c:911
+#: expr.c:545 expr.c:912
 msgid "division by 0"
 msgstr "0으로 나눔"
 
-#: expr.c:592
+#: expr.c:593
 msgid "bug: bad expassign token"
 msgstr "버그: 잘못된 표현식 토큰"
 
-#: expr.c:646
+#: expr.c:647
 msgid "`:' expected for conditional expression"
-msgstr "조건문에 ':' 예상함"
+msgstr "조건문에 ':' 필요함"
 
-#: expr.c:972
+#: expr.c:973
 msgid "exponent less than 0"
 msgstr "지수가 0보다 작음"
 
-#: expr.c:1029
+#: expr.c:1030
 msgid "identifier expected after pre-increment or pre-decrement"
-msgstr "전위 증가 또는 후위 감소 후에 식별자를 예상함"
+msgstr "전위 증가 또는 후위 감소 후에 식별자가 필요함"
 
-#: expr.c:1056
+#: expr.c:1057
 msgid "missing `)'"
 msgstr "')' 빠짐"
 
-#: expr.c:1107 expr.c:1487
+#: expr.c:1108 expr.c:1492
 msgid "syntax error: operand expected"
-msgstr "문법 오류: 피연산자 예상함"
+msgstr "문법 오류: 피연산자 필요함"
 
-#: expr.c:1489
+#: expr.c:1494
 msgid "syntax error: invalid arithmetic operator"
-msgstr "문법 오류: 유효하지 않은 산술 연산자"
+msgstr "문법 오류: 부적절한 산술 연산자"
 
-#: expr.c:1513
+#: expr.c:1518
 #, c-format
 msgid "%s%s%s: %s (error token is \"%s\")"
 msgstr "%s%s%s: %s (오류 토큰은 \"%s\" 임)"
 
-#: expr.c:1573
+#: expr.c:1578
 msgid "invalid arithmetic base"
-msgstr "유효하지 않은 진법"
+msgstr "부적절한 진법"
 
-#: expr.c:1582
-#, fuzzy
+#: expr.c:1587
 msgid "invalid integer constant"
-msgstr "%s: 유효하지 않은 줄 수"
+msgstr "부적절한 정수 상수"
 
-#: expr.c:1598
+#: expr.c:1603
 msgid "value too great for base"
 msgstr "해당 진법에서 표현할 수 없는 값"
 
-#: expr.c:1647
+#: expr.c:1652
 #, c-format
 msgid "%s: expression error\n"
 msgstr "%s: 표현식 오류\n"
 
 #: general.c:70
 msgid "getcwd: cannot access parent directories"
-msgstr "getcwd: 부모 디렉터리에 접근할 수 없음"
+msgstr "getcwd: 상위 디렉터리에 접근할 수 없음"
 
-#: input.c:99 subst.c:6069
+#: input.c:99 subst.c:6208
 #, c-format
 msgid "cannot reset nodelay mode for fd %d"
-msgstr "fd %d에 대해 nodelay 모드를 재설정 할 수 없음"
+msgstr "파일 서술자 %d번에 nodelay 모드를 초기화할 수 없음"
 
 #: input.c:266
 #, c-format
 msgid "cannot allocate new file descriptor for bash input from fd %d"
-msgstr "fd %d에서 bash 입력을 위한 새 파일 디스크립터를 할당할 수 없음"
+msgstr "파일 서술자 %d번에서 bash 입력용 새 파일 서술자를 할당할 수 없음"
 
 #: input.c:274
 #, c-format
 msgid "save_bash_input: buffer already exists for new fd %d"
-msgstr "save_bash_input: 새로운 fd %d를 위한 버퍼가 이미 존재함"
+msgstr "save_bash_input: 새 파일 서술자 %d번의 버퍼가 이미 존재함"
 
 #: jobs.c:543
 msgid "start_pipeline: pgrp pipe"
 msgstr "start_pipeline: pgrp pipe"
 
-#: jobs.c:906
+#: jobs.c:907
 #, c-format
 msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
-msgstr ""
+msgstr "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
 
-#: jobs.c:959
+#: jobs.c:960
 #, c-format
 msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
-msgstr ""
+msgstr "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
 
-#: jobs.c:1283
+#: jobs.c:1279
 #, c-format
 msgid "forked pid %d appears in running job %d"
-msgstr "포크된 pid %d가 실행중인 job %d에 나타남"
+msgstr "포크한 PID %d번이 실행중인 작업 %d에 나타남"
 
-#: jobs.c:1402
+#: jobs.c:1397
 #, c-format
 msgid "deleting stopped job %d with process group %ld"
-msgstr "프로세스 그룹 %2$ld의 정지된 작업 %1$d 를 삭제중"
+msgstr "프로세스 그룹 %2$ld번의 멈춘 작업 %1$d번을 삭제중"
 
-#: jobs.c:1511
+#: jobs.c:1502
 #, c-format
 msgid "add_process: pid %5ld (%s) marked as still alive"
-msgstr "add_process: pid %5ld (%s) ê°\80 í\98\84ì\9e¬ë\8f\84 ì\82´ì\95\84ì\9e\88ë\8b¤ê³  í\91\9cì\8b\9cë\90¨"
+msgstr "add_process: pid %5ld (%s)ì\9d´(ê°\80) ì\97¬ì \84í\9e\88 ì\82´ì\95\84ì\9e\88ë\8b¤ê³  ë\82\98í\83\80ë\82¨"
 
-#: jobs.c:1850
+#: jobs.c:1839
 #, c-format
 msgid "describe_pid: %ld: no such pid"
 msgstr "describe_pid: %ld: 그런 pid가 없음"
 
-#: jobs.c:1865
+#: jobs.c:1854
 #, c-format
 msgid "Signal %d"
-msgstr "ì\8b í\98¸ %d"
+msgstr "ì\8b\9cê·¸ë\84\90 %dë²\88"
 
-#: jobs.c:1879 jobs.c:1905
+#: jobs.c:1868 jobs.c:1894
 msgid "Done"
 msgstr "완료"
 
-#: jobs.c:1884 siglist.c:122
+#: jobs.c:1873 siglist.c:123
 msgid "Stopped"
 msgstr "멈춤"
 
-#: jobs.c:1888
+#: jobs.c:1877
 #, c-format
 msgid "Stopped(%s)"
 msgstr "멈춤(%s)"
 
-#: jobs.c:1892
+#: jobs.c:1881
 msgid "Running"
 msgstr "실행중"
 
-#: jobs.c:1909
+#: jobs.c:1898
 #, c-format
 msgid "Done(%d)"
 msgstr "완료(%d)"
 
-#: jobs.c:1911
+#: jobs.c:1900
 #, c-format
 msgid "Exit %d"
 msgstr "나감 %d"
 
-#: jobs.c:1914
+#: jobs.c:1903
 msgid "Unknown status"
 msgstr "알 수 없는 상태"
 
-#: jobs.c:2001
+#: jobs.c:1990
 #, c-format
 msgid "(core dumped) "
 msgstr "(코어 덤프됨) "
 
-#: jobs.c:2020
+#: jobs.c:2009
 #, c-format
 msgid "  (wd: %s)"
 msgstr "  (wd: %s)"
 
-#: jobs.c:2259
+#: jobs.c:2250
 #, c-format
 msgid "child setpgid (%ld to %ld)"
-msgstr "child setpgid (%ld 에서 %ld 로)"
+msgstr "child setpgid (%ld에서 %ld(으)로)"
 
-#: jobs.c:2617 nojobs.c:664
+#: jobs.c:2608 nojobs.c:666
 #, c-format
 msgid "wait: pid %ld is not a child of this shell"
-msgstr "wait: pid %ldë\8a\94 ì\9d´ ì\89\98의 자식이 아님"
+msgstr "wait: pid %ldë²\88ì\9d\80 ì\9d´ ì\85¸의 자식이 아님"
 
-#: jobs.c:2893
+#: jobs.c:2884
 #, c-format
 msgid "wait_for: No record of process %ld"
-msgstr "wait_for: 프로세스 %ld에 대한 기록 없음"
+msgstr "wait_for: 프로세스 %ld번의 기록 없음"
 
-#: jobs.c:3236
+#: jobs.c:3223
 #, c-format
 msgid "wait_for_job: job %d is stopped"
-msgstr "wait_for_job: job %d 은 정지됨"
+msgstr "wait_for_job: 작업 %d번이 멈춤"
 
-#: jobs.c:3564
-#, fuzzy, c-format
+#: jobs.c:3551
+#, c-format
 msgid "%s: no current jobs"
-msgstr "%s: 그러한 job이 없음"
+msgstr "%s: 현재 작업이 없음"
 
-#: jobs.c:3571
+#: jobs.c:3558
 #, c-format
 msgid "%s: job has terminated"
 msgstr "%s: 작업이 종료됨"
 
-#: jobs.c:3580
+#: jobs.c:3567
 #, c-format
 msgid "%s: job %d already in background"
-msgstr "%s: job %d는 이미 백그라운드에 있음"
+msgstr "%s: 작업 %d번은 이미 백그라운드에 있음"
 
-#: jobs.c:3806
+#: jobs.c:3793
 msgid "waitchld: turning on WNOHANG to avoid indefinite block"
-msgstr "waitchld: 정의되지 않은 블록을 피하기 위해 WNOHANG를 켜는 중"
+msgstr "waitchld: 미지정 차단 동작 회피 목적으로 WNOHANG를 켜는 중"
 
-#: jobs.c:4320
+#: jobs.c:4307
 #, c-format
 msgid "%s: line %d: "
 msgstr "%s: 줄 %d: "
 
-#: jobs.c:4334 nojobs.c:919
+#: jobs.c:4321 nojobs.c:921
 #, c-format
 msgid " (core dumped)"
 msgstr " (코어 덤프됨)"
 
-#: jobs.c:4346 jobs.c:4359
+#: jobs.c:4333 jobs.c:4346
 #, c-format
 msgid "(wd now: %s)\n"
 msgstr "(wd now: %s)\n"
 
-#: jobs.c:4391
+#: jobs.c:4378
 msgid "initialize_job_control: getpgrp failed"
 msgstr "initialize_job_control: getpgrp 실패"
 
-#: jobs.c:4447
+#: jobs.c:4434
 msgid "initialize_job_control: no job control in background"
-msgstr "initialize_job_control: 백그라운드에 job control 없음"
+msgstr "initialize_job_control: 백그라운드에 작업 컨트롤 없음"
 
-#: jobs.c:4463
+#: jobs.c:4450
 msgid "initialize_job_control: line discipline"
-msgstr "initialize_job_control: line discipline"
+msgstr "initialize_job_control: 라인 제어"
 
-#: jobs.c:4473
+#: jobs.c:4460
 msgid "initialize_job_control: setpgid"
 msgstr "initialize_job_control: setpgid"
 
-#: jobs.c:4494 jobs.c:4503
+#: jobs.c:4481 jobs.c:4490
 #, c-format
 msgid "cannot set terminal process group (%d)"
-msgstr "터미털 프로세스 그룹 (%d)을 설정할 수 없음"
+msgstr "터미털 프로세스 그룹(%d)을 설정할 수 없음"
 
-#: jobs.c:4508
+#: jobs.c:4495
 msgid "no job control in this shell"
-msgstr "ì\9d´ ì\89\98ì\97\90 job control 없음"
+msgstr "ì\9d´ ì\85¸ì\97\90 ì\9e\91ì\97\85 ì \9cì\96´ 없음"
 
-#: lib/malloc/malloc.c:353
+#: lib/malloc/malloc.c:367
 #, c-format
 msgid "malloc: failed assertion: %s\n"
 msgstr "malloc: assertion 실패: %s\n"
 
-#: lib/malloc/malloc.c:369
+#: lib/malloc/malloc.c:383
 #, c-format
 msgid ""
 "\r\n"
@@ -1341,70 +1349,68 @@ msgstr ""
 "\r\n"
 "malloc: %s:%d: assertion 망가짐\r\n"
 
-#: lib/malloc/malloc.c:370 lib/malloc/malloc.c:933
+#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941
 msgid "unknown"
 msgstr "알 수 없음"
 
-#: lib/malloc/malloc.c:882
+#: lib/malloc/malloc.c:892
 msgid "malloc: block on free list clobbered"
-msgstr "malloc: block on free list clobbered"
+msgstr "malloc: 해제 목록 처리중 중단"
 
-#: lib/malloc/malloc.c:972
+#: lib/malloc/malloc.c:980
 msgid "free: called with already freed block argument"
 msgstr "free: 이미 해제된 블록 인자를 가지고 호출됨"
 
-#: lib/malloc/malloc.c:975
+#: lib/malloc/malloc.c:983
 msgid "free: called with unallocated block argument"
 msgstr "free: 할당되지 않은 블록 인자와 호출됨"
 
-#: lib/malloc/malloc.c:994
+#: lib/malloc/malloc.c:1001
 msgid "free: underflow detected; mh_nbytes out of range"
-msgstr "free: 언더플로우 감지; mh_nbytes가 범위를 벗어남"
+msgstr "free: 언더플로우 감지! mh_nbytes가 범위를 벗어남"
 
-#: lib/malloc/malloc.c:1001
-#, fuzzy
+#: lib/malloc/malloc.c:1007
 msgid "free: underflow detected; magic8 corrupted"
-msgstr "free: 언더플로우 감지; mh_nbytes가 범위를 벗어남"
+msgstr "free: 언더플로우 감지! magic8 손상"
 
-#: lib/malloc/malloc.c:1009
+#: lib/malloc/malloc.c:1014
 msgid "free: start and end chunk sizes differ"
 msgstr "free: 시작과 끝의 청크 사이즈가 다름"
 
-#: lib/malloc/malloc.c:1119
+#: lib/malloc/malloc.c:1176
 msgid "realloc: called with unallocated block argument"
 msgstr "realloc: 할당되지 않은 블록 인자를 가지고 호출됨"
 
-#: lib/malloc/malloc.c:1134
+#: lib/malloc/malloc.c:1191
 msgid "realloc: underflow detected; mh_nbytes out of range"
-msgstr "realloc: 언더플로우 감지; mh_nbytes가 범위를 벗어남"
+msgstr "realloc: 언더플로우 감지! mh_nbytes가 범위를 벗어남"
 
-#: lib/malloc/malloc.c:1141
-#, fuzzy
+#: lib/malloc/malloc.c:1197
 msgid "realloc: underflow detected; magic8 corrupted"
-msgstr "realloc: 언더플로우 감지; mh_nbytes가 범위를 벗어남"
+msgstr "realloc: 언더플로우 감지! magic8 손상"
 
-#: lib/malloc/malloc.c:1150
+#: lib/malloc/malloc.c:1205
 msgid "realloc: start and end chunk sizes differ"
 msgstr "realloc: 시작과 끝의 청크 사이즈가 다름"
 
 #: lib/malloc/table.c:191
 #, c-format
 msgid "register_alloc: alloc table is full with FIND_ALLOC?\n"
-msgstr "register_alloc: FIND_ALLOC이 할당 테이블이 가득 찼다고 함?\n"
+msgstr "register_alloc: FIND_ALLOC이 할당 테이블이 가득?\n"
 
 #: lib/malloc/table.c:200
 #, c-format
 msgid "register_alloc: %p already in table as allocated?\n"
-msgstr "register_alloc: %pê°\80 í\95 ë\8b¹ë\90\9c í\85\8cì\9d´ë¸\94ì\97\90 ì\9e\88ì\9d\8c?\n"
+msgstr "register_alloc: %pì\9d´(ê°\80) í\95 ë\8b¹í\95\9c í\85\8cì\9d´ë¸\94ì\97\90 ì\9e\88ì\9d\8c?\n"
 
 #: lib/malloc/table.c:253
 #, c-format
 msgid "register_free: %p already in table as free?\n"
-msgstr "register_free: %pê°\80 ì\9d´ë¯¸ í\95´ì \9cë\90\9c í\85\8cì\9d´ë¸\94ì\97\90 ì\9e\88ì\9d\8c?\n"
+msgstr "register_free: %pì\9d´(ê°\80) ì\9d´ë¯¸ í\95´ì \9cí\95\9c í\85\8cì\9d´ë¸\94ì\97\90 ì\9e\88ì\9d\8c?\n"
 
 #: lib/sh/fmtulong.c:102
 msgid "invalid base"
-msgstr "유효하지 않은 진법"
+msgstr "부적절한 진법"
 
 #: lib/sh/netopen.c:168
 #, c-format
@@ -1414,7 +1420,7 @@ msgstr "%s: 알 수 없는 호스트"
 #: lib/sh/netopen.c:175
 #, c-format
 msgid "%s: invalid service"
-msgstr "%s: 유효하지 않은 서비스"
+msgstr "%s: 부적절한 서비스"
 
 #: lib/sh/netopen.c:306
 #, c-format
@@ -1425,25 +1431,25 @@ msgstr "%s: 잘못된 네트워크 경로 사양"
 msgid "network operations not supported"
 msgstr "네트워크 작업은 지원되지 않음"
 
-#: locale.c:217
+#: locale.c:219
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s)"
-msgstr "setlocale: LC_ALL: ë¡\9cì¼\80ì\9d¼을 바꿀 수 없음 (%s)"
+msgstr "setlocale: LC_ALL: ë¡\9cìº\98을 바꿀 수 없음 (%s)"
 
-#: locale.c:219
+#: locale.c:221
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s): %s"
-msgstr "setlocale: LC_ALL: ë¡\9cì¼\80ì\9d¼을 바꿀 수 없음 (%s): %s"
+msgstr "setlocale: LC_ALL: ë¡\9cìº\98을 바꿀 수 없음 (%s): %s"
 
-#: locale.c:292
+#: locale.c:294
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s)"
-msgstr "setlocale: %s: ë¡\9cì¼\80ì\9d¼을 바꿀 수 없음 (%s)"
+msgstr "setlocale: %s: ë¡\9cìº\98을 바꿀 수 없음 (%s)"
 
-#: locale.c:294
+#: locale.c:296
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s): %s"
-msgstr "setlocale: %s: ë¡\9cì¼\80ì\9d¼을 바꿀 수 없음 (%s): %s"
+msgstr "setlocale: %s: ë¡\9cìº\98을 바꿀 수 없음 (%s): %s"
 
 #: mailcheck.c:439
 msgid "You have mail in $_"
@@ -1456,148 +1462,145 @@ msgstr "$_에 새로운 메일이 있습니다"
 #: mailcheck.c:480
 #, c-format
 msgid "The mail in %s has been read\n"
-msgstr "%sì\97\90 ì\9e\88ë\8a\94 ë©\94ì\9d¼ì\9d\80 읽었습니다\n"
+msgstr "%sì\9d\98 ë©\94ì\9d¼ì\9d\84 읽었습니다\n"
 
-#: make_cmd.c:317
+#: make_cmd.c:314
 msgid "syntax error: arithmetic expression required"
 msgstr "문법 오류: 산술 표현식이 필요함"
 
-#: make_cmd.c:319
+#: make_cmd.c:316
 msgid "syntax error: `;' unexpected"
-msgstr "문법 오류: ';' ì\98\88ì\83\81ë\90\98ì§\80 ì\95\8aì\9d\8c"
+msgstr "문법 오류: ';' í\95\84ì\9a\94í\95\98ì§\80 ì\95\8aì\9d\8c"
 
-#: make_cmd.c:320
+#: make_cmd.c:317
 #, c-format
 msgid "syntax error: `((%s))'"
 msgstr "문법 오류: `((%s))'"
 
-#: make_cmd.c:572
+#: make_cmd.c:569
 #, c-format
 msgid "make_here_document: bad instruction type %d"
 msgstr "make_here_document: 잘못된 명령어 형식 %d"
 
-#: make_cmd.c:657
+#: make_cmd.c:668
 #, c-format
 msgid "here-document at line %d delimited by end-of-file (wanted `%s')"
-msgstr "here-document가 줄 %d 에서 파일의 끝으로 구분됨 (`%s'를 예상함)"
+msgstr "here-document가 %d번 행에서 파일의 끝으로 구분함 (`%s'아(가) 필요함)"
 
-#: make_cmd.c:756
+#: make_cmd.c:769
 #, c-format
 msgid "make_redirection: redirection instruction `%d' out of range"
-msgstr "make_redirection: ë¦¬ë\8b¤ì\9d´ë \89ì\85\98 명령어 `%d' 범위 벗어남"
+msgstr "make_redirection: ë°©í\96¥ì\9e¬ì§\80ì \95 ì²\98리 명령어 `%d' 범위 벗어남"
 
-#: parse.y:2393
+#: parse.y:2428
 #, c-format
-msgid ""
-"shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line "
-"truncated"
-msgstr ""
-"shell_getc: shell_input_line_size (%zu)가 SIZE_MAX (%lu)를 초과함: 줄 잘림"
+msgid "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line truncated"
+msgstr "shell_getc: shell_input_line_size(%zu)가 SIZE_MAX(%lu)를 초과함: 줄 잘림"
 
-#: parse.y:2826
+#: parse.y:2921
 msgid "maximum here-document count exceeded"
 msgstr "최대 here-document 카운트 초과"
 
-#: parse.y:3581 parse.y:3957 parse.y:4556
+#: parse.y:3684 parse.y:4244 parse.y:6148
 #, c-format
 msgid "unexpected EOF while looking for matching `%c'"
-msgstr "'%c'를 찾는 도중 예상하지 못한 파일의 끝"
+msgstr "`%c'을(를) 찾는 도중 예상치 못한 파일의 끝"
 
-#: parse.y:4696
+#: parse.y:4452
 msgid "unexpected EOF while looking for `]]'"
-msgstr "']]'를 찾던 도중 예상하지 못한 파일의 끝"
+msgstr "']]'를 찾던 도중 예상 못한 파일의 끝"
 
-#: parse.y:4701
+#: parse.y:4457
 #, c-format
 msgid "syntax error in conditional expression: unexpected token `%s'"
-msgstr "조건 표현식에 문법 오류: 예상하지 못한 토큰 '%s'"
+msgstr "조건 표현식에 문법 오류: 예상치 못한 토큰 `%s'"
 
-#: parse.y:4705
+#: parse.y:4461
 msgid "syntax error in conditional expression"
 msgstr "조건 표현식에 문법 오류"
 
-#: parse.y:4783
+#: parse.y:4539
 #, c-format
 msgid "unexpected token `%s', expected `)'"
-msgstr "예상ë\90\98ì§\80 ì\95\8aì\9d\80 í\86 í\81° '%s', ')' ì\98\88ì\83\81ë\90¨"
+msgstr "예상ì¹\98 ëª»í\95\9c í\86 í\81° `%s', ')' í\95\84ì\9a\94í\95¨"
 
-#: parse.y:4787
+#: parse.y:4543
 msgid "expected `)'"
-msgstr "')' ì\98\88ì\83\81ë\90¨"
+msgstr "')' í\95\84ì\9a\94í\95¨"
 
-#: parse.y:4815
+#: parse.y:4571
 #, c-format
 msgid "unexpected argument `%s' to conditional unary operator"
-msgstr "조건 단항 연산자에 예기치 않은 인자 '%s'"
+msgstr "조건 단항 연산자에 예기치 않은 인자 `%s'"
 
-#: parse.y:4819
+#: parse.y:4575
 msgid "unexpected argument to conditional unary operator"
 msgstr "조건 단항 연산자에 예기치 않은 인자"
 
-#: parse.y:4865
+#: parse.y:4621
 #, c-format
 msgid "unexpected token `%s', conditional binary operator expected"
-msgstr "예기치 않은 토큰 '%s', ì¡°ê±´ ì\9d´í\95­ ì\97°ì\82°ì\9e\90 ì\98\88ì\83\81ë\90¨"
+msgstr "예기치 않은 토큰 `%s', ì¡°ê±´ ì\9d´í\95­ ì\97°ì\82°ì\9e\90 í\95\84ì\9a\94í\95¨"
 
-#: parse.y:4869
+#: parse.y:4625
 msgid "conditional binary operator expected"
-msgstr "조건 이항 연산자 ì\98\88ì\83\81ë\90¨"
+msgstr "조건 이항 연산자 í\95\84ì\9a\94í\95¨"
 
-#: parse.y:4891
+#: parse.y:4647
 #, c-format
 msgid "unexpected argument `%s' to conditional binary operator"
-msgstr "조건 이항 연산자에 대해 예기치 않은 인자 '%s'"
+msgstr "조건 이항 연산자에 대해 예기치 않은 인자 `%s'"
 
-#: parse.y:4895
+#: parse.y:4651
 msgid "unexpected argument to conditional binary operator"
 msgstr "조건 이항 연산자에 대해 예기치 않은 인자"
 
-#: parse.y:4906
+#: parse.y:4662
 #, c-format
 msgid "unexpected token `%c' in conditional command"
-msgstr "조건 명령어에서 예기치 않은 토큰 '%c'"
+msgstr "조건 명령어에서 예기치 않은 토큰 `%c'"
 
-#: parse.y:4909
+#: parse.y:4665
 #, c-format
 msgid "unexpected token `%s' in conditional command"
-msgstr "조건 명령어에서 예기치 않은 토큰 '%s'"
+msgstr "조건 명령어에서 예기치 않은 토큰 `%s'"
 
-#: parse.y:4913
+#: parse.y:4669
 #, c-format
 msgid "unexpected token %d in conditional command"
 msgstr "조건 명령어에서 예기치 않은 토큰 %d"
 
-#: parse.y:6336
+#: parse.y:6118
 #, c-format
 msgid "syntax error near unexpected token `%s'"
-msgstr "예기치 않은 토큰 '%s' 근처에서 문법 오류"
+msgstr "예기치 않은 토큰 `%s' 근처에서 문법 오류"
 
-#: parse.y:6355
+#: parse.y:6137
 #, c-format
 msgid "syntax error near `%s'"
-msgstr "'%s' 근처에서 문법 오류"
+msgstr "`%s' 근처에서 문법 오류"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error: unexpected end of file"
 msgstr "문법 오류: 예기치 않은 파일의 끝"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error"
 msgstr "문법 오류"
 
-#: parse.y:6428
+#: parse.y:6216
 #, c-format
 msgid "Use \"%s\" to leave the shell.\n"
-msgstr "ì\89\98ì\9d\84 ë\82\98ê°\80려면 \"%s\"를 ì\82¬ì\9a©í\95\98ì\84¸ì\9a\94.\n"
+msgstr "ì\85¸ì\9d\84 ë\82\98ê°\80려면 \"%s\" ëª\85ë ¹ì\9d\84 ì\82¬ì\9a©í\95\98ì\8b­ì\8b\9cì\98¤.\n"
 
-#: parse.y:6602
+#: parse.y:6394
 msgid "unexpected EOF while looking for matching `)'"
 msgstr "맞는 ')'를 찾던 도중 예기치 않은 파일의 끝"
 
 #: pcomplete.c:1132
 #, c-format
 msgid "completion: function `%s' not found"
-msgstr "completion: 함수 `%s' 를 찾을 수 없음"
+msgstr "completion: `%s' 함수를 찾을 수 없음"
 
 #: pcomplete.c:1722
 #, c-format
@@ -1617,7 +1620,7 @@ msgstr "print_command: 잘못된 커넥터 `%d'"
 #: print_cmd.c:375
 #, c-format
 msgid "xtrace_set: %d: invalid file descriptor"
-msgstr "xtrace_set: %d: 유효하지 않은 파일 디스크립터"
+msgstr "xtrace_set: %d: 부적절한 파일 서술자"
 
 #: print_cmd.c:380
 msgid "xtrace_set: NULL file pointer"
@@ -1628,569 +1631,560 @@ msgstr "xtrace_set: NULL 파일 포인터"
 msgid "xtrace fd (%d) != fileno xtrace fp (%d)"
 msgstr "xtrace fd (%d) != fileno xtrace fp (%d)"
 
-#: print_cmd.c:1540
+#: print_cmd.c:1545
 #, c-format
 msgid "cprintf: `%c': invalid format character"
 msgstr "cprintf: `%c': 잘못된 서식 문자"
 
-#: redir.c:149 redir.c:197
+#: redir.c:150 redir.c:198
 msgid "file descriptor out of range"
-msgstr "파일 디스크립터 범위 벗어남"
+msgstr "파일 서술자 범위 벗어남"
 
-#: redir.c:204
+#: redir.c:205
 #, c-format
 msgid "%s: ambiguous redirect"
 msgstr "%s: 모호한 리다이렉트"
 
-#: redir.c:208
+#: redir.c:209
 #, c-format
 msgid "%s: cannot overwrite existing file"
 msgstr "%s: 이미 있는 파일을 덮어쓸 수 없음"
 
-#: redir.c:213
+#: redir.c:214
 #, c-format
 msgid "%s: restricted: cannot redirect output"
-msgstr "%s: ì \9cí\95\9cë\90¨: ì¶\9cë ¥ì\9d\84 ë¦¬ë\8b¤ì\9d´ë \89í\8a¸할 수 없음"
+msgstr "%s: ì \9cí\95\9cë\90¨: ì¶\9cë ¥ì\9d\84 ë°©í\96¥ ì\9e¬ì§\80ì \95할 수 없음"
 
-#: redir.c:218
+#: redir.c:219
 #, c-format
 msgid "cannot create temp file for here-document: %s"
 msgstr "here-document를 위한 임시 파일을 생성할 수 없음: %s"
 
-#: redir.c:222
+#: redir.c:223
 #, c-format
 msgid "%s: cannot assign fd to variable"
-msgstr "%s: fd를 변수에 할당할 수 없음"
+msgstr "%s: 파일 서술자를 변수에 할당할 수 없음"
 
-#: redir.c:649
+#: redir.c:650
 msgid "/dev/(tcp|udp)/host/port not supported without networking"
-msgstr "/dev/(tcp|udp)/host/port ë\8a\94 ë\84¤í\8a¸ì\9b\8cí\82¹ ì\97\86ì\9d´ ì§\80ì\9b\90ë\90\98ì§\80 ì\95\8aì\9d\8c"
+msgstr "/dev/(tcp|udp)/host/portë\8a\94 ë\84¤í\8a¸ì\9b\8cí\82¹ ì\97\86ì\9d´ ì§\80ì\9b\90í\95\98ì§\80 ì\95\8aì\9d\8c"
 
-#: redir.c:938 redir.c:1053 redir.c:1114 redir.c:1284
+#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303
 msgid "redirection error: cannot duplicate fd"
-msgstr "리ë\8b¤ì\9d´ë \89ì\85\98 ì\98¤ë¥\98: fd를 복제할 수 없음"
+msgstr "ë°©í\96¥ì\9e¬ì§\80ì \95 ì²\98리 ì\98¤ë¥\98: í\8c\8cì\9d¼ ì\84\9cì\88 ì\9e\90를 복제할 수 없음"
 
-#: shell.c:347
+#: shell.c:353
 msgid "could not find /tmp, please create!"
-msgstr "/tmp를 ì°¾ì\9d\84 ì\88\98 ì\97\86ì\9d\8c, ë§\8cë\93¤ì\96´ ì£¼ì\84¸ì\9a\94!"
+msgstr "/tmp를 ì°¾ì\9d\84 ì\88\98 ì\97\86ì\9d\8c, ë§\8cë\93\9cì\8b­ì\8b\9cì\98¤!"
 
-#: shell.c:351
+#: shell.c:357
 msgid "/tmp must be a valid directory name"
-msgstr "/tmpë\8a\94 ë°\98ë\93\9cì\8b\9c ì\9c í\9a¨í\95\9c ë\94\94ë \89í\86 리 이름이어야 함"
+msgstr "/tmpë\8a\94 ë°\98ë\93\9cì\8b\9c ì \81ì \88í\95\9c ë\94\94ë \89í\84°리 이름이어야 함"
 
-#: shell.c:804
+#: shell.c:826
 msgid "pretty-printing mode ignored in interactive shells"
-msgstr "ì\83\81í\98¸ì \81 ì\89\98ì\97\90ì\84\9cë\8a\94 pretty-printing ëª¨ë\93\9cê°\80 ë¬´ì\8b\9cë\90¨"
+msgstr "ë\8c\80í\99\94í\98\95 ì\85¸ì\97\90ì\84\9cë\8a\94 ì \95ë\8f\88 ì¶\9cë ¥ ëª¨ë\93\9c를 ë¬´ì\8b\9cí\95¨"
 
-#: shell.c:948
+#: shell.c:972
 #, c-format
 msgid "%c%c: invalid option"
-msgstr "%c%c: 유효하지 않은 옵션"
+msgstr "%c%c: 부적절한 옵션"
 
-#: shell.c:1319
+#: shell.c:1343
 #, c-format
 msgid "cannot set uid to %d: effective uid %d"
-msgstr "uid를 %dë¡\9c ì\84¤ì \95í\95  ì\88\98 ì\97\86ì\9d\8c: effective uid %d"
+msgstr "uid를 %dë²\88ì\9c¼ë¡\9c ì\84¤ì \95í\95  ì\88\98 ì\97\86ì\9d\8c: í\9a¨ë ¥ì\83\81 ì\82¬ì\9a©ì\9e\90 ID %dë²\88"
 
-#: shell.c:1330
+#: shell.c:1354
 #, c-format
 msgid "cannot set gid to %d: effective gid %d"
-msgstr "gid를 %dë¡\9c ì\84¤ì \95í\95  ì\88\98 ì\97\86ì\9d\8c: effective gid %d"
+msgstr "gid를 %dë²\88ì\9c¼ë¡\9c ì\84¤ì \95í\95  ì\88\98 ì\97\86ì\9d\8c: í\9a¨ë ¥ì\83\81 ê·¸ë£¹ ID %dë²\88"
 
-#: shell.c:1518
+#: shell.c:1544
 msgid "cannot start debugger; debugging mode disabled"
-msgstr "디버거를 시작할 수 없음; 디버깅 모드 비활성화됨"
+msgstr "디버거를 시작할 수 없음! 디버깅 모드 꺼짐"
 
-#: shell.c:1632
+#: shell.c:1658
 #, c-format
 msgid "%s: Is a directory"
-msgstr "%s: ë\8a\94 ë\94\94ë \89í\84°ë¦¬ì\9e\84"
+msgstr "%s: 디렉터리임"
 
-#: shell.c:1881
+#: shell.c:1907
 msgid "I have no name!"
 msgstr "이름 없음!"
 
-#: shell.c:2035
+#: shell.c:2061
 #, c-format
 msgid "GNU bash, version %s-(%s)\n"
-msgstr "GNU bash, 버전 %s-(%s)\n"
+msgstr "GNU 배시, 버전 %s-(%s)\n"
 
-#: shell.c:2036
+#: shell.c:2062
 #, c-format
 msgid ""
 "Usage:\t%s [GNU long option] [option] ...\n"
 "\t%s [GNU long option] [option] script-file ...\n"
 msgstr ""
-"사용법:\t%s [GNU 긴 옵션] [옵션] ...\n"
-"\t%s [GNU 긴 옵션] [옵션] 스크립트-파일 ...\n"
+"사용법:\t%s [<GNU_긴_옵션>] [<옵션>] ...\n"
+"\t%s [<GNU_긴_옵션>] [<옵션>] <스크립트파일> ...\n"
 
-#: shell.c:2038
+#: shell.c:2064
 msgid "GNU long options:\n"
 msgstr "GNU 긴 옵션:\n"
 
-#: shell.c:2042
+#: shell.c:2068
 msgid "Shell options:\n"
-msgstr "ì\89\98 옵션:\n"
+msgstr "ì\85¸ 옵션:\n"
 
-#: shell.c:2043
+#: shell.c:2069
 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n"
-msgstr "\t-ilrsD 또는 -c 명령 또는 -O shopt_option\t\t(invocation 전용)\n"
+msgstr "\t-ilrsD 또는 -c <명령> 또는 -O shopt_option\t\t(invocation 전용)\n"
 
-#: shell.c:2062
+#: shell.c:2088
 #, c-format
 msgid "\t-%s or -o option\n"
 msgstr "\t-%s 또는 -o 옵션\n"
 
-#: shell.c:2068
+#: shell.c:2094
 #, c-format
 msgid "Type `%s -c \"help set\"' for more information about shell options.\n"
-msgstr ""
-"`%s -c \"help set\"' 를 사용하면 쉘 옵션에 관해 더 많은 정보를 확인할 수 있습"
-"니다.\n"
+msgstr "`%s -c \"help set\"' 명령을 사용하면 셸 옵션에 관해 더 많은 정보를 확인할 수 있습니다.\n"
 
-#: shell.c:2069
+#: shell.c:2095
 #, c-format
 msgid "Type `%s -c help' for more information about shell builtin commands.\n"
-msgstr ""
-"`%s -c help' 를 사용하면 쉘 내장 명령어에 관해 더 많은 정보를 확인할 수 있습"
-"니다.\n"
+msgstr "`%s -c help' 명령을 사용하면 셸 내장 명령어에 관해 더 많은 정보를 확인할 수 있습니다.\n"
 
-#: shell.c:2070
+#: shell.c:2096
 #, c-format
 msgid "Use the `bashbug' command to report bugs.\n"
-msgstr "ë²\84그를 ë³´ê³ í\95\98려면 'bashbug' ëª\85ë ¹ì\9d\84 ì\82¬ì\9a©í\95\98ì\84¸ì\9a\94.\n"
+msgstr "ë²\84그를 ë³´ê³ í\95\98려면 'bashbug' ëª\85ë ¹ì\9d\84 ì\82¬ì\9a©í\95\98ì\8b­ì\8b\9cì\98¤.\n"
 
-#: shell.c:2072
+#: shell.c:2098
 #, c-format
 msgid "bash home page: <http://www.gnu.org/software/bash>\n"
 msgstr "bash 홈페이지: <http://www.gnu.org/software/bash>\n"
 
-#: shell.c:2073
+#: shell.c:2099
 #, c-format
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
-msgstr ""
-"GNU 소프트웨어를 사용하는데 일반적인 도움말: <http://www.gnu.org/gethelp/>\n"
+msgstr "GNU 소프트웨어 사용자 일반 도움말: <http://www.gnu.org/gethelp/>\n"
 
-#: sig.c:757
+#: sig.c:765
 #, c-format
 msgid "sigprocmask: %d: invalid operation"
-msgstr "sigprocmask: %d: 유효하지 않은 작업"
+msgstr "sigprocmask: %d: 부적절한 작업"
 
-#: siglist.c:47
+#: siglist.c:48
 msgid "Bogus signal"
-msgstr "Bogus 신호"
+msgstr "가짜 시그널"
 
-#: siglist.c:50
+#: siglist.c:51
 msgid "Hangup"
-msgstr "Hangup"
+msgstr "수행 중단(Hangup)"
 
-#: siglist.c:54
+#: siglist.c:55
 msgid "Interrupt"
 msgstr "인터럽트"
 
-#: siglist.c:58
+#: siglist.c:59
 msgid "Quit"
 msgstr "나가기"
 
-#: siglist.c:62
+#: siglist.c:63
 msgid "Illegal instruction"
-msgstr "Illegal instruction"
+msgstr "부적절한 명령"
 
-#: siglist.c:66
+#: siglist.c:67
 msgid "BPT trace/trap"
-msgstr "BPT trace/trap"
+msgstr "BPT 추적/중단"
 
-#: siglist.c:74
+#: siglist.c:75
 msgid "ABORT instruction"
 msgstr "ABORT 명령"
 
-#: siglist.c:78
+#: siglist.c:79
 msgid "EMT instruction"
 msgstr "EMT 명령"
 
-#: siglist.c:82
+#: siglist.c:83
 msgid "Floating point exception"
 msgstr "부동 소수점 예외"
 
-#: siglist.c:86
+#: siglist.c:87
 msgid "Killed"
-msgstr "Killed"
+msgstr "죽었음"
 
-#: siglist.c:90
+#: siglist.c:91
 msgid "Bus error"
 msgstr "버스 오류"
 
-#: siglist.c:94
+#: siglist.c:95
 msgid "Segmentation fault"
-msgstr "ì\84¸ê·¸ë©\98테이션 오류"
+msgstr "ì\84¸ê·¸ë¨¼테이션 오류"
 
-#: siglist.c:98
+#: siglist.c:99
 msgid "Bad system call"
 msgstr "잘못된 시스템 콜"
 
-#: siglist.c:102
+#: siglist.c:103
 msgid "Broken pipe"
-msgstr "고장난 파이프"
+msgstr "파이프 깨짐"
 
-#: siglist.c:106
+#: siglist.c:107
 msgid "Alarm clock"
-msgstr "ì\95\8cë\9e\8c 시계"
+msgstr "ì\95\8c림 시계"
 
-#: siglist.c:110
+#: siglist.c:111
 msgid "Terminated"
-msgstr "Terminated"
+msgstr "중단됨"
 
-#: siglist.c:114
+#: siglist.c:115
 msgid "Urgent IO condition"
-msgstr "긴급한 IO 상황"
+msgstr "긴급 입출력 상태"
 
-#: siglist.c:118
+#: siglist.c:119
 msgid "Stopped (signal)"
-msgstr "ë©\88춤 (ì\8b í\98¸)"
+msgstr "ë©\88춤 (ì\8b\9cê·¸ë\84\90)"
 
-#: siglist.c:126
+#: siglist.c:127
 msgid "Continue"
 msgstr "계속"
 
-#: siglist.c:134
+#: siglist.c:135
 msgid "Child death or stop"
-msgstr "자식이 죽거나 멈춤"
+msgstr "하위 요소가 죽거나 멈춤"
 
-#: siglist.c:138
+#: siglist.c:139
 msgid "Stopped (tty input)"
 msgstr "멈춤 (tty 입력)"
 
-#: siglist.c:142
+#: siglist.c:143
 msgid "Stopped (tty output)"
 msgstr "멈춤 (tty 출력)"
 
-#: siglist.c:146
+#: siglist.c:147
 msgid "I/O ready"
 msgstr "I/O 준비"
 
-#: siglist.c:150
+#: siglist.c:151
 msgid "CPU limit"
 msgstr "CPU 제한"
 
-#: siglist.c:154
+#: siglist.c:155
 msgid "File limit"
 msgstr "파일 제한"
 
-#: siglist.c:158
+#: siglist.c:159
 msgid "Alarm (virtual)"
-msgstr "ì\95\8cë\9e\8c (가상)"
+msgstr "ì\95\8c림 (가상)"
 
-#: siglist.c:162
+#: siglist.c:163
 msgid "Alarm (profile)"
-msgstr "ì\95\8cë\9e\8c (프로파일)"
+msgstr "ì\95\8c림 (프로파일)"
 
-#: siglist.c:166
+#: siglist.c:167
 msgid "Window changed"
-msgstr "ì\9c\88ë\8f\84ì\9a° ë³\80ê²½ë\90¨"
+msgstr "ì\9c\88ë\8f\84ì\9a° ë°\94ë\80\9c"
 
-#: siglist.c:170
+#: siglist.c:171
 msgid "Record lock"
 msgstr "기록 잠금"
 
-#: siglist.c:174
+#: siglist.c:175
 msgid "User signal 1"
-msgstr "ì\9c ì \80 ì\8b í\98¸ 1"
+msgstr "ì\82¬ì\9a©ì\9e\90 ì\8b\9cê·¸ë\84\90 1"
 
-#: siglist.c:178
+#: siglist.c:179
 msgid "User signal 2"
-msgstr "ì\9c ì \80 ì\8b í\98¸ 2"
+msgstr "ì\82¬ì\9a©ì\9e\90 ì\8b\9cê·¸ë\84\90 2"
 
-#: siglist.c:182
+#: siglist.c:183
 msgid "HFT input data pending"
 msgstr "HFT 입력 데이터 대기중"
 
-#: siglist.c:186
+#: siglist.c:187
 msgid "power failure imminent"
 msgstr "전원 문제 임박"
 
-#: siglist.c:190
+#: siglist.c:191
 msgid "system crash imminent"
 msgstr "시스템 충돌 임박"
 
-#: siglist.c:194
+#: siglist.c:195
 msgid "migrate process to another CPU"
 msgstr "다른 CPU로 프로세스 이전"
 
-#: siglist.c:198
+#: siglist.c:199
 msgid "programming error"
 msgstr "프로그래밍 오류"
 
-#: siglist.c:202
+#: siglist.c:203
 msgid "HFT monitor mode granted"
-msgstr "HFT 모니터 모드 승인ë\90¨"
+msgstr "HFT 모니터 모드 승인í\95¨"
 
-#: siglist.c:206
+#: siglist.c:207
 msgid "HFT monitor mode retracted"
-msgstr "HFT 모니터 모드 철회ë\90¨"
+msgstr "HFT 모니터 모드 철회í\95¨"
 
-#: siglist.c:210
+#: siglist.c:211
 msgid "HFT sound sequence has completed"
-msgstr "HFT ì\82¬ì\9a´ë\93\9c ì \88ì°¨ê°\80 ì\99\84ë£\8cë\90¨"
+msgstr "HFT ì\82¬ì\9a´ë\93\9c ì\8b\9cí\80\80ì\8a¤ê°\80 ë\81\9dë\82¨"
 
-#: siglist.c:214
+#: siglist.c:215
 msgid "Information request"
 msgstr "정보 요청"
 
-#: siglist.c:222 siglist.c:224
+#: siglist.c:223 siglist.c:225
 #, c-format
 msgid "Unknown Signal #%d"
-msgstr "ì\95\8c ì\88\98 ì\97\86ë\8a\94 ì\8b í\98¸ #%d"
+msgstr "ì\95\8c ì\88\98 ì\97\86ë\8a\94 ì\8b\9cê·¸ë\84\90 #%d"
 
-#: subst.c:1476 subst.c:1666
+#: subst.c:1480 subst.c:1670
 #, c-format
 msgid "bad substitution: no closing `%s' in %s"
-msgstr "잘못된 대체: %2$s에 닫는 '%1$s' 없음"
+msgstr "잘못된 대체: %2$s에 닫는 `%1$s' 없음"
 
-#: subst.c:3281
+#: subst.c:3307
 #, c-format
 msgid "%s: cannot assign list to array member"
-msgstr "%s: 리스트를 배열 멤버 할당할 수 없음"
+msgstr "%s: 리스트를 배열 멤버 할당할 수 없음"
 
-#: subst.c:5910 subst.c:5926
+#: subst.c:6048 subst.c:6064
 msgid "cannot make pipe for process substitution"
-msgstr "프로세스 대체를 위해 파이프를 만들 수 없음"
+msgstr "프로세스 대체 파이프를 만들 수 없음"
 
-#: subst.c:5985
+#: subst.c:6124
 msgid "cannot make child for process substitution"
-msgstr "프로세스 대체를 위해 자식을 만들 수 없음"
+msgstr "프로세스 대체용 하위 요소를 만들 수 없음"
 
-#: subst.c:6059
+#: subst.c:6198
 #, c-format
 msgid "cannot open named pipe %s for reading"
-msgstr "읽기를 위해 명명된 파이프 %s를 열 수 없음"
+msgstr "읽기용 명명 파이프 %s을(를) 열 수 없음"
 
-#: subst.c:6061
+#: subst.c:6200
 #, c-format
 msgid "cannot open named pipe %s for writing"
-msgstr "쓰기를 위해 명명된 파이프 %s를 열 수 없음"
+msgstr "쓰기용 명명 파이프 %s을(를) 열 수 없음"
 
-#: subst.c:6084
+#: subst.c:6223
 #, c-format
 msgid "cannot duplicate named pipe %s as fd %d"
-msgstr "명명된 파이프 %s를 fd %d로 복제할 수 없음"
+msgstr "명명된 파이프 %s을(를) 파일 서술자 %d번으로 복제할 수 없음"
 
-#: subst.c:6213
+#: subst.c:6370
 msgid "command substitution: ignored null byte in input"
-msgstr "command substitution: 입력의 null 바이트 무시"
+msgstr "command substitution: 입력의 null 바이트 무시"
 
-#: subst.c:6353
+#: subst.c:6533
 msgid "cannot make pipe for command substitution"
-msgstr "명령어 대체를 위해 파이프를 만들 수 없음"
+msgstr "명령어 대체 파이프를 만들 수 없음"
 
-#: subst.c:6397
+#: subst.c:6580
 msgid "cannot make child for command substitution"
-msgstr "명령어 대체를 위해 자식을 만들 수 없음"
+msgstr "명령어 대체용 하위 요소를 만들 수 없음"
 
-#: subst.c:6423
+#: subst.c:6613
 msgid "command_substitute: cannot duplicate pipe as fd 1"
-msgstr "command_substitute: 파이프를 fd 1로 복제할 수 없음"
+msgstr "command_substitute: 파이프를 파일 서술자 1번으로 복제할 수 없음"
 
-#: subst.c:6883 subst.c:9952
+#: subst.c:7082 subst.c:10252
 #, c-format
 msgid "%s: invalid variable name for name reference"
-msgstr "%s: ì\9d´ë¦\84 ì°¸ì¡°ì\97\90 ë\8c\80í\95´ ì\9c í\9a¨í\95\98ì§\80 ì\95\8aì\9d\80 변수 이름"
+msgstr "%s: ì\9d´ë¦\84 ì°¸ì¡°ì\97\90 ë\80ì \81ì \88í\95\9c 변수 이름"
 
-#: subst.c:6979 subst.c:6997 subst.c:7169
+#: subst.c:7178 subst.c:7196 subst.c:7369
 #, c-format
 msgid "%s: invalid indirect expansion"
-msgstr "%s: 유효하지 않은 간접 확장"
+msgstr "%s: 부적절한 간접 확장"
 
-#: subst.c:7013 subst.c:7177
+#: subst.c:7212 subst.c:7377
 #, c-format
 msgid "%s: invalid variable name"
-msgstr "%s: 유효하지 않은 변수 이름"
+msgstr "%s: 부적절한 변수 이름"
 
-#: subst.c:7256
+#: subst.c:7478
 #, c-format
 msgid "%s: parameter not set"
-msgstr "%s: 파라미터 설정되지 않음"
+msgstr "%s: 매개변수값 설정 안함"
 
-#: subst.c:7258
+#: subst.c:7480
 #, c-format
 msgid "%s: parameter null or not set"
-msgstr "%s: í\8c\8cë\9d¼ë¯¸í\84°ê°\80 null ë\98\90ë\8a\94 ì\84¤ì \95ë\90\98ì§\80 ì\95\8aì\9d\8c"
+msgstr "%s: ë§¤ê°\9cë³\80ì\88\98 ê°\92ì\9d´ null ì\9d´ê±°ë\82\98 ì\84¤ì \95í\95\98ì§\80 ì\95\8aì\9d\8c"
 
-#: subst.c:7503 subst.c:7518
+#: subst.c:7727 subst.c:7742
 #, c-format
 msgid "%s: substring expression < 0"
 msgstr "%s: 부분 문자열 표현식 < 0"
 
-#: subst.c:9281 subst.c:9302
+#: subst.c:9560 subst.c:9587
 #, c-format
 msgid "%s: bad substitution"
 msgstr "%s: 잘못된 대체"
 
-#: subst.c:9390
+#: subst.c:9678
 #, c-format
 msgid "$%s: cannot assign in this way"
 msgstr "$%s: 이 방법으로 할당할 수 없음"
 
-#: subst.c:9814
-msgid ""
-"future versions of the shell will force evaluation as an arithmetic "
-"substitution"
-msgstr "향후 버전의 쉘에서는 산술 대체로 연산이 강제됩니다"
+#: subst.c:10111
+msgid "future versions of the shell will force evaluation as an arithmetic substitution"
+msgstr "향후 버전의 셸에서는 산술 대체로 연산이 강제됩니다"
 
-#: subst.c:10367
+#: subst.c:10795
 #, c-format
 msgid "bad substitution: no closing \"`\" in %s"
 msgstr "잘못된 대체: %s에 닫는 \"`\" 없음"
 
-#: subst.c:11434
+#: subst.c:11874
 #, c-format
 msgid "no match: %s"
 msgstr "일치 없음: %s"
 
 #: test.c:147
 msgid "argument expected"
-msgstr "인자 ì\98\88ì\83\81ë\90¨"
+msgstr "인자 í\95\84ì\9a\94í\95¨"
 
 #: test.c:156
 #, c-format
 msgid "%s: integer expression expected"
-msgstr "%s: 정수 표현식 ì\98\88ì\83\81ë\90¨"
+msgstr "%s: 정수 표현식 í\95\84ì\9a\94í\95¨"
 
 #: test.c:265
 msgid "`)' expected"
-msgstr "`)' ì\98\88ì\83\81ë\90¨"
+msgstr "`)'ê°\80 í\95\84ì\9a\94í\95¨"
 
 #: test.c:267
 #, c-format
 msgid "`)' expected, found %s"
-msgstr "`)' 예상되었으나 %s를 발견"
+msgstr "`)'가 있어야 하지만, %s이(가) 있습니다"
 
-#: test.c:466 test.c:799
+#: test.c:469 test.c:814
 #, c-format
 msgid "%s: binary operator expected"
-msgstr "%s: 이항 연산자 예상됨"
+msgstr "%s: 이항 연산자가 필요합니다"
 
-#: test.c:756 test.c:759
+#: test.c:771 test.c:774
 #, c-format
 msgid "%s: unary operator expected"
-msgstr "%s: 단항 연산자 예상됨"
+msgstr "%s: 단항 연산자가 필요합니다"
 
-#: test.c:881
+#: test.c:896
 msgid "missing `]'"
-msgstr "']' 없음"
+msgstr "']' 빠짐"
 
-#: test.c:899
-#, fuzzy, c-format
+#: test.c:914
+#, c-format
 msgid "syntax error: `%s' unexpected"
-msgstr "문법 오류: ';' ì\98\88ì\83\81ë\90\98ì§\80 ì\95\8aì\9d\8c"
+msgstr "문법 오류: `%s' í\95\84ì\9a\94í\95\98ì§\80 ì\95\8aì\9d\8c"
 
 #: trap.c:220
 msgid "invalid signal number"
-msgstr "유효하지 않은 신호 번호"
+msgstr "부적절한 시그널 번호"
 
-#: trap.c:325
+#: trap.c:323
 #, c-format
 msgid "trap handler: maximum trap handler level exceeded (%d)"
-msgstr "trap handler: 최대 trap handler 레벨 초과 (%d)"
+msgstr "trap handler: 최대 트랩 핸들러 레벨 초과 (%d)"
 
-#: trap.c:414
+#: trap.c:412
 #, c-format
 msgid "run_pending_traps: bad value in trap_list[%d]: %p"
 msgstr "run_pending_traps: trap_list[%d]에 잘못된 값: %p"
 
-#: trap.c:418
+#: trap.c:416
 #, c-format
-msgid ""
-"run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
-msgstr ""
-"run_pending_traps: 신호 핸들러는 SIG_DFL 이고, %d (%s)를 자신에게 보내는 중"
+msgid "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
+msgstr "run_pending_traps: 시그널 핸들러는 SIG_DFL 이고, %d (%s)를 자신에게 다시 보내는 중"
 
-#: trap.c:487
+#: trap.c:509
 #, c-format
 msgid "trap_handler: bad signal %d"
-msgstr "trap_handler: ì\9e\98못ë\90\9c ì\8b í\98¸ %d"
+msgstr "trap_handler: ì\9e\98못ë\90\9c ì\8b\9cê·¸ë\84\90 %dë²\88"
 
-#: variables.c:421
+#: variables.c:424
 #, c-format
 msgid "error importing function definition for `%s'"
-msgstr "'%s'에 대해 함수 정의를 불러오는데 오류 발생"
+msgstr "`%s'의 함수 정의 가져오기 오류"
 
-#: variables.c:833
+#: variables.c:838
 #, c-format
 msgid "shell level (%d) too high, resetting to 1"
-msgstr "ì\89\98 레벨 (%d)이 너무 높습니다, 1로 재설정합니다"
+msgstr "ì\85¸ 레벨 (%d)이 너무 높습니다, 1로 재설정합니다"
 
-#: variables.c:2674
+#: variables.c:2642
 msgid "make_local_variable: no function context at current scope"
 msgstr "make_local_variable: 현재 범위에서 함수 컨텍스트 없음"
 
-#: variables.c:2693
+#: variables.c:2661
 #, c-format
 msgid "%s: variable may not be assigned value"
-msgstr "%s: 변수는 할당된 값이 될 수 없음"
+msgstr "%s: 변수는 할당 값이 아님"
+
+#: variables.c:2818 variables.c:2874
+#, c-format
+msgid "%s: cannot inherit value from incompatible type"
+msgstr "%s: 비호환 형식의 값을 가져올 수 없음"
 
-#: variables.c:3475
+#: variables.c:3459
 #, c-format
 msgid "%s: assigning integer to name reference"
 msgstr "%s: 이름 참조에 정수를 할당하고 있음"
 
-#: variables.c:4404
+#: variables.c:4390
 msgid "all_local_variables: no function context at current scope"
 msgstr "all_local_variables: 현재 범위에서 함수 컨텍스트 없음"
 
-#: variables.c:4771
+#: variables.c:4757
 #, c-format
 msgid "%s has null exportstr"
-msgstr "%s null exportstr을 가짐"
+msgstr "%s이(가) null exportstr을 가짐"
 
-#: variables.c:4776 variables.c:4785
+#: variables.c:4762 variables.c:4771
 #, c-format
 msgid "invalid character %d in exportstr for %s"
-msgstr "%2$s를 위한 exportstr에서 유효하지 않은 문자 %1$d"
+msgstr "%2$s의 exportstr에서 부적절한 문자 %1$d"
 
-#: variables.c:4791
+#: variables.c:4777
 #, c-format
 msgid "no `=' in exportstr for %s"
-msgstr "%s를 위한 exportstr에 '=' 없음"
+msgstr "%s exportstr에 '=' 없음"
 
-#: variables.c:5331
+#: variables.c:5317
 msgid "pop_var_context: head of shell_variables not a function context"
 msgstr "pop_var_context: shell_variables의 시작이 함수의 컨텍스트가 아님"
 
-#: variables.c:5344
+#: variables.c:5330
 msgid "pop_var_context: no global_variables context"
 msgstr "pop_var_context: 컨텍스트에 global_variables 없음"
 
-#: variables.c:5424
+#: variables.c:5410
 msgid "pop_scope: head of shell_variables not a temporary environment scope"
 msgstr "pop_scope: shell_variables의 시작이 임시 환경 범위가 아님"
 
-#: variables.c:6387
+#: variables.c:6400
 #, c-format
 msgid "%s: %s: cannot open as FILE"
-msgstr "%s: %s: 파일로써 열 수 없음"
+msgstr "%s: %s: <파일>로 열 수 없음"
 
-#: variables.c:6392
+#: variables.c:6405
 #, c-format
 msgid "%s: %s: invalid value for trace file descriptor"
-msgstr "%s: %s: 추척 파일 디스크립터에 유효하지 않은 값"
+msgstr "%s: %s: 추척 파일 서술자에 부적절한 값"
 
-#: variables.c:6437
+#: variables.c:6450
 #, c-format
 msgid "%s: %s: compatibility value out of range"
 msgstr "%s: %s: 호환 값이 범위를 벗어남"
 
 #: version.c:46 version2.c:46
-#, fuzzy
-msgid "Copyright (C) 2020 Free Software Foundation, Inc."
-msgstr "Copyright (C) 2018 Free Software Foundation, Inc."
+msgid "Copyright (C) 2022 Free Software Foundation, Inc."
+msgstr "Copyright (C) 2022 Free Software Foundation, Inc."
 
 #: version.c:47 version2.c:47
-msgid ""
-"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
-"html>\n"
-msgstr ""
-"라이선스 GPLv3+: GNU GPL version 3 or later <http://gnu.org/license/gpl."
-"html>\n"
+msgid "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n"
+msgstr "라이선스 GPLv3+: GNU GPL 버전 3 이상 <http://gnu.org/license/gpl.html>\n"
 
 #: version.c:86 version2.c:86
 #, c-format
@@ -2199,67 +2193,63 @@ msgstr "GNU bash, 버전 %s (%s)\n"
 
 #: version.c:91 version2.c:91
 msgid "This is free software; you are free to change and redistribute it."
-msgstr "This is free software; you are free to change and redistribute it."
+msgstr "이 프로그램은 자유 소프트웨어입니다. 자유롭게 바꾸고 재배포할 수 있습니다."
 
 #: version.c:92 version2.c:92
 msgid "There is NO WARRANTY, to the extent permitted by law."
-msgstr "There is NO WARRANTY, to the extent permitted by law."
+msgstr "법률이 허용하는 모든 범위내의 보증은 없습니다."
 
 #: xmalloc.c:93
 #, c-format
 msgid "%s: cannot allocate %lu bytes (%lu bytes allocated)"
-msgstr "%s: %lu bytes를 í\95 ë\8b¹í\95  ì\88\98 ì\97\86ì\9d\8c (%lu bytes í\95 ë\8b¹ë\90¨)"
+msgstr "%s: %lu ë°\94ì\9d´í\8a¸ë¥¼ í\95 ë\8b¹í\95  ì\88\98 ì\97\86ì\9d\8c (%lu ë°\94ì\9d´í\8a¸ í\95 ë\8b¹í\95¨)"
 
 #: xmalloc.c:95
 #, c-format
 msgid "%s: cannot allocate %lu bytes"
-msgstr "%s: %lu bytes를 할당할 수 없음"
+msgstr "%s: %lu 바이트를 할당할 수 없음"
 
 #: xmalloc.c:165
 #, c-format
 msgid "%s: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)"
-msgstr "%s: %s:%d: %lu bytes를 í\95 ë\8b¹í\95  ì\88\98 ì\97\86ì\9d\8c (%lu bytes í\95 ë\8b¹ë\90¨)"
+msgstr "%s: %s:%d: %lu ë°\94ì\9d´í\8a¸ë¥¼ í\95 ë\8b¹í\95  ì\88\98 ì\97\86ì\9d\8c (%lu ë°\94ì\9d´í\8a¸ í\95 ë\8b¹í\95¨)"
 
 #: xmalloc.c:167
 #, c-format
 msgid "%s: %s:%d: cannot allocate %lu bytes"
-msgstr "%s: %s:%d: %lu bytes를 할당할 수 없음"
+msgstr "%s: %s:%d: %lu 바이트를 할당할 수 없음"
 
 #: builtins.c:45
 msgid "alias [-p] [name[=value] ... ]"
-msgstr "alias [-p] [name[=value] ... ]"
+msgstr "alias [-p] [<이름>[=<값>] ... ]"
 
 #: builtins.c:49
 msgid "unalias [-a] name [name ...]"
-msgstr "unalias [-a] name [name ...]"
+msgstr "unalias [-a] <이름> [<이름> ...]"
 
 #: builtins.c:53
-msgid ""
-"bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-"
-"x keyseq:shell-command] [keyseq:readline-function or readline-command]"
-msgstr ""
-"bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-"
-"x keyseq:shell-command] [keyseq:readline-function 또는 readline-command]"
+msgid "bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-x keyseq:shell-command] [keyseq:readline-function or readline-command]"
+msgstr "bind [-lpsvPSVX] [-m <키매핑>] [-f <파일이름>] [-q <이름>] [-u <이름>] [-r <키시퀀스>] [-x <키시퀀스>:<셸명령>] [<키시퀀스>:<행읽기함수> 또는 <행읽기명령>]"
 
 #: builtins.c:56
 msgid "break [n]"
-msgstr "break [n]"
+msgstr "break [<번호>]"
 
 #: builtins.c:58
 msgid "continue [n]"
-msgstr "continue [n]"
+msgstr "continue [<번호>]"
 
 #: builtins.c:60
 msgid "builtin [shell-builtin [arg ...]]"
-msgstr "builtin [shell-builtin [arg ...]]"
+msgstr "builtin [<셸내장명령> [<인자> ...]]"
 
 #: builtins.c:63
 msgid "caller [expr]"
-msgstr "caller [expr]"
+msgstr "caller [<표현식>]"
 
 #: builtins.c:66
 msgid "cd [-L|[-P [-e]] [-@]] [dir]"
-msgstr "cd [-L|[-P [-e]] [-@]] [dir]"
+msgstr "cd [-L|[-P [-e]] [-@]] [<디렉터리>]"
 
 #: builtins.c:68
 msgid "pwd [-LP]"
@@ -2267,83 +2257,75 @@ msgstr "pwd [-LP]"
 
 #: builtins.c:76
 msgid "command [-pVv] command [arg ...]"
-msgstr "command [-pVv] command [arg ...]"
+msgstr "<명령> [-pVv] <명령> [<인자> ...]"
 
 #: builtins.c:78
-#, fuzzy
-msgid "declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]"
-msgstr "declare [-aAfFgilnrtux] [-p] [name[=value] ...]"
+msgid "declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] [name ...]"
+msgstr "declare [-aAfFgilnrtux] [-p] [<이름>[=<값>] ...]"
 
 #: builtins.c:80
-#, fuzzy
-msgid "typeset [-aAfFgiIlnrtux] [-p] name[=value] ..."
-msgstr "typeset [-aAfFgilnrtux] [-p] name[=value] ..."
+msgid "typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] [name ...]"
+msgstr "typeset [-aAfFgilnrtux] [-p] <이름>[=<값>] ..."
 
 #: builtins.c:82
 msgid "local [option] name[=value] ..."
-msgstr "local [옵션] name[=value] ..."
+msgstr "local [<옵션>] <이름>[=<값>] ..."
 
 #: builtins.c:85
 msgid "echo [-neE] [arg ...]"
-msgstr "echo [-neE] [인자 ...]"
+msgstr "echo [-neE] [<인자> ...]"
 
 #: builtins.c:89
 msgid "echo [-n] [arg ...]"
-msgstr "echo [-n] [인자 ...]"
+msgstr "echo [-n] [<인자> ...]"
 
 #: builtins.c:92
 msgid "enable [-a] [-dnps] [-f filename] [name ...]"
-msgstr "enable [-a] [-dnps] [-f 파일명] [이름 ...]"
+msgstr "enable [-a] [-dnps] [-f <파일이름>] [<이름> ...]"
 
 #: builtins.c:94
 msgid "eval [arg ...]"
 msgstr "eval [인자 ...]"
 
 #: builtins.c:96
-#, fuzzy
 msgid "getopts optstring name [arg ...]"
-msgstr "getopts optstring name [arg]"
+msgstr "getopts optstring name [<인자> ...]"
 
 #: builtins.c:98
-#, fuzzy
 msgid "exec [-cl] [-a name] [command [argument ...]] [redirection ...]"
-msgstr "exec [-cl] [-a name] [command [arguments ...]] [redirection ...]"
+msgstr "exec [-cl] [-a <이름>] [<명령> [<인자> ...]] [<방향재지정> ...]"
 
 #: builtins.c:100
 msgid "exit [n]"
-msgstr "exit [n]"
+msgstr "exit [<번호>]"
 
 #: builtins.c:102
 msgid "logout [n]"
-msgstr "logout [n]"
+msgstr "logout [<번호>]"
 
 #: builtins.c:105
 msgid "fc [-e ename] [-lnr] [first] [last] or fc -s [pat=rep] [command]"
-msgstr "fc [-e ename] [-lnr] [first] [last] 또는 fc -s [pat=rep] [command]"
+msgstr "fc [-e <편집기이름>] [-lnr] [<처음>] [<종결>] 또는 fc -s [<패턴>=<대체>] [<명령>]"
 
 #: builtins.c:109
 msgid "fg [job_spec]"
-msgstr "fg [job_spec]"
+msgstr "fg [<JOBSPEC>]"
 
 #: builtins.c:113
 msgid "bg [job_spec ...]"
-msgstr "bg [job_spec ...]"
+msgstr "bg [<JOBSPEC> ...]"
 
 #: builtins.c:116
 msgid "hash [-lr] [-p pathname] [-dt] [name ...]"
-msgstr "hash [-lr] [-p pathname] [-dt] [name ...]"
+msgstr "hash [-lr] [-p <경로이름>] [-dt] [<이름> ...]"
 
 #: builtins.c:119
 msgid "help [-dms] [pattern ...]"
-msgstr "help [-dms] [패턴 ...]"
+msgstr "help [-dms] [<패턴> ...]"
 
 #: builtins.c:123
-msgid ""
-"history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg "
-"[arg...]"
-msgstr ""
-"history [-c] [-d 오프셋] [n] 또는 history -anrw [파일명] 또는 history -ps "
-"arg [인자...]"
+msgid "history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg...]"
+msgstr "history [-c] [-d <오프셋>] [n] 또는 history -anrw [<파일이름>] 또는 history -ps <인자> [<인자>...]"
 
 #: builtins.c:127
 msgid "jobs [-lnprs] [jobspec ...] or jobs -x command [args]"
@@ -2351,47 +2333,39 @@ msgstr "jobs [-lnprs] [jobspec ...] 또는 jobs -x command [args]"
 
 #: builtins.c:131
 msgid "disown [-h] [-ar] [jobspec ... | pid ...]"
-msgstr "disown [-h] [-ar] [jobspec ... | pid ...]"
+msgstr "disown [-h] [-ar] [<JOBSPEC> ... | <PID> ...]"
 
 #: builtins.c:134
-msgid ""
-"kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l "
-"[sigspec]"
-msgstr ""
-"kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... 또는 kill -l "
-"[sigspec]"
+msgid "kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]"
+msgstr "kill [-s <시그널명세> | -n <시그널번호> | -<시그널명세>] <PID> | <JOBSPEC> ... 또는 kill -l [<시그널명세>]"
 
 #: builtins.c:136
 msgid "let arg [arg ...]"
-msgstr "let arg [arg ...]"
+msgstr "let <인자> [<인자> ...]"
 
 #: builtins.c:138
-msgid ""
-"read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p "
-"prompt] [-t timeout] [-u fd] [name ...]"
-msgstr ""
-"read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p "
-"prompt] [-t timeout] [-u fd] [name ...]"
+msgid "read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]"
+msgstr "read [-ers] [-a <배열>] [-d <구분자>] [-i <텍스트>] [-n <문자수>] [-N <문자수>] [-p <프롬프트>] [-t <제한시간>] [-u <파일서술자>] [<이름> ...]"
 
 #: builtins.c:140
 msgid "return [n]"
 msgstr "return [n]"
 
 #: builtins.c:142
-msgid "set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]"
-msgstr "set [-abefhkmnptuvxBCHP] [-o 옵션이름] [--] [arg ...]"
+msgid "set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]"
+msgstr "set [-abefhkmnptuvxBCHP] [-o <옵션-이름>] [--] [<인자> ...]"
 
 #: builtins.c:144
 msgid "unset [-f] [-v] [-n] [name ...]"
-msgstr "unset [-f] [-v] [-n] [name ...]"
+msgstr "unset [-f] [-v] [-n] [<이름> ...]"
 
 #: builtins.c:146
 msgid "export [-fn] [name[=value] ...] or export -p"
-msgstr "export [-fn] [name[=value] ...] 또는 export -p"
+msgstr "export [-fn] [<이름>[=<값>] ...] 또는 export -p"
 
 #: builtins.c:148
 msgid "readonly [-aAf] [name[=value] ...] or readonly -p"
-msgstr "readonly [-aAf] [name[=value] ...] 또는 readonly -p"
+msgstr "readonly [-aAf] [<이름>[=<값>] ...] 또는 readonly -p"
 
 #: builtins.c:150
 msgid "shift [n]"
@@ -2399,11 +2373,11 @@ msgstr "shift [n]"
 
 #: builtins.c:152
 msgid "source filename [arguments]"
-msgstr "source 파일명 [인자들]"
+msgstr "source <파일이름> [<인자>]"
 
 #: builtins.c:154
 msgid ". filename [arguments]"
-msgstr ". 파일명 [인자들]"
+msgstr ". <파일이름> [<인자>]"
 
 #: builtins.c:157
 msgid "suspend [-f]"
@@ -2411,83 +2385,79 @@ msgstr "suspend [-f]"
 
 #: builtins.c:160
 msgid "test [expr]"
-msgstr "test [expr]"
+msgstr "test [<표현식>]"
 
 #: builtins.c:162
 msgid "[ arg... ]"
-msgstr "[ 인자... ]"
+msgstr "[ <인자>... ]"
 
 #: builtins.c:166
 msgid "trap [-lp] [[arg] signal_spec ...]"
-msgstr "trap [-lp] [[arg] signal_spec ...]"
+msgstr "trap [-lp] [[<인자>] <시그널_명세> ...]"
 
 #: builtins.c:168
 msgid "type [-afptP] name [name ...]"
-msgstr "type [-afptP] name [name ...]"
+msgstr "type [-afptP] <이름> [<이름> ...]"
 
 #: builtins.c:171
-msgid "ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]"
-msgstr "ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]"
+msgid "ulimit [-SHabcdefiklmnpqrstuvxPRT] [limit]"
+msgstr "ulimit [-SHabcdefiklmnpqrstuvxPT] [<한계값>]"
 
 #: builtins.c:174
 msgid "umask [-p] [-S] [mode]"
-msgstr "umask [-p] [-S] [모드]"
+msgstr "umask [-p] [-S] [<모드>]"
 
 #: builtins.c:177
-#, fuzzy
 msgid "wait [-fn] [-p var] [id ...]"
-msgstr "wait [-fn] [id ...]"
+msgstr "wait [-fn] [<ID> ...]"
 
 #: builtins.c:181
 msgid "wait [pid ...]"
-msgstr "wait [pid ...]"
+msgstr "wait [<PID> ...]"
 
 #: builtins.c:184
 msgid "for NAME [in WORDS ... ] ; do COMMANDS; done"
-msgstr "for NAME [in WORDS ... ] ; do COMMANDS; done"
+msgstr "for <이름> [in <여러단어> ... ] ; do <명령>; done"
 
 #: builtins.c:186
 msgid "for (( exp1; exp2; exp3 )); do COMMANDS; done"
-msgstr "for (( exp1; exp2; exp3 )); do COMMANDS; done"
+msgstr "for (( <조건식1>; <조건식2>; <조건식3> )); do <명령>; done"
 
 #: builtins.c:188
 msgid "select NAME [in WORDS ... ;] do COMMANDS; done"
-msgstr "select NAME [in WORDS ... ;] do COMMANDS; done"
+msgstr "select <이름> [in <여러단어> ... ;] do <명령>; done"
 
 #: builtins.c:190
 msgid "time [-p] pipeline"
-msgstr "time [-p] pipeline"
+msgstr "time [-p] <파이프라인>"
 
 #: builtins.c:192
 msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac"
-msgstr "case 단어 in [패턴 [| 패턴]...) 명령어 ;;]... esac"
+msgstr "case <단어> in [<패턴> [| <패턴>]...) <명령> ;;]... esac"
 
 #: builtins.c:194
-msgid ""
-"if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else "
-"COMMANDS; ] fi"
-msgstr ""
-"if 명령어; then 명령어; [ elif 명령어; then 명령어; ]... [ else 명령어; ] fi"
+msgid "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi"
+msgstr "if <명령>; then <명령>; [ elif <명령>; then <명령>; ]... [ else <명령>; ] fi"
 
 #: builtins.c:196
-msgid "while COMMANDS; do COMMANDS; done"
-msgstr "while 명령어; do 명령어; done"
+msgid "while COMMANDS; do COMMANDS-2; done"
+msgstr "while <명령>; do <명령-2>; done"
 
 #: builtins.c:198
-msgid "until COMMANDS; do COMMANDS; done"
-msgstr "until 명령어; do 명령어; done"
+msgid "until COMMANDS; do COMMANDS-2; done"
+msgstr "until <명령>; do <명령-2>; done"
 
 #: builtins.c:200
 msgid "coproc [NAME] command [redirections]"
-msgstr "coproc [NAME] command [redirections]"
+msgstr "coproc [<이름>] <명령> [<방향재지정>]"
 
 #: builtins.c:202
 msgid "function name { COMMANDS ; } or name () { COMMANDS ; }"
-msgstr "function name { 명령어 ; } 또는 name () { 명령어 ; }"
+msgstr "function <이름> { <명령> ; } 또는 <이름> () { <명령> ; }"
 
 #: builtins.c:204
 msgid "{ COMMANDS ; }"
-msgstr "{ 명령어 ; }"
+msgstr "{ <명령> ; }"
 
 #: builtins.c:206
 msgid "job_spec [&]"
@@ -2495,75 +2465,55 @@ msgstr "job_spec [&]"
 
 #: builtins.c:208
 msgid "(( expression ))"
-msgstr "(( 표현식 ))"
+msgstr "(( <표현식> ))"
 
 #: builtins.c:210
 msgid "[[ expression ]]"
-msgstr "[[ 표현식 ]]"
+msgstr "[[ <표현식> ]]"
 
 #: builtins.c:212
 msgid "variables - Names and meanings of some shell variables"
-msgstr ""
+msgstr "variables - 이름이자 일부 셸 변수를 의미합니다"
 
 #: builtins.c:215
 msgid "pushd [-n] [+N | -N | dir]"
-msgstr "pushd [-n] [+N | -N | dir]"
+msgstr "pushd [-n] [+<갯수> | -<갯수> | <디렉터리>]"
 
 #: builtins.c:219
 msgid "popd [-n] [+N | -N]"
-msgstr "popd [-n] [+N | -N]"
+msgstr "popd [-n] [+<갯수> | -<갯수>]"
 
 #: builtins.c:223
 msgid "dirs [-clpv] [+N] [-N]"
-msgstr "dirs [-clpv] [+N] [-N]"
+msgstr "dirs [-clpv] [+<갯수>] [-<갯수>]"
 
 #: builtins.c:226
 msgid "shopt [-pqsu] [-o] [optname ...]"
-msgstr "shopt [-pqsu] [-o] [옵션이름...]"
+msgstr "shopt [-pqsu] [-o] [<옵션이름>...]"
 
 #: builtins.c:228
 msgid "printf [-v var] format [arguments]"
-msgstr "printf [-v 변수] format [인자]"
+msgstr "printf [-v <변수>] <출력형식> [<인자>]"
 
 #: builtins.c:231
-#, fuzzy
-msgid ""
-"complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-"
-"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S "
-"suffix] [name ...]"
-msgstr ""
-"complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-"
-"W wordlist]  [-F function] [-C command] [-X filterpat] [-P prefix] [-S "
-"suffix] [name ...]"
+msgid "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [name ...]"
+msgstr "complete [-abcdefgjksuv] [-pr] [-DEI] [-o <옵션>] [-A <동작>] [-G <글롭패턴>] [-W <단어목록>]  [-F <함수>] [-C <명령>] [-X <필터패턴>] [-P <접두어>] [-S <접미어>] [<이름> ...]"
 
 #: builtins.c:235
-#, fuzzy
-msgid ""
-"compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-"
-"F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]"
-msgstr ""
-"compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist]  "
-"[-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]"
+msgid "compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]"
+msgstr "compgen [-abcdefgjksuv] [-o <옵션>] [-A <동작>] [-G <글롭패턴>] [-W <단어목록>]  [-F <함수>] [-C <명령>] [-X <필터패턴>] [-P <접두어>] [-S <접미어>] [<단어>]"
 
 #: builtins.c:239
 msgid "compopt [-o|+o option] [-DEI] [name ...]"
-msgstr "compopt [-o|+o option] [-DEI] [name ...]"
+msgstr "compopt [-o|+o <옵션>] [-DEI] [<이름> ...]"
 
 #: builtins.c:242
-msgid ""
-"mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C "
-"callback] [-c quantum] [array]"
-msgstr ""
-"mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C "
-"callback] [-c quantum] [array]"
+msgid "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]"
+msgstr "mapfile [-d <구분자>] [-n <갯수>] [-O <시작>] [-s <갯수>] [-t] [-u <파일서술자>] [-C <콜백>] [-c <양자>] [<배열>]"
 
 #: builtins.c:244
-msgid ""
-"readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C "
-"callback] [-c quantum] [array]"
-msgstr ""
-"readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C "
-"callback] [-c quantum] [array]"
+msgid "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]"
+msgstr "readarray [-d <구분자>] [-n <갯수>] [-O <시작>] [-s <갯수>] [-t] [-u <파일서술자>] [-C <콜백>] [-c <양자>] [<배열>]"
 
 #: builtins.c:256
 msgid ""
@@ -2580,10 +2530,23 @@ msgid ""
 "      -p\tprint all defined aliases in a reusable format\n"
 "    \n"
 "    Exit Status:\n"
-"    alias returns true unless a NAME is supplied for which no alias has "
-"been\n"
+"    alias returns true unless a NAME is supplied for which no alias has been\n"
 "    defined."
 msgstr ""
+"별칭을 지정하거나 표시합니다.\n"
+"    \n"
+"    인자가 없다면, `alias'는 `alias <이름>=<값>' 형식으로 표준 출력에\n"
+"    별칭 목록을 출력합니다.\n"
+"    \n"
+"    그렇지 않으면 <값>을 부여한 각 <이름>을 지정합니다.\n"
+"    <값>에 공백 문자를 덧붙이면 별칭을 확장할 때 별칭 대체 대상\n"
+"    문자열의 다음 단어를 확인합니다.\n"
+"    \n"
+"    옵션:\n"
+"      -p\t재사용 형식으로 지정한 모든 별칭을 출력합니다\n"
+"    \n"
+"    종료 상태:\n"
+"    별칭으로 지정한 <이름>을 확인하면 참을 반환합니다."
 
 #: builtins.c:278
 msgid ""
@@ -2594,6 +2557,12 @@ msgid ""
 "    \n"
 "    Return success unless a NAME is not an existing alias."
 msgstr ""
+"지정 별칭의 목록에서 각 <이름>을 제거합니다\n"
+"    \n"
+"    옵션:\n"
+"      -a\t모든 별칭 지정 항목을 제거합니다.\n"
+"    \n"
+"    <이름>이 기존 별칭일 경우 성공을 반환합니다."
 
 #: builtins.c:291
 msgid ""
@@ -2607,35 +2576,61 @@ msgid ""
 "    Options:\n"
 "      -m  keymap         Use KEYMAP as the keymap for the duration of this\n"
 "                         command.  Acceptable keymap names are emacs,\n"
-"                         emacs-standard, emacs-meta, emacs-ctlx, vi, vi-"
-"move,\n"
+"                         emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,\n"
 "                         vi-command, and vi-insert.\n"
 "      -l                 List names of functions.\n"
 "      -P                 List function names and bindings.\n"
 "      -p                 List functions and bindings in a form that can be\n"
 "                         reused as input.\n"
-"      -S                 List key sequences that invoke macros and their "
-"values\n"
-"      -s                 List key sequences that invoke macros and their "
-"values\n"
+"      -S                 List key sequences that invoke macros and their values\n"
+"      -s                 List key sequences that invoke macros and their values\n"
 "                         in a form that can be reused as input.\n"
 "      -V                 List variable names and values\n"
 "      -v                 List variable names and values in a form that can\n"
 "                         be reused as input.\n"
 "      -q  function-name  Query about which keys invoke the named function.\n"
-"      -u  function-name  Unbind all keys which are bound to the named "
-"function.\n"
+"      -u  function-name  Unbind all keys which are bound to the named function.\n"
 "      -r  keyseq         Remove the binding for KEYSEQ.\n"
 "      -f  filename       Read key bindings from FILENAME.\n"
 "      -x  keyseq:shell-command\tCause SHELL-COMMAND to be executed when\n"
 "    \t\t\t\tKEYSEQ is entered.\n"
-"      -X                 List key sequences bound with -x and associated "
-"commands\n"
+"      -X                 List key sequences bound with -x and associated commands\n"
 "                         in a form that can be reused as input.\n"
 "    \n"
 "    Exit Status:\n"
 "    bind returns 0 unless an unrecognized option is given or an error occurs."
 msgstr ""
+"readline 키 바인딩과 값을 설정합니다.\n"
+"    \n"
+"    키 시퀀스를 readline 함수 또는 매크로에 바인딩하거나, readline\n"
+"    변수에 설정합니다.  옵션을 지정하지 않은 인자 문법은 ~/.inputrc\n"
+"    에서 찾을 수 있는 문법과 동일합니다만 단일 인자로 전달해야 합니다.\n"
+"    예: bind '\"\\C-x\\C-r\": re-read-init-file'\n"
+"    \n"
+"    옵션:\n"
+"    -m <키매핑>        <키매핑>을 이 명령 실행동안 사용하는 키매핑\n"
+"                         으로 활용합니다.  허용할 수 있는 키매핑 이름은 emacs,\n"
+"                         emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,\n"
+"                         vi-command, vi-insert가 있습니다.\n"
+"      -l                 함수 이름 목록.\n"
+"      -P                 함수 이름 및 바인딩 목록.\n"
+"      -p                 입력에 다시 활용할 수 있는 형식의 함수 이름과 바인딩 목록.\n"
+"      -S                 매크로와 값을 실행하는 키 시퀀스 목록\n"
+"      -s                 입력으로 다시 활용할 수 있는 매크로와 값을 실행하는\n"
+"                         키 시퀀스 목록.\n"
+"      -V                 변수 이름과 값 목록\n"
+"      -v                 입력으로 다시 활용할 수 있는 변수 이름과 값 목록.\n"
+"      -q  <함수이름>     어떤 키가 명명 함수를 실행하는지 요청.\n"
+"      -u  <함수이름>     명명 함수에 바인딩한 모든 키의 바인딩 해제.\n"
+"      -r  <키시퀀스>     <키시퀀스>의 바인딩 제거.\n"
+"      -f  <파일이름>     <파일이름>의 키 바인딩 읽기.\n"
+"      -x  <키시퀀스>:<셸명령>\t<키시퀀스>를 입력하면 <셸명령>을\n"
+"    \t\t\t\t실행하게 합.\n"
+"      -X                 입력으로 다시 활용할 수 있는 -x로 지정한 키 시퀀스\n"
+"                         및 관련 명령 목록\n"
+"    \n"
+"    종료 상태:\n"
+"    알 수 없는 옵션을 지정하지 않았거나 오류가 없으면 0을 반환합니다."
 
 #: builtins.c:330
 msgid ""
@@ -2647,6 +2642,13 @@ msgid ""
 "    Exit Status:\n"
 "    The exit status is 0 unless N is not greater than or equal to 1."
 msgstr ""
+"for, while, until 반복문을 나갑니다.\n"
+"    \n"
+"    FOR, WHILE, UNTIL 반복문을 나갑니다. <횟수>를 지정하면,\n"
+"    반복 <횟수>에 도달했을 때 중단합니다.\n"
+"    \n"
+"    종료 상태:\n"
+"    <횟수>가 1보다 크거나 같으면 0입니다."
 
 #: builtins.c:342
 msgid ""
@@ -2658,6 +2660,13 @@ msgid ""
 "    Exit Status:\n"
 "    The exit status is 0 unless N is not greater than or equal to 1."
 msgstr ""
+"for, while, until 반복문을 다시 실행합니다.\n"
+"    \n"
+"    FOR, WHILE, UNTIL 반복문의 다음 반복 실행을 진행합니다.\n"
+"    <횟수>를 지정하면 <횟수> 만큼 다시 실행합니다.\n"
+"    \n"
+"    종료 상태:\n"
+"    <횟수>가 1보다 크거나 같으면 0입니다."
 
 #: builtins.c:354
 msgid ""
@@ -2665,13 +2674,21 @@ msgid ""
 "    \n"
 "    Execute SHELL-BUILTIN with arguments ARGs without performing command\n"
 "    lookup.  This is useful when you wish to reimplement a shell builtin\n"
-"    as a shell function, but need to execute the builtin within the "
-"function.\n"
+"    as a shell function, but need to execute the builtin within the function.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the exit status of SHELL-BUILTIN, or false if SHELL-BUILTIN is\n"
 "    not a shell builtin."
 msgstr ""
+"셸 내장 명령을 실행합니다.\n"
+"    \n"
+"    <셸내장명령>을 명령 검색 동작 없이 <인자>를 지정하여 실행합니다.\n"
+"    셸 내장 명령을 셸 함수로 재구현할 때 쓸만합니다만, 내장 명령은\n"
+"    함수 안에서 실행해야합니다.\n"
+"    \n"
+"    종료 상태:\n"
+"    <셸내장명령>의 종료 상태를 반환하거나 <셸내장명령>이 내장\n"
+"    명령이 아닐 경우 거짓을 반환합니다."
 
 #: builtins.c:369
 msgid ""
@@ -2688,27 +2705,29 @@ msgid ""
 "    Returns 0 unless the shell is not executing a shell function or EXPR\n"
 "    is invalid."
 msgstr ""
+"현재 하위루틴 호출 컨텍스트를 반환합니다.\n"
+"    \n"
+"    <표현식>이 없다면 \"$line $filename\"을 반환하며, <표현식>을 지정했다면\n"
+"    \"$line $subroutine $filename\"을 반환합니다. 추가 정보는 스택 트레이스\n"
+"    에 활용할 수 있습니다.\n"
+"    \n"
+"    <표현식>의 값은 현재 호출 프레임으로부터 얼마나 되돌아가야 하는지를\n"
+"    나타냅니다. 최상단 프레임은 프레임 0번입니다."
 
 #: builtins.c:387
 msgid ""
 "Change the shell working directory.\n"
 "    \n"
-"    Change the current directory to DIR.  The default DIR is the value of "
-"the\n"
+"    Change the current directory to DIR.  The default DIR is the value of the\n"
 "    HOME shell variable.\n"
 "    \n"
-"    The variable CDPATH defines the search path for the directory "
-"containing\n"
-"    DIR.  Alternative directory names in CDPATH are separated by a colon "
-"(:).\n"
-"    A null directory name is the same as the current directory.  If DIR "
-"begins\n"
+"    The variable CDPATH defines the search path for the directory containing\n"
+"    DIR.  Alternative directory names in CDPATH are separated by a colon (:).\n"
+"    A null directory name is the same as the current directory.  If DIR begins\n"
 "    with a slash (/), then CDPATH is not used.\n"
 "    \n"
-"    If the directory is not found, and the shell option `cdable_vars' is "
-"set,\n"
-"    the word is assumed to be  a variable name.  If that variable has a "
-"value,\n"
+"    If the directory is not found, and the shell option `cdable_vars' is set,\n"
+"    the word is assumed to be  a variable name.  If that variable has a value,\n"
 "    its value is used for DIR.\n"
 "    \n"
 "    Options:\n"
@@ -2724,15 +2743,45 @@ msgid ""
 "    \t\tattributes as a directory containing the file attributes\n"
 "    \n"
 "    The default is to follow symbolic links, as if `-L' were specified.\n"
-"    `..' is processed by removing the immediately previous pathname "
-"component\n"
+"    `..' is processed by removing the immediately previous pathname component\n"
 "    back to a slash or the beginning of DIR.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns 0 if the directory is changed, and if $PWD is set successfully "
-"when\n"
+"    Returns 0 if the directory is changed, and if $PWD is set successfully when\n"
 "    -P is used; non-zero otherwise."
 msgstr ""
+"셸 작업 디렉터리를 바꿉니다.\n"
+"    \n"
+"    현재 디렉터리를 <디렉터리>로 바꿉니다. 기본 <디렉터리>는 HOME 셸 변수\n"
+"    값입니다.\n"
+"    \n"
+"    CDPATH 변수에는 <디렉터리> 값이 들어간 디렉터리 검색 경로를 지정합니다.\n"
+"    CDPATH의 대안 디렉터리 이름은 콜론으로 구분합니다. 널 디렉터리 이름은 \n"
+"    현재 디렉터리와 같습니다.  <디렉터리> 값이 슬래시 문자(/)로 시작하면, \n"
+"    CDPATH 변수를 사용하지 않습니다.\n"
+"    \n"
+"    디렉터리가 없고, `cdable_vars' 셸 옵션을 설정했다면, 단어를 변수 이름으로\n"
+"    가정합니다. 변수에 값이 들어가있다면, 해당 값을 <디렉터리> 값으로 활용\n"
+"    합니다.\n"
+"    \n"
+"    옵션:\n"
+"      -L\t강제로 심볼릭 링크를 따라갑니다. <디렉터리>의 심볼릭 링크를\n"
+"    \t\t`..' 인스턴스를 처리한 다음에 해석합니다.\n"
+"      -P\t심볼릭 링크를 따르지 않고 실제 디렉터리 구조를 활용합니다.\n"
+"    \t\t`..' 인스턴스를 처리하기 전에 <디렉터리>의 심볼릭 링크를\n"
+"    \t\t해석합니다.\n"
+"      -e\t-P 옵션을 지정하고, 현재 디렉터리를 제대로 식별하지 못하면\n"
+"    \t\t0이 아닌 상태 값으로 나갑니다\n"
+"      -@\t이 옵션을 지원하는 시스템에서는 파일 속성이 들어간\n"
+"    \t\t디렉터리처럼 확장 속성을 가진 파일을 나타냅니다\n"
+"    \n"
+"    `-L' 옵션을 지정했을 때와 같이 심볼릭 링크를 따라가는게 기본 동작입니다.\n"
+"    `..'은 이전 경로 이름 요소를 즉시 제거하여 슬래시 경로로 돌아가거나\n"
+"    <디렉터리>의 시작점으로 돌아갑니댜.\n"
+"    \n"
+"    종료 상태:\n"
+"    디렉터리가 바뀌었고 -P 옵션을 사용했을 때 $PWD 값을 제대로 설정하면\n"
+"    0 값을 반환하며, 그렇지 않으면 0이 아닌 값을 반환합니다."
 
 #: builtins.c:425
 msgid ""
@@ -2749,6 +2798,16 @@ msgid ""
 "    Returns 0 unless an invalid option is given or the current directory\n"
 "    cannot be read."
 msgstr ""
+"현재 작업 디렉터리의 이름을 출력합니다.\n"
+"    \n"
+"    옵션:\n"
+"      -L\t$PWD값의 이름이 현재 작업 디렉터리일 경우 값을 출력\n"
+"      -P\t심볼릭 링크가 아닌 물리 디렉터리를 출력\n"
+"    \n"
+"    기본적으로 `pwd'에는 `-L' 옵션이 붙어있습니다.\n"
+"    \n"
+"    종료 상태:\n"
+"    적절한 옵션이 붙었거나 현재 디렉터리를 읽을 수 있다면 0을 반환합니다."
 
 #: builtins.c:442
 msgid ""
@@ -2761,7 +2820,7 @@ msgid ""
 msgstr ""
 "Null 명령.\n"
 "    \n"
-"    효과 없음; 아무것도 하지 않습니다.\n"
+"    효과 없음. 아무것도 하지 않습니다.\n"
 "    \n"
 "    종료 상태:\n"
 "    항상 성공합니다."
@@ -2773,7 +2832,7 @@ msgid ""
 "    Exit Status:\n"
 "    Always succeeds."
 msgstr ""
-"성공적인 결과를 반환합니다.\n"
+"성공 결과를 반환합니다.\n"
 "    \n"
 "    종료 상태:\n"
 "    항상 성공합니다."
@@ -2785,19 +2844,17 @@ msgid ""
 "    Exit Status:\n"
 "    Always fails."
 msgstr ""
-"실패 결과를 반환합니다.\n"
+"실패 결과를 반환합니다.\n"
 "    \n"
 "    종료 상태:\n"
 "    항상 실패합니다."
 
 #: builtins.c:471
-#, fuzzy
 msgid ""
 "Execute a simple command or display information about commands.\n"
 "    \n"
 "    Runs COMMAND with ARGS suppressing  shell function lookup, or display\n"
-"    information about the specified COMMANDs.  Can be used to invoke "
-"commands\n"
+"    information about the specified COMMANDs.  Can be used to invoke commands\n"
 "    on disk when a function with the same name exists.\n"
 "    \n"
 "    Options:\n"
@@ -2809,21 +2866,20 @@ msgid ""
 "    Exit Status:\n"
 "    Returns exit status of COMMAND, or failure if COMMAND is not found."
 msgstr ""
-"간단한 명령을 실행하거나 명령에 관한 정보를 표시합니다..\n"
+"간단한 명령을 실행하거나 명령 정보를 표시합니다.\n"
 "    \n"
-"    Runs COMMAND with ARGS suppressing  shell function lookup, or display\n"
-"    information about the specified COMMANDs.  Can be used to invoke "
-"commands\n"
-"    on disk when a function with the same name exists.\n"
+"    셸 함수 탐색을 억제하는 <인자>로 <명령>을 실행하거나, 지정 <명령>의 정보를\n"
+"    나타냅니다.  동일한 이름을 가진 함수가 있을 때 디스크의 명령을 실행할 경우\n"
+"    활용할 수 있습니다.\n"
 "    \n"
 "    옵션:\n"
-"      -p    표준 유틸리티를 전부 찾을 수 있다고 보장된 PATH의\n"
-"            기본 값을 사용합니다.\n"
-"      -v    `type' ë¹\8cí\8a¸ì\9d¸ê³¼ ì\9c ì\82¬í\95\9c ëª\85ë ¹의 설명을 보여줍니다\n"
-"      -V    각 명령에 관해 더 상세한 정보를 보여줍니다\n"
+"      -p    표준 유틸리티를 전부 찾을 수 있다고 보장하는\n"
+"            PATH 기본값을 사용합니다.\n"
+"      -v    `type' ë\82´ì\9e¥ ëª\85령과 ë¹\84ì\8a·í\95\98ê²\8c <ëª\85ë ¹>의 설명을 보여줍니다\n"
+"      -V    각 <명령>의 더 자세한 정보를 보여줍니다\n"
 "    \n"
 "    종료 상태:\n"
-"    명령의 실행 결과를 반환하거나 명령이 없을 경우 오류를 반환합니다."
+"    <명령>의 실행 결과를 반환하거나 <명령>이 없을 경우 오류를 반환합니다."
 
 #: builtins.c:490
 msgid ""
@@ -2858,14 +2914,50 @@ msgid ""
 "    Variables with the integer attribute have arithmetic evaluation (see\n"
 "    the `let' command) performed when the variable is assigned a value.\n"
 "    \n"
-"    When used in a function, `declare' makes NAMEs local, as with the "
-"`local'\n"
+"    When used in a function, `declare' makes NAMEs local, as with the `local'\n"
 "    command.  The `-g' option suppresses this behavior.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns success unless an invalid option is supplied or a variable\n"
 "    assignment error occurs."
 msgstr ""
+"변수 값과 속성을 설정합니다.\n"
+"    \n"
+"    변수를 선언하고 속성을 부여합니다. <이름>을 정하지 않으면,\n"
+"    속성과 모든 변수 값을 나타냅니다.\n"
+"    \n"
+"    옵션:\n"
+"      -f\t함수 이름과 정의로 동작과 표시를 제한합니다\n"
+"      -F\t함수 이름만 표시를 제한합니다 (디버깅할 때는 행 번호와\n"
+"    \t\t소스 파일 포함)\n"
+"      -g\t셸 함수에서 사용할 때 전역 변수를 만듭니다. 아니면 무시\n"
+"      -I\t지역 변수를 만들 때, 이전 범위의 같은 이름을 가진 속성과\n"
+"    \t\t변수값을 이어받습니다\n"
+"      -p\t속성과 각 <이름>의 값을 표시합니다\n"
+"    \n"
+"    속성을 설정하는 옵션:\n"
+"      -a\t<이름>을 색인 배열로 만듬 (지원할 경우)\n"
+"      -A\t<이름>을 연관 배열로 만듬 (지원할 경우)\n"
+"      -i\t<이름>을 `정수' 속성을 가지게 함\n"
+"      -l\t각 <이름>의 할당 값을 소문자로 변환\n"
+"      -n\t<이름> 값으로 지정한 이름을 참조하게 함\n"
+"      -r\t<이름>을 읽기 전용으로 설정\n"
+"      -t\t<이름>에 `trace' 속성을 가지게 함\n"
+"      -u\t각 <이름>의 할당 값을 대문자로 변환\n"
+"      -x\t<이름>을 내보냄\n"
+"    \n"
+"    주어진 속성을 사용하려면 `+'를 끄려면 `-'를 사용합니다.\n"
+"    \n"
+"    정수 속성 변수는 변수에 값을 할당하면 산술 연산을 수행\n"
+"    합니다 (`let' 명령 참고).\n"
+"    \n"
+"    함수에서 사용할 때, `declare' 명령은 `local' 명령처럼\n"
+"    <이름>을 로컬 변수로 만듭니다.  `-g' 옵션은 이 동작을\n"
+"    억제합니다.\n"
+"    \n"
+"    종료 상태:\n"
+"    적절한 옵션을 설정했거나 변수 할당 오류가 없다면\n"
+"    성공을 반환합니다."
 
 #: builtins.c:532
 msgid ""
@@ -2891,13 +2983,23 @@ msgid ""
 "    Returns success unless an invalid option is supplied, a variable\n"
 "    assignment error occurs, or the shell is not executing a function."
 msgstr ""
+"지역 변수를 지정합니다.\n"
+"    \n"
+"    <이름> 지역 변수를 만들고 <값>을 부여합니다.  <옵션>은 `declare'\n"
+"    로 받아들일 수 있는 어떤 옵션도 가능합니다.\n"
+"    \n"
+"    지역 변수는 함수 내에서만 활용할 수 있습니다. 하위 요소에서 지정했다면,\n"
+"    역시 하위 함수에서만 볼 수 있습니다.\n"
+"    \n"
+"    종료 상태:\n"
+"    적절한 옵션을 지정했거나, 변수 할당에 오류가 없거나,\n"
+"    셸에서 함수를 실행하면 성공을 반환합니다."
 
 #: builtins.c:557
 msgid ""
 "Write arguments to the standard output.\n"
 "    \n"
-"    Display the ARGs, separated by a single space character and followed by "
-"a\n"
+"    Display the ARGs, separated by a single space character and followed by a\n"
 "    newline, on the standard output.\n"
 "    \n"
 "    Options:\n"
@@ -2921,16 +3023,43 @@ msgid ""
 "    \t\t0 to 3 octal digits\n"
 "      \\xHH\tthe eight-bit character whose value is HH (hexadecimal).  HH\n"
 "    \t\tcan be one or two hex digits\n"
-"      \\uHHHH\tthe Unicode character whose value is the hexadecimal value "
-"HHHH.\n"
+"      \\uHHHH\tthe Unicode character whose value is the hexadecimal value HHHH.\n"
 "    \t\tHHHH can be one to four hex digits.\n"
-"      \\UHHHHHHHH the Unicode character whose value is the hexadecimal "
-"value\n"
+"      \\UHHHHHHHH the Unicode character whose value is the hexadecimal value\n"
 "    \t\tHHHHHHHH. HHHHHHHH can be one to eight hex digits.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns success unless a write error occurs."
 msgstr ""
+"표준 출력에 인자를 기록합니다.\n"
+"    \n"
+"    단일 공백문자로 구분하며 개행 문자가 따라오는 <인자>를\n"
+"    표준 출력에 나타냅니다.\n"
+"    \n"
+"    옵션:\n"
+"      -n\t개행 문자 추가 안함\n"
+"      -e\t추가 백슬래시 탈출 문자 처리 활성\n"
+"      -E\t백슬래시 탈출 문자 처리를 명백하게 무시\n"
+"    \n"
+"    `echo' 명령은 다음 백슬래시 탈출 문자를 처리합니다:\n"
+"      \a\t경고 (알림음)\n"
+"      \\b\t백스페이스\n"
+"      \\c\t이후 출력 무시\n"
+"      \\e\t탈출 문자\n"
+"      \\E\t탈출 문자\n"
+"      \\f\t폼 피드\n"
+"      \\n\t개행 문자\n"
+"      \\r\t캐리지 리턴\n"
+"      \\t\t수평 탭\n"
+"      \\v\t수직탭\n"
+"      \\\\\t백슬래시\n"
+"      \\0nnn\t8진수 ASCII 코드 문자.  NNN은 최대 3자리 8진수\n"
+"      \\xHH\t16진수 8비트 문자.  HH는 2자리 16진수\n"
+"      \\uHHHH\t16진수 유니코드 문자. HHHH는 4자리 16진수\n"
+"      \\UHHHHHHHH 16진수 유니코드 문자. HHHHHHHH는 8자리 16진수\n"
+"    \n"
+"    종료 상태:\n"
+"    기록 오류가 없으면 성공을 반환합니다."
 
 #: builtins.c:597
 msgid ""
@@ -2944,6 +3073,15 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless a write error occurs."
 msgstr ""
+"표준 출력에 인자를 기록합니다.\n"
+"    \n"
+"    <인자> 값과 줄바꿈을 표준 출력에 나타냅니다.\n"
+"    \n"
+"    옵션:\n"
+"      -n\t개행 문자 추가 안함\n"
+"    \n"
+"    종료 상태:\n"
+"    기록 오류가 없다면 성공을 반환합니다."
 
 #: builtins.c:612
 msgid ""
@@ -2971,18 +3109,47 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless NAME is not a shell builtin or an error occurs."
 msgstr ""
+"셸 내장 명령을 사용 혹은 미사용처리 합니다.\n"
+"    \n"
+"    내장 셸 명령을 사용/미사용 처리합니다. 미사용 처리하면 전체 경로 이름을\n"
+"    지정하지 않고도 셸 내장명령처럼 동일한 이름을 가진 디스크 명령을 실행할\n"
+"    수 있습니다\n"
+"    \n"
+"    옵션:\n"
+"      -a\t내장 명령의 활성 여부를 나타내는 목록을 출력합니다\n"
+"      -n\t각 <이름>을 미사용 처리하거나 미사용 내장 명령 목록을 출력합니다\n"
+"      -p\t재활용 형식으로 내장 명령 목록을 출력합니다\n"
+"      -s\tPOSIX `특수' 내장 명령 이름만 출력합니다\n"
+"    \n"
+"    동적 불러오기를 제어하는 옵션은 다음과 같습니다:\n"
+"      -f\t<파일이름> 공유 객체의 내장 <이름>을 불러옵니다\n"
+"      -d\t-f로 불러온 내장 명령을 제거합니다\n"
+"    \n"
+"    옵션을 지정하지 않으면, 각 <이름>을 사용합니다.\n"
+"    \n"
+"    셸 내장 버전 대신 $PATH에서 찾은 `test'를 활용하려면,\n"
+"    `enable -n test'를 입력하십시오.\n"
+"    \n"
+"    종료 상태:\n"
+"    <이름>이 셸 내장 명령이고 오류가 없으면 성공을 반환합니다."
 
 #: builtins.c:640
 msgid ""
 "Execute arguments as a shell command.\n"
 "    \n"
-"    Combine ARGs into a single string, use the result as input to the "
-"shell,\n"
+"    Combine ARGs into a single string, use the result as input to the shell,\n"
 "    and execute the resulting commands.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns exit status of command or success if command is null."
 msgstr ""
+"인자를 셸 명령으로 실행합니다.\n"
+"    \n"
+"    <인자>를 단일 문자열에 결합하여 셸 입력 결과로 할용한 다음,\n"
+"    결과를 내는 명령으로 실행합니다.\n"
+"    \n"
+"    종료 상태:\n"
+"    명령 값이 있다면 종료 상태를, null 이라면 성공을 반환합니다."
 
 #: builtins.c:652
 msgid ""
@@ -3024,14 +3191,48 @@ msgid ""
 "    Returns success if an option is found; fails if the end of options is\n"
 "    encountered or an error occurs."
 msgstr ""
+"옵션 인자를 해석합니다.\n"
+"   \n"
+"    getopts는 위치 매개변수를 옵션으로 해석하는 셸 프로시저에서\n"
+"    활용합니다.\n"
+"    \n"
+"    <옵션문자열>에는 식별할 옵션 문자가 들어갑니다. 문자에 콜론이\n"
+"    뒤따라 붙을 경우, 옵션에 공백 문자로 구분한 인자가 뒤따라오는\n"
+"    것으로 간주합니다.\n"
+"    \n"
+"    실행할 때마다, getopts에서 $name 셸 변수의 다음 옵션을 확인하여\n"
+"    해당 옵션이 없을 경우  이름을 초기화하고 OPTIND 셸 변수에 다음\n"
+"    인자의 색인을 처리합니다.  OPTIND는 셸 또는 셸 스크립트를 실행\n"
+"    할 때마다 1로 초기화합니다.  옵션에 인자가 필요하면, getopts에서\n"
+"    해당 인자를 OPTARG 셸 변수에 넣습니다.\n"
+"    \n"
+"    getopts는 두가지 방법으로 오류를 나타냅니다.  OPTSTRING의 첫번째\n"
+"    문자가 콜론이면, getopts에서는 오류 보고시 조용한 상태로 바뀝니다.\n"
+"    이 때, 어떤 오류 메시지도 나타나지 않습니다.  그런데 부적절한 옵션이\n"
+"    나타나면, getopts에서 OPTARG의 잘못된 옵션 문자를 찾아 가리킵니다.\n"
+"    필요한 인자가 없다면, getopts는 콜론을 <이름>에 대입하고, OPTARG \n"
+"    변수에는 찾은 옵션 문자를 할당합니다. getopts가 미출력 상태가 아니고,\n"
+"    부적절한 옵션을 확인했다면, getopts는 '?' 값을 <이름>에 대입하고, \n"
+"    OPTARG 설정을 해제합니다. 필요한 인자가 없다면 '?' 값이 <이름>에\n"
+"    들어가고, OPTARG 변수 설정을 해제하며, 진단 메시지를 출력합니다.\n"
+"    \n"
+"    OPTERR 셸 변수값이 0이면, getopts에서는 오류 메시지 출력을 하지\n"
+"    않습니다. OPTSTRING 첫번째 문자가 콜론이 아니더라도, 기본적으로\n"
+"    OPTERR 셸 변수값에는 1이 들어가 있습니다.\n"
+"    \n"
+"    getopts는 보통 위치 매개변수를 해석하지만, <인자> 값처럼 인자를\n"
+"    지정하면, 해당 값을 먼저 해석합니다.\n"
+"    \n"
+"    종료 상태:\n"
+"    옵션을 찾으면 성공을 반환합니다.옵션의 끝에 도달했거나, 오류가\n"
+"     나타나면 실패를 반환합니다."
 
 #: builtins.c:694
 msgid ""
 "Replace the shell with the given command.\n"
 "    \n"
 "    Execute COMMAND, replacing this shell with the specified program.\n"
-"    ARGUMENTS become the arguments to COMMAND.  If COMMAND is not "
-"specified,\n"
+"    ARGUMENTS become the arguments to COMMAND.  If COMMAND is not specified,\n"
 "    any redirections take effect in the current shell.\n"
 "    \n"
 "    Options:\n"
@@ -3039,14 +3240,28 @@ msgid ""
 "      -c\texecute COMMAND with an empty environment\n"
 "      -l\tplace a dash in the zeroth argument to COMMAND\n"
 "    \n"
-"    If the command cannot be executed, a non-interactive shell exits, "
-"unless\n"
+"    If the command cannot be executed, a non-interactive shell exits, unless\n"
 "    the shell option `execfail' is set.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success unless COMMAND is not found or a redirection error "
-"occurs."
+"    Returns success unless COMMAND is not found or a redirection error occurs."
 msgstr ""
+"셸을 주어진 명령으로 대체합니다.\n"
+"    \n"
+"    이 셸을 지정 프로그램으로 대체하는 <명령>을 실행합니다.\n"
+"     <인자>는 <명령>을 따라갑니다. <명령>을 지정하지 않으면,\n"
+"    현재 셸의 어떤 방향재지정 명령이든 결과가 나타납니다.\n"
+"    \n"
+"    옵션:\n"
+"      -a <이름>\t<이름>을 <명령>의 0번째 인자로 전달합니다\n"
+"      -c\t빈 환경에서 <명령>을 실행합니다\n"
+"      -l\t<명령>의 0번째 인자로 대시 문자를 둡니다\n"
+"    \n"
+"    명령을 실행할 수 없다면, `execfail' 셸 옵션을 설정하지 않았을 경우,\n"
+"    비대화식 셸을 나갑니다.\n"
+"    \n"
+"    종료 상태:\n"
+"    <명령>이 있거나 방향재지정 실행시 오류가 없다면 성공을 반환합니다."
 
 #: builtins.c:715
 msgid ""
@@ -3055,33 +3270,34 @@ msgid ""
 "    Exits the shell with a status of N.  If N is omitted, the exit status\n"
 "    is that of the last command executed."
 msgstr ""
+"셸을 나갑니다.\n"
+"    \n"
+"    <번호> 값 상태로 셸을 나갑니다.  <번호>를 지정하지 않으면,\n"
+"    종료 상태는 최종 명령 실행 상태와 동일합니다."
 
 #: builtins.c:724
 msgid ""
 "Exit a login shell.\n"
 "    \n"
-"    Exits a login shell with exit status N.  Returns an error if not "
-"executed\n"
+"    Exits a login shell with exit status N.  Returns an error if not executed\n"
 "    in a login shell."
 msgstr ""
-"ë¡\9cê·¸ì\9d¸ ì\89\98을 나갑니다.\n"
+"ë¡\9cê·¸ì\9d¸ ì\85¸을 나갑니다.\n"
 "    \n"
-"    ì¢\85ë£\8c ì\83\81í\83\9c Nì\9c¼ë¡\9c ë¡\9cê·¸ì\9d¸ ì\89\98ì\9d\84 ë\82\98ê°\91ë\8b\88ë\8b¤.  ë¡\9cê·¸ì\9d¸ ì\89\98에서 실행되지 않는 경우\n"
+"    ì¢\85ë£\8c ì\83\81í\83\9c Nì\9c¼ë¡\9c ë¡\9cê·¸ì\9d¸ ì\85¸ì\9d\84 ë\82\98ê°\91ë\8b\88ë\8b¤.  ë¡\9cê·¸ì\9d¸ ì\85¸에서 실행되지 않는 경우\n"
 "    에러가 발생합니다."
 
 #: builtins.c:734
 msgid ""
 "Display or execute commands from the history list.\n"
 "    \n"
-"    fc is used to list or edit and re-execute commands from the history "
-"list.\n"
+"    fc is used to list or edit and re-execute commands from the history list.\n"
 "    FIRST and LAST can be numbers specifying the range, or FIRST can be a\n"
 "    string, which means the most recent command beginning with that\n"
 "    string.\n"
 "    \n"
 "    Options:\n"
-"      -e ENAME\tselect which editor to use.  Default is FCEDIT, then "
-"EDITOR,\n"
+"      -e ENAME\tselect which editor to use.  Default is FCEDIT, then EDITOR,\n"
 "    \t\tthen vi\n"
 "      -l \tlist lines instead of editing\n"
 "      -n\tomit line numbers when listing\n"
@@ -3095,9 +3311,30 @@ msgid ""
 "    the last command.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success or status of executed command; non-zero if an error "
-"occurs."
+"    Returns success or status of executed command; non-zero if an error occurs."
 msgstr ""
+"기록 목록의 명령을 표시하거나 실행합니다.\n"
+"    \n"
+"    fc는 기록 목록의 명령을 보여주거나 편집하고 다시 실행할 때 사용합니다.\n"
+"    <처음>과 <종결>은 범위 지정 숫자이며, <처음>은 문자열일 수도 있습니다.\n"
+"    이는, 최근 명령이 <처음>에 지정한 문자열로 시작함을 의미합니다.\n"
+"    \n"
+"    옵션:\n"
+"      -e <편집기이름>\t사용할 편집기를 선택합니다.  기본은 FCEDIT, EDITOR, \n"
+"    \t\t그 다음은 vi입니다\n"
+"      -l \t편집하지 않고 목록 행을 보여줍니다\n"
+"      -n\t목록을 나타낼 때 번호를 생략합니다\n"
+"      -r\t행 순서를 뒤집습니다 (최신 항목을 먼저)\n"
+"    \n"
+"    `fc -s [<패턴>=<대체> ...] [<명령>]' 형식에서, <명령> 은\n"
+"    <이전>=<최신> 대체 동작을 수행한 다음 다시 실행합니다.\n"
+"    \n"
+"    r='fc -s'(으)로 쓸만한 별칭을 만들어 쓸 수 있는데, `r cc'를 입력하면\n"
+"    `cc'로 시작하는 최근 명령을 실행하고 `r'을 입력하면 직전에 입력한\n"
+"    최근 명령을 다시 실행할 수 있습니다.\n"
+"    \n"
+"    종료 상태:\n"
+"    성공 또는 실행 명령 상태를 반환합니다. 오류가 있다면 0이 아닌 값을 반환합니다."
 
 #: builtins.c:764
 msgid ""
@@ -3110,28 +3347,41 @@ msgid ""
 "    Exit Status:\n"
 "    Status of command placed in foreground, or failure if an error occurs."
 msgstr ""
+"작업을 포그라운드로 이동합니다.\n"
+"    \n"
+"    JOB_SPEC으로 식별하는 작업을 포그라운드에 두어, 현재 작업으로\n"
+"    전환합니다. JOB_SPEC이 현재 작업이 아니면, 셸의 개념상 현재 작업을\n"
+"    활용합니다.\n"
+"    \n"
+"    종료 상태:\n"
+"    포그라운드에 있는 명령의 상태를 반환합니다. 오류가 있다면 실패를 반환합니다."
 
 #: builtins.c:779
 msgid ""
 "Move jobs to the background.\n"
 "    \n"
-"    Place the jobs identified by each JOB_SPEC in the background, as if "
-"they\n"
-"    had been started with `&'.  If JOB_SPEC is not present, the shell's "
-"notion\n"
+"    Place the jobs identified by each JOB_SPEC in the background, as if they\n"
+"    had been started with `&'.  If JOB_SPEC is not present, the shell's notion\n"
 "    of the current job is used.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns success unless job control is not enabled or an error occurs."
 msgstr ""
+"작업을 백그라운드로 이동합니다.\n"
+"    \n"
+"    `&'로 시작했을 때와 마찬가지로, 각 JOB_SPEC으로 식별하는 작업을\n"
+"    백그라운드에 둡니다. JOB_SPEC이 없다면, 셸의 개념상 현재 작업을\n"
+"    활용합니다.\n"
+"    \n"
+"    종료 상태:\n"
+"    작업 컨트롤이 있고 오류가 없다면 성공을 반환합니다."
 
 #: builtins.c:793
 msgid ""
 "Remember or display program locations.\n"
 "    \n"
 "    Determine and remember the full pathname of each command NAME.  If\n"
-"    no arguments are given, information about remembered commands is "
-"displayed.\n"
+"    no arguments are given, information about remembered commands is displayed.\n"
 "    \n"
 "    Options:\n"
 "      -d\tforget the remembered location of each NAME\n"
@@ -3148,6 +3398,24 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless NAME is not found or an invalid option is given."
 msgstr ""
+"프로그램 위치를 기억하거나 표시합니다.\n"
+"    \n"
+"    명령 <이름>의 전체 경로 이름을 판단하거나 기억합니다.  어떤 인자도\n"
+"    설정하지 않으면, 기억한 명령의 정보를 표시합니다.\n"
+"    \n"
+"    옵션:\n"
+"      -d\t각 <이름>의 기억 위치를 소거합니다\n"
+"      -l\t입력으로 재활용할 형식을 표시합니다\n"
+"      -p <경로이름>\t<이름> 의 전체 경로 이름으로 <경로이름>을 활용합니다\n"
+"      -r\t기억한 모든 위치를 소거합니다\n"
+"      -t\t각 <이름>의 기억 위치를 출력하며 여러 <이름>을 지정했을 경우,\n"
+"    \t\t<이름>에 해당하는 각 위치를 우선 나타냅니다\n"
+"    인자:\n"
+"      <이름>\t각 <이름>은 $PATH에서 검색하며 기억 명령에 대해 목록에\n"
+"    \t\t추가합니다.\n"
+"    \n"
+"    종료 상태:\n"
+"    <이름>을 찾았거나 적절한 옵션을 지정했다면 성공을 반환합니다."
 
 #: builtins.c:818
 msgid ""
@@ -3167,9 +3435,24 @@ msgid ""
 "      PATTERN\tPattern specifying a help topic\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success unless PATTERN is not found or an invalid option is "
-"given."
+"    Returns success unless PATTERN is not found or an invalid option is given."
 msgstr ""
+"내장 명령 정보를 표시합니다.\n"
+"    \n"
+"    내장 명령 요약 정보를 표시합니다.  <패턴>을 지정하면 <패턴>에 일치\n"
+"    하는 모든 명령의 자세한 내용을 나타내며, 그렇지 않으면 도움말 주제 \n"
+"    목록을 나타냅니다.\n"
+"    \n"
+"    옵션:\n"
+"      -d\t각 주제의 간단한 설명을 출력합니다\n"
+"      -m\t유사 맨 페이지 형식으로 사용법을 출력합니다.\n"
+"      -s\t<패턴>에 일치하는 주제의 간단한 개요만 출력합니다\n"
+"    \n"
+"    인자:\n"
+"      <패턴>\t도움말 주제를 지정합니다\n"
+"    \n"
+"    종료 상태:\n"
+"    <패턴>에 일치하는 주제를 찾았거나 적절한 옵션을 지정하면 성공을 반환합니다."
 
 #: builtins.c:842
 msgid ""
@@ -3199,12 +3482,41 @@ msgid ""
 "    \n"
 "    If the HISTTIMEFORMAT variable is set and not null, its value is used\n"
 "    as a format string for strftime(3) to print the time stamp associated\n"
-"    with each displayed history entry.  No time stamps are printed "
-"otherwise.\n"
+"    with each displayed history entry.  No time stamps are printed otherwise.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns success unless an invalid option is given or an error occurs."
 msgstr ""
+"기록 목록을 표시하거나 편집합니다.\n"
+"    \n"
+"    기록 목록에 행번호를 붙여 나타내며, 수정한 항목은 `*' 표시가\n"
+"    앞에 붙습니다.  인자 N은 최근 항목 N개만 나타냄을 의미합니다.\n"
+"    \n"
+"    옵션:\n"
+"      -c\t모든 항목을 삭제하여 기록 목록을 지웁니다\n"
+"      -d <오프셋>\t<오프셋> 포지션에 있는 항목을 삭제합니다. 음수\n"
+"    \t\t오프셋은 기록 목록 끝부터 거꾸로 셉니다\n"
+"    \n"
+"      -a\t이 세선의 기록 파일에 기록 행을 추가합니다\n"
+"      -n\t기록 파일에서 이미 읽은 부분은 읽지 않고 모든 기록 항목을\n"
+"    \t\t읽어 기록 목록에 추가합니다\n"
+"      -r\t기록 파일을 읽고 기록 목록에 내용을 추가합니다\n"
+"      -w\t현재 기록을 기록 파일에 기록합니다\n"
+"    \n"
+"      -p\t각 <인자>의 기록 확장을 수행한 후 기록 목록에 저장하지\n"
+"    \t\t않고 결과를 표시합니다\n"
+"      -s\t<인자>를 기록 목록에 단일 항목으로 추가합니다\n"
+"    \n"
+"    <파일이름>을 지정하면 기록 파일로 사용합니다.  아니면,\n"
+"    HISTFILE 변수에 값을 지정했다면 해당 값을 사용하고, \n"
+"    아니면 ~/.bash_history를 활용합니다.\n"
+"    \n"
+"    HISTTIMEFORMAT 변수에 값을 설정하여 널 상태가 아니라면 해당 값을\n"
+"    앞으로 표시할 각 기록 항목에 대한 타임스탬프를 출력할 때 strftime(3)의\n"
+"    형식 문자열로 활용합니다.  그렇지 않으면 타임스탬프를 출력하지 않습니다.\n"
+"    \n"
+"    종료 상태:\n"
+"    적절한 옵션을 설정했거나 오류가 없다면 성공을 반환합니다."
 
 #: builtins.c:879
 msgid ""
@@ -3229,6 +3541,25 @@ msgid ""
 "    Returns success unless an invalid option is given or an error occurs.\n"
 "    If -x is used, returns the exit status of COMMAND."
 msgstr ""
+"작업 상태를 표시합니다.\n"
+"    \n"
+"    활성 작업을 나타냅니다.  JOBSPEC에는 해당 작업의 출력을\n"
+"    제한합니다. 옵션을 지정하지 않으면 모든 활성 작업 상태를\n"
+"    나타냅니다.\n"
+"    \n"
+"    옵션:\n"
+"      -l\t일반 정보 및 프로세스 ID를 보여줍니다.\n"
+"      -n\t최근 알림 이후 상태가 바뀐 프로세스만 보여줍니다.\n"
+"      -p\t프로세스 ID만 보여줍니다\n"
+"      -r\t출력 대상을 실행 작업으로 제한합니다\n"
+"      -s\t출력 대상을 멈춘 작업으로 제한합니다\n"
+"    \n"
+"    -x 옵션을 지정하면 <인자>에 나타난 모든 작업 명세가 프로세스 그룹의\n"
+"    리더 프로세스 ID로 바뀐 후 <명령> 을 실행합니다.\n"
+"    \n"
+"    종료 상태:\n"
+"    적절한 옵션을 설정했거나 오류가 없다면 성공을 반환합니다.\n"
+"    -x 옵션을 사용했다면 <명령>의 종료 상태를 반환합니다."
 
 #: builtins.c:906
 msgid ""
@@ -3246,6 +3577,19 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless an invalid option or JOBSPEC is given."
 msgstr ""
+"현재 셸에서 작업을 제거합니다.\n"
+"    \n"
+"    각 <JOBSPEC> 인자를 활성 작업 테이블에서 제거합니다.  어떤 <JOBSPEC>도\n"
+"    지정하지 않으면, 현재 작업을 지정한 것으로 간주합니다.\n"
+"    \n"
+"    옵션:\n"
+"      -a\t<JOBSPEC>를 지정하지 않으면 모든 작업을 제거합니다\n"
+"      -h\t각 <JOBSPEC>을 마킹해서 셸에서 SIGHUP 시그널을 받았다면\n"
+"    \t\t작업에 해당 시그널을 보내지 않게 합니다.\n"
+"      -r\t실행 작업만 제거합니다\n"
+"    \n"
+"    종료 상태:\n"
+"    적절한 옵션을 지정하고 주어진 <JOBSPEC> 값이 올바를 경우 성공을 반환합니다."
 
 #: builtins.c:925
 msgid ""
@@ -3269,6 +3613,25 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless an invalid option is given or an error occurs."
 msgstr ""
+"작업에 시그널을 보냅니다..\n"
+"    \n"
+"    <PID> 또는 <JOBSPEC>으로 식별하는 프로세스에 SIGSPEC 또는\n"
+"    SIGNUM으로 이름이 붙은 시그널을 보냅니다. SIGSPEC, SIGNUM \n"
+"    돌 다 없을 경우, SIGTERM을 고려합니다.\n"
+"    \n"
+"    옵션:\n"
+"      -s <시그널>\t<시그널>은 시그널 이름입니다\n"
+"      -n <시그널>\t<시그널>은 시그널 번호입니다\n"
+"      -l\t시그널 이름 목록을 나타냅니다. 인자에 `-l'을 붙이면 나타낼 이름에\n"
+"    \t\t대한 시그널 번호를 나타내라는 의미입니다\n"
+"      -L\t-l과 동일한 의미\n"
+"    \n"
+"    두가지 이유로 kill은 셸 내장 명령입니다: 프로세스 ID  대신 작업 ID를\n"
+"    허용하며, 만들 수 있는 프로세스 수의 한계에 도달했을 때 강제로 끝내야\n"
+"    할 프로세스를 강제로 끝낼 수 있습니다.\n"
+"    \n"
+"    종료 상태:\n"
+"    적절한 옵션을 설정했거나 오류가 없다면 성공을 반환합니다."
 
 #: builtins.c:949
 msgid ""
@@ -3277,8 +3640,7 @@ msgid ""
 "    Evaluate each ARG as an arithmetic expression.  Evaluation is done in\n"
 "    fixed-width integers with no check for overflow, though division by 0\n"
 "    is trapped and flagged as an error.  The following list of operators is\n"
-"    grouped into levels of equal-precedence operators.  The levels are "
-"listed\n"
+"    grouped into levels of equal-precedence operators.  The levels are listed\n"
 "    in order of decreasing precedence.\n"
 "    \n"
 "    \tid++, id--\tvariable post-increment, post-decrement\n"
@@ -3314,22 +3676,57 @@ msgid ""
 "    Exit Status:\n"
 "    If the last ARG evaluates to 0, let returns 1; let returns 0 otherwise."
 msgstr ""
+"산술 연산을 처리합니다.\n"
+"    \n"
+"    각 <인자>의 산술 연산을 처리합니다. 오버플로우를 검사하지 않고\n"
+"    고정 길이 정수로 처리하며, 0나누기 동작은 잡혀서 오류로 표시합니다.\n"
+"    다음 연산자 목록은 동일한 우선순위별로 묶었습니다. 우선순위 수준은\n"
+"    우선순위가 감소하는 순서대로 나열했습니다.\n"
+"    \n"
+"    \tid++, id--\t변수의 후위 증가, 후위 감소\n"
+"    \t++id, --id\t변수의 전위 증가, 전위 감소\n"
+"    \t-, +\t\t음, 양 부호\n"
+"    \t!, ~\t\t논리, 비트 반전\n"
+"    \t**\t\t지수 연산\n"
+"    \t*, /, %\t\t곱하기, 나누기, 나머지\n"
+"    \t+, -\t\t더하기, 빼기\n"
+"    \t<<, >>\t\t좌측, 우측 비트 이동\n"
+"    \t<=, >=, <, >\t비교\n"
+"    \t==, !=\t\t동등, 상이\n"
+"    \t&\t\t비트 논리곱\n"
+"    \t^\t\t비트 배타합\n"
+"    \t|\t\t비트 논리합\n"
+"    \t&&\t\t논리 논리곱\n"
+"    \t||\t\t논리 논리합\n"
+"    \t<수식> ? <수식> : <수식>\n"
+"    \t\t\t3항 조건 연산자\n"
+"    \t=, *=, /=, %=,\n"
+"    \t+=, -=, <<=, >>=,\n"
+"    \t&=, ^=, |=\t할당\n"
+"    \n"
+"    셸 변수를 피연산자로 활용할 수 있습니다. 수식 내 변수 이름은 값으로 \n"
+"    바뀝니다(고정 길이 정수로 강제 변환)  변수는 수식에서 활용할 정수 \n"
+"    속성을 가질 필요는 없습니다.\n"
+"    \n"
+"    연산자는 우선순위 순서대로 처리합니다.  괄호 내 하위 연산을 우선\n"
+"    처리하며, 이 또한 위의 우선순위 규칙을 따릅니다.\n"
+"    \n"
+"    종료 상태:\n"
+"    <인자>가 0을 계산하면 1을 반환하고 그렇지 않으면 0을 반환합니다."
 
 #: builtins.c:994
 msgid ""
 "Read a line from the standard input and split it into fields.\n"
 "    \n"
 "    Reads a single line from the standard input, or from file descriptor FD\n"
-"    if the -u option is supplied.  The line is split into fields as with "
-"word\n"
+"    if the -u option is supplied.  The line is split into fields as with word\n"
 "    splitting, and the first word is assigned to the first NAME, the second\n"
 "    word to the second NAME, and so on, with any leftover words assigned to\n"
-"    the last NAME.  Only the characters found in $IFS are recognized as "
-"word\n"
-"    delimiters.\n"
+"    the last NAME.  Only the characters found in $IFS are recognized as word\n"
+"    delimiters. By default, the backslash character escapes delimiter characters\n"
+"    and newline.\n"
 "    \n"
-"    If no NAMEs are supplied, the line read is stored in the REPLY "
-"variable.\n"
+"    If no NAMEs are supplied, the line read is stored in the REPLY variable.\n"
 "    \n"
 "    Options:\n"
 "      -a array\tassign the words read to sequential indices of the array\n"
@@ -3341,8 +3738,7 @@ msgid ""
 "      -n nchars\treturn after reading NCHARS characters rather than waiting\n"
 "    \t\tfor a newline, but honor a delimiter if fewer than\n"
 "    \t\tNCHARS characters are read before the delimiter\n"
-"      -N nchars\treturn only after reading exactly NCHARS characters, "
-"unless\n"
+"      -N nchars\treturn only after reading exactly NCHARS characters, unless\n"
 "    \t\tEOF is encountered or read times out, ignoring any\n"
 "    \t\tdelimiter\n"
 "      -p prompt\toutput the string PROMPT without a trailing newline before\n"
@@ -3360,14 +3756,48 @@ msgid ""
 "      -u fd\tread from file descriptor FD instead of the standard input\n"
 "    \n"
 "    Exit Status:\n"
-"    The return code is zero, unless end-of-file is encountered, read times "
-"out\n"
-"    (in which case it's greater than 128), a variable assignment error "
-"occurs,\n"
+"    The return code is zero, unless end-of-file is encountered, read times out\n"
+"    (in which case it's greater than 128), a variable assignment error occurs,\n"
 "    or an invalid file descriptor is supplied as the argument to -u."
 msgstr ""
+"표준 입력에서 행을 읽고 필드 단위로 분리합니다.\n"
+"    \n"
+"    표준 입력 또는 -u 옵션을 지정했을 경우 파일 서술자에서 단일 행을\n"
+"    읽습니다.  행은 단어를 분리할 때처럼 필드로 분리하며, 첫번째 단어는\n"
+"    처음 <이름>으로, 두번째 단어는 두번째 <이름>으로 이런 식으로 할당\n"
+"    하여 나머지 단어에서도 역시 그 다음 <이름>으로 할당합니다. 오직 $IFS\n"
+"    의 문자만 단어 구분자로 인식합니다. 기본적으로 백슬래시 문자는 구분\n"
+"    문자와 개행 문자를 이스케이핑합니다.\n"
+"    \n"
+"    <이름>을 지정하지 않으면, 해당 행을 REPLY 변수에 저장합니다.\n"
+"    \n"
+"    옵션:\n"
+"      -a <배열>\t0부터 시작하는 ARRAY 배열 변수의 순차 색인을 읽을\n"
+"    \t\t단어를 할당합니다\n"
+"      -d <구분>\t개행 문자가 아닌 DELIM의 첫 글자를 읽을 때까지 계속합니다\n"
+"      -e\t행 읽기에 readline을 활용합니다\n"
+"      -i <텍스트>\treadline 초기 텍스트 값으로 TEXT를 활용합니다.\n"
+"      -n <문자수>\t개행 문자를 기다리기 보다는 <문자수> 만큼의 문자를 읽은 다음\n"
+"    \t\t반환합니다만, 구분 문자가 나타나기 전에 <문자수> 만큼 읽었을 때 개행 문자가\n"
+"    \t\t먼저 오면 구분 문자보다 개행 문자를 우선 처리합니다.\n"
+"      -N <문자수>\tEOF가 나타났거나, 읽기 시간 초과가 있지 않은 한,\n"
+"    \t\t<문자수> 만큼 문자를 읽은 다음 구분자를 무시하고 값을 반환합니다.\n"
+"      -p <프롬프트>\t읽기 전, 개행 문자를 제외하고 PROMPT 문자열을 출력합니다\n"
+"      -r\t문자를 이스케이핑하는 백슬래시 문자를 허용하지 않습니다\n"
+"      -s\t터미널의 입력에 대해 반향 출력 처리하지 않습니다\n"
+"      -t <제한시간>\tTIIMEOUT 초 이내에 입력 행을 완전히 읽지 않으면 실패를\n"
+"    \t\t반환합니다.  TMOUT 변수 기본 값은 기본 제한시간입니다. TIMEOUT은\n"
+"    \t\t분수 값입니다. 이 값을 0으로 지정하면, 어떤 결과를 읽으려 시도하지 않고\n"
+"    \t\t읽은 결과를 바로 반환하며, 지정 파일 서술자에 입력이 있을 경우에만\n"
+"    \t\t성공을 반환합니다. 시간을 초과하면 종료 상태값은 128보다 큽니다.\n"
+"      -u <파일서술자>\t표준 입력 대신 파일 서술자에서 읽습니다.\n"
+"    \n"
+"    종료 상태:\n"
+"    EOF가 나타나지 않았다거나, 읽기 시간을 초과하지 않았다거나(초과하면 \n"
+"    128보다 큰 수 반환), 변수 할당 오류가 없었다거나, -u 옵션에 잘못된 파일\n"
+"     서술자를 지정하지 않았다면 0 값을 반환합니다."
 
-#: builtins.c:1041
+#: builtins.c:1042
 msgid ""
 "Return from a shell function.\n"
 "    \n"
@@ -3378,8 +3808,17 @@ msgid ""
 "    Exit Status:\n"
 "    Returns N, or failure if the shell is not executing a function or script."
 msgstr ""
+"셸 함수로부터 값을 반환합니다.\n"
+"    \n"
+"    함수 또는 소싱 스크립트로 하여금 반환 값을 내놓도록 합니다.\n"
+"    <횟수>로 지정합니다. <횟수> 값을 생략하면, 반환 상태는\n"
+"    스크립트 함수 내 최종 명령 실행 결과에 따릅니다.\n"
+"    \n"
+"    종료 상태:\n"
+"    <횟수>를 반환하거나, 셸에서 함수 또는 스크립트를\n"
+"    실행하지 않으면 실패를 반환합니다."
 
-#: builtins.c:1054
+#: builtins.c:1055
 msgid ""
 "Set or unset values of shell options and positional parameters.\n"
 "    \n"
@@ -3422,8 +3861,7 @@ msgid ""
 "              physical     same as -P\n"
 "              pipefail     the return value of a pipeline is the status of\n"
 "                           the last command to exit with a non-zero status,\n"
-"                           or zero if no command exited with a non-zero "
-"status\n"
+"                           or zero if no command exited with a non-zero status\n"
 "              posix        change the behavior of bash where the default\n"
 "                           operation differs from the Posix standard to\n"
 "                           match the standard\n"
@@ -3447,8 +3885,7 @@ msgid ""
 "          by default when the shell is interactive.\n"
 "      -P  If set, do not resolve symbolic links when executing commands\n"
 "          such as cd which change the current directory.\n"
-"      -T  If set, the DEBUG and RETURN traps are inherited by shell "
-"functions.\n"
+"      -T  If set, the DEBUG and RETURN traps are inherited by shell functions.\n"
 "      --  Assign any remaining arguments to the positional parameters.\n"
 "          If there are no remaining arguments, the positional parameters\n"
 "          are unset.\n"
@@ -3464,8 +3901,84 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless an invalid option is given."
 msgstr ""
+"셸 옵션과 위치 매개변수를 설정 또는 설정 해제합니다.\n"
+"    \n"
+"    셸 속성 값 및 위치 매개변수를 바꾸거나, 셸 변수의 이름과 값을\n"
+"    표시합니다.\n"
+"    \n"
+"    옵션:\n"
+"      -a  환경으로 내보내려 수정하거나 만든 변수를 표시합니다.\n"
+"      -b  작업 중단 알림을 즉시 수행.\n"
+"      -e  명령이 0 값이 아닌 상태를 내보냈다면 즉시 나감.\n"
+"      -f  파일 이름 생성 사용 안힘(글로빙).\n"
+"      -h  찾은 명령 위치 기억.\n"
+"      -k  명령 이름에 앞선 요소 뿐만 아니라 명령 실행에 필요한 모든\n"
+"          할당 인자를 환경에 설정합니다.\n"
+"      -m  작업 컨트롤을 활성합니다..\n"
+"      -n  명령은 읽되 실행하지는 않습니다.\n"
+"      -o <명령-이름>\n"
+"          <옵션-이름>과 관련한 변수를 설정합니다:\n"
+"              allexport    -a와 동일\n"
+"              braceexpand  -B와 동일\n"
+"              emacs        이맥스 방식 행 편집 인터페이스 활용\n"
+"              errexit      -e와 동일\n"
+"              errtrace     -E와 동일\n"
+"              functrace    -T와 동일\n"
+"              hashall      -h와 동일\n"
+"              histexpand   -H와 동일\n"
+"              history      명령 기록 사용\n"
+"              ignoreeof    EOF를 읽고 나서 셸을 나가지 않음\n"
+"              interactive-comments\n"
+"                           interactive commands에 나타난 주석 허용\n"
+"              keyword      -k와 동일\n"
+"              monitor      -m과 동일\n"
+"              noclobber    -C와 동일\n"
+"              noexec       -n과 동일\n"
+"              noglob       -f와 동일\n"
+"              nolog        현재 허용하나 무시함\n"
+"              notify       -b와 동일\n"
+"              nounset      -u와 동일\n"
+"              onecmd       -t와 동일\n"
+"              physical     -P와 동일\n"
+"              pipefail     파이프라인 반환 값은 최종 명령의 0이 아닌\n"
+"                           종료 상태이거나, 0이 아닌 종료 상태를 반환한 명령이\n"
+"                           없다면 0 값을 반환함\n"
+"              posix        배시 동작을 바꾸어 POSIX 표준과 다른 기본 동작\n"
+"                           부분을 표준에 맞춤\n"
+"              privileged   -p와 동일\n"
+"              verbose      -v와 동일\n"
+"              vi           vi 방식 행 종결 인터페이스\n"
+"              xtrace       -x와 동일\n"
+"      -p  실제 ID와 효력상 ID가 일치하지 않을 때라도 켭니다.\n"
+"          $ENV 파일의 처리와 셸 함수 가져오기 동작을 끕니다.\n"
+"          이 옵션을 끄면 효력상 사용자 ID와 그룹 ID를 실제\n"
+"          사용자 ID와 그룹 ID로 설정합니다.\n"
+"      -t  명령하나를 읽고 실행한 후 나갑니다.\n"
+"      -u  설정 해제한 변수를 대체할 때 오류로 간주.\n"
+"      -v  셸 입력 행을 읽는대로 출력합니다.\n"
+"      -x  명령과 인자를 실행하는 대로 출력합니다.\n"
+"      -B  셸에 중괄호 확장을 수행하게 합니다\n"
+"      -C  이 옵션을 설정하면, 기존 일반 파일에 출력 방향 재지정을 통한\n"
+"          내용 덮어쓰기를 허용하지 않습니다.\n"
+"      -E  이 옵션을 설정하면, ERR 트랩을 셸 함수에서 승계합니다.\n"
+"      -H  ! 방식 기록 대체를 활성화합니다.  이 플래그는 셸이 대화모드일 떄\n"
+"          기본적으로 사용 상태입니다..\n"
+"      -P  이 옵션을 설정하면, 현재 디렉터리를 바꾸는 cd 명령과 같은 그련\n"
+"          명령을 실행할 때 심볼릭 링크를 해석하지 않습니다.\n"
+"      -T  이 옵션을 설정하면, DEBUG와 RETURN을 셸 함수에서 계승합니다..\n"
+"      --  남은 인자를 위치 매개변수로 할당합니다. 남은 인자가 없으면\n"
+"          위치 매개변수를 삭제합니다.\n"
+"      -   남은 인자를 위치 매개변수로 할당합니다. -x 옵션과 -v 옵션을 끕니다.\n"
+"    \n"
+"    플래그를 사용하려면 + 를, 아니면 - 기호를 씁니다.  플래그는 셸 실행애\n"
+"    활용할 수도 있습니다. 현재 플래그 셋은 $-에 있습니다. 남은 <인자>는\n"
+"    $1, $2, ... $n 순으로 할당한 위치 매개변수입니다. 지정 <인자>가 없으면\n"
+"    모든 셸 변수를 출력합니다.\n"
+"    \n"
+"    종료 상태:\n"
+"    적절한 옵션을 지정하면 성공을 반환합니다."
 
-#: builtins.c:1139
+#: builtins.c:1140
 msgid ""
 "Unset values and attributes of shell variables and functions.\n"
 "    \n"
@@ -3477,8 +3990,7 @@ msgid ""
 "      -n\ttreat each NAME as a name reference and unset the variable itself\n"
 "    \t\trather than the variable it references\n"
 "    \n"
-"    Without options, unset first tries to unset a variable, and if that "
-"fails,\n"
+"    Without options, unset first tries to unset a variable, and if that fails,\n"
 "    tries to unset a function.\n"
 "    \n"
 "    Some variables cannot be unset; also see `readonly'.\n"
@@ -3486,14 +3998,30 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless an invalid option is given or a NAME is read-only."
 msgstr ""
+"셸 변수와 함수의 값과 속성 설정을 해제합니다.\n"
+"    \n"
+"    각 <이름>에 대해 관련 변수 또는 함수를 제거합니다.\n"
+"    \n"
+"    옵션:\n"
+"      -f\t각 <이름>을 셸 함수로 취급합니다.\n"
+"      -v\t각 <이름>을 셸 변수로 취급합니다.\n"
+"      -n\t각 <이름>을 이름 참조자로 활용하며, 이름을 참조하는 변수가 아닌\n"
+"    \t\t변수 자체를 참조하는 이름 설정을 해제합니다\n"
+"    \n"
+"    옵션을 지정하지 않으면, 변수를 우선 설정 해제하려고 하며, 실패했다면,\n"
+"    함수 설정 해제를 시도합니다.\n"
+"    \n"
+"    일부 변수는 설정을 해제할 수 없습니다. `readonly' 참조.\n"
+"    \n"
+"    종료 상태:\n"
+"    적절한 옵션을 지정했거나 <이름>이 읽기 전용이 아니면 성공을 반환합니다."
 
-#: builtins.c:1161
+#: builtins.c:1162
 msgid ""
 "Set export attribute for shell variables.\n"
 "    \n"
 "    Marks each NAME for automatic export to the environment of subsequently\n"
-"    executed commands.  If VALUE is supplied, assign VALUE before "
-"exporting.\n"
+"    executed commands.  If VALUE is supplied, assign VALUE before exporting.\n"
 "    \n"
 "    Options:\n"
 "      -f\trefer to shell functions\n"
@@ -3505,8 +4033,22 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless an invalid option is given or NAME is invalid."
 msgstr ""
+"셸 변수 속성을 내보내기 설정합니다.\n"
+"    \n"
+"    각 <이름>은 명령을 계속 실행해나가면서 환경에 내보내기(export)처리 합니다.\n"
+"    <값>을 지정했다면 내보내기(export) 전, <값>을 할당합니다.\n"
+"    \n"
+"    옵션:\n"
+"      -f\t셸 함수를 참조합니다\n"
+"      -n\t각 <이름>의 내보내기 속성을 제거합니다\n"
+"      -p\t환경에 내보낸 변수와 함수 목록을 나타냅니다\n"
+"    \n"
+"    `--' 인자는 이후 옵션 처리를 막습니다.\n"
+"    \n"
+"    종료 상태:\n"
+"    적절한 옵션을 설정했거나 <이름>이 올바르면 성공을 반환합니다."
 
-#: builtins.c:1180
+#: builtins.c:1181
 msgid ""
 "Mark shell variables as unchangeable.\n"
 "    \n"
@@ -3526,8 +4068,25 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless an invalid option is given or NAME is invalid."
 msgstr ""
+"셸 변수를 바꾸지 못하게 합니다.\n"
+"    \n"
+"    각 <이름>을 읽기 전용으로 만듭니다. 이 <이름>의 값은 앞으로의 할당\n"
+"    동작에서 바뀌지 않습니다. <값>을 지정했다면 읽기 전용으로 지정하기 전\n"
+"    <값>부터 할당합니다.\n"
+"    \n"
+"    옵션:\n"
+"      -a\t색인 배열 변수를 참조합니다\n"
+"      -A\t연관 배열 변수를 참조합니다\n"
+"      -f\t셸 함수를 참조합니다\n"
+"      -p\t-f 옵션의 지정 여부에 따라 모든 읽기 전용 변수\n"
+"    \t\t또는 함수를 표시합니다\n"
+"    \n"
+"    `--' 인자는 이후 옵션 처리를 중단합니다.\n"
+"    \n"
+"    종료 상태:\n"
+"    적절한 옵션을 지정했거나 <이름>이 올바르면 성공을 반환합니다."
 
-#: builtins.c:1202
+#: builtins.c:1203
 msgid ""
 "Shift positional parameters.\n"
 "    \n"
@@ -3537,8 +4096,15 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless N is negative or greater than $#."
 msgstr ""
+"위치 매개변수를 이동합니다.\n"
+"    \n"
+"    <초기횟수> 값을 지정하지 않으면 , $<초기횟수>+1, $<초기횟수>+2,\n"
+"     ... $1, $2 ... 로 위치 매개변수 이름을 바꾸며, <초기횟수> 값은 1로 가정합니다.\n"
+"    \n"
+"    종료 상태:\n"
+"    <횟수>가 양수거나 $# 보다 작거나 같으면 성공을 반환합니다."
 
-#: builtins.c:1214 builtins.c:1229
+#: builtins.c:1215 builtins.c:1230
 msgid ""
 "Execute commands from a file in the current shell.\n"
 "    \n"
@@ -3551,8 +4117,17 @@ msgid ""
 "    Returns the status of the last command executed in FILENAME; fails if\n"
 "    FILENAME cannot be read."
 msgstr ""
+"현재 셸의 파일에서 명령을 실행합니다.\n"
+"    \n"
+"    현제 셸의 <파일이름>에서 명령을 읽고 실행합니다. $PATH 항목은 <파일\n"
+"    이름>에 있는 디렉터리를 찾을 때 활용합니다. <인자>를 지정했다면, \n"
+"    <파일이름>을 실행할 때 위치 매개 변수가 따라옵니다.\n"
+"    \n"
+"    종료 상태:\n"
+"    <파일이름>의 마지막 명령 실행 상태를 반환합니다. <파일이름>을\n"
+"    읽지 못하면, 실패를 반환합니다."
 
-#: builtins.c:1245
+#: builtins.c:1246
 msgid ""
 "Suspend shell execution.\n"
 "    \n"
@@ -3565,19 +4140,18 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless job control is not enabled or an error occurs."
 msgstr ""
-"ì\89\98 ì\8b¤í\96\89ì\9d\84 ì\9d¼ì\8b\9cì \95ì§\80í\95©니다.\n"
+"ì\85¸ ì\8b¤í\96\89ì\9d\84 ì\9e ì\8b\9c ë©\88춥니다.\n"
 "    \n"
-"    SIGCONT ì\8b í\98¸ë¥¼ ë°\9bì\9d\84 ë\95\8c ê¹\8cì§\80 ì\89\98의 실행을 일시 정지합니다.\n"
-"    ê°\95ì \9c ì\98µì\85\98ì\9d´ ì\97\86ë\8a\94 ê²½ì\9a° ë¡\9cê·¸ì\9d¸ ì\89\98은 일시 정지될 수 없습니다.\n"
+"    SIGCONT ì\8b\9cê·¸ë\84\90를 ë°\9bì\9d\84 ë\95\8c ê¹\8cì§\80 ì\85¸의 실행을 일시 정지합니다.\n"
+"    ê°\95ì \9c ì\98µì\85\98ì\9d´ ì\97\86ë\8a\94 ê²½ì\9a° ë¡\9cê·¸ì\9d¸ ì\85¸은 일시 정지될 수 없습니다.\n"
 "    \n"
 "    옵션:\n"
-"      -f\të¡\9cê·¸ì\9d¸ ì\89\98의 경우에도 일시 정지를 강제합니다.\n"
+"      -f\të¡\9cê·¸ì\9d¸ ì\85¸의 경우에도 일시 정지를 강제합니다.\n"
 "    \n"
 "    종료 상태:\n"
-"    job control이 활성화되지 않았거나 오류가 발생하지 않으면 성공을 반환합니"
-"다."
+"    작업 컨트롤이 동작하거나 오류가 없으면 성공을 반환합니다."
 
-#: builtins.c:1261
+#: builtins.c:1262
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -3611,8 +4185,7 @@ msgid ""
 "      -x FILE        True if the file is executable by you.\n"
 "      -O FILE        True if the file is effectively owned by you.\n"
 "      -G FILE        True if the file is effectively owned by your group.\n"
-"      -N FILE        True if the file has been modified since it was last "
-"read.\n"
+"      -N FILE        True if the file has been modified since it was last read.\n"
 "    \n"
 "      FILE1 -nt FILE2  True if file1 is newer than file2 (according to\n"
 "                       modification date).\n"
@@ -3633,8 +4206,7 @@ msgid ""
 "      STRING1 != STRING2\n"
 "                     True if the strings are not equal.\n"
 "      STRING1 < STRING2\n"
-"                     True if STRING1 sorts before STRING2 "
-"lexicographically.\n"
+"                     True if STRING1 sorts before STRING2 lexicographically.\n"
 "      STRING1 > STRING2\n"
 "                     True if STRING1 sorts after STRING2 lexicographically.\n"
 "    \n"
@@ -3659,33 +4231,118 @@ msgid ""
 "    Returns success if EXPR evaluates to true; fails if EXPR evaluates to\n"
 "    false or an invalid argument is given."
 msgstr ""
+"조건식을 처리합니다.\n"
+"    \n"
+"    <표현식>의 계산 결과에 따라 0(참) 또는 1(거짓) 상태 값을\n"
+"    내며 빠져나옵니다.  수식은 단항 수식 또는 이항 수식일 수 있습니다.\n"
+"    단항 수식은 보통 파일 상태를 확인할 때 사용합니다.  숫자 비교 \n"
+"    연산자와 마찬가지로 문자열 연산자도 있습니다.\n"
+"    \n"
+"    테스트 동작은 인자 갯수에 따릅니다. 완전한 내용을 알아보려면,\n"
+"    배시 설명서 페이지를 읽어보십시오.\n"
+"    \n"
+"    파일 연산자:\n"
+"    \n"
+"      -a <파일>        파일이 있으면 참.\n"
+"      -b <파일>        블록 특수 파일이면 참.\n"
+"      -c <파일>        문자 특수 파일이면 참.\n"
+"      -d <파일>        파일이 디렉터리면 참.\n"
+"      -e <파일>        파일이 있으면 참.\n"
+"      -f <파일>        일반 파일이 있으면 참.\n"
+"      -g <파일>        파일이 그룹 ID 모음이면 참.\n"
+"      -h <파일>        파일이 심볼릭 링크면 참.\n"
+"      -L <파일>        파일이 심볼릭 링크면 참.\n"
+"      -k <파일>        파일에 `끈적이' 비트 설정이 있으면 참.\n"
+"      -p <파일>        파일이 명명 파이프면 참.\n"
+"      -r <파일>        파일을 읽을 수 잇으면 참.\n"
+"      -s <파일>        비아있지 않은 파일이 있으면 참.\n"
+"      -S <파일>        소켓 파일이면 참.\n"
+"      -t <파일서술자>          <파일서술자>를 터미널에서 열면 참.\n"
+"      -u <파일>        파일이 사용자 ID 세트면 참.\n"
+"      -w <파일>        파일을 기록할 수 있으면 참.\n"
+"      -x <파일>        파일을 실행할 수 있으면 참.\n"
+"      -O <파일>        파일을 명백히 소유하면 참.\n"
+"      -G <파일>        파일을 명백시 소속 그룹에서 소유하면 참.\n"
+"      -N <파일>        파일을 읽은 후 수정했다면 참.\n"
+"    \n"
+"      <파일1> -nt <파일2>  파일1이 파일2보다 최신이면\n"
+"                       (수정일자에 따라)참.\n"
+"    \n"
+"      <파일1> -ot <파일2>  파일2가 파일1보다 최신이면 참.\n"
+"    \n"
+"      <파일1> -ef <파일2>  파일1이 파일2의 하드링크라면 참.\n"
+"    \n"
+"    문자열 연산자:\n"
+"    \n"
+"      -z <문자열>      문자열이 비었으면 참.\n"
+"    \n"
+"      -n <문자열>\n"
+"         <문자열>      문자열이 있으면 참.\n"
+"    \n"
+"      <문자열1> = <문자열2>\n"
+"                     문자열이 같으면 참.\n"
+"      <문자열1> != <문자열2>\n"
+"                     문자열이 다르면 참.\n"
+"      <문자열1> < <문자열2>\n"
+"                     문자열1이 문자열2보다 문자 순서상 먼저일 경우 참.\n"
+"      <문자열1> > <문자열2>\n"
+"                     문자열1이 문자열2보다 문자 순서상 나중일 경우 참.\n"
+"    \n"
+"    기타 연산:\n"
+"    \n"
+"      -o <옵션>      셸 <옵션>을 사용할 수 있으면 참.\n"
+"      -v <변수>         셸 <변수>를 설정하면 참.\n"
+"      -R <변수>         셸 <변수>를 이름 참조로 설정하면 참.\n"
+"    \n"
+"      ! <표현식>         표현식이 거짓이면 참.\n"
+"      <표현식1> -a <표현식2> <표현식1>, <표현식2>가 모두 참이면 참.\n"
+"      <표현식1> -o <표현식2> <표현식1> 또는 <표현식2> 둘 중 하나가 참이면 참.\n"
+"    \n"
+"      <변수1> <연산자> <변수2>   산술 시험.  <연산자>는  -eq, -ne,\n"
+"                     -lt, -le, -gt, or -ge 중 하나.\n"
+"    \n"
+"    산술 이진 연산자는 <인자1>과 <인자2>가 같거나, 다르거나, 작거나, 작고\n"
+"    같거나, 크거나, 크고 같을 경우 참을 반환합니다\n"
+"    \n"
+"    종료 상태:\n"
+"    <표현식>이 참이면 성공을 반환합니다. <표현식>이 거짓을 결과로 냈거나\n"
+"    부적절한 인자를 대입하면 실패를 반환합니다."
 
-#: builtins.c:1343
+#: builtins.c:1344
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
 "    This is a synonym for the \"test\" builtin, but the last argument must\n"
 "    be a literal `]', to match the opening `['."
 msgstr ""
+"조건식을 처리합니다.\n"
+"    \n"
+"    \"test\" 내장 명령의 동의 명령입니다만, 마지막 인자는 반드시\n"
+"    `]' 문자로 마무리하여 열기 괄호 `['와 일치해야합니다."
 
-#: builtins.c:1352
+#: builtins.c:1353
 msgid ""
 "Display process times.\n"
 "    \n"
-"    Prints the accumulated user and system times for the shell and all of "
-"its\n"
+"    Prints the accumulated user and system times for the shell and all of its\n"
 "    child processes.\n"
 "    \n"
 "    Exit Status:\n"
 "    Always succeeds."
 msgstr ""
+"프로세스 시간을 표시합니다.\n"
+"    \n"
+"    셸의 사용자 및 시스템 누적 시간, 하위 프로세스의 누적 시간을\n"
+"    나타냅니다.\n"
+"    \n"
+"    종료 상태:\n"
+"    항상 성공."
 
-#: builtins.c:1364
+#: builtins.c:1365
 msgid ""
 "Trap signals and other events.\n"
 "    \n"
-"    Defines and activates handlers to be run when the shell receives "
-"signals\n"
+"    Defines and activates handlers to be run when the shell receives signals\n"
 "    or other conditions.\n"
 "    \n"
 "    ARG is a command to be read and executed when the shell receives the\n"
@@ -3694,37 +4351,60 @@ msgid ""
 "    value.  If ARG is the null string each SIGNAL_SPEC is ignored by the\n"
 "    shell and by the commands it invokes.\n"
 "    \n"
-"    If a SIGNAL_SPEC is EXIT (0) ARG is executed on exit from the shell.  "
-"If\n"
-"    a SIGNAL_SPEC is DEBUG, ARG is executed before every simple command.  "
-"If\n"
-"    a SIGNAL_SPEC is RETURN, ARG is executed each time a shell function or "
-"a\n"
-"    script run by the . or source builtins finishes executing.  A "
-"SIGNAL_SPEC\n"
-"    of ERR means to execute ARG each time a command's failure would cause "
-"the\n"
+"    If a SIGNAL_SPEC is EXIT (0) ARG is executed on exit from the shell.  If\n"
+"    a SIGNAL_SPEC is DEBUG, ARG is executed before every simple command.  If\n"
+"    a SIGNAL_SPEC is RETURN, ARG is executed each time a shell function or a\n"
+"    script run by the . or source builtins finishes executing.  A SIGNAL_SPEC\n"
+"    of ERR means to execute ARG each time a command's failure would cause the\n"
 "    shell to exit when the -e option is enabled.\n"
 "    \n"
-"    If no arguments are supplied, trap prints the list of commands "
-"associated\n"
+"    If no arguments are supplied, trap prints the list of commands associated\n"
 "    with each signal.\n"
 "    \n"
 "    Options:\n"
 "      -l\tprint a list of signal names and their corresponding numbers\n"
 "      -p\tdisplay the trap commands associated with each SIGNAL_SPEC\n"
 "    \n"
-"    Each SIGNAL_SPEC is either a signal name in <signal.h> or a signal "
-"number.\n"
+"    Each SIGNAL_SPEC is either a signal name in <signal.h> or a signal number.\n"
 "    Signal names are case insensitive and the SIG prefix is optional.  A\n"
 "    signal may be sent to the shell with \"kill -signal $$\".\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success unless a SIGSPEC is invalid or an invalid option is "
-"given."
+"    Returns success unless a SIGSPEC is invalid or an invalid option is given."
 msgstr ""
+"시그널과 기타 이벤트를 잡습니다.\n"
+"    \n"
+"    셸에서 시그널 또는 기타 상태를 받았을 때 실행할 핸들러를 지정하고 활성\n"
+"    상태로 전환합니다.\n"
+"    \n"
+"    <인자>는 <시그널명세>의 시그널을 셸에서 받았을 때 읽고 실행할 명령\n"
+"    입니다.  <인자>값이 빠지면 (그리고 단일 <시그널명세> 값을 지정하면)\n"
+"    또는 값이 `-'으로 설정했다면, 각 지정 시그널을 원래 값으로 되돌립니다.\n"
+"    <인자>에 널 문자열이 들어갔다면, 각 <시그널명세> 값은 셸과 실행 명령\n"
+"    에서 무시합니다.\n"
+"    \n"
+"    <시그널명세>가 EXIT(0) 이면 <인자>는 셸을 빠져나갈 떄 실행합니다.\n"
+"    <시그널명세>가 DEBUG면, 모든 단순 명령을 실행하기 전에 <인자>를\n"
+"    실행 합니다. <시그널명세>가 RETURN이면, <인자>는 . 또는 원시 내장 \n"
+"    명령 실행을 끝내는 셸 함수 또는 스크립트를 실행할 때마다 실행합니다.\n"
+"    <오류> <시그널명세> 는 -e 옵션을 넣었을 때, 셸을 빠져나오게 하는 \n"
+"    명령 실패를 겪을 때마다 <인자>를 실행합니다.\n"
+"    \n"
+"    어떤 인자도 지정하지 않으면 trap에서 각 시그널 별로 실행하는 명령\n"
+"    목록을 출력합니다.\n"
+"    \n"
+"    옵션:\n"
+"      -l\t시그널 이름과 관련 숫자 목록을 출력합니다\n"
+"      -p\t각 <시그널명세> 관련 처리 명령을 표시합니다\n"
+"    \n"
+"    각 <시그널명세>는 <signal.h>에 지정한 시그널 이름이거나 시그널\n"
+"    번호입니다. 시그널 이름은 대소문자 무관하며, SIG 접두사는 선택사항\n"
+"    입니다.  시그널은 \"kill -signal $$\" 처럼 셸에 보낼 수 있습니다.\n"
+"    \n"
+"    종료 상태:\n"
+"    적절한 <시그널명세> 또는 옵션을 지정했다면 성공을 반환합니다."
 
-#: builtins.c:1400
+#: builtins.c:1401
 msgid ""
 "Display information about command type.\n"
 "    \n"
@@ -3750,16 +4430,37 @@ msgid ""
 "      NAME\tCommand name to be interpreted.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success if all of the NAMEs are found; fails if any are not "
-"found."
+"    Returns success if all of the NAMEs are found; fails if any are not found."
 msgstr ""
+"명령 형식 정보를 표시합니다.\n"
+"    \n"
+"    각 <이름>에 대해 명령 이름으로 활용할 때 어떻게 해석하는지\n"
+"     나타냅니다.\n"
+"    \n"
+"    옵션:\n"
+"      -a\t<이름>이 들어간 모든 실행 파일 보관 위치를 나타냅니다.\n"
+"    \t\t별칭, 내장명령, 함수가 해당하며, `-p' 옵션은 사용하지\n"
+"    \t\t 말아야합니다.\n"
+"      -f\t셸 함수 찾기 동작을 멈춥니다\n"
+"      -P\t각 <이름>별로 별칭, 내장 명령, 함수로 해도  PATH 검색을 강제\n"
+"    \t\t시행하며, 실행 파일 디스크 이름을 반환합니다\n"
+"      -p\t실행할 디스크 파일 이름을 반환하거나 , `type -t <이름>'을\n"
+"    \t\t`file'로 반환하지 않으면 아무것도 반환하지 않습니다.\n"
+"      -t\t<이름>이 별칭, 셸 예약 단어, 셸 함수, 셸 내장 명령, 디스크 파일\n"
+"    \t\t 또는 없음 여부에 따라 `alias', `keyword', `function', `builtin',\n"
+"    \t\t `file', `' 중 하나를 반환합니다.\n"
+"    \n"
+"    인자:\n"
+"      <이름>\t해석할 명령 이름.\n"
+"    \n"
+"    종료 상태:\n"
+"    모든 <이름>을 찾으면 성공을 반환, 그렇지 않으면 실패를 반환합니다."
 
-#: builtins.c:1431
+#: builtins.c:1432
 msgid ""
 "Modify shell resource limits.\n"
 "    \n"
-"    Provides control over the resources available to the shell and "
-"processes\n"
+"    Provides control over the resources available to the shell and processes\n"
 "    it creates, on systems that allow such control.\n"
 "    \n"
 "    Options:\n"
@@ -3803,8 +4504,52 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless an invalid option is supplied or an error occurs."
 msgstr ""
+"셸 자원 제한을 조정합니다.\n"
+"    \n"
+"    셸과 생성 프로세스를 제어하는 시스템에서 사용할 수 있는 자원의\n"
+"    제어 전반을 제공합니다.\n"
+"    \n"
+"    옵션:\n"
+"      -S\t`soft' 자원 제한을 활용합니다\n"
+"      -H\t`hard' 자원 제한을 활용합니다\n"
+"      -a\t현재 모든 제한 현황을 보고합니다\n"
+"      -b\t소켓 버퍼 킂기\n"
+"      -c\t생성 핵심 파일 최대 크기\n"
+"      -d\t프로세스 데이터 세그먼트 최대 크기\n"
+"      -e\t최대 스케쥴링 우선순위 (`nice')\n"
+"      -f\t셸과 하위 프로세스에서 작성한 파일의 최대 크기\n"
+"      -i\t최대 대기 시그널 수\n"
+"      -k\t프로세스에 할당한 커널 큐 최대 수\n"
+"      -l\t메모리에서 잠글 프로세스 최대 수\n"
+"      -m\t최대 점유 설정 크기\n"
+"      -n\t파일 서술자 개방 최대 갯수\n"
+"      -p\t파이프 버퍼 크기\n"
+"      -q\tPOSIX 메시지 큐 최대 바이트 단위 크기\n"
+"      -r\t최대 실시간 스케쥴링 우선순위\n"
+"      -s\t최대 스택 크기\n"
+"      -t\t초단위 최대 CPU 시간\n"
+"      -u\t최대 사용자 프로세스 수\n"
+"      -v\t가상 메모리 크기\n"
+"      -x\t최대 파일 잠금 수\n"
+"      -P\t가상 터미널 최대 갯수\n"
+"      -R\t블로킹 전 실시간 프로세스 최대 실행 가능 시간\n"
+"      -T\t최대 스레드 수\n"
+"    \n"
+"    모든 플랫폼에서 모든 옵션을 활용할 수 있는건 아닙니다.\n"
+"    \n"
+"    <한계>값이 주어지면, 지정 자원의 새 값이 됩니다. `soft', `hard', \n"
+"    `unlimited' <한계> 값은 현재 soft 한계, hard 한계, 한계 없음을 각각\n"
+"    의미합니다. 아니면, 지정 자원의 현재 값을 출력합니다. 옵션을 지정\n"
+"    하지 않으면, -f 옵션을 설정한 걸로 간주합니다.\n"
+"    \n"
+"    초 단위를 취급하는 -t 옵션과 512 바이트 단위로 증가하는 -p 옵션,\n"
+"    그리고 크기를 갖지 않는 프로세스 수를 취급하는 -u 옵션을 제외하고,\n"
+"    1024 바이트씩 값을 증가합니다.\n"
+"    \n"
+"    종료 상태:\n"
+"    옵션을 올바르게 설정했거나 오류가 없다면 성공을 반환합니다."
 
-#: builtins.c:1482
+#: builtins.c:1483
 msgid ""
 "Display or set file mode mask.\n"
 "    \n"
@@ -3821,28 +4566,38 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless MODE is invalid or an invalid option is given."
 msgstr ""
+"파일 모드 마스크를 표시하거나 설정합니다.\n"
+"    \n"
+"    사용자 파일 생성 마스크를 <모드>로 설정합니다. <모드>를 생략하면,\n"
+"    마스크 현재 값을 출력합니다.\n"
+"    \n"
+"    <모드>를 숫자로 시작하면, 8진수로 해석합니다. 그렇지 않으면 chmod(1)\n"
+"    에서 인식하는 심볼릭 모드 문자열이 됩니다.\n"
+"    \n"
+"    웁션:\n"
+"      -p\t<모드>를 생략하면 입력으로 재활용할 형식으로 출력합니다\n"
+"      -S\t출력 심볼릭을 만듭니다. 그렇지 않으면 8진수로 출력합니다\n"
+"    \n"
+"    종료 상태:\n"
+"    <모드>가 올바르거나 옵션을 적절하게 설정하면 성공을 반환합니다."
 
-#: builtins.c:1502
+#: builtins.c:1503
 msgid ""
 "Wait for job completion and return exit status.\n"
 "    \n"
-"    Waits for each process identified by an ID, which may be a process ID or "
-"a\n"
+"    Waits for each process identified by an ID, which may be a process ID or a\n"
 "    job specification, and reports its termination status.  If ID is not\n"
 "    given, waits for all currently active child processes, and the return\n"
 "    status is zero.  If ID is a job specification, waits for all processes\n"
 "    in that job's pipeline.\n"
 "    \n"
-"    If the -n option is supplied, waits for a single job from the list of "
-"IDs,\n"
-"    or, if no IDs are supplied, for the next job to complete and returns "
-"its\n"
+"    If the -n option is supplied, waits for a single job from the list of IDs,\n"
+"    or, if no IDs are supplied, for the next job to complete and returns its\n"
 "    exit status.\n"
 "    \n"
 "    If the -p option is supplied, the process or job identifier of the job\n"
 "    for which the exit status is returned is assigned to the variable VAR\n"
-"    named by the option argument. The variable will be unset initially, "
-"before\n"
+"    named by the option argument. The variable will be unset initially, before\n"
 "    any assignment. This is useful only when the -n option is supplied.\n"
 "    \n"
 "    If the -f option is supplied, and job control is enabled, waits for the\n"
@@ -3853,23 +4608,52 @@ msgid ""
 "    option is given, or if -n is supplied and the shell has no unwaited-for\n"
 "    children."
 msgstr ""
+"작업 완료를 기다리며 종료 상태를 반환합니다.\n"
+"    \n"
+"    프로세스 ID 또는 작업 명세가 될 ID로 식별하는 각 프로세스를 \n"
+"    기다리며, 중단 상태를 보고합니다. ID가 주어지지 않으면 현재의\n"
+"    모든 활성 하위 프로세스를 기다리며, 반환 상태 값은 0입니다.\n"
+"    ID가 작업 명세라면 작업 파이프라인의 모든 프로세스를 기다립니다.\n"
+"    \n"
+"    -n 옵션을 지정하면 ID 목록의 단일 작업을 기다리며, ID를 지정하지\n"
+"    않으면, 다음 작업 완료시까지 기다리고 해당 작업의 종료 상태를 반환\n"
+"    합니다.\n"
+"    \n"
+"    -p 옵션을 지정하면 종료 상태를 반환할 작업의 프로세스 또는 작업\n"
+"    식별자룰 옵션 인자가 명명한 <변수>에 할당합니다. 변수는 할당 전\n"
+"    설정을 해제할 수 있습니다. 보통 -n 옵션을 지정할 때만 쓸만합니다.\n"
+"    \n"
+"    -f 옵션을 지정하고 작업 컨트롤을 사용하면 지정 ID의 상태가 바뀌기를\n"
+"    기다리기보다는, 중단 시기를 기다립니다.\n"
+"    \n"
+"    종료 상태:\n"
+"    최종 ID의 상태를 반환합니다. ID가 잘못되었거나 잘못된 옵션을 지정\n"
+"    했다든지, -n 옵션을 지정하고 셸에서 하위 프로세스를 기다리지 않는\n"
+"    다면 실패를 반환합니다."
 
-#: builtins.c:1533
+#: builtins.c:1534
 msgid ""
 "Wait for process completion and return exit status.\n"
 "    \n"
-"    Waits for each process specified by a PID and reports its termination "
-"status.\n"
+"    Waits for each process specified by a PID and reports its termination status.\n"
 "    If PID is not given, waits for all currently active child processes,\n"
 "    and the return status is zero.  PID must be a process ID.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns the status of the last PID; fails if PID is invalid or an "
-"invalid\n"
+"    Returns the status of the last PID; fails if PID is invalid or an invalid\n"
 "    option is given."
 msgstr ""
+"프로세스 처리 완료를 기다리고 종료 상태를 반환합니다.\n"
+"    \n"
+"    지정 <PID>의 각 프로세스를 기다리며, 종료 상태를 보고합니다.\n"
+"    <PID>를 지정하지 않으면 모든 현재 하위 활성 프로세스를 기다리며,\n"
+"    반환 상태는 0이 됩니다.  <PID>는 프로세스 ID여야 합니다.\n"
+"    \n"
+"    종료 상태:\n"
+"    최종 PID의 상태를 반환합니다. PID 값이 잘못되었거나,\n"
+"    부적절한 옵션을 지정하면 실패를 반환합니다."
 
-#: builtins.c:1548
+#: builtins.c:1549
 msgid ""
 "Execute commands for each member in a list.\n"
 "    \n"
@@ -3881,8 +4665,17 @@ msgid ""
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
+"목록 각 구성 요소의 명령을 실행합니다.\n"
+"    \n"
+"    `for' 반복문은 항목 목록 각 구성요소의 명령 목록을 실행합니다.\n"
+"    `in <단어> ...;' 식으로 나타나지 않으면, `in $@\"'으로 가정합니다.\n"
+"    <단어>의 각 요소에 대해 <이름>을 해당 요소에 설정하고,\n"
+"    <명령>을 실행합니다.\n"
+"    \n"
+"    종료 상태:\n"
+"    최종 명령 실행 상태를 반환합니다."
 
-#: builtins.c:1562
+#: builtins.c:1563
 msgid ""
 "Arithmetic for loop.\n"
 "    \n"
@@ -3898,8 +4691,21 @@ msgid ""
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
+"반복문의 산술 연산을 실행합니다.\n"
+"    \n"
+"    다음과 동일합니다\n"
+"    \t(( <표현식1> ))\n"
+"    \twhile (( <표현식2> )); do\n"
+"    \t\t <명령>\n"
+"    \t\t (( 표현식3 ))\n"
+"    \tdone\n"
+"    <표현식1>, <표현식2>, <표현식3> 은 산술 수식입니다.   어떤 수식이든 생략하면\n"
+"    1 값을 계산한걸로 간주합니다.\n"
+"    \n"
+"    종료 상태:\n"
+"    최종 명령 실행 상태를 반환합니다."
 
-#: builtins.c:1580
+#: builtins.c:1581
 msgid ""
 "Select words from a list and execute commands.\n"
 "    \n"
@@ -3918,8 +4724,22 @@ msgid ""
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
+"단어를 목록에서 선택하고 명령을 실행합니다.\n"
+"    \n"
+"    <단어>는 단어 목록을 만들 때 확장합니다.   확장 단어는 표준 오류에\n"
+"    출력하며, 출력행에 숫자가 붙습니다. 각 `in <단어>'가 없다면 `in \"$@\"'\n"
+"    를 고려합니다. 그 다음 PS3 프롬프트를 나타내고 표준 입력에서 \n"
+"    읽습니다. 표시 단어 중 하나의 숫자로 행을 구성했다면, <이름>\n"
+"    을 해당 단어에 설정합니다. 행이 비어있으면, <단어>와 프롬프트는\n"
+"    다시 나타납니다.  EOF (파일 끝)을 읽으면, 명령 실행이 끝납니다.\n"
+"    다른 값을 읽으면 <이름>을 null로 설정할 수도 있습니다.  읽은 행은\n"
+"    REPLY 변수에 저장합니다. <명령>은 break 명령을 실행하기 전까지\n"
+"    각 선택 때마다 실행합니다.\n"
+"    \n"
+"    종료 상태:\n"
+"    마지막 명령 실행 상태를 반환합니다."
 
-#: builtins.c:1601
+#: builtins.c:1602
 msgid ""
 "Report time consumed by pipeline's execution.\n"
 "    \n"
@@ -3934,8 +4754,20 @@ msgid ""
 "    Exit Status:\n"
 "    The return status is the return status of PIPELINE."
 msgstr ""
+"파이프라인 실행의 소요 시간을 보고합니다.\n"
+"    \n"
+"    <파이프라인>을 실행한 후 파이프라인이 멈췄을 때, <파이프라인> 실행에\n"
+"    걸린 실제 시간, 사용자 CPU 시간, 시스템 CPU 시간 요약 내용을 출력합니다.\n"
+"    \n"
+"    옵션:\n"
+"      -p\t이식성이 있는 POSIX 형식의 타이밍 요약 내용을 출력합니다.\n"
+"    \n"
+"    TIMEFORMAT 변수의 값은 출력 형식에 활용합니다.\n"
+"    \n"
+"    종료 상태:\n"
+"    <파이프라인>의 반환 상태가 곧 반환 상태 입니다."
 
-#: builtins.c:1618
+#: builtins.c:1619
 msgid ""
 "Execute commands based on pattern matching.\n"
 "    \n"
@@ -3945,51 +4777,76 @@ msgid ""
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
+"패턴 일치에 기반하여 명령을 실행합니다.\n"
+"    \n"
+"    <패턴>에 일치하는 <단어> 기반으로 <명령>을 별도로 실행합니다.\n"
+"    `|' 문자로 여러 패턴을 나눌 수 있습니다.\n"
+"    \n"
+"    종료 상태:\n"
+"    최종 명령 실행 상태를 반환합니다."
 
-#: builtins.c:1630
+#: builtins.c:1631
 msgid ""
 "Execute commands based on conditional.\n"
 "    \n"
-"    The `if COMMANDS' list is executed.  If its exit status is zero, then "
-"the\n"
-"    `then COMMANDS' list is executed.  Otherwise, each `elif COMMANDS' list "
-"is\n"
+"    The `if COMMANDS' list is executed.  If its exit status is zero, then the\n"
+"    `then COMMANDS' list is executed.  Otherwise, each `elif COMMANDS' list is\n"
 "    executed in turn, and if its exit status is zero, the corresponding\n"
-"    `then COMMANDS' list is executed and the if command completes.  "
-"Otherwise,\n"
-"    the `else COMMANDS' list is executed, if present.  The exit status of "
-"the\n"
-"    entire construct is the exit status of the last command executed, or "
-"zero\n"
+"    `then COMMANDS' list is executed and the if command completes.  Otherwise,\n"
+"    the `else COMMANDS' list is executed, if present.  The exit status of the\n"
+"    entire construct is the exit status of the last command executed, or zero\n"
 "    if no condition tested true.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
+"조건 기반으로 명령을 실행합니다.\n"
+"    \n"
+"    `if <명령>' 목록을 실행합니다.  종료 상태값이 0이면, `then <명령>'\n"
+"    목록도 실행합니다.  아니면, `elif <명령>' 목록도 실행하며, 종료 상태\n"
+"    값이 0이면 관련 `then <명령>' 목록을 실행하여 if 명령의 처리가 끝\n"
+"    납니다.  위 과정에 만족하지 않으면 `else <명령>' 목록이 있을 경우\n"
+"    실행합니다.  전체 명령 구성의 종료 상태 값은 최종 명령 실행 종료\n"
+"    상태값이며, 또는 어떤 조건에서도 참이 아닌 경우 0이 됩니다.\n"
+"    \n"
+"    종료 상태:\n"
+"    최종 명령 실행 상태 값을 반환합니다."
 
-#: builtins.c:1647
+#: builtins.c:1648
 msgid ""
 "Execute commands as long as a test succeeds.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `while' COMMANDS has an exit status of zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n"
+"    an exit status of zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
+"테스트에 성공하는 동안 명령을 실행합니다.\n"
+"    \n"
+"    <명령>의 최종 명령 종료 상태가 0인 동안 <명령-2>로 확장 실행합니다.\n"
+"    \n"
+"    종료 상태:\n"
+"    최종 명령 상태를 반환합니다."
 
-#: builtins.c:1659
+#: builtins.c:1660
 msgid ""
 "Execute commands as long as a test does not succeed.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `until' COMMANDS has an exit status which is not zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n"
+"    an exit status which is not zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
+"테스트에 실패하는 동안 명령을 실행합니다.\n"
+"    \n"
+"    <명령>의 최종 명령 종료 상태가 0이 아니면 <명령-2>로 확장 실행합니다.\n"
+"    \n"
+"    종료 상태:\n"
+"    최종 명령 실행 상태를 반환합니다."
 
-#: builtins.c:1671
+#: builtins.c:1672
 msgid ""
 "Create a coprocess named NAME.\n"
 "    \n"
@@ -4001,22 +4858,37 @@ msgid ""
 "    Exit Status:\n"
 "    The coproc command returns an exit status of 0."
 msgstr ""
+"<이름>으로 병행 프로세스를 만듭니다.\n"
+"    \n"
+"    <명령>을 비동기 실행합니다. 명령의 표준 출력과 표준 입력은 실행하는 \n"
+"    셸에서 배열 변수 <이름>의 색인 0번과 1번에 할당한 파일 서술자와\n"
+"    파이프로 연결합니다. 기본 <이름>은 \"COPROC\" 입니다.\n"
+"    \n"
+"    종료 상태:\n"
+"    coproc 명령이 종료 상태 0을 반환합니다."
 
-#: builtins.c:1685
+#: builtins.c:1686
 msgid ""
 "Define shell function.\n"
 "    \n"
 "    Create a shell function named NAME.  When invoked as a simple command,\n"
-"    NAME runs COMMANDs in the calling shell's context.  When NAME is "
-"invoked,\n"
+"    NAME runs COMMANDs in the calling shell's context.  When NAME is invoked,\n"
 "    the arguments are passed to the function as $1...$n, and the function's\n"
 "    name is in $FUNCNAME.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns success unless NAME is readonly."
 msgstr ""
+"셸 함수를 정의합니다.\n"
+"    \n"
+"    <이름>을 가진 셸 함수를 만듭니다.  단순 명령으로 실행할 경우, <이름>은\n"
+"    셸 컨텍스트를 호출할 때 <명령>을 실행합니다.  <이름>을 실행하면, 함수에\n"
+"    전달하는 인자는 $1,...$N 이며, 함수 이름은 $FUNCNAME이 됩니다.\n"
+"    \n"
+"    종료 상태:\n"
+"    <이름>이 읽기 전용이 아니라면 참을 반환합니다."
 
-#: builtins.c:1699
+#: builtins.c:1700
 msgid ""
 "Group commands as a unit.\n"
 "    \n"
@@ -4026,8 +4898,15 @@ msgid ""
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
+"여러 명령을 단위로 묶습니다.\n"
+"    \n"
+"    여러 명령을 그룹 하나로 묶어 실행합니다.  명령 전체를 방향재지정\n"
+"    처리하는 방법 중 하나입니다.\n"
+"    \n"
+"    종료 상태:\n"
+"    최종 명령 실행 상태를 반환합니다."
 
-#: builtins.c:1711
+#: builtins.c:1712
 msgid ""
 "Resume job in foreground.\n"
 "    \n"
@@ -4040,8 +4919,17 @@ msgid ""
 "    Exit Status:\n"
 "    Returns the status of the resumed job."
 msgstr ""
+"포그라운드의 작업을 재개합니다.\n"
+"    \n"
+"    `fg' 명령의 JOB_SPEC 인자와 동일합니다.  멈춘 작업 또는 백그라운드\n"
+"    작업을 재개합니다.  JOB_SPEC은 작업 이름 또는 작업 번호를 지정할 수\n"
+"    있습니다.  JOB_SPEC 다음에 `&'를 입력하여 백그라운드에서 실행하게\n"
+"    합니다. `bg' 인자로 지정할 때처럼 작업 명세를 지정합니다.\n"
+"    \n"
+"    종료 상태:\n"
+"    재개한 작업의 상태를 반환합니다."
 
-#: builtins.c:1726
+#: builtins.c:1727
 msgid ""
 "Evaluate arithmetic expression.\n"
 "    \n"
@@ -4051,17 +4939,20 @@ msgid ""
 "    Exit Status:\n"
 "    Returns 1 if EXPRESSION evaluates to 0; returns 0 otherwise."
 msgstr ""
+"산술 연산을 수행합니다.\n"
+"    \n"
+"    <표현식>은 산술 연산 규칙에 따라 실행합니다. `let \"<표현식>\"'과 동일합니다.\n"
+"    \n"
+"    종료 상태:\n"
+"    <표현식> 결과가 0이면 1을 반환하고 그렇지 않으면 0을 반환합니다."
 
-#: builtins.c:1738
+#: builtins.c:1739
 msgid ""
 "Execute conditional command.\n"
 "    \n"
-"    Returns a status of 0 or 1 depending on the evaluation of the "
-"conditional\n"
-"    expression EXPRESSION.  Expressions are composed of the same primaries "
-"used\n"
-"    by the `test' builtin, and may be combined using the following "
-"operators:\n"
+"    Returns a status of 0 or 1 depending on the evaluation of the conditional\n"
+"    expression EXPRESSION.  Expressions are composed of the same primaries used\n"
+"    by the `test' builtin, and may be combined using the following operators:\n"
 "    \n"
 "      ( EXPRESSION )\tReturns the value of EXPRESSION\n"
 "      ! EXPRESSION\t\tTrue if EXPRESSION is false; else false\n"
@@ -4079,8 +4970,28 @@ msgid ""
 "    Exit Status:\n"
 "    0 or 1 depending on value of EXPRESSION."
 msgstr ""
+"조건 명령을 수행합니다.\n"
+"    \n"
+"    <표현식>의 조건문 수행의 처리 결과에 따라 상태값을 0 또는 1로 반환합니다.\n"
+"    표현식은 `test' 내장 명령에서 활용하는 동일한 규칙에 따라 작성하며,\n"
+"    다음 연산자로 결합합니다:\n"
+"    ( <표현식> )\t<표현식>의 값을 반환\n"
+"    ! <표현식>\t\t <표현식> 결과가 거짓이면 참을, 그렇지 않으면 거짓을 반환\n"
+"    <표현식1> && <표현식2>\t\t<표현식1>과 <표현식2>가 모두 참이면 참을\n"
+"    \t\t\t\t그렇지 않으면 거짓을 반환\n"
+"    <표현식1> || <표현식2>\t\t<표현식1> 또는 <표현식2> 둘 중 하나가 참이면 참을\n"
+"    \t\t\t\t그렇지 않으면 거짓을 반환\n"
+"    \n"
+"    `=='과 `!=' 연산자를 사용한다면 우항의 문자열은 패턴으로 활용하며, 패턴 검사를\n"
+"    수행합니다. `=~' 연산자를 사용할 때는 우항의 문자열은 정규표현식으로 간주합니다.\n"
+"    \n"
+"     && 연산자와 || 연산자는 <표현식1>이 표현식 값을 내는데 충분하다면 <표현식2>를\n"
+"    처리하지는 않습니다.\n"
+"    \n"
+"    종료 상태:\n"
+"    <표현식> 값에 따라 0 또는 1을 반환합니다."
 
-#: builtins.c:1764
+#: builtins.c:1765
 msgid ""
 "Common shell variable names and usage.\n"
 "    \n"
@@ -4133,8 +5044,54 @@ msgid ""
 "    HISTIGNORE\tA colon-separated list of patterns used to decide which\n"
 "    \t\tcommands should be saved on the history list.\n"
 msgstr ""
-
-#: builtins.c:1821
+"일반 셸 변수 이름과 사용법입니다.\n"
+"    \n"
+"    BASH_VERSION\t배시 버전 정보입니다.\n"
+"    CDPATH\t`cd' 인자처럼 디렉터리 검색에 주어지는 콜론으로 구분한\n"
+"    \t\t디렉터리 목록입니다.\n"
+"    GLOBIGNORE\t경로 이름을 확장하여 무시할 콜론 이름으로 구분한 파일 이름\n"
+"    \t\t특징 패턴 목록입니다.\n"
+"    HISTFILE\t명령을 기록에 저장하는 파일 이름입니다.\n"
+"    HISTFILESIZE\t파일에 넣을 수 있는 최대 줄 수 입니다.\n"
+"    HISTSIZE\t동작 중인 셸에서 접근할 수 있는 최대 기록 줄 수 입니다.\n"
+"    HOME\t로그인 후 접근하는 완전한 경로 이름입니다.\n"
+"    HOSTNAME\t현재 호스트 이름입니다.\n"
+"    HOSTTYPE\t이 배시 버전이 실행하고 있는 시스템의 CPU 형식입니다.\n"
+"    IGNOREEOF\n"
+"EOF 문자 입력을 유일한 입력으로 받는 셸의 동작을\n"
+"    \t\t제어합니다.  설정하면, 이 변수의 값은 셸을 나가기\n"
+"    \t\t전 빈 줄에 한줄로 나타낼 EOF 문자 수 입니다 (기본 10개).\n"
+"    \t\t설정을 해제하면, EOF는 입력 끝을 나타냅니다.\n"
+"    MACHTYPE\t현재 배시를 실행하고 있는 시스템을 설명하는 문자열입니다.\n"
+"    MAILCHECK\t배시에서 새 메일을 확인하는 초단위 빈도 시간입니다.\n"
+"    MAILPATH\t배시에서 새 메일을 확인할 콜론 구분 파일 목록입니다.\n"
+"    OSTYPE\t이 배시 버전을 실행하고 있는 유닉스 버전입니다.\n"
+"    PATH\t명령을 찾을 때 검색할 콜론 구분 디렉터리 목록입니다.\n"
+"    PROMPT_COMMAND\t각 기본 프롬프트를 출력하기 전에 실행할\n"
+"    \t\t명령입니다.\n"
+"    PS1\t\t기본 프롬프트 문자열입니다.\n"
+"    PS2\t\t2차 프롬프트 문자열입니다.\n"
+"    PWD\t\t현재 디렉터리의 전체 경로 이름 입니다.\n"
+"    SHELLOPTS\t콜론으로 구분한 활성 셸 옵션 목록입니다.\n"
+"    TERM\t현재 터미널 형식 이름입니다.\n"
+"    TIMEFORMAT\t`time' 역방향 단어로 표시하는 시간 통계의\n"
+"    \t\t출력 형식입니다.\n"
+"    <자동_재개>\tnull 값이 아니라면 자체에서 나타내는 명령행을\n"
+"    \t\t먼저 나타내고, 현재 멈춘 작업 목록의 첫번째 확인 요소임을\n"
+"    \t\t의미합니다.  이 상태가 나타나면 작업을 포 그라운드에서\n"
+"    \t\t실행헙니다. `exact' 값은 명령 단어가 멈춘 작업 목록의\n"
+"    \t\t명령과 정확히 일치해야 함을 의미합니다.\n"
+"    \t\t`substring' 값은 명령 단어가 작업의 부분 문자열과\n"
+"    \t\t일치해야 하는 의미를 담고 있습니다.  다른 값은\n"
+"    \t\t명령이 멈춘 작업의 접두어여야 하는 의미를 담고 있습니다.\n"
+"    <기록 문자>\t기록 확장과 빠른 대체를 제어하는 문자입니다.\n"
+"    \t\t첫번째는 기록 제거 문자로, 보통 `!'을 활용합니다.\n"
+"    \t\t두번째는 보통 `^'으로 표기하는 `빠른 대체문자' 입니다.\n"
+"    \t\t세번째는 `기록 주석' 문자로 보통 `#'으로 표기합니다.\n"
+"    HISTIGNORE\t어떤 명령을 기록 목록에 저장해야 하는지 판단할 때\n"
+"    \t\t활용하는 콜론 구분 패턴 목록입니다.\n"
+
+#: builtins.c:1822
 msgid ""
 "Add directories to stack.\n"
 "    \n"
@@ -4164,8 +5121,33 @@ msgid ""
 "    Returns success unless an invalid argument is supplied or the directory\n"
 "    change fails."
 msgstr ""
+"디렉터리를 스택에 추가합니다.\n"
+"    \n"
+"    디렉터리를 디렉터리 스택 상단에 추가하거나, 스택을 돌리거나,\n"
+"    스택의 새 상단에 현재 작업 디렉터리를 둡니다. 인자를 지정하지\n"
+"    않으면 상단 디렉터리 둘을 바꿉니다.\n"
+"    \n"
+"    옵션:\n"
+"      -n\t스택에 디렉터리를 추가할 때 디렉터리 일반 변경 동작을\n"
+"    \t\t막은 상태에서, 스택만 다루게 합니다.\n"
+"    \n"
+"    인자:\n"
+"      +N\t`dirs' 내장 명령에 나타난 항목을 0부터 시작해서 왼쪽부터\n"
+"    \t\t세어 N번째 항목을 스택의 최상단에 오도록 회전합니다.\n"
+"    \n"
+"      -N\t`dirs' 내장 명령에 나타난 항목을 0부터 시작해서 오른쪽부터\n"
+"    \t\t세어 N번째 항목을 스택의 최상단에 오도록 회전합니다.\n"
+"    \n"
+"      <디렉터리>\t<디렉터리>를 스택 상단에 추가하여 새 현재 작업\n"
+"    \t\t디렉터리로 지정합니다.\n"
+"    \n"
+"    `dirs' 내장 명령은 디렉터리 스택을 표시합니다.\n"
+"    \n"
+"    종료 상태:\n"
+"    적절한 인자를 지정하고 디렉터리 변경에 성공하면 성공을 반환\n"
+"    합니다."
 
-#: builtins.c:1855
+#: builtins.c:1856
 msgid ""
 "Remove directories from stack.\n"
 "    \n"
@@ -4191,8 +5173,32 @@ msgid ""
 "    Returns success unless an invalid argument is supplied or the directory\n"
 "    change fails."
 msgstr ""
+"스택에서 디렉터리를 제거합니다.\n"
+"    \n"
+"    디렉터리 스택에서 항목을 제거합니다.  인자를 지정하지 않으면,\n"
+"    스택의 상단 디렉터리를 제거하며, 새 상단 디렉터리로 바꿉니다.\n"
+"    \n"
+"    옵션:\n"
+"      -n\t스택에서 디렉터리를 제거할 때 디렉터리 일반 변경동작을\n"
+"    \t\t막아 스택만 처리하게합니다.\n"
+"    \n"
+"    인자:\n"
+"      +N\t0부터 시작해서 `dirs' 내장 명령에 나타난 항목을 왼쪽부터\n"
+"    \t\t세어 N번째 항목을 제거합니다. 예를 들어 `popd +0' 명령은\n"
+"    \t\t처음 디렉터리를 `popd +1' 명령은  두번째 디렉터리를\n"
+"    \t\t제거합니다.\n"
+"      -N\t0부터 시작해서 `dirs' 내장 명령에 나타난 항목을 오른쪽부터\n"
+"    \t\t세어 N번째 항목을 제거합니다. 예를 들어 `popd -0' 명령은\n"
+"    \t\t마지막 디렉터리를 `popd -1' 명령은 마지막에서 두번째의\n"
+"    \t\t디렉터리를 제거합니다.\n"
+"    \n"
+"    `dirs' 내장 명령은 디렉터리 스택을 보여줍니다.\n"
+"    \n"
+"    종료 상태:\n"
+"    적절한 인자를 지정했거나 디렉터리를 제대로 이동했다면\n"
+"    성공을 반환합니다.전"
 
-#: builtins.c:1885
+#: builtins.c:1886
 msgid ""
 "Display directory stack.\n"
 "    \n"
@@ -4220,31 +5226,28 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless an invalid option is supplied or an error occurs."
 msgstr ""
-"ë\94\94ë \89í\86 ë¦¬ ì\8a¤í\83\9dì\9d\84 ë³´ì\97¬ì¤\8d니다.\n"
+"ë\94\94ë \89í\84°ë¦¬ ì\8a¤í\83\9dì\9d\84 í\91\9cì\8b\9cí\95©니다.\n"
 "    \n"
-"    현재 기억된 디렉토리의 목록을 보여줍니다.  디렉토리들은\n"
-"    `pushd' ëª\85ë ¹ì\9d\84 í\86µí\95´ ëª©ë¡\9dì\97\90 ê²½ë¡\9c를 ì \80ì\9e¥í\95  ì\88\98 ì\9e\88ê³ ; 'popd' \n"
-"    ëª\85ë ¹ì\9d\84 í\86µí\95´ 거슬러 올라갈 수 있습니다.\n"
+"    현재 기억한 디렉터리 목록을 보여줍니다.  디렉터리는\n"
+"    `pushd' ëª\85ë ¹ì\9c¼ë¡\9c ëª©ë¡\9dì\97\90 ê²½ë¡\9c를 ì \80ì\9e¥í\95  ì\88\98 ì\9e\88ê³ , 'popd' \n"
+"    ëª\85ë ¹ì\9c¼ë¡\9c 거슬러 올라갈 수 있습니다.\n"
 "    \n"
 "    옵션:\n"
-"      -c\tì\9b\90ì\86\8c를 ì \84ë¶\80 ì\82­ì \9cí\95¨ì\9c¼ë¡\9cì\8d¨ ë\94\94ë \89í\86 리 스택을 초기화합니다\n"
-"      -l\tí\99\88 ë\94\94ë \89í\86 리까지 ~로 축약된 상대경로를 표시하지 않습니다\n"
-"      -p\tí\95\9c ì¤\84ì\97\90 í\95\98ë\82\98ì\94© ë\94\94ë \89í\86 리 스택을 표시합니다\n"
-"      -v\t한 줄에 하나씩 스택의 위치와 함께 디렉토리 스택을 표시합니다\n"
+"      -c\tì\9b\90ì\86\8c를 ì \84ë¶\80 ì\82­ì \9cí\95¨ì\9c¼ë¡\9cì\8d¨ ë\94\94ë \89í\84°리 스택을 초기화합니다\n"
+"      -l\tí\99\88 ë\94\94ë \89í\84°리까지 ~로 축약된 상대경로를 표시하지 않습니다\n"
+"      -p\tí\95\9c ì¤\84ì\97\90 í\95\98ë\82\98ì\94© ë\94\94ë \89í\84°리 스택을 표시합니다\n"
+"      -v\t한 줄에 하나씩 스택의 위치 및 디렉터리 스택을 표시합니다\n"
 "    \n"
 "    인자:\n"
-"      +N\t인자 없이 실행될 때 보여지는 목록의 왼쪽부터 N번째 항목을 보여줍니"
-"다.\n"
+"      +N\t인자 없이 실행될 때 보여지는 목록의 왼쪽부터 N번째 항목을 보여줍니다.\n"
 "    \t세는 수는 0부터 시작합니다.\n"
 "    \n"
-"      -N\t인자 없이 실행될 때 보여지는 목록의 오른쪽부터 N번째 항목을 보여줍"
-"니다.\n"
+"      -N\t인자 없이 실행될 때 보여지는 목록의 오른쪽부터 N번째 항목을 보여줍니다.\n"
 "\t세는 수는 0부터 시작합니다.\n"
 "    종료 상태:\n"
-"    유효하지 않은 옵션이 주어지거나 오류가 발생하지 않는다면 성공을 반환합니"
-"다."
+"    부적절한 옵션이 주어지거나 오류가 발생하지 않는다면 성공을 반환합니다."
 
-#: builtins.c:1916
+#: builtins.c:1917
 msgid ""
 "Set and unset shell options.\n"
 "    \n"
@@ -4263,8 +5266,24 @@ msgid ""
 "    Returns success if OPTNAME is enabled; fails if an invalid option is\n"
 "    given or OPTNAME is disabled."
 msgstr ""
+"셸 옵션을 설정 또는 해제합니다.\n"
+"    \n"
+"    <옵션이름> 셸 옵션의 설정을 바꿉니다. 어떤 옵션 인자도 지정하지 않으면\n"
+"    <옵션이름>에 지정한 항목을 보여주거나, <옵션이름>이 없을 경우 모든\n"
+"    셸 옵션을 보여주든지 설정 여부를 함께 나타냅니다.\n"
+"    \n"
+"    옵션:\n"
+"      -o\t`set -o'로 지정한 <옵션이름>으로 제한합니다\n"
+"      -p\t각 셸 옵션과 상태를 출력합니다\n"
+"      -q\t출력을 끕니다\n"
+"      -s\t각 <옵션이름>을 사용합니다 (설정)\n"
+"      -u\t각 <옵션이름>을 사용하지 않습니다 (설정해제)\n"
+"    \n"
+"    종료 상태:\n"
+"    <옵션이름>을 활성화했다면 성공을 반환합니다. 부적절한 옵션을\n"
+"    지정했거나 <옵션이름>을 사용하지 않으면 실패를 반환합니다."
 
-#: builtins.c:1937
+#: builtins.c:1938
 msgid ""
 "Formats and prints ARGUMENTS under control of the FORMAT.\n"
 "    \n"
@@ -4272,45 +5291,63 @@ msgid ""
 "      -v var\tassign the output to shell variable VAR rather than\n"
 "    \t\tdisplay it on the standard output\n"
 "    \n"
-"    FORMAT is a character string which contains three types of objects: "
-"plain\n"
-"    characters, which are simply copied to standard output; character "
-"escape\n"
+"    FORMAT is a character string which contains three types of objects: plain\n"
+"    characters, which are simply copied to standard output; character escape\n"
 "    sequences, which are converted and copied to the standard output; and\n"
-"    format specifications, each of which causes printing of the next "
-"successive\n"
+"    format specifications, each of which causes printing of the next successive\n"
 "    argument.\n"
 "    \n"
-"    In addition to the standard format specifications described in "
-"printf(1),\n"
+"    In addition to the standard format specifications described in printf(1),\n"
 "    printf interprets:\n"
 "    \n"
 "      %b\texpand backslash escape sequences in the corresponding argument\n"
 "      %q\tquote the argument in a way that can be reused as shell input\n"
-"      %(fmt)T\toutput the date-time string resulting from using FMT as a "
-"format\n"
+"      %Q\tlike %q, but apply any precision to the unquoted argument before\n"
+"    \t\tquoting\n"
+"      %(fmt)T\toutput the date-time string resulting from using FMT as a format\n"
 "    \t        string for strftime(3)\n"
 "    \n"
 "    The format is re-used as necessary to consume all of the arguments.  If\n"
 "    there are fewer arguments than the format requires,  extra format\n"
-"    specifications behave as if a zero value or null string, as "
-"appropriate,\n"
+"    specifications behave as if a zero value or null string, as appropriate,\n"
 "    had been supplied.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success unless an invalid option is given or a write or "
-"assignment\n"
+"    Returns success unless an invalid option is given or a write or assignment\n"
 "    error occurs."
 msgstr ""
+"<형식>에 따라 <인자>를 구성하고 출력합니다.\n"
+"    \n"
+"    옵션:\n"
+"      -v <변수>\t표준 출력에 나타내는 대신 셸 <변수>에 할당합니다.\n"
+"    \n"
+"    <형식>은 세가지 형식의 객체가 들어간 문자열입니다. 표준 출력에 그냥\n"
+"    복사하는 일반 문자, 표준 출력에 변환하여 복사하는 문자 이스케이핑 시퀀스,\n"
+"    그리고 다음 뒤따라오는 인자를 형식에 맞춰 출력하는 형식 지정자가 바로\n"
+"    세가지 형식 입니다.\n"
+"    \n"
+"    게다가 printf(1)에 표준 형식 지정자에서 printf는 다음과 같이 해석합니다:\n"
+"    \n"
+"      %b\t관련 인자의 백슬래시 이스케이프 시퀀스를 확장합니다\n"
+"      %q\t셸 입력으로 다시 사용할 수 있도록 변수를 따옴표 처리합니다\n"
+"      %Q\t%q와 비슷하지만, 따옴표 처리하기 전의 인자에 정빌도를 적용합니다\n"
+"      %(fmt)T\tstrftime(3)의 형식 문자열로 <형식>을 사용하도록 날짜-시간\n"
+"    \t        문자열을 출력합니다\n"
+"    \n"
+"    형식은 모든 인자에 대해 필요한대로 재활용합니다. 필요한 형식보다\n"
+"    적은 인자를 지정했다면,  추가 형식 지정 부분에 대해 적당하게 널 문자열\n"
+"    이 들어간 것처럼 처리해줍니다.\n"
+"    \n"
+"    종료 상태:\n"
+"    적절한 옵션을 설정했거나 기록, 할당 오류가 나타나지 않으면 성공을\n"
+"    반환합니다."
 
-#: builtins.c:1971
+#: builtins.c:1974
 msgid ""
 "Specify how arguments are to be completed by Readline.\n"
 "    \n"
-"    For each NAME, specify how arguments are to be completed.  If no "
-"options\n"
-"    are supplied, existing completion specifications are printed in a way "
-"that\n"
+"    For each NAME, specify how arguments are to be completed.  If no options\n"
+"    are supplied, existing completion specifications are printed in a way that\n"
 "    allows them to be reused as input.\n"
 "    \n"
 "    Options:\n"
@@ -4325,38 +5362,61 @@ msgid ""
 "    \t\tcommand) word\n"
 "    \n"
 "    When completion is attempted, the actions are applied in the order the\n"
-"    uppercase-letter options are listed above. If multiple options are "
-"supplied,\n"
-"    the -D option takes precedence over -E, and both take precedence over -"
-"I.\n"
+"    uppercase-letter options are listed above. If multiple options are supplied,\n"
+"    the -D option takes precedence over -E, and both take precedence over -I.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns success unless an invalid option is supplied or an error occurs."
 msgstr ""
+"readline에서 인자를 어떻게 완성 처리할 지 지정합니다.\n"
+"    \n"
+"    각 <이름>에 대해 인자를 어떻게 완성할 지 지정합니다.  옵션을 지정하지\n"
+"    않으면, 입력할 때 다시 활용할 수 있게 하는 방식으로 기존 완성 명세를\n"
+"    출력합니다.\n"
+"    \n"
+"    옵션:\n"
+"      -p\t기존 완성 명세를 재사용 형식으로 출력합니다\n"
+"      -r\t각 <이름>별 완성 명세를 제거하거나, <이름>을 지정하지 않았다면\n"
+"    \t\t모든 완성 명세를 제거합니다\n"
+"      -D\t어떤 개별 완성 명세 없이 명령에 대해 기본 완성 명세와 동작을\n"
+"    \t\t적용합니다\n"
+"      -E\t\"빈\" 명령에 대해 완성 명세와 동작을 적용합니다 -- 빈 줄 상태에서\n"
+"    \t\t완성 동작을 시도합니다\n"
+"      -I\t초기 단어(보통 명령) 완성 명세와 동작을 적용합니다\n"
+"    \n"
+"    완성 동작을 시도할 때 상단에 대문자 옵션 순서대로 동작을 적용합니다. 여러\n"
+"    옵션을 지정하면 -D 옵션은 -E 옵션보다 우선하며, 두 옵션은 -I 옵션보다\n"
+"    우선합니다.\n"
+"    \n"
+"    종료 상태:\n"
+"    적절한 옵션을 지정했거나 오류가 발생하지 않으면 성공을 반환합니다."
 
-#: builtins.c:2001
+#: builtins.c:2004
 msgid ""
 "Display possible completions depending on the options.\n"
 "    \n"
 "    Intended to be used from within a shell function generating possible\n"
-"    completions.  If the optional WORD argument is supplied, matches "
-"against\n"
+"    completions.  If the optional WORD argument is supplied, matches against\n"
 "    WORD are generated.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns success unless an invalid option is supplied or an error occurs."
 msgstr ""
+"옵션에 따라 가능한 완성 명세를 표시합니다.\n"
+"    \n"
+"    가능한 완성 명세를 만드는 셸 함수에서 사용하도록 의도했습니다.\n"
+"    추가 <단어> 인자를 지정하면, <단어>에 일치하는 항목을 만듭니다.\n"
+"    \n"
+"    종료 상태:\n"
+"    적절한 옵션을 지정했거나 오류가 없으면 성공을 반환합니다."
 
-#: builtins.c:2016
+#: builtins.c:2019
 msgid ""
 "Modify or display completion options.\n"
 "    \n"
-"    Modify the completion options for each NAME, or, if no NAMEs are "
-"supplied,\n"
-"    the completion currently being executed.  If no OPTIONs are given, "
-"print\n"
-"    the completion options for each NAME or the current completion "
-"specification.\n"
+"    Modify the completion options for each NAME, or, if no NAMEs are supplied,\n"
+"    the completion currently being executed.  If no OPTIONs are given, print\n"
+"    the completion options for each NAME or the current completion specification.\n"
 "    \n"
 "    Options:\n"
 "    \t-o option\tSet completion option OPTION for each NAME\n"
@@ -4378,27 +5438,46 @@ msgid ""
 "    Returns success unless an invalid option is supplied or NAME does not\n"
 "    have a completion specification defined."
 msgstr ""
+"자동 완성 옵션을 수정하거나 표시합니다.\n"
+"\n"
+"    각 <이름> 별로 자동 완성 옵션을 수정하거나, 지정 <이름>이 없다면,\n"
+"    현재 실행하는 명령의 자동완성 옵션을 수정합니다.  주어진 <옵션>이 없다면\n"
+"    각 <이름> 별 자동 완성 옵션을 출력하거나 현재 자동 완성 명세를 출력합니다.\n"
+"    \n"
+"    옵션:\n"
+"    \t-o <옵션>\t각 <이름>별 <옵션>을 설정합니다\n"
+"    \t-D\t\t\"기본\"  명령 자동 완성 옵션을 바꿉니다\n"
+"    \t-E\t\t\"빈\" 명령 자동 완성 옵션을 바꿉니다\n"
+"    \t-I\t\t초기 단어의 자동 완성 옵션을 바꿉니다\n"
+"    \n"
+"    지정 옵션을 끄는 `-o' 대신 `+o'를 사용하십시오.\n"
+"    \n"
+"    인자:\n"
+"    \n"
+"    각 <이름>은 `complete' 내장 명령으로 앞서 지정해야 하는 자동 완성\n"
+"    명세 명령을 참조합니다. <이름>이 없다면 현재 자동 완성 규칙을 생성하는\n"
+"    compopt를 호출해야 하며, 현재 실행하는 자동 완성 생성자의 옵션도\n"
+"    역시 마찬가지로 수정해야합니다.\n"
+"    \n"
+"    종료 상태:\n"
+"    부적절한 옵션을 지정하지 않았거나 <이름>에 자동 완성 명세를 지정했다면\n"
+"    성공을 반환합니다."
 
-#: builtins.c:2047
+#: builtins.c:2050
 msgid ""
 "Read lines from the standard input into an indexed array variable.\n"
 "    \n"
-"    Read lines from the standard input into the indexed array variable "
-"ARRAY, or\n"
-"    from file descriptor FD if the -u option is supplied.  The variable "
-"MAPFILE\n"
+"    Read lines from the standard input into the indexed array variable ARRAY, or\n"
+"    from file descriptor FD if the -u option is supplied.  The variable MAPFILE\n"
 "    is the default ARRAY.\n"
 "    \n"
 "    Options:\n"
 "      -d delim\tUse DELIM to terminate lines, instead of newline\n"
-"      -n count\tCopy at most COUNT lines.  If COUNT is 0, all lines are "
-"copied\n"
-"      -O origin\tBegin assigning to ARRAY at index ORIGIN.  The default "
-"index is 0\n"
+"      -n count\tCopy at most COUNT lines.  If COUNT is 0, all lines are copied\n"
+"      -O origin\tBegin assigning to ARRAY at index ORIGIN.  The default index is 0\n"
 "      -s count\tDiscard the first COUNT lines read\n"
 "      -t\tRemove a trailing DELIM from each line read (default newline)\n"
-"      -u fd\tRead lines from file descriptor FD instead of the standard "
-"input\n"
+"      -u fd\tRead lines from file descriptor FD instead of the standard input\n"
 "      -C callback\tEvaluate CALLBACK each time QUANTUM lines are read\n"
 "      -c quantum\tSpecify the number of lines read between each call to\n"
 "    \t\t\tCALLBACK\n"
@@ -4411,17 +5490,47 @@ msgid ""
 "    element to be assigned and the line to be assigned to that element\n"
 "    as additional arguments.\n"
 "    \n"
-"    If not supplied with an explicit origin, mapfile will clear ARRAY "
-"before\n"
+"    If not supplied with an explicit origin, mapfile will clear ARRAY before\n"
 "    assigning to it.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success unless an invalid option is given or ARRAY is readonly "
-"or\n"
+"    Returns success unless an invalid option is given or ARRAY is readonly or\n"
 "    not an indexed array."
 msgstr ""
+"표준 입력을 읽어 색인 배열 변수에 대입합니다.\n"
+"    \n"
+"    표준 입력에서 행을 읽어 색인 <배열> 변수에 넣거나 -u 옵션을 지정하여\n"
+"    <파일서술자>에서 행을 읽어 색인 <배열> 변수에 넣습니다.  <매핑파일>\n"
+"    변수는 기본적으로 <배열> 취급합니다.\n"
+"    \n"
+"    옵션:\n"
+"    -d <구분자>\t개행 문자 대신 <구분자>로 행을 끊습니다.\n"
+"    -n <갯수>\t\t<갯수>만큼 행을 읽습니다. <갯수> 값이 0이면\n"
+"            \t\t 모든 행을 복사합니다.\n"
+"    -O <시작>\t\t<시작> 인덱스에 <배열> 할당을 시작합니다.\n"
+"            \t\t기본 인덱스는 0 입니다.\n"
+"    -s <갯수>\t\t처음 <갯수>만큼 읽은 행을 무시합니다\n"
+"    -t\t\t읽은 각 행 끝에 뒤다라오는 <구분자>를 제거합니다\n"
+"           \t\t(기본 값은 개행 문자)\n"
+"    -u <파일서술자>\t표준 입력 대신 <파일서술자>에서 행을 읽습니다\n"
+"    -C <콜백>\t\t<양자> 행을 읽을 때마다 실행할 <콜백> 입니다\n"
+"    -c <양자>\t\t<콜백>을 실행할 때마다 읽을 행 갯수를 지정합니다\n"
+"    \n"
+"    인자:\n"
+"      <배열>\t파일 데이터에 활용할 배열 변수 이름\n"
+"    \n"
+"    -c 옵션 없이 -C를 지정하면, 기본 양자 수는 5000입니다.  <콜백>을\n"
+"    실행하면, 다음 배열 요소의 색인 번호를 할당하고, 해당 요소에 할당할 행을\n"
+"    추가 인자로 지정합니다.\n"
+"    \n"
+"    <시작> 색인 번호를 제대로 지정하지 않으면, mapfile에서 <배열>에\n"
+"    할당하기 전에 <배열>값을 삭제합니다.\n"
+"    \n"
+"    종료 상태:\n"
+"    부적절한 옵션을 주지 않았거나 <배열>을 읽기 전용으로 두지 않았거나\n"
+"    색인 배열로 올바르게 지정했다면 성공을 반환합니다."
 
-#: builtins.c:2083
+#: builtins.c:2086
 msgid ""
 "Read lines from a file into an array variable.\n"
 "    \n"
@@ -4430,18 +5539,3 @@ msgstr ""
 "파일에서 줄을 읽어 배열 변수에 넣습니다.\n"
 "    \n"
 "    `mapfile'의 동의어."
-
-#~ msgid ""
-#~ "Returns the context of the current subroutine call.\n"
-#~ "    \n"
-#~ "    Without EXPR, returns "
-#~ msgstr ""
-#~ "현재 서브루틴 콜의 컨텍스트를 반환합니다.\n"
-#~ "    \n"
-#~ "    EXPR이 없으면, 다음을 반환 "
-
-#~ msgid "add_process: process %5ld (%s) in the_pipeline"
-#~ msgstr "add_process: 프로세스 %5ld (%s) 는 the_pipeline에 있음"
-
-#~ msgid "Unknown Signal #"
-#~ msgstr "알 수 없는 신호 #"
index 31a29ca45d16415baed89fddab49bab81724b063..59b429253608117c3e9ddee6107f524f79605045 100644 (file)
Binary files a/po/lt.gmo and b/po/lt.gmo differ
index 06bdb4492a9b88a509f71fda6face462c853b0e8..6bcc068ee94d9837c95cafe45d6d56eafb45724b 100644 (file)
--- a/po/lt.po
+++ b/po/lt.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: bash-4.0\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-11-28 12:51-0500\n"
+"POT-Creation-Date: 2022-01-11 14:50-0500\n"
 "PO-Revision-Date: 2009-03-25 16:49+0200\n"
 "Last-Translator: Gintautas Miliauskas <gintas@akl.lt>\n"
 "Language-Team: Lithuanian <komp_lt@konferencijos.lt>\n"
@@ -24,57 +24,52 @@ msgstr ""
 msgid "bad array subscript"
 msgstr "blogas masyvo indeksas"
 
-#: arrayfunc.c:421 builtins/declare.def:638 variables.c:2274 variables.c:2300
-#: variables.c:3133
+#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268
+#: variables.c:3101
 #, c-format
 msgid "%s: removing nameref attribute"
 msgstr ""
 
-#: arrayfunc.c:446 builtins/declare.def:851
+#: arrayfunc.c:496 builtins/declare.def:868
 #, c-format
 msgid "%s: cannot convert indexed to associative array"
 msgstr ""
 
-#: arrayfunc.c:700
-#, fuzzy, c-format
-msgid "%s: invalid associative array key"
-msgstr "%s: netaisyklingas veiksmo pavadinimas"
-
-#: arrayfunc.c:702
+#: arrayfunc.c:777
 #, c-format
 msgid "%s: cannot assign to non-numeric index"
 msgstr "%s: nepavyko priskirti prie neskaitinio indekso"
 
-#: arrayfunc.c:747
+#: arrayfunc.c:822
 #, c-format
 msgid "%s: %s: must use subscript when assigning associative array"
 msgstr ""
 
-#: bashhist.c:452
+#: bashhist.c:455
 #, c-format
 msgid "%s: cannot create: %s"
 msgstr "%s: nepavyko sukurti: %s"
 
-#: bashline.c:4310
+#: bashline.c:4479
 msgid "bash_execute_unix_command: cannot find keymap for command"
 msgstr "bash_execute_unix_command: nepavyko rasti keymapo komandai"
 
-#: bashline.c:4459
+#: bashline.c:4637
 #, c-format
 msgid "%s: first non-whitespace character is not `\"'"
 msgstr "%s: pirmas ne tarpo simbolis nėra „\"“"
 
-#: bashline.c:4488
+#: bashline.c:4666
 #, c-format
 msgid "no closing `%c' in %s"
 msgstr "nėra uždarančiojo „%c“ %s"
 
-#: bashline.c:4519
+#: bashline.c:4697
 #, c-format
 msgid "%s: missing colon separator"
 msgstr "%s: trūksta dvitaškio skirtuko"
 
-#: bashline.c:4555
+#: bashline.c:4733
 #, fuzzy, c-format
 msgid "`%s': cannot unbind in command keymap"
 msgstr "„%s“: nepavyko atjungti (unbind)"
@@ -94,7 +89,7 @@ msgstr ""
 msgid "brace expansion: failed to allocate memory for `%s'"
 msgstr ""
 
-#: builtins/alias.def:131 variables.c:1844
+#: builtins/alias.def:131 variables.c:1817
 #, fuzzy, c-format
 msgid "`%s': invalid alias name"
 msgstr "„%s“: netaisyklingas keymap'o pavadinimas"
@@ -166,7 +161,7 @@ msgstr ""
 msgid "HOME not set"
 msgstr "HOME nenustatytas"
 
-#: builtins/cd.def:335 builtins/common.c:161 test.c:901
+#: builtins/cd.def:335 builtins/common.c:161 test.c:916
 msgid "too many arguments"
 msgstr "per daug argumentų"
 
@@ -194,7 +189,7 @@ msgstr "įspėjimas: "
 msgid "%s: usage: "
 msgstr "%s: naudojimas: "
 
-#: builtins/common.c:193 shell.c:516 shell.c:844
+#: builtins/common.c:193 shell.c:524 shell.c:866
 #, c-format
 msgid "%s: option requires an argument"
 msgstr "%s: parametrui reikia argumento"
@@ -209,7 +204,7 @@ msgstr "%s: reikia skaitinio argumento"
 msgid "%s: not found"
 msgstr "%s: nerasta"
 
-#: builtins/common.c:216 shell.c:857
+#: builtins/common.c:216 shell.c:879
 #, c-format
 msgid "%s: invalid option"
 msgstr "%s: negalimas parametras"
@@ -219,7 +214,7 @@ msgstr "%s: negalimas parametras"
 msgid "%s: invalid option name"
 msgstr "%s: netaisyklingas parametro vardas"
 
-#: builtins/common.c:230 execute_cmd.c:2373 general.c:368 general.c:373
+#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373
 #, c-format
 msgid "`%s': not a valid identifier"
 msgstr "`%s': netaisyklingas identifikatorius"
@@ -232,7 +227,7 @@ msgstr "netaisyklingas aštuonetainis skaičius"
 msgid "invalid hex number"
 msgstr "netaisyklingas šešioliktainis skaičius"
 
-#: builtins/common.c:244 expr.c:1569
+#: builtins/common.c:244 expr.c:1574
 msgid "invalid number"
 msgstr "netaisyklingas skaičius"
 
@@ -246,88 +241,93 @@ msgstr "%s: netaisyklinga signalo specifikacija"
 msgid "`%s': not a pid or valid job spec"
 msgstr "„%s“: ne pid'as ar taisyklinga darbo specifikacija"
 
-#: builtins/common.c:266 error.c:510
+#: builtins/common.c:266 error.c:536
 #, c-format
 msgid "%s: readonly variable"
 msgstr "%s: kintamasis tik skaitymui"
 
-#: builtins/common.c:274
+#: builtins/common.c:273
+#, fuzzy, c-format
+msgid "%s: cannot assign"
+msgstr "%s: nepavyko ištrinti"
+
+#: builtins/common.c:281
 #, c-format
 msgid "%s: %s out of range"
 msgstr "%s: %s išėjo už ribų"
 
-#: builtins/common.c:274 builtins/common.c:276
+#: builtins/common.c:281 builtins/common.c:283
 msgid "argument"
 msgstr "argumentas"
 
-#: builtins/common.c:276
+#: builtins/common.c:283
 #, c-format
 msgid "%s out of range"
 msgstr "%s už ribų"
 
-#: builtins/common.c:284
+#: builtins/common.c:291
 #, c-format
 msgid "%s: no such job"
 msgstr "%s: nėra tokio darbo"
 
-#: builtins/common.c:292
+#: builtins/common.c:299
 #, c-format
 msgid "%s: no job control"
 msgstr "%s: nėra darbų valdymo"
 
-#: builtins/common.c:294
+#: builtins/common.c:301
 msgid "no job control"
 msgstr "nėra darbų valdymo"
 
-#: builtins/common.c:304
+#: builtins/common.c:311
 #, c-format
 msgid "%s: restricted"
 msgstr "%s: apribota"
 
-#: builtins/common.c:306
+#: builtins/common.c:313
 msgid "restricted"
 msgstr "apribota"
 
-#: builtins/common.c:314
+#: builtins/common.c:321
 #, c-format
 msgid "%s: not a shell builtin"
 msgstr "%s: ne vidinė aplinkos komanda"
 
-#: builtins/common.c:323
+#: builtins/common.c:330
 #, c-format
 msgid "write error: %s"
 msgstr "rašymo klaida: %s"
 
-#: builtins/common.c:331
+#: builtins/common.c:338
 #, c-format
 msgid "error setting terminal attributes: %s"
 msgstr ""
 
-#: builtins/common.c:333
+#: builtins/common.c:340
 #, c-format
 msgid "error getting terminal attributes: %s"
 msgstr ""
 
-#: builtins/common.c:635
+#: builtins/common.c:642
 #, c-format
 msgid "%s: error retrieving current directory: %s: %s\n"
 msgstr "%s: klaida skaitant esamą aplanką: %s: %s\n"
 
-#: builtins/common.c:701 builtins/common.c:703
+#: builtins/common.c:708 builtins/common.c:710
 #, c-format
 msgid "%s: ambiguous job spec"
 msgstr "%s: dviprasmis darbo aprašymas"
 
-#: builtins/common.c:964
+#: builtins/common.c:971
 msgid "help not available in this version"
 msgstr ""
 
-#: builtins/common.c:1008 builtins/set.def:953 variables.c:3839
+#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825
 #, c-format
 msgid "%s: cannot unset: readonly %s"
 msgstr "%s: nepavyko ištrinti: %s tik skaitymui"
 
-#: builtins/common.c:1013 builtins/set.def:932 variables.c:3844
+#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830
 #, c-format
 msgid "%s: cannot unset"
 msgstr "%s: nepavyko ištrinti"
@@ -337,108 +337,108 @@ msgstr "%s: nepavyko ištrinti"
 msgid "%s: invalid action name"
 msgstr "%s: netaisyklingas veiksmo pavadinimas"
 
-#: builtins/complete.def:486 builtins/complete.def:634
-#: builtins/complete.def:865
+#: builtins/complete.def:486 builtins/complete.def:642
+#: builtins/complete.def:873
 #, c-format
 msgid "%s: no completion specification"
 msgstr "%s: nėra baigimo specifikacijos"
 
-#: builtins/complete.def:688
+#: builtins/complete.def:696
 msgid "warning: -F option may not work as you expect"
 msgstr "įspėjimas: parametras -F gali neveikti taip, kaip tikitės"
 
-#: builtins/complete.def:690
+#: builtins/complete.def:698
 msgid "warning: -C option may not work as you expect"
 msgstr "įspėjimas: parametras -C gali neveikti taip, kaip tikitės"
 
-#: builtins/complete.def:838
+#: builtins/complete.def:846
 msgid "not currently executing completion function"
 msgstr ""
 
-#: builtins/declare.def:134
+#: builtins/declare.def:137
 msgid "can only be used in a function"
 msgstr "galima naudoti tik funkcijoje"
 
-#: builtins/declare.def:363 builtins/declare.def:756
+#: builtins/declare.def:437
+msgid "cannot use `-f' to make functions"
+msgstr "negalima naudoti „-f“ funkcijoms kurti"
+
+#: builtins/declare.def:464 execute_cmd.c:6132
+#, c-format
+msgid "%s: readonly function"
+msgstr "%s: funkcija tik skaitymui"
+
+#: builtins/declare.def:521 builtins/declare.def:804
 #, c-format
 msgid "%s: reference variable cannot be an array"
 msgstr ""
 
-#: builtins/declare.def:374 variables.c:3385
+#: builtins/declare.def:532 variables.c:3359
 #, c-format
 msgid "%s: nameref variable self references not allowed"
 msgstr ""
 
-#: builtins/declare.def:379 variables.c:2104 variables.c:3304 variables.c:3312
-#: variables.c:3382
+#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286
+#: variables.c:3356
 #, c-format
 msgid "%s: circular name reference"
 msgstr ""
 
-#: builtins/declare.def:384 builtins/declare.def:762 builtins/declare.def:773
+#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820
 #, c-format
 msgid "`%s': invalid variable name for name reference"
 msgstr ""
 
-#: builtins/declare.def:514
-msgid "cannot use `-f' to make functions"
-msgstr "negalima naudoti „-f“ funkcijoms kurti"
-
-#: builtins/declare.def:526 execute_cmd.c:5986
-#, c-format
-msgid "%s: readonly function"
-msgstr "%s: funkcija tik skaitymui"
-
-#: builtins/declare.def:824
-#, c-format
-msgid "%s: quoted compound array assignment deprecated"
-msgstr ""
-
-#: builtins/declare.def:838
+#: builtins/declare.def:856
 #, c-format
 msgid "%s: cannot destroy array variables in this way"
 msgstr "%s: negalima tokiu būdu sunaikinti masyvų kintamųjų"
 
-#: builtins/declare.def:845 builtins/read.def:815
+#: builtins/declare.def:862 builtins/read.def:887
 #, c-format
 msgid "%s: cannot convert associative to indexed array"
 msgstr ""
 
-#: builtins/enable.def:143 builtins/enable.def:151
+#: builtins/declare.def:891
+#, c-format
+msgid "%s: quoted compound array assignment deprecated"
+msgstr ""
+
+#: builtins/enable.def:145 builtins/enable.def:153
 msgid "dynamic loading not available"
 msgstr "dinaminis įkrovimas negalimas"
 
-#: builtins/enable.def:343
+#: builtins/enable.def:376
 #, c-format
 msgid "cannot open shared object %s: %s"
 msgstr "nepavyko atverti bendrojo objekto %s: %s"
 
-#: builtins/enable.def:371
+#: builtins/enable.def:405
 #, c-format
 msgid "cannot find %s in shared object %s: %s"
 msgstr "nepavyko rasti %s bendrajame objekte %s: %s"
 
-#: builtins/enable.def:388
+#: builtins/enable.def:422
 #, fuzzy, c-format
 msgid "%s: dynamic builtin already loaded"
 msgstr "%s: nedinamiškai įkrauta"
 
-#: builtins/enable.def:392
+#: builtins/enable.def:426
 #, c-format
 msgid "load function for %s returns failure (%d): not loaded"
 msgstr ""
 
-#: builtins/enable.def:517
+#: builtins/enable.def:551
 #, c-format
 msgid "%s: not dynamically loaded"
 msgstr "%s: nedinamiškai įkrauta"
 
-#: builtins/enable.def:543
+#: builtins/enable.def:577
 #, c-format
 msgid "%s: cannot delete: %s"
 msgstr "%s: nepavyko ištrinti: %s"
 
-#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5818
+#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959
 #, c-format
 msgid "%s: is a directory"
 msgstr "%s: aplankas"
@@ -453,7 +453,7 @@ msgstr "%s: ne paprastas failas"
 msgid "%s: file is too large"
 msgstr "%s: failas per didelis"
 
-#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1647
+#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673
 #, c-format
 msgid "%s: cannot execute binary file"
 msgstr "%s: negalima vykdyti dvejetainių failų"
@@ -551,12 +551,12 @@ msgstr ""
 "nėra žinyno temų, atitinkančių „%s“. Bandykite „help help“, „man -k %s“ arba "
 "„info %s“."
 
-#: builtins/help.def:224
+#: builtins/help.def:223
 #, c-format
 msgid "%s: cannot open: %s"
 msgstr "%s: nepavyko atverti: %s"
 
-#: builtins/help.def:524
+#: builtins/help.def:523
 #, c-format
 msgid ""
 "These shell commands are defined internally.  Type `help' to see this list.\n"
@@ -577,21 +577,21 @@ msgstr ""
 "Žvaigždutė (*) prie vardo reiškia, kad komanda išjungta.\n"
 "\n"
 
-#: builtins/history.def:155
+#: builtins/history.def:159
 msgid "cannot use more than one of -anrw"
 msgstr "negalima naudoti daugiau negu vieno parametro iš -anrw"
 
-#: builtins/history.def:188 builtins/history.def:198 builtins/history.def:213
-#: builtins/history.def:230 builtins/history.def:242 builtins/history.def:249
+#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215
+#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247
 msgid "history position"
 msgstr "istorijos pozicija"
 
-#: builtins/history.def:340
+#: builtins/history.def:338
 #, fuzzy, c-format
 msgid "%s: invalid timestamp"
 msgstr "%s: netaisyklingas parametro vardas"
 
-#: builtins/history.def:451
+#: builtins/history.def:449
 #, c-format
 msgid "%s: history expansion failed"
 msgstr "%s: istorijos išskleidimas nesėkmingas"
@@ -614,79 +614,79 @@ msgstr "%s: argumentai turi būti procesų arba darbų ID"
 msgid "Unknown error"
 msgstr "Nežinoma klaida"
 
-#: builtins/let.def:97 builtins/let.def:122 expr.c:639 expr.c:657
+#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658
 msgid "expression expected"
 msgstr "tikėtasi išraiškos"
 
-#: builtins/mapfile.def:178
+#: builtins/mapfile.def:180
 #, fuzzy, c-format
 msgid "%s: not an indexed array"
 msgstr "%s: ne masyvo kintamasis"
 
-#: builtins/mapfile.def:271 builtins/read.def:308
+#: builtins/mapfile.def:276 builtins/read.def:336
 #, c-format
 msgid "%s: invalid file descriptor specification"
 msgstr "%s: netaisyklinga failo deskriptoriaus specifikacija"
 
-#: builtins/mapfile.def:279 builtins/read.def:315
+#: builtins/mapfile.def:284 builtins/read.def:343
 #, c-format
 msgid "%d: invalid file descriptor: %s"
 msgstr "%d: netaisyklingas failo deskriptorius: %s"
 
-#: builtins/mapfile.def:288 builtins/mapfile.def:326
+#: builtins/mapfile.def:293 builtins/mapfile.def:331
 #, fuzzy, c-format
 msgid "%s: invalid line count"
 msgstr "%s: nesamas parametras"
 
-#: builtins/mapfile.def:299
+#: builtins/mapfile.def:304
 #, fuzzy, c-format
 msgid "%s: invalid array origin"
 msgstr "%s: nesamas parametras"
 
-#: builtins/mapfile.def:316
+#: builtins/mapfile.def:321
 #, fuzzy, c-format
 msgid "%s: invalid callback quantum"
 msgstr "%s: netaisyklingas veiksmo pavadinimas"
 
-#: builtins/mapfile.def:349
+#: builtins/mapfile.def:354
 #, fuzzy
 msgid "empty array variable name"
 msgstr "%s: ne masyvo kintamasis"
 
-#: builtins/mapfile.def:370
+#: builtins/mapfile.def:375
 msgid "array variable support required"
 msgstr ""
 
-#: builtins/printf.def:419
+#: builtins/printf.def:430
 #, c-format
 msgid "`%s': missing format character"
 msgstr "„%s“: trūksta formato simbolio"
 
-#: builtins/printf.def:474
+#: builtins/printf.def:485
 #, fuzzy, c-format
 msgid "`%c': invalid time format specification"
 msgstr "%s: klaidinga laiko ribos (timeout) specifikacija"
 
-#: builtins/printf.def:676
+#: builtins/printf.def:708
 #, c-format
 msgid "`%c': invalid format character"
 msgstr "„%c“: netaisyklingas formato simbolis"
 
-#: builtins/printf.def:702
+#: builtins/printf.def:734
 #, c-format
 msgid "warning: %s: %s"
 msgstr "įspėjimas: %s: %s"
 
-#: builtins/printf.def:788
+#: builtins/printf.def:822
 #, c-format
 msgid "format parsing problem: %s"
 msgstr ""
 
-#: builtins/printf.def:885
+#: builtins/printf.def:919
 msgid "missing hex digit for \\x"
 msgstr "trūksta šešioliktainio skaitmens išraiškoje \\x"
 
-#: builtins/printf.def:900
+#: builtins/printf.def:934
 #, fuzzy, c-format
 msgid "missing unicode digit for \\%c"
 msgstr "trūksta šešioliktainio skaitmens išraiškoje \\x"
@@ -783,12 +783,12 @@ msgid ""
 "    The `dirs' builtin displays the directory stack."
 msgstr ""
 
-#: builtins/read.def:280
+#: builtins/read.def:308
 #, c-format
 msgid "%s: invalid timeout specification"
 msgstr "%s: klaidinga laiko ribos (timeout) specifikacija"
 
-#: builtins/read.def:755
+#: builtins/read.def:827
 #, c-format
 msgid "read error: %d: %s"
 msgstr "skaitymo klaida: %d: %s"
@@ -801,7 +801,7 @@ msgstr "galima grįžti (return) tik iš funkcijos ar scenarijaus"
 msgid "cannot simultaneously unset a function and a variable"
 msgstr "negalima kartu ištrinti funkcijos ir kintamojo"
 
-#: builtins/set.def:966
+#: builtins/set.def:969
 #, c-format
 msgid "%s: not an array variable"
 msgstr "%s: ne masyvo kintamasis"
@@ -820,11 +820,11 @@ msgstr "%s: nepavyko ištrinti"
 msgid "shift count"
 msgstr "postūmių skaičius"
 
-#: builtins/shopt.def:310
+#: builtins/shopt.def:323
 msgid "cannot set and unset shell options simultaneously"
 msgstr "negalima aplinkos nuostatos vienu metu įjungti ir išjungti"
 
-#: builtins/shopt.def:428
+#: builtins/shopt.def:444
 #, c-format
 msgid "%s: invalid shell option name"
 msgstr "%s: netaisyklingas aplinkos nuostatos pavadinimas"
@@ -891,16 +891,16 @@ msgstr "%s: netaisyklingas limito argumentas"
 msgid "`%c': bad command"
 msgstr "`%c': bloga komanda"
 
-#: builtins/ulimit.def:455
+#: builtins/ulimit.def:464
 #, c-format
 msgid "%s: cannot get limit: %s"
 msgstr "%s: nepavyko gauti limito: %s"
 
-#: builtins/ulimit.def:481
+#: builtins/ulimit.def:490
 msgid "limit"
 msgstr "riba"
 
-#: builtins/ulimit.def:493 builtins/ulimit.def:793
+#: builtins/ulimit.def:502 builtins/ulimit.def:802
 #, c-format
 msgid "%s: cannot modify limit: %s"
 msgstr "%s: nepavyko pakeisti limito: %s"
@@ -919,7 +919,7 @@ msgstr "„%c“: netaisyklingas simbolinės veiksenos operatorius"
 msgid "`%c': invalid symbolic mode character"
 msgstr "„%c“: netaisyklingas simbolinės veiksenos simbolis"
 
-#: error.c:89 error.c:347 error.c:349 error.c:351
+#: error.c:89 error.c:373 error.c:375 error.c:377
 msgid " line "
 msgstr " eilutė "
 
@@ -939,97 +939,107 @@ msgstr "Nutraukiama..."
 msgid "INFORM: "
 msgstr ""
 
-#: error.c:462
+#: error.c:310
+#, fuzzy, c-format
+msgid "DEBUG warning: "
+msgstr "įspėjimas: "
+
+#: error.c:488
 msgid "unknown command error"
 msgstr "nežinoma komandos klaida"
 
-#: error.c:463
+#: error.c:489
 msgid "bad command type"
 msgstr "blogas komandos tipas"
 
-#: error.c:464
+#: error.c:490
 msgid "bad connector"
 msgstr "blogas jungtukas"
 
-#: error.c:465
+#: error.c:491
 msgid "bad jump"
 msgstr "blogas šuolis"
 
-#: error.c:503
+#: error.c:529
 #, c-format
 msgid "%s: unbound variable"
 msgstr "%s: nepriskirtas kintamasis"
 
-#: eval.c:242
+#: eval.c:243
 msgid "\atimed out waiting for input: auto-logout\n"
 msgstr "\alaukiant įvedimo baigėsi laikas: automatiškai atsijungta\n"
 
-#: execute_cmd.c:537
+#: execute_cmd.c:555
 #, c-format
 msgid "cannot redirect standard input from /dev/null: %s"
 msgstr "nepavyko peradresuoti standartinio įvedimo iš /dev/null: %s"
 
-#: execute_cmd.c:1297
+#: execute_cmd.c:1317
 #, c-format
 msgid "TIMEFORMAT: `%c': invalid format character"
 msgstr "TIMEFORMAT: „%c“: netaisyklingas formato simbolis"
 
-#: execute_cmd.c:2362
+#: execute_cmd.c:2391
 #, c-format
 msgid "execute_coproc: coproc [%d:%s] still exists"
 msgstr ""
 
-#: execute_cmd.c:2486
+#: execute_cmd.c:2524
 #, fuzzy
 msgid "pipe error"
 msgstr "rašymo klaida: %s"
 
-#: execute_cmd.c:4793
+#: execute_cmd.c:4923
 #, c-format
 msgid "eval: maximum eval nesting level exceeded (%d)"
 msgstr ""
 
-#: execute_cmd.c:4805
+#: execute_cmd.c:4935
 #, c-format
 msgid "%s: maximum source nesting level exceeded (%d)"
 msgstr ""
 
-#: execute_cmd.c:4913
+#: execute_cmd.c:5043
 #, c-format
 msgid "%s: maximum function nesting level exceeded (%d)"
 msgstr ""
 
-#: execute_cmd.c:5467
+#: execute_cmd.c:5598
 #, c-format
 msgid "%s: restricted: cannot specify `/' in command names"
 msgstr "%s: apribota: negalima naudoti „/“ komandų pavadinimuose"
 
-#: execute_cmd.c:5574
+#: execute_cmd.c:5715
 #, c-format
 msgid "%s: command not found"
 msgstr "%s: komanda nerasta"
 
-#: execute_cmd.c:5816
+#: execute_cmd.c:5957
 #, c-format
 msgid "%s: %s"
 msgstr ""
 
-#: execute_cmd.c:5854
+#: execute_cmd.c:5975
+#, fuzzy, c-format
+msgid "%s: cannot execute: required file not found"
+msgstr "%s: negalima vykdyti dvejetainių failų"
+
+#: execute_cmd.c:6000
 #, c-format
 msgid "%s: %s: bad interpreter"
 msgstr "%s: %s: blogas interpretatorius"
 
-#: execute_cmd.c:5891
+#: execute_cmd.c:6037
 #, fuzzy, c-format
 msgid "%s: cannot execute binary file: %s"
 msgstr "%s: negalima vykdyti dvejetainių failų"
 
-#: execute_cmd.c:5977
+#: execute_cmd.c:6123
 #, fuzzy, c-format
 msgid "`%s': is a special builtin"
 msgstr "%s yra aplinkos vidinė komanda\n"
 
-#: execute_cmd.c:6029
+#: execute_cmd.c:6175
 #, c-format
 msgid "cannot duplicate fd %d to fd %d"
 msgstr "nepavyko dublikuoti fd %d į fd %d"
@@ -1042,71 +1052,71 @@ msgstr "viršytas išraiškos rekursijos lygis"
 msgid "recursion stack underflow"
 msgstr "rekursijos steko atvirkštinis perpildymas"
 
-#: expr.c:477
+#: expr.c:478
 msgid "syntax error in expression"
 msgstr "sintaksės klaida išraiškoje"
 
-#: expr.c:521
+#: expr.c:522
 msgid "attempted assignment to non-variable"
 msgstr "bandymas priskirti ne kintamajam"
 
-#: expr.c:530
+#: expr.c:531
 #, fuzzy
 msgid "syntax error in variable assignment"
 msgstr "sintaksės klaida išraiškoje"
 
-#: expr.c:544 expr.c:911
+#: expr.c:545 expr.c:912
 msgid "division by 0"
 msgstr "dalyba iš 0"
 
-#: expr.c:592
+#: expr.c:593
 msgid "bug: bad expassign token"
 msgstr "klaida: bloga expassign leksema"
 
-#: expr.c:646
+#: expr.c:647
 msgid "`:' expected for conditional expression"
 msgstr "sąlygos išraiškoje tikėtasi „:“"
 
-#: expr.c:972
+#: expr.c:973
 msgid "exponent less than 0"
 msgstr "eksponentė mažesnis už 0"
 
-#: expr.c:1029
+#: expr.c:1030
 msgid "identifier expected after pre-increment or pre-decrement"
 msgstr ""
 "po prieš-didinimo ar prieš-mažinimo operatoriaus tikėtasi identifikatoriaus"
 
-#: expr.c:1056
+#: expr.c:1057
 msgid "missing `)'"
 msgstr "Trūksta „)“"
 
-#: expr.c:1107 expr.c:1487
+#: expr.c:1108 expr.c:1492
 msgid "syntax error: operand expected"
 msgstr "sintaksės klaida: tikėtasi operando"
 
-#: expr.c:1489
+#: expr.c:1494
 msgid "syntax error: invalid arithmetic operator"
 msgstr "sintaksės klaida: netaisyklingas aritmetinis operatorius"
 
-#: expr.c:1513
+#: expr.c:1518
 #, c-format
 msgid "%s%s%s: %s (error token is \"%s\")"
 msgstr ""
 
-#: expr.c:1573
+#: expr.c:1578
 msgid "invalid arithmetic base"
 msgstr "netaisyklingas aritmetinis pagrindas"
 
-#: expr.c:1582
+#: expr.c:1587
 #, fuzzy
 msgid "invalid integer constant"
 msgstr "%s: nesamas parametras"
 
-#: expr.c:1598
+#: expr.c:1603
 msgid "value too great for base"
 msgstr "per didelė pagrindo reikšmė"
 
-#: expr.c:1647
+#: expr.c:1652
 #, c-format
 msgid "%s: expression error\n"
 msgstr "%s: išraiškos klaida\n"
@@ -1115,7 +1125,7 @@ msgstr "%s: išraiškos klaida\n"
 msgid "getcwd: cannot access parent directories"
 msgstr "getcwd: nepavyko pasiekti aukštesnių aplankų"
 
-#: input.c:99 subst.c:6069
+#: input.c:99 subst.c:6208
 #, fuzzy, c-format
 msgid "cannot reset nodelay mode for fd %d"
 msgstr "nepavyko dublikuoti fd %d į fd %d"
@@ -1134,167 +1144,167 @@ msgstr "save_bash_input: naujam fd %d buferis jau egzistuoja"
 msgid "start_pipeline: pgrp pipe"
 msgstr ""
 
-#: jobs.c:906
+#: jobs.c:907
 #, c-format
 msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr ""
 
-#: jobs.c:959
+#: jobs.c:960
 #, c-format
 msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr ""
 
-#: jobs.c:1283
+#: jobs.c:1279
 #, c-format
 msgid "forked pid %d appears in running job %d"
 msgstr ""
 
-#: jobs.c:1402
+#: jobs.c:1397
 #, c-format
 msgid "deleting stopped job %d with process group %ld"
 msgstr "trinamas sustabdytas darbas %d procesų grupėje %ld"
 
-#: jobs.c:1511
+#: jobs.c:1502
 #, c-format
 msgid "add_process: pid %5ld (%s) marked as still alive"
 msgstr ""
 
-#: jobs.c:1850
+#: jobs.c:1839
 #, c-format
 msgid "describe_pid: %ld: no such pid"
 msgstr "describe_pid: %ld: tokio pid nėra"
 
-#: jobs.c:1865
+#: jobs.c:1854
 #, c-format
 msgid "Signal %d"
 msgstr "Signalas %d"
 
-#: jobs.c:1879 jobs.c:1905
+#: jobs.c:1868 jobs.c:1894
 msgid "Done"
 msgstr "Atlikta"
 
-#: jobs.c:1884 siglist.c:122
+#: jobs.c:1873 siglist.c:123
 msgid "Stopped"
 msgstr ""
 
-#: jobs.c:1888
+#: jobs.c:1877
 #, c-format
 msgid "Stopped(%s)"
 msgstr ""
 
-#: jobs.c:1892
+#: jobs.c:1881
 msgid "Running"
 msgstr ""
 
-#: jobs.c:1909
+#: jobs.c:1898
 #, c-format
 msgid "Done(%d)"
 msgstr "Atlikta(%d)"
 
-#: jobs.c:1911
+#: jobs.c:1900
 #, c-format
 msgid "Exit %d"
 msgstr ""
 
-#: jobs.c:1914
+#: jobs.c:1903
 msgid "Unknown status"
 msgstr "Nežinoma būsena"
 
-#: jobs.c:2001
+#: jobs.c:1990
 #, c-format
 msgid "(core dumped) "
 msgstr ""
 
-#: jobs.c:2020
+#: jobs.c:2009
 #, c-format
 msgid "  (wd: %s)"
 msgstr ""
 
-#: jobs.c:2259
+#: jobs.c:2250
 #, c-format
 msgid "child setpgid (%ld to %ld)"
 msgstr ""
 
-#: jobs.c:2617 nojobs.c:664
+#: jobs.c:2608 nojobs.c:666
 #, c-format
 msgid "wait: pid %ld is not a child of this shell"
 msgstr "wait: pid %ld nėra šios aplinkos dukterinis procesas"
 
-#: jobs.c:2893
+#: jobs.c:2884
 #, c-format
 msgid "wait_for: No record of process %ld"
 msgstr "wait_for: nėra proceso %ld įrašo"
 
-#: jobs.c:3236
+#: jobs.c:3223
 #, c-format
 msgid "wait_for_job: job %d is stopped"
 msgstr "wait_for_job: darbas %d yra sustabdytas"
 
-#: jobs.c:3564
+#: jobs.c:3551
 #, fuzzy, c-format
 msgid "%s: no current jobs"
 msgstr "%s: nėra tokio darbo"
 
-#: jobs.c:3571
+#: jobs.c:3558
 #, c-format
 msgid "%s: job has terminated"
 msgstr "%s: darbas užsibaigė"
 
-#: jobs.c:3580
+#: jobs.c:3567
 #, c-format
 msgid "%s: job %d already in background"
 msgstr "%s: darbas %d jau fone"
 
-#: jobs.c:3806
+#: jobs.c:3793
 msgid "waitchld: turning on WNOHANG to avoid indefinite block"
 msgstr ""
 
-#: jobs.c:4320
+#: jobs.c:4307
 #, c-format
 msgid "%s: line %d: "
 msgstr "%s: %d eilutė: "
 
-#: jobs.c:4334 nojobs.c:919
+#: jobs.c:4321 nojobs.c:921
 #, c-format
 msgid " (core dumped)"
 msgstr ""
 
-#: jobs.c:4346 jobs.c:4359
+#: jobs.c:4333 jobs.c:4346
 #, c-format
 msgid "(wd now: %s)\n"
 msgstr ""
 
-#: jobs.c:4391
+#: jobs.c:4378
 msgid "initialize_job_control: getpgrp failed"
 msgstr ""
 
-#: jobs.c:4447
+#: jobs.c:4434
 msgid "initialize_job_control: no job control in background"
 msgstr ""
 
-#: jobs.c:4463
+#: jobs.c:4450
 msgid "initialize_job_control: line discipline"
 msgstr ""
 
-#: jobs.c:4473
+#: jobs.c:4460
 msgid "initialize_job_control: setpgid"
 msgstr ""
 
-#: jobs.c:4494 jobs.c:4503
+#: jobs.c:4481 jobs.c:4490
 #, c-format
 msgid "cannot set terminal process group (%d)"
 msgstr ""
 
-#: jobs.c:4508
+#: jobs.c:4495
 msgid "no job control in this shell"
 msgstr "šioje aplinkoje nėra darbų valdymo"
 
-#: lib/malloc/malloc.c:353
+#: lib/malloc/malloc.c:367
 #, c-format
 msgid "malloc: failed assertion: %s\n"
 msgstr "malloc: pažeista prielaida: %s\n"
 
-#: lib/malloc/malloc.c:369
+#: lib/malloc/malloc.c:383
 #, c-format
 msgid ""
 "\r\n"
@@ -1303,49 +1313,49 @@ msgstr ""
 "\r\n"
 "malloc: %s:%d: prielaida pažeista\r\n"
 
-#: lib/malloc/malloc.c:370 lib/malloc/malloc.c:933
+#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941
 msgid "unknown"
 msgstr "nežinoma"
 
-#: lib/malloc/malloc.c:882
+#: lib/malloc/malloc.c:892
 msgid "malloc: block on free list clobbered"
 msgstr "malloc: blokas iš laisvų blokų sąrašo sugadintas"
 
-#: lib/malloc/malloc.c:972
+#: lib/malloc/malloc.c:980
 msgid "free: called with already freed block argument"
 msgstr "free: iškviestas su jau atlaisvintu bloku"
 
-#: lib/malloc/malloc.c:975
+#: lib/malloc/malloc.c:983
 msgid "free: called with unallocated block argument"
 msgstr "free: iškviestas su nerezervuotu bloku"
 
-#: lib/malloc/malloc.c:994
+#: lib/malloc/malloc.c:1001
 msgid "free: underflow detected; mh_nbytes out of range"
 msgstr "free: atvirkštinis perpildymas (underflow); mh_nbytes už ribos"
 
-#: lib/malloc/malloc.c:1001
+#: lib/malloc/malloc.c:1007
 #, fuzzy
 msgid "free: underflow detected; magic8 corrupted"
 msgstr "free: atvirkštinis perpildymas (underflow); mh_nbytes už ribos"
 
-#: lib/malloc/malloc.c:1009
+#: lib/malloc/malloc.c:1014
 msgid "free: start and end chunk sizes differ"
 msgstr "free: pradžios ir pabaigos blokų (chunk) dydžiai skiriasi"
 
-#: lib/malloc/malloc.c:1119
+#: lib/malloc/malloc.c:1176
 msgid "realloc: called with unallocated block argument"
 msgstr "realloc: iškviestas su nerezervuotu bloku"
 
-#: lib/malloc/malloc.c:1134
+#: lib/malloc/malloc.c:1191
 msgid "realloc: underflow detected; mh_nbytes out of range"
 msgstr "realloc: atvirkštinis perpildymas (underflow); mh_nbytes už ribos"
 
-#: lib/malloc/malloc.c:1141
+#: lib/malloc/malloc.c:1197
 #, fuzzy
 msgid "realloc: underflow detected; magic8 corrupted"
 msgstr "realloc: atvirkštinis perpildymas (underflow); mh_nbytes už ribos"
 
-#: lib/malloc/malloc.c:1150
+#: lib/malloc/malloc.c:1205
 msgid "realloc: start and end chunk sizes differ"
 msgstr "realloc: pradžios ir pabaigos blokų (chunk) dydžiai skiriasi"
 
@@ -1387,22 +1397,22 @@ msgstr "%s: netaisyklingas tinklo kelias"
 msgid "network operations not supported"
 msgstr "tinklo operacijos nepalaikomos"
 
-#: locale.c:217
+#: locale.c:219
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s)"
 msgstr ""
 
-#: locale.c:219
+#: locale.c:221
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s): %s"
 msgstr ""
 
-#: locale.c:292
+#: locale.c:294
 #, fuzzy, c-format
 msgid "setlocale: %s: cannot change locale (%s)"
 msgstr "xrealloc: %s:%d: nepavyko išskirti %lu baitų"
 
-#: locale.c:294
+#: locale.c:296
 #, fuzzy, c-format
 msgid "setlocale: %s: cannot change locale (%s): %s"
 msgstr "xrealloc: %s:%d: nepavyko išskirti %lu baitų"
@@ -1420,138 +1430,138 @@ msgstr "Turite naujų laiškų $_"
 msgid "The mail in %s has been read\n"
 msgstr "Paštas %s perskaitytas\n"
 
-#: make_cmd.c:317
+#: make_cmd.c:314
 msgid "syntax error: arithmetic expression required"
 msgstr "sintaksės klaida: reikia aritmetinės išraiškos"
 
-#: make_cmd.c:319
+#: make_cmd.c:316
 msgid "syntax error: `;' unexpected"
 msgstr "sintaksės klaida: netikėtas „;“"
 
-#: make_cmd.c:320
+#: make_cmd.c:317
 #, c-format
 msgid "syntax error: `((%s))'"
 msgstr "sintaksės klaida: „((%s))“"
 
-#: make_cmd.c:572
+#: make_cmd.c:569
 #, c-format
 msgid "make_here_document: bad instruction type %d"
 msgstr "make_here_document: blogas instrukcijos tipas %d"
 
-#: make_cmd.c:657
+#: make_cmd.c:668
 #, c-format
 msgid "here-document at line %d delimited by end-of-file (wanted `%s')"
 msgstr ""
 
-#: make_cmd.c:756
+#: make_cmd.c:769
 #, c-format
 msgid "make_redirection: redirection instruction `%d' out of range"
 msgstr "make_redirection: nukreipimo instrukcija „%d“ už ribų"
 
-#: parse.y:2393
+#: parse.y:2428
 #, c-format
 msgid ""
 "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line "
 "truncated"
 msgstr ""
 
-#: parse.y:2826
+#: parse.y:2921
 msgid "maximum here-document count exceeded"
 msgstr ""
 
-#: parse.y:3581 parse.y:3957 parse.y:4556
+#: parse.y:3684 parse.y:4244 parse.y:6148
 #, c-format
 msgid "unexpected EOF while looking for matching `%c'"
 msgstr "netikėta failo pabaiga ieškant atitinkamo „%c“"
 
-#: parse.y:4696
+#: parse.y:4452
 msgid "unexpected EOF while looking for `]]'"
 msgstr "netikėta failo pabaiga ieškant „]]“"
 
-#: parse.y:4701
+#: parse.y:4457
 #, c-format
 msgid "syntax error in conditional expression: unexpected token `%s'"
 msgstr "sintaksės klaida sąlygos išraiškoje: netikėta leksema „%s“"
 
-#: parse.y:4705
+#: parse.y:4461
 msgid "syntax error in conditional expression"
 msgstr "sintaksės klaida sąlygos išraiškoje"
 
-#: parse.y:4783
+#: parse.y:4539
 #, c-format
 msgid "unexpected token `%s', expected `)'"
 msgstr "netikėta leksema „%s“, tikėtasi „)“"
 
-#: parse.y:4787
+#: parse.y:4543
 msgid "expected `)'"
 msgstr "tikėtasi „)“"
 
-#: parse.y:4815
+#: parse.y:4571
 #, c-format
 msgid "unexpected argument `%s' to conditional unary operator"
 msgstr "netikėtas argumentas „%s“ sąlygos unariniam operatoriui"
 
-#: parse.y:4819
+#: parse.y:4575
 msgid "unexpected argument to conditional unary operator"
 msgstr "netikėtas argumentas sąlygos unariniam operatoriui"
 
-#: parse.y:4865
+#: parse.y:4621
 #, c-format
 msgid "unexpected token `%s', conditional binary operator expected"
 msgstr "netikėta leksema „%s“, tikėtasi sąlyginio binarinio operatoriaus"
 
-#: parse.y:4869
+#: parse.y:4625
 msgid "conditional binary operator expected"
 msgstr "tikėtasi sąlygos binarinio operatoriaus"
 
-#: parse.y:4891
+#: parse.y:4647
 #, c-format
 msgid "unexpected argument `%s' to conditional binary operator"
 msgstr "netikėtas argumentas „%s“ sąlygos binariniam operatoriui"
 
-#: parse.y:4895
+#: parse.y:4651
 msgid "unexpected argument to conditional binary operator"
 msgstr "netikėtas argumentas sąlygos binariniam operatoriui"
 
-#: parse.y:4906
+#: parse.y:4662
 #, c-format
 msgid "unexpected token `%c' in conditional command"
 msgstr "netikėta leksema „%c“ sąlygos komandoje"
 
-#: parse.y:4909
+#: parse.y:4665
 #, c-format
 msgid "unexpected token `%s' in conditional command"
 msgstr "netikėta leksema „%s“ sąlygos komandoje"
 
-#: parse.y:4913
+#: parse.y:4669
 #, c-format
 msgid "unexpected token %d in conditional command"
 msgstr "netikėta leksema %d sąlygos komandoje"
 
-#: parse.y:6336
+#: parse.y:6118
 #, c-format
 msgid "syntax error near unexpected token `%s'"
 msgstr "sintaksės klaida prie netikėtos leksemos: „%s“"
 
-#: parse.y:6355
+#: parse.y:6137
 #, c-format
 msgid "syntax error near `%s'"
 msgstr "sintaksės klaida prie „%s“"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error: unexpected end of file"
 msgstr "sintaksės klaida: netikėta failo pabaiga"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error"
 msgstr "sintaksės klaida"
 
-#: parse.y:6428
+#: parse.y:6216
 #, c-format
 msgid "Use \"%s\" to leave the shell.\n"
 msgstr "Naudokite „%s“, jei norite išeiti iš ap.\n"
 
-#: parse.y:6602
+#: parse.y:6394
 msgid "unexpected EOF while looking for matching `)'"
 msgstr "netikėta failo pabaiga ieškant atitinkamo „)“"
 
@@ -1589,94 +1599,94 @@ msgstr ""
 msgid "xtrace fd (%d) != fileno xtrace fp (%d)"
 msgstr ""
 
-#: print_cmd.c:1540
+#: print_cmd.c:1545
 #, c-format
 msgid "cprintf: `%c': invalid format character"
 msgstr "cprintf: „%c“: netaisyklingas formato simbolis"
 
-#: redir.c:149 redir.c:197
+#: redir.c:150 redir.c:198
 msgid "file descriptor out of range"
 msgstr "failo deskriptorius už ribų"
 
-#: redir.c:204
+#: redir.c:205
 #, c-format
 msgid "%s: ambiguous redirect"
 msgstr "%s: ambiguous redirect"
 
-#: redir.c:208
+#: redir.c:209
 #, c-format
 msgid "%s: cannot overwrite existing file"
 msgstr "%s: negalima perrašyti egzistuojančio failo"
 
-#: redir.c:213
+#: redir.c:214
 #, c-format
 msgid "%s: restricted: cannot redirect output"
 msgstr "%s: apribota: negalima peradresuoti išvedimo"
 
-#: redir.c:218
+#: redir.c:219
 #, fuzzy, c-format
 msgid "cannot create temp file for here-document: %s"
 msgstr "nepavyko sukurti laikino failo „here“ dokumentui: %s"
 
-#: redir.c:222
+#: redir.c:223
 #, fuzzy, c-format
 msgid "%s: cannot assign fd to variable"
 msgstr "%s: negalima priskirti sąrašo masyvo elementui"
 
-#: redir.c:649
+#: redir.c:650
 msgid "/dev/(tcp|udp)/host/port not supported without networking"
 msgstr "/dev/(tcp|udp)/serveris/prievadas nepalaikoma be tinklo"
 
-#: redir.c:938 redir.c:1053 redir.c:1114 redir.c:1284
+#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303
 msgid "redirection error: cannot duplicate fd"
 msgstr "nukreipimo klaida: nepavyko dublikuoti fd"
 
-#: shell.c:347
+#: shell.c:353
 msgid "could not find /tmp, please create!"
 msgstr "nepavyko rasti /tmp, sukurkite šį aplanką!"
 
-#: shell.c:351
+#: shell.c:357
 msgid "/tmp must be a valid directory name"
 msgstr "/tmp turi būti taisyklingas aplanko pavadinimas"
 
-#: shell.c:804
+#: shell.c:826
 msgid "pretty-printing mode ignored in interactive shells"
 msgstr ""
 
-#: shell.c:948
+#: shell.c:972
 #, c-format
 msgid "%c%c: invalid option"
 msgstr "%c%c: netaisyklingas parametras"
 
-#: shell.c:1319
+#: shell.c:1343
 #, fuzzy, c-format
 msgid "cannot set uid to %d: effective uid %d"
 msgstr "nepavyko dublikuoti fd %d į fd %d"
 
-#: shell.c:1330
+#: shell.c:1354
 #, fuzzy, c-format
 msgid "cannot set gid to %d: effective gid %d"
 msgstr "nepavyko dublikuoti fd %d į fd %d"
 
-#: shell.c:1518
+#: shell.c:1544
 msgid "cannot start debugger; debugging mode disabled"
 msgstr ""
 
-#: shell.c:1632
+#: shell.c:1658
 #, fuzzy, c-format
 msgid "%s: Is a directory"
 msgstr "%s: aplankas"
 
-#: shell.c:1881
+#: shell.c:1907
 msgid "I have no name!"
 msgstr "Neturiu vardo!"
 
-#: shell.c:2035
+#: shell.c:2061
 #, c-format
 msgid "GNU bash, version %s-(%s)\n"
 msgstr "GNU bash, versija %s-(%s)\n"
 
-#: shell.c:2036
+#: shell.c:2062
 #, c-format
 msgid ""
 "Usage:\t%s [GNU long option] [option] ...\n"
@@ -1685,325 +1695,325 @@ msgstr ""
 "Naudojimas:\t%s [GNU ilgas parametras] [parametras] ...\n"
 "\t%s [GNU ilgas parametras] [parametras] scenarijaus-failas ...\n"
 
-#: shell.c:2038
+#: shell.c:2064
 msgid "GNU long options:\n"
 msgstr "GNU ilgi parametrai:\n"
 
-#: shell.c:2042
+#: shell.c:2068
 msgid "Shell options:\n"
 msgstr "Aplinkos parametrai:\n"
 
-#: shell.c:2043
+#: shell.c:2069
 #, fuzzy
 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n"
 msgstr ""
 "\t-irsD arba -c komanda arba -O shopt_nustatymas\t\t(tik iškvietimui)\n"
 
-#: shell.c:2062
+#: shell.c:2088
 #, c-format
 msgid "\t-%s or -o option\n"
 msgstr "\t-%s arba -o nustatymas\n"
 
-#: shell.c:2068
+#: shell.c:2094
 #, fuzzy, c-format
 msgid "Type `%s -c \"help set\"' for more information about shell options.\n"
 msgstr ""
 "Bandykite „%s --help“ arba „%s --usage“, jei norite gauti daugiau "
 "informacijos.\n"
 
-#: shell.c:2069
+#: shell.c:2095
 #, fuzzy, c-format
 msgid "Type `%s -c help' for more information about shell builtin commands.\n"
 msgstr "Bandykite „ldd --help“, jei norite daugiau informacijos."
 
-#: shell.c:2070
+#: shell.c:2096
 #, c-format
 msgid "Use the `bashbug' command to report bugs.\n"
 msgstr "Naudokite komandą „bashbug“ klaidoms pranešti.\n"
 
-#: shell.c:2072
+#: shell.c:2098
 #, c-format
 msgid "bash home page: <http://www.gnu.org/software/bash>\n"
 msgstr ""
 
-#: shell.c:2073
+#: shell.c:2099
 #, c-format
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 msgstr ""
 
-#: sig.c:757
+#: sig.c:765
 #, c-format
 msgid "sigprocmask: %d: invalid operation"
 msgstr "sigprocmask: %d: netaisyklinga operacija"
 
-#: siglist.c:47
+#: siglist.c:48
 msgid "Bogus signal"
 msgstr ""
 
-#: siglist.c:50
+#: siglist.c:51
 msgid "Hangup"
 msgstr ""
 
-#: siglist.c:54
+#: siglist.c:55
 msgid "Interrupt"
 msgstr ""
 
-#: siglist.c:58
+#: siglist.c:59
 msgid "Quit"
 msgstr ""
 
-#: siglist.c:62
+#: siglist.c:63
 msgid "Illegal instruction"
 msgstr ""
 
-#: siglist.c:66
+#: siglist.c:67
 msgid "BPT trace/trap"
 msgstr ""
 
-#: siglist.c:74
+#: siglist.c:75
 msgid "ABORT instruction"
 msgstr "ABORT instrukcija"
 
-#: siglist.c:78
+#: siglist.c:79
 msgid "EMT instruction"
 msgstr ""
 
-#: siglist.c:82
+#: siglist.c:83
 msgid "Floating point exception"
 msgstr "Slankaus kablelio klaida"
 
-#: siglist.c:86
+#: siglist.c:87
 msgid "Killed"
 msgstr ""
 
-#: siglist.c:90
+#: siglist.c:91
 #, fuzzy
 msgid "Bus error"
 msgstr "sintaksės klaida"
 
-#: siglist.c:94
+#: siglist.c:95
 msgid "Segmentation fault"
 msgstr "Segmentacijos klaida"
 
-#: siglist.c:98
+#: siglist.c:99
 msgid "Bad system call"
 msgstr ""
 
-#: siglist.c:102
+#: siglist.c:103
 msgid "Broken pipe"
 msgstr ""
 
-#: siglist.c:106
+#: siglist.c:107
 msgid "Alarm clock"
 msgstr "Žadintuvas"
 
-#: siglist.c:110
+#: siglist.c:111
 msgid "Terminated"
 msgstr "Nutraukta"
 
-#: siglist.c:114
+#: siglist.c:115
 msgid "Urgent IO condition"
 msgstr ""
 
-#: siglist.c:118
+#: siglist.c:119
 msgid "Stopped (signal)"
 msgstr "Sustabdyta (signalas)"
 
-#: siglist.c:126
+#: siglist.c:127
 msgid "Continue"
 msgstr "Tęsti"
 
-#: siglist.c:134
+#: siglist.c:135
 msgid "Child death or stop"
 msgstr ""
 
-#: siglist.c:138
+#: siglist.c:139
 msgid "Stopped (tty input)"
 msgstr "Sustabdyta (tty įvedimas)"
 
-#: siglist.c:142
+#: siglist.c:143
 msgid "Stopped (tty output)"
 msgstr "Sustabdyta (tty išvedimas)"
 
-#: siglist.c:146
+#: siglist.c:147
 msgid "I/O ready"
 msgstr ""
 
-#: siglist.c:150
+#: siglist.c:151
 msgid "CPU limit"
 msgstr "CPU riba"
 
-#: siglist.c:154
+#: siglist.c:155
 msgid "File limit"
 msgstr "Failų riba"
 
-#: siglist.c:158
+#: siglist.c:159
 msgid "Alarm (virtual)"
 msgstr ""
 
-#: siglist.c:162
+#: siglist.c:163
 msgid "Alarm (profile)"
 msgstr ""
 
-#: siglist.c:166
+#: siglist.c:167
 msgid "Window changed"
 msgstr "Langas pakeistas"
 
-#: siglist.c:170
+#: siglist.c:171
 msgid "Record lock"
 msgstr ""
 
-#: siglist.c:174
+#: siglist.c:175
 msgid "User signal 1"
 msgstr ""
 
-#: siglist.c:178
+#: siglist.c:179
 msgid "User signal 2"
 msgstr ""
 
-#: siglist.c:182
+#: siglist.c:183
 msgid "HFT input data pending"
 msgstr ""
 
-#: siglist.c:186
+#: siglist.c:187
 msgid "power failure imminent"
 msgstr ""
 
-#: siglist.c:190
+#: siglist.c:191
 msgid "system crash imminent"
 msgstr ""
 
-#: siglist.c:194
+#: siglist.c:195
 msgid "migrate process to another CPU"
 msgstr "proceso migravimas į kitą CPU"
 
-#: siglist.c:198
+#: siglist.c:199
 msgid "programming error"
 msgstr "programavimo klaida"
 
-#: siglist.c:202
+#: siglist.c:203
 msgid "HFT monitor mode granted"
 msgstr ""
 
-#: siglist.c:206
+#: siglist.c:207
 msgid "HFT monitor mode retracted"
 msgstr ""
 
-#: siglist.c:210
+#: siglist.c:211
 msgid "HFT sound sequence has completed"
 msgstr ""
 
-#: siglist.c:214
+#: siglist.c:215
 msgid "Information request"
 msgstr "Informacijos užklausa"
 
-#: siglist.c:222 siglist.c:224
+#: siglist.c:223 siglist.c:225
 #, c-format
 msgid "Unknown Signal #%d"
 msgstr "Nežinomas signalas #%d"
 
-#: subst.c:1476 subst.c:1666
+#: subst.c:1480 subst.c:1670
 #, c-format
 msgid "bad substitution: no closing `%s' in %s"
 msgstr "blogas keitinys: trūksta „%s“ %s"
 
-#: subst.c:3281
+#: subst.c:3307
 #, c-format
 msgid "%s: cannot assign list to array member"
 msgstr "%s: negalima priskirti sąrašo masyvo elementui"
 
-#: subst.c:5910 subst.c:5926
+#: subst.c:6048 subst.c:6064
 msgid "cannot make pipe for process substitution"
 msgstr ""
 
-#: subst.c:5985
+#: subst.c:6124
 msgid "cannot make child for process substitution"
 msgstr ""
 
-#: subst.c:6059
+#: subst.c:6198
 #, c-format
 msgid "cannot open named pipe %s for reading"
 msgstr ""
 
-#: subst.c:6061
+#: subst.c:6200
 #, c-format
 msgid "cannot open named pipe %s for writing"
 msgstr ""
 
-#: subst.c:6084
+#: subst.c:6223
 #, c-format
 msgid "cannot duplicate named pipe %s as fd %d"
 msgstr ""
 
-#: subst.c:6213
+#: subst.c:6370
 #, fuzzy
 msgid "command substitution: ignored null byte in input"
 msgstr "blogas keitinys: trūksta „%s“ %s"
 
-#: subst.c:6353
+#: subst.c:6533
 msgid "cannot make pipe for command substitution"
 msgstr ""
 
-#: subst.c:6397
+#: subst.c:6580
 msgid "cannot make child for command substitution"
 msgstr ""
 
-#: subst.c:6423
+#: subst.c:6613
 msgid "command_substitute: cannot duplicate pipe as fd 1"
 msgstr ""
 
-#: subst.c:6883 subst.c:9952
+#: subst.c:7082 subst.c:10252
 #, c-format
 msgid "%s: invalid variable name for name reference"
 msgstr ""
 
-#: subst.c:6979 subst.c:6997 subst.c:7169
+#: subst.c:7178 subst.c:7196 subst.c:7369
 #, fuzzy, c-format
 msgid "%s: invalid indirect expansion"
 msgstr "%s: nesamas parametras"
 
-#: subst.c:7013 subst.c:7177
+#: subst.c:7212 subst.c:7377
 #, fuzzy, c-format
 msgid "%s: invalid variable name"
 msgstr "%s: netaisyklingas veiksmo pavadinimas"
 
-#: subst.c:7256
+#: subst.c:7478
 #, fuzzy, c-format
 msgid "%s: parameter not set"
 msgstr "%s: parametras tuščias arba nenustatytas"
 
-#: subst.c:7258
+#: subst.c:7480
 #, c-format
 msgid "%s: parameter null or not set"
 msgstr "%s: parametras tuščias arba nenustatytas"
 
-#: subst.c:7503 subst.c:7518
+#: subst.c:7727 subst.c:7742
 #, c-format
 msgid "%s: substring expression < 0"
 msgstr "%s: posekio išraiška < 0"
 
-#: subst.c:9281 subst.c:9302
+#: subst.c:9560 subst.c:9587
 #, c-format
 msgid "%s: bad substitution"
 msgstr "%s: blogas keitinys"
 
-#: subst.c:9390
+#: subst.c:9678
 #, c-format
 msgid "$%s: cannot assign in this way"
 msgstr "$%s: negalima tokiu būdu priskirti"
 
-#: subst.c:9814
+#: subst.c:10111
 msgid ""
 "future versions of the shell will force evaluation as an arithmetic "
 "substitution"
 msgstr ""
 
-#: subst.c:10367
+#: subst.c:10795
 #, fuzzy, c-format
 msgid "bad substitution: no closing \"`\" in %s"
 msgstr "blogas keitinys: trūksta „%s“ %s"
 
-#: subst.c:11434
+#: subst.c:11874
 #, c-format
 msgid "no match: %s"
 msgstr "nėra atitikmenų: %s"
@@ -2026,21 +2036,21 @@ msgstr "tikėtasi „)“"
 msgid "`)' expected, found %s"
 msgstr "tikėtasi „)“, rasta %s"
 
-#: test.c:466 test.c:799
+#: test.c:469 test.c:814
 #, c-format
 msgid "%s: binary operator expected"
 msgstr "%s: tikėtasi binarinio operatoriaus"
 
-#: test.c:756 test.c:759
+#: test.c:771 test.c:774
 #, c-format
 msgid "%s: unary operator expected"
 msgstr "%s: tikėtasi unarinio operatoriaus"
 
-#: test.c:881
+#: test.c:896
 msgid "missing `]'"
 msgstr "trūksta „]“"
 
-#: test.c:899
+#: test.c:914
 #, fuzzy, c-format
 msgid "syntax error: `%s' unexpected"
 msgstr "sintaksės klaida: netikėtas „;“"
@@ -2049,100 +2059,105 @@ msgstr "sintaksės klaida: netikėtas „;“"
 msgid "invalid signal number"
 msgstr "netaisyklingas signalo numeris"
 
-#: trap.c:325
+#: trap.c:323
 #, c-format
 msgid "trap handler: maximum trap handler level exceeded (%d)"
 msgstr ""
 
-#: trap.c:414
+#: trap.c:412
 #, c-format
 msgid "run_pending_traps: bad value in trap_list[%d]: %p"
 msgstr "run_pending_traps: bloga trap_list[%d] reikšmė: %p"
 
-#: trap.c:418
+#: trap.c:416
 #, c-format
 msgid ""
 "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
 msgstr "run_pending_traps: signalo doroklė yra SIG_DFL, siunčiamas %d (%s) sau"
 
-#: trap.c:487
+#: trap.c:509
 #, c-format
 msgid "trap_handler: bad signal %d"
 msgstr "trap_handler: blogas signalas %d"
 
-#: variables.c:421
+#: variables.c:424
 #, c-format
 msgid "error importing function definition for `%s'"
 msgstr "klaida importuojant funkcijos apibrėžimą „%s“"
 
-#: variables.c:833
+#: variables.c:838
 #, c-format
 msgid "shell level (%d) too high, resetting to 1"
 msgstr "aplinkos lygmuo (%d) per aukštas, nustatoma į 1"
 
-#: variables.c:2674
+#: variables.c:2642
 msgid "make_local_variable: no function context at current scope"
 msgstr ""
 
-#: variables.c:2693
+#: variables.c:2661
 #, c-format
 msgid "%s: variable may not be assigned value"
 msgstr ""
 
-#: variables.c:3475
+#: variables.c:2818 variables.c:2874
+#, c-format
+msgid "%s: cannot inherit value from incompatible type"
+msgstr ""
+
+#: variables.c:3459
 #, c-format
 msgid "%s: assigning integer to name reference"
 msgstr ""
 
-#: variables.c:4404
+#: variables.c:4390
 msgid "all_local_variables: no function context at current scope"
 msgstr ""
 
-#: variables.c:4771
+#: variables.c:4757
 #, fuzzy, c-format
 msgid "%s has null exportstr"
 msgstr "%s: parametras tuščias arba nenustatytas"
 
-#: variables.c:4776 variables.c:4785
+#: variables.c:4762 variables.c:4771
 #, c-format
 msgid "invalid character %d in exportstr for %s"
 msgstr "netaisyklingas simbolis %d %s exportstr'e"
 
-#: variables.c:4791
+#: variables.c:4777
 #, c-format
 msgid "no `=' in exportstr for %s"
 msgstr "%s exportstr'e trūksta „=“"
 
-#: variables.c:5331
+#: variables.c:5317
 msgid "pop_var_context: head of shell_variables not a function context"
 msgstr ""
 
-#: variables.c:5344
+#: variables.c:5330
 msgid "pop_var_context: no global_variables context"
 msgstr "pop_var_context: nėra global_variables konteksto"
 
-#: variables.c:5424
+#: variables.c:5410
 msgid "pop_scope: head of shell_variables not a temporary environment scope"
 msgstr ""
 
-#: variables.c:6387
+#: variables.c:6400
 #, fuzzy, c-format
 msgid "%s: %s: cannot open as FILE"
 msgstr "%s: nepavyko atverti: %s"
 
-#: variables.c:6392
+#: variables.c:6405
 #, fuzzy, c-format
 msgid "%s: %s: invalid value for trace file descriptor"
 msgstr "%d: netaisyklingas failo deskriptorius: %s"
 
-#: variables.c:6437
+#: variables.c:6450
 #, fuzzy, c-format
 msgid "%s: %s: compatibility value out of range"
 msgstr "%s: %s išėjo už ribų"
 
 #: version.c:46 version2.c:46
 #, fuzzy
-msgid "Copyright (C) 2020 Free Software Foundation, Inc."
+msgid "Copyright (C) 2022 Free Software Foundation, Inc."
 msgstr "Autorinės teisės (C) 2009 Free Software Foundation, Inc."
 
 #: version.c:47 version2.c:47
@@ -2234,12 +2249,16 @@ msgstr "command [-pVv] komanda [arg ...]"
 
 #: builtins.c:78
 #, fuzzy
-msgid "declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]"
+msgid ""
+"declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] "
+"[name ...]"
 msgstr "declare [-aAfFilrtux] [-p] [pavadinimas[=reikšmė] ...]"
 
 #: builtins.c:80
 #, fuzzy
-msgid "typeset [-aAfFgiIlnrtux] [-p] name[=value] ..."
+msgid ""
+"typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] "
+"[name ...]"
 msgstr "typeset [-aAfFilrtux] [-p] pavadinimas[=reikšmė] ..."
 
 #: builtins.c:82
@@ -2340,7 +2359,7 @@ msgstr "return [n]"
 
 #: builtins.c:142
 #, fuzzy
-msgid "set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]"
+msgid "set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]"
 msgstr "set [--abefhkmnptuvxBCHP] [-o nustatymas] [arg ...]"
 
 #: builtins.c:144
@@ -2391,7 +2410,7 @@ msgstr "type [-afptP] pavadinimas [pavadinimas ...]"
 
 #: builtins.c:171
 #, fuzzy
-msgid "ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]"
+msgid "ulimit [-SHabcdefiklmnpqrstuvxPRT] [limit]"
 msgstr "ulimit [-SHacdefilmnpqrstuvx] [riba]"
 
 #: builtins.c:174
@@ -2437,11 +2456,13 @@ msgstr ""
 "KOMANDOS; ] fi"
 
 #: builtins.c:196
-msgid "while COMMANDS; do COMMANDS; done"
+#, fuzzy
+msgid "while COMMANDS; do COMMANDS-2; done"
 msgstr "while KOMANDOS; do KOMANDOS; done"
 
 #: builtins.c:198
-msgid "until COMMANDS; do COMMANDS; done"
+#, fuzzy
+msgid "until COMMANDS; do COMMANDS-2; done"
 msgstr "until KOMANDOS; do KOMANDOS; done"
 
 #: builtins.c:200
@@ -3288,7 +3309,9 @@ msgid ""
 "    word to the second NAME, and so on, with any leftover words assigned to\n"
 "    the last NAME.  Only the characters found in $IFS are recognized as "
 "word\n"
-"    delimiters.\n"
+"    delimiters. By default, the backslash character escapes delimiter "
+"characters\n"
+"    and newline.\n"
 "    \n"
 "    If no NAMEs are supplied, the line read is stored in the REPLY "
 "variable.\n"
@@ -3329,7 +3352,7 @@ msgid ""
 "    or an invalid file descriptor is supplied as the argument to -u."
 msgstr ""
 
-#: builtins.c:1041
+#: builtins.c:1042
 msgid ""
 "Return from a shell function.\n"
 "    \n"
@@ -3341,7 +3364,7 @@ msgid ""
 "    Returns N, or failure if the shell is not executing a function or script."
 msgstr ""
 
-#: builtins.c:1054
+#: builtins.c:1055
 msgid ""
 "Set or unset values of shell options and positional parameters.\n"
 "    \n"
@@ -3427,7 +3450,7 @@ msgid ""
 "    Returns success unless an invalid option is given."
 msgstr ""
 
-#: builtins.c:1139
+#: builtins.c:1140
 msgid ""
 "Unset values and attributes of shell variables and functions.\n"
 "    \n"
@@ -3449,7 +3472,7 @@ msgid ""
 "    Returns success unless an invalid option is given or a NAME is read-only."
 msgstr ""
 
-#: builtins.c:1161
+#: builtins.c:1162
 msgid ""
 "Set export attribute for shell variables.\n"
 "    \n"
@@ -3468,7 +3491,7 @@ msgid ""
 "    Returns success unless an invalid option is given or NAME is invalid."
 msgstr ""
 
-#: builtins.c:1180
+#: builtins.c:1181
 msgid ""
 "Mark shell variables as unchangeable.\n"
 "    \n"
@@ -3489,7 +3512,7 @@ msgid ""
 "    Returns success unless an invalid option is given or NAME is invalid."
 msgstr ""
 
-#: builtins.c:1202
+#: builtins.c:1203
 msgid ""
 "Shift positional parameters.\n"
 "    \n"
@@ -3500,7 +3523,7 @@ msgid ""
 "    Returns success unless N is negative or greater than $#."
 msgstr ""
 
-#: builtins.c:1214 builtins.c:1229
+#: builtins.c:1215 builtins.c:1230
 #, fuzzy
 msgid ""
 "Execute commands from a file in the current shell.\n"
@@ -3519,7 +3542,7 @@ msgstr ""
 "    Jei nurodyta ARGUMENTŲ, jie tampa poziciniais parametrais iškvietus\n"
 "    FAILĄ."
 
-#: builtins.c:1245
+#: builtins.c:1246
 msgid ""
 "Suspend shell execution.\n"
 "    \n"
@@ -3533,7 +3556,7 @@ msgid ""
 "    Returns success unless job control is not enabled or an error occurs."
 msgstr ""
 
-#: builtins.c:1261
+#: builtins.c:1262
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -3616,7 +3639,7 @@ msgid ""
 "    false or an invalid argument is given."
 msgstr ""
 
-#: builtins.c:1343
+#: builtins.c:1344
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -3624,7 +3647,7 @@ msgid ""
 "    be a literal `]', to match the opening `['."
 msgstr ""
 
-#: builtins.c:1352
+#: builtins.c:1353
 msgid ""
 "Display process times.\n"
 "    \n"
@@ -3636,7 +3659,7 @@ msgid ""
 "    Always succeeds."
 msgstr ""
 
-#: builtins.c:1364
+#: builtins.c:1365
 msgid ""
 "Trap signals and other events.\n"
 "    \n"
@@ -3680,7 +3703,7 @@ msgid ""
 "given."
 msgstr ""
 
-#: builtins.c:1400
+#: builtins.c:1401
 msgid ""
 "Display information about command type.\n"
 "    \n"
@@ -3710,7 +3733,7 @@ msgid ""
 "found."
 msgstr ""
 
-#: builtins.c:1431
+#: builtins.c:1432
 msgid ""
 "Modify shell resource limits.\n"
 "    \n"
@@ -3760,7 +3783,7 @@ msgid ""
 "    Returns success unless an invalid option is supplied or an error occurs."
 msgstr ""
 
-#: builtins.c:1482
+#: builtins.c:1483
 msgid ""
 "Display or set file mode mask.\n"
 "    \n"
@@ -3778,7 +3801,7 @@ msgid ""
 "    Returns success unless MODE is invalid or an invalid option is given."
 msgstr ""
 
-#: builtins.c:1502
+#: builtins.c:1503
 msgid ""
 "Wait for job completion and return exit status.\n"
 "    \n"
@@ -3810,7 +3833,7 @@ msgid ""
 "    children."
 msgstr ""
 
-#: builtins.c:1533
+#: builtins.c:1534
 msgid ""
 "Wait for process completion and return exit status.\n"
 "    \n"
@@ -3825,7 +3848,7 @@ msgid ""
 "    option is given."
 msgstr ""
 
-#: builtins.c:1548
+#: builtins.c:1549
 msgid ""
 "Execute commands for each member in a list.\n"
 "    \n"
@@ -3838,7 +3861,7 @@ msgid ""
 "    Returns the status of the last command executed."
 msgstr ""
 
-#: builtins.c:1562
+#: builtins.c:1563
 msgid ""
 "Arithmetic for loop.\n"
 "    \n"
@@ -3855,7 +3878,7 @@ msgid ""
 "    Returns the status of the last command executed."
 msgstr ""
 
-#: builtins.c:1580
+#: builtins.c:1581
 msgid ""
 "Select words from a list and execute commands.\n"
 "    \n"
@@ -3875,7 +3898,7 @@ msgid ""
 "    Returns the status of the last command executed."
 msgstr ""
 
-#: builtins.c:1601
+#: builtins.c:1602
 msgid ""
 "Report time consumed by pipeline's execution.\n"
 "    \n"
@@ -3891,7 +3914,7 @@ msgid ""
 "    The return status is the return status of PIPELINE."
 msgstr ""
 
-#: builtins.c:1618
+#: builtins.c:1619
 msgid ""
 "Execute commands based on pattern matching.\n"
 "    \n"
@@ -3902,7 +3925,7 @@ msgid ""
 "    Returns the status of the last command executed."
 msgstr ""
 
-#: builtins.c:1630
+#: builtins.c:1631
 msgid ""
 "Execute commands based on conditional.\n"
 "    \n"
@@ -3923,13 +3946,14 @@ msgid ""
 "    Returns the status of the last command executed."
 msgstr ""
 
-#: builtins.c:1647
+#: builtins.c:1648
 #, fuzzy
 msgid ""
 "Execute commands as long as a test succeeds.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `while' COMMANDS has an exit status of zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS "
+"has\n"
+"    an exit status of zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
@@ -3937,13 +3961,14 @@ msgstr ""
 "Išskleisti ir vykdyti KOMANDAS tol, kol galutinė komanda iš\n"
 "    „while“ komandų grąžina klaidos kodą 0."
 
-#: builtins.c:1659
+#: builtins.c:1660
 #, fuzzy
 msgid ""
 "Execute commands as long as a test does not succeed.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `until' COMMANDS has an exit status which is not zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS "
+"has\n"
+"    an exit status which is not zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
@@ -3951,7 +3976,7 @@ msgstr ""
 "Išskleisti ir vykdyti KOMANDAS tol, kol galutinė komanda iš\n"
 "    „until“ komandų grąžina klaidos kodą, nelygų 0."
 
-#: builtins.c:1671
+#: builtins.c:1672
 msgid ""
 "Create a coprocess named NAME.\n"
 "    \n"
@@ -3964,7 +3989,7 @@ msgid ""
 "    The coproc command returns an exit status of 0."
 msgstr ""
 
-#: builtins.c:1685
+#: builtins.c:1686
 msgid ""
 "Define shell function.\n"
 "    \n"
@@ -3978,7 +4003,7 @@ msgid ""
 "    Returns success unless NAME is readonly."
 msgstr ""
 
-#: builtins.c:1699
+#: builtins.c:1700
 #, fuzzy
 msgid ""
 "Group commands as a unit.\n"
@@ -3992,7 +4017,7 @@ msgstr ""
 "Vykdyti eilę komandų grupėje.  Tai yra vienas iš būdų nukreipti\n"
 "    visos eilės komandų įvedimą/išvedimą."
 
-#: builtins.c:1711
+#: builtins.c:1712
 msgid ""
 "Resume job in foreground.\n"
 "    \n"
@@ -4006,7 +4031,7 @@ msgid ""
 "    Returns the status of the resumed job."
 msgstr ""
 
-#: builtins.c:1726
+#: builtins.c:1727
 msgid ""
 "Evaluate arithmetic expression.\n"
 "    \n"
@@ -4017,7 +4042,7 @@ msgid ""
 "    Returns 1 if EXPRESSION evaluates to 0; returns 0 otherwise."
 msgstr ""
 
-#: builtins.c:1738
+#: builtins.c:1739
 msgid ""
 "Execute conditional command.\n"
 "    \n"
@@ -4045,7 +4070,7 @@ msgid ""
 "    0 or 1 depending on value of EXPRESSION."
 msgstr ""
 
-#: builtins.c:1764
+#: builtins.c:1765
 msgid ""
 "Common shell variable names and usage.\n"
 "    \n"
@@ -4099,7 +4124,7 @@ msgid ""
 "    \t\tcommands should be saved on the history list.\n"
 msgstr ""
 
-#: builtins.c:1821
+#: builtins.c:1822
 msgid ""
 "Add directories to stack.\n"
 "    \n"
@@ -4130,7 +4155,7 @@ msgid ""
 "    change fails."
 msgstr ""
 
-#: builtins.c:1855
+#: builtins.c:1856
 msgid ""
 "Remove directories from stack.\n"
 "    \n"
@@ -4157,7 +4182,7 @@ msgid ""
 "    change fails."
 msgstr ""
 
-#: builtins.c:1885
+#: builtins.c:1886
 msgid ""
 "Display directory stack.\n"
 "    \n"
@@ -4186,7 +4211,7 @@ msgid ""
 "    Returns success unless an invalid option is supplied or an error occurs."
 msgstr ""
 
-#: builtins.c:1916
+#: builtins.c:1917
 msgid ""
 "Set and unset shell options.\n"
 "    \n"
@@ -4206,7 +4231,7 @@ msgid ""
 "    given or OPTNAME is disabled."
 msgstr ""
 
-#: builtins.c:1937
+#: builtins.c:1938
 #, fuzzy
 msgid ""
 "Formats and prints ARGUMENTS under control of the FORMAT.\n"
@@ -4230,6 +4255,8 @@ msgid ""
 "    \n"
 "      %b\texpand backslash escape sequences in the corresponding argument\n"
 "      %q\tquote the argument in a way that can be reused as shell input\n"
+"      %Q\tlike %q, but apply any precision to the unquoted argument before\n"
+"    \t\tquoting\n"
 "      %(fmt)T\toutput the date-time string resulting from using FMT as a "
 "format\n"
 "    \t        string for strftime(3)\n"
@@ -4257,7 +4284,7 @@ msgstr ""
 "    Jei pateiktas parametras -v, išvedimas įrašomas į aplinkos kintamąjį\n"
 "    KINT, užuot spausdinus į standartinį išvedimą."
 
-#: builtins.c:1971
+#: builtins.c:1974
 msgid ""
 "Specify how arguments are to be completed by Readline.\n"
 "    \n"
@@ -4288,7 +4315,7 @@ msgid ""
 "    Returns success unless an invalid option is supplied or an error occurs."
 msgstr ""
 
-#: builtins.c:2001
+#: builtins.c:2004
 #, fuzzy
 msgid ""
 "Display possible completions depending on the options.\n"
@@ -4306,7 +4333,7 @@ msgstr ""
 "    Jei pateiktas nebūtinasis ŽODŽIO argumentas, išvedami įrašai,\n"
 "    atitinkantys ŽODĮ."
 
-#: builtins.c:2016
+#: builtins.c:2019
 msgid ""
 "Modify or display completion options.\n"
 "    \n"
@@ -4338,7 +4365,7 @@ msgid ""
 "    have a completion specification defined."
 msgstr ""
 
-#: builtins.c:2047
+#: builtins.c:2050
 msgid ""
 "Read lines from the standard input into an indexed array variable.\n"
 "    \n"
@@ -4380,13 +4407,17 @@ msgid ""
 "    not an indexed array."
 msgstr ""
 
-#: builtins.c:2083
+#: builtins.c:2086
 msgid ""
 "Read lines from a file into an array variable.\n"
 "    \n"
 "    A synonym for `mapfile'."
 msgstr ""
 
+#, fuzzy, c-format
+#~ msgid "%s: invalid associative array key"
+#~ msgstr "%s: netaisyklingas veiksmo pavadinimas"
+
 #, fuzzy
 #~ msgid ""
 #~ "Returns the context of the current subroutine call.\n"
index 894af69262b9e18e2562732855c4b1434784c419..8d59f1d2d005776494227ca472a7022f0747d685 100644 (file)
Binary files a/po/nb.gmo and b/po/nb.gmo differ
index cdeff4d168da93dbcecf66c4e9fcd76e6ac774de..1a2da59c449c41b0e78b3ea9c9c25c703eff626a 100644 (file)
--- a/po/nb.po
+++ b/po/nb.po
@@ -1,82 +1,78 @@
 # Norwegian (bokmål) translation of GNU Bash
 # Copyright (C) 2019 Free Software Foundation, Inc.
 # This file is distributed under the same license as the bash package.
+# Johnny A. Solbu <johnny@solbu.net>, 2022.
 # Åka Sikrom <a4@hush.com>, 2015-2019.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: bash-5.0\n"
+"Project-Id-Version: bash-5.2-rc1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-11-28 12:51-0500\n"
-"PO-Revision-Date: 2019-01-08 19:40+0100\n"
-"Last-Translator: Åka Sikrom <a4@hush.com>\n"
-"Language-Team: Norwegian Bokmaal <i18n-nb@lister.ping.uio.no>\n"
+"POT-Creation-Date: 2022-01-11 14:50-0500\n"
+"PO-Revision-Date: 2022-07-03 20:40+0200\n"
+"Last-Translator: Johnny A. Solbu <johnny@solbu.net>\n"
+"Language-Team: Norwegian Bokmaal <l10n-no@lister.huftis.org>\n"
 "Language: nb\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Poedit 2.0.6\n"
+"X-Generator: Poedit 2.2.3\n"
 
 #: arrayfunc.c:66
 msgid "bad array subscript"
 msgstr "feil i tabell-underskript"
 
-#: arrayfunc.c:421 builtins/declare.def:638 variables.c:2274 variables.c:2300
-#: variables.c:3133
+#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268
+#: variables.c:3101
 #, c-format
 msgid "%s: removing nameref attribute"
 msgstr "%s: fjerner navnref-egenskap"
 
-#: arrayfunc.c:446 builtins/declare.def:851
+#: arrayfunc.c:496 builtins/declare.def:868
 #, c-format
 msgid "%s: cannot convert indexed to associative array"
 msgstr "%s: indeksert tabell kan ikke konverteres til assosiativ tabell"
 
-#: arrayfunc.c:700
-#, c-format
-msgid "%s: invalid associative array key"
-msgstr "%s: ugyldig nøkkel for assosiativ tabell"
-
-#: arrayfunc.c:702
+#: arrayfunc.c:777
 #, c-format
 msgid "%s: cannot assign to non-numeric index"
 msgstr "%s: kan ikke tildeles ikke-numerisk indeks"
 
-#: arrayfunc.c:747
+#: arrayfunc.c:822
 #, c-format
 msgid "%s: %s: must use subscript when assigning associative array"
 msgstr "%s: %s: underskript må brukes ved tildeling av assosiative tabeller"
 
-#: bashhist.c:452
+#: bashhist.c:455
 #, c-format
 msgid "%s: cannot create: %s"
 msgstr "%s: klarte ikke å opprette: %s"
 
-#: bashline.c:4310
+#: bashline.c:4479
 msgid "bash_execute_unix_command: cannot find keymap for command"
 msgstr "bash_execute_unix_command: fant ikke tastaturoppsett for kommando"
 
-#: bashline.c:4459
+#: bashline.c:4637
 #, c-format
 msgid "%s: first non-whitespace character is not `\"'"
 msgstr "%s: første ikke-blanktegn må være «\"»"
 
-#: bashline.c:4488
+#: bashline.c:4666
 #, c-format
 msgid "no closing `%c' in %s"
 msgstr "avsluttende «%c» mangler i %s"
 
-#: bashline.c:4519
+#: bashline.c:4697
 #, c-format
 msgid "%s: missing colon separator"
 msgstr "%s: kolon-skilletegn mangler"
 
-#: bashline.c:4555
-#, fuzzy, c-format
+#: bashline.c:4733
+#, c-format
 msgid "`%s': cannot unbind in command keymap"
-msgstr "«%s»: klarte ikke å fjerne tildeling"
+msgstr "«%s»: kan ikke oppheve bindingen i kommandotastaturet"
 
 #: braces.c:327
 #, c-format
@@ -93,7 +89,7 @@ msgstr "brace-utvidelse: klarte ikke å tildele minne for %u elementer"
 msgid "brace expansion: failed to allocate memory for `%s'"
 msgstr "brace-utvidelse: klarte ikke å tildele minne for «%s»"
 
-#: builtins/alias.def:131 variables.c:1844
+#: builtins/alias.def:131 variables.c:1817
 #, c-format
 msgid "`%s': invalid alias name"
 msgstr "«%s»: ugyldig alias"
@@ -125,7 +121,7 @@ msgstr "%s er ikke tilknyttet en knapp.\n"
 #: builtins/bind.def:340
 #, c-format
 msgid "%s can be invoked via "
-msgstr "%s kan startes via"
+msgstr "%s kan startes via "
 
 #: builtins/bind.def:378 builtins/bind.def:395
 #, c-format
@@ -141,7 +137,6 @@ msgid "only meaningful in a `for', `while', or `until' loop"
 msgstr "gir bare mening i «for»-, «while»- og «until»-sløyfer"
 
 #: builtins/caller.def:136
-#, fuzzy
 msgid ""
 "Returns the context of the current subroutine call.\n"
 "    \n"
@@ -153,24 +148,18 @@ msgid ""
 "    current one; the top frame is frame 0."
 msgstr ""
 "Vis konteksten for gjeldende underrutine-kall.\n"
-"    \n"
-"    Hvis UTTRykk ikke er valgt, vises «$line $filename».  Med UTTRykk vises\n"
-"    «$line $subroutine $filename». Denne ekstrainformasjonen kan brukes\n"
-"    til stabelsporing.\n"
-"    \n"
-"    Verdien av UTTRykk viser hvor mange kall-rammer programmet skal bevege "
-"seg\n"
-"    gjennom tilbake fra gjeldende ramme. Øverste ramme er 0.\n"
-"    \n"
-"    Avslutningsstatus:\n"
-"    Status er 0, med mindre skallet ikke kjører en skallfunksjon eller\n"
-"    valgt UTTRykk er ugyldig."
+" Uten EXPR, returnerer \"$line $filnavn\". Med EXPR, returnerer\n"
+"     \"$line $subrutine $filename denne ekstra informasjonen kan brukes til å\n"
+"     gi en stabelsporing.\n"
+"     \n"
+"     Verdien til EXPR indikerer hvor mange anropsrammer som skal gå tilbake før\n"
+"     nåværende; topprammen er ramme 0."
 
 #: builtins/cd.def:327
 msgid "HOME not set"
 msgstr "HOME har ingen verdi"
 
-#: builtins/cd.def:335 builtins/common.c:161 test.c:901
+#: builtins/cd.def:335 builtins/common.c:161 test.c:916
 msgid "too many arguments"
 msgstr "for mange argumenter"
 
@@ -190,14 +179,14 @@ msgstr "linje %d: "
 #: builtins/common.c:134 error.c:264
 #, c-format
 msgid "warning: "
-msgstr "advarsel:"
+msgstr "advarsel: "
 
 #: builtins/common.c:148
 #, c-format
 msgid "%s: usage: "
 msgstr "%s: bruk: "
 
-#: builtins/common.c:193 shell.c:516 shell.c:844
+#: builtins/common.c:193 shell.c:524 shell.c:866
 #, c-format
 msgid "%s: option requires an argument"
 msgstr "%s: valget krever et argument"
@@ -212,7 +201,7 @@ msgstr "%s: valget krever et tall-argument"
 msgid "%s: not found"
 msgstr "fant ikke %s"
 
-#: builtins/common.c:216 shell.c:857
+#: builtins/common.c:216 shell.c:879
 #, c-format
 msgid "%s: invalid option"
 msgstr "%s: ugyldig valg"
@@ -222,7 +211,7 @@ msgstr "%s: ugyldig valg"
 msgid "%s: invalid option name"
 msgstr "%s: ugyldig valgnavn"
 
-#: builtins/common.c:230 execute_cmd.c:2373 general.c:368 general.c:373
+#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373
 #, c-format
 msgid "`%s': not a valid identifier"
 msgstr "«%s»: ugyldig navn"
@@ -235,7 +224,7 @@ msgstr "ugyldig oktal-tall"
 msgid "invalid hex number"
 msgstr "ugldig heksadesimalt tall"
 
-#: builtins/common.c:244 expr.c:1569
+#: builtins/common.c:244 expr.c:1574
 msgid "invalid number"
 msgstr "ugyldig tall"
 
@@ -249,88 +238,93 @@ msgstr "%s: ugyldig signalspesifikasjon"
 msgid "`%s': not a pid or valid job spec"
 msgstr "«%s» er hverken hverken et PID eller en gyldig jobbspesifikasjon"
 
-#: builtins/common.c:266 error.c:510
+#: builtins/common.c:266 error.c:536
 #, c-format
 msgid "%s: readonly variable"
 msgstr "%s: skrivebeskyttet variabel"
 
-#: builtins/common.c:274
+#: builtins/common.c:273
+#, c-format
+msgid "%s: cannot assign"
+msgstr "%s: kan ikke tildele"
+
+#: builtins/common.c:281
 #, c-format
 msgid "%s: %s out of range"
 msgstr "%s: %s er utenfor rekkevidde"
 
-#: builtins/common.c:274 builtins/common.c:276
+#: builtins/common.c:281 builtins/common.c:283
 msgid "argument"
 msgstr "argument"
 
-#: builtins/common.c:276
+#: builtins/common.c:283
 #, c-format
 msgid "%s out of range"
 msgstr "%s er utenfor rekkevidde"
 
-#: builtins/common.c:284
+#: builtins/common.c:291
 #, c-format
 msgid "%s: no such job"
 msgstr "%s: jobben finnes ikke"
 
-#: builtins/common.c:292
+#: builtins/common.c:299
 #, c-format
 msgid "%s: no job control"
 msgstr "%s: ingen jobbkontroll"
 
-#: builtins/common.c:294
+#: builtins/common.c:301
 msgid "no job control"
 msgstr "ingen jobbkontroll"
 
-#: builtins/common.c:304
+#: builtins/common.c:311
 #, c-format
 msgid "%s: restricted"
 msgstr "%s: begrenset"
 
-#: builtins/common.c:306
+#: builtins/common.c:313
 msgid "restricted"
 msgstr "begrenset"
 
-#: builtins/common.c:314
+#: builtins/common.c:321
 #, c-format
 msgid "%s: not a shell builtin"
 msgstr "%s: ikke innebygd i skall"
 
-#: builtins/common.c:323
+#: builtins/common.c:330
 #, c-format
 msgid "write error: %s"
 msgstr "skrivefeil: %s"
 
-#: builtins/common.c:331
+#: builtins/common.c:338
 #, c-format
 msgid "error setting terminal attributes: %s"
 msgstr "feil under endring av terminal-egenskaper: %s"
 
-#: builtins/common.c:333
+#: builtins/common.c:340
 #, c-format
 msgid "error getting terminal attributes: %s"
 msgstr "feil under henting av terminal-egenskaper: %s"
 
-#: builtins/common.c:635
+#: builtins/common.c:642
 #, c-format
 msgid "%s: error retrieving current directory: %s: %s\n"
 msgstr "%s: feil under henting av gjeldende mappe: %s: %s\n"
 
-#: builtins/common.c:701 builtins/common.c:703
+#: builtins/common.c:708 builtins/common.c:710
 #, c-format
 msgid "%s: ambiguous job spec"
 msgstr "%s: flertydig jobbspesifikasjon"
 
-#: builtins/common.c:964
+#: builtins/common.c:971
 msgid "help not available in this version"
 msgstr "hjelp er ikke tilgjengelig for denne versjonen"
 
-#: builtins/common.c:1008 builtins/set.def:953 variables.c:3839
+#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825
 #, c-format
 msgid "%s: cannot unset: readonly %s"
 msgstr "%s: klarte ikke å fjerne verdi fra skrivebeskyttet %s"
 
-#: builtins/common.c:1013 builtins/set.def:932 variables.c:3844
+#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830
 #, c-format
 msgid "%s: cannot unset"
 msgstr "%s: klarte ikke å fjerne verdi"
@@ -340,108 +334,108 @@ msgstr "%s: klarte ikke å fjerne verdi"
 msgid "%s: invalid action name"
 msgstr "%s: ugyldig handlingsnavn"
 
-#: builtins/complete.def:486 builtins/complete.def:634
-#: builtins/complete.def:865
+#: builtins/complete.def:486 builtins/complete.def:642
+#: builtins/complete.def:873
 #, c-format
 msgid "%s: no completion specification"
 msgstr "%s: ingen spesifikasjon for fullføring"
 
-#: builtins/complete.def:688
+#: builtins/complete.def:696
 msgid "warning: -F option may not work as you expect"
 msgstr "advarsel: valget «-F» virker kanskje ikke slik du forventer"
 
-#: builtins/complete.def:690
+#: builtins/complete.def:698
 msgid "warning: -C option may not work as you expect"
 msgstr "advarsel: valget «-C» virker kanskje ikke slik du forventer"
 
-#: builtins/complete.def:838
+#: builtins/complete.def:846
 msgid "not currently executing completion function"
 msgstr "fullføringsfunksjon kjøres ikke nå"
 
-#: builtins/declare.def:134
+#: builtins/declare.def:137
 msgid "can only be used in a function"
 msgstr "kan bare brukes i funksjoner"
 
-#: builtins/declare.def:363 builtins/declare.def:756
+#: builtins/declare.def:437
+msgid "cannot use `-f' to make functions"
+msgstr "valget«-f» kan ikke brukes til å lage funksjoner"
+
+#: builtins/declare.def:464 execute_cmd.c:6132
+#, c-format
+msgid "%s: readonly function"
+msgstr "%s: skrivebeskyttet funksjon"
+
+#: builtins/declare.def:521 builtins/declare.def:804
 #, c-format
 msgid "%s: reference variable cannot be an array"
 msgstr "%s: referansevariabler kan ikke være tabeller (arrays)"
 
-#: builtins/declare.def:374 variables.c:3385
+#: builtins/declare.def:532 variables.c:3359
 #, c-format
 msgid "%s: nameref variable self references not allowed"
 msgstr "%s: navnref.-variabler kan ikke referere til seg selv"
 
-#: builtins/declare.def:379 variables.c:2104 variables.c:3304 variables.c:3312
-#: variables.c:3382
+#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286
+#: variables.c:3356
 #, c-format
 msgid "%s: circular name reference"
 msgstr "%s: sirkulær navnreferanse"
 
-#: builtins/declare.def:384 builtins/declare.def:762 builtins/declare.def:773
+#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820
 #, c-format
 msgid "`%s': invalid variable name for name reference"
 msgstr "«%s»: ugyldig variabelnavn for navnreferanse"
 
-#: builtins/declare.def:514
-msgid "cannot use `-f' to make functions"
-msgstr "valget«-f» kan ikke brukes til å lage funksjoner"
-
-#: builtins/declare.def:526 execute_cmd.c:5986
-#, c-format
-msgid "%s: readonly function"
-msgstr "%s: skrivebeskyttet funksjon"
-
-#: builtins/declare.def:824
-#, c-format
-msgid "%s: quoted compound array assignment deprecated"
-msgstr "%s: sammensatt tabell-tideling i hermetegn er utgått"
-
-#: builtins/declare.def:838
+#: builtins/declare.def:856
 #, c-format
 msgid "%s: cannot destroy array variables in this way"
 msgstr "%s: tabellvariabler kan ikke ødelegges på denne måten"
 
-#: builtins/declare.def:845 builtins/read.def:815
+#: builtins/declare.def:862 builtins/read.def:887
 #, c-format
 msgid "%s: cannot convert associative to indexed array"
 msgstr "%s: assosiative tabeller kan ikke konverteres til indekserte tabeller"
 
-#: builtins/enable.def:143 builtins/enable.def:151
+#: builtins/declare.def:891
+#, c-format
+msgid "%s: quoted compound array assignment deprecated"
+msgstr "%s: sammensatt tabell-tideling i hermetegn er utgått"
+
+#: builtins/enable.def:145 builtins/enable.def:153
 msgid "dynamic loading not available"
 msgstr "dynamisk innlasting er ikke tilgjengelig"
 
-#: builtins/enable.def:343
+#: builtins/enable.def:376
 #, c-format
 msgid "cannot open shared object %s: %s"
 msgstr "klarte ikke å åpne delt objekt %s: %s"
 
-#: builtins/enable.def:371
+#: builtins/enable.def:405
 #, c-format
 msgid "cannot find %s in shared object %s: %s"
 msgstr "fant ikke %s i delt objekt %s: %s"
 
-#: builtins/enable.def:388
-#, fuzzy, c-format
+#: builtins/enable.def:422
+#, c-format
 msgid "%s: dynamic builtin already loaded"
-msgstr "%s: ikke dynamisk innlastet"
+msgstr "%s: dynamisk innebygd allerede lastet"
 
-#: builtins/enable.def:392
+#: builtins/enable.def:426
 #, c-format
 msgid "load function for %s returns failure (%d): not loaded"
 msgstr "innlastingsfunksjon for %s førte til feilkode (%d). Ikke lastet inn"
 
-#: builtins/enable.def:517
+#: builtins/enable.def:551
 #, c-format
 msgid "%s: not dynamically loaded"
 msgstr "%s: ikke dynamisk innlastet"
 
-#: builtins/enable.def:543
+#: builtins/enable.def:577
 #, c-format
 msgid "%s: cannot delete: %s"
 msgstr "%s: klarte ikke å slette: %s"
 
-#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5818
+#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959
 #, c-format
 msgid "%s: is a directory"
 msgstr "%s: er en mappe"
@@ -456,7 +450,7 @@ msgstr "%s: ikke en vanlig fil"
 msgid "%s: file is too large"
 msgstr "%s: fila er for stor"
 
-#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1647
+#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673
 #, c-format
 msgid "%s: cannot execute binary file"
 msgstr "%s: klarte ikke å kjøre binærfil"
@@ -543,21 +537,20 @@ msgid ""
 "'\n"
 "\n"
 msgstr ""
+"'\n"
+"\n"
 
 #: builtins/help.def:185
 #, c-format
-msgid ""
-"no help topics match `%s'.  Try `help help' or `man -k %s' or `info %s'."
-msgstr ""
-"ingen hjelpeemner samsvarer med «%s».  Prøv «help help», «man -k %s» eller "
-"«info %s»."
+msgid "no help topics match `%s'.  Try `help help' or `man -k %s' or `info %s'."
+msgstr "ingen hjelpeemner samsvarer med «%s».  Prøv «help help», «man -k %s» eller «info %s»."
 
-#: builtins/help.def:224
+#: builtins/help.def:223
 #, c-format
 msgid "%s: cannot open: %s"
 msgstr "%s: klarte ikke å åpne: %s"
 
-#: builtins/help.def:524
+#: builtins/help.def:523
 #, c-format
 msgid ""
 "These shell commands are defined internally.  Type `help' to see this list.\n"
@@ -568,32 +561,29 @@ msgid ""
 "A star (*) next to a name means that the command is disabled.\n"
 "\n"
 msgstr ""
-"Disse skallkommandoene er internt definert. Skriv «help» for å se denne "
-"lista.\n"
+"Disse skallkommandoene er internt definert. Skriv «help» for å se denne lista.\n"
 "Skriv «help name» for å finne ut mer om funksjonen «name».\n"
 "Bruk «info bash» for å finne generell info om skallet.\n"
-"Bruk «man -k» eller «info» for å finne ut mer om kommandoer som ikke er på "
-"denne lista.\n"
+"Bruk «man -k» eller «info» for å finne ut mer om kommandoer som ikke er på denne lista.\n"
 "\n"
-"Stjerne (*) ved siden av et kommandonavn betyr at gjeldende kommando er "
-"slått av.\n"
+"Stjerne (*) ved siden av et kommandonavn betyr at gjeldende kommando er slått av.\n"
 "\n"
 
-#: builtins/history.def:155
+#: builtins/history.def:159
 msgid "cannot use more than one of -anrw"
 msgstr "du kan ikke bruke flere enn ett av valgene -anrw på én gang"
 
-#: builtins/history.def:188 builtins/history.def:198 builtins/history.def:213
-#: builtins/history.def:230 builtins/history.def:242 builtins/history.def:249
+#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215
+#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247
 msgid "history position"
 msgstr "historikkposisjon"
 
-#: builtins/history.def:340
+#: builtins/history.def:338
 #, c-format
 msgid "%s: invalid timestamp"
 msgstr "%s: ugyldig tidsstempel"
 
-#: builtins/history.def:451
+#: builtins/history.def:449
 #, c-format
 msgid "%s: history expansion failed"
 msgstr "%s: historikk-utvidelse mislyktes"
@@ -616,78 +606,78 @@ msgstr "%s: argumenter må være prosess- eller jobb-ID-er"
 msgid "Unknown error"
 msgstr "Ukjent feil"
 
-#: builtins/let.def:97 builtins/let.def:122 expr.c:639 expr.c:657
+#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658
 msgid "expression expected"
 msgstr "forventet uttrykk"
 
-#: builtins/mapfile.def:178
+#: builtins/mapfile.def:180
 #, c-format
 msgid "%s: not an indexed array"
 msgstr "%s: ikke en indeksert tabell"
 
-#: builtins/mapfile.def:271 builtins/read.def:308
+#: builtins/mapfile.def:276 builtins/read.def:336
 #, c-format
 msgid "%s: invalid file descriptor specification"
 msgstr "%s: ugyldig spesifikasjon av fildeskriptor"
 
-#: builtins/mapfile.def:279 builtins/read.def:315
+#: builtins/mapfile.def:284 builtins/read.def:343
 #, c-format
 msgid "%d: invalid file descriptor: %s"
 msgstr "%d: ugyldig fildeskriptor: %s"
 
-#: builtins/mapfile.def:288 builtins/mapfile.def:326
+#: builtins/mapfile.def:293 builtins/mapfile.def:331
 #, c-format
 msgid "%s: invalid line count"
 msgstr "%s: ugyldig linjeantall"
 
-#: builtins/mapfile.def:299
+#: builtins/mapfile.def:304
 #, c-format
 msgid "%s: invalid array origin"
 msgstr "%s: ugyldig tabellopphav"
 
-#: builtins/mapfile.def:316
+#: builtins/mapfile.def:321
 #, c-format
 msgid "%s: invalid callback quantum"
 msgstr "%s: ugyldig tilbakekallsmengde"
 
-#: builtins/mapfile.def:349
+#: builtins/mapfile.def:354
 msgid "empty array variable name"
 msgstr "tomt navn på tabellvariabel"
 
-#: builtins/mapfile.def:370
+#: builtins/mapfile.def:375
 msgid "array variable support required"
 msgstr "støtte for tabellvariabler kreves"
 
-#: builtins/printf.def:419
+#: builtins/printf.def:430
 #, c-format
 msgid "`%s': missing format character"
 msgstr "«%s»: formattegn mangler"
 
-#: builtins/printf.def:474
+#: builtins/printf.def:485
 #, c-format
 msgid "`%c': invalid time format specification"
 msgstr "«%c»: ugyldig spesifikasjon av tidsformat"
 
-#: builtins/printf.def:676
+#: builtins/printf.def:708
 #, c-format
 msgid "`%c': invalid format character"
 msgstr "«%c»: ugyldig formattegn"
 
-#: builtins/printf.def:702
+#: builtins/printf.def:734
 #, c-format
 msgid "warning: %s: %s"
 msgstr "advarsel: %s: %s"
 
-#: builtins/printf.def:788
+#: builtins/printf.def:822
 #, c-format
 msgid "format parsing problem: %s"
 msgstr "problem med tolkning av format: %s"
 
-#: builtins/printf.def:885
+#: builtins/printf.def:919
 msgid "missing hex digit for \\x"
 msgstr "heks-siffer mangler for \\x"
 
-#: builtins/printf.def:900
+#: builtins/printf.def:934
 #, c-format
 msgid "missing unicode digit for \\%c"
 msgstr "unicode-siffer mangler for  \\%c"
@@ -728,12 +718,10 @@ msgid ""
 "    \twith its position in the stack\n"
 "    \n"
 "    Arguments:\n"
-"      +N\tDisplays the Nth entry counting from the left of the list shown "
-"by\n"
+"      +N\tDisplays the Nth entry counting from the left of the list shown by\n"
 "    \tdirs when invoked without options, starting with zero.\n"
 "    \n"
-"      -N\tDisplays the Nth entry counting from the right of the list shown "
-"by\n"
+"      -N\tDisplays the Nth entry counting from the right of the list shown by\n"
 "\tdirs when invoked without options, starting with zero."
 msgstr ""
 "Vis liste over mapper som blir husket. Mapper\n"
@@ -820,8 +808,7 @@ msgid ""
 "    The `dirs' builtin displays the directory stack."
 msgstr ""
 "Fjerner mapper fra mappestabelen. Hvis ingen argumenter brukes,\n"
-"    fjerner programmet øverste mappe fra stabelen og bytter til det som "
-"deretter er øverste mappe.\n"
+"    fjerner programmet øverste mappe fra stabelen og bytter til det som deretter er øverste mappe.\n"
 "    \n"
 "    Valg:\n"
 "      -n\tLar være å bytte mappe når mapper fjernes fra stabelen,\n"
@@ -838,12 +825,12 @@ msgstr ""
 "    \n"
 "    Den innebygde funksjonen «dirs» viser mappestabelen."
 
-#: builtins/read.def:280
+#: builtins/read.def:308
 #, c-format
 msgid "%s: invalid timeout specification"
 msgstr "%s: ugyldig spesifikasjon av tidsavbrudd"
 
-#: builtins/read.def:755
+#: builtins/read.def:827
 #, c-format
 msgid "read error: %d: %s"
 msgstr "lesefeil: %d: %s"
@@ -854,11 +841,9 @@ msgstr "du kan bare «return» fra en funksjon eller kildeskript"
 
 #: builtins/set.def:869
 msgid "cannot simultaneously unset a function and a variable"
-msgstr ""
-"du kan ikke utføre «unset» (tømme både en funksjon og en variabel for "
-"verdier) samtidig"
+msgstr "du kan ikke utføre «unset» (tømme både en funksjon og en variabel for verdier) samtidig"
 
-#: builtins/set.def:966
+#: builtins/set.def:969
 #, c-format
 msgid "%s: not an array variable"
 msgstr "%s: ikke en tabellvariabel"
@@ -877,11 +862,11 @@ msgstr "%s: klarte ikke å eksportere"
 msgid "shift count"
 msgstr "shift-antall"
 
-#: builtins/shopt.def:310
+#: builtins/shopt.def:323
 msgid "cannot set and unset shell options simultaneously"
 msgstr "du kan ikke både definere og fjerne skallvalg samtidig"
 
-#: builtins/shopt.def:428
+#: builtins/shopt.def:444
 #, c-format
 msgid "%s: invalid shell option name"
 msgstr "%s: ugyldig navn på skallvalg"
@@ -948,16 +933,16 @@ msgstr "%s: ugyldig grenseargument"
 msgid "`%c': bad command"
 msgstr "«%c»: ugyldig kommando"
 
-#: builtins/ulimit.def:455
+#: builtins/ulimit.def:464
 #, c-format
 msgid "%s: cannot get limit: %s"
 msgstr "%s: klarte ikke å hente grense: %s"
 
-#: builtins/ulimit.def:481
+#: builtins/ulimit.def:490
 msgid "limit"
 msgstr "grense"
 
-#: builtins/ulimit.def:493 builtins/ulimit.def:793
+#: builtins/ulimit.def:502 builtins/ulimit.def:802
 #, c-format
 msgid "%s: cannot modify limit: %s"
 msgstr "%s: klarte ikke å endre grense: %s"
@@ -976,7 +961,7 @@ msgstr "«%c»: ugyldig symbolsk modus-operatør"
 msgid "`%c': invalid symbolic mode character"
 msgstr "«%c»: ugyldig symbolsk modustegn"
 
-#: error.c:89 error.c:347 error.c:349 error.c:351
+#: error.c:89 error.c:373 error.c:375 error.c:377
 msgid " line "
 msgstr " linje "
 
@@ -988,7 +973,7 @@ msgstr "forrige kommando: %s\n"
 #: error.c:172
 #, c-format
 msgid "Aborting..."
-msgstr "Abryter …"
+msgstr "Avbryter …"
 
 #. TRANSLATORS: this is a prefix for informational messages.
 #: error.c:287
@@ -996,96 +981,106 @@ msgstr "Abryter …"
 msgid "INFORM: "
 msgstr "INFORM: "
 
-#: error.c:462
+#: error.c:310
+#, c-format
+msgid "DEBUG warning: "
+msgstr "DEBUG-advarsel: "
+
+#: error.c:488
 msgid "unknown command error"
 msgstr "ukjent kommandofeil"
 
-#: error.c:463
+#: error.c:489
 msgid "bad command type"
 msgstr "ugyldig kommandotype"
 
-#: error.c:464
+#: error.c:490
 msgid "bad connector"
 msgstr "ugyldig tilkobling"
 
-#: error.c:465
+#: error.c:491
 msgid "bad jump"
 msgstr "ugyldig hopp"
 
-#: error.c:503
+#: error.c:529
 #, c-format
 msgid "%s: unbound variable"
 msgstr "%s: utildelt variabel"
 
-#: eval.c:242
+#: eval.c:243
 msgid "\atimed out waiting for input: auto-logout\n"
 msgstr "\atidsavbrudd for inndata: auto-utlogging\n"
 
-#: execute_cmd.c:537
+#: execute_cmd.c:555
 #, c-format
 msgid "cannot redirect standard input from /dev/null: %s"
 msgstr "klarte ikke å videresende standard inndata fra «/dev/null». %s"
 
-#: execute_cmd.c:1297
+#: execute_cmd.c:1317
 #, c-format
 msgid "TIMEFORMAT: `%c': invalid format character"
 msgstr "TIMEFORMAT: «%c» er et ugyldig formattegn"
 
-#: execute_cmd.c:2362
+#: execute_cmd.c:2391
 #, c-format
 msgid "execute_coproc: coproc [%d:%s] still exists"
 msgstr "execute_coproc: coproc [%d:%s] finnes fremdeles"
 
-#: execute_cmd.c:2486
+#: execute_cmd.c:2524
 msgid "pipe error"
 msgstr "datarør-feil"
 
-#: execute_cmd.c:4793
+#: execute_cmd.c:4923
 #, c-format
 msgid "eval: maximum eval nesting level exceeded (%d)"
 msgstr "eval: grensa for nivåer av eval-funksjoner (%d) er overskredet"
 
-#: execute_cmd.c:4805
+#: execute_cmd.c:4935
 #, c-format
 msgid "%s: maximum source nesting level exceeded (%d)"
 msgstr "%s: grensa for nivåer av kilder i kilder (%d) er overskredet"
 
-#: execute_cmd.c:4913
+#: execute_cmd.c:5043
 #, c-format
 msgid "%s: maximum function nesting level exceeded (%d)"
 msgstr "%s: grensa for nivåer av funksjoner i funksjoner (%d) er overskredet"
 
-#: execute_cmd.c:5467
+#: execute_cmd.c:5598
 #, c-format
 msgid "%s: restricted: cannot specify `/' in command names"
 msgstr "%s: ikke tillatt: kommandonavn kan ikke inneholde «/»"
 
-#: execute_cmd.c:5574
+#: execute_cmd.c:5715
 #, c-format
 msgid "%s: command not found"
 msgstr "fant ikke kommando %s"
 
-#: execute_cmd.c:5816
+#: execute_cmd.c:5957
 #, c-format
 msgid "%s: %s"
 msgstr "%s: %s"
 
-#: execute_cmd.c:5854
+#: execute_cmd.c:5975
+#, c-format
+msgid "%s: cannot execute: required file not found"
+msgstr "%s: kan ikke kjøres: den nødvendige filen ble ikke funnet"
+
+#: execute_cmd.c:6000
 #, c-format
 msgid "%s: %s: bad interpreter"
 msgstr "%s: %s: ugyldig tolk"
 
-#: execute_cmd.c:5891
+#: execute_cmd.c:6037
 #, c-format
 msgid "%s: cannot execute binary file: %s"
 msgstr "%s: klarte ikke å kjøre binærfil: %s"
 
-#: execute_cmd.c:5977
+#: execute_cmd.c:6123
 #, c-format
 msgid "`%s': is a special builtin"
 msgstr "«%s» er en innebygd spesialfunksjon"
 
-#: execute_cmd.c:6029
+#: execute_cmd.c:6175
 #, c-format
 msgid "cannot duplicate fd %d to fd %d"
 msgstr "klarte ikke å duplisere fd %d til fd %d"
@@ -1098,69 +1093,68 @@ msgstr "grensa for rekursjonsnivåer i uttrykk er overskredet"
 msgid "recursion stack underflow"
 msgstr "rekursjonsstabelen er tom"
 
-#: expr.c:477
+#: expr.c:478
 msgid "syntax error in expression"
 msgstr "uttrykk inneholder syntaksfeil"
 
-#: expr.c:521
+#: expr.c:522
 msgid "attempted assignment to non-variable"
 msgstr "du forsøkte å tilordne en verdi til noe som ikke er en variabel"
 
-#: expr.c:530
+#: expr.c:531
 msgid "syntax error in variable assignment"
 msgstr "variabeltildeling inneholder syntaksfeil"
 
-#: expr.c:544 expr.c:911
+#: expr.c:545 expr.c:912
 msgid "division by 0"
 msgstr "forsøkte å dele på 0"
 
-#: expr.c:592
+#: expr.c:593
 msgid "bug: bad expassign token"
 msgstr "programfeil: ugyldig expassign-symbol"
 
-#: expr.c:646
+#: expr.c:647
 msgid "`:' expected for conditional expression"
 msgstr "forventet «:» for betinget uttrykk"
 
-#: expr.c:972
+#: expr.c:973
 msgid "exponent less than 0"
 msgstr "eksponent er lavere enn 0"
 
-#: expr.c:1029
+#: expr.c:1030
 msgid "identifier expected after pre-increment or pre-decrement"
 msgstr "forventet identifikator etter pre-økning eller pre-forminskelse"
 
-#: expr.c:1056
+#: expr.c:1057
 msgid "missing `)'"
 msgstr "mangler «)»"
 
-#: expr.c:1107 expr.c:1487
+#: expr.c:1108 expr.c:1492
 msgid "syntax error: operand expected"
 msgstr "syntaksfeil: forventet operand"
 
-#: expr.c:1489
+#: expr.c:1494
 msgid "syntax error: invalid arithmetic operator"
 msgstr "syntaksfeil: ugyldig aritmetisk operatør"
 
-#: expr.c:1513
+#: expr.c:1518
 #, c-format
 msgid "%s%s%s: %s (error token is \"%s\")"
 msgstr "%s%s%s: %s (feilaktig symbol er «%s»)"
 
-#: expr.c:1573
+#: expr.c:1578
 msgid "invalid arithmetic base"
 msgstr "ugyldig aritmetisk grunntall"
 
-#: expr.c:1582
-#, fuzzy
+#: expr.c:1587
 msgid "invalid integer constant"
-msgstr "%s: ugyldig linjeantall"
+msgstr "ugyldig heltallskonstant"
 
-#: expr.c:1598
+#: expr.c:1603
 msgid "value too great for base"
 msgstr "verdien er for høy for grunntallet"
 
-#: expr.c:1647
+#: expr.c:1652
 #, c-format
 msgid "%s: expression error\n"
 msgstr "%s: feil i uttrykk\n"
@@ -1169,7 +1163,7 @@ msgstr "%s: feil i uttrykk\n"
 msgid "getcwd: cannot access parent directories"
 msgstr "getcwd: fikk ikke tilgang til foreldermapper"
 
-#: input.c:99 subst.c:6069
+#: input.c:99 subst.c:6208
 #, c-format
 msgid "cannot reset nodelay mode for fd %d"
 msgstr "klarte ikke å tilbakestille nodelay-modus for fd %d"
@@ -1188,167 +1182,167 @@ msgstr "save_bash_input: mellomlager for ny fd %d finnes allerede"
 msgid "start_pipeline: pgrp pipe"
 msgstr "start_pipeline: pgrp-datarør"
 
-#: jobs.c:906
+#: jobs.c:907
 #, c-format
 msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
-msgstr ""
+msgstr "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
 
-#: jobs.c:959
+#: jobs.c:960
 #, c-format
 msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
-msgstr ""
+msgstr "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
 
-#: jobs.c:1283
+#: jobs.c:1279
 #, c-format
 msgid "forked pid %d appears in running job %d"
 msgstr "kopiert pid %d finnes i kjørende jobb %d"
 
-#: jobs.c:1402
+#: jobs.c:1397
 #, c-format
 msgid "deleting stopped job %d with process group %ld"
 msgstr "sletter ventende bakgrunnsjobb %d med prosessgruppe %ld"
 
-#: jobs.c:1511
+#: jobs.c:1502
 #, c-format
 msgid "add_process: pid %5ld (%s) marked as still alive"
 msgstr "add_process: markert PID %5ld (%s) som levende"
 
-#: jobs.c:1850
+#: jobs.c:1839
 #, c-format
 msgid "describe_pid: %ld: no such pid"
 msgstr "describe_pid: %ld: pid-en finnes ikke"
 
-#: jobs.c:1865
+#: jobs.c:1854
 #, c-format
 msgid "Signal %d"
 msgstr "Signal %d"
 
-#: jobs.c:1879 jobs.c:1905
+#: jobs.c:1868 jobs.c:1894
 msgid "Done"
 msgstr "Ferdig"
 
-#: jobs.c:1884 siglist.c:122
+#: jobs.c:1873 siglist.c:123
 msgid "Stopped"
 msgstr "Venter"
 
-#: jobs.c:1888
+#: jobs.c:1877
 #, c-format
 msgid "Stopped(%s)"
 msgstr "Venter(%s)"
 
-#: jobs.c:1892
+#: jobs.c:1881
 msgid "Running"
 msgstr "Kjører"
 
-#: jobs.c:1909
+#: jobs.c:1898
 #, c-format
 msgid "Done(%d)"
 msgstr "Ferdig(%d)"
 
-#: jobs.c:1911
+#: jobs.c:1900
 #, c-format
 msgid "Exit %d"
 msgstr "Avsluttet %d"
 
-#: jobs.c:1914
+#: jobs.c:1903
 msgid "Unknown status"
 msgstr "Ukjent status"
 
-#: jobs.c:2001
+#: jobs.c:1990
 #, c-format
 msgid "(core dumped) "
 msgstr "(kjerne lagret i fil) "
 
-#: jobs.c:2020
+#: jobs.c:2009
 #, c-format
 msgid "  (wd: %s)"
 msgstr "  (wd: %s)"
 
-#: jobs.c:2259
+#: jobs.c:2250
 #, c-format
 msgid "child setpgid (%ld to %ld)"
 msgstr "underprosess setpgid (%ld til %ld)"
 
-#: jobs.c:2617 nojobs.c:664
+#: jobs.c:2608 nojobs.c:666
 #, c-format
 msgid "wait: pid %ld is not a child of this shell"
 msgstr "wait: pid %ld er ikke en underprosess av dette skallet"
 
-#: jobs.c:2893
+#: jobs.c:2884
 #, c-format
 msgid "wait_for: No record of process %ld"
 msgstr "wait_for: Ingen kjennskap til prosess %ld"
 
-#: jobs.c:3236
+#: jobs.c:3223
 #, c-format
 msgid "wait_for_job: job %d is stopped"
 msgstr "wait_for_job: prosess %d venter"
 
-#: jobs.c:3564
-#, fuzzy, c-format
+#: jobs.c:3551
+#, c-format
 msgid "%s: no current jobs"
-msgstr "%s: jobben finnes ikke"
+msgstr "%s: ingen aktuelle jobber"
 
-#: jobs.c:3571
+#: jobs.c:3558
 #, c-format
 msgid "%s: job has terminated"
 msgstr "%s: jobben er avsluttet"
 
-#: jobs.c:3580
+#: jobs.c:3567
 #, c-format
 msgid "%s: job %d already in background"
 msgstr "%s: jobb %d kjører allerede i bakgrunnen"
 
-#: jobs.c:3806
+#: jobs.c:3793
 msgid "waitchld: turning on WNOHANG to avoid indefinite block"
 msgstr "waitchld: slår på WNOHANG for å unngå kronisk blokkering"
 
-#: jobs.c:4320
+#: jobs.c:4307
 #, c-format
 msgid "%s: line %d: "
 msgstr "%s: linje %d: "
 
-#: jobs.c:4334 nojobs.c:919
+#: jobs.c:4321 nojobs.c:921
 #, c-format
 msgid " (core dumped)"
 msgstr " (kjerne lagret i fil)"
 
-#: jobs.c:4346 jobs.c:4359
+#: jobs.c:4333 jobs.c:4346
 #, c-format
 msgid "(wd now: %s)\n"
 msgstr "(wd nå: %s)\n"
 
-#: jobs.c:4391
+#: jobs.c:4378
 msgid "initialize_job_control: getpgrp failed"
 msgstr "initialize_job_control: getpgrp mislyktes"
 
-#: jobs.c:4447
+#: jobs.c:4434
 msgid "initialize_job_control: no job control in background"
 msgstr "initialize_job_control: ingen jobbkontroll i bakgrunn"
 
-#: jobs.c:4463
+#: jobs.c:4450
 msgid "initialize_job_control: line discipline"
 msgstr "initialize_job_control: linjeregler"
 
-#: jobs.c:4473
+#: jobs.c:4460
 msgid "initialize_job_control: setpgid"
 msgstr "initialize_job_control: setpgid"
 
-#: jobs.c:4494 jobs.c:4503
+#: jobs.c:4481 jobs.c:4490
 #, c-format
 msgid "cannot set terminal process group (%d)"
 msgstr "klarte ikke å velge terminal-prosessgruppe (%d)"
 
-#: jobs.c:4508
+#: jobs.c:4495
 msgid "no job control in this shell"
 msgstr "ingen jobbkontroll i dette skallet"
 
-#: lib/malloc/malloc.c:353
+#: lib/malloc/malloc.c:367
 #, c-format
 msgid "malloc: failed assertion: %s\n"
 msgstr "malloc: mislykket premiss: %s\n"
 
-#: lib/malloc/malloc.c:369
+#: lib/malloc/malloc.c:383
 #, c-format
 msgid ""
 "\r\n"
@@ -1357,49 +1351,47 @@ msgstr ""
 "\r\n"
 "malloc: %s:%d: urimelig premiss\r\n"
 
-#: lib/malloc/malloc.c:370 lib/malloc/malloc.c:933
+#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941
 msgid "unknown"
 msgstr "ukjent"
 
-#: lib/malloc/malloc.c:882
+#: lib/malloc/malloc.c:892
 msgid "malloc: block on free list clobbered"
 msgstr "malloc: rotete blokk på befrielsesliste"
 
-#: lib/malloc/malloc.c:972
+#: lib/malloc/malloc.c:980
 msgid "free: called with already freed block argument"
 msgstr "free: ble bedt om å behandle blokk som allerede er ledig"
 
-#: lib/malloc/malloc.c:975
+#: lib/malloc/malloc.c:983
 msgid "free: called with unallocated block argument"
 msgstr "free: ble bedt om å behandle blokk som ikke er tildelt"
 
-#: lib/malloc/malloc.c:994
+#: lib/malloc/malloc.c:1001
 msgid "free: underflow detected; mh_nbytes out of range"
 msgstr "free: tomt. mh_nbytes er utenfor rekkevidde"
 
-#: lib/malloc/malloc.c:1001
-#, fuzzy
+#: lib/malloc/malloc.c:1007
 msgid "free: underflow detected; magic8 corrupted"
-msgstr "free: tomt. mh_nbytes er utenfor rekkevidde"
+msgstr "fri: underflyt oppdaget; magic8 er skadet"
 
-#: lib/malloc/malloc.c:1009
+#: lib/malloc/malloc.c:1014
 msgid "free: start and end chunk sizes differ"
 msgstr "free: start- og sluttdel er av ulik størrelse"
 
-#: lib/malloc/malloc.c:1119
+#: lib/malloc/malloc.c:1176
 msgid "realloc: called with unallocated block argument"
 msgstr "realloc: ble bedt om å behandle blokk som ikke er tildelt"
 
-#: lib/malloc/malloc.c:1134
+#: lib/malloc/malloc.c:1191
 msgid "realloc: underflow detected; mh_nbytes out of range"
 msgstr "realloc: tomt. mh_nbytes er utenfor rekkevidde"
 
-#: lib/malloc/malloc.c:1141
-#, fuzzy
+#: lib/malloc/malloc.c:1197
 msgid "realloc: underflow detected; magic8 corrupted"
-msgstr "realloc: tomt. mh_nbytes er utenfor rekkevidde"
+msgstr "realloc: underflyt oppdaget; magic8 er skadet"
 
-#: lib/malloc/malloc.c:1150
+#: lib/malloc/malloc.c:1205
 msgid "realloc: start and end chunk sizes differ"
 msgstr "realloc: start- og sluttdel er av ulik størrelse"
 
@@ -1441,22 +1433,22 @@ msgstr "%s: ugyldig spesifikasjon av nettverkssti"
 msgid "network operations not supported"
 msgstr "nettverkshandlinger støttes ikke"
 
-#: locale.c:217
+#: locale.c:219
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s)"
 msgstr "setlocale: LC_ALL: klarte ikke å bytte region (%s)"
 
-#: locale.c:219
+#: locale.c:221
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s): %s"
 msgstr "setlocale: LC_ALL: klarte ikke å bytte region (%s): %s"
 
-#: locale.c:292
+#: locale.c:294
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s)"
 msgstr "setlocale: %s: klarte ikke å bytte region (%s)"
 
-#: locale.c:294
+#: locale.c:296
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s): %s"
 msgstr "setlocale: %s: klarte ikke å bytte region (%s): %s"
@@ -1474,141 +1466,136 @@ msgstr "Du har ny e-post i $_"
 msgid "The mail in %s has been read\n"
 msgstr "Posten i %s er lest\n"
 
-#: make_cmd.c:317
+#: make_cmd.c:314
 msgid "syntax error: arithmetic expression required"
 msgstr "syntaksfeil: aritmetisk uttrykk kreves"
 
-#: make_cmd.c:319
+#: make_cmd.c:316
 msgid "syntax error: `;' unexpected"
 msgstr "syntaksfeil: uforventet «;»"
 
-#: make_cmd.c:320
+#: make_cmd.c:317
 #, c-format
 msgid "syntax error: `((%s))'"
 msgstr "syntaksfeil: «((%s))»"
 
-#: make_cmd.c:572
+#: make_cmd.c:569
 #, c-format
 msgid "make_here_document: bad instruction type %d"
 msgstr "make_here_document: %d er en ugyldig instrukstype"
 
-#: make_cmd.c:657
+#: make_cmd.c:668
 #, c-format
 msgid "here-document at line %d delimited by end-of-file (wanted `%s')"
 msgstr "here-dokument ved linje %d adskilt av slutt på fil (forventet «%s»)"
 
-#: make_cmd.c:756
+#: make_cmd.c:769
 #, c-format
 msgid "make_redirection: redirection instruction `%d' out of range"
-msgstr ""
-"make_redirection: videresendinginstruks «%d» er utenfor tillatt rekkevidde"
+msgstr "make_redirection: videresendinginstruks «%d» er utenfor tillatt rekkevidde"
 
-#: parse.y:2393
+#: parse.y:2428
 #, c-format
-msgid ""
-"shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line "
-"truncated"
-msgstr ""
-"shell_getc: «shell_input_line_size» (%zu) overskrider SIZE_MAX (%lu): linja "
-"er forkortet"
+msgid "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line truncated"
+msgstr "shell_getc: «shell_input_line_size» (%zu) overskrider SIZE_MAX (%lu): linja er forkortet"
 
-#: parse.y:2826
+#: parse.y:2921
 msgid "maximum here-document count exceeded"
 msgstr "grensa for maksimalt antall here-dokumenter er overskredet"
 
-#: parse.y:3581 parse.y:3957 parse.y:4556
+#: parse.y:3684 parse.y:4244 parse.y:6148
 #, c-format
 msgid "unexpected EOF while looking for matching `%c'"
 msgstr "uforventet slutt på fil (EOF) under søk etter «%c»"
 
-#: parse.y:4696
+#: parse.y:4452
 msgid "unexpected EOF while looking for `]]'"
 msgstr "uforventet slutt på fil (EOF) under søk etter «]]»"
 
-#: parse.y:4701
+#: parse.y:4457
 #, c-format
 msgid "syntax error in conditional expression: unexpected token `%s'"
 msgstr "syntaksfeil i betinget uttrykk: forventet ikke symbolet «%s»"
 
-#: parse.y:4705
+#: parse.y:4461
 msgid "syntax error in conditional expression"
 msgstr "syntaksfeil i betinget uttrykk"
 
-#: parse.y:4783
+#: parse.y:4539
 #, c-format
 msgid "unexpected token `%s', expected `)'"
 msgstr "forventet ikke symbolet «%s», men «)»"
 
-#: parse.y:4787
+#: parse.y:4543
 msgid "expected `)'"
 msgstr "forventet «)»"
 
-#: parse.y:4815
+#: parse.y:4571
 #, c-format
 msgid "unexpected argument `%s' to conditional unary operator"
 msgstr "«%s» er et uforventet argument for betinget unær operatør"
 
-#: parse.y:4819
+#: parse.y:4575
 msgid "unexpected argument to conditional unary operator"
 msgstr "uforventet argument for betinget unær operatør"
 
-#: parse.y:4865
+#: parse.y:4621
 #, c-format
 msgid "unexpected token `%s', conditional binary operator expected"
 msgstr "«%s» er et uforventet symbol. Forventet betinget binær operatør"
 
-#: parse.y:4869
+#: parse.y:4625
 msgid "conditional binary operator expected"
 msgstr "forventet betinget binæroperatør"
 
-#: parse.y:4891
+#: parse.y:4647
 #, c-format
 msgid "unexpected argument `%s' to conditional binary operator"
 msgstr "«%s» er et uforventet argument for betinget binæroperatør"
 
-#: parse.y:4895
+#: parse.y:4651
 msgid "unexpected argument to conditional binary operator"
 msgstr "uforventet argument for betinget binæroperatør"
 
-#: parse.y:4906
+#: parse.y:4662
 #, c-format
 msgid "unexpected token `%c' in conditional command"
 msgstr "«%c» er et uforventet symbol i en betinget kommando"
 
-#: parse.y:4909
+#: parse.y:4665
 #, c-format
 msgid "unexpected token `%s' in conditional command"
 msgstr "«%s» er et uforventet symbol i en betinget kommando"
 
-#: parse.y:4913
+#: parse.y:4669
 #, c-format
 msgid "unexpected token %d in conditional command"
 msgstr "«%d» er et uforventet symbol i en betinget kommando"
 
-#: parse.y:6336
+#: parse.y:6118
 #, c-format
 msgid "syntax error near unexpected token `%s'"
 msgstr "syntaksfeil ved «%s», som er et uforventet symbol"
 
-#: parse.y:6355
+#: parse.y:6137
 #, c-format
 msgid "syntax error near `%s'"
 msgstr "syntaksfeil ved «%s»"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error: unexpected end of file"
 msgstr "syntaksfeil: uforventet slutt på fil"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error"
 msgstr "syntaksfeil"
 
-#: parse.y:6428
+#: parse.y:6216
 #, c-format
 msgid "Use \"%s\" to leave the shell.\n"
 msgstr "Bruk «%s» for å gå ut av skallet.\n"
 
-#: parse.y:6602
+#: parse.y:6394
 msgid "unexpected EOF while looking for matching `)'"
 msgstr "uforventet slutt på fil (EOF) under søk etter «)»"
 
@@ -1646,94 +1633,94 @@ msgstr "xtrace_set: filpeker er NULL"
 msgid "xtrace fd (%d) != fileno xtrace fp (%d)"
 msgstr "xtrace fd (%d) != fileno xtrace fp (%d)"
 
-#: print_cmd.c:1540
+#: print_cmd.c:1545
 #, c-format
 msgid "cprintf: `%c': invalid format character"
 msgstr "cprintf: «%c»: ugyldig formattegn"
 
-#: redir.c:149 redir.c:197
+#: redir.c:150 redir.c:198
 msgid "file descriptor out of range"
 msgstr "fildeskriptor er utenfor tillatt rekkevidde"
 
-#: redir.c:204
+#: redir.c:205
 #, c-format
 msgid "%s: ambiguous redirect"
 msgstr "%s: flertydig videresending"
 
-#: redir.c:208
+#: redir.c:209
 #, c-format
 msgid "%s: cannot overwrite existing file"
 msgstr "%s: klarte ikke å overskrive fil"
 
-#: redir.c:213
+#: redir.c:214
 #, c-format
 msgid "%s: restricted: cannot redirect output"
 msgstr "%s: ikke tillatt: klarte ikke å videresende utdata"
 
-#: redir.c:218
+#: redir.c:219
 #, c-format
 msgid "cannot create temp file for here-document: %s"
 msgstr "klarte ikke å lage midlertidig fil for here-dokument: %s"
 
-#: redir.c:222
+#: redir.c:223
 #, c-format
 msgid "%s: cannot assign fd to variable"
 msgstr "%s: klarte ikke å knytte fd til variabel"
 
-#: redir.c:649
+#: redir.c:650
 msgid "/dev/(tcp|udp)/host/port not supported without networking"
 msgstr "/dev/(tcp|udp)/host/port støttes ikke uten nettverkstilkobling"
 
-#: redir.c:938 redir.c:1053 redir.c:1114 redir.c:1284
+#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303
 msgid "redirection error: cannot duplicate fd"
 msgstr "videresendingsfeil: klarte ikke å duplisere fd"
 
-#: shell.c:347
+#: shell.c:353
 msgid "could not find /tmp, please create!"
 msgstr "fant ikke «/tmp». Opprett denne mappa!"
 
-#: shell.c:351
+#: shell.c:357
 msgid "/tmp must be a valid directory name"
 msgstr "«/tmp» må være et gyldig mappenavn"
 
-#: shell.c:804
+#: shell.c:826
 msgid "pretty-printing mode ignored in interactive shells"
 msgstr "pen utskriftsmodus blir ignorert i interaktive skall"
 
-#: shell.c:948
+#: shell.c:972
 #, c-format
 msgid "%c%c: invalid option"
 msgstr "%c%c: ugyldig valg"
 
-#: shell.c:1319
+#: shell.c:1343
 #, c-format
 msgid "cannot set uid to %d: effective uid %d"
 msgstr "klarte ikke å velge %d som uid. Effektiv uid: %d"
 
-#: shell.c:1330
+#: shell.c:1354
 #, c-format
 msgid "cannot set gid to %d: effective gid %d"
 msgstr "klarte ikke å velge %d som gid. Effektiv gid: %d"
 
-#: shell.c:1518
+#: shell.c:1544
 msgid "cannot start debugger; debugging mode disabled"
 msgstr "klarte ikke å starte feilsøkingsverktøy. Feilsøkingsmodus slått av"
 
-#: shell.c:1632
+#: shell.c:1658
 #, c-format
 msgid "%s: Is a directory"
 msgstr "%s: er en mappe"
 
-#: shell.c:1881
+#: shell.c:1907
 msgid "I have no name!"
 msgstr "Jeg manger navn!"
 
-#: shell.c:2035
+#: shell.c:2061
 #, c-format
 msgid "GNU bash, version %s-(%s)\n"
 msgstr "GNU bash, versjon %s-(%s)\n"
 
-#: shell.c:2036
+#: shell.c:2062
 #, c-format
 msgid ""
 "Usage:\t%s [GNU long option] [option] ...\n"
@@ -1742,323 +1729,317 @@ msgstr ""
 "Bruk:\t%s [langt GNU-valg] [valg] …\n"
 "\t%s [langt GNU-valg] [valg] skriptfil …\n"
 
-#: shell.c:2038
+#: shell.c:2064
 msgid "GNU long options:\n"
 msgstr "Lange GNU-valg:\n"
 
-#: shell.c:2042
+#: shell.c:2068
 msgid "Shell options:\n"
 msgstr "Skallvalg:\n"
 
-#: shell.c:2043
+#: shell.c:2069
 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n"
-msgstr ""
-"\t«-ilrsD»,  «-c kommando» eller «-O kortvalg_valg»\t\t(kun programkall)\n"
+msgstr "\t«-ilrsD»,  «-c kommando» eller «-O kortvalg_valg»\t\t(kun programkall)\n"
 
-#: shell.c:2062
+#: shell.c:2088
 #, c-format
 msgid "\t-%s or -o option\n"
 msgstr "\t«-%s» eller «-o»\n"
 
-#: shell.c:2068
+#: shell.c:2094
 #, c-format
 msgid "Type `%s -c \"help set\"' for more information about shell options.\n"
 msgstr "Skriv «%s -c \"help set\"» for mer informasjon om skallvalg.\n"
 
-#: shell.c:2069
+#: shell.c:2095
 #, c-format
 msgid "Type `%s -c help' for more information about shell builtin commands.\n"
 msgstr "Skriv «%s -c help» for mer informasjon om innebygde skallkommandoer.\n"
 
-#: shell.c:2070
+#: shell.c:2096
 #, c-format
 msgid "Use the `bashbug' command to report bugs.\n"
 msgstr "Bruk kommandoen «bashbug» for å rapportere programfeil.\n"
 
-#: shell.c:2072
+#: shell.c:2098
 #, c-format
 msgid "bash home page: <http://www.gnu.org/software/bash>\n"
 msgstr "bash-nettside: <http://www.gnu.org/software/bash>\n"
 
-#: shell.c:2073
+#: shell.c:2099
 #, c-format
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
-msgstr ""
-"Generell hjelp til bruk av GNU-programvare: <http://www.gnu.org/gethelp/>\n"
+msgstr "Generell hjelp til bruk av GNU-programvare: <http://www.gnu.org/gethelp/>\n"
 
-#: sig.c:757
+#: sig.c:765
 #, c-format
 msgid "sigprocmask: %d: invalid operation"
 msgstr "sigprocmask: %d: ugyldig handling"
 
-#: siglist.c:47
+#: siglist.c:48
 msgid "Bogus signal"
 msgstr "Ugyldig signal"
 
-#: siglist.c:50
+#: siglist.c:51
 msgid "Hangup"
 msgstr "Legg på"
 
-#: siglist.c:54
+#: siglist.c:55
 msgid "Interrupt"
 msgstr "Forstyrr"
 
-#: siglist.c:58
+#: siglist.c:59
 msgid "Quit"
 msgstr "Avslutt"
 
-#: siglist.c:62
+#: siglist.c:63
 msgid "Illegal instruction"
 msgstr "Ugyldig instruks"
 
-#: siglist.c:66
+#: siglist.c:67
 msgid "BPT trace/trap"
 msgstr "BPT-sporing/-fanging"
 
-#: siglist.c:74
+#: siglist.c:75
 msgid "ABORT instruction"
 msgstr "ABORT-instruks"
 
-#: siglist.c:78
+#: siglist.c:79
 msgid "EMT instruction"
 msgstr "EMT-instruks"
 
-#: siglist.c:82
+#: siglist.c:83
 msgid "Floating point exception"
 msgstr "Flyttallsfeil"
 
-#: siglist.c:86
+#: siglist.c:87
 msgid "Killed"
 msgstr "Drept"
 
-#: siglist.c:90
+#: siglist.c:91
 msgid "Bus error"
 msgstr "Bussfeil"
 
-#: siglist.c:94
+#: siglist.c:95
 msgid "Segmentation fault"
 msgstr "Segmenteringsfeil"
 
-#: siglist.c:98
+#: siglist.c:99
 msgid "Bad system call"
 msgstr "Ugyldig systemkall"
 
-#: siglist.c:102
+#: siglist.c:103
 msgid "Broken pipe"
 msgstr "Ødelagt datarør"
 
-#: siglist.c:106
+#: siglist.c:107
 msgid "Alarm clock"
 msgstr "Alarmklokke"
 
-#: siglist.c:110
+#: siglist.c:111
 msgid "Terminated"
 msgstr "Avsluttet"
 
-#: siglist.c:114
+#: siglist.c:115
 msgid "Urgent IO condition"
 msgstr "Hastende IO-tilstand"
 
-#: siglist.c:118
+#: siglist.c:119
 msgid "Stopped (signal)"
 msgstr "Stoppet (signal)"
 
-#: siglist.c:126
+#: siglist.c:127
 msgid "Continue"
 msgstr "Fortsett"
 
-#: siglist.c:134
+#: siglist.c:135
 msgid "Child death or stop"
 msgstr "Død eller stans av underprosess"
 
-#: siglist.c:138
+#: siglist.c:139
 msgid "Stopped (tty input)"
 msgstr "Stoppet (tty-inndata)"
 
-#: siglist.c:142
+#: siglist.c:143
 msgid "Stopped (tty output)"
 msgstr "Stoppet (tty-utdata)"
 
-#: siglist.c:146
+#: siglist.c:147
 msgid "I/O ready"
 msgstr "I/O klar"
 
-#: siglist.c:150
+#: siglist.c:151
 msgid "CPU limit"
 msgstr "CPU-grense"
 
-#: siglist.c:154
+#: siglist.c:155
 msgid "File limit"
 msgstr "Filgrense"
 
-#: siglist.c:158
+#: siglist.c:159
 msgid "Alarm (virtual)"
 msgstr "Alarm (virtuell)"
 
-#: siglist.c:162
+#: siglist.c:163
 msgid "Alarm (profile)"
 msgstr "Alarm (profil)"
 
-#: siglist.c:166
+#: siglist.c:167
 msgid "Window changed"
 msgstr "Vindu endret"
 
-#: siglist.c:170
+#: siglist.c:171
 msgid "Record lock"
 msgstr "Husk lås"
 
-#: siglist.c:174
+#: siglist.c:175
 msgid "User signal 1"
 msgstr "Brukersignal 1"
 
-#: siglist.c:178
+#: siglist.c:179
 msgid "User signal 2"
 msgstr "Brukersignal 2"
 
-#: siglist.c:182
+#: siglist.c:183
 msgid "HFT input data pending"
 msgstr "HFT-inndata venter"
 
-#: siglist.c:186
+#: siglist.c:187
 msgid "power failure imminent"
 msgstr "strømstans er nærliggende"
 
-#: siglist.c:190
+#: siglist.c:191
 msgid "system crash imminent"
 msgstr "systemkræsj er nærliggende"
 
-#: siglist.c:194
+#: siglist.c:195
 msgid "migrate process to another CPU"
 msgstr "flytt prosess til annen CPU"
 
-#: siglist.c:198
+#: siglist.c:199
 msgid "programming error"
 msgstr "programmeringsfeil"
 
-#: siglist.c:202
+#: siglist.c:203
 msgid "HFT monitor mode granted"
 msgstr "HFT-skjermmodus tildelt"
 
-#: siglist.c:206
+#: siglist.c:207
 msgid "HFT monitor mode retracted"
 msgstr "HFT-skjermmodus tilbaketrukket"
 
-#: siglist.c:210
+#: siglist.c:211
 msgid "HFT sound sequence has completed"
 msgstr "HFT-lydsekvens er fullført"
 
-#: siglist.c:214
+#: siglist.c:215
 msgid "Information request"
 msgstr "Informasjonsforespørsel"
 
-#: siglist.c:222 siglist.c:224
+#: siglist.c:223 siglist.c:225
 #, c-format
 msgid "Unknown Signal #%d"
 msgstr "#%d er et ukjent signal"
 
-#: subst.c:1476 subst.c:1666
+#: subst.c:1480 subst.c:1670
 #, c-format
 msgid "bad substitution: no closing `%s' in %s"
 msgstr "ugyldig substitutt: %2$s mangler avsluttende «%1$s»"
 
-#: subst.c:3281
+#: subst.c:3307
 #, c-format
 msgid "%s: cannot assign list to array member"
 msgstr "%s: klarte ikke å knytte liste til tabellmedlem"
 
-#: subst.c:5910 subst.c:5926
+#: subst.c:6048 subst.c:6064
 msgid "cannot make pipe for process substitution"
 msgstr "klarte ikke å lage datarør for substitusjon av prosess"
 
-#: subst.c:5985
+#: subst.c:6124
 msgid "cannot make child for process substitution"
 msgstr "klarte ikke å lage underprosess for substitusjon av prosess"
 
-#: subst.c:6059
+#: subst.c:6198
 #, c-format
 msgid "cannot open named pipe %s for reading"
 msgstr "klarte ikke å åpne navngitt datarør %s for lesing"
 
-#: subst.c:6061
+#: subst.c:6200
 #, c-format
 msgid "cannot open named pipe %s for writing"
 msgstr "klarte ikke å åpne navngitt datarør %s for skriving"
 
-#: subst.c:6084
+#: subst.c:6223
 #, c-format
 msgid "cannot duplicate named pipe %s as fd %d"
 msgstr "klarte ikke å duplisere navngitt datarør %s som fd %d"
 
-#: subst.c:6213
+#: subst.c:6370
 msgid "command substitution: ignored null byte in input"
 msgstr "kommandosubstitusjon: null-byte i inndata ignorert"
 
-#: subst.c:6353
+#: subst.c:6533
 msgid "cannot make pipe for command substitution"
 msgstr "klarte ikke å lage datarør for substitusjon av kommando"
 
-#: subst.c:6397
+#: subst.c:6580
 msgid "cannot make child for command substitution"
 msgstr "klarte ikke å lage underprosess for substitusjon av kommando"
 
-#: subst.c:6423
+#: subst.c:6613
 msgid "command_substitute: cannot duplicate pipe as fd 1"
 msgstr "command_substitute: klarte ikke å duplisere datarør som fd 1"
 
-#: subst.c:6883 subst.c:9952
+#: subst.c:7082 subst.c:10252
 #, c-format
 msgid "%s: invalid variable name for name reference"
 msgstr "%s: ugyldig variabelnavn for navnreferanse"
 
-#: subst.c:6979 subst.c:6997 subst.c:7169
+#: subst.c:7178 subst.c:7196 subst.c:7369
 #, c-format
 msgid "%s: invalid indirect expansion"
 msgstr "%s: ugyldig indirekte utvidelse"
 
-#: subst.c:7013 subst.c:7177
+#: subst.c:7212 subst.c:7377
 #, c-format
 msgid "%s: invalid variable name"
 msgstr "%s: ugyldig variabelnavn"
 
-#: subst.c:7256
+#: subst.c:7478
 #, c-format
 msgid "%s: parameter not set"
 msgstr "%s: parameter har ingen verdi"
 
-#: subst.c:7258
+#: subst.c:7480
 #, c-format
 msgid "%s: parameter null or not set"
 msgstr "%s: parameter har null-verdi eller står tomt"
 
-#: subst.c:7503 subst.c:7518
+#: subst.c:7727 subst.c:7742
 #, c-format
 msgid "%s: substring expression < 0"
 msgstr "%s: understreng-uttrykk < 0"
 
-#: subst.c:9281 subst.c:9302
+#: subst.c:9560 subst.c:9587
 #, c-format
 msgid "%s: bad substitution"
 msgstr "%s: ugyldig substitusjon"
 
-#: subst.c:9390
+#: subst.c:9678
 #, c-format
 msgid "$%s: cannot assign in this way"
 msgstr "$%s: du kan ikke tildele på denne måten"
 
-#: subst.c:9814
-msgid ""
-"future versions of the shell will force evaluation as an arithmetic "
-"substitution"
-msgstr ""
-"fremtidige versjoner av skallet skal tvinge evaluering som en aritmetisk "
-"substitusjon"
+#: subst.c:10111
+msgid "future versions of the shell will force evaluation as an arithmetic substitution"
+msgstr "fremtidige versjoner av skallet skal tvinge evaluering som en aritmetisk substitusjon"
 
-#: subst.c:10367
+#: subst.c:10795
 #, c-format
 msgid "bad substitution: no closing \"`\" in %s"
 msgstr "ugyldig substitusjon. %s mangler avsluttende «`»"
 
-#: subst.c:11434
+#: subst.c:11874
 #, c-format
 msgid "no match: %s"
 msgstr "ingen treff på %s"
@@ -2081,137 +2062,131 @@ msgstr "forventet «)»"
 msgid "`)' expected, found %s"
 msgstr "forventet «)», men fant %s"
 
-#: test.c:466 test.c:799
+#: test.c:469 test.c:814
 #, c-format
 msgid "%s: binary operator expected"
 msgstr "%s: forventet binær operatør"
 
-#: test.c:756 test.c:759
+#: test.c:771 test.c:774
 #, c-format
 msgid "%s: unary operator expected"
 msgstr "%s: forventet unær operatør"
 
-#: test.c:881
+#: test.c:896
 msgid "missing `]'"
 msgstr "«]» mangler"
 
-#: test.c:899
-#, fuzzy, c-format
+#: test.c:914
+#, c-format
 msgid "syntax error: `%s' unexpected"
-msgstr "syntaksfeil: uforventet «;»"
+msgstr "syntaksfeil: uforventet «%s»"
 
 #: trap.c:220
 msgid "invalid signal number"
 msgstr "ugyldig signalnummer"
 
-#: trap.c:325
+#: trap.c:323
 #, c-format
 msgid "trap handler: maximum trap handler level exceeded (%d)"
-msgstr ""
-"fellehåndtering: øvre grense for fellehåndteringsnivå (%d) er overskredet"
+msgstr "fellehåndtering: øvre grense for fellehåndteringsnivå (%d) er overskredet"
 
-#: trap.c:414
+#: trap.c:412
 #, c-format
 msgid "run_pending_traps: bad value in trap_list[%d]: %p"
 msgstr "run_pending_traps: ugyldig verdi i «trap_list[%d]»: %p"
 
-#: trap.c:418
+#: trap.c:416
 #, c-format
-msgid ""
-"run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
-msgstr ""
-"run_pending_traps: SIG_DFL er signalbehandler. Sender %d (%s) til meg selv "
-"på nytt"
+msgid "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
+msgstr "run_pending_traps: SIG_DFL er signalbehandler. Sender %d (%s) til meg selv på nytt"
 
-#: trap.c:487
+#: trap.c:509
 #, c-format
 msgid "trap_handler: bad signal %d"
 msgstr "trap_handler: %d er et ugyldig signal"
 
-#: variables.c:421
+#: variables.c:424
 #, c-format
 msgid "error importing function definition for `%s'"
 msgstr "feil under importering av definisjonen av funksjonen «%s»"
 
-#: variables.c:833
+#: variables.c:838
 #, c-format
 msgid "shell level (%d) too high, resetting to 1"
 msgstr "skallnivået (%d) er for høyt. Tilbakestiller til 1"
 
-#: variables.c:2674
+#: variables.c:2642
 msgid "make_local_variable: no function context at current scope"
 msgstr "make_local_variable: ingen funksjonskontekst i gjeldende virkefelt"
 
-#: variables.c:2693
+#: variables.c:2661
 #, c-format
 msgid "%s: variable may not be assigned value"
 msgstr "%s: variabel kan ikke tilknyttes verdi"
 
-#: variables.c:3475
+#: variables.c:2818 variables.c:2874
+#, c-format
+msgid "%s: cannot inherit value from incompatible type"
+msgstr "%s: kan ikke arve verdi fra inkompatibel type"
+
+#: variables.c:3459
 #, c-format
 msgid "%s: assigning integer to name reference"
 msgstr "%s: knytter heltall til navnreferanse"
 
-#: variables.c:4404
+#: variables.c:4390
 msgid "all_local_variables: no function context at current scope"
 msgstr "all_local_variables: ingen funksjonskontekst i gjeldende virkefelt"
 
-#: variables.c:4771
+#: variables.c:4757
 #, c-format
 msgid "%s has null exportstr"
 msgstr "%s har exportstr som er null"
 
-#: variables.c:4776 variables.c:4785
+#: variables.c:4762 variables.c:4771
 #, c-format
 msgid "invalid character %d in exportstr for %s"
 msgstr "%d er et ugyldig tegn i exportstr for %s"
 
-#: variables.c:4791
+#: variables.c:4777
 #, c-format
 msgid "no `=' in exportstr for %s"
 msgstr "exportstr for %s mangler «=»"
 
-#: variables.c:5331
+#: variables.c:5317
 msgid "pop_var_context: head of shell_variables not a function context"
-msgstr ""
-"pop_var_context: toppen av «shell_variables» er ikke en funksjonskontekst"
+msgstr "pop_var_context: toppen av «shell_variables» er ikke en funksjonskontekst"
 
-#: variables.c:5344
+#: variables.c:5330
 msgid "pop_var_context: no global_variables context"
 msgstr "pop_var_context: kontekst for «global_variables» mangler"
 
-#: variables.c:5424
+#: variables.c:5410
 msgid "pop_scope: head of shell_variables not a temporary environment scope"
-msgstr ""
-"pop_scope: toppen av «shell_variables» er ikke et midlertidig miljøfelt"
+msgstr "pop_scope: toppen av «shell_variables» er ikke et midlertidig miljøfelt"
 
-#: variables.c:6387
+#: variables.c:6400
 #, c-format
 msgid "%s: %s: cannot open as FILE"
 msgstr "%s: %s: klarte ikke å åpne som FIL"
 
-#: variables.c:6392
+#: variables.c:6405
 #, c-format
 msgid "%s: %s: invalid value for trace file descriptor"
 msgstr "%s: %s: ugyldig verdi for sporing av fildeskriptor"
 
-#: variables.c:6437
+#: variables.c:6450
 #, c-format
 msgid "%s: %s: compatibility value out of range"
 msgstr "%s: %s: samspill-verdi er utenfor tillatt rekkevidde"
 
 #: version.c:46 version2.c:46
-#, fuzzy
-msgid "Copyright (C) 2020 Free Software Foundation, Inc."
-msgstr "Opphavsrett (C) 2012 Free Software Foundation, Inc."
+msgid "Copyright (C) 2022 Free Software Foundation, Inc."
+msgstr "Opphavsrett (C) 2022 Free Software Foundation, Inc."
 
 #: version.c:47 version2.c:47
-msgid ""
-"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
-"html>\n"
-msgstr ""
-"Lisens GPLv3+: GNU GPL versjon 3 eller nyere <http://gnu.org/licenses/gpl."
-"html>\n"
+msgid "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n"
+msgstr "Lisens GPLv3+: GNU GPL versjon 3 eller nyere <http://gnu.org/licenses/gpl.html>\n"
 
 #: version.c:86 version2.c:86
 #, c-format
@@ -2220,13 +2195,11 @@ msgstr "GNU bash, versjon %s (%s)\n"
 
 #: version.c:91 version2.c:91
 msgid "This is free software; you are free to change and redistribute it."
-msgstr ""
-"Dette er fri programvare. Du står fritt til å endre og dele den videre."
+msgstr "Dette er fri programvare. Du står fritt til å endre og dele den videre."
 
 #: version.c:92 version2.c:92
 msgid "There is NO WARRANTY, to the extent permitted by law."
-msgstr ""
-"Det stilles INGEN GARANTI, i den grad dette tillates av gjeldende lovverk."
+msgstr "Det stilles INGEN GARANTI, i den grad dette tillates av gjeldende lovverk."
 
 #: xmalloc.c:93
 #, c-format
@@ -2257,13 +2230,8 @@ msgid "unalias [-a] name [name ...]"
 msgstr "unalias [-a] navn [navn …]"
 
 #: builtins.c:53
-msgid ""
-"bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-"
-"x keyseq:shell-command] [keyseq:readline-function or readline-command]"
-msgstr ""
-"bind [-lpsvPSVX] [-m tastaturoppsett] [-f filnavn] [-q navn] [-u navn] [-r "
-"knappesekv] [-x knappesekv:skallkommando] [knappesekv:readline-funksjon "
-"eller readline-kommando]"
+msgid "bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-x keyseq:shell-command] [keyseq:readline-function or readline-command]"
+msgstr "bind [-lpsvPSVX] [-m tastaturoppsett] [-f filnavn] [-q navn] [-u navn] [-r knappesekv] [-x knappesekv:skallkommando] [knappesekv:readline-funksjon eller readline-kommando]"
 
 #: builtins.c:56
 msgid "break [n]"
@@ -2294,14 +2262,12 @@ msgid "command [-pVv] command [arg ...]"
 msgstr "command [-pVv] command [arg …]"
 
 #: builtins.c:78
-#, fuzzy
-msgid "declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]"
-msgstr "declare [-aAfFgilnrtux] [-p] [navn[=verdi] …]"
+msgid "declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] [name ...]"
+msgstr "declare [-aAfFgiIlnrtux] [-p] [navn[=verdi] …] eller deklarer -p [-aAfFilnrtux] [navn ...]"
 
 #: builtins.c:80
-#, fuzzy
-msgid "typeset [-aAfFgiIlnrtux] [-p] name[=value] ..."
-msgstr "typeset [-aAfFgilnrtux] [-p] navn[=verdi] …"
+msgid "typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] [name ...]"
+msgstr "typeset [-aAfFgilnrtux] [-p] navn[=verdi] … eller typesett -p [-aAfFilnrtux] [navn ...]"
 
 #: builtins.c:82
 msgid "local [option] name[=value] ..."
@@ -2324,14 +2290,12 @@ msgid "eval [arg ...]"
 msgstr "eval [arg …]"
 
 #: builtins.c:96
-#, fuzzy
 msgid "getopts optstring name [arg ...]"
-msgstr "getopts valgstreng navn [arg]"
+msgstr "getopts valgstreng navn [arg ...]"
 
 #: builtins.c:98
-#, fuzzy
 msgid "exec [-cl] [-a name] [command [argument ...]] [redirection ...]"
-msgstr "exec [-cl] [-a navn] [kommando [argumenter …]] [videresending …]"
+msgstr "exec [-cl] [-a navn] [kommando [argument …]] [videresending …]"
 
 #: builtins.c:100
 msgid "exit [n]"
@@ -2362,12 +2326,8 @@ msgid "help [-dms] [pattern ...]"
 msgstr "help [-dms] [mønster …]"
 
 #: builtins.c:123
-msgid ""
-"history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg "
-"[arg...]"
-msgstr ""
-"history [-c] [-d posisjon] [n] eller history -anrw [filnavn] eller history -"
-"ps arg [arg …]"
+msgid "history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg...]"
+msgstr "history [-c] [-d posisjon] [n] eller history -anrw [filnavn] eller history -ps arg [arg …]"
 
 #: builtins.c:127
 msgid "jobs [-lnprs] [jobspec ...] or jobs -x command [args]"
@@ -2378,32 +2338,24 @@ msgid "disown [-h] [-ar] [jobspec ... | pid ...]"
 msgstr "disown [-h] [-ar] [jobbspes … | pid …]"
 
 #: builtins.c:134
-msgid ""
-"kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l "
-"[sigspec]"
-msgstr ""
-"kill [-s sigspes | -n signum | -sigspes] pid | jobbspes … eller kill -l "
-"[sigspes]"
+msgid "kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]"
+msgstr "kill [-s sigspes | -n signum | -sigspes] pid | jobbspes … eller kill -l [sigspes]"
 
 #: builtins.c:136
 msgid "let arg [arg ...]"
 msgstr "let arg [arg …]"
 
 #: builtins.c:138
-msgid ""
-"read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p "
-"prompt] [-t timeout] [-u fd] [name ...]"
-msgstr ""
-"read [-ers] [-a tabell] [-d adskill] [-i tekst] [-n ntegn] [-N ntegn] [-p "
-"ledetekst] [-t tidsavbrudd] [-u fd] [navn …]"
+msgid "read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]"
+msgstr "read [-ers] [-a tabell] [-d adskill] [-i tekst] [-n ntegn] [-N ntegn] [-p ledetekst] [-t tidsavbrudd] [-u fd] [navn …]"
 
 #: builtins.c:140
 msgid "return [n]"
 msgstr "return [n]"
 
 #: builtins.c:142
-msgid "set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]"
-msgstr "set [-abefhkmnptuvxBCHP] [-o valgnavn] [--] [arg …]"
+msgid "set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]"
+msgstr "set [-abefhkmnptuvxBCEHPT] [-o valgnavn] [--] [arg …]"
 
 #: builtins.c:144
 msgid "unset [-f] [-v] [-n] [name ...]"
@@ -2450,17 +2402,16 @@ msgid "type [-afptP] name [name ...]"
 msgstr "type [-afptP] navn [navn …]"
 
 #: builtins.c:171
-msgid "ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]"
-msgstr "ulimit [-SHabcdefiklmnpqrstuvxPT] [grense]"
+msgid "ulimit [-SHabcdefiklmnpqrstuvxPRT] [limit]"
+msgstr "ulimit [-SHabcdefiklmnpqrstuvxPRT [grense]"
 
 #: builtins.c:174
 msgid "umask [-p] [-S] [mode]"
 msgstr "umask [-p] [-S] [modus]"
 
 #: builtins.c:177
-#, fuzzy
 msgid "wait [-fn] [-p var] [id ...]"
-msgstr "wait [-fn] [id …]"
+msgstr "wait [-fn] [-p var] [id …]"
 
 #: builtins.c:181
 msgid "wait [pid ...]"
@@ -2487,20 +2438,16 @@ msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac"
 msgstr "case ORD in [MØNSTER [| MØNSTER] …) KOMMANDOER ;;] … esac"
 
 #: builtins.c:194
-msgid ""
-"if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else "
-"COMMANDS; ] fi"
-msgstr ""
-"if KOMMANDOER; then KOMMANDOER; [ elif KOMMANDOER; then KOMMANDOER; ] … "
-"[ else KOMMANDOER; ] fi"
+msgid "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi"
+msgstr "if KOMMANDOER; then KOMMANDOER; [ elif KOMMANDOER; then KOMMANDOER; ] … [ else KOMMANDOER; ] fi"
 
 #: builtins.c:196
-msgid "while COMMANDS; do COMMANDS; done"
-msgstr "while KOMMANDOER; do KOMMANDOER; done"
+msgid "while COMMANDS; do COMMANDS-2; done"
+msgstr "while KOMMANDOER; do KOMMANDOER-2; done"
 
 #: builtins.c:198
-msgid "until COMMANDS; do COMMANDS; done"
-msgstr "until KOMMANDOER; do KOMMANDOER; done"
+msgid "until COMMANDS; do COMMANDS-2; done"
+msgstr "until KOMMANDOER; do KOMMANDOER-2; done"
 
 #: builtins.c:200
 msgid "coproc [NAME] command [redirections]"
@@ -2551,44 +2498,24 @@ msgid "printf [-v var] format [arguments]"
 msgstr "printf [-v var] format [argumenter]"
 
 #: builtins.c:231
-#, fuzzy
-msgid ""
-"complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-"
-"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S "
-"suffix] [name ...]"
-msgstr ""
-"complete [-abcdefgjksuv] [-pr] [-DEI] [-o valg] [-A handling] [-G globpat] [-"
-"W ordliste]  [-F funksjon] [-C kommando] [-X filterpat] [-P prefiks] [-S "
-"suffiks] [navn …]"
+msgid "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [name ...]"
+msgstr "complete [-abcdefgjksuv] [-pr] [-DEI] [-o valg] [-A handling] [-G globpat] [-W ordliste] [-F funksjon] [-C kommando] [-X filterpat] [-P prefiks] [-S suffiks] [navn …]"
 
 #: builtins.c:235
-#, fuzzy
-msgid ""
-"compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-"
-"F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]"
-msgstr ""
-"compgen [-abcdefgjksuv] [-o valg] [-A handling] [-G globpat] [-W ordliste]  "
-"[-F funksjon] [-C kommando] [-X filtersti] [-P prefiks] [-S suffiks] [ord]"
+msgid "compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]"
+msgstr "compgen [-abcdefgjksuv] [-o valg] [-A handling] [-G globpat] [-W ordliste] [-F funksjon] [-C kommando] [-X filtersti] [-P prefiks] [-S suffiks] [ord]"
 
 #: builtins.c:239
 msgid "compopt [-o|+o option] [-DEI] [name ...]"
 msgstr "compopt [-o|+o valg] [-DEI] [navn …]"
 
 #: builtins.c:242
-msgid ""
-"mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C "
-"callback] [-c quantum] [array]"
-msgstr ""
-"mapfile [-d skilletegn] [-n antall] [-O opphav] [-s antall] [-t] [-u fd] [-C "
-"tilbakekall] [-c mengde] [tabell]"
+msgid "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]"
+msgstr "mapfile [-d skilletegn] [-n antall] [-O opphav] [-s antall] [-t] [-u fd] [-C tilbakekall] [-c mengde] [tabell]"
 
 #: builtins.c:244
-msgid ""
-"readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C "
-"callback] [-c quantum] [array]"
-msgstr ""
-"readarray [-d skilletegn] [-n antall] [-O opphav] [-s antall] [-t] [-u fd] [-"
-"C tilbakekall] [-c mengde] [tabell]"
+msgid "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]"
+msgstr "readarray [-d skilletegn] [-n antall] [-O opphav] [-s antall] [-t] [-u fd] [-C tilbakekall] [-c mengde] [tabell]"
 
 #: builtins.c:256
 msgid ""
@@ -2605,8 +2532,7 @@ msgid ""
 "      -p\tprint all defined aliases in a reusable format\n"
 "    \n"
 "    Exit Status:\n"
-"    alias returns true unless a NAME is supplied for which no alias has "
-"been\n"
+"    alias returns true unless a NAME is supplied for which no alias has been\n"
 "    defined."
 msgstr ""
 "Definer eller vis alias.\n"
@@ -2622,8 +2548,7 @@ msgstr ""
 "      -p\tSkriv ut alle definerte alias i brukbart format\n"
 "    \n"
 "    Avslutningsstatus:\n"
-"    alias avslutter med positiv verdi («true»), med mindre bruker skriver "
-"inn et NAVN\n"
+"    alias avslutter med positiv verdi («true»), med mindre bruker skriver inn et NAVN\n"
 "    som mangler definert alias."
 
 #: builtins.c:278
@@ -2640,8 +2565,7 @@ msgstr ""
 "    Valg:\n"
 "      -a\tfjern alle alias-definisjoner.\n"
 "    \n"
-"    Programmet avslutter som vellykket med mindre bruker velger et aliasNAVN "
-"som ikke finnes."
+"    Programmet avslutter som vellykket med mindre bruker velger et aliasNAVN som ikke finnes."
 
 #: builtins.c:291
 msgid ""
@@ -2655,30 +2579,25 @@ msgid ""
 "    Options:\n"
 "      -m  keymap         Use KEYMAP as the keymap for the duration of this\n"
 "                         command.  Acceptable keymap names are emacs,\n"
-"                         emacs-standard, emacs-meta, emacs-ctlx, vi, vi-"
-"move,\n"
+"                         emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,\n"
 "                         vi-command, and vi-insert.\n"
 "      -l                 List names of functions.\n"
 "      -P                 List function names and bindings.\n"
 "      -p                 List functions and bindings in a form that can be\n"
 "                         reused as input.\n"
-"      -S                 List key sequences that invoke macros and their "
-"values\n"
-"      -s                 List key sequences that invoke macros and their "
-"values\n"
+"      -S                 List key sequences that invoke macros and their values\n"
+"      -s                 List key sequences that invoke macros and their values\n"
 "                         in a form that can be reused as input.\n"
 "      -V                 List variable names and values\n"
 "      -v                 List variable names and values in a form that can\n"
 "                         be reused as input.\n"
 "      -q  function-name  Query about which keys invoke the named function.\n"
-"      -u  function-name  Unbind all keys which are bound to the named "
-"function.\n"
+"      -u  function-name  Unbind all keys which are bound to the named function.\n"
 "      -r  keyseq         Remove the binding for KEYSEQ.\n"
 "      -f  filename       Read key bindings from FILENAME.\n"
 "      -x  keyseq:shell-command\tCause SHELL-COMMAND to be executed when\n"
 "    \t\t\t\tKEYSEQ is entered.\n"
-"      -X                 List key sequences bound with -x and associated "
-"commands\n"
+"      -X                 List key sequences bound with -x and associated commands\n"
 "                         in a form that can be reused as input.\n"
 "    \n"
 "    Exit Status:\n"
@@ -2686,45 +2605,35 @@ msgid ""
 msgstr ""
 "Velg hurtigtaster og variabler for Readline.\n"
 "    \n"
-"    Knytt en knappekombinasjon til en Readline-funksjon eller makro, eller "
-"gi\n"
-"    verdi til en Readline-variabel. Argumentsyntaksen tilsvarer det som "
-"finnes\n"
+"    Knytt en knappekombinasjon til en Readline-funksjon eller makro, eller gi\n"
+"    verdi til en Readline-variabel. Argumentsyntaksen tilsvarer det som finnes\n"
 "    i «~/.inputrc», men må oppgis som ett argument.\n"
 "    F.eks.: bind '\"\\C-x\\C-r\": re-read-init-file'.\n"
 "    \n"
 "    Valg:\n"
-"      -m  OPPSETT         Bruk valgt tastaturOPPSETT under kjøring av denne "
-"kommandoen.\n"
+"      -m  OPPSETT         Bruk valgt tastaturOPPSETT under kjøring av denne kommandoen.\n"
 "                         Gyldige oppsettsnavn er «emacs», «emacs-standard»,\n"
 "                         «emacs-meta», «emacs-ctlx», «vi», «vi-move»,\n"
 "                         «vi-command» og «vi-insert».\n"
 "      -l                 Vis funksjonsnavn.\n"
 "      -P                 Vis funksjonsnavn og tildelinger.\n"
-"      -p                 Vis funksjoner og tildelinger i et format som kan "
-"gjenbrukes\n"
+"      -p                 Vis funksjoner og tildelinger i et format som kan gjenbrukes\n"
 "                         som inndata.\n"
-"      -S                 Vis knappekombinasjoner som kaller makroer og "
-"tilhørende verdier\n"
-"      -s                 Tilsvarer «-S», men i et format som kan gjenbrukes "
-"i inndata.\n"
+"      -S                 Vis knappekombinasjoner som kaller makroer og tilhørende verdier\n"
+"      -s                 Tilsvarer «-S», men i et format som kan gjenbrukes i inndata.\n"
 "      -V                 Vis variabelnavn og verdier\n"
-"      -v                 Tilsvarer «-V», men i et format som kan gjenbrukes "
-"i inndata.\n"
+"      -v                 Tilsvarer «-V», men i et format som kan gjenbrukes i inndata.\n"
 "      -q  function-name  Spør hvilke knapper som kaller aktuell funksjon.\n"
-"      -u  function-name  Fjern alle knappekombinasjoner som er tilknyttet "
-"aktuell funksjon.\n"
+"      -u  function-name  Fjern alle knappekombinasjoner som er tilknyttet aktuell funksjon.\n"
 "      -r  KOMB         Fjern tildeling av valgt knappeKOMBinasjon.\n"
 "      -f  FILNAVN       Les knappekombinasjoner fra FILNAVN.\n"
 "      -x  KOMB:KOMMANDO\tGjør slik at valgt skallKOMMANDO kjøres når\n"
 "    \t\t\t\tvalgt knappeKOMBinasjon trykkes.\n"
-"      -X                 Vis knappekombinasjoner som er tildelt med «-x», og "
-"aktuelle kommandoer \n"
+"      -X                 Vis knappekombinasjoner som er tildelt med «-x», og aktuelle kommandoer \n"
 "                         i et format som kan gjenbrukes i inndata.\n"
 "    \n"
 "    Avslutningsstatus:\n"
-"    bind avslutter med 0, med mindre bruker tar et ukjent valg eller det "
-"oppstår feil."
+"    bind avslutter med 0, med mindre bruker tar et ukjent valg eller det oppstår feil."
 
 #: builtins.c:330
 msgid ""
@@ -2766,8 +2675,7 @@ msgid ""
 "    \n"
 "    Execute SHELL-BUILTIN with arguments ARGs without performing command\n"
 "    lookup.  This is useful when you wish to reimplement a shell builtin\n"
-"    as a shell function, but need to execute the builtin within the "
-"function.\n"
+"    as a shell function, but need to execute the builtin within the function.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the exit status of SHELL-BUILTIN, or false if SHELL-BUILTIN is\n"
@@ -2777,8 +2685,7 @@ msgstr ""
 "    \n"
 "    Kjør SKALLFUNKSJON med valgte ARGumenter uten å slå opp\n"
 "    kommandonavn. Dette er nyttig når du vil re-implementere en innebygd\n"
-"    skallkommando som en funksjon, samtidig som du kjører den innenfor en "
-"skallfunksjon.\n"
+"    skallkommando som en funksjon, samtidig som du kjører den innenfor en skallfunksjon.\n"
 "    \n"
 "    Avslutningsstatus:\n"
 "    Statuskoden er den samme som aktuell SKALLFUNKSJON gir, eller\n"
@@ -2805,8 +2712,7 @@ msgstr ""
 "    «$line $subroutine $filename». Denne ekstrainformasjonen kan brukes\n"
 "    til stabelsporing.\n"
 "    \n"
-"    Verdien av UTTRykk viser hvor mange kall-rammer programmet skal bevege "
-"seg\n"
+"    Verdien av UTTRykk viser hvor mange kall-rammer programmet skal bevege seg\n"
 "    gjennom tilbake fra gjeldende ramme. Øverste ramme er 0.\n"
 "    \n"
 "    Avslutningsstatus:\n"
@@ -2817,22 +2723,16 @@ msgstr ""
 msgid ""
 "Change the shell working directory.\n"
 "    \n"
-"    Change the current directory to DIR.  The default DIR is the value of "
-"the\n"
+"    Change the current directory to DIR.  The default DIR is the value of the\n"
 "    HOME shell variable.\n"
 "    \n"
-"    The variable CDPATH defines the search path for the directory "
-"containing\n"
-"    DIR.  Alternative directory names in CDPATH are separated by a colon "
-"(:).\n"
-"    A null directory name is the same as the current directory.  If DIR "
-"begins\n"
+"    The variable CDPATH defines the search path for the directory containing\n"
+"    DIR.  Alternative directory names in CDPATH are separated by a colon (:).\n"
+"    A null directory name is the same as the current directory.  If DIR begins\n"
 "    with a slash (/), then CDPATH is not used.\n"
 "    \n"
-"    If the directory is not found, and the shell option `cdable_vars' is "
-"set,\n"
-"    the word is assumed to be  a variable name.  If that variable has a "
-"value,\n"
+"    If the directory is not found, and the shell option `cdable_vars' is set,\n"
+"    the word is assumed to be  a variable name.  If that variable has a value,\n"
 "    its value is used for DIR.\n"
 "    \n"
 "    Options:\n"
@@ -2848,13 +2748,11 @@ msgid ""
 "    \t\tattributes as a directory containing the file attributes\n"
 "    \n"
 "    The default is to follow symbolic links, as if `-L' were specified.\n"
-"    `..' is processed by removing the immediately previous pathname "
-"component\n"
+"    `..' is processed by removing the immediately previous pathname component\n"
 "    back to a slash or the beginning of DIR.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns 0 if the directory is changed, and if $PWD is set successfully "
-"when\n"
+"    Returns 0 if the directory is changed, and if $PWD is set successfully when\n"
 "    -P is used; non-zero otherwise."
 msgstr ""
 "Bytt arbeidsmappe for skallet.\n"
@@ -2867,8 +2765,7 @@ msgstr ""
 "    Et null-mappenavn er det samme som gjeldende mappe. Hvis MAP begynner\n"
 "    med skråstrek (/), brukes ikke CDPATH.\n"
 "    \n"
-"    Hvis valgt mappe ikke finnes, og skallvalget «cdable_vars» har en "
-"verdi,\n"
+"    Hvis valgt mappe ikke finnes, og skallvalget «cdable_vars» har en verdi,\n"
 "    antas ordet å være et variabelnavn. Hvis den variabelen har en verdi,\n"
 "    brukes denne verdien som MAP.\n"
 "    \n"
@@ -2887,8 +2784,7 @@ msgstr ""
 "    én skråstrek tilbake eller til begynnelsen av MAP.\n"
 "    \n"
 "    Avslutningsstatus:\n"
-"    Status er 0 hvis skallet har byttet mappe, og hvis $PWD er valgt uten "
-"problemer\n"
+"    Status er 0 hvis skallet har byttet mappe, og hvis $PWD er valgt uten problemer\n"
 "    ved bruk av «-P». Ellers er status noe annet enn 0."
 
 #: builtins.c:425
@@ -2964,8 +2860,7 @@ msgid ""
 "Execute a simple command or display information about commands.\n"
 "    \n"
 "    Runs COMMAND with ARGS suppressing  shell function lookup, or display\n"
-"    information about the specified COMMANDs.  Can be used to invoke "
-"commands\n"
+"    information about the specified COMMANDs.  Can be used to invoke commands\n"
 "    on disk when a function with the same name exists.\n"
 "    \n"
 "    Options:\n"
@@ -2979,10 +2874,8 @@ msgid ""
 msgstr ""
 "Kjør en enkel kommando, eller vis informasjon om kommandoer.\n"
 "    \n"
-"    Kjører valgt KOMMANDO med ARG uten oppslag av skallfunksjoner, eller "
-"viser\n"
-"    informasjon om valgte KOMMANDOer. Dette kan brukes til å kalle "
-"kommandoer\n"
+"    Kjører valgt KOMMANDO med ARG uten oppslag av skallfunksjoner, eller viser\n"
+"    informasjon om valgte KOMMANDOer. Dette kan brukes til å kalle kommandoer\n"
 "    på disk når det finens en funksjon med samme navn.\n"
 "    \n"
 "    Valg:\n"
@@ -2992,11 +2885,9 @@ msgstr ""
 "      -V\tskriv ut en mer detaljert beskrivelse av hver KOMMANDO\n"
 "    \n"
 "    Avslutningsstatus:\n"
-"    Samme som statuskoden fra KOMMANDO, eller mislykket hvis KOMMANDO ikke "
-"finnes."
+"    Samme som statuskoden fra KOMMANDO, eller mislykket hvis KOMMANDO ikke finnes."
 
 #: builtins.c:490
-#, fuzzy
 msgid ""
 "Set variable values and attributes.\n"
 "    \n"
@@ -3029,8 +2920,7 @@ msgid ""
 "    Variables with the integer attribute have arithmetic evaluation (see\n"
 "    the `let' command) performed when the variable is assigned a value.\n"
 "    \n"
-"    When used in a function, `declare' makes NAMEs local, as with the "
-"`local'\n"
+"    When used in a function, `declare' makes NAMEs local, as with the `local'\n"
 "    command.  The `-g' option suppresses this behavior.\n"
 "    \n"
 "    Exit Status:\n"
@@ -3048,6 +2938,7 @@ msgstr ""
 "    \tkildefil kommer i tillegg ved feilsøking)\n"
 "      -g\tlag globale variabler ved bruk innenfor en skallfunksjon\n"
 "    \t(ignoreres ved annen bruk)\n"
+"      -I\thvis du oppretter en lokal variabel, arv attributtene og verdien\n"
 "      -p\tvis attributter og verdi av hvert valgt NAVN\n"
 "    \n"
 "    Valg som justerer attributter:\n"
@@ -3055,8 +2946,7 @@ msgstr ""
 "      -A\tgjør valgte NAVN til assosiative tabeller (hvis det støttes)\n"
 "      -i\tgi valgte NAVN attributten «integer» (heltall)\n"
 "      -l\tkonverter valgte NAVN til små bokstaver\n"
-"      -n\tgjør valgt NAVN til en referanse til variabelen med egen verdi som "
-"navn\n"
+"      -n\tgjør valgt NAVN til en referanse til variabelen med egen verdi som navn\n"
 "      -r\tskrivebeskytt valgte NAVN\n"
 "      -t\tgi valgte NAVN attirbutten «trace»\n"
 "      -u\tkonverter valgte NAVN til store bokstaver\n"
@@ -3103,8 +2993,7 @@ msgstr ""
 "    Lag en lokal variabel med valgt NAVN og VERDI. Du kan foreta\n"
 "    VALG i henhold til kommandoen «declare».\n"
 "    \n"
-"    Lokale variabler kan bare brukes innenfor en funksjon. De er kun "
-"synlige\n"
+"    Lokale variabler kan bare brukes innenfor en funksjon. De er kun synlige\n"
 "    for funksjonen de lages innenfor, samt underfunksjoner.\n"
 "    \n"
 "    Avslutningsstatus:\n"
@@ -3115,8 +3004,7 @@ msgstr ""
 msgid ""
 "Write arguments to the standard output.\n"
 "    \n"
-"    Display the ARGs, separated by a single space character and followed by "
-"a\n"
+"    Display the ARGs, separated by a single space character and followed by a\n"
 "    newline, on the standard output.\n"
 "    \n"
 "    Options:\n"
@@ -3140,11 +3028,9 @@ msgid ""
 "    \t\t0 to 3 octal digits\n"
 "      \\xHH\tthe eight-bit character whose value is HH (hexadecimal).  HH\n"
 "    \t\tcan be one or two hex digits\n"
-"      \\uHHHH\tthe Unicode character whose value is the hexadecimal value "
-"HHHH.\n"
+"      \\uHHHH\tthe Unicode character whose value is the hexadecimal value HHHH.\n"
 "    \t\tHHHH can be one to four hex digits.\n"
-"      \\UHHHHHHHH the Unicode character whose value is the hexadecimal "
-"value\n"
+"      \\UHHHHHHHH the Unicode character whose value is the hexadecimal value\n"
 "    \t\tHHHHHHHH. HHHHHHHH can be one to eight hex digits.\n"
 "    \n"
 "    Exit Status:\n"
@@ -3236,8 +3122,7 @@ msgstr ""
 "    \n"
 "    Valg:\n"
 "      -a\tskriv ut en liste som viser hvilke kommandoer som er slått på\n"
-"      -n\tslå av hvert valgt NAVN, eller vis en liste over kommandoer som er "
-"slått av\n"
+"      -n\tslå av hvert valgt NAVN, eller vis en liste over kommandoer som er slått av\n"
 "      -p\tskriv ut liste over kommandoer i et gjenbrukbart format\n"
 "      -s\tbare skriv ut navn på innebygde Posix-spesialkommandoer\n"
 "    \n"
@@ -3257,8 +3142,7 @@ msgstr ""
 msgid ""
 "Execute arguments as a shell command.\n"
 "    \n"
-"    Combine ARGs into a single string, use the result as input to the "
-"shell,\n"
+"    Combine ARGs into a single string, use the result as input to the shell,\n"
 "    and execute the resulting commands.\n"
 "    \n"
 "    Exit Status:\n"
@@ -3273,7 +3157,6 @@ msgstr ""
 "    Samme som valgt kommando, eller vellykket hvis kommando er null."
 
 #: builtins.c:652
-#, fuzzy
 msgid ""
 "Parse option arguments.\n"
 "    \n"
@@ -3326,17 +3209,13 @@ msgstr ""
 "    kalles, laster inn navnet hvis det ikke finnes, og\n"
 "    indeks for neste argument som skal behandles i skallvariabelen OPTIND.\n"
 "    OPTIND lastes inn til 1 hver gang skallet eller et skallskript kjøres.\n"
-"    Når et valg krever et argument plasseres argumentet i skallvariabelen "
-"OPTARG.\n"
+"    Når et valg krever et argument plasseres argumentet i skallvariabelen OPTARG.\n"
 "    \n"
-"    getopts rapporterer feil på én av to måter. Hvis første tegn i "
-"VALGSTRENG\n"
+"    getopts rapporterer feil på én av to måter. Hvis første tegn i VALGSTRENG\n"
 "    er kolon, rapporteres feil uten direkte feilmeldinger til bruker.\n"
 "    Hvis getopts ser et ugyldig valg, plasseres aktuelt valgtegn i OPTARG.\n"
-"    Hvis et obligatorisk argument ikke er gitt, legger getopts et «:» i NAVN "
-"og\n"
-"    bruker oppdaget valgtegn som OPTARG. Hvis getopts ikke er i "
-"stillemodus,\n"
+"    Hvis et obligatorisk argument ikke er gitt, legger getopts et «:» i NAVN og\n"
+"    bruker oppdaget valgtegn som OPTARG. Hvis getopts ikke er i stillemodus,\n"
 "    og ser et ugyldig valg, brukes «?» som NAVN, og OPTARG tømmes.\n"
 "    Hvis et obligatorisk argument ikke er gitt, legger getopts et «?»\n"
 "    i NAVN, tømmer OPTARG og skriver ut en feilmelding.\n"
@@ -3345,7 +3224,7 @@ msgstr ""
 "    av feilmeldinger, selv hvis første tegn i VALGSTRENG ikke er kolon.\n"
 "    OPTERR har verdien 1 som standard.\n"
 "    \n"
-"    Getopts tolker vanligvis posisjonsparametre ($0 - $9), men hvis\n"
+"    Getopts tolker vanligvis posisjonsparametre, men hvis\n"
 "    flere argumenter er gitt, blir disse tolket i stedet.\n"
 "    \n"
 "    Avslutningsstatus:\n"
@@ -3357,8 +3236,7 @@ msgid ""
 "Replace the shell with the given command.\n"
 "    \n"
 "    Execute COMMAND, replacing this shell with the specified program.\n"
-"    ARGUMENTS become the arguments to COMMAND.  If COMMAND is not "
-"specified,\n"
+"    ARGUMENTS become the arguments to COMMAND.  If COMMAND is not specified,\n"
 "    any redirections take effect in the current shell.\n"
 "    \n"
 "    Options:\n"
@@ -3366,19 +3244,16 @@ msgid ""
 "      -c\texecute COMMAND with an empty environment\n"
 "      -l\tplace a dash in the zeroth argument to COMMAND\n"
 "    \n"
-"    If the command cannot be executed, a non-interactive shell exits, "
-"unless\n"
+"    If the command cannot be executed, a non-interactive shell exits, unless\n"
 "    the shell option `execfail' is set.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success unless COMMAND is not found or a redirection error "
-"occurs."
+"    Returns success unless COMMAND is not found or a redirection error occurs."
 msgstr ""
 "Erstatt skallet med valgt kommando.\n"
 "    \n"
 "    Kjør KOMMANDO, og erstatt dette skallet med valgt program.\n"
-"    ARGUMENTER sendes videre til valgt KOMMANDO. Hvis KOMMANDO ikke er "
-"valgt,\n"
+"    ARGUMENTER sendes videre til valgt KOMMANDO. Hvis KOMMANDO ikke er valgt,\n"
 "    blir videresendinger brukt i gjeldende skall.\n"
 "    \n"
 "    Valg:\n"
@@ -3386,13 +3261,11 @@ msgstr ""
 "      -c\t\tkjør valgt KOMMANDO med et tomt miljø\n"
 "      -l\t\tbruk bindestrek som argument nummer null for COMMAND\n"
 "    \n"
-"    Hvis kommandoen ikke kan kjøres, avsluttes ikke-interaktivt skall, med "
-"mindre\n"
+"    Hvis kommandoen ikke kan kjøres, avsluttes ikke-interaktivt skall, med mindre\n"
 "    skallvalget «execfail» er brukt.\n"
 "    \n"
 "    Avslutningsstatus:\n"
-"    Vellykket, med mindre valgt KOMMANDO ikke finnes eller det oppstår en "
-"videresendingsfeil."
+"    Vellykket, med mindre valgt KOMMANDO ikke finnes eller det oppstår en videresendingsfeil."
 
 #: builtins.c:715
 msgid ""
@@ -3410,29 +3283,25 @@ msgstr ""
 msgid ""
 "Exit a login shell.\n"
 "    \n"
-"    Exits a login shell with exit status N.  Returns an error if not "
-"executed\n"
+"    Exits a login shell with exit status N.  Returns an error if not executed\n"
 "    in a login shell."
 msgstr ""
 "Avslutt et innloggingsskall.\n"
 "    \n"
-"    Avslutter et innloggingsskall med status N. Dette gir feilmelding hvis "
-"det\n"
+"    Avslutter et innloggingsskall med status N. Dette gir feilmelding hvis det\n"
 "    ikke kjøres i et innloggingsskall."
 
 #: builtins.c:734
 msgid ""
 "Display or execute commands from the history list.\n"
 "    \n"
-"    fc is used to list or edit and re-execute commands from the history "
-"list.\n"
+"    fc is used to list or edit and re-execute commands from the history list.\n"
 "    FIRST and LAST can be numbers specifying the range, or FIRST can be a\n"
 "    string, which means the most recent command beginning with that\n"
 "    string.\n"
 "    \n"
 "    Options:\n"
-"      -e ENAME\tselect which editor to use.  Default is FCEDIT, then "
-"EDITOR,\n"
+"      -e ENAME\tselect which editor to use.  Default is FCEDIT, then EDITOR,\n"
 "    \t\tthen vi\n"
 "      -l \tlist lines instead of editing\n"
 "      -n\tomit line numbers when listing\n"
@@ -3446,20 +3315,16 @@ msgid ""
 "    the last command.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success or status of executed command; non-zero if an error "
-"occurs."
+"    Returns success or status of executed command; non-zero if an error occurs."
 msgstr ""
 "Vis eller kjør kommandoer fra historikklista.\n"
 "    \n"
-"    fc brukes til å vise list eller redigere og kjøre kommandoer på nytt fra "
-"historikklista.\n"
-"    FØRSTE og SISTE kan være tall som angir rekkevidde. FØRSTE kan også være "
-"en\n"
+"    fc brukes til å vise list eller redigere og kjøre kommandoer på nytt fra historikklista.\n"
+"    FØRSTE og SISTE kan være tall som angir rekkevidde. FØRSTE kan også være en\n"
 "    streng, som betyr nyeste kommando som begynner med denne strengen.\n"
 "    \n"
 "    Valg:\n"
-"      -e ENAME\tvelg hvilket redigeringsprogram som skal brukes. Standard er "
-"FCEDIT, evt. EDITOR\n"
+"      -e ENAME\tvelg hvilket redigeringsprogram som skal brukes. Standard er FCEDIT, evt. EDITOR\n"
 "    \t\teller vi\n"
 "      -l \tvis linjer i stedet for å redigere\n"
 "      -n\tikke vis linjenumre\n"
@@ -3473,8 +3338,7 @@ msgstr ""
 "    betyr å kjøre forrige kommando.\n"
 "    \n"
 "    Avslutningsstatus:\n"
-"    Enten vellykket, samme som kjørt kommando eller noe annet enn null hvis "
-"det oppstår feil."
+"    Enten vellykket, samme som kjørt kommando eller noe annet enn null hvis det oppstår feil."
 
 #: builtins.c:764
 msgid ""
@@ -3494,17 +3358,14 @@ msgstr ""
 "    allerede oppfattes som gjeldende i skallet.\n"
 "    \n"
 "    Avslutningsstatus:\n"
-"    Samme som kommandoen som legges i forgrunnen, eller mislykket hvis det "
-"oppstår feil."
+"    Samme som kommandoen som legges i forgrunnen, eller mislykket hvis det oppstår feil."
 
 #: builtins.c:779
 msgid ""
 "Move jobs to the background.\n"
 "    \n"
-"    Place the jobs identified by each JOB_SPEC in the background, as if "
-"they\n"
-"    had been started with `&'.  If JOB_SPEC is not present, the shell's "
-"notion\n"
+"    Place the jobs identified by each JOB_SPEC in the background, as if they\n"
+"    had been started with `&'.  If JOB_SPEC is not present, the shell's notion\n"
 "    of the current job is used.\n"
 "    \n"
 "    Exit Status:\n"
@@ -3513,8 +3374,7 @@ msgstr ""
 "Flytt jobber til bakgrunnen.\n"
 "    \n"
 "    Plasser jobber med id-er JOB_SPEC i bakgrunnen, som om de\n"
-"    ble startet med «&».  Hvis JOB_SPEC ikke er oppgitt, brukes jobben som "
-"allerede\n"
+"    ble startet med «&».  Hvis JOB_SPEC ikke er oppgitt, brukes jobben som allerede\n"
 "    som gjeldende i skallet.\n"
 "    \n"
 "    Avslutningsstatus:\n"
@@ -3525,8 +3385,7 @@ msgid ""
 "Remember or display program locations.\n"
 "    \n"
 "    Determine and remember the full pathname of each command NAME.  If\n"
-"    no arguments are given, information about remembered commands is "
-"displayed.\n"
+"    no arguments are given, information about remembered commands is displayed.\n"
 "    \n"
 "    Options:\n"
 "      -d\tforget the remembered location of each NAME\n"
@@ -3556,8 +3415,7 @@ msgstr ""
 "      -t\t\tskriv ut lagret plassering av valgt(e) NAVN, med\n"
 "    \t\tNAVN foran aktuell plassering hvis flere NAVN er valgt\n"
 "    Argumenter:\n"
-"      NAVN\t\tProgrammet søker etter hvert NAVN i $PATH og legger det til i "
-"lista\n"
+"      NAVN\t\tProgrammet søker etter hvert NAVN i $PATH og legger det til i lista\n"
 "    \t\tover lagrede kommandoer.\n"
 "    \n"
 "    Avslutningsstatus:\n"
@@ -3581,8 +3439,7 @@ msgid ""
 "      PATTERN\tPattern specifying a help topic\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success unless PATTERN is not found or an invalid option is "
-"given."
+"    Returns success unless PATTERN is not found or an invalid option is given."
 msgstr ""
 "Vis informasjon om innebygde kommandoer.\n"
 "    \n"
@@ -3600,8 +3457,7 @@ msgstr ""
 "      MØNSTER\tVelger hjelpeemne\n"
 "    \n"
 "    Avslutningsstatus:\n"
-"    Vellykket, med mindre et MØNSTER ikke finnes eller bruker tar et ugyldig "
-"valg."
+"    Vellykket, med mindre et MØNSTER ikke finnes eller bruker tar et ugyldig valg."
 
 #: builtins.c:842
 msgid ""
@@ -3631,8 +3487,7 @@ msgid ""
 "    \n"
 "    If the HISTTIMEFORMAT variable is set and not null, its value is used\n"
 "    as a format string for strftime(3) to print the time stamp associated\n"
-"    with each displayed history entry.  No time stamps are printed "
-"otherwise.\n"
+"    with each displayed history entry.  No time stamps are printed otherwise.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns success unless an invalid option is given or an error occurs."
@@ -3648,8 +3503,7 @@ msgstr ""
 "\t\tNegativ posisjon teller fra slutten.\n"
 "    \n"
 "      -a\tlegg til linjer fra gjeldende økt i historikkfil\n"
-"      -n\tles alle historikklinjer som ikke allerede er lest inn fra "
-"historikkfil\n"
+"      -n\tles alle historikklinjer som ikke allerede er lest inn fra historikkfil\n"
 "      -r\tles historikkfil og legg til innhold i historikkliste\n"
 "      -w\tlagre gjeldende historikk i historikkfil\n"
 "    \n"
@@ -3707,8 +3561,7 @@ msgstr ""
 "    jobber er erstattet med prosess-ID-en til gjeldende prosessgruppeleder.\n"
 "    \n"
 "    Avslutningsstatus:\n"
-"    Vellykket, med mindre bruker tar et ugyldig valg eller det oppstår "
-"feil.\n"
+"    Vellykket, med mindre bruker tar et ugyldig valg eller det oppstår feil.\n"
 "    Hvis «-x» er valgt, hentes statuskode fra aktuell KOMMANDO."
 
 #: builtins.c:906
@@ -3734,8 +3587,7 @@ msgstr ""
 "    \n"
 "    Valg:\n"
 "      -a\tfjern alle jobber hvis JOBBSPES ikke er angitt\n"
-"      -h\tmarker hver JOBBSPES slik at SIGHUP ikke sendes til jobben hvis "
-"skallet\n"
+"      -h\tmarker hver JOBBSPES slik at SIGHUP ikke sendes til jobben hvis skallet\n"
 "    \tmottar et SIGHUP\n"
 "      -r\tbare fjern kjørende jobber\n"
 "    \n"
@@ -3767,8 +3619,7 @@ msgstr ""
 "Send signal til en jobb.\n"
 "    \n"
 "    Gi prosesser (valgt med PID eller JOBBSPES) et signal\n"
-"    (valgt med SIGSPES eller SIGNUM). Hvis hverken SIGSPES eller SIGNUM er "
-"valgt,\n"
+"    (valgt med SIGSPES eller SIGNUM). Hvis hverken SIGSPES eller SIGNUM er valgt,\n"
 "    brukes SIGTERM.\n"
 "    \n"
 "    Valg:\n"
@@ -3778,8 +3629,7 @@ msgstr ""
 "    \tantas disse å være signalnumre som det skal vises navn på\n"
 "      -L\ttilsvarer «-l»\n"
 "    \n"
-"    Kill er en innebygget skallkommando av to grunner: den tillater bruk av "
-"jobb-ID\n"
+"    Kill er en innebygget skallkommando av to grunner: den tillater bruk av jobb-ID\n"
 "    i stedet for prosess-ID, og lar bruker drepe prosesser hvis grensa for\n"
 "    antall tillatte prosesser er nådd.\n"
 "    \n"
@@ -3793,8 +3643,7 @@ msgid ""
 "    Evaluate each ARG as an arithmetic expression.  Evaluation is done in\n"
 "    fixed-width integers with no check for overflow, though division by 0\n"
 "    is trapped and flagged as an error.  The following list of operators is\n"
-"    grouped into levels of equal-precedence operators.  The levels are "
-"listed\n"
+"    grouped into levels of equal-precedence operators.  The levels are listed\n"
 "    in order of decreasing precedence.\n"
 "    \n"
 "    \tid++, id--\tvariable post-increment, post-decrement\n"
@@ -3860,8 +3709,7 @@ msgstr ""
 "    \n"
 "    Skallvariabler tillates som operand. Variabelens navn erstattes med\n"
 "    verdien (tvunget til et breddefast heltall) i et uttrykk.\n"
-"    Variabelen behøver ikke heltallsattributt for å kunne brukes i et "
-"uttrykk.\n"
+"    Variabelen behøver ikke heltallsattributt for å kunne brukes i et uttrykk.\n"
 "    \n"
 "    Operatører regnes ut etter presedens. Underuttrykk i parentes\n"
 "    regnes ut først, og kan overstyre overnevnte presedensregler.\n"
@@ -3874,16 +3722,14 @@ msgid ""
 "Read a line from the standard input and split it into fields.\n"
 "    \n"
 "    Reads a single line from the standard input, or from file descriptor FD\n"
-"    if the -u option is supplied.  The line is split into fields as with "
-"word\n"
+"    if the -u option is supplied.  The line is split into fields as with word\n"
 "    splitting, and the first word is assigned to the first NAME, the second\n"
 "    word to the second NAME, and so on, with any leftover words assigned to\n"
-"    the last NAME.  Only the characters found in $IFS are recognized as "
-"word\n"
-"    delimiters.\n"
+"    the last NAME.  Only the characters found in $IFS are recognized as word\n"
+"    delimiters. By default, the backslash character escapes delimiter characters\n"
+"    and newline.\n"
 "    \n"
-"    If no NAMEs are supplied, the line read is stored in the REPLY "
-"variable.\n"
+"    If no NAMEs are supplied, the line read is stored in the REPLY variable.\n"
 "    \n"
 "    Options:\n"
 "      -a array\tassign the words read to sequential indices of the array\n"
@@ -3895,8 +3741,7 @@ msgid ""
 "      -n nchars\treturn after reading NCHARS characters rather than waiting\n"
 "    \t\tfor a newline, but honor a delimiter if fewer than\n"
 "    \t\tNCHARS characters are read before the delimiter\n"
-"      -N nchars\treturn only after reading exactly NCHARS characters, "
-"unless\n"
+"      -N nchars\treturn only after reading exactly NCHARS characters, unless\n"
 "    \t\tEOF is encountered or read times out, ignoring any\n"
 "    \t\tdelimiter\n"
 "      -p prompt\toutput the string PROMPT without a trailing newline before\n"
@@ -3914,10 +3759,8 @@ msgid ""
 "      -u fd\tread from file descriptor FD instead of the standard input\n"
 "    \n"
 "    Exit Status:\n"
-"    The return code is zero, unless end-of-file is encountered, read times "
-"out\n"
-"    (in which case it's greater than 128), a variable assignment error "
-"occurs,\n"
+"    The return code is zero, unless end-of-file is encountered, read times out\n"
+"    (in which case it's greater than 128), a variable assignment error occurs,\n"
 "    or an invalid file descriptor is supplied as the argument to -u."
 msgstr ""
 "Les en linje fra standard inndata og del den opp i felt.\n"
@@ -3933,38 +3776,32 @@ msgstr ""
 "    Valg:\n"
 "      -a tabell\tknytt leste ord til sekvens-indekser i \n"
 "    \t\ttabellvariabelen TABELL, talt fra null\n"
-"      -d skill\tfortsett frem til første SKILLetegn, i stedet for frem til "
-"linjeskift\n"
+"      -d skill\tfortsett frem til første SKILLetegn, i stedet for frem til linjeskift\n"
 "      -e\t\tbruk Readline til å hente linje\n"
 "      -i tekst\tBruk valgt TEKST med Readline\n"
-"      -n n\tgå tilbake etter å ha lest N antall tegn i stedet for å vente på "
-"ny linje,\n"
+"      -n n\tgå tilbake etter å ha lest N antall tegn i stedet for å vente på ny linje,\n"
 "    \t\tmen bruk skilletegn hvis linja er kortere enn N\n"
 "    \t\tles tegn før skilletegn\n"
 "      -N N\tgå tilbake etter å ha lest nøyaktig N antall tegn, med mindre\n"
 "    \t\tEOF eller tidsavbrudd oppstår (skilletegn ignoreres)\n"
-"      -p ledet\tskriv ut valgt LEDETekst uten å legge til linjeskift før "
-"lesing\n"
+"      -p ledet\tskriv ut valgt LEDETekst uten å legge til linjeskift før lesing\n"
 "      -r\t\tikke tillat bruk av skråstrek som skiftetegn\n"
 "      -s\t\tikke skriv ut inndata som kommer fra en terminal\n"
 "      -t tidsav\tavbryt og avslutt med feil hvis en hel linje med inndata\n"
 "    \t\tikke blir lest ferdig innen valgt TIDSAVbrudd (i sekunder).\n"
-"    \t\tStandard avbruddstid hentes fra variabelen TMOUT. TIDSAVbrudd kan "
-"være\n"
+"    \t\tStandard avbruddstid hentes fra variabelen TMOUT. TIDSAVbrudd kan være\n"
 "    \t\tet brøktall. Hvis TIDSAV er 0, går read tilbake umiddelbart,\n"
-"    \t\tog prøver ikke å lese data. I sistnevnte tilfelle avslutter read "
-"bare\n"
+"    \t\tog prøver ikke å lese data. I sistnevnte tilfelle avslutter read bare\n"
 "    \t\tvellykket hvis inndata er tilgjengelig på valgt fildeskriptor.\n"
 "    \t\tAvslutningsstatus er større enn 128 ved tidsavbrudd\n"
 "      -u fd\t\tles fra fildeskriptor FD i stedet for standard inndata\n"
 "    \n"
 "    Avslutningsstatus:\n"
 "    Null (vellykket), med mindre programmet møter EOF, får tidsavbrudd\n"
-"    (i så fall er verdien høyere enn 128), det oppstår en variabel-"
-"tidelingsfeil,\n"
+"    (i så fall er verdien høyere enn 128), det oppstår en variabel-tidelingsfeil,\n"
 "    eller valget «-u» argumenteres med en ugyldig fildeskriptor."
 
-#: builtins.c:1041
+#: builtins.c:1042
 msgid ""
 "Return from a shell function.\n"
 "    \n"
@@ -3984,7 +3821,7 @@ msgstr ""
 "    Avslutningsstatus:\n"
 "    N, eller mislykket hvis skallet ikke kjører en funksjon eller et skript."
 
-#: builtins.c:1054
+#: builtins.c:1055
 msgid ""
 "Set or unset values of shell options and positional parameters.\n"
 "    \n"
@@ -4027,8 +3864,7 @@ msgid ""
 "              physical     same as -P\n"
 "              pipefail     the return value of a pipeline is the status of\n"
 "                           the last command to exit with a non-zero status,\n"
-"                           or zero if no command exited with a non-zero "
-"status\n"
+"                           or zero if no command exited with a non-zero status\n"
 "              posix        change the behavior of bash where the default\n"
 "                           operation differs from the Posix standard to\n"
 "                           match the standard\n"
@@ -4052,8 +3888,7 @@ msgid ""
 "          by default when the shell is interactive.\n"
 "      -P  If set, do not resolve symbolic links when executing commands\n"
 "          such as cd which change the current directory.\n"
-"      -T  If set, the DEBUG and RETURN traps are inherited by shell "
-"functions.\n"
+"      -T  If set, the DEBUG and RETURN traps are inherited by shell functions.\n"
 "      --  Assign any remaining arguments to the positional parameters.\n"
 "          If there are no remaining arguments, the positional parameters\n"
 "          are unset.\n"
@@ -4109,10 +3944,8 @@ msgstr ""
 "              onecmd       tilsvarer «-t»\n"
 "              physical     tilsvarer «-P»\n"
 "              pipefail     returverdi av en kommandokø er statusen for\n"
-"                           siste kommando som avslutter med en annen status "
-"enn null,\n"
-"                           eller null hvis alle kommandoer avsluttet med "
-"null\n"
+"                           siste kommando som avslutter med en annen status enn null,\n"
+"                           eller null hvis alle kommandoer avsluttet med null\n"
 "              posix        endre bash-oppførsel hvor standardoppførselen er\n"
 "                           annerledes enn Posix-standarden, slik at bash\n"
 "                           samsvarer med Posix\n"
@@ -4122,8 +3955,7 @@ msgstr ""
 "              xtrace       tilsvarer «-x»\n"
 "      -p  Slått på når virkelig og effektiv bruker-ID ikke er like.\n"
 "          Dette slår av behandling av fila $ENV og importering av\n"
-"          skallfunksjoner. Hvis du slår av dette valget, blir effektiv uid "
-"og\n"
+"          skallfunksjoner. Hvis du slår av dette valget, blir effektiv uid og\n"
 "          gid det samme som virkelig uid og gid.\n"
 "      -t  Avslutt når én kommando er lest og kjørt.\n"
 "      -u  Behandle udefinerte variabler som en feil.\n"
@@ -4152,7 +3984,7 @@ msgstr ""
 "    Avslutningsstatus:\n"
 "    Vellykket, med mindre bruker tar et ugyldig valg."
 
-#: builtins.c:1139
+#: builtins.c:1140
 msgid ""
 "Unset values and attributes of shell variables and functions.\n"
 "    \n"
@@ -4164,8 +3996,7 @@ msgid ""
 "      -n\ttreat each NAME as a name reference and unset the variable itself\n"
 "    \t\trather than the variable it references\n"
 "    \n"
-"    Without options, unset first tries to unset a variable, and if that "
-"fails,\n"
+"    Without options, unset first tries to unset a variable, and if that fails,\n"
 "    tries to unset a function.\n"
 "    \n"
 "    Some variables cannot be unset; also see `readonly'.\n"
@@ -4180,8 +4011,7 @@ msgstr ""
 "    Valg:\n"
 "      -f\tbehandle hvert NAVN som en skallfunksjon\n"
 "      -v\tbehandle hvert NAVN som en skallvariabel\n"
-"      -n\tbehandle hvert NAVN som en navnreferanse, og tilbakestill selve "
-"variabelen\n"
+"      -n\tbehandle hvert NAVN som en navnreferanse, og tilbakestill selve variabelen\n"
 "    \ti stedet for variabelen den refererer til\n"
 "    \n"
 "    Hvis ingen valg er tatt, prøver programmet først å tømme en variabel.\n"
@@ -4190,16 +4020,14 @@ msgstr ""
 "    Enkelte variabler kan ikke tømmes. Se også «readonly».\n"
 "    \n"
 "    Avslutningsstatus:\n"
-"    Vellykket, med mindre bruker tar et ugyldig valg eller et NAVN er "
-"skrivebeskyttet."
+"    Vellykket, med mindre bruker tar et ugyldig valg eller et NAVN er skrivebeskyttet."
 
-#: builtins.c:1161
+#: builtins.c:1162
 msgid ""
 "Set export attribute for shell variables.\n"
 "    \n"
 "    Marks each NAME for automatic export to the environment of subsequently\n"
-"    executed commands.  If VALUE is supplied, assign VALUE before "
-"exporting.\n"
+"    executed commands.  If VALUE is supplied, assign VALUE before exporting.\n"
 "    \n"
 "    Options:\n"
 "      -f\trefer to shell functions\n"
@@ -4213,10 +4041,8 @@ msgid ""
 msgstr ""
 "Gi skallvariabler eksport-attributt.\n"
 "    \n"
-"    Markerer hvert valgt NAVN for automatisk eksportering til miljøet ved "
-"etterfølgende\n"
-"    kjørte kommandoer. Hvis VERDI er oppgitt, tildeles VERDI før "
-"eksportering.\n"
+"    Markerer hvert valgt NAVN for automatisk eksportering til miljøet ved etterfølgende\n"
+"    kjørte kommandoer. Hvis VERDI er oppgitt, tildeles VERDI før eksportering.\n"
 "    \n"
 "    Valg:\n"
 "      -f\thenvis til skallfunksjoner\n"
@@ -4226,10 +4052,9 @@ msgstr ""
 "    Bruk argumentet«--» for å slå av videre behandling av valg.\n"
 "    \n"
 "    Avslutningsstatus:\n"
-"    Vellykket, med mindre bruker tar et ugyldig valg, eller et NAVN er "
-"ugyldig."
+"    Vellykket, med mindre bruker tar et ugyldig valg, eller et NAVN er ugyldig."
 
-#: builtins.c:1180
+#: builtins.c:1181
 msgid ""
 "Mark shell variables as unchangeable.\n"
 "    \n"
@@ -4251,8 +4076,7 @@ msgid ""
 msgstr ""
 "Marker skallvariabler som skrivebeskyttet.\n"
 "    \n"
-"    Marker hvert valgt NAVN som skrivebeskyttet. Verdier av NAVN kan ikke "
-"endres\n"
+"    Marker hvert valgt NAVN som skrivebeskyttet. Verdier av NAVN kan ikke endres\n"
 "    av etterfølgende tildeling. Hvis VERDI er oppgitt, tildeles denne før\n"
 "    variabelen markeres som skrivebeskyttet.\n"
 "    \n"
@@ -4260,8 +4084,7 @@ msgstr ""
 "      -a\thenvis til indekserte tabellvariabler\n"
 "      -A\thenvis til assosiative tabellvariabler\n"
 "      -f\thenvis til skallfunksjoner\n"
-"      -p\tvis en liste over alle skrivebeskyttede variabler eller "
-"funksjoner,\n"
+"      -p\tvis en liste over alle skrivebeskyttede variabler eller funksjoner,\n"
 "            avhengig av hvorvidt «-f» er valgt\n"
 "    \n"
 "    Bruk argumentet «--» for å slå av videre behandling av valg.\n"
@@ -4269,7 +4092,7 @@ msgstr ""
 "    Avslutningsstatus:\n"
 "    Vellykket, med mindre bruker tar et ugyldig valg eller NAVN."
 
-#: builtins.c:1202
+#: builtins.c:1203
 msgid ""
 "Shift positional parameters.\n"
 "    \n"
@@ -4287,7 +4110,7 @@ msgstr ""
 "    Avslutningsstatus:\n"
 "    Vellykket, med mindre N er negativ eller større enn $#."
 
-#: builtins.c:1214 builtins.c:1229
+#: builtins.c:1215 builtins.c:1230
 msgid ""
 "Execute commands from a file in the current shell.\n"
 "    \n"
@@ -4311,7 +4134,7 @@ msgstr ""
 "    Samme som siste kommando som ble kjørt via FILNAVN, eller\n"
 "    mislykket hvis FILNAVN ikke kan leses."
 
-#: builtins.c:1245
+#: builtins.c:1246
 msgid ""
 "Suspend shell execution.\n"
 "    \n"
@@ -4326,10 +4149,8 @@ msgid ""
 msgstr ""
 "Sett skallkjøring på pause.\n"
 "    \n"
-"    Sett kjøring av dette skallet på pause inntil det mottar et SIGCONT-"
-"signal.\n"
-"    Innloggingsskall kan ikke settes på pause med mindre du tvinger det "
-"fram.\n"
+"    Sett kjøring av dette skallet på pause inntil det mottar et SIGCONT-signal.\n"
+"    Innloggingsskall kan ikke settes på pause med mindre du tvinger det fram.\n"
 "    \n"
 "    Valg:\n"
 "      -f\ttving skallpause, selv hvis skallet er et innloggingsskall\n"
@@ -4337,7 +4158,7 @@ msgstr ""
 "    Avslutningsstatus:\n"
 "    Vellykket, med mindre jobbkontroll er slått av eller det oppstår feil."
 
-#: builtins.c:1261
+#: builtins.c:1262
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -4371,8 +4192,7 @@ msgid ""
 "      -x FILE        True if the file is executable by you.\n"
 "      -O FILE        True if the file is effectively owned by you.\n"
 "      -G FILE        True if the file is effectively owned by your group.\n"
-"      -N FILE        True if the file has been modified since it was last "
-"read.\n"
+"      -N FILE        True if the file has been modified since it was last read.\n"
 "    \n"
 "      FILE1 -nt FILE2  True if file1 is newer than file2 (according to\n"
 "                       modification date).\n"
@@ -4393,8 +4213,7 @@ msgid ""
 "      STRING1 != STRING2\n"
 "                     True if the strings are not equal.\n"
 "      STRING1 < STRING2\n"
-"                     True if STRING1 sorts before STRING2 "
-"lexicographically.\n"
+"                     True if STRING1 sorts before STRING2 lexicographically.\n"
 "      STRING1 > STRING2\n"
 "                     True if STRING1 sorts after STRING2 lexicographically.\n"
 "    \n"
@@ -4422,8 +4241,7 @@ msgstr ""
 "Kontroller betinget uttrykk.\n"
 "    \n"
 "    Avslutter med status 0 (positiv, «true») eller 1 (negativ, «false»)\n"
-"    i henhold til resultatet av valgt UTTRykk. Uttrykk kan være unære eller "
-"binære.\n"
+"    i henhold til resultatet av valgt UTTRykk. Uttrykk kan være unære eller binære.\n"
 "    Unære uttrykk brukes ofte for å undersøke status for en fil.\n"
 "    Streng- og tallkontroll-valg kan også brukes.\n"
 "    \n"
@@ -4451,10 +4269,8 @@ msgstr ""
 "      -w FIL        Positiv hvis FIL kan overskrives av deg.\n"
 "      -x FIL        Positiv hvis FIL kan kjøres av deg.\n"
 "      -O FIL        Positiv hvis FIL har deg som effektiv eier.\n"
-"      -G FIL        Positiv hvis FIL har din gruppe som effektiv "
-"gruppetilhørighet.\n"
-"      -N FIL        Positiv hvis FIL er blitt endret siden den ble lest "
-"sist.\n"
+"      -G FIL        Positiv hvis FIL har din gruppe som effektiv gruppetilhørighet.\n"
+"      -N FIL        Positiv hvis FIL er blitt endret siden den ble lest sist.\n"
 "    \n"
 "      FIL1 -nt FIL2  Positiv hvis FIL1 er nyere enn FIL2 (i følge\n"
 "                       endringsdato).\n"
@@ -4475,18 +4291,15 @@ msgstr ""
 "      STRENG1 != STRENG2\n"
 "                     Positiv hvis STRENGene ikke er like.\n"
 "      STRENG1 < STRENG2\n"
-"                     Positiv hvis STRENG1 havner over STRENG2 når de "
-"sorteres leksikografisk.\n"
+"                     Positiv hvis STRENG1 havner over STRENG2 når de sorteres leksikografisk.\n"
 "      STRENG1 > STRENG2\n"
-"                     Positiv hvis STRENG1 havner under STRENG2 når de "
-"sorteres leksikografisk.\n"
+"                     Positiv hvis STRENG1 havner under STRENG2 når de sorteres leksikografisk.\n"
 "    \n"
 "    Andre valg:\n"
 "    \n"
 "      -o VALG      Positiv hvis skallvalget OPTION er slått på.\n"
 "      -v VAR\t Positiv hvis skallvariabelen VAR har en verdi\n"
-"      -R VAR\t Positiv hvis skallvariabelen VAR har en verdi, og er en "
-"navnreferanse.\n"
+"      -R VAR\t Positiv hvis skallvariabelen VAR har en verdi, og er en navnreferanse.\n"
 "      ! UTTR         Positiv hvis UTTR er usant.\n"
 "      UTTR1 -a UTTR2 Positiv hvis både UTTR1 og UTTR2 er sanne.\n"
 "      UTTR1 -o UTTR2 Positiv hvis enten UTTR1 eller UTTR2 er sanne.\n"
@@ -4494,16 +4307,14 @@ msgstr ""
 "      arg1 OP arg2   Aritmetiske tester. OP må være enten «-eq», «-ne»,\n"
 "                     «-lt», «-le», «-gt» eller «-ge».\n"
 "    \n"
-"    Aritmetiske binærvalg gir positiv verdi hvis ARG1 er lik, ulik, mindre "
-"enn,\n"
+"    Aritmetiske binærvalg gir positiv verdi hvis ARG1 er lik, ulik, mindre enn,\n"
 "    lik-eller-mindre-enn, større enn eller større-enn-eller-lik ARG2.\n"
 "    \n"
 "    Avslutningsstatus:\n"
-"    Vellykket hvis UTTR gir positiv verdi, og mislykket hvis det gir negativ "
-"verdi eller\n"
+"    Vellykket hvis UTTR gir positiv verdi, og mislykket hvis det gir negativ verdi eller\n"
 "    bruker skriver inn et ugyldig argument."
 
-#: builtins.c:1343
+#: builtins.c:1344
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -4515,12 +4326,11 @@ msgstr ""
 "    Dette er synonymt med den innebygde kommandoen «test», men\n"
 "    siste argument må være «]» for å samsvare med «[»."
 
-#: builtins.c:1352
+#: builtins.c:1353
 msgid ""
 "Display process times.\n"
 "    \n"
-"    Prints the accumulated user and system times for the shell and all of "
-"its\n"
+"    Prints the accumulated user and system times for the shell and all of its\n"
 "    child processes.\n"
 "    \n"
 "    Exit Status:\n"
@@ -4528,18 +4338,16 @@ msgid ""
 msgstr ""
 "Vis prosesstider.\n"
 "    \n"
-"    Skriver ut oppsamlet bruker- og systemtid for skallet og alle "
-"underprosesser.\n"
+"    Skriver ut oppsamlet bruker- og systemtid for skallet og alle underprosesser.\n"
 "    \n"
 "    Avslutningsstatus:\n"
 "    Alltid vellykket."
 
-#: builtins.c:1364
+#: builtins.c:1365
 msgid ""
 "Trap signals and other events.\n"
 "    \n"
-"    Defines and activates handlers to be run when the shell receives "
-"signals\n"
+"    Defines and activates handlers to be run when the shell receives signals\n"
 "    or other conditions.\n"
 "    \n"
 "    ARG is a command to be read and executed when the shell receives the\n"
@@ -4548,43 +4356,33 @@ msgid ""
 "    value.  If ARG is the null string each SIGNAL_SPEC is ignored by the\n"
 "    shell and by the commands it invokes.\n"
 "    \n"
-"    If a SIGNAL_SPEC is EXIT (0) ARG is executed on exit from the shell.  "
-"If\n"
-"    a SIGNAL_SPEC is DEBUG, ARG is executed before every simple command.  "
-"If\n"
-"    a SIGNAL_SPEC is RETURN, ARG is executed each time a shell function or "
-"a\n"
-"    script run by the . or source builtins finishes executing.  A "
-"SIGNAL_SPEC\n"
-"    of ERR means to execute ARG each time a command's failure would cause "
-"the\n"
+"    If a SIGNAL_SPEC is EXIT (0) ARG is executed on exit from the shell.  If\n"
+"    a SIGNAL_SPEC is DEBUG, ARG is executed before every simple command.  If\n"
+"    a SIGNAL_SPEC is RETURN, ARG is executed each time a shell function or a\n"
+"    script run by the . or source builtins finishes executing.  A SIGNAL_SPEC\n"
+"    of ERR means to execute ARG each time a command's failure would cause the\n"
 "    shell to exit when the -e option is enabled.\n"
 "    \n"
-"    If no arguments are supplied, trap prints the list of commands "
-"associated\n"
+"    If no arguments are supplied, trap prints the list of commands associated\n"
 "    with each signal.\n"
 "    \n"
 "    Options:\n"
 "      -l\tprint a list of signal names and their corresponding numbers\n"
 "      -p\tdisplay the trap commands associated with each SIGNAL_SPEC\n"
 "    \n"
-"    Each SIGNAL_SPEC is either a signal name in <signal.h> or a signal "
-"number.\n"
+"    Each SIGNAL_SPEC is either a signal name in <signal.h> or a signal number.\n"
 "    Signal names are case insensitive and the SIG prefix is optional.  A\n"
 "    signal may be sent to the shell with \"kill -signal $$\".\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success unless a SIGSPEC is invalid or an invalid option is "
-"given."
+"    Returns success unless a SIGSPEC is invalid or an invalid option is given."
 msgstr ""
 "Fang signaler og andre hendelser.\n"
 "    \n"
-"    Definerer og slår på brytere som skal kjøres når skallet mottar "
-"signaler\n"
+"    Definerer og slår på brytere som skal kjøres når skallet mottar signaler\n"
 "    eller havner i andre tilstander.\n"
 "    \n"
-"    ARG er en kommando som skal leses og kjøres når skallet mottar signalet/-"
-"ene\n"
+"    ARG er en kommando som skal leses og kjøres når skallet mottar signalet/-ene\n"
 "    i henhold til SIGNALSPES. Hvis ARG er enten utelatt eller «-»,\n"
 "    og én SIGNALSPES er brukt, tilbakestilles valgt(e) signal(er) til\n"
 "    opprinnelig verdi. Hvis ARG er null, ignoreres SIGNALSPES av skallet\n"
@@ -4592,31 +4390,26 @@ msgstr ""
 "    \n"
 "    Hvis en SIGNALSPES er EXIT (0), kjøres ARG når skallet avslutter.\n"
 "    Hvis en SIGNALSPES er DEBUG, kjøres ARG før hver kommando.\n"
-"    Hvis en SIGNALSPES er RETURN, kjøres ARG hver gang en skallfunksjon, "
-"skript\n"
+"    Hvis en SIGNALSPES er RETURN, kjøres ARG hver gang en skallfunksjon, skript\n"
 "    eller innebygd kommando har kjørt ferdig. Hvis en SIGNALSPES\n"
-"    er ERR, kjøres ARG hver gang en feilkjørt kommando ville ført til at "
-"skallet\n"
+"    er ERR, kjøres ARG hver gang en feilkjørt kommando ville ført til at skallet\n"
 "    avsluttes når «-e» er valgt.\n"
 "    \n"
-"    Hvis ingen argumenter er brukt, skriver trap ut en liste over "
-"kommandoer\n"
+"    Hvis ingen argumenter er brukt, skriver trap ut en liste over kommandoer\n"
 "    som er tilknyttet hvert signal.\n"
 "    \n"
 "    Valg:\n"
 "      -l\tskriv ut en liste over signalnavn og tilknyttede numre\n"
 "      -p\tvis trap-kommandoer som er tilknyttet hver SIGNALSPESifikasjon\n"
 "    \n"
-"    Hver SIGNALSPES er enten et signalnavn fra <signal.h> eller et "
-"signalnummer.\n"
-"    Signalnavn skiller mellom små og store bokstaver. Prefikset «SIG» er "
-"valgfritt.\n"
+"    Hver SIGNALSPES er enten et signalnavn fra <signal.h> eller et signalnummer.\n"
+"    Signalnavn skiller mellom små og store bokstaver. Prefikset «SIG» er valgfritt.\n"
 "    Du kan sende et signal til skallet med «kill -signal $$».\n"
 "    \n"
 "    Avslutningsstatus:\n"
 "    Vellykket, med mindre en SIGNALSPES eller et valg er ugyldig."
 
-#: builtins.c:1400
+#: builtins.c:1401
 msgid ""
 "Display information about command type.\n"
 "    \n"
@@ -4642,8 +4435,7 @@ msgid ""
 "      NAME\tCommand name to be interpreted.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success if all of the NAMEs are found; fails if any are not "
-"found."
+"    Returns success if all of the NAMEs are found; fails if any are not found."
 msgstr ""
 "Vis informasjon om kommandotype.\n"
 "    \n"
@@ -4651,36 +4443,30 @@ msgstr ""
 "    et kommandonavn.\n"
 "    \n"
 "    Valg:\n"
-"      -a\tvis alle plasseringer som inneholder en kjørbar fil med oppgitt "
-"NAVN.\n"
+"      -a\tvis alle plasseringer som inneholder en kjørbar fil med oppgitt NAVN.\n"
 "    \tHer inngår alle alias, innebygde kommandoer og funksjoner, med mindre\n"
 "    \t«-p» er valgt i tillegg\n"
 "      -f\tikke slå opp skallfunksjoner\n"
 "      -P\ttving et søk i STI etter NAVN, selv hvis det er et alias,\n"
 "    \tinnebygd kommando eller en funksjon, og vis navn på fila\n"
 "    \tsom ville blitt kjørt\n"
-"      -p\tvis enten navn på fila som ville blitt kjørt, eller ingenting "
-"hvis\n"
+"      -p\tvis enten navn på fila som ville blitt kjørt, eller ingenting hvis\n"
 "    \t«type -t NAVN» ikke fører til «file».\n"
 "      -t\tbeskriv NAVN som enten «alias», «keyword» (nøkkelord),\n"
-"    \t«function» (funksjon), «builtin» (innebygd kommando), «file» (fil) "
-"eller \n"
+"    \t«function» (funksjon), «builtin» (innebygd kommando), «file» (fil) eller \n"
 "    \t«'» (ikke funnet), if NAME is an alias, shell\n"
 "    \n"
 "    Argumenter:\n"
 "      NAVN\tKommandonavn som skal tolkes.\n"
 "    \n"
 "    Avslutningsstatus:\n"
-"    Vellykket hvis alle NAVN finnes, og mislykket hvis ett eller flere ikke "
-"finnes."
+"    Vellykket hvis alle NAVN finnes, og mislykket hvis ett eller flere ikke finnes."
 
-#: builtins.c:1431
-#, fuzzy
+#: builtins.c:1432
 msgid ""
 "Modify shell resource limits.\n"
 "    \n"
-"    Provides control over the resources available to the shell and "
-"processes\n"
+"    Provides control over the resources available to the shell and processes\n"
 "    it creates, on systems that allow such control.\n"
 "    \n"
 "    Options:\n"
@@ -4726,8 +4512,7 @@ msgid ""
 msgstr ""
 "Endre grenser for skallressurser.\n"
 "    \n"
-"    Lar deg kontrollere mengden ressurser som skal være tilgjengelig for "
-"skall og\n"
+"    Lar deg kontrollere mengden ressurser som skal være tilgjengelig for skall og\n"
 "    prosessene det lager på systemer som tillater det.\n"
 "    \n"
 "    Valg:\n"
@@ -4738,9 +4523,9 @@ msgstr ""
 "      -c\tmaksimal størrelse på opprettede kjernefiler\n"
 "      -d\tmaksimal størrelse på datasegment av en prosess\n"
 "      -e\tmaksimal prioritet («nice»-verdi)\n"
-"      -f\tmaksimal størrelse på filer som skrives av skallet og "
-"underprosesser\n"
+"      -f\tmaksimal størrelse på filer som skrives av skallet og underprosesser\n"
 "      -i\tmaksimalt antall ventende signaler\n"
+"      -k\tmaksimalt antall k-køer som er tildelt denne prosessen\n"
 "      -l\tmaksimal minnemengde en prosess kan låse\n"
 "      -m\tmaksimal «resident set»-størrelse\n"
 "      -n\tmaksimalt antall åpne fildeskriptorer\n"
@@ -4752,26 +4537,24 @@ msgstr ""
 "      -u\tmaksimalt antall brukerprosesser\n"
 "      -v\tstørrelsen på virtuelt minne\n"
 "      -x\tmaksimalt antall fillåser\n"
-"      -T    maksimalt antall tråder\n"
+"      -P\tmaksimalt antall pseudoterminaler\n"
+"      -R\tden maksimale tiden en sanntidsprosess kan kjøre før blokkering\n"
+"      -T\tmaksimalt antall tråder\n"
 "    \n"
 "    Det er ikke alle valg som støttes på alle plattformer.\n"
 "    \n"
 "    Hvis GRENSE er oppgitt, brukes denne som ny verdi for valgt ressurs.\n"
-"    Du kan også bruke spesialverdiene «soft» (myk), «hard», og "
-"«unlimited» (ubegrenset).\n"
-"    Ellers skriver programmet ut gjeldende verdi av valgt ressurs. Hvis "
-"ingenting\n"
+"    Du kan også bruke spesialverdiene «soft» (myk), «hard», og «unlimited» (ubegrenset).\n"
+"    Ellers skriver programmet ut gjeldende verdi av valgt ressurs. Hvis ingenting\n"
 "    er valgt, brukes «-f».\n"
 "    \n"
-"    Verdier oppgis i 1024-byte-enheter, bortsett fra «-t» som oppgis i "
-"sekunder,\n"
-"    «-p» som oppgis i 512-byte-enheter og «-u» som er et uskalert antall "
-"prosesser.\n"
+"    Verdier oppgis i 1024-byte-enheter, bortsett fra «-t» som oppgis i sekunder,\n"
+"    «-p» som oppgis i 512-byte-enheter og «-u» som er et uskalert antall prosesser.\n"
 "    \n"
 "    Avslutningsstatus:\n"
 "    Vellykket, med mindre bruker tar et ugyldig valg eller det oppstår feil."
 
-#: builtins.c:1482
+#: builtins.c:1483
 msgid ""
 "Display or set file mode mask.\n"
 "    \n"
@@ -4797,35 +4580,29 @@ msgstr ""
 "    og ellers som en symbolsk modusstreng av typen som brukes av chmod(1).\n"
 "    \n"
 "    Valg:\n"
-"      -p\tskriv ut i et format som kan gjenbrukes som inndata hvis ingen "
-"MODUS er valgt\n"
+"      -p\tskriv ut i et format som kan gjenbrukes som inndata hvis ingen MODUS er valgt\n"
 "      -S\tgjør utdata symbolsk (ikke skriv ut oktaltall)\n"
 "    \n"
 "    Avslutningsstatus:\n"
 "    Vellykket, med mindre MODUS er ugyldig eller bruker tar et ugyldig valg."
 
-#: builtins.c:1502
-#, fuzzy
+#: builtins.c:1503
 msgid ""
 "Wait for job completion and return exit status.\n"
 "    \n"
-"    Waits for each process identified by an ID, which may be a process ID or "
-"a\n"
+"    Waits for each process identified by an ID, which may be a process ID or a\n"
 "    job specification, and reports its termination status.  If ID is not\n"
 "    given, waits for all currently active child processes, and the return\n"
 "    status is zero.  If ID is a job specification, waits for all processes\n"
 "    in that job's pipeline.\n"
 "    \n"
-"    If the -n option is supplied, waits for a single job from the list of "
-"IDs,\n"
-"    or, if no IDs are supplied, for the next job to complete and returns "
-"its\n"
+"    If the -n option is supplied, waits for a single job from the list of IDs,\n"
+"    or, if no IDs are supplied, for the next job to complete and returns its\n"
 "    exit status.\n"
 "    \n"
 "    If the -p option is supplied, the process or job identifier of the job\n"
 "    for which the exit status is returned is assigned to the variable VAR\n"
-"    named by the option argument. The variable will be unset initially, "
-"before\n"
+"    named by the option argument. The variable will be unset initially, before\n"
 "    any assignment. This is useful only when the -n option is supplied.\n"
 "    \n"
 "    If the -f option is supplied, and job control is enabled, waits for the\n"
@@ -4837,51 +4614,48 @@ msgid ""
 "    children."
 msgstr ""
 "Vent på fullføring av jobb, og skriv ut avslutningsstatus.\n"
-"    \n"
-"    Vent på valgt(e) prosess(er) (valgt med ID, som kan være prosess-ID "
-"eller\n"
+"   \n"
+" \n"
+"    Vent på valgt(e) prosess(er) (valgt med ID, som kan være prosess-ID eller\n"
 "    jobbspesifikasjon), og skriv ut statuskode. Hvis ID ikke er valgt,\n"
 "    venter programmet på alle aktive underprosesser, og avslutter\n"
-"    med kode null. Hvis ID er en jobbspesifikasjon, venter programmet på "
-"alle\n"
+"    med kode null. Hvis ID er en jobbspesifikasjon, venter programmet på alle\n"
 "    prosesser i kommandokøen for valgt jobb.\n"
 "    \n"
-"    Hvis «-n» er valgt, skriver programmet ut avslutningsstatus for neste "
-"jobb.\n"
+"    Hvis «-n» er valgt, venter på en enkelt jobb fra listen over IDer,\n"
+"    eller, hvis ingen IDer er oppgitt skriver programmet ut avslutningsstatus for neste jobb.\n"
 "    \n"
 "    Hvis «f» er valgt og jobbkontroll er slått på, venter programmet på at\n"
 "    valgt ID skal avslutte i stedet for å vente på statusendring.\n"
+"    \n"
 "    Avslutningsstatus:\n"
-"    Samme som siste ID, eller mislykket hvis enten ID er ugyldig eller\n"
-"    bruker tar et ugyldig valg."
+"    Samme som siste ID: mislykket hvis enten ID er ugyldig eller\n"
+"    bruker tar et ugyldig valg, eller hvis «-n» er oppgitt og \n"
+"    skallet ikke har noen uventede barne-prosesser."
 
-#: builtins.c:1533
+#: builtins.c:1534
 msgid ""
 "Wait for process completion and return exit status.\n"
 "    \n"
-"    Waits for each process specified by a PID and reports its termination "
-"status.\n"
+"    Waits for each process specified by a PID and reports its termination status.\n"
 "    If PID is not given, waits for all currently active child processes,\n"
 "    and the return status is zero.  PID must be a process ID.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns the status of the last PID; fails if PID is invalid or an "
-"invalid\n"
+"    Returns the status of the last PID; fails if PID is invalid or an invalid\n"
 "    option is given."
 msgstr ""
 "Vent på ferdigstillelse av prosess, og rapporter avslutningsstatus.\n"
 "    \n"
-"    Venter på hver prosess som er valgt med PID, og rapporterer avsluttende "
-"statuskode.\n"
-"    Hvis PID ikke er valgt, venter kommandoen på alle aktive "
-"underprosesser,\n"
+"    Venter på hver prosess som er valgt med PID, og rapporterer avsluttende statuskode.\n"
+"    Hvis PID ikke er valgt, venter kommandoen på alle aktive underprosesser,\n"
 "    og avslutter med null-status. PID må være en prosess-ID.\n"
 "    \n"
 "    Avslutningsstatus:\n"
 "    Samme som siste PID. Mislykket hvis PID er ugyldig, eller hvis\n"
 "    bruker tar et ugyldig valg."
 
-#: builtins.c:1548
+#: builtins.c:1549
 msgid ""
 "Execute commands for each member in a list.\n"
 "    \n"
@@ -4902,7 +4676,7 @@ msgstr ""
 "    Avslutningsstatus:\n"
 "    Samme som sist kjørte kommando."
 
-#: builtins.c:1562
+#: builtins.c:1563
 msgid ""
 "Arithmetic for loop.\n"
 "    \n"
@@ -4932,7 +4706,7 @@ msgstr ""
 "    Avslutningsstatus:\n"
 "    Samme som sist kjørte kommando."
 
-#: builtins.c:1580
+#: builtins.c:1581
 msgid ""
 "Select words from a list and execute commands.\n"
 "    \n"
@@ -4960,15 +4734,14 @@ msgstr ""
 "    består av et tall som tilsvarer antall ord, endres NAVN slik at det\n"
 "    tilsvarer dette tallet. Hvis linja er tom, vises ORD og ledetekst på\n"
 "    nytt.  Hvis programmet møter EOF, avslutter kommandoen. Andre\n"
-"    verdier fører til at NAVN endres til null. Lest linje lagres i "
-"variabelen\n"
+"    verdier fører til at NAVN endres til null. Lest linje lagres i variabelen\n"
 "    REPLY. KOMMANDOER kjøres etter hvert utvalg frem til programmet\n"
 "    støter på en bruddkommando.\n"
 "    \n"
 "    Avslutningsstatus:\n"
 "    Samme som sist kjørt kommando."
 
-#: builtins.c:1601
+#: builtins.c:1602
 msgid ""
 "Report time consumed by pipeline's execution.\n"
 "    \n"
@@ -4985,10 +4758,8 @@ msgid ""
 msgstr ""
 "Rapporter medgått tid i kommandokø-kjøring.\n"
 "    \n"
-"    Kjør valgt DATARØR og skriv ut en oppsummering av reell tid, bruker-CPU-"
-"tid\n"
-"    og system-CPU-tid som er medgått ved kjøring av DATARØR idet det "
-"avsluttes.\n"
+"    Kjør valgt DATARØR og skriv ut en oppsummering av reell tid, bruker-CPU-tid\n"
+"    og system-CPU-tid som er medgått ved kjøring av DATARØR idet det avsluttes.\n"
 "    \n"
 "    Valg:\n"
 "      -p\tkjør tidsoppsummering i gjenbrukbart Posix-format.\n"
@@ -4998,7 +4769,7 @@ msgstr ""
 "    Avslutningsstatus:\n"
 "    Samme som statuskoden fra valgt DATARØR."
 
-#: builtins.c:1618
+#: builtins.c:1619
 msgid ""
 "Execute commands based on pattern matching.\n"
 "    \n"
@@ -5016,21 +4787,16 @@ msgstr ""
 "    Avslutningsstatus:\n"
 "    Samme som sist kjørte kommando."
 
-#: builtins.c:1630
+#: builtins.c:1631
 msgid ""
 "Execute commands based on conditional.\n"
 "    \n"
-"    The `if COMMANDS' list is executed.  If its exit status is zero, then "
-"the\n"
-"    `then COMMANDS' list is executed.  Otherwise, each `elif COMMANDS' list "
-"is\n"
+"    The `if COMMANDS' list is executed.  If its exit status is zero, then the\n"
+"    `then COMMANDS' list is executed.  Otherwise, each `elif COMMANDS' list is\n"
 "    executed in turn, and if its exit status is zero, the corresponding\n"
-"    `then COMMANDS' list is executed and the if command completes.  "
-"Otherwise,\n"
-"    the `else COMMANDS' list is executed, if present.  The exit status of "
-"the\n"
-"    entire construct is the exit status of the last command executed, or "
-"zero\n"
+"    `then COMMANDS' list is executed and the if command completes.  Otherwise,\n"
+"    the `else COMMANDS' list is executed, if present.  The exit status of the\n"
+"    entire construct is the exit status of the last command executed, or zero\n"
 "    if no condition tested true.\n"
 "    \n"
 "    Exit Status:\n"
@@ -5040,53 +4806,51 @@ msgstr ""
 "    \n"
 "    Kjør lista «if KOMMANDOER». Hvis avslutningsstatus er null, kjøres\n"
 "    «then KOMMANDOER». Ellers kjøres hver «elif KOMMANDOER»-liste\n"
-"    etter tur. Hvis status er null ved sistnevnte, kjøres tilhørende «then "
-"KOMMANDOER»\n"
+"    etter tur. Hvis status er null ved sistnevnte, kjøres tilhørende «then KOMMANDOER»\n"
 "    og if-kommandoen avslutter. Ellers kjøres evt. lista «else KOMMANDOER».\n"
-"    Avslutningsstatus for hele betingelsesuttrykket er statuskoden fra sist "
-"kjørt kommando,\n"
+"    Avslutningsstatus for hele betingelsesuttrykket er statuskoden fra sist kjørt kommando,\n"
 "    eller null hvis ingen tilstand er sann.\n"
 "    \n"
 "    Avslutningsstatus:\n"
 "    Samme som sist kjørt kommando."
 
-#: builtins.c:1647
+#: builtins.c:1648
 msgid ""
 "Execute commands as long as a test succeeds.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `while' COMMANDS has an exit status of zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n"
+"    an exit status of zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
 "Kjør kommandoer så lenge en test lykkes.\n"
 "    \n"
-"    Utvid og kjør KOMMANDOER så lenge siste kommando i\n"
+"    Utvid og kjør KOMMANDOER-2 så lenge siste kommando i\n"
 "    «while» avslutter med null-status.\n"
 "    \n"
 "    Avslutningsstatus:\n"
-"    Samme som sist kjørte kommando."
+"    Returnerer statusen til den siste kommandoen som ble kjørt."
 
-#: builtins.c:1659
+#: builtins.c:1660
 msgid ""
 "Execute commands as long as a test does not succeed.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `until' COMMANDS has an exit status which is not zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n"
+"    an exit status which is not zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
 "Kjør kommandoer så lenge en test mislykkes.\n"
 "    \n"
-"    Utvid og kjør KOMMANDOER så lenge siste kommando i\n"
+"    Utvid og kjør KOMMANDOER-2 så lenge siste kommando i\n"
 "    «until» avslutter med en annen statuskode enn null.\n"
 "    \n"
 "    Avslutningsstatus:\n"
-"    Samme som sist kjørte kommando."
+"    Returnerer statusen til den siste kommandoen som ble kjørt."
 
-#: builtins.c:1671
+#: builtins.c:1672
 msgid ""
 "Create a coprocess named NAME.\n"
 "    \n"
@@ -5100,22 +4864,19 @@ msgid ""
 msgstr ""
 "Lag medprosess med valgt NAVN.\n"
 "    \n"
-"    Kjør valgt KOMMANDO synkront, med standard inn- og utdata for "
-"kommandoen\n"
-"    som er tilkoblet via et datarør til fildeskriptorer med indeks 0 og 1 i "
-"en tabellvariabel \n"
+"    Kjør valgt KOMMANDO synkront, med standard inn- og utdata for kommandoen\n"
+"    som er tilkoblet via et datarør til fildeskriptorer med indeks 0 og 1 i en tabellvariabel \n"
 "    med oppgitt NAVN i kjørende skall.\n"
 "\v    StandardNAVN er «COPROC».\n"
 "    \n"
 "    coproc avslutter med kode 0."
 
-#: builtins.c:1685
+#: builtins.c:1686
 msgid ""
 "Define shell function.\n"
 "    \n"
 "    Create a shell function named NAME.  When invoked as a simple command,\n"
-"    NAME runs COMMANDs in the calling shell's context.  When NAME is "
-"invoked,\n"
+"    NAME runs COMMANDs in the calling shell's context.  When NAME is invoked,\n"
 "    the arguments are passed to the function as $1...$n, and the function's\n"
 "    name is in $FUNCNAME.\n"
 "    \n"
@@ -5124,16 +4885,14 @@ msgid ""
 msgstr ""
 "Definer en skallfunksjon.\n"
 "    \n"
-"    Lag en skallfunksjon med valgt NAVN. NAVN kjører KOMMANDOer i gjeldende "
-"skallkontekst\n"
-"    når det kjøres som en enkel kommando, og argumenter videresendes til "
-"funksjonen som\n"
+"    Lag en skallfunksjon med valgt NAVN. NAVN kjører KOMMANDOer i gjeldende skallkontekst\n"
+"    når det kjøres som en enkel kommando, og argumenter videresendes til funksjonen som\n"
 "    $1…$n. Funksjonens navn ligger i $FUNCNAME.\n"
 "    \n"
 "    Avslutningsstatus:\n"
 "    Vellykket, med mindre valgt NAVN er skrivebeskyttet."
 
-#: builtins.c:1699
+#: builtins.c:1700
 msgid ""
 "Group commands as a unit.\n"
 "    \n"
@@ -5151,7 +4910,7 @@ msgstr ""
 "    Avslutningsstatus:\n"
 "    Samme som sist kjørt kommando."
 
-#: builtins.c:1711
+#: builtins.c:1712
 msgid ""
 "Resume job in foreground.\n"
 "    \n"
@@ -5169,14 +4928,12 @@ msgstr ""
 "    Tilsvarer argumentet «JOBBSPES» for kommandoen «fg». Gjenoppta\n"
 "    en jobb som venter eller kjører i bakgrunnen. «JOBBSPES» kan\n"
 "    enten være et jobbnavn eller -nummer. Bruk «&» etter JOBBSPES for å\n"
-"    legge jobben i bakgrunnen, som om jobbspesifikasjonen var et argument "
-"for «bg».\n"
+"    legge jobben i bakgrunnen, som om jobbspesifikasjonen var et argument for «bg».\n"
 "    \n"
 "    Avslutningsstatus:\n"
 "    Samme som statuskoden for gjenopptatt jobb."
 
-#: builtins.c:1726
-#, fuzzy
+#: builtins.c:1727
 msgid ""
 "Evaluate arithmetic expression.\n"
 "    \n"
@@ -5194,16 +4951,13 @@ msgstr ""
 "    Avslutningsstatus:\n"
 "    1 hvis UTTRYKK blir 0, og ellers 0."
 
-#: builtins.c:1738
+#: builtins.c:1739
 msgid ""
 "Execute conditional command.\n"
 "    \n"
-"    Returns a status of 0 or 1 depending on the evaluation of the "
-"conditional\n"
-"    expression EXPRESSION.  Expressions are composed of the same primaries "
-"used\n"
-"    by the `test' builtin, and may be combined using the following "
-"operators:\n"
+"    Returns a status of 0 or 1 depending on the evaluation of the conditional\n"
+"    expression EXPRESSION.  Expressions are composed of the same primaries used\n"
+"    by the `test' builtin, and may be combined using the following operators:\n"
 "    \n"
 "      ( EXPRESSION )\tReturns the value of EXPRESSION\n"
 "      ! EXPRESSION\t\tTrue if EXPRESSION is false; else false\n"
@@ -5229,10 +4983,8 @@ msgstr ""
 "    \n"
 "      ( UTTRYKK )\tViser verdien av UTTRYKK\n"
 "      ! UTTRYKK\t\tPositiv hvis UTTRYKK er usant, ellers negativ\n"
-"      UTTR1 && UTTR2\tPositiv hvis både UTTR1 og UTTR2 er sant, ellers "
-"negativ\n"
-"      UTTR1 || UTTR2\tPositiv hvis enten UTTR1 eller UTTR2 er sant, ellers "
-"negativ\n"
+"      UTTR1 && UTTR2\tPositiv hvis både UTTR1 og UTTR2 er sant, ellers negativ\n"
+"      UTTR1 || UTTR2\tPositiv hvis enten UTTR1 eller UTTR2 er sant, ellers negativ\n"
 "    \n"
 "    Ved bruk av «==» og «!=» brukes etterfølgende streng som\n"
 "    et mønster, og programmet utfører mønsterutlikning.\n"
@@ -5245,7 +4997,7 @@ msgstr ""
 "    Avslutningsstatus:\n"
 "    0 eller 1, avhengig av UTTRYKKets verdi."
 
-#: builtins.c:1764
+#: builtins.c:1765
 msgid ""
 "Common shell variable names and usage.\n"
 "    \n"
@@ -5305,11 +5057,9 @@ msgstr ""
 "    \t\tfor mapper som er brukt som argumenter for «cd».\n"
 "    GLOBIGNORE\tEn kolondelt liste over mønstre som beskriver filnavn\n"
 "    \t\tsom skal ignoreres av stinavn-utvidelse.\n"
-"    HISTFILE\tNavn på fil hvor kommandohistorikk for gjeldende bruker er "
-"lagret.\n"
+"    HISTFILE\tNavn på fil hvor kommandohistorikk for gjeldende bruker er lagret.\n"
 "    HISTFILESIZE\tMaksimalt antall linjer denne fila kan inneholde.\n"
-"    HISTSIZE\tMaksimalt antall historikklinjer et kjørende skall har tilgang "
-"til.\n"
+"    HISTSIZE\tMaksimalt antall historikklinjer et kjørende skall har tilgang til.\n"
 "    HOME\tFullstendig sti til gjeldende brukers hjemmemappe.\n"
 "    HOSTNAME\tNavn på gjeldende vert.\n"
 "    HOSTTYPE\tType prosessor denne versjonen av Bash kjører på.\n"
@@ -5335,8 +5085,7 @@ msgstr ""
 "    TIMEFORMAT\tUtdata-format for tidsstatistikk som vises av\n"
 "    \t\tdet reserverte ordet «time».\n"
 "    auto_resume\tEt kommandoord som dukker opp alene på en linje\n"
-"    \t\tblir kontrollert mot lista over ventende jobber. Hvis kommandoen "
-"finnes\n"
+"    \t\tblir kontrollert mot lista over ventende jobber. Hvis kommandoen finnes\n"
 "    \t\ti lista, flyttes den til forgrunnen.\n"
 "    \t\tVerdien «exact» betyr at kommandoen må være helt lik\n"
 "    \t\tet kommandonavn i lista over ventende jobber.\n"
@@ -5350,7 +5099,7 @@ msgstr ""
 "    HISTIGNORE\tEn kolondelt liste over mønstre som bestemmer\n"
 "    \t\thvilke kommandoer som skal lagres i historikklista.\n"
 
-#: builtins.c:1821
+#: builtins.c:1822
 msgid ""
 "Add directories to stack.\n"
 "    \n"
@@ -5406,7 +5155,7 @@ msgstr ""
 "    Vellykket, med mindre et ugyldig argument er brukt eller\n"
 "    mappebytte mislykkes."
 
-#: builtins.c:1855
+#: builtins.c:1856
 msgid ""
 "Remove directories from stack.\n"
 "    \n"
@@ -5435,8 +5184,7 @@ msgstr ""
 "Fjern mapper fra stabelen.\n"
 "    \n"
 "    Fjern oppføringer fra mappestabelen. Hvis ingen argumenter er gitt,\n"
-"    fjernes øverste mappe fra stabelen, og tar i bruk ny toppmappe som "
-"arbeidsmappe.\n"
+"    fjernes øverste mappe fra stabelen, og tar i bruk ny toppmappe som arbeidsmappe.\n"
 "    \n"
 "    Valg:\n"
 "      -n\tIkke bytt mappe når mapper fjernes fra stabelen\n"
@@ -5447,8 +5195,7 @@ msgstr ""
 "       F.eks.: «popd +0» fjerner første mappe, og «popd +1» mappe nr. 2.\n"
 "    \n"
 "      -N\tFjern N-te mappe (talt fra null til høyre, etter «dirs»).\n"
-"       F.eks.: «popd -0» fjerner siste mappe, og «popd -1» nest siste "
-"mappe.\n"
+"       F.eks.: «popd -0» fjerner siste mappe, og «popd -1» nest siste mappe.\n"
 "    \n"
 "    Bruk kommandoen «dirs» for å vise mappestabelen.\n"
 "    \n"
@@ -5456,7 +5203,7 @@ msgstr ""
 "    Vellykket, med mindre et ugyldig argument er brukt eller\n"
 "    mappebytte mislykkes."
 
-#: builtins.c:1885
+#: builtins.c:1886
 msgid ""
 "Display directory stack.\n"
 "    \n"
@@ -5502,7 +5249,7 @@ msgstr ""
 "    Avslutningsstatus:\n"
 "    Vellykket, med mindre bruker tar et ugyldig valg eller det oppstår feil."
 
-#: builtins.c:1916
+#: builtins.c:1917
 msgid ""
 "Set and unset shell options.\n"
 "    \n"
@@ -5523,10 +5270,8 @@ msgid ""
 msgstr ""
 "Juster og tilbakestill skallvalg.\n"
 "    \n"
-"    Endre innstilling for hvert VALGNAVN. Hvis ingen valg/argumenter er "
-"brukt,\n"
-"    skriver programmet ut alle oppgitte VALGNAVN og viser hvorvidt de har en "
-"verdi.\n"
+"    Endre innstilling for hvert VALGNAVN. Hvis ingen valg/argumenter er brukt,\n"
+"    skriver programmet ut alle oppgitte VALGNAVN og viser hvorvidt de har en verdi.\n"
 "    Hvis ingen VALGNAVN er oppgitt, skriver programmet ut alle skallvalg.\n"
 "    \n"
 "    Valg:\n"
@@ -5540,7 +5285,7 @@ msgstr ""
 "    Vellykket hvis VALGNAVN er slått på, og mislykket hvis enten bruker \n"
 "    tar et ugyldig valg eller VALGNAVN er slått av."
 
-#: builtins.c:1937
+#: builtins.c:1938
 msgid ""
 "Formats and prints ARGUMENTS under control of the FORMAT.\n"
 "    \n"
@@ -5548,34 +5293,29 @@ msgid ""
 "      -v var\tassign the output to shell variable VAR rather than\n"
 "    \t\tdisplay it on the standard output\n"
 "    \n"
-"    FORMAT is a character string which contains three types of objects: "
-"plain\n"
-"    characters, which are simply copied to standard output; character "
-"escape\n"
+"    FORMAT is a character string which contains three types of objects: plain\n"
+"    characters, which are simply copied to standard output; character escape\n"
 "    sequences, which are converted and copied to the standard output; and\n"
-"    format specifications, each of which causes printing of the next "
-"successive\n"
+"    format specifications, each of which causes printing of the next successive\n"
 "    argument.\n"
 "    \n"
-"    In addition to the standard format specifications described in "
-"printf(1),\n"
+"    In addition to the standard format specifications described in printf(1),\n"
 "    printf interprets:\n"
 "    \n"
 "      %b\texpand backslash escape sequences in the corresponding argument\n"
 "      %q\tquote the argument in a way that can be reused as shell input\n"
-"      %(fmt)T\toutput the date-time string resulting from using FMT as a "
-"format\n"
+"      %Q\tlike %q, but apply any precision to the unquoted argument before\n"
+"    \t\tquoting\n"
+"      %(fmt)T\toutput the date-time string resulting from using FMT as a format\n"
 "    \t        string for strftime(3)\n"
 "    \n"
 "    The format is re-used as necessary to consume all of the arguments.  If\n"
 "    there are fewer arguments than the format requires,  extra format\n"
-"    specifications behave as if a zero value or null string, as "
-"appropriate,\n"
+"    specifications behave as if a zero value or null string, as appropriate,\n"
 "    had been supplied.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success unless an invalid option is given or a write or "
-"assignment\n"
+"    Returns success unless an invalid option is given or a write or assignment\n"
 "    error occurs."
 msgstr ""
 "Formaterer og skriver ut ARGUMENTER på FORMATets premisser.\n"
@@ -5589,35 +5329,29 @@ msgstr ""
 "    - skiftetegn (som konverteres og kopieres til standardutdata), og\n"
 "    - formatspesifikasjoner (som skriver ut påfølgende argument).\n"
 "    \n"
-"    Printf tolker følgende standard-formatspes. i tillegg til de som "
-"står     beskrevet i printf(1):\n"
+"    Printf tolker følgende standard-formatspes. i tillegg til de som står     beskrevet i printf(1):\n"
 "    \n"
 "      %b\tutvid omvendt skråstrek-skiftesekvenser i gjeldende argument\n"
-"      %q\tgi argumentet anførselstegn slik at det kan brukes som skall-"
-"inndata\n"
-"      %(fmt)T skriv ut «date-time»-streng etter bruk av FMT som "
-"formatstreng\n"
+"      %q\tgi argumentet anførselstegn slik at det kan brukes som skall-inndata\n"
+"      %Q\tsom %q, men bruk hvilken som helst presisjon på argumentet uten anførselstegn før\n"
+"     \t\tsitering\n"
+"      %(fmt)T skriv ut «date-time»-streng etter bruk av FMT som formatstreng\n"
 "            med strftime(3)\n"
 "    \n"
-"    Formatet gjenbrukes etter nødvendighet for å bruke opp alle "
-"argumentene.\n"
-"    Hvis det finnes færre argumenter enn formatet krever, oppfører "
-"overflødige\n"
+"    Formatet gjenbrukes etter nødvendighet for å bruke opp alle argumentene.\n"
+"    Hvis det finnes færre argumenter enn formatet krever, oppfører overflødige\n"
 "    formatstrenger seg som om de var 0-verdier eller null-strenger.\n"
 "    \n"
 "    Avslutningsstatus:\n"
 "    Vellykket, med mindre bruker tar et ugyldig valg eller det oppstår en\n"
 "    skrive- eller tidelingsfeil."
 
-#: builtins.c:1971
-#, fuzzy
+#: builtins.c:1974
 msgid ""
 "Specify how arguments are to be completed by Readline.\n"
 "    \n"
-"    For each NAME, specify how arguments are to be completed.  If no "
-"options\n"
-"    are supplied, existing completion specifications are printed in a way "
-"that\n"
+"    For each NAME, specify how arguments are to be completed.  If no options\n"
+"    are supplied, existing completion specifications are printed in a way that\n"
 "    allows them to be reused as input.\n"
 "    \n"
 "    Options:\n"
@@ -5632,10 +5366,8 @@ msgid ""
 "    \t\tcommand) word\n"
 "    \n"
 "    When completion is attempted, the actions are applied in the order the\n"
-"    uppercase-letter options are listed above. If multiple options are "
-"supplied,\n"
-"    the -D option takes precedence over -E, and both take precedence over -"
-"I.\n"
+"    uppercase-letter options are listed above. If multiple options are supplied,\n"
+"    the -D option takes precedence over -E, and both take precedence over -I.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns success unless an invalid option is supplied or an error occurs."
@@ -5643,13 +5375,11 @@ msgstr ""
 "Velg hvordan argumenter skal fullføres av Readline.\n"
 "    \n"
 "    Velg hvordan argumenter skal fullføres per NAVN.\n"
-"    Hvis brukeren ikke tar noen valg, blir gjeldende "
-"fullføringsspesifikasjoner\n"
+"    Hvis brukeren ikke tar noen valg, blir gjeldende fullføringsspesifikasjoner\n"
 "    skrevet ut i et format som egner seg til gjenbruk.\n"
 "    \n"
 "    Valg:\n"
-"      -p\tskriv ut gjeldende fullføringsoppsett i et gjenbrukbart format "
-"(standard)\n"
+"      -p\tskriv ut gjeldende fullføringsoppsett i et gjenbrukbart format (standard)\n"
 "      -r\tfjern en fullføringsspesifikasjon per NAVN\n"
 "    \t(eller fra alle spesifikasjoner hvis ingen NAVN er valgt)\n"
 "      -D\tbruk fullføringer og handlinger som standard for kommandoer uten\n"
@@ -5664,13 +5394,12 @@ msgstr ""
 "    Avslutningsstatus:\n"
 "    Vellykket, med mindre bruker tar et ugyldig valg eller det oppstår feil."
 
-#: builtins.c:2001
+#: builtins.c:2004
 msgid ""
 "Display possible completions depending on the options.\n"
 "    \n"
 "    Intended to be used from within a shell function generating possible\n"
-"    completions.  If the optional WORD argument is supplied, matches "
-"against\n"
+"    completions.  If the optional WORD argument is supplied, matches against\n"
 "    WORD are generated.\n"
 "    \n"
 "    Exit Status:\n"
@@ -5685,16 +5414,13 @@ msgstr ""
 "    Avslutningsstatus:\n"
 "    Vellykket, med mindre bruker tar et ugyldig valg eller det oppstår feil."
 
-#: builtins.c:2016
+#: builtins.c:2019
 msgid ""
 "Modify or display completion options.\n"
 "    \n"
-"    Modify the completion options for each NAME, or, if no NAMEs are "
-"supplied,\n"
-"    the completion currently being executed.  If no OPTIONs are given, "
-"print\n"
-"    the completion options for each NAME or the current completion "
-"specification.\n"
+"    Modify the completion options for each NAME, or, if no NAMEs are supplied,\n"
+"    the completion currently being executed.  If no OPTIONs are given, print\n"
+"    the completion options for each NAME or the current completion specification.\n"
 "    \n"
 "    Options:\n"
 "    \t-o option\tSet completion option OPTION for each NAME\n"
@@ -5718,10 +5444,8 @@ msgid ""
 msgstr ""
 "Endre eller vis fullføringsvalg.\n"
 "    \n"
-"    Endre fullføringsvalg per NAVN, eller kjørende fullføringsprosess hvis "
-"ingen\n"
-"    NAVN er valgt. Hvis ingen VALG er brukt, skriv enten ut fullføringsvalg "
-"per NAVN,\n"
+"    Endre fullføringsvalg per NAVN, eller kjørende fullføringsprosess hvis ingen\n"
+"    NAVN er valgt. Hvis ingen VALG er brukt, skriv enten ut fullføringsvalg per NAVN,\n"
 "    eller gjeldende fullføringsoppsett.\n"
 "    \n"
 "    Valg:\n"
@@ -5734,8 +5458,7 @@ msgstr ""
 "    \n"
 "    Argumenter:\n"
 "    \n"
-"    Hvert NAVN henviser til en kommando som må ha en "
-"fullføringsspesifikasjon\n"
+"    Hvert NAVN henviser til en kommando som må ha en fullføringsspesifikasjon\n"
 "    definert med den innebyde kommandoen «complete». Hvis ingen NAVN\n"
 "    er valgt, må compopt brukes av en funksjon som genererer fullføringer.\n"
 "    Valgene for den aktuelle fullføringsgeneratoren blir i så fall endret.\n"
@@ -5744,26 +5467,21 @@ msgstr ""
 "    Vellykket, med mindre bruker tar et ugyldig valg eller NAVN\n"
 "    mangler fullføringsoppsett."
 
-#: builtins.c:2047
+#: builtins.c:2050
 msgid ""
 "Read lines from the standard input into an indexed array variable.\n"
 "    \n"
-"    Read lines from the standard input into the indexed array variable "
-"ARRAY, or\n"
-"    from file descriptor FD if the -u option is supplied.  The variable "
-"MAPFILE\n"
+"    Read lines from the standard input into the indexed array variable ARRAY, or\n"
+"    from file descriptor FD if the -u option is supplied.  The variable MAPFILE\n"
 "    is the default ARRAY.\n"
 "    \n"
 "    Options:\n"
 "      -d delim\tUse DELIM to terminate lines, instead of newline\n"
-"      -n count\tCopy at most COUNT lines.  If COUNT is 0, all lines are "
-"copied\n"
-"      -O origin\tBegin assigning to ARRAY at index ORIGIN.  The default "
-"index is 0\n"
+"      -n count\tCopy at most COUNT lines.  If COUNT is 0, all lines are copied\n"
+"      -O origin\tBegin assigning to ARRAY at index ORIGIN.  The default index is 0\n"
 "      -s count\tDiscard the first COUNT lines read\n"
 "      -t\tRemove a trailing DELIM from each line read (default newline)\n"
-"      -u fd\tRead lines from file descriptor FD instead of the standard "
-"input\n"
+"      -u fd\tRead lines from file descriptor FD instead of the standard input\n"
 "      -C callback\tEvaluate CALLBACK each time QUANTUM lines are read\n"
 "      -c quantum\tSpecify the number of lines read between each call to\n"
 "    \t\t\tCALLBACK\n"
@@ -5776,54 +5494,43 @@ msgid ""
 "    element to be assigned and the line to be assigned to that element\n"
 "    as additional arguments.\n"
 "    \n"
-"    If not supplied with an explicit origin, mapfile will clear ARRAY "
-"before\n"
+"    If not supplied with an explicit origin, mapfile will clear ARRAY before\n"
 "    assigning to it.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success unless an invalid option is given or ARRAY is readonly "
-"or\n"
+"    Returns success unless an invalid option is given or ARRAY is readonly or\n"
 "    not an indexed array."
 msgstr ""
 "Legg linjer fra standard inndata i en indeksert tabellvariabel.\n"
 "    \n"
-"    Legg linjer fra standard inndata i indeksert tabellvariabel TABELL, "
-"eller\n"
+"    Legg linjer fra standard inndata i indeksert tabellvariabel TABELL, eller\n"
 "    fra fildeskriptor FD ved bruk av «-u». Variabelen MAPFILE er\n"
 "    standard TABELL.\n"
 "    \n"
 "    Valg:\n"
-"      -d skill\tBruk SKILLetegn til å avslutte linjer (i stedet for "
-"linjeskift)\n"
-"      -n antall\tIkke kopier flere enn valgt ANTALL linjer. Hvis ANTALL er "
-"0, kopieres alle linjer.\n"
-"      -O oppr\tTildel til TABELL ved indeks-OPPRinnelse. Standard indeks er "
-"0.\n"
+"      -d skill\tBruk SKILLetegn til å avslutte linjer (i stedet for linjeskift)\n"
+"      -n antall\tIkke kopier flere enn valgt ANTALL linjer. Hvis ANTALL er 0, kopieres alle linjer.\n"
+"      -O oppr\tTildel til TABELL ved indeks-OPPRinnelse. Standard indeks er 0.\n"
 "      -s antall \tForkast valgt ANTALL linjer i starten.\n"
 "      -t\t\tFjern etterfølgende linjeskift fra hver lest linje.\n"
-"      -u fd\t\tLes linjer fra fildeskriptor FD i stedet for standard "
-"inndata.\n"
-"      -C tilbakekall\tVurder TILBAKEKALL hver gang valgt ANTALL linjer er "
-"lest.\n"
-"      -c antall\tVelg antall linjer som skal leses mellom hvert "
-"TILBAKEKALL.\n"
+"      -u fd\t\tLes linjer fra fildeskriptor FD i stedet for standard inndata.\n"
+"      -C tilbakekall\tVurder TILBAKEKALL hver gang valgt ANTALL linjer er lest.\n"
+"      -c antall\tVelg antall linjer som skal leses mellom hvert TILBAKEKALL.\n"
 "    \n"
 "    Argumenter:\n"
 "      ARRAY\t\tTabellvariabel-navn som skal brukes i fildata.\n"
 "    \n"
 "    Hvis «-C» er valgt men ikke «-c», brukes standardantallet 5000.  Når\n"
-"    TILBAKEKALL vurderes, argumenteres det i tillegg med indeks av neste "
-"tabellelement\n"
+"    TILBAKEKALL vurderes, argumenteres det i tillegg med indeks av neste tabellelement\n"
 "    samt linjenummeret som skal tildeles aktuelt element.\n"
 "    \n"
-"    Hvis ingen eksplisitt opprinnelse er gitt, tømmes TABELL før den får "
-"tildelt noe.\n"
+"    Hvis ingen eksplisitt opprinnelse er gitt, tømmes TABELL før den får tildelt noe.\n"
 "    \n"
 "    Avslutningsstatus:\n"
 "    Vellykket, med mindre bruker tar et ugyldig valg eller TABELL enten er\n"
 "    skrivebeskyttet eller en ikke-indeksert tabell."
 
-#: builtins.c:2083
+#: builtins.c:2086
 msgid ""
 "Read lines from a file into an array variable.\n"
 "    \n"
@@ -5833,6 +5540,9 @@ msgstr ""
 "    \n"
 "    Dette er synonymt med «mapfile»."
 
+#~ msgid "%s: invalid associative array key"
+#~ msgstr "%s: ugyldig nøkkel for assosiativ tabell"
+
 #~ msgid ""
 #~ "Returns the context of the current subroutine call.\n"
 #~ "    \n"
index 51b3d4f61cdee6f82a1418fb90721faba8f101c2..86de738c33c04f42f861ea5bc5dbb6f617999e8f 100644 (file)
Binary files a/po/nl.gmo and b/po/nl.gmo differ
index dcc82d95f6ee4e369695261fce842d74f9459dad..f80f24709385550c87b8bf2eeb464ed9373a52be 100644 (file)
--- a/po/nl.po
+++ b/po/nl.po
@@ -1,5 +1,5 @@
 # Dutch translations for GNU bash.
-# Copyright (C) 2020 Free Software Foundation, Inc.
+# Copyright (C) 2022 Free Software Foundation, Inc.
 # This file is distributed under the same license as the bash package.
 #
 # «Lernfähiger Software! Ich lach mich kaputt!»
 # om stilstaan en niet om finale opgave.  Een alternatieve vertaling
 # zou dus "Stilstand" kunnen zijn.
 #
-# Benno Schulenberg <benno@vertaalt.nl>, 2006, 2008, 2010, 2011, 2013, 2014.
-# Benno Schulenberg <benno@vertaalt.nl>, 2015, 2016, 2019, 2020.
-# Erwin Poeze <erwin.poeze@gmail.com>, 2009.
-# Julie Vermeersch <julie@lambda1.be>, 2004.
 # Erick Branderhorst <branderh@iaehv.nl>, 1996.
+# Julie Vermeersch <julie@lambda1.be>, 2004.
+# Erwin Poeze <erwin.poeze@gmail.com>, 2009.
+# Benno Schulenberg <benno@vertaalt.nl>, 2006, 2008, 2010, 2011, 2013, 2014.
+# Benno Schulenberg <benno@vertaalt.nl>, 2015, 2016, 2019, 2020, 2022.
 msgid ""
 msgstr ""
-"Project-Id-Version: bash-5.1\n"
+"Project-Id-Version: bash-5.2-rc1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-11-28 12:51-0500\n"
-"PO-Revision-Date: 2020-12-16 09:57+0100\n"
+"POT-Creation-Date: 2022-01-11 14:50-0500\n"
+"PO-Revision-Date: 2022-06-23 10:18+0200\n"
 "Last-Translator: Benno Schulenberg <vertaling@coevern.nl>\n"
 "Language-Team: Dutch <vertaling@vrijschrift.org>\n"
 "Language: nl\n"
@@ -41,57 +41,52 @@ msgstr ""
 msgid "bad array subscript"
 msgstr "ongeldige array-index"
 
-#: arrayfunc.c:421 builtins/declare.def:638 variables.c:2274 variables.c:2300
-#: variables.c:3133
+#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268
+#: variables.c:3101
 #, c-format
 msgid "%s: removing nameref attribute"
 msgstr "%s: 'nameref'-eigenschap wordt verwijderd"
 
-#: arrayfunc.c:446 builtins/declare.def:851
+#: arrayfunc.c:496 builtins/declare.def:868
 #, c-format
 msgid "%s: cannot convert indexed to associative array"
 msgstr "%s: kan geïndexeerd array niet omzetten naar associatief array"
 
-#: arrayfunc.c:700
-#, c-format
-msgid "%s: invalid associative array key"
-msgstr "%s: ongeldige sleutel voor associatief array"
-
-#: arrayfunc.c:702
+#: arrayfunc.c:777
 #, c-format
 msgid "%s: cannot assign to non-numeric index"
 msgstr "%s: niet-numerieke index is niet mogelijk"
 
-#: arrayfunc.c:747
+#: arrayfunc.c:822
 #, c-format
 msgid "%s: %s: must use subscript when assigning associative array"
 msgstr "%s: %s: een index is nodig bij toekenning aan associatief array"
 
-#: bashhist.c:452
+#: bashhist.c:455
 #, c-format
 msgid "%s: cannot create: %s"
 msgstr "Kan %s niet aanmaken: %s"
 
-#: bashline.c:4310
+#: bashline.c:4479
 msgid "bash_execute_unix_command: cannot find keymap for command"
 msgstr "bash_execute_unix_command(): kan voor opdracht geen toetsenkaart vinden"
 
-#: bashline.c:4459
+#: bashline.c:4637
 #, c-format
 msgid "%s: first non-whitespace character is not `\"'"
 msgstr "%s: eerste teken dat geen witruimte is is niet '\"'"
 
-#: bashline.c:4488
+#: bashline.c:4666
 #, c-format
 msgid "no closing `%c' in %s"
 msgstr "geen sluit-'%c' in %s"
 
-#: bashline.c:4519
+#: bashline.c:4697
 #, c-format
 msgid "%s: missing colon separator"
 msgstr "%s: ontbrekend scheidingsteken (dubbele punt)"
 
-#: bashline.c:4555
+#: bashline.c:4733
 #, c-format
 msgid "`%s': cannot unbind in command keymap"
 msgstr "Kan '%s' niet losmaken in toetsenkaart"
@@ -111,7 +106,7 @@ msgstr "accoladevervanging: onvoldoende geheugen beschikbaar voor %u elementen"
 msgid "brace expansion: failed to allocate memory for `%s'"
 msgstr "accoladevervanging: onvoldoende geheugen beschikbaar voor '%s'"
 
-#: builtins/alias.def:131 variables.c:1844
+#: builtins/alias.def:131 variables.c:1817
 #, c-format
 msgid "`%s': invalid alias name"
 msgstr "'%s': ongeldige naam voor alias"
@@ -182,7 +177,7 @@ msgstr ""
 msgid "HOME not set"
 msgstr "HOME is niet gedefinieerd"
 
-#: builtins/cd.def:335 builtins/common.c:161 test.c:901
+#: builtins/cd.def:335 builtins/common.c:161 test.c:916
 msgid "too many arguments"
 msgstr "te veel argumenten"
 
@@ -209,7 +204,7 @@ msgstr "waarschuwing: "
 msgid "%s: usage: "
 msgstr "%s: Gebruik:  "
 
-#: builtins/common.c:193 shell.c:516 shell.c:844
+#: builtins/common.c:193 shell.c:524 shell.c:866
 #, c-format
 msgid "%s: option requires an argument"
 msgstr "%s: optie vereist een argument"
@@ -224,7 +219,7 @@ msgstr "%s: vereist een numeriek argument"
 msgid "%s: not found"
 msgstr "%s: niet gevonden"
 
-#: builtins/common.c:216 shell.c:857
+#: builtins/common.c:216 shell.c:879
 #, c-format
 msgid "%s: invalid option"
 msgstr "%s: ongeldige optie"
@@ -234,7 +229,7 @@ msgstr "%s: ongeldige optie"
 msgid "%s: invalid option name"
 msgstr "%s: ongeldige optienaam"
 
-#: builtins/common.c:230 execute_cmd.c:2373 general.c:368 general.c:373
+#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373
 #, c-format
 msgid "`%s': not a valid identifier"
 msgstr "'%s': is geen geldige naam"
@@ -247,7 +242,7 @@ msgstr "ongeldig octaal getal"
 msgid "invalid hex number"
 msgstr "ongeldig hexadecimaal getal"
 
-#: builtins/common.c:244 expr.c:1569
+#: builtins/common.c:244 expr.c:1574
 msgid "invalid number"
 msgstr "ongeldig getal"
 
@@ -261,88 +256,93 @@ msgstr "%s: ongeldige signaalaanduiding"
 msgid "`%s': not a pid or valid job spec"
 msgstr "'%s': is geen PID en geen geldige taakaanduiding"
 
-#: builtins/common.c:266 error.c:510
+#: builtins/common.c:266 error.c:536
 #, c-format
 msgid "%s: readonly variable"
 msgstr "%s: is een alleen-lezen variabele"
 
-#: builtins/common.c:274
+#: builtins/common.c:273
+#, c-format
+msgid "%s: cannot assign"
+msgstr "%s: kan niet toewijzen"
+
+#: builtins/common.c:281
 #, c-format
 msgid "%s: %s out of range"
 msgstr "%s: %s valt buiten bereik"
 
-#: builtins/common.c:274 builtins/common.c:276
+#: builtins/common.c:281 builtins/common.c:283
 msgid "argument"
 msgstr "argument"
 
-#: builtins/common.c:276
+#: builtins/common.c:283
 #, c-format
 msgid "%s out of range"
 msgstr "%s valt buiten bereik"
 
-#: builtins/common.c:284
+#: builtins/common.c:291
 #, c-format
 msgid "%s: no such job"
 msgstr "%s: taak bestaat niet"
 
-#: builtins/common.c:292
+#: builtins/common.c:299
 #, c-format
 msgid "%s: no job control"
 msgstr "%s: geen taakbesturing"
 
-#: builtins/common.c:294
+#: builtins/common.c:301
 msgid "no job control"
 msgstr "geen taakbesturing"
 
-#: builtins/common.c:304
+#: builtins/common.c:311
 #, c-format
 msgid "%s: restricted"
 msgstr "%s: beperkte modus"
 
-#: builtins/common.c:306
+#: builtins/common.c:313
 msgid "restricted"
 msgstr "beperkte modus"
 
-#: builtins/common.c:314
+#: builtins/common.c:321
 #, c-format
 msgid "%s: not a shell builtin"
 msgstr "%s: is geen ingebouwde opdracht van de shell"
 
-#: builtins/common.c:323
+#: builtins/common.c:330
 #, c-format
 msgid "write error: %s"
 msgstr "schrijffout: %s"
 
-#: builtins/common.c:331
+#: builtins/common.c:338
 #, c-format
 msgid "error setting terminal attributes: %s"
 msgstr "fout tijdens instellen van terminaleigenschappen: %s"
 
-#: builtins/common.c:333
+#: builtins/common.c:340
 #, c-format
 msgid "error getting terminal attributes: %s"
 msgstr "fout tijdens verkrijgen van terminaleigenschappen: %s"
 
-#: builtins/common.c:635
+#: builtins/common.c:642
 #, c-format
 msgid "%s: error retrieving current directory: %s: %s\n"
 msgstr "%s: fout tijdens bepalen van huidige map: %s: %s\n"
 
-#: builtins/common.c:701 builtins/common.c:703
+#: builtins/common.c:708 builtins/common.c:710
 #, c-format
 msgid "%s: ambiguous job spec"
 msgstr "%s: taakaanduiding is niet eenduidig"
 
-#: builtins/common.c:964
+#: builtins/common.c:971
 msgid "help not available in this version"
 msgstr "hulp is niet beschikbaar in deze versie"
 
-#: builtins/common.c:1008 builtins/set.def:953 variables.c:3839
+#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825
 #, c-format
 msgid "%s: cannot unset: readonly %s"
 msgstr "Kan '%s' niet verwijderen: %s is alleen-lezen"
 
-#: builtins/common.c:1013 builtins/set.def:932 variables.c:3844
+#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830
 #, c-format
 msgid "%s: cannot unset"
 msgstr "Kan '%s' niet verwijderen"
@@ -352,108 +352,108 @@ msgstr "Kan '%s' niet verwijderen"
 msgid "%s: invalid action name"
 msgstr "%s: ongeldige actienaam"
 
-#: builtins/complete.def:486 builtins/complete.def:634
-#: builtins/complete.def:865
+#: builtins/complete.def:486 builtins/complete.def:642
+#: builtins/complete.def:873
 #, c-format
 msgid "%s: no completion specification"
 msgstr "%s: is geen completerings-aanduiding"
 
-#: builtins/complete.def:688
+#: builtins/complete.def:696
 msgid "warning: -F option may not work as you expect"
 msgstr "waarschuwing: optie -F functioneert mogelijk niet zoals verwacht"
 
-#: builtins/complete.def:690
+#: builtins/complete.def:698
 msgid "warning: -C option may not work as you expect"
 msgstr "waarschuwing: optie -C functioneert mogelijk niet zoals verwacht"
 
-#: builtins/complete.def:838
+#: builtins/complete.def:846
 msgid "not currently executing completion function"
 msgstr "er wordt momenteel geen completeringsfunctie uitgevoerd"
 
-#: builtins/declare.def:134
+#: builtins/declare.def:137
 msgid "can only be used in a function"
 msgstr "kan alleen worden gebruikt binnen een functie"
 
-#: builtins/declare.def:363 builtins/declare.def:756
+#: builtins/declare.def:437
+msgid "cannot use `-f' to make functions"
+msgstr "'-f' kan niet gebruikt worden om een functie te definiëren"
+
+#: builtins/declare.def:464 execute_cmd.c:6132
+#, c-format
+msgid "%s: readonly function"
+msgstr "%s: is een alleen-lezen functie"
+
+#: builtins/declare.def:521 builtins/declare.def:804
 #, c-format
 msgid "%s: reference variable cannot be an array"
 msgstr "%s: verwijzingsvariabele mag geen array zijn"
 
-#: builtins/declare.def:374 variables.c:3385
+#: builtins/declare.def:532 variables.c:3359
 #, c-format
 msgid "%s: nameref variable self references not allowed"
 msgstr "%s: zelfverwijzing door naamsverwijzingsvariabele is niet toegestaan"
 
-#: builtins/declare.def:379 variables.c:2104 variables.c:3304 variables.c:3312
-#: variables.c:3382
+#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286
+#: variables.c:3356
 #, c-format
 msgid "%s: circular name reference"
 msgstr "%s: circulaire naamsverwijzing"
 
-#: builtins/declare.def:384 builtins/declare.def:762 builtins/declare.def:773
+#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820
 #, c-format
 msgid "`%s': invalid variable name for name reference"
 msgstr "'%s': ongeldige variabelenaam voor naamsverwijzing"
 
-#: builtins/declare.def:514
-msgid "cannot use `-f' to make functions"
-msgstr "'-f' kan niet gebruikt worden om een functie te definiëren"
-
-#: builtins/declare.def:526 execute_cmd.c:5986
-#, c-format
-msgid "%s: readonly function"
-msgstr "%s: is een alleen-lezen functie"
-
-#: builtins/declare.def:824
-#, c-format
-msgid "%s: quoted compound array assignment deprecated"
-msgstr "%s: aangehaalde samengesteld-array-toekenning is verouderd"
-
-#: builtins/declare.def:838
+#: builtins/declare.def:856
 #, c-format
 msgid "%s: cannot destroy array variables in this way"
 msgstr "%s: kan array-variabelen niet op deze manier verwijderen"
 
-#: builtins/declare.def:845 builtins/read.def:815
+#: builtins/declare.def:862 builtins/read.def:887
 #, c-format
 msgid "%s: cannot convert associative to indexed array"
 msgstr "%s: kan associatief array niet omzetten naar geïndexeerd array"
 
-#: builtins/enable.def:143 builtins/enable.def:151
+#: builtins/declare.def:891
+#, c-format
+msgid "%s: quoted compound array assignment deprecated"
+msgstr "%s: aangehaalde samengesteld-array-toekenning is verouderd"
+
+#: builtins/enable.def:145 builtins/enable.def:153
 msgid "dynamic loading not available"
 msgstr "dynamisch-laden is niet beschikbaar"
 
-#: builtins/enable.def:343
+#: builtins/enable.def:376
 #, c-format
 msgid "cannot open shared object %s: %s"
 msgstr "kan gedeeld object %s niet openen: %s"
 
-#: builtins/enable.def:371
+#: builtins/enable.def:405
 #, c-format
 msgid "cannot find %s in shared object %s: %s"
 msgstr "kan %s niet vinden in gedeeld object %s: %s"
 
-#: builtins/enable.def:388
+#: builtins/enable.def:422
 #, c-format
 msgid "%s: dynamic builtin already loaded"
 msgstr "%s: dynamische ingebouwde functie is reeds geladen"
 
-#: builtins/enable.def:392
+#: builtins/enable.def:426
 #, c-format
 msgid "load function for %s returns failure (%d): not loaded"
 msgstr "laadfunctie voor %s geeft foutcode (%d): is niet geladen"
 
-#: builtins/enable.def:517
+#: builtins/enable.def:551
 #, c-format
 msgid "%s: not dynamically loaded"
 msgstr "%s: is niet dynamisch geladen"
 
-#: builtins/enable.def:543
+#: builtins/enable.def:577
 #, c-format
 msgid "%s: cannot delete: %s"
 msgstr "Kan %s niet verwijderen: %s"
 
-#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5818
+#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959
 #, c-format
 msgid "%s: is a directory"
 msgstr "%s: is een map"
@@ -468,7 +468,7 @@ msgstr "%s: is geen normaal bestand"
 msgid "%s: file is too large"
 msgstr "%s: bestand is te groot"
 
-#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1647
+#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673
 #, c-format
 msgid "%s: cannot execute binary file"
 msgstr "%s: kan binair bestand niet uitvoeren"
@@ -565,12 +565,12 @@ msgstr ""
 "Er is geen hulptekst voor '%s'.\n"
 "Probeer 'help help' of 'man -k %s' of 'info %s'."
 
-#: builtins/help.def:224
+#: builtins/help.def:223
 #, c-format
 msgid "%s: cannot open: %s"
 msgstr "Kan %s niet openen: %s"
 
-#: builtins/help.def:524
+#: builtins/help.def:523
 #, c-format
 msgid ""
 "These shell commands are defined internally.  Type `help' to see this list.\n"
@@ -590,21 +590,21 @@ msgstr ""
 "(Een sterretje (*) naast een naam betekent dat de functie uitgeschakeld is.)\n"
 "\n"
 
-#: builtins/history.def:155
+#: builtins/history.def:159
 msgid "cannot use more than one of -anrw"
 msgstr "slechts één van '-a', '-n', '-r' of '-w' is mogelijk"
 
-#: builtins/history.def:188 builtins/history.def:198 builtins/history.def:213
-#: builtins/history.def:230 builtins/history.def:242 builtins/history.def:249
+#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215
+#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247
 msgid "history position"
 msgstr "geschiedenispositie"
 
-#: builtins/history.def:340
+#: builtins/history.def:338
 #, c-format
 msgid "%s: invalid timestamp"
 msgstr "%s: ongeldig tijdsstempel"
 
-#: builtins/history.def:451
+#: builtins/history.def:449
 #, c-format
 msgid "%s: history expansion failed"
 msgstr "%s: geschiedenisexpansie is mislukt"
@@ -627,80 +627,80 @@ msgstr "%s: argumenten moeten proces-IDs of taak-IDs zijn"
 msgid "Unknown error"
 msgstr "Onbekende fout"
 
-#: builtins/let.def:97 builtins/let.def:122 expr.c:639 expr.c:657
+#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658
 msgid "expression expected"
 msgstr "uitdrukking werd verwacht"
 
-#: builtins/mapfile.def:178
+#: builtins/mapfile.def:180
 #, c-format
 msgid "%s: not an indexed array"
 msgstr "%s: is geen geïndexeerd array"
 
-#: builtins/mapfile.def:271 builtins/read.def:308
+#: builtins/mapfile.def:276 builtins/read.def:336
 #, c-format
 msgid "%s: invalid file descriptor specification"
 msgstr "%s: ongeldige aanduiding van bestandsdescriptor"
 
-#: builtins/mapfile.def:279 builtins/read.def:315
+#: builtins/mapfile.def:284 builtins/read.def:343
 #, c-format
 msgid "%d: invalid file descriptor: %s"
 msgstr "%d: ongeldige bestandsdescriptor: %s"
 
-#: builtins/mapfile.def:288 builtins/mapfile.def:326
+#: builtins/mapfile.def:293 builtins/mapfile.def:331
 #, c-format
 msgid "%s: invalid line count"
 msgstr "%s: ongeldig regelaantal"
 
-#: builtins/mapfile.def:299
+#: builtins/mapfile.def:304
 #, c-format
 msgid "%s: invalid array origin"
 msgstr "%s: ongeldig array-begin"
 
 # Quantum is een hoeveelheid regels, een getal.
 # Callback is de aan te roepen functie, maar onnodig in de vertaling.
-#: builtins/mapfile.def:316
+#: builtins/mapfile.def:321
 #, c-format
 msgid "%s: invalid callback quantum"
 msgstr "%s: ongeldige hoeveelheid"
 
-#: builtins/mapfile.def:349
+#: builtins/mapfile.def:354
 msgid "empty array variable name"
 msgstr "lege naam van array-variabele"
 
-#: builtins/mapfile.def:370
+#: builtins/mapfile.def:375
 msgid "array variable support required"
 msgstr "ondersteuning van arrayvariabelen is vereist"
 
-#: builtins/printf.def:419
+#: builtins/printf.def:430
 #, c-format
 msgid "`%s': missing format character"
 msgstr "'%s': ontbrekend opmaakteken"
 
-#: builtins/printf.def:474
+#: builtins/printf.def:485
 #, c-format
 msgid "`%c': invalid time format specification"
 msgstr "'%c': ongeldige aanduiding van tijdsopmaak"
 
-#: builtins/printf.def:676
+#: builtins/printf.def:708
 #, c-format
 msgid "`%c': invalid format character"
 msgstr "'%c': ongeldig opmaakteken"
 
-#: builtins/printf.def:702
+#: builtins/printf.def:734
 #, c-format
 msgid "warning: %s: %s"
 msgstr "waarschuwing: %s: %s"
 
-#: builtins/printf.def:788
+#: builtins/printf.def:822
 #, c-format
 msgid "format parsing problem: %s"
 msgstr "probleem bij ontleden van opmaak: %s"
 
-#: builtins/printf.def:885
+#: builtins/printf.def:919
 msgid "missing hex digit for \\x"
 msgstr "ontbrekend hexadecimaal cijfer bij \\x"
 
-#: builtins/printf.def:900
+#: builtins/printf.def:934
 #, c-format
 msgid "missing unicode digit for \\%c"
 msgstr "ontbrekend Unicode-cijfer bij \\%c"
@@ -844,12 +844,12 @@ msgstr ""
 "\n"
 "    De opdracht 'dirs' toont de huidige mappenstapel."
 
-#: builtins/read.def:280
+#: builtins/read.def:308
 #, c-format
 msgid "%s: invalid timeout specification"
 msgstr "%s: ongeldige aanduiding van tijdslimiet"
 
-#: builtins/read.def:755
+#: builtins/read.def:827
 #, c-format
 msgid "read error: %d: %s"
 msgstr "leesfout: %d: %s"
@@ -862,7 +862,7 @@ msgstr "kan alleen een 'return' doen uit een functie of een uit script aangeroep
 msgid "cannot simultaneously unset a function and a variable"
 msgstr "kan niet tegelijk een functie en een variabele verwijderen"
 
-#: builtins/set.def:966
+#: builtins/set.def:969
 #, c-format
 msgid "%s: not an array variable"
 msgstr "%s: is geen array-variabele"
@@ -881,11 +881,11 @@ msgstr "Kan '%s' niet exporteren"
 msgid "shift count"
 msgstr "shift-aantal"
 
-#: builtins/shopt.def:310
+#: builtins/shopt.def:323
 msgid "cannot set and unset shell options simultaneously"
 msgstr "kan shell-opties niet tegelijk inschakelen en uitschakelen"
 
-#: builtins/shopt.def:428
+#: builtins/shopt.def:444
 #, c-format
 msgid "%s: invalid shell option name"
 msgstr "%s: ongeldige shell-optienaam"
@@ -952,16 +952,16 @@ msgstr "%s: ongeldige limietwaarde"
 msgid "`%c': bad command"
 msgstr "'%c': ongeldige opdracht"
 
-#: builtins/ulimit.def:455
+#: builtins/ulimit.def:464
 #, c-format
 msgid "%s: cannot get limit: %s"
 msgstr "%s: kan de limiet niet bepalen: %s"
 
-#: builtins/ulimit.def:481
+#: builtins/ulimit.def:490
 msgid "limit"
 msgstr "limiet"
 
-#: builtins/ulimit.def:493 builtins/ulimit.def:793
+#: builtins/ulimit.def:502 builtins/ulimit.def:802
 #, c-format
 msgid "%s: cannot modify limit: %s"
 msgstr "%s: kan de limiet niet wijzigen: %s"
@@ -980,7 +980,7 @@ msgstr "'%c': ongeldige operator in symbolische modus"
 msgid "`%c': invalid symbolic mode character"
 msgstr "'%c': ongeldig teken in symbolische modus"
 
-#: error.c:89 error.c:347 error.c:349 error.c:351
+#: error.c:89 error.c:373 error.c:375 error.c:377
 msgid " line "
 msgstr " regel "
 
@@ -1000,96 +1000,106 @@ msgstr "Afbreken..."
 msgid "INFORM: "
 msgstr "informatie: "
 
-#: error.c:462
+#: error.c:310
+#, c-format
+msgid "DEBUG warning: "
+msgstr "DEBUG-waarschuwing: "
+
+#: error.c:488
 msgid "unknown command error"
 msgstr "onbekende opdrachtfout"
 
-#: error.c:463
+#: error.c:489
 msgid "bad command type"
 msgstr "ongeldig opdrachttype"
 
-#: error.c:464
+#: error.c:490
 msgid "bad connector"
 msgstr "ongeldige verbinder"
 
-#: error.c:465
+#: error.c:491
 msgid "bad jump"
 msgstr "ongeldige sprong"
 
-#: error.c:503
+#: error.c:529
 #, c-format
 msgid "%s: unbound variable"
 msgstr "%s: ongebonden variabele"
 
-#: eval.c:242
+#: eval.c:243
 msgid "\atimed out waiting for input: auto-logout\n"
 msgstr "\awachten op invoer duurde te lang -- automatisch afgemeld\n"
 
-#: execute_cmd.c:537
+#: execute_cmd.c:555
 #, c-format
 msgid "cannot redirect standard input from /dev/null: %s"
 msgstr "kan standaardinvoer niet omleiden vanaf /dev/null: %s"
 
-#: execute_cmd.c:1297
+#: execute_cmd.c:1317
 #, c-format
 msgid "TIMEFORMAT: `%c': invalid format character"
 msgstr "TIMEFORMAT: '%c': ongeldig opmaakteken"
 
-#: execute_cmd.c:2362
+#: execute_cmd.c:2391
 #, c-format
 msgid "execute_coproc: coproc [%d:%s] still exists"
 msgstr "execute_coproc(): coproc [%d:%s] bestaat nog steeds"
 
-#: execute_cmd.c:2486
+#: execute_cmd.c:2524
 msgid "pipe error"
 msgstr "pijpfout"
 
-#: execute_cmd.c:4793
+#: execute_cmd.c:4923
 #, c-format
 msgid "eval: maximum eval nesting level exceeded (%d)"
 msgstr "eval: maximum 'eval'-nestingsniveau is overschreden (%d)"
 
-#: execute_cmd.c:4805
+#: execute_cmd.c:4935
 #, c-format
 msgid "%s: maximum source nesting level exceeded (%d)"
 msgstr "%s: maximum 'source'-nestingsniveau is overschreden (%d)"
 
-#: execute_cmd.c:4913
+#: execute_cmd.c:5043
 #, c-format
 msgid "%s: maximum function nesting level exceeded (%d)"
 msgstr "%s: maximum functie-nestingsniveau is overschreden (%d)"
 
-#: execute_cmd.c:5467
+#: execute_cmd.c:5598
 #, c-format
 msgid "%s: restricted: cannot specify `/' in command names"
 msgstr "%s: beperkte modus: '/' in opdrachtnamen is niet toegestaan"
 
-#: execute_cmd.c:5574
+#: execute_cmd.c:5715
 #, c-format
 msgid "%s: command not found"
 msgstr "%s: opdracht niet gevonden"
 
-#: execute_cmd.c:5816
+#: execute_cmd.c:5957
 #, c-format
 msgid "%s: %s"
 msgstr "%s: %s"
 
-#: execute_cmd.c:5854
+#: execute_cmd.c:5975
+#, c-format
+msgid "%s: cannot execute: required file not found"
+msgstr "%s: kan niet uitvoeren: vereist bestand is niet gevonden"
+
+#: execute_cmd.c:6000
 #, c-format
 msgid "%s: %s: bad interpreter"
 msgstr "%s: %s: ongeldige interpreter"
 
-#: execute_cmd.c:5891
+#: execute_cmd.c:6037
 #, c-format
 msgid "%s: cannot execute binary file: %s"
 msgstr "%s: kan binair bestand %s niet uitvoeren"
 
-#: execute_cmd.c:5977
+#: execute_cmd.c:6123
 #, c-format
 msgid "`%s': is a special builtin"
 msgstr "'%s' is een speciale ingebouwde shell-functie"
 
-#: execute_cmd.c:6029
+#: execute_cmd.c:6175
 #, c-format
 msgid "cannot duplicate fd %d to fd %d"
 msgstr "kan bestandsdescriptor %d niet dupliceren naar bestandsdescriptor %d"
@@ -1102,68 +1112,68 @@ msgstr "recursieniveau van expressies is overschreden"
 msgid "recursion stack underflow"
 msgstr "recursiestapel-onderloop"
 
-#: expr.c:477
+#: expr.c:478
 msgid "syntax error in expression"
 msgstr "syntaxfout in expressie"
 
-#: expr.c:521
+#: expr.c:522
 msgid "attempted assignment to non-variable"
 msgstr "poging tot toewijzing aan een niet-variabele"
 
-#: expr.c:530
+#: expr.c:531
 msgid "syntax error in variable assignment"
 msgstr "syntaxfout in toewijzing aan variabele"
 
-#: expr.c:544 expr.c:911
+#: expr.c:545 expr.c:912
 msgid "division by 0"
 msgstr "deling door nul"
 
-#: expr.c:592
+#: expr.c:593
 msgid "bug: bad expassign token"
 msgstr "**interne fout**: onjuist symbool in toewijzingsexpressie"
 
-#: expr.c:646
+#: expr.c:647
 msgid "`:' expected for conditional expression"
 msgstr "':' werd verwacht voor een voorwaardelijke expressie"
 
-#: expr.c:972
+#: expr.c:973
 msgid "exponent less than 0"
 msgstr "exponent is kleiner dan 0"
 
-#: expr.c:1029
+#: expr.c:1030
 msgid "identifier expected after pre-increment or pre-decrement"
 msgstr "naam verwacht na pre-increment of pre-decrement"
 
-#: expr.c:1056
+#: expr.c:1057
 msgid "missing `)'"
 msgstr "ontbrekend ')'"
 
-#: expr.c:1107 expr.c:1487
+#: expr.c:1108 expr.c:1492
 msgid "syntax error: operand expected"
 msgstr "syntaxfout: operator verwacht"
 
-#: expr.c:1489
+#: expr.c:1494
 msgid "syntax error: invalid arithmetic operator"
 msgstr "syntaxfout: ongeldige rekenkundige operator"
 
-#: expr.c:1513
+#: expr.c:1518
 #, c-format
 msgid "%s%s%s: %s (error token is \"%s\")"
 msgstr "%s%s%s: %s (het onjuiste symbool is \"%s\")"
 
-#: expr.c:1573
+#: expr.c:1578
 msgid "invalid arithmetic base"
 msgstr "ongeldige rekenkundige basis"
 
-#: expr.c:1582
+#: expr.c:1587
 msgid "invalid integer constant"
 msgstr "ongeldige integerconstante"
 
-#: expr.c:1598
+#: expr.c:1603
 msgid "value too great for base"
 msgstr "waarde is te groot voor basis"
 
-#: expr.c:1647
+#: expr.c:1652
 #, c-format
 msgid "%s: expression error\n"
 msgstr "%s: expressiefout\n"
@@ -1172,7 +1182,7 @@ msgstr "%s: expressiefout\n"
 msgid "getcwd: cannot access parent directories"
 msgstr "getwd(): kan geen geen toegang verkrijgen tot bovenliggende mappen"
 
-#: input.c:99 subst.c:6069
+#: input.c:99 subst.c:6208
 #, c-format
 msgid "cannot reset nodelay mode for fd %d"
 msgstr "kan 'nodelay'-modus niet uitschakelen voor bestandsdescriptor %d"
@@ -1191,167 +1201,167 @@ msgstr "check_bash_input(): buffer bestaat al voor nieuwe bestandsdescriptor %d"
 msgid "start_pipeline: pgrp pipe"
 msgstr "start_pipeline(): procesgroep van pijp"
 
-#: jobs.c:906
+#: jobs.c:907
 #, c-format
 msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr "bgp_delete: LUS: psi (%d) == storage[psi].bucket_next"
 
-#: jobs.c:959
+#: jobs.c:960
 #, c-format
 msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr "bgp_search: LUS: psi (%d) == storage[psi].bucket_next"
 
-#: jobs.c:1283
+#: jobs.c:1279
 #, c-format
 msgid "forked pid %d appears in running job %d"
 msgstr "afgesplitst PID %d hoort bij draaiende taak %d"
 
-#: jobs.c:1402
+#: jobs.c:1397
 #, c-format
 msgid "deleting stopped job %d with process group %ld"
 msgstr "verwijderen van gepauzeerde taak %d met procesgroep %ld..."
 
-#: jobs.c:1511
+#: jobs.c:1502
 #, c-format
 msgid "add_process: pid %5ld (%s) marked as still alive"
 msgstr "add_process(): PID %5ld (%s) staat gemarkeerd als nog actief"
 
-#: jobs.c:1850
+#: jobs.c:1839
 #, c-format
 msgid "describe_pid: %ld: no such pid"
 msgstr "describe_pid(): PID %ld bestaat niet"
 
-#: jobs.c:1865
+#: jobs.c:1854
 #, c-format
 msgid "Signal %d"
 msgstr "Signaal %d"
 
-#: jobs.c:1879 jobs.c:1905
+#: jobs.c:1868 jobs.c:1894
 msgid "Done"
 msgstr "Klaar"
 
-#: jobs.c:1884 siglist.c:122
+#: jobs.c:1873 siglist.c:123
 msgid "Stopped"
 msgstr "Gepauzeerd"
 
-#: jobs.c:1888
+#: jobs.c:1877
 #, c-format
 msgid "Stopped(%s)"
 msgstr "Gepauzeerd(%s)"
 
-#: jobs.c:1892
+#: jobs.c:1881
 msgid "Running"
 msgstr "Wordt uitgevoerd"
 
-#: jobs.c:1909
+#: jobs.c:1898
 #, c-format
 msgid "Done(%d)"
 msgstr "Klaar(%d)"
 
-#: jobs.c:1911
+#: jobs.c:1900
 #, c-format
 msgid "Exit %d"
 msgstr "Exit %d"
 
-#: jobs.c:1914
+#: jobs.c:1903
 msgid "Unknown status"
 msgstr "Onbekende afsluitwaarde"
 
-#: jobs.c:2001
+#: jobs.c:1990
 #, c-format
 msgid "(core dumped) "
 msgstr "(geheugendump gemaakt) "
 
-#: jobs.c:2020
+#: jobs.c:2009
 #, c-format
 msgid "  (wd: %s)"
 msgstr "  (werkmap: %s)"
 
-#: jobs.c:2259
+#: jobs.c:2250
 #, c-format
 msgid "child setpgid (%ld to %ld)"
 msgstr "instellen van procesgroep %2$ld van dochter %1$ld"
 
-#: jobs.c:2617 nojobs.c:664
+#: jobs.c:2608 nojobs.c:666
 #, c-format
 msgid "wait: pid %ld is not a child of this shell"
 msgstr "wait(): PID %ld is geen dochterproces van deze shell"
 
-#: jobs.c:2893
+#: jobs.c:2884
 #, c-format
 msgid "wait_for: No record of process %ld"
 msgstr "wait_for(): proces %ld is nergens geregistreerd"
 
-#: jobs.c:3236
+#: jobs.c:3223
 #, c-format
 msgid "wait_for_job: job %d is stopped"
 msgstr "wait_for_job(): taak %d is gepauzeerd"
 
-#: jobs.c:3564
+#: jobs.c:3551
 #, c-format
 msgid "%s: no current jobs"
 msgstr "%s: geen lopende taken"
 
-#: jobs.c:3571
+#: jobs.c:3558
 #, c-format
 msgid "%s: job has terminated"
 msgstr "%s: taak is afgesloten"
 
-#: jobs.c:3580
+#: jobs.c:3567
 #, c-format
 msgid "%s: job %d already in background"
 msgstr "%s: taak %d draait al op de achtergrond"
 
-#: jobs.c:3806
+#: jobs.c:3793
 msgid "waitchld: turning on WNOHANG to avoid indefinite block"
 msgstr "waitchld(): WNOHANG wordt ingeschakeld om een onbegrensde blokkering te vermijden"
 
-#: jobs.c:4320
+#: jobs.c:4307
 #, c-format
 msgid "%s: line %d: "
 msgstr "%s: regel %d: "
 
-#: jobs.c:4334 nojobs.c:919
+#: jobs.c:4321 nojobs.c:921
 #, c-format
 msgid " (core dumped)"
 msgstr " (geheugendump gemaakt)"
 
-#: jobs.c:4346 jobs.c:4359
+#: jobs.c:4333 jobs.c:4346
 #, c-format
 msgid "(wd now: %s)\n"
 msgstr "(werkmap is nu: %s)\n"
 
-#: jobs.c:4391
+#: jobs.c:4378
 msgid "initialize_job_control: getpgrp failed"
 msgstr "initialize_job_control: getpgrp() is mislukt"
 
-#: jobs.c:4447
+#: jobs.c:4434
 msgid "initialize_job_control: no job control in background"
 msgstr "initialize_job_control: geen taakbesturing in de achtergrond"
 
-#: jobs.c:4463
+#: jobs.c:4450
 msgid "initialize_job_control: line discipline"
 msgstr "initialize_job_control: lijnprotocol"
 
-#: jobs.c:4473
+#: jobs.c:4460
 msgid "initialize_job_control: setpgid"
 msgstr "initialize_job_control: setpgid()"
 
-#: jobs.c:4494 jobs.c:4503
+#: jobs.c:4481 jobs.c:4490
 #, c-format
 msgid "cannot set terminal process group (%d)"
 msgstr "kan procesgroep (%d) van terminal niet instellen"
 
-#: jobs.c:4508
+#: jobs.c:4495
 msgid "no job control in this shell"
 msgstr "er is geen taakbesturing in deze shell"
 
-#: lib/malloc/malloc.c:353
+#: lib/malloc/malloc.c:367
 #, c-format
 msgid "malloc: failed assertion: %s\n"
 msgstr "malloc(): controletest is mislukt: %s\n"
 
-#: lib/malloc/malloc.c:369
+#: lib/malloc/malloc.c:383
 #, c-format
 msgid ""
 "\r\n"
@@ -1360,47 +1370,47 @@ msgstr ""
 "\r\n"
 "malloc(): %s:%d: controletest is mislukt\r\n"
 
-#: lib/malloc/malloc.c:370 lib/malloc/malloc.c:933
+#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941
 msgid "unknown"
 msgstr "onbekend"
 
-#: lib/malloc/malloc.c:882
+#: lib/malloc/malloc.c:892
 msgid "malloc: block on free list clobbered"
 msgstr "malloc(): een pointer op de lijst van vrije blokken is overschreven"
 
-#: lib/malloc/malloc.c:972
+#: lib/malloc/malloc.c:980
 msgid "free: called with already freed block argument"
 msgstr "free(): aangeroepen met als argument een blok dat al vrijgegeven is"
 
-#: lib/malloc/malloc.c:975
+#: lib/malloc/malloc.c:983
 msgid "free: called with unallocated block argument"
 msgstr "free(): aangeroepen met als argument een ongebruikt blok"
 
-#: lib/malloc/malloc.c:994
+#: lib/malloc/malloc.c:1001
 msgid "free: underflow detected; mh_nbytes out of range"
 msgstr "free(): onderloop: 'mh_nbytes' valt buiten bereik"
 
-#: lib/malloc/malloc.c:1001
+#: lib/malloc/malloc.c:1007
 msgid "free: underflow detected; magic8 corrupted"
 msgstr "free(): onderloop: 'magic8' is beschadigd"
 
-#: lib/malloc/malloc.c:1009
+#: lib/malloc/malloc.c:1014
 msgid "free: start and end chunk sizes differ"
 msgstr "free(): blokgroottes van begin en eind zijn verschillend"
 
-#: lib/malloc/malloc.c:1119
+#: lib/malloc/malloc.c:1176
 msgid "realloc: called with unallocated block argument"
 msgstr "realloc(): aangeroepen met als argument een ongebruikt blok"
 
-#: lib/malloc/malloc.c:1134
+#: lib/malloc/malloc.c:1191
 msgid "realloc: underflow detected; mh_nbytes out of range"
 msgstr "realloc(): onderloop: 'mh_nbytes' valt buiten bereik"
 
-#: lib/malloc/malloc.c:1141
+#: lib/malloc/malloc.c:1197
 msgid "realloc: underflow detected; magic8 corrupted"
 msgstr "realloc(): onderloop: 'magic8' is beschadigd"
 
-#: lib/malloc/malloc.c:1150
+#: lib/malloc/malloc.c:1205
 msgid "realloc: start and end chunk sizes differ"
 msgstr "realloc(): blokgroottes van begin en eind zijn verschillend"
 
@@ -1442,22 +1452,22 @@ msgstr "%s: ongeldige aanduiding van netwerkpad"
 msgid "network operations not supported"
 msgstr "netwerkoperaties worden niet ondersteund"
 
-#: locale.c:217
+#: locale.c:219
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s)"
 msgstr "setlocale(): LC_ALL: kan niet van taalregio veranderen (%s)"
 
-#: locale.c:219
+#: locale.c:221
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s): %s"
 msgstr "setlocale(): LC_ALL: kan niet van taalregio veranderen (%s): %s"
 
-#: locale.c:292
+#: locale.c:294
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s)"
 msgstr "setlocale(): %s: kan niet van taalregio veranderen (%s)"
 
-#: locale.c:294
+#: locale.c:296
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s): %s"
 msgstr "setlocale(): %s: kan niet van taalregio veranderen (%s): %s"
@@ -1475,136 +1485,136 @@ msgstr "U hebt nieuwe post in $_"
 msgid "The mail in %s has been read\n"
 msgstr "De post in %s is gelezen.\n"
 
-#: make_cmd.c:317
+#: make_cmd.c:314
 msgid "syntax error: arithmetic expression required"
 msgstr "syntaxfout: een rekenkundige uitdrukking is vereist"
 
-#: make_cmd.c:319
+#: make_cmd.c:316
 msgid "syntax error: `;' unexpected"
 msgstr "syntaxfout: onverwachte ';'"
 
-#: make_cmd.c:320
+#: make_cmd.c:317
 #, c-format
 msgid "syntax error: `((%s))'"
 msgstr "syntaxfout: '((%s))'"
 
-#: make_cmd.c:572
+#: make_cmd.c:569
 #, c-format
 msgid "make_here_document: bad instruction type %d"
 msgstr "make_here_document(): ongeldig instructietype %d"
 
-#: make_cmd.c:657
+#: make_cmd.c:668
 #, c-format
 msgid "here-document at line %d delimited by end-of-file (wanted `%s')"
 msgstr "regel %d van \"hier\"-document eindigt met einde van bestand (verwachtte '%s')"
 
-#: make_cmd.c:756
+#: make_cmd.c:769
 #, c-format
 msgid "make_redirection: redirection instruction `%d' out of range"
 msgstr "make_redirection(): omleidingsinstructie '%d' valt buiten bereik"
 
-#: parse.y:2393
+#: parse.y:2428
 #, c-format
 msgid "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line truncated"
 msgstr "shell_getc(): lengte van invoerregel (%zu) overschrijdt SIZE_MAX (%lu): regel is afgekapt"
 
-#: parse.y:2826
+#: parse.y:2921
 msgid "maximum here-document count exceeded"
 msgstr "maximum aantal \"hier\"-documenten is overschreden"
 
-#: parse.y:3581 parse.y:3957 parse.y:4556
+#: parse.y:3684 parse.y:4244 parse.y:6148
 #, c-format
 msgid "unexpected EOF while looking for matching `%c'"
 msgstr "onverwacht bestandseinde tijdens zoeken naar bijpassende '%c'"
 
-#: parse.y:4696
+#: parse.y:4452
 msgid "unexpected EOF while looking for `]]'"
 msgstr "onverwacht bestandseinde tijdens zoeken naar ']]'"
 
-#: parse.y:4701
+#: parse.y:4457
 #, c-format
 msgid "syntax error in conditional expression: unexpected token `%s'"
 msgstr "syntaxfout in conditionele expressie: onverwacht symbool '%s'"
 
-#: parse.y:4705
+#: parse.y:4461
 msgid "syntax error in conditional expression"
 msgstr "syntaxfout in conditionele expressie"
 
-#: parse.y:4783
+#: parse.y:4539
 #, c-format
 msgid "unexpected token `%s', expected `)'"
 msgstr "onverwacht symbool '%s'; ')' werd verwacht"
 
-#: parse.y:4787
+#: parse.y:4543
 msgid "expected `)'"
 msgstr "')' werd verwacht"
 
-#: parse.y:4815
+#: parse.y:4571
 #, c-format
 msgid "unexpected argument `%s' to conditional unary operator"
 msgstr "onverwacht argument '%s' bij eenzijdige conditionele operator"
 
-#: parse.y:4819
+#: parse.y:4575
 msgid "unexpected argument to conditional unary operator"
 msgstr "onverwacht argument bij eenzijdige conditionele operator"
 
-#: parse.y:4865
+#: parse.y:4621
 #, c-format
 msgid "unexpected token `%s', conditional binary operator expected"
 msgstr "onverwacht symbool '%s'; tweezijdige conditionele operator werd verwacht"
 
-#: parse.y:4869
+#: parse.y:4625
 msgid "conditional binary operator expected"
 msgstr "tweezijdige conditionele operator werd verwacht"
 
-#: parse.y:4891
+#: parse.y:4647
 #, c-format
 msgid "unexpected argument `%s' to conditional binary operator"
 msgstr "onverwacht argument '%s' bij tweezijdige conditionele operator"
 
-#: parse.y:4895
+#: parse.y:4651
 msgid "unexpected argument to conditional binary operator"
 msgstr "onverwacht argument bij tweezijdige conditionele operator"
 
-#: parse.y:4906
+#: parse.y:4662
 #, c-format
 msgid "unexpected token `%c' in conditional command"
 msgstr "onverwacht symbool '%c' in conditionele opdracht"
 
-#: parse.y:4909
+#: parse.y:4665
 #, c-format
 msgid "unexpected token `%s' in conditional command"
 msgstr "onverwacht symbool '%s' in conditionele opdracht"
 
-#: parse.y:4913
+#: parse.y:4669
 #, c-format
 msgid "unexpected token %d in conditional command"
 msgstr "onverwacht symbool %d in conditionele opdracht"
 
-#: parse.y:6336
+#: parse.y:6118
 #, c-format
 msgid "syntax error near unexpected token `%s'"
 msgstr "syntaxfout nabij onverwacht symbool '%s'"
 
-#: parse.y:6355
+#: parse.y:6137
 #, c-format
 msgid "syntax error near `%s'"
 msgstr "syntaxfout nabij '%s'"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error: unexpected end of file"
 msgstr "syntaxfout: onverwacht bestandseinde"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error"
 msgstr "syntaxfout"
 
-#: parse.y:6428
+#: parse.y:6216
 #, c-format
 msgid "Use \"%s\" to leave the shell.\n"
 msgstr "Gebruik \"%s\" om de shell te verlaten.\n"
 
-#: parse.y:6602
+#: parse.y:6394
 msgid "unexpected EOF while looking for matching `)'"
 msgstr "onverwacht bestandseinde tijdens zoeken naar bijpassende ')'"
 
@@ -1642,94 +1652,94 @@ msgstr "xtrace_set(): bestandspointer is NIL"
 msgid "xtrace fd (%d) != fileno xtrace fp (%d)"
 msgstr "xtrace-bestandsdescriptor (%d) != bestandsnummer van xtrace-bestandspointer (%d)"
 
-#: print_cmd.c:1540
+#: print_cmd.c:1545
 #, c-format
 msgid "cprintf: `%c': invalid format character"
 msgstr "cprintf(): '%c': ongeldig opmaakteken"
 
-#: redir.c:149 redir.c:197
+#: redir.c:150 redir.c:198
 msgid "file descriptor out of range"
 msgstr "bestandsdescriptor valt buiten bereik"
 
-#: redir.c:204
+#: redir.c:205
 #, c-format
 msgid "%s: ambiguous redirect"
 msgstr "%s: omleiding is niet eenduidig"
 
-#: redir.c:208
+#: redir.c:209
 #, c-format
 msgid "%s: cannot overwrite existing file"
 msgstr "%s: kan bestaand bestand niet overschrijven"
 
-#: redir.c:213
+#: redir.c:214
 #, c-format
 msgid "%s: restricted: cannot redirect output"
 msgstr "%s: beperkte modus: omleiden van uitvoer is niet toegestaan"
 
-#: redir.c:218
+#: redir.c:219
 #, c-format
 msgid "cannot create temp file for here-document: %s"
 msgstr "kan geen tijdelijk bestand maken voor \"hier\"-document: %s"
 
-#: redir.c:222
+#: redir.c:223
 #, c-format
 msgid "%s: cannot assign fd to variable"
 msgstr "%s: kan bestandsdescriptor niet toewijzen aan variabele"
 
-#: redir.c:649
+#: redir.c:650
 msgid "/dev/(tcp|udp)/host/port not supported without networking"
 msgstr "/dev/(tcp|udp)/host/port is niet mogelijk zonder netwerk"
 
-#: redir.c:938 redir.c:1053 redir.c:1114 redir.c:1284
+#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303
 msgid "redirection error: cannot duplicate fd"
 msgstr "omleidingsfout: kan bestandsdescriptor niet dupliceren"
 
-#: shell.c:347
+#: shell.c:353
 msgid "could not find /tmp, please create!"
 msgstr "Kan /tmp niet vinden; maak deze aan!"
 
-#: shell.c:351
+#: shell.c:357
 msgid "/tmp must be a valid directory name"
 msgstr "/tmp dient een geldige mapnaam te zijn"
 
-#: shell.c:804
+#: shell.c:826
 msgid "pretty-printing mode ignored in interactive shells"
 msgstr "pretty-printing-modus wordt genegeerd in interactieve shells"
 
-#: shell.c:948
+#: shell.c:972
 #, c-format
 msgid "%c%c: invalid option"
 msgstr "%c%c: ongeldige optie"
 
-#: shell.c:1319
+#: shell.c:1343
 #, c-format
 msgid "cannot set uid to %d: effective uid %d"
 msgstr "kan UID niet op %d instellen; effectieve UID is %d"
 
-#: shell.c:1330
+#: shell.c:1354
 #, c-format
 msgid "cannot set gid to %d: effective gid %d"
 msgstr "kan GID niet op %d instellen; effectieve GID is %d"
 
-#: shell.c:1518
+#: shell.c:1544
 msgid "cannot start debugger; debugging mode disabled"
 msgstr "kan debugger niet starten; debugging-modus is uitgeschakeld"
 
-#: shell.c:1632
+#: shell.c:1658
 #, c-format
 msgid "%s: Is a directory"
 msgstr "%s: is een map"
 
-#: shell.c:1881
+#: shell.c:1907
 msgid "I have no name!"
 msgstr "Ik heb geen naam!"
 
-#: shell.c:2035
+#: shell.c:2061
 #, c-format
 msgid "GNU bash, version %s-(%s)\n"
 msgstr "GNU bash, versie %s-(%s)\n"
 
-#: shell.c:2036
+#: shell.c:2062
 #, c-format
 msgid ""
 "Usage:\t%s [GNU long option] [option] ...\n"
@@ -1738,320 +1748,320 @@ msgstr ""
 "Gebruik:  %s [opties]\n"
 "          %s [opties] scriptbestand...\n"
 
-#: shell.c:2038
+#: shell.c:2064
 msgid "GNU long options:\n"
 msgstr "Lange opties:\n"
 
-#: shell.c:2042
+#: shell.c:2068
 msgid "Shell options:\n"
 msgstr "Korte opties:\n"
 
-#: shell.c:2043
+#: shell.c:2069
 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n"
 msgstr "\t-ilrsD,  of -c OPDRACHT,  of -O SHOPT-OPTIE    (enkel bij aanroep)\n"
 
-#: shell.c:2062
+#: shell.c:2088
 #, c-format
 msgid "\t-%s or -o option\n"
 msgstr "\t-%s,  of -o optie    (veranderbaar via 'set')\n"
 
-#: shell.c:2068
+#: shell.c:2094
 #, c-format
 msgid "Type `%s -c \"help set\"' for more information about shell options.\n"
 msgstr "Typ '%s -c \"help set\"' voor meer informatie over shell-opties.\n"
 
-#: shell.c:2069
+#: shell.c:2095
 #, c-format
 msgid "Type `%s -c help' for more information about shell builtin commands.\n"
 msgstr "Typ '%s -c help' voor meer informatie over ingebouwde shell-functies.\n"
 
-#: shell.c:2070
+#: shell.c:2096
 #, c-format
 msgid "Use the `bashbug' command to report bugs.\n"
 msgstr "Gebruik de opdracht 'bashbug' om fouten in bash te rapporteren.\n"
 
-#: shell.c:2072
+#: shell.c:2098
 #, c-format
 msgid "bash home page: <http://www.gnu.org/software/bash>\n"
 msgstr "Webpagina van 'bash': <http://www.gnu.org/software/bash>\n"
 
-#: shell.c:2073
+#: shell.c:2099
 #, c-format
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 msgstr "Algemene hulp bij gebruik van GNU-software: <http://www.gnu.org/gethelp/>\n"
 
-#: sig.c:757
+#: sig.c:765
 #, c-format
 msgid "sigprocmask: %d: invalid operation"
 msgstr "sigprocmask(): %d: ongeldige operatie"
 
-#: siglist.c:47
+#: siglist.c:48
 msgid "Bogus signal"
 msgstr "Niet-bestaand signaal"
 
 # Vroeger ging dit over het afsluiten van een modemverbinding,
 # tegenwoordig over het afsluiten van een pseudoterminal.
-#: siglist.c:50
+#: siglist.c:51
 msgid "Hangup"
 msgstr "Opgehangen"
 
-#: siglist.c:54
+#: siglist.c:55
 msgid "Interrupt"
 msgstr "Onderbroken"
 
 # Verleden tijd, "Afgesloten", net als de andere actiesignaalnamen.
-#: siglist.c:58
+#: siglist.c:59
 msgid "Quit"
 msgstr "Afgesloten"
 
-#: siglist.c:62
+#: siglist.c:63
 msgid "Illegal instruction"
 msgstr "Ongeldige instructie"
 
-#: siglist.c:66
+#: siglist.c:67
 msgid "BPT trace/trap"
 msgstr "Traceer/breekpunt-instructie"
 
-#: siglist.c:74
+#: siglist.c:75
 msgid "ABORT instruction"
 msgstr "ABORT-instructie"
 
-#: siglist.c:78
+#: siglist.c:79
 msgid "EMT instruction"
 msgstr "EMT-instructie"
 
-#: siglist.c:82
+#: siglist.c:83
 msgid "Floating point exception"
 msgstr "Drijvendekomma-berekeningsfout"
 
-#: siglist.c:86
+#: siglist.c:87
 msgid "Killed"
 msgstr "Geëlimineerd"
 
-#: siglist.c:90
+#: siglist.c:91
 msgid "Bus error"
 msgstr "Busfout"
 
-#: siglist.c:94
+#: siglist.c:95
 msgid "Segmentation fault"
 msgstr "Segmentatiefout"
 
-#: siglist.c:98
+#: siglist.c:99
 msgid "Bad system call"
 msgstr "Onjuiste systeemaanroep"
 
-#: siglist.c:102
+#: siglist.c:103
 msgid "Broken pipe"
 msgstr "Gebroken pijp"
 
-#: siglist.c:106
+#: siglist.c:107
 msgid "Alarm clock"
 msgstr "Wekker"
 
-#: siglist.c:110
+#: siglist.c:111
 msgid "Terminated"
 msgstr "Beëindigd"
 
-#: siglist.c:114
+#: siglist.c:115
 msgid "Urgent IO condition"
 msgstr "Urgente in-/uitvoertoestand"
 
-#: siglist.c:118
+#: siglist.c:119
 msgid "Stopped (signal)"
 msgstr "Gepauzeerd (signaal)"
 
-#: siglist.c:126
+#: siglist.c:127
 msgid "Continue"
 msgstr "Doorgaan"
 
-#: siglist.c:134
+#: siglist.c:135
 msgid "Child death or stop"
 msgstr "Dochter is geëlimineerd of gestopt"
 
-#: siglist.c:138
+#: siglist.c:139
 msgid "Stopped (tty input)"
 msgstr "Gepauzeerd (terminalinvoer)"
 
-#: siglist.c:142
+#: siglist.c:143
 msgid "Stopped (tty output)"
 msgstr "Gepauzeerd (terminaluitvoer)"
 
-#: siglist.c:146
+#: siglist.c:147
 msgid "I/O ready"
 msgstr "I/O is mogelijk"
 
-#: siglist.c:150
+#: siglist.c:151
 msgid "CPU limit"
 msgstr "CPU-limiet"
 
-#: siglist.c:154
+#: siglist.c:155
 msgid "File limit"
 msgstr "Bestandslimiet"
 
-#: siglist.c:158
+#: siglist.c:159
 msgid "Alarm (virtual)"
 msgstr "Alarm (virtueel)"
 
-#: siglist.c:162
+#: siglist.c:163
 msgid "Alarm (profile)"
 msgstr "Alarm (profiel)"
 
-#: siglist.c:166
+#: siglist.c:167
 msgid "Window changed"
 msgstr "Venster is veranderd"
 
-#: siglist.c:170
+#: siglist.c:171
 msgid "Record lock"
 msgstr "Recordvergrendeling"
 
-#: siglist.c:174
+#: siglist.c:175
 msgid "User signal 1"
 msgstr "Gebruikerssignaal 1"
 
-#: siglist.c:178
+#: siglist.c:179
 msgid "User signal 2"
 msgstr "Gebruikerssignaal 2"
 
-#: siglist.c:182
+#: siglist.c:183
 msgid "HFT input data pending"
 msgstr "HFT-invoergegevens staan te wachten"
 
-#: siglist.c:186
+#: siglist.c:187
 msgid "power failure imminent"
 msgstr "stroomstoring dreigt"
 
-#: siglist.c:190
+#: siglist.c:191
 msgid "system crash imminent"
 msgstr "systeemcrash dreigt"
 
-#: siglist.c:194
+#: siglist.c:195
 msgid "migrate process to another CPU"
 msgstr "proces naar andere processor verplaatsen"
 
-#: siglist.c:198
+#: siglist.c:199
 msgid "programming error"
 msgstr "programmeerfout"
 
-#: siglist.c:202
+#: siglist.c:203
 msgid "HFT monitor mode granted"
 msgstr "HFT-monitormodus is gegeven"
 
-#: siglist.c:206
+#: siglist.c:207
 msgid "HFT monitor mode retracted"
 msgstr "HFT-monitormodus is herroepen"
 
-#: siglist.c:210
+#: siglist.c:211
 msgid "HFT sound sequence has completed"
 msgstr "HFT-geluidssequentie is afgespeeld"
 
-#: siglist.c:214
+#: siglist.c:215
 msgid "Information request"
 msgstr "Verzoek om informatie"
 
-#: siglist.c:222 siglist.c:224
+#: siglist.c:223 siglist.c:225
 #, c-format
 msgid "Unknown Signal #%d"
 msgstr "Onbekend signaal #%d"
 
-#: subst.c:1476 subst.c:1666
+#: subst.c:1480 subst.c:1670
 #, c-format
 msgid "bad substitution: no closing `%s' in %s"
 msgstr "ongeldige vervanging: geen sluit-'%s' in %s"
 
-#: subst.c:3281
+#: subst.c:3307
 #, c-format
 msgid "%s: cannot assign list to array member"
 msgstr "%s: kan geen lijst toewijzen aan een array-element"
 
-#: subst.c:5910 subst.c:5926
+#: subst.c:6048 subst.c:6064
 msgid "cannot make pipe for process substitution"
 msgstr "kan geen pijp maken voor procesvervanging"
 
-#: subst.c:5985
+#: subst.c:6124
 msgid "cannot make child for process substitution"
 msgstr "kan geen dochterproces maken voor procesvervanging"
 
-#: subst.c:6059
+#: subst.c:6198
 #, c-format
 msgid "cannot open named pipe %s for reading"
 msgstr "kan pijp genaamd %s niet openen om te lezen"
 
-#: subst.c:6061
+#: subst.c:6200
 #, c-format
 msgid "cannot open named pipe %s for writing"
 msgstr "kan pijp genaamd %s niet openen om te schrijven"
 
-#: subst.c:6084
+#: subst.c:6223
 #, c-format
 msgid "cannot duplicate named pipe %s as fd %d"
 msgstr "kan pijp genaamd %s niet dupliceren als bestandsdescriptor %d"
 
-#: subst.c:6213
+#: subst.c:6370
 msgid "command substitution: ignored null byte in input"
 msgstr "opdrachtsubstitutie: null-byte in invoer is genegeerd"
 
-#: subst.c:6353
+#: subst.c:6533
 msgid "cannot make pipe for command substitution"
 msgstr "kan geen pijp maken voor opdrachtvervanging"
 
-#: subst.c:6397
+#: subst.c:6580
 msgid "cannot make child for command substitution"
 msgstr "kan geen dochterproces maken voor opdrachtvervanging"
 
-#: subst.c:6423
+#: subst.c:6613
 msgid "command_substitute: cannot duplicate pipe as fd 1"
 msgstr "command_substitute(): kan pijp niet dupliceren als bestandsdescriptor 1"
 
-#: subst.c:6883 subst.c:9952
+#: subst.c:7082 subst.c:10252
 #, c-format
 msgid "%s: invalid variable name for name reference"
 msgstr "%s: ongeldige variabelenaam voor naamsverwijzing"
 
-#: subst.c:6979 subst.c:6997 subst.c:7169
+#: subst.c:7178 subst.c:7196 subst.c:7369
 #, c-format
 msgid "%s: invalid indirect expansion"
 msgstr "%s: ongeldige indirecte expansie"
 
-#: subst.c:7013 subst.c:7177
+#: subst.c:7212 subst.c:7377
 #, c-format
 msgid "%s: invalid variable name"
 msgstr "%s: ongeldige variabelenaam"
 
-#: subst.c:7256
+#: subst.c:7478
 #, c-format
 msgid "%s: parameter not set"
 msgstr "%s: parameter is niet ingesteld"
 
-#: subst.c:7258
+#: subst.c:7480
 #, c-format
 msgid "%s: parameter null or not set"
 msgstr "%s: lege parameter, of niet ingesteld"
 
-#: subst.c:7503 subst.c:7518
+#: subst.c:7727 subst.c:7742
 #, c-format
 msgid "%s: substring expression < 0"
 msgstr "%s: resultaat van deeltekenreeks is kleiner dan nul"
 
-#: subst.c:9281 subst.c:9302
+#: subst.c:9560 subst.c:9587
 #, c-format
 msgid "%s: bad substitution"
 msgstr "%s: ongeldige vervanging"
 
-#: subst.c:9390
+#: subst.c:9678
 #, c-format
 msgid "$%s: cannot assign in this way"
 msgstr "$%s: kan niet op deze manier toewijzen"
 
-#: subst.c:9814
+#: subst.c:10111
 msgid "future versions of the shell will force evaluation as an arithmetic substitution"
 msgstr "toekomstige versies van de shell zullen dit als een rekenkundige vervanging evalueren"
 
-#: subst.c:10367
+#: subst.c:10795
 #, c-format
 msgid "bad substitution: no closing \"`\" in %s"
 msgstr "ongeldige vervanging: geen afsluitende '`' in %s"
 
-#: subst.c:11434
+#: subst.c:11874
 #, c-format
 msgid "no match: %s"
 msgstr "geen overeenkomst: %s"
@@ -2074,21 +2084,21 @@ msgstr "')' werd verwacht"
 msgid "`)' expected, found %s"
 msgstr "')' werd verwacht; %s gevonden"
 
-#: test.c:466 test.c:799
+#: test.c:469 test.c:814
 #, c-format
 msgid "%s: binary operator expected"
 msgstr "tweezijdige operator werd verwacht, %s gevonden"
 
-#: test.c:756 test.c:759
+#: test.c:771 test.c:774
 #, c-format
 msgid "%s: unary operator expected"
 msgstr "eenzijdige operator werd verwacht, %s gevonden"
 
-#: test.c:881
+#: test.c:896
 msgid "missing `]'"
 msgstr "ontbrekende ']'"
 
-#: test.c:899
+#: test.c:914
 #, c-format
 msgid "syntax error: `%s' unexpected"
 msgstr "syntaxfout: onverwachte '%s'"
@@ -2097,99 +2107,104 @@ msgstr "syntaxfout: onverwachte '%s'"
 msgid "invalid signal number"
 msgstr "ongeldig signaalnummer"
 
-#: trap.c:325
+#: trap.c:323
 #, c-format
 msgid "trap handler: maximum trap handler level exceeded (%d)"
 msgstr "trap handler: maximum 'trap-handler'-niveau is overschreden (%d)"
 
-#: trap.c:414
+#: trap.c:412
 #, c-format
 msgid "run_pending_traps: bad value in trap_list[%d]: %p"
 msgstr "run_pending_traps(): ongeldige waarde in trap_list[%d]: %p"
 
-#: trap.c:418
+#: trap.c:416
 #, c-format
 msgid "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
 msgstr "run_pending_traps: signaalverwerker is SIG_DFL, herzenden van %d (%s) aan mezelf..."
 
-#: trap.c:487
+#: trap.c:509
 #, c-format
 msgid "trap_handler: bad signal %d"
 msgstr "trap_handler(): ongeldig signaal %d"
 
-#: variables.c:421
+#: variables.c:424
 #, c-format
 msgid "error importing function definition for `%s'"
 msgstr "fout tijdens importeren van functiedefinitie voor '%s'"
 
-#: variables.c:833
+#: variables.c:838
 #, c-format
 msgid "shell level (%d) too high, resetting to 1"
 msgstr "shell-niveau is te hoog (%d); teruggezet op 1"
 
-#: variables.c:2674
+#: variables.c:2642
 msgid "make_local_variable: no function context at current scope"
 msgstr "make_local_variable(): er is geen functiecontext in huidige geldigheidsbereik"
 
-#: variables.c:2693
+#: variables.c:2661
 #, c-format
 msgid "%s: variable may not be assigned value"
 msgstr "%s: aan variabele mag geen waarde toegewezen worden"
 
-#: variables.c:3475
+#: variables.c:2818 variables.c:2874
+#, c-format
+msgid "%s: cannot inherit value from incompatible type"
+msgstr "%s: kan geen waarde overerven van incompatibel type"
+
+#: variables.c:3459
 #, c-format
 msgid "%s: assigning integer to name reference"
 msgstr "%s: toekenning van geheel getal aan naamsverwijzing"
 
-#: variables.c:4404
+#: variables.c:4390
 msgid "all_local_variables: no function context at current scope"
 msgstr "all_local_variables(): er is geen functiecontext in huidige geldigheidsbereik"
 
-#: variables.c:4771
+#: variables.c:4757
 #, c-format
 msgid "%s has null exportstr"
 msgstr "*** %s heeft lege export-tekenreeks"
 
-#: variables.c:4776 variables.c:4785
+#: variables.c:4762 variables.c:4771
 #, c-format
 msgid "invalid character %d in exportstr for %s"
 msgstr "*** ongeldig teken '%d' in export-tekenreeks voor %s"
 
-#: variables.c:4791
+#: variables.c:4777
 #, c-format
 msgid "no `=' in exportstr for %s"
 msgstr "*** geen '=' in export-tekenreeks voor %s"
 
-#: variables.c:5331
+#: variables.c:5317
 msgid "pop_var_context: head of shell_variables not a function context"
 msgstr "pop_var_context(): top van 'shell_variables' is geen functiecontext"
 
-#: variables.c:5344
+#: variables.c:5330
 msgid "pop_var_context: no global_variables context"
 msgstr "pop_var_context(): er is geen 'global_variables'-context"
 
-#: variables.c:5424
+#: variables.c:5410
 msgid "pop_scope: head of shell_variables not a temporary environment scope"
 msgstr "pop_scope(): top van 'shell_variables' is geen tijdelijk geldigheidsbereik"
 
-#: variables.c:6387
+#: variables.c:6400
 #, c-format
 msgid "%s: %s: cannot open as FILE"
 msgstr "%s: Kan %s niet openen als BESTAND"
 
-#: variables.c:6392
+#: variables.c:6405
 #, c-format
 msgid "%s: %s: invalid value for trace file descriptor"
 msgstr "%s: ongeldige waarde %s voor 'trace'-bestandsdescriptor"
 
-#: variables.c:6437
+#: variables.c:6450
 #, c-format
 msgid "%s: %s: compatibility value out of range"
 msgstr "%s: %s: compatibiliteitswaarde valt buiten bereik"
 
 #: version.c:46 version2.c:46
-msgid "Copyright (C) 2020 Free Software Foundation, Inc."
-msgstr "Copyright (C) 2020 Free Software Foundation, Inc."
+msgid "Copyright (C) 2022 Free Software Foundation, Inc."
+msgstr "Copyright (C) 2022 Free Software Foundation, Inc."
 
 #: version.c:47 version2.c:47
 msgid "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n"
@@ -2276,12 +2291,12 @@ msgid "command [-pVv] command [arg ...]"
 msgstr "command [-pVv] OPDRACHT [ARGUMENT...]"
 
 #: builtins.c:78
-msgid "declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]"
-msgstr "declare [-aAfFgiIlnrtux] [-p] [NAAM[=WAARDE] ...]"
+msgid "declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] [name ...]"
+msgstr "declare [-aAfFgiIlnrtux] [NAAM[=WAARDE] ...] of declare -p [-aAfFilnrtux] [NAAM ...]"
 
 #: builtins.c:80
-msgid "typeset [-aAfFgiIlnrtux] [-p] name[=value] ..."
-msgstr "typeset [-aAfFgiIlnrtux] [-p] NAAM[=WAARDE]..."
+msgid "typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] [name ...]"
+msgstr "typeset [-aAfFgiIlnrtux] NAAM[=WAARDE] ... of typeset -p [-aAfFilnrtux] [NAAM ...]"
 
 #: builtins.c:82
 msgid "local [option] name[=value] ..."
@@ -2375,8 +2390,8 @@ msgid "return [n]"
 msgstr "return [N]"
 
 #: builtins.c:142
-msgid "set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]"
-msgstr "set [--abefhkmnptuvxBCHP] [-o OPTIENAAM] [--] [ARGUMENT...]"
+msgid "set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]"
+msgstr "set [-abefhkmnptuvxBCEHPT] [-o OPTIENAAM] [--] [-] [ARGUMENT...]"
 
 #: builtins.c:144
 msgid "unset [-f] [-v] [-n] [name ...]"
@@ -2423,8 +2438,8 @@ msgid "type [-afptP] name [name ...]"
 msgstr "type [-afptP] NAAM..."
 
 #: builtins.c:171
-msgid "ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]"
-msgstr "ulimit [-SHabcdefiklmnpqrstuvxPT] [GRENSWAARDE]"
+msgid "ulimit [-SHabcdefiklmnpqrstuvxPRT] [limit]"
+msgstr "ulimit [-SHabcdefiklmnpqrstuvxPRT] [GRENSWAARDE]"
 
 #: builtins.c:174
 msgid "umask [-p] [-S] [mode]"
@@ -2463,12 +2478,12 @@ msgid "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else C
 msgstr "if OPDRACHTEN; then OPDRACHTEN; [elif OPDRACHTEN; then OPDRACHTEN;]... [else OPDRACHTEN;] fi"
 
 #: builtins.c:196
-msgid "while COMMANDS; do COMMANDS; done"
-msgstr "while OPDRACHTEN; do OPDRACHTEN; done"
+msgid "while COMMANDS; do COMMANDS-2; done"
+msgstr "while OPDRACHTEN; do OPDRACHTEN2; done"
 
 #: builtins.c:198
-msgid "until COMMANDS; do COMMANDS; done"
-msgstr "until OPDRACHTEN; do OPDRACHTEN; done"
+msgid "until COMMANDS; do COMMANDS-2; done"
+msgstr "until OPDRACHTEN; do OPDRACHTEN2; done"
 
 #: builtins.c:200
 msgid "coproc [NAME] command [redirections]"
@@ -3747,7 +3762,8 @@ msgid ""
 "    splitting, and the first word is assigned to the first NAME, the second\n"
 "    word to the second NAME, and so on, with any leftover words assigned to\n"
 "    the last NAME.  Only the characters found in $IFS are recognized as word\n"
-"    delimiters.\n"
+"    delimiters. By default, the backslash character escapes delimiter characters\n"
+"    and newline.\n"
 "    \n"
 "    If no NAMEs are supplied, the line read is stored in the REPLY variable.\n"
 "    \n"
@@ -3789,8 +3805,11 @@ msgstr ""
 "    als optie '-u' gegeven is) en wijst het eerste woord aan de eerste NAAM toe,\n"
 "    het tweede woord aan de tweede NAAM, en zo verder; de resterende woorden\n"
 "    worden toegewezen aan de laatste NAAM.  Alleen de tekens in de variabele\n"
-"    IFS worden herkend als woordscheidingstekens.  Als er geen namen gegeven\n"
-"    zijn, dan wordt de gelezen regel opgeslagen in de variabele REPLY.\n"
+"    IFS worden herkend als woordscheidingstekens.  Standaard ontdoet een\n"
+"    backslash scheidingstekens en het nieuweregelteken van hun betekenis.\n"
+"\n"
+"    Als er geen namen gegeven zijn, dan wordt de gelezen regel opgeslagen in\n"
+"    de variabele REPLY.\n"
 "\n"
 "    Opties:\n"
 "      -a ARRAY   de gelezen woorden toekennen aan de opeenvolgende posities\n"
@@ -3819,7 +3838,7 @@ msgstr ""
 "    de tijdslimiet overschreden werd, er een toekenningsfout optrad, of een\n"
 "    ongeldige bestandsdescriptor als argument van '-u' gegeven werd."
 
-#: builtins.c:1041
+#: builtins.c:1042
 msgid ""
 "Return from a shell function.\n"
 "    \n"
@@ -3840,7 +3859,7 @@ msgstr ""
 "    uitvoeren is."
 
 # Voor de duidelijkheid is de tekstvolgorde veranderd.
-#: builtins.c:1054
+#: builtins.c:1055
 msgid ""
 "Set or unset values of shell options and positional parameters.\n"
 "    \n"
@@ -4000,7 +4019,7 @@ msgstr ""
 "\n"
 "    De afsluitwaarde is 0, tenzij een ongeldige optie gegeven werd."
 
-#: builtins.c:1139
+#: builtins.c:1140
 msgid ""
 "Unset values and attributes of shell variables and functions.\n"
 "    \n"
@@ -4037,7 +4056,7 @@ msgstr ""
 "    De afsluitwaarde is 0, tenzij een ongeldige optie gegeven werd of een\n"
 "    NAAM alleen-lezen is."
 
-#: builtins.c:1161
+#: builtins.c:1162
 msgid ""
 "Set export attribute for shell variables.\n"
 "    \n"
@@ -4069,7 +4088,7 @@ msgstr ""
 "\n"
 "    De afsluitwaarde is 0, tenzij een ongeldige optie of NAAM gegeven werd."
 
-#: builtins.c:1180
+#: builtins.c:1181
 msgid ""
 "Mark shell variables as unchangeable.\n"
 "    \n"
@@ -4106,7 +4125,7 @@ msgstr ""
 "\n"
 "    De afsluitwaarde is 0, tenzij een ongeldige optie of NAAM gegeven werd."
 
-#: builtins.c:1202
+#: builtins.c:1203
 msgid ""
 "Shift positional parameters.\n"
 "    \n"
@@ -4123,7 +4142,7 @@ msgstr ""
 "\n"
 "    De afsluitwaarde is 0 tenzij N negatief is of groter dan $#."
 
-#: builtins.c:1214 builtins.c:1229
+#: builtins.c:1215 builtins.c:1230
 msgid ""
 "Execute commands from a file in the current shell.\n"
 "    \n"
@@ -4146,7 +4165,7 @@ msgstr ""
 "    De afsluitwaarde is die van de laatst uitgevoerde opdracht in het gegeven\n"
 "    bestand, of 1 als dit bestand niet gelezen kan worden."
 
-#: builtins.c:1245
+#: builtins.c:1246
 msgid ""
 "Suspend shell execution.\n"
 "    \n"
@@ -4171,7 +4190,7 @@ msgstr ""
 "    De afsluitwaarde is 0, tenzij taakbeheer uitgeschakeld is of er een fout\n"
 "    optreedt."
 
-#: builtins.c:1261
+#: builtins.c:1262
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -4313,7 +4332,7 @@ msgstr ""
 "    De afsluitwaarde is 0 als EXPRESSIE waar is, 1 als EXPRESSIE onwaar is,\n"
 "    en 2 als een ongeldig argument gegeven werd."
 
-#: builtins.c:1343
+#: builtins.c:1344
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -4325,7 +4344,7 @@ msgstr ""
 "    Dit is een synoniem voor de ingebouwde functie 'test', behalve dat\n"
 "    het laatste argument een ']' moet zijn, horend bij de begin-'['."
 
-#: builtins.c:1352
+#: builtins.c:1353
 msgid ""
 "Display process times.\n"
 "    \n"
@@ -4343,7 +4362,7 @@ msgstr ""
 "\n"
 "    De afsluitwaarde is altijd 0."
 
-#: builtins.c:1364
+#: builtins.c:1365
 msgid ""
 "Trap signals and other events.\n"
 "    \n"
@@ -4412,7 +4431,7 @@ msgstr ""
 "    De afsluitwaarde is 0, tenzij een ongeldige optie of SIGNAALAANDUIDING\n"
 "    gegeven werd."
 
-#: builtins.c:1400
+#: builtins.c:1401
 msgid ""
 "Display information about command type.\n"
 "    \n"
@@ -4463,7 +4482,7 @@ msgstr ""
 "\n"
 "    De afsluitwaarde is 0 als elke NAAM gevonden werd, anders 1."
 
-#: builtins.c:1431
+#: builtins.c:1432
 msgid ""
 "Modify shell resource limits.\n"
 "    \n"
@@ -4557,7 +4576,7 @@ msgstr ""
 "    De afsluitwaarde is 0, tenzij een ongeldige optie gegeven werd of er een\n"
 "    fout optrad."
 
-#: builtins.c:1482
+#: builtins.c:1483
 msgid ""
 "Display or set file mode mask.\n"
 "    \n"
@@ -4589,7 +4608,7 @@ msgstr ""
 "    De afsluitwaarde is 0, tenzij MODUS ongeldig is of een ongeldige optie\n"
 "    gegeven werd."
 
-#: builtins.c:1502
+#: builtins.c:1503
 msgid ""
 "Wait for job completion and return exit status.\n"
 "    \n"
@@ -4640,7 +4659,7 @@ msgstr ""
 "    of als een ongeldige optie gegeven werd, of als '-n' gegeven werd maar de\n"
 "    shell geen dochters heeft waarop gewacht wordt."
 
-#: builtins.c:1533
+#: builtins.c:1534
 msgid ""
 "Wait for process completion and return exit status.\n"
 "    \n"
@@ -4662,7 +4681,7 @@ msgstr ""
 "    De afsluitwaarde is die van de laatste PID, 1 als PID ongeldig is,\n"
 "    of 2 als een ongeldige optie gegeven werd."
 
-#: builtins.c:1548
+#: builtins.c:1549
 msgid ""
 "Execute commands for each member in a list.\n"
 "    \n"
@@ -4683,7 +4702,7 @@ msgstr ""
 "\n"
 "    De afsluitwaarde is die van de laatst uitgevoerde opdracht."
 
-#: builtins.c:1562
+#: builtins.c:1563
 msgid ""
 "Arithmetic for loop.\n"
 "    \n"
@@ -4710,7 +4729,7 @@ msgstr ""
 "\n"
 "    De afsluitwaarde is die van de laatst uitgevoerde opdracht."
 
-#: builtins.c:1580
+#: builtins.c:1581
 msgid ""
 "Select words from a list and execute commands.\n"
 "    \n"
@@ -4747,7 +4766,7 @@ msgstr ""
 "\n"
 "    De afsluitwaarde is die van de laatst uitgevoerde opdracht."
 
-#: builtins.c:1601
+#: builtins.c:1602
 msgid ""
 "Report time consumed by pipeline's execution.\n"
 "    \n"
@@ -4772,9 +4791,10 @@ msgstr ""
 "    De uitvoer kan via de omgevingsvariabele TIMEFORMAT aangepast worden.\n"
 "    Optie '-p' negeert deze omgevingsvariabele en toont de tijden in een\n"
 "    overdraagbare standaardopmaak.\n"
+"\n"
 "    De afsluitwaarde is die van de PIJPLIJN."
 
-#: builtins.c:1618
+#: builtins.c:1619
 msgid ""
 "Execute commands based on pattern matching.\n"
 "    \n"
@@ -4792,7 +4812,7 @@ msgstr ""
 "\n"
 "    De afsluitwaarde is die van de laatst uitgevoerde opdracht."
 
-#: builtins.c:1630
+#: builtins.c:1631
 msgid ""
 "Execute commands based on conditional.\n"
 "    \n"
@@ -4820,41 +4840,41 @@ msgstr ""
 "    De afsluitwaarde van de gehele opdracht is die van de laatst uitgevoerde\n"
 "    deelopdracht, of nul als geen enkele 'if' of 'elif' nul opleverde."
 
-#: builtins.c:1647
+#: builtins.c:1648
 msgid ""
 "Execute commands as long as a test succeeds.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `while' COMMANDS has an exit status of zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n"
+"    an exit status of zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
 "Opdrachten uitvoeren zolang een test slaagt.\n"
 "\n"
-"    Voert de gegeven opdrachten uit zolang de laatste opdracht achter\n"
-"    'while' een afsluitwaarde van 0 heeft.\n"
+"    Voert de tweede reeks opdrachten uit zolang de laatste opdracht van\n"
+"    de eerste reeks een afsluitwaarde van 0 heeft.\n"
 "\n"
 "    De afsluitwaarde is die van de laatst uitgevoerde opdracht."
 
-#: builtins.c:1659
+#: builtins.c:1660
 msgid ""
 "Execute commands as long as a test does not succeed.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `until' COMMANDS has an exit status which is not zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n"
+"    an exit status which is not zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
 "Opdrachten uitvoeren zolang een test niet slaagt.\n"
 "\n"
-"    Voert de gegeven opdrachten uit zolang de laatste opdracht achter\n"
-"    'until' een afsluitwaarde ongelijk aan 0 heeft.\n"
+"    Voert de tweede reeks opdrachten uit zolang de laatste opdracht van\n"
+"    de eerste reeks een afsluitwaarde ongelijk aan 0 heeft.\n"
 "\n"
 "    De afsluitwaarde is die van de laatst uitgevoerde opdracht."
 
-#: builtins.c:1671
+#: builtins.c:1672
 msgid ""
 "Create a coprocess named NAME.\n"
 "    \n"
@@ -4875,7 +4895,7 @@ msgstr ""
 "\n"
 "    De afsluitwaarde van coproc is 0."
 
-#: builtins.c:1685
+#: builtins.c:1686
 msgid ""
 "Define shell function.\n"
 "    \n"
@@ -4896,7 +4916,7 @@ msgstr ""
 "\n"
 "    De afsluitwaarde is 0, tenzij NAAM onveranderbaar is."
 
-#: builtins.c:1699
+#: builtins.c:1700
 msgid ""
 "Group commands as a unit.\n"
 "    \n"
@@ -4913,7 +4933,7 @@ msgstr ""
 "\n"
 "    De afsluitwaarde is die van de laatst uitgevoerde opdracht."
 
-#: builtins.c:1711
+#: builtins.c:1712
 msgid ""
 "Resume job in foreground.\n"
 "    \n"
@@ -4937,7 +4957,7 @@ msgstr ""
 "\n"
 "    De afsluitwaarde is die van de hervatte taak."
 
-#: builtins.c:1726
+#: builtins.c:1727
 msgid ""
 "Evaluate arithmetic expression.\n"
 "    \n"
@@ -4954,7 +4974,7 @@ msgstr ""
 "\n"
 "    De afsluitwaarde is 1 als de EXPRESSIE tot 0 evalueert; anders 0."
 
-#: builtins.c:1738
+#: builtins.c:1739
 msgid ""
 "Execute conditional command.\n"
 "    \n"
@@ -5000,7 +5020,7 @@ msgstr ""
 "\n"
 "    De afsluitwaarde is 0 of 1, afhankelijk van EXPRESSIE."
 
-#: builtins.c:1764
+#: builtins.c:1765
 msgid ""
 "Common shell variable names and usage.\n"
 "    \n"
@@ -5098,7 +5118,7 @@ msgstr ""
 "                    vervangingsteken, gewoonlijk '^'; het derde teken is het\n"
 "                    geschiedeniscommentaarteken, gewoonlijk '#'\n"
 
-#: builtins.c:1821
+#: builtins.c:1822
 msgid ""
 "Add directories to stack.\n"
 "    \n"
@@ -5151,7 +5171,7 @@ msgstr ""
 "    De afsluitwaarde is 0, tenzij een ongeldig argument gegeven werd of de\n"
 "    mapwijziging mislukte."
 
-#: builtins.c:1855
+#: builtins.c:1856
 msgid ""
 "Remove directories from stack.\n"
 "    \n"
@@ -5200,7 +5220,7 @@ msgstr ""
 "    De afsluitwaarde is 0, tenzij een ongeldig argument gegeven werd of de\n"
 "    mapwijziging mislukte."
 
-#: builtins.c:1885
+#: builtins.c:1886
 msgid ""
 "Display directory stack.\n"
 "    \n"
@@ -5249,7 +5269,7 @@ msgstr ""
 "    De afsluitwaarde is 0, tenzij een ongeldige optie gegeven werd of er een\n"
 "    fout optrad."
 
-#: builtins.c:1916
+#: builtins.c:1917
 msgid ""
 "Set and unset shell options.\n"
 "    \n"
@@ -5288,7 +5308,7 @@ msgstr ""
 "    een ongeldige optienaam gegeven werd, en de afsluitwaarde is 2 als een\n"
 "    ongeldige optie gegeven werd."
 
-#: builtins.c:1937
+#: builtins.c:1938
 msgid ""
 "Formats and prints ARGUMENTS under control of the FORMAT.\n"
 "    \n"
@@ -5307,6 +5327,8 @@ msgid ""
 "    \n"
 "      %b\texpand backslash escape sequences in the corresponding argument\n"
 "      %q\tquote the argument in a way that can be reused as shell input\n"
+"      %Q\tlike %q, but apply any precision to the unquoted argument before\n"
+"    \t\tquoting\n"
 "      %(fmt)T\toutput the date-time string resulting from using FMT as a format\n"
 "    \t        string for strftime(3)\n"
 "    \n"
@@ -5336,8 +5358,10 @@ msgstr ""
 "    betekent %b dat de backslash-stuurtekens in het betreffende argument\n"
 "    omgezet moeten worden, en betekent %q dat het argument op zo'n manier\n"
 "    aangehaald moet worden dat het als invoer voor de shell hergebruikt\n"
-"    kan worden.  Verder betekent %(OPMAAK)T dat datum-plus-tijd getoond\n"
-"    moet worden door deze opmaak aan strftime(3) mee te geven.\n"
+"    kan worden.  %Q is als %q, maar een precisie wordt toegepast op het\n"
+"    onaangehaalde argument vóór het aanhalen.  Verder betekent %(OPMAAK)T\n"
+"    dat datum-plus-tijd getoond moet worden door deze opmaak aan strftime(3)\n"
+"    mee te geven.\n"
 "\n"
 "    De gegeven opmaak wordt zo vaak hergebruikt als nodig is om alle argumenten\n"
 "    te consumeren.  Als er minder argumenten zijn dan de opmaak verwacht, dan\n"
@@ -5347,7 +5371,7 @@ msgstr ""
 "    De afsluitwaarde is 0, tenzij een ongeldige optie gegeven werd of er een\n"
 "    schrijf- of toekenningsfout optrad."
 
-#: builtins.c:1971
+#: builtins.c:1974
 msgid ""
 "Specify how arguments are to be completed by Readline.\n"
 "    \n"
@@ -5397,7 +5421,7 @@ msgstr ""
 "    De afsluitwaarde is 0, tenzij een ongeldige optie gegeven werd of er\n"
 "    een fout optrad."
 
-#: builtins.c:2001
+#: builtins.c:2004
 msgid ""
 "Display possible completions depending on the options.\n"
 "    \n"
@@ -5417,7 +5441,7 @@ msgstr ""
 "    De afsluitwaarde is 0, tenzij een ongeldige optie gegeven werd of er een\n"
 "    fout optrad."
 
-#: builtins.c:2016
+#: builtins.c:2019
 msgid ""
 "Modify or display completion options.\n"
 "    \n"
@@ -5469,7 +5493,7 @@ msgstr ""
 "    De afsluitwaarde is 0, tenzij een ongeldige optie gegeven werd of voor\n"
 "    NAAM geen completeringsvoorschrift gedefinieerd is."
 
-#: builtins.c:2047
+#: builtins.c:2050
 msgid ""
 "Read lines from the standard input into an indexed array variable.\n"
 "    \n"
@@ -5532,7 +5556,7 @@ msgstr ""
 "    De afsluitwaarde is 0, tenzij ARRAY alleen-lezen is of geen array is, of\n"
 "    een ongeldige optie gegeven werd."
 
-#: builtins.c:2083
+#: builtins.c:2086
 msgid ""
 "Read lines from a file into an array variable.\n"
 "    \n"
@@ -5542,6 +5566,9 @@ msgstr ""
 "\n"
 "    Een synoniem voor 'mapfile'."
 
+#~ msgid "%s: invalid associative array key"
+#~ msgstr "%s: ongeldige sleutel voor associatief array"
+
 #~ msgid ""
 #~ "Returns the context of the current subroutine call.\n"
 #~ "    \n"
index 29d20db9600c765423b39eaa129d50855941c91d..4adbed0289469416870a1442fdf18d55adce0216 100644 (file)
Binary files a/po/pl.gmo and b/po/pl.gmo differ
index 338b8bcf572e88a739722b852c77db60e6f881f0..b8bd94a576803ef7f6723b975e5518b899b4e0f0 100644 (file)
--- a/po/pl.po
+++ b/po/pl.po
@@ -1,15 +1,15 @@
 # Polish translation of bash
-# Copyright (C) 2007, 2010, 2011, 2013, 2014, 2015, 2016, 2018, 2019, 2020 Free Software Foundation, Inc.
+# Copyright (C) 2007, 2010, 2011, 2013, 2014, 2015, 2016, 2018, 2019, 2020, 2022 Free Software Foundation, Inc.
 # This file is distributed under the same license as the bash package.
 # Andrzej M. Krzysztofowicz <ankry@mif.pg.gda.pl> 2006,2007.
-# Jakub Bogusz <qboosh@pld-linux.org> 2010-2020.
+# Jakub Bogusz <qboosh@pld-linux.org> 2010-2022.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: bash 5.1\n"
+"Project-Id-Version: bash 5.2-rc1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-11-28 12:51-0500\n"
-"PO-Revision-Date: 2020-12-07 21:15+0100\n"
+"POT-Creation-Date: 2022-01-11 14:50-0500\n"
+"PO-Revision-Date: 2022-06-19 22:15+0200\n"
 "Last-Translator: Jakub Bogusz <qboosh@pld-linux.org>\n"
 "Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
 "Language: pl\n"
@@ -23,58 +23,53 @@ msgstr ""
 msgid "bad array subscript"
 msgstr "nieprawidłowy indeks tablicy"
 
-#: arrayfunc.c:421 builtins/declare.def:638 variables.c:2274 variables.c:2300
-#: variables.c:3133
+#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268
+#: variables.c:3101
 #, c-format
 msgid "%s: removing nameref attribute"
 msgstr "%s: usuwanie atrybutu nameref"
 
-#: arrayfunc.c:446 builtins/declare.def:851
+#: arrayfunc.c:496 builtins/declare.def:868
 #, c-format
 msgid "%s: cannot convert indexed to associative array"
 msgstr "%s: nie można przekształcić tablicy indeksowanej na asocjacyjną"
 
-#: arrayfunc.c:700
-#, c-format
-msgid "%s: invalid associative array key"
-msgstr "%s: błędny klucz tablicy asocjacyjnej"
-
-#: arrayfunc.c:702
+#: arrayfunc.c:777
 #, c-format
 msgid "%s: cannot assign to non-numeric index"
 msgstr "%s: nie można przypisać do nienumerycznego indeksu"
 
-#: arrayfunc.c:747
+#: arrayfunc.c:822
 #, c-format
 msgid "%s: %s: must use subscript when assigning associative array"
 msgstr "%s: %s: przy przypisaniu do tablicy asocjacyjnej należy użyć nawiasów"
 
-#: bashhist.c:452
+#: bashhist.c:455
 #, c-format
 msgid "%s: cannot create: %s"
 msgstr "%s: nie można utworzyć: %s"
 
 # ???
-#: bashline.c:4310
+#: bashline.c:4479
 msgid "bash_execute_unix_command: cannot find keymap for command"
 msgstr "bash_execute_unix_command: nie można znaleźć mapy klawiszy dla polecenia"
 
-#: bashline.c:4459
+#: bashline.c:4637
 #, c-format
 msgid "%s: first non-whitespace character is not `\"'"
 msgstr "%s: pierwszym drukowalnym znakiem nie jest `\"'"
 
-#: bashline.c:4488
+#: bashline.c:4666
 #, c-format
 msgid "no closing `%c' in %s"
 msgstr "brak zamykającego `%c' w %s"
 
-#: bashline.c:4519
+#: bashline.c:4697
 #, c-format
 msgid "%s: missing colon separator"
 msgstr "%s: brak separującego dwukropka"
 
-#: bashline.c:4555
+#: bashline.c:4733
 #, c-format
 msgid "`%s': cannot unbind in command keymap"
 msgstr "`%s': nie można usunąć dowiązania w mapie poleceń"
@@ -94,7 +89,7 @@ msgstr "rozwijanie nawiasów: nie udało się przydzielić pamięci dla element
 msgid "brace expansion: failed to allocate memory for `%s'"
 msgstr "rozwijanie nawiasów: nie udało się przydzielić pamięci dla `%s'"
 
-#: builtins/alias.def:131 variables.c:1844
+#: builtins/alias.def:131 variables.c:1817
 #, c-format
 msgid "`%s': invalid alias name"
 msgstr "`%s': błędna nazwa aliasu"
@@ -167,7 +162,7 @@ msgstr ""
 msgid "HOME not set"
 msgstr "Nie ustawiono HOME"
 
-#: builtins/cd.def:335 builtins/common.c:161 test.c:901
+#: builtins/cd.def:335 builtins/common.c:161 test.c:916
 msgid "too many arguments"
 msgstr "za dużo argumentów"
 
@@ -194,7 +189,7 @@ msgstr "uwaga: "
 msgid "%s: usage: "
 msgstr "%s: składnia: "
 
-#: builtins/common.c:193 shell.c:516 shell.c:844
+#: builtins/common.c:193 shell.c:524 shell.c:866
 #, c-format
 msgid "%s: option requires an argument"
 msgstr "%s: opcja wymaga argumentu"
@@ -209,7 +204,7 @@ msgstr "%s: wymagany argument numeryczny"
 msgid "%s: not found"
 msgstr "%s: nie znaleziono"
 
-#: builtins/common.c:216 shell.c:857
+#: builtins/common.c:216 shell.c:879
 #, c-format
 msgid "%s: invalid option"
 msgstr "%s: nieprawidłowa opcja"
@@ -219,7 +214,7 @@ msgstr "%s: nieprawidłowa opcja"
 msgid "%s: invalid option name"
 msgstr "%s: nieprawidłowa nazwa opcji"
 
-#: builtins/common.c:230 execute_cmd.c:2373 general.c:368 general.c:373
+#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373
 #, c-format
 msgid "`%s': not a valid identifier"
 msgstr "`%s': nieprawidłowy identyfikator"
@@ -232,7 +227,7 @@ msgstr "błędna liczba ósemkowa"
 msgid "invalid hex number"
 msgstr "błędna liczba szesnastkowa"
 
-#: builtins/common.c:244 expr.c:1569
+#: builtins/common.c:244 expr.c:1574
 msgid "invalid number"
 msgstr "nieprawidłowa liczba"
 
@@ -246,88 +241,93 @@ msgstr "%s: nieprawidłowo określony sygnał"
 msgid "`%s': not a pid or valid job spec"
 msgstr "`%s': nie jest to nr PID ani prawidłowe określenie zadania"
 
-#: builtins/common.c:266 error.c:510
+#: builtins/common.c:266 error.c:536
 #, c-format
 msgid "%s: readonly variable"
 msgstr "%s: zmienna tylko do odczytu"
 
-#: builtins/common.c:274
+#: builtins/common.c:273
+#, c-format
+msgid "%s: cannot assign"
+msgstr "%s: nie można przypisać"
+
+#: builtins/common.c:281
 #, c-format
 msgid "%s: %s out of range"
 msgstr "%s: %s poza zakresem"
 
-#: builtins/common.c:274 builtins/common.c:276
+#: builtins/common.c:281 builtins/common.c:283
 msgid "argument"
 msgstr "argument"
 
-#: builtins/common.c:276
+#: builtins/common.c:283
 #, c-format
 msgid "%s out of range"
 msgstr "%s poza zakresem"
 
-#: builtins/common.c:284
+#: builtins/common.c:291
 #, c-format
 msgid "%s: no such job"
 msgstr "%s: brak takiego zadania"
 
-#: builtins/common.c:292
+#: builtins/common.c:299
 #, c-format
 msgid "%s: no job control"
 msgstr "%s: brak kontroli zadań"
 
-#: builtins/common.c:294
+#: builtins/common.c:301
 msgid "no job control"
 msgstr "brak kontroli zadań"
 
-#: builtins/common.c:304
+#: builtins/common.c:311
 #, c-format
 msgid "%s: restricted"
 msgstr "%s: ograniczony"
 
-#: builtins/common.c:306
+#: builtins/common.c:313
 msgid "restricted"
 msgstr "ograniczony"
 
-#: builtins/common.c:314
+#: builtins/common.c:321
 #, c-format
 msgid "%s: not a shell builtin"
 msgstr "%s: nie jest to polecenie powłoki"
 
-#: builtins/common.c:323
+#: builtins/common.c:330
 #, c-format
 msgid "write error: %s"
 msgstr "błąd zapisu: %s"
 
-#: builtins/common.c:331
+#: builtins/common.c:338
 #, c-format
 msgid "error setting terminal attributes: %s"
 msgstr "błąd podczas ustawiania atrybutów terminala: %s"
 
-#: builtins/common.c:333
+#: builtins/common.c:340
 #, c-format
 msgid "error getting terminal attributes: %s"
 msgstr "błąd podczas pobierania atrybutów terminala: %s"
 
-#: builtins/common.c:635
+#: builtins/common.c:642
 #, c-format
 msgid "%s: error retrieving current directory: %s: %s\n"
 msgstr "%s: błąd przy określaniu katalogu bieżącego: %s: %s\n"
 
-#: builtins/common.c:701 builtins/common.c:703
+#: builtins/common.c:708 builtins/common.c:710
 #, c-format
 msgid "%s: ambiguous job spec"
 msgstr "%s: niejednoznaczne określenie zadania"
 
-#: builtins/common.c:964
+#: builtins/common.c:971
 msgid "help not available in this version"
 msgstr "pomoc nie jest dostępna w tej wersji"
 
-#: builtins/common.c:1008 builtins/set.def:953 variables.c:3839
+#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825
 #, c-format
 msgid "%s: cannot unset: readonly %s"
 msgstr "%s: nie można anulować definicji: %s jest tylko do odczytu"
 
-#: builtins/common.c:1013 builtins/set.def:932 variables.c:3844
+#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830
 #, c-format
 msgid "%s: cannot unset"
 msgstr "%s: nie można anulować definicji"
@@ -337,108 +337,108 @@ msgstr "%s: nie można anulować definicji"
 msgid "%s: invalid action name"
 msgstr "%s: nieprawidłowa nazwa akcji"
 
-#: builtins/complete.def:486 builtins/complete.def:634
-#: builtins/complete.def:865
+#: builtins/complete.def:486 builtins/complete.def:642
+#: builtins/complete.def:873
 #, c-format
 msgid "%s: no completion specification"
 msgstr "%s: brak definicji dla uzupełnienia"
 
-#: builtins/complete.def:688
+#: builtins/complete.def:696
 msgid "warning: -F option may not work as you expect"
 msgstr "uwaga: opcja -F może działać inaczej niż oczekiwano"
 
-#: builtins/complete.def:690
+#: builtins/complete.def:698
 msgid "warning: -C option may not work as you expect"
 msgstr "uwaga: opcja -C może działać inaczej niż oczekiwano"
 
-#: builtins/complete.def:838
+#: builtins/complete.def:846
 msgid "not currently executing completion function"
 msgstr "aktualnie nie jest wykonywana funkcja dopełniania"
 
-#: builtins/declare.def:134
+#: builtins/declare.def:137
 msgid "can only be used in a function"
 msgstr "można używać tylko w funkcji"
 
-#: builtins/declare.def:363 builtins/declare.def:756
+#: builtins/declare.def:437
+msgid "cannot use `-f' to make functions"
+msgstr "nie można używać `-f' do tworzenia funkcji"
+
+#: builtins/declare.def:464 execute_cmd.c:6132
+#, c-format
+msgid "%s: readonly function"
+msgstr "%s: funkcja tylko do odczytu"
+
+#: builtins/declare.def:521 builtins/declare.def:804
 #, c-format
 msgid "%s: reference variable cannot be an array"
 msgstr "%s: zmienna referencyjna nie może być tablicą"
 
-#: builtins/declare.def:374 variables.c:3385
+#: builtins/declare.def:532 variables.c:3359
 #, c-format
 msgid "%s: nameref variable self references not allowed"
 msgstr "%s: zmienna referencyjna nie może wskazywać na siebie"
 
-#: builtins/declare.def:379 variables.c:2104 variables.c:3304 variables.c:3312
-#: variables.c:3382
+#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286
+#: variables.c:3356
 #, c-format
 msgid "%s: circular name reference"
 msgstr "%s: cykliczne odwołanie do nazwy"
 
-#: builtins/declare.def:384 builtins/declare.def:762 builtins/declare.def:773
+#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820
 #, c-format
 msgid "`%s': invalid variable name for name reference"
 msgstr "`%s': błędna nazwa zmiennej przy odwołaniu do nazwy"
 
-#: builtins/declare.def:514
-msgid "cannot use `-f' to make functions"
-msgstr "nie można używać `-f' do tworzenia funkcji"
-
-#: builtins/declare.def:526 execute_cmd.c:5986
-#, c-format
-msgid "%s: readonly function"
-msgstr "%s: funkcja tylko do odczytu"
-
-#: builtins/declare.def:824
-#, c-format
-msgid "%s: quoted compound array assignment deprecated"
-msgstr "%s: przypisanie złożonej tablicy z cytowaniem jest przestarzałe"
-
-#: builtins/declare.def:838
+#: builtins/declare.def:856
 #, c-format
 msgid "%s: cannot destroy array variables in this way"
 msgstr "%s: nie można w ten sposób unicestwić zmiennej tablicowej"
 
-#: builtins/declare.def:845 builtins/read.def:815
+#: builtins/declare.def:862 builtins/read.def:887
 #, c-format
 msgid "%s: cannot convert associative to indexed array"
 msgstr "%s: nie można przekształcić tablicy asocjacyjnej na indeksowaną"
 
-#: builtins/enable.def:143 builtins/enable.def:151
+#: builtins/declare.def:891
+#, c-format
+msgid "%s: quoted compound array assignment deprecated"
+msgstr "%s: przypisanie złożonej tablicy z cytowaniem jest przestarzałe"
+
+#: builtins/enable.def:145 builtins/enable.def:153
 msgid "dynamic loading not available"
 msgstr "ładowanie dynamiczne nie jest dostępne"
 
-#: builtins/enable.def:343
+#: builtins/enable.def:376
 #, c-format
 msgid "cannot open shared object %s: %s"
 msgstr "nie można otworzyć obiektu współdzielonego %s: %s"
 
-#: builtins/enable.def:371
+#: builtins/enable.def:405
 #, c-format
 msgid "cannot find %s in shared object %s: %s"
 msgstr "nie można znaleźć %s w obiekcie współdzielonym %s: %s"
 
-#: builtins/enable.def:388
+#: builtins/enable.def:422
 #, c-format
 msgid "%s: dynamic builtin already loaded"
 msgstr "%s: dynamiczne polecenie wbudowane już załadowane"
 
-#: builtins/enable.def:392
+#: builtins/enable.def:426
 #, c-format
 msgid "load function for %s returns failure (%d): not loaded"
 msgstr "funkcja ładująca dla %s zwraca niepowodzenie (%d): nie załadowano"
 
-#: builtins/enable.def:517
+#: builtins/enable.def:551
 #, c-format
 msgid "%s: not dynamically loaded"
 msgstr "%s: nie jest ładowany dynamicznie"
 
-#: builtins/enable.def:543
+#: builtins/enable.def:577
 #, c-format
 msgid "%s: cannot delete: %s"
 msgstr "%s: nie można usunąć: %s"
 
-#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5818
+#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959
 #, c-format
 msgid "%s: is a directory"
 msgstr "%s: jest katalogiem"
@@ -453,7 +453,7 @@ msgstr "%s: nie jest zwykłym plikiem"
 msgid "%s: file is too large"
 msgstr "%s: plik jest za duży"
 
-#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1647
+#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673
 #, c-format
 msgid "%s: cannot execute binary file"
 msgstr "%s: nie można uruchomić pliku binarnego"
@@ -551,12 +551,12 @@ msgstr ""
 "żaden temat pomocy nie pasuje do `%s'. Spróbuj `help help', `man -k %s'\n"
 "lub `info %s'."
 
-#: builtins/help.def:224
+#: builtins/help.def:223
 #, c-format
 msgid "%s: cannot open: %s"
 msgstr "%s: nie można otworzyć: %s"
 
-#: builtins/help.def:524
+#: builtins/help.def:523
 #, c-format
 msgid ""
 "These shell commands are defined internally.  Type `help' to see this list.\n"
@@ -577,21 +577,21 @@ msgstr ""
 "Gwiazdka (*) po nazwie oznacza, że dane polecenie jest wyłączone.\n"
 "\n"
 
-#: builtins/history.def:155
+#: builtins/history.def:159
 msgid "cannot use more than one of -anrw"
 msgstr "nie można używać więcej niż jednego spośród -anrw"
 
-#: builtins/history.def:188 builtins/history.def:198 builtins/history.def:213
-#: builtins/history.def:230 builtins/history.def:242 builtins/history.def:249
+#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215
+#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247
 msgid "history position"
 msgstr "pozycja historii"
 
-#: builtins/history.def:340
+#: builtins/history.def:338
 #, c-format
 msgid "%s: invalid timestamp"
 msgstr "%s: nieprawidłowy znacznik czasu"
 
-#: builtins/history.def:451
+#: builtins/history.def:449
 #, c-format
 msgid "%s: history expansion failed"
 msgstr "%s: rozwinięcie wg historii nie powiodło się"
@@ -614,78 +614,78 @@ msgstr "%s: argumentami muszą być numery procesów lub zadań"
 msgid "Unknown error"
 msgstr "Nieznany błąd"
 
-#: builtins/let.def:97 builtins/let.def:122 expr.c:639 expr.c:657
+#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658
 msgid "expression expected"
 msgstr "spodziewano się wyrażenia"
 
-#: builtins/mapfile.def:178
+#: builtins/mapfile.def:180
 #, c-format
 msgid "%s: not an indexed array"
 msgstr "%s: nie jest tablicą indeksowaną"
 
-#: builtins/mapfile.def:271 builtins/read.def:308
+#: builtins/mapfile.def:276 builtins/read.def:336
 #, c-format
 msgid "%s: invalid file descriptor specification"
 msgstr "%s: nieprawidłowo określony deskryptor pliku"
 
-#: builtins/mapfile.def:279 builtins/read.def:315
+#: builtins/mapfile.def:284 builtins/read.def:343
 #, c-format
 msgid "%d: invalid file descriptor: %s"
 msgstr "%d: nieprawidłowy deskryptor pliku: %s"
 
-#: builtins/mapfile.def:288 builtins/mapfile.def:326
+#: builtins/mapfile.def:293 builtins/mapfile.def:331
 #, c-format
 msgid "%s: invalid line count"
 msgstr "%s: błędna liczba linii"
 
-#: builtins/mapfile.def:299
+#: builtins/mapfile.def:304
 #, c-format
 msgid "%s: invalid array origin"
 msgstr "%s: błędny początek tablicy"
 
-#: builtins/mapfile.def:316
+#: builtins/mapfile.def:321
 #, c-format
 msgid "%s: invalid callback quantum"
 msgstr "%s: błędna liczba linii między wywołaniami"
 
-#: builtins/mapfile.def:349
+#: builtins/mapfile.def:354
 msgid "empty array variable name"
 msgstr "pusta nazwa zmiennej tablicowej"
 
-#: builtins/mapfile.def:370
+#: builtins/mapfile.def:375
 msgid "array variable support required"
 msgstr "wymagana obsługa zmiennych tablicowych"
 
-#: builtins/printf.def:419
+#: builtins/printf.def:430
 #, c-format
 msgid "`%s': missing format character"
 msgstr "`%s': brak znaku formatującego"
 
-#: builtins/printf.def:474
+#: builtins/printf.def:485
 #, c-format
 msgid "`%c': invalid time format specification"
 msgstr "`%c': błędne określenie formatu czasu"
 
-#: builtins/printf.def:676
+#: builtins/printf.def:708
 #, c-format
 msgid "`%c': invalid format character"
 msgstr "`%c': nieprawidłowy znak formatujący"
 
-#: builtins/printf.def:702
+#: builtins/printf.def:734
 #, c-format
 msgid "warning: %s: %s"
 msgstr "uwaga: %s: %s"
 
-#: builtins/printf.def:788
+#: builtins/printf.def:822
 #, c-format
 msgid "format parsing problem: %s"
 msgstr "problem z analizą formatu: %s"
 
-#: builtins/printf.def:885
+#: builtins/printf.def:919
 msgid "missing hex digit for \\x"
 msgstr "brak cyfry szesnastkowej dla \\x"
 
-#: builtins/printf.def:900
+#: builtins/printf.def:934
 #, c-format
 msgid "missing unicode digit for \\%c"
 msgstr "brak cyfry unikodowej dla \\%c"
@@ -834,12 +834,12 @@ msgstr ""
 "    \n"
 "    Zawartość stosu katalogów można zobaczyć za pomocą polecenia `dirs'."
 
-#: builtins/read.def:280
+#: builtins/read.def:308
 #, c-format
 msgid "%s: invalid timeout specification"
 msgstr "%s: nieprawidłowo określony limit czasu"
 
-#: builtins/read.def:755
+#: builtins/read.def:827
 #, c-format
 msgid "read error: %d: %s"
 msgstr "błąd odczytu: %d: %s"
@@ -852,7 +852,7 @@ msgstr "wyjście przez `return' możliwe tylko z funkcji lub skryptu"
 msgid "cannot simultaneously unset a function and a variable"
 msgstr "nie można jednocześnie anulować definicji funkcji i zmiennej"
 
-#: builtins/set.def:966
+#: builtins/set.def:969
 #, c-format
 msgid "%s: not an array variable"
 msgstr "%s: nie jest zmienną tablicową"
@@ -871,11 +871,11 @@ msgstr "%s: nie można wyeksportować"
 msgid "shift count"
 msgstr "licznik przesunięcia"
 
-#: builtins/shopt.def:310
+#: builtins/shopt.def:323
 msgid "cannot set and unset shell options simultaneously"
 msgstr "nie można opcji powłoki jednocześnie ustawić i unieważnić"
 
-#: builtins/shopt.def:428
+#: builtins/shopt.def:444
 #, c-format
 msgid "%s: invalid shell option name"
 msgstr "%s: nieprawidłowa nazwa opcji powłoki"
@@ -942,16 +942,16 @@ msgstr "%s: nieprawidłowy argument stanowiący ograniczenie"
 msgid "`%c': bad command"
 msgstr "`%c': złe polecenie"
 
-#: builtins/ulimit.def:455
+#: builtins/ulimit.def:464
 #, c-format
 msgid "%s: cannot get limit: %s"
 msgstr "%s: nie można odczytać ograniczenia: %s"
 
-#: builtins/ulimit.def:481
+#: builtins/ulimit.def:490
 msgid "limit"
 msgstr "ograniczenie"
 
-#: builtins/ulimit.def:493 builtins/ulimit.def:793
+#: builtins/ulimit.def:502 builtins/ulimit.def:802
 #, c-format
 msgid "%s: cannot modify limit: %s"
 msgstr "%s: nie można zmienić ograniczenia: %s"
@@ -970,7 +970,7 @@ msgstr "`%c': nieprawidłowy operator trybu symbolicznego"
 msgid "`%c': invalid symbolic mode character"
 msgstr "`%c': nieprawidłowy znak trybu symbolicznego"
 
-#: error.c:89 error.c:347 error.c:349 error.c:351
+#: error.c:89 error.c:373 error.c:375 error.c:377
 msgid " line "
 msgstr " linia "
 
@@ -990,96 +990,106 @@ msgstr "Przerywanie..."
 msgid "INFORM: "
 msgstr "INFORM: "
 
-#: error.c:462
+#: error.c:310
+#, c-format
+msgid "DEBUG warning: "
+msgstr "DIAGNOSTYCZNE ostrzeżenie: "
+
+#: error.c:488
 msgid "unknown command error"
 msgstr "nieznany błąd polecenia"
 
-#: error.c:463
+#: error.c:489
 msgid "bad command type"
 msgstr "zły rodzaj polecenia"
 
-#: error.c:464
+#: error.c:490
 msgid "bad connector"
 msgstr "zły łącznik"
 
-#: error.c:465
+#: error.c:491
 msgid "bad jump"
 msgstr "zły skok"
 
-#: error.c:503
+#: error.c:529
 #, c-format
 msgid "%s: unbound variable"
 msgstr "%s: nieustawiona zmienna"
 
-#: eval.c:242
+#: eval.c:243
 msgid "\atimed out waiting for input: auto-logout\n"
 msgstr "\aprzekroczony czas oczekiwania na dane wejściowe: auto-wylogowanie\n"
 
-#: execute_cmd.c:537
+#: execute_cmd.c:555
 #, c-format
 msgid "cannot redirect standard input from /dev/null: %s"
 msgstr "nie można przekierować standardowego wejścia z /dev/null: %s"
 
-#: execute_cmd.c:1297
+#: execute_cmd.c:1317
 #, c-format
 msgid "TIMEFORMAT: `%c': invalid format character"
 msgstr "TIMEFORMAT: `%c': nieprawidłowy znak formatujący"
 
-#: execute_cmd.c:2362
+#: execute_cmd.c:2391
 #, c-format
 msgid "execute_coproc: coproc [%d:%s] still exists"
 msgstr "execute_coproc: koproces [%d:%s] nadal istnieje"
 
-#: execute_cmd.c:2486
+#: execute_cmd.c:2524
 msgid "pipe error"
 msgstr "błąd potoku"
 
-#: execute_cmd.c:4793
+#: execute_cmd.c:4923
 #, c-format
 msgid "eval: maximum eval nesting level exceeded (%d)"
 msgstr "eval: przekroczono maksymalny poziom zagnieżdżenia polecenia eval (%d)"
 
-#: execute_cmd.c:4805
+#: execute_cmd.c:4935
 #, c-format
 msgid "%s: maximum source nesting level exceeded (%d)"
 msgstr "%s: przekroczono maksymalny poziom zagnieżdżenia polecenia source (%d)"
 
-#: execute_cmd.c:4913
+#: execute_cmd.c:5043
 #, c-format
 msgid "%s: maximum function nesting level exceeded (%d)"
 msgstr "%s: przekroczono maksymalny poziom zagnieżdżenia funkcji (%d)"
 
-#: execute_cmd.c:5467
+#: execute_cmd.c:5598
 #, c-format
 msgid "%s: restricted: cannot specify `/' in command names"
 msgstr "%s: ograniczony: nie można podawać `/' w nazwach poleceń"
 
-#: execute_cmd.c:5574
+#: execute_cmd.c:5715
 #, c-format
 msgid "%s: command not found"
 msgstr "%s: nie znaleziono polecenia"
 
-#: execute_cmd.c:5816
+#: execute_cmd.c:5957
 #, c-format
 msgid "%s: %s"
 msgstr "%s: %s"
 
-#: execute_cmd.c:5854
+#: execute_cmd.c:5975
+#, c-format
+msgid "%s: cannot execute: required file not found"
+msgstr "%s: nie można uruchomić: nie znaleziono wymaganego pliku"
+
+#: execute_cmd.c:6000
 #, c-format
 msgid "%s: %s: bad interpreter"
 msgstr "%s: %s: zły interpreter"
 
-#: execute_cmd.c:5891
+#: execute_cmd.c:6037
 #, c-format
 msgid "%s: cannot execute binary file: %s"
 msgstr "%s: nie można uruchomić pliku binarnego: %s"
 
-#: execute_cmd.c:5977
+#: execute_cmd.c:6123
 #, c-format
 msgid "`%s': is a special builtin"
 msgstr "`%s' jest specjalnym poleceniem wewnętrznym"
 
-#: execute_cmd.c:6029
+#: execute_cmd.c:6175
 #, c-format
 msgid "cannot duplicate fd %d to fd %d"
 msgstr "nie można skopiować deskryptora pliku %d do %d"
@@ -1092,69 +1102,69 @@ msgstr "przekroczone ograniczenie poziomu rekursji dla wyrażenia"
 msgid "recursion stack underflow"
 msgstr "niedomiar stosu rekursji"
 
-#: expr.c:477
+#: expr.c:478
 msgid "syntax error in expression"
 msgstr "błąd składniowy w wyrażeniu"
 
-#: expr.c:521
+#: expr.c:522
 msgid "attempted assignment to non-variable"
 msgstr "próba przypisania do nie-zmiennej"
 
-#: expr.c:530
+#: expr.c:531
 msgid "syntax error in variable assignment"
 msgstr "błąd składniowy w przypisaniu zmiennej"
 
-#: expr.c:544 expr.c:911
+#: expr.c:545 expr.c:912
 msgid "division by 0"
 msgstr "dzielenie przez 0"
 
 # ???
-#: expr.c:592
+#: expr.c:593
 msgid "bug: bad expassign token"
 msgstr "błąd: zły prefiks operatora przypisującego"
 
-#: expr.c:646
+#: expr.c:647
 msgid "`:' expected for conditional expression"
 msgstr "spodziewano się `:' w wyrażeniu warunkowym"
 
-#: expr.c:972
+#: expr.c:973
 msgid "exponent less than 0"
 msgstr "wykładnik mniejszy niż 0"
 
-#: expr.c:1029
+#: expr.c:1030
 msgid "identifier expected after pre-increment or pre-decrement"
 msgstr "spodziewany identyfikator po operatorze preinkrementacji lub predekrementacji"
 
-#: expr.c:1056
+#: expr.c:1057
 msgid "missing `)'"
 msgstr "brakujący `)'"
 
-#: expr.c:1107 expr.c:1487
+#: expr.c:1108 expr.c:1492
 msgid "syntax error: operand expected"
 msgstr "błąd składni: spodziewany argument"
 
-#: expr.c:1489
+#: expr.c:1494
 msgid "syntax error: invalid arithmetic operator"
 msgstr "błąd składni: nieprawidłowy operator arytmetyczny"
 
-#: expr.c:1513
+#: expr.c:1518
 #, c-format
 msgid "%s%s%s: %s (error token is \"%s\")"
 msgstr "%s%s%s: %s (błędny znacznik to \"%s\")"
 
-#: expr.c:1573
+#: expr.c:1578
 msgid "invalid arithmetic base"
 msgstr "nieprawidłowa podstawa arytmetyczna"
 
-#: expr.c:1582
+#: expr.c:1587
 msgid "invalid integer constant"
 msgstr "błędna stała całkowita"
 
-#: expr.c:1598
+#: expr.c:1603
 msgid "value too great for base"
 msgstr "wartość za duża na podstawę"
 
-#: expr.c:1647
+#: expr.c:1652
 #, c-format
 msgid "%s: expression error\n"
 msgstr "%s: błąd w wyrażeniu\n"
@@ -1163,7 +1173,7 @@ msgstr "%s: błąd w wyrażeniu\n"
 msgid "getcwd: cannot access parent directories"
 msgstr "getcwd: niemożliwy dostęp do katalogów nadrzędnych"
 
-#: input.c:99 subst.c:6069
+#: input.c:99 subst.c:6208
 #, c-format
 msgid "cannot reset nodelay mode for fd %d"
 msgstr "nie można wyłączyć trybu nieblokującego dla deskryptora %d"
@@ -1182,168 +1192,168 @@ msgstr "save_bash_input: bufor dla nowego deskryptora %d już istnieje"
 msgid "start_pipeline: pgrp pipe"
 msgstr "start_pipeline: pgrp pipe"
 
-#: jobs.c:906
+#: jobs.c:907
 #, c-format
 msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr "bgp_delete: PĘTLA: psi (%d) == storage[psi].bucket_next"
 
-#: jobs.c:959
+#: jobs.c:960
 #, c-format
 msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr "bgp_search: PĘTLA: psi (%d) == storage[psi].bucket_next"
 
 # ???
-#: jobs.c:1283
+#: jobs.c:1279
 #, c-format
 msgid "forked pid %d appears in running job %d"
 msgstr "proces o PID %d występuje w działającym zadaniu %d"
 
-#: jobs.c:1402
+#: jobs.c:1397
 #, c-format
 msgid "deleting stopped job %d with process group %ld"
 msgstr "usuwanie zatrzymanego zadania %d z grupą procesów %ld"
 
-#: jobs.c:1511
+#: jobs.c:1502
 #, c-format
 msgid "add_process: pid %5ld (%s) marked as still alive"
 msgstr "add_process: pid %5ld (%s) oznaczony jako nadal żywy"
 
-#: jobs.c:1850
+#: jobs.c:1839
 #, c-format
 msgid "describe_pid: %ld: no such pid"
 msgstr "describe_pid: %ld: brak takiego PID-u"
 
-#: jobs.c:1865
+#: jobs.c:1854
 #, c-format
 msgid "Signal %d"
 msgstr "Sygnał %d"
 
-#: jobs.c:1879 jobs.c:1905
+#: jobs.c:1868 jobs.c:1894
 msgid "Done"
 msgstr "Zakończono"
 
-#: jobs.c:1884 siglist.c:122
+#: jobs.c:1873 siglist.c:123
 msgid "Stopped"
 msgstr "Zatrzymano"
 
-#: jobs.c:1888
+#: jobs.c:1877
 #, c-format
 msgid "Stopped(%s)"
 msgstr "Zatrzymano(%s)"
 
-#: jobs.c:1892
+#: jobs.c:1881
 msgid "Running"
 msgstr "Działa"
 
-#: jobs.c:1909
+#: jobs.c:1898
 #, c-format
 msgid "Done(%d)"
 msgstr "Zakończono(%d)"
 
-#: jobs.c:1911
+#: jobs.c:1900
 #, c-format
 msgid "Exit %d"
 msgstr "Kod wyjścia %d"
 
-#: jobs.c:1914
+#: jobs.c:1903
 msgid "Unknown status"
 msgstr "Stan nieznany"
 
-#: jobs.c:2001
+#: jobs.c:1990
 #, c-format
 msgid "(core dumped) "
 msgstr "(zrzut pamięci) "
 
-#: jobs.c:2020
+#: jobs.c:2009
 #, c-format
 msgid "  (wd: %s)"
 msgstr "  (katalog: %s)"
 
-#: jobs.c:2259
+#: jobs.c:2250
 #, c-format
 msgid "child setpgid (%ld to %ld)"
 msgstr "setpgid potomka (%ld na %ld)"
 
-#: jobs.c:2617 nojobs.c:664
+#: jobs.c:2608 nojobs.c:666
 #, c-format
 msgid "wait: pid %ld is not a child of this shell"
 msgstr "wait: PID %ld nie jest potomkiem tej powłoki"
 
-#: jobs.c:2893
+#: jobs.c:2884
 #, c-format
 msgid "wait_for: No record of process %ld"
 msgstr "wait_for: Brak rekordu dla procesu %ld"
 
-#: jobs.c:3236
+#: jobs.c:3223
 #, c-format
 msgid "wait_for_job: job %d is stopped"
 msgstr "wait_for_job: zadanie %d jest zatrzymane"
 
-#: jobs.c:3564
+#: jobs.c:3551
 #, c-format
 msgid "%s: no current jobs"
 msgstr "%s: brak bieżących zadań"
 
-#: jobs.c:3571
+#: jobs.c:3558
 #, c-format
 msgid "%s: job has terminated"
 msgstr "%s: zadanie zostało przerwane"
 
-#: jobs.c:3580
+#: jobs.c:3567
 #, c-format
 msgid "%s: job %d already in background"
 msgstr "%s: zadanie %d już pracuje w tle"
 
-#: jobs.c:3806
+#: jobs.c:3793
 msgid "waitchld: turning on WNOHANG to avoid indefinite block"
 msgstr "waitchld: wyłączanie WNOHANG w celu uniknięcia nieskończonego oczekiwania"
 
-#: jobs.c:4320
+#: jobs.c:4307
 #, c-format
 msgid "%s: line %d: "
 msgstr "%s: linia %d: "
 
-#: jobs.c:4334 nojobs.c:919
+#: jobs.c:4321 nojobs.c:921
 #, c-format
 msgid " (core dumped)"
 msgstr " (zrzut pamięci)"
 
-#: jobs.c:4346 jobs.c:4359
+#: jobs.c:4333 jobs.c:4346
 #, c-format
 msgid "(wd now: %s)\n"
 msgstr "(katalog: %s)\n"
 
-#: jobs.c:4391
+#: jobs.c:4378
 msgid "initialize_job_control: getpgrp failed"
 msgstr "initialize_job_control: getpgrp nie powiodło się"
 
-#: jobs.c:4447
+#: jobs.c:4434
 msgid "initialize_job_control: no job control in background"
 msgstr "initialize_job_control: brak kontroli zadań w tle"
 
-#: jobs.c:4463
+#: jobs.c:4450
 msgid "initialize_job_control: line discipline"
 msgstr "initialize_job_control: dyscyplina linii"
 
-#: jobs.c:4473
+#: jobs.c:4460
 msgid "initialize_job_control: setpgid"
 msgstr "initialize_job_control: setpgid"
 
-#: jobs.c:4494 jobs.c:4503
+#: jobs.c:4481 jobs.c:4490
 #, c-format
 msgid "cannot set terminal process group (%d)"
 msgstr "nie można ustawić grupy procesów terminala (%d)"
 
-#: jobs.c:4508
+#: jobs.c:4495
 msgid "no job control in this shell"
 msgstr "w tej powłoce nie ma kontroli zadań"
 
-#: lib/malloc/malloc.c:353
+#: lib/malloc/malloc.c:367
 #, c-format
 msgid "malloc: failed assertion: %s\n"
 msgstr "malloc: założenie, że %s nie jest spełnione\n"
 
-#: lib/malloc/malloc.c:369
+#: lib/malloc/malloc.c:383
 #, c-format
 msgid ""
 "\r\n"
@@ -1352,48 +1362,48 @@ msgstr ""
 "\r\n"
 "malloc: %s:%d: spartaczone założenie\r\n"
 
-#: lib/malloc/malloc.c:370 lib/malloc/malloc.c:933
+#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941
 msgid "unknown"
 msgstr "nieznany"
 
 # ???
-#: lib/malloc/malloc.c:882
+#: lib/malloc/malloc.c:892
 msgid "malloc: block on free list clobbered"
 msgstr "malloc: nieprawidłowy blok na liście wolnych bloków"
 
-#: lib/malloc/malloc.c:972
+#: lib/malloc/malloc.c:980
 msgid "free: called with already freed block argument"
 msgstr "free: wywołane dla bloku, który już został zwolniony"
 
-#: lib/malloc/malloc.c:975
+#: lib/malloc/malloc.c:983
 msgid "free: called with unallocated block argument"
 msgstr "free: wywołane dla bloku, który nie został przydzielony"
 
-#: lib/malloc/malloc.c:994
+#: lib/malloc/malloc.c:1001
 msgid "free: underflow detected; mh_nbytes out of range"
 msgstr "free: wykryto niedomiar; mh_nbytes poza zakresem"
 
-#: lib/malloc/malloc.c:1001
+#: lib/malloc/malloc.c:1007
 msgid "free: underflow detected; magic8 corrupted"
 msgstr "free: wykryto niedomiar; uszkodzenie magic8"
 
-#: lib/malloc/malloc.c:1009
+#: lib/malloc/malloc.c:1014
 msgid "free: start and end chunk sizes differ"
 msgstr "free: rozmiar początkowy i końcowy fragmentu są różne"
 
-#: lib/malloc/malloc.c:1119
+#: lib/malloc/malloc.c:1176
 msgid "realloc: called with unallocated block argument"
 msgstr "realloc: wywołane dla bloku, który nie został przydzielony"
 
-#: lib/malloc/malloc.c:1134
+#: lib/malloc/malloc.c:1191
 msgid "realloc: underflow detected; mh_nbytes out of range"
 msgstr "realloc: wykryto niedomiar; mh_nbytes poza zakresem"
 
-#: lib/malloc/malloc.c:1141
+#: lib/malloc/malloc.c:1197
 msgid "realloc: underflow detected; magic8 corrupted"
 msgstr "realloc: wykryto niedomiar; uszkodzenie magic8"
 
-#: lib/malloc/malloc.c:1150
+#: lib/malloc/malloc.c:1205
 msgid "realloc: start and end chunk sizes differ"
 msgstr "realloc: rozmiar początkowy i końcowy fragmentu są różne"
 
@@ -1435,22 +1445,22 @@ msgstr "%s: źle określona ścieżka sieciowa"
 msgid "network operations not supported"
 msgstr "operacje sieciowe nie są wspierane"
 
-#: locale.c:217
+#: locale.c:219
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s)"
 msgstr "setlocale: LC_ALL: nie można zmienić lokalizacji (%s)"
 
-#: locale.c:219
+#: locale.c:221
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s): %s"
 msgstr "setlocale: LC_ALL: nie można zmienić lokalizacji (%s): %s"
 
-#: locale.c:292
+#: locale.c:294
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s)"
 msgstr "setlocale: %s: nie można zmienić lokalizacji (%s)"
 
-#: locale.c:294
+#: locale.c:296
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s): %s"
 msgstr "setlocale: %s: nie można zmienić lokalizacji (%s): %s"
@@ -1468,136 +1478,136 @@ msgstr "Masz nową pocztę w $_"
 msgid "The mail in %s has been read\n"
 msgstr "Poczta w %s jest przeczytana\n"
 
-#: make_cmd.c:317
+#: make_cmd.c:314
 msgid "syntax error: arithmetic expression required"
 msgstr "błąd składni: oczekiwano wyrażenia arytmetycznego"
 
-#: make_cmd.c:319
+#: make_cmd.c:316
 msgid "syntax error: `;' unexpected"
 msgstr "błąd składni: oczekiwany `;'"
 
-#: make_cmd.c:320
+#: make_cmd.c:317
 #, c-format
 msgid "syntax error: `((%s))'"
 msgstr "błąd składni: `((%s))'"
 
-#: make_cmd.c:572
+#: make_cmd.c:569
 #, c-format
 msgid "make_here_document: bad instruction type %d"
 msgstr "make_here_document: zły rodzaj instrukcji %d"
 
-#: make_cmd.c:657
+#: make_cmd.c:668
 #, c-format
 msgid "here-document at line %d delimited by end-of-file (wanted `%s')"
 msgstr "dokument miejscowy w linii %d ograniczony końcem pliku (oczekiwano `%s')"
 
-#: make_cmd.c:756
+#: make_cmd.c:769
 #, c-format
 msgid "make_redirection: redirection instruction `%d' out of range"
 msgstr "make_redirection: instrukcja przekierowania `%d' poza zakresem"
 
-#: parse.y:2393
+#: parse.y:2428
 #, c-format
 msgid "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line truncated"
 msgstr "shell_getc: shell_input_line_size (%zu) przekracza SIZE_MAX (%lu): linia skrócona"
 
-#: parse.y:2826
+#: parse.y:2921
 msgid "maximum here-document count exceeded"
 msgstr "przekroczono maksymalną liczbę dokumentów w miejscu"
 
-#: parse.y:3581 parse.y:3957 parse.y:4556
+#: parse.y:3684 parse.y:4244 parse.y:6148
 #, c-format
 msgid "unexpected EOF while looking for matching `%c'"
 msgstr "nieoczekiwany EOF podczas poszukiwania pasującego `%c'"
 
-#: parse.y:4696
+#: parse.y:4452
 msgid "unexpected EOF while looking for `]]'"
 msgstr "nieoczekiwany EOF podczas poszukiwania `]]'"
 
-#: parse.y:4701
+#: parse.y:4457
 #, c-format
 msgid "syntax error in conditional expression: unexpected token `%s'"
 msgstr "błąd składni w wyrażeniu warunkowym: nieoczekiwany znacznik `%s'"
 
-#: parse.y:4705
+#: parse.y:4461
 msgid "syntax error in conditional expression"
 msgstr "błąd składni w wyrażeniu warunkowym"
 
-#: parse.y:4783
+#: parse.y:4539
 #, c-format
 msgid "unexpected token `%s', expected `)'"
 msgstr "nieoczekiwany znacznik `%s', oczekiwano `)'"
 
-#: parse.y:4787
+#: parse.y:4543
 msgid "expected `)'"
 msgstr "oczekiwano `)'"
 
-#: parse.y:4815
+#: parse.y:4571
 #, c-format
 msgid "unexpected argument `%s' to conditional unary operator"
 msgstr "nieoczekiwany argument `%s' jednoargumentowego operatora warunkowego"
 
-#: parse.y:4819
+#: parse.y:4575
 msgid "unexpected argument to conditional unary operator"
 msgstr "nieoczekiwany argument jednoargumentowego operatora warunkowego"
 
-#: parse.y:4865
+#: parse.y:4621
 #, c-format
 msgid "unexpected token `%s', conditional binary operator expected"
 msgstr "nieoczekiwany argument `%s', oczekiwano dwuarg. operatora warunkowego"
 
-#: parse.y:4869
+#: parse.y:4625
 msgid "conditional binary operator expected"
 msgstr "oczekiwano dwuargumentowego operatora warunkowego"
 
-#: parse.y:4891
+#: parse.y:4647
 #, c-format
 msgid "unexpected argument `%s' to conditional binary operator"
 msgstr "nieoczekiwany argument `%s' dwuargumentowego operatora warunkowego"
 
-#: parse.y:4895
+#: parse.y:4651
 msgid "unexpected argument to conditional binary operator"
 msgstr "nieoczekiwany argument dwuargumentowego operatora warunkowego"
 
-#: parse.y:4906
+#: parse.y:4662
 #, c-format
 msgid "unexpected token `%c' in conditional command"
 msgstr "nieoczekiwany znacznik `%c' w poleceniu warunkowym"
 
-#: parse.y:4909
+#: parse.y:4665
 #, c-format
 msgid "unexpected token `%s' in conditional command"
 msgstr "nieoczekiwany znacznik `%s' w poleceniu warunkowym"
 
-#: parse.y:4913
+#: parse.y:4669
 #, c-format
 msgid "unexpected token %d in conditional command"
 msgstr "nieoczekiwany znacznik %d w poleceniu warunkowym"
 
-#: parse.y:6336
+#: parse.y:6118
 #, c-format
 msgid "syntax error near unexpected token `%s'"
 msgstr "błąd składni przy nieoczekiwanym znaczniku `%s'"
 
-#: parse.y:6355
+#: parse.y:6137
 #, c-format
 msgid "syntax error near `%s'"
 msgstr "błąd składni przy `%s'"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error: unexpected end of file"
 msgstr "błąd składni: nieoczekiwany koniec pliku"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error"
 msgstr "błąd składni"
 
-#: parse.y:6428
+#: parse.y:6216
 #, c-format
 msgid "Use \"%s\" to leave the shell.\n"
 msgstr "Użyj \"%s\", aby opuścić tę powłokę.\n"
 
-#: parse.y:6602
+#: parse.y:6394
 msgid "unexpected EOF while looking for matching `)'"
 msgstr "nieoczekiwany EOF podczas poszukiwania pasującego `)'"
 
@@ -1635,94 +1645,94 @@ msgstr "xtrace_set: pusty wskaźnik pliku"
 msgid "xtrace fd (%d) != fileno xtrace fp (%d)"
 msgstr "xtrace fd (%d) != fileno xtrace fp (%d)"
 
-#: print_cmd.c:1540
+#: print_cmd.c:1545
 #, c-format
 msgid "cprintf: `%c': invalid format character"
 msgstr "cprintf: `%c': nieprawidłowy znak formatujący"
 
-#: redir.c:149 redir.c:197
+#: redir.c:150 redir.c:198
 msgid "file descriptor out of range"
 msgstr "deskryptor pliku poza zakresem"
 
-#: redir.c:204
+#: redir.c:205
 #, c-format
 msgid "%s: ambiguous redirect"
 msgstr "%s: niejednoznaczne przekierowanie"
 
-#: redir.c:208
+#: redir.c:209
 #, c-format
 msgid "%s: cannot overwrite existing file"
 msgstr "%s: nie można nadpisać istniejącego pliku"
 
-#: redir.c:213
+#: redir.c:214
 #, c-format
 msgid "%s: restricted: cannot redirect output"
 msgstr "%s: ograniczony: nie można przekierować wyjścia"
 
-#: redir.c:218
+#: redir.c:219
 #, c-format
 msgid "cannot create temp file for here-document: %s"
 msgstr "nie można utworzyć pliku tymczasowego dla dokumentu miejscowego: %s"
 
-#: redir.c:222
+#: redir.c:223
 #, c-format
 msgid "%s: cannot assign fd to variable"
 msgstr "%s: nie można przypisać deskryptora pliku do zmiennej"
 
-#: redir.c:649
+#: redir.c:650
 msgid "/dev/(tcp|udp)/host/port not supported without networking"
 msgstr "/dev/(tcp|udp)/host/port nie są wspierane bez sieci"
 
-#: redir.c:938 redir.c:1053 redir.c:1114 redir.c:1284
+#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303
 msgid "redirection error: cannot duplicate fd"
 msgstr "błąd przekierowania: nie można powielić deskryptora pliku"
 
-#: shell.c:347
+#: shell.c:353
 msgid "could not find /tmp, please create!"
 msgstr "nie można znaleźć /tmp, proszę o utworzenie!"
 
-#: shell.c:351
+#: shell.c:357
 msgid "/tmp must be a valid directory name"
 msgstr "/tmp musi być prawidłową nazwą katalogu"
 
-#: shell.c:804
+#: shell.c:826
 msgid "pretty-printing mode ignored in interactive shells"
 msgstr "tryb ładnego wypisywania jest ignorowany w powłokach interaktywnych"
 
-#: shell.c:948
+#: shell.c:972
 #, c-format
 msgid "%c%c: invalid option"
 msgstr "%c%c: nieprawidłowa opcja"
 
-#: shell.c:1319
+#: shell.c:1343
 #, c-format
 msgid "cannot set uid to %d: effective uid %d"
 msgstr "nie można ustawić uid-a na %d: efektywny uid %d"
 
-#: shell.c:1330
+#: shell.c:1354
 #, c-format
 msgid "cannot set gid to %d: effective gid %d"
 msgstr "nie można ustawić gid-a na %d: efektywny gid %d"
 
-#: shell.c:1518
+#: shell.c:1544
 msgid "cannot start debugger; debugging mode disabled"
 msgstr "nie można uruchomić debuggera; tryb diagnostyczny wyłączony"
 
-#: shell.c:1632
+#: shell.c:1658
 #, c-format
 msgid "%s: Is a directory"
 msgstr "%s: jest katalogiem"
 
-#: shell.c:1881
+#: shell.c:1907
 msgid "I have no name!"
 msgstr "Nie mam nazwy!"
 
-#: shell.c:2035
+#: shell.c:2061
 #, c-format
 msgid "GNU bash, version %s-(%s)\n"
 msgstr "GNU bash, wersja %s-(%s)\n"
 
-#: shell.c:2036
+#: shell.c:2062
 #, c-format
 msgid ""
 "Usage:\t%s [GNU long option] [option] ...\n"
@@ -1731,319 +1741,319 @@ msgstr ""
 "Użycie:\t%s [długa opcja GNU] [opcja] ...\n"
 "\t%s [długa opcja GNU] [opcja] plik-skryptu ...\n"
 
-#: shell.c:2038
+#: shell.c:2064
 msgid "GNU long options:\n"
 msgstr "Długie opcje GNU:\n"
 
-#: shell.c:2042
+#: shell.c:2068
 msgid "Shell options:\n"
 msgstr "Opcje powłoki:\n"
 
-#: shell.c:2043
+#: shell.c:2069
 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n"
 msgstr "\t-ilrsD lub -c polecenie lub -O shopt_option\t\t(tylko wywołanie)\n"
 
-#: shell.c:2062
+#: shell.c:2088
 #, c-format
 msgid "\t-%s or -o option\n"
 msgstr "\t-%s lub -o opcja\n"
 
-#: shell.c:2068
+#: shell.c:2094
 #, c-format
 msgid "Type `%s -c \"help set\"' for more information about shell options.\n"
 msgstr "Aby uzyskać więcej informacji o opcjach powłoki, napisz `%s -c \"help set\"'.\n"
 
-#: shell.c:2069
+#: shell.c:2095
 #, c-format
 msgid "Type `%s -c help' for more information about shell builtin commands.\n"
 msgstr ""
 "Aby uzyskać więcej informacji o poleceniach wewnętrznych powłoki,\n"
 "napisz `%s -c help'.\n"
 
-#: shell.c:2070
+#: shell.c:2096
 #, c-format
 msgid "Use the `bashbug' command to report bugs.\n"
 msgstr "Do zgłaszania błędów należy używać polecenia `bashbug'.\n"
 
-#: shell.c:2072
+#: shell.c:2098
 #, c-format
 msgid "bash home page: <http://www.gnu.org/software/bash>\n"
 msgstr "strona domowa basha: <http://www.gnu.org/software/bash>\n"
 
-#: shell.c:2073
+#: shell.c:2099
 #, c-format
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 msgstr "Ogólna pomoc przy użytkowaniu oprogramowania GNU: <http://www.gnu.org/gethelp/>\n"
 
-#: sig.c:757
+#: sig.c:765
 #, c-format
 msgid "sigprocmask: %d: invalid operation"
 msgstr "sigprocmask: %d: nieprawidłowa operacja"
 
-#: siglist.c:47
+#: siglist.c:48
 msgid "Bogus signal"
 msgstr "Błędny sygnał"
 
-#: siglist.c:50
+#: siglist.c:51
 msgid "Hangup"
 msgstr "Rozłączenie"
 
-#: siglist.c:54
+#: siglist.c:55
 msgid "Interrupt"
 msgstr "Przerwanie"
 
-#: siglist.c:58
+#: siglist.c:59
 msgid "Quit"
 msgstr "Wyjście"
 
-#: siglist.c:62
+#: siglist.c:63
 msgid "Illegal instruction"
 msgstr "Niedozwolona instrukcja"
 
-#: siglist.c:66
+#: siglist.c:67
 msgid "BPT trace/trap"
 msgstr "Pułapka debuggera/breakpoint"
 
-#: siglist.c:74
+#: siglist.c:75
 msgid "ABORT instruction"
 msgstr "Instrukcja ABORT"
 
-#: siglist.c:78
+#: siglist.c:79
 msgid "EMT instruction"
 msgstr "Pułapka EMT"
 
-#: siglist.c:82
+#: siglist.c:83
 msgid "Floating point exception"
 msgstr "Błąd w obliczeniach zmiennoprzecinkowych"
 
-#: siglist.c:86
+#: siglist.c:87
 msgid "Killed"
 msgstr "Unicestwiony"
 
-#: siglist.c:90
+#: siglist.c:91
 msgid "Bus error"
 msgstr "Błąd szyny"
 
-#: siglist.c:94
+#: siglist.c:95
 msgid "Segmentation fault"
 msgstr "Naruszenie ochrony pamięci"
 
-#: siglist.c:98
+#: siglist.c:99
 msgid "Bad system call"
 msgstr "Błędne wywołanie systemowe"
 
-#: siglist.c:102
+#: siglist.c:103
 msgid "Broken pipe"
 msgstr "Przerwany potok"
 
-#: siglist.c:106
+#: siglist.c:107
 msgid "Alarm clock"
 msgstr "Budzik"
 
-#: siglist.c:110
+#: siglist.c:111
 msgid "Terminated"
 msgstr "Zakończony"
 
-#: siglist.c:114
+#: siglist.c:115
 msgid "Urgent IO condition"
 msgstr "Nagłe żądanie we/wy"
 
-#: siglist.c:118
+#: siglist.c:119
 msgid "Stopped (signal)"
 msgstr "Zatrzymany (sygnał)"
 
-#: siglist.c:126
+#: siglist.c:127
 msgid "Continue"
 msgstr "Kontynuacja"
 
-#: siglist.c:134
+#: siglist.c:135
 msgid "Child death or stop"
 msgstr "Śmierć lub zatrzymanie potomka"
 
-#: siglist.c:138
+#: siglist.c:139
 msgid "Stopped (tty input)"
 msgstr "Zatrzymany (wejście z tty)"
 
-#: siglist.c:142
+#: siglist.c:143
 msgid "Stopped (tty output)"
 msgstr "Zatrzymany (wyjście na tty)"
 
-#: siglist.c:146
+#: siglist.c:147
 msgid "I/O ready"
 msgstr "We/wy gotowe"
 
-#: siglist.c:150
+#: siglist.c:151
 msgid "CPU limit"
 msgstr "Przekroczony limit procesora"
 
-#: siglist.c:154
+#: siglist.c:155
 msgid "File limit"
 msgstr "Przekroczony limit pliku"
 
-#: siglist.c:158
+#: siglist.c:159
 msgid "Alarm (virtual)"
 msgstr "Alarm (wirtualny)"
 
-#: siglist.c:162
+#: siglist.c:163
 msgid "Alarm (profile)"
 msgstr "Alarm (profiler)"
 
-#: siglist.c:166
+#: siglist.c:167
 msgid "Window changed"
 msgstr "Okno zmienione"
 
-#: siglist.c:170
+#: siglist.c:171
 msgid "Record lock"
 msgstr "Zasoby utracone"
 
-#: siglist.c:174
+#: siglist.c:175
 msgid "User signal 1"
 msgstr "Sygnał użytkownika 1"
 
-#: siglist.c:178
+#: siglist.c:179
 msgid "User signal 2"
 msgstr "Sygnał użytkownika 2"
 
-#: siglist.c:182
+#: siglist.c:183
 msgid "HFT input data pending"
 msgstr "Dane wejściowe HFT"
 
-#: siglist.c:186
+#: siglist.c:187
 msgid "power failure imminent"
 msgstr "Bliska awaria zasilania"
 
-#: siglist.c:190
+#: siglist.c:191
 msgid "system crash imminent"
 msgstr "Bliska awaria systemu"
 
-#: siglist.c:194
+#: siglist.c:195
 msgid "migrate process to another CPU"
 msgstr "Przeniesienie procesu na inny procesor"
 
-#: siglist.c:198
+#: siglist.c:199
 msgid "programming error"
 msgstr "Błąd programowania"
 
-#: siglist.c:202
+#: siglist.c:203
 msgid "HFT monitor mode granted"
 msgstr "Nadany tryb monitora HFT"
 
-#: siglist.c:206
+#: siglist.c:207
 msgid "HFT monitor mode retracted"
 msgstr "Wycofany tryb monitora HFT"
 
-#: siglist.c:210
+#: siglist.c:211
 msgid "HFT sound sequence has completed"
 msgstr "Sekwencja dźwiękowa HFT zakończona"
 
-#: siglist.c:214
+#: siglist.c:215
 msgid "Information request"
 msgstr "Żądanie informacji"
 
-#: siglist.c:222 siglist.c:224
+#: siglist.c:223 siglist.c:225
 #, c-format
 msgid "Unknown Signal #%d"
 msgstr "Nieznany sygnał #%d"
 
-#: subst.c:1476 subst.c:1666
+#: subst.c:1480 subst.c:1670
 #, c-format
 msgid "bad substitution: no closing `%s' in %s"
 msgstr "złe podstawienie: brak zamykającego `%s' w %s"
 
-#: subst.c:3281
+#: subst.c:3307
 #, c-format
 msgid "%s: cannot assign list to array member"
 msgstr "%s: nie można przypisać listy do elementu tablicy"
 
-#: subst.c:5910 subst.c:5926
+#: subst.c:6048 subst.c:6064
 msgid "cannot make pipe for process substitution"
 msgstr "nie można utworzyć potoku dla podstawienia procesu"
 
-#: subst.c:5985
+#: subst.c:6124
 msgid "cannot make child for process substitution"
 msgstr "nie można utworzyć procesu potomnego dla podstawienia procesu"
 
-#: subst.c:6059
+#: subst.c:6198
 #, c-format
 msgid "cannot open named pipe %s for reading"
 msgstr "nie można otworzyć nazwanego potoku %s do odczytu"
 
-#: subst.c:6061
+#: subst.c:6200
 #, c-format
 msgid "cannot open named pipe %s for writing"
 msgstr "nie można otworzyć nazwanego potoku %s do zapisu"
 
-#: subst.c:6084
+#: subst.c:6223
 #, c-format
 msgid "cannot duplicate named pipe %s as fd %d"
 msgstr "nie można powielić nazwanego potoku %s jako deskryptor %d"
 
-#: subst.c:6213
+#: subst.c:6370
 msgid "command substitution: ignored null byte in input"
 msgstr "podstawienie polecenia: zignorowano zerowy bajt na wejściu"
 
-#: subst.c:6353
+#: subst.c:6533
 msgid "cannot make pipe for command substitution"
 msgstr "nie można utworzyć potoku dla podstawienia polecenia"
 
-#: subst.c:6397
+#: subst.c:6580
 msgid "cannot make child for command substitution"
 msgstr "nie można utworzyć procesu potomnego dla podstawienia polecenia"
 
-#: subst.c:6423
+#: subst.c:6613
 msgid "command_substitute: cannot duplicate pipe as fd 1"
 msgstr "command_substitute: nie można powielić potoku jako deskryptora 1"
 
-#: subst.c:6883 subst.c:9952
+#: subst.c:7082 subst.c:10252
 #, c-format
 msgid "%s: invalid variable name for name reference"
 msgstr "%s: nieprawidłowa nazwa zmiennej przy odwołaniu do nazwy"
 
-#: subst.c:6979 subst.c:6997 subst.c:7169
+#: subst.c:7178 subst.c:7196 subst.c:7369
 #, c-format
 msgid "%s: invalid indirect expansion"
 msgstr "%s: błędne rozwinięcie niebezpośrednie"
 
-#: subst.c:7013 subst.c:7177
+#: subst.c:7212 subst.c:7377
 #, c-format
 msgid "%s: invalid variable name"
 msgstr "`%s': błędna nazwa zmiennej"
 
-#: subst.c:7256
+#: subst.c:7478
 #, c-format
 msgid "%s: parameter not set"
 msgstr "%s: parametr nieustawiony"
 
-#: subst.c:7258
+#: subst.c:7480
 #, c-format
 msgid "%s: parameter null or not set"
 msgstr "%s: parametr pusty lub nieustawiony"
 
-#: subst.c:7503 subst.c:7518
+#: subst.c:7727 subst.c:7742
 #, c-format
 msgid "%s: substring expression < 0"
 msgstr "%s: wyrażenie dla podłańcucha < 0"
 
-#: subst.c:9281 subst.c:9302
+#: subst.c:9560 subst.c:9587
 #, c-format
 msgid "%s: bad substitution"
 msgstr "%s: złe podstawienie"
 
-#: subst.c:9390
+#: subst.c:9678
 #, c-format
 msgid "$%s: cannot assign in this way"
 msgstr "$%s: nie można przypisywać w ten sposób"
 
-#: subst.c:9814
+#: subst.c:10111
 msgid "future versions of the shell will force evaluation as an arithmetic substitution"
 msgstr "przyszłe wersje powłoki będą wymuszać obliczenie jako podstawienie arytmetyczne"
 
-#: subst.c:10367
+#: subst.c:10795
 #, c-format
 msgid "bad substitution: no closing \"`\" in %s"
 msgstr "złe podstawienie: brak zamykającego \"`\" w %s"
 
-#: subst.c:11434
+#: subst.c:11874
 #, c-format
 msgid "no match: %s"
 msgstr "brak pasującego: %s"
@@ -2066,21 +2076,21 @@ msgstr "oczekiwano `)'"
 msgid "`)' expected, found %s"
 msgstr "oczekiwano `)', znaleziono %s"
 
-#: test.c:466 test.c:799
+#: test.c:469 test.c:814
 #, c-format
 msgid "%s: binary operator expected"
 msgstr "%s: oczekiwano operatora dwuargumentowego"
 
-#: test.c:756 test.c:759
+#: test.c:771 test.c:774
 #, c-format
 msgid "%s: unary operator expected"
 msgstr "%s: oczekiwano operatora jednoargumentowego"
 
-#: test.c:881
+#: test.c:896
 msgid "missing `]'"
 msgstr "brakujący `]'"
 
-#: test.c:899
+#: test.c:914
 #, c-format
 msgid "syntax error: `%s' unexpected"
 msgstr "błąd składni: oczekiwano `%s'"
@@ -2089,99 +2099,104 @@ msgstr "błąd składni: oczekiwano `%s'"
 msgid "invalid signal number"
 msgstr "nieprawidłowy numer sygnału"
 
-#: trap.c:325
+#: trap.c:323
 #, c-format
 msgid "trap handler: maximum trap handler level exceeded (%d)"
 msgstr "obsługa pułapki: przekroczono maksymalny poziom obsługi pułapek (%d)"
 
-#: trap.c:414
+#: trap.c:412
 #, c-format
 msgid "run_pending_traps: bad value in trap_list[%d]: %p"
 msgstr "run_pending_traps: zła wartość trap_list[%d]: %p"
 
-#: trap.c:418
+#: trap.c:416
 #, c-format
 msgid "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
 msgstr "run_pending_traps: obsługa sygnału jest ustawiona na SIG_DFL, wysyłając %d (%s) do siebie"
 
-#: trap.c:487
+#: trap.c:509
 #, c-format
 msgid "trap_handler: bad signal %d"
 msgstr "trap_handler: zły sygnał %d"
 
-#: variables.c:421
+#: variables.c:424
 #, c-format
 msgid "error importing function definition for `%s'"
 msgstr "błąd importu definicji funkcji dla `%s'"
 
-#: variables.c:833
+#: variables.c:838
 #, c-format
 msgid "shell level (%d) too high, resetting to 1"
 msgstr "poziom powłoki (%d) jest za duży, ustawiono na 1"
 
-#: variables.c:2674
+#: variables.c:2642
 msgid "make_local_variable: no function context at current scope"
 msgstr "make_local_variable: brak kontekstu funkcji w bieżącym zakresie"
 
-#: variables.c:2693
+#: variables.c:2661
 #, c-format
 msgid "%s: variable may not be assigned value"
 msgstr "%s: nie można przypisać wartości do zmiennej"
 
-#: variables.c:3475
+#: variables.c:2818 variables.c:2874
+#, c-format
+msgid "%s: cannot inherit value from incompatible type"
+msgstr "%s: nie można odziedziczyć wartości z niezgodnego typu"
+
+#: variables.c:3459
 #, c-format
 msgid "%s: assigning integer to name reference"
 msgstr "%s: przypisanie wartości całkowitej przy odwołaniu do nazwy"
 
-#: variables.c:4404
+#: variables.c:4390
 msgid "all_local_variables: no function context at current scope"
 msgstr "all_local_variables: brak kontekstu funkcji w bieżącym zakresie"
 
-#: variables.c:4771
+#: variables.c:4757
 #, c-format
 msgid "%s has null exportstr"
 msgstr "%s ma pusty exportstr"
 
-#: variables.c:4776 variables.c:4785
+#: variables.c:4762 variables.c:4771
 #, c-format
 msgid "invalid character %d in exportstr for %s"
 msgstr "nieprawidłowy znak %d w exportstr dla %s"
 
-#: variables.c:4791
+#: variables.c:4777
 #, c-format
 msgid "no `=' in exportstr for %s"
 msgstr "brak `=' w exportstr dla %s"
 
-#: variables.c:5331
+#: variables.c:5317
 msgid "pop_var_context: head of shell_variables not a function context"
 msgstr "pop_var_context: nagłówek shell_variables poza kontekstem funkcji"
 
-#: variables.c:5344
+#: variables.c:5330
 msgid "pop_var_context: no global_variables context"
 msgstr "pop_var_context: brak kontekstu global_variables"
 
-#: variables.c:5424
+#: variables.c:5410
 msgid "pop_scope: head of shell_variables not a temporary environment scope"
 msgstr "pop_scope: nagłówek shell_variables poza zakresem tymczasowego środowiska"
 
-#: variables.c:6387
+#: variables.c:6400
 #, c-format
 msgid "%s: %s: cannot open as FILE"
 msgstr "%s: %s: nie można otworzyć jako PLIK"
 
-#: variables.c:6392
+#: variables.c:6405
 #, c-format
 msgid "%s: %s: invalid value for trace file descriptor"
 msgstr "%s: %s: nieprawidłowa wartość dla deskryptora pliku do śledzenia"
 
-#: variables.c:6437
+#: variables.c:6450
 #, c-format
 msgid "%s: %s: compatibility value out of range"
 msgstr "%s: %s: wartość zgodności poza zakresem"
 
 #: version.c:46 version2.c:46
-msgid "Copyright (C) 2020 Free Software Foundation, Inc."
-msgstr "Copyright (C) 2020 Free Software Foundation, Inc."
+msgid "Copyright (C) 2022 Free Software Foundation, Inc."
+msgstr "Copyright (C) 2022 Free Software Foundation, Inc."
 
 #: version.c:47 version2.c:47
 msgid "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n"
@@ -2261,12 +2276,12 @@ msgid "command [-pVv] command [arg ...]"
 msgstr "command [-pVv] polecenie [arg ...]"
 
 #: builtins.c:78
-msgid "declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]"
-msgstr "declare [-aAfFgiIlnrtux] [-p] [nazwa[=wartość] ...]"
+msgid "declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] [name ...]"
+msgstr "declare [-aAfFgiIlnrtux] [nazwa[=wartość] ...] lub declare -p [-aAfFilnrtux] [nazwa ...]"
 
 #: builtins.c:80
-msgid "typeset [-aAfFgiIlnrtux] [-p] name[=value] ..."
-msgstr "typeset [-aAfFgiIlnrtux] [-p] nazwa[=wartość] ..."
+msgid "typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] [name ...]"
+msgstr "typeset [-aAfFgiIlnrtux] nazwa[=wartość] ... lub typeset -p [-aAfFilnrtux] [nazwa ...]"
 
 #: builtins.c:82
 msgid "local [option] name[=value] ..."
@@ -2353,8 +2368,8 @@ msgid "return [n]"
 msgstr "return [n]"
 
 #: builtins.c:142
-msgid "set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]"
-msgstr "set [-abefhkmnptuvxBCHP] [-o nazwa-opcji] [--] [arg ...]"
+msgid "set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]"
+msgstr "set [-abefhkmnptuvxBCEHPT] [-o nazwa-opcji] [--] [-] [arg ...]"
 
 #: builtins.c:144
 msgid "unset [-f] [-v] [-n] [name ...]"
@@ -2401,8 +2416,8 @@ msgid "type [-afptP] name [name ...]"
 msgstr "type [-afptP] nazwa [nazwa ...]"
 
 #: builtins.c:171
-msgid "ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]"
-msgstr "ulimit [-SHabcdefiklmnpqrstuvxPT] [ograniczenie]"
+msgid "ulimit [-SHabcdefiklmnpqrstuvxPRT] [limit]"
+msgstr "ulimit [-SHabcdefiklmnpqrstuvxPRT] [ograniczenie]"
 
 #: builtins.c:174
 msgid "umask [-p] [-S] [mode]"
@@ -2441,12 +2456,12 @@ msgid "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else C
 msgstr "if POLECENIA; then POLECENIA; [ elif POLECENIA; then POLECENIA; ]... [ else POLECENIA; ] fi"
 
 #: builtins.c:196
-msgid "while COMMANDS; do COMMANDS; done"
-msgstr "while POLECENIA; do POLECENIA; done"
+msgid "while COMMANDS; do COMMANDS-2; done"
+msgstr "while POLECENIA; do POLECENIA-2; done"
 
 #: builtins.c:198
-msgid "until COMMANDS; do COMMANDS; done"
-msgstr "until POLECENIA; do POLECENIA; done"
+msgid "until COMMANDS; do COMMANDS-2; done"
+msgstr "until POLECENIA; do POLECENIA-2; done"
 
 #: builtins.c:200
 msgid "coproc [NAME] command [redirections]"
@@ -3771,7 +3786,8 @@ msgid ""
 "    splitting, and the first word is assigned to the first NAME, the second\n"
 "    word to the second NAME, and so on, with any leftover words assigned to\n"
 "    the last NAME.  Only the characters found in $IFS are recognized as word\n"
-"    delimiters.\n"
+"    delimiters. By default, the backslash character escapes delimiter characters\n"
+"    and newline.\n"
 "    \n"
 "    If no NAMEs are supplied, the line read is stored in the REPLY variable.\n"
 "    \n"
@@ -3813,7 +3829,8 @@ msgstr ""
 "    podano opcję -u). Wiersz jest dzielony na pola wg reguł podziału na słowa,\n"
 "    pierwsze słowo jest przypisywane pierwszej NAZWIE, drugie - drugiej NAZWIE\n"
 "    itd.; wszystkie pozostałe słowa są przypisywane ostatniej NAZWIE. Jako\n"
-"    ograniczniki słów są rozpoznawane tylko znaki ze zmiennej $IFS.\n"
+"    ograniczniki słów są rozpoznawane tylko znaki ze zmiennej $IFS. Domyślnie\n"
+"    znak odwrotnego ukośnika chroni znaki ograniczników i nowej linii.\n"
 "    \n"
 "    Jeśli nie podano NAZW, odczytany wiersz jest zapisywany w zmiennej REPLY.\n"
 "    \n"
@@ -3849,7 +3866,7 @@ msgstr ""
 "    błąd przypisania zmiennej albo podano nieprawidłowy deskryptor dla\n"
 "    argumentu -u."
 
-#: builtins.c:1041
+#: builtins.c:1042
 msgid ""
 "Return from a shell function.\n"
 "    \n"
@@ -3870,7 +3887,7 @@ msgstr ""
 "    Zwracane jest N lub niepowodzenie, jeśli powłoka nie wykonuje żadnej\n"
 "    funkcji ani skryptu."
 
-#: builtins.c:1054
+#: builtins.c:1055
 msgid ""
 "Set or unset values of shell options and positional parameters.\n"
 "    \n"
@@ -4041,7 +4058,7 @@ msgstr ""
 "    Stan wyjściowy:\n"
 "    Zwracana jest prawda, chyba że podano nieprawidłową opcję."
 
-#: builtins.c:1139
+#: builtins.c:1140
 msgid ""
 "Unset values and attributes of shell variables and functions.\n"
 "    \n"
@@ -4080,7 +4097,7 @@ msgstr ""
 "    Zwracana jest prawda, chyba że podano błędną opcję lub NAZWA jest tylko do\n"
 "    odczytu."
 
-#: builtins.c:1161
+#: builtins.c:1162
 msgid ""
 "Set export attribute for shell variables.\n"
 "    \n"
@@ -4113,7 +4130,7 @@ msgstr ""
 "    Stan wyjściowy:\n"
 "    Zwracana jest prawda, chyba że podano nieprawidłową opcję lub NAZWĘ."
 
-#: builtins.c:1180
+#: builtins.c:1181
 msgid ""
 "Mark shell variables as unchangeable.\n"
 "    \n"
@@ -4151,7 +4168,7 @@ msgstr ""
 "    Stan wyjściowy:\n"
 "    Zwracana jest prawda, chyba że podano nieprawidłową opcję lub NAZWĘ."
 
-#: builtins.c:1202
+#: builtins.c:1203
 msgid ""
 "Shift positional parameters.\n"
 "    \n"
@@ -4169,7 +4186,7 @@ msgstr ""
 "    Stan wyjściowy:\n"
 "    Zwracana jest prawda, chyba że N jest ujemne lub większe niż $#."
 
-#: builtins.c:1214 builtins.c:1229
+#: builtins.c:1215 builtins.c:1230
 msgid ""
 "Execute commands from a file in the current shell.\n"
 "    \n"
@@ -4193,7 +4210,7 @@ msgstr ""
 "    Zwracany jest stan ostatnio wykonanego polecenia z PLIKU lub błąd, jeśli\n"
 "    PLIKU nie udało się odczytać."
 
-#: builtins.c:1245
+#: builtins.c:1246
 msgid ""
 "Suspend shell execution.\n"
 "    \n"
@@ -4219,7 +4236,7 @@ msgstr ""
 "    Zwracana jest prawda, chyba że kontrola zadań jest wyłączona lub wystąpi\n"
 "    błąd."
 
-#: builtins.c:1261
+#: builtins.c:1262
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -4384,7 +4401,7 @@ msgstr ""
 "    Zwracana jest prawda, jeśli wartością WYRAŻENIA jest prawda; fałsz, gdy\n"
 "    wartością WYRAŻENIA jest fałsz lub podano błędny argument."
 
-#: builtins.c:1343
+#: builtins.c:1344
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -4396,7 +4413,7 @@ msgstr ""
 "    Jest to synonim dla wbudowanego polecenia \"test\", ale wymagający, by\n"
 "    ostatnim argumentem był `]' pasujący do początkowego `['."
 
-#: builtins.c:1352
+#: builtins.c:1353
 msgid ""
 "Display process times.\n"
 "    \n"
@@ -4414,7 +4431,7 @@ msgstr ""
 "    Stan wyjściowy:\n"
 "    Zawsze prawda."
 
-#: builtins.c:1364
+#: builtins.c:1365
 msgid ""
 "Trap signals and other events.\n"
 "    \n"
@@ -4483,7 +4500,7 @@ msgstr ""
 "    Stan wyjściowy:\n"
 "    Zwracana jest prawda, chyba że podano błędny SYGNAŁ lub błędną opcję."
 
-#: builtins.c:1400
+#: builtins.c:1401
 msgid ""
 "Display information about command type.\n"
 "    \n"
@@ -4538,7 +4555,7 @@ msgstr ""
 "    Zwracana jest prawda, jeśli każda NAZWA zostanie znaleziona; fałsz, jeśli\n"
 "    którakolwiek nie zostanie znaleziona."
 
-#: builtins.c:1431
+#: builtins.c:1432
 msgid ""
 "Modify shell resource limits.\n"
 "    \n"
@@ -4631,7 +4648,7 @@ msgstr ""
 "    Stan wyjściowy:\n"
 "    Zwracana jest prawda, chyba że podano błędną opcję lub wystąpi błąd."
 
-#: builtins.c:1482
+#: builtins.c:1483
 msgid ""
 "Display or set file mode mask.\n"
 "    \n"
@@ -4665,7 +4682,7 @@ msgstr ""
 "    Stan wyjściowy:\n"
 "    Zwracana jest prawda, chyba że podano błędne uprawnienia lub błędną opcję."
 
-#: builtins.c:1502
+#: builtins.c:1503
 msgid ""
 "Wait for job completion and return exit status.\n"
 "    \n"
@@ -4715,7 +4732,7 @@ msgstr ""
 "    Zwracany jest stan zakończenia ID; niepowodzenie, jeśli ID jest\n"
 "    nieprawidłowe lub podano błędną opcję."
 
-#: builtins.c:1533
+#: builtins.c:1534
 msgid ""
 "Wait for process completion and return exit status.\n"
 "    \n"
@@ -4738,7 +4755,7 @@ msgstr ""
 "    Zwracany jest status ID lub niepowodzenie, jeśli ID jest błędny lub podano\n"
 "    nieprawidłową opcję."
 
-#: builtins.c:1548
+#: builtins.c:1549
 msgid ""
 "Execute commands for each member in a list.\n"
 "    \n"
@@ -4759,7 +4776,7 @@ msgstr ""
 "    Stan wyjściowy:\n"
 "    Zwracany jest status zakończenia ostatniego wykonanego polecenia."
 
-#: builtins.c:1562
+#: builtins.c:1563
 msgid ""
 "Arithmetic for loop.\n"
 "    \n"
@@ -4788,7 +4805,7 @@ msgstr ""
 "    Stan wyjściowy:\n"
 "    Zwracany jest status zakończenia ostatniego wykonanego polecenia."
 
-#: builtins.c:1580
+#: builtins.c:1581
 msgid ""
 "Select words from a list and execute commands.\n"
 "    \n"
@@ -4822,7 +4839,7 @@ msgstr ""
 "    Stan wyjściowy:\n"
 "    Zwracany jest status zakończenia ostatniego wykonanego polecenia."
 
-#: builtins.c:1601
+#: builtins.c:1602
 msgid ""
 "Report time consumed by pipeline's execution.\n"
 "    \n"
@@ -4851,7 +4868,7 @@ msgstr ""
 "    Stan wyjściowy:\n"
 "    Polecenie zwraca status zakończenia POTOKU poleceń."
 
-#: builtins.c:1618
+#: builtins.c:1619
 msgid ""
 "Execute commands based on pattern matching.\n"
 "    \n"
@@ -4869,7 +4886,7 @@ msgstr ""
 "    Stan wyjściowy:\n"
 "    Zwracany jest status zakończenia ostatniego wykonanego polecenia."
 
-#: builtins.c:1630
+#: builtins.c:1631
 msgid ""
 "Execute commands based on conditional.\n"
 "    \n"
@@ -4899,43 +4916,43 @@ msgstr ""
 "    Stan wyjściowy:\n"
 "    Zwracany jest status zakończenia ostatniego wykonanego polecenia."
 
-#: builtins.c:1647
+#: builtins.c:1648
 msgid ""
 "Execute commands as long as a test succeeds.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `while' COMMANDS has an exit status of zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n"
+"    an exit status of zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
 "Wykonywanie poleceń dopóki test kończy się powodzeniem.\n"
 "    \n"
-"    Rozwijanie i uruchamianie POLECEŃ dopóki ostatnie polecenie\n"
-"    w POLECENIACH `while' kończy się z kodem zero.\n"
+"    Rozwijanie i uruchamianie POLECEŃ-2 dopóki ostatnie polecenie\n"
+"    w POLECENIACH kończy się z kodem zerowym.\n"
 "    \n"
 "    Stan wyjściowy:\n"
 "    Zwracany jest status zakończenia ostatniego wykonanego polecenia."
 
-#: builtins.c:1659
+#: builtins.c:1660
 msgid ""
 "Execute commands as long as a test does not succeed.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `until' COMMANDS has an exit status which is not zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n"
+"    an exit status which is not zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
 "Wykonywanie poleceń dopóki test nie kończy się powodzeniem.\n"
 "    \n"
-"    Rozwijanie i uruchamianie POLECEŃ dopóki ostatnie polecenie\n"
-"    w POLECENIACH `until' kończy się z kodem niezerowym.\n"
+"    Rozwijanie i uruchamianie POLECEŃ-2 dopóki ostatnie polecenie\n"
+"    w POLECENIACH kończy się z kodem niezerowym.\n"
 "    \n"
 "    Stan wyjściowy:\n"
 "    Zwracany jest status zakończenia ostatniego wykonanego polecenia."
 
-#: builtins.c:1671
+#: builtins.c:1672
 msgid ""
 "Create a coprocess named NAME.\n"
 "    \n"
@@ -4956,7 +4973,7 @@ msgstr ""
 "    Stan wyjściowy:\n"
 "    Polecenie coproc zwraca status wyjścia 0."
 
-#: builtins.c:1685
+#: builtins.c:1686
 msgid ""
 "Define shell function.\n"
 "    \n"
@@ -4978,7 +4995,7 @@ msgstr ""
 "    Stan wyjściowy:\n"
 "    Zwracany jest sukces, chyba że NAZWA jest tylko do odczytu."
 
-#: builtins.c:1699
+#: builtins.c:1700
 msgid ""
 "Group commands as a unit.\n"
 "    \n"
@@ -4996,7 +5013,7 @@ msgstr ""
 "    Stan wyjściowy:\n"
 "    Zwracany jest status zakończenia ostatniego wykonanego polecenia."
 
-#: builtins.c:1711
+#: builtins.c:1712
 msgid ""
 "Resume job in foreground.\n"
 "    \n"
@@ -5019,7 +5036,7 @@ msgstr ""
 "    Stan wyjściowy:\n"
 "    Zwracany jest stan wznowionego zadania."
 
-#: builtins.c:1726
+#: builtins.c:1727
 msgid ""
 "Evaluate arithmetic expression.\n"
 "    \n"
@@ -5037,7 +5054,7 @@ msgstr ""
 "    Stan wyjściowy:\n"
 "    Zwracane jest 1, jeśli wartością WYRAŻENIA jest 0; 0 w przeciwnym wypadku."
 
-#: builtins.c:1738
+#: builtins.c:1739
 msgid ""
 "Execute conditional command.\n"
 "    \n"
@@ -5086,7 +5103,7 @@ msgstr ""
 "    Stan wyjściowy:\n"
 "    0 lub 1 w zależności od wartości WYRAŻENIA."
 
-#: builtins.c:1764
+#: builtins.c:1765
 msgid ""
 "Common shell variable names and usage.\n"
 "    \n"
@@ -5193,7 +5210,7 @@ msgstr ""
 "    \t\tdecydowaniu, które polecenia powinny być zapisywane na liście\n"
 "    \t\thistorii.\n"
 
-#: builtins.c:1821
+#: builtins.c:1822
 msgid ""
 "Add directories to stack.\n"
 "    \n"
@@ -5249,7 +5266,7 @@ msgstr ""
 "    Zwracana jest prawda, chyba że podano błędny argument lub zmiana katalogu\n"
 "    się nie powiedzie."
 
-#: builtins.c:1855
+#: builtins.c:1856
 msgid ""
 "Remove directories from stack.\n"
 "    \n"
@@ -5300,7 +5317,7 @@ msgstr ""
 "    Zwracana jest prawda, chyba że podano błędny argument lub zmiana katalogu\n"
 "    się nie powiedzie."
 
-#: builtins.c:1885
+#: builtins.c:1886
 msgid ""
 "Display directory stack.\n"
 "    \n"
@@ -5353,7 +5370,7 @@ msgstr ""
 "    Stan wyjściowy:\n"
 "    Zwracana jest prawda, chyba że podano błędną opcję lub wystąpi błąd."
 
-#: builtins.c:1916
+#: builtins.c:1917
 msgid ""
 "Set and unset shell options.\n"
 "    \n"
@@ -5389,7 +5406,7 @@ msgstr ""
 "    Zwracana jest prawda jeśli NAZWA-OPCJI jest włączona; niepowodzenie, jeśli\n"
 "    podano błędną opcję lub NAZWA-OPCJI jest wyłączona."
 
-#: builtins.c:1937
+#: builtins.c:1938
 msgid ""
 "Formats and prints ARGUMENTS under control of the FORMAT.\n"
 "    \n"
@@ -5408,6 +5425,8 @@ msgid ""
 "    \n"
 "      %b\texpand backslash escape sequences in the corresponding argument\n"
 "      %q\tquote the argument in a way that can be reused as shell input\n"
+"      %Q\tlike %q, but apply any precision to the unquoted argument before\n"
+"    \t\tquoting\n"
 "      %(fmt)T\toutput the date-time string resulting from using FMT as a format\n"
 "    \t        string for strftime(3)\n"
 "    \n"
@@ -5439,6 +5458,7 @@ msgstr ""
 "    \t\targumencie\n"
 "      %q\tcytowanie argumentu w sposób umożliwiający użycie na wejściu\n"
 "    \t\tpowłoki\n"
+"      %Q\tjak %q, ale zastosowanie precyzji na wejściu przed cytowaniem\n"
 "      %(fmt)T\twypisanie łańcucha daty-czasu otrzymanego z użycia FMT jako\n"
 "    \t        łańcucha formatującego dla strftime(3)\n"
 "    \n"
@@ -5451,7 +5471,7 @@ msgstr ""
 "    Zwracana jest prawda, chyba że podano błędną opcję lub zapis albo\n"
 "    przypisanie zakończy się niepowodzeniem."
 
-#: builtins.c:1971
+#: builtins.c:1974
 msgid ""
 "Specify how arguments are to be completed by Readline.\n"
 "    \n"
@@ -5501,7 +5521,7 @@ msgstr ""
 "    Stan wyjściowy:\n"
 "    Zwracana jest prawda, chyba że podano błędną opcję lub wystąpi błąd."
 
-#: builtins.c:2001
+#: builtins.c:2004
 msgid ""
 "Display possible completions depending on the options.\n"
 "    \n"
@@ -5521,7 +5541,7 @@ msgstr ""
 "    Stan wyjściowy:\n"
 "    Zwracana jest prawda, chyba że podano błędną opcję lub wystąpi błąd."
 
-#: builtins.c:2016
+#: builtins.c:2019
 msgid ""
 "Modify or display completion options.\n"
 "    \n"
@@ -5575,7 +5595,7 @@ msgstr ""
 "    Zwracana jest prawda, chyba że podano błędną opcję lub NAZWA nie ma\n"
 "    zdefiniowanej specyfikacji dopełniania."
 
-#: builtins.c:2047
+#: builtins.c:2050
 msgid ""
 "Read lines from the standard input into an indexed array variable.\n"
 "    \n"
@@ -5641,7 +5661,7 @@ msgstr ""
 "    Zwracana jest prawda, chyba że podano błędną opcję lub TABLICA jest tylko\n"
 "    do odczytu, lub nie jest tablicą indeksowaną."
 
-#: builtins.c:2083
+#: builtins.c:2086
 msgid ""
 "Read lines from a file into an array variable.\n"
 "    \n"
index 3aa7fce7955820c47ff13b53a60ccd9ee40e550d..0f516eeac9c5cb5158256daeb0a357253b96fc2d 100644 (file)
Binary files a/po/pt.gmo and b/po/pt.gmo differ
index af25824ab60e948d23adfb172b8bd7fac1212a52..d0933599eb09f86b890630db0de48960fb9964d4 100644 (file)
--- a/po/pt.po
+++ b/po/pt.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: bash-5.1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-11-28 12:51-0500\n"
+"POT-Creation-Date: 2022-01-11 14:50-0500\n"
 "PO-Revision-Date: 2020-12-08 03:20+0000\n"
 "Last-Translator: Pedro Albuquerque <pmra@protonmail.com>\n"
 "Language-Team: Portuguese <translation-team-pt@lists.sourceforge.net>\n"
@@ -23,57 +23,54 @@ msgstr ""
 msgid "bad array subscript"
 msgstr "subscrito de matriz inválido"
 
-#: arrayfunc.c:421 builtins/declare.def:638 variables.c:2274 variables.c:2300
-#: variables.c:3133
+#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268
+#: variables.c:3101
 #, c-format
 msgid "%s: removing nameref attribute"
 msgstr "%s: a remover atributo nameref"
 
-#: arrayfunc.c:446 builtins/declare.def:851
+#: arrayfunc.c:496 builtins/declare.def:868
 #, c-format
 msgid "%s: cannot convert indexed to associative array"
 msgstr "%s: impossível converter matriz indexada para associativa"
 
-#: arrayfunc.c:700
-#, c-format
-msgid "%s: invalid associative array key"
-msgstr "%s: chave de matriz associativa inválida"
-
-#: arrayfunc.c:702
+#: arrayfunc.c:777
 #, c-format
 msgid "%s: cannot assign to non-numeric index"
 msgstr "%s: impossível atribuir a índice não numérico"
 
-#: arrayfunc.c:747
+#: arrayfunc.c:822
 #, c-format
 msgid "%s: %s: must use subscript when assigning associative array"
 msgstr "%s: %s: tem de usar subscrito ao atribuir a matriz associativa"
 
-#: bashhist.c:452
+#: bashhist.c:455
 #, c-format
 msgid "%s: cannot create: %s"
 msgstr "%s: impossível criar: %s"
 
-#: bashline.c:4310
+#: bashline.c:4479
 msgid "bash_execute_unix_command: cannot find keymap for command"
-msgstr "bash_execute_unix_command: impossível encontrar mapa de teclado para o comando"
+msgstr ""
+"bash_execute_unix_command: impossível encontrar mapa de teclado para o "
+"comando"
 
-#: bashline.c:4459
+#: bashline.c:4637
 #, c-format
 msgid "%s: first non-whitespace character is not `\"'"
 msgstr "%s: o 1º carácter não-espaço não é \"\"\""
 
-#: bashline.c:4488
+#: bashline.c:4666
 #, c-format
 msgid "no closing `%c' in %s"
 msgstr "sem \"%c\" de fecho em %s"
 
-#: bashline.c:4519
+#: bashline.c:4697
 #, c-format
 msgid "%s: missing colon separator"
 msgstr "%s: separador dois pontos em falta"
 
-#: bashline.c:4555
+#: bashline.c:4733
 #, c-format
 msgid "`%s': cannot unbind in command keymap"
 msgstr "\"%s\": impossível desassociar no mapa de teclado do comando"
@@ -93,7 +90,7 @@ msgstr "expansão: falha ao alocar memória para %u elementos"
 msgid "brace expansion: failed to allocate memory for `%s'"
 msgstr "expansão: falha ao alocar memória para \"%s\""
 
-#: builtins/alias.def:131 variables.c:1844
+#: builtins/alias.def:131 variables.c:1817
 #, c-format
 msgid "`%s': invalid alias name"
 msgstr "\"%s\": aliás inválido"
@@ -160,14 +157,15 @@ msgstr ""
 "     O valor de EXPR indica quantas chamadas deve recuar antes da\n"
 "     actual; a chamada superior é a chamada 0.\n"
 "     Estado de saída:\n"
-"     Devolve 0 a não ser que a consola não esteja a executar uma função ou EXPR\n"
+"     Devolve 0 a não ser que a consola não esteja a executar uma função ou "
+"EXPR\n"
 "     seja inválida."
 
 #: builtins/cd.def:327
 msgid "HOME not set"
 msgstr "HOME não definida"
 
-#: builtins/cd.def:335 builtins/common.c:161 test.c:901
+#: builtins/cd.def:335 builtins/common.c:161 test.c:916
 msgid "too many arguments"
 msgstr "demasiados argumentos"
 
@@ -194,7 +192,7 @@ msgstr "aviso: "
 msgid "%s: usage: "
 msgstr "%s: uso: "
 
-#: builtins/common.c:193 shell.c:516 shell.c:844
+#: builtins/common.c:193 shell.c:524 shell.c:866
 #, c-format
 msgid "%s: option requires an argument"
 msgstr "%s: a opção requer um argumento"
@@ -209,7 +207,7 @@ msgstr "%s: requer um argumento numérico"
 msgid "%s: not found"
 msgstr "%s: não encontrado"
 
-#: builtins/common.c:216 shell.c:857
+#: builtins/common.c:216 shell.c:879
 #, c-format
 msgid "%s: invalid option"
 msgstr "%s: opção inválida"
@@ -219,7 +217,7 @@ msgstr "%s: opção inválida"
 msgid "%s: invalid option name"
 msgstr "%s: nome de opção inválido"
 
-#: builtins/common.c:230 execute_cmd.c:2373 general.c:368 general.c:373
+#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373
 #, c-format
 msgid "`%s': not a valid identifier"
 msgstr "\"%s\": identificador inválido"
@@ -232,7 +230,7 @@ msgstr "número octal inválido"
 msgid "invalid hex number"
 msgstr "número hexadecimal inválido"
 
-#: builtins/common.c:244 expr.c:1569
+#: builtins/common.c:244 expr.c:1574
 msgid "invalid number"
 msgstr "número inválido"
 
@@ -246,88 +244,93 @@ msgstr "%s: especificação de sinal inválida"
 msgid "`%s': not a pid or valid job spec"
 msgstr "\"%s\": especificação de pid ou tarefa inválida"
 
-#: builtins/common.c:266 error.c:510
+#: builtins/common.c:266 error.c:536
 #, c-format
 msgid "%s: readonly variable"
 msgstr "%s: variável só de leitura"
 
-#: builtins/common.c:274
+#: builtins/common.c:273
+#, fuzzy, c-format
+msgid "%s: cannot assign"
+msgstr "%s: impossível desactivar"
+
+#: builtins/common.c:281
 #, c-format
 msgid "%s: %s out of range"
 msgstr "%s: %s fora do intervalo"
 
-#: builtins/common.c:274 builtins/common.c:276
+#: builtins/common.c:281 builtins/common.c:283
 msgid "argument"
 msgstr "argumento"
 
-#: builtins/common.c:276
+#: builtins/common.c:283
 #, c-format
 msgid "%s out of range"
 msgstr "%s fora do intervalo"
 
-#: builtins/common.c:284
+#: builtins/common.c:291
 #, c-format
 msgid "%s: no such job"
 msgstr "%s: tarefa inexistente"
 
-#: builtins/common.c:292
+#: builtins/common.c:299
 #, c-format
 msgid "%s: no job control"
 msgstr "%s: sem controlo da tarefa"
 
-#: builtins/common.c:294
+#: builtins/common.c:301
 msgid "no job control"
 msgstr "sem controlo da tarefa"
 
-#: builtins/common.c:304
+#: builtins/common.c:311
 #, c-format
 msgid "%s: restricted"
 msgstr "%s: restrita"
 
-#: builtins/common.c:306
+#: builtins/common.c:313
 msgid "restricted"
 msgstr "restrita"
 
-#: builtins/common.c:314
+#: builtins/common.c:321
 #, c-format
 msgid "%s: not a shell builtin"
 msgstr "%s: não é interno da consola"
 
-#: builtins/common.c:323
+#: builtins/common.c:330
 #, c-format
 msgid "write error: %s"
 msgstr "erro de escrita: %s"
 
-#: builtins/common.c:331
+#: builtins/common.c:338
 #, c-format
 msgid "error setting terminal attributes: %s"
 msgstr "erro ao definir atributos do terminal: %s"
 
-#: builtins/common.c:333
+#: builtins/common.c:340
 #, c-format
 msgid "error getting terminal attributes: %s"
 msgstr "erro ao obter atributos do terminal: %s"
 
-#: builtins/common.c:635
+#: builtins/common.c:642
 #, c-format
 msgid "%s: error retrieving current directory: %s: %s\n"
 msgstr "%s: erro ao obter a pasta actual: %s: %s\n"
 
-#: builtins/common.c:701 builtins/common.c:703
+#: builtins/common.c:708 builtins/common.c:710
 #, c-format
 msgid "%s: ambiguous job spec"
 msgstr "%s: especificação de tarefa ambígua"
 
-#: builtins/common.c:964
+#: builtins/common.c:971
 msgid "help not available in this version"
 msgstr "ajuda indisponível nesta versão"
 
-#: builtins/common.c:1008 builtins/set.def:953 variables.c:3839
+#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825
 #, c-format
 msgid "%s: cannot unset: readonly %s"
 msgstr "%s: impossível desactivar: %s só de leitura"
 
-#: builtins/common.c:1013 builtins/set.def:932 variables.c:3844
+#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830
 #, c-format
 msgid "%s: cannot unset"
 msgstr "%s: impossível desactivar"
@@ -337,108 +340,108 @@ msgstr "%s: impossível desactivar"
 msgid "%s: invalid action name"
 msgstr "%s: nome de acção inválido"
 
-#: builtins/complete.def:486 builtins/complete.def:634
-#: builtins/complete.def:865
+#: builtins/complete.def:486 builtins/complete.def:642
+#: builtins/complete.def:873
 #, c-format
 msgid "%s: no completion specification"
 msgstr "%s: sem especificação de conclusão"
 
-#: builtins/complete.def:688
+#: builtins/complete.def:696
 msgid "warning: -F option may not work as you expect"
 msgstr "aviso: a opção -F pode não resultar como esperado"
 
-#: builtins/complete.def:690
+#: builtins/complete.def:698
 msgid "warning: -C option may not work as you expect"
 msgstr "aviso: a opção -C pode não resultar como esperado"
 
-#: builtins/complete.def:838
+#: builtins/complete.def:846
 msgid "not currently executing completion function"
 msgstr "a função de conclusão não está em execução"
 
-#: builtins/declare.def:134
+#: builtins/declare.def:137
 msgid "can only be used in a function"
 msgstr "só pode ser usado numa função"
 
-#: builtins/declare.def:363 builtins/declare.def:756
+#: builtins/declare.def:437
+msgid "cannot use `-f' to make functions"
+msgstr "impossível usar \"-f\" para fazer funções"
+
+#: builtins/declare.def:464 execute_cmd.c:6132
+#, c-format
+msgid "%s: readonly function"
+msgstr "%s: função só de leitura"
+
+#: builtins/declare.def:521 builtins/declare.def:804
 #, c-format
 msgid "%s: reference variable cannot be an array"
 msgstr "%s: variável de referência não pode ser uma matriz"
 
-#: builtins/declare.def:374 variables.c:3385
+#: builtins/declare.def:532 variables.c:3359
 #, c-format
 msgid "%s: nameref variable self references not allowed"
 msgstr "%s: não são permitidas auto-referências de nameref"
 
-#: builtins/declare.def:379 variables.c:2104 variables.c:3304 variables.c:3312
-#: variables.c:3382
+#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286
+#: variables.c:3356
 #, c-format
 msgid "%s: circular name reference"
 msgstr "%s: referência circular de nome"
 
-#: builtins/declare.def:384 builtins/declare.def:762 builtins/declare.def:773
+#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820
 #, c-format
 msgid "`%s': invalid variable name for name reference"
 msgstr "\"%s\": nome de variável inválido para referência de nome"
 
-#: builtins/declare.def:514
-msgid "cannot use `-f' to make functions"
-msgstr "impossível usar \"-f\" para fazer funções"
-
-#: builtins/declare.def:526 execute_cmd.c:5986
-#, c-format
-msgid "%s: readonly function"
-msgstr "%s: função só de leitura"
-
-#: builtins/declare.def:824
-#, c-format
-msgid "%s: quoted compound array assignment deprecated"
-msgstr "%s: atribuição de matriz composta citada obsoleta"
-
-#: builtins/declare.def:838
+#: builtins/declare.def:856
 #, c-format
 msgid "%s: cannot destroy array variables in this way"
 msgstr "%s: impossível destruir variáveis de matriz assim"
 
-#: builtins/declare.def:845 builtins/read.def:815
+#: builtins/declare.def:862 builtins/read.def:887
 #, c-format
 msgid "%s: cannot convert associative to indexed array"
 msgstr "%s: impossível converter matriz associativa em indexada"
 
-#: builtins/enable.def:143 builtins/enable.def:151
+#: builtins/declare.def:891
+#, c-format
+msgid "%s: quoted compound array assignment deprecated"
+msgstr "%s: atribuição de matriz composta citada obsoleta"
+
+#: builtins/enable.def:145 builtins/enable.def:153
 msgid "dynamic loading not available"
 msgstr "carregamento dinâmico indisponível"
 
-#: builtins/enable.def:343
+#: builtins/enable.def:376
 #, c-format
 msgid "cannot open shared object %s: %s"
 msgstr "impossível abrir objecto partilhado %s: %s"
 
-#: builtins/enable.def:371
+#: builtins/enable.def:405
 #, c-format
 msgid "cannot find %s in shared object %s: %s"
 msgstr "impossível encontrar %s no objecto partilhado %s: %s"
 
-#: builtins/enable.def:388
+#: builtins/enable.def:422
 #, c-format
 msgid "%s: dynamic builtin already loaded"
 msgstr "%s: interno dinâmico já carregado"
 
-#: builtins/enable.def:392
+#: builtins/enable.def:426
 #, c-format
 msgid "load function for %s returns failure (%d): not loaded"
 msgstr "carregamento da função %s devolve falha (%d): não carregada"
 
-#: builtins/enable.def:517
+#: builtins/enable.def:551
 #, c-format
 msgid "%s: not dynamically loaded"
 msgstr "%s: não carregada dinamicamente"
 
-#: builtins/enable.def:543
+#: builtins/enable.def:577
 #, c-format
 msgid "%s: cannot delete: %s"
 msgstr "%s: impossível eliminar: %s"
 
-#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5818
+#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959
 #, c-format
 msgid "%s: is a directory"
 msgstr "%s: é uma pasta"
@@ -453,7 +456,7 @@ msgstr "%s: não é um ficheiro normal"
 msgid "%s: file is too large"
 msgstr "%s: ficheiro muito grande"
 
-#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1647
+#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673
 #, c-format
 msgid "%s: cannot execute binary file"
 msgstr "%s: impossível executar o binário"
@@ -545,15 +548,18 @@ msgstr ""
 
 #: builtins/help.def:185
 #, c-format
-msgid "no help topics match `%s'.  Try `help help' or `man -k %s' or `info %s'."
-msgstr "nenhum tópico de ajuda para \"%s\".  Tente \"help help\", \"man -k %s\" ou \"info %s\"."
+msgid ""
+"no help topics match `%s'.  Try `help help' or `man -k %s' or `info %s'."
+msgstr ""
+"nenhum tópico de ajuda para \"%s\".  Tente \"help help\", \"man -k %s\" ou "
+"\"info %s\"."
 
-#: builtins/help.def:224
+#: builtins/help.def:223
 #, c-format
 msgid "%s: cannot open: %s"
 msgstr "%s: impossível abrir: %s"
 
-#: builtins/help.def:524
+#: builtins/help.def:523
 #, c-format
 msgid ""
 "These shell commands are defined internally.  Type `help' to see this list.\n"
@@ -564,7 +570,8 @@ msgid ""
 "A star (*) next to a name means that the command is disabled.\n"
 "\n"
 msgstr ""
-"Estes comandos de consola são definidos internamente. Insira \"help\" para ver a lista.\n"
+"Estes comandos de consola são definidos internamente. Insira \"help\" para "
+"ver a lista.\n"
 "Insira \"help nome\" para saber mais sobre a função \"nome\".\n"
 "Use \"info bash\" para saber mais sobre a consola em geral.\n"
 "Use \"man -k ou \"info\" para saber mais sobre comandos não listados.\n"
@@ -572,21 +579,21 @@ msgstr ""
 "Um asterisco (*) junto a um nome significa que o comando está inactivo.\n"
 "\n"
 
-#: builtins/history.def:155
+#: builtins/history.def:159
 msgid "cannot use more than one of -anrw"
 msgstr "impossível usar mais de um -anrw"
 
-#: builtins/history.def:188 builtins/history.def:198 builtins/history.def:213
-#: builtins/history.def:230 builtins/history.def:242 builtins/history.def:249
+#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215
+#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247
 msgid "history position"
 msgstr "posição do histórico"
 
-#: builtins/history.def:340
+#: builtins/history.def:338
 #, c-format
 msgid "%s: invalid timestamp"
 msgstr "%s: datação inválida"
 
-#: builtins/history.def:451
+#: builtins/history.def:449
 #, c-format
 msgid "%s: history expansion failed"
 msgstr "%s: falha na expansão do histórico"
@@ -609,78 +616,78 @@ msgstr "%s: os argumentos têm de ser IDs de processos ou tarefas"
 msgid "Unknown error"
 msgstr "Erro desconhecido"
 
-#: builtins/let.def:97 builtins/let.def:122 expr.c:639 expr.c:657
+#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658
 msgid "expression expected"
 msgstr "esperada expressão"
 
-#: builtins/mapfile.def:178
+#: builtins/mapfile.def:180
 #, c-format
 msgid "%s: not an indexed array"
 msgstr "%s: não é uma matriz indexada"
 
-#: builtins/mapfile.def:271 builtins/read.def:308
+#: builtins/mapfile.def:276 builtins/read.def:336
 #, c-format
 msgid "%s: invalid file descriptor specification"
 msgstr "%s: especificação de descritor de ficheiro inválida"
 
-#: builtins/mapfile.def:279 builtins/read.def:315
+#: builtins/mapfile.def:284 builtins/read.def:343
 #, c-format
 msgid "%d: invalid file descriptor: %s"
 msgstr "%d: descritor de ficheiro inválido: %s"
 
-#: builtins/mapfile.def:288 builtins/mapfile.def:326
+#: builtins/mapfile.def:293 builtins/mapfile.def:331
 #, c-format
 msgid "%s: invalid line count"
 msgstr "%s: total de linhas inválido"
 
-#: builtins/mapfile.def:299
+#: builtins/mapfile.def:304
 #, c-format
 msgid "%s: invalid array origin"
 msgstr "%s: origem de matriz inválida"
 
-#: builtins/mapfile.def:316
+#: builtins/mapfile.def:321
 #, c-format
 msgid "%s: invalid callback quantum"
 msgstr "%s: callback inválida"
 
-#: builtins/mapfile.def:349
+#: builtins/mapfile.def:354
 msgid "empty array variable name"
 msgstr "nome de variável de matriz vazio"
 
-#: builtins/mapfile.def:370
+#: builtins/mapfile.def:375
 msgid "array variable support required"
 msgstr "requerido suporte a variáveis de matriz"
 
-#: builtins/printf.def:419
+#: builtins/printf.def:430
 #, c-format
 msgid "`%s': missing format character"
 msgstr "%s: carácter de formato em falta"
 
-#: builtins/printf.def:474
+#: builtins/printf.def:485
 #, c-format
 msgid "`%c': invalid time format specification"
 msgstr "\"%c\": especificação de formato de hora inválida"
 
-#: builtins/printf.def:676
+#: builtins/printf.def:708
 #, c-format
 msgid "`%c': invalid format character"
 msgstr "\"%c\": carácter de formato inválido"
 
-#: builtins/printf.def:702
+#: builtins/printf.def:734
 #, c-format
 msgid "warning: %s: %s"
 msgstr "aviso: %s: %s"
 
-#: builtins/printf.def:788
+#: builtins/printf.def:822
 #, c-format
 msgid "format parsing problem: %s"
 msgstr "problema de análise de formato: %s"
 
-#: builtins/printf.def:885
+#: builtins/printf.def:919
 msgid "missing hex digit for \\x"
 msgstr "dígito hex em falta para \\x"
 
-#: builtins/printf.def:900
+#: builtins/printf.def:934
 #, c-format
 msgid "missing unicode digit for \\%c"
 msgstr "dígito unicode em falta para \\%c"
@@ -721,10 +728,12 @@ msgid ""
 "    \twith its position in the stack\n"
 "    \n"
 "    Arguments:\n"
-"      +N\tDisplays the Nth entry counting from the left of the list shown by\n"
+"      +N\tDisplays the Nth entry counting from the left of the list shown "
+"by\n"
 "    \tdirs when invoked without options, starting with zero.\n"
 "    \n"
-"      -N\tDisplays the Nth entry counting from the right of the list shown by\n"
+"      -N\tDisplays the Nth entry counting from the right of the list shown "
+"by\n"
 "\tdirs when invoked without options, starting with zero."
 msgstr ""
 "Mostrar a lista de pastas actualmente lembradas.  As pastas\n"
@@ -830,12 +839,12 @@ msgstr ""
 "    \n"
 "    O \"dirs\" interno mostra a pilha de pastas."
 
-#: builtins/read.def:280
+#: builtins/read.def:308
 #, c-format
 msgid "%s: invalid timeout specification"
 msgstr "%s: especificação de inacção inválida"
 
-#: builtins/read.def:755
+#: builtins/read.def:827
 #, c-format
 msgid "read error: %d: %s"
 msgstr "erro de leitura: %d: %s"
@@ -848,7 +857,7 @@ msgstr "só pode usar \"return\" a partir de uma função ou script baseado"
 msgid "cannot simultaneously unset a function and a variable"
 msgstr "impossível desactivar simultaneamente uma função e uma variável"
 
-#: builtins/set.def:966
+#: builtins/set.def:969
 #, c-format
 msgid "%s: not an array variable"
 msgstr "%s: não é variável de matriz"
@@ -867,11 +876,11 @@ msgstr "%s: impossível exportar"
 msgid "shift count"
 msgstr "total de trocas"
 
-#: builtins/shopt.def:310
+#: builtins/shopt.def:323
 msgid "cannot set and unset shell options simultaneously"
 msgstr "impossível definir e desactivar opções da consola em simultâneo"
 
-#: builtins/shopt.def:428
+#: builtins/shopt.def:444
 #, c-format
 msgid "%s: invalid shell option name"
 msgstr "%s: nome de opção da consola inválido"
@@ -938,16 +947,16 @@ msgstr "%s: argumento de limite inválido"
 msgid "`%c': bad command"
 msgstr "\"%c\": comando errado"
 
-#: builtins/ulimit.def:455
+#: builtins/ulimit.def:464
 #, c-format
 msgid "%s: cannot get limit: %s"
 msgstr "%s: impossível obter limite: %s"
 
-#: builtins/ulimit.def:481
+#: builtins/ulimit.def:490
 msgid "limit"
 msgstr "limite"
 
-#: builtins/ulimit.def:493 builtins/ulimit.def:793
+#: builtins/ulimit.def:502 builtins/ulimit.def:802
 #, c-format
 msgid "%s: cannot modify limit: %s"
 msgstr "%s: impossível modificar limite: %s"
@@ -966,7 +975,7 @@ msgstr "\"%c\": operador de modo simbólico inválido"
 msgid "`%c': invalid symbolic mode character"
 msgstr "\"%c\": carácter de modo simbólico inválido"
 
-#: error.c:89 error.c:347 error.c:349 error.c:351
+#: error.c:89 error.c:373 error.c:375 error.c:377
 msgid " line "
 msgstr " linha "
 
@@ -986,96 +995,106 @@ msgstr "A abortar..."
 msgid "INFORM: "
 msgstr "INFORM.: "
 
-#: error.c:462
+#: error.c:310
+#, fuzzy, c-format
+msgid "DEBUG warning: "
+msgstr "aviso: "
+
+#: error.c:488
 msgid "unknown command error"
 msgstr "erro de comando desconhecido"
 
-#: error.c:463
+#: error.c:489
 msgid "bad command type"
 msgstr "tipo de comando errado"
 
-#: error.c:464
+#: error.c:490
 msgid "bad connector"
 msgstr "conector errado"
 
-#: error.c:465
+#: error.c:491
 msgid "bad jump"
 msgstr "salto errado"
 
-#: error.c:503
+#: error.c:529
 #, c-format
 msgid "%s: unbound variable"
 msgstr "%s: variável desassociada"
 
-#: eval.c:242
+#: eval.c:243
 msgid "\atimed out waiting for input: auto-logout\n"
 msgstr "\aDemasiada inacção à espera de entrada: sessão terminada\n"
 
-#: execute_cmd.c:537
+#: execute_cmd.c:555
 #, c-format
 msgid "cannot redirect standard input from /dev/null: %s"
 msgstr "impossível redireccionar entrada padrão de /dev/null: %s"
 
-#: execute_cmd.c:1297
+#: execute_cmd.c:1317
 #, c-format
 msgid "TIMEFORMAT: `%c': invalid format character"
 msgstr "FORMATOHORA: \"%c\": carácter de formato inválido"
 
-#: execute_cmd.c:2362
+#: execute_cmd.c:2391
 #, c-format
 msgid "execute_coproc: coproc [%d:%s] still exists"
 msgstr "execute_coproc: coproc [%d:%s] ainda existe"
 
-#: execute_cmd.c:2486
+#: execute_cmd.c:2524
 msgid "pipe error"
 msgstr "erro de pipe"
 
-#: execute_cmd.c:4793
+#: execute_cmd.c:4923
 #, c-format
 msgid "eval: maximum eval nesting level exceeded (%d)"
 msgstr "eval: nível máximo de aninhamento de eval excedido (%d)"
 
-#: execute_cmd.c:4805
+#: execute_cmd.c:4935
 #, c-format
 msgid "%s: maximum source nesting level exceeded (%d)"
 msgstr "%s: nível máximo de aninhamento de fonte excedido (%d)"
 
-#: execute_cmd.c:4913
+#: execute_cmd.c:5043
 #, c-format
 msgid "%s: maximum function nesting level exceeded (%d)"
 msgstr "%s: nível máximo de aninhamento de função excedido (%d)"
 
-#: execute_cmd.c:5467
+#: execute_cmd.c:5598
 #, c-format
 msgid "%s: restricted: cannot specify `/' in command names"
 msgstr "%s: restrito: impossível especificar \"/\" em nomes de comando"
 
-#: execute_cmd.c:5574
+#: execute_cmd.c:5715
 #, c-format
 msgid "%s: command not found"
 msgstr "%s: comando não encontrado"
 
-#: execute_cmd.c:5816
+#: execute_cmd.c:5957
 #, c-format
 msgid "%s: %s"
 msgstr "%s: %s"
 
-#: execute_cmd.c:5854
+#: execute_cmd.c:5975
+#, fuzzy, c-format
+msgid "%s: cannot execute: required file not found"
+msgstr "%s: impossível executar o binário"
+
+#: execute_cmd.c:6000
 #, c-format
 msgid "%s: %s: bad interpreter"
 msgstr "%s: %s: interpretador errado"
 
-#: execute_cmd.c:5891
+#: execute_cmd.c:6037
 #, c-format
 msgid "%s: cannot execute binary file: %s"
 msgstr "%s: impossível executar binário: %s"
 
-#: execute_cmd.c:5977
+#: execute_cmd.c:6123
 #, c-format
 msgid "`%s': is a special builtin"
 msgstr "%s: é uma opção interna especial"
 
-#: execute_cmd.c:6029
+#: execute_cmd.c:6175
 #, c-format
 msgid "cannot duplicate fd %d to fd %d"
 msgstr "impossível duplicar fd %d para fd %d"
@@ -1088,68 +1107,68 @@ msgstr "nível de recursão da expressão excedido"
 msgid "recursion stack underflow"
 msgstr "sub-fluxo da pilha de recursividade"
 
-#: expr.c:477
+#: expr.c:478
 msgid "syntax error in expression"
 msgstr "erro de sintaxe na expressão"
 
-#: expr.c:521
+#: expr.c:522
 msgid "attempted assignment to non-variable"
 msgstr "tentativa de atribuição a não-variável"
 
-#: expr.c:530
+#: expr.c:531
 msgid "syntax error in variable assignment"
 msgstr "erro de sintaxe na atribuição de variável"
 
-#: expr.c:544 expr.c:911
+#: expr.c:545 expr.c:912
 msgid "division by 0"
 msgstr "divisão por 0"
 
-#: expr.c:592
+#: expr.c:593
 msgid "bug: bad expassign token"
 msgstr "problema: símbolo expassign errado"
 
-#: expr.c:646
+#: expr.c:647
 msgid "`:' expected for conditional expression"
 msgstr "\":\" esperados para expressão condicional"
 
-#: expr.c:972
+#: expr.c:973
 msgid "exponent less than 0"
 msgstr "expoente menor que 0"
 
-#: expr.c:1029
+#: expr.c:1030
 msgid "identifier expected after pre-increment or pre-decrement"
 msgstr "identificador esperado após pré-incremento ou pré-decremento"
 
-#: expr.c:1056
+#: expr.c:1057
 msgid "missing `)'"
 msgstr "\")\" em falta"
 
-#: expr.c:1107 expr.c:1487
+#: expr.c:1108 expr.c:1492
 msgid "syntax error: operand expected"
 msgstr "erro de sintaxe: operando esperado"
 
-#: expr.c:1489
+#: expr.c:1494
 msgid "syntax error: invalid arithmetic operator"
 msgstr "erro de sintaxe: operador aritmético inválido"
 
-#: expr.c:1513
+#: expr.c:1518
 #, c-format
 msgid "%s%s%s: %s (error token is \"%s\")"
 msgstr "%s%s%s: %s (símbolo de erro é \"%s\")"
 
-#: expr.c:1573
+#: expr.c:1578
 msgid "invalid arithmetic base"
 msgstr "base aritmética inválida"
 
-#: expr.c:1582
+#: expr.c:1587
 msgid "invalid integer constant"
 msgstr "constante inteira inválida"
 
-#: expr.c:1598
+#: expr.c:1603
 msgid "value too great for base"
 msgstr "valor muito grande para a base"
 
-#: expr.c:1647
+#: expr.c:1652
 #, c-format
 msgid "%s: expression error\n"
 msgstr "%s: erro de expressão\n"
@@ -1158,7 +1177,7 @@ msgstr "%s: erro de expressão\n"
 msgid "getcwd: cannot access parent directories"
 msgstr "getcwd: impossível aceder a pastas-mãe"
 
-#: input.c:99 subst.c:6069
+#: input.c:99 subst.c:6208
 #, c-format
 msgid "cannot reset nodelay mode for fd %d"
 msgstr "impossível repor modo nodelay para fd %d"
@@ -1166,7 +1185,8 @@ msgstr "impossível repor modo nodelay para fd %d"
 #: input.c:266
 #, c-format
 msgid "cannot allocate new file descriptor for bash input from fd %d"
-msgstr "impossível alocar novo descritor de ficheiro para entrada bash de fd %d"
+msgstr ""
+"impossível alocar novo descritor de ficheiro para entrada bash de fd %d"
 
 #: input.c:274
 #, c-format
@@ -1177,167 +1197,167 @@ msgstr "save_bash_input: buffer já existe para o novo fd %d"
 msgid "start_pipeline: pgrp pipe"
 msgstr "start_pipeline: pipe pgrp"
 
-#: jobs.c:906
+#: jobs.c:907
 #, c-format
 msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
 
-#: jobs.c:959
+#: jobs.c:960
 #, c-format
 msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
 
-#: jobs.c:1283
+#: jobs.c:1279
 #, c-format
 msgid "forked pid %d appears in running job %d"
 msgstr "pid %d aparece em tarefa em execução %d"
 
-#: jobs.c:1402
+#: jobs.c:1397
 #, c-format
 msgid "deleting stopped job %d with process group %ld"
 msgstr "a eliminar tarefa interrompida %d com grupo de processo %ld"
 
-#: jobs.c:1511
+#: jobs.c:1502
 #, c-format
 msgid "add_process: pid %5ld (%s) marked as still alive"
 msgstr "add_process: pid %5ld (%s) marcado como ainda activo"
 
-#: jobs.c:1850
+#: jobs.c:1839
 #, c-format
 msgid "describe_pid: %ld: no such pid"
 msgstr "describe_pid: %ld: pid não existente"
 
-#: jobs.c:1865
+#: jobs.c:1854
 #, c-format
 msgid "Signal %d"
 msgstr "Sinal %d"
 
-#: jobs.c:1879 jobs.c:1905
+#: jobs.c:1868 jobs.c:1894
 msgid "Done"
 msgstr "Feito"
 
-#: jobs.c:1884 siglist.c:122
+#: jobs.c:1873 siglist.c:123
 msgid "Stopped"
 msgstr "Interrompido"
 
-#: jobs.c:1888
+#: jobs.c:1877
 #, c-format
 msgid "Stopped(%s)"
 msgstr "Interrompido(%s)"
 
-#: jobs.c:1892
+#: jobs.c:1881
 msgid "Running"
 msgstr "Em execução"
 
-#: jobs.c:1909
+#: jobs.c:1898
 #, c-format
 msgid "Done(%d)"
 msgstr "Feito(%d)"
 
-#: jobs.c:1911
+#: jobs.c:1900
 #, c-format
 msgid "Exit %d"
 msgstr "Sair de %d"
 
-#: jobs.c:1914
+#: jobs.c:1903
 msgid "Unknown status"
 msgstr "Estado desconhecido"
 
-#: jobs.c:2001
+#: jobs.c:1990
 #, c-format
 msgid "(core dumped) "
 msgstr "(núcleo despejado) "
 
-#: jobs.c:2020
+#: jobs.c:2009
 #, c-format
 msgid "  (wd: %s)"
 msgstr "  (wd: %s)"
 
-#: jobs.c:2259
+#: jobs.c:2250
 #, c-format
 msgid "child setpgid (%ld to %ld)"
 msgstr "setpgid filho (%ld para %ld)"
 
-#: jobs.c:2617 nojobs.c:664
+#: jobs.c:2608 nojobs.c:666
 #, c-format
 msgid "wait: pid %ld is not a child of this shell"
 msgstr "wait: pid %ld não é um filho desta consola"
 
-#: jobs.c:2893
+#: jobs.c:2884
 #, c-format
 msgid "wait_for: No record of process %ld"
 msgstr "wait_for: sem registo do processo %ld"
 
-#: jobs.c:3236
+#: jobs.c:3223
 #, c-format
 msgid "wait_for_job: job %d is stopped"
 msgstr "wait_for_tarefa: tarefa %d está interrompida"
 
-#: jobs.c:3564
+#: jobs.c:3551
 #, c-format
 msgid "%s: no current jobs"
 msgstr "%s: sem tarefas actuais"
 
-#: jobs.c:3571
+#: jobs.c:3558
 #, c-format
 msgid "%s: job has terminated"
 msgstr "%s: tarefa terminada"
 
-#: jobs.c:3580
+#: jobs.c:3567
 #, c-format
 msgid "%s: job %d already in background"
 msgstr "%s: tarefa %d já em 2º plano"
 
-#: jobs.c:3806
+#: jobs.c:3793
 msgid "waitchld: turning on WNOHANG to avoid indefinite block"
 msgstr "waitchld: a ligar WNOHANG para evitar bloquieo indefinido"
 
-#: jobs.c:4320
+#: jobs.c:4307
 #, c-format
 msgid "%s: line %d: "
 msgstr "%s: linha %d: "
 
-#: jobs.c:4334 nojobs.c:919
+#: jobs.c:4321 nojobs.c:921
 #, c-format
 msgid " (core dumped)"
 msgstr " (núcleo despejado)"
 
-#: jobs.c:4346 jobs.c:4359
+#: jobs.c:4333 jobs.c:4346
 #, c-format
 msgid "(wd now: %s)\n"
 msgstr "(wd agora: %s)\n"
 
-#: jobs.c:4391
+#: jobs.c:4378
 msgid "initialize_job_control: getpgrp failed"
 msgstr "initialize_job_control: getpgrp falhou"
 
-#: jobs.c:4447
+#: jobs.c:4434
 msgid "initialize_job_control: no job control in background"
 msgstr "initialize_job_control: sem controlo de tarefa em 2º plano"
 
-#: jobs.c:4463
+#: jobs.c:4450
 msgid "initialize_job_control: line discipline"
 msgstr "initialize_job_control: disciplina de linha"
 
-#: jobs.c:4473
+#: jobs.c:4460
 msgid "initialize_job_control: setpgid"
 msgstr "initialize_job_control: setpgid"
 
-#: jobs.c:4494 jobs.c:4503
+#: jobs.c:4481 jobs.c:4490
 #, c-format
 msgid "cannot set terminal process group (%d)"
 msgstr "impossível definir grupo de processo do terminal (%d)"
 
-#: jobs.c:4508
+#: jobs.c:4495
 msgid "no job control in this shell"
 msgstr "não há controlo de tarefa nesta consola"
 
-#: lib/malloc/malloc.c:353
+#: lib/malloc/malloc.c:367
 #, c-format
 msgid "malloc: failed assertion: %s\n"
 msgstr "malloc: asserção falhada: %s\n"
 
-#: lib/malloc/malloc.c:369
+#: lib/malloc/malloc.c:383
 #, c-format
 msgid ""
 "\r\n"
@@ -1346,47 +1366,47 @@ msgstr ""
 "\r\n"
 "malloc: %s:%d: asserção frustrada\r\n"
 
-#: lib/malloc/malloc.c:370 lib/malloc/malloc.c:933
+#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941
 msgid "unknown"
 msgstr "desconhecido"
 
-#: lib/malloc/malloc.c:882
+#: lib/malloc/malloc.c:892
 msgid "malloc: block on free list clobbered"
 msgstr "malloc: bloqueio na lista livre clobbered"
 
-#: lib/malloc/malloc.c:972
+#: lib/malloc/malloc.c:980
 msgid "free: called with already freed block argument"
 msgstr "free: chamado com argumento de bloco já liberto"
 
-#: lib/malloc/malloc.c:975
+#: lib/malloc/malloc.c:983
 msgid "free: called with unallocated block argument"
 msgstr "free: chamado com argumento de bloco não alocado"
 
-#: lib/malloc/malloc.c:994
+#: lib/malloc/malloc.c:1001
 msgid "free: underflow detected; mh_nbytes out of range"
 msgstr "free: sub-fluxo detectado; mh_nbytes fora do intervalo"
 
-#: lib/malloc/malloc.c:1001
+#: lib/malloc/malloc.c:1007
 msgid "free: underflow detected; magic8 corrupted"
 msgstr "free: sub-fluxo detectado; magic8 corrompido"
 
-#: lib/malloc/malloc.c:1009
+#: lib/malloc/malloc.c:1014
 msgid "free: start and end chunk sizes differ"
 msgstr "free: tamanho dos pontos inicial e final difere"
 
-#: lib/malloc/malloc.c:1119
+#: lib/malloc/malloc.c:1176
 msgid "realloc: called with unallocated block argument"
 msgstr "realloc: chamado com argumento de bloco não alocado"
 
-#: lib/malloc/malloc.c:1134
+#: lib/malloc/malloc.c:1191
 msgid "realloc: underflow detected; mh_nbytes out of range"
 msgstr "realloc: sub-fluxo detectado; mh_nbytes fora do intervalo"
 
-#: lib/malloc/malloc.c:1141
+#: lib/malloc/malloc.c:1197
 msgid "realloc: underflow detected; magic8 corrupted"
 msgstr "realloc: sub-fluxo detectado; magic8 corrompido"
 
-#: lib/malloc/malloc.c:1150
+#: lib/malloc/malloc.c:1205
 msgid "realloc: start and end chunk sizes differ"
 msgstr "realloc: tamanho dos pontos inicial e final difere"
 
@@ -1428,22 +1448,22 @@ msgstr "%s: especificação de caminho de rede errada"
 msgid "network operations not supported"
 msgstr "operações de rede não suportadas"
 
-#: locale.c:217
+#: locale.c:219
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s)"
 msgstr "setlocale: LC_ALL: não pode alterar o idioma (%s)"
 
-#: locale.c:219
+#: locale.c:221
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s): %s"
 msgstr "setlocale: LC_ALL: não pode alterar o idioma (%s): %s"
 
-#: locale.c:292
+#: locale.c:294
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s)"
 msgstr "setlocale: %s: não pode alterar o idioma (%s)"
 
-#: locale.c:294
+#: locale.c:296
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s): %s"
 msgstr "setlocale: %s: não pode alterar o idioma (%s): %s"
@@ -1461,136 +1481,142 @@ msgstr "Tem novo correio em $_"
 msgid "The mail in %s has been read\n"
 msgstr "O correio em %s já foi lido\n"
 
-#: make_cmd.c:317
+#: make_cmd.c:314
 msgid "syntax error: arithmetic expression required"
 msgstr "erro de sintaxe: requerida expressão aritmética"
 
-#: make_cmd.c:319
+#: make_cmd.c:316
 msgid "syntax error: `;' unexpected"
 msgstr "erro de sintaxe: \";\" inesperado"
 
-#: make_cmd.c:320
+#: make_cmd.c:317
 #, c-format
 msgid "syntax error: `((%s))'"
 msgstr "erro de sintaxe: \"((%s))\""
 
-#: make_cmd.c:572
+#: make_cmd.c:569
 #, c-format
 msgid "make_here_document: bad instruction type %d"
 msgstr "make_here_document: tipo de instrução %d errado"
 
-#: make_cmd.c:657
+#: make_cmd.c:668
 #, c-format
 msgid "here-document at line %d delimited by end-of-file (wanted `%s')"
-msgstr "here-document na linha %d delimitado por fim-de-ficheiro (desejado \"%s\")"
+msgstr ""
+"here-document na linha %d delimitado por fim-de-ficheiro (desejado \"%s\")"
 
-#: make_cmd.c:756
+#: make_cmd.c:769
 #, c-format
 msgid "make_redirection: redirection instruction `%d' out of range"
-msgstr "make_redirection: instrução de redireccionamento \"%d\" fora do intervalo"
+msgstr ""
+"make_redirection: instrução de redireccionamento \"%d\" fora do intervalo"
 
-#: parse.y:2393
+#: parse.y:2428
 #, c-format
-msgid "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line truncated"
-msgstr "consola_getc: consola_input_line_size (%zu) excede SIZE_MAX (%lu): linha truncada"
+msgid ""
+"shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line "
+"truncated"
+msgstr ""
+"consola_getc: consola_input_line_size (%zu) excede SIZE_MAX (%lu): linha "
+"truncada"
 
-#: parse.y:2826
+#: parse.y:2921
 msgid "maximum here-document count exceeded"
 msgstr "total here-document máximo excedido"
 
-#: parse.y:3581 parse.y:3957 parse.y:4556
+#: parse.y:3684 parse.y:4244 parse.y:6148
 #, c-format
 msgid "unexpected EOF while looking for matching `%c'"
 msgstr "EOF inesperado ao procurar \"%c\" correspondentes"
 
-#: parse.y:4696
+#: parse.y:4452
 msgid "unexpected EOF while looking for `]]'"
 msgstr "EOF inesperado ao procurar \"]]\""
 
-#: parse.y:4701
+#: parse.y:4457
 #, c-format
 msgid "syntax error in conditional expression: unexpected token `%s'"
 msgstr "erro de sintaxe em expressão condicional: símbolo inesperado \"%s\""
 
-#: parse.y:4705
+#: parse.y:4461
 msgid "syntax error in conditional expression"
 msgstr "erro de sintaxe em expressão condicional"
 
-#: parse.y:4783
+#: parse.y:4539
 #, c-format
 msgid "unexpected token `%s', expected `)'"
 msgstr "símbolo inesperado \"%s\", esperado \")\""
 
-#: parse.y:4787
+#: parse.y:4543
 msgid "expected `)'"
 msgstr "esperado \")\""
 
-#: parse.y:4815
+#: parse.y:4571
 #, c-format
 msgid "unexpected argument `%s' to conditional unary operator"
 msgstr "argumento \"%s\" inesperado para operador unário condicional"
 
-#: parse.y:4819
+#: parse.y:4575
 msgid "unexpected argument to conditional unary operator"
 msgstr "argumento inesperado para operador unário condicional"
 
-#: parse.y:4865
+#: parse.y:4621
 #, c-format
 msgid "unexpected token `%s', conditional binary operator expected"
 msgstr "símbolo \"%s\" inesperado, esperado operador binário condicional"
 
-#: parse.y:4869
+#: parse.y:4625
 msgid "conditional binary operator expected"
 msgstr "esperado operador binário condicional"
 
-#: parse.y:4891
+#: parse.y:4647
 #, c-format
 msgid "unexpected argument `%s' to conditional binary operator"
 msgstr "argumento \"%s\" inesperado para operador binário condicional"
 
-#: parse.y:4895
+#: parse.y:4651
 msgid "unexpected argument to conditional binary operator"
 msgstr "argumento inesperado para operador binário condicional"
 
-#: parse.y:4906
+#: parse.y:4662
 #, c-format
 msgid "unexpected token `%c' in conditional command"
 msgstr "símbolo \"%c\" inesperado em comando condicional"
 
-#: parse.y:4909
+#: parse.y:4665
 #, c-format
 msgid "unexpected token `%s' in conditional command"
 msgstr "símbolo \"%s\" inesperado em comando condicional"
 
-#: parse.y:4913
+#: parse.y:4669
 #, c-format
 msgid "unexpected token %d in conditional command"
 msgstr "símbolo %d inesperado em comando condicional"
 
-#: parse.y:6336
+#: parse.y:6118
 #, c-format
 msgid "syntax error near unexpected token `%s'"
 msgstr "erro de sintaxe junto a símbolo \"%s\" inesperado"
 
-#: parse.y:6355
+#: parse.y:6137
 #, c-format
 msgid "syntax error near `%s'"
 msgstr "erro de sintaxe junto a \"%s\""
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error: unexpected end of file"
 msgstr "erro de sintaxe: fim de ficheiro inesperado"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error"
 msgstr "erro de sintaxe"
 
-#: parse.y:6428
+#: parse.y:6216
 #, c-format
 msgid "Use \"%s\" to leave the shell.\n"
 msgstr "Use \"%s\" para sair da consola.\n"
 
-#: parse.y:6602
+#: parse.y:6394
 msgid "unexpected EOF while looking for matching `)'"
 msgstr "EOF inesperado ao procurar o \")\" correspondente"
 
@@ -1628,94 +1654,94 @@ msgstr "xtrace_set: ponteiro de ficheiro NULL"
 msgid "xtrace fd (%d) != fileno xtrace fp (%d)"
 msgstr "xtrace fd (%d) != fileno xtrace fp (%d)"
 
-#: print_cmd.c:1540
+#: print_cmd.c:1545
 #, c-format
 msgid "cprintf: `%c': invalid format character"
 msgstr "cprintf: \"%c\": carácter de formato inválido"
 
-#: redir.c:149 redir.c:197
+#: redir.c:150 redir.c:198
 msgid "file descriptor out of range"
 msgstr "descritor de ficheiro fora de alcance"
 
-#: redir.c:204
+#: redir.c:205
 #, c-format
 msgid "%s: ambiguous redirect"
 msgstr "%s: redireccionamento ambíguo"
 
-#: redir.c:208
+#: redir.c:209
 #, c-format
 msgid "%s: cannot overwrite existing file"
 msgstr "%s: impossível sobrescrever ficheiro existente"
 
-#: redir.c:213
+#: redir.c:214
 #, c-format
 msgid "%s: restricted: cannot redirect output"
 msgstr "%s: restricto: impossível redireccionar saída"
 
-#: redir.c:218
+#: redir.c:219
 #, c-format
 msgid "cannot create temp file for here-document: %s"
 msgstr "impossível criar ficheiro temporário para here-document: %s"
 
-#: redir.c:222
+#: redir.c:223
 #, c-format
 msgid "%s: cannot assign fd to variable"
 msgstr "%s: impossível atribuir fd a variável"
 
-#: redir.c:649
+#: redir.c:650
 msgid "/dev/(tcp|udp)/host/port not supported without networking"
 msgstr "/dev/(tcp|udp)/host/port não suportado em trabalho de rede"
 
-#: redir.c:938 redir.c:1053 redir.c:1114 redir.c:1284
+#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303
 msgid "redirection error: cannot duplicate fd"
 msgstr "erro de redireccionamento: impossível duplicar fd"
 
-#: shell.c:347
+#: shell.c:353
 msgid "could not find /tmp, please create!"
 msgstr "impossível encontrar /tmp, por favor crie-a!"
 
-#: shell.c:351
+#: shell.c:357
 msgid "/tmp must be a valid directory name"
 msgstr "/tmp tem de ser um nome de pasta válido"
 
-#: shell.c:804
+#: shell.c:826
 msgid "pretty-printing mode ignored in interactive shells"
 msgstr "modo pretty-printing ignorado em consolas interactivas"
 
-#: shell.c:948
+#: shell.c:972
 #, c-format
 msgid "%c%c: invalid option"
 msgstr "%c%c: opção inválida"
 
-#: shell.c:1319
+#: shell.c:1343
 #, c-format
 msgid "cannot set uid to %d: effective uid %d"
 msgstr "impossível definir uid como %d: uid efectiva %d"
 
-#: shell.c:1330
+#: shell.c:1354
 #, c-format
 msgid "cannot set gid to %d: effective gid %d"
 msgstr "impossível definir gid como %d: gid efectiva %d"
 
-#: shell.c:1518
+#: shell.c:1544
 msgid "cannot start debugger; debugging mode disabled"
 msgstr "impossível iniciar o depurador; modo de depuração desactivado"
 
-#: shell.c:1632
+#: shell.c:1658
 #, c-format
 msgid "%s: Is a directory"
 msgstr "%s: é uma pasta"
 
-#: shell.c:1881
+#: shell.c:1907
 msgid "I have no name!"
 msgstr "Não tenho nome!"
 
-#: shell.c:2035
+#: shell.c:2061
 #, c-format
 msgid "GNU bash, version %s-(%s)\n"
 msgstr "GNU bash, versão %s-(%s)\n"
 
-#: shell.c:2036
+#: shell.c:2062
 #, c-format
 msgid ""
 "Usage:\t%s [GNU long option] [option] ...\n"
@@ -1724,317 +1750,324 @@ msgstr ""
 "Uso:\t%s [opção longa GNU] [opção] ...\n"
 "\t%s [opção longa GNU] [opção] script-file ...\n"
 
-#: shell.c:2038
+#: shell.c:2064
 msgid "GNU long options:\n"
 msgstr "Opções longas GNU:\n"
 
-#: shell.c:2042
+#: shell.c:2068
 msgid "Shell options:\n"
 msgstr "Opções da consola:\n"
 
-#: shell.c:2043
+#: shell.c:2069
 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n"
 msgstr "\tcomando -ilrsD ou -c ou -O shopt_option\t\t(só chamada)\n"
 
-#: shell.c:2062
+#: shell.c:2088
 #, c-format
 msgid "\t-%s or -o option\n"
 msgstr "\topção -%s ou -o\n"
 
-#: shell.c:2068
+#: shell.c:2094
 #, c-format
 msgid "Type `%s -c \"help set\"' for more information about shell options.\n"
-msgstr "Insira \"%s -c \"help set\"\" para mais informação sobre opções da consola.\n"
+msgstr ""
+"Insira \"%s -c \"help set\"\" para mais informação sobre opções da consola.\n"
 
-#: shell.c:2069
+#: shell.c:2095
 #, c-format
 msgid "Type `%s -c help' for more information about shell builtin commands.\n"
-msgstr "Insira \"%s -c help\" para mais informação sobre comandos internos da consola.\n"
+msgstr ""
+"Insira \"%s -c help\" para mais informação sobre comandos internos da "
+"consola.\n"
 
-#: shell.c:2070
+#: shell.c:2096
 #, c-format
 msgid "Use the `bashbug' command to report bugs.\n"
 msgstr "Use o comando \"bashbug\" para reportar erros.\n"
 
-#: shell.c:2072
+#: shell.c:2098
 #, c-format
 msgid "bash home page: <http://www.gnu.org/software/bash>\n"
 msgstr "Página inicial do bash: <http://www.gnu.org/software/bash>\n"
 
-#: shell.c:2073
+#: shell.c:2099
 #, c-format
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 msgstr "Ajuda geral para usar programas GNU: <http://www.gnu.org/gethelp/>\n"
 
-#: sig.c:757
+#: sig.c:765
 #, c-format
 msgid "sigprocmask: %d: invalid operation"
 msgstr "sigprocmask: %d: operação inválida"
 
-#: siglist.c:47
+#: siglist.c:48
 msgid "Bogus signal"
 msgstr "Sinal falso"
 
-#: siglist.c:50
+#: siglist.c:51
 msgid "Hangup"
 msgstr "Desligar"
 
-#: siglist.c:54
+#: siglist.c:55
 msgid "Interrupt"
 msgstr "Interromper"
 
-#: siglist.c:58
+#: siglist.c:59
 msgid "Quit"
 msgstr "Sair"
 
-#: siglist.c:62
+#: siglist.c:63
 msgid "Illegal instruction"
 msgstr "Instrução ilegal"
 
-#: siglist.c:66
+#: siglist.c:67
 msgid "BPT trace/trap"
 msgstr "BPT trace/trap"
 
-#: siglist.c:74
+#: siglist.c:75
 msgid "ABORT instruction"
 msgstr "Instrução ABORT"
 
-#: siglist.c:78
+#: siglist.c:79
 msgid "EMT instruction"
 msgstr "Instrução EMT"
 
-#: siglist.c:82
+#: siglist.c:83
 msgid "Floating point exception"
 msgstr "Excepção de vírgula flutuante"
 
-#: siglist.c:86
+#: siglist.c:87
 msgid "Killed"
 msgstr "Morto"
 
-#: siglist.c:90
+#: siglist.c:91
 msgid "Bus error"
 msgstr "Erro de bus"
 
-#: siglist.c:94
+#: siglist.c:95
 msgid "Segmentation fault"
 msgstr "Falha de segmentação"
 
-#: siglist.c:98
+#: siglist.c:99
 msgid "Bad system call"
 msgstr "Chamada de sistema errada"
 
-#: siglist.c:102
+#: siglist.c:103
 msgid "Broken pipe"
 msgstr "Pipe quebrado"
 
-#: siglist.c:106
+#: siglist.c:107
 msgid "Alarm clock"
 msgstr "Alarme"
 
-#: siglist.c:110
+#: siglist.c:111
 msgid "Terminated"
 msgstr "Terminado"
 
-#: siglist.c:114
+#: siglist.c:115
 msgid "Urgent IO condition"
 msgstr "Condição IO urgente"
 
-#: siglist.c:118
+#: siglist.c:119
 msgid "Stopped (signal)"
 msgstr "Parado (sinal)"
 
-#: siglist.c:126
+#: siglist.c:127
 msgid "Continue"
 msgstr "Continuar"
 
-#: siglist.c:134
+#: siglist.c:135
 msgid "Child death or stop"
 msgstr "Morte ou paragem do filho"
 
-#: siglist.c:138
+#: siglist.c:139
 msgid "Stopped (tty input)"
 msgstr "Parado (entrada tty)"
 
-#: siglist.c:142
+#: siglist.c:143
 msgid "Stopped (tty output)"
 msgstr "Parado (saída tty)"
 
-#: siglist.c:146
+#: siglist.c:147
 msgid "I/O ready"
 msgstr "I/O pronto"
 
-#: siglist.c:150
+#: siglist.c:151
 msgid "CPU limit"
 msgstr "Limite do CPU"
 
-#: siglist.c:154
+#: siglist.c:155
 msgid "File limit"
 msgstr "Limite do ficheiro"
 
-#: siglist.c:158
+#: siglist.c:159
 msgid "Alarm (virtual)"
 msgstr "Alarme (virtual)"
 
-#: siglist.c:162
+#: siglist.c:163
 msgid "Alarm (profile)"
 msgstr "Alarme (perfil)"
 
-#: siglist.c:166
+#: siglist.c:167
 msgid "Window changed"
 msgstr "Janela alterada"
 
-#: siglist.c:170
+#: siglist.c:171
 msgid "Record lock"
 msgstr "Bloqueio de registo"
 
-#: siglist.c:174
+#: siglist.c:175
 msgid "User signal 1"
 msgstr "Sinal de utilizador 1"
 
-#: siglist.c:178
+#: siglist.c:179
 msgid "User signal 2"
 msgstr "Sinal de utilizador 2"
 
-#: siglist.c:182
+#: siglist.c:183
 msgid "HFT input data pending"
 msgstr "entrada de dados HTF pendente"
 
-#: siglist.c:186
+#: siglist.c:187
 msgid "power failure imminent"
 msgstr "falha de energia iminente"
 
-#: siglist.c:190
+#: siglist.c:191
 msgid "system crash imminent"
 msgstr "acidente do sistema iminente"
 
-#: siglist.c:194
+#: siglist.c:195
 msgid "migrate process to another CPU"
 msgstr "migrar processo para outro CPU"
 
-#: siglist.c:198
+#: siglist.c:199
 msgid "programming error"
 msgstr "erro de programação"
 
-#: siglist.c:202
+#: siglist.c:203
 msgid "HFT monitor mode granted"
 msgstr "concedido modo de monitor HTF"
 
-#: siglist.c:206
+#: siglist.c:207
 msgid "HFT monitor mode retracted"
 msgstr "retirado modo de monitor HTF"
 
-#: siglist.c:210
+#: siglist.c:211
 msgid "HFT sound sequence has completed"
 msgstr "sequência de som HTF terminou"
 
-#: siglist.c:214
+#: siglist.c:215
 msgid "Information request"
 msgstr "Pedido de informação"
 
-#: siglist.c:222 siglist.c:224
+#: siglist.c:223 siglist.c:225
 #, c-format
 msgid "Unknown Signal #%d"
 msgstr "Sinal desconhecido #%d"
 
-#: subst.c:1476 subst.c:1666
+#: subst.c:1480 subst.c:1670
 #, c-format
 msgid "bad substitution: no closing `%s' in %s"
 msgstr "má substituição: sem \"%s\" de fecho em %s"
 
-#: subst.c:3281
+#: subst.c:3307
 #, c-format
 msgid "%s: cannot assign list to array member"
 msgstr "%s: impossível atribuir lista a membro de matriz"
 
-#: subst.c:5910 subst.c:5926
+#: subst.c:6048 subst.c:6064
 msgid "cannot make pipe for process substitution"
 msgstr "impossível fazer pipe para substituição de processo"
 
-#: subst.c:5985
+#: subst.c:6124
 msgid "cannot make child for process substitution"
 msgstr "impossível fazer filho para substituição de processo"
 
-#: subst.c:6059
+#: subst.c:6198
 #, c-format
 msgid "cannot open named pipe %s for reading"
 msgstr "impossível abrir pipe chamado %s para leitura"
 
-#: subst.c:6061
+#: subst.c:6200
 #, c-format
 msgid "cannot open named pipe %s for writing"
 msgstr "impossível abrir pipe chamado %s para escrita"
 
-#: subst.c:6084
+#: subst.c:6223
 #, c-format
 msgid "cannot duplicate named pipe %s as fd %d"
 msgstr "imossível duplicar pipe chamado %s como fd %d"
 
-#: subst.c:6213
+#: subst.c:6370
 msgid "command substitution: ignored null byte in input"
 msgstr "substituição de comando: byte nulo ignorado na entrada"
 
-#: subst.c:6353
+#: subst.c:6533
 msgid "cannot make pipe for command substitution"
 msgstr "impossível fazer pipe para substituição de comando"
 
-#: subst.c:6397
+#: subst.c:6580
 msgid "cannot make child for command substitution"
 msgstr "impossível fazer filho para substituição de comando"
 
-#: subst.c:6423
+#: subst.c:6613
 msgid "command_substitute: cannot duplicate pipe as fd 1"
 msgstr "command_substitute: impossível duplicar pipe como fd 1"
 
-#: subst.c:6883 subst.c:9952
+#: subst.c:7082 subst.c:10252
 #, c-format
 msgid "%s: invalid variable name for name reference"
 msgstr "%s: nome de variável inválido para referência de nome"
 
-#: subst.c:6979 subst.c:6997 subst.c:7169
+#: subst.c:7178 subst.c:7196 subst.c:7369
 #, c-format
 msgid "%s: invalid indirect expansion"
 msgstr "%s: expansão indirecta inválida"
 
-#: subst.c:7013 subst.c:7177
+#: subst.c:7212 subst.c:7377
 #, c-format
 msgid "%s: invalid variable name"
 msgstr "%s: nome de variável inválido"
 
-#: subst.c:7256
+#: subst.c:7478
 #, c-format
 msgid "%s: parameter not set"
 msgstr "%s: parâmetro não definido"
 
-#: subst.c:7258
+#: subst.c:7480
 #, c-format
 msgid "%s: parameter null or not set"
 msgstr "%s: parâmetro nulo ou não definido"
 
-#: subst.c:7503 subst.c:7518
+#: subst.c:7727 subst.c:7742
 #, c-format
 msgid "%s: substring expression < 0"
 msgstr "%s: expressão de sub-cadeia < 0"
 
-#: subst.c:9281 subst.c:9302
+#: subst.c:9560 subst.c:9587
 #, c-format
 msgid "%s: bad substitution"
 msgstr "%s: má substituição"
 
-#: subst.c:9390
+#: subst.c:9678
 #, c-format
 msgid "$%s: cannot assign in this way"
 msgstr "$%s: impossível atribuir desta forma"
 
-#: subst.c:9814
-msgid "future versions of the shell will force evaluation as an arithmetic substitution"
-msgstr "futuras versões da consola vão forçar a avaliação como uma substituição aritmética"
+#: subst.c:10111
+msgid ""
+"future versions of the shell will force evaluation as an arithmetic "
+"substitution"
+msgstr ""
+"futuras versões da consola vão forçar a avaliação como uma substituição "
+"aritmética"
 
-#: subst.c:10367
+#: subst.c:10795
 #, c-format
 msgid "bad substitution: no closing \"`\" in %s"
 msgstr "má substituição: sem \"\"\" de fecho em %s"
 
-#: subst.c:11434
+#: subst.c:11874
 #, c-format
 msgid "no match: %s"
 msgstr "sem par:%s"
@@ -2057,21 +2090,21 @@ msgstr "\")\" esperado"
 msgid "`)' expected, found %s"
 msgstr "\")\" esperado, encontrado %s"
 
-#: test.c:466 test.c:799
+#: test.c:469 test.c:814
 #, c-format
 msgid "%s: binary operator expected"
 msgstr "%s: operador bináro esperado"
 
-#: test.c:756 test.c:759
+#: test.c:771 test.c:774
 #, c-format
 msgid "%s: unary operator expected"
 msgstr "%s: operador unáro esperado"
 
-#: test.c:881
+#: test.c:896
 msgid "missing `]'"
 msgstr "\"]\" em falta"
 
-#: test.c:899
+#: test.c:914
 #, c-format
 msgid "syntax error: `%s' unexpected"
 msgstr "erro de sintaxe: \"%s\" esperado"
@@ -2080,103 +2113,117 @@ msgstr "erro de sintaxe: \"%s\" esperado"
 msgid "invalid signal number"
 msgstr "número de sinal inválido"
 
-#: trap.c:325
+#: trap.c:323
 #, c-format
 msgid "trap handler: maximum trap handler level exceeded (%d)"
 msgstr "gestor de trap: nível máximo de gestor de captura excedido (%d)"
 
-#: trap.c:414
+#: trap.c:412
 #, c-format
 msgid "run_pending_traps: bad value in trap_list[%d]: %p"
 msgstr "run_pending_traps: valor errado em trap_list[%d]: %p"
 
-#: trap.c:418
+#: trap.c:416
 #, c-format
-msgid "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
-msgstr "run_pending_traps: gestor de sinal é SIG_DFL, a reenviar %d (%s) para mim próprio"
+msgid ""
+"run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
+msgstr ""
+"run_pending_traps: gestor de sinal é SIG_DFL, a reenviar %d (%s) para mim "
+"próprio"
 
-#: trap.c:487
+#: trap.c:509
 #, c-format
 msgid "trap_handler: bad signal %d"
 msgstr "trap_handler: sinal errado %d"
 
-#: variables.c:421
+#: variables.c:424
 #, c-format
 msgid "error importing function definition for `%s'"
 msgstr "erro ao importar definição de função para \"%s\""
 
-#: variables.c:833
+#: variables.c:838
 #, c-format
 msgid "shell level (%d) too high, resetting to 1"
 msgstr "nível da consola (%d) muito alto, a repor para 1"
 
-#: variables.c:2674
+#: variables.c:2642
 msgid "make_local_variable: no function context at current scope"
 msgstr "make_local_variável: sem contexto de função no âmbito actual"
 
-#: variables.c:2693
+#: variables.c:2661
 #, c-format
 msgid "%s: variable may not be assigned value"
 msgstr "%s: não pode atribuir um valor à variável"
 
-#: variables.c:3475
+#: variables.c:2818 variables.c:2874
+#, c-format
+msgid "%s: cannot inherit value from incompatible type"
+msgstr ""
+
+#: variables.c:3459
 #, c-format
 msgid "%s: assigning integer to name reference"
 msgstr "%s: a atribuir inteiro à referência de nome"
 
-#: variables.c:4404
+#: variables.c:4390
 msgid "all_local_variables: no function context at current scope"
 msgstr "all_local_variables: sem contexto de função no âmbito actual"
 
-#: variables.c:4771
+#: variables.c:4757
 #, c-format
 msgid "%s has null exportstr"
 msgstr "%s tem exportstr nulo"
 
-#: variables.c:4776 variables.c:4785
+#: variables.c:4762 variables.c:4771
 #, c-format
 msgid "invalid character %d in exportstr for %s"
 msgstr "carácter %d inválido em exportstr para %s"
 
-#: variables.c:4791
+#: variables.c:4777
 #, c-format
 msgid "no `=' in exportstr for %s"
 msgstr "sem \"=\" em exportstr para %s"
 
-#: variables.c:5331
+#: variables.c:5317
 msgid "pop_var_context: head of shell_variables not a function context"
 msgstr "pop_var_context: cabeça de consola_variables não é contexto de função"
 
-#: variables.c:5344
+#: variables.c:5330
 msgid "pop_var_context: no global_variables context"
 msgstr "pop_var_context: sem contexto de global_variables"
 
-#: variables.c:5424
+#: variables.c:5410
 msgid "pop_scope: head of shell_variables not a temporary environment scope"
-msgstr "pop_scope: cabeça de consola_variables não é âmbito de ambiente temporário"
+msgstr ""
+"pop_scope: cabeça de consola_variables não é âmbito de ambiente temporário"
 
-#: variables.c:6387
+#: variables.c:6400
 #, c-format
 msgid "%s: %s: cannot open as FILE"
 msgstr "%s: %s: impossível abrir como FICHEIRO"
 
-#: variables.c:6392
+#: variables.c:6405
 #, c-format
 msgid "%s: %s: invalid value for trace file descriptor"
 msgstr "%s: %s: valor inválido para descritor de ficheiro trace"
 
-#: variables.c:6437
+#: variables.c:6450
 #, c-format
 msgid "%s: %s: compatibility value out of range"
 msgstr "%s: %s: valor de compatibilidade fora do intervalo"
 
 #: version.c:46 version2.c:46
-msgid "Copyright (C) 2020 Free Software Foundation, Inc."
+#, fuzzy
+msgid "Copyright (C) 2022 Free Software Foundation, Inc."
 msgstr "Copyright (C) 2020 Free Software Foundation, Inc."
 
 #: version.c:47 version2.c:47
-msgid "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n"
-msgstr "Licença GPLv3+: GNU GPL versão 3 ou posterior <http://gnu.org/licenses/gpl.html>\n"
+msgid ""
+"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
+"html>\n"
+msgstr ""
+"Licença GPLv3+: GNU GPL versão 3 ou posterior <http://gnu.org/licenses/gpl."
+"html>\n"
 
 #: version.c:86 version2.c:86
 #, c-format
@@ -2220,8 +2267,13 @@ msgid "unalias [-a] name [name ...]"
 msgstr "unalias [-a] nome [nome ...]"
 
 #: builtins.c:53
-msgid "bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-x keyseq:shell-command] [keyseq:readline-function or readline-command]"
-msgstr "bind [-lpsvPSVX] [-m mapa de teclado] [-f ficheiro] [-q nome] [-u nome] [-r seqtecl] [-x seqtecl:comando-consola] [seqtecl:função-readline ou comando-readline]"
+msgid ""
+"bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-"
+"x keyseq:shell-command] [keyseq:readline-function or readline-command]"
+msgstr ""
+"bind [-lpsvPSVX] [-m mapa de teclado] [-f ficheiro] [-q nome] [-u nome] [-r "
+"seqtecl] [-x seqtecl:comando-consola] [seqtecl:função-readline ou comando-"
+"readline]"
 
 #: builtins.c:56
 msgid "break [n]"
@@ -2252,11 +2304,17 @@ msgid "command [-pVv] command [arg ...]"
 msgstr "comando [-pVv] comando [arg ...]"
 
 #: builtins.c:78
-msgid "declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]"
+#, fuzzy
+msgid ""
+"declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] "
+"[name ...]"
 msgstr "declare [-aAfFgiIlnrtux] [-p] [nome[=valor] ...]"
 
 #: builtins.c:80
-msgid "typeset [-aAfFgiIlnrtux] [-p] name[=value] ..."
+#, fuzzy
+msgid ""
+"typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] "
+"[name ...]"
 msgstr "typeset [-aAfFgiIlnrtux] [-p] nome[=valor] ..."
 
 #: builtins.c:82
@@ -2316,8 +2374,12 @@ msgid "help [-dms] [pattern ...]"
 msgstr "help [-dms] [padrão ...]"
 
 #: builtins.c:123
-msgid "history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg...]"
-msgstr "history [-c] [-d desvio] [n], history -anrw [ficheiro] ou history -ps arg [arg...]"
+msgid ""
+"history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg "
+"[arg...]"
+msgstr ""
+"history [-c] [-d desvio] [n], history -anrw [ficheiro] ou history -ps arg "
+"[arg...]"
 
 #: builtins.c:127
 msgid "jobs [-lnprs] [jobspec ...] or jobs -x command [args]"
@@ -2328,23 +2390,32 @@ msgid "disown [-h] [-ar] [jobspec ... | pid ...]"
 msgstr "disown [-h] [-ar] [tarefaspec ... | pid ...]"
 
 #: builtins.c:134
-msgid "kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]"
-msgstr "kill [-s sigspec | -n signum | -sigspec] pid | tarefaspec ... ou kill -l [sigspec]"
+msgid ""
+"kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l "
+"[sigspec]"
+msgstr ""
+"kill [-s sigspec | -n signum | -sigspec] pid | tarefaspec ... ou kill -l "
+"[sigspec]"
 
 #: builtins.c:136
 msgid "let arg [arg ...]"
 msgstr "let arg [arg ...]"
 
 #: builtins.c:138
-msgid "read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]"
-msgstr "read [-ers] [-a matriz] [-d delim] [-i texto] [-n ncars] [-N ncars] [-p prompt] [-t inacção] [-u fd] [nome ...]"
+msgid ""
+"read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p "
+"prompt] [-t timeout] [-u fd] [name ...]"
+msgstr ""
+"read [-ers] [-a matriz] [-d delim] [-i texto] [-n ncars] [-N ncars] [-p "
+"prompt] [-t inacção] [-u fd] [nome ...]"
 
 #: builtins.c:140
 msgid "return [n]"
 msgstr "return [n]"
 
 #: builtins.c:142
-msgid "set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]"
+#, fuzzy
+msgid "set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]"
 msgstr "set [-abefhkmnptuvxBCHP] [-o nome-opção] [--] [arg ...]"
 
 #: builtins.c:144
@@ -2392,7 +2463,8 @@ msgid "type [-afptP] name [name ...]"
 msgstr "type [-afptP] nome [nome ...]"
 
 #: builtins.c:171
-msgid "ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]"
+#, fuzzy
+msgid "ulimit [-SHabcdefiklmnpqrstuvxPRT] [limit]"
 msgstr "ulimit [-SHabcdefiklmnpqrstuvxPT] [limite]"
 
 #: builtins.c:174
@@ -2428,15 +2500,21 @@ msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac"
 msgstr "case PALAVRA in [PADRÃO [| PADRÃO]...) COMANDOS ;;]... esac"
 
 #: builtins.c:194
-msgid "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi"
-msgstr "if COMANDOS; then COMANDOS; [ elif COMANDOS; then COMANDOS; ]... [ else COMANDOS; ] fi"
+msgid ""
+"if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else "
+"COMMANDS; ] fi"
+msgstr ""
+"if COMANDOS; then COMANDOS; [ elif COMANDOS; then COMANDOS; ]... [ else "
+"COMANDOS; ] fi"
 
 #: builtins.c:196
-msgid "while COMMANDS; do COMMANDS; done"
+#, fuzzy
+msgid "while COMMANDS; do COMMANDS-2; done"
 msgstr "while COMANDOS; do COMANDOS; done"
 
 #: builtins.c:198
-msgid "until COMMANDS; do COMMANDS; done"
+#, fuzzy
+msgid "until COMMANDS; do COMMANDS-2; done"
 msgstr "until COMANDOS; do COMANDOS; done"
 
 #: builtins.c:200
@@ -2488,24 +2566,43 @@ msgid "printf [-v var] format [arguments]"
 msgstr "printf [-v var] formato [argumentos]"
 
 #: builtins.c:231
-msgid "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [name ...]"
-msgstr "complete [-abcdefgjksuv] [-pr] [-DEI] [-o opção] [-A acção] [-G padrãoglobal] [-W listapalavras] [-F função] [-C comando] [-X padrãofiltro] [-P prefixo] [-S sufixo] [nome ...]"
+msgid ""
+"complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-"
+"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S "
+"suffix] [name ...]"
+msgstr ""
+"complete [-abcdefgjksuv] [-pr] [-DEI] [-o opção] [-A acção] [-G "
+"padrãoglobal] [-W listapalavras] [-F função] [-C comando] [-X padrãofiltro] "
+"[-P prefixo] [-S sufixo] [nome ...]"
 
 #: builtins.c:235
-msgid "compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]"
-msgstr "compgen [-abcdefgjksuv] [-o opção] [-A acção] [-G padrãoglobal] [-W listapalavras] [-F função] [-C comando] [-X padrãofiltro] [-P prefixo] [-S sufixo] [palavra]"
+msgid ""
+"compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-"
+"F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]"
+msgstr ""
+"compgen [-abcdefgjksuv] [-o opção] [-A acção] [-G padrãoglobal] [-W "
+"listapalavras] [-F função] [-C comando] [-X padrãofiltro] [-P prefixo] [-S "
+"sufixo] [palavra]"
 
 #: builtins.c:239
 msgid "compopt [-o|+o option] [-DEI] [name ...]"
 msgstr "compopt [-o|+o opção] [-DEI] [nome ...]"
 
 #: builtins.c:242
-msgid "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]"
-msgstr "mapfile [-d delim] [-n total] [-O origem] [-s total] [-t] [-u fd] [-C callback] [-c quantia] [matriz]"
+msgid ""
+"mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C "
+"callback] [-c quantum] [array]"
+msgstr ""
+"mapfile [-d delim] [-n total] [-O origem] [-s total] [-t] [-u fd] [-C "
+"callback] [-c quantia] [matriz]"
 
 #: builtins.c:244
-msgid "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]"
-msgstr "readarray [-d delim] [-n total] [-O origem] [-s total] [-t] [-u fd] [-C callback] [-c quantum] [matriz]"
+msgid ""
+"readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C "
+"callback] [-c quantum] [array]"
+msgstr ""
+"readarray [-d delim] [-n total] [-O origem] [-s total] [-t] [-u fd] [-C "
+"callback] [-c quantum] [matriz]"
 
 #: builtins.c:256
 msgid ""
@@ -2522,7 +2619,8 @@ msgid ""
 "      -p\tprint all defined aliases in a reusable format\n"
 "    \n"
 "    Exit Status:\n"
-"    alias returns true unless a NAME is supplied for which no alias has been\n"
+"    alias returns true unless a NAME is supplied for which no alias has "
+"been\n"
 "    defined."
 msgstr ""
 "Definir ou mostrar aliás.\n"
@@ -2538,7 +2636,8 @@ msgstr ""
 "      -p\timprimir todos os aliás definidos em formato reutilizável\n"
 "    \n"
 "    Estado de saída:\n"
-"    alias devolve verdadeiro a não ser que seja fornecido um NOME para o qual\n"
+"    alias devolve verdadeiro a não ser que seja fornecido um NOME para o "
+"qual\n"
 "ainda não haja um aliás."
 
 #: builtins.c:278
@@ -2569,25 +2668,30 @@ msgid ""
 "    Options:\n"
 "      -m  keymap         Use KEYMAP as the keymap for the duration of this\n"
 "                         command.  Acceptable keymap names are emacs,\n"
-"                         emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,\n"
+"                         emacs-standard, emacs-meta, emacs-ctlx, vi, vi-"
+"move,\n"
 "                         vi-command, and vi-insert.\n"
 "      -l                 List names of functions.\n"
 "      -P                 List function names and bindings.\n"
 "      -p                 List functions and bindings in a form that can be\n"
 "                         reused as input.\n"
-"      -S                 List key sequences that invoke macros and their values\n"
-"      -s                 List key sequences that invoke macros and their values\n"
+"      -S                 List key sequences that invoke macros and their "
+"values\n"
+"      -s                 List key sequences that invoke macros and their "
+"values\n"
 "                         in a form that can be reused as input.\n"
 "      -V                 List variable names and values\n"
 "      -v                 List variable names and values in a form that can\n"
 "                         be reused as input.\n"
 "      -q  function-name  Query about which keys invoke the named function.\n"
-"      -u  function-name  Unbind all keys which are bound to the named function.\n"
+"      -u  function-name  Unbind all keys which are bound to the named "
+"function.\n"
 "      -r  keyseq         Remove the binding for KEYSEQ.\n"
 "      -f  filename       Read key bindings from FILENAME.\n"
 "      -x  keyseq:shell-command\tCause SHELL-COMMAND to be executed when\n"
 "    \t\t\t\tKEYSEQ is entered.\n"
-"      -X                 List key sequences bound with -x and associated commands\n"
+"      -X                 List key sequences bound with -x and associated "
+"commands\n"
 "                         in a form that can be reused as input.\n"
 "    \n"
 "    Exit Status:\n"
@@ -2596,36 +2700,53 @@ msgstr ""
 "Definir associações de teclas e variáveis para Readline.\n"
 "    \n"
 "    Associar uma sequência de teclas a uma função ou macro Readline, ou\n"
-"    defina uma variável Readline. A sintaxe de argumento não-opção é equivalente\n"
-"    à encontrada em ~/.inputrc, mas tem de ser passada como argumento único:\n"
+"    defina uma variável Readline. A sintaxe de argumento não-opção é "
+"equivalente\n"
+"    à encontrada em ~/.inputrc, mas tem de ser passada como argumento "
+"único:\n"
 "     e.g., bind \"\"\\C-x\\C-r\": re-read-init-file\".\n"
 "     \n"
 "     Opções:\n"
-"        -m  maptecl            Use MAPTECL como mapa de teclado para a duração deste\n"
-"                                 comando. Nomes de mapas aceitáveis são emacs,\n"
-"                                 emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,\n"
+"        -m  maptecl            Use MAPTECL como mapa de teclado para a "
+"duração deste\n"
+"                                 comando. Nomes de mapas aceitáveis são "
+"emacs,\n"
+"                                 emacs-standard, emacs-meta, emacs-ctlx, vi, "
+"vi-move,\n"
 "                                 vi-command, e vi-insert.\n"
 "        -l                      Listar nomes de funções.\n"
 "        -P                      Listar nomes de funções e associações.\n"
-"        -p                      Listar funções funçãos e associações de forma a que possam\n"
+"        -p                      Listar funções funçãos e associações de "
+"forma a que possam\n"
 "                                 ser reutilizados como entrada.\n"
-"        -S                      Listar sequências de teclas que chamem macros e seus valores\n"
-"        -s                      Listar sequências de teclas que chamem macros e seus valores\n"
-"                                 de forma a que possam ser reutilizados como entrada.\n"
+"        -S                      Listar sequências de teclas que chamem "
+"macros e seus valores\n"
+"        -s                      Listar sequências de teclas que chamem "
+"macros e seus valores\n"
+"                                 de forma a que possam ser reutilizados como "
+"entrada.\n"
 "        -V                      Listar nomes de variáveis e seus valores\n"
-"        -v                      Listar nomes de variáveis e seus valores de forma a que possam\n"
+"        -v                      Listar nomes de variáveis e seus valores de "
+"forma a que possam\n"
 "                                 ser reutilizados como entrada.\n"
-"        -q  nome-função     Consultar que teclas chamaram a função em causa.\n"
-"        -u  nome-função     Unbind all keys which are bound to the named função.\n"
+"        -q  nome-função     Consultar que teclas chamaram a função em "
+"causa.\n"
+"        -u  nome-função     Unbind all keys which are bound to the named "
+"função.\n"
 "        -r  seqtecl          Remover associação de SEQTECL.\n"
-"        -f  nomefich         Ler associações de teclas a partir de NOMEFICH.\n"
-"        -x  seqtecl:comando-consola\tCausa a execuçaõ de COMANDO-SHELL quando\n"
+"        -f  nomefich         Ler associações de teclas a partir de "
+"NOMEFICH.\n"
+"        -x  seqtecl:comando-consola\tCausa a execuçaõ de COMANDO-SHELL "
+"quando\n"
 "     \t\t\t\tSEQTECL for inserido.\n"
-"        -X                      Listarsequências de teclas associadas a -x e comandos ligados\n"
-"                                 de forma a que possam ser reutilizados como entrada.\n"
+"        -X                      Listarsequências de teclas associadas a -x e "
+"comandos ligados\n"
+"                                 de forma a que possam ser reutilizados como "
+"entrada.\n"
 "     \n"
 "     Estado de saída:\n"
-"     bind devolve 0 a não ser que seja dada uma opção desconhecida ou ocorra um erro."
+"     bind devolve 0 a não ser que seja dada uma opção desconhecida ou ocorra "
+"um erro."
 
 #: builtins.c:330
 msgid ""
@@ -2639,7 +2760,8 @@ msgid ""
 msgstr ""
 "Sair de ciclos for, while, ou until.\n"
 "     \n"
-"     Sai de um ciclo FOR, WHILE ou UNTIL.  Se N for especificado, quebrar N ciclos\n"
+"     Sai de um ciclo FOR, WHILE ou UNTIL.  Se N for especificado, quebrar N "
+"ciclos\n"
 "     envolventes.\n"
 "     \n"
 "     Estado de saída:\n"
@@ -2669,7 +2791,8 @@ msgid ""
 "    \n"
 "    Execute SHELL-BUILTIN with arguments ARGs without performing command\n"
 "    lookup.  This is useful when you wish to reimplement a shell builtin\n"
-"    as a shell function, but need to execute the builtin within the function.\n"
+"    as a shell function, but need to execute the builtin within the "
+"function.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the exit status of SHELL-BUILTIN, or false if SHELL-BUILTIN is\n"
@@ -2677,12 +2800,15 @@ msgid ""
 msgstr ""
 "Executa comandos internos da consola.\n"
 "     \n"
-"     Executa SHELL-INTERNO com argumentos ARGs sem realizar procura do comando.\n"
+"     Executa SHELL-INTERNO com argumentos ARGs sem realizar procura do "
+"comando.\n"
 "     Útil quando deseja re-implementar um comando interno da consola como\n"
-"     função da consola, mas tem de executar o comando interno dentro da função.\n"
+"     função da consola, mas tem de executar o comando interno dentro da "
+"função.\n"
 "     \n"
 "     Estado de saída:\n"
-"     Devolve o estado de saída de SHELL-INTERNO ou falso se SHELL-INTERNO não\n"
+"     Devolve o estado de saída de SHELL-INTERNO ou falso se SHELL-INTERNO "
+"não\n"
 "     for um comando interno da consola."
 
 #: builtins.c:369
@@ -2710,23 +2836,30 @@ msgstr ""
 "     actual; a chamada superior é a chamada 0.\n"
 "     \n"
 "     Estado de saída:\n"
-"     Devolve 0 a não ser que a consola não esteja a executar uma função ou EXPR\n"
+"     Devolve 0 a não ser que a consola não esteja a executar uma função ou "
+"EXPR\n"
 "     seja inválida."
 
 #: builtins.c:387
 msgid ""
 "Change the shell working directory.\n"
 "    \n"
-"    Change the current directory to DIR.  The default DIR is the value of the\n"
+"    Change the current directory to DIR.  The default DIR is the value of "
+"the\n"
 "    HOME shell variable.\n"
 "    \n"
-"    The variable CDPATH defines the search path for the directory containing\n"
-"    DIR.  Alternative directory names in CDPATH are separated by a colon (:).\n"
-"    A null directory name is the same as the current directory.  If DIR begins\n"
+"    The variable CDPATH defines the search path for the directory "
+"containing\n"
+"    DIR.  Alternative directory names in CDPATH are separated by a colon "
+"(:).\n"
+"    A null directory name is the same as the current directory.  If DIR "
+"begins\n"
 "    with a slash (/), then CDPATH is not used.\n"
 "    \n"
-"    If the directory is not found, and the shell option `cdable_vars' is set,\n"
-"    the word is assumed to be  a variable name.  If that variable has a value,\n"
+"    If the directory is not found, and the shell option `cdable_vars' is "
+"set,\n"
+"    the word is assumed to be  a variable name.  If that variable has a "
+"value,\n"
 "    its value is used for DIR.\n"
 "    \n"
 "    Options:\n"
@@ -2742,25 +2875,32 @@ msgid ""
 "    \t\tattributes as a directory containing the file attributes\n"
 "    \n"
 "    The default is to follow symbolic links, as if `-L' were specified.\n"
-"    `..' is processed by removing the immediately previous pathname component\n"
+"    `..' is processed by removing the immediately previous pathname "
+"component\n"
 "    back to a slash or the beginning of DIR.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns 0 if the directory is changed, and if $PWD is set successfully when\n"
+"    Returns 0 if the directory is changed, and if $PWD is set successfully "
+"when\n"
 "    -P is used; non-zero otherwise."
 msgstr ""
 "Alterar a pasta de trabalho da consola.\n"
 "     \n"
-"     Altera a pasta actual para PASTA. A PASTA predefinida é o valor da variável\n"
+"     Altera a pasta actual para PASTA. A PASTA predefinida é o valor da "
+"variável\n"
 "     HOME.\n"
 "     \n"
 "     A variável CDPATH define o caminho de procura para a pasta que contém\n"
-"     PASTA. Nomes de pasta alternativos em CDPATH são separados por \":\" (:).\n"
-"     Um nome de pasta nulo é equivalente à pasta actual. Se PASTA começar com\n"
+"     PASTA. Nomes de pasta alternativos em CDPATH são separados por \":"
+"\" (:).\n"
+"     Um nome de pasta nulo é equivalente à pasta actual. Se PASTA começar "
+"com\n"
 "     uma barra (/), CDPATH não é usada.\n"
 "     \n"
-"     Se a pasta não for encontrada e a opção de consola \"cdable_vars\" estiver definida,\n"
-"     a palavra é assumida como nome de variável. Se essa variável tiver um valor,\n"
+"     Se a pasta não for encontrada e a opção de consola \"cdable_vars\" "
+"estiver definida,\n"
+"     a palavra é assumida como nome de variável. Se essa variável tiver um "
+"valor,\n"
 "     será usado como PASTA.\n"
 "     \n"
 "     Opções:\n"
@@ -2772,15 +2912,19 @@ msgstr ""
 "        -e\tse a opção -P for usada e a pasta de trabalho actual não puder\n"
 "     \t\tser determinada com sucesso, sair com\n"
 "     \t\testado não-zero\n"
-"        -@\tem sistemas que o suportam, apresentar um ficheiro com atributos\n"
+"        -@\tem sistemas que o suportam, apresentar um ficheiro com "
+"atributos\n"
 "     \t\testendidos como uma pasta contendo os atributos do ficheiro.\n"
 "     \n"
-"     A predefinição é seguir ligações simbólicas, como se \"-L\" fosse especificada.\n"
-"     \"..\" é processado colocando o componente de caminho imediatamente anterior\n"
+"     A predefinição é seguir ligações simbólicas, como se \"-L\" fosse "
+"especificada.\n"
+"     \"..\" é processado colocando o componente de caminho imediatamente "
+"anterior\n"
 "     como barra ou o começo de PASTA.\n"
 "     \n"
 "     Estado de saída:\n"
-"     Devolve 0 se a pasta for alterada e se $PWD for definida com sucesso quando\n"
+"     Devolve 0 se a pasta for alterada e se $PWD for definida com sucesso "
+"quando\n"
 "     -P é usada; caso contrário, não-zero."
 
 #: builtins.c:425
@@ -2805,10 +2949,12 @@ msgstr ""
 "     \t\ttrabalho\n"
 "        -P\timprimir a pasta física, sem quaisquer ligações simbólicas\n"
 "     \n"
-"     Por predefinição, \"pwd\" comporta-se como se \"-L\" fosse especificada.\n"
+"     Por predefinição, \"pwd\" comporta-se como se \"-L\" fosse "
+"especificada.\n"
 "     \n"
 "     Estado de saída:\n"
-"     Devolve 0 a não ser que seja indicada uma opçãoinválida ou a pasta actual\n"
+"     Devolve 0 a não ser que seja indicada uma opçãoinválida ou a pasta "
+"actual\n"
 "     não possa ser lida."
 
 #: builtins.c:442
@@ -2856,7 +3002,8 @@ msgid ""
 "Execute a simple command or display information about commands.\n"
 "    \n"
 "    Runs COMMAND with ARGS suppressing  shell function lookup, or display\n"
-"    information about the specified COMMANDs.  Can be used to invoke commands\n"
+"    information about the specified COMMANDs.  Can be used to invoke "
+"commands\n"
 "    on disk when a function with the same name exists.\n"
 "    \n"
 "    Options:\n"
@@ -2870,18 +3017,23 @@ msgid ""
 msgstr ""
 "Executar um comando simples ou mostrar informação sobre comandos.\n"
 "     \n"
-"     Executa COMANDO com ARGS suprimindo procura de funções da consola ou mostra\n"
-"     informação acerca dos COMANDOs especificados. Pode ser usado para chamar comandos\n"
+"     Executa COMANDO com ARGS suprimindo procura de funções da consola ou "
+"mostra\n"
+"     informação acerca dos COMANDOs especificados. Pode ser usado para "
+"chamar comandos\n"
 "     em disco quando existe uma função com o mesmo nome.\n"
 "     \n"
 "     Opções:\n"
-"        -p     usar valor predefinido para CAMINHO que garanta que se encontram\n"
+"        -p     usar valor predefinido para CAMINHO que garanta que se "
+"encontram\n"
 "                todos os utilitários padrão\n"
-"        -v     imprimir uma descrição de COMANDO similar ao interno \"type\"\n"
+"        -v     imprimir uma descrição de COMANDO similar ao interno \"type"
+"\"\n"
 "        -V     imprimir uma descrição mais detalhada de COMANDO\n"
 "     \n"
 "     Estado de saída:\n"
-"     Devolve o estado de saída de COMANDO ou falha se COMANDO não for encontrado."
+"     Devolve o estado de saída de COMANDO ou falha se COMANDO não for "
+"encontrado."
 
 #: builtins.c:490
 msgid ""
@@ -2916,7 +3068,8 @@ msgid ""
 "    Variables with the integer attribute have arithmetic evaluation (see\n"
 "    the `let' command) performed when the variable is assigned a value.\n"
 "    \n"
-"    When used in a function, `declare' makes NAMEs local, as with the `local'\n"
+"    When used in a function, `declare' makes NAMEs local, as with the "
+"`local'\n"
 "    command.  The `-g' option suppresses this behavior.\n"
 "    \n"
 "    Exit Status:\n"
@@ -2932,7 +3085,8 @@ msgstr ""
 "        -f\trestringe acção ou exibição a nomes e definições de função\n"
 "        -F\trestringe exibição só a nomes de função (mais nº de linha e\n"
 "     \t\tficheiro fonte ao depurar)\n"
-"        -g\tcria variáveis globais quando usado numa função da consola; senão\n"
+"        -g\tcria variáveis globais quando usado numa função da consola; "
+"senão\n"
 "     \t\té ignorada\n"
 "        -I\tse está a criar uma variável local, herdar atributos e valor\n"
 "    \t\tduma variável com o mesmo nome num âmbito anterior\n"
@@ -2954,11 +3108,13 @@ msgstr ""
 "     Variáveis com o atributo integer têm avaliação aritmética (veja o\n"
 "     comando \"let\") realizada quando lhe é atribuído um valor.\n"
 "     \n"
-"     Quando usado numa função, \"declare\" torna NOMEs locais, como o comando\n"
+"     Quando usado numa função, \"declare\" torna NOMEs locais, como o "
+"comando\n"
 "     \"local\". A opção \"-g\" suprime este comportamento.\n"
 "     \n"
 "     Estado de saída:\n"
-"     Devolve sucesso a não ser que seja indicada uma opção inválida ou ocorra um\n"
+"     Devolve sucesso a não ser que seja indicada uma opção inválida ou "
+"ocorra um\n"
 "     erro de atribuição da variável."
 
 #: builtins.c:532
@@ -2990,18 +3146,21 @@ msgstr ""
 "     Cria uma variável local chamada NOME e dá-lhe VALOR. OPÇÃO pode\n"
 "     ser qualquer opção aceite por \"declare\".\n"
 "     \n"
-"     Variáveis locais só podem ser usadas dentro de uma função; só são visíveis\n"
+"     Variáveis locais só podem ser usadas dentro de uma função; só são "
+"visíveis\n"
 "     para a função onde foram definidas e para os seus filhos.\n"
 "     \n"
 "     Estado de saída:\n"
-"     Devolve sucesso a não ser que uma opção inválida seja fornecida, ocorra \n"
+"     Devolve sucesso a não ser que uma opção inválida seja fornecida, "
+"ocorra \n"
 "     um erro de atribuição ou a consola não esteja a executar uma função."
 
 #: builtins.c:557
 msgid ""
 "Write arguments to the standard output.\n"
 "    \n"
-"    Display the ARGs, separated by a single space character and followed by a\n"
+"    Display the ARGs, separated by a single space character and followed by "
+"a\n"
 "    newline, on the standard output.\n"
 "    \n"
 "    Options:\n"
@@ -3025,9 +3184,11 @@ msgid ""
 "    \t\t0 to 3 octal digits\n"
 "      \\xHH\tthe eight-bit character whose value is HH (hexadecimal).  HH\n"
 "    \t\tcan be one or two hex digits\n"
-"      \\uHHHH\tthe Unicode character whose value is the hexadecimal value HHHH.\n"
+"      \\uHHHH\tthe Unicode character whose value is the hexadecimal value "
+"HHHH.\n"
 "    \t\tHHHH can be one to four hex digits.\n"
-"      \\UHHHHHHHH the Unicode character whose value is the hexadecimal value\n"
+"      \\UHHHHHHHH the Unicode character whose value is the hexadecimal "
+"value\n"
 "    \t\tHHHHHHHH. HHHHHHHH can be one to eight hex digits.\n"
 "    \n"
 "    Exit Status:\n"
@@ -3041,9 +3202,11 @@ msgstr ""
 "     Opções:\n"
 "        -n\tnaõ acrescentar nova linha\n"
 "        -e\tpermitir interpretação dos escapes seguintes com barra esquerda\n"
-"        -E\tsuprimir explicitamente interpretação de escapes com barra esquerda\n"
+"        -E\tsuprimir explicitamente interpretação de escapes com barra "
+"esquerda\n"
 "     \n"
-"     \"echo\" interpreta os seguintes caracteres de escapes com barra esquerda:\n"
+"     \"echo\" interpreta os seguintes caracteres de escapes com barra "
+"esquerda:\n"
 "        \\a\talerta (bell)\n"
 "        \\b\tbackspace\n"
 "        \\c\tsuprimir mais saídas\n"
@@ -3123,7 +3286,8 @@ msgstr ""
 "     \n"
 "     Opções:\n"
 "        -a\timprimir lista de internos mostrando se estão ou não activos\n"
-"        -n\tdesactivar cada NOME ou mostrar uma lista de internos desactivados\n"
+"        -n\tdesactivar cada NOME ou mostrar uma lista de internos "
+"desactivados\n"
 "        -p\timprimir a lista de internos em formato reutilizável\n"
 "        -s\timprimir só os nomes de internos \"especiais\" Posix\n"
 "     \n"
@@ -3137,13 +3301,15 @@ msgstr ""
 "     insira \"enable -n test\".\n"
 "     \n"
 "     Estado de saída:\n"
-"     Devolve sucesso a não ser que NOME não seja um interno da consola ou ocorra um erro."
+"     Devolve sucesso a não ser que NOME não seja um interno da consola ou "
+"ocorra um erro."
 
 #: builtins.c:640
 msgid ""
 "Execute arguments as a shell command.\n"
 "    \n"
-"    Combine ARGs into a single string, use the result as input to the shell,\n"
+"    Combine ARGs into a single string, use the result as input to the "
+"shell,\n"
 "    and execute the resulting commands.\n"
 "    \n"
 "    Exit Status:\n"
@@ -3151,7 +3317,8 @@ msgid ""
 msgstr ""
 "Executa argumentos como comando da consola.\n"
 "     \n"
-"     Combina ARGs numa única cadeia, usa o resultado como entrada da consola,\n"
+"     Combina ARGs numa única cadeia, usa o resultado como entrada da "
+"consola,\n"
 "     e executa os comandos resultantes.\n"
 "     \n"
 "     Estado de saída:\n"
@@ -3199,7 +3366,8 @@ msgid ""
 msgstr ""
 "Analisa argumentos da opção.\n"
 "     \n"
-"     Getopts é usado pelos procedimentos da consola para analisar parâmetros posicionais\n"
+"     Getopts é usado pelos procedimentos da consola para analisar parâmetros "
+"posicionais\n"
 "     como opções.\n"
 "     \n"
 "     CADEIAOPÇÕES contém as letras de opção a reconhecer; se uma letra\n"
@@ -3220,7 +3388,8 @@ msgstr ""
 "     Se não houver um argumento requerido, o getopts põe um \":\" no NOME e\n"
 "     define OPTARG como o carácter de opção encontrado. Se o getopts não\n"
 "     estiver em modo silêncio e for vista uma opção inválida, o getopts\n"
-"     põe \"?\" no NOME e limpa OPTARG. Se não houver um argumento requerido,\n"
+"     põe \"?\" no NOME e limpa OPTARG. Se não houver um argumento "
+"requerido,\n"
 "     é posto \"?\" no NOME, OPTARG é limpo e é imprimida uma mensagem de\n"
 "     diagnóstico.\n"
 "     \n"
@@ -3229,7 +3398,8 @@ msgstr ""
 "     CADEIAOPÇÕES não seja \":\". OPTERR tem o valor 1 predefinido.\n"
 "     \n"
 "     O getopts normalmente analisa os parâmetros posicionais, mas se\n"
-"     os argumentosforem dados como valores ARG, são eles que são analisados.\n"
+"     os argumentosforem dados como valores ARG, são eles que são "
+"analisados.\n"
 "     \n"
 "     Estado de saída:\n"
 "     Devolve sucesso se encontrar uma opção; falha se o fim da opção for\n"
@@ -3240,7 +3410,8 @@ msgid ""
 "Replace the shell with the given command.\n"
 "    \n"
 "    Execute COMMAND, replacing this shell with the specified program.\n"
-"    ARGUMENTS become the arguments to COMMAND.  If COMMAND is not specified,\n"
+"    ARGUMENTS become the arguments to COMMAND.  If COMMAND is not "
+"specified,\n"
 "    any redirections take effect in the current shell.\n"
 "    \n"
 "    Options:\n"
@@ -3248,16 +3419,20 @@ msgid ""
 "      -c\texecute COMMAND with an empty environment\n"
 "      -l\tplace a dash in the zeroth argument to COMMAND\n"
 "    \n"
-"    If the command cannot be executed, a non-interactive shell exits, unless\n"
+"    If the command cannot be executed, a non-interactive shell exits, "
+"unless\n"
 "    the shell option `execfail' is set.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success unless COMMAND is not found or a redirection error occurs."
+"    Returns success unless COMMAND is not found or a redirection error "
+"occurs."
 msgstr ""
 "Substitui a consola com o comando indicado.\n"
 "     \n"
-"     Executar COMANDO, substituindo esta consola pelo programa especificado.\n"
-"     ARGUMENTOS tornam-se os argumentos de COMANDO. Se COMANDO não for especificado,\n"
+"     Executar COMANDO, substituindo esta consola pelo programa "
+"especificado.\n"
+"     ARGUMENTOS tornam-se os argumentos de COMANDO. Se COMANDO não for "
+"especificado,\n"
 "     quaisquer redireccionamentos têm efeito na consola actual.\n"
 "     \n"
 "     Opções:\n"
@@ -3265,11 +3440,13 @@ msgstr ""
 "        -c\texecuta COMANDO com um ambiente vazio\n"
 "        -l\tpõe uma barra no argumento 0 de COMANDO\n"
 "     \n"
-"     Se o comando não puder ser executado, uma consola não interactiva sai, a não ser que\n"
+"     Se o comando não puder ser executado, uma consola não interactiva sai, "
+"a não ser que\n"
 "     a opção de consola \"execfail\" esteja definida.\n"
 "     \n"
 "     Estado de saída:\n"
-"     Devolve sucesso a não ser que COMANDO não seja encontrado ou ocorra um erro de redireccionamento."
+"     Devolve sucesso a não ser que COMANDO não seja encontrado ou ocorra um "
+"erro de redireccionamento."
 
 #: builtins.c:715
 msgid ""
@@ -3287,25 +3464,29 @@ msgstr ""
 msgid ""
 "Exit a login shell.\n"
 "    \n"
-"    Exits a login shell with exit status N.  Returns an error if not executed\n"
+"    Exits a login shell with exit status N.  Returns an error if not "
+"executed\n"
 "    in a login shell."
 msgstr ""
 "Sai de uma consola com sessão.\n"
 "     \n"
-"     Sai de uma consola com sessão com estado de saída N.  Devolve um erro se não for\n"
+"     Sai de uma consola com sessão com estado de saída N.  Devolve um erro "
+"se não for\n"
 "     executado numa consola com sessão."
 
 #: builtins.c:734
 msgid ""
 "Display or execute commands from the history list.\n"
 "    \n"
-"    fc is used to list or edit and re-execute commands from the history list.\n"
+"    fc is used to list or edit and re-execute commands from the history "
+"list.\n"
 "    FIRST and LAST can be numbers specifying the range, or FIRST can be a\n"
 "    string, which means the most recent command beginning with that\n"
 "    string.\n"
 "    \n"
 "    Options:\n"
-"      -e ENAME\tselect which editor to use.  Default is FCEDIT, then EDITOR,\n"
+"      -e ENAME\tselect which editor to use.  Default is FCEDIT, then "
+"EDITOR,\n"
 "    \t\tthen vi\n"
 "      -l \tlist lines instead of editing\n"
 "      -n\tomit line numbers when listing\n"
@@ -3319,17 +3500,21 @@ msgid ""
 "    the last command.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success or status of executed command; non-zero if an error occurs."
+"    Returns success or status of executed command; non-zero if an error "
+"occurs."
 msgstr ""
 "Mostra ou executa comandos da lista do histórico.\n"
 "     \n"
-"     fc é usado para listar ou editar e re-executar comandos da lsiat do histórico.\n"
-"     PRIMEIRO e ÚLTIMO podem ser números especificando o intervalo, ou PRIMEIRO pode ser\n"
+"     fc é usado para listar ou editar e re-executar comandos da lsiat do "
+"histórico.\n"
+"     PRIMEIRO e ÚLTIMO podem ser números especificando o intervalo, ou "
+"PRIMEIRO pode ser\n"
 "     cadeia, que significa o comando mais recente começado por essa\n"
 "     cadeia.\n"
 "     \n"
 "     Opções:\n"
-"        -e NOMEED\tseleciona o editor a usar.  A predefinição é FCEDIT, depois EDITOR,\n"
+"        -e NOMEED\tseleciona o editor a usar.  A predefinição é FCEDIT, "
+"depois EDITOR,\n"
 "     \t\tdepois vi\n"
 "        -l \tlistar linhas em vez de editar\n"
 "        -n\tomitir nºs de linha ao ouvir\n"
@@ -3339,11 +3524,13 @@ msgstr ""
 "     re-executado após a substituição VELHO=NOVO ser realizada.\n"
 "     \n"
 "     Um aliás útil a usar aqui é r=\"fc -s\", para que inserir \"r cc\"\n"
-"     executa o último comando começado por \"cc\" e inserir \"r\" re-executa\n"
+"     executa o último comando começado por \"cc\" e inserir \"r\" re-"
+"executa\n"
 "     o último comando.\n"
 "     \n"
 "     Estado de saída:\n"
-"     Devolve sucesso ou estado do comando executado; não-zero se ocorrer um erro."
+"     Devolve sucesso ou estado do comando executado; não-zero se ocorrer um "
+"erro."
 
 #: builtins.c:764
 msgid ""
@@ -3369,8 +3556,10 @@ msgstr ""
 msgid ""
 "Move jobs to the background.\n"
 "    \n"
-"    Place the jobs identified by each JOB_SPEC in the background, as if they\n"
-"    had been started with `&'.  If JOB_SPEC is not present, the shell's notion\n"
+"    Place the jobs identified by each JOB_SPEC in the background, as if "
+"they\n"
+"    had been started with `&'.  If JOB_SPEC is not present, the shell's "
+"notion\n"
 "    of the current job is used.\n"
 "    \n"
 "    Exit Status:\n"
@@ -3378,19 +3567,23 @@ msgid ""
 msgstr ""
 "Move a tarefa para 2º plano.\n"
 "     \n"
-"     Coloca a tarefa identificada com cada JOB_SPEC em 2º plano, como se tivessem\n"
-"     sido iniciados com \"&\". Se JOB_SPEC não existir, é usada a noção da consola de\n"
+"     Coloca a tarefa identificada com cada JOB_SPEC em 2º plano, como se "
+"tivessem\n"
+"     sido iniciados com \"&\". Se JOB_SPEC não existir, é usada a noção da "
+"consola de\n"
 "     tarefa actual.\n"
 "     \n"
 "     Estado de saída:\n"
-"     Devolve sucesso a não ser que o controlo de tarefas esteja inactivo ou ocorra um erro."
+"     Devolve sucesso a não ser que o controlo de tarefas esteja inactivo ou "
+"ocorra um erro."
 
 #: builtins.c:793
 msgid ""
 "Remember or display program locations.\n"
 "    \n"
 "    Determine and remember the full pathname of each command NAME.  If\n"
-"    no arguments are given, information about remembered commands is displayed.\n"
+"    no arguments are given, information about remembered commands is "
+"displayed.\n"
 "    \n"
 "    Options:\n"
 "      -d\tforget the remembered location of each NAME\n"
@@ -3425,7 +3618,8 @@ msgstr ""
 "     \t\tde comandos lembrados.\n"
 "     \n"
 "     Estado de saída:\n"
-"     Devolve sucesso a não ser que NOME não seja encontrado ou indique uma opção inválida."
+"     Devolve sucesso a não ser que NOME não seja encontrado ou indique uma "
+"opção inválida."
 
 #: builtins.c:818
 msgid ""
@@ -3445,12 +3639,14 @@ msgid ""
 "      PATTERN\tPattern specifying a help topic\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success unless PATTERN is not found or an invalid option is given."
+"    Returns success unless PATTERN is not found or an invalid option is "
+"given."
 msgstr ""
 "Mostra informação sobre comandos internos.\n"
 "     \n"
 "     Mostra breves resumos de comandos internos. Se PADRÃO for\n"
-"     especificado, dá ajuda detalhada em todos os comandos que cumpram PADRÃO,\n"
+"     especificado, dá ajuda detalhada em todos os comandos que cumpram "
+"PADRÃO,\n"
 "     senão imprime a lista de tópicos de ajuda.\n"
 "     \n"
 "     Opções:\n"
@@ -3463,7 +3659,8 @@ msgstr ""
 "        PADRÃO\tPadrão que especifica um tópico de ajuda\n"
 "     \n"
 "     Estado de saída:\n"
-"     Devolve sucesso a não ser que PADRÃO não seja encontrado ou indique uma opção inválida."
+"     Devolve sucesso a não ser que PADRÃO não seja encontrado ou indique uma "
+"opção inválida."
 
 #: builtins.c:842
 msgid ""
@@ -3493,7 +3690,8 @@ msgid ""
 "    \n"
 "    If the HISTTIMEFORMAT variable is set and not null, its value is used\n"
 "    as a format string for strftime(3) to print the time stamp associated\n"
-"    with each displayed history entry.  No time stamps are printed otherwise.\n"
+"    with each displayed history entry.  No time stamps are printed "
+"otherwise.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns success unless an invalid option is given or an error occurs."
@@ -3501,15 +3699,18 @@ msgstr ""
 "Mostra ou manipula a lista do histórico.\n"
 "     \n"
 "     Mostra a lista do histórico com nºs de linha, prefixando cada entrada\n"
-"     modificada com um \"*\". Um argumento de N lista só as últimas N entradas.\n"
+"     modificada com um \"*\". Um argumento de N lista só as últimas N "
+"entradas.\n"
 "     \n"
 "     Opções:\n"
 "        -c\tlimpa a lista eliminado todas as entradas\n"
 "        -d desvio\telimina a entrada do histórico na posição DESVIO.\n"
 "    \t\tDesvios negativos contam-se do final da lista do histórico\n"
 "     \n"
-"        -a\tacrescenta linhas de histórico desta sessão ao ficheiro de histórico\n"
-"        -n\tlê todas as linhas de histórico ainda não lidas do ficheiro de histórico\n"
+"        -a\tacrescenta linhas de histórico desta sessão ao ficheiro de "
+"histórico\n"
+"        -n\tlê todas as linhas de histórico ainda não lidas do ficheiro de "
+"histórico\n"
 "     \t\te acrescenta-as à lista de histórico\n"
 "        -r\tlê o ficheiro de histórico e acrescenta o conteúdo à lista de\n"
 "     \t\thistórico\n"
@@ -3520,14 +3721,19 @@ msgstr ""
 "        -s\tacrescenta ARGs à lista de histórico como entrada única\n"
 "     \n"
 "     Se NOMEFICH for dado, é usado como ficheiro de histórico. Senão,\n"
-"     se FICHHIST tiver um valor, será usado, caso contrário ~/.bash_history.\n"
+"     se FICHHIST tiver um valor, será usado, caso contrário ~/."
+"bash_history.\n"
 "     \n"
-"     Se a variável HISTTIMEFORMAT estiver definida e não for nula, o valor é usado\n"
-"     como cadeia de formato para strftime(3) para imprimir o carimbo associado\n"
-"     a cada entrada de histórico mostrada. Senão, não são imprimidos quaisquer carimbos.\n"
+"     Se a variável HISTTIMEFORMAT estiver definida e não for nula, o valor é "
+"usado\n"
+"     como cadeia de formato para strftime(3) para imprimir o carimbo "
+"associado\n"
+"     a cada entrada de histórico mostrada. Senão, não são imprimidos "
+"quaisquer carimbos.\n"
 "     \n"
 "     Estado de saída:\n"
-"     Devolve sucesso a não ser que indique uma opção inválida ou ocorra um erro."
+"     Devolve sucesso a não ser que indique uma opção inválida ou ocorra um "
+"erro."
 
 #: builtins.c:879
 msgid ""
@@ -3565,12 +3771,15 @@ msgstr ""
 "        -r\trea cadeiae saída a tarefas em execução\n"
 "        -s\trea cadeiae saída a tarefas paradas\n"
 "     \n"
-"     Se -x for usado, COMANDO é executado após todas as especificações de tarefas\n"
-"     que aparecem em ARGS terem sido substituídas pela ID de processo do líder de\n"
+"     Se -x for usado, COMANDO é executado após todas as especificações de "
+"tarefas\n"
+"     que aparecem em ARGS terem sido substituídas pela ID de processo do "
+"líder de\n"
 "     grupo do processo dessat tarefa.\n"
 "     \n"
 "     Estado de saída:\n"
-"     Devolve sucesso a não ser que indique uma opção inválida ou ocorra um erro.\n"
+"     Devolve sucesso a não ser que indique uma opção inválida ou ocorra um "
+"erro.\n"
 "     Se -x for usado, devolve o estado de saída de COMANDO."
 
 #: builtins.c:906
@@ -3596,12 +3805,14 @@ msgstr ""
 "     \n"
 "     Opções:\n"
 "        -a\tremove todas as tarefas se JOBSPEC não for indicado\n"
-"        -h\tmarcar cada JOBSPEC para que SIGHUP não seja enviado para a tarefa\n"
+"        -h\tmarcar cada JOBSPEC para que SIGHUP não seja enviado para a "
+"tarefa\n"
 "     \t\tse a consola receber um SIGHUP\n"
 "        -r\tremove só tarefas em execução\n"
 "     \n"
 "     Estado de saída:\n"
-"     Devolve sucesso a não ser que uma opção inválida ou JOBSPEC seja indicada."
+"     Devolve sucesso a não ser que uma opção inválida ou JOBSPEC seja "
+"indicada."
 
 #: builtins.c:925
 msgid ""
@@ -3638,12 +3849,14 @@ msgstr ""
 "     \t\tassumidos como nºs de sinal para listar os nomes\n"
 "        -L\tsinónimo de -l\n"
 "     \n"
-"     Mata um interno da consola por dois motivos: permite usar as IDs de tarefa\n"
+"     Mata um interno da consola por dois motivos: permite usar as IDs de "
+"tarefa\n"
 "     em vez de IDs de processo e permite matar processos se o limite de\n"
 "     processos que pode criar for atingido.\n"
 "     \n"
 "     Estado de saída:\n"
-"     Devolve sucesso a não ser que indique uma opção inválida ou ocorra um erro."
+"     Devolve sucesso a não ser que indique uma opção inválida ou ocorra um "
+"erro."
 
 #: builtins.c:949
 msgid ""
@@ -3652,7 +3865,8 @@ msgid ""
 "    Evaluate each ARG as an arithmetic expression.  Evaluation is done in\n"
 "    fixed-width integers with no check for overflow, though division by 0\n"
 "    is trapped and flagged as an error.  The following list of operators is\n"
-"    grouped into levels of equal-precedence operators.  The levels are listed\n"
+"    grouped into levels of equal-precedence operators.  The levels are "
+"listed\n"
 "    in order of decreasing precedence.\n"
 "    \n"
 "    \tid++, id--\tvariable post-increment, post-decrement\n"
@@ -3691,8 +3905,10 @@ msgstr ""
 "Avalia as expressões aritméticas.\n"
 "     \n"
 "     Avalia cada ARG como uma expressão aritmética. A avaliação é feita em\n"
-"     inteiros de largura fixa sem verificação de transporte, embora a divisão\n"
-"     por 0 seja sinalizada como erro. A seguinte lista de operadores é agrupada\n"
+"     inteiros de largura fixa sem verificação de transporte, embora a "
+"divisão\n"
+"     por 0 seja sinalizada como erro. A seguinte lista de operadores é "
+"agrupada\n"
 "     em níveis de igual prioridade. Os níveis estão listados\n"
 "     por ordem de precedência decrescente.\n"
 "     \n"
@@ -3717,8 +3933,10 @@ msgstr ""
 "     \t+=, -=, <<=, >>=,\n"
 "     \t&=, ^=, |=\tatribuição\n"
 "     \n"
-"     As variáveis de consola são permitidas como operandos. O nome da variável\n"
-"     é substituído pelo seu valor (convertido em inteiro de largura fixa) dentro\n"
+"     As variáveis de consola são permitidas como operandos. O nome da "
+"variável\n"
+"     é substituído pelo seu valor (convertido em inteiro de largura fixa) "
+"dentro\n"
 "     de uma expressão. A variável não tem de ter o seu atributo inteiro\n"
 "     activado para ser usado numa expressão.\n"
 "     \n"
@@ -3730,17 +3948,23 @@ msgstr ""
 "     Se o último ARG for avaliado como 0, let devolve 1; senão let devolve 0."
 
 #: builtins.c:994
+#, fuzzy
 msgid ""
 "Read a line from the standard input and split it into fields.\n"
 "    \n"
 "    Reads a single line from the standard input, or from file descriptor FD\n"
-"    if the -u option is supplied.  The line is split into fields as with word\n"
+"    if the -u option is supplied.  The line is split into fields as with "
+"word\n"
 "    splitting, and the first word is assigned to the first NAME, the second\n"
 "    word to the second NAME, and so on, with any leftover words assigned to\n"
-"    the last NAME.  Only the characters found in $IFS are recognized as word\n"
-"    delimiters.\n"
+"    the last NAME.  Only the characters found in $IFS are recognized as "
+"word\n"
+"    delimiters. By default, the backslash character escapes delimiter "
+"characters\n"
+"    and newline.\n"
 "    \n"
-"    If no NAMEs are supplied, the line read is stored in the REPLY variable.\n"
+"    If no NAMEs are supplied, the line read is stored in the REPLY "
+"variable.\n"
 "    \n"
 "    Options:\n"
 "      -a array\tassign the words read to sequential indices of the array\n"
@@ -3752,7 +3976,8 @@ msgid ""
 "      -n nchars\treturn after reading NCHARS characters rather than waiting\n"
 "    \t\tfor a newline, but honor a delimiter if fewer than\n"
 "    \t\tNCHARS characters are read before the delimiter\n"
-"      -N nchars\treturn only after reading exactly NCHARS characters, unless\n"
+"      -N nchars\treturn only after reading exactly NCHARS characters, "
+"unless\n"
 "    \t\tEOF is encountered or read times out, ignoring any\n"
 "    \t\tdelimiter\n"
 "      -p prompt\toutput the string PROMPT without a trailing newline before\n"
@@ -3770,32 +3995,40 @@ msgid ""
 "      -u fd\tread from file descriptor FD instead of the standard input\n"
 "    \n"
 "    Exit Status:\n"
-"    The return code is zero, unless end-of-file is encountered, read times out\n"
-"    (in which case it's greater than 128), a variable assignment error occurs,\n"
+"    The return code is zero, unless end-of-file is encountered, read times "
+"out\n"
+"    (in which case it's greater than 128), a variable assignment error "
+"occurs,\n"
 "    or an invalid file descriptor is supplied as the argument to -u."
 msgstr ""
 "Lê uma linha da entrada padrão e divide-a em campos.\n"
 "     \n"
 "     Lê uma linha da entrada padrão ou do descritor de ficheiro FD\n"
 "     se a opção -u for usada. A linha é dividida em campos como na divisão\n"
-"     de palavras e a primeira palavra é atribuída ao primeiro NOME, a segunda\n"
-"     ao segundo NOME, e assim por diante, com quaisquer palavras que sobrem \n"
-"     atribuídas ao último NOME. Só caracteres encontrados em $IFS são reconhecidos\n"
+"     de palavras e a primeira palavra é atribuída ao primeiro NOME, a "
+"segunda\n"
+"     ao segundo NOME, e assim por diante, com quaisquer palavras que "
+"sobrem \n"
+"     atribuídas ao último NOME. Só caracteres encontrados em $IFS são "
+"reconhecidos\n"
 "     como delimitadores de palavras.\n"
 "     \n"
 "     Se não indicar NOMEs, a linha é armazenada na variável RESPONDER.\n"
 "     \n"
 "     Opções:\n"
-"        -a matriz\tatribui as palavras lidas a índices sequenciais da MATRIZ\n"
+"        -a matriz\tatribui as palavras lidas a índices sequenciais da "
+"MATRIZ\n"
 "     \t\tcomeçando em zero\n"
-"        -d delim\tcontinua até que o primeiro carácter de DELIM seja lido, em vez de\n"
+"        -d delim\tcontinua até que o primeiro carácter de DELIM seja lido, "
+"em vez de\n"
 "     \t\tnewline\n"
 "        -e\tusa Readline para obter a linha numa consola interactiva\n"
 "        -i texto\tusa TEXTO como texto inicial para Readline\n"
 "        -n ncars\tvolta após ler NCARS caracteres em vez de esperar\n"
 "     \t\tpor newline, mas respeita um delimitador se estiver\n"
 "     \t\tantes de NCARS caracteres\n"
-"        -N ncars\tvolta após ler exactamente NCARS caracteres, a não ser que\n"
+"        -N ncars\tvolta após ler exactamente NCARS caracteres, a não ser "
+"que\n"
 "     \t\tEOF seja encontrado ou a leitura esteja inactiva, ignorando\n"
 "     \t\tqualquer delimitador\n"
 "        -p prompt\timprime PROMPT na saída sem newline final antes de\n"
@@ -3813,11 +4046,13 @@ msgstr ""
 "        -u fd\tlê do descritor de ficheiro FD em vez da entrada padrão\n"
 "     \n"
 "     Estado de saída:\n"
-"     O código devolvido é zero, a não ser que end-of-file seja encontrado, haja\n"
-"     inacção (caso em que é maior que 128), ocorra um erro de atribuição de variável,\n"
+"     O código devolvido é zero, a não ser que end-of-file seja encontrado, "
+"haja\n"
+"     inacção (caso em que é maior que 128), ocorra um erro de atribuição de "
+"variável,\n"
 "     ou seja indicado um descritor de ficheiro inválido como argumento de -u."
 
-#: builtins.c:1041
+#: builtins.c:1042
 msgid ""
 "Return from a shell function.\n"
 "    \n"
@@ -3835,9 +4070,10 @@ msgstr ""
 "     executado dentro da função ou script.\n"
 "     \n"
 "     Estado de saída:\n"
-"     Devolve N, ou falha se a consola não estiver a executar uma função ou script."
+"     Devolve N, ou falha se a consola não estiver a executar uma função ou "
+"script."
 
-#: builtins.c:1054
+#: builtins.c:1055
 msgid ""
 "Set or unset values of shell options and positional parameters.\n"
 "    \n"
@@ -3880,7 +4116,8 @@ msgid ""
 "              physical     same as -P\n"
 "              pipefail     the return value of a pipeline is the status of\n"
 "                           the last command to exit with a non-zero status,\n"
-"                           or zero if no command exited with a non-zero status\n"
+"                           or zero if no command exited with a non-zero "
+"status\n"
 "              posix        change the behavior of bash where the default\n"
 "                           operation differs from the Posix standard to\n"
 "                           match the standard\n"
@@ -3904,7 +4141,8 @@ msgid ""
 "          by default when the shell is interactive.\n"
 "      -P  If set, do not resolve symbolic links when executing commands\n"
 "          such as cd which change the current directory.\n"
-"      -T  If set, the DEBUG and RETURN traps are inherited by shell functions.\n"
+"      -T  If set, the DEBUG and RETURN traps are inherited by shell "
+"functions.\n"
 "      --  Assign any remaining arguments to the positional parameters.\n"
 "          If there are no remaining arguments, the positional parameters\n"
 "          are unset.\n"
@@ -3928,10 +4166,12 @@ msgstr ""
 "     Opções:\n"
 "        -a  Marca variáveis modificadas ou criadas para exportação.\n"
 "         -b Notifica o fim da tarefa imediatamente.\n"
-"         -e Sai imediatamente se um comando sair com estado diferente de zero.\n"
+"         -e Sai imediatamente se um comando sair com estado diferente de "
+"zero.\n"
 "         -f Desactiva geração de nome de ficheiro (globbing).\n"
 "         -h Recordar localização de comandos à medida que são procurados.\n"
-"         -k Todos os argumentos de atribuição são colocados no ambiente para um\n"
+"         -k Todos os argumentos de atribuição são colocados no ambiente para "
+"um\n"
 "             comando, não só os que precedem o nome do comando.\n"
 "         -m Activa o controlo de tarefas.\n"
 "         -n Lê comandos, mas não os executa.\n"
@@ -3948,7 +4188,8 @@ msgstr ""
 "                  history        activa histórico de comandos\n"
 "                  ignoreeof     a consola não sai após ler EOF\n"
 "                  interactive-comments\n"
-"                                    permite que comentários apareçam em comandos interactivos\n"
+"                                    permite que comentários apareçam em "
+"comandos interactivos\n"
 "                  keyword        igual a -k\n"
 "                  monitor        igual a -m\n"
 "                  noclobber     igual a -C\n"
@@ -3959,11 +4200,16 @@ msgstr ""
 "                  nounset        igual a -u\n"
 "                  onecmd         igual a -t\n"
 "                  physical      igual a -P\n"
-"                  pipefail      o valor devolvido de um pipeline é o estado do\n"
-"                                    último comando a sair com estado não-zero,\n"
-"                                    ou zero se nenhum saiu com estado não-zero\n"
-"                  posix          altera o comportamento do bash onde a operação\n"
-"                                    predefinida diferir da norma Posix para cumprir\n"
+"                  pipefail      o valor devolvido de um pipeline é o estado "
+"do\n"
+"                                    último comando a sair com estado não-"
+"zero,\n"
+"                                    ou zero se nenhum saiu com estado não-"
+"zero\n"
+"                  posix          altera o comportamento do bash onde a "
+"operação\n"
+"                                    predefinida diferir da norma Posix para "
+"cumprir\n"
 "                                    a norma\n"
 "                  privileged    igual a -p\n"
 "                  verbose        igual a -v\n"
@@ -3972,24 +4218,28 @@ msgstr ""
 "        -p  Activado sempre que as ID de utilizador reais e efectivas não\n"
 "             coincidam. Desactiva o processamento do ficheiro $ ENV e a \n"
 "             importação de funções da consola. Desligar esta opção faz com\n"
-"             que os uid e gid efectivos sejam definidos para os uid e gid reais.\n"
+"             que os uid e gid efectivos sejam definidos para os uid e gid "
+"reais.\n"
 "        -t  Sair depois de ler e executar um comando.\n"
 "        -u  Trata as variáveis ​​não definidas como erro ao substituir.\n"
 "        -v  Imprime as linhas de entrada da consola à medida que são lidas.\n"
 "        -x  Imprime comandos e seus argumentos à medida que são executados.\n"
 "        -B  a consola realizará expansão de suporte\n"
-"        -C  Se definido, não permitir que ficheiros normais existentes sejam\n"
+"        -C  Se definido, não permitir que ficheiros normais existentes "
+"sejam\n"
 "             sobrescritos pelo redireccionamento da saída.\n"
 "        -E  se definido, ERR é herdada pelas funções de consola.\n"
 "        -H  Activa estilo ! de substituição do histórico. Esta bandeira\n"
 "             está activada por predefinição, em consolas interativas.\n"
 "        -P  Se definido, não resolve ligações simbólicas ao executar\n"
 "             comandos como \"cd\" que altera a pasta actual.\n"
-"        -T  Se definido, DEBUG e RETURN são herdadas por funções de consola.\n"
+"        -T  Se definido, DEBUG e RETURN são herdadas por funções de "
+"consola.\n"
 "        --  Atribui quaisquer outros argumentos aos parâmetros posicionais.\n"
 "             Se não houver mais argumentos, os parâmetros posicionais\n"
 "             são limpos.\n"
-"        -    Atribui quaisquer outros argumentos aos parâmetros posicionais.\n"
+"        -    Atribui quaisquer outros argumentos aos parâmetros "
+"posicionais.\n"
 "             As opções -x e -v são desactivadas.\n"
 "     \n"
 "     Usar + em vez de - faz com que as bandeiras sejam desactivadas. As\n"
@@ -4001,7 +4251,7 @@ msgstr ""
 "     Estado de saída:\n"
 "     Devolve sucesso a não ser que indique uma opção inválida."
 
-#: builtins.c:1139
+#: builtins.c:1140
 msgid ""
 "Unset values and attributes of shell variables and functions.\n"
 "    \n"
@@ -4013,7 +4263,8 @@ msgid ""
 "      -n\ttreat each NAME as a name reference and unset the variable itself\n"
 "    \t\trather than the variable it references\n"
 "    \n"
-"    Without options, unset first tries to unset a variable, and if that fails,\n"
+"    Without options, unset first tries to unset a variable, and if that "
+"fails,\n"
 "    tries to unset a function.\n"
 "    \n"
 "    Some variables cannot be unset; also see `readonly'.\n"
@@ -4037,14 +4288,16 @@ msgstr ""
 "     Algumas variáveis não podem ser limpas; veja também \"readonly\".\n"
 "     \n"
 "     Estado de saída:\n"
-"     Devolve sucesso a não ser que indique uma opção inválida ou NOME seja só de leitura."
+"     Devolve sucesso a não ser que indique uma opção inválida ou NOME seja "
+"só de leitura."
 
-#: builtins.c:1161
+#: builtins.c:1162
 msgid ""
 "Set export attribute for shell variables.\n"
 "    \n"
 "    Marks each NAME for automatic export to the environment of subsequently\n"
-"    executed commands.  If VALUE is supplied, assign VALUE before exporting.\n"
+"    executed commands.  If VALUE is supplied, assign VALUE before "
+"exporting.\n"
 "    \n"
 "    Options:\n"
 "      -f\trefer to shell functions\n"
@@ -4059,7 +4312,8 @@ msgstr ""
 "Define o atributo de exportação em variáveis de consola.\n"
 "     \n"
 "     Marca cada NOME para exportação automática para o ambiente de futuros\n"
-"     comandos executados. Se VALOR for fornecido, atribui VALOR antes de exportar.\n"
+"     comandos executados. Se VALOR for fornecido, atribui VALOR antes de "
+"exportar.\n"
 "     \n"
 "     Opções:\n"
 "        -f\trefere funções de consola\n"
@@ -4069,9 +4323,10 @@ msgstr ""
 "     Um argumento \"--\" desactiva futuro processamento da opção.\n"
 "     \n"
 "     Estado de saída:\n"
-"     Devolve sucesso a não ser que indique uma opção inválida ou NOME seja inválido."
+"     Devolve sucesso a não ser que indique uma opção inválida ou NOME seja "
+"inválido."
 
-#: builtins.c:1180
+#: builtins.c:1181
 msgid ""
 "Mark shell variables as unchangeable.\n"
 "    \n"
@@ -4101,15 +4356,17 @@ msgstr ""
 "        -a\trefere a variáveis de matriz indexadas\n"
 "        -A\trefere a variáveis de matriz associativas\n"
 "        -f\trefere a funções de consola\n"
-"        -p\tmostra uma lista de todas as variáveis ou funções só de leitura,\n"
+"        -p\tmostra uma lista de todas as variáveis ou funções só de "
+"leitura,\n"
 "     \t\tdependendo ou não se a opção -f é indicada\n"
 "     \n"
 "     Um argumento \"--\" desactiva futuro processamento da opção.\n"
 "     \n"
 "     Estado de saída:\n"
-"     Devolve sucesso a não ser que indique uma opção inválida ou NOME seja inválido."
+"     Devolve sucesso a não ser que indique uma opção inválida ou NOME seja "
+"inválido."
 
-#: builtins.c:1202
+#: builtins.c:1203
 msgid ""
 "Shift positional parameters.\n"
 "    \n"
@@ -4127,7 +4384,7 @@ msgstr ""
 "     Estado de saída:\n"
 "     Devolve sucesso a não ser que N seja negativo ou maior que $#."
 
-#: builtins.c:1214 builtins.c:1229
+#: builtins.c:1215 builtins.c:1230
 msgid ""
 "Execute commands from a file in the current shell.\n"
 "    \n"
@@ -4151,7 +4408,7 @@ msgstr ""
 "     Devolve o estado do último comando executado em NOMEFICH; falha se\n"
 "     NOMEFICH não pode ser lido."
 
-#: builtins.c:1245
+#: builtins.c:1246
 msgid ""
 "Suspend shell execution.\n"
 "    \n"
@@ -4173,9 +4430,10 @@ msgstr ""
 "        -f\tforçar a suspensão, mesmo que seja uma consola com sessão\n"
 "     \n"
 "     Estado de saída:\n"
-"     Devolve sucesso a não ser que o controlo de tarefa esteja inactivo ou ocorra um erro."
+"     Devolve sucesso a não ser que o controlo de tarefa esteja inactivo ou "
+"ocorra um erro."
 
-#: builtins.c:1261
+#: builtins.c:1262
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -4209,7 +4467,8 @@ msgid ""
 "      -x FILE        True if the file is executable by you.\n"
 "      -O FILE        True if the file is effectively owned by you.\n"
 "      -G FILE        True if the file is effectively owned by your group.\n"
-"      -N FILE        True if the file has been modified since it was last read.\n"
+"      -N FILE        True if the file has been modified since it was last "
+"read.\n"
 "    \n"
 "      FILE1 -nt FILE2  True if file1 is newer than file2 (according to\n"
 "                       modification date).\n"
@@ -4230,7 +4489,8 @@ msgid ""
 "      STRING1 != STRING2\n"
 "                     True if the strings are not equal.\n"
 "      STRING1 < STRING2\n"
-"                     True if STRING1 sorts before STRING2 lexicographically.\n"
+"                     True if STRING1 sorts before STRING2 "
+"lexicographically.\n"
 "      STRING1 > STRING2\n"
 "                     True if STRING1 sorts after STRING2 lexicographically.\n"
 "    \n"
@@ -4258,8 +4518,10 @@ msgstr ""
 "Avalia a expressão condicional.\n"
 "     \n"
 "     Sai com estado 0 (verdadeiro) ou 1 (falso) dependendo da\n"
-"     avaliação de EXPR. As expressões podem ser unárias ou binárias. Expressões\n"
-"     uinárias são frequentemente usadas para examinar o estado de um ficheiro. Há\n"
+"     avaliação de EXPR. As expressões podem ser unárias ou binárias. "
+"Expressões\n"
+"     uinárias são frequentemente usadas para examinar o estado de um "
+"ficheiro. Há\n"
 "     também operadores de cadeias e operadores de comparação numérica.\n"
 "     \n"
 "     O comportamento do teste depende do número de argumentos. Leia a\n"
@@ -4269,14 +4531,17 @@ msgstr ""
 "     \n"
 "        -a FICHEIRO     Verdadeiro se o ficheiro existir.\n"
 "        -b FICHEIRO     Verdadeiro se o ficheiro for bloqueio especial.\n"
-"        -c FICHEIRO     Verdadeiro se o ficheiro for especial de caracteres.\n"
+"        -c FICHEIRO     Verdadeiro se o ficheiro for especial de "
+"caracteres.\n"
 "        -d FICHEIRO     Verdadeiro se o ficheiro for uma pasta.\n"
 "        -e FICHEIRO     Verdadeiro se o ficheiro existir.\n"
-"        -f FICHEIRO     Verdadeiro se o ficheiro existe e é um ficheiro normal.\n"
+"        -f FICHEIRO     Verdadeiro se o ficheiro existe e é um ficheiro "
+"normal.\n"
 "        -g FICHEIRO     Verdadeiro se o ficheiro for set-group-id.\n"
 "        -h FICHEIRO     Verdadeiro se o ficheiro for uma ligação simbólica.\n"
 "        -L FICHEIRO     Verdadeiro se o ficheiro for uma ligação simbólica.\n"
-"        -k FICHEIRO     Verdadeiro se o ficheiro tiver o bit \"sticky\" definido.\n"
+"        -k FICHEIRO     Verdadeiro se o ficheiro tiver o bit \"sticky\" "
+"definido.\n"
 "        -p FICHEIRO     Verdadeiro se o ficheiro for um pipe com nome.\n"
 "        -r FICHEIRO     Verdadeiro se o ficheiro for legível.\n"
 "        -s FICHEIRO     Verdadeiro se o ficheiro existe e não está vazio.\n"
@@ -4285,16 +4550,23 @@ msgstr ""
 "        -u FICHEIRO     Verdadeiro se o ficheiro for set-user-id.\n"
 "        -w FICHEIRO     Verdadeiro se o ficheiro for gravável por si.\n"
 "        -x FICHEIRO     Verdadeiro se o ficheiro for executável por si.\n"
-"        -O FICHEIRO     Verdadeiro se o ficheiro for efectivamente sua propriedade.\n"
-"        -G FICHEIRO     Verdadeiro se o ficheiro for efectivamente propriedade do seu grupo.\n"
-"        -N FICHEIRO     Verdadeiro se o ficheiro foi modificado desde a última vez que foi lido.\n"
+"        -O FICHEIRO     Verdadeiro se o ficheiro for efectivamente sua "
+"propriedade.\n"
+"        -G FICHEIRO     Verdadeiro se o ficheiro for efectivamente "
+"propriedade do seu grupo.\n"
+"        -N FICHEIRO     Verdadeiro se o ficheiro foi modificado desde a "
+"última vez que foi lido.\n"
 "     \n"
-"         FICHEIRO1 -nt FICHEIRO2 Verdadeiro se o ficheiro1 for mais novo que\n"
-"                                         o ficheiro2 (de acordo com a data de modificação).\n"
+"         FICHEIRO1 -nt FICHEIRO2 Verdadeiro se o ficheiro1 for mais novo "
+"que\n"
+"                                         o ficheiro2 (de acordo com a data "
+"de modificação).\n"
 "     \n"
-"         FICHEIRO1 -ot FICHEIRO2 Verdadeiro se ficheiro1 for mais antigo que o ficheiro2.\n"
+"         FICHEIRO1 -ot FICHEIRO2 Verdadeiro se ficheiro1 for mais antigo que "
+"o ficheiro2.\n"
 "     \n"
-"         FICHEIRO1 -ef FICHEIRO2 Verdadeiro se ficheiro1 for uma ligação rígida a file2.\n"
+"         FICHEIRO1 -ef FICHEIRO2 Verdadeiro se ficheiro1 for uma ligação "
+"rígida a file2.\n"
 "     \n"
 "     Operadores de cadeias:\n"
 "     \n"
@@ -4308,15 +4580,20 @@ msgstr ""
 "         CADEIA1 != CADEIA2\n"
 "                             Verdadeiro se as cadeias não são iguais.\n"
 "         CADEIA1 < CADEIA2\n"
-"                             Verdadeiro se CADEIA1 ficar antes de CADEIA2 lexicamente.\n"
+"                             Verdadeiro se CADEIA1 ficar antes de CADEIA2 "
+"lexicamente.\n"
 "         CADEIA1 > CADEIA2\n"
-"                             Verdadeiro se CADEIA1 ficar após CADEIA2 lexicamente.\n"
+"                             Verdadeiro se CADEIA1 ficar após CADEIA2 "
+"lexicamente.\n"
 "     \n"
 "     Outros operadores:\n"
 "     \n"
-"        -o OPÇÃO         Verdadeiro se a opção de consola OPÇÃO está activada.\n"
-"        -v VAR            Verdadeiro se a variável de consola VAR estiver definida.\n"
-"        -R VAR            Verdadeiro se a variável de consola VAR estiver definida e for um nome\n"
+"        -o OPÇÃO         Verdadeiro se a opção de consola OPÇÃO está "
+"activada.\n"
+"        -v VAR            Verdadeiro se a variável de consola VAR estiver "
+"definida.\n"
+"        -R VAR            Verdadeiro se a variável de consola VAR estiver "
+"definida e for um nome\n"
 "                            referência.\n"
 "        ! EXPR            Verdadeiro se EXPR for falso.\n"
 "        EXPR1 -a EXPR2 Verdadeiro se EXPR1 e EXPR2 forem verdadeiros.\n"
@@ -4325,15 +4602,17 @@ msgstr ""
 "        arg1 OP arg2    Testes aritméticos. OP é um de -eq, -ne,\n"
 "                           -lt, -le, -gt, ou -ge.\n"
 "     \n"
-"     Operadores binários aritméticos devolvem verdadeiro se ARG1 for igual, não\n"
+"     Operadores binários aritméticos devolvem verdadeiro se ARG1 for igual, "
+"não\n"
 "     igual, menor que, menor ou igual que, maior que ou maior ou igual que\n"
 "     ARG2.\n"
 "     \n"
 "     Estado de saída:\n"
-"     Devolve sucesso se EXPR for avaliada como verdadeiro; falha se EXPR for\n"
+"     Devolve sucesso se EXPR for avaliada como verdadeiro; falha se EXPR "
+"for\n"
 "     avaliado como falso ou for indicado um argumento inválido."
 
-#: builtins.c:1343
+#: builtins.c:1344
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -4345,11 +4624,12 @@ msgstr ""
 "     Este é um sinónimo para o interno \"test\", mas o último argumento tem\n"
 "     de ser um \"]\" literal, para fechar o \"[\" aberto."
 
-#: builtins.c:1352
+#: builtins.c:1353
 msgid ""
 "Display process times.\n"
 "    \n"
-"    Prints the accumulated user and system times for the shell and all of its\n"
+"    Prints the accumulated user and system times for the shell and all of "
+"its\n"
 "    child processes.\n"
 "    \n"
 "    Exit Status:\n"
@@ -4357,17 +4637,19 @@ msgid ""
 msgstr ""
 "Mostrar tempos de processo.\n"
 "     \n"
-"     Imprime os tempos acumulados de utilizador e sistema para a consola e todos\n"
+"     Imprime os tempos acumulados de utilizador e sistema para a consola e "
+"todos\n"
 "     os seus processos-filho.\n"
 "     \n"
 "     Estado de saída:\n"
 "     Sempre com sucesso."
 
-#: builtins.c:1364
+#: builtins.c:1365
 msgid ""
 "Trap signals and other events.\n"
 "    \n"
-"    Defines and activates handlers to be run when the shell receives signals\n"
+"    Defines and activates handlers to be run when the shell receives "
+"signals\n"
 "    or other conditions.\n"
 "    \n"
 "    ARG is a command to be read and executed when the shell receives the\n"
@@ -4376,26 +4658,34 @@ msgid ""
 "    value.  If ARG is the null string each SIGNAL_SPEC is ignored by the\n"
 "    shell and by the commands it invokes.\n"
 "    \n"
-"    If a SIGNAL_SPEC is EXIT (0) ARG is executed on exit from the shell.  If\n"
-"    a SIGNAL_SPEC is DEBUG, ARG is executed before every simple command.  If\n"
-"    a SIGNAL_SPEC is RETURN, ARG is executed each time a shell function or a\n"
-"    script run by the . or source builtins finishes executing.  A SIGNAL_SPEC\n"
-"    of ERR means to execute ARG each time a command's failure would cause the\n"
+"    If a SIGNAL_SPEC is EXIT (0) ARG is executed on exit from the shell.  "
+"If\n"
+"    a SIGNAL_SPEC is DEBUG, ARG is executed before every simple command.  "
+"If\n"
+"    a SIGNAL_SPEC is RETURN, ARG is executed each time a shell function or "
+"a\n"
+"    script run by the . or source builtins finishes executing.  A "
+"SIGNAL_SPEC\n"
+"    of ERR means to execute ARG each time a command's failure would cause "
+"the\n"
 "    shell to exit when the -e option is enabled.\n"
 "    \n"
-"    If no arguments are supplied, trap prints the list of commands associated\n"
+"    If no arguments are supplied, trap prints the list of commands "
+"associated\n"
 "    with each signal.\n"
 "    \n"
 "    Options:\n"
 "      -l\tprint a list of signal names and their corresponding numbers\n"
 "      -p\tdisplay the trap commands associated with each SIGNAL_SPEC\n"
 "    \n"
-"    Each SIGNAL_SPEC is either a signal name in <signal.h> or a signal number.\n"
+"    Each SIGNAL_SPEC is either a signal name in <signal.h> or a signal "
+"number.\n"
 "    Signal names are case insensitive and the SIG prefix is optional.  A\n"
 "    signal may be sent to the shell with \"kill -signal $$\".\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success unless a SIGSPEC is invalid or an invalid option is given."
+"    Returns success unless a SIGSPEC is invalid or an invalid option is "
+"given."
 msgstr ""
 "Capturar sinais e outros eventos.\n"
 "     \n"
@@ -4404,32 +4694,40 @@ msgstr ""
 "     \n"
 "     ARG é um comando a ser lido e executado quando a consola recebe o(s)\n"
 "     sinal(is) SIGNAL_SPEC. Se ARG estiver ausente (e um único SIGNAL_SPEC\n"
-"     for fornecido) ou \"-\", cada sinal especificado é reposto no seu valor\n"
+"     for fornecido) ou \"-\", cada sinal especificado é reposto no seu "
+"valor\n"
 "     original. Se ARG for a cadeia nula, cada SIGNAL_SPEC será ignorado\n"
 "     pela consola e pelos comandos que chama.\n"
 "     \n"
 "     Se um SIGNAL_SPEC for EXIT (0) ARG é executado na saída da consola. Se\n"
 "     SIGNAL_SPEC é DEBUG, ARG é executado antes de cada comando simples. Se\n"
-"     SIGNAL_SPEC é RETURN, ARG é executado cada vez que uma função de consola\n"
-"     ou um script executado pelo . ou os internos terminam a execução. SIGNAL_SPEC\n"
-"     de ERR significa executar ARG cada vez que uma falha do comando faça com\n"
+"     SIGNAL_SPEC é RETURN, ARG é executado cada vez que uma função de "
+"consola\n"
+"     ou um script executado pelo . ou os internos terminam a execução. "
+"SIGNAL_SPEC\n"
+"     de ERR significa executar ARG cada vez que uma falha do comando faça "
+"com\n"
 "     que a consola sair quando a opção -e está activa.\n"
 "     \n"
 "     Se nenhum argumento for fornecido, trap imprime a lista de comandos \n"
 "     associados a cada sinal.\n"
 "     \n"
 "     Opções:\n"
-"        -l imprime uma lista de nomes de sinais e seus números correspondentes\n"
+"        -l imprime uma lista de nomes de sinais e seus números "
+"correspondentes\n"
 "        -p mostra os comandos trap associados a cada SIGNAL_SPEC\n"
 "     \n"
-"     Cada SIGNAL_SPEC é um nome de sinal em <signal.h> ou um número de sinal.\n"
-"     Os nomes dos sinais são insensíveis a maiúsculas e o prefixo SIG é opcional.\n"
+"     Cada SIGNAL_SPEC é um nome de sinal em <signal.h> ou um número de "
+"sinal.\n"
+"     Os nomes dos sinais são insensíveis a maiúsculas e o prefixo SIG é "
+"opcional.\n"
 "     Um sinal pode ser enviado para a consola com \"kill -signal $$\".\n"
 "     \n"
 "     Estado de saída:\n"
-"     Devolve sucesso a não ser que SIGSPEC seja inválido ou indique uma opção inválida."
+"     Devolve sucesso a não ser que SIGSPEC seja inválido ou indique uma "
+"opção inválida."
 
-#: builtins.c:1400
+#: builtins.c:1401
 msgid ""
 "Display information about command type.\n"
 "    \n"
@@ -4455,7 +4753,8 @@ msgid ""
 "      NAME\tCommand name to be interpreted.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success if all of the NAMEs are found; fails if any are not found."
+"    Returns success if all of the NAMEs are found; fails if any are not "
+"found."
 msgstr ""
 "Mostra informações sobre o tipo de comando.\n"
 "     \n"
@@ -4472,8 +4771,10 @@ msgstr ""
 "     \t\tque seria executado\n"
 "        -p\tdevolve o nome do ficheiro em disco que seria executado,\n"
 "     \t\tou nada se \"type -t NOME\" não devolver \"file\"\n"
-"        -t\tdevolve uma só palavra de entre \"alias\", \"keyword\", \"function\"\n"
-"     \t\t\"builtin\", \"file\" ou \"\", se NOME for um aliás, palavra reservada\n"
+"        -t\tdevolve uma só palavra de entre \"alias\", \"keyword\", "
+"\"function\"\n"
+"     \t\t\"builtin\", \"file\" ou \"\", se NOME for um aliás, palavra "
+"reservada\n"
 "     \t\tda consola, função de consola, interno da consola, ficheiro em\n"
 "     \t\tdisco, ou não encontrados, respectivamente\n"
 "     \n"
@@ -4481,13 +4782,15 @@ msgstr ""
 "        Nome do comando NOME a interpretar.\n"
 "     \n"
 "     Estado de saída:\n"
-"     Devolve sucesso se todos os NOMEs forem encontrados; falha se algum não for."
+"     Devolve sucesso se todos os NOMEs forem encontrados; falha se algum não "
+"for."
 
-#: builtins.c:1431
+#: builtins.c:1432
 msgid ""
 "Modify shell resource limits.\n"
 "    \n"
-"    Provides control over the resources available to the shell and processes\n"
+"    Provides control over the resources available to the shell and "
+"processes\n"
 "    it creates, on systems that allow such control.\n"
 "    \n"
 "    Options:\n"
@@ -4533,7 +4836,8 @@ msgid ""
 msgstr ""
 "Modifica os limites de recursos da consola.\n"
 "     \n"
-"     Fornece controlo sobre os recursos disponíveis para consola e processos\n"
+"     Fornece controlo sobre os recursos disponíveis para consola e "
+"processos\n"
 "     que cria, em sistemas que permitem esse controlo.\n"
 "     \n"
 "     Opções:\n"
@@ -4544,7 +4848,8 @@ msgstr ""
 "        -c\to tamanho máximo dos ficheiros núcleo criados\n"
 "        -d\to tamanho máximo do segmento de dados de um processo\n"
 "        -e\ta prioridade máxima de agendamento (\"nice\")\n"
-"        -f\to tamanho máximo dos ficheiros escritos pela consola e seus filhos\n"
+"        -f\to tamanho máximo dos ficheiros escritos pela consola e seus "
+"filhos\n"
 "        -i\to número máximo de sinais pendentes\n"
 "        -k\to número máximo de kqueues alocados para este processo\n"
 "        -l\to tamanho máximo que um processo pode bloquear na memória\n"
@@ -4559,25 +4864,30 @@ msgstr ""
 "        -v\to tamanho da memória virtual\n"
 "        -x\to número máximo de bloqueios de ficheiros\n"
 "        -P\to número máximo de pseudo-terminais\n"
-"      -R\to tempo máximo que um processo em tempo real pode executar antes de bloquear\n"
+"      -R\to tempo máximo que um processo em tempo real pode executar antes "
+"de bloquear\n"
 "        -T\to número máximo de threads\n"
 "     \n"
 "     Nem todas as opções estão disponíveis em todas as plataformas.\n"
 "     \n"
 "     Se LIMIT for indicada, é o novo valor do recurso especificado; Os\n"
 "     valores LIMIT especiais \"soft\", \"hard\" e \"unlimited\" representam\n"
-"     o limite flexível actual, o limite rígido actual e nenhum limite, respectivamente.\n"
+"     o limite flexível actual, o limite rígido actual e nenhum limite, "
+"respectivamente.\n"
 "     Caso contrário, é imprimido o valor actual do recurso especificado. Se\n"
 "     nenhuma opção for indicada, então -f é assumido.\n"
 "     \n"
-"     Os valores estão em incrementos de 1024 bytes, exceto para -t, que é em segundos,\n"
-"     -p, que é em incrementos de 512 bytes e -u, que é um número de processos\n"
+"     Os valores estão em incrementos de 1024 bytes, exceto para -t, que é em "
+"segundos,\n"
+"     -p, que é em incrementos de 512 bytes e -u, que é um número de "
+"processos\n"
 "     sem escala.\n"
 "     \n"
 "     Estado de saída:\n"
-"     Devolve sucesso a não ser que seja indicada uma opção inválida ou ocorra um erro."
+"     Devolve sucesso a não ser que seja indicada uma opção inválida ou "
+"ocorra um erro."
 
-#: builtins.c:1482
+#: builtins.c:1483
 msgid ""
 "Display or set file mode mask.\n"
 "    \n"
@@ -4596,36 +4906,45 @@ msgid ""
 msgstr ""
 "Mostrar ou definir a máscara do modo de ficheiro.\n"
 "     \n"
-"     Define a máscara do utilizador de criação de ficheiro para MODO. Se MODO\n"
+"     Define a máscara do utilizador de criação de ficheiro para MODO. Se "
+"MODO\n"
 "     for omitido, imprime o valor actual da máscara.\n"
 "     \n"
 "     Se MODO começa com um dígito, é interpretado como um número octal;\n"
-"     caso contrário, é uma cadeia de modo simbólico como a aceite por chmod(1).\n"
+"     caso contrário, é uma cadeia de modo simbólico como a aceite por "
+"chmod(1).\n"
 "     \n"
 "     Opções:\n"
-"        -p\tse MODO for omitido, saída de forma a que possa ser reutilizado como entrada\n"
-"        -S\ttorna a saída simbólica; caso contrário, a saída é um número octal\n"
+"        -p\tse MODO for omitido, saída de forma a que possa ser reutilizado "
+"como entrada\n"
+"        -S\ttorna a saída simbólica; caso contrário, a saída é um número "
+"octal\n"
 "     \n"
 "     Estado de saída:\n"
-"     Devolve sucesso a não ser que MODO seja inválido ou indique uma opção inválida."
+"     Devolve sucesso a não ser que MODO seja inválido ou indique uma opção "
+"inválida."
 
-#: builtins.c:1502
+#: builtins.c:1503
 msgid ""
 "Wait for job completion and return exit status.\n"
 "    \n"
-"    Waits for each process identified by an ID, which may be a process ID or a\n"
+"    Waits for each process identified by an ID, which may be a process ID or "
+"a\n"
 "    job specification, and reports its termination status.  If ID is not\n"
 "    given, waits for all currently active child processes, and the return\n"
 "    status is zero.  If ID is a job specification, waits for all processes\n"
 "    in that job's pipeline.\n"
 "    \n"
-"    If the -n option is supplied, waits for a single job from the list of IDs,\n"
-"    or, if no IDs are supplied, for the next job to complete and returns its\n"
+"    If the -n option is supplied, waits for a single job from the list of "
+"IDs,\n"
+"    or, if no IDs are supplied, for the next job to complete and returns "
+"its\n"
 "    exit status.\n"
 "    \n"
 "    If the -p option is supplied, the process or job identifier of the job\n"
 "    for which the exit status is returned is assigned to the variable VAR\n"
-"    named by the option argument. The variable will be unset initially, before\n"
+"    named by the option argument. The variable will be unset initially, "
+"before\n"
 "    any assignment. This is useful only when the -n option is supplied.\n"
 "    \n"
 "    If the -f option is supplied, and job control is enabled, waits for the\n"
@@ -4638,52 +4957,67 @@ msgid ""
 msgstr ""
 "Aguarda a conclusão da tarefa e devolve o estado de saída.\n"
 "     \n"
-"     Espera por cada processo identificado por uma ID, que pode ser uma ID de\n"
-"     processo ou uma especificação de tarefa e relata o estado final. Se não\n"
-"     for dada uma ID, aguarda por todos os processos-filho actualmente activos e o\n"
-"     estado de saída é zero. Se ID for uma especificação de tarefa, espera por\n"
+"     Espera por cada processo identificado por uma ID, que pode ser uma ID "
+"de\n"
+"     processo ou uma especificação de tarefa e relata o estado final. Se "
+"não\n"
+"     for dada uma ID, aguarda por todos os processos-filho actualmente "
+"activos e o\n"
+"     estado de saída é zero. Se ID for uma especificação de tarefa, espera "
+"por\n"
 "     todos os processos no pipeline da tarefa.\n"
 "     \n"
-"     Se a opção -n for fornecida, espera por uma tarefa única da lista de IDs ou\n"
+"     Se a opção -n for fornecida, espera por uma tarefa única da lista de "
+"IDs ou\n"
 "     se não indicar IDs, pela conclusão da tarefa seguinte devolve\n"
 "     o seu estado de saída.\n"
 "     \n"
-"    Se a opção -p for indicada, o identificador de processo ou tarefa da tarefa\n"
+"    Se a opção -p for indicada, o identificador de processo ou tarefa da "
+"tarefa\n"
 "    para a qual foi devolvido o estado de saída é atribuído à variável VAR\n"
-"    nomeada pelo argumento da opção. A variável estará indefinida inicialmente,\n"
+"    nomeada pelo argumento da opção. A variável estará indefinida "
+"inicialmente,\n"
 "    antes de qualquer atribuição. Útil só quando a opção -n é indicada.\n"
 "    \n"
-"    Se a opção -f for indicada e o controlo de tarefas estiver activo, espera que\n"
-"    a ID especificada termine, em vez de esperar por uma alteração de estado.\n"
+"    Se a opção -f for indicada e o controlo de tarefas estiver activo, "
+"espera que\n"
+"    a ID especificada termine, em vez de esperar por uma alteração de "
+"estado.\n"
 "    \n"
 "     Estado de saída:\n"
-"     Devolve o estado da última ID; falha se a ID for inválida ou for indicada\n"
+"     Devolve o estado da última ID; falha se a ID for inválida ou for "
+"indicada\n"
 "     uma opção inválida, ou se -n for indicada e a consola não tiver filhos\n"
 "     inesperados."
 
-#: builtins.c:1533
+#: builtins.c:1534
 msgid ""
 "Wait for process completion and return exit status.\n"
 "    \n"
-"    Waits for each process specified by a PID and reports its termination status.\n"
+"    Waits for each process specified by a PID and reports its termination "
+"status.\n"
 "    If PID is not given, waits for all currently active child processes,\n"
 "    and the return status is zero.  PID must be a process ID.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns the status of the last PID; fails if PID is invalid or an invalid\n"
+"    Returns the status of the last PID; fails if PID is invalid or an "
+"invalid\n"
 "    option is given."
 msgstr ""
 "Aguarda a conclusão do processo e devolve o estado de saída.\n"
 "     \n"
-"     Espera por cada processo especificado por uma PID e reporta o estado final.\n"
-"     Se PID não for dada, aguarda por todos os processos-filho actualmente activos,\n"
+"     Espera por cada processo especificado por uma PID e reporta o estado "
+"final.\n"
+"     Se PID não for dada, aguarda por todos os processos-filho actualmente "
+"activos,\n"
 "     e o estado devolvido é zero. A PID tem de ser uma ID de processo.\n"
 "     \n"
 "     Estado de saída:\n"
-"     Devolve o estado da última PID; falha se PID for inválido ou for indicada\n"
+"     Devolve o estado da última PID; falha se PID for inválido ou for "
+"indicada\n"
 "     uma opção inválida."
 
-#: builtins.c:1548
+#: builtins.c:1549
 msgid ""
 "Execute commands for each member in a list.\n"
 "    \n"
@@ -4697,15 +5031,18 @@ msgid ""
 msgstr ""
 "Executa comandos para cada membro numa lista.\n"
 "     \n"
-"     O ciclo \"for\" executa uma seqüência de comandos para cada membro numa\n"
-"     lista de itens. Se \"in PALAVRAS ...;\" não estiver presente, \" in \"$@\" \" é\n"
-"     assumido. Para cada elemento em PALAVRAS, NOME está definido para esseelemento,\n"
+"     O ciclo \"for\" executa uma seqüência de comandos para cada membro "
+"numa\n"
+"     lista de itens. Se \"in PALAVRAS ...;\" não estiver presente, \" in \"$@"
+"\" \" é\n"
+"     assumido. Para cada elemento em PALAVRAS, NOME está definido para "
+"esseelemento,\n"
 "     e os COMANDOS são executados.\n"
 "     \n"
 "     Estado de saída:\n"
 "     Devolve o estado do último comando executado."
 
-#: builtins.c:1562
+#: builtins.c:1563
 msgid ""
 "Arithmetic for loop.\n"
 "    \n"
@@ -4729,13 +5066,14 @@ msgstr ""
 "     \t\tCOMANDOS\n"
 "     \t\t(( EXP3 ))\n"
 "     \tdone\n"
-"     EXP1, EXP2 e EXP3 são expressões aritméicas. Se alguma delas for omitida\n"
+"     EXP1, EXP2 e EXP3 são expressões aritméicas. Se alguma delas for "
+"omitida\n"
 "     comporta-se como se fosse avaliada como 1.\n"
 "     \n"
 "     Estado de saída:\n"
 "     Devolve o estado do último comando executado."
 
-#: builtins.c:1580
+#: builtins.c:1581
 msgid ""
 "Select words from a list and execute commands.\n"
 "    \n"
@@ -4771,7 +5109,7 @@ msgstr ""
 "     Estado de saída:\n"
 "     Devolve o estado do último comando executado."
 
-#: builtins.c:1601
+#: builtins.c:1602
 msgid ""
 "Report time consumed by pipeline's execution.\n"
 "    \n"
@@ -4789,7 +5127,8 @@ msgstr ""
 "Reporta o tempo consumido pela execução do pipeline.\n"
 "     \n"
 "     Executa PIPELINE e imprime um resumo do tempo real, tempo de CPU do,\n"
-"     utilizador e tempo de CPU do sistema na execução de PIPELINE quando terminar.\n"
+"     utilizador e tempo de CPU do sistema na execução de PIPELINE quando "
+"terminar.\n"
 "     \n"
 "     Opções:\n"
 "        -p\timprime o resumo do tempo no formato portátil Posix\n"
@@ -4799,7 +5138,7 @@ msgstr ""
 "     Estado de saída:\n"
 "     O estado devolvido é o estado de PIPELINE."
 
-#: builtins.c:1618
+#: builtins.c:1619
 msgid ""
 "Execute commands based on pattern matching.\n"
 "    \n"
@@ -4817,16 +5156,21 @@ msgstr ""
 "     Estado de saída:\n"
 "     Devolve o estado do último comando executado."
 
-#: builtins.c:1630
+#: builtins.c:1631
 msgid ""
 "Execute commands based on conditional.\n"
 "    \n"
-"    The `if COMMANDS' list is executed.  If its exit status is zero, then the\n"
-"    `then COMMANDS' list is executed.  Otherwise, each `elif COMMANDS' list is\n"
+"    The `if COMMANDS' list is executed.  If its exit status is zero, then "
+"the\n"
+"    `then COMMANDS' list is executed.  Otherwise, each `elif COMMANDS' list "
+"is\n"
 "    executed in turn, and if its exit status is zero, the corresponding\n"
-"    `then COMMANDS' list is executed and the if command completes.  Otherwise,\n"
-"    the `else COMMANDS' list is executed, if present.  The exit status of the\n"
-"    entire construct is the exit status of the last command executed, or zero\n"
+"    `then COMMANDS' list is executed and the if command completes.  "
+"Otherwise,\n"
+"    the `else COMMANDS' list is executed, if present.  The exit status of "
+"the\n"
+"    entire construct is the exit status of the last command executed, or "
+"zero\n"
 "    if no condition tested true.\n"
 "    \n"
 "    Exit Status:\n"
@@ -4835,22 +5179,29 @@ msgstr ""
 "Executa comandos com base em condicional.\n"
 "     \n"
 "     A lista \"if COMANDOS\" é executada. Se o estado de saída for zero, é\n"
-"     executada a lista \"then COMANDOS\". Caso contrário, cada lista \"elif COMANDOS\"\n"
-"     é executado por sua vez e se o estado de saída for zero, a correspondente\n"
-"     lista \"then COMANDOS\" é executada e o comando if é concluído. De outra forma,\n"
-"     a lista \"else COMANDOS\" é executada, se presente. O estado de saída da\n"
-"     construção inteira é o estado de saída do último comando executado, ou zero\n"
+"     executada a lista \"then COMANDOS\". Caso contrário, cada lista \"elif "
+"COMANDOS\"\n"
+"     é executado por sua vez e se o estado de saída for zero, a "
+"correspondente\n"
+"     lista \"then COMANDOS\" é executada e o comando if é concluído. De "
+"outra forma,\n"
+"     a lista \"else COMANDOS\" é executada, se presente. O estado de saída "
+"da\n"
+"     construção inteira é o estado de saída do último comando executado, ou "
+"zero\n"
 "     se nenhuma condição for verdadeira.\n"
 "     \n"
 "     Estado de saída:\n"
 "     Devolve o estado do último comando executado."
 
-#: builtins.c:1647
+#: builtins.c:1648
+#, fuzzy
 msgid ""
 "Execute commands as long as a test succeeds.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `while' COMMANDS has an exit status of zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS "
+"has\n"
+"    an exit status of zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
@@ -4863,12 +5214,14 @@ msgstr ""
 "     Estado de saída:\n"
 "     Devolve o estado do último comando executado."
 
-#: builtins.c:1659
+#: builtins.c:1660
+#, fuzzy
 msgid ""
 "Execute commands as long as a test does not succeed.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `until' COMMANDS has an exit status which is not zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS "
+"has\n"
+"    an exit status which is not zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
@@ -4881,7 +5234,7 @@ msgstr ""
 "     Estado de saída:\n"
 "     Devolve o estado do último comando executado."
 
-#: builtins.c:1671
+#: builtins.c:1672
 msgid ""
 "Create a coprocess named NAME.\n"
 "    \n"
@@ -4895,7 +5248,8 @@ msgid ""
 msgstr ""
 "Cria um co-processo chamado NOME.\n"
 "     \n"
-"     Executa COMANDO assincronamente, com a saída e a entrada padrão ligadas\n"
+"     Executa COMANDO assincronamente, com a saída e a entrada padrão "
+"ligadas\n"
 "     via pipe a descritores de ficheiro atribuídos a índices 0 e 1 de uma \n"
 "     variável de matriz NOME na consola em execução.\n"
 "     O NOME predefinido é \"COPROC\".\n"
@@ -4903,12 +5257,13 @@ msgstr ""
 "     Estado de saída:\n"
 "     O comando coproc devolve um estado de saída 0."
 
-#: builtins.c:1685
+#: builtins.c:1686
 msgid ""
 "Define shell function.\n"
 "    \n"
 "    Create a shell function named NAME.  When invoked as a simple command,\n"
-"    NAME runs COMMANDs in the calling shell's context.  When NAME is invoked,\n"
+"    NAME runs COMMANDs in the calling shell's context.  When NAME is "
+"invoked,\n"
 "    the arguments are passed to the function as $1...$n, and the function's\n"
 "    name is in $FUNCNAME.\n"
 "    \n"
@@ -4925,7 +5280,7 @@ msgstr ""
 "     Estado de saída:\n"
 "     Devolve sucesso a não ser que NOME seja só de leitura."
 
-#: builtins.c:1699
+#: builtins.c:1700
 msgid ""
 "Group commands as a unit.\n"
 "    \n"
@@ -4943,7 +5298,7 @@ msgstr ""
 "     Estado de saída:\n"
 "     Devolve o estado do último comando executado."
 
-#: builtins.c:1711
+#: builtins.c:1712
 msgid ""
 "Resume job in foreground.\n"
 "    \n"
@@ -4967,7 +5322,7 @@ msgstr ""
 "     Estado de saída:\n"
 "     Devolve o estado da tarefa retomada."
 
-#: builtins.c:1726
+#: builtins.c:1727
 msgid ""
 "Evaluate arithmetic expression.\n"
 "    \n"
@@ -4986,13 +5341,16 @@ msgstr ""
 "     Estado de saída:\n"
 "     Devolve 1 se EXPRESSÃO avaliar como 0; senão, devolve 0."
 
-#: builtins.c:1738
+#: builtins.c:1739
 msgid ""
 "Execute conditional command.\n"
 "    \n"
-"    Returns a status of 0 or 1 depending on the evaluation of the conditional\n"
-"    expression EXPRESSION.  Expressions are composed of the same primaries used\n"
-"    by the `test' builtin, and may be combined using the following operators:\n"
+"    Returns a status of 0 or 1 depending on the evaluation of the "
+"conditional\n"
+"    expression EXPRESSION.  Expressions are composed of the same primaries "
+"used\n"
+"    by the `test' builtin, and may be combined using the following "
+"operators:\n"
 "    \n"
 "      ( EXPRESSION )\tReturns the value of EXPRESSION\n"
 "      ! EXPRESSION\t\tTrue if EXPRESSION is false; else false\n"
@@ -5013,22 +5371,29 @@ msgstr ""
 "Executa o comando condicional.\n"
 "     \n"
 "     Devolve um estado de 0 ou 1, dependendo da avaliação da expressão\n"
-"     condicional EXPRESSÃO. As expressões são compostas pelas mesmas primárias\n"
-"     usadas pelo interno \"test\" e pode ser combinado com os seguintes operadores:\n"
+"     condicional EXPRESSÃO. As expressões são compostas pelas mesmas "
+"primárias\n"
+"     usadas pelo interno \"test\" e pode ser combinado com os seguintes "
+"operadores:\n"
 "     \n"
 "        ( EXPRESSÃO )\tDevolve o valor de EXPRESSÃO\n"
 "        ! EXPRESSÃO\t\tVerdadeiro se EXPRESSÃO for falsa; senão falso\n"
-"        EXPR1 && EXPR2\tVerdadeiro se EXPR1 e EXPR2 forem verdadeiras; senão falso\n"
-"        EXPR1 || EXPR2\tVerdadeiro se EXPR1 ou EXPR2 forem verdadeiras; senão falso\n"
-"     \n"
-"     Quando os operadores \"==\" e \"! =\" são usados, a cadeia à direita do operador\n"
-"     é usada como padrão e é feita a comparação de padrões. Quando o operador \"= ~\"\n"
-"     é usado, a cadeia à direita do operador é comparada como expressão regular.\n"
+"        EXPR1 && EXPR2\tVerdadeiro se EXPR1 e EXPR2 forem verdadeiras; senão "
+"falso\n"
+"        EXPR1 || EXPR2\tVerdadeiro se EXPR1 ou EXPR2 forem verdadeiras; "
+"senão falso\n"
+"     \n"
+"     Quando os operadores \"==\" e \"! =\" são usados, a cadeia à direita do "
+"operador\n"
+"     é usada como padrão e é feita a comparação de padrões. Quando o "
+"operador \"= ~\"\n"
+"     é usado, a cadeia à direita do operador é comparada como expressão "
+"regular.\n"
 "     \n"
 "     Os operadores && e || não avaliam EXPR2 se EXPR1 for suficiente para\n"
 "     determinar o valor da expressão."
 
-#: builtins.c:1764
+#: builtins.c:1765
 msgid ""
 "Common shell variable names and usage.\n"
 "    \n"
@@ -5086,9 +5451,11 @@ msgstr ""
 "    BASH_VERSION\tInformações de versão para esta bash.\n"
 "    CDPATH\tUma lista de pastas separadas por \":\" para procurar\n"
 "    \t\tpor pastas dadas como argumentos a \"cd\".\n"
-"    GLOBIGNORE\tUma lista de padrões separada por \":\" que descreve nomes de\n"
+"    GLOBIGNORE\tUma lista de padrões separada por \":\" que descreve nomes "
+"de\n"
 "    ficheiro a ignorar pela expansão do nome do caminho.\n"
-"    HISTFILE\tNome de ficheiro onde o seu histórico de comandos é armazenado.\n"
+"    HISTFILE\tNome de ficheiro onde o seu histórico de comandos é "
+"armazenado.\n"
 "    HISTFILESIZE\tNúmero máximo de linhas que este ficheiro pode conter.\n"
 "    HISTSIZE\tNúmero máximo de linhas de histórico a que uma consola em \n"
 "    \t\texecução pode aceder.\n"
@@ -5101,7 +5468,8 @@ msgstr ""
 "    \t\tvazia antes que a consola saia (predefinição 10).\n"
 "    \t\tQuando não definido, EOF significa o fim da entrada.\n"
 "    MACHTYPE\tDescrição do sistema actual em que a bash está em execução.\n"
-"    MAILCHECK\tFrequência, em segundos, com que a bash procura novo correio.\n"
+"    MAILCHECK\tFrequência, em segundos, com que a bash procura novo "
+"correio.\n"
 "    MAILPATH\tLista de ficheiros separados por \":\" onde a bash procura\n"
 "    \t\tnovas mensagens.\n"
 "    OSTYPE\tVersão Unix em que esta versão da bash está em execução.\n"
@@ -5124,15 +5492,17 @@ msgstr ""
 "    \t\t\"substring\" significa que a palavra de comando deve ser igual\n"
 "    \t\ta uma sub-cadeia da tarefa. Qualquer outro valor significa que\n"
 "    \t\to comando deve ser um prefixo de uma tarefa interrompida.\n"
-"    histchars\tCaracteres que controlam a expansão do histórico e substituições\n"
+"    histchars\tCaracteres que controlam a expansão do histórico e "
+"substituições\n"
 "    \t\trápidas. O primeiro carácter é o carácter de subtituição do\n"
 "    \t\thistórico, normalmente \"!\". O 2º é o de substituição rápida,\n"
 "    \t\thabitualmente \"^\". O terceiro é o comentário do histórico,\n"
 "    \t\tnormalmente \"#\".\n"
-"    HISTIGNORE\tLista de padrões separada por \":\" usados para decidir quais\n"
+"    HISTIGNORE\tLista de padrões separada por \":\" usados para decidir "
+"quais\n"
 "    \t\tos comandos que devem ser gravados na lista de histórico.\n"
 
-#: builtins.c:1821
+#: builtins.c:1822
 msgid ""
 "Add directories to stack.\n"
 "    \n"
@@ -5190,7 +5560,7 @@ msgstr ""
 "    Devolve sucesso a não ser que indique um argumento inválido ou a\n"
 "    troca de pastas falhe."
 
-#: builtins.c:1855
+#: builtins.c:1856
 msgid ""
 "Remove directories from stack.\n"
 "    \n"
@@ -5240,7 +5610,7 @@ msgstr ""
 "     Devolve sucesso a não ser que indique um argumento inválido ou a troca\n"
 "     de pastas falhe."
 
-#: builtins.c:1885
+#: builtins.c:1886
 msgid ""
 "Display directory stack.\n"
 "    \n"
@@ -5292,9 +5662,10 @@ msgstr ""
 "    \t\tpor zero.\n"
 "    \n"
 "    Estado de saída:\n"
-"    Devolve sucesso a não ser que indique uma opção inválida ou ocorra um erro"
+"    Devolve sucesso a não ser que indique uma opção inválida ou ocorra um "
+"erro"
 
-#: builtins.c:1916
+#: builtins.c:1917
 msgid ""
 "Set and unset shell options.\n"
 "    \n"
@@ -5330,7 +5701,8 @@ msgstr ""
 "    Devolve sucesso se OPTNOME estiver activado; falha se indicar uma opção\n"
 "    inválida ou OPTNOME esteja desactivada."
 
-#: builtins.c:1937
+#: builtins.c:1938
+#, fuzzy
 msgid ""
 "Formats and prints ARGUMENTS under control of the FORMAT.\n"
 "    \n"
@@ -5338,27 +5710,36 @@ msgid ""
 "      -v var\tassign the output to shell variable VAR rather than\n"
 "    \t\tdisplay it on the standard output\n"
 "    \n"
-"    FORMAT is a character string which contains three types of objects: plain\n"
-"    characters, which are simply copied to standard output; character escape\n"
+"    FORMAT is a character string which contains three types of objects: "
+"plain\n"
+"    characters, which are simply copied to standard output; character "
+"escape\n"
 "    sequences, which are converted and copied to the standard output; and\n"
-"    format specifications, each of which causes printing of the next successive\n"
+"    format specifications, each of which causes printing of the next "
+"successive\n"
 "    argument.\n"
 "    \n"
-"    In addition to the standard format specifications described in printf(1),\n"
+"    In addition to the standard format specifications described in "
+"printf(1),\n"
 "    printf interprets:\n"
 "    \n"
 "      %b\texpand backslash escape sequences in the corresponding argument\n"
 "      %q\tquote the argument in a way that can be reused as shell input\n"
-"      %(fmt)T\toutput the date-time string resulting from using FMT as a format\n"
+"      %Q\tlike %q, but apply any precision to the unquoted argument before\n"
+"    \t\tquoting\n"
+"      %(fmt)T\toutput the date-time string resulting from using FMT as a "
+"format\n"
 "    \t        string for strftime(3)\n"
 "    \n"
 "    The format is re-used as necessary to consume all of the arguments.  If\n"
 "    there are fewer arguments than the format requires,  extra format\n"
-"    specifications behave as if a zero value or null string, as appropriate,\n"
+"    specifications behave as if a zero value or null string, as "
+"appropriate,\n"
 "    had been supplied.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success unless an invalid option is given or a write or assignment\n"
+"    Returns success unless an invalid option is given or a write or "
+"assignment\n"
 "    error occurs."
 msgstr ""
 "Formata e imprime ARGUMENTOS sob controlo do FORMATO.\n"
@@ -5369,33 +5750,43 @@ msgstr ""
 "    \n"
 "    FORMATO é uma cadeia de caracteres que contém três tipos de objectos: \n"
 "    caracteres simples, que são simplesmente copiados para a saída padrão;\n"
-"    sequências de escape, que são convertidas e copiadas para a saída padrão; e\n"
-"    especificações de formato, cada uma das quais causa a impressão do argumento\n"
+"    sequências de escape, que são convertidas e copiadas para a saída "
+"padrão; e\n"
+"    especificações de formato, cada uma das quais causa a impressão do "
+"argumento\n"
 "    sucessivo seguinte.\n"
 "    \n"
 "    Além das especificações de formato padrão descritas em printf (1),\n"
 "    printf interpreta:\n"
 "    \n"
 "      %b\texpande sequências de escape para o argumento correspondente\n"
-"      %q\tcita o argumento de forma a ser reutilizado como entrada de consola\n"
-"      %(fmt)T\timprime a cadeia de data-hora resultante da utilização do FMT\n"
+"      %q\tcita o argumento de forma a ser reutilizado como entrada de "
+"consola\n"
+"      %(fmt)T\timprime a cadeia de data-hora resultante da utilização do "
+"FMT\n"
 "    \t\tcomo formato para strftime(3)\n"
 "    \n"
-"    O formato é reutilizado conforme necessário para consumir todos os argumentos.\n"
-"    E se há menos argumentos do que o formato requer, especificações de formato\n"
-"    extra comportam-se como um valor zero ou uma cadeia nula, conforme apropriado,\n"
+"    O formato é reutilizado conforme necessário para consumir todos os "
+"argumentos.\n"
+"    E se há menos argumentos do que o formato requer, especificações de "
+"formato\n"
+"    extra comportam-se como um valor zero ou uma cadeia nula, conforme "
+"apropriado,\n"
 "    tenha sido fornecido.\n"
 "    \n"
 "    Estado de saída:\n"
-"    Devolve sucesso a não ser que indique uma opção inválida ou ocorra um erro de\n"
+"    Devolve sucesso a não ser que indique uma opção inválida ou ocorra um "
+"erro de\n"
 "    escrita ou atribuição."
 
-#: builtins.c:1971
+#: builtins.c:1974
 msgid ""
 "Specify how arguments are to be completed by Readline.\n"
 "    \n"
-"    For each NAME, specify how arguments are to be completed.  If no options\n"
-"    are supplied, existing completion specifications are printed in a way that\n"
+"    For each NAME, specify how arguments are to be completed.  If no "
+"options\n"
+"    are supplied, existing completion specifications are printed in a way "
+"that\n"
 "    allows them to be reused as input.\n"
 "    \n"
 "    Options:\n"
@@ -5410,20 +5801,25 @@ msgid ""
 "    \t\tcommand) word\n"
 "    \n"
 "    When completion is attempted, the actions are applied in the order the\n"
-"    uppercase-letter options are listed above. If multiple options are supplied,\n"
-"    the -D option takes precedence over -E, and both take precedence over -I.\n"
+"    uppercase-letter options are listed above. If multiple options are "
+"supplied,\n"
+"    the -D option takes precedence over -E, and both take precedence over -"
+"I.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns success unless an invalid option is supplied or an error occurs."
 msgstr ""
 "Especifica como os argumentos devem ser concluídos por Readline.\n"
 "    \n"
-"    Para cada NOME, especifica como os argumentos devem ser concluídos. Se não \n"
-"    fornecer opções, as especificações de conclusão existentes são imprimidas\n"
+"    Para cada NOME, especifica como os argumentos devem ser concluídos. Se "
+"não \n"
+"    fornecer opções, as especificações de conclusão existentes são "
+"imprimidas\n"
 "    de forma a permitir que sejam reutilizadas como entrada.\n"
 "    \n"
 "    Opções:\n"
-"      -p\timprime especificações de conclusão existentes em formato reutilizável\n"
+"      -p\timprime especificações de conclusão existentes em formato "
+"reutilizável\n"
 "      -r\tremove uma especificação de conclusão para cada NOME, ou, se não\n"
 "    \t\tforneceu NOMEs, todas as especificações de conclusão\n"
 "      -D\taplica as conclusões e acções como predefinição para comandos\n"
@@ -5434,18 +5830,22 @@ msgstr ""
 "    \t\tcomando)\n"
 "    \n"
 "    Quando a conclusão é tentada, as acções são aplicadas na ordem em que \n"
-"    as opções de letras maiúsculas estão listadas acima. Se forem fornecidas múltiplas\n"
-"    opções, a opção -D toma precedência sobre -E e ambas têm precedência sobre -I.\n"
+"    as opções de letras maiúsculas estão listadas acima. Se forem fornecidas "
+"múltiplas\n"
+"    opções, a opção -D toma precedência sobre -E e ambas têm precedência "
+"sobre -I.\n"
 "    \n"
 "    Estado da saída:\n"
-"devolve sucesso a não ser que seja fornecida uma opção inválida ou ocorra um erro."
+"devolve sucesso a não ser que seja fornecida uma opção inválida ou ocorra um "
+"erro."
 
-#: builtins.c:2001
+#: builtins.c:2004
 msgid ""
 "Display possible completions depending on the options.\n"
 "    \n"
 "    Intended to be used from within a shell function generating possible\n"
-"    completions.  If the optional WORD argument is supplied, matches against\n"
+"    completions.  If the optional WORD argument is supplied, matches "
+"against\n"
 "    WORD are generated.\n"
 "    \n"
 "    Exit Status:\n"
@@ -5458,15 +5858,19 @@ msgstr ""
 "    são geradas comparações com PALAVRA.\n"
 "    \n"
 "    Estado de saída:\n"
-"    Devolve sucesso a não ser que indique uma opção inválida ou ocorra um erro."
+"    Devolve sucesso a não ser que indique uma opção inválida ou ocorra um "
+"erro."
 
-#: builtins.c:2016
+#: builtins.c:2019
 msgid ""
 "Modify or display completion options.\n"
 "    \n"
-"    Modify the completion options for each NAME, or, if no NAMEs are supplied,\n"
-"    the completion currently being executed.  If no OPTIONs are given, print\n"
-"    the completion options for each NAME or the current completion specification.\n"
+"    Modify the completion options for each NAME, or, if no NAMEs are "
+"supplied,\n"
+"    the completion currently being executed.  If no OPTIONs are given, "
+"print\n"
+"    the completion options for each NAME or the current completion "
+"specification.\n"
 "    \n"
 "    Options:\n"
 "    \t-o option\tSet completion option OPTION for each NAME\n"
@@ -5490,9 +5894,12 @@ msgid ""
 msgstr ""
 "Modifica ou mostra as opções de conclusão.\n"
 "    \n"
-"    Modifica as opções de conclusão para cada NOME, ou, se não fornecer NOME,\n"
-"    a conclusão actualmente em execução. Se nenhuma OPÇÃO for fornecida, imprime\n"
-"    as opções de conclusão para cada NOME ou a especificação de conclusão actual.\n"
+"    Modifica as opções de conclusão para cada NOME, ou, se não fornecer "
+"NOME,\n"
+"    a conclusão actualmente em execução. Se nenhuma OPÇÃO for fornecida, "
+"imprime\n"
+"    as opções de conclusão para cada NOME ou a especificação de conclusão "
+"actual.\n"
 "    \n"
 "    Opções:\n"
 "    \t-o opção\tDefine opção de conclusão OPÇÃO para cada NOME\n"
@@ -5504,31 +5911,40 @@ msgstr ""
 "    \n"
 "    Argumentos:\n"
 "    \n"
-"    Cada NOME refere-se a um comando para o qual uma especificação de conclusão\n"
-"    deve ter sido anteriormente definida usando o interno \"complete\". Se não\n"
+"    Cada NOME refere-se a um comando para o qual uma especificação de "
+"conclusão\n"
+"    deve ter sido anteriormente definida usando o interno \"complete\". Se "
+"não\n"
 "    forneceu NOMEs, compopt tem de ser chamado por uma função actualmente a\n"
-"    gerar conclusões e as opções para esse gerador de conclusões actualmente\n"
+"    gerar conclusões e as opções para esse gerador de conclusões "
+"actualmente\n"
 "    em execução são modificadas.\n"
 "    \n"
 "    Estado de saída:\n"
-"    Devolve sucesso a não ser que indique uma opção inválida ou NOME não tenha\n"
+"    Devolve sucesso a não ser que indique uma opção inválida ou NOME não "
+"tenha\n"
 "    uma especificação de conclusão definida."
 
-#: builtins.c:2047
+#: builtins.c:2050
 msgid ""
 "Read lines from the standard input into an indexed array variable.\n"
 "    \n"
-"    Read lines from the standard input into the indexed array variable ARRAY, or\n"
-"    from file descriptor FD if the -u option is supplied.  The variable MAPFILE\n"
+"    Read lines from the standard input into the indexed array variable "
+"ARRAY, or\n"
+"    from file descriptor FD if the -u option is supplied.  The variable "
+"MAPFILE\n"
 "    is the default ARRAY.\n"
 "    \n"
 "    Options:\n"
 "      -d delim\tUse DELIM to terminate lines, instead of newline\n"
-"      -n count\tCopy at most COUNT lines.  If COUNT is 0, all lines are copied\n"
-"      -O origin\tBegin assigning to ARRAY at index ORIGIN.  The default index is 0\n"
+"      -n count\tCopy at most COUNT lines.  If COUNT is 0, all lines are "
+"copied\n"
+"      -O origin\tBegin assigning to ARRAY at index ORIGIN.  The default "
+"index is 0\n"
 "      -s count\tDiscard the first COUNT lines read\n"
 "      -t\tRemove a trailing DELIM from each line read (default newline)\n"
-"      -u fd\tRead lines from file descriptor FD instead of the standard input\n"
+"      -u fd\tRead lines from file descriptor FD instead of the standard "
+"input\n"
 "      -C callback\tEvaluate CALLBACK each time QUANTUM lines are read\n"
 "      -c quantum\tSpecify the number of lines read between each call to\n"
 "    \t\t\tCALLBACK\n"
@@ -5541,25 +5957,31 @@ msgid ""
 "    element to be assigned and the line to be assigned to that element\n"
 "    as additional arguments.\n"
 "    \n"
-"    If not supplied with an explicit origin, mapfile will clear ARRAY before\n"
+"    If not supplied with an explicit origin, mapfile will clear ARRAY "
+"before\n"
 "    assigning to it.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success unless an invalid option is given or ARRAY is readonly or\n"
+"    Returns success unless an invalid option is given or ARRAY is readonly "
+"or\n"
 "    not an indexed array."
 msgstr ""
 "Lê linhas da entrada padrão para uma variável de matriz indexada.\n"
 "    \n"
-"    Lê linhas da entrada padrão para a variável de matriz indexada MATRIZ, ou\n"
-"    do descritor de ficheiro FD se a opção -u for fornecida. A variável MAPFILE\n"
+"    Lê linhas da entrada padrão para a variável de matriz indexada MATRIZ, "
+"ou\n"
+"    do descritor de ficheiro FD se a opção -u for fornecida. A variável "
+"MAPFILE\n"
 "    é a MATRIZ predefinida.\n"
 "    \n"
 "    Opções:\n"
 "      -d delim\tUsa DELIM para terminar as linhas, em vez de nova linha\n"
 "      -n total\tCopia no máximo TOTAL linhas. Se TOTAL for 0, copia todas\n"
-"      -O origem\tComeça a atribuir a MATRIZ no índice ORIGEM. A predefinição é 0\n"
+"      -O origem\tComeça a atribuir a MATRIZ no índice ORIGEM. A predefinição "
+"é 0\n"
 "      -s total\tDescarta as primeiras TOTAL linhas lidas\n"
-"      -t\tRemove um DELIM inicial de cada linha lida (predefinição é nova linha)\n"
+"      -t\tRemove um DELIM inicial de cada linha lida (predefinição é nova "
+"linha)\n"
 "      -u fd\tLê linhas do descritor de ficheiro FD em vez da entrada padrão\n"
 "      -C retorno\tAvalia RETORNO cada vez que QUANTUM linhas são lidas\n"
 "      -c quantum\tEspecifica o número de linhas lidas entre cada chamada a\n"
@@ -5573,14 +5995,16 @@ msgstr ""
 "    matriz a ser atribuído e a linha a ser atribuída a esse elemento\n"
 "    como argumentos adicionais.\n"
 "    \n"
-"    Se não for fornecido com uma origem explícita, mapfile limpa MATRIZ antes\n"
+"    Se não for fornecido com uma origem explícita, mapfile limpa MATRIZ "
+"antes\n"
 "    de lhe fazer atribuições.\n"
 "    \n"
 "    Estado de saída:\n"
-"    Devolve sucesso a não ser que indique uma opção inválida, MATRIZ seja só\n"
+"    Devolve sucesso a não ser que indique uma opção inválida, MATRIZ seja "
+"só\n"
 "    de leitura ou não seja uma matriz indexada."
 
-#: builtins.c:2083
+#: builtins.c:2086
 msgid ""
 "Read lines from a file into an array variable.\n"
 "    \n"
@@ -5590,6 +6014,10 @@ msgstr ""
 "     \n"
 "     Um sinónimo para \"mapfile\"."
 
+#, c-format
+#~ msgid "%s: invalid associative array key"
+#~ msgstr "%s: chave de matriz associativa inválida"
+
 #~ msgid ""
 #~ "Returns the context of the current subroutine call.\n"
 #~ "    \n"
index c61c0b5837d0b5cdbd33064f297ed53e83694100..6048f5c982afbdf00c60c2f36f622a9eae01353c 100644 (file)
Binary files a/po/pt_BR.gmo and b/po/pt_BR.gmo differ
index cddc1d903de56e9b7abbdc2330a6bdefcbfe5902..5d0b79dbef00b17cf89eb006780e4ecb64fc936c 100644 (file)
@@ -8,10 +8,11 @@ msgid ""
 msgstr ""
 "Project-Id-Version: bash 5.1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-11-28 12:51-0500\n"
+"POT-Creation-Date: 2022-01-11 14:50-0500\n"
 "PO-Revision-Date: 2021-01-07 10:37-0300\n"
 "Last-Translator: Rafael Fontenelle <rafaelff@gnome.org>\n"
-"Language-Team: Brazilian Portuguese <ldpbr-translation@lists.sourceforge.net>\n"
+"Language-Team: Brazilian Portuguese <ldpbr-translation@lists.sourceforge."
+"net>\n"
 "Language: pt_BR\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -22,59 +23,55 @@ msgstr ""
 
 #: arrayfunc.c:66
 msgid "bad array subscript"
-msgstr "subscrito de array incorreto"
+msgstr "subscript de array incorreto"
 
-#: arrayfunc.c:421 builtins/declare.def:638 variables.c:2274 variables.c:2300
-#: variables.c:3133
+#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268
+#: variables.c:3101
 #, c-format
 msgid "%s: removing nameref attribute"
 msgstr "%s: removendo o atributo nameref"
 
-#: arrayfunc.c:446 builtins/declare.def:851
+#: arrayfunc.c:496 builtins/declare.def:868
 #, c-format
 msgid "%s: cannot convert indexed to associative array"
 msgstr "%s: impossível converter array indexado para associativo"
 
-#: arrayfunc.c:700
-#, c-format
-msgid "%s: invalid associative array key"
-msgstr "%s: chave de array associativo inválida"
-
-#: arrayfunc.c:702
+#: arrayfunc.c:777
 #, c-format
 msgid "%s: cannot assign to non-numeric index"
 msgstr "%s: impossível atribuir a índice não numérico"
 
-#: arrayfunc.c:747
+#: arrayfunc.c:822
 #, c-format
 msgid "%s: %s: must use subscript when assigning associative array"
-msgstr "%s: %s: deve usar subscrito ao atribuir um array associativo"
+msgstr "%s: %s: deve-se usar subscript ao atribuir um array associativo"
 
-#: bashhist.c:452
+#: bashhist.c:455
 #, c-format
 msgid "%s: cannot create: %s"
 msgstr "%s: impossível criar: %s"
 
-#: bashline.c:4310
+#: bashline.c:4479
 msgid "bash_execute_unix_command: cannot find keymap for command"
-msgstr "bash_execute_unix_command: impossível localizar mapa de teclas para comando"
+msgstr ""
+"bash_execute_unix_command: impossível localizar mapa de teclas para comando"
 
-#: bashline.c:4459
+#: bashline.c:4637
 #, c-format
 msgid "%s: first non-whitespace character is not `\"'"
 msgstr "%s: primeiro caractere não-espaço em branco não é `\"'"
 
-#: bashline.c:4488
+#: bashline.c:4666
 #, c-format
 msgid "no closing `%c' in %s"
 msgstr "sem `%c' de fechamento em %s"
 
-#: bashline.c:4519
+#: bashline.c:4697
 #, c-format
 msgid "%s: missing colon separator"
 msgstr "%s faltando separador dois-pontos"
 
-#: bashline.c:4555
+#: bashline.c:4733
 #, c-format
 msgid "`%s': cannot unbind in command keymap"
 msgstr "`%s': não foi desassociar no comando keymap"
@@ -94,7 +91,7 @@ msgstr "expansão de chaves: falha ao alocar memória para %u elementos"
 msgid "brace expansion: failed to allocate memory for `%s'"
 msgstr "expansão de chaves: falha ao alocar memória para `%s'"
 
-#: builtins/alias.def:131 variables.c:1844
+#: builtins/alias.def:131 variables.c:1817
 #, c-format
 msgid "`%s': invalid alias name"
 msgstr "`%s': nome de apelido (alias) inválido"
@@ -156,7 +153,8 @@ msgstr ""
 "Retorna o contexto da chamada de sub-rotina atual.\n"
 "    \n"
 "    Sem EXPR, retorna \"$linha $arquivo\".  Com EXPR, retorna\n"
-"    \"$linha $sub-rotina $arquivo\"; essa informação extra pode ser usada para\n"
+"    \"$linha $sub-rotina $arquivo\"; essa informação extra pode ser usada "
+"para\n"
 "    fornecer um rastro da pilha.\n"
 "    \n"
 "    O valor de EXPR indica quantos quadros de chamada deve voltar antes do\n"
@@ -166,7 +164,7 @@ msgstr ""
 msgid "HOME not set"
 msgstr "HOME não definida"
 
-#: builtins/cd.def:335 builtins/common.c:161 test.c:901
+#: builtins/cd.def:335 builtins/common.c:161 test.c:916
 msgid "too many arguments"
 msgstr "número excessivo de argumentos"
 
@@ -193,7 +191,7 @@ msgstr "aviso: "
 msgid "%s: usage: "
 msgstr "%s: uso: "
 
-#: builtins/common.c:193 shell.c:516 shell.c:844
+#: builtins/common.c:193 shell.c:524 shell.c:866
 #, c-format
 msgid "%s: option requires an argument"
 msgstr "%s: a opção requer um argumento"
@@ -208,7 +206,7 @@ msgstr "%s: requer argumento numérico"
 msgid "%s: not found"
 msgstr "%s: não encontrado"
 
-#: builtins/common.c:216 shell.c:857
+#: builtins/common.c:216 shell.c:879
 #, c-format
 msgid "%s: invalid option"
 msgstr "%s: opção inválida"
@@ -218,7 +216,7 @@ msgstr "%s: opção inválida"
 msgid "%s: invalid option name"
 msgstr "%s: nome de opção inválido"
 
-#: builtins/common.c:230 execute_cmd.c:2373 general.c:368 general.c:373
+#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373
 #, c-format
 msgid "`%s': not a valid identifier"
 msgstr "`%s': não é um identificador válido"
@@ -231,7 +229,7 @@ msgstr "número octal inválido"
 msgid "invalid hex number"
 msgstr "número do hexa inválido"
 
-#: builtins/common.c:244 expr.c:1569
+#: builtins/common.c:244 expr.c:1574
 msgid "invalid number"
 msgstr "número inválido"
 
@@ -243,90 +241,97 @@ msgstr "%s: especificação de sinal inválida"
 #: builtins/common.c:259
 #, c-format
 msgid "`%s': not a pid or valid job spec"
-msgstr "`%s': não é um identificador de processo (pid) nem é uma especificação de trabalho válida"
+msgstr ""
+"`%s': não é um identificador de processo (pid) nem é uma especificação de "
+"trabalho válida"
 
-#: builtins/common.c:266 error.c:510
+#: builtins/common.c:266 error.c:536
 #, c-format
 msgid "%s: readonly variable"
 msgstr "%s: a variável permite somente leitura"
 
-#: builtins/common.c:274
+#: builtins/common.c:273
+#, fuzzy, c-format
+msgid "%s: cannot assign"
+msgstr "%s: impossível remover definição"
+
+#: builtins/common.c:281
 #, c-format
 msgid "%s: %s out of range"
 msgstr "%s: %s fora dos limites"
 
-#: builtins/common.c:274 builtins/common.c:276
+#: builtins/common.c:281 builtins/common.c:283
 msgid "argument"
 msgstr "argumento"
 
-#: builtins/common.c:276
+#: builtins/common.c:283
 #, c-format
 msgid "%s out of range"
 msgstr "%s fora dos limites"
 
-#: builtins/common.c:284
+#: builtins/common.c:291
 #, c-format
 msgid "%s: no such job"
 msgstr "%s: trabalho não existe"
 
-#: builtins/common.c:292
+#: builtins/common.c:299
 #, c-format
 msgid "%s: no job control"
 msgstr "%s: nenhum controle de trabalho"
 
-#: builtins/common.c:294
+#: builtins/common.c:301
 msgid "no job control"
 msgstr "nenhum controle de trabalho"
 
-#: builtins/common.c:304
+#: builtins/common.c:311
 #, c-format
 msgid "%s: restricted"
 msgstr "%s: restrição"
 
-#: builtins/common.c:306
+#: builtins/common.c:313
 msgid "restricted"
 msgstr "restrição"
 
-#: builtins/common.c:314
+#: builtins/common.c:321
 #, c-format
 msgid "%s: not a shell builtin"
 msgstr "%s: não é um comando interno do shell"
 
-#: builtins/common.c:323
+#: builtins/common.c:330
 #, c-format
 msgid "write error: %s"
 msgstr "erro de escrita: %s"
 
-#: builtins/common.c:331
+#: builtins/common.c:338
 #, c-format
 msgid "error setting terminal attributes: %s"
 msgstr "erro ao definir atributos do terminal: %s"
 
-#: builtins/common.c:333
+#: builtins/common.c:340
 #, c-format
 msgid "error getting terminal attributes: %s"
 msgstr "erro ao obter atributos do terminal: %s"
 
-#: builtins/common.c:635
+#: builtins/common.c:642
 #, c-format
 msgid "%s: error retrieving current directory: %s: %s\n"
 msgstr "%s: erro ao obter o diretório atual: %s: %s\n"
 
-#: builtins/common.c:701 builtins/common.c:703
+#: builtins/common.c:708 builtins/common.c:710
 #, c-format
 msgid "%s: ambiguous job spec"
 msgstr "%s: especificação de trabalho ambígua"
 
-#: builtins/common.c:964
+#: builtins/common.c:971
 msgid "help not available in this version"
 msgstr "ajuda não disponível nesta versão"
 
-#: builtins/common.c:1008 builtins/set.def:953 variables.c:3839
+#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825
 #, c-format
 msgid "%s: cannot unset: readonly %s"
 msgstr "%s: impossível remover definição: %s somente-leitura"
 
-#: builtins/common.c:1013 builtins/set.def:932 variables.c:3844
+#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830
 #, c-format
 msgid "%s: cannot unset"
 msgstr "%s: impossível remover definição"
@@ -336,108 +341,108 @@ msgstr "%s: impossível remover definição"
 msgid "%s: invalid action name"
 msgstr "%s: nome de ação inválido"
 
-#: builtins/complete.def:486 builtins/complete.def:634
-#: builtins/complete.def:865
+#: builtins/complete.def:486 builtins/complete.def:642
+#: builtins/complete.def:873
 #, c-format
 msgid "%s: no completion specification"
 msgstr "%s: nenhuma especificação de completação"
 
-#: builtins/complete.def:688
+#: builtins/complete.def:696
 msgid "warning: -F option may not work as you expect"
 msgstr "aviso: a opção -F pode não funcionar como esperado"
 
-#: builtins/complete.def:690
+#: builtins/complete.def:698
 msgid "warning: -C option may not work as you expect"
 msgstr "aviso: a opção -C pode não funcionar como esperado"
 
-#: builtins/complete.def:838
+#: builtins/complete.def:846
 msgid "not currently executing completion function"
 msgstr "não se está executando atualmente função de completação"
 
-#: builtins/declare.def:134
+#: builtins/declare.def:137
 msgid "can only be used in a function"
 msgstr "somente pode ser usado em uma função"
 
-#: builtins/declare.def:363 builtins/declare.def:756
+#: builtins/declare.def:437
+msgid "cannot use `-f' to make functions"
+msgstr "impossível usar `-f' para criar funções"
+
+#: builtins/declare.def:464 execute_cmd.c:6132
+#, c-format
+msgid "%s: readonly function"
+msgstr "%s: função somente para leitura"
+
+#: builtins/declare.def:521 builtins/declare.def:804
 #, c-format
 msgid "%s: reference variable cannot be an array"
 msgstr "%s: variável de referência não pode ser um array"
 
-#: builtins/declare.def:374 variables.c:3385
+#: builtins/declare.def:532 variables.c:3359
 #, c-format
 msgid "%s: nameref variable self references not allowed"
 msgstr "%s: referência a si próprio da variável nameref não é permitido"
 
-#: builtins/declare.def:379 variables.c:2104 variables.c:3304 variables.c:3312
-#: variables.c:3382
+#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286
+#: variables.c:3356
 #, c-format
 msgid "%s: circular name reference"
 msgstr "%s referência circular de nome"
 
-#: builtins/declare.def:384 builtins/declare.def:762 builtins/declare.def:773
+#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820
 #, c-format
 msgid "`%s': invalid variable name for name reference"
 msgstr "\"%s\": nome de variável inválido para referência de nome"
 
-#: builtins/declare.def:514
-msgid "cannot use `-f' to make functions"
-msgstr "impossível usar `-f' para criar funções"
-
-#: builtins/declare.def:526 execute_cmd.c:5986
-#, c-format
-msgid "%s: readonly function"
-msgstr "%s: função somente para leitura"
-
-#: builtins/declare.def:824
-#, c-format
-msgid "%s: quoted compound array assignment deprecated"
-msgstr "%s: atribuição de array composto com aspas está obsoleto"
-
-#: builtins/declare.def:838
+#: builtins/declare.def:856
 #, c-format
 msgid "%s: cannot destroy array variables in this way"
 msgstr "%s: impossível destruir variáveis de array desta maneira"
 
-#: builtins/declare.def:845 builtins/read.def:815
+#: builtins/declare.def:862 builtins/read.def:887
 #, c-format
 msgid "%s: cannot convert associative to indexed array"
 msgstr "%s: impossível converter array associativo para indexado"
 
-#: builtins/enable.def:143 builtins/enable.def:151
+#: builtins/declare.def:891
+#, c-format
+msgid "%s: quoted compound array assignment deprecated"
+msgstr "%s: atribuição de array composto com aspas está obsoleto"
+
+#: builtins/enable.def:145 builtins/enable.def:153
 msgid "dynamic loading not available"
 msgstr "carregamento dinâmico não está disponível"
 
-#: builtins/enable.def:343
+#: builtins/enable.def:376
 #, c-format
 msgid "cannot open shared object %s: %s"
 msgstr "impossível abrir objeto compartilhado %s: %s"
 
-#: builtins/enable.def:371
+#: builtins/enable.def:405
 #, c-format
 msgid "cannot find %s in shared object %s: %s"
 msgstr "impossível localizar %s no objeto compartilhado %s: %s"
 
-#: builtins/enable.def:388
+#: builtins/enable.def:422
 #, c-format
 msgid "%s: dynamic builtin already loaded"
 msgstr "%s: comando dinâmico já foi carregado"
 
-#: builtins/enable.def:392
+#: builtins/enable.def:426
 #, c-format
 msgid "load function for %s returns failure (%d): not loaded"
 msgstr "função de carregamento para %s retorna falha (%d): não foi carregada"
 
-#: builtins/enable.def:517
+#: builtins/enable.def:551
 #, c-format
 msgid "%s: not dynamically loaded"
 msgstr "%s: não foi carregado dinamicamente"
 
-#: builtins/enable.def:543
+#: builtins/enable.def:577
 #, c-format
 msgid "%s: cannot delete: %s"
 msgstr "%s: impossível excluir: %s"
 
-#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5818
+#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959
 #, c-format
 msgid "%s: is a directory"
 msgstr "%s: é um diretório"
@@ -452,7 +457,7 @@ msgstr "%s: não é um arquivo irregular"
 msgid "%s: file is too large"
 msgstr "%s: arquivo é muito grande"
 
-#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1647
+#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673
 #, c-format
 msgid "%s: cannot execute binary file"
 msgstr "%s: impossível executar o arquivo binário"
@@ -544,15 +549,18 @@ msgstr ""
 
 #: builtins/help.def:185
 #, c-format
-msgid "no help topics match `%s'.  Try `help help' or `man -k %s' or `info %s'."
-msgstr "nenhum tópico de ajuda corresponde a `%s'.  Tente `help help' ou `man -k %s' ou `info %s'."
+msgid ""
+"no help topics match `%s'.  Try `help help' or `man -k %s' or `info %s'."
+msgstr ""
+"nenhum tópico de ajuda corresponde a `%s'.  Tente `help help' ou `man -k %s' "
+"ou `info %s'."
 
-#: builtins/help.def:224
+#: builtins/help.def:223
 #, c-format
 msgid "%s: cannot open: %s"
 msgstr "%s: impossível abrir: %s"
 
-#: builtins/help.def:524
+#: builtins/help.def:523
 #, c-format
 msgid ""
 "These shell commands are defined internally.  Type `help' to see this list.\n"
@@ -563,30 +571,32 @@ msgid ""
 "A star (*) next to a name means that the command is disabled.\n"
 "\n"
 msgstr ""
-"Esses comandos shell são definidos internamente. Digite `help' para ver essa\n"
+"Esses comandos shell são definidos internamente. Digite `help' para ver "
+"essa\n"
 "lista. Digite `help NOME' para descobrir mais sobre a função `NOME'.\n"
 "Use `info bash' para descobrir mais sobre o shell em geral.\n"
-"Use `man -k' ou `info' para descobrir mais sobre comandos que não estão nesta\n"
+"Use `man -k' ou `info' para descobrir mais sobre comandos que não estão "
+"nesta\n"
 "lista.\n"
 "\n"
 "Um asterisco (*) próximo ao nome significa que o comando está desabilitado.\n"
 "\n"
 
-#: builtins/history.def:155
+#: builtins/history.def:159
 msgid "cannot use more than one of -anrw"
 msgstr "impossível usar mais de um dentre -anrw"
 
-#: builtins/history.def:188 builtins/history.def:198 builtins/history.def:213
-#: builtins/history.def:230 builtins/history.def:242 builtins/history.def:249
+#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215
+#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247
 msgid "history position"
 msgstr "posição no histórico"
 
-#: builtins/history.def:340
+#: builtins/history.def:338
 #, c-format
 msgid "%s: invalid timestamp"
 msgstr "%s: marca de tempo inválida"
 
-#: builtins/history.def:451
+#: builtins/history.def:449
 #, c-format
 msgid "%s: history expansion failed"
 msgstr "%s: expansão do histórico falhou"
@@ -609,78 +619,78 @@ msgstr "%s: argumentos devem ser IDs de trabalhos ou processo"
 msgid "Unknown error"
 msgstr "Erro desconhecido"
 
-#: builtins/let.def:97 builtins/let.def:122 expr.c:639 expr.c:657
+#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658
 msgid "expression expected"
 msgstr "esperava uma expressão"
 
-#: builtins/mapfile.def:178
+#: builtins/mapfile.def:180
 #, c-format
 msgid "%s: not an indexed array"
 msgstr "%s: não é um array indexado"
 
-#: builtins/mapfile.def:271 builtins/read.def:308
+#: builtins/mapfile.def:276 builtins/read.def:336
 #, c-format
 msgid "%s: invalid file descriptor specification"
 msgstr "%s: especificação de descritor de arquivo inválida"
 
-#: builtins/mapfile.def:279 builtins/read.def:315
+#: builtins/mapfile.def:284 builtins/read.def:343
 #, c-format
 msgid "%d: invalid file descriptor: %s"
 msgstr "%d: descritor de arquivo inválido: %s"
 
-#: builtins/mapfile.def:288 builtins/mapfile.def:326
+#: builtins/mapfile.def:293 builtins/mapfile.def:331
 #, c-format
 msgid "%s: invalid line count"
 msgstr "%s: número de linhas inválido"
 
-#: builtins/mapfile.def:299
+#: builtins/mapfile.def:304
 #, c-format
 msgid "%s: invalid array origin"
 msgstr "%s: origem do array inválido"
 
-#: builtins/mapfile.def:316
+#: builtins/mapfile.def:321
 #, c-format
 msgid "%s: invalid callback quantum"
 msgstr "%s: quantidade de chamadas inválida"
 
-#: builtins/mapfile.def:349
+#: builtins/mapfile.def:354
 msgid "empty array variable name"
 msgstr "nome de variável array vazio"
 
-#: builtins/mapfile.def:370
+#: builtins/mapfile.def:375
 msgid "array variable support required"
 msgstr "requer suporte a variável de array"
 
-#: builtins/printf.def:419
+#: builtins/printf.def:430
 #, c-format
 msgid "`%s': missing format character"
 msgstr "`%s': faltando caractere de formato"
 
-#: builtins/printf.def:474
+#: builtins/printf.def:485
 #, c-format
 msgid "`%c': invalid time format specification"
 msgstr "`%c': especificação de formato de tempo inválida"
 
-#: builtins/printf.def:676
+#: builtins/printf.def:708
 #, c-format
 msgid "`%c': invalid format character"
 msgstr "`%c': caractere de formato inválido"
 
-#: builtins/printf.def:702
+#: builtins/printf.def:734
 #, c-format
 msgid "warning: %s: %s"
 msgstr "aviso: %s: %s"
 
-#: builtins/printf.def:788
+#: builtins/printf.def:822
 #, c-format
 msgid "format parsing problem: %s"
 msgstr "problema ao analisar formato: %s"
 
-#: builtins/printf.def:885
+#: builtins/printf.def:919
 msgid "missing hex digit for \\x"
 msgstr "faltando dígito hexa para \\x"
 
-#: builtins/printf.def:900
+#: builtins/printf.def:934
 #, c-format
 msgid "missing unicode digit for \\%c"
 msgstr "faltando dígito unicode para \\%c"
@@ -721,10 +731,12 @@ msgid ""
 "    \twith its position in the stack\n"
 "    \n"
 "    Arguments:\n"
-"      +N\tDisplays the Nth entry counting from the left of the list shown by\n"
+"      +N\tDisplays the Nth entry counting from the left of the list shown "
+"by\n"
 "    \tdirs when invoked without options, starting with zero.\n"
 "    \n"
-"      -N\tDisplays the Nth entry counting from the right of the list shown by\n"
+"      -N\tDisplays the Nth entry counting from the right of the list shown "
+"by\n"
 "\tdirs when invoked without options, starting with zero."
 msgstr ""
 "Exibe a lista de diretórios atualmente memorizados. Diretórios são\n"
@@ -831,25 +843,28 @@ msgstr ""
 "    \n"
 "    O comando interno `dirs' exibe a pilha de diretório."
 
-#: builtins/read.def:280
+#: builtins/read.def:308
 #, c-format
 msgid "%s: invalid timeout specification"
 msgstr "%s: especificação de tempo limite inválida"
 
-#: builtins/read.def:755
+#: builtins/read.def:827
 #, c-format
 msgid "read error: %d: %s"
 msgstr "erro de leitura: %d: %s"
 
 #: builtins/return.def:68
 msgid "can only `return' from a function or sourced script"
-msgstr "possível retornar (`return') apenas de uma função ou script carregado (com `source')"
+msgstr ""
+"possível retornar (`return') apenas de uma função ou script carregado (com "
+"`source')"
 
 #: builtins/set.def:869
 msgid "cannot simultaneously unset a function and a variable"
-msgstr "impossível simultaneamente remover definição de uma função e uma variável"
+msgstr ""
+"impossível simultaneamente remover definição de uma função e uma variável"
 
-#: builtins/set.def:966
+#: builtins/set.def:969
 #, c-format
 msgid "%s: not an array variable"
 msgstr "%s: não é uma variável array"
@@ -868,11 +883,12 @@ msgstr "%s: impossível exportar"
 msgid "shift count"
 msgstr "número de shift"
 
-#: builtins/shopt.def:310
+#: builtins/shopt.def:323
 msgid "cannot set and unset shell options simultaneously"
-msgstr "impossível simultaneamente definir e remover definição de opções do shell"
+msgstr ""
+"impossível simultaneamente definir e remover definição de opções do shell"
 
-#: builtins/shopt.def:428
+#: builtins/shopt.def:444
 #, c-format
 msgid "%s: invalid shell option name"
 msgstr "%s: nome de opção de shell inválido"
@@ -939,16 +955,16 @@ msgstr "%s: argumento limite inválido"
 msgid "`%c': bad command"
 msgstr "`%c': comando incorreto"
 
-#: builtins/ulimit.def:455
+#: builtins/ulimit.def:464
 #, c-format
 msgid "%s: cannot get limit: %s"
 msgstr "%s: impossível obter limite: %s"
 
-#: builtins/ulimit.def:481
+#: builtins/ulimit.def:490
 msgid "limit"
 msgstr "limite"
 
-#: builtins/ulimit.def:493 builtins/ulimit.def:793
+#: builtins/ulimit.def:502 builtins/ulimit.def:802
 #, c-format
 msgid "%s: cannot modify limit: %s"
 msgstr "%s: impossível modificar limite: %s"
@@ -967,7 +983,7 @@ msgstr "`%c': operador de modo simbólico inválido"
 msgid "`%c': invalid symbolic mode character"
 msgstr "`%c': caractere de modo simbólico inválido"
 
-#: error.c:89 error.c:347 error.c:349 error.c:351
+#: error.c:89 error.c:373 error.c:375 error.c:377
 msgid " line "
 msgstr " linha "
 
@@ -987,96 +1003,108 @@ msgstr "Abortando..."
 msgid "INFORM: "
 msgstr "INFORM: "
 
-#: error.c:462
+#: error.c:310
+#, fuzzy, c-format
+msgid "DEBUG warning: "
+msgstr "aviso: "
+
+#: error.c:488
 msgid "unknown command error"
 msgstr "erro de comando desconhecido"
 
-#: error.c:463
+#: error.c:489
 msgid "bad command type"
 msgstr "tipo de comando incorreto"
 
-#: error.c:464
+#: error.c:490
 msgid "bad connector"
 msgstr "conector incorreto"
 
-#: error.c:465
+#: error.c:491
 msgid "bad jump"
 msgstr "desvio incorreto"
 
-#: error.c:503
+#: error.c:529
 #, c-format
 msgid "%s: unbound variable"
 msgstr "%s: variável não associada"
 
-#: eval.c:242
+#: eval.c:243
 msgid "\atimed out waiting for input: auto-logout\n"
-msgstr "\atempo limite de espera excedido aguardando entrada: fim automático da sessão\n"
+msgstr ""
+"\atempo limite de espera excedido aguardando entrada: fim automático da "
+"sessão\n"
 
-#: execute_cmd.c:537
+#: execute_cmd.c:555
 #, c-format
 msgid "cannot redirect standard input from /dev/null: %s"
 msgstr "impossível redirecionar a entrada padrão para /dev/null: %s"
 
-#: execute_cmd.c:1297
+#: execute_cmd.c:1317
 #, c-format
 msgid "TIMEFORMAT: `%c': invalid format character"
 msgstr "TIMEFORMAT: `%c': caractere de formato inválido"
 
-#: execute_cmd.c:2362
+#: execute_cmd.c:2391
 #, c-format
 msgid "execute_coproc: coproc [%d:%s] still exists"
 msgstr "execute_coproc: coproc [%d:%s] ainda existe"
 
-#: execute_cmd.c:2486
+#: execute_cmd.c:2524
 msgid "pipe error"
 msgstr "erro de `pipe'"
 
-#: execute_cmd.c:4793
+#: execute_cmd.c:4923
 #, c-format
 msgid "eval: maximum eval nesting level exceeded (%d)"
 msgstr "eval: excedido o nível máximo de aninhamento de `eval' (%d)"
 
-#: execute_cmd.c:4805
+#: execute_cmd.c:4935
 #, c-format
 msgid "%s: maximum source nesting level exceeded (%d)"
 msgstr "%s: excedido o nível máximo de aninhamento de `function' (%d)"
 
-#: execute_cmd.c:4913
+#: execute_cmd.c:5043
 #, c-format
 msgid "%s: maximum function nesting level exceeded (%d)"
 msgstr "%s: excedido o nível máximo de aninhamento de avaliação (%d)"
 
-#: execute_cmd.c:5467
+#: execute_cmd.c:5598
 #, c-format
 msgid "%s: restricted: cannot specify `/' in command names"
 msgstr "%s: restrição: não é permitido especificar `/' em nomes de comandos"
 
-#: execute_cmd.c:5574
+#: execute_cmd.c:5715
 #, c-format
 msgid "%s: command not found"
 msgstr "%s: comando não encontrado"
 
-#: execute_cmd.c:5816
+#: execute_cmd.c:5957
 #, c-format
 msgid "%s: %s"
 msgstr "%s: %s"
 
-#: execute_cmd.c:5854
+#: execute_cmd.c:5975
+#, fuzzy, c-format
+msgid "%s: cannot execute: required file not found"
+msgstr "%s: impossível executar o arquivo binário"
+
+#: execute_cmd.c:6000
 #, c-format
 msgid "%s: %s: bad interpreter"
 msgstr "%s: %s: interpretador incorreto"
 
-#: execute_cmd.c:5891
+#: execute_cmd.c:6037
 #, c-format
 msgid "%s: cannot execute binary file: %s"
 msgstr "%s: impossível executar o arquivo binário: %s"
 
-#: execute_cmd.c:5977
+#: execute_cmd.c:6123
 #, c-format
 msgid "`%s': is a special builtin"
 msgstr "`%s': é um comando interno especial"
 
-#: execute_cmd.c:6029
+#: execute_cmd.c:6175
 #, c-format
 msgid "cannot duplicate fd %d to fd %d"
 msgstr "impossível duplicar fd (descritor de arquivo) %d para fd %d"
@@ -1089,68 +1117,68 @@ msgstr "excedido o nível de recursividade da expressão"
 msgid "recursion stack underflow"
 msgstr "esvaziamento de pilha de recursão"
 
-#: expr.c:477
+#: expr.c:478
 msgid "syntax error in expression"
 msgstr "erro de sintaxe na expressão"
 
-#: expr.c:521
+#: expr.c:522
 msgid "attempted assignment to non-variable"
 msgstr "tentativa de atribuição para algo que não é uma variável"
 
-#: expr.c:530
+#: expr.c:531
 msgid "syntax error in variable assignment"
 msgstr "erro de sintaxe na atribuição de variável"
 
-#: expr.c:544 expr.c:911
+#: expr.c:545 expr.c:912
 msgid "division by 0"
 msgstr "divisão por 0"
 
-#: expr.c:592
+#: expr.c:593
 msgid "bug: bad expassign token"
 msgstr "erro de programação: token incorreto passado para expassign()"
 
-#: expr.c:646
+#: expr.c:647
 msgid "`:' expected for conditional expression"
 msgstr "esperava `:' para expressão condicional"
 
-#: expr.c:972
+#: expr.c:973
 msgid "exponent less than 0"
 msgstr "exponente menor que 0"
 
-#: expr.c:1029
+#: expr.c:1030
 msgid "identifier expected after pre-increment or pre-decrement"
 msgstr "esperava identificador após pré-acréscimo ou pré-decréscimo"
 
-#: expr.c:1056
+#: expr.c:1057
 msgid "missing `)'"
 msgstr "faltando `)'"
 
-#: expr.c:1107 expr.c:1487
+#: expr.c:1108 expr.c:1492
 msgid "syntax error: operand expected"
 msgstr "erro de sintaxe: esperava operando"
 
-#: expr.c:1489
+#: expr.c:1494
 msgid "syntax error: invalid arithmetic operator"
 msgstr "erro de sintaxe: operador aritmético inválido"
 
-#: expr.c:1513
+#: expr.c:1518
 #, c-format
 msgid "%s%s%s: %s (error token is \"%s\")"
 msgstr "%s%s%s: %s (token de erro é \"%s\")"
 
-#: expr.c:1573
+#: expr.c:1578
 msgid "invalid arithmetic base"
 msgstr "base aritmética inválida"
 
-#: expr.c:1582
+#: expr.c:1587
 msgid "invalid integer constant"
 msgstr "contante inteira inválida"
 
-#: expr.c:1598
+#: expr.c:1603
 msgid "value too great for base"
 msgstr "valor muito grande para esta base de numeração"
 
-#: expr.c:1647
+#: expr.c:1652
 #, c-format
 msgid "%s: expression error\n"
 msgstr "%s: erro de expressão\n"
@@ -1159,186 +1187,192 @@ msgstr "%s: erro de expressão\n"
 msgid "getcwd: cannot access parent directories"
 msgstr "getcwd: impossível acessar os diretórios pais (anteriores)"
 
-#: input.c:99 subst.c:6069
+#: input.c:99 subst.c:6208
 #, c-format
 msgid "cannot reset nodelay mode for fd %d"
-msgstr "impossível redefinir modo `nodelay' para o descritor de arquivo (fd) %d"
+msgstr ""
+"impossível redefinir modo `nodelay' para o descritor de arquivo (fd) %d"
 
 #: input.c:266
 #, c-format
 msgid "cannot allocate new file descriptor for bash input from fd %d"
-msgstr "impossível alocar novo descritor de arquivo (fd) para a entrada do `bash' a partir do fd %d"
+msgstr ""
+"impossível alocar novo descritor de arquivo (fd) para a entrada do `bash' a "
+"partir do fd %d"
 
 #: input.c:274
 #, c-format
 msgid "save_bash_input: buffer already exists for new fd %d"
-msgstr "save_bash_input: buffer já existe para o novo descritor de arquivo (fd) %d"
+msgstr ""
+"save_bash_input: buffer já existe para o novo descritor de arquivo (fd) %d"
 
 #: jobs.c:543
 msgid "start_pipeline: pgrp pipe"
 msgstr "start_pipeline: `pipe' de pgrp"
 
-#: jobs.c:906
+#: jobs.c:907
 #, c-format
 msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
 
-#: jobs.c:959
+#: jobs.c:960
 #, c-format
 msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
 
-#: jobs.c:1283
+#: jobs.c:1279
 #, c-format
 msgid "forked pid %d appears in running job %d"
-msgstr "identificador de processo (pid) %d bifurcado (fork) aparece no trabalho em execução %d"
+msgstr ""
+"identificador de processo (pid) %d bifurcado (fork) aparece no trabalho em "
+"execução %d"
 
-#: jobs.c:1402
+#: jobs.c:1397
 #, c-format
 msgid "deleting stopped job %d with process group %ld"
 msgstr "excluindo trabalho parado %d com grupo de processo %ld"
 
-#: jobs.c:1511
+#: jobs.c:1502
 #, c-format
 msgid "add_process: pid %5ld (%s) marked as still alive"
 msgstr "add_process: pid %5ld (%s) marcado como ainda vivo"
 
-#: jobs.c:1850
+#: jobs.c:1839
 #, c-format
 msgid "describe_pid: %ld: no such pid"
 msgstr "describe_pid: %ld: o identificador do processo (pid) não existe"
 
-#: jobs.c:1865
+#: jobs.c:1854
 #, c-format
 msgid "Signal %d"
 msgstr "Sinal %d"
 
-#: jobs.c:1879 jobs.c:1905
+#: jobs.c:1868 jobs.c:1894
 msgid "Done"
 msgstr "Concluído"
 
-#: jobs.c:1884 siglist.c:122
+#: jobs.c:1873 siglist.c:123
 msgid "Stopped"
 msgstr "Parado"
 
-#: jobs.c:1888
+#: jobs.c:1877
 #, c-format
 msgid "Stopped(%s)"
 msgstr "Parado(%s)"
 
-#: jobs.c:1892
+#: jobs.c:1881
 msgid "Running"
 msgstr "Executando"
 
-#: jobs.c:1909
+#: jobs.c:1898
 #, c-format
 msgid "Done(%d)"
 msgstr "Concluído(%d)"
 
-#: jobs.c:1911
+#: jobs.c:1900
 #, c-format
 msgid "Exit %d"
 msgstr "Fim da execução com status %d"
 
-#: jobs.c:1914
+#: jobs.c:1903
 msgid "Unknown status"
 msgstr "Status desconhecido"
 
-#: jobs.c:2001
+#: jobs.c:1990
 #, c-format
 msgid "(core dumped) "
 msgstr "(imagem do núcleo gravada)"
 
-#: jobs.c:2020
+#: jobs.c:2009
 #, c-format
 msgid "  (wd: %s)"
 msgstr "  (wd: %s)"
 
-#: jobs.c:2259
+#: jobs.c:2250
 #, c-format
 msgid "child setpgid (%ld to %ld)"
 msgstr "`setpgid' filho (%ld para %ld)"
 
-#: jobs.c:2617 nojobs.c:664
+#: jobs.c:2608 nojobs.c:666
 #, c-format
 msgid "wait: pid %ld is not a child of this shell"
 msgstr "wait: o pid %ld não é um processo filho deste shell"
 
-#: jobs.c:2893
+#: jobs.c:2884
 #, c-format
 msgid "wait_for: No record of process %ld"
 msgstr "wait_for: Sem registro do processo %ld"
 
-#: jobs.c:3236
+#: jobs.c:3223
 #, c-format
 msgid "wait_for_job: job %d is stopped"
 msgstr "wait_for_job: trabalho %d está parado"
 
-#: jobs.c:3564
+#: jobs.c:3551
 #, c-format
 msgid "%s: no current jobs"
 msgstr "%s: nenhum trabalho atual"
 
-#: jobs.c:3571
+#: jobs.c:3558
 #, c-format
 msgid "%s: job has terminated"
 msgstr "%s: o trabalho terminou"
 
-#: jobs.c:3580
+#: jobs.c:3567
 #, c-format
 msgid "%s: job %d already in background"
 msgstr "%s: o trabalho %d já está em plano de fundo"
 
-#: jobs.c:3806
+#: jobs.c:3793
 msgid "waitchld: turning on WNOHANG to avoid indefinite block"
 msgstr "waitchld: ativando WNOHANG para evitar bloqueio indefinido"
 
-#: jobs.c:4320
+#: jobs.c:4307
 #, c-format
 msgid "%s: line %d: "
 msgstr "%s, linha %d: "
 
-#: jobs.c:4334 nojobs.c:919
+#: jobs.c:4321 nojobs.c:921
 #, c-format
 msgid " (core dumped)"
 msgstr " (imagem do núcleo gravada)"
 
-#: jobs.c:4346 jobs.c:4359
+#: jobs.c:4333 jobs.c:4346
 #, c-format
 msgid "(wd now: %s)\n"
 msgstr "(wd agora: %s)\n"
 
-#: jobs.c:4391
+#: jobs.c:4378
 msgid "initialize_job_control: getpgrp failed"
 msgstr "initialize_job_control: getpgrp falhou"
 
-#: jobs.c:4447
+#: jobs.c:4434
 msgid "initialize_job_control: no job control in background"
 msgstr "initialize_job_control: nenhum controle de trabalho em plano de fundo"
 
-#: jobs.c:4463
+#: jobs.c:4450
 msgid "initialize_job_control: line discipline"
 msgstr "initialize_job_control: disciplina da linha"
 
-#: jobs.c:4473
+#: jobs.c:4460
 msgid "initialize_job_control: setpgid"
 msgstr "initialize_job_control: setpgid"
 
-#: jobs.c:4494 jobs.c:4503
+#: jobs.c:4481 jobs.c:4490
 #, c-format
 msgid "cannot set terminal process group (%d)"
 msgstr "impossível definir grupo do processo do terminal (%d)"
 
-#: jobs.c:4508
+#: jobs.c:4495
 msgid "no job control in this shell"
 msgstr "nenhum controle de trabalho neste shell"
 
-#: lib/malloc/malloc.c:353
+#: lib/malloc/malloc.c:367
 #, c-format
 msgid "malloc: failed assertion: %s\n"
 msgstr "malloc: asserção falhou: %s\n"
 
-#: lib/malloc/malloc.c:369
+#: lib/malloc/malloc.c:383
 #, c-format
 msgid ""
 "\r\n"
@@ -1347,47 +1381,47 @@ msgstr ""
 "\r\n"
 "malloc: %s:%d: asserção remendada\r\n"
 
-#: lib/malloc/malloc.c:370 lib/malloc/malloc.c:933
+#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941
 msgid "unknown"
 msgstr "desconhecido"
 
-#: lib/malloc/malloc.c:882
+#: lib/malloc/malloc.c:892
 msgid "malloc: block on free list clobbered"
 msgstr "malloc: bloco socado em lista livre"
 
-#: lib/malloc/malloc.c:972
+#: lib/malloc/malloc.c:980
 msgid "free: called with already freed block argument"
 msgstr "free: chamado com argumento de bloco já liberado"
 
-#: lib/malloc/malloc.c:975
+#: lib/malloc/malloc.c:983
 msgid "free: called with unallocated block argument"
 msgstr "free: chamado com argumento de bloco não alocado"
 
-#: lib/malloc/malloc.c:994
+#: lib/malloc/malloc.c:1001
 msgid "free: underflow detected; mh_nbytes out of range"
 msgstr "free: esvaziamento de pilha detectado; mh_nbytes fora do limite"
 
-#: lib/malloc/malloc.c:1001
+#: lib/malloc/malloc.c:1007
 msgid "free: underflow detected; magic8 corrupted"
 msgstr "free: esvaziamento de pilha detectado; magic8 corrompido"
 
-#: lib/malloc/malloc.c:1009
+#: lib/malloc/malloc.c:1014
 msgid "free: start and end chunk sizes differ"
 msgstr "free: tamanhos de porções do início e do fim são diferentes"
 
-#: lib/malloc/malloc.c:1119
+#: lib/malloc/malloc.c:1176
 msgid "realloc: called with unallocated block argument"
 msgstr "realloc: chamado com argumento de bloco não alocado"
 
-#: lib/malloc/malloc.c:1134
+#: lib/malloc/malloc.c:1191
 msgid "realloc: underflow detected; mh_nbytes out of range"
 msgstr "realloc: esvaziamento de pilha detectado; mh_nbytes fora do limite"
 
-#: lib/malloc/malloc.c:1141
+#: lib/malloc/malloc.c:1197
 msgid "realloc: underflow detected; magic8 corrupted"
 msgstr "realloc: esvaziamento de pilha detectado; magic8 corrompido"
 
-#: lib/malloc/malloc.c:1150
+#: lib/malloc/malloc.c:1205
 msgid "realloc: start and end chunk sizes differ"
 msgstr "realloc: tamanhos de porções do início e do fim são diferentes"
 
@@ -1429,22 +1463,22 @@ msgstr "%s: especificação de caminho de rede inválida"
 msgid "network operations not supported"
 msgstr "sem suporte a operações de rede"
 
-#: locale.c:217
+#: locale.c:219
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s)"
 msgstr "setlocale: LC_ALL: impossível alterar locale (%s)"
 
-#: locale.c:219
+#: locale.c:221
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s): %s"
 msgstr "setlocale: LC_ALL: impossível alterar locale (%s): %s"
 
-#: locale.c:292
+#: locale.c:294
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s)"
 msgstr "setlocale: %s: impossível alterar locale (%s)"
 
-#: locale.c:294
+#: locale.c:296
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s): %s"
 msgstr "setlocale: %s: impossível alterar locale (%s): %s"
@@ -1462,136 +1496,140 @@ msgstr "Você tem mensagem nova de correio em $_"
 msgid "The mail in %s has been read\n"
 msgstr "As mensagens de correio em %s foram lidas\n"
 
-#: make_cmd.c:317
+#: make_cmd.c:314
 msgid "syntax error: arithmetic expression required"
 msgstr "erro de sintaxe: requer expressão aritmética"
 
-#: make_cmd.c:319
+#: make_cmd.c:316
 msgid "syntax error: `;' unexpected"
 msgstr "erro de sintaxe: `;' inesperado"
 
-#: make_cmd.c:320
+#: make_cmd.c:317
 #, c-format
 msgid "syntax error: `((%s))'"
 msgstr "erro de sintaxe: `((%s))'"
 
-#: make_cmd.c:572
+#: make_cmd.c:569
 #, c-format
 msgid "make_here_document: bad instruction type %d"
 msgstr "make_here_document: tipo da instrução incorreto %d"
 
-#: make_cmd.c:657
+#: make_cmd.c:668
 #, c-format
 msgid "here-document at line %d delimited by end-of-file (wanted `%s')"
-msgstr "here-document na linha %d delimitado pelo fim do arquivo (desejava `%s')"
+msgstr ""
+"here-document na linha %d delimitado pelo fim do arquivo (desejava `%s')"
 
-#: make_cmd.c:756
+#: make_cmd.c:769
 #, c-format
 msgid "make_redirection: redirection instruction `%d' out of range"
 msgstr "make_redirection: instrução de redirecionamento `%d' fora do limite"
 
-#: parse.y:2393
+#: parse.y:2428
 #, c-format
-msgid "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line truncated"
-msgstr "shell_getc: shell_input_line_size (%zu) excede SIZE_MAX (%lu): linha truncada"
+msgid ""
+"shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line "
+"truncated"
+msgstr ""
+"shell_getc: shell_input_line_size (%zu) excede SIZE_MAX (%lu): linha truncada"
 
-#: parse.y:2826
+#: parse.y:2921
 msgid "maximum here-document count exceeded"
 msgstr "excedido o número máximo de here-document"
 
-#: parse.y:3581 parse.y:3957 parse.y:4556
+#: parse.y:3684 parse.y:4244 parse.y:6148
 #, c-format
 msgid "unexpected EOF while looking for matching `%c'"
 msgstr "encontrado EOF inesperado enquanto procurava por `%c' correspondente"
 
-#: parse.y:4696
+#: parse.y:4452
 msgid "unexpected EOF while looking for `]]'"
 msgstr "encontrado EOF inesperado enquanto procurava por `]]'"
 
-#: parse.y:4701
+#: parse.y:4457
 #, c-format
 msgid "syntax error in conditional expression: unexpected token `%s'"
 msgstr "erro de sintaxe na expressão condicional: token inesperado `%s'"
 
-#: parse.y:4705
+#: parse.y:4461
 msgid "syntax error in conditional expression"
 msgstr "erro de sintaxe na expressão condicional"
 
-#: parse.y:4783
+#: parse.y:4539
 #, c-format
 msgid "unexpected token `%s', expected `)'"
 msgstr "token inesperado `%s', esperava`)'"
 
-#: parse.y:4787
+#: parse.y:4543
 msgid "expected `)'"
 msgstr "esperava `)'"
 
-#: parse.y:4815
+#: parse.y:4571
 #, c-format
 msgid "unexpected argument `%s' to conditional unary operator"
 msgstr "argumento inesperado `%s' para operador unário condicional"
 
-#: parse.y:4819
+#: parse.y:4575
 msgid "unexpected argument to conditional unary operator"
 msgstr "argumento inesperado para operador unário condicional"
 
-#: parse.y:4865
+#: parse.y:4621
 #, c-format
 msgid "unexpected token `%s', conditional binary operator expected"
 msgstr "token inesperado `%s', esperava operador binário condicional"
 
-#: parse.y:4869
+#: parse.y:4625
 msgid "conditional binary operator expected"
 msgstr "esperava operador binário condicional"
 
-#: parse.y:4891
+#: parse.y:4647
 #, c-format
 msgid "unexpected argument `%s' to conditional binary operator"
 msgstr "argumento inesperado `%s' para operador binário condicional"
 
-#: parse.y:4895
+#: parse.y:4651
 msgid "unexpected argument to conditional binary operator"
 msgstr "argumento inesperado para operador binário condicional"
 
-#: parse.y:4906
+#: parse.y:4662
 #, c-format
 msgid "unexpected token `%c' in conditional command"
 msgstr "token inesperado `%c' em comando condicional"
 
-#: parse.y:4909
+#: parse.y:4665
 #, c-format
 msgid "unexpected token `%s' in conditional command"
 msgstr "token inesperado `%s' em comando condicional"
 
-#: parse.y:4913
+#: parse.y:4669
 #, c-format
 msgid "unexpected token %d in conditional command"
 msgstr "token inesperado %d em comando condicional"
 
-#: parse.y:6336
+#: parse.y:6118
 #, c-format
 msgid "syntax error near unexpected token `%s'"
 msgstr "erro de sintaxe próximo ao token inesperado `%s'"
 
-#: parse.y:6355
+#: parse.y:6137
 #, c-format
 msgid "syntax error near `%s'"
 msgstr "erro de sintaxe próximo a `%s'"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error: unexpected end of file"
 msgstr "erro de sintaxe: fim prematuro do arquivo"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error"
 msgstr "erro de sintaxe"
 
-#: parse.y:6428
+#: parse.y:6216
 #, c-format
 msgid "Use \"%s\" to leave the shell.\n"
 msgstr "Use \"%s\" para sair do shell.\n"
 
-#: parse.y:6602
+#: parse.y:6394
 msgid "unexpected EOF while looking for matching `)'"
 msgstr "encontrado EOF inesperado enquanto procurava por `)' correspondente"
 
@@ -1630,94 +1668,94 @@ msgstr "xtrace_set: ponteiro de arquivo NULO"
 msgid "xtrace fd (%d) != fileno xtrace fp (%d)"
 msgstr "xtrace fd (%d) != fileno xtrace fp (%d)"
 
-#: print_cmd.c:1540
+#: print_cmd.c:1545
 #, c-format
 msgid "cprintf: `%c': invalid format character"
 msgstr "cprintf: `%c': caractere de formato inválido"
 
-#: redir.c:149 redir.c:197
+#: redir.c:150 redir.c:198
 msgid "file descriptor out of range"
 msgstr "descritor de arquivo fora dos limites"
 
-#: redir.c:204
+#: redir.c:205
 #, c-format
 msgid "%s: ambiguous redirect"
 msgstr "%s: redirecionamento ambíguo"
 
-#: redir.c:208
+#: redir.c:209
 #, c-format
 msgid "%s: cannot overwrite existing file"
 msgstr "%s: impossível sobrescrever arquivo existente"
 
-#: redir.c:213
+#: redir.c:214
 #, c-format
 msgid "%s: restricted: cannot redirect output"
 msgstr "%s: restrição: impossível redirecionar saída"
 
-#: redir.c:218
+#: redir.c:219
 #, c-format
 msgid "cannot create temp file for here-document: %s"
 msgstr "impossível criar arquivo temporário para here-document: %s"
 
-#: redir.c:222
+#: redir.c:223
 #, c-format
 msgid "%s: cannot assign fd to variable"
 msgstr "%s: impossível atribuir fd a variável"
 
-#: redir.c:649
+#: redir.c:650
 msgid "/dev/(tcp|udp)/host/port not supported without networking"
 msgstr "sem suporte a /dev/(tcp|udp)/máquina/porta sem rede"
 
-#: redir.c:938 redir.c:1053 redir.c:1114 redir.c:1284
+#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303
 msgid "redirection error: cannot duplicate fd"
 msgstr "erro de redirecionamento: impossível duplicar fd"
 
-#: shell.c:347
+#: shell.c:353
 msgid "could not find /tmp, please create!"
 msgstr "impossível localizar /tmp, por favor crie!"
 
-#: shell.c:351
+#: shell.c:357
 msgid "/tmp must be a valid directory name"
 msgstr "/tmp deve ser um nome de diretório válido"
 
-#: shell.c:804
+#: shell.c:826
 msgid "pretty-printing mode ignored in interactive shells"
 msgstr "modo de impressão bonita ignorada em shells interativos"
 
-#: shell.c:948
+#: shell.c:972
 #, c-format
 msgid "%c%c: invalid option"
 msgstr "%c%c: opção inválida"
 
-#: shell.c:1319
+#: shell.c:1343
 #, c-format
 msgid "cannot set uid to %d: effective uid %d"
 msgstr "impossível definir uid para %d: uid efetivo %d"
 
-#: shell.c:1330
+#: shell.c:1354
 #, c-format
 msgid "cannot set gid to %d: effective gid %d"
 msgstr "impossível definir gid para %d: gid efetivo %d"
 
-#: shell.c:1518
+#: shell.c:1544
 msgid "cannot start debugger; debugging mode disabled"
 msgstr "possível iniciar o depurador; modo de depuração desabilitado"
 
-#: shell.c:1632
+#: shell.c:1658
 #, c-format
 msgid "%s: Is a directory"
 msgstr "%s: É um diretório"
 
-#: shell.c:1881
+#: shell.c:1907
 msgid "I have no name!"
 msgstr "Eu não tenho nome!"
 
-#: shell.c:2035
+#: shell.c:2061
 #, c-format
 msgid "GNU bash, version %s-(%s)\n"
 msgstr "GNU bash, versão %s-(%s)\n"
 
-#: shell.c:2036
+#: shell.c:2062
 #, c-format
 msgid ""
 "Usage:\t%s [GNU long option] [option] ...\n"
@@ -1726,317 +1764,325 @@ msgstr ""
 "Utilização:\t%s [opção-longa-GNU] [opção] ...\n"
 "\t%s [opção-longa-GNU] [opção] arquivo-de-script ...\n"
 
-#: shell.c:2038
+#: shell.c:2064
 msgid "GNU long options:\n"
 msgstr "opções-longas-GNU:\n"
 
-#: shell.c:2042
+#: shell.c:2068
 msgid "Shell options:\n"
 msgstr "Opções do shell:\n"
 
-#: shell.c:2043
+#: shell.c:2069
 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n"
 msgstr "\t-ilrsD or -c comando ou -O opção-shopt\t\t(somente para chamada)\n"
 
-#: shell.c:2062
+#: shell.c:2088
 #, c-format
 msgid "\t-%s or -o option\n"
 msgstr "\t-%s ou -o opção\n"
 
-#: shell.c:2068
+#: shell.c:2094
 #, c-format
 msgid "Type `%s -c \"help set\"' for more information about shell options.\n"
-msgstr "Digite `%s -c \"help set\"' para mais informações sobre as opções do shell.\n"
+msgstr ""
+"Digite `%s -c \"help set\"' para mais informações sobre as opções do shell.\n"
 
-#: shell.c:2069
+#: shell.c:2095
 #, c-format
 msgid "Type `%s -c help' for more information about shell builtin commands.\n"
-msgstr "Digite `%s -c help' para mais informações sobre os comandos internos do shell.\n"
+msgstr ""
+"Digite `%s -c help' para mais informações sobre os comandos internos do "
+"shell.\n"
 
-#: shell.c:2070
+#: shell.c:2096
 #, c-format
 msgid "Use the `bashbug' command to report bugs.\n"
 msgstr "Uso o comando `bashbug' para relatar erros.\n"
 
-#: shell.c:2072
+#: shell.c:2098
 #, c-format
 msgid "bash home page: <http://www.gnu.org/software/bash>\n"
 msgstr "página do bash: <http://www.gnu.org/software/bash>\n"
 
-#: shell.c:2073
+#: shell.c:2099
 #, c-format
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 msgstr "Ajuda geral sobre uso de software GNU: <http://www.gnu.org/gethelp/>\n"
 
-#: sig.c:757
+#: sig.c:765
 #, c-format
 msgid "sigprocmask: %d: invalid operation"
 msgstr "sigprocmask: %d: operação inválida"
 
-#: siglist.c:47
+#: siglist.c:48
 msgid "Bogus signal"
 msgstr "Sinal falso"
 
-#: siglist.c:50
+#: siglist.c:51
 msgid "Hangup"
 msgstr "Hangup"
 
-#: siglist.c:54
+#: siglist.c:55
 msgid "Interrupt"
 msgstr "Interromper"
 
-#: siglist.c:58
+#: siglist.c:59
 msgid "Quit"
 msgstr "Sair"
 
-#: siglist.c:62
+#: siglist.c:63
 msgid "Illegal instruction"
 msgstr "Instrução ilegal"
 
-#: siglist.c:66
+#: siglist.c:67
 msgid "BPT trace/trap"
 msgstr "BPT Rastreamento/Captura (BPT trace/trap)"
 
-#: siglist.c:74
+#: siglist.c:75
 msgid "ABORT instruction"
 msgstr "Instrução ABORT"
 
-#: siglist.c:78
+#: siglist.c:79
 msgid "EMT instruction"
 msgstr "Instrução EMT"
 
-#: siglist.c:82
+#: siglist.c:83
 msgid "Floating point exception"
 msgstr "Exceção de ponto flutuante"
 
-#: siglist.c:86
+#: siglist.c:87
 msgid "Killed"
 msgstr "Morto (Killed)"
 
-#: siglist.c:90
+#: siglist.c:91
 msgid "Bus error"
 msgstr "Erro do barramento"
 
-#: siglist.c:94
+#: siglist.c:95
 msgid "Segmentation fault"
 msgstr "Falha de segmentação"
 
-#: siglist.c:98
+#: siglist.c:99
 msgid "Bad system call"
 msgstr "Chamada incorreta do sistema"
 
-#: siglist.c:102
+#: siglist.c:103
 msgid "Broken pipe"
 msgstr "`Pipe' partido (escrita sem leitura)"
 
-#: siglist.c:106
+#: siglist.c:107
 msgid "Alarm clock"
 msgstr "Relógio de alarme"
 
-#: siglist.c:110
+#: siglist.c:111
 msgid "Terminated"
 msgstr "Terminado"
 
-#: siglist.c:114
+#: siglist.c:115
 msgid "Urgent IO condition"
 msgstr "Condição urgente de Entrada/Saída"
 
-#: siglist.c:118
+#: siglist.c:119
 msgid "Stopped (signal)"
 msgstr "Parado (sinal)"
 
-#: siglist.c:126
+#: siglist.c:127
 msgid "Continue"
 msgstr "Continuar"
 
-#: siglist.c:134
+#: siglist.c:135
 msgid "Child death or stop"
 msgstr "Processo filho parado ou terminado"
 
-#: siglist.c:138
+#: siglist.c:139
 msgid "Stopped (tty input)"
 msgstr "Parado (entrada tty)"
 
-#: siglist.c:142
+#: siglist.c:143
 msgid "Stopped (tty output)"
 msgstr "Parado (saída tty)"
 
-#: siglist.c:146
+#: siglist.c:147
 msgid "I/O ready"
 msgstr "Entrada/Saída pronta"
 
-#: siglist.c:150
+#: siglist.c:151
 msgid "CPU limit"
 msgstr "Tempo limite de CPU excedido"
 
-#: siglist.c:154
+#: siglist.c:155
 msgid "File limit"
 msgstr "Tamanho limite do arquivo excedido"
 
-#: siglist.c:158
+#: siglist.c:159
 msgid "Alarm (virtual)"
 msgstr "Alarme (virtual)"
 
-#: siglist.c:162
+#: siglist.c:163
 msgid "Alarm (profile)"
 msgstr "Alarme (perfil)"
 
-#: siglist.c:166
+#: siglist.c:167
 msgid "Window changed"
 msgstr "Janela mudada"
 
-#: siglist.c:170
+#: siglist.c:171
 msgid "Record lock"
 msgstr "Registro bloqueado (lock)"
 
-#: siglist.c:174
+#: siglist.c:175
 msgid "User signal 1"
 msgstr "Sinal 1 definido pelo usuário"
 
-#: siglist.c:178
+#: siglist.c:179
 msgid "User signal 2"
 msgstr "Sinal 2 definido pelo usuário"
 
-#: siglist.c:182
+#: siglist.c:183
 msgid "HFT input data pending"
 msgstr "entrada de dados HFT pendente"
 
-#: siglist.c:186
+#: siglist.c:187
 msgid "power failure imminent"
 msgstr "falha iminente de energia"
 
-#: siglist.c:190
+#: siglist.c:191
 msgid "system crash imminent"
 msgstr "falha iminente do sistema"
 
-#: siglist.c:194
+#: siglist.c:195
 msgid "migrate process to another CPU"
 msgstr "migrar o processo para outra CPU"
 
-#: siglist.c:198
+#: siglist.c:199
 msgid "programming error"
 msgstr "erro de programação"
 
-#: siglist.c:202
+#: siglist.c:203
 msgid "HFT monitor mode granted"
 msgstr "modo monitor HFT autorizado"
 
-#: siglist.c:206
+#: siglist.c:207
 msgid "HFT monitor mode retracted"
 msgstr "modo monitor HFT rescindido"
 
-#: siglist.c:210
+#: siglist.c:211
 msgid "HFT sound sequence has completed"
 msgstr "a sequência de som HFT foi completada"
 
-#: siglist.c:214
+#: siglist.c:215
 msgid "Information request"
 msgstr "Requisição de informação"
 
-#: siglist.c:222 siglist.c:224
+#: siglist.c:223 siglist.c:225
 #, c-format
 msgid "Unknown Signal #%d"
 msgstr "Sinal desconhecido #%d"
 
-#: subst.c:1476 subst.c:1666
+#: subst.c:1480 subst.c:1670
 #, c-format
 msgid "bad substitution: no closing `%s' in %s"
 msgstr "substituição incorreta: sem `%s' de fechamento em %s"
 
-#: subst.c:3281
+#: subst.c:3307
 #, c-format
 msgid "%s: cannot assign list to array member"
 msgstr "%s: impossível atribuir uma lista a um membro de um array"
 
-#: subst.c:5910 subst.c:5926
+#: subst.c:6048 subst.c:6064
 msgid "cannot make pipe for process substitution"
 msgstr "impossível criar `pipe' para a substituição do processo"
 
-#: subst.c:5985
+#: subst.c:6124
 msgid "cannot make child for process substitution"
 msgstr "impossível criar um processo filho para a substituição do processo"
 
-#: subst.c:6059
+#: subst.c:6198
 #, c-format
 msgid "cannot open named pipe %s for reading"
 msgstr "impossível abrir `pipe' %s para leitura"
 
-#: subst.c:6061
+#: subst.c:6200
 #, c-format
 msgid "cannot open named pipe %s for writing"
 msgstr "impossível abrir `pipe' %s para escrita"
 
-#: subst.c:6084
+#: subst.c:6223
 #, c-format
 msgid "cannot duplicate named pipe %s as fd %d"
 msgstr "impossível duplicar `pipe' %s como descritor de arquivo (fd) %d"
 
-#: subst.c:6213
+#: subst.c:6370
 msgid "command substitution: ignored null byte in input"
 msgstr "substituição de comando: byte nulo ignorado na entrada"
 
-#: subst.c:6353
+#: subst.c:6533
 msgid "cannot make pipe for command substitution"
 msgstr "impossível criar um `pipe' para substituição do comando"
 
-#: subst.c:6397
+#: subst.c:6580
 msgid "cannot make child for command substitution"
 msgstr "impossível criar um processo filho para substituição do comando"
 
-#: subst.c:6423
+#: subst.c:6613
 msgid "command_substitute: cannot duplicate pipe as fd 1"
-msgstr "command_substitute: impossível duplicar o `pipe' como descritor de arquivo (fd) 1"
+msgstr ""
+"command_substitute: impossível duplicar o `pipe' como descritor de arquivo "
+"(fd) 1"
 
-#: subst.c:6883 subst.c:9952
+#: subst.c:7082 subst.c:10252
 #, c-format
 msgid "%s: invalid variable name for name reference"
 msgstr "%s: nome de variável inválido para referência de nome"
 
-#: subst.c:6979 subst.c:6997 subst.c:7169
+#: subst.c:7178 subst.c:7196 subst.c:7369
 #, c-format
 msgid "%s: invalid indirect expansion"
 msgstr "%s: expansão indireta inválida"
 
-#: subst.c:7013 subst.c:7177
+#: subst.c:7212 subst.c:7377
 #, c-format
 msgid "%s: invalid variable name"
 msgstr "%s: nome de variável inválido"
 
-#: subst.c:7256
+#: subst.c:7478
 #, c-format
 msgid "%s: parameter not set"
 msgstr "%s: parâmetro não inicializado"
 
-#: subst.c:7258
+#: subst.c:7480
 #, c-format
 msgid "%s: parameter null or not set"
 msgstr "%s: parâmetro nulo ou não inicializado"
 
-#: subst.c:7503 subst.c:7518
+#: subst.c:7727 subst.c:7742
 #, c-format
 msgid "%s: substring expression < 0"
 msgstr "%s: expressão de substring < 0"
 
-#: subst.c:9281 subst.c:9302
+#: subst.c:9560 subst.c:9587
 #, c-format
 msgid "%s: bad substitution"
 msgstr "%s: substituição incorreta"
 
-#: subst.c:9390
+#: subst.c:9678
 #, c-format
 msgid "$%s: cannot assign in this way"
 msgstr "$%s: impossível atribuir desta maneira"
 
-#: subst.c:9814
-msgid "future versions of the shell will force evaluation as an arithmetic substitution"
-msgstr "versões futuras do shell vão forçar avaliação como um substituto aritmético"
+#: subst.c:10111
+msgid ""
+"future versions of the shell will force evaluation as an arithmetic "
+"substitution"
+msgstr ""
+"versões futuras do shell vão forçar avaliação como um substituto aritmético"
 
-#: subst.c:10367
+#: subst.c:10795
 #, c-format
 msgid "bad substitution: no closing \"`\" in %s"
 msgstr "substituição incorreta: sem \"`\" de fechamento em %s"
 
-#: subst.c:11434
+#: subst.c:11874
 #, c-format
 msgid "no match: %s"
 msgstr "sem correspondência: %s"
@@ -2059,21 +2105,21 @@ msgstr "esperava `)'"
 msgid "`)' expected, found %s"
 msgstr "esperava `)', encontrado %s"
 
-#: test.c:466 test.c:799
+#: test.c:469 test.c:814
 #, c-format
 msgid "%s: binary operator expected"
 msgstr "%s: esperava operador binário"
 
-#: test.c:756 test.c:759
+#: test.c:771 test.c:774
 #, c-format
 msgid "%s: unary operator expected"
 msgstr "%s: esperava operador unário"
 
-#: test.c:881
+#: test.c:896
 msgid "missing `]'"
 msgstr "faltando `]'"
 
-#: test.c:899
+#: test.c:914
 #, c-format
 msgid "syntax error: `%s' unexpected"
 msgstr "erro de sintaxe: `%s' inesperado"
@@ -2082,105 +2128,120 @@ msgstr "erro de sintaxe: `%s' inesperado"
 msgid "invalid signal number"
 msgstr "número de sinal inválido"
 
-#: trap.c:325
+#: trap.c:323
 #, c-format
 msgid "trap handler: maximum trap handler level exceeded (%d)"
-msgstr "manipulador de trap: excedido o nível máximo de manipulador de captura (%d)"
+msgstr ""
+"manipulador de trap: excedido o nível máximo de manipulador de captura (%d)"
 
-#: trap.c:414
+#: trap.c:412
 #, c-format
 msgid "run_pending_traps: bad value in trap_list[%d]: %p"
 msgstr "run_pending_traps: valor incorreto em trap_list[%d]: %p"
 
-#: trap.c:418
+#: trap.c:416
 #, c-format
-msgid "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
-msgstr "run_pending_traps: manipulador de sinal é SIG_DFL, enviando novamente %d (%s) para mim mesmo"
+msgid ""
+"run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
+msgstr ""
+"run_pending_traps: manipulador de sinal é SIG_DFL, enviando novamente %d "
+"(%s) para mim mesmo"
 
-#: trap.c:487
+#: trap.c:509
 #, c-format
 msgid "trap_handler: bad signal %d"
 msgstr "trap_handler: sinal incorreto %d"
 
-#: variables.c:421
+#: variables.c:424
 #, c-format
 msgid "error importing function definition for `%s'"
 msgstr "erro ao importar a definição da função para `%s'"
 
-#: variables.c:833
+#: variables.c:838
 #, c-format
 msgid "shell level (%d) too high, resetting to 1"
 msgstr "nível do shell (%d) muito grande, redefinindo para 1"
 
-#: variables.c:2674
+#: variables.c:2642
 msgid "make_local_variable: no function context at current scope"
 msgstr "make_local_variable: nenhum contexto de função no atual escopo"
 
-#: variables.c:2693
+#: variables.c:2661
 #, c-format
 msgid "%s: variable may not be assigned value"
 msgstr "%s: a variável pode não ter um valor atribuído"
 
-#: variables.c:3475
+#: variables.c:2818 variables.c:2874
+#, c-format
+msgid "%s: cannot inherit value from incompatible type"
+msgstr ""
+
+#: variables.c:3459
 #, c-format
 msgid "%s: assigning integer to name reference"
 msgstr "%s: atribuindo inteiro para referência de nome"
 
-#: variables.c:4404
+#: variables.c:4390
 msgid "all_local_variables: no function context at current scope"
 msgstr "all_local_variables: nenhum contexto de função no escopo atual"
 
-#: variables.c:4771
+#: variables.c:4757
 #, c-format
 msgid "%s has null exportstr"
 msgstr "%s possui a string de exportação nula"
 
 # exportstr é uma variável no código fonte do bash (arquivo variiables.c)
-#: variables.c:4776 variables.c:4785
+#: variables.c:4762 variables.c:4771
 #, c-format
 msgid "invalid character %d in exportstr for %s"
 msgstr "caractere inválido na %d na exportstr para %s"
 
 # exportstr é uma variável no código fonte do bash (arquivo variiables.c)
-#: variables.c:4791
+#: variables.c:4777
 #, c-format
 msgid "no `=' in exportstr for %s"
 msgstr "Sem `=' na exportstr para %s"
 
-#: variables.c:5331
+#: variables.c:5317
 msgid "pop_var_context: head of shell_variables not a function context"
 msgstr "pop_var_context: cabeça de shell_variables não é um contexto de função"
 
-#: variables.c:5344
+#: variables.c:5330
 msgid "pop_var_context: no global_variables context"
 msgstr "pop_var_context: nenhum contexto em no global_variables"
 
-#: variables.c:5424
+#: variables.c:5410
 msgid "pop_scope: head of shell_variables not a temporary environment scope"
-msgstr "pop_scope: cabeça de shell_variables não é um escopo de ambiente temporário"
+msgstr ""
+"pop_scope: cabeça de shell_variables não é um escopo de ambiente temporário"
 
-#: variables.c:6387
+#: variables.c:6400
 #, c-format
 msgid "%s: %s: cannot open as FILE"
 msgstr "%s: %s: impossível abrir como ARQUIVO"
 
-#: variables.c:6392
+#: variables.c:6405
 #, c-format
 msgid "%s: %s: invalid value for trace file descriptor"
 msgstr "%s: %s: valor inválido para rastrear descritor de arquivo"
 
-#: variables.c:6437
+#: variables.c:6450
 #, c-format
 msgid "%s: %s: compatibility value out of range"
 msgstr "%s: %s: valor de compatibilidade fora dos limites"
 
 #: version.c:46 version2.c:46
-msgid "Copyright (C) 2020 Free Software Foundation, Inc."
+#, fuzzy
+msgid "Copyright (C) 2022 Free Software Foundation, Inc."
 msgstr "Copyright (C) 2020 Free Software Foundation, Inc."
 
 #: version.c:47 version2.c:47
-msgid "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n"
-msgstr "Licença GPLv3+: GNU GPL versão 3 ou posterior <http://gnu.org/licenses/gpl.html>.\n"
+msgid ""
+"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
+"html>\n"
+msgstr ""
+"Licença GPLv3+: GNU GPL versão 3 ou posterior <http://gnu.org/licenses/gpl."
+"html>.\n"
 
 #: version.c:86 version2.c:86
 #, c-format
@@ -2224,8 +2285,13 @@ msgid "unalias [-a] name [name ...]"
 msgstr "unalias [-a] nome [nome ...]"
 
 #: builtins.c:53
-msgid "bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-x keyseq:shell-command] [keyseq:readline-function or readline-command]"
-msgstr "bind [-lpsvPSVX] [-m mapa-teclas] [-f arquivo] [-q nome] [-u nome] [-r seq-teclas]  [-x seq-teclas:comando-shell] [seq-teclas:função-de-readline ou comando-readline]"
+msgid ""
+"bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-"
+"x keyseq:shell-command] [keyseq:readline-function or readline-command]"
+msgstr ""
+"bind [-lpsvPSVX] [-m mapa-teclas] [-f arquivo] [-q nome] [-u nome] [-r seq-"
+"teclas]  [-x seq-teclas:comando-shell] [seq-teclas:função-de-readline ou "
+"comando-readline]"
 
 #: builtins.c:56
 msgid "break [n]"
@@ -2256,11 +2322,17 @@ msgid "command [-pVv] command [arg ...]"
 msgstr "command [-pVv] COMANDO [ARG ...]"
 
 #: builtins.c:78
-msgid "declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]"
+#, fuzzy
+msgid ""
+"declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] "
+"[name ...]"
 msgstr "declare [-aAfFgiIlnrtux] [-p] [nome[=valor] ...]"
 
 #: builtins.c:80
-msgid "typeset [-aAfFgiIlnrtux] [-p] name[=value] ..."
+#, fuzzy
+msgid ""
+"typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] "
+"[name ...]"
 msgstr "typeset [-aAfFgiIlnrtux] [-p] nome[=valor] ..."
 
 #: builtins.c:82
@@ -2301,7 +2373,8 @@ msgstr "logout [n]"
 
 #: builtins.c:105
 msgid "fc [-e ename] [-lnr] [first] [last] or fc -s [pat=rep] [command]"
-msgstr "fc [-e EDITOR] [-lnr] [PRIMEIRO] [ÚLTIMO] ou fc -s [ANTIGO=NOVO] [COMANDO]"
+msgstr ""
+"fc [-e EDITOR] [-lnr] [PRIMEIRO] [ÚLTIMO] ou fc -s [ANTIGO=NOVO] [COMANDO]"
 
 #: builtins.c:109
 msgid "fg [job_spec]"
@@ -2320,8 +2393,12 @@ msgid "help [-dms] [pattern ...]"
 msgstr "help [-dms] [PADRÃO ...]"
 
 #: builtins.c:123
-msgid "history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg...]"
-msgstr "history [-c] [-d POSIÇÃO] [n] ou history -anrw [ARQUIVO] ou history -ps ARG [ARG...]"
+msgid ""
+"history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg "
+"[arg...]"
+msgstr ""
+"history [-c] [-d POSIÇÃO] [n] ou history -anrw [ARQUIVO] ou history -ps ARG "
+"[ARG...]"
 
 #: builtins.c:127
 msgid "jobs [-lnprs] [jobspec ...] or jobs -x command [args]"
@@ -2332,23 +2409,32 @@ msgid "disown [-h] [-ar] [jobspec ... | pid ...]"
 msgstr "disown [-h] [-ar] [ESPEC-JOB ... | pid ...]"
 
 #: builtins.c:134
-msgid "kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]"
-msgstr "kill [-s SIGSPEC | -n SIGNUM | -SIGSPEC] PID | ESPEC-JOB ... ou kill -l [SIGSPEC]"
+msgid ""
+"kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l "
+"[sigspec]"
+msgstr ""
+"kill [-s SIGSPEC | -n SIGNUM | -SIGSPEC] PID | ESPEC-JOB ... ou kill -l "
+"[SIGSPEC]"
 
 #: builtins.c:136
 msgid "let arg [arg ...]"
 msgstr "let ARG [ARG ...]"
 
 #: builtins.c:138
-msgid "read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]"
-msgstr "read [-ers] [-a ARRAY] [-d DELIM] [-i TEXTO] [-n NCHARS] [-N NCHARS] [-p CONFIRMAR ] [-t TEMPO] [-u FD] [NOME ...]"
+msgid ""
+"read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p "
+"prompt] [-t timeout] [-u fd] [name ...]"
+msgstr ""
+"read [-ers] [-a ARRAY] [-d DELIM] [-i TEXTO] [-n NCHARS] [-N NCHARS] [-p "
+"CONFIRMAR ] [-t TEMPO] [-u FD] [NOME ...]"
 
 #: builtins.c:140
 msgid "return [n]"
 msgstr "return [n]"
 
 #: builtins.c:142
-msgid "set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]"
+#, fuzzy
+msgid "set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]"
 msgstr "set [--abefhkmnptuvxBCHP] [-o NOME-OPÇÃO] [--] [ARG ...]"
 
 #: builtins.c:144
@@ -2396,7 +2482,8 @@ msgid "type [-afptP] name [name ...]"
 msgstr "type [-apt] nome [nome ...]"
 
 #: builtins.c:171
-msgid "ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]"
+#, fuzzy
+msgid "ulimit [-SHabcdefiklmnpqrstuvxPRT] [limit]"
 msgstr "ulimit [-SHabcdefiklmnpqrstuvxPT] [limite]"
 
 #: builtins.c:174
@@ -2432,15 +2519,21 @@ msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac"
 msgstr "case PALAVRA in [PADRÃO [| PADRÃO]...) COMANDOS ;;]... esac"
 
 #: builtins.c:194
-msgid "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi"
-msgstr "if COMANDOS; then COMANDOS; [ elif COMANDOS; then COMANDOS; ]... [ else COMANDOS; ] fi"
+msgid ""
+"if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else "
+"COMMANDS; ] fi"
+msgstr ""
+"if COMANDOS; then COMANDOS; [ elif COMANDOS; then COMANDOS; ]... [ else "
+"COMANDOS; ] fi"
 
 #: builtins.c:196
-msgid "while COMMANDS; do COMMANDS; done"
+#, fuzzy
+msgid "while COMMANDS; do COMMANDS-2; done"
 msgstr "while COMANDOS; do COMANDOS; done"
 
 #: builtins.c:198
-msgid "until COMMANDS; do COMMANDS; done"
+#, fuzzy
+msgid "until COMMANDS; do COMMANDS-2; done"
 msgstr "until COMANDOS; do COMANDOS; done"
 
 #: builtins.c:200
@@ -2493,24 +2586,43 @@ msgid "printf [-v var] format [arguments]"
 msgstr "printf [-v var] formato [argumentos]"
 
 #: builtins.c:231
-msgid "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [name ...]"
-msgstr "complete [-abcdefgjksuv] [-pr] [-DEI] [-o opção] [-A ação] [-G global] [-W lista-palavras]  [-F função] [-C comando] [-X filtro] [-P prefixo] [-S sufixo] [nome ...]"
+msgid ""
+"complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-"
+"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S "
+"suffix] [name ...]"
+msgstr ""
+"complete [-abcdefgjksuv] [-pr] [-DEI] [-o opção] [-A ação] [-G global] [-W "
+"lista-palavras]  [-F função] [-C comando] [-X filtro] [-P prefixo] [-S "
+"sufixo] [nome ...]"
 
 #: builtins.c:235
-msgid "compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]"
-msgstr "compgen [-abcdefgjksuv] [-o opção] [-A ação] [-G global] [-W lista-palavras]  [-F função] [-C comando] [-X filtro] [-P prefixo] [-S sufixo] [palavra]"
+msgid ""
+"compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-"
+"F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]"
+msgstr ""
+"compgen [-abcdefgjksuv] [-o opção] [-A ação] [-G global] [-W lista-"
+"palavras]  [-F função] [-C comando] [-X filtro] [-P prefixo] [-S sufixo] "
+"[palavra]"
 
 #: builtins.c:239
 msgid "compopt [-o|+o option] [-DEI] [name ...]"
 msgstr "compopt [-o|+o opção] [-DEI] [nome ...]"
 
 #: builtins.c:242
-msgid "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]"
-msgstr "mapfile [-d delim] [-n número] [-O origem] [-s número] [-t] [-u fd] [-C chamada] [-c quantidade] [array]"
+msgid ""
+"mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C "
+"callback] [-c quantum] [array]"
+msgstr ""
+"mapfile [-d delim] [-n número] [-O origem] [-s número] [-t] [-u fd] [-C "
+"chamada] [-c quantidade] [array]"
 
 #: builtins.c:244
-msgid "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]"
-msgstr "readarray [-d delim] [-n número] [-O origem] [-s número] [-t] [-u fd] [-C chamada] [-c quantidade] [array]"
+msgid ""
+"readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C "
+"callback] [-c quantum] [array]"
+msgstr ""
+"readarray [-d delim] [-n número] [-O origem] [-s número] [-t] [-u fd] [-C "
+"chamada] [-c quantidade] [array]"
 
 # help alias
 #: builtins.c:256
@@ -2528,7 +2640,8 @@ msgid ""
 "      -p\tprint all defined aliases in a reusable format\n"
 "    \n"
 "    Exit Status:\n"
-"    alias returns true unless a NAME is supplied for which no alias has been\n"
+"    alias returns true unless a NAME is supplied for which no alias has "
+"been\n"
 "    defined."
 msgstr ""
 "Define ou exibe apelidos (aliases).\n"
@@ -2577,25 +2690,30 @@ msgid ""
 "    Options:\n"
 "      -m  keymap         Use KEYMAP as the keymap for the duration of this\n"
 "                         command.  Acceptable keymap names are emacs,\n"
-"                         emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,\n"
+"                         emacs-standard, emacs-meta, emacs-ctlx, vi, vi-"
+"move,\n"
 "                         vi-command, and vi-insert.\n"
 "      -l                 List names of functions.\n"
 "      -P                 List function names and bindings.\n"
 "      -p                 List functions and bindings in a form that can be\n"
 "                         reused as input.\n"
-"      -S                 List key sequences that invoke macros and their values\n"
-"      -s                 List key sequences that invoke macros and their values\n"
+"      -S                 List key sequences that invoke macros and their "
+"values\n"
+"      -s                 List key sequences that invoke macros and their "
+"values\n"
 "                         in a form that can be reused as input.\n"
 "      -V                 List variable names and values\n"
 "      -v                 List variable names and values in a form that can\n"
 "                         be reused as input.\n"
 "      -q  function-name  Query about which keys invoke the named function.\n"
-"      -u  function-name  Unbind all keys which are bound to the named function.\n"
+"      -u  function-name  Unbind all keys which are bound to the named "
+"function.\n"
 "      -r  keyseq         Remove the binding for KEYSEQ.\n"
 "      -f  filename       Read key bindings from FILENAME.\n"
 "      -x  keyseq:shell-command\tCause SHELL-COMMAND to be executed when\n"
 "    \t\t\t\tKEYSEQ is entered.\n"
-"      -X                 List key sequences bound with -x and associated commands\n"
+"      -X                 List key sequences bound with -x and associated "
+"commands\n"
 "                         in a form that can be reused as input.\n"
 "    \n"
 "    Exit Status:\n"
@@ -2615,24 +2733,33 @@ msgstr ""
 "                         vi, vi-move, vi-command e vi-insert.\n"
 "      -l                 Lista nomes de funções.\n"
 "      -P                 Lista nomes e associações de função.\n"
-"      -p                 Lista funções e associações em uma forma que pode ser\n"
+"      -p                 Lista funções e associações em uma forma que pode "
+"ser\n"
 "                         usada como entrada.\n"
-"      -S                 Lista sequências de teclas que chamam macros e seus\n"
+"      -S                 Lista sequências de teclas que chamam macros e "
+"seus\n"
 "                         valores\n"
-"      -s                 Lista sequências de teclas que chamam macros e seus\n"
-"                         valores em uma forma que pode ser usada como entrada.\n"
+"      -s                 Lista sequências de teclas que chamam macros e "
+"seus\n"
+"                         valores em uma forma que pode ser usada como "
+"entrada.\n"
 "      -V                 Lista nomes e valores de variáveis\n"
-"      -v                 Lista nomes e valores de variáveis em uma forma que\n"
+"      -v                 Lista nomes e valores de variáveis em uma forma "
+"que\n"
 "                         pode ser usada como entrada.\n"
-"      -q  nome-função    Consulta sobre quais teclas chamam a função informada.\n"
-"      -u  nome-função    Desassocia todas teclas que estão associadas à função\n"
+"      -q  nome-função    Consulta sobre quais teclas chamam a função "
+"informada.\n"
+"      -u  nome-função    Desassocia todas teclas que estão associadas à "
+"função\n"
 "                         informada.\n"
 "      -r  seq-teclas     Remove a associação para SEQ-TECLAS.\n"
 "      -f  arquivo        Lê associações de tecla de ARQUIVO.\n"
 "      -x  seq-teclas:comando-shell\n"
-"                         Faz com que COMANDO-SHELL seja executado ao inserir\n"
+"                         Faz com que COMANDO-SHELL seja executado ao "
+"inserir\n"
 "                         SEQ-TECLAS.\n"
-"      -X                 Lista sequência de teclas associadas com -x e comandos\n"
+"      -X                 Lista sequência de teclas associadas com -x e "
+"comandos\n"
 "                         associados em uma forma que pode ser usada como\n"
 "                         entrada.\n"
 "    \n"
@@ -2686,7 +2813,8 @@ msgid ""
 "    \n"
 "    Execute SHELL-BUILTIN with arguments ARGs without performing command\n"
 "    lookup.  This is useful when you wish to reimplement a shell builtin\n"
-"    as a shell function, but need to execute the builtin within the function.\n"
+"    as a shell function, but need to execute the builtin within the "
+"function.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the exit status of SHELL-BUILTIN, or false if SHELL-BUILTIN is\n"
@@ -2722,7 +2850,8 @@ msgstr ""
 "Retorna o contexto da chamada de sub-rotina atual.\n"
 "    \n"
 "    Sem EXPR, retorna \"$linha $arquivo\".  Com EXPR, retorna\n"
-"    \"$linha $sub-rotina $arquivo\"; essa informação extra pode ser usada para\n"
+"    \"$linha $sub-rotina $arquivo\"; essa informação extra pode ser usada "
+"para\n"
 "    fornecer um rastro da pilha.\n"
 "    \n"
 "    O valor de EXPR indica quantos quadros de chamada deve voltar antes do\n"
@@ -2737,16 +2866,22 @@ msgstr ""
 msgid ""
 "Change the shell working directory.\n"
 "    \n"
-"    Change the current directory to DIR.  The default DIR is the value of the\n"
+"    Change the current directory to DIR.  The default DIR is the value of "
+"the\n"
 "    HOME shell variable.\n"
 "    \n"
-"    The variable CDPATH defines the search path for the directory containing\n"
-"    DIR.  Alternative directory names in CDPATH are separated by a colon (:).\n"
-"    A null directory name is the same as the current directory.  If DIR begins\n"
+"    The variable CDPATH defines the search path for the directory "
+"containing\n"
+"    DIR.  Alternative directory names in CDPATH are separated by a colon "
+"(:).\n"
+"    A null directory name is the same as the current directory.  If DIR "
+"begins\n"
 "    with a slash (/), then CDPATH is not used.\n"
 "    \n"
-"    If the directory is not found, and the shell option `cdable_vars' is set,\n"
-"    the word is assumed to be  a variable name.  If that variable has a value,\n"
+"    If the directory is not found, and the shell option `cdable_vars' is "
+"set,\n"
+"    the word is assumed to be  a variable name.  If that variable has a "
+"value,\n"
 "    its value is used for DIR.\n"
 "    \n"
 "    Options:\n"
@@ -2762,11 +2897,13 @@ msgid ""
 "    \t\tattributes as a directory containing the file attributes\n"
 "    \n"
 "    The default is to follow symbolic links, as if `-L' were specified.\n"
-"    `..' is processed by removing the immediately previous pathname component\n"
+"    `..' is processed by removing the immediately previous pathname "
+"component\n"
 "    back to a slash or the beginning of DIR.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns 0 if the directory is changed, and if $PWD is set successfully when\n"
+"    Returns 0 if the directory is changed, and if $PWD is set successfully "
+"when\n"
 "    -P is used; non-zero otherwise."
 msgstr ""
 "Altera o diretório de trabalho do shell.\n"
@@ -2774,17 +2911,20 @@ msgstr ""
 "    Altera o diretório atual para DIR, sendo o padrão de DIR o mesmo valor\n"
 "    da variável HOME.\n"
 "    \n"
-"    A variável CDPATH define o caminho de pesquisa para o diretório contendo\n"
+"    A variável CDPATH define o caminho de pesquisa para o diretório "
+"contendo\n"
 "    DIR. Nomes de diretórios alternativos em CDPATH são separados por\n"
 "    dois-pontos (:). Um nome de diretório nulo é o mesmo que o diretório\n"
 "    atual. Se DIR inicia com uma barra (/), então CDPATH não é usada.\n"
 "    \n"
-"    Se o diretório não for encontrado e a opção `cdable_vars` estiver definida\n"
+"    Se o diretório não for encontrado e a opção `cdable_vars` estiver "
+"definida\n"
 "    no shell, a palavra é presumida como sendo o nome de uma variável. Se\n"
 "    tal variável possuir um valor, este valor é usado para DIR.\n"
 "    \n"
 "    Opções:\n"
-"      -L\tforça links simbólicos a serem seguidos: resolver links simbólicos\n"
+"      -L\tforça links simbólicos a serem seguidos: resolver links "
+"simbólicos\n"
 "      \t\tem DIR após processar instâncias de `..'\n"
 "      -P\tusa a estrutura do diretório físico sem seguir links\n"
 "    \t\tsimbólicos: resolve links simbólicos em DIR antes de processar\n"
@@ -2795,12 +2935,15 @@ msgstr ""
 "    \t\tatributos estendidos como um diretório contendo os atributos de\n"
 "    \t\tarquivo\n"
 "    \n"
-"    O padrão é seguir links simbólicos, como se `-L' tivesse sido especificada.\n"
-"    `..' é processada removendo o componente de caminho imediatamente anterior\n"
+"    O padrão é seguir links simbólicos, como se `-L' tivesse sido "
+"especificada.\n"
+"    `..' é processada removendo o componente de caminho imediatamente "
+"anterior\n"
 "    de volta para uma barra ou para o início de DIR.\n"
 "    \n"
 "    Status de saída:\n"
-"    Retorna 0, se o diretório tiver sido alterado e se $PWD está definida com\n"
+"    Retorna 0, se o diretório tiver sido alterado e se $PWD está definida "
+"com\n"
 "    sucesso quando a opção -P for usada; do contrário, retorna não-zero."
 
 # help pwd
@@ -2881,7 +3024,8 @@ msgid ""
 "Execute a simple command or display information about commands.\n"
 "    \n"
 "    Runs COMMAND with ARGS suppressing  shell function lookup, or display\n"
-"    information about the specified COMMANDs.  Can be used to invoke commands\n"
+"    information about the specified COMMANDs.  Can be used to invoke "
+"commands\n"
 "    on disk when a function with the same name exists.\n"
 "    \n"
 "    Options:\n"
@@ -2943,7 +3087,8 @@ msgid ""
 "    Variables with the integer attribute have arithmetic evaluation (see\n"
 "    the `let' command) performed when the variable is assigned a value.\n"
 "    \n"
-"    When used in a function, `declare' makes NAMEs local, as with the `local'\n"
+"    When used in a function, `declare' makes NAMEs local, as with the "
+"`local'\n"
 "    command.  The `-g' option suppresses this behavior.\n"
 "    \n"
 "    Exit Status:\n"
@@ -2952,7 +3097,8 @@ msgid ""
 msgstr ""
 "Define valores e atributos de variável.\n"
 "    \n"
-"    Declara variáveis e a elas fornece atributos. Se nenhum NOME for fornecido,\n"
+"    Declara variáveis e a elas fornece atributos. Se nenhum NOME for "
+"fornecido,\n"
 "    exibe os atributos e valores de todas as variáveis.\n"
 "    \n"
 "    Opções:\n"
@@ -2967,11 +3113,13 @@ msgstr ""
 "      -a\tpara fazer NOMEs serem arrrays indexados (se houver suporte)\n"
 "      -A\tpara fazer NOMEs serem arrrays associativos (se houver suporte)\n"
 "      -i\tpara fazer NOMEs terem o atributo `integer'\n"
-"      -l\tpara converter o valor de cada NOME para minúsculo em sua atribuição\n"
+"      -l\tpara converter o valor de cada NOME para minúsculo em sua "
+"atribuição\n"
 "      -n\tfazer de NOME uma referência à variável chamada por seu valor\n"
 "      -r\tpara fazer de NOMEs somente leitura\n"
 "      -t\tpara fazer NOMEs terem o atributo `trace'\n"
-"      -u\tpara converter o valor de cada NOME para maiúsculo em sua atribuição\n"
+"      -u\tpara converter o valor de cada NOME para maiúsculo em sua "
+"atribuição\n"
 "      -x\tpra fazer NOMEs exportar\n"
 "    \n"
 "    Usar `+' ao invés de `-' desliga o atributo dado.\n"
@@ -3016,7 +3164,8 @@ msgstr ""
 "    Cria uma variável local chamada NOME e lhe dá VALOR. OPÇÃO pode ser\n"
 "    qualquer opção aceita pelo `declare'.\n"
 "    \n"
-"    Variáveis locais podem ser usadas apenas em uma função; elas são visíveis\n"
+"    Variáveis locais podem ser usadas apenas em uma função; elas são "
+"visíveis\n"
 "    apenas para a função na qual elas foram definidas, bem como para seus\n"
 "    filhos.\n"
 "    \n"
@@ -3030,7 +3179,8 @@ msgstr ""
 msgid ""
 "Write arguments to the standard output.\n"
 "    \n"
-"    Display the ARGs, separated by a single space character and followed by a\n"
+"    Display the ARGs, separated by a single space character and followed by "
+"a\n"
 "    newline, on the standard output.\n"
 "    \n"
 "    Options:\n"
@@ -3054,9 +3204,11 @@ msgid ""
 "    \t\t0 to 3 octal digits\n"
 "      \\xHH\tthe eight-bit character whose value is HH (hexadecimal).  HH\n"
 "    \t\tcan be one or two hex digits\n"
-"      \\uHHHH\tthe Unicode character whose value is the hexadecimal value HHHH.\n"
+"      \\uHHHH\tthe Unicode character whose value is the hexadecimal value "
+"HHHH.\n"
 "    \t\tHHHH can be one to four hex digits.\n"
-"      \\UHHHHHHHH the Unicode character whose value is the hexadecimal value\n"
+"      \\UHHHHHHHH the Unicode character whose value is the hexadecimal "
+"value\n"
 "    \t\tHHHHHHHH. HHHHHHHH can be one to eight hex digits.\n"
 "    \n"
 "    Exit Status:\n"
@@ -3178,7 +3330,8 @@ msgstr ""
 msgid ""
 "Execute arguments as a shell command.\n"
 "    \n"
-"    Combine ARGs into a single string, use the result as input to the shell,\n"
+"    Combine ARGs into a single string, use the result as input to the "
+"shell,\n"
 "    and execute the resulting commands.\n"
 "    \n"
 "    Exit Status:\n"
@@ -3279,7 +3432,8 @@ msgid ""
 "Replace the shell with the given command.\n"
 "    \n"
 "    Execute COMMAND, replacing this shell with the specified program.\n"
-"    ARGUMENTS become the arguments to COMMAND.  If COMMAND is not specified,\n"
+"    ARGUMENTS become the arguments to COMMAND.  If COMMAND is not "
+"specified,\n"
 "    any redirections take effect in the current shell.\n"
 "    \n"
 "    Options:\n"
@@ -3287,11 +3441,13 @@ msgid ""
 "      -c\texecute COMMAND with an empty environment\n"
 "      -l\tplace a dash in the zeroth argument to COMMAND\n"
 "    \n"
-"    If the command cannot be executed, a non-interactive shell exits, unless\n"
+"    If the command cannot be executed, a non-interactive shell exits, "
+"unless\n"
 "    the shell option `execfail' is set.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success unless COMMAND is not found or a redirection error occurs."
+"    Returns success unless COMMAND is not found or a redirection error "
+"occurs."
 msgstr ""
 "Substitui o shell com o comando fornecido.\n"
 "    \n"
@@ -3330,7 +3486,8 @@ msgstr ""
 msgid ""
 "Exit a login shell.\n"
 "    \n"
-"    Exits a login shell with exit status N.  Returns an error if not executed\n"
+"    Exits a login shell with exit status N.  Returns an error if not "
+"executed\n"
 "    in a login shell."
 msgstr ""
 "Sai de um shell de login.\n"
@@ -3343,13 +3500,15 @@ msgstr ""
 msgid ""
 "Display or execute commands from the history list.\n"
 "    \n"
-"    fc is used to list or edit and re-execute commands from the history list.\n"
+"    fc is used to list or edit and re-execute commands from the history "
+"list.\n"
 "    FIRST and LAST can be numbers specifying the range, or FIRST can be a\n"
 "    string, which means the most recent command beginning with that\n"
 "    string.\n"
 "    \n"
 "    Options:\n"
-"      -e ENAME\tselect which editor to use.  Default is FCEDIT, then EDITOR,\n"
+"      -e ENAME\tselect which editor to use.  Default is FCEDIT, then "
+"EDITOR,\n"
 "    \t\tthen vi\n"
 "      -l \tlist lines instead of editing\n"
 "      -n\tomit line numbers when listing\n"
@@ -3363,12 +3522,14 @@ msgid ""
 "    the last command.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success or status of executed command; non-zero if an error occurs."
+"    Returns success or status of executed command; non-zero if an error "
+"occurs."
 msgstr ""
 "Exibe ou executa comandos da lista do histórico.\n"
 "    \n"
 "    fc é usado para listar ou editar e re-executar comandos da lista de\n"
-"    histórico. PRIMEIRO e ÚLTIMO podem ser números especificando o intervalo\n"
+"    histórico. PRIMEIRO e ÚLTIMO podem ser números especificando o "
+"intervalo\n"
 "    ou PRIMEIRO pode ser uma string, o que significa o comando mais recente\n"
 "    iniciando com aquela string.\n"
 "    \n"
@@ -3409,15 +3570,18 @@ msgstr ""
 "    a noção do shell de trabalho atual é usada.\n"
 "    \n"
 "    Status de saída:\n"
-"    Status do comando colocado em primeiro plano ou falha, se ocorrer um erro."
+"    Status do comando colocado em primeiro plano ou falha, se ocorrer um "
+"erro."
 
 # help bg
 #: builtins.c:779
 msgid ""
 "Move jobs to the background.\n"
 "    \n"
-"    Place the jobs identified by each JOB_SPEC in the background, as if they\n"
-"    had been started with `&'.  If JOB_SPEC is not present, the shell's notion\n"
+"    Place the jobs identified by each JOB_SPEC in the background, as if "
+"they\n"
+"    had been started with `&'.  If JOB_SPEC is not present, the shell's "
+"notion\n"
 "    of the current job is used.\n"
 "    \n"
 "    Exit Status:\n"
@@ -3439,7 +3603,8 @@ msgid ""
 "Remember or display program locations.\n"
 "    \n"
 "    Determine and remember the full pathname of each command NAME.  If\n"
-"    no arguments are given, information about remembered commands is displayed.\n"
+"    no arguments are given, information about remembered commands is "
+"displayed.\n"
 "    \n"
 "    Options:\n"
 "      -d\tforget the remembered location of each NAME\n"
@@ -3458,7 +3623,8 @@ msgid ""
 msgstr ""
 "Memoriza ou exibe localizações de programas.\n"
 "    \n"
-"    Determina e memoriza do caminho completo de cada comando NOME. Se nenhum\n"
+"    Determina e memoriza do caminho completo de cada comando NOME. Se "
+"nenhum\n"
 "    argumento for fornecido, exibe informação sobre comandos memorizados.\n"
 "    \n"
 "    Opções:\n"
@@ -3496,7 +3662,8 @@ msgid ""
 "      PATTERN\tPattern specifying a help topic\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success unless PATTERN is not found or an invalid option is given."
+"    Returns success unless PATTERN is not found or an invalid option is "
+"given."
 msgstr ""
 "Exibe informação sobre comandos internos (builtin).\n"
 "    \n"
@@ -3545,7 +3712,8 @@ msgid ""
 "    \n"
 "    If the HISTTIMEFORMAT variable is set and not null, its value is used\n"
 "    as a format string for strftime(3) to print the time stamp associated\n"
-"    with each displayed history entry.  No time stamps are printed otherwise.\n"
+"    with each displayed history entry.  No time stamps are printed "
+"otherwise.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns success unless an invalid option is given or an error occurs."
@@ -3558,7 +3726,8 @@ msgstr ""
 "    \n"
 "    Opções:\n"
 "      -c\t\tlimpa a lista de histórico ao excluir todas as entradas\n"
-"      -d posição\texclui a entrada de histórico na posição POSIÇÃO. Posições\n"
+"      -d posição\texclui a entrada de histórico na posição POSIÇÃO. "
+"Posições\n"
 "    \t\t\tnegativas contam a partir do fim da lista de histórico\n"
 "    \n"
 "      -a\t\tanexa linhas de histórico desta sessão no arquivo de\n"
@@ -3717,7 +3886,8 @@ msgid ""
 "    Evaluate each ARG as an arithmetic expression.  Evaluation is done in\n"
 "    fixed-width integers with no check for overflow, though division by 0\n"
 "    is trapped and flagged as an error.  The following list of operators is\n"
-"    grouped into levels of equal-precedence operators.  The levels are listed\n"
+"    grouped into levels of equal-precedence operators.  The levels are "
+"listed\n"
 "    in order of decreasing precedence.\n"
 "    \n"
 "    \tid++, id--\tvariable post-increment, post-decrement\n"
@@ -3796,17 +3966,23 @@ msgstr ""
 
 # help read
 #: builtins.c:994
+#, fuzzy
 msgid ""
 "Read a line from the standard input and split it into fields.\n"
 "    \n"
 "    Reads a single line from the standard input, or from file descriptor FD\n"
-"    if the -u option is supplied.  The line is split into fields as with word\n"
+"    if the -u option is supplied.  The line is split into fields as with "
+"word\n"
 "    splitting, and the first word is assigned to the first NAME, the second\n"
 "    word to the second NAME, and so on, with any leftover words assigned to\n"
-"    the last NAME.  Only the characters found in $IFS are recognized as word\n"
-"    delimiters.\n"
+"    the last NAME.  Only the characters found in $IFS are recognized as "
+"word\n"
+"    delimiters. By default, the backslash character escapes delimiter "
+"characters\n"
+"    and newline.\n"
 "    \n"
-"    If no NAMEs are supplied, the line read is stored in the REPLY variable.\n"
+"    If no NAMEs are supplied, the line read is stored in the REPLY "
+"variable.\n"
 "    \n"
 "    Options:\n"
 "      -a array\tassign the words read to sequential indices of the array\n"
@@ -3818,7 +3994,8 @@ msgid ""
 "      -n nchars\treturn after reading NCHARS characters rather than waiting\n"
 "    \t\tfor a newline, but honor a delimiter if fewer than\n"
 "    \t\tNCHARS characters are read before the delimiter\n"
-"      -N nchars\treturn only after reading exactly NCHARS characters, unless\n"
+"      -N nchars\treturn only after reading exactly NCHARS characters, "
+"unless\n"
 "    \t\tEOF is encountered or read times out, ignoring any\n"
 "    \t\tdelimiter\n"
 "      -p prompt\toutput the string PROMPT without a trailing newline before\n"
@@ -3836,15 +4013,19 @@ msgid ""
 "      -u fd\tread from file descriptor FD instead of the standard input\n"
 "    \n"
 "    Exit Status:\n"
-"    The return code is zero, unless end-of-file is encountered, read times out\n"
-"    (in which case it's greater than 128), a variable assignment error occurs,\n"
+"    The return code is zero, unless end-of-file is encountered, read times "
+"out\n"
+"    (in which case it's greater than 128), a variable assignment error "
+"occurs,\n"
 "    or an invalid file descriptor is supplied as the argument to -u."
 msgstr ""
 "Lê uma linha da entrada padrão e separa em campos.\n"
 "\n"
 "    Lê uma linha da entrada padrão ou do descritor de arquivo FD, caso a\n"
-"    opção -u seja fornecida. A linha é separada em campos, na mesma forma de\n"
-"    separação de palavras, e a primeira palavra é atribuída ao primeiro NOME,\n"
+"    opção -u seja fornecida. A linha é separada em campos, na mesma forma "
+"de\n"
+"    separação de palavras, e a primeira palavra é atribuída ao primeiro "
+"NOME,\n"
 "    o segundo ao segundo NOME e por aí vai, com qualquer palavras restantes\n"
 "    atribuídas para o último NOME. Apenas os caracteres encontrados em $IFS\n"
 "    são reconhecidos como delimitadores de palavras.\n"
@@ -3860,11 +4041,13 @@ msgstr ""
 "      -e            usa Readline para obter a linha\n"
 "      -i texto      usa TEXTO como o texto inicial para Readline\n"
 "      -n nchars     retorna após ler NCHARS caracteres, ao invés de esperar\n"
-"                    por uma nova linha, mas respeita um delimitador se número\n"
+"                    por uma nova linha, mas respeita um delimitador se "
+"número\n"
 "                    de caracteres menor que NCHARS sejam lidos antes do\n"
 "                    delimitador\n"
 "      -N nchars     retorna apenas após ler exatamente NCHARS caracteres, a\n"
-"                    menos que EOF (fim do arquivo) seja encontrado ou `read'\n"
+"                    menos que EOF (fim do arquivo) seja encontrado ou "
+"`read'\n"
 "                    esgote o tempo limite, ignorando qualquer delimitador\n"
 "      -p prompt     mostra a string PROMPT sem remover nova linha antes de\n"
 "                    tentar ler\n"
@@ -3873,21 +4056,26 @@ msgstr ""
 "      -s            não ecoa entrada vindo de um terminal\n"
 "      -t tempo      esgota-se o tempo limite e retorna falha, caso uma toda\n"
 "                    uma linha não seja lida em TEMPO segundos. O valor da\n"
-"                    variável TMOUT é o tempo limite padrão. TEMPO pode ser um\n"
-"                    número fracionado. SE TEMPO for 0, `read' retorna sucesso\n"
+"                    variável TMOUT é o tempo limite padrão. TEMPO pode ser "
+"um\n"
+"                    número fracionado. SE TEMPO for 0, `read' retorna "
+"sucesso\n"
 "                    apenas se a entrada estiver disponível no descritor de\n"
-"                    arquivo especificado. O status de saída é maior que 128,\n"
+"                    arquivo especificado. O status de saída é maior que "
+"128,\n"
 "                    se o tempo limite for excedido\n"
-"      -u fd         lê do descritor de arquivo FD, ao invés da entrada padrão\n"
+"      -u fd         lê do descritor de arquivo FD, ao invés da entrada "
+"padrão\n"
 "    \n"
 "    Status de saída:\n"
 "    O código de retorno é zero, a menos que o EOF (fim do arquivo) seja\n"
-"    encontrado, `read' esgote o tempo limite (caso em que o código de retorno\n"
+"    encontrado, `read' esgote o tempo limite (caso em que o código de "
+"retorno\n"
 "    será 128), ocorra erro de atribuição de uma variável ou um descritor de\n"
 "    arquivo inválido seja fornecido como argumento para -u."
 
 # help return
-#: builtins.c:1041
+#: builtins.c:1042
 msgid ""
 "Return from a shell function.\n"
 "    \n"
@@ -3909,7 +4097,7 @@ msgstr ""
 "    script."
 
 # help set
-#: builtins.c:1054
+#: builtins.c:1055
 msgid ""
 "Set or unset values of shell options and positional parameters.\n"
 "    \n"
@@ -3952,7 +4140,8 @@ msgid ""
 "              physical     same as -P\n"
 "              pipefail     the return value of a pipeline is the status of\n"
 "                           the last command to exit with a non-zero status,\n"
-"                           or zero if no command exited with a non-zero status\n"
+"                           or zero if no command exited with a non-zero "
+"status\n"
 "              posix        change the behavior of bash where the default\n"
 "                           operation differs from the Posix standard to\n"
 "                           match the standard\n"
@@ -3976,7 +4165,8 @@ msgid ""
 "          by default when the shell is interactive.\n"
 "      -P  If set, do not resolve symbolic links when executing commands\n"
 "          such as cd which change the current directory.\n"
-"      -T  If set, the DEBUG and RETURN traps are inherited by shell functions.\n"
+"      -T  If set, the DEBUG and RETURN traps are inherited by shell "
+"functions.\n"
 "      --  Assign any remaining arguments to the positional parameters.\n"
 "          If there are no remaining arguments, the positional parameters\n"
 "          are unset.\n"
@@ -3992,18 +4182,21 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless an invalid option is given."
 msgstr ""
-"Define ou remove definição de valores das opções e dos parâmetros posicionais\n"
+"Define ou remove definição de valores das opções e dos parâmetros "
+"posicionais\n"
 "do shell:\n"
 "    \n"
 "    Altera o valor de opções e de parâmetros posicionais do shell ou mostra\n"
 "    os nomes ou valores de variáveis shell.\n"
 "    \n"
 "    Opções:\n"
-"      -a  Marca variáveis, que foram modificadas ou criadas, para exportação.\n"
+"      -a  Marca variáveis, que foram modificadas ou criadas, para "
+"exportação.\n"
 "      -b  Notifica sobre terminação de trabalho imediatamente.\n"
 "      -e  Sai imediatamente se um comando sai com um status não-zero.\n"
 "      -f  Desabilita a geração de nome de arquivo (\"globbing\").\n"
-"      -h  Memoriza a localização de comandos à medida em que são procurados.\n"
+"      -h  Memoriza a localização de comandos à medida em que são "
+"procurados.\n"
 "      -k  Todos argumentos de atribuição são colocados no ambiente para um\n"
 "          comando, e não apenas aqueles que precedem o nome do comando.\n"
 "      -m  Controle de trabalho está habilitado.\n"
@@ -4021,7 +4214,8 @@ msgstr ""
 "              history      habilita histórico de comandos\n"
 "              ignoreeof    shell não vai sair após leitura de EOF\n"
 "              interactive-comments\n"
-"                           permite mostrar comentários em comandos interativos\n"
+"                           permite mostrar comentários em comandos "
+"interativos\n"
 "              keyword      mesmo que -k\n"
 "              monitor      mesmo que -m\n"
 "              noclobber    mesmo que -C\n"
@@ -4033,8 +4227,10 @@ msgstr ""
 "              onecmd       mesmo que -t\n"
 "              physical     mesmo que -P\n"
 "              pipefail     o valor de retorno de uma linha de comandos é o\n"
-"                           status do último comando a sair com status não-zero,\n"
-"                           ou zero se nenhum comando saiu com status não zero\n"
+"                           status do último comando a sair com status não-"
+"zero,\n"
+"                           ou zero se nenhum comando saiu com status não "
+"zero\n"
 "              posix        altera o comportamento do bash, onde a operação\n"
 "                           padrão diverge dos padrões do Posix para\n"
 "                           corresponder a estes padrões\n"
@@ -4042,33 +4238,44 @@ msgstr ""
 "              verbose      mesmo que -v\n"
 "              vi           usa interface de edição de linha estilo vi\n"
 "              xtrace       mesmo que -x\n"
-"      -p  Ligado sempre que IDs de usuário real e efetivo não corresponderem.\n"
-"          Desabilita processamento do arquivo $ENV e importação de funções da\n"
+"      -p  Ligado sempre que IDs de usuário real e efetivo não "
+"corresponderem.\n"
+"          Desabilita processamento do arquivo $ENV e importação de funções "
+"da\n"
 "          shell. Ao desligar essa opção, causa o uid e o gid efetivo serem\n"
 "          os uid e gid reais.\n"
 "      -t  Sai após a leitura e execução de um comando.\n"
-"      -u  Trata limpeza (unset) de variáveis como um erro quando substituindo.\n"
+"      -u  Trata limpeza (unset) de variáveis como um erro quando "
+"substituindo.\n"
 "      -v  Mostra linhas de entrada do shell na medida em que forem lidas.\n"
-"      -x  Mostra comandos e seus argumentos na medida em que forme executados.\n"
+"      -x  Mostra comandos e seus argumentos na medida em que forem "
+"executados.\n"
 "      -B  o shell vai realizar expansão de chaves\n"
 "      -C  Se definido, não permite arquivos normais existentes serem\n"
 "          sobrescritos por redirecionamento da saída.\n"
 "      -E  Se definido, a armadilha ERR é herdada por funções do shell.\n"
-"      -H  Habilita substituição de histórico estilo \"!\". Essa sinalização está\n"
+"      -H  Habilita substituição de histórico estilo \"!\". Essa sinalização "
+"está\n"
 "          habilitada por padrão quando  shell é interativa.\n"
-"      -P  Se definida, não resolve links simbólicos ao sair de comandos, tais\n"
+"      -P  Se definida, não resolve links simbólicos ao sair de comandos, "
+"tais\n"
 "          como `cd' (que altera o diretório atual).\n"
-"      -T  Se definido, a armadilha DEBUG e RETURN são herdadas por funções do shell.\n"
-"      --  Atribui quaisquer argumentos restantes aos parâmetros posicionais.\n"
+"      -T  Se definido, a armadilha DEBUG e RETURN são herdadas por funções "
+"do shell.\n"
+"      --  Atribui quaisquer argumentos restantes aos parâmetros "
+"posicionais.\n"
 "          Se não houver argumentos restantes, os parâmetros posicionais são\n"
 "          limpos (unset).\n"
-"      -   Atribui quaisquer argumentos restantes aos parâmetros posicionais.\n"
+"      -   Atribui quaisquer argumentos restantes aos parâmetros "
+"posicionais.\n"
 "          As opções -x e -v são desligadas.\n"
 "    \n"
 "    Usar +, ao invés de -, causa essas sinalizações serem desligadas. As\n"
 "    sinalizações também podem ser usadas por meio de chamada do shell. As\n"
-"    sinalizações atualmente definidas podem ser encontradas em $-. Os n ARGs\n"
-"    restantes são parâmetros posicionais e são atribuídos, em ordem, a $1, $2,\n"
+"    sinalizações atualmente definidas podem ser encontradas em $-. Os n "
+"ARGs\n"
+"    restantes são parâmetros posicionais e são atribuídos, em ordem, a $1, "
+"$2,\n"
 "    .. $n. Se nenhuma ARG for fornecido, todas as variáveis shell são\n"
 "    mostradas.\n"
 "    \n"
@@ -4076,7 +4283,7 @@ msgstr ""
 "    Retorna sucesso, a menos que uma opção inválida seja fornecida."
 
 # help unset
-#: builtins.c:1139
+#: builtins.c:1140
 msgid ""
 "Unset values and attributes of shell variables and functions.\n"
 "    \n"
@@ -4088,7 +4295,8 @@ msgid ""
 "      -n\ttreat each NAME as a name reference and unset the variable itself\n"
 "    \t\trather than the variable it references\n"
 "    \n"
-"    Without options, unset first tries to unset a variable, and if that fails,\n"
+"    Without options, unset first tries to unset a variable, and if that "
+"fails,\n"
 "    tries to unset a function.\n"
 "    \n"
 "    Some variables cannot be unset; also see `readonly'.\n"
@@ -4116,12 +4324,13 @@ msgstr ""
 "    um NOME seja somente-leitura."
 
 # help export
-#: builtins.c:1161
+#: builtins.c:1162
 msgid ""
 "Set export attribute for shell variables.\n"
 "    \n"
 "    Marks each NAME for automatic export to the environment of subsequently\n"
-"    executed commands.  If VALUE is supplied, assign VALUE before exporting.\n"
+"    executed commands.  If VALUE is supplied, assign VALUE before "
+"exporting.\n"
 "    \n"
 "    Options:\n"
 "      -f\trefer to shell functions\n"
@@ -4136,7 +4345,8 @@ msgstr ""
 "Define atributo de exportação para variáveis shell.\n"
 "    \n"
 "    Marca cada NOME para exportação automática para o ambiente dos comandos\n"
-"    executados subsequentemente. Se VALOR for fornecido, atribui VALOR antes\n"
+"    executados subsequentemente. Se VALOR for fornecido, atribui VALOR "
+"antes\n"
 "    de exportar.\n"
 "    \n"
 "    Opções:\n"
@@ -4151,7 +4361,7 @@ msgstr ""
 "    NOME seja inválido."
 
 # help readonly
-#: builtins.c:1180
+#: builtins.c:1181
 msgid ""
 "Mark shell variables as unchangeable.\n"
 "    \n"
@@ -4191,7 +4401,7 @@ msgstr ""
 "    NOME seja inválido."
 
 # help shift
-#: builtins.c:1202
+#: builtins.c:1203
 msgid ""
 "Shift positional parameters.\n"
 "    \n"
@@ -4203,14 +4413,15 @@ msgid ""
 msgstr ""
 "Desloca parâmetros posicionais.\n"
 "    \n"
-"    Renomeia os parâmetros posicionais $N+1,$N+2 ... até $1,$2 ...  Se N não\n"
+"    Renomeia os parâmetros posicionais $N+1,$N+2 ... até $1,$2 ...  Se N "
+"não\n"
 "    for fornecido, presume-se que ele seja 1.\n"
 "    \n"
 "    Status de saída:\n"
 "    Retorna sucesso, a menos que N seja negativo ou maior que $#."
 
 # help source
-#: builtins.c:1214 builtins.c:1229
+#: builtins.c:1215 builtins.c:1230
 msgid ""
 "Execute commands from a file in the current shell.\n"
 "    \n"
@@ -4235,7 +4446,7 @@ msgstr ""
 "    ARQUIVO não puder ser lido."
 
 # help suspend
-#: builtins.c:1245
+#: builtins.c:1246
 msgid ""
 "Suspend shell execution.\n"
 "    \n"
@@ -4261,7 +4472,7 @@ msgstr ""
 "    ou ocorra um erro."
 
 # help test
-#: builtins.c:1261
+#: builtins.c:1262
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -4295,7 +4506,8 @@ msgid ""
 "      -x FILE        True if the file is executable by you.\n"
 "      -O FILE        True if the file is effectively owned by you.\n"
 "      -G FILE        True if the file is effectively owned by your group.\n"
-"      -N FILE        True if the file has been modified since it was last read.\n"
+"      -N FILE        True if the file has been modified since it was last "
+"read.\n"
 "    \n"
 "      FILE1 -nt FILE2  True if file1 is newer than file2 (according to\n"
 "                       modification date).\n"
@@ -4316,7 +4528,8 @@ msgid ""
 "      STRING1 != STRING2\n"
 "                     True if the strings are not equal.\n"
 "      STRING1 < STRING2\n"
-"                     True if STRING1 sorts before STRING2 lexicographically.\n"
+"                     True if STRING1 sorts before STRING2 "
+"lexicographically.\n"
 "      STRING1 > STRING2\n"
 "                     True if STRING1 sorts after STRING2 lexicographically.\n"
 "    \n"
@@ -4343,8 +4556,10 @@ msgid ""
 msgstr ""
 "Avalia expressão condicional.\n"
 "    \n"
-"    Sai com um status de 0 (verdadeiro) ou 1 (falso) dependendo da avaliação\n"
-"    de EXPR. As expressões podem ser unárias ou binárias. Expressões unárias\n"
+"    Sai com um status de 0 (verdadeiro) ou 1 (falso) dependendo da "
+"avaliação\n"
+"    de EXPR. As expressões podem ser unárias ou binárias. Expressões "
+"unárias\n"
 "    são normalmente usadas para examinar o status de um arquivo. Há\n"
 "    operadores de strings e também há operadores de comparação numérica.\n"
 "    \n"
@@ -4358,7 +4573,8 @@ msgstr ""
 "      -c ARQUIVO     Verdadeiro, se arquivo for um caractere especial.\n"
 "      -d ARQUIVO     Verdadeiro, se arquivo for um diretório.\n"
 "      -e ARQUIVO     Verdadeiro, se arquivo existir.\n"
-"      -f ARQUIVO     Verdadeiro, se arquivo existir e for um arquivo normal.\n"
+"      -f ARQUIVO     Verdadeiro, se arquivo existir e for um arquivo "
+"normal.\n"
 "      -g ARQUIVO     Verdadeiro, se arquivo for set-group-id.\n"
 "      -h ARQUIVO     Verdadeiro, se arquivo for um link simbólico.\n"
 "      -L ARQUIVO     Verdadeiro, se arquivo for um link simbólico.\n"
@@ -4409,20 +4625,24 @@ msgstr ""
 "                     e for uma referência de nome.\n"
 "      ! EXPR         Verdadeiro, se a expressão EXPR for falsa.\n"
 "      EXPR1 -a EXPR2 Verdadeiro, se ambas EXPR1 e EXPR2 forem verdadeiras.\n"
-"      EXPR1 -o EXPR2 Verdadeiro, se ao menos uma das expressões for verdadeira.\n"
+"      EXPR1 -o EXPR2 Verdadeiro, se ao menos uma das expressões for "
+"verdadeira.\n"
 "    \n"
-"      arg1 OP arg2   Testes aritméticos.  OP é um dentre -eq, -ne, -lt, -le,\n"
+"      arg1 OP arg2   Testes aritméticos.  OP é um dentre -eq, -ne, -lt, -"
+"le,\n"
 "                     -gt, or -ge.\n"
 "    \n"
-"    Operadores binários de aritmética retornam verdadeiro se ARG1 for igual,\n"
+"    Operadores binários de aritmética retornam verdadeiro se ARG1 for "
+"igual,\n"
 "    não-igual, menor-que, menor-ou-igual-a ou maior-ou-igual-a ARG2.\n"
 "    \n"
 "    Status de saída:\n"
-"    Retorna sucesso, se EXPR for avaliada como verdadeira; falha, se EXPR for\n"
+"    Retorna sucesso, se EXPR for avaliada como verdadeira; falha, se EXPR "
+"for\n"
 "    avaliada como falsa ou um argumento inválido for informado."
 
 # help [
-#: builtins.c:1343
+#: builtins.c:1344
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -4435,11 +4655,12 @@ msgstr ""
 "    argumento deve ser um `]' literal, para corresponder ao `[' que abriu."
 
 # help times
-#: builtins.c:1352
+#: builtins.c:1353
 msgid ""
 "Display process times.\n"
 "    \n"
-"    Prints the accumulated user and system times for the shell and all of its\n"
+"    Prints the accumulated user and system times for the shell and all of "
+"its\n"
 "    child processes.\n"
 "    \n"
 "    Exit Status:\n"
@@ -4454,11 +4675,12 @@ msgstr ""
 "    Sempre com sucesso."
 
 # help trap
-#: builtins.c:1364
+#: builtins.c:1365
 msgid ""
 "Trap signals and other events.\n"
 "    \n"
-"    Defines and activates handlers to be run when the shell receives signals\n"
+"    Defines and activates handlers to be run when the shell receives "
+"signals\n"
 "    or other conditions.\n"
 "    \n"
 "    ARG is a command to be read and executed when the shell receives the\n"
@@ -4467,26 +4689,34 @@ msgid ""
 "    value.  If ARG is the null string each SIGNAL_SPEC is ignored by the\n"
 "    shell and by the commands it invokes.\n"
 "    \n"
-"    If a SIGNAL_SPEC is EXIT (0) ARG is executed on exit from the shell.  If\n"
-"    a SIGNAL_SPEC is DEBUG, ARG is executed before every simple command.  If\n"
-"    a SIGNAL_SPEC is RETURN, ARG is executed each time a shell function or a\n"
-"    script run by the . or source builtins finishes executing.  A SIGNAL_SPEC\n"
-"    of ERR means to execute ARG each time a command's failure would cause the\n"
+"    If a SIGNAL_SPEC is EXIT (0) ARG is executed on exit from the shell.  "
+"If\n"
+"    a SIGNAL_SPEC is DEBUG, ARG is executed before every simple command.  "
+"If\n"
+"    a SIGNAL_SPEC is RETURN, ARG is executed each time a shell function or "
+"a\n"
+"    script run by the . or source builtins finishes executing.  A "
+"SIGNAL_SPEC\n"
+"    of ERR means to execute ARG each time a command's failure would cause "
+"the\n"
 "    shell to exit when the -e option is enabled.\n"
 "    \n"
-"    If no arguments are supplied, trap prints the list of commands associated\n"
+"    If no arguments are supplied, trap prints the list of commands "
+"associated\n"
 "    with each signal.\n"
 "    \n"
 "    Options:\n"
 "      -l\tprint a list of signal names and their corresponding numbers\n"
 "      -p\tdisplay the trap commands associated with each SIGNAL_SPEC\n"
 "    \n"
-"    Each SIGNAL_SPEC is either a signal name in <signal.h> or a signal number.\n"
+"    Each SIGNAL_SPEC is either a signal name in <signal.h> or a signal "
+"number.\n"
 "    Signal names are case insensitive and the SIG prefix is optional.  A\n"
 "    signal may be sent to the shell with \"kill -signal $$\".\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success unless a SIGSPEC is invalid or an invalid option is given."
+"    Returns success unless a SIGSPEC is invalid or an invalid option is "
+"given."
 msgstr ""
 "Tratamento de sinais e outros eventos.\n"
 "    \n"
@@ -4526,7 +4756,7 @@ msgstr ""
 "    uma opção inválida seja fornecida."
 
 # help type
-#: builtins.c:1400
+#: builtins.c:1401
 msgid ""
 "Display information about command type.\n"
 "    \n"
@@ -4552,7 +4782,8 @@ msgid ""
 "      NAME\tCommand name to be interpreted.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success if all of the NAMEs are found; fails if any are not found."
+"    Returns success if all of the NAMEs are found; fails if any are not "
+"found."
 msgstr ""
 "Exibe informação sobre o tipo de comando.\n"
 "    \n"
@@ -4582,11 +4813,12 @@ msgstr ""
 "    deles não for encontrado."
 
 # help ulimit
-#: builtins.c:1431
+#: builtins.c:1432
 msgid ""
 "Modify shell resource limits.\n"
 "    \n"
-"    Provides control over the resources available to the shell and processes\n"
+"    Provides control over the resources available to the shell and "
+"processes\n"
 "    it creates, on systems that allow such control.\n"
 "    \n"
 "    Options:\n"
@@ -4679,7 +4911,7 @@ msgstr ""
 "    ocorra um erro."
 
 # help umask
-#: builtins.c:1482
+#: builtins.c:1483
 msgid ""
 "Display or set file mode mask.\n"
 "    \n"
@@ -4715,23 +4947,27 @@ msgstr ""
 "    inválida seja fornecida."
 
 # help wait
-#: builtins.c:1502
+#: builtins.c:1503
 msgid ""
 "Wait for job completion and return exit status.\n"
 "    \n"
-"    Waits for each process identified by an ID, which may be a process ID or a\n"
+"    Waits for each process identified by an ID, which may be a process ID or "
+"a\n"
 "    job specification, and reports its termination status.  If ID is not\n"
 "    given, waits for all currently active child processes, and the return\n"
 "    status is zero.  If ID is a job specification, waits for all processes\n"
 "    in that job's pipeline.\n"
 "    \n"
-"    If the -n option is supplied, waits for a single job from the list of IDs,\n"
-"    or, if no IDs are supplied, for the next job to complete and returns its\n"
+"    If the -n option is supplied, waits for a single job from the list of "
+"IDs,\n"
+"    or, if no IDs are supplied, for the next job to complete and returns "
+"its\n"
 "    exit status.\n"
 "    \n"
 "    If the -p option is supplied, the process or job identifier of the job\n"
 "    for which the exit status is returned is assigned to the variable VAR\n"
-"    named by the option argument. The variable will be unset initially, before\n"
+"    named by the option argument. The variable will be unset initially, "
+"before\n"
 "    any assignment. This is useful only when the -n option is supplied.\n"
 "    \n"
 "    If the -f option is supplied, and job control is enabled, waits for the\n"
@@ -4765,16 +5001,18 @@ msgstr ""
 "    filho inesperado."
 
 # help wait
-#: builtins.c:1533
+#: builtins.c:1534
 msgid ""
 "Wait for process completion and return exit status.\n"
 "    \n"
-"    Waits for each process specified by a PID and reports its termination status.\n"
+"    Waits for each process specified by a PID and reports its termination "
+"status.\n"
 "    If PID is not given, waits for all currently active child processes,\n"
 "    and the return status is zero.  PID must be a process ID.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns the status of the last PID; fails if PID is invalid or an invalid\n"
+"    Returns the status of the last PID; fails if PID is invalid or an "
+"invalid\n"
 "    option is given."
 msgstr ""
 "Espera por conclusão de processo e retorna o status de saída.\n"
@@ -4789,7 +5027,7 @@ msgstr ""
 "    inválida for fornecida."
 
 # help for
-#: builtins.c:1548
+#: builtins.c:1549
 msgid ""
 "Execute commands for each member in a list.\n"
 "    \n"
@@ -4805,14 +5043,15 @@ msgstr ""
 "    \n"
 "    O loop `for' executa uma sequência de comandos para cada membro em\n"
 "    uma lista de itens. Se `in PALAVRAS ...;' não estiver presente, então\n"
-"    `in \"$@\"' é presumido. Para cada elemento em PALAVRAS, NOME é definido\n"
+"    `in \"$@\"' é presumido. Para cada elemento em PALAVRAS, NOME é "
+"definido\n"
 "    com aquele elemento e os COMANDOS são executados.\n"
 "    \n"
 "    Status de saída:\n"
 "    Retorna o status do último comando executado."
 
 # help for ((    (?)
-#: builtins.c:1562
+#: builtins.c:1563
 msgid ""
 "Arithmetic for loop.\n"
 "    \n"
@@ -4843,7 +5082,7 @@ msgstr ""
 "    Retorna o status do último comando executado."
 
 # help select
-#: builtins.c:1580
+#: builtins.c:1581
 msgid ""
 "Select words from a list and execute commands.\n"
 "    \n"
@@ -4881,7 +5120,7 @@ msgstr ""
 "    Retorna o status do último comando executado."
 
 # help time
-#: builtins.c:1601
+#: builtins.c:1602
 msgid ""
 "Report time consumed by pipeline's execution.\n"
 "    \n"
@@ -4911,7 +5150,7 @@ msgstr ""
 "    O status de retorno é o status retornado por LINHA-COMANDOS."
 
 # help case
-#: builtins.c:1618
+#: builtins.c:1619
 msgid ""
 "Execute commands based on pattern matching.\n"
 "    \n"
@@ -4930,16 +5169,21 @@ msgstr ""
 "    Retorna o status do último comando executado."
 
 # help if
-#: builtins.c:1630
+#: builtins.c:1631
 msgid ""
 "Execute commands based on conditional.\n"
 "    \n"
-"    The `if COMMANDS' list is executed.  If its exit status is zero, then the\n"
-"    `then COMMANDS' list is executed.  Otherwise, each `elif COMMANDS' list is\n"
+"    The `if COMMANDS' list is executed.  If its exit status is zero, then "
+"the\n"
+"    `then COMMANDS' list is executed.  Otherwise, each `elif COMMANDS' list "
+"is\n"
 "    executed in turn, and if its exit status is zero, the corresponding\n"
-"    `then COMMANDS' list is executed and the if command completes.  Otherwise,\n"
-"    the `else COMMANDS' list is executed, if present.  The exit status of the\n"
-"    entire construct is the exit status of the last command executed, or zero\n"
+"    `then COMMANDS' list is executed and the if command completes.  "
+"Otherwise,\n"
+"    the `else COMMANDS' list is executed, if present.  The exit status of "
+"the\n"
+"    entire construct is the exit status of the last command executed, or "
+"zero\n"
 "    if no condition tested true.\n"
 "    \n"
 "    Exit Status:\n"
@@ -4960,12 +5204,14 @@ msgstr ""
 "    Retorna o status do último comando executado."
 
 # help while
-#: builtins.c:1647
+#: builtins.c:1648
+#, fuzzy
 msgid ""
 "Execute commands as long as a test succeeds.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `while' COMMANDS has an exit status of zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS "
+"has\n"
+"    an exit status of zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
@@ -4979,12 +5225,14 @@ msgstr ""
 "    Retorna o status do último comando executado."
 
 # help until
-#: builtins.c:1659
+#: builtins.c:1660
+#, fuzzy
 msgid ""
 "Execute commands as long as a test does not succeed.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `until' COMMANDS has an exit status which is not zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS "
+"has\n"
+"    an exit status which is not zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
@@ -4998,7 +5246,7 @@ msgstr ""
 "    Status de saída:\n"
 "    Retorna o status do último comando executado."
 
-#: builtins.c:1671
+#: builtins.c:1672
 msgid ""
 "Create a coprocess named NAME.\n"
 "    \n"
@@ -5021,12 +5269,13 @@ msgstr ""
 "    O comando coproc retorna um status de saída de 0."
 
 # help function
-#: builtins.c:1685
+#: builtins.c:1686
 msgid ""
 "Define shell function.\n"
 "    \n"
 "    Create a shell function named NAME.  When invoked as a simple command,\n"
-"    NAME runs COMMANDs in the calling shell's context.  When NAME is invoked,\n"
+"    NAME runs COMMANDs in the calling shell's context.  When NAME is "
+"invoked,\n"
 "    the arguments are passed to the function as $1...$n, and the function's\n"
 "    name is in $FUNCNAME.\n"
 "    \n"
@@ -5044,7 +5293,7 @@ msgstr ""
 "    Retorna sucesso, a menos que NOME seja somente-leitura."
 
 # help -m {
-#: builtins.c:1699
+#: builtins.c:1700
 msgid ""
 "Group commands as a unit.\n"
 "    \n"
@@ -5062,7 +5311,7 @@ msgstr ""
 "    Status de saída:\n"
 "    Retorna o status do último comando executado."
 
-#: builtins.c:1711
+#: builtins.c:1712
 msgid ""
 "Resume job in foreground.\n"
 "    \n"
@@ -5088,7 +5337,7 @@ msgstr ""
 "    Retorna o status de um trabalho resumido."
 
 # help '(('
-#: builtins.c:1726
+#: builtins.c:1727
 msgid ""
 "Evaluate arithmetic expression.\n"
 "    \n"
@@ -5107,13 +5356,16 @@ msgstr ""
 "    Retorna 1, se EXPRESSÃO for avaliada como 0; do contrário, retorna 0."
 
 # help '['
-#: builtins.c:1738
+#: builtins.c:1739
 msgid ""
 "Execute conditional command.\n"
 "    \n"
-"    Returns a status of 0 or 1 depending on the evaluation of the conditional\n"
-"    expression EXPRESSION.  Expressions are composed of the same primaries used\n"
-"    by the `test' builtin, and may be combined using the following operators:\n"
+"    Returns a status of 0 or 1 depending on the evaluation of the "
+"conditional\n"
+"    expression EXPRESSION.  Expressions are composed of the same primaries "
+"used\n"
+"    by the `test' builtin, and may be combined using the following "
+"operators:\n"
 "    \n"
 "      ( EXPRESSION )\tReturns the value of EXPRESSION\n"
 "      ! EXPRESSION\t\tTrue if EXPRESSION is false; else false\n"
@@ -5157,7 +5409,7 @@ msgstr ""
 "    0 ou 1 dependendo do valor de EXPRESSÃO."
 
 # help variables
-#: builtins.c:1764
+#: builtins.c:1765
 msgid ""
 "Common shell variable names and usage.\n"
 "    \n"
@@ -5241,7 +5493,8 @@ msgstr ""
 "    OSTYPE\t\t\tA versão do Unix no qual Bash está sendo executado.\n"
 "    PATH\t\t\tUma lista separada por dois-pontos de diretórios para\n"
 "    \t\t\tpesquisar ao se procurar por comandos.\n"
-"    PROMPT_COMMAND\tUm comando a ser executado antes de imprimir cada prompt\n"
+"    PROMPT_COMMAND\tUm comando a ser executado antes de imprimir cada "
+"prompt\n"
 "    \t\t\tprimário.\n"
 "    PS1\t\t\t\tA string de prompt primário.\n"
 "    PS2\t\t\t\tA string de prompt secundária.\n"
@@ -5272,7 +5525,7 @@ msgstr ""
 "    \t\t\t\thistórico.\n"
 
 # help pushd
-#: builtins.c:1821
+#: builtins.c:1822
 msgid ""
 "Add directories to stack.\n"
 "    \n"
@@ -5332,7 +5585,7 @@ msgstr ""
 "    a alteração de diretório falhar."
 
 # help popd
-#: builtins.c:1855
+#: builtins.c:1856
 msgid ""
 "Remove directories from stack.\n"
 "    \n"
@@ -5383,7 +5636,7 @@ msgstr ""
 "    a alteração de diretório falhar."
 
 # help dirs
-#: builtins.c:1885
+#: builtins.c:1886
 msgid ""
 "Display directory stack.\n"
 "    \n"
@@ -5437,7 +5690,7 @@ msgstr ""
 "    ocorrer um erro."
 
 # help shopt
-#: builtins.c:1916
+#: builtins.c:1917
 msgid ""
 "Set and unset shell options.\n"
 "    \n"
@@ -5474,7 +5727,8 @@ msgstr ""
 "    opção inválida for fornecida ou NOME-OPÇÃO estiver desabilitado."
 
 # help printf
-#: builtins.c:1937
+#: builtins.c:1938
+#, fuzzy
 msgid ""
 "Formats and prints ARGUMENTS under control of the FORMAT.\n"
 "    \n"
@@ -5482,27 +5736,36 @@ msgid ""
 "      -v var\tassign the output to shell variable VAR rather than\n"
 "    \t\tdisplay it on the standard output\n"
 "    \n"
-"    FORMAT is a character string which contains three types of objects: plain\n"
-"    characters, which are simply copied to standard output; character escape\n"
+"    FORMAT is a character string which contains three types of objects: "
+"plain\n"
+"    characters, which are simply copied to standard output; character "
+"escape\n"
 "    sequences, which are converted and copied to the standard output; and\n"
-"    format specifications, each of which causes printing of the next successive\n"
+"    format specifications, each of which causes printing of the next "
+"successive\n"
 "    argument.\n"
 "    \n"
-"    In addition to the standard format specifications described in printf(1),\n"
+"    In addition to the standard format specifications described in "
+"printf(1),\n"
 "    printf interprets:\n"
 "    \n"
 "      %b\texpand backslash escape sequences in the corresponding argument\n"
 "      %q\tquote the argument in a way that can be reused as shell input\n"
-"      %(fmt)T\toutput the date-time string resulting from using FMT as a format\n"
+"      %Q\tlike %q, but apply any precision to the unquoted argument before\n"
+"    \t\tquoting\n"
+"      %(fmt)T\toutput the date-time string resulting from using FMT as a "
+"format\n"
 "    \t        string for strftime(3)\n"
 "    \n"
 "    The format is re-used as necessary to consume all of the arguments.  If\n"
 "    there are fewer arguments than the format requires,  extra format\n"
-"    specifications behave as if a zero value or null string, as appropriate,\n"
+"    specifications behave as if a zero value or null string, as "
+"appropriate,\n"
 "    had been supplied.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success unless an invalid option is given or a write or assignment\n"
+"    Returns success unless an invalid option is given or a write or "
+"assignment\n"
 "    error occurs."
 msgstr ""
 "Formata e imprime ARGUMENTOS sob controle de FORMATO.\n"
@@ -5537,12 +5800,14 @@ msgstr ""
 "    ocorra um erro de escrita ou atribuição."
 
 # help complete
-#: builtins.c:1971
+#: builtins.c:1974
 msgid ""
 "Specify how arguments are to be completed by Readline.\n"
 "    \n"
-"    For each NAME, specify how arguments are to be completed.  If no options\n"
-"    are supplied, existing completion specifications are printed in a way that\n"
+"    For each NAME, specify how arguments are to be completed.  If no "
+"options\n"
+"    are supplied, existing completion specifications are printed in a way "
+"that\n"
 "    allows them to be reused as input.\n"
 "    \n"
 "    Options:\n"
@@ -5557,8 +5822,10 @@ msgid ""
 "    \t\tcommand) word\n"
 "    \n"
 "    When completion is attempted, the actions are applied in the order the\n"
-"    uppercase-letter options are listed above. If multiple options are supplied,\n"
-"    the -D option takes precedence over -E, and both take precedence over -I.\n"
+"    uppercase-letter options are listed above. If multiple options are "
+"supplied,\n"
+"    the -D option takes precedence over -E, and both take precedence over -"
+"I.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns success unless an invalid option is supplied or an error occurs."
@@ -5570,8 +5837,10 @@ msgstr ""
 "    impressas em uma forma que permite-as serem usadas como entrada.\n"
 "    \n"
 "    Opções:\n"
-"      -p\timprime especificações existentes de completar em um formato usável\n"
-"      -r\tremove uma especificação de completar para cada NOME ou, se nenhum\n"
+"      -p\timprime especificações existentes de completar em um formato "
+"usável\n"
+"      -r\tremove uma especificação de completar para cada NOME ou, se "
+"nenhum\n"
 "    \t\tNOME for fornecido, todas as especificações de completar\n"
 "      -D\taplica as completações e ações como sendo o padrão para comandos\n"
 "    \t\tsem qualquer especificação definida\n"
@@ -5581,7 +5850,8 @@ msgstr ""
 "    \t\tcomando)\n"
 "    \n"
 "    Ao tentar completar, as ações são fornecidas na ordem em que as opções\n"
-"    de letras de caixa alta são listadas acima. Se várias opções forem fornecidas,\n"
+"    de letras de caixa alta são listadas acima. Se várias opções forem "
+"fornecidas,\n"
 "    a opção -D tem precedência sobre -E, e ambos têm precedência sobre -I.\n"
 "    sobre -E.\n"
 "    \n"
@@ -5590,12 +5860,13 @@ msgstr ""
 "    ocorra um erro."
 
 # help compgen
-#: builtins.c:2001
+#: builtins.c:2004
 msgid ""
 "Display possible completions depending on the options.\n"
 "    \n"
 "    Intended to be used from within a shell function generating possible\n"
-"    completions.  If the optional WORD argument is supplied, matches against\n"
+"    completions.  If the optional WORD argument is supplied, matches "
+"against\n"
 "    WORD are generated.\n"
 "    \n"
 "    Exit Status:\n"
@@ -5612,13 +5883,16 @@ msgstr ""
 "    ocorra um erro."
 
 # help compopt
-#: builtins.c:2016
+#: builtins.c:2019
 msgid ""
 "Modify or display completion options.\n"
 "    \n"
-"    Modify the completion options for each NAME, or, if no NAMEs are supplied,\n"
-"    the completion currently being executed.  If no OPTIONs are given, print\n"
-"    the completion options for each NAME or the current completion specification.\n"
+"    Modify the completion options for each NAME, or, if no NAMEs are "
+"supplied,\n"
+"    the completion currently being executed.  If no OPTIONs are given, "
+"print\n"
+"    the completion options for each NAME or the current completion "
+"specification.\n"
 "    \n"
 "    Options:\n"
 "    \t-o option\tSet completion option OPTION for each NAME\n"
@@ -5669,21 +5943,26 @@ msgstr ""
 "    NOME não tem uma especificação de completação definida."
 
 # help mapfile
-#: builtins.c:2047
+#: builtins.c:2050
 msgid ""
 "Read lines from the standard input into an indexed array variable.\n"
 "    \n"
-"    Read lines from the standard input into the indexed array variable ARRAY, or\n"
-"    from file descriptor FD if the -u option is supplied.  The variable MAPFILE\n"
+"    Read lines from the standard input into the indexed array variable "
+"ARRAY, or\n"
+"    from file descriptor FD if the -u option is supplied.  The variable "
+"MAPFILE\n"
 "    is the default ARRAY.\n"
 "    \n"
 "    Options:\n"
 "      -d delim\tUse DELIM to terminate lines, instead of newline\n"
-"      -n count\tCopy at most COUNT lines.  If COUNT is 0, all lines are copied\n"
-"      -O origin\tBegin assigning to ARRAY at index ORIGIN.  The default index is 0\n"
+"      -n count\tCopy at most COUNT lines.  If COUNT is 0, all lines are "
+"copied\n"
+"      -O origin\tBegin assigning to ARRAY at index ORIGIN.  The default "
+"index is 0\n"
 "      -s count\tDiscard the first COUNT lines read\n"
 "      -t\tRemove a trailing DELIM from each line read (default newline)\n"
-"      -u fd\tRead lines from file descriptor FD instead of the standard input\n"
+"      -u fd\tRead lines from file descriptor FD instead of the standard "
+"input\n"
 "      -C callback\tEvaluate CALLBACK each time QUANTUM lines are read\n"
 "      -c quantum\tSpecify the number of lines read between each call to\n"
 "    \t\t\tCALLBACK\n"
@@ -5696,11 +5975,13 @@ msgid ""
 "    element to be assigned and the line to be assigned to that element\n"
 "    as additional arguments.\n"
 "    \n"
-"    If not supplied with an explicit origin, mapfile will clear ARRAY before\n"
+"    If not supplied with an explicit origin, mapfile will clear ARRAY "
+"before\n"
 "    assigning to it.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success unless an invalid option is given or ARRAY is readonly or\n"
+"    Returns success unless an invalid option is given or ARRAY is readonly "
+"or\n"
 "    not an indexed array."
 msgstr ""
 "Lê linhas da entrada padrão para uma variável array indexado.\n"
@@ -5711,23 +5992,28 @@ msgstr ""
 "    \n"
 "    Opções:\n"
 "      -d dlim      Usa DELIM para terminar linhas, ao invés de nova linha\n"
-"      -n número     Copia no máximo NÚMERO linhas. Se NÚMERO for 0, todas as\n"
+"      -n número     Copia no máximo NÚMERO linhas. Se NÚMERO for 0, todas "
+"as\n"
 "                    linhas são copiadas\n"
 "      -O origem     Inicia atribuição de ARRAY no índice ORIGEM. O índice\n"
 "                    padrão é 0\n"
 "      -s número     Descarta as primeiras NÚMERO linhas lidas\n"
 "      -t            Remove uma DELIM ao final para cada linha lida\n"
 "                    (padrão: nova linha)\n"
-"      -u fd         Lê linhas do descritor de arquivos FD, ao invés da entrada\n"
+"      -u fd         Lê linhas do descritor de arquivos FD, ao invés da "
+"entrada\n"
 "                    padrão\n"
-"      -C chamada    Avalia CHAMADA a cada vez que QUANTIDADE linhas foram lidas\n"
-"      -c quantidade Especifica o número de linhas lidas entre cada chamada para\n"
+"      -C chamada    Avalia CHAMADA a cada vez que QUANTIDADE linhas foram "
+"lidas\n"
+"      -c quantidade Especifica o número de linhas lidas entre cada chamada "
+"para\n"
 "                    CHAMADA\n"
 "    \n"
 "    Argumentos:\n"
 "      ARRAY         Nome da variável array para usar para arquivos de dados\n"
 "    \n"
-"    Se -C for fornecido sem -c, a quantidade padrão é 5000. Quando CHAMADA é\n"
+"    Se -C for fornecido sem -c, a quantidade padrão é 5000. Quando CHAMADA "
+"é\n"
 "    avaliada, é fornecido o índice para o próximo elemento da array ser\n"
 "    atribuído e a linha para ser atribuída àquele elemento como argumentos\n"
 "    adicionais\n"
@@ -5740,7 +6026,7 @@ msgstr ""
 "    somente leitura ou não for um array indexado."
 
 # help readarray
-#: builtins.c:2083
+#: builtins.c:2086
 msgid ""
 "Read lines from a file into an array variable.\n"
 "    \n"
@@ -5750,6 +6036,10 @@ msgstr ""
 "    \n"
 "    Um sinônimo para `mapfile'."
 
+#, c-format
+#~ msgid "%s: invalid associative array key"
+#~ msgstr "%s: chave de array associativo inválida"
+
 #~ msgid ""
 #~ "Returns the context of the current subroutine call.\n"
 #~ "    \n"
@@ -5824,9 +6114,12 @@ msgstr ""
 #~ "    If FILENAME is given, it is used as the history file.  Otherwise,\n"
 #~ "    if HISTFILE has a value, that is used, else ~/.bash_history.\n"
 #~ "    \n"
-#~ "    If the HISTTIMEFORMAT variable is set and not null, its value is used\n"
-#~ "    as a format string for strftime(3) to print the time stamp associated\n"
-#~ "    with each displayed history entry.  No time stamps are printed otherwise.\n"
+#~ "    If the HISTTIMEFORMAT variable is set and not null, its value is "
+#~ "used\n"
+#~ "    as a format string for strftime(3) to print the time stamp "
+#~ "associated\n"
+#~ "    with each displayed history entry.  No time stamps are printed "
+#~ "otherwise.\n"
 #~ "    \n"
 #~ "    Exit Status:\n"
 #~ "    Returns success unless an invalid option is given or an error occurs."
@@ -5852,12 +6145,16 @@ msgstr ""
 #~ "      -s\t\t\tanexa os ARGs à lista de histórico como uma única entrada\n"
 #~ "    \n"
 #~ "    Se ARQUIVO for fornecido, ele é usado como o arquivo de histórico.\n"
-#~ "    Do contrário, se a variável HISTFILE tiver um valor, este será usado;\n"
+#~ "    Do contrário, se a variável HISTFILE tiver um valor, este será "
+#~ "usado;\n"
 #~ "    senão, usa de ~/.bash_history.\n"
 #~ "    \n"
-#~ "    Se a variável HISTTIMEFORMAT for definida e não for nula, seu valor é\n"
-#~ "    usado como uma string de formato para strftime(3) para mostrar a marca\n"
-#~ "    de tempo associada com cada entrada de histórico exibida. Do contrário,\n"
+#~ "    Se a variável HISTTIMEFORMAT for definida e não for nula, seu valor "
+#~ "é\n"
+#~ "    usado como uma string de formato para strftime(3) para mostrar a "
+#~ "marca\n"
+#~ "    de tempo associada com cada entrada de histórico exibida. Do "
+#~ "contrário,\n"
 #~ "    nenhuma marca de tempo é mostrada.\n"
 #~ "    \n"
 #~ "    Status de saída:\n"
@@ -5878,8 +6175,10 @@ msgstr ""
 #~ "      -l\tlist the signal names; if arguments follow `-l' they are\n"
 #~ "    \t\tassumed to be signal numbers for which names should be listed\n"
 #~ "    \n"
-#~ "    Kill is a shell builtin for two reasons: it allows job IDs to be used\n"
-#~ "    instead of process IDs, and allows processes to be killed if the limit\n"
+#~ "    Kill is a shell builtin for two reasons: it allows job IDs to be "
+#~ "used\n"
+#~ "    instead of process IDs, and allows processes to be killed if the "
+#~ "limit\n"
 #~ "    on processes that you can create is reached.\n"
 #~ "    \n"
 #~ "    Exit Status:\n"
@@ -5937,7 +6236,8 @@ msgstr ""
 #~ "              history      enable command history\n"
 #~ "              ignoreeof    the shell will not exit upon reading EOF\n"
 #~ "              interactive-comments\n"
-#~ "                           allow comments to appear in interactive commands\n"
+#~ "                           allow comments to appear in interactive "
+#~ "commands\n"
 #~ "              keyword      same as -k\n"
 #~ "              monitor      same as -m\n"
 #~ "              noclobber    same as -C\n"
@@ -5948,9 +6248,12 @@ msgstr ""
 #~ "              nounset      same as -u\n"
 #~ "              onecmd       same as -t\n"
 #~ "              physical     same as -P\n"
-#~ "              pipefail     the return value of a pipeline is the status of\n"
-#~ "                           the last command to exit with a non-zero status,\n"
-#~ "                           or zero if no command exited with a non-zero status\n"
+#~ "              pipefail     the return value of a pipeline is the status "
+#~ "of\n"
+#~ "                           the last command to exit with a non-zero "
+#~ "status,\n"
+#~ "                           or zero if no command exited with a non-zero "
+#~ "status\n"
 #~ "              posix        change the behavior of bash where the default\n"
 #~ "                           operation differs from the Posix standard to\n"
 #~ "                           match the standard\n"
@@ -5958,9 +6261,11 @@ msgstr ""
 #~ "              verbose      same as -v\n"
 #~ "              vi           use a vi-style line editing interface\n"
 #~ "              xtrace       same as -x\n"
-#~ "      -p  Turned on whenever the real and effective user ids do not match.\n"
+#~ "      -p  Turned on whenever the real and effective user ids do not "
+#~ "match.\n"
 #~ "          Disables processing of the $ENV file and importing of shell\n"
-#~ "          functions.  Turning this option off causes the effective uid and\n"
+#~ "          functions.  Turning this option off causes the effective uid "
+#~ "and\n"
 #~ "          gid to be set to the real uid and gid.\n"
 #~ "      -t  Exit after reading and executing one command.\n"
 #~ "      -u  Treat unset variables as an error when substituting.\n"
@@ -5983,26 +6288,32 @@ msgstr ""
 #~ "    \n"
 #~ "    Using + rather than - causes these flags to be turned off.  The\n"
 #~ "    flags can also be used upon invocation of the shell.  The current\n"
-#~ "    set of flags may be found in $-.  The remaining n ARGs are positional\n"
+#~ "    set of flags may be found in $-.  The remaining n ARGs are "
+#~ "positional\n"
 #~ "    parameters and are assigned, in order, to $1, $2, .. $n.  If no\n"
 #~ "    ARGs are given, all shell variables are printed.\n"
 #~ "    \n"
 #~ "    Exit Status:\n"
 #~ "    Returns success unless an invalid option is given."
 #~ msgstr ""
-#~ "Define ou remove definição de valores das opções e dos parâmetros posicionais\n"
+#~ "Define ou remove definição de valores das opções e dos parâmetros "
+#~ "posicionais\n"
 #~ "do shell:\n"
 #~ "    \n"
-#~ "    Altera o valor de opções e de parâmetros posicionais do shell ou mostra\n"
+#~ "    Altera o valor de opções e de parâmetros posicionais do shell ou "
+#~ "mostra\n"
 #~ "    os nomes ou valores de variáveis shell.\n"
 #~ "    \n"
 #~ "    Opções:\n"
-#~ "      -a  Marca variáveis, que foram modificadas ou criadas, para exportação.\n"
+#~ "      -a  Marca variáveis, que foram modificadas ou criadas, para "
+#~ "exportação.\n"
 #~ "      -b  Notifica sobre terminação de trabalho imediatamente.\n"
 #~ "      -e  Sai imediatamente se um comando sai com um status não-zero.\n"
 #~ "      -f  Desabilita a geração de nome de arquivo (\"globbing\").\n"
-#~ "      -h  Memoriza a localização de comandos à medida em que são procurados.\n"
-#~ "      -k  Todos argumentos de atribuição são colocados no ambiente para um\n"
+#~ "      -h  Memoriza a localização de comandos à medida em que são "
+#~ "procurados.\n"
+#~ "      -k  Todos argumentos de atribuição são colocados no ambiente para "
+#~ "um\n"
 #~ "          comando, e não apenas aqueles que precedem o nome do comando.\n"
 #~ "      -m  Controle de trabalho está habilitado.\n"
 #~ "      -n  Lê comandos, mas não os executa.\n"
@@ -6019,7 +6330,8 @@ msgstr ""
 #~ "              history      habilita histórico de comandos\n"
 #~ "              ignoreeof    shell não vai sair após leitura de EOF\n"
 #~ "              interactive-comments\n"
-#~ "                           permite mostrar comentários em comandos interativos\n"
+#~ "                           permite mostrar comentários em comandos "
+#~ "interativos\n"
 #~ "              keyword      mesmo que -k\n"
 #~ "              monitor      mesmo que -m\n"
 #~ "              noclobber    mesmo que -C\n"
@@ -6030,43 +6342,61 @@ msgstr ""
 #~ "              nounset      mesmo que -u\n"
 #~ "              onecmd       mesmo que -t\n"
 #~ "              physical     mesmo que -P\n"
-#~ "              pipefail     o valor de retorno de uma linha de comandos é o\n"
-#~ "                           status do último comando a sair com status não-zero,\n"
-#~ "                           ou zero se nenhum comando saiu com status não zero\n"
-#~ "              posix        altera o comportamento do bash, onde a operação\n"
+#~ "              pipefail     o valor de retorno de uma linha de comandos é "
+#~ "o\n"
+#~ "                           status do último comando a sair com status não-"
+#~ "zero,\n"
+#~ "                           ou zero se nenhum comando saiu com status não "
+#~ "zero\n"
+#~ "              posix        altera o comportamento do bash, onde a "
+#~ "operação\n"
 #~ "                           padrão diverge dos padrões do Posix para\n"
 #~ "                           corresponder a estes padrões\n"
 #~ "              privileged   mesmo que -p\n"
 #~ "              verbose      mesmo que -v\n"
 #~ "              vi           usa interface de edição de linha estilo vi\n"
 #~ "              xtrace       mesmo que -x\n"
-#~ "      -p  Ligado sempre que IDs de usuário real e efetivo não corresponderem.\n"
-#~ "          Desabilita processamento do arquivo $ENV e importação de funções da\n"
-#~ "          shell. Ao desligar essa opção, causa o uid e o gid efetivo serem\n"
+#~ "      -p  Ligado sempre que IDs de usuário real e efetivo não "
+#~ "corresponderem.\n"
+#~ "          Desabilita processamento do arquivo $ENV e importação de "
+#~ "funções da\n"
+#~ "          shell. Ao desligar essa opção, causa o uid e o gid efetivo "
+#~ "serem\n"
 #~ "          os uid e gid reais.\n"
 #~ "      -t  Sai após a leitura e execução de um comando.\n"
-#~ "      -u  Trata limpeza (unset) de variáveis como um erro quando substituindo.\n"
-#~ "      -v  Mostra linhas de entrada do shell na medida em que forem lidas.\n"
-#~ "      -x  Mostra comandos e seus argumentos na medida em que forme executados.\n"
+#~ "      -u  Trata limpeza (unset) de variáveis como um erro quando "
+#~ "substituindo.\n"
+#~ "      -v  Mostra linhas de entrada do shell na medida em que forem "
+#~ "lidas.\n"
+#~ "      -x  Mostra comandos e seus argumentos na medida em que forme "
+#~ "executados.\n"
 #~ "      -B  o shell vai realizar expansão de chaves\n"
 #~ "      -C  Se definido, não permite arquivos normais existentes serem\n"
 #~ "          sobrescritos por redirecionamento da saída.\n"
 #~ "      -E  Se definido, a armadilha ERR é herdada por funções do shell.\n"
-#~ "      -H  Habilita substituição de histórico estilo \"!\". Essa sinalização está\n"
+#~ "      -H  Habilita substituição de histórico estilo \"!\". Essa "
+#~ "sinalização está\n"
 #~ "          habilitada por padrão quando  shell é interativa.\n"
-#~ "      -P  Se definida, não resolve links simbólicos ao sair de comandos, tais\n"
+#~ "      -P  Se definida, não resolve links simbólicos ao sair de comandos, "
+#~ "tais\n"
 #~ "          como `cd' (que altera o diretório atual).\n"
 #~ "      -T  Se definido, a armadilha DEBUG é herdada por funções do shell.\n"
-#~ "      --  Atribui quaisquer argumentos restantes aos parâmetros posicionais.\n"
-#~ "          Se não houver argumentos restantes, os parâmetros posicionais são\n"
+#~ "      --  Atribui quaisquer argumentos restantes aos parâmetros "
+#~ "posicionais.\n"
+#~ "          Se não houver argumentos restantes, os parâmetros posicionais "
+#~ "são\n"
 #~ "          limpos (unset).\n"
-#~ "      -   Atribui quaisquer argumentos restantes aos parâmetros posicionais.\n"
+#~ "      -   Atribui quaisquer argumentos restantes aos parâmetros "
+#~ "posicionais.\n"
 #~ "          As opções -x e -v são desligadas.\n"
 #~ "    \n"
 #~ "    Usar +, ao invés de -, causa essas sinalizações serem desligadas. As\n"
-#~ "    sinalizações também podem ser usadas por meio de chamada do shell. As\n"
-#~ "    sinalizações atualmente definidas podem ser encontradas em $-. Os n ARGs\n"
-#~ "    restantes são parâmetros posicionais e são atribuídos, em ordem, a $1, $2,\n"
+#~ "    sinalizações também podem ser usadas por meio de chamada do shell. "
+#~ "As\n"
+#~ "    sinalizações atualmente definidas podem ser encontradas em $-. Os n "
+#~ "ARGs\n"
+#~ "    restantes são parâmetros posicionais e são atribuídos, em ordem, a "
+#~ "$1, $2,\n"
 #~ "    .. $n. Se nenhuma ARG for fornecido, todas as variáveis shell são\n"
 #~ "    mostradas.\n"
 #~ "    \n"
@@ -6077,8 +6407,10 @@ msgstr ""
 #~ msgid ""
 #~ "Create a coprocess named NAME.\n"
 #~ "    \n"
-#~ "    Execute COMMAND asynchronously, with the standard output and standard\n"
-#~ "    input of the command connected via a pipe to file descriptors assigned\n"
+#~ "    Execute COMMAND asynchronously, with the standard output and "
+#~ "standard\n"
+#~ "    input of the command connected via a pipe to file descriptors "
+#~ "assigned\n"
 #~ "    to indices 0 and 1 of an array variable NAME in the executing shell.\n"
 #~ "    The default NAME is \"COPROC\".\n"
 #~ "    \n"
@@ -6088,7 +6420,8 @@ msgstr ""
 #~ "Cria um coprocesso chamado NOME.\n"
 #~ "    \n"
 #~ "    Executa COMANDO assincronamente, com a saída padrão e entrada padrão\n"
-#~ "    do comando conectados via um `pipe' (redirecionamento) para descritores\n"
+#~ "    do comando conectados via um `pipe' (redirecionamento) para "
+#~ "descritores\n"
 #~ "    de arquivo atribuídos para índices 0 e 1 de uma variável array NOME\n"
 #~ "    no shell em execução. O NOME padrão é \"COPROC\".\n"
 #~ "    \n"
@@ -6211,7 +6544,8 @@ msgstr ""
 #~ msgstr "substituição de comando"
 
 #~ msgid "Can't reopen pipe to command substitution (fd %d): %s"
-#~ msgstr "Impossível reabrir o `pipe' para substituição de comando (fd %d): %s"
+#~ msgstr ""
+#~ "Impossível reabrir o `pipe' para substituição de comando (fd %d): %s"
 
 #~ msgid "$%c: unbound variable"
 #~ msgstr "$%c: variável não associada"
@@ -6295,7 +6629,8 @@ msgstr ""
 #~ msgstr "de aliases na forma `alias NOME=VALOR' na saída padrão."
 
 #~ msgid "Otherwise, an alias is defined for each NAME whose VALUE is given."
-#~ msgstr "Ou então, um alias é definido para cada NOME cujo VALOR for fornecido."
+#~ msgstr ""
+#~ "Ou então, um alias é definido para cada NOME cujo VALOR for fornecido."
 
 #~ msgid "A trailing space in VALUE causes the next word to be checked for"
 #~ msgstr "Um espaço após VALOR faz a próxima palavra ser verificada para"
@@ -6304,34 +6639,45 @@ msgstr ""
 #~ msgstr "substituição do alias quando o alias é expandido. Alias retorna"
 
 #~ msgid "true unless a NAME is given for which no alias has been defined."
-#~ msgstr "verdadeiro, a não ser que seja fornecido um NOME sem alias definido."
+#~ msgstr ""
+#~ "verdadeiro, a não ser que seja fornecido um NOME sem alias definido."
 
-#~ msgid "Remove NAMEs from the list of defined aliases.  If the -a option is given,"
-#~ msgstr "Remove NOMEs da lista de aliases definidos. Se a opção -a for fornecida,"
+#~ msgid ""
+#~ "Remove NAMEs from the list of defined aliases.  If the -a option is given,"
+#~ msgstr ""
+#~ "Remove NOMEs da lista de aliases definidos. Se a opção -a for fornecida,"
 
 #~ msgid "then remove all alias definitions."
 #~ msgstr "então todas as definições de alias são removidas."
 
 #~ msgid "Bind a key sequence to a Readline function, or to a macro.  The"
-#~ msgstr "Víncula uma sequência de teclas a uma função de leitura de linha, ou a uma"
+#~ msgstr ""
+#~ "Víncula uma sequência de teclas a uma função de leitura de linha, ou a uma"
 
 #~ msgid "syntax is equivalent to that found in ~/.inputrc, but must be"
-#~ msgstr "macro.  A sintaxe é equivalente à encontrada em ~/.inputrc, mas deve ser"
+#~ msgstr ""
+#~ "macro.  A sintaxe é equivalente à encontrada em ~/.inputrc, mas deve ser"
 
-#~ msgid "passed as a single argument: bind '\"\\C-x\\C-r\": re-read-init-file'."
-#~ msgstr "passada como um único argumento: bind '\"\\C-x\\C-r\": re-read-init-file'."
+#~ msgid ""
+#~ "passed as a single argument: bind '\"\\C-x\\C-r\": re-read-init-file'."
+#~ msgstr ""
+#~ "passada como um único argumento: bind '\"\\C-x\\C-r\": re-read-init-file'."
 
 #~ msgid "Arguments we accept:"
 #~ msgstr "Argumentos permitidos:"
 
-#~ msgid "  -m  keymap         Use `keymap' as the keymap for the duration of this"
-#~ msgstr "  -m  MAPA-TECLAS    Usar `MAPA-TECLAS' como mapa das teclas pela duração"
+#~ msgid ""
+#~ "  -m  keymap         Use `keymap' as the keymap for the duration of this"
+#~ msgstr ""
+#~ "  -m  MAPA-TECLAS    Usar `MAPA-TECLAS' como mapa das teclas pela duração"
 
 #~ msgid "                     command.  Acceptable keymap names are emacs,"
 #~ msgstr "                     deste comando.  Os nomes aceitos são emacs,"
 
-#~ msgid "                     emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,"
-#~ msgstr "                     emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,"
+#~ msgid ""
+#~ "                     emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,"
+#~ msgstr ""
+#~ "                     emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,"
 
 #~ msgid "                     vi-command, and vi-insert."
 #~ msgstr "                     vi-command, and vi-insert."
@@ -6342,8 +6688,10 @@ msgstr ""
 #~ msgid "  -P                 List function names and bindings."
 #~ msgstr "  -P                 Listar nomes e associações das funções."
 
-#~ msgid "  -p                 List functions and bindings in a form that can be"
-#~ msgstr "  -p                 Listar nomes e associações das funções de uma forma"
+#~ msgid ""
+#~ "  -p                 List functions and bindings in a form that can be"
+#~ msgstr ""
+#~ "  -p                 Listar nomes e associações das funções de uma forma"
 
 #~ msgid "                     reused as input."
 #~ msgstr "                     que pode ser reutilizada como entrada."
@@ -6354,24 +6702,31 @@ msgstr ""
 #~ msgid "  -f  filename       Read key bindings from FILENAME."
 #~ msgstr "  -f  ARQUIVO        Ler os vínculos das teclas em ARQUIVO."
 
-#~ msgid "  -q  function-name  Query about which keys invoke the named function."
+#~ msgid ""
+#~ "  -q  function-name  Query about which keys invoke the named function."
 #~ msgstr "  -q  NOME-FUNÇÃO    Consultar quais teclas chamam esta função."
 
 #~ msgid "  -V                 List variable names and values"
 #~ msgstr "  -V                 Listar os nomes e os valores das variáveis."
 
-#~ msgid "  -v                 List variable names and values in a form that can"
-#~ msgstr "  -v                 Listar os nomes e os valores das variáveis de uma"
+#~ msgid ""
+#~ "  -v                 List variable names and values in a form that can"
+#~ msgstr ""
+#~ "  -v                 Listar os nomes e os valores das variáveis de uma"
 
 #~ msgid "                     be reused as input."
 #~ msgstr "                     forma que pode ser reutilizada como entrada."
 
-#~ msgid "  -S                 List key sequences that invoke macros and their values"
+#~ msgid ""
+#~ "  -S                 List key sequences that invoke macros and their "
+#~ "values"
 #~ msgstr ""
 #~ "  -S                 Listar as sequências de teclas que chamam macros\n"
 #~ "                         e seus valores."
 
-#~ msgid "  -s                 List key sequences that invoke macros and their values in"
+#~ msgid ""
+#~ "  -s                 List key sequences that invoke macros and their "
+#~ "values in"
 #~ msgstr "  -s                 Listar sequências de teclas que chamam macros"
 
 #~ msgid "                     a form that can be reused as input."
@@ -6392,7 +6747,8 @@ msgstr ""
 #~ msgstr "Se N for especificado, prossegue no N-ésimo laço envolvente."
 
 #~ msgid "Run a shell builtin.  This is useful when you wish to rename a"
-#~ msgstr "Executa um comando interno do shell.  Útil quando desejamos substituir"
+#~ msgstr ""
+#~ "Executa um comando interno do shell.  Útil quando desejamos substituir"
 
 #~ msgid "shell builtin to be a function, but need the functionality of the"
 #~ msgstr "um comando interno do shell por uma função, mas necessitamos da"
@@ -6407,10 +6763,12 @@ msgstr ""
 #~ msgstr "para DIR.  A variável $CDPATH define o caminho de procura para"
 
 #~ msgid "the directory containing DIR.  Alternative directory names in CDPATH"
-#~ msgstr "o diretório que contém DIR.  Nomes de diretórios alternativos em CDPATH"
+#~ msgstr ""
+#~ "o diretório que contém DIR.  Nomes de diretórios alternativos em CDPATH"
 
 #~ msgid "are separated by a colon (:).  A null directory name is the same as"
-#~ msgstr "são separados por dois pontos (:).  Um nome de diretório nulo é o mesmo"
+#~ msgstr ""
+#~ "são separados por dois pontos (:).  Um nome de diretório nulo é o mesmo"
 
 #~ msgid "the current directory, i.e. `.'.  If DIR begins with a slash (/),"
 #~ msgstr "que o diretório atual, i.e. `.'.  Se DIR inicia com uma barra (/),"
@@ -6419,15 +6777,20 @@ msgstr ""
 #~ msgstr "então $CDPATH não é usado.  Se o diretório não for encontrado, e a"
 
 #~ msgid "shell option `cdable_vars' is set, then try the word as a variable"
-#~ msgstr "opção `cdable_vars' estiver definida, tentar usar DIR como um nome de"
+#~ msgstr ""
+#~ "opção `cdable_vars' estiver definida, tentar usar DIR como um nome de"
 
 #~ msgid "name.  If that variable has a value, then cd to the value of that"
-#~ msgstr "variável.  Se esta variável tiver valor, então `cd' para o valor desta"
+#~ msgstr ""
+#~ "variável.  Se esta variável tiver valor, então `cd' para o valor desta"
 
-#~ msgid "variable.  The -P option says to use the physical directory structure"
-#~ msgstr "variável.  A opção -P indica para usar a estrutura física do diretório"
+#~ msgid ""
+#~ "variable.  The -P option says to use the physical directory structure"
+#~ msgstr ""
+#~ "variável.  A opção -P indica para usar a estrutura física do diretório"
 
-#~ msgid "instead of following symbolic links; the -L option forces symbolic links"
+#~ msgid ""
+#~ "instead of following symbolic links; the -L option forces symbolic links"
 #~ msgstr "em vez de seguir os vínculos simbólicos; a opção -L força seguir os"
 
 #~ msgid "to be followed."
@@ -6442,19 +6805,27 @@ msgstr ""
 #~ msgid "makes pwd follow symbolic links."
 #~ msgstr "com que `pwd' siga os vínculos simbólicos."
 
-#~ msgid "Runs COMMAND with ARGS ignoring shell functions.  If you have a shell"
-#~ msgstr "Executa COMANDO com ARGs ignorando as funções da shell.  Ex: Havendo"
+#~ msgid ""
+#~ "Runs COMMAND with ARGS ignoring shell functions.  If you have a shell"
+#~ msgstr ""
+#~ "Executa COMANDO com ARGs ignorando as funções da shell.  Ex: Havendo"
 
 #~ msgid "function called `ls', and you wish to call the command `ls', you can"
-#~ msgstr "uma função `ls', e se for necessário executar o comando `ls', executa-se"
+#~ msgstr ""
+#~ "uma função `ls', e se for necessário executar o comando `ls', executa-se"
 
-#~ msgid "say \"command ls\".  If the -p option is given, a default value is used"
-#~ msgstr "\"command ls\".  Se a opção -p for fornecida, o valor padrão é utilizado"
+#~ msgid ""
+#~ "say \"command ls\".  If the -p option is given, a default value is used"
+#~ msgstr ""
+#~ "\"command ls\".  Se a opção -p for fornecida, o valor padrão é utilizado"
 
-#~ msgid "for PATH that is guaranteed to find all of the standard utilities.  If"
-#~ msgstr "para PATH, garantindo-se o encontro de todos os utilitários padrão. Se"
+#~ msgid ""
+#~ "for PATH that is guaranteed to find all of the standard utilities.  If"
+#~ msgstr ""
+#~ "para PATH, garantindo-se o encontro de todos os utilitários padrão. Se"
 
-#~ msgid "the -V or -v option is given, a string is printed describing COMMAND."
+#~ msgid ""
+#~ "the -V or -v option is given, a string is printed describing COMMAND."
 #~ msgstr "a opção -V ou -v for fornecida, é exibida a descrição do COMANDO."
 
 #~ msgid "The -V option produces a more verbose description."
@@ -6505,7 +6876,8 @@ msgstr ""
 #~ msgid "name only."
 #~ msgstr "somente."
 
-#~ msgid "Using `+' instead of `-' turns off the given attribute instead.  When"
+#~ msgid ""
+#~ "Using `+' instead of `-' turns off the given attribute instead.  When"
 #~ msgstr "Usando `+' em vez de `-' faz o atributo ser desabilitado.  Quando"
 
 #~ msgid "used in a function, makes NAMEs local, as with the `local' command."
@@ -6524,7 +6896,8 @@ msgstr ""
 #~ msgstr "Exibe ARGs.  Se -n for fornecido, o caracter final de nova linha é"
 
 #~ msgid "suppressed.  If the -e option is given, interpretation of the"
-#~ msgstr "suprimido.  Se a opção -e for fornecida, a interpretação dos seguintes"
+#~ msgstr ""
+#~ "suprimido.  Se a opção -e for fornecida, a interpretação dos seguintes"
 
 #~ msgid "following backslash-escaped characters is turned on:"
 #~ msgstr "caracteres após a contrabarra é ativada:"
@@ -6562,56 +6935,74 @@ msgstr ""
 #~ msgid "\t\\num\tthe character whose ASCII code is NUM (octal)."
 #~ msgstr "\t\\num\to caracter com código ASCII igual a NUM (octal)."
 
-#~ msgid "You can explicitly turn off the interpretation of the above characters"
-#~ msgstr "Pode-se explicitamente desabilitar a interpretação dos caracteres acima"
+#~ msgid ""
+#~ "You can explicitly turn off the interpretation of the above characters"
+#~ msgstr ""
+#~ "Pode-se explicitamente desabilitar a interpretação dos caracteres acima"
 
 #~ msgid "with the -E option."
 #~ msgstr "através da opção -E."
 
-#~ msgid "Output the ARGs.  If -n is specified, the trailing newline is suppressed."
-#~ msgstr "Exibe ARGS.  Se -n for fornecido, o caracter final de nova linha é suprimido."
+#~ msgid ""
+#~ "Output the ARGs.  If -n is specified, the trailing newline is suppressed."
+#~ msgstr ""
+#~ "Exibe ARGS.  Se -n for fornecido, o caracter final de nova linha é "
+#~ "suprimido."
 
 #~ msgid "Enable and disable builtin shell commands.  This allows"
-#~ msgstr "Habilita e desabilita os comandos internos do shell, permitindo usar"
+#~ msgstr ""
+#~ "Habilita e desabilita os comandos internos do shell, permitindo usar"
 
 #~ msgid "you to use a disk command which has the same name as a shell"
-#~ msgstr "um comando de disco que tenha o mesmo nome do comando interno do shell."
+#~ msgstr ""
+#~ "um comando de disco que tenha o mesmo nome do comando interno do shell."
 
 #~ msgid "builtin.  If -n is used, the NAMEs become disabled; otherwise"
-#~ msgstr "Se -n for especificado, os NOMEs são desabilitados, senão os nomes são"
+#~ msgstr ""
+#~ "Se -n for especificado, os NOMEs são desabilitados, senão os nomes são"
 
 #~ msgid "NAMEs are enabled.  For example, to use the `test' found on your"
-#~ msgstr "habilitados. Por exemplo, para usar `test' encontrado pelo PATH em vez"
+#~ msgstr ""
+#~ "habilitados. Por exemplo, para usar `test' encontrado pelo PATH em vez"
 
 #~ msgid "path instead of the shell builtin version, type `enable -n test'."
-#~ msgstr "da versão interna do comando, digite `enable -n test'. Em sistemas que"
+#~ msgstr ""
+#~ "da versão interna do comando, digite `enable -n test'. Em sistemas que"
 
 #~ msgid "On systems supporting dynamic loading, the -f option may be used"
-#~ msgstr "suportam carregamento dinâmico, pode-se usar a opção -f para carregar"
+#~ msgstr ""
+#~ "suportam carregamento dinâmico, pode-se usar a opção -f para carregar"
 
 #~ msgid "to load new builtins from the shared object FILENAME.  The -d"
-#~ msgstr "novos comandos internos do objeto compartilhado ARQUIVO.  A opção -d"
+#~ msgstr ""
+#~ "novos comandos internos do objeto compartilhado ARQUIVO.  A opção -d"
 
 #~ msgid "option will delete a builtin previously loaded with -f.  If no"
-#~ msgstr "elimina os comandos internos previamente carregados com -f.  Se nenhum"
+#~ msgstr ""
+#~ "elimina os comandos internos previamente carregados com -f.  Se nenhum"
 
 #~ msgid "non-option names are given, or the -p option is supplied, a list"
-#~ msgstr "nome for fornecido, ou se a opção -p for fornecida, uma lista de comandos"
+#~ msgstr ""
+#~ "nome for fornecido, ou se a opção -p for fornecida, uma lista de comandos"
 
 #~ msgid "of builtins is printed.  The -a option means to print every builtin"
-#~ msgstr "internos é exibida.  A opção -a faz com que todos os comandos internos"
+#~ msgstr ""
+#~ "internos é exibida.  A opção -a faz com que todos os comandos internos"
 
 #~ msgid "with an indication of whether or not it is enabled.  The -s option"
 #~ msgstr "sejam exibidos indicando se estão habilitados ou não.  A opção -s"
 
 #~ msgid "restricts the output to the Posix.2 `special' builtins.  The -n"
-#~ msgstr "restringe a saída aos comandos internos `especiais' Posix.2.  A opção"
+#~ msgstr ""
+#~ "restringe a saída aos comandos internos `especiais' Posix.2.  A opção"
 
 #~ msgid "option displays a list of all disabled builtins."
 #~ msgstr "-n exibe a lista de todos os comandos internos desabilitados."
 
-#~ msgid "Read ARGs as input to the shell and execute the resulting command(s)."
-#~ msgstr "Ler ARGs como entrada do shell e executar o(s) comando(s) resultante(s)."
+#~ msgid ""
+#~ "Read ARGs as input to the shell and execute the resulting command(s)."
+#~ msgstr ""
+#~ "Ler ARGs como entrada do shell e executar o(s) comando(s) resultante(s)."
 
 #~ msgid "Getopts is used by shell procedures to parse positional parameters."
 #~ msgstr ""
@@ -6640,13 +7031,15 @@ msgstr ""
 #~ msgstr "shell OPTIND.  OPTIND é inicializado com 1 cada vez que o script"
 
 #~ msgid "a shell script is invoked.  When an option requires an argument,"
-#~ msgstr "do shell é chamado.  Quando uma opção requer um argumento, `getopts'"
+#~ msgstr ""
+#~ "do shell é chamado.  Quando uma opção requer um argumento, `getopts'"
 
 #~ msgid "getopts places that argument into the shell variable OPTARG."
 #~ msgstr "coloca este argumento dentro da variável do shell OPTARG."
 
 #~ msgid "getopts reports errors in one of two ways.  If the first character"
-#~ msgstr "`getopts' informa os erros de duas maneiras.  Se o primeiro caracter de"
+#~ msgstr ""
+#~ "`getopts' informa os erros de duas maneiras.  Se o primeiro caracter de"
 
 #~ msgid "of OPTSTRING is a colon, getopts uses silent error reporting.  In"
 #~ msgstr "OPÇÕES for dois pontos, `getopts' usa o modo silencioso.  Neste"
@@ -6658,19 +7051,24 @@ msgstr ""
 #~ msgstr "encontrada, `getopts' coloca o caracter da opção em OPTARG.  Se um"
 
 #~ msgid "required argument is not found, getopts places a ':' into NAME and"
-#~ msgstr "argumento requerido não for encontrado, `getopts' coloca ':' em  NOME e"
+#~ msgstr ""
+#~ "argumento requerido não for encontrado, `getopts' coloca ':' em  NOME e"
 
 #~ msgid "sets OPTARG to the option character found.  If getopts is not in"
-#~ msgstr "atribui a OPTARG o caracter de opção encontrado. Se `getopts' não está em"
+#~ msgstr ""
+#~ "atribui a OPTARG o caracter de opção encontrado. Se `getopts' não está em"
 
 #~ msgid "silent mode, and an illegal option is seen, getopts places '?' into"
-#~ msgstr "modo silencioso, e uma opção ilegal é encontrada, `getopts' coloca '?' em"
+#~ msgstr ""
+#~ "modo silencioso, e uma opção ilegal é encontrada, `getopts' coloca '?' em"
 
 #~ msgid "NAME and unsets OPTARG.  If a required option is not found, a '?'"
-#~ msgstr "NOME e desativa OPTARG.  Se uma opção requerida não é encontrada, uma '?'"
+#~ msgstr ""
+#~ "NOME e desativa OPTARG.  Se uma opção requerida não é encontrada, uma '?'"
 
 #~ msgid "is placed in NAME, OPTARG is unset, and a diagnostic message is"
-#~ msgstr "é colocada em NOME, OPTARG é desativado, e uma mensagem de diagnóstico é"
+#~ msgstr ""
+#~ "é colocada em NOME, OPTARG é desativado, e uma mensagem de diagnóstico é"
 
 #~ msgid "printed."
 #~ msgstr "exibida."
@@ -6685,16 +7083,19 @@ msgstr ""
 #~ msgstr "OPTSTRING não seja dois pontos.  OPTERR tem o valor 1 por padrão."
 
 #~ msgid "Getopts normally parses the positional parameters ($0 - $9), but if"
-#~ msgstr "`getopts' normalmente faz a leitura dos parãmetros posicionais ($0 - $9),"
+#~ msgstr ""
+#~ "`getopts' normalmente faz a leitura dos parãmetros posicionais ($0 - $9),"
 
 #~ msgid "more arguments are given, they are parsed instead."
 #~ msgstr "mas, se mais argumentos forem fornecidos, então estes são lidos."
 
 #~ msgid "Exec FILE, replacing this shell with the specified program."
-#~ msgstr "Executa ARQUIVO, substituindo esta shell pelo programa especificado."
+#~ msgstr ""
+#~ "Executa ARQUIVO, substituindo esta shell pelo programa especificado."
 
 #~ msgid "If FILE is not specified, the redirections take effect in this"
-#~ msgstr "Se ARQUIVO não for especificado, os redirecionamentos são efetivados"
+#~ msgstr ""
+#~ "Se ARQUIVO não for especificado, os redirecionamentos são efetivados"
 
 #~ msgid "shell.  If the first argument is `-l', then place a dash in the"
 #~ msgstr "neste shell.  Se o primeiro argumento for `-l', coloca um hífen no"
@@ -6712,7 +7113,8 @@ msgstr ""
 #~ msgstr "Se o arquivo não puder ser executado e o shell não for interativa,"
 
 #~ msgid "then the shell exits, unless the variable \"no_exit_on_failed_exec\""
-#~ msgstr "então o shell termina, a menos que a variável \"no_exit_on_failed_exec\""
+#~ msgstr ""
+#~ "então o shell termina, a menos que a variável \"no_exit_on_failed_exec\""
 
 #~ msgid "is set."
 #~ msgstr "esteja inicializada."
@@ -6720,7 +7122,8 @@ msgstr ""
 #~ msgid "is that of the last command executed."
 #~ msgstr "de saída é igual ao do último comando executado."
 
-#~ msgid "FIRST and LAST can be numbers specifying the range, or FIRST can be a"
+#~ msgid ""
+#~ "FIRST and LAST can be numbers specifying the range, or FIRST can be a"
 #~ msgstr "PRIMEIRO e ÚLTIMO podem ser números especificando o intervalo, ou"
 
 #~ msgid "string, which means the most recent command beginning with that"
@@ -6729,11 +7132,16 @@ msgstr ""
 #~ msgid "string."
 #~ msgstr "mais recente começado por estes caracteres."
 
-#~ msgid "   -e ENAME selects which editor to use.  Default is FCEDIT, then EDITOR,"
-#~ msgstr "   -e EDITOR seleciona qual editor usar.  O padrão é FCEDIT, depois EDITOR,"
+#~ msgid ""
+#~ "   -e ENAME selects which editor to use.  Default is FCEDIT, then EDITOR,"
+#~ msgstr ""
+#~ "   -e EDITOR seleciona qual editor usar.  O padrão é FCEDIT, depois "
+#~ "EDITOR,"
 
-#~ msgid "      then the editor which corresponds to the current readline editing"
-#~ msgstr "      depois o editor correspondente ao modo de edição atual da leitura"
+#~ msgid ""
+#~ "      then the editor which corresponds to the current readline editing"
+#~ msgstr ""
+#~ "      depois o editor correspondente ao modo de edição atual da leitura"
 
 #~ msgid "      mode, then vi."
 #~ msgstr "      de linha, e depois o vi."
@@ -6744,32 +7152,40 @@ msgstr ""
 #~ msgid "   -n means no line numbers listed."
 #~ msgstr "   -n indica para não listar os números das linhas."
 
-#~ msgid "   -r means reverse the order of the lines (making it newest listed first)."
-#~ msgstr "   -r faz reverter a ordem das linhas (a última torna-se a primeira)."
+#~ msgid ""
+#~ "   -r means reverse the order of the lines (making it newest listed "
+#~ "first)."
+#~ msgstr ""
+#~ "   -r faz reverter a ordem das linhas (a última torna-se a primeira)."
 
 #~ msgid "With the `fc -s [pat=rep ...] [command]' format, the command is"
-#~ msgstr "No formato `fc -s [ANTIGO=NOVO ...] [COMANDO]', o comando é executado"
+#~ msgstr ""
+#~ "No formato `fc -s [ANTIGO=NOVO ...] [COMANDO]', o comando é executado"
 
 #~ msgid "re-executed after the substitution OLD=NEW is performed."
 #~ msgstr "novamente após a substituição de ANTIGO por NOVO ser realizada."
 
 #~ msgid "A useful alias to use with this is r='fc -s', so that typing `r cc'"
-#~ msgstr "Um alias útil a ser usado é r='fc -s' para que, ao se digitar `r cc',"
+#~ msgstr ""
+#~ "Um alias útil a ser usado é r='fc -s' para que, ao se digitar `r cc',"
 
 #~ msgid "runs the last command beginning with `cc' and typing `r' re-executes"
 #~ msgstr "seja executado o último comando começado por `cc' e, ao se digitar"
 
 #~ msgid "Place JOB_SPEC in the foreground, and make it the current job.  If"
-#~ msgstr "Colocar JOB-ESPECIFICADO no primeiro plano, e torná-lo o trabalho atual."
+#~ msgstr ""
+#~ "Colocar JOB-ESPECIFICADO no primeiro plano, e torná-lo o trabalho atual."
 
 #~ msgid "JOB_SPEC is not present, the shell's notion of the current job is"
-#~ msgstr "Se JOB-ESPECIFICADO não estiver presente, a noção do shell do trabalho"
+#~ msgstr ""
+#~ "Se JOB-ESPECIFICADO não estiver presente, a noção do shell do trabalho"
 
 #~ msgid "used."
 #~ msgstr "atual é utilizada."
 
 #~ msgid "Place JOB_SPEC in the background, as if it had been started with"
-#~ msgstr "Colocar JOB-ESPECIFICADO no segundo plano, como se tivesse sido ativado"
+#~ msgstr ""
+#~ "Colocar JOB-ESPECIFICADO no segundo plano, como se tivesse sido ativado"
 
 #~ msgid "`&'.  If JOB_SPEC is not present, the shell's notion of the current"
 #~ msgstr "com `&'. Se JOB-ESPECIFICADO não estiver presente, a noção do shell"
@@ -6778,18 +7194,22 @@ msgstr ""
 #~ msgstr "do trabalho atual é utilizada."
 
 #~ msgid "For each NAME, the full pathname of the command is determined and"
-#~ msgstr "Para cada NOME, o caminho completo do comando é determinado e lembrado."
+#~ msgstr ""
+#~ "Para cada NOME, o caminho completo do comando é determinado e lembrado."
 
 #~ msgid "remembered.  If the -p option is supplied, PATHNAME is used as the"
-#~ msgstr "Se a opção -p for fornecida, CAMINHO é utilizado como o caminho completo"
+#~ msgstr ""
+#~ "Se a opção -p for fornecida, CAMINHO é utilizado como o caminho completo"
 
 #~ msgid "full pathname of NAME, and no path search is performed.  The -r"
 #~ msgstr "para NOME, e nenhuma procura de caminho é realizada.  A opção -r"
 
 #~ msgid "option causes the shell to forget all remembered locations.  If no"
-#~ msgstr "faz com que a shell esqueça todas as localizações lembradas.  Sem nenhum"
+#~ msgstr ""
+#~ "faz com que a shell esqueça todas as localizações lembradas.  Sem nenhum"
 
-#~ msgid "arguments are given, information about remembered commands is displayed."
+#~ msgid ""
+#~ "arguments are given, information about remembered commands is displayed."
 #~ msgstr "argumento, as informações sobre os comandos lembrados são exibidas."
 
 #~ msgid "Display helpful information about builtin commands.  If PATTERN is"
@@ -6799,10 +7219,12 @@ msgstr ""
 #~ msgstr "especificado, fornece ajuda detalhada para todos os comandos que"
 
 #~ msgid "otherwise a list of the builtins is printed."
-#~ msgstr "correspondem ao PADRÃO, senão a lista dos comandos internos é exibida."
+#~ msgstr ""
+#~ "correspondem ao PADRÃO, senão a lista dos comandos internos é exibida."
 
 #~ msgid "Display the history list with line numbers.  Lines listed with"
-#~ msgstr "Exibe a lista histórica com os números das linhas. Linhas contendo um"
+#~ msgstr ""
+#~ "Exibe a lista histórica com os números das linhas. Linhas contendo um"
 
 #~ msgid "with a `*' have been modified.  Argument of N says to list only"
 #~ msgstr "`*' foram modificadas.  O argumento N faz listar somente as últimas"
@@ -6810,14 +7232,19 @@ msgstr ""
 #~ msgid "the last N lines.  The -c option causes the history list to be"
 #~ msgstr "N linhas.  A opção -c faz com que a lista histórica seja apagada"
 
-#~ msgid "cleared by deleting all of the entries.  The `-w' option writes out the"
-#~ msgstr "removendo todas as entradas.  A opção `-w' escreve o histórico atual no"
+#~ msgid ""
+#~ "cleared by deleting all of the entries.  The `-w' option writes out the"
+#~ msgstr ""
+#~ "removendo todas as entradas.  A opção `-w' escreve o histórico atual no"
 
-#~ msgid "current history to the history file;  `-r' means to read the file and"
-#~ msgstr "arquivo de histórico;  A opção `-r' significa ler o arquivo e apensar seu"
+#~ msgid ""
+#~ "current history to the history file;  `-r' means to read the file and"
+#~ msgstr ""
+#~ "arquivo de histórico;  A opção `-r' significa ler o arquivo e apensar seu"
 
 #~ msgid "append the contents to the history list instead.  `-a' means"
-#~ msgstr "conteúdo à lista histórica.  A opção `-a' significa apensar as linhas de"
+#~ msgstr ""
+#~ "conteúdo à lista histórica.  A opção `-a' significa apensar as linhas de"
 
 #~ msgid "to append history lines from this session to the history file."
 #~ msgstr "histórico desta sessão ao arquivo de histórico."
@@ -6826,82 +7253,113 @@ msgstr ""
 #~ msgstr "A opção `-n' faz ler todas as linhas de histórico ainda não lidas"
 
 #~ msgid "from the history file and append them to the history list.  If"
-#~ msgstr "do arquivo histórico, e apensá-las à lista de histórico.  Se ARQUIVO"
+#~ msgstr ""
+#~ "do arquivo histórico, e apensá-las à lista de histórico.  Se ARQUIVO"
 
 #~ msgid "FILENAME is given, then that is used as the history file else"
 #~ msgstr "for fornecido, então este é usado como arquivo de histórico, senão"
 
 #~ msgid "if $HISTFILE has a value, that is used, else ~/.bash_history."
-#~ msgstr "se $HISTFILE possui valor, este é usado, senão ~/.bash_history.  Se a"
+#~ msgstr ""
+#~ "se $HISTFILE possui valor, este é usado, senão ~/.bash_history.  Se a"
 
 #~ msgid "If the -s option is supplied, the non-option ARGs are appended to"
-#~ msgstr "opção -s for fornecida, os ARGs, que não forem opções, são apensados à"
+#~ msgstr ""
+#~ "opção -s for fornecida, os ARGs, que não forem opções, são apensados à"
 
 #~ msgid "the history list as a single entry.  The -p option means to perform"
-#~ msgstr "lista histórica como uma única entrada. A opção -p significa realizar a"
+#~ msgstr ""
+#~ "lista histórica como uma única entrada. A opção -p significa realizar a"
 
-#~ msgid "history expansion on each ARG and display the result, without storing"
-#~ msgstr "expansão da história em cada ARG e exibir o resultado, sem armazenar"
+#~ msgid ""
+#~ "history expansion on each ARG and display the result, without storing"
+#~ msgstr ""
+#~ "expansão da história em cada ARG e exibir o resultado, sem armazenar"
 
 #~ msgid "anything in the history list."
 #~ msgstr "nada na lista de histórico."
 
 #~ msgid "Lists the active jobs.  The -l option lists process id's in addition"
-#~ msgstr "Lista os trabalhos ativos.  A opção -l lista os ID's dos processos além"
+#~ msgstr ""
+#~ "Lista os trabalhos ativos.  A opção -l lista os ID's dos processos além"
 
 #~ msgid "to the normal information; the -p option lists process id's only."
-#~ msgstr "das informações usuais;  a opção -p lista somente os ID's dos processos."
+#~ msgstr ""
+#~ "das informações usuais;  a opção -p lista somente os ID's dos processos."
 
-#~ msgid "If -n is given, only processes that have changed status since the last"
-#~ msgstr "Se -n for fornecido, somente os processos que mudaram de status desde a"
+#~ msgid ""
+#~ "If -n is given, only processes that have changed status since the last"
+#~ msgstr ""
+#~ "Se -n for fornecido, somente os processos que mudaram de status desde a"
 
-#~ msgid "notification are printed.  JOBSPEC restricts output to that job.  The"
-#~ msgstr "última notificação são exibidos.  JOB-ESPECIFICADO restringe a saída a este"
+#~ msgid ""
+#~ "notification are printed.  JOBSPEC restricts output to that job.  The"
+#~ msgstr ""
+#~ "última notificação são exibidos.  JOB-ESPECIFICADO restringe a saída a "
+#~ "este"
 
 #~ msgid "-r and -s options restrict output to running and stopped jobs only,"
-#~ msgstr "trabalho.  As opções -r e -s restringem a saída apenas aos trabalhos"
+#~ msgstr ""
+#~ "trabalho.  As opções -r e -s restringem a saída apenas aos trabalhos"
 
 #~ msgid "respectively.  Without options, the status of all active jobs is"
-#~ msgstr "executando e parados, respectivamente.  Sem opções, o status de todos os"
+#~ msgstr ""
+#~ "executando e parados, respectivamente.  Sem opções, o status de todos os"
 
-#~ msgid "printed.  If -x is given, COMMAND is run after all job specifications"
-#~ msgstr "trabalhos ativos são exibidos.  Se -x for fornecido, COMANDO é executado"
+#~ msgid ""
+#~ "printed.  If -x is given, COMMAND is run after all job specifications"
+#~ msgstr ""
+#~ "trabalhos ativos são exibidos.  Se -x for fornecido, COMANDO é executado"
 
-#~ msgid "that appear in ARGS have been replaced with the process ID of that job's"
-#~ msgstr "após todas as especificações de trabalho que aparecem em ARGS terem sido"
+#~ msgid ""
+#~ "that appear in ARGS have been replaced with the process ID of that job's"
+#~ msgstr ""
+#~ "após todas as especificações de trabalho que aparecem em ARGS terem sido"
 
 #~ msgid "process group leader."
 #~ msgstr "substituídas pelo ID do processo líder deste grupo de processos."
 
 #~ msgid "Removes each JOBSPEC argument from the table of active jobs."
-#~ msgstr "Remove cada argumento JOB-ESPECIFICADO da tabela de trabalhos ativos."
+#~ msgstr ""
+#~ "Remove cada argumento JOB-ESPECIFICADO da tabela de trabalhos ativos."
 
 #~ msgid "Send the processes named by PID (or JOB) the signal SIGSPEC.  If"
-#~ msgstr "Envia ao processo identificado pelo PID (ou JOB) o sinal SIGSPEC.  Se"
+#~ msgstr ""
+#~ "Envia ao processo identificado pelo PID (ou JOB) o sinal SIGSPEC.  Se"
 
-#~ msgid "SIGSPEC is not present, then SIGTERM is assumed.  An argument of `-l'"
-#~ msgstr "SIGSPEC não estiver presente, então SIGTERM é assumido.  A opção `-l'"
+#~ msgid ""
+#~ "SIGSPEC is not present, then SIGTERM is assumed.  An argument of `-l'"
+#~ msgstr ""
+#~ "SIGSPEC não estiver presente, então SIGTERM é assumido.  A opção `-l'"
 
 #~ msgid "lists the signal names; if arguments follow `-l' they are assumed to"
-#~ msgstr "lista os nomes dos sinais;  havendo argumentos após `-l', são assumidos"
+#~ msgstr ""
+#~ "lista os nomes dos sinais;  havendo argumentos após `-l', são assumidos"
 
 #~ msgid "be signal numbers for which names should be listed.  Kill is a shell"
-#~ msgstr "como sendo os números dos sinais cujos nomes devem ser exibidos.  Kill"
+#~ msgstr ""
+#~ "como sendo os números dos sinais cujos nomes devem ser exibidos.  Kill"
 
 #~ msgid "builtin for two reasons: it allows job IDs to be used instead of"
-#~ msgstr "é um comando interno por duas razões: permite o uso do ID do trabalho em"
+#~ msgstr ""
+#~ "é um comando interno por duas razões: permite o uso do ID do trabalho em"
 
 #~ msgid "process IDs, and, if you have reached the limit on processes that"
-#~ msgstr "vez do ID do processo e, caso tenha sido atingido o limite de processos que"
+#~ msgstr ""
+#~ "vez do ID do processo e, caso tenha sido atingido o limite de processos "
+#~ "que"
 
-#~ msgid "you can create, you don't have to start a process to kill another one."
-#~ msgstr "podem ser criados, não é necessário um novo processo para remover outro."
+#~ msgid ""
+#~ "you can create, you don't have to start a process to kill another one."
+#~ msgstr ""
+#~ "podem ser criados, não é necessário um novo processo para remover outro."
 
 #~ msgid "Each ARG is an arithmetic expression to be evaluated.  Evaluation"
 #~ msgstr "Cada ARG é uma expressão aritmética a ser avaliada.  A avaliação é"
 
 #~ msgid "is done in long integers with no check for overflow, though division"
-#~ msgstr "feita usando inteiros longos sem verificar estouro, embora a divisão"
+#~ msgstr ""
+#~ "feita usando inteiros longos sem verificar estouro, embora a divisão"
 
 #~ msgid "by 0 is trapped and flagged as an error.  The following list of"
 #~ msgstr "por 0 seja capturada e indicada como erro.  A lista abaixo está"
@@ -6973,7 +7431,8 @@ msgstr ""
 #~ msgstr "ativo para ser usada em uma expressão."
 
 #~ msgid "Operators are evaluated in order of precedence.  Sub-expressions in"
-#~ msgstr "Os operadores são avaliados em ordem de precedência.  Sub-expressões"
+#~ msgstr ""
+#~ "Os operadores são avaliados em ordem de precedência.  Sub-expressões"
 
 #~ msgid "parentheses are evaluated first and may override the precedence"
 #~ msgstr "entre parênteses são avaliadas primeiro e podem prevalecer sobre as"
@@ -6990,53 +7449,76 @@ msgstr ""
 #~ msgid "One line is read from the standard input, and the first word is"
 #~ msgstr "Uma linha é lida a partir da entrada padrão, e a primeira palavra é"
 
-#~ msgid "assigned to the first NAME, the second word to the second NAME, and so"
-#~ msgstr "atribuída ao primeiro NOME, a segunda ao segundo NOME, e assim por diante,"
+#~ msgid ""
+#~ "assigned to the first NAME, the second word to the second NAME, and so"
+#~ msgstr ""
+#~ "atribuída ao primeiro NOME, a segunda ao segundo NOME, e assim por diante,"
 
-#~ msgid "on, with leftover words assigned to the last NAME.  Only the characters"
-#~ msgstr "com as palavras restantes atribuídas ao último NOME.  Somente os caracteres"
+#~ msgid ""
+#~ "on, with leftover words assigned to the last NAME.  Only the characters"
+#~ msgstr ""
+#~ "com as palavras restantes atribuídas ao último NOME.  Somente os "
+#~ "caracteres"
 
 #~ msgid "found in $IFS are recognized as word delimiters.  The return code is"
-#~ msgstr "encontrados em $IFS são reconhecidos como delimitadores. O código de retorno"
+#~ msgstr ""
+#~ "encontrados em $IFS são reconhecidos como delimitadores. O código de "
+#~ "retorno"
 
-#~ msgid "zero, unless end-of-file is encountered.  If no NAMEs are supplied, the"
-#~ msgstr "é zero, a menos que EOF seja encontrado.  Se nenhum NOME for fornecido,"
+#~ msgid ""
+#~ "zero, unless end-of-file is encountered.  If no NAMEs are supplied, the"
+#~ msgstr ""
+#~ "é zero, a menos que EOF seja encontrado.  Se nenhum NOME for fornecido,"
 
-#~ msgid "line read is stored in the REPLY variable.  If the -r option is given,"
-#~ msgstr "a linha lida é armazenada na variável REPLY.  Se a opção -r for fornecida,"
+#~ msgid ""
+#~ "line read is stored in the REPLY variable.  If the -r option is given,"
+#~ msgstr ""
+#~ "a linha lida é armazenada na variável REPLY.  Se a opção -r for fornecida,"
 
 #~ msgid "this signifies `raw' input, and backslash escaping is disabled.  If"
-#~ msgstr "significa entrada `textual', desabilitando a interpretação da contrabarra."
+#~ msgstr ""
+#~ "significa entrada `textual', desabilitando a interpretação da contrabarra."
 
 #~ msgid "the `-p' option is supplied, the string supplied as an argument is"
-#~ msgstr "Se a opção `-p' for fornecida a MENSAGEM fornecida como argumento é exibida,"
+#~ msgstr ""
+#~ "Se a opção `-p' for fornecida a MENSAGEM fornecida como argumento é "
+#~ "exibida,"
 
-#~ msgid "output without a trailing newline before attempting to read.  If -a is"
-#~ msgstr "sem o caracter de nova linha, antes de efetuar a leitura.  Se a opção -a"
+#~ msgid ""
+#~ "output without a trailing newline before attempting to read.  If -a is"
+#~ msgstr ""
+#~ "sem o caracter de nova linha, antes de efetuar a leitura.  Se a opção -a"
 
-#~ msgid "supplied, the words read are assigned to sequential indices of ARRAY,"
-#~ msgstr "for fornecida, as palavras lidas são atribuídas aos índices sequenciais"
+#~ msgid ""
+#~ "supplied, the words read are assigned to sequential indices of ARRAY,"
+#~ msgstr ""
+#~ "for fornecida, as palavras lidas são atribuídas aos índices sequenciais"
 
 #~ msgid "starting at zero.  If -e is supplied and the shell is interactive,"
-#~ msgstr "do ARRAY, começando por zero.  Se a opção -e for fornecida, e a shell for"
+#~ msgstr ""
+#~ "do ARRAY, começando por zero.  Se a opção -e for fornecida, e a shell for"
 
 #~ msgid "readline is used to obtain the line."
 #~ msgstr "interativa, `readline' é utilizado para ler a linha."
 
-#~ msgid "Causes a function to exit with the return value specified by N.  If N"
+#~ msgid ""
+#~ "Causes a function to exit with the return value specified by N.  If N"
 #~ msgstr "Faz a função terminar com o valor de retorno especificado por N."
 
 #~ msgid "is omitted, the return status is that of the last command."
 #~ msgstr "Se N for omitido, retorna o status do último comando executado."
 
 #~ msgid "    -a  Mark variables which are modified or created for export."
-#~ msgstr "    -a  Marcar para exportação as variáveis que são criadas ou modificadas."
+#~ msgstr ""
+#~ "    -a  Marcar para exportação as variáveis que são criadas ou "
+#~ "modificadas."
 
 #~ msgid "    -b  Notify of job termination immediately."
 #~ msgstr "    -b  Notificar imediatamente o término do trabalho."
 
 #~ msgid "    -e  Exit immediately if a command exits with a non-zero status."
-#~ msgstr "    -e  Terminar imediatamente se um comando terminar com status != 0."
+#~ msgstr ""
+#~ "    -e  Terminar imediatamente se um comando terminar com status != 0."
 
 #~ msgid "    -f  Disable file name generation (globbing)."
 #~ msgstr "    -f  Desabilitar a geração de nome de arquivo (metacaracteres)."
@@ -7044,14 +7526,16 @@ msgstr ""
 #~ msgid "    -h  Remember the location of commands as they are looked up."
 #~ msgstr "    -h  Lembrar da localização dos comandos ao procurá-los."
 
-#~ msgid "    -i  Force the shell to be an \"interactive\" one.  Interactive shells"
+#~ msgid ""
+#~ "    -i  Force the shell to be an \"interactive\" one.  Interactive shells"
 #~ msgstr "    -i  Forçar a shell ser do tipo \"interativa\".  `Shells'"
 
 #~ msgid "        always read `~/.bashrc' on startup."
 #~ msgstr "        interativas sempre lêem `~/.bashrc' ao iniciar."
 
 #~ msgid "    -k  All assignment arguments are placed in the environment for a"
-#~ msgstr "    -k  Todos os argumentos de atribuição são colocados no ambiente,"
+#~ msgstr ""
+#~ "    -k  Todos os argumentos de atribuição são colocados no ambiente,"
 
 #~ msgid "        command, not just those that precede the command name."
 #~ msgstr "        e não somente os que precedem o nome do comando."
@@ -7075,7 +7559,8 @@ msgstr ""
 #~ msgstr "            braceexpand  o mesmo que -B"
 
 #~ msgid "            emacs        use an emacs-style line editing interface"
-#~ msgstr "            emacs        usar interface de edição de linha estilo emacs"
+#~ msgstr ""
+#~ "            emacs        usar interface de edição de linha estilo emacs"
 
 #~ msgid "            errexit      same as -e"
 #~ msgstr "            errexit      o mesmo que -e"
@@ -7092,8 +7577,10 @@ msgstr ""
 #~ msgid "            interactive-comments"
 #~ msgstr "            interactive-comments"
 
-#~ msgid "                         allow comments to appear in interactive commands"
-#~ msgstr "                         permite comentários em comandos interativos"
+#~ msgid ""
+#~ "                         allow comments to appear in interactive commands"
+#~ msgstr ""
+#~ "                         permite comentários em comandos interativos"
 
 #~ msgid "            keyword      same as -k"
 #~ msgstr "            keyword      o mesmo que -k"
@@ -7122,11 +7609,15 @@ msgstr ""
 #~ msgid "            physical     same as -P"
 #~ msgstr "            physical     o mesmo que -P"
 
-#~ msgid "            posix        change the behavior of bash where the default"
-#~ msgstr "            posix        mudar o comportamento do `bash' onde o padrão"
+#~ msgid ""
+#~ "            posix        change the behavior of bash where the default"
+#~ msgstr ""
+#~ "            posix        mudar o comportamento do `bash' onde o padrão"
 
-#~ msgid "                         operation differs from the 1003.2 standard to"
-#~ msgstr "                         for diferente do padrão 1003.2, para tornar"
+#~ msgid ""
+#~ "                         operation differs from the 1003.2 standard to"
+#~ msgstr ""
+#~ "                         for diferente do padrão 1003.2, para tornar"
 
 #~ msgid "                         match the standard"
 #~ msgstr "                         igual ao padrão"
@@ -7138,19 +7629,26 @@ msgstr ""
 #~ msgstr "            verbose      o mesmo que -v"
 
 #~ msgid "            vi           use a vi-style line editing interface"
-#~ msgstr "            vi           usar interface de edição de linha estilo vi"
+#~ msgstr ""
+#~ "            vi           usar interface de edição de linha estilo vi"
 
 #~ msgid "            xtrace       same as -x"
 #~ msgstr "            xtrace       o mesmo que -x"
 
-#~ msgid "    -p  Turned on whenever the real and effective user ids do not match."
-#~ msgstr "    -p  Habilitado sempre que o usuário real e efetivo forem diferentes."
+#~ msgid ""
+#~ "    -p  Turned on whenever the real and effective user ids do not match."
+#~ msgstr ""
+#~ "    -p  Habilitado sempre que o usuário real e efetivo forem diferentes."
 
 #~ msgid "        Disables processing of the $ENV file and importing of shell"
-#~ msgstr "        Desabilita o processamento do arquivo $ENV e importação das funções"
+#~ msgstr ""
+#~ "        Desabilita o processamento do arquivo $ENV e importação das "
+#~ "funções"
 
-#~ msgid "        functions.  Turning this option off causes the effective uid and"
-#~ msgstr "        da shell.  Desabilitando esta opção faz com que o `uid' e `gid'"
+#~ msgid ""
+#~ "        functions.  Turning this option off causes the effective uid and"
+#~ msgstr ""
+#~ "        da shell.  Desabilitando esta opção faz com que o `uid' e `gid'"
 
 #~ msgid "        gid to be set to the real uid and gid."
 #~ msgstr "        efetivos sejam feitos o mesmo que o `uid' e `gid' reais."
@@ -7159,7 +7657,8 @@ msgstr ""
 #~ msgstr "    -t  Sair após ler e executar um comando."
 
 #~ msgid "    -u  Treat unset variables as an error when substituting."
-#~ msgstr "    -u  Tratar como erro as variáveis não inicializadas na substituição."
+#~ msgstr ""
+#~ "    -u  Tratar como erro as variáveis não inicializadas na substituição."
 
 #~ msgid "    -v  Print shell input lines as they are read."
 #~ msgstr "    -v  Exibir as linhas de entrada da shell ao lê-las."
@@ -7192,10 +7691,13 @@ msgstr ""
 #~ msgstr "Usando + em vez de - faz com que as opções sejam desabilitadas. As"
 
 #~ msgid "flags can also be used upon invocation of the shell.  The current"
-#~ msgstr "opções também podem ser usadas na chamada da shell.  O conjunto atual"
+#~ msgstr ""
+#~ "opções também podem ser usadas na chamada da shell.  O conjunto atual"
 
-#~ msgid "set of flags may be found in $-.  The remaining n ARGs are positional"
-#~ msgstr "de opções pode ser encontrado em $-. Os n ARGs restantes são parâmetros"
+#~ msgid ""
+#~ "set of flags may be found in $-.  The remaining n ARGs are positional"
+#~ msgstr ""
+#~ "de opções pode ser encontrado em $-. Os n ARGs restantes são parâmetros"
 
 #~ msgid "parameters and are assigned, in order, to $1, $2, .. $n.  If no"
 #~ msgstr "posicionais e são atribuídos, em ordem, a $1, $2, .. $n.  Se nenhum"
@@ -7204,10 +7706,12 @@ msgstr ""
 #~ msgstr "ARG for fornecido, todas as variáveis da shell são exibidas."
 
 #~ msgid "For each NAME, remove the corresponding variable or function.  Given"
-#~ msgstr "Para cada NOME, remove a variável ou a função correspondente.  Usando-se a"
+#~ msgstr ""
+#~ "Para cada NOME, remove a variável ou a função correspondente.  Usando-se a"
 
 #~ msgid "the `-v', unset will only act on variables.  Given the `-f' flag,"
-#~ msgstr "opção `-v', `unset' atua somente nas variáveis.  Usando-se a opção `-f'"
+#~ msgstr ""
+#~ "opção `-v', `unset' atua somente nas variáveis.  Usando-se a opção `-f'"
 
 #~ msgid "unset will only act on functions.  With neither flag, unset first"
 #~ msgstr "`unset' atua somente nas funções.  Sem nenhuma opção, inicialmente"
@@ -7215,26 +7719,32 @@ msgstr ""
 #~ msgid "tries to unset a variable, and if that fails, then tries to unset a"
 #~ msgstr "`unset' tenta remover uma variável e, se falhar, tenta remover uma"
 
-#~ msgid "function.  Some variables (such as PATH and IFS) cannot be unset; also"
-#~ msgstr "função.  Algumas variáveis (como PATH e IFS) não podem ser removidas."
+#~ msgid ""
+#~ "function.  Some variables (such as PATH and IFS) cannot be unset; also"
+#~ msgstr ""
+#~ "função.  Algumas variáveis (como PATH e IFS) não podem ser removidas."
 
 #~ msgid "see readonly."
 #~ msgstr "Veja também o comando `readonly'."
 
 #~ msgid "NAMEs are marked for automatic export to the environment of"
-#~ msgstr "NOMEs são marcados para serem automaticamente exportados para o ambiente"
+#~ msgstr ""
+#~ "NOMEs são marcados para serem automaticamente exportados para o ambiente"
 
 #~ msgid "subsequently executed commands.  If the -f option is given,"
 #~ msgstr "dos comando executados a seguir.  Se a opção -f for fornecida,"
 
 #~ msgid "the NAMEs refer to functions.  If no NAMEs are given, or if `-p'"
-#~ msgstr "os NOMEs se referem a funções.  Se nenhum nome for fornecido, ou se `-p'"
+#~ msgstr ""
+#~ "os NOMEs se referem a funções.  Se nenhum nome for fornecido, ou se `-p'"
 
 #~ msgid "is given, a list of all names that are exported in this shell is"
-#~ msgstr "for usado, uma lista com todos os nomes que são exportados nesta shell é"
+#~ msgstr ""
+#~ "for usado, uma lista com todos os nomes que são exportados nesta shell é"
 
 #~ msgid "printed.  An argument of `-n' says to remove the export property"
-#~ msgstr "exibida.  O argumento `-n' faz remover a propriedade de exportação dos"
+#~ msgstr ""
+#~ "exibida.  O argumento `-n' faz remover a propriedade de exportação dos"
 
 #~ msgid "from subsequent NAMEs.  An argument of `--' disables further option"
 #~ msgstr "NOMEs subsequentes.  O argumento `--' desabilita o processamento de"
@@ -7242,29 +7752,40 @@ msgstr ""
 #~ msgid "processing."
 #~ msgstr "opções posteriores."
 
-#~ msgid "The given NAMEs are marked readonly and the values of these NAMEs may"
-#~ msgstr "Os NOMEs são marcados como somente para leitura, e os valores destes"
+#~ msgid ""
+#~ "The given NAMEs are marked readonly and the values of these NAMEs may"
+#~ msgstr ""
+#~ "Os NOMEs são marcados como somente para leitura, e os valores destes"
 
 #~ msgid "not be changed by subsequent assignment.  If the -f option is given,"
-#~ msgstr "NOMEs não poderão ser alterados por novas atribuições.  Se a opção -f for"
+#~ msgstr ""
+#~ "NOMEs não poderão ser alterados por novas atribuições.  Se a opção -f for"
 
 #~ msgid "then functions corresponding to the NAMEs are so marked.  If no"
-#~ msgstr "fornecida, as funções correspondentes a NOMEs também são marcadas.  Sem"
+#~ msgstr ""
+#~ "fornecida, as funções correspondentes a NOMEs também são marcadas.  Sem"
 
-#~ msgid "arguments are given, or if `-p' is given, a list of all readonly names"
-#~ msgstr "nenhum argumento, ou se `-p' for usado, uma lista com todos os nomes"
+#~ msgid ""
+#~ "arguments are given, or if `-p' is given, a list of all readonly names"
+#~ msgstr ""
+#~ "nenhum argumento, ou se `-p' for usado, uma lista com todos os nomes"
 
-#~ msgid "is printed.  An argument of `-n' says to remove the readonly property"
-#~ msgstr "somente para leitura é exibida.  O argumento `-n' remove a propriedade"
+#~ msgid ""
+#~ "is printed.  An argument of `-n' says to remove the readonly property"
+#~ msgstr ""
+#~ "somente para leitura é exibida.  O argumento `-n' remove a propriedade"
 
 #~ msgid "from subsequent NAMEs.  The `-a' option means to treat each NAME as"
 #~ msgstr "somente para leitura.  A opção `-a' faz tratar cada NOME como uma"
 
 #~ msgid "an array variable.  An argument of `--' disables further option"
-#~ msgstr "variável tipo array.  Um argumento `--' desabilita o processamento de"
+#~ msgstr ""
+#~ "variável tipo array.  Um argumento `--' desabilita o processamento de"
 
-#~ msgid "The positional parameters from $N+1 ... are renamed to $1 ...  If N is"
-#~ msgstr "Os parâmetros posicionais a partir de $N+1 ... são deslocados para $1 ..."
+#~ msgid ""
+#~ "The positional parameters from $N+1 ... are renamed to $1 ...  If N is"
+#~ msgstr ""
+#~ "Os parâmetros posicionais a partir de $N+1 ... são deslocados para $1 ..."
 
 #~ msgid "not given, it is assumed to be 1."
 #~ msgstr "Se N não for especificado, o valor 1 é assumido ($2 vira $1 ...)."
@@ -7276,25 +7797,31 @@ msgstr ""
 #~ msgstr "$PATH são usados para encontrar o diretório contendo o ARQUIVO."
 
 #~ msgid "Suspend the execution of this shell until it receives a SIGCONT"
-#~ msgstr "Suspender a execução desta shell até que o sinal SIGCONT seja recebido."
+#~ msgstr ""
+#~ "Suspender a execução desta shell até que o sinal SIGCONT seja recebido."
 
 #~ msgid "signal.  The `-f' if specified says not to complain about this"
 #~ msgstr "Se a opção `-f' for especificada indica para não reclamar sobre ser"
 
 #~ msgid "being a login shell if it is; just suspend anyway."
-#~ msgstr "uma `shell de login', caso seja; simplesmente suspender de qualquer forma."
+#~ msgstr ""
+#~ "uma `shell de login', caso seja; simplesmente suspender de qualquer forma."
 
 #~ msgid "Exits with a status of 0 (trueness) or 1 (falseness) depending on"
-#~ msgstr "Termina com status 0 (verdadeiro) ou 1 (falso) conforme EXPR for avaliada."
+#~ msgstr ""
+#~ "Termina com status 0 (verdadeiro) ou 1 (falso) conforme EXPR for avaliada."
 
 #~ msgid "the evaluation of EXPR.  Expressions may be unary or binary.  Unary"
-#~ msgstr "As expressões podem ser unárias ou binárias. As expressões unárias são"
+#~ msgstr ""
+#~ "As expressões podem ser unárias ou binárias. As expressões unárias são"
 
 #~ msgid "expressions are often used to examine the status of a file.  There"
-#~ msgstr "muito usadas para examinar o status de um arquivo.  Existem, também,"
+#~ msgstr ""
+#~ "muito usadas para examinar o status de um arquivo.  Existem, também,"
 
 #~ msgid "are string operators as well, and numeric comparison operators."
-#~ msgstr "operadores para cadeias de caracteres (strings) e comparações numéricas."
+#~ msgstr ""
+#~ "operadores para cadeias de caracteres (strings) e comparações numéricas."
 
 #~ msgid "File operators:"
 #~ msgstr "Operadores para arquivos:"
@@ -7303,7 +7830,8 @@ msgstr ""
 #~ msgstr "    -b ARQUIVO  Verdade se o arquivo for do tipo especial de bloco."
 
 #~ msgid "    -c FILE        True if file is character special."
-#~ msgstr "    -c ARQUIVO  Verdade se o arquivo for do tipo especial de caracter."
+#~ msgstr ""
+#~ "    -c ARQUIVO  Verdade se o arquivo for do tipo especial de caracter."
 
 #~ msgid "    -d FILE        True if file is a directory."
 #~ msgstr "    -d ARQUIVO  Verdade se o arquivo for um diretório."
@@ -7315,10 +7843,12 @@ msgstr ""
 #~ msgstr "    -f ARQUIVO  Verdade se o arquivo existir e for do tipo regular."
 
 #~ msgid "    -g FILE        True if file is set-group-id."
-#~ msgstr "    -g ARQUIVO  Verdade se o arquivo tiver o bit \"set-group-id\" ativo."
+#~ msgstr ""
+#~ "    -g ARQUIVO  Verdade se o arquivo tiver o bit \"set-group-id\" ativo."
 
 #~ msgid "    -h FILE        True if file is a symbolic link.  Use \"-L\"."
-#~ msgstr "    -h ARQUIVO  Verdade se arquivo for um vínculo simbólico.  Usar \"-L\"."
+#~ msgstr ""
+#~ "    -h ARQUIVO  Verdade se arquivo for um vínculo simbólico.  Usar \"-L\"."
 
 #~ msgid "    -L FILE        True if file is a symbolic link."
 #~ msgstr "    -L ARQUIVO  Verdade se o arquivo for um vínculo simbólico."
@@ -7330,7 +7860,8 @@ msgstr ""
 #~ msgstr "    -p ARQUIVO  Verdade se o arquivo for um `named pipe'."
 
 #~ msgid "    -r FILE        True if file is readable by you."
-#~ msgstr "    -r ARQUIVO  Verdade se você tiver autorização para ler o arquivo."
+#~ msgstr ""
+#~ "    -r ARQUIVO  Verdade se você tiver autorização para ler o arquivo."
 
 #~ msgid "    -s FILE        True if file exists and is not empty."
 #~ msgstr "    -s ARQUIVO  Verdade se o arquivo existir e não estiver vazio."
@@ -7344,19 +7875,26 @@ msgstr ""
 #~ "                    em um terminal."
 
 #~ msgid "    -u FILE        True if the file is set-user-id."
-#~ msgstr "    -u ARQUIVO  Verdade se o arquivo tiver o bit \"set-user-id\" ativo."
+#~ msgstr ""
+#~ "    -u ARQUIVO  Verdade se o arquivo tiver o bit \"set-user-id\" ativo."
 
 #~ msgid "    -w FILE        True if the file is writable by you."
-#~ msgstr "    -w ARQUIVO  Verdade se você tiver autorização para escrever no arquivo."
+#~ msgstr ""
+#~ "    -w ARQUIVO  Verdade se você tiver autorização para escrever no "
+#~ "arquivo."
 
 #~ msgid "    -x FILE        True if the file is executable by you."
-#~ msgstr "    -x ARQUIVO  Verdade se você tiver autorização para executar o arquivo."
+#~ msgstr ""
+#~ "    -x ARQUIVO  Verdade se você tiver autorização para executar o arquivo."
 
 #~ msgid "    -O FILE        True if the file is effectively owned by you."
-#~ msgstr "    -O ARQUIVO  Verdade se o arquivo pertencer ao seu usuário efetivo."
+#~ msgstr ""
+#~ "    -O ARQUIVO  Verdade se o arquivo pertencer ao seu usuário efetivo."
 
-#~ msgid "    -G FILE        True if the file is effectively owned by your group."
-#~ msgstr "    -G ARQUIVO  Verdade se o arquivo pertencer ao seu grupo efetivo."
+#~ msgid ""
+#~ "    -G FILE        True if the file is effectively owned by your group."
+#~ msgstr ""
+#~ "    -G ARQUIVO  Verdade se o arquivo pertencer ao seu grupo efetivo."
 
 #~ msgid "  FILE1 -nt FILE2  True if file1 is newer than (according to"
 #~ msgstr "  ARQ1 -nt ARQ2 Verdade se ARQ1 for mais novo (conforme a data"
@@ -7399,14 +7937,18 @@ msgstr ""
 #~ msgid "    STRING1 < STRING2"
 #~ msgstr "    STRING1 < STRING2"
 
-#~ msgid "                   True if STRING1 sorts before STRING2 lexicographically"
-#~ msgstr "                Verdade se STRING1 tiver ordenação anterior à STRING2."
+#~ msgid ""
+#~ "                   True if STRING1 sorts before STRING2 lexicographically"
+#~ msgstr ""
+#~ "                Verdade se STRING1 tiver ordenação anterior à STRING2."
 
 #~ msgid "    STRING1 > STRING2"
 #~ msgstr "    STRING1 > STRING2"
 
-#~ msgid "                   True if STRING1 sorts after STRING2 lexicographically"
-#~ msgstr "                Verdade se STRING1 tiver ordenação posterior à STRING2."
+#~ msgid ""
+#~ "                   True if STRING1 sorts after STRING2 lexicographically"
+#~ msgstr ""
+#~ "                Verdade se STRING1 tiver ordenação posterior à STRING2."
 
 #~ msgid "Other operators:"
 #~ msgstr "Outros operadores:"
@@ -7427,9 +7969,11 @@ msgstr ""
 #~ msgstr "                   -lt, -le, -gt, ou -ge."
 
 #~ msgid "Arithmetic binary operators return true if ARG1 is equal, not-equal,"
-#~ msgstr "Operadores aritméticos binários retornam verdadeiro se ARG1 for igual,"
+#~ msgstr ""
+#~ "Operadores aritméticos binários retornam verdadeiro se ARG1 for igual,"
 
-#~ msgid "less-than, less-than-or-equal, greater-than, or greater-than-or-equal"
+#~ msgid ""
+#~ "less-than, less-than-or-equal, greater-than, or greater-than-or-equal"
 #~ msgstr "diferente, menor, menor ou igual, maior, ou maior ou igual do que"
 
 #~ msgid "than ARG2."
@@ -7442,46 +7986,60 @@ msgstr ""
 #~ msgstr "argumento deve ser o literal `]', para fechar o `[' de abertura."
 
 #~ msgid "Print the accumulated user and system times for processes run from"
-#~ msgstr "Exibe os tempos acumulados do usuário e do sistema para os processos"
+#~ msgstr ""
+#~ "Exibe os tempos acumulados do usuário e do sistema para os processos"
 
 #~ msgid "the shell."
 #~ msgstr "executados por esta shell."
 
 #~ msgid "The command ARG is to be read and executed when the shell receives"
-#~ msgstr "O comando em ARG é para ser lido e executado quando a shell receber o(s)"
+#~ msgstr ""
+#~ "O comando em ARG é para ser lido e executado quando a shell receber o(s)"
 
 #~ msgid "signal(s) SIGNAL_SPEC.  If ARG is absent all specified signals are"
-#~ msgstr "sinal(is) SINAL-ESPEC.  Se ARG for omitido, todos os sinais especificados"
+#~ msgstr ""
+#~ "sinal(is) SINAL-ESPEC.  Se ARG for omitido, todos os sinais especificados"
 
 #~ msgid "reset to their original values.  If ARG is the null string each"
-#~ msgstr "retornam aos seus valores originais.  Se ARG for uma string nula, cada"
+#~ msgstr ""
+#~ "retornam aos seus valores originais.  Se ARG for uma string nula, cada"
 
 #~ msgid "SIGNAL_SPEC is ignored by the shell and by the commands it invokes."
-#~ msgstr "SINAL-ESPEC é ignorado pela shell e pelos comandos chamados por ela."
+#~ msgstr ""
+#~ "SINAL-ESPEC é ignorado pela shell e pelos comandos chamados por ela."
 
 #~ msgid "If SIGNAL_SPEC is EXIT (0) the command ARG is executed on exit from"
-#~ msgstr "Se SINAL-ESPEC for EXIT (0) o comando em ARG é executado na saída da"
+#~ msgstr ""
+#~ "Se SINAL-ESPEC for EXIT (0) o comando em ARG é executado na saída da"
 
 #~ msgid "the shell.  If SIGNAL_SPEC is DEBUG, ARG is executed after every"
-#~ msgstr "shell.  Se SINAL-ESPEC for DEBUG, o comando em ARG é executado após cada"
+#~ msgstr ""
+#~ "shell.  Se SINAL-ESPEC for DEBUG, o comando em ARG é executado após cada"
 
 #~ msgid "command.  If ARG is `-p' then the trap commands associated with"
-#~ msgstr "comando.  Se ARG for `-p' então os comandos de captura associados com cada"
+#~ msgstr ""
+#~ "comando.  Se ARG for `-p' então os comandos de captura associados com cada"
 
 #~ msgid "each SIGNAL_SPEC are displayed.  If no arguments are supplied or if"
 #~ msgstr "SINAL-ESPEC são exibidos.  Se nenhum argumento for fornecido, ou se"
 
 #~ msgid "only `-p' is given, trap prints the list of commands associated with"
-#~ msgstr "somente `-p' for fornecido, é exibida a lista dos comandos associados"
+#~ msgstr ""
+#~ "somente `-p' for fornecido, é exibida a lista dos comandos associados"
 
-#~ msgid "each signal number.  SIGNAL_SPEC is either a signal name in <signal.h>"
-#~ msgstr "com cada número de sinal.  SINAL-ESPEC é um nome de sinal em <signal.h> ou"
+#~ msgid ""
+#~ "each signal number.  SIGNAL_SPEC is either a signal name in <signal.h>"
+#~ msgstr ""
+#~ "com cada número de sinal.  SINAL-ESPEC é um nome de sinal em <signal.h> ou"
 
-#~ msgid "or a signal number.  `trap -l' prints a list of signal names and their"
-#~ msgstr "um número de sinal.  `trap -l' exibe a lista de nomes de sinais com seus"
+#~ msgid ""
+#~ "or a signal number.  `trap -l' prints a list of signal names and their"
+#~ msgstr ""
+#~ "um número de sinal.  `trap -l' exibe a lista de nomes de sinais com seus"
 
 #~ msgid "corresponding numbers.  Note that a signal can be sent to the shell"
-#~ msgstr "números correspondentes.  Note que o sinal pode ser enviado para a shell"
+#~ msgstr ""
+#~ "números correspondentes.  Note que o sinal pode ser enviado para a shell"
 
 #~ msgid "with \"kill -signal $$\"."
 #~ msgstr "através do comando \"kill -SINAL $$\"."
@@ -7490,13 +8048,19 @@ msgstr ""
 #~ msgstr "Para cada NOME, indica como este deve ser interpretado caso seja"
 
 #~ msgid "If the -t option is used, returns a single word which is one of"
-#~ msgstr "Se a opção -t for fornecida, `type' retorna uma única palavra dentre"
+#~ msgstr ""
+#~ "Se a opção -t for fornecida, `type' retorna uma única palavra dentre"
 
-#~ msgid "`alias', `keyword', `function', `builtin', `file' or `', if NAME is an"
-#~ msgstr "`alias', `keyword', `function', `builtin', `file' ou `', se NOME for um"
+#~ msgid ""
+#~ "`alias', `keyword', `function', `builtin', `file' or `', if NAME is an"
+#~ msgstr ""
+#~ "`alias', `keyword', `function', `builtin', `file' ou `', se NOME for um"
 
-#~ msgid "alias, shell reserved word, shell function, shell builtin, disk file,"
-#~ msgstr "alias, uma palavra reservada, função ou comando interno da shell, um arquivo"
+#~ msgid ""
+#~ "alias, shell reserved word, shell function, shell builtin, disk file,"
+#~ msgstr ""
+#~ "alias, uma palavra reservada, função ou comando interno da shell, um "
+#~ "arquivo"
 
 #~ msgid "or unfound, respectively."
 #~ msgstr "em disco, ou não for encontrado, respectivamente."
@@ -7510,8 +8074,10 @@ msgstr ""
 #~ msgid "If the -a flag is used, displays all of the places that contain an"
 #~ msgstr "Se a opção -a for fornecida, exibe todos os locais que contém um"
 
-#~ msgid "executable named `file'.  This includes aliases and functions, if and"
-#~ msgstr "arquivo executável chamado `ARQUIVO', incluindo os aliases e funções,"
+#~ msgid ""
+#~ "executable named `file'.  This includes aliases and functions, if and"
+#~ msgstr ""
+#~ "arquivo executável chamado `ARQUIVO', incluindo os aliases e funções,"
 
 #~ msgid "only if the -p flag is not also used."
 #~ msgstr "mas somente se a opção -p não for fornecida conjuntamente."
@@ -7523,10 +8089,12 @@ msgstr ""
 #~ msgstr "-a, -p, and -t, respectivamente."
 
 #~ msgid "Ulimit provides control over the resources available to processes"
-#~ msgstr "Ulimit estabelece controle sobre os recursos disponíveis para os processos"
+#~ msgstr ""
+#~ "Ulimit estabelece controle sobre os recursos disponíveis para os processos"
 
 #~ msgid "started by the shell, on systems that allow such control.  If an"
-#~ msgstr "iniciados por esta shell, em sistemas que permitem estes controles. Se uma"
+#~ msgstr ""
+#~ "iniciados por esta shell, em sistemas que permitem estes controles. Se uma"
 
 #~ msgid "option is given, it is interpreted as follows:"
 #~ msgstr "opção for fornecida, é interpretada como mostrado a seguir:"
@@ -7541,13 +8109,15 @@ msgstr ""
 #~ msgstr "    -a\ttodos os limites correntes são informados"
 
 #~ msgid "    -c\tthe maximum size of core files created"
-#~ msgstr "    -c\to tamanho máximo para os arquivos de imagem do núcleo criados"
+#~ msgstr ""
+#~ "    -c\to tamanho máximo para os arquivos de imagem do núcleo criados"
 
 #~ msgid "    -d\tthe maximum size of a process's data segment"
 #~ msgstr "    -d\to tamanho máximo do segmento de dados de um processo"
 
 #~ msgid "    -m\tthe maximum resident set size"
-#~ msgstr "    -m\to tamanho máximo do conjunto de processos residentes em memória"
+#~ msgstr ""
+#~ "    -m\to tamanho máximo do conjunto de processos residentes em memória"
 
 #~ msgid "    -s\tthe maximum stack size"
 #~ msgstr "    -s\to tamanho máximo da pilha"
@@ -7571,13 +8141,15 @@ msgstr ""
 #~ msgstr "    -v\to tamanho da memória virtual"
 
 #~ msgid "If LIMIT is given, it is the new value of the specified resource."
-#~ msgstr "Se LIMITE for fornecido, torna-se o novo valor do recurso especificado."
+#~ msgstr ""
+#~ "Se LIMITE for fornecido, torna-se o novo valor do recurso especificado."
 
 #~ msgid "Otherwise, the current value of the specified resource is printed."
 #~ msgstr "Senão, o valor atual do recurso especificado é exibido."
 
 #~ msgid "If no option is given, then -f is assumed.  Values are in 1k"
-#~ msgstr "Se nenhuma opção for fornecida, então -f é assumido. Os valores são em"
+#~ msgstr ""
+#~ "Se nenhuma opção for fornecida, então -f é assumido. Os valores são em"
 
 #~ msgid "increments, except for -t, which is in seconds, -p, which is in"
 #~ msgstr "incrementos de 1k, exceto para -t, que é em segundos, -p, que é em"
@@ -7588,77 +8160,101 @@ msgstr ""
 #~ msgid "processes."
 #~ msgstr "processos."
 
-#~ msgid "The user file-creation mask is set to MODE.  If MODE is omitted, or if"
-#~ msgstr "MODO é atribuído à máscara de criação de arquivos do usuário.  Se omitido,"
+#~ msgid ""
+#~ "The user file-creation mask is set to MODE.  If MODE is omitted, or if"
+#~ msgstr ""
+#~ "MODO é atribuído à máscara de criação de arquivos do usuário.  Se omitido,"
 
-#~ msgid "`-S' is supplied, the current value of the mask is printed.  The `-S'"
-#~ msgstr "ou se `-S' for especificado, a máscara em uso é exibida.  A opção `-S'"
+#~ msgid ""
+#~ "`-S' is supplied, the current value of the mask is printed.  The `-S'"
+#~ msgstr ""
+#~ "ou se `-S' for especificado, a máscara em uso é exibida.  A opção `-S'"
 
-#~ msgid "option makes the output symbolic; otherwise an octal number is output."
+#~ msgid ""
+#~ "option makes the output symbolic; otherwise an octal number is output."
 #~ msgstr "exibe símbolos na saída; sem esta opção um número octal é exibido."
 
 #~ msgid "If MODE begins with a digit, it is interpreted as an octal number,"
-#~ msgstr "Se MODO começar por um dígito, é interpretado como sendo um número octal,"
+#~ msgstr ""
+#~ "Se MODO começar por um dígito, é interpretado como sendo um número octal,"
 
-#~ msgid "otherwise it is a symbolic mode string like that accepted by chmod(1)."
-#~ msgstr "senão devem ser caracteres simbólicos, como os aceitos por chmod(1)."
+#~ msgid ""
+#~ "otherwise it is a symbolic mode string like that accepted by chmod(1)."
+#~ msgstr ""
+#~ "senão devem ser caracteres simbólicos, como os aceitos por chmod(1)."
 
-#~ msgid "Wait for the specified process and report its termination status.  If"
-#~ msgstr "Aguardar pelo processo especificado e informar seu status de término. Se N"
+#~ msgid ""
+#~ "Wait for the specified process and report its termination status.  If"
+#~ msgstr ""
+#~ "Aguardar pelo processo especificado e informar seu status de término. Se N"
 
 #~ msgid "N is not given, all currently active child processes are waited for,"
-#~ msgstr "não for especificado, todos os processos filhos ativos são aguardados,"
+#~ msgstr ""
+#~ "não for especificado, todos os processos filhos ativos são aguardados,"
 
 #~ msgid "and the return code is zero.  N may be a process ID or a job"
 #~ msgstr "e o código de retorno é zero.  N pode ser o ID de um processo ou a"
 
 #~ msgid "specification; if a job spec is given, all processes in the job's"
-#~ msgstr "especificação de um trabalho; Se for a especificação de um trabalho, todos"
+#~ msgstr ""
+#~ "especificação de um trabalho; Se for a especificação de um trabalho, todos"
 
 #~ msgid "pipeline are waited for."
 #~ msgstr "os processos presentes no `pipeline' do trabalho são aguardados."
 
 #~ msgid "and the return code is zero.  N is a process ID; if it is not given,"
-#~ msgstr "e o código de retorno é zero.  N é o ID de um processo; se N não for"
+#~ msgstr ""
+#~ "e o código de retorno é zero.  N é o ID de um processo; se N não for"
 
 #~ msgid "all child processes of the shell are waited for."
 #~ msgstr "especificado, todos os processos filhos da shell são aguardados."
 
 #~ msgid "The `for' loop executes a sequence of commands for each member in a"
-#~ msgstr "O laço `for' executa a sequência de comandos para cada membro na lista de"
+#~ msgstr ""
+#~ "O laço `for' executa a sequência de comandos para cada membro na lista de"
 
-#~ msgid "list of items.  If `in WORDS ...;' is not present, then `in \"$@\"' is"
-#~ msgstr "items.  Se `in PALAVRAS ...;' não estiver presente, então `in \"$@\"'"
+#~ msgid ""
+#~ "list of items.  If `in WORDS ...;' is not present, then `in \"$@\"' is"
+#~ msgstr ""
+#~ "items.  Se `in PALAVRAS ...;' não estiver presente, então `in \"$@\"'"
 
-#~ msgid "assumed.  For each element in WORDS, NAME is set to that element, and"
-#~ msgstr "(parâmetros posicionais) é assumido. Para cada elemento em PALAVRAS, NOME"
+#~ msgid ""
+#~ "assumed.  For each element in WORDS, NAME is set to that element, and"
+#~ msgstr ""
+#~ "(parâmetros posicionais) é assumido. Para cada elemento em PALAVRAS, NOME"
 
 #~ msgid "the COMMANDS are executed."
 #~ msgstr "assume seu valor, e os COMANDOS são executados."
 
 #~ msgid "The WORDS are expanded, generating a list of words.  The"
-#~ msgstr "As palavras são expandidas, gerando uma lista de palavras. O conjunto"
+#~ msgstr ""
+#~ "As palavras são expandidas, gerando uma lista de palavras. O conjunto"
 
 #~ msgid "set of expanded words is printed on the standard error, each"
-#~ msgstr "de palavras expandidas é enviado para a saída de erro padrão, cada uma"
+#~ msgstr ""
+#~ "de palavras expandidas é enviado para a saída de erro padrão, cada uma"
 
 #~ msgid "preceded by a number.  If `in WORDS' is not present, `in \"$@\"'"
-#~ msgstr "precedida por um número.  Se `in PALAVRAS' for omitido, `in \"$@\"' é"
+#~ msgstr ""
+#~ "precedida por um número.  Se `in PALAVRAS' for omitido, `in \"$@\"' é"
 
 #~ msgid "is assumed.  The PS3 prompt is then displayed and a line read"
 #~ msgstr "assumido.  Em seguida o prompt PS3 é exibido, e uma linha é lida da"
 
 #~ msgid "from the standard input.  If the line consists of the number"
-#~ msgstr "entrada padrão.  Se a linha consistir do número correspondente ao número"
+#~ msgstr ""
+#~ "entrada padrão.  Se a linha consistir do número correspondente ao número"
 
 #~ msgid "corresponding to one of the displayed words, then NAME is set"
 #~ msgstr "de uma das palavras exibidas, então NOME é atribuído para esta"
 
 #~ msgid "to that word.  If the line is empty, WORDS and the prompt are"
-#~ msgstr "PALAVRA.  Se a linha estiver vazia, PALAVRAS e o prompt são exibidos"
+#~ msgstr ""
+#~ "PALAVRA.  Se a linha estiver vazia, PALAVRAS e o prompt são exibidos"
 
 #~ msgid "redisplayed.  If EOF is read, the command completes.  Any other"
-#~ msgstr "novamente.  Se EOF for lido, o comando termina.  Qualquer outro valor"
+#~ msgstr ""
+#~ "novamente.  Se EOF for lido, o comando termina.  Qualquer outro valor"
 
 #~ msgid "value read causes NAME to be set to null.  The line read is saved"
 #~ msgstr "lido faz com que NOME seja tornado nulo.  A linha lida é salva"
@@ -7670,28 +8266,42 @@ msgstr ""
 #~ msgstr "até que o comando `break' ou `return' seja executado."
 
 #~ msgid "Selectively execute COMMANDS based upon WORD matching PATTERN.  The"
-#~ msgstr "Executar seletivamente COMANDOS tomando por base a correspondência entre"
+#~ msgstr ""
+#~ "Executar seletivamente COMANDOS tomando por base a correspondência entre"
 
 #~ msgid "`|' is used to separate multiple patterns."
-#~ msgstr "PALAVRA e PADRÃO. O caracter `|' é usado para separar múltiplos padrões."
+#~ msgstr ""
+#~ "PALAVRA e PADRÃO. O caracter `|' é usado para separar múltiplos padrões."
 
-#~ msgid "The if COMMANDS are executed.  If the exit status is zero, then the then"
-#~ msgstr "Os COMANDOS `if' são executados. Se os status de saída for zero, então os"
+#~ msgid ""
+#~ "The if COMMANDS are executed.  If the exit status is zero, then the then"
+#~ msgstr ""
+#~ "Os COMANDOS `if' são executados. Se os status de saída for zero, então os"
 
-#~ msgid "COMMANDS are executed.  Otherwise, each of the elif COMMANDS are executed"
-#~ msgstr "COMANDOS `then' são executados, senão, os COMANDOS `elif' são executados em"
+#~ msgid ""
+#~ "COMMANDS are executed.  Otherwise, each of the elif COMMANDS are executed"
+#~ msgstr ""
+#~ "COMANDOS `then' são executados, senão, os COMANDOS `elif' são executados "
+#~ "em"
 
-#~ msgid "in turn, and if the exit status is zero, the corresponding then COMMANDS"
-#~ msgstr "sequência e, se o status de saída for zero, os COMANDOS `then' associados"
+#~ msgid ""
+#~ "in turn, and if the exit status is zero, the corresponding then COMMANDS"
+#~ msgstr ""
+#~ "sequência e, se o status de saída for zero, os COMANDOS `then' associados"
 
-#~ msgid "are executed and the if command completes.  Otherwise, the else COMMANDS"
-#~ msgstr "são executados e o `if' termina.  Senão, os COMANDOS da cláusula `else'"
+#~ msgid ""
+#~ "are executed and the if command completes.  Otherwise, the else COMMANDS"
+#~ msgstr ""
+#~ "são executados e o `if' termina.  Senão, os COMANDOS da cláusula `else'"
 
-#~ msgid "are executed, if present.  The exit status is the exit status of the last"
-#~ msgstr "são executados, se houver.  O status de saída é o status de saída do"
+#~ msgid ""
+#~ "are executed, if present.  The exit status is the exit status of the last"
+#~ msgstr ""
+#~ "são executados, se houver.  O status de saída é o status de saída do"
 
 #~ msgid "command executed, or zero if no condition tested true."
-#~ msgstr "último comando executado, ou zero, se nenhuma condição for verdadeira."
+#~ msgstr ""
+#~ "último comando executado, ou zero, se nenhuma condição for verdadeira."
 
 #~ msgid "Expand and execute COMMANDS as long as the final command in the"
 #~ msgstr "Expande e executa COMANDOS enquanto o comando final nos"
@@ -7718,16 +8328,22 @@ msgstr ""
 #~ msgstr "redirecionar todo um conjunto de comandos."
 
 #~ msgid "This is similar to the `fg' command.  Resume a stopped or background"
-#~ msgstr "Semelhante ao comando `fg'. Prossegue a execução de um trabalho parado ou"
+#~ msgstr ""
+#~ "Semelhante ao comando `fg'. Prossegue a execução de um trabalho parado ou"
 
 #~ msgid "job.  If you specifiy DIGITS, then that job is used.  If you specify"
-#~ msgstr "em segundo plano. Se DÍGITOS for especificado, então este trabalho é usado."
+#~ msgstr ""
+#~ "em segundo plano. Se DÍGITOS for especificado, então este trabalho é "
+#~ "usado."
 
-#~ msgid "WORD, then the job whose name begins with WORD is used.  Following the"
-#~ msgstr "Se for especificado PALAVRA, o trabalho começado por PALAVRA é usado."
+#~ msgid ""
+#~ "WORD, then the job whose name begins with WORD is used.  Following the"
+#~ msgstr ""
+#~ "Se for especificado PALAVRA, o trabalho começado por PALAVRA é usado."
 
 #~ msgid "job specification with a `&' places the job in the background."
-#~ msgstr "Seguindo-se a especificação por um `&' põe o trabalho em segundo plano."
+#~ msgstr ""
+#~ "Seguindo-se a especificação por um `&' põe o trabalho em segundo plano."
 
 #~ msgid "BASH_VERSION    The version numbers of this Bash."
 #~ msgstr "BASH_VERSION    Os números da versão desta `bash'."
@@ -7741,11 +8357,15 @@ msgstr ""
 #~ msgid "\t\tdirectory."
 #~ msgstr "\t\tencontrado no diretório atual."
 
-#~ msgid "HISTFILE        The name of the file where your command history is stored."
-#~ msgstr "HISTFILE        O nome do arquivo onde o histórico de comandos é armazenado."
+#~ msgid ""
+#~ "HISTFILE        The name of the file where your command history is stored."
+#~ msgstr ""
+#~ "HISTFILE        O nome do arquivo onde o histórico de comandos é "
+#~ "armazenado."
 
 #~ msgid "HISTFILESIZE    The maximum number of lines this file can contain."
-#~ msgstr "HISTFILESIZE    O número máximo de linhas que este arquivo pode conter."
+#~ msgstr ""
+#~ "HISTFILESIZE    O número máximo de linhas que este arquivo pode conter."
 
 #~ msgid "HISTSIZE        The maximum number of history lines that a running"
 #~ msgstr "HISTSIZE        O número máximo de linhas do histórico que uma"
@@ -7754,12 +8374,16 @@ msgstr ""
 #~ msgstr "\t\tshell em execução pode acessar."
 
 #~ msgid "HOME            The complete pathname to your login directory."
-#~ msgstr "HOME            O nome completo do caminho do seu diretório de login."
+#~ msgstr ""
+#~ "HOME            O nome completo do caminho do seu diretório de login."
 
-#~ msgid "HOSTTYPE        The type of CPU this version of Bash is running under."
-#~ msgstr "HOSTTYPE        O tipo de CPU sob a qual esta `bash' está executando."
+#~ msgid ""
+#~ "HOSTTYPE        The type of CPU this version of Bash is running under."
+#~ msgstr ""
+#~ "HOSTTYPE        O tipo de CPU sob a qual esta `bash' está executando."
 
-#~ msgid "IGNOREEOF       Controls the action of the shell on receipt of an EOF"
+#~ msgid ""
+#~ "IGNOREEOF       Controls the action of the shell on receipt of an EOF"
 #~ msgstr "IGNOREEOF       Controla a ação da shell ao receber um caracter"
 
 #~ msgid "\t\tcharacter as the sole input.  If set, then the value"
@@ -7772,13 +8396,16 @@ msgstr ""
 #~ msgstr "\t\tde forma seguida em uma linha vazia, antes da shell terminar"
 
 #~ msgid "\t\t(default 10).  When unset, EOF signifies the end of input."
-#~ msgstr "\t\t(padrão 10).  Caso contrário, EOF significa o fim da entrada de dados."
+#~ msgstr ""
+#~ "\t\t(padrão 10).  Caso contrário, EOF significa o fim da entrada de dados."
 
 #~ msgid "MAILCHECK\tHow often, in seconds, Bash checks for new mail."
-#~ msgstr "MAILCHECK\tFreqüência, em segundos, para a `bash' verificar novo e-mail."
+#~ msgstr ""
+#~ "MAILCHECK\tFreqüência, em segundos, para a `bash' verificar novo e-mail."
 
 #~ msgid "MAILPATH\tA colon-separated list of filenames which Bash checks"
-#~ msgstr "MAILPATH\tUma lista, separada por dois pontos, de nomes de arquivos,"
+#~ msgstr ""
+#~ "MAILPATH\tUma lista, separada por dois pontos, de nomes de arquivos,"
 
 #~ msgid "\t\tfor new mail."
 #~ msgstr "\t\tnos quais a `bash' vai verificar se existe novo e-mail."
@@ -7787,7 +8414,8 @@ msgstr ""
 #~ msgstr "OSTYPE\t\tA versão do Unix sob a qual a `bash' está executando."
 
 #~ msgid "PATH            A colon-separated list of directories to search when"
-#~ msgstr "PATH            Uma lista, separada por dois pontos, de diretórios a"
+#~ msgstr ""
+#~ "PATH            Uma lista, separada por dois pontos, de diretórios a"
 
 #~ msgid "\t\tlooking for commands."
 #~ msgstr "\t\tserem pesquisados quando os comandos forem procurados."
@@ -7808,16 +8436,20 @@ msgstr ""
 #~ msgstr "TERM            O nome do tipo de terminal em uso no momento."
 
 #~ msgid "auto_resume     Non-null means a command word appearing on a line by"
-#~ msgstr "auto_resume     Não nulo significa que um comando aparecendo sozinho em"
+#~ msgstr ""
+#~ "auto_resume     Não nulo significa que um comando aparecendo sozinho em"
 
 #~ msgid "\t\titself is first looked for in the list of currently"
-#~ msgstr "\t\tlinha deve ser procurado primeiro na lista de trabalhos parados."
+#~ msgstr ""
+#~ "\t\tlinha deve ser procurado primeiro na lista de trabalhos parados."
 
 #~ msgid "\t\tstopped jobs.  If found there, that job is foregrounded."
-#~ msgstr "\t\tSe for encontrado na lista, o trabalho vai para o primeiro plano."
+#~ msgstr ""
+#~ "\t\tSe for encontrado na lista, o trabalho vai para o primeiro plano."
 
 #~ msgid "\t\tA value of `exact' means that the command word must"
-#~ msgstr "\t\tO valor `exact' significa que a palavra do comando deve corresponder"
+#~ msgstr ""
+#~ "\t\tO valor `exact' significa que a palavra do comando deve corresponder"
 
 #~ msgid "\t\texactly match a command in the list of stopped jobs.  A"
 #~ msgstr "\t\texatamente a um comando da lista de trabalhos parados."
@@ -7829,19 +8461,23 @@ msgstr ""
 #~ msgstr "\t\tcorresponder a uma parte do trabalho.  Qualquer outro valor"
 
 #~ msgid "\t\tthe command must be a prefix of a stopped job."
-#~ msgstr "\t\tsignifica que o comando deve ser um prefixo de um trabalho parado."
+#~ msgstr ""
+#~ "\t\tsignifica que o comando deve ser um prefixo de um trabalho parado."
 
 #~ msgid "command_oriented_history"
 #~ msgstr "command_oriented_history"
 
-#~ msgid "                Non-null means to save multiple-line commands together on"
-#~ msgstr "                Se não for nulo significa salvar comandos com múltiplas"
+#~ msgid ""
+#~ "                Non-null means to save multiple-line commands together on"
+#~ msgstr ""
+#~ "                Se não for nulo significa salvar comandos com múltiplas"
 
 #~ msgid "                a single history line."
 #~ msgstr "                linhas, juntas em uma única linha do histórico."
 
 #~ msgid "histchars       Characters controlling history expansion and quick"
-#~ msgstr "histchars       Caracteres que controlam a expansão do histórico e a"
+#~ msgstr ""
+#~ "histchars       Caracteres que controlam a expansão do histórico e a"
 
 #~ msgid "\t\tsubstitution.  The first character is the history"
 #~ msgstr "\t\tsubstituição rápida.  O primeiro caracter é o de substituição"
@@ -7856,10 +8492,12 @@ msgstr ""
 #~ msgstr "\t\té o de comentário do histórico, geralmente o `#'."
 
 #~ msgid "HISTCONTROL\tSet to a value of `ignorespace', it means don't enter"
-#~ msgstr "HISTCONTROL\tCom valor igual a `ignorespace', significa não introduzir"
+#~ msgstr ""
+#~ "HISTCONTROL\tCom valor igual a `ignorespace', significa não introduzir"
 
 #~ msgid "\t\tlines which begin with a space or tab on the history"
-#~ msgstr "\t\tlinhas que iniciam por espaço ou tabulação na lista de histórico."
+#~ msgstr ""
+#~ "\t\tlinhas que iniciam por espaço ou tabulação na lista de histórico."
 
 #~ msgid "\t\tlist.  Set to a value of `ignoredups', it means don't"
 #~ msgstr "\t\tCom valor igual a `ignoredups', significa não introduzir linhas"
@@ -7871,7 +8509,8 @@ msgstr ""
 #~ msgstr "\t\t`ignoreboth' significa combinar as duas opções.  Remover,"
 
 #~ msgid "\t\tor set to any other value than those above means to save"
-#~ msgstr "\t\tou atribuir algum outro valor que não os acima, significa salvar"
+#~ msgstr ""
+#~ "\t\tou atribuir algum outro valor que não os acima, significa salvar"
 
 #~ msgid "\t\tall lines on the history list."
 #~ msgstr "\t\ttodas as linhas na lista de histórico."
@@ -7880,19 +8519,22 @@ msgstr ""
 #~ msgstr "Adiciona o diretório no topo da pilha de diretórios, ou rotaciona a"
 
 #~ msgid "the stack, making the new top of the stack the current working"
-#~ msgstr "pilha, fazendo o diretório atual de trabalho ficar no topo da pilha."
+#~ msgstr ""
+#~ "pilha, fazendo o diretório atual de trabalho ficar no topo da pilha."
 
 #~ msgid "directory.  With no arguments, exchanges the top two directories."
 #~ msgstr "Sem nenhum argumento, troca os dois diretórios do topo."
 
 #~ msgid "+N\tRotates the stack so that the Nth directory (counting"
-#~ msgstr "+N\tRotaciona a pilha de tal forma que o n-ésimo diretório (contado a"
+#~ msgstr ""
+#~ "+N\tRotaciona a pilha de tal forma que o n-ésimo diretório (contado a"
 
 #~ msgid "\tfrom the left of the list shown by `dirs') is at the top."
 #~ msgstr "\tpartir da esquerda da lista exibida por `dirs') fique no topo."
 
 #~ msgid "-N\tRotates the stack so that the Nth directory (counting"
-#~ msgstr "-N\tRotaciona a pilha de tal forma que o n-ésimo diretório (contado a"
+#~ msgstr ""
+#~ "-N\tRotaciona a pilha de tal forma que o n-ésimo diretório (contado a"
 
 #~ msgid "\tfrom the right) is at the top."
 #~ msgstr "\tpartir da direita) fique no topo."
@@ -7933,7 +8575,8 @@ msgstr ""
 #~ msgid "\tremoves the last directory, `popd -1' the next to last."
 #~ msgstr "\tremove o último diretório, `popd -1' o penúltimo."
 
-#~ msgid "-n\tsuppress the normal change of directory when removing directories"
+#~ msgid ""
+#~ "-n\tsuppress the normal change of directory when removing directories"
 #~ msgstr "-n\tsuprime a troca normal de diretório ao remover-se diretórios"
 
 #~ msgid "\tfrom the stack, so only the stack is manipulated."
@@ -7948,44 +8591,57 @@ msgstr ""
 #~ msgid "back up through the list with the `popd' command."
 #~ msgstr "removidos da lista através do comando `popd'."
 
-#~ msgid "The -l flag specifies that `dirs' should not print shorthand versions"
+#~ msgid ""
+#~ "The -l flag specifies that `dirs' should not print shorthand versions"
 #~ msgstr "A opção -l especifica que `dirs' não deve exibir a versão resumida"
 
-#~ msgid "of directories which are relative to your home directory.  This means"
-#~ msgstr "dos diretórios relativos ao seu diretório `home'. Isto significa que"
+#~ msgid ""
+#~ "of directories which are relative to your home directory.  This means"
+#~ msgstr ""
+#~ "dos diretórios relativos ao seu diretório `home'. Isto significa que"
 
 #~ msgid "that `~/bin' might be displayed as `/homes/bfox/bin'.  The -v flag"
-#~ msgstr "`~/bin' deve ser exibido como `/home/você/bin'.  A opção -v faz com que"
+#~ msgstr ""
+#~ "`~/bin' deve ser exibido como `/home/você/bin'.  A opção -v faz com que"
 
 #~ msgid "causes `dirs' to print the directory stack with one entry per line,"
 #~ msgstr "`dirs' exiba a pilha de diretórios com uma entrada por linha,"
 
-#~ msgid "prepending the directory name with its position in the stack.  The -p"
+#~ msgid ""
+#~ "prepending the directory name with its position in the stack.  The -p"
 #~ msgstr "antecedendo o nome do diretório com a sua posição na pilha. A opção"
 
 #~ msgid "flag does the same thing, but the stack position is not prepended."
 #~ msgstr "-p faz a mesma coisa, mas a posição na pilha não é exibida. A opção"
 
-#~ msgid "The -c flag clears the directory stack by deleting all of the elements."
+#~ msgid ""
+#~ "The -c flag clears the directory stack by deleting all of the elements."
 #~ msgstr "-c limpa a pilha de diretórios apagando todos os seus elementos."
 
-#~ msgid "+N\tdisplays the Nth entry counting from the left of the list shown by"
-#~ msgstr "+N\texibe a n-ésima entrada contada a partir da esquerda da lista exibida"
+#~ msgid ""
+#~ "+N\tdisplays the Nth entry counting from the left of the list shown by"
+#~ msgstr ""
+#~ "+N\texibe a n-ésima entrada contada a partir da esquerda da lista exibida"
 
 #~ msgid "\tdirs when invoked without options, starting with zero."
 #~ msgstr "\tpor `dirs', quando este é chamado sem opções, começando por zero."
 
-#~ msgid "-N\tdisplays the Nth entry counting from the right of the list shown by"
-#~ msgstr "-N\texibe a n-ésima entrada contada a partir da direita da lista exibida"
+#~ msgid ""
+#~ "-N\tdisplays the Nth entry counting from the right of the list shown by"
+#~ msgstr ""
+#~ "-N\texibe a n-ésima entrada contada a partir da direita da lista exibida"
 
 #~ msgid "Toggle the values of variables controlling optional behavior."
-#~ msgstr "Alterna os valores das variáveis controladoras de comportamentos opcionais."
+#~ msgstr ""
+#~ "Alterna os valores das variáveis controladoras de comportamentos "
+#~ "opcionais."
 
 #~ msgid "The -s flag means to enable (set) each OPTNAME; the -u flag"
 #~ msgstr "A opção -s ativa (set) cada NOME-OPÇÃO; a opção -u desativa cada"
 
 #~ msgid "unsets each OPTNAME.  The -q flag suppresses output; the exit"
-#~ msgstr "NOME-OPÇÃO. A opção -q suprime a saída; o status de término indica se"
+#~ msgstr ""
+#~ "NOME-OPÇÃO. A opção -q suprime a saída; o status de término indica se"
 
 #~ msgid "status indicates whether each OPTNAME is set or unset.  The -o"
 #~ msgstr "cada NOME-OPÇÃO foi ativado ou desativado  A opção -o restringe"
@@ -7997,7 +8653,8 @@ msgstr ""
 #~ msgstr "Sem nenhuma opção, ou com a opção -p, uma lista com todas as"
 
 #~ msgid "settable options is displayed, with an indication of whether or"
-#~ msgstr "opções que podem ser ativadas é exibida, com indicação sobre se cada uma"
+#~ msgstr ""
+#~ "opções que podem ser ativadas é exibida, com indicação sobre se cada uma"
 
 #~ msgid "not each is set."
 #~ msgstr "das opções está ativa ou não."
index 3a69a47a6886390bdef097f5959f6420b3e57842..f1036a704829574c7a05f337115b134e5ddcbeb7 100644 (file)
Binary files a/po/ro.gmo and b/po/ro.gmo differ
index 13ab3543d349dd1f989d611da12d69fe16d668cf..9c79e28ce2c8f9f4f50e00150cc4a053c3e31810 100644 (file)
--- a/po/ro.po
+++ b/po/ro.po
-# Mesajele în limba română pentru pachetul bash
-# Copyright (C) 2003 Free Software Foundation, Inc.
+# Mesajele în limba română pentru pachetul bash.
+# Copyright (C) 2003 - 2022 Free Software Foundation, Inc.
 # This file is distributed under the same license as the bash package.
+#
 # Eugen Hoanca <eugenh@urban-grafx.ro>, 2003.
 # Daniel Șerbănescu <daniel@serbanescu.dk>, 2019.
+# Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>, 2022.
+#
+# Cronologia traducerii fișierului „bash”:
+# Traducerea inițială, făcută de EH, pentru versiunea bash 3.2 (19% - tradus).
+# Actualizare a traducerii pentru versiunea 4.0, făcută de EH (24% - tradus).
+# Actualizare a traducerii pentru versiunea 5.0, făcută de DȘ (29% - tradus).
+# Actualizare a traducerii pentru versiunea 5.1, făcută de R-GC (100% - tradus).
+# Actualizare a traducerii pentru versiunea 5.2-rc1, făcută de R-GC.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: bash 5.0\n"
+"Project-Id-Version: bash 5.2-rc1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-11-28 12:51-0500\n"
-"PO-Revision-Date: 2019-08-25 10:11+0200\n"
-"Last-Translator: Daniel Șerbănescu <daniel@serbanescu.dk>\n"
+"POT-Creation-Date: 2022-01-11 14:50-0500\n"
+"PO-Revision-Date: 2022-06-18 01:02+0200\n"
+"Last-Translator: Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>\n"
 "Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n"
 "Language: ro\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || ((n%100) > 0 && (n%100) < 20)) ? 1 : 2);\n"
 "X-Bugs: Report translation errors to the Language-Team address.\n"
-"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n==0 || (n!=1 && n%100>=1 && n"
-"%100<=19) ? 1 : 2);\n"
-"X-Generator: Poedit 2.2.3\n"
+"X-Generator: Poedit 2.3.1\n"
 "X-Poedit-SourceCharset: UTF-8\n"
 
 #: arrayfunc.c:66
 msgid "bad array subscript"
-msgstr "incluziune greșită în interval"
+msgstr "indice de matrice greșit"
 
-#: arrayfunc.c:421 builtins/declare.def:638 variables.c:2274 variables.c:2300
-#: variables.c:3133
+#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268
+#: variables.c:3101
 #, c-format
 msgid "%s: removing nameref attribute"
-msgstr ""
+msgstr "%s: se elimină atributul nameref"
 
-#: arrayfunc.c:446 builtins/declare.def:851
+#: arrayfunc.c:496 builtins/declare.def:868
 #, c-format
 msgid "%s: cannot convert indexed to associative array"
-msgstr ""
+msgstr "%s: nu se poate converti matricea indexată în asociativă"
 
-#: arrayfunc.c:700
-#, c-format
-msgid "%s: invalid associative array key"
-msgstr ""
-
-#: arrayfunc.c:702
+#: arrayfunc.c:777
 #, c-format
 msgid "%s: cannot assign to non-numeric index"
-msgstr "%s: nu se poate atribui către index ne-numeric"
+msgstr "%s: nu se poate atribui la index ne-numeric"
 
-#: arrayfunc.c:747
+#: arrayfunc.c:822
 #, c-format
 msgid "%s: %s: must use subscript when assigning associative array"
-msgstr ""
+msgstr "%s: %s: trebuie să fie folosit un indice atunci când se atribuie unei matrice asociative"
 
-#: bashhist.c:452
+#: bashhist.c:455
 #, c-format
 msgid "%s: cannot create: %s"
 msgstr "%s: nu s-a putut crea: %s"
 
-#: bashline.c:4310
+#: bashline.c:4479
 msgid "bash_execute_unix_command: cannot find keymap for command"
-msgstr ""
+msgstr "bash_execute_unix_command: nu se poate găsi combinația de taste pentru comandă"
 
-#: bashline.c:4459
+#: bashline.c:4637
 #, c-format
 msgid "%s: first non-whitespace character is not `\"'"
-msgstr ""
+msgstr "%s: primul caracter care nu este spațiu în alb nu este «\"» (ghilimele duble)"
 
-#: bashline.c:4488
+#: bashline.c:4666
 #, c-format
 msgid "no closing `%c' in %s"
-msgstr ""
+msgstr "nu se închide „%c” în %s"
 
-#: bashline.c:4519
+#: bashline.c:4697
 #, c-format
 msgid "%s: missing colon separator"
-msgstr "%s: lipsește separatorul două puncte"
+msgstr "%s: lipsește separatorul două puncte (:)"
 
-#: bashline.c:4555
-#, fuzzy, c-format
+#: bashline.c:4733
+#, c-format
 msgid "`%s': cannot unbind in command keymap"
-msgstr "%s: comandă negăsită"
+msgstr "„%s”: nu se poate înlătura combinația de taste atribuită la comandă"
 
+# Aici, trebuie folosit forma de plural, așa cum am făcut-o, sau cea de singular:
+# extindere (de) acoladă?
 #: braces.c:327
 #, c-format
 msgid "brace expansion: cannot allocate memory for %s"
-msgstr ""
+msgstr "expansiunea de acolade: nu se poate aloca memorie pentru %s"
 
 #: braces.c:406
 #, c-format
 msgid "brace expansion: failed to allocate memory for %u elements"
-msgstr ""
+msgstr "expansiunea de acolade: a eșuat alocarea memoriei pentru %u elemente"
 
 #: braces.c:451
 #, c-format
 msgid "brace expansion: failed to allocate memory for `%s'"
-msgstr ""
+msgstr "expansiunea de acolade: a eșuat alocarea memoriei pentru „%s”"
 
-#: builtins/alias.def:131 variables.c:1844
+#: builtins/alias.def:131 variables.c:1817
 #, c-format
 msgid "`%s': invalid alias name"
 msgstr "„%s”: nume alias nevalid"
 
 #: builtins/bind.def:122 builtins/bind.def:125
 msgid "line editing not enabled"
-msgstr "sfârșitul de linie nu este activat"
+msgstr "editarea liniilor nu este activată"
 
 #: builtins/bind.def:212
 #, c-format
 msgid "`%s': invalid keymap name"
-msgstr ""
+msgstr "`%s': nume de combinație de taste nevalid"
 
 #: builtins/bind.def:252
-#, fuzzy, c-format
+#, c-format
 msgid "%s: cannot read: %s"
-msgstr "%s: nu s-a putut crea: %s"
+msgstr "%s: nu s-a putut citii: %s"
 
 #: builtins/bind.def:328 builtins/bind.def:358
-#, fuzzy, c-format
+#, c-format
 msgid "`%s': unknown function name"
-msgstr "%s: funcție doar în citire (readonly)"
+msgstr "„%s”: nume de funcție necunoscut"
 
 #: builtins/bind.def:336
 #, c-format
@@ -128,12 +133,12 @@ msgstr "%s nu este asociat niciunei taste.\n"
 #: builtins/bind.def:340
 #, c-format
 msgid "%s can be invoked via "
-msgstr "%s poate fi invocat prin "
+msgstr "%s poate fi invocat via "
 
 #: builtins/bind.def:378 builtins/bind.def:395
-#, fuzzy, c-format
+#, c-format
 msgid "`%s': cannot unbind"
-msgstr "%s: comandă negăsită"
+msgstr "„%s”: atribuirea nu poate fi ștearsă"
 
 #: builtins/break.def:77 builtins/break.def:119
 msgid "loop count"
@@ -154,22 +159,30 @@ msgid ""
 "    The value of EXPR indicates how many call frames to go back before the\n"
 "    current one; the top frame is frame 0."
 msgstr ""
+"Returnează contextul apelului subrutinei curente.\n"
+"    \n"
+"    Fără EXPR, returnează „$linie $nume_fișier”.  Cu EXPR, returnează\n"
+"    „$linie $subrutină $nume_fișier”; aceste informații suplimentare pot să fie\n"
+"    folosite pentru a furniza o urmărire a stivei.\n"
+"    \n"
+"    Valoarea EXPR indică cîte cadre de apel trebuie să se întoarcă înaintea celui\n"
+"    curent; cadrul superior este cadrul 0."
 
 #: builtins/cd.def:327
 msgid "HOME not set"
-msgstr "HOME nu este stabilit"
+msgstr "variabila $HOME nu este definită"
 
-#: builtins/cd.def:335 builtins/common.c:161 test.c:901
+#: builtins/cd.def:335 builtins/common.c:161 test.c:916
 msgid "too many arguments"
 msgstr "prea mulți parametri"
 
 #: builtins/cd.def:342
 msgid "null directory"
-msgstr "director null"
+msgstr "director nul"
 
 #: builtins/cd.def:353
 msgid "OLDPWD not set"
-msgstr "OLDPWD nu este stabilit"
+msgstr "variabila $OLDPWD nu este definită"
 
 #: builtins/common.c:96
 #, c-format
@@ -186,10 +199,10 @@ msgstr "avertizare: "
 msgid "%s: usage: "
 msgstr "%s: utilizare: "
 
-#: builtins/common.c:193 shell.c:516 shell.c:844
+#: builtins/common.c:193 shell.c:524 shell.c:866
 #, c-format
 msgid "%s: option requires an argument"
-msgstr "%s: opțiunea necesită un parametru"
+msgstr "%s: opțiunea necesită un argument"
 
 #: builtins/common.c:200
 #, c-format
@@ -197,269 +210,356 @@ msgid "%s: numeric argument required"
 msgstr "%s: argument numeric necesar"
 
 #: builtins/common.c:207
-#, fuzzy, c-format
+#, c-format
 msgid "%s: not found"
-msgstr "%s: comandă negăsită"
+msgstr "%s: nu s-a găsit"
 
-#: builtins/common.c:216 shell.c:857
-#, fuzzy, c-format
+#: builtins/common.c:216 shell.c:879
+#, c-format
 msgid "%s: invalid option"
-msgstr "%c%c: opțiune invalidă"
+msgstr "%s: opțiune nevalidă"
 
 #: builtins/common.c:223
-#, fuzzy, c-format
+#, c-format
 msgid "%s: invalid option name"
-msgstr "%c%c: opțiune invalidă"
+msgstr "%s: nume de opțiune nevalid"
 
-#: builtins/common.c:230 execute_cmd.c:2373 general.c:368 general.c:373
-#, fuzzy, c-format
+#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373
+#, c-format
 msgid "`%s': not a valid identifier"
-msgstr "`%s' nu este un identificator valid"
+msgstr "„%s” nu este un identificator valid"
 
 #: builtins/common.c:240
-#, fuzzy
 msgid "invalid octal number"
-msgstr "număr de semnal invalid"
+msgstr "număr octal nevalid"
 
 #: builtins/common.c:242
-#, fuzzy
 msgid "invalid hex number"
-msgstr "număr de semnal invalid"
+msgstr "număr hexazecimal nevalid"
 
-#: builtins/common.c:244 expr.c:1569
-#, fuzzy
+#: builtins/common.c:244 expr.c:1574
 msgid "invalid number"
-msgstr "număr de semnal invalid"
+msgstr "număr nevalid"
 
 #: builtins/common.c:252
 #, c-format
 msgid "%s: invalid signal specification"
-msgstr ""
-
+msgstr "%s: specificație de semnal nevalidă"
+
+# spec = specificare
+# sau
+# spec = specificație
+# ???
+# de rezolvat
+# ------------------------------------
+# Opinii/Idei?
+# ***
+# după revizarea fișierului, DȘ, spune:
+# 1. „→ și eu aș păstra specificație aici și în restul fișierului”
+# ===
+# Ok, rămînem cu «spec, specification = specificație»
+# .
+# 2. → iar job spec l-aș traduce cu „specificația serviciului” (fiind vorba de un proces care rulează pe computer)
+# ===
+# am tradus «job spec» ca specificație de lucru,
+# datorită faptului că «job-urile», nu sunt
+# întotdeauna niște servicii, și mai ales datorită
+# faptului că adesea sunt o pleiadă de procese,
+# grupate (cel mai adesea un proces părinte
+# cu fii săi), alteori un grup de procese
+# interacționate.
 #: builtins/common.c:259
 #, c-format
 msgid "`%s': not a pid or valid job spec"
-msgstr ""
+msgstr "„%s”: nu este un pid sau o specificație validă de lucru"
 
-#: builtins/common.c:266 error.c:510
+#: builtins/common.c:266 error.c:536
 #, c-format
 msgid "%s: readonly variable"
-msgstr "%s: variabilă doar în citire"
+msgstr "%s: variabilă protejată la scriere"
 
-#: builtins/common.c:274
+#: builtins/common.c:273
+#, c-format
+msgid "%s: cannot assign"
+msgstr "%s: nu se poate atribui"
+
+#: builtins/common.c:281
 #, c-format
 msgid "%s: %s out of range"
-msgstr ""
+msgstr "%s: %s în afara intervalului"
 
-#: builtins/common.c:274 builtins/common.c:276
-#, fuzzy
+#: builtins/common.c:281 builtins/common.c:283
 msgid "argument"
-msgstr "se așteaptă parametru"
+msgstr "argument"
 
-#: builtins/common.c:276
+#: builtins/common.c:283
 #, c-format
 msgid "%s out of range"
-msgstr ""
-
-#: builtins/common.c:284
+msgstr "%s în afara intervalului"
+
+# R-GC, scrie:
+# după revizarea fișierului, DȘ, spune:
+# «→ la fel și aici, și la următoarele apariții ale lui job, → „nu există asemenea serviciu”»
+# ===
+# am tradus «job» ca lucrare, datorită faptului
+# că «job-urile», nu sunt întotdeauna niște
+# servicii, și mai ales datorită faptului că
+# adesea sunt o pleiadă de procese, grupate
+# (cel mai adesea un proces părinte cu fii săi),
+# alteori un grup de procese interacționate.
+#: builtins/common.c:291
 #, c-format
 msgid "%s: no such job"
-msgstr ""
+msgstr "%s: nu există această lucrare"
 
-#: builtins/common.c:292
-#, fuzzy, c-format
+#: builtins/common.c:299
+#, c-format
 msgid "%s: no job control"
-msgstr "nici un control de job în acest shell"
+msgstr "%s: nu există un control de lucrări"
 
-#: builtins/common.c:294
-#, fuzzy
+#: builtins/common.c:301
 msgid "no job control"
-msgstr "nici un control de job în acest shell"
+msgstr "nu există un control de lucrări"
 
-#: builtins/common.c:304
-#, fuzzy, c-format
+#: builtins/common.c:311
+#, c-format
 msgid "%s: restricted"
-msgstr "%s: jobul a fost terminat"
+msgstr "%s: restricționat"
 
-#: builtins/common.c:306
+#: builtins/common.c:313
 msgid "restricted"
-msgstr ""
-
-#: builtins/common.c:314
+msgstr "restricționat"
+
+# R-GC, întreabă:
+# Ce facem cu „Shell”?
+# Cum îl traducem?
+# ***
+# după revizarea fișierului, DȘ, spune:
+# „→ mă trem că „shell” ar trebui să rămână tot „shell”: https://ro.wikipedia.org/wiki/Shell_(informatic%C4%83)”
+# ===
+# Mda, un răspuns la care mă așteptam; ca un
+# fapt divers: nici alte echipe de traducători,
+# n-au reușit să „translate” «shell» în altceva
+# decît în «shell», au fost încercări (traduceri
+# reale) → scoică, cochilie, carapace sau
+# ambalaj; cu toate că unele dintre ele, au
+# avut oarecare succes, niciuna n-a rezistat
+# cu trecerea timpului.
+#: builtins/common.c:321
 #, c-format
 msgid "%s: not a shell builtin"
-msgstr ""
+msgstr "%s: nu este o comandă internă"
 
-#: builtins/common.c:323
-#, fuzzy, c-format
+#: builtins/common.c:330
+#, c-format
 msgid "write error: %s"
-msgstr "eroare de legătură (pipe): %s"
+msgstr "eroare de scriere: %s"
 
-#: builtins/common.c:331
+#: builtins/common.c:338
 #, c-format
 msgid "error setting terminal attributes: %s"
-msgstr ""
+msgstr "eroare la configurarea atributelor terminalului: %s"
 
-#: builtins/common.c:333
+#: builtins/common.c:340
 #, c-format
 msgid "error getting terminal attributes: %s"
-msgstr ""
+msgstr "eroare la obținerea atributelor terminalului: %s"
 
-#: builtins/common.c:635
+# - Eroare la preluarea...
+# - Eroare la obținerea...
+# - Eroare la recuperarea...
+# Am ales prima variantă, dar este cea mai bună,
+# în contextul dat?
+#: builtins/common.c:642
 #, c-format
 msgid "%s: error retrieving current directory: %s: %s\n"
-msgstr ""
+msgstr "%s: eroare la preluarea directorului curent: %s: %s\n"
 
-#: builtins/common.c:701 builtins/common.c:703
-#, fuzzy, c-format
+#: builtins/common.c:708 builtins/common.c:710
+#, c-format
 msgid "%s: ambiguous job spec"
-msgstr "%s: Redirectare ambiguă"
+msgstr "%s: specificație de lucrare, ambiguă"
 
-#: builtins/common.c:964
+#: builtins/common.c:971
 msgid "help not available in this version"
-msgstr ""
-
-#: builtins/common.c:1008 builtins/set.def:953 variables.c:3839
-#, fuzzy, c-format
+msgstr "ajutorul nu este disponibil în această versiune"
+
+# R-GC, scrie:
+# după revizarea fișierului, DȘ, spune:
+# „→ ce zici de „readonly” = „protejat la scriere” (cam lung dar parcă este mai sugestiv)”
+# ===
+# nu cred c-ar fi o problemă asta, odată ce face
+# ca mesajul să fie mai clar, mai sugestiv; dar
+# cred că introduce o întrebare:
+# de cine/contra cui este protejat?
+# ***
+# cel puțin de moment, dacă nu definitiv, voi
+# aplica sugestia făcută, asupra acestui mesaj
+# și aaltora asemănătoare...
+#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825
+#, c-format
 msgid "%s: cannot unset: readonly %s"
-msgstr "%s: nu s-a putut crea: %s"
+msgstr "%s: nu se poate deconfigura: %s este protejat la scriere"
 
-#: builtins/common.c:1013 builtins/set.def:932 variables.c:3844
-#, fuzzy, c-format
+#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830
+#, c-format
 msgid "%s: cannot unset"
-msgstr "%s: nu s-a putut crea: %s"
+msgstr "%s: nu se poate deconfigura"
 
 #: builtins/complete.def:287
 #, c-format
 msgid "%s: invalid action name"
-msgstr ""
+msgstr "%s: nume de acțiune nevalid"
 
-#: builtins/complete.def:486 builtins/complete.def:634
-#: builtins/complete.def:865
+# Întrebare:
+# nicio...
+#      sau
+# nu există (o)...
+#: builtins/complete.def:486 builtins/complete.def:642
+#: builtins/complete.def:873
 #, c-format
 msgid "%s: no completion specification"
-msgstr ""
+msgstr "%s: nicio specificație de completare"
 
-#: builtins/complete.def:688
+#: builtins/complete.def:696
 msgid "warning: -F option may not work as you expect"
-msgstr ""
+msgstr "avertisment: este posibil ca opțiunea „-F” să nu funcționeze așa cum vă așteptați"
 
-#: builtins/complete.def:690
+#: builtins/complete.def:698
 msgid "warning: -C option may not work as you expect"
-msgstr ""
-
-#: builtins/complete.def:838
+msgstr "avertisment: este posibil ca opțiunea „-C” să nu funcționeze așa cum vă așteptați"
+
+# Întrebare:
+# - În prezent ...
+# - În acest moment ...
+# - În momentul actual ...
+# este formula adecvată contextului?
+#: builtins/complete.def:846
 msgid "not currently executing completion function"
-msgstr ""
+msgstr "în prezent funcția de completare nu rulează"
 
-#: builtins/declare.def:134
-#, fuzzy
+#: builtins/declare.def:137
 msgid "can only be used in a function"
-msgstr "poate fi folosit doar într-o funcție, și face ca variabila NUME"
+msgstr "poate fi folosit doar într-o funcție"
+
+#: builtins/declare.def:437
+msgid "cannot use `-f' to make functions"
+msgstr "nu se poate utiliza „-f” pentru a face funcții"
+
+#: builtins/declare.def:464 execute_cmd.c:6132
+#, c-format
+msgid "%s: readonly function"
+msgstr "%s: funcție protejată la scriere"
 
-#: builtins/declare.def:363 builtins/declare.def:756
+#: builtins/declare.def:521 builtins/declare.def:804
 #, c-format
 msgid "%s: reference variable cannot be an array"
-msgstr ""
+msgstr "%s: variabila de referință nu poate fi o matrice"
 
-#: builtins/declare.def:374 variables.c:3385
+#: builtins/declare.def:532 variables.c:3359
 #, c-format
 msgid "%s: nameref variable self references not allowed"
-msgstr ""
+msgstr "%s: nu sunt permise auto-referințele la variabile nameref"
 
-#: builtins/declare.def:379 variables.c:2104 variables.c:3304 variables.c:3312
-#: variables.c:3382
+#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286
+#: variables.c:3356
 #, c-format
 msgid "%s: circular name reference"
-msgstr ""
+msgstr "%s: referință de nume circulară"
 
-#: builtins/declare.def:384 builtins/declare.def:762 builtins/declare.def:773
+# R-GC, scrie:
+# după revizarea fișierului, DȘ, spune:
+# „→ cred că s-ar putea pune ghilimele românești”
+# ===
+# corecție aplicată
+#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820
 #, c-format
 msgid "`%s': invalid variable name for name reference"
-msgstr ""
-
-#: builtins/declare.def:514
-msgid "cannot use `-f' to make functions"
-msgstr ""
+msgstr "„%s”: nume de variabilă nevalid pentru referință la nume"
 
-#: builtins/declare.def:526 execute_cmd.c:5986
+# Problemă:
+#  in this way = în acest fel
+#  in this way = în acest mod
+#  in this way = de această formă
+# Mă refer la această intrare, care dintre cele
+# 3 opțiuni, este cea mai bună?
+#: builtins/declare.def:856
 #, c-format
-msgid "%s: readonly function"
-msgstr "%s: funcție doar în citire (readonly)"
-
-#: builtins/declare.def:824
-#, c-format
-msgid "%s: quoted compound array assignment deprecated"
-msgstr ""
-
-#: builtins/declare.def:838
-#, fuzzy, c-format
 msgid "%s: cannot destroy array variables in this way"
-msgstr "$%s: nu se poate asigna în acest mod"
+msgstr "%s: nu se pot distruge variabilele matrice în acest fel"
 
-#: builtins/declare.def:845 builtins/read.def:815
+#: builtins/declare.def:862 builtins/read.def:887
 #, c-format
 msgid "%s: cannot convert associative to indexed array"
-msgstr ""
+msgstr "%s: nu se poate converti o matrice asociativă într-o matrice indexată"
 
-#: builtins/enable.def:143 builtins/enable.def:151
+# Întrebare:
+# - se poate formula mai bine, de exp.:
+# alocarea matricei compuse, între ghilimele; este perimată-învechită
+#: builtins/declare.def:891
+#, c-format
+msgid "%s: quoted compound array assignment deprecated"
+msgstr "%s: alocarea de matrice compusă între ghilimele este perimată"
+
+#: builtins/enable.def:145 builtins/enable.def:153
 msgid "dynamic loading not available"
-msgstr ""
+msgstr "încărcarea dinamică nu este disponibilă"
 
-#: builtins/enable.def:343
-#, fuzzy, c-format
+#: builtins/enable.def:376
+#, c-format
 msgid "cannot open shared object %s: %s"
-msgstr "nu pot deschide legătura numită %s pentru %s: %s"
+msgstr "nu poate deschide obiectul partajat %s: %s"
 
-#: builtins/enable.def:371
+#: builtins/enable.def:405
 #, c-format
 msgid "cannot find %s in shared object %s: %s"
-msgstr ""
+msgstr "nu se poate găsi %s în obiectul partajat %s: %s"
 
-#: builtins/enable.def:388
+#: builtins/enable.def:422
 #, c-format
 msgid "%s: dynamic builtin already loaded"
-msgstr ""
+msgstr "%s: comanda internă dinamică a «bash», este deja încărcată"
 
-#: builtins/enable.def:392
+# De revizat...
+#: builtins/enable.def:426
 #, c-format
 msgid "load function for %s returns failure (%d): not loaded"
-msgstr ""
+msgstr "funcția de încărcare pentru %s returnează eroarea (%d): încărcarea a eșuat"
 
-#: builtins/enable.def:517
+#: builtins/enable.def:551
 #, c-format
 msgid "%s: not dynamically loaded"
-msgstr ""
+msgstr "%s: nu este încărcat dinamic"
 
-#: builtins/enable.def:543
-#, fuzzy, c-format
+#: builtins/enable.def:577
+#, c-format
 msgid "%s: cannot delete: %s"
-msgstr "%s: nu s-a putut crea: %s"
+msgstr "%s: nu se poate șterge: %s"
 
-#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5818
+#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959
 #, c-format
 msgid "%s: is a directory"
-msgstr "%s: este director"
+msgstr "%s: este un director"
 
 #: builtins/evalfile.c:144
-#, fuzzy, c-format
+#, c-format
 msgid "%s: not a regular file"
-msgstr "%s: nu se poate executa fișierul binar"
+msgstr "%s: nu este un fișier normal"
 
 #: builtins/evalfile.c:153
 #, c-format
 msgid "%s: file is too large"
-msgstr ""
+msgstr "%s: fișierul este prea mare"
 
-#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1647
+#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673
 #, c-format
 msgid "%s: cannot execute binary file"
 msgstr "%s: nu se poate executa fișierul binar"
 
 #: builtins/exec.def:158 builtins/exec.def:160 builtins/exec.def:246
-#, fuzzy, c-format
+#, c-format
 msgid "%s: cannot execute: %s"
-msgstr "%s: nu s-a putut crea: %s"
+msgstr "%s: nu se poate executa: %s"
 
 #: builtins/exit.def:64
 #, c-format
@@ -468,41 +568,40 @@ msgstr "deautentificare\n"
 
 #: builtins/exit.def:89
 msgid "not login shell: use `exit'"
-msgstr ""
+msgstr "nu este un shell de autentificare: utilizați „exit”"
 
 #: builtins/exit.def:121
 #, c-format
 msgid "There are stopped jobs.\n"
-msgstr ""
+msgstr "Sunt(există) lucrări oprite.\n"
 
 #: builtins/exit.def:123
 #, c-format
 msgid "There are running jobs.\n"
-msgstr ""
+msgstr "Sunt(există) lucrări în execuție.\n"
 
 #: builtins/fc.def:275 builtins/fc.def:373 builtins/fc.def:417
-#, fuzzy
 msgid "no command found"
-msgstr "%s: comandă negăsită"
+msgstr "nu s-a găsit nici-o comandă"
 
 #: builtins/fc.def:363 builtins/fc.def:368 builtins/fc.def:407
 #: builtins/fc.def:412
 msgid "history specification"
-msgstr ""
+msgstr "specificație de istoric"
 
 #: builtins/fc.def:444
-#, fuzzy, c-format
+#, c-format
 msgid "%s: cannot open temp file: %s"
-msgstr "%s: nu s-a putut crea: %s"
+msgstr "%s: nu se poate deschide fișierul temporal: %s"
 
 #: builtins/fg_bg.def:152 builtins/jobs.def:284
 msgid "current"
-msgstr ""
+msgstr "actual"
 
 #: builtins/fg_bg.def:161
 #, c-format
 msgid "job %d started without job control"
-msgstr ""
+msgstr "lucrarea %d a început fără controlul lucrării"
 
 #: builtins/getopt.c:110
 #, c-format
@@ -514,14 +613,21 @@ msgstr "%s: opțiune ilegală -- %c\n"
 msgid "%s: option requires an argument -- %c\n"
 msgstr "%s: opțiunea necesită un parametru: -- %c\n"
 
+# NOTĂ:
+# cred că aceasta este cea mai bună traducere posibilă!
+# Am frunzărit traducerile celorlalte echipe de traducere latine (nu mi-a scăpat niciuna, în afară de cea galiciană, care obligă la descărcarea fișierului pentru al vedea)
+# În cea a echipei spaniole, a tradus mesajul ca:
+# asociación desactivada
+# ce mi s-a părut cea mai apropiată contextului în care apare mesajul:
+# #: builtins/hash.def:91
 #: builtins/hash.def:91
 msgid "hashing disabled"
-msgstr ""
+msgstr "asocierea este desactivată"
 
 #: builtins/hash.def:139
 #, c-format
 msgid "%s: hash table empty\n"
-msgstr ""
+msgstr "%s: tabelul de asociere este gol\n"
 
 #: builtins/hash.def:267
 #, c-format
@@ -531,28 +637,29 @@ msgstr "potriviri\tcomandă\n"
 #: builtins/help.def:133
 msgid "Shell commands matching keyword `"
 msgid_plural "Shell commands matching keywords `"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "Comenzile Shell care se potrivesc cu cuvântul cheie „"
+msgstr[1] "Comenzile Shell care se potrivesc cu cuvintele cheie „"
+msgstr[2] "Comenzile Shell care se potrivesc cu cuvintele cheie „"
 
 #: builtins/help.def:135
 msgid ""
 "'\n"
 "\n"
 msgstr ""
+"”\n"
+"\n"
 
 #: builtins/help.def:185
 #, c-format
-msgid ""
-"no help topics match `%s'.  Try `help help' or `man -k %s' or `info %s'."
-msgstr ""
+msgid "no help topics match `%s'.  Try `help help' or `man -k %s' or `info %s'."
+msgstr "niciun subiect de ajutor nu se potrivește cu „%s”.  Încercați «help help» sau «man -k %s» sau «info %s»."
 
-#: builtins/help.def:224
-#, fuzzy, c-format
+#: builtins/help.def:223
+#, c-format
 msgid "%s: cannot open: %s"
-msgstr "%s: nu s-a putut crea: %s"
+msgstr "%s: nu se poate deschide: %s"
 
-#: builtins/help.def:524
+#: builtins/help.def:523
 #, c-format
 msgid ""
 "These shell commands are defined internally.  Type `help' to see this list.\n"
@@ -563,129 +670,141 @@ msgid ""
 "A star (*) next to a name means that the command is disabled.\n"
 "\n"
 msgstr ""
+"Aceste comenzi shell, sunt definite intern.  Tastează «help», pentru a vedea\n"
+"această listă.\n"
+"Tastează «help nume_funcție» pentru a afla mai multe despre funcția „nume_funcție”.\n"
+"Utilizați «info bash» pentru a afla mai multe despre shell în general.\n"
+"Utilizați «man -k» sau «info» pentru a afla mai multe despre comenzile care nu\n"
+"sunt în această listă.\n"
+"\n"
+"O stea (*) în dreptul unui nume înseamnă că acea comandă este dezactivată.\n"
+"\n"
 
-#: builtins/history.def:155
+# Propunere:
+# Mă gîndesc dacă n-ar suna mai bine fraza, dacă
+# înlocuiesc „unul” cu „un argument”, așa:
+# nu se poate folosi mai mult de un argument dintre -anrw
+#: builtins/history.def:159
 msgid "cannot use more than one of -anrw"
-msgstr ""
+msgstr "nu se poate folosi mai mult de o opțiune dintre „-a, -n, -r sau -w”"
 
-#: builtins/history.def:188 builtins/history.def:198 builtins/history.def:213
-#: builtins/history.def:230 builtins/history.def:242 builtins/history.def:249
+#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215
+#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247
 msgid "history position"
-msgstr ""
+msgstr "poziție în registrul istoric al comenzilor"
 
-#: builtins/history.def:340
+#: builtins/history.def:338
 #, c-format
 msgid "%s: invalid timestamp"
-msgstr ""
+msgstr "%s: marcaj de timp nevalid"
 
-#: builtins/history.def:451
-#, fuzzy, c-format
+#: builtins/history.def:449
+#, c-format
 msgid "%s: history expansion failed"
-msgstr "%s: se așteaptă expresie întreagă (integer)"
+msgstr "%s: a eșuat expansiunea istoriei"
 
 #: builtins/inlib.def:71
-#, fuzzy, c-format
+#, c-format
 msgid "%s: inlib failed"
-msgstr "%s: variabilă fără limită"
+msgstr "%s: a eșuat inlib"
 
 #: builtins/jobs.def:109
 msgid "no other options allowed with `-x'"
-msgstr ""
+msgstr "nu sunt permise alte opțiuni cu „-x”"
 
 #: builtins/kill.def:211
 #, c-format
 msgid "%s: arguments must be process or job IDs"
-msgstr ""
+msgstr "%s: argumentele trebuie să fie ID-uri de proces sau de lucrări"
 
 #: builtins/kill.def:274
-#, fuzzy
 msgid "Unknown error"
-msgstr "Eroare necunoscută %d"
+msgstr "Eroare necunoscută"
 
-#: builtins/let.def:97 builtins/let.def:122 expr.c:639 expr.c:657
+#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658
 msgid "expression expected"
 msgstr "se așteaptă expresie"
 
-#: builtins/mapfile.def:178
+#: builtins/mapfile.def:180
 #, c-format
 msgid "%s: not an indexed array"
-msgstr ""
+msgstr "%s: nu este o matrice indexată"
 
-#: builtins/mapfile.def:271 builtins/read.def:308
+#: builtins/mapfile.def:276 builtins/read.def:336
 #, c-format
 msgid "%s: invalid file descriptor specification"
-msgstr ""
+msgstr "%s: specificație de descriptor de fișier nevalidă"
 
-#: builtins/mapfile.def:279 builtins/read.def:315
+#: builtins/mapfile.def:284 builtins/read.def:343
 #, c-format
 msgid "%d: invalid file descriptor: %s"
-msgstr ""
+msgstr "%d: descriptor de fișier nevalid: %s"
 
-#: builtins/mapfile.def:288 builtins/mapfile.def:326
+#: builtins/mapfile.def:293 builtins/mapfile.def:331
 #, c-format
 msgid "%s: invalid line count"
-msgstr ""
+msgstr "%s: contorizare de linii nevalidă"
 
-#: builtins/mapfile.def:299
-#, fuzzy, c-format
+#: builtins/mapfile.def:304
+#, c-format
 msgid "%s: invalid array origin"
-msgstr "%s:subscriere interval invalid"
+msgstr "%s: origine matrice nevalid"
 
-#: builtins/mapfile.def:316
+#: builtins/mapfile.def:321
 #, c-format
 msgid "%s: invalid callback quantum"
-msgstr ""
+msgstr "%s: cuantum de apel invers nevalid"
 
-#: builtins/mapfile.def:349
+#: builtins/mapfile.def:354
 msgid "empty array variable name"
-msgstr ""
+msgstr "nume de variabilă matrice gol"
 
-#: builtins/mapfile.def:370
+#: builtins/mapfile.def:375
 msgid "array variable support required"
-msgstr ""
+msgstr "este necesar suport pentru variabilă matrice"
 
-#: builtins/printf.def:419
+#: builtins/printf.def:430
 #, c-format
 msgid "`%s': missing format character"
-msgstr ""
+msgstr "„%s”: lipsește caracterul de format"
 
-#: builtins/printf.def:474
+#: builtins/printf.def:485
 #, c-format
 msgid "`%c': invalid time format specification"
-msgstr ""
+msgstr "„%c”: specificație a formatului de timp nevalidă"
 
-#: builtins/printf.def:676
+#: builtins/printf.def:708
 #, c-format
 msgid "`%c': invalid format character"
-msgstr ""
+msgstr "„%c”: caracter de format nevalid"
 
-#: builtins/printf.def:702
+#: builtins/printf.def:734
 #, c-format
 msgid "warning: %s: %s"
-msgstr ""
+msgstr "avertizare: %s: %s"
 
-#: builtins/printf.def:788
+#: builtins/printf.def:822
 #, c-format
 msgid "format parsing problem: %s"
-msgstr ""
+msgstr "problemă cu analizarea formatului: %s"
 
-#: builtins/printf.def:885
+#: builtins/printf.def:919
 msgid "missing hex digit for \\x"
-msgstr ""
+msgstr "lipsește o cifră hexazecimală pentru \\x"
 
-#: builtins/printf.def:900
+#: builtins/printf.def:934
 #, c-format
 msgid "missing unicode digit for \\%c"
-msgstr ""
+msgstr "lipsește o cifră unicode pentru \\%c"
 
 #: builtins/pushd.def:199
 msgid "no other directory"
 msgstr "niciun alt director"
 
 #: builtins/pushd.def:360
-#, fuzzy, c-format
+#, c-format
 msgid "%s: invalid argument"
-msgstr "%s necesită un parametru"
+msgstr "%s argument nevalid"
 
 #: builtins/pushd.def:480
 msgid "<no current directory>"
@@ -693,12 +812,22 @@ msgstr "<niciun director curent>"
 
 #: builtins/pushd.def:524
 msgid "directory stack empty"
-msgstr ""
+msgstr "stiva de directoare este goală"
 
 #: builtins/pushd.def:526
 msgid "directory stack index"
-msgstr ""
-
+msgstr "indexul stivei de directoare"
+
+# R-GC, scrie:
+# după revizarea fișierului, DȘ, spune:
+# «→ aș pune „directorul personal” în loc de „acasă”»
+# ===
+# nu-mi prea place să amestec numele lucurilor,
+# cu definiția lor, în acest caz:
+# „directorul acasă → directorul personal al utilizatorului”
+# voi face aceasă schimbare, în cazul în care,
+# autorul numește home folder, în loc de
+# home directory
 #: builtins/pushd.def:701
 msgid ""
 "Display the list of currently remembered directories.  Directories\n"
@@ -714,14 +843,30 @@ msgid ""
 "    \twith its position in the stack\n"
 "    \n"
 "    Arguments:\n"
-"      +N\tDisplays the Nth entry counting from the left of the list shown "
-"by\n"
+"      +N\tDisplays the Nth entry counting from the left of the list shown by\n"
 "    \tdirs when invoked without options, starting with zero.\n"
 "    \n"
-"      -N\tDisplays the Nth entry counting from the right of the list shown "
-"by\n"
+"      -N\tDisplays the Nth entry counting from the right of the list shown by\n"
 "\tdirs when invoked without options, starting with zero."
 msgstr ""
+"Afișează lista curentă a directoarelor memorate.  Directoarele\n"
+"    sunt adăugate la această listă cu comanda «pushd» și sunt eliminate din\n"
+"    ea, cu comanda «popd».\n"
+"    \n"
+"    Opțiuni:\n"
+"      -c\tgolește stiva de directoare prin ștergerea tuturor elementelor\n"
+"      -l\tnu afișează versiuni scurtate (cu ~) ale directoarelor în raport cu\n"
+"    \tdirectorul dumneavoastră «acasă»\n"
+"      -p\timprimă stiva de directoare cu o intrare pe linie\n"
+"      -v\timprimă stiva de directoare cu o intrare pe linie, prefixată cu poziția\n"
+"    \tsa în stivă\n"
+"    \n"
+"    Argumente:\n"
+"      +N\tAfișează a N-a intrare numărând din stânga listei afișate de «dirs»,\n"
+"    \tatunci când este invocată fără opțiuni, începând cu zero.\n"
+"    \n"
+"      -N\tAfișează a N-a intrare numărând din dreapta listei afișate de «dirs»,\n"
+"\tatunci când este invocată fără opțiuni, începând cu zero."
 
 #: builtins/pushd.def:723
 msgid ""
@@ -747,6 +892,27 @@ msgid ""
 "    \n"
 "    The `dirs' builtin displays the directory stack."
 msgstr ""
+"Adaugă un director în partea de sus a stivei de directoare sau rotește\n"
+"   stiva, făcând din noul director din partea de sus a stivei, directorul de\n"
+"    lucru curent. Fără argumente, interschimbă primele două directoare.\n"
+"    \n"
+"    Opțiuni:\n"
+"      -n\tSuprimă schimbarea normală a directorului atunci când se\n"
+"    \tadaugă directoare la stivă, astfel încât numai stiva este manipulată.\n"
+"    \n"
+"    Argumente:\n"
+"      +N\tRotește stiva astfel încât al N-lea director (numărând din\n"
+"    \tstânga listei afișate de «dirs», începând cu zero) să fie în\n"
+"    \tpartea de sus.\n"
+"    \n"
+"      -N\tRotește stiva astfel încât al N-lea director (numărând din\n"
+"    \tdreapta listei afișate de «dirs», începând cu zero) să fie în\n"
+"    \tpartea de sus.\n"
+"    \n"
+"      dir\tAdaugă DIR la stiva de directoare din partea de sus,\n"
+"    \tfăcându-l noul director de lucru curent.\n"
+"    \n"
+"    Comanda internă «dirs» arată stiva curentă de directoare."
 
 #: builtins/pushd.def:748
 msgid ""
@@ -768,67 +934,105 @@ msgid ""
 "    \n"
 "    The `dirs' builtin displays the directory stack."
 msgstr ""
+"Elimină intrările din stiva de directoare.  Fără argumente, elimină directorul\n"
+"    din partea de sus a stivei, și trece la cel cea devenit noul director de sus\n"
+"    a stivei.\n"
+"    \n"
+"    Opțiuni:\n"
+"      -n\tSuprimă schimbarea normală a directorului atunci când se elimină\n"
+"    \tdirectoare din stivă, astfel încât numai stiva este manipulată.\n"
+"    \n"
+"    Argumente:\n"
+"      +N\tElimină intrarea a N-a numărând din stânga listei afișate de «dirs»,\n"
+"    \tîncepând cu zero.  De exemplu: «popd +0» elimină primul director,\n"
+"    \t«popd +1» al doilea director, șamd.\n"
+"    \n"
+"      -N\tElimină intrarea a N-a numărând din dreapta listei afișate de «dirs»,\n"
+"    \tîncepând cu zero.  De exemplu: «popd -0» elimină ultimul director,\n"
+"    \t„popd -1” penultimul director, șamd.\n"
+"    \n"
+"    Comanda internă «dirs» arată stiva curentă de directoare."
 
-#: builtins/read.def:280
+#: builtins/read.def:308
 #, c-format
 msgid "%s: invalid timeout specification"
-msgstr ""
+msgstr "%s: specificație a timpului de expirare nevalidă"
 
-#: builtins/read.def:755
-#, fuzzy, c-format
+#: builtins/read.def:827
+#, c-format
 msgid "read error: %d: %s"
-msgstr "eroare de legătură (pipe): %s"
-
+msgstr "eroare de citire: %d: %s"
+
+# Comentariu:
+# Eram un pic indecis asupra formei finale a traducerii,
+# așa că am început să trag cu ochiul la traducerile
+# celorlalți latini, așa am descoperit la brazilieni,
+# francezi și spanioli(în ordine alfabetică), formula
+# magică  pentru această traducere:
+# 1.
+# msgstr "possível retornar (`return') apenas de uma função ou script carregado (com `source')"
+# 2.
+# msgstr "« return » n'est possible que depuis une fonction ou depuis un script exécuté par « source »"
+# 3.
+# msgstr "sólo se puede usar `return' desde una función o un script leído con `source'"
 #: builtins/return.def:68
 msgid "can only `return' from a function or sourced script"
-msgstr ""
+msgstr "„return”, se poate utiliza doar de la o funcție sau script executat(ă) de la „source”"
 
+# R-GC, scrie:
+# după revizarea fișierului, DȘ, spune:
+# „→ nu se pot anula...”
+# ===
+# Ok, corecție aplicată
 #: builtins/set.def:869
-#, fuzzy
 msgid "cannot simultaneously unset a function and a variable"
-msgstr "poate fi folosit doar într-o funcție, și face ca variabila NUME"
+msgstr "nu se pot anula simultan o funcție și o variabilă"
 
-#: builtins/set.def:966
-#, fuzzy, c-format
+#: builtins/set.def:969
+#, c-format
 msgid "%s: not an array variable"
-msgstr "%s: variabilă fără limită"
+msgstr "%s: nu este o variabilă matrice"
 
 #: builtins/setattr.def:189
-#, fuzzy, c-format
+#, c-format
 msgid "%s: not a function"
-msgstr "%s: funcție doar în citire (readonly)"
+msgstr "%s: nu este o funcție"
 
 #: builtins/setattr.def:194
-#, fuzzy, c-format
+#, c-format
 msgid "%s: cannot export"
-msgstr "%s: nu s-a putut crea: %s"
+msgstr "%s: nu se poate exporta"
 
 #: builtins/shift.def:72 builtins/shift.def:79
-#, fuzzy
 msgid "shift count"
-msgstr "shift [n]"
-
-#: builtins/shopt.def:310
+msgstr "contor deplasare(shift)"
+
+# R-GC, scrie:
+# după revizarea fișierului, DȘ, spune:
+# «→ similar și aici: „nu se pot activa ... ”»
+# ===
+# Ok, corecție aplicată
+#: builtins/shopt.def:323
 msgid "cannot set and unset shell options simultaneously"
-msgstr ""
+msgstr "nu se pot activa și dezactiva simultan opțiunile de shell"
 
-#: builtins/shopt.def:428
+#: builtins/shopt.def:444
 #, c-format
 msgid "%s: invalid shell option name"
-msgstr ""
+msgstr "%s: nume nevalid al opțiunii shell"
 
 #: builtins/source.def:128
 msgid "filename argument required"
-msgstr ""
+msgstr "este necesar argumentul nume_de_fișier"
 
 #: builtins/source.def:154
-#, fuzzy, c-format
+#, c-format
 msgid "%s: file not found"
-msgstr "%s: comandă negăsită"
+msgstr "%s: nu s-a găsit fișierul"
 
 #: builtins/suspend.def:102
 msgid "cannot suspend"
-msgstr ""
+msgstr "nu se poate suspenda"
 
 #: builtins/suspend.def:112
 msgid "cannot suspend a login shell"
@@ -837,12 +1041,12 @@ msgstr "nu se poate suspenda un shell de autentificare"
 #: builtins/type.def:235
 #, c-format
 msgid "%s is aliased to `%s'\n"
-msgstr ""
+msgstr "%s este un alias pentru „%s”\n"
 
 #: builtins/type.def:256
 #, c-format
 msgid "%s is a shell keyword\n"
-msgstr ""
+msgstr "%s este un cuvânt cheie shell\n"
 
 #: builtins/type.def:275
 #, c-format
@@ -852,66 +1056,65 @@ msgstr "%s este o funcție\n"
 #: builtins/type.def:299
 #, c-format
 msgid "%s is a special shell builtin\n"
-msgstr ""
+msgstr "%s este o comandă internă specială a shell\n"
 
 #: builtins/type.def:301
 #, c-format
 msgid "%s is a shell builtin\n"
-msgstr ""
+msgstr "%s este o comandă internă a shell\n"
 
 #: builtins/type.def:323 builtins/type.def:408
 #, c-format
 msgid "%s is %s\n"
-msgstr ""
+msgstr "%s este %s\n"
 
+# sau: este mărunțit/fragmentat ?
 #: builtins/type.def:343
 #, c-format
 msgid "%s is hashed (%s)\n"
-msgstr ""
+msgstr "%s este asociat(hashed) (%s)\n"
 
 #: builtins/ulimit.def:400
 #, c-format
 msgid "%s: invalid limit argument"
-msgstr ""
+msgstr "%s: limită de argument nevalidă"
 
 #: builtins/ulimit.def:426
-#, fuzzy, c-format
+#, c-format
 msgid "`%c': bad command"
-msgstr "%c%c: opțiune invalidă"
+msgstr "„%c”: comandă incorectă"
 
-#: builtins/ulimit.def:455
-#, fuzzy, c-format
+#: builtins/ulimit.def:464
+#, c-format
 msgid "%s: cannot get limit: %s"
-msgstr "%s: nu s-a putut crea: %s"
+msgstr "%s: nu se poate obține limita: %s"
 
-#: builtins/ulimit.def:481
-#, fuzzy
+#: builtins/ulimit.def:490
 msgid "limit"
-msgstr "limită CPU"
+msgstr "limită"
 
-#: builtins/ulimit.def:493 builtins/ulimit.def:793
-#, fuzzy, c-format
+#: builtins/ulimit.def:502 builtins/ulimit.def:802
+#, c-format
 msgid "%s: cannot modify limit: %s"
-msgstr "%s: nu s-a putut crea: %s"
+msgstr "%s: nu se poate modifica limita: %s"
 
 #: builtins/umask.def:115
-#, fuzzy
 msgid "octal number"
-msgstr "număr de semnal invalid"
+msgstr "număr octal"
 
 #: builtins/umask.def:232
 #, c-format
 msgid "`%c': invalid symbolic mode operator"
-msgstr ""
+msgstr "„%c”: operator de mod simbolic nevalid"
 
 #: builtins/umask.def:287
 #, c-format
 msgid "`%c': invalid symbolic mode character"
-msgstr ""
+msgstr "„%c”: caracter de mod simbolic nevalid"
 
-#: error.c:89 error.c:347 error.c:349 error.c:351
+#: error.c:89 error.c:373 error.c:375 error.c:377
 msgid " line "
-msgstr ""
+msgstr " linie "
 
 #: error.c:164
 #, c-format
@@ -921,109 +1124,123 @@ msgstr "ultima comandă: %s\n"
 #: error.c:172
 #, c-format
 msgid "Aborting..."
-msgstr ""
+msgstr "Se abandonează..."
 
 #. TRANSLATORS: this is a prefix for informational messages.
 #: error.c:287
 #, c-format
 msgid "INFORM: "
-msgstr ""
+msgstr "RAPORT: "
+
+#: error.c:310
+#, c-format
+msgid "DEBUG warning: "
+msgstr "Avertisment de DEPANARE: "
 
-#: error.c:462
+#: error.c:488
 msgid "unknown command error"
 msgstr "eroare de comandă necunoscută"
 
-#: error.c:463
+#: error.c:489
 msgid "bad command type"
-msgstr "tip rău de comandă"
+msgstr "tip de comandă greșit"
 
-#: error.c:464
-#, fuzzy
+#: error.c:490
 msgid "bad connector"
-msgstr "conector greșit `%d'"
+msgstr "conector greșit"
 
-#: error.c:465
+#: error.c:491
 msgid "bad jump"
-msgstr "salt rău"
+msgstr "salt eronat"
 
-#: error.c:503
+#: error.c:529
 #, c-format
 msgid "%s: unbound variable"
-msgstr "%s: variabilă fără limită"
+msgstr "%s: variabilă neasociată"
 
-#: eval.c:242
+#: eval.c:243
 msgid "\atimed out waiting for input: auto-logout\n"
-msgstr "\aa expirat așteptând introducerea datelor: auto-logout\n"
+msgstr "\atimed expirat așteptând introducerea datelor: auto-logout\n"
 
-#: execute_cmd.c:537
+#: execute_cmd.c:555
 #, c-format
 msgid "cannot redirect standard input from /dev/null: %s"
-msgstr ""
+msgstr "nu se poate redirecționa intrarea standard de la /dev/null: %s"
 
-#: execute_cmd.c:1297
+#: execute_cmd.c:1317
 #, c-format
 msgid "TIMEFORMAT: `%c': invalid format character"
-msgstr ""
+msgstr "TIMEFORMAT: „%c”: caracter de format nevalid"
 
-#: execute_cmd.c:2362
+#: execute_cmd.c:2391
 #, c-format
 msgid "execute_coproc: coproc [%d:%s] still exists"
-msgstr ""
+msgstr "execute_coproc: coproc [%d:%s] încă există"
 
-#: execute_cmd.c:2486
-#, fuzzy
+#: execute_cmd.c:2524
 msgid "pipe error"
-msgstr "eroare de legătură (pipe): %s"
+msgstr "eroare de linie de conectare"
 
-#: execute_cmd.c:4793
+# Opinie/Motivație:
+# am ales să traduc nesting = suprapunere
+# și nu
+# nesting = imbricare
+# pentru că consider că este vorba de efectul procesului (evaluările, ce vin una după alta,suprapunîndu-se) și nu de-a numi procesul în sine
+# În plus, mi se pare că sună mult mai normal la ureche
+#: execute_cmd.c:4923
 #, c-format
 msgid "eval: maximum eval nesting level exceeded (%d)"
-msgstr ""
+msgstr "eval: s-a depășit nivelul maxim de suprapunere de «eval» (%d)"
 
-#: execute_cmd.c:4805
+#: execute_cmd.c:4935
 #, c-format
 msgid "%s: maximum source nesting level exceeded (%d)"
-msgstr ""
+msgstr "%s: s-a depășit nivelul maxim de suprapunere de citiri cu «source» (%d)"
 
-#: execute_cmd.c:4913
+#: execute_cmd.c:5043
 #, c-format
 msgid "%s: maximum function nesting level exceeded (%d)"
-msgstr ""
+msgstr "%s: s-a depășit nivelul maxim de suprapunere de funcții (%d)"
 
-#: execute_cmd.c:5467
+#: execute_cmd.c:5598
 #, c-format
 msgid "%s: restricted: cannot specify `/' in command names"
-msgstr "%s: limitat: nu se poate specifica `/' în numele comenzilor"
+msgstr "%s: limitat: nu se poate specifica „/” în numele comenzilor"
 
-#: execute_cmd.c:5574
+#: execute_cmd.c:5715
 #, c-format
 msgid "%s: command not found"
 msgstr "%s: comandă negăsită"
 
-#: execute_cmd.c:5816
+#: execute_cmd.c:5957
 #, c-format
 msgid "%s: %s"
-msgstr ""
+msgstr "%s: %s"
+
+#: execute_cmd.c:5975
+#, c-format
+msgid "%s: cannot execute: required file not found"
+msgstr "%s: nu se poate executa: fișierul necesar nu a fost găsit"
 
-#: execute_cmd.c:5854
-#, fuzzy, c-format
+#: execute_cmd.c:6000
+#, c-format
 msgid "%s: %s: bad interpreter"
-msgstr "%s: este director"
+msgstr "%s: %s: interpret greșit"
 
-#: execute_cmd.c:5891
-#, fuzzy, c-format
+#: execute_cmd.c:6037
+#, c-format
 msgid "%s: cannot execute binary file: %s"
-msgstr "%s: nu se poate executa fișierul binar"
+msgstr "%s: nu se poate executa fișierul binar: %s"
 
-#: execute_cmd.c:5977
+#: execute_cmd.c:6123
 #, c-format
 msgid "`%s': is a special builtin"
-msgstr ""
+msgstr "„%s”: este o comandă internă specială"
 
-#: execute_cmd.c:6029
-#, fuzzy, c-format
+#: execute_cmd.c:6175
+#, c-format
 msgid "cannot duplicate fd %d to fd %d"
-msgstr "nu se poate duplica fd %d în fd 0: %s"
+msgstr "nu se poate duplica descriptorul de fișier %d în descriptorul de fișier %d"
 
 #: expr.c:263
 msgid "expression recursion level exceeded"
@@ -1031,372 +1248,395 @@ msgstr "nivel de recursivitate al expresiei depășit"
 
 #: expr.c:291
 msgid "recursion stack underflow"
-msgstr "stivă recursivă prea puțin folosită (underflow)"
+msgstr "stivă recursivă sub nivelul de depășire"
 
-#: expr.c:477
+#: expr.c:478
 msgid "syntax error in expression"
 msgstr "eroare de sintaxă în expresie"
 
-#: expr.c:521
+#: expr.c:522
 msgid "attempted assignment to non-variable"
 msgstr "s-a încercat asignare către non-variabilă"
 
-#: expr.c:530
+#: expr.c:531
 msgid "syntax error in variable assignment"
 msgstr "eroare de sintaxă în atribuirea variabilei"
 
-#: expr.c:544 expr.c:911
+#: expr.c:545 expr.c:912
 msgid "division by 0"
 msgstr "împărțire la 0"
 
-#: expr.c:592
-#, fuzzy
+#: expr.c:593
 msgid "bug: bad expassign token"
-msgstr "bug: identificator(token) expassign greșit %d"
+msgstr "eroare: simbol de atribuire al expresiei greșit"
 
-#: expr.c:646
+#: expr.c:647
 msgid "`:' expected for conditional expression"
-msgstr "`:' așteptat după expresie condițională"
+msgstr "se aștepta „:” după expresia condițională"
 
-#: expr.c:972
+#: expr.c:973
 msgid "exponent less than 0"
-msgstr ""
+msgstr "exponent mai mic de 0"
 
-#: expr.c:1029
+#: expr.c:1030
 msgid "identifier expected after pre-increment or pre-decrement"
-msgstr ""
+msgstr "se aștepta un identificator după pre-increment sau pre-decrement"
 
-#: expr.c:1056
+#: expr.c:1057
 msgid "missing `)'"
-msgstr "`)' lipsă"
+msgstr "„)” lipsește"
 
-#: expr.c:1107 expr.c:1487
-#, fuzzy
+#: expr.c:1108 expr.c:1492
 msgid "syntax error: operand expected"
-msgstr "eroare de sintaxă: sfârșit de fișier neașteptat"
+msgstr "eroare de sintaxă: se aștepta un operand"
 
-#: expr.c:1489
+#: expr.c:1494
 msgid "syntax error: invalid arithmetic operator"
-msgstr ""
+msgstr "eroare de sintaxă: operator aritmetic nevalid"
 
-#: expr.c:1513
+#: expr.c:1518
 #, c-format
 msgid "%s%s%s: %s (error token is \"%s\")"
 msgstr "%s%s%s: %s (identificatorul erorii este „%s”)"
 
-#: expr.c:1573
+#: expr.c:1578
 msgid "invalid arithmetic base"
-msgstr ""
-
-#: expr.c:1582
+msgstr "bază aritmetică nevalidă"
+
+# R-GC, scrie:
+# cum „constantă întreagă nevalidă”, nu mă
+# atrăgea prea mult, am adaptat traducerea
+# la ce se vede
+# ***
+# după revizarea fișierului, DȘ, spune:
+# «→ un mic typo la „întreg”»
+# ===
+# Ok, corecție aplicată; graba... e de vină
+#: expr.c:1587
 msgid "invalid integer constant"
-msgstr ""
+msgstr "constantă de număr întreg nevalidă"
 
-#: expr.c:1598
+#: expr.c:1603
 msgid "value too great for base"
 msgstr "valoare prea mare pentru bază"
 
-#: expr.c:1647
+#: expr.c:1652
 #, c-format
 msgid "%s: expression error\n"
 msgstr "%s: eroare în expresie\n"
 
 #: general.c:70
-#, fuzzy
 msgid "getcwd: cannot access parent directories"
-msgstr "getwd: nu s-au putut accesa directoarele părinte"
+msgstr "getcwd: nu s-au putut accesa directoarele părinte"
 
-#: input.c:99 subst.c:6069
+#: input.c:99 subst.c:6208
 #, c-format
 msgid "cannot reset nodelay mode for fd %d"
-msgstr ""
+msgstr "nu se poate redefini modul „nodelay” pentru descriptorul de fișier %d"
 
 #: input.c:266
-#, fuzzy, c-format
+#, c-format
 msgid "cannot allocate new file descriptor for bash input from fd %d"
-msgstr ""
-"nu se poate aloca descriptor de fișier nou pentru inputul bash din fd %d: %s"
+msgstr "nu se poate aloca un nou descriptor de fișier pentru intrarea bash din fd %d"
 
 #: input.c:274
-#, fuzzy, c-format
+#, c-format
 msgid "save_bash_input: buffer already exists for new fd %d"
-msgstr "check_bash_input: buffer deja existent pentru fd nou %d"
+msgstr "save_bash_input: memorie tampon deja existentă pentru noul descriptor de fișier %d"
 
 #: jobs.c:543
 msgid "start_pipeline: pgrp pipe"
-msgstr ""
+msgstr "start_pipeline: linie de conectare pgrp"
 
-#: jobs.c:906
+#: jobs.c:907
 #, c-format
 msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
-msgstr ""
+msgstr "bgp_delete: BUCLĂ: psi (%d) == storage[psi].bucket_next"
 
-#: jobs.c:959
+#: jobs.c:960
 #, c-format
 msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
-msgstr ""
+msgstr "bgp_search: BUCLĂ: psi (%d) == storage[psi].bucket_next"
 
-#: jobs.c:1283
+#: jobs.c:1279
 #, c-format
 msgid "forked pid %d appears in running job %d"
-msgstr ""
+msgstr "pid-ul bifurcat %d apare în lucrarea în execuție %d"
 
-#: jobs.c:1402
+#: jobs.c:1397
 #, c-format
 msgid "deleting stopped job %d with process group %ld"
-msgstr ""
+msgstr "se șterge lucrarea oprită %d cu grupul de procese %ld"
 
-#: jobs.c:1511
+#: jobs.c:1502
 #, c-format
 msgid "add_process: pid %5ld (%s) marked as still alive"
-msgstr ""
+msgstr "add_process: pid %5ld (%s) marcat ca încă în viață"
 
-#: jobs.c:1850
+#: jobs.c:1839
 #, c-format
 msgid "describe_pid: %ld: no such pid"
 msgstr "describe_pid: %ld: nu există un asemenea pid"
 
-#: jobs.c:1865
+#: jobs.c:1854
 #, c-format
 msgid "Signal %d"
 msgstr "Semnal %d"
 
-#: jobs.c:1879 jobs.c:1905
+#: jobs.c:1868 jobs.c:1894
 msgid "Done"
 msgstr "Finalizat"
 
-#: jobs.c:1884 siglist.c:122
+#: jobs.c:1873 siglist.c:123
 msgid "Stopped"
-msgstr "Stopat"
+msgstr "Oprit"
 
-#: jobs.c:1888
+#: jobs.c:1877
 #, c-format
 msgid "Stopped(%s)"
 msgstr "Oprit(%s)"
 
-#: jobs.c:1892
+#: jobs.c:1881
 msgid "Running"
 msgstr "În rulare"
 
-#: jobs.c:1909
+#: jobs.c:1898
 #, c-format
 msgid "Done(%d)"
 msgstr "Finalizat(%d)"
 
-#: jobs.c:1911
+#: jobs.c:1900
 #, c-format
 msgid "Exit %d"
 msgstr "Ieșire %d"
 
-#: jobs.c:1914
+#: jobs.c:1903
 msgid "Unknown status"
 msgstr "Stare necunoscută"
 
-#: jobs.c:2001
+#: jobs.c:1990
 #, c-format
 msgid "(core dumped) "
 msgstr "(core dumped) "
 
-#: jobs.c:2020
+# NOTĂ: de aflat ce înseamnă:
+# wd =
+# =====================================
+# NOTA_BENE:
+# pe viitor „istețule” uită-te în fișierul de traducere,
+# deschis ca text, și vei avea mari șanse să afli
+# răspunsul; fără a «gonglear» ca bezmeticul în Internet
+#: jobs.c:2009
 #, c-format
 msgid "  (wd: %s)"
-msgstr "  (wd: %s)"
+msgstr "  (dir.lucru: %s)"
 
-#: jobs.c:2259
+#: jobs.c:2250
 #, c-format
 msgid "child setpgid (%ld to %ld)"
-msgstr "setpgid copil (de la%ld la %ld)"
+msgstr "setpgid proces-copil (de la %ld la %ld)"
 
-#: jobs.c:2617 nojobs.c:664
-#, fuzzy, c-format
+# NOTĂ:
+# «wait», nu se traduce; aici, și în mesajele următoare,
+# face parte din categoria cuvintelor ce nu se traduc.
+# Datorită contextului în care se află.
+#: jobs.c:2608 nojobs.c:666
+#, c-format
 msgid "wait: pid %ld is not a child of this shell"
-msgstr "așteptați: pid-ul %d nu este rezultat(child) al acestui shell"
+msgstr "wait: pid %ld nu este un proces-copil al acestui shell"
 
-#: jobs.c:2893
+#: jobs.c:2884
 #, c-format
 msgid "wait_for: No record of process %ld"
-msgstr ""
+msgstr "wait_for: Nu există nicio înregistrare a procesului %ld"
 
-#: jobs.c:3236
+#: jobs.c:3223
 #, c-format
 msgid "wait_for_job: job %d is stopped"
-msgstr ""
+msgstr "wait_for_job: lucrarea %d este oprită"
 
-#: jobs.c:3564
-#, fuzzy, c-format
+#: jobs.c:3551
+#, c-format
 msgid "%s: no current jobs"
-msgstr "%s: nu s-a putut crea: %s"
+msgstr "%s: nu există lucrări actuale"
 
-#: jobs.c:3571
+#: jobs.c:3558
 #, c-format
 msgid "%s: job has terminated"
-msgstr "%s: jobul a fost terminat"
+msgstr "%s: lucrarea a fost terminată"
 
-#: jobs.c:3580
+#: jobs.c:3567
 #, c-format
 msgid "%s: job %d already in background"
-msgstr ""
+msgstr "%s: lucrarea %d se află deja în fundal"
 
-#: jobs.c:3806
+#: jobs.c:3793
 msgid "waitchld: turning on WNOHANG to avoid indefinite block"
-msgstr ""
+msgstr "waitchld: se activează WNOHANG pentru a evita blocarea pe termen nedefinit"
 
-#: jobs.c:4320
+#: jobs.c:4307
 #, c-format
 msgid "%s: line %d: "
-msgstr ""
+msgstr "%s: linie %d: "
 
-#: jobs.c:4334 nojobs.c:919
+#: jobs.c:4321 nojobs.c:921
 #, c-format
 msgid " (core dumped)"
 msgstr " (core dumped)"
 
-#: jobs.c:4346 jobs.c:4359
+#: jobs.c:4333 jobs.c:4346
 #, c-format
 msgid "(wd now: %s)\n"
-msgstr "(wd actual: %s)\n"
+msgstr "(dir.lucru actual: %s)\n"
 
-#: jobs.c:4391
-#, fuzzy
+#: jobs.c:4378
 msgid "initialize_job_control: getpgrp failed"
-msgstr "initialize_jobs: getpgrp eșuat: %s"
+msgstr "initialize_job_control: getpgrp a eșuat"
 
-#: jobs.c:4447
+#: jobs.c:4434
 msgid "initialize_job_control: no job control in background"
-msgstr ""
+msgstr "initialize_job_control: nu există control de lucrări în fundal"
 
-#: jobs.c:4463
-#, fuzzy
+#: jobs.c:4450
 msgid "initialize_job_control: line discipline"
-msgstr "initialize_jobs: disciplină linie: %s"
+msgstr "initialize_job_control: disciplină linie"
 
-#: jobs.c:4473
-#, fuzzy
+#: jobs.c:4460
 msgid "initialize_job_control: setpgid"
-msgstr "initialize_jobs: getpgrp eșuat: %s"
+msgstr "initialize_job_control: setpgid"
 
-#: jobs.c:4494 jobs.c:4503
+#: jobs.c:4481 jobs.c:4490
 #, c-format
 msgid "cannot set terminal process group (%d)"
-msgstr ""
+msgstr "nu se poate configura grupul de procese din terminal (%d)"
 
-#: jobs.c:4508
+#: jobs.c:4495
 msgid "no job control in this shell"
-msgstr "nici un control de job în acest shell"
+msgstr "nu există niciun control de lucrări în acest shell"
 
-#: lib/malloc/malloc.c:353
+#: lib/malloc/malloc.c:367
 #, c-format
 msgid "malloc: failed assertion: %s\n"
-msgstr ""
+msgstr "malloc: a eșuat aserțiunea: %s\n"
 
-#: lib/malloc/malloc.c:369
+#: lib/malloc/malloc.c:383
 #, c-format
 msgid ""
 "\r\n"
 "malloc: %s:%d: assertion botched\r\n"
 msgstr ""
+"\r\n"
+"malloc: %s:%d: aserțiune greșită\r\n"
 
-#: lib/malloc/malloc.c:370 lib/malloc/malloc.c:933
+#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941
 msgid "unknown"
 msgstr "necunoscut"
 
-#: lib/malloc/malloc.c:882
+# Altă formulă de traducere al mesajului, este:
+# „malloc: bloc șters din lista disponibilă ”
+# Notă, pentru a decide care dintre aceste traduceri,
+# rămîne, e nevoie de colaborarea(opinii, sugestii,
+# comentarii, etc) ale utilizatorilor de «bash»...
+#: lib/malloc/malloc.c:892
 msgid "malloc: block on free list clobbered"
-msgstr ""
+msgstr "malloc: bloc suprascris pe lista liberă"
 
-#: lib/malloc/malloc.c:972
+#: lib/malloc/malloc.c:980
 msgid "free: called with already freed block argument"
-msgstr ""
+msgstr "free: apelat cu un argument bloc deja eliberat"
 
-#: lib/malloc/malloc.c:975
+#: lib/malloc/malloc.c:983
 msgid "free: called with unallocated block argument"
-msgstr ""
+msgstr "free: apelat cu un argument de bloc nealocat"
 
-#: lib/malloc/malloc.c:994
+# Am tradus inițial mesajul, ca:
+# „free: depășire insuficientă detectată; mh_nbytes în afara intervalului”
+# formulă actuală mi se pare mai adecvată. contextului, precum și a mesajului din engleză
+#: lib/malloc/malloc.c:1001
 msgid "free: underflow detected; mh_nbytes out of range"
-msgstr ""
+msgstr "free: s-a detectat o depășire insuficientă; mh_nbytes în afara intervalului"
 
-#: lib/malloc/malloc.c:1001
+#: lib/malloc/malloc.c:1007
 msgid "free: underflow detected; magic8 corrupted"
-msgstr ""
+msgstr "free: s-a detectat o depășire insuficientă; magic8 corupt"
 
-#: lib/malloc/malloc.c:1009
+#: lib/malloc/malloc.c:1014
 msgid "free: start and end chunk sizes differ"
-msgstr ""
+msgstr "free: dimensiunile bucăților de început și de sfârșit sunt diferite"
 
-#: lib/malloc/malloc.c:1119
+#: lib/malloc/malloc.c:1176
 msgid "realloc: called with unallocated block argument"
-msgstr ""
+msgstr "realloc: apelat cu un argument de bloc nealocat"
 
-#: lib/malloc/malloc.c:1134
+#: lib/malloc/malloc.c:1191
 msgid "realloc: underflow detected; mh_nbytes out of range"
-msgstr ""
+msgstr "realloc: s-a detectat o depășire insuficientă; mh_nbytes țn afara intervalului"
 
-#: lib/malloc/malloc.c:1141
+#: lib/malloc/malloc.c:1197
 msgid "realloc: underflow detected; magic8 corrupted"
-msgstr ""
+msgstr "realloc: s-a detectat o depășire insuficientă; magic8 corupt"
 
-#: lib/malloc/malloc.c:1150
+#: lib/malloc/malloc.c:1205
 msgid "realloc: start and end chunk sizes differ"
-msgstr ""
+msgstr "realloc: dimensiunile bucăților de început și de sfârșit, diferă"
 
 #: lib/malloc/table.c:191
 #, c-format
 msgid "register_alloc: alloc table is full with FIND_ALLOC?\n"
-msgstr ""
+msgstr "register_alloc: tabelul de alocare este plin cu FIND_ALLOC?\n"
 
 #: lib/malloc/table.c:200
 #, c-format
 msgid "register_alloc: %p already in table as allocated?\n"
-msgstr ""
+msgstr "register_alloc: %p deja în tabel ca fiind alocat?\n"
 
 #: lib/malloc/table.c:253
 #, c-format
 msgid "register_free: %p already in table as free?\n"
-msgstr ""
+msgstr "register_alloc: %p deja în tabel ca liber?\n"
 
 #: lib/sh/fmtulong.c:102
 msgid "invalid base"
-msgstr ""
+msgstr "bază nevalidă"
 
 #: lib/sh/netopen.c:168
-#, fuzzy, c-format
+#, c-format
 msgid "%s: host unknown"
-msgstr "necunoscut"
+msgstr "%s: gazdă necunoscută"
 
 #: lib/sh/netopen.c:175
 #, c-format
 msgid "%s: invalid service"
-msgstr ""
+msgstr "%s: serviciu nevalid"
 
 #: lib/sh/netopen.c:306
 #, c-format
 msgid "%s: bad network path specification"
-msgstr ""
+msgstr "%s: specificație incorectă pentru ruta rețelei"
 
 #: lib/sh/netopen.c:347
 msgid "network operations not supported"
-msgstr ""
+msgstr "operațiunile de rețea nu sunt acceptate"
 
-#: locale.c:217
+#: locale.c:219
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s)"
-msgstr ""
+msgstr "setlocale: LC_ALL: nu se poate schimba parametrul de limbă (%s)"
 
-#: locale.c:219
+#: locale.c:221
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s): %s"
-msgstr ""
+msgstr "setlocale: LC_ALL: nu se poate schimba parametrul de limbă (%s): %s"
 
-#: locale.c:292
+#: locale.c:294
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s)"
-msgstr ""
+msgstr "setlocale: %s: nu se poate schimba parametrul de limbă (%s)"
 
-#: locale.c:294
+#: locale.c:296
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s): %s"
-msgstr ""
+msgstr "setlocale: %s: nu se poate schimba parametrul de limbă (%s): %s"
 
 #: mailcheck.c:439
 msgid "You have mail in $_"
@@ -1411,795 +1651,797 @@ msgstr "Aveți mail nou în $_"
 msgid "The mail in %s has been read\n"
 msgstr "Mailul din %s a fost citit\n"
 
-#: make_cmd.c:317
+#: make_cmd.c:314
 msgid "syntax error: arithmetic expression required"
 msgstr "eroare de sintaxă: expresie aritmetică necesară"
 
-#: make_cmd.c:319
-#, fuzzy
+#: make_cmd.c:316
 msgid "syntax error: `;' unexpected"
-msgstr "eroare de sintaxă: sfârșit de fișier neașteptat"
+msgstr "eroare de sintaxă: „;” neașteptat"
 
-#: make_cmd.c:320
-#, fuzzy, c-format
+#: make_cmd.c:317
+#, c-format
 msgid "syntax error: `((%s))'"
-msgstr "eroare de sintaxă"
+msgstr "eroare de sintaxă: „((%s))”"
 
-#: make_cmd.c:572
+#: make_cmd.c:569
 #, c-format
 msgid "make_here_document: bad instruction type %d"
 msgstr "make_here_document: tip de instrucțiune greșit %d"
 
-#: make_cmd.c:657
+#: make_cmd.c:668
 #, c-format
 msgid "here-document at line %d delimited by end-of-file (wanted `%s')"
-msgstr ""
+msgstr "«here-document» la linia %d delimitat de sfârșitul fișierului (se aștepta „%s”)"
 
-#: make_cmd.c:756
+#: make_cmd.c:769
 #, c-format
 msgid "make_redirection: redirection instruction `%d' out of range"
-msgstr ""
+msgstr "make_redirection: instrucțiunea de redirecționare „%d” este în afara intervalului"
 
-#: parse.y:2393
+#: parse.y:2428
 #, c-format
-msgid ""
-"shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line "
-"truncated"
-msgstr ""
+msgid "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line truncated"
+msgstr "shell_getc: shell_input_line_size (%zu) depășește SIZE_MAX (%lu): linie trunchiată"
 
-#: parse.y:2826
+#: parse.y:2921
 msgid "maximum here-document count exceeded"
-msgstr ""
+msgstr "numărul maxim de «here-document» a fost depășit"
 
-#: parse.y:3581 parse.y:3957 parse.y:4556
+#: parse.y:3684 parse.y:4244 parse.y:6148
 #, c-format
 msgid "unexpected EOF while looking for matching `%c'"
-msgstr "EOF neașteptat în căutare după potrivirea „%c”"
+msgstr "sfârșit neașteptat al fișierului(EOF) în timp ce se căuta coincidența pentru „%c”"
 
-#: parse.y:4696
+#: parse.y:4452
 msgid "unexpected EOF while looking for `]]'"
-msgstr "EOF neașteptat în căutare după „]]”"
+msgstr "sfârșit neașteptat al fișierului(EOF) în timp ce se căuta „]]”"
 
-#: parse.y:4701
-#, fuzzy, c-format
+#: parse.y:4457
+#, c-format
 msgid "syntax error in conditional expression: unexpected token `%s'"
-msgstr "eroare de sintaxă neașteptată lângă `%s'"
+msgstr "eroare de sintaxă în expresia condițională: simbol neașteptat „%s”"
 
-#: parse.y:4705
+#: parse.y:4461
 msgid "syntax error in conditional expression"
 msgstr "eroare de sintaxă în expresia condițională"
 
-#: parse.y:4783
+#: parse.y:4539
 #, c-format
 msgid "unexpected token `%s', expected `)'"
-msgstr ""
+msgstr "simbol neașteptat „%s”, așteptat „)”"
 
-#: parse.y:4787
+#: parse.y:4543
 msgid "expected `)'"
 msgstr "se aștepta „)”"
 
-#: parse.y:4815
+#: parse.y:4571
 #, c-format
 msgid "unexpected argument `%s' to conditional unary operator"
-msgstr ""
+msgstr "argument neașteptat „%s” pentru operatorul unar condițional"
 
-#: parse.y:4819
+#: parse.y:4575
 msgid "unexpected argument to conditional unary operator"
-msgstr ""
+msgstr "argument neașteptat pentru operatorul unar condițional"
 
-#: parse.y:4865
-#, fuzzy, c-format
+#: parse.y:4621
+#, c-format
 msgid "unexpected token `%s', conditional binary operator expected"
-msgstr "%s: se așteaptă operator binar"
+msgstr "identificator neașteptat „%s”, se aștepta operator binar condițional"
 
-#: parse.y:4869
-#, fuzzy
+#: parse.y:4625
 msgid "conditional binary operator expected"
-msgstr "%s: se așteaptă operator binar"
+msgstr "se aștepta operator binar condițional"
 
-#: parse.y:4891
+#: parse.y:4647
 #, c-format
 msgid "unexpected argument `%s' to conditional binary operator"
-msgstr ""
+msgstr "argument neașteptat „%s” pentru operatorul binar condițional"
 
-#: parse.y:4895
+#: parse.y:4651
 msgid "unexpected argument to conditional binary operator"
-msgstr ""
+msgstr "argument neașteptat pentru operatorul binar condițional"
 
-#: parse.y:4906
-#, fuzzy, c-format
+#: parse.y:4662
+#, c-format
 msgid "unexpected token `%c' in conditional command"
-msgstr "`:' așteptat după expresie condițională"
+msgstr "identificator neașteptat „%c” în comanda condițională"
 
-#: parse.y:4909
-#, fuzzy, c-format
+#: parse.y:4665
+#, c-format
 msgid "unexpected token `%s' in conditional command"
-msgstr "`:' așteptat după expresie condițională"
+msgstr "identificator neașteptat „%s” în comanda condițională"
 
-#: parse.y:4913
-#, fuzzy, c-format
+#: parse.y:4669
+#, c-format
 msgid "unexpected token %d in conditional command"
-msgstr "`:' așteptat după expresie condițională"
+msgstr "identificator neașteptat %d în comanda condițională"
 
-#: parse.y:6336
+#: parse.y:6118
 #, c-format
 msgid "syntax error near unexpected token `%s'"
-msgstr "eroare de sintaxă neașteptată lângă `%s'"
+msgstr "eroare de sintaxă neașteptată lângă „%s”"
 
-#: parse.y:6355
-#, fuzzy, c-format
+#: parse.y:6137
+#, c-format
 msgid "syntax error near `%s'"
-msgstr "eroare de sintaxă neașteptată lângă `%s'"
+msgstr "eroare de sintaxă neașteptată lângă „%s”"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error: unexpected end of file"
 msgstr "eroare de sintaxă: sfârșit de fișier neașteptat"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error"
 msgstr "eroare de sintaxă"
 
-#: parse.y:6428
+#: parse.y:6216
 #, c-format
 msgid "Use \"%s\" to leave the shell.\n"
-msgstr "Folosiți \"%s\" pentru a părăsi shellul.\n"
+msgstr "Utilizați „%s” pentru a părăsi shell-ul.\n"
 
-#: parse.y:6602
+#: parse.y:6394
 msgid "unexpected EOF while looking for matching `)'"
-msgstr "EOF neașteptat în căutare după perechea lui „)”"
+msgstr "sfârșit neașteptat al fișierului în timp ce se căuta după perechea lui „)”"
 
 #: pcomplete.c:1132
 #, c-format
 msgid "completion: function `%s' not found"
-msgstr ""
+msgstr "completare: funcția „%s” nu a fost găsită"
 
 #: pcomplete.c:1722
 #, c-format
 msgid "programmable_completion: %s: possible retry loop"
-msgstr ""
+msgstr "programable_completion: %s: posibilă buclă de reîncercare"
 
 #: pcomplib.c:182
 #, c-format
 msgid "progcomp_insert: %s: NULL COMPSPEC"
-msgstr ""
+msgstr "progcomp_insert: %s: COMPSPEC null"
 
 #: print_cmd.c:302
 #, c-format
 msgid "print_command: bad connector `%d'"
-msgstr "print_command: conector greșitr `%d'"
+msgstr "print_command: conector greșit „%d”"
 
 #: print_cmd.c:375
 #, c-format
 msgid "xtrace_set: %d: invalid file descriptor"
-msgstr ""
+msgstr "xtrace_set: %d: descriptor de fișier nevalid"
 
 #: print_cmd.c:380
 msgid "xtrace_set: NULL file pointer"
-msgstr ""
+msgstr "xtrace_set: indicatorul pentru fișier este NULL"
 
 #: print_cmd.c:384
 #, c-format
 msgid "xtrace fd (%d) != fileno xtrace fp (%d)"
-msgstr ""
+msgstr "xtrace fd (%d) != nrfișier xtrace fp (%d)"
 
-#: print_cmd.c:1540
+#: print_cmd.c:1545
 #, c-format
 msgid "cprintf: `%c': invalid format character"
-msgstr ""
+msgstr "cprintf: „%c”: caracter de format nevalid"
 
-#: redir.c:149 redir.c:197
+#: redir.c:150 redir.c:198
 msgid "file descriptor out of range"
-msgstr ""
+msgstr "descriptor de fișier în afara intervalului"
 
-#: redir.c:204
-#, fuzzy, c-format
+#: redir.c:205
+#, c-format
 msgid "%s: ambiguous redirect"
-msgstr "%s: Redirectare ambiguă"
+msgstr "%s: redirectare ambiguă"
 
-#: redir.c:208
-#, fuzzy, c-format
+#: redir.c:209
+#, c-format
 msgid "%s: cannot overwrite existing file"
-msgstr "%s: nu se poate accesa(clobber) fișierul existent"
+msgstr "%s: nu se poate suprascrie fișierul existent"
 
-#: redir.c:213
-#, fuzzy, c-format
+#: redir.c:214
+#, c-format
 msgid "%s: restricted: cannot redirect output"
-msgstr "%s: limitat: nu se poate specifica `/' în numele comenzilor"
+msgstr "%s: restricționat: nu se poate redirecționa ieșirea"
 
-#: redir.c:218
-#, fuzzy, c-format
+#: redir.c:219
+#, c-format
 msgid "cannot create temp file for here-document: %s"
-msgstr "nu pot face legătură (pipe) pentru substituția procesului: %s"
+msgstr "nu se poate crea un fișier temporar pentru «here-document»: %s"
 
-#: redir.c:222
-#, fuzzy, c-format
+#: redir.c:223
+#, c-format
 msgid "%s: cannot assign fd to variable"
-msgstr "%s: nu pot asigna listă membrului intervalului"
-
-#: redir.c:649
+msgstr "%s: nu se poate atribui descriptorul de fișier variabilei"
+
+# Întrebare: este mai bine/corect
+# „..... fără o conexiune de rețea”
+# sau,
+# ”fără a avea o conexiune la rețea”?
+# ***
+# după revizarea fișierului, DȘ, spune:
+# «→conexiunea trebuie să fie LA rețea în ambele cazuri, „conexiune de rețea” este doar un tip de conexiune (fizică sau virtuală), iar „conexiunea la rețea” reprezintă accesul calculatorului la o rețea anume. (aici se subînțelege o rețea de alte calulatoare fie ea LAN sau WAN)»
+# ===
+# Ok, corecție aplicată
+#: redir.c:650
 msgid "/dev/(tcp|udp)/host/port not supported without networking"
-msgstr ""
+msgstr "nu se admite «/dev/(tcp|udp)/host/port» fără a avea o conexiune la rețea"
 
-#: redir.c:938 redir.c:1053 redir.c:1114 redir.c:1284
-#, fuzzy
+#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303
 msgid "redirection error: cannot duplicate fd"
-msgstr "eroare de redirectare"
+msgstr "eroare de redirectare: nu se poate duplica descriptorul de fișier"
 
-#: shell.c:347
+#: shell.c:353
 msgid "could not find /tmp, please create!"
-msgstr ""
+msgstr "nu s-a putut găsi «/tmp», vă rugăm să-l creați!"
 
-#: shell.c:351
+#: shell.c:357
 msgid "/tmp must be a valid directory name"
-msgstr ""
+msgstr "«/tmp» trebuie să fie un nume de director valid"
 
-#: shell.c:804
+#: shell.c:826
 msgid "pretty-printing mode ignored in interactive shells"
-msgstr ""
+msgstr "modul de imprimare „drăguț” este ignorat în shell-urile interactive"
 
-#: shell.c:948
-#, fuzzy, c-format
+#: shell.c:972
+#, c-format
 msgid "%c%c: invalid option"
-msgstr "%c%c: opțiune invalidă"
+msgstr "%c%c: opțiune nevalidă"
 
-#: shell.c:1319
+#: shell.c:1343
 #, c-format
 msgid "cannot set uid to %d: effective uid %d"
-msgstr ""
+msgstr "nu se poate stabili uid la %d: uid efectiv %d"
 
-#: shell.c:1330
+#: shell.c:1354
 #, c-format
 msgid "cannot set gid to %d: effective gid %d"
-msgstr ""
+msgstr "nu se poate stabili gid la %d: gid efectiv %d"
 
-#: shell.c:1518
+#: shell.c:1544
 msgid "cannot start debugger; debugging mode disabled"
-msgstr ""
+msgstr "nu se poate porni depanatorul; modul de depanare a fost dezactivat"
 
-#: shell.c:1632
-#, fuzzy, c-format
+#: shell.c:1658
+#, c-format
 msgid "%s: Is a directory"
-msgstr "%s: este director"
+msgstr "%s: Este un director"
 
-#: shell.c:1881
+#: shell.c:1907
 msgid "I have no name!"
 msgstr "Nu am nici un nume!"
 
-#: shell.c:2035
-#, fuzzy, c-format
+#: shell.c:2061
+#, c-format
 msgid "GNU bash, version %s-(%s)\n"
-msgstr "GNU %s, versiunea %s\n"
+msgstr "GNU bash, versiunea %s-(%s)\n"
 
-#: shell.c:2036
+# R-GC, scrie:
+# acest mesaj, și următoarele, pot să fie
+# vizualizate, rulînd comanda:
+# «bash --help».
+#: shell.c:2062
 #, c-format
 msgid ""
 "Usage:\t%s [GNU long option] [option] ...\n"
 "\t%s [GNU long option] [option] script-file ...\n"
 msgstr ""
-"Folosire:\t%s [GNU opțiune lungă] [opțiune] ...\n"
-"\t%s [GNU opțiune lungă] [opțiune] fișier script ...\n"
+"Utilizare:\t%s [GNU opțiune lungă] [opțiune] ...\n"
+"\t%s [GNU opțiune lungă] [opțiune] fișier-script ...\n"
 
-#: shell.c:2038
+#: shell.c:2064
 msgid "GNU long options:\n"
 msgstr "Opțiuni lungi GNU:\n"
 
-#: shell.c:2042
+#: shell.c:2068
 msgid "Shell options:\n"
 msgstr "Opțiuni ale shell-ului:\n"
 
-#: shell.c:2043
-#, fuzzy
+#: shell.c:2069
 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n"
-msgstr "\t-irsD sau -c comandă\t\t(doar invocație)\n"
+msgstr "\t-ilrsD sau -c comandă sau -O shopt_option\t\t(doar invocare)\n"
 
-#: shell.c:2062
+#: shell.c:2088
 #, c-format
 msgid "\t-%s or -o option\n"
 msgstr "\t-%s sau -o opțiune\n"
 
-#: shell.c:2068
+#: shell.c:2094
 #, c-format
 msgid "Type `%s -c \"help set\"' for more information about shell options.\n"
-msgstr ""
-"Apăsați `%s -c \"set-ajutor\"' pentru mai multe informații despre opțiunile "
-"shell-ului.\n"
+msgstr "Tastați «%s -c \"help set\"» pentru mai multe informații despre opțiunile shell-ului.\n"
 
-#: shell.c:2069
+#: shell.c:2095
 #, c-format
 msgid "Type `%s -c help' for more information about shell builtin commands.\n"
-msgstr ""
-"Apăsați `%s -c ajutor' pentru mai multe informații despre comenzile interne "
-"ale shell-ului.\n"
+msgstr "Tastați «%s -c help» pentru mai multe informații despre comenzile interne ale shell-ului.\n"
 
-#: shell.c:2070
+#: shell.c:2096
 #, c-format
 msgid "Use the `bashbug' command to report bugs.\n"
-msgstr ""
+msgstr "Utilizați comanda «bashbug» pentru a raporta erori.\n"
 
-#: shell.c:2072
+#: shell.c:2098
 #, c-format
 msgid "bash home page: <http://www.gnu.org/software/bash>\n"
-msgstr ""
+msgstr "Pagina principală a lui „bash”: <http://www.gnu.org/software/bash>\n"
 
-#: shell.c:2073
+#: shell.c:2099
 #, c-format
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
-msgstr ""
+msgstr "Ajutor general pentru utilizarea software-ului GNU: <http://www.gnu.org/gethelp/>\n"
 
-#: sig.c:757
+#: sig.c:765
 #, c-format
 msgid "sigprocmask: %d: invalid operation"
-msgstr ""
+msgstr "sigprocmask: %d: operație nevalidă"
 
-#: siglist.c:47
+#: siglist.c:48
 msgid "Bogus signal"
 msgstr "Semnal fals"
 
-#: siglist.c:50
+#: siglist.c:51
 msgid "Hangup"
-msgstr "Deconectare"
+msgstr "Deconectare/Terminare anormală(Hangup)"
 
-#: siglist.c:54
+#: siglist.c:55
 msgid "Interrupt"
 msgstr "Întrerupere"
 
-#: siglist.c:58
+#: siglist.c:59
 msgid "Quit"
 msgstr "Părăsire"
 
-#: siglist.c:62
+#: siglist.c:63
 msgid "Illegal instruction"
 msgstr "Instrucțiune ilegală"
 
-#: siglist.c:66
+#: siglist.c:67
 msgid "BPT trace/trap"
-msgstr "BPT trace/trap"
+msgstr "Punct de întrerupere de urmărire/capturare"
 
-#: siglist.c:74
+#: siglist.c:75
 msgid "ABORT instruction"
 msgstr "Instrucțiune ABORT"
 
-#: siglist.c:78
+#: siglist.c:79
 msgid "EMT instruction"
 msgstr "Instrucțiune EMT"
 
-#: siglist.c:82
+#: siglist.c:83
 msgid "Floating point exception"
-msgstr "Excepție virgulă mobilă"
+msgstr "Excepție de virgulă mobilă"
 
-#: siglist.c:86
+#: siglist.c:87
 msgid "Killed"
-msgstr "Terminat(killed)"
+msgstr "Omorât"
 
-#: siglist.c:90
+#: siglist.c:91
 msgid "Bus error"
-msgstr "Eroare de bus"
+msgstr "Eroare de magistrală de date(bus)"
 
-#: siglist.c:94
+#: siglist.c:95
 msgid "Segmentation fault"
-msgstr "Eroare de segmentare (Segmentation fault)"
+msgstr "Eroare de segmentare"
 
-#: siglist.c:98
+#: siglist.c:99
 msgid "Bad system call"
-msgstr "Apelare sistem invalidă"
+msgstr "Apel de sistem incorect"
 
-#: siglist.c:102
+#: siglist.c:103
 msgid "Broken pipe"
-msgstr "Legătură(pipe) întreruptă"
+msgstr "Linie de conectare întreruptă"
 
-#: siglist.c:106
+#: siglist.c:107
 msgid "Alarm clock"
-msgstr "Ceas alarmă"
+msgstr "Ceas cu alarmă"
 
-#: siglist.c:110
+#: siglist.c:111
 msgid "Terminated"
 msgstr "Terminat"
 
-#: siglist.c:114
+#: siglist.c:115
 msgid "Urgent IO condition"
-msgstr "Condiție IO urgentă"
+msgstr "Condiție In/Ieș urgentă"
 
-#: siglist.c:118
+#: siglist.c:119
 msgid "Stopped (signal)"
 msgstr "Oprit (semnal)"
 
-#: siglist.c:126
+#: siglist.c:127
 msgid "Continue"
 msgstr "Continuare"
 
-#: siglist.c:134
+#: siglist.c:135
 msgid "Child death or stop"
-msgstr "Succesor mort sau oprit"
+msgstr "Proces-copil mort sau oprit"
 
-#: siglist.c:138
+#: siglist.c:139
 msgid "Stopped (tty input)"
 msgstr "Oprit (tty input)"
 
-#: siglist.c:142
+#: siglist.c:143
 msgid "Stopped (tty output)"
 msgstr "Oprit (tty output)"
 
-#: siglist.c:146
+# Se referă la: dispozitiv(de intrare/de ieșire)
+#: siglist.c:147
 msgid "I/O ready"
-msgstr "I/O pregătit"
+msgstr "In/Ieș pregătită"
 
-#: siglist.c:150
+#: siglist.c:151
 msgid "CPU limit"
 msgstr "Limită CPU"
 
-#: siglist.c:154
+#: siglist.c:155
 msgid "File limit"
 msgstr "Limită fișier"
 
-#: siglist.c:158
+#: siglist.c:159
 msgid "Alarm (virtual)"
 msgstr "Alarmă (virtual)"
 
-#: siglist.c:162
+#: siglist.c:163
 msgid "Alarm (profile)"
 msgstr "Alarmă (profil)"
 
-#: siglist.c:166
+#: siglist.c:167
 msgid "Window changed"
 msgstr "Fereastră schimbată"
 
-#: siglist.c:170
+# De moment rămîne traducerea veche:
+# „Reținere (lock) înregistrare”
+# Dar, cred că:
+# Blocare înregistrare, este formula corectă...
+# ***
+# l-am modificat la revizare
+#: siglist.c:171
 msgid "Record lock"
-msgstr "Reținere (lock) înregistrare"
+msgstr "Blocare înregistrare"
 
-#: siglist.c:174
+#: siglist.c:175
 msgid "User signal 1"
 msgstr "Semnal utilizator 1"
 
-#: siglist.c:178
+#: siglist.c:179
 msgid "User signal 2"
 msgstr "Semnal utilizator 2"
 
-#: siglist.c:182
+#: siglist.c:183
 msgid "HFT input data pending"
-msgstr "Date de intrare HFT în curs de rezolvare(pending)"
+msgstr "Date de intrare HFT în curs de rezolvare"
 
-#: siglist.c:186
+#: siglist.c:187
 msgid "power failure imminent"
 msgstr "probleme electrice iminente"
 
-#: siglist.c:190
+#: siglist.c:191
 msgid "system crash imminent"
-msgstr "crash de sistem iminent"
+msgstr "cădere iminentă a sistemului"
 
-#: siglist.c:194
+#: siglist.c:195
 msgid "migrate process to another CPU"
 msgstr "migrare proces spre alt CPU"
 
-#: siglist.c:198
+#: siglist.c:199
 msgid "programming error"
 msgstr "eroare de programare"
 
-#: siglist.c:202
+#: siglist.c:203
 msgid "HFT monitor mode granted"
-msgstr "Mod monitor HFT acordat"
+msgstr "Modul de monitor HFT a fost acordat"
 
-#: siglist.c:206
+#: siglist.c:207
 msgid "HFT monitor mode retracted"
-msgstr "Mod monitor HFT retras"
+msgstr "Modul de monitor HFT a fost retras"
 
-#: siglist.c:210
+#: siglist.c:211
 msgid "HFT sound sequence has completed"
-msgstr "Secvență de sunet HFT completată"
+msgstr "Secvența de sunet HFT a fost completată"
 
-#: siglist.c:214
+#: siglist.c:215
 msgid "Information request"
-msgstr ""
+msgstr "Solicitare de informație"
 
-#: siglist.c:222 siglist.c:224
+#: siglist.c:223 siglist.c:225
 #, c-format
 msgid "Unknown Signal #%d"
-msgstr "Semnal Necunoscut #%d"
+msgstr "Semnal necunoscut #%d"
 
-#: subst.c:1476 subst.c:1666
-#, fuzzy, c-format
+#: subst.c:1480 subst.c:1670
+#, c-format
 msgid "bad substitution: no closing `%s' in %s"
-msgstr "substituție invalidă: nu există '%s' în %s"
+msgstr "înlocuire greșită: nu se închide „%s” în %s"
 
-#: subst.c:3281
+#: subst.c:3307
 #, c-format
 msgid "%s: cannot assign list to array member"
-msgstr "%s: nu pot asigna listă membrului intervalului"
+msgstr "%s: nu se poate atribui o listă unui membru al matricei"
 
-#: subst.c:5910 subst.c:5926
-#, fuzzy
+#: subst.c:6048 subst.c:6064
 msgid "cannot make pipe for process substitution"
-msgstr "nu pot face legătură (pipe) pentru substituția procesului: %s"
+msgstr "nu se poate crea linia de conectare pentru substituția procesului"
 
-#: subst.c:5985
-#, fuzzy
+#: subst.c:6124
 msgid "cannot make child for process substitution"
-msgstr "nu pot crea un proces copil pentru substituirea procesului: %s"
+msgstr "nu se poate crea un proces-copil pentru substituirea procesului: %s"
 
-#: subst.c:6059
-#, fuzzy, c-format
+#: subst.c:6198
+#, c-format
 msgid "cannot open named pipe %s for reading"
-msgstr "nu pot deschide legătura numită %s pentru %s: %s"
+msgstr "nu se poate deschide linia de conectare numită %s pentru citire"
 
-#: subst.c:6061
-#, fuzzy, c-format
+#: subst.c:6200
+#, c-format
 msgid "cannot open named pipe %s for writing"
-msgstr "nu pot deschide legătura numită %s pentru %s: %s"
+msgstr "nu se poate deschide linia de conectare numită %s pentru scriere"
 
-#: subst.c:6084
+#: subst.c:6223
 #, c-format
 msgid "cannot duplicate named pipe %s as fd %d"
-msgstr "nu se poate duplica țeava numită %s ca fd %d"
+msgstr "nu se poate duplica linia de conectare numită %s ca fd %d"
 
-#: subst.c:6213
-#, fuzzy
+#: subst.c:6370
 msgid "command substitution: ignored null byte in input"
-msgstr "substituție invalidă: nu există ')' de final în %s"
+msgstr "substituție de comandă: octetul null din intrare este ignorat"
 
-#: subst.c:6353
-#, fuzzy
+#: subst.c:6533
 msgid "cannot make pipe for command substitution"
-msgstr "nu pot face legături(pipes) pentru substituția de comenzi: %s"
+msgstr "nu se poate crea linia de conectare pentru substituția de comandă"
 
-#: subst.c:6397
-#, fuzzy
+#: subst.c:6580
 msgid "cannot make child for command substitution"
-msgstr "nu pot crea un copil pentru substituția de comenzi: %s"
+msgstr "nu se poate crea un proces-copil pentru substituția de comandă"
 
-#: subst.c:6423
-#, fuzzy
+#: subst.c:6613
 msgid "command_substitute: cannot duplicate pipe as fd 1"
-msgstr "command_substitute: nu se poate duplica legătura (pipe) ca fd 1: %s"
+msgstr "command_substitute: nu se poate duplica linia de conectare ca descriptor de fișier 1(fd 1)"
 
-#: subst.c:6883 subst.c:9952
+#: subst.c:7082 subst.c:10252
 #, c-format
 msgid "%s: invalid variable name for name reference"
-msgstr ""
+msgstr "%s: nume de variabilă nevalid pentru referința numelui"
 
-#: subst.c:6979 subst.c:6997 subst.c:7169
+#: subst.c:7178 subst.c:7196 subst.c:7369
 #, c-format
 msgid "%s: invalid indirect expansion"
-msgstr ""
+msgstr "%s: extindere indirectă nevalidă"
 
-#: subst.c:7013 subst.c:7177
-#, fuzzy, c-format
+#: subst.c:7212 subst.c:7377
+#, c-format
 msgid "%s: invalid variable name"
-msgstr "%s: variabilă fără limită"
+msgstr "%s: nume de variabilă nevalid"
 
-#: subst.c:7256
-#, fuzzy, c-format
+#: subst.c:7478
+#, c-format
 msgid "%s: parameter not set"
-msgstr "%s: parametru null sau nesetat"
+msgstr "%s: parametru nedefinit"
 
-#: subst.c:7258
+#: subst.c:7480
 #, c-format
 msgid "%s: parameter null or not set"
-msgstr "%s: parametru null sau nesetat"
+msgstr "%s: parametru nul sau nedefinit"
 
-#: subst.c:7503 subst.c:7518
+#: subst.c:7727 subst.c:7742
 #, c-format
 msgid "%s: substring expression < 0"
 msgstr "%s: expresie subșir < 0"
 
-#: subst.c:9281 subst.c:9302
+#: subst.c:9560 subst.c:9587
 #, c-format
 msgid "%s: bad substitution"
-msgstr "%s: substituție invalidă"
+msgstr "%s: substituție nevalidă"
 
-#: subst.c:9390
+#: subst.c:9678
 #, c-format
 msgid "$%s: cannot assign in this way"
 msgstr "$%s: nu se poate asigna în acest mod"
 
-#: subst.c:9814
-msgid ""
-"future versions of the shell will force evaluation as an arithmetic "
-"substitution"
-msgstr ""
+#: subst.c:10111
+msgid "future versions of the shell will force evaluation as an arithmetic substitution"
+msgstr "versiunile viitoare ale shell-ului vor forța evaluarea ca o substituție aritmetică"
 
-#: subst.c:10367
-#, fuzzy, c-format
+#: subst.c:10795
+#, c-format
 msgid "bad substitution: no closing \"`\" in %s"
-msgstr "substituție invalidă: nu există ')' de final în %s"
+msgstr "înlocuire greșită: fără „`” de închidere în %s"
 
-#: subst.c:11434
+#: subst.c:11874
 #, c-format
 msgid "no match: %s"
-msgstr ""
+msgstr "nicio potrivire: %s"
 
 #: test.c:147
 msgid "argument expected"
-msgstr "se așteaptă parametru"
+msgstr "se aștepta un parametru"
 
 #: test.c:156
 #, c-format
 msgid "%s: integer expression expected"
-msgstr "%s: se așteaptă expresie întreagă (integer)"
+msgstr "%s: se aștepta o expresie întreagă (integer)"
 
 #: test.c:265
 msgid "`)' expected"
-msgstr "se așteaptă `)'"
+msgstr "se aștepta „)'”"
 
 #: test.c:267
 #, c-format
 msgid "`)' expected, found %s"
-msgstr "se așteaptă `)', s-a primit %s"
+msgstr "se aștepta „)”, s-a găsit %s"
 
-#: test.c:466 test.c:799
+#: test.c:469 test.c:814
 #, c-format
 msgid "%s: binary operator expected"
 msgstr "%s: se așteaptă operator binar"
 
-#: test.c:756 test.c:759
+#: test.c:771 test.c:774
 #, c-format
 msgid "%s: unary operator expected"
 msgstr "%s: se așteaptă operator unar"
 
-#: test.c:881
+#: test.c:896
 msgid "missing `]'"
-msgstr "lipsește ']'"
+msgstr "lipsește „]”"
 
-#: test.c:899
-#, fuzzy, c-format
+#: test.c:914
+#, c-format
 msgid "syntax error: `%s' unexpected"
-msgstr "eroare de sintaxă: sfârșit de fișier neașteptat"
+msgstr "eroare de sintaxă: „%s” neașteptat"
 
 #: trap.c:220
-#, fuzzy
 msgid "invalid signal number"
-msgstr "număr de semnal invalid"
+msgstr "număr de semnal nevalid"
 
-#: trap.c:325
+#: trap.c:323
 #, c-format
 msgid "trap handler: maximum trap handler level exceeded (%d)"
-msgstr ""
+msgstr "gestionarul de capturare: nivelul maxim de gestionări de capturare a fost depășit (%d)"
 
-#: trap.c:414
+#: trap.c:412
 #, c-format
 msgid "run_pending_traps: bad value in trap_list[%d]: %p"
-msgstr ""
+msgstr "run_pending_traps: valoare greșită în trap_list[%d]: %p"
 
-#: trap.c:418
+#: trap.c:416
 #, c-format
-msgid ""
-"run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
-msgstr ""
+msgid "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
+msgstr "run_pending_traps: gestionarul de semnal este SIG_DFL, se retrimite %d (%s) către mine"
 
-#: trap.c:487
-#, fuzzy, c-format
+#: trap.c:509
+#, c-format
 msgid "trap_handler: bad signal %d"
-msgstr "trap_handler: Semnal invalid %d"
+msgstr "trap_handler: semnal nevalid %d"
 
-#: variables.c:421
+#: variables.c:424
 #, c-format
 msgid "error importing function definition for `%s'"
-msgstr "eroare în importarea definiției funcției pentru '%s'"
+msgstr "eroare în importarea definiției funcției pentru „%s”"
 
-#: variables.c:833
+#: variables.c:838
 #, c-format
 msgid "shell level (%d) too high, resetting to 1"
-msgstr ""
+msgstr "nivelul shell-ului (%d) prea mare, se reinițializează la 1"
 
-#: variables.c:2674
+#: variables.c:2642
 msgid "make_local_variable: no function context at current scope"
-msgstr ""
+msgstr "make_local_variable: nu există context de funcție în domeniul actual"
 
-#: variables.c:2693
+#: variables.c:2661
 #, c-format
 msgid "%s: variable may not be assigned value"
-msgstr ""
+msgstr "%s: nu este posibil ca variabilei să i se atribuie o valoare"
 
-#: variables.c:3475
+#: variables.c:2818 variables.c:2874
+#, c-format
+msgid "%s: cannot inherit value from incompatible type"
+msgstr "%s: nu se poate moșteni valoarea de la un tip incompatibil"
+
+#: variables.c:3459
 #, c-format
 msgid "%s: assigning integer to name reference"
-msgstr ""
+msgstr "%s: se atribuie un număr întreg referinței de nume"
 
-#: variables.c:4404
+#: variables.c:4390
 msgid "all_local_variables: no function context at current scope"
-msgstr ""
+msgstr "all_local_variables: nu există context de funcție în domeniul actual"
 
-#: variables.c:4771
-#, fuzzy, c-format
+#: variables.c:4757
+#, c-format
 msgid "%s has null exportstr"
-msgstr "%s: parametru null sau nesetat"
+msgstr "%s are exportstr nul"
 
-#: variables.c:4776 variables.c:4785
+#: variables.c:4762 variables.c:4771
 #, c-format
 msgid "invalid character %d in exportstr for %s"
-msgstr ""
+msgstr "caracter nevalid %d în exportstr pentru %s"
 
-#: variables.c:4791
+#: variables.c:4777
 #, c-format
 msgid "no `=' in exportstr for %s"
-msgstr ""
+msgstr "nu există „=” în exportstr pentru %s"
 
-#: variables.c:5331
+#: variables.c:5317
 msgid "pop_var_context: head of shell_variables not a function context"
-msgstr ""
+msgstr "pop_var_context: partea de sus din shell_variables nu este un context de funcție"
 
-#: variables.c:5344
+#: variables.c:5330
 msgid "pop_var_context: no global_variables context"
-msgstr ""
+msgstr "pop_var_context: nu există un context global_variables"
 
-#: variables.c:5424
+#: variables.c:5410
 msgid "pop_scope: head of shell_variables not a temporary environment scope"
-msgstr ""
+msgstr "pop_scope: partea de sus din shell_variables nu este un domeniu de mediu temporar"
 
-#: variables.c:6387
+#: variables.c:6400
 #, c-format
 msgid "%s: %s: cannot open as FILE"
-msgstr ""
+msgstr "%s: %s: nu se poate deschide ca FIȘIER"
 
-#: variables.c:6392
+#: variables.c:6405
 #, c-format
 msgid "%s: %s: invalid value for trace file descriptor"
-msgstr ""
+msgstr "%s: %s: valoare nevalidă pentru descriptorul fișierului de urmărire"
 
-#: variables.c:6437
+#: variables.c:6450
 #, c-format
 msgid "%s: %s: compatibility value out of range"
-msgstr ""
+msgstr "%s: %s: valoarea de compatibilitate în afara intervalului"
 
 #: version.c:46 version2.c:46
-msgid "Copyright (C) 2020 Free Software Foundation, Inc."
-msgstr ""
+msgid "Copyright (C) 2022 Free Software Foundation, Inc."
+msgstr "Drepturi de autor © 2022 Free Software Foundation, Inc."
 
 #: version.c:47 version2.c:47
-msgid ""
-"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
-"html>\n"
-msgstr ""
+msgid "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n"
+msgstr "Licență GPLv3+: GNU GPL versiunea 3 sau ulterioară <http://gnu.org/licenses/gpl.html>\n"
 
 #: version.c:86 version2.c:86
-#, fuzzy, c-format
+#, c-format
 msgid "GNU bash, version %s (%s)\n"
-msgstr "GNU %s, versiunea %s\n"
+msgstr "GNU bash, versiunea %s (%s)\n"
 
 #: version.c:91 version2.c:91
 msgid "This is free software; you are free to change and redistribute it."
-msgstr ""
+msgstr "Acesta este un software liber; sunteți liber să îl modificați și să îl redistribuiți."
 
 #: version.c:92 version2.c:92
 msgid "There is NO WARRANTY, to the extent permitted by law."
-msgstr ""
+msgstr "NU EXISTĂ NICIO GARANȚIE, în măsura permisă de lege."
 
 #: xmalloc.c:93
-#, fuzzy, c-format
+#, c-format
 msgid "%s: cannot allocate %lu bytes (%lu bytes allocated)"
-msgstr "xmalloc: nu pot aloca %lu octeți (%lu octeți alocați)"
+msgstr "%s: nu se pot aloca %lu octeți (%lu octeți alocați)"
 
 #: xmalloc.c:95
-#, fuzzy, c-format
+#, c-format
 msgid "%s: cannot allocate %lu bytes"
-msgstr "%s: nu s-a putut crea: %s"
+msgstr "%s: nu se pot aloca %lu octeți"
 
 #: xmalloc.c:165
-#, fuzzy, c-format
+#, c-format
 msgid "%s: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)"
-msgstr "xmalloc: nu pot aloca %lu octeți (%lu octeți alocați)"
+msgstr "%s: %s:%d: nu se pot aloca %lu octeți (%lu octeți alocați)"
 
 #: xmalloc.c:167
-#, fuzzy, c-format
+#, c-format
 msgid "%s: %s:%d: cannot allocate %lu bytes"
-msgstr "%s: nu s-a putut crea: %s"
+msgstr "%s: %s:%d: nu se pot aloca %lu octeți"
 
+# R-GC, scrie:
+# acest mesaj, și următoarele, pot să fie
+# vizualizate, rulînd comanda:
+# «bash -c help», dintr-un shell diferit de «bash»;
+# «help», dintr-un shell «bash».
 #: builtins.c:45
 msgid "alias [-p] [name[=value] ... ]"
 msgstr "alias [-p] [nume[=valoare] ... ]"
 
 #: builtins.c:49
-#, fuzzy
 msgid "unalias [-a] name [name ...]"
-msgstr "unalias [-a] [nume ...]"
+msgstr "unalias [-a] nume [nume ...]"
 
 #: builtins.c:53
-#, fuzzy
-msgid ""
-"bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-"
-"x keyseq:shell-command] [keyseq:readline-function or readline-command]"
-msgstr ""
-"bind [-lpvsPVS] [-m keymap] [-f nume_fișier] [-q nume] [-r keyseq] [keyseq:"
-"funcție readline]"
+msgid "bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-x keyseq:shell-command] [keyseq:readline-function or readline-command]"
+msgstr "bind [-lpsvPSVX] [-m comb_taste] [-f nume_fișier] [-q nume] [-u nume] [-r secv_taste] [-x secv_taste:comandă_shell] [secv_taste:funcție-readline sau comandă-readline]"
 
 #: builtins.c:56
 msgid "break [n]"
@@ -2211,41 +2453,35 @@ msgstr "continue [n]"
 
 #: builtins.c:60
 msgid "builtin [shell-builtin [arg ...]]"
-msgstr "builtin [shell-builtin [arg ...]]"
+msgstr "builtin [comandă_internă-shell [arg ...]]"
 
 #: builtins.c:63
-#, fuzzy
 msgid "caller [expr]"
-msgstr "test [expr]"
+msgstr "caller [expr]"
 
 #: builtins.c:66
-#, fuzzy
 msgid "cd [-L|[-P [-e]] [-@]] [dir]"
-msgstr "cd [-PL] [dir]"
+msgstr "cd [-L|[-P [-e]] [-@]] [dir]"
 
 #: builtins.c:68
-#, fuzzy
 msgid "pwd [-LP]"
-msgstr "pwd [-PL]"
+msgstr "pwd [-LP]"
 
 #: builtins.c:76
 msgid "command [-pVv] command [arg ...]"
 msgstr "command [-pVv] comandă [arg ...]"
 
 #: builtins.c:78
-#, fuzzy
-msgid "declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]"
-msgstr "declare [-afFrxi] [-p] nume[=valoare] ..."
+msgid "declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] [name ...]"
+msgstr "declare [-aAfFgiIlnrtux] [nume[=valoare] ...] sau declare -p [-aAfFilnrtux] [nume ...]"
 
 #: builtins.c:80
-#, fuzzy
-msgid "typeset [-aAfFgiIlnrtux] [-p] name[=value] ..."
-msgstr "typeset [-afFrxi] [-p] nume[=valoare] ..."
+msgid "typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] [name ...]"
+msgstr "typeset [-aAfFgiIlnrtux] nume[=valoare] ... sau typeset -p [-aAfFilnrtux] [nume ...]"
 
 #: builtins.c:82
-#, fuzzy
 msgid "local [option] name[=value] ..."
-msgstr "local nume[=valoare] ..."
+msgstr "local [opțiune] nume[=valoare] ..."
 
 #: builtins.c:85
 msgid "echo [-neE] [arg ...]"
@@ -2256,129 +2492,104 @@ msgid "echo [-n] [arg ...]"
 msgstr "echo [-n] [arg ...]"
 
 #: builtins.c:92
-#, fuzzy
 msgid "enable [-a] [-dnps] [-f filename] [name ...]"
-msgstr "enable [-pnds] [-a] [-f nume_fișier] [nume ...]"
+msgstr "enable [-a] [-dnps] [-f nume_fișier]] [nume ...]"
 
 #: builtins.c:94
 msgid "eval [arg ...]"
 msgstr "eval [arg ...]"
 
 #: builtins.c:96
-#, fuzzy
 msgid "getopts optstring name [arg ...]"
-msgstr "getopts optstring nume [arg]"
+msgstr "getopts șir_opțiuni nume [arg ...]"
 
 #: builtins.c:98
-#, fuzzy
 msgid "exec [-cl] [-a name] [command [argument ...]] [redirection ...]"
-msgstr "exec [-cl] [-a nume] fișier [redirectare ...]"
+msgstr "exec [-cl] [-a nume] [comandă [argument ...]] [redirectare ...]"
 
 #: builtins.c:100
 msgid "exit [n]"
 msgstr "exit [n]"
 
 #: builtins.c:102
-#, fuzzy
 msgid "logout [n]"
-msgstr "logout"
+msgstr "logout [n]"
 
 #: builtins.c:105
-#, fuzzy
 msgid "fc [-e ename] [-lnr] [first] [last] or fc -s [pat=rep] [command]"
-msgstr "fc [-e enume] [-nlr] [prim] [u8ltim] sau fc -s [pat=rep] [cmd]"
+msgstr "fc [-e enume] [-lnr] [prim] [ultim] sau fc -s [pat=rep] [comandă]"
 
 #: builtins.c:109
 msgid "fg [job_spec]"
-msgstr "fg [job_spec]"
+msgstr "fg [id_lucrare]"
 
 #: builtins.c:113
-#, fuzzy
 msgid "bg [job_spec ...]"
-msgstr "bg [job_spec]"
+msgstr "bg [id_lucrare ...]"
 
 #: builtins.c:116
-#, fuzzy
 msgid "hash [-lr] [-p pathname] [-dt] [name ...]"
-msgstr "hash [-r] [-p nume_cale] [nume ...]"
+msgstr "hash [-lr] [-p nume_rută [-dt] [nume ...]"
 
 #: builtins.c:119
-#, fuzzy
 msgid "help [-dms] [pattern ...]"
-msgstr "help [tipar ...]"
+msgstr "help [-dms] [tipar ...]"
 
 #: builtins.c:123
-#, fuzzy
-msgid ""
-"history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg "
-"[arg...]"
-msgstr ""
-"history [-c] [n] sau history -awrn [nume_fișier] sau history -ps arg [arg...]"
+msgid "history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg...]"
+msgstr "history [-c] [-d decalaj] [n] sau history -anrw [nume_fișier] sau history -ps arg [arg...]"
 
 #: builtins.c:127
 msgid "jobs [-lnprs] [jobspec ...] or jobs -x command [args]"
-msgstr "jobs [-lnprs] [jobspec ...] sau jobs -x comandă [args]"
+msgstr "jobs [-lnprs] [id_lucrare ...] sau jobs -x comandă [args]"
 
 #: builtins.c:131
-#, fuzzy
 msgid "disown [-h] [-ar] [jobspec ... | pid ...]"
-msgstr "disown [jobspec ...]"
+msgstr "disown [-h] [-ar] [id_lucrare ... | pid ...]"
 
 #: builtins.c:134
-#, fuzzy
-msgid ""
-"kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l "
-"[sigspec]"
-msgstr ""
-"kill [-s sigspec | -n signum | -sigspec] [pid | job]... sau kill -l [sigspec]"
+msgid "kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]"
+msgstr "kill [-s id_semnal | -n num_semnal | -id_semnal] pid | id_lucrare ... sau kill -l [id_semnal]"
 
 #: builtins.c:136
 msgid "let arg [arg ...]"
 msgstr "let arg [arg ...]"
 
 #: builtins.c:138
-msgid ""
-"read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p "
-"prompt] [-t timeout] [-u fd] [name ...]"
-msgstr ""
+msgid "read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]"
+msgstr "read [-ers] [-a matrice] [-d delim] [-i text] [-n nr_carac] [-N nr_carac [-p prompt] [-t timp] [-u fd] [nume ...]"
 
 #: builtins.c:140
 msgid "return [n]"
 msgstr "return [n]"
 
 #: builtins.c:142
-#, fuzzy
-msgid "set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]"
-msgstr "set [--abefhkmnptuvxBCHP] [-o opțiune] [arg ...]"
+msgid "set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]"
+msgstr "set [-abefhkmnptuvxBCEHPT] [-o nume-opțiune] [--] [-] [arg ...]"
 
 #: builtins.c:144
-#, fuzzy
 msgid "unset [-f] [-v] [-n] [name ...]"
-msgstr "unset [-f] [-v] [nume ...]"
+msgstr "unset [-f] [-v] [-n] [nume ...]"
 
 #: builtins.c:146
-#, fuzzy
 msgid "export [-fn] [name[=value] ...] or export -p"
-msgstr "export [-nf] [nume ...] sau export -p"
+msgstr "export [-fn] [nume[=valoare] ...] sau export -p"
 
 #: builtins.c:148
-#, fuzzy
 msgid "readonly [-aAf] [name[=value] ...] or readonly -p"
-msgstr "readonly [-anf] [nume ...] sau readonly -p"
+msgstr "readonly [-aAf] [nume[=valoare] ...] sau readonly -p"
 
 #: builtins.c:150
 msgid "shift [n]"
 msgstr "shift [n]"
 
 #: builtins.c:152
-#, fuzzy
 msgid "source filename [arguments]"
-msgstr "nume fișier sursă"
+msgstr "source nume_fișier [argumente]"
 
 #: builtins.c:154
-#, fuzzy
 msgid ". filename [arguments]"
-msgstr ". nume fișier"
+msgstr ". nume_fișier [argumente]"
 
 #: builtins.c:157
 msgid "suspend [-f]"
@@ -2393,159 +2604,135 @@ msgid "[ arg... ]"
 msgstr "[ arg... ]"
 
 #: builtins.c:166
-#, fuzzy
 msgid "trap [-lp] [[arg] signal_spec ...]"
-msgstr "trap [arg] [signal_spec] sau trap -l"
+msgstr "trap [-lp] [[arg] id_semnal ...]"
 
 #: builtins.c:168
-#, fuzzy
 msgid "type [-afptP] name [name ...]"
-msgstr "type [-apt] nume [nume ...]"
+msgstr "type [-afptP] nume [nume ...]"
 
 #: builtins.c:171
-#, fuzzy
-msgid "ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]"
-msgstr "ulimit [-SHacdfmstpnuv] [limită]"
+msgid "ulimit [-SHabcdefiklmnpqrstuvxPRT] [limit]"
+msgstr "ulimit [-SHabcdefiklmnpqrstuvxPRT] [limită]"
 
 #: builtins.c:174
-#, fuzzy
 msgid "umask [-p] [-S] [mode]"
-msgstr "umask [-S] [mod]"
+msgstr "umask [-p] [-S] [mod]"
 
 #: builtins.c:177
-#, fuzzy
 msgid "wait [-fn] [-p var] [id ...]"
-msgstr "echo [-n] [arg ...]"
+msgstr "wait [-fn] [-p var] [id ...]"
 
 #: builtins.c:181
-#, fuzzy
 msgid "wait [pid ...]"
-msgstr "wait [n]"
+msgstr "wait [pid ...]"
 
 #: builtins.c:184
-#, fuzzy
 msgid "for NAME [in WORDS ... ] ; do COMMANDS; done"
-msgstr "for NUME [în EXPRESIE ... ;] execută COMENZI; done"
+msgstr "for NUME [in CUVINTE ... ] ; do COMENZI; done"
 
 #: builtins.c:186
-#, fuzzy
 msgid "for (( exp1; exp2; exp3 )); do COMMANDS; done"
-msgstr "for NUME [în EXPRESIE ... ;] execută COMENZI; done"
+msgstr "for (( exp1; exp2; exp3 )); do COMENZI; done"
 
 #: builtins.c:188
 msgid "select NAME [in WORDS ... ;] do COMMANDS; done"
-msgstr "select NUME [în EXPRESIE ... ;] execută COMENZI; done"
+msgstr "select NUME [in CUVINTE ... ;] do COMENZI; done"
 
 #: builtins.c:190
 msgid "time [-p] pipeline"
-msgstr ""
+msgstr "time [-p] secvența_de_comenzi(pipeline)"
 
 #: builtins.c:192
 msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac"
-msgstr "case EXPRESIE în [TIPAR[[TIPAR]..) COMENZI ;;]... esac"
+msgstr "case CUVÂNT in [MODEL[[MODEL]..) COMENZI ;;]... esac"
 
 #: builtins.c:194
-msgid ""
-"if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else "
-"COMMANDS; ] fi"
-msgstr ""
-"if COMENZI; then COMENZI; [elif COMENZI; then COMENZI; ]... [ else "
-"COMENZI; ] fi"
+msgid "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi"
+msgstr "if COMENZI; then COMENZI; [elif COMENZI; then COMENZI; ]... [ else COMENZI; ] fi"
 
 #: builtins.c:196
-msgid "while COMMANDS; do COMMANDS; done"
-msgstr "while COMENZI; do COMENZI; done"
+msgid "while COMMANDS; do COMMANDS-2; done"
+msgstr "while COMENZI; do COMENZI-2; done"
 
 #: builtins.c:198
-msgid "until COMMANDS; do COMMANDS; done"
-msgstr "until COMENZI; do COMENZI; done"
+msgid "until COMMANDS; do COMMANDS-2; done"
+msgstr "until COMENZI; do COMENZI-2; done"
 
 #: builtins.c:200
 msgid "coproc [NAME] command [redirections]"
-msgstr ""
+msgstr "coproc [NUME] comanda [redirecționări]"
 
 #: builtins.c:202
-#, fuzzy
 msgid "function name { COMMANDS ; } or name () { COMMANDS ; }"
-msgstr "function NUME { COMENZI ; } sau NUME () { COMENZI ; }"
+msgstr "function nume { COMENZI ; } sau nume () { COMENZI ; }"
 
 #: builtins.c:204
-#, fuzzy
 msgid "{ COMMANDS ; }"
-msgstr "{ COMENZI }"
+msgstr "{ COMENZI }"
 
 #: builtins.c:206
-#, fuzzy
 msgid "job_spec [&]"
-msgstr "fg [job_spec]"
+msgstr "id_lucrare [&]"
 
 #: builtins.c:208
-#, fuzzy
 msgid "(( expression ))"
-msgstr "se așteaptă expresie"
+msgstr "(( expresie ))"
 
 #: builtins.c:210
-#, fuzzy
 msgid "[[ expression ]]"
-msgstr "se așteaptă expresie"
+msgstr "[[ expresie ]]"
 
 #: builtins.c:212
 msgid "variables - Names and meanings of some shell variables"
-msgstr "variabile - Numele și înțelesurile unor variabile din shell"
+msgstr "variables - Numele și semnificațiile unor variabile din shell"
 
 #: builtins.c:215
-#, fuzzy
 msgid "pushd [-n] [+N | -N | dir]"
-msgstr "pushd [dir | +N | -N] [-n]"
+msgstr "pushd [-n] [+N | -N | dir]"
 
 #: builtins.c:219
-#, fuzzy
 msgid "popd [-n] [+N | -N]"
-msgstr "popd [+N | -N] [-n]"
+msgstr "popd [-n] [+N | -N]"
 
 #: builtins.c:223
 msgid "dirs [-clpv] [+N] [-N]"
 msgstr "dirs [-clpv] [+N] [-N]"
 
 #: builtins.c:226
-#, fuzzy
 msgid "shopt [-pqsu] [-o] [optname ...]"
-msgstr "shopt [-pqsu] [-o opțiune lungă] nume_opt [nume_opt...]"
+msgstr "shopt [-pqsu] [-o] [nume_opțiune ...]"
 
 #: builtins.c:228
 msgid "printf [-v var] format [arguments]"
-msgstr ""
+msgstr "printf [-v var] format [argumente]"
 
 #: builtins.c:231
-msgid ""
-"complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-"
-"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S "
-"suffix] [name ...]"
-msgstr ""
+msgid "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [name ...]"
+msgstr "complete [-abcdefgjksuv] [-pr] [-DEI] [-o opțiune] [-A acțiune] [-G tipar_glob] [-W listă_cuvinte] [-F funcție] [-C comandă] [-X tipar_filtru [- P prefix] [-S sufix] [nume ...]"
 
 #: builtins.c:235
-msgid ""
-"compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-"
-"F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]"
-msgstr ""
+msgid "compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]"
+msgstr "compgen [-abcdefgjksuv] [-o opțiune] [-A acțiune] [-G tipar_glob] [-W listă_cuvinte] [-F funcție] [-C comandă] [-X tipar_filtru] [-P prefix] [-S sufix] [cuvânt]"
 
 #: builtins.c:239
-#, fuzzy
 msgid "compopt [-o|+o option] [-DEI] [name ...]"
-msgstr "unset [-f] [-v] [nume ...]"
+msgstr "compopt [-o|+o opțiune] [-DEI] [nume ...]"
 
 #: builtins.c:242
-msgid ""
-"mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C "
-"callback] [-c quantum] [array]"
-msgstr ""
+msgid "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]"
+msgstr "mapfile [-d delim] [-n cont] [-O origin] [-s cont] [-t] [-u fd] [-C apelare] [-c cantitate] [matrice]"
 
 #: builtins.c:244
-msgid ""
-"readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C "
-"callback] [-c quantum] [array]"
-msgstr ""
-
+msgid "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]"
+msgstr "readarray [-d delim] [-n cantitate] [-O origine] [-s cantitate] [-t] [-u fd] [-C apelare] [-c sumă_de] [matrice]"
+
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help alias», din «bash»;
+# «bash -c "help alias"», din «bash», sau dintr-un
+# shell, diferit de «bash».
 #: builtins.c:256
 msgid ""
 "Define or display aliases.\n"
@@ -2561,11 +2748,31 @@ msgid ""
 "      -p\tprint all defined aliases in a reusable format\n"
 "    \n"
 "    Exit Status:\n"
-"    alias returns true unless a NAME is supplied for which no alias has "
-"been\n"
+"    alias returns true unless a NAME is supplied for which no alias has been\n"
 "    defined."
 msgstr ""
+"Definește sau afișează alias.\n"
+"    \n"
+"    Fără argumente, «alias» imprimă lista de alias în forma reutilizabilă\n"
+"    „alias NUME=VALOARE” la ieșirea standard (pe ecran).\n"
+"    \n"
+"    În caz contrar, un alias este definit pentru fiecare NUME a cărui VALOARE\n"
+"    este dată.  Un spațiu final în VALOARE, face ca următorul cuvânt să fie\n"
+"    verificat pentru înlocuirea aliasului atunci când aliasul este extins.\n"
+"    \n"
+"    Opțiuni:\n"
+"      -p\timprimă toate alias definite într-un format reutilizabil\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    «alias» returnează adevărat, cu excepția cazului în care este furnizat\n"
+"    un NUME pentru care nu a fost definit niciun alias."
 
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help unalias», din «bash»;
+# «bash -c "help unalias"», din «bash», sau
+# dintr-un shell, diferit de «bash».
 #: builtins.c:278
 msgid ""
 "Remove each NAME from the list of defined aliases.\n"
@@ -2575,7 +2782,19 @@ msgid ""
 "    \n"
 "    Return success unless a NAME is not an existing alias."
 msgstr ""
+"Elimină fiecare NUME din lista de aliasuri definite.\n"
+"    \n"
+"    Opțiuni:\n"
+"      -a\telimină toate definițiile de alias\n"
+"    \n"
+"    Returnează succes, cu excepția cazului în care un NUME nu este un alias existent."
 
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help bind», din «bash»;
+# «bash -c "help bind"», din «bash», sau dintr-un
+# shell, diferit de «bash».
 #: builtins.c:291
 msgid ""
 "Set Readline key bindings and variables.\n"
@@ -2588,36 +2807,71 @@ msgid ""
 "    Options:\n"
 "      -m  keymap         Use KEYMAP as the keymap for the duration of this\n"
 "                         command.  Acceptable keymap names are emacs,\n"
-"                         emacs-standard, emacs-meta, emacs-ctlx, vi, vi-"
-"move,\n"
+"                         emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,\n"
 "                         vi-command, and vi-insert.\n"
 "      -l                 List names of functions.\n"
 "      -P                 List function names and bindings.\n"
 "      -p                 List functions and bindings in a form that can be\n"
 "                         reused as input.\n"
-"      -S                 List key sequences that invoke macros and their "
-"values\n"
-"      -s                 List key sequences that invoke macros and their "
-"values\n"
+"      -S                 List key sequences that invoke macros and their values\n"
+"      -s                 List key sequences that invoke macros and their values\n"
 "                         in a form that can be reused as input.\n"
 "      -V                 List variable names and values\n"
 "      -v                 List variable names and values in a form that can\n"
 "                         be reused as input.\n"
 "      -q  function-name  Query about which keys invoke the named function.\n"
-"      -u  function-name  Unbind all keys which are bound to the named "
-"function.\n"
+"      -u  function-name  Unbind all keys which are bound to the named function.\n"
 "      -r  keyseq         Remove the binding for KEYSEQ.\n"
 "      -f  filename       Read key bindings from FILENAME.\n"
 "      -x  keyseq:shell-command\tCause SHELL-COMMAND to be executed when\n"
 "    \t\t\t\tKEYSEQ is entered.\n"
-"      -X                 List key sequences bound with -x and associated "
-"commands\n"
+"      -X                 List key sequences bound with -x and associated commands\n"
 "                         in a form that can be reused as input.\n"
 "    \n"
 "    Exit Status:\n"
 "    bind returns 0 unless an unrecognized option is given or an error occurs."
 msgstr ""
-
+"Configurează legăturile de taste și variabilele Readline.\n"
+"    \n"
+"    Asociază o secvență de taste cu o funcție Readline sau cu o macrocomandă\n"
+"    sau configurează o variabilă Readline.  Sintaxa argumentului fără opțiune \n"
+"    este echivalentă cu cea găsită în ~/.inputrc, dar trebuie transmisă ca un\n"
+"    singur argument; de exp.: bind '\"\\C-x\\C-r\": re-read-init-file'.\n"
+"    \n"
+"    Opțiuni:\n"
+"      -m  keymap         Utilizează KEYMAP ca hartă de taste pe durata acestei\n"
+"                         comenzi.  Numele valabile pentru hărți de taste sunt emacs,\n"
+"                         emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,\n"
+"                         vi-command, și vi-insert.\n"
+"      -l                 Enumeră numele funcțiilor.\n"
+"      -P                 Enumeră numele și asocierile funcțiilor.\n"
+"      -p                 Enumeră funcțiile și asocierile într-o formă care poate fi\n"
+"                         reutilizată ca intrare.\n"
+"      -S                 Enumeră secvențele de chei care invocă macrocomenzi și\n"
+"                         valorile acestora\n"
+"      -s                 Enumeră secvențele de chei care invocă macrocomenzi și\n"
+"                         valorile acestora într-o formă care poate fi reutilizată ca intrare.\n"
+"      -V                 Enumeră numele și valorile variabilelor\n"
+"      -v                 Enumeră numele și valorile variabilelor într-o formă care\n"
+"                         poate fi reutilizată ca intrare.\n"
+"      -q  nume-funcție   Se utilizează pentru a afla care taste invocă funcția numită.\n"
+"      -u  nume-funcție   Dezasociază toate tastele care sunt asociate cu funcția numită.\n"
+"      -r  sec-taste      Elimină asocierea pentru sec-taste numită.\n"
+"      -f  nume-fișier    Citește asocierile de taste din fișierul al cărui nume a fost dat.\n"
+"      -x  sec-taste:comandă-shell\tDetermină executarea comandă-shell când este\n"
+"    \t\t\t\tintrodusă sec-taste.\n"
+"      -X                 Enumeră secvențele de taste asociate cu -x și comenzile asociate într-o\n"
+"                         formă care poate fi reutilizată ca intrare.\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    «bind» returnează 0, cu excepția cazului în care este dată o opțiune nerecunoscută, sau apare o eroare."
+
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help break», din «bash»;
+# «bash -c "help break"», din «bash», sau dintr-un
+# shell, diferit de «bash».
 #: builtins.c:330
 msgid ""
 "Exit for, while, or until loops.\n"
@@ -2628,7 +2882,20 @@ msgid ""
 "    Exit Status:\n"
 "    The exit status is 0 unless N is not greater than or equal to 1."
 msgstr ""
+"Termină buclele for, while, sau until.\n"
+"    \n"
+"    Termină o buclă FOR, WHILE sau UNTIL.  Dacă se specifică N, termină\n"
+"    numărul de bucle specificat.\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Starea de ieșire este 0, cu excepția cazului în care N nu este mai mare sau egal cu 1."
 
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help continue», din «bash»;
+# «bash -c "help continue"», din «bash», sau
+# dintr-un shell, diferit de «bash».
 #: builtins.c:342
 msgid ""
 "Resume for, while, or until loops.\n"
@@ -2639,21 +2906,48 @@ msgid ""
 "    Exit Status:\n"
 "    The exit status is 0 unless N is not greater than or equal to 1."
 msgstr ""
+"Reia buclele for, while, sau until.\n"
+"    \n"
+"    Reia următoarea iterație a buclei curente FOR, WHILE sau UNTIL.\n"
+"    Dacă se specifică N, reia bucla și continuă pentru N niveluri în continuare.\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Starea de ieșire este 0, cu excepția cazului în care N nu este mai mare sau egal cu 1."
 
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help builtin», din «bash»;
+# «bash -c "help builtin"», din «bash», sau dintr-un
+# shell, diferit de «bash».
 #: builtins.c:354
 msgid ""
 "Execute shell builtins.\n"
 "    \n"
 "    Execute SHELL-BUILTIN with arguments ARGs without performing command\n"
 "    lookup.  This is useful when you wish to reimplement a shell builtin\n"
-"    as a shell function, but need to execute the builtin within the "
-"function.\n"
+"    as a shell function, but need to execute the builtin within the function.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the exit status of SHELL-BUILTIN, or false if SHELL-BUILTIN is\n"
 "    not a shell builtin."
 msgstr ""
+"Execută comenzile interne de shell.\n"
+"    \n"
+"    Execută SHELL-BUILTIN cu argumentele ARG fără a efectua căutarea comenzilor.\n"
+"    Acest lucru este util atunci când doriți să reimplementați o comandă internă de shell\n"
+"    ca o funcție shell, dar trebuie să executați comanda internă în cadrul funcției.\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Returnează starea de ieșire a lui SHELL-BUILTIN sau false dacă SHELL-BUILTIN nu\n"
+"    este o comandă internă de shell."
 
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help caller», din «bash»;
+# «bash -c "help caller"», din «bash», sau dintr-un
+# shell, diferit de «bash».
 #: builtins.c:369
 msgid ""
 "Return the context of the current subroutine call.\n"
@@ -2669,27 +2963,39 @@ msgid ""
 "    Returns 0 unless the shell is not executing a shell function or EXPR\n"
 "    is invalid."
 msgstr ""
+"Returnează contextul apelului subrutinei curente.\n"
+"    \n"
+"    Fără EXPR, returnează „$line $filename”. Cu EXPR, returnează\n"
+"    „$line $subroutine $filename”; aceste informații suplimentare pot fi\n"
+"    utilizate pentru a furniza o urmărire a stivei.\n"
+"    \n"
+"    Valoarea EXPR indică câte cadre de apel trebuie să se întoarcă înaintea\n"
+"    celui curent; cadrul superior este cadrul 0.\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Returnează 0, cu excepția cazului în care shell-ul nu execută o funcție shell\n"
+"    sau EXPR nu este validă."
 
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help cd», din «bash»;
+# «bash -c "help cd"», din «bash», sau dintr-un
+# shell, diferit de «bash».
 #: builtins.c:387
 msgid ""
 "Change the shell working directory.\n"
 "    \n"
-"    Change the current directory to DIR.  The default DIR is the value of "
-"the\n"
+"    Change the current directory to DIR.  The default DIR is the value of the\n"
 "    HOME shell variable.\n"
 "    \n"
-"    The variable CDPATH defines the search path for the directory "
-"containing\n"
-"    DIR.  Alternative directory names in CDPATH are separated by a colon "
-"(:).\n"
-"    A null directory name is the same as the current directory.  If DIR "
-"begins\n"
+"    The variable CDPATH defines the search path for the directory containing\n"
+"    DIR.  Alternative directory names in CDPATH are separated by a colon (:).\n"
+"    A null directory name is the same as the current directory.  If DIR begins\n"
 "    with a slash (/), then CDPATH is not used.\n"
 "    \n"
-"    If the directory is not found, and the shell option `cdable_vars' is "
-"set,\n"
-"    the word is assumed to be  a variable name.  If that variable has a "
-"value,\n"
+"    If the directory is not found, and the shell option `cdable_vars' is set,\n"
+"    the word is assumed to be  a variable name.  If that variable has a value,\n"
 "    its value is used for DIR.\n"
 "    \n"
 "    Options:\n"
@@ -2705,16 +3011,53 @@ msgid ""
 "    \t\tattributes as a directory containing the file attributes\n"
 "    \n"
 "    The default is to follow symbolic links, as if `-L' were specified.\n"
-"    `..' is processed by removing the immediately previous pathname "
-"component\n"
+"    `..' is processed by removing the immediately previous pathname component\n"
 "    back to a slash or the beginning of DIR.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns 0 if the directory is changed, and if $PWD is set successfully "
-"when\n"
+"    Returns 0 if the directory is changed, and if $PWD is set successfully when\n"
 "    -P is used; non-zero otherwise."
 msgstr ""
-
+"Schimbă directorul de lucru al shell-ului.\n"
+"    \n"
+"    Schimbă directorul actual cu DIR.  DIR implicit este valoarea variabilei de \n"
+"    shell HOME.\n"
+"    \n"
+"    Variabila CDPATH definește calea de căutare pentru directorul care conține\n"
+"    DIR.  Numele alternative ale directoarelor din CDPATH sunt separate prin\n"
+"    două puncte (:).  Numele unui director nul este același cu directorul curent.\n"
+"    Dacă DIR începe cu o bară oblică (/), atunci CDPATH nu este utilizat.\n"
+"    \n"
+"    Dacă directorul nu este găsit și opțiunea de shell „cdable_vars” este setată,\n"
+"    cuvântul se presupune a fi un nume de variabilă.  Dacă acea variabilă are o\n"
+"    valoare, valoarea ei este utilizată pentru DIR.\n"
+"    \n"
+"    Opțiuni:\n"
+"      -L\tforțează ca legăturile simbolice să fie urmate: rezolvă \n"
+"    \t\tlegăturile simbolice din DIR după procesarea instanțelor de „..”\n"
+"      -P\tutilizează structura fizică a directorului fără a urma legăturile\n"
+"    \t\tsimbolice: rezolvă legăturile simbolice din DIR înainte de a\n"
+"    \t\tprocesa instanțe de „..”\n"
+"      -e\tdacă este furnizată opțiunea „-P” și directorul de lucru curent\n"
+"    \t\tnu poate fi determinat cu succes, iese cu o stare diferită de\n"
+"    \t\tzero\n"
+"      -@\tpe sistemele care acceptă acest lucru, prezintă un fișier cu\n"
+"    \t\tatribute extinse, ca un director care conține atributele fișierului\n"
+"    \n"
+"    Modul implicit este să urmeze legături simbolice, ca și cum ar fi fost specificat „-L”.\n"
+"    „..” este procesat prin eliminarea componentei de cale imediat anterioară până\n"
+"   la o bară oblică sau la începutul DIR.\n"
+"    \n"
+"   Starea de ieșire:\n"
+"    Returnează 0 dacă directorul este schimbat și dacă $PWD este stabilit cu succes atunci\n"
+"    când este utilizat „-P”; diferit de zero, în caz contrar."
+
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help pwd», din «bash»;
+# «bash -c "help pwd"», din «bash», sau dintr-un
+# shell, diferit de «bash».
 #: builtins.c:425
 msgid ""
 "Print the name of the current working directory.\n"
@@ -2730,9 +3073,26 @@ msgid ""
 "    Returns 0 unless an invalid option is given or the current directory\n"
 "    cannot be read."
 msgstr ""
+"Imprimă numele directorului de lucru curent.\n"
+"    \n"
+"    Opțiuni:\n"
+"      -L\timprimă valoarea lui $PWD dacă aceasta numește directorul de\n"
+"    \t\tlucru curent\n"
+"      -P\timprimă directorul fizic, fără nicio legătură simbolică\n"
+"    \n"
+"    În mod implicit, „pwd” se comportă ca și cum „-L” ar fi fost specificat.\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Returnează 0, cu excepția cazului în care este dată o opțiune nevalidă\n"
+"    sau directorul curent nu poate fi citit."
 
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help :», din «bash»;
+# «bash -c "help :"», din «bash», sau
+# dintr-un shell, diferit de «bash».
 #: builtins.c:442
-#, fuzzy
 msgid ""
 "Null command.\n"
 "    \n"
@@ -2741,8 +3101,19 @@ msgid ""
 "    Exit Status:\n"
 "    Always succeeds."
 msgstr ""
-"Nici un efect, comanda nu face nimic.  Un cod de ieșire zero este returnat."
+"Comandă nulă.\n"
+"    \n"
+"    Fără efect; comanda nu face nimic.\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Întotdeauna reușește(0)."
 
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help true», din «bash»;
+# «bash -c "help true"», din «bash», sau
+# dintr-un shell, diferit de «bash».
 #: builtins.c:453
 msgid ""
 "Return a successful result.\n"
@@ -2750,7 +3121,17 @@ msgid ""
 "    Exit Status:\n"
 "    Always succeeds."
 msgstr ""
+"Returnează un rezultat de succes(0).\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Întotdeauna reușește(0)."
 
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help false», din «bash»;
+# «bash -c "help false"», din «bash», sau
+# dintr-un shell, diferit de «bash».
 #: builtins.c:462
 msgid ""
 "Return an unsuccessful result.\n"
@@ -2758,14 +3139,23 @@ msgid ""
 "    Exit Status:\n"
 "    Always fails."
 msgstr ""
+"Returnează un rezultat nereușit(≠0).\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Întotdeauna eșuează(≠0)."
 
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help command», din «bash»;
+# «bash -c "help command"», din «bash», sau
+# dintr-un shell, diferit de «bash».
 #: builtins.c:471
 msgid ""
 "Execute a simple command or display information about commands.\n"
 "    \n"
 "    Runs COMMAND with ARGS suppressing  shell function lookup, or display\n"
-"    information about the specified COMMANDs.  Can be used to invoke "
-"commands\n"
+"    information about the specified COMMANDs.  Can be used to invoke commands\n"
 "    on disk when a function with the same name exists.\n"
 "    \n"
 "    Options:\n"
@@ -2777,7 +3167,38 @@ msgid ""
 "    Exit Status:\n"
 "    Returns exit status of COMMAND, or failure if COMMAND is not found."
 msgstr ""
-
+"Execută o comandă simplă sau afișează informații despre comenzi.\n"
+"    \n"
+"    Rulează COMANDA cu ARGumente care suprimă căutarea funcției shell sau afișează\n"
+"    informații despre COMENZILE specificate.  Se poate utiliza pentru a invoca comenzi\n"
+"    de pe disc atunci când există o funcție cu același nume.\n"
+"    \n"
+"    Opțiuni:\n"
+"      -p    utilizează o valoare implicită pentru PATH ce garantează că se\n"
+"            vor găsi toate utilitățile standard\n"
+"      -v    imprimă o descriere a COMENZII, similară cu cea a comenzii\n"
+"            interne «type».\n"
+"      -V    imprimă o descriere mai detaliată pentru fiecare COMANDĂ\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Returnează starea de ieșire a COMENZII sau eșuează dacă COMANDA nu este găsită."
+
+# R-GC, scrie:
+# am tradus:
+# „-I        if ... with the same name at a previous scope”, ca:
+# „-I        dacă ... cu același nume dintr-un scop anterior”
+# ***
+# Întrebare:
+# dacă se traduce, ca:
+# „-I        dacă ... cu același nume dintr-o sferă de aplicare anterioară”,
+# ar fi o traducere mai bună?
+# Opinii/Idei?
+# ==================================
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help declare», din «bash»;
+# «bash -c "help declare"», din «bash», sau
+# dintr-un shell, diferit de «bash».
 #: builtins.c:490
 msgid ""
 "Set variable values and attributes.\n"
@@ -2811,22 +3232,73 @@ msgid ""
 "    Variables with the integer attribute have arithmetic evaluation (see\n"
 "    the `let' command) performed when the variable is assigned a value.\n"
 "    \n"
-"    When used in a function, `declare' makes NAMEs local, as with the "
-"`local'\n"
+"    When used in a function, `declare' makes NAMEs local, as with the `local'\n"
 "    command.  The `-g' option suppresses this behavior.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns success unless an invalid option is supplied or a variable\n"
 "    assignment error occurs."
 msgstr ""
-
+"Stabilește valorile și atributele variabilelor.\n"
+"    \n"
+"    Declară variabilele și-le atribuie atribute.  Dacă nu sunt date NUME,\n"
+"    afișează atributele și valorile tuturor variabilelor.\n"
+"    \n"
+"    Opțiuni:\n"
+"      -f\trestricționează acțiunea sau afișarea, la numele și definițiile funcțiilor\n"
+"      -F\trestricționează afișarea numai la numele funcțiilor (plus numărul de\n"
+"    \t\tlinie și fișierul sursă, la depanare)\n"
+"      -g\tcreează variabile globale atunci când sunt utilizate într-o funcție shell;\n"
+"    \t\taltfel sunt ignorate\n"
+"      -I\tdacă se creează o variabilă locală, moștenește atributele și valoarea\n"
+"    \t\tunei variabile cu același nume dintr-un scop anterior\n"
+"      -p\tafișează atributele și valoarea fiecărui NUME\n"
+"    \n"
+"    Opțiuni care stabilesc atributele:\n"
+"      -a\tstabilește NUME ca matrice indexată (dacă este acceptat)\n"
+"      -A\tstabilește NUME ca matrice asociativă (dacă este acceptat)\n"
+"      -i\tstabilește ca NUME să aibă atributul „integer”\n"
+"      -l\tpentru a converti valoarea fiecărui NUME în minuscule, la atribuire\n"
+"      -n\tface din NUME o referință la variabila numită după valoarea acesteia\n"
+"      -r\tcreează NUME ca numai-citire\n"
+"      -t\tstabilește ca NUME să aibă atributul „trace”\n"
+"      -u\tpentru a converti valoarea fiecărui NUME în majuscule, la atribuire\n"
+"      -x\tpentru a exporta NUME\n"
+"    \n"
+"    Utilizarea a „+” în loc de „-”, dezactivează atributul dat.\n"
+"    \n"
+"    Variabilele cu atributul întreg au o evaluare aritmetică (vezi comanda\n"
+"    «let») efectuată atunci când variabilei i se atribuie o valoare.\n"
+"    \n"
+"    Când este folosită într-o funcție, «declare» face ca NUME să fie local, ca\n"
+"    și în cazul comenzii «local».  Opțiunea „-g” suprimă acest comportament.\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Returnează succes, cu excepția cazului în care este furnizată o opțiune\n"
+"    nevalidă sau apare o eroare de atribuire a variabilelor."
+
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help typeset», din «bash»;
+# «bash -c "help typeset"», din «bash», sau dintr-un
+# shell, diferit de «bash».
 #: builtins.c:532
 msgid ""
 "Set variable values and attributes.\n"
 "    \n"
 "    A synonym for `declare'.  See `help declare'."
 msgstr ""
+"Stabilește valorile și atributele variabilelor.\n"
+"    \n"
+"    Un sinonim pentru „declare”.  A se vedea „help declare”."
 
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help local», din «bash»;
+# «bash -c "help local"», din «bash», sau
+# dintr-un shell, diferit de «bash».
 #: builtins.c:540
 msgid ""
 "Define local variables.\n"
@@ -2841,13 +3313,31 @@ msgid ""
 "    Returns success unless an invalid option is supplied, a variable\n"
 "    assignment error occurs, or the shell is not executing a function."
 msgstr ""
+"Definește variabilele locale.\n"
+"    \n"
+"    Creează o variabilă locală numită NUME și îi dă această VALOARE.\n"
+"    OPȚIUNE poate fi orice opțiune acceptată de «declare».\n"
+"    \n"
+"    Variabilele locale pot fi utilizate numai în cadrul unei funcții; sunt\n"
+"    vizibile numai pentru funcția în care sunt definite și pentru copiii\n"
+"    acesteia.\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Returnează succes cu excepția cazului în care este furnizată o opțiune\n"
+"    nevalidă, apare o eroare de atribuire a variabilei sau shell-ul nu execută\n"
+"    o funcție."
 
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help echo», din «bash»;
+# «bash -c "help echo"», din «bash», sau
+# dintr-un shell, diferit de «bash».
 #: builtins.c:557
 msgid ""
 "Write arguments to the standard output.\n"
 "    \n"
-"    Display the ARGs, separated by a single space character and followed by "
-"a\n"
+"    Display the ARGs, separated by a single space character and followed by a\n"
 "    newline, on the standard output.\n"
 "    \n"
 "    Options:\n"
@@ -2871,16 +3361,47 @@ msgid ""
 "    \t\t0 to 3 octal digits\n"
 "      \\xHH\tthe eight-bit character whose value is HH (hexadecimal).  HH\n"
 "    \t\tcan be one or two hex digits\n"
-"      \\uHHHH\tthe Unicode character whose value is the hexadecimal value "
-"HHHH.\n"
+"      \\uHHHH\tthe Unicode character whose value is the hexadecimal value HHHH.\n"
 "    \t\tHHHH can be one to four hex digits.\n"
-"      \\UHHHHHHHH the Unicode character whose value is the hexadecimal "
-"value\n"
+"      \\UHHHHHHHH the Unicode character whose value is the hexadecimal value\n"
 "    \t\tHHHHHHHH. HHHHHHHH can be one to eight hex digits.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns success unless a write error occurs."
 msgstr ""
+"Scrie argumente la ieșirea standard.\n"
+"    \n"
+"    Afișează ARGumentele, separate printr-un singur caracter de spațiu și urmate\n"
+"    de o nouă linie, în ieșirea standard.\n"
+"    \n"
+"    Opțiuni:\n"
+"      -n\tnu adaugă o nouă linie\n"
+"      -e\tactivează interpretarea următoarelor eludări de bară oblică inversă\n"
+"      -E\tsuprimă în mod explicit interpretarea eludărilor de bară oblică inversă\n"
+"    \n"
+"    «echo» interpretează următoarele caractere de eludare de bară oblică inversă:\n"
+"      \a\talertă (clopoțel)\n"
+"      \\b\tmută cursorul înapoi cu unul sau mai multe spații\n"
+"      \\c\tsuprimă ieșirea ulterioară\n"
+"      \\e\tcaracter de eludare\n"
+"      \\E\tcaracter de eludare\n"
+"      \\f\talimentare cu „hîrtie”\n"
+"      \\n\tlinie nouă\n"
+"      \\r\treturul de caret↵\n"
+"      \\t\ttabulator orizontal\n"
+"      \\v\ttabulator vertical\n"
+"      \\\\\tbară oblică inversă\n"
+"      \\0nnn\tcaracterul al cărui cod ASCII este NNN (octal).  NNN poate fi\n"
+"    \t\tde la 0 la 3 digiți octali\n"
+"      \\xHH\tcaracterul de opt biți a cărui valoare este HH (hexazecimal). HH\n"
+"    \t\tpoate fi unu sau doi digiți hexazecimali\n"
+"      \\uHHHH\tcaracterul Unicode a cărui valoare este valoarea hexazecimală HHHH.\n"
+"    \t\tHHHH poate fi de la unu până la patru digiți hexazecimali.\n"
+"      \\UHHHHHHHH caracterul Unicode a cărui valoare este valoarea hexazecimală\n"
+"    \t\tHHHHHHHH. HHHHHHHH poate fi de la unu până la opt digiți hexazecimali.\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Returnează succes cu excepția cazului în care apare o eroare de scriere."
 
 #: builtins.c:597
 msgid ""
@@ -2894,7 +3415,22 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless a write error occurs."
 msgstr ""
+"Scrie argumente la ieșirea standard.\n"
+"    \n"
+"    Afișează ARGumentele la ieșirea standard urmate de o linie nouă.\n"
+"    \n"
+"    Opțiuni:\n"
+"      -n\tnu adaugă o nouă linie\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Returnează succes cu excepția cazului în care apare o eroare de scriere."
 
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help enable», din «bash»;
+# «bash -c "help enable"», din «bash», sau
+# dintr-un shell, diferit de «bash».
 #: builtins.c:612
 msgid ""
 "Enable and disable shell builtins.\n"
@@ -2921,19 +3457,61 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless NAME is not a shell builtin or an error occurs."
 msgstr ""
+"Activează și dezactivează comenzile interne ale shell-ului.\n"
+"    \n"
+"    Activează și dezactivează comenzile interne ale shell-ului.  Dezactivarea\n"
+"    vă permite să executați o comandă de pe disc care are același nume ca\n"
+"    și comanda internă a shell-ului, fără a utiliza calea completă.\n"
+"    \n"
+"    Opțiuni:\n"
+"      -a\tafișează lista comenzilor interne indicând dacă sunt activate sau nu\n"
+"      -n\tdezactivează fiecare NUME sau afișează o listă de comenzi interne\n"
+"    \t\tdezactivate\n"
+"      -p\tafișează lista comenzilor interne într-un format reutilizabil\n"
+"      -s\tafișează numai numele comenzilor interne „speciale” Posix\n"
+"    \n"
+"    Opțiuni care controlează încărcarea dinamică:\n"
+"      -f\tÎncarcă comanda internă NUME de la obiectul partajat NUME_FIȘIER\n"
+"      -d\tElimină o comandă internă încărcată cu -f\n"
+"    \n"
+"    Fără opțiuni, fiecare NUME este activat.\n"
+"    \n"
+"    Pentru a utiliza comanda «test» găsită în $PATH în loc de comanda internă\n"
+"    de shell, tastați «enable -n test».\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Returnează succes, cu excepția cazului în care NUME nu este o comandă shell internă sau apare o eroare."
 
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help eval», din «bash»;
+# «bash -c "help eval"», din «bash», sau
+# dintr-un shell, diferit de «bash».
 #: builtins.c:640
 msgid ""
 "Execute arguments as a shell command.\n"
 "    \n"
-"    Combine ARGs into a single string, use the result as input to the "
-"shell,\n"
+"    Combine ARGs into a single string, use the result as input to the shell,\n"
 "    and execute the resulting commands.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns exit status of command or success if command is null."
 msgstr ""
+"Execută argumente ca o comandă de shell.\n"
+"    \n"
+"    Combină ARGumentele într-un singur șir, folosește rezultatul ca intrare în\n"
+"    shell și execută comenzile rezultate.\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Returnează starea de ieșire a comenzii, sau succes dacă comanda este nulă."
 
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help getopts», din «bash»;
+# «bash -c "help getopts"», din «bash», sau
+# dintr-un shell, diferit de «bash».
 #: builtins.c:652
 msgid ""
 "Parse option arguments.\n"
@@ -2974,14 +3552,56 @@ msgid ""
 "    Returns success if an option is found; fails if the end of options is\n"
 "    encountered or an error occurs."
 msgstr ""
-
+"Analizează argumentele opțiunii.\n"
+"    \n"
+"    «getopts» este folosit de procedurile shell pentru a analiza parametrii\n"
+"    poziționali ca opțiuni.\n"
+"    \n"
+"    ȘIR_OPȚIUNI conține literele de opțiune care trebuie recunoscute; dacă\n"
+"    o literă este urmată de două puncte, se așteaptă ca opțiunea să aibă un\n"
+"    argument, care ar trebui să fie separat de aceasta prin spațiu alb.\n"
+"    \n"
+"    De fiecare dată când este invocată, «getopts» va plasa următoarea opțiune\n"
+"    în variabila shell $nume, inițializând nume dacă nu există, iar indexul\n"
+"    următorului argument va fi procesat în variabila shell OPTIND.  OPTIND este\n"
+"    inițializată la 1 de fiecare dată când shell-ul sau un script shell este\n"
+"    invocat.  Când o opțiune necesită un argument, «getopts» plasează acel\n"
+"    argument în variabila shell OPTARG.\n"
+"    \n"
+"    «getopts» raportează erorile într-unul dintre următoarele două moduri.  Dacă\n"
+"    primul caracter al lui  ȘIR_OPȚIUNI este două puncte, «getopts» utilizează \n"
+"    raportarea silențioasă a erorilor.  În acest mod, nu este afișat niciun mesaj\n"
+"    de eroare.  Dacă se găsește o opțiune nevalidă, «getopts» plasează caracterul\n"
+"    de opțiune găsit în OPTARG.  Dacă nu este găsit un argument necesar, «getopts»\n"
+"    plasează un „:” în NUME și pune în OPTARG caracterul de opțiune găsit.  Dacă\n"
+"    «getopts» nu este în modul silențios și se găsește o opțiune nevalidă, «getopts»\n"
+"    plasează „?” în NUME și dezactivează OPTARG.  Dacă nu este găsit un argument\n"
+"    necesar, un „?” este plasat în NUME, OPTARG este dezactivată și este afișat un\n"
+"    mesaj de diagnosticare.\n"
+"    \n"
+"    Dacă variabila shell OPTERR are valoarea 0, «getopts» dezactivează afișarea\n"
+"    mesajelor de eroare, chiar dacă primul caracter al lui  ȘIR_OPȚIUNI nu este \n"
+"    două puncte „:”.  OPTERR are valoarea 1 implicit.\n"
+"    \n"
+"    «getopts» analizează în mod normal parametrii de poziție, dar dacă argumentele\n"
+"    sunt furnizate ca valori ARG, acestea sunt analizate în schimb.\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Returnează succes dacă este găsită o opțiune; eșuează dacă se întâlnește\n"
+"    sfârșitul opțiunilor sau apare o eroare."
+
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help exec», din «bash»;
+# «bash -c "help exec"», din «bash», sau
+# dintr-un shell, diferit de «bash».
 #: builtins.c:694
 msgid ""
 "Replace the shell with the given command.\n"
 "    \n"
 "    Execute COMMAND, replacing this shell with the specified program.\n"
-"    ARGUMENTS become the arguments to COMMAND.  If COMMAND is not "
-"specified,\n"
+"    ARGUMENTS become the arguments to COMMAND.  If COMMAND is not specified,\n"
 "    any redirections take effect in the current shell.\n"
 "    \n"
 "    Options:\n"
@@ -2989,15 +3609,36 @@ msgid ""
 "      -c\texecute COMMAND with an empty environment\n"
 "      -l\tplace a dash in the zeroth argument to COMMAND\n"
 "    \n"
-"    If the command cannot be executed, a non-interactive shell exits, "
-"unless\n"
+"    If the command cannot be executed, a non-interactive shell exits, unless\n"
 "    the shell option `execfail' is set.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success unless COMMAND is not found or a redirection error "
-"occurs."
+"    Returns success unless COMMAND is not found or a redirection error occurs."
 msgstr ""
+"Înlocuiește shell-ul cu comanda dată.\n"
+"    \n"
+"    Execută COMANDA, înlocuind acest shell cu programul specificat.\n"
+"    ARGUMENTELE devin argumente pentru COMANDA.  Dacă COMANDA nu este\n"
+"    specificată, orice redirecționare va avea efect în shell-ul curent.\n"
+"    \n"
+"    Opțiuni:\n"
+"      -a nume\tpasează NUME ca argument zero la COMANDA\n"
+"      -c\texecută COMANDA într-un mediu gol\n"
+"      -l\tplasează o liniuță în argumentul zero la COMANDA\n"
+"    \n"
+"    Dacă comanda nu poate fi executată, un shell non-interactiv se va închide, \n"
+"    cu excepția cazului în care opțiunea shell „execfail” este setată.\n"
+"    \n"
+"    Starea de ieșire\n"
+"    Returnează succes, cu excepția cazului în care COMANDA nu este găsită sau\n"
+"    apare o eroare de redirecționare."
 
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help exit», din «bash»;
+# «bash -c "help exit"», din «bash», sau
+# dintr-un shell, diferit de «bash».
 #: builtins.c:715
 msgid ""
 "Exit the shell.\n"
@@ -3005,33 +3646,46 @@ msgid ""
 "    Exits the shell with a status of N.  If N is omitted, the exit status\n"
 "    is that of the last command executed."
 msgstr ""
-"Ieste din shell.\n"
+"Iese din shell.\n"
 "    \n"
-"     Iese din shell cu starea lui N.  Dacă N este omis, starea de ieșire\n"
-"     este starea ultimei comenzi executate."
+"    Iese din shell cu starea lui N.  Dacă N este omis, starea de ieșire\n"
+"    este starea ultimei comenzi executate."
 
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help logout», din «bash»;
+# «bash -c "help logout"», din «bash», sau
+# dintr-un shell, diferit de «bash».
 #: builtins.c:724
 msgid ""
 "Exit a login shell.\n"
 "    \n"
-"    Exits a login shell with exit status N.  Returns an error if not "
-"executed\n"
+"    Exits a login shell with exit status N.  Returns an error if not executed\n"
 "    in a login shell."
 msgstr ""
+"Iese din shell-ul de autentificare.\n"
+"    \n"
+"    Iese din shell-ul de autentificare cu starea de ieșire N. Returnează o eroare\n"
+"    dacă nu este executată într-un shell de autentificare."
 
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help fc», din «bash»;
+# «bash -c "help fc"», din «bash», sau
+# dintr-un shell, diferit de «bash».
 #: builtins.c:734
 msgid ""
 "Display or execute commands from the history list.\n"
 "    \n"
-"    fc is used to list or edit and re-execute commands from the history "
-"list.\n"
+"    fc is used to list or edit and re-execute commands from the history list.\n"
 "    FIRST and LAST can be numbers specifying the range, or FIRST can be a\n"
 "    string, which means the most recent command beginning with that\n"
 "    string.\n"
 "    \n"
 "    Options:\n"
-"      -e ENAME\tselect which editor to use.  Default is FCEDIT, then "
-"EDITOR,\n"
+"      -e ENAME\tselect which editor to use.  Default is FCEDIT, then EDITOR,\n"
 "    \t\tthen vi\n"
 "      -l \tlist lines instead of editing\n"
 "      -n\tomit line numbers when listing\n"
@@ -3045,10 +3699,40 @@ msgid ""
 "    the last command.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success or status of executed command; non-zero if an error "
-"occurs."
-msgstr ""
-
+"    Returns success or status of executed command; non-zero if an error occurs."
+msgstr ""
+"Afișează sau execută comenzi din lista istoricului.\n"
+"    \n"
+"    «fc» se utilizează pentru a lista sau edita și re-executa comenzi din lista\n"
+"    istoricului.\n"
+"    PRIMA și ULTIMA pot fi numere care specifică intervalul sau PRIMA poate fi\n"
+"    un șir, ceea ce înseamnă cea mai recentă comandă care începe cu acel șir.\n"
+"    \n"
+"    Opțiuni:\n"
+"      -e NUME_EDIT\n"
+"    \t\tselectează ce editor să utilizat.  Implicit este FCEDIT, apoi \n"
+"    \t\tEDITOR, apoi vi\n"
+"      -l \tlistează linii în loc să editeze\n"
+"      -n\tomite numerele de rând la listare\n"
+"      -r\tinversează ordinea liniilor (cele mai noi sunt listate primele)\n"
+"    \n"
+"    Cu formatul «fc -s [tipar=înloc ...] [comanda]», COMANDA este re-executată\n"
+"    după ce este efectuată înlocuirea VECHE=NOUĂ.\n"
+"    \n"
+"    Un alias util de folosit cu aceasta, este «r='fc -s'», astfel încât tastând \n"
+"    «r cc» se execută ultima comandă ce începe cu „cc” și tastând «r» se execută\n"
+"    din nou ultima comandă folosită.\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Returnează succesul sau starea comenzii executate; diferit de zero dacă\n"
+"    apare o eroare."
+
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help fg», din «bash»;
+# «bash -c "help fg"», din «bash», sau
+# dintr-un shell, diferit de «bash».
 #: builtins.c:764
 msgid ""
 "Move job to the foreground.\n"
@@ -3060,28 +3744,54 @@ msgid ""
 "    Exit Status:\n"
 "    Status of command placed in foreground, or failure if an error occurs."
 msgstr ""
+"Mută procesul în primul plan.\n"
+"    \n"
+"    Plasează procesul identificat de ID_PROC în primul plan, făcându-l procesul\n"
+"    curent.  Dacă ID_PROC nu este prezent, este utilizată noțiunea shell-ului\n"
+"    despre procesul curent\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Starea comenzii plasată în prim-plan sau eșec dacă apare o eroare."
 
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help bg», din «bash»;
+# «bash -c "help bg"», din «bash», sau
+# dintr-un shell, diferit de «bash».
 #: builtins.c:779
 msgid ""
 "Move jobs to the background.\n"
 "    \n"
-"    Place the jobs identified by each JOB_SPEC in the background, as if "
-"they\n"
-"    had been started with `&'.  If JOB_SPEC is not present, the shell's "
-"notion\n"
+"    Place the jobs identified by each JOB_SPEC in the background, as if they\n"
+"    had been started with `&'.  If JOB_SPEC is not present, the shell's notion\n"
 "    of the current job is used.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns success unless job control is not enabled or an error occurs."
 msgstr ""
+"Mută procesul în fundal.\n"
+"    \n"
+"    Plasează procesele identificate de fiecare ID_PROC în fundal, ca și cum ar fi\n"
+"    fost pornite cu „&”.  Dacă ID_PROC nu este prezent, se folosește noțiunea\n"
+"    shell-ului despre procesul curent.\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Returnează succes, cu excepția cazului în care controlul procesului nu este\n"
+"    activat sau apare o eroare."
 
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help hash», din «bash»;
+# «bash -c "help hash"», din «bash», sau
+# dintr-un shell, diferit de «bash».
 #: builtins.c:793
 msgid ""
 "Remember or display program locations.\n"
 "    \n"
 "    Determine and remember the full pathname of each command NAME.  If\n"
-"    no arguments are given, information about remembered commands is "
-"displayed.\n"
+"    no arguments are given, information about remembered commands is displayed.\n"
 "    \n"
 "    Options:\n"
 "      -d\tforget the remembered location of each NAME\n"
@@ -3098,7 +3808,33 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless NAME is not found or an invalid option is given."
 msgstr ""
-
+"Memorizează sau afișează locațiile programelor.\n"
+"    \n"
+"    Determină și memorizează calea completă a fiecărei comenzi NUME.  Dacă nu\n"
+"    sunt date argumente, sunt afișate informații despre comenzile memorate.\n"
+"    \n"
+"    Opțiuni:\n"
+"      -d\tuită locația reținută pentru fiecare NUME\n"
+"      -l\tafișează într-un format care poate fi reutilizat ca intrare\n"
+"      -p calenume\n"
+"        \tutilizează CALENUME drept calea completă a NUME\n"
+"      -r\tuită toate locațiile memorizate\n"
+"      -t\tafișează locația reținută a fiecărui NUME, precedând fiecare\n"
+"    \t\tlocație cu NUMELE corespunzător dacă sunt date mai multe NUME\n"
+"    Argumente:\n"
+"      NUME\tFiecare NUME este căutat în $PATH și adăugat la lista comenzilor\n"
+"    \t\tmemorate.\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Returnează succes, cu excepția cazului în care NUME nu este găsit sau\n"
+"    este dată o opțiune nevalidă."
+
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help help», din «bash»;
+# «bash -c "help help"», din «bash», sau
+# dintr-un shell, diferit de «bash».
 #: builtins.c:818
 msgid ""
 "Display information about builtin commands.\n"
@@ -3117,10 +3853,33 @@ msgid ""
 "      PATTERN\tPattern specifying a help topic\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success unless PATTERN is not found or an invalid option is "
-"given."
+"    Returns success unless PATTERN is not found or an invalid option is given."
 msgstr ""
+"Afișează informații despre comenzile interne.\n"
+"    \n"
+"    Afișează scurte rezumate ale comenzilor interne.  Dacă TIPAR, este\n"
+"    specificat, oferă ajutor detaliat pentru toate comenzile care se potrivesc\n"
+"    cu TIPARul, în caz contrar, este afișată lista temelor de ajutor.\n"
+"    \n"
+"    Opțiuni:\n"
+"      -d\tafișează o scurtă descriere pentru fiecare temă\n"
+"      -m\tafișează utilizarea în format pseudo-pagină de manual\n"
+"      -s\tafișează doar un scurt rezumat de utilizare pentru\n"
+"    \t\tfiecare temă care se potrivește cu TIPAR\n"
+"    \n"
+"    Argumente:\n"
+"      TIPAR  \tTIPAR care specifică o temă de ajutor\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Returnează succes, cu excepția cazului în care TIPAR nu este găsit sau este\n"
+"    dată o opțiune nevalidă."
 
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help history», din «bash»;
+# «bash -c "help history"», din «bash», sau
+# dintr-un shell, diferit de «bash».
 #: builtins.c:842
 msgid ""
 "Display or manipulate the history list.\n"
@@ -3149,13 +3908,52 @@ msgid ""
 "    \n"
 "    If the HISTTIMEFORMAT variable is set and not null, its value is used\n"
 "    as a format string for strftime(3) to print the time stamp associated\n"
-"    with each displayed history entry.  No time stamps are printed "
-"otherwise.\n"
+"    with each displayed history entry.  No time stamps are printed otherwise.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns success unless an invalid option is given or an error occurs."
 msgstr ""
-
+"Afișează sau manipulează lista istoricului.\n"
+"    \n"
+"    Afișează lista istoricului cu numere de linie, prefixând fiecare intrare\n"
+"    modificată cu un „*”.  Un argument de N, listează numai ultimele N intrări.\n"
+"    \n"
+"    Opțiuni:\n"
+"      -c\tșterge lista istoricului ștergând toate intrările\n"
+"      -d poziție\n"
+"    \t\tșterge intrarea din istoric de la poziția POZIȚIE.  Pozițiile\n"
+"    \t\tnegative se numără înapoi de la sfârșitul listei istoricului\n"
+"    \n"
+"      -a\tadaugă linii istorice din această sesiune la fișierul istoricului\n"
+"      -n\tcitește toate liniile istorice care nu sunt deja citite din\n"
+"    \t\tfișierul istoricului și le adaugă la lista istoricului\n"
+"      -r\tcitește fișierul istoricului și îi adaugă conținutul la lista\n"
+"    \t\tistoricului\n"
+"      -w\tscrie istoricul curent în fișierul istoricului\n"
+"    \n"
+"      -p\tefectuează extinderea istoricului pentru fiecare ARG și afișează\n"
+"    \t\trezultatul fără a-l stoca în lista istoricului\n"
+"      -s\tadaugă ARGumentele la lista istoricului ca o singură intrare\n"
+"    \n"
+"    Dacă NUME_FIȘIER este dat, acesta este utilizat ca fișierul istoricului.\n"
+"    Altfel, dacă HISTFILE are o valoare, aceasta este folosită, dacă nu are,\n"
+"    se folosește ~/.bash_history.\n"
+"    \n"
+"    Dacă variabila HISTTIMEFORMAT este definită și nu este nulă, valoarea ei este\n"
+"    utilizată ca șir de format pentru strftime(3) pentru a imprima marcajul de\n"
+"    timp asociat cu fiecare intrare din istoric afișată.  În caz contrar, nu se\n"
+"    imprimă marcajele de timp.\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Returnează succes, cu excepția cazului în care este dată o opțiune nevalidă\n"
+"    sau apare o eroare."
+
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help jobs», din «bash»;
+# «bash -c "help jobs"», din «bash», sau
+# dintr-un shell, diferit de «bash».
 #: builtins.c:879
 msgid ""
 "Display status of jobs.\n"
@@ -3179,7 +3977,33 @@ msgid ""
 "    Returns success unless an invalid option is given or an error occurs.\n"
 "    If -x is used, returns the exit status of COMMAND."
 msgstr ""
-
+"Afișează starea proceselor.\n"
+"    \n"
+"    Listează procesele active.  ID_PROC, restrânge afișarea la acel proces.\n"
+"    Fără opțiuni, se afișează starea tuturor proceselor active.\n"
+"    \n"
+"    Opțiuni:\n"
+"      -l\tlistează ID-urile proceselor, pe lângă informațiile normale\n"
+"      -n\tlistează numai procesele care s-au schimbat de la ultima notificare\n"
+"      -p\tlistează numai ID-urile proceselor\n"
+"      -r\trestrânge afișarea, la procesele în execuție\n"
+"      -s\trestrânge afișarea, la procesele oprite\n"
+"    \n"
+"    Dacă este furnizată -x, COMANDA este rulată după ce toate specificațiile\n"
+"    procesului care apar în ARGumente au fost înlocuite cu ID-ul de proces al\n"
+"    liderului grupului de procese, al procesului respectiv.\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Returnează succes, cu excepția cazului în care este dată o opțiune nevalidă\n"
+"    sau apare o eroare.\n"
+"    Dacă se utilizează „-x”, returnează starea de ieșire a COMENZII."
+
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help disown», din «bash»;
+# «bash -c "help disown"», din «bash», sau
+# dintr-un shell, diferit de «bash».
 #: builtins.c:906
 msgid ""
 "Remove jobs from current shell.\n"
@@ -3196,7 +4020,27 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless an invalid option or JOBSPEC is given."
 msgstr ""
+"Elimină procese din shell-ul actual.\n"
+"    \n"
+"    Elimină fiecare argument ID_PROC din tabelul de procese active.  Fără\n"
+"    niciun ID_PROC, shell-ul folosește noțiunea sa de proces curent.\n"
+"    \n"
+"    Opțiuni:\n"
+"      -a\telimină toate procesele dacă ID_PROC nu este furnizat\n"
+"      -h\tmarchează fiecare ID_PROC astfel încât SIGHUP să nu fie trimis\n"
+"    \t\tla proces dacă shell-ul primește un semnal SIGHUP\n"
+"      -r\telimină numai procesele care rulează\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Returnează succes, cu excepția cazului în care este dată o opțiune nevalidă\n"
+"    sau ID_PROC."
 
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help kill», din «bash»;
+# «bash -c "help kill"», din «bash», sau
+# dintr-un shell, diferit de «bash».
 #: builtins.c:925
 msgid ""
 "Send a signal to a job.\n"
@@ -3219,7 +4063,34 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless an invalid option is given or an error occurs."
 msgstr ""
-
+"Trimite un semnal către un proces.\n"
+"    \n"
+"    Trimite proceselor identificate prin PID sau JOBSPEC semnalul numit de\n"
+"    SIGSPEC sau de SIGNUM.  Dacă nici SIGSPEC, nici SIGNUM nu sunt\n"
+"    prezente, atunci se presupune SIGTERM.\n"
+"    \n"
+"    Opțiuni:\n"
+"      -s sig\tSIG este un nume de semnal\n"
+"      -n sig\tSIG este un număr de semnal\n"
+"      -l\tlistează numele semnalelor; dacă după „-l” urmează argumente, se\n"
+"    \t\tpresupune că sunt numere de semnal pentru care ar trebui listate\n"
+"    \t\tnume\n"
+"      -L\tsinonim cu -l\n"
+"    \n"
+"    Kill este o comandă internă de shell din două motive: permite utilizarea\n"
+"    ID-urilor de job în locul ID-urilor de proces și permite omorârea proceselor\n"
+"    dacă este atinsă limita de procese pe care le puteți crea.\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Returnează succes, cu excepția cazului în care este dată o opțiune nevalidă\n"
+"    sau apare o eroare."
+
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help let», din «bash»;
+# «bash -c "help let"», din «bash», sau
+# dintr-un shell, diferit de «bash».
 #: builtins.c:949
 msgid ""
 "Evaluate arithmetic expressions.\n"
@@ -3227,8 +4098,7 @@ msgid ""
 "    Evaluate each ARG as an arithmetic expression.  Evaluation is done in\n"
 "    fixed-width integers with no check for overflow, though division by 0\n"
 "    is trapped and flagged as an error.  The following list of operators is\n"
-"    grouped into levels of equal-precedence operators.  The levels are "
-"listed\n"
+"    grouped into levels of equal-precedence operators.  The levels are listed\n"
 "    in order of decreasing precedence.\n"
 "    \n"
 "    \tid++, id--\tvariable post-increment, post-decrement\n"
@@ -3264,22 +4134,67 @@ msgid ""
 "    Exit Status:\n"
 "    If the last ARG evaluates to 0, let returns 1; let returns 0 otherwise."
 msgstr ""
-
+"Evaluează expresii aritmetice.\n"
+"    \n"
+"    Evaluează fiecare ARGument ca o expresie aritmetică.  Evaluarea se face\n"
+"    în numere întregi cu lățime fixă, fără verificarea depășirii, dar împărțirea\n"
+"    la 0 este detectată și semnalată ca o eroare.  Următoarea listă de operatori\n"
+"    este grupată în grupuri de operatori cu prioritate egală.  Nivelurile sunt\n"
+"    listate în ordinea descrescătoare a priorității.\n"
+"    \n"
+"    \tid++, id--\tpost-incrementare, post-decrementare a variabilei\n"
+"    \t++id, --id\tpre-incrementare, pre-decrementare a variabilei\n"
+"    \t-, +\t\tminus unar, plus unar\n"
+"    \t!, ~\t\tnegații logice și binare\n"
+"    \t**\t\texponențial\n"
+"    \t*, /, %\t\tînmulțire, împărțire, rest\n"
+"    \t+, -\t\tadunare, scădere\n"
+"    \t<<, >>\t\tdeplasare binară la stânga și la dreapta\n"
+"    \t<=, >=, <, >\tcomparare\n"
+"    \t==, !=\t\tegalitate, inegalitate\n"
+"    \t&\t\tși (AND) binar\n"
+"    \t^\t\tsau exclusiv (XOR) binar\n"
+"    \t|\t\tsau (OR) binar\n"
+"    \t&&\t\tlși (AND) logic\n"
+"    \t||\t\tsau (OR) logic\n"
+"    \texpr ? expr : expr\n"
+"    \t\t\toperator condițional\n"
+"    \t=, *=, /=, %=,\n"
+"    \t+=, -=, <<=, >>=,\n"
+"    \t&=, ^=, |=\tasignare\n"
+"    \n"
+"    Variabilele shell sunt permise ca operanzi.  Numele variabilei este\n"
+"    înlocuit cu valoarea acesteia (constrânsă la un număr întreg cu \n"
+"    lățime fixă) în cadrul unei expresii.  Nu este necesar ca variabila să\n"
+"    aibă atributul întreg activat pentru a fi utilizată într-o expresie.\n"
+"    \n"
+"    Operatorii sunt evaluați în ordinea de prioritate.  Subexpresiile din\n"
+"    paranteze sunt evaluate mai întâi și pot suprascrie regulile de\n"
+"    precedență de mai sus.\n"
+"    \n"
+"   Starea de ieșire:\n"
+"   Dacă ultimul ARGument este evaluat la 0, «let» returnează 1; în caz contrar,\n"
+"   «let» returnează 0."
+
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help read», din «bash»;
+# «bash -c "help read"», din «bash», sau
+# dintr-un shell, diferit de «bash».
 #: builtins.c:994
 msgid ""
 "Read a line from the standard input and split it into fields.\n"
 "    \n"
 "    Reads a single line from the standard input, or from file descriptor FD\n"
-"    if the -u option is supplied.  The line is split into fields as with "
-"word\n"
+"    if the -u option is supplied.  The line is split into fields as with word\n"
 "    splitting, and the first word is assigned to the first NAME, the second\n"
 "    word to the second NAME, and so on, with any leftover words assigned to\n"
-"    the last NAME.  Only the characters found in $IFS are recognized as "
-"word\n"
-"    delimiters.\n"
+"    the last NAME.  Only the characters found in $IFS are recognized as word\n"
+"    delimiters. By default, the backslash character escapes delimiter characters\n"
+"    and newline.\n"
 "    \n"
-"    If no NAMEs are supplied, the line read is stored in the REPLY "
-"variable.\n"
+"    If no NAMEs are supplied, the line read is stored in the REPLY variable.\n"
 "    \n"
 "    Options:\n"
 "      -a array\tassign the words read to sequential indices of the array\n"
@@ -3291,8 +4206,7 @@ msgid ""
 "      -n nchars\treturn after reading NCHARS characters rather than waiting\n"
 "    \t\tfor a newline, but honor a delimiter if fewer than\n"
 "    \t\tNCHARS characters are read before the delimiter\n"
-"      -N nchars\treturn only after reading exactly NCHARS characters, "
-"unless\n"
+"      -N nchars\treturn only after reading exactly NCHARS characters, unless\n"
 "    \t\tEOF is encountered or read times out, ignoring any\n"
 "    \t\tdelimiter\n"
 "      -p prompt\toutput the string PROMPT without a trailing newline before\n"
@@ -3310,14 +4224,64 @@ msgid ""
 "      -u fd\tread from file descriptor FD instead of the standard input\n"
 "    \n"
 "    Exit Status:\n"
-"    The return code is zero, unless end-of-file is encountered, read times "
-"out\n"
-"    (in which case it's greater than 128), a variable assignment error "
-"occurs,\n"
+"    The return code is zero, unless end-of-file is encountered, read times out\n"
+"    (in which case it's greater than 128), a variable assignment error occurs,\n"
 "    or an invalid file descriptor is supplied as the argument to -u."
 msgstr ""
-
-#: builtins.c:1041
+"Citește o linie din intrarea standard și o împarte în câmpuri.\n"
+"    \n"
+"    Citește o singură linie din intrarea standard sau din descriptorul de fișier\n"
+"    FD dacă este furnizată opțiunea -u.  Linia este împărțită în câmpuri ca în\n"
+"    cazul împărțirii cuvintelor, iar primul cuvânt este atribuit primului NUME, \n"
+"    al doilea cuvânt celui de-al doilea NUME și așa mai departe, ultimul NUME\n"
+"    preluând lista cuvintelor rămase.  Doar caracterele găsite în $IFS sunt\n"
+"    recunoscute ca delimitatori de cuvinte. În mod implicit, caracterul bară oblică\n"
+"    inversă eludează caracterele delimitatoare și linia nouă.\n"
+"    \n"
+"    Dacă nu sunt furnizate NUME, linia citită este stocată în variabila REPLY.\n"
+"    \n"
+"    Opțiuni:\n"
+"      -a matrice\n"
+"    \t\tatribuie cuvintele citite indicilor secvențiali ai variabilei\n"
+"    \t\tmatrice MATRICE, începând de la zero\n"
+"      -d delim\tcontinuă până când este citit primul caracter din DELIM, în loc\n"
+"    \t\tde linia nouă\n"
+"      -e\tutilizează Readline pentru a obține linia\n"
+"      -i text\tutilizează TEXT ca text inițial pentru Readline\n"
+"      -n ncarac\treturnează după citirea a NCARAC caractere în loc să aștepte\n"
+"    \t\to nouă linie, dar respectă delimitatorul dacă sunt citite mai\n"
+"    \t\tpuțin de NCARAC caractere înainte de delimitator\n"
+"      -N ncarac\treturnează numai după citirea exactă a NCARAC caractere, cu\n"
+"    \t\texcepția cazului în care se întâlnește sfârșitul fișierului sau \n"
+"    \t\tdacă timpul de citire expiră, eliminând orice delimitatori\n"
+"      -p prompt\tafișează șirul PROMPT fără un caracter de linie nouă la final,\n"
+"    \t\tînainte de a încerca să citească\n"
+"      -r\tnu permite barelor oblice inverse să eludeze niciun caracter\n"
+"      -s\tnu afișează ieșirea ce vine de la un terminal\n"
+"      -t timeout\n"
+"    \t\texpiră și returnează un cod de eroare dacă o linie completă de\n"
+"    \t\tintrare nu este citită în TIMEOUT secunde.  Valoarea variabilei\n"
+"    \t\tTIMEOUT este timpul de expirare implicit.  TIMEOUT poate fi un\n"
+"    \t\tnumăr fracțional.  Dacă TIMEOUT este zero, citirea se termină\n"
+"    \t\timediat fără a încerca să citească date, și returnează un cod de\n"
+"    \t\tsucces numai dacă intrarea este disponibilă pe descriptorul de\n"
+"    \t\tfișier specificat.  Starea de ieșire este mai mare de 128 dacă\n"
+"    \t\ttimpul de expirare este depășit\n"
+"      -u fd\tcitește din descriptorul de fișier FD în loc de intrarea standard\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Codul de returnare este zero, cu excepția cazului în care se întâlnește\n"
+"    sfârșitul fișierului, expirarea timpului de citire (caz în care este mai mare\n"
+"    de 128), apare o eroare de atribuire a variabilei sau este furnizat un\n"
+"    descriptor de fișier nevalid ca argument pentru opțiunea „-u”."
+
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help return», din «bash»;
+# «bash -c "help return"», din «bash», sau
+# dintr-un shell, diferit de «bash».
+#: builtins.c:1042
 msgid ""
 "Return from a shell function.\n"
 "    \n"
@@ -3328,8 +4292,29 @@ msgid ""
 "    Exit Status:\n"
 "    Returns N, or failure if the shell is not executing a function or script."
 msgstr ""
-
-#: builtins.c:1054
+"Returnează dintr-o funcție shell.\n"
+"    \n"
+"    Determină ieșirea unei funcții sau a unui script sursă cu valoarea de\n"
+"    returnare specificată de N.  Dacă N este omis, starea de returnare\n"
+"    este cea a ultimei comenzi executate în funcție sau script.\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Returnează N sau eșec dacă shell-ul nu execută o funcție sau un script."
+
+# R-GC, scrie:
+# unele dintre definițiile acestui(lung) mesaj,
+# sunt adaptări ale muncii altor echipe din TP.
+# ***
+# Mulțumesc, tuturor acestor echipe: es, fr, pt_BR, pt, it, nl, pl, uk; sper să nu fi uitat
+# niciuna dintre cele ce mi-au folosit ca
+# inspirație, în traducerea acestui mesaj.
+# =================================
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help set», din «bash»;
+# «bash -c "help set"», din «bash», sau dintr-un
+# shell, diferit de «bash».
+#: builtins.c:1055
 msgid ""
 "Set or unset values of shell options and positional parameters.\n"
 "    \n"
@@ -3372,8 +4357,7 @@ msgid ""
 "              physical     same as -P\n"
 "              pipefail     the return value of a pipeline is the status of\n"
 "                           the last command to exit with a non-zero status,\n"
-"                           or zero if no command exited with a non-zero "
-"status\n"
+"                           or zero if no command exited with a non-zero status\n"
 "              posix        change the behavior of bash where the default\n"
 "                           operation differs from the Posix standard to\n"
 "                           match the standard\n"
@@ -3397,8 +4381,7 @@ msgid ""
 "          by default when the shell is interactive.\n"
 "      -P  If set, do not resolve symbolic links when executing commands\n"
 "          such as cd which change the current directory.\n"
-"      -T  If set, the DEBUG and RETURN traps are inherited by shell "
-"functions.\n"
+"      -T  If set, the DEBUG and RETURN traps are inherited by shell functions.\n"
 "      --  Assign any remaining arguments to the positional parameters.\n"
 "          If there are no remaining arguments, the positional parameters\n"
 "          are unset.\n"
@@ -3414,8 +4397,100 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless an invalid option is given."
 msgstr ""
-
-#: builtins.c:1139
+"Stabilește sau anulează valorile opțiunilor de shell și ale parametrilor\n"
+"poziționali.\n"
+"    \n"
+"    Modifică valoarea atributelor shell și a parametrilor poziționali sau \n"
+"    afișează numele și valorile variabilelor shell.\n"
+"    \n"
+"    Opțiuni:\n"
+"      -a  Marchează variabilele care sunt modificate sau create, pentru export.\n"
+"      -b  Notifică imediat când o sarcină este finalizată.\n"
+"      -e  Termină imediat dacă o comandă termină cu o stare diferită de zero.\n"
+"      -f  Dezactivează folosirea metacaracterelor pentru completarea numelor\n"
+"          fișierelor (fără „globbing”).\n"
+"      -h  Memorizează locația comenzilor pe măsură ce sunt căutate.\n"
+"      -k  Toate argumentele de atribuire sunt plasate în mediul(environment)\n"
+"          unei comenzi, nu doar cele care preced numele comenzii.\n"
+"      -m  Activează controlul sarcinii.\n"
+"      -n  Citește comenzile, dar nu le execută.\n"
+"      -o  nume-opțiune\n"
+"          Stabilește variabila corespunzătoare → nume-opțiune:\n"
+"              allexport    la fel ca -a\n"
+"              braceexpand  la fel ca -B\n"
+"              emacs        utilizează o interfață de editare a liniilor în\n"
+"                           stilul «emacs»\n"
+"              errexit      la fel ca -e\n"
+"              errtrace     la fel ca -E\n"
+"              functrace    la fel ca -T\n"
+"              hashall      la fel ca -h\n"
+"              histexpand   la fel ca -H\n"
+"              history      activează istoricul comenzilor\n"
+"              ignoreeof    shell-ul nu va termina după citirea „EOF”\n"
+"              interactive-comments\n"
+"                           permite comentariilor să apară în comenzile interactive\n"
+"              keyword      la fel ca -k\n"
+"              monitor      la fel ca -m\n"
+"              noclobber    la fel ca -C\n"
+"              noexec       la fel ca -n\n"
+"              noglob       la fel ca -f\n"
+"              nolog        acceptat în prezent, dar ignorat\n"
+"              notify       la fel ca -b\n"
+"              nounset      la fel ca -u\n"
+"              onecmd       la fel ca -t\n"
+"              physical     la fel ca -P\n"
+"              pipefail     valoarea returnată a unei linii de conectare este\n"
+"                           starea ultimei comenzi care a ieșit cu o stare diferită\n"
+"                           de zero sau zero dacă nicio comandă nu a ieșit cu o\n"
+"                           stare diferită de zero\n"
+"              posix        modifică comportamentul lui «bash» în cazul în care\n"
+"                           operația implicită diferă de standardul Posix, pentru\n"
+"                           a se potrivi cu standardul Posix\n"
+"              privileged   la fel ca -p\n"
+"              verbose      la fel ca -v\n"
+"              vi           utilizează o interfață de editare a liniilor în\n"
+"                           stilul «vi»\n"
+"              xtrace       la fel ca -x\n"
+"      -p  Modul cu privilegii: Activat ori de câte ori ID-urile de utilizator\n"
+"          reale și efective nu se potrivesc.  Dezactivează procesarea \n"
+"          fișierului $ENV și importul funcțiilor shell. Dezactivarea acestei\n"
+"          opțiuni face ca uid-ul și gid-ul efectiv să fie stabilite la uid-ul și\n"
+"          gid-ul real\n"
+"      -t  Termină după citirea și executarea unei comenzi.\n"
+"      -u  Tratează variabilele nedefinite ca pe o eroare la substituire.\n"
+"      -v  Afișează liniile de intrare ale shell-ului pe măsură ce sunt citite.\n"
+"      -x  Afișează comenzile și argumentele lor pe măsură ce sunt executate.\n"
+"      -B  Shell-ul va efectua înlocuirea acoladelor (de exp.: a{b,c} → ab ac)\n"
+"      -C  Dacă este specificată, nu permite ca fișierele obișnuite existente să\n"
+"          fie suprascrise prin redirecționarea ieșirii.\n"
+"      -E  Dacă este specificată, capturarea ERR este moștenită de funcțiile shell.\n"
+"      -H  Permite înlocuirea istoricului cu un „!”.  Această opțiune este activată\n"
+"          în mod implicit atunci când shell-ul este interactiv.\n"
+"      -P  Dacă este specificată, legăturile simbolice nu sunt urmate la executarea\n"
+"          comenzilor precum «cd» care schimbă directorul curent.\n"
+"      -T  Dacă este specificată, capturile DEBUG și RETURN sunt moștenite de\n"
+"          funcțiile shell.\n"
+"      --  Atribuie toate argumentele rămase parametrilor de poziție.\n"
+"          Dacă nu există argumente rămase, parametrii de poziție sunt eliminați.\n"
+"      -   Atribuie toate argumentele rămase parametrilor de poziție.\n"
+"          Opțiunile -x și -v sunt dezactivate.\n"
+"    \n"
+"    Utilizarea lui „+” în loc de „-”, face ca aceste opțiuni să fie dezactivate.\n"
+"    Opțiunile pot fi folosite și la invocarea shell-ului.  Setul actual de \n"
+"    opțiuni poate fi găsit în $-.  Restul de n ARG sunt parametri poziționali și\n"
+"    sunt alocați, în ordine, la $1, $2, .. $n.  Dacă nu sunt date ARG, toate \n"
+"    variabilele shell sunt afișate.\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Returnează succes cu excepția cazului în care este dată o opțiune nevalidă."
+
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help unset», din «bash»;
+# «bash -c "help unset"», din «bash», sau
+# dintr-un shell, diferit de «bash».
+#: builtins.c:1140
 msgid ""
 "Unset values and attributes of shell variables and functions.\n"
 "    \n"
@@ -3427,8 +4502,7 @@ msgid ""
 "      -n\ttreat each NAME as a name reference and unset the variable itself\n"
 "    \t\trather than the variable it references\n"
 "    \n"
-"    Without options, unset first tries to unset a variable, and if that "
-"fails,\n"
+"    Without options, unset first tries to unset a variable, and if that fails,\n"
 "    tries to unset a function.\n"
 "    \n"
 "    Some variables cannot be unset; also see `readonly'.\n"
@@ -3436,14 +4510,37 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless an invalid option is given or a NAME is read-only."
 msgstr ""
+"Anulează valorile și atributele variabilelor și funcțiilor shell.\n"
+"    \n"
+"    Pentru fiecare NUME, elimină variabila sau funcția corespunzătoare.\n"
+"    \n"
+"    Opțiuni:\n"
+"      -f\ttratează fiecare NUME ca pe o funcție shell\n"
+"      -v\ttratează fiecare NUME ca pe o variabilă shell\n"
+"      -n\ttratează fiecare NUME ca referință de nume și anulează variabila\n"
+"    \t\tîn sine, în loc de variabila la care face referire\n"
+"    \n"
+"    Fără opțiuni, „unset” încearcă mai întâi să anuleze o variabilă și, dacă\n"
+"    aceasta nu reușește, încearcă să anuleze o funcție.\n"
+"    \n"
+"    Unele variabile nu pot fi anulate; consultați, de asemenea, «readonly».\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Returnează succes, cu excepția cazului în care este dată o opțiune nevalidă\n"
+"    sau un NUME este doar pentru citire."
 
-#: builtins.c:1161
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help export», din «bash»;
+# «bash -c "help export"», din «bash», sau
+# dintr-un shell, diferit de «bash».
+#: builtins.c:1162
 msgid ""
 "Set export attribute for shell variables.\n"
 "    \n"
 "    Marks each NAME for automatic export to the environment of subsequently\n"
-"    executed commands.  If VALUE is supplied, assign VALUE before "
-"exporting.\n"
+"    executed commands.  If VALUE is supplied, assign VALUE before exporting.\n"
 "    \n"
 "    Options:\n"
 "      -f\trefer to shell functions\n"
@@ -3455,8 +4552,30 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless an invalid option is given or NAME is invalid."
 msgstr ""
+"Stabilește atributul de export pentru variabilele shell.\n"
+"    \n"
+"    Marchează fiecare NUME pentru export automat în mediul(environment)\n"
+"    comenzilor executate ulterior.  Dacă este furnizată VALOAREa, atribuie\n"
+"    VALOAREa înainte de a exporta.\n"
+"    \n"
+"    Opțiuni:\n"
+"      -f\tse referă la funcțiile shell\n"
+"      -n\telimină proprietatea de export din fiecare NUME\n"
+"      -p\tafișează o listă cu toate variabilele și funcțiile exportate\n"
+"    \n"
+"    Un argument de „--” dezactivează procesarea ulterioară a opțiunilor.\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Returnează succes, cu excepția cazului în care este dată o opțiune nevalidă\n"
+"    sau NUME nu este valid."
 
-#: builtins.c:1180
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help readonly», din «bash»;
+# «bash -c "help readonly"», din «bash», sau
+# dintr-un shell, diferit de «bash».
+#: builtins.c:1181
 msgid ""
 "Mark shell variables as unchangeable.\n"
 "    \n"
@@ -3476,8 +4595,32 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless an invalid option is given or NAME is invalid."
 msgstr ""
+"Marchează variabilele shell ca neschimbabile.\n"
+"    \n"
+"    Marchează fiecare NUME ca fiind doar pentru citire; valorile acestor NUME\n"
+"    nu pot fi modificate prin atribuirea ulterioară. Dacă este furnizată VALOARE,\n"
+"    atribuie VALOARE înainte de a marca ca doar pentru citire.\n"
+"    \n"
+"    Opțiuni:\n"
+"      -a\tse referă la variabilele matrice indexate\n"
+"      -A\tse referă la variabile matrice asociative\n"
+"      -f\tse referă la funcțiile shell\n"
+"      -p\tafișează o listă cu toate variabilele sau funcțiile protejate\n"
+"    \t\tla scriere, în funcție de dacă este dată sau nu opțiunea „-f”\n"
+"    \n"
+"    Un argument de „--” dezactivează procesarea ulterioară a opțiunilor.\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Returnează succes, cu excepția cazului în care este dată o opțiune nevalidă\n"
+"    sau NUME nu este valid."
 
-#: builtins.c:1202
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help shift», din «bash»;
+# «bash -c "help shift"», din «bash», sau
+# dintr-un shell, diferit de «bash».
+#: builtins.c:1203
 msgid ""
 "Shift positional parameters.\n"
 "    \n"
@@ -3487,8 +4630,22 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless N is negative or greater than $#."
 msgstr ""
+"Schimbă parametrii poziționali.\n"
+"    \n"
+"    Redenumește parametrii de poziție $N+1,$N+2 ... la $1,$2 ...  Dacă N\n"
+"    nu este dat, se presupune că este 1.\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Returnează succes, cu excepția cazului în care N este negativ sau mai\n"
+"    mare decât $#."
 
-#: builtins.c:1214 builtins.c:1229
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help source», din «bash»;
+# «bash -c "help source"», din «bash», sau
+# dintr-un shell, diferit de «bash».
+#: builtins.c:1215 builtins.c:1230
 msgid ""
 "Execute commands from a file in the current shell.\n"
 "    \n"
@@ -3501,8 +4658,24 @@ msgid ""
 "    Returns the status of the last command executed in FILENAME; fails if\n"
 "    FILENAME cannot be read."
 msgstr ""
+"Execută comenzi dintr-un fișier în shell-ul curent.\n"
+"    \n"
+"    Citește și execută comenzi din NUME_FIȘIER în shell-ul curent.  Intrările \n"
+"    din $PATH sunt utilizate pentru a găsi directorul care conține NUME_FIȘIER.\n"
+"    Dacă sunt furnizate ARGUMENTE, acestea devin parametrii de poziție atunci\n"
+"    când este executat NUME_FIȘIER.\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Returnează starea ultimei comenzi executate în NUME_FIȘIER; eșuează dacă\n"
+"    NUME_FIȘIER nu poate fi citit."
 
-#: builtins.c:1245
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help suspend», din «bash»;
+# «bash -c "help suspend"», din «bash», sau
+# dintr-un shell, diferit de «bash».
+#: builtins.c:1246
 msgid ""
 "Suspend shell execution.\n"
 "    \n"
@@ -3515,8 +4688,27 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless job control is not enabled or an error occurs."
 msgstr ""
+"Suspendă execuția shell-ului.\n"
+"    \n"
+"    Suspendă execuția acestui shell până când primește un semnal SIGCONT.\n"
+"    Cu excepția cazului în care sunt forțate, shell-urile de autentificare nu pot \n"
+"    fi suspendate.\n"
+"    \n"
+"    Opțiuni:\n"
+"      -f\tforțează suspendarea, chiar dacă shell-ul este un shell de\n"
+"        \tautentificare\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Returnează succes, cu excepția cazului în care controlul sarcinii nu este\n"
+"    activat sau apare o eroare."
 
-#: builtins.c:1261
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help test», din «bash»;
+# «bash -c "help test"», din «bash», sau
+# dintr-un shell, diferit de «bash».
+#: builtins.c:1262
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -3550,8 +4742,7 @@ msgid ""
 "      -x FILE        True if the file is executable by you.\n"
 "      -O FILE        True if the file is effectively owned by you.\n"
 "      -G FILE        True if the file is effectively owned by your group.\n"
-"      -N FILE        True if the file has been modified since it was last "
-"read.\n"
+"      -N FILE        True if the file has been modified since it was last read.\n"
 "    \n"
 "      FILE1 -nt FILE2  True if file1 is newer than file2 (according to\n"
 "                       modification date).\n"
@@ -3572,8 +4763,7 @@ msgid ""
 "      STRING1 != STRING2\n"
 "                     True if the strings are not equal.\n"
 "      STRING1 < STRING2\n"
-"                     True if STRING1 sorts before STRING2 "
-"lexicographically.\n"
+"                     True if STRING1 sorts before STRING2 lexicographically.\n"
 "      STRING1 > STRING2\n"
 "                     True if STRING1 sorts after STRING2 lexicographically.\n"
 "    \n"
@@ -3598,33 +4788,131 @@ msgid ""
 "    Returns success if EXPR evaluates to true; fails if EXPR evaluates to\n"
 "    false or an invalid argument is given."
 msgstr ""
-
-#: builtins.c:1343
+"Evaluează expresia condițională.\n"
+"    \n"
+"    Termină cu starea 0 (adevărat) sau 1 (fals) în funcție de evaluarea EXPR.\n"
+"    Expresiile pot fi unare sau binare. Expresiile unare sunt adesea folosite\n"
+"    pentru a examina starea unui fișier. Există de-asemeni operatori de șir și\n"
+"    operatori de comparație numerică.\n"
+"    \n"
+"    Comportamentul testului depinde de numărul de argumente. Citiți pagina\n"
+"    de manual, «bash», pentru specificația completă.\n"
+"    \n"
+"    Operatori de fișiere:\n"
+"    \n"
+"      -a FIȘIER      Adevărat dacă fișierul există.\n"
+"      -b FIȘIER      Adevărat dacă fișierul este un dispozitiv de blocuri.\n"
+"      -c FIȘIER      Adevărat dacă fișierul este un dispozitiv de caractere.\n"
+"      -d FIȘIER      Adevărat dacă fișierul este un director.\n"
+"      -e FIȘIER      Adevărat dacă fișierul există.\n"
+"      -f FIȘIER      Adevărat dacă fișierul există și este un fișier normal.\n"
+"      -g FIȘIER      Adevărat dacă fișierul are activat bitul „set-group-id”.\n"
+"      -h FIȘIER      Adevărat dacă fișierul este o legătură simbolică.\n"
+"      -L FIȘIER      Adevărat dacă fișierul este o legătură simbolică..\n"
+"      -k FIȘIER      Adevărat dacă fișierul are activat bitul „sticky” (lipicios).\n"
+"      -p FIȘIER      Adevărat dacă fișierul este o linie de conectare numită.\n"
+"      -r FIȘIER      Adevărat dacă fișierul poate fi citit de dumneavoastră.\n"
+"      -s FIȘIER      Adevărat dacă fișierul există și nu este gol.\n"
+"      -S FIȘIER      Adevărat dacă fișierul este un soclu.\n"
+"      -t DF          Adevărat dacă DF(descriptorul de fișier) este deschis pe un terminal.\n"
+"      -u FIȘIER      Adevărat dacă fișierul are activat bitul „set-user-id”.\n"
+"      -w FIȘIER      Adevărat dacă fișierul poate fi scris de dumneavoastră.\n"
+"      -x FIȘIER      Adevărat dacă fișierul poate fi executat de dumneavoastră.\n"
+"      -O FIȘIER      Adevărat dacă fișierul este deținut efectiv de dumneavoastră.\n"
+"      -G FIȘIER      Adevărat dacă fișierul este deținut efectiv de grupul dumneavoastră.\n"
+"      -N FIȘIER      Adevărat dacă fișierul a fost modificat de la ultima citire.\n"
+"    \n"
+"      FIȘI1 -nt FIȘI2  Adevărat dacă fișierul 1 este mai nou decât fișierul 2 (conform\n"
+"                       datei modificării).\n"
+"    \n"
+"      FIȘI1 -ot FIȘI2  Adevărat dacă fișierul1 este mai vechi decât fișierul2.\n"
+"    \n"
+"      FIȘI1 -ef FIȘI2  Adevărat dacă fișierul1 este o legătură dură către fișierul2.\n"
+"    \n"
+"    Operatori de șir:\n"
+"    \n"
+"      -z ȘIR         Adevărat dacă șirul este gol.\n"
+"    \n"
+"      -n ȘIR         Adevărat dacă șirul nu este gol.\n"
+"      ȘIR            Adevărat dacă șirul nu este gol.\n"
+"    \n"
+"      ȘIR1 = ȘIR2    Adevărat dacă șirurile sunt egale.\n"
+"      ȘIR1 != ȘIR2   Adevărat dacă șirurile nu sunt egale.\n"
+"      ȘIR1 < ȘIR2    Adevărat dacă ȘIR1 se ordonează lexicografic înainte de ȘIR2.\n"
+"      ȘIR1 > ȘIR2    Adevărat dacă ȘIR1 se ordonează lexicografic după ȘIR2.n\n"
+"    \n"
+"    Alți operatori:\n"
+"    \n"
+"      -o OPȚIUNE     Adevărat dacă opțiunea shell OPȚIUNE este activată.\n"
+"      -v VAR         Adevărat dacă este definită variabila shell VAR.\n"
+"      -R VAR         Adevărat dacă variabila shell VAR este definită și este o referință\n"
+"                     de nume.\n"
+"      ! EXPR         Adevărat dacă expresia EXPR este falsă.\n"
+"      EXPR1 -a EXPR2 Adevărat dacă amândouă expresiile EXPR1 și EXPR2 sunt adevărate.\n"
+"      EXPR1 -o EXPR2 Adevărat dacă fie expresia EXPR1, fie expresia EXPR2 este adevărată.\n"
+"    \n"
+"      ARG1 OP ARG2   Teste aritmetice.  OP este unul dintre -eq, -ne, -lt, -le, -gt, sau -ge.\n"
+"    \n"
+"    Operatorii binari aritmetici returnează adevărat dacă ARG1 este egal, inegal, mai mic\n"
+"    decât, mai mic decât sau egal, mai mare decât, sau mai mare decât sau egal cu ARG2.\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Returnează succes dacă EXPR este evaluată ca adevărată; eșuează dacă EXPR este\n"
+"    evaluată ca fiind falsă sau este dat un argument nevalid."
+
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help [», din «bash»;
+# «bash -c "help ["», din «bash», sau
+# dintr-un shell, diferit de «bash».
+#: builtins.c:1344
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
 "    This is a synonym for the \"test\" builtin, but the last argument must\n"
 "    be a literal `]', to match the opening `['."
 msgstr ""
+"Evaluează expresia condițională.\n"
+"    \n"
+"    Acesta este un sinonim pentru comanda internă «test», dar ultimul argument\n"
+"    trebuie să fie un „]” literal, pentru a se potrivi cu „[” de deschidere."
 
-#: builtins.c:1352
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help times», din «bash»;
+# «bash -c "help times"», din «bash», sau
+# dintr-un shell, diferit de «bash».
+#: builtins.c:1353
 msgid ""
 "Display process times.\n"
 "    \n"
-"    Prints the accumulated user and system times for the shell and all of "
-"its\n"
+"    Prints the accumulated user and system times for the shell and all of its\n"
 "    child processes.\n"
 "    \n"
 "    Exit Status:\n"
 "    Always succeeds."
 msgstr ""
+"Afișează timpii procesului.\n"
+"    \n"
+"    Afișează timpii acumulați de utilizator și sistem pentru shell și pentru toate\n"
+"    procesele sale secundare.\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Întotdeauna reușește(0)."
 
-#: builtins.c:1364
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help trap», din «bash»;
+# «bash -c "help trap"», din «bash», sau
+# dintr-un shell, diferit de «bash».
+#: builtins.c:1365
 msgid ""
 "Trap signals and other events.\n"
 "    \n"
-"    Defines and activates handlers to be run when the shell receives "
-"signals\n"
+"    Defines and activates handlers to be run when the shell receives signals\n"
 "    or other conditions.\n"
 "    \n"
 "    ARG is a command to be read and executed when the shell receives the\n"
@@ -3633,37 +4921,70 @@ msgid ""
 "    value.  If ARG is the null string each SIGNAL_SPEC is ignored by the\n"
 "    shell and by the commands it invokes.\n"
 "    \n"
-"    If a SIGNAL_SPEC is EXIT (0) ARG is executed on exit from the shell.  "
-"If\n"
-"    a SIGNAL_SPEC is DEBUG, ARG is executed before every simple command.  "
-"If\n"
-"    a SIGNAL_SPEC is RETURN, ARG is executed each time a shell function or "
-"a\n"
-"    script run by the . or source builtins finishes executing.  A "
-"SIGNAL_SPEC\n"
-"    of ERR means to execute ARG each time a command's failure would cause "
-"the\n"
+"    If a SIGNAL_SPEC is EXIT (0) ARG is executed on exit from the shell.  If\n"
+"    a SIGNAL_SPEC is DEBUG, ARG is executed before every simple command.  If\n"
+"    a SIGNAL_SPEC is RETURN, ARG is executed each time a shell function or a\n"
+"    script run by the . or source builtins finishes executing.  A SIGNAL_SPEC\n"
+"    of ERR means to execute ARG each time a command's failure would cause the\n"
 "    shell to exit when the -e option is enabled.\n"
 "    \n"
-"    If no arguments are supplied, trap prints the list of commands "
-"associated\n"
+"    If no arguments are supplied, trap prints the list of commands associated\n"
 "    with each signal.\n"
 "    \n"
 "    Options:\n"
 "      -l\tprint a list of signal names and their corresponding numbers\n"
 "      -p\tdisplay the trap commands associated with each SIGNAL_SPEC\n"
 "    \n"
-"    Each SIGNAL_SPEC is either a signal name in <signal.h> or a signal "
-"number.\n"
+"    Each SIGNAL_SPEC is either a signal name in <signal.h> or a signal number.\n"
 "    Signal names are case insensitive and the SIG prefix is optional.  A\n"
 "    signal may be sent to the shell with \"kill -signal $$\".\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success unless a SIGSPEC is invalid or an invalid option is "
-"given."
-msgstr ""
-
-#: builtins.c:1400
+"    Returns success unless a SIGSPEC is invalid or an invalid option is given."
+msgstr ""
+"Capturează semnale și alte evenimente.\n"
+"    \n"
+"    Definește și activează operatorii care urmează să fie rulați atunci când\n"
+"    shell-ul primește semnale sau apar alte evenimente.\n"
+"    \n"
+"    ARG este o comandă care trebuie citită și executată atunci când shell-ul\n"
+"    primește semnalul(ele) SIGNAL_SPEC.  Dacă ARG este absentă (și este\n"
+"    furnizat un singur SIGNAL_SPEC) sau „-”, fiecare semnal specificat este\n"
+"    restabilit la valoarea sa originală.  Dacă ARG este un șir nul, fiecare\n"
+"    SIGNAL_SPEC este ignorat de către shell și de comenzile pe care le invocă.\n"
+"    \n"
+"    Dacă un SIGNAL_SPEC este EXIT (0), ARG este executat la ieșirea din shell.\n"
+"    Dacă un SIGNAL_SPEC este DEBUG, ARG este executat înainte de fiecare comandă\n"
+"    simplă.  Dacă un SIGNAL_SPEC este RETURN, ARG este executat de fiecare dată \n"
+"    când o funcție shell sau un script rulat din . sau comanda internă «source»\n"
+"    se termină de executat.  Un SIGNAL_SPEC de ERR face ca ARG să fie executat\n"
+"    de fiecare dată când eșecul unei comenzi ar determina terminarea shell-ului\n"
+"    atunci când opțiunea „-e” este activată. \n"
+"    \n"
+"    Dacă nu sunt furnizate argumente, «trap» afișează lista de comenzi asociate\n"
+"    fiecărui semnal.\n"
+"    \n"
+"    Opțiuni:\n"
+"      -l\tafișează o listă de nume de semnale și numerele corespunzătoare\n"
+"        \tale acestora\n"
+"      -p\tafișează comenzile de captură asociate fiecărui SIGNAL_SPEC\n"
+"    \n"
+"    Fiecare SIGNAL_SPEC este fie un nume de semnal în <signal.h>, fie un număr\n"
+"    de semnal.  Numele semnalelor nu fac distincție între majuscule și minuscule,\n"
+"    iar prefixul SIG este opțional.  Un semnal poate fi trimis către shell cu\n"
+"    «kill -signal $$».\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Returnează succes, cu excepția cazului în care un SIGSPEC este nevalid sau \n"
+"    este dată o opțiune nevalidă."
+
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help type», din «bash»;
+# «bash -c "help type"», din «bash», sau
+# dintr-un shell, diferit de «bash».
+#: builtins.c:1401
 msgid ""
 "Display information about command type.\n"
 "    \n"
@@ -3689,16 +5010,45 @@ msgid ""
 "      NAME\tCommand name to be interpreted.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success if all of the NAMEs are found; fails if any are not "
-"found."
-msgstr ""
-
-#: builtins.c:1431
+"    Returns success if all of the NAMEs are found; fails if any are not found."
+msgstr ""
+"Afișează informații despre comanda «type».\n"
+"    \n"
+"    Pentru fiecare NUME, indică cum ar fi interpretat dacă ar fi folosit ca\n"
+"    nume de comandă.\n"
+"    \n"
+"    Opțiuni:\n"
+"      -a\tafișează toate locațiile care conțin un executabil numit NUME; \n"
+"    \t\tinclude alias, componente integrate și funcții, dacă și numai\n"
+"    \t\tdacă opțiunea „-p” nu este, de asemenea, utilizată\n"
+"      -f\tsuprimă căutarea funcției de shell\n"
+"      -P\tforțează o căutare PATH pentru fiecare NUME, chiar dacă este un\n"
+"    \t\talias, o comandă internă sau o funcție, și returnează numele\n"
+"    \t\tfișierului din disc care va fi executat\n"
+"      -p\treturnează fie numele fișierului de pe disc care va fi executat,\n"
+"    \t\tfie nimic dacă «type -t NUME» nu va returna „file”\n"
+"      -t\tafișează un singur cuvânt care este unul dintre „alias”, „keyword”,\n"
+"    \t\t„function”, „builtin”, „file” sau „”, dacă NUME este un alias,\n"
+"    \t\tcuvânt rezervat shell, funcție shell, comandă internă shell,\n"
+"    \t\tfișier pe disc, sau, respectiv, negăsit\n"
+"    \n"
+"    Argumente:\n"
+"      NUME\tNumele comenzii de interpretat.\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Returnează succes dacă toate NUMEle sunt găsite; eșuează dacă nu sunt găsite."
+
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help ulimit», din «bash»;
+# «bash -c "help ulimit"», din «bash», sau
+# dintr-un shell, diferit de «bash».
+#: builtins.c:1432
 msgid ""
 "Modify shell resource limits.\n"
 "    \n"
-"    Provides control over the resources available to the shell and "
-"processes\n"
+"    Provides control over the resources available to the shell and processes\n"
 "    it creates, on systems that allow such control.\n"
 "    \n"
 "    Options:\n"
@@ -3742,8 +5092,61 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless an invalid option is supplied or an error occurs."
 msgstr ""
-
-#: builtins.c:1482
+"Modifică limitele resurselor shell.\n"
+"    \n"
+"    Oferă control asupra resurselor disponibile shell-ului și proceselor pe care\n"
+"    acesta le creează, pe sisteme care permit un astfel de control.\n"
+"    \n"
+"    Opțiuni:\n"
+"      -S\tutilizează limita de resurse „soft”\n"
+"      -H\tutilizează limita de resurse „hard”\n"
+"      -a\tsunt raportate toate limitele curente\n"
+"      -b\tdimensiunea memoriei tampon a soclului\n"
+"      -c\tdimensiunea maximă a fișierelor create cu conținutul memoriei (core)\n"
+"      -d\tdimensiunea maximă a segmentului de date al unui proces\n"
+"      -e\tprioritatea maximă de planificare („nice”)\n"
+"      -f\tdimensiunea maximă a fișierelor scrise de shell și subprocesele sale\n"
+"      -i\tnumărul maxim de semnale în așteptare\n"
+"      -k\tnumărul maxim de Kcozi alocate pentru acest proces\n"
+"      -l\tdimensiunea maximă pe care un proces o poate bloca în memorie\n"
+"      -m\tcantitatea maximă de memorie fizică a unui proces\n"
+"      -n\tnumărul maxim de descriptori de fișier deschise\n"
+"      -p\tdimensiunea memoriei tampon a liniei de conectare\n"
+"      -q\tnumărul maxim de octeți din cozile de mesaje POSIX\n"
+"      -r\tprioritatea maximă a procesului în timp real\n"
+"      -s\tdimensiunea maximă a stivei\n"
+"      -t\tcantitatea maximă de timp a CPU-ului în secunde\n"
+"      -u\tnumărul maxim de procese ale utilizatorului\n"
+"      -v\tdimensiunea memoriei virtuale\n"
+"      -x\tnumărul maxim de blocări ale fișierelor\n"
+"      -P\tnumărul maxim de pseudoterminale\n"
+"      -R\ttimpul maxim pe care îl poate rula un proces în timp real înainte\n"
+"        \tde blocare\n"
+"      -T\tnumărul maxim de fire(threads)\n"
+"    \n"
+"    Nu toate opțiunile sunt disponibile pe toate platformele.\n"
+"    \n"
+"    Dacă se dă LIMITA, aceasta este noua valoare a resursei specificate;\n"
+"    valorile speciale de LIMITĂ: „soft”, „hard” și „unlimited” reprezintă\n"
+"    limita curentă maleabilă, limita curentă dură și, respectiv, fără limită.\n"
+"    Altminteri, este afișată valoarea curentă a resursei specificate. Dacă\n"
+"    nu este dată nicio opțiune, atunci se presupune „-f”.\n"
+"    \n"
+"    Valorile sunt în incremente de 1024 de octeți, cu excepția lui „-t”, care\n"
+"    este în secunde, a lui „-p”, care este în incremente de 512 octeți și a lui\n"
+"    „-u”, care este un număr nescalat de procese.\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Returnează succes, cu excepția cazului în care este furnizată o opțiune\n"
+"    nevalidă sau apare o eroare."
+
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help umask», din «bash»;
+# «bash -c "help umask"», din «bash», sau
+# dintr-un shell, diferit de «bash».
+#: builtins.c:1483
 msgid ""
 "Display or set file mode mask.\n"
 "    \n"
@@ -3760,28 +5163,47 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless MODE is invalid or an invalid option is given."
 msgstr ""
+"Afișează sau modifică masca pentru accesarea fișierelor nou create.\n"
+"    \n"
+"    Stabilește masca de creare a fișierelor de utilizator la MOD.  Dacă MOD\n"
+"    este omis, afișează valoarea curentă a măștii.\n"
+"    \n"
+"    Dacă MOD începe cu o cifră, acesta este interpretat ca un număr octal;\n"
+"    altminteri este interpretat ca un șir în format simbolic ca cel acceptat\n"
+"    de chmod(1).\n"
+"    \n"
+"    Opșiuni\n"
+"      -p\tdacă MOD este omis, arată ieșirea într-o formă care poate fi\n"
+"          \treutilizată ca intrare\n"
+"      -S\tafișează MODul în formatul simbolic; altminteri în formatul octal\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Returnează succes, cu excepția cazului în care MOD este nevalid sau\n"
+"    este dată o opțiune nevalidă."
 
-#: builtins.c:1502
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help wait», din «bash»;
+# «bash -c "help wait"», din «bash», sau
+# dintr-un shell, diferit de «bash».
+#: builtins.c:1503
 msgid ""
 "Wait for job completion and return exit status.\n"
 "    \n"
-"    Waits for each process identified by an ID, which may be a process ID or "
-"a\n"
+"    Waits for each process identified by an ID, which may be a process ID or a\n"
 "    job specification, and reports its termination status.  If ID is not\n"
 "    given, waits for all currently active child processes, and the return\n"
 "    status is zero.  If ID is a job specification, waits for all processes\n"
 "    in that job's pipeline.\n"
 "    \n"
-"    If the -n option is supplied, waits for a single job from the list of "
-"IDs,\n"
-"    or, if no IDs are supplied, for the next job to complete and returns "
-"its\n"
+"    If the -n option is supplied, waits for a single job from the list of IDs,\n"
+"    or, if no IDs are supplied, for the next job to complete and returns its\n"
 "    exit status.\n"
 "    \n"
 "    If the -p option is supplied, the process or job identifier of the job\n"
 "    for which the exit status is returned is assigned to the variable VAR\n"
-"    named by the option argument. The variable will be unset initially, "
-"before\n"
+"    named by the option argument. The variable will be unset initially, before\n"
 "    any assignment. This is useful only when the -n option is supplied.\n"
 "    \n"
 "    If the -f option is supplied, and job control is enabled, waits for the\n"
@@ -3792,23 +5214,63 @@ msgid ""
 "    option is given, or if -n is supplied and the shell has no unwaited-for\n"
 "    children."
 msgstr ""
+"Așteaptă finalizarea lucrării și returnează starea de ieșire.\n"
+"    \n"
+"    Așteaptă fiecare proces identificat printr-un ID, care poate fi un ID de\n"
+"    proces sau o specificație de lucrare și raportează starea de terminare\n"
+"    a acestuia.  Dacă ID-ul nu este dat, așteaptă toate procesele secundare\n"
+"    active în prezent și starea de returnare este zero.  Dacă ID-ul este o\n"
+"    specificație de lucrare, așteaptă toate procesele din secvența de comenzi\n"
+"    respectivă a lucrării.\n"
+"    \n"
+"    Dacă este furnizată opțiunea „-n”, așteaptă o singură lucrare din lista de\n"
+"    ID-uri sau, dacă nu sunt furnizate ID-uri, pentru finalizarea următoarei\n"
+"    lucrări și returnează starea de ieșire.\n"
+"    \n"
+"    Dacă este furnizată opțiunea „-p”, identificatorul de proces sau de lucrare al\n"
+"    lucrării pentru care este returnată starea de ieșire este atribuit variabilei\n"
+"    VAR numită de argumentul opțiunii.  Variabila va fi anulată inițial, înainte\n"
+"    de orice atribuire.  Acest lucru este util numai atunci când este furnizată\n"
+"    opțiunea „-n”.\n"
+"    \n"
+"    Dacă este furnizată opțiunea „-f” și controlul lucrării este activat, \n"
+"    așteaptă ca ID-ul specificat să se termine, în loc să aștepte ca acesta să\n"
+"    își schimbe starea.\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Returnează starea ultimului ID; eșuează dacă ID-ul este nevalid sau este\n"
+"    dată o opțiune nevalidă sau dacă „-n” este furnizată și shell-ul nu are\n"
+"    niciun copil pe care să-l aștepte."
 
-#: builtins.c:1533
+#: builtins.c:1534
 msgid ""
 "Wait for process completion and return exit status.\n"
 "    \n"
-"    Waits for each process specified by a PID and reports its termination "
-"status.\n"
+"    Waits for each process specified by a PID and reports its termination status.\n"
 "    If PID is not given, waits for all currently active child processes,\n"
 "    and the return status is zero.  PID must be a process ID.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns the status of the last PID; fails if PID is invalid or an "
-"invalid\n"
+"    Returns the status of the last PID; fails if PID is invalid or an invalid\n"
 "    option is given."
 msgstr ""
+"Așteaptă finalizarea procesului și returnează starea de ieșire.\n"
+"    \n"
+"    Așteaptă fiecare proces specificat de un PID și raportează starea de terminare a\n"
+"    acestuia.  Dacă nu este dat PID, așteaptă toate procesele copil active în prezent,\n"
+"    iar starea returnată este zero.  PID trebuie să fie un ID de proces.\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Returnează starea ultimului PID; eșuează dacă PID este nevalid sau este dată\n"
+"    o opțiune nevalidă."
 
-#: builtins.c:1548
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help for», din «bash»;
+# «bash -c "help for"», din «bash», sau
+# dintr-un shell, diferit de «bash».
+#: builtins.c:1549
 msgid ""
 "Execute commands for each member in a list.\n"
 "    \n"
@@ -3820,8 +5282,23 @@ msgid ""
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
+"Execută comenzi pentru fiecare membru dintr-o listă.\n"
+"    \n"
+"    Bucla „for” execută o secvență de comenzi pentru fiecare membru dintr-o\n"
+"    listă de elemente.  Dacă „in CUVINTE ...;” nu este prezent, atunci se\n"
+"    presupune „in \"$@\"”.  Pentru fiecare element din CUVINTE, se definește\n"
+"    NUME ca acel element, și se execută COMENZILE.\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Returnează starea ultimei comenzi executate."
 
-#: builtins.c:1562
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help 'for (('», din «bash»;
+# «bash -c "help 'for (('"», din «bash», sau
+# dintr-un shell, diferit de «bash».
+#: builtins.c:1563
 msgid ""
 "Arithmetic for loop.\n"
 "    \n"
@@ -3837,8 +5314,27 @@ msgid ""
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
-
-#: builtins.c:1580
+"Buclă aritmetică „for”.\n"
+"    \n"
+"    Echivalentă cu:\n"
+"    \t(( EXP1 ))\n"
+"    \twhile (( EXP2 )); do\n"
+"    \t\tCOMENZI\n"
+"    \t\t(( EXP3 ))\n"
+"    \tdone\n"
+"    EXP1, EXP2, și EXP3 sunt expresii aritmetice.  Dacă orice expresie este\n"
+"    omisă, se comportă ca și cum aceasta ar avea valoarea 1.\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Returnează starea ultimei comenzi executate."
+
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help select», din «bash»;
+# «bash -c "help select"», din «bash», sau
+# dintr-un shell, diferit de «bash».
+#: builtins.c:1581
 msgid ""
 "Select words from a list and execute commands.\n"
 "    \n"
@@ -3857,8 +5353,31 @@ msgid ""
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
-
-#: builtins.c:1601
+"Selectează cuvinte dintr-o listă și execută comenzi.\n"
+"    \n"
+"    CUVINTELE sunt expandate, generând o listă de cuvinte.  Setul\n"
+"    de cuvinte expandate este afișat la ieșirea de eroare standard,\n"
+"    fiecare precedat de un număr.  Dacă „în CUVINTE” nu este prezent,\n"
+"    se presupune „in \"$@\"”.  Se afișează apoi promptul PS3 și se citește\n"
+"    o linie de la intrarea standard.  Dacă linia constă din numărul\n"
+"    corespunzător unuia dintre cuvintele afișate, atunci se definește NUME\n"
+"    ca acest cuvânt.  Dacă linia este goală, CUVINTE și promptul sunt\n"
+"    reafișate.  Dacă este citit sfârșitul fișierului(EOF), comanda se\n"
+"    finalizează.  Orice altă valoare citită face ca NUME să fie definit ca\n"
+"    null.  Linia citită este salvată în variabila „REPLY”.  COMENZILE sunt\n"
+"    executate după fiecare selecție până când este executată o comandă\n"
+"    de întrerupere(break).\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Returnează starea ultimei comenzi executate."
+
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help time», din «bash»;
+# «bash -c "help time"», din «bash», sau
+# dintr-un shell, diferit de «bash».
+#: builtins.c:1602
 msgid ""
 "Report time consumed by pipeline's execution.\n"
 "    \n"
@@ -3873,8 +5392,27 @@ msgid ""
 "    Exit Status:\n"
 "    The return status is the return status of PIPELINE."
 msgstr ""
+"Raportează timpul consumat de execuția secvenței de comenzi.\n"
+"    \n"
+"    Execută SECVENȚA_DE_COMENZI și imprimă un rezumat al timpului real,\n"
+"    al timpului CPU al utilizatorului și al timpului CPU al sistemului\n"
+"    petrecut executând SECVENȚA_DE_COMENZI atunci când aceasta termină.\n"
+"    \n"
+"    Opțiuni:\n"
+"      -p\tafișează rezumatul cronometrajului în formatul Posix portabil\n"
+"    \n"
+"    Valoarea variabilei TIMEFORMAT este utilizată drept format de ieșire.\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Starea de returnare este starea de returnare a SECVENȚEI_DE_COMENZI."
 
-#: builtins.c:1618
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help case», din «bash»;
+# «bash -c "help case"», din «bash», sau
+# dintr-un shell, diferit de «bash».
+#: builtins.c:1619
 msgid ""
 "Execute commands based on pattern matching.\n"
 "    \n"
@@ -3884,51 +5422,104 @@ msgid ""
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
+"Execută comenzi bazate pe potrivirea modelelor.\n"
+"    \n"
+"    Execută COMENZI selectiv, pe baza potrivirilor dintre CUVÂNT și MODEL.\n"
+"    „|” este folosit pentru a separa mai multe modele.\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Returnează starea ultimei comenzi executate."
 
-#: builtins.c:1630
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help if», din «bash»;
+# «bash -c "help if"», din «bash», sau
+# dintr-un shell, diferit de «bash».
+#: builtins.c:1631
 msgid ""
 "Execute commands based on conditional.\n"
 "    \n"
-"    The `if COMMANDS' list is executed.  If its exit status is zero, then "
-"the\n"
-"    `then COMMANDS' list is executed.  Otherwise, each `elif COMMANDS' list "
-"is\n"
+"    The `if COMMANDS' list is executed.  If its exit status is zero, then the\n"
+"    `then COMMANDS' list is executed.  Otherwise, each `elif COMMANDS' list is\n"
 "    executed in turn, and if its exit status is zero, the corresponding\n"
-"    `then COMMANDS' list is executed and the if command completes.  "
-"Otherwise,\n"
-"    the `else COMMANDS' list is executed, if present.  The exit status of "
-"the\n"
-"    entire construct is the exit status of the last command executed, or "
-"zero\n"
+"    `then COMMANDS' list is executed and the if command completes.  Otherwise,\n"
+"    the `else COMMANDS' list is executed, if present.  The exit status of the\n"
+"    entire construct is the exit status of the last command executed, or zero\n"
 "    if no condition tested true.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
-
-#: builtins.c:1647
+"Execută comenzi bazate pe condițional.\n"
+"    \n"
+"    Lista „if COMENZI” este executată.  Dacă starea sa de ieșire este zero,\n"
+"    atunci este executată lista „then COMENZI”.  În caz contrar, fiecare listă \n"
+"    „elif COMENZI” este executată pe rând, iar dacă starea sa de ieșire este\n"
+"    zero, lista corespunzătoare „then COMENZI” este executată și comanda\n"
+"    «if» se completează.  În caz contrar, lista „else COMENZI” este executată,\n"
+"    dacă este prezentă.  Starea de ieșire a întregii construcții este starea de\n"
+"    ieșire a ultimei comenzi executate sau zero dacă nicio condiție nu a fost\n"
+"    evaluată ca adevărată.\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Returnează starea ultimei comenzi executate."
+
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help while», din «bash»;
+# «bash -c "help while"», din «bash», sau
+# dintr-un shell, diferit de «bash».
+#: builtins.c:1648
 msgid ""
 "Execute commands as long as a test succeeds.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `while' COMMANDS has an exit status of zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n"
+"    an exit status of zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
+"Execută comenzi atâta timp cât un test reușește.\n"
+"    \n"
+"    Expandează și execută COMENZI-2 atâta timp cât comanda finală din\n"
+"    COMENZI are o stare de ieșire zero.\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Returnează starea ultimei comenzi executate."
 
-#: builtins.c:1659
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help until», din «bash»;
+# «bash -c "help until"», din «bash», sau
+# dintr-un shell, diferit de «bash».
+#: builtins.c:1660
 msgid ""
 "Execute commands as long as a test does not succeed.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `until' COMMANDS has an exit status which is not zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n"
+"    an exit status which is not zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
+"Execută comenzi atâta timp cât un test nu reușește.\n"
+"    \n"
+"    Expandează și execută COMENZI-2 atâta timp cât comanda finală din\n"
+"    COMENZI are o stare de ieșire diferită de zero.\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Returnează starea ultimei comenzi executate."
 
-#: builtins.c:1671
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help coproc», din «bash»;
+# «bash -c "help coproc"», din «bash», sau
+# dintr-un shell, diferit de «bash».
+#: builtins.c:1672
 msgid ""
 "Create a coprocess named NAME.\n"
 "    \n"
@@ -3940,22 +5531,51 @@ msgid ""
 "    Exit Status:\n"
 "    The coproc command returns an exit status of 0."
 msgstr ""
+"Creează un coproces numit NUME.\n"
+"    \n"
+"    Execută COMANDA în mod asincron, cu ieșirea standard și intrarea standard a\n"
+"    comenzii conectate printr-o conductă la descriptorii de fișiere alocați\n"
+"    indicilor 0 și 1 ai unei variabile matrice NUME din shell-ul de execuție.\n"
+"    NUMELE implicit este „COPROC”.\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Comanda «coproc» returnează o stare de ieșire de 0."
 
-#: builtins.c:1685
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help function», din «bash»;
+# «bash -c "help function"», din «bash», sau
+# dintr-un shell, diferit de «bash».
+#: builtins.c:1686
 msgid ""
 "Define shell function.\n"
 "    \n"
 "    Create a shell function named NAME.  When invoked as a simple command,\n"
-"    NAME runs COMMANDs in the calling shell's context.  When NAME is "
-"invoked,\n"
+"    NAME runs COMMANDs in the calling shell's context.  When NAME is invoked,\n"
 "    the arguments are passed to the function as $1...$n, and the function's\n"
 "    name is in $FUNCNAME.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns success unless NAME is readonly."
 msgstr ""
+"Definește funcția shell.\n"
+"    \n"
+"    Creează o funcție de shell numită NUME.  Când se invocă ca o comandă simplă,\n"
+"    NUME rulează COMENZI în contextul shell-ului apelant.  Când NUME este \n"
+"    invocat, argumentele sunt transmise funcției ca $1...$n, iar numele\n"
+"    funcției este în $FUNCNAME.\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Returnează succes, cu excepția cazului în care NUME este protejat la scriere"
 
-#: builtins.c:1699
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help -m {», din «bash»;
+# «bash -c "help -m {», din «bash», sau
+# dintr-un shell, diferit de «bash».
+#: builtins.c:1700
 msgid ""
 "Group commands as a unit.\n"
 "    \n"
@@ -3965,8 +5585,15 @@ msgid ""
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
+"Grupează comenzile ca o unitate.\n"
+"    \n"
+"    Rulează un set de comenzi dintr-un grup. Aceasta este o modalitate\n"
+"    de a redirecționa un întreg set de comenzi.\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Returnează starea ultimei comenzi executate."
 
-#: builtins.c:1711
+#: builtins.c:1712
 msgid ""
 "Resume job in foreground.\n"
 "    \n"
@@ -3979,8 +5606,24 @@ msgid ""
 "    Exit Status:\n"
 "    Returns the status of the resumed job."
 msgstr ""
+"Reia lucrarea în prim-plan.\n"
+"    \n"
+"    Echivalent cu argumentul JOB_SPEC al comenzii «fg».  Reia o lucrare\n"
+"    oprită sau în fundal.  JOB_SPEC poate specifica fie un nume de lucrare,\n"
+"    fie un număr de lucrare.  JOB_SPEC urmat de un „&” plasează lucrarea\n"
+"    în fundal, ca și cum specificația lucrării ar fi fost furnizată ca argument\n"
+"    pentru «bg».\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Returnează starea lucrării reluate."
 
-#: builtins.c:1726
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help '(('», din «bash»;
+# «bash -c "help '(('», din «bash», sau
+# dintr-un shell, diferit de «bash».
+#: builtins.c:1727
 msgid ""
 "Evaluate arithmetic expression.\n"
 "    \n"
@@ -3990,17 +5633,27 @@ msgid ""
 "    Exit Status:\n"
 "    Returns 1 if EXPRESSION evaluates to 0; returns 0 otherwise."
 msgstr ""
+"Evaluează expresia aritmetică.\n"
+"    \n"
+"    EXPRESIA este evaluată conform regulilor de evaluare aritmetică.\n"
+"    Echivalent cu „let \"EXPRESIA\"”.\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Returnează 1 dacă EXPRESIA este evaluată la 0; în caz contrar, returnează 0."
 
-#: builtins.c:1738
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help '[['», din «bash»;
+# «bash -c "help '[['», din «bash», sau
+# dintr-un shell, diferit de «bash».
+#: builtins.c:1739
 msgid ""
 "Execute conditional command.\n"
 "    \n"
-"    Returns a status of 0 or 1 depending on the evaluation of the "
-"conditional\n"
-"    expression EXPRESSION.  Expressions are composed of the same primaries "
-"used\n"
-"    by the `test' builtin, and may be combined using the following "
-"operators:\n"
+"    Returns a status of 0 or 1 depending on the evaluation of the conditional\n"
+"    expression EXPRESSION.  Expressions are composed of the same primaries used\n"
+"    by the `test' builtin, and may be combined using the following operators:\n"
 "    \n"
 "      ( EXPRESSION )\tReturns the value of EXPRESSION\n"
 "      ! EXPRESSION\t\tTrue if EXPRESSION is false; else false\n"
@@ -4018,8 +5671,37 @@ msgid ""
 "    Exit Status:\n"
 "    0 or 1 depending on value of EXPRESSION."
 msgstr ""
-
-#: builtins.c:1764
+"Execută comanda condițională.\n"
+"    \n"
+"    Returnează o stare de 0 sau 1, în funcție de evaluarea expresiei condiționale\n"
+"    EXPRESIA.  Expresiile sunt compuse din aceleași elemente primare folosite de\n"
+"    comanda INTERNĂ «test» și pot fi combinate folosind următorii operatori:\n"
+"    \n"
+"      ( EXPRESIA )\tReturnează valoarea EXPRESIEI\n"
+"      ! EXPRESIA\tAdevărat dacă EXPRESIA este falsă; altfel fals\n"
+"      EXPR1 && EXPR2\tAdevărat dacă atât EXPR1 cât și EXPR2 sunt adevărate;\n"
+"      \t\t\taltfel fals\n"
+"      EXPR1 || EXPR2\tAdevărat dacă fie EXPR1, fie EXPR2 este adevărată;\n"
+"      \t\t\taltfel fals\n"
+"    \n"
+"    Când se utilizează operatorii „==” și „!=”, șirul din dreapta operatorului\n"
+"    este utilizat ca model și se realizează potrivirea modelului.\n"
+"    Când se utilizează operatorul „=~”, șirul din dreapta operatorului se\n"
+"    potrivește ca expresie regulată.\n"
+"    \n"
+"    Operatorii „&&” și „||” nu evaluează EXPR2 dacă EXPR1 este suficientă pentru\n"
+"    a determina valoarea expresiei.\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    0 sau 1, în funcție de valoarea EXPRESIEI."
+
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help variables», din «bash»;
+# «bash -c "help variables», din «bash», sau
+# dintr-un shell, diferit de «bash».
+#: builtins.c:1765
 msgid ""
 "Common shell variable names and usage.\n"
 "    \n"
@@ -4072,8 +5754,67 @@ msgid ""
 "    HISTIGNORE\tA colon-separated list of patterns used to decide which\n"
 "    \t\tcommands should be saved on the history list.\n"
 msgstr ""
-
-#: builtins.c:1821
+"Numele și utilizarea variabilelor shell comune.\n"
+"    \n"
+"    BASH_VERSION\n"
+"         \tInformații despre versiunea acestui Bash.\n"
+"    CDPATH\tO listă de directoare separate prin două puncte\n"
+"    \t\tpentru a căuta directoare date ca argumente pentru «cd».\n"
+"    GLOBIGNORE\tO listă de modele, separate prin două puncte, care descriu nume\n"
+"    \t\tde fișiere care trebuie ignorate de extinderea numelui de cale.\n"
+"    HISTFILE\tNumele fișierului în care este stocat istoricul comenzilor.\n"
+"    HISTFILESIZE\n"
+"         \tNumărul maxim de linii pe care acest fișier le poate conține.\n"
+"    HISTSIZE\tNumărul maxim de linii de istoric pe care le poate accesa un\n"
+"    \t\tshell care rulează.\n"
+"    HOME\tCalea completă către directorul dumneavoastră de conectare.\n"
+"    HOSTNAME\tNumele gazdei curente.\n"
+"    HOSTTYPE\tTipul de CPU pe care rulează această versiune de Bash.\n"
+"    IGNOREEOF\tControlează acțiunea shell-ului la primirea unui caracter „EOF”\n"
+"    \t\tca unică intrare.  Dacă este definită, atunci valoarea acesteia\n"
+"    \t\teste numărul de caractere „EOF” care pot fi văzute într-un rând\n"
+"    \t\tpe o linie goală înainte ca shell-ul să iasă (implicit 10).\n"
+"    \t\tCând nu este definită, „EOF” înseamnă sfârșitul intrării.\n"
+"    MACHTYPE\tUn șir care descrie sistemul curent pe care rulează Bash.\n"
+"    MAILCHECK\tCât de des, în secunde, verifică Bash dacă există e-mailuri noi.\n"
+"    MAILPATH\tO listă de nume de fișiere, separate prin două puncte, pe care\n"
+"    \t\tBash le verifică pentru e-mailuri noi.\n"
+"    OSTYPE\tVersiunea de Unix pe care rulează această versiune de Bash.\n"
+"    PATH\tO listă de directoare separate prin două puncte în care se caută,\n"
+"    \t\tatunci când se caută comenzi.\n"
+"    PROMPT_COMMAND\n"
+"         \tO comandă care trebuie executată înainte de afișarea\n"
+"    \t\tfiecărui prompt primar.\n"
+"    PS1\t\tȘirul de prompt primar.\n"
+"    PS2\t\tȘirul de prompt secundar.\n"
+"    PWD\t\tCalea completă a directorului curent.\n"
+"    SHELLOPTS\tO listă separată de două puncte, de opțiuni de shell activate.\n"
+"    TERM\tNumele tipului actual de terminal.\n"
+"    TIMEFORMAT\tFormatul de ieșire pentru statisticile de timp afișat de\n"
+"    \t\tcuvântul rezervat „time”.\n"
+"    auto_resume\tNon-null înseamnă că un cuvânt de comandă care apare singur pe o\n"
+"    \t\tlinie este căutat mai întâi în lista de lucrări opriteîn prezent.\n"
+"    \t\tDacă se găsește acolo, lucrarea este în prim plan.  O valoare\n"
+"    \t\t„exact” înseamnă că cuvântul de comandă trebuie să se potrivească\n"
+"    \t\texact cu o comandă din lista de lucrări oprite.  O valoare „sub-\n"
+"    \t\tstring” înseamnă că cuvântul de comandă trebuie să se potrivească\n"
+"    \t\tcu un subșir al lucrării.  Orice altă valoare înseamnă  că\n"
+"    \t\tcomanda trebuie să fie un prefix al unei lucrări oprite.\n"
+"    histchars\tCaractere care controlează extinderea istoricului și\n"
+"    \t\tînlocuirea rapidă.  Primul caracter este caracterul\n"
+"    \t\tde înlocuire a istoricului, de obicei „!”.  Al doilea este\n"
+"    \t\tcaracterul „înlocuire rapidă”, de obicei „^”.  Al treilea\n"
+"    \t\teste caracterul „comentare istoric”, de obicei „#”.\n"
+"    HISTIGNORE\tO listă de modele separate prin două puncte, utilizată pentru a\n"
+"    \t\tdecide ce comenzi ar trebui salvate în lista istoricului.\n"
+
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help pushd», din «bash»;
+# «bash -c "help pushd», din «bash», sau
+# dintr-un shell, diferit de «bash».
+#: builtins.c:1822
 msgid ""
 "Add directories to stack.\n"
 "    \n"
@@ -4103,8 +5844,41 @@ msgid ""
 "    Returns success unless an invalid argument is supplied or the directory\n"
 "    change fails."
 msgstr ""
+"Adaugă directoare la stivă.\n"
+"    \n"
+"    Adaugă un director în partea de sus a stivei de directoare sau \n"
+"    rotește stiva, făcând din partea de sus a stivei directorul de lucru\n"
+"    curent.  Fără argumente, interschimbă primele două directoare.\n"
+"    \n"
+"    Opțiuni:\n"
+"      -n\tSuprimă schimbarea normală a directorului atunci când se adaugă\n"
+"    \t\tdirectoare la stivă, astfel încât numai stiva este manipulată.\n"
+"    \n"
+"    Argumente:\n"
+"      +N\tRotește stiva astfel încât al N-lea director (numărând \n"
+"    \t\tdin stânga listei afișate de «dirs», începând cu zero) să fie\n"
+"    \t\tîn partea de sus.\n"
+"    \n"
+"      -N\tRotește stiva astfel încât al N-lea director (numărând \n"
+"    \t\tdin dreapta listei afișate de «dirs», începând cu zero) să fie\n"
+"    \t\tîn partea de sus.\n"
+"    \n"
+"      dir\tAdaugă DIR la stiva de directoare din partea de sus, făcându-l\n"
+"    \t\tnoul director de lucru curent.\n"
+"    \n"
+"    Comanda internă «dirs» afișează stiva de directoare.\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Returnează succes, cu excepția cazului în care este furnizat un argument\n"
+"    nevalid sau dacă schimbarea directorului eșuează."
 
-#: builtins.c:1855
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help popd», din «bash»;
+# «bash -c "help popd», din «bash», sau
+# dintr-un shell, diferit de «bash».
+#: builtins.c:1856
 msgid ""
 "Remove directories from stack.\n"
 "    \n"
@@ -4130,8 +5904,37 @@ msgid ""
 "    Returns success unless an invalid argument is supplied or the directory\n"
 "    change fails."
 msgstr ""
+"Elimină directoare din stivă.\n"
+"    \n"
+"    Elimină intrările din stiva de directoare. Fără argumente, elimină\n"
+"    directorul de sus din stivă, și trece la noul director de sus.\n"
+"    \n"
+"    Opțiuni:\n"
+"      -n\tSuprimă schimbarea normală a directorului atunci când se elimină\n"
+"    \t\tdirectoare la stivă, astfel încât numai stiva este manipulată.\n"
+"    \n"
+"    Argumente:\n"
+"      +N\tElimină intrarea a N-a numărând din stânga listei afișate\n"
+"    \t\tde «dirs», începând cu zero.  De exemplu: «popd +0»\n"
+"    \t\telimină primul director, «popd +1» al doilea.\n"
+"    \n"
+"      -N\tElimină intrarea a N-a numărând din dreapta listei afișate\n"
+"    \t\tde «dirs», începând cu zero.  De exemplu: «popd -0»\n"
+"    \t\telimină ultimul director, «popd -1» penultimul.\n"
+"    \n"
+"    Comanda internă «dirs» afișează stiva de directoare.\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Returnează succes, cu excepția cazului în care este furnizat un argument\n"
+"    nevalid sau dacă schimbarea directorului eșuează."
 
-#: builtins.c:1885
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help dirs», din «bash»;
+# «bash -c "help dirs», din «bash», sau
+# dintr-un shell, diferit de «bash».
+#: builtins.c:1886
 msgid ""
 "Display directory stack.\n"
 "    \n"
@@ -4159,8 +5962,40 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless an invalid option is supplied or an error occurs."
 msgstr ""
-
-#: builtins.c:1916
+"Afișează stiva de directoare.\n"
+"    \n"
+"    Afișează lista directoarelor memorate în prezent.  Directoarele\n"
+"    sunt adăugate la această listă cu comanda «pushd» și eliminate\n"
+"    cu comanda «popd».\n"
+"    \n"
+"    Opțiuni:\n"
+"      -c\tcurăță stiva de directoare ștergând toate elementele\n"
+"      -l\tnu afișează versiuni de directoare cu prefix „~” în raport \n"
+"    \t\tcu directorul dumneavoastră «acasă»\n"
+"      -p\tafișează stiva de directoare cu o intrare pe linie\n"
+"      -v\tafișează stiva de directoare cu o intrare pe linie, prefixată\n"
+"    \t\tcu poziția sa în stivă\n"
+"    \n"
+"    Argumente:\n"
+"      +N\tAfișează a N-a intrare numărând din stânga listei afișate\n"
+"    \t\tde «dirs» atunci când este invocată fără opțiuni, începând\n"
+"    \t\tcu zero.\n"
+"    \n"
+"      -N\tAfișează a N-a intrare numărând din dreapta listei afișate\n"
+"    \t\tde «dirs» atunci când este invocată fără opțiuni, începând\n"
+"    \t\tcu zero.\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Returnează succes, cu excepția cazului în care este furnizată o opțiune\n"
+"    nevalidă sau apare o eroare."
+
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help shopt», din «bash»;
+# «bash -c "help shopt», din «bash», sau
+# dintr-un shell, diferit de «bash».
+#: builtins.c:1917
 msgid ""
 "Set and unset shell options.\n"
 "    \n"
@@ -4179,8 +6014,32 @@ msgid ""
 "    Returns success if OPTNAME is enabled; fails if an invalid option is\n"
 "    given or OPTNAME is disabled."
 msgstr ""
-
-#: builtins.c:1937
+"Activează sau dezactivează opțiunile de shell.\n"
+"    \n"
+"    Schimbă configurarea fiecărei opțiuni de shell NUME_OPȚIUNE.  Fără\n"
+"    niciun argument de opțiune, listează fiecare NUME_OPȚIUNE furnizat, \n"
+"    sau toate opțiunile de shell dacă nu sunt date NUME_OPȚIUNE, cu o\n"
+"    indicație dacă fiecare este sau nu definită.\n"
+"    \n"
+"    Opțiuni:\n"
+"      -o\trestricționează NUME_OPȚIUNE la cele definite pentru a fi\n"
+"           \tutilizate cu «set -o»\n"
+"      -p\tafișează fiecare opțiune de shell cu o indicație a stării acesteia\n"
+"      -q\tsuprimă ieșirea\n"
+"      -s\tactivează (definește) fiecare NUME_OPȚIUNE\n"
+"      -u\tdezactivează (șterge) fiecare NUME_OPȚIUNE\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Returnează succes dacă NUME_OPȚIUNE este activată; eșuează dacă\n"
+"    este dată o opțiune nevalidă sau NUME_OPȚIUNE este dezactivată."
+
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help printf», din «bash»;
+# «bash -c "help printf», din «bash», sau
+# dintr-un shell, diferit de «bash».
+#: builtins.c:1938
 msgid ""
 "Formats and prints ARGUMENTS under control of the FORMAT.\n"
 "    \n"
@@ -4188,45 +6047,76 @@ msgid ""
 "      -v var\tassign the output to shell variable VAR rather than\n"
 "    \t\tdisplay it on the standard output\n"
 "    \n"
-"    FORMAT is a character string which contains three types of objects: "
-"plain\n"
-"    characters, which are simply copied to standard output; character "
-"escape\n"
+"    FORMAT is a character string which contains three types of objects: plain\n"
+"    characters, which are simply copied to standard output; character escape\n"
 "    sequences, which are converted and copied to the standard output; and\n"
-"    format specifications, each of which causes printing of the next "
-"successive\n"
+"    format specifications, each of which causes printing of the next successive\n"
 "    argument.\n"
 "    \n"
-"    In addition to the standard format specifications described in "
-"printf(1),\n"
+"    In addition to the standard format specifications described in printf(1),\n"
 "    printf interprets:\n"
 "    \n"
 "      %b\texpand backslash escape sequences in the corresponding argument\n"
 "      %q\tquote the argument in a way that can be reused as shell input\n"
-"      %(fmt)T\toutput the date-time string resulting from using FMT as a "
-"format\n"
+"      %Q\tlike %q, but apply any precision to the unquoted argument before\n"
+"    \t\tquoting\n"
+"      %(fmt)T\toutput the date-time string resulting from using FMT as a format\n"
 "    \t        string for strftime(3)\n"
 "    \n"
 "    The format is re-used as necessary to consume all of the arguments.  If\n"
 "    there are fewer arguments than the format requires,  extra format\n"
-"    specifications behave as if a zero value or null string, as "
-"appropriate,\n"
+"    specifications behave as if a zero value or null string, as appropriate,\n"
 "    had been supplied.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success unless an invalid option is given or a write or "
-"assignment\n"
+"    Returns success unless an invalid option is given or a write or assignment\n"
 "    error occurs."
 msgstr ""
-
-#: builtins.c:1971
+"Formatează și imprimă ARGUMENTELE sub controlul FORMATului.\n"
+"    \n"
+"    Opțiuni:\n"
+"      -v var\tasignează ieșirea variabilei shell VAR, în loc să o\n"
+"    \t\tafișeze la ieșirea standard\n"
+"    \n"
+"    FORMAT este un șir de caractere care conține trei tipuri de obiecte: \n"
+"    caractere simple, care sunt pur și simplu copiate la ieșirea standard; \n"
+"    secvențe de eludare de caractere, care sunt convertite și copiate la \n"
+"    ieșirea standard; și specificații de format, fiecare dintre acestea \n"
+"    determinând imprimarea următorului argument succesiv.\n"
+"    \n"
+"    În plus față de specificațiile de format standard descrise în printf(1),\n"
+"    «printf» interpretează:\n"
+"    \n"
+"      %b\texpandează secvențele de eludare de bară inversată,\n"
+"          \tîn argumentul corespunzător\n"
+"      %q\tcitează argumentul într-un mod care poate fi reutilizat\n"
+"          \tca intrare shell\n"
+"      %Q\tprecum %q, dar aplică orice precizie argumentului necitat\n"
+"    \t\tînainte de al cita\n"
+"      %(fmt)T\tafișează șirul dată-oră rezultat din utilizarea FMT,\n"
+"          \tca șir de format pentru strftime(3)\n"
+"    \n"
+"    Formatul este reutilizat după cum este necesar pentru a consuma toate\n"
+"    argumentele. Dacă există mai puține argumente decât necesită formatul,\n"
+"    specificațiile de format suplimentare se comportă ca și cum ar fi fost\n"
+"    furnizată o valoare zero sau un șir nul, după caz.\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Returnează succes cu excepția cazului în care este dată o opțiune nevalidă\n"
+"    sau apare o eroare de scriere sau de atribuire."
+
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help complete», din «bash»;
+# «bash -c "help complete», din «bash», sau
+# dintr-un shell, diferit de «bash».
+#: builtins.c:1974
 msgid ""
 "Specify how arguments are to be completed by Readline.\n"
 "    \n"
-"    For each NAME, specify how arguments are to be completed.  If no "
-"options\n"
-"    are supplied, existing completion specifications are printed in a way "
-"that\n"
+"    For each NAME, specify how arguments are to be completed.  If no options\n"
+"    are supplied, existing completion specifications are printed in a way that\n"
 "    allows them to be reused as input.\n"
 "    \n"
 "    Options:\n"
@@ -4241,38 +6131,79 @@ msgid ""
 "    \t\tcommand) word\n"
 "    \n"
 "    When completion is attempted, the actions are applied in the order the\n"
-"    uppercase-letter options are listed above. If multiple options are "
-"supplied,\n"
-"    the -D option takes precedence over -E, and both take precedence over -"
-"I.\n"
+"    uppercase-letter options are listed above. If multiple options are supplied,\n"
+"    the -D option takes precedence over -E, and both take precedence over -I.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns success unless an invalid option is supplied or an error occurs."
 msgstr ""
-
-#: builtins.c:2001
+"Specifică modul în care argumentele vor fi completate de Readline.\n"
+"    \n"
+"    Pentru fiecare NUME, specifică cum vor fi completate argumentele. Dacă\n"
+"    nu sunt furnizate opțiuni, specificațiile de completare existente sunt\n"
+"    imprimate într-un mod care să permită reutilizarea lor ca intrare\n"
+"    \n"
+"    Opțiuni:\n"
+"      -p\tafișează specificațiile de completare existente într-un format\n"
+"    \t\treutilizabil\n"
+"      -r\telimină o specificație de completare pentru fiecare NUME sau,\n"
+"    \t\tdacă nu sunt furnizate NUME, toate specificațiile de completare\n"
+"      -D\taplicați completările și acțiunile ca implicite pentru comenzi\n"
+"    \t\tfără nicio completare specifică definită\n"
+"      -E\taplică completările și acțiunile pentru comenzile „goale” --\n"
+"    \t\tcând se încearcă completarea într-o linie goală\n"
+"      -I\taplică completările și acțiunile la cuvântul inițial (de obicei\n"
+"    \t\tcomanda).\n"
+"    \n"
+"    Când se încearcă completarea, acțiunile sunt aplicate în ordinea în care\n"
+"    opțiunile cu litere mari sunt listate mai sus.  Dacă sunt furnizate mai multe\n"
+"    opțiuni, opțiunea „-D” are prioritate față de „-E” și ambele au prioritate\n"
+"    față de opțiunea „-I”.\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Returnează succes, cu excepția cazului în care este furnizată o opțiune\n"
+"    nevalidă sau apare o eroare."
+
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help compgen», din «bash»;
+# «bash -c "help compgen», din «bash», sau
+# dintr-un shell, diferit de «bash».
+#: builtins.c:2004
 msgid ""
 "Display possible completions depending on the options.\n"
 "    \n"
 "    Intended to be used from within a shell function generating possible\n"
-"    completions.  If the optional WORD argument is supplied, matches "
-"against\n"
+"    completions.  If the optional WORD argument is supplied, matches against\n"
 "    WORD are generated.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns success unless an invalid option is supplied or an error occurs."
 msgstr ""
+"Afișează posibilele completări în funcție de opțiuni.\n"
+"    \n"
+"    Aceasta este destinată să fie utilizată dintr-o funcție shell care generează\n"
+"    posibile completări.  Dacă este furnizat argumentul opțional CUVÂNT, se\n"
+"    generează potriviri cu CUVÂNT.\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Returnează succes, cu excepția cazului în care este furnizată o opțiune\n"
+"    nevalidă sau apare o eroare."
 
-#: builtins.c:2016
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help compopt», din «bash»;
+# «bash -c "help compopt», din «bash», sau
+# dintr-un shell, diferit de «bash».
+#: builtins.c:2019
 msgid ""
 "Modify or display completion options.\n"
 "    \n"
-"    Modify the completion options for each NAME, or, if no NAMEs are "
-"supplied,\n"
-"    the completion currently being executed.  If no OPTIONs are given, "
-"print\n"
-"    the completion options for each NAME or the current completion "
-"specification.\n"
+"    Modify the completion options for each NAME, or, if no NAMEs are supplied,\n"
+"    the completion currently being executed.  If no OPTIONs are given, print\n"
+"    the completion options for each NAME or the current completion specification.\n"
 "    \n"
 "    Options:\n"
 "    \t-o option\tSet completion option OPTION for each NAME\n"
@@ -4294,27 +6225,55 @@ msgid ""
 "    Returns success unless an invalid option is supplied or NAME does not\n"
 "    have a completion specification defined."
 msgstr ""
-
-#: builtins.c:2047
+"Modifică sau afișează opțiunile de completare.\n"
+"    \n"
+"    Modifică opțiunile de completare pentru fiecare NUME sau, dacă nu sunt \n"
+"    furnizate NUME, completarea aflată în curs de executare.  Dacă nu sunt \n"
+"    date OPȚIUNI, afișează opțiunile de completare pentru fiecare NUME sau \n"
+"    specificația de completare curentă.\n"
+"    \n"
+"    Opțiuni:\n"
+"    \t-o opțiune\n"
+"      \t\tStabilește opțiunea de completare OPȚIUNE pentru fiecare NUME\n"
+"    \t-D\tSchimbă opțiunile pentru completarea comenzii „implicite”.\n"
+"    \t-E\tSchimbă opțiunile pentru completarea comenzii „goale”.\n"
+"    \t-I\tSchimbă opțiunile de completare a cuvântului inițial\n"
+"    \n"
+"    Utilizarea lui „+o” în loc de „-o” dezactivează opțiunea specificată.\n"
+"    \n"
+"    Argumente:\n"
+"    \n"
+"    Fiecare NUME se referă la o comandă pentru care o specificație de completare\n"
+"    trebuie să fi fost definită anterior folosind comanda internă «complete».  \n"
+"    Dacă nu sunt furnizate NUME, «compopt» trebuie să fie apelată de o funcție \n"
+"    care generează completări în acest moment și opțiunile pentru acest \n"
+"   generator de completare care se execută acum, sunt modificate.\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Returnează succes, cu excepția cazului în care este furnizată o opțiune \n"
+"    nevalidă sau NUME nu are o specificație de completare definită."
+
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help mapfile», din «bash»;
+# «bash -c "help mapfile», din «bash», sau
+# dintr-un shell, diferit de «bash».
+#: builtins.c:2050
 msgid ""
 "Read lines from the standard input into an indexed array variable.\n"
 "    \n"
-"    Read lines from the standard input into the indexed array variable "
-"ARRAY, or\n"
-"    from file descriptor FD if the -u option is supplied.  The variable "
-"MAPFILE\n"
+"    Read lines from the standard input into the indexed array variable ARRAY, or\n"
+"    from file descriptor FD if the -u option is supplied.  The variable MAPFILE\n"
 "    is the default ARRAY.\n"
 "    \n"
 "    Options:\n"
 "      -d delim\tUse DELIM to terminate lines, instead of newline\n"
-"      -n count\tCopy at most COUNT lines.  If COUNT is 0, all lines are "
-"copied\n"
-"      -O origin\tBegin assigning to ARRAY at index ORIGIN.  The default "
-"index is 0\n"
+"      -n count\tCopy at most COUNT lines.  If COUNT is 0, all lines are copied\n"
+"      -O origin\tBegin assigning to ARRAY at index ORIGIN.  The default index is 0\n"
 "      -s count\tDiscard the first COUNT lines read\n"
 "      -t\tRemove a trailing DELIM from each line read (default newline)\n"
-"      -u fd\tRead lines from file descriptor FD instead of the standard "
-"input\n"
+"      -u fd\tRead lines from file descriptor FD instead of the standard input\n"
 "      -C callback\tEvaluate CALLBACK each time QUANTUM lines are read\n"
 "      -c quantum\tSpecify the number of lines read between each call to\n"
 "    \t\t\tCALLBACK\n"
@@ -4327,2421 +6286,65 @@ msgid ""
 "    element to be assigned and the line to be assigned to that element\n"
 "    as additional arguments.\n"
 "    \n"
-"    If not supplied with an explicit origin, mapfile will clear ARRAY "
-"before\n"
+"    If not supplied with an explicit origin, mapfile will clear ARRAY before\n"
 "    assigning to it.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success unless an invalid option is given or ARRAY is readonly "
-"or\n"
+"    Returns success unless an invalid option is given or ARRAY is readonly or\n"
 "    not an indexed array."
 msgstr ""
-
-#: builtins.c:2083
+"Citește linii de la intrarea standard într-o variabilă matrice indexată.\n"
+"    \n"
+"    Citește linii de la intrarea standard în variabila matrice indexată MATRICE,\n"
+"    sau din descriptorul de fișier „FD” dacă este furnizată opțiunea „-u”.\n"
+"    Variabila MAPFILE este MATRICEA implicită.\n"
+"    \n"
+"    Opțiuni:\n"
+"      -d delim  Utilizează DELIM pentru a termina liniile, în loc de linie nouă\n"
+"      -n număr  Copiază cel mult NUMĂRul de rânduri. Dacă NUMĂR este 0,\n"
+"                toate liniile sunt copiate\n"
+"      -O origin Începe alocarea către MATRICE la indexul ORIGIN.  Indicele\n"
+"                implicit este 0\n"
+"      -s count  Renunță la primele COUNT rânduri citite\n"
+"      -t        Elimină un DELIM final din fiecare linie citită (implicit,\n"
+"                linie nouă)\n"
+"      -u fd     Citește linii din descriptorul de fișier „FD” în loc de la\n"
+"                intrarea standard\n"
+"      -C apelare\n"
+"                Evaluează APELARE de fiecare dată când sunt citite linii CANTITATE\n"
+"      -c cantitate\n"
+"                Specifică numărul de linii citite între fiecare apel către APELARE\n"
+"    \n"
+"    Argumente:\n"
+"      MATRICE\tNume variabilă matrice de utilizat pentru datele fișierului\n"
+"    \n"
+"    Dacă „-C” este furnizată fără „-c”, cantitatea implicită este 5000.  Când se\n"
+"    evaluează APELARE, i se furnizează indexul următorului element din matrice\n"
+"    care urmează să fie atribuit și linia care urmează să fie atribuită\n"
+"    acelui element ca argumente suplimentare.\n"
+"    \n"
+"    Dacă nu este furnizat cu o origine explicită, «mapfile» va șterge MATRICE\n"
+"    înainte de a-o utiliza pentru asignare.\n"
+"    \n"
+"    Starea de ieșire:\n"
+"    Returnează succes, cu excepția cazului în care este dată o opțiune nevalidă\n"
+"    sau MATRICE este protejată la scriere sau nu este o matrice indexată."
+
+# R-GC, scrie:
+# acest mesaj, poate să fie vizualizat, rulînd
+# comanda:
+# «help readarray», din «bash»;
+# «bash -c "help array», din «bash», sau
+# dintr-un shell, diferit de «bash».
+#: builtins.c:2086
 msgid ""
 "Read lines from a file into an array variable.\n"
 "    \n"
 "    A synonym for `mapfile'."
 msgstr ""
+"Citește linii dintr-un fișier într-o variabilă de tip matrice.\n"
+"    \n"
+"    Un sinonim pentru «mapfile»."
 
-#~ msgid ""
-#~ "Returns the context of the current subroutine call.\n"
-#~ "    \n"
-#~ "    Without EXPR, returns "
-#~ msgstr ""
-#~ "Returnează contextul apelului subrutină curent.\n"
-#~ "   \n"
-#~ "   Fără EXPR, returnează "
-
-#~ msgid "Unknown Signal #"
-#~ msgstr "Semnal Necunoscut #"
-
-#~ msgid "Missing `}'"
-#~ msgstr "`}' lipsă"
-
-#~ msgid "brace_expand> "
-#~ msgstr "brace_expand> "
-
-#~ msgid "Attempt to free unknown command type `%d'.\n"
-#~ msgstr "Încercare de eliberare(free) tip comandă necunoscută `%d'.\n"
-
-#~ msgid "Report this to %s\n"
-#~ msgstr "Raportaţi asta la %s\n"
-
-#~ msgid "Stopping myself..."
-#~ msgstr "Mă opresc..."
-
-#~ msgid "Tell %s to fix this someday.\n"
-#~ msgstr "Spuneţi lui %s să repare asta într-o bun zi.\n"
-
-#~ msgid "execute_command: bad command type `%d'"
-#~ msgstr "execute_command: tip de comandă greşită `%d'"
-
-#~ msgid "real\t"
-#~ msgstr "real\t"
-
-#~ msgid "user\t"
-#~ msgstr "user\t"
-
-#~ msgid "sys\t"
-#~ msgstr "sis\t"
-
-#~ msgid ""
-#~ "real\t0m0.00s\n"
-#~ "user\t0m0.00s\n"
-#~ "sys\t0m0.00s\n"
-#~ msgstr ""
-#~ "real\t0m0.00s\n"
-#~ "user\t0m0.00s\n"
-#~ "sis\t0m0.00s\n"
-
-#~ msgid "cannot duplicate fd %d to fd 1: %s"
-#~ msgstr "nu se poate duplica fd %d în fd 1: %s"
-
-#~ msgid "%s: output redirection restricted"
-#~ msgstr "%s redirectare spre output limitată"
-
-#~ msgid "Out of memory!"
-#~ msgstr "Memorie plină!"
-
-#~ msgid "You have already added item `%s'\n"
-#~ msgstr "Aţi adăugat deja elementul `%s'\n"
-
-#~ msgid "You have entered %d (%d) items.  The distribution is:\n"
-#~ msgstr "Aţi introdus %d (%d) elemente.  Distribuţia este:\n"
-
-#~ msgid "slot %3d: "
-#~ msgstr "slot %3d: "
-
-#~ msgid "<unknown>"
-#~ msgstr "<necunoscut>"
-
-#~ msgid "%s: bg background job?"
-#~ msgstr "%s: bg job din fundal?"
-
-#~ msgid ""
-#~ "Redirection instruction from yyparse () '%d' is\n"
-#~ "out of range in make_redirection ()."
-#~ msgstr ""
-#~ "Redirectare instrucţiune din yyparse () '%d' is\n"
-#~ "în afara intervalului în make_redirection ()."
-
-#~ msgid "clean_simple_command () got a command with type %d."
-#~ msgstr "clean_simple_command () a primit o comandă de tipul %d."
-
-#~ msgid "got errno %d while waiting for %d"
-#~ msgstr "s-a primit errno %d în aşteptarea lui %d"
-
-#~ msgid "syntax error near unexpected token `%c'"
-#~ msgstr "eroare de sintaxă neaşteptată lângă `%c'"
-
-#~ msgid "print_command: bad command type `%d'"
-#~ msgstr "print_command: tip comandă greşit `%d'"
-
-#~ msgid "cprintf: bad `%%' argument (%c)"
-#~ msgstr "cprintf: parametru `%%'  invalid (%c)"
-
-#~ msgid "option `%s' requires an argument"
-#~ msgstr "opţiunea `%s' necesită un parametru"
-
-#~ msgid "%s: unrecognized option"
-#~ msgstr "%s: opţiune necunoscută"
-
-#~ msgid "`-c' requires an argument"
-#~ msgstr "`-c' necesită un parametru"
-
-#~ msgid "%s: cannot execute directories"
-#~ msgstr "%s: directoarele nu se pot executa"
-
-#~ msgid "Bad code in sig.c: sigprocmask"
-#~ msgstr "Cod invalid în sig.c: sigprocmask"
-
-#~ msgid "can't make pipes for process substitution: %s"
-#~ msgstr "nu pot face legături (pipes) pentru substituţia procesului: %s"
-
-#~ msgid "reading"
-#~ msgstr "în citire"
-
-#~ msgid "writing"
-#~ msgstr "în scriere"
-
-#~ msgid "process substitution"
-#~ msgstr "substituire de proces"
-
-#~ msgid "command substitution"
-#~ msgstr "substituire de comenzi"
-
-#~ msgid "Can't reopen pipe to command substitution (fd %d): %s"
-#~ msgstr ""
-#~ "Nu se poate redeschide legătura (pipe) către substituţia de comenzi (fd "
-#~ "%d): %s"
-
-#~ msgid "$%c: unbound variable"
-#~ msgstr "$%c: variabilă fără limită"
-
-#~ msgid "%s: bad arithmetic substitution"
-#~ msgstr "%s: substituţie aritmetică greşită"
-
-#~ msgid "-%s: binary operator expected"
-#~ msgstr "-%s: se aşteaptă operator binar"
-
-#~ msgid "%s[%s: bad subscript"
-#~ msgstr "%s[%s: subsctipţie invalidă"
-
-#~ msgid "[%s: bad subscript"
-#~ msgstr "[%s: subscripţie invalidă"
-
-#~ msgid "xrealloc: cannot reallocate %lu bytes (%lu bytes allocated)"
-#~ msgstr "xrealloc: nu pot realoca %lu octeţi (%lu octeţi alocaţi)"
-
-#~ msgid "digits occur in two different argv-elements.\n"
-#~ msgstr "se regăsesc digiţi în două elemente argv diferite.\n"
-
-#~ msgid "option %c\n"
-#~ msgstr "opţiunea %c\n"
-
-#~ msgid "option a\n"
-#~ msgstr "opţiunea a\n"
-
-#~ msgid "option b\n"
-#~ msgstr "opţiunea b\n"
-
-#~ msgid "option c with value `%s'\n"
-#~ msgstr "opţiunea c cu valoarea '%s'\n"
-
-#~ msgid "?? sh_getopt returned character code 0%o ??\n"
-#~ msgstr "?? sh_getopt a returnat codul de caracter 0%o ??\n"
-
-#~ msgid "non-option ARGV-elements: "
-#~ msgstr "elemente ARGV fără opţiuni: "
-
-#~ msgid "%s: Unknown flag %s.\n"
-#~ msgstr "%s: Marcaj (flag) necunoscut %s.\n"
-
-#~ msgid "Unknown directive `%s'"
-#~ msgstr "Directivă necunoscută '%s'"
-
-#~ msgid "%s must be inside of a $BUILTIN block"
-#~ msgstr "%s trebuie sa fie înăuntrul unui bloc $BUILTIN"
-
-#~ msgid "%s found before $END"
-#~ msgstr "s-a găsit %s înainte de $END"
-
-#~ msgid "%s already has a function (%s)"
-#~ msgstr "%s avea deja o funcţie (%s)"
-
-#~ msgid "%s already had a docname (%s)"
-#~ msgstr "%s avea deja un docname (%s)"
-
-#~ msgid "%s already has short documentation (%s)"
-#~ msgstr "%s are deja documentaţie scurtă (%s)"
-
-#~ msgid "%s already has a %s definition"
-#~ msgstr "%s are deja o definiţie %s"
-
-#~ msgid "mkbuiltins: Out of virtual memory!\n"
-#~ msgstr "mkbuiltins: Memorie virtuală plină!\n"
-
-#~ msgid ":"
-#~ msgstr ":"
-
-#~ msgid "read [-r] [-p prompt] [-a array] [-e] [name ...]"
-#~ msgstr "read [-r] [-p prompt] [-a interval] [-e] [nume ...]"
-
-#~ msgid "times"
-#~ msgstr "ori"
-
-#~ msgid "%[DIGITS | WORD] [&]"
-#~ msgstr "%[DIGIŢI | CUVÂNT] [&]"
-
-#~ msgid "variables - Some variable names and meanings"
-#~ msgstr "variabile - Câteva nume de variabile şi ce înseamnă"
-
-#~ msgid "`alias' with no arguments or with the -p option prints the list"
-#~ msgstr "`alias' fără parametri  sau cu opţiunea -p printează lista"
-
-#~ msgid "of aliases in the form alias NAME=VALUE on standard output."
-#~ msgstr "aliasurilor în forma alias NUME=VALOARE la ieşirea standard"
-
-#~ msgid "Otherwise, an alias is defined for each NAME whose VALUE is given."
-#~ msgstr ""
-#~ "În caz contrar, aliasul este definit pentru fiecare NUME a cărui VALOARE "
-#~ "este dată."
-
-#~ msgid "A trailing space in VALUE causes the next word to be checked for"
-#~ msgstr ""
-#~ "Un spaţiu la sfârşit în VALOARE va face ca următorul cuvânt sa fie "
-#~ "interogat de"
-
-#~ msgid "alias substitution when the alias is expanded.  Alias returns"
-#~ msgstr "substituţii de alias când aliasul este extins.  Aliasul returnează"
-
-#~ msgid "true unless a NAME is given for which no alias has been defined."
-#~ msgstr ""
-#~ "adevărat în afară de cazul în care NUME nu este dat şi pentru care nu a "
-#~ "fost definit nici un alias."
-
-#~ msgid ""
-#~ "Remove NAMEs from the list of defined aliases.  If the -a option is given,"
-#~ msgstr ""
-#~ "Elimină NUME din lista de aliasuri definite.  Dacă este dată opţiunea -a,"
-
-#~ msgid "then remove all alias definitions."
-#~ msgstr "atunci şterge toate definiţiile aliasurilor."
-
-#~ msgid "Bind a key sequence to a Readline function, or to a macro.  The"
-#~ msgstr ""
-#~ "Leagă (bind) o secvenţă de taste de o funcţie Readline, sau de un macro.  "
-
-#~ msgid "syntax is equivalent to that found in ~/.inputrc, but must be"
-#~ msgstr ""
-#~ "Sintaxa este echivalentă cu cea întâlnită în ~/.inputrc, dar trebuie"
-
-#~ msgid ""
-#~ "passed as a single argument: bind '\"\\C-x\\C-r\": re-read-init-file'."
-#~ msgstr ""
-#~ "trimisă parametru singular: bind '\"\\C-x\\C-r\": re-read-init-file'."
-
-#~ msgid "Arguments we accept:"
-#~ msgstr "Parametri acceptaţi:"
-
-#~ msgid ""
-#~ "  -m  keymap         Use `keymap' as the keymap for the duration of this"
-#~ msgstr ""
-#~ "  -m  keymap         Foloseşte `keymap' ca şi mapare de taste pentru "
-#~ "durata"
-
-#~ msgid "                     command.  Acceptable keymap names are emacs,"
-#~ msgstr ""
-#~ "                      acestei comenzi.  Nume acceptate de keymaps sunt "
-#~ "emacs,"
-
-#~ msgid ""
-#~ "                     emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,"
-#~ msgstr ""
-#~ "                     emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,"
-
-#~ msgid "                     vi-command, and vi-insert."
-#~ msgstr "                     vi-command, şi vi-insert."
-
-#~ msgid "  -l                 List names of functions."
-#~ msgstr "  -l                 Listează numele funcţiilor."
-
-#~ msgid "  -P                 List function names and bindings."
-#~ msgstr ""
-#~ "  -P                 Listează numele funcţiilor şi legăturile (bindings)."
-
-#~ msgid ""
-#~ "  -p                 List functions and bindings in a form that can be"
-#~ msgstr ""
-#~ "  -p                 Listează funcţiile şi legăturile (bindings) într-o "
-#~ "formă care"
-
-#~ msgid "                     reused as input."
-#~ msgstr "                     poate fi refolosită ca intrare(input)."
-
-#~ msgid "  -r  keyseq         Remove the binding for KEYSEQ."
-#~ msgstr "  -r  keyseq         Elimină legăturile(bindings) pentru KEYSEQ."
-
-#~ msgid "  -f  filename       Read key bindings from FILENAME."
-#~ msgstr ""
-#~ "  -f  nume_fişier       Citeşte legăturile (bindings) din NUME_FIŞIER"
-
-#~ msgid ""
-#~ "  -q  function-name  Query about which keys invoke the named function."
-#~ msgstr "  -q  nume_funcţie  Verifică tastele care invocă funcţia numită."
-
-#~ msgid "  -V                 List variable names and values"
-#~ msgstr "  -V                 Listează numele variabilelor şi valorile"
-
-#~ msgid ""
-#~ "  -v                 List variable names and values in a form that can"
-#~ msgstr ""
-#~ "  -v                 Listează numele variabilelor şi valorile într-o "
-#~ "formă care poate"
-
-#~ msgid "                     be reused as input."
-#~ msgstr "                     fi reutilizată ca date de intrare."
-
-#~ msgid ""
-#~ "  -S                 List key sequences that invoke macros and their "
-#~ "values"
-#~ msgstr ""
-#~ "  -S                 Listează secvenţele de taste care invocă macrourile "
-#~ "şi valorile lor"
-
-#~ msgid ""
-#~ "  -s                 List key sequences that invoke macros and their "
-#~ "values in"
-#~ msgstr ""
-#~ "  -s                 Listează secvenţele de taste care invocă macrourile "
-#~ "şi valorile lorîntr-o"
-
-#~ msgid "                     a form that can be reused as input."
-#~ msgstr ""
-#~ "                     formă care poate fi reutilizată ca date de intrare."
-
-#~ msgid "Exit from within a FOR, WHILE or UNTIL loop.  If N is specified,"
-#~ msgstr ""
-#~ "Ieşire dintr-un ciclu FOR, WHILE sau UNTIL.  Daca N este specificat,"
-
-#~ msgid "break N levels."
-#~ msgstr "întrerupe N nivele"
-
-#~ msgid "Resume the next iteration of the enclosing FOR, WHILE or UNTIL loop."
-#~ msgstr ""
-#~ "Continuă urmatoarea iteraţie din ciclul închis FOR, WHILE sau UNTIL."
-
-#~ msgid "If N is specified, resume at the N-th enclosing loop."
-#~ msgstr "Dacă N este specificat, continuă al N-ulea ciclu închis."
-
-#~ msgid "Run a shell builtin.  This is useful when you wish to rename a"
-#~ msgstr ""
-#~ "Rulează un shell intern.  Aceasta este folositoare când doriţi sa "
-#~ "redenumiţi "
-
-#~ msgid "shell builtin to be a function, but need the functionality of the"
-#~ msgstr "un shell intern drept funcţie, dar aveţi nevoie de funcţionalitatea"
-
-#~ msgid "builtin within the function itself."
-#~ msgstr "funcţiei interne de asemenea."
-
-#~ msgid "Change the current directory to DIR.  The variable $HOME is the"
-#~ msgstr "Schimbă directorul curent cu DIR.  Variabila $HOME este"
-
-#~ msgid "default DIR.  The variable $CDPATH defines the search path for"
-#~ msgstr "DIR implicit.  Variabila $CDPATH defineşte calea de căutare pentru"
-
-#~ msgid "the directory containing DIR.  Alternative directory names in CDPATH"
-#~ msgstr ""
-#~ "directorul care conţine DIR.  Numele de directoare alternative în CDPATH"
-
-#~ msgid "are separated by a colon (:).  A null directory name is the same as"
-#~ msgstr ""
-#~ "sunt separate de două puncte (:).  Un nume de director nul reprezintă "
-#~ "referire la"
-
-#~ msgid "the current directory, i.e. `.'.  If DIR begins with a slash (/),"
-#~ msgstr "directorul curent, i.e. `.'.  Dacă DIR începe cu un slash (/),"
-
-#~ msgid "then $CDPATH is not used.  If the directory is not found, and the"
-#~ msgstr "atunci $CDPATH nu este folosită.  Dacă directorul nu este găsit, şi"
-
-#~ msgid "shell option `cdable_vars' is set, then try the word as a variable"
-#~ msgstr ""
-#~ "opţiunea de shell `cdable_vars' este setată, atunci cuvântul este un nume"
-
-#~ msgid "name.  If that variable has a value, then cd to the value of that"
-#~ msgstr ""
-#~ "de variabilă.  Dacă variabila are o valoare, se va face cd pe valoarea "
-#~ "acelei"
-
-#~ msgid ""
-#~ "variable.  The -P option says to use the physical directory structure"
-#~ msgstr ""
-#~ "variabile.  Opţiunea -P trimite la folosirea structurii fizice de "
-#~ "directoare"
-
-#~ msgid ""
-#~ "instead of following symbolic links; the -L option forces symbolic links"
-#~ msgstr ""
-#~ "în loc de urmarea legăturilor simbolice; opţiunea -L forţează urmarea"
-
-#~ msgid "to be followed."
-#~ msgstr "legăturilor simbolice."
-
-#~ msgid "Print the current working directory.  With the -P option, pwd prints"
-#~ msgstr "Afişează directorul de lucru curent.  Cu opţiunea -P, pwd afişează"
-
-#~ msgid "the physical directory, without any symbolic links; the -L option"
-#~ msgstr "directoarele simbolice, fără nici o legătură simbolică; opţiunea -L"
-
-#~ msgid "makes pwd follow symbolic links."
-#~ msgstr "face ca pwd să urmeze legăturile simbolice."
-
-#~ msgid ""
-#~ "Runs COMMAND with ARGS ignoring shell functions.  If you have a shell"
-#~ msgstr ""
-#~ "Rulează COMANDA cu PARAMETRI ignorând funcţiile shellului.  Dacă aveţi"
-
-#~ msgid "function called `ls', and you wish to call the command `ls', you can"
-#~ msgstr ""
-#~ "o funcţie a shellului care se cheamă `ls', şi doriţi sa numiţi comanda "
-#~ "`ls', puteţi"
-
-#~ msgid ""
-#~ "say \"command ls\".  If the -p option is given, a default value is used"
-#~ msgstr ""
-#~ "spune \"command ls\".  Daca este dată opţiunea -p este folosită o valoare "
-#~ "implicită"
-
-#~ msgid ""
-#~ "for PATH that is guaranteed to find all of the standard utilities.  If"
-#~ msgstr ""
-#~ "pentru CALE care e garantată să găsească toate utilitarele standard.  Dacă"
-
-#~ msgid ""
-#~ "the -V or -v option is given, a string is printed describing COMMAND."
-#~ msgstr ""
-#~ "sunt date opţiunile -V sau -v, este tipărit un şir care descrie COMANDA."
-
-#~ msgid "The -V option produces a more verbose description."
-#~ msgstr "Opţiunea -V produce o descriere mult mai detaliată."
-
-#~ msgid "Declare variables and/or give them attributes.  If no NAMEs are"
-#~ msgstr ""
-#~ "Declară variabile şi/sau le dă atribute.  Dacă nu e dat nici un NUME,"
-
-#~ msgid "given, then display the values of variables instead.  The -p option"
-#~ msgstr "va afişa în loc valorile variabilelor.  Opţiunea -p"
-
-#~ msgid "will display the attributes and values of each NAME."
-#~ msgstr "va afişa atributele şi valorile fiecărui NUME."
-
-#~ msgid "The flags are:"
-#~ msgstr "Marcajele(flags) sunt:"
-
-#~ msgid "  -a\tto make NAMEs arrays (if supported)"
-#~ msgstr "  -a\tpentru a crea intervale de NUME (dacă este suportat)"
-
-#~ msgid "  -f\tto select from among function names only"
-#~ msgstr "  -f\tpentru a selecta doar prin numele funcţiilor"
-
-#~ msgid "  -F\tto display function names without definitions"
-#~ msgstr "  -F\tpentru a afişa numele funcţiilor fără definiţii"
-
-#~ msgid "  -r\tto make NAMEs readonly"
-#~ msgstr "  -r\tpentru a face NUME doar în citire (readonly)"
-
-#~ msgid "  -x\tto make NAMEs export"
-#~ msgstr "  -x\tpentru a exporta NUME"
-
-#~ msgid "  -i\tto make NAMEs have the `integer' attribute set"
-#~ msgstr "  -i\tpentru ca NUME să aibe setat atributul de `integer'"
-
-#~ msgid "Variables with the integer attribute have arithmetic evaluation (see"
-#~ msgstr "Variabilele cu atributul integer au evaluarea aritmetică (vezi"
-
-#~ msgid "`let') done when the variable is assigned to."
-#~ msgstr "`let') efectuată când îi este atribuită variabila."
-
-#~ msgid "When displaying values of variables, -f displays a function's name"
-#~ msgstr "La afişarea valorilor variabilelor, -f afişează numele funcţiei"
-
-#~ msgid "and definition.  The -F option restricts the display to function"
-#~ msgstr "şi definiţia.  Opţiunea -F restrânge afişarea doar la"
-
-#~ msgid "name only."
-#~ msgstr "numele funcţiei."
-
-#~ msgid ""
-#~ "Using `+' instead of `-' turns off the given attribute instead.  When"
-#~ msgstr "Folosirea `+' în locul `-' dezactivează atributul dat.  Când"
-
-#~ msgid "used in a function, makes NAMEs local, as with the `local' command."
-#~ msgstr ""
-#~ "este folosit într-o funcţie, se consideră NUME locale, ca şi în comanda "
-#~ "`local'."
-
-#~ msgid "Obsolete.  See `declare'."
-#~ msgstr "Învechit.  Vezi `declare'."
-
-#~ msgid "Create a local variable called NAME, and give it VALUE.  LOCAL"
-#~ msgstr ""
-#~ "Creează o variabilă locală denumită NUME, şi îi atribuie VALOARE.  LOCAL"
-
-#~ msgid "have a visible scope restricted to that function and its children."
-#~ msgstr ""
-#~ "să aibă un domeniu vizibil restrâns la acea funcţie şi copilul (children) "
-#~ "ei."
-
-#~ msgid "Output the ARGs.  If -n is specified, the trailing newline is"
-#~ msgstr ""
-#~ "Afişează (output) ARGumenetele.  Dacă -n este specificat,sfârşitul de "
-#~ "linie este"
-
-#~ msgid "suppressed.  If the -e option is given, interpretation of the"
-#~ msgstr "suprimat.  Dacă este dată opţiunea -e, interpretarea"
-
-#~ msgid "following backslash-escaped characters is turned on:"
-#~ msgstr ""
-#~ "următorului caracterelor speciale (backslash-escaped) este activată:"
-
-#~ msgid "\t\\a\talert (bell)"
-#~ msgstr "\t\\a\talertă (clopoţel (bell))"
-
-#~ msgid "\t\\b\tbackspace"
-#~ msgstr "\t\\b\tbackspace"
-
-#~ msgid "\t\\c\tsuppress trailing newline"
-#~ msgstr "\t\\c\tsuprimă sfârşitul de linie"
-
-#~ msgid "\t\\E\tescape character"
-#~ msgstr "\t\\E\tcaracterul escape"
-
-#~ msgid "\t\\f\tform feed"
-#~ msgstr "\t\\f\ttrecere la început de linie (form feed)"
-
-#~ msgid "\t\\n\tnew line"
-#~ msgstr "\t\\n\tlinie nouă"
-
-#~ msgid "\t\\r\tcarriage return"
-#~ msgstr "\t\\r\tretur de car (carriage return)"
-
-#~ msgid "\t\\t\thorizontal tab"
-#~ msgstr "\t\\t\ttab orizontal"
-
-#~ msgid "\t\\v\tvertical tab"
-#~ msgstr "\t\\v\ttab vertical"
-
-#~ msgid "\t\\\\\tbackslash"
-#~ msgstr "\t\\\\\tbackslash"
-
-#~ msgid "\t\\num\tthe character whose ASCII code is NUM (octal)."
-#~ msgstr "\t\\num\tcaracterul al cărui cod ASCII este NUM (octal)."
-
-#~ msgid ""
-#~ "You can explicitly turn off the interpretation of the above characters"
-#~ msgstr "Puteţi dezactiva explicit interpretarea caracterelor de mai sus"
-
-#~ msgid "with the -E option."
-#~ msgstr "cu ajutorul opţiunii -E."
-
-#~ msgid ""
-#~ "Output the ARGs.  If -n is specified, the trailing newline is suppressed."
-#~ msgstr ""
-#~ "Afişează (output) ARGumentele. Dacă este specificat -n, sfârşitul de "
-#~ "linie este suprimat."
-
-#~ msgid "Enable and disable builtin shell commands.  This allows"
-#~ msgstr ""
-#~ "Activează şi dezactivează comenzile interne ale shell-ului.  Aceasta vă"
-
-#~ msgid "you to use a disk command which has the same name as a shell"
-#~ msgstr ""
-#~ "permite utilizarea unei comenzi disk care să aibă acelaşi nume ca şi cea "
-
-#~ msgid "builtin.  If -n is used, the NAMEs become disabled; otherwise"
-#~ msgstr ""
-#~ "internă a shell-ului.  Dacă este folosit -n, NUME devine dezactivat; în "
-#~ "caz contrar"
-
-#~ msgid "NAMEs are enabled.  For example, to use the `test' found on your"
-#~ msgstr ""
-#~ "NUME este activat.  De exemplu, pentru a folosi funcţia `test; aflată în"
-
-#~ msgid "path instead of the shell builtin version, type `enable -n test'."
-#~ msgstr ""
-#~ "calea(path) dumneavoastră în loc de versiunea internă, tastaţi `enable -n "
-#~ "test'."
-
-#~ msgid "On systems supporting dynamic loading, the -f option may be used"
-#~ msgstr ""
-#~ "Pe sistemele care suportă încărcarea dinamică, opţiunea -f poate fi "
-#~ "folosită"
-
-#~ msgid "to load new builtins from the shared object FILENAME.  The -d"
-#~ msgstr ""
-#~ "pentru a încărca noile elemente (builtins) din obiectul distribuit "
-#~ "(shared object) NUME_FIŞIER. Opţiunea -d"
-
-#~ msgid "option will delete a builtin previously loaded with -f.  If no"
-#~ msgstr "va şterge un element (builtin) deja încărcat cu -f. Dacă nu"
-
-#~ msgid "non-option names are given, or the -p option is supplied, a list"
-#~ msgstr ""
-#~ "este dat nici un nume non-opţiune, sau este prezentă opţiunea -p, o listă"
-
-#~ msgid "of builtins is printed.  The -a option means to print every builtin"
-#~ msgstr ""
-#~ "de elemente(builtins) este tipărită.  Opţiunea -a înseamnă tipărirea "
-#~ "fiecărui "
-
-#~ msgid "with an indication of whether or not it is enabled.  The -s option"
-#~ msgstr ""
-#~ "element(builtin) cu o indicaţie dacă este sau nu activ.  Opţiunea -s"
-
-#~ msgid "restricts the output to the Posix.2 `special' builtins.  The -n"
-#~ msgstr ""
-#~ "restricţionează output-ul la elementele(builtins) `speciale' Posix 2. "
-#~ "Opţiunea"
-
-#~ msgid "option displays a list of all disabled builtins."
-#~ msgstr "-n afişează o listă a tuturor elementelor(builtins) inactive."
-
-#~ msgid ""
-#~ "Read ARGs as input to the shell and execute the resulting command(s)."
-#~ msgstr ""
-#~ "Citeşte ARGumente ca input al shell-ului şi execută comanda(comenzile) "
-#~ "rezultată(e)."
-
-#~ msgid "Getopts is used by shell procedures to parse positional parameters."
-#~ msgstr ""
-#~ "Getopts este folosit de procedurile de shell pentru a analiza(parse) "
-#~ "parametrii poziţionali."
-
-#~ msgid "OPTSTRING contains the option letters to be recognized; if a letter"
-#~ msgstr ""
-#~ "OPTSTRING conţine literele optiunilor care vor fi recunoscute; dacă o "
-#~ "literă"
-
-#~ msgid "is followed by a colon, the option is expected to have an argument,"
-#~ msgstr "e urmată de două puncte, opţiunea va trebui să aibă un parametru,"
-
-#~ msgid "which should be separated from it by white space."
-#~ msgstr "care va fi separat de aceasta printr-un spaţiu."
-
-#~ msgid "Each time it is invoked, getopts will place the next option in the"
-#~ msgstr ""
-#~ "De fiecare dată când este invocat, getopts va pune următoarea opţiune în"
-
-#~ msgid "shell variable $name, initializing name if it does not exist, and"
-#~ msgstr "variabile de shell $name, iniţializând name dacă nu există, şi"
-
-#~ msgid "the index of the next argument to be processed into the shell"
-#~ msgstr "indexul următorilor parametri care vor fi procesaţi în variabila"
-
-#~ msgid "variable OPTIND.  OPTIND is initialized to 1 each time the shell or"
-#~ msgstr ""
-#~ "de shell OPTIND.  OPTIND este iniţializată cu 1 de fiecare dată când "
-#~ "shellul sau"
-
-#~ msgid "a shell script is invoked.  When an option requires an argument,"
-#~ msgstr ""
-#~ "un script al shellului este invocat.  Când opţiunea necesită un parametru,"
-
-#~ msgid "getopts places that argument into the shell variable OPTARG."
-#~ msgstr "getopts plasează acest parametru în variabila de shell OPTARG."
-
-#~ msgid "getopts reports errors in one of two ways.  If the first character"
-#~ msgstr "getopts raportează erori în două feluri.  Dacă primul caracter"
-
-#~ msgid "of OPTSTRING is a colon, getopts uses silent error reporting.  In"
-#~ msgstr ""
-#~ "al OPTSTRING este 'două puncte', getopts va folosi raportarea "
-#~ "silenţioasă.  În"
-
-#~ msgid "this mode, no error messages are printed.  If an illegal option is"
-#~ msgstr ""
-#~ "acest mod, nici un mesaj de eroare nu este tipărit.  Dacă o opţiune "
-#~ "ilegală este"
-
-#~ msgid "seen, getopts places the option character found into OPTARG.  If a"
-#~ msgstr "întâlnită, getopts plasează caracterul opţiunii în OPTARG.  Dacă un"
-
-#~ msgid "required argument is not found, getopts places a ':' into NAME and"
-#~ msgstr "parametru necesar nu este întâlnit, getopts pune ':' la NUME şi"
-
-#~ msgid "sets OPTARG to the option character found.  If getopts is not in"
-#~ msgstr ""
-#~ "setează OPTARG la caracterul întâlnit al opţiunii.  Dacă getopts nu este "
-#~ "în"
-
-#~ msgid "silent mode, and an illegal option is seen, getopts places '?' into"
-#~ msgstr ""
-#~ "modul silenţios, şi se întâlneşte o opţiune ilegală, getopts pune '?' în"
-
-#~ msgid "NAME and unsets OPTARG.  If a required option is not found, a '?'"
-#~ msgstr ""
-#~ "NUME şi desetează OPTARG.  Dacă o opţiune necesară nu este întâlnită, un "
-#~ "'?'"
-
-#~ msgid "is placed in NAME, OPTARG is unset, and a diagnostic message is"
-#~ msgstr ""
-#~ "va fi pus în NUME, OPTARG va fi desetat, şi un mesaj de diagnosticare va "
-#~ "fi"
-
-#~ msgid "printed."
-#~ msgstr "afişat."
-
-#~ msgid "If the shell variable OPTERR has the value 0, getopts disables the"
-#~ msgstr "Dacă variabila de shell OPTERR are valoarea 0, getopts dezactivează"
-
-#~ msgid "printing of error messages, even if the first character of"
-#~ msgstr "afişarea mesajelor de eroare, chiar daca primul caracter al"
-
-#~ msgid "OPTSTRING is not a colon.  OPTERR has the value 1 by default."
-#~ msgstr "OPTSTRING nu este 'două puncte'.  OPTERR are implicit valoarea 1."
-
-#~ msgid "Getopts normally parses the positional parameters ($0 - $9), but if"
-#~ msgstr ""
-#~ "Getopts analizează(parses) normal parametrii poziţionali ($0 - $9), dar "
-#~ "dacă"
-
-#~ msgid "more arguments are given, they are parsed instead."
-#~ msgstr "sunt daţi mai mulţi parametri, aceştia sunt analizaţi în loc."
-
-#~ msgid "Exec FILE, replacing this shell with the specified program."
-#~ msgstr "Exec FIŞIER, înlocuind acest shell cu un program specificat."
-
-#~ msgid "If FILE is not specified, the redirections take effect in this"
-#~ msgstr "Dacă FIŞIER nu este specificat, redirectările au efect în acest"
-
-#~ msgid "shell.  If the first argument is `-l', then place a dash in the"
-#~ msgstr ""
-#~ "shell.  Dacă primul parametru este `-l', atunci se va plasa o liniuţă în"
-
-#~ msgid "zeroth arg passed to FILE, as login does.  If the `-c' option"
-#~ msgstr ""
-#~ "al zero-ulea arg pasat FIŞIERului, cum face login-ul.  Dacă opţiunea `-c'"
-
-#~ msgid "is supplied, FILE is executed with a null environment.  The `-a'"
-#~ msgstr "este furnizată, FIŞIER este executat cu un mediu null.  Opţiunea"
-
-#~ msgid "option means to make set argv[0] of the executed process to NAME."
-#~ msgstr "'-a' înseamnă setarea argv[0] a procesului executat la NUME."
-
-#~ msgid "If the file cannot be executed and the shell is not interactive,"
-#~ msgstr "Dacă fişierul nu poate fi executat şi shell-ul nu este interactiv,"
-
-#~ msgid "then the shell exits, unless the variable \"no_exit_on_failed_exec\""
-#~ msgstr "atunci shell-ul iese, dacă variabila \"no_exit_on_failed_exec\""
-
-#~ msgid "is set."
-#~ msgstr "nu este setată."
-
-#~ msgid "is that of the last command executed."
-#~ msgstr "este aceea a ultimei comenzi executate."
-
-#~ msgid ""
-#~ "FIRST and LAST can be numbers specifying the range, or FIRST can be a"
-#~ msgstr ""
-#~ "PRIMUL şi ULTIMUL pot fi numere care specifică intervalul, sau PRIMUL "
-#~ "poate fi"
-
-#~ msgid "string, which means the most recent command beginning with that"
-#~ msgstr ""
-#~ "un şir care reprezintă cea mai recentă comandă care începea cu acest"
-
-#~ msgid "string."
-#~ msgstr "şir."
-
-#~ msgid ""
-#~ "   -e ENAME selects which editor to use.  Default is FCEDIT, then EDITOR,"
-#~ msgstr ""
-#~ "   -e ENUME selectează editorul de folosit.  implicit este FCEDIT, apoi "
-#~ "EDITOR,"
-
-#~ msgid ""
-#~ "      then the editor which corresponds to the current readline editing"
-#~ msgstr ""
-#~ "      apoi editorul care corespunde cu modul de editare al "
-#~ "liniei(readline)"
-
-#~ msgid "      mode, then vi."
-#~ msgstr "      curente, şi apoi vi."
-
-#~ msgid "   -l means list lines instead of editing."
-#~ msgstr "   -l reprezintă afişarea liniilor în locul editării acestora."
-
-#~ msgid "   -n means no line numbers listed."
-#~ msgstr "   -n înseamnă că nu vor fi afişate numerele liniilor."
-
-#~ msgid ""
-#~ "   -r means reverse the order of the lines (making it newest listed "
-#~ "first)."
-#~ msgstr ""
-#~ "   -r reprezintă inversarea ordinii liniilor (cele mai noi fiind listate "
-#~ "primele)."
-
-#~ msgid "With the `fc -s [pat=rep ...] [command]' format, the command is"
-#~ msgstr "Cu `fc -s [pat=rep ...] [comandă]' format, comanda este"
-
-#~ msgid "re-executed after the substitution OLD=NEW is performed."
-#~ msgstr "reexecutată după ce s-a produs substituţia VECHI=NOU."
-
-#~ msgid "A useful alias to use with this is r='fc -s', so that typing `r cc'"
-#~ msgstr "Un alias folositor este r='fc -s', aşa că tastând `r cc'"
-
-#~ msgid "runs the last command beginning with `cc' and typing `r' re-executes"
-#~ msgstr ""
-#~ "se rulează ultima comandă care începe cu `cc' şi tastând `r' se reexecută"
-
-#~ msgid "Place JOB_SPEC in the foreground, and make it the current job.  If"
-#~ msgstr ""
-#~ "Aduce JOB_SPEC în prim plan(foreground), ?şi îl face jobul curent.  Dacă"
-
-#~ msgid "JOB_SPEC is not present, the shell's notion of the current job is"
-#~ msgstr ""
-#~ "JOB_SPEC nu este prezent, este folosită noţiunea shell-ului despre jobul"
-
-#~ msgid "used."
-#~ msgstr "curent."
-
-#~ msgid "Place JOB_SPEC in the background, as if it had been started with"
-#~ msgstr "Pune JOB_SPEC în fundal(background), ca şi cum ar fi fost pornit cu"
-
-#~ msgid "`&'.  If JOB_SPEC is not present, the shell's notion of the current"
-#~ msgstr ""
-#~ "`&'.  Dacă JOB_SPEC nu este prezent, va fi folosită noţiunea shell-ului "
-#~ "despre"
-
-#~ msgid "job is used."
-#~ msgstr "jobul curent."
-
-#~ msgid "For each NAME, the full pathname of the command is determined and"
-#~ msgstr "Pentru fiecare NUME, calea întreagă a comenzii este determinată şi"
-
-#~ msgid "remembered.  If the -p option is supplied, PATHNAME is used as the"
-#~ msgstr ""
-#~ "reţinută.  Daca este furnizată şi opţiunea -p, CALE este folosită ca şi"
-
-#~ msgid "full pathname of NAME, and no path search is performed.  The -r"
-#~ msgstr ""
-#~ "cale de căutare întreagă a NUMElui, şi nu se mai face căutare în calea "
-#~ "curentă.  "
-
-#~ msgid "option causes the shell to forget all remembered locations.  If no"
-#~ msgstr ""
-#~ "Opţiunea -r face ca shell-ul să uite toate locaţiile reţinute.  Dacă nu"
-
-#~ msgid ""
-#~ "arguments are given, information about remembered commands is displayed."
-#~ msgstr ""
-#~ "este furnizat nici un parametru sunt afişate informaţii despre comenzile "
-#~ "reţinute."
-
-#~ msgid "Display helpful information about builtin commands.  If PATTERN is"
-#~ msgstr ""
-#~ "Se afişează informaţii folositoare despre comenzile interne.  Dacă TIPAR "
-#~ "este"
-
-#~ msgid "specified, gives detailed help on all commands matching PATTERN,"
-#~ msgstr ""
-#~ "specificat, se dă ajutor detaliat pentru toate comenzile potrivite "
-#~ "TIPARului,"
-
-#~ msgid "otherwise a list of the builtins is printed."
-#~ msgstr "în caz contrar se va tipări o listă a comenzilor interne."
-
-#~ msgid "Display the history list with line numbers.  Lines listed with"
-#~ msgstr "Afişează istoricul cu numerele liniilor.  Liniile listate cu"
-
-#~ msgid "with a `*' have been modified.  Argument of N says to list only"
-#~ msgstr "un `*' au fost modificate.  Parametrul N va aduce afişarea doar "
-
-#~ msgid "the last N lines.  The -c option causes the history list to be"
-#~ msgstr "a ultimelor N linii.  Opţiunea -c face ca lista istoricului să fie"
-
-#~ msgid ""
-#~ "cleared by deleting all of the entries.  The `-w' option writes out the"
-#~ msgstr "ştearsă prin ştergerea tuturor intrărilor.  Opţiunea `-w' scrie"
-
-#~ msgid ""
-#~ "current history to the history file;  `-r' means to read the file and"
-#~ msgstr ""
-#~ "istoricul curent în fişierul de istoric;  `-r' înseamnă citirea "
-#~ "fişierului şi"
-
-#~ msgid "append the contents to the history list instead.  `-a' means"
-#~ msgstr "adăugare a conţinutului listei istoricului în loc.  `-a' înseamnă"
-
-#~ msgid "to append history lines from this session to the history file."
-#~ msgstr ""
-#~ "adăugare a liniilor istoricului din această sesiune la fişierul de "
-#~ "istoric."
-
-#~ msgid "Argument `-n' means to read all history lines not already read"
-#~ msgstr ""
-#~ "Parametrul `-n' înseamnă citirea tuturor liniilor istoricului care nu "
-#~ "sunt deja citite"
-
-#~ msgid "from the history file and append them to the history list.  If"
-#~ msgstr ""
-#~ "din fişierul de istoric şi adăugarea lor la lista istoricului.  Dacă"
-
-#~ msgid "FILENAME is given, then that is used as the history file else"
-#~ msgstr ""
-#~ "este dat NUME_FIŞIER, acesta va fi utilizat ca fişier de istoric, în caz "
-#~ "contrar"
-
-#~ msgid "if $HISTFILE has a value, that is used, else ~/.bash_history."
-#~ msgstr ""
-#~ "dacă $HISTFILE are valoare, aceasta este utilizată, altfel ~/."
-#~ "bash_history."
-
-#~ msgid "If the -s option is supplied, the non-option ARGs are appended to"
-#~ msgstr ""
-#~ "Dacă este furnizată opţiunea -s ARGumentele non-opţiuni sunt adăugate la"
-
-#~ msgid "the history list as a single entry.  The -p option means to perform"
-#~ msgstr "lista istoricului ca intrări singure.  Opţiunea -p înseamnă"
-
-#~ msgid ""
-#~ "history expansion on each ARG and display the result, without storing"
-#~ msgstr ""
-#~ "expandarea istoricului la fiecare ARGument şi afişarea rezultatului, fără "
-#~ "a stoca"
-
-#~ msgid "anything in the history list."
-#~ msgstr "nimic în lista istoricului."
-
-#~ msgid "Lists the active jobs.  The -l option lists process id's in addition"
-#~ msgstr ""
-#~ "Listează joburile active.  Opţiunea -l listează id-urile proceselor în "
-#~ "plus faţă de"
-
-#~ msgid "to the normal information; the -p option lists process id's only."
-#~ msgstr ""
-#~ "informaţiile normale; optiunea -p listează doar id-urile proceselor."
-
-#~ msgid ""
-#~ "If -n is given, only processes that have changed status since the last"
-#~ msgstr ""
-#~ "Dacă este dat -n,sunt afişate  doar procesele care şi-au schimbat starea"
-
-#~ msgid ""
-#~ "notification are printed.  JOBSPEC restricts output to that job.  The"
-#~ msgstr ""
-#~ "de la ultima notificare.  JOBSPEC restricţionează output-ul spre acel "
-#~ "job.  "
-
-#~ msgid "-r and -s options restrict output to running and stopped jobs only,"
-#~ msgstr ""
-#~ "Opţiunile -r şi -s restricţionează output-ul doar spre joburile care "
-#~ "rulează şi respectiv,"
-
-#~ msgid "respectively.  Without options, the status of all active jobs is"
-#~ msgstr "care sunt stopate.  Fără opţiuni, este afişată starea joburilor"
-
-#~ msgid ""
-#~ "printed.  If -x is given, COMMAND is run after all job specifications"
-#~ msgstr ""
-#~ "active.  Dacă este furnizat -x, COMANDĂ este rulată după ce toate "
-#~ "specificaţiile"
-
-#~ msgid ""
-#~ "that appear in ARGS have been replaced with the process ID of that job's"
-#~ msgstr ""
-#~ "joburilor care aparîn ARGS au fost înlocuite cu ID-urile proceselor a"
-
-#~ msgid "process group leader."
-#~ msgstr "liderului de grup al proceselor acelui job(process group-leader)."
-
-#~ msgid "Removes each JOBSPEC argument from the table of active jobs."
-#~ msgstr "Şterge fiecare parametru JOBSPEC din tabela de joburi active."
-
-#~ msgid "Send the processes named by PID (or JOB) the signal SIGSPEC.  If"
-#~ msgstr "Trimite proceselor numite de PID (sau JOB) semnalul SIGSPEC.  Dacă"
-
-#~ msgid ""
-#~ "SIGSPEC is not present, then SIGTERM is assumed.  An argument of `-l'"
-#~ msgstr "SIGSPEC nu este prezent, atunci se asumă SIGTERM.  Parametrul `-l'"
-
-#~ msgid "lists the signal names; if arguments follow `-l' they are assumed to"
-#~ msgstr ""
-#~ "listează numele semnalelor; dacă urmează parametri după `-l' se asumă că"
-
-#~ msgid "be signal numbers for which names should be listed.  Kill is a shell"
-#~ msgstr ""
-#~ "sunt numere de semnale pentru care numele ar trebui listate.  Kill este "
-#~ "comandă"
-
-#~ msgid "builtin for two reasons: it allows job IDs to be used instead of"
-#~ msgstr ""
-#~ "internă a sehll-ului din două motive: permite utilizarea ID-urilor de "
-#~ "joburi în locul"
-
-#~ msgid "process IDs, and, if you have reached the limit on processes that"
-#~ msgstr "ID-urilor de procese, şi, daca s-a ajuns la limita de procese care "
-
-#~ msgid ""
-#~ "you can create, you don't have to start a process to kill another one."
-#~ msgstr ""
-#~ "se pot crea, nu mai e nevoie să se pornească un proces pentru a omorî "
-#~ "altul."
-
-#~ msgid "Each ARG is an arithmetic expression to be evaluated.  Evaluation"
-#~ msgstr ""
-#~ "Fiecare ARGument este o expresie aritmetică ce va fi evaluată.  Evaluarea"
-
-#~ msgid "is done in long integers with no check for overflow, though division"
-#~ msgstr ""
-#~ "se face în întregi lungi (long integers) fără verificări de overflow, "
-#~ "totuşi împărţirea"
-
-#~ msgid "by 0 is trapped and flagged as an error.  The following list of"
-#~ msgstr "la 0 este reţinută şi marcată ca eroare.  Următoarea listă de"
-
-#~ msgid "operators is grouped into levels of equal-precedence operators."
-#~ msgstr "operatori este grupată în nivele de operatori 'equal-precedence'."
-
-#~ msgid "The levels are listed in order of decreasing precedence."
-#~ msgstr "Nivelele sunt listate în ordinea inversă a întâietăţii."
-
-#~ msgid "\t-, +\t\tunary minus, plus"
-#~ msgstr "\t-, +\t\tplus, minus unar"
-
-#~ msgid "\t!, ~\t\tlogical and bitwise negation"
-#~ msgstr "\t!, ~\t\tnegare logică"
-
-#~ msgid "\t*, /, %\t\tmultiplication, division, remainder"
-#~ msgstr "\t*, /, %\t\tînmulţire, împărţire, rest"
-
-#~ msgid "\t+, -\t\taddition, subtraction"
-#~ msgstr "\t+, -\t\tadăugare, scădere"
-
-#~ msgid "\t<<, >>\t\tleft and right bitwise shifts"
-#~ msgstr "\t<<, >>\t\toperaţii pe un bit la stânga şi la dreapta"
-
-#~ msgid "\t<=, >=, <, >\tcomparison"
-#~ msgstr "\t<=, >=, <, >\tcomparare"
-
-#~ msgid "\t==, !=\t\tequality, inequality"
-#~ msgstr "\t==, !=\t\tegalitate, inegalitate"
-
-#~ msgid "\t&\t\tbitwise AND"
-#~ msgstr "\t&\t\tŞI pe un bit"
-
-#~ msgid "\t^\t\tbitwise XOR"
-#~ msgstr "\t^\t\tSAU exclusiv(XOR) pe un bit"
-
-#~ msgid "\t|\t\tbitwise OR"
-#~ msgstr "\t|\t\tSAU pe un bit"
-
-#~ msgid "\t&&\t\tlogical AND"
-#~ msgstr "\t&&\t\tŞI logic"
-
-#~ msgid "\t||\t\tlogical OR"
-#~ msgstr "\t||\t\tSAU logic"
-
-#~ msgid "\texpr ? expr : expr"
-#~ msgstr "\texpr ? expr : expr"
-
-#~ msgid "\t\t\tconditional expression"
-#~ msgstr "\t\t\texpresie condiţională"
-
-#~ msgid "\t=, *=, /=, %=,"
-#~ msgstr "\t=, *=, /=, %=,"
-
-#~ msgid "\t+=, -=, <<=, >>=,"
-#~ msgstr "\t+=, -=, <<=, >>=,"
-
-#~ msgid "\t&=, ^=, |=\tassignment"
-#~ msgstr "\t&=, ^=, |=\tatribuire"
-
-#~ msgid "is replaced by its value (coerced to a long integer) within"
-#~ msgstr "este înlocuit de valoarea sa (trunchiată la un întreg lung) într-o"
-
-#~ msgid "an expression.  The variable need not have its integer attribute"
-#~ msgstr "expresie.  Variabila nu trebuie să aibă atributul său întreg"
-
-#~ msgid "turned on to be used in an expression."
-#~ msgstr "activat pentru a fi folosită într-o expresie."
-
-#~ msgid "Operators are evaluated in order of precedence.  Sub-expressions in"
-#~ msgstr "Operatorii sunt evaluaţi în ordinea întâietăţii. Subexpresiile din"
-
-#~ msgid "parentheses are evaluated first and may override the precedence"
-#~ msgstr "paranteze sunt evaluate primele şi pot suprascrie regulile de"
-
-#~ msgid "rules above."
-#~ msgstr "întâietate de mai sus."
-
-#~ msgid "If the last ARG evaluates to 0, let returns 1; 0 is returned"
-#~ msgstr ""
-#~ "Dacă ultimul ARGument este evaluat la 0 let returnează 1; 0 este returnat"
-
-#~ msgid "otherwise."
-#~ msgstr "în caz contrar."
-
-#~ msgid "One line is read from the standard input, and the first word is"
-#~ msgstr ""
-#~ "Linia este citită de la intrarea(input) standard, şi primul cuvânt este"
-
-#~ msgid ""
-#~ "assigned to the first NAME, the second word to the second NAME, and so"
-#~ msgstr ""
-#~ "atribuit primului NUME, al doilea cuvânt celui de-al doilea NUME, şi aşa"
-
-#~ msgid ""
-#~ "on, with leftover words assigned to the last NAME.  Only the characters"
-#~ msgstr ""
-#~ "mai departe, cu cele rămase atribuite ultimelor NUME.  Doar caracterele"
-
-#~ msgid "found in $IFS are recognized as word delimiters.  The return code is"
-#~ msgstr ""
-#~ "găsite în $IFS sunt recunoscute ca delimitatoare de cuvinte.  Codul "
-#~ "returnat este"
-
-#~ msgid ""
-#~ "zero, unless end-of-file is encountered.  If no NAMEs are supplied, the"
-#~ msgstr ""
-#~ "zero, cu excepţia cazului în care este întâlnit sfârşit de fişier.  Dacă "
-#~ "nici un NUME"
-
-#~ msgid ""
-#~ "line read is stored in the REPLY variable.  If the -r option is given,"
-#~ msgstr ""
-#~ "nu este furnizat, linia citită este stocată în variabila RĂSPUNS. Dacă e "
-#~ "dată "
-
-#~ msgid "this signifies `raw' input, and backslash escaping is disabled.  If"
-#~ msgstr ""
-#~ "opţiunea -r, aceasta înseamnă intrare `brută' şi caractere speciale "
-#~ "dezactivate."
-
-#~ msgid "the `-p' option is supplied, the string supplied as an argument is"
-#~ msgstr "Dacă este dată opţiunea `-p', şirul furnizat ca argument este"
-
-#~ msgid ""
-#~ "output without a trailing newline before attempting to read.  If -a is"
-#~ msgstr "trimis la output cu linie nouă înainte de citire.  Dacă -a este"
-
-#~ msgid ""
-#~ "supplied, the words read are assigned to sequential indices of ARRAY,"
-#~ msgstr ""
-#~ "furnizată, cuvintele citite sunt atribuite indicilor secvenţiali de "
-#~ "INTERVAL,"
-
-#~ msgid "starting at zero.  If -e is supplied and the shell is interactive,"
-#~ msgstr ""
-#~ "începând de la zero.  Dacă -e este furnizat şi shell-ul este interactiv,"
-
-#~ msgid "readline is used to obtain the line."
-#~ msgstr "se va citi linia pentru obţinerea acesteia."
-
-#~ msgid ""
-#~ "Causes a function to exit with the return value specified by N.  If N"
-#~ msgstr ""
-#~ "Cauzează terminarea unei funcţii cu valoarea specificată de N.  Dacă N"
-
-#~ msgid "is omitted, the return status is that of the last command."
-#~ msgstr "este omis, starea returnată va fi aceea a ultimei comenzi."
-
-#~ msgid "    -a  Mark variables which are modified or created for export."
-#~ msgstr ""
-#~ "    -a  Marchează variabilele de modificat sau create pentru export."
-
-#~ msgid "    -b  Notify of job termination immediately."
-#~ msgstr "    -b  Notificare de terminare de job imediată."
-
-#~ msgid "    -e  Exit immediately if a command exits with a non-zero status."
-#~ msgstr ""
-#~ "    -e  Iese imediat dacă există o comandă cu stare diferită de zero."
-
-#~ msgid "    -f  Disable file name generation (globbing)."
-#~ msgstr "    -f  Inhibă generarea de nume de fişiere (globalizare)."
-
-#~ msgid "    -h  Remember the location of commands as they are looked up."
-#~ msgstr "    -h  Reţine locaţiile comenzilor pe măsura verificării lor."
-
-#~ msgid ""
-#~ "    -i  Force the shell to be an \"interactive\" one.  Interactive shells"
-#~ msgstr ""
-#~ "    -i  Forţează shell-ul să fie unul \"interactiv\".  Shell-urile "
-#~ "interactive"
-
-#~ msgid "        always read `~/.bashrc' on startup."
-#~ msgstr "        citesc întotdeauna `~/.bashrc' la rulare."
-
-#~ msgid "    -k  All assignment arguments are placed in the environment for a"
-#~ msgstr "    -k  Toţi parametrii atribuirii sunt plasaţi în mediu pentru o"
-
-#~ msgid "        command, not just those that precede the command name."
-#~ msgstr "        comandă, nu doar cele care preced numele comenzii."
-
-#~ msgid "    -m  Job control is enabled."
-#~ msgstr "    -m  Controlul job-urilor este activat."
-
-#~ msgid "    -n  Read commands but do not execute them."
-#~ msgstr "    -n  Citeşte comenzile, dar nu le execută."
-
-#~ msgid "    -o option-name"
-#~ msgstr "    -o nume-opţiune"
-
-#~ msgid "        Set the variable corresponding to option-name:"
-#~ msgstr "        Setează variabila corespunzătoare numelui opţiunii:"
-
-#~ msgid "            allexport    same as -a"
-#~ msgstr "            allexport    la fel ca -a"
-
-#~ msgid "            braceexpand  same as -B"
-#~ msgstr "            braceexpand  la fel ca -B"
-
-#~ msgid "            emacs        use an emacs-style line editing interface"
-#~ msgstr ""
-#~ "            emacs        foloseşte o interfaţă de editare de linii stil "
-#~ "emacs"
-
-#~ msgid "            errexit      same as -e"
-#~ msgstr "            errexit      la fel ca -e"
-
-#~ msgid "            hashall      same as -h"
-#~ msgstr "            hashall      la fel ca -h"
-
-#~ msgid "            histexpand   same as -H"
-#~ msgstr "            histexpand   la fel ca -H"
-
-#~ msgid "            ignoreeof    the shell will not exit upon reading EOF"
-#~ msgstr "            ignoreeof    shellul nu va ieşi după citirea EOF"
-
-#~ msgid "            interactive-comments"
-#~ msgstr "            interactive-comments"
-
-#~ msgid ""
-#~ "                         allow comments to appear in interactive commands"
-#~ msgstr ""
-#~ "                         permite comentariilor să apară în comenzi "
-#~ "interactive."
-
-#~ msgid "            keyword      same as -k"
-#~ msgstr "            keyword      la fel ca -k"
-
-#~ msgid "            monitor      same as -m"
-#~ msgstr "            monitor      sla fel ca -m"
-
-#~ msgid "            noclobber    same as -C"
-#~ msgstr "            noclobber    la fel ca -C"
-
-#~ msgid "            noexec       same as -n"
-#~ msgstr "            noexec       la fel ca -n"
-
-#~ msgid "            noglob       same as -f"
-#~ msgstr "            noglob       la fel ca -f"
-
-#~ msgid "            notify       save as -b"
-#~ msgstr "            notify       la fel ca -b"
-
-#~ msgid "            nounset      same as -u"
-#~ msgstr "            nounset      la fel ca -u"
-
-#~ msgid "            onecmd       same as -t"
-#~ msgstr "            onecmd       la fel ca -t"
-
-#~ msgid "            physical     same as -P"
-#~ msgstr "            physical     la fel ca -P"
-
-#~ msgid ""
-#~ "            posix        change the behavior of bash where the default"
-#~ msgstr ""
-#~ "            posix        schimbă comportamentul bash în care implicit"
-
-#~ msgid ""
-#~ "                         operation differs from the 1003.2 standard to"
-#~ msgstr ""
-#~ "                         operaţiile diferă de standardul 1003.2 pentru"
-
-#~ msgid "                         match the standard"
-#~ msgstr "                         a se potrivi standardului"
-
-#~ msgid "            privileged   same as -p"
-#~ msgstr "            privileged   la fel ca -p"
-
-#~ msgid "            verbose      same as -v"
-#~ msgstr "            verbose      la fel ca -v"
-
-#~ msgid "            vi           use a vi-style line editing interface"
-#~ msgstr ""
-#~ "            vi           foloseşte o interfaţă de editare de linii stil vi"
-
-#~ msgid "            xtrace       same as -x"
-#~ msgstr "            xtrace       la fel ca -x"
-
-#~ msgid ""
-#~ "    -p  Turned on whenever the real and effective user ids do not match."
-#~ msgstr ""
-#~ "    -p  Activat de fiecare dată când id-urile de user real şi efectiv nu "
-#~ "se potrivesc."
-
-#~ msgid "        Disables processing of the $ENV file and importing of shell"
-#~ msgstr "        Inhibă procesarea fişierului $ENV şi importarea funcţiilor"
-
-#~ msgid ""
-#~ "        functions.  Turning this option off causes the effective uid and"
-#~ msgstr ""
-#~ "        shell-ului.  Dezactivarea acestei opţiuni face ca uid-ul şi gid-ul"
-
-#~ msgid "        gid to be set to the real uid and gid."
-#~ msgstr "        efectiv să fie setate drept uid-ul şi gid-ul real."
-
-#~ msgid "    -t  Exit after reading and executing one command."
-#~ msgstr "    -t  Iese după citirea şi executarea unei comenzi."
-
-#~ msgid "    -u  Treat unset variables as an error when substituting."
-#~ msgstr "    -u  Tratează variabilele nesetate drept erori în substituţie."
-
-#~ msgid "    -v  Print shell input lines as they are read."
-#~ msgstr ""
-#~ "    -v  Tipăreşte liniile de intrare(input) ale shell-ului pe măsură ce "
-#~ "sunt citite."
-
-#~ msgid "    -x  Print commands and their arguments as they are executed."
-#~ msgstr ""
-#~ "    -x  Tipăreşte comenzile şi parametrii acestora pe măsura executării."
-
-#~ msgid "    -B  the shell will perform brace expansion"
-#~ msgstr "    -B  shell-ul va executa expansiune de legături(brace)"
-
-#~ msgid "    -H  Enable ! style history substitution.  This flag is on"
-#~ msgstr ""
-#~ "    -H  Activează substituţia istoricului stil ! .  Acest marcaj(flag) "
-#~ "este activat"
-
-#~ msgid "        by default."
-#~ msgstr "        în mod implicit."
-
-#~ msgid "    -C  If set, disallow existing regular files to be overwritten"
-#~ msgstr ""
-#~ "    -C  Dacă este setat, nu va permite suprascrierea fişierelor existente"
-
-#~ msgid "        by redirection of output."
-#~ msgstr "        prin redirectarea output-ului."
-
-#~ msgid "    -P  If set, do not follow symbolic links when executing commands"
-#~ msgstr ""
-#~ "    -P  Dacă este setat, nu va urma legăturile simbolice în executarea "
-#~ "comenzilor"
-
-#~ msgid "        such as cd which change the current directory."
-#~ msgstr "        precum cd care schimbă directorul curent."
-
-#~ msgid "Using + rather than - causes these flags to be turned off.  The"
-#~ msgstr ""
-#~ "Folosind + în locul lui - provoacă dezactivarea acestor marcaje(flags)."
-
-#~ msgid "flags can also be used upon invocation of the shell.  The current"
-#~ msgstr ""
-#~ "  Marcajele pot fi folosite de asemenea pentru invocarea shell-ului.  "
-#~ "Setul"
-
-#~ msgid ""
-#~ "set of flags may be found in $-.  The remaining n ARGs are positional"
-#~ msgstr ""
-#~ "curent de marcaje(flags) poate fi găsit în $-.  ARGumentele n rămase sunt"
-
-#~ msgid "parameters and are assigned, in order, to $1, $2, .. $n.  If no"
-#~ msgstr ""
-#~ "parametri poziţionali şi sunt atribuiţi, în ordine, lui $1, $2, .. $n.  "
-#~ "Dacă nu"
-
-#~ msgid "ARGs are given, all shell variables are printed."
-#~ msgstr ""
-#~ "este dat nici un ARGument, sunt tipărite toate variabilele shell-ului."
-
-#~ msgid "For each NAME, remove the corresponding variable or function.  Given"
-#~ msgstr ""
-#~ "Pentru fiecare NUME, şterge variabila sau funcţia corespunzătoare.  Dacă "
-#~ "se"
-
-#~ msgid "the `-v', unset will only act on variables.  Given the `-f' flag,"
-#~ msgstr ""
-#~ "dă `-v', desetarea(unset) va acţiona numai pe variabile.  Dacă se dă `-f',"
-
-#~ msgid "unset will only act on functions.  With neither flag, unset first"
-#~ msgstr ""
-#~ "desetarea(unset) va acţiona numai pe funcţii.  Fără nici un marcaj(flag), "
-
-#~ msgid "tries to unset a variable, and if that fails, then tries to unset a"
-#~ msgstr ""
-#~ "desetarea(unset) va încerca întâi pe variabile, şi dacă eşueazăm va "
-#~ "încerca"
-
-#~ msgid ""
-#~ "function.  Some variables (such as PATH and IFS) cannot be unset; also"
-#~ msgstr ""
-#~ "pe o funcţie.  Anumite variabile ( precum PATH şi IFS) nu pot fi "
-#~ "desetate(unset);"
-
-#~ msgid "see readonly."
-#~ msgstr "de asemenea, vedeţi readonly."
-
-#~ msgid "NAMEs are marked for automatic export to the environment of"
-#~ msgstr "NUMEle sunt marcate pentru exportul automat către mediul"
-
-#~ msgid "subsequently executed commands.  If the -f option is given,"
-#~ msgstr "comenzilor executate ulterior.  Dacă este dată opţiunea -f,"
-
-#~ msgid "the NAMEs refer to functions.  If no NAMEs are given, or if `-p'"
-#~ msgstr ""
-#~ "NUMEle se referă la funcţii.  Dacă nu este dat nici un NUME, sau este dat "
-#~ "`-p'`,"
-
-#~ msgid "is given, a list of all names that are exported in this shell is"
-#~ msgstr ""
-#~ "va fi tipărită o listă a tuturor numelor care sunt exportate în acest"
-
-#~ msgid "printed.  An argument of `-n' says to remove the export property"
-#~ msgstr "shell.  Parametrul `-n' va elimina proprietatea de export "
-
-#~ msgid "from subsequent NAMEs.  An argument of `--' disables further option"
-#~ msgstr ""
-#~ "din NUMEle ulterioare.  Parametrul `--' dezactivează procesarea opţiunilor"
-
-#~ msgid "processing."
-#~ msgstr "viitoare."
-
-#~ msgid ""
-#~ "The given NAMEs are marked readonly and the values of these NAMEs may"
-#~ msgstr "NUMEle date sunt marcate readonly şi valorile acestor NUME nu poate"
-
-#~ msgid "not be changed by subsequent assignment.  If the -f option is given,"
-#~ msgstr "fi schimbat de atribuiri ulterioare.  Dacă este dată opţiunea -f,"
-
-#~ msgid "then functions corresponding to the NAMEs are so marked.  If no"
-#~ msgstr "atunci funcţiile corespunzătoare NUMElor sunt marcate.  Dacă nu"
-
-#~ msgid ""
-#~ "arguments are given, or if `-p' is given, a list of all readonly names"
-#~ msgstr ""
-#~ "sunt furnizaţidaţ paramet, sau este dat parametrul `-p'` o listă de nume "
-#~ "readonlyri "
-
-#~ msgid ""
-#~ "is printed.  An argument of `-n' says to remove the readonly property"
-#~ msgstr ""
-#~ "va fi tipărită.  Parametrul `-n' va elimina proprietatea de readonly"
-
-#~ msgid "from subsequent NAMEs.  The `-a' option means to treat each NAME as"
-#~ msgstr ""
-#~ "pentru NUMEle ulterioare.  Opţiunea `-a' reprezintă tratarea fiecărui "
-#~ "NUME ca"
-
-#~ msgid "an array variable.  An argument of `--' disables further option"
-#~ msgstr "o variabilă interval.  Parametrul `--' dezactivează alte opţiuni"
-
-#~ msgid ""
-#~ "The positional parameters from $N+1 ... are renamed to $1 ...  If N is"
-#~ msgstr ""
-#~ "Parametrii poziţionali de la $N+1 ... sunt redenumiţi în $1 ...  Dacă N "
-#~ "nu este"
-
-#~ msgid "not given, it is assumed to be 1."
-#~ msgstr "furnizat, se presupune că e 1."
-
-#~ msgid "Read and execute commands from FILENAME and return.  The pathnames"
-#~ msgstr "Citeşte şi execută comenzi din NUME_FIŞIER şi returnare.  Căile"
-
-#~ msgid "in $PATH are used to find the directory containing FILENAME."
-#~ msgstr ""
-#~ "din $PATH sunt folosite pentru a găsi directorul care conţine NUME_FIŞIER."
-
-#~ msgid "Suspend the execution of this shell until it receives a SIGCONT"
-#~ msgstr ""
-#~ "Suspendă execuţia acestui shell până se va primi un semnal de SIGCONT."
-
-#~ msgid "signal.  The `-f' if specified says not to complain about this"
-#~ msgstr "  Dacă este specificat `-f' va elimina avertismentele despre acest "
-
-#~ msgid "being a login shell if it is; just suspend anyway."
-#~ msgstr "login shell; va suspenda oricum."
-
-#~ msgid "Exits with a status of 0 (trueness) or 1 (falseness) depending on"
-#~ msgstr "Iese cu o stare de 0 (adevăr) sau 1 (falsitate) depinzând de"
-
-#~ msgid "the evaluation of EXPR.  Expressions may be unary or binary.  Unary"
-#~ msgstr "evaluarea EXPR.  Expresiile pot fi unare sau binare.  Expresiile"
-
-#~ msgid "expressions are often used to examine the status of a file.  There"
-#~ msgstr ""
-#~ "unare sunt des folosite pentru a examina starea unui fişier.  Mai există"
-
-#~ msgid "are string operators as well, and numeric comparison operators."
-#~ msgstr "operatori de şir de asemenea, şi operator de comparare numerică."
-
-#~ msgid "File operators:"
-#~ msgstr "Operatori de fişier:"
-
-#~ msgid "    -b FILE        True if file is block special."
-#~ msgstr "    -b FIŞIER        Adevărat dacă fişierul este bloc special."
-
-#~ msgid "    -c FILE        True if file is character special."
-#~ msgstr "    -c FIŞIER        Adevărat dacă fişierul este caracter special."
-
-#~ msgid "    -d FILE        True if file is a directory."
-#~ msgstr "    -b FIŞIER        Adevărat dacă fişierul este director."
-
-#~ msgid "    -e FILE        True if file exists."
-#~ msgstr "    -e FIŞIER        Adevărat dacă fişierul există."
-
-#~ msgid "    -f FILE        True if file exists and is a regular file."
-#~ msgstr ""
-#~ "    -b FIŞIER        Adevărat dacă fişierul există şi este fişier "
-#~ "obişnuit (regular)."
-
-#~ msgid "    -g FILE        True if file is set-group-id."
-#~ msgstr ""
-#~ "    -g FIŞIER        Adevărat dacă fişierul are setat id-ul de grup."
-
-#~ msgid "    -h FILE        True if file is a symbolic link.  Use \"-L\"."
-#~ msgstr ""
-#~ "    -h FIŞIER        Adevărat dacă fişierul este legătură simbolică.  "
-#~ "Folosiţi \"-L\"."
-
-#~ msgid "    -L FILE        True if file is a symbolic link."
-#~ msgstr ""
-#~ "    -L FIŞIER        Adevărat dacă fişierul este legătură simbolică."
-
-#~ msgid "    -k FILE        True if file has its \"sticky\" bit set."
-#~ msgstr ""
-#~ "    -k FIŞIER        Adevărat dacă fişierul are setat \"sticky\" bit."
-
-#~ msgid "    -p FILE        True if file is a named pipe."
-#~ msgstr ""
-#~ "    -p FIŞIER        Adevărat dacă fişierul este o legătură(pipe) numită."
-
-#~ msgid "    -r FILE        True if file is readable by you."
-#~ msgstr "    -r FIŞIER        Adevărat dacă fişierul poate fi citit de tine."
-
-#~ msgid "    -s FILE        True if file exists and is not empty."
-#~ msgstr "    -s FIŞIER        Adevărat dacă fişierul există şi nu este vid."
-
-#~ msgid "    -S FILE        True if file is a socket."
-#~ msgstr "    -S FIŞIER        Adevărat dacă fişierul este un socket."
-
-#~ msgid "    -t FD          True if FD is opened on a terminal."
-#~ msgstr "    -t FD          Adevărat dacă FD este deschis într-un terminal."
-
-#~ msgid "    -u FILE        True if the file is set-user-id."
-#~ msgstr "    -u FIŞIER        Adevărat dacă fişierul are setat user id-ul."
-
-#~ msgid "    -w FILE        True if the file is writable by you."
-#~ msgstr "    -w FIŞIER        Adevărat dacă fişierul poate fi scris de tine."
-
-#~ msgid "    -x FILE        True if the file is executable by you."
-#~ msgstr ""
-#~ "    -x FIŞIER        Adevărat dacă fişierul poate fi executat de către "
-#~ "tine."
-
-#~ msgid "    -O FILE        True if the file is effectively owned by you."
-#~ msgstr ""
-#~ "    -O FIŞIER        Adevărat dacă fişierul este efectiv propriu(owned) "
-#~ "ţie."
-
-#~ msgid ""
-#~ "    -G FILE        True if the file is effectively owned by your group."
-#~ msgstr ""
-#~ "    -O FIŞIER        Adevărat dacă fişierul este efectiv propriu(owned) "
-#~ "grupului tău."
-
-#~ msgid "  FILE1 -nt FILE2  True if file1 is newer than (according to"
-#~ msgstr ""
-#~ "  FIŞIER1 -nt FIŞIER2  Adevărat dacă fişier1 este mai nou decât (potrivit "
-
-#~ msgid "                   modification date) file2."
-#~ msgstr "                   datei modificării) fişier2."
-
-#~ msgid "  FILE1 -ot FILE2  True if file1 is older than file2."
-#~ msgstr ""
-#~ "  FIŞIER1 -ot FIŞIER2  Adevărat dacă fişier1 este mai vechi decât fişier2."
-
-#~ msgid "  FILE1 -ef FILE2  True if file1 is a hard link to file2."
-#~ msgstr ""
-#~ "  FIŞIER1 -ef FIŞIER2  Adevărat dacă fişier1 este hard link către fişier2."
-
-#~ msgid "String operators:"
-#~ msgstr "Operatori de şiruri:"
-
-#~ msgid "    -z STRING      True if string is empty."
-#~ msgstr "    -z ŞIR      Adevărat dacă şirul este vid."
-
-#~ msgid "    -n STRING"
-#~ msgstr "    -n ŞIR"
-
-#~ msgid "    STRING         True if string is not empty."
-#~ msgstr "    ŞIR      Adevărat dacă şirul nu este vid."
-
-#~ msgid "    STRING1 = STRING2"
-#~ msgstr "    ŞIR1 = ŞIR2"
-
-#~ msgid "                   True if the strings are equal."
-#~ msgstr "                   Adevărat dacă şirurile sunt egale."
-
-#~ msgid "    STRING1 != STRING2"
-#~ msgstr "    ŞIR1 != ŞIR2"
-
-#~ msgid "                   True if the strings are not equal."
-#~ msgstr "                   Adevărat dacă şirurile nu sunt egale."
-
-#~ msgid "    STRING1 < STRING2"
-#~ msgstr "    ŞIR1 < ŞIR2"
-
-#~ msgid ""
-#~ "                   True if STRING1 sorts before STRING2 lexicographically"
-#~ msgstr ""
-#~ "                   Adevărat dacă ŞIR1 se ordonează lexical înaintea lui "
-#~ "ŞIR2"
-
-#~ msgid "    STRING1 > STRING2"
-#~ msgstr "    ŞIR1 > ŞIR2"
-
-#~ msgid ""
-#~ "                   True if STRING1 sorts after STRING2 lexicographically"
-#~ msgstr ""
-#~ "                   Adevărat dacă ŞIR1 se ordonează lexical după ŞIR2"
-
-#~ msgid "Other operators:"
-#~ msgstr "Alţi operatori:"
-
-#~ msgid "    ! EXPR         True if expr is false."
-#~ msgstr "    ! EXPR         Adevărat dacă expr e falsă."
-
-#~ msgid "    EXPR1 -a EXPR2 True if both expr1 AND expr2 are true."
-#~ msgstr "    EXPR1 -a EXPR2 Adevărat dacă şi expr1 ŞI expr2 sunt adevărate."
-
-#~ msgid "    EXPR1 -o EXPR2 True if either expr1 OR expr2 is true."
-#~ msgstr ""
-#~ "    EXPR1 -a EXPR2 Adevărat dacă una din expr1 sau expr2 e adevărată."
-
-#~ msgid "    arg1 OP arg2   Arithmetic tests.  OP is one of -eq, -ne,"
-#~ msgstr "    arg1 OP arg2   Teste aritmetice.  OP este unul din -eq, -ne,"
-
-#~ msgid "                   -lt, -le, -gt, or -ge."
-#~ msgstr "                   -lt, -le, -gt, or -ge."
-
-#~ msgid "Arithmetic binary operators return true if ARG1 is equal, not-equal,"
-#~ msgstr "Operatorii aritmetici binari returnează adevărat(true) dacă ARG1 "
-
-#~ msgid ""
-#~ "less-than, less-than-or-equal, greater-than, or greater-than-or-equal"
-#~ msgstr ""
-#~ "este egal cu, nu este egal cu,mai mic, mai mic sau egal, mai mare, mai "
-#~ "mare sau egal"
-
-#~ msgid "than ARG2."
-#~ msgstr "decât ARG2."
-
-#~ msgid "This is a synonym for the \"test\" builtin, but the last"
-#~ msgstr "Acesta este un sinonim pentru comanda internă \"test\", dar ultimul"
-
-#~ msgid "argument must be a literal `]', to match the opening `['."
-#~ msgstr "argument trebuie să fie un `]' literal, pentru a închide un `['."
-
-#~ msgid "Print the accumulated user and system times for processes run from"
-#~ msgstr ""
-#~ "Afişează timpurile acumulate de user şi sistem pentru procesele rulate din"
-
-#~ msgid "the shell."
-#~ msgstr "shell."
-
-#~ msgid "The command ARG is to be read and executed when the shell receives"
-#~ msgstr ""
-#~ "ARGumentele comenzii vor fi citite şi executate când shell-ul primeşte"
-
-#~ msgid "signal(s) SIGNAL_SPEC.  If ARG is absent all specified signals are"
-#~ msgstr ""
-#~ "semnal(e). SIGNAL_SPEC.  Dacă ARGumentul este absent toate semnalele"
-
-#~ msgid "reset to their original values.  If ARG is the null string each"
-#~ msgstr ""
-#~ "specifice sunt resetate la valorile lor originale.  Dacă ARGumentul este "
-#~ "un şir vid"
-
-#~ msgid "SIGNAL_SPEC is ignored by the shell and by the commands it invokes."
-#~ msgstr ""
-#~ "fiecare SIGNAL_SPEC este ignorat de shell şi de comanda invocată de "
-#~ "acesta."
-
-#~ msgid "If SIGNAL_SPEC is EXIT (0) the command ARG is executed on exit from"
-#~ msgstr ""
-#~ "Dacă SIGNAL_SPEC este EXIT (0) ARGumentele comenzii sunt executate la "
-
-#~ msgid "the shell.  If SIGNAL_SPEC is DEBUG, ARG is executed after every"
-#~ msgstr ""
-#~ "ieşirea din shell.  Dacă SIGNAL_SPEC este DEBUG, ARGument este executat"
-
-#~ msgid "command.  If ARG is `-p' then the trap commands associated with"
-#~ msgstr ""
-#~ "după fiecare comandă.  Dacă ARGument este `-' atunci vor fi afişate "
-#~ "comenzile"
-
-#~ msgid "each SIGNAL_SPEC are displayed.  If no arguments are supplied or if"
-#~ msgstr "trap asociate cu fiecare SIGNAL_SPEC.  Dacă nu sunt furnizaţi "
-
-#~ msgid "only `-p' is given, trap prints the list of commands associated with"
-#~ msgstr ""
-#~ "parametri sau este dat doar `-p', trap afişează lista de comenzi asociate "
-#~ "cu "
-
-#~ msgid ""
-#~ "each signal number.  SIGNAL_SPEC is either a signal name in <signal.h>"
-#~ msgstr ""
-#~ "fiecare număr de semnal.  SIGNAL_SPEC este ori un nume de semnal din "
-#~ "<signal.h>"
-
-#~ msgid ""
-#~ "or a signal number.  `trap -l' prints a list of signal names and their"
-#~ msgstr ""
-#~ "sau un număr de semnal.  `trap -l' tipăreşte o listă de numere de semnale "
-#~ "şi "
-
-#~ msgid "corresponding numbers.  Note that a signal can be sent to the shell"
-#~ msgstr ""
-#~ "numerele corespunzătoare.  Notaţi că un semnal poate fi trimis shell-ului"
-
-#~ msgid "with \"kill -signal $$\"."
-#~ msgstr "cu \"kill -signal $$\"."
-
-#~ msgid "For each NAME, indicate how it would be interpreted if used as a"
-#~ msgstr ""
-#~ "Pentru fiecare NUME, indică în ce mod va fi interpretat dacă este "
-#~ "utilizat ca"
-
-#~ msgid "If the -t option is used, returns a single word which is one of"
-#~ msgstr ""
-#~ "Dacă este folosită opţiunea -t, returnează un singur cuvânt care este "
-#~ "unul din"
-
-#~ msgid ""
-#~ "`alias', `keyword', `function', `builtin', `file' or `', if NAME is an"
-#~ msgstr ""
-#~ "`alias', `keyword', `function', `builtin', `file' or `', dacă NUME este un"
-
-#~ msgid ""
-#~ "alias, shell reserved word, shell function, shell builtin, disk file,"
-#~ msgstr ""
-#~ "alias, cuvânt rezervat de shell, funcţie de shell, comandă internă, "
-#~ "fişier de pe disk,"
-
-#~ msgid "or unfound, respectively."
-#~ msgstr "sau negăsit, respectiv."
-
-#~ msgid "If the -p flag is used, either returns the name of the disk file"
-#~ msgstr ""
-#~ "Dacă este utilizat marcajul(flag) -p se returnează fie numele fişierului "
-#~ "de disk"
-
-#~ msgid "that would be executed, or nothing if -t would not return `file'."
-#~ msgstr ""
-#~ "care urmează să fie executat, sau nimic dacă -t nu va returna `fişier'."
-
-#~ msgid "If the -a flag is used, displays all of the places that contain an"
-#~ msgstr "Dacă este folosit -a, se vor afişa toate locurile care conţin"
-
-#~ msgid ""
-#~ "executable named `file'.  This includes aliases and functions, if and"
-#~ msgstr ""
-#~ "un executabil numit `fişier'.  Aceasta include aliasuri şi funcţii, şi "
-#~ "numai"
-
-#~ msgid "only if the -p flag is not also used."
-#~ msgstr "marcajul(flag) -p nu este folosit de asemenea."
-
-#~ msgid "Type accepts -all, -path, and -type in place of -a, -p, and -t,"
-#~ msgstr "Type acceptă -all, -path şi -type în loc de -a, -p şi -t,"
-
-#~ msgid "respectively."
-#~ msgstr "respectiv"
-
-#~ msgid "Ulimit provides control over the resources available to processes"
-#~ msgstr "Ulimit oferă control al resurselor disponibile pentru procesele"
-
-#~ msgid "started by the shell, on systems that allow such control.  If an"
-#~ msgstr ""
-#~ "rulate de shell, în sisteme care permit acest tip de control.  Dacă este"
-
-#~ msgid "option is given, it is interpreted as follows:"
-#~ msgstr "dată o opţiune, este interpretată precum urmează:"
-
-#~ msgid "    -S\tuse the `soft' resource limit"
-#~ msgstr "    -S\tfoloseşte limita `soft' a resursei"
-
-#~ msgid "    -H\tuse the `hard' resource limit"
-#~ msgstr "    -H\tfoloseşte limita `hard' a resursei"
-
-#~ msgid "    -a\tall current limits are reported"
-#~ msgstr "    -a\tsunt raportate toate limitele curente"
-
-#~ msgid "    -c\tthe maximum size of core files created"
-#~ msgstr "    -c\tmărimea maximă de fişiere core creată"
-
-#~ msgid "    -d\tthe maximum size of a process's data segment"
-#~ msgstr "    -d\ttmărimea maximă a unui segment de date al procesului"
-
-#~ msgid "    -m\tthe maximum resident set size"
-#~ msgstr "    -m\tmărimea maximă de rezidenţă"
-
-#~ msgid "    -s\tthe maximum stack size"
-#~ msgstr "    -s\tmărimea maximă a stivei(stack)"
-
-#~ msgid "    -t\tthe maximum amount of cpu time in seconds"
-#~ msgstr "    -t\tsuma maximă a timpului cpu în secunde"
-
-#~ msgid "    -f\tthe maximum size of files created by the shell"
-#~ msgstr "    -f\ttmărimea maximă a fişierelor create de shell"
-
-#~ msgid "    -p\tthe pipe buffer size"
-#~ msgstr "    -p\tmărimea tamponului de legătură (pipe buffer)"
-
-#~ msgid "    -n\tthe maximum number of open file descriptors"
-#~ msgstr "    -n\tnumărul maxim de fişiere deschise"
-
-#~ msgid "    -u\tthe maximum number of user processes"
-#~ msgstr "    -u\tnumărul maxim de procese utilizator"
-
-#~ msgid "    -v\tthe size of virtual memory"
-#~ msgstr "    -v\tmărimea memoriei virtuale"
-
-#~ msgid "If LIMIT is given, it is the new value of the specified resource."
-#~ msgstr "Dacă este dată LIMITĂ, va fi noua valoare a resursei specificate."
-
-#~ msgid "Otherwise, the current value of the specified resource is printed."
-#~ msgstr ""
-#~ "În caz contrar, este tipărită valoarea curentă a resursei specificate."
-
-#~ msgid "If no option is given, then -f is assumed.  Values are in 1k"
-#~ msgstr ""
-#~ "Dacă nu este dată nici o opţiune se presupune -f.  Valorile sunt exprimate"
-
-#~ msgid "increments, except for -t, which is in seconds, -p, which is in"
-#~ msgstr ""
-#~ "în incrementări de 1k, exceptând -t, care este în secunde, -p, care este "
-#~ "în"
-
-#~ msgid "increments of 512 bytes, and -u, which is an unscaled number of"
-#~ msgstr "incrementări de 512 octeţi, şi -u, care este un număr nescalat de"
-
-#~ msgid "processes."
-#~ msgstr "procese."
-
-#~ msgid ""
-#~ "The user file-creation mask is set to MODE.  If MODE is omitted, or if"
-#~ msgstr ""
-#~ "Masca de crearecreation mask) a fişierului utilizatorului e setată la "
-#~ "MOD.  Dacă"
-
-#~ msgid ""
-#~ "`-S' is supplied, the current value of the mask is printed.  The `-S'"
-#~ msgstr ""
-#~ "MOD este omis sau este dat `-S', este tipărită valoarea curentă a "
-#~ "măştii.  Opţiunea"
-
-#~ msgid ""
-#~ "option makes the output symbolic; otherwise an octal number is output."
-#~ msgstr ""
-#~ "`-S' returnează output simbolic; în caz contrar outputul este un număr "
-#~ "octal."
-
-#~ msgid "If MODE begins with a digit, it is interpreted as an octal number,"
-#~ msgstr "Dacă MOD începe cu un digit, este interpretat ca număr octal,"
-
-#~ msgid ""
-#~ "otherwise it is a symbolic mode string like that accepted by chmod(1)."
-#~ msgstr "în caz contrar este un şir mod simbolic premis de chmod(1)."
-
-#~ msgid ""
-#~ "Wait for the specified process and report its termination status.  If"
-#~ msgstr ""
-#~ "Aşteaptă după procesul specificat şi raportează starea de terminare.  Dacă"
-
-#~ msgid "N is not given, all currently active child processes are waited for,"
-#~ msgstr ""
-#~ "N nu este dat,se aşteaptă după toate procesele copil(child) curente,"
-
-#~ msgid "and the return code is zero.  N may be a process ID or a job"
-#~ msgstr ""
-#~ "şi codul returnat este zero.  N poate fi un ID de proces sau o "
-#~ "specificaţie"
-
-#~ msgid "specification; if a job spec is given, all processes in the job's"
-#~ msgstr "de job; Dacă este dată o specificaţie de job,se aşteaptă după"
-
-#~ msgid "pipeline are waited for."
-#~ msgstr " toate procesele din legătură(pipeline)."
-
-#~ msgid "and the return code is zero.  N is a process ID; if it is not given,"
-#~ msgstr ""
-#~ "şi codul returnat este zero.  N este un ID de proces; dacă nu este dat,"
-
-#~ msgid "all child processes of the shell are waited for."
-#~ msgstr "se va aştepta după doate procesele copil(child) din shell."
-
-#~ msgid "The `for' loop executes a sequence of commands for each member in a"
-#~ msgstr ""
-#~ "Ciclul `for' execută o secvenţă de comenzi pentru fiecare membru dintr-o"
-
-#~ msgid ""
-#~ "list of items.  If `in WORDS ...;' is not present, then `in \"$@\"' is"
-#~ msgstr ""
-#~ "listă de elemente.  Dacă `in CUVINTE...;' nu este prezent, atunci `in \"$@"
-#~ "\"'"
-
-#~ msgid ""
-#~ "assumed.  For each element in WORDS, NAME is set to that element, and"
-#~ msgstr ""
-#~ "este presupus.  Pentru fiecare element din CUVINTE, NUME este setat ca "
-#~ "acel"
-
-#~ msgid "the COMMANDS are executed."
-#~ msgstr "element şi COMENZI sunt executate."
-
-#~ msgid "The WORDS are expanded, generating a list of words.  The"
-#~ msgstr "CUVINTEle sunt expandate, generând o listă de cuvinte.  Setul de"
-
-#~ msgid "set of expanded words is printed on the standard error, each"
-#~ msgstr ""
-#~ "de cuvinte expandate este tipărit la dispozitivul de eroare standard, "
-#~ "fiecare"
-
-#~ msgid "preceded by a number.  If `in WORDS' is not present, `in \"$@\"'"
-#~ msgstr ""
-#~ "fiind precedat de un număr.  Dacă `in CUVINTE' nu este prezent, `in \"$@"
-#~ "\"'"
-
-#~ msgid "is assumed.  The PS3 prompt is then displayed and a line read"
-#~ msgstr ""
-#~ "este presupus.  Promptul PS3 este apoi afişat şi o linie va fi citită de"
-
-#~ msgid "from the standard input.  If the line consists of the number"
-#~ msgstr ""
-#~ "la intrare(input) standard.  Dacă linia e alcătuită dintr-unul din "
-#~ "numerele"
-
-#~ msgid "corresponding to one of the displayed words, then NAME is set"
-#~ msgstr "corespunzătoare unuia din cuvintele afişate, atunci NUME este setat"
-
-#~ msgid "to that word.  If the line is empty, WORDS and the prompt are"
-#~ msgstr ""
-#~ "drept cuvântul respectiv.  Dacă linia este vidă, CUVINTEle şi promptul "
-#~ "sunt"
-
-#~ msgid "redisplayed.  If EOF is read, the command completes.  Any other"
-#~ msgstr ""
-#~ "reafişate.  Dacă se citeşte EOF, comanda ajunge la sfârşit.  Orice altă"
-
-#~ msgid "value read causes NAME to be set to null.  The line read is saved"
-#~ msgstr ""
-#~ "valoare citită va face ca NUMEle setat să fie setat null.  Linia citită "
-#~ "este salvată"
-
-#~ msgid "in the variable REPLY.  COMMANDS are executed after each selection"
-#~ msgstr ""
-#~ "în variabila RĂSPUNS.  COMENZIle sunt executate după fiecare selecţie"
-
-#~ msgid "until a break or return command is executed."
-#~ msgstr "până când se execută o comandă break sau return."
-
-#~ msgid "Selectively execute COMMANDS based upon WORD matching PATTERN.  The"
-#~ msgstr ""
-#~ "Execută selectiv COMENZI bazându-se pe potrivirea CUVÂNTului în TIPAR."
-
-#~ msgid "`|' is used to separate multiple patterns."
-#~ msgstr "  `|' este folosit pentru a separa mai multe tipare."
-
-#~ msgid ""
-#~ "The if COMMANDS are executed.  If the exit status is zero, then the then"
-#~ msgstr ""
-#~ "COMENZIle if sunt executate.  Dacă starea de ieşire este zero, atunc"
-
-#~ msgid ""
-#~ "COMMANDS are executed.  Otherwise, each of the elif COMMANDS are executed"
-#~ msgstr ""
-#~ "COMENZIle then sunt executate.  În caz contrar, fiecare din COMENZIle "
-#~ "elif sunt executate"
-
-#~ msgid ""
-#~ "in turn, and if the exit status is zero, the corresponding then COMMANDS"
-#~ msgstr ""
-#~ "pe rând, şi dacă starea de ieşire este zero, atunci COMENZIle then "
-#~ "corespunzătoare"
-
-#~ msgid ""
-#~ "are executed and the if command completes.  Otherwise, the else COMMANDS"
-#~ msgstr ""
-#~ "sunt executate şi comanda if se termină.  În caz contrar, COMENZIle else"
-
-#~ msgid ""
-#~ "are executed, if present.  The exit status is the exit status of the last"
-#~ msgstr ""
-#~ "sunt executate, în cazul în care sunt prezente.  Starea de ieşire este "
-#~ "starea de ieşire"
-
-#~ msgid "command executed, or zero if no condition tested true."
-#~ msgstr ""
-#~ "a ultimei comenzi executate, sau zero dacă nici o condiţie nu s-a dovedit "
-#~ "adevărată."
-
-#~ msgid "Expand and execute COMMANDS as long as the final command in the"
-#~ msgstr "Expandează şi execută COMENZI atâta timp cât comanda finală din"
-
-#~ msgid "`while' COMMANDS has an exit status of zero."
-#~ msgstr "COMENZIle `while' au o stare de ieşire de zero."
-
-#~ msgid "`until' COMMANDS has an exit status which is not zero."
-#~ msgstr "COMENZIle `until' au o stare de ieşire diferită de zero."
-
-#~ msgid "Create a simple command invoked by NAME which runs COMMANDS."
-#~ msgstr "Crează o comandă simplă invocată de NUME care rulează COMENZI."
-
-#~ msgid "Arguments on the command line along with NAME are passed to the"
-#~ msgstr "Parametrii din linia de comandă împreună cu NUMEle sunt pasaţi"
-
-#~ msgid "function as $0 .. $n."
-#~ msgstr "funcţiei drept $0 .. $n."
-
-#~ msgid "Run a set of commands in a group.  This is one way to redirect an"
-#~ msgstr ""
-#~ "Rulează un set de comenzi dintr-un grup.  Aceasta este o cale de a "
-#~ "redirecta un"
-
-#~ msgid "entire set of commands."
-#~ msgstr "întreg set de comenzi."
-
-#~ msgid "This is similar to the `fg' command.  Resume a stopped or background"
-#~ msgstr ""
-#~ "Aceasta este similară comenzii `fg'.  Continuă(resume) un job stopat sau "
-#~ "din"
-
-#~ msgid "job.  If you specifiy DIGITS, then that job is used.  If you specify"
-#~ msgstr ""
-#~ "fundal(background).  Dacă se specifică DIGIŢI, atunci este folosit acel "
-#~ "job.  Dacă"
-
-#~ msgid ""
-#~ "WORD, then the job whose name begins with WORD is used.  Following the"
-#~ msgstr ""
-#~ "se specifică CUVÂNT, atunci e folosit jobul al cărui nume începe cu "
-#~ "CUVÂNT."
-
-#~ msgid "job specification with a `&' places the job in the background."
-#~ msgstr ""
-#~ "Specificând jobului un `&' după, va plasa jobul în fundal(background)."
-
-#~ msgid "BASH_VERSION    The version numbers of this Bash."
-#~ msgstr "BASH_VERSION    Numărul de versiune a acestui Bash."
-
-#~ msgid "CDPATH          A colon separated list of directories to search"
-#~ msgstr ""
-#~ "CDPATH          O listă de directoare separată prin două-puncte pentru a "
-#~ "se"
-
-#~ msgid "\t\twhen the argument to `cd' is not found in the current"
-#~ msgstr ""
-#~ "\t\tcăuta atunci când parametrii specificaţi comenzii `cd' nu sunt găsiţi "
-#~ "în"
-
-#~ msgid "\t\tdirectory."
-#~ msgstr "\t\tdirectorul curent."
-
-#~ msgid ""
-#~ "HISTFILE        The name of the file where your command history is stored."
-#~ msgstr ""
-#~ "HISTFILE        Numele fişierului unde istoricul comenzilor voastre este "
-#~ "stocat."
-
-#~ msgid "HISTFILESIZE    The maximum number of lines this file can contain."
-#~ msgstr ""
-#~ "HISTFILESIZE    Numărul maxim de linii pe care acest fişier poate să le "
-#~ "conţină."
-
-#~ msgid "HISTSIZE        The maximum number of history lines that a running"
-#~ msgstr ""
-#~ "HISTSIZE        Numărul maxim de linii de istoric care pot fi accesate"
-
-#~ msgid "\t\tshell can access."
-#~ msgstr "\t\tde un shell activ."
-
-#~ msgid "HOME            The complete pathname to your login directory."
-#~ msgstr "HOME            Calea completă către directorul vostru de login."
-
-#~ msgid ""
-#~ "HOSTTYPE        The type of CPU this version of Bash is running under."
-#~ msgstr ""
-#~ "HOSTTYPE        Tipul de CPU pe care rulează această versiune de Bash."
-
-#~ msgid ""
-#~ "IGNOREEOF       Controls the action of the shell on receipt of an EOF"
-#~ msgstr ""
-#~ "IGNOREEOF       Controlează acţiunea shell-ului la întâlnirea unui "
-#~ "caracter"
-
-#~ msgid "\t\tcharacter as the sole input.  If set, then the value"
-#~ msgstr ""
-#~ "\t\tEOF ca singură intrare(input).  Dacă este setat, atunci valoarea"
-
-#~ msgid "\t\tof it is the number of EOF characters that can be seen"
-#~ msgstr "\t\tacestuia este numărul de caractere EOF care pot fi întâlnite"
-
-#~ msgid "\t\tin a row on an empty line before the shell will exit"
-#~ msgstr "\t\tpe rând într-o linie vidă înainte de ieşirea shell-ului."
-
-#~ msgid "\t\t(default 10).  When unset, EOF signifies the end of input."
-#~ msgstr ""
-#~ "\t\t(implicit 10).  Când este desetat(unset), EOF semnifică sfârşitul "
-#~ "intrării(input)."
-
-#~ msgid "MAILCHECK\tHow often, in seconds, Bash checks for new mail."
-#~ msgstr ""
-#~ "MAILCHECK\tCât de des, în secunde, Bash-ul să verifice dacă există mail "
-#~ "nou."
-
-#~ msgid "MAILPATH\tA colon-separated list of filenames which Bash checks"
-#~ msgstr ""
-#~ "MAILPATH\tO listă de fişiere separate prin două-puncte pe care Bash o "
-#~ "verifică"
-
-#~ msgid "\t\tfor new mail."
-#~ msgstr "\t\tpentru mail nou."
-
-#~ msgid "OSTYPE\t\tThe version of Unix this version of Bash is running on."
-#~ msgstr ""
-#~ "OSTYPE\t\tVersiunea de Unix pe care această versiune de Bash rulează."
-
-#~ msgid "PATH            A colon-separated list of directories to search when"
-#~ msgstr ""
-#~ "PATH            O listă de directoare separată prin două-puncte care se va"
-
-#~ msgid "\t\tlooking for commands."
-#~ msgstr "\t\tindexa în căutarea comenzilor."
-
-#~ msgid "PROMPT_COMMAND  A command to be executed before the printing of each"
-#~ msgstr ""
-#~ "PROMPT_COMMAND  O comandă care va fi executată înainte de tipărirea "
-#~ "fiecărui"
-
-#~ msgid "\t\tprimary prompt."
-#~ msgstr "\t\tprompt primar."
-
-#~ msgid "PS1             The primary prompt string."
-#~ msgstr "PS1             Şirul promptului primar."
-
-#~ msgid "PS2             The secondary prompt string."
-#~ msgstr "PS2             Şirul promptului secundar."
-
-#~ msgid "TERM            The name of the current terminal type."
-#~ msgstr "TERM            Numele tipului de terminal curent."
-
-#~ msgid "auto_resume     Non-null means a command word appearing on a line by"
-#~ msgstr ""
-#~ "auto_resume     Dacă nu e vid rezultă că un cuvânt comandă ce apare pe o "
-#~ "linie"
-
-#~ msgid "\t\titself is first looked for in the list of currently"
-#~ msgstr "\t\tsingur este prima dată căutat în lista "
-
-#~ msgid "\t\tstopped jobs.  If found there, that job is foregrounded."
-#~ msgstr ""
-#~ "\t\tjoburilor.curente stopate.  Dacă este găsit acolo, acel job este adus "
-#~ "în prim-plan(foreground)."
-
-#~ msgid "\t\tA value of `exact' means that the command word must"
-#~ msgstr "\t\tO valoare de `exact' înseamnă că acel cuvânt comandă trebuie"
-
-#~ msgid "\t\texactly match a command in the list of stopped jobs.  A"
-#~ msgstr ""
-#~ "\t\tsă se potrivească perfect unei comenzi din lista de joburi stopate.  O"
-
-#~ msgid "\t\tvalue of `substring' means that the command word must"
-#~ msgstr "\t\tvaloare de `substring' înseamnă că acel cuvânt comandă trebuie"
-
-#~ msgid "\t\tmatch a substring of the job.  Any other value means that"
-#~ msgstr ""
-#~ "\t\tsă se potrivească unui subşir al jobului.  Orice altă valoare "
-#~ "înseamnă că"
-
-#~ msgid "\t\tthe command must be a prefix of a stopped job."
-#~ msgstr "\t\tacea comandă trebuie să fie prefixul unui job stopat."
-
-#~ msgid "command_oriented_history"
-#~ msgstr "command_oriented_history"
-
-#~ msgid ""
-#~ "                Non-null means to save multiple-line commands together on"
-#~ msgstr ""
-#~ "                Nevid reprezintă salvarea mai multor linii de comandă "
-#~ "împreună într-o"
-
-#~ msgid "                a single history line."
-#~ msgstr "                singură linie de istoric."
-
-#~ msgid "histchars       Characters controlling history expansion and quick"
-#~ msgstr ""
-#~ "histchars       Caractere care controlează expansiunea istoricului şi"
-
-#~ msgid "\t\tsubstitution.  The first character is the history"
-#~ msgstr ""
-#~ "\t\tsubstituţii rapide.  Primul caracter este caracterul de substituţie al"
-
-#~ msgid "\t\tsubstitution character, usually `!'.  The second is"
-#~ msgstr "\t\tistoricului, de obicei `!'.  Al doilea este"
-
-#~ msgid "\t\tthe `quick substitution' character, usually `^'.  The"
-#~ msgstr "\t\tcaracterul de `quick substitution', de obicei `^'.  Al treilea"
-
-#~ msgid "\t\tthird is the `history comment' character, usually `#'."
-#~ msgstr "\t\teste caracterul de `history comment', de obicei `#'."
-
-#~ msgid "HISTCONTROL\tSet to a value of `ignorespace', it means don't enter"
-#~ msgstr ""
-#~ "HISTCONTROL\tSetează o valoare de `ignorespace', care înseamnă să nu"
-
-#~ msgid "\t\tlines which begin with a space or tab on the history"
-#~ msgstr "\t\tintroduci în lista de istoric linii care încep cu un"
-
-#~ msgid "\t\tlist.  Set to a value of `ignoredups', it means don't"
-#~ msgstr ""
-#~ "\t\tspaţiu sau un tab.  Setează o valoare de  `ignoredups', care înseamnă"
-
-#~ msgid "\t\tenter lines which match the last entered line.  Set to"
-#~ msgstr ""
-#~ "\t\ta nu se introduce linii care sunt asemănătoare ultimei linii "
-#~ "introduse."
-
-#~ msgid "\t\t`ignoreboth' means to combine the two options.  Unset,"
-#~ msgstr ""
-#~ "\t\tSetează o valaore de `ignoreboth' însemnând combinarea celor două "
-#~ "opţiuni."
-
-#~ msgid "\t\tor set to any other value than those above means to save"
-#~ msgstr ""
-#~ "\t\t  Desetat(unset) sau setat la orice altă valoare decât acelea de mai "
-#~ "sus"
-
-#~ msgid "\t\tall lines on the history list."
-#~ msgstr "\t\taînseamnă salvarea tuturor liniilor în lista istoricului."
-
-#~ msgid "Adds a directory to the top of the directory stack, or rotates"
-#~ msgstr ""
-#~ "Adaugă un director în partea superioară a stivei de directoare, sau "
-#~ "roteşte"
-
-#~ msgid "the stack, making the new top of the stack the current working"
-#~ msgstr "stiva, făcând noul element superior al listei directorul curent"
-
-#~ msgid "directory.  With no arguments, exchanges the top two directories."
-#~ msgstr ""
-#~ "de lucru.  Fără parametri, interchimbă cele două directoare superioare."
-
-#~ msgid "+N\tRotates the stack so that the Nth directory (counting"
-#~ msgstr "+N\tRoteşte stiva astfel încât al N-ulea director (numărând"
-
-#~ msgid "\tfrom the left of the list shown by `dirs') is at the top."
-#~ msgstr "\tde la stânga listei afişată de `dirs') va fi în vârf(top)."
-
-#~ msgid "-N\tRotates the stack so that the Nth directory (counting"
-#~ msgstr "-N\tRoteşte stiva astfel încât al N-ulea director (numărând"
-
-#~ msgid "\tfrom the right) is at the top."
-#~ msgstr "\tde la dreapta) va fi în vârf."
-
-#~ msgid "-n\tsuppress the normal change of directory when adding directories"
-#~ msgstr ""
-#~ "-n\tinhibă schimbarea normală de directoare la adăugarea directoarelor"
-
-#~ msgid "\tto the stack, so only the stack is manipulated."
-#~ msgstr "\tîn stivă, astfel încât doar stiva să fie manipulată."
-
-#~ msgid "dir\tadds DIR to the directory stack at the top, making it the"
-#~ msgstr "dir\tadaugă DIR în vârful stivei de directoare, făcându-l"
-
-#~ msgid "You can see the directory stack with the `dirs' command."
-#~ msgstr "Puteţi vedea stiva de directoare cu ajutorul comenzii `dirs'."
-
-#~ msgid "Removes entries from the directory stack.  With no arguments,"
-#~ msgstr "Şterge intrările din stiva de directoare.  Fără parametri, "
-
-#~ msgid "removes the top directory from the stack, and cd's to the new"
-#~ msgstr "şterge directorul superior din stivă, şi face cd la noul"
-
-#~ msgid "+N\tremoves the Nth entry counting from the left of the list"
-#~ msgstr "+N\tşterge al N-ulea element numărând din stânga listei"
-
-#~ msgid "\tshown by `dirs', starting with zero.  For example: `popd +0'"
-#~ msgstr "\tafişate de `dirs', începând cu zero.  De exemplu: `popd +0'"
-
-#~ msgid "\tremoves the first directory, `popd +1' the second."
-#~ msgstr "\tşterge primul director, `popd +1' al doilea."
-
-#~ msgid "-N\tremoves the Nth entry counting from the right of the list"
-#~ msgstr "-N\tşterge al N-ulea element numărând din dreapta listei"
-
-#~ msgid "\tshown by `dirs', starting with zero.  For example: `popd -0'"
-#~ msgstr "\tafişate de `dirs', începând cu zero.  De exemplu: `popd -0'"
-
-#~ msgid "\tremoves the last directory, `popd -1' the next to last."
-#~ msgstr "\tşterge ultimul director, `popd -1' penultimul."
-
-#~ msgid ""
-#~ "-n\tsuppress the normal change of directory when removing directories"
-#~ msgstr ""
-#~ "-n\tinhibă schimbarea normală de directoare când se şterg diurectoare"
-
-#~ msgid "\tfrom the stack, so only the stack is manipulated."
-#~ msgstr "\tdin stivă, astfel încât numai stiva să fie manipulată."
-
-#~ msgid "Display the list of currently remembered directories.  Directories"
-#~ msgstr "Afişează lista curentă de directoare reţinute.  Directoarele"
-
-#~ msgid "find their way onto the list with the `pushd' command; you can get"
-#~ msgstr ""
-#~ "îşi gasesc locul în listă cu ajutorul comenzii `pushd'; puteţi merge"
-
-#~ msgid "back up through the list with the `popd' command."
-#~ msgstr "prin listă cu ajutorul comenzii `popd'."
-
-#~ msgid ""
-#~ "The -l flag specifies that `dirs' should not print shorthand versions"
-#~ msgstr ""
-#~ "Parametrul(flag) -l specifică faptul că  `dirs' nu ar trebui să "
-#~ "tipărească "
-
-#~ msgid ""
-#~ "of directories which are relative to your home directory.  This means"
-#~ msgstr ""
-#~ "versiuni prescurtate ale directoarelor care au legătură(relative) cu home-"
-#~ "directory-ul."
-
-#~ msgid "that `~/bin' might be displayed as `/homes/bfox/bin'.  The -v flag"
-#~ msgstr ""
-#~ "  Aceasta înseamnă că `~/bin' poate fi afişat ca `/homes/bfox/bin'  "
-#~ "Parametrul"
-
-#~ msgid "causes `dirs' to print the directory stack with one entry per line,"
-#~ msgstr ""
-#~ "-v face ca `dirs' să afişeze stiva de directoare doar câte o intrare pe "
-#~ "linie,"
-
-#~ msgid ""
-#~ "prepending the directory name with its position in the stack.  The -p"
-#~ msgstr "prefixând numele directorului cu poziţia în stivă.  Parametrul -p"
-
-#~ msgid "flag does the same thing, but the stack position is not prepended."
-#~ msgstr "face acelaşi lucru, dar poziţia în stivă nu este prefix."
-
-#~ msgid ""
-#~ "The -c flag clears the directory stack by deleting all of the elements."
-#~ msgstr ""
-#~ "Parametrul(flag) -c şterge stiva de directoare prin ştergerea tuturor "
-#~ "elementelor."
-
-#~ msgid ""
-#~ "+N\tdisplays the Nth entry counting from the left of the list shown by"
-#~ msgstr "+N\tafişează a N-a intrare numărând de la stânga listei afişate de"
-
-#~ msgid "\tdirs when invoked without options, starting with zero."
-#~ msgstr "\tdirs atunci când e invocată fără opţiuni, începând cu zero."
-
-#~ msgid ""
-#~ "-N\tdisplays the Nth entry counting from the right of the list shown by"
-#~ msgstr "-N\tafişează a N-a intrare numărând de la dreapta listei afişate de"
-
-#~ msgid "Toggle the values of variables controlling optional behavior."
-#~ msgstr ""
-#~ "Schimbă(toggle) valorile variabilelor, controlând comportamentul opţional."
-
-#~ msgid "The -s flag means to enable (set) each OPTNAME; the -u flag"
-#~ msgstr ""
-#~ "Parametrul -s înseamnă activarea(setarea) fiecărei NUME_OPT; parametrul -u"
-
-#~ msgid "unsets each OPTNAME.  The -q flag suppresses output; the exit"
-#~ msgstr "desetează(unset) fiecare NUME_OPT.  Parametrul -q inhibă output-ul;"
-
-#~ msgid "status indicates whether each OPTNAME is set or unset.  The -o"
-#~ msgstr ""
-#~ "starea de ieşire indică dacă fiecare NUME_OPT este setat sau desetat."
-
-#~ msgid "option restricts the OPTNAMEs to those defined for use with"
-#~ msgstr ""
-#~ "  Parametrul -o restricţionează NUME_OPT la acelea definite pentru a fi "
-
-#~ msgid "`set -o'.  With no options, or with the -p option, a list of all"
-#~ msgstr ""
-#~ "folosite cu `set -o'.  Fără nici o opţiune, sau cu opţiunea -p, este "
-#~ "afişată"
-
-#~ msgid "settable options is displayed, with an indication of whether or"
-#~ msgstr ""
-#~ "o listă a tuturor opţiunilor setabile, ceea ce indică dacă fiecare este"
-
-#~ msgid "not each is set."
-#~ msgstr "setată sau nu."
+#~ msgid "%s: invalid associative array key"
+#~ msgstr "%s: cheie de matrice asociativă nevalidă"
index e1f1613e51f5f6417bd8c9421241d93173869715..ec59728a897aa0cd5dec0e0b705ca3a9066a41b8 100644 (file)
Binary files a/po/ru.gmo and b/po/ru.gmo differ
index 56e477b772dcd7df1195e694c0d07f45cb401990..4cf2cbc578c39c4104ee7caf7c689c79d99fc6d6 100644 (file)
--- a/po/ru.po
+++ b/po/ru.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: bash 5.1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-11-28 12:51-0500\n"
+"POT-Creation-Date: 2022-01-11 14:50-0500\n"
 "PO-Revision-Date: 2021-02-17 11:04+0200\n"
 "Last-Translator: Pavlo Marianov <acid@jack.kiev.ua>\n"
 "Language-Team: Russian <gnu@d07.ru>\n"
@@ -17,64 +17,61 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "X-Bugs: Report translation errors to the Language-Team address.\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 "X-Generator: Poedit 2.2.1\n"
 
 #: arrayfunc.c:66
 msgid "bad array subscript"
 msgstr "неправильный индекс массива"
 
-#: arrayfunc.c:421 builtins/declare.def:638 variables.c:2274 variables.c:2300
-#: variables.c:3133
+#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268
+#: variables.c:3101
 #, c-format
 msgid "%s: removing nameref attribute"
 msgstr "%s: удаляется атрибут nameref"
 
-#: arrayfunc.c:446 builtins/declare.def:851
+#: arrayfunc.c:496 builtins/declare.def:868
 #, c-format
 msgid "%s: cannot convert indexed to associative array"
 msgstr "%s: не удаётся преобразовать индекс в ассоциативный массив"
 
-#: arrayfunc.c:700
-#, c-format
-msgid "%s: invalid associative array key"
-msgstr "%s: недопустимый ключ ассоциативного массива"
-
-#: arrayfunc.c:702
+#: arrayfunc.c:777
 #, c-format
 msgid "%s: cannot assign to non-numeric index"
 msgstr "%s: не удаётся присвоить значение нечисловому индексу"
 
-#: arrayfunc.c:747
+#: arrayfunc.c:822
 #, c-format
 msgid "%s: %s: must use subscript when assigning associative array"
-msgstr "%s: %s: необходимо использовать индекс при назначении ассоциативному массиву"
+msgstr ""
+"%s: %s: необходимо использовать индекс при назначении ассоциативному массиву"
 
-#: bashhist.c:452
+#: bashhist.c:455
 #, c-format
 msgid "%s: cannot create: %s"
 msgstr "%s: не удаётся создать файл: %s"
 
-#: bashline.c:4310
+#: bashline.c:4479
 msgid "bash_execute_unix_command: cannot find keymap for command"
 msgstr "bash_execute_unix_command: не удаётся найти раскладку для команды"
 
-#: bashline.c:4459
+#: bashline.c:4637
 #, c-format
 msgid "%s: first non-whitespace character is not `\"'"
 msgstr "%s: первый непробельный символ не является «\"»"
 
-#: bashline.c:4488
+#: bashline.c:4666
 #, c-format
 msgid "no closing `%c' in %s"
 msgstr "нет закрывающего «%c» в %s"
 
-#: bashline.c:4519
+#: bashline.c:4697
 #, c-format
 msgid "%s: missing colon separator"
 msgstr "%s: отсутствует разделитель-двоеточие"
 
-#: bashline.c:4555
+#: bashline.c:4733
 #, c-format
 msgid "`%s': cannot unbind in command keymap"
 msgstr "«%s»: не удаётся отменить привязку в keymap команды"
@@ -94,7 +91,7 @@ msgstr "расширение скобки: не удалось выделить
 msgid "brace expansion: failed to allocate memory for `%s'"
 msgstr "расширение скобки: не удалось выделить память для «%s»"
 
-#: builtins/alias.def:131 variables.c:1844
+#: builtins/alias.def:131 variables.c:1817
 #, c-format
 msgid "`%s': invalid alias name"
 msgstr "«%s»: недопустимый псевдоним"
@@ -167,7 +164,7 @@ msgstr ""
 msgid "HOME not set"
 msgstr "Не задана переменная HOME"
 
-#: builtins/cd.def:335 builtins/common.c:161 test.c:901
+#: builtins/cd.def:335 builtins/common.c:161 test.c:916
 msgid "too many arguments"
 msgstr "слишком много аргументов"
 
@@ -194,7 +191,7 @@ msgstr "предупреждение: "
 msgid "%s: usage: "
 msgstr "%s: использование: "
 
-#: builtins/common.c:193 shell.c:516 shell.c:844
+#: builtins/common.c:193 shell.c:524 shell.c:866
 #, c-format
 msgid "%s: option requires an argument"
 msgstr "%s: для параметра требуется аргумент"
@@ -209,7 +206,7 @@ msgstr "%s: требуется числовой аргумент"
 msgid "%s: not found"
 msgstr "%s: не найден"
 
-#: builtins/common.c:216 shell.c:857
+#: builtins/common.c:216 shell.c:879
 #, c-format
 msgid "%s: invalid option"
 msgstr "%s: недопустимый параметр"
@@ -219,7 +216,7 @@ msgstr "%s: недопустимый параметр"
 msgid "%s: invalid option name"
 msgstr "%s: недопустимое название параметра"
 
-#: builtins/common.c:230 execute_cmd.c:2373 general.c:368 general.c:373
+#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373
 #, c-format
 msgid "`%s': not a valid identifier"
 msgstr "«%s»: это недопустимый идентификатор"
@@ -232,7 +229,7 @@ msgstr "недопустимое восьмеричное число"
 msgid "invalid hex number"
 msgstr "недопустимое шестнадцатеричное число"
 
-#: builtins/common.c:244 expr.c:1569
+#: builtins/common.c:244 expr.c:1574
 msgid "invalid number"
 msgstr "недопустимое число"
 
@@ -246,88 +243,93 @@ msgstr "%s: недопустимое указание сигнала"
 msgid "`%s': not a pid or valid job spec"
 msgstr "«%s»: это не идентификатор процесса и не допустимый указатель задания"
 
-#: builtins/common.c:266 error.c:510
+#: builtins/common.c:266 error.c:536
 #, c-format
 msgid "%s: readonly variable"
 msgstr "%s: переменная только для чтения"
 
-#: builtins/common.c:274
+#: builtins/common.c:273
+#, fuzzy, c-format
+msgid "%s: cannot assign"
+msgstr "%s: не удаётся выполнить сброс"
+
+#: builtins/common.c:281
 #, c-format
 msgid "%s: %s out of range"
 msgstr "%s: %s за пределами диапазона"
 
-#: builtins/common.c:274 builtins/common.c:276
+#: builtins/common.c:281 builtins/common.c:283
 msgid "argument"
 msgstr "аргумент"
 
-#: builtins/common.c:276
+#: builtins/common.c:283
 #, c-format
 msgid "%s out of range"
 msgstr "%s за пределами диапазона"
 
-#: builtins/common.c:284
+#: builtins/common.c:291
 #, c-format
 msgid "%s: no such job"
 msgstr "%s: нет такого задания"
 
-#: builtins/common.c:292
+#: builtins/common.c:299
 #, c-format
 msgid "%s: no job control"
 msgstr "%s: нет управления заданиями"
 
-#: builtins/common.c:294
+#: builtins/common.c:301
 msgid "no job control"
 msgstr "нет управления заданиями"
 
-#: builtins/common.c:304
+#: builtins/common.c:311
 #, c-format
 msgid "%s: restricted"
 msgstr "%s: ограниченный режим"
 
-#: builtins/common.c:306
+#: builtins/common.c:313
 msgid "restricted"
 msgstr "ограниченный режим"
 
-#: builtins/common.c:314
+#: builtins/common.c:321
 #, c-format
 msgid "%s: not a shell builtin"
 msgstr "%s: это не не встроенная команда bash"
 
-#: builtins/common.c:323
+#: builtins/common.c:330
 #, c-format
 msgid "write error: %s"
 msgstr "ошибка записи: %s"
 
-#: builtins/common.c:331
+#: builtins/common.c:338
 #, c-format
 msgid "error setting terminal attributes: %s"
 msgstr "ошибка назначения атрибутов терминала: %s"
 
-#: builtins/common.c:333
+#: builtins/common.c:340
 #, c-format
 msgid "error getting terminal attributes: %s"
 msgstr "ошибка получения атрибутов терминала: %s"
 
-#: builtins/common.c:635
+#: builtins/common.c:642
 #, c-format
 msgid "%s: error retrieving current directory: %s: %s\n"
 msgstr "%s: ошибка определения текущего каталога: %s: %s\n"
 
-#: builtins/common.c:701 builtins/common.c:703
+#: builtins/common.c:708 builtins/common.c:710
 #, c-format
 msgid "%s: ambiguous job spec"
 msgstr "%s: неоднозначный указатель задания"
 
-#: builtins/common.c:964
+#: builtins/common.c:971
 msgid "help not available in this version"
 msgstr "справка отсутствует в этой версии"
 
-#: builtins/common.c:1008 builtins/set.def:953 variables.c:3839
+#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825
 #, c-format
 msgid "%s: cannot unset: readonly %s"
 msgstr "%s: не удаётся выполнить сброс: %s доступен только для чтения"
 
-#: builtins/common.c:1013 builtins/set.def:932 variables.c:3844
+#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830
 #, c-format
 msgid "%s: cannot unset"
 msgstr "%s: не удаётся выполнить сброс"
@@ -337,108 +339,108 @@ msgstr "%s: не удаётся выполнить сброс"
 msgid "%s: invalid action name"
 msgstr "%s: недопустимое название действия"
 
-#: builtins/complete.def:486 builtins/complete.def:634
-#: builtins/complete.def:865
+#: builtins/complete.def:486 builtins/complete.def:642
+#: builtins/complete.def:873
 #, c-format
 msgid "%s: no completion specification"
 msgstr "%s: нет определения завершения"
 
-#: builtins/complete.def:688
+#: builtins/complete.def:696
 msgid "warning: -F option may not work as you expect"
 msgstr "предупреждение: параметр -F может работать не так, как ожидается"
 
-#: builtins/complete.def:690
+#: builtins/complete.def:698
 msgid "warning: -C option may not work as you expect"
 msgstr "предупреждение: параметр -C может работать не так, как ожидается"
 
-#: builtins/complete.def:838
+#: builtins/complete.def:846
 msgid "not currently executing completion function"
 msgstr "сейчас не выполняет функцию завершения"
 
-#: builtins/declare.def:134
+#: builtins/declare.def:137
 msgid "can only be used in a function"
 msgstr "можно использовать только внутри функции"
 
-#: builtins/declare.def:363 builtins/declare.def:756
+#: builtins/declare.def:437
+msgid "cannot use `-f' to make functions"
+msgstr "«-f» нельзя использовать для создания функций"
+
+#: builtins/declare.def:464 execute_cmd.c:6132
+#, c-format
+msgid "%s: readonly function"
+msgstr "%s: значение функции можно только считать"
+
+#: builtins/declare.def:521 builtins/declare.def:804
 #, c-format
 msgid "%s: reference variable cannot be an array"
 msgstr "%s: ссылочная переменная не может быть массивом"
 
-#: builtins/declare.def:374 variables.c:3385
+#: builtins/declare.def:532 variables.c:3359
 #, c-format
 msgid "%s: nameref variable self references not allowed"
 msgstr "%s: переменные nameref, ссылающиеся сами на себя, не допускаются"
 
-#: builtins/declare.def:379 variables.c:2104 variables.c:3304 variables.c:3312
-#: variables.c:3382
+#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286
+#: variables.c:3356
 #, c-format
 msgid "%s: circular name reference"
 msgstr "%s: круговая ссылка на имя"
 
-#: builtins/declare.def:384 builtins/declare.def:762 builtins/declare.def:773
+#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820
 #, c-format
 msgid "`%s': invalid variable name for name reference"
 msgstr "«%s»: недопустимое название переменной для ссылки на имя"
 
-#: builtins/declare.def:514
-msgid "cannot use `-f' to make functions"
-msgstr "«-f» нельзя использовать для создания функций"
-
-#: builtins/declare.def:526 execute_cmd.c:5986
-#, c-format
-msgid "%s: readonly function"
-msgstr "%s: значение функции можно только считать"
-
-#: builtins/declare.def:824
-#, c-format
-msgid "%s: quoted compound array assignment deprecated"
-msgstr "%s: присвоение составного массива в кавычках устарело"
-
-#: builtins/declare.def:838
+#: builtins/declare.def:856
 #, c-format
 msgid "%s: cannot destroy array variables in this way"
 msgstr "%s: переменные массива нельзя уничтожить таким образом"
 
-#: builtins/declare.def:845 builtins/read.def:815
+#: builtins/declare.def:862 builtins/read.def:887
 #, c-format
 msgid "%s: cannot convert associative to indexed array"
 msgstr "%s: не удаётся преобразовать ассоциативный массив в индексированный"
 
-#: builtins/enable.def:143 builtins/enable.def:151
+#: builtins/declare.def:891
+#, c-format
+msgid "%s: quoted compound array assignment deprecated"
+msgstr "%s: присвоение составного массива в кавычках устарело"
+
+#: builtins/enable.def:145 builtins/enable.def:153
 msgid "dynamic loading not available"
 msgstr "динамическая загрузка недоступна"
 
-#: builtins/enable.def:343
+#: builtins/enable.def:376
 #, c-format
 msgid "cannot open shared object %s: %s"
 msgstr "не удаётся открыть общий объект %s: %s"
 
-#: builtins/enable.def:371
+#: builtins/enable.def:405
 #, c-format
 msgid "cannot find %s in shared object %s: %s"
 msgstr "не удаётся найти %s в общем объекте %s: %s"
 
-#: builtins/enable.def:388
+#: builtins/enable.def:422
 #, c-format
 msgid "%s: dynamic builtin already loaded"
 msgstr "%s: динамически встроенная команда уже загружена"
 
-#: builtins/enable.def:392
+#: builtins/enable.def:426
 #, c-format
 msgid "load function for %s returns failure (%d): not loaded"
 msgstr "загрузка функции %s завершилась ошибкой (%d): не загружена"
 
-#: builtins/enable.def:517
+#: builtins/enable.def:551
 #, c-format
 msgid "%s: not dynamically loaded"
 msgstr "%s: не загружается динамически"
 
-#: builtins/enable.def:543
+#: builtins/enable.def:577
 #, c-format
 msgid "%s: cannot delete: %s"
 msgstr "%s: не удаётся удалить: %s"
 
-#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5818
+#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959
 #, c-format
 msgid "%s: is a directory"
 msgstr "%s: это каталог"
@@ -453,7 +455,7 @@ msgstr "%s: это не обычный файл"
 msgid "%s: file is too large"
 msgstr "%s: файл слишком велик"
 
-#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1647
+#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673
 #, c-format
 msgid "%s: cannot execute binary file"
 msgstr "%s: не удаётся запустить бинарный файл"
@@ -546,15 +548,18 @@ msgstr ""
 
 #: builtins/help.def:185
 #, c-format
-msgid "no help topics match `%s'.  Try `help help' or `man -k %s' or `info %s'."
-msgstr "нет разделов справки, соответствующих «%s».  Попробуйте ввести «help help» или «man -k %s» или «info %s»."
+msgid ""
+"no help topics match `%s'.  Try `help help' or `man -k %s' or `info %s'."
+msgstr ""
+"нет разделов справки, соответствующих «%s».  Попробуйте ввести «help help» "
+"или «man -k %s» или «info %s»."
 
-#: builtins/help.def:224
+#: builtins/help.def:223
 #, c-format
 msgid "%s: cannot open: %s"
 msgstr "%s: не удаётся открыть файл: %s"
 
-#: builtins/help.def:524
+#: builtins/help.def:523
 #, c-format
 msgid ""
 "These shell commands are defined internally.  Type `help' to see this list.\n"
@@ -565,29 +570,32 @@ msgid ""
 "A star (*) next to a name means that the command is disabled.\n"
 "\n"
 msgstr ""
-"Показанные ниже команды определены внутри командного процессора.  Чтобы вывести полный список, введите «help».\n"
+"Показанные ниже команды определены внутри командного процессора.  Чтобы "
+"вывести полный список, введите «help».\n"
 "Чтобы вывести справку по функции «name», введите «help name».\n"
 "Чтобы вывести справку по командному процессору, введите «info bash».\n"
-"Чтобы вывести справку по командам, которые отсутствуют в этом списке, введите «man -k» или «info».\n"
+"Чтобы вывести справку по командам, которые отсутствуют в этом списке, "
+"введите «man -k» или «info».\n"
 "\n"
-"Звёздочка (*) рядом с названием команды означает, что эта команда отключена.\n"
+"Звёздочка (*) рядом с названием команды означает, что эта команда "
+"отключена.\n"
 "\n"
 
-#: builtins/history.def:155
+#: builtins/history.def:159
 msgid "cannot use more than one of -anrw"
 msgstr "нельзя использовать больше одного параметра -anrw"
 
-#: builtins/history.def:188 builtins/history.def:198 builtins/history.def:213
-#: builtins/history.def:230 builtins/history.def:242 builtins/history.def:249
+#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215
+#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247
 msgid "history position"
 msgstr "положение журнала команд"
 
-#: builtins/history.def:340
+#: builtins/history.def:338
 #, c-format
 msgid "%s: invalid timestamp"
 msgstr "%s: недопустимая метка времени"
 
-#: builtins/history.def:451
+#: builtins/history.def:449
 #, c-format
 msgid "%s: history expansion failed"
 msgstr "%s: не удалось расширить журнал команд"
@@ -610,78 +618,78 @@ msgstr "%s: аргументами должны быть идентификат
 msgid "Unknown error"
 msgstr "Неизвестная ошибка"
 
-#: builtins/let.def:97 builtins/let.def:122 expr.c:639 expr.c:657
+#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658
 msgid "expression expected"
 msgstr "ожидается выражение"
 
-#: builtins/mapfile.def:178
+#: builtins/mapfile.def:180
 #, c-format
 msgid "%s: not an indexed array"
 msgstr "%s: это не индексированный массив"
 
-#: builtins/mapfile.def:271 builtins/read.def:308
+#: builtins/mapfile.def:276 builtins/read.def:336
 #, c-format
 msgid "%s: invalid file descriptor specification"
 msgstr "%s: недопустимое указание дескриптора файла"
 
-#: builtins/mapfile.def:279 builtins/read.def:315
+#: builtins/mapfile.def:284 builtins/read.def:343
 #, c-format
 msgid "%d: invalid file descriptor: %s"
 msgstr "%d: invalid недопустимый дескриптор файла: %s"
 
-#: builtins/mapfile.def:288 builtins/mapfile.def:326
+#: builtins/mapfile.def:293 builtins/mapfile.def:331
 #, c-format
 msgid "%s: invalid line count"
 msgstr "%s: недопустимое число строк"
 
-#: builtins/mapfile.def:299
+#: builtins/mapfile.def:304
 #, c-format
 msgid "%s: invalid array origin"
 msgstr "%s: недопустимое начало массива"
 
-#: builtins/mapfile.def:316
+#: builtins/mapfile.def:321
 #, c-format
 msgid "%s: invalid callback quantum"
 msgstr "%s: недопустимый квант обратного вызова"
 
-#: builtins/mapfile.def:349
+#: builtins/mapfile.def:354
 msgid "empty array variable name"
 msgstr "пустое имя переменной массива"
 
-#: builtins/mapfile.def:370
+#: builtins/mapfile.def:375
 msgid "array variable support required"
 msgstr "требуется поддержка переменных массива"
 
-#: builtins/printf.def:419
+#: builtins/printf.def:430
 #, c-format
 msgid "`%s': missing format character"
 msgstr "«%s»: отсутствует символ форматирования"
 
-#: builtins/printf.def:474
+#: builtins/printf.def:485
 #, c-format
 msgid "`%c': invalid time format specification"
 msgstr "«%c»: недопустимое указание формата времени"
 
-#: builtins/printf.def:676
+#: builtins/printf.def:708
 #, c-format
 msgid "`%c': invalid format character"
 msgstr "«%c»: недопустимый символ форматирования"
 
-#: builtins/printf.def:702
+#: builtins/printf.def:734
 #, c-format
 msgid "warning: %s: %s"
 msgstr "предупреждение: %s: %s"
 
-#: builtins/printf.def:788
+#: builtins/printf.def:822
 #, c-format
 msgid "format parsing problem: %s"
 msgstr "ошибка анализа формата: %s"
 
-#: builtins/printf.def:885
+#: builtins/printf.def:919
 msgid "missing hex digit for \\x"
 msgstr "отсутствует шестнадцатеричная цифра для \\x"
 
-#: builtins/printf.def:900
+#: builtins/printf.def:934
 #, c-format
 msgid "missing unicode digit for \\%c"
 msgstr "отсутствует цифра Юникода для \\%c"
@@ -722,10 +730,12 @@ msgid ""
 "    \twith its position in the stack\n"
 "    \n"
 "    Arguments:\n"
-"      +N\tDisplays the Nth entry counting from the left of the list shown by\n"
+"      +N\tDisplays the Nth entry counting from the left of the list shown "
+"by\n"
 "    \tdirs when invoked without options, starting with zero.\n"
 "    \n"
-"      -N\tDisplays the Nth entry counting from the right of the list shown by\n"
+"      -N\tDisplays the Nth entry counting from the right of the list shown "
+"by\n"
 "\tdirs when invoked without options, starting with zero."
 msgstr ""
 "Выводит список запомненных на данный момент каталогов.  Каталоги\n"
@@ -773,7 +783,8 @@ msgid ""
 msgstr ""
 "Добавляет каталог в начало стека каталогов или выполняет\n"
 "    ротацию стека, помещая в начало стека текущий рабочий\n"
-"    каталог.  Если аргументы не указаны, меняет местами два первых каталога.\n"
+"    каталог.  Если аргументы не указаны, меняет местами два первых "
+"каталога.\n"
 "    \n"
 "    Параметры:\n"
 "      -n\tпредотвращает обычное изменение каталога при добавлении\n"
@@ -831,12 +842,12 @@ msgstr ""
 "    \n"
 "    Встроенная команда dirs показывает стек каталогов."
 
-#: builtins/read.def:280
+#: builtins/read.def:308
 #, c-format
 msgid "%s: invalid timeout specification"
 msgstr "%s: недопустимое указание тайм-аута"
 
-#: builtins/read.def:755
+#: builtins/read.def:827
 #, c-format
 msgid "read error: %d: %s"
 msgstr "ошибка чтения: %d: %s"
@@ -849,7 +860,7 @@ msgstr "возврат можно выполнить только из функ
 msgid "cannot simultaneously unset a function and a variable"
 msgstr "нельзя одновременно сбросить функцию и переменную"
 
-#: builtins/set.def:966
+#: builtins/set.def:969
 #, c-format
 msgid "%s: not an array variable"
 msgstr "%s: это не переменная массива"
@@ -868,11 +879,11 @@ msgstr "%s: не удаётся экспортировать"
 msgid "shift count"
 msgstr "счётчик смещений"
 
-#: builtins/shopt.def:310
+#: builtins/shopt.def:323
 msgid "cannot set and unset shell options simultaneously"
 msgstr "нельзя одновременно задать и сбросить параметры командного процессора"
 
-#: builtins/shopt.def:428
+#: builtins/shopt.def:444
 #, c-format
 msgid "%s: invalid shell option name"
 msgstr "%s: недопустимое название параметра командного процессора"
@@ -939,16 +950,16 @@ msgstr "%s: недопустимый аргумент ограничения"
 msgid "`%c': bad command"
 msgstr "«%c»: недопустимая команда"
 
-#: builtins/ulimit.def:455
+#: builtins/ulimit.def:464
 #, c-format
 msgid "%s: cannot get limit: %s"
 msgstr "%s: не удаётся получить ограничение: %s"
 
-#: builtins/ulimit.def:481
+#: builtins/ulimit.def:490
 msgid "limit"
 msgstr "ограничение"
 
-#: builtins/ulimit.def:493 builtins/ulimit.def:793
+#: builtins/ulimit.def:502 builtins/ulimit.def:802
 #, c-format
 msgid "%s: cannot modify limit: %s"
 msgstr "%s: не удаётся изменить ограничение: %s"
@@ -967,7 +978,7 @@ msgstr "«%c»: недопустимый оператор символьного
 msgid "`%c': invalid symbolic mode character"
 msgstr "«%c»: недопустимый знак символьного режима"
 
-#: error.c:89 error.c:347 error.c:349 error.c:351
+#: error.c:89 error.c:373 error.c:375 error.c:377
 msgid " line "
 msgstr " строка "
 
@@ -987,96 +998,108 @@ msgstr "Прерывание..."
 msgid "INFORM: "
 msgstr "ИНФО: "
 
-#: error.c:462
+#: error.c:310
+#, fuzzy, c-format
+msgid "DEBUG warning: "
+msgstr "предупреждение: "
+
+#: error.c:488
 msgid "unknown command error"
 msgstr "неизвестная ошибка команды"
 
-#: error.c:463
+#: error.c:489
 msgid "bad command type"
 msgstr "неверный тип команды"
 
-#: error.c:464
+#: error.c:490
 msgid "bad connector"
 msgstr "неверный соединитель"
 
-#: error.c:465
+#: error.c:491
 msgid "bad jump"
 msgstr "ошибка перехода"
 
-#: error.c:503
+#: error.c:529
 #, c-format
 msgid "%s: unbound variable"
 msgstr "%s: не заданы границы переменной"
 
-#: eval.c:242
+#: eval.c:243
 msgid "\atimed out waiting for input: auto-logout\n"
 msgstr "\aпревышено время ожидания ввода: auto-logout\n"
 
-#: execute_cmd.c:537
+#: execute_cmd.c:555
 #, c-format
 msgid "cannot redirect standard input from /dev/null: %s"
 msgstr "не удаётся перенаправить стандартный ввод из /dev/null: %s"
 
-#: execute_cmd.c:1297
+#: execute_cmd.c:1317
 #, c-format
 msgid "TIMEFORMAT: `%c': invalid format character"
 msgstr "TIMEFORMAT: «%c»: недопустимый символ форматирования"
 
-#: execute_cmd.c:2362
+#: execute_cmd.c:2391
 #, c-format
 msgid "execute_coproc: coproc [%d:%s] still exists"
 msgstr "execute_coproc: coproc [%d:%s] всё ещё существует"
 
-#: execute_cmd.c:2486
+#: execute_cmd.c:2524
 msgid "pipe error"
 msgstr "ошибка конвейера"
 
-#: execute_cmd.c:4793
+#: execute_cmd.c:4923
 #, c-format
 msgid "eval: maximum eval nesting level exceeded (%d)"
 msgstr "eval: достигнут максимальный уровень вложенности eval (%d)"
 
-#: execute_cmd.c:4805
+#: execute_cmd.c:4935
 #, c-format
 msgid "%s: maximum source nesting level exceeded (%d)"
 msgstr "%s: достигнут максимальный уровень вложенности source (%d)"
 
-#: execute_cmd.c:4913
+#: execute_cmd.c:5043
 #, c-format
 msgid "%s: maximum function nesting level exceeded (%d)"
 msgstr "%s: достигнут максимальный уровень вложенности функций (%d)"
 
-#: execute_cmd.c:5467
+#: execute_cmd.c:5598
 #, c-format
 msgid "%s: restricted: cannot specify `/' in command names"
-msgstr "%s: ограниченный режим: в названиях команд нельзя использовать косую черту «/»"
+msgstr ""
+"%s: ограниченный режим: в названиях команд нельзя использовать косую черту "
+"«/»"
 
-#: execute_cmd.c:5574
+#: execute_cmd.c:5715
 #, c-format
 msgid "%s: command not found"
 msgstr "%s: команда не найдена"
 
-#: execute_cmd.c:5816
+#: execute_cmd.c:5957
 #, c-format
 msgid "%s: %s"
 msgstr "%s: %s"
 
-#: execute_cmd.c:5854
+#: execute_cmd.c:5975
+#, fuzzy, c-format
+msgid "%s: cannot execute: required file not found"
+msgstr "%s: не удаётся запустить бинарный файл"
+
+#: execute_cmd.c:6000
 #, c-format
 msgid "%s: %s: bad interpreter"
 msgstr "%s: %s: неверный интерпретатор"
 
-#: execute_cmd.c:5891
+#: execute_cmd.c:6037
 #, c-format
 msgid "%s: cannot execute binary file: %s"
 msgstr "%s: не удаётся запустить бинарный файл: %s"
 
-#: execute_cmd.c:5977
+#: execute_cmd.c:6123
 #, c-format
 msgid "`%s': is a special builtin"
 msgstr "«%s»: это специальная встроенная команда"
 
-#: execute_cmd.c:6029
+#: execute_cmd.c:6175
 #, c-format
 msgid "cannot duplicate fd %d to fd %d"
 msgstr "не удаётся скопировать файловый дескриптор %d в %d"
@@ -1089,68 +1112,69 @@ msgstr "слишком много вложенных выражений"
 msgid "recursion stack underflow"
 msgstr "отрицательное переполнение стека вложенных выражений"
 
-#: expr.c:477
+#: expr.c:478
 msgid "syntax error in expression"
 msgstr "синтаксическая ошибка в выражении"
 
-#: expr.c:521
+#: expr.c:522
 msgid "attempted assignment to non-variable"
 msgstr "значение можно присвоить только переменной"
 
-#: expr.c:530
+#: expr.c:531
 msgid "syntax error in variable assignment"
 msgstr "синтаксическая ошибка в назначении переменной"
 
-#: expr.c:544 expr.c:911
+#: expr.c:545 expr.c:912
 msgid "division by 0"
 msgstr "деление на 0"
 
-#: expr.c:592
+#: expr.c:593
 msgid "bug: bad expassign token"
 msgstr "ошибка: недопустимый маркер присвоения выражения"
 
-#: expr.c:646
+#: expr.c:647
 msgid "`:' expected for conditional expression"
 msgstr "в условном выражении должен быть символ «:»"
 
-#: expr.c:972
+#: expr.c:973
 msgid "exponent less than 0"
 msgstr "экспонента меньше нуля"
 
-#: expr.c:1029
+#: expr.c:1030
 msgid "identifier expected after pre-increment or pre-decrement"
-msgstr "после предварительного инкремента или декремента ожидается идентификатор "
+msgstr ""
+"после предварительного инкремента или декремента ожидается идентификатор "
 
-#: expr.c:1056
+#: expr.c:1057
 msgid "missing `)'"
 msgstr "отсутствует символ «)»"
 
-#: expr.c:1107 expr.c:1487
+#: expr.c:1108 expr.c:1492
 msgid "syntax error: operand expected"
 msgstr "синтаксическая ошибка: ожидается операнд"
 
-#: expr.c:1489
+#: expr.c:1494
 msgid "syntax error: invalid arithmetic operator"
 msgstr "ошибка синтаксиса: недопустимый математический оператор"
 
-#: expr.c:1513
+#: expr.c:1518
 #, c-format
 msgid "%s%s%s: %s (error token is \"%s\")"
 msgstr "%s%s%s: %s (неверный маркер «%s»)"
 
-#: expr.c:1573
+#: expr.c:1578
 msgid "invalid arithmetic base"
 msgstr "недопустимое математическое основание"
 
-#: expr.c:1582
+#: expr.c:1587
 msgid "invalid integer constant"
 msgstr "недопустимая целочисленная константа"
 
-#: expr.c:1598
+#: expr.c:1603
 msgid "value too great for base"
 msgstr "слишком большое значение для основания"
 
-#: expr.c:1647
+#: expr.c:1652
 #, c-format
 msgid "%s: expression error\n"
 msgstr "%s: ошибка выражения\n"
@@ -1159,7 +1183,7 @@ msgstr "%s: ошибка выражения\n"
 msgid "getcwd: cannot access parent directories"
 msgstr "getcwd: нет доступа к родительским каталогам"
 
-#: input.c:99 subst.c:6069
+#: input.c:99 subst.c:6208
 #, c-format
 msgid "cannot reset nodelay mode for fd %d"
 msgstr "не удаётся сбросить режим nodelay для файлового дескриптора %d"
@@ -1167,7 +1191,9 @@ msgstr "не удаётся сбросить режим nodelay для файл
 #: input.c:266
 #, c-format
 msgid "cannot allocate new file descriptor for bash input from fd %d"
-msgstr "не удаётся выделить новый дескриптор для входных данных bash из файлового дескриптора %d"
+msgstr ""
+"не удаётся выделить новый дескриптор для входных данных bash из файлового "
+"дескриптора %d"
 
 #: input.c:274
 #, c-format
@@ -1178,167 +1204,171 @@ msgstr "save_bash_input: у нового файлового дескриптор
 msgid "start_pipeline: pgrp pipe"
 msgstr "start_pipeline: pgrp pipe"
 
-#: jobs.c:906
+#: jobs.c:907
 #, c-format
 msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
 
-#: jobs.c:959
+#: jobs.c:960
 #, c-format
 msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
 
-#: jobs.c:1283
+#: jobs.c:1279
 #, c-format
 msgid "forked pid %d appears in running job %d"
 msgstr "идентификатор дочернего процесса %d принадлежит запущенному заданию %d"
 
-#: jobs.c:1402
+#: jobs.c:1397
 #, c-format
 msgid "deleting stopped job %d with process group %ld"
 msgstr "удаление остановленного задания %d с группой процесса %ld"
 
-#: jobs.c:1511
+#: jobs.c:1502
 #, c-format
 msgid "add_process: pid %5ld (%s) marked as still alive"
-msgstr "add_process: процесс с идентификатором %5ld (%s) помечен как всё ещё активный"
+msgstr ""
+"add_process: процесс с идентификатором %5ld (%s) помечен как всё ещё активный"
 
-#: jobs.c:1850
+#: jobs.c:1839
 #, c-format
 msgid "describe_pid: %ld: no such pid"
 msgstr "describe_pid: %ld: нет процесса с таким идентификатором"
 
-#: jobs.c:1865
+#: jobs.c:1854
 #, c-format
 msgid "Signal %d"
 msgstr "Сигнал %d"
 
-#: jobs.c:1879 jobs.c:1905
+#: jobs.c:1868 jobs.c:1894
 msgid "Done"
 msgstr "Завершён"
 
-#: jobs.c:1884 siglist.c:122
+#: jobs.c:1873 siglist.c:123
 msgid "Stopped"
 msgstr "Остановлен"
 
-#: jobs.c:1888
+#: jobs.c:1877
 #, c-format
 msgid "Stopped(%s)"
 msgstr "Остановлен (%s)"
 
-#: jobs.c:1892
+#: jobs.c:1881
 msgid "Running"
 msgstr "Запущен"
 
-#: jobs.c:1909
+#: jobs.c:1898
 #, c-format
 msgid "Done(%d)"
 msgstr "Завершён (%d)"
 
-#: jobs.c:1911
+#: jobs.c:1900
 #, c-format
 msgid "Exit %d"
 msgstr "Выход %d"
 
-#: jobs.c:1914
+#: jobs.c:1903
 msgid "Unknown status"
 msgstr "Состояние неизвестно"
 
-#: jobs.c:2001
+#: jobs.c:1990
 #, c-format
 msgid "(core dumped) "
 msgstr "(образ памяти сброшен на диск) "
 
-#: jobs.c:2020
+#: jobs.c:2009
 #, c-format
 msgid "  (wd: %s)"
 msgstr "  (рабочий каталог: %s)"
 
-#: jobs.c:2259
+#: jobs.c:2250
 #, c-format
 msgid "child setpgid (%ld to %ld)"
 msgstr "дочерний setpgid (%ld к %ld)"
 
-#: jobs.c:2617 nojobs.c:664
+#: jobs.c:2608 nojobs.c:666
 #, c-format
 msgid "wait: pid %ld is not a child of this shell"
-msgstr "wait: процесс %ld не является дочерним процессом этого командного процессора"
+msgstr ""
+"wait: процесс %ld не является дочерним процессом этого командного процессора"
 
-#: jobs.c:2893
+#: jobs.c:2884
 #, c-format
 msgid "wait_for: No record of process %ld"
 msgstr "wait_for: нет записей процесса %ld"
 
-#: jobs.c:3236
+#: jobs.c:3223
 #, c-format
 msgid "wait_for_job: job %d is stopped"
 msgstr "wait_for_job: задание %d остановлено"
 
-#: jobs.c:3564
+#: jobs.c:3551
 #, c-format
 msgid "%s: no current jobs"
 msgstr "%s: нет текущих заданий"
 
-#: jobs.c:3571
+#: jobs.c:3558
 #, c-format
 msgid "%s: job has terminated"
 msgstr "%s: выполнение задания прервано"
 
-#: jobs.c:3580
+#: jobs.c:3567
 #, c-format
 msgid "%s: job %d already in background"
 msgstr "%s: задание %d уже выполняется в фоновом режиме"
 
-#: jobs.c:3806
+#: jobs.c:3793
 msgid "waitchld: turning on WNOHANG to avoid indefinite block"
-msgstr "waitchld: включается WNOHANG, чтобы предотвратить появление неопределённого блока"
+msgstr ""
+"waitchld: включается WNOHANG, чтобы предотвратить появление неопределённого "
+"блока"
 
-#: jobs.c:4320
+#: jobs.c:4307
 #, c-format
 msgid "%s: line %d: "
 msgstr "%s: строка %d: "
 
-#: jobs.c:4334 nojobs.c:919
+#: jobs.c:4321 nojobs.c:921
 #, c-format
 msgid " (core dumped)"
 msgstr " (образ памяти сброшен на диск)"
 
-#: jobs.c:4346 jobs.c:4359
+#: jobs.c:4333 jobs.c:4346
 #, c-format
 msgid "(wd now: %s)\n"
 msgstr "(рабочий каталог: %s)\n"
 
-#: jobs.c:4391
+#: jobs.c:4378
 msgid "initialize_job_control: getpgrp failed"
 msgstr "initialize_job_control: ошибка вызова getpgrp "
 
-#: jobs.c:4447
+#: jobs.c:4434
 msgid "initialize_job_control: no job control in background"
 msgstr "initialize_job_control: нельзя управлять заданиями в фоновом режиме"
 
-#: jobs.c:4463
+#: jobs.c:4450
 msgid "initialize_job_control: line discipline"
 msgstr "initialize_job_control: дисциплина строки"
 
-#: jobs.c:4473
+#: jobs.c:4460
 msgid "initialize_job_control: setpgid"
 msgstr "initialize_job_control: setpgid"
 
-#: jobs.c:4494 jobs.c:4503
+#: jobs.c:4481 jobs.c:4490
 #, c-format
 msgid "cannot set terminal process group (%d)"
 msgstr "не удаётся задать группу процесса терминала (%d)"
 
-#: jobs.c:4508
+#: jobs.c:4495
 msgid "no job control in this shell"
 msgstr "этот командный процессор не может управлять заданиями"
 
-#: lib/malloc/malloc.c:353
+#: lib/malloc/malloc.c:367
 #, c-format
 msgid "malloc: failed assertion: %s\n"
 msgstr "malloc: ошибка утверждения: %s\n"
 
-#: lib/malloc/malloc.c:369
+#: lib/malloc/malloc.c:383
 #, c-format
 msgid ""
 "\r\n"
@@ -1347,47 +1377,51 @@ msgstr ""
 "\\r\n"
 "malloc: %s:%d: утверждение не удалось\\r\n"
 
-#: lib/malloc/malloc.c:370 lib/malloc/malloc.c:933
+#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941
 msgid "unknown"
 msgstr "неизвестно"
 
-#: lib/malloc/malloc.c:882
+#: lib/malloc/malloc.c:892
 msgid "malloc: block on free list clobbered"
 msgstr "malloc: блок в списке свободных затёрт"
 
-#: lib/malloc/malloc.c:972
+#: lib/malloc/malloc.c:980
 msgid "free: called with already freed block argument"
 msgstr "free: вызван с аргументом уже освобождённого блока"
 
-#: lib/malloc/malloc.c:975
+#: lib/malloc/malloc.c:983
 msgid "free: called with unallocated block argument"
 msgstr "free: вызван с аргументом невыделенного блока"
 
-#: lib/malloc/malloc.c:994
+#: lib/malloc/malloc.c:1001
 msgid "free: underflow detected; mh_nbytes out of range"
-msgstr "free: обнаружено отрицательное переполнение; mh_nbytes байт за пределами диапазона"
+msgstr ""
+"free: обнаружено отрицательное переполнение; mh_nbytes байт за пределами "
+"диапазона"
 
-#: lib/malloc/malloc.c:1001
+#: lib/malloc/malloc.c:1007
 msgid "free: underflow detected; magic8 corrupted"
 msgstr "free: обнаружено отрицательное переполнение; magic8 повреждён"
 
-#: lib/malloc/malloc.c:1009
+#: lib/malloc/malloc.c:1014
 msgid "free: start and end chunk sizes differ"
 msgstr "free: размеры начального и конечного блока отличаются"
 
-#: lib/malloc/malloc.c:1119
+#: lib/malloc/malloc.c:1176
 msgid "realloc: called with unallocated block argument"
 msgstr "realloc: вызван с аргументом невыделенного блока"
 
-#: lib/malloc/malloc.c:1134
+#: lib/malloc/malloc.c:1191
 msgid "realloc: underflow detected; mh_nbytes out of range"
-msgstr "realloc: обнаружено отрицательное переполнение; mh_nbytes байт за пределами диапазона"
+msgstr ""
+"realloc: обнаружено отрицательное переполнение; mh_nbytes байт за пределами "
+"диапазона"
 
-#: lib/malloc/malloc.c:1141
+#: lib/malloc/malloc.c:1197
 msgid "realloc: underflow detected; magic8 corrupted"
 msgstr "realloc: обнаружено отрицательное переполнение; magic8 повреждён"
 
-#: lib/malloc/malloc.c:1150
+#: lib/malloc/malloc.c:1205
 msgid "realloc: start and end chunk sizes differ"
 msgstr "realloc: размеры начального и конечного блока отличаются"
 
@@ -1429,22 +1463,22 @@ msgstr "%s: недопустимое указание сетевого пути"
 msgid "network operations not supported"
 msgstr "сетевые операции не поддерживаются"
 
-#: locale.c:217
+#: locale.c:219
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s)"
 msgstr "setlocale: LC_ALL: не удаётся изменить язык (%s)"
 
-#: locale.c:219
+#: locale.c:221
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s): %s"
 msgstr "setlocale: LC_ALL: не удаётся изменить язык (%s): %s"
 
-#: locale.c:292
+#: locale.c:294
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s)"
 msgstr "setlocale: %s: не удаётся изменить язык (%s)"
 
-#: locale.c:294
+#: locale.c:296
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s): %s"
 msgstr "setlocale: %s: не удаётся изменить язык (%s): %s"
@@ -1462,136 +1496,142 @@ msgstr "Для вас есть почта в $_"
 msgid "The mail in %s has been read\n"
 msgstr "Сообщения в %s были прочитаны\n"
 
-#: make_cmd.c:317
+#: make_cmd.c:314
 msgid "syntax error: arithmetic expression required"
 msgstr "синтаксическая ошибка: требуется математическое выражение"
 
-#: make_cmd.c:319
+#: make_cmd.c:316
 msgid "syntax error: `;' unexpected"
 msgstr "синтаксическая ошибка: ожидается «;»"
 
-#: make_cmd.c:320
+#: make_cmd.c:317
 #, c-format
 msgid "syntax error: `((%s))'"
 msgstr "синтаксическая ошибка: «((%s))»"
 
-#: make_cmd.c:572
+#: make_cmd.c:569
 #, c-format
 msgid "make_here_document: bad instruction type %d"
 msgstr "make_here_document: недопустимый тип инструкции %d"
 
-#: make_cmd.c:657
+#: make_cmd.c:668
 #, c-format
 msgid "here-document at line %d delimited by end-of-file (wanted `%s')"
-msgstr "блок here-document в строке %d разделён знаком конца файла (ожидался «%s»)"
+msgstr ""
+"блок here-document в строке %d разделён знаком конца файла (ожидался «%s»)"
 
-#: make_cmd.c:756
+#: make_cmd.c:769
 #, c-format
 msgid "make_redirection: redirection instruction `%d' out of range"
-msgstr "make_redirection: инструкция перенаправления «%d» вышла за пределы диапазона"
+msgstr ""
+"make_redirection: инструкция перенаправления «%d» вышла за пределы диапазона"
 
-#: parse.y:2393
+#: parse.y:2428
 #, c-format
-msgid "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line truncated"
-msgstr "shell_getc: shell_input_line_size (%zu) превысил SIZE_MAX (%lu): строка обрезана"
+msgid ""
+"shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line "
+"truncated"
+msgstr ""
+"shell_getc: shell_input_line_size (%zu) превысил SIZE_MAX (%lu): строка "
+"обрезана"
 
-#: parse.y:2826
+#: parse.y:2921
 msgid "maximum here-document count exceeded"
 msgstr "достигнуто максимальное число переменных here-document"
 
-#: parse.y:3581 parse.y:3957 parse.y:4556
+#: parse.y:3684 parse.y:4244 parse.y:6148
 #, c-format
 msgid "unexpected EOF while looking for matching `%c'"
 msgstr "неожиданный конец файла во время поиска «%c»"
 
-#: parse.y:4696
+#: parse.y:4452
 msgid "unexpected EOF while looking for `]]'"
 msgstr "неожиданный конец файла во время поиска «]]»"
 
-#: parse.y:4701
+#: parse.y:4457
 #, c-format
 msgid "syntax error in conditional expression: unexpected token `%s'"
 msgstr "синтаксическая ошибка в условном выражении: неожиданный маркер «%s»"
 
-#: parse.y:4705
+#: parse.y:4461
 msgid "syntax error in conditional expression"
 msgstr "синтаксическая ошибка в условном выражении"
 
-#: parse.y:4783
+#: parse.y:4539
 #, c-format
 msgid "unexpected token `%s', expected `)'"
 msgstr "неожиданный маркер «%s», ожидался «)»"
 
-#: parse.y:4787
+#: parse.y:4543
 msgid "expected `)'"
 msgstr "ожидается символ «)»"
 
-#: parse.y:4815
+#: parse.y:4571
 #, c-format
 msgid "unexpected argument `%s' to conditional unary operator"
 msgstr "неожиданный аргумент «%s» для условного унарного оператора"
 
-#: parse.y:4819
+#: parse.y:4575
 msgid "unexpected argument to conditional unary operator"
 msgstr "неожиданный аргумент для условного унарного оператора"
 
-#: parse.y:4865
+#: parse.y:4621
 #, c-format
 msgid "unexpected token `%s', conditional binary operator expected"
 msgstr "неожиданный маркер «%s», ожидается условный бинарный оператор"
 
-#: parse.y:4869
+#: parse.y:4625
 msgid "conditional binary operator expected"
 msgstr "ожидается условный бинарный оператор"
 
-#: parse.y:4891
+#: parse.y:4647
 #, c-format
 msgid "unexpected argument `%s' to conditional binary operator"
 msgstr "неожиданный аргумент «%s» для условного бинарного оператора"
 
-#: parse.y:4895
+#: parse.y:4651
 msgid "unexpected argument to conditional binary operator"
 msgstr "неожиданный аргумент для условного бинарного оператора"
 
-#: parse.y:4906
+#: parse.y:4662
 #, c-format
 msgid "unexpected token `%c' in conditional command"
 msgstr "неожиданный маркер «%c» в условной команде"
 
-#: parse.y:4909
+#: parse.y:4665
 #, c-format
 msgid "unexpected token `%s' in conditional command"
 msgstr "неожиданный маркер «%s» в условной команде"
 
-#: parse.y:4913
+#: parse.y:4669
 #, c-format
 msgid "unexpected token %d in conditional command"
 msgstr "неожиданный маркер %d в условной команде"
 
-#: parse.y:6336
+#: parse.y:6118
 #, c-format
 msgid "syntax error near unexpected token `%s'"
 msgstr "синтаксическая ошибка рядом с неожиданным маркером «%s»"
 
-#: parse.y:6355
+#: parse.y:6137
 #, c-format
 msgid "syntax error near `%s'"
 msgstr "синтаксическая ошибка рядом с «%s»"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error: unexpected end of file"
 msgstr "синтаксическая ошибка: неожиданный конец файла"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error"
 msgstr "синтаксическая ошибка"
 
-#: parse.y:6428
+#: parse.y:6216
 #, c-format
 msgid "Use \"%s\" to leave the shell.\n"
 msgstr "Для выхода из командного процессора используйте «%s».\n"
 
-#: parse.y:6602
+#: parse.y:6394
 msgid "unexpected EOF while looking for matching `)'"
 msgstr "неожиданный конец файла во время поиска «)»"
 
@@ -1629,94 +1669,94 @@ msgstr "xtrace_set: пустой указатель на файл"
 msgid "xtrace fd (%d) != fileno xtrace fp (%d)"
 msgstr "xtrace fd (%d) != fileno xtrace fp (%d)"
 
-#: print_cmd.c:1540
+#: print_cmd.c:1545
 #, c-format
 msgid "cprintf: `%c': invalid format character"
 msgstr "cprintf: «%c»: недопустимый символ форматирования"
 
-#: redir.c:149 redir.c:197
+#: redir.c:150 redir.c:198
 msgid "file descriptor out of range"
 msgstr "файловый дескриптор за пределами диапазона"
 
-#: redir.c:204
+#: redir.c:205
 #, c-format
 msgid "%s: ambiguous redirect"
 msgstr "%s: неоднозначное перенаправление"
 
-#: redir.c:208
+#: redir.c:209
 #, c-format
 msgid "%s: cannot overwrite existing file"
 msgstr "%s: не удаётся перезаписать существующий файл"
 
-#: redir.c:213
+#: redir.c:214
 #, c-format
 msgid "%s: restricted: cannot redirect output"
 msgstr "%s: ограниченный режим: не удаётся перенаправить вывод"
 
-#: redir.c:218
+#: redir.c:219
 #, c-format
 msgid "cannot create temp file for here-document: %s"
 msgstr "не удаётся создать временный файл для блока here-document: %s"
 
-#: redir.c:222
+#: redir.c:223
 #, c-format
 msgid "%s: cannot assign fd to variable"
 msgstr "%s: не удаётся присвоить файловый дескриптор переменной"
 
-#: redir.c:649
+#: redir.c:650
 msgid "/dev/(tcp|udp)/host/port not supported without networking"
 msgstr "/dev/(tcp|udp)/host/port не поддерживается без сети"
 
-#: redir.c:938 redir.c:1053 redir.c:1114 redir.c:1284
+#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303
 msgid "redirection error: cannot duplicate fd"
 msgstr "ошибка перенаправления: не удаётся создать копию файлового дескриптора"
 
-#: shell.c:347
+#: shell.c:353
 msgid "could not find /tmp, please create!"
 msgstr "не удалось найти /tmp; создайте этот каталог"
 
-#: shell.c:351
+#: shell.c:357
 msgid "/tmp must be a valid directory name"
 msgstr "/tmp должен быть допустимым названием каталога"
 
-#: shell.c:804
+#: shell.c:826
 msgid "pretty-printing mode ignored in interactive shells"
 msgstr "режим печати игнорируется в интерактивных командных процессорах"
 
-#: shell.c:948
+#: shell.c:972
 #, c-format
 msgid "%c%c: invalid option"
 msgstr "%c%c: недопустимый параметр"
 
-#: shell.c:1319
+#: shell.c:1343
 #, c-format
 msgid "cannot set uid to %d: effective uid %d"
 msgstr "не удаётся установить UID %d: эффективный UID %d"
 
-#: shell.c:1330
+#: shell.c:1354
 #, c-format
 msgid "cannot set gid to %d: effective gid %d"
 msgstr "не удаётся установить GID %d: эффективный GID %d"
 
-#: shell.c:1518
+#: shell.c:1544
 msgid "cannot start debugger; debugging mode disabled"
 msgstr "не удаётся запустить отладчик: режим отладки отключён"
 
-#: shell.c:1632
+#: shell.c:1658
 #, c-format
 msgid "%s: Is a directory"
 msgstr "%s: это каталог"
 
-#: shell.c:1881
+#: shell.c:1907
 msgid "I have no name!"
 msgstr "Не удаётся определить название"
 
-#: shell.c:2035
+#: shell.c:2061
 #, c-format
 msgid "GNU bash, version %s-(%s)\n"
 msgstr "GNU bash, версия %s-(%s)\n"
 
-#: shell.c:2036
+#: shell.c:2062
 #, c-format
 msgid ""
 "Usage:\t%s [GNU long option] [option] ...\n"
@@ -1725,317 +1765,329 @@ msgstr ""
 "Использование:\t%s [длинные параметры GNU] [параметры] ...\n"
 "\t\t%s [длинные параметры GNU] [параметры] файл_скрипта ...\n"
 
-#: shell.c:2038
+#: shell.c:2064
 msgid "GNU long options:\n"
 msgstr "Длинные параметры GNU:\n"
 
-#: shell.c:2042
+#: shell.c:2068
 msgid "Shell options:\n"
 msgstr "Параметры командного процессора:\n"
 
-#: shell.c:2043
+#: shell.c:2069
 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n"
-msgstr "\t-irsD или -c команда или -O короткие_параметры\t\t(только при запуске)\n"
+msgstr ""
+"\t-irsD или -c команда или -O короткие_параметры\t\t(только при запуске)\n"
 
-#: shell.c:2062
+#: shell.c:2088
 #, c-format
 msgid "\t-%s or -o option\n"
 msgstr "\t-%s или -o параметр\n"
 
-#: shell.c:2068
+#: shell.c:2094
 #, c-format
 msgid "Type `%s -c \"help set\"' for more information about shell options.\n"
-msgstr "Для получения дополнительных сведений о параметрах командного процессора введите «%s -c \"help set\"».\n"
+msgstr ""
+"Для получения дополнительных сведений о параметрах командного процессора "
+"введите «%s -c \"help set\"».\n"
 
-#: shell.c:2069
+#: shell.c:2095
 #, c-format
 msgid "Type `%s -c help' for more information about shell builtin commands.\n"
-msgstr "Для получения дополнительных сведений о встроенных командах введите «%s -c help».\n"
+msgstr ""
+"Для получения дополнительных сведений о встроенных командах введите «%s -c "
+"help».\n"
 
-#: shell.c:2070
+#: shell.c:2096
 #, c-format
 msgid "Use the `bashbug' command to report bugs.\n"
 msgstr "Для отправки сообщений об ошибках используйте команду «bashbug».\n"
 
-#: shell.c:2072
+#: shell.c:2098
 #, c-format
 msgid "bash home page: <http://www.gnu.org/software/bash>\n"
 msgstr "Домашняя страница bash: <http://www.gnu.org/software/bash>\n"
 
-#: shell.c:2073
+#: shell.c:2099
 #, c-format
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
-msgstr "Общая справка по использованию программ GNU: <http://www.gnu.org/gethelp/>\n"
+msgstr ""
+"Общая справка по использованию программ GNU: <http://www.gnu.org/gethelp/>\n"
 
-#: sig.c:757
+#: sig.c:765
 #, c-format
 msgid "sigprocmask: %d: invalid operation"
 msgstr "sigprocmask: %d: недопустимая операция"
 
-#: siglist.c:47
+#: siglist.c:48
 msgid "Bogus signal"
 msgstr "Фиктивный сигнал"
 
-#: siglist.c:50
+#: siglist.c:51
 msgid "Hangup"
 msgstr "Отбой"
 
-#: siglist.c:54
+#: siglist.c:55
 msgid "Interrupt"
 msgstr "Прерывание"
 
-#: siglist.c:58
+#: siglist.c:59
 msgid "Quit"
 msgstr "Выход"
 
-#: siglist.c:62
+#: siglist.c:63
 msgid "Illegal instruction"
 msgstr "Недопустимая инструкция"
 
-#: siglist.c:66
+#: siglist.c:67
 msgid "BPT trace/trap"
 msgstr "Трасса/ловушка BPT"
 
-#: siglist.c:74
+#: siglist.c:75
 msgid "ABORT instruction"
 msgstr "Инструкция ABORT"
 
-#: siglist.c:78
+#: siglist.c:79
 msgid "EMT instruction"
 msgstr "Инструкция EMT"
 
-#: siglist.c:82
+#: siglist.c:83
 msgid "Floating point exception"
 msgstr "Исключение при обработке чисел с плавающей точкой"
 
-#: siglist.c:86
+#: siglist.c:87
 msgid "Killed"
 msgstr "Убит"
 
-#: siglist.c:90
+#: siglist.c:91
 msgid "Bus error"
 msgstr "Ошибка шины"
 
-#: siglist.c:94
+#: siglist.c:95
 msgid "Segmentation fault"
 msgstr "Ошибка сегментации"
 
-#: siglist.c:98
+#: siglist.c:99
 msgid "Bad system call"
 msgstr "Неверный системный вызов"
 
-#: siglist.c:102
+#: siglist.c:103
 msgid "Broken pipe"
 msgstr "Конвейер не работает"
 
-#: siglist.c:106
+#: siglist.c:107
 msgid "Alarm clock"
 msgstr "Сигнал часов"
 
-#: siglist.c:110
+#: siglist.c:111
 msgid "Terminated"
 msgstr "Прерван"
 
-#: siglist.c:114
+#: siglist.c:115
 msgid "Urgent IO condition"
 msgstr "Срочное событие ввода/вывода"
 
-#: siglist.c:118
+#: siglist.c:119
 msgid "Stopped (signal)"
 msgstr "Остановлен (сигналом)"
 
-#: siglist.c:126
+#: siglist.c:127
 msgid "Continue"
 msgstr "Продолжение"
 
-#: siglist.c:134
+#: siglist.c:135
 msgid "Child death or stop"
 msgstr "Смерть или остановка дочернего процесса"
 
-#: siglist.c:138
+#: siglist.c:139
 msgid "Stopped (tty input)"
 msgstr "Остановлен (ввод с tty)"
 
-#: siglist.c:142
+#: siglist.c:143
 msgid "Stopped (tty output)"
 msgstr "Остановлен (вывод на tty)"
 
-#: siglist.c:146
+#: siglist.c:147
 msgid "I/O ready"
 msgstr "Готов к вводу/выводу"
 
-#: siglist.c:150
+#: siglist.c:151
 msgid "CPU limit"
 msgstr "Ограничение ЦП"
 
-#: siglist.c:154
+#: siglist.c:155
 msgid "File limit"
 msgstr "Ограничение величины файла"
 
-#: siglist.c:158
+#: siglist.c:159
 msgid "Alarm (virtual)"
 msgstr "Сигнал часов (виртуальный)"
 
-#: siglist.c:162
+#: siglist.c:163
 msgid "Alarm (profile)"
 msgstr "Сигнал часов (профиль)"
 
-#: siglist.c:166
+#: siglist.c:167
 msgid "Window changed"
 msgstr "Окно изменено"
 
-#: siglist.c:170
+#: siglist.c:171
 msgid "Record lock"
 msgstr "Запись блокирована"
 
-#: siglist.c:174
+#: siglist.c:175
 msgid "User signal 1"
 msgstr "Сигнал пользователя 1"
 
-#: siglist.c:178
+#: siglist.c:179
 msgid "User signal 2"
 msgstr "Сигнал пользователя 2"
 
-#: siglist.c:182
+#: siglist.c:183
 msgid "HFT input data pending"
 msgstr "Ожидание входных данных HFT"
 
-#: siglist.c:186
+#: siglist.c:187
 msgid "power failure imminent"
 msgstr "неизбежна ошибка питания"
 
-#: siglist.c:190
+#: siglist.c:191
 msgid "system crash imminent"
 msgstr "неизбежно падение системы"
 
-#: siglist.c:194
+#: siglist.c:195
 msgid "migrate process to another CPU"
 msgstr "процесс переносится на другой ЦП"
 
-#: siglist.c:198
+#: siglist.c:199
 msgid "programming error"
 msgstr "программная ошибка"
 
-#: siglist.c:202
+#: siglist.c:203
 msgid "HFT monitor mode granted"
 msgstr "Установлен режим монитора HFT"
 
-#: siglist.c:206
+#: siglist.c:207
 msgid "HFT monitor mode retracted"
 msgstr "Выход из режима монитора HFT"
 
-#: siglist.c:210
+#: siglist.c:211
 msgid "HFT sound sequence has completed"
 msgstr "Последовательность звуков HFT завершена"
 
-#: siglist.c:214
+#: siglist.c:215
 msgid "Information request"
 msgstr "Информационный запрос"
 
-#: siglist.c:222 siglist.c:224
+#: siglist.c:223 siglist.c:225
 #, c-format
 msgid "Unknown Signal #%d"
 msgstr "Неизвестный номер сигнала %d"
 
-#: subst.c:1476 subst.c:1666
+#: subst.c:1480 subst.c:1670
 #, c-format
 msgid "bad substitution: no closing `%s' in %s"
 msgstr "неверная подстановка: нет закрывающей «%s» в %s"
 
-#: subst.c:3281
+#: subst.c:3307
 #, c-format
 msgid "%s: cannot assign list to array member"
 msgstr "%s: не удаётся присвоить список элементу массива"
 
-#: subst.c:5910 subst.c:5926
+#: subst.c:6048 subst.c:6064
 msgid "cannot make pipe for process substitution"
 msgstr "не удаётся создать конвейер для подстановки процесса"
 
-#: subst.c:5985
+#: subst.c:6124
 msgid "cannot make child for process substitution"
 msgstr "не удаётся создать дочерний процесс для подстановки"
 
-#: subst.c:6059
+#: subst.c:6198
 #, c-format
 msgid "cannot open named pipe %s for reading"
 msgstr "не удаётся открыть именованный конвейер %s для чтения"
 
-#: subst.c:6061
+#: subst.c:6200
 #, c-format
 msgid "cannot open named pipe %s for writing"
 msgstr "не удаётся открыть именованный конвейер %s для записи"
 
-#: subst.c:6084
+#: subst.c:6223
 #, c-format
 msgid "cannot duplicate named pipe %s as fd %d"
-msgstr "не удаётся скопировать именованный конвейер %s  в файловый дескриптор %d"
+msgstr ""
+"не удаётся скопировать именованный конвейер %s  в файловый дескриптор %d"
 
-#: subst.c:6213
+#: subst.c:6370
 msgid "command substitution: ignored null byte in input"
 msgstr "подстановка команды: во входных данных проигнорирован нулевой байт"
 
-#: subst.c:6353
+#: subst.c:6533
 msgid "cannot make pipe for command substitution"
 msgstr "не удаётся создать конвейер для подстановки команды"
 
-#: subst.c:6397
+#: subst.c:6580
 msgid "cannot make child for command substitution"
 msgstr "не удаётся создать дочерний процесс для подстановки команды"
 
-#: subst.c:6423
+#: subst.c:6613
 msgid "command_substitute: cannot duplicate pipe as fd 1"
-msgstr "command_substitute: не удаётся скопировать конвейер в файловый дескриптор 1"
+msgstr ""
+"command_substitute: не удаётся скопировать конвейер в файловый дескриптор 1"
 
-#: subst.c:6883 subst.c:9952
+#: subst.c:7082 subst.c:10252
 #, c-format
 msgid "%s: invalid variable name for name reference"
 msgstr "%s: недопустимое название переменной для ссылки на имя"
 
-#: subst.c:6979 subst.c:6997 subst.c:7169
+#: subst.c:7178 subst.c:7196 subst.c:7369
 #, c-format
 msgid "%s: invalid indirect expansion"
 msgstr "%s: недопустимое непрямое раскрытие"
 
-#: subst.c:7013 subst.c:7177
+#: subst.c:7212 subst.c:7377
 #, c-format
 msgid "%s: invalid variable name"
 msgstr "%s: недопустимое имя переменной"
 
-#: subst.c:7256
+#: subst.c:7478
 #, c-format
 msgid "%s: parameter not set"
 msgstr "%s: параметр не задан"
 
-#: subst.c:7258
+#: subst.c:7480
 #, c-format
 msgid "%s: parameter null or not set"
 msgstr "%s: параметр не задан или пустой"
 
-#: subst.c:7503 subst.c:7518
+#: subst.c:7727 subst.c:7742
 #, c-format
 msgid "%s: substring expression < 0"
 msgstr "%s: заданное подстрокой выражение меньше нуля"
 
-#: subst.c:9281 subst.c:9302
+#: subst.c:9560 subst.c:9587
 #, c-format
 msgid "%s: bad substitution"
 msgstr "%s: недопустимая подстановка"
 
-#: subst.c:9390
+#: subst.c:9678
 #, c-format
 msgid "$%s: cannot assign in this way"
 msgstr "$%s: такое присвоение невозможно"
 
-#: subst.c:9814
-msgid "future versions of the shell will force evaluation as an arithmetic substitution"
-msgstr "в будущих версиях командный процессор оценка будет выполняться как математическая подстановка"
+#: subst.c:10111
+msgid ""
+"future versions of the shell will force evaluation as an arithmetic "
+"substitution"
+msgstr ""
+"в будущих версиях командный процессор оценка будет выполняться как "
+"математическая подстановка"
 
-#: subst.c:10367
+#: subst.c:10795
 #, c-format
 msgid "bad substitution: no closing \"`\" in %s"
 msgstr "неверная подстановка: нет закрывающей «`» в %s"
 
-#: subst.c:11434
+#: subst.c:11874
 #, c-format
 msgid "no match: %s"
 msgstr "нет совпадений: %s"
@@ -2058,21 +2110,21 @@ msgstr "ожидается символ «)»"
 msgid "`)' expected, found %s"
 msgstr "ожидается символ «)», обнаружено %s"
 
-#: test.c:466 test.c:799
+#: test.c:469 test.c:814
 #, c-format
 msgid "%s: binary operator expected"
 msgstr "%s: ожидается бинарный оператор"
 
-#: test.c:756 test.c:759
+#: test.c:771 test.c:774
 #, c-format
 msgid "%s: unary operator expected"
 msgstr "%s: ожидается унарный оператор"
 
-#: test.c:881
+#: test.c:896
 msgid "missing `]'"
 msgstr "отсутствует символ «]»"
 
-#: test.c:899
+#: test.c:914
 #, c-format
 msgid "syntax error: `%s' unexpected"
 msgstr "синтаксическая ошибка: неожиданный «%s»"
@@ -2081,103 +2133,121 @@ msgstr "синтаксическая ошибка: неожиданный «%s»
 msgid "invalid signal number"
 msgstr "недопустимый номер сигнала"
 
-#: trap.c:325
+#: trap.c:323
 #, c-format
 msgid "trap handler: maximum trap handler level exceeded (%d)"
-msgstr "обработка ловушек: достигнут максимальный уровень вложенности обработки ловушек (%d)"
+msgstr ""
+"обработка ловушек: достигнут максимальный уровень вложенности обработки "
+"ловушек (%d)"
 
-#: trap.c:414
+#: trap.c:412
 #, c-format
 msgid "run_pending_traps: bad value in trap_list[%d]: %p"
 msgstr "run_pending_traps: неверное значение в trap_list[%d]: %p"
 
-#: trap.c:418
+#: trap.c:416
 #, c-format
-msgid "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
-msgstr "run_pending_traps: обработчик сигнала — SIG_DFL; повторная отправка %d (%s) самому себе"
+msgid ""
+"run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
+msgstr ""
+"run_pending_traps: обработчик сигнала — SIG_DFL; повторная отправка %d (%s) "
+"самому себе"
 
-#: trap.c:487
+#: trap.c:509
 #, c-format
 msgid "trap_handler: bad signal %d"
 msgstr "trap_handler: неверный сигнал %d"
 
-#: variables.c:421
+#: variables.c:424
 #, c-format
 msgid "error importing function definition for `%s'"
 msgstr "ошибка импорта определения функции для «%s»"
 
-#: variables.c:833
+#: variables.c:838
 #, c-format
 msgid "shell level (%d) too high, resetting to 1"
 msgstr "слишком высокий уровень командного процессора (%d); сбрасывается до 1"
 
-#: variables.c:2674
+#: variables.c:2642
 msgid "make_local_variable: no function context at current scope"
 msgstr "make_local_variable: в текущей области отсутствует контекст функции"
 
-#: variables.c:2693
+#: variables.c:2661
 #, c-format
 msgid "%s: variable may not be assigned value"
 msgstr "%s: переменной не может быть присвоено значение"
 
-#: variables.c:3475
+#: variables.c:2818 variables.c:2874
+#, c-format
+msgid "%s: cannot inherit value from incompatible type"
+msgstr ""
+
+#: variables.c:3459
 #, c-format
 msgid "%s: assigning integer to name reference"
 msgstr "%s: целое числе присваивается ссылке на имя"
 
-#: variables.c:4404
+#: variables.c:4390
 msgid "all_local_variables: no function context at current scope"
 msgstr "all_local_variables: в текущей области отсутствует контекст функции"
 
-#: variables.c:4771
+#: variables.c:4757
 #, c-format
 msgid "%s has null exportstr"
 msgstr "%s имеет пустую exportstr"
 
-#: variables.c:4776 variables.c:4785
+#: variables.c:4762 variables.c:4771
 #, c-format
 msgid "invalid character %d in exportstr for %s"
 msgstr "недопустимый символ %d в exportstr для %s"
 
-#: variables.c:4791
+#: variables.c:4777
 #, c-format
 msgid "no `=' in exportstr for %s"
 msgstr "отсутствует «=» в exportstr для %s"
 
-#: variables.c:5331
+#: variables.c:5317
 msgid "pop_var_context: head of shell_variables not a function context"
-msgstr "pop_var_context: заголовок shell_variables не является контекстом функции"
+msgstr ""
+"pop_var_context: заголовок shell_variables не является контекстом функции"
 
-#: variables.c:5344
+#: variables.c:5330
 msgid "pop_var_context: no global_variables context"
 msgstr "pop_var_context: отсутствует контекст global_variables"
 
-#: variables.c:5424
+#: variables.c:5410
 msgid "pop_scope: head of shell_variables not a temporary environment scope"
-msgstr "pop_scope: заголовок shell_variables не является областью временного окружения"
+msgstr ""
+"pop_scope: заголовок shell_variables не является областью временного "
+"окружения"
 
-#: variables.c:6387
+#: variables.c:6400
 #, c-format
 msgid "%s: %s: cannot open as FILE"
 msgstr "%s: %s: не удаётся открыть как ФАЙЛ"
 
-#: variables.c:6392
+#: variables.c:6405
 #, c-format
 msgid "%s: %s: invalid value for trace file descriptor"
 msgstr "%s: %s: недопустимое значение для дескриптора файла трассировки"
 
-#: variables.c:6437
+#: variables.c:6450
 #, c-format
 msgid "%s: %s: compatibility value out of range"
 msgstr "%s: %s: значение совместимости за пределами диапазона"
 
 #: version.c:46 version2.c:46
-msgid "Copyright (C) 2020 Free Software Foundation, Inc."
+#, fuzzy
+msgid "Copyright (C) 2022 Free Software Foundation, Inc."
 msgstr "© Free Software Foundation, Inc, 2020."
 
 #: version.c:47 version2.c:47
-msgid "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n"
-msgstr "Лицензия GPLv3+: GNU GPL версии 3 или более поздней <http://gnu.org/licenses/gpl.html>\n"
+msgid ""
+"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
+"html>\n"
+msgstr ""
+"Лицензия GPLv3+: GNU GPL версии 3 или более поздней <http://gnu.org/licenses/"
+"gpl.html>\n"
 
 #: version.c:86 version2.c:86
 #, c-format
@@ -2186,7 +2256,9 @@ msgstr "GNU bash, версия %s (%s)\n"
 
 #: version.c:91 version2.c:91
 msgid "This is free software; you are free to change and redistribute it."
-msgstr "Это свободное программное обеспечение. Вы можете изменять и распространять его."
+msgstr ""
+"Это свободное программное обеспечение. Вы можете изменять и распространять "
+"его."
 
 #: version.c:92 version2.c:92
 msgid "There is NO WARRANTY, to the extent permitted by law."
@@ -2221,8 +2293,13 @@ msgid "unalias [-a] name [name ...]"
 msgstr "unalias [-a] имя [имя ...]"
 
 #: builtins.c:53
-msgid "bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-x keyseq:shell-command] [keyseq:readline-function or readline-command]"
-msgstr "bind [-lpvsPSVX] [-m раскладка] [-f файл] [-q имя] [-u name] [-r послед_клавиш] [-x послед_клавиш:команда_shell] [послед_клавиш:фнкц_readline или команда_readline]"
+msgid ""
+"bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-"
+"x keyseq:shell-command] [keyseq:readline-function or readline-command]"
+msgstr ""
+"bind [-lpvsPSVX] [-m раскладка] [-f файл] [-q имя] [-u name] [-r "
+"послед_клавиш] [-x послед_клавиш:команда_shell] [послед_клавиш:фнкц_readline "
+"или команда_readline]"
 
 #: builtins.c:56
 msgid "break [n]"
@@ -2253,11 +2330,17 @@ msgid "command [-pVv] command [arg ...]"
 msgstr "command [-pVv] команда [аргумент ...]"
 
 #: builtins.c:78
-msgid "declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]"
+#, fuzzy
+msgid ""
+"declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] "
+"[name ...]"
 msgstr "declare [-aAfFgiIlnrtux] [-p] [имя[=значение] ...]"
 
 #: builtins.c:80
-msgid "typeset [-aAfFgiIlnrtux] [-p] name[=value] ..."
+#, fuzzy
+msgid ""
+"typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] "
+"[name ...]"
 msgstr "typeset [-aAfFgiIlnrtux] [-p] имя[=значение] ..."
 
 #: builtins.c:82
@@ -2298,7 +2381,9 @@ msgstr "logout [n]"
 
 #: builtins.c:105
 msgid "fc [-e ename] [-lnr] [first] [last] or fc -s [pat=rep] [command]"
-msgstr "fc [-e редактор] [-lnr] [первая] [последняя] или fc -s [шаблон=замена] [команда]"
+msgstr ""
+"fc [-e редактор] [-lnr] [первая] [последняя] или fc -s [шаблон=замена] "
+"[команда]"
 
 #: builtins.c:109
 msgid "fg [job_spec]"
@@ -2317,8 +2402,12 @@ msgid "help [-dms] [pattern ...]"
 msgstr "help [-dms] [шаблон ...]"
 
 #: builtins.c:123
-msgid "history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg...]"
-msgstr "history [-c] [-d смещение] [n] или history -anrw [файл] или history -ps аргумент [аргумент...]"
+msgid ""
+"history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg "
+"[arg...]"
+msgstr ""
+"history [-c] [-d смещение] [n] или history -anrw [файл] или history -ps "
+"аргумент [аргумент...]"
 
 #: builtins.c:127
 msgid "jobs [-lnprs] [jobspec ...] or jobs -x command [args]"
@@ -2329,23 +2418,32 @@ msgid "disown [-h] [-ar] [jobspec ... | pid ...]"
 msgstr "disown [-h] [-ar] [задание ... | pid ...]"
 
 #: builtins.c:134
-msgid "kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]"
-msgstr "kill [-s назв_сигнала | -n номер_сигнала | -назв_сигнала] ид_процесса | назв_задания] ... или kill -l [назв_сигнала]"
+msgid ""
+"kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l "
+"[sigspec]"
+msgstr ""
+"kill [-s назв_сигнала | -n номер_сигнала | -назв_сигнала] ид_процесса | "
+"назв_задания] ... или kill -l [назв_сигнала]"
 
 #: builtins.c:136
 msgid "let arg [arg ...]"
 msgstr "let аргумент [аргумент ...]"
 
 #: builtins.c:138
-msgid "read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]"
-msgstr "read [-ers] [-a массив] [-d разделитель] [-i текст] [-n число_символов] [-N число_символов] [-p приглашение] [-t тайм-аут] [-u fd] [имя ...]"
+msgid ""
+"read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p "
+"prompt] [-t timeout] [-u fd] [name ...]"
+msgstr ""
+"read [-ers] [-a массив] [-d разделитель] [-i текст] [-n число_символов] [-N "
+"число_символов] [-p приглашение] [-t тайм-аут] [-u fd] [имя ...]"
 
 #: builtins.c:140
 msgid "return [n]"
 msgstr "return [n]"
 
 #: builtins.c:142
-msgid "set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]"
+#, fuzzy
+msgid "set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]"
 msgstr "set [-abefhkmnptuvxBCHP] [-o параметр] [--] [аргумент ...]"
 
 #: builtins.c:144
@@ -2393,7 +2491,8 @@ msgid "type [-afptP] name [name ...]"
 msgstr "type [-afptP] имя [имя ...]"
 
 #: builtins.c:171
-msgid "ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]"
+#, fuzzy
+msgid "ulimit [-SHabcdefiklmnpqrstuvxPRT] [limit]"
 msgstr "ulimit [-SHabcdefiklmnpqrstuvxPT] [ограничение]"
 
 #: builtins.c:174
@@ -2429,15 +2528,21 @@ msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac"
 msgstr "case СЛОВО in [ШАБЛОН [| ШАБЛОН]...) КОМАНДЫ ;;]... esac"
 
 #: builtins.c:194
-msgid "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi"
-msgstr "if КОМАНДЫ; then КОМАНДЫ; [ elif КОМАНДЫ; then КОМАНДЫ; ]... [ else КОМАНДЫ; ] fi"
+msgid ""
+"if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else "
+"COMMANDS; ] fi"
+msgstr ""
+"if КОМАНДЫ; then КОМАНДЫ; [ elif КОМАНДЫ; then КОМАНДЫ; ]... [ else "
+"КОМАНДЫ; ] fi"
 
 #: builtins.c:196
-msgid "while COMMANDS; do COMMANDS; done"
+#, fuzzy
+msgid "while COMMANDS; do COMMANDS-2; done"
 msgstr "while КОМАНДЫ; do КОМАНДЫ; done"
 
 #: builtins.c:198
-msgid "until COMMANDS; do COMMANDS; done"
+#, fuzzy
+msgid "until COMMANDS; do COMMANDS-2; done"
 msgstr "until КОМАНДЫ; do КОМАНДЫ; done"
 
 #: builtins.c:200
@@ -2466,7 +2571,8 @@ msgstr "[[ выражение ]]"
 
 #: builtins.c:212
 msgid "variables - Names and meanings of some shell variables"
-msgstr "переменные — имена и значения некоторых переменных командного процессора"
+msgstr ""
+"переменные — имена и значения некоторых переменных командного процессора"
 
 #: builtins.c:215
 msgid "pushd [-n] [+N | -N | dir]"
@@ -2489,24 +2595,43 @@ msgid "printf [-v var] format [arguments]"
 msgstr "printf [-v переменная] формат [аргументы]"
 
 #: builtins.c:231
-msgid "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [name ...]"
-msgstr "complete [-abcdefgjksuv] [-pr] [-DEI] [-o параметр] [-A действие] [-G глоб_шаблон] [-W список_слов] [-F функция] [-C команда] [-X фильтр_шабл] [-P префикс] [-S суффикс] [имя ...]"
+msgid ""
+"complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-"
+"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S "
+"suffix] [name ...]"
+msgstr ""
+"complete [-abcdefgjksuv] [-pr] [-DEI] [-o параметр] [-A действие] [-G "
+"глоб_шаблон] [-W список_слов] [-F функция] [-C команда] [-X фильтр_шабл] [-P "
+"префикс] [-S суффикс] [имя ...]"
 
 #: builtins.c:235
-msgid "compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]"
-msgstr "compgen [-abcdefgjksuv] [-o параметр] [-A действие] [-G глоб_шабл] [-W список_слов] [-F функция] [-C команда] [-X фильтр_шабл] [-P префикс] [-S суффикс] [слово]"
+msgid ""
+"compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-"
+"F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]"
+msgstr ""
+"compgen [-abcdefgjksuv] [-o параметр] [-A действие] [-G глоб_шабл] [-W "
+"список_слов] [-F функция] [-C команда] [-X фильтр_шабл] [-P префикс] [-S "
+"суффикс] [слово]"
 
 #: builtins.c:239
 msgid "compopt [-o|+o option] [-DEI] [name ...]"
 msgstr "compopt [-o|+o параметр] [-DEI] [имя ...]"
 
 #: builtins.c:242
-msgid "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]"
-msgstr "mapfile [-d разделитель] [-n число] [-O начало] [-s число] [-t] [-u fd] [-C callback] [-c quantum] [массив]"
+msgid ""
+"mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C "
+"callback] [-c quantum] [array]"
+msgstr ""
+"mapfile [-d разделитель] [-n число] [-O начало] [-s число] [-t] [-u fd] [-C "
+"callback] [-c quantum] [массив]"
 
 #: builtins.c:244
-msgid "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]"
-msgstr "readarray [-d разделитель] [-n число] [-O начало] [-s число] [-t] [-u fd] [-C callback] [-c quantum] [массив]"
+msgid ""
+"readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C "
+"callback] [-c quantum] [array]"
+msgstr ""
+"readarray [-d разделитель] [-n число] [-O начало] [-s число] [-t] [-u fd] [-"
+"C callback] [-c quantum] [массив]"
 
 #: builtins.c:256
 msgid ""
@@ -2523,7 +2648,8 @@ msgid ""
 "      -p\tprint all defined aliases in a reusable format\n"
 "    \n"
 "    Exit Status:\n"
-"    alias returns true unless a NAME is supplied for which no alias has been\n"
+"    alias returns true unless a NAME is supplied for which no alias has "
+"been\n"
 "    defined."
 msgstr ""
 "Определение или отображение псевдонимов.\n"
@@ -2561,40 +2687,6 @@ msgstr ""
 
 #: builtins.c:291
 #, fuzzy
-#| msgid ""
-#| "Set Readline key bindings and variables.\n"
-#| "    \n"
-#| "    Bind a key sequence to a Readline function or a macro, or set a\n"
-#| "    Readline variable.  The non-option argument syntax is equivalent to\n"
-#| "    that found in ~/.inputrc, but must be passed as a single argument:\n"
-#| "    e.g., bind '\"\\C-x\\C-r\": re-read-init-file'.\n"
-#| "    \n"
-#| "    Options:\n"
-#| "      -m  keymap         Use KEYMAP as the keymap for the duration of this\n"
-#| "                         command.  Acceptable keymap names are emacs,\n"
-#| "                         emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,\n"
-#| "                         vi-command, and vi-insert.\n"
-#| "      -l                 List names of functions.\n"
-#| "      -P                 List function names and bindings.\n"
-#| "      -p                 List functions and bindings in a form that can be\n"
-#| "                         reused as input.\n"
-#| "      -S                 List key sequences that invoke macros and their values\n"
-#| "      -s                 List key sequences that invoke macros and their values\n"
-#| "                         in a form that can be reused as input.\n"
-#| "      -V                 List variable names and values\n"
-#| "      -v                 List variable names and values in a form that can\n"
-#| "                         be reused as input.\n"
-#| "      -q  function-name  Query about which keys invoke the named function.\n"
-#| "      -u  function-name  Unbind all keys which are bound to the named function.\n"
-#| "      -r  keyseq         Remove the binding for KEYSEQ.\n"
-#| "      -f  filename       Read key bindings from FILENAME.\n"
-#| "      -x  keyseq:shell-command\tCause SHELL-COMMAND to be executed when\n"
-#| "    \t\t\t\tKEYSEQ is entered.\n"
-#| "      -X\t\t     List key sequences bound with -x and associated commands\n"
-#| "                         in a form that can be reused as input.\n"
-#| "    \n"
-#| "    Exit Status:\n"
-#| "    bind returns 0 unless an unrecognized option is given or an error occurs."
 msgid ""
 "Set Readline key bindings and variables.\n"
 "    \n"
@@ -2606,25 +2698,30 @@ msgid ""
 "    Options:\n"
 "      -m  keymap         Use KEYMAP as the keymap for the duration of this\n"
 "                         command.  Acceptable keymap names are emacs,\n"
-"                         emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,\n"
+"                         emacs-standard, emacs-meta, emacs-ctlx, vi, vi-"
+"move,\n"
 "                         vi-command, and vi-insert.\n"
 "      -l                 List names of functions.\n"
 "      -P                 List function names and bindings.\n"
 "      -p                 List functions and bindings in a form that can be\n"
 "                         reused as input.\n"
-"      -S                 List key sequences that invoke macros and their values\n"
-"      -s                 List key sequences that invoke macros and their values\n"
+"      -S                 List key sequences that invoke macros and their "
+"values\n"
+"      -s                 List key sequences that invoke macros and their "
+"values\n"
 "                         in a form that can be reused as input.\n"
 "      -V                 List variable names and values\n"
 "      -v                 List variable names and values in a form that can\n"
 "                         be reused as input.\n"
 "      -q  function-name  Query about which keys invoke the named function.\n"
-"      -u  function-name  Unbind all keys which are bound to the named function.\n"
+"      -u  function-name  Unbind all keys which are bound to the named "
+"function.\n"
 "      -r  keyseq         Remove the binding for KEYSEQ.\n"
 "      -f  filename       Read key bindings from FILENAME.\n"
 "      -x  keyseq:shell-command\tCause SHELL-COMMAND to be executed when\n"
 "    \t\t\t\tKEYSEQ is entered.\n"
-"      -X                 List key sequences bound with -x and associated commands\n"
+"      -X                 List key sequences bound with -x and associated "
+"commands\n"
 "                         in a form that can be reused as input.\n"
 "    \n"
 "    Exit Status:\n"
@@ -2633,14 +2730,18 @@ msgstr ""
 "Определение привязок клавиш и переменных readline.\n"
 "    \n"
 "    Привязывает последовательность клавиш функции readline или макросу\n"
-"    или задаёт переменную readline.  Синтаксис аргументов без параметров аналогичен\n"
-"    синтаксису файла ~/.inputrc, но всё должно передаваться в одном аргументе,\n"
+"    или задаёт переменную readline.  Синтаксис аргументов без параметров "
+"аналогичен\n"
+"    синтаксису файла ~/.inputrc, но всё должно передаваться в одном "
+"аргументе,\n"
 "    например bind '\"\\C-x\\C-r\": перечитать-init-файл'.\n"
 "    \n"
 "    Параметры:\n"
-"      -m  раскладка      использовать указанную раскладку во время выполнения\n"
+"      -m  раскладка      использовать указанную раскладку во время "
+"выполнения\n"
 "                         данной команды.  Допустимые раскладки: emacs,\n"
-"                         emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,\n"
+"                         emacs-standard, emacs-meta, emacs-ctlx, vi, vi-"
+"move,\n"
 "                         vi-command и vi-insert.\n"
 "      -l                 вывести названия функций\n"
 "      -P                 вывести названия функций и их привязки\n"
@@ -2655,16 +2756,19 @@ msgstr ""
 "      -v                 вывести имена переменных и их значения\n"
 "                         в формате для повторного использования\n"
 "      -q  имя_функции\t вывести клавиши, вызывающие указанную функцию\n"
-"      -u  имя_функции    отвязать все клавиши, привязанные к указанной функции\n"
+"      -u  имя_функции    отвязать все клавиши, привязанные к указанной "
+"функции\n"
 "      -r  посл-клавиш    удалить привязку для последовательности клавиш\n"
 "      -f  файл           прочитать привязки из файла\n"
 "      -x  посл-клавиш:кмнд-shell выполнить команду bash, если введена\n"
 "    \t\t\t\tпоследовательность клавиш\n"
-"      -X\t\t     вывести последовательности клавиш, привязанные с помощью -x, и связанные команды\n"
+"      -X\t\t     вывести последовательности клавиш, привязанные с помощью -"
+"x, и связанные команды\n"
 "                         в формате для повторного использования\n"
 "    \n"
 "    Состояние выхода:\n"
-"    bind возвращает 0, если был указан допустимый параметр или не возникла ошибка."
+"    bind возвращает 0, если был указан допустимый параметр или не возникла "
+"ошибка."
 
 #: builtins.c:330
 msgid ""
@@ -2678,7 +2782,8 @@ msgid ""
 msgstr ""
 "Прерывание цикла for, while или until.\n"
 "    \n"
-"    Прерывает цикл for, while или until.  Если указано N, прерывает N вложенных\n"
+"    Прерывает цикл for, while или until.  Если указано N, прерывает N "
+"вложенных\n"
 "    циклов.\n"
 "    \n"
 "    Состояние выхода:\n"
@@ -2704,22 +2809,13 @@ msgstr ""
 
 #: builtins.c:354
 #, fuzzy
-#| msgid ""
-#| "Execute shell builtins.\n"
-#| "    \n"
-#| "    Execute SHELL-BUILTIN with arguments ARGs without performing command\n"
-#| "    lookup.  This is useful when you wish to reimplement a shell builtin\n"
-#| "    as a shell function, but need to execute the builtin within the function.\n"
-#| "    \n"
-#| "    Exit Status:\n"
-#| "    Returns the exit status of SHELL-BUILTIN, or false if SHELL-BUILTIN is\n"
-#| "    not a shell builtin.."
 msgid ""
 "Execute shell builtins.\n"
 "    \n"
 "    Execute SHELL-BUILTIN with arguments ARGs without performing command\n"
 "    lookup.  This is useful when you wish to reimplement a shell builtin\n"
-"    as a shell function, but need to execute the builtin within the function.\n"
+"    as a shell function, but need to execute the builtin within the "
+"function.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the exit status of SHELL-BUILTIN, or false if SHELL-BUILTIN is\n"
@@ -2728,11 +2824,14 @@ msgstr ""
 "Выполнение встроенных команд.\n"
 "    \n"
 "    Выполняет встроенную команду bash с аргументами\n"
-"    без поиска команды.  Это полезно, если нужно переопределить встроенную команду\n"
-"    как функцию командного процессора, в этой функции нужно выполнить встроенную команду.\n"
+"    без поиска команды.  Это полезно, если нужно переопределить встроенную "
+"команду\n"
+"    как функцию командного процессора, в этой функции нужно выполнить "
+"встроенную команду.\n"
 "    \n"
 "    Состояние выхода:\n"
-"    Возвращает состояние выхода встроенной команды или ложь, если указанная команда bash\n"
+"    Возвращает состояние выхода встроенной команды или ложь, если указанная "
+"команда bash\n"
 "    не является встроенной."
 
 #: builtins.c:369
@@ -2752,7 +2851,8 @@ msgid ""
 msgstr ""
 "Возвращает контекст вызова текущей подпрограммы.\n"
 "    \n"
-"    Если выражение не указано, возвращает «$line $filename».  Если выражение указано, возвращает\n"
+"    Если выражение не указано, возвращает «$line $filename».  Если выражение "
+"указано, возвращает\n"
 "    «$line $subroutine $filename». Эти дополнительные данные можно\n"
 "    использовать для трассировки стека.\n"
 "    \n"
@@ -2760,57 +2860,31 @@ msgstr ""
 "    для возврата к текущему кадру. Первый кадр имеет номер 0.\n"
 "    \n"
 "    Состояние выхода:\n"
-"    Возвращает 0, если командный процессор не выполняет функцию, или выражение\n"
+"    Возвращает 0, если командный процессор не выполняет функцию, или "
+"выражение\n"
 "    является допустимым."
 
 #: builtins.c:387
 #, fuzzy
-#| msgid ""
-#| "Change the shell working directory.\n"
-#| "    \n"
-#| "    Change the current directory to DIR.  The default DIR is the value of the\n"
-#| "    HOME shell variable.\n"
-#| "    \n"
-#| "    The variable CDPATH defines the search path for the directory containing\n"
-#| "    DIR.  Alternative directory names in CDPATH are separated by a colon (:).\n"
-#| "    A null directory name is the same as the current directory.  If DIR begins\n"
-#| "    with a slash (/), then CDPATH is not used.\n"
-#| "    \n"
-#| "    If the directory is not found, and the shell option `cdable_vars' is set,\n"
-#| "    the word is assumed to be  a variable name.  If that variable has a value,\n"
-#| "    its value is used for DIR.\n"
-#| "    \n"
-#| "    Options:\n"
-#| "        -L\tforce symbolic links to be followed: resolve symbolic links in\n"
-#| "    \tDIR after processing instances of `..'\n"
-#| "        -P\tuse the physical directory structure without following symbolic\n"
-#| "    \tlinks: resolve symbolic links in DIR before processing instances\n"
-#| "    \tof `..'\n"
-#| "        -e\tif the -P option is supplied, and the current working directory\n"
-#| "    \tcannot be determined successfully, exit with a non-zero status\n"
-#| "        -@  on systems that support it, present a file with extended attributes\n"
-#| "            as a directory containing the file attributes\n"
-#| "    \n"
-#| "    The default is to follow symbolic links, as if `-L' were specified.\n"
-#| "    `..' is processed by removing the immediately previous pathname component\n"
-#| "    back to a slash or the beginning of DIR.\n"
-#| "    \n"
-#| "    Exit Status:\n"
-#| "    Returns 0 if the directory is changed, and if $PWD is set successfully when\n"
-#| "    -P is used; non-zero otherwise."
 msgid ""
 "Change the shell working directory.\n"
 "    \n"
-"    Change the current directory to DIR.  The default DIR is the value of the\n"
+"    Change the current directory to DIR.  The default DIR is the value of "
+"the\n"
 "    HOME shell variable.\n"
 "    \n"
-"    The variable CDPATH defines the search path for the directory containing\n"
-"    DIR.  Alternative directory names in CDPATH are separated by a colon (:).\n"
-"    A null directory name is the same as the current directory.  If DIR begins\n"
+"    The variable CDPATH defines the search path for the directory "
+"containing\n"
+"    DIR.  Alternative directory names in CDPATH are separated by a colon "
+"(:).\n"
+"    A null directory name is the same as the current directory.  If DIR "
+"begins\n"
 "    with a slash (/), then CDPATH is not used.\n"
 "    \n"
-"    If the directory is not found, and the shell option `cdable_vars' is set,\n"
-"    the word is assumed to be  a variable name.  If that variable has a value,\n"
+"    If the directory is not found, and the shell option `cdable_vars' is "
+"set,\n"
+"    the word is assumed to be  a variable name.  If that variable has a "
+"value,\n"
 "    its value is used for DIR.\n"
 "    \n"
 "    Options:\n"
@@ -2826,25 +2900,31 @@ msgid ""
 "    \t\tattributes as a directory containing the file attributes\n"
 "    \n"
 "    The default is to follow symbolic links, as if `-L' were specified.\n"
-"    `..' is processed by removing the immediately previous pathname component\n"
+"    `..' is processed by removing the immediately previous pathname "
+"component\n"
 "    back to a slash or the beginning of DIR.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns 0 if the directory is changed, and if $PWD is set successfully when\n"
+"    Returns 0 if the directory is changed, and if $PWD is set successfully "
+"when\n"
 "    -P is used; non-zero otherwise."
 msgstr ""
 "Смена рабочего каталога командного процессора.\n"
 "    \n"
-"    Изменяет текущий каталог на указанный каталог.  Каталог по умолчанию хранится в\n"
+"    Изменяет текущий каталог на указанный каталог.  Каталог по умолчанию "
+"хранится в\n"
 "    переменной $HOME командного процессора.\n"
 "    \n"
 "    Переменная $CDPATH определяет путь поиска каталога, содержащего\n"
-"    указанный каталог.  Альтернативные каталоги в $CDPATH разделяются двоеточием (:).\n"
-"    Пустое название каталога соответствует текущему каталогу.  Если каталог начинается\n"
+"    указанный каталог.  Альтернативные каталоги в $CDPATH разделяются "
+"двоеточием (:).\n"
+"    Пустое название каталога соответствует текущему каталогу.  Если каталог "
+"начинается\n"
 "    с косой черты (/), переменная $CDPATH не используется.\n"
 "    \n"
 "    Если каталог не найден и задан параметр «cdable_vars»,\n"
-"    слово считается названием переменной.  Если эта переменная содержит значение,\n"
+"    слово считается названием переменной.  Если эта переменная содержит "
+"значение,\n"
 "    оно используется для каталога.\n"
 "    \n"
 "    Параметры:\n"
@@ -2855,32 +2935,24 @@ msgstr ""
 "    \tобработки «..»\n"
 "        -e\tесли указан параметр -P, и не удаётся определить текущий\n"
 "    \tрабочий каталог, команда завершается с ненулевым состоянием\n"
-"        -@  на системах, которые это поддерживают, представляет файл с расширенными\n"
+"        -@  на системах, которые это поддерживают, представляет файл с "
+"расширенными\n"
 "            атрибутами как каталог, содержащий атрибуты файла\n"
 "    \n"
-"    По умолчанию выполняется переход по символьным ссылкам (как при указании параметра «-L»).\n"
-"    «..» обрабатывается путём удаления первого компонента пути до косой черты\n"
+"    По умолчанию выполняется переход по символьным ссылкам (как при указании "
+"параметра «-L»).\n"
+"    «..» обрабатывается путём удаления первого компонента пути до косой "
+"черты\n"
 "    или из начала каталога.\n"
 "    \n"
 "    Состояние выхода:\n"
-"    Возвращает 0, если каталог был изменён, и если $PWD был успешно установлен\n"
-"    при использовании параметра -P. В противном случае возвращается ненулевое состояние."
+"    Возвращает 0, если каталог был изменён, и если $PWD был успешно "
+"установлен\n"
+"    при использовании параметра -P. В противном случае возвращается "
+"ненулевое состояние."
 
 #: builtins.c:425
 #, fuzzy
-#| msgid ""
-#| "Print the name of the current working directory.\n"
-#| "    \n"
-#| "    Options:\n"
-#| "      -L\tprint the value of $PWD if it names the current working\n"
-#| "    \tdirectory\n"
-#| "      -P\tprint the physical directory, without any symbolic links\n"
-#| "    \n"
-#| "    By default, `pwd' behaves as if `-L' were specified.\n"
-#| "    \n"
-#| "    Exit Status:\n"
-#| "    Returns 0 unless an invalid option is given or the current directory\n"
-#| "    cannot be read."
 msgid ""
 "Print the name of the current working directory.\n"
 "    \n"
@@ -2950,26 +3022,12 @@ msgstr ""
 
 #: builtins.c:471
 #, fuzzy
-#| msgid ""
-#| "Execute a simple command or display information about commands.\n"
-#| "    \n"
-#| "    Runs COMMAND with ARGS suppressing  shell function lookup, or display\n"
-#| "    information about the specified COMMANDs.  Can be used to invoke commands\n"
-#| "    on disk when a function with the same name exists.\n"
-#| "    \n"
-#| "    Options:\n"
-#| "      -p\tuse a default value for PATH that is guaranteed to find all of\n"
-#| "    \tthe standard utilities\n"
-#| "      -v\tprint a description of COMMAND similar to the `type' builtin\n"
-#| "      -V\tprint a more verbose description of each COMMAND\n"
-#| "    \n"
-#| "    Exit Status:\n"
-#| "    Returns exit status of COMMAND, or failure if COMMAND is not found."
 msgid ""
 "Execute a simple command or display information about commands.\n"
 "    \n"
 "    Runs COMMAND with ARGS suppressing  shell function lookup, or display\n"
-"    information about the specified COMMANDs.  Can be used to invoke commands\n"
+"    information about the specified COMMANDs.  Can be used to invoke "
+"commands\n"
 "    on disk when a function with the same name exists.\n"
 "    \n"
 "    Options:\n"
@@ -2983,12 +3041,15 @@ msgid ""
 msgstr ""
 "Выполнение простой команды или вывод информации о командах.\n"
 "    \n"
-"    Выполняет команду с аргументами без поиска функции командного процессора\n"
-"    или выводит информацию об указанных командах.  Можно использовать для вызова команд\n"
+"    Выполняет команду с аргументами без поиска функции командного "
+"процессора\n"
+"    или выводит информацию об указанных командах.  Можно использовать для "
+"вызова команд\n"
 "    с диска, когда функция с таким именем уже существует.\n"
 "    \n"
 "    Параметры:\n"
-"      -p\tиспользовать значение по умолчанию для $PATH, чтобы гарантированно\n"
+"      -p\tиспользовать значение по умолчанию для $PATH, чтобы "
+"гарантированно\n"
 "    \tнайти все стандартные команды\n"
 "      -v\tвывести описание команды аналогично встроенной команде «type»\n"
 "      -V\tвывести более подробное описание каждой команды\n"
@@ -2998,42 +3059,6 @@ msgstr ""
 
 #: builtins.c:490
 #, fuzzy
-#| msgid ""
-#| "Set variable values and attributes.\n"
-#| "    \n"
-#| "    Declare variables and give them attributes.  If no NAMEs are given,\n"
-#| "    display the attributes and values of all variables.\n"
-#| "    \n"
-#| "    Options:\n"
-#| "      -f\trestrict action or display to function names and definitions\n"
-#| "      -F\trestrict display to function names only (plus line number and\n"
-#| "    \tsource file when debugging)\n"
-#| "      -g\tcreate global variables when used in a shell function; otherwise\n"
-#| "    \tignored\n"
-#| "      -p\tdisplay the attributes and value of each NAME\n"
-#| "    \n"
-#| "    Options which set attributes:\n"
-#| "      -a\tto make NAMEs indexed arrays (if supported)\n"
-#| "      -A\tto make NAMEs associative arrays (if supported)\n"
-#| "      -i\tto make NAMEs have the `integer' attribute\n"
-#| "      -l\tto convert NAMEs to lower case on assignment\n"
-#| "      -n\tmake NAME a reference to the variable named by its value\n"
-#| "      -r\tto make NAMEs readonly\n"
-#| "      -t\tto make NAMEs have the `trace' attribute\n"
-#| "      -u\tto convert NAMEs to upper case on assignment\n"
-#| "      -x\tto make NAMEs export\n"
-#| "    \n"
-#| "    Using `+' instead of `-' turns off the given attribute.\n"
-#| "    \n"
-#| "    Variables with the integer attribute have arithmetic evaluation (see\n"
-#| "    the `let' command) performed when the variable is assigned a value.\n"
-#| "    \n"
-#| "    When used in a function, `declare' makes NAMEs local, as with the `local'\n"
-#| "    command.  The `-g' option suppresses this behavior.\n"
-#| "    \n"
-#| "    Exit Status:\n"
-#| "    Returns success unless an invalid option is supplied or a variable\n"
-#| "    assignment error occurs."
 msgid ""
 "Set variable values and attributes.\n"
 "    \n"
@@ -3066,7 +3091,8 @@ msgid ""
 "    Variables with the integer attribute have arithmetic evaluation (see\n"
 "    the `let' command) performed when the variable is assigned a value.\n"
 "    \n"
-"    When used in a function, `declare' makes NAMEs local, as with the `local'\n"
+"    When used in a function, `declare' makes NAMEs local, as with the "
+"`local'\n"
 "    command.  The `-g' option suppresses this behavior.\n"
 "    \n"
 "    Exit Status:\n"
@@ -3075,14 +3101,16 @@ msgid ""
 msgstr ""
 "Указание значений переменных и атрибутов.\n"
 "    \n"
-"    Объявление переменных и назначение им атрибутов.  Если имена не указаны,\n"
+"    Объявление переменных и назначение им атрибутов.  Если имена не "
+"указаны,\n"
 "    выводит атрибуты и значения всех переменных.\n"
 "    \n"
 "    Параметры:\n"
 "      -f\tограничить действие или вывести имена функций и их определения\n"
 "      -F\tвывести только имена функций (а также номер строки\n"
 "    \tв исходном файле при отладке)\n"
-"      -g\tсоздать глобальные переменные при использовании в функции командного процессора; в противном случае\n"
+"      -g\tсоздать глобальные переменные при использовании в функции "
+"командного процессора; в противном случае\n"
 "    \tигнорируется\n"
 "      -p\tвывести атрибуты и значения каждого имени\n"
 "    \n"
@@ -3091,7 +3119,8 @@ msgstr ""
 "      -A\tсделать имена ассоциативными массивами (если поддерживается)\n"
 "      -i\tназначить именам атрибут «integer»\n"
 "      -l\tперевести имена в нижний регистр при назначении\n"
-"      -n\tсделать имя ссылкой на переменную с именем, соответствующим её значению\n"
+"      -n\tсделать имя ссылкой на переменную с именем, соответствующим её "
+"значению\n"
 "      -r\tотключить запись в имена\n"
 "      -t\tназначить именам атрибут «trace»\n"
 "      -l\tперевести имена в верхний регистр при назначении\n"
@@ -3100,9 +3129,11 @@ msgstr ""
 "    Знак «+» вместо «-» отключает указанный атрибут.\n"
 "    \n"
 "    Переменные с атрибутом «integer» содержат математическое выражение (см.\n"
-"    команду «let»), которое рассчитывается при назначении значения переменной.\n"
+"    команду «let»), которое рассчитывается при назначении значения "
+"переменной.\n"
 "    \n"
-"    При использовании в функции «declare» делает имена локальными как при использовании\n"
+"    При использовании в функции «declare» делает имена локальными как при "
+"использовании\n"
 "    данной команды.  Параметр «-g» отключает это поведение.\n"
 "    \n"
 "    Состояние выхода:\n"
@@ -3111,10 +3142,6 @@ msgstr ""
 
 #: builtins.c:532
 #, fuzzy
-#| msgid ""
-#| "Set variable values and attributes.\n"
-#| "    \n"
-#| "    Obsolete.  See `help declare'."
 msgid ""
 "Set variable values and attributes.\n"
 "    \n"
@@ -3140,52 +3167,26 @@ msgid ""
 msgstr ""
 "Определение локальных переменных.\n"
 "    \n"
-"    Создаёт локальную переменную с указанным именем и присваивает ей указанное значение.  Параметром может быть\n"
+"    Создаёт локальную переменную с указанным именем и присваивает ей "
+"указанное значение.  Параметром может быть\n"
 "    любой параметр, принимаемый командой «declare».\n"
 "    \n"
-"    Локальные переменные можно использовать только внутри функции. Они видны\n"
+"    Локальные переменные можно использовать только внутри функции. Они "
+"видны\n"
 "    только той функции, в которой они определены, и её дочерним функциям.\n"
 "    \n"
 "    Состояние выхода:\n"
 "    Возвращает успех, если был указан допустимый параметр, не возникла\n"
-"    ошибка присвоения переменной или командный процессор не выполняет функцию."
+"    ошибка присвоения переменной или командный процессор не выполняет "
+"функцию."
 
 #: builtins.c:557
 #, fuzzy
-#| msgid ""
-#| "Write arguments to the standard output.\n"
-#| "    \n"
-#| "    Display the ARGs, separated by a single space character and followed by a\n"
-#| "    newline, on the standard output.\n"
-#| "    \n"
-#| "    Options:\n"
-#| "      -n\tdo not append a newline\n"
-#| "      -e\tenable interpretation of the following backslash escapes\n"
-#| "      -E\texplicitly suppress interpretation of backslash escapes\n"
-#| "    \n"
-#| "    `echo' interprets the following backslash-escaped characters:\n"
-#| "      \\a\talert (bell)\n"
-#| "      \\b\tbackspace\n"
-#| "      \\c\tsuppress further output\n"
-#| "      \\e\tescape character\n"
-#| "      \\E\tescape character\n"
-#| "      \\f\tform feed\n"
-#| "      \\n\tnew line\n"
-#| "      \\r\tcarriage return\n"
-#| "      \\t\thorizontal tab\n"
-#| "      \\v\tvertical tab\n"
-#| "      \\\\\tbackslash\n"
-#| "      \\0nnn\tthe character whose ASCII code is NNN (octal).  NNN can be\n"
-#| "    \t0 to 3 octal digits\n"
-#| "      \\xHH\tthe eight-bit character whose value is HH (hexadecimal).  HH\n"
-#| "    \tcan be one or two hex digits\n"
-#| "    \n"
-#| "    Exit Status:\n"
-#| "    Returns success unless a write error occurs."
 msgid ""
 "Write arguments to the standard output.\n"
 "    \n"
-"    Display the ARGs, separated by a single space character and followed by a\n"
+"    Display the ARGs, separated by a single space character and followed by "
+"a\n"
 "    newline, on the standard output.\n"
 "    \n"
 "    Options:\n"
@@ -3209,9 +3210,11 @@ msgid ""
 "    \t\t0 to 3 octal digits\n"
 "      \\xHH\tthe eight-bit character whose value is HH (hexadecimal).  HH\n"
 "    \t\tcan be one or two hex digits\n"
-"      \\uHHHH\tthe Unicode character whose value is the hexadecimal value HHHH.\n"
+"      \\uHHHH\tthe Unicode character whose value is the hexadecimal value "
+"HHHH.\n"
 "    \t\tHHHH can be one to four hex digits.\n"
-"      \\UHHHHHHHH the Unicode character whose value is the hexadecimal value\n"
+"      \\UHHHHHHHH the Unicode character whose value is the hexadecimal "
+"value\n"
 "    \t\tHHHHHHHH. HHHHHHHH can be one to eight hex digits.\n"
 "    \n"
 "    Exit Status:\n"
@@ -3219,15 +3222,19 @@ msgid ""
 msgstr ""
 "Вывод аргументов на стандартный вывод.\n"
 "    \n"
-"    Выводит аргументы, разделённые пробелом, добавляя в конце символ новой строки,\n"
+"    Выводит аргументы, разделённые пробелом, добавляя в конце символ новой "
+"строки,\n"
 "    на стандартный вывод.\n"
 "    \n"
 "    Параметры:\n"
 "      -n\tне добавлять символ новой строки\n"
-"      -e\tвключить интерпретацию символов, экранированных обратной косой чертой\n"
-"      -E\tявно отключить интерпретацию символов, экранированных обратной косой чертой\n"
+"      -e\tвключить интерпретацию символов, экранированных обратной косой "
+"чертой\n"
+"      -E\tявно отключить интерпретацию символов, экранированных обратной "
+"косой чертой\n"
 "    \n"
-"    echo интерпретирует следующие символы, экранированные обратной косой чертой:\n"
+"    echo интерпретирует следующие символы, экранированные обратной косой "
+"чертой:\n"
 "      \\a\tоповещение (звуковой сигнал)\n"
 "      \\b\tbackspace\n"
 "      \\c\tотключение дальнейшего вывода\n"
@@ -3239,9 +3246,11 @@ msgstr ""
 "      \\t\tгоризонтальная табуляция\n"
 "      \\v\tвертикальная табуляция\n"
 "      \\\\\tобратная косая черта\n"
-"      \\0nnn\tсимвол с ASCII-кодом NNN (восьмеричным)  NNN может быть длиной\n"
+"      \\0nnn\tсимвол с ASCII-кодом NNN (восьмеричным)  NNN может быть "
+"длиной\n"
 "    \tот 0 до 3 восьмеричных цифр\n"
-"      \\xHH\tвосьмиразрядный символ, значение которого — HH (шестнадцатеричное)  HH\n"
+"      \\xHH\tвосьмиразрядный символ, значение которого — HH "
+"(шестнадцатеричное)  HH\n"
 "    \tможет быть одной или двумя шестнадцатеричными цифрами\n"
 "    \n"
 "    Состояние выхода:\n"
@@ -3261,7 +3270,8 @@ msgid ""
 msgstr ""
 "Вывод аргументов на стандартный вывод.\n"
 "    \n"
-"    Выводит аргументы на стандартный вывод, добавляя в конце символ новой строки.\n"
+"    Выводит аргументы на стандартный вывод, добавляя в конце символ новой "
+"строки.\n"
 "    \n"
 "    Параметры:\n"
 "      -n\tне добавлять символ новой строки\n"
@@ -3297,13 +3307,16 @@ msgid ""
 msgstr ""
 "Включение и отключение встроенных команд командного процессора.\n"
 "    \n"
-"    Включает и отключает команды, встроенные в командный процессор.  Отключение позволит\n"
-"    выполнить команду с диска, название которой совпадает с названием встроенной команды,\n"
+"    Включает и отключает команды, встроенные в командный процессор.  "
+"Отключение позволит\n"
+"    выполнить команду с диска, название которой совпадает с названием "
+"встроенной команды,\n"
 "    без указания полного пути к ней.\n"
 "    \n"
 "    Параметры:\n"
 "      -a\tпоказать список встроенных команд и их состояние\n"
-"      -n\tотключить все указанные имена или вывести список отключённых команд\n"
+"      -n\tотключить все указанные имена или вывести список отключённых "
+"команд\n"
 "      -p\tпоказать список встроенных команд\n"
 "      -s\tпоказать только названия встроенных команд «special» Posix\n"
 "    \n"
@@ -3317,13 +3330,15 @@ msgstr ""
 "    а не встроенную в командный процессор, введите «enable -n test».\n"
 "    \n"
 "    Состояние выхода:\n"
-"    Возвращает успех, если указанное имя не является встроенной командой или не произошла ошибка."
+"    Возвращает успех, если указанное имя не является встроенной командой или "
+"не произошла ошибка."
 
 #: builtins.c:640
 msgid ""
 "Execute arguments as a shell command.\n"
 "    \n"
-"    Combine ARGs into a single string, use the result as input to the shell,\n"
+"    Combine ARGs into a single string, use the result as input to the "
+"shell,\n"
 "    and execute the resulting commands.\n"
 "    \n"
 "    Exit Status:\n"
@@ -3339,44 +3354,6 @@ msgstr ""
 
 #: builtins.c:652
 #, fuzzy
-#| msgid ""
-#| "Parse option arguments.\n"
-#| "    \n"
-#| "    Getopts is used by shell procedures to parse positional parameters\n"
-#| "    as options.\n"
-#| "    \n"
-#| "    OPTSTRING contains the option letters to be recognized; if a letter\n"
-#| "    is followed by a colon, the option is expected to have an argument,\n"
-#| "    which should be separated from it by white space.\n"
-#| "    \n"
-#| "    Each time it is invoked, getopts will place the next option in the\n"
-#| "    shell variable $name, initializing name if it does not exist, and\n"
-#| "    the index of the next argument to be processed into the shell\n"
-#| "    variable OPTIND.  OPTIND is initialized to 1 each time the shell or\n"
-#| "    a shell script is invoked.  When an option requires an argument,\n"
-#| "    getopts places that argument into the shell variable OPTARG.\n"
-#| "    \n"
-#| "    getopts reports errors in one of two ways.  If the first character\n"
-#| "    of OPTSTRING is a colon, getopts uses silent error reporting.  In\n"
-#| "    this mode, no error messages are printed.  If an invalid option is\n"
-#| "    seen, getopts places the option character found into OPTARG.  If a\n"
-#| "    required argument is not found, getopts places a ':' into NAME and\n"
-#| "    sets OPTARG to the option character found.  If getopts is not in\n"
-#| "    silent mode, and an invalid option is seen, getopts places '?' into\n"
-#| "    NAME and unsets OPTARG.  If a required argument is not found, a '?'\n"
-#| "    is placed in NAME, OPTARG is unset, and a diagnostic message is\n"
-#| "    printed.\n"
-#| "    \n"
-#| "    If the shell variable OPTERR has the value 0, getopts disables the\n"
-#| "    printing of error messages, even if the first character of\n"
-#| "    OPTSTRING is not a colon.  OPTERR has the value 1 by default.\n"
-#| "    \n"
-#| "    Getopts normally parses the positional parameters ($0 - $9), but if\n"
-#| "    more arguments are given, they are parsed instead.\n"
-#| "    \n"
-#| "    Exit Status:\n"
-#| "    Returns success if an option is found; fails if the end of options is\n"
-#| "    encountered or an error occurs."
 msgid ""
 "Parse option arguments.\n"
 "    \n"
@@ -3421,11 +3398,13 @@ msgstr ""
 "    getopts используется процедурами командного процессора для анализа\n"
 "    позиционных параметров.\n"
 "    \n"
-"    «строка_параметров» содержит буквы распознаваемых параметров. Если после\n"
+"    «строка_параметров» содержит буквы распознаваемых параметров. Если "
+"после\n"
 "    буквы идёт двоеточие, считается, что у параметра есть аргумент,\n"
 "    который должен быть отделён пробелом.\n"
 "    \n"
-"    При каждом своём вызове getopts поместит следующий параметр в переменную\n"
+"    При каждом своём вызове getopts поместит следующий параметр в "
+"переменную\n"
 "    $имя, проинициализировав это имя, если оно не существует,\n"
 "    и проиндексирует следующий обрабатываемый аргумент в переменной\n"
 "    $OPTIND.  Переменная $OPTIND инициализируется при каждом вызове\n"
@@ -3433,51 +3412,40 @@ msgstr ""
 "    getopts помещает этот аргумент в переменную $OPTARG.\n"
 "    \n"
 "    getopts сообщает об ошибках двумя способами.  Если первый символ\n"
-"    в «строке_параметров» является двоеточием, getopts включает режим молчания.  В этом\n"
+"    в «строке_параметров» является двоеточием, getopts включает режим "
+"молчания.  В этом\n"
 "    режиме сообщения об ошибках не выводятся.  Если указан неверный\n"
 "    параметр, getopts помещает символ параметра в переменную $OPTARG.  Если\n"
 "    обязательный аргумент не найден, getopts помещает «:» в «имя»\n"
-"    и задаёт для $OPTARG символ найденного параметра.  Если getopts не в режиме\n"
+"    и задаёт для $OPTARG символ найденного параметра.  Если getopts не в "
+"режиме\n"
 "    молчания, и был указан неверный параметр, getopts помещает «?»\n"
-"    в НАЗВАНИЕ и удаляет переменную OPTARG.  Если обязательный аргумент не найден, в НАЗВАНИЕ\n"
+"    в НАЗВАНИЕ и удаляет переменную OPTARG.  Если обязательный аргумент не "
+"найден, в НАЗВАНИЕ\n"
 "    помещается «?», переменная OPTARG удаляется и выводится диагностическое\n"
 "    сообщение.\n"
 "    \n"
 "    Если переменная OPTERR имеет значение 0, getopts отключает\n"
 "    вывод сообщений об ошибках, даже если первый символ переменной\n"
-"    OPTSTRING не является двоеточием.  По умолчанию переменная OPTERR имеет значение 1.\n"
+"    OPTSTRING не является двоеточием.  По умолчанию переменная OPTERR имеет "
+"значение 1.\n"
 "    \n"
 "    Getopts обычно анализирует позиционные параметры ($0–$9), но если\n"
 "    задано больше аргументов, анализируются последние.\n"
 "    \n"
 "    Состояние выхода:\n"
-"    Возвращает успех, если найден параметр. Возвращает ошибку, если достигнут\n"
+"    Возвращает успех, если найден параметр. Возвращает ошибку, если "
+"достигнут\n"
 "    конец параметров или возникла ошибка."
 
 #: builtins.c:694
 #, fuzzy
-#| msgid ""
-#| "Replace the shell with the given command.\n"
-#| "    \n"
-#| "    Execute COMMAND, replacing this shell with the specified program.\n"
-#| "    ARGUMENTS become the arguments to COMMAND.  If COMMAND is not specified,\n"
-#| "    any redirections take effect in the current shell.\n"
-#| "    \n"
-#| "    Options:\n"
-#| "      -a name\tpass NAME as the zeroth argument to COMMAND\n"
-#| "      -c\t\texecute COMMAND with an empty environment\n"
-#| "      -l\t\tplace a dash in the zeroth argument to COMMAND\n"
-#| "    \n"
-#| "    If the command cannot be executed, a non-interactive shell exits, unless\n"
-#| "    the shell option `execfail' is set.\n"
-#| "    \n"
-#| "    Exit Status:\n"
-#| "    Returns success unless COMMAND is not found or a redirection error occurs."
 msgid ""
 "Replace the shell with the given command.\n"
 "    \n"
 "    Execute COMMAND, replacing this shell with the specified program.\n"
-"    ARGUMENTS become the arguments to COMMAND.  If COMMAND is not specified,\n"
+"    ARGUMENTS become the arguments to COMMAND.  If COMMAND is not "
+"specified,\n"
 "    any redirections take effect in the current shell.\n"
 "    \n"
 "    Options:\n"
@@ -3485,16 +3453,20 @@ msgid ""
 "      -c\texecute COMMAND with an empty environment\n"
 "      -l\tplace a dash in the zeroth argument to COMMAND\n"
 "    \n"
-"    If the command cannot be executed, a non-interactive shell exits, unless\n"
+"    If the command cannot be executed, a non-interactive shell exits, "
+"unless\n"
 "    the shell option `execfail' is set.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success unless COMMAND is not found or a redirection error occurs."
+"    Returns success unless COMMAND is not found or a redirection error "
+"occurs."
 msgstr ""
 "Замена командного процессора указанной командой.\n"
 "    \n"
-"    Выполняет команду, заменяя текущий командный процессор указанной программой.\n"
-"    Указанные аргументы становятся аргументами для команды.  Если команда не указана,\n"
+"    Выполняет команду, заменяя текущий командный процессор указанной "
+"программой.\n"
+"    Указанные аргументы становятся аргументами для команды.  Если команда не "
+"указана,\n"
 "    все перенаправления будет выполняться в текущем командном процессоре.\n"
 "    \n"
 "    Параметры:\n"
@@ -3506,7 +3478,8 @@ msgstr ""
 "    закроется (если только на задан «execfail»).\n"
 "    \n"
 "    Состояние выхода:\n"
-"    Возвращает успех, если команда не была найдена или не возникла ошибка перенаправления."
+"    Возвращает успех, если команда не была найдена или не возникла ошибка "
+"перенаправления."
 
 #: builtins.c:715
 msgid ""
@@ -3524,7 +3497,8 @@ msgstr ""
 msgid ""
 "Exit a login shell.\n"
 "    \n"
-"    Exits a login shell with exit status N.  Returns an error if not executed\n"
+"    Exits a login shell with exit status N.  Returns an error if not "
+"executed\n"
 "    in a login shell."
 msgstr ""
 "Выход из командного процессора login.\n"
@@ -3536,13 +3510,15 @@ msgstr ""
 msgid ""
 "Display or execute commands from the history list.\n"
 "    \n"
-"    fc is used to list or edit and re-execute commands from the history list.\n"
+"    fc is used to list or edit and re-execute commands from the history "
+"list.\n"
 "    FIRST and LAST can be numbers specifying the range, or FIRST can be a\n"
 "    string, which means the most recent command beginning with that\n"
 "    string.\n"
 "    \n"
 "    Options:\n"
-"      -e ENAME\tselect which editor to use.  Default is FCEDIT, then EDITOR,\n"
+"      -e ENAME\tselect which editor to use.  Default is FCEDIT, then "
+"EDITOR,\n"
 "    \t\tthen vi\n"
 "      -l \tlist lines instead of editing\n"
 "      -n\tomit line numbers when listing\n"
@@ -3556,12 +3532,15 @@ msgid ""
 "    the last command.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success or status of executed command; non-zero if an error occurs."
+"    Returns success or status of executed command; non-zero if an error "
+"occurs."
 msgstr ""
 "Отображение или выполнение команд из журнала.\n"
 "    \n"
-"    fc выводит список команд из журнала или позволяет изменить и повторно выполнить их.\n"
-"    Аргументы «первая» и «последняя» могут быть числами, определяющими диапазон.\n"
+"    fc выводит список команд из журнала или позволяет изменить и повторно "
+"выполнить их.\n"
+"    Аргументы «первая» и «последняя» могут быть числами, определяющими "
+"диапазон.\n"
 "    Аргумент «первая» также может быть строкой, которая означает\n"
 "    последнюю команду, начинающуюся с этой строки.\n"
 "    \n"
@@ -3576,11 +3555,13 @@ msgstr ""
 "    выполняется повторно после замены старая=новая.\n"
 "    \n"
 "    Полезный псевдоним для команды — r='fc -s'. Так если ввести «r cc»,\n"
-"    будет выполнена последняя команда, начинающаяся с «cc», а если ввести «r»,\n"
+"    будет выполнена последняя команда, начинающаяся с «cc», а если ввести "
+"«r»,\n"
 "    будет выполнена последняя команда.\n"
 "    \n"
 "    Состояние выхода:\n"
-"    Возвращает успех или состояние выполненной команды. В случае ошибки возвращает ненулевое состояние."
+"    Возвращает успех или состояние выполненной команды. В случае ошибки "
+"возвращает ненулевое состояние."
 
 #: builtins.c:764
 msgid ""
@@ -3600,14 +3581,17 @@ msgstr ""
 "    текущее задание.\n"
 "    \n"
 "    Состояние выхода:\n"
-"    Возвращает состояние команды, переведённой в интерактивный режим, или ошибку, если возникла ошибка."
+"    Возвращает состояние команды, переведённой в интерактивный режим, или "
+"ошибку, если возникла ошибка."
 
 #: builtins.c:779
 msgid ""
 "Move jobs to the background.\n"
 "    \n"
-"    Place the jobs identified by each JOB_SPEC in the background, as if they\n"
-"    had been started with `&'.  If JOB_SPEC is not present, the shell's notion\n"
+"    Place the jobs identified by each JOB_SPEC in the background, as if "
+"they\n"
+"    had been started with `&'.  If JOB_SPEC is not present, the shell's "
+"notion\n"
 "    of the current job is used.\n"
 "    \n"
 "    Exit Status:\n"
@@ -3620,35 +3604,17 @@ msgstr ""
 "    текущего задания.\n"
 "    \n"
 "    Состояние выхода:\n"
-"    Возвращает успех, если не включено управление заданиями или не произошла ошибка."
+"    Возвращает успех, если не включено управление заданиями или не произошла "
+"ошибка."
 
 #: builtins.c:793
 #, fuzzy
-#| msgid ""
-#| "Remember or display program locations.\n"
-#| "    \n"
-#| "    Determine and remember the full pathname of each command NAME.  If\n"
-#| "    no arguments are given, information about remembered commands is displayed.\n"
-#| "    \n"
-#| "    Options:\n"
-#| "      -d\t\tforget the remembered location of each NAME\n"
-#| "      -l\t\tdisplay in a format that may be reused as input\n"
-#| "      -p pathname\tuse PATHNAME as the full pathname of NAME\n"
-#| "      -r\t\tforget all remembered locations\n"
-#| "      -t\t\tprint the remembered location of each NAME, preceding\n"
-#| "    \t\teach location with the corresponding NAME if multiple\n"
-#| "    \t\tNAMEs are given\n"
-#| "    Arguments:\n"
-#| "      NAME\t\tEach NAME is searched for in $PATH and added to the list\n"
-#| "    \t\tof remembered commands.\n"
-#| "    \n"
-#| "    Exit Status:\n"
-#| "    Returns success unless NAME is not found or an invalid option is given."
 msgid ""
 "Remember or display program locations.\n"
 "    \n"
 "    Determine and remember the full pathname of each command NAME.  If\n"
-"    no arguments are given, information about remembered commands is displayed.\n"
+"    no arguments are given, information about remembered commands is "
+"displayed.\n"
 "    \n"
 "    Options:\n"
 "      -d\tforget the remembered location of each NAME\n"
@@ -3683,28 +3649,11 @@ msgstr ""
 "    \t\tзапомненных команд.\n"
 "    \n"
 "    Состояние выхода:\n"
-"    Возвращает успех, если команда была найдена или был указан допустимый параметр."
+"    Возвращает успех, если команда была найдена или был указан допустимый "
+"параметр."
 
 #: builtins.c:818
 #, fuzzy
-#| msgid ""
-#| "Display information about builtin commands.\n"
-#| "    \n"
-#| "    Displays brief summaries of builtin commands.  If PATTERN is\n"
-#| "    specified, gives detailed help on all commands matching PATTERN,\n"
-#| "    otherwise the list of help topics is printed.\n"
-#| "    \n"
-#| "    Options:\n"
-#| "      -d\toutput short description for each topic\n"
-#| "      -m\tdisplay usage in pseudo-manpage format\n"
-#| "      -s\toutput only a short usage synopsis for each topic matching\n"
-#| "    \tPATTERN\n"
-#| "    \n"
-#| "    Arguments:\n"
-#| "      PATTERN\tPattern specifiying a help topic\n"
-#| "    \n"
-#| "    Exit Status:\n"
-#| "    Returns success unless PATTERN is not found or an invalid option is given."
 msgid ""
 "Display information about builtin commands.\n"
 "    \n"
@@ -3722,12 +3671,14 @@ msgid ""
 "      PATTERN\tPattern specifying a help topic\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success unless PATTERN is not found or an invalid option is given."
+"    Returns success unless PATTERN is not found or an invalid option is "
+"given."
 msgstr ""
 "Вывод информации о встроенных командах.\n"
 "    \n"
 "    Показывает краткую справку о встроенных командах.  Если указан\n"
-"    шаблон, выводит подробную справку по всем командам, удовлетворяющим шаблону.\n"
+"    шаблон, выводит подробную справку по всем командам, удовлетворяющим "
+"шаблону.\n"
 "    В противном случае выводится список разделов справки.\n"
 "    \n"
 "    Параметры:\n"
@@ -3740,40 +3691,11 @@ msgstr ""
 "      ШАБЛОН\tшаблон, определяющий раздел справки\n"
 "    \n"
 "    Состояние выхода:\n"
-"    Возвращает успех, если был найден шаблон или был указан допустимый параметр."
+"    Возвращает успех, если был найден шаблон или был указан допустимый "
+"параметр."
 
 #: builtins.c:842
 #, fuzzy
-#| msgid ""
-#| "Display or manipulate the history list.\n"
-#| "    \n"
-#| "    Display the history list with line numbers, prefixing each modified\n"
-#| "    entry with a `*'.  An argument of N lists only the last N entries.\n"
-#| "    \n"
-#| "    Options:\n"
-#| "      -c\tclear the history list by deleting all of the entries\n"
-#| "      -d offset\tdelete the history entry at offset OFFSET.\n"
-#| "    \n"
-#| "      -a\tappend history lines from this session to the history file\n"
-#| "      -n\tread all history lines not already read from the history file\n"
-#| "      -r\tread the history file and append the contents to the history\n"
-#| "    \tlist\n"
-#| "      -w\twrite the current history to the history file\n"
-#| "    \tand append them to the history list\n"
-#| "    \n"
-#| "      -p\tperform history expansion on each ARG and display the result\n"
-#| "    \twithout storing it in the history list\n"
-#| "      -s\tappend the ARGs to the history list as a single entry\n"
-#| "    \n"
-#| "    If FILENAME is given, it is used as the history file.  Otherwise,\n"
-#| "    if $HISTFILE has a value, that is used, else ~/.bash_history.\n"
-#| "    \n"
-#| "    If the $HISTTIMEFORMAT variable is set and not null, its value is used\n"
-#| "    as a format string for strftime(3) to print the time stamp associated\n"
-#| "    with each displayed history entry.  No time stamps are printed otherwise.\n"
-#| "    \n"
-#| "    Exit Status:\n"
-#| "    Returns success unless an invalid option is given or an error occurs."
 msgid ""
 "Display or manipulate the history list.\n"
 "    \n"
@@ -3801,7 +3723,8 @@ msgid ""
 "    \n"
 "    If the HISTTIMEFORMAT variable is set and not null, its value is used\n"
 "    as a format string for strftime(3) to print the time stamp associated\n"
-"    with each displayed history entry.  No time stamps are printed otherwise.\n"
+"    with each displayed history entry.  No time stamps are printed "
+"otherwise.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns success unless an invalid option is given or an error occurs."
@@ -3809,14 +3732,16 @@ msgstr ""
 "Отображение или изменение журнала команд.\n"
 "    \n"
 "    Выводит журнал команд с номерами строк и звёздочками (*) перед всеми\n"
-"    изменёнными записями.  С аргументом N показываются только последние N записей.\n"
+"    изменёнными записями.  С аргументом N показываются только последние N "
+"записей.\n"
 "    \n"
 "    Параметры:\n"
 "      -c\tочистить журнал, удалив из него все записи\n"
 "      -d смещение\tудалить запись журнала по указанному смещению\n"
 "    \n"
 "      -a\tдобавить журнал текущего сеанса в файл журнала\n"
-"      -n\tпрочитать все записи, которые ещё не были прочитаны из файла журнала\n"
+"      -n\tпрочитать все записи, которые ещё не были прочитаны из файла "
+"журнала\n"
 "      -r\tпрочитать файл журнала и добавить его содержимое\n"
 "    \tв журнал\n"
 "      -w\tзаписать текущий журнал в файл журнала\n"
@@ -3827,38 +3752,21 @@ msgstr ""
 "      -s\tдобавить аргументы в журнал как одну запись\n"
 "    \n"
 "    Если указан файл, он используется как файл журнала.  В противном случае\n"
-"    если $HISTFILE содержит значение, используется этот файл, иначе — файл ~/.bash_history.\n"
+"    если $HISTFILE содержит значение, используется этот файл, иначе — файл "
+"~/.bash_history.\n"
 "    \n"
-"    Если переменная $HISTTIMEFORMAT задана и не является пустой, её значение\n"
+"    Если переменная $HISTTIMEFORMAT задана и не является пустой, её "
+"значение\n"
 "    используется как строка форматирования для strftime(3) для вывода метки\n"
-"    времени для каждой показанной записи журнала.  В противном случае метки времени не будут показаны.\n"
+"    времени для каждой показанной записи журнала.  В противном случае метки "
+"времени не будут показаны.\n"
 "    \n"
 "    Состояние выхода:\n"
-"    Возвращает успех, если был указан допустимый параметр или не возникла ошибка."
+"    Возвращает успех, если был указан допустимый параметр или не возникла "
+"ошибка."
 
 #: builtins.c:879
 #, fuzzy
-#| msgid ""
-#| "Display status of jobs.\n"
-#| "    \n"
-#| "    Lists the active jobs.  JOBSPEC restricts output to that job.\n"
-#| "    Without options, the status of all active jobs is displayed.\n"
-#| "    \n"
-#| "    Options:\n"
-#| "      -l\tlists process IDs in addition to the normal information\n"
-#| "      -n\tlist only processes that have changed status since the last\n"
-#| "    \tnotification\n"
-#| "      -p\tlists process IDs only\n"
-#| "      -r\trestrict output to running jobs\n"
-#| "      -s\trestrict output to stopped jobs\n"
-#| "    \n"
-#| "    If -x is supplied, COMMAND is run after all job specifications that\n"
-#| "    appear in ARGS have been replaced with the process ID of that job's\n"
-#| "    process group leader.\n"
-#| "    \n"
-#| "    Exit Status:\n"
-#| "    Returns success unless an invalid option is given or an error occurs.\n"
-#| "    If -x is used, returns the exit status of COMMAND."
 msgid ""
 "Display status of jobs.\n"
 "    \n"
@@ -3883,11 +3791,14 @@ msgid ""
 msgstr ""
 "Отображение состояния заданий.\n"
 "    \n"
-"    Выводит список активных заданий.  Если указан номер задания, выводится только это задание.\n"
-"    Если не указать параметры, будет показано состояние всех активных заданий.\n"
+"    Выводит список активных заданий.  Если указан номер задания, выводится "
+"только это задание.\n"
+"    Если не указать параметры, будет показано состояние всех активных "
+"заданий.\n"
 "    \n"
 "    Параметры:\n"
-"      -l\tпоказать идентификаторы процессов в дополнение к обычной информации\n"
+"      -l\tпоказать идентификаторы процессов в дополнение к обычной "
+"информации\n"
 "      -n\tпоказать только те процессы, у которых изменилось состояние\n"
 "    \tс момента после последнего уведомления\n"
 "      -p\tпоказать только идентификаторы процессов\n"
@@ -3899,25 +3810,12 @@ msgstr ""
 "    лидера группы процессов задания.\n"
 "    \n"
 "    Состояние выхода:\n"
-"    Возвращает успех, если был указан допустимый параметр или не возникла ошибка.\n"
+"    Возвращает успех, если был указан допустимый параметр или не возникла "
+"ошибка.\n"
 "    Если указан параметр -x, возвращает состояние выхода команды."
 
 #: builtins.c:906
 #, fuzzy
-#| msgid ""
-#| "Remove jobs from current shell.\n"
-#| "    \n"
-#| "    Removes each JOBSPEC argument from the table of active jobs.  Without\n"
-#| "    any JOBSPECs, the shell uses its notion of the current job.\n"
-#| "    \n"
-#| "    Options:\n"
-#| "      -a\tremove all jobs if JOBSPEC is not supplied\n"
-#| "      -h\tmark each JOBSPEC so that SIGHUP is not sent to the job if the\n"
-#| "    \tshell receives a SIGHUP\n"
-#| "      -r\tremove only running jobs\n"
-#| "    \n"
-#| "    Exit Status:\n"
-#| "    Returns success unless an invalid option or JOBSPEC is given."
 msgid ""
 "Remove jobs from current shell.\n"
 "    \n"
@@ -3949,25 +3847,6 @@ msgstr ""
 
 #: builtins.c:925
 #, fuzzy
-#| msgid ""
-#| "Send a signal to a job.\n"
-#| "    \n"
-#| "    Send the processes identified by PID or JOBSPEC the signal named by\n"
-#| "    SIGSPEC or SIGNUM.  If neither SIGSPEC nor SIGNUM is present, then\n"
-#| "    SIGTERM is assumed.\n"
-#| "    \n"
-#| "    Options:\n"
-#| "      -s sig\tSIG is a signal name\n"
-#| "      -n sig\tSIG is a signal number\n"
-#| "      -l\tlist the signal names; if arguments follow `-l' they are\n"
-#| "    \tassumed to be signal numbers for which names should be listed\n"
-#| "    \n"
-#| "    Kill is a shell builtin for two reasons: it allows job IDs to be used\n"
-#| "    instead of process IDs, and allows processes to be killed if the limit\n"
-#| "    on processes that you can create is reached.\n"
-#| "    \n"
-#| "    Exit Status:\n"
-#| "    Returns success unless an invalid option is given or an error occurs."
 msgid ""
 "Send a signal to a job.\n"
 "    \n"
@@ -3998,15 +3877,19 @@ msgstr ""
 "    Параметры:\n"
 "      -s сигнал\tназвание сигнала\n"
 "      -n сигнал\tномер сигнала\n"
-"      -l\t\tпоказывает названия сигналов; если после аргументов указано «-l»,\n"
-"    \tони считаются номерами сигналов, для которых необходимо показать названия\n"
+"      -l\t\tпоказывает названия сигналов; если после аргументов указано «-"
+"l»,\n"
+"    \tони считаются номерами сигналов, для которых необходимо показать "
+"названия\n"
 "    \n"
-"    kill — это встроенная команда, предназначенная для двух задач: использовать\n"
+"    kill — это встроенная команда, предназначенная для двух задач: "
+"использовать\n"
 "    номера заданий вместо номеров процессов и убивать процессы\n"
 "    при достижении предельного числа процессов.\n"
 "    \n"
 "    Состояние выхода:\n"
-"    Возвращает успех, если был указан допустимый параметр или не возникла ошибка."
+"    Возвращает успех, если был указан допустимый параметр или не возникла "
+"ошибка."
 
 #: builtins.c:949
 msgid ""
@@ -4015,7 +3898,8 @@ msgid ""
 "    Evaluate each ARG as an arithmetic expression.  Evaluation is done in\n"
 "    fixed-width integers with no check for overflow, though division by 0\n"
 "    is trapped and flagged as an error.  The following list of operators is\n"
-"    grouped into levels of equal-precedence operators.  The levels are listed\n"
+"    grouped into levels of equal-precedence operators.  The levels are "
+"listed\n"
 "    in order of decreasing precedence.\n"
 "    \n"
 "    \tid++, id--\tvariable post-increment, post-decrement\n"
@@ -4053,9 +3937,11 @@ msgid ""
 msgstr ""
 "Расчёт математических выражений.\n"
 "    \n"
-"    Выполняет расчёт всех аргументов в математическом выражении.  Расчёт выполняется\n"
+"    Выполняет расчёт всех аргументов в математическом выражении.  Расчёт "
+"выполняется\n"
 "    для целых чисел фиксированной ширины с без проверки на переполнение.\n"
-"    Однако деление на 0 перехватывается и выдаётся ошибка.  Указанные ниже операторы объединены\n"
+"    Однако деление на 0 перехватывается и выдаётся ошибка.  Указанные ниже "
+"операторы объединены\n"
 "    в группы с одинаковым приоритетом.  Группы перечислены\n"
 "    в порядке уменьшения приоритета.\n"
 "    \n"
@@ -4080,8 +3966,10 @@ msgstr ""
 "    \t+=, -=, <<=, >>=,\n"
 "    \t&=, ^=, |=\tприсвоение\n"
 "    \n"
-"    в качестве операндов можно использовать переменные командного процессора.  Название переменной\n"
-"    заменяется её значением (приводится к целому числу фиксированной ширины)\n"
+"    в качестве операндов можно использовать переменные командного "
+"процессора.  Название переменной\n"
+"    заменяется её значением (приводится к целому числу фиксированной "
+"ширины)\n"
 "    в выражении.  У переменной не должен быть включён атрибут integer,\n"
 "    чтобы её можно было использовать в выражении.\n"
 "    \n"
@@ -4090,62 +3978,27 @@ msgstr ""
 "    выше правила старшинства.\n"
 "    \n"
 "    Состояние выхода:\n"
-"    Если последний АРГУМЕНТ имеет значение 0, let возвращает 1. В противном случае let возвращает 0."
+"    Если последний АРГУМЕНТ имеет значение 0, let возвращает 1. В противном "
+"случае let возвращает 0."
 
 #: builtins.c:994
 #, fuzzy
-#| msgid ""
-#| "Read a line from the standard input and split it into fields.\n"
-#| "    \n"
-#| "    Reads a single line from the standard input, or from file descriptor FD\n"
-#| "    if the -u option is supplied.  The line is split into fields as with word\n"
-#| "    splitting, and the first word is assigned to the first NAME, the second\n"
-#| "    word to the second NAME, and so on, with any leftover words assigned to\n"
-#| "    the last NAME.  Only the characters found in $IFS are recognized as word\n"
-#| "    delimiters.\n"
-#| "    \n"
-#| "    If no NAMEs are supplied, the line read is stored in the REPLY variable.\n"
-#| "    \n"
-#| "    Options:\n"
-#| "      -a array\tassign the words read to sequential indices of the array\n"
-#| "    \t\tvariable ARRAY, starting at zero\n"
-#| "      -d delim\tcontinue until the first character of DELIM is read, rather\n"
-#| "    \t\tthan newline\n"
-#| "      -e\t\tuse Readline to obtain the line in an interactive shell\n"
-#| "      -i text\tUse TEXT as the initial text for Readline\n"
-#| "      -n nchars\treturn after reading NCHARS characters rather than waiting\n"
-#| "    \t\tfor a newline, but honor a delimiter if fewer than NCHARS\n"
-#| "    \t\tcharacters are read before the delimiter\n"
-#| "      -N nchars\treturn only after reading exactly NCHARS characters, unless\n"
-#| "    \t\tEOF is encountered or read times out, ignoring any delimiter\n"
-#| "      -p prompt\toutput the string PROMPT without a trailing newline before\n"
-#| "    \t\tattempting to read\n"
-#| "      -r\t\tdo not allow backslashes to escape any characters\n"
-#| "      -s\t\tdo not echo input coming from a terminal\n"
-#| "      -t timeout\ttime out and return failure if a complete line of input is\n"
-#| "    \t\tnot read within TIMEOUT seconds.  The value of the TMOUT\n"
-#| "    \t\tvariable is the default timeout.  TIMEOUT may be a\n"
-#| "    \t\tfractional number.  If TIMEOUT is 0, read returns immediately,\n"
-#| "    \t\twithout trying to read any data, returning success only if\n"
-#| "    \t\tinput is available on the specified file descriptor.  The\n"
-#| "    \t\texit status is greater than 128 if the timeout is exceeded\n"
-#| "      -u fd\t\tread from file descriptor FD instead of the standard input\n"
-#| "    \n"
-#| "    Exit Status:\n"
-#| "    The return code is zero, unless end-of-file is encountered, read times out\n"
-#| "    (in which case it's greater than 128), a variable assignment error occurs,\n"
-#| "    or an invalid file descriptor is supplied as the argument to -u."
 msgid ""
 "Read a line from the standard input and split it into fields.\n"
 "    \n"
 "    Reads a single line from the standard input, or from file descriptor FD\n"
-"    if the -u option is supplied.  The line is split into fields as with word\n"
+"    if the -u option is supplied.  The line is split into fields as with "
+"word\n"
 "    splitting, and the first word is assigned to the first NAME, the second\n"
 "    word to the second NAME, and so on, with any leftover words assigned to\n"
-"    the last NAME.  Only the characters found in $IFS are recognized as word\n"
-"    delimiters.\n"
+"    the last NAME.  Only the characters found in $IFS are recognized as "
+"word\n"
+"    delimiters. By default, the backslash character escapes delimiter "
+"characters\n"
+"    and newline.\n"
 "    \n"
-"    If no NAMEs are supplied, the line read is stored in the REPLY variable.\n"
+"    If no NAMEs are supplied, the line read is stored in the REPLY "
+"variable.\n"
 "    \n"
 "    Options:\n"
 "      -a array\tassign the words read to sequential indices of the array\n"
@@ -4157,7 +4010,8 @@ msgid ""
 "      -n nchars\treturn after reading NCHARS characters rather than waiting\n"
 "    \t\tfor a newline, but honor a delimiter if fewer than\n"
 "    \t\tNCHARS characters are read before the delimiter\n"
-"      -N nchars\treturn only after reading exactly NCHARS characters, unless\n"
+"      -N nchars\treturn only after reading exactly NCHARS characters, "
+"unless\n"
 "    \t\tEOF is encountered or read times out, ignoring any\n"
 "    \t\tdelimiter\n"
 "      -p prompt\toutput the string PROMPT without a trailing newline before\n"
@@ -4175,52 +4029,68 @@ msgid ""
 "      -u fd\tread from file descriptor FD instead of the standard input\n"
 "    \n"
 "    Exit Status:\n"
-"    The return code is zero, unless end-of-file is encountered, read times out\n"
-"    (in which case it's greater than 128), a variable assignment error occurs,\n"
+"    The return code is zero, unless end-of-file is encountered, read times "
+"out\n"
+"    (in which case it's greater than 128), a variable assignment error "
+"occurs,\n"
 "    or an invalid file descriptor is supplied as the argument to -u."
 msgstr ""
 "Чтение строки со стандартного ввода и разделение её на поля.\n"
 "    \n"
 "    Читает одну строку со стандартного ввода или из файлового дескриптора,\n"
 "    если указан параметр -u.  Строка разделяется на поля по словам.\n"
-"    Первое слово присваивается первому указанному имени, второе слово — второму\n"
+"    Первое слово присваивается первому указанному имени, второе слово — "
+"второму\n"
 "    имени и так далее.\n"
-"    Оставшиеся слова присваиваются последнему указанному имени.  В качестве разделителей слов используются только символы\n"
+"    Оставшиеся слова присваиваются последнему указанному имени.  В качестве "
+"разделителей слов используются только символы\n"
 "    из переменной $IFS.\n"
 "    \n"
-"    Если имена не указаны, прочитанная строка сохраняется в переменной $REPLY.\n"
+"    Если имена не указаны, прочитанная строка сохраняется в переменной "
+"$REPLY.\n"
 "    \n"
 "    Параметры:\n"
 "      -a массив\tпоследовательно присвоить прочитанные слова указателям\n"
 "    \t\tмассива, начиная с нуля\n"
 "      -d разделитель\tпродолжить до первого разделителя,\n"
 "    \t\tа не до символа новой строки\n"
-"      -e\t\tс помощью readline получить строку в интерактивном командном процессоре\n"
+"      -e\t\tс помощью readline получить строку в интерактивном командном "
+"процессоре\n"
 "      -i текст\t\tиспользовать текст в качестве исходного для readline\n"
-"      -n число_знаков\tвыполнить возврат после прочтения числа знаков, а не ждать\n"
-"    \t\tсимвола новой строки; учитывать разделитель, если до него было прочитано\n"
+"      -n число_знаков\tвыполнить возврат после прочтения числа знаков, а не "
+"ждать\n"
+"    \t\tсимвола новой строки; учитывать разделитель, если до него было "
+"прочитано\n"
 "    \t\tменьше указанного числа знаков\n"
-"      -N число_знаков\tвыполнить возврат только после прочтения указанного числа знаков,\n"
-"    \t\tесли только не был получен конец строки или не истекло время ожидания, игнорируя все разделители\n"
+"      -N число_знаков\tвыполнить возврат только после прочтения указанного "
+"числа знаков,\n"
+"    \t\tесли только не был получен конец строки или не истекло время "
+"ожидания, игнорируя все разделители\n"
 "      -p приглашение\tпоказать приглашение без символа новой строки в конце\n"
 "    \t\tперед тем как читать\n"
 "      -r\t\tне выполнять экранирование символами косой черты\n"
 "      -s\t\tне показывать данные, полученные из терминала\n"
-"      -t тайм-аут\tпрекратить ожидание и вывести ошибку, если полная входная\n"
-"    \t\tстрока не была прочитана за указанное число секунд  В переменной $TMOUT хранится\n"
+"      -t тайм-аут\tпрекратить ожидание и вывести ошибку, если полная "
+"входная\n"
+"    \t\tстрока не была прочитана за указанное число секунд  В переменной "
+"$TMOUT хранится\n"
 "    \t\tзначение тайм-аута по умолчанию.  Время ожидания\n"
-"    \t\tможет быть дробным числом.  Если тайм-аут равен 0, read немедленно выполняет возврат,\n"
+"    \t\tможет быть дробным числом.  Если тайм-аут равен 0, read немедленно "
+"выполняет возврат,\n"
 "    \t\tне пытаясь прочитать никакие данные. Успех возвращается,\n"
-"    \t\tтолько если входные данные доступны по указанному файловому дескриптору.   \n"
+"    \t\tтолько если входные данные доступны по указанному файловому "
+"дескриптору.   \n"
 "    \t\tСостояние выхода больше 128, если время ожидания было превышено.\n"
 "      -u fd\t\tчитать из файлового дескриптора, а не со стандартного входа\n"
 "    \n"
 "    Состояние выхода:\n"
-"    Состояние выхода будет нулевым, если не был встречен конец файла, не истекло время ожидания\n"
-"    (в этом случае состояние выхода будет больше 128), не возникла ошибка присвоения переменной\n"
+"    Состояние выхода будет нулевым, если не был встречен конец файла, не "
+"истекло время ожидания\n"
+"    (в этом случае состояние выхода будет больше 128), не возникла ошибка "
+"присвоения переменной\n"
 "    или не был указан недопустимый файловый дескриптор как аргумент для -u."
 
-#: builtins.c:1041
+#: builtins.c:1042
 msgid ""
 "Return from a shell function.\n"
 "    \n"
@@ -4238,91 +4108,11 @@ msgstr ""
 "    последней команды, выполненной в функции или скрипте.\n"
 "    \n"
 "    Состояние выхода:\n"
-"    Возвращает N или ошибку, если командный процессор не выполняет функцию или скрипт."
+"    Возвращает N или ошибку, если командный процессор не выполняет функцию "
+"или скрипт."
 
-#: builtins.c:1054
+#: builtins.c:1055
 #, fuzzy
-#| msgid ""
-#| "Set or unset values of shell options and positional parameters.\n"
-#| "    \n"
-#| "    Change the value of shell attributes and positional parameters, or\n"
-#| "    display the names and values of shell variables.\n"
-#| "    \n"
-#| "    Options:\n"
-#| "      -a  Mark variables which are modified or created for export.\n"
-#| "      -b  Notify of job termination immediately.\n"
-#| "      -e  Exit immediately if a command exits with a non-zero status.\n"
-#| "      -f  Disable file name generation (globbing).\n"
-#| "      -h  Remember the location of commands as they are looked up.\n"
-#| "      -k  All assignment arguments are placed in the environment for a\n"
-#| "          command, not just those that precede the command name.\n"
-#| "      -m  Job control is enabled.\n"
-#| "      -n  Read commands but do not execute them.\n"
-#| "      -o option-name\n"
-#| "          Set the variable corresponding to option-name:\n"
-#| "              allexport    same as -a\n"
-#| "              braceexpand  same as -B\n"
-#| "              emacs        use an emacs-style line editing interface\n"
-#| "              errexit      same as -e\n"
-#| "              errtrace     same as -E\n"
-#| "              functrace    same as -T\n"
-#| "              hashall      same as -h\n"
-#| "              histexpand   same as -H\n"
-#| "              history      enable command history\n"
-#| "              ignoreeof    the shell will not exit upon reading EOF\n"
-#| "              interactive-comments\n"
-#| "                           allow comments to appear in interactive commands\n"
-#| "              keyword      same as -k\n"
-#| "              monitor      same as -m\n"
-#| "              noclobber    same as -C\n"
-#| "              noexec       same as -n\n"
-#| "              noglob       same as -f\n"
-#| "              nolog        currently accepted but ignored\n"
-#| "              notify       same as -b\n"
-#| "              nounset      same as -u\n"
-#| "              onecmd       same as -t\n"
-#| "              physical     same as -P\n"
-#| "              pipefail     the return value of a pipeline is the status of\n"
-#| "                           the last command to exit with a non-zero status,\n"
-#| "                           or zero if no command exited with a non-zero status\n"
-#| "              posix        change the behavior of bash where the default\n"
-#| "                           operation differs from the Posix standard to\n"
-#| "                           match the standard\n"
-#| "              privileged   same as -p\n"
-#| "              verbose      same as -v\n"
-#| "              vi           use a vi-style line editing interface\n"
-#| "              xtrace       same as -x\n"
-#| "      -p  Turned on whenever the real and effective user ids do not match.\n"
-#| "          Disables processing of the $ENV file and importing of shell\n"
-#| "          functions.  Turning this option off causes the effective uid and\n"
-#| "          gid to be set to the real uid and gid.\n"
-#| "      -t  Exit after reading and executing one command.\n"
-#| "      -u  Treat unset variables as an error when substituting.\n"
-#| "      -v  Print shell input lines as they are read.\n"
-#| "      -x  Print commands and their arguments as they are executed.\n"
-#| "      -B  the shell will perform brace expansion\n"
-#| "      -C  If set, disallow existing regular files to be overwritten\n"
-#| "          by redirection of output.\n"
-#| "      -E  If set, the ERR trap is inherited by shell functions.\n"
-#| "      -H  Enable ! style history substitution.  This flag is on\n"
-#| "          by default when the shell is interactive.\n"
-#| "      -P  If set, do not resolve symbolic links when executing commands\n"
-#| "          such as cd which change the current directory.\n"
-#| "      -T  If set, the DEBUG trap is inherited by shell functions.\n"
-#| "      --  Assign any remaining arguments to the positional parameters.\n"
-#| "          If there are no remaining arguments, the positional parameters\n"
-#| "          are unset.\n"
-#| "      -   Assign any remaining arguments to the positional parameters.\n"
-#| "          The -x and -v options are turned off.\n"
-#| "    \n"
-#| "    Using + rather than - causes these flags to be turned off.  The\n"
-#| "    flags can also be used upon invocation of the shell.  The current\n"
-#| "    set of flags may be found in $-.  The remaining n ARGs are positional\n"
-#| "    parameters and are assigned, in order, to $1, $2, .. $n.  If no\n"
-#| "    ARGs are given, all shell variables are printed.\n"
-#| "    \n"
-#| "    Exit Status:\n"
-#| "    Returns success unless an invalid option is given."
 msgid ""
 "Set or unset values of shell options and positional parameters.\n"
 "    \n"
@@ -4365,7 +4155,8 @@ msgid ""
 "              physical     same as -P\n"
 "              pipefail     the return value of a pipeline is the status of\n"
 "                           the last command to exit with a non-zero status,\n"
-"                           or zero if no command exited with a non-zero status\n"
+"                           or zero if no command exited with a non-zero "
+"status\n"
 "              posix        change the behavior of bash where the default\n"
 "                           operation differs from the Posix standard to\n"
 "                           match the standard\n"
@@ -4389,7 +4180,8 @@ msgid ""
 "          by default when the shell is interactive.\n"
 "      -P  If set, do not resolve symbolic links when executing commands\n"
 "          such as cd which change the current directory.\n"
-"      -T  If set, the DEBUG and RETURN traps are inherited by shell functions.\n"
+"      -T  If set, the DEBUG and RETURN traps are inherited by shell "
+"functions.\n"
 "      --  Assign any remaining arguments to the positional parameters.\n"
 "          If there are no remaining arguments, the positional parameters\n"
 "          are unset.\n"
@@ -4405,15 +4197,19 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless an invalid option is given."
 msgstr ""
-"Присвоение или удаление значений параметров командного процессора и позиционных параметров.\n"
+"Присвоение или удаление значений параметров командного процессора и "
+"позиционных параметров.\n"
 "    \n"
-"    Изменяет значение атрибутов командного процессора и позиционных параметров или\n"
+"    Изменяет значение атрибутов командного процессора и позиционных "
+"параметров или\n"
 "    выводит названия и значения переменных командного процессора.\n"
 "    \n"
 "    Параметры:\n"
-"      -a  пометить переменные, которые были изменены или созданы для экспорта\n"
+"      -a  пометить переменные, которые были изменены или созданы для "
+"экспорта\n"
 "      -b  немедленно уведомить о завершении задания\n"
-"      -e  немедленно выйти, если команда выполняет выход с ненулевым состоянием\n"
+"      -e  немедленно выйти, если команда выполняет выход с ненулевым "
+"состоянием\n"
 "      -f  отключить генерацию имён файлов (подстановка)\n"
 "      -h  запомнить расположение команд, как они выглядели ранее\n"
 "      -k  поместить в окружение для команды все аргументы присвоения,\n"
@@ -4424,16 +4220,19 @@ msgstr ""
 "          Задаёт переменную, соответствующую названию параметра:\n"
 "              allexport    эквивалент -a\n"
 "              braceexpand  эквивалент -B\n"
-"              emacs        использовать стиль emacs для редактирования строк\n"
+"              emacs        использовать стиль emacs для редактирования "
+"строк\n"
 "              errexit      эквивалент -e\n"
 "              errtrace     эквивалент -E\n"
 "              functrace    эквивалент -T\n"
 "              hashall      эквивалент -h\n"
 "              histexpand   эквивалент -H\n"
 "              history      включить журнал команд\n"
-"              ignoreeof    не закрывать командный процессор после получения конца файла\n"
+"              ignoreeof    не закрывать командный процессор после получения "
+"конца файла\n"
 "              interactive-comments\n"
-"                           разрешить показ комментариев в интерактивных командах\n"
+"                           разрешить показ комментариев в интерактивных "
+"командах\n"
 "              keyword      эквивалент -k\n"
 "              monitor      эквивалент -m\n"
 "              noclobber    эквивалент -C\n"
@@ -4444,17 +4243,22 @@ msgstr ""
 "              nounset      эквивалент -u\n"
 "              onecmd       эквивалент -t\n"
 "              physical     эквивалент -P\n"
-"              pipefail     возвращаемое значение конвейера является состоянием\n"
-"                           последней команды, завершившейся с ненулевым состоянием,\n"
-"                           или нулём, если не было команды, завершившейся с ненулевым состоянием\n"
+"              pipefail     возвращаемое значение конвейера является "
+"состоянием\n"
+"                           последней команды, завершившейся с ненулевым "
+"состоянием,\n"
+"                           или нулём, если не было команды, завершившейся с "
+"ненулевым состоянием\n"
 "              posix        изменить поведение bash там, где операции\n"
-"                           по умолчанию отличаются от стандарта Posix, чтобы\n"
+"                           по умолчанию отличаются от стандарта Posix, "
+"чтобы\n"
 "                           соответствовать этому стандарту\n"
 "              privileged   эквивалент -p\n"
 "              verbose      эквивалент -v\n"
 "              vi           использовать стиль vi для редактирования строк\n"
 "              xtrace       эквивалент -x\n"
-"      -p  Включён, когда реальный и эффективный идентификаторы пользователя не совпадают.\n"
+"      -p  Включён, когда реальный и эффективный идентификаторы пользователя "
+"не совпадают.\n"
 "          Отключает обработку файла $ENV и импорт функций командного\n"
 "          процессора.  Если отключить этот параметр, эффективные UID и GID\n"
 "          будут назначены реальным UID и GID.\n"
@@ -4465,12 +4269,16 @@ msgstr ""
 "      -B  Командный процессор развернёт скобки.\n"
 "      -C  Если задано, запретить перезапись существующих обычных файлов\n"
 "          вследствие перенаправления вывода.\n"
-"      -E  Если задано, ловушка ERR наследуется функциями командного процессора.\n"
-"      -H  Включить замену журнала с использованием !.  По умолчанию этот флаг\n"
+"      -E  Если задано, ловушка ERR наследуется функциями командного "
+"процессора.\n"
+"      -H  Включить замену журнала с использованием !.  По умолчанию этот "
+"флаг\n"
 "          установлен, если командный процессор интерактивный.\n"
-"      -P  Если задано, не разрешать символьные ссылки при выполнении команд,\n"
+"      -P  Если задано, не разрешать символьные ссылки при выполнении "
+"команд,\n"
 "          таких как cd, которые изменяют текущий каталог.\n"
-"      -T  Если задано, ловушка DEBUG наследуется функциями командного процессора.\n"
+"      -T  Если задано, ловушка DEBUG наследуется функциями командного "
+"процессора.\n"
 "      --  Назначить все оставшиеся аргументы позиционным параметрам.\n"
 "          Если аргументов не осталось, позиционные параметры\n"
 "          удаляются.\n"
@@ -4478,34 +4286,18 @@ msgstr ""
 "          Параметры -x и -v выключены.\n"
 "    \n"
 "    Если вместо - указать +, флаги будут выключены.   \n"
-"    Флаги также можно использовать до вызова командного процессора.  Текущий\n"
-"    набор флагов можно просмотреть в $-.  Оставшиеся n аргументов являются позиционными\n"
+"    Флаги также можно использовать до вызова командного процессора.  "
+"Текущий\n"
+"    набор флагов можно просмотреть в $-.  Оставшиеся n аргументов являются "
+"позиционными\n"
 "    параметрами и назначаются в порядке $1, $2, .. $n.  Если\n"
 "    аргументы не указаны, выводятся все переменные командного процессора.\n"
 "    \n"
 "    Состояние выхода:\n"
 "    Возвращает успех, если был указан допустимый параметр."
 
-#: builtins.c:1139
+#: builtins.c:1140
 #, fuzzy
-#| msgid ""
-#| "Unset values and attributes of shell variables and functions.\n"
-#| "    \n"
-#| "    For each NAME, remove the corresponding variable or function.\n"
-#| "    \n"
-#| "    Options:\n"
-#| "      -f\ttreat each NAME as a shell function\n"
-#| "      -v\ttreat each NAME as a shell variable\n"
-#| "      -n\ttreat each NAME as a name reference and unset the variable itself\n"
-#| "    \trather than the variable it references\n"
-#| "    \n"
-#| "    Without options, unset first tries to unset a variable, and if that fails,\n"
-#| "    tries to unset a function.\n"
-#| "    \n"
-#| "    Some variables cannot be unset; also see `readonly'.\n"
-#| "    \n"
-#| "    Exit Status:\n"
-#| "    Returns success unless an invalid option is given or a NAME is read-only."
 msgid ""
 "Unset values and attributes of shell variables and functions.\n"
 "    \n"
@@ -4517,7 +4309,8 @@ msgid ""
 "      -n\ttreat each NAME as a name reference and unset the variable itself\n"
 "    \t\trather than the variable it references\n"
 "    \n"
-"    Without options, unset first tries to unset a variable, and if that fails,\n"
+"    Without options, unset first tries to unset a variable, and if that "
+"fails,\n"
 "    tries to unset a function.\n"
 "    \n"
 "    Some variables cannot be unset; also see `readonly'.\n"
@@ -4532,23 +4325,27 @@ msgstr ""
 "    Параметры:\n"
 "      -f\tсчитать каждое указанное имя функцией командного процессора\n"
 "      -v\tсчитать каждое указанное имя переменной командного процессора\n"
-"      -n\tсчитать каждое указанное имя ссылкой на название и удалить саму переменную,\n"
+"      -n\tсчитать каждое указанное имя ссылкой на название и удалить саму "
+"переменную,\n"
 "    \tа не переменную, на которую указывает ссылка\n"
 "    \n"
-"    Если параметры не указаны, unset сначала пытается удалить переменную. Если это не удаётся,\n"
+"    Если параметры не указаны, unset сначала пытается удалить переменную. "
+"Если это не удаётся,\n"
 "    пытается удалить функцию.\n"
 "    \n"
 "    Некоторые переменные нельзя удалить. См. также «readonly».\n"
 "    \n"
 "    Состояние выхода:\n"
-"    Возвращает успех, если был указан допустимый параметр или указанное имя доступно для записи."
+"    Возвращает успех, если был указан допустимый параметр или указанное имя "
+"доступно для записи."
 
-#: builtins.c:1161
+#: builtins.c:1162
 msgid ""
 "Set export attribute for shell variables.\n"
 "    \n"
 "    Marks each NAME for automatic export to the environment of subsequently\n"
-"    executed commands.  If VALUE is supplied, assign VALUE before exporting.\n"
+"    executed commands.  If VALUE is supplied, assign VALUE before "
+"exporting.\n"
 "    \n"
 "    Options:\n"
 "      -f\trefer to shell functions\n"
@@ -4563,7 +4360,8 @@ msgstr ""
 "Установка атрибута экспорта для переменных командного процессора.\n"
 "    \n"
 "    Помечает все имена для автоматического экспорта в среду для\n"
-"    последующих выполняемых команд.  Если указано значение, оно присваивается перед экспортом.\n"
+"    последующих выполняемых команд.  Если указано значение, оно "
+"присваивается перед экспортом.\n"
 "    \n"
 "    Параметры:\n"
 "      -f\tиспользовать функции командного процессора\n"
@@ -4575,26 +4373,8 @@ msgstr ""
 "    Состояние выхода:\n"
 "    Возвращает успех, если был указан допустимый параметр или имя."
 
-#: builtins.c:1180
+#: builtins.c:1181
 #, fuzzy
-#| msgid ""
-#| "Mark shell variables as unchangeable.\n"
-#| "    \n"
-#| "    Mark each NAME as read-only; the values of these NAMEs may not be\n"
-#| "    changed by subsequent assignment.  If VALUE is supplied, assign VALUE\n"
-#| "    before marking as read-only.\n"
-#| "    \n"
-#| "    Options:\n"
-#| "      -a\trefer to indexed array variables\n"
-#| "      -A\trefer to associative array variables\n"
-#| "      -f\trefer to shell functions\n"
-#| "      -p\tdisplay a list of all readonly variables or functions, depending on\n"
-#| "            whether or not the -f option is given\n"
-#| "    \n"
-#| "    An argument of `--' disables further option processing.\n"
-#| "    \n"
-#| "    Exit Status:\n"
-#| "    Returns success unless an invalid option is given or NAME is invalid."
 msgid ""
 "Mark shell variables as unchangeable.\n"
 "    \n"
@@ -4617,14 +4397,16 @@ msgstr ""
 "Запрет изменения переменных командного процессора.\n"
 "    \n"
 "    Делает каждое имя доступным только чтения. Значения этих имён нельзя\n"
-"    будет изменить в будущем.  Если указано значение, присваивает это значение\n"
+"    будет изменить в будущем.  Если указано значение, присваивает это "
+"значение\n"
 "    перед тем, как сделать его доступным только для чтения.\n"
 "    \n"
 "    Параметры:\n"
 "      -a\tссылаться на переменные индексированного массива\n"
 "      -A\tссылаться на переменные ассоциативного массива\n"
 "      -f\tиспользовать функции командного процессора\n"
-"      -p\tвывести список всех переменных или функций, доступных только для чтения,\n"
+"      -p\tвывести список всех переменных или функций, доступных только для "
+"чтения,\n"
 "            в зависимости от того, указан ли параметр -f\n"
 "    \n"
 "    Аргумент «--» отключает дальнейшую обработку параметров.\n"
@@ -4632,7 +4414,7 @@ msgstr ""
 "    Состояние выхода:\n"
 "    Возвращает успех, если был указан допустимый параметр или имя."
 
-#: builtins.c:1202
+#: builtins.c:1203
 msgid ""
 "Shift positional parameters.\n"
 "    \n"
@@ -4650,7 +4432,7 @@ msgstr ""
 "    Состояние выхода:\n"
 "    Возвращает успех, если N положительный или меньше $#."
 
-#: builtins.c:1214 builtins.c:1229
+#: builtins.c:1215 builtins.c:1230
 msgid ""
 "Execute commands from a file in the current shell.\n"
 "    \n"
@@ -4665,16 +4447,18 @@ msgid ""
 msgstr ""
 "Выполнение команд из файла в текущем командном процессоре.\n"
 "    \n"
-"    Читает и выполняет команды из указанного файла в текущем командном процессоре.   \n"
+"    Читает и выполняет команды из указанного файла в текущем командном "
+"процессоре.   \n"
 "    Файла ищется в каталогах, указанных в переменной $PATH.\n"
 "    Если указаны аргументы, они становятся позиционными параметрами\n"
 "    при выполнении файла.\n"
 "    \n"
 "    Состояние выхода:\n"
-"    Возвращает состояние последней выполненной команды из файла. Возвращает ошибку,\n"
+"    Возвращает состояние последней выполненной команды из файла. Возвращает "
+"ошибку,\n"
 "    если файл не удаётся прочитать."
 
-#: builtins.c:1245
+#: builtins.c:1246
 msgid ""
 "Suspend shell execution.\n"
 "    \n"
@@ -4689,94 +4473,21 @@ msgid ""
 msgstr ""
 "Приостановка работы командного процессора.\n"
 "    \n"
-"    Приостанавливает работу текущего командного процессора до получения сигнала SIGCONT.\n"
-"    Работу командных процессоров login можно приостановить только в принудительном режиме.\n"
+"    Приостанавливает работу текущего командного процессора до получения "
+"сигнала SIGCONT.\n"
+"    Работу командных процессоров login можно приостановить только в "
+"принудительном режиме.\n"
 "    \n"
 "    Параметры:\n"
-"      -f\tпринудительно приостановить работу, даже если командный процессор — login\n"
+"      -f\tпринудительно приостановить работу, даже если командный "
+"процессор — login\n"
 "    \n"
 "    Состояние выхода:\n"
-"    Возвращает успех, если не включено управление заданиями или не произошла ошибка."
+"    Возвращает успех, если не включено управление заданиями или не произошла "
+"ошибка."
 
-#: builtins.c:1261
+#: builtins.c:1262
 #, fuzzy
-#| msgid ""
-#| "Evaluate conditional expression.\n"
-#| "    \n"
-#| "    Exits with a status of 0 (true) or 1 (false) depending on\n"
-#| "    the evaluation of EXPR.  Expressions may be unary or binary.  Unary\n"
-#| "    expressions are often used to examine the status of a file.  There\n"
-#| "    are string operators and numeric comparison operators as well.\n"
-#| "    \n"
-#| "    The behavior of test depends on the number of arguments.  Read the\n"
-#| "    bash manual page for the complete specification.\n"
-#| "    \n"
-#| "    File operators:\n"
-#| "    \n"
-#| "      -a FILE        True if file exists.\n"
-#| "      -b FILE        True if file is block special.\n"
-#| "      -c FILE        True if file is character special.\n"
-#| "      -d FILE        True if file is a directory.\n"
-#| "      -e FILE        True if file exists.\n"
-#| "      -f FILE        True if file exists and is a regular file.\n"
-#| "      -g FILE        True if file is set-group-id.\n"
-#| "      -h FILE        True if file is a symbolic link.\n"
-#| "      -L FILE        True if file is a symbolic link.\n"
-#| "      -k FILE        True if file has its `sticky' bit set.\n"
-#| "      -p FILE        True if file is a named pipe.\n"
-#| "      -r FILE        True if file is readable by you.\n"
-#| "      -s FILE        True if file exists and is not empty.\n"
-#| "      -S FILE        True if file is a socket.\n"
-#| "      -t FD          True if FD is opened on a terminal.\n"
-#| "      -u FILE        True if the file is set-user-id.\n"
-#| "      -w FILE        True if the file is writable by you.\n"
-#| "      -x FILE        True if the file is executable by you.\n"
-#| "      -O FILE        True if the file is effectively owned by you.\n"
-#| "      -G FILE        True if the file is effectively owned by your group.\n"
-#| "      -N FILE        True if the file has been modified since it was last read.\n"
-#| "    \n"
-#| "      FILE1 -nt FILE2  True if file1 is newer than file2 (according to\n"
-#| "                       modification date).\n"
-#| "    \n"
-#| "      FILE1 -ot FILE2  True if file1 is older than file2.\n"
-#| "    \n"
-#| "      FILE1 -ef FILE2  True if file1 is a hard link to file2.\n"
-#| "    \n"
-#| "    String operators:\n"
-#| "    \n"
-#| "      -z STRING      True if string is empty.\n"
-#| "    \n"
-#| "      -n STRING\n"
-#| "         STRING      True if string is not empty.\n"
-#| "    \n"
-#| "      STRING1 = STRING2\n"
-#| "                     True if the strings are equal.\n"
-#| "      STRING1 != STRING2\n"
-#| "                     True if the strings are not equal.\n"
-#| "      STRING1 < STRING2\n"
-#| "                     True if STRING1 sorts before STRING2 lexicographically.\n"
-#| "      STRING1 > STRING2\n"
-#| "                     True if STRING1 sorts after STRING2 lexicographically.\n"
-#| "    \n"
-#| "    Other operators:\n"
-#| "    \n"
-#| "      -o OPTION      True if the shell option OPTION is enabled.\n"
-#| "      -v VAR\t True if the shell variable VAR is set\n"
-#| "      -R VAR\t True if the shell variable VAR is set and is a name reference.\n"
-#| "      ! EXPR         True if expr is false.\n"
-#| "      EXPR1 -a EXPR2 True if both expr1 AND expr2 are true.\n"
-#| "      EXPR1 -o EXPR2 True if either expr1 OR expr2 is true.\n"
-#| "    \n"
-#| "      arg1 OP arg2   Arithmetic tests.  OP is one of -eq, -ne,\n"
-#| "                     -lt, -le, -gt, or -ge.\n"
-#| "    \n"
-#| "    Arithmetic binary operators return true if ARG1 is equal, not-equal,\n"
-#| "    less-than, less-than-or-equal, greater-than, or greater-than-or-equal\n"
-#| "    than ARG2.\n"
-#| "    \n"
-#| "    Exit Status:\n"
-#| "    Returns success if EXPR evaluates to true; fails if EXPR evaluates to\n"
-#| "    false or an invalid argument is given."
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -4810,7 +4521,8 @@ msgid ""
 "      -x FILE        True if the file is executable by you.\n"
 "      -O FILE        True if the file is effectively owned by you.\n"
 "      -G FILE        True if the file is effectively owned by your group.\n"
-"      -N FILE        True if the file has been modified since it was last read.\n"
+"      -N FILE        True if the file has been modified since it was last "
+"read.\n"
 "    \n"
 "      FILE1 -nt FILE2  True if file1 is newer than file2 (according to\n"
 "                       modification date).\n"
@@ -4831,7 +4543,8 @@ msgid ""
 "      STRING1 != STRING2\n"
 "                     True if the strings are not equal.\n"
 "      STRING1 < STRING2\n"
-"                     True if STRING1 sorts before STRING2 lexicographically.\n"
+"                     True if STRING1 sorts before STRING2 "
+"lexicographically.\n"
 "      STRING1 > STRING2\n"
 "                     True if STRING1 sorts after STRING2 lexicographically.\n"
 "    \n"
@@ -4859,7 +4572,8 @@ msgstr ""
 "Расчёт условного выражения.\n"
 "    \n"
 "    Возвращает состояние 0 (истина) или 1 (ложь) после\n"
-"    расчёта выражения.  Выражения могут быть унарными или бинарными.  Унарные\n"
+"    расчёта выражения.  Выражения могут быть унарными или бинарными.  "
+"Унарные\n"
 "    выражения часто используются для определения состояния файла.  Также\n"
 "    доступны стоковые операторы и операторы сравнения чисел.\n"
 "    \n"
@@ -4873,7 +4587,8 @@ msgstr ""
 "      -c ФАЙЛ        Истина, если файл представляет символьное устройство.\n"
 "      -d ФАЙЛ        Истина, если файл является каталогом.\n"
 "      -e ФАЙЛ        Истина, если файл существует.\n"
-"      -f ФАЙЛ        Истина, если файл существует и является обычным файлом.\n"
+"      -f ФАЙЛ        Истина, если файл существует и является обычным "
+"файлом.\n"
 "      -g ФАЙЛ        Истина, если для файла установлен бит SGID.\n"
 "      -h ФАЙЛ        Истина, если файл является символьной ссылкой.\n"
 "      -L ФАЙЛ        Истина, если файл является символьной ссылкой.\n"
@@ -4882,12 +4597,15 @@ msgstr ""
 "      -r ФАЙЛ        Истина, если вы можете прочитать файл.\n"
 "      -s ФАЙЛ        Истина, если файл существует и не является пустым.\n"
 "      -S ФАЙЛ        Истина, если файл является сокетом.\n"
-"      -t ФД          Истина, если файловый дескриптор ФД открыт в терминале.\n"
+"      -t ФД          Истина, если файловый дескриптор ФД открыт в "
+"терминале.\n"
 "      -u ФАЙЛ        Истина, если для файла установлен бит SUID.\n"
 "      -w ФАЙЛ        Истина, если вы можете выполнить запись в файл.\n"
 "      -x ФАЙЛ        Истина, если вы можете выполнить файл.\n"
-"      -O ФАЙЛ        Истина, если вы являетесь эффективным владельцем файла.\n"
-"      -G ФАЙЛ        Истина, если ваша группа является эффективным владельцем файла.\n"
+"      -O ФАЙЛ        Истина, если вы являетесь эффективным владельцем "
+"файла.\n"
+"      -G ФАЙЛ        Истина, если ваша группа является эффективным "
+"владельцем файла.\n"
 "      -N ФАЙЛ        Истина, если файл был изменён после последнего чтения.\n"
 "    \n"
 "      ФАЙЛ1 -nt ФАЙЛ2  Истина, если файл1 новее файла2 (согласно\n"
@@ -4895,7 +4613,8 @@ msgstr ""
 "    \n"
 "      ФАЙЛ1 -ot ФАЙЛ2  Истина, если файл1 старее файла2.\n"
 "    \n"
-"      ФАЙЛ1 -ef ФАЙЛ2  Истина, если файл1 является жёсткой ссылкой на файл2.\n"
+"      ФАЙЛ1 -ef ФАЙЛ2  Истина, если файл1 является жёсткой ссылкой на "
+"файл2.\n"
 "    \n"
 "    Строковые операторы:\n"
 "    \n"
@@ -4909,31 +4628,38 @@ msgstr ""
 "      СТРОКА1 != СТРОКА2\n"
 "                     Истина, если строки не совпадают.\n"
 "      СТРОКА1 < СТРОКА2\n"
-"                     Истина, если СТРОКА1 сортируется до СТРОКИ2 лексикографически.\n"
+"                     Истина, если СТРОКА1 сортируется до СТРОКИ2 "
+"лексикографически.\n"
 "      СТРОКА1 > СТРОКА2\n"
-"                     Истина, если СТРОКА1 сортируется после СТРОКИ2 лексикографически.\n"
+"                     Истина, если СТРОКА1 сортируется после СТРОКИ2 "
+"лексикографически.\n"
 "    \n"
 "    Остальные операторы:\n"
 "    \n"
 "      -o ПАРАМЕТР    Истина, если параметр командного процессора включён.\n"
 "      -v ПЕР\t Истина, если переменная командного процессора задана\n"
-"      -R ПЕР\t Истина, если переменная командного процессора задана и является именованной ссылкой.\n"
+"      -R ПЕР\t Истина, если переменная командного процессора задана и "
+"является именованной ссылкой.\n"
 "      ! ВЫРАЖ        Истина, если выражение возвращает ложь.\n"
 "      ВЫРАЖ1 -a ВЫРАЖ2 Истина, если оба выражения возвращают истину.\n"
-"      ВЫРАЖ1 -o ВЫРАЖ2 Истина, если хотя бы одно из выражений возвращает истину.\n"
+"      ВЫРАЖ1 -o ВЫРАЖ2 Истина, если хотя бы одно из выражений возвращает "
+"истину.\n"
 "    \n"
-"      арг1 ОП арг2   Математические проверки.  ОП может быть одним из следующих: -eq, -ne,\n"
+"      арг1 ОП арг2   Математические проверки.  ОП может быть одним из "
+"следующих: -eq, -ne,\n"
 "                     -lt, -le, -gt или -ge.\n"
 "    \n"
-"    Математические бинарные операторы возвращают истину, если АРГУМЕНТ1 равен, не равен,\n"
+"    Математические бинарные операторы возвращают истину, если АРГУМЕНТ1 "
+"равен, не равен,\n"
 "    меньше, меньше или равен либо больше или равен\n"
 "    АРГУМЕНТУ2.\n"
 "    \n"
 "    Состояние выхода:\n"
-"    Возвращает успех, если выражение истинно, или ошибку, если выражение ложно\n"
+"    Возвращает успех, если выражение истинно, или ошибку, если выражение "
+"ложно\n"
 "    или указан недопустимый аргумент."
 
-#: builtins.c:1343
+#: builtins.c:1344
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -4945,11 +4671,12 @@ msgstr ""
 "    Это синоним встроенной команды test, но последним аргументом должна\n"
 "    быть скобка «]», соответствующая открывающей «[»."
 
-#: builtins.c:1352
+#: builtins.c:1353
 msgid ""
 "Display process times.\n"
 "    \n"
-"    Prints the accumulated user and system times for the shell and all of its\n"
+"    Prints the accumulated user and system times for the shell and all of "
+"its\n"
 "    child processes.\n"
 "    \n"
 "    Exit Status:\n"
@@ -4957,17 +4684,19 @@ msgid ""
 msgstr ""
 "Отображение времени процесса.\n"
 "    \n"
-"    Показывает объединённые значения времени пользователя и системы для командного\n"
+"    Показывает объединённые значения времени пользователя и системы для "
+"командного\n"
 "    процессора и всех его дочерних процессов.\n"
 "    \n"
 "    Состояние выхода:\n"
 "    Всегда возвращает успех."
 
-#: builtins.c:1364
+#: builtins.c:1365
 msgid ""
 "Trap signals and other events.\n"
 "    \n"
-"    Defines and activates handlers to be run when the shell receives signals\n"
+"    Defines and activates handlers to be run when the shell receives "
+"signals\n"
 "    or other conditions.\n"
 "    \n"
 "    ARG is a command to be read and executed when the shell receives the\n"
@@ -4976,26 +4705,34 @@ msgid ""
 "    value.  If ARG is the null string each SIGNAL_SPEC is ignored by the\n"
 "    shell and by the commands it invokes.\n"
 "    \n"
-"    If a SIGNAL_SPEC is EXIT (0) ARG is executed on exit from the shell.  If\n"
-"    a SIGNAL_SPEC is DEBUG, ARG is executed before every simple command.  If\n"
-"    a SIGNAL_SPEC is RETURN, ARG is executed each time a shell function or a\n"
-"    script run by the . or source builtins finishes executing.  A SIGNAL_SPEC\n"
-"    of ERR means to execute ARG each time a command's failure would cause the\n"
+"    If a SIGNAL_SPEC is EXIT (0) ARG is executed on exit from the shell.  "
+"If\n"
+"    a SIGNAL_SPEC is DEBUG, ARG is executed before every simple command.  "
+"If\n"
+"    a SIGNAL_SPEC is RETURN, ARG is executed each time a shell function or "
+"a\n"
+"    script run by the . or source builtins finishes executing.  A "
+"SIGNAL_SPEC\n"
+"    of ERR means to execute ARG each time a command's failure would cause "
+"the\n"
 "    shell to exit when the -e option is enabled.\n"
 "    \n"
-"    If no arguments are supplied, trap prints the list of commands associated\n"
+"    If no arguments are supplied, trap prints the list of commands "
+"associated\n"
 "    with each signal.\n"
 "    \n"
 "    Options:\n"
 "      -l\tprint a list of signal names and their corresponding numbers\n"
 "      -p\tdisplay the trap commands associated with each SIGNAL_SPEC\n"
 "    \n"
-"    Each SIGNAL_SPEC is either a signal name in <signal.h> or a signal number.\n"
+"    Each SIGNAL_SPEC is either a signal name in <signal.h> or a signal "
+"number.\n"
 "    Signal names are case insensitive and the SIG prefix is optional.  A\n"
 "    signal may be sent to the shell with \"kill -signal $$\".\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success unless a SIGSPEC is invalid or an invalid option is given."
+"    Returns success unless a SIGSPEC is invalid or an invalid option is "
+"given."
 msgstr ""
 "Захват сигналов и других событий.\n"
 "    \n"
@@ -5003,16 +4740,22 @@ msgstr ""
 "    командный процессор получает сигналы или при других условиях.\n"
 "    \n"
 "    Аргумент — это команда, которая считывается и выполняется, когда\n"
-"    командный процессор получает указанные сигнал(ы).  Если аргумент отсутствует (и указан один сигнал)\n"
+"    командный процессор получает указанные сигнал(ы).  Если аргумент "
+"отсутствует (и указан один сигнал)\n"
 "    или указано «-», для всех указанных сигналов восстанавливаются\n"
-"    исходные значения.  Если аргумент — пустая строка, все указанные сигналы игнорируются\n"
+"    исходные значения.  Если аргумент — пустая строка, все указанные сигналы "
+"игнорируются\n"
 "    командным процессором и вызываемыми им командами.\n"
 "    \n"
-"    Если сигнал — EXIT (0), аргумент выполняется при выходе из командного процессора.  Если\n"
-"    сигнал — DEBUG, аргумент выполняется перед каждой простой командой.  Если\n"
+"    Если сигнал — EXIT (0), аргумент выполняется при выходе из командного "
+"процессора.  Если\n"
+"    сигнал — DEBUG, аргумент выполняется перед каждой простой командой.  "
+"Если\n"
 "    сигнал — RETURN, аргумент выполняется каждый раз, когда функция\n"
-"    или скрипт выполняется в . или исходные встроенные команды завершают свою работу.  Сигнал\n"
-"    ERR означает выполнение аргумента каждый раз, когда ошибка команды приведёт\n"
+"    или скрипт выполняется в . или исходные встроенные команды завершают "
+"свою работу.  Сигнал\n"
+"    ERR означает выполнение аргумента каждый раз, когда ошибка команды "
+"приведёт\n"
 "    к выходу из командного процессора, когда включён параметр -e.\n"
 "    \n"
 "    Если аргументы не указаны, trap выводит список команд, связанных\n"
@@ -5022,41 +4765,18 @@ msgstr ""
 "      -l\tпоказать названия сигналов и их номера\n"
 "      -p\tпоказать команды trap, связанные с каждым сигналом\n"
 "    \n"
-"    Идентификатор сигнала — это название сигнала в <signal.h> или номер сигнала.\n"
-"    Названия сигналов не зависят от регистра, а префикс SIG не является обязательным.   \n"
-"    Сигнал можно отправить в командный процессор командой «kill -signal $$».\n"
+"    Идентификатор сигнала — это название сигнала в <signal.h> или номер "
+"сигнала.\n"
+"    Названия сигналов не зависят от регистра, а префикс SIG не является "
+"обязательным.   \n"
+"    Сигнал можно отправить в командный процессор командой «kill -signal $"
+"$».\n"
 "    \n"
 "    Состояние выхода:\n"
 "    Возвращает успех, если был указан допустимый сигнал или параметр."
 
-#: builtins.c:1400
+#: builtins.c:1401
 #, fuzzy
-#| msgid ""
-#| "Display information about command type.\n"
-#| "    \n"
-#| "    For each NAME, indicate how it would be interpreted if used as a\n"
-#| "    command name.\n"
-#| "    \n"
-#| "    Options:\n"
-#| "      -a\tdisplay all locations containing an executable named NAME;\n"
-#| "    \tincludes aliases, builtins, and functions, if and only if\n"
-#| "    \tthe `-p' option is not also used\n"
-#| "      -f\tsuppress shell function lookup\n"
-#| "      -P\tforce a PATH search for each NAME, even if it is an alias,\n"
-#| "    \tbuiltin, or function, and returns the name of the disk file\n"
-#| "    \tthat would be executed\n"
-#| "      -p\treturns either the name of the disk file that would be executed,\n"
-#| "    \tor nothing if `type -t NAME' would not return `file'.\n"
-#| "      -t\toutput a single word which is one of `alias', `keyword',\n"
-#| "    \t`function', `builtin', `file' or `', if NAME is an alias, shell\n"
-#| "    \treserved word, shell function, shell builtin, disk file, or not\n"
-#| "    \tfound, respectively\n"
-#| "    \n"
-#| "    Arguments:\n"
-#| "      NAME\tCommand name to be interpreted.\n"
-#| "    \n"
-#| "    Exit Status:\n"
-#| "    Returns success if all of the NAMEs are found; fails if any are not found."
 msgid ""
 "Display information about command type.\n"
 "    \n"
@@ -5082,25 +4802,30 @@ msgid ""
 "      NAME\tCommand name to be interpreted.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success if all of the NAMEs are found; fails if any are not found."
+"    Returns success if all of the NAMEs are found; fails if any are not "
+"found."
 msgstr ""
 "Вывод информации о типе команды.\n"
 "    \n"
-"    Для каждого указанного имени показывает, как оно будет интерпретировано при\n"
+"    Для каждого указанного имени показывает, как оно будет интерпретировано "
+"при\n"
 "    использовании в качестве названия команды.\n"
 "    \n"
 "    Параметры:\n"
-"      -a\tпоказать все местоположения, где есть исполняемый файл с указанным именем,\n"
+"      -a\tпоказать все местоположения, где есть исполняемый файл с указанным "
+"именем,\n"
 "    \tвключая псевдонимы, встроенные команды и функции, а также при условии\n"
 "    \tчто не используется параметр «-p»\n"
 "      -f\tне искать функции командного процессора\n"
-"      -P\tпринудительно искать в $PATH все указанные имена, даже если это псевдоним,\n"
+"      -P\tпринудительно искать в $PATH все указанные имена, даже если это "
+"псевдоним,\n"
 "    \tвстроенная команда или функция, и возвращать название файла на диске,\n"
 "    \tкоторый будет запущен\n"
 "      -p\tвозвращает название файла на диске, который будет запущен,\n"
 "    \tили ничего, если «type -t имя» не возвращает «file».\n"
 "      -t\tвывести одно из слов «alias», «keyword»,\n"
-"    \t«function», «builtin», «file» или «», если указанное имя является, соответственно,\n"
+"    \t«function», «builtin», «file» или «», если указанное имя является, "
+"соответственно,\n"
 "    \tпсевдонимом, зарезервированным словом, функцией, встроенной командой\n"
 "    \tкомандного процессора, файлом на диске или имя не было найдено\n"
 "    \n"
@@ -5108,57 +4833,16 @@ msgstr ""
 "      ИМЯ\tназвание интерпретируемой команды\n"
 "    \n"
 "    Состояние выхода:\n"
-"    Возвращает успех, если все указанные имена были найдены, или ошибку в противном случае."
+"    Возвращает успех, если все указанные имена были найдены, или ошибку в "
+"противном случае."
 
-#: builtins.c:1431
+#: builtins.c:1432
 #, fuzzy
-#| msgid ""
-#| "Modify shell resource limits.\n"
-#| "    \n"
-#| "    Provides control over the resources available to the shell and processes\n"
-#| "    it creates, on systems that allow such control.\n"
-#| "    \n"
-#| "    Options:\n"
-#| "      -S\tuse the `soft' resource limit\n"
-#| "      -H\tuse the `hard' resource limit\n"
-#| "      -a\tall current limits are reported\n"
-#| "      -b\tthe socket buffer size\n"
-#| "      -c\tthe maximum size of core files created\n"
-#| "      -d\tthe maximum size of a process's data segment\n"
-#| "      -e\tthe maximum scheduling priority (`nice')\n"
-#| "      -f\tthe maximum size of files written by the shell and its children\n"
-#| "      -i\tthe maximum number of pending signals\n"
-#| "      -l\tthe maximum size a process may lock into memory\n"
-#| "      -m\tthe maximum resident set size\n"
-#| "      -n\tthe maximum number of open file descriptors\n"
-#| "      -p\tthe pipe buffer size\n"
-#| "      -q\tthe maximum number of bytes in POSIX message queues\n"
-#| "      -r\tthe maximum real-time scheduling priority\n"
-#| "      -s\tthe maximum stack size\n"
-#| "      -t\tthe maximum amount of cpu time in seconds\n"
-#| "      -u\tthe maximum number of user processes\n"
-#| "      -v\tthe size of virtual memory\n"
-#| "      -x\tthe maximum number of file locks\n"
-#| "      -T    the maximum number of threads\n"
-#| "    \n"
-#| "    Not all options are available on all platforms.\n"
-#| "    \n"
-#| "    If LIMIT is given, it is the new value of the specified resource; the\n"
-#| "    special LIMIT values `soft', `hard', and `unlimited' stand for the\n"
-#| "    current soft limit, the current hard limit, and no limit, respectively.\n"
-#| "    Otherwise, the current value of the specified resource is printed.  If\n"
-#| "    no option is given, then -f is assumed.\n"
-#| "    \n"
-#| "    Values are in 1024-byte increments, except for -t, which is in seconds,\n"
-#| "    -p, which is in increments of 512 bytes, and -u, which is an unscaled\n"
-#| "    number of processes.\n"
-#| "    \n"
-#| "    Exit Status:\n"
-#| "    Returns success unless an invalid option is supplied or an error occurs."
 msgid ""
 "Modify shell resource limits.\n"
 "    \n"
-"    Provides control over the resources available to the shell and processes\n"
+"    Provides control over the resources available to the shell and "
+"processes\n"
 "    it creates, on systems that allow such control.\n"
 "    \n"
 "    Options:\n"
@@ -5204,7 +4888,8 @@ msgid ""
 msgstr ""
 "Изменение ограничений ресурсов командного процессора.\n"
 "    \n"
-"    Позволяет контролировать ресурсы, доступные командному процессору и создаваемым\n"
+"    Позволяет контролировать ресурсы, доступные командному процессору и "
+"создаваемым\n"
 "    им  процессам, в системах, где возможен такой контроль.\n"
 "    \n"
 "    Параметры:\n"
@@ -5215,7 +4900,8 @@ msgstr ""
 "      -c\tмаксимальный размер создаваемых core-файлов\n"
 "      -d\tмаксимальный размер сегмента данных процесса\n"
 "      -e\tмаксимальный приоритет планирования («nice»)\n"
-"      -f\tмаксимальный размер файлов, записываемых командным процессором и его дочерними процессами\n"
+"      -f\tмаксимальный размер файлов, записываемых командным процессором и "
+"его дочерними процессами\n"
 "      -i\tмаксимальное число ожидающих сигналов\n"
 "      -l\tмаксимальный объём, который процесс может заблокировать в памяти\n"
 "      -m\tмаксимальный объём резидентной памяти\n"
@@ -5232,20 +4918,24 @@ msgstr ""
 "    \n"
 "    Не все параметры доступны на всех платформах.\n"
 "    \n"
-"    Если указано ограничение, оно является новым значением для указанного ресурса.\n"
+"    Если указано ограничение, оно является новым значением для указанного "
+"ресурса.\n"
 "    Специальные значения «soft», «hard» и «unlimited» означают,\n"
-"    соответственно, текущее мягкое ограничение, текущее жёсткое ограничение и отсутствие ограничения.\n"
+"    соответственно, текущее мягкое ограничение, текущее жёсткое ограничение "
+"и отсутствие ограничения.\n"
 "    В противном случае выводится текущее значение указанного ресурса.  Если\n"
 "    параметр не указан, подразумевается использование параметра -f.\n"
 "    \n"
-"    Значения задаются с шагом 1024 байт, кроме параметра -t с шагом в секундах,\n"
+"    Значения задаются с шагом 1024 байт, кроме параметра -t с шагом в "
+"секундах,\n"
 "    параметра -p с шагом 512 байт и параметра -u, представляющего\n"
 "    количество процессов.\n"
 "    \n"
 "    Состояние выхода:\n"
-"    Возвращает успех, если был указан допустимый параметр или не возникла ошибка."
+"    Возвращает успех, если был указан допустимый параметр или не возникла "
+"ошибка."
 
-#: builtins.c:1482
+#: builtins.c:1483
 msgid ""
 "Display or set file mode mask.\n"
 "    \n"
@@ -5264,52 +4954,46 @@ msgid ""
 msgstr ""
 "Отображение или указание маски режима для файлов.\n"
 "    \n"
-"    Задаёт маску РЕЖИМ для файлов, создаваемых пользователем.  Если РЕЖИМ не указан,\n"
+"    Задаёт маску РЕЖИМ для файлов, создаваемых пользователем.  Если РЕЖИМ не "
+"указан,\n"
 "    выводит текущее значение маски.\n"
 "    \n"
-"    Если РЕЖИМ начинается с цифры, он интерпретируется как восьмеричное число.\n"
-"    В противном случае он считается символьной строкой как для команды chmod(1).\n"
+"    Если РЕЖИМ начинается с цифры, он интерпретируется как восьмеричное "
+"число.\n"
+"    В противном случае он считается символьной строкой как для команды "
+"chmod(1).\n"
 "    \n"
 "    Параметры:\n"
-"      -p\tесли РЕЖИМ не указан, вывести маску, пригодную для повторного использования\n"
-"      -S\tвывести маску в символьном виде, в противном случае выводится восьмеричное число\n"
+"      -p\tесли РЕЖИМ не указан, вывести маску, пригодную для повторного "
+"использования\n"
+"      -S\tвывести маску в символьном виде, в противном случае выводится "
+"восьмеричное число\n"
 "    \n"
 "    Состояние выхода:\n"
 "    Возвращает успех, если был указан допустимый РЕЖИМ или параметр."
 
-#: builtins.c:1502
+#: builtins.c:1503
 #, fuzzy
-#| msgid ""
-#| "Wait for job completion and return exit status.\n"
-#| "    \n"
-#| "    Waits for each process identified by an ID, which may be a process ID or a\n"
-#| "    job specification, and reports its termination status.  If ID is not\n"
-#| "    given, waits for all currently active child processes, and the return\n"
-#| "    status is zero.  If ID is a a job specification, waits for all processes\n"
-#| "    in that job's pipeline.\n"
-#| "    \n"
-#| "    If the -n option is supplied, waits for the next job to terminate and\n"
-#| "    returns its exit status.\n"
-#| "    \n"
-#| "    Exit Status:\n"
-#| "    Returns the status of the last ID; fails if ID is invalid or an invalid\n"
-#| "    option is given."
 msgid ""
 "Wait for job completion and return exit status.\n"
 "    \n"
-"    Waits for each process identified by an ID, which may be a process ID or a\n"
+"    Waits for each process identified by an ID, which may be a process ID or "
+"a\n"
 "    job specification, and reports its termination status.  If ID is not\n"
 "    given, waits for all currently active child processes, and the return\n"
 "    status is zero.  If ID is a job specification, waits for all processes\n"
 "    in that job's pipeline.\n"
 "    \n"
-"    If the -n option is supplied, waits for a single job from the list of IDs,\n"
-"    or, if no IDs are supplied, for the next job to complete and returns its\n"
+"    If the -n option is supplied, waits for a single job from the list of "
+"IDs,\n"
+"    or, if no IDs are supplied, for the next job to complete and returns "
+"its\n"
 "    exit status.\n"
 "    \n"
 "    If the -p option is supplied, the process or job identifier of the job\n"
 "    for which the exit status is returned is assigned to the variable VAR\n"
-"    named by the option argument. The variable will be unset initially, before\n"
+"    named by the option argument. The variable will be unset initially, "
+"before\n"
 "    any assignment. This is useful only when the -n option is supplied.\n"
 "    \n"
 "    If the -f option is supplied, and job control is enabled, waits for the\n"
@@ -5323,9 +5007,11 @@ msgstr ""
 "Ожидание завершения задания и возврат состояния выхода.\n"
 "    \n"
 "    Ожидает завершения всех процессов, заданных идентификаторами\n"
-"    (идентификатор процесса или номер задания), и возвращает их состояние выхода.  Если идентификатор\n"
+"    (идентификатор процесса или номер задания), и возвращает их состояние "
+"выхода.  Если идентификатор\n"
 "    не указан, ожидает завершения всех активных дочерних процессов\n"
-"    и возвращает нулевое состояние выхода.  Если идентификатор не является номером задания, ожидает завершения\n"
+"    и возвращает нулевое состояние выхода.  Если идентификатор не является "
+"номером задания, ожидает завершения\n"
 "    всех процессов в конвейере данного задания.\n"
 "    \n"
 "    Если указан параметр -n, ожидает завершения следующего задания\n"
@@ -5335,29 +5021,33 @@ msgstr ""
 "    Возвращает состояние последнего идентификатора. Возвращает ошибку, если\n"
 "    указан недопустимый идентификатор или параметр."
 
-#: builtins.c:1533
+#: builtins.c:1534
 msgid ""
 "Wait for process completion and return exit status.\n"
 "    \n"
-"    Waits for each process specified by a PID and reports its termination status.\n"
+"    Waits for each process specified by a PID and reports its termination "
+"status.\n"
 "    If PID is not given, waits for all currently active child processes,\n"
 "    and the return status is zero.  PID must be a process ID.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns the status of the last PID; fails if PID is invalid or an invalid\n"
+"    Returns the status of the last PID; fails if PID is invalid or an "
+"invalid\n"
 "    option is given."
 msgstr ""
 "Ожидание завершения процесса и возврат состояния выхода.\n"
 "    \n"
-"    Ожидает завершения всех процессов, заданных идентификаторами (PID), и возвращает их состояние выхода.\n"
+"    Ожидает завершения всех процессов, заданных идентификаторами (PID), и "
+"возвращает их состояние выхода.\n"
 "    Если идентификатор процесса не указан, ожидает завершения всех активных\n"
-"    дочерних процессов и возвращает нулевое состояние выхода.  PID должен быть идентификатором процесса.\n"
+"    дочерних процессов и возвращает нулевое состояние выхода.  PID должен "
+"быть идентификатором процесса.\n"
 "    \n"
 "    Состояние выхода:\n"
 "    Возвращает состояние последнего идентификатора. Возвращает ошибку, если\n"
 "    указан недопустимый идентификатор или параметр."
 
-#: builtins.c:1548
+#: builtins.c:1549
 msgid ""
 "Execute commands for each member in a list.\n"
 "    \n"
@@ -5373,13 +5063,14 @@ msgstr ""
 "    \n"
 "    Цикл «for» выполняет последовательность команд для каждого элемента\n"
 "    списка.  Если операнд «in СЛОВА ...;» отсутствует, подразумевается\n"
-"    операнд «in \"$@\"».  Каждому элементу в списке СЛОВА присваивается ИМЯ и для него\n"
+"    операнд «in \"$@\"».  Каждому элементу в списке СЛОВА присваивается ИМЯ "
+"и для него\n"
 "    выполняются КОМАНДЫ.\n"
 "    \n"
 "    Состояние выхода:\n"
 "    Возвращает состояние последней выполненной команды."
 
-#: builtins.c:1562
+#: builtins.c:1563
 msgid ""
 "Arithmetic for loop.\n"
 "    \n"
@@ -5403,13 +5094,14 @@ msgstr ""
 "    \t\tКОМАНДЫ\n"
 "    \t\t(( ВЫРАЖ3 ))\n"
 "    \tdone\n"
-"    ВЫРАЖ1, ВЫРАЖ2 и ВЫРАЖ3 — это математические выражения.  Если любое из выражений\n"
+"    ВЫРАЖ1, ВЫРАЖ2 и ВЫРАЖ3 — это математические выражения.  Если любое из "
+"выражений\n"
 "    не указано, считается, что оно возвращает 1.\n"
 "    \n"
 "    Состояние выхода:\n"
 "    Возвращает состояние последней выполненной команды."
 
-#: builtins.c:1580
+#: builtins.c:1581
 msgid ""
 "Select words from a list and execute commands.\n"
 "    \n"
@@ -5432,20 +5124,26 @@ msgstr ""
 "    \n"
 "    СЛОВА разворачиваются, формируя список слов.   \n"
 "    Набор развёрнутых слов выводится в поток ошибок с номерами\n"
-"    в начале строк.  Если операнд «in СЛОВА ...;» отсутствует, подразумевается\n"
-"    операнд «in \"$@\"».  Затем выводится приглашение $PS3 и со стандартного ввода\n"
+"    в начале строк.  Если операнд «in СЛОВА ...;» отсутствует, "
+"подразумевается\n"
+"    операнд «in \"$@\"».  Затем выводится приглашение $PS3 и со стандартного "
+"ввода\n"
 "    считывается строка.  Если строка состоит из номера,\n"
 "    соответствующего одному из показанных слов, этому слову\n"
-"    присваивается указанное имя.  Если строка пустая, будут повторно показаны указанные слова\n"
-"    и приглашение.  Если прочитан символ конца файла, команда завершает свою работу.  Если прочитаны\n"
-"    любые другие значения, указанному имени присваивается пустое значение.  Прочитанная строка\n"
-"    сохраняется в переменную $REPLY.  Команды выполняются после каждой выборки,\n"
+"    присваивается указанное имя.  Если строка пустая, будут повторно "
+"показаны указанные слова\n"
+"    и приглашение.  Если прочитан символ конца файла, команда завершает свою "
+"работу.  Если прочитаны\n"
+"    любые другие значения, указанному имени присваивается пустое значение.  "
+"Прочитанная строка\n"
+"    сохраняется в переменную $REPLY.  Команды выполняются после каждой "
+"выборки,\n"
 "    пока не будет выполнена команда прерывания.\n"
 "    \n"
 "    Состояние выхода:\n"
 "    Возвращает состояние последней выполненной команды."
 
-#: builtins.c:1601
+#: builtins.c:1602
 msgid ""
 "Report time consumed by pipeline's execution.\n"
 "    \n"
@@ -5462,18 +5160,20 @@ msgid ""
 msgstr ""
 "Вывод времени, потраченного на выполнение конвейера.\n"
 "    \n"
-"    Выполняет конвейер и выводит значения реального времени, пользовательского времени\n"
+"    Выполняет конвейер и выводит значения реального времени, "
+"пользовательского времени\n"
 "    и системного времени ЦП, потраченного на выполнения конвейера.\n"
 "    \n"
 "    Параметры:\n"
 "      -p\tпоказать значения времени в формате Posix\n"
 "    \n"
-"    Для форматирования выходных данных используется значение переменной $TIMEFORMAT.\n"
+"    Для форматирования выходных данных используется значение переменной "
+"$TIMEFORMAT.\n"
 "    \n"
 "    Состояние выхода:\n"
 "    Возвращаемое состояние соответствует состоянию выхода конвейера."
 
-#: builtins.c:1618
+#: builtins.c:1619
 msgid ""
 "Execute commands based on pattern matching.\n"
 "    \n"
@@ -5491,16 +5191,21 @@ msgstr ""
 "    Состояние выхода:\n"
 "    Возвращает состояние последней выполненной команды."
 
-#: builtins.c:1630
+#: builtins.c:1631
 msgid ""
 "Execute commands based on conditional.\n"
 "    \n"
-"    The `if COMMANDS' list is executed.  If its exit status is zero, then the\n"
-"    `then COMMANDS' list is executed.  Otherwise, each `elif COMMANDS' list is\n"
+"    The `if COMMANDS' list is executed.  If its exit status is zero, then "
+"the\n"
+"    `then COMMANDS' list is executed.  Otherwise, each `elif COMMANDS' list "
+"is\n"
 "    executed in turn, and if its exit status is zero, the corresponding\n"
-"    `then COMMANDS' list is executed and the if command completes.  Otherwise,\n"
-"    the `else COMMANDS' list is executed, if present.  The exit status of the\n"
-"    entire construct is the exit status of the last command executed, or zero\n"
+"    `then COMMANDS' list is executed and the if command completes.  "
+"Otherwise,\n"
+"    the `else COMMANDS' list is executed, if present.  The exit status of "
+"the\n"
+"    entire construct is the exit status of the last command executed, or "
+"zero\n"
 "    if no condition tested true.\n"
 "    \n"
 "    Exit Status:\n"
@@ -5508,23 +5213,30 @@ msgid ""
 msgstr ""
 "Выполнение команд в зависимости от условий.\n"
 "    \n"
-"    Сначала выполняется список «if КОМАНДЫ».  Если состояние выхода нулевое,\n"
-"    выполняется список «then КОМАНДЫ».  В противном случае выполняется по очереди\n"
+"    Сначала выполняется список «if КОМАНДЫ».  Если состояние выхода "
+"нулевое,\n"
+"    выполняется список «then КОМАНДЫ».  В противном случае выполняется по "
+"очереди\n"
 "    все списки «elif КОМАНДЫ», и если их состояние выхода будет нулевым,\n"
-"    выполнится список «then КОМАНДЫ», и команда if завершится.  В противном случае\n"
-"    выполнится список «else КОМАНДЫ», если он указан.  Состояние выхода всей\n"
-"    конструкции соответствует состоянию выхода последней выполненной команды или будет нулевым,\n"
+"    выполнится список «then КОМАНДЫ», и команда if завершится.  В противном "
+"случае\n"
+"    выполнится список «else КОМАНДЫ», если он указан.  Состояние выхода "
+"всей\n"
+"    конструкции соответствует состоянию выхода последней выполненной команды "
+"или будет нулевым,\n"
 "    если ни одна проверка условия не возвратила истину.\n"
 "    \n"
 "    Состояние выхода:\n"
 "    Возвращает состояние последней выполненной команды."
 
-#: builtins.c:1647
+#: builtins.c:1648
+#, fuzzy
 msgid ""
 "Execute commands as long as a test succeeds.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `while' COMMANDS has an exit status of zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS "
+"has\n"
+"    an exit status of zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
@@ -5537,12 +5249,14 @@ msgstr ""
 "    Состояние выхода:\n"
 "    Возвращает состояние последней выполненной команды."
 
-#: builtins.c:1659
+#: builtins.c:1660
+#, fuzzy
 msgid ""
 "Execute commands as long as a test does not succeed.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `until' COMMANDS has an exit status which is not zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS "
+"has\n"
+"    an exit status which is not zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
@@ -5555,18 +5269,8 @@ msgstr ""
 "    Состояние выхода:\n"
 "    Возвращает состояние последней выполненной команды."
 
-#: builtins.c:1671
+#: builtins.c:1672
 #, fuzzy
-#| msgid ""
-#| "Create a coprocess named NAME.\n"
-#| "    \n"
-#| "    Execute COMMAND asynchronously, with the standard output and standard\n"
-#| "    input of the command connected via a pipe to file descriptors assigned\n"
-#| "    to indices 0 and 1 of an array variable NAME in the executing shell.\n"
-#| "    The default NAME is \"COPROC\".\n"
-#| "    \n"
-#| "    Exit Status:\n"
-#| "    Returns the exit status of COMMAND."
 msgid ""
 "Create a coprocess named NAME.\n"
 "    \n"
@@ -5581,19 +5285,22 @@ msgstr ""
 "Создание дополнительного процесса с указанным именем.\n"
 "    \n"
 "    Выполняет команду асинхронно, когда стандартный вывод и стандартный\n"
-"    вход команды подключены через конвейер к дескрипторам файлов, которые назначены\n"
-"    указателям 0 и 1 массива переменных ИМЯ в активном командном процессоре.\n"
+"    вход команды подключены через конвейер к дескрипторам файлов, которые "
+"назначены\n"
+"    указателям 0 и 1 массива переменных ИМЯ в активном командном "
+"процессоре.\n"
 "    Имя по умолчанию — «COPROC».\n"
 "    \n"
 "    Состояние выхода:\n"
 "    Возвращает состояние выхода команды."
 
-#: builtins.c:1685
+#: builtins.c:1686
 msgid ""
 "Define shell function.\n"
 "    \n"
 "    Create a shell function named NAME.  When invoked as a simple command,\n"
-"    NAME runs COMMANDs in the calling shell's context.  When NAME is invoked,\n"
+"    NAME runs COMMANDs in the calling shell's context.  When NAME is "
+"invoked,\n"
 "    the arguments are passed to the function as $1...$n, and the function's\n"
 "    name is in $FUNCNAME.\n"
 "    \n"
@@ -5602,15 +5309,17 @@ msgid ""
 msgstr ""
 "Определение функции командного процессора.\n"
 "    \n"
-"    Создаёт функцию командного процессора с указанным именем.  При запуске в качестве простой команды\n"
-"    ИМЯ выполняет КОМАНДЫ в контексте вызывающего их командного процессора.  При вызове ИМЕНИ\n"
+"    Создаёт функцию командного процессора с указанным именем.  При запуске в "
+"качестве простой команды\n"
+"    ИМЯ выполняет КОМАНДЫ в контексте вызывающего их командного процессора.  "
+"При вызове ИМЕНИ\n"
 "    аргументы передаются в функцию как $1...$n, а функция получает\n"
 "    название $FUNCNAME.\n"
 "    \n"
 "    Состояние выхода:\n"
 "    Возвращает успех, если переменная ИМЯ доступно для записи."
 
-#: builtins.c:1699
+#: builtins.c:1700
 msgid ""
 "Group commands as a unit.\n"
 "    \n"
@@ -5622,13 +5331,14 @@ msgid ""
 msgstr ""
 "Группировка команд.\n"
 "    \n"
-"    Выполняет набор команд, объединённых в группу.  Это единственный способ перенаправления\n"
+"    Выполняет набор команд, объединённых в группу.  Это единственный способ "
+"перенаправления\n"
 "    всего набора команд.\n"
 "    \n"
 "    Состояние выхода:\n"
 "    Возвращает состояние последней выполненной команды."
 
-#: builtins.c:1711
+#: builtins.c:1712
 msgid ""
 "Resume job in foreground.\n"
 "    \n"
@@ -5644,24 +5354,18 @@ msgstr ""
 "Возобновление работы задания в интерактивном режиме.\n"
 "    \n"
 "    Аналогично аргументу JOB_SPEC для команды «fg».  Возобновляет\n"
-"    работу остановленного или фонового задания.  Через JOB_SPEC можно задать название\n"
-"    или номер задания.  Если после номера задания указать «&», задание будет переведено\n"
+"    работу остановленного или фонового задания.  Через JOB_SPEC можно задать "
+"название\n"
+"    или номер задания.  Если после номера задания указать «&», задание будет "
+"переведено\n"
 "    в фоновый режим, как если бы идентификатор задания был указан как\n"
 "    аргумент для команды «bg».\n"
 "    \n"
 "    Состояние выхода:\n"
 "    Возвращает состояние возобновлённого задания."
 
-#: builtins.c:1726
+#: builtins.c:1727
 #, fuzzy
-#| msgid ""
-#| "Evaluate arithmetic expression.\n"
-#| "    \n"
-#| "    The EXPRESSION is evaluated according to the rules for arithmetic\n"
-#| "    evaluation.  Equivalent to \"let EXPRESSION\".\n"
-#| "    \n"
-#| "    Exit Status:\n"
-#| "    Returns 1 if EXPRESSION evaluates to 0; returns 0 otherwise."
 msgid ""
 "Evaluate arithmetic expression.\n"
 "    \n"
@@ -5679,13 +5383,16 @@ msgstr ""
 "    Состояние выхода:\n"
 "    Возвращает 1, если выражение равно 0, в противном случае возвращает 0."
 
-#: builtins.c:1738
+#: builtins.c:1739
 msgid ""
 "Execute conditional command.\n"
 "    \n"
-"    Returns a status of 0 or 1 depending on the evaluation of the conditional\n"
-"    expression EXPRESSION.  Expressions are composed of the same primaries used\n"
-"    by the `test' builtin, and may be combined using the following operators:\n"
+"    Returns a status of 0 or 1 depending on the evaluation of the "
+"conditional\n"
+"    expression EXPRESSION.  Expressions are composed of the same primaries "
+"used\n"
+"    by the `test' builtin, and may be combined using the following "
+"operators:\n"
 "    \n"
 "      ( EXPRESSION )\tReturns the value of EXPRESSION\n"
 "      ! EXPRESSION\t\tTrue if EXPRESSION is false; else false\n"
@@ -5706,16 +5413,22 @@ msgstr ""
 "Выполнение условной команды.\n"
 "    \n"
 "    Возвращает состояние 0 или 1 в зависимости от результата расчёта\n"
-"    условного выражения.  Выражения составляются из тех же примитивов, которые используются\n"
-"    во встроенной команде «test». Их можно объединить с помощью следующих операторов:\n"
+"    условного выражения.  Выражения составляются из тех же примитивов, "
+"которые используются\n"
+"    во встроенной команде «test». Их можно объединить с помощью следующих "
+"операторов:\n"
 "    \n"
 "      ( выражение )\tВозвращает значение выражения\n"
-"      ! выражение\tВозвращает истину, если выражение ложно, в противном случае возвращает ложь\n"
-"      ВЫРАЖ1 && ВЫРАЖ2\tВозвращает истину, если оба выражения истинны, в противном случае возвращает ложь\n"
-"      ВЫРАЖ1 || ВЫРАЖ2\tВозвращает истину, если хотя бы одно из выражений истинно, в противном случае возвращает ложь\n"
+"      ! выражение\tВозвращает истину, если выражение ложно, в противном "
+"случае возвращает ложь\n"
+"      ВЫРАЖ1 && ВЫРАЖ2\tВозвращает истину, если оба выражения истинны, в "
+"противном случае возвращает ложь\n"
+"      ВЫРАЖ1 || ВЫРАЖ2\tВозвращает истину, если хотя бы одно из выражений "
+"истинно, в противном случае возвращает ложь\n"
 "    \n"
 "    Если используются операторы «==» и «!=», строка справа от\n"
-"    оператора используется как шаблон, и выполняется сопоставление по шаблону.\n"
+"    оператора используется как шаблон, и выполняется сопоставление по "
+"шаблону.\n"
 "    Если используется оператор «=~», строка справа от оператора\n"
 "    оценивается как регулярное выражение.\n"
 "    \n"
@@ -5725,7 +5438,7 @@ msgstr ""
 "    Состояние выхода:\n"
 "    0 или 1 в зависимости от значения выражения."
 
-#: builtins.c:1764
+#: builtins.c:1765
 msgid ""
 "Common shell variable names and usage.\n"
 "    \n"
@@ -5783,7 +5496,8 @@ msgstr ""
 "    BASH_VERSION\tНомер версии bash.\n"
 "    CDPATH\t\tСписок каталогов, разделённых двоеточиями, для поиска\n"
 "    \t\tв них каталогов, указанных как аргументы для «cd».\n"
-"    GLOBIGNORE\tСписок шаблонов, разделённых двоеточиями и описывающих имена файлов,\n"
+"    GLOBIGNORE\tСписок шаблонов, разделённых двоеточиями и описывающих имена "
+"файлов,\n"
 "    \t\tкоторые будут игнорироваться при развёртывании пути.\n"
 "    HISTFILE\t\tИмя файла, в котором хранится журнал команд.\n"
 "    HISTFILESIZE\tЧисло строк в файле журнала.\n"
@@ -5792,11 +5506,15 @@ msgstr ""
 "    HOME\t\tПолный путь к вашему домашнему каталогу.\n"
 "    HOSTNAME\t\tИмя данной системы.\n"
 "    HOSTTYPE\t\tТип процессора, на котором работает данная версия bash.\n"
-"    IGNOREEOF\tУправляет действием командного процессора при получении символа\n"
-"    \t\tсимвола конца файла в качестве единственных входных данных.  Если задано, тогда значение\n"
+"    IGNOREEOF\tУправляет действием командного процессора при получении "
+"символа\n"
+"    \t\tсимвола конца файла в качестве единственных входных данных.  Если "
+"задано, тогда значение\n"
 "    \t\tявляется числом символов EOF, которые могут быть\n"
-"    \t\tпрочитаны подряд в пустой строке, после чего командный процессор будет закрыт\n"
-"    \t\t(по умолчанию — 10).  Если не задано, EOF означает конец входных данных.\n"
+"    \t\tпрочитаны подряд в пустой строке, после чего командный процессор "
+"будет закрыт\n"
+"    \t\t(по умолчанию — 10).  Если не задано, EOF означает конец входных "
+"данных.\n"
 "    MACHTYPE\t\tСтрока с описанием текущей системы, в которой запущен bash.\n"
 "    MAILCHECK\tКак часто (в секундах) bash проверяет наличие новой почты.\n"
 "    MAILPATH\t\tСписок имён файлов, разделённых двоеточиями, в которых bash\n"
@@ -5809,13 +5527,15 @@ msgstr ""
 "    PS1\t\tОсновная строка приглашения.\n"
 "    PS2\t\tДополнительная строка приглашения.\n"
 "    PWD\t\tПолный путь до текущего каталога.\n"
-"    SHELLOPTS\tСписок включённых параметров командного процессора, разделённых двоеточиями.\n"
+"    SHELLOPTS\tСписок включённых параметров командного процессора, "
+"разделённых двоеточиями.\n"
 "    TERM\t\tНазвание текущего типа терминала.\n"
 "    TIMEFORMAT\tФормат вывода данных о времени, показываемых\n"
 "    \t\tкомандой time.\n"
 "    auto_resume\tНепустое значение означает слово в строке запуска команды,\n"
 "    \t\tкоторое сначала ищется в списке\n"
-"    \t\tостановленных заданий.  Если команда найдена, задание переводится в интерактивный режим.\n"
+"    \t\tостановленных заданий.  Если команда найдена, задание переводится в "
+"интерактивный режим.\n"
 "    \t\tЗначение «exact» означает, что слово команды должно\n"
 "    \t\tточно совпадать с командой в списке остановленных заданий.   \n"
 "    \t\tЗначение «substring» означает, что слово команды\n"
@@ -5826,39 +5546,12 @@ msgstr ""
 "    \t\tподстановку журнала. Обычно это «!».  Второй символ\n"
 "    \t\tозначает «быструю подстановку». Обычно это «^».   \n"
 "    \t\tТретий символ означает примечание журнала. Обычно это «#».\n"
-"    HISTIGNORE\tСписок шаблонов, разделённых двоеточиями и описывающих команды,\n"
+"    HISTIGNORE\tСписок шаблонов, разделённых двоеточиями и описывающих "
+"команды,\n"
 "    \t\tкоторые должны быть сохранены в журнале.\n"
 
-#: builtins.c:1821
+#: builtins.c:1822
 #, fuzzy
-#| msgid ""
-#| "Add directories to stack.\n"
-#| "    \n"
-#| "    Adds a directory to the top of the directory stack, or rotates\n"
-#| "    the stack, making the new top of the stack the current working\n"
-#| "    directory.  With no arguments, exchanges the top two directories.\n"
-#| "    \n"
-#| "    Options:\n"
-#| "      -n\tSuppresses the normal change of directory when adding\n"
-#| "    \tdirectories to the stack, so only the stack is manipulated.\n"
-#| "    \n"
-#| "    Arguments:\n"
-#| "      +N\tRotates the stack so that the Nth directory (counting\n"
-#| "    \tfrom the left of the list shown by `dirs', starting with\n"
-#| "    \tzero) is at the top.\n"
-#| "    \n"
-#| "      -N\tRotates the stack so that the Nth directory (counting\n"
-#| "    \tfrom the right of the list shown by `dirs', starting with\n"
-#| "    \tzero) is at the top.\n"
-#| "    \n"
-#| "      dir\tAdds DIR to the directory stack at the top, making it the\n"
-#| "    \tnew current working directory.\n"
-#| "    \n"
-#| "    The `dirs' builtin displays the directory stack.\n"
-#| "    \n"
-#| "    Exit Status:\n"
-#| "    Returns success unless an invalid argument is supplied or the directory\n"
-#| "    change fails."
 msgid ""
 "Add directories to stack.\n"
 "    \n"
@@ -5892,7 +5585,8 @@ msgstr ""
 "    \n"
 "    Добавляет каталог в начало стека каталогов или выполняет\n"
 "    ротацию стека, помещая в начало стека текущий рабочий\n"
-"    каталог.  Если аргументы не указаны, меняет местами два первых каталога.\n"
+"    каталог.  Если аргументы не указаны, меняет местами два первых "
+"каталога.\n"
 "    \n"
 "    Параметры:\n"
 "      -n\tпредотвращает обычное изменение каталога при добавлении\n"
@@ -5916,32 +5610,8 @@ msgstr ""
 "    Возвращает успех, если был указан допустимый параметр или удалось\n"
 "    перейти в каталог."
 
-#: builtins.c:1855
+#: builtins.c:1856
 #, fuzzy
-#| msgid ""
-#| "Remove directories from stack.\n"
-#| "    \n"
-#| "    Removes entries from the directory stack.  With no arguments, removes\n"
-#| "    the top directory from the stack, and changes to the new top directory.\n"
-#| "    \n"
-#| "    Options:\n"
-#| "      -n\tSuppresses the normal change of directory when removing\n"
-#| "    \tdirectories from the stack, so only the stack is manipulated.\n"
-#| "    \n"
-#| "    Arguments:\n"
-#| "      +N\tRemoves the Nth entry counting from the left of the list\n"
-#| "    \tshown by `dirs', starting with zero.  For example: `popd +0'\n"
-#| "    \tremoves the first directory, `popd +1' the second.\n"
-#| "    \n"
-#| "      -N\tRemoves the Nth entry counting from the right of the list\n"
-#| "    \tshown by `dirs', starting with zero.  For example: `popd -0'\n"
-#| "    \tremoves the last directory, `popd -1' the next to last.\n"
-#| "    \n"
-#| "    The `dirs' builtin displays the directory stack.\n"
-#| "    \n"
-#| "    Exit Status:\n"
-#| "    Returns success unless an invalid argument is supplied or the directory\n"
-#| "    change fails."
 msgid ""
 "Remove directories from stack.\n"
 "    \n"
@@ -5991,32 +5661,8 @@ msgstr ""
 "    Возвращает успех, если был указан допустимый параметр или удалось\n"
 "    перейти в каталог."
 
-#: builtins.c:1885
+#: builtins.c:1886
 #, fuzzy
-#| msgid ""
-#| "Display directory stack.\n"
-#| "    \n"
-#| "    Display the list of currently remembered directories.  Directories\n"
-#| "    find their way onto the list with the `pushd' command; you can get\n"
-#| "    back up through the list with the `popd' command.\n"
-#| "    \n"
-#| "    Options:\n"
-#| "      -c\tclear the directory stack by deleting all of the elements\n"
-#| "      -l\tdo not print tilde-prefixed versions of directories relative\n"
-#| "    \tto your home directory\n"
-#| "      -p\tprint the directory stack with one entry per line\n"
-#| "      -v\tprint the directory stack with one entry per line prefixed\n"
-#| "    \twith its position in the stack\n"
-#| "    \n"
-#| "    Arguments:\n"
-#| "      +N\tDisplays the Nth entry counting from the left of the list shown by\n"
-#| "    \tdirs when invoked without options, starting with zero.\n"
-#| "    \n"
-#| "      -N\tDisplays the Nth entry counting from the right of the list shown by\n"
-#| "    \tdirs when invoked without options, starting with zero.\n"
-#| "    \n"
-#| "    Exit Status:\n"
-#| "    Returns success unless an invalid option is supplied or an error occurs."
 msgid ""
 "Display directory stack.\n"
 "    \n"
@@ -6066,27 +5712,11 @@ msgstr ""
 "    \tпоказанного при вызове без параметров, начиная с нуля.\n"
 "    \n"
 "    Состояние выхода:\n"
-"    Возвращает успех, если был указан допустимый параметр или не возникла ошибка."
+"    Возвращает успех, если был указан допустимый параметр или не возникла "
+"ошибка."
 
-#: builtins.c:1916
+#: builtins.c:1917
 #, fuzzy
-#| msgid ""
-#| "Set and unset shell options.\n"
-#| "    \n"
-#| "    Change the setting of each shell option OPTNAME.  Without any option\n"
-#| "    arguments, list all shell options with an indication of whether or not each\n"
-#| "    is set.\n"
-#| "    \n"
-#| "    Options:\n"
-#| "      -o\trestrict OPTNAMEs to those defined for use with `set -o'\n"
-#| "      -p\tprint each shell option with an indication of its status\n"
-#| "      -q\tsuppress output\n"
-#| "      -s\tenable (set) each OPTNAME\n"
-#| "      -u\tdisable (unset) each OPTNAME\n"
-#| "    \n"
-#| "    Exit Status:\n"
-#| "    Returns success if OPTNAME is enabled; fails if an invalid option is\n"
-#| "    given or OPTNAME is disabled."
 msgid ""
 "Set and unset shell options.\n"
 "    \n"
@@ -6107,8 +5737,10 @@ msgid ""
 msgstr ""
 "Установка и удаление параметров командного процессора.\n"
 "    \n"
-"    Изменяет настройки указанных параметров командного процессора.  Если не указать\n"
-"    аргумент с параметром, выводит все параметры командного процессора, показывая\n"
+"    Изменяет настройки указанных параметров командного процессора.  Если не "
+"указать\n"
+"    аргумент с параметром, выводит все параметры командного процессора, "
+"показывая\n"
 "    какой из них установлен, а какой нет.\n"
 "    \n"
 "    Параметры:\n"
@@ -6122,37 +5754,8 @@ msgstr ""
 "    Возвращает успех, если указанный параметр включён. Возвращает ошибку,\n"
 "    если был указан недопустимый параметр или параметр отключён."
 
-#: builtins.c:1937
+#: builtins.c:1938
 #, fuzzy
-#| msgid ""
-#| "Formats and prints ARGUMENTS under control of the FORMAT.\n"
-#| "    \n"
-#| "    Options:\n"
-#| "      -v var\tassign the output to shell variable VAR rather than\n"
-#| "    \t\tdisplay it on the standard output\n"
-#| "    \n"
-#| "    FORMAT is a character string which contains three types of objects: plain\n"
-#| "    characters, which are simply copied to standard output; character escape\n"
-#| "    sequences, which are converted and copied to the standard output; and\n"
-#| "    format specifications, each of which causes printing of the next successive\n"
-#| "    argument.\n"
-#| "    \n"
-#| "    In addition to the standard format specifications described in printf(1),\n"
-#| "    printf interprets:\n"
-#| "    \n"
-#| "      %b\texpand backslash escape sequences in the corresponding argument\n"
-#| "      %q\tquote the argument in a way that can be reused as shell input\n"
-#| "      %(fmt)T output the date-time string resulting from using FMT as a format\n"
-#| "            string for strftime(3)\n"
-#| "    \n"
-#| "    The format is re-used as necessary to consume all of the arguments.  If\n"
-#| "    there are fewer arguments than the format requires,  extra format\n"
-#| "    specifications behave as if a zero value or null string, as appropriate,\n"
-#| "    had been supplied.\n"
-#| "    \n"
-#| "    Exit Status:\n"
-#| "    Returns success unless an invalid option is given or a write or assignment\n"
-#| "    error occurs."
 msgid ""
 "Formats and prints ARGUMENTS under control of the FORMAT.\n"
 "    \n"
@@ -6160,27 +5763,36 @@ msgid ""
 "      -v var\tassign the output to shell variable VAR rather than\n"
 "    \t\tdisplay it on the standard output\n"
 "    \n"
-"    FORMAT is a character string which contains three types of objects: plain\n"
-"    characters, which are simply copied to standard output; character escape\n"
+"    FORMAT is a character string which contains three types of objects: "
+"plain\n"
+"    characters, which are simply copied to standard output; character "
+"escape\n"
 "    sequences, which are converted and copied to the standard output; and\n"
-"    format specifications, each of which causes printing of the next successive\n"
+"    format specifications, each of which causes printing of the next "
+"successive\n"
 "    argument.\n"
 "    \n"
-"    In addition to the standard format specifications described in printf(1),\n"
+"    In addition to the standard format specifications described in "
+"printf(1),\n"
 "    printf interprets:\n"
 "    \n"
 "      %b\texpand backslash escape sequences in the corresponding argument\n"
 "      %q\tquote the argument in a way that can be reused as shell input\n"
-"      %(fmt)T\toutput the date-time string resulting from using FMT as a format\n"
+"      %Q\tlike %q, but apply any precision to the unquoted argument before\n"
+"    \t\tquoting\n"
+"      %(fmt)T\toutput the date-time string resulting from using FMT as a "
+"format\n"
 "    \t        string for strftime(3)\n"
 "    \n"
 "    The format is re-used as necessary to consume all of the arguments.  If\n"
 "    there are fewer arguments than the format requires,  extra format\n"
-"    specifications behave as if a zero value or null string, as appropriate,\n"
+"    specifications behave as if a zero value or null string, as "
+"appropriate,\n"
 "    had been supplied.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success unless an invalid option is given or a write or assignment\n"
+"    Returns success unless an invalid option is given or a write or "
+"assignment\n"
 "    error occurs."
 msgstr ""
 "Форматирует и выводит аргументы согласно указанному формату.\n"
@@ -6191,56 +5803,43 @@ msgstr ""
 "    \n"
 "    ФОРМАТ — это символьная строка, содержащая три типа объектов: простые\n"
 "    символы, которые копируются на стандартный вывод, экранирующие\n"
-"    последовательности, которые преобразовываются и копируются на стандартный\n"
+"    последовательности, которые преобразовываются и копируются на "
+"стандартный\n"
 "    вывод, и спецификации, которые активируют вывод следующего успешного\n"
 "    аргумента.\n"
 "    \n"
-"    В дополнение к стандартным спецификациям формата, описанным в printf(1),\n"
+"    В дополнение к стандартным спецификациям формата, описанным в "
+"printf(1),\n"
 "    printf интерпретирует:\n"
 "    \n"
-"      %b\tразвёртывание экранирующих последовательностей с обратной косой чертой в соответствующий аргумент;\n"
-"      %q\tзаключение аргумента в кавычки, чтобы его можно было повторно использовать в качестве входных данных для командного процессора;\n"
-"      %(fmt)T вывод строки дата-время, полученной после использования FMT в качестве\n"
+"      %b\tразвёртывание экранирующих последовательностей с обратной косой "
+"чертой в соответствующий аргумент;\n"
+"      %q\tзаключение аргумента в кавычки, чтобы его можно было повторно "
+"использовать в качестве входных данных для командного процессора;\n"
+"      %(fmt)T вывод строки дата-время, полученной после использования FMT в "
+"качестве\n"
 "            строки форматирования для strftime(3)\n"
 "    \n"
-"    Если необходимо задействовать все аргументы, формат используется повторно.  Если\n"
+"    Если необходимо задействовать все аргументы, формат используется "
+"повторно.  Если\n"
 "    аргументов меньше, чем требуется для форматирования, дополнительные\n"
 "    спецификации форматирования интерпретируются как содержащие нулевое\n"
 "    или пустое значение.\n"
 "    \n"
 "    Состояние выхода:\n"
-"    Возвращает успех, если был указан допустимый параметр или не возникла ошибка\n"
+"    Возвращает успех, если был указан допустимый параметр или не возникла "
+"ошибка\n"
 "    записи или присвоения."
 
-#: builtins.c:1971
+#: builtins.c:1974
 #, fuzzy
-#| msgid ""
-#| "Specify how arguments are to be completed by Readline.\n"
-#| "    \n"
-#| "    For each NAME, specify how arguments are to be completed.  If no options\n"
-#| "    are supplied, existing completion specifications are printed in a way that\n"
-#| "    allows them to be reused as input.\n"
-#| "    \n"
-#| "    Options:\n"
-#| "      -p\tprint existing completion specifications in a reusable format\n"
-#| "      -r\tremove a completion specification for each NAME, or, if no\n"
-#| "    \tNAMEs are supplied, all completion specifications\n"
-#| "      -D\tapply the completions and actions as the default for commands\n"
-#| "    \twithout any specific completion defined\n"
-#| "      -E\tapply the completions and actions to \"empty\" commands --\n"
-#| "    \tcompletion attempted on a blank line\n"
-#| "    \n"
-#| "    When completion is attempted, the actions are applied in the order the\n"
-#| "    uppercase-letter options are listed above.  The -D option takes\n"
-#| "    precedence over -E.\n"
-#| "    \n"
-#| "    Exit Status:\n"
-#| "    Returns success unless an invalid option is supplied or an error occurs."
 msgid ""
 "Specify how arguments are to be completed by Readline.\n"
 "    \n"
-"    For each NAME, specify how arguments are to be completed.  If no options\n"
-"    are supplied, existing completion specifications are printed in a way that\n"
+"    For each NAME, specify how arguments are to be completed.  If no "
+"options\n"
+"    are supplied, existing completion specifications are printed in a way "
+"that\n"
 "    allows them to be reused as input.\n"
 "    \n"
 "    Options:\n"
@@ -6255,20 +5854,24 @@ msgid ""
 "    \t\tcommand) word\n"
 "    \n"
 "    When completion is attempted, the actions are applied in the order the\n"
-"    uppercase-letter options are listed above. If multiple options are supplied,\n"
-"    the -D option takes precedence over -E, and both take precedence over -I.\n"
+"    uppercase-letter options are listed above. If multiple options are "
+"supplied,\n"
+"    the -D option takes precedence over -E, and both take precedence over -"
+"I.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns success unless an invalid option is supplied or an error occurs."
 msgstr ""
 "Определение количества аргументов, завершаемых функцией readline.\n"
 "    \n"
-"    Для каждого имени нужно указать количество завершаемых аргументов.  Если параметры\n"
+"    Для каждого имени нужно указать количество завершаемых аргументов.  Если "
+"параметры\n"
 "    не указаны, выводятся существующие спецификации завершения формате\n"
 "    для повторного использования.\n"
 "    \n"
 "    Параметры:\n"
-"      -p\tвывести существующие спецификации завершения в формате для повторного использования\n"
+"      -p\tвывести существующие спецификации завершения в формате для "
+"повторного использования\n"
 "      -r\tудалить спецификации завершения для каждого имени или,\n"
 "    \tесли имена не указаны, все спецификации\n"
 "      -D\tприменить завершения и действия как стандартные для команд,\n"
@@ -6281,14 +5884,16 @@ msgstr ""
 "    высокий приоритет, чем -E.\n"
 "    \n"
 "    Состояние выхода:\n"
-"    Возвращает успех, если был указан допустимый параметр или не возникла ошибка."
+"    Возвращает успех, если был указан допустимый параметр или не возникла "
+"ошибка."
 
-#: builtins.c:2001
+#: builtins.c:2004
 msgid ""
 "Display possible completions depending on the options.\n"
 "    \n"
 "    Intended to be used from within a shell function generating possible\n"
-"    completions.  If the optional WORD argument is supplied, matches against\n"
+"    completions.  If the optional WORD argument is supplied, matches "
+"against\n"
 "    WORD are generated.\n"
 "    \n"
 "    Exit Status:\n"
@@ -6297,45 +5902,25 @@ msgstr ""
 "Вывод возможных завершений в зависимости от параметров.\n"
 "    \n"
 "    compgen предназначен для использования в функциях bash, генерирующих\n"
-"    возможные завершения.  Если указан необязательный аргумент слово, выполняет\n"
+"    возможные завершения.  Если указан необязательный аргумент слово, "
+"выполняет\n"
 "    сопоставление со сгенерированным словом.\n"
 "    \n"
 "    Состояние выхода:\n"
-"    Возвращает успех, если был указан допустимый параметр или не возникла ошибка."
+"    Возвращает успех, если был указан допустимый параметр или не возникла "
+"ошибка."
 
-#: builtins.c:2016
+#: builtins.c:2019
 #, fuzzy
-#| msgid ""
-#| "Modify or display completion options.\n"
-#| "    \n"
-#| "    Modify the completion options for each NAME, or, if no NAMEs are supplied,\n"
-#| "    the completion currently being executed.  If no OPTIONs are given, print\n"
-#| "    the completion options for each NAME or the current completion specification.\n"
-#| "    \n"
-#| "    Options:\n"
-#| "    \t-o option\tSet completion option OPTION for each NAME\n"
-#| "    \t-D\t\tChange options for the \"default\" command completion\n"
-#| "    \t-E\t\tChange options for the \"empty\" command completion\n"
-#| "    \n"
-#| "    Using `+o' instead of `-o' turns off the specified option.\n"
-#| "    \n"
-#| "    Arguments:\n"
-#| "    \n"
-#| "    Each NAME refers to a command for which a completion specification must\n"
-#| "    have previously been defined using the `complete' builtin.  If no NAMEs\n"
-#| "    are supplied, compopt must be called by a function currently generating\n"
-#| "    completions, and the options for that currently-executing completion\n"
-#| "    generator are modified.\n"
-#| "    \n"
-#| "    Exit Status:\n"
-#| "    Returns success unless an invalid option is supplied or NAME does not\n"
-#| "    have a completion specification defined."
 msgid ""
 "Modify or display completion options.\n"
 "    \n"
-"    Modify the completion options for each NAME, or, if no NAMEs are supplied,\n"
-"    the completion currently being executed.  If no OPTIONs are given, print\n"
-"    the completion options for each NAME or the current completion specification.\n"
+"    Modify the completion options for each NAME, or, if no NAMEs are "
+"supplied,\n"
+"    the completion currently being executed.  If no OPTIONs are given, "
+"print\n"
+"    the completion options for each NAME or the current completion "
+"specification.\n"
 "    \n"
 "    Options:\n"
 "    \t-o option\tSet completion option OPTION for each NAME\n"
@@ -6360,8 +5945,10 @@ msgstr ""
 "Изменение или вывод параметров завершения.\n"
 "    \n"
 "    Изменяет параметры завершения для каждого имени или, если имена\n"
-"    не указаны, для текущего завершения.  Если параметры не указаны, выводит\n"
-"    параметры завершения для каждого имени или текущую спецификацию завершения.\n"
+"    не указаны, для текущего завершения.  Если параметры не указаны, "
+"выводит\n"
+"    параметры завершения для каждого имени или текущую спецификацию "
+"завершения.\n"
 "    \n"
 "    Параметры:\n"
 "    \t-o параметр\tзадать параметр завершения для каждого имени\n"
@@ -6373,8 +5960,10 @@ msgstr ""
 "    Аргументы:\n"
 "    \n"
 "    Каждое имя ссылается на команду, для которой уже должна быть определена\n"
-"    спецификация завершения с помощью встроенной команды «complete».  Если имена\n"
-"    не указаны, функция, которая сейчас генерирует завершения, должна вызвать\n"
+"    спецификация завершения с помощью встроенной команды «complete».  Если "
+"имена\n"
+"    не указаны, функция, которая сейчас генерирует завершения, должна "
+"вызвать\n"
 "    compopt, и должны измениться параметры для текущего\n"
 "    генератора завершения.\n"
 "    \n"
@@ -6382,52 +5971,27 @@ msgstr ""
 "    Возвращает успех, если был указан допустимый параметр или для имени\n"
 "    определена спецификация завершения."
 
-#: builtins.c:2047
+#: builtins.c:2050
 #, fuzzy
-#| msgid ""
-#| "Read lines from the standard input into an indexed array variable.\n"
-#| "    \n"
-#| "    Read lines from the standard input into the indexed array variable ARRAY, or\n"
-#| "    from file descriptor FD if the -u option is supplied.  The variable MAPFILE\n"
-#| "    is the default ARRAY.\n"
-#| "    \n"
-#| "    Options:\n"
-#| "      -n count\tCopy at most COUNT lines.  If COUNT is 0, all lines are copied.\n"
-#| "      -O origin\tBegin assigning to ARRAY at index ORIGIN.  The default index is 0.\n"
-#| "      -s count \tDiscard the first COUNT lines read.\n"
-#| "      -t\t\tRemove a trailing newline from each line read.\n"
-#| "      -u fd\t\tRead lines from file descriptor FD instead of the standard input.\n"
-#| "      -C callback\tEvaluate CALLBACK each time QUANTUM lines are read.\n"
-#| "      -c quantum\tSpecify the number of lines read between each call to CALLBACK.\n"
-#| "    \n"
-#| "    Arguments:\n"
-#| "      ARRAY\t\tArray variable name to use for file data.\n"
-#| "    \n"
-#| "    If -C is supplied without -c, the default quantum is 5000.  When\n"
-#| "    CALLBACK is evaluated, it is supplied the index of the next array\n"
-#| "    element to be assigned and the line to be assigned to that element\n"
-#| "    as additional arguments.\n"
-#| "    \n"
-#| "    If not supplied with an explicit origin, mapfile will clear ARRAY before\n"
-#| "    assigning to it.\n"
-#| "    \n"
-#| "    Exit Status:\n"
-#| "    Returns success unless an invalid option is given or ARRAY is readonly or\n"
-#| "    not an indexed array."
 msgid ""
 "Read lines from the standard input into an indexed array variable.\n"
 "    \n"
-"    Read lines from the standard input into the indexed array variable ARRAY, or\n"
-"    from file descriptor FD if the -u option is supplied.  The variable MAPFILE\n"
+"    Read lines from the standard input into the indexed array variable "
+"ARRAY, or\n"
+"    from file descriptor FD if the -u option is supplied.  The variable "
+"MAPFILE\n"
 "    is the default ARRAY.\n"
 "    \n"
 "    Options:\n"
 "      -d delim\tUse DELIM to terminate lines, instead of newline\n"
-"      -n count\tCopy at most COUNT lines.  If COUNT is 0, all lines are copied\n"
-"      -O origin\tBegin assigning to ARRAY at index ORIGIN.  The default index is 0\n"
+"      -n count\tCopy at most COUNT lines.  If COUNT is 0, all lines are "
+"copied\n"
+"      -O origin\tBegin assigning to ARRAY at index ORIGIN.  The default "
+"index is 0\n"
 "      -s count\tDiscard the first COUNT lines read\n"
 "      -t\tRemove a trailing DELIM from each line read (default newline)\n"
-"      -u fd\tRead lines from file descriptor FD instead of the standard input\n"
+"      -u fd\tRead lines from file descriptor FD instead of the standard "
+"input\n"
 "      -C callback\tEvaluate CALLBACK each time QUANTUM lines are read\n"
 "      -c quantum\tSpecify the number of lines read between each call to\n"
 "    \t\t\tCALLBACK\n"
@@ -6440,25 +6004,32 @@ msgid ""
 "    element to be assigned and the line to be assigned to that element\n"
 "    as additional arguments.\n"
 "    \n"
-"    If not supplied with an explicit origin, mapfile will clear ARRAY before\n"
+"    If not supplied with an explicit origin, mapfile will clear ARRAY "
+"before\n"
 "    assigning to it.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success unless an invalid option is given or ARRAY is readonly or\n"
+"    Returns success unless an invalid option is given or ARRAY is readonly "
+"or\n"
 "    not an indexed array."
 msgstr ""
 "Чтение строк со стандартного ввода в переменную индексированного массива.\n"
 "    \n"
-"    Читает строки со стандартного ввода в переменную указанного индексированного массива\n"
-"    или из указанного файлового дескриптора, если указан параметр -u.  Переменная $MAPFILE\n"
+"    Читает строки со стандартного ввода в переменную указанного "
+"индексированного массива\n"
+"    или из указанного файлового дескриптора, если указан параметр -u.  "
+"Переменная $MAPFILE\n"
 "    является массивом по умолчанию.\n"
 "    \n"
 "    Параметры:\n"
-"      -n число\tкопировать указанное число строк  Если число равно 0, копируются все строки.\n"
-"      -O начало\tначать присвоение массиву, начиная с заданного указателя  По умолчанию указатель равен 0.\n"
+"      -n число\tкопировать указанное число строк  Если число равно 0, "
+"копируются все строки.\n"
+"      -O начало\tначать присвоение массиву, начиная с заданного указателя  "
+"По умолчанию указатель равен 0.\n"
 "      -s число \tотбросить указанное число первых строк\n"
 "      -t\t\tудалить завершающие переводы строки изо всех прочитанных строк\n"
-"      -u fd\t\tчитать строки из файлового дескриптора, а не со стандартного входа\n"
+"      -u fd\t\tчитать строки из файлового дескриптора, а не со стандартного "
+"входа\n"
 "      -C callback\tоценивать callback при чтении каждой строки quantum\n"
 "      -c quantum\tчисло строк, читаемых от каждого вызова до callback\n"
 "    \n"
@@ -6466,7 +6037,8 @@ msgstr ""
 "      МАССИВ\t\tназвание переменной массива, используемой для данных файла.\n"
 "    \n"
 "    Если параметр -C указан без -c, quantum по умолчанию равен 5000.  Когда\n"
-"    оценивается callback, он предоставляет указатель на следующий присваиваемый\n"
+"    оценивается callback, он предоставляет указатель на следующий "
+"присваиваемый\n"
 "    элемента массива и на строку, присваиваемую этому элементу,\n"
 "    в качестве дополнительных аргументов.\n"
 "    \n"
@@ -6474,10 +6046,11 @@ msgstr ""
 "    операции присвоения.\n"
 "    \n"
 "    Состояние выхода:\n"
-"    Возвращает успех, если был указан допустимый параметр или массив доступен для записи\n"
+"    Возвращает успех, если был указан допустимый параметр или массив "
+"доступен для записи\n"
 "    и является индексированным."
 
-#: builtins.c:2083
+#: builtins.c:2086
 msgid ""
 "Read lines from a file into an array variable.\n"
 "    \n"
@@ -6487,6 +6060,10 @@ msgstr ""
 "    \n"
 "    Синоним команды «mapfile»."
 
+#, c-format
+#~ msgid "%s: invalid associative array key"
+#~ msgstr "%s: недопустимый ключ ассоциативного массива"
+
 #~ msgid ""
 #~ "Returns the context of the current subroutine call.\n"
 #~ "    \n"
@@ -6524,7 +6101,8 @@ msgstr ""
 #~ msgstr "brace_expand> "
 
 #~ msgid "Attempt to free unknown command type `%d'.\n"
-#~ msgstr "Попытка освободить память структуры команды неизвестного типа `%d'.\n"
+#~ msgstr ""
+#~ "Попытка освободить память структуры команды неизвестного типа `%d'.\n"
 
 #~ msgid "Report this to %s\n"
 #~ msgstr "Сообщите об этом по адресу %s\n"
@@ -6633,7 +6211,9 @@ msgstr ""
 #~ msgstr "подстановка команд"
 
 #~ msgid "Can't reopen pipe to command substitution (fd %d): %s"
-#~ msgstr "Невозможно вновь открыть канал для подстановки команд (файловый дексриптор %d): %s"
+#~ msgstr ""
+#~ "Невозможно вновь открыть канал для подстановки команд (файловый "
+#~ "дексриптор %d): %s"
 
 #~ msgid "$%c: unbound variable"
 #~ msgstr "$%c: не заданы границы"
@@ -6651,7 +6231,8 @@ msgstr ""
 #~ msgstr "[%s: неверный индекс"
 
 #~ msgid "xrealloc: cannot reallocate %lu bytes (%lu bytes allocated)"
-#~ msgstr "xmalloc: невозможно заново выделить %lu байтов (выделено %lu байтов)"
+#~ msgstr ""
+#~ "xmalloc: невозможно заново выделить %lu байтов (выделено %lu байтов)"
 
 #~ msgid "digits occur in two different argv-elements.\n"
 #~ msgstr "цифры встречаются в двух разных элементах argv.\n"
@@ -6720,40 +6301,50 @@ msgstr ""
 #~ msgstr "случае, для каждого ИМЕНИ определяется псевдокоманда со ЗНАЧЕНИЕМ."
 
 #~ msgid "A trailing space in VALUE causes the next word to be checked for"
-#~ msgstr "Если на конце ЗНАЧЕНИЯ есть пробелы, при разворачивании псевдокоманды"
+#~ msgstr ""
+#~ "Если на конце ЗНАЧЕНИЯ есть пробелы, при разворачивании псевдокоманды"
 
 #~ msgid "alias substitution when the alias is expanded.  Alias returns"
 #~ msgstr "следующее слово проверяется на подстановку псевдокоманд. Alias"
 
 #~ msgid "true unless a NAME is given for which no alias has been defined."
-#~ msgstr "возвращает true, если только не задано ИМЯ, для которого нет псевдокоманд."
+#~ msgstr ""
+#~ "возвращает true, если только не задано ИМЯ, для которого нет псевдокоманд."
 
-#~ msgid "Remove NAMEs from the list of defined aliases.  If the -a option is given,"
-#~ msgstr "Удаляет ИМЕНА из списка определённых псевдокоманд. Если задан параметр -a,"
+#~ msgid ""
+#~ "Remove NAMEs from the list of defined aliases.  If the -a option is given,"
+#~ msgstr ""
+#~ "Удаляет ИМЕНА из списка определённых псевдокоманд. Если задан параметр -a,"
 
 #~ msgid "then remove all alias definitions."
 #~ msgstr "удаляет все определения псевдокоманд."
 
 #~ msgid "Bind a key sequence to a Readline function, or to a macro.  The"
-#~ msgstr "Связывает последовательность клавиш с функцией Readline или с макросом."
+#~ msgstr ""
+#~ "Связывает последовательность клавиш с функцией Readline или с макросом."
 
 #~ msgid "syntax is equivalent to that found in ~/.inputrc, but must be"
 #~ msgstr "Синтаксис тот же, что и в ~/.inputrc, но должен передаваться"
 
-#~ msgid "passed as a single argument: bind '\"\\C-x\\C-r\": re-read-init-file'."
+#~ msgid ""
+#~ "passed as a single argument: bind '\"\\C-x\\C-r\": re-read-init-file'."
 #~ msgstr "одним аргументом: bind '\"\\C-x\\C-r\": re-read-init-file'."
 
 #~ msgid "Arguments we accept:"
 #~ msgstr "Принимаемые аргументы:"
 
-#~ msgid "  -m  keymap         Use `keymap' as the keymap for the duration of this"
-#~ msgstr "   -m раскладка      Использовать во время работы программы указанную"
+#~ msgid ""
+#~ "  -m  keymap         Use `keymap' as the keymap for the duration of this"
+#~ msgstr ""
+#~ "   -m раскладка      Использовать во время работы программы указанную"
 
 #~ msgid "                     command.  Acceptable keymap names are emacs,"
 #~ msgstr "                     раскладку.  Допустимые имена раскладок: emacs,"
 
-#~ msgid "                     emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,"
-#~ msgstr "                     emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,"
+#~ msgid ""
+#~ "                     emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,"
+#~ msgstr ""
+#~ "                     emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,"
 
 #~ msgid "                     vi-command, and vi-insert."
 #~ msgstr "                     vi-command и vi-insert."
@@ -6764,7 +6355,8 @@ msgstr ""
 #~ msgid "  -P                 List function names and bindings."
 #~ msgstr "  -P                  Вывести список имён функций и связей."
 
-#~ msgid "  -p                 List functions and bindings in a form that can be"
+#~ msgid ""
+#~ "  -p                 List functions and bindings in a form that can be"
 #~ msgstr "  -p                 Вывести список имён функций и связей в виде,"
 
 #~ msgid "                     reused as input."
@@ -6776,26 +6368,40 @@ msgstr ""
 #~ msgid "  -f  filename       Read key bindings from FILENAME."
 #~ msgstr "  -f  имя_файла      Прочесть связи из файла."
 
-#~ msgid "  -q  function-name  Query about which keys invoke the named function."
-#~ msgstr "  -q  имя_функции    Запрос, какие клавиши вызовут указанную функцию."
+#~ msgid ""
+#~ "  -q  function-name  Query about which keys invoke the named function."
+#~ msgstr ""
+#~ "  -q  имя_функции    Запрос, какие клавиши вызовут указанную функцию."
 
 #~ msgid "  -V                 List variable names and values"
 #~ msgstr "  -V                 Вывести список имён и значений переменных."
 
-#~ msgid "  -v                 List variable names and values in a form that can"
-#~ msgstr "  -v                 Вывести список имён и значений переменных в виде,"
+#~ msgid ""
+#~ "  -v                 List variable names and values in a form that can"
+#~ msgstr ""
+#~ "  -v                 Вывести список имён и значений переменных в виде,"
 
 #~ msgid "                     be reused as input."
 #~ msgstr "                     который можно использовать на входе"
 
-#~ msgid "  -S                 List key sequences that invoke macros and their values"
-#~ msgstr "  -S                 Вывести список последовательностей клавиш, вызывающих макросы и их значений."
+#~ msgid ""
+#~ "  -S                 List key sequences that invoke macros and their "
+#~ "values"
+#~ msgstr ""
+#~ "  -S                 Вывести список последовательностей клавиш, "
+#~ "вызывающих макросы и их значений."
 
-#~ msgid "  -s                 List key sequences that invoke macros and their values in"
-#~ msgstr "  -s                Вывести список последовательностей клавиш, вызывающих макросы"
+#~ msgid ""
+#~ "  -s                 List key sequences that invoke macros and their "
+#~ "values in"
+#~ msgstr ""
+#~ "  -s                Вывести список последовательностей клавиш, вызывающих "
+#~ "макросы"
 
 #~ msgid "                     a form that can be reused as input."
-#~ msgstr "                     и их значений в виде, который можно использовать на входе"
+#~ msgstr ""
+#~ "                     и их значений в виде, который можно использовать на "
+#~ "входе"
 
 #~ msgid "Exit from within a FOR, WHILE or UNTIL loop.  If N is specified,"
 #~ msgstr "Выйти из цикла FOR, WHILE или UNTIL.  Если указано N,"
@@ -6822,64 +6428,89 @@ msgstr ""
 #~ msgstr "Изменить текущий каталог на заданный.  Переменная $HOME содержит"
 
 #~ msgid "default DIR.  The variable $CDPATH defines the search path for"
-#~ msgstr "каталог по умолчанию.  Переменная $CDPATH определяет путь, в котором"
+#~ msgstr ""
+#~ "каталог по умолчанию.  Переменная $CDPATH определяет путь, в котором"
 
 #~ msgid "the directory containing DIR.  Alternative directory names in CDPATH"
-#~ msgstr "ищется каталог, содержащий КАТАЛОГ.  Альтернативные каталоги в CDPATH"
+#~ msgstr ""
+#~ "ищется каталог, содержащий КАТАЛОГ.  Альтернативные каталоги в CDPATH"
 
 #~ msgid "are separated by a colon (:).  A null directory name is the same as"
-#~ msgstr "разделяются точкой с запятой (:).  Пустое имя каталога -- то же самое,"
+#~ msgstr ""
+#~ "разделяются точкой с запятой (:).  Пустое имя каталога -- то же самое,"
 
 #~ msgid "the current directory, i.e. `.'.  If DIR begins with a slash (/),"
-#~ msgstr "что текущий каталог, т.е. `.'.  Если КАТАЛОГ начинается с дроби (/),"
+#~ msgstr ""
+#~ "что текущий каталог, т.е. `.'.  Если КАТАЛОГ начинается с дроби (/),"
 
 #~ msgid "then $CDPATH is not used.  If the directory is not found, and the"
-#~ msgstr "$CDPATh не используется.  Если каталог не найден, и установлен параметр"
+#~ msgstr ""
+#~ "$CDPATh не используется.  Если каталог не найден, и установлен параметр"
 
 #~ msgid "shell option `cdable_vars' is set, then try the word as a variable"
-#~ msgstr "оболочки `cdable_vars', делается попытка интерпретировать это слово как имя"
+#~ msgstr ""
+#~ "оболочки `cdable_vars', делается попытка интерпретировать это слово как "
+#~ "имя"
 
 #~ msgid "name.  If that variable has a value, then cd to the value of that"
-#~ msgstr "переменной.  Если эта переменная имеет значение, каталог меняется на это"
+#~ msgstr ""
+#~ "переменной.  Если эта переменная имеет значение, каталог меняется на это"
 
-#~ msgid "variable.  The -P option says to use the physical directory structure"
-#~ msgstr "значение.  Параметр -P указывает использовать физическую структуру каталогов,"
+#~ msgid ""
+#~ "variable.  The -P option says to use the physical directory structure"
+#~ msgstr ""
+#~ "значение.  Параметр -P указывает использовать физическую структуру "
+#~ "каталогов,"
 
-#~ msgid "instead of following symbolic links; the -L option forces symbolic links"
-#~ msgstr "а не следовать символчиеским ссылкам, параметр -L заставляет следовать"
+#~ msgid ""
+#~ "instead of following symbolic links; the -L option forces symbolic links"
+#~ msgstr ""
+#~ "а не следовать символчиеским ссылкам, параметр -L заставляет следовать"
 
 #~ msgid "to be followed."
 #~ msgstr "символическим ссылкам."
 
 #~ msgid "Print the current working directory.  With the -P option, pwd prints"
-#~ msgstr "Вывести имя текущего рабочего каталога.  С параметром -P pwd выводит"
+#~ msgstr ""
+#~ "Вывести имя текущего рабочего каталога.  С параметром -P pwd выводит"
 
 #~ msgid "the physical directory, without any symbolic links; the -L option"
-#~ msgstr "физический каталог, без символических ссылок, параметр -L заставляет"
+#~ msgstr ""
+#~ "физический каталог, без символических ссылок, параметр -L заставляет"
 
 #~ msgid "makes pwd follow symbolic links."
 #~ msgstr "pwd следовать символическим ссылкам."
 
-#~ msgid "Runs COMMAND with ARGS ignoring shell functions.  If you have a shell"
-#~ msgstr "Выполняет КОМАНДУ с АРГУМЕНТАМИ, игнорируя функции оболочки. Если у вас есть"
+#~ msgid ""
+#~ "Runs COMMAND with ARGS ignoring shell functions.  If you have a shell"
+#~ msgstr ""
+#~ "Выполняет КОМАНДУ с АРГУМЕНТАМИ, игнорируя функции оболочки. Если у вас "
+#~ "есть"
 
 #~ msgid "function called `ls', and you wish to call the command `ls', you can"
-#~ msgstr "функция оболочки `ls', а вы хотите вызвать команду `ls', можно использовать"
+#~ msgstr ""
+#~ "функция оболочки `ls', а вы хотите вызвать команду `ls', можно "
+#~ "использовать"
 
-#~ msgid "say \"command ls\".  If the -p option is given, a default value is used"
-#~ msgstr "\"command ls\".  Если задан параметр -p, используется значение $PATH"
+#~ msgid ""
+#~ "say \"command ls\".  If the -p option is given, a default value is used"
+#~ msgstr ""
+#~ "\"command ls\".  Если задан параметр -p, используется значение $PATH"
 
-#~ msgid "for PATH that is guaranteed to find all of the standard utilities.  If"
+#~ msgid ""
+#~ "for PATH that is guaranteed to find all of the standard utilities.  If"
 #~ msgstr "по умолчанию, что гарантирует отыскание стандартных утилит.  Если"
 
-#~ msgid "the -V or -v option is given, a string is printed describing COMMAND."
+#~ msgid ""
+#~ "the -V or -v option is given, a string is printed describing COMMAND."
 #~ msgstr "задан параметр -V или -v, выводится строка, описывающая КОМАНДУ."
 
 #~ msgid "The -V option produces a more verbose description."
 #~ msgstr "Параметр -V создаёт более подробное описание."
 
 #~ msgid "Declare variables and/or give them attributes.  If no NAMEs are"
-#~ msgstr "Объявляет переменные и/или придаёт им атрибуты.  Если не заданы ИМЕНА,"
+#~ msgstr ""
+#~ "Объявляет переменные и/или придаёт им атрибуты.  Если не заданы ИМЕНА,"
 
 #~ msgid "given, then display the values of variables instead.  The -p option"
 #~ msgstr "выводит вместо этого значения переменных.  Параметр -p выведет"
@@ -6923,11 +6554,13 @@ msgstr ""
 #~ msgid "name only."
 #~ msgstr "функции."
 
-#~ msgid "Using `+' instead of `-' turns off the given attribute instead.  When"
+#~ msgid ""
+#~ "Using `+' instead of `-' turns off the given attribute instead.  When"
 #~ msgstr "Использование `+' вместо `-' выключает заданный атрибут.  При"
 
 #~ msgid "used in a function, makes NAMEs local, as with the `local' command."
-#~ msgstr "использовании в функции делает ИМЕНа локальными, как команда `local'."
+#~ msgstr ""
+#~ "использовании в функции делает ИМЕНа локальными, как команда `local'."
 
 #~ msgid "Obsolete.  See `declare'."
 #~ msgstr "Устарела.  См. `declare'."
@@ -6942,7 +6575,8 @@ msgstr ""
 #~ msgstr "Выводит АРГУМЕНТЫ.  Если задано -n, подавляется завершающий переход"
 
 #~ msgid "suppressed.  If the -e option is given, interpretation of the"
-#~ msgstr "на новую строку.  Если задан параметр -e, интерпретируются следующие"
+#~ msgstr ""
+#~ "на новую строку.  Если задан параметр -e, интерпретируются следующие"
 
 #~ msgid "following backslash-escaped characters is turned on:"
 #~ msgstr "экранированные символы:"
@@ -6980,14 +6614,18 @@ msgstr ""
 #~ msgid "\t\\num\tthe character whose ASCII code is NUM (octal)."
 #~ msgstr "\t\\число\tсимвол, восьмеричный ASCII-код которого равен ЧИСЛУ"
 
-#~ msgid "You can explicitly turn off the interpretation of the above characters"
+#~ msgid ""
+#~ "You can explicitly turn off the interpretation of the above characters"
 #~ msgstr "Вы можете явно выключить интерпретацию вышеприведённых символов"
 
 #~ msgid "with the -E option."
 #~ msgstr "параметром -E."
 
-#~ msgid "Output the ARGs.  If -n is specified, the trailing newline is suppressed."
-#~ msgstr "Выводит АРГУМЕНТЫ.  Если задано -n, подавляется завершающий переход на новую строку."
+#~ msgid ""
+#~ "Output the ARGs.  If -n is specified, the trailing newline is suppressed."
+#~ msgstr ""
+#~ "Выводит АРГУМЕНТЫ.  Если задано -n, подавляется завершающий переход на "
+#~ "новую строку."
 
 #~ msgid "Enable and disable builtin shell commands.  This allows"
 #~ msgstr "Включает и блокирует встроенные команды оболочки.  Это позволяет"
@@ -6996,10 +6634,12 @@ msgstr ""
 #~ msgstr "использовать внешние команды с теми же именами, что команды"
 
 #~ msgid "builtin.  If -n is used, the NAMEs become disabled; otherwise"
-#~ msgstr "оболочки.  При использовании -n ИМЕНА блокируются, в противном случае"
+#~ msgstr ""
+#~ "оболочки.  При использовании -n ИМЕНА блокируются, в противном случае"
 
 #~ msgid "NAMEs are enabled.  For example, to use the `test' found on your"
-#~ msgstr "включаются.  Например, чтобы использовать файл `test', а не встроенную"
+#~ msgstr ""
+#~ "включаются.  Например, чтобы использовать файл `test', а не встроенную"
 
 #~ msgid "path instead of the shell builtin version, type `enable -n test'."
 #~ msgstr "в оболочку версию, введите enable -n test'.  На системах,"
@@ -7008,7 +6648,8 @@ msgstr ""
 #~ msgstr "поддерживающих динамическую загрузку можно использовать параметр -f"
 
 #~ msgid "to load new builtins from the shared object FILENAME.  The -d"
-#~ msgstr "чтобы загрузить новые встроенные команды из разделяемого объекта ФАЙЛ."
+#~ msgstr ""
+#~ "чтобы загрузить новые встроенные команды из разделяемого объекта ФАЙЛ."
 
 #~ msgid "option will delete a builtin previously loaded with -f.  If no"
 #~ msgstr "Параметр -d удаляет команды, загруженные -f.  Если имена, кроме"
@@ -7017,7 +6658,8 @@ msgstr ""
 #~ msgstr "как в параметрах, не заданы, или если задан параметр -p, выводится"
 
 #~ msgid "of builtins is printed.  The -a option means to print every builtin"
-#~ msgstr "список встроенных команд.  Параметр -a требует вывести все встроенные"
+#~ msgstr ""
+#~ "список встроенных команд.  Параметр -a требует вывести все встроенные"
 
 #~ msgid "with an indication of whether or not it is enabled.  The -s option"
 #~ msgstr "команды с информацией, блокированы ли они.  Параметр -s выводит"
@@ -7028,17 +6670,22 @@ msgstr ""
 #~ msgid "option displays a list of all disabled builtins."
 #~ msgstr "всех блокированных встроенных команд."
 
-#~ msgid "Read ARGs as input to the shell and execute the resulting command(s)."
-#~ msgstr "Читает АРГУМЕНТЫ как входной текст оболочки и выполняет полученные команды."
+#~ msgid ""
+#~ "Read ARGs as input to the shell and execute the resulting command(s)."
+#~ msgstr ""
+#~ "Читает АРГУМЕНТЫ как входной текст оболочки и выполняет полученные "
+#~ "команды."
 
 #~ msgid "Getopts is used by shell procedures to parse positional parameters."
-#~ msgstr "Getopts используется процедурами оболочки для анализа параметров командной"
+#~ msgstr ""
+#~ "Getopts используется процедурами оболочки для анализа параметров командной"
 
 #~ msgid "OPTSTRING contains the option letters to be recognized; if a letter"
 #~ msgstr "строки.  СТРОКА_ПАРАМЕТРОВ содержит буквы параметров, которые нужно"
 
 #~ msgid "is followed by a colon, the option is expected to have an argument,"
-#~ msgstr "распознать.  Если за буквой следует двоеточие, параметр должен иметь"
+#~ msgstr ""
+#~ "распознать.  Если за буквой следует двоеточие, параметр должен иметь"
 
 #~ msgid "which should be separated from it by white space."
 #~ msgstr "аргумент, отделённый от него промежутком."
@@ -7053,7 +6700,8 @@ msgstr ""
 #~ msgstr "следующего аргумента в переменную оболочки OPTIND.  OPTIND"
 
 #~ msgid "variable OPTIND.  OPTIND is initialized to 1 each time the shell or"
-#~ msgstr "принимает значение 1 при каждом вызове оболочки или скрипта оболочки."
+#~ msgstr ""
+#~ "принимает значение 1 при каждом вызове оболочки или скрипта оболочки."
 
 #~ msgid "a shell script is invoked.  When an option requires an argument,"
 #~ msgstr "Если параметр требует аргумента, getopts помещает этот аргумент"
@@ -7062,16 +6710,19 @@ msgstr ""
 #~ msgstr "в переменную оболочки OPTARG."
 
 #~ msgid "getopts reports errors in one of two ways.  If the first character"
-#~ msgstr "getopts сообщает об ошибках одним из двух способов. Если первый символ"
+#~ msgstr ""
+#~ "getopts сообщает об ошибках одним из двух способов. Если первый символ"
 
 #~ msgid "of OPTSTRING is a colon, getopts uses silent error reporting.  In"
-#~ msgstr "OPTSTRING -- двоеточие, getopts использует бесшумный способ.  В этом"
+#~ msgstr ""
+#~ "OPTSTRING -- двоеточие, getopts использует бесшумный способ.  В этом"
 
 #~ msgid "this mode, no error messages are printed.  If an illegal option is"
 #~ msgstr "случае сообщения об ошибках не выводятся.  Если найден недопустимый"
 
 #~ msgid "seen, getopts places the option character found into OPTARG.  If a"
-#~ msgstr "параметр, getopts помещает найденный символ в OPTARG.  Если не найден"
+#~ msgstr ""
+#~ "параметр, getopts помещает найденный символ в OPTARG.  Если не найден"
 
 #~ msgid "required argument is not found, getopts places a ':' into NAME and"
 #~ msgstr "требуемый аргумент, getopts помещает в ИМЯ ':', а в OPTARG --"
@@ -7128,7 +6779,8 @@ msgstr ""
 #~ msgstr "Если файл не может быть запущен, а оболочка не интерактивна,"
 
 #~ msgid "then the shell exits, unless the variable \"no_exit_on_failed_exec\""
-#~ msgstr "производится выход из оболочки, если только не установлена переменная"
+#~ msgstr ""
+#~ "производится выход из оболочки, если только не установлена переменная"
 
 #~ msgid "is set."
 #~ msgstr "\"no_exit_on_failed_exec\""
@@ -7136,8 +6788,10 @@ msgstr ""
 #~ msgid "is that of the last command executed."
 #~ msgstr "завершения будет таким же, как у последней выполненной команды."
 
-#~ msgid "FIRST and LAST can be numbers specifying the range, or FIRST can be a"
-#~ msgstr "ПЕРВАЯ и ПОСЛЕДНЯЯ могут быть числами, ограничивающими диапазон, или"
+#~ msgid ""
+#~ "FIRST and LAST can be numbers specifying the range, or FIRST can be a"
+#~ msgstr ""
+#~ "ПЕРВАЯ и ПОСЛЕДНЯЯ могут быть числами, ограничивающими диапазон, или"
 
 #~ msgid "string, which means the most recent command beginning with that"
 #~ msgstr "же ПЕРВАЯ может быть строкой, означающей самую недавнюю команду,"
@@ -7145,10 +6799,13 @@ msgstr ""
 #~ msgid "string."
 #~ msgstr "начинающуюся с этой строки."
 
-#~ msgid "   -e ENAME selects which editor to use.  Default is FCEDIT, then EDITOR,"
-#~ msgstr "   -e ИМЯ_РЕДАКТОРА выбирает используемый редактор.  По умолчанию FCEDIT,"
+#~ msgid ""
+#~ "   -e ENAME selects which editor to use.  Default is FCEDIT, then EDITOR,"
+#~ msgstr ""
+#~ "   -e ИМЯ_РЕДАКТОРА выбирает используемый редактор.  По умолчанию FCEDIT,"
 
-#~ msgid "      then the editor which corresponds to the current readline editing"
+#~ msgid ""
+#~ "      then the editor which corresponds to the current readline editing"
 #~ msgstr "      затем EDITOR, затем редактор, соответствуюший текущему режиму"
 
 #~ msgid "      mode, then vi."
@@ -7160,11 +6817,14 @@ msgstr ""
 #~ msgid "   -n means no line numbers listed."
 #~ msgstr "   -n не выводить номера строк."
 
-#~ msgid "   -r means reverse the order of the lines (making it newest listed first)."
+#~ msgid ""
+#~ "   -r means reverse the order of the lines (making it newest listed "
+#~ "first)."
 #~ msgstr "   -r вывести строки в обратном порядке (в начале самые новые)."
 
 #~ msgid "With the `fc -s [pat=rep ...] [command]' format, the command is"
-#~ msgstr "В формате `fc -s [шаблон=замена] [команда]  команда выполняется заново"
+#~ msgstr ""
+#~ "В формате `fc -s [шаблон=замена] [команда]  команда выполняется заново"
 
 #~ msgid "re-executed after the substitution OLD=NEW is performed."
 #~ msgstr "после того, как произведена подстановка."
@@ -7176,7 +6836,8 @@ msgstr ""
 #~ msgstr "команду, начинающуюся с `cc', а `r' заново выполняет последнюю"
 
 #~ msgid "Place JOB_SPEC in the foreground, and make it the current job.  If"
-#~ msgstr "Возвращает задачу с указанным номером из фонового режима и делает её"
+#~ msgstr ""
+#~ "Возвращает задачу с указанным номером из фонового режима и делает её"
 
 #~ msgid "JOB_SPEC is not present, the shell's notion of the current job is"
 #~ msgstr "текущей задачей. Если номер не задан, используется представление"
@@ -7185,10 +6846,12 @@ msgstr ""
 #~ msgstr "оболочки о текущей задаче."
 
 #~ msgid "Place JOB_SPEC in the background, as if it had been started with"
-#~ msgstr "Переводит задачу с указанным номером в фоновый режим, как если бы она"
+#~ msgstr ""
+#~ "Переводит задачу с указанным номером в фоновый режим, как если бы она"
 
 #~ msgid "`&'.  If JOB_SPEC is not present, the shell's notion of the current"
-#~ msgstr "была запущена с `&'.  Если номер не задан, используется представление"
+#~ msgstr ""
+#~ "была запущена с `&'.  Если номер не задан, используется представление"
 
 #~ msgid "job is used."
 #~ msgstr "оболочки о текущей задаче."
@@ -7205,14 +6868,17 @@ msgstr ""
 #~ msgid "option causes the shell to forget all remembered locations.  If no"
 #~ msgstr "список положений в памяти.  Если аргументы не заданы, выводится"
 
-#~ msgid "arguments are given, information about remembered commands is displayed."
+#~ msgid ""
+#~ "arguments are given, information about remembered commands is displayed."
 #~ msgstr "информация о запомненных командах."
 
 #~ msgid "Display helpful information about builtin commands.  If PATTERN is"
-#~ msgstr "Вывести полезную информацию о встроенных командах.  Если задан ШАБЛОН,"
+#~ msgstr ""
+#~ "Вывести полезную информацию о встроенных командах.  Если задан ШАБЛОН,"
 
 #~ msgid "specified, gives detailed help on all commands matching PATTERN,"
-#~ msgstr "вывести подробную справку по всем командам, соответствующим ШАБЛОНУ,"
+#~ msgstr ""
+#~ "вывести подробную справку по всем командам, соответствующим ШАБЛОНУ,"
 
 #~ msgid "otherwise a list of the builtins is printed."
 #~ msgstr "в противном случае вывести список встроенных команд."
@@ -7221,15 +6887,18 @@ msgstr ""
 #~ msgstr "Вывести историю команд в виде списка с номерами строк.  Изменённые"
 
 #~ msgid "with a `*' have been modified.  Argument of N says to list only"
-#~ msgstr "строки помечаются символом `*'.  Аргумент N указывает выводить только"
+#~ msgstr ""
+#~ "строки помечаются символом `*'.  Аргумент N указывает выводить только"
 
 #~ msgid "the last N lines.  The -c option causes the history list to be"
 #~ msgstr "последние N строк.  Параметр -c очищает историю команд, удаляя"
 
-#~ msgid "cleared by deleting all of the entries.  The `-w' option writes out the"
+#~ msgid ""
+#~ "cleared by deleting all of the entries.  The `-w' option writes out the"
 #~ msgstr "все строки.  Параметр `-w' записывает текущую историю в указанный"
 
-#~ msgid "current history to the history file;  `-r' means to read the file and"
+#~ msgid ""
+#~ "current history to the history file;  `-r' means to read the file and"
 #~ msgstr "файл; `-r' читает такой файл и дополняет его содержимым историю"
 
 #~ msgid "append the contents to the history list instead.  `-a' means"
@@ -7256,7 +6925,8 @@ msgstr ""
 #~ msgid "the history list as a single entry.  The -p option means to perform"
 #~ msgstr "Параметр -p выполняет развёртывание каждого АРГУМЕНТА и выводит"
 
-#~ msgid "history expansion on each ARG and display the result, without storing"
+#~ msgid ""
+#~ "history expansion on each ARG and display the result, without storing"
 #~ msgstr "результат, не сохраняя ничего в списке истории команд."
 
 #~ msgid "anything in the history list."
@@ -7268,41 +6938,53 @@ msgstr ""
 #~ msgid "to the normal information; the -p option lists process id's only."
 #~ msgstr "идентификаторы процессов: параметр -p выодит только идентификаторы."
 
-#~ msgid "If -n is given, only processes that have changed status since the last"
+#~ msgid ""
+#~ "If -n is given, only processes that have changed status since the last"
 #~ msgstr "Если задано -n, выводятся только процессы, статус которых изменился"
 
-#~ msgid "notification are printed.  JOBSPEC restricts output to that job.  The"
-#~ msgstr "со времени последнего уведомления.  Если задан номер задачи, выводится"
+#~ msgid ""
+#~ "notification are printed.  JOBSPEC restricts output to that job.  The"
+#~ msgstr ""
+#~ "со времени последнего уведомления.  Если задан номер задачи, выводится"
 
 #~ msgid "-r and -s options restrict output to running and stopped jobs only,"
 #~ msgstr "только она.  Параметры -r и -s выводит только работающие или только"
 
 #~ msgid "respectively.  Without options, the status of all active jobs is"
-#~ msgstr "остановленные задачи соответственно.  Без параметров выодится статус"
+#~ msgstr ""
+#~ "остановленные задачи соответственно.  Без параметров выодится статус"
 
-#~ msgid "printed.  If -x is given, COMMAND is run after all job specifications"
-#~ msgstr "всех активных задач.  Если задано -x, в КОМАНДЕ вместо всех АРГУМЕНТОВ"
+#~ msgid ""
+#~ "printed.  If -x is given, COMMAND is run after all job specifications"
+#~ msgstr ""
+#~ "всех активных задач.  Если задано -x, в КОМАНДЕ вместо всех АРГУМЕНТОВ"
 
-#~ msgid "that appear in ARGS have been replaced with the process ID of that job's"
+#~ msgid ""
+#~ "that appear in ARGS have been replaced with the process ID of that job's"
 #~ msgstr "(номеров задач) подставляется идентификатор лидера соответствующей"
 
 #~ msgid "process group leader."
 #~ msgstr "группы процессов, и КОМАНДА выполняется."
 
 #~ msgid "Removes each JOBSPEC argument from the table of active jobs."
-#~ msgstr "Удаляет все задачи, заданные спецификациями в аргументе, из таблицы задач."
+#~ msgstr ""
+#~ "Удаляет все задачи, заданные спецификациями в аргументе, из таблицы задач."
 
 #~ msgid "Send the processes named by PID (or JOB) the signal SIGSPEC.  If"
-#~ msgstr "Посылает указанным процессам (заданным PID или спецификацией) сигнал"
+#~ msgstr ""
+#~ "Посылает указанным процессам (заданным PID или спецификацией) сигнал"
 
-#~ msgid "SIGSPEC is not present, then SIGTERM is assumed.  An argument of `-l'"
+#~ msgid ""
+#~ "SIGSPEC is not present, then SIGTERM is assumed.  An argument of `-l'"
 #~ msgstr "SIGSPEC. Если отсутствует SIGSPEC, посылается SIGTERM. Аргументом"
 
 #~ msgid "lists the signal names; if arguments follow `-l' they are assumed to"
-#~ msgstr "параметра `-l' служит список сигналов. Если он присутствует, выводятся"
+#~ msgstr ""
+#~ "параметра `-l' служит список сигналов. Если он присутствует, выводятся"
 
 #~ msgid "be signal numbers for which names should be listed.  Kill is a shell"
-#~ msgstr "названия сигналов с этими номерами. Kill является встроенной командой"
+#~ msgstr ""
+#~ "названия сигналов с этими номерами. Kill является встроенной командой"
 
 #~ msgid "builtin for two reasons: it allows job IDs to be used instead of"
 #~ msgstr "оболочки по двум причинам: она позволяет использовать номера задач,"
@@ -7310,14 +6992,16 @@ msgstr ""
 #~ msgid "process IDs, and, if you have reached the limit on processes that"
 #~ msgstr "а не процессов, и если вы исчерпаете лимит созданных процессов,"
 
-#~ msgid "you can create, you don't have to start a process to kill another one."
+#~ msgid ""
+#~ "you can create, you don't have to start a process to kill another one."
 #~ msgstr "вы не сможете запустить новый процесс, уничтожающий один из старых."
 
 #~ msgid "Each ARG is an arithmetic expression to be evaluated.  Evaluation"
 #~ msgstr "Каждый аргумент рассматривается как арифметическое выражение."
 
 #~ msgid "is done in long integers with no check for overflow, though division"
-#~ msgstr "Вычисление производится над длинными целыми без контроля переполнения,"
+#~ msgstr ""
+#~ "Вычисление производится над длинными целыми без контроля переполнения,"
 
 #~ msgid "by 0 is trapped and flagged as an error.  The following list of"
 #~ msgstr "хотя деление на ноль отслеживается и считается ошибкой. Операции в"
@@ -7406,47 +7090,61 @@ msgstr ""
 #~ msgid "One line is read from the standard input, and the first word is"
 #~ msgstr "Со стандартного ввода считывается одна строка, первое её слово"
 
-#~ msgid "assigned to the first NAME, the second word to the second NAME, and so"
+#~ msgid ""
+#~ "assigned to the first NAME, the second word to the second NAME, and so"
 #~ msgstr "становится значением первого ИМЕНИ, второе -- второго ИМЕНИ и т.д."
 
-#~ msgid "on, with leftover words assigned to the last NAME.  Only the characters"
-#~ msgstr "Последнему ИМЕНИ присваивается весь остаток строки. Разделителями слов"
+#~ msgid ""
+#~ "on, with leftover words assigned to the last NAME.  Only the characters"
+#~ msgstr ""
+#~ "Последнему ИМЕНИ присваивается весь остаток строки. Разделителями слов"
 
 #~ msgid "found in $IFS are recognized as word delimiters.  The return code is"
 #~ msgstr "считаются только символы, входящие в $IFS. Код возврата равен нулю,"
 
-#~ msgid "zero, unless end-of-file is encountered.  If no NAMEs are supplied, the"
+#~ msgid ""
+#~ "zero, unless end-of-file is encountered.  If no NAMEs are supplied, the"
 #~ msgstr "за исключением случая, если встретился конец файла. Если ИМЕНА не"
 
-#~ msgid "line read is stored in the REPLY variable.  If the -r option is given,"
-#~ msgstr "заданы, прочитанная строка помещается в переменную REPLY. Если задан"
+#~ msgid ""
+#~ "line read is stored in the REPLY variable.  If the -r option is given,"
+#~ msgstr ""
+#~ "заданы, прочитанная строка помещается в переменную REPLY. Если задан"
 
 #~ msgid "this signifies `raw' input, and backslash escaping is disabled.  If"
-#~ msgstr "параметр -r, это означает `сырой' ввод, т.е. символ \\ не экранирует"
+#~ msgstr ""
+#~ "параметр -r, это означает `сырой' ввод, т.е. символ \\ не экранирует"
 
 #~ msgid "the `-p' option is supplied, the string supplied as an argument is"
-#~ msgstr "символы. Если задано `-p', перед чтением на вывод в качестве аргумента"
+#~ msgstr ""
+#~ "символы. Если задано `-p', перед чтением на вывод в качестве аргумента"
 
-#~ msgid "output without a trailing newline before attempting to read.  If -a is"
-#~ msgstr "подаётся заданная строка (без завершающего символа перевода строки)."
+#~ msgid ""
+#~ "output without a trailing newline before attempting to read.  If -a is"
+#~ msgstr ""
+#~ "подаётся заданная строка (без завершающего символа перевода строки)."
 
-#~ msgid "supplied, the words read are assigned to sequential indices of ARRAY,"
+#~ msgid ""
+#~ "supplied, the words read are assigned to sequential indices of ARRAY,"
 #~ msgstr "Если задано -a, прочитанные слова становятся значениями элементов"
 
 #~ msgid "starting at zero.  If -e is supplied and the shell is interactive,"
-#~ msgstr "МАССИВА, начиная с нулевого. Если задано -c и оболочка интерактивна,"
+#~ msgstr ""
+#~ "МАССИВА, начиная с нулевого. Если задано -c и оболочка интерактивна,"
 
 #~ msgid "readline is used to obtain the line."
 #~ msgstr "чтобы получить строку используется readline."
 
-#~ msgid "Causes a function to exit with the return value specified by N.  If N"
+#~ msgid ""
+#~ "Causes a function to exit with the return value specified by N.  If N"
 #~ msgstr "Заставляет функцию завершить работу с кодом возврата, заданным N."
 
 #~ msgid "is omitted, the return status is that of the last command."
 #~ msgstr "Если N опущено, им становится код возврата последней команды."
 
 #~ msgid "    -a  Mark variables which are modified or created for export."
-#~ msgstr "    -a  Экспортировать переменные, которые изменялись или создавались."
+#~ msgstr ""
+#~ "    -a  Экспортировать переменные, которые изменялись или создавались."
 
 #~ msgid "    -b  Notify of job termination immediately."
 #~ msgstr "    -b  Немедленно выводить сообщения о завершении задач."
@@ -7460,7 +7158,8 @@ msgstr ""
 #~ msgid "    -h  Remember the location of commands as they are looked up."
 #~ msgstr "    -h  Запоминать расположение обработанных команд."
 
-#~ msgid "    -i  Force the shell to be an \"interactive\" one.  Interactive shells"
+#~ msgid ""
+#~ "    -i  Force the shell to be an \"interactive\" one.  Interactive shells"
 #~ msgstr "    -i  Сделать оболочку \"интерактивной\". Интерактивные оболочки"
 
 #~ msgid "        always read `~/.bashrc' on startup."
@@ -7491,7 +7190,8 @@ msgstr ""
 #~ msgstr "            braceexpand  то же, что -B"
 
 #~ msgid "            emacs        use an emacs-style line editing interface"
-#~ msgstr "            emacs        использовать стиль редактирования строк emacs"
+#~ msgstr ""
+#~ "            emacs        использовать стиль редактирования строк emacs"
 
 #~ msgid "            errexit      same as -e"
 #~ msgstr "            errexit      то же, что -e"
@@ -7508,8 +7208,10 @@ msgstr ""
 #~ msgid "            interactive-comments"
 #~ msgstr "            interactive-comments"
 
-#~ msgid "                         allow comments to appear in interactive commands"
-#~ msgstr "                        допускает комментарии в интерактивных командах"
+#~ msgid ""
+#~ "                         allow comments to appear in interactive commands"
+#~ msgstr ""
+#~ "                        допускает комментарии в интерактивных командах"
 
 #~ msgid "            keyword      same as -k"
 #~ msgstr "            keyword      то же, что -k"
@@ -7538,10 +7240,12 @@ msgstr ""
 #~ msgid "            physical     same as -P"
 #~ msgstr "            physical     то же, что -P"
 
-#~ msgid "            posix        change the behavior of bash where the default"
+#~ msgid ""
+#~ "            posix        change the behavior of bash where the default"
 #~ msgstr "            posix        привести поведение bash, по умолчанию не"
 
-#~ msgid "                         operation differs from the 1003.2 standard to"
+#~ msgid ""
+#~ "                         operation differs from the 1003.2 standard to"
 #~ msgstr "                        соответствующее стандарту 1003.2, в"
 
 #~ msgid "                         match the standard"
@@ -7559,14 +7263,18 @@ msgstr ""
 #~ msgid "            xtrace       same as -x"
 #~ msgstr "            xtrace       то же, что -x"
 
-#~ msgid "    -p  Turned on whenever the real and effective user ids do not match."
-#~ msgstr "    -p  Если реальный и эффективный uid не совпадают, включается всегда."
+#~ msgid ""
+#~ "    -p  Turned on whenever the real and effective user ids do not match."
+#~ msgstr ""
+#~ "    -p  Если реальный и эффективный uid не совпадают, включается всегда."
 
 #~ msgid "        Disables processing of the $ENV file and importing of shell"
 #~ msgstr "        Отключает обработку файла $ENV и импорт функций оболочки."
 
-#~ msgid "        functions.  Turning this option off causes the effective uid and"
-#~ msgstr "        При выключении этого параметра эффективные uid и gid становятся"
+#~ msgid ""
+#~ "        functions.  Turning this option off causes the effective uid and"
+#~ msgstr ""
+#~ "        При выключении этого параметра эффективные uid и gid становятся"
 
 #~ msgid "        gid to be set to the real uid and gid."
 #~ msgstr "        равными реальным."
@@ -7575,7 +7283,8 @@ msgstr ""
 #~ msgstr "    -t  Завершить работу после чтения и выполнения одной команды."
 
 #~ msgid "    -u  Treat unset variables as an error when substituting."
-#~ msgstr "    -u  При подстановке считать не установленные переменные ошибками."
+#~ msgstr ""
+#~ "    -u  При подстановке считать не установленные переменные ошибками."
 
 #~ msgid "    -v  Print shell input lines as they are read."
 #~ msgstr "    -v  Выводить прочитанные строки входного текста оболочки."
@@ -7599,7 +7308,8 @@ msgstr ""
 #~ msgstr "        обычных файлов при перенаправлении вывода."
 
 #~ msgid "    -P  If set, do not follow symbolic links when executing commands"
-#~ msgstr "    -P  Не следовать символическим ссылкам при выполнении таких команд,"
+#~ msgstr ""
+#~ "    -P  Не следовать символическим ссылкам при выполнении таких команд,"
 
 #~ msgid "        such as cd which change the current directory."
 #~ msgstr "        как cd, т.е. изменяющих текущий каталог."
@@ -7608,9 +7318,11 @@ msgstr ""
 #~ msgstr "Использование + вместо - отключает флаг. Эти флаги могут также"
 
 #~ msgid "flags can also be used upon invocation of the shell.  The current"
-#~ msgstr "использоваться при запуске оболочки. Текущий набор флагов содержится"
+#~ msgstr ""
+#~ "использоваться при запуске оболочки. Текущий набор флагов содержится"
 
-#~ msgid "set of flags may be found in $-.  The remaining n ARGs are positional"
+#~ msgid ""
+#~ "set of flags may be found in $-.  The remaining n ARGs are positional"
 #~ msgstr "в $-. Остальные n аргументов -- позиционные параметры, и им, по"
 
 #~ msgid "parameters and are assigned, in order, to $1, $2, .. $n.  If no"
@@ -7623,7 +7335,8 @@ msgstr ""
 #~ msgstr "Для каждого ИМЕНИ удаляет соответствующую переменную или функцию."
 
 #~ msgid "the `-v', unset will only act on variables.  Given the `-f' flag,"
-#~ msgstr "Если задано -v, unset влияет только на переменные, если -f -- только"
+#~ msgstr ""
+#~ "Если задано -v, unset влияет только на переменные, если -f -- только"
 
 #~ msgid "unset will only act on functions.  With neither flag, unset first"
 #~ msgstr "на функции. Без флагов unset в первую очередь пытается удалить"
@@ -7631,7 +7344,8 @@ msgstr ""
 #~ msgid "tries to unset a variable, and if that fails, then tries to unset a"
 #~ msgstr "переменную, если это не удаётся -- функцию. Некоторые переменные"
 
-#~ msgid "function.  Some variables (such as PATH and IFS) cannot be unset; also"
+#~ msgid ""
+#~ "function.  Some variables (such as PATH and IFS) cannot be unset; also"
 #~ msgstr "(такие как PATH и IFS) не могут быть удалены. См."
 
 #~ msgid "see readonly."
@@ -7658,19 +7372,24 @@ msgstr ""
 #~ msgid "processing."
 #~ msgstr "параметров."
 
-#~ msgid "The given NAMEs are marked readonly and the values of these NAMEs may"
-#~ msgstr "Заданные ИМЕНА помечаются только для чтения, и значения этих ИМЁН не"
+#~ msgid ""
+#~ "The given NAMEs are marked readonly and the values of these NAMEs may"
+#~ msgstr ""
+#~ "Заданные ИМЕНА помечаются только для чтения, и значения этих ИМЁН не"
 
 #~ msgid "not be changed by subsequent assignment.  If the -f option is given,"
-#~ msgstr "могут изменяться в последующих присваиваниях. Если задан параметр -f,"
+#~ msgstr ""
+#~ "могут изменяться в последующих присваиваниях. Если задан параметр -f,"
 
 #~ msgid "then functions corresponding to the NAMEs are so marked.  If no"
 #~ msgstr "так помечаются функции с соответствующими ИМЕНАМИ. Если аргументы"
 
-#~ msgid "arguments are given, or if `-p' is given, a list of all readonly names"
+#~ msgid ""
+#~ "arguments are given, or if `-p' is given, a list of all readonly names"
 #~ msgstr "не заданы, или если задано `-p', выводится список имён только для"
 
-#~ msgid "is printed.  An argument of `-n' says to remove the readonly property"
+#~ msgid ""
+#~ "is printed.  An argument of `-n' says to remove the readonly property"
 #~ msgstr "чтения.  Аргумент `-n' указывает снять свойство `только для чтения'"
 
 #~ msgid "from subsequent NAMEs.  The `-a' option means to treat each NAME as"
@@ -7679,8 +7398,10 @@ msgstr ""
 #~ msgid "an array variable.  An argument of `--' disables further option"
 #~ msgstr "как массив.  Аргумент `--' прекращает дальнейшую обработку"
 
-#~ msgid "The positional parameters from $N+1 ... are renamed to $1 ...  If N is"
-#~ msgstr "Позиционные параметры начиная с $N+1 переобозначаются как $1,... Если"
+#~ msgid ""
+#~ "The positional parameters from $N+1 ... are renamed to $1 ...  If N is"
+#~ msgstr ""
+#~ "Позиционные параметры начиная с $N+1 переобозначаются как $1,... Если"
 
 #~ msgid "not given, it is assumed to be 1."
 #~ msgstr "N не задано, оно предполагается равным 1."
@@ -7719,7 +7440,8 @@ msgstr ""
 #~ msgstr "    -b ФАЙЛ        Истина, если файл -- специальный блочный файл."
 
 #~ msgid "    -c FILE        True if file is character special."
-#~ msgstr "    -c ФАЙл        Истина, если файл -- специальный символьный файл."
+#~ msgstr ""
+#~ "    -c ФАЙл        Истина, если файл -- специальный символьный файл."
 
 #~ msgid "    -d FILE        True if file is a directory."
 #~ msgstr "    -d ФАЙЛ        Истина, если файл -- каталог."
@@ -7728,19 +7450,23 @@ msgstr ""
 #~ msgstr "    -e ФАЙЛ        Истина, если файл существует."
 
 #~ msgid "    -f FILE        True if file exists and is a regular file."
-#~ msgstr "    -f ФАЙЛ        Истина, если файл существует и является обычным файлом."
+#~ msgstr ""
+#~ "    -f ФАЙЛ        Истина, если файл существует и является обычным файлом."
 
 #~ msgid "    -g FILE        True if file is set-group-id."
 #~ msgstr "    -g ФАЙЛ        Истина, если у файла установлен атрибут SGID."
 
 #~ msgid "    -h FILE        True if file is a symbolic link.  Use \"-L\"."
-#~ msgstr "    -h ФАЙЛ        Истина, если файл -- символическая ссылка. Используйте \"-L\"."
+#~ msgstr ""
+#~ "    -h ФАЙЛ        Истина, если файл -- символическая ссылка. Используйте "
+#~ "\"-L\"."
 
 #~ msgid "    -L FILE        True if file is a symbolic link."
 #~ msgstr "    -L ФАЙЛ        Истина, если файл -- символическая ссылка."
 
 #~ msgid "    -k FILE        True if file has its \"sticky\" bit set."
-#~ msgstr "    -k ФАЙЛ        Истина, если у файла устанолвен \"бит привязчивости\"."
+#~ msgstr ""
+#~ "    -k ФАЙЛ        Истина, если у файла устанолвен \"бит привязчивости\"."
 
 #~ msgid "    -p FILE        True if file is a named pipe."
 #~ msgstr "    -p ФАЙЛ        Истина, если файл -- именованный канал."
@@ -7755,7 +7481,9 @@ msgstr ""
 #~ msgstr "    -S ФАЙЛ        Истина, если файл -- сокет."
 
 #~ msgid "    -t FD          True if FD is opened on a terminal."
-#~ msgstr "    -t FD          Истина, если файл с дескриптором FD связан с терминалом."
+#~ msgstr ""
+#~ "    -t FD          Истина, если файл с дескриптором FD связан с "
+#~ "терминалом."
 
 #~ msgid "    -u FILE        True if the file is set-user-id."
 #~ msgstr "    -u ФАЙЛ        Истина, если у файла установлен атрибут SUID."
@@ -7769,11 +7497,14 @@ msgstr ""
 #~ msgid "    -O FILE        True if the file is effectively owned by you."
 #~ msgstr "    -O ФАЙЛ        Истина, если вы -- эффективный владелец файла."
 
-#~ msgid "    -G FILE        True if the file is effectively owned by your group."
-#~ msgstr "    -G ФАЙЛ        Истина, если ваша группа -- эффективная группа файла."
+#~ msgid ""
+#~ "    -G FILE        True if the file is effectively owned by your group."
+#~ msgstr ""
+#~ "    -G ФАЙЛ        Истина, если ваша группа -- эффективная группа файла."
 
 #~ msgid "  FILE1 -nt FILE2  True if file1 is newer than (according to"
-#~ msgstr "  ФАЙЛ1 -nt ФАЙЛ2  Истина, если файл1 более новый (по дате последнего"
+#~ msgstr ""
+#~ "  ФАЙЛ1 -nt ФАЙЛ2  Истина, если файл1 более новый (по дате последнего"
 
 #~ msgid "                   modification date) file2."
 #~ msgstr "                   изменения), чем файл2."
@@ -7811,14 +7542,20 @@ msgstr ""
 #~ msgid "    STRING1 < STRING2"
 #~ msgstr "    СТРОКА1 < СТРОКА2"
 
-#~ msgid "                   True if STRING1 sorts before STRING2 lexicographically"
-#~ msgstr "                   Истина, если СТРОКА1 лексикографически стоит раньше СТРОКИ2"
+#~ msgid ""
+#~ "                   True if STRING1 sorts before STRING2 lexicographically"
+#~ msgstr ""
+#~ "                   Истина, если СТРОКА1 лексикографически стоит раньше "
+#~ "СТРОКИ2"
 
 #~ msgid "    STRING1 > STRING2"
 #~ msgstr "    СТРОКА1 > СТРОКА2"
 
-#~ msgid "                   True if STRING1 sorts after STRING2 lexicographically"
-#~ msgstr "                   Истина, если СТРОКА1 лексикографически стоит позже СТРОКИ2"
+#~ msgid ""
+#~ "                   True if STRING1 sorts after STRING2 lexicographically"
+#~ msgstr ""
+#~ "                   Истина, если СТРОКА1 лексикографически стоит позже "
+#~ "СТРОКИ2"
 
 #~ msgid "Other operators:"
 #~ msgstr "Прочие операции:"
@@ -7839,9 +7576,11 @@ msgstr ""
 #~ msgstr "                   -lt, -le, -gt или -ge."
 
 #~ msgid "Arithmetic binary operators return true if ARG1 is equal, not-equal,"
-#~ msgstr "Бинарные арифметические операции возвращают истину, если АРГ1 равен,"
+#~ msgstr ""
+#~ "Бинарные арифметические операции возвращают истину, если АРГ1 равен,"
 
-#~ msgid "less-than, less-than-or-equal, greater-than, or greater-than-or-equal"
+#~ msgid ""
+#~ "less-than, less-than-or-equal, greater-than, or greater-than-or-equal"
 #~ msgstr "не равен, меньше, меньше или равен, больше или больше или равен"
 
 #~ msgid "than ARG2."
@@ -7860,22 +7599,27 @@ msgstr ""
 #~ msgstr "запущенных из оболочки."
 
 #~ msgid "The command ARG is to be read and executed when the shell receives"
-#~ msgstr "Команда АРГ должна быть прочитана и выполнена при получении оболочкой"
+#~ msgstr ""
+#~ "Команда АРГ должна быть прочитана и выполнена при получении оболочкой"
 
 #~ msgid "signal(s) SIGNAL_SPEC.  If ARG is absent all specified signals are"
-#~ msgstr "указанного(ых) сигнала(ов). Если АРГ не задан, все указанные сигналы"
+#~ msgstr ""
+#~ "указанного(ых) сигнала(ов). Если АРГ не задан, все указанные сигналы"
 
 #~ msgid "reset to their original values.  If ARG is the null string each"
-#~ msgstr "обрабатываются обработчиками по умолчанию. Если АРГ -- пустая строка,"
+#~ msgstr ""
+#~ "обрабатываются обработчиками по умолчанию. Если АРГ -- пустая строка,"
 
 #~ msgid "SIGNAL_SPEC is ignored by the shell and by the commands it invokes."
-#~ msgstr "все указанные сигналы будут игнорироваться оболочкой и вызываемыми ей"
+#~ msgstr ""
+#~ "все указанные сигналы будут игнорироваться оболочкой и вызываемыми ей"
 
 #~ msgid "If SIGNAL_SPEC is EXIT (0) the command ARG is executed on exit from"
 #~ msgstr "командами. Если задан сигнал EXIT (0), команда АРГ выполняется при"
 
 #~ msgid "the shell.  If SIGNAL_SPEC is DEBUG, ARG is executed after every"
-#~ msgstr "выходе из оболочки, если DEBUG, АРГ выполняется при выполнении каждой"
+#~ msgstr ""
+#~ "выходе из оболочки, если DEBUG, АРГ выполняется при выполнении каждой"
 
 #~ msgid "command.  If ARG is `-p' then the trap commands associated with"
 #~ msgstr "команды. Если АРГ -- `-p', выводятся команды, связанные с заданными"
@@ -7886,10 +7630,12 @@ msgstr ""
 #~ msgid "only `-p' is given, trap prints the list of commands associated with"
 #~ msgstr "trap выводит список команд, связанных со всеми сигналами. Сигнал"
 
-#~ msgid "each signal number.  SIGNAL_SPEC is either a signal name in <signal.h>"
+#~ msgid ""
+#~ "each signal number.  SIGNAL_SPEC is either a signal name in <signal.h>"
 #~ msgstr "задаётся либо своим именем в <signal.h>, либо номером. `trap -l'"
 
-#~ msgid "or a signal number.  `trap -l' prints a list of signal names and their"
+#~ msgid ""
+#~ "or a signal number.  `trap -l' prints a list of signal names and their"
 #~ msgstr "выводит список имён сигналов и соответствующих им номеров."
 
 #~ msgid "corresponding numbers.  Note that a signal can be sent to the shell"
@@ -7904,26 +7650,33 @@ msgstr ""
 #~ msgid "If the -t option is used, returns a single word which is one of"
 #~ msgstr "Если задан параметр -t, возвращает слово -- `alias', `keyword',"
 
-#~ msgid "`alias', `keyword', `function', `builtin', `file' or `', if NAME is an"
+#~ msgid ""
+#~ "`alias', `keyword', `function', `builtin', `file' or `', if NAME is an"
 #~ msgstr "`function', `builtin', `file' или `' -- если, соответственно, ИМЯ"
 
-#~ msgid "alias, shell reserved word, shell function, shell builtin, disk file,"
+#~ msgid ""
+#~ "alias, shell reserved word, shell function, shell builtin, disk file,"
 #~ msgstr "является псевдокомандой, зарезервированным словом, функцией, или"
 
 #~ msgid "or unfound, respectively."
 #~ msgstr "встроенной командой оболочки, дисковым файлом или не найдено."
 
 #~ msgid "If the -p flag is used, either returns the name of the disk file"
-#~ msgstr "При использовании флага -p либо возвращается имя выполняемого дискового файла,"
+#~ msgstr ""
+#~ "При использовании флага -p либо возвращается имя выполняемого дискового "
+#~ "файла,"
 
 #~ msgid "that would be executed, or nothing if -t would not return `file'."
 #~ msgstr "либо ничего, если -t вернуло бы значение, отличное от  `file'"
 
 #~ msgid "If the -a flag is used, displays all of the places that contain an"
-#~ msgstr "При использовании флага -a выводится расположение всех исполняемых файлов"
+#~ msgstr ""
+#~ "При использовании флага -a выводится расположение всех исполняемых файлов"
 
-#~ msgid "executable named `file'.  This includes aliases and functions, if and"
-#~ msgstr "с указанным именем. Если одновременно не используется флаг -p и только"
+#~ msgid ""
+#~ "executable named `file'.  This includes aliases and functions, if and"
+#~ msgstr ""
+#~ "с указанным именем. Если одновременно не используется флаг -p и только"
 
 #~ msgid "only if the -p flag is not also used."
 #~ msgstr "тогда, выводятся также псевдокоманды и функции."
@@ -7983,16 +7736,19 @@ msgstr ""
 #~ msgstr "    -v\tразмер виртуальной памяти"
 
 #~ msgid "If LIMIT is given, it is the new value of the specified resource."
-#~ msgstr "Если задано ОГРАНИЧЕНИЕ, оно задёт новое значение для указанного ресурса."
+#~ msgstr ""
+#~ "Если задано ОГРАНИЧЕНИЕ, оно задёт новое значение для указанного ресурса."
 
 #~ msgid "Otherwise, the current value of the specified resource is printed."
-#~ msgstr "В противном случае выводится текущее значение для указанного ресурса."
+#~ msgstr ""
+#~ "В противном случае выводится текущее значение для указанного ресурса."
 
 #~ msgid "If no option is given, then -f is assumed.  Values are in 1k"
 #~ msgstr "Если параметры не заданы, предполагается, что задано -f. Значения"
 
 #~ msgid "increments, except for -t, which is in seconds, -p, which is in"
-#~ msgstr "измеряются в КБ, кроме -t, измеряемого в секундах, -p, единица измерения"
+#~ msgstr ""
+#~ "измеряются в КБ, кроме -t, измеряемого в секундах, -p, единица измерения"
 
 #~ msgid "increments of 512 bytes, and -u, which is an unscaled number of"
 #~ msgstr "которого -- 512 байтов, и -u, задающего безразмерное число"
@@ -8000,38 +7756,52 @@ msgstr ""
 #~ msgid "processes."
 #~ msgstr "процессов."
 
-#~ msgid "The user file-creation mask is set to MODE.  If MODE is omitted, or if"
-#~ msgstr "Устанавливает маску создания пользователем файлов в РЕЖИМ. Если опущен"
+#~ msgid ""
+#~ "The user file-creation mask is set to MODE.  If MODE is omitted, or if"
+#~ msgstr ""
+#~ "Устанавливает маску создания пользователем файлов в РЕЖИМ. Если опущен"
 
-#~ msgid "`-S' is supplied, the current value of the mask is printed.  The `-S'"
-#~ msgstr "РЕЖИМ или задан параметр -S выводится текущее значение маски. Параметр"
+#~ msgid ""
+#~ "`-S' is supplied, the current value of the mask is printed.  The `-S'"
+#~ msgstr ""
+#~ "РЕЖИМ или задан параметр -S выводится текущее значение маски. Параметр"
 
-#~ msgid "option makes the output symbolic; otherwise an octal number is output."
+#~ msgid ""
+#~ "option makes the output symbolic; otherwise an octal number is output."
 #~ msgstr "-S делает вывод символическим, в противном случае используется"
 
 #~ msgid "If MODE begins with a digit, it is interpreted as an octal number,"
-#~ msgstr "восьмеричое число. Если РЕЖИм начинается с цифры, он интерпретируется"
+#~ msgstr ""
+#~ "восьмеричое число. Если РЕЖИм начинается с цифры, он интерпретируется"
 
-#~ msgid "otherwise it is a symbolic mode string like that accepted by chmod(1)."
-#~ msgstr "как восьмеричное число, в противном случае как строка, принимаемая chmod(1)."
+#~ msgid ""
+#~ "otherwise it is a symbolic mode string like that accepted by chmod(1)."
+#~ msgstr ""
+#~ "как восьмеричное число, в противном случае как строка, принимаемая "
+#~ "chmod(1)."
 
-#~ msgid "Wait for the specified process and report its termination status.  If"
-#~ msgstr "Подождать завершения указанного процесса и сообщить код завершения. Если"
+#~ msgid ""
+#~ "Wait for the specified process and report its termination status.  If"
+#~ msgstr ""
+#~ "Подождать завершения указанного процесса и сообщить код завершения. Если"
 
 #~ msgid "N is not given, all currently active child processes are waited for,"
-#~ msgstr "N не задано, ожидается завершение работы всех активных дочерних процессов"
+#~ msgstr ""
+#~ "N не задано, ожидается завершение работы всех активных дочерних процессов"
 
 #~ msgid "and the return code is zero.  N may be a process ID or a job"
 #~ msgstr "и код возврата равен 0. N может быть идентификатором процесса"
 
 #~ msgid "specification; if a job spec is given, all processes in the job's"
-#~ msgstr "или спецификацией задачи, если задана спецификация задачи, ожидается"
+#~ msgstr ""
+#~ "или спецификацией задачи, если задана спецификация задачи, ожидается"
 
 #~ msgid "pipeline are waited for."
 #~ msgstr "завершение работы всех процессов конвейера задачи."
 
 #~ msgid "and the return code is zero.  N is a process ID; if it is not given,"
-#~ msgstr "и код возврата равен 0. N -- идентификатор процесса, если он не задан,"
+#~ msgstr ""
+#~ "и код возврата равен 0. N -- идентификатор процесса, если он не задан,"
 
 #~ msgid "all child processes of the shell are waited for."
 #~ msgstr "ожидается завершение работы всех дочерних процессов оболочки."
@@ -8039,10 +7809,13 @@ msgstr ""
 #~ msgid "The `for' loop executes a sequence of commands for each member in a"
 #~ msgstr "Цикл `for' выполняет последовательность команд для каждого члена"
 
-#~ msgid "list of items.  If `in WORDS ...;' is not present, then `in \"$@\"' is"
-#~ msgstr "списка. Если отсутствует `in СЛОВА ...;', предполагается, что задано"
+#~ msgid ""
+#~ "list of items.  If `in WORDS ...;' is not present, then `in \"$@\"' is"
+#~ msgstr ""
+#~ "списка. Если отсутствует `in СЛОВА ...;', предполагается, что задано"
 
-#~ msgid "assumed.  For each element in WORDS, NAME is set to that element, and"
+#~ msgid ""
+#~ "assumed.  For each element in WORDS, NAME is set to that element, and"
 #~ msgstr "`in \"$@\"'. Для каждого из СЛОВ ИМЕНИ присваивается его значение"
 
 #~ msgid "the COMMANDS are executed."
@@ -8052,13 +7825,15 @@ msgstr ""
 #~ msgstr "СЛОВА разворачиваются и образуют список слов. Полученный список"
 
 #~ msgid "set of expanded words is printed on the standard error, each"
-#~ msgstr "выводится на стандартный поток ошибок, каждому приписывается спереди"
+#~ msgstr ""
+#~ "выводится на стандартный поток ошибок, каждому приписывается спереди"
 
 #~ msgid "preceded by a number.  If `in WORDS' is not present, `in \"$@\"'"
 #~ msgstr "число. Если `in СЛОВА' отсутствует, предполагается заданным"
 
 #~ msgid "is assumed.  The PS3 prompt is then displayed and a line read"
-#~ msgstr "`in \"$@\"'. Затем выводится приглашение PS3 и со стандартного ввода"
+#~ msgstr ""
+#~ "`in \"$@\"'. Затем выводится приглашение PS3 и со стандартного ввода"
 
 #~ msgid "from the standard input.  If the line consists of the number"
 #~ msgstr "считывается строка. Если строка состоит из числа, соответствующего"
@@ -8079,34 +7854,47 @@ msgstr ""
 #~ msgstr "сохраняется в переменной REPLY. После каждого выбора выполняются"
 
 #~ msgid "until a break or return command is executed."
-#~ msgstr "КОМАНДЫ до тех пор, пока не будет выполнена команда break или return."
+#~ msgstr ""
+#~ "КОМАНДЫ до тех пор, пока не будет выполнена команда break или return."
 
 #~ msgid "Selectively execute COMMANDS based upon WORD matching PATTERN.  The"
-#~ msgstr "Выполняет КОМАНДЫ в зависимости от того, какому ШАБЛОНУ соответствует"
+#~ msgstr ""
+#~ "Выполняет КОМАНДЫ в зависимости от того, какому ШАБЛОНУ соответствует"
 
 #~ msgid "`|' is used to separate multiple patterns."
-#~ msgstr "СЛОВО. Для разделения нескольких допустимых шаблонов используется `|'."
+#~ msgstr ""
+#~ "СЛОВО. Для разделения нескольких допустимых шаблонов используется `|'."
 
-#~ msgid "The if COMMANDS are executed.  If the exit status is zero, then the then"
-#~ msgstr "Выполняются КОМАНДЫ, заданные в if. Если код возврата нулевой, выполняются"
+#~ msgid ""
+#~ "The if COMMANDS are executed.  If the exit status is zero, then the then"
+#~ msgstr ""
+#~ "Выполняются КОМАНДЫ, заданные в if. Если код возврата нулевой, выполняются"
 
-#~ msgid "COMMANDS are executed.  Otherwise, each of the elif COMMANDS are executed"
+#~ msgid ""
+#~ "COMMANDS are executed.  Otherwise, each of the elif COMMANDS are executed"
 #~ msgstr "КОМАНДЫ then, иначе по очереди выполняются КОМАНДЫ elif, и если код"
 
-#~ msgid "in turn, and if the exit status is zero, the corresponding then COMMANDS"
-#~ msgstr "возврата нулевой, выполняются соответствующие КОМАНДЫ then и выполнение"
+#~ msgid ""
+#~ "in turn, and if the exit status is zero, the corresponding then COMMANDS"
+#~ msgstr ""
+#~ "возврата нулевой, выполняются соответствующие КОМАНДЫ then и выполнение"
 
-#~ msgid "are executed and the if command completes.  Otherwise, the else COMMANDS"
-#~ msgstr "команды if завершается. В противном случае выполняются КОМАНДЫ else,"
+#~ msgid ""
+#~ "are executed and the if command completes.  Otherwise, the else COMMANDS"
+#~ msgstr ""
+#~ "команды if завершается. В противном случае выполняются КОМАНДЫ else,"
 
-#~ msgid "are executed, if present.  The exit status is the exit status of the last"
+#~ msgid ""
+#~ "are executed, if present.  The exit status is the exit status of the last"
 #~ msgstr "если они присутствуют. Код возврата равен коду возврата последней"
 
 #~ msgid "command executed, or zero if no condition tested true."
-#~ msgstr "выполненной команды, либо нулю, если ни одно условие не было истинным."
+#~ msgstr ""
+#~ "выполненной команды, либо нулю, если ни одно условие не было истинным."
 
 #~ msgid "Expand and execute COMMANDS as long as the final command in the"
-#~ msgstr "Разворачивает и выполняет КОМАНДЫ до тех пор, пока последняя команда"
+#~ msgstr ""
+#~ "Разворачивает и выполняет КОМАНДЫ до тех пор, пока последняя команда"
 
 #~ msgid "`while' COMMANDS has an exit status of zero."
 #~ msgstr "предложения `while' не завершит работу с нулевым кодом возврата."
@@ -8130,12 +7918,15 @@ msgstr ""
 #~ msgstr "перенаправление для целого набора команд."
 
 #~ msgid "This is similar to the `fg' command.  Resume a stopped or background"
-#~ msgstr "Похоже на команду `fg'. Продолжает выполнение остановленной или фоновой"
+#~ msgstr ""
+#~ "Похоже на команду `fg'. Продолжает выполнение остановленной или фоновой"
 
 #~ msgid "job.  If you specifiy DIGITS, then that job is used.  If you specify"
-#~ msgstr "задачи. Если заданы ЦИФРЫ, использяется задача с этим номером, а если"
+#~ msgstr ""
+#~ "задачи. Если заданы ЦИФРЫ, использяется задача с этим номером, а если"
 
-#~ msgid "WORD, then the job whose name begins with WORD is used.  Following the"
+#~ msgid ""
+#~ "WORD, then the job whose name begins with WORD is used.  Following the"
 #~ msgstr "СЛОВО -- задача, имя которой начинается с этого слова. Завершение"
 
 #~ msgid "job specification with a `&' places the job in the background."
@@ -8150,7 +7941,8 @@ msgstr ""
 #~ msgid "\t\twhen the argument to `cd' is not found in the current"
 #~ msgstr "\t\tаргумент команды `cd', если он не найден в текущем"
 
-#~ msgid "HISTFILE        The name of the file where your command history is stored."
+#~ msgid ""
+#~ "HISTFILE        The name of the file where your command history is stored."
 #~ msgstr "HISTFILE        Имя файла, где сохраняется история команд."
 
 #~ msgid "HISTFILESIZE    The maximum number of lines this file can contain."
@@ -8165,11 +7957,15 @@ msgstr ""
 #~ msgid "HOME            The complete pathname to your login directory."
 #~ msgstr "HOME            Полный путь к домашнему каталогу."
 
-#~ msgid "HOSTTYPE        The type of CPU this version of Bash is running under."
-#~ msgstr "HOSTTYPE        Тип процессора, на котором работает эта версия Bash."
+#~ msgid ""
+#~ "HOSTTYPE        The type of CPU this version of Bash is running under."
+#~ msgstr ""
+#~ "HOSTTYPE        Тип процессора, на котором работает эта версия Bash."
 
-#~ msgid "IGNOREEOF       Controls the action of the shell on receipt of an EOF"
-#~ msgstr "IGNOREEOF       Управляет действиями, совершаемыми оболочкой при вводе"
+#~ msgid ""
+#~ "IGNOREEOF       Controls the action of the shell on receipt of an EOF"
+#~ msgstr ""
+#~ "IGNOREEOF       Управляет действиями, совершаемыми оболочкой при вводе"
 
 #~ msgid "\t\tcharacter as the sole input.  If set, then the value"
 #~ msgstr "\t\tсимвола конца файла. Если установлена, её значение -- число"
@@ -8181,10 +7977,12 @@ msgstr ""
 #~ msgstr "\t\tв пустой строке, после чего оболочка завершит работу"
 
 #~ msgid "\t\t(default 10).  When unset, EOF signifies the end of input."
-#~ msgstr "\t\t(по умолчанию 10). Если не установлена, EOF обозначает конец ввода."
+#~ msgstr ""
+#~ "\t\t(по умолчанию 10). Если не установлена, EOF обозначает конец ввода."
 
 #~ msgid "MAILCHECK\tHow often, in seconds, Bash checks for new mail."
-#~ msgstr "MAILCHECK\tКак часто, в секундах, Bash проверяет наличие новой почты."
+#~ msgstr ""
+#~ "MAILCHECK\tКак часто, в секундах, Bash проверяет наличие новой почты."
 
 #~ msgid "MAILPATH\tA colon-separated list of filenames which Bash checks"
 #~ msgstr "MAILPATH\tРазделённый запятыми список имён файлов, где Bash"
@@ -8217,7 +8015,8 @@ msgstr ""
 #~ msgstr "TERM            Имя типа текущего терминала."
 
 #~ msgid "auto_resume     Non-null means a command word appearing on a line by"
-#~ msgstr "auto_resume     Ненулевые значения слов команд, встречающиеся в строке"
+#~ msgstr ""
+#~ "auto_resume     Ненулевые значения слов команд, встречающиеся в строке"
 
 #~ msgid "\t\titself is first looked for in the list of currently"
 #~ msgstr "\t\tотдельно, сначала ищутся в списке остановленных"
@@ -8243,8 +8042,10 @@ msgstr ""
 #~ msgid "command_oriented_history"
 #~ msgstr "command_oriented_history"
 
-#~ msgid "                Non-null means to save multiple-line commands together on"
-#~ msgstr "                Ненулевое значение означает, что многострочные команды"
+#~ msgid ""
+#~ "                Non-null means to save multiple-line commands together on"
+#~ msgstr ""
+#~ "                Ненулевое значение означает, что многострочные команды"
 
 #~ msgid "                a single history line."
 #~ msgstr "                будут сохраняться в одной строке истории."
@@ -8342,7 +8143,8 @@ msgstr ""
 #~ msgid "\tremoves the last directory, `popd -1' the next to last."
 #~ msgstr "\tудаляет последний каталог, `popd -1' -- предпоследний."
 
-#~ msgid "-n\tsuppress the normal change of directory when removing directories"
+#~ msgid ""
+#~ "-n\tsuppress the normal change of directory when removing directories"
 #~ msgstr "-n\tподавляет обычную смену каталога при удалении каталогов из"
 
 #~ msgid "\tfrom the stack, so only the stack is manipulated."
@@ -8352,15 +8154,19 @@ msgstr ""
 #~ msgstr "Выводит список запомненных на данный момент каталогов. Каталоги"
 
 #~ msgid "find their way onto the list with the `pushd' command; you can get"
-#~ msgstr "попадают в список при использовании команды `pushd', вы можете забрать"
+#~ msgstr ""
+#~ "попадают в список при использовании команды `pushd', вы можете забрать"
 
 #~ msgid "back up through the list with the `popd' command."
 #~ msgstr "их из списка командой `popd'."
 
-#~ msgid "The -l flag specifies that `dirs' should not print shorthand versions"
-#~ msgstr "Флаг -l указывает, что `dirs' не должна выводит сокращённые варианты"
+#~ msgid ""
+#~ "The -l flag specifies that `dirs' should not print shorthand versions"
+#~ msgstr ""
+#~ "Флаг -l указывает, что `dirs' не должна выводит сокращённые варианты"
 
-#~ msgid "of directories which are relative to your home directory.  This means"
+#~ msgid ""
+#~ "of directories which are relative to your home directory.  This means"
 #~ msgstr "каталогов, заданных относительно домашнего. Это означает, что"
 
 #~ msgid "that `~/bin' might be displayed as `/homes/bfox/bin'.  The -v flag"
@@ -8369,22 +8175,27 @@ msgstr ""
 #~ msgid "causes `dirs' to print the directory stack with one entry per line,"
 #~ msgstr "заставляет `dirs' выводить каталоги по одному в строке, предваряя"
 
-#~ msgid "prepending the directory name with its position in the stack.  The -p"
-#~ msgstr "имя каталога номером его позиции в стеке. Флаг -p делает то же самое,"
+#~ msgid ""
+#~ "prepending the directory name with its position in the stack.  The -p"
+#~ msgstr ""
+#~ "имя каталога номером его позиции в стеке. Флаг -p делает то же самое,"
 
 #~ msgid "flag does the same thing, but the stack position is not prepended."
 #~ msgstr "но не добавляются номера позиций. Флаг -c очищает стек каталогов,"
 
-#~ msgid "The -c flag clears the directory stack by deleting all of the elements."
+#~ msgid ""
+#~ "The -c flag clears the directory stack by deleting all of the elements."
 #~ msgstr "удаляя все его элементы."
 
-#~ msgid "+N\tdisplays the Nth entry counting from the left of the list shown by"
+#~ msgid ""
+#~ "+N\tdisplays the Nth entry counting from the left of the list shown by"
 #~ msgstr "+N\tвыводит N-й каталог, считая с левой стороны списка, выводимого"
 
 #~ msgid "\tdirs when invoked without options, starting with zero."
 #~ msgstr "\tdirs при вызове без параметров, начиная с нуля."
 
-#~ msgid "-N\tdisplays the Nth entry counting from the right of the list shown by"
+#~ msgid ""
+#~ "-N\tdisplays the Nth entry counting from the right of the list shown by"
 #~ msgstr "-N\tвыводит N-й каталог, считая с правой стороны списка, выводимого"
 
 #~ msgid "Toggle the values of variables controlling optional behavior."
index c6c89c52bf64cd40fba6651e2a096e722872b2fc..22b4af3406770334eb00ac947e23fb48f01b97d5 100644 (file)
Binary files a/po/sk.gmo and b/po/sk.gmo differ
index f0b750fd7a08d20ce3b4d6bc776b29b5660af233..663505dea6a7cc96ae7fc9ac4d655f45f27fe0ca 100644 (file)
--- a/po/sk.po
+++ b/po/sk.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: bash 4.2\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-11-28 12:51-0500\n"
+"POT-Creation-Date: 2022-01-11 14:50-0500\n"
 "PO-Revision-Date: 2011-03-16 21:22+0100\n"
 "Last-Translator: Ivan Masár <helix84@centrum.sk>\n"
 "Language-Team: Slovak <sk-i18n@lists.linux.sk>\n"
@@ -22,58 +22,53 @@ msgstr ""
 msgid "bad array subscript"
 msgstr "chybný index poľa"
 
-#: arrayfunc.c:421 builtins/declare.def:638 variables.c:2274 variables.c:2300
-#: variables.c:3133
+#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268
+#: variables.c:3101
 #, c-format
 msgid "%s: removing nameref attribute"
 msgstr ""
 
-#: arrayfunc.c:446 builtins/declare.def:851
+#: arrayfunc.c:496 builtins/declare.def:868
 #, c-format
 msgid "%s: cannot convert indexed to associative array"
 msgstr "%s: nie je možné previesť indexované pole na asociatívne"
 
-#: arrayfunc.c:700
-#, c-format
-msgid "%s: invalid associative array key"
-msgstr "%s: neplatný kľúč asociatívneho poľa"
-
-#: arrayfunc.c:702
+#: arrayfunc.c:777
 #, c-format
 msgid "%s: cannot assign to non-numeric index"
 msgstr "%s: nie je možné priradiť nenumerickému indexu"
 
-#: arrayfunc.c:747
+#: arrayfunc.c:822
 #, c-format
 msgid "%s: %s: must use subscript when assigning associative array"
 msgstr "%s: %s: pri priraďovaní asociatívnemu poľu je potrebné použiť index"
 
-#: bashhist.c:452
+#: bashhist.c:455
 #, c-format
 msgid "%s: cannot create: %s"
 msgstr "%s: nie je možné vytvoriť: %s"
 
-#: bashline.c:4310
+#: bashline.c:4479
 msgid "bash_execute_unix_command: cannot find keymap for command"
 msgstr ""
 "bash_execute_unix_command: nie je možné nájsť klávesovú mapu pre príkaz"
 
-#: bashline.c:4459
+#: bashline.c:4637
 #, c-format
 msgid "%s: first non-whitespace character is not `\"'"
 msgstr "%s: prvý znak (okrem bielych znakov) nie je „\"“"
 
-#: bashline.c:4488
+#: bashline.c:4666
 #, c-format
 msgid "no closing `%c' in %s"
 msgstr "chýba zatvárajúca „%c“ v %s"
 
-#: bashline.c:4519
+#: bashline.c:4697
 #, c-format
 msgid "%s: missing colon separator"
 msgstr "%s: chýba oddeľovač dvojbodka"
 
-#: bashline.c:4555
+#: bashline.c:4733
 #, fuzzy, c-format
 msgid "`%s': cannot unbind in command keymap"
 msgstr "„%s“: nie je možné zrušiť väzbu (unbind)"
@@ -93,7 +88,7 @@ msgstr ""
 msgid "brace expansion: failed to allocate memory for `%s'"
 msgstr ""
 
-#: builtins/alias.def:131 variables.c:1844
+#: builtins/alias.def:131 variables.c:1817
 #, c-format
 msgid "`%s': invalid alias name"
 msgstr "„%s“: neplatný názov aliasu"
@@ -168,7 +163,7 @@ msgstr ""
 msgid "HOME not set"
 msgstr "HOME nebola nastavená"
 
-#: builtins/cd.def:335 builtins/common.c:161 test.c:901
+#: builtins/cd.def:335 builtins/common.c:161 test.c:916
 msgid "too many arguments"
 msgstr "príliš veľa argumentov"
 
@@ -196,7 +191,7 @@ msgstr "upozornenie: "
 msgid "%s: usage: "
 msgstr "%s: použitie "
 
-#: builtins/common.c:193 shell.c:516 shell.c:844
+#: builtins/common.c:193 shell.c:524 shell.c:866
 #, c-format
 msgid "%s: option requires an argument"
 msgstr "%s: voľba vyžaduje argument"
@@ -211,7 +206,7 @@ msgstr "%s: vyžaduje sa numerický argument"
 msgid "%s: not found"
 msgstr "%s: nenájdené"
 
-#: builtins/common.c:216 shell.c:857
+#: builtins/common.c:216 shell.c:879
 #, c-format
 msgid "%s: invalid option"
 msgstr "%s: neplatná voľba"
@@ -221,7 +216,7 @@ msgstr "%s: neplatná voľba"
 msgid "%s: invalid option name"
 msgstr "%s: neplatný názov voľby"
 
-#: builtins/common.c:230 execute_cmd.c:2373 general.c:368 general.c:373
+#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373
 #, c-format
 msgid "`%s': not a valid identifier"
 msgstr "„%s“: nie je platný identifikátor"
@@ -234,7 +229,7 @@ msgstr "neplatné osmičkové číslo"
 msgid "invalid hex number"
 msgstr "neplatné šestnástkové číslo"
 
-#: builtins/common.c:244 expr.c:1569
+#: builtins/common.c:244 expr.c:1574
 msgid "invalid number"
 msgstr "neplatné číslo"
 
@@ -248,88 +243,93 @@ msgstr "%s: neplatné určenie signálu"
 msgid "`%s': not a pid or valid job spec"
 msgstr "„%s“: nie je pid ani platný špecifikátor úlohy"
 
-#: builtins/common.c:266 error.c:510
+#: builtins/common.c:266 error.c:536
 #, c-format
 msgid "%s: readonly variable"
 msgstr "%s: premenná len na čítanie"
 
-#: builtins/common.c:274
+#: builtins/common.c:273
+#, fuzzy, c-format
+msgid "%s: cannot assign"
+msgstr "%s: nie je možné zrušiť"
+
+#: builtins/common.c:281
 #, c-format
 msgid "%s: %s out of range"
 msgstr "%s: %s je mimo rozsahu"
 
-#: builtins/common.c:274 builtins/common.c:276
+#: builtins/common.c:281 builtins/common.c:283
 msgid "argument"
 msgstr "argument"
 
-#: builtins/common.c:276
+#: builtins/common.c:283
 #, c-format
 msgid "%s out of range"
 msgstr "%s mimo rozsahu"
 
-#: builtins/common.c:284
+#: builtins/common.c:291
 #, c-format
 msgid "%s: no such job"
 msgstr "%s: taká úloha neexistuje"
 
-#: builtins/common.c:292
+#: builtins/common.c:299
 #, c-format
 msgid "%s: no job control"
 msgstr "%s: riadenie úloh nedostupné"
 
-#: builtins/common.c:294
+#: builtins/common.c:301
 msgid "no job control"
 msgstr "riadenie úloh nedostupné"
 
-#: builtins/common.c:304
+#: builtins/common.c:311
 #, c-format
 msgid "%s: restricted"
 msgstr "%s: obmedzené"
 
-#: builtins/common.c:306
+#: builtins/common.c:313
 msgid "restricted"
 msgstr "obmedzené"
 
-#: builtins/common.c:314
+#: builtins/common.c:321
 #, c-format
 msgid "%s: not a shell builtin"
 msgstr "%s: nie je vstavaný príkaz (builtin) shellu"
 
-#: builtins/common.c:323
+#: builtins/common.c:330
 #, c-format
 msgid "write error: %s"
 msgstr "chyba zapisovania: %s"
 
-#: builtins/common.c:331
+#: builtins/common.c:338
 #, c-format
 msgid "error setting terminal attributes: %s"
 msgstr "chyba pri nastavovaní atribútov terminálu: %s"
 
-#: builtins/common.c:333
+#: builtins/common.c:340
 #, c-format
 msgid "error getting terminal attributes: %s"
 msgstr "chyba pri zisťovaní atribútov terminálu: %s"
 
-#: builtins/common.c:635
+#: builtins/common.c:642
 #, c-format
 msgid "%s: error retrieving current directory: %s: %s\n"
 msgstr "%s: chyba pri zisťovaní aktuálneho adresára: %s: %s\n"
 
-#: builtins/common.c:701 builtins/common.c:703
+#: builtins/common.c:708 builtins/common.c:710
 #, c-format
 msgid "%s: ambiguous job spec"
 msgstr "%s: nejednoznačné určenie úlohy"
 
-#: builtins/common.c:964
+#: builtins/common.c:971
 msgid "help not available in this version"
 msgstr ""
 
-#: builtins/common.c:1008 builtins/set.def:953 variables.c:3839
+#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825
 #, c-format
 msgid "%s: cannot unset: readonly %s"
 msgstr "%s: nie je možné zrušiť: len na čítanie %s"
 
-#: builtins/common.c:1013 builtins/set.def:932 variables.c:3844
+#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830
 #, c-format
 msgid "%s: cannot unset"
 msgstr "%s: nie je možné zrušiť"
@@ -339,108 +339,108 @@ msgstr "%s: nie je možné zrušiť"
 msgid "%s: invalid action name"
 msgstr "%s: neplatný názov akcie"
 
-#: builtins/complete.def:486 builtins/complete.def:634
-#: builtins/complete.def:865
+#: builtins/complete.def:486 builtins/complete.def:642
+#: builtins/complete.def:873
 #, c-format
 msgid "%s: no completion specification"
 msgstr "%s: chýba špecifikácia dokončovania"
 
-#: builtins/complete.def:688
+#: builtins/complete.def:696
 msgid "warning: -F option may not work as you expect"
 msgstr "upozornenie: voľba -F nemusí fungovať tak ako očakávate"
 
-#: builtins/complete.def:690
+#: builtins/complete.def:698
 msgid "warning: -C option may not work as you expect"
 msgstr "upozornenie: voľba -C nemusí fungovať tak ako očakávate"
 
-#: builtins/complete.def:838
+#: builtins/complete.def:846
 msgid "not currently executing completion function"
 msgstr "momentálne sa nevykonáva funkcia doplňovania"
 
-#: builtins/declare.def:134
+#: builtins/declare.def:137
 msgid "can only be used in a function"
 msgstr "je možné použiť iba vo funkcii"
 
-#: builtins/declare.def:363 builtins/declare.def:756
+#: builtins/declare.def:437
+msgid "cannot use `-f' to make functions"
+msgstr "nie je možné použiť „-f“ pre tvorbu funkcií"
+
+#: builtins/declare.def:464 execute_cmd.c:6132
+#, c-format
+msgid "%s: readonly function"
+msgstr "%s: funkcia iba na čítanie"
+
+#: builtins/declare.def:521 builtins/declare.def:804
 #, c-format
 msgid "%s: reference variable cannot be an array"
 msgstr ""
 
-#: builtins/declare.def:374 variables.c:3385
+#: builtins/declare.def:532 variables.c:3359
 #, c-format
 msgid "%s: nameref variable self references not allowed"
 msgstr ""
 
-#: builtins/declare.def:379 variables.c:2104 variables.c:3304 variables.c:3312
-#: variables.c:3382
+#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286
+#: variables.c:3356
 #, c-format
 msgid "%s: circular name reference"
 msgstr ""
 
-#: builtins/declare.def:384 builtins/declare.def:762 builtins/declare.def:773
+#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820
 #, fuzzy, c-format
 msgid "`%s': invalid variable name for name reference"
 msgstr "„%s“: neplatný názov aliasu"
 
-#: builtins/declare.def:514
-msgid "cannot use `-f' to make functions"
-msgstr "nie je možné použiť „-f“ pre tvorbu funkcií"
-
-#: builtins/declare.def:526 execute_cmd.c:5986
-#, c-format
-msgid "%s: readonly function"
-msgstr "%s: funkcia iba na čítanie"
-
-#: builtins/declare.def:824
-#, c-format
-msgid "%s: quoted compound array assignment deprecated"
-msgstr ""
-
-#: builtins/declare.def:838
+#: builtins/declare.def:856
 #, c-format
 msgid "%s: cannot destroy array variables in this way"
 msgstr "%s: nie je možné takto robiť deštrukciu premenných polí"
 
-#: builtins/declare.def:845 builtins/read.def:815
+#: builtins/declare.def:862 builtins/read.def:887
 #, c-format
 msgid "%s: cannot convert associative to indexed array"
 msgstr "%s: nie je možné previesť asociatívne pole na indexované"
 
-#: builtins/enable.def:143 builtins/enable.def:151
+#: builtins/declare.def:891
+#, c-format
+msgid "%s: quoted compound array assignment deprecated"
+msgstr ""
+
+#: builtins/enable.def:145 builtins/enable.def:153
 msgid "dynamic loading not available"
 msgstr "dynamické načítavanie nie je dostupné"
 
-#: builtins/enable.def:343
+#: builtins/enable.def:376
 #, c-format
 msgid "cannot open shared object %s: %s"
 msgstr "nie je možné otvoriť zdieľaný objekt %s: %s"
 
-#: builtins/enable.def:371
+#: builtins/enable.def:405
 #, c-format
 msgid "cannot find %s in shared object %s: %s"
 msgstr "nemožem nájsť %s v zdieľanom objekte %s: %s"
 
-#: builtins/enable.def:388
+#: builtins/enable.def:422
 #, fuzzy, c-format
 msgid "%s: dynamic builtin already loaded"
 msgstr "%s: nie je dynamicky načítané"
 
-#: builtins/enable.def:392
+#: builtins/enable.def:426
 #, c-format
 msgid "load function for %s returns failure (%d): not loaded"
 msgstr ""
 
-#: builtins/enable.def:517
+#: builtins/enable.def:551
 #, c-format
 msgid "%s: not dynamically loaded"
 msgstr "%s: nie je dynamicky načítané"
 
-#: builtins/enable.def:543
+#: builtins/enable.def:577
 #, c-format
 msgid "%s: cannot delete: %s"
 msgstr "%s: nie je možné zmazať: %s"
 
-#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5818
+#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959
 #, c-format
 msgid "%s: is a directory"
 msgstr "%s: je adresár"
@@ -455,7 +455,7 @@ msgstr "%s: nie je obyčajný súbor"
 msgid "%s: file is too large"
 msgstr "%s: súbor je príliš veľký"
 
-#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1647
+#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673
 #, c-format
 msgid "%s: cannot execute binary file"
 msgstr "%s: nie je možné vykonať binárny súbor"
@@ -552,12 +552,12 @@ msgstr ""
 "pre „%s“ neboli nájdené zodpovedajúce témy pomocníka.\n"
 "Skúste „help help“ alebo „man -k %s“ alebo „info %s“."
 
-#: builtins/help.def:224
+#: builtins/help.def:223
 #, c-format
 msgid "%s: cannot open: %s"
 msgstr "%s: nie je možné otvoriť: %s"
 
-#: builtins/help.def:524
+#: builtins/help.def:523
 #, c-format
 msgid ""
 "These shell commands are defined internally.  Type `help' to see this list.\n"
@@ -578,21 +578,21 @@ msgstr ""
 "Hviezdička (*) vedľa názvu znamená, že príkaz je vypnutý.\n"
 "\n"
 
-#: builtins/history.def:155
+#: builtins/history.def:159
 msgid "cannot use more than one of -anrw"
 msgstr "nie je možné použiť viac ako jednu z volieb -anrw"
 
-#: builtins/history.def:188 builtins/history.def:198 builtins/history.def:213
-#: builtins/history.def:230 builtins/history.def:242 builtins/history.def:249
+#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215
+#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247
 msgid "history position"
 msgstr "poloha histórie"
 
-#: builtins/history.def:340
+#: builtins/history.def:338
 #, fuzzy, c-format
 msgid "%s: invalid timestamp"
 msgstr "%s: neplatný názov voľby"
 
-#: builtins/history.def:451
+#: builtins/history.def:449
 #, c-format
 msgid "%s: history expansion failed"
 msgstr "%s: rozšírenie histórie zlyhalo"
@@ -615,78 +615,78 @@ msgstr "%s: argumenty musia byť ID procesov alebo úloh"
 msgid "Unknown error"
 msgstr "Neznáma chyba"
 
-#: builtins/let.def:97 builtins/let.def:122 expr.c:639 expr.c:657
+#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658
 msgid "expression expected"
 msgstr "očakával sa výraz"
 
-#: builtins/mapfile.def:178
+#: builtins/mapfile.def:180
 #, c-format
 msgid "%s: not an indexed array"
 msgstr "%s: nie je indexované pole"
 
-#: builtins/mapfile.def:271 builtins/read.def:308
+#: builtins/mapfile.def:276 builtins/read.def:336
 #, c-format
 msgid "%s: invalid file descriptor specification"
 msgstr "%s: neplatná špecifikácia popisovača súboru"
 
-#: builtins/mapfile.def:279 builtins/read.def:315
+#: builtins/mapfile.def:284 builtins/read.def:343
 #, c-format
 msgid "%d: invalid file descriptor: %s"
 msgstr "%d: neplatný popisovač súboru: %s"
 
-#: builtins/mapfile.def:288 builtins/mapfile.def:326
+#: builtins/mapfile.def:293 builtins/mapfile.def:331
 #, c-format
 msgid "%s: invalid line count"
 msgstr "%s: neplatný počet riadkov"
 
-#: builtins/mapfile.def:299
+#: builtins/mapfile.def:304
 #, c-format
 msgid "%s: invalid array origin"
 msgstr "%s: neplatný začiatok poľa"
 
-#: builtins/mapfile.def:316
+#: builtins/mapfile.def:321
 #, c-format
 msgid "%s: invalid callback quantum"
 msgstr "%s: neplatné kvantum spätného volania"
 
-#: builtins/mapfile.def:349
+#: builtins/mapfile.def:354
 msgid "empty array variable name"
 msgstr "názov prázdnej premennej poľa"
 
-#: builtins/mapfile.def:370
+#: builtins/mapfile.def:375
 msgid "array variable support required"
 msgstr "vyžaduje sa podpora premennej poľa"
 
-#: builtins/printf.def:419
+#: builtins/printf.def:430
 #, c-format
 msgid "`%s': missing format character"
 msgstr "„%s“: chýba formátovací znak"
 
-#: builtins/printf.def:474
+#: builtins/printf.def:485
 #, c-format
 msgid "`%c': invalid time format specification"
 msgstr "„%c“: neplatná špecifikácia formátu času"
 
-#: builtins/printf.def:676
+#: builtins/printf.def:708
 #, c-format
 msgid "`%c': invalid format character"
 msgstr "„%c“: neplatný formátovací znak"
 
-#: builtins/printf.def:702
+#: builtins/printf.def:734
 #, c-format
 msgid "warning: %s: %s"
 msgstr "upozornenie: %s: %s"
 
-#: builtins/printf.def:788
+#: builtins/printf.def:822
 #, c-format
 msgid "format parsing problem: %s"
 msgstr ""
 
-#: builtins/printf.def:885
+#: builtins/printf.def:919
 msgid "missing hex digit for \\x"
 msgstr "chýba hexadecimálna číslica v \\x"
 
-#: builtins/printf.def:900
+#: builtins/printf.def:934
 #, c-format
 msgid "missing unicode digit for \\%c"
 msgstr "chýba číslica Unicode pre \\%c"
@@ -837,12 +837,12 @@ msgstr ""
 "    \n"
 "    Zásobník adresárov môžete zobraziť vstavaným príkazom „dirs“."
 
-#: builtins/read.def:280
+#: builtins/read.def:308
 #, c-format
 msgid "%s: invalid timeout specification"
 msgstr "%s: neplatná špecifikácia expirácie (timeout)"
 
-#: builtins/read.def:755
+#: builtins/read.def:827
 #, c-format
 msgid "read error: %d: %s"
 msgstr "chyba pri čítaní: %d: %s"
@@ -857,7 +857,7 @@ msgstr ""
 msgid "cannot simultaneously unset a function and a variable"
 msgstr "nie je možné zároveň zrušiť funkciu a premennú"
 
-#: builtins/set.def:966
+#: builtins/set.def:969
 #, c-format
 msgid "%s: not an array variable"
 msgstr "%s: nie je premenná poľa"
@@ -876,11 +876,11 @@ msgstr "%s: nie je možné zrušiť"
 msgid "shift count"
 msgstr "posun o"
 
-#: builtins/shopt.def:310
+#: builtins/shopt.def:323
 msgid "cannot set and unset shell options simultaneously"
 msgstr "nie je možné zároveň nastaviť aj zrušiť voľby shellu"
 
-#: builtins/shopt.def:428
+#: builtins/shopt.def:444
 #, c-format
 msgid "%s: invalid shell option name"
 msgstr "%s: neplatný názov voľby shellu"
@@ -947,16 +947,16 @@ msgstr "%s: neplatný argument limitu"
 msgid "`%c': bad command"
 msgstr "„%c“: chybný príkaz"
 
-#: builtins/ulimit.def:455
+#: builtins/ulimit.def:464
 #, c-format
 msgid "%s: cannot get limit: %s"
 msgstr "%s: nie je možné zistiť limit: %s"
 
-#: builtins/ulimit.def:481
+#: builtins/ulimit.def:490
 msgid "limit"
 msgstr "obmedzenie"
 
-#: builtins/ulimit.def:493 builtins/ulimit.def:793
+#: builtins/ulimit.def:502 builtins/ulimit.def:802
 #, c-format
 msgid "%s: cannot modify limit: %s"
 msgstr "%s: nie je možné zmeniť limit: %s"
@@ -975,7 +975,7 @@ msgstr "„%c“: neplatný operátor symbolického režimu"
 msgid "`%c': invalid symbolic mode character"
 msgstr "„%c“: neplatný znak symbolického režimu"
 
-#: error.c:89 error.c:347 error.c:349 error.c:351
+#: error.c:89 error.c:373 error.c:375 error.c:377
 msgid " line "
 msgstr " riadok "
 
@@ -995,96 +995,106 @@ msgstr "Ruší sa..."
 msgid "INFORM: "
 msgstr ""
 
-#: error.c:462
+#: error.c:310
+#, fuzzy, c-format
+msgid "DEBUG warning: "
+msgstr "upozornenie: "
+
+#: error.c:488
 msgid "unknown command error"
 msgstr "chyba neznámeho príkazu"
 
-#: error.c:463
+#: error.c:489
 msgid "bad command type"
 msgstr "chybný typ príkazu"
 
-#: error.c:464
+#: error.c:490
 msgid "bad connector"
 msgstr "chybný konektor"
 
-#: error.c:465
+#: error.c:491
 msgid "bad jump"
 msgstr "chybný skok"
 
-#: error.c:503
+#: error.c:529
 #, c-format
 msgid "%s: unbound variable"
 msgstr "%s: neviazaná premenná"
 
-#: eval.c:242
+#: eval.c:243
 msgid "\atimed out waiting for input: auto-logout\n"
 msgstr "\ačas vypršal pri čakaní na vstup: automatické odhlásenie\n"
 
-#: execute_cmd.c:537
+#: execute_cmd.c:555
 #, c-format
 msgid "cannot redirect standard input from /dev/null: %s"
 msgstr "nie je možné presmerovať štandardný vstup z /dev/null: %s"
 
-#: execute_cmd.c:1297
+#: execute_cmd.c:1317
 #, c-format
 msgid "TIMEFORMAT: `%c': invalid format character"
 msgstr "TIMEFORMAT: „%c“: neplatný formátovácí znak"
 
-#: execute_cmd.c:2362
+#: execute_cmd.c:2391
 #, c-format
 msgid "execute_coproc: coproc [%d:%s] still exists"
 msgstr ""
 
-#: execute_cmd.c:2486
+#: execute_cmd.c:2524
 msgid "pipe error"
 msgstr "chyba rúry"
 
-#: execute_cmd.c:4793
+#: execute_cmd.c:4923
 #, c-format
 msgid "eval: maximum eval nesting level exceeded (%d)"
 msgstr ""
 
-#: execute_cmd.c:4805
+#: execute_cmd.c:4935
 #, c-format
 msgid "%s: maximum source nesting level exceeded (%d)"
 msgstr ""
 
-#: execute_cmd.c:4913
+#: execute_cmd.c:5043
 #, c-format
 msgid "%s: maximum function nesting level exceeded (%d)"
 msgstr ""
 
-#: execute_cmd.c:5467
+#: execute_cmd.c:5598
 #, c-format
 msgid "%s: restricted: cannot specify `/' in command names"
 msgstr "%s: obmedzené: nie jemožné uviesť „/“ v názvoch príkazov"
 
-#: execute_cmd.c:5574
+#: execute_cmd.c:5715
 #, c-format
 msgid "%s: command not found"
 msgstr "%s: príkaz nenájdený"
 
-#: execute_cmd.c:5816
+#: execute_cmd.c:5957
 #, c-format
 msgid "%s: %s"
 msgstr "%s: %s"
 
-#: execute_cmd.c:5854
+#: execute_cmd.c:5975
+#, fuzzy, c-format
+msgid "%s: cannot execute: required file not found"
+msgstr "%s: nie je možné vykonať binárny súbor"
+
+#: execute_cmd.c:6000
 #, c-format
 msgid "%s: %s: bad interpreter"
 msgstr "%s: %s: chybný interpreter"
 
-#: execute_cmd.c:5891
+#: execute_cmd.c:6037
 #, fuzzy, c-format
 msgid "%s: cannot execute binary file: %s"
 msgstr "%s: nie je možné vykonať binárny súbor"
 
-#: execute_cmd.c:5977
+#: execute_cmd.c:6123
 #, fuzzy, c-format
 msgid "`%s': is a special builtin"
 msgstr "%s je vstavaný príkaz (builtin) shellu\n"
 
-#: execute_cmd.c:6029
+#: execute_cmd.c:6175
 #, c-format
 msgid "cannot duplicate fd %d to fd %d"
 msgstr "nie je možné duplikovať fd %d na fd %d"
@@ -1097,70 +1107,70 @@ msgstr "bola prekročená úroveň rekurzie výrazu"
 msgid "recursion stack underflow"
 msgstr "podtečenie zásobníka rekurzie"
 
-#: expr.c:477
+#: expr.c:478
 msgid "syntax error in expression"
 msgstr "chyba syntaxe vo výraze"
 
-#: expr.c:521
+#: expr.c:522
 msgid "attempted assignment to non-variable"
 msgstr "pokus o priradenie mimo premennej"
 
-#: expr.c:530
+#: expr.c:531
 #, fuzzy
 msgid "syntax error in variable assignment"
 msgstr "chyba syntaxe vo výraze"
 
-#: expr.c:544 expr.c:911
+#: expr.c:545 expr.c:912
 msgid "division by 0"
 msgstr "delenie nulou"
 
-#: expr.c:592
+#: expr.c:593
 msgid "bug: bad expassign token"
 msgstr "chyba: chybný expassign token"
 
-#: expr.c:646
+#: expr.c:647
 msgid "`:' expected for conditional expression"
 msgstr "pre podmienený výraz sa očakáva „:“"
 
-#: expr.c:972
+#: expr.c:973
 msgid "exponent less than 0"
 msgstr "exponent menší ako 0"
 
-#: expr.c:1029
+#: expr.c:1030
 msgid "identifier expected after pre-increment or pre-decrement"
 msgstr "po pre-inkrementácii alebo pre-dekrementácii sa očakáva identifikátor"
 
-#: expr.c:1056
+#: expr.c:1057
 msgid "missing `)'"
 msgstr "chýba „)“"
 
-#: expr.c:1107 expr.c:1487
+#: expr.c:1108 expr.c:1492
 msgid "syntax error: operand expected"
 msgstr "chyba syntaxe: očakáva sa operand"
 
-#: expr.c:1489
+#: expr.c:1494
 msgid "syntax error: invalid arithmetic operator"
 msgstr "chyba syntaxe: neplatný aritmetický operátor"
 
-#: expr.c:1513
+#: expr.c:1518
 #, c-format
 msgid "%s%s%s: %s (error token is \"%s\")"
 msgstr "%s%s%s: %s (chybný token je „%s”)"
 
-#: expr.c:1573
+#: expr.c:1578
 msgid "invalid arithmetic base"
 msgstr "neplatný aritmetický základ"
 
-#: expr.c:1582
+#: expr.c:1587
 #, fuzzy
 msgid "invalid integer constant"
 msgstr "%s: neplatný počet riadkov"
 
-#: expr.c:1598
+#: expr.c:1603
 msgid "value too great for base"
 msgstr "hodnota je ako základ príliš veľká"
 
-#: expr.c:1647
+#: expr.c:1652
 #, c-format
 msgid "%s: expression error\n"
 msgstr "%s: chyba výrazu\n"
@@ -1169,7 +1179,7 @@ msgstr "%s: chyba výrazu\n"
 msgid "getcwd: cannot access parent directories"
 msgstr "getcwd: nie je možné pristupovať k rodičovským adresárom"
 
-#: input.c:99 subst.c:6069
+#: input.c:99 subst.c:6208
 #, c-format
 msgid "cannot reset nodelay mode for fd %d"
 msgstr "nie j emožné resetovať nodelay režim fd %d"
@@ -1188,168 +1198,168 @@ msgstr "save_bash_input: bufer už existuje pre nový fd %d"
 msgid "start_pipeline: pgrp pipe"
 msgstr "start_pipeline: pgrp rúra"
 
-#: jobs.c:906
+#: jobs.c:907
 #, c-format
 msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr ""
 
-#: jobs.c:959
+#: jobs.c:960
 #, c-format
 msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr ""
 
-#: jobs.c:1283
+#: jobs.c:1279
 #, c-format
 msgid "forked pid %d appears in running job %d"
 msgstr "pid %d získaný pomocou fork sa vyskytuje v bežiacej úlohe %d"
 
-#: jobs.c:1402
+#: jobs.c:1397
 #, c-format
 msgid "deleting stopped job %d with process group %ld"
 msgstr "mažem zastavenú úlohu %d so skupinou procesu %ld"
 
-#: jobs.c:1511
+#: jobs.c:1502
 #, c-format
 msgid "add_process: pid %5ld (%s) marked as still alive"
 msgstr "add_process: pid %5ld (%s) je stále označený ako živý"
 
-#: jobs.c:1850
+#: jobs.c:1839
 #, c-format
 msgid "describe_pid: %ld: no such pid"
 msgstr "describe_pid: %ld: taký pid neexistuje"
 
-#: jobs.c:1865
+#: jobs.c:1854
 #, c-format
 msgid "Signal %d"
 msgstr "Signál %d"
 
-#: jobs.c:1879 jobs.c:1905
+#: jobs.c:1868 jobs.c:1894
 msgid "Done"
 msgstr "Hotovo"
 
-#: jobs.c:1884 siglist.c:122
+#: jobs.c:1873 siglist.c:123
 msgid "Stopped"
 msgstr "Zastavené"
 
-#: jobs.c:1888
+#: jobs.c:1877
 #, c-format
 msgid "Stopped(%s)"
 msgstr "Zastavené(%s)"
 
-#: jobs.c:1892
+#: jobs.c:1881
 msgid "Running"
 msgstr "Beží"
 
-#: jobs.c:1909
+#: jobs.c:1898
 #, c-format
 msgid "Done(%d)"
 msgstr "Hotovo(%d)"
 
-#: jobs.c:1911
+#: jobs.c:1900
 #, c-format
 msgid "Exit %d"
 msgstr "Ukončenie %d"
 
-#: jobs.c:1914
+#: jobs.c:1903
 msgid "Unknown status"
 msgstr "Neznámy stav"
 
-#: jobs.c:2001
+#: jobs.c:1990
 #, c-format
 msgid "(core dumped) "
 msgstr "(bol uložený výpis pamäte) "
 
-#: jobs.c:2020
+#: jobs.c:2009
 #, c-format
 msgid "  (wd: %s)"
 msgstr "  (wd: %s)"
 
-#: jobs.c:2259
+#: jobs.c:2250
 #, c-format
 msgid "child setpgid (%ld to %ld)"
 msgstr "setpgid detského procesu (%ld to %ld)"
 
-#: jobs.c:2617 nojobs.c:664
+#: jobs.c:2608 nojobs.c:666
 #, c-format
 msgid "wait: pid %ld is not a child of this shell"
 msgstr "wait: pid %ld nie je dieťa tohto shellu"
 
-#: jobs.c:2893
+#: jobs.c:2884
 #, c-format
 msgid "wait_for: No record of process %ld"
 msgstr "wait_for: Neexistuje záznam o procese %ld"
 
-#: jobs.c:3236
+#: jobs.c:3223
 #, c-format
 msgid "wait_for_job: job %d is stopped"
 msgstr "wait_for_job: úloha %d je zastavená"
 
-#: jobs.c:3564
+#: jobs.c:3551
 #, fuzzy, c-format
 msgid "%s: no current jobs"
 msgstr "%s: taká úloha neexistuje"
 
-#: jobs.c:3571
+#: jobs.c:3558
 #, c-format
 msgid "%s: job has terminated"
 msgstr "%s: úloha skončila"
 
-#: jobs.c:3580
+#: jobs.c:3567
 #, c-format
 msgid "%s: job %d already in background"
 msgstr "%s: úloha %d už je v pozadí"
 
-#: jobs.c:3806
+#: jobs.c:3793
 msgid "waitchld: turning on WNOHANG to avoid indefinite block"
 msgstr "waitchld: zapína sa WNOHANG aby sme sa vyhli neurčitému blokovaniu"
 
-#: jobs.c:4320
+#: jobs.c:4307
 #, c-format
 msgid "%s: line %d: "
 msgstr "%s: riadok %d: "
 
-#: jobs.c:4334 nojobs.c:919
+#: jobs.c:4321 nojobs.c:921
 #, c-format
 msgid " (core dumped)"
 msgstr " (bol uložený výpis pamäte)"
 
-#: jobs.c:4346 jobs.c:4359
+#: jobs.c:4333 jobs.c:4346
 #, c-format
 msgid "(wd now: %s)\n"
 msgstr "(wd teraz: %s)\n"
 
-#: jobs.c:4391
+#: jobs.c:4378
 msgid "initialize_job_control: getpgrp failed"
 msgstr "initialize_job_control: funkcia getpgrp zlyhala"
 
-#: jobs.c:4447
+#: jobs.c:4434
 #, fuzzy
 msgid "initialize_job_control: no job control in background"
 msgstr "initialize_job_control: riadkový systém"
 
-#: jobs.c:4463
+#: jobs.c:4450
 msgid "initialize_job_control: line discipline"
 msgstr "initialize_job_control: riadkový systém"
 
-#: jobs.c:4473
+#: jobs.c:4460
 msgid "initialize_job_control: setpgid"
 msgstr "initialize_job_control: setpgid"
 
-#: jobs.c:4494 jobs.c:4503
+#: jobs.c:4481 jobs.c:4490
 #, c-format
 msgid "cannot set terminal process group (%d)"
 msgstr "nie je možné nastaviť skupinu procesu terminálu (%d)"
 
-#: jobs.c:4508
+#: jobs.c:4495
 msgid "no job control in this shell"
 msgstr "v tomto shelli nie je riadenie úloh"
 
-#: lib/malloc/malloc.c:353
+#: lib/malloc/malloc.c:367
 #, c-format
 msgid "malloc: failed assertion: %s\n"
 msgstr "malloc: zlyhal predpoklad: %s\n"
 
-#: lib/malloc/malloc.c:369
+#: lib/malloc/malloc.c:383
 #, c-format
 msgid ""
 "\r\n"
@@ -1358,49 +1368,49 @@ msgstr ""
 "\r\n"
 "malloc: %s:%d: zbabraný predpoklad\r\n"
 
-#: lib/malloc/malloc.c:370 lib/malloc/malloc.c:933
+#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941
 msgid "unknown"
 msgstr "neznámy"
 
-#: lib/malloc/malloc.c:882
+#: lib/malloc/malloc.c:892
 msgid "malloc: block on free list clobbered"
 msgstr "malloc: blok na zozname voľných zaprataný"
 
-#: lib/malloc/malloc.c:972
+#: lib/malloc/malloc.c:980
 msgid "free: called with already freed block argument"
 msgstr "free: zavolaný s argumentom už uvoľneného bloku"
 
-#: lib/malloc/malloc.c:975
+#: lib/malloc/malloc.c:983
 msgid "free: called with unallocated block argument"
 msgstr "free: zavolaný s argumentom nealokovaného bloku"
 
-#: lib/malloc/malloc.c:994
+#: lib/malloc/malloc.c:1001
 msgid "free: underflow detected; mh_nbytes out of range"
 msgstr "free: bolo detekované podtečenie; mh_nbytes mimo rozsahu"
 
-#: lib/malloc/malloc.c:1001
+#: lib/malloc/malloc.c:1007
 #, fuzzy
 msgid "free: underflow detected; magic8 corrupted"
 msgstr "free: bolo detekované podtečenie; mh_nbytes mimo rozsahu"
 
-#: lib/malloc/malloc.c:1009
+#: lib/malloc/malloc.c:1014
 msgid "free: start and end chunk sizes differ"
 msgstr "free: veľkosti začiatočného a konečného bloku (chunk) sa líšia"
 
-#: lib/malloc/malloc.c:1119
+#: lib/malloc/malloc.c:1176
 msgid "realloc: called with unallocated block argument"
 msgstr "realloc: zavolaný s argumentom nealokovaného bloku"
 
-#: lib/malloc/malloc.c:1134
+#: lib/malloc/malloc.c:1191
 msgid "realloc: underflow detected; mh_nbytes out of range"
 msgstr "realloc: bolo detekované podtečenie; mh_nbytes mimo rozsahu"
 
-#: lib/malloc/malloc.c:1141
+#: lib/malloc/malloc.c:1197
 #, fuzzy
 msgid "realloc: underflow detected; magic8 corrupted"
 msgstr "realloc: bolo detekované podtečenie; mh_nbytes mimo rozsahu"
 
-#: lib/malloc/malloc.c:1150
+#: lib/malloc/malloc.c:1205
 msgid "realloc: start and end chunk sizes differ"
 msgstr "realloc: veľkosti začiatočného a konečného bloku (chunk) sa líšia"
 
@@ -1442,22 +1452,22 @@ msgstr "%s: chybná špecifikácia sieťovej cesty"
 msgid "network operations not supported"
 msgstr "sieťové operácie nie sú podporované"
 
-#: locale.c:217
+#: locale.c:219
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s)"
 msgstr "setlocale: LC_ALL: nemožno zmeniť locale (%s)"
 
-#: locale.c:219
+#: locale.c:221
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s): %s"
 msgstr "setlocale: LC_ALL: nemožno zmeniť locale (%s): %s"
 
-#: locale.c:292
+#: locale.c:294
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s)"
 msgstr "setlocale: %s: nie je možné zmeniť locale (%s)"
 
-#: locale.c:294
+#: locale.c:296
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s): %s"
 msgstr "setlocale: %s: nie je možné zmeniť locale (%s): %s"
@@ -1475,139 +1485,139 @@ msgstr "Máte novú poštu v súbore $_"
 msgid "The mail in %s has been read\n"
 msgstr "Pošta v súbore %s bola prečítaná\n"
 
-#: make_cmd.c:317
+#: make_cmd.c:314
 msgid "syntax error: arithmetic expression required"
 msgstr "chyba syntaxe: vyžaduje sa aritmetický výraz"
 
-#: make_cmd.c:319
+#: make_cmd.c:316
 msgid "syntax error: `;' unexpected"
 msgstr "chyba syntaxe: neočakávaná „;“"
 
-#: make_cmd.c:320
+#: make_cmd.c:317
 #, c-format
 msgid "syntax error: `((%s))'"
 msgstr "chyba syntaxe: „((%s))“"
 
-#: make_cmd.c:572
+#: make_cmd.c:569
 #, c-format
 msgid "make_here_document: bad instruction type %d"
 msgstr "make_here_document: chybný typ inštrukcie %d"
 
-#: make_cmd.c:657
+#: make_cmd.c:668
 #, c-format
 msgid "here-document at line %d delimited by end-of-file (wanted `%s')"
 msgstr ""
 "here-document na riadku %d oddelený znakom konca riadku (očakávalo sa „%s”)"
 
-#: make_cmd.c:756
+#: make_cmd.c:769
 #, c-format
 msgid "make_redirection: redirection instruction `%d' out of range"
 msgstr "make_redirection: inštrukcia presmerovania „%d“ mimo rozsahu"
 
-#: parse.y:2393
+#: parse.y:2428
 #, c-format
 msgid ""
 "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line "
 "truncated"
 msgstr ""
 
-#: parse.y:2826
+#: parse.y:2921
 msgid "maximum here-document count exceeded"
 msgstr ""
 
-#: parse.y:3581 parse.y:3957 parse.y:4556
+#: parse.y:3684 parse.y:4244 parse.y:6148
 #, c-format
 msgid "unexpected EOF while looking for matching `%c'"
 msgstr "neočakávaný koniec súboru počas hľadania zodpovedajúceho „%c“"
 
-#: parse.y:4696
+#: parse.y:4452
 msgid "unexpected EOF while looking for `]]'"
 msgstr "neočakávaný koniec súboru počas hľadania „]]“"
 
-#: parse.y:4701
+#: parse.y:4457
 #, c-format
 msgid "syntax error in conditional expression: unexpected token `%s'"
 msgstr "chyba syntaxe v podmienečnom príkaze: neočakávaný token „%s“"
 
-#: parse.y:4705
+#: parse.y:4461
 msgid "syntax error in conditional expression"
 msgstr "chyba syntaxe v podmienečnom príkaze"
 
-#: parse.y:4783
+#: parse.y:4539
 #, c-format
 msgid "unexpected token `%s', expected `)'"
 msgstr "neočakávaný token „%s“, očakávalo sa `)'"
 
-#: parse.y:4787
+#: parse.y:4543
 msgid "expected `)'"
 msgstr "očakávalo sa `)'"
 
-#: parse.y:4815
+#: parse.y:4571
 #, c-format
 msgid "unexpected argument `%s' to conditional unary operator"
 msgstr "neočakávaný argument „%s“ podmienečného unárneho operátora"
 
-#: parse.y:4819
+#: parse.y:4575
 msgid "unexpected argument to conditional unary operator"
 msgstr "neočakávaný argument podmienečného unárneho operátora"
 
-#: parse.y:4865
+#: parse.y:4621
 #, c-format
 msgid "unexpected token `%s', conditional binary operator expected"
 msgstr "neočakávaný token „%s“, očakáva sa podmienečný binárny operátor"
 
-#: parse.y:4869
+#: parse.y:4625
 msgid "conditional binary operator expected"
 msgstr "očakáva sa podmienečný binárny operátor"
 
-#: parse.y:4891
+#: parse.y:4647
 #, c-format
 msgid "unexpected argument `%s' to conditional binary operator"
 msgstr "neočakávaný argument „%s“ v podmienečnom binárnom operátore"
 
-#: parse.y:4895
+#: parse.y:4651
 msgid "unexpected argument to conditional binary operator"
 msgstr "neočakávaný argument v podmienečnom binárnom operátore"
 
-#: parse.y:4906
+#: parse.y:4662
 #, c-format
 msgid "unexpected token `%c' in conditional command"
 msgstr "neočakávaný token „%c“ v podmienečnom príkaze"
 
-#: parse.y:4909
+#: parse.y:4665
 #, c-format
 msgid "unexpected token `%s' in conditional command"
 msgstr "neočakávaný token „%s“ v podmienečnom príkaze"
 
-#: parse.y:4913
+#: parse.y:4669
 #, c-format
 msgid "unexpected token %d in conditional command"
 msgstr "neočakávaný token %d v podmienečnom príkaze"
 
-#: parse.y:6336
+#: parse.y:6118
 #, c-format
 msgid "syntax error near unexpected token `%s'"
 msgstr "chyba syntaxe neďaleko neočakávaného tokenu „%s“"
 
-#: parse.y:6355
+#: parse.y:6137
 #, c-format
 msgid "syntax error near `%s'"
 msgstr "chyba syntaxe neďaleko „%s“"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error: unexpected end of file"
 msgstr "chyba syntaxe: neočakávaný koniec súboru"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error"
 msgstr "chyba syntaxe"
 
-#: parse.y:6428
+#: parse.y:6216
 #, c-format
 msgid "Use \"%s\" to leave the shell.\n"
 msgstr "Na opustenie shellu použite „%s“.\n"
 
-#: parse.y:6602
+#: parse.y:6394
 msgid "unexpected EOF while looking for matching `)'"
 msgstr "neočakávaný koniec súboru počas hľadania zodpovedajúceho „)“"
 
@@ -1645,94 +1655,94 @@ msgstr "xtrace_set: ukazovateľ súboru je NULL"
 msgid "xtrace fd (%d) != fileno xtrace fp (%d)"
 msgstr "xtrace fd (%d) != fileno xtrace fp (%d)"
 
-#: print_cmd.c:1540
+#: print_cmd.c:1545
 #, c-format
 msgid "cprintf: `%c': invalid format character"
 msgstr "cprintf: „%c“: neplatný formátovací znak"
 
-#: redir.c:149 redir.c:197
+#: redir.c:150 redir.c:198
 msgid "file descriptor out of range"
 msgstr "popisovač súboru mimo rozsahu"
 
-#: redir.c:204
+#: redir.c:205
 #, c-format
 msgid "%s: ambiguous redirect"
 msgstr "%s: nejednoznačné presmerovanie"
 
-#: redir.c:208
+#: redir.c:209
 #, c-format
 msgid "%s: cannot overwrite existing file"
 msgstr "%s: nie je možné prepísať existujúci súbor"
 
-#: redir.c:213
+#: redir.c:214
 #, c-format
 msgid "%s: restricted: cannot redirect output"
 msgstr "%s: ombedzené: nie je možné presmerovať výstup"
 
-#: redir.c:218
+#: redir.c:219
 #, c-format
 msgid "cannot create temp file for here-document: %s"
 msgstr "nie je možné vytvoriť odkladací súbor pre here-document: %s"
 
-#: redir.c:222
+#: redir.c:223
 #, c-format
 msgid "%s: cannot assign fd to variable"
 msgstr "%s: nie je možné priradiť popisovač súboru premennej"
 
-#: redir.c:649
+#: redir.c:650
 msgid "/dev/(tcp|udp)/host/port not supported without networking"
 msgstr "/dev/(tcp|udp)/host/port nie je podporovaný bez podpory sietí"
 
-#: redir.c:938 redir.c:1053 redir.c:1114 redir.c:1284
+#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303
 msgid "redirection error: cannot duplicate fd"
 msgstr "chyba presmerovania: nie je možné duplikovať fd"
 
-#: shell.c:347
+#: shell.c:353
 msgid "could not find /tmp, please create!"
 msgstr "nenašiel sa /tmp, vytvorte ho prosím!"
 
-#: shell.c:351
+#: shell.c:357
 msgid "/tmp must be a valid directory name"
 msgstr "/tmp musí byť platný názov adresára"
 
-#: shell.c:804
+#: shell.c:826
 msgid "pretty-printing mode ignored in interactive shells"
 msgstr ""
 
-#: shell.c:948
+#: shell.c:972
 #, c-format
 msgid "%c%c: invalid option"
 msgstr "%c%c: neplatná voľba"
 
-#: shell.c:1319
+#: shell.c:1343
 #, fuzzy, c-format
 msgid "cannot set uid to %d: effective uid %d"
 msgstr "nie j emožné resetovať nodelay režim fd %d"
 
-#: shell.c:1330
+#: shell.c:1354
 #, fuzzy, c-format
 msgid "cannot set gid to %d: effective gid %d"
 msgstr "nie j emožné resetovať nodelay režim fd %d"
 
-#: shell.c:1518
+#: shell.c:1544
 msgid "cannot start debugger; debugging mode disabled"
 msgstr ""
 
-#: shell.c:1632
+#: shell.c:1658
 #, fuzzy, c-format
 msgid "%s: Is a directory"
 msgstr "%s: je adresár"
 
-#: shell.c:1881
+#: shell.c:1907
 msgid "I have no name!"
 msgstr "Nemám meno!"
 
-#: shell.c:2035
+#: shell.c:2061
 #, c-format
 msgid "GNU bash, version %s-(%s)\n"
 msgstr "GNU bash, verzia %s-(%s)\n"
 
-#: shell.c:2036
+#: shell.c:2062
 #, c-format
 msgid ""
 "Usage:\t%s [GNU long option] [option] ...\n"
@@ -1741,313 +1751,313 @@ msgstr ""
 "Použitie:\t%s [GNU dlhá voľba] [voľba] ...\n"
 "\t%s [GNU dlhá voľba] [voľba] súbor-skriptu ...\n"
 
-#: shell.c:2038
+#: shell.c:2064
 msgid "GNU long options:\n"
 msgstr "GNU dlhé voľby:\n"
 
-#: shell.c:2042
+#: shell.c:2068
 msgid "Shell options:\n"
 msgstr "Voľby shellu:\n"
 
-#: shell.c:2043
+#: shell.c:2069
 #, fuzzy
 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n"
 msgstr "\t-irsD alebo -c príkaz alebo -O krátka_voľba\t\t(iba vyvolanie)\n"
 
-#: shell.c:2062
+#: shell.c:2088
 #, c-format
 msgid "\t-%s or -o option\n"
 msgstr "\t-%s alebo -o voľba\n"
 
-#: shell.c:2068
+#: shell.c:2094
 #, c-format
 msgid "Type `%s -c \"help set\"' for more information about shell options.\n"
 msgstr ""
 "Napísaním „%s -c \"help set\"“ získate viac informácií o voľbách shellu.\n"
 
-#: shell.c:2069
+#: shell.c:2095
 #, c-format
 msgid "Type `%s -c help' for more information about shell builtin commands.\n"
 msgstr ""
 "Napísaním „%s -c help“ získate viac informácií o vstavaných príkazoch "
 "(builtins) shellu.\n"
 
-#: shell.c:2070
+#: shell.c:2096
 #, c-format
 msgid "Use the `bashbug' command to report bugs.\n"
 msgstr "Na ohlasovanie chýb použite príkaz „bashbug“.\n"
 
-#: shell.c:2072
+#: shell.c:2098
 #, c-format
 msgid "bash home page: <http://www.gnu.org/software/bash>\n"
 msgstr ""
 
-#: shell.c:2073
+#: shell.c:2099
 #, c-format
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 msgstr ""
 
-#: sig.c:757
+#: sig.c:765
 #, c-format
 msgid "sigprocmask: %d: invalid operation"
 msgstr "sigprocmask: %d: neplatná operácia"
 
-#: siglist.c:47
+#: siglist.c:48
 msgid "Bogus signal"
 msgstr "Neplatný signál"
 
-#: siglist.c:50
+#: siglist.c:51
 msgid "Hangup"
 msgstr "Zavesenie"
 
-#: siglist.c:54
+#: siglist.c:55
 msgid "Interrupt"
 msgstr "Prerušenie"
 
-#: siglist.c:58
+#: siglist.c:59
 msgid "Quit"
 msgstr "Ukončenie"
 
-#: siglist.c:62
+#: siglist.c:63
 msgid "Illegal instruction"
 msgstr "Neplatná inštrukcia"
 
-#: siglist.c:66
+#: siglist.c:67
 msgid "BPT trace/trap"
 msgstr "BPT trace/trap"
 
-#: siglist.c:74
+#: siglist.c:75
 msgid "ABORT instruction"
 msgstr "inštrukcia ABORT"
 
-#: siglist.c:78
+#: siglist.c:79
 msgid "EMT instruction"
 msgstr "inštrukcia EMT"
 
-#: siglist.c:82
+#: siglist.c:83
 msgid "Floating point exception"
 msgstr "Výnimka pri operácii s plávajúcou desatinnou čiarkou"
 
-#: siglist.c:86
+#: siglist.c:87
 msgid "Killed"
 msgstr "Zabitý"
 
-#: siglist.c:90
+#: siglist.c:91
 msgid "Bus error"
 msgstr "chyba zbernice"
 
-#: siglist.c:94
+#: siglist.c:95
 msgid "Segmentation fault"
 msgstr "Chyba segmentácie"
 
-#: siglist.c:98
+#: siglist.c:99
 msgid "Bad system call"
 msgstr "Chybné systémové volanie"
 
-#: siglist.c:102
+#: siglist.c:103
 msgid "Broken pipe"
 msgstr "Prerušená rúra"
 
-#: siglist.c:106
+#: siglist.c:107
 msgid "Alarm clock"
 msgstr "Budík"
 
-#: siglist.c:110
+#: siglist.c:111
 msgid "Terminated"
 msgstr "Ukončené"
 
-#: siglist.c:114
+#: siglist.c:115
 msgid "Urgent IO condition"
 msgstr "Naliehavý stav V/V"
 
-#: siglist.c:118
+#: siglist.c:119
 msgid "Stopped (signal)"
 msgstr "Zastavené (signál)"
 
-#: siglist.c:126
+#: siglist.c:127
 msgid "Continue"
 msgstr "Pokračovať"
 
-#: siglist.c:134
+#: siglist.c:135
 msgid "Child death or stop"
 msgstr "Zastavenie alebo zabitie detského procesu"
 
-#: siglist.c:138
+#: siglist.c:139
 msgid "Stopped (tty input)"
 msgstr "Zastavené (vstup z tty)"
 
-#: siglist.c:142
+#: siglist.c:143
 msgid "Stopped (tty output)"
 msgstr "Zastavené (výstup na tty)"
 
-#: siglist.c:146
+#: siglist.c:147
 msgid "I/O ready"
 msgstr "V/V pripravený"
 
-#: siglist.c:150
+#: siglist.c:151
 msgid "CPU limit"
 msgstr "obmedzenie CPU"
 
-#: siglist.c:154
+#: siglist.c:155
 msgid "File limit"
 msgstr "obmedzenie súborov"
 
-#: siglist.c:158
+#: siglist.c:159
 msgid "Alarm (virtual)"
 msgstr "Budík (virtuálny)"
 
-#: siglist.c:162
+#: siglist.c:163
 msgid "Alarm (profile)"
 msgstr "Budík (profil)"
 
-#: siglist.c:166
+#: siglist.c:167
 msgid "Window changed"
 msgstr "Okno sa zmenilo"
 
-#: siglist.c:170
+#: siglist.c:171
 msgid "Record lock"
 msgstr "Zámok záznamu"
 
-#: siglist.c:174
+#: siglist.c:175
 msgid "User signal 1"
 msgstr "Používateľský signál 1"
 
-#: siglist.c:178
+#: siglist.c:179
 msgid "User signal 2"
 msgstr "Používateľský signál 2"
 
-#: siglist.c:182
+#: siglist.c:183
 msgid "HFT input data pending"
 msgstr "čaká sa na vstupné údaje HFT"
 
-#: siglist.c:186
+#: siglist.c:187
 msgid "power failure imminent"
 msgstr "nastane výpadok napájania"
 
-#: siglist.c:190
+#: siglist.c:191
 msgid "system crash imminent"
 msgstr "nastane havária systému"
 
-#: siglist.c:194
+#: siglist.c:195
 msgid "migrate process to another CPU"
 msgstr "presunúť proces na iný CPU"
 
-#: siglist.c:198
+#: siglist.c:199
 msgid "programming error"
 msgstr "chyba programovania"
 
-#: siglist.c:202
+#: siglist.c:203
 msgid "HFT monitor mode granted"
 msgstr "udelený režim monitoru HFT"
 
-#: siglist.c:206
+#: siglist.c:207
 msgid "HFT monitor mode retracted"
 msgstr "stiahnutý režim monitoru HFT"
 
-#: siglist.c:210
+#: siglist.c:211
 msgid "HFT sound sequence has completed"
 msgstr "dokončila sa zvuková sekvencia HFT"
 
-#: siglist.c:214
+#: siglist.c:215
 msgid "Information request"
 msgstr "Žiadosť o informácie"
 
-#: siglist.c:222 siglist.c:224
+#: siglist.c:223 siglist.c:225
 #, c-format
 msgid "Unknown Signal #%d"
 msgstr "Neznámy signál #%d"
 
-#: subst.c:1476 subst.c:1666
+#: subst.c:1480 subst.c:1670
 #, c-format
 msgid "bad substitution: no closing `%s' in %s"
 msgstr "chybná substitúcia: chýba „%s“ v %s"
 
-#: subst.c:3281
+#: subst.c:3307
 #, c-format
 msgid "%s: cannot assign list to array member"
 msgstr "%s: nie je možné priradiť zoznam položke poľa"
 
-#: subst.c:5910 subst.c:5926
+#: subst.c:6048 subst.c:6064
 msgid "cannot make pipe for process substitution"
 msgstr "nie je možné vytvoriť rúru pre substitúciu procesov"
 
-#: subst.c:5985
+#: subst.c:6124
 msgid "cannot make child for process substitution"
 msgstr "nie je možné vytvoriť potomka pre substitúciu procesov"
 
-#: subst.c:6059
+#: subst.c:6198
 #, c-format
 msgid "cannot open named pipe %s for reading"
 msgstr "nie je možné otvoriť pomenovanú rúru %s na čítanie"
 
-#: subst.c:6061
+#: subst.c:6200
 #, c-format
 msgid "cannot open named pipe %s for writing"
 msgstr "nie je možné otvoriť pomenovanú rúru %s na zápis"
 
-#: subst.c:6084
+#: subst.c:6223
 #, c-format
 msgid "cannot duplicate named pipe %s as fd %d"
 msgstr "nie je možné duplikovať pomenovanú rúru %s ako fd %d"
 
-#: subst.c:6213
+#: subst.c:6370
 #, fuzzy
 msgid "command substitution: ignored null byte in input"
 msgstr "chybná substitúcia: : v reťazci %s chýba uzatvárajúci „`”"
 
-#: subst.c:6353
+#: subst.c:6533
 msgid "cannot make pipe for command substitution"
 msgstr "nie je možné vytvoriť rúru pre substitúciu príkazov"
 
-#: subst.c:6397
+#: subst.c:6580
 msgid "cannot make child for command substitution"
 msgstr "nie je možné vytvoriť potomka pre substitúciu príkazov"
 
-#: subst.c:6423
+#: subst.c:6613
 msgid "command_substitute: cannot duplicate pipe as fd 1"
 msgstr "command_substitute: nie je možné duplikovať rúru ako fd 1"
 
-#: subst.c:6883 subst.c:9952
+#: subst.c:7082 subst.c:10252
 #, fuzzy, c-format
 msgid "%s: invalid variable name for name reference"
 msgstr "%s: %s: neplatná hodnota popisovača trasovacieho súboru"
 
-#: subst.c:6979 subst.c:6997 subst.c:7169
+#: subst.c:7178 subst.c:7196 subst.c:7369
 #, fuzzy, c-format
 msgid "%s: invalid indirect expansion"
 msgstr "%s: neplatný počet riadkov"
 
-#: subst.c:7013 subst.c:7177
+#: subst.c:7212 subst.c:7377
 #, fuzzy, c-format
 msgid "%s: invalid variable name"
 msgstr "„%s“: neplatný názov aliasu"
 
-#: subst.c:7256
+#: subst.c:7478
 #, fuzzy, c-format
 msgid "%s: parameter not set"
 msgstr "%s: parameter je null alebo nenastavený"
 
-#: subst.c:7258
+#: subst.c:7480
 #, c-format
 msgid "%s: parameter null or not set"
 msgstr "%s: parameter je null alebo nenastavený"
 
-#: subst.c:7503 subst.c:7518
+#: subst.c:7727 subst.c:7742
 #, c-format
 msgid "%s: substring expression < 0"
 msgstr "%s: výraz podreťazca < 0"
 
-#: subst.c:9281 subst.c:9302
+#: subst.c:9560 subst.c:9587
 #, c-format
 msgid "%s: bad substitution"
 msgstr "%s: chybná substitúcia"
 
-#: subst.c:9390
+#: subst.c:9678
 #, c-format
 msgid "$%s: cannot assign in this way"
 msgstr "$%s: nie je možné vykonať priradenie takýmto spôsobom"
 
-#: subst.c:9814
+#: subst.c:10111
 msgid ""
 "future versions of the shell will force evaluation as an arithmetic "
 "substitution"
@@ -2055,12 +2065,12 @@ msgstr ""
 "budúce verzie shellu budú vynucovať vyhodnocovanie ako aritmetickú "
 "substitúciu"
 
-#: subst.c:10367
+#: subst.c:10795
 #, c-format
 msgid "bad substitution: no closing \"`\" in %s"
 msgstr "chybná substitúcia: : v reťazci %s chýba uzatvárajúci „`”"
 
-#: subst.c:11434
+#: subst.c:11874
 #, c-format
 msgid "no match: %s"
 msgstr "bez zhody: %s"
@@ -2083,21 +2093,21 @@ msgstr "očakávala sa „)“"
 msgid "`)' expected, found %s"
 msgstr "očakávala sa „)“, bolo nájdené %s"
 
-#: test.c:466 test.c:799
+#: test.c:469 test.c:814
 #, c-format
 msgid "%s: binary operator expected"
 msgstr "%s: očakával sa binárny operátor"
 
-#: test.c:756 test.c:759
+#: test.c:771 test.c:774
 #, c-format
 msgid "%s: unary operator expected"
 msgstr "%s: očakával sa unárny operátor"
 
-#: test.c:881
+#: test.c:896
 msgid "missing `]'"
 msgstr "chýba „]“"
 
-#: test.c:899
+#: test.c:914
 #, fuzzy, c-format
 msgid "syntax error: `%s' unexpected"
 msgstr "chyba syntaxe: neočakávaná „;“"
@@ -2106,101 +2116,106 @@ msgstr "chyba syntaxe: neočakávaná „;“"
 msgid "invalid signal number"
 msgstr "neplatné číslo signálu"
 
-#: trap.c:325
+#: trap.c:323
 #, c-format
 msgid "trap handler: maximum trap handler level exceeded (%d)"
 msgstr ""
 
-#: trap.c:414
+#: trap.c:412
 #, c-format
 msgid "run_pending_traps: bad value in trap_list[%d]: %p"
 msgstr "run_pending_traps: chybná hodnota v trap_list[%d]: %p"
 
-#: trap.c:418
+#: trap.c:416
 #, c-format
 msgid ""
 "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
 msgstr ""
 "run_pending_traps: obsluha signálu je SIG_DFL, znovu posielam %d (%s) sebe"
 
-#: trap.c:487
+#: trap.c:509
 #, c-format
 msgid "trap_handler: bad signal %d"
 msgstr "trap_handler: chybný signál %d"
 
-#: variables.c:421
+#: variables.c:424
 #, c-format
 msgid "error importing function definition for `%s'"
 msgstr "chyba pri importe definície funkcie „%s“"
 
-#: variables.c:833
+#: variables.c:838
 #, c-format
 msgid "shell level (%d) too high, resetting to 1"
 msgstr "úroveň shellu (%d) je príliš vysoká, nastavujem späť na 1"
 
-#: variables.c:2674
+#: variables.c:2642
 msgid "make_local_variable: no function context at current scope"
 msgstr "make_local_variable: v aktuálnom rozsahu sa nenachádza kontext funkcie"
 
-#: variables.c:2693
+#: variables.c:2661
 #, fuzzy, c-format
 msgid "%s: variable may not be assigned value"
 msgstr "%s: nie je možné priradiť popisovač súboru premennej"
 
-#: variables.c:3475
+#: variables.c:2818 variables.c:2874
+#, c-format
+msgid "%s: cannot inherit value from incompatible type"
+msgstr ""
+
+#: variables.c:3459
 #, c-format
 msgid "%s: assigning integer to name reference"
 msgstr ""
 
-#: variables.c:4404
+#: variables.c:4390
 msgid "all_local_variables: no function context at current scope"
 msgstr "all_local_variables: v aktuálnom rozsahu sa nenachádza kontext funkcie"
 
-#: variables.c:4771
+#: variables.c:4757
 #, c-format
 msgid "%s has null exportstr"
 msgstr "%s má null exportstr"
 
-#: variables.c:4776 variables.c:4785
+#: variables.c:4762 variables.c:4771
 #, c-format
 msgid "invalid character %d in exportstr for %s"
 msgstr "neplatný znak %d v exportstr %s"
 
-#: variables.c:4791
+#: variables.c:4777
 #, c-format
 msgid "no `=' in exportstr for %s"
 msgstr "žiadne „=“ v exportstr %s"
 
-#: variables.c:5331
+#: variables.c:5317
 msgid "pop_var_context: head of shell_variables not a function context"
 msgstr "pop_var_context: hlavička shell_variables nie je kontext funkcie"
 
-#: variables.c:5344
+#: variables.c:5330
 msgid "pop_var_context: no global_variables context"
 msgstr "pop_var_context: chýba kontext global_variables"
 
-#: variables.c:5424
+#: variables.c:5410
 msgid "pop_scope: head of shell_variables not a temporary environment scope"
 msgstr "pop_scope: hlavička shell_variables nie je dočasný rozsah prostredia"
 
-#: variables.c:6387
+#: variables.c:6400
 #, c-format
 msgid "%s: %s: cannot open as FILE"
 msgstr "%s: %s: nemožno otvoriť ako SÚBOR"
 
-#: variables.c:6392
+#: variables.c:6405
 #, c-format
 msgid "%s: %s: invalid value for trace file descriptor"
 msgstr "%s: %s: neplatná hodnota popisovača trasovacieho súboru"
 
-#: variables.c:6437
+#: variables.c:6450
 #, fuzzy, c-format
 msgid "%s: %s: compatibility value out of range"
 msgstr "%s: %s je mimo rozsahu"
 
 #: version.c:46 version2.c:46
 #, fuzzy
-msgid "Copyright (C) 2020 Free Software Foundation, Inc."
+msgid "Copyright (C) 2022 Free Software Foundation, Inc."
 msgstr "Copyright (C) 2009 Free Software Foundation, Inc.\n"
 
 #: version.c:47 version2.c:47
@@ -2297,12 +2312,16 @@ msgstr "command [-pVv] command [arg ...]"
 
 #: builtins.c:78
 #, fuzzy
-msgid "declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]"
+msgid ""
+"declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] "
+"[name ...]"
 msgstr "declare [-aAfFgilrtux] [-p] [názov[=hodnota] ...]"
 
 #: builtins.c:80
 #, fuzzy
-msgid "typeset [-aAfFgiIlnrtux] [-p] name[=value] ..."
+msgid ""
+"typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] "
+"[name ...]"
 msgstr "typeset [-aAfFgilrtux] [-p] name[=value] ..."
 
 #: builtins.c:82
@@ -2406,7 +2425,8 @@ msgid "return [n]"
 msgstr "return [n]"
 
 #: builtins.c:142
-msgid "set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]"
+#, fuzzy
+msgid "set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]"
 msgstr "set [-abefhkmnptuvxBCHP] [-o názov_voľby] [arg ...]"
 
 #: builtins.c:144
@@ -2456,7 +2476,7 @@ msgstr "type [-afptP] názov [názov ...]"
 
 #: builtins.c:171
 #, fuzzy
-msgid "ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]"
+msgid "ulimit [-SHabcdefiklmnpqrstuvxPRT] [limit]"
 msgstr "ulimit [-SHacdefilmnpqrstuvx] [obmedzenie]"
 
 #: builtins.c:174
@@ -2502,11 +2522,13 @@ msgstr ""
 "PRÍKAZY; ] fi"
 
 #: builtins.c:196
-msgid "while COMMANDS; do COMMANDS; done"
+#, fuzzy
+msgid "while COMMANDS; do COMMANDS-2; done"
 msgstr "while PRÍKAZY; do PRÍKAZY; done"
 
 #: builtins.c:198
-msgid "until COMMANDS; do COMMANDS; done"
+#, fuzzy
+msgid "until COMMANDS; do COMMANDS-2; done"
 msgstr "until PRÍKAZY; do PRÍKAZY; done"
 
 #: builtins.c:200
@@ -3891,7 +3913,9 @@ msgid ""
 "    word to the second NAME, and so on, with any leftover words assigned to\n"
 "    the last NAME.  Only the characters found in $IFS are recognized as "
 "word\n"
-"    delimiters.\n"
+"    delimiters. By default, the backslash character escapes delimiter "
+"characters\n"
+"    and newline.\n"
 "    \n"
 "    If no NAMEs are supplied, the line read is stored in the REPLY "
 "variable.\n"
@@ -3974,7 +3998,7 @@ msgstr ""
 "    Vráti 0 ak sa nenarazí pri čítaní nakoniec súboru, nevyprší čas na\n"
 "    čítanie a ako argument -u nebol je zadaný neplatný popisovač."
 
-#: builtins.c:1041
+#: builtins.c:1042
 msgid ""
 "Return from a shell function.\n"
 "    \n"
@@ -3995,7 +4019,7 @@ msgstr ""
 "    Návratová hodnota:\n"
 "    Vráti N alebo zlyhá ak shell nevykonáva funkciu či skript."
 
-#: builtins.c:1054
+#: builtins.c:1055
 #, fuzzy
 msgid ""
 "Set or unset values of shell options and positional parameters.\n"
@@ -4167,7 +4191,7 @@ msgstr ""
 "    Návratová hodnota:\n"
 "    Vráti 0 ak nebola zadaná neplatná voľba."
 
-#: builtins.c:1139
+#: builtins.c:1140
 #, fuzzy
 msgid ""
 "Unset values and attributes of shell variables and functions.\n"
@@ -4207,7 +4231,7 @@ msgstr ""
 "    Vráti 0 ak sa nestalo, že je NÁZOV iba na čítanie a nebola zadaná\n"
 "    neplatná voľba."
 
-#: builtins.c:1161
+#: builtins.c:1162
 msgid ""
 "Set export attribute for shell variables.\n"
 "    \n"
@@ -4242,7 +4266,7 @@ msgstr ""
 "    Vráti 0 ak sa nestalo, že je NÁZOV neplatný a nebola zadaná\n"
 "    neplatná voľba."
 
-#: builtins.c:1180
+#: builtins.c:1181
 #, fuzzy
 msgid ""
 "Mark shell variables as unchangeable.\n"
@@ -4282,7 +4306,7 @@ msgstr ""
 "    Vráti 0 ak sa nestalo, že je NÁZOV neplatný a nebola zadaná\n"
 "    neplatná voľba."
 
-#: builtins.c:1202
+#: builtins.c:1203
 msgid ""
 "Shift positional parameters.\n"
 "    \n"
@@ -4300,7 +4324,7 @@ msgstr ""
 "    Návratová hodnota:\n"
 "    Vráti 0 ak sa nestalo, že je N záporné alebo väčšie ako $#."
 
-#: builtins.c:1214 builtins.c:1229
+#: builtins.c:1215 builtins.c:1230
 msgid ""
 "Execute commands from a file in the current shell.\n"
 "    \n"
@@ -4324,7 +4348,7 @@ msgstr ""
 "    Vráti návratovú hodnotu posledného príkazu v SÚBORe; zlyhá ak nie je\n"
 "    možné SÚBOR načítať."
 
-#: builtins.c:1245
+#: builtins.c:1246
 msgid ""
 "Suspend shell execution.\n"
 "    \n"
@@ -4348,7 +4372,7 @@ msgstr ""
 "    Návratová hodnota:\n"
 "    Vráti 0 ak sa nestalo, že je vypnuté riadenie úloh a nevyskytla sa chyba."
 
-#: builtins.c:1261
+#: builtins.c:1262
 #, fuzzy
 msgid ""
 "Evaluate conditional expression.\n"
@@ -4510,7 +4534,7 @@ msgstr ""
 "    Vráti 0 ak VÝR vyhodnotí ako pravdivý; zlyhá ako sa VÝR vyhodnotí\n"
 "    ako nepravdivý alebo je zadaný neplatný argument."
 
-#: builtins.c:1343
+#: builtins.c:1344
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -4522,7 +4546,7 @@ msgstr ""
 "    Toto je synonymum vsatavanej funkcie „test“, ale posledný\n"
 "    argument musí byť literál „]“, ktorý uzatvára otvárajúcu „[“."
 
-#: builtins.c:1352
+#: builtins.c:1353
 msgid ""
 "Display process times.\n"
 "    \n"
@@ -4541,7 +4565,7 @@ msgstr ""
 "    Návratová hodnota:\n"
 "    Vždy vráti 0."
 
-#: builtins.c:1364
+#: builtins.c:1365
 msgid ""
 "Trap signals and other events.\n"
 "    \n"
@@ -4621,7 +4645,7 @@ msgstr ""
 "    Vráti 0 ak sa nestalo, že je SIGSPEC neplatný a nebola zadaná\n"
 "    neplatná voľba."
 
-#: builtins.c:1400
+#: builtins.c:1401
 #, fuzzy
 msgid ""
 "Display information about command type.\n"
@@ -4677,7 +4701,7 @@ msgstr ""
 "    Návratová hodnota:\n"
 "    Vráti 0 ak boli nájdené všetky NÁZVY; zlyhá ak nie."
 
-#: builtins.c:1431
+#: builtins.c:1432
 #, fuzzy
 msgid ""
 "Modify shell resource limits.\n"
@@ -4768,7 +4792,7 @@ msgstr ""
 "    Návratová hodnota:\n"
 "    Vráti 0 ak nebola zadaná neplatná voľba a nevyskytla sa chyba."
 
-#: builtins.c:1482
+#: builtins.c:1483
 msgid ""
 "Display or set file mode mask.\n"
 "    \n"
@@ -4802,7 +4826,7 @@ msgstr ""
 "    Vráti 0 ak sa nestalo, že je REŽIM neplatný a nebola zadaná\n"
 "    neplatná voľba."
 
-#: builtins.c:1502
+#: builtins.c:1503
 #, fuzzy
 msgid ""
 "Wait for job completion and return exit status.\n"
@@ -4846,7 +4870,7 @@ msgstr ""
 "    Vráti stav ID; zlyhá ak je ID neplatný alebo bola zadaná\n"
 "    neplatná voľba."
 
-#: builtins.c:1533
+#: builtins.c:1534
 #, fuzzy
 msgid ""
 "Wait for process completion and return exit status.\n"
@@ -4872,7 +4896,7 @@ msgstr ""
 "    Vráti stav ID; zlyhá ak je ID neplatný alebo bola zadaná neplatná\n"
 "    voľba."
 
-#: builtins.c:1548
+#: builtins.c:1549
 msgid ""
 "Execute commands for each member in a list.\n"
 "    \n"
@@ -4894,7 +4918,7 @@ msgstr ""
 "    Návratová hodnota:\n"
 "    Vráti návratovú hodnotu posledného vykonaného príkazu."
 
-#: builtins.c:1562
+#: builtins.c:1563
 msgid ""
 "Arithmetic for loop.\n"
 "    \n"
@@ -4924,7 +4948,7 @@ msgstr ""
 "    Návratová hodnota:\n"
 "    Vráti návratovú hodnotu posledného vykonaného príkazu."
 
-#: builtins.c:1580
+#: builtins.c:1581
 msgid ""
 "Select words from a list and execute commands.\n"
 "    \n"
@@ -4959,7 +4983,7 @@ msgstr ""
 "    Návratová hodnota:\n"
 "    Vráti návratovú hodnotu posledného vykonaného príkazu."
 
-#: builtins.c:1601
+#: builtins.c:1602
 msgid ""
 "Report time consumed by pipeline's execution.\n"
 "    \n"
@@ -4987,7 +5011,7 @@ msgstr ""
 "    Návratová hodnota:\n"
 "    Návratová hodnota je návratová hodnota RÚRY."
 
-#: builtins.c:1618
+#: builtins.c:1619
 msgid ""
 "Execute commands based on pattern matching.\n"
 "    \n"
@@ -5005,7 +5029,7 @@ msgstr ""
 "    Návratová hodnota:\n"
 "    Vráti návratovú hodnotu posledného vykonaného príkazu."
 
-#: builtins.c:1630
+#: builtins.c:1631
 msgid ""
 "Execute commands based on conditional.\n"
 "    \n"
@@ -5042,12 +5066,14 @@ msgstr ""
 "    Návratová hodnota:\n"
 "    Vráti návratovú hodnotu posledného vykonaného príkazu."
 
-#: builtins.c:1647
+#: builtins.c:1648
+#, fuzzy
 msgid ""
 "Execute commands as long as a test succeeds.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `while' COMMANDS has an exit status of zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS "
+"has\n"
+"    an exit status of zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
@@ -5060,12 +5086,14 @@ msgstr ""
 "    Návratová hodnota:\n"
 "    Vráti návratovú hodnotu posledného vykonaného príkazu."
 
-#: builtins.c:1659
+#: builtins.c:1660
+#, fuzzy
 msgid ""
 "Execute commands as long as a test does not succeed.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `until' COMMANDS has an exit status which is not zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS "
+"has\n"
+"    an exit status which is not zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
@@ -5078,7 +5106,7 @@ msgstr ""
 "    Návratová hodnota:\n"
 "    Vráti návratovú hodnotu posledného vykonaného príkazu."
 
-#: builtins.c:1671
+#: builtins.c:1672
 #, fuzzy
 msgid ""
 "Create a coprocess named NAME.\n"
@@ -5101,7 +5129,7 @@ msgstr ""
 "    Návratová hodnota:\n"
 "    Vráti návratovú hodnotu PRÍKAZu."
 
-#: builtins.c:1685
+#: builtins.c:1686
 msgid ""
 "Define shell function.\n"
 "    \n"
@@ -5126,7 +5154,7 @@ msgstr ""
 "    Návratová hodnota:\n"
 "    Vráti 0 ak sa nestalo, že je NÁZOV iba na čítanie."
 
-#: builtins.c:1699
+#: builtins.c:1700
 msgid ""
 "Group commands as a unit.\n"
 "    \n"
@@ -5144,7 +5172,7 @@ msgstr ""
 "    Návratová hodnota:\n"
 "    Vráti návratovú hodnotu posledného vykonaného príkazu."
 
-#: builtins.c:1711
+#: builtins.c:1712
 msgid ""
 "Resume job in foreground.\n"
 "    \n"
@@ -5168,7 +5196,7 @@ msgstr ""
 "    Návratová hodnota:\n"
 "    Vráti návratovú hodnotu obnovenej úlohy."
 
-#: builtins.c:1726
+#: builtins.c:1727
 #, fuzzy
 msgid ""
 "Evaluate arithmetic expression.\n"
@@ -5187,7 +5215,7 @@ msgstr ""
 "    Návratová hodnota:\n"
 "    Vráti 1 ak sa VÝRAZ vyhodnotí na 0; inak vráti 0."
 
-#: builtins.c:1738
+#: builtins.c:1739
 msgid ""
 "Execute conditional command.\n"
 "    \n"
@@ -5235,7 +5263,7 @@ msgstr ""
 "    Návratová hodnota:\n"
 "    Vráti 0 alebo 1 v závislosti na hodnote VÝRAZu."
 
-#: builtins.c:1764
+#: builtins.c:1765
 msgid ""
 "Common shell variable names and usage.\n"
 "    \n"
@@ -5339,7 +5367,7 @@ msgstr ""
 "    HISTIGNORE\tBodkočiarkami oddelený zoznam vzoriek, ktoré\n"
 "    \t\tsa používajú na rozhodovanie, či sa príkaz uloží do histórie.\n"
 
-#: builtins.c:1821
+#: builtins.c:1822
 #, fuzzy
 msgid ""
 "Add directories to stack.\n"
@@ -5396,7 +5424,7 @@ msgstr ""
 "    Vráti 0 ak nebol zadaný neplatný argument a nevyskytla sa\n"
 "    chyba pri zmene adresára."
 
-#: builtins.c:1855
+#: builtins.c:1856
 #, fuzzy
 msgid ""
 "Remove directories from stack.\n"
@@ -5447,7 +5475,7 @@ msgstr ""
 "    Vráti 0 ak nebol zadaný neplatný argument a nevyskytla sa\n"
 "    chyba pri zmene adresára."
 
-#: builtins.c:1885
+#: builtins.c:1886
 #, fuzzy
 msgid ""
 "Display directory stack.\n"
@@ -5499,7 +5527,7 @@ msgstr ""
 "    Návratová hodnota:\n"
 "    Vráti 0 ak nebol zadaný neplatný argument a nevyskytla sa chyba."
 
-#: builtins.c:1916
+#: builtins.c:1917
 #, fuzzy
 msgid ""
 "Set and unset shell options.\n"
@@ -5537,7 +5565,7 @@ msgstr ""
 "    Vráti 0 ak je OPTNAME zapnuté; zlyhá ak bola zadaná\n"
 "    neplatná voľba alebo OPTNAME je vypnuté."
 
-#: builtins.c:1937
+#: builtins.c:1938
 #, fuzzy
 msgid ""
 "Formats and prints ARGUMENTS under control of the FORMAT.\n"
@@ -5561,6 +5589,8 @@ msgid ""
 "    \n"
 "      %b\texpand backslash escape sequences in the corresponding argument\n"
 "      %q\tquote the argument in a way that can be reused as shell input\n"
+"      %Q\tlike %q, but apply any precision to the unquoted argument before\n"
+"    \t\tquoting\n"
 "      %(fmt)T\toutput the date-time string resulting from using FMT as a "
 "format\n"
 "    \t        string for strftime(3)\n"
@@ -5602,7 +5632,7 @@ msgstr ""
 "    Vráti 0 ak nebola zadaná neplatná voľba a nevyskytla sa chyba pri\n"
 "    zápise či priradení."
 
-#: builtins.c:1971
+#: builtins.c:1974
 #, fuzzy
 msgid ""
 "Specify how arguments are to be completed by Readline.\n"
@@ -5655,7 +5685,7 @@ msgstr ""
 "    Návratová hodnota:\n"
 "    Vráti 0 ak nebola zadaná neplatná voľba a nevyskytla sa chyba."
 
-#: builtins.c:2001
+#: builtins.c:2004
 msgid ""
 "Display possible completions depending on the options.\n"
 "    \n"
@@ -5675,7 +5705,7 @@ msgstr ""
 "    Návratová hodnota:\n"
 "    Vráti 0 ak nebola zadaná neplatná voľba a nevyskytla sa chyba."
 
-#: builtins.c:2016
+#: builtins.c:2019
 #, fuzzy
 msgid ""
 "Modify or display completion options.\n"
@@ -5733,7 +5763,7 @@ msgstr ""
 "    Vráti 0 ak nebola zadaná neplatná voľba a NÁZOV nemá definovanú\n"
 "    špecifikáciu dopĺňania."
 
-#: builtins.c:2047
+#: builtins.c:2050
 #, fuzzy
 msgid ""
 "Read lines from the standard input into an indexed array variable.\n"
@@ -5808,7 +5838,7 @@ msgstr ""
 "    Vráti 0 ak nebola zadaná neplatná voľba a POLE nie je len na čítanie a\n"
 "    nie je to indexované pole."
 
-#: builtins.c:2083
+#: builtins.c:2086
 msgid ""
 "Read lines from a file into an array variable.\n"
 "    \n"
@@ -5818,6 +5848,10 @@ msgstr ""
 "    \n"
 "    Synonymum k „mapfile“."
 
+#, c-format
+#~ msgid "%s: invalid associative array key"
+#~ msgstr "%s: neplatný kľúč asociatívneho poľa"
+
 #, fuzzy
 #~ msgid "Copyright (C) 2019 Free Software Foundation, Inc."
 #~ msgstr "Copyright (C) 2011 Free Software Foundation, Inc."
index db02245a7115b718b8160e82b45c4900d3a15926..2615432b9966576bfbf3d9d1cac7cd1065a21def 100644 (file)
Binary files a/po/sl.gmo and b/po/sl.gmo differ
index d1ad41359b70d4e2f20cecb3369f49676f35346b..107fcea6e64b71b87d84c4230c8c6ec7e8ba1a68 100644 (file)
--- a/po/sl.po
+++ b/po/sl.po
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: bash-4.2\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-11-28 12:51-0500\n"
+"POT-Creation-Date: 2022-01-11 14:50-0500\n"
 "PO-Revision-Date: 2013-03-09 20:21+0100\n"
 "Last-Translator: Klemen Košir <klemen913@gmail.com>\n"
 "Language-Team: Slovenian <translation-team-sl@lists.sourceforge.net>\n"
@@ -25,58 +25,53 @@ msgstr ""
 msgid "bad array subscript"
 msgstr "slab podpis polja"
 
-#: arrayfunc.c:421 builtins/declare.def:638 variables.c:2274 variables.c:2300
-#: variables.c:3133
+#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268
+#: variables.c:3101
 #, c-format
 msgid "%s: removing nameref attribute"
 msgstr ""
 
-#: arrayfunc.c:446 builtins/declare.def:851
+#: arrayfunc.c:496 builtins/declare.def:868
 #, c-format
 msgid "%s: cannot convert indexed to associative array"
 msgstr "%s: ni mogoče pretvoriti zabeleženega polja v povezano polje"
 
-#: arrayfunc.c:700
-#, c-format
-msgid "%s: invalid associative array key"
-msgstr "%s: neveljaven ključ povezanega polja"
-
-#: arrayfunc.c:702
+#: arrayfunc.c:777
 #, c-format
 msgid "%s: cannot assign to non-numeric index"
 msgstr "%s: ni mogoče dodeliti v ne-številčno kazalo"
 
-#: arrayfunc.c:747
+#: arrayfunc.c:822
 #, c-format
 msgid "%s: %s: must use subscript when assigning associative array"
 msgstr "%s: %s: treba je uporabiti podpis pri dodeljevanju povezanega polja"
 
-#: bashhist.c:452
+#: bashhist.c:455
 #, c-format
 msgid "%s: cannot create: %s"
 msgstr "%s: ni mogoče ustvariti: %s"
 
-#: bashline.c:4310
+#: bashline.c:4479
 msgid "bash_execute_unix_command: cannot find keymap for command"
 msgstr ""
 "bash_execute_unix_command: ni mogoče najti tipkovne razvrstitve za ukaz"
 
-#: bashline.c:4459
+#: bashline.c:4637
 #, c-format
 msgid "%s: first non-whitespace character is not `\"'"
 msgstr "%s: prvi znak brez presledka ni `\"'"
 
-#: bashline.c:4488
+#: bashline.c:4666
 #, c-format
 msgid "no closing `%c' in %s"
 msgstr "brez zaključka `%c' v %s"
 
-#: bashline.c:4519
+#: bashline.c:4697
 #, c-format
 msgid "%s: missing colon separator"
 msgstr "%s: manjka ločilnik dvopičja"
 
-#: bashline.c:4555
+#: bashline.c:4733
 #, fuzzy, c-format
 msgid "`%s': cannot unbind in command keymap"
 msgstr "`%s': ni mogoče odvezati"
@@ -96,7 +91,7 @@ msgstr ""
 msgid "brace expansion: failed to allocate memory for `%s'"
 msgstr ""
 
-#: builtins/alias.def:131 variables.c:1844
+#: builtins/alias.def:131 variables.c:1817
 #, c-format
 msgid "`%s': invalid alias name"
 msgstr "`%s': neveljaven vzdevek"
@@ -172,7 +167,7 @@ msgstr ""
 msgid "HOME not set"
 msgstr "HOME ni nastavljen"
 
-#: builtins/cd.def:335 builtins/common.c:161 test.c:901
+#: builtins/cd.def:335 builtins/common.c:161 test.c:916
 msgid "too many arguments"
 msgstr "preveč argumentov"
 
@@ -200,7 +195,7 @@ msgstr "opozorilo: "
 msgid "%s: usage: "
 msgstr "%s: uporaba: "
 
-#: builtins/common.c:193 shell.c:516 shell.c:844
+#: builtins/common.c:193 shell.c:524 shell.c:866
 #, c-format
 msgid "%s: option requires an argument"
 msgstr "%s: možnost zahteva argument"
@@ -215,7 +210,7 @@ msgstr "%s: zahtevan je števni argument"
 msgid "%s: not found"
 msgstr "%s: ni mogoče najti"
 
-#: builtins/common.c:216 shell.c:857
+#: builtins/common.c:216 shell.c:879
 #, c-format
 msgid "%s: invalid option"
 msgstr "%s: neveljavna možnost"
@@ -225,7 +220,7 @@ msgstr "%s: neveljavna možnost"
 msgid "%s: invalid option name"
 msgstr "%s: neveljavno ime možnosti"
 
-#: builtins/common.c:230 execute_cmd.c:2373 general.c:368 general.c:373
+#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373
 #, c-format
 msgid "`%s': not a valid identifier"
 msgstr "`%s': neveljavno določilo"
@@ -238,7 +233,7 @@ msgstr "neveljavno osmiško število"
 msgid "invalid hex number"
 msgstr "neveljavno šestnajstiško število"
 
-#: builtins/common.c:244 expr.c:1569
+#: builtins/common.c:244 expr.c:1574
 msgid "invalid number"
 msgstr "neveljavno število"
 
@@ -252,88 +247,93 @@ msgstr "%s: neveljavno določilo signala"
 msgid "`%s': not a pid or valid job spec"
 msgstr "`%s': ni določilo opravila ali neveljavno določilo posla"
 
-#: builtins/common.c:266 error.c:510
+#: builtins/common.c:266 error.c:536
 #, c-format
 msgid "%s: readonly variable"
 msgstr "%s: spremenljivka le za branje"
 
-#: builtins/common.c:274
+#: builtins/common.c:273
+#, fuzzy, c-format
+msgid "%s: cannot assign"
+msgstr "%s: ni mogoče ponastaviti"
+
+#: builtins/common.c:281
 #, c-format
 msgid "%s: %s out of range"
 msgstr "%s: %s izven dosega"
 
-#: builtins/common.c:274 builtins/common.c:276
+#: builtins/common.c:281 builtins/common.c:283
 msgid "argument"
 msgstr "argument"
 
-#: builtins/common.c:276
+#: builtins/common.c:283
 #, c-format
 msgid "%s out of range"
 msgstr "%s izven dosega"
 
-#: builtins/common.c:284
+#: builtins/common.c:291
 #, c-format
 msgid "%s: no such job"
 msgstr "%s: ni takšnega posla"
 
-#: builtins/common.c:292
+#: builtins/common.c:299
 #, c-format
 msgid "%s: no job control"
 msgstr "%s: ni nadzora posla"
 
-#: builtins/common.c:294
+#: builtins/common.c:301
 msgid "no job control"
 msgstr "ni nadzora posla"
 
-#: builtins/common.c:304
+#: builtins/common.c:311
 #, c-format
 msgid "%s: restricted"
 msgstr "%s: omejeno"
 
-#: builtins/common.c:306
+#: builtins/common.c:313
 msgid "restricted"
 msgstr "omejeno"
 
-#: builtins/common.c:314
+#: builtins/common.c:321
 #, c-format
 msgid "%s: not a shell builtin"
 msgstr "%s: ni vgrajena lupina"
 
-#: builtins/common.c:323
+#: builtins/common.c:330
 #, c-format
 msgid "write error: %s"
 msgstr "napaka med pisanjem: %s"
 
-#: builtins/common.c:331
+#: builtins/common.c:338
 #, c-format
 msgid "error setting terminal attributes: %s"
 msgstr "napaka med nastavljanjem atributov terminala: %s"
 
-#: builtins/common.c:333
+#: builtins/common.c:340
 #, c-format
 msgid "error getting terminal attributes: %s"
 msgstr "napaka med pridobivanjem atributov terminala: %s"
 
-#: builtins/common.c:635
+#: builtins/common.c:642
 #, c-format
 msgid "%s: error retrieving current directory: %s: %s\n"
 msgstr "%s: napaka med pridobivanjem trenutne mape: %s: %s\n"
 
-#: builtins/common.c:701 builtins/common.c:703
+#: builtins/common.c:708 builtins/common.c:710
 #, c-format
 msgid "%s: ambiguous job spec"
 msgstr "%s: dvoumno določilo posla"
 
-#: builtins/common.c:964
+#: builtins/common.c:971
 msgid "help not available in this version"
 msgstr ""
 
-#: builtins/common.c:1008 builtins/set.def:953 variables.c:3839
+#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825
 #, c-format
 msgid "%s: cannot unset: readonly %s"
 msgstr "%s: ni mogoče ponastaviti: samo za branje %s"
 
-#: builtins/common.c:1013 builtins/set.def:932 variables.c:3844
+#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830
 #, c-format
 msgid "%s: cannot unset"
 msgstr "%s: ni mogoče ponastaviti"
@@ -343,108 +343,108 @@ msgstr "%s: ni mogoče ponastaviti"
 msgid "%s: invalid action name"
 msgstr "%s: neveljavno ime dejanja"
 
-#: builtins/complete.def:486 builtins/complete.def:634
-#: builtins/complete.def:865
+#: builtins/complete.def:486 builtins/complete.def:642
+#: builtins/complete.def:873
 #, c-format
 msgid "%s: no completion specification"
 msgstr "%s: ni določila dopolnjevanja"
 
-#: builtins/complete.def:688
+#: builtins/complete.def:696
 msgid "warning: -F option may not work as you expect"
 msgstr "Opozorilo: možnost -F morda ne bo delovala po pričakovanjih"
 
-#: builtins/complete.def:690
+#: builtins/complete.def:698
 msgid "warning: -C option may not work as you expect"
 msgstr "Opozorilo: možnost -C morda ne bo delovala po pričakovanjih"
 
-#: builtins/complete.def:838
+#: builtins/complete.def:846
 msgid "not currently executing completion function"
 msgstr "trenutno se ne izvaja funkcija dopolnjevanja"
 
-#: builtins/declare.def:134
+#: builtins/declare.def:137
 msgid "can only be used in a function"
 msgstr "se lahko uporabi samo v funkciji"
 
-#: builtins/declare.def:363 builtins/declare.def:756
+#: builtins/declare.def:437
+msgid "cannot use `-f' to make functions"
+msgstr "ni mogoče uporabiti `-f' za ustvarjanje funkcij"
+
+#: builtins/declare.def:464 execute_cmd.c:6132
+#, c-format
+msgid "%s: readonly function"
+msgstr "%s: funkcija samo za branje"
+
+#: builtins/declare.def:521 builtins/declare.def:804
 #, c-format
 msgid "%s: reference variable cannot be an array"
 msgstr ""
 
-#: builtins/declare.def:374 variables.c:3385
+#: builtins/declare.def:532 variables.c:3359
 #, c-format
 msgid "%s: nameref variable self references not allowed"
 msgstr ""
 
-#: builtins/declare.def:379 variables.c:2104 variables.c:3304 variables.c:3312
-#: variables.c:3382
+#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286
+#: variables.c:3356
 #, c-format
 msgid "%s: circular name reference"
 msgstr ""
 
-#: builtins/declare.def:384 builtins/declare.def:762 builtins/declare.def:773
+#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820
 #, fuzzy, c-format
 msgid "`%s': invalid variable name for name reference"
 msgstr "`%s': neveljaven vzdevek"
 
-#: builtins/declare.def:514
-msgid "cannot use `-f' to make functions"
-msgstr "ni mogoče uporabiti `-f' za ustvarjanje funkcij"
-
-#: builtins/declare.def:526 execute_cmd.c:5986
-#, c-format
-msgid "%s: readonly function"
-msgstr "%s: funkcija samo za branje"
-
-#: builtins/declare.def:824
-#, c-format
-msgid "%s: quoted compound array assignment deprecated"
-msgstr ""
-
-#: builtins/declare.def:838
+#: builtins/declare.def:856
 #, c-format
 msgid "%s: cannot destroy array variables in this way"
 msgstr "%s: na ta način ni mogoče uničiti spremenljivk polja"
 
-#: builtins/declare.def:845 builtins/read.def:815
+#: builtins/declare.def:862 builtins/read.def:887
 #, c-format
 msgid "%s: cannot convert associative to indexed array"
 msgstr "%s: ni mogoče pretvoriti povezanega polja v zabeleženo polje"
 
-#: builtins/enable.def:143 builtins/enable.def:151
+#: builtins/declare.def:891
+#, c-format
+msgid "%s: quoted compound array assignment deprecated"
+msgstr ""
+
+#: builtins/enable.def:145 builtins/enable.def:153
 msgid "dynamic loading not available"
 msgstr "dinamično nalaganje ni na voljo"
 
-#: builtins/enable.def:343
+#: builtins/enable.def:376
 #, c-format
 msgid "cannot open shared object %s: %s"
 msgstr "ni mogoče odpreti predmeta v souporabi %s: %s"
 
-#: builtins/enable.def:371
+#: builtins/enable.def:405
 #, c-format
 msgid "cannot find %s in shared object %s: %s"
 msgstr "ni mogoče najti %s v predmetu v souporabi %s: %s"
 
-#: builtins/enable.def:388
+#: builtins/enable.def:422
 #, fuzzy, c-format
 msgid "%s: dynamic builtin already loaded"
 msgstr "%s: ni dinamično naloženo"
 
-#: builtins/enable.def:392
+#: builtins/enable.def:426
 #, c-format
 msgid "load function for %s returns failure (%d): not loaded"
 msgstr ""
 
-#: builtins/enable.def:517
+#: builtins/enable.def:551
 #, c-format
 msgid "%s: not dynamically loaded"
 msgstr "%s: ni dinamično naloženo"
 
-#: builtins/enable.def:543
+#: builtins/enable.def:577
 #, c-format
 msgid "%s: cannot delete: %s"
 msgstr "%s: ni mogoče izbrisati: %s"
 
-#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5818
+#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959
 #, c-format
 msgid "%s: is a directory"
 msgstr "%s: je mapa"
@@ -459,7 +459,7 @@ msgstr "%s: ni običajna datoteka"
 msgid "%s: file is too large"
 msgstr "%s: datoteka je prevelika"
 
-#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1647
+#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673
 #, c-format
 msgid "%s: cannot execute binary file"
 msgstr "%s: ni mogoče izvesti binarne datoteke"
@@ -557,12 +557,12 @@ msgstr ""
 "nobena tema pomoči se ne ujema s `%s'.  Poskusite `help help' ali `man -k "
 "%s' ali `info %s'."
 
-#: builtins/help.def:224
+#: builtins/help.def:223
 #, c-format
 msgid "%s: cannot open: %s"
 msgstr "%s: ni mogoče odpreti: %s"
 
-#: builtins/help.def:524
+#: builtins/help.def:523
 #, c-format
 msgid ""
 "These shell commands are defined internally.  Type `help' to see this list.\n"
@@ -583,21 +583,21 @@ msgstr ""
 "Zvezdica (*) poleg imena pomeni, da je ukaz onemogočen.\n"
 "\n"
 
-#: builtins/history.def:155
+#: builtins/history.def:159
 msgid "cannot use more than one of -anrw"
 msgstr "ni mogoče uporabiti več kot eno od -anrw"
 
-#: builtins/history.def:188 builtins/history.def:198 builtins/history.def:213
-#: builtins/history.def:230 builtins/history.def:242 builtins/history.def:249
+#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215
+#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247
 msgid "history position"
 msgstr "položaj zgodovine"
 
-#: builtins/history.def:340
+#: builtins/history.def:338
 #, fuzzy, c-format
 msgid "%s: invalid timestamp"
 msgstr "%s: neveljavno ime možnosti"
 
-#: builtins/history.def:451
+#: builtins/history.def:449
 #, c-format
 msgid "%s: history expansion failed"
 msgstr "%s: razširitev zgodovine je spodletela"
@@ -620,78 +620,78 @@ msgstr "%s: argumenti morajo biti določila opravila ali posla"
 msgid "Unknown error"
 msgstr "Neznana napaka"
 
-#: builtins/let.def:97 builtins/let.def:122 expr.c:639 expr.c:657
+#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658
 msgid "expression expected"
 msgstr "izraz je bil pričakovan"
 
-#: builtins/mapfile.def:178
+#: builtins/mapfile.def:180
 #, c-format
 msgid "%s: not an indexed array"
 msgstr "%s: ni zabeleženo polje"
 
-#: builtins/mapfile.def:271 builtins/read.def:308
+#: builtins/mapfile.def:276 builtins/read.def:336
 #, c-format
 msgid "%s: invalid file descriptor specification"
 msgstr "%s: neveljavno določilo opisnika datoteke"
 
-#: builtins/mapfile.def:279 builtins/read.def:315
+#: builtins/mapfile.def:284 builtins/read.def:343
 #, c-format
 msgid "%d: invalid file descriptor: %s"
 msgstr "%d: neveljaven opisnik datoteke: %s"
 
-#: builtins/mapfile.def:288 builtins/mapfile.def:326
+#: builtins/mapfile.def:293 builtins/mapfile.def:331
 #, c-format
 msgid "%s: invalid line count"
 msgstr "%s: neveljavno štetje vrstic"
 
-#: builtins/mapfile.def:299
+#: builtins/mapfile.def:304
 #, c-format
 msgid "%s: invalid array origin"
 msgstr "%s: neveljaven izvor polja"
 
-#: builtins/mapfile.def:316
+#: builtins/mapfile.def:321
 #, c-format
 msgid "%s: invalid callback quantum"
 msgstr "%s: neveljaven del povratnega klica"
 
-#: builtins/mapfile.def:349
+#: builtins/mapfile.def:354
 msgid "empty array variable name"
 msgstr "prazno ime spremenljivke polja"
 
-#: builtins/mapfile.def:370
+#: builtins/mapfile.def:375
 msgid "array variable support required"
 msgstr "potrebna podpora spremenljivke polja"
 
-#: builtins/printf.def:419
+#: builtins/printf.def:430
 #, c-format
 msgid "`%s': missing format character"
 msgstr "`%s': manjka znak oblike"
 
-#: builtins/printf.def:474
+#: builtins/printf.def:485
 #, c-format
 msgid "`%c': invalid time format specification"
 msgstr "`%c': neveljavno določilo vrste časa"
 
-#: builtins/printf.def:676
+#: builtins/printf.def:708
 #, c-format
 msgid "`%c': invalid format character"
 msgstr "`%c': neveljaven znak oblike"
 
-#: builtins/printf.def:702
+#: builtins/printf.def:734
 #, c-format
 msgid "warning: %s: %s"
 msgstr "opozorilo: %s: %s"
 
-#: builtins/printf.def:788
+#: builtins/printf.def:822
 #, c-format
 msgid "format parsing problem: %s"
 msgstr ""
 
-#: builtins/printf.def:885
+#: builtins/printf.def:919
 msgid "missing hex digit for \\x"
 msgstr "manjka šestnajstiška števka za \\x"
 
-#: builtins/printf.def:900
+#: builtins/printf.def:934
 #, c-format
 msgid "missing unicode digit for \\%c"
 msgstr "manjka števka s podporo unicode za \\%c"
@@ -842,12 +842,12 @@ msgstr ""
 "    \n"
 "    Ukaz lupine `dirs' prikaže sklad map."
 
-#: builtins/read.def:280
+#: builtins/read.def:308
 #, c-format
 msgid "%s: invalid timeout specification"
 msgstr "%s: neveljavno določilo časovne omejitve"
 
-#: builtins/read.def:755
+#: builtins/read.def:827
 #, c-format
 msgid "read error: %d: %s"
 msgstr "napaka med branjem: %d: %s"
@@ -860,7 +860,7 @@ msgstr "`return' lahko vrne samo iz funkcije ali skripte z izvorno kodo"
 msgid "cannot simultaneously unset a function and a variable"
 msgstr "ni mogoče ponastaviti funkcije in spremenljivke hkrati"
 
-#: builtins/set.def:966
+#: builtins/set.def:969
 #, c-format
 msgid "%s: not an array variable"
 msgstr "%s: ni spremenljivka polja"
@@ -879,11 +879,11 @@ msgstr "%s: ni mogoče ponastaviti"
 msgid "shift count"
 msgstr "štetje premika"
 
-#: builtins/shopt.def:310
+#: builtins/shopt.def:323
 msgid "cannot set and unset shell options simultaneously"
 msgstr "ni mogoče nastaviti in ponastaviti možnosti lupine hkrati"
 
-#: builtins/shopt.def:428
+#: builtins/shopt.def:444
 #, c-format
 msgid "%s: invalid shell option name"
 msgstr "%s: neveljavno ime možnosti lupine"
@@ -950,16 +950,16 @@ msgstr "%s: neveljaven argument omejitve"
 msgid "`%c': bad command"
 msgstr "`%c': slab ukaz"
 
-#: builtins/ulimit.def:455
+#: builtins/ulimit.def:464
 #, c-format
 msgid "%s: cannot get limit: %s"
 msgstr "%s: ni mogoče dobiti omejitve: %s"
 
-#: builtins/ulimit.def:481
+#: builtins/ulimit.def:490
 msgid "limit"
 msgstr "omejitev"
 
-#: builtins/ulimit.def:493 builtins/ulimit.def:793
+#: builtins/ulimit.def:502 builtins/ulimit.def:802
 #, c-format
 msgid "%s: cannot modify limit: %s"
 msgstr "%s: ni mogoče spremeniti omejitve: %s"
@@ -978,7 +978,7 @@ msgstr "`%c': neveljaven operator simbolnega načina"
 msgid "`%c': invalid symbolic mode character"
 msgstr "`%c': neveljaven znak simbolnega načina"
 
-#: error.c:89 error.c:347 error.c:349 error.c:351
+#: error.c:89 error.c:373 error.c:375 error.c:377
 msgid " line "
 msgstr " vrstica "
 
@@ -998,96 +998,106 @@ msgstr "Prekinjanje ..."
 msgid "INFORM: "
 msgstr ""
 
-#: error.c:462
+#: error.c:310
+#, fuzzy, c-format
+msgid "DEBUG warning: "
+msgstr "opozorilo: "
+
+#: error.c:488
 msgid "unknown command error"
 msgstr "neznana napaka ukaza"
 
-#: error.c:463
+#: error.c:489
 msgid "bad command type"
 msgstr "slaba vrsta ukaza"
 
-#: error.c:464
+#: error.c:490
 msgid "bad connector"
 msgstr "slab povezovalnik"
 
-#: error.c:465
+#: error.c:491
 msgid "bad jump"
 msgstr "slab skok"
 
-#: error.c:503
+#: error.c:529
 #, c-format
 msgid "%s: unbound variable"
 msgstr "%s: nedoločena spremenljivka"
 
-#: eval.c:242
+#: eval.c:243
 msgid "\atimed out waiting for input: auto-logout\n"
 msgstr "\apotekla je časovna omejitev med čakanjem na vnos: samodejna odjava\n"
 
-#: execute_cmd.c:537
+#: execute_cmd.c:555
 #, c-format
 msgid "cannot redirect standard input from /dev/null: %s"
 msgstr "ni mogoče preusmeriti običajnega vnosa iz /dev/null: %s"
 
-#: execute_cmd.c:1297
+#: execute_cmd.c:1317
 #, c-format
 msgid "TIMEFORMAT: `%c': invalid format character"
 msgstr "TIMEFORMAT: `%c': neveljaven znak oblike"
 
-#: execute_cmd.c:2362
+#: execute_cmd.c:2391
 #, c-format
 msgid "execute_coproc: coproc [%d:%s] still exists"
 msgstr ""
 
-#: execute_cmd.c:2486
+#: execute_cmd.c:2524
 msgid "pipe error"
 msgstr "napaka cevi"
 
-#: execute_cmd.c:4793
+#: execute_cmd.c:4923
 #, c-format
 msgid "eval: maximum eval nesting level exceeded (%d)"
 msgstr ""
 
-#: execute_cmd.c:4805
+#: execute_cmd.c:4935
 #, c-format
 msgid "%s: maximum source nesting level exceeded (%d)"
 msgstr ""
 
-#: execute_cmd.c:4913
+#: execute_cmd.c:5043
 #, c-format
 msgid "%s: maximum function nesting level exceeded (%d)"
 msgstr ""
 
-#: execute_cmd.c:5467
+#: execute_cmd.c:5598
 #, c-format
 msgid "%s: restricted: cannot specify `/' in command names"
 msgstr "%s: omejeno: ni mogoče določiti `/' v imenih ukaza"
 
-#: execute_cmd.c:5574
+#: execute_cmd.c:5715
 #, c-format
 msgid "%s: command not found"
 msgstr "%s: ukaza ni mogoče najti"
 
-#: execute_cmd.c:5816
+#: execute_cmd.c:5957
 #, c-format
 msgid "%s: %s"
 msgstr "%s: %s"
 
-#: execute_cmd.c:5854
+#: execute_cmd.c:5975
+#, fuzzy, c-format
+msgid "%s: cannot execute: required file not found"
+msgstr "%s: ni mogoče izvesti binarne datoteke"
+
+#: execute_cmd.c:6000
 #, c-format
 msgid "%s: %s: bad interpreter"
 msgstr "%s: %s: slab tolmač"
 
-#: execute_cmd.c:5891
+#: execute_cmd.c:6037
 #, fuzzy, c-format
 msgid "%s: cannot execute binary file: %s"
 msgstr "%s: ni mogoče izvesti binarne datoteke"
 
-#: execute_cmd.c:5977
+#: execute_cmd.c:6123
 #, fuzzy, c-format
 msgid "`%s': is a special builtin"
 msgstr "%s je vgrajena lupina\n"
 
-#: execute_cmd.c:6029
+#: execute_cmd.c:6175
 #, c-format
 msgid "cannot duplicate fd %d to fd %d"
 msgstr "ni mogoče podvajati fd %d v fd %d"
@@ -1100,70 +1110,70 @@ msgstr "stopnja rekurzivnosti izraza presežena"
 msgid "recursion stack underflow"
 msgstr "prekoračitev spodnje meje sklada rekurzivnosti"
 
-#: expr.c:477
+#: expr.c:478
 msgid "syntax error in expression"
 msgstr "skladenjska napaka v izrazu"
 
-#: expr.c:521
+#: expr.c:522
 msgid "attempted assignment to non-variable"
 msgstr "poskus dodelitve ne-spremenljivki"
 
-#: expr.c:530
+#: expr.c:531
 #, fuzzy
 msgid "syntax error in variable assignment"
 msgstr "skladenjska napaka v izrazu"
 
-#: expr.c:544 expr.c:911
+#: expr.c:545 expr.c:912
 msgid "division by 0"
 msgstr "delitev z 0"
 
-#: expr.c:592
+#: expr.c:593
 msgid "bug: bad expassign token"
 msgstr "hrošč: slab žeton expassign"
 
-#: expr.c:646
+#: expr.c:647
 msgid "`:' expected for conditional expression"
 msgstr "`:' pričakovano za pogojni izraz"
 
-#: expr.c:972
+#: expr.c:973
 msgid "exponent less than 0"
 msgstr "eksponent je manjši kot 0"
 
-#: expr.c:1029
+#: expr.c:1030
 msgid "identifier expected after pre-increment or pre-decrement"
 msgstr "po predhodnem večanju ali manjšanju je pričakovano določilo"
 
-#: expr.c:1056
+#: expr.c:1057
 msgid "missing `)'"
 msgstr "manjka `)'"
 
-#: expr.c:1107 expr.c:1487
+#: expr.c:1108 expr.c:1492
 msgid "syntax error: operand expected"
 msgstr "skladenjska napaka: pričakovan operand"
 
-#: expr.c:1489
+#: expr.c:1494
 msgid "syntax error: invalid arithmetic operator"
 msgstr "skladenjska napaka: neveljaven aritmetični operand"
 
-#: expr.c:1513
+#: expr.c:1518
 #, c-format
 msgid "%s%s%s: %s (error token is \"%s\")"
 msgstr "%s%s%s: %s (žeton napake je \"%s\")"
 
-#: expr.c:1573
+#: expr.c:1578
 msgid "invalid arithmetic base"
 msgstr "neveljavna aritmetična zbirka"
 
-#: expr.c:1582
+#: expr.c:1587
 #, fuzzy
 msgid "invalid integer constant"
 msgstr "%s: neveljavno štetje vrstic"
 
-#: expr.c:1598
+#: expr.c:1603
 msgid "value too great for base"
 msgstr "vrednost je prevelika za zbirko"
 
-#: expr.c:1647
+#: expr.c:1652
 #, c-format
 msgid "%s: expression error\n"
 msgstr "%s: napaka izraza\n"
@@ -1172,7 +1182,7 @@ msgstr "%s: napaka izraza\n"
 msgid "getcwd: cannot access parent directories"
 msgstr "getcwd: ni mogoče dostopati do nadrejenih map"
 
-#: input.c:99 subst.c:6069
+#: input.c:99 subst.c:6208
 #, c-format
 msgid "cannot reset nodelay mode for fd %d"
 msgstr "ni mogoče ponastaviti načina brez zakasnitve za fd %d"
@@ -1191,168 +1201,168 @@ msgstr "save_bash_input: medpomnilnik že obstaja za nov fd %d"
 msgid "start_pipeline: pgrp pipe"
 msgstr "start_pipeline: cev pgrp"
 
-#: jobs.c:906
+#: jobs.c:907
 #, c-format
 msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr ""
 
-#: jobs.c:959
+#: jobs.c:960
 #, c-format
 msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr ""
 
-#: jobs.c:1283
+#: jobs.c:1279
 #, c-format
 msgid "forked pid %d appears in running job %d"
 msgstr "razvejen id opravila %d se pojavi v izvajajočem se poslu %d"
 
-#: jobs.c:1402
+#: jobs.c:1397
 #, c-format
 msgid "deleting stopped job %d with process group %ld"
 msgstr "brisanje ustavljenega posla %d s skupino opravila %ld"
 
-#: jobs.c:1511
+#: jobs.c:1502
 #, c-format
 msgid "add_process: pid %5ld (%s) marked as still alive"
 msgstr "add_process: id opravila %5ld (%s) je označen kot še živ"
 
-#: jobs.c:1850
+#: jobs.c:1839
 #, c-format
 msgid "describe_pid: %ld: no such pid"
 msgstr "describe_pid: %ld: ni takšnega določila opravila"
 
-#: jobs.c:1865
+#: jobs.c:1854
 #, c-format
 msgid "Signal %d"
 msgstr "Signal %d"
 
-#: jobs.c:1879 jobs.c:1905
+#: jobs.c:1868 jobs.c:1894
 msgid "Done"
 msgstr "Končano"
 
-#: jobs.c:1884 siglist.c:122
+#: jobs.c:1873 siglist.c:123
 msgid "Stopped"
 msgstr "Zaustavljeno"
 
-#: jobs.c:1888
+#: jobs.c:1877
 #, c-format
 msgid "Stopped(%s)"
 msgstr "Zaustavljeno(%s)"
 
-#: jobs.c:1892
+#: jobs.c:1881
 msgid "Running"
 msgstr "Se izvaja"
 
-#: jobs.c:1909
+#: jobs.c:1898
 #, c-format
 msgid "Done(%d)"
 msgstr "Končano(%d)"
 
-#: jobs.c:1911
+#: jobs.c:1900
 #, c-format
 msgid "Exit %d"
 msgstr "Končaj %d"
 
-#: jobs.c:1914
+#: jobs.c:1903
 msgid "Unknown status"
 msgstr "Neznano stanje"
 
-#: jobs.c:2001
+#: jobs.c:1990
 #, c-format
 msgid "(core dumped) "
 msgstr "(izpis jedra) "
 
-#: jobs.c:2020
+#: jobs.c:2009
 #, c-format
 msgid "  (wd: %s)"
 msgstr "  (wd: %s)"
 
-#: jobs.c:2259
+#: jobs.c:2250
 #, c-format
 msgid "child setpgid (%ld to %ld)"
 msgstr "podrejeno opravilo setpgid (%ld v %ld)"
 
-#: jobs.c:2617 nojobs.c:664
+#: jobs.c:2608 nojobs.c:666
 #, c-format
 msgid "wait: pid %ld is not a child of this shell"
 msgstr "wait: opravilo z id %ld ni podrejeno opravilo te lupine"
 
-#: jobs.c:2893
+#: jobs.c:2884
 #, c-format
 msgid "wait_for: No record of process %ld"
 msgstr "wait_for: ni zapisov o opravilu %ld"
 
-#: jobs.c:3236
+#: jobs.c:3223
 #, c-format
 msgid "wait_for_job: job %d is stopped"
 msgstr "wait_for_job: posel %d je zaustavljen"
 
-#: jobs.c:3564
+#: jobs.c:3551
 #, fuzzy, c-format
 msgid "%s: no current jobs"
 msgstr "%s: ni takšnega posla"
 
-#: jobs.c:3571
+#: jobs.c:3558
 #, c-format
 msgid "%s: job has terminated"
 msgstr "%s: posel je uničen"
 
-#: jobs.c:3580
+#: jobs.c:3567
 #, c-format
 msgid "%s: job %d already in background"
 msgstr "%s: posel %d se že izvaja v ozadju"
 
-#: jobs.c:3806
+#: jobs.c:3793
 msgid "waitchld: turning on WNOHANG to avoid indefinite block"
 msgstr "waitchld: vklop WNOHANG za preprečitev nedoločenosti bloka"
 
-#: jobs.c:4320
+#: jobs.c:4307
 #, c-format
 msgid "%s: line %d: "
 msgstr "%s: vrstica %d: "
 
-#: jobs.c:4334 nojobs.c:919
+#: jobs.c:4321 nojobs.c:921
 #, c-format
 msgid " (core dumped)"
 msgstr " (izpis jedra)"
 
-#: jobs.c:4346 jobs.c:4359
+#: jobs.c:4333 jobs.c:4346
 #, c-format
 msgid "(wd now: %s)\n"
 msgstr "(wd zdaj: %s)\n"
 
-#: jobs.c:4391
+#: jobs.c:4378
 msgid "initialize_job_control: getpgrp failed"
 msgstr "initialize_job_control: getpgrp je spodletel"
 
-#: jobs.c:4447
+#: jobs.c:4434
 #, fuzzy
 msgid "initialize_job_control: no job control in background"
 msgstr "initialize_job_control: vrstična disciplina"
 
-#: jobs.c:4463
+#: jobs.c:4450
 msgid "initialize_job_control: line discipline"
 msgstr "initialize_job_control: vrstična disciplina"
 
-#: jobs.c:4473
+#: jobs.c:4460
 msgid "initialize_job_control: setpgid"
 msgstr "initialize_job_control: setpgid"
 
-#: jobs.c:4494 jobs.c:4503
+#: jobs.c:4481 jobs.c:4490
 #, c-format
 msgid "cannot set terminal process group (%d)"
 msgstr "ni mogoče nastaviti skupine opravil terminala (%d)"
 
-#: jobs.c:4508
+#: jobs.c:4495
 msgid "no job control in this shell"
 msgstr "brez nadzora posla v tej lupini"
 
-#: lib/malloc/malloc.c:353
+#: lib/malloc/malloc.c:367
 #, c-format
 msgid "malloc: failed assertion: %s\n"
 msgstr "malloc: spodletela trditev: %s\n"
 
-#: lib/malloc/malloc.c:369
+#: lib/malloc/malloc.c:383
 #, c-format
 msgid ""
 "\r\n"
@@ -1361,51 +1371,51 @@ msgstr ""
 "\r\n"
 "malloc: %s:%d: trditev je bila slabo izpeljana\r\n"
 
-#: lib/malloc/malloc.c:370 lib/malloc/malloc.c:933
+#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941
 msgid "unknown"
 msgstr "neznano"
 
-#: lib/malloc/malloc.c:882
+#: lib/malloc/malloc.c:892
 msgid "malloc: block on free list clobbered"
 msgstr "malloc: vsebina bloka na prostem seznamu je bila prepisana"
 
-#: lib/malloc/malloc.c:972
+#: lib/malloc/malloc.c:980
 msgid "free: called with already freed block argument"
 msgstr "free: poklican z že sproščenim argumentom bloka"
 
-#: lib/malloc/malloc.c:975
+#: lib/malloc/malloc.c:983
 msgid "free: called with unallocated block argument"
 msgstr "free: klic z nedodeljenim argumentom bloka"
 
-#: lib/malloc/malloc.c:994
+#: lib/malloc/malloc.c:1001
 msgid "free: underflow detected; mh_nbytes out of range"
 msgstr "free: zaznana prekoračitev spodnje meje; mh_nbytes je izven dosega"
 
-#: lib/malloc/malloc.c:1001
+#: lib/malloc/malloc.c:1007
 #, fuzzy
 msgid "free: underflow detected; magic8 corrupted"
 msgstr "free: zaznana prekoračitev spodnje meje; mh_nbytes je izven dosega"
 
-#: lib/malloc/malloc.c:1009
+#: lib/malloc/malloc.c:1014
 msgid "free: start and end chunk sizes differ"
 msgstr ""
 "free: velikosti začetnih in končnih podatkovnih kosov \"chunk\" se "
 "razlikujejo"
 
-#: lib/malloc/malloc.c:1119
+#: lib/malloc/malloc.c:1176
 msgid "realloc: called with unallocated block argument"
 msgstr "realloc: klic z nedodeljenim argumentom bloka"
 
-#: lib/malloc/malloc.c:1134
+#: lib/malloc/malloc.c:1191
 msgid "realloc: underflow detected; mh_nbytes out of range"
 msgstr "realloc: zaznana prekoračitev spodnje meje; mh_nbytes je izven dosega"
 
-#: lib/malloc/malloc.c:1141
+#: lib/malloc/malloc.c:1197
 #, fuzzy
 msgid "realloc: underflow detected; magic8 corrupted"
 msgstr "realloc: zaznana prekoračitev spodnje meje; mh_nbytes je izven dosega"
 
-#: lib/malloc/malloc.c:1150
+#: lib/malloc/malloc.c:1205
 msgid "realloc: start and end chunk sizes differ"
 msgstr ""
 "realloc: velikosti začetnih in končnih podatkovnih kosov \"chunk\" se "
@@ -1449,22 +1459,22 @@ msgstr "%s: slabo določilo omrežne poti"
 msgid "network operations not supported"
 msgstr "omrežno opravilo ni podprto"
 
-#: locale.c:217
+#: locale.c:219
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s)"
 msgstr "setlocale: LC_ALL: ni mogoče spremeniti jezikovne oznake (%s)"
 
-#: locale.c:219
+#: locale.c:221
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s): %s"
 msgstr "setlocale: LC_ALL: ni mogoče spremeniti jezikovne oznake (%s): %s"
 
-#: locale.c:292
+#: locale.c:294
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s)"
 msgstr "setlocale: %s: ni mogoče spremeniti jezikovne oznake (%s)"
 
-#: locale.c:294
+#: locale.c:296
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s): %s"
 msgstr "setlocale: %s: ni mogoče spremeniti jezikovne oznake (%s): %s"
@@ -1482,138 +1492,138 @@ msgstr "Imate novo pošto v $_"
 msgid "The mail in %s has been read\n"
 msgstr "Pošta v %s je bila prebrana\n"
 
-#: make_cmd.c:317
+#: make_cmd.c:314
 msgid "syntax error: arithmetic expression required"
 msgstr "skladenjska napaka: potreben je aritmetični izraz"
 
-#: make_cmd.c:319
+#: make_cmd.c:316
 msgid "syntax error: `;' unexpected"
 msgstr "skladenjska napaka: `;' nepričakovano"
 
-#: make_cmd.c:320
+#: make_cmd.c:317
 #, c-format
 msgid "syntax error: `((%s))'"
 msgstr "skladenjska napaka: `((%s))'"
 
-#: make_cmd.c:572
+#: make_cmd.c:569
 #, c-format
 msgid "make_here_document: bad instruction type %d"
 msgstr "make_here_document: slaba vrsta navodila %d"
 
-#: make_cmd.c:657
+#: make_cmd.c:668
 #, c-format
 msgid "here-document at line %d delimited by end-of-file (wanted `%s')"
 msgstr "here-document v vrstici %d razmejen z end-of-file (želeno `%s')"
 
-#: make_cmd.c:756
+#: make_cmd.c:769
 #, c-format
 msgid "make_redirection: redirection instruction `%d' out of range"
 msgstr "make_redirection: navodilo preusmeritve `%d' je izven dosega"
 
-#: parse.y:2393
+#: parse.y:2428
 #, c-format
 msgid ""
 "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line "
 "truncated"
 msgstr ""
 
-#: parse.y:2826
+#: parse.y:2921
 msgid "maximum here-document count exceeded"
 msgstr ""
 
-#: parse.y:3581 parse.y:3957 parse.y:4556
+#: parse.y:3684 parse.y:4244 parse.y:6148
 #, c-format
 msgid "unexpected EOF while looking for matching `%c'"
 msgstr "nepričakovan konec datoteke med iskanjem ujemanja z `%c'"
 
-#: parse.y:4696
+#: parse.y:4452
 msgid "unexpected EOF while looking for `]]'"
 msgstr "nepričakovan konec datoteke med iskanjem ujemanja z `]]'"
 
-#: parse.y:4701
+#: parse.y:4457
 #, c-format
 msgid "syntax error in conditional expression: unexpected token `%s'"
 msgstr "skladenjska napaka v pogojnem izrazu: nepričakovan žeton `%s'"
 
-#: parse.y:4705
+#: parse.y:4461
 msgid "syntax error in conditional expression"
 msgstr "skladenjska napaka v pogojnem izrazu"
 
-#: parse.y:4783
+#: parse.y:4539
 #, c-format
 msgid "unexpected token `%s', expected `)'"
 msgstr "nepričakovan žeton `%s', pričakovan je bil `)'"
 
-#: parse.y:4787
+#: parse.y:4543
 msgid "expected `)'"
 msgstr "pričakovan `)'"
 
-#: parse.y:4815
+#: parse.y:4571
 #, c-format
 msgid "unexpected argument `%s' to conditional unary operator"
 msgstr "nepričakovan argument `%s' do pogojnega enoslovnega operatorja"
 
-#: parse.y:4819
+#: parse.y:4575
 msgid "unexpected argument to conditional unary operator"
 msgstr "nepričakovan argument do pogojnega enoslovnega operatorja"
 
-#: parse.y:4865
+#: parse.y:4621
 #, c-format
 msgid "unexpected token `%s', conditional binary operator expected"
 msgstr "nepričakovan žeton `%s', pričakovan je binarni pogojni operator"
 
-#: parse.y:4869
+#: parse.y:4625
 msgid "conditional binary operator expected"
 msgstr "pričakovan je binarni pogojni operator"
 
-#: parse.y:4891
+#: parse.y:4647
 #, c-format
 msgid "unexpected argument `%s' to conditional binary operator"
 msgstr "nepričakovan argument `%s' do pogojnega binarnega operatorja"
 
-#: parse.y:4895
+#: parse.y:4651
 msgid "unexpected argument to conditional binary operator"
 msgstr "nepričakovan argument do pogojnega binarnega operatorja"
 
-#: parse.y:4906
+#: parse.y:4662
 #, c-format
 msgid "unexpected token `%c' in conditional command"
 msgstr "nepričakovan žeton `%c' v pogojnem ukazu"
 
-#: parse.y:4909
+#: parse.y:4665
 #, c-format
 msgid "unexpected token `%s' in conditional command"
 msgstr "nepričakovan žeton `%s' v pogojnem ukazu"
 
-#: parse.y:4913
+#: parse.y:4669
 #, c-format
 msgid "unexpected token %d in conditional command"
 msgstr "nepričakovan žeton %d v pogojnem ukazu"
 
-#: parse.y:6336
+#: parse.y:6118
 #, c-format
 msgid "syntax error near unexpected token `%s'"
 msgstr "skladenjska napaka blizu nepričakovanega žetona `%s'"
 
-#: parse.y:6355
+#: parse.y:6137
 #, c-format
 msgid "syntax error near `%s'"
 msgstr "skladenjska napaka blizu `%s'"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error: unexpected end of file"
 msgstr "skladenjska napaka: nepričakovan konec datoteke"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error"
 msgstr "skladenjska napaka"
 
-#: parse.y:6428
+#: parse.y:6216
 #, c-format
 msgid "Use \"%s\" to leave the shell.\n"
 msgstr "Uporabite \"%s\", če želite zapustiti lupino.\n"
 
-#: parse.y:6602
+#: parse.y:6394
 msgid "unexpected EOF while looking for matching `)'"
 msgstr "nepričakovan konec datoteke med iskanjem ujemanja z `)'"
 
@@ -1651,94 +1661,94 @@ msgstr "xtrace_set: prazen kazalec datoteke NULL"
 msgid "xtrace fd (%d) != fileno xtrace fp (%d)"
 msgstr "xtrace fd (%d) != fileno xtrace fp (%d)"
 
-#: print_cmd.c:1540
+#: print_cmd.c:1545
 #, c-format
 msgid "cprintf: `%c': invalid format character"
 msgstr "cprintf: `%c': neveljaven znak oblike"
 
-#: redir.c:149 redir.c:197
+#: redir.c:150 redir.c:198
 msgid "file descriptor out of range"
 msgstr "opisnik datoteke je izven dosega"
 
-#: redir.c:204
+#: redir.c:205
 #, c-format
 msgid "%s: ambiguous redirect"
 msgstr "%s: dvoumna preusmeritev"
 
-#: redir.c:208
+#: redir.c:209
 #, c-format
 msgid "%s: cannot overwrite existing file"
 msgstr "%s: ni mogoče prepisati obstoječe datoteke"
 
-#: redir.c:213
+#: redir.c:214
 #, c-format
 msgid "%s: restricted: cannot redirect output"
 msgstr "%s: omejitev: ni mogoče preusmeriti izhoda"
 
-#: redir.c:218
+#: redir.c:219
 #, c-format
 msgid "cannot create temp file for here-document: %s"
 msgstr "ni mogoče ustvariti začasne datoteke za here-document: %s"
 
-#: redir.c:222
+#: redir.c:223
 #, c-format
 msgid "%s: cannot assign fd to variable"
 msgstr "%s: ni mogoče dodeliti fd spremenljivki"
 
-#: redir.c:649
+#: redir.c:650
 msgid "/dev/(tcp|udp)/host/port not supported without networking"
 msgstr "/dev/(tcp|udp)/host/port ni podprt brez omrežja"
 
-#: redir.c:938 redir.c:1053 redir.c:1114 redir.c:1284
+#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303
 msgid "redirection error: cannot duplicate fd"
 msgstr "napaka preusmeritve: ni mogoče podvajati fd"
 
-#: shell.c:347
+#: shell.c:353
 msgid "could not find /tmp, please create!"
 msgstr "ni mogoče najti /tmp, ustvarite ga!"
 
-#: shell.c:351
+#: shell.c:357
 msgid "/tmp must be a valid directory name"
 msgstr "/tmp mora biti veljavno ime mape"
 
-#: shell.c:804
+#: shell.c:826
 msgid "pretty-printing mode ignored in interactive shells"
 msgstr ""
 
-#: shell.c:948
+#: shell.c:972
 #, c-format
 msgid "%c%c: invalid option"
 msgstr "%c%c: neveljavna možnost"
 
-#: shell.c:1319
+#: shell.c:1343
 #, fuzzy, c-format
 msgid "cannot set uid to %d: effective uid %d"
 msgstr "ni mogoče ponastaviti načina brez zakasnitve za fd %d"
 
-#: shell.c:1330
+#: shell.c:1354
 #, fuzzy, c-format
 msgid "cannot set gid to %d: effective gid %d"
 msgstr "ni mogoče ponastaviti načina brez zakasnitve za fd %d"
 
-#: shell.c:1518
+#: shell.c:1544
 msgid "cannot start debugger; debugging mode disabled"
 msgstr ""
 
-#: shell.c:1632
+#: shell.c:1658
 #, fuzzy, c-format
 msgid "%s: Is a directory"
 msgstr "%s: je mapa"
 
-#: shell.c:1881
+#: shell.c:1907
 msgid "I have no name!"
 msgstr "Ni imena!"
 
-#: shell.c:2035
+#: shell.c:2061
 #, c-format
 msgid "GNU bash, version %s-(%s)\n"
 msgstr "GNU bash, različica %s-(%s)\n"
 
-#: shell.c:2036
+#: shell.c:2062
 #, c-format
 msgid ""
 "Usage:\t%s [GNU long option] [option] ...\n"
@@ -1747,322 +1757,322 @@ msgstr ""
 "Uporaba:\t%s [dolga možnost GNU] [možnost] ...\n"
 "\t%s [dolga možnost GNU] [možnost] skriptni dokument ...\n"
 
-#: shell.c:2038
+#: shell.c:2064
 msgid "GNU long options:\n"
 msgstr "Dolge možnosti GNU:\n"
 
-#: shell.c:2042
+#: shell.c:2068
 msgid "Shell options:\n"
 msgstr "Možnosti lupine:\n"
 
-#: shell.c:2043
+#: shell.c:2069
 #, fuzzy
 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n"
 msgstr "\t-irsD ali ukaz -c  ali -O shopt_option\t\t(samo sklicevanje)\n"
 
-#: shell.c:2062
+#: shell.c:2088
 #, c-format
 msgid "\t-%s or -o option\n"
 msgstr "\t-%s ali možnost -o\n"
 
-#: shell.c:2068
+#: shell.c:2094
 #, c-format
 msgid "Type `%s -c \"help set\"' for more information about shell options.\n"
 msgstr "Vpišite `%s -c \"help set\"' za več podrobnosti o možnostih lupine.\n"
 
-#: shell.c:2069
+#: shell.c:2095
 #, c-format
 msgid "Type `%s -c help' for more information about shell builtin commands.\n"
 msgstr "Vpišite `%s -c help' za več podrobnosti o možnostih ukazov lupine.\n"
 
-#: shell.c:2070
+#: shell.c:2096
 #, c-format
 msgid "Use the `bashbug' command to report bugs.\n"
 msgstr "Uporabite ukaz `bashbug' za poročanje hroščev.\n"
 
-#: shell.c:2072
+#: shell.c:2098
 #, c-format
 msgid "bash home page: <http://www.gnu.org/software/bash>\n"
 msgstr ""
 
-#: shell.c:2073
+#: shell.c:2099
 #, c-format
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 msgstr ""
 
-#: sig.c:757
+#: sig.c:765
 #, c-format
 msgid "sigprocmask: %d: invalid operation"
 msgstr "sigprocmask: %d: neveljavno opravilo"
 
-#: siglist.c:47
+#: siglist.c:48
 msgid "Bogus signal"
 msgstr "Lažen signal"
 
-#: siglist.c:50
+#: siglist.c:51
 msgid "Hangup"
 msgstr "Odloži"
 
-#: siglist.c:54
+#: siglist.c:55
 msgid "Interrupt"
 msgstr "Prekini"
 
-#: siglist.c:58
+#: siglist.c:59
 msgid "Quit"
 msgstr "Končaj"
 
-#: siglist.c:62
+#: siglist.c:63
 msgid "Illegal instruction"
 msgstr "Neveljaven ukaz"
 
-#: siglist.c:66
+#: siglist.c:67
 msgid "BPT trace/trap"
 msgstr "BPT trace/trap"
 
-#: siglist.c:74
+#: siglist.c:75
 msgid "ABORT instruction"
 msgstr "ukaz ABORT"
 
-#: siglist.c:78
+#: siglist.c:79
 msgid "EMT instruction"
 msgstr "ukaz EMT"
 
-#: siglist.c:82
+#: siglist.c:83
 msgid "Floating point exception"
 msgstr "Izjema s plavajočo vejico"
 
-#: siglist.c:86
+#: siglist.c:87
 msgid "Killed"
 msgstr "Uničen"
 
-#: siglist.c:90
+#: siglist.c:91
 msgid "Bus error"
 msgstr "Napaka vodila"
 
-#: siglist.c:94
+#: siglist.c:95
 msgid "Segmentation fault"
 msgstr "Napaka segmentacije"
 
-#: siglist.c:98
+#: siglist.c:99
 msgid "Bad system call"
 msgstr "Slab sistemski klic"
 
-#: siglist.c:102
+#: siglist.c:103
 msgid "Broken pipe"
 msgstr "Prekinjena cev"
 
-#: siglist.c:106
+#: siglist.c:107
 msgid "Alarm clock"
 msgstr "Budilka"
 
-#: siglist.c:110
+#: siglist.c:111
 msgid "Terminated"
 msgstr "Zaključen"
 
-#: siglist.c:114
+#: siglist.c:115
 msgid "Urgent IO condition"
 msgstr "Nujen pogoj IO"
 
-#: siglist.c:118
+#: siglist.c:119
 msgid "Stopped (signal)"
 msgstr "Ustavljen (signal)"
 
-#: siglist.c:126
+#: siglist.c:127
 msgid "Continue"
 msgstr "Nadaljuj"
 
-#: siglist.c:134
+#: siglist.c:135
 msgid "Child death or stop"
 msgstr "Podrejeno opravilo je uničeno ali zaustavljeno"
 
-#: siglist.c:138
+#: siglist.c:139
 msgid "Stopped (tty input)"
 msgstr "Ustavljen (vhod TTY)"
 
-#: siglist.c:142
+#: siglist.c:143
 msgid "Stopped (tty output)"
 msgstr "Ustavljen (izhod TTY)"
 
-#: siglist.c:146
+#: siglist.c:147
 msgid "I/O ready"
 msgstr "I/O je pripravljen"
 
-#: siglist.c:150
+#: siglist.c:151
 msgid "CPU limit"
 msgstr "omejitev CPE"
 
-#: siglist.c:154
+#: siglist.c:155
 msgid "File limit"
 msgstr "omejitev datoteke"
 
-#: siglist.c:158
+#: siglist.c:159
 msgid "Alarm (virtual)"
 msgstr "Budilka (navidezna)"
 
-#: siglist.c:162
+#: siglist.c:163
 msgid "Alarm (profile)"
 msgstr "Budilka (profil)"
 
-#: siglist.c:166
+#: siglist.c:167
 msgid "Window changed"
 msgstr "Okno se je spremenilo"
 
-#: siglist.c:170
+#: siglist.c:171
 msgid "Record lock"
 msgstr "Zaklep zapisa"
 
-#: siglist.c:174
+#: siglist.c:175
 msgid "User signal 1"
 msgstr "Signal uporabnika 1"
 
-#: siglist.c:178
+#: siglist.c:179
 msgid "User signal 2"
 msgstr "Signal uporabnika 2"
 
-#: siglist.c:182
+#: siglist.c:183
 msgid "HFT input data pending"
 msgstr "vnos podatkov HFT je na čakanju"
 
-#: siglist.c:186
+#: siglist.c:187
 msgid "power failure imminent"
 msgstr "izpad električnega toka je neizbežen"
 
-#: siglist.c:190
+#: siglist.c:191
 msgid "system crash imminent"
 msgstr "sesutje sistema je neizbežno"
 
-#: siglist.c:194
+#: siglist.c:195
 msgid "migrate process to another CPU"
 msgstr "preseli opravilo na drug CPE"
 
-#: siglist.c:198
+#: siglist.c:199
 msgid "programming error"
 msgstr "napaka programiranja"
 
-#: siglist.c:202
+#: siglist.c:203
 msgid "HFT monitor mode granted"
 msgstr "način nadzora HFT je odobren"
 
-#: siglist.c:206
+#: siglist.c:207
 msgid "HFT monitor mode retracted"
 msgstr "način nadzora HFT je umaknjen"
 
-#: siglist.c:210
+#: siglist.c:211
 msgid "HFT sound sequence has completed"
 msgstr "zaporedje zvoka HFT je končano"
 
-#: siglist.c:214
+#: siglist.c:215
 msgid "Information request"
 msgstr "zahteva po podatkih"
 
-#: siglist.c:222 siglist.c:224
+#: siglist.c:223 siglist.c:225
 #, c-format
 msgid "Unknown Signal #%d"
 msgstr "Neznan signal #%d"
 
-#: subst.c:1476 subst.c:1666
+#: subst.c:1480 subst.c:1670
 #, c-format
 msgid "bad substitution: no closing `%s' in %s"
 msgstr "slaba zamenjava: ni zaključka `%s' v %s"
 
-#: subst.c:3281
+#: subst.c:3307
 #, c-format
 msgid "%s: cannot assign list to array member"
 msgstr "%s: ni mogoče dodeliti seznama članu polja"
 
-#: subst.c:5910 subst.c:5926
+#: subst.c:6048 subst.c:6064
 msgid "cannot make pipe for process substitution"
 msgstr "ni mogoče ustvariti cevi za zamenjavo opravila"
 
-#: subst.c:5985
+#: subst.c:6124
 msgid "cannot make child for process substitution"
 msgstr "ni mogoče ustvariti podrejenega opravila za zamenjavo opravila"
 
-#: subst.c:6059
+#: subst.c:6198
 #, c-format
 msgid "cannot open named pipe %s for reading"
 msgstr "ni mogoče odpreti imenovane cevi %s za branje"
 
-#: subst.c:6061
+#: subst.c:6200
 #, c-format
 msgid "cannot open named pipe %s for writing"
 msgstr "ni mogoče odpreti imenovane cevi %s za pisanje"
 
-#: subst.c:6084
+#: subst.c:6223
 #, c-format
 msgid "cannot duplicate named pipe %s as fd %d"
 msgstr "ni mogoče podvajati imenovane cevi %s kot fd %d"
 
-#: subst.c:6213
+#: subst.c:6370
 #, fuzzy
 msgid "command substitution: ignored null byte in input"
 msgstr "slaba zamenjava: ni zaključka \"`\" v %s"
 
-#: subst.c:6353
+#: subst.c:6533
 msgid "cannot make pipe for command substitution"
 msgstr "ni mogoče ustvariti cevi za zamenjavo ukaza"
 
-#: subst.c:6397
+#: subst.c:6580
 msgid "cannot make child for command substitution"
 msgstr "ni mogoče ustvariti podrejenega opravila za zamenjavo ukaza"
 
-#: subst.c:6423
+#: subst.c:6613
 msgid "command_substitute: cannot duplicate pipe as fd 1"
 msgstr "command_substitute: ni mogoče podvajati cevi kot fd 1"
 
-#: subst.c:6883 subst.c:9952
+#: subst.c:7082 subst.c:10252
 #, fuzzy, c-format
 msgid "%s: invalid variable name for name reference"
 msgstr "%s: %s: neveljavna vrednost za opisnik sledenja datotek"
 
-#: subst.c:6979 subst.c:6997 subst.c:7169
+#: subst.c:7178 subst.c:7196 subst.c:7369
 #, fuzzy, c-format
 msgid "%s: invalid indirect expansion"
 msgstr "%s: neveljavno štetje vrstic"
 
-#: subst.c:7013 subst.c:7177
+#: subst.c:7212 subst.c:7377
 #, fuzzy, c-format
 msgid "%s: invalid variable name"
 msgstr "`%s': neveljaven vzdevek"
 
-#: subst.c:7256
+#: subst.c:7478
 #, fuzzy, c-format
 msgid "%s: parameter not set"
 msgstr "%s: parameter je prazen ali pa ni določen"
 
-#: subst.c:7258
+#: subst.c:7480
 #, c-format
 msgid "%s: parameter null or not set"
 msgstr "%s: parameter je prazen ali pa ni določen"
 
-#: subst.c:7503 subst.c:7518
+#: subst.c:7727 subst.c:7742
 #, c-format
 msgid "%s: substring expression < 0"
 msgstr "%s: izraz podniza < 0"
 
-#: subst.c:9281 subst.c:9302
+#: subst.c:9560 subst.c:9587
 #, c-format
 msgid "%s: bad substitution"
 msgstr "%s: slaba zamenjava"
 
-#: subst.c:9390
+#: subst.c:9678
 #, c-format
 msgid "$%s: cannot assign in this way"
 msgstr "$%s: ni mogoče dodeliti na tak način"
 
-#: subst.c:9814
+#: subst.c:10111
 msgid ""
 "future versions of the shell will force evaluation as an arithmetic "
 "substitution"
 msgstr ""
 "prihodnje različice lupine bodo prisilile ocenitev kot aritmetično zamenjavo"
 
-#: subst.c:10367
+#: subst.c:10795
 #, c-format
 msgid "bad substitution: no closing \"`\" in %s"
 msgstr "slaba zamenjava: ni zaključka \"`\" v %s"
 
-#: subst.c:11434
+#: subst.c:11874
 #, c-format
 msgid "no match: %s"
 msgstr "ni ujemanja: %s"
@@ -2085,21 +2095,21 @@ msgstr "pričakovan je `)'"
 msgid "`)' expected, found %s"
 msgstr "pričakovan je `)', najden je %s"
 
-#: test.c:466 test.c:799
+#: test.c:469 test.c:814
 #, c-format
 msgid "%s: binary operator expected"
 msgstr "%s: pričakuje se binarni operator"
 
-#: test.c:756 test.c:759
+#: test.c:771 test.c:774
 #, c-format
 msgid "%s: unary operator expected"
 msgstr "%s: pričakuje se enosnoven operator"
 
-#: test.c:881
+#: test.c:896
 msgid "missing `]'"
 msgstr "manjka `]'"
 
-#: test.c:899
+#: test.c:914
 #, fuzzy, c-format
 msgid "syntax error: `%s' unexpected"
 msgstr "skladenjska napaka: `;' nepričakovano"
@@ -2108,101 +2118,106 @@ msgstr "skladenjska napaka: `;' nepričakovano"
 msgid "invalid signal number"
 msgstr "neveljavna števka signala"
 
-#: trap.c:325
+#: trap.c:323
 #, c-format
 msgid "trap handler: maximum trap handler level exceeded (%d)"
 msgstr ""
 
-#: trap.c:414
+#: trap.c:412
 #, c-format
 msgid "run_pending_traps: bad value in trap_list[%d]: %p"
 msgstr "run_pending_traps: slaba vrednost v trap_list[%d]: %p"
 
-#: trap.c:418
+#: trap.c:416
 #, c-format
 msgid ""
 "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
 msgstr ""
 "run_pending_traps: ročnik signala je SIG_DFL, ponovno pošiljanje %d (%s) sebi"
 
-#: trap.c:487
+#: trap.c:509
 #, c-format
 msgid "trap_handler: bad signal %d"
 msgstr "trap_handler: slab signal %d"
 
-#: variables.c:421
+#: variables.c:424
 #, c-format
 msgid "error importing function definition for `%s'"
 msgstr "napaka med uvozom določila funkcije `%s'"
 
-#: variables.c:833
+#: variables.c:838
 #, c-format
 msgid "shell level (%d) too high, resetting to 1"
 msgstr "raven lupine (%d) je previsoka, ponastavljanje na 1"
 
-#: variables.c:2674
+#: variables.c:2642
 msgid "make_local_variable: no function context at current scope"
 msgstr "make_local_variable: v trenutnem dosegu ni vsebine funkcije"
 
-#: variables.c:2693
+#: variables.c:2661
 #, fuzzy, c-format
 msgid "%s: variable may not be assigned value"
 msgstr "%s: ni mogoče dodeliti fd spremenljivki"
 
-#: variables.c:3475
+#: variables.c:2818 variables.c:2874
+#, c-format
+msgid "%s: cannot inherit value from incompatible type"
+msgstr ""
+
+#: variables.c:3459
 #, c-format
 msgid "%s: assigning integer to name reference"
 msgstr ""
 
-#: variables.c:4404
+#: variables.c:4390
 msgid "all_local_variables: no function context at current scope"
 msgstr "all_local_variables: v trenutnem dosegu ni vsebine funkcije"
 
-#: variables.c:4771
+#: variables.c:4757
 #, c-format
 msgid "%s has null exportstr"
 msgstr "%s ima prazen exportstr"
 
-#: variables.c:4776 variables.c:4785
+#: variables.c:4762 variables.c:4771
 #, c-format
 msgid "invalid character %d in exportstr for %s"
 msgstr "neveljaven znak %d v exportstr za %s"
 
-#: variables.c:4791
+#: variables.c:4777
 #, c-format
 msgid "no `=' in exportstr for %s"
 msgstr "ni `=' v exportstr za %s"
 
-#: variables.c:5331
+#: variables.c:5317
 msgid "pop_var_context: head of shell_variables not a function context"
 msgstr "pop_var_context: glava shell_variables ni vsebina funkcije"
 
-#: variables.c:5344
+#: variables.c:5330
 msgid "pop_var_context: no global_variables context"
 msgstr "pop_var_context: ni vsebine global_variables"
 
-#: variables.c:5424
+#: variables.c:5410
 msgid "pop_scope: head of shell_variables not a temporary environment scope"
 msgstr "pop_scope: glava shell_variables ni trenuten obseg okolja"
 
-#: variables.c:6387
+#: variables.c:6400
 #, c-format
 msgid "%s: %s: cannot open as FILE"
 msgstr "%s: %s: ni mogoče odpreti kot DATOTEKO"
 
-#: variables.c:6392
+#: variables.c:6405
 #, c-format
 msgid "%s: %s: invalid value for trace file descriptor"
 msgstr "%s: %s: neveljavna vrednost za opisnik sledenja datotek"
 
-#: variables.c:6437
+#: variables.c:6450
 #, fuzzy, c-format
 msgid "%s: %s: compatibility value out of range"
 msgstr "%s: %s izven dosega"
 
 #: version.c:46 version2.c:46
 #, fuzzy
-msgid "Copyright (C) 2020 Free Software Foundation, Inc."
+msgid "Copyright (C) 2022 Free Software Foundation, Inc."
 msgstr "Avtorske pravice (C) 2009 Free Software Foundation, Inc.\n"
 
 #: version.c:47 version2.c:47
@@ -2297,12 +2312,16 @@ msgstr "ukaz [-pVv] ukaz [arg ...]"
 
 #: builtins.c:78
 #, fuzzy
-msgid "declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]"
+msgid ""
+"declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] "
+"[name ...]"
 msgstr "declare [-aAfFgilrtux] [-p] [ime[=vrednost] ...]"
 
 #: builtins.c:80
 #, fuzzy
-msgid "typeset [-aAfFgiIlnrtux] [-p] name[=value] ..."
+msgid ""
+"typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] "
+"[name ...]"
 msgstr "typeset [-aAfFgilrtux] [-p] ime[=vrednost] ..."
 
 #: builtins.c:82
@@ -2407,7 +2426,8 @@ msgid "return [n]"
 msgstr "return [n]"
 
 #: builtins.c:142
-msgid "set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]"
+#, fuzzy
+msgid "set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]"
 msgstr "set [-abefhkmnptuvxBCHP] [-o ime_možnosti] [--] [arg ...]"
 
 #: builtins.c:144
@@ -2457,7 +2477,7 @@ msgstr "type [-afptP] ime [ime ...]"
 
 #: builtins.c:171
 #, fuzzy
-msgid "ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]"
+msgid "ulimit [-SHabcdefiklmnpqrstuvxPRT] [limit]"
 msgstr "ulimit [-SHacdefilmnpqrstuvx] [meja]"
 
 #: builtins.c:174
@@ -2502,11 +2522,13 @@ msgstr ""
 "if UKAZI; then UKAZI; [ elif UKAZI; then UKAZI; ]... [ else UKAZI; ] fi"
 
 #: builtins.c:196
-msgid "while COMMANDS; do COMMANDS; done"
+#, fuzzy
+msgid "while COMMANDS; do COMMANDS-2; done"
 msgstr "while UKAZI; do UKAZI; done"
 
 #: builtins.c:198
-msgid "until COMMANDS; do COMMANDS; done"
+#, fuzzy
+msgid "until COMMANDS; do COMMANDS-2; done"
 msgstr "until UKAZI; do UKAZI; done"
 
 #: builtins.c:200
@@ -3893,7 +3915,9 @@ msgid ""
 "    word to the second NAME, and so on, with any leftover words assigned to\n"
 "    the last NAME.  Only the characters found in $IFS are recognized as "
 "word\n"
-"    delimiters.\n"
+"    delimiters. By default, the backslash character escapes delimiter "
+"characters\n"
+"    and newline.\n"
 "    \n"
 "    If no NAMEs are supplied, the line read is stored in the REPLY "
 "variable.\n"
@@ -3974,7 +3998,7 @@ msgstr ""
 "    omejitev prekoračena ali če je dan neveljaven opisnik datotek kot\n"
 "    argument v -u."
 
-#: builtins.c:1041
+#: builtins.c:1042
 msgid ""
 "Return from a shell function.\n"
 "    \n"
@@ -3994,7 +4018,7 @@ msgstr ""
 "    Stanje končanja\n"
 "    Vrne N ali neuspešno, če lupina ne izvede funkcije ali skripta."
 
-#: builtins.c:1054
+#: builtins.c:1055
 #, fuzzy
 msgid ""
 "Set or unset values of shell options and positional parameters.\n"
@@ -4167,7 +4191,7 @@ msgstr ""
 "    Stanje končanja\n"
 "    Vrne uspešno, razen če je dana neveljavna možnost."
 
-#: builtins.c:1139
+#: builtins.c:1140
 #, fuzzy
 msgid ""
 "Unset values and attributes of shell variables and functions.\n"
@@ -4206,7 +4230,7 @@ msgstr ""
 "    Vrne uspešno, razen če je dana neveljavna možnost ali če je IME samo\n"
 "    za branje."
 
-#: builtins.c:1161
+#: builtins.c:1162
 msgid ""
 "Set export attribute for shell variables.\n"
 "    \n"
@@ -4240,7 +4264,7 @@ msgstr ""
 "    Vrne uspešno, razen če je dana neveljavna možnost ali če je\n"
 "    neveljavno IME."
 
-#: builtins.c:1180
+#: builtins.c:1181
 #, fuzzy
 msgid ""
 "Mark shell variables as unchangeable.\n"
@@ -4280,7 +4304,7 @@ msgstr ""
 "    Vrne uspešno, razen če je dana neveljavna možnost ali če je\n"
 "    neveljavno IME."
 
-#: builtins.c:1202
+#: builtins.c:1203
 msgid ""
 "Shift positional parameters.\n"
 "    \n"
@@ -4298,7 +4322,7 @@ msgstr ""
 "    Stanje končanja:\n"
 "    Vrne uspešno, razen če je N negativen ali večji kot $#."
 
-#: builtins.c:1214 builtins.c:1229
+#: builtins.c:1215 builtins.c:1230
 msgid ""
 "Execute commands from a file in the current shell.\n"
 "    \n"
@@ -4322,7 +4346,7 @@ msgstr ""
 "    Vrne stanje zadnjega izvršenega ukaza v IMENU_DATOTEKE; vrne\n"
 "    neuspešno, če IMENA_DATOTEKE ni mogoče brati."
 
-#: builtins.c:1245
+#: builtins.c:1246
 msgid ""
 "Suspend shell execution.\n"
 "    \n"
@@ -4348,7 +4372,7 @@ msgstr ""
 "    Vrne uspešno, razen če nadzor posla ni omogočen ali če pride do\n"
 "    napake."
 
-#: builtins.c:1261
+#: builtins.c:1262
 #, fuzzy
 msgid ""
 "Evaluate conditional expression.\n"
@@ -4510,7 +4534,7 @@ msgstr ""
 "    Vrne uspešno, če IZRAZ ovrednoti prav, neuspešno vrne, če IZRAZ \n"
 "    ovrednoti napak ali če je dan neveljaven argument."
 
-#: builtins.c:1343
+#: builtins.c:1344
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -4522,7 +4546,7 @@ msgstr ""
 "    To je sopomenka za vgrajeno lupino \"test\", toda zadnji argument\n"
 "    mora biti dobesedni `]' za ujemanje z uklepajem `['."
 
-#: builtins.c:1352
+#: builtins.c:1353
 msgid ""
 "Display process times.\n"
 "    \n"
@@ -4541,7 +4565,7 @@ msgstr ""
 "    Stanje končanja:\n"
 "    Vedno uspešno."
 
-#: builtins.c:1364
+#: builtins.c:1365
 msgid ""
 "Trap signals and other events.\n"
 "    \n"
@@ -4621,7 +4645,7 @@ msgstr ""
 "    Vrne uspešno, razen če je SIGSPEC neveljaven ali je dana neveljavna "
 "možnost."
 
-#: builtins.c:1400
+#: builtins.c:1401
 #, fuzzy
 msgid ""
 "Display information about command type.\n"
@@ -4679,7 +4703,7 @@ msgstr ""
 "    Vrne uspešno, če so vsa IMENA najdena; vrne neuspešno, če katero\n"
 "    ni najdeno."
 
-#: builtins.c:1431
+#: builtins.c:1432
 #, fuzzy
 msgid ""
 "Modify shell resource limits.\n"
@@ -4772,7 +4796,7 @@ msgstr ""
 "    Vrne uspešno, razen če je dana neveljavna možnost ali če pride do\n"
 "    napake."
 
-#: builtins.c:1482
+#: builtins.c:1483
 msgid ""
 "Display or set file mode mask.\n"
 "    \n"
@@ -4806,7 +4830,7 @@ msgstr ""
 "    Vrne uspešno, razen če je NAČIN neveljaven ali če je dana neveljavna\n"
 "    možnost."
 
-#: builtins.c:1502
+#: builtins.c:1503
 #, fuzzy
 msgid ""
 "Wait for job completion and return exit status.\n"
@@ -4851,7 +4875,7 @@ msgstr ""
 "    Vrne stanje ID-ja; vrne neuspešno, če je ID neveljaven ali če je dana\n"
 "    neveljavna možnost."
 
-#: builtins.c:1533
+#: builtins.c:1534
 #, fuzzy
 msgid ""
 "Wait for process completion and return exit status.\n"
@@ -4876,7 +4900,7 @@ msgstr ""
 "    Vrne stanje ID-ja; neuspešno, če je ID neveljaven ali če je dana\n"
 "    neveljavna možnost."
 
-#: builtins.c:1548
+#: builtins.c:1549
 msgid ""
 "Execute commands for each member in a list.\n"
 "    \n"
@@ -4899,7 +4923,7 @@ msgstr ""
 "    Stanje končanja:\n"
 "    Vrne stanje zadnjega izvršenega ukaza."
 
-#: builtins.c:1562
+#: builtins.c:1563
 msgid ""
 "Arithmetic for loop.\n"
 "    \n"
@@ -4930,7 +4954,7 @@ msgstr ""
 "    Stanje končanja:\n"
 "    Vrne stanje zadnjega izvršenega ukaza."
 
-#: builtins.c:1580
+#: builtins.c:1581
 msgid ""
 "Select words from a list and execute commands.\n"
 "    \n"
@@ -4967,7 +4991,7 @@ msgstr ""
 "    Stanje končanja:\n"
 "    Vrne stanje zadnjega izvršenega ukaza."
 
-#: builtins.c:1601
+#: builtins.c:1602
 msgid ""
 "Report time consumed by pipeline's execution.\n"
 "    \n"
@@ -4996,7 +5020,7 @@ msgstr ""
 "    Stanje končanja:\n"
 "    Stanje končanja je stanje končanja CEVOVODA."
 
-#: builtins.c:1618
+#: builtins.c:1619
 msgid ""
 "Execute commands based on pattern matching.\n"
 "    \n"
@@ -5014,7 +5038,7 @@ msgstr ""
 "    Stanje končanja:\n"
 "    Vrne stanje zadnjega izvršenega ukaza."
 
-#: builtins.c:1630
+#: builtins.c:1631
 msgid ""
 "Execute commands based on conditional.\n"
 "    \n"
@@ -5048,12 +5072,14 @@ msgstr ""
 "    Stanje končanja:\n"
 "    Vrne stanje zadnjega izvršenega ukaza."
 
-#: builtins.c:1647
+#: builtins.c:1648
+#, fuzzy
 msgid ""
 "Execute commands as long as a test succeeds.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `while' COMMANDS has an exit status of zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS "
+"has\n"
+"    an exit status of zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
@@ -5066,12 +5092,14 @@ msgstr ""
 "    Stanje končanja:\n"
 "    Vrne stanje zadnjega izvršenega ukaza."
 
-#: builtins.c:1659
+#: builtins.c:1660
+#, fuzzy
 msgid ""
 "Execute commands as long as a test does not succeed.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `until' COMMANDS has an exit status which is not zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS "
+"has\n"
+"    an exit status which is not zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
@@ -5084,7 +5112,7 @@ msgstr ""
 "    Stanje končanja:\n"
 "    Vrne stanje zadnjega izvršenega ukaza."
 
-#: builtins.c:1671
+#: builtins.c:1672
 #, fuzzy
 msgid ""
 "Create a coprocess named NAME.\n"
@@ -5107,7 +5135,7 @@ msgstr ""
 "    Stanje končanja:\n"
 "    Vrne stanje končanja UKAZA."
 
-#: builtins.c:1685
+#: builtins.c:1686
 msgid ""
 "Define shell function.\n"
 "    \n"
@@ -5131,7 +5159,7 @@ msgstr ""
 "    Stanje končanja:\n"
 "    Vrne uspešno, razen če je IME samo za branje."
 
-#: builtins.c:1699
+#: builtins.c:1700
 msgid ""
 "Group commands as a unit.\n"
 "    \n"
@@ -5149,7 +5177,7 @@ msgstr ""
 "    Stanje končanja:\n"
 "    Vrne stanje zadnjega izvršenega ukaza."
 
-#: builtins.c:1711
+#: builtins.c:1712
 msgid ""
 "Resume job in foreground.\n"
 "    \n"
@@ -5173,7 +5201,7 @@ msgstr ""
 "    Stanje končanja:\n"
 "    Vrne stanje obnovljenega posla."
 
-#: builtins.c:1726
+#: builtins.c:1727
 #, fuzzy
 msgid ""
 "Evaluate arithmetic expression.\n"
@@ -5192,7 +5220,7 @@ msgstr ""
 "    Stanje končanja:\n"
 "    Vrne 1, če je IZRAZ enakovreden; sicer vrne 0."
 
-#: builtins.c:1738
+#: builtins.c:1739
 msgid ""
 "Execute conditional command.\n"
 "    \n"
@@ -5246,7 +5274,7 @@ msgstr ""
 "    Stanje končanja:\n"
 "    0 ali 1, odvisno od vrednosti IZRAZA."
 
-#: builtins.c:1764
+#: builtins.c:1765
 msgid ""
 "Common shell variable names and usage.\n"
 "    \n"
@@ -5350,7 +5378,7 @@ msgstr ""
 "    HISTIGNORE\tZ dvopičjem ločen seznam vzorcev, ki so uporabljeni \n"
 "    \t\tza odločanje, kateri ukazi naj se shranijo na seznam zgodovine.\n"
 
-#: builtins.c:1821
+#: builtins.c:1822
 #, fuzzy
 msgid ""
 "Add directories to stack.\n"
@@ -5407,7 +5435,7 @@ msgstr ""
 "    Vrne uspešno, razen če je predložen neveljaven argument ali če\n"
 "    sprememba mape spodleti."
 
-#: builtins.c:1855
+#: builtins.c:1856
 #, fuzzy
 msgid ""
 "Remove directories from stack.\n"
@@ -5458,7 +5486,7 @@ msgstr ""
 "    Vrne uspešno, razen če je predložen neveljaven argument ali če\n"
 "    sprememba mape spodleti."
 
-#: builtins.c:1885
+#: builtins.c:1886
 #, fuzzy
 msgid ""
 "Display directory stack.\n"
@@ -5510,7 +5538,7 @@ msgstr ""
 "    Stanje končanja:\n"
 "    Vrne uspešno, razen če je dana neveljavna možnost ali če pride do napake."
 
-#: builtins.c:1916
+#: builtins.c:1917
 #, fuzzy
 msgid ""
 "Set and unset shell options.\n"
@@ -5547,7 +5575,7 @@ msgstr ""
 "    Vrne uspešno, če je IME_MOŽNOSTI omogočeno; neuspešno, če je\n"
 "    dana neveljavna možnost ali če je IME_MOŽNOSTI onemogočeno."
 
-#: builtins.c:1937
+#: builtins.c:1938
 #, fuzzy
 msgid ""
 "Formats and prints ARGUMENTS under control of the FORMAT.\n"
@@ -5571,6 +5599,8 @@ msgid ""
 "    \n"
 "      %b\texpand backslash escape sequences in the corresponding argument\n"
 "      %q\tquote the argument in a way that can be reused as shell input\n"
+"      %Q\tlike %q, but apply any precision to the unquoted argument before\n"
+"    \t\tquoting\n"
 "      %(fmt)T\toutput the date-time string resulting from using FMT as a "
 "format\n"
 "    \t        string for strftime(3)\n"
@@ -5613,7 +5643,7 @@ msgstr ""
 "napake\n"
 "    branja ali dodelitve."
 
-#: builtins.c:1971
+#: builtins.c:1974
 #, fuzzy
 msgid ""
 "Specify how arguments are to be completed by Readline.\n"
@@ -5669,7 +5699,7 @@ msgstr ""
 "    Vrne uspešno, razen če je predložena neveljavna možnost ali če pride\n"
 "    do napake."
 
-#: builtins.c:2001
+#: builtins.c:2004
 msgid ""
 "Display possible completions depending on the options.\n"
 "    \n"
@@ -5691,7 +5721,7 @@ msgstr ""
 "    Vrne uspešno, razen če je predložena neveljavna možnost ali če pride\n"
 "    do napake."
 
-#: builtins.c:2016
+#: builtins.c:2019
 #, fuzzy
 msgid ""
 "Modify or display completion options.\n"
@@ -5749,7 +5779,7 @@ msgstr ""
 "    Vrne uspešno, razen če je predložena neveljavna možnost ali pa IME\n"
 "    nima določenega določila dopolnjevanja."
 
-#: builtins.c:2047
+#: builtins.c:2050
 #, fuzzy
 msgid ""
 "Read lines from the standard input into an indexed array variable.\n"
@@ -5827,7 +5857,7 @@ msgstr ""
 "    Vrne uspešno, razen če je dana neveljavna možnost oz. je POLJE samo\n"
 "    za branje ali pa ni zabeleženo polje."
 
-#: builtins.c:2083
+#: builtins.c:2086
 msgid ""
 "Read lines from a file into an array variable.\n"
 "    \n"
@@ -5837,6 +5867,10 @@ msgstr ""
 "    \n"
 "    Je sopomenka za `mapfile'."
 
+#, c-format
+#~ msgid "%s: invalid associative array key"
+#~ msgstr "%s: neveljaven ključ povezanega polja"
+
 #, fuzzy
 #~ msgid "Copyright (C) 2019 Free Software Foundation, Inc."
 #~ msgstr "Avtorske pravice (C) 2011 Free Software Foundation, Inc."
index d7b5b9fe4bbd8ecfb2ee5ecf0f748d711c4c4984..609b01835ca9701d70c85adb351e51d585f5edf1 100644 (file)
Binary files a/po/sr.gmo and b/po/sr.gmo differ
index 166d85ce16f5bd4116fcc9c66c21269d0be7053f..63cabb302a92e57e917cc0f8c724d8f980ad3c10 100644 (file)
--- a/po/sr.po
+++ b/po/sr.po
@@ -4,13 +4,14 @@
 # Marko Uskokovic <uskokovic@etf.bg.ac.yu>, 2007, 2008.
 # Serbian linux distribution cp6Linux
 # Copyright © 2007 Marko Uskokovic
-# Мирослав Николић <miroslavnikolic@rocketmail.com>, 2014—2020.
+# Мирослав Николић <miroslavnikolic@rocketmail.com>, 2014—2022.
+#
 msgid ""
 msgstr ""
-"Project-Id-Version: bash-5.1\n"
+"Project-Id-Version: bash-5.2-rc1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-11-28 12:51-0500\n"
-"PO-Revision-Date: 2020-12-09 10:27+0200\n"
+"POT-Creation-Date: 2022-01-11 14:50-0500\n"
+"PO-Revision-Date: 2022-08-22 00:19+0200\n"
 "Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
 "Language-Team: Serbian <(nothing)>\n"
 "Language: sr\n"
@@ -24,57 +25,52 @@ msgstr ""
 msgid "bad array subscript"
 msgstr "лоша подскрипта низа"
 
-#: arrayfunc.c:421 builtins/declare.def:638 variables.c:2274 variables.c:2300
-#: variables.c:3133
+#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268
+#: variables.c:3101
 #, c-format
 msgid "%s: removing nameref attribute"
 msgstr "%s: уклањам атрибут упуте назива"
 
-#: arrayfunc.c:446 builtins/declare.def:851
+#: arrayfunc.c:496 builtins/declare.def:868
 #, c-format
 msgid "%s: cannot convert indexed to associative array"
 msgstr "%s: не могу да претворим пописани низ у придружив"
 
-#: arrayfunc.c:700
-#, c-format
-msgid "%s: invalid associative array key"
-msgstr "%s: неисправан кључ придруживог низа"
-
-#: arrayfunc.c:702
+#: arrayfunc.c:777
 #, c-format
 msgid "%s: cannot assign to non-numeric index"
 msgstr "%s: не могу да доделим у не-бројевни попис"
 
-#: arrayfunc.c:747
+#: arrayfunc.c:822
 #, c-format
 msgid "%s: %s: must use subscript when assigning associative array"
 msgstr "%s: %s: мора користити индекс приликом додељивања придруживог низа"
 
-#: bashhist.c:452
+#: bashhist.c:455
 #, c-format
 msgid "%s: cannot create: %s"
 msgstr "%s: не могу да направим: %s"
 
-#: bashline.c:4310
+#: bashline.c:4479
 msgid "bash_execute_unix_command: cannot find keymap for command"
 msgstr "баш_изврши_јуникс_наредбу: не могу да нађем мапу кључа за наредбу"
 
-#: bashline.c:4459
+#: bashline.c:4637
 #, c-format
 msgid "%s: first non-whitespace character is not `\"'"
 msgstr "%s: први не-празан знак није \""
 
-#: bashline.c:4488
+#: bashline.c:4666
 #, c-format
 msgid "no closing `%c' in %s"
 msgstr "нема затварајућег „%c“ у %s"
 
-#: bashline.c:4519
+#: bashline.c:4697
 #, c-format
 msgid "%s: missing colon separator"
 msgstr "%s: недостаје раздвојник двотачке"
 
-#: bashline.c:4555
+#: bashline.c:4733
 #, c-format
 msgid "`%s': cannot unbind in command keymap"
 msgstr "„%s“: не могу да развежем у мапи тастера наредбе"
@@ -94,7 +90,7 @@ msgstr "ширење заграде: нисам успео да доделим 
 msgid "brace expansion: failed to allocate memory for `%s'"
 msgstr "ширење заграде: нисам успео да доделим меморију за „%s“"
 
-#: builtins/alias.def:131 variables.c:1844
+#: builtins/alias.def:131 variables.c:1817
 #, c-format
 msgid "`%s': invalid alias name"
 msgstr "„%s“: неисправан назив алијаса"
@@ -165,7 +161,7 @@ msgstr ""
 msgid "HOME not set"
 msgstr "„HOME“ није подешено"
 
-#: builtins/cd.def:335 builtins/common.c:161 test.c:901
+#: builtins/cd.def:335 builtins/common.c:161 test.c:916
 msgid "too many arguments"
 msgstr "превише аргумената"
 
@@ -192,7 +188,7 @@ msgstr "упозорење:"
 msgid "%s: usage: "
 msgstr "%s: употреба:"
 
-#: builtins/common.c:193 shell.c:516 shell.c:844
+#: builtins/common.c:193 shell.c:524 shell.c:866
 #, c-format
 msgid "%s: option requires an argument"
 msgstr "%s: опција захтева аргумент"
@@ -207,7 +203,7 @@ msgstr "%s: потребан је бројевни аргумент"
 msgid "%s: not found"
 msgstr "%s: не постоји"
 
-#: builtins/common.c:216 shell.c:857
+#: builtins/common.c:216 shell.c:879
 #, c-format
 msgid "%s: invalid option"
 msgstr "%s: неисправна опција"
@@ -217,7 +213,7 @@ msgstr "%s: неисправна опција"
 msgid "%s: invalid option name"
 msgstr "%s: неисправан назив опције"
 
-#: builtins/common.c:230 execute_cmd.c:2373 general.c:368 general.c:373
+#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373
 #, c-format
 msgid "`%s': not a valid identifier"
 msgstr "„%s“: није исправан одредник"
@@ -230,7 +226,7 @@ msgstr "неисправан октални број"
 msgid "invalid hex number"
 msgstr "неисправан хексадецимални број"
 
-#: builtins/common.c:244 expr.c:1569
+#: builtins/common.c:244 expr.c:1574
 msgid "invalid number"
 msgstr "неисправан број"
 
@@ -244,88 +240,93 @@ msgstr "%s: неисправна одредба сигнала"
 msgid "`%s': not a pid or valid job spec"
 msgstr "„%s“: није пиб или исправна одредба посла"
 
-#: builtins/common.c:266 error.c:510
+#: builtins/common.c:266 error.c:536
 #, c-format
 msgid "%s: readonly variable"
 msgstr "%s: променљива само за читање"
 
-#: builtins/common.c:274
+#: builtins/common.c:273
+#, c-format
+msgid "%s: cannot assign"
+msgstr "%s: не могу да доделим"
+
+#: builtins/common.c:281
 #, c-format
 msgid "%s: %s out of range"
 msgstr "%s: „%s“ је ван опсега"
 
-#: builtins/common.c:274 builtins/common.c:276
+#: builtins/common.c:281 builtins/common.c:283
 msgid "argument"
 msgstr "аргумент"
 
-#: builtins/common.c:276
+#: builtins/common.c:283
 #, c-format
 msgid "%s out of range"
 msgstr "„%s“ је ван опсега"
 
-#: builtins/common.c:284
+#: builtins/common.c:291
 #, c-format
 msgid "%s: no such job"
 msgstr "%s: нема таквог посла"
 
-#: builtins/common.c:292
+#: builtins/common.c:299
 #, c-format
 msgid "%s: no job control"
 msgstr "%s: нема управљања послом"
 
-#: builtins/common.c:294
+#: builtins/common.c:301
 msgid "no job control"
 msgstr "нема управљања послом"
 
-#: builtins/common.c:304
+#: builtins/common.c:311
 #, c-format
 msgid "%s: restricted"
 msgstr "%s: ограничено"
 
-#: builtins/common.c:306
+#: builtins/common.c:313
 msgid "restricted"
 msgstr "ограничено"
 
-#: builtins/common.c:314
+#: builtins/common.c:321
 #, c-format
 msgid "%s: not a shell builtin"
 msgstr "%s: није уграђеност шкољке"
 
-#: builtins/common.c:323
+#: builtins/common.c:330
 #, c-format
 msgid "write error: %s"
 msgstr "грешка писања: %s"
 
-#: builtins/common.c:331
+#: builtins/common.c:338
 #, c-format
 msgid "error setting terminal attributes: %s"
 msgstr "грешка подешавања особина терминала: %s"
 
-#: builtins/common.c:333
+#: builtins/common.c:340
 #, c-format
 msgid "error getting terminal attributes: %s"
 msgstr "грешка добављања особина терминала: %s"
 
-#: builtins/common.c:635
+#: builtins/common.c:642
 #, c-format
 msgid "%s: error retrieving current directory: %s: %s\n"
 msgstr "%s: грешка довлачења текућег директоријума: %s: %s\n"
 
-#: builtins/common.c:701 builtins/common.c:703
+#: builtins/common.c:708 builtins/common.c:710
 #, c-format
 msgid "%s: ambiguous job spec"
 msgstr "%s: нејасна одредба посла"
 
-#: builtins/common.c:964
+#: builtins/common.c:971
 msgid "help not available in this version"
 msgstr "помоћ није доступна у овом издању"
 
-#: builtins/common.c:1008 builtins/set.def:953 variables.c:3839
+#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825
 #, c-format
 msgid "%s: cannot unset: readonly %s"
 msgstr "%s: не могу да расподесим: „%s“ је само за читање"
 
-#: builtins/common.c:1013 builtins/set.def:932 variables.c:3844
+#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830
 #, c-format
 msgid "%s: cannot unset"
 msgstr "%s: не могу да расподесим"
@@ -335,108 +336,108 @@ msgstr "%s: не могу да расподесим"
 msgid "%s: invalid action name"
 msgstr "%s: неисправан назив радње"
 
-#: builtins/complete.def:486 builtins/complete.def:634
-#: builtins/complete.def:865
+#: builtins/complete.def:486 builtins/complete.def:642
+#: builtins/complete.def:873
 #, c-format
 msgid "%s: no completion specification"
 msgstr "%s: нема одредбе довршавања"
 
-#: builtins/complete.def:688
+#: builtins/complete.def:696
 msgid "warning: -F option may not work as you expect"
 msgstr "упозорење: опција „-F“ можда неће радити како сте очекивали"
 
-#: builtins/complete.def:690
+#: builtins/complete.def:698
 msgid "warning: -C option may not work as you expect"
 msgstr "упозорење: опција „-C“ можда неће радити како сте очекивали"
 
-#: builtins/complete.def:838
+#: builtins/complete.def:846
 msgid "not currently executing completion function"
 msgstr "тренутно не обавља функцију довршавања"
 
-#: builtins/declare.def:134
+#: builtins/declare.def:137
 msgid "can only be used in a function"
 msgstr "може бити коришћено једино у функцији"
 
-#: builtins/declare.def:363 builtins/declare.def:756
+#: builtins/declare.def:437
+msgid "cannot use `-f' to make functions"
+msgstr "не можете користити „-f“ да направите функције"
+
+#: builtins/declare.def:464 execute_cmd.c:6132
+#, c-format
+msgid "%s: readonly function"
+msgstr "%s: функција само за читање"
+
+#: builtins/declare.def:521 builtins/declare.def:804
 #, c-format
 msgid "%s: reference variable cannot be an array"
 msgstr "%s: променљива упуте не може бити низ"
 
-#: builtins/declare.def:374 variables.c:3385
+#: builtins/declare.def:532 variables.c:3359
 #, c-format
 msgid "%s: nameref variable self references not allowed"
 msgstr "%s: самоупућивање променљиве упуте назива није дозвољено"
 
-#: builtins/declare.def:379 variables.c:2104 variables.c:3304 variables.c:3312
-#: variables.c:3382
+#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286
+#: variables.c:3356
 #, c-format
 msgid "%s: circular name reference"
 msgstr "%s: кружна упута назива"
 
-#: builtins/declare.def:384 builtins/declare.def:762 builtins/declare.def:773
+#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820
 #, c-format
 msgid "`%s': invalid variable name for name reference"
 msgstr "%s: неисправан назив променљиве за упуту назива"
 
-#: builtins/declare.def:514
-msgid "cannot use `-f' to make functions"
-msgstr "не можете користити „-f“ да направите функције"
-
-#: builtins/declare.def:526 execute_cmd.c:5986
-#, c-format
-msgid "%s: readonly function"
-msgstr "%s: функција само за читање"
-
-#: builtins/declare.def:824
-#, c-format
-msgid "%s: quoted compound array assignment deprecated"
-msgstr "%s: додела низа цитираног споја је застарела"
-
-#: builtins/declare.def:838
+#: builtins/declare.def:856
 #, c-format
 msgid "%s: cannot destroy array variables in this way"
 msgstr "%s: не могу да уништим променљиве низа на овај начин"
 
-#: builtins/declare.def:845 builtins/read.def:815
+#: builtins/declare.def:862 builtins/read.def:887
 #, c-format
 msgid "%s: cannot convert associative to indexed array"
 msgstr "%s: не могу да претворим придруживи низ у пописани"
 
-#: builtins/enable.def:143 builtins/enable.def:151
+#: builtins/declare.def:891
+#, c-format
+msgid "%s: quoted compound array assignment deprecated"
+msgstr "%s: додела низа цитираног споја је застарела"
+
+#: builtins/enable.def:145 builtins/enable.def:153
 msgid "dynamic loading not available"
 msgstr "променљиво учитавање није доступно"
 
-#: builtins/enable.def:343
+#: builtins/enable.def:376
 #, c-format
 msgid "cannot open shared object %s: %s"
 msgstr "не могу да отворим дељени предмет „%s“: %s"
 
-#: builtins/enable.def:371
+#: builtins/enable.def:405
 #, c-format
 msgid "cannot find %s in shared object %s: %s"
 msgstr "не могу да нађем „%s“ у дељеном предмету „%s“: %s"
 
-#: builtins/enable.def:388
+#: builtins/enable.def:422
 #, c-format
 msgid "%s: dynamic builtin already loaded"
 msgstr "%s: динамичка уградња је већ учитана"
 
-#: builtins/enable.def:392
+#: builtins/enable.def:426
 #, c-format
 msgid "load function for %s returns failure (%d): not loaded"
 msgstr "функција учитавања за „%s“ није успела (%d): није учитано"
 
-#: builtins/enable.def:517
+#: builtins/enable.def:551
 #, c-format
 msgid "%s: not dynamically loaded"
 msgstr "%s: није динамички учитано"
 
-#: builtins/enable.def:543
+#: builtins/enable.def:577
 #, c-format
 msgid "%s: cannot delete: %s"
 msgstr "%s: не могу да обришем: %s"
 
-#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5818
+#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959
 #, c-format
 msgid "%s: is a directory"
 msgstr "%s: је директоријум"
@@ -451,7 +452,7 @@ msgstr "%s: није обична датотека"
 msgid "%s: file is too large"
 msgstr "%s: датотека је превелика"
 
-#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1647
+#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673
 #, c-format
 msgid "%s: cannot execute binary file"
 msgstr "%s: не могу да извршим бинарну датотеку"
@@ -547,12 +548,12 @@ msgstr ""
 msgid "no help topics match `%s'.  Try `help help' or `man -k %s' or `info %s'."
 msgstr "нема тема помоћи које одговарају „%s“.  Покушајте „help help“ или „man -k %s“ или „info %s“."
 
-#: builtins/help.def:224
+#: builtins/help.def:223
 #, c-format
 msgid "%s: cannot open: %s"
 msgstr "%s: не могу да отворим: %s"
 
-#: builtins/help.def:524
+#: builtins/help.def:523
 #, c-format
 msgid ""
 "These shell commands are defined internally.  Type `help' to see this list.\n"
@@ -571,21 +572,21 @@ msgstr ""
 "Звездица (*) поред назива значи да је наредба искључена.\n"
 "\n"
 
-#: builtins/history.def:155
+#: builtins/history.def:159
 msgid "cannot use more than one of -anrw"
 msgstr "не могу користити више од једног „-anrw“"
 
-#: builtins/history.def:188 builtins/history.def:198 builtins/history.def:213
-#: builtins/history.def:230 builtins/history.def:242 builtins/history.def:249
+#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215
+#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247
 msgid "history position"
 msgstr "положај историјата"
 
-#: builtins/history.def:340
+#: builtins/history.def:338
 #, c-format
 msgid "%s: invalid timestamp"
 msgstr "%s: неисправна ознака времена"
 
-#: builtins/history.def:451
+#: builtins/history.def:449
 #, c-format
 msgid "%s: history expansion failed"
 msgstr "%s: није успело ширење историјата"
@@ -608,78 +609,78 @@ msgstr "%s: аргументи морају бити процеси или ИБ-
 msgid "Unknown error"
 msgstr "Непозната грешка"
 
-#: builtins/let.def:97 builtins/let.def:122 expr.c:639 expr.c:657
+#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658
 msgid "expression expected"
 msgstr "очекиван је израз"
 
-#: builtins/mapfile.def:178
+#: builtins/mapfile.def:180
 #, c-format
 msgid "%s: not an indexed array"
 msgstr "%s: није пописани низ"
 
-#: builtins/mapfile.def:271 builtins/read.def:308
+#: builtins/mapfile.def:276 builtins/read.def:336
 #, c-format
 msgid "%s: invalid file descriptor specification"
 msgstr "%s: неисправна одредба описника датотеке"
 
-#: builtins/mapfile.def:279 builtins/read.def:315
+#: builtins/mapfile.def:284 builtins/read.def:343
 #, c-format
 msgid "%d: invalid file descriptor: %s"
 msgstr "%d: неисправан описник датотеке: %s"
 
-#: builtins/mapfile.def:288 builtins/mapfile.def:326
+#: builtins/mapfile.def:293 builtins/mapfile.def:331
 #, c-format
 msgid "%s: invalid line count"
 msgstr "%s: неисправан број реда"
 
-#: builtins/mapfile.def:299
+#: builtins/mapfile.def:304
 #, c-format
 msgid "%s: invalid array origin"
 msgstr "%s: неисправно порекло низа"
 
-#: builtins/mapfile.def:316
+#: builtins/mapfile.def:321
 #, c-format
 msgid "%s: invalid callback quantum"
 msgstr "%s: неисправна количина опозива"
 
-#: builtins/mapfile.def:349
+#: builtins/mapfile.def:354
 msgid "empty array variable name"
 msgstr "празан назив променљиве низа"
 
-#: builtins/mapfile.def:370
+#: builtins/mapfile.def:375
 msgid "array variable support required"
 msgstr "потребна је подршка променљиве низа"
 
-#: builtins/printf.def:419
+#: builtins/printf.def:430
 #, c-format
 msgid "`%s': missing format character"
 msgstr "„%s“: недостаје знак записа"
 
-#: builtins/printf.def:474
+#: builtins/printf.def:485
 #, c-format
 msgid "`%c': invalid time format specification"
 msgstr "„%c“: неисправна одредба записа времена"
 
-#: builtins/printf.def:676
+#: builtins/printf.def:708
 #, c-format
 msgid "`%c': invalid format character"
 msgstr "„%c“: неисправан знак записа"
 
-#: builtins/printf.def:702
+#: builtins/printf.def:734
 #, c-format
 msgid "warning: %s: %s"
 msgstr "упозорење: %s: %s"
 
-#: builtins/printf.def:788
+#: builtins/printf.def:822
 #, c-format
 msgid "format parsing problem: %s"
 msgstr "проблем обраде записа: %s"
 
-#: builtins/printf.def:885
+#: builtins/printf.def:919
 msgid "missing hex digit for \\x"
 msgstr "недостаје хексадецимална цифра за \\x"
 
-#: builtins/printf.def:900
+#: builtins/printf.def:934
 #, c-format
 msgid "missing unicode digit for \\%c"
 msgstr "недостаје цифра уникода за \\%c"
@@ -829,12 +830,12 @@ msgstr ""
 "    \n"
 "    Уграђено „dirs“ приказује спремник директоријума."
 
-#: builtins/read.def:280
+#: builtins/read.def:308
 #, c-format
 msgid "%s: invalid timeout specification"
 msgstr "%s: неисправна одредба временског истека"
 
-#: builtins/read.def:755
+#: builtins/read.def:827
 #, c-format
 msgid "read error: %d: %s"
 msgstr "грешка читања: %d: %s"
@@ -847,7 +848,7 @@ msgstr "могу једино да „испишем“ из функције и
 msgid "cannot simultaneously unset a function and a variable"
 msgstr "не могу истовремено да расподесим функцију и променљиву"
 
-#: builtins/set.def:966
+#: builtins/set.def:969
 #, c-format
 msgid "%s: not an array variable"
 msgstr "%s: није променљива низа"
@@ -866,11 +867,11 @@ msgstr "%s: не могу да извезем"
 msgid "shift count"
 msgstr "број помака"
 
-#: builtins/shopt.def:310
+#: builtins/shopt.def:323
 msgid "cannot set and unset shell options simultaneously"
 msgstr "не могу истовремено да подесим и да расподесим опције шкољке"
 
-#: builtins/shopt.def:428
+#: builtins/shopt.def:444
 #, c-format
 msgid "%s: invalid shell option name"
 msgstr "%s: неисправан назив опције шкољке"
@@ -937,16 +938,16 @@ msgstr "%s: неисправан аргумент ограничења"
 msgid "`%c': bad command"
 msgstr "„%c“: лоша наредба"
 
-#: builtins/ulimit.def:455
+#: builtins/ulimit.def:464
 #, c-format
 msgid "%s: cannot get limit: %s"
 msgstr "%s: не могу да добавим ограничење: %s"
 
-#: builtins/ulimit.def:481
+#: builtins/ulimit.def:490
 msgid "limit"
 msgstr "ограничење"
 
-#: builtins/ulimit.def:493 builtins/ulimit.def:793
+#: builtins/ulimit.def:502 builtins/ulimit.def:802
 #, c-format
 msgid "%s: cannot modify limit: %s"
 msgstr "%s: не могу да изменим ограничење: %s"
@@ -965,7 +966,7 @@ msgstr "„%c“: неисправан оператер симболичког 
 msgid "`%c': invalid symbolic mode character"
 msgstr "„%c“: неисправан знак симболичког режима"
 
-#: error.c:89 error.c:347 error.c:349 error.c:351
+#: error.c:89 error.c:373 error.c:375 error.c:377
 msgid " line "
 msgstr " ред "
 
@@ -985,96 +986,106 @@ msgstr "Прекидам..."
 msgid "INFORM: "
 msgstr "ПОДАЦИ: "
 
-#: error.c:462
+#: error.c:310
+#, c-format
+msgid "DEBUG warning: "
+msgstr "упозорење ПРОЧИШЋАВАЊА:"
+
+#: error.c:488
 msgid "unknown command error"
 msgstr "непозната грешка наредбе"
 
-#: error.c:463
+#: error.c:489
 msgid "bad command type"
 msgstr "лоша врста наредбе"
 
-#: error.c:464
+#: error.c:490
 msgid "bad connector"
 msgstr "лош спајач"
 
-#: error.c:465
+#: error.c:491
 msgid "bad jump"
 msgstr "лош скок"
 
-#: error.c:503
+#: error.c:529
 #, c-format
 msgid "%s: unbound variable"
 msgstr "%s: несвезана променљива"
 
-#: eval.c:242
+#: eval.c:243
 msgid "\atimed out waiting for input: auto-logout\n"
 msgstr "\aистекло је време чекајући на улаз: сам се одјављујем\n"
 
-#: execute_cmd.c:537
+#: execute_cmd.c:555
 #, c-format
 msgid "cannot redirect standard input from /dev/null: %s"
 msgstr "не могу да преусмерим стандардни улаз из „/dev/null:“: %s"
 
-#: execute_cmd.c:1297
+#: execute_cmd.c:1317
 #, c-format
 msgid "TIMEFORMAT: `%c': invalid format character"
 msgstr "ЗАПИСВРЕМЕНА: „%c“: неисправан знак записа"
 
-#: execute_cmd.c:2362
+#: execute_cmd.c:2391
 #, c-format
 msgid "execute_coproc: coproc [%d:%s] still exists"
 msgstr "изврши_копроц: копроцес [%d:%s] још увек постоји"
 
-#: execute_cmd.c:2486
+#: execute_cmd.c:2524
 msgid "pipe error"
 msgstr "грешка спојке"
 
-#: execute_cmd.c:4793
+#: execute_cmd.c:4923
 #, c-format
 msgid "eval: maximum eval nesting level exceeded (%d)"
 msgstr "процена: премашен је највећи ниво угнежђивања процене (%d)"
 
-#: execute_cmd.c:4805
+#: execute_cmd.c:4935
 #, c-format
 msgid "%s: maximum source nesting level exceeded (%d)"
 msgstr "%s: премашен је највећи ниво угнежђивања извора (%d)"
 
-#: execute_cmd.c:4913
+#: execute_cmd.c:5043
 #, c-format
 msgid "%s: maximum function nesting level exceeded (%d)"
 msgstr "%s: премашен је највећи ниво угнежђивања функције (%d)"
 
-#: execute_cmd.c:5467
+#: execute_cmd.c:5598
 #, c-format
 msgid "%s: restricted: cannot specify `/' in command names"
 msgstr "%s: ограничено: не могу да наведем / у називима наредби"
 
-#: execute_cmd.c:5574
+#: execute_cmd.c:5715
 #, c-format
 msgid "%s: command not found"
 msgstr "%s: нема такве наредбе"
 
-#: execute_cmd.c:5816
+#: execute_cmd.c:5957
 #, c-format
 msgid "%s: %s"
 msgstr "%s: %s"
 
-#: execute_cmd.c:5854
+#: execute_cmd.c:5975
+#, c-format
+msgid "%s: cannot execute: required file not found"
+msgstr "%s: не могу да извршим: нисам нашао потребну датотеку"
+
+#: execute_cmd.c:6000
 #, c-format
 msgid "%s: %s: bad interpreter"
 msgstr "%s: %s: лош тумач"
 
-#: execute_cmd.c:5891
+#: execute_cmd.c:6037
 #, c-format
 msgid "%s: cannot execute binary file: %s"
 msgstr "%s: не могу да извршим бинарну датотеку: %s"
 
-#: execute_cmd.c:5977
+#: execute_cmd.c:6123
 #, c-format
 msgid "`%s': is a special builtin"
 msgstr "„%s“: јесте посебна уграђеност"
 
-#: execute_cmd.c:6029
+#: execute_cmd.c:6175
 #, c-format
 msgid "cannot duplicate fd %d to fd %d"
 msgstr "не могу да удвостручим „fd %d“ у „fd %d“"
@@ -1087,68 +1098,68 @@ msgstr "премашен је ниво дубачења израза"
 msgid "recursion stack underflow"
 msgstr "недоток спремника дубачења"
 
-#: expr.c:477
+#: expr.c:478
 msgid "syntax error in expression"
 msgstr "садржајна грешка у изразу"
 
-#: expr.c:521
+#: expr.c:522
 msgid "attempted assignment to non-variable"
 msgstr "покушано је додељивање у не-променљиву"
 
-#: expr.c:530
+#: expr.c:531
 msgid "syntax error in variable assignment"
 msgstr "садржајна грешка у додели променљиве"
 
-#: expr.c:544 expr.c:911
+#: expr.c:545 expr.c:912
 msgid "division by 0"
 msgstr "дељење 0"
 
-#: expr.c:592
+#: expr.c:593
 msgid "bug: bad expassign token"
 msgstr "грешка: лош симбол доделе израза"
 
-#: expr.c:646
+#: expr.c:647
 msgid "`:' expected for conditional expression"
 msgstr "„:“ је очекивано за условни израз"
 
-#: expr.c:972
+#: expr.c:973
 msgid "exponent less than 0"
 msgstr "изложилац је мањи од 0"
 
-#: expr.c:1029
+#: expr.c:1030
 msgid "identifier expected after pre-increment or pre-decrement"
 msgstr "одредник је очекиван након пре-увећања или пре-умањења"
 
-#: expr.c:1056
+#: expr.c:1057
 msgid "missing `)'"
 msgstr "недостаје )"
 
-#: expr.c:1107 expr.c:1487
+#: expr.c:1108 expr.c:1492
 msgid "syntax error: operand expected"
 msgstr "садржајна грешка: очекиван је операнд"
 
-#: expr.c:1489
+#: expr.c:1494
 msgid "syntax error: invalid arithmetic operator"
 msgstr "садржајна грешка: неисправан аритметички оператор"
 
-#: expr.c:1513
+#: expr.c:1518
 #, c-format
 msgid "%s%s%s: %s (error token is \"%s\")"
 msgstr "%s%s%s: %s (симбол грешке је „%s“)"
 
-#: expr.c:1573
+#: expr.c:1578
 msgid "invalid arithmetic base"
 msgstr "неисправна аритметичка основа"
 
-#: expr.c:1582
+#: expr.c:1587
 msgid "invalid integer constant"
 msgstr "неисправна константа целог броја"
 
-#: expr.c:1598
+#: expr.c:1603
 msgid "value too great for base"
 msgstr "вредност је превише велика за основу"
 
-#: expr.c:1647
+#: expr.c:1652
 #, c-format
 msgid "%s: expression error\n"
 msgstr "%s: грешка израза\n"
@@ -1157,7 +1168,7 @@ msgstr "%s: грешка израза\n"
 msgid "getcwd: cannot access parent directories"
 msgstr "getcwd: не могу да приступим родитељском директоријуму"
 
-#: input.c:99 subst.c:6069
+#: input.c:99 subst.c:6208
 #, c-format
 msgid "cannot reset nodelay mode for fd %d"
 msgstr "не могу да поништим режим без-кашњења за фд „%d“"
@@ -1176,167 +1187,167 @@ msgstr "save_bash_input: већ постоји међумеморија за н
 msgid "start_pipeline: pgrp pipe"
 msgstr "start_pipeline: „pgrp“ спојка"
 
-#: jobs.c:906
+#: jobs.c:907
 #, c-format
 msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
 
-#: jobs.c:959
+#: jobs.c:960
 #, c-format
 msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
 
-#: jobs.c:1283
+#: jobs.c:1279
 #, c-format
 msgid "forked pid %d appears in running job %d"
 msgstr "исцепљени пиб „%d“ се јавља у покренутом послу „%d“"
 
-#: jobs.c:1402
+#: jobs.c:1397
 #, c-format
 msgid "deleting stopped job %d with process group %ld"
 msgstr "бришем заустављени посао „%d“ са групом процеса %ld"
 
-#: jobs.c:1511
+#: jobs.c:1502
 #, c-format
 msgid "add_process: pid %5ld (%s) marked as still alive"
 msgstr "add_process: пиб %5ld (%s) је означен да је још жив"
 
-#: jobs.c:1850
+#: jobs.c:1839
 #, c-format
 msgid "describe_pid: %ld: no such pid"
 msgstr "describe_pid: %ld: нема таквог пиб-а"
 
-#: jobs.c:1865
+#: jobs.c:1854
 #, c-format
 msgid "Signal %d"
 msgstr "Сигнал %d"
 
-#: jobs.c:1879 jobs.c:1905
+#: jobs.c:1868 jobs.c:1894
 msgid "Done"
 msgstr "Урађен"
 
-#: jobs.c:1884 siglist.c:122
+#: jobs.c:1873 siglist.c:123
 msgid "Stopped"
 msgstr "Заустављен"
 
-#: jobs.c:1888
+#: jobs.c:1877
 #, c-format
 msgid "Stopped(%s)"
 msgstr "Заустављен(%s)"
 
-#: jobs.c:1892
+#: jobs.c:1881
 msgid "Running"
 msgstr "Покренут"
 
-#: jobs.c:1909
+#: jobs.c:1898
 #, c-format
 msgid "Done(%d)"
 msgstr "Урађен(%d)"
 
-#: jobs.c:1911
+#: jobs.c:1900
 #, c-format
 msgid "Exit %d"
 msgstr "Изађи из „%d“"
 
-#: jobs.c:1914
+#: jobs.c:1903
 msgid "Unknown status"
 msgstr "Непознато стање"
 
-#: jobs.c:2001
+#: jobs.c:1990
 #, c-format
 msgid "(core dumped) "
 msgstr "(језгрени избачај)"
 
-#: jobs.c:2020
+#: jobs.c:2009
 #, c-format
 msgid "  (wd: %s)"
 msgstr "  (wd: %s)"
 
-#: jobs.c:2259
+#: jobs.c:2250
 #, c-format
 msgid "child setpgid (%ld to %ld)"
 msgstr "сетпгиб порода (%ld у %ld)"
 
-#: jobs.c:2617 nojobs.c:664
+#: jobs.c:2608 nojobs.c:666
 #, c-format
 msgid "wait: pid %ld is not a child of this shell"
 msgstr "wait: пиб %ld није пород ове шкољке"
 
-#: jobs.c:2893
+#: jobs.c:2884
 #, c-format
 msgid "wait_for: No record of process %ld"
 msgstr "wait_for: Нема записа о процесу %ld"
 
-#: jobs.c:3236
+#: jobs.c:3223
 #, c-format
 msgid "wait_for_job: job %d is stopped"
 msgstr "wait_for_job: посао „%d“ је заустављен"
 
-#: jobs.c:3564
+#: jobs.c:3551
 #, c-format
 msgid "%s: no current jobs"
 msgstr "%s: нема текућих послова"
 
-#: jobs.c:3571
+#: jobs.c:3558
 #, c-format
 msgid "%s: job has terminated"
 msgstr "%s: посао је завршио"
 
-#: jobs.c:3580
+#: jobs.c:3567
 #, c-format
 msgid "%s: job %d already in background"
 msgstr "%s: посао „%dд је већ у позадини"
 
-#: jobs.c:3806
+#: jobs.c:3793
 msgid "waitchld: turning on WNOHANG to avoid indefinite block"
 msgstr "waitchld: укључујем „WNOHANG“ да избегнем неодређени блок"
 
-#: jobs.c:4320
+#: jobs.c:4307
 #, c-format
 msgid "%s: line %d: "
 msgstr "%s: ред %d:"
 
-#: jobs.c:4334 nojobs.c:919
+#: jobs.c:4321 nojobs.c:921
 #, c-format
 msgid " (core dumped)"
 msgstr " (језгрени избачај)"
 
-#: jobs.c:4346 jobs.c:4359
+#: jobs.c:4333 jobs.c:4346
 #, c-format
 msgid "(wd now: %s)\n"
 msgstr "(„wd“ сада: %s)\n"
 
-#: jobs.c:4391
+#: jobs.c:4378
 msgid "initialize_job_control: getpgrp failed"
 msgstr "initialize_job_control: није успело „getpgrp“"
 
-#: jobs.c:4447
+#: jobs.c:4434
 msgid "initialize_job_control: no job control in background"
 msgstr "initialize_job_control: нема контроле посла у позадини"
 
-#: jobs.c:4463
+#: jobs.c:4450
 msgid "initialize_job_control: line discipline"
 msgstr "initialize_job_control: дисциплина реда"
 
-#: jobs.c:4473
+#: jobs.c:4460
 msgid "initialize_job_control: setpgid"
 msgstr "initialize_job_control: setpgid"
 
-#: jobs.c:4494 jobs.c:4503
+#: jobs.c:4481 jobs.c:4490
 #, c-format
 msgid "cannot set terminal process group (%d)"
 msgstr "не могу да подесим групу процеса терминала (%d)"
 
-#: jobs.c:4508
+#: jobs.c:4495
 msgid "no job control in this shell"
 msgstr "нема управљања послом у овој шкољци"
 
-#: lib/malloc/malloc.c:353
+#: lib/malloc/malloc.c:367
 #, c-format
 msgid "malloc: failed assertion: %s\n"
 msgstr "malloc: тврдња није успела: %s\n"
 
-#: lib/malloc/malloc.c:369
+#: lib/malloc/malloc.c:383
 #, c-format
 msgid ""
 "\r\n"
@@ -1345,47 +1356,47 @@ msgstr ""
 "\r\n"
 "malloc: %s:%d: тврдња је лоше изведена\r\n"
 
-#: lib/malloc/malloc.c:370 lib/malloc/malloc.c:933
+#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941
 msgid "unknown"
 msgstr "непознато"
 
-#: lib/malloc/malloc.c:882
+#: lib/malloc/malloc.c:892
 msgid "malloc: block on free list clobbered"
 msgstr "malloc: блок на слободном списку је преписан"
 
-#: lib/malloc/malloc.c:972
+#: lib/malloc/malloc.c:980
 msgid "free: called with already freed block argument"
 msgstr "free: позвана са већ ослобођеним аргументом блока"
 
-#: lib/malloc/malloc.c:975
+#: lib/malloc/malloc.c:983
 msgid "free: called with unallocated block argument"
 msgstr "free: позвана са недодељеним аргументом блока"
 
-#: lib/malloc/malloc.c:994
+#: lib/malloc/malloc.c:1001
 msgid "free: underflow detected; mh_nbytes out of range"
 msgstr "free: откривена је недовољност тока; mh_n-бајтова је ван опсега"
 
-#: lib/malloc/malloc.c:1001
+#: lib/malloc/malloc.c:1007
 msgid "free: underflow detected; magic8 corrupted"
 msgstr "free: откривена је недовољност тока; „magic8“ је оштећено"
 
-#: lib/malloc/malloc.c:1009
+#: lib/malloc/malloc.c:1014
 msgid "free: start and end chunk sizes differ"
 msgstr "free: почетна и крајња величина дела се разликују"
 
-#: lib/malloc/malloc.c:1119
+#: lib/malloc/malloc.c:1176
 msgid "realloc: called with unallocated block argument"
 msgstr "realloc: позвана са недодељеним аргументом блока"
 
-#: lib/malloc/malloc.c:1134
+#: lib/malloc/malloc.c:1191
 msgid "realloc: underflow detected; mh_nbytes out of range"
 msgstr "realloc: откривена је недовољност тока; mh_n-бајтова је ван опсега"
 
-#: lib/malloc/malloc.c:1141
+#: lib/malloc/malloc.c:1197
 msgid "realloc: underflow detected; magic8 corrupted"
 msgstr "realloc: откривена је недовољност тока; „magic8“ је оштећено"
 
-#: lib/malloc/malloc.c:1150
+#: lib/malloc/malloc.c:1205
 msgid "realloc: start and end chunk sizes differ"
 msgstr "realloc: почетна и крајња величина дела се разликују"
 
@@ -1427,22 +1438,22 @@ msgstr "%s: лоша одредба путање мреже"
 msgid "network operations not supported"
 msgstr "радње мреже нису подржане"
 
-#: locale.c:217
+#: locale.c:219
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s)"
 msgstr "setlocale: LC_ALL: не могу да изменим језик (%s)"
 
-#: locale.c:219
+#: locale.c:221
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s): %s"
 msgstr "setlocale: LC_ALL: не могу да изменим језик (%s): %s"
 
-#: locale.c:292
+#: locale.c:294
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s)"
 msgstr "setlocale: %s: не могу да изменим језик (%s)"
 
-#: locale.c:294
+#: locale.c:296
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s): %s"
 msgstr "setlocale: %s: не могу да изменим језик (%s): %s"
@@ -1460,136 +1471,136 @@ msgstr "Имате нову пошту у $_"
 msgid "The mail in %s has been read\n"
 msgstr "Пошта у „%s“ је прочитана\n"
 
-#: make_cmd.c:317
+#: make_cmd.c:314
 msgid "syntax error: arithmetic expression required"
 msgstr "садржајна грешка: потребан је аритметички израз"
 
-#: make_cmd.c:319
+#: make_cmd.c:316
 msgid "syntax error: `;' unexpected"
 msgstr "садржајна грешка: није очекивано „;“"
 
-#: make_cmd.c:320
+#: make_cmd.c:317
 #, c-format
 msgid "syntax error: `((%s))'"
 msgstr "садржајна грешка: „((%s))“"
 
-#: make_cmd.c:572
+#: make_cmd.c:569
 #, c-format
 msgid "make_here_document: bad instruction type %d"
 msgstr "make_here_document: лоша врста упутства „%d“"
 
-#: make_cmd.c:657
+#: make_cmd.c:668
 #, c-format
 msgid "here-document at line %d delimited by end-of-file (wanted `%s')"
 msgstr "овде-документ у %d. реду је ограничен крајем-датотеке (тражи се „%s“)"
 
-#: make_cmd.c:756
+#: make_cmd.c:769
 #, c-format
 msgid "make_redirection: redirection instruction `%d' out of range"
 msgstr "make_redirection: упутсво преусмерења „%d“ је ван опсега"
 
-#: parse.y:2393
+#: parse.y:2428
 #, c-format
 msgid "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line truncated"
 msgstr "shell_getc: величина_реда_улаза_шкољке (%zu) је премашила НАЈВЕЋУ_ВЕЛИЧИНУ (%lu): ред је скраћен"
 
-#: parse.y:2826
+#: parse.y:2921
 msgid "maximum here-document count exceeded"
 msgstr "премашен је највећи број „овде-документ“"
 
-#: parse.y:3581 parse.y:3957 parse.y:4556
+#: parse.y:3684 parse.y:4244 parse.y:6148
 #, c-format
 msgid "unexpected EOF while looking for matching `%c'"
 msgstr "неочекивани крај датотеке приликом тражења поклапања „%c“"
 
-#: parse.y:4696
+#: parse.y:4452
 msgid "unexpected EOF while looking for `]]'"
 msgstr "неочекивани крај датотеке приликом тражења „]]“"
 
-#: parse.y:4701
+#: parse.y:4457
 #, c-format
 msgid "syntax error in conditional expression: unexpected token `%s'"
 msgstr "садржајна грешка у условном изразу: неочекивани симбол „%s“"
 
-#: parse.y:4705
+#: parse.y:4461
 msgid "syntax error in conditional expression"
 msgstr "садржајна грешка у условном изразу"
 
-#: parse.y:4783
+#: parse.y:4539
 #, c-format
 msgid "unexpected token `%s', expected `)'"
 msgstr "неочекивани симбол „%s“, очекивана је )"
 
-#: parse.y:4787
+#: parse.y:4543
 msgid "expected `)'"
 msgstr "очекивана је )"
 
-#: parse.y:4815
+#: parse.y:4571
 #, c-format
 msgid "unexpected argument `%s' to conditional unary operator"
 msgstr "неочекивани аргумент „%s“ условном једночланом оператору"
 
-#: parse.y:4819
+#: parse.y:4575
 msgid "unexpected argument to conditional unary operator"
 msgstr "неочекивани аргумент условном једночланом оператору"
 
-#: parse.y:4865
+#: parse.y:4621
 #, c-format
 msgid "unexpected token `%s', conditional binary operator expected"
 msgstr "неочекивани симбол „%s“, очекиван је условни двочлани оператор"
 
-#: parse.y:4869
+#: parse.y:4625
 msgid "conditional binary operator expected"
 msgstr "очекиван је условни двочлани оператор"
 
-#: parse.y:4891
+#: parse.y:4647
 #, c-format
 msgid "unexpected argument `%s' to conditional binary operator"
 msgstr "неочекивани аргумент „%s“ условном двочланом оператору"
 
-#: parse.y:4895
+#: parse.y:4651
 msgid "unexpected argument to conditional binary operator"
 msgstr "неочекивани аргумент условном двочланом оператору"
 
-#: parse.y:4906
+#: parse.y:4662
 #, c-format
 msgid "unexpected token `%c' in conditional command"
 msgstr "неочекивани симбол „%c“ у условној наредби"
 
-#: parse.y:4909
+#: parse.y:4665
 #, c-format
 msgid "unexpected token `%s' in conditional command"
 msgstr "неочекивани симбол „%s“ у условној наредби"
 
-#: parse.y:4913
+#: parse.y:4669
 #, c-format
 msgid "unexpected token %d in conditional command"
 msgstr "неочекивани симбол „%d“ у условној наредби"
 
-#: parse.y:6336
+#: parse.y:6118
 #, c-format
 msgid "syntax error near unexpected token `%s'"
 msgstr "садржајна грешка близу неочекиваног симбола „%s“"
 
-#: parse.y:6355
+#: parse.y:6137
 #, c-format
 msgid "syntax error near `%s'"
 msgstr "садржајна грешка близу „%s“"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error: unexpected end of file"
 msgstr "садржајна грешка: неочекивани крај датотеке"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error"
 msgstr "садржајна грешка"
 
-#: parse.y:6428
+#: parse.y:6216
 #, c-format
 msgid "Use \"%s\" to leave the shell.\n"
 msgstr "Користите „%s“ да напустите шкољку.\n"
 
-#: parse.y:6602
+#: parse.y:6394
 msgid "unexpected EOF while looking for matching `)'"
 msgstr "неочекивани крај датотеке приликом тражења поклапајуће )"
 
@@ -1627,94 +1638,94 @@ msgstr "xtrace_set: НИШТАВАН указивач датотеке"
 msgid "xtrace fd (%d) != fileno xtrace fp (%d)"
 msgstr "xtrace fd (%d) != fileno xtrace fp (%d)"
 
-#: print_cmd.c:1540
+#: print_cmd.c:1545
 #, c-format
 msgid "cprintf: `%c': invalid format character"
 msgstr "cprintf: „%c“: неисправан знак записа"
 
-#: redir.c:149 redir.c:197
+#: redir.c:150 redir.c:198
 msgid "file descriptor out of range"
 msgstr "описник датотеке је ван опсега"
 
-#: redir.c:204
+#: redir.c:205
 #, c-format
 msgid "%s: ambiguous redirect"
 msgstr "%s: нејасно преусмерење"
 
-#: redir.c:208
+#: redir.c:209
 #, c-format
 msgid "%s: cannot overwrite existing file"
 msgstr "%s: не могу да препишем постојећу датотеку"
 
-#: redir.c:213
+#: redir.c:214
 #, c-format
 msgid "%s: restricted: cannot redirect output"
 msgstr "%s: ограничено: не могу да преусмерим излаз"
 
-#: redir.c:218
+#: redir.c:219
 #, c-format
 msgid "cannot create temp file for here-document: %s"
 msgstr "не могу да направим привремену датотеку за документ-овде: %s"
 
-#: redir.c:222
+#: redir.c:223
 #, c-format
 msgid "%s: cannot assign fd to variable"
 msgstr "%s: не могу да доделим фд променљивој"
 
-#: redir.c:649
+#: redir.c:650
 msgid "/dev/(tcp|udp)/host/port not supported without networking"
 msgstr "„/dev/(tcp|udp)/домаћин/прикључник“ није подржано без умрежавања"
 
-#: redir.c:938 redir.c:1053 redir.c:1114 redir.c:1284
+#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303
 msgid "redirection error: cannot duplicate fd"
 msgstr "грешка преусмерења: не могу да удвостручим фд"
 
-#: shell.c:347
+#: shell.c:353
 msgid "could not find /tmp, please create!"
 msgstr "не могу да нађем „/tmp“, направите га!"
 
-#: shell.c:351
+#: shell.c:357
 msgid "/tmp must be a valid directory name"
 msgstr "„/tmp“ мора бити исправан назив директоријума"
 
-#: shell.c:804
+#: shell.c:826
 msgid "pretty-printing mode ignored in interactive shells"
 msgstr "режим уредног исписа је занемарен у међудејственим шкољкама"
 
-#: shell.c:948
+#: shell.c:972
 #, c-format
 msgid "%c%c: invalid option"
 msgstr "%c%c: неисправна опција"
 
-#: shell.c:1319
+#: shell.c:1343
 #, c-format
 msgid "cannot set uid to %d: effective uid %d"
 msgstr "не могу да подесим јиб на %d: стварни јиб %d"
 
-#: shell.c:1330
+#: shell.c:1354
 #, c-format
 msgid "cannot set gid to %d: effective gid %d"
 msgstr "не могу да подесим гиб на %d: стварни гиб %d"
 
-#: shell.c:1518
+#: shell.c:1544
 msgid "cannot start debugger; debugging mode disabled"
 msgstr "не могу да покренем прочишћавача; режим прочишћавања је искључен"
 
-#: shell.c:1632
+#: shell.c:1658
 #, c-format
 msgid "%s: Is a directory"
 msgstr "%s: је директоријум"
 
-#: shell.c:1881
+#: shell.c:1907
 msgid "I have no name!"
 msgstr "Немам назив!"
 
-#: shell.c:2035
+#: shell.c:2061
 #, c-format
 msgid "GNU bash, version %s-(%s)\n"
 msgstr "Гну баш, издање %s-(%s)\n"
 
-#: shell.c:2036
+#: shell.c:2062
 #, c-format
 msgid ""
 "Usage:\t%s [GNU long option] [option] ...\n"
@@ -1723,317 +1734,317 @@ msgstr ""
 "Употреба:\t%s [Гнуова дуга опција] [опција] ...\n"
 "        \t%s [Гнуова дуга опција] [опција] датотека-списа ...\n"
 
-#: shell.c:2038
+#: shell.c:2064
 msgid "GNU long options:\n"
 msgstr "Гнуове дуге опције:\n"
 
-#: shell.c:2042
+#: shell.c:2068
 msgid "Shell options:\n"
 msgstr "Опције шкољке:\n"
 
-#: shell.c:2043
+#: shell.c:2069
 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n"
 msgstr "\t„-ilrsD“ или наредба „-c“ или -O шопц_опција\t\t(призивање само)\n"
 
-#: shell.c:2062
+#: shell.c:2088
 #, c-format
 msgid "\t-%s or -o option\n"
 msgstr "\t„-%s“ или опција „-o“\n"
 
-#: shell.c:2068
+#: shell.c:2094
 #, c-format
 msgid "Type `%s -c \"help set\"' for more information about shell options.\n"
 msgstr "Укуцајте „%s -c \"help set\"“ за више података о опцијама шкољке.\n"
 
-#: shell.c:2069
+#: shell.c:2095
 #, c-format
 msgid "Type `%s -c help' for more information about shell builtin commands.\n"
 msgstr "Укуцајте „%s -c help“ за више података о уграђеним наредбама шкољке.\n"
 
-#: shell.c:2070
+#: shell.c:2096
 #, c-format
 msgid "Use the `bashbug' command to report bugs.\n"
 msgstr "Користите наредбу „bashbug“ да известите о грешкама.\n"
 
-#: shell.c:2072
+#: shell.c:2098
 #, c-format
 msgid "bash home page: <http://www.gnu.org/software/bash>\n"
 msgstr "Матична страница баша: <http://www.gnu.org/software/bash>\n"
 
-#: shell.c:2073
+#: shell.c:2099
 #, c-format
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 msgstr "Општа помоћ коришћења Гну софтвера: <http://www.gnu.org/gethelp/>\n"
 
-#: sig.c:757
+#: sig.c:765
 #, c-format
 msgid "sigprocmask: %d: invalid operation"
 msgstr "sigprocmask: %d: неисправна операција"
 
-#: siglist.c:47
+#: siglist.c:48
 msgid "Bogus signal"
 msgstr "Нетачан сигнал"
 
-#: siglist.c:50
+#: siglist.c:51
 msgid "Hangup"
 msgstr "Обустави"
 
-#: siglist.c:54
+#: siglist.c:55
 msgid "Interrupt"
 msgstr "Прекини"
 
-#: siglist.c:58
+#: siglist.c:59
 msgid "Quit"
 msgstr "Изађи"
 
-#: siglist.c:62
+#: siglist.c:63
 msgid "Illegal instruction"
 msgstr "Неисправна инструкција"
 
-#: siglist.c:66
+#: siglist.c:67
 msgid "BPT trace/trap"
 msgstr "Прати/ухвати БПТ"
 
-#: siglist.c:74
+#: siglist.c:75
 msgid "ABORT instruction"
 msgstr "Инструкција „ABORT“"
 
-#: siglist.c:78
+#: siglist.c:79
 msgid "EMT instruction"
 msgstr "Инструкција „EMT“"
 
-#: siglist.c:82
+#: siglist.c:83
 msgid "Floating point exception"
 msgstr "Изузетак покретног зареза"
 
-#: siglist.c:86
+#: siglist.c:87
 msgid "Killed"
 msgstr "Убијен"
 
-#: siglist.c:90
+#: siglist.c:91
 msgid "Bus error"
 msgstr "Грешка сабирнице"
 
-#: siglist.c:94
+#: siglist.c:95
 msgid "Segmentation fault"
 msgstr "Неуспех сегментације"
 
-#: siglist.c:98
+#: siglist.c:99
 msgid "Bad system call"
 msgstr "Лош системски позив"
 
-#: siglist.c:102
+#: siglist.c:103
 msgid "Broken pipe"
 msgstr "Сломљена спојка"
 
-#: siglist.c:106
+#: siglist.c:107
 msgid "Alarm clock"
 msgstr "Аларм"
 
-#: siglist.c:110
+#: siglist.c:111
 msgid "Terminated"
 msgstr "Окончано"
 
-#: siglist.c:114
+#: siglist.c:115
 msgid "Urgent IO condition"
 msgstr "Хитан УИ услов"
 
-#: siglist.c:118
+#: siglist.c:119
 msgid "Stopped (signal)"
 msgstr "Заустављен (сигнал)"
 
-#: siglist.c:126
+#: siglist.c:127
 msgid "Continue"
 msgstr "Настави"
 
-#: siglist.c:134
+#: siglist.c:135
 msgid "Child death or stop"
 msgstr "Пород је преминуо или заустављен"
 
-#: siglist.c:138
+#: siglist.c:139
 msgid "Stopped (tty input)"
 msgstr "Заустављен (улаз конзоле)"
 
-#: siglist.c:142
+#: siglist.c:143
 msgid "Stopped (tty output)"
 msgstr "Заустављен (излаз конзоле)"
 
-#: siglist.c:146
+#: siglist.c:147
 msgid "I/O ready"
 msgstr "Спреман на У/И"
 
-#: siglist.c:150
+#: siglist.c:151
 msgid "CPU limit"
 msgstr "Ограничење процесора"
 
-#: siglist.c:154
+#: siglist.c:155
 msgid "File limit"
 msgstr "Ограничење датотеке"
 
-#: siglist.c:158
+#: siglist.c:159
 msgid "Alarm (virtual)"
 msgstr "Аларм (виртуелни)"
 
-#: siglist.c:162
+#: siglist.c:163
 msgid "Alarm (profile)"
 msgstr "Аларм (профил)"
 
-#: siglist.c:166
+#: siglist.c:167
 msgid "Window changed"
 msgstr "Промењени прозор"
 
-#: siglist.c:170
+#: siglist.c:171
 msgid "Record lock"
 msgstr "Закључавање снимка"
 
-#: siglist.c:174
+#: siglist.c:175
 msgid "User signal 1"
 msgstr "Кориснички сигнал 1"
 
-#: siglist.c:178
+#: siglist.c:179
 msgid "User signal 2"
 msgstr "Кориснички сигнал 2"
 
-#: siglist.c:182
+#: siglist.c:183
 msgid "HFT input data pending"
 msgstr "Улазни ХФТ подаци на чекању"
 
-#: siglist.c:186
+#: siglist.c:187
 msgid "power failure imminent"
 msgstr "неизбежан пад напајања"
 
-#: siglist.c:190
+#: siglist.c:191
 msgid "system crash imminent"
 msgstr "неизбежан пад система"
 
-#: siglist.c:194
+#: siglist.c:195
 msgid "migrate process to another CPU"
 msgstr "пребацује процес на други процесор"
 
-#: siglist.c:198
+#: siglist.c:199
 msgid "programming error"
 msgstr "грешка програмирања"
 
-#: siglist.c:202
+#: siglist.c:203
 msgid "HFT monitor mode granted"
 msgstr "Осигуран је режим ХФТ праћења"
 
-#: siglist.c:206
+#: siglist.c:207
 msgid "HFT monitor mode retracted"
 msgstr "Понови је испраћен режим ХФТ праћења"
 
-#: siglist.c:210
+#: siglist.c:211
 msgid "HFT sound sequence has completed"
 msgstr "Низ ХФТ звука је завршен"
 
-#: siglist.c:214
+#: siglist.c:215
 msgid "Information request"
 msgstr "Захтев за подацима"
 
-#: siglist.c:222 siglist.c:224
+#: siglist.c:223 siglist.c:225
 #, c-format
 msgid "Unknown Signal #%d"
 msgstr "Непознат сигнал #%d"
 
-#: subst.c:1476 subst.c:1666
+#: subst.c:1480 subst.c:1670
 #, c-format
 msgid "bad substitution: no closing `%s' in %s"
 msgstr "лоша замена: нема затварајуће „%s“ у „%s“"
 
-#: subst.c:3281
+#: subst.c:3307
 #, c-format
 msgid "%s: cannot assign list to array member"
 msgstr "%s: не могу да доделим списак члану низа"
 
-#: subst.c:5910 subst.c:5926
+#: subst.c:6048 subst.c:6064
 msgid "cannot make pipe for process substitution"
 msgstr "не могу да начиним спојку за замену процеса"
 
-#: subst.c:5985
+#: subst.c:6124
 msgid "cannot make child for process substitution"
 msgstr "не могу да начиним пород за замену процеса"
 
-#: subst.c:6059
+#: subst.c:6198
 #, c-format
 msgid "cannot open named pipe %s for reading"
 msgstr "не могу да отворим именовану спојку „%s“ за читање"
 
-#: subst.c:6061
+#: subst.c:6200
 #, c-format
 msgid "cannot open named pipe %s for writing"
 msgstr "не могу да отворим именовану спојку „%s“ за писање"
 
-#: subst.c:6084
+#: subst.c:6223
 #, c-format
 msgid "cannot duplicate named pipe %s as fd %d"
 msgstr "не могу да удвостручим именовану спојку „%s“ као фд %d"
 
-#: subst.c:6213
+#: subst.c:6370
 msgid "command substitution: ignored null byte in input"
 msgstr "замена наредбе: занемарих ништавни бајт у улазу"
 
-#: subst.c:6353
+#: subst.c:6533
 msgid "cannot make pipe for command substitution"
 msgstr "не могу да начиним спојку за замену наредбе"
 
-#: subst.c:6397
+#: subst.c:6580
 msgid "cannot make child for command substitution"
 msgstr "не могу да начиним пород за замену наредбе"
 
-#: subst.c:6423
+#: subst.c:6613
 msgid "command_substitute: cannot duplicate pipe as fd 1"
 msgstr "command_substitute: не могу да удвостручим спојку као фд 1"
 
-#: subst.c:6883 subst.c:9952
+#: subst.c:7082 subst.c:10252
 #, c-format
 msgid "%s: invalid variable name for name reference"
 msgstr "%s: неисправан назив променљиве за упуту назива"
 
-#: subst.c:6979 subst.c:6997 subst.c:7169
+#: subst.c:7178 subst.c:7196 subst.c:7369
 #, c-format
 msgid "%s: invalid indirect expansion"
 msgstr "%s: неисправно посредно ширење"
 
-#: subst.c:7013 subst.c:7177
+#: subst.c:7212 subst.c:7377
 #, c-format
 msgid "%s: invalid variable name"
 msgstr "%s: неисправан назив променљиве"
 
-#: subst.c:7256
+#: subst.c:7478
 #, c-format
 msgid "%s: parameter not set"
 msgstr "%s: параметар није подешен"
 
-#: subst.c:7258
+#: subst.c:7480
 #, c-format
 msgid "%s: parameter null or not set"
 msgstr "%s: параметар је ништаван или није подешен"
 
-#: subst.c:7503 subst.c:7518
+#: subst.c:7727 subst.c:7742
 #, c-format
 msgid "%s: substring expression < 0"
 msgstr "%s: израз подниске < 0"
 
-#: subst.c:9281 subst.c:9302
+#: subst.c:9560 subst.c:9587
 #, c-format
 msgid "%s: bad substitution"
 msgstr "%s: лоша замена"
 
-#: subst.c:9390
+#: subst.c:9678
 #, c-format
 msgid "$%s: cannot assign in this way"
 msgstr "$%s: не могу дадоделим на овај начин"
 
-#: subst.c:9814
+#: subst.c:10111
 msgid "future versions of the shell will force evaluation as an arithmetic substitution"
 msgstr "будућа издања шкољке ће приморати процену као аритметичку замену"
 
-#: subst.c:10367
+#: subst.c:10795
 #, c-format
 msgid "bad substitution: no closing \"`\" in %s"
 msgstr "лоша замена: нема затварајућег „`“ у „%s“"
 
-#: subst.c:11434
+#: subst.c:11874
 #, c-format
 msgid "no match: %s"
 msgstr "нема поклапања: %s"
@@ -2056,21 +2067,21 @@ msgstr "очекивана је )"
 msgid "`)' expected, found %s"
 msgstr "очекивана је ), а пронађена %s"
 
-#: test.c:466 test.c:799
+#: test.c:469 test.c:814
 #, c-format
 msgid "%s: binary operator expected"
 msgstr "%s: очекиван је двочлани оператор"
 
-#: test.c:756 test.c:759
+#: test.c:771 test.c:774
 #, c-format
 msgid "%s: unary operator expected"
 msgstr "%s: очекиван је једночлани оператор"
 
-#: test.c:881
+#: test.c:896
 msgid "missing `]'"
 msgstr "недостаје ]"
 
-#: test.c:899
+#: test.c:914
 #, c-format
 msgid "syntax error: `%s' unexpected"
 msgstr "садржајна грешка: није очекивано „%s“"
@@ -2079,99 +2090,104 @@ msgstr "садржајна грешка: није очекивано „%s“"
 msgid "invalid signal number"
 msgstr "неисправан сигнални број"
 
-#: trap.c:325
+#: trap.c:323
 #, c-format
 msgid "trap handler: maximum trap handler level exceeded (%d)"
 msgstr "руковалац изузетком: премашен је највећи ниво руковаоца изузецима (%d)"
 
-#: trap.c:414
+#: trap.c:412
 #, c-format
 msgid "run_pending_traps: bad value in trap_list[%d]: %p"
 msgstr "run_pending_traps: лоша вредност у „trap_list[%d]“: %p"
 
-#: trap.c:418
+#: trap.c:416
 #, c-format
 msgid "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
 msgstr "run_pending_traps: руковалац сигналом је „SIG_DFL“, поново шаљем %d (%s) мени самом"
 
-#: trap.c:487
+#: trap.c:509
 #, c-format
 msgid "trap_handler: bad signal %d"
 msgstr "trap_handler: лош сигнал %d"
 
-#: variables.c:421
+#: variables.c:424
 #, c-format
 msgid "error importing function definition for `%s'"
 msgstr "грешка увоза одреднице функције за „%s“"
 
-#: variables.c:833
+#: variables.c:838
 #, c-format
 msgid "shell level (%d) too high, resetting to 1"
 msgstr "ниво шкољке (%d) је превисок, поново постављам на 1"
 
-#: variables.c:2674
+#: variables.c:2642
 msgid "make_local_variable: no function context at current scope"
 msgstr "make_local_variable: нема садржаја функције на текућем досегу"
 
-#: variables.c:2693
+#: variables.c:2661
 #, c-format
 msgid "%s: variable may not be assigned value"
 msgstr "%s: вредности не може бити додељена вредност"
 
-#: variables.c:3475
+#: variables.c:2818 variables.c:2874
+#, c-format
+msgid "%s: cannot inherit value from incompatible type"
+msgstr "%s: не могу да наследим вредност из несагласне врсте"
+
+#: variables.c:3459
 #, c-format
 msgid "%s: assigning integer to name reference"
 msgstr "%s: додељујем цео број упути назива"
 
-#: variables.c:4404
+#: variables.c:4390
 msgid "all_local_variables: no function context at current scope"
 msgstr "all_local_variable: нема садржаја функције на текућем досегу"
 
-#: variables.c:4771
+#: variables.c:4757
 #, c-format
 msgid "%s has null exportstr"
 msgstr "%s има ништавну ниску извоза"
 
-#: variables.c:4776 variables.c:4785
+#: variables.c:4762 variables.c:4771
 #, c-format
 msgid "invalid character %d in exportstr for %s"
 msgstr "неисправан знак %d у нисци извоза за „%s“"
 
-#: variables.c:4791
+#: variables.c:4777
 #, c-format
 msgid "no `=' in exportstr for %s"
 msgstr "нема = у нисци извоза за „%s“"
 
-#: variables.c:5331
+#: variables.c:5317
 msgid "pop_var_context: head of shell_variables not a function context"
 msgstr "pop_var_context: глава променљивих шкољке није садржајност функције"
 
-#: variables.c:5344
+#: variables.c:5330
 msgid "pop_var_context: no global_variables context"
 msgstr "pop_var_context: нема садржаја општих променљивих"
 
-#: variables.c:5424
+#: variables.c:5410
 msgid "pop_scope: head of shell_variables not a temporary environment scope"
 msgstr "pop_scope: глава променљивих шкољке није привремени досег окружења"
 
-#: variables.c:6387
+#: variables.c:6400
 #, c-format
 msgid "%s: %s: cannot open as FILE"
 msgstr "%s: %s: не могу да отворим као ДАТОТЕКУ"
 
-#: variables.c:6392
+#: variables.c:6405
 #, c-format
 msgid "%s: %s: invalid value for trace file descriptor"
 msgstr "%s: %s: неисправна вредност за описник праћења датотеке"
 
-#: variables.c:6437
+#: variables.c:6450
 #, c-format
 msgid "%s: %s: compatibility value out of range"
 msgstr "%s: %s: вреднсот сагласности је ван опсега"
 
 #: version.c:46 version2.c:46
-msgid "Copyright (C) 2020 Free Software Foundation, Inc."
-msgstr "Ауторска права © 2020 Задужбина слободног софтвера, Доо."
+msgid "Copyright (C) 2022 Free Software Foundation, Inc."
+msgstr "Ауторска права © 2022. Фондација слободног софтвера, Доо."
 
 #: version.c:47 version2.c:47
 msgid "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n"
@@ -2251,12 +2267,12 @@ msgid "command [-pVv] command [arg ...]"
 msgstr "command [-pVv] command [арг ...]"
 
 #: builtins.c:78
-msgid "declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]"
-msgstr "declare [-aAfFgiIlnrtux] [-p] [назив[=вредност] ...]"
+msgid "declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] [name ...]"
+msgstr "declare [-aAfFgiIlnrtux] [назив[=вредност] ...] или declare -p [-aAfFilnrtux] [назив ...]"
 
 #: builtins.c:80
-msgid "typeset [-aAfFgiIlnrtux] [-p] name[=value] ..."
-msgstr "typeset [-aAfFgiIlnrtux] [-p] назив[=вредност] ..."
+msgid "typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] [name ...]"
+msgstr "typeset [-aAfFgiIlnrtux] [-p] назив[=вредност] ... или typeset -p [-aAfFilnrtux] [назив ...]"
 
 #: builtins.c:82
 msgid "local [option] name[=value] ..."
@@ -2343,8 +2359,8 @@ msgid "return [n]"
 msgstr "return [n]"
 
 #: builtins.c:142
-msgid "set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]"
-msgstr "set [-abefhkmnptuvxBCHP] [-o назив-опције] [--] [арг ...]"
+msgid "set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]"
+msgstr "set [-abefhkmnptuvxBCEHPT] [-o назив-опције] [--] [-] [арг ...]"
 
 #: builtins.c:144
 msgid "unset [-f] [-v] [-n] [name ...]"
@@ -2391,8 +2407,8 @@ msgid "type [-afptP] name [name ...]"
 msgstr "type [-afptP] назив [назив ...]"
 
 #: builtins.c:171
-msgid "ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]"
-msgstr "ulimit [-SHabcdefiklmnpqrstuvxPT] [ограничење]"
+msgid "ulimit [-SHabcdefiklmnpqrstuvxPRT] [limit]"
+msgstr "ulimit [-SHabcdefiklmnpqrstuvxPRT] [ограничење]"
 
 #: builtins.c:174
 msgid "umask [-p] [-S] [mode]"
@@ -2431,12 +2447,12 @@ msgid "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else C
 msgstr "if НАРЕДБЕ; then НАРЕДБЕ; [ elif НАРЕДБЕ; then НАРЕДБЕ; ]... [ else НАРЕДБЕ; ] fi"
 
 #: builtins.c:196
-msgid "while COMMANDS; do COMMANDS; done"
-msgstr "while НАРЕДБЕ; do НАРЕДБЕ; done"
+msgid "while COMMANDS; do COMMANDS-2; done"
+msgstr "while НАРЕДБЕ; do НАРЕДБЕ-2; done"
 
 #: builtins.c:198
-msgid "until COMMANDS; do COMMANDS; done"
-msgstr "until НАРЕДБЕ; do НАРЕДБЕ; done"
+msgid "until COMMANDS; do COMMANDS-2; done"
+msgstr "until НАРЕДБЕ; do НАРЕДБЕ-2; done"
 
 #: builtins.c:200
 msgid "coproc [NAME] command [redirections]"
@@ -3729,7 +3745,8 @@ msgid ""
 "    splitting, and the first word is assigned to the first NAME, the second\n"
 "    word to the second NAME, and so on, with any leftover words assigned to\n"
 "    the last NAME.  Only the characters found in $IFS are recognized as word\n"
-"    delimiters.\n"
+"    delimiters. By default, the backslash character escapes delimiter characters\n"
+"    and newline.\n"
 "    \n"
 "    If no NAMEs are supplied, the line read is stored in the REPLY variable.\n"
 "    \n"
@@ -3771,7 +3788,8 @@ msgstr ""
 "    ако је достављена опција „-u“.  Ред је подељен на поља као при дељењу\n"
 "    речи, а прва реч се додељује првом НАЗИВУ, друга реч другом НАЗИВУ,\n"
 "    и тако редом, са сваком наредном речју додељеном последњем НАЗИВУ.\n"
-"    Само знаци пронађени у „$IFS“ се признају за граничнике речи.\n"
+"    Само знаци пронађени у „$IFS“ се признају за граничнике речи. По основи,\n"
+"    знак контра косе црте мења значење знакова граничника и новог реда.\n"
 "    \n"
 "    Ако нису достављени НАЗИВИ, читани ред је смештен у променљивој ОДГОВОР.\n"
 "    \n"
@@ -3805,7 +3823,7 @@ msgstr ""
 "    читања (у том случају је већи од 128), ако не дође до грешке доделе променљиве,\n"
 "    или ако се не достави неисправан описник датотеке као аргумент опције „-u“."
 
-#: builtins.c:1041
+#: builtins.c:1042
 msgid ""
 "Return from a shell function.\n"
 "    \n"
@@ -3825,7 +3843,7 @@ msgstr ""
 "    Излазно стање:\n"
 "    Даје N, или неуспех ако шкољка не извршава функцију или спис."
 
-#: builtins.c:1054
+#: builtins.c:1055
 msgid ""
 "Set or unset values of shell options and positional parameters.\n"
 "    \n"
@@ -3988,7 +4006,7 @@ msgstr ""
 "    Излазно стање:\n"
 "    Даје позитиван резултат осим ако није дата неисправна опција."
 
-#: builtins.c:1139
+#: builtins.c:1140
 msgid ""
 "Unset values and attributes of shell variables and functions.\n"
 "    \n"
@@ -4026,7 +4044,7 @@ msgstr ""
 "    Излазно стање:\n"
 "    Даје позитиван резултат осим ако није дата неисправна опција или ако је НАЗИВ само за читање."
 
-#: builtins.c:1161
+#: builtins.c:1162
 msgid ""
 "Set export attribute for shell variables.\n"
 "    \n"
@@ -4058,7 +4076,7 @@ msgstr ""
 "    Излазно стање:\n"
 "    Даје позитиван резултат осим ако је дата неисправна опција или је НАЗИВ неисправан."
 
-#: builtins.c:1180
+#: builtins.c:1181
 msgid ""
 "Mark shell variables as unchangeable.\n"
 "    \n"
@@ -4096,7 +4114,7 @@ msgstr ""
 "    Излазно стање:\n"
 "    Даје позитиван резултат осим ако није дата неисправна опција или ако је НАЗИВ неисправан."
 
-#: builtins.c:1202
+#: builtins.c:1203
 msgid ""
 "Shift positional parameters.\n"
 "    \n"
@@ -4114,7 +4132,7 @@ msgstr ""
 "    Излазно стање:\n"
 "    Резултати су успешни осим ако N није негативно иливеће од $#."
 
-#: builtins.c:1214 builtins.c:1229
+#: builtins.c:1215 builtins.c:1230
 msgid ""
 "Execute commands from a file in the current shell.\n"
 "    \n"
@@ -4138,7 +4156,7 @@ msgstr ""
 "    Даје стање последње извршене наредбе у ДАТОТЕЦИ; не успева\n"
 "    ако назив ДАТОТЕКЕ не може бити прочитан."
 
-#: builtins.c:1245
+#: builtins.c:1246
 msgid ""
 "Suspend shell execution.\n"
 "    \n"
@@ -4162,7 +4180,7 @@ msgstr ""
 "    Излазно стање:\n"
 "    Даје позитиван резултат осим ако није укључено управљање послом или ако не дође до грешке."
 
-#: builtins.c:1261
+#: builtins.c:1262
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -4313,7 +4331,7 @@ msgstr ""
 "    Даје позитиван резултат ако се ИЗРАЗ процени на тачно; неуспех ако се ИЗРАЗ процени\n"
 "    на нетачно или ако је дат неисправан аргумент."
 
-#: builtins.c:1343
+#: builtins.c:1344
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -4325,7 +4343,7 @@ msgstr ""
 "    Ово је синоним за уграђеност „test“, али последњи аргумент мора\n"
 "    бити дословна ], да поклопи отворену [."
 
-#: builtins.c:1352
+#: builtins.c:1353
 msgid ""
 "Display process times.\n"
 "    \n"
@@ -4343,7 +4361,7 @@ msgstr ""
 "    Излазно стање:\n"
 "    Увек успешно."
 
-#: builtins.c:1364
+#: builtins.c:1365
 msgid ""
 "Trap signals and other events.\n"
 "    \n"
@@ -4409,7 +4427,7 @@ msgstr ""
 "    Излазно стање:\n"
 "    Даје позитиван резултат осим за неисправну ОДРЕДБА_СИГНАЛА или за неисправну опцију."
 
-#: builtins.c:1400
+#: builtins.c:1401
 msgid ""
 "Display information about command type.\n"
 "    \n"
@@ -4463,7 +4481,7 @@ msgstr ""
 "    Излазно стање:\n"
 "    Даје позитиван резултат ако су пронађени сви НАЗИВИ; неуспех ако ниједан није пронађен."
 
-#: builtins.c:1431
+#: builtins.c:1432
 msgid ""
 "Modify shell resource limits.\n"
 "    \n"
@@ -4557,7 +4575,7 @@ msgstr ""
 "    Излазно стање:\n"
 "    Даје позитиван резултат осим ако се не достави неисправна опција или ако не дође до грешке."
 
-#: builtins.c:1482
+#: builtins.c:1483
 msgid ""
 "Display or set file mode mask.\n"
 "    \n"
@@ -4589,7 +4607,7 @@ msgstr ""
 "    Излазно стање:\n"
 "    Даје позитиван резултат осим ако је РЕЖИМ неисправан или ако је дата неисправна опција."
 
-#: builtins.c:1502
+#: builtins.c:1503
 msgid ""
 "Wait for job completion and return exit status.\n"
 "    \n"
@@ -4640,7 +4658,7 @@ msgstr ""
 "    дата неисправна опција, или ако је достављено „-n“ а шкољка нема „unwaited-for“\n"
 "    пород."
 
-#: builtins.c:1533
+#: builtins.c:1534
 msgid ""
 "Wait for process completion and return exit status.\n"
 "    \n"
@@ -4662,7 +4680,7 @@ msgstr ""
 "    Исписује стање последњег ПИБ-а; неуспех ако је ПИБ неисправан или ако је дата\n"
 "    неисправна опција."
 
-#: builtins.c:1548
+#: builtins.c:1549
 msgid ""
 "Execute commands for each member in a list.\n"
 "    \n"
@@ -4684,7 +4702,7 @@ msgstr ""
 "    Излазно стање:\n"
 "    Исписује стање последње извршене наредбе."
 
-#: builtins.c:1562
+#: builtins.c:1563
 msgid ""
 "Arithmetic for loop.\n"
 "    \n"
@@ -4714,7 +4732,7 @@ msgstr ""
 "    Излазно стање:\n"
 "    Исписује стање последње извршене наредбе."
 
-#: builtins.c:1580
+#: builtins.c:1581
 msgid ""
 "Select words from a list and execute commands.\n"
 "    \n"
@@ -4750,7 +4768,7 @@ msgstr ""
 "    Излазно стање:\n"
 "    Исписује стање последње извршене наредбе."
 
-#: builtins.c:1601
+#: builtins.c:1602
 msgid ""
 "Report time consumed by pipeline's execution.\n"
 "    \n"
@@ -4779,7 +4797,7 @@ msgstr ""
 "    Излазно стање:\n"
 "    Стање резултата јесте стање резултата СПОЈНОГРЕДА."
 
-#: builtins.c:1618
+#: builtins.c:1619
 msgid ""
 "Execute commands based on pattern matching.\n"
 "    \n"
@@ -4797,7 +4815,7 @@ msgstr ""
 "    Излазно стање:\n"
 "    Исписује стање последње извршене наредбе."
 
-#: builtins.c:1630
+#: builtins.c:1631
 msgid ""
 "Execute commands based on conditional.\n"
 "    \n"
@@ -4824,43 +4842,43 @@ msgstr ""
 "    Излазно стање:\n"
 "    Исписује стање последње извршене наредбе."
 
-#: builtins.c:1647
+#: builtins.c:1648
 msgid ""
 "Execute commands as long as a test succeeds.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `while' COMMANDS has an exit status of zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n"
+"    an exit status of zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
 "Извршава наредбе након што се проба успешно обави.\n"
 "    \n"
-"    Шири и извршава НАРЕДБЕ након што завршна наредба у „while“ НАРЕДБАМА\n"
+"    Шири и извршава НАРЕДБЕ-2 након што завршна наредба у НАРЕДБАМА\n"
 "    има излазно стање нуле.\n"
 "    \n"
 "    Излазно стање:\n"
 "    Исписује стање последње извршене наредбе."
 
-#: builtins.c:1659
+#: builtins.c:1660
 msgid ""
 "Execute commands as long as a test does not succeed.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `until' COMMANDS has an exit status which is not zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n"
+"    an exit status which is not zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
-"Извршава наредбе након што се проба успешно обави.\n"
+"Извршава наредбе све док проба не буде неуспела.\n"
 "    \n"
-"    Шири и извршава НАРЕДБЕ након што завршна наредба у „until“ НАРЕДБАМА\n"
+"    Шири и извршава НАРЕДБЕ-2 након што завршна наредба у НАРЕДБАМА\n"
 "    има излазно стање које није нула.\n"
 "    \n"
 "    Излазно стање:\n"
 "    Исписује стање последње извршене наредбе."
 
-#: builtins.c:1671
+#: builtins.c:1672
 msgid ""
 "Create a coprocess named NAME.\n"
 "    \n"
@@ -4882,7 +4900,7 @@ msgstr ""
 "    Излазно стање:\n"
 "    Наредба копроцеса даје излазно стање 0."
 
-#: builtins.c:1685
+#: builtins.c:1686
 msgid ""
 "Define shell function.\n"
 "    \n"
@@ -4904,7 +4922,7 @@ msgstr ""
 "    Излазно стање:\n"
 "    Даје позитиван резултат осим ако је НАЗИВ само за читање."
 
-#: builtins.c:1699
+#: builtins.c:1700
 msgid ""
 "Group commands as a unit.\n"
 "    \n"
@@ -4922,7 +4940,7 @@ msgstr ""
 "    Излазно стање:\n"
 "    Исписује стање последње извршене наредбе."
 
-#: builtins.c:1711
+#: builtins.c:1712
 msgid ""
 "Resume job in foreground.\n"
 "    \n"
@@ -4945,7 +4963,7 @@ msgstr ""
 "    Излазно стање:\n"
 "    Даје стање настављеног посла."
 
-#: builtins.c:1726
+#: builtins.c:1727
 msgid ""
 "Evaluate arithmetic expression.\n"
 "    \n"
@@ -4963,7 +4981,7 @@ msgstr ""
 "    Излазно стање:\n"
 "    Даје 1 ако се ИЗРАЗ процени на 0; у супротном даје 0."
 
-#: builtins.c:1738
+#: builtins.c:1739
 msgid ""
 "Execute conditional command.\n"
 "    \n"
@@ -5009,7 +5027,7 @@ msgstr ""
 "    Излазно стање:\n"
 "    0 или 1 у зависности од вредност ИЗРАЗА."
 
-#: builtins.c:1764
+#: builtins.c:1765
 msgid ""
 "Common shell variable names and usage.\n"
 "    \n"
@@ -5112,7 +5130,7 @@ msgstr ""
 "    ЗАНЕМАРИИСТОРИЈАТ   Списак шаблона раздвојен двотачком коришћених за одлучивање\n"
 "                        о наредбама које требају бити сачуване на списку историјата.\n"
 
-#: builtins.c:1821
+#: builtins.c:1822
 msgid ""
 "Add directories to stack.\n"
 "    \n"
@@ -5168,7 +5186,7 @@ msgstr ""
 "    Даје позитиван резултат осим ако није достављен неисправан аргумент или замена\n"
 "    директоријума не успе."
 
-#: builtins.c:1855
+#: builtins.c:1856
 msgid ""
 "Remove directories from stack.\n"
 "    \n"
@@ -5218,7 +5236,7 @@ msgstr ""
 "    Даје позитиван резултат осим ако није достављен неисправан аргумент или измена\n"
 "    директоријума не успе."
 
-#: builtins.c:1885
+#: builtins.c:1886
 msgid ""
 "Display directory stack.\n"
 "    \n"
@@ -5270,7 +5288,7 @@ msgstr ""
 "    Излазно стање:\n"
 "    Даје позитиван резултат осим ако се не достави неисправна опција или ако не дође до грешке."
 
-#: builtins.c:1916
+#: builtins.c:1917
 msgid ""
 "Set and unset shell options.\n"
 "    \n"
@@ -5306,7 +5324,7 @@ msgstr ""
 "    Даје позитиван резултат ако је НАЗИВ_ОПЦИЈЕ укључен; неуспех ако је дата\n"
 "    неисправна опција или ако је НАЗИВ_ОПЦИЈЕ искључен."
 
-#: builtins.c:1937
+#: builtins.c:1938
 msgid ""
 "Formats and prints ARGUMENTS under control of the FORMAT.\n"
 "    \n"
@@ -5325,6 +5343,8 @@ msgid ""
 "    \n"
 "      %b\texpand backslash escape sequences in the corresponding argument\n"
 "      %q\tquote the argument in a way that can be reused as shell input\n"
+"      %Q\tlike %q, but apply any precision to the unquoted argument before\n"
+"    \t\tquoting\n"
 "      %(fmt)T\toutput the date-time string resulting from using FMT as a format\n"
 "    \t        string for strftime(3)\n"
 "    \n"
@@ -5353,6 +5373,8 @@ msgstr ""
 "    \n"
 "      %b\tшири низове прекида контра косе црте у одговарајући аргумент\n"
 "      %q\tцитира аргумент на начин како би био коришћен као улаз шкољке\n"
+"      %Q\tкао %q, али примењује сваку тачност на нецитирани аргумент пре\n"
+"    \t\tцитирања\n"
 "      %(fmt)T   исписује ниску датум-време резултирајући коришћењем ФМТ-а као\n"
 "                ниске записа за „strftime(3)“\n"
 "    \n"
@@ -5364,7 +5386,7 @@ msgstr ""
 "    Даје позитиван резултат осим ако није дата неисправна опција или ако не\n"
 "    дође до грешке писања или доделе."
 
-#: builtins.c:1971
+#: builtins.c:1974
 msgid ""
 "Specify how arguments are to be completed by Readline.\n"
 "    \n"
@@ -5412,7 +5434,7 @@ msgstr ""
 "    Излазно стање:\n"
 "    Даје позитиван резултат осим ако се не достави неисправна опција или ако не дође до грешке."
 
-#: builtins.c:2001
+#: builtins.c:2004
 msgid ""
 "Display possible completions depending on the options.\n"
 "    \n"
@@ -5431,7 +5453,7 @@ msgstr ""
 "    Излазно стање:\n"
 "    Даје позитиван резултат осим ако се не достави неисправна опција или ако не дође до грешке."
 
-#: builtins.c:2016
+#: builtins.c:2019
 msgid ""
 "Modify or display completion options.\n"
 "    \n"
@@ -5484,7 +5506,7 @@ msgstr ""
 "    Даје позитиван резултат осим ако се не достави неисправна опција или НАЗИВ\n"
 "    нема одређену одредбу довршавања."
 
-#: builtins.c:2047
+#: builtins.c:2050
 msgid ""
 "Read lines from the standard input into an indexed array variable.\n"
 "    \n"
@@ -5549,7 +5571,7 @@ msgstr ""
 "    Даје позитиван резултат осим ако није дата неисправна опција или ако је НИЗ само\n"
 "    за читање или није индексирани низ."
 
-#: builtins.c:2083
+#: builtins.c:2086
 msgid ""
 "Read lines from a file into an array variable.\n"
 "    \n"
@@ -5559,6 +5581,9 @@ msgstr ""
 "    \n"
 "    Синоним за „mapfile“."
 
+#~ msgid "%s: invalid associative array key"
+#~ msgstr "%s: неисправан кључ придруживог низа"
+
 #~ msgid ""
 #~ "Returns the context of the current subroutine call.\n"
 #~ "    \n"
index 9f406df3f59fb9bd4d8ab732ac90a00649a3cdbb..804ca8fe0275155582e4efa4edda921183f88f67 100644 (file)
Binary files a/po/sv.gmo and b/po/sv.gmo differ
index f76bd168b3069872894d74d56fcb478025629d13..7a12ea0bea42af5ce9947f674b78d368748f896a 100644 (file)
--- a/po/sv.po
+++ b/po/sv.po
@@ -1,16 +1,16 @@
 # Swedish translation of bash
-# Copyright © 2008, 2009, 2010, 2011, 2013, 2014, 2015, 2016, 2018, 2019, 2020 Free Software Foundation, Inc.
+# Copyright © 2008, 2009, 2010, 2011, 2013, 2014, 2015, 2016, 2018, 2019, 2020, 2022 Free Software Foundation, Inc.
 # This file is distributed under the same license as the bash package.
 #
-# Göran Uddeborg <goeran@uddeborg.se>, 2008, 2009, 2010, 2011, 2013, 2014, 2015, 2016, 2018, 2019, 2020.
+# Göran Uddeborg <goeran@uddeborg.se>, 2008, 2009, 2010, 2011, 2013, 2014, 2015, 2016, 2018, 2019, 2020, 2022.
 #
-# $Revision: 1.30 $
+# $Revision: 1.31 $
 msgid ""
 msgstr ""
-"Project-Id-Version: bash 5.1\n"
+"Project-Id-Version: bash 5.2-rc1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-11-28 12:51-0500\n"
-"PO-Revision-Date: 2020-12-09 21:35+0100\n"
+"POT-Creation-Date: 2022-01-11 14:50-0500\n"
+"PO-Revision-Date: 2022-06-17 22:31+0200\n"
 "Last-Translator: Göran Uddeborg <goeran@uddeborg.se>\n"
 "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
 "Language: sv\n"
@@ -24,57 +24,52 @@ msgstr ""
 msgid "bad array subscript"
 msgstr "felaktigt vektorindex"
 
-#: arrayfunc.c:421 builtins/declare.def:638 variables.c:2274 variables.c:2300
-#: variables.c:3133
+#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268
+#: variables.c:3101
 #, c-format
 msgid "%s: removing nameref attribute"
 msgstr "%s: tar bort attributet namnreferens"
 
-#: arrayfunc.c:446 builtins/declare.def:851
+#: arrayfunc.c:496 builtins/declare.def:868
 #, c-format
 msgid "%s: cannot convert indexed to associative array"
 msgstr "%s: det går inte att konvertera en indexerad vektor till associativ"
 
-#: arrayfunc.c:700
-#, c-format
-msgid "%s: invalid associative array key"
-msgstr "%s: ogiltig nyckel till associativ vektor"
-
-#: arrayfunc.c:702
+#: arrayfunc.c:777
 #, c-format
 msgid "%s: cannot assign to non-numeric index"
 msgstr "%s: det går inte att tilldela till ickenumeriska index"
 
-#: arrayfunc.c:747
+#: arrayfunc.c:822
 #, c-format
 msgid "%s: %s: must use subscript when assigning associative array"
 msgstr "%s: %s: måste använda index vid tilldelning av associativ vektor"
 
-#: bashhist.c:452
+#: bashhist.c:455
 #, c-format
 msgid "%s: cannot create: %s"
 msgstr "%s: det går inte att skapa: %s"
 
-#: bashline.c:4310
+#: bashline.c:4479
 msgid "bash_execute_unix_command: cannot find keymap for command"
 msgstr "bash_execute_unix_command: det går inte att hitta en tangentbindning för kommandot"
 
-#: bashline.c:4459
+#: bashline.c:4637
 #, c-format
 msgid "%s: first non-whitespace character is not `\"'"
 msgstr "%s: första ickeblanka tecknet är inte '\"'"
 
-#: bashline.c:4488
+#: bashline.c:4666
 #, c-format
 msgid "no closing `%c' in %s"
 msgstr "ingen avslutande ”%c” i %s"
 
-#: bashline.c:4519
+#: bashline.c:4697
 #, c-format
 msgid "%s: missing colon separator"
 msgstr "%s: kolonseparator saknas"
 
-#: bashline.c:4555
+#: bashline.c:4733
 #, c-format
 msgid "`%s': cannot unbind in command keymap"
 msgstr "”%s”: det går inte att avbinda i kommandotangentbindning"
@@ -82,7 +77,7 @@ msgstr "”%s”: det går inte att avbinda i kommandotangentbindning"
 #: braces.c:327
 #, c-format
 msgid "brace expansion: cannot allocate memory for %s"
-msgstr "klammerexpansion: kan inte allokera minne för %s"
+msgstr "klammerexpansion: det går inte att allokera minne för %s"
 
 #: braces.c:406
 #, c-format
@@ -94,7 +89,7 @@ msgstr "klammerexpansion: misslyckades att allokera minne för %u element"
 msgid "brace expansion: failed to allocate memory for `%s'"
 msgstr "klammerexpansion: misslyckades att allokera minne för ”%s”"
 
-#: builtins/alias.def:131 variables.c:1844
+#: builtins/alias.def:131 variables.c:1817
 #, c-format
 msgid "`%s': invalid alias name"
 msgstr "”%s”: ogiltigt aliasnamn"
@@ -165,7 +160,7 @@ msgstr ""
 msgid "HOME not set"
 msgstr "HOME är inte satt"
 
-#: builtins/cd.def:335 builtins/common.c:161 test.c:901
+#: builtins/cd.def:335 builtins/common.c:161 test.c:916
 msgid "too many arguments"
 msgstr "för många argument"
 
@@ -192,7 +187,7 @@ msgstr "varning: "
 msgid "%s: usage: "
 msgstr "%s: användning: "
 
-#: builtins/common.c:193 shell.c:516 shell.c:844
+#: builtins/common.c:193 shell.c:524 shell.c:866
 #, c-format
 msgid "%s: option requires an argument"
 msgstr "%s: flaggan kräver ett argument"
@@ -207,7 +202,7 @@ msgstr "%s: numeriskt argument krävs"
 msgid "%s: not found"
 msgstr "%s: finns inte"
 
-#: builtins/common.c:216 shell.c:857
+#: builtins/common.c:216 shell.c:879
 #, c-format
 msgid "%s: invalid option"
 msgstr "%s: ogiltig flagga"
@@ -217,7 +212,7 @@ msgstr "%s: ogiltig flagga"
 msgid "%s: invalid option name"
 msgstr "%s: ogiltigt flaggnamn"
 
-#: builtins/common.c:230 execute_cmd.c:2373 general.c:368 general.c:373
+#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373
 #, c-format
 msgid "`%s': not a valid identifier"
 msgstr "”%s”: inte en giltig identifierare"
@@ -230,7 +225,7 @@ msgstr "ogiltigt oktalt tal"
 msgid "invalid hex number"
 msgstr "ogiltigt hexadecimalt tal"
 
-#: builtins/common.c:244 expr.c:1569
+#: builtins/common.c:244 expr.c:1574
 msgid "invalid number"
 msgstr "ogiltigt tal"
 
@@ -244,88 +239,93 @@ msgstr "%s: ogiltig signalspecifikation"
 msgid "`%s': not a pid or valid job spec"
 msgstr "”%s”: inte en pid eller giltig jobbspecifikation"
 
-#: builtins/common.c:266 error.c:510
+#: builtins/common.c:266 error.c:536
 #, c-format
 msgid "%s: readonly variable"
 msgstr "%s: endast läsbar variabel"
 
-#: builtins/common.c:274
+#: builtins/common.c:273
+#, c-format
+msgid "%s: cannot assign"
+msgstr "%s: det går inte att tilldela"
+
+#: builtins/common.c:281
 #, c-format
 msgid "%s: %s out of range"
 msgstr "%s: %s utanför giltigt intervall"
 
-#: builtins/common.c:274 builtins/common.c:276
+#: builtins/common.c:281 builtins/common.c:283
 msgid "argument"
 msgstr "argument"
 
-#: builtins/common.c:276
+#: builtins/common.c:283
 #, c-format
 msgid "%s out of range"
 msgstr "%s utanför giltigt intervall"
 
-#: builtins/common.c:284
+#: builtins/common.c:291
 #, c-format
 msgid "%s: no such job"
 msgstr "%s: inget sådant jobb"
 
-#: builtins/common.c:292
+#: builtins/common.c:299
 #, c-format
 msgid "%s: no job control"
 msgstr "%s: ingen jobbstyrning"
 
-#: builtins/common.c:294
+#: builtins/common.c:301
 msgid "no job control"
 msgstr "ingen jobbstyrning"
 
-#: builtins/common.c:304
+#: builtins/common.c:311
 #, c-format
 msgid "%s: restricted"
 msgstr "%s: begränsat"
 
-#: builtins/common.c:306
+#: builtins/common.c:313
 msgid "restricted"
 msgstr "begränsat"
 
-#: builtins/common.c:314
+#: builtins/common.c:321
 #, c-format
 msgid "%s: not a shell builtin"
 msgstr "%s: inte inbyggt i skalet"
 
-#: builtins/common.c:323
+#: builtins/common.c:330
 #, c-format
 msgid "write error: %s"
 msgstr "skrivfel: %s"
 
-#: builtins/common.c:331
+#: builtins/common.c:338
 #, c-format
 msgid "error setting terminal attributes: %s"
 msgstr "fel när terminalattribut ställdes in: %s"
 
-#: builtins/common.c:333
+#: builtins/common.c:340
 #, c-format
 msgid "error getting terminal attributes: %s"
 msgstr "fel när terminalattribut hämtades: %s"
 
-#: builtins/common.c:635
+#: builtins/common.c:642
 #, c-format
 msgid "%s: error retrieving current directory: %s: %s\n"
 msgstr "%s: fel när aktuell katalog hämtades: %s: %s\n"
 
-#: builtins/common.c:701 builtins/common.c:703
+#: builtins/common.c:708 builtins/common.c:710
 #, c-format
 msgid "%s: ambiguous job spec"
 msgstr "%s: tvetydig jobbspecifikation"
 
-#: builtins/common.c:964
+#: builtins/common.c:971
 msgid "help not available in this version"
 msgstr "hjälp är inte tillgängligt i denna version"
 
-#: builtins/common.c:1008 builtins/set.def:953 variables.c:3839
+#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825
 #, c-format
 msgid "%s: cannot unset: readonly %s"
 msgstr "%s: det går inte att ta bort tilldelning: endast läsbar %s"
 
-#: builtins/common.c:1013 builtins/set.def:932 variables.c:3844
+#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830
 #, c-format
 msgid "%s: cannot unset"
 msgstr "%s: det går inte att ta bort tilldelning"
@@ -335,108 +335,108 @@ msgstr "%s: det går inte att ta bort tilldelning"
 msgid "%s: invalid action name"
 msgstr "%s: ogiltigt åtgärdsnamn"
 
-#: builtins/complete.def:486 builtins/complete.def:634
-#: builtins/complete.def:865
+#: builtins/complete.def:486 builtins/complete.def:642
+#: builtins/complete.def:873
 #, c-format
 msgid "%s: no completion specification"
 msgstr "%s: ingen kompletteringsspecifikation"
 
-#: builtins/complete.def:688
+#: builtins/complete.def:696
 msgid "warning: -F option may not work as you expect"
 msgstr "varning: flaggan -F fungerar kanske inte som du väntar dig"
 
-#: builtins/complete.def:690
+#: builtins/complete.def:698
 msgid "warning: -C option may not work as you expect"
 msgstr "varning: flaggan -C fungerar kanske inte som du väntar dig"
 
-#: builtins/complete.def:838
+#: builtins/complete.def:846
 msgid "not currently executing completion function"
 msgstr "kör inte en kompletteringsfunktion"
 
-#: builtins/declare.def:134
+#: builtins/declare.def:137
 msgid "can only be used in a function"
 msgstr "kan endast användas i en funktion"
 
-#: builtins/declare.def:363 builtins/declare.def:756
+#: builtins/declare.def:437
+msgid "cannot use `-f' to make functions"
+msgstr "det går inte att använda ”-f” för att göra funktioner"
+
+#: builtins/declare.def:464 execute_cmd.c:6132
+#, c-format
+msgid "%s: readonly function"
+msgstr "%s: endast läsbar funktion"
+
+#: builtins/declare.def:521 builtins/declare.def:804
 #, c-format
 msgid "%s: reference variable cannot be an array"
 msgstr "%s: en referensvariabel kan inte vara en vektor"
 
-#: builtins/declare.def:374 variables.c:3385
+#: builtins/declare.def:532 variables.c:3359
 #, c-format
 msgid "%s: nameref variable self references not allowed"
 msgstr "%s: att en namnreferensvariabel självrefererar är inte tillåtet"
 
-#: builtins/declare.def:379 variables.c:2104 variables.c:3304 variables.c:3312
-#: variables.c:3382
+#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286
+#: variables.c:3356
 #, c-format
 msgid "%s: circular name reference"
 msgstr "%s: cirkulär namnreferens"
 
-#: builtins/declare.def:384 builtins/declare.def:762 builtins/declare.def:773
+#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820
 #, c-format
 msgid "`%s': invalid variable name for name reference"
 msgstr "”%s”: ogiltigt variabelnamn för referens"
 
-#: builtins/declare.def:514
-msgid "cannot use `-f' to make functions"
-msgstr "det går inte att använda ”-f” för att göra funktioner"
-
-#: builtins/declare.def:526 execute_cmd.c:5986
-#, c-format
-msgid "%s: readonly function"
-msgstr "%s: endast läsbar funktion"
-
-#: builtins/declare.def:824
-#, c-format
-msgid "%s: quoted compound array assignment deprecated"
-msgstr "%s: citerad sammansatt tilldelning av vektorer undanbedes"
-
-#: builtins/declare.def:838
+#: builtins/declare.def:856
 #, c-format
 msgid "%s: cannot destroy array variables in this way"
 msgstr "%s: det går inte att förstöra vektorvariabler på detta sätt"
 
-#: builtins/declare.def:845 builtins/read.def:815
+#: builtins/declare.def:862 builtins/read.def:887
 #, c-format
 msgid "%s: cannot convert associative to indexed array"
 msgstr "%s: det går inte att konvertera en associativ vektor till indexerad"
 
-#: builtins/enable.def:143 builtins/enable.def:151
+#: builtins/declare.def:891
+#, c-format
+msgid "%s: quoted compound array assignment deprecated"
+msgstr "%s: citerad sammansatt tilldelning av vektorer undanbedes"
+
+#: builtins/enable.def:145 builtins/enable.def:153
 msgid "dynamic loading not available"
 msgstr "dynamisk laddning är inte tillgängligt"
 
-#: builtins/enable.def:343
+#: builtins/enable.def:376
 #, c-format
 msgid "cannot open shared object %s: %s"
 msgstr "det går inte att öppna delat objekt %s: %s"
 
-#: builtins/enable.def:371
+#: builtins/enable.def:405
 #, c-format
 msgid "cannot find %s in shared object %s: %s"
-msgstr "kan inte hitta %s i det delade objektet %s: %s"
+msgstr "det går inte att hitta %s i det delade objektet %s: %s"
 
-#: builtins/enable.def:388
+#: builtins/enable.def:422
 #, c-format
 msgid "%s: dynamic builtin already loaded"
 msgstr "%s: den dynamiska inbyggda är redan inläst"
 
-#: builtins/enable.def:392
+#: builtins/enable.def:426
 #, c-format
 msgid "load function for %s returns failure (%d): not loaded"
 msgstr "inläsningsfunktionen för %s returnerar misslyckande (%d): inte inläst"
 
-#: builtins/enable.def:517
+#: builtins/enable.def:551
 #, c-format
 msgid "%s: not dynamically loaded"
 msgstr "%s: inte dynamiskt laddad"
 
-#: builtins/enable.def:543
+#: builtins/enable.def:577
 #, c-format
 msgid "%s: cannot delete: %s"
 msgstr "%s: kan inte ta bort: %s"
 
-#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5818
+#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959
 #, c-format
 msgid "%s: is a directory"
 msgstr "%s: är en katalog"
@@ -451,7 +451,7 @@ msgstr "%s: inte en normal fil"
 msgid "%s: file is too large"
 msgstr "%s: filen är för stor"
 
-#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1647
+#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673
 #, c-format
 msgid "%s: cannot execute binary file"
 msgstr "%s: det går inte att köra binär fil"
@@ -546,12 +546,12 @@ msgstr ""
 msgid "no help topics match `%s'.  Try `help help' or `man -k %s' or `info %s'."
 msgstr "inget hjälpämne matchar ”%s”.  Prova ”help help” eller ”man -k %s” eller ”info %s”."
 
-#: builtins/help.def:224
+#: builtins/help.def:223
 #, c-format
 msgid "%s: cannot open: %s"
 msgstr "%s: det går inte att öppna: %s"
 
-#: builtins/help.def:524
+#: builtins/help.def:523
 #, c-format
 msgid ""
 "These shell commands are defined internally.  Type `help' to see this list.\n"
@@ -571,21 +571,21 @@ msgstr ""
 "En stjärna (*) bredvid ett namn betyder att det kommandot är avstängt.\n"
 "\n"
 
-#: builtins/history.def:155
+#: builtins/history.def:159
 msgid "cannot use more than one of -anrw"
 msgstr "det går inte att använda mer än en av -anrw"
 
-#: builtins/history.def:188 builtins/history.def:198 builtins/history.def:213
-#: builtins/history.def:230 builtins/history.def:242 builtins/history.def:249
+#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215
+#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247
 msgid "history position"
 msgstr "historieposition"
 
-#: builtins/history.def:340
+#: builtins/history.def:338
 #, c-format
 msgid "%s: invalid timestamp"
 msgstr "%s: ogiltig tidsstämpel"
 
-#: builtins/history.def:451
+#: builtins/history.def:449
 #, c-format
 msgid "%s: history expansion failed"
 msgstr "%s: historieexpansionen misslyckades"
@@ -608,78 +608,78 @@ msgstr "%s: argument måste vara processer eller jobb-id:n"
 msgid "Unknown error"
 msgstr "Okänt fel"
 
-#: builtins/let.def:97 builtins/let.def:122 expr.c:639 expr.c:657
+#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658
 msgid "expression expected"
 msgstr "uttryck förväntades"
 
-#: builtins/mapfile.def:178
+#: builtins/mapfile.def:180
 #, c-format
 msgid "%s: not an indexed array"
 msgstr "%s: inte en indexerad vektor"
 
-#: builtins/mapfile.def:271 builtins/read.def:308
+#: builtins/mapfile.def:276 builtins/read.def:336
 #, c-format
 msgid "%s: invalid file descriptor specification"
 msgstr "%s: ogiltig filbeskrivarspecifikation"
 
-#: builtins/mapfile.def:279 builtins/read.def:315
+#: builtins/mapfile.def:284 builtins/read.def:343
 #, c-format
 msgid "%d: invalid file descriptor: %s"
 msgstr "%d: ogiltig filbeskrivare: %s"
 
-#: builtins/mapfile.def:288 builtins/mapfile.def:326
+#: builtins/mapfile.def:293 builtins/mapfile.def:331
 #, c-format
 msgid "%s: invalid line count"
 msgstr "%s: ogiltigt radantal"
 
-#: builtins/mapfile.def:299
+#: builtins/mapfile.def:304
 #, c-format
 msgid "%s: invalid array origin"
 msgstr "%s: ogiltig vektorstart"
 
-#: builtins/mapfile.def:316
+#: builtins/mapfile.def:321
 #, c-format
 msgid "%s: invalid callback quantum"
 msgstr "%s: ogiltigt kvantum för återanrop"
 
-#: builtins/mapfile.def:349
+#: builtins/mapfile.def:354
 msgid "empty array variable name"
 msgstr "tomt vektorvariabelnamn"
 
-#: builtins/mapfile.def:370
+#: builtins/mapfile.def:375
 msgid "array variable support required"
 msgstr "stöd för vektorvariabler krävs"
 
-#: builtins/printf.def:419
+#: builtins/printf.def:430
 #, c-format
 msgid "`%s': missing format character"
 msgstr "”%s”: formateringstecken saknas"
 
-#: builtins/printf.def:474
+#: builtins/printf.def:485
 #, c-format
 msgid "`%c': invalid time format specification"
 msgstr "”%c”: ogiltig specifikation av tidsformat"
 
-#: builtins/printf.def:676
+#: builtins/printf.def:708
 #, c-format
 msgid "`%c': invalid format character"
 msgstr "”%c”: ogiltigt formateringstecken"
 
-#: builtins/printf.def:702
+#: builtins/printf.def:734
 #, c-format
 msgid "warning: %s: %s"
 msgstr "varning: %s: %s"
 
-#: builtins/printf.def:788
+#: builtins/printf.def:822
 #, c-format
 msgid "format parsing problem: %s"
 msgstr "formattolkningsproblem: %s"
 
-#: builtins/printf.def:885
+#: builtins/printf.def:919
 msgid "missing hex digit for \\x"
 msgstr "hexadecimal siffra saknas för \\x"
 
-#: builtins/printf.def:900
+#: builtins/printf.def:934
 #, c-format
 msgid "missing unicode digit for \\%c"
 msgstr "unicode-siffra saknas för \\%c"
@@ -829,12 +829,12 @@ msgstr ""
 "    \n"
 "    Den inbyggda ”dirs” visar katalogstacken."
 
-#: builtins/read.def:280
+#: builtins/read.def:308
 #, c-format
 msgid "%s: invalid timeout specification"
 msgstr "%s: ogiltig tidsgränsspecifikation"
 
-#: builtins/read.def:755
+#: builtins/read.def:827
 #, c-format
 msgid "read error: %d: %s"
 msgstr "läsfel: %d: %s"
@@ -847,7 +847,7 @@ msgstr "det går bara att göra ”return” från en funktion eller källinläs
 msgid "cannot simultaneously unset a function and a variable"
 msgstr "det går inte att samtidigt ta bort en funktion och en variabel"
 
-#: builtins/set.def:966
+#: builtins/set.def:969
 #, c-format
 msgid "%s: not an array variable"
 msgstr "%s: inte en vektorvariabel"
@@ -866,11 +866,11 @@ msgstr "%s: det går inte att exportera"
 msgid "shift count"
 msgstr "skiftantal"
 
-#: builtins/shopt.def:310
+#: builtins/shopt.def:323
 msgid "cannot set and unset shell options simultaneously"
 msgstr "det går inte att sätta och ta bort skalflaggor samtidigt"
 
-#: builtins/shopt.def:428
+#: builtins/shopt.def:444
 #, c-format
 msgid "%s: invalid shell option name"
 msgstr "%s: ogiltigt skalflaggsnamn"
@@ -937,16 +937,16 @@ msgstr "%s: ogiltigt gränsargument"
 msgid "`%c': bad command"
 msgstr "”%c”: felaktigt kommando"
 
-#: builtins/ulimit.def:455
+#: builtins/ulimit.def:464
 #, c-format
 msgid "%s: cannot get limit: %s"
 msgstr "%s: kan inte avgöra gränsen: %s"
 
-#: builtins/ulimit.def:481
+#: builtins/ulimit.def:490
 msgid "limit"
 msgstr "gräns"
 
-#: builtins/ulimit.def:493 builtins/ulimit.def:793
+#: builtins/ulimit.def:502 builtins/ulimit.def:802
 #, c-format
 msgid "%s: cannot modify limit: %s"
 msgstr "%s: kan inte ändra gränsen: %s"
@@ -965,7 +965,7 @@ msgstr "”%c”: ogiltig operator för symboliskt läge"
 msgid "`%c': invalid symbolic mode character"
 msgstr "”%c”: ogiltigt tecken för symboliskt läge"
 
-#: error.c:89 error.c:347 error.c:349 error.c:351
+#: error.c:89 error.c:373 error.c:375 error.c:377
 msgid " line "
 msgstr " rad "
 
@@ -985,96 +985,106 @@ msgstr "Avbryter..."
 msgid "INFORM: "
 msgstr "INFORMATION: "
 
-#: error.c:462
+#: error.c:310
+#, c-format
+msgid "DEBUG warning: "
+msgstr "FELSÖKNINGS-varning: "
+
+#: error.c:488
 msgid "unknown command error"
 msgstr "okänt kommandofel"
 
-#: error.c:463
+#: error.c:489
 msgid "bad command type"
 msgstr "felaktig kommandotyp"
 
-#: error.c:464
+#: error.c:490
 msgid "bad connector"
 msgstr "felaktig anslutning"
 
-#: error.c:465
+#: error.c:491
 msgid "bad jump"
 msgstr "felaktigt hopp"
 
-#: error.c:503
+#: error.c:529
 #, c-format
 msgid "%s: unbound variable"
 msgstr "%s: obunden variabel"
 
-#: eval.c:242
+#: eval.c:243
 msgid "\atimed out waiting for input: auto-logout\n"
 msgstr "\atiden gick ut i väntan på indata: automatisk utloggning\n"
 
-#: execute_cmd.c:537
+#: execute_cmd.c:555
 #, c-format
 msgid "cannot redirect standard input from /dev/null: %s"
 msgstr "det går inte att omdirigera standard in från /dev/null: %s"
 
-#: execute_cmd.c:1297
+#: execute_cmd.c:1317
 #, c-format
 msgid "TIMEFORMAT: `%c': invalid format character"
 msgstr "TIMEFORMAT: ”%c”: ogiltigt formateringstecken"
 
-#: execute_cmd.c:2362
+#: execute_cmd.c:2391
 #, c-format
 msgid "execute_coproc: coproc [%d:%s] still exists"
 msgstr "execute_coproc: coproc [%d:%s] finns fortfarande"
 
-#: execute_cmd.c:2486
+#: execute_cmd.c:2524
 msgid "pipe error"
 msgstr "rörfel"
 
-#: execute_cmd.c:4793
+#: execute_cmd.c:4923
 #, c-format
 msgid "eval: maximum eval nesting level exceeded (%d)"
 msgstr "eval: maximal nästning av eval överskriden (%d)"
 
-#: execute_cmd.c:4805
+#: execute_cmd.c:4935
 #, c-format
 msgid "%s: maximum source nesting level exceeded (%d)"
 msgstr "%s: maximal nästning av source överskriden (%d)"
 
-#: execute_cmd.c:4913
+#: execute_cmd.c:5043
 #, c-format
 msgid "%s: maximum function nesting level exceeded (%d)"
 msgstr "%s: maximal nästning av funktioner överskriden (%d)"
 
-#: execute_cmd.c:5467
+#: execute_cmd.c:5598
 #, c-format
 msgid "%s: restricted: cannot specify `/' in command names"
 msgstr "%s: begränsat: det går inte att ange ”/” i kommandonamn"
 
-#: execute_cmd.c:5574
+#: execute_cmd.c:5715
 #, c-format
 msgid "%s: command not found"
 msgstr "%s: kommandot finns inte"
 
-#: execute_cmd.c:5816
+#: execute_cmd.c:5957
 #, c-format
 msgid "%s: %s"
 msgstr "%s: %s"
 
-#: execute_cmd.c:5854
+#: execute_cmd.c:5975
+#, c-format
+msgid "%s: cannot execute: required file not found"
+msgstr "%s: det går inte att köra: en nödvändig fil finns inte"
+
+#: execute_cmd.c:6000
 #, c-format
 msgid "%s: %s: bad interpreter"
 msgstr "%s: %s: felaktig tolk"
 
-#: execute_cmd.c:5891
+#: execute_cmd.c:6037
 #, c-format
 msgid "%s: cannot execute binary file: %s"
 msgstr "%s: det går inte att köra binär fil: %s"
 
-#: execute_cmd.c:5977
+#: execute_cmd.c:6123
 #, c-format
 msgid "`%s': is a special builtin"
 msgstr "”%s”: är en speciell inbyggd"
 
-#: execute_cmd.c:6029
+#: execute_cmd.c:6175
 #, c-format
 msgid "cannot duplicate fd %d to fd %d"
 msgstr "det går inte att duplicera fb %d till fb %d"
@@ -1087,68 +1097,68 @@ msgstr "rekursionsnivå i uttryck överskriden"
 msgid "recursion stack underflow"
 msgstr "underspill i rekursionsstacken"
 
-#: expr.c:477
+#: expr.c:478
 msgid "syntax error in expression"
 msgstr "syntaxfel i uttrycket"
 
-#: expr.c:521
+#: expr.c:522
 msgid "attempted assignment to non-variable"
 msgstr "försök att tilldela till en icke-variabel"
 
-#: expr.c:530
+#: expr.c:531
 msgid "syntax error in variable assignment"
 msgstr "syntaxfel i variabeltilldelning"
 
-#: expr.c:544 expr.c:911
+#: expr.c:545 expr.c:912
 msgid "division by 0"
 msgstr "division med 0"
 
-#: expr.c:592
+#: expr.c:593
 msgid "bug: bad expassign token"
 msgstr "fel: felaktig expassign-symbol"
 
-#: expr.c:646
+#: expr.c:647
 msgid "`:' expected for conditional expression"
 msgstr "”:” förväntades i villkorligt uttryck"
 
-#: expr.c:972
+#: expr.c:973
 msgid "exponent less than 0"
 msgstr "exponenten är mindre än 0"
 
-#: expr.c:1029
+#: expr.c:1030
 msgid "identifier expected after pre-increment or pre-decrement"
 msgstr "en identifierare förväntades efter pre-ökning eller pre-minskning"
 
-#: expr.c:1056
+#: expr.c:1057
 msgid "missing `)'"
 msgstr "”)” saknas"
 
-#: expr.c:1107 expr.c:1487
+#: expr.c:1108 expr.c:1492
 msgid "syntax error: operand expected"
 msgstr "syntaxfel: en operand förväntades"
 
-#: expr.c:1489
+#: expr.c:1494
 msgid "syntax error: invalid arithmetic operator"
 msgstr "syntaxfel: ogiltig aritmetisk operator"
 
-#: expr.c:1513
+#: expr.c:1518
 #, c-format
 msgid "%s%s%s: %s (error token is \"%s\")"
 msgstr "%s%s%s: %s (felsymbol är ”%s”)"
 
-#: expr.c:1573
+#: expr.c:1578
 msgid "invalid arithmetic base"
 msgstr "ogiltig aritmetisk bas"
 
-#: expr.c:1582
+#: expr.c:1587
 msgid "invalid integer constant"
 msgstr "felaktig heltalskonstant"
 
-#: expr.c:1598
+#: expr.c:1603
 msgid "value too great for base"
 msgstr "värdet är för stort för basen"
 
-#: expr.c:1647
+#: expr.c:1652
 #, c-format
 msgid "%s: expression error\n"
 msgstr "%s: uttrycksfel\n"
@@ -1157,7 +1167,7 @@ msgstr "%s: uttrycksfel\n"
 msgid "getcwd: cannot access parent directories"
 msgstr "getcwd: det går inte att komma åt föräldrakatalogen"
 
-#: input.c:99 subst.c:6069
+#: input.c:99 subst.c:6208
 #, c-format
 msgid "cannot reset nodelay mode for fd %d"
 msgstr "det går inte att återställa fördröjningsfritt läge för fb %d"
@@ -1176,167 +1186,167 @@ msgstr "save_bash_input: buffert finns redan för ny fb %d"
 msgid "start_pipeline: pgrp pipe"
 msgstr "start_pipeline: pgrp rör"
 
-#: jobs.c:906
+#: jobs.c:907
 #, c-format
 msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
 
-#: jobs.c:959
+#: jobs.c:960
 #, c-format
 msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
 
-#: jobs.c:1283
+#: jobs.c:1279
 #, c-format
 msgid "forked pid %d appears in running job %d"
 msgstr "avgrenad pid %d finns i körande jobb %d"
 
-#: jobs.c:1402
+#: jobs.c:1397
 #, c-format
 msgid "deleting stopped job %d with process group %ld"
 msgstr "tar bort stoppat jobb %d med processgrupp %ld"
 
-#: jobs.c:1511
+#: jobs.c:1502
 #, c-format
 msgid "add_process: pid %5ld (%s) marked as still alive"
 msgstr "add_process: pid %5ld (%s) markerad som fortfarande vid liv"
 
-#: jobs.c:1850
+#: jobs.c:1839
 #, c-format
 msgid "describe_pid: %ld: no such pid"
 msgstr "describe_pid: %ld: ingen sådan pid"
 
-#: jobs.c:1865
+#: jobs.c:1854
 #, c-format
 msgid "Signal %d"
 msgstr "Signal %d"
 
-#: jobs.c:1879 jobs.c:1905
+#: jobs.c:1868 jobs.c:1894
 msgid "Done"
 msgstr "Klart"
 
-#: jobs.c:1884 siglist.c:122
+#: jobs.c:1873 siglist.c:123
 msgid "Stopped"
 msgstr "Stoppad"
 
-#: jobs.c:1888
+#: jobs.c:1877
 #, c-format
 msgid "Stopped(%s)"
 msgstr "Stoppad(%s)"
 
-#: jobs.c:1892
+#: jobs.c:1881
 msgid "Running"
 msgstr "Kör"
 
-#: jobs.c:1909
+#: jobs.c:1898
 #, c-format
 msgid "Done(%d)"
 msgstr "Klart(%d)"
 
-#: jobs.c:1911
+#: jobs.c:1900
 #, c-format
 msgid "Exit %d"
 msgstr "Avslut %d"
 
-#: jobs.c:1914
+#: jobs.c:1903
 msgid "Unknown status"
 msgstr "Okänd status"
 
-#: jobs.c:2001
+#: jobs.c:1990
 #, c-format
 msgid "(core dumped) "
 msgstr "(minnesutskrift skapad) "
 
-#: jobs.c:2020
+#: jobs.c:2009
 #, c-format
 msgid "  (wd: %s)"
 msgstr "  (ak: %s)"
 
-#: jobs.c:2259
+#: jobs.c:2250
 #, c-format
 msgid "child setpgid (%ld to %ld)"
 msgstr "barns setpgid (%ld till %ld)"
 
-#: jobs.c:2617 nojobs.c:664
+#: jobs.c:2608 nojobs.c:666
 #, c-format
 msgid "wait: pid %ld is not a child of this shell"
 msgstr "wait: pid %ld är inte ett barn till detta skal"
 
-#: jobs.c:2893
+#: jobs.c:2884
 #, c-format
 msgid "wait_for: No record of process %ld"
 msgstr "wait_for: Ingen uppgift om process %ld"
 
-#: jobs.c:3236
+#: jobs.c:3223
 #, c-format
 msgid "wait_for_job: job %d is stopped"
 msgstr "wait_for_job: jobb %d är stoppat"
 
-#: jobs.c:3564
+#: jobs.c:3551
 #, c-format
 msgid "%s: no current jobs"
 msgstr "%s: inga aktuella jobb"
 
-#: jobs.c:3571
+#: jobs.c:3558
 #, c-format
 msgid "%s: job has terminated"
 msgstr "%s: jobbet har avslutat"
 
-#: jobs.c:3580
+#: jobs.c:3567
 #, c-format
 msgid "%s: job %d already in background"
 msgstr "%s: jobb %d är redan i bakgrunden"
 
-#: jobs.c:3806
+#: jobs.c:3793
 msgid "waitchld: turning on WNOHANG to avoid indefinite block"
 msgstr "waitchld: slår på WNOHANG för att undvika oändlig blockering"
 
-#: jobs.c:4320
+#: jobs.c:4307
 #, c-format
 msgid "%s: line %d: "
 msgstr "%s: rad %d: "
 
-#: jobs.c:4334 nojobs.c:919
+#: jobs.c:4321 nojobs.c:921
 #, c-format
 msgid " (core dumped)"
 msgstr " (minnesutskrift skapad)"
 
-#: jobs.c:4346 jobs.c:4359
+#: jobs.c:4333 jobs.c:4346
 #, c-format
 msgid "(wd now: %s)\n"
 msgstr "(ak nu: %s)\n"
 
-#: jobs.c:4391
+#: jobs.c:4378
 msgid "initialize_job_control: getpgrp failed"
 msgstr "initialize_job_control: getpgrp misslyckades"
 
-#: jobs.c:4447
+#: jobs.c:4434
 msgid "initialize_job_control: no job control in background"
 msgstr "initialize_job_control: ingen jobbstyrning i bakgrunden"
 
-#: jobs.c:4463
+#: jobs.c:4450
 msgid "initialize_job_control: line discipline"
 msgstr "initialize_job_control: linjedisciplin"
 
-#: jobs.c:4473
+#: jobs.c:4460
 msgid "initialize_job_control: setpgid"
 msgstr "initialize_job_control: setpgid"
 
-#: jobs.c:4494 jobs.c:4503
+#: jobs.c:4481 jobs.c:4490
 #, c-format
 msgid "cannot set terminal process group (%d)"
 msgstr "det går inte att sätta terminalprocessgrupp (%d)"
 
-#: jobs.c:4508
+#: jobs.c:4495
 msgid "no job control in this shell"
 msgstr "ingen jobbstyrning i detta skal"
 
-#: lib/malloc/malloc.c:353
+#: lib/malloc/malloc.c:367
 #, c-format
 msgid "malloc: failed assertion: %s\n"
 msgstr "malloc: försäkran misslyckades: %s\n"
 
-#: lib/malloc/malloc.c:369
+#: lib/malloc/malloc.c:383
 #, c-format
 msgid ""
 "\r\n"
@@ -1345,47 +1355,47 @@ msgstr ""
 "\r\n"
 "malloc: %s:%d: försäkran gick fel\r\n"
 
-#: lib/malloc/malloc.c:370 lib/malloc/malloc.c:933
+#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941
 msgid "unknown"
 msgstr "okänd"
 
-#: lib/malloc/malloc.c:882
+#: lib/malloc/malloc.c:892
 msgid "malloc: block on free list clobbered"
 msgstr "malloc: block på frilista överskrivet"
 
-#: lib/malloc/malloc.c:972
+#: lib/malloc/malloc.c:980
 msgid "free: called with already freed block argument"
 msgstr "free: anropad med redan frigjort block som argument"
 
-#: lib/malloc/malloc.c:975
+#: lib/malloc/malloc.c:983
 msgid "free: called with unallocated block argument"
 msgstr "free: anropad med oallokerat block som argument"
 
-#: lib/malloc/malloc.c:994
+#: lib/malloc/malloc.c:1001
 msgid "free: underflow detected; mh_nbytes out of range"
 msgstr "free: underspill upptäckt: mh_nbytes utanför giltigt intervall"
 
-#: lib/malloc/malloc.c:1001
+#: lib/malloc/malloc.c:1007
 msgid "free: underflow detected; magic8 corrupted"
 msgstr "free: underspill upptäckt: magic8 är trasig"
 
-#: lib/malloc/malloc.c:1009
+#: lib/malloc/malloc.c:1014
 msgid "free: start and end chunk sizes differ"
 msgstr "free: start- och slutstyckesstorlekar skiljer"
 
-#: lib/malloc/malloc.c:1119
+#: lib/malloc/malloc.c:1176
 msgid "realloc: called with unallocated block argument"
 msgstr "realloc: anropat med oallokerat block som argument"
 
-#: lib/malloc/malloc.c:1134
+#: lib/malloc/malloc.c:1191
 msgid "realloc: underflow detected; mh_nbytes out of range"
 msgstr "realloc: underspill upptäckt: mh_nbytes utanför giltigt intervall"
 
-#: lib/malloc/malloc.c:1141
+#: lib/malloc/malloc.c:1197
 msgid "realloc: underflow detected; magic8 corrupted"
 msgstr "realloc: underspill upptäckt: magic8 är trasig"
 
-#: lib/malloc/malloc.c:1150
+#: lib/malloc/malloc.c:1205
 msgid "realloc: start and end chunk sizes differ"
 msgstr "realloc: start- och slutstyckesstorlekar skiljer"
 
@@ -1427,22 +1437,22 @@ msgstr "%s: felaktig specifikation av nätverkssökväg"
 msgid "network operations not supported"
 msgstr "nätverksoperationer stöds inte"
 
-#: locale.c:217
+#: locale.c:219
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s)"
 msgstr "setlocale: LC_ALL: det går inte att ändra lokal (%s)"
 
-#: locale.c:219
+#: locale.c:221
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s): %s"
 msgstr "setlocale: LC_ALL: det går inte att ändra lokal (%s): %s"
 
-#: locale.c:292
+#: locale.c:294
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s)"
 msgstr "setlocale: %s: det går inte att ändra lokal (%s)"
 
-#: locale.c:294
+#: locale.c:296
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s): %s"
 msgstr "setlocale: %s: det går inte att ändra lokal (%s): %s"
@@ -1460,136 +1470,136 @@ msgstr "Du har ny post i $_"
 msgid "The mail in %s has been read\n"
 msgstr "Posten i %s har lästs\n"
 
-#: make_cmd.c:317
+#: make_cmd.c:314
 msgid "syntax error: arithmetic expression required"
 msgstr "syntaxfel: aritmetiskt uttryck krävs"
 
-#: make_cmd.c:319
+#: make_cmd.c:316
 msgid "syntax error: `;' unexpected"
 msgstr "syntaxfel: oväntat ”;”"
 
-#: make_cmd.c:320
+#: make_cmd.c:317
 #, c-format
 msgid "syntax error: `((%s))'"
 msgstr "syntaxfel: ”((%s))”"
 
-#: make_cmd.c:572
+#: make_cmd.c:569
 #, c-format
 msgid "make_here_document: bad instruction type %d"
 msgstr "make_here_document: felaktig instruktionstyp %d"
 
-#: make_cmd.c:657
+#: make_cmd.c:668
 #, c-format
 msgid "here-document at line %d delimited by end-of-file (wanted `%s')"
 msgstr "här-dokument på rad %d avgränsas av filslut (ville ha ”%s”)"
 
-#: make_cmd.c:756
+#: make_cmd.c:769
 #, c-format
 msgid "make_redirection: redirection instruction `%d' out of range"
 msgstr "make_redirection: omdirigeringsinstruktion ”%d” utanför giltigt intervall"
 
-#: parse.y:2393
+#: parse.y:2428
 #, c-format
 msgid "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line truncated"
 msgstr "shell_getc: shell_input_line_size (%zu) överstiger SIZE_MAX (%lu): raden avhuggen"
 
-#: parse.y:2826
+#: parse.y:2921
 msgid "maximum here-document count exceeded"
 msgstr "maximalt antal av här-dokument överskridet"
 
-#: parse.y:3581 parse.y:3957 parse.y:4556
+#: parse.y:3684 parse.y:4244 parse.y:6148
 #, c-format
 msgid "unexpected EOF while looking for matching `%c'"
 msgstr "oväntat filslut vid sökning efter matchande ”%c”"
 
-#: parse.y:4696
+#: parse.y:4452
 msgid "unexpected EOF while looking for `]]'"
 msgstr "oväntat filslut vid sökning efter ”]]”"
 
-#: parse.y:4701
+#: parse.y:4457
 #, c-format
 msgid "syntax error in conditional expression: unexpected token `%s'"
 msgstr "syntaxfel i villkorligt uttryck: oväntad symbol ”%s”"
 
-#: parse.y:4705
+#: parse.y:4461
 msgid "syntax error in conditional expression"
 msgstr "syntaxfel i villkorligt uttryck"
 
-#: parse.y:4783
+#: parse.y:4539
 #, c-format
 msgid "unexpected token `%s', expected `)'"
 msgstr "oväntad symbol ”%s”, ”)” förväntades"
 
-#: parse.y:4787
+#: parse.y:4543
 msgid "expected `)'"
 msgstr "”)” förväntades"
 
-#: parse.y:4815
+#: parse.y:4571
 #, c-format
 msgid "unexpected argument `%s' to conditional unary operator"
 msgstr "oväntat argument ”%s” till villkorlig unär operator"
 
-#: parse.y:4819
+#: parse.y:4575
 msgid "unexpected argument to conditional unary operator"
 msgstr "oväntat argument till villkorlig unär operator"
 
-#: parse.y:4865
+#: parse.y:4621
 #, c-format
 msgid "unexpected token `%s', conditional binary operator expected"
 msgstr "oväntad symbol ”%s”, villkorlig binär operator förväntades"
 
-#: parse.y:4869
+#: parse.y:4625
 msgid "conditional binary operator expected"
 msgstr "villkorlig binär operator förväntades"
 
-#: parse.y:4891
+#: parse.y:4647
 #, c-format
 msgid "unexpected argument `%s' to conditional binary operator"
 msgstr "oväntat argument ”%s” till villkorlig binär operator"
 
-#: parse.y:4895
+#: parse.y:4651
 msgid "unexpected argument to conditional binary operator"
 msgstr "oväntat argument till villkorlig binär operator"
 
-#: parse.y:4906
+#: parse.y:4662
 #, c-format
 msgid "unexpected token `%c' in conditional command"
 msgstr "oväntad symbol ”%c” i villkorligt kommando"
 
-#: parse.y:4909
+#: parse.y:4665
 #, c-format
 msgid "unexpected token `%s' in conditional command"
 msgstr "oväntad symbol ”%s” i villkorligt kommando"
 
-#: parse.y:4913
+#: parse.y:4669
 #, c-format
 msgid "unexpected token %d in conditional command"
 msgstr "oväntad symbol %d i villkorligt kommando"
 
-#: parse.y:6336
+#: parse.y:6118
 #, c-format
 msgid "syntax error near unexpected token `%s'"
 msgstr "syntaxfel nära den oväntade symbolen ”%s”"
 
-#: parse.y:6355
+#: parse.y:6137
 #, c-format
 msgid "syntax error near `%s'"
 msgstr "syntaxfel nära ”%s”"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error: unexpected end of file"
 msgstr "syntaxfel: oväntat filslut"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error"
 msgstr "syntaxfel"
 
-#: parse.y:6428
+#: parse.y:6216
 #, c-format
 msgid "Use \"%s\" to leave the shell.\n"
 msgstr "Använd ”%s” för att lämna skalet.\n"
 
-#: parse.y:6602
+#: parse.y:6394
 msgid "unexpected EOF while looking for matching `)'"
 msgstr "oväntat filslut när matchande ”)” söktes"
 
@@ -1627,94 +1637,94 @@ msgstr "xtrace_set: NULL-filpekare"
 msgid "xtrace fd (%d) != fileno xtrace fp (%d)"
 msgstr "xtrace fd (%d) != fileno xtrace fp (%d)"
 
-#: print_cmd.c:1540
+#: print_cmd.c:1545
 #, c-format
 msgid "cprintf: `%c': invalid format character"
 msgstr "cprintf: ”%c”: ogiltigt formateringstecken"
 
-#: redir.c:149 redir.c:197
+#: redir.c:150 redir.c:198
 msgid "file descriptor out of range"
 msgstr "filbeskrivare utanför giltigt intervall"
 
-#: redir.c:204
+#: redir.c:205
 #, c-format
 msgid "%s: ambiguous redirect"
 msgstr "%s: tvetydig omdirigering"
 
-#: redir.c:208
+#: redir.c:209
 #, c-format
 msgid "%s: cannot overwrite existing file"
 msgstr "%s: det går inte att skriva över en existerande fil"
 
-#: redir.c:213
+#: redir.c:214
 #, c-format
 msgid "%s: restricted: cannot redirect output"
 msgstr "%s: begränsat: det går inte att omdirigera utdata"
 
-#: redir.c:218
+#: redir.c:219
 #, c-format
 msgid "cannot create temp file for here-document: %s"
 msgstr "det går inte att skapa temporärfil för här-dokument: %s"
 
-#: redir.c:222
+#: redir.c:223
 #, c-format
 msgid "%s: cannot assign fd to variable"
 msgstr "%s: det går inte att tilldela fb till variabel"
 
-#: redir.c:649
+#: redir.c:650
 msgid "/dev/(tcp|udp)/host/port not supported without networking"
 msgstr "/dev/(tcp|udp)/host/port stöds inte utan nätverksfunktion"
 
-#: redir.c:938 redir.c:1053 redir.c:1114 redir.c:1284
+#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303
 msgid "redirection error: cannot duplicate fd"
 msgstr "omdirigeringsfel: det går inte att duplicera fb"
 
-#: shell.c:347
+#: shell.c:353
 msgid "could not find /tmp, please create!"
 msgstr "hittade inte /tmp, var god skapa!"
 
-#: shell.c:351
+#: shell.c:357
 msgid "/tmp must be a valid directory name"
 msgstr "/tmp måste vara ett giltigt katalognamn"
 
-#: shell.c:804
+#: shell.c:826
 msgid "pretty-printing mode ignored in interactive shells"
 msgstr "läget för snygg utskrift ignoreras i interaktiva skal"
 
-#: shell.c:948
+#: shell.c:972
 #, c-format
 msgid "%c%c: invalid option"
 msgstr "%c%c: ogiltig flagga"
 
-#: shell.c:1319
+#: shell.c:1343
 #, c-format
 msgid "cannot set uid to %d: effective uid %d"
 msgstr "det går sätta uid till %d: effektiv uid %d"
 
-#: shell.c:1330
+#: shell.c:1354
 #, c-format
 msgid "cannot set gid to %d: effective gid %d"
 msgstr "det går inte att sätta gid till %d: effektiv gid %d"
 
-#: shell.c:1518
+#: shell.c:1544
 msgid "cannot start debugger; debugging mode disabled"
 msgstr "kan inte starta felsökaren, felsökningsläge avaktiverat"
 
-#: shell.c:1632
+#: shell.c:1658
 #, c-format
 msgid "%s: Is a directory"
 msgstr "%s: är en katalog"
 
-#: shell.c:1881
+#: shell.c:1907
 msgid "I have no name!"
 msgstr "Jag har inget namn!"
 
-#: shell.c:2035
+#: shell.c:2061
 #, c-format
 msgid "GNU bash, version %s-(%s)\n"
 msgstr "GNU bash, version %s-(%s)\n"
 
-#: shell.c:2036
+#: shell.c:2062
 #, c-format
 msgid ""
 "Usage:\t%s [GNU long option] [option] ...\n"
@@ -1723,319 +1733,319 @@ msgstr ""
 "Användning:\t%s [GNU lång flagga] [flagga] ...\n"
 "\t\t%s [GNU lång flagga] [flagga] skriptfil ...\n"
 
-#: shell.c:2038
+#: shell.c:2064
 msgid "GNU long options:\n"
 msgstr "GNU långa flaggor:\n"
 
-#: shell.c:2042
+#: shell.c:2068
 msgid "Shell options:\n"
 msgstr "Skalflaggor:\n"
 
-#: shell.c:2043
+#: shell.c:2069
 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n"
 msgstr "\t-ilrsD eller -c kommando eller -O shopt_flagga\t\t(bara uppstart)\n"
 
-#: shell.c:2062
+#: shell.c:2088
 #, c-format
 msgid "\t-%s or -o option\n"
 msgstr "\t-%s eller -o flagga\n"
 
-#: shell.c:2068
+#: shell.c:2094
 #, c-format
 msgid "Type `%s -c \"help set\"' for more information about shell options.\n"
 msgstr "Skriv ”%s -c 'help set'” för mer information om skalflaggor.\n"
 
-#: shell.c:2069
+#: shell.c:2095
 #, c-format
 msgid "Type `%s -c help' for more information about shell builtin commands.\n"
 msgstr "Skriv ”%s -c help” för mer information om inbyggda skalkommandon.\n"
 
-#: shell.c:2070
+#: shell.c:2096
 #, c-format
 msgid "Use the `bashbug' command to report bugs.\n"
 msgstr ""
 "Använd kommandot ”bashbug” för att rapportera fel.\n"
 "Skicka synpunkter på översättningen till <tp-sv@listor.tp-sv.se>.\n"
 
-#: shell.c:2072
+#: shell.c:2098
 #, c-format
 msgid "bash home page: <http://www.gnu.org/software/bash>\n"
 msgstr "bash hemsida: <http://www.gnu.org/software/bash>\n"
 
-#: shell.c:2073
+#: shell.c:2099
 #, c-format
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 msgstr "Allmän hjälp i att använda GNU-program: <http://www.gnu.org/gethelp/>\n"
 
-#: sig.c:757
+#: sig.c:765
 #, c-format
 msgid "sigprocmask: %d: invalid operation"
 msgstr "sigprocmask: %d: ogiltig operation"
 
-#: siglist.c:47
+#: siglist.c:48
 msgid "Bogus signal"
 msgstr "Felaktig signal"
 
-#: siglist.c:50
+#: siglist.c:51
 msgid "Hangup"
 msgstr "Avringd"
 
-#: siglist.c:54
+#: siglist.c:55
 msgid "Interrupt"
 msgstr "Avbruten"
 
-#: siglist.c:58
+#: siglist.c:59
 msgid "Quit"
 msgstr "Lämnad"
 
-#: siglist.c:62
+#: siglist.c:63
 msgid "Illegal instruction"
 msgstr "Otillåten instruktion"
 
-#: siglist.c:66
+#: siglist.c:67
 msgid "BPT trace/trap"
 msgstr "Brytpunkt/spårningsfälla"
 
-#: siglist.c:74
+#: siglist.c:75
 msgid "ABORT instruction"
 msgstr "ABORT-instruktion"
 
-#: siglist.c:78
+#: siglist.c:79
 msgid "EMT instruction"
 msgstr "Emulatorfälla"
 
-#: siglist.c:82
+#: siglist.c:83
 msgid "Floating point exception"
 msgstr "Flyttalsfel"
 
-#: siglist.c:86
+#: siglist.c:87
 msgid "Killed"
 msgstr "Dödad"
 
-#: siglist.c:90
+#: siglist.c:91
 msgid "Bus error"
 msgstr "Bussfel"
 
-#: siglist.c:94
+#: siglist.c:95
 msgid "Segmentation fault"
 msgstr "Segmenteringsfel"
 
-#: siglist.c:98
+#: siglist.c:99
 msgid "Bad system call"
 msgstr "Felaktigt systemanrop"
 
-#: siglist.c:102
+#: siglist.c:103
 msgid "Broken pipe"
 msgstr "Brutet rör"
 
-#: siglist.c:106
+#: siglist.c:107
 msgid "Alarm clock"
 msgstr "Alarmklocka"
 
-#: siglist.c:110
+#: siglist.c:111
 msgid "Terminated"
 msgstr "Avslutat"
 
-#: siglist.c:114
+#: siglist.c:115
 msgid "Urgent IO condition"
 msgstr "Viktigt I/O-tillstånd"
 
-#: siglist.c:118
+#: siglist.c:119
 msgid "Stopped (signal)"
 msgstr "Stoppad (signal)"
 
-#: siglist.c:126
+#: siglist.c:127
 msgid "Continue"
 msgstr "Återupptagen"
 
-#: siglist.c:134
+#: siglist.c:135
 msgid "Child death or stop"
 msgstr "Barn dött eller stoppat"
 
-#: siglist.c:138
+#: siglist.c:139
 msgid "Stopped (tty input)"
 msgstr "Stoppad (terminalläsning)"
 
-#: siglist.c:142
+#: siglist.c:143
 msgid "Stopped (tty output)"
 msgstr "Stoppad (terminalskrivning)"
 
-#: siglist.c:146
+#: siglist.c:147
 msgid "I/O ready"
 msgstr "I/O möjligt"
 
-#: siglist.c:150
+#: siglist.c:151
 msgid "CPU limit"
 msgstr "CPU-gräns"
 
-#: siglist.c:154
+#: siglist.c:155
 msgid "File limit"
 msgstr "Filgräns"
 
-#: siglist.c:158
+#: siglist.c:159
 msgid "Alarm (virtual)"
 msgstr "Alarm (virtuell tid)"
 
-#: siglist.c:162
+#: siglist.c:163
 msgid "Alarm (profile)"
 msgstr "Alarm (profilering)"
 
-#: siglist.c:166
+#: siglist.c:167
 msgid "Window changed"
 msgstr "Ändrat fönster"
 
-#: siglist.c:170
+#: siglist.c:171
 msgid "Record lock"
 msgstr "Postlås"
 
-#: siglist.c:174
+#: siglist.c:175
 msgid "User signal 1"
 msgstr "Användarsignal 1"
 
-#: siglist.c:178
+#: siglist.c:179
 msgid "User signal 2"
 msgstr "Användarsignal 2"
 
-#: siglist.c:182
+#: siglist.c:183
 msgid "HFT input data pending"
 msgstr "HFT-indata väntar"
 
-#: siglist.c:186
+#: siglist.c:187
 msgid "power failure imminent"
 msgstr "strömavbrott omedelbart förestående"
 
-#: siglist.c:190
+#: siglist.c:191
 msgid "system crash imminent"
 msgstr "systemkrasch omedelbart förestående"
 
-#: siglist.c:194
+#: siglist.c:195
 msgid "migrate process to another CPU"
 msgstr "migrera process till en annan CPU"
 
-#: siglist.c:198
+#: siglist.c:199
 msgid "programming error"
 msgstr "programmeringsfel"
 
-#: siglist.c:202
+#: siglist.c:203
 msgid "HFT monitor mode granted"
 msgstr "HFT-övervakningsläge givet"
 
-#: siglist.c:206
+#: siglist.c:207
 msgid "HFT monitor mode retracted"
 msgstr "HFT-övervakare borttagen"
 
-#: siglist.c:210
+#: siglist.c:211
 msgid "HFT sound sequence has completed"
 msgstr "HFT-ljudsekvens har avslutat"
 
-#: siglist.c:214
+#: siglist.c:215
 msgid "Information request"
 msgstr "Informationsbegäran"
 
-#: siglist.c:222 siglist.c:224
+#: siglist.c:223 siglist.c:225
 #, c-format
 msgid "Unknown Signal #%d"
 msgstr "Okänd signal nr %d"
 
-#: subst.c:1476 subst.c:1666
+#: subst.c:1480 subst.c:1670
 #, c-format
 msgid "bad substitution: no closing `%s' in %s"
 msgstr "felaktig substitution: ingen avslutande ”%s” i %s"
 
-#: subst.c:3281
+#: subst.c:3307
 #, c-format
 msgid "%s: cannot assign list to array member"
 msgstr "%s: det går inte att tilldela listor till vektormedlemmar"
 
-#: subst.c:5910 subst.c:5926
+#: subst.c:6048 subst.c:6064
 msgid "cannot make pipe for process substitution"
 msgstr "det går inte att skapa rör för processubstitution"
 
-#: subst.c:5985
+#: subst.c:6124
 msgid "cannot make child for process substitution"
 msgstr "det går inte att skapa barn för processubstitution"
 
-#: subst.c:6059
+#: subst.c:6198
 #, c-format
 msgid "cannot open named pipe %s for reading"
 msgstr "det går inte att öppna namngivet rör %s för läsning"
 
-#: subst.c:6061
+#: subst.c:6200
 #, c-format
 msgid "cannot open named pipe %s for writing"
 msgstr "det går inte att öppna namngivet rör %s för skrivning"
 
-#: subst.c:6084
+#: subst.c:6223
 #, c-format
 msgid "cannot duplicate named pipe %s as fd %d"
 msgstr "det går inte att duplicera namngivet rör %s som fb %d"
 
-#: subst.c:6213
+#: subst.c:6370
 msgid "command substitution: ignored null byte in input"
 msgstr "kommandoersättning: ignorerade nollbyte i indata"
 
-#: subst.c:6353
+#: subst.c:6533
 msgid "cannot make pipe for command substitution"
 msgstr "det går inte att skapa rör för kommandosubstitution"
 
-#: subst.c:6397
+#: subst.c:6580
 msgid "cannot make child for command substitution"
 msgstr "det går inte att skapa barn för kommandosubstitution"
 
-#: subst.c:6423
+#: subst.c:6613
 msgid "command_substitute: cannot duplicate pipe as fd 1"
 msgstr "command_substitute: det går inte att duplicera rör som fb 1"
 
-#: subst.c:6883 subst.c:9952
+#: subst.c:7082 subst.c:10252
 #, c-format
 msgid "%s: invalid variable name for name reference"
 msgstr "%s: ogiltigt variabelnamn för referens"
 
-#: subst.c:6979 subst.c:6997 subst.c:7169
+#: subst.c:7178 subst.c:7196 subst.c:7369
 #, c-format
 msgid "%s: invalid indirect expansion"
 msgstr "%s: felaktig indirekt expansion"
 
-#: subst.c:7013 subst.c:7177
+#: subst.c:7212 subst.c:7377
 #, c-format
 msgid "%s: invalid variable name"
 msgstr "%s: felaktigt variabelnamn"
 
-#: subst.c:7256
+#: subst.c:7478
 #, c-format
 msgid "%s: parameter not set"
 msgstr "%s: parametern är inte satt"
 
-#: subst.c:7258
+#: subst.c:7480
 #, c-format
 msgid "%s: parameter null or not set"
 msgstr "%s: parametern tom eller inte satt"
 
-#: subst.c:7503 subst.c:7518
+#: subst.c:7727 subst.c:7742
 #, c-format
 msgid "%s: substring expression < 0"
 msgstr "%s: delstränguttryck < 0"
 
-#: subst.c:9281 subst.c:9302
+#: subst.c:9560 subst.c:9587
 #, c-format
 msgid "%s: bad substitution"
 msgstr "%s: felaktig substitution"
 
-#: subst.c:9390
+#: subst.c:9678
 #, c-format
 msgid "$%s: cannot assign in this way"
 msgstr "$%s: det går inte att tilldela på detta sätt"
 
-#: subst.c:9814
+#: subst.c:10111
 msgid "future versions of the shell will force evaluation as an arithmetic substitution"
 msgstr "framtida versioner av skalet kommer att framtvinga evaluering som en aritmetisk substitution"
 
-#: subst.c:10367
+#: subst.c:10795
 #, c-format
 msgid "bad substitution: no closing \"`\" in %s"
 msgstr "felaktig ersättning: ingen avslutande ”`” i %s"
 
-#: subst.c:11434
+#: subst.c:11874
 #, c-format
 msgid "no match: %s"
 msgstr "ingen matchning: %s"
@@ -2058,21 +2068,21 @@ msgstr "”)” förväntades"
 msgid "`)' expected, found %s"
 msgstr "”)” förväntades, fann %s"
 
-#: test.c:466 test.c:799
+#: test.c:469 test.c:814
 #, c-format
 msgid "%s: binary operator expected"
 msgstr "%s: binär operator förväntades"
 
-#: test.c:756 test.c:759
+#: test.c:771 test.c:774
 #, c-format
 msgid "%s: unary operator expected"
 msgstr "%s: unär operator förväntades"
 
-#: test.c:881
+#: test.c:896
 msgid "missing `]'"
 msgstr "”]” saknas"
 
-#: test.c:899
+#: test.c:914
 #, c-format
 msgid "syntax error: `%s' unexpected"
 msgstr "syntaxfel: oväntat ”%s”"
@@ -2081,99 +2091,104 @@ msgstr "syntaxfel: oväntat ”%s”"
 msgid "invalid signal number"
 msgstr "ogiltigt signalnummer"
 
-#: trap.c:325
+#: trap.c:323
 #, c-format
 msgid "trap handler: maximum trap handler level exceeded (%d)"
 msgstr "fällhanterare: maximal nivå av fällhanterare överskriden (%d)"
 
-#: trap.c:414
+#: trap.c:412
 #, c-format
 msgid "run_pending_traps: bad value in trap_list[%d]: %p"
 msgstr "run_pending_traps: felaktigt värde i trap_list[%d]: %p"
 
-#: trap.c:418
+#: trap.c:416
 #, c-format
 msgid "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
 msgstr "run_pending_traps: signalhanterare är SIG_DFL, skickar om %d (%s) till mig själv"
 
-#: trap.c:487
+#: trap.c:509
 #, c-format
 msgid "trap_handler: bad signal %d"
 msgstr "trap_handler: felaktig signal %d"
 
-#: variables.c:421
+#: variables.c:424
 #, c-format
 msgid "error importing function definition for `%s'"
 msgstr "fel vid import av funktionsdefinition för ”%s”"
 
-#: variables.c:833
+#: variables.c:838
 #, c-format
 msgid "shell level (%d) too high, resetting to 1"
 msgstr "skalnivå (%d) för hög, återställer till 1"
 
-#: variables.c:2674
+#: variables.c:2642
 msgid "make_local_variable: no function context at current scope"
 msgstr "make_local_variable: ingen funktionskontext i aktuellt sammanhang"
 
-#: variables.c:2693
+#: variables.c:2661
 #, c-format
 msgid "%s: variable may not be assigned value"
 msgstr "%s: variabeln får inte tilldelas ett värde"
 
-#: variables.c:3475
+#: variables.c:2818 variables.c:2874
+#, c-format
+msgid "%s: cannot inherit value from incompatible type"
+msgstr "%s: det går inte att ärva ett värde från en inkompatibel typ"
+
+#: variables.c:3459
 #, c-format
 msgid "%s: assigning integer to name reference"
 msgstr "%s: tilldelar ett heltal till en namnreferens"
 
-#: variables.c:4404
+#: variables.c:4390
 msgid "all_local_variables: no function context at current scope"
 msgstr "all_local_variables: ingen funktionskontext i aktuellt sammanhang"
 
-#: variables.c:4771
+#: variables.c:4757
 #, c-format
 msgid "%s has null exportstr"
 msgstr "%s har tom exportstr"
 
-#: variables.c:4776 variables.c:4785
+#: variables.c:4762 variables.c:4771
 #, c-format
 msgid "invalid character %d in exportstr for %s"
 msgstr "ogiltigt tecken %d i exportstr för %s"
 
-#: variables.c:4791
+#: variables.c:4777
 #, c-format
 msgid "no `=' in exportstr for %s"
 msgstr "inget ”=” i exportstr för %s"
 
-#: variables.c:5331
+#: variables.c:5317
 msgid "pop_var_context: head of shell_variables not a function context"
 msgstr "pop_var_context: huvudet på shell_variables är inte en funktionskontext"
 
-#: variables.c:5344
+#: variables.c:5330
 msgid "pop_var_context: no global_variables context"
 msgstr "pop_var_context: ingen kontext global_variables"
 
-#: variables.c:5424
+#: variables.c:5410
 msgid "pop_scope: head of shell_variables not a temporary environment scope"
 msgstr "pop_scope: huvudet på shell_variables är inte en temporär omgivningsräckvidd"
 
-#: variables.c:6387
+#: variables.c:6400
 #, c-format
 msgid "%s: %s: cannot open as FILE"
 msgstr "%s: %s: går inte att öppna som FILE"
 
-#: variables.c:6392
+#: variables.c:6405
 #, c-format
 msgid "%s: %s: invalid value for trace file descriptor"
 msgstr "%s: %s: ogiltigt värde för spårningsfilbeskrivare"
 
-#: variables.c:6437
+#: variables.c:6450
 #, c-format
 msgid "%s: %s: compatibility value out of range"
 msgstr "%s: %s: kompatibilitetsvärde utanför giltigt intervall"
 
 #: version.c:46 version2.c:46
-msgid "Copyright (C) 2020 Free Software Foundation, Inc."
-msgstr "Copyright © 2020 Free Software Foundation, Inc."
+msgid "Copyright (C) 2022 Free Software Foundation, Inc."
+msgstr "Copyright © 2022 Free Software Foundation, Inc."
 
 #: version.c:47 version2.c:47
 msgid "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n"
@@ -2253,12 +2268,12 @@ msgid "command [-pVv] command [arg ...]"
 msgstr "command [-pVv] kommando [arg ...]"
 
 #: builtins.c:78
-msgid "declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]"
-msgstr "declare [-aAfFgiIlnrtux] [-p] [namn[=värde] …]"
+msgid "declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] [name ...]"
+msgstr "declare [-aAfFgiIlnrtux] [namn[=värde] …] eller declare -p [-aAfFilnrtux] [namn …]"
 
 #: builtins.c:80
-msgid "typeset [-aAfFgiIlnrtux] [-p] name[=value] ..."
-msgstr "typeset [-aAfFgiIlnrtux] [-p] namn[=värde] ..."
+msgid "typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] [name ...]"
+msgstr "typeset [-aAfFgiIlnrtux] namn[=värde] … eller typeset -p [-aAfFilnrtux] [namn …]"
 
 #: builtins.c:82
 msgid "local [option] name[=value] ..."
@@ -2345,8 +2360,8 @@ msgid "return [n]"
 msgstr "return [n]"
 
 #: builtins.c:142
-msgid "set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]"
-msgstr "set [-abefhkmnptuvxBCHP] [-o flaggnamn] [--] [arg ...]"
+msgid "set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]"
+msgstr "set [-abefhkmnptuvxBCEHPT] [-o flaggnamn] [--] [-] [arg …]"
 
 #: builtins.c:144
 msgid "unset [-f] [-v] [-n] [name ...]"
@@ -2393,8 +2408,8 @@ msgid "type [-afptP] name [name ...]"
 msgstr "type [-afptP] namn [namn ...]"
 
 #: builtins.c:171
-msgid "ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]"
-msgstr "ulimit [-SHabcdefiklmnpqrstuvxPT] [gräns]"
+msgid "ulimit [-SHabcdefiklmnpqrstuvxPRT] [limit]"
+msgstr "ulimit [-SHabcdefiklmnpqrstuvxPRT] [gräns]"
 
 #: builtins.c:174
 msgid "umask [-p] [-S] [mode]"
@@ -2433,12 +2448,12 @@ msgid "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else C
 msgstr "if KOMMANDON; then KOMMANDON; [ elif KOMMANDON; then KOMMANDON; ]... [ else KOMMANDON; ] fi"
 
 #: builtins.c:196
-msgid "while COMMANDS; do COMMANDS; done"
-msgstr "while KOMMANDON; do KOMMANDON; done"
+msgid "while COMMANDS; do COMMANDS-2; done"
+msgstr "while KOMMANDON; do KOMMANDON-2; done"
 
 #: builtins.c:198
-msgid "until COMMANDS; do COMMANDS; done"
-msgstr "until KOMMANDON; do KOMMANDON; done"
+msgid "until COMMANDS; do COMMANDS-2; done"
+msgstr "until KOMMANDON; do KOMMANDON-2; done"
 
 #: builtins.c:200
 msgid "coproc [NAME] command [redirections]"
@@ -3748,7 +3763,8 @@ msgid ""
 "    splitting, and the first word is assigned to the first NAME, the second\n"
 "    word to the second NAME, and so on, with any leftover words assigned to\n"
 "    the last NAME.  Only the characters found in $IFS are recognized as word\n"
-"    delimiters.\n"
+"    delimiters. By default, the backslash character escapes delimiter characters\n"
+"    and newline.\n"
 "    \n"
 "    If no NAMEs are supplied, the line read is stored in the REPLY variable.\n"
 "    \n"
@@ -3790,7 +3806,9 @@ msgstr ""
 "    flaggan -u ges.  Raden delas upp i fält som vid orduppdelning, och första\n"
 "    ordet tilldelas det första NAMNet, andra ordet till det andra NAMNet, och\n"
 "    så vidare, med eventuella återstående ord tilldelade till det sista\n"
-"    NAMNet.  Endast tecknen som finns i $IFS används som ordavgränsare.\n"
+"    NAMNet.  Endast tecknen som finns i $IFS används som ordavgränsare. Som\n"
+"    standard skyddar tecknet omvänt snedstreck avgränsningstecken och\n"
+"    nyrad.\n"
 "    \n"
 "    Om inga NAMN anges, lagras den inlästa raden i variabeln REPLY.\n"
 "    \n"
@@ -3825,7 +3843,7 @@ msgstr ""
 "    (då den är större än 128), ett fel vid variabeltilldelning inträffar eller\n"
 "    en ogiltig filbeskrivare ges som argument till -u."
 
-#: builtins.c:1041
+#: builtins.c:1042
 msgid ""
 "Return from a shell function.\n"
 "    \n"
@@ -3846,7 +3864,7 @@ msgstr ""
 "    Returnerar N, eller misslyckande om skalet inte kör en funktion eller\n"
 "    skript."
 
-#: builtins.c:1054
+#: builtins.c:1055
 msgid ""
 "Set or unset values of shell options and positional parameters.\n"
 "    \n"
@@ -4012,7 +4030,7 @@ msgstr ""
 "    Slutstatus:\n"
 "    Returnerar framgång om inte en ogiltig flagga ges."
 
-#: builtins.c:1139
+#: builtins.c:1140
 msgid ""
 "Unset values and attributes of shell variables and functions.\n"
 "    \n"
@@ -4051,7 +4069,7 @@ msgstr ""
 "    Returnerar framgång om inte en ogiltig flagga ges eller NAMN endast är\n"
 "    läsbart."
 
-#: builtins.c:1161
+#: builtins.c:1162
 msgid ""
 "Set export attribute for shell variables.\n"
 "    \n"
@@ -4083,7 +4101,7 @@ msgstr ""
 "    Slutstatus:\n"
 "    Returnerar framgång om inte en ogiltig flagga ges eller NAMN är ogiltigt."
 
-#: builtins.c:1180
+#: builtins.c:1181
 msgid ""
 "Mark shell variables as unchangeable.\n"
 "    \n"
@@ -4121,7 +4139,7 @@ msgstr ""
 "    Slutstatus:\n"
 "    Returnerar framgång om inte en ogiltig flagga ges eller NAMN är ogiltigt."
 
-#: builtins.c:1202
+#: builtins.c:1203
 msgid ""
 "Shift positional parameters.\n"
 "    \n"
@@ -4139,7 +4157,7 @@ msgstr ""
 "    Slutstatus:\n"
 "    Returnerar framgång om inte N är negativt eller större än $#."
 
-#: builtins.c:1214 builtins.c:1229
+#: builtins.c:1215 builtins.c:1230
 msgid ""
 "Execute commands from a file in the current shell.\n"
 "    \n"
@@ -4162,7 +4180,7 @@ msgstr ""
 "    Returnerar status på det sista kommandot som körs i FILNAMN, misslyckas\n"
 "    om FILNAMN inte kan läsas."
 
-#: builtins.c:1245
+#: builtins.c:1246
 msgid ""
 "Suspend shell execution.\n"
 "    \n"
@@ -4187,7 +4205,7 @@ msgstr ""
 "    Returnerar framgång om inte jobbstyrning inte är aktiverat eller ett fel\n"
 "    inträffar."
 
-#: builtins.c:1261
+#: builtins.c:1262
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -4344,7 +4362,7 @@ msgstr ""
 "    Returnerar framgång om UTTR beräknas till sant.  Misslyckas ifall UTTR\n"
 "    beräknas till falskt eller ett ogiltigt argument ges."
 
-#: builtins.c:1343
+#: builtins.c:1344
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -4356,7 +4374,7 @@ msgstr ""
 "    Detta är en synonym till det inbyggda ”test”, men det sista argumentet\n"
 "    måste vara en bokstavlig ”]”, för att matcha den inledande ”[”."
 
-#: builtins.c:1352
+#: builtins.c:1353
 msgid ""
 "Display process times.\n"
 "    \n"
@@ -4374,7 +4392,7 @@ msgstr ""
 "    Slutstatus:\n"
 "    Lyckas alltid."
 
-#: builtins.c:1364
+#: builtins.c:1365
 msgid ""
 "Trap signals and other events.\n"
 "    \n"
@@ -4441,7 +4459,7 @@ msgstr ""
 "    Returnerar framgång om inte en SIGSPEC är ogiltig eller en ogiltig flagga\n"
 "    ges."
 
-#: builtins.c:1400
+#: builtins.c:1401
 msgid ""
 "Display information about command type.\n"
 "    \n"
@@ -4495,7 +4513,7 @@ msgstr ""
 "    Slutstatus:\n"
 "    Returnerar framgång om alla NAMNen finns, misslyckas om något inte finns."
 
-#: builtins.c:1431
+#: builtins.c:1432
 msgid ""
 "Modify shell resource limits.\n"
 "    \n"
@@ -4590,7 +4608,7 @@ msgstr ""
 "    Slutstatus:\n"
 "    Returnerar framgång om inte en ogiltig flagga anges eller ett fel inträffar."
 
-#: builtins.c:1482
+#: builtins.c:1483
 msgid ""
 "Display or set file mode mask.\n"
 "    \n"
@@ -4624,7 +4642,7 @@ msgstr ""
 "    Returnerar framgång om inte RÄTTIGHETER är ogiltig eller en ogiltig flagga\n"
 "    ges."
 
-#: builtins.c:1502
+#: builtins.c:1503
 msgid ""
 "Wait for job completion and return exit status.\n"
 "    \n"
@@ -4674,7 +4692,7 @@ msgstr ""
 "    Returnerar status på den sista ID, misslyckas ifall ID är ogiltig\n"
 "    eller en ogiltig flagga ges."
 
-#: builtins.c:1533
+#: builtins.c:1534
 msgid ""
 "Wait for process completion and return exit status.\n"
 "    \n"
@@ -4696,7 +4714,7 @@ msgstr ""
 "    Returnerar status på den sista PID, misslyckas ifall PID är ogiltig\n"
 "    eller en ogiltig flagga ges."
 
-#: builtins.c:1548
+#: builtins.c:1549
 msgid ""
 "Execute commands for each member in a list.\n"
 "    \n"
@@ -4718,7 +4736,7 @@ msgstr ""
 "    Slutstatus:\n"
 "    Returnerar status för det sist exekverade kommandot."
 
-#: builtins.c:1562
+#: builtins.c:1563
 msgid ""
 "Arithmetic for loop.\n"
 "    \n"
@@ -4748,7 +4766,7 @@ msgstr ""
 "    Slutstatus:\n"
 "    Returnerar statusen från det sist exekverade kommandot."
 
-#: builtins.c:1580
+#: builtins.c:1581
 msgid ""
 "Select words from a list and execute commands.\n"
 "    \n"
@@ -4783,7 +4801,7 @@ msgstr ""
 "    Slutstatus:\n"
 "    Returnerar statusen från det sist exekverade kommandot."
 
-#: builtins.c:1601
+#: builtins.c:1602
 msgid ""
 "Report time consumed by pipeline's execution.\n"
 "    \n"
@@ -4812,7 +4830,7 @@ msgstr ""
 "    Slutstatus:\n"
 "    Returstatusen är returstatusen från RÖR."
 
-#: builtins.c:1618
+#: builtins.c:1619
 msgid ""
 "Execute commands based on pattern matching.\n"
 "    \n"
@@ -4830,7 +4848,7 @@ msgstr ""
 "    Slutstatus:\n"
 "    Returnerar statusen från det sist exekverade kommandot."
 
-#: builtins.c:1630
+#: builtins.c:1631
 msgid ""
 "Execute commands based on conditional.\n"
 "    \n"
@@ -4858,43 +4876,43 @@ msgstr ""
 "    Slutstatus:\n"
 "    Returnerar status från det sist exekverade kommandot."
 
-#: builtins.c:1647
+#: builtins.c:1648
 msgid ""
 "Execute commands as long as a test succeeds.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `while' COMMANDS has an exit status of zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n"
+"    an exit status of zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
 "Exekvera kommandon så länge ett test lyckas.\n"
 "    \n"
-"    Expandera och exekvera KOMMANDON så länge det sista kommandot i\n"
-"    ”while”-KOMMANDONa har en slutstatus på noll.\n"
+"    Expandera och exekvera KOMMANDON-2 så länge det sista kommandot i\n"
+"    KOMMANDON har en slutstatus på noll.\n"
 "    \n"
 "    Slutstatus:\n"
 "    Returnerar statusen från det sist exekverade kommandot."
 
-#: builtins.c:1659
+#: builtins.c:1660
 msgid ""
 "Execute commands as long as a test does not succeed.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `until' COMMANDS has an exit status which is not zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n"
+"    an exit status which is not zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
 "Exekvera kommandon så länge ett test inte lyckas.\n"
 "    \n"
-"    Expandera och exekvera KOMMANDON så länge det sista kommandot i\n"
-"    ”until”-KOMMANDONa har en slutstatus som inte är noll.\n"
+"    Expandera och exekvera KOMMANDON-2 så länge det sista kommandot i\n"
+"    KOMMANDON har en slutstatus som inte är noll.\n"
 "    \n"
 "    Slutstatus:\n"
 "    Returnerar statusen från det sist exekverade kommandot."
 
-#: builtins.c:1671
+#: builtins.c:1672
 msgid ""
 "Create a coprocess named NAME.\n"
 "    \n"
@@ -4916,7 +4934,7 @@ msgstr ""
 "    Slutstatus:\n"
 "    Kommandot coproc returnerar slutstatusen 0."
 
-#: builtins.c:1685
+#: builtins.c:1686
 msgid ""
 "Define shell function.\n"
 "    \n"
@@ -4938,7 +4956,7 @@ msgstr ""
 "    Slutstatus:\n"
 "    Returnerar framgång om inte NAMN endast är läsbart."
 
-#: builtins.c:1699
+#: builtins.c:1700
 msgid ""
 "Group commands as a unit.\n"
 "    \n"
@@ -4956,7 +4974,7 @@ msgstr ""
 "    Slutstatus:\n"
 "    Returnerar statusen från det sist exekverade kommandot."
 
-#: builtins.c:1711
+#: builtins.c:1712
 msgid ""
 "Resume job in foreground.\n"
 "    \n"
@@ -4980,7 +4998,7 @@ msgstr ""
 "    Slutstatus:\n"
 "    Returnerar statusen på det återupptagna jobbet."
 
-#: builtins.c:1726
+#: builtins.c:1727
 msgid ""
 "Evaluate arithmetic expression.\n"
 "    \n"
@@ -4998,7 +5016,7 @@ msgstr ""
 "    Slutstatus:\n"
 "    Returnerar 1 om UTTRYCK beräknas till 0, returnerar 0 annars."
 
-#: builtins.c:1738
+#: builtins.c:1739
 msgid ""
 "Execute conditional command.\n"
 "    \n"
@@ -5045,7 +5063,7 @@ msgstr ""
 "    Slutstatus:\n"
 "    0 eller 1 beroende på värdet av UTTRYCK."
 
-#: builtins.c:1764
+#: builtins.c:1765
 msgid ""
 "Common shell variable names and usage.\n"
 "    \n"
@@ -5150,7 +5168,7 @@ msgstr ""
 "    HISTIGNORE\tEn kolonseparerad lista av mönster som används för att\n"
 "    \t\tbestämma vilka kommandon som skall sparas i historielistan.\n"
 
-#: builtins.c:1821
+#: builtins.c:1822
 msgid ""
 "Add directories to stack.\n"
 "    \n"
@@ -5208,7 +5226,7 @@ msgstr ""
 "    Returnerar framgång om inte ett ogiltigt argument ges eller bytet av\n"
 "    katalog misslyckas."
 
-#: builtins.c:1855
+#: builtins.c:1856
 msgid ""
 "Remove directories from stack.\n"
 "    \n"
@@ -5258,7 +5276,7 @@ msgstr ""
 "    Returnerar framgång om inte ett ogiltigt argument ges eller bytet av\n"
 "    katalog misslyckas."
 
-#: builtins.c:1885
+#: builtins.c:1886
 msgid ""
 "Display directory stack.\n"
 "    \n"
@@ -5310,7 +5328,7 @@ msgstr ""
 "    Slutstatus:\n"
 "    Returnerar framgång om inte en ogiltig flagga ges eller ett fel inträffar."
 
-#: builtins.c:1916
+#: builtins.c:1917
 msgid ""
 "Set and unset shell options.\n"
 "    \n"
@@ -5346,7 +5364,7 @@ msgstr ""
 "    Returnerar framgång om FLGNAMN är aktiverat, misslyckas om en ogiltig\n"
 "    flagga ges eller FLGNAMN är avaktiverat."
 
-#: builtins.c:1937
+#: builtins.c:1938
 msgid ""
 "Formats and prints ARGUMENTS under control of the FORMAT.\n"
 "    \n"
@@ -5365,6 +5383,8 @@ msgid ""
 "    \n"
 "      %b\texpand backslash escape sequences in the corresponding argument\n"
 "      %q\tquote the argument in a way that can be reused as shell input\n"
+"      %Q\tlike %q, but apply any precision to the unquoted argument before\n"
+"    \t\tquoting\n"
 "      %(fmt)T\toutput the date-time string resulting from using FMT as a format\n"
 "    \t        string for strftime(3)\n"
 "    \n"
@@ -5394,6 +5414,8 @@ msgstr ""
 "      %b\texpandera bakstrecksstyrsekvenser i motsvarande argument\n"
 "      %q\tcitera argumentet på ett sätt som kan återanvändas som\n"
 "    \t\tindata till ett skal\n"
+"      %Q\tsom %q, men tillämpa eventuell precision på det ociterade\n"
+"    \t\tciterande\n"
 "      %(fmt)T   skriv ut datum-/tidsträngen som blir resultatet av att\n"
 "                använda FMT som en formatsträng till strftime(3)\n"
 "    \n"
@@ -5406,7 +5428,7 @@ msgstr ""
 "    Returnerar framgång om inte en ogiltig flagga ges eller ett skriv-\n"
 "    eller tilldelningsfel inträffar."
 
-#: builtins.c:1971
+#: builtins.c:1974
 msgid ""
 "Specify how arguments are to be completed by Readline.\n"
 "    \n"
@@ -5455,7 +5477,7 @@ msgstr ""
 "    Slutstatus:\n"
 "    Returnerar framgång om inte en ogiltig flagga ges eller ett fel inträffar."
 
-#: builtins.c:2001
+#: builtins.c:2004
 msgid ""
 "Display possible completions depending on the options.\n"
 "    \n"
@@ -5475,7 +5497,7 @@ msgstr ""
 "    Slutstatus:\n"
 "    Returnerar framgång om inte en ogiltig flagga ges eller ett fel inträffar."
 
-#: builtins.c:2016
+#: builtins.c:2019
 msgid ""
 "Modify or display completion options.\n"
 "    \n"
@@ -5530,7 +5552,7 @@ msgstr ""
 "    Returnerar framgång om inte en ogiltig flagga ges eller NAMN inte har\n"
 "    någon kompletteringsspecifikation definierad."
 
-#: builtins.c:2047
+#: builtins.c:2050
 msgid ""
 "Read lines from the standard input into an indexed array variable.\n"
 "    \n"
@@ -5596,7 +5618,7 @@ msgstr ""
 "    Returnerar framgång om inte en ogiltig flagga ges eller VEKTOR är\n"
 "    oföränderlig eller inte en indexerad vektor."
 
-#: builtins.c:2083
+#: builtins.c:2086
 msgid ""
 "Read lines from a file into an array variable.\n"
 "    \n"
index 49558623c784bb928b20eb9b73652a6863cb5484..ecd482e3a2b19548df610e56b5b5c57788743c04 100644 (file)
Binary files a/po/tr.gmo and b/po/tr.gmo differ
index cb0e0cb1f0aec54fb6833bee47649b48933fe633..f0a7e84281af7b7024dd9706d7db7ffc08eb90b5 100644 (file)
--- a/po/tr.po
+++ b/po/tr.po
@@ -4,14 +4,16 @@
 #
 # Nilgün Belma Bugüner <nilgun@buguner.name.tr>, 2006.
 # Volkan Gezer <vlkngzr@gmail.com>, 2013, 2014, 2017.
+# Emir SARI <emir_sari@icloud.com>, 2022
+#
 msgid ""
 msgstr ""
-"Project-Id-Version: bash 4.4\n"
+"Project-Id-Version: bash-5.1\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2020-11-28 12:51-0500\n"
-"PO-Revision-Date: 2017-05-05 11:49+0100\n"
-"Last-Translator: Volkan Gezer <volkangezer@gmail.com>\n"
-"Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n"
+"PO-Revision-Date: 2022-04-11 23:00+0300\n"
+"Last-Translator: Emir SARI <emir_sari@icloud.com>\n"
+"Language-Team: Turkish <gnome-turk@gnome.org>\n"
 "Language: tr\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -22,23 +24,23 @@ msgstr ""
 
 #: arrayfunc.c:66
 msgid "bad array subscript"
-msgstr "hatalı dizi indisi"
+msgstr "hatalı dizilim indisi"
 
 #: arrayfunc.c:421 builtins/declare.def:638 variables.c:2274 variables.c:2300
 #: variables.c:3133
 #, c-format
 msgid "%s: removing nameref attribute"
-msgstr "%s: removing nameref niteliği kaldırılıyor"
+msgstr "%s: nameref özniteliği kaldırılıyor"
 
 #: arrayfunc.c:446 builtins/declare.def:851
 #, c-format
 msgid "%s: cannot convert indexed to associative array"
-msgstr "%s: indisli dizi, ilişkisel diziye dönüştürülemez"
+msgstr "%s: indisli dizilim, ilişkisel dizilime dönüştürülemez"
 
 #: arrayfunc.c:700
 #, c-format
 msgid "%s: invalid associative array key"
-msgstr "%s: geçersiz ilişkisel dizi anahtarı"
+msgstr "%s: geçersiz ilişkisel dizilim anahtarı"
 
 #: arrayfunc.c:702
 #, c-format
@@ -48,7 +50,7 @@ msgstr "%s: sayısal olmayan indise atama yapılamaz"
 #: arrayfunc.c:747
 #, c-format
 msgid "%s: %s: must use subscript when assigning associative array"
-msgstr "%s: %s: ilişkisel bir dizi ataması yapılırken indis kullanılmalıdır"
+msgstr "%s: %s: ilişkisel bir dizilim ataması yapılırken indis kullanılmalıdır"
 
 #: bashhist.c:452
 #, c-format
@@ -72,12 +74,12 @@ msgstr "%2$s içinde kapatan `%1$c' yok"
 #: bashline.c:4519
 #, c-format
 msgid "%s: missing colon separator"
-msgstr "%s: ikinokta imi eksik"
+msgstr "%s: iki nokta imi eksik"
 
 #: bashline.c:4555
-#, fuzzy, c-format
+#, c-format
 msgid "`%s': cannot unbind in command keymap"
-msgstr "`%s': kısayol değiştirilemiyor"
+msgstr "`%s': komut düğme eşleminde bağıntı kaldırılamıyor"
 
 #: braces.c:327
 #, c-format
@@ -85,9 +87,9 @@ msgid "brace expansion: cannot allocate memory for %s"
 msgstr "destek genişletme: %s için bellek ayrılamıyor"
 
 #: braces.c:406
-#, fuzzy, c-format
+#, c-format
 msgid "brace expansion: failed to allocate memory for %u elements"
-msgstr "destek genişletme: %d öge için bellek ayrılamıyor"
+msgstr "destek genişletme: %u öge için bellek ayrılamıyor"
 
 #: braces.c:451
 #, c-format
@@ -97,7 +99,7 @@ msgstr "destek genişletme: `%s' için bellek ayrılamıyor"
 #: builtins/alias.def:131 variables.c:1844
 #, c-format
 msgid "`%s': invalid alias name"
-msgstr "`%s': geçersiz takma isim"
+msgstr "`%s': geçersiz takma ad"
 
 #: builtins/bind.def:122 builtins/bind.def:125
 msgid "line editing not enabled"
@@ -106,7 +108,7 @@ msgstr "satır düzenleme etkin değil"
 #: builtins/bind.def:212
 #, c-format
 msgid "`%s': invalid keymap name"
-msgstr "`%s': kısayol ismi geçersiz"
+msgstr "`%s': düğme eşlem adı geçersiz"
 
 #: builtins/bind.def:252
 #, c-format
@@ -116,7 +118,7 @@ msgstr "%s: okunamıyor: %s"
 #: builtins/bind.def:328 builtins/bind.def:358
 #, c-format
 msgid "`%s': unknown function name"
-msgstr "`%s': işlev ismi bilinmiyor"
+msgstr "`%s': işlev adı bilinmiyor"
 
 #: builtins/bind.def:336
 #, c-format
@@ -139,10 +141,9 @@ msgstr "döngü sayısı"
 
 #: builtins/break.def:139
 msgid "only meaningful in a `for', `while', or `until' loop"
-msgstr "sadece bir `for', `while' veya `until' döngüsünde anlamlı"
+msgstr "yalnızca bir `for', `while' veya `until' döngüsünde anlamlı"
 
 #: builtins/caller.def:136
-#, fuzzy
 msgid ""
 "Returns the context of the current subroutine call.\n"
 "    \n"
@@ -153,19 +154,14 @@ msgid ""
 "    The value of EXPR indicates how many call frames to go back before the\n"
 "    current one; the top frame is frame 0."
 msgstr ""
-"Geçerli alt yordam çağrısının bağlamını döndürür.\n"
+"Geçerli altrutin çağrısının bağlamını döndürür.\n"
 "    \n"
-"    İFADE olmadan, \"$satır $dosyaadı\" döndürür.  İFADE ile "
-"kullanıldığında\n"
-"    \"$satır $altyordam $dosyaadı\" döndürür; bu ek bilgi bir yığın izi "
-"sağlamak\n"
-"    için kullanılabilir.\n"
+"    İFADE olmadan, \"$satır $dosyaadı\" döndürür. İFADE ile \"$satır\n"
+"      $altrutin $dosyaadı\" döndürür; bu ek bilgi bir yığın izlemesi sağlamak\n"
+"      için kullanılabilir.\n"
 "    \n"
-"    İFADE değeri, geçerli çerçeveden önce kaç tane çerçeve çağrılacağını\n"
-"    belirtir. Üst çerçeve 0. çerçevedir.    \n"
-"    Çıkış Durumu:\n"
-"    İFADE geçersiz olmadığı ve bir kabuk işlevi çalıştırmadığı durumda 0 "
-"döndürür."
+"    İFADE'nin değeri, geçerli çağrı biriminden önce kaç tane geri gidilmesi\n"
+"      gerektiğini belirtir; en üst çerçeve, 0. çerçevedir."
 
 #: builtins/cd.def:327
 msgid "HOME not set"
@@ -173,7 +169,7 @@ msgstr "HOME atanmamış"
 
 #: builtins/cd.def:335 builtins/common.c:161 test.c:901
 msgid "too many arguments"
-msgstr "çok fazla argüman"
+msgstr "pek fazla argüman"
 
 #: builtins/cd.def:342
 msgid "null directory"
@@ -186,7 +182,7 @@ msgstr "OLDPWD boş"
 #: builtins/common.c:96
 #, c-format
 msgid "line %d: "
-msgstr "satır %d: "
+msgstr "%d. satır: "
 
 #: builtins/common.c:134 error.c:264
 #, c-format
@@ -201,17 +197,17 @@ msgstr "%s: kullanım: "
 #: builtins/common.c:193 shell.c:516 shell.c:844
 #, c-format
 msgid "%s: option requires an argument"
-msgstr "%s: seçenek bir argüman gerektirir"
+msgstr "%s: seçenek bir argüman gerektiriyor"
 
 #: builtins/common.c:200
 #, c-format
 msgid "%s: numeric argument required"
-msgstr "%s: sayısal argüman gerekli"
+msgstr "%s: sayısal argüman gerekiyor"
 
 #: builtins/common.c:207
 #, c-format
 msgid "%s: not found"
-msgstr "%s:yok"
+msgstr "%s: yok"
 
 #: builtins/common.c:216 shell.c:857
 #, c-format
@@ -221,12 +217,12 @@ msgstr "%s: seçenek geçersiz"
 #: builtins/common.c:223
 #, c-format
 msgid "%s: invalid option name"
-msgstr "%s: seçenek ismi geçersiz"
+msgstr "%s: seçenek adı geçersiz"
 
 #: builtins/common.c:230 execute_cmd.c:2373 general.c:368 general.c:373
 #, c-format
 msgid "`%s': not a valid identifier"
-msgstr "`%s': geçerli bir belirteç değil"
+msgstr "`%s': geçerli bir tanımlayıcı değil"
 
 #: builtins/common.c:240
 msgid "invalid octal number"
@@ -253,12 +249,12 @@ msgstr "`%s': geçerli bir iş belirtimi veya süreç numarası değil"
 #: builtins/common.c:266 error.c:510
 #, c-format
 msgid "%s: readonly variable"
-msgstr "%s: salt okunur değişken"
+msgstr "%s: saltokunur değişken"
 
 #: builtins/common.c:274
 #, c-format
 msgid "%s: %s out of range"
-msgstr "%s: %s aralık dışı"
+msgstr "%s: %s erim dışı"
 
 #: builtins/common.c:274 builtins/common.c:276
 msgid "argument"
@@ -267,7 +263,7 @@ msgstr "argüman"
 #: builtins/common.c:276
 #, c-format
 msgid "%s out of range"
-msgstr "%s aralık dışı"
+msgstr "%s erim dışı"
 
 #: builtins/common.c:284
 #, c-format
@@ -305,12 +301,12 @@ msgstr "yazma hatası: %s"
 #: builtins/common.c:331
 #, c-format
 msgid "error setting terminal attributes: %s"
-msgstr "uçbirim nitelikleri ayarlanırken hata: %s"
+msgstr "uçbirim öznitelikleri ayarlanırken hata: %s"
 
 #: builtins/common.c:333
 #, c-format
 msgid "error getting terminal attributes: %s"
-msgstr "uçbirim nitelikleri alınırken hata: %s"
+msgstr "uçbirim öznitelikleri alınırken hata: %s"
 
 #: builtins/common.c:635
 #, c-format
@@ -329,7 +325,7 @@ msgstr "bu sürümde yardım kullanılamıyor"
 #: builtins/common.c:1008 builtins/set.def:953 variables.c:3839
 #, c-format
 msgid "%s: cannot unset: readonly %s"
-msgstr "%s:unset yapılamaz: %s salt okunur"
+msgstr "%s: unset yapılamaz: %s saltokunur"
 
 #: builtins/common.c:1013 builtins/set.def:932 variables.c:3844
 #, c-format
@@ -361,28 +357,28 @@ msgstr "şuan tamamlama işlevi çalıştırılmıyor"
 
 #: builtins/declare.def:134
 msgid "can only be used in a function"
-msgstr "sadece bir işlevde kullanılabilir"
+msgstr "yalnızca bir işlevde kullanılabilir"
 
 #: builtins/declare.def:363 builtins/declare.def:756
 #, c-format
 msgid "%s: reference variable cannot be an array"
-msgstr "%s: referans değeri bir dizi olamaz"
+msgstr "%s: başvuru değeri bir dizilim olamaz"
 
 #: builtins/declare.def:374 variables.c:3385
 #, c-format
 msgid "%s: nameref variable self references not allowed"
-msgstr "%s: nameref değişkeninin kendine yaptığı referanslara izin verilmiyor"
+msgstr "%s: nameref değişkeninin kendine yaptığı başvurulara izin verilmiyor"
 
 #: builtins/declare.def:379 variables.c:2104 variables.c:3304 variables.c:3312
 #: variables.c:3382
 #, c-format
 msgid "%s: circular name reference"
-msgstr "%s: çembersel isim referansı"
+msgstr "%s: çembersel ad başvurusu"
 
 #: builtins/declare.def:384 builtins/declare.def:762 builtins/declare.def:773
 #, c-format
 msgid "`%s': invalid variable name for name reference"
-msgstr "`%s': dosya izleme tanımlayıcısı için geçersiz değer"
+msgstr "%s: ad başvuarusu için geçersiz değişken adı"
 
 #: builtins/declare.def:514
 msgid "cannot use `-f' to make functions"
@@ -391,7 +387,7 @@ msgstr "işlev yapmak için `-f' kullanılamaz"
 #: builtins/declare.def:526 execute_cmd.c:5986
 #, c-format
 msgid "%s: readonly function"
-msgstr "%s: salt okunur işlev"
+msgstr "%s: saltokunur işlev"
 
 #: builtins/declare.def:824
 #, c-format
@@ -406,11 +402,11 @@ msgstr "%s: dizi değişkenleri bu yolla iptal edilemez"
 #: builtins/declare.def:845 builtins/read.def:815
 #, c-format
 msgid "%s: cannot convert associative to indexed array"
-msgstr "%s: ilişkisel dizi, indisli diziye dönüştürülemez"
+msgstr "%s: ilişkisel dizilim, indisli dizilime dönüştürülemez"
 
 #: builtins/enable.def:143 builtins/enable.def:151
 msgid "dynamic loading not available"
-msgstr "özdevimli yükleme mümkün değil"
+msgstr "devingen yükleme olanaklı değil"
 
 #: builtins/enable.def:343
 #, c-format
@@ -423,19 +419,19 @@ msgid "cannot find %s in shared object %s: %s"
 msgstr "%2$s paylaşımlı nesnesinde %1$s bulunamıyor: %3$s"
 
 #: builtins/enable.def:388
-#, fuzzy, c-format
+#, c-format
 msgid "%s: dynamic builtin already loaded"
-msgstr "%s: özdevimli olarak yüklenmemiş"
+msgstr "%s: devinen yerleşiği halihazırda yüklenmiş"
 
 #: builtins/enable.def:392
 #, c-format
 msgid "load function for %s returns failure (%d): not loaded"
-msgstr "%s için yükleme ifadesi hata döndürdü (%d): yüklenmedi"
+msgstr "%s için yükleme işlevi hata döndürdü (%d): yüklenmedi"
 
 #: builtins/enable.def:517
 #, c-format
 msgid "%s: not dynamically loaded"
-msgstr "%s: özdevimli olarak yüklenmemiş"
+msgstr "%s: devingen olarak yüklenmemiş"
 
 #: builtins/enable.def:543
 #, c-format
@@ -502,7 +498,7 @@ msgstr "%s: geçici dosya açılamıyor: %s"
 
 #: builtins/fg_bg.def:152 builtins/jobs.def:284
 msgid "current"
-msgstr "şimdiki"
+msgstr "geçerli"
 
 #: builtins/fg_bg.def:161
 #, c-format
@@ -512,21 +508,21 @@ msgstr "%d. iş, iş denetimsiz başlamış"
 #: builtins/getopt.c:110
 #, c-format
 msgid "%s: illegal option -- %c\n"
-msgstr "%s: kuraldışı seçenek -- %c\n"
+msgstr "%s: kural dışı seçenek -- %c\n"
 
 #: builtins/getopt.c:111
 #, c-format
 msgid "%s: option requires an argument -- %c\n"
-msgstr "%s: seçenek bir argüman gerektirir -- %c\n"
+msgstr "%s: seçenek bir argüman gerektiriyor -- %c\n"
 
 #: builtins/hash.def:91
 msgid "hashing disabled"
-msgstr "çitleme iptal edildi"
+msgstr "sağlama iptal edildi"
 
 #: builtins/hash.def:139
 #, c-format
 msgid "%s: hash table empty\n"
-msgstr "%s: çitleme tablosu boş\n"
+msgstr "%s: sağlama tablosu boş\n"
 
 #: builtins/hash.def:267
 #, c-format
@@ -544,14 +540,13 @@ msgid ""
 "'\n"
 "\n"
 msgstr ""
+"'\n"
+"\n"
 
 #: builtins/help.def:185
 #, c-format
-msgid ""
-"no help topics match `%s'.  Try `help help' or `man -k %s' or `info %s'."
-msgstr ""
-"`%s' ile ilgili bir yardım metni yok.  `help help' veya `man -k %s' ya da "
-"`info %s'.yazmayı deneyebilirsiniz."
+msgid "no help topics match `%s'.  Try `help help' or `man -k %s' or `info %s'."
+msgstr "`%s' ile ilgili yardım konusu yok. `help help', `man -k %s', `info %s' yazmayı deneyin."
 
 #: builtins/help.def:224
 #, c-format
@@ -570,12 +565,12 @@ msgid ""
 "\n"
 msgstr ""
 "Bu kabuk komutları dahili olarak tanımlı. Listeyi görmek için `help'yazın.\n"
-"`AD' gibi bir işlev hakkında bilgi almak için `help AD' yazınız.\n"
-"Kabuk hakkında genel bir bilgi edinmek için `info bash'yazınız.\n"
-"Bu listede olmayan komutlar hakkında bilgi bulmak isterseniz,\n"
-"`man -k' veya `info' yazın.\n"
+"`AD' gibi bir işlev hakkında bilgi almak için `help AD' yazın. Kabuk hakkında\n"
+"genel bir bilgi edinmek için `info bash' yazın.\n"
+"Bu listede olmayan\n"
+"komutlar hakkında bilgi bulmak isterseniz `man -k' veya `info' yazın.\n"
 "\n"
-"Bir ismin yanında bir yıldız imi (*) varsa komut iptal edilmiş demektir.\n"
+"Bir adın yanında bir yıldız imi (*) varsa komut iptal edilmiş demektir.\n"
 "\n"
 
 #: builtins/history.def:155
@@ -632,7 +627,7 @@ msgstr "%s: dosya tanıtıcı belirtimi geçersiz"
 #: builtins/mapfile.def:279 builtins/read.def:315
 #, c-format
 msgid "%d: invalid file descriptor: %s"
-msgstr "%d: dosya tanıtıcı geçersiz: %s"
+msgstr "%d: dosya açıklayıcısı geçersiz: %s"
 
 #: builtins/mapfile.def:288 builtins/mapfile.def:326
 #, c-format
@@ -642,7 +637,7 @@ msgstr "%s: geçersiz satır sayısı"
 #: builtins/mapfile.def:299
 #, c-format
 msgid "%s: invalid array origin"
-msgstr "%s: geçersiz dizi kökeni"
+msgstr "%s: geçersiz dizilim kökeni"
 
 #: builtins/mapfile.def:316
 #, c-format
@@ -651,7 +646,7 @@ msgstr "%s: geçersiz geri çağırım niceliği"
 
 #: builtins/mapfile.def:349
 msgid "empty array variable name"
-msgstr "boş bir dizi değişken adı"
+msgstr "boş bir dizilim değişken adı"
 
 #: builtins/mapfile.def:370
 msgid "array variable support required"
@@ -680,7 +675,7 @@ msgstr "uyarı: %s: %s"
 #: builtins/printf.def:788
 #, c-format
 msgid "format parsing problem: %s"
-msgstr "biçim ayıklama sorunu: %s"
+msgstr "biçim ayrıştırma sorunu: %s"
 
 #: builtins/printf.def:885
 msgid "missing hex digit for \\x"
@@ -689,7 +684,7 @@ msgstr "\\x için onaltılık rakam eksik"
 #: builtins/printf.def:900
 #, c-format
 msgid "missing unicode digit for \\%c"
-msgstr "evrensel kod rakamı eksik \\%c"
+msgstr "\\%c için unicode rakamı eksik"
 
 #: builtins/pushd.def:199
 msgid "no other directory"
@@ -727,12 +722,10 @@ msgid ""
 "    \twith its position in the stack\n"
 "    \n"
 "    Arguments:\n"
-"      +N\tDisplays the Nth entry counting from the left of the list shown "
-"by\n"
+"      +N\tDisplays the Nth entry counting from the left of the list shown by\n"
 "    \tdirs when invoked without options, starting with zero.\n"
 "    \n"
-"      -N\tDisplays the Nth entry counting from the right of the list shown "
-"by\n"
+"      -N\tDisplays the Nth entry counting from the right of the list shown by\n"
 "\tdirs when invoked without options, starting with zero."
 msgstr ""
 "Geçerli hatırlanan dizinlerin listesini görüntüler. Dizinler\n"
@@ -778,26 +771,26 @@ msgid ""
 "    \n"
 "    The `dirs' builtin displays the directory stack."
 msgstr ""
-"Dizin yığıtının en üstüne bir dizin ekler, ya da geçerli çalışma\n"
-"    dizini yığıtın tepesine gelecek şekilde yığıtı döndürür. Hiç\n"
+"Dizin yığınının en üstüne bir dizin ekler veya geçerli çalışma\n"
+"    dizini yığının tepesine gelecek şekilde yığını döndürür. Hiç\n"
 "    argüman verilmemişse en üstteki iki dizini yer değiştirir.\n"
 "    \n"
 "    Seçenekler\n"
-"      -n\tYığıta dizin eklenirken dizinin normal değişimini yoksayar\n"
-"    \tböylece sadece yığıt değiştirilir.\n"
+"      -n\tYığına dizin eklenirken dizinin normal değişimini yok sayar\n"
+"    \tböylece yalnızca yığın değiştirilir.\n"
 "    Argümanlar:\n"
 "      +N\t(`dirs' tarafından gösterilen listenin solundan saymaya\n"
 "    \tsıfırla başlandığında) N'inci dizin tepeye gelecek şekilde\n"
-"    \tyığıtı döndürür.\n"
+"    \tyığını döndürür.\n"
 "    \n"
 "      -N\t(`dirs' tarafından gösterilen listenin sağından saymaya\n"
 "    \tsıfırla başlandığında) N'inci dizin tepeye gelecek şekilde\n"
-"    \tyığıtı döndürür.\n"
+"    \tyığını döndürür.\n"
 "    \n"
-"      dizin\tDiZiNi yeni çalışma dizini yaparak dizin yığıtının\n"
+"      dizin\tDiZiNi yeni çalışma dizini yaparak dizin yığınının\n"
 "    \ttepesine ekler.\n"
 "    \n"
-"    Dizin yığıtını `dirs' komutuyla görebilirsiniz."
+"    Dizin yığınını `dirs' komutuyla görebilirsiniz."
 
 #: builtins/pushd.def:748
 msgid ""
@@ -819,13 +812,13 @@ msgid ""
 "    \n"
 "    The `dirs' builtin displays the directory stack."
 msgstr ""
-"Dizin yığıtından girdileri siler.  Hiç argüman verilmemişse,\n"
-"    yığıtın en üstündeki dizini yığıttan kaldırır ve yığıtın\n"
+"Dizin yığınından girdileri siler.  Hiç argüman verilmemişse\n"
+"    yığının en üstündeki dizini yığından kaldırır ve yığının\n"
 "    tepesinde kalan dizine geçer.\n"
 "    \n"
 "    Seçenekler:\n"
-"      -n\tdizinleri yığıttan silerken normal dizin değişikliğini\n"
-"    \tengeller, böylece sadece yığıt değiştirilmiş olur. \n"
+"      -n\tdizinleri yığından silerken normal dizin değişikliğini\n"
+"    \tengeller, böylece yalnızca yığın değiştirilmiş olur. \n"
 "    \n"
 "    Argümanlar:\n"
 "      +N\t`dirs' tarafından gösterilen listenin solundan saymaya\n"
@@ -835,7 +828,7 @@ msgstr ""
 "    \tsıfırla başlandığında N'inci girdiyi  siler.  Örneğin,\n"
 "    \t`popd -0' son dizini `popd -1' sonuncudan öncekini siler. \n"
 "    \n"
-"    Dizin yığıtını `dirs' komutuyla görebilirsiniz."
+"    Dizin yığınını `dirs' komutuyla görebilirsiniz."
 
 #: builtins/read.def:280
 #, c-format
@@ -849,7 +842,7 @@ msgstr "okuma hatası: %d: %s"
 
 #: builtins/return.def:68
 msgid "can only `return' from a function or sourced script"
-msgstr "sadece bir işlev veya betikten kaynaklı olarak `return' yapılabilir"
+msgstr "yalnızca bir işlev veya betikten kaynaklı olarak `return' yapılabilir"
 
 #: builtins/set.def:869
 msgid "cannot simultaneously unset a function and a variable"
@@ -881,11 +874,11 @@ msgstr "kabuk seçenekleri aynı anda hem atanıp hem de iptal edilemez"
 #: builtins/shopt.def:428
 #, c-format
 msgid "%s: invalid shell option name"
-msgstr "%s: kabuk seçenek ismi geçersiz"
+msgstr "%s: kabuk seçenek adı geçersiz"
 
 #: builtins/source.def:128
 msgid "filename argument required"
-msgstr "dosya ismi argüman gerekir"
+msgstr "dosya adı argüman gerekir"
 
 #: builtins/source.def:154
 #, c-format
@@ -991,7 +984,7 @@ msgstr "Çıkılıyor..."
 #: error.c:287
 #, c-format
 msgid "INFORM: "
-msgstr "BİLGİLENDİR:"
+msgstr "BİLGİLENDİR: "
 
 #: error.c:462
 msgid "unknown command error"
@@ -1050,7 +1043,7 @@ msgstr "%s: azami kaynak yuvalama sınırı aşıldı (%d)"
 #: execute_cmd.c:4913
 #, c-format
 msgid "%s: maximum function nesting level exceeded (%d)"
-msgstr "%s: azami fonksiyon yuvalama sınırı aşıldı (%d)"
+msgstr "%s: azami işlev yuvalama sınırı aşıldı (%d)"
 
 #: execute_cmd.c:5467
 #, c-format
@@ -1093,20 +1086,19 @@ msgstr "ifade özyineleme düzeyi aşıldı"
 
 #: expr.c:291
 msgid "recursion stack underflow"
-msgstr "özyineleme yığıtı alttan taştı"
+msgstr "özyineleme yığını alttan taştı"
 
 #: expr.c:477
 msgid "syntax error in expression"
-msgstr "ifadede sözdizimi hatası"
+msgstr "ifadede sözdizim hatası"
 
 #: expr.c:521
 msgid "attempted assignment to non-variable"
 msgstr "değişken olmayana atama yapmaya çalışıldı"
 
 #: expr.c:530
-#, fuzzy
 msgid "syntax error in variable assignment"
-msgstr "ifadede sözdizimi hatası"
+msgstr "değişken atamada sözdizim hatası"
 
 #: expr.c:544 expr.c:911
 msgid "division by 0"
@@ -1134,11 +1126,11 @@ msgstr "eksik `)'"
 
 #: expr.c:1107 expr.c:1487
 msgid "syntax error: operand expected"
-msgstr "sözdizimi hatası: terim umuluyordu"
+msgstr "sözdizim hatası: terim umuluyordu"
 
 #: expr.c:1489
 msgid "syntax error: invalid arithmetic operator"
-msgstr "sözdizimi hatası: geçersiz aritmetik işleci"
+msgstr "sözdizim hatası: geçersiz aritmetik işleci"
 
 #: expr.c:1513
 #, c-format
@@ -1150,9 +1142,8 @@ msgid "invalid arithmetic base"
 msgstr "geçersiz sayı tabanı"
 
 #: expr.c:1582
-#, fuzzy
 msgid "invalid integer constant"
-msgstr "%s: geçersiz satır sayısı"
+msgstr "geçersiz tamsayı sabiti"
 
 #: expr.c:1598
 msgid "value too great for base"
@@ -1175,8 +1166,7 @@ msgstr "fd %d için geciktirmeme kipi sıfırlanamıyor"
 #: input.c:266
 #, c-format
 msgid "cannot allocate new file descriptor for bash input from fd %d"
-msgstr ""
-"fd %d tanıtıcısındaki bash girdisi için yeni dosya tanıtıcısı ayrılamıyor"
+msgstr "fd %d tanıtıcısındaki bash girdisi için yeni dosya tanıtıcısı ayrılamıyor"
 
 #: input.c:274
 #, c-format
@@ -1256,7 +1246,7 @@ msgstr "Bilinmeyen durum"
 #: jobs.c:2001
 #, c-format
 msgid "(core dumped) "
-msgstr "(çekirdek döküldü)"
+msgstr "(çekirdek döküldü) "
 
 #: jobs.c:2020
 #, c-format
@@ -1284,9 +1274,9 @@ msgid "wait_for_job: job %d is stopped"
 msgstr "wait_for_job: iş %d durdu"
 
 #: jobs.c:3564
-#, fuzzy, c-format
+#, c-format
 msgid "%s: no current jobs"
-msgstr "%s: böyle bir iş yok"
+msgstr "%s: geçerli iş yok"
 
 #: jobs.c:3571
 #, c-format
@@ -1322,9 +1312,8 @@ msgid "initialize_job_control: getpgrp failed"
 msgstr "initialize_job_control: getpgrp başarısız"
 
 #: jobs.c:4447
-#, fuzzy
 msgid "initialize_job_control: no job control in background"
-msgstr "initialize_job_control: satır düzeni"
+msgstr "initialize_job_control: arka planda iş denetimi yok"
 
 #: jobs.c:4463
 msgid "initialize_job_control: line discipline"
@@ -1378,9 +1367,8 @@ msgid "free: underflow detected; mh_nbytes out of range"
 msgstr "free: alttan taşma saptandı; mh_nbytes aralık dışında"
 
 #: lib/malloc/malloc.c:1001
-#, fuzzy
 msgid "free: underflow detected; magic8 corrupted"
-msgstr "free: alttan taşma saptandı; mh_nbytes aralık dışında"
+msgstr "free: alttan taşma saptandı; magic8 hasarlı"
 
 #: lib/malloc/malloc.c:1009
 msgid "free: start and end chunk sizes differ"
@@ -1395,9 +1383,8 @@ msgid "realloc: underflow detected; mh_nbytes out of range"
 msgstr "realloc: alttan taşma saptandı; mh_nbytes aralık dışında"
 
 #: lib/malloc/malloc.c:1141
-#, fuzzy
 msgid "realloc: underflow detected; magic8 corrupted"
-msgstr "realloc: alttan taşma saptandı; mh_nbytes aralık dışında"
+msgstr "realloc: alttan taşma saptandı; magic8 hasarlı"
 
 #: lib/malloc/malloc.c:1150
 msgid "realloc: start and end chunk sizes differ"
@@ -1476,16 +1463,16 @@ msgstr "%s'deki posta okundu\n"
 
 #: make_cmd.c:317
 msgid "syntax error: arithmetic expression required"
-msgstr "sözdizimi hatası: aritmetik ifadesi gerekli"
+msgstr "sözdizim hatası: aritmetik ifadesi gerekli"
 
 #: make_cmd.c:319
 msgid "syntax error: `;' unexpected"
-msgstr "sözdizimi hatası: `;' beklenmiyordu"
+msgstr "sözdizim hatası: `;' beklenmiyordu"
 
 #: make_cmd.c:320
 #, c-format
 msgid "syntax error: `((%s))'"
-msgstr "sözdizimi hatası: `((%s))'"
+msgstr "sözdizim hatası: `((%s))'"
 
 #: make_cmd.c:572
 #, c-format
@@ -1504,12 +1491,8 @@ msgstr "make_redirection: yönlendirme yönergesi `%d' aralık dışında"
 
 #: parse.y:2393
 #, c-format
-msgid ""
-"shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line "
-"truncated"
-msgstr ""
-"shell_getc: shell_input_line_size (%zu) SIZE_MAX değerini aşıyor (%lu): "
-"satır kırpıldı"
+msgid "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line truncated"
+msgstr "shell_getc: shell_input_line_size (%zu) SIZE_MAX değerini aşıyor (%lu): satır kırpıldı"
 
 #: parse.y:2826
 msgid "maximum here-document count exceeded"
@@ -1527,16 +1510,16 @@ msgstr "`]]' aranırken beklenmedik dosya sonu"
 #: parse.y:4701
 #, c-format
 msgid "syntax error in conditional expression: unexpected token `%s'"
-msgstr "koşullu ifadede sözdizimi hatası: beklenmedik dizgecik `%s'"
+msgstr "koşullu ifadede sözdizim hatası: beklenmedik jeton `%s'"
 
 #: parse.y:4705
 msgid "syntax error in conditional expression"
-msgstr "koşullu ifadede sözdizimi hatası"
+msgstr "koşullu ifadede sözdizim hatası"
 
 #: parse.y:4783
 #, c-format
 msgid "unexpected token `%s', expected `)'"
-msgstr "beklenmedik dizgecik `%s', `)' umuluyordu"
+msgstr "beklenmedik jeton `%s', `)' umuluyordu"
 
 #: parse.y:4787
 msgid "expected `)'"
@@ -1554,7 +1537,7 @@ msgstr "koşullu tek terimli işlece beklenmedik argüman"
 #: parse.y:4865
 #, c-format
 msgid "unexpected token `%s', conditional binary operator expected"
-msgstr "beklenmedik dizgecik `%s', koşullu iki terimli işleç umuluyordu"
+msgstr "beklenmedik jeton `%s', koşullu iki terimli işleç umuluyordu"
 
 #: parse.y:4869
 msgid "conditional binary operator expected"
@@ -1572,35 +1555,35 @@ msgstr "koşullu iki terimli işlece beklenmedik argüman"
 #: parse.y:4906
 #, c-format
 msgid "unexpected token `%c' in conditional command"
-msgstr "koşullu komutta beklenmeyen dizgecik `%c'"
+msgstr "koşullu komutta beklenmeyen jeton `%c'"
 
 #: parse.y:4909
 #, c-format
 msgid "unexpected token `%s' in conditional command"
-msgstr "koşullu komutta beklenmeyen dizgecik `%s'"
+msgstr "koşullu komutta beklenmeyen jeton `%s'"
 
 #: parse.y:4913
 #, c-format
 msgid "unexpected token %d in conditional command"
-msgstr "koşullu komutta beklenmeyen dizgecik %d"
+msgstr "koşullu komutta beklenmeyen jeton %d"
 
 #: parse.y:6336
 #, c-format
 msgid "syntax error near unexpected token `%s'"
-msgstr "beklenmeyen dizgecik `%s' yakınında sözdizimi hatası"
+msgstr "beklenmeyen jeton `%s' yakınında sözdizim hatası"
 
 #: parse.y:6355
 #, c-format
 msgid "syntax error near `%s'"
-msgstr "`%s' yakınında sözdizimi hatası"
+msgstr "`%s' yakınında sözdizim hatası"
 
 #: parse.y:6365
 msgid "syntax error: unexpected end of file"
-msgstr "sözdizimi hatası: beklenmeyen dosya sonu"
+msgstr "sözdizim hatası: beklenmeyen dosya sonu"
 
 #: parse.y:6365
 msgid "syntax error"
-msgstr "sözdizimi hatası"
+msgstr "sözdizim hatası"
 
 #: parse.y:6428
 #, c-format
@@ -1725,7 +1708,7 @@ msgstr "%s: Bir dizin"
 
 #: shell.c:1881
 msgid "I have no name!"
-msgstr "Hiç ismim yok!"
+msgstr "Adsızım ben!"
 
 #: shell.c:2035
 #, c-format
@@ -1751,25 +1734,22 @@ msgstr "Kabuk seçenekleri:\n"
 
 #: shell.c:2043
 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n"
-msgstr "\t-ilrsD veya -c KOMUT veya -O shopt_seçeneği\t\t(sadece çağrı için)\n"
+msgstr "\t-ilrsD veya -c KOMUT veya -O shopt_seçeneği\t\t(yalnızca çağrı için)\n"
 
 #: shell.c:2062
 #, c-format
 msgid "\t-%s or -o option\n"
-msgstr "\t-%s ya da -o seçeneği\n"
+msgstr "\t-%s veya -o seçeneği\n"
 
 #: shell.c:2068
 #, c-format
 msgid "Type `%s -c \"help set\"' for more information about shell options.\n"
-msgstr ""
-"Kabuk seçenekleriyle ilgili daha fazla bilgi için `%s -c \"help set\"' "
-"yazın.\n"
+msgstr "Kabuk seçenekleriyle ilgili daha fazla bilgi için `%s -c \"help set\"' yazın.\n"
 
 #: shell.c:2069
 #, c-format
 msgid "Type `%s -c help' for more information about shell builtin commands.\n"
-msgstr ""
-"Kabuk yerleşik komutlarıyla ilgili bilgi almak için `%s -c help' yazın.\n"
+msgstr "Kabuk yerleşik komutlarıyla ilgili bilgi almak için `%s -c help' yazın.\n"
 
 #: shell.c:2070
 #, c-format
@@ -1786,8 +1766,7 @@ msgstr "bash ana sayfası: <http://www.gnu.org/software/bash>\n"
 #: shell.c:2073
 #, c-format
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
-msgstr ""
-"GNU yazılımı kullanımı hakkında genel yardım: <http://www.gnu.org/gethelp/>\n"
+msgstr "GNU yazılımı kullanımı hakkında genel yardım: <http://www.gnu.org/gethelp/>\n"
 
 #: sig.c:757
 #, c-format
@@ -1980,21 +1959,21 @@ msgstr "süreç ikamesi için alt süreç yapılamıyor"
 #: subst.c:6059
 #, c-format
 msgid "cannot open named pipe %s for reading"
-msgstr "isimli boru %s okumak için açılamıyor"
+msgstr "adlı boru %s okumak için açılamıyor"
 
 #: subst.c:6061
 #, c-format
 msgid "cannot open named pipe %s for writing"
-msgstr "isimli boru %s yazmak için açılamıyor"
+msgstr "adlı boru %s yazmak için açılamıyor"
 
 #: subst.c:6084
 #, c-format
 msgid "cannot duplicate named pipe %s as fd %d"
-msgstr "isimli boru %s fd %d olarak yinelenemiyor"
+msgstr "adlı boru %s fd %d olarak yinelenemiyor"
 
 #: subst.c:6213
 msgid "command substitution: ignored null byte in input"
-msgstr "komut ikamesi: girdideki null bayt yoksayıldı"
+msgstr "komut ikamesi: girdideki null bayt yok sayıldı"
 
 #: subst.c:6353
 msgid "cannot make pipe for command substitution"
@@ -2024,19 +2003,19 @@ msgid "%s: invalid variable name"
 msgstr "%s: geçersiz değişken adı"
 
 #: subst.c:7256
-#, fuzzy, c-format
+#, c-format
 msgid "%s: parameter not set"
-msgstr "%s: parametre boş ya da değer atanmamış"
+msgstr "%s: parametre ayarlanmamış"
 
 #: subst.c:7258
 #, c-format
 msgid "%s: parameter null or not set"
-msgstr "%s: parametre boş ya da değer atanmamış"
+msgstr "%s: parametre boş veya değer atanmamış"
 
 #: subst.c:7503 subst.c:7518
 #, c-format
 msgid "%s: substring expression < 0"
-msgstr "%s: altdizge ifadesi < 0"
+msgstr "%s: altdizi ifadesi < 0"
 
 #: subst.c:9281 subst.c:9302
 #, c-format
@@ -2049,12 +2028,8 @@ msgid "$%s: cannot assign in this way"
 msgstr "$%s: bu yolla atama yapılmaz"
 
 #: subst.c:9814
-msgid ""
-"future versions of the shell will force evaluation as an arithmetic "
-"substitution"
-msgstr ""
-"kabuk gelecekteki sürümlerinde, bir aritmetik ikame olarak değerlendirmeye "
-"zorlayacak"
+msgid "future versions of the shell will force evaluation as an arithmetic substitution"
+msgstr "kabuk gelecekteki sürümlerinde, bir aritmetik ikame olarak değerlendirmeye zorlayacak"
 
 #: subst.c:10367
 #, c-format
@@ -2099,18 +2074,18 @@ msgid "missing `]'"
 msgstr "eksik `]'"
 
 #: test.c:899
-#, fuzzy, c-format
+#, c-format
 msgid "syntax error: `%s' unexpected"
-msgstr "sözdizimi hatası: `;' beklenmiyordu"
+msgstr "sözdizim hatası: '%s' beklenmiyordu"
 
 #: trap.c:220
 msgid "invalid signal number"
 msgstr "geçersiz sinyal numarası"
 
 #: trap.c:325
-#, fuzzy, c-format
+#, c-format
 msgid "trap handler: maximum trap handler level exceeded (%d)"
-msgstr "eval: azami eval yuvalama sınırı aşıldı (%d)"
+msgstr "tuzak işleyicisi: en yüksek tuzak işleyicisi düzeyi aşıldı (%d)"
 
 #: trap.c:414
 #, c-format
@@ -2119,10 +2094,8 @@ msgstr "run_pending_traps:trap_list[%d] içinde hatalı değer: %p"
 
 #: trap.c:418
 #, c-format
-msgid ""
-"run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
-msgstr ""
-"run_pending_traps: sinyal yakalayıcı SIG_DFL'dir, kendime %d (%s) göndererek"
+msgid "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
+msgstr "run_pending_traps: sinyal yakalayıcı SIG_DFL'dir, kendime %d (%s) göndererek"
 
 #: trap.c:487
 #, c-format
@@ -2151,7 +2124,7 @@ msgstr "%s: değişkene değer atanmamış olabilir"
 #: variables.c:3475
 #, c-format
 msgid "%s: assigning integer to name reference"
-msgstr "%s: isim referansına tamsayı ataması"
+msgstr "%s: ad başvurusuna tamsayı ataması"
 
 #: variables.c:4404
 msgid "all_local_variables: no function context at current scope"
@@ -2182,8 +2155,7 @@ msgstr "pop_var_context: genel değişkenler bağlamı yok"
 
 #: variables.c:5424
 msgid "pop_scope: head of shell_variables not a temporary environment scope"
-msgstr ""
-"pop_scope: kabuk değişkenlerinin başı bir geçici ortam etki alanı değil"
+msgstr "pop_scope: kabuk değişkenlerinin başı bir geçici ortam etki alanı değil"
 
 #: variables.c:6387
 #, c-format
@@ -2201,17 +2173,12 @@ msgid "%s: %s: compatibility value out of range"
 msgstr "%s: %s: uyumlulukdeğeri aralık dışı"
 
 #: version.c:46 version2.c:46
-#, fuzzy
 msgid "Copyright (C) 2020 Free Software Foundation, Inc."
-msgstr "Telif Hakkı (C) 2012 Özgür Yazılım Vakfı A.Ş."
+msgstr "Telif hakkı (C) 2020 Free Software Foundation, Inc."
 
 #: version.c:47 version2.c:47
-msgid ""
-"License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
-"html>\n"
-msgstr ""
-"Lisans GPLv3+: GNU GPL sürüm 3 veya sonrası <http://gnu.org/licenses/gpl."
-"html>\n"
+msgid "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n"
+msgstr "Lisans GPLv3+: GNU GPL sürüm 3 veya sonrası <http://gnu.org/licenses/gpl.html>\n"
 
 #: version.c:86 version2.c:86
 #, c-format
@@ -2248,20 +2215,15 @@ msgstr "%s: %s:%d: %lu bayt ayrılamıyor"
 
 #: builtins.c:45
 msgid "alias [-p] [name[=value] ... ]"
-msgstr "alias [-p] [isim[=değer] ... ]"
+msgstr "alias [-p] [ad[=değer] ... ]"
 
 #: builtins.c:49
 msgid "unalias [-a] name [name ...]"
-msgstr "unalias [-a] isim [isim ...]"
+msgstr "unalias [-a] ad [ad ...]"
 
 #: builtins.c:53
-msgid ""
-"bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-"
-"x keyseq:shell-command] [keyseq:readline-function or readline-command]"
-msgstr ""
-"bind [-lpvsPVSX] [-m anahtar eşleniği] [-f dosyaadı] [-q isim] [-u isim] [-r "
-"anahtar sırası] [-x keyseq:kabuk-komutu] [keyseq:satırokuma-işlevi veya "
-"satırokuma-komutu]"
+msgid "bind [-lpsvPSVX] [-m keymap] [-f filename] [-q name] [-u name] [-r keyseq] [-x keyseq:shell-command] [keyseq:readline-function or readline-command]"
+msgstr "bind [-lpvsPVSX] [-m anahtar eşleniği] [-f dosyaadı] [-q ad] [-u ad] [-r anahtar sırası] [-x keyseq:kabuk-komutu] [keyseq:satırokuma-işlevi veya satırokuma-komutu]"
 
 #: builtins.c:56
 msgid "break [n]"
@@ -2292,18 +2254,16 @@ msgid "command [-pVv] command [arg ...]"
 msgstr "command [-pVv] command [arg ...]"
 
 #: builtins.c:78
-#, fuzzy
 msgid "declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]"
-msgstr "declare [-aAfFgilnrtux] [-p] [isim[=değer] ...]"
+msgstr "declare [-aAfFgiIlnrtux] [-p] [ad[=değer] ...]"
 
 #: builtins.c:80
-#, fuzzy
 msgid "typeset [-aAfFgiIlnrtux] [-p] name[=value] ..."
-msgstr "typeset [-aAfFgilnrtux] [-p] isim[=değer] ..."
+msgstr "typeset [-aAfFgiIlnrtux] [-p] ad[=değer] ..."
 
 #: builtins.c:82
 msgid "local [option] name[=value] ..."
-msgstr "local [seçenek] isim[=değer] ..."
+msgstr "local [seçenek] ad[=değer] ..."
 
 #: builtins.c:85
 msgid "echo [-neE] [arg ...]"
@@ -2315,21 +2275,19 @@ msgstr "echo [-n] [arg ...]"
 
 #: builtins.c:92
 msgid "enable [-a] [-dnps] [-f filename] [name ...]"
-msgstr "enable [-a] [-dnps] [-f dosyaadı] [isim ...]"
+msgstr "enable [-a] [-dnps] [-f dosyaadı] [ad ...]"
 
 #: builtins.c:94
 msgid "eval [arg ...]"
 msgstr "eval [arg ...]"
 
 #: builtins.c:96
-#, fuzzy
 msgid "getopts optstring name [arg ...]"
-msgstr "getopts optstring isim [arg]"
+msgstr "getopts seçenekdizisi ad [arg ...]"
 
 #: builtins.c:98
-#, fuzzy
 msgid "exec [-cl] [-a name] [command [argument ...]] [redirection ...]"
-msgstr "exec [-cl] [-a isim] [komut [argümanlar ...]] [yönlendirme ...]"
+msgstr "exec [-cl] [-a ad] [komut [argüman ...]] [y. yönlendirme ...]"
 
 #: builtins.c:100
 msgid "exit [n]"
@@ -2353,19 +2311,15 @@ msgstr "bg [görev_tan ...]"
 
 #: builtins.c:116
 msgid "hash [-lr] [-p pathname] [-dt] [name ...]"
-msgstr "hash [-lr] [-p yoladı] [-dt] [isim ...]"
+msgstr "hash [-lr] [-p yoladı] [-dt] [ad ...]"
 
 #: builtins.c:119
 msgid "help [-dms] [pattern ...]"
 msgstr "help [-dms] [desen ...]"
 
 #: builtins.c:123
-msgid ""
-"history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg "
-"[arg...]"
-msgstr ""
-"history [-c] [-d başlangıç] [n] veya history -anrw [dosyaadı] veya history -"
-"ps arg [arg...]"
+msgid "history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg...]"
+msgstr "history [-c] [-d başlangıç] [n] veya history -anrw [dosyaadı] veya history -ps arg [arg...]"
 
 #: builtins.c:127
 msgid "jobs [-lnprs] [jobspec ...] or jobs -x command [args]"
@@ -2376,24 +2330,16 @@ msgid "disown [-h] [-ar] [jobspec ... | pid ...]"
 msgstr "disown [-h] [-ar] [görevtan ... | pid ...]"
 
 #: builtins.c:134
-msgid ""
-"kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l "
-"[sigspec]"
-msgstr ""
-"kill [-s sinspec | -n signum | -sigspec] pid | görevtan ... veya kill -l "
-"[sigspec]"
+msgid "kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]"
+msgstr "kill [-s sinspec | -n signum | -sigspec] pid | görevtan ... veya kill -l [sigspec]"
 
 #: builtins.c:136
 msgid "let arg [arg ...]"
 msgstr "let arg [arg ...]"
 
 #: builtins.c:138
-msgid ""
-"read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p "
-"prompt] [-t timeout] [-u fd] [name ...]"
-msgstr ""
-"read [-ers] [-a dizi] [-d sonlandırıcı] [-i metin] [-n nkarakter] [-N "
-"nkarakter] [-p istem] [-t zamanaşımı] [-u fd] [isim ...]"
+msgid "read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]"
+msgstr "read [-ers] [-a dizi] [-d sonlandırıcı] [-i metin] [-n nkarakter] [-N nkarakter] [-p istem] [-t zamanaşımı] [-u fd] [ad ...]"
 
 #: builtins.c:140
 msgid "return [n]"
@@ -2405,15 +2351,15 @@ msgstr "set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]"
 
 #: builtins.c:144
 msgid "unset [-f] [-v] [-n] [name ...]"
-msgstr "unset [-f] [-v] [-n] [isim ...]"
+msgstr "unset [-f] [-v] [-n] [ad ...]"
 
 #: builtins.c:146
 msgid "export [-fn] [name[=value] ...] or export -p"
-msgstr "export [-fn] [isim[=değer] ...] veya export -p"
+msgstr "export [-fn] [ad[=değer] ...] veya export -p"
 
 #: builtins.c:148
 msgid "readonly [-aAf] [name[=value] ...] or readonly -p"
-msgstr "readonly [-aAf] [isim[=değer] ...] veya readonly -p"
+msgstr "readonly [-aAf] [ad[=değer] ...] veya readonly -p"
 
 #: builtins.c:150
 msgid "shift [n]"
@@ -2445,7 +2391,7 @@ msgstr "trap [-lp] [[arg] sinyal_tan ...]"
 
 #: builtins.c:168
 msgid "type [-afptP] name [name ...]"
-msgstr "type [-afptP] isim [isim ...]"
+msgstr "type [-afptP] ad [ad ...]"
 
 #: builtins.c:171
 msgid "ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]"
@@ -2456,9 +2402,8 @@ msgid "umask [-p] [-S] [mode]"
 msgstr "umask [-p] [-S] [kip]"
 
 #: builtins.c:177
-#, fuzzy
 msgid "wait [-fn] [-p var] [id ...]"
-msgstr "wait [-n] [id ...]"
+msgstr "wait [-fn] [-p değişken] [kimlik ...]"
 
 #: builtins.c:181
 msgid "wait [pid ...]"
@@ -2466,7 +2411,7 @@ msgstr "wait [pid ...]"
 
 #: builtins.c:184
 msgid "for NAME [in WORDS ... ] ; do COMMANDS; done"
-msgstr "for İSİM [in KELİMELER ... ] ; do KOMUTLAR; done"
+msgstr "for AD [in SÖZCÜKLER ... ] ; do KOMUTLAR; done"
 
 #: builtins.c:186
 msgid "for (( exp1; exp2; exp3 )); do COMMANDS; done"
@@ -2474,7 +2419,7 @@ msgstr "for (( ifade1; ifade2; ifade3 )); do KOMUTLAR; done"
 
 #: builtins.c:188
 msgid "select NAME [in WORDS ... ;] do COMMANDS; done"
-msgstr "select İSİM [in KELİMELER ... ;] do KOMUTLAR; done"
+msgstr "select AD [in SÖZCÜKLER ... ;] do KOMUTLAR; done"
 
 #: builtins.c:190
 msgid "time [-p] pipeline"
@@ -2482,15 +2427,11 @@ msgstr "time [-p] zamantüneli"
 
 #: builtins.c:192
 msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac"
-msgstr "case KELİME in [DESEN [| DESEN]...) KOMUTLAR ;;]... esac"
+msgstr "case SÖZCÜK in [DİZGİ [| DİZGİ]...) KOMUTLAR ;;]... esac"
 
 #: builtins.c:194
-msgid ""
-"if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else "
-"COMMANDS; ] fi"
-msgstr ""
-"if KOMUTLAR; then KOMUTLAR; [ elif KOMUTLAR; then KOMUTLAR; ]... [ else "
-"KOMUTLAR; ] fi"
+msgid "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi"
+msgstr "if KOMUTLAR; then KOMUTLAR; [ elif KOMUTLAR; then KOMUTLAR; ]... [ else KOMUTLAR; ] fi"
 
 #: builtins.c:196
 msgid "while COMMANDS; do COMMANDS; done"
@@ -2502,11 +2443,11 @@ msgstr "until KOMUTLAR; do KOMUTLAR; done"
 
 #: builtins.c:200
 msgid "coproc [NAME] command [redirections]"
-msgstr "coproc [isim] command [yönlendirmeler]"
+msgstr "coproc [ad] command [yönlendirmeler]"
 
 #: builtins.c:202
 msgid "function name { COMMANDS ; } or name () { COMMANDS ; }"
-msgstr "function isim { KOMUTLAR ; } veya isim () { KOMUTLAR ; }"
+msgstr "function ad { KOMUTLAR ; } veya ad () { KOMUTLAR ; }"
 
 #: builtins.c:204
 msgid "{ COMMANDS ; }"
@@ -2526,7 +2467,7 @@ msgstr "[[ ifade ]]"
 
 #: builtins.c:212
 msgid "variables - Names and meanings of some shell variables"
-msgstr "variables - Bazı kabuk değişkenlerinin isim ve anlamları"
+msgstr "variables - Bazı kabuk değişkenlerinin ad ve anlamları"
 
 #: builtins.c:215
 msgid "pushd [-n] [+N | -N | dir]"
@@ -2549,47 +2490,24 @@ msgid "printf [-v var] format [arguments]"
 msgstr "printf [-v var] biçim [argümanlar]"
 
 #: builtins.c:231
-#, fuzzy
-msgid ""
-"complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-"
-"W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S "
-"suffix] [name ...]"
-msgstr ""
-"complete [-abcdefgjksuv] [-pr] [-DE] [-o seçenek] [-A işlem] [-G genelyol] [-"
-"W kelimelistesi]  [-F işlev] [-C komut] [-X süzgeçyolu] [-P önek] [-S sonek] "
-"[isim ...]"
+msgid "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [name ...]"
+msgstr "complete [-abcdefgjksuv] [-pr] [-DEI] [-o seçenek] [-A eylem] [-G global kısım] [-W sözcük listesi] [-F işlev] [-C komut] [-X süzgeç] [-P önek] [-S sonek] [ad ...]"
 
 #: builtins.c:235
-#, fuzzy
-msgid ""
-"compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-"
-"F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]"
-msgstr ""
-"compgen [-abcdefgjksuv] [-o seçenek] [-A işlem] [-G genelyol] [-W "
-"kelimelistesi]  [-F işlev] [-C komut] [-X süzgeçyolu] [-P önek] [-S sonek] "
-"[kelime]"
+msgid "compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]"
+msgstr "compgen [-abcdefgjksuv] [-o seçenek] [-A eylem] [-G global kısım] [-W sözcük listesi] [-F işlev] [-C komut] [-X süzgeç] [-P önek] [-S sonek] [sözcük]"
 
 #: builtins.c:239
-#, fuzzy
 msgid "compopt [-o|+o option] [-DEI] [name ...]"
-msgstr "compopt [-o|+o seçenek] [-DE] [isim ...]"
+msgstr "compopt [-o|+o seçenek] [-DEI] [ad ...]"
 
 #: builtins.c:242
-msgid ""
-"mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C "
-"callback] [-c quantum] [array]"
-msgstr ""
-"mapfile [-d sonlandrc] [-n say] [-O kaynak] [-s say] [-t] [-u fd] [-C "
-"geriçağırım] [-c parçacık] [dizi]"
+msgid "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]"
+msgstr "mapfile [-d sonlandrc] [-n say] [-O kaynak] [-s say] [-t] [-u fd] [-C geriçağırım] [-c parçacık] [dizi]"
 
 #: builtins.c:244
-#, fuzzy
-msgid ""
-"readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C "
-"callback] [-c quantum] [array]"
-msgstr ""
-"readarray [-n say] [-O kaynak] [-s say] [-t] [-u fd] [-C geriçağırım] [-c "
-"parçacık] [dizi]"
+msgid "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]"
+msgstr "readarray [-d sınırlandırıcı] [-n sayım] [-O köken] [-s sayım] [-t] [-u fd] [-C geri çağırma] [-c kuantum] [dizilim]"
 
 #: builtins.c:256
 msgid ""
@@ -2606,25 +2524,23 @@ msgid ""
 "      -p\tprint all defined aliases in a reusable format\n"
 "    \n"
 "    Exit Status:\n"
-"    alias returns true unless a NAME is supplied for which no alias has "
-"been\n"
+"    alias returns true unless a NAME is supplied for which no alias has been\n"
 "    defined."
 msgstr ""
 "Rumuz tanımla veya görüntüle.\n"
 "    \n"
-"    `alias' argümansız kullanıldığında standart çıktıda kullanılabilecek "
-"tüm\n"
-"    rumuzları `alias İSİM=DEĞER' biçiminde listeler.\n"
+"    `alias' argümansız kullanıldığında standart çıktıda kullanılabilecek tüm\n"
+"    rumuzları `alias AD=DEĞER' biçiminde listeler.\n"
 "    \n"
-"    Diğer durumda DEĞERi verilmiş her İSİM için bir rumuz tanımlanır.\n"
-"    DEĞERdeki boşluk, rumuz genişletildiğinde sonraki kelimenin rumuz\n"
+"    Diğer durumda DEĞERi verilmiş her AD için bir rumuz tanımlanır.\n"
+"    DEĞERdeki boşluk, rumuz genişletildiğinde sonraki sözcüğün rumuz\n"
 "    ikamesi için denetlenmesine sebep olur.\n"
 "    \n"
 "    Seçenekler:\n"
-"      -p\tTüm rumuzları tekrar kullanılabilir biçimde listele\n"
+"      -p\tTüm rumuzları yeniden kullanılabilir biçimde listele\n"
 "    \n"
 "    Çıkış Durumu:\n"
-"    Hiçbir şeyin rumuzu olmayan bir İSİM verilmedikçe alias doğru döndürür."
+"    Hiçbir şeyin rumuzu olmayan bir AD verilmedikçe alias doğru döndürür."
 
 #: builtins.c:278
 msgid ""
@@ -2640,7 +2556,7 @@ msgstr ""
 "    Seçenekler:\n"
 "      -a\ttüm rumuz tanımlamalarını kaldır\n"
 "    \n"
-"    İSİM mevcut olmayan bir rumuz olmadığı takdirde doğru\n"
+"    AD mevcut olmayan bir rumuz olmadığı takdirde doğru\n"
 "    döndür."
 
 #: builtins.c:291
@@ -2655,74 +2571,64 @@ msgid ""
 "    Options:\n"
 "      -m  keymap         Use KEYMAP as the keymap for the duration of this\n"
 "                         command.  Acceptable keymap names are emacs,\n"
-"                         emacs-standard, emacs-meta, emacs-ctlx, vi, vi-"
-"move,\n"
+"                         emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,\n"
 "                         vi-command, and vi-insert.\n"
 "      -l                 List names of functions.\n"
 "      -P                 List function names and bindings.\n"
 "      -p                 List functions and bindings in a form that can be\n"
 "                         reused as input.\n"
-"      -S                 List key sequences that invoke macros and their "
-"values\n"
-"      -s                 List key sequences that invoke macros and their "
-"values\n"
+"      -S                 List key sequences that invoke macros and their values\n"
+"      -s                 List key sequences that invoke macros and their values\n"
 "                         in a form that can be reused as input.\n"
 "      -V                 List variable names and values\n"
 "      -v                 List variable names and values in a form that can\n"
 "                         be reused as input.\n"
 "      -q  function-name  Query about which keys invoke the named function.\n"
-"      -u  function-name  Unbind all keys which are bound to the named "
-"function.\n"
+"      -u  function-name  Unbind all keys which are bound to the named function.\n"
 "      -r  keyseq         Remove the binding for KEYSEQ.\n"
 "      -f  filename       Read key bindings from FILENAME.\n"
 "      -x  keyseq:shell-command\tCause SHELL-COMMAND to be executed when\n"
 "    \t\t\t\tKEYSEQ is entered.\n"
-"      -X                 List key sequences bound with -x and associated "
-"commands\n"
+"      -X                 List key sequences bound with -x and associated commands\n"
 "                         in a form that can be reused as input.\n"
 "    \n"
 "    Exit Status:\n"
 "    bind returns 0 unless an unrecognized option is given or an error occurs."
 msgstr ""
-"Readline tuş atamalarını ve değişkenlerini ayarla.\n"
+"Readline düğme atamalarını ve değişkenlerini ayarla.\n"
 "    \n"
-"    Bir tuş dizilimini bir Readline işlevine veya makrosuna bağlar ya da\n"
+"    Bir düğme dizilimini bir Readline işlevine veya makrosuna bağlar veya\n"
 "    bir Readline değişkeni atar. Seçeneksiz argüman sözdizimi ~/.initrc\n"
 "    içinde bulunana  eşdeğerdir,  ama tek bir argüman olarak aktarılması\n"
 "    gerekir: bind '\"\\C-x\\C-r\": re-read-init-file'.\n"
 "    \n"
 "    Seçenekler:\n"
-"      -m  TUŞDİZİSİ         Bu komut süresince kısayol olarak TUŞDİZİSİ\n"
-"                         kullanılır. Olası kısayol isimleri:  emacs,\n"
+"      -m  DÜĞMEEŞLEM     Bu komut süresince kısayol olarak DÜĞMEEŞLEM\n"
+"                         kullanılır. Olası kısayol adları:  emacs,\n"
 "                         emacs-standard, emacs-meta, emacs-ctlx, vi,\n"
 "                         vi-move, vi-command ve vi-insert.\n"
-"      -l                 İşlev isimlerini listeler.\n"
-"      -P                 İşlev isimlerini ve kısayolları listeler.\n"
-"      -p                 İşlev isimlerini ve kısayolları, girdi olarak\n"
+"      -l                 İşlev adlarını listeler.\n"
+"      -P                 İşlev adlarını ve kısayolları listeler.\n"
+"      -p                 İşlev adlarını ve kısayolları, girdi olarak\n"
 "                         kullanılabilir biçimde listeler.\n"
-"      -S                 Makroları çağıran tuş dizilerini ve değerlerini\n"
+"      -S                 Makroları çağıran düğme dizilerini ve değerlerini\n"
 "                         listeler\n"
-"      -s                 Makroları çağıran tuş dizilerini ve değerlerini\n"
-"                         girdi olarak kullanılabilir biçimde listeler.       "
-"-V                 Değişken isimlerini ve değerlerini listeler.\n"
-"      -v                 Değişken isimlerini ve değerlerini girdi olarak\n"
+"      -s                 Makroları çağıran düğme dizilerini ve değerlerini\n"
+"                         girdi olarak kullanılabilir biçimde listeler.\n"
+"      -V                 Değişken adlarını ve değerlerini listeler.\n"
+"      -v                 Değişken adlarını ve değerlerini girdi olarak\n"
 "                         kullanılabilir biçimde listeler.\n"
-"      -q  İŞLEV          İsmi belirtilen İŞLEVi çağıran tuşlar hakkında "
-"sorgu.\n"
-"      -u  İŞLEV          İsmi belirtilen İŞLEVi çağıran tüm tuş "
-"kısayollarını\n"
+"      -q  İŞLEV          Adı belirtilen İŞLEVi çağıran düğmeler hakkında sorgu.\n"
+"      -u  İŞLEV          Adı belirtilen İŞLEVi çağıran tüm düğme kısayollarını\n"
 "                         kaldırır.\n"
-"      -r  TUŞDİZİSİ      TUŞDİZİSİ için mevcut kısayolları kaldırır.\n"
-"      -x  TUŞDİZİSİ:KABUK-KOMUTU\tTUŞDİZİSİnin her girilişinde KABUK-"
-"KOMUTUnun\n"
+"      -r  DÜĞMEDİZİSİ    DÜĞMEDİZİSİ için mevcut kısayolları kaldırır.\n"
+"      -x  DÜĞMEDİZİSİ:KABUK-KOMUTU\tDÜĞMEDİZİSİnin her girilişinde KABUK-KOMUTUnun\n"
 "    \t\t\t\tçalıştırılmasını sağlar.\n"
-"      -X                 Tuş dizilerini -x ve ilişkili komutlarını tekrar "
-"bir girdi olarak kullanılabilecek\n"
-"                         biçimde listeler.\n"
+"      -X                 Düğme dizilerini -x ve ilişkili komutlarını yeniden\n"
+"                           bir girdi olarak kullanılabilecek biçimde listeler.\n"
 "    \n"
 "    Çıkış Durumu:\n"
-"    tanınmayan bir seçenek girilmediği veya bir hata oluşmadığı durumda 0 "
-"döndürür."
+"    tanınmayan bir seçenek girilmediği veya bir hata oluşmadığı durumda 0 döndürür."
 
 #: builtins.c:330
 msgid ""
@@ -2736,8 +2642,7 @@ msgid ""
 msgstr ""
 "for, while veya until döngülerinden çık.\n"
 "    \n"
-"    Bir FOR, WHILE veya UNTIL döngüsünden çık. Eğer N belirtilmişse, N "
-"ilişkili\n"
+"    Bir FOR, WHILE veya UNTIL döngüsünden çık. Eğer N belirtilmişse N ilişkili\n"
 "    döngüden çık.\n"
 "    \n"
 "    Çıkış Durumu:\n"
@@ -2756,20 +2661,29 @@ msgstr ""
 "for, while veya until döngülerine devam et.\n"
 "    \n"
 "    İlişkili FOR, WHILE veya UNTIL döngüsünün sonraki adımına devam eder.\n"
-"    N tanımlanmışsa, N'inci ilişkili döngüye devam eder.\n"
+"    N tanımlanmışsa N'inci ilişkili döngüye devam eder.\n"
 "    \n"
 "    Çıkış Durumu:\n"
 "    N, 1 veya daha büyük olmadığında çıkış durumu 0'dır."
 
 #: builtins.c:354
 #, fuzzy
+#| msgid ""
+#| "Execute shell builtins.\n"
+#| "    \n"
+#| "    Execute SHELL-BUILTIN with arguments ARGs without performing command\n"
+#| "    lookup.  This is useful when you wish to reimplement a shell builtin\n"
+#| "    as a shell function, but need to execute the builtin within the function.\n"
+#| "    \n"
+#| "    Exit Status:\n"
+#| "    Returns the exit status of SHELL-BUILTIN, or false if SHELL-BUILTIN is\n"
+#| "    not a shell builtin.."
 msgid ""
 "Execute shell builtins.\n"
 "    \n"
 "    Execute SHELL-BUILTIN with arguments ARGs without performing command\n"
 "    lookup.  This is useful when you wish to reimplement a shell builtin\n"
-"    as a shell function, but need to execute the builtin within the "
-"function.\n"
+"    as a shell function, but need to execute the builtin within the function.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the exit status of SHELL-BUILTIN, or false if SHELL-BUILTIN is\n"
@@ -2778,14 +2692,11 @@ msgstr ""
 "Kabuk dahillerini çalıştır.\n"
 "    \n"
 "    Komut araması yapmadan KABUK-DAHİLİ, ARGÜMANLAR argümanları ile\n"
-"    çalıştır. Bu, bir KABUK-DAHİLİ, bir kabuk işlevi olarak tekrar uygulamak "
-"isteyip\n"
-"    işlev içerisinde dahili olanı da çalıştırmanız gerektiğinizde "
-"kullanışlıdır.\n"
+"    çalıştır. Bu, bir KABUK-DAHİLİ, bir kabuk işlevi olarak yeniden uygulamak isteyip\n"
+"    işlev içerisinde dahili olanı da çalıştırmanız gerektiğinizde kullanışlıdır.\n"
 "    \n"
 "    Çıkış Durumu:\n"
-"    KABUK-DAHİLİnin çıkış durumunu veya eğer KABUK-DAHİLİ değilse false "
-"döndürür."
+"    KABUK-DAHİLİnin çıkış durumunu veya eğer KABUK-DAHİLİ değilse false döndürür."
 
 #: builtins.c:369
 msgid ""
@@ -2804,38 +2715,29 @@ msgid ""
 msgstr ""
 "Geçerli alt yordam çağrısının bağlamını döndürür.\n"
 "    \n"
-"    İFADE olmadan, \"$satır $dosyaadı\" döndürür.  İFADE ile "
-"kullanıldığında\n"
-"    \"$satır $altyordam $dosyaadı\" döndürür; bu ek bilgi bir yığın izi "
-"sağlamak\n"
+"    İFADE olmadan, \"$satır $dosyaadı\" döndürür.  İFADE ile kullanıldığında\n"
+"    \"$satır $altyordam $dosyaadı\" döndürür; bu ek bilgi bir yığın izi sağlamak\n"
 "    için kullanılabilir.\n"
 "    \n"
 "    İFADE değeri, geçerli çerçeveden önce kaç tane çerçeve çağrılacağını\n"
 "    belirtir. Üst çerçeve 0. çerçevedir.    \n"
 "    Çıkış Durumu:\n"
-"    İFADE geçersiz olmadığı ve bir kabuk işlevi çalıştırmadığı durumda 0 "
-"döndürür."
+"    İFADE geçersiz olmadığı ve bir kabuk işlevi çalıştırmadığı durumda 0 döndürür."
 
 #: builtins.c:387
 msgid ""
 "Change the shell working directory.\n"
 "    \n"
-"    Change the current directory to DIR.  The default DIR is the value of "
-"the\n"
+"    Change the current directory to DIR.  The default DIR is the value of the\n"
 "    HOME shell variable.\n"
 "    \n"
-"    The variable CDPATH defines the search path for the directory "
-"containing\n"
-"    DIR.  Alternative directory names in CDPATH are separated by a colon "
-"(:).\n"
-"    A null directory name is the same as the current directory.  If DIR "
-"begins\n"
+"    The variable CDPATH defines the search path for the directory containing\n"
+"    DIR.  Alternative directory names in CDPATH are separated by a colon (:).\n"
+"    A null directory name is the same as the current directory.  If DIR begins\n"
 "    with a slash (/), then CDPATH is not used.\n"
 "    \n"
-"    If the directory is not found, and the shell option `cdable_vars' is "
-"set,\n"
-"    the word is assumed to be  a variable name.  If that variable has a "
-"value,\n"
+"    If the directory is not found, and the shell option `cdable_vars' is set,\n"
+"    the word is assumed to be  a variable name.  If that variable has a value,\n"
 "    its value is used for DIR.\n"
 "    \n"
 "    Options:\n"
@@ -2851,53 +2753,40 @@ msgid ""
 "    \t\tattributes as a directory containing the file attributes\n"
 "    \n"
 "    The default is to follow symbolic links, as if `-L' were specified.\n"
-"    `..' is processed by removing the immediately previous pathname "
-"component\n"
+"    `..' is processed by removing the immediately previous pathname component\n"
 "    back to a slash or the beginning of DIR.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns 0 if the directory is changed, and if $PWD is set successfully "
-"when\n"
+"    Returns 0 if the directory is changed, and if $PWD is set successfully when\n"
 "    -P is used; non-zero otherwise."
 msgstr ""
 "Kabuk çalışma dizinini değiştir.\n"
 "    \n"
-"    Geçerli dizini DİZİN olarak değiştir. Öntanımlı dizin kabuk değişkeninin "
-"EV\n"
+"    Geçerli dizini DİZİN olarak değiştir. Öntanımlı dizin kabuk değişkeninin EV\n"
 "    dizini değeridir.\n"
 "    \n"
-"    CDPATH değişkeni, DİZİN içeren dizinler için arama yolunu tanımlar. "
-"CDPATH\n"
-"    için alternatif dizin isimleri iki nokta (:) ile ayrılır.\n"
-"    Boş dizin adı, geçerli dizinle aynıdır. Eğer DİZİN bölü (/) ile "
-"başlıyorsa, CDPATH\n"
+"    CDPATH değişkeni, DİZİN içeren dizinler için arama yolunu tanımlar. CDPATH\n"
+"    için alternatif dizin adları iki nokta (:) ile ayrılır.\n"
+"    Boş dizin adı, geçerli dizinle aynıdır. Eğer DİZİN bölü (/) ile başlıyorsa CDPATH\n"
 "    kullanılmaz.\n"
 "    \n"
-"    Eğer dizin bulunamazsa ve kabuk seçeneği `cdable_vars' ayarlanmışsa, "
-"kelime\n"
-"    bir değişken adı olarak varsayılır. Eğer değişken bir değere sahipse, "
-"değeri DİZİN\n"
+"    Eğer dizin bulunamazsa ve kabuk seçeneği `cdable_vars' ayarlanmışsa sözcük\n"
+"    bir değişken adı olarak varsayılır. Eğer değişken bir değere sahipse değeri DİZİN\n"
 "    için kullanılır\n"
 "    \n"
 "    Seçenekler:\n"
-"        -L\tsembolik bağlantıların takip edilmesini zorla: '..' "
-"örneklerinin\n"
+"        -L\tsembolik bağlantıların takip edilmesini zorla: '..' örneklerinin\n"
 "    \t\tişlenmesinden sonra DİZİN içindeki sembolik bağlantıları çöz\n"
-"        -P\tsembolik bağlantıları takip etmeden fiziksel dizini kullan: '..' "
-"örneklerinin\n"
+"        -P\tsembolik bağlantıları takip etmeden fiziksel dizini kullan: '..' örneklerinin\n"
 "    \t\tişlenmesinden önce DİZİN içindeki sembolik bağlantıları çöz\n"
-"        -e\teğer -P seçeneği belirtilmişse ve geçerli çalışma dizini "
-"başarılı şekilde\n"
-"    \tbelirlenemiyorsa, sıfır olmayan bir durumla çık\n"
-"       -@\tdestekleyen sistemlerde, dosya niteliklerini içeren bir dizin "
-"olarak uzatılmış\n"
+"        -e\teğer -P seçeneği belirtilmişse ve geçerli çalışma dizini başarılı şekilde\n"
+"    \tbelirlenemiyorsa sıfır olmayan bir durumla çık\n"
+"       -@\tdestekleyen sistemlerde, dosya niteliklerini içeren bir dizin olarak uzatılmış\n"
 "           niteliklere sahip bir dosya sun    \n"
-"    Öntanımlı olan `-L' tanımlanmış gibi sembolik bağlantıları takip "
-"etmektir.\n"
+"    Öntanımlı olan `-L' tanımlanmış gibi sembolik bağlantıları takip etmektir.\n"
 "    \n"
 "    Çıkış Durumu:\n"
-"    Eğer dizin değişmişse ve -P kullanıldığında $PWD başarılı ayarlanırsa 0; "
-"diğer durumda\n"
+"    Eğer dizin değişmişse ve -P kullanıldığında $PWD başarılı ayarlanırsa 0; diğer durumda\n"
 "    sıfır olmayan bir değer döndürür."
 
 #: builtins.c:425
@@ -2915,11 +2804,10 @@ msgid ""
 "    Returns 0 unless an invalid option is given or the current directory\n"
 "    cannot be read."
 msgstr ""
-"Geçerli çalışma dizininin ismini yazdır.\n"
+"Geçerli çalışma dizininin adını yazdır.\n"
 "    \n"
 "    Seçenekler:\n"
-"      -L\teğer geçerli çalışma dizinini isimlendirmişse $PWD değerini "
-"yazdır\n"
+"      -L\teğer geçerli çalışma dizinini adlandırmışsa $PWD değerini yazdır\n"
 "      -P\thiçbir sembolik bağlantı kullanmadan fiziksel dizini yazdır\n"
 "    \n"
 "    Öntanımlı olarak `pwd', `-L' tanımlanmış şekilde davranır.\n"
@@ -2972,8 +2860,7 @@ msgid ""
 "Execute a simple command or display information about commands.\n"
 "    \n"
 "    Runs COMMAND with ARGS suppressing  shell function lookup, or display\n"
-"    information about the specified COMMANDs.  Can be used to invoke "
-"commands\n"
+"    information about the specified COMMANDs.  Can be used to invoke commands\n"
 "    on disk when a function with the same name exists.\n"
 "    \n"
 "    Options:\n"
@@ -2987,15 +2874,12 @@ msgid ""
 msgstr ""
 "Basit bir komut çalıştır veya komutlar hakkında bilgi görüntüle.\n"
 "    \n"
-"    KOMUTU ARGümanları ile kabuk işlevi aramasını ihmal ederek çalıştırır "
-"veya\n"
-"    belirtilen KOMUTlar hakkında bilgi görüntüler. Aynı isimde bir işlev  "
-"varsa\n"
+"    KOMUTU ARGümanları ile kabuk işlevi aramasını ihmal ederek çalıştırır veya\n"
+"    belirtilen KOMUTLAR hakkında bilgi görüntüler. Aynı adda bir işlev varsa\n"
 "    diskte komutları çalıştırmak için kullanılabilir.\n"
 "    \n"
 "    Seçenekler:\n"
-"      -p    YOL için, tüm standart yardımcıları bulabilmek için bir "
-"öntanımlı değer\n"
+"      -p    YOL için, tüm standart yardımcıları bulabilmek için bir öntanımlı değer\n"
 "    \tkullan\n"
 "      -v    `type' dahilisine benzer bir KOMUT açıklaması göster\n"
 "      -V    her KOMUTun fazla açıklamasını göster\n"
@@ -3005,6 +2889,42 @@ msgstr ""
 
 #: builtins.c:490
 #, fuzzy
+#| msgid ""
+#| "Set variable values and attributes.\n"
+#| "    \n"
+#| "    Declare variables and give them attributes.  If no NAMEs are given,\n"
+#| "    display the attributes and values of all variables.\n"
+#| "    \n"
+#| "    Options:\n"
+#| "      -f\trestrict action or display to function names and definitions\n"
+#| "      -F\trestrict display to function names only (plus line number and\n"
+#| "    \t\tsource file when debugging)\n"
+#| "      -g\tcreate global variables when used in a shell function; otherwise\n"
+#| "    \t\tignored\n"
+#| "      -p\tdisplay the attributes and value of each NAME\n"
+#| "    \n"
+#| "    Options which set attributes:\n"
+#| "      -a\tto make NAMEs indexed arrays (if supported)\n"
+#| "      -A\tto make NAMEs associative arrays (if supported)\n"
+#| "      -i\tto make NAMEs have the `integer' attribute\n"
+#| "      -l\tto convert NAMEs to lower case on assignment\n"
+#| "      -n\tmake NAME a reference to the variable named by its value\n"
+#| "      -r\tto make NAMEs readonly\n"
+#| "      -t\tto make NAMEs have the `trace' attribute\n"
+#| "      -u\tto convert NAMEs to upper case on assignment\n"
+#| "      -x\tto make NAMEs export\n"
+#| "    \n"
+#| "    Using `+' instead of `-' turns off the given attribute.\n"
+#| "    \n"
+#| "    Variables with the integer attribute have arithmetic evaluation (see\n"
+#| "    the `let' command) performed when the variable is assigned a value.\n"
+#| "    \n"
+#| "    When used in a function, `declare' makes NAMEs local, as with the `local'\n"
+#| "    command.  The `-g' option suppresses this behavior.\n"
+#| "    \n"
+#| "    Exit Status:\n"
+#| "    Returns success unless an invalid option is supplied or a variable\n"
+#| "    assignment error occurs."
 msgid ""
 "Set variable values and attributes.\n"
 "    \n"
@@ -3037,8 +2957,7 @@ msgid ""
 "    Variables with the integer attribute have arithmetic evaluation (see\n"
 "    the `let' command) performed when the variable is assigned a value.\n"
 "    \n"
-"    When used in a function, `declare' makes NAMEs local, as with the "
-"`local'\n"
+"    When used in a function, `declare' makes NAMEs local, as with the `local'\n"
 "    command.  The `-g' option suppresses this behavior.\n"
 "    \n"
 "    Exit Status:\n"
@@ -3047,43 +2966,37 @@ msgid ""
 msgstr ""
 "Değişken değer ve niteliklerini ayarla.\n"
 "    \n"
-"    Değişkenleri ayarla ve nitelik ver. Eğer İSİM verilmemişse, tüm "
-"değişkenlerin,    niteliklerini ve değerlerini görüntüle.\n"
+"    Değişkenleri ayarla ve nitelik ver. Eğer AD verilmemişse tüm değişkenlerin,    niteliklerini ve değerlerini görüntüle.\n"
 "    \n"
 "    Seçenekler:\n"
-"      -f\teylemi veya işlev ismi ile tanımları gösterimini kısıtla\n"
-"      -F\tsadece işlev isim gösterimlerini kısıtla (ek olarak satır sayısı "
-"ve hata ayıklarken\n"
+"      -f\teylemi veya işlev adı ile tanımları gösterimini kısıtla\n"
+"      -F\tyalnızca işlev ad gösterimlerini kısıtla (ek olarak satır sayısı ve hata ayıklarken\n"
 "    \t\tkaynak dosyayı)\n"
-"      -g\tbir kabuk fonksiyonunda kullanıldığında evrensel değişken "
-"oluştur,\n"
-"    \t\taksi takdirde yoksayılır\n"
-"      -p\ther İSİMin değeri ve niteliklerini görüntüle\n"
+"      -g\tbir kabuk işlevinde kullanıldığında evrensel değişken oluştur,\n"
+"    \t\taksi takdirde yok sayılır\n"
+"      -p\ther AD'ın değeri ve niteliklerini görüntüle\n"
 "    \n"
 "    Nitelik ayarlayan seçenekler:\n"
-"      -a\tİSİMleri indisli diziler yapmak için (destekleniyorsa)\n"
-"      -A\tİSİMleri ilişkisel dizi yapmak için (destekleniyorsa)\n"
-"      -i\tİSİMleri `integer' niteliği sahibi yapmak için\n"
-"      -l\tİSİMleri atamada küçük harfe dönüştürmek için\n"
-"      -n\tİSİMi değeriyle isimlendirilmiş bir değişkene referans yapmak "
-"için\n"
-"      -r\tİSİMleri salt okunur yapmak için\n"
-"      -t\tİSİMlerin `trace' niteliği sahibi yapmak için\n"
-"      -u\tİSİMleri atamada büyük harfe dönüştürmek için\n"
-"      -x\tİSİMleri dışarı çıkarabilir yapmak için\n"
+"      -a\tAD'ları indisli diziler yapmak için (destekleniyorsa)\n"
+"      -A\tAD'ları ilişkisel dizi yapmak için (destekleniyorsa)\n"
+"      -i\tAD'ları `integer' niteliği sahibi yapmak için\n"
+"      -l\tAD'ları atamada küçük harfe dönüştürmek için\n"
+"      -n\tAD'ı değeriyle ad bir değişkene referans yapmak için\n"
+"      -r\tAD'ları saltokunur yapmak için\n"
+"      -t\tAD'ların `trace' niteliği sahibi yapmak için\n"
+"      -u\tAD'ları atamada büyük harfe dönüştürmek için\n"
+"      -x\tAD'ları dışarı çıkarabilir yapmak için\n"
 "    \n"
 "    `-' yerine `+' kullanmak belirtilen niteliği kapatır.\n"
 "    \n"
-"    Tamsayı niteliğine sahip değişkenler, bir değere atandıklarında     "
-"aritmetik değerlendirmeye tabi tutulurlar (`let' komutuna bakın).\n"
+"    Tamsayı niteliğine sahip değişkenler, bir değere atandıklarında     aritmetik değerlendirmeye tabi tutulurlar (`let' komutuna bakın).\n"
 "    \n"
-"    Bir fonksiyonda kullanıldığında, `declare' İSİMleri, `local' komutu\n"
+"    Bir işlevde kullanıldığında, `declare' AD'ları, `local' komutu\n"
 "gibi yerel\n"
 "    yapar.  `-g' seçeneği bu davranışı iptal eder.\n"
 "    \n"
 "    Çıkış Durumu:\n"
-"    Geçersiz bir değer sağlanmadığı veya değişken atama hatası olmadığı "
-"sürece\n"
+"    Geçersiz bir değer sağlanmadığı veya değişken atama hatası olmadığı sürece\n"
 "    başarılı döner."
 
 #: builtins.c:532
@@ -3092,7 +3005,7 @@ msgid ""
 "    \n"
 "    A synonym for `declare'.  See `help declare'."
 msgstr ""
-"Değişken isim ve niteliklerini ayarla.\n"
+"Değişken ad ve niteliklerini ayarla.\n"
 "    \n"
 "    `declare' ile eş anlamlıdır.  Bkz. `help declare'."
 
@@ -3112,25 +3025,52 @@ msgid ""
 msgstr ""
 "Yerel değişkenleri tanımla.\n"
 "    \n"
-"    İSİM adıyla bir yerel değişken oluştur ve DEĞER ata. SEÇENEK `declare'\n"
+"    AD adıyla bir yerel değişken oluştur ve DEĞER ata. SEÇENEK `declare'\n"
 "    tarafından kabul edilen herhangi bir seçenek olabilir.\n"
 "    \n"
-"    Yerel değişkenler sadece bir işlev içerisinde kullanılabilirler ve "
-"tanımlandıkları\n"
+"    Yerel değişkenler yalnızca bir işlev içerisinde kullanılabilirler ve tanımlandıkları\n"
 "    işleve ve alt işlevlerine görünebilirler.\n"
 "    \n"
 "    Çıkış Durumu:\n"
-"    Geçersiz bir seçenek verilmediğinde, bir değişken hatası oluşmadığında "
-"veya\n"
+"    Geçersiz bir seçenek verilmediğinde, bir değişken hatası oluşmadığında veya\n"
 "    kabuk bir işlev çalıştırmıyorsa başarılı döner."
 
 #: builtins.c:557
 #, fuzzy
+#| msgid ""
+#| "Write arguments to the standard output.\n"
+#| "    \n"
+#| "    Display the ARGs, separated by a single space character and followed by a\n"
+#| "    newline, on the standard output.\n"
+#| "    \n"
+#| "    Options:\n"
+#| "      -n\tdo not append a newline\n"
+#| "      -e\tenable interpretation of the following backslash escapes\n"
+#| "      -E\texplicitly suppress interpretation of backslash escapes\n"
+#| "    \n"
+#| "    `echo' interprets the following backslash-escaped characters:\n"
+#| "      \\a\talert (bell)\n"
+#| "      \\b\tbackspace\n"
+#| "      \\c\tsuppress further output\n"
+#| "      \\e\tescape character\n"
+#| "      \\E\tescape character\n"
+#| "      \\f\tform feed\n"
+#| "      \\n\tnew line\n"
+#| "      \\r\tcarriage return\n"
+#| "      \\t\thorizontal tab\n"
+#| "      \\v\tvertical tab\n"
+#| "      \\\\\tbackslash\n"
+#| "      \\0nnn\tthe character whose ASCII code is NNN (octal).  NNN can be\n"
+#| "    \t\t0 to 3 octal digits\n"
+#| "      \\xHH\tthe eight-bit character whose value is HH (hexadecimal).  HH\n"
+#| "    \t\tcan be one or two hex digits\n"
+#| "    \n"
+#| "    Exit Status:\n"
+#| "    Returns success unless a write error occurs."
 msgid ""
 "Write arguments to the standard output.\n"
 "    \n"
-"    Display the ARGs, separated by a single space character and followed by "
-"a\n"
+"    Display the ARGs, separated by a single space character and followed by a\n"
 "    newline, on the standard output.\n"
 "    \n"
 "    Options:\n"
@@ -3154,11 +3094,9 @@ msgid ""
 "    \t\t0 to 3 octal digits\n"
 "      \\xHH\tthe eight-bit character whose value is HH (hexadecimal).  HH\n"
 "    \t\tcan be one or two hex digits\n"
-"      \\uHHHH\tthe Unicode character whose value is the hexadecimal value "
-"HHHH.\n"
+"      \\uHHHH\tthe Unicode character whose value is the hexadecimal value HHHH.\n"
 "    \t\tHHHH can be one to four hex digits.\n"
-"      \\UHHHHHHHH the Unicode character whose value is the hexadecimal "
-"value\n"
+"      \\UHHHHHHHH the Unicode character whose value is the hexadecimal value\n"
 "    \t\tHHHHHHHH. HHHHHHHH can be one to eight hex digits.\n"
 "    \n"
 "    Exit Status:\n"
@@ -3186,8 +3124,7 @@ msgstr ""
 "      \\t\tyatay sekme\n"
 "      \\v\tdikey sekme\n"
 "      \\\\\tters bölü\n"
-"      \\0nnn\tASCII kodu NNN (sekizlik) olan karakter.  NNN 0-3 arası "
-"sekizli\n"
+"      \\0nnn\tASCII kodu NNN (sekizlik) olan karakter.  NNN 0-3 arası sekizli\n"
 "    \t\trakamlardan oluşabilir.\n"
 "      \\xHH\tdeğeri HH (onaltılık) olan sekiz bit karakter. HH bir veya iki\n"
 "    \t\tonaltılık rakam olabilir\n"
@@ -3245,35 +3182,32 @@ msgid ""
 msgstr ""
 "Kabuk yerleşiklerini etkinleştir/devre dışı bırak.\n"
 "    \n"
-"    Dahili kabuk komutlarını etkinleştirir ve devre dışı bırakır.  Devre "
-"dışı\n"
-"    bırakmak bir kabuk yerleşiği ile aynı isme sahip bir disk komutunu tam\n"
+"    Dahili kabuk komutlarını etkinleştirir ve devre dışı bırakır.  Devre dışı\n"
+"    bırakmak bir kabuk yerleşiği ile aynı ada sahip bir disk komutunu tam\n"
 "    bir yol adı kullanmadan çalıştırmanızı sağlar.    \n"
 "    Seçenekler:\n"
-"      -a\ttüm yerleşikler listesini etkin olup olmadıkları bilgisi ile "
-"yazdır\n"
-"      -n\ther İSİMi devre dışı bırak veya devre dışı olanları listele\n"
-"      -p\tyerleşik listesini tekrar kullanılabilir biçimde yazdır\n"
-"      -s\tsadece Posix `özel' yerleşiklerinin isimlerini yazdır\n"
+"      -a\ttüm yerleşikler listesini etkin olup olmadıkları bilgisi ile yazdır\n"
+"      -n\ther AD'ı devre dışı bırak veya devre dışı olanları listele\n"
+"      -p\tyerleşik listesini yeniden kullanılabilir biçimde yazdır\n"
+"      -s\tyalnızca Posix `özel' yerleşiklerinin adlarını yazdır\n"
 "    \n"
 "    Hareketli yüklemeyi denetleyen seçenekler:\n"
-"      -f\tİSİM yerleşiğini paylaşılan DOSYAADI nesnesinden yükle\n"
+"      -f\tAD yerleşiğini paylaşılan DOSYAADI nesnesinden yükle\n"
 "      -d\t-f ile yüklenmiş bir yerleşiği kaldır\n"
 "    \n"
-"    Seçenek olmazsa her İSİM etkinleştirilir.\n"
+"    Seçenek olmazsa her AD etkinleştirilir.\n"
 "    \n"
 "    Kabuk yerleşiği sürümü yerine $PATH içerisinde bulunan `test' kullanmak\n"
 "    için `enable -n test' yazın.\n"
 "    \n"
 "    Çıktı Durumu:\n"
-"    İSİM bir kabuk yerleşiği değilse ve hata oluşmazsa başarılı döner."
+"    AD bir kabuk yerleşiği değilse ve hata oluşmazsa başarılı döner."
 
 #: builtins.c:640
 msgid ""
 "Execute arguments as a shell command.\n"
 "    \n"
-"    Combine ARGs into a single string, use the result as input to the "
-"shell,\n"
+"    Combine ARGs into a single string, use the result as input to the shell,\n"
 "    and execute the resulting commands.\n"
 "    \n"
 "    Exit Status:\n"
@@ -3281,8 +3215,7 @@ msgid ""
 msgstr ""
 "Argümanları kabuk komutu olarak çalıştır.\n"
 "    \n"
-"    ARGümanları tek bir dizgeye birleştir, sonucu kabuğa girdi olarak "
-"kullan,\n"
+"    ARGümanları tek bir diziye birleştir, sonucu kabuğa girdi olarak kullan,\n"
 "    ve sonuçlanan komutları çalıştır.\n"
 "    \n"
 "    Çıkış Durumu:\n"
@@ -3290,6 +3223,44 @@ msgstr ""
 
 #: builtins.c:652
 #, fuzzy
+#| msgid ""
+#| "Parse option arguments.\n"
+#| "    \n"
+#| "    Getopts is used by shell procedures to parse positional parameters\n"
+#| "    as options.\n"
+#| "    \n"
+#| "    OPTSTRING contains the option letters to be recognized; if a letter\n"
+#| "    is followed by a colon, the option is expected to have an argument,\n"
+#| "    which should be separated from it by white space.\n"
+#| "    \n"
+#| "    Each time it is invoked, getopts will place the next option in the\n"
+#| "    shell variable $name, initializing name if it does not exist, and\n"
+#| "    the index of the next argument to be processed into the shell\n"
+#| "    variable OPTIND.  OPTIND is initialized to 1 each time the shell or\n"
+#| "    a shell script is invoked.  When an option requires an argument,\n"
+#| "    getopts places that argument into the shell variable OPTARG.\n"
+#| "    \n"
+#| "    getopts reports errors in one of two ways.  If the first character\n"
+#| "    of OPTSTRING is a colon, getopts uses silent error reporting.  In\n"
+#| "    this mode, no error messages are printed.  If an invalid option is\n"
+#| "    seen, getopts places the option character found into OPTARG.  If a\n"
+#| "    required argument is not found, getopts places a ':' into NAME and\n"
+#| "    sets OPTARG to the option character found.  If getopts is not in\n"
+#| "    silent mode, and an invalid option is seen, getopts places '?' into\n"
+#| "    NAME and unsets OPTARG.  If a required argument is not found, a '?'\n"
+#| "    is placed in NAME, OPTARG is unset, and a diagnostic message is\n"
+#| "    printed.\n"
+#| "    \n"
+#| "    If the shell variable OPTERR has the value 0, getopts disables the\n"
+#| "    printing of error messages, even if the first character of\n"
+#| "    OPTSTRING is not a colon.  OPTERR has the value 1 by default.\n"
+#| "    \n"
+#| "    Getopts normally parses the positional parameters ($0 - $9), but if\n"
+#| "    more arguments are given, they are parsed instead.\n"
+#| "    \n"
+#| "    Exit Status:\n"
+#| "    Returns success if an option is found; fails if the end of options is\n"
+#| "    encountered or an error occurs."
 msgid ""
 "Parse option arguments.\n"
 "    \n"
@@ -3331,59 +3302,39 @@ msgid ""
 msgstr ""
 "Seçenek argümanlarını ayıklar.\n"
 "    \n"
-"    Getopts  kabuk betikleri tarafından  konumsal parametreleri "
-"çözümlemekte\n"
+"    Getopts  kabuk betikleri tarafından  konumsal parametreleri çözümlemekte\n"
 "    kullanılır.\n"
 "    \n"
-"    SÇNDİZGESİ  tanınan seçenek karakterlerini içerir; bir karakterden "
-"sonra\n"
-"    bir ikinokta imi (:) geliyorsa seçeneğin ondan bir boşlukla ayrılmış "
-"bir\n"
+"    SÇNSİ  tanınan seçenek karakterlerini içerir; bir karakterden sonra\n"
+"    bir ikinokta imi (:) geliyorsa seçeneğin ondan bir boşlukla ayrılmış bir\n"
 "    argümana sahip olacağı umulur.\n"
 "    \n"
-"    Her  çağrılışında  getopts  işlenecek  sonraki argümanın indisini "
-"OPTIND\n"
-"    kabuk değişkenine ve  AD  değişkenini de  mevcut  değilse  "
-"ilklendirerek\n"
-"    sonraki seçeneği $AD kabuk değişkenine yerleştirir. OPTIND kabuğun ya "
-"da\n"
-"    bir  kabuk  betiğinin her çağrılışında 1 ile ilklendirilir.  Bir "
-"seçenek\n"
-"    bir  argüman  gerektirdiğinde  getopts   argümanı   OPTARG   "
-"değişkenine\n"
+"    Her  çağrılışında  getopts  işlenecek  sonraki argümanın indisini OPTIND\n"
+"    kabuk değişkenine ve  AD  değişkenini de  mevcut  değilse  ilklendirerek\n"
+"    sonraki seçeneği $AD kabuk değişkenine yerleştirir. OPTIND kabuğun veya\n"
+"    bir  kabuk  betiğinin her çağrılışında 1 ile ilklendirilir.  Bir seçenek\n"
+"    bir  argüman  gerektirdiğinde  getopts   argümanı   OPTARG   değişkenine\n"
 "    yerleştirir.\n"
 "    \n"
-"    getopts  hataları  iki  yolla  raporlayabilir.   Eğer  SÇNDİZGESİnin "
-"ilk\n"
-"    karakteri  bir  ':'  ise sessiz  hata  raporlaması kullanılır.  Bu "
-"kipte\n"
-"    hiçbir hata iletisi  basılmaz.  Bir geçersiz  seçenek  saptanırsa "
-"getopt\n"
-"    OPTARG'a  bulunan  seçenek karakterini yerleştirir.  Bir gerekli "
-"argüman\n"
-"    verilmemişse, getopts  AD'a bir  ':'  yerleştirir.  Getopts sessiz "
-"kipte\n"
-"    değilse ve geçersiz bir seçenek görüldüğünde, getopts ? karakterini "
-"AD'a\n"
-"    yerleştirir ve  OPTARG  değişkenini  kaldırır.  Eğer bir gerekli "
-"argüman\n"
-"    bulunamazsa   ve   getopts   sessiz   kipte  değilse  AD'a  ?  "
-"karakteri\n"
+"    getopts  hataları  iki  yolla  raporlayabilir.   Eğer  SÇNSİnin ilk\n"
+"    karakteri  bir  ':'  ise sessiz  hata  raporlaması kullanılır.  Bu kipte\n"
+"    hiçbir hata iletisi  basılmaz.  Bir geçersiz  seçenek  saptanırsa getopt\n"
+"    OPTARG'a  bulunan  seçenek karakterini yerleştirir.  Bir gerekli argüman\n"
+"    verilmemişse getopts  AD'a bir  ':'  yerleştirir.  Getopts sessiz kipte\n"
+"    değilse ve geçersiz bir seçenek görüldüğünde, getopts ? karakterini AD'a\n"
+"    yerleştirir ve  OPTARG  değişkenini  kaldırır.  Eğer bir gerekli argüman\n"
+"    bulunamazsa   ve   getopts   sessiz   kipte  değilse  AD'a  ?  karakteri\n"
 "    yerleştirilir, OPTARG kaldırılır ve bir tanı iletisi basılır.\n"
 "    \n"
-"    OPTERR  değişkeninin  değeri  0  ise SÇNDİZGESİnin ilk karakteri bir "
-"':'\n"
-"    olmasa  bile  hata  iletileri gösterilmez. OPTERR değişkeninin "
-"öntanımlı\n"
+"    OPTERR  değişkeninin  değeri  0  ise SÇNSİnin ilk karakteri bir ':'\n"
+"    olmasa  bile  hata  iletileri gösterilmez. OPTERR değişkeninin öntanımlı\n"
 "    değeri 1'dir.\n"
 "    \n"
-"    Getopts  normalde  konumsal  parametreleri ($0 - $9) çözümlese de  "
-"başka\n"
+"    Getopts  normalde  konumsal  parametreleri ($0 - $9) çözümlese de  başka\n"
 "    argümanlar verilmişse bunları çözümler.\n"
 "    \n"
 "    Çıktı Durumu:\n"
-"    Bir seçenek bulunduğunda başarılı, seçenek sonuna gelindiğinde veya "
-"bir     hata oluştuğunda başarısız döner.\n"
+"    Bir seçenek bulunduğunda başarılı, seçenek sonuna gelindiğinde veya bir     hata oluştuğunda başarısız döner.\n"
 "    encountered or an error occurs."
 
 #: builtins.c:694
@@ -3391,8 +3342,7 @@ msgid ""
 "Replace the shell with the given command.\n"
 "    \n"
 "    Execute COMMAND, replacing this shell with the specified program.\n"
-"    ARGUMENTS become the arguments to COMMAND.  If COMMAND is not "
-"specified,\n"
+"    ARGUMENTS become the arguments to COMMAND.  If COMMAND is not specified,\n"
 "    any redirections take effect in the current shell.\n"
 "    \n"
 "    Options:\n"
@@ -3400,27 +3350,24 @@ msgid ""
 "      -c\texecute COMMAND with an empty environment\n"
 "      -l\tplace a dash in the zeroth argument to COMMAND\n"
 "    \n"
-"    If the command cannot be executed, a non-interactive shell exits, "
-"unless\n"
+"    If the command cannot be executed, a non-interactive shell exits, unless\n"
 "    the shell option `execfail' is set.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success unless COMMAND is not found or a redirection error "
-"occurs."
+"    Returns success unless COMMAND is not found or a redirection error occurs."
 msgstr ""
 "Kabuğu verilen komutla değiştir.\n"
 "    \n"
 "    KOMUTU, belirtilen program ile değiştirerek çalıştır.\n"
-"    ARGÜMANLAR, KOMUTUN argümanları olur. Eğer KOMUT belirtilmemişse, tüm\n"
+"    ARGÜMANLAR, KOMUTUN argümanları olur. Eğer KOMUT belirtilmemişse tüm\n"
 "    yönlendirmeler geçerli kabukta uygulanır.\n"
 "    \n"
 "    Seçenekler:\n"
-"      -a isim\tİSMİ, KOMUTun sıfırıncı argümanına ata\n"
+"      -a ad\tAD'ı, KOMUT'un sıfırıncı argümanına ata\n"
 "      -c\tKOMUTu boş bir ortamla çalıştır\n"
 "      -l\tKOMUTun sıfırıncı argümanına bir çizgi koy\n"
 "    \n"
-"    Eğer komut çalıştırılamıyorsa, `execfail' ayarlanmadığı sürece "
-"etkileşimsiz kabuk\n"
+"    Eğer komut çalıştırılamıyorsa `execfail' ayarlanmadığı sürece etkileşimsiz kabuk\n"
 "    çıkış yapar.\n"
 "    \n"
 "    Çıkış Durumu:\n"
@@ -3442,8 +3389,7 @@ msgstr ""
 msgid ""
 "Exit a login shell.\n"
 "    \n"
-"    Exits a login shell with exit status N.  Returns an error if not "
-"executed\n"
+"    Exits a login shell with exit status N.  Returns an error if not executed\n"
 "    in a login shell."
 msgstr ""
 "Oturum kabuğundan çık.\n"
@@ -3455,15 +3401,13 @@ msgstr ""
 msgid ""
 "Display or execute commands from the history list.\n"
 "    \n"
-"    fc is used to list or edit and re-execute commands from the history "
-"list.\n"
+"    fc is used to list or edit and re-execute commands from the history list.\n"
 "    FIRST and LAST can be numbers specifying the range, or FIRST can be a\n"
 "    string, which means the most recent command beginning with that\n"
 "    string.\n"
 "    \n"
 "    Options:\n"
-"      -e ENAME\tselect which editor to use.  Default is FCEDIT, then "
-"EDITOR,\n"
+"      -e ENAME\tselect which editor to use.  Default is FCEDIT, then EDITOR,\n"
 "    \t\tthen vi\n"
 "      -l \tlist lines instead of editing\n"
 "      -n\tomit line numbers when listing\n"
@@ -3477,18 +3421,14 @@ msgid ""
 "    the last command.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success or status of executed command; non-zero if an error "
-"occurs."
+"    Returns success or status of executed command; non-zero if an error occurs."
 msgstr ""
 "Geçmiş listesindeki komutları görüntüle veya çalıştır\n"
 "    \n"
-"    fc, komut  geçmişi  listesindeki  komutları  listelemek,  düzenlemek  "
-"ve\n"
-"    yeniden  çalıştırmak  için  kullanılır. İLK ve SON olarak numara "
-"vererek\n"
-"    bir aralık belirtilebileceği gibi İLK bir dizge de olabilir, bu "
-"takdirde\n"
-"    bu dizge ile başlayan en son komut anlamına gelir.\n"
+"    fc, komut  geçmişi  listesindeki  komutları  listelemek,  düzenlemek  ve\n"
+"    yeniden  çalıştırmak  için  kullanılır. İLK ve SON olarak numara vererek\n"
+"    bir aralık belirtilebileceği gibi İLK bir dizi de olabilir, bu takdirde\n"
+"    bu dizi ile başlayan en son komut anlamına gelir.\n"
 "    \n"
 "    Seçenekler:\n"
 "       -e DÜZENLEYİCİ ile hangi düzenleyicinin kullanılacağı belirtilir.\n"
@@ -3505,8 +3445,7 @@ msgstr ""
 "    r' yazarak en son komut çalıştırılabilir.\n"
 "    \n"
 "    Çıktı Durumu:\n"
-"    Başarılı veya çalıştırılan komut durumu döndürülür; hata oluştuğunda "
-"sıfır harici değer döner."
+"    Başarılı veya çalıştırılan komut durumu döndürülür; hata oluştuğunda sıfır harici değer döner."
 
 #: builtins.c:764
 msgid ""
@@ -3532,31 +3471,26 @@ msgstr ""
 msgid ""
 "Move jobs to the background.\n"
 "    \n"
-"    Place the jobs identified by each JOB_SPEC in the background, as if "
-"they\n"
-"    had been started with `&'.  If JOB_SPEC is not present, the shell's "
-"notion\n"
+"    Place the jobs identified by each JOB_SPEC in the background, as if they\n"
+"    had been started with `&'.  If JOB_SPEC is not present, the shell's notion\n"
 "    of the current job is used.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns success unless job control is not enabled or an error occurs."
 msgstr ""
-"İşi arkaplana taşı.\n"
+"İşi arka plana taşı.\n"
 "    \n"
 "    `&' ile başlatılmışçasına İŞ_BELİRTİMİni artalana yerleştirir.\n"
-"    İŞ_BELİRTİMİ verilmemişse, iş belirtimi olarak o an ki iş "
-"kullanılır.     \n"
+"    İŞ_BELİRTİMİ verilmemişse iş belirtimi olarak o an ki iş kullanılır.     \n"
 "    Çıktı Durumu:\n"
-"    İş kontrolü etkin olmadığı veya bir hata oluşmadığı sürece başarılı "
-"döner."
+"    İş denetimi etkin olmadığı veya bir hata oluşmadığı sürece başarılı döner."
 
 #: builtins.c:793
 msgid ""
 "Remember or display program locations.\n"
 "    \n"
 "    Determine and remember the full pathname of each command NAME.  If\n"
-"    no arguments are given, information about remembered commands is "
-"displayed.\n"
+"    no arguments are given, information about remembered commands is displayed.\n"
 "    \n"
 "    Options:\n"
 "      -d\tforget the remembered location of each NAME\n"
@@ -3576,6 +3510,24 @@ msgstr ""
 
 #: builtins.c:818
 #, fuzzy
+#| msgid ""
+#| "Display information about builtin commands.\n"
+#| "    \n"
+#| "    Displays brief summaries of builtin commands.  If PATTERN is\n"
+#| "    specified, gives detailed help on all commands matching PATTERN,\n"
+#| "    otherwise the list of help topics is printed.\n"
+#| "    \n"
+#| "    Options:\n"
+#| "      -d\toutput short description for each topic\n"
+#| "      -m\tdisplay usage in pseudo-manpage format\n"
+#| "      -s\toutput only a short usage synopsis for each topic matching\n"
+#| "    \t\tPATTERN\n"
+#| "    \n"
+#| "    Arguments:\n"
+#| "      PATTERN\tPattern specifiying a help topic\n"
+#| "    \n"
+#| "    Exit Status:\n"
+#| "    Returns success unless PATTERN is not found or an invalid option is given."
 msgid ""
 "Display information about builtin commands.\n"
 "    \n"
@@ -3593,30 +3545,58 @@ msgid ""
 "      PATTERN\tPattern specifying a help topic\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success unless PATTERN is not found or an invalid option is "
-"given."
+"    Returns success unless PATTERN is not found or an invalid option is given."
 msgstr ""
 "Dahili komutlar hakkında bilgi görüntüle.\n"
 "    \n"
-"    Dahili komutların özetlerini görüntüler. Eğer DESEN belirtilmişse,\n"
-"    DESEN ile eşleşen tüm komutlar hakkında ayrıntılı bilgi verir, aksi\n"
+"    Dahili komutların özetlerini görüntüler. Eğer DİZGİ belirtilmişse\n"
+"    DİZGİ ile eşleşen tüm komutlar hakkında ayrıntılı bilgi verir, aksi\n"
 "    halde, yardım konuları yazdırılır.\n"
 "    \n"
 "    Seçenekler:\n"
 "      -d\ther konu için kısa açıklama yazdır\n"
 "      -m\tkullanımı pseudo-man sayfası biçiminde yazdır\n"
-"      -s\tsadece DESEN ile eşleşen konular için kısa kullanım\n"
+"      -s\tyalnızca DİZGİ ile eşleşen konular için kısa kullanım\n"
 "    \t\tbilgisi yazdır\n"
 "    \n"
 "    Argümanlar:\n"
-"      DESEN\tBir yardım konusunu belirten desen\n"
+"      DİZGİ\tBir yardım konusunu belirten desen\n"
 "    \n"
 "    Çıktı Durumu:\n"
-"    DESEN bulunmadığı veya geçersiz bir seçenek verilmediğinde başarılı "
-"döner."
+"    DİZGİ bulunmadığı veya geçersiz bir seçenek verilmediğinde başarılı döner."
 
 #: builtins.c:842
 #, fuzzy
+#| msgid ""
+#| "Display or manipulate the history list.\n"
+#| "    \n"
+#| "    Display the history list with line numbers, prefixing each modified\n"
+#| "    entry with a `*'.  An argument of N lists only the last N entries.\n"
+#| "    \n"
+#| "    Options:\n"
+#| "      -c\tclear the history list by deleting all of the entries\n"
+#| "      -d offset\tdelete the history entry at position OFFSET.\n"
+#| "    \n"
+#| "      -a\tappend history lines from this session to the history file\n"
+#| "      -n\tread all history lines not already read from the history file\n"
+#| "    \t\tand append them to the history list\n"
+#| "      -r\tread the history file and append the contents to the history\n"
+#| "    \t\tlist\n"
+#| "      -w\twrite the current history to the history file\n"
+#| "    \n"
+#| "      -p\tperform history expansion on each ARG and display the result\n"
+#| "    \t\twithout storing it in the history list\n"
+#| "      -s\tappend the ARGs to the history list as a single entry\n"
+#| "    \n"
+#| "    If FILENAME is given, it is used as the history file.  Otherwise,\n"
+#| "    if HISTFILE has a value, that is used, else ~/.bash_history.\n"
+#| "    \n"
+#| "    If the HISTTIMEFORMAT variable is set and not null, its value is used\n"
+#| "    as a format string for strftime(3) to print the time stamp associated\n"
+#| "    with each displayed history entry.  No time stamps are printed otherwise.\n"
+#| "    \n"
+#| "    Exit Status:\n"
+#| "    Returns success unless an invalid option is given or an error occurs."
 msgid ""
 "Display or manipulate the history list.\n"
 "    \n"
@@ -3644,8 +3624,7 @@ msgid ""
 "    \n"
 "    If the HISTTIMEFORMAT variable is set and not null, its value is used\n"
 "    as a format string for strftime(3) to print the time stamp associated\n"
-"    with each displayed history entry.  No time stamps are printed "
-"otherwise.\n"
+"    with each displayed history entry.  No time stamps are printed otherwise.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns success unless an invalid option is given or an error occurs."
@@ -3654,7 +3633,7 @@ msgstr ""
 "    \n"
 "    Seçeneksiz kullanıldığında komut geçmişi listesini satır numaraları ile\n"
 "    gösterir. Değişiklik yapılmış satırlarda numaralardan önce bir `*'\n"
-"    vardır. Argüman olarak N belirtildiğinde sadece son N satır listelenir.\n"
+"    vardır. Argüman olarak N belirtildiğinde yalnızca son N satır listelenir.\n"
 "    \n"
 "    Seçenekler:\n"
 "      -c\tkomut geçmişi listesini tüm girdilerini silerek temizler.\n"
@@ -3671,16 +3650,15 @@ msgstr ""
 "    \tdepolamadan görüntüle\n"
 "      -s\tARGümanları geçmiş listesine tek bir girdi olarak ekle\n"
 "    \n"
-"    DOSYAİSMİ verilmezse, HISTFILE değişkenindeki değer, o da yoksa\n"
+"    DOSYAİSMİ verilmezse HISTFILE değişkenindeki değer, o da yoksa\n"
 "    ~/.bash_history dosyası kullanılır.\n"
 "    \n"
 "    HISTTIMEFORMAT kabuk değişkeni tanımlanmış ve  anlamlı  bir  değere\n"
-"    sahipse, değeri, gösterilen her geçmiş girdisi ile ilişkili zaman\n"
+"    sahipse değeri, gösterilen her geçmiş girdisi ile ilişkili zaman\n"
 "    damgasını basacak olan strftime(3) işlevine biçim girdisi olur; aksi\n"
 "    takdirde hiç zaman damgası basılmaz.     \n"
 "    Çıktı Durumu:\n"
-"    Geçersiz bir seçenek girilmediği veya bir hata oluşmadığı takdirde "
-"başarılı döner."
+"    Geçersiz bir seçenek girilmediği veya bir hata oluşmadığı takdirde başarılı döner."
 
 #: builtins.c:879
 msgid ""
@@ -3711,22 +3689,20 @@ msgstr ""
 "    Seçenekler olmadan, tüm etkin görev durumları görüntülenir.\n"
 "    \n"
 "    Seçenekler:\n"
-"      -l\tile normal bilgilere ek olarak süreç kimliklerini de (PID) "
-"listele\n"
-"      -n\tile sadece kullanıcının durumları hakkında aldığı son uyarıdan\n"
+"      -l\tile normal bilgilere ek olarak süreç kimliklerini de (PID) listele\n"
+"      -n\tile yalnızca kullanıcının durumları hakkında aldığı son uyarıdan\n"
 "    \t\tberi durumları değişen işler hakkında bilgi gösterir.\n"
-"      -p\tile işlerin sadece süreç kimliklerini listeler\n"
-"      -r\tile sadece çalışmakta olan,\n"
-"      -s\tile ise sadece durmuş olan işler listelenir.\n"
+"      -p\tile işlerin yalnızca süreç kimliklerini listeler\n"
+"      -r\tile yalnızca çalışmakta olan,\n"
+"      -s\tile ise yalnızca durmuş olan işler listelenir.\n"
 "    \n"
-"    -x  seçeneği verilmişse, ARGümanlar ile belirtilen tüm iş belirtimleri,\n"
+"    -x  seçeneği verilmişse ARGümanlar ile belirtilen tüm iş belirtimleri,\n"
 "    işlerin süreç grup liderinin süreç grup kimliğine yerleştirilip KOMUT\n"
 "    çalıştırılır.\n"
 "    \n"
 "    Çıktı Durumu:\n"
-"    Geçersiz bir seçenek girilmediği veya bir hata oluşmadığı takdirde "
-"başarılı döner.\n"
-"    -x kullanılmışsa, KOMUTun çıkış durumu döndürülür."
+"    Geçersiz bir seçenek girilmediği veya bir hata oluşmadığı takdirde başarılı döner.\n"
+"    -x kullanılmışsa KOMUTun çıkış durumu döndürülür."
 
 #: builtins.c:906
 msgid ""
@@ -3746,16 +3722,14 @@ msgid ""
 msgstr ""
 "Görevleri geçerli kabuktan kaldır.\n"
 "    \n"
-"    Her İŞTANIMı argümanını etkin görevler tablosundan kaldırır. İŞTANIMı "
-"olmadan,\n"
+"    Her İŞTANIMı argümanını etkin görevler tablosundan kaldırır. İŞTANIMı olmadan,\n"
 "    kabuk geçerli görev kavramını kullanır.\n"
 "    \n"
 "    Seçenekler:\n"
 "      -a\tİŞTANIMı belirtilmemişse tüm görevleri kaldır\n"
-"      -h\ther İŞTANIMını işaretle, böylece kabul bir SIGHUP aldığında göreve "
-"SIGHUP\n"
+"      -h\ther İŞTANIMını işaretle, böylece kabul bir SIGHUP aldığında göreve SIGHUP\n"
 "    \t\tgönderme\n"
-"      -r\tsadece çalışan görevleri kaldırremove \n"
+"      -r\tyalnızca çalışan görevleri kaldırremove \n"
 "    \n"
 "    Çıkış Durumu:\n"
 "    Geçersiz bir seçenek veya İŞTANIMı girilmedikçe başarılı döner."
@@ -3791,21 +3765,17 @@ msgstr ""
 "    Seçenekler:\n"
 "      -s sig\tSİNYAL bir sinyal\n"
 "      -n sig\tSİNYAL bir sinyal numarası\n"
-"      -l\t-l seçeneği ile sinyal isimleri listelenir.\n"
+"      -l\t-l seçeneği ile sinyal adları listelenir.\n"
 "      \t\tArgümanlı -l seçeneğinde argümanların listelenecek\n"
-"      sinyal  isimlerinin  numaraları  olduğu  varsayılır.    \n"
+"      sinyal adlarının numaraları olduğu varsayılır.    \n"
 "      -L\t, -l anahtarının eş anlamlısıdır\n"
-"    Kill iki sebepten dolayı bir kabuk yerleşiğidir: süreç kimlikleri yerine "
-"iş\n"
-"    kimliklerinin kullanımını mümkün  kılar ve eğer oluşturabileceğiniz "
-"süreç\n"
-"    sayısı sınırını  aşarsanız  başka  bir  süreci  öldürecek bir süreci "
-"başlatmak\n"
+"    Kill iki sebepten dolayı bir kabuk yerleşiğidir: süreç kimlikleri yerine iş\n"
+"    kimliklerinin kullanımını mümkün  kılar ve eğer oluşturabileceğiniz süreç\n"
+"    sayısı sınırını  aşarsanız  başka  bir  süreci  öldürecek bir süreci başlatmak\n"
 "    zorunda kalmazsınız.\n"
 "    \n"
 "    Çıktı Durumu:\n"
-"    Geçersiz bir seçenek belirtilmediği veya bir hata oluşmadığında başarılı "
-"döner."
+"    Geçersiz bir seçenek belirtilmediği veya bir hata oluşmadığında başarılı döner."
 
 #: builtins.c:949
 msgid ""
@@ -3814,8 +3784,7 @@ msgid ""
 "    Evaluate each ARG as an arithmetic expression.  Evaluation is done in\n"
 "    fixed-width integers with no check for overflow, though division by 0\n"
 "    is trapped and flagged as an error.  The following list of operators is\n"
-"    grouped into levels of equal-precedence operators.  The levels are "
-"listed\n"
+"    grouped into levels of equal-precedence operators.  The levels are listed\n"
 "    in order of decreasing precedence.\n"
 "    \n"
 "    \tid++, id--\tvariable post-increment, post-decrement\n"
@@ -3882,8 +3851,8 @@ msgstr ""
 "    \t&=, ^=, |=\tatamalar\n"
 "    \n"
 "    Kabuk değişkenleri terim olarak kullanılabilir. İfade içinde değişken\n"
-"    ismi  değeriyle  değiştirilir  (sabit genişlikli tamsayıya zorlanır).\n"
-"    Bir kabuk değişkeni ifade içinde  kullanılırken  tamsayı  niteliğinin\n"
+"    adı değeriyle değiştirilir (sabit genişlikli tamsayıya zorlanır).\n"
+"    Bir kabuk değişkeni ifade içinde kullanılırken tamsayı niteliğinin\n"
 "    etkinleştirilmesini gerektirmez.\n"
 "    \n"
 "    İşleçler öncelik sırasına göre değerlendirilir. Parantez içine alınmış\n"
@@ -3898,16 +3867,13 @@ msgid ""
 "Read a line from the standard input and split it into fields.\n"
 "    \n"
 "    Reads a single line from the standard input, or from file descriptor FD\n"
-"    if the -u option is supplied.  The line is split into fields as with "
-"word\n"
+"    if the -u option is supplied.  The line is split into fields as with word\n"
 "    splitting, and the first word is assigned to the first NAME, the second\n"
 "    word to the second NAME, and so on, with any leftover words assigned to\n"
-"    the last NAME.  Only the characters found in $IFS are recognized as "
-"word\n"
+"    the last NAME.  Only the characters found in $IFS are recognized as word\n"
 "    delimiters.\n"
 "    \n"
-"    If no NAMEs are supplied, the line read is stored in the REPLY "
-"variable.\n"
+"    If no NAMEs are supplied, the line read is stored in the REPLY variable.\n"
 "    \n"
 "    Options:\n"
 "      -a array\tassign the words read to sequential indices of the array\n"
@@ -3919,8 +3885,7 @@ msgid ""
 "      -n nchars\treturn after reading NCHARS characters rather than waiting\n"
 "    \t\tfor a newline, but honor a delimiter if fewer than\n"
 "    \t\tNCHARS characters are read before the delimiter\n"
-"      -N nchars\treturn only after reading exactly NCHARS characters, "
-"unless\n"
+"      -N nchars\treturn only after reading exactly NCHARS characters, unless\n"
 "    \t\tEOF is encountered or read times out, ignoring any\n"
 "    \t\tdelimiter\n"
 "      -p prompt\toutput the string PROMPT without a trailing newline before\n"
@@ -3938,10 +3903,8 @@ msgid ""
 "      -u fd\tread from file descriptor FD instead of the standard input\n"
 "    \n"
 "    Exit Status:\n"
-"    The return code is zero, unless end-of-file is encountered, read times "
-"out\n"
-"    (in which case it's greater than 128), a variable assignment error "
-"occurs,\n"
+"    The return code is zero, unless end-of-file is encountered, read times out\n"
+"    (in which case it's greater than 128), a variable assignment error occurs,\n"
 "    or an invalid file descriptor is supplied as the argument to -u."
 msgstr ""
 
@@ -3956,14 +3919,14 @@ msgid ""
 "    Exit Status:\n"
 "    Returns N, or failure if the shell is not executing a function or script."
 msgstr ""
-"Bir kabuk fonksiyonundan dön.\n"
+"Bir kabuk işlevinden dön.\n"
 "    \n"
-"    Bir fonksiyon veya kaynak betiğinin N ile belirtilen dönüş değeri ile\n"
-"    çıkmasına neden olur. N girilmezse, dönüş durumu fonksiyon veya\n"
+"    Bir işlev veya kaynak betiğinin N ile belirtilen dönüş değeri ile\n"
+"    çıkmasına neden olur. N girilmezse dönüş durumu işlev veya\n"
 "    betikte çalıştırılmış en son komutun dönüş durumudur.\n"
 "    \n"
 "    Çıkış Durumu:\n"
-"    N veya kabul bir fonksiyon ya da betik çalıştırmıyorsa başarısız döner."
+"    N veya kabul bir işlev veya betik çalıştırmıyorsa başarısız döner."
 
 #: builtins.c:1054
 msgid ""
@@ -4008,8 +3971,7 @@ msgid ""
 "              physical     same as -P\n"
 "              pipefail     the return value of a pipeline is the status of\n"
 "                           the last command to exit with a non-zero status,\n"
-"                           or zero if no command exited with a non-zero "
-"status\n"
+"                           or zero if no command exited with a non-zero status\n"
 "              posix        change the behavior of bash where the default\n"
 "                           operation differs from the Posix standard to\n"
 "                           match the standard\n"
@@ -4033,8 +3995,7 @@ msgid ""
 "          by default when the shell is interactive.\n"
 "      -P  If set, do not resolve symbolic links when executing commands\n"
 "          such as cd which change the current directory.\n"
-"      -T  If set, the DEBUG and RETURN traps are inherited by shell "
-"functions.\n"
+"      -T  If set, the DEBUG and RETURN traps are inherited by shell functions.\n"
 "      --  Assign any remaining arguments to the positional parameters.\n"
 "          If there are no remaining arguments, the positional parameters\n"
 "          are unset.\n"
@@ -4053,24 +4014,21 @@ msgstr ""
 "Kabuk seçenekleri ve konumsal parametrelerin değerlerini ata veya kaldır\n"
 "    \n"
 "    Kabuk nitelikleri veya konumsal parametre değerlerini değiştir veya\n"
-"    kabuk değişkenlerinin isim ve değerlerini görüntüle.\n"
+"    kabuk değişkenlerinin ad ve değerlerini görüntüle.\n"
 "    \n"
 "    Seçenekler:\n"
 "    -a  Müteakip komutların ortamına aktarılmak üzere değiştirilen veya\n"
 "        oluşturulan işlev ve değişkenleri imler.\n"
-"    -b  Sonlandırılan artalan işlerin durumunun anında raporlanmasını "
-"sağlar.\n"
-"    -e  Bir komut sıfırdan farklı bir çıkış durumu ile çıkarsa anında "
-"çıkar.\n"
-"    -f  Dosya ismi üretimini (globbing) iptal eder.\n"
-"    -h  Çalıştırmak için aranan komutları bulur ve yerlerini hatırlar "
-"(hash).\n"
-"    -k  Atama deyimleri şeklindeki tüm argümanları komut isminden önce\n"
+"    -b  Sonlandırılan artalan işlerin durumunun anında raporlanmasını sağlar.\n"
+"    -e  Bir komut sıfırdan farklı bir çıkış durumu ile çıkarsa anında çıkar.\n"
+"    -f  Dosya adı üretimini (globbing) iptal eder.\n"
+"    -h  Çalıştırmak için aranan komutları bulur ve yerlerini hatırlar (hash).\n"
+"    -k  Atama deyimleri şeklindeki tüm argümanları komut adından önce\n"
 "        belirtmek yerine ortama yerleştirir.\n"
 "    -m  İş denetimi etkinleştirilir.\n"
 "    -n  Komutları okur ama onları çalıştırmaz.\n"
-"    -o seçenek-ismi\n"
-"        seçenek-ismi olarak aşağıdakilerden biri verildiğinde karşılığı\n"
+"    -o seçenek-adı\n"
+"        seçenek-adı olarak aşağıdakilerden biri verildiğinde karşılığı\n"
 "        olan seçenekler kullanılmış olur:\n"
 "            allexport    -a ile aynı\n"
 "            braceexpand  -B ile aynı\n"
@@ -4090,36 +4048,28 @@ msgstr ""
 "            noclobber    -C ile aynı\n"
 "            noexec       -n ile aynı\n"
 "            noglob       -f ile aynı\n"
-"            nolog        o an kabul edilir ama yoksayılır\n"
+"            nolog        o an kabul edilir ama yok sayılır\n"
 "            notify       -b ile aynı\n"
 "            nounset      -u ile aynı\n"
 "            onecmd       -t ile aynı\n"
 "            physical     -P ile aynı\n"
-"            pipefail     bir boruhattının dönüş değeri ya sıfırdan farklı "
-"bir\n"
-"                         durumla çıkan son (en sağdaki) komutun değeridir "
-"ya\n"
-"                         da boruhattındaki tüm komutlar başarılıysa "
-"sıfırdır\n"
-"            posix        Standart uyumu için POSIX 1003.2 "
-"standardındakinden\n"
-"                         farklı öntanımlı işlemde Bash davranışını "
-"değiştirir\n"
+"            pipefail     bir boru hattının dönüş değeri ya sıfırdan farklı bir\n"
+"                         durumla çıkan son (en sağdaki) komutun değeridir ya\n"
+"                         da boru hattındaki tüm komutlar başarılıysa sıfırdır\n"
+"            posix        Standart uyumu için POSIX 1003.2 standardındakinden\n"
+"                         farklı öntanımlı işlemde Bash davranışını değiştirir\n"
 "            privileged   -p ile aynı\n"
 "            verbose      -v ile aynı\n"
 "            vi           vi tarzı bir satır düzenleme arayüzü kullanılır\n"
 "            xtrace       -x ile aynı\n"
-"    -p  Ayrıcalıklı kipi etkinleştirir. Bu kipte, $BASH_ENV ve $ENV "
-"dosyaları\n"
+"    -p  Ayrıcalıklı kipi etkinleştirir. Bu kipte, $BASH_ENV ve $ENV dosyaları\n"
 "        işlenmez, kabuk işlevleri ortamdan miras alınmaz. Kabuk, gerçek\n"
 "        kullanıcı (grup) kimliği ile aynı olmayan etkin kullanıcı (grup)\n"
 "        kimliği ile başlatılmışsa ve -p seçeneği verilmemişse, bu eylemler\n"
 "        alınır ve etkin kullanıcı (grup) kimliği, gerçek kullanıcı (grup)\n"
 "        kimliğine ayarlanır. Başlatırken -p seçeneği verilmişse, etkin\n"
-"        kullanıcı (grup) kimliği sıfırlanmaz. Bu seçeneğin kapatılması "
-"etkin\n"
-"        kullanıcı ve grup kimliklerinin gerçek kullanıcı ve grup "
-"kimliklerine\n"
+"        kullanıcı (grup) kimliği sıfırlanmaz. Bu seçeneğin kapatılması etkin\n"
+"        kullanıcı ve grup kimliklerinin gerçek kullanıcı ve grup kimliklerine\n"
 "        ayarlanmasına sebep olur.\n"
 "    -t  Tek bir komutu okuyup çalıştırdıktan sonra çıkar..\n"
 "    -u  Parametre yorumlaması uygulanırken bir hata sonucu değişkenlerin\n"
@@ -4137,7 +4087,7 @@ msgstr ""
 "    -T  Etkinse DEBUG ve RETURN üstündeki tuzaklar kabuk işlevlerince\n"
 "        miras alınır.\n"
 "    -- Geri kalan argümanları konumsal parametrelere ata. Eğer kalan\n"
-"       argüman yoksa, konumsal parametrelerin ataması kaldırılır.\n"
+"       argüman yoksa konumsal parametrelerin ataması kaldırılır.\n"
 "    -   Seçeneklerin sonunu belirtir. Kalan tüm argümanlar konumsal\n"
 "        parametrelere ayarlanır. -x ve -v seçenekleri kapatılır.\n"
 "\n"
@@ -4162,8 +4112,7 @@ msgid ""
 "      -n\ttreat each NAME as a name reference and unset the variable itself\n"
 "    \t\trather than the variable it references\n"
 "    \n"
-"    Without options, unset first tries to unset a variable, and if that "
-"fails,\n"
+"    Without options, unset first tries to unset a variable, and if that fails,\n"
 "    tries to unset a function.\n"
 "    \n"
 "    Some variables cannot be unset; also see `readonly'.\n"
@@ -4177,8 +4126,7 @@ msgid ""
 "Set export attribute for shell variables.\n"
 "    \n"
 "    Marks each NAME for automatic export to the environment of subsequently\n"
-"    executed commands.  If VALUE is supplied, assign VALUE before "
-"exporting.\n"
+"    executed commands.  If VALUE is supplied, assign VALUE before exporting.\n"
 "    \n"
 "    Options:\n"
 "      -f\trefer to shell functions\n"
@@ -4240,9 +4188,8 @@ msgstr ""
 "    \n"
 "    DOSYAİSMİndeki komutlar okunur ve çalıştırılır. DOSYAİSMİ içermiyorsa\n"
 "    DOSYAİSMİnin yerini bulmak için $PATH değişkeni kullanılır. Bash POSIX\n"
-"    kipinde değilse ve $PATH içinde DOSYAİSMİ yoksa bulunulan dizine "
-"bakılır.\n"
-"    Verilmiş ARGÜMANlar varsa, DOSYAİSMİ çalıştırılırken bunlar konumsal\n"
+"    kipinde değilse ve $PATH içinde DOSYAİSMİ yoksa bulunulan dizine bakılır.\n"
+"    Verilmiş ARGÜMANlar varsa DOSYAİSMİ çalıştırılırken bunlar konumsal\n"
 "    parametreler haline gelir. Aksi takdirde, konumsal parametreler\n"
 "    değiştirilmez.\n"
 "    \n"
@@ -4298,8 +4245,7 @@ msgid ""
 "      -x FILE        True if the file is executable by you.\n"
 "      -O FILE        True if the file is effectively owned by you.\n"
 "      -G FILE        True if the file is effectively owned by your group.\n"
-"      -N FILE        True if the file has been modified since it was last "
-"read.\n"
+"      -N FILE        True if the file has been modified since it was last read.\n"
 "    \n"
 "      FILE1 -nt FILE2  True if file1 is newer than file2 (according to\n"
 "                       modification date).\n"
@@ -4320,8 +4266,7 @@ msgid ""
 "      STRING1 != STRING2\n"
 "                     True if the strings are not equal.\n"
 "      STRING1 < STRING2\n"
-"                     True if STRING1 sorts before STRING2 "
-"lexicographically.\n"
+"                     True if STRING1 sorts before STRING2 lexicographically.\n"
 "      STRING1 > STRING2\n"
 "                     True if STRING1 sorts after STRING2 lexicographically.\n"
 "    \n"
@@ -4348,10 +4293,10 @@ msgid ""
 msgstr ""
 "Koşullu ifade değerlendir.\n"
 "    \n"
-"    İFADEnin değerlendirilmesine bağlı olarak 0 (doğru) veya 1 (yanlış)\n"
-"    durumu ile çıkar.  İfadeler tek terimli ya da iki terimli olabilir.\n"
-"    Tek terimli ifadeler çoğunlukla bir  dosyanın  durumunu  saptamakta\n"
-"    kullanılır.  Dizge  işleçleri ve sayısal karşılaştırma işleçleri de\n"
+"    İFADE'nin değerlendirilmesine bağlı olarak 0 (doğru) veya 1 (yanlış)\n"
+"    durumu ile çıkar. İfadeler tek terimli veya iki terimli olabilir.\n"
+"    Tek terimli ifadeler çoğunlukla bir dosyanın durumunu saptamakta\n"
+"    kullanılır. Dizi işleçleri ve sayısal karşılaştırma işleçleri de\n"
 "    vardır.\n"
 "    \n"
 "    Dosya işleçleri:\n"
@@ -4366,7 +4311,7 @@ msgstr ""
 "     -h DOSYA        DOSYA varsa ve bir sembolik bağ ise doğrudur.\n"
 "     -L DOSYA        DOSYA varsa ve bir sembolik bağ ise doğrudur.\n"
 "     -k DOSYA        DOSYA dosya varsa ve yapışkan biti 1 ise doğrudur.\n"
-"     -p DOSYA        DOSYA varsa ve bir isimli boru (FIFO) ise doğrudur.\n"
+"     -p DOSYA        DOSYA varsa ve bir adlı boru (FIFO) ise doğrudur.\n"
 "     -r DOSYA        DOSYA varsa ve okuyabiliyorsanız doğrudur.\n"
 "     -s DOSYA        DOSYA varsa ve uzunluğu sıfırdan büyükse doğrudur.\n"
 "     -S DOSYA        DOSYA varsa ve bir soketse doğrudur.\n"
@@ -4379,51 +4324,47 @@ msgstr ""
 "     -N DOSYA        DOSYA varsa ve son okunduğundan beri değiştirilmişse\n"
 "                        doğrudur.\n"
 "    \n"
-"     DOSYA1 -nt DOSYA2  dosya1, dosya2'den değişiklik tarihine göre\n"
-"                         daha yeni ise ya da dosya1 mevcutken dosya2 yoksa\n"
-"                         doğrudur.\n"
+"     DOSYA1 -nt DOSYA2   dosya1, dosya2'den değişiklik tarihine göre\n"
+"                           daha yeni ise veya dosya1 mevcutken dosya2 yoksa\n"
+"                           doğrudur.\n"
 "    \n"
-"      DOSYA1 -ot DOSYA2  dosya1, dosya2 den daha eski ise ya da dosya2\n"
-"                         mevcutken dosya1 yoksa doğrudur.\n"
+"      DOSYA1 -ot DOSYA2  dosya1, dosya2 den daha eski ise veya dosya2\n"
+"                           mevcutken dosya1 yoksa doğrudur.\n"
 "    \n"
-"      DOSYA1 -ef DOSYA2  dosya1 ile dosya2 aynı aygıt ve aynı dosya "
-"düğümünü\n"
-"                         gösteriyorsa (ona sabit bağ ise) doğrudur.\n"
+"      DOSYA1 -ef DOSYA2  dosya1 ile dosya2 aynı aygıt ve aynı dosya düğümünü\n"
+"                           gösteriyorsa (ona sabit bağ ise) doğrudur.\n"
 "    \n"
-"    Dizge işleçleri:\n"
+"    Dizi işleçleri:\n"
 "    \n"
-"        -z DİZGE           dizge uzunluğu sıfırsa doğrudur.\n"
+"        -z               dizi uzunluğu sıfırsa doğrudur.\n"
 "    \n"
-"        -n DİZGE\n"
-"        DİZGE              dizge uzunluğu sıfırdan farklıysa doğrudur.\n"
+"        -n \n"
+"                         dizi uzunluğu sıfırdan farklıysa doğrudur.\n"
 "    \n"
-"        DİZGE1 = DİZGE2    dizgeler aynıysa doğrudur.\n"
-"        DİZGE1 != DİZGE2   dizgeler aynı değilse doğrudur.\n"
-"        DİZGE1 < DİZGE2    dizge1 yerele göre sıralamada dizge2'den\n"
+"        1 = DİZİ2        diziler aynıysa doğrudur.\n"
+"        1 != DİZİ2       diziler aynı değilse doğrudur.\n"
+"        1 < DİZİ2        dizi1 yerele göre sıralamada dizi2'den\n"
 "                           önceyse doğrudur.\n"
-"        DİZGE1 > DİZGE2    dizge1 yerele göre sıralamada dizge2'den\n"
+"        1 > DİZİ2        dizi1 yerele göre sıralamada dizi2'den\n"
 "                           sonraysa doğrudur.\n"
 "    \n"
 "    Diğer işleçler:\n"
 "    \n"
 "        -o SEÇENEK         Kabuk seçeneği SEÇENEK etkinse doğrudur.\n"
 "      -v DEĞŞ         Kabuk DEĞŞ ayarlanmış ise true.\n"
-"      -R DEĞŞ         Kabuk DEĞŞ ayarlanmış ve bir isim referansı ise true\n"
+"      -R DEĞŞ         Kabuk DEĞŞ ayarlanmış ve bir ad referansı ise true\n"
 "        ! İFADE            İFADE yanlışsa doğrudur.\n"
 "        İFADE1 -a İFADE2   İFADE1 ve İFADE2 her ikisi de doğruysa doğrudur.\n"
 "        İFADE1 -o İFADE2   İFADE1 veya İFADE2 doğruysa doğrudur.\n"
 "    \n"
-"        arg1 İM arg2       Aritmetik sınamalar.  İM bunlardan biri "
-"olmalıdır:\n"
+"        arg1 İM arg2       Aritmetik sınamalar.  İM bunlardan biri olmalıdır:\n"
 "                           -eq, -ne, -lt, -le, -gt veya -ge.\n"
 "    \n"
-"    Bir aritmetik ifadede ARG1 ve ARG2 arasında, aranan eşitlik, "
-"eşitsizlik,\n"
+"    Bir aritmetik ifadede ARG1 ve ARG2 arasında, aranan eşitlik, eşitsizlik,\n"
 "    küçüklük, büyüklük, küçüklük veya eşitlik, büyüklük veya eşitlik varsa\n"
 "    ifadenin sonucu doğrudur.    \n"
 "    Çıktı Durumu:\n"
-"    Eğer İFADE true olursa başarılı, İFADE false ile sonuçlanırsa veya "
-"geçersiz\n"
+"    Eğer İFADE true olursa başarılı, İFADE false ile sonuçlanırsa veya geçersiz\n"
 "    argümanda başarısız döner."
 
 #: builtins.c:1343
@@ -4442,8 +4383,7 @@ msgstr ""
 msgid ""
 "Display process times.\n"
 "    \n"
-"    Prints the accumulated user and system times for the shell and all of "
-"its\n"
+"    Prints the accumulated user and system times for the shell and all of its\n"
 "    child processes.\n"
 "    \n"
 "    Exit Status:\n"
@@ -4462,8 +4402,7 @@ msgstr ""
 msgid ""
 "Trap signals and other events.\n"
 "    \n"
-"    Defines and activates handlers to be run when the shell receives "
-"signals\n"
+"    Defines and activates handlers to be run when the shell receives signals\n"
 "    or other conditions.\n"
 "    \n"
 "    ARG is a command to be read and executed when the shell receives the\n"
@@ -4472,49 +4411,41 @@ msgid ""
 "    value.  If ARG is the null string each SIGNAL_SPEC is ignored by the\n"
 "    shell and by the commands it invokes.\n"
 "    \n"
-"    If a SIGNAL_SPEC is EXIT (0) ARG is executed on exit from the shell.  "
-"If\n"
-"    a SIGNAL_SPEC is DEBUG, ARG is executed before every simple command.  "
-"If\n"
-"    a SIGNAL_SPEC is RETURN, ARG is executed each time a shell function or "
-"a\n"
-"    script run by the . or source builtins finishes executing.  A "
-"SIGNAL_SPEC\n"
-"    of ERR means to execute ARG each time a command's failure would cause "
-"the\n"
+"    If a SIGNAL_SPEC is EXIT (0) ARG is executed on exit from the shell.  If\n"
+"    a SIGNAL_SPEC is DEBUG, ARG is executed before every simple command.  If\n"
+"    a SIGNAL_SPEC is RETURN, ARG is executed each time a shell function or a\n"
+"    script run by the . or source builtins finishes executing.  A SIGNAL_SPEC\n"
+"    of ERR means to execute ARG each time a command's failure would cause the\n"
 "    shell to exit when the -e option is enabled.\n"
 "    \n"
-"    If no arguments are supplied, trap prints the list of commands "
-"associated\n"
+"    If no arguments are supplied, trap prints the list of commands associated\n"
 "    with each signal.\n"
 "    \n"
 "    Options:\n"
 "      -l\tprint a list of signal names and their corresponding numbers\n"
 "      -p\tdisplay the trap commands associated with each SIGNAL_SPEC\n"
 "    \n"
-"    Each SIGNAL_SPEC is either a signal name in <signal.h> or a signal "
-"number.\n"
+"    Each SIGNAL_SPEC is either a signal name in <signal.h> or a signal number.\n"
 "    Signal names are case insensitive and the SIG prefix is optional.  A\n"
 "    signal may be sent to the shell with \"kill -signal $$\".\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success unless a SIGSPEC is invalid or an invalid option is "
-"given."
+"    Returns success unless a SIGSPEC is invalid or an invalid option is given."
 msgstr ""
 "\rtrap [-lp] [ARG SİNYAL ...]\n"
 "    ARGüman içindeki komutlar,  kabuk SİNYAL sinyalini aldığında okunur ve\n"
-"    çalıştırılır.  ARGüman verilmezse  (ve tek bir SİNYAL varsa) ya da `-'\n"
-"    verilirse, belirtilen tüm sinyallere kabuk başlatıldığındaki değerleri\n"
-"    yerleştirilir.  ARGüman bir boş dizge ise her  SİNYAL sinyali kabuk ve\n"
-"    onu çağıran komutlar tarafından yoksayılır.  Eğer SİNYAL  0 ya da EXIT\n"
+"    çalıştırılır.  ARGüman verilmezse  (ve tek bir SİNYAL varsa) veya `-'\n"
+"    verilirse belirtilen tüm sinyallere kabuk başlatıldığındaki değerleri\n"
+"    yerleştirilir.  ARGüman bir boş dizi ise her  SİNYAL sinyali kabuk ve\n"
+"    onu çağıran komutlar tarafından yok sayılır.  Eğer SİNYAL  0 veya EXIT\n"
 "    ise  ARGüman  kabuk  çıkarken  çalıştırılır.  Eğer SİNYAL olarak DEBUG\n"
-"    verilmişse, ARGüman komutu her basit komuttan  önce  çalıştırılır.  -p\n"
+"    verilmişse ARGüman komutu her basit komuttan  önce  çalıştırılır.  -p\n"
 "    seçeneği  verilmişse  trap,  her  SİNYAL ile ilişkili trap komutlarını\n"
-"    gösterir.  Hiç ARGüman verilmemişse veya sadece  -p  verilmişse,  trap\n"
+"    gösterir.  Hiç ARGüman verilmemişse veya yalnızca  -p  verilmişse  trap\n"
 "    her  SİNYAL  ile  ilişkili  komutların listesini basar.  Her SİNYAL ya\n"
-"    <signal.h> dosyasındaki bir sinyal  ismi  ya da  bir  sinyal  numarası\n"
-"    olarak  verilmelidir.  Sinyal isimleri harf büyüklüğüne duyarsızdır ve\n"
-"    SIG öneki isteğe bağlıdır.   -l  seçeneği  kabuğun  sinyal  isimlerini\n"
+"    <signal.h> dosyasındaki bir sinyal  adı  veya  bir  sinyal  numarası\n"
+"    olarak  verilmelidir.  Sinyal adları harf büyüklüğüne duyarsızdır ve\n"
+"    SIG öneki isteğe bağlıdır.   -l  seçeneği  kabuğun  sinyal  adlarını\n"
 "    numaraları  ile  birlikte  listelemesini  sağlar.  Kabuğa  bir  sinyal\n"
 "    göndermek isterseniz \"kill -SİGNAL $$\" sözdizimini kullanabilirsiniz."
 
@@ -4544,17 +4475,60 @@ msgid ""
 "      NAME\tCommand name to be interpreted.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success if all of the NAMEs are found; fails if any are not "
-"found."
+"    Returns success if all of the NAMEs are found; fails if any are not found."
 msgstr ""
 
 #: builtins.c:1431
 #, fuzzy
+#| msgid ""
+#| "Modify shell resource limits.\n"
+#| "    \n"
+#| "    Provides control over the resources available to the shell and processes\n"
+#| "    it creates, on systems that allow such control.\n"
+#| "    \n"
+#| "    Options:\n"
+#| "      -S\tuse the `soft' resource limit\n"
+#| "      -H\tuse the `hard' resource limit\n"
+#| "      -a\tall current limits are reported\n"
+#| "      -b\tthe socket buffer size\n"
+#| "      -c\tthe maximum size of core files created\n"
+#| "      -d\tthe maximum size of a process's data segment\n"
+#| "      -e\tthe maximum scheduling priority (`nice')\n"
+#| "      -f\tthe maximum size of files written by the shell and its children\n"
+#| "      -i\tthe maximum number of pending signals\n"
+#| "      -k\tthe maximum number of kqueues allocated for this process\n"
+#| "      -l\tthe maximum size a process may lock into memory\n"
+#| "      -m\tthe maximum resident set size\n"
+#| "      -n\tthe maximum number of open file descriptors\n"
+#| "      -p\tthe pipe buffer size\n"
+#| "      -q\tthe maximum number of bytes in POSIX message queues\n"
+#| "      -r\tthe maximum real-time scheduling priority\n"
+#| "      -s\tthe maximum stack size\n"
+#| "      -t\tthe maximum amount of cpu time in seconds\n"
+#| "      -u\tthe maximum number of user processes\n"
+#| "      -v\tthe size of virtual memory\n"
+#| "      -x\tthe maximum number of file locks\n"
+#| "      -P\tthe maximum number of pseudoterminals\n"
+#| "      -T\tthe maximum number of threads\n"
+#| "    \n"
+#| "    Not all options are available on all platforms.\n"
+#| "    \n"
+#| "    If LIMIT is given, it is the new value of the specified resource; the\n"
+#| "    special LIMIT values `soft', `hard', and `unlimited' stand for the\n"
+#| "    current soft limit, the current hard limit, and no limit, respectively.\n"
+#| "    Otherwise, the current value of the specified resource is printed.  If\n"
+#| "    no option is given, then -f is assumed.\n"
+#| "    \n"
+#| "    Values are in 1024-byte increments, except for -t, which is in seconds,\n"
+#| "    -p, which is in increments of 512 bytes, and -u, which is an unscaled\n"
+#| "    number of processes.\n"
+#| "    \n"
+#| "    Exit Status:\n"
+#| "    Returns success unless an invalid option is supplied or an error occurs."
 msgid ""
 "Modify shell resource limits.\n"
 "    \n"
-"    Provides control over the resources available to the shell and "
-"processes\n"
+"    Provides control over the resources available to the shell and processes\n"
 "    it creates, on systems that allow such control.\n"
 "    \n"
 "    Options:\n"
@@ -4619,7 +4593,7 @@ msgstr ""
 "      -p\tİletişim tüneli tamponunun boyu\n"
 "      -q\tPOSIX ileti kuyruklarındaki azami bayt miktarı\n"
 "      -r\tAzami anında çalıştırma zamanlaması önceliği\n"
-"      -s\tYığıtın azami boyu\n"
+"      -s\tYığının azami boyu\n"
 "      -t\tİşlemci zamanının saniye cinsinden azami miktarı\n"
 "      -u\tTek bir kullanıcının kullanabileceği azami süreç sayısı\n"
 "      -v\tBir sürecin kullanabileceği sanal belleğin azami miktarı\n"
@@ -4628,7 +4602,7 @@ msgstr ""
 "    \n"
 "    Tüm seçenekler tüm platformlarda kullanılabilir olmayabilir.\n"
 "    \n"
-"    SINIR verilmişse, belirtilen özkaynağın yeni değeridir; özel sınır\n"
+"    SINIR verilmişse belirtilen özkaynağın yeni değeridir; özel sınır\n"
 "    değerleri mevcut donanımsal sınır için `hard', mevcut yazılımsal sınır\n"
 "    için `soft' ve sınırsız için `unlimited''dir. Aksi takdirde, belirtilen\n"
 "    özkaynak için mevcut değer gösterilir. Hiç seçenek verilmezse -f\n"
@@ -4638,8 +4612,7 @@ msgstr ""
 "    için 512 baytlık blok sayısı olarak, -n ve -u için birimsiz, kalan\n"
 "    seçenekler için 1024 baytlık blok sayısı olarak belirtilmelidir.    \n"
 "    Çıktı Durumu:\n"
-"    Geçersiz bir seçenek girilmediği veya bir hata oluşmadığı takdirde "
-"başarılı döner."
+"    Geçersiz bir seçenek girilmediği veya bir hata oluşmadığı takdirde başarılı döner."
 
 #: builtins.c:1482
 msgid ""
@@ -4661,26 +4634,37 @@ msgstr ""
 
 #: builtins.c:1502
 #, fuzzy
+#| msgid ""
+#| "Wait for job completion and return exit status.\n"
+#| "    \n"
+#| "    Waits for each process identified by an ID, which may be a process ID or a\n"
+#| "    job specification, and reports its termination status.  If ID is not\n"
+#| "    given, waits for all currently active child processes, and the return\n"
+#| "    status is zero.  If ID is a a job specification, waits for all processes\n"
+#| "    in that job's pipeline.\n"
+#| "    \n"
+#| "    If the -n option is supplied, waits for the next job to terminate and\n"
+#| "    returns its exit status.\n"
+#| "    \n"
+#| "    Exit Status:\n"
+#| "    Returns the status of the last ID; fails if ID is invalid or an invalid\n"
+#| "    option is given."
 msgid ""
 "Wait for job completion and return exit status.\n"
 "    \n"
-"    Waits for each process identified by an ID, which may be a process ID or "
-"a\n"
+"    Waits for each process identified by an ID, which may be a process ID or a\n"
 "    job specification, and reports its termination status.  If ID is not\n"
 "    given, waits for all currently active child processes, and the return\n"
 "    status is zero.  If ID is a job specification, waits for all processes\n"
 "    in that job's pipeline.\n"
 "    \n"
-"    If the -n option is supplied, waits for a single job from the list of "
-"IDs,\n"
-"    or, if no IDs are supplied, for the next job to complete and returns "
-"its\n"
+"    If the -n option is supplied, waits for a single job from the list of IDs,\n"
+"    or, if no IDs are supplied, for the next job to complete and returns its\n"
 "    exit status.\n"
 "    \n"
 "    If the -p option is supplied, the process or job identifier of the job\n"
 "    for which the exit status is returned is assigned to the variable VAR\n"
-"    named by the option argument. The variable will be unset initially, "
-"before\n"
+"    named by the option argument. The variable will be unset initially, before\n"
 "    any assignment. This is useful only when the -n option is supplied.\n"
 "    \n"
 "    If the -f option is supplied, and job control is enabled, waits for the\n"
@@ -4693,45 +4677,36 @@ msgid ""
 msgstr ""
 "Sürecin tamamlanmasını bekle ve çıkış durumunu döndür.\n"
 "    \n"
-"    Belirtilen süreci bekler ve sonlandırma durumunu raporlar. Eğer ID "
-"verilmemişse\n"
-"    geçerli tüm alt süreçler beklenir ve dönüş kodu sıfırdır. Eğer ID bir "
-"görev tanımıysa\n"
+"    Belirtilen süreci bekler ve sonlandırma durumunu raporlar. Eğer ID verilmemişse\n"
+"    geçerli tüm alt süreçler beklenir ve dönüş kodu sıfırdır. Eğer ID bir görev tanımıysa\n"
 "    görevin iletişim tünelindeki tüm süreçler beklenir.\n"
 "    \n"
-"    -n seçeneği verilirse, sonraki görevin sonlanması beklenir ve çıkış "
-"durumunı döndürür.\n"
+"    -n seçeneği verilirse sonraki görevin sonlanması beklenir ve çıkış durumunı döndürür.\n"
 "    \n"
 "    Çıkış Durumu:\n"
-"    Kimlik durumunu döndürür, kimlik geçersizse veya geçersiz bir seçenek "
-"verilmişse\n"
+"    Kimlik durumunu döndürür, kimlik geçersizse veya geçersiz bir seçenek verilmişse\n"
 "    başarısız olur."
 
 #: builtins.c:1533
 msgid ""
 "Wait for process completion and return exit status.\n"
 "    \n"
-"    Waits for each process specified by a PID and reports its termination "
-"status.\n"
+"    Waits for each process specified by a PID and reports its termination status.\n"
 "    If PID is not given, waits for all currently active child processes,\n"
 "    and the return status is zero.  PID must be a process ID.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns the status of the last PID; fails if PID is invalid or an "
-"invalid\n"
+"    Returns the status of the last PID; fails if PID is invalid or an invalid\n"
 "    option is given."
 msgstr ""
 "Sürecin tamamlanmasını bekle ve çıkış durumunu döndür.\n"
 "    \n"
-"    PID tarafından belirtilen her süreci bekler ve sonlandırma durumunu "
-"raporlar.\n"
-"    Eğer PID verilmemişse geçerli tüm alt süreçler beklenir ve dönüş kodu "
-"sıfırdır.\n"
+"    PID tarafından belirtilen her süreci bekler ve sonlandırma durumunu raporlar.\n"
+"    Eğer PID verilmemişse geçerli tüm alt süreçler beklenir ve dönüş kodu sıfırdır.\n"
 "    PID bir süreç kimliği olmalıdır.\n"
 "    \n"
 "    Çıkış Durumu:\n"
-"    Son PID'nin durumunu döndürür, PID geçersizse veya geçersiz bir seçenek "
-"verilmişse\n"
+"    Son PID'nin durumunu döndürür, PID geçersizse veya geçersiz bir seçenek verilmişse\n"
 "    başarısız olur."
 
 #: builtins.c:1548
@@ -4748,12 +4723,9 @@ msgid ""
 msgstr ""
 "Bir listedeki her üye için komut çalıştır.\n"
 "    \n"
-"    `for' döngüsü bir öge listesindeki her üye için komut sırasını "
-"çalıştırır.\n"
-"    Eğer `in KELİMELER ...;' belirtilmemişse `in \"$@\"' varsayılır. "
-"KELİMELER\n"
-"    içerisindeki her eleman için, İSİM bu elemana atanır ve KOMUTLAR "
-"çalıştırılır.\n"
+"    `for' döngüsü bir öge listesindeki her üye için komut sırasını çalıştırır.\n"
+"    Eğer `in SÖZCÜKLER ...;' belirtilmemişse `in \"$@\"' varsayılır. SÖZCÜKLER\n"
+"    içerisindeki her eleman için, AD bu elemana atanır ve KOMUTLAR çalıştırılır.\n"
 "    \n"
 "    Çıkış Durumu:\n"
 "    Son çalıştırılan komutun durumunu döndürür."
@@ -4782,8 +4754,7 @@ msgstr ""
 "    \t\tKOMUTLAR\n"
 "    \t\t(( İFADE3 ))\n"
 "    \tdone\n"
-"    İFADE1, İFADE2 ve İFADE3 aritmetik ifadelerdir. Eğer ifadelerden biri "
-"yoksa\n"
+"    İFADE1, İFADE2 ve İFADE3 aritmetik ifadelerdir. Eğer ifadelerden biri yoksa\n"
 "    1'e değerlendirilmiş şekilde davranır.\n"
 "    \n"
 "    Çıkış Durumu:\n"
@@ -4808,24 +4779,16 @@ msgid ""
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
-"Listeden kelimeleri seç ve komutları çalıştır.\n"
-"    \n"
-"    `SÖZ ...;'  listesi yorumlanarak öğe listesi üretilir.  Öğe "
-"listesindeki\n"
-"    her öğenin başına bir numara eklenerek standart hataya çıktılanır.  "
-"Eğer\n"
-"    `in SÖZ ... ;' parçası verilmezse, in \"$@\"' verilmiş gibi konuma "
-"bağlı\n"
-"    parametreler basılır ve  standart girdide PS3 istemi ile girdi "
-"beklenir.\n"
-"    Listede belirtilen numaralardan biri girdi  olarak  verilirse,  o "
-"konuma\n"
-"    bağlı SÖZcük ile AD eşleştirilir.  Girdi satırı boş verilirse, "
-"dosyasonu\n"
-"    okununcaya kadar komut istemi tekrarlanır. Listede belirtilenler "
-"dışında\n"
-"    verilen  her değer için  AD  null ile eşleştirilir.  Okunan satır "
-"$REPLY\n"
+"Listeden sözcükleri seç ve komutları çalıştır.\n"
+"    \n"
+"    `SÖZ ...;'  listesi yorumlanarak öğe listesi üretilir.  Öğe listesindeki\n"
+"    her öğenin başına bir numara eklenerek standart hataya çıktılanır.  Eğer\n"
+"    `in SÖZ ... ;' parçası verilmezse in \"$@\"' verilmiş gibi konuma bağlı\n"
+"    parametreler basılır ve  standart girdide PS3 istemi ile girdi beklenir.\n"
+"    Listede belirtilen numaralardan biri girdi  olarak  verilirse  o konuma\n"
+"    bağlı SÖZcük ile AD eşleştirilir.  Girdi satırı boş verilirse dosyasonu\n"
+"    okununcaya kadar komut istemi yinelenir. Listede belirtilenler dışında\n"
+"    verilen  her değer için  AD  null ile eşleştirilir.  Okunan satır $REPLY\n"
 "    değişkeninde tutulur. Her seçimden sonra bir break komutu ile\n"
 "    sonlandırılıncaya kadar komutlar çalıştırılır.\n"
 "    \n"
@@ -4849,8 +4812,7 @@ msgid ""
 msgstr ""
 "Veriyolu çalıştırması tarafından harcanan zamanı bildir.\n"
 "    \n"
-"    VERİYOLUnu çalıştır ve sonlandığında kullanıcı işlemci zamanı ile "
-"sistem\n"
+"    VERİYOLUnu çalıştır ve sonlandığında kullanıcı işlemci zamanı ile sistem\n"
 "    işlemci zamanını içeren gerçek zamanın bir özetini yazdır.\n"
 "    \n"
 "    Seçenekler:\n"
@@ -4883,17 +4845,12 @@ msgstr ""
 msgid ""
 "Execute commands based on conditional.\n"
 "    \n"
-"    The `if COMMANDS' list is executed.  If its exit status is zero, then "
-"the\n"
-"    `then COMMANDS' list is executed.  Otherwise, each `elif COMMANDS' list "
-"is\n"
+"    The `if COMMANDS' list is executed.  If its exit status is zero, then the\n"
+"    `then COMMANDS' list is executed.  Otherwise, each `elif COMMANDS' list is\n"
 "    executed in turn, and if its exit status is zero, the corresponding\n"
-"    `then COMMANDS' list is executed and the if command completes.  "
-"Otherwise,\n"
-"    the `else COMMANDS' list is executed, if present.  The exit status of "
-"the\n"
-"    entire construct is the exit status of the last command executed, or "
-"zero\n"
+"    `then COMMANDS' list is executed and the if command completes.  Otherwise,\n"
+"    the `else COMMANDS' list is executed, if present.  The exit status of the\n"
+"    entire construct is the exit status of the last command executed, or zero\n"
 "    if no condition tested true.\n"
 "    \n"
 "    Exit Status:\n"
@@ -4901,11 +4858,11 @@ msgid ""
 msgstr ""
 "Komutları şartlara göre çalıştırır.\n"
 "    \n"
-"    `if KOMUTlar;' listesi çalıştırılır; çıkış durumu sıfırsa\n"
-"    `then KOMUTlar;' listesi çalıştırılır,  değilse  `elif KOMUTlar;'\n"
-"    listesi çalıştırılır; bunun çıkış durumu sıfırsa `then KOMUTlar;'\n"
+"    `if KOMUTLAR;' listesi çalıştırılır; çıkış durumu sıfırsa\n"
+"    `then KOMUTLAR;' listesi çalıştırılır,  değilse  `elif KOMUTLAR;'\n"
+"    listesi çalıştırılır; bunun çıkış durumu sıfırsa `then KOMUTLAR;'\n"
 "    listesi çalıştırılır  ve  if komutu tamamlanır,  değilse varsa\n"
-"    `else KOMUTlar;' listesi çalıştırılır ve if komutu tamamlanır.\n"
+"    `else KOMUTLAR;' listesi çalıştırılır ve if komutu tamamlanır.\n"
 "    Oluşumun tamamının dönüş durumu çalıştırılmış olan son komutun\n"
 "    çıkış durumudur.  Bir komut çalıştırılmamışsa  ve hiçbir koşul\n"
 "    doğru sonuç vermemişse sıfır döner.     Çıkış Durumu:\n"
@@ -4941,8 +4898,8 @@ msgid ""
 msgstr ""
 "Bir sınama başarısız oluncaya kadar komutları çalıştır.\n"
 "    \n"
-"    `until KOMUTlar; listesinin çıkış durumu sıfırdan farklı olduğu sürece\n"
-"    `do KOMUTlar;' listesi çalıştırılır.\n"
+"    `until KOMUTLAR; listesinin çıkış durumu sıfırdan farklı olduğu sürece\n"
+"    `do KOMUTLAR;' listesi çalıştırılır.\n"
 "    \n"
 "    Çıktı Durumu:\n"
 "    Son çalıştırılan komutun durumunu döndürür."
@@ -4965,8 +4922,7 @@ msgid ""
 "Define shell function.\n"
 "    \n"
 "    Create a shell function named NAME.  When invoked as a simple command,\n"
-"    NAME runs COMMANDs in the calling shell's context.  When NAME is "
-"invoked,\n"
+"    NAME runs COMMANDs in the calling shell's context.  When NAME is invoked,\n"
 "    the arguments are passed to the function as $1...$n, and the function's\n"
 "    name is in $FUNCNAME.\n"
 "    \n"
@@ -4986,7 +4942,7 @@ msgid ""
 msgstr ""
 "Komutları bir birim olarak grupla.\n"
 "    \n"
-"    KOMUTlar bir grup olarak çalıştırılır. Bu, bir komut kümesini bir\n"
+"    KOMUTLAR bir grup olarak çalıştırılır. Bu, bir komut kümesini bir\n"
 "    yönlendirmede kullanmanın tek yoludur.\n"
 "    \n"
 "    Çıktı Durumu:\n"
@@ -5009,7 +4965,7 @@ msgstr ""
 "    \n"
 "    `fg'  komutunu  İŞ_BELİRTİMİ  argümanı ile kullanmaya  eşdeğerdir.\n"
 "    Durmuş  veya  artalandaki bir işin önalanda sürdürülmesini sağlar.\n"
-"    İŞ_BELİRTİMİ  bir iş ismi veya  iş numarası olarak belirtilebilir.\n"
+"    İŞ_BELİRTİMİ  bir iş adı veya  iş numarası olarak belirtilebilir.\n"
 "    İŞ_BELİRTİMİ'nden sonra bir & gelmesi işin `bg' komutununa argüman\n"
 "    olarak kullanılmış gibi artalana yerleştirilmesine sebep olur.\n"
 "    \n"
@@ -5018,6 +4974,14 @@ msgstr ""
 
 #: builtins.c:1726
 #, fuzzy
+#| msgid ""
+#| "Evaluate arithmetic expression.\n"
+#| "    \n"
+#| "    The EXPRESSION is evaluated according to the rules for arithmetic\n"
+#| "    evaluation.  Equivalent to \"let EXPRESSION\".\n"
+#| "    \n"
+#| "    Exit Status:\n"
+#| "    Returns 1 if EXPRESSION evaluates to 0; returns 0 otherwise."
 msgid ""
 "Evaluate arithmetic expression.\n"
 "    \n"
@@ -5039,12 +5003,9 @@ msgstr ""
 msgid ""
 "Execute conditional command.\n"
 "    \n"
-"    Returns a status of 0 or 1 depending on the evaluation of the "
-"conditional\n"
-"    expression EXPRESSION.  Expressions are composed of the same primaries "
-"used\n"
-"    by the `test' builtin, and may be combined using the following "
-"operators:\n"
+"    Returns a status of 0 or 1 depending on the evaluation of the conditional\n"
+"    expression EXPRESSION.  Expressions are composed of the same primaries used\n"
+"    by the `test' builtin, and may be combined using the following operators:\n"
 "    \n"
 "      ( EXPRESSION )\tReturns the value of EXPRESSION\n"
 "      ! EXPRESSION\t\tTrue if EXPRESSION is false; else false\n"
@@ -5064,25 +5025,23 @@ msgid ""
 msgstr ""
 "Koşullu komut çalıştır.\n"
 "     \n"
-"    Koşullu İFADEnin değerine bağlı olarak 0 ya da 1 durumu ile döner.\n"
-"    İfadeler  test yerleşiği tarafından kullanılan aynı ilkelerle "
-"oluşturulur\n"
+"    Koşullu İFADE'nin değerine bağlı olarak 0 veya 1 durumu ile döner.\n"
+"    İfadeler  test yerleşiği tarafından kullanılan aynı ilkelerle oluşturulur\n"
 "    ve aşağıdaki işleçler kullanılarak biraraya getirilebilirler:\n"
 "\n"
-"        ( İFADE )         İFADEnin değeri döner\n"
+"        ( İFADE )         İFADE'nin değeri döner\n"
 "        ! İFADE           İFADE yanlışsa doğru, doğruysa yanlıştır.\n"
 "        İFADE1 && İFADE2  İFADE1 ve İFADE2 her ikisi de doğruysa doğrudur\n"
 "        İFADE1 || İFADE2  İFADE1 veya İFADE2 doğruysa doğrudur\n"
 "\n"
-"    `==' ve `!='  işleçleri kullanıldığında, işlecin sağındaki dizge bir "
-"kalıp\n"
+"    `==' ve `!='  işleçleri kullanıldığında, işlecin sağındaki dizi bir kalıp\n"
 "   olarak ele alınır ve kalıp eşleştirmesi uygulanır. `=~'  kullanıldığında\n"
-"   işlecin sağındaki dizge düzenli ifade olarak eşleştirilir.     \n"
-"    İFADE1, ifadenin değeri için tek başına yeterli ise && ve || İFADE2'yi\n"
-"    çalıştırmaz.\n"
-"    \n"
-"    Çıkış Durumu:\n"
-"    İFADE değerine göre 0 veya 1."
+"   işlecin sağındaki dizi düzenli ifade olarak eşleştirilir.\n"
+"   İFADE1, ifadenin değeri için tek başına yeterli ise && ve || İFADE2'yi\n"
+"   çalıştırmaz.\n"
+"   \n"
+"   Çıkış Durumu:\n"
+"   İFADE değerine göre 0 veya 1."
 
 #: builtins.c:1764
 msgid ""
@@ -5142,44 +5101,44 @@ msgstr ""
 "    BASH_VERSION\tBu Bash'in sürüm bilgisi.\n"
 "    CDPATH\t`cd'ye argüman olarak verilecek dizinlerin aranacağı\n"
 "    \t\tdizinlerin iki nokta imi ayraçlı listesi.\n"
-"    GLOBIGNORE\tDosyayolu yorumlaması tarafından yoksayılacak dosya\n"
-"    \t\tisimlerini belirten kalıpların ikinokta imi ayraçlı\n"
+"    GLOBIGNORE\tDosyayolu yorumlaması tarafından yok sayılacak dosya\n"
+"    \t\tadlarını belirten kalıpların ikinokta imi ayraçlı\n"
 "    \t\tlistesi.\n"
-"    HISTFILE\tKomut geçmişinizin saklanacağı dosyanın ismi.\n"
+"    HISTFILE\tKomut geçmişinizin saklanacağı dosyanın adı.\n"
 "    HISTFILESIZE\tBu dosyanın içerebileceği azami satır sayısı.\n"
 "    HISTSIZE\tÇalışan bir kabuğun erişebileceği geçmiş satırlarının\n"
 "    \t\tazami sayısı.\n"
 "    HOME\tKullanıcının ev dizininin tam yolu.\n"
-"    HOSTNAME\tMakinenizin ağdaki konak ismi.\n"
+"    HOSTNAME\tMakinenizin ağdaki konak adı.\n"
 "    HOSTTYPE\tBash'in bu sürümünün altında çalıştığı işlemcinin türü\n"
 "    IGNOREEOF\tTek girdi olarak EOF karakteri alındığında kabuğun\n"
-"    \t\teylemini kontrol eder. Atandığında değeri, kabuk\n"
+"    \t\teylemini denetler. Atandığında değeri, kabuk\n"
 "    \t\tçıkmadan önce bir girdi satırındaki ilk karakter\n"
 "    \t\tolarak okunabilen ardışık EOF karakterlerinin sayısını\n"
-"    \t\tgösterir (öntanımlı 10). Eğer değişken mevcut değilse,\n"
+"    \t\tgösterir (öntanımlı 10). Eğer değişken mevcut değilse\n"
 "    \t\tEOF girdi sonunu belirtir.\n"
-"    MACHTYPE\tBash'in üzerinde çalıştığı sistemi açıklayan dizge.\n"
+"    MACHTYPE\tBash'in üzerinde çalıştığı sistemi açıklayan dizi.\n"
 "    MAILCHECK\tBash'in yeni postaya kaç saniyede bir bakacağı.\n"
 "    MAILPATH\tBash'in yeni posta var mı diye bakacağı dosya\n"
-"    \t\tisimlerinin ikinokta imi ayraçlı listesi.\n"
+"    \t\tad ikinokta imi ayraçlı listesi.\n"
 "    OSTYPE\tBash'in üzerinde çalıştığı çekirdeğin türü.\n"
 "    PATH\tKomutları ararken bakılacak dizinlerin ikinokta imi\n"
 "    \t\tayraçlı listesi.\n"
 "    PROMPT_COMMAND\tBirincil komut istemi ($PS1) basılmadan önce\n"
 "    \t\tçalıştırılacak komut\n"
-"    PS1\tBirincil komut istemi dizgesi.\n"
-"    PS2\tİkincil komut istemi dizgesi.\n"
+"    PS1\tBirincil komut istemi dizisi.\n"
+"    PS2\tİkincil komut istemi dizisi.\n"
 "    PWD\tÇalışma dizininizin tam yolu.\n"
 "    SHELLOPTS\tEtkin kabuk seçeneklerinin ikinokta imi ayraçlı listesi\n"
-"    TERM\tGeçerli uçbirim türünün ismi.\n"
+"    TERM\tGeçerli uçbirim türünün adı.\n"
 "    TIMEFORMAT\ttime anahtar sözcüğü ile başlayan zamanlama bilgisinin\n"
-"    \t\tnasıl belirtileceğini gösteren biçim dizgesi.\n"
-"    auto_resume\tDeğerin boş olmaması durmuş işin isminin onu\n"
+"    \t\tnasıl belirtileceğini gösteren biçim dizisi.\n"
+"    auto_resume\tDeğerin boş olmaması durmuş işin adının onu\n"
 "    \t\tbaşlatmakta kullanılan komut satırı olduğudur ve\n"
 "    \t\toradaysa iş önalana alınır. `exact' değeri, komut\n"
 "    \t\tsözcüğünün durmuş işler listesindeki komutla tam\n"
 "    \t\tolarak eşleşmesi gerektiği anlamına gelir. `substring'\n"
-"    \t\tdeğeri, komut sözcüğünün işin bir altdizgesi ile\n"
+"    \t\tdeğeri, komut sözcüğünün işin bir altdizisi ile\n"
 "    \t\teşleşmesi gerektiğini belirtir. Bunlar dışında bir\n"
 "    \t\tdeğer komutun durmuş bir işe önek olması gerektiği\n"
 "    \t\tanlamına gelir.\n"
@@ -5189,7 +5148,7 @@ msgstr ""
 "    \t\tyorumlama karakteridir ve normalde ! işaretidir.\n"
 "    \t\tİkinci karakter, bir satırdaki ilk karakter olduğunda\n"
 "    \t\t`hızlı ikame'yi imleyen karakterdir ve normalde ^\n"
-"    \t\timidir. İstemlik olan üçüncü karakter ise, bir\n"
+"    \t\timidir. İstemlik olan üçüncü karakter ise bir\n"
 "    \t\tsözcüğün ilk karakteri olarak bulunduğunda satırın\n"
 "    \t\tkalanının açıklama olmasını sağlayan karakterdir ve\n"
 "    \t\tnormalde # imidir.\n"
@@ -5229,27 +5188,27 @@ msgid ""
 msgstr ""
 "Dizinleri yığına ekle.\n"
 "    \n"
-"    Dizin yığıtının en üstüne bir dizin ekler, ya da geçerli çalışma\n"
-"    dizini yığıtın tepesine gelecek  şekilde  yığıtı  döndürür.  Hiç\n"
+"    Dizin yığınının en üstüne bir dizin ekler veya geçerli çalışma\n"
+"    dizini yığının tepesine gelecek  şekilde  yığını  döndürür.  Hiç\n"
 "    argüman verilmemişse en üstteki iki dizini yer değiştirir.\n"
 "    \n"
 "    Seçenekler:\n"
-"      -n\tdizinleri yığıta eklerken normal dizin değişikliğini engeller,\n"
-"    \t\tböylece sadece yığıt değiştirilmiş olur.\n"
+"      -n\tdizinleri yığına eklerken normal dizin değişikliğini engeller,\n"
+"    \t\tböylece yalnızca yığın değiştirilmiş olur.\n"
 "    \n"
 "    Argümanlar:\n"
 "      +N\t(`dirs' tarafından gösterilen listenin solundan saymaya\n"
 "    \t\tsıfırla başlandığında) N'inci dizin tepeye gelecek şekilde\n"
-"    \t\tyığıtı döndürür.\n"
+"    \t\tyığını döndürür.\n"
 "    \n"
 "      -N\t(`dirs' tarafından gösterilen listenin sağından saymaya\n"
 "    \t\tsıfırla başlandığında) N'inci dizin tepeye gelecek şekilde\n"
-"    \t\tyığıtı döndürür.\n"
+"    \t\tyığını döndürür.\n"
 "    \n"
-"    dizin\tDİZİNi yeni çalışma dizini yaparak dizin yığıtının\n"
+"    dizin\tDİZİNi yeni çalışma dizini yaparak dizin yığınının\n"
 "    \t\ttepesine ekler.\n"
 "    \n"
-"    Dizin yığıtını `dirs' komutuyla görebilirsiniz.\n"
+"    Dizin yığınını `dirs' komutuyla görebilirsiniz.\n"
 "    \n"
 "    Çıkış Durumu:\n"
 "    Geçersiz bir argüman belirtilmediği veya dizin değişikliği başarısız\n"
@@ -5281,15 +5240,15 @@ msgid ""
 "    Returns success unless an invalid argument is supplied or the directory\n"
 "    change fails."
 msgstr ""
-"Dizin yığıtından girdileri sil.\n"
+"Dizin yığınından girdileri sil.\n"
 "    \n"
-"    Dizin yığıtından girdileri siler.  Hiç argüman verilmemişse,\n"
-"    yığıtın en üstündeki dizini  yığıttan  kaldırır  ve  yığıtın\n"
+"    Dizin yığınından girdileri siler. Hiç argüman verilmemişse\n"
+"    yığının en üstündeki dizini yığından kaldırır ve yığının\n"
 "    tepesinde kalan dizine geçer. \n"
 "    \n"
 "    Seçenekler:\n"
-"      -n\tdizinleri yığıttan silerken normal dizin değişikliğini\n"
-"    \t\tengeller, böylece sadece yığıt değiştirilmiş olur. \n"
+"      -n\tdizinleri yığından silerken normal dizin değişikliğini\n"
+"    \t\tengeller, böylece yalnızca yığın değiştirilmiş olur. \n"
 "    \n"
 "    Argümanlar:\n"
 "      +N\t\t`dirs' tarafından gösterilen listenin solundan saymaya\n"
@@ -5300,7 +5259,7 @@ msgstr ""
 "    \t\tsıfırla başlandığında N'inci girdiyi  siler.  Örneğin,\n"
 "    \t\t`popd -0' son dizini `popd -1' sonuncudan öncekini siler. \n"
 "    \n"
-"    Dizin yığıtını `dirs' komutuyla görebilirsiniz.    \n"
+"    Dizin yığınını `dirs' komutuyla görebilirsiniz.\n"
 "    Çıkış Durumu:\n"
 "    Geçersiz bir argüman belirtilmediği veya dizin değişikliği başarısız\n"
 "    olmadıkça başarılı döner."
@@ -5333,18 +5292,18 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless an invalid option is supplied or an error occurs."
 msgstr ""
-"Dizin yığıtını görüntüle.\n"
+"Dizin yığınını görüntüle.\n"
 "    \n"
 "    O an anımsanan dizinleri listeler.  Dizinler listeye `pushd'\n"
 "    komutuyla eklenir; listeden tek tek geri almak içinse `popd'\n"
 "    komutu kullanılır.\n"
 "    \n"
 "    Seçenekler:\n"
-"      -c\ttüm girdileri silerek dizin yığıtını boşaltır.\n"
+"      -c\ttüm girdileri silerek dizin yığınını boşaltır.\n"
 "      -l\t`dirs'in dizinleri ev dizininize göreli kısayollar\n"
 "    \t\tolarak göstermemesine yol açar.\n"
-"      -p\tyığıttaki konumu göstermemesi dışında aynı çıktıyı verir.\n"
-"      -v\t`dirs'in dizin yığıtını dizin adının önüne yığıt konumunu\n"
+"      -p\tyığıntaki konumu göstermemesi dışında aynı çıktıyı verir.\n"
+"      -v\t`dirs'in dizin yığınını dizin adının önüne yığın konumunu\n"
 "    \t\tekleyerek her satırda bir girdi göstermesini sağlar.\n"
 "    \n"
 "    Argümanlar:\n"
@@ -5356,8 +5315,7 @@ msgstr ""
 "    \t\tsıfırla başlayarak sayılan N'inci girdiyi gösterir.\n"
 "    \n"
 "    Çıkış Durumu:\n"
-"    Geçersiz seçenek belirtilmediği veya bir hata oluşmadığı sürece başarılı "
-"döner."
+"    Geçersiz seçenek belirtilmediği veya bir hata oluşmadığı sürece başarılı döner."
 
 #: builtins.c:1916
 msgid ""
@@ -5387,80 +5345,63 @@ msgid ""
 "      -v var\tassign the output to shell variable VAR rather than\n"
 "    \t\tdisplay it on the standard output\n"
 "    \n"
-"    FORMAT is a character string which contains three types of objects: "
-"plain\n"
-"    characters, which are simply copied to standard output; character "
-"escape\n"
+"    FORMAT is a character string which contains three types of objects: plain\n"
+"    characters, which are simply copied to standard output; character escape\n"
 "    sequences, which are converted and copied to the standard output; and\n"
-"    format specifications, each of which causes printing of the next "
-"successive\n"
+"    format specifications, each of which causes printing of the next successive\n"
 "    argument.\n"
 "    \n"
-"    In addition to the standard format specifications described in "
-"printf(1),\n"
+"    In addition to the standard format specifications described in printf(1),\n"
 "    printf interprets:\n"
 "    \n"
 "      %b\texpand backslash escape sequences in the corresponding argument\n"
 "      %q\tquote the argument in a way that can be reused as shell input\n"
-"      %(fmt)T\toutput the date-time string resulting from using FMT as a "
-"format\n"
+"      %(fmt)T\toutput the date-time string resulting from using FMT as a format\n"
 "    \t        string for strftime(3)\n"
 "    \n"
 "    The format is re-used as necessary to consume all of the arguments.  If\n"
 "    there are fewer arguments than the format requires,  extra format\n"
-"    specifications behave as if a zero value or null string, as "
-"appropriate,\n"
+"    specifications behave as if a zero value or null string, as appropriate,\n"
 "    had been supplied.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success unless an invalid option is given or a write or "
-"assignment\n"
+"    Returns success unless an invalid option is given or a write or assignment\n"
 "    error occurs."
 msgstr ""
-"BİÇİMin  denetimi  altında  ARGümanları  standart  çıktıya biçimleyerek "
-"yazar\n"
+"BİÇİM'in denetimi altında ARGÜMAN'ları biçimleyerek yazdırır\n"
 "    \n"
 "    Seçenekler:\n"
 "      -v değişken\tseçeneği çıktının standart çıktıya\n"
-"    \t\tbasılması yerine DEĞİŞKENe atanmasını sağlar.\n"
+"    \t\t\tbasılması yerine DEĞİŞKEN'e atanmasını sağlar.\n"
 "    \n"
-"    BİÇİM  üç  tür  nesne  içeren  bir  dizgedir:  salt  karakterler\n"
-"    basitçe    standart    çıktıya   kopyalanır,   öncelenmiş   karakterler\n"
-"    dönüştürülüp  standart  çıktıya  kopyalanır  ve   biçim   belirtimleri;\n"
-"    belirtimlerin  her  biri  sırayla  karşı düşen ARGümanların basılmasını\n"
-"    sağlar.\n"
+"    BİÇİM, üç tür nesne içeren bir dizidir: Salt karakterler basitçe\n"
+"    standart çıktıya kopyalanır, öncelenmiş karakterler dönüştürülüp\n"
+"    standart çıktıya kopyalanır ve biçim belirtimleri; belirtimlerin\n"
+"    her biri sırayla karşı düşen argümanların basılmasını sağlar.\n"
 "    \n"
-"    Standart printf(1) biçimlerine ek olarak, printf aşağıdakileri de "
-"yorumlar:\n"
+"    Standart printf(1) biçimlerine ek olarak, printf şunları da yorumlar:\n"
 "    \n"
-"      %b\ttersbölü öncelemeli karakterlerin karşı düşen ARGümanda "
-"yorumlanmasını sağlar\n"
-"      %q\tARGümanın kabuk girdisi olarak kullanılabilecek biçimde "
-"kullanılabilmesi\n"
+"      %b\ttersbölü öncelemeli karakterlerin karşı düşen argümanda yorumlar\n"
+"      %q\tagrgümanın kabuk girdisi olarak kullanılabilecek biçimde biçimler\n"
 "    \t\tiçin alıntılar.\n"
-"      %(fmt)T\tstrftime(3) için bir biçim dizgesi olarak FMT tarafından "
-"kullanılmak üzere\n"
-"    \t\ttarih zaman dizgesi çıktısısı verir\n"
+"      %(fmt)T\tstrftime(3) için bir biçim dizisi olarak FMT tarafından\n"
+"    \t\tkullanılmak üzere tarih zaman dizisi çıktısısı verir\n"
 "    \n"
-"    Biçim argümanların tümünün kullanılabilmesi için gerektiğinde yeniden "
-"kullanılır.\n"
-"    Biçimin gerektirdiğinden daha az argüman varsa, ek biçim tanımlamaları "
-"uygun olduğu\n"
-"    şekilde sıfır değeri veya BOŞ (null) dizge değeri olarak davranırlar.\n"
+"    Biçim argümanların tümünün kullanılabilmesi için gerektiğinde yeniden\n"
+"    kullanılır. Biçimin gerektirdiğinden daha az argüman varsa ek biçim\n"
+"    tanımlamaları uygun olduğu şekilde sıfır değeri veya BOŞ (null) dizi\n"
+"    değeri olarak davranırlar.\n"
 "    \n"
 "    Çıkış Durumu:\n"
-"    Geçersiz bir seçenek belirtilmediği veya yazılmadığı takdirde ya da bir "
-"atama\n"
-"    hatası oluşmadığı sürece başarılı döner."
+"    Geçersiz bir seçenek belirtilmediği veya yazılmadığı takdirde veya bir\n"
+"    atama hatası oluşmadığı sürece başarılı döner."
 
 #: builtins.c:1971
 msgid ""
 "Specify how arguments are to be completed by Readline.\n"
 "    \n"
-"    For each NAME, specify how arguments are to be completed.  If no "
-"options\n"
-"    are supplied, existing completion specifications are printed in a way "
-"that\n"
+"    For each NAME, specify how arguments are to be completed.  If no options\n"
+"    are supplied, existing completion specifications are printed in a way that\n"
 "    allows them to be reused as input.\n"
 "    \n"
 "    Options:\n"
@@ -5475,10 +5416,8 @@ msgid ""
 "    \t\tcommand) word\n"
 "    \n"
 "    When completion is attempted, the actions are applied in the order the\n"
-"    uppercase-letter options are listed above. If multiple options are "
-"supplied,\n"
-"    the -D option takes precedence over -E, and both take precedence over -"
-"I.\n"
+"    uppercase-letter options are listed above. If multiple options are supplied,\n"
+"    the -D option takes precedence over -E, and both take precedence over -I.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns success unless an invalid option is supplied or an error occurs."
@@ -5489,8 +5428,7 @@ msgid ""
 "Display possible completions depending on the options.\n"
 "    \n"
 "    Intended to be used from within a shell function generating possible\n"
-"    completions.  If the optional WORD argument is supplied, matches "
-"against\n"
+"    completions.  If the optional WORD argument is supplied, matches against\n"
 "    WORD are generated.\n"
 "    \n"
 "    Exit Status:\n"
@@ -5500,22 +5438,18 @@ msgstr ""
 "    \n"
 "    Olası tamamlamaları üretmek üzere bir kabuk işlevinin içinde kullanmak\n"
 "    amacıyla tasarlanmıştır. İsteğe bağlı SÖZCÜK argümanı sağlandığı\n"
-"    takdirde eşleşmelerden sadece SÖZCÜK ile eşleşenler üretilir.\n"
+"    takdirde eşleşmelerden yalnızca SÖZCÜK ile eşleşenler üretilir.\n"
 "    \n"
 "    Çıktı Durumu:\n"
-"    Geçersiz bir seçenek girilmediği veya bir hata oluşmadığı takdirde "
-"başarılı döner."
+"    Geçersiz bir seçenek girilmediği veya bir hata oluşmadığı takdirde başarılı döner."
 
 #: builtins.c:2016
 msgid ""
 "Modify or display completion options.\n"
 "    \n"
-"    Modify the completion options for each NAME, or, if no NAMEs are "
-"supplied,\n"
-"    the completion currently being executed.  If no OPTIONs are given, "
-"print\n"
-"    the completion options for each NAME or the current completion "
-"specification.\n"
+"    Modify the completion options for each NAME, or, if no NAMEs are supplied,\n"
+"    the completion currently being executed.  If no OPTIONs are given, print\n"
+"    the completion options for each NAME or the current completion specification.\n"
 "    \n"
 "    Options:\n"
 "    \t-o option\tSet completion option OPTION for each NAME\n"
@@ -5542,22 +5476,17 @@ msgstr ""
 msgid ""
 "Read lines from the standard input into an indexed array variable.\n"
 "    \n"
-"    Read lines from the standard input into the indexed array variable "
-"ARRAY, or\n"
-"    from file descriptor FD if the -u option is supplied.  The variable "
-"MAPFILE\n"
+"    Read lines from the standard input into the indexed array variable ARRAY, or\n"
+"    from file descriptor FD if the -u option is supplied.  The variable MAPFILE\n"
 "    is the default ARRAY.\n"
 "    \n"
 "    Options:\n"
 "      -d delim\tUse DELIM to terminate lines, instead of newline\n"
-"      -n count\tCopy at most COUNT lines.  If COUNT is 0, all lines are "
-"copied\n"
-"      -O origin\tBegin assigning to ARRAY at index ORIGIN.  The default "
-"index is 0\n"
+"      -n count\tCopy at most COUNT lines.  If COUNT is 0, all lines are copied\n"
+"      -O origin\tBegin assigning to ARRAY at index ORIGIN.  The default index is 0\n"
 "      -s count\tDiscard the first COUNT lines read\n"
 "      -t\tRemove a trailing DELIM from each line read (default newline)\n"
-"      -u fd\tRead lines from file descriptor FD instead of the standard "
-"input\n"
+"      -u fd\tRead lines from file descriptor FD instead of the standard input\n"
 "      -C callback\tEvaluate CALLBACK each time QUANTUM lines are read\n"
 "      -c quantum\tSpecify the number of lines read between each call to\n"
 "    \t\t\tCALLBACK\n"
@@ -5570,13 +5499,11 @@ msgid ""
 "    element to be assigned and the line to be assigned to that element\n"
 "    as additional arguments.\n"
 "    \n"
-"    If not supplied with an explicit origin, mapfile will clear ARRAY "
-"before\n"
+"    If not supplied with an explicit origin, mapfile will clear ARRAY before\n"
 "    assigning to it.\n"
 "    \n"
 "    Exit Status:\n"
-"    Returns success unless an invalid option is given or ARRAY is readonly "
-"or\n"
+"    Returns success unless an invalid option is given or ARRAY is readonly or\n"
 "    not an indexed array."
 msgstr ""
 
@@ -5589,837 +5516,3 @@ msgstr ""
 "Bir dosyadaki satırları bir dizi değişkenine oku.\n"
 "    \n"
 "    `mapfile' ile eşanlamlıdır."
-
-#, fuzzy
-#~ msgid "Copyright (C) 2019 Free Software Foundation, Inc."
-#~ msgstr "Telif Hakkı (C) 2016 Özgür Yazılım Vakfı A.Ş."
-
-#~ msgid ""
-#~ "Returns the context of the current subroutine call.\n"
-#~ "    \n"
-#~ "    Without EXPR, returns "
-#~ msgstr ""
-#~ "Geçerli altyordam çağrısının bağlamı döndürür.\n"
-#~ "    \n"
-#~ "    İFADE olmadan, şu döner "
-
-#~ msgid "add_process: process %5ld (%s) in the_pipeline"
-#~ msgstr "add_process: %5ld (%s) süreci iletişim_tünelinde"
-
-#~ msgid "Unknown Signal #"
-#~ msgstr "Bilinmeyen Sinyal #"
-
-#~ msgid ":"
-#~ msgstr ":"
-
-#~ msgid "true"
-#~ msgstr "true"
-
-#~ msgid "false"
-#~ msgstr "false"
-
-#~ msgid "times"
-#~ msgstr "times"
-
-#~ msgid "Copyright (C) 2009 Free Software Foundation, Inc.\n"
-#~ msgstr "Telif Hakkı (C) 2009 Free Software Foundation, Inc.\n"
-
-#~ msgid ""
-#~ "License GPLv2+: GNU GPL version 2 or later <http://gnu.org/licenses/gpl."
-#~ "html>\n"
-#~ msgstr ""
-#~ "Lisans GPLv2+: GNU GPL sürüm 2 veya sonrası <http://gnu.org/licenses/gpl."
-#~ "html>\n"
-
-#~ msgid " "
-#~ msgstr " "
-
-#~ msgid "Without EXPR, returns returns \"$line $filename\".  With EXPR,"
-#~ msgstr "İFADE olmaksızın \"$line $filename\" döner. İFADE ile ise"
-
-#~ msgid "returns \"$line $subroutine $filename\"; this extra information"
-#~ msgstr "\"$line $subroutine $filename\" döner; bu ek bilgi"
-
-#~ msgid "can be used used to provide a stack trace."
-#~ msgstr "bir yığıt izini sürmek için kullanılabilir."
-
-#~ msgid ""
-#~ "The value of EXPR indicates how many call frames to go back before the"
-#~ msgstr ""
-#~ "İFADE değeri şu ankinden önce kaç çağrı çerçevesinin geri döneceğini"
-
-#~ msgid "current one; the top frame is frame 0."
-#~ msgstr "belirtir; tepe çerçeve 0. çerçevedir."
-
-#~ msgid "%s: invalid number"
-#~ msgstr "%s: sayı geçersiz"
-
-#~ msgid "Shell commands matching keywords `"
-#~ msgstr "Bu anahtar sözcüklere uygun kabuk komutları: `"
-
-#~ msgid "Display the list of currently remembered directories.  Directories"
-#~ msgstr ""
-#~ "\rdirs [-clpv] [+N] [-N]\n"
-#~ "    O an anımsanan dizinleri listeler.  Dizinler listeye"
-
-#~ msgid "find their way onto the list with the `pushd' command; you can get"
-#~ msgstr "`pushd' komutuyla eklenir; listeden tek tek geri almak içinse"
-
-#~ msgid "back up through the list with the `popd' command."
-#~ msgstr "`popd' komutu kullanılır."
-
-#~ msgid ""
-#~ "The -l flag specifies that `dirs' should not print shorthand versions"
-#~ msgstr "-l seçeneği `dirs'in dizinleri ev dizininize göreli kısayollar"
-
-#~ msgid ""
-#~ "of directories which are relative to your home directory.  This means"
-#~ msgstr ""
-#~ "olarak göstermemesine yol açar.  Yani `~/bin' yerine `/homes/bfox/bin'"
-
-#~ msgid "that `~/bin' might be displayed as `/homes/bfox/bin'.  The -v flag"
-#~ msgstr "gibi bir gösterimle karşılaşabilirsiniz. -v seçeneği `dirs'in"
-
-#~ msgid "causes `dirs' to print the directory stack with one entry per line,"
-#~ msgstr "dizin yığıtını dizin adının önüne yığıt konumunu ekleyerek her"
-
-#~ msgid ""
-#~ "prepending the directory name with its position in the stack.  The -p"
-#~ msgstr "satırda bir girdi göstermesini sağlar. -p seçeneği yığıttaki"
-
-#~ msgid "flag does the same thing, but the stack position is not prepended."
-#~ msgstr "konumu göstermemesi dışında aynı çıktıyı verir."
-
-#~ msgid ""
-#~ "The -c flag clears the directory stack by deleting all of the elements."
-#~ msgstr "-c seçeneği tüm girdileri silerek dizin yığıtını boşaltır."
-
-#~ msgid ""
-#~ "+N   displays the Nth entry counting from the left of the list shown by"
-#~ msgstr "+N   dirs seçeneksiz çağrıldığında gösterdiği listenin solundan"
-
-#~ msgid "     dirs when invoked without options, starting with zero."
-#~ msgstr "     sıfırla başlayarak sayılan N'inci girdiyi gösterir."
-
-#~ msgid ""
-#~ "-N   displays the Nth entry counting from the right of the list shown by"
-#~ msgstr "-N   dirs seçeneksiz çağrıldığında gösterdiği listenin sağından"
-
-#~ msgid "Adds a directory to the top of the directory stack, or rotates"
-#~ msgstr "Dizin yığıtının en üstüne bir dizin ekler, ya da geçerli çalışma"
-
-#~ msgid "the stack, making the new top of the stack the current working"
-#~ msgstr "dizini yığıtın tepesine gelecek şekilde yığıtı döndürür."
-
-#~ msgid "directory.  With no arguments, exchanges the top two directories."
-#~ msgstr "Hiç argüman verilmemişse en üstteki iki dizini yer değiştirir."
-
-#~ msgid "+N   Rotates the stack so that the Nth directory (counting"
-#~ msgstr "+N   (`dirs' tarafından gösterilen listenin solundan saymaya"
-
-#~ msgid "     from the left of the list shown by `dirs', starting with"
-#~ msgstr "     sıfırla başlandığında) N'inci dizin tepeye gelecek şekilde"
-
-#~ msgid "     zero) is at the top."
-#~ msgstr "     yığıtı döndürür."
-
-#~ msgid "-N   Rotates the stack so that the Nth directory (counting"
-#~ msgstr "-N   (`dirs' tarafından gösterilen listenin sağından saymaya"
-
-#~ msgid "     from the right of the list shown by `dirs', starting with"
-#~ msgstr "     sıfırla başlandığında) N'inci dizin tepeye gelecek şekilde"
-
-#~ msgid "-n   suppress the normal change of directory when adding directories"
-#~ msgstr "+n   dizinleri yığıta eklerken normal dizin değişikliğini engeller,"
-
-#~ msgid "     to the stack, so only the stack is manipulated."
-#~ msgstr "     böylece sadece yığıt değiştirilmiş olur."
-
-#~ msgid "dir  adds DIR to the directory stack at the top, making it the"
-#~ msgstr "dir  DİZİNi yeni çalışma dizini yaparak dizin yığıtının"
-
-#~ msgid "     new current working directory."
-#~ msgstr "     tepesine ekler."
-
-#~ msgid "You can see the directory stack with the `dirs' command."
-#~ msgstr "Dizin yığıtını `dirs' komutuyla görebilirsiniz."
-
-#~ msgid "Removes entries from the directory stack.  With no arguments,"
-#~ msgstr "Dizin yığıtından girdileri siler.  Hiç argüman verilmemişse,"
-
-#~ msgid "removes the top directory from the stack, and cd's to the new"
-#~ msgstr "yığıtın en üstündeki dizini yığıttan kaldırır ve"
-
-#~ msgid "+N   removes the Nth entry counting from the left of the list"
-#~ msgstr "+N   `dirs' tarafından gösterilen listenin solundan saymaya"
-
-#~ msgid "     shown by `dirs', starting with zero.  For example: `popd +0'"
-#~ msgstr "     sıfırla başlandığında N'inci girdiyi siler. Örneğin,"
-
-#~ msgid "     removes the first directory, `popd +1' the second."
-#~ msgstr "     `popd +0' ilk dizini `popd +1' ikincisini siler."
-
-#~ msgid "-N   removes the Nth entry counting from the right of the list"
-#~ msgstr "-N   `dirs' tarafından gösterilen listenin sağından saymaya"
-
-#~ msgid "     shown by `dirs', starting with zero.  For example: `popd -0'"
-#~ msgstr "     sıfırla başlandığında N'inci girdiyi siler. Örneğin,"
-
-#~ msgid "     removes the last directory, `popd -1' the next to last."
-#~ msgstr "     `popd -0' son dizini `popd -1' sonuncudan öncekini siler."
-
-#~ msgid ""
-#~ "-n   suppress the normal change of directory when removing directories"
-#~ msgstr ""
-#~ "-n   dizinleri yığıttan silerken normal dizin değişikliğini engeller,"
-
-#~ msgid "     from the stack, so only the stack is manipulated."
-#~ msgstr "     böylece sadece yığıt değiştirilmiş olur."
-
-#~ msgid "allocated"
-#~ msgstr "ayrılmış"
-
-#~ msgid "freed"
-#~ msgstr "serbest bırakılmış"
-
-#~ msgid "requesting resize"
-#~ msgstr "yeniden boyutlandırma isteniyor"
-
-#~ msgid "just resized"
-#~ msgstr "yeniden boyutlandırıldı"
-
-#~ msgid "bug: unknown operation"
-#~ msgstr "yazılım hatası: unknown operation"
-
-#~ msgid "malloc: watch alert: %p %s "
-#~ msgstr "malloc: yakalama alarmı: %p %s "
-
-#~ msgid "xrealloc: cannot reallocate %lu bytes (%lu bytes allocated)"
-#~ msgstr "xrealloc: %lu bayt yeniden ayrılamıyor (%lu bayt ayrıldı)"
-
-#~ msgid "xrealloc: cannot allocate %lu bytes"
-#~ msgstr "xrealloc: %lu bayt yeniden ayrılamıyor"
-
-#~ msgid "xrealloc: %s:%d: cannot reallocate %lu bytes (%lu bytes allocated)"
-#~ msgstr "xrealloc: %s:%d: %lu bayt yeniden ayrılamıyor (%lu bayt ayrıldı)"
-
-#~ msgid ""
-#~ "Exit from within a FOR, WHILE or UNTIL loop.  If N is specified,\n"
-#~ "    break N levels."
-#~ msgstr ""
-#~ "\rbreak [N]\n"
-#~ "    FOR, WHILE veya UNTIL döngülerinden çıkılmasını sağlar. N "
-#~ "verilmişse,\n"
-#~ "    dışa doğru N. döngüden çıkılır. N >= 1 olmalıdır."
-
-#~ msgid ""
-#~ "Run a shell builtin.  This is useful when you wish to rename a\n"
-#~ "    shell builtin to be a function, but need the functionality of the\n"
-#~ "    builtin within the function itself."
-#~ msgstr ""
-#~ "\rbuiltin [kabuk-yerleşiği [argümanlar]]\n"
-#~ "    Bir  kabuk  yerleşiğini  çalıştırır.  Bu bir kabuk işlevinin bir "
-#~ "kabul\n"
-#~ "    yerleşiği ile aynı isimde atanması durumunda faydalıdır, fakat "
-#~ "işlevin\n"
-#~ "    içinde yerleşiğin işlevselliğinin sağlanması gerekir."
-
-#~ msgid ""
-#~ "Print the current working directory.  With the -P option, pwd prints\n"
-#~ "    the physical directory, without any symbolic links; the -L option\n"
-#~ "    makes pwd follow symbolic links."
-#~ msgstr ""
-#~ "\rpwd [-LP]\n"
-#~ "    Geçerli çalışma dizinini basar. -P seçeneği ile sembolik bağlar\n"
-#~ "    olmaksızın fiziksel dizini basar;  -L seçeneği ile sembolik bağları "
-#~ "izler."
-
-#~ msgid "Return a successful result."
-#~ msgstr ""
-#~ "\rtrue\n"
-#~ "    Başarılı bir sonuç döndürür."
-
-#~ msgid ""
-#~ "Runs COMMAND with ARGS ignoring shell functions.  If you have a shell\n"
-#~ "    function called `ls', and you wish to call the command `ls', you can\n"
-#~ "    say \"command ls\".  If the -p option is given, a default value is "
-#~ "used\n"
-#~ "    for PATH that is guaranteed to find all of the standard utilities.  "
-#~ "If\n"
-#~ "    the -V or -v option is given, a string is printed describing "
-#~ "COMMAND.\n"
-#~ "    The -V option produces a more verbose description."
-#~ msgstr ""
-#~ "\rcommand [-pVv] KOMUT [ARGümanlar ...]\n"
-#~ "    KOMUT  komutunu  KOMUT  isimli kabuk işlevini yoksayarak  "
-#~ "ARGümanlarla\n"
-#~ "    çalıştırır. Örneğin,  `ls'  isimli bir kabuk işlevi varsa ve siz  "
-#~ "`ls'\n"
-#~ "    komutunu  çalıştırmak  istiyorsanız   \"command ls\"   "
-#~ "diyebilirsiniz.\n"
-#~ "    -p seçeneği verilmişse, tüm standart uygulamaların bulunmasını "
-#~ "garanti\n"
-#~ "    eden PATH için bir öntanımlı değer kullanılır.  -V  ya da  -v "
-#~ "seçeneği\n"
-#~ "    verilmişse,  KOMUTu  açıklayan  bir dizge  basılır.  -V  seçeneği "
-#~ "daha\n"
-#~ "    ayrıntılı açıklama üretilmesini sağlar. "
-
-#~ msgid ""
-#~ "Declare variables and/or give them attributes.  If no NAMEs are\n"
-#~ "    given, then display the values of variables instead.  The -p option\n"
-#~ "    will display the attributes and values of each NAME.\n"
-#~ "    \n"
-#~ "    The flags are:\n"
-#~ "    \n"
-#~ "      -a\tto make NAMEs arrays (if supported)\n"
-#~ "      -f\tto select from among function names only\n"
-#~ "      -F\tto display function names (and line number and source file name "
-#~ "if\n"
-#~ "    \tdebugging) without definitions\n"
-#~ "      -i\tto make NAMEs have the `integer' attribute\n"
-#~ "      -r\tto make NAMEs readonly\n"
-#~ "      -t\tto make NAMEs have the `trace' attribute\n"
-#~ "      -x\tto make NAMEs export\n"
-#~ "    \n"
-#~ "    Variables with the integer attribute have arithmetic evaluation (see\n"
-#~ "    `let') done when the variable is assigned to.\n"
-#~ "    \n"
-#~ "    When displaying values of variables, -f displays a function's name\n"
-#~ "    and definition.  The -F option restricts the display to function\n"
-#~ "    name only.\n"
-#~ "    \n"
-#~ "    Using `+' instead of `-' turns off the given attribute instead.  "
-#~ "When\n"
-#~ "    used in a function, makes NAMEs local, as with the `local' command."
-#~ msgstr ""
-#~ "\rdeclare [-afFirtx] [-p] [İSİM[=DEĞER] ...]\n"
-#~ "    Değişkenlerin özellikleri ile  bildirilmesini  sağlar.  Hiçbir  İSİM\n"
-#~ "    verilmezse değişkenleri ve değerlerini listeler. -p seçeneği ile her\n"
-#~ "    İSİM için değerler ve özellikleri gösterecektir.\n"
-#~ "\n"
-#~ "    Seçenekler:\n"
-#~ "\n"
-#~ "      -a    Her İSİM bir dizi değişkenidir(destekleniyorsa)\n"
-#~ "      -f    Sadece işlev isimleri kullanılır.\n"
-#~ "      -F    Tanımları olmaksızın sadece işlev isimleri  (ve hata "
-#~ "ayıklaması\n"
-#~ "            yapılıyorsa kaynak dosya isimleri ve satır sayıları) "
-#~ "gösterilir\n"
-#~ "      -i    Her İSİMe  `integer' özniteliği verir.\n"
-#~ "      -r    İSİMleri salt-okunur yapar.\n"
-#~ "      -t    Her İSİMe `trace' özniteliği verir.\n"
-#~ "      -x    İSİMleri ihraç edilebilir yapar\n"
-#~ "\n"
-#~ "    Tamsayı öznitelikli değişkenlere bir DEĞER atandığında aritmetik\n"
-#~ "    değerlendirme uygulanır (bkz, `let').\n"
-#~ "\n"
-#~ "    Değişken değerleri gösterilirken,  -f  bir işlevin ismini ve "
-#~ "tanımını\n"
-#~ "    gösterir. -F seçeneği ile sadece işlev isminin gösterilmesini "
-#~ "sağlar.\n"
-#~ "\n"
-#~ "    `-' yerine `+' kullanarak belirtilen öznitelik kapatılabilir.\n"
-#~ "    Bir işlevde kullanıldığında declare her İSİMi `local' komutu "
-#~ "kullanılmış\n"
-#~ "    gibi yerel yapar."
-
-#~ msgid "Obsolete.  See `declare'."
-#~ msgstr ""
-#~ "\rtypeset [-afFirtx] [-p] İSİM[=DEĞER] ...\n"
-#~ "    Geçersiz (eski). `declare'ye bakın."
-
-#~ msgid ""
-#~ "Create a local variable called NAME, and give it VALUE.  LOCAL\n"
-#~ "    can only be used within a function; it makes the variable NAME\n"
-#~ "    have a visible scope restricted to that function and its children."
-#~ msgstr ""
-#~ "\rlocal [seçenek] İSİM[=DEĞER] ...\n"
-#~ "    İSİM  isimli  bir  yerel  değişken  oluşturulup,  ona  DEĞER  atar.\n"
-#~ "    local sadece bir işlev  içinde  kullanılabilir;  İSİM  değişkeninin\n"
-#~ "    sadece işlev ve çocuklarının etki alanında görünür olmasını sağlar."
-
-#~ msgid ""
-#~ "Output the ARGs.  If -n is specified, the trailing newline is suppressed."
-#~ msgstr ""
-#~ "\recho [-neE] [ARG ...]\n"
-#~ "    ARGümanlarını çıktılar. -n belirtilmişse, satırsonu bastırılır."
-
-#~ msgid ""
-#~ "Enable and disable builtin shell commands.  This allows\n"
-#~ "    you to use a disk command which has the same name as a shell\n"
-#~ "    builtin without specifying a full pathname.  If -n is used, the\n"
-#~ "    NAMEs become disabled; otherwise NAMEs are enabled.  For example,\n"
-#~ "    to use the `test' found in $PATH instead of the shell builtin\n"
-#~ "    version, type `enable -n test'.  On systems supporting dynamic\n"
-#~ "    loading, the -f option may be used to load new builtins from the\n"
-#~ "    shared object FILENAME.  The -d option will delete a builtin\n"
-#~ "    previously loaded with -f.  If no non-option names are given, or\n"
-#~ "    the -p option is supplied, a list of builtins is printed.  The\n"
-#~ "    -a option means to print every builtin with an indication of whether\n"
-#~ "    or not it is enabled.  The -s option restricts the output to the "
-#~ "POSIX.2\n"
-#~ "    `special' builtins.  The -n option displays a list of all disabled "
-#~ "builtins."
-#~ msgstr ""
-#~ "\renable [-n] [-p] [-f DOSYAİSMİ] [-ads] [İSİM ...]\n"
-#~ "    Yerleşik  kabuk  komutlarını  etkinleştirir  ve  kaldırır.  Bir  "
-#~ "kabuk\n"
-#~ "    yerleşiği  ile  aynı  isme  sahip  bir  disk  komutunun tam dosya "
-#~ "yolu\n"
-#~ "    belirtmeksizin   kullanılabilmesini   mümkün   kılar.    -n   "
-#~ "seçeneği\n"
-#~ "    kullanılmışsa İSİMler  kullanımdan kaldırılır;  aksi takdirde  "
-#~ "İSİMler\n"
-#~ "    etkin kılınır.  Örneğin `test' yerleşiği yerine  `test'  "
-#~ "uygulamasının\n"
-#~ "    yerleşik  komut olarak  kullanılmasını sağlamak için  `enable -n "
-#~ "test'\n"
-#~ "    yazmalısınız.   Dinamik  yüklemenin   desteklendiği  sistemlerde,   -"
-#~ "f\n"
-#~ "    seçeneği ile yeni bir İSİM yerleşik komutunun DOSYAİSMİ ile "
-#~ "belirtilen\n"
-#~ "    paylaşımlı nesneden yüklenmesi sağlanır.  -d seçeneği  -f ile "
-#~ "yüklenen\n"
-#~ "    yerleşiği  silmek  için  kullanılır.  Hiç seçenek verilmezse ya da  -"
-#~ "p\n"
-#~ "    seçeneği verilirse kabuk yerleşiklerinin bir  listesi  gösterilir.  -"
-#~ "a\n"
-#~ "    seçeneği ile her yerleşik etkin olup olmadığı belirtilerek "
-#~ "listelenir.\n"
-#~ "    -s  seçeneği ile sadece POSIX'e özel yerleşikleri içerir.  -n "
-#~ "seçeneği\n"
-#~ "    bir   İSİM   belirtilmeksizin   kullanılırsa  kullanımdan  "
-#~ "kaldırılmış\n"
-#~ "    yerleşikleri listeler."
-
-#~ msgid ""
-#~ "Read ARGs as input to the shell and execute the resulting command(s)."
-#~ msgstr ""
-#~ "\reval [ARG ...]\n"
-#~ "   Kabuğa girilmiş biçimleriyle ARG'ları okur ve sonuçlanan komutları "
-#~ "çalıştır."
-
-#~ msgid ""
-#~ "Exec FILE, replacing this shell with the specified program.\n"
-#~ "    If FILE is not specified, the redirections take effect in this\n"
-#~ "    shell.  If the first argument is `-l', then place a dash in the\n"
-#~ "    zeroth arg passed to FILE, as login does.  If the `-c' option\n"
-#~ "    is supplied, FILE is executed with a null environment.  The `-a'\n"
-#~ "    option means to make set argv[0] of the executed process to NAME.\n"
-#~ "    If the file cannot be executed and the shell is not interactive,\n"
-#~ "    then the shell exits, unless the shell option `execfail' is set."
-#~ msgstr ""
-#~ "\rexec [-cl] [-a AD] DOSYA [YÖNLENDİRMELER]]\n"
-#~ "    DOSYA'yı yeni bir süreç oluşturmadan kabukla değiştirip çalıştırır.\n"
-#~ "    Eğer  DOSYA  belirtilmemişse,  kabukta  YÖNLENDİRMELER etkili olur.\n"
-#~ "    Eğer ilk  argüman  -l ise,  login'in yaptığı gibi DOSYAya aktarılan\n"
-#~ "    sıfırıncı argümana bir tire yerleştirilir.  -c seçeneği verilmişse,\n"
-#~ "    DOSYA  boş bir ortamda çalıştırılır.  -a  seçeneği verilirse kabuk,\n"
-#~ "    DOSYAya  ADı  0.  argüman  (argv[0])  olarak  aktarır.  Eğer  DOSYA\n"
-#~ "    çalıştırılamazsa  ve  kabuk etkileşimli değilse,  `execfail'  kabuk\n"
-#~ "    değişkeni etkin olmadıkça kabuk çıkar."
-
-#~ msgid "Logout of a login shell."
-#~ msgstr ""
-#~ "\rlogout\n"
-#~ "    Oturum kabuğundan çıkıp oturumu kapatır."
-
-#~ msgid ""
-#~ "For each NAME, the full pathname of the command is determined and\n"
-#~ "    remembered.  If the -p option is supplied, PATHNAME is used as the\n"
-#~ "    full pathname of NAME, and no path search is performed.  The -r\n"
-#~ "    option causes the shell to forget all remembered locations.  The -d\n"
-#~ "    option causes the shell to forget the remembered location of each "
-#~ "NAME.\n"
-#~ "    If the -t option is supplied the full pathname to which each NAME\n"
-#~ "    corresponds is printed.  If multiple NAME arguments are supplied "
-#~ "with\n"
-#~ "    -t, the NAME is printed before the hashed full pathname.  The -l "
-#~ "option\n"
-#~ "    causes output to be displayed in a format that may be reused as "
-#~ "input.\n"
-#~ "    If no arguments are given, information about remembered commands is "
-#~ "displayed."
-#~ msgstr ""
-#~ "\rhash [-lr] [-p DOSYAYOLU] [-dt] [AD]\n"
-#~ "    AD argümanları olarak belirtilen  komutların  tam  dosya  yollarını\n"
-#~ "    hatırlar,  böylece  müteakip  çağrılarda aranmalarına gerek kalmaz.\n"
-#~ "    Komutlar $PATH içinde listelenmiş  dizinler  aranarak  bulunur.  -p\n"
-#~ "    seçeneği  dosya  yolu  aramalarını  engeller  ve ADın konumu olarak\n"
-#~ "    DOSYAYOLU kullanılır. -r seçeneği hatırlanan tüm konumları  kabuğun\n"
-#~ "    unutmasına  sebep olur.  -d seçeneği her AD için hatırlanan konumun\n"
-#~ "    kabuk tarafından unutulmasına sebep olur. -t seçeneği  verildiğinde\n"
-#~ "    her ADa karşılık gelen dosya konumları basılır. -t seçeneği ile çok\n"
-#~ "    sayıda AD verilirse, AD hatırlanan tam dosya yolundan önce basılır.\n"
-#~ "    -l  seçeneği çıktının girdi olarak tekrar kullanılmasını sağlayacak\n"
-#~ "    biçimde basılmasını sağlar. Hiç argüman belirtilmezse ya da  sadece\n"
-#~ "   -l seçeneği belirtilirse hatırlanan komutlar hakkında bilgi basılır."
-
-#~ msgid ""
-#~ "Display helpful information about builtin commands.  If PATTERN is\n"
-#~ "    specified, gives detailed help on all commands matching PATTERN,\n"
-#~ "    otherwise a list of the builtins is printed.  The -s option\n"
-#~ "    restricts the output for each builtin command matching PATTERN to\n"
-#~ "    a short usage synopsis."
-#~ msgstr ""
-#~ "\rhelp [-s] [KALIP]\n"
-#~ "    Yerleşik komutlar hakkında yardım bilgisi gösterir. KALIP  "
-#~ "belirtilmişse,\n"
-#~ "    help  KALIP  ile eşleşen tüm komutlar için yardım bilgisi  gösterir, "
-#~ "aksi\n"
-#~ "    takdirde yerleşikler listelenir.   -s seçeneği ile yardım bilgisi  "
-#~ "yerine\n"
-#~ "    komutun kullanımını gösteren sözdizimini basar."
-
-#~ msgid ""
-#~ "By default, removes each JOBSPEC argument from the table of active jobs.\n"
-#~ "    If the -h option is given, the job is not removed from the table, but "
-#~ "is\n"
-#~ "    marked so that SIGHUP is not sent to the job if the shell receives a\n"
-#~ "    SIGHUP.  The -a option, when JOBSPEC is not supplied, means to remove "
-#~ "all\n"
-#~ "    jobs from the job table; the -r option means to remove only running "
-#~ "jobs."
-#~ msgstr ""
-#~ "\rdisown [-h] [-ar] [İŞ_BELİRTİMİ ...]\n"
-#~ "    Seçeneksiz kullanımda her İŞ_BELİRTİMİ etkin  işler  tablosundan\n"
-#~ "    kaldırılır.  -h seçeneği ile iş tablodan kaldırılmaz ama imlenir\n"
-#~ "    böylece kabuk bir SIGHUP alırsa bunu işe göndermez. İŞ_BELİRTİMİ\n"
-#~ "    verilmeden -a seçeneğinin kullanılması durumunda iş tablosundaki\n"
-#~ "    tüm işler kaldırılır.  İŞ_BELİRTİMİ  verilmeden  -r  seçeneğinin\n"
-#~ "    kullanılması durumunda ise sadece çalışmakta olan işler kaldırılır."
-
-#~ msgid ""
-#~ "One line is read from the standard input, or from file descriptor FD if "
-#~ "the\n"
-#~ "    -u option is supplied, and the first word is assigned to the first "
-#~ "NAME,\n"
-#~ "    the second word to the second NAME, and so on, with leftover words "
-#~ "assigned\n"
-#~ "    to the last NAME.  Only the characters found in $IFS are recognized "
-#~ "as word\n"
-#~ "    delimiters.  If no NAMEs are supplied, the line read is stored in the "
-#~ "REPLY\n"
-#~ "    variable.  If the -r option is given, this signifies `raw' input, "
-#~ "and\n"
-#~ "    backslash escaping is disabled.  The -d option causes read to "
-#~ "continue\n"
-#~ "    until the first character of DELIM is read, rather than newline.  If "
-#~ "the -p\n"
-#~ "    option is supplied, the string PROMPT is output without a trailing "
-#~ "newline\n"
-#~ "    before attempting to read.  If -a is supplied, the words read are "
-#~ "assigned\n"
-#~ "    to sequential indices of ARRAY, starting at zero.  If -e is supplied "
-#~ "and\n"
-#~ "    the shell is interactive, readline is used to obtain the line.  If -n "
-#~ "is\n"
-#~ "    supplied with a non-zero NCHARS argument, read returns after NCHARS\n"
-#~ "    characters have been read.  The -s option causes input coming from a\n"
-#~ "    terminal to not be echoed.\n"
-#~ "    \n"
-#~ "    The -t option causes read to time out and return failure if a "
-#~ "complete line\n"
-#~ "    of input is not read within TIMEOUT seconds.  If the TMOUT variable "
-#~ "is set,\n"
-#~ "    its value is the default timeout.  The return code is zero, unless "
-#~ "end-of-file\n"
-#~ "    is encountered, read times out, or an invalid file descriptor is "
-#~ "supplied as\n"
-#~ "    the argument to -u."
-#~ msgstr ""
-#~ "\rread [-ers] [-u DSYTNT] [-t ZMAŞM] [-p İSTEM] [-a DİZİ]\n"
-#~ "     [-n KRKSAY] [-d AYRAÇ] [İSİM ...]\n"
-#~ "    Standart girdiden ya da -u seçeneği ile sağlanan  DoSYaTaNıTıcıdan  "
-#~ "tek\n"
-#~ "    satır okur ve ilk sözcük ilk İSİMe, ikinci sözcük ikinci İSİMe ve "
-#~ "böyle\n"
-#~ "    giderek,  aradaki sözcükler ve ayraçlar son İSİMe kadar atanır.  "
-#~ "Satırı\n"
-#~ "    sözcüklere ayırmakta sadece  $IFS  değişkeninin değerindeki "
-#~ "karakterler\n"
-#~ "    kullanılır.  Tersbölü satırın devam ettirilmesi için ve kendinden "
-#~ "sonra\n"
-#~ "    gelen özel karakterlerin  yorumlanması  için  kullanılabilir.  Hiç "
-#~ "isim\n"
-#~ "    verilmemişse,  satırın tamamı okunur ve  REPLY  değişkenine atanır.  -"
-#~ "r\n"
-#~ "    verildiğinde  tersbölü  bir  önceleme  karakteri  olarak  ele  "
-#~ "alınmaz,\n"
-#~ "    dolayısıyla tersbölü-satırsonu çifti satırın alt satırda devam "
-#~ "edeceğini\n"
-#~ "    belirtmekte kullanılamaz.  -d  ile  satırın  satırsonu karakterine "
-#~ "kadar\n"
-#~ "    değil   AYRAÇ   karakterine  kadar  okunması  sağlanır.   -p  ile  "
-#~ "girdi\n"
-#~ "    beklendiğini belirtecek İSTEM  dizgesi  satırsonu  karakteri  "
-#~ "olmaksızın\n"
-#~ "    görüntülenir.   İstem  sadece girdi bir uçbirimden gelecekse "
-#~ "gösterilir.\n"
-#~ "    -a ile sözcükler sırayla DİZİ dizisinin elemanlarına atanır; dizinin "
-#~ "ilk\n"
-#~ "    elemanının indisi  0'dır;  atama  yapılmadan  önce  DİZİ  dizisinin  "
-#~ "tüm\n"
-#~ "    elemanları  silinir;  diğer  İSİM  argümanları yoksayılır.  -e ile "
-#~ "kabuk\n"
-#~ "    etkileşimliyse,  satırı  sağlamak  için  readline  kullanılır.   -n  "
-#~ "ile\n"
-#~ "    satırın  okunması  KRKSAYıncı  karakterde  sona erer; satırın kalanı "
-#~ "yok\n"
-#~ "    sayılır. -s ile sessiz kipe  girilir,  girdi  bir  uçbirimden  "
-#~ "geliyorsa\n"
-#~ "    karakterler  yansılanmaz.   -t  ile   satır   ZMAŞM  saniye  sonra  "
-#~ "hala\n"
-#~ "    sonlandırılmamışsa  read  zamanaşımına  düşer  ve  hata  döner.   "
-#~ "$TMOUT\n"
-#~ "    değişkeni  bir  değerle  atanmışsa  değeri  öntanımlı  zamanaşımı "
-#~ "değeri\n"
-#~ "    olarak ele alınır.  Bu seçenek, girdi bir uçbirim  ya  da  "
-#~ "boruhattından\n"
-#~ "    okunmuyorsa  etkisizdir.   Dosyasonu  karakteri  (Ctrl-D) "
-#~ "saptanmadıkça,\n"
-#~ "    okuma zamanaşımına düşmedikçe ya da -u seçeneği ile sağlanan\n"
-#~ "    DoSYaTaNıTıcı geçersiz olmadıkça dönüş durumu sıfırdır."
-
-#~ msgid ""
-#~ "Causes a function to exit with the return value specified by N.  If N\n"
-#~ "    is omitted, the return status is that of the last command."
-#~ msgstr ""
-#~ "\rreturn [N]\n"
-#~ "    Bir işlevin N değeri ile dönerek çıkmasına sebep olur. N verilmezse\n"
-#~ "    son komutun dönüş durumu döner."
-
-#~ msgid ""
-#~ "For each NAME, remove the corresponding variable or function.  Given\n"
-#~ "    the `-v', unset will only act on variables.  Given the `-f' flag,\n"
-#~ "    unset will only act on functions.  With neither flag, unset first\n"
-#~ "    tries to unset a variable, and if that fails, then tries to unset a\n"
-#~ "    function.  Some variables cannot be unset; also see readonly."
-#~ msgstr ""
-#~ "\runset [-f] [-v] [AD ...]\n"
-#~ "    ADı belirtilen her işlev ya da değişken kaldırılır. -v verilmişse,\n"
-#~ "    işlem sadece kabuk değişkenlerine uygulanır.  -f verilmişse, işlem\n"
-#~ "    sadece  kabuk  işlevlerine  uygulanır  ve işlev tanımı kaldırılır.\n"
-#~ "    Hiçbir seçenek verilmemişse, unset önce bir  değişkeni  kaldırmayı\n"
-#~ "    dener,  başarısız olursa bir işlevi kaldırmayı dener.  Salt-okunur\n"
-#~ "    değişkenler ve işlevler kaldırılamaz."
-
-#~ msgid ""
-#~ "NAMEs are marked for automatic export to the environment of\n"
-#~ "    subsequently executed commands.  If the -f option is given,\n"
-#~ "    the NAMEs refer to functions.  If no NAMEs are given, or if `-p'\n"
-#~ "    is given, a list of all names that are exported in this shell is\n"
-#~ "    printed.  An argument of `-n' says to remove the export property\n"
-#~ "    from subsequent NAMEs.  An argument of `--' disables further option\n"
-#~ "    processing."
-#~ msgstr ""
-#~ "\rexport [-nf] [İSİM[=DEĞER] ...]\n"
-#~ "export -p\n"
-#~ "    Ortamdaki  çocuk  sürece aktarılacak her İSİM'i imler.  -f "
-#~ "verilmişse\n"
-#~ "    İSİM'ler kabuk işlevleridir,  aksi  takdirde  kabuk  "
-#~ "değişkenleridir.\n"
-#~ "    -n  seçeneği  verilirse  aktarılacak  İSİM'ler  artık imlenmez.  "
-#~ "İSİM\n"
-#~ "    verilmemişse veya -p seçeneği verilmişse aktarılan İSİM'lerin "
-#~ "listesi\n"
-#~ "    gösterilir.  -p  seçeneği çıktının girdi olarak tekrar "
-#~ "kullanılabilir\n"
-#~ "    biçimde gösterilmesini sağlar.  Bir değişken  isminden  sonra  "
-#~ "=DEĞER\n"
-#~ "    geliyorsa değer değişkenin değeri yapılır. `--' ile seçenek "
-#~ "işlemleri\n"
-#~ "    kapatılır."
-
-#~ msgid ""
-#~ "The given NAMEs are marked readonly and the values of these NAMEs may\n"
-#~ "    not be changed by subsequent assignment.  If the -f option is given,\n"
-#~ "    then functions corresponding to the NAMEs are so marked.  If no\n"
-#~ "    arguments are given, or if `-p' is given, a list of all readonly "
-#~ "names\n"
-#~ "    is printed.  The `-a' option means to treat each NAME as\n"
-#~ "    an array variable.  An argument of `--' disables further option\n"
-#~ "    processing."
-#~ msgstr ""
-#~ "\rreadonly [-af] [İSİM[=DEĞER] ...]\n"
-#~ "readonly -p\n"
-#~ "    Her İSİM'i salt-okunur olarak imler. Bu İSİM'lerin değerleri\n"
-#~ "    müteakip çağrılarda değiştirilemez. -f seçeneği verilirse, her\n"
-#~ "    İSİM bir kabuk işlevi olarak imlenir. -a seçeneği verilirse, her\n"
-#~ "    isim bir dizi değişkeni olarak ele alınır. Hiç argüman verilmezse\n"
-#~ "    veya -p seçeneği verilirse salt-okunur isimlerin hepsi basılır. Bir\n"
-#~ "    değişken isminden sonra bir =DEĞER geliyorsa DEĞER değişkenin değeri\n"
-#~ "    yapılır. `--' ile seçenek işlemleri kapatılır."
-
-#~ msgid ""
-#~ "The positional parameters from $N+1 ... are renamed to $1 ...  If N is\n"
-#~ "    not given, it is assumed to be 1."
-#~ msgstr ""
-#~ "\rshift [N]\n"
-#~ "    $N+1 ... konumsal parametreleri $1 ... olarak ele alınır.\n"
-#~ "    N verilmezse 1 kabul edilir."
-
-#~ msgid ""
-#~ "Suspend the execution of this shell until it receives a SIGCONT\n"
-#~ "    signal.  The `-f' if specified says not to complain about this\n"
-#~ "    being a login shell if it is; just suspend anyway."
-#~ msgstr ""
-#~ "\rsuspend [-f]\n"
-#~ "    Bu kabuğun çalışmasını bir SIGCONT sinyali alana kadar askıya alır.\n"
-#~ "    -f seçeneği kullanıldığında kabuk bir giriş kabuğu olsa bile askıya "
-#~ "alınır."
-
-#~ msgid ""
-#~ "Print the accumulated user and system times for processes run from\n"
-#~ "    the shell."
-#~ msgstr ""
-#~ "\rtimes\n"
-#~ "    Kabukta çalışan süreçlerden toplanan kullanıcı ve sistem zamanlarını "
-#~ "basar."
-
-#~ msgid ""
-#~ "For each NAME, indicate how it would be interpreted if used as a\n"
-#~ "    command name.\n"
-#~ "    \n"
-#~ "    If the -t option is used, `type' outputs a single word which is one "
-#~ "of\n"
-#~ "    `alias', `keyword', `function', `builtin', `file' or `', if NAME is "
-#~ "an\n"
-#~ "    alias, shell reserved word, shell function, shell builtin, disk "
-#~ "file,\n"
-#~ "    or unfound, respectively.\n"
-#~ "    \n"
-#~ "    If the -p flag is used, `type' either returns the name of the disk\n"
-#~ "    file that would be executed, or nothing if `type -t NAME' would not\n"
-#~ "    return `file'.\n"
-#~ "    \n"
-#~ "    If the -a flag is used, `type' displays all of the places that "
-#~ "contain\n"
-#~ "    an executable named `file'.  This includes aliases, builtins, and\n"
-#~ "    functions, if and only if the -p flag is not also used.\n"
-#~ "    \n"
-#~ "    The -f flag suppresses shell function lookup.\n"
-#~ "    \n"
-#~ "    The -P flag forces a PATH search for each NAME, even if it is an "
-#~ "alias,\n"
-#~ "    builtin, or function, and returns the name of the disk file that "
-#~ "would\n"
-#~ "    be executed."
-#~ msgstr ""
-#~ "\rtype [-afptP] AD [AD ...]\n"
-#~ "    Her ADın bir komut ismi olarak kullanılırsa nasıl yorumlanması\n"
-#~ "    gerektiğini belirtir.\n"
-#~ "\n"
-#~ "    -t seçeneği verildiğinde, AD bir takma ad ise `alias', bir işlev ise\n"
-#~ "   `function',  bir yerleşik komut ise `builtin',  bir disk dosyası ise \n"
-#~ "   `file' veya bir anahtar sözcük ise `keyword' sözcüğünü basar.\n"
-#~ "\n"
-#~ "    -p seçeneği verildiğinde, AD, `type -t AD' çıktısı file sonucunu\n"
-#~ "    vermiyorsa hiçbir şey dönmez,  aksi takdirde çalıştırılacak disk\n"
-#~ "    dosyasının ismi basılır.\n"
-#~ "\n"
-#~ "    -a seçeneği  verildiğinde,  isim  çalıştırılabilir  dosyasının\n"
-#~ "    bulunabileceği yerleri basar. Bu, sadece ve sadece -p seçeneği\n"
-#~ "    kullanılmamışsa takma adları,  yerleşik komutları ve işlevleri\n"
-#~ "    de içerir.\n"
-#~ "\n"
-#~ "    -f seçeneği belirtilmişse type kabuk işlevlerini bulmaya çalışmaz.\n"
-#~ "\n"
-#~ "    -P seçeneği her ADiçin, bir takma ad, yerleşik komut veya işlev "
-#~ "olmasa\n"
-#~ "    bile bir yol araması yapılmasını için zorlar  ve çalıştırılabilir "
-#~ "disk\n"
-#~ "    dosyası ismi ile döner."
-
-#~ msgid ""
-#~ "The user file-creation mask is set to MODE.  If MODE is omitted, or if\n"
-#~ "    `-S' is supplied, the current value of the mask is printed.  The `-"
-#~ "S'\n"
-#~ "    option makes the output symbolic; otherwise an octal number is "
-#~ "output.\n"
-#~ "    If `-p' is supplied, and MODE is omitted, the output is in a form\n"
-#~ "    that may be used as input.  If MODE begins with a digit, it is\n"
-#~ "    interpreted as an octal number, otherwise it is a symbolic mode "
-#~ "string\n"
-#~ "    like that accepted by chmod(1)."
-#~ msgstr ""
-#~ "\rumask [-p] [-S] [KİP]\n"
-#~ "    Kabuk sürecinin dosya oluşturma  maskesini  KİP  olarak  ayarlar.\n"
-#~ "    -S  seçeneği  bir  KİP olmaksızın verilirse, maske sembolik kipte\n"
-#~ "    gösterilir. -S seçeneği çıktının sembolik olmasını sağlar,  yoksa\n"
-#~ "    sekizlik değer basılır. -p seçeneği bir KİP olmaksızın verilirse,\n"
-#~ "    maske,  kabuğa girdi olarak verilebilecek biçemde gösterilir. KİP\n"
-#~ "    bir rakam ile başlıyorsa sekizlik  bir  sayı  olarak  yorumlanır;\n"
-#~ "    rakamla başlamıyorsa,  chmod(1) komutundaki gibi bir sembolik kip\n"
-#~ "    maskesi olarak yorumlanır.  Eğer KİP verilmezse,  maskenin mevcut\n"
-#~ "    değeri gösterilir."
-
-#~ msgid ""
-#~ "Wait for the specified process and report its termination status.  If\n"
-#~ "    N is not given, all currently active child processes are waited for,\n"
-#~ "    and the return code is zero.  N is a process ID; if it is not given,\n"
-#~ "    all child processes of the shell are waited for."
-#~ msgstr ""
-#~ "\rwait [N]\n"
-#~ "    Belirtilen süreci bekler ve sonlandırma  durumunu  raporlar.  N\n"
-#~ "    verilmezse, o an etkin olan tüm süreçler için beklenir ve sıfır\n"
-#~ "    durumu ile dönülür.  N bir süreç kimliğidir; verilmezse kabuğun\n"
-#~ "    tüm alt süreçleri için beklenir."
-
-#~ msgid ""
-#~ "Create a simple command invoked by NAME which runs COMMANDS.\n"
-#~ "    Arguments on the command line along with NAME are passed to the\n"
-#~ "    function as $0 .. $n."
-#~ msgstr ""
-#~ "\rfunction AD { KOMUTlar ; }\n"
-#~ "\tveya\n"
-#~ "AD () { KOMUTlar ; }\n"
-#~ "    ADıyla çağrılarak KOMUTları çalıştıran basit bir komut oluşturur.\n"
-#~ "    AD ile birlikte verilen komut satırı argümanları işleve $0 .. $N\n"
-#~ "    olarak aktarılır."
-
-#~ msgid ""
-#~ "Toggle the values of variables controlling optional behavior.\n"
-#~ "    The -s flag means to enable (set) each OPTNAME; the -u flag\n"
-#~ "    unsets each OPTNAME.  The -q flag suppresses output; the exit\n"
-#~ "    status indicates whether each OPTNAME is set or unset.  The -o\n"
-#~ "    option restricts the OPTNAMEs to those defined for use with\n"
-#~ "    `set -o'.  With no options, or with the -p option, a list of all\n"
-#~ "    settable options is displayed, with an indication of whether or\n"
-#~ "    not each is set."
-#~ msgstr ""
-#~ "\rshopt [-pqsu] [-o UZUN-SEÇENEK] SÇNKADI [SÇNKADI...]\n"
-#~ "    İsteğe bağlı kabuk davranışlarını kontrol eden değişken değerlerini "
-#~ "açıp\n"
-#~ "    kapar.  -s ile belirtilen her SÇNKADInı etkinleştirir. -u ile "
-#~ "belirtilen\n"
-#~ "    her SÇNKADInı iptal eder.  -q ile normal çıktıyı engeller;  dönüş "
-#~ "durumu\n"
-#~ "    SÇNKADInın  etkin  olup olmadığını gösterir.  -o ile set yerleşiğinin "
-#~ "-o\n"
-#~ "    seçeneğinde kullanılabilecek SÇNKADI değerlerini sınırlar. Seçeneksiz "
-#~ "ya\n"
-#~ "    da -p seçeneği ile tüm atanabilir seçenekleri etkin  olup  "
-#~ "olmadıklarını\n"
-#~ "    belirterek listeler."
-
-#~ msgid ""
-#~ "For each NAME, specify how arguments are to be completed.\n"
-#~ "    If the -p option is supplied, or if no options are supplied, "
-#~ "existing\n"
-#~ "    completion specifications are printed in a way that allows them to "
-#~ "be\n"
-#~ "    reused as input.  The -r option removes a completion specification "
-#~ "for\n"
-#~ "    each NAME, or, if no NAMEs are supplied, all completion "
-#~ "specifications."
-#~ msgstr ""
-#~ "\rcomplete [-abcdefgjksuv] [-pr] [-o SEÇENEK] [-A EYLEM] [-G KALIP]\n"
-#~ "         [-W SÖZLİST] [-P ÖNEK] [-S SONEK] [-X SÜZGEÇ] [-F İŞLEV]\n"
-#~ "         [-C KOMUT] [AD ...]\n"
-#~ "    Her AD için argümanların nasıl tamamlanmaları gerektiği belirtilir.\n"
-#~ "    -p seçeneği verilirse veya hiç seçenek verilmezse, mevcut tamamlama\n"
-#~ "    belirtimleri girdi olarak  yeniden kullanılabilir  şekilde basılır.\n"
-#~ "    -r seçeneği her AD için tamamlama belirtimini kaldırır,\n"
-#~ "    hiç AD belirtilmezse tümü kaldırılır."
index e7db7cc74e4330de9d75c5f1b2240f5d14655c0f..eda38affa5962775d49e625d931a7c143defe39b 100644 (file)
Binary files a/po/uk.gmo and b/po/uk.gmo differ
index 318d7cd4da5cb4a02fcac08f122c898a7546f83f..0c3568d0784974697bf03a70fdd16455ae85c25d 100644 (file)
--- a/po/uk.po
+++ b/po/uk.po
@@ -4,13 +4,13 @@
 #
 # Myhailo Danylenko <isbear@ukrpost.net>, 2009.
 # Maxim V. Dziumanenko <dziumanenko@gmail.com>, 2010.
-# Yuri Chornoivan <yurchor@ukr.net>, 2011, 2013, 2014, 2015, 2016, 2018, 2019, 2020.
+# Yuri Chornoivan <yurchor@ukr.net>, 2011, 2013, 2014, 2015, 2016, 2018, 2019, 2020, 2022.
 msgid ""
 msgstr ""
-"Project-Id-Version: bash 5.1\n"
+"Project-Id-Version: bash 5.2-rc1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-11-28 12:51-0500\n"
-"PO-Revision-Date: 2020-12-07 21:17+0200\n"
+"POT-Creation-Date: 2022-01-11 14:50-0500\n"
+"PO-Revision-Date: 2022-06-17 19:34+0300\n"
 "Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
 "Language-Team: Ukrainian <trans-uk@lists.fedoraproject.org>\n"
 "Language: uk\n"
@@ -19,64 +19,59 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Generator: Lokalize 20.11.70\n"
+"X-Generator: Lokalize 20.12.0\n"
 
 #: arrayfunc.c:66
 msgid "bad array subscript"
 msgstr "неправильний індекс масиву"
 
-#: arrayfunc.c:421 builtins/declare.def:638 variables.c:2274 variables.c:2300
-#: variables.c:3133
+#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268
+#: variables.c:3101
 #, c-format
 msgid "%s: removing nameref attribute"
 msgstr "%s: вилучаємо атрибут nameref"
 
-#: arrayfunc.c:446 builtins/declare.def:851
+#: arrayfunc.c:496 builtins/declare.def:868
 #, c-format
 msgid "%s: cannot convert indexed to associative array"
 msgstr "%s: неможливо перетворити індексований масив на асоціативний"
 
-#: arrayfunc.c:700
-#, c-format
-msgid "%s: invalid associative array key"
-msgstr "%s: неправильний ключ асоціативного масиву"
-
-#: arrayfunc.c:702
+#: arrayfunc.c:777
 #, c-format
 msgid "%s: cannot assign to non-numeric index"
 msgstr "%s: означення нечислових елементів неможливе"
 
-#: arrayfunc.c:747
+#: arrayfunc.c:822
 #, c-format
 msgid "%s: %s: must use subscript when assigning associative array"
 msgstr "%s: %s: при означенні асоціативних масивів слід вказувати ключ"
 
-#: bashhist.c:452
+#: bashhist.c:455
 #, c-format
 msgid "%s: cannot create: %s"
 msgstr "%s: не вдалося створити: %s"
 
-#: bashline.c:4310
+#: bashline.c:4479
 msgid "bash_execute_unix_command: cannot find keymap for command"
 msgstr "bash_execute_unix_command: не вдалося знайти відповідне призначення для команди"
 
-#: bashline.c:4459
+#: bashline.c:4637
 #, c-format
 msgid "%s: first non-whitespace character is not `\"'"
 msgstr "%s: перший непробільний символ не є «\"»"
 
 # c-format
-#: bashline.c:4488
+#: bashline.c:4666
 #, c-format
 msgid "no closing `%c' in %s"
 msgstr "нема заключної «%c» у %s"
 
-#: bashline.c:4519
+#: bashline.c:4697
 #, c-format
 msgid "%s: missing colon separator"
 msgstr "%s: пропущено двокрапку-роздільник"
 
-#: bashline.c:4555
+#: bashline.c:4733
 #, c-format
 msgid "`%s': cannot unbind in command keymap"
 msgstr "«%s»: не вдалося зняти призначення у мапі ключів команди"
@@ -96,7 +91,7 @@ msgstr "розкриття дужок: не вдалося отримати об
 msgid "brace expansion: failed to allocate memory for `%s'"
 msgstr "розкриття дужок: не вдалося отримати об’єм пам’яті для «%s»"
 
-#: builtins/alias.def:131 variables.c:1844
+#: builtins/alias.def:131 variables.c:1817
 #, c-format
 msgid "`%s': invalid alias name"
 msgstr "«%s»: некоректна назва замінника"
@@ -167,7 +162,7 @@ msgstr ""
 msgid "HOME not set"
 msgstr "змінну HOME не встановлено"
 
-#: builtins/cd.def:335 builtins/common.c:161 test.c:901
+#: builtins/cd.def:335 builtins/common.c:161 test.c:916
 msgid "too many arguments"
 msgstr "забагато аргументів"
 
@@ -194,7 +189,7 @@ msgstr "попередження: "
 msgid "%s: usage: "
 msgstr "%s: використовуйте: "
 
-#: builtins/common.c:193 shell.c:516 shell.c:844
+#: builtins/common.c:193 shell.c:524 shell.c:866
 #, c-format
 msgid "%s: option requires an argument"
 msgstr "%s: параметр потребує аргументу"
@@ -209,7 +204,7 @@ msgstr "%s: потрібен числовий аргумент"
 msgid "%s: not found"
 msgstr "%s: не знайдено"
 
-#: builtins/common.c:216 shell.c:857
+#: builtins/common.c:216 shell.c:879
 #, c-format
 msgid "%s: invalid option"
 msgstr "%s: неправильний параметр"
@@ -219,7 +214,7 @@ msgstr "%s: неправильний параметр"
 msgid "%s: invalid option name"
 msgstr "%s: некоректна назва параметра"
 
-#: builtins/common.c:230 execute_cmd.c:2373 general.c:368 general.c:373
+#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373
 #, c-format
 msgid "`%s': not a valid identifier"
 msgstr "«%s»: неправильний ідентифікатор"
@@ -232,7 +227,7 @@ msgstr "неправильне вісімкове число"
 msgid "invalid hex number"
 msgstr "неправильне шістнадцяткове число"
 
-#: builtins/common.c:244 expr.c:1569
+#: builtins/common.c:244 expr.c:1574
 msgid "invalid number"
 msgstr "неправильне число"
 
@@ -246,88 +241,93 @@ msgstr "%s: сигнал вказано з помилками"
 msgid "`%s': not a pid or valid job spec"
 msgstr "«%s»: не є ідентифікатором процесу чи завдання"
 
-#: builtins/common.c:266 error.c:510
+#: builtins/common.c:266 error.c:536
 #, c-format
 msgid "%s: readonly variable"
 msgstr "%s: змінна призначена лише для читання"
 
-#: builtins/common.c:274
+#: builtins/common.c:273
+#, c-format
+msgid "%s: cannot assign"
+msgstr "%s: не вдалося встановити значення"
+
+#: builtins/common.c:281
 #, c-format
 msgid "%s: %s out of range"
 msgstr "%s: %s виходить за встановлені межі"
 
-#: builtins/common.c:274 builtins/common.c:276
+#: builtins/common.c:281 builtins/common.c:283
 msgid "argument"
 msgstr "аргумент"
 
-#: builtins/common.c:276
+#: builtins/common.c:283
 #, c-format
 msgid "%s out of range"
 msgstr "%s виходить за встановлені межі"
 
-#: builtins/common.c:284
+#: builtins/common.c:291
 #, c-format
 msgid "%s: no such job"
 msgstr "%s: нема такого завдання"
 
-#: builtins/common.c:292
+#: builtins/common.c:299
 #, c-format
 msgid "%s: no job control"
 msgstr "%s: керування завданнями не ввімкнене"
 
-#: builtins/common.c:294
+#: builtins/common.c:301
 msgid "no job control"
 msgstr "керування завданнями не ввімкнене"
 
-#: builtins/common.c:304
+#: builtins/common.c:311
 #, c-format
 msgid "%s: restricted"
 msgstr "%s: заборонено обмеженнями"
 
-#: builtins/common.c:306
+#: builtins/common.c:313
 msgid "restricted"
 msgstr "заборонено обмеженнями"
 
-#: builtins/common.c:314
+#: builtins/common.c:321
 #, c-format
 msgid "%s: not a shell builtin"
 msgstr "%s: не є вбудованою командою оболонки"
 
-#: builtins/common.c:323
+#: builtins/common.c:330
 #, c-format
 msgid "write error: %s"
 msgstr "помилка запису: %s"
 
-#: builtins/common.c:331
+#: builtins/common.c:338
 #, c-format
 msgid "error setting terminal attributes: %s"
 msgstr "помилка встановлення параметрів термінала: %s"
 
-#: builtins/common.c:333
+#: builtins/common.c:340
 #, c-format
 msgid "error getting terminal attributes: %s"
 msgstr "помилка отримання параметрів термінала: %s"
 
-#: builtins/common.c:635
+#: builtins/common.c:642
 #, c-format
 msgid "%s: error retrieving current directory: %s: %s\n"
 msgstr "%s: помилка отримання поточного каталогу: %s: %s\n"
 
-#: builtins/common.c:701 builtins/common.c:703
+#: builtins/common.c:708 builtins/common.c:710
 #, c-format
 msgid "%s: ambiguous job spec"
 msgstr "%s: завдання вказано неоднозначно"
 
-#: builtins/common.c:964
+#: builtins/common.c:971
 msgid "help not available in this version"
 msgstr "у цій версії не можна скористатися довідкою"
 
-#: builtins/common.c:1008 builtins/set.def:953 variables.c:3839
+#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825
 #, c-format
 msgid "%s: cannot unset: readonly %s"
 msgstr "%s: не вдалося знищити: %s лише для читання"
 
-#: builtins/common.c:1013 builtins/set.def:932 variables.c:3844
+#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830
 #, c-format
 msgid "%s: cannot unset"
 msgstr "%s: не вдалося знищити"
@@ -337,108 +337,108 @@ msgstr "%s: не вдалося знищити"
 msgid "%s: invalid action name"
 msgstr "%s: неправильна назва дії"
 
-#: builtins/complete.def:486 builtins/complete.def:634
-#: builtins/complete.def:865
+#: builtins/complete.def:486 builtins/complete.def:642
+#: builtins/complete.def:873
 #, c-format
 msgid "%s: no completion specification"
 msgstr "%s: не вказано специфікація завершення"
 
-#: builtins/complete.def:688
+#: builtins/complete.def:696
 msgid "warning: -F option may not work as you expect"
 msgstr "попередження: можливо параметр -F працює не так, як ви очікуєте"
 
-#: builtins/complete.def:690
+#: builtins/complete.def:698
 msgid "warning: -C option may not work as you expect"
 msgstr "попередження: можливо параметр -C працює не так, як ви очікуєте"
 
-#: builtins/complete.def:838
+#: builtins/complete.def:846
 msgid "not currently executing completion function"
 msgstr "наразі функція завершення рядку не виконується"
 
-#: builtins/declare.def:134
+#: builtins/declare.def:137
 msgid "can only be used in a function"
 msgstr "може використовуватися лише усередині функції"
 
-#: builtins/declare.def:363 builtins/declare.def:756
+#: builtins/declare.def:437
+msgid "cannot use `-f' to make functions"
+msgstr "`-f' не використовується для створення функцій"
+
+#: builtins/declare.def:464 execute_cmd.c:6132
+#, c-format
+msgid "%s: readonly function"
+msgstr "%s: незмінна функція"
+
+#: builtins/declare.def:521 builtins/declare.def:804
 #, c-format
 msgid "%s: reference variable cannot be an array"
 msgstr "%s: еталонна змінна не може бути масивом"
 
-#: builtins/declare.def:374 variables.c:3385
+#: builtins/declare.def:532 variables.c:3359
 #, c-format
 msgid "%s: nameref variable self references not allowed"
 msgstr "%s: не можна використовувати циклічне посилання у змінній посилання"
 
-#: builtins/declare.def:379 variables.c:2104 variables.c:3304 variables.c:3312
-#: variables.c:3382
+#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286
+#: variables.c:3356
 #, c-format
 msgid "%s: circular name reference"
 msgstr "%s: циклічне посилання за назвою"
 
-#: builtins/declare.def:384 builtins/declare.def:762 builtins/declare.def:773
+#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820
 #, c-format
 msgid "`%s': invalid variable name for name reference"
 msgstr "«%s»: некоректна назва змінної для посилання за назвою"
 
-#: builtins/declare.def:514
-msgid "cannot use `-f' to make functions"
-msgstr "`-f' не використовується для створення функцій"
-
-#: builtins/declare.def:526 execute_cmd.c:5986
-#, c-format
-msgid "%s: readonly function"
-msgstr "%s: незмінна функція"
-
-#: builtins/declare.def:824
-#, c-format
-msgid "%s: quoted compound array assignment deprecated"
-msgstr "%s: встановлення значень для складеного масиву у лапках вважається застарілим"
-
-#: builtins/declare.def:838
+#: builtins/declare.def:856
 #, c-format
 msgid "%s: cannot destroy array variables in this way"
 msgstr "%s: неможливо знищити масив таким чином"
 
-#: builtins/declare.def:845 builtins/read.def:815
+#: builtins/declare.def:862 builtins/read.def:887
 #, c-format
 msgid "%s: cannot convert associative to indexed array"
 msgstr "%s: неможливо перетворити асоціативний масив на індексований"
 
-#: builtins/enable.def:143 builtins/enable.def:151
+#: builtins/declare.def:891
+#, c-format
+msgid "%s: quoted compound array assignment deprecated"
+msgstr "%s: встановлення значень для складеного масиву у лапках вважається застарілим"
+
+#: builtins/enable.def:145 builtins/enable.def:153
 msgid "dynamic loading not available"
 msgstr "динамічне завантаження недоступне"
 
-#: builtins/enable.def:343
+#: builtins/enable.def:376
 #, c-format
 msgid "cannot open shared object %s: %s"
 msgstr "не вдалося відкрити колективний об’єкт %s: %s"
 
-#: builtins/enable.def:371
+#: builtins/enable.def:405
 #, c-format
 msgid "cannot find %s in shared object %s: %s"
 msgstr "не вдалося знайти %s у колективному об’єкті %s: %s"
 
-#: builtins/enable.def:388
+#: builtins/enable.def:422
 #, c-format
 msgid "%s: dynamic builtin already loaded"
 msgstr "%s: динамічне вбудовування вже завантажено"
 
-#: builtins/enable.def:392
+#: builtins/enable.def:426
 #, c-format
 msgid "load function for %s returns failure (%d): not loaded"
 msgstr "функцією завантаження для %s повернуто повідомлення щодо помилки (%d): не завантажено"
 
-#: builtins/enable.def:517
+#: builtins/enable.def:551
 #, c-format
 msgid "%s: not dynamically loaded"
 msgstr "%s: завантажений не динамічно"
 
-#: builtins/enable.def:543
+#: builtins/enable.def:577
 #, c-format
 msgid "%s: cannot delete: %s"
 msgstr "%s: не вдалося вилучити: %s"
 
-#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5818
+#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959
 #, c-format
 msgid "%s: is a directory"
 msgstr "%s: це каталог"
@@ -453,7 +453,7 @@ msgstr "%s: не є звичайним файлом"
 msgid "%s: file is too large"
 msgstr "%s: файл завеликий"
 
-#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1647
+#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673
 #, c-format
 msgid "%s: cannot execute binary file"
 msgstr "%s: не вдалося виконати бінарний файл"
@@ -549,12 +549,12 @@ msgstr ""
 msgid "no help topics match `%s'.  Try `help help' or `man -k %s' or `info %s'."
 msgstr "«%s» не відповідає жодний розділ довідки. Спробуйте `help help' чи `man -k %s' або `info %s'."
 
-#: builtins/help.def:224
+#: builtins/help.def:223
 #, c-format
 msgid "%s: cannot open: %s"
 msgstr "%s: не вдалося відкрити: %s"
 
-#: builtins/help.def:524
+#: builtins/help.def:523
 #, c-format
 msgid ""
 "These shell commands are defined internally.  Type `help' to see this list.\n"
@@ -574,21 +574,21 @@ msgstr ""
 "Зірочка (*) поряд з назвою команди означає, що команда заборонена.\n"
 "\n"
 
-#: builtins/history.def:155
+#: builtins/history.def:159
 msgid "cannot use more than one of -anrw"
 msgstr "-anrw можуть зустрічатися лише один раз"
 
-#: builtins/history.def:188 builtins/history.def:198 builtins/history.def:213
-#: builtins/history.def:230 builtins/history.def:242 builtins/history.def:249
+#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215
+#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247
 msgid "history position"
 msgstr "позиція у журналу команд"
 
-#: builtins/history.def:340
+#: builtins/history.def:338
 #, c-format
 msgid "%s: invalid timestamp"
 msgstr "%s: некоректна часова позначка"
 
-#: builtins/history.def:451
+#: builtins/history.def:449
 #, c-format
 msgid "%s: history expansion failed"
 msgstr "%s: невдалий пошук по журналу команд"
@@ -611,78 +611,78 @@ msgstr "%s: аргументи мають бути ідентифікатора
 msgid "Unknown error"
 msgstr "Невідома помилка"
 
-#: builtins/let.def:97 builtins/let.def:122 expr.c:639 expr.c:657
+#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658
 msgid "expression expected"
 msgstr "очікувався вираз"
 
-#: builtins/mapfile.def:178
+#: builtins/mapfile.def:180
 #, c-format
 msgid "%s: not an indexed array"
 msgstr "%s: не є індексованим масивом"
 
-#: builtins/mapfile.def:271 builtins/read.def:308
+#: builtins/mapfile.def:276 builtins/read.def:336
 #, c-format
 msgid "%s: invalid file descriptor specification"
 msgstr "%s: неправильно вказаний дескриптор файла"
 
-#: builtins/mapfile.def:279 builtins/read.def:315
+#: builtins/mapfile.def:284 builtins/read.def:343
 #, c-format
 msgid "%d: invalid file descriptor: %s"
 msgstr "%d: неправильний дескриптор файла: %s"
 
-#: builtins/mapfile.def:288 builtins/mapfile.def:326
+#: builtins/mapfile.def:293 builtins/mapfile.def:331
 #, c-format
 msgid "%s: invalid line count"
 msgstr "%s: неправильна кількість рядків"
 
-#: builtins/mapfile.def:299
+#: builtins/mapfile.def:304
 #, c-format
 msgid "%s: invalid array origin"
 msgstr "%s: неправильний початковий індекс"
 
-#: builtins/mapfile.def:316
+#: builtins/mapfile.def:321
 #, c-format
 msgid "%s: invalid callback quantum"
 msgstr "%s: неправильний крок виклику функції"
 
-#: builtins/mapfile.def:349
+#: builtins/mapfile.def:354
 msgid "empty array variable name"
 msgstr "порожня назва змінної-масиву"
 
-#: builtins/mapfile.def:370
+#: builtins/mapfile.def:375
 msgid "array variable support required"
 msgstr "змінні-масиви не підтримуються"
 
-#: builtins/printf.def:419
+#: builtins/printf.def:430
 #, c-format
 msgid "`%s': missing format character"
 msgstr "«%s»: пропущено символ у шаблоні"
 
-#: builtins/printf.def:474
+#: builtins/printf.def:485
 #, c-format
 msgid "`%c': invalid time format specification"
 msgstr "«%c»: помилкове визначення формату часу"
 
-#: builtins/printf.def:676
+#: builtins/printf.def:708
 #, c-format
 msgid "`%c': invalid format character"
 msgstr "«%c»: помилковий символ у шаблоні"
 
-#: builtins/printf.def:702
+#: builtins/printf.def:734
 #, c-format
 msgid "warning: %s: %s"
 msgstr "попередження: %s: %s"
 
-#: builtins/printf.def:788
+#: builtins/printf.def:822
 #, c-format
 msgid "format parsing problem: %s"
 msgstr "проблема з обробкою форматування: %s"
 
-#: builtins/printf.def:885
+#: builtins/printf.def:919
 msgid "missing hex digit for \\x"
 msgstr "пропущено шістнадцяткову цифру у \\x"
 
-#: builtins/printf.def:900
+#: builtins/printf.def:934
 #, c-format
 msgid "missing unicode digit for \\%c"
 msgstr "пропущено цифру Unicode у \\%c"
@@ -833,12 +833,12 @@ msgstr ""
 "    \n"
 "    Вбудована команда `dirs' показує стек каталогів."
 
-#: builtins/read.def:280
+#: builtins/read.def:308
 #, c-format
 msgid "%s: invalid timeout specification"
 msgstr "%s: некоректне визначення часу очікування"
 
-#: builtins/read.def:755
+#: builtins/read.def:827
 #, c-format
 msgid "read error: %d: %s"
 msgstr "помилка читання: %d: %s"
@@ -851,7 +851,7 @@ msgstr "`return' працює лише у функції чи скрипті, з
 msgid "cannot simultaneously unset a function and a variable"
 msgstr "не можна одночасно знищити і функцію і змінну"
 
-#: builtins/set.def:966
+#: builtins/set.def:969
 #, c-format
 msgid "%s: not an array variable"
 msgstr "%s: не є масивом"
@@ -870,11 +870,11 @@ msgstr "%s: не вдалося експортувати"
 msgid "shift count"
 msgstr "кількість зсувів"
 
-#: builtins/shopt.def:310
+#: builtins/shopt.def:323
 msgid "cannot set and unset shell options simultaneously"
 msgstr "не можна одночасно встановлювати й скасовувати параметри оболонки"
 
-#: builtins/shopt.def:428
+#: builtins/shopt.def:444
 #, c-format
 msgid "%s: invalid shell option name"
 msgstr "%s: неправильна назва параметра оболонки"
@@ -943,16 +943,16 @@ msgstr "%s: помилковий аргумент обмеження"
 msgid "`%c': bad command"
 msgstr "«%c»: неправильна команда"
 
-#: builtins/ulimit.def:455
+#: builtins/ulimit.def:464
 #, c-format
 msgid "%s: cannot get limit: %s"
 msgstr "%s: не вдалося отримати значення обмеження: %s"
 
-#: builtins/ulimit.def:481
+#: builtins/ulimit.def:490
 msgid "limit"
 msgstr "значення обмеження"
 
-#: builtins/ulimit.def:493 builtins/ulimit.def:793
+#: builtins/ulimit.def:502 builtins/ulimit.def:802
 #, c-format
 msgid "%s: cannot modify limit: %s"
 msgstr "%s: не вдалося змінити обмеження: %s"
@@ -971,7 +971,7 @@ msgstr "«%c»: помилковий оператор у символьному
 msgid "`%c': invalid symbolic mode character"
 msgstr "«%c»: помилковий символ у символьному режимі"
 
-#: error.c:89 error.c:347 error.c:349 error.c:351
+#: error.c:89 error.c:373 error.c:375 error.c:377
 msgid " line "
 msgstr " рядок "
 
@@ -991,96 +991,106 @@ msgstr "Припинення..."
 msgid "INFORM: "
 msgstr "ІНФОРМАЦІЯ: "
 
-#: error.c:462
+#: error.c:310
+#, c-format
+msgid "DEBUG warning: "
+msgstr "Діагностичне попередження: "
+
+#: error.c:488
 msgid "unknown command error"
 msgstr "невідома помилка команди"
 
-#: error.c:463
+#: error.c:489
 msgid "bad command type"
 msgstr "неправильний тип команди"
 
-#: error.c:464
+#: error.c:490
 msgid "bad connector"
 msgstr "неправильний з’єднувальний оператор"
 
-#: error.c:465
+#: error.c:491
 msgid "bad jump"
 msgstr "неправильний перехід"
 
-#: error.c:503
+#: error.c:529
 #, c-format
 msgid "%s: unbound variable"
 msgstr "%s: неозначена змінна"
 
-#: eval.c:242
+#: eval.c:243
 msgid "\atimed out waiting for input: auto-logout\n"
 msgstr "\aчас очікування вводу вичерпано: автоматичний вихід\n"
 
-#: execute_cmd.c:537
+#: execute_cmd.c:555
 #, c-format
 msgid "cannot redirect standard input from /dev/null: %s"
 msgstr "не вдалося переспрямувати /dev/null на стандартний ввід: %s"
 
-#: execute_cmd.c:1297
+#: execute_cmd.c:1317
 #, c-format
 msgid "TIMEFORMAT: `%c': invalid format character"
 msgstr "TIMEFORMAT: «%c»: помилковий символ шаблону"
 
-#: execute_cmd.c:2362
+#: execute_cmd.c:2391
 #, c-format
 msgid "execute_coproc: coproc [%d:%s] still exists"
 msgstr "execute_coproc: coproc [%d:%s] все ще існує"
 
-#: execute_cmd.c:2486
+#: execute_cmd.c:2524
 msgid "pipe error"
 msgstr "помилка каналу"
 
-#: execute_cmd.c:4793
+#: execute_cmd.c:4923
 #, c-format
 msgid "eval: maximum eval nesting level exceeded (%d)"
 msgstr "eval: перевищено максимальний рівень вкладеності eval (%d)"
 
-#: execute_cmd.c:4805
+#: execute_cmd.c:4935
 #, c-format
 msgid "%s: maximum source nesting level exceeded (%d)"
 msgstr "%s: перевищено максимальний рівень вкладеності джерела (%d)"
 
-#: execute_cmd.c:4913
+#: execute_cmd.c:5043
 #, c-format
 msgid "%s: maximum function nesting level exceeded (%d)"
 msgstr "%s: перевищено максимальний рівень вкладеності функцій (%d)"
 
-#: execute_cmd.c:5467
+#: execute_cmd.c:5598
 #, c-format
 msgid "%s: restricted: cannot specify `/' in command names"
 msgstr "%s: обмеження: не можна вказувати `/' у назві команди"
 
-#: execute_cmd.c:5574
+#: execute_cmd.c:5715
 #, c-format
 msgid "%s: command not found"
 msgstr "%s: команду не знайдено"
 
-#: execute_cmd.c:5816
+#: execute_cmd.c:5957
 #, c-format
 msgid "%s: %s"
 msgstr "%s: %s"
 
-#: execute_cmd.c:5854
+#: execute_cmd.c:5975
+#, c-format
+msgid "%s: cannot execute: required file not found"
+msgstr "%s: не вдалося виконати: не знайдено потрібного файла"
+
+#: execute_cmd.c:6000
 #, c-format
 msgid "%s: %s: bad interpreter"
 msgstr "%s: %s: неправильний інтерпретатор"
 
-#: execute_cmd.c:5891
+#: execute_cmd.c:6037
 #, c-format
 msgid "%s: cannot execute binary file: %s"
 msgstr "%s: не вдалося виконати бінарний файл: %s"
 
-#: execute_cmd.c:5977
+#: execute_cmd.c:6123
 #, c-format
 msgid "`%s': is a special builtin"
 msgstr "%s є спеціальною вбудованою командою оболонки"
 
-#: execute_cmd.c:6029
+#: execute_cmd.c:6175
 #, c-format
 msgid "cannot duplicate fd %d to fd %d"
 msgstr "не вдалося створити копію файлового дескриптору %d у %d"
@@ -1093,68 +1103,68 @@ msgstr "рівень вкладення виразів перевищено"
 msgid "recursion stack underflow"
 msgstr "нестача стеку рекурсії"
 
-#: expr.c:477
+#: expr.c:478
 msgid "syntax error in expression"
 msgstr "синтаксична помилка у виразі"
 
-#: expr.c:521
+#: expr.c:522
 msgid "attempted assignment to non-variable"
 msgstr "спроба призначення не-змінної"
 
-#: expr.c:530
+#: expr.c:531
 msgid "syntax error in variable assignment"
 msgstr "синтаксична помилка при спробі надати змінній значення"
 
-#: expr.c:544 expr.c:911
+#: expr.c:545 expr.c:912
 msgid "division by 0"
 msgstr "ділення на 0"
 
-#: expr.c:592
+#: expr.c:593
 msgid "bug: bad expassign token"
 msgstr "вада: неправильна лексема у виразі"
 
-#: expr.c:646
+#: expr.c:647
 msgid "`:' expected for conditional expression"
 msgstr "очікувалася `:' умовного виразу"
 
-#: expr.c:972
+#: expr.c:973
 msgid "exponent less than 0"
 msgstr "експонента менша за 0"
 
-#: expr.c:1029
+#: expr.c:1030
 msgid "identifier expected after pre-increment or pre-decrement"
 msgstr "пре-інкремент чи пре-декремент потребують ідентифікатор"
 
-#: expr.c:1056
+#: expr.c:1057
 msgid "missing `)'"
 msgstr "відсутня `)'"
 
-#: expr.c:1107 expr.c:1487
+#: expr.c:1108 expr.c:1492
 msgid "syntax error: operand expected"
 msgstr "синтаксична помилка: очікувався операнд"
 
-#: expr.c:1489
+#: expr.c:1494
 msgid "syntax error: invalid arithmetic operator"
 msgstr "синтаксична помилка: помилковий арифметичний оператор"
 
-#: expr.c:1513
+#: expr.c:1518
 #, c-format
 msgid "%s%s%s: %s (error token is \"%s\")"
 msgstr "%s%s%s: %s (позначка помилки \"%s\")"
 
-#: expr.c:1573
+#: expr.c:1578
 msgid "invalid arithmetic base"
 msgstr "некоректна арифметична основа"
 
-#: expr.c:1582
+#: expr.c:1587
 msgid "invalid integer constant"
 msgstr "некоректна ціла стала"
 
-#: expr.c:1598
+#: expr.c:1603
 msgid "value too great for base"
 msgstr "завелике значення основи"
 
-#: expr.c:1647
+#: expr.c:1652
 #, c-format
 msgid "%s: expression error\n"
 msgstr "%s: помилка у виразі\n"
@@ -1163,7 +1173,7 @@ msgstr "%s: помилка у виразі\n"
 msgid "getcwd: cannot access parent directories"
 msgstr "getcwd: не вдалося отримати доступ до каталогів вищого рівня"
 
-#: input.c:99 subst.c:6069
+#: input.c:99 subst.c:6208
 #, c-format
 msgid "cannot reset nodelay mode for fd %d"
 msgstr "не вдалося перевстановити режим без затримки файлового дескриптору %d"
@@ -1182,167 +1192,167 @@ msgstr "save_bash_input: для нового файлового дескрипт
 msgid "start_pipeline: pgrp pipe"
 msgstr "start_pipeline: pgrp pipe"
 
-#: jobs.c:906
+#: jobs.c:907
 #, c-format
 msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
 
-#: jobs.c:959
+#: jobs.c:960
 #, c-format
 msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
 
-#: jobs.c:1283
+#: jobs.c:1279
 #, c-format
 msgid "forked pid %d appears in running job %d"
 msgstr "ідентифікатор відгалуженого процесу %d знайдено у поточному завданні %d"
 
-#: jobs.c:1402
+#: jobs.c:1397
 #, c-format
 msgid "deleting stopped job %d with process group %ld"
 msgstr "вилучення зупиненого завдання %d, що має групу процесів %ld"
 
-#: jobs.c:1511
+#: jobs.c:1502
 #, c-format
 msgid "add_process: pid %5ld (%s) marked as still alive"
 msgstr "add_process: ідентифікатор процесу %5ld (%s) вказує на його працездатність"
 
-#: jobs.c:1850
+#: jobs.c:1839
 #, c-format
 msgid "describe_pid: %ld: no such pid"
 msgstr "describe_pid: %ld: ідентифікатор процесу не існує"
 
-#: jobs.c:1865
+#: jobs.c:1854
 #, c-format
 msgid "Signal %d"
 msgstr "Сигнал %d"
 
-#: jobs.c:1879 jobs.c:1905
+#: jobs.c:1868 jobs.c:1894
 msgid "Done"
 msgstr "Завершено"
 
-#: jobs.c:1884 siglist.c:122
+#: jobs.c:1873 siglist.c:123
 msgid "Stopped"
 msgstr "Зупинено"
 
-#: jobs.c:1888
+#: jobs.c:1877
 #, c-format
 msgid "Stopped(%s)"
 msgstr "Зупинено(%s)"
 
-#: jobs.c:1892
+#: jobs.c:1881
 msgid "Running"
 msgstr "Працює"
 
-#: jobs.c:1909
+#: jobs.c:1898
 #, c-format
 msgid "Done(%d)"
 msgstr "Зроблено(%d)"
 
-#: jobs.c:1911
+#: jobs.c:1900
 #, c-format
 msgid "Exit %d"
 msgstr "Вихід %d"
 
-#: jobs.c:1914
+#: jobs.c:1903
 msgid "Unknown status"
 msgstr "Невідомий стан"
 
-#: jobs.c:2001
+#: jobs.c:1990
 #, c-format
 msgid "(core dumped) "
 msgstr "(збережено знімок оперативної пам’яті)"
 
-#: jobs.c:2020
+#: jobs.c:2009
 #, c-format
 msgid "  (wd: %s)"
 msgstr "  (РД: %s)"
 
-#: jobs.c:2259
+#: jobs.c:2250
 #, c-format
 msgid "child setpgid (%ld to %ld)"
 msgstr "зміна групи дочірнього процесу (%ld на %ld)"
 
-#: jobs.c:2617 nojobs.c:664
+#: jobs.c:2608 nojobs.c:666
 #, c-format
 msgid "wait: pid %ld is not a child of this shell"
 msgstr "wait: процес %ld не є відгалуженим від цієї оболонки"
 
-#: jobs.c:2893
+#: jobs.c:2884
 #, c-format
 msgid "wait_for: No record of process %ld"
 msgstr "wait_for: Нема запису для процесу %ld"
 
-#: jobs.c:3236
+#: jobs.c:3223
 #, c-format
 msgid "wait_for_job: job %d is stopped"
 msgstr "wait_for_job: завдання %d зупинене"
 
-#: jobs.c:3564
+#: jobs.c:3551
 #, c-format
 msgid "%s: no current jobs"
 msgstr "%s: немає поточних завдань"
 
-#: jobs.c:3571
+#: jobs.c:3558
 #, c-format
 msgid "%s: job has terminated"
 msgstr "%s: завдання завершилося"
 
-#: jobs.c:3580
+#: jobs.c:3567
 #, c-format
 msgid "%s: job %d already in background"
 msgstr "%s: завдання %d вже працює в фоні"
 
-#: jobs.c:3806
+#: jobs.c:3793
 msgid "waitchld: turning on WNOHANG to avoid indefinite block"
 msgstr "waitchld: увімкнути WNOHANG, щоб уникнути нескінченного блокування"
 
-#: jobs.c:4320
+#: jobs.c:4307
 #, c-format
 msgid "%s: line %d: "
 msgstr "%s: рядок %d: "
 
-#: jobs.c:4334 nojobs.c:919
+#: jobs.c:4321 nojobs.c:921
 #, c-format
 msgid " (core dumped)"
 msgstr " (збережено знімок оперативної пам’яті)"
 
-#: jobs.c:4346 jobs.c:4359
+#: jobs.c:4333 jobs.c:4346
 #, c-format
 msgid "(wd now: %s)\n"
 msgstr "(тепер РД: %s)\n"
 
-#: jobs.c:4391
+#: jobs.c:4378
 msgid "initialize_job_control: getpgrp failed"
 msgstr "initialize_job_control: помилка getpgrp"
 
-#: jobs.c:4447
+#: jobs.c:4434
 msgid "initialize_job_control: no job control in background"
 msgstr "initialize_job_control: немає керування завданнями у тлі"
 
-#: jobs.c:4463
+#: jobs.c:4450
 msgid "initialize_job_control: line discipline"
 msgstr "initialize_job_control: алгоритм реалізації рядків"
 
-#: jobs.c:4473
+#: jobs.c:4460
 msgid "initialize_job_control: setpgid"
 msgstr "initialize_job_control: setpgid"
 
-#: jobs.c:4494 jobs.c:4503
+#: jobs.c:4481 jobs.c:4490
 #, c-format
 msgid "cannot set terminal process group (%d)"
 msgstr "не вдалося встановити групу процесу для термінала (%d)"
 
-#: jobs.c:4508
+#: jobs.c:4495
 msgid "no job control in this shell"
 msgstr "ця оболонка не може керувати завданнями"
 
-#: lib/malloc/malloc.c:353
+#: lib/malloc/malloc.c:367
 #, c-format
 msgid "malloc: failed assertion: %s\n"
 msgstr "malloc: умова не виконується: %s\n"
 
-#: lib/malloc/malloc.c:369
+#: lib/malloc/malloc.c:383
 #, c-format
 msgid ""
 "\r\n"
@@ -1351,47 +1361,47 @@ msgstr ""
 "\r\n"
 "malloc: %s:%d: потрібна умова не виконується\r\n"
 
-#: lib/malloc/malloc.c:370 lib/malloc/malloc.c:933
+#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941
 msgid "unknown"
 msgstr "невідомий"
 
-#: lib/malloc/malloc.c:882
+#: lib/malloc/malloc.c:892
 msgid "malloc: block on free list clobbered"
 msgstr "malloc: зайнятий блок у списку вільних"
 
-#: lib/malloc/malloc.c:972
+#: lib/malloc/malloc.c:980
 msgid "free: called with already freed block argument"
 msgstr "free: аргумент є вже звільненим блоком"
 
-#: lib/malloc/malloc.c:975
+#: lib/malloc/malloc.c:983
 msgid "free: called with unallocated block argument"
 msgstr "free: блок ще не виділено"
 
-#: lib/malloc/malloc.c:994
+#: lib/malloc/malloc.c:1001
 msgid "free: underflow detected; mh_nbytes out of range"
 msgstr "free: виявлено перехід за нижню границю блоку; mh_nbytes не вкладається у рамки"
 
-#: lib/malloc/malloc.c:1001
+#: lib/malloc/malloc.c:1007
 msgid "free: underflow detected; magic8 corrupted"
 msgstr "free: виявлено перехід за нижню границю блоку; magic8 пошкоджено"
 
-#: lib/malloc/malloc.c:1009
+#: lib/malloc/malloc.c:1014
 msgid "free: start and end chunk sizes differ"
 msgstr "free: розмір у записах на початку та в кінці блоку відрізняється"
 
-#: lib/malloc/malloc.c:1119
+#: lib/malloc/malloc.c:1176
 msgid "realloc: called with unallocated block argument"
 msgstr "realloc: блок ще не виділено"
 
-#: lib/malloc/malloc.c:1134
+#: lib/malloc/malloc.c:1191
 msgid "realloc: underflow detected; mh_nbytes out of range"
 msgstr "realloc: виявлено перехід за нижню границю блоку; mh_nbytes не вкладається у рамки"
 
-#: lib/malloc/malloc.c:1141
+#: lib/malloc/malloc.c:1197
 msgid "realloc: underflow detected; magic8 corrupted"
 msgstr "realloc: виявлено перехід за нижню границю блоку; magic8 пошкоджено"
 
-#: lib/malloc/malloc.c:1150
+#: lib/malloc/malloc.c:1205
 msgid "realloc: start and end chunk sizes differ"
 msgstr "realloc: розмір у записах на початку та в кінці блоку відрізняється"
 
@@ -1433,22 +1443,22 @@ msgstr "%s: неправильно вказаний мережевий шлях"
 msgid "network operations not supported"
 msgstr "мережеві операції не підтримуються"
 
-#: locale.c:217
+#: locale.c:219
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s)"
 msgstr "setlocale: LC_ALL: не вдалося змінити локаль (%s)"
 
-#: locale.c:219
+#: locale.c:221
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s): %s"
 msgstr "setlocale: LC_ALL: не вдалося змінити локаль (%s): %s"
 
-#: locale.c:292
+#: locale.c:294
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s)"
 msgstr "setlocale: %s: не вдалося змінити локаль (%s)"
 
-#: locale.c:294
+#: locale.c:296
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s): %s"
 msgstr "setlocale: %s: не вдалося змінити локаль (%s): %s"
@@ -1466,136 +1476,136 @@ msgstr "Нова пошта у $_"
 msgid "The mail in %s has been read\n"
 msgstr "Пошту у %s прочитано\n"
 
-#: make_cmd.c:317
+#: make_cmd.c:314
 msgid "syntax error: arithmetic expression required"
 msgstr "синтаксична помилка: потрібен арифметичний вираз"
 
-#: make_cmd.c:319
+#: make_cmd.c:316
 msgid "syntax error: `;' unexpected"
 msgstr "синтаксична помилка: неочікувана `;'"
 
-#: make_cmd.c:320
+#: make_cmd.c:317
 #, c-format
 msgid "syntax error: `((%s))'"
 msgstr "синтаксична помилка: `((%s))'"
 
-#: make_cmd.c:572
+#: make_cmd.c:569
 #, c-format
 msgid "make_here_document: bad instruction type %d"
 msgstr "make_here_document: неправильний тип інструкції %d"
 
-#: make_cmd.c:657
+#: make_cmd.c:668
 #, c-format
 msgid "here-document at line %d delimited by end-of-file (wanted `%s')"
 msgstr "here-document з рядка %d закінчено кінцем файла (очікувалося «%s»)"
 
-#: make_cmd.c:756
+#: make_cmd.c:769
 #, c-format
 msgid "make_redirection: redirection instruction `%d' out of range"
 msgstr "make_redirection: інструкція переспрямування `%d' поза межами"
 
-#: parse.y:2393
+#: parse.y:2428
 #, c-format
 msgid "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line truncated"
 msgstr "shell_getc: shell_input_line_size (%zu) перевищує обмеження SIZE_MAX (%lu): рядок обрізано"
 
-#: parse.y:2826
+#: parse.y:2921
 msgid "maximum here-document count exceeded"
 msgstr "перевищено максимальну можливу кількість here-document"
 
-#: parse.y:3581 parse.y:3957 parse.y:4556
+#: parse.y:3684 parse.y:4244 parse.y:6148
 #, c-format
 msgid "unexpected EOF while looking for matching `%c'"
 msgstr "файл скінчився раніше, ніж було знайдено відповідний «%c»"
 
-#: parse.y:4696
+#: parse.y:4452
 msgid "unexpected EOF while looking for `]]'"
 msgstr "файл скінчився раніше, ніж було знайдено `]]'"
 
-#: parse.y:4701
+#: parse.y:4457
 #, c-format
 msgid "syntax error in conditional expression: unexpected token `%s'"
 msgstr "синтаксична помилка в умовному виразі: неочікувана лексема «%s»"
 
-#: parse.y:4705
+#: parse.y:4461
 msgid "syntax error in conditional expression"
 msgstr "синтаксична помилка в умовному виразі"
 
-#: parse.y:4783
+#: parse.y:4539
 #, c-format
 msgid "unexpected token `%s', expected `)'"
 msgstr "неочікувана лексема «%s», очікувалася `)'"
 
-#: parse.y:4787
+#: parse.y:4543
 msgid "expected `)'"
 msgstr "очікувалася `)'"
 
-#: parse.y:4815
+#: parse.y:4571
 #, c-format
 msgid "unexpected argument `%s' to conditional unary operator"
 msgstr "неочікуваний аргумент унарного умовного оператора «%s»"
 
-#: parse.y:4819
+#: parse.y:4575
 msgid "unexpected argument to conditional unary operator"
 msgstr "неочікуваний аргумент унарного умовного оператора"
 
-#: parse.y:4865
+#: parse.y:4621
 #, c-format
 msgid "unexpected token `%s', conditional binary operator expected"
 msgstr "неочікувана лексема «%s», очікувався бінарний умовний оператор"
 
-#: parse.y:4869
+#: parse.y:4625
 msgid "conditional binary operator expected"
 msgstr "очікувався бінарний умовний оператор"
 
-#: parse.y:4891
+#: parse.y:4647
 #, c-format
 msgid "unexpected argument `%s' to conditional binary operator"
 msgstr "неочікуваний аргумент бінарного умовного оператора «%s»"
 
-#: parse.y:4895
+#: parse.y:4651
 msgid "unexpected argument to conditional binary operator"
 msgstr "неочікуваний аргумент бінарного умовного оператора"
 
-#: parse.y:4906
+#: parse.y:4662
 #, c-format
 msgid "unexpected token `%c' in conditional command"
 msgstr "неочікувана лексема «%c» в умовній команді"
 
-#: parse.y:4909
+#: parse.y:4665
 #, c-format
 msgid "unexpected token `%s' in conditional command"
 msgstr "неочікувана лексема «%s» в умовній команді"
 
-#: parse.y:4913
+#: parse.y:4669
 #, c-format
 msgid "unexpected token %d in conditional command"
 msgstr "неочікувана лексема %d в умовній команді"
 
-#: parse.y:6336
+#: parse.y:6118
 #, c-format
 msgid "syntax error near unexpected token `%s'"
 msgstr "синтаксична помилка коло неочікуваної лексеми «%s»"
 
-#: parse.y:6355
+#: parse.y:6137
 #, c-format
 msgid "syntax error near `%s'"
 msgstr "синтаксична помилка коло «%s»"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error: unexpected end of file"
 msgstr "синтаксична помилка: раптово скінчився файл"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error"
 msgstr "синтаксична помилка"
 
-#: parse.y:6428
+#: parse.y:6216
 #, c-format
 msgid "Use \"%s\" to leave the shell.\n"
 msgstr "Використовуйте \"%s\", щоб вийти з оболонки.\n"
 
-#: parse.y:6602
+#: parse.y:6394
 msgid "unexpected EOF while looking for matching `)'"
 msgstr "файл скінчився, перш ніж було знайдено відповідну `)'"
 
@@ -1633,94 +1643,94 @@ msgstr "xtrace_set: нульовий вказівник на файл"
 msgid "xtrace fd (%d) != fileno xtrace fp (%d)"
 msgstr "дескриптор файла xtrace (%d) не дорівнює номеру файла у вказівнику xtrace (%d)"
 
-#: print_cmd.c:1540
+#: print_cmd.c:1545
 #, c-format
 msgid "cprintf: `%c': invalid format character"
 msgstr "cprintf: «%c»: неправильний символ шаблону"
 
-#: redir.c:149 redir.c:197
+#: redir.c:150 redir.c:198
 msgid "file descriptor out of range"
 msgstr "дескриптор файла поза можливими межами"
 
-#: redir.c:204
+#: redir.c:205
 #, c-format
 msgid "%s: ambiguous redirect"
 msgstr "%s: неоднозначне переспрямування"
 
-#: redir.c:208
+#: redir.c:209
 #, c-format
 msgid "%s: cannot overwrite existing file"
 msgstr "%s: заборонено перезаписувати наявні файли"
 
-#: redir.c:213
+#: redir.c:214
 #, c-format
 msgid "%s: restricted: cannot redirect output"
 msgstr "%s: обмеження: переспрямування виводу заборонене"
 
-#: redir.c:218
+#: redir.c:219
 #, c-format
 msgid "cannot create temp file for here-document: %s"
 msgstr "не вдалося створити тимчасовий файл для here-document: %s"
 
-#: redir.c:222
+#: redir.c:223
 #, c-format
 msgid "%s: cannot assign fd to variable"
 msgstr "%s: не вдалося надати змінній значення дескриптора файла"
 
-#: redir.c:649
+#: redir.c:650
 msgid "/dev/(tcp|udp)/host/port not supported without networking"
 msgstr "/dev/(tcp|udp)/host/port не підтримується"
 
-#: redir.c:938 redir.c:1053 redir.c:1114 redir.c:1284
+#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303
 msgid "redirection error: cannot duplicate fd"
 msgstr "помилка переспрямування: не вдалося створити копію дескриптора файла"
 
-#: shell.c:347
+#: shell.c:353
 msgid "could not find /tmp, please create!"
 msgstr "не вдалося знайти /tmp, будь ласка створіть його!"
 
-#: shell.c:351
+#: shell.c:357
 msgid "/tmp must be a valid directory name"
 msgstr "/tmp має бути чинною назвою каталогу"
 
-#: shell.c:804
+#: shell.c:826
 msgid "pretty-printing mode ignored in interactive shells"
 msgstr "режим форматованого виведення даних у інтерактивних оболонках буде проігноровано"
 
-#: shell.c:948
+#: shell.c:972
 #, c-format
 msgid "%c%c: invalid option"
 msgstr "%c%c: помилковий параметр"
 
-#: shell.c:1319
+#: shell.c:1343
 #, c-format
 msgid "cannot set uid to %d: effective uid %d"
 msgstr "не вдалося встановити uid %d: ефективним є uid %d"
 
-#: shell.c:1330
+#: shell.c:1354
 #, c-format
 msgid "cannot set gid to %d: effective gid %d"
 msgstr "не вдалося встановити gid %d: ефективним є gid %d"
 
-#: shell.c:1518
+#: shell.c:1544
 msgid "cannot start debugger; debugging mode disabled"
 msgstr "не вдалося запустити засіб діагностики: режим діагностування вимкнено"
 
-#: shell.c:1632
+#: shell.c:1658
 #, c-format
 msgid "%s: Is a directory"
 msgstr "%s: це каталог"
 
-#: shell.c:1881
+#: shell.c:1907
 msgid "I have no name!"
 msgstr "У мене нема назви!"
 
-#: shell.c:2035
+#: shell.c:2061
 #, c-format
 msgid "GNU bash, version %s-(%s)\n"
 msgstr "GNU bash, версія %s-(%s)\n"
 
-#: shell.c:2036
+#: shell.c:2062
 #, c-format
 msgid ""
 "Usage:\t%s [GNU long option] [option] ...\n"
@@ -1729,317 +1739,317 @@ msgstr ""
 "Використовуйте:\t%s [довгий параметр GNU] [параметр] ...\n"
 "\t%s [довгий параметр GNU] [параметр] файл_сценарію ...\n"
 
-#: shell.c:2038
+#: shell.c:2064
 msgid "GNU long options:\n"
 msgstr "Довгі параметри GNU:\n"
 
-#: shell.c:2042
+#: shell.c:2068
 msgid "Shell options:\n"
 msgstr "Параметри оболонки:\n"
 
-#: shell.c:2043
+#: shell.c:2069
 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n"
 msgstr "\t-ilrsD чи -c команда чи -O параметр_shopt\t\t(тільки на початку)\n"
 
-#: shell.c:2062
+#: shell.c:2088
 #, c-format
 msgid "\t-%s or -o option\n"
 msgstr "\t-%s чи -o параметр\n"
 
-#: shell.c:2068
+#: shell.c:2094
 #, c-format
 msgid "Type `%s -c \"help set\"' for more information about shell options.\n"
 msgstr "Введіть `%s -c \"help set\"', щоб отримати більше інформації про параметри оболонки.\n"
 
-#: shell.c:2069
+#: shell.c:2095
 #, c-format
 msgid "Type `%s -c help' for more information about shell builtin commands.\n"
 msgstr "Введіть `%s -c help', щоб отримати більше інформації про вбудовані команди оболонки.\n"
 
-#: shell.c:2070
+#: shell.c:2096
 #, c-format
 msgid "Use the `bashbug' command to report bugs.\n"
 msgstr "Щоб повідомити про помилку в програмі, використовуйте команду `bashbug'.\n"
 
-#: shell.c:2072
+#: shell.c:2098
 #, c-format
 msgid "bash home page: <http://www.gnu.org/software/bash>\n"
 msgstr "Домашня сторінка bash: <http://www.gnu.org/software/bash>\n"
 
-#: shell.c:2073
+#: shell.c:2099
 #, c-format
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 msgstr "Загальна довідкова інформація щодо використання програмного забезпечення GNU: <http://www.gnu.org/gethelp/>\n"
 
-#: sig.c:757
+#: sig.c:765
 #, c-format
 msgid "sigprocmask: %d: invalid operation"
 msgstr "sigprocmask: %d: некоректна операція"
 
-#: siglist.c:47
+#: siglist.c:48
 msgid "Bogus signal"
 msgstr "Ненаявний сигнал"
 
-#: siglist.c:50
+#: siglist.c:51
 msgid "Hangup"
 msgstr "Зависання"
 
-#: siglist.c:54
+#: siglist.c:55
 msgid "Interrupt"
 msgstr "Переривання"
 
-#: siglist.c:58
+#: siglist.c:59
 msgid "Quit"
 msgstr "Вихід"
 
-#: siglist.c:62
+#: siglist.c:63
 msgid "Illegal instruction"
 msgstr "Помилкова інструкція"
 
-#: siglist.c:66
+#: siglist.c:67
 msgid "BPT trace/trap"
 msgstr "Точка зупину trace/trap"
 
-#: siglist.c:74
+#: siglist.c:75
 msgid "ABORT instruction"
 msgstr "Інструкція ABORT"
 
-#: siglist.c:78
+#: siglist.c:79
 msgid "EMT instruction"
 msgstr "Інструкція EMT"
 
-#: siglist.c:82
+#: siglist.c:83
 msgid "Floating point exception"
 msgstr "Помилка обчислень з рухомою комою"
 
-#: siglist.c:86
+#: siglist.c:87
 msgid "Killed"
 msgstr "Вбитий"
 
-#: siglist.c:90
+#: siglist.c:91
 msgid "Bus error"
 msgstr "Помилка шини"
 
-#: siglist.c:94
+#: siglist.c:95
 msgid "Segmentation fault"
 msgstr "Помилка адресування"
 
-#: siglist.c:98
+#: siglist.c:99
 msgid "Bad system call"
 msgstr "Помилковий системний виклик"
 
-#: siglist.c:102
+#: siglist.c:103
 msgid "Broken pipe"
 msgstr "Зламаний канал"
 
-#: siglist.c:106
+#: siglist.c:107
 msgid "Alarm clock"
 msgstr "Таймер"
 
-#: siglist.c:110
+#: siglist.c:111
 msgid "Terminated"
 msgstr "Припинено"
 
-#: siglist.c:114
+#: siglist.c:115
 msgid "Urgent IO condition"
 msgstr "Невідкладні події В/В"
 
-#: siglist.c:118
+#: siglist.c:119
 msgid "Stopped (signal)"
 msgstr "Зупинено (сигнал)"
 
-#: siglist.c:126
+#: siglist.c:127
 msgid "Continue"
 msgstr "Продовження"
 
-#: siglist.c:134
+#: siglist.c:135
 msgid "Child death or stop"
 msgstr "Зупинка чи припинення дочірнього процесу"
 
-#: siglist.c:138
+#: siglist.c:139
 msgid "Stopped (tty input)"
 msgstr "Зупинено (ввід з термінала)"
 
-#: siglist.c:142
+#: siglist.c:143
 msgid "Stopped (tty output)"
 msgstr "Зупинено (вивід на термінал)"
 
-#: siglist.c:146
+#: siglist.c:147
 msgid "I/O ready"
 msgstr "В/В готовий"
 
-#: siglist.c:150
+#: siglist.c:151
 msgid "CPU limit"
 msgstr "Обмеження часу CPU"
 
-#: siglist.c:154
+#: siglist.c:155
 msgid "File limit"
 msgstr "Обмеження розміру файла"
 
-#: siglist.c:158
+#: siglist.c:159
 msgid "Alarm (virtual)"
 msgstr "Таймер (віртуальний)"
 
-#: siglist.c:162
+#: siglist.c:163
 msgid "Alarm (profile)"
 msgstr "Таймер (профілювання)"
 
-#: siglist.c:166
+#: siglist.c:167
 msgid "Window changed"
 msgstr "Зміна вікна"
 
-#: siglist.c:170
+#: siglist.c:171
 msgid "Record lock"
 msgstr "Блокування втрачено"
 
-#: siglist.c:174
+#: siglist.c:175
 msgid "User signal 1"
 msgstr "Сигнал користувача 1"
 
-#: siglist.c:178
+#: siglist.c:179
 msgid "User signal 2"
 msgstr "Сигнал користувача 2"
 
-#: siglist.c:182
+#: siglist.c:183
 msgid "HFT input data pending"
 msgstr "Вхідні дані HFT очікують"
 
-#: siglist.c:186
+#: siglist.c:187
 msgid "power failure imminent"
 msgstr "наближається втрата живлення"
 
-#: siglist.c:190
+#: siglist.c:191
 msgid "system crash imminent"
 msgstr "наближається аварійна ситуація"
 
-#: siglist.c:194
+#: siglist.c:195
 msgid "migrate process to another CPU"
 msgstr "перенесення процесу на інший CPU"
 
-#: siglist.c:198
+#: siglist.c:199
 msgid "programming error"
 msgstr "помилка програмування"
 
-#: siglist.c:202
+#: siglist.c:203
 msgid "HFT monitor mode granted"
 msgstr "Режим монітору HFT надано"
 
-#: siglist.c:206
+#: siglist.c:207
 msgid "HFT monitor mode retracted"
 msgstr "Режим монітору HFT відкликано"
 
-#: siglist.c:210
+#: siglist.c:211
 msgid "HFT sound sequence has completed"
 msgstr "Завершено звукову послідовність HFT"
 
-#: siglist.c:214
+#: siglist.c:215
 msgid "Information request"
 msgstr "Інформаційний запит"
 
-#: siglist.c:222 siglist.c:224
+#: siglist.c:223 siglist.c:225
 #, c-format
 msgid "Unknown Signal #%d"
 msgstr "Невідомий сигнал №%d"
 
-#: subst.c:1476 subst.c:1666
+#: subst.c:1480 subst.c:1670
 #, c-format
 msgid "bad substitution: no closing `%s' in %s"
 msgstr "неправильна заміна: немає заключної «%s» у %s"
 
-#: subst.c:3281
+#: subst.c:3307
 #, c-format
 msgid "%s: cannot assign list to array member"
 msgstr "%s: неможливо означити елемент масиву списком"
 
-#: subst.c:5910 subst.c:5926
+#: subst.c:6048 subst.c:6064
 msgid "cannot make pipe for process substitution"
 msgstr "не вдалося створити канал для підставляння процесу"
 
-#: subst.c:5985
+#: subst.c:6124
 msgid "cannot make child for process substitution"
 msgstr "не вдалося створити дочірній процес для підставляння процесу"
 
-#: subst.c:6059
+#: subst.c:6198
 #, c-format
 msgid "cannot open named pipe %s for reading"
 msgstr "не вдалося відкрити іменований канал %s для читання"
 
-#: subst.c:6061
+#: subst.c:6200
 #, c-format
 msgid "cannot open named pipe %s for writing"
 msgstr "не вдалося відкрити іменований канал %s для запису"
 
-#: subst.c:6084
+#: subst.c:6223
 #, c-format
 msgid "cannot duplicate named pipe %s as fd %d"
 msgstr "не вдалося здублювати іменований канал %s як fd %d"
 
-#: subst.c:6213
+#: subst.c:6370
 msgid "command substitution: ignored null byte in input"
 msgstr "заміна команди: проігноровано порожній байт у вхідних даних"
 
-#: subst.c:6353
+#: subst.c:6533
 msgid "cannot make pipe for command substitution"
 msgstr "не вдалося створити канал для підставляння команди"
 
-#: subst.c:6397
+#: subst.c:6580
 msgid "cannot make child for command substitution"
 msgstr "не вдалося створити дочірній процес для підставляння команди"
 
-#: subst.c:6423
+#: subst.c:6613
 msgid "command_substitute: cannot duplicate pipe as fd 1"
 msgstr "command_substitute: не вдалося створити копію каналу із файловим дескриптором 1"
 
-#: subst.c:6883 subst.c:9952
+#: subst.c:7082 subst.c:10252
 #, c-format
 msgid "%s: invalid variable name for name reference"
 msgstr "%s: некоректна назва змінної для посилання за назвою"
 
-#: subst.c:6979 subst.c:6997 subst.c:7169
+#: subst.c:7178 subst.c:7196 subst.c:7369
 #, c-format
 msgid "%s: invalid indirect expansion"
 msgstr "%s: некоректне непряме розгортання"
 
-#: subst.c:7013 subst.c:7177
+#: subst.c:7212 subst.c:7377
 #, c-format
 msgid "%s: invalid variable name"
 msgstr "%s: некоректна назва змінної"
 
-#: subst.c:7256
+#: subst.c:7478
 #, c-format
 msgid "%s: parameter not set"
 msgstr "%s: параметр не встановлено"
 
-#: subst.c:7258
+#: subst.c:7480
 #, c-format
 msgid "%s: parameter null or not set"
 msgstr "%s: параметр нульової довжини чи не вказаний"
 
-#: subst.c:7503 subst.c:7518
+#: subst.c:7727 subst.c:7742
 #, c-format
 msgid "%s: substring expression < 0"
 msgstr "%s: підрядок коротший за 0"
 
-#: subst.c:9281 subst.c:9302
+#: subst.c:9560 subst.c:9587
 #, c-format
 msgid "%s: bad substitution"
 msgstr "%s: неправильна заміна"
 
-#: subst.c:9390
+#: subst.c:9678
 #, c-format
 msgid "$%s: cannot assign in this way"
 msgstr "$%s: не можна призначити таким чином"
 
-#: subst.c:9814
+#: subst.c:10111
 msgid "future versions of the shell will force evaluation as an arithmetic substitution"
 msgstr "у наступних версіях оболонки буде виконуватися обчислення для заміни арифметичних виразів"
 
-#: subst.c:10367
+#: subst.c:10795
 #, c-format
 msgid "bad substitution: no closing \"`\" in %s"
 msgstr "неправильна заміна: немає заключної \"`\" у %s"
 
-#: subst.c:11434
+#: subst.c:11874
 #, c-format
 msgid "no match: %s"
 msgstr "нема відповідника: %s"
@@ -2062,21 +2072,21 @@ msgstr "очікувалася `)'"
 msgid "`)' expected, found %s"
 msgstr "очікувалася `)', отримано %s"
 
-#: test.c:466 test.c:799
+#: test.c:469 test.c:814
 #, c-format
 msgid "%s: binary operator expected"
 msgstr "%s: очікувався бінарний оператор"
 
-#: test.c:756 test.c:759
+#: test.c:771 test.c:774
 #, c-format
 msgid "%s: unary operator expected"
 msgstr "%s: очікувався унарний оператор"
 
-#: test.c:881
+#: test.c:896
 msgid "missing `]'"
 msgstr "відсутня `]'"
 
-#: test.c:899
+#: test.c:914
 #, c-format
 msgid "syntax error: `%s' unexpected"
 msgstr "синтаксична помилка: неочікуване `%s'"
@@ -2085,99 +2095,104 @@ msgstr "синтаксична помилка: неочікуване `%s'"
 msgid "invalid signal number"
 msgstr "неправильний номер сигналу"
 
-#: trap.c:325
+#: trap.c:323
 #, c-format
 msgid "trap handler: maximum trap handler level exceeded (%d)"
 msgstr "обробник пасток: досягнуто максимального рівня для обробника пасток (%d)"
 
-#: trap.c:414
+#: trap.c:412
 #, c-format
 msgid "run_pending_traps: bad value in trap_list[%d]: %p"
 msgstr "run_pending_traps: неправильне значення у trap_list[%d]: %p"
 
-#: trap.c:418
+#: trap.c:416
 #, c-format
 msgid "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
 msgstr "run_pending_traps: обробник сигналу є SIG_DFL, %d (%s) повторно надсилається собі"
 
-#: trap.c:487
+#: trap.c:509
 #, c-format
 msgid "trap_handler: bad signal %d"
 msgstr "trap_handler: неправильний сигнал %d"
 
-#: variables.c:421
+#: variables.c:424
 #, c-format
 msgid "error importing function definition for `%s'"
 msgstr "помилка імпортування означення функції «%s»"
 
-#: variables.c:833
+#: variables.c:838
 #, c-format
 msgid "shell level (%d) too high, resetting to 1"
 msgstr "рівень оболонки (%d) занадто високий, перевстановлено у 1"
 
-#: variables.c:2674
+#: variables.c:2642
 msgid "make_local_variable: no function context at current scope"
 msgstr "make_local_variable: немає контексту функції у поточній області"
 
-#: variables.c:2693
+#: variables.c:2661
 #, c-format
 msgid "%s: variable may not be assigned value"
 msgstr "%s: змінною не може бути значення, яке приймають інші змінні"
 
-#: variables.c:3475
+#: variables.c:2818 variables.c:2874
+#, c-format
+msgid "%s: cannot inherit value from incompatible type"
+msgstr "%s: неможливо успадкувати значення несумісного типу"
+
+#: variables.c:3459
 #, c-format
 msgid "%s: assigning integer to name reference"
 msgstr "%s: присвоєння цілого числа посиланню з назвою"
 
-#: variables.c:4404
+#: variables.c:4390
 msgid "all_local_variables: no function context at current scope"
 msgstr "all_local_variables: немає контексту функції у поточній області"
 
-#: variables.c:4771
+#: variables.c:4757
 #, c-format
 msgid "%s has null exportstr"
 msgstr "%s має нульове значення рядка експортування"
 
-#: variables.c:4776 variables.c:4785
+#: variables.c:4762 variables.c:4771
 #, c-format
 msgid "invalid character %d in exportstr for %s"
 msgstr "Помилковий символ %d у рядку експорту для %s"
 
-#: variables.c:4791
+#: variables.c:4777
 #, c-format
 msgid "no `=' in exportstr for %s"
 msgstr "немає `=' у рядку експорту для %s"
 
-#: variables.c:5331
+#: variables.c:5317
 msgid "pop_var_context: head of shell_variables not a function context"
 msgstr "pop_var_context: перший елемент shell_variables не є контекстом функції"
 
-#: variables.c:5344
+#: variables.c:5330
 msgid "pop_var_context: no global_variables context"
 msgstr "pop_var_context: немає контексту global_variables"
 
-#: variables.c:5424
+#: variables.c:5410
 msgid "pop_scope: head of shell_variables not a temporary environment scope"
 msgstr "pop_scope: перший елемент shell_variables не є тимчасовим оточенням виконання"
 
-#: variables.c:6387
+#: variables.c:6400
 #, c-format
 msgid "%s: %s: cannot open as FILE"
 msgstr "%s: %s: не вдалося відкрити ФАЙЛ"
 
-#: variables.c:6392
+#: variables.c:6405
 #, c-format
 msgid "%s: %s: invalid value for trace file descriptor"
 msgstr "%s: %s: некоректне значення дескриптора файла трасування"
 
-#: variables.c:6437
+#: variables.c:6450
 #, c-format
 msgid "%s: %s: compatibility value out of range"
 msgstr "%s: %s: значення сумісності не належить припустимому діапазону значень"
 
 #: version.c:46 version2.c:46
-msgid "Copyright (C) 2020 Free Software Foundation, Inc."
-msgstr "© Free Software Foundation, Inc., 2020"
+msgid "Copyright (C) 2022 Free Software Foundation, Inc."
+msgstr "© Free Software Foundation, Inc., 2022"
 
 #: version.c:47 version2.c:47
 msgid "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n"
@@ -2257,12 +2272,12 @@ msgid "command [-pVv] command [arg ...]"
 msgstr "command [-pVv] команда [аргумент ...]"
 
 #: builtins.c:78
-msgid "declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]"
-msgstr "declare [-aAfFgiIlnrtux] [-p] [назва[=значення] ...]"
+msgid "declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] [name ...]"
+msgstr "declare [-aAfFgiIlnrtux] [назва[=значення] ...] або declare -p [-aAfFilnrtux] [назва ...]"
 
 #: builtins.c:80
-msgid "typeset [-aAfFgiIlnrtux] [-p] name[=value] ..."
-msgstr "typeset [-aAfFgiIlnrtux] [-p] назва[=значення] ..."
+msgid "typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] [name ...]"
+msgstr "typeset [-aAfFgiIlnrtux] назва[=значення] ... або typeset -p [-aAfFilnrtux] [назва ...]"
 
 #: builtins.c:82
 msgid "local [option] name[=value] ..."
@@ -2349,8 +2364,8 @@ msgid "return [n]"
 msgstr "return [n]"
 
 #: builtins.c:142
-msgid "set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]"
-msgstr "set [-abefhkmnptuvxBCHP] [-o назва-параметра] [--] [аргумент ...]"
+msgid "set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]"
+msgstr "set [-abefhkmnptuvxBCEHPT] [-o назва-параметра] [--] [-] [аргумент ...]"
 
 #: builtins.c:144
 msgid "unset [-f] [-v] [-n] [name ...]"
@@ -2397,8 +2412,8 @@ msgid "type [-afptP] name [name ...]"
 msgstr "type [-afptP] назва [назва ...]"
 
 #: builtins.c:171
-msgid "ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]"
-msgstr "ulimit [-SHabcdefiklmnpqrstuvxPT] [обмеження]"
+msgid "ulimit [-SHabcdefiklmnpqrstuvxPRT] [limit]"
+msgstr "ulimit [-SHabcdefiklmnpqrstuvxPRT] [обмеження]"
 
 #: builtins.c:174
 msgid "umask [-p] [-S] [mode]"
@@ -2437,12 +2452,12 @@ msgid "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else C
 msgstr "if КОМАНДИ; then КОМАНДИ; [ elif КОМАНДИ; then КОМАНДИ; ]... [ else КОМАНДИ; ] fi"
 
 #: builtins.c:196
-msgid "while COMMANDS; do COMMANDS; done"
-msgstr "while КОМАНДИ; do КОМАНДИ; done"
+msgid "while COMMANDS; do COMMANDS-2; done"
+msgstr "while КОМАНДИ; do КОМАНДИ-2; done"
 
 #: builtins.c:198
-msgid "until COMMANDS; do COMMANDS; done"
-msgstr "until КОМАНДИ; do КОМАНДИ; done"
+msgid "until COMMANDS; do COMMANDS-2; done"
+msgstr "until КОМАНДИ; do КОМАНДИ-2; done"
 
 #: builtins.c:200
 msgid "coproc [NAME] command [redirections]"
@@ -3764,7 +3779,8 @@ msgid ""
 "    splitting, and the first word is assigned to the first NAME, the second\n"
 "    word to the second NAME, and so on, with any leftover words assigned to\n"
 "    the last NAME.  Only the characters found in $IFS are recognized as word\n"
-"    delimiters.\n"
+"    delimiters. By default, the backslash character escapes delimiter characters\n"
+"    and newline.\n"
 "    \n"
 "    If no NAMEs are supplied, the line read is stored in the REPLY variable.\n"
 "    \n"
@@ -3807,6 +3823,8 @@ msgstr ""
 "    призначується першій НАЗВІ, друге слово — другій НАЗВІ тощо, якщо\n"
 "    залишаться непризначені слова, їх буде призначено останній НАЗВІ. Як\n"
 "    роздільники полів розпізнаються символи, вказані у змінній $IFS.\n"
+"    Типово, символ зворотної похилої риски екранує символи роздільника\n"
+"    та розриву рядка.\n"
 "    \n"
 "    Якщо НАЗВ не вказано, рядок цілком буде збережено у змінній REPLY.\n"
 "    \n"
@@ -3841,7 +3859,7 @@ msgstr ""
 "    очікування (значення, більше за 128), якщо сталася помилка під час\n"
 "    встановлення значення змінної, або якщо із -u вказано неправильний файловий дескриптор."
 
-#: builtins.c:1041
+#: builtins.c:1042
 msgid ""
 "Return from a shell function.\n"
 "    \n"
@@ -3861,7 +3879,7 @@ msgstr ""
 "    Код завершення:\n"
 "    Команда повертає N, або помилку, якщо викликана не у функції чи сценарії."
 
-#: builtins.c:1054
+#: builtins.c:1055
 msgid ""
 "Set or unset values of shell options and positional parameters.\n"
 "    \n"
@@ -4028,7 +4046,7 @@ msgstr ""
 "    Код завершення:\n"
 "    Команда завершується успішно, якщо вказані правильні параметри."
 
-#: builtins.c:1139
+#: builtins.c:1140
 msgid ""
 "Unset values and attributes of shell variables and functions.\n"
 "    \n"
@@ -4066,7 +4084,7 @@ msgstr ""
 "    Команда завершується невдало, якщо вказано неправильний параметр чи НАЗВА\n"
 "    доступна лише для читання."
 
-#: builtins.c:1161
+#: builtins.c:1162
 msgid ""
 "Set export attribute for shell variables.\n"
 "    \n"
@@ -4098,7 +4116,7 @@ msgstr ""
 "    Код завершення:\n"
 "    Команда завершується успішно, якщо вказано правильні параметри та НАЗВИ."
 
-#: builtins.c:1180
+#: builtins.c:1181
 msgid ""
 "Mark shell variables as unchangeable.\n"
 "    \n"
@@ -4136,7 +4154,7 @@ msgstr ""
 "    Код завершення:\n"
 "    Команда завершується успішно, якщо вказано правильні параметри та НАЗВИ."
 
-#: builtins.c:1202
+#: builtins.c:1203
 msgid ""
 "Shift positional parameters.\n"
 "    \n"
@@ -4154,7 +4172,7 @@ msgstr ""
 "    Код завершення:\n"
 "    Команда завершується невдало, якщо N менше за нуль чи більше за $#."
 
-#: builtins.c:1214 builtins.c:1229
+#: builtins.c:1215 builtins.c:1230
 msgid ""
 "Execute commands from a file in the current shell.\n"
 "    \n"
@@ -4177,7 +4195,7 @@ msgstr ""
 "    Команда повертає код завершення останньої команди, виконаної у ФАЙЛІ, або\n"
 "    помилку, якщо ФАЙЛ не вдалося прочитати."
 
-#: builtins.c:1245
+#: builtins.c:1246
 msgid ""
 "Suspend shell execution.\n"
 "    \n"
@@ -4202,7 +4220,7 @@ msgstr ""
 "    Команда завершується невдало, якщо не ввімкнене керування завданнями чи\n"
 "    якщо трапиться помилка."
 
-#: builtins.c:1261
+#: builtins.c:1262
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -4358,7 +4376,7 @@ msgstr ""
 "    Команда завершується успішно, якщо ВИРАЗ істинний; невдало, якщо вказано\n"
 "    помилковий аргумент чи ВИРАЗ хибний."
 
-#: builtins.c:1343
+#: builtins.c:1344
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -4370,7 +4388,7 @@ msgstr ""
 "    Це синонім до вбудованої команди \"test\", але на відміну від неї останнім\n"
 "    аргументом має бути `]'."
 
-#: builtins.c:1352
+#: builtins.c:1353
 msgid ""
 "Display process times.\n"
 "    \n"
@@ -4388,7 +4406,7 @@ msgstr ""
 "    Код завершення:\n"
 "    Команда завжди успішна."
 
-#: builtins.c:1364
+#: builtins.c:1365
 msgid ""
 "Trap signals and other events.\n"
 "    \n"
@@ -4451,7 +4469,7 @@ msgstr ""
 "    Код завершення:\n"
 "    Команда завершується успішно, якщо вказані правильні параметри та СИГНАЛИ."
 
-#: builtins.c:1400
+#: builtins.c:1401
 msgid ""
 "Display information about command type.\n"
 "    \n"
@@ -4501,7 +4519,7 @@ msgstr ""
 "    Команда завершується успішно, якщо буде знайдено усі НАЗВИ; невдало, якщо\n"
 "    хоч одне з них не вдасться знайти."
 
-#: builtins.c:1431
+#: builtins.c:1432
 msgid ""
 "Modify shell resource limits.\n"
 "    \n"
@@ -4597,7 +4615,7 @@ msgstr ""
 "    Команда завершується невдало, якщо вказано неправильний параметр чи\n"
 "    трапилася помилка під час виконання."
 
-#: builtins.c:1482
+#: builtins.c:1483
 msgid ""
 "Display or set file mode mask.\n"
 "    \n"
@@ -4630,7 +4648,7 @@ msgstr ""
 "    Код завершення:\n"
 "    Команда завершується успішно, якщо вказано правильну МАСКУ та параметри."
 
-#: builtins.c:1502
+#: builtins.c:1503
 msgid ""
 "Wait for job completion and return exit status.\n"
 "    \n"
@@ -4683,7 +4701,7 @@ msgstr ""
 "    неправильні параметри чи ІДЕНТИФІКАТОР або якщо вказано -n і оболонка не\n"
 "    має неочікуваних дочірніх процесів."
 
-#: builtins.c:1533
+#: builtins.c:1534
 msgid ""
 "Wait for process completion and return exit status.\n"
 "    \n"
@@ -4706,7 +4724,7 @@ msgstr ""
 "    Команда повертає код завершення процесу з останнім вказаним ідентифікатором.\n"
 "    Повертає код помилки, якщо вказано неправильний ІДЕНТИФІКАТОР чи параметр."
 
-#: builtins.c:1548
+#: builtins.c:1549
 msgid ""
 "Execute commands for each member in a list.\n"
 "    \n"
@@ -4727,7 +4745,7 @@ msgstr ""
 "    Код завершення:\n"
 "    Команда повертає код завершення останньої виконаної команди."
 
-#: builtins.c:1562
+#: builtins.c:1563
 msgid ""
 "Arithmetic for loop.\n"
 "    \n"
@@ -4757,7 +4775,7 @@ msgstr ""
 "    Код завершення:\n"
 "    Команда повертає код завершення останньої виконаної команди."
 
-#: builtins.c:1580
+#: builtins.c:1581
 msgid ""
 "Select words from a list and execute commands.\n"
 "    \n"
@@ -4792,7 +4810,7 @@ msgstr ""
 "    Код завершення:\n"
 "    Команда повертає код завершення останньої виконаної команди."
 
-#: builtins.c:1601
+#: builtins.c:1602
 msgid ""
 "Report time consumed by pipeline's execution.\n"
 "    \n"
@@ -4820,7 +4838,7 @@ msgstr ""
 "    Код завершення:\n"
 "    Команда повертає код завершення ЛАНЦЮЖКА-КОМАНД."
 
-#: builtins.c:1618
+#: builtins.c:1619
 msgid ""
 "Execute commands based on pattern matching.\n"
 "    \n"
@@ -4838,7 +4856,7 @@ msgstr ""
 "    Код завершення:\n"
 "    Команда повертає код завершення останньої виконаної команди."
 
-#: builtins.c:1630
+#: builtins.c:1631
 msgid ""
 "Execute commands based on conditional.\n"
 "    \n"
@@ -4865,44 +4883,44 @@ msgstr ""
 "    Команда повертає код завершення останньої виконаної команди або нуль,\n"
 "    якщо жодна з перевірених умов не була істинною."
 
-#: builtins.c:1647
+#: builtins.c:1648
 msgid ""
 "Execute commands as long as a test succeeds.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `while' COMMANDS has an exit status of zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n"
+"    an exit status of zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
 "Циклічно виконує команди поки виконується умова.\n"
 "    \n"
-"    Виконуватиме КОМАНДИ, поки остання команда з КОМАНД у `while'\n"
+"    Виконуватиме КОМАНДИ-2, поки остання команда з КОМАНД\n"
 "    не завершиться невдало.\n"
 "    \n"
 "    Код завершення:\n"
 "    Команда повертає код завершення останньої виконаної команди."
 
-#: builtins.c:1659
+#: builtins.c:1660
 msgid ""
 "Execute commands as long as a test does not succeed.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `until' COMMANDS has an exit status which is not zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n"
+"    an exit status which is not zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
 "Виконує команди доки умову не буде виконано.\n"
 "    \n"
-"    Виконуватиме КОМАНДИ, поки остання команда з КОМАНД у `until'\n"
+"    Виконуватиме КОМАНДИ-2, поки остання команда з КОМАНД\n"
 "    не завершиться успішно.\n"
 "    \n"
 "    Код завершення:\n"
 "    Команда повертає код завершення останньої виконаної команди."
 
 # WTF? How can it return exit code of _asynchronous_ process...
-#: builtins.c:1671
+#: builtins.c:1672
 msgid ""
 "Create a coprocess named NAME.\n"
 "    \n"
@@ -4924,7 +4942,7 @@ msgstr ""
 "    Код завершення:\n"
 "    Команда coproc повертає стан виходу 0."
 
-#: builtins.c:1685
+#: builtins.c:1686
 msgid ""
 "Define shell function.\n"
 "    \n"
@@ -4946,7 +4964,7 @@ msgstr ""
 "    Код завершення:\n"
 "    Команда завершується невдало, якщо НАЗВА є незмінною."
 
-#: builtins.c:1699
+#: builtins.c:1700
 msgid ""
 "Group commands as a unit.\n"
 "    \n"
@@ -4964,7 +4982,7 @@ msgstr ""
 "    Код завершення:\n"
 "    Конструкція повертає код завершення останньої виконаної команди."
 
-#: builtins.c:1711
+#: builtins.c:1712
 msgid ""
 "Resume job in foreground.\n"
 "    \n"
@@ -4987,7 +5005,7 @@ msgstr ""
 "    Код завершення:\n"
 "    Команда повертає статус продовженого завдання."
 
-#: builtins.c:1726
+#: builtins.c:1727
 msgid ""
 "Evaluate arithmetic expression.\n"
 "    \n"
@@ -5005,7 +5023,7 @@ msgstr ""
 "    Код завершення:\n"
 "    Команда завершується успішно, якщо результат обчислення ненульовий."
 
-#: builtins.c:1738
+#: builtins.c:1739
 msgid ""
 "Execute conditional command.\n"
 "    \n"
@@ -5051,7 +5069,7 @@ msgstr ""
 "    Код завершення:\n"
 "    Команда завершується успішно, якщо ВИРАЗ істинний."
 
-#: builtins.c:1764
+#: builtins.c:1765
 msgid ""
 "Common shell variable names and usage.\n"
 "    \n"
@@ -5153,7 +5171,7 @@ msgstr ""
 "    HISTIGNORE\tРозділений двокрапкою список шаблонів, що використовуються\n"
 "    \t\tпри визначенні, чи зберігати команду у списку журналу.\n"
 
-#: builtins.c:1821
+#: builtins.c:1822
 msgid ""
 "Add directories to stack.\n"
 "    \n"
@@ -5211,7 +5229,7 @@ msgstr ""
 "    Команда завершується невдало, якщо вказаний неправильний аргумент чи\n"
 "    якщо не вдалося змінити поточну каталог."
 
-#: builtins.c:1855
+#: builtins.c:1856
 msgid ""
 "Remove directories from stack.\n"
 "    \n"
@@ -5262,7 +5280,7 @@ msgstr ""
 "    Команда завершується невдало, якщо вказано помилковий аргумент чи якщо\n"
 "    не вдалося змінити поточний каталог."
 
-#: builtins.c:1885
+#: builtins.c:1886
 msgid ""
 "Display directory stack.\n"
 "    \n"
@@ -5314,7 +5332,7 @@ msgstr ""
 "    Команда завершується невдало, якщо вказано неправильний параметр чи якщо\n"
 "    трапиться помилка."
 
-#: builtins.c:1916
+#: builtins.c:1917
 msgid ""
 "Set and unset shell options.\n"
 "    \n"
@@ -5350,7 +5368,7 @@ msgstr ""
 "    Команда завершується успішно, якщо ПАРАМЕТР ввімкнено; невдало, якщо\n"
 "    вказано неправильні параметри чи ПАРАМЕТР вимкнено."
 
-#: builtins.c:1937
+#: builtins.c:1938
 msgid ""
 "Formats and prints ARGUMENTS under control of the FORMAT.\n"
 "    \n"
@@ -5369,6 +5387,8 @@ msgid ""
 "    \n"
 "      %b\texpand backslash escape sequences in the corresponding argument\n"
 "      %q\tquote the argument in a way that can be reused as shell input\n"
+"      %Q\tlike %q, but apply any precision to the unquoted argument before\n"
+"    \t\tquoting\n"
 "      %(fmt)T\toutput the date-time string resulting from using FMT as a format\n"
 "    \t        string for strftime(3)\n"
 "    \n"
@@ -5400,18 +5420,21 @@ msgstr ""
 "    \t\tзворотної похилої риски) у відповідному аргументі.\n"
 "      %q\tВзяти аргумент в лапки так, щоб його можна було використати як\n"
 "    \t\tввід оболонки\n"
+"      %Q\tподібна до %q, але буде застосовано довільну точність до аргументу\n"
+"    \t\tбез лапок до застосування лапок\n"
 "       %(формат)T – вивести рядок дати і часу з використанням ФОРМАТУ\n"
 "            для форматування даних strftime(3)\n"
 "    \n"
 "    Визначене форматування використовується так, щоб було оброблено усі аргументи.\n"
 "    Якщо аргументів виявиться менше за кількість визначених форматів, для зайвих\n"
-"    специфікаторів форматів буде використано нульові значення або порожні рядки,     залежно від типу форматування.\n"
+"    специфікаторів форматів буде використано нульові значення або порожні рядки,\n"
+"    залежно від типу форматування.\n"
 "    \n"
 "    Код завершення:\n"
 "    Команда завершується невдало лише якщо вказано неправильний параметр або\n"
 "    якщо трапиться помилка запису чи присвоєння."
 
-#: builtins.c:1971
+#: builtins.c:1974
 msgid ""
 "Specify how arguments are to be completed by Readline.\n"
 "    \n"
@@ -5463,7 +5486,7 @@ msgstr ""
 "    Команда завершується успішно, якщо вказано правильні параметри та не\n"
 "    трапиться помилки під час виконання."
 
-#: builtins.c:2001
+#: builtins.c:2004
 msgid ""
 "Display possible completions depending on the options.\n"
 "    \n"
@@ -5484,7 +5507,7 @@ msgstr ""
 "    Команда завершується успішно, якщо вказано правильні параметри і не\n"
 "    трапиться помилки під час виконання."
 
-#: builtins.c:2016
+#: builtins.c:2019
 msgid ""
 "Modify or display completion options.\n"
 "    \n"
@@ -5539,7 +5562,7 @@ msgstr ""
 "    Команда завершується успішно, якщо вказано правильні параметри та\n"
 "    вказівки завершень для НАЗВ існують."
 
-#: builtins.c:2047
+#: builtins.c:2050
 msgid ""
 "Read lines from the standard input into an indexed array variable.\n"
 "    \n"
@@ -5610,7 +5633,7 @@ msgstr ""
 "    Команда завершується невдало лише якщо вказано неправильний параметр або\n"
 "    якщо МАСИВ є незмінним."
 
-#: builtins.c:2083
+#: builtins.c:2086
 msgid ""
 "Read lines from a file into an array variable.\n"
 "    \n"
@@ -5620,6 +5643,9 @@ msgstr ""
 "    \n"
 "    Синонім до `mapfile'."
 
+#~ msgid "%s: invalid associative array key"
+#~ msgstr "%s: неправильний ключ асоціативного масиву"
+
 #~ msgid ""
 #~ "Returns the context of the current subroutine call.\n"
 #~ "    \n"
index 256ec8eef76f2becb3b0613248fa51d17a504df8..f97a37d60945d5120cf56677b2a4108e745f2a5f 100644 (file)
Binary files a/po/vi.gmo and b/po/vi.gmo differ
index 583c7050a28666550ec67d68d1afa4bac501d783..aa9ad4b8599ca88eac8ac84c162734226b87c33f 100644 (file)
--- a/po/vi.po
+++ b/po/vi.po
@@ -10,7 +10,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: bash 4.4-beta1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-11-28 12:51-0500\n"
+"POT-Creation-Date: 2022-01-11 14:50-0500\n"
 "PO-Revision-Date: 2015-10-18 07:47+0700\n"
 "Last-Translator: Trần Ngọc Quân <vnwildman@gmail.com>\n"
 "Language-Team: Vietnamese <translation-team-vi@lists.sourceforge.net>\n"
@@ -26,58 +26,53 @@ msgstr ""
 msgid "bad array subscript"
 msgstr "sai chỉ số mảng"
 
-#: arrayfunc.c:421 builtins/declare.def:638 variables.c:2274 variables.c:2300
-#: variables.c:3133
+#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268
+#: variables.c:3101
 #, c-format
 msgid "%s: removing nameref attribute"
 msgstr ""
 
-#: arrayfunc.c:446 builtins/declare.def:851
+#: arrayfunc.c:496 builtins/declare.def:868
 #, c-format
 msgid "%s: cannot convert indexed to associative array"
 msgstr "%s: không thể chuyển đổi mảng kiểu chỉ số sang mảng kết hợp"
 
-#: arrayfunc.c:700
-#, c-format
-msgid "%s: invalid associative array key"
-msgstr "%s: khóa mảng liên kết không hợp lệ"
-
-#: arrayfunc.c:702
+#: arrayfunc.c:777
 #, c-format
 msgid "%s: cannot assign to non-numeric index"
 msgstr "%s: không thể gán cho chỉ số không thuộc kiểu số"
 
-#: arrayfunc.c:747
+#: arrayfunc.c:822
 #, c-format
 msgid "%s: %s: must use subscript when assigning associative array"
 msgstr "%s: %s: phải sử dụng chỉ số phụ khi gán mảng kết hợp"
 
-#: bashhist.c:452
+#: bashhist.c:455
 #, c-format
 msgid "%s: cannot create: %s"
 msgstr "%s: không thể tạo: %s"
 
-#: bashline.c:4310
+#: bashline.c:4479
 msgid "bash_execute_unix_command: cannot find keymap for command"
 msgstr ""
 "bash_execute_unix_command: không tìm thấy ánh xạ phím (keymap) cho câu lệnh"
 
-#: bashline.c:4459
+#: bashline.c:4637
 #, c-format
 msgid "%s: first non-whitespace character is not `\"'"
 msgstr "%s: ký tự khác khoảng trắng đầu tiên không phải là “\"”"
 
-#: bashline.c:4488
+#: bashline.c:4666
 #, c-format
 msgid "no closing `%c' in %s"
 msgstr "thiếu dấu đóng “%c” trong %s"
 
-#: bashline.c:4519
+#: bashline.c:4697
 #, c-format
 msgid "%s: missing colon separator"
 msgstr "%s: thiếu dấu hai chấm phân cách"
 
-#: bashline.c:4555
+#: bashline.c:4733
 #, fuzzy, c-format
 msgid "`%s': cannot unbind in command keymap"
 msgstr "“%s”: không thể tháo"
@@ -97,7 +92,7 @@ msgstr "khai triển ngoặc ôm: gặp lỗi khi phân bổ bộ nhớ cho “%
 msgid "brace expansion: failed to allocate memory for `%s'"
 msgstr "khai triển ngoặc ôm: gặp lỗi khi phân bổ bộ nhớ cho “%s”"
 
-#: builtins/alias.def:131 variables.c:1844
+#: builtins/alias.def:131 variables.c:1817
 #, c-format
 msgid "`%s': invalid alias name"
 msgstr "“%s”: tên bí danh không hợp lệ"
@@ -172,7 +167,7 @@ msgstr ""
 msgid "HOME not set"
 msgstr "Chưa đặt biến môi trường HOME"
 
-#: builtins/cd.def:335 builtins/common.c:161 test.c:901
+#: builtins/cd.def:335 builtins/common.c:161 test.c:916
 msgid "too many arguments"
 msgstr "quá nhiều đối số"
 
@@ -200,7 +195,7 @@ msgstr "cảnh báo: "
 msgid "%s: usage: "
 msgstr "%s: cách dùng: "
 
-#: builtins/common.c:193 shell.c:516 shell.c:844
+#: builtins/common.c:193 shell.c:524 shell.c:866
 #, c-format
 msgid "%s: option requires an argument"
 msgstr "%s: tùy chọn cần một đối số"
@@ -215,7 +210,7 @@ msgstr "%s: cần đối số thuộc kiểu số"
 msgid "%s: not found"
 msgstr "%s: không tìm thấy"
 
-#: builtins/common.c:216 shell.c:857
+#: builtins/common.c:216 shell.c:879
 #, c-format
 msgid "%s: invalid option"
 msgstr "%s: tùy chọn không hợp lệ"
@@ -225,7 +220,7 @@ msgstr "%s: tùy chọn không hợp lệ"
 msgid "%s: invalid option name"
 msgstr "%s: tên tùy chọn không hợp lệ"
 
-#: builtins/common.c:230 execute_cmd.c:2373 general.c:368 general.c:373
+#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373
 #, c-format
 msgid "`%s': not a valid identifier"
 msgstr "“%s”: không phải là định danh hợp lệ"
@@ -238,7 +233,7 @@ msgstr "số bát phân không hợp lệ"
 msgid "invalid hex number"
 msgstr "số thập lục không hợp lệ"
 
-#: builtins/common.c:244 expr.c:1569
+#: builtins/common.c:244 expr.c:1574
 msgid "invalid number"
 msgstr "số không hợp lệ"
 
@@ -252,88 +247,93 @@ msgstr "%s: sai đặc tả tín hiệu"
 msgid "`%s': not a pid or valid job spec"
 msgstr "“%s”: không phải một pid hoặc đặc tả công việc hợp lệ"
 
-#: builtins/common.c:266 error.c:510
+#: builtins/common.c:266 error.c:536
 #, c-format
 msgid "%s: readonly variable"
 msgstr "%s: biến chỉ đọc"
 
-#: builtins/common.c:274
+#: builtins/common.c:273
+#, fuzzy, c-format
+msgid "%s: cannot assign"
+msgstr "%s: không thể hủy đặt"
+
+#: builtins/common.c:281
 #, c-format
 msgid "%s: %s out of range"
 msgstr "%s: %s nằm ngoài phạm vi"
 
-#: builtins/common.c:274 builtins/common.c:276
+#: builtins/common.c:281 builtins/common.c:283
 msgid "argument"
 msgstr "đối số"
 
-#: builtins/common.c:276
+#: builtins/common.c:283
 #, c-format
 msgid "%s out of range"
 msgstr "%s nằm ngoài phạm vi"
 
-#: builtins/common.c:284
+#: builtins/common.c:291
 #, c-format
 msgid "%s: no such job"
 msgstr "%s: không có công việc như vậy"
 
-#: builtins/common.c:292
+#: builtins/common.c:299
 #, c-format
 msgid "%s: no job control"
 msgstr "%s: không có điều khiển công việc"
 
-#: builtins/common.c:294
+#: builtins/common.c:301
 msgid "no job control"
 msgstr "không có điều khiển công việc"
 
-#: builtins/common.c:304
+#: builtins/common.c:311
 #, c-format
 msgid "%s: restricted"
 msgstr "%s: bị hạn chế"
 
-#: builtins/common.c:306
+#: builtins/common.c:313
 msgid "restricted"
 msgstr "bị hạn chế"
 
-#: builtins/common.c:314
+#: builtins/common.c:321
 #, c-format
 msgid "%s: not a shell builtin"
 msgstr "%s: không phải là lệnh tích hợp trong hệ vỏ"
 
-#: builtins/common.c:323
+#: builtins/common.c:330
 #, c-format
 msgid "write error: %s"
 msgstr "lỗi ghi: %s"
 
-#: builtins/common.c:331
+#: builtins/common.c:338
 #, c-format
 msgid "error setting terminal attributes: %s"
 msgstr "lỗi đặt các thuộc tính thiết bị cuối: %s"
 
-#: builtins/common.c:333
+#: builtins/common.c:340
 #, c-format
 msgid "error getting terminal attributes: %s"
 msgstr "lỗi lấy các thuộc tính thiết bị cuối: %s"
 
-#: builtins/common.c:635
+#: builtins/common.c:642
 #, c-format
 msgid "%s: error retrieving current directory: %s: %s\n"
 msgstr "%s: lỗi lấy thư mục hiện thời: %s: %s\n"
 
-#: builtins/common.c:701 builtins/common.c:703
+#: builtins/common.c:708 builtins/common.c:710
 #, c-format
 msgid "%s: ambiguous job spec"
 msgstr "%s: đặc tả công việc chưa rõ ràng"
 
-#: builtins/common.c:964
+#: builtins/common.c:971
 msgid "help not available in this version"
 msgstr "trợ giúp không sẵn có ở phiên bản này"
 
-#: builtins/common.c:1008 builtins/set.def:953 variables.c:3839
+#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825
 #, c-format
 msgid "%s: cannot unset: readonly %s"
 msgstr "%s: không thể hủy đặt: %s chỉ đọc"
 
-#: builtins/common.c:1013 builtins/set.def:932 variables.c:3844
+#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830
 #, c-format
 msgid "%s: cannot unset"
 msgstr "%s: không thể hủy đặt"
@@ -343,108 +343,108 @@ msgstr "%s: không thể hủy đặt"
 msgid "%s: invalid action name"
 msgstr "%s: tên hành động không hợp lệ"
 
-#: builtins/complete.def:486 builtins/complete.def:634
-#: builtins/complete.def:865
+#: builtins/complete.def:486 builtins/complete.def:642
+#: builtins/complete.def:873
 #, c-format
 msgid "%s: no completion specification"
 msgstr "%s: không có đặc tả tự hoàn thiện"
 
-#: builtins/complete.def:688
+#: builtins/complete.def:696
 msgid "warning: -F option may not work as you expect"
 msgstr "cảnh báo: tùy chọn “-F” có thể không hoạt động như mong đợi"
 
-#: builtins/complete.def:690
+#: builtins/complete.def:698
 msgid "warning: -C option may not work as you expect"
 msgstr "cảnh báo: tùy chọn “-C” có thể không hoạt động như bạn mong đợi"
 
-#: builtins/complete.def:838
+#: builtins/complete.def:846
 msgid "not currently executing completion function"
 msgstr "hiện thời không thực thi chức năng tự hoàn thiện"
 
-#: builtins/declare.def:134
+#: builtins/declare.def:137
 msgid "can only be used in a function"
 msgstr "chỉ có thể dùng trong một hàm"
 
-#: builtins/declare.def:363 builtins/declare.def:756
+#: builtins/declare.def:437
+msgid "cannot use `-f' to make functions"
+msgstr "không thể dùng “-f” để tạo hàm"
+
+#: builtins/declare.def:464 execute_cmd.c:6132
+#, c-format
+msgid "%s: readonly function"
+msgstr "%s: hàm chỉ đọc"
+
+#: builtins/declare.def:521 builtins/declare.def:804
 #, c-format
 msgid "%s: reference variable cannot be an array"
 msgstr "%s: biến tham chiếu không thể là một mảng"
 
-#: builtins/declare.def:374 variables.c:3385
+#: builtins/declare.def:532 variables.c:3359
 #, c-format
 msgid "%s: nameref variable self references not allowed"
 msgstr "%s: biến nameref tự tham chiếu là không được phép"
 
-#: builtins/declare.def:379 variables.c:2104 variables.c:3304 variables.c:3312
-#: variables.c:3382
+#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286
+#: variables.c:3356
 #, c-format
 msgid "%s: circular name reference"
 msgstr "%s: tên tham chiếu quẩn tròn"
 
-#: builtins/declare.def:384 builtins/declare.def:762 builtins/declare.def:773
+#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820
 #, fuzzy, c-format
 msgid "`%s': invalid variable name for name reference"
 msgstr "%s: tên biến không hợp lệ cho một tham chiếu tên"
 
-#: builtins/declare.def:514
-msgid "cannot use `-f' to make functions"
-msgstr "không thể dùng “-f” để tạo hàm"
-
-#: builtins/declare.def:526 execute_cmd.c:5986
-#, c-format
-msgid "%s: readonly function"
-msgstr "%s: hàm chỉ đọc"
-
-#: builtins/declare.def:824
-#, c-format
-msgid "%s: quoted compound array assignment deprecated"
-msgstr "%s: gán mảng phức hợp được trích dẫn đã lạc hậu"
-
-#: builtins/declare.def:838
+#: builtins/declare.def:856
 #, c-format
 msgid "%s: cannot destroy array variables in this way"
 msgstr "%s: không thể hủy biến mảng bằng cách này"
 
-#: builtins/declare.def:845 builtins/read.def:815
+#: builtins/declare.def:862 builtins/read.def:887
 #, c-format
 msgid "%s: cannot convert associative to indexed array"
 msgstr "%s: không thể chuyển đổi mảng kết hợp sang mảng chỉ số"
 
-#: builtins/enable.def:143 builtins/enable.def:151
+#: builtins/declare.def:891
+#, c-format
+msgid "%s: quoted compound array assignment deprecated"
+msgstr "%s: gán mảng phức hợp được trích dẫn đã lạc hậu"
+
+#: builtins/enable.def:145 builtins/enable.def:153
 msgid "dynamic loading not available"
 msgstr "không có chức năng nạp động"
 
-#: builtins/enable.def:343
+#: builtins/enable.def:376
 #, c-format
 msgid "cannot open shared object %s: %s"
 msgstr "không thể mở đối tượng dùng chung %s: %s"
 
-#: builtins/enable.def:371
+#: builtins/enable.def:405
 #, c-format
 msgid "cannot find %s in shared object %s: %s"
 msgstr "không tìm thấy %s trong đối tượng dùng chung %s: %s"
 
-#: builtins/enable.def:388
+#: builtins/enable.def:422
 #, fuzzy, c-format
 msgid "%s: dynamic builtin already loaded"
 msgstr "%s không được tải động"
 
-#: builtins/enable.def:392
+#: builtins/enable.def:426
 #, c-format
 msgid "load function for %s returns failure (%d): not loaded"
 msgstr "tải hàm cho %s trả về lỗi nghiêm trọng (%d): nên không được tải"
 
-#: builtins/enable.def:517
+#: builtins/enable.def:551
 #, c-format
 msgid "%s: not dynamically loaded"
 msgstr "%s không được tải động"
 
-#: builtins/enable.def:543
+#: builtins/enable.def:577
 #, c-format
 msgid "%s: cannot delete: %s"
 msgstr "%s: không thể xóa: %s"
 
-#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5818
+#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959
 #, c-format
 msgid "%s: is a directory"
 msgstr "%s: là thư mục"
@@ -459,7 +459,7 @@ msgstr "%s: không phải là tập tin thường"
 msgid "%s: file is too large"
 msgstr "%s: tập tin quá lớn"
 
-#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1647
+#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673
 #, c-format
 msgid "%s: cannot execute binary file"
 msgstr "%s: không thể thực hiện tập tin nhị phân"
@@ -554,12 +554,12 @@ msgstr ""
 "không có trợ giúp cho “%s”. Hãy chạy lệnh “help help” hoặc  “man -k %s” hay "
 "“info %s”."
 
-#: builtins/help.def:224
+#: builtins/help.def:223
 #, c-format
 msgid "%s: cannot open: %s"
 msgstr "%s: không thể mở: %s"
 
-#: builtins/help.def:524
+#: builtins/help.def:523
 #, c-format
 msgid ""
 "These shell commands are defined internally.  Type `help' to see this list.\n"
@@ -579,21 +579,21 @@ msgstr ""
 "Dấu sao (*) bên cạnh tên nghĩa là lệnh bị tắt.\n"
 "\n"
 
-#: builtins/history.def:155
+#: builtins/history.def:159
 msgid "cannot use more than one of -anrw"
 msgstr "chỉ có thể dùng một của những tùy chọn -anrw"
 
-#: builtins/history.def:188 builtins/history.def:198 builtins/history.def:213
-#: builtins/history.def:230 builtins/history.def:242 builtins/history.def:249
+#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215
+#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247
 msgid "history position"
 msgstr "vị trí lịch sử"
 
-#: builtins/history.def:340
+#: builtins/history.def:338
 #, fuzzy, c-format
 msgid "%s: invalid timestamp"
 msgstr "%s: đối số không hợp lệ"
 
-#: builtins/history.def:451
+#: builtins/history.def:449
 #, c-format
 msgid "%s: history expansion failed"
 msgstr "%s: gặp lỗi khi khai triển lịch sử"
@@ -616,78 +616,78 @@ msgstr "%s: đối số phải là ID tiến trình hoặc công việc"
 msgid "Unknown error"
 msgstr "Lỗi không rõ"
 
-#: builtins/let.def:97 builtins/let.def:122 expr.c:639 expr.c:657
+#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658
 msgid "expression expected"
 msgstr "cần biểu thức"
 
-#: builtins/mapfile.def:178
+#: builtins/mapfile.def:180
 #, c-format
 msgid "%s: not an indexed array"
 msgstr "%s: không phải là mảng chỉ số"
 
-#: builtins/mapfile.def:271 builtins/read.def:308
+#: builtins/mapfile.def:276 builtins/read.def:336
 #, c-format
 msgid "%s: invalid file descriptor specification"
 msgstr "%s: đặc tả bộ mô tả tập tin không hợp lệ"
 
-#: builtins/mapfile.def:279 builtins/read.def:315
+#: builtins/mapfile.def:284 builtins/read.def:343
 #, c-format
 msgid "%d: invalid file descriptor: %s"
 msgstr "%d: bộ mô tả tập tin không hợp lệ: %s"
 
-#: builtins/mapfile.def:288 builtins/mapfile.def:326
+#: builtins/mapfile.def:293 builtins/mapfile.def:331
 #, c-format
 msgid "%s: invalid line count"
 msgstr "%s: sai số lượng dòng"
 
-#: builtins/mapfile.def:299
+#: builtins/mapfile.def:304
 #, c-format
 msgid "%s: invalid array origin"
 msgstr "%s: gốc mảng không hợp lệ"
 
-#: builtins/mapfile.def:316
+#: builtins/mapfile.def:321
 #, c-format
 msgid "%s: invalid callback quantum"
 msgstr "%s: lượng gọi ngược không hợp lệ"
 
-#: builtins/mapfile.def:349
+#: builtins/mapfile.def:354
 msgid "empty array variable name"
 msgstr "tên biến mảng vẫn trống"
 
-#: builtins/mapfile.def:370
+#: builtins/mapfile.def:375
 msgid "array variable support required"
 msgstr "cần hỗ trợ biến mảng"
 
-#: builtins/printf.def:419
+#: builtins/printf.def:430
 #, c-format
 msgid "`%s': missing format character"
 msgstr "“%s”: thiếu ký tự định dạng"
 
-#: builtins/printf.def:474
+#: builtins/printf.def:485
 #, c-format
 msgid "`%c': invalid time format specification"
 msgstr "“%c”: đặc tả định dạng thời gian không đúng"
 
-#: builtins/printf.def:676
+#: builtins/printf.def:708
 #, c-format
 msgid "`%c': invalid format character"
 msgstr "“%c”: ký tự định dạng không hợp lệ"
 
-#: builtins/printf.def:702
+#: builtins/printf.def:734
 #, c-format
 msgid "warning: %s: %s"
 msgstr "cảnh báo: %s: %s"
 
-#: builtins/printf.def:788
+#: builtins/printf.def:822
 #, c-format
 msgid "format parsing problem: %s"
 msgstr "vấn đề phân tích cú pháp định dạng: %s"
 
-#: builtins/printf.def:885
+#: builtins/printf.def:919
 msgid "missing hex digit for \\x"
 msgstr "thiếu chữ số thập lục phân cho \\x"
 
-#: builtins/printf.def:900
+#: builtins/printf.def:934
 #, c-format
 msgid "missing unicode digit for \\%c"
 msgstr "thiếu chữ số unicode cho \\%c"
@@ -835,12 +835,12 @@ msgstr ""
 "\n"
 "    Lệnh “dirs” hiển thị ngăn xếp thư mục."
 
-#: builtins/read.def:280
+#: builtins/read.def:308
 #, c-format
 msgid "%s: invalid timeout specification"
 msgstr "%s: sai đặc tả thời gian chờ tối đa"
 
-#: builtins/read.def:755
+#: builtins/read.def:827
 #, c-format
 msgid "read error: %d: %s"
 msgstr "lỗi đọc: %d: %s"
@@ -853,7 +853,7 @@ msgstr "chỉ có thể “return” từ một hàm hoặc văn lệnh được
 msgid "cannot simultaneously unset a function and a variable"
 msgstr "không thể hủy đặt đồng thời một hàm VÀ một biến"
 
-#: builtins/set.def:966
+#: builtins/set.def:969
 #, c-format
 msgid "%s: not an array variable"
 msgstr "%s: không phải biến mảng"
@@ -872,11 +872,11 @@ msgstr "%s: không thể xuất"
 msgid "shift count"
 msgstr "số lượng dịch"
 
-#: builtins/shopt.def:310
+#: builtins/shopt.def:323
 msgid "cannot set and unset shell options simultaneously"
 msgstr "không thể đồng thời đặt và hủy đặt các tùy chọn hệ vỏ"
 
-#: builtins/shopt.def:428
+#: builtins/shopt.def:444
 #, c-format
 msgid "%s: invalid shell option name"
 msgstr "%s: tên tùy chọn hệ vỏ không hợp lệ"
@@ -943,16 +943,16 @@ msgstr "%s: đối số giới hạn không hợp lệ"
 msgid "`%c': bad command"
 msgstr "“%c”: câu lệnh sai"
 
-#: builtins/ulimit.def:455
+#: builtins/ulimit.def:464
 #, c-format
 msgid "%s: cannot get limit: %s"
 msgstr "%s: không thể lấy giới hạn: %s"
 
-#: builtins/ulimit.def:481
+#: builtins/ulimit.def:490
 msgid "limit"
 msgstr "giới hạn"
 
-#: builtins/ulimit.def:493 builtins/ulimit.def:793
+#: builtins/ulimit.def:502 builtins/ulimit.def:802
 #, c-format
 msgid "%s: cannot modify limit: %s"
 msgstr "%s: không thể sửa đổi giới hạn: %s"
@@ -971,7 +971,7 @@ msgstr "“%c”: toán tử chế độ ký hiệu không hợp lệ"
 msgid "`%c': invalid symbolic mode character"
 msgstr "“%c”: ký tự chế độ ký hiệu không hợp lệ"
 
-#: error.c:89 error.c:347 error.c:349 error.c:351
+#: error.c:89 error.c:373 error.c:375 error.c:377
 msgid " line "
 msgstr " dòng "
 
@@ -991,96 +991,106 @@ msgstr "Hủy bỏ…"
 msgid "INFORM: "
 msgstr "THBÁO:"
 
-#: error.c:462
+#: error.c:310
+#, fuzzy, c-format
+msgid "DEBUG warning: "
+msgstr "cảnh báo: "
+
+#: error.c:488
 msgid "unknown command error"
 msgstr "lỗi lệnh không rõ"
 
-#: error.c:463
+#: error.c:489
 msgid "bad command type"
 msgstr "kiểu lệnh sai"
 
-#: error.c:464
+#: error.c:490
 msgid "bad connector"
 msgstr "bộ kết nối sai"
 
-#: error.c:465
+#: error.c:491
 msgid "bad jump"
 msgstr "nhảy sai"
 
-#: error.c:503
+#: error.c:529
 #, c-format
 msgid "%s: unbound variable"
 msgstr "%s: biến chưa liên kết"
 
-#: eval.c:242
+#: eval.c:243
 msgid "\atimed out waiting for input: auto-logout\n"
 msgstr "\aquá thời hạn đợi dữ liệu nhập: tự động đăng xuất\n"
 
-#: execute_cmd.c:537
+#: execute_cmd.c:555
 #, c-format
 msgid "cannot redirect standard input from /dev/null: %s"
 msgstr "không thể chuyển hướng đầu vào chuẩn từ /dev/null: %s"
 
-#: execute_cmd.c:1297
+#: execute_cmd.c:1317
 #, c-format
 msgid "TIMEFORMAT: `%c': invalid format character"
 msgstr "ĐỊNH DẠNG THỜI GIAN: “%c”: ký tự định dạng không hợp lệ"
 
-#: execute_cmd.c:2362
+#: execute_cmd.c:2391
 #, c-format
 msgid "execute_coproc: coproc [%d:%s] still exists"
 msgstr ""
 
-#: execute_cmd.c:2486
+#: execute_cmd.c:2524
 msgid "pipe error"
 msgstr "lỗi ống dẫn"
 
-#: execute_cmd.c:4793
+#: execute_cmd.c:4923
 #, c-format
 msgid "eval: maximum eval nesting level exceeded (%d)"
 msgstr "eval: vượt quá mức độ eval lồng nhau tối đa (%d)"
 
-#: execute_cmd.c:4805
+#: execute_cmd.c:4935
 #, c-format
 msgid "%s: maximum source nesting level exceeded (%d)"
 msgstr "%s: vượt quá mức độ nguồn lồng nhau tối đa (%d)"
 
-#: execute_cmd.c:4913
+#: execute_cmd.c:5043
 #, c-format
 msgid "%s: maximum function nesting level exceeded (%d)"
 msgstr "%s: vượt quá mức độ các hàm lồng nhau tối đa (%d)"
 
-#: execute_cmd.c:5467
+#: execute_cmd.c:5598
 #, c-format
 msgid "%s: restricted: cannot specify `/' in command names"
 msgstr "%s: bị hạn chế: không thể dùng “/” trong tên lệnh"
 
-#: execute_cmd.c:5574
+#: execute_cmd.c:5715
 #, c-format
 msgid "%s: command not found"
 msgstr "%s: không tìm thấy lệnh"
 
-#: execute_cmd.c:5816
+#: execute_cmd.c:5957
 #, c-format
 msgid "%s: %s"
 msgstr "%s: %s"
 
-#: execute_cmd.c:5854
+#: execute_cmd.c:5975
+#, fuzzy, c-format
+msgid "%s: cannot execute: required file not found"
+msgstr "%s: không thể thực hiện tập tin nhị phân"
+
+#: execute_cmd.c:6000
 #, c-format
 msgid "%s: %s: bad interpreter"
 msgstr "%s: %s: bộ thông dịch sai"
 
-#: execute_cmd.c:5891
+#: execute_cmd.c:6037
 #, c-format
 msgid "%s: cannot execute binary file: %s"
 msgstr "%s: không thể thực hiện tập tin nhị phân: %s"
 
-#: execute_cmd.c:5977
+#: execute_cmd.c:6123
 #, c-format
 msgid "`%s': is a special builtin"
 msgstr "“%s”: là lệnh tích hợp đặc biệt"
 
-#: execute_cmd.c:6029
+#: execute_cmd.c:6175
 #, c-format
 msgid "cannot duplicate fd %d to fd %d"
 msgstr "không thể nhân đôi fd %d thành fd %d"
@@ -1093,70 +1103,70 @@ msgstr "vượt quá ngưỡng đệ quy của biểu thức"
 msgid "recursion stack underflow"
 msgstr "tràn ngược ngăn xếp đệ quy"
 
-#: expr.c:477
+#: expr.c:478
 msgid "syntax error in expression"
 msgstr "lỗi cú pháp trong biểu thức"
 
-#: expr.c:521
+#: expr.c:522
 msgid "attempted assignment to non-variable"
 msgstr "thử gán cho thứ không phải biến"
 
-#: expr.c:530
+#: expr.c:531
 #, fuzzy
 msgid "syntax error in variable assignment"
 msgstr "lỗi cú pháp trong biểu thức"
 
-#: expr.c:544 expr.c:911
+#: expr.c:545 expr.c:912
 msgid "division by 0"
 msgstr "chia cho không"
 
-#: expr.c:592
+#: expr.c:593
 msgid "bug: bad expassign token"
 msgstr "lỗi: “token expassign” sai"
 
-#: expr.c:646
+#: expr.c:647
 msgid "`:' expected for conditional expression"
 msgstr "cần “:” cho biểu thức điều kiện"
 
-#: expr.c:972
+#: expr.c:973
 msgid "exponent less than 0"
 msgstr "số mũ nhỏ hơn 0"
 
-#: expr.c:1029
+#: expr.c:1030
 msgid "identifier expected after pre-increment or pre-decrement"
 msgstr "cần định danh sau tăng/giảm dần trước"
 
-#: expr.c:1056
+#: expr.c:1057
 msgid "missing `)'"
 msgstr "thiếu “)”"
 
-#: expr.c:1107 expr.c:1487
+#: expr.c:1108 expr.c:1492
 msgid "syntax error: operand expected"
 msgstr "lỗi cú pháp: cần toán hạng"
 
-#: expr.c:1489
+#: expr.c:1494
 msgid "syntax error: invalid arithmetic operator"
 msgstr "lỗi cú pháp: toán tử số học không hợp lệ"
 
-#: expr.c:1513
+#: expr.c:1518
 #, c-format
 msgid "%s%s%s: %s (error token is \"%s\")"
 msgstr "%s%s%s: %s (thẻ bài lỗi là \"%s\")"
 
-#: expr.c:1573
+#: expr.c:1578
 msgid "invalid arithmetic base"
 msgstr "cơ số (toán học) không hợp lệ"
 
-#: expr.c:1582
+#: expr.c:1587
 #, fuzzy
 msgid "invalid integer constant"
 msgstr "%s: sai số lượng dòng"
 
-#: expr.c:1598
+#: expr.c:1603
 msgid "value too great for base"
 msgstr "cơ số có giá trị quá lớn"
 
-#: expr.c:1647
+#: expr.c:1652
 #, c-format
 msgid "%s: expression error\n"
 msgstr "%s: lỗi biểu thức\n"
@@ -1165,7 +1175,7 @@ msgstr "%s: lỗi biểu thức\n"
 msgid "getcwd: cannot access parent directories"
 msgstr "getcwd: không thể truy cập thư mục cấp trên"
 
-#: input.c:99 subst.c:6069
+#: input.c:99 subst.c:6208
 #, c-format
 msgid "cannot reset nodelay mode for fd %d"
 msgstr "không thể đặt lại chế độ “nodelay” cho fd %d"
@@ -1185,169 +1195,169 @@ msgstr "save_bash_input: đã có bộ đệm cho fd mới %d"
 msgid "start_pipeline: pgrp pipe"
 msgstr "start_pipeline: pgrp pipe"
 
-#: jobs.c:906
+#: jobs.c:907
 #, c-format
 msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr ""
 
-#: jobs.c:959
+#: jobs.c:960
 #, c-format
 msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr ""
 
-#: jobs.c:1283
+#: jobs.c:1279
 #, c-format
 msgid "forked pid %d appears in running job %d"
 msgstr "pid được tánh nhánh %d có vẻ đang chạy trong công việc %d"
 
-#: jobs.c:1402
+#: jobs.c:1397
 #, c-format
 msgid "deleting stopped job %d with process group %ld"
 msgstr "đang xóa công việc bị dừng chạy %d với nhóm tiến trình %ld"
 
-#: jobs.c:1511
+#: jobs.c:1502
 #, c-format
 msgid "add_process: pid %5ld (%s) marked as still alive"
 msgstr "add_process: pid %5ld (%s) được đánh dấu vẫn hoạt động"
 
-#: jobs.c:1850
+#: jobs.c:1839
 #, c-format
 msgid "describe_pid: %ld: no such pid"
 msgstr "describe_pid: %ld: không có pid như vậy"
 
-#: jobs.c:1865
+#: jobs.c:1854
 #, c-format
 msgid "Signal %d"
 msgstr "Tín hiệu %d"
 
-#: jobs.c:1879 jobs.c:1905
+#: jobs.c:1868 jobs.c:1894
 msgid "Done"
 msgstr "Xong"
 
-#: jobs.c:1884 siglist.c:122
+#: jobs.c:1873 siglist.c:123
 msgid "Stopped"
 msgstr "Bị dừng"
 
-#: jobs.c:1888
+#: jobs.c:1877
 #, c-format
 msgid "Stopped(%s)"
 msgstr "Bị dừng(%s)"
 
-#: jobs.c:1892
+#: jobs.c:1881
 msgid "Running"
 msgstr "Đang chạy"
 
-#: jobs.c:1909
+#: jobs.c:1898
 #, c-format
 msgid "Done(%d)"
 msgstr "Xong(%d)"
 
-#: jobs.c:1911
+#: jobs.c:1900
 #, c-format
 msgid "Exit %d"
 msgstr "Thoát %d"
 
-#: jobs.c:1914
+#: jobs.c:1903
 msgid "Unknown status"
 msgstr "Không rõ trạng thái"
 
-#: jobs.c:2001
+#: jobs.c:1990
 #, c-format
 msgid "(core dumped) "
 msgstr "(xuất ra core)"
 
-#: jobs.c:2020
+#: jobs.c:2009
 #, c-format
 msgid "  (wd: %s)"
 msgstr "  (wd: %s)"
 
-#: jobs.c:2259
+#: jobs.c:2250
 #, c-format
 msgid "child setpgid (%ld to %ld)"
 msgstr "setpgid tiến trình con (%ld thành %ld)"
 
-#: jobs.c:2617 nojobs.c:664
+#: jobs.c:2608 nojobs.c:666
 #, c-format
 msgid "wait: pid %ld is not a child of this shell"
 msgstr "wait: pid %ld không phải là tiến trình con của hệ vỏ này"
 
-#: jobs.c:2893
+#: jobs.c:2884
 #, c-format
 msgid "wait_for: No record of process %ld"
 msgstr "wait_for: Không có mục ghi về tiến trình %ld"
 
-#: jobs.c:3236
+#: jobs.c:3223
 #, c-format
 msgid "wait_for_job: job %d is stopped"
 msgstr "wait_for_job: công việc %d bị dừng chạy"
 
-#: jobs.c:3564
+#: jobs.c:3551
 #, fuzzy, c-format
 msgid "%s: no current jobs"
 msgstr "%s: không có công việc như vậy"
 
-#: jobs.c:3571
+#: jobs.c:3558
 #, c-format
 msgid "%s: job has terminated"
 msgstr "%s: công việc bị chấm dứt"
 
-#: jobs.c:3580
+#: jobs.c:3567
 #, c-format
 msgid "%s: job %d already in background"
 msgstr "%s: công việc %d đã đang chạy nền"
 
-#: jobs.c:3806
+#: jobs.c:3793
 msgid "waitchld: turning on WNOHANG to avoid indefinite block"
 msgstr "waitchld: đang bật WNOHANG để tránh bị chặn vô hạn"
 
-#: jobs.c:4320
+#: jobs.c:4307
 #, c-format
 msgid "%s: line %d: "
 msgstr "%s: dòng %d: "
 
-#: jobs.c:4334 nojobs.c:919
+#: jobs.c:4321 nojobs.c:921
 #, c-format
 msgid " (core dumped)"
 msgstr " (xuất ra core)"
 
-#: jobs.c:4346 jobs.c:4359
+#: jobs.c:4333 jobs.c:4346
 #, c-format
 msgid "(wd now: %s)\n"
 msgstr "(wd ngay: %s)\n"
 
-#: jobs.c:4391
+#: jobs.c:4378
 msgid "initialize_job_control: getpgrp failed"
 msgstr "initialize_job_control: getpgrp bị lỗi"
 
-#: jobs.c:4447
+#: jobs.c:4434
 #, fuzzy
 msgid "initialize_job_control: no job control in background"
 msgstr "initialize_job_control: kỷ luật dòng"
 
-#: jobs.c:4463
+#: jobs.c:4450
 msgid "initialize_job_control: line discipline"
 msgstr "initialize_job_control: kỷ luật dòng"
 
 # Nghĩa chữ : dừng dịch
-#: jobs.c:4473
+#: jobs.c:4460
 msgid "initialize_job_control: setpgid"
 msgstr "initialize_job_control: setpgid"
 
-#: jobs.c:4494 jobs.c:4503
+#: jobs.c:4481 jobs.c:4490
 #, c-format
 msgid "cannot set terminal process group (%d)"
 msgstr "không thể đặt nhóm tiến trình cuối cùng (%d)"
 
-#: jobs.c:4508
+#: jobs.c:4495
 msgid "no job control in this shell"
 msgstr "không có điều khiển công việc trong hệ vỏ này"
 
-#: lib/malloc/malloc.c:353
+#: lib/malloc/malloc.c:367
 #, c-format
 msgid "malloc: failed assertion: %s\n"
 msgstr "malloc: khẳng định gặp lỗi: %s\n"
 
-#: lib/malloc/malloc.c:369
+#: lib/malloc/malloc.c:383
 #, c-format
 msgid ""
 "\r\n"
@@ -1356,51 +1366,51 @@ msgstr ""
 "\r\n"
 "malloc: %s:%d: khẳng định bị sai\r\n"
 
-#: lib/malloc/malloc.c:370 lib/malloc/malloc.c:933
+#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941
 msgid "unknown"
 msgstr "không rõ"
 
-#: lib/malloc/malloc.c:882
+#: lib/malloc/malloc.c:892
 msgid "malloc: block on free list clobbered"
 msgstr ""
 "malloc (cấp phát bộ nhớ): khối bộ nhớ dành riêng trên danh sách các khối còn "
 "trống bị ghi vào"
 
-#: lib/malloc/malloc.c:972
+#: lib/malloc/malloc.c:980
 msgid "free: called with already freed block argument"
 msgstr "free: đã được gọi với đối số khối đã được giải phóng"
 
-#: lib/malloc/malloc.c:975
+#: lib/malloc/malloc.c:983
 msgid "free: called with unallocated block argument"
 msgstr "free: đã được gọi với đối số khối chưa cấp phát"
 
-#: lib/malloc/malloc.c:994
+#: lib/malloc/malloc.c:1001
 msgid "free: underflow detected; mh_nbytes out of range"
 msgstr "free: phát hiện sự tràn ngược; mh_nbytes ở ngoại phạm vi"
 
-#: lib/malloc/malloc.c:1001
+#: lib/malloc/malloc.c:1007
 #, fuzzy
 msgid "free: underflow detected; magic8 corrupted"
 msgstr "free: phát hiện sự tràn ngược; mh_nbytes ở ngoại phạm vi"
 
-#: lib/malloc/malloc.c:1009
+#: lib/malloc/malloc.c:1014
 msgid "free: start and end chunk sizes differ"
 msgstr "free: kích cỡ đoạn đầu và cuối không trùng"
 
-#: lib/malloc/malloc.c:1119
+#: lib/malloc/malloc.c:1176
 msgid "realloc: called with unallocated block argument"
 msgstr "realloc: đã được gọi với đối số khối chưa cấp phát"
 
-#: lib/malloc/malloc.c:1134
+#: lib/malloc/malloc.c:1191
 msgid "realloc: underflow detected; mh_nbytes out of range"
 msgstr "realloc: phát hiện sự tràn ngược; mh_nbytes nằm ngoài phạm vi cho phép"
 
-#: lib/malloc/malloc.c:1141
+#: lib/malloc/malloc.c:1197
 #, fuzzy
 msgid "realloc: underflow detected; magic8 corrupted"
 msgstr "realloc: phát hiện sự tràn ngược; mh_nbytes nằm ngoài phạm vi cho phép"
 
-#: lib/malloc/malloc.c:1150
+#: lib/malloc/malloc.c:1205
 msgid "realloc: start and end chunk sizes differ"
 msgstr "realloc: kích cỡ đoạn đầu và cuối không trùng"
 
@@ -1442,22 +1452,22 @@ msgstr "%s: đặc tả đường dẫn mạng sai"
 msgid "network operations not supported"
 msgstr "không hỗ trợ thao tác mạng"
 
-#: locale.c:217
+#: locale.c:219
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s)"
 msgstr "setlocale: LC_ALL: không thể chuyển đổi miền địa phương (%s)"
 
-#: locale.c:219
+#: locale.c:221
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s): %s"
 msgstr "setlocale: LC_ALL: không thể chuyển đổi miền địa phương (%s): %s"
 
-#: locale.c:292
+#: locale.c:294
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s)"
 msgstr "setlocale: %s: không thể chuyển đổi miền địa phương (%s)"
 
-#: locale.c:294
+#: locale.c:296
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s): %s"
 msgstr "setlocale: %s: không thể chuyển đổi miền địa phương (%s): %s"
@@ -1475,138 +1485,138 @@ msgstr "Bạn có thư mới trong $_"
 msgid "The mail in %s has been read\n"
 msgstr "Đã đọc thư trong %s\n"
 
-#: make_cmd.c:317
+#: make_cmd.c:314
 msgid "syntax error: arithmetic expression required"
 msgstr "lỗi cú pháp: cần biểu thức số học"
 
-#: make_cmd.c:319
+#: make_cmd.c:316
 msgid "syntax error: `;' unexpected"
 msgstr "lỗi cú pháp: gặp dấu chấm phẩy “;” bất thường"
 
-#: make_cmd.c:320
+#: make_cmd.c:317
 #, c-format
 msgid "syntax error: `((%s))'"
 msgstr "lỗi cú pháp: “((%s))”"
 
-#: make_cmd.c:572
+#: make_cmd.c:569
 #, c-format
 msgid "make_here_document: bad instruction type %d"
 msgstr "make_here_document: kiểu chỉ lệnh sai %d"
 
-#: make_cmd.c:657
+#: make_cmd.c:668
 #, c-format
 msgid "here-document at line %d delimited by end-of-file (wanted `%s')"
 msgstr "tài liệu này ở dòng %d định giới bằng kết thúc tập tin (muốn “%s”)"
 
-#: make_cmd.c:756
+#: make_cmd.c:769
 #, c-format
 msgid "make_redirection: redirection instruction `%d' out of range"
 msgstr "make_redirection: chỉ dẫn chuyển hướng “%d” nằm ngoài phạm vi"
 
-#: parse.y:2393
+#: parse.y:2428
 #, c-format
 msgid ""
 "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line "
 "truncated"
 msgstr ""
 
-#: parse.y:2826
+#: parse.y:2921
 msgid "maximum here-document count exceeded"
 msgstr "vượt quá số lượng tài-liệu-đây tối đa"
 
-#: parse.y:3581 parse.y:3957 parse.y:4556
+#: parse.y:3684 parse.y:4244 parse.y:6148
 #, c-format
 msgid "unexpected EOF while looking for matching `%c'"
 msgstr "gặp kết thúc tập tin bất thường trong khi tìm “%c” tương ứng"
 
-#: parse.y:4696
+#: parse.y:4452
 msgid "unexpected EOF while looking for `]]'"
 msgstr "gặp kết thúc tập tin bất thường trong khi tìm “]]”"
 
-#: parse.y:4701
+#: parse.y:4457
 #, c-format
 msgid "syntax error in conditional expression: unexpected token `%s'"
 msgstr "gặp lỗi cú pháp trong biểu thức điều kiện: thẻ bài bất thường “%s”"
 
-#: parse.y:4705
+#: parse.y:4461
 msgid "syntax error in conditional expression"
 msgstr "gặp lỗi cú pháp trong biểu thức điều kiện"
 
-#: parse.y:4783
+#: parse.y:4539
 #, c-format
 msgid "unexpected token `%s', expected `)'"
 msgstr "gặp thẻ bài bất thường “%s”, cần “)”"
 
-#: parse.y:4787
+#: parse.y:4543
 msgid "expected `)'"
 msgstr "cần “)”"
 
-#: parse.y:4815
+#: parse.y:4571
 #, c-format
 msgid "unexpected argument `%s' to conditional unary operator"
 msgstr "đối số bất thường “%s” cho toán tử một ngôi điều kiện"
 
-#: parse.y:4819
+#: parse.y:4575
 msgid "unexpected argument to conditional unary operator"
 msgstr "đối số bất thường cho toán tử một ngôi điều kiện"
 
-#: parse.y:4865
+#: parse.y:4621
 #, c-format
 msgid "unexpected token `%s', conditional binary operator expected"
 msgstr "thẻ bài bất thường “%s”, cần toán tử hai ngôi điều kiện"
 
-#: parse.y:4869
+#: parse.y:4625
 msgid "conditional binary operator expected"
 msgstr "cần toán tử hai ngôi điều kiện"
 
-#: parse.y:4891
+#: parse.y:4647
 #, c-format
 msgid "unexpected argument `%s' to conditional binary operator"
 msgstr "đối số bất thường “%s” cho toán tử hai ngôi điều kiện"
 
-#: parse.y:4895
+#: parse.y:4651
 msgid "unexpected argument to conditional binary operator"
 msgstr "đối số bất thường cho toán tử hai ngôi điều kiện"
 
-#: parse.y:4906
+#: parse.y:4662
 #, c-format
 msgid "unexpected token `%c' in conditional command"
 msgstr "gặp thẻ bài bất thường “%c” trong câu lệnh điều kiện"
 
-#: parse.y:4909
+#: parse.y:4665
 #, c-format
 msgid "unexpected token `%s' in conditional command"
 msgstr "gặp thẻ bài bất thường “%s” trong câu lệnh điều kiện"
 
-#: parse.y:4913
+#: parse.y:4669
 #, c-format
 msgid "unexpected token %d in conditional command"
 msgstr "gặp thẻ bài bất thường “%d” trong câu lệnh điều kiện"
 
-#: parse.y:6336
+#: parse.y:6118
 #, c-format
 msgid "syntax error near unexpected token `%s'"
 msgstr "có lỗi cú pháp ở gần thẻ bài bất thường “%s”"
 
-#: parse.y:6355
+#: parse.y:6137
 #, c-format
 msgid "syntax error near `%s'"
 msgstr "lỗi cú pháp ở gần “%s”"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error: unexpected end of file"
 msgstr "lỗi cú pháp: kết thúc tập tin bất thường"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error"
 msgstr "lỗi cú pháp"
 
-#: parse.y:6428
+#: parse.y:6216
 #, c-format
 msgid "Use \"%s\" to leave the shell.\n"
 msgstr "Dùng \"%s\" để rời hệ vỏ.\n"
 
-#: parse.y:6602
+#: parse.y:6394
 msgid "unexpected EOF while looking for matching `)'"
 msgstr "gặp kết thúc tập tin bất thường trong khi tìm “)” tương ứng"
 
@@ -1645,94 +1655,94 @@ msgstr "xtrace_set: con trỏ tập tin NULL"
 msgid "xtrace fd (%d) != fileno xtrace fp (%d)"
 msgstr "xtrace fd (%d) != fileno xtrace fp (%d)"
 
-#: print_cmd.c:1540
+#: print_cmd.c:1545
 #, c-format
 msgid "cprintf: `%c': invalid format character"
 msgstr "cprintf: “%c”: ký tự định dạng không hợp lệ"
 
-#: redir.c:149 redir.c:197
+#: redir.c:150 redir.c:198
 msgid "file descriptor out of range"
 msgstr "bộ mô tả tập tin ở ngoại phạm vi"
 
-#: redir.c:204
+#: redir.c:205
 #, c-format
 msgid "%s: ambiguous redirect"
 msgstr "%s: chuyển hướng chưa rõ ràng"
 
-#: redir.c:208
+#: redir.c:209
 #, c-format
 msgid "%s: cannot overwrite existing file"
 msgstr "%s: không thể ghi đè lên tập tin đã có"
 
-#: redir.c:213
+#: redir.c:214
 #, c-format
 msgid "%s: restricted: cannot redirect output"
 msgstr "%s: bị hạn chế: không thể chuyển hướng kết xuất"
 
-#: redir.c:218
+#: redir.c:219
 #, c-format
 msgid "cannot create temp file for here-document: %s"
 msgstr "không thể tạo tập tin tạm thời cho tài liệu này: %s"
 
-#: redir.c:222
+#: redir.c:223
 #, c-format
 msgid "%s: cannot assign fd to variable"
 msgstr "%s: không thể gán fd vào biến"
 
-#: redir.c:649
+#: redir.c:650
 msgid "/dev/(tcp|udp)/host/port not supported without networking"
 msgstr "/dev/(tcp|udp)/host/port không được hỗ trợ nếu không có mạng"
 
-#: redir.c:938 redir.c:1053 redir.c:1114 redir.c:1284
+#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303
 msgid "redirection error: cannot duplicate fd"
 msgstr "lỗi chuyển hướng: không thể nhân đôi fd"
 
-#: shell.c:347
+#: shell.c:353
 msgid "could not find /tmp, please create!"
 msgstr "không tìm thấy /tmp, hãy tạo mới!"
 
-#: shell.c:351
+#: shell.c:357
 msgid "/tmp must be a valid directory name"
 msgstr "“/tmp” phải là tên thư mục hợp lệ"
 
-#: shell.c:804
+#: shell.c:826
 msgid "pretty-printing mode ignored in interactive shells"
 msgstr ""
 
-#: shell.c:948
+#: shell.c:972
 #, c-format
 msgid "%c%c: invalid option"
 msgstr "%c%c: tùy chọn không hợp lệ"
 
-#: shell.c:1319
+#: shell.c:1343
 #, c-format
 msgid "cannot set uid to %d: effective uid %d"
 msgstr "không thể đặt uid thành %d: uid chịu tác động %d"
 
-#: shell.c:1330
+#: shell.c:1354
 #, c-format
 msgid "cannot set gid to %d: effective gid %d"
 msgstr "không thể đặt gid thành %d: gid chịu tác động %d"
 
-#: shell.c:1518
+#: shell.c:1544
 msgid "cannot start debugger; debugging mode disabled"
 msgstr ""
 
-#: shell.c:1632
+#: shell.c:1658
 #, c-format
 msgid "%s: Is a directory"
 msgstr "%s: Là một thư mục"
 
-#: shell.c:1881
+#: shell.c:1907
 msgid "I have no name!"
 msgstr "Không có tên!"
 
-#: shell.c:2035
+#: shell.c:2061
 #, c-format
 msgid "GNU bash, version %s-(%s)\n"
 msgstr "GNU bash, phiên bản %s-(%s)\n"
 
-#: shell.c:2036
+#: shell.c:2062
 #, c-format
 msgid ""
 "Usage:\t%s [GNU long option] [option] ...\n"
@@ -1741,324 +1751,324 @@ msgstr ""
 "Cách dùng:\t%s [tùy chọn GNU dài] [tùy chọn] …\n"
 "\t\t%s [tùy chọn GNU dài] [tùy chọn] tập-tin-văn-lệnh …\n"
 
-#: shell.c:2038
+#: shell.c:2064
 msgid "GNU long options:\n"
 msgstr "Tùy chọn dài:\n"
 
-#: shell.c:2042
+#: shell.c:2068
 msgid "Shell options:\n"
 msgstr "Tùy chọn:\n"
 
-#: shell.c:2043
+#: shell.c:2069
 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n"
 msgstr "\t-ilrsD hoặc -c lệnh hay -O tùy-chọn-ngắn\t\t(chỉ gọi)\n"
 
-#: shell.c:2062
+#: shell.c:2088
 #, c-format
 msgid "\t-%s or -o option\n"
 msgstr "\t-%s hoặc -o tùy-chọn\n"
 
-#: shell.c:2068
+#: shell.c:2094
 #, c-format
 msgid "Type `%s -c \"help set\"' for more information about shell options.\n"
 msgstr "Gõ “%s -c \"help set\"” để xem thông tin về các tùy chọn hệ vỏ.\n"
 
-#: shell.c:2069
+#: shell.c:2095
 #, c-format
 msgid "Type `%s -c help' for more information about shell builtin commands.\n"
 msgstr "Gõ “%s -c help” để xem thông tin về các lệnh hệ vỏ tích hợp.\n"
 
-#: shell.c:2070
+#: shell.c:2096
 #, c-format
 msgid "Use the `bashbug' command to report bugs.\n"
 msgstr ""
 "Dùng lệnh “bashbug” để thông báo lỗi.\n"
 "Báo cáo các lỗi dịch cho: <http://translationproject.org/team/vi.html>.\n"
 
-#: shell.c:2072
+#: shell.c:2098
 #, c-format
 msgid "bash home page: <http://www.gnu.org/software/bash>\n"
 msgstr "Trang chủ bash: <http://www.gnu.org/software/bash/>\n"
 
-#: shell.c:2073
+#: shell.c:2099
 #, c-format
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 msgstr ""
 "Trợ giúp chung về cách sử dụng phần mềm GNU : <http://www.gnu.org/gethelp/>\n"
 
-#: sig.c:757
+#: sig.c:765
 #, c-format
 msgid "sigprocmask: %d: invalid operation"
 msgstr "sigprocmask: %d: thao tác không hợp lệ"
 
-#: siglist.c:47
+#: siglist.c:48
 msgid "Bogus signal"
 msgstr "Tín hiệu giả"
 
-#: siglist.c:50
+#: siglist.c:51
 msgid "Hangup"
 msgstr "Treo"
 
-#: siglist.c:54
+#: siglist.c:55
 msgid "Interrupt"
 msgstr "Ngắt"
 
-#: siglist.c:58
+#: siglist.c:59
 msgid "Quit"
 msgstr "Thoát"
 
-#: siglist.c:62
+#: siglist.c:63
 msgid "Illegal instruction"
 msgstr "Câu lệnh không được phép"
 
-#: siglist.c:66
+#: siglist.c:67
 msgid "BPT trace/trap"
 msgstr "Theo vết/đặt bẫy BPT"
 
-#: siglist.c:74
+#: siglist.c:75
 msgid "ABORT instruction"
 msgstr "Câu lệnh HỦY BỎ"
 
-#: siglist.c:78
+#: siglist.c:79
 msgid "EMT instruction"
 msgstr "Câu lệnh EMT"
 
-#: siglist.c:82
+#: siglist.c:83
 msgid "Floating point exception"
 msgstr "Lỗi dấu chấm động"
 
-#: siglist.c:86
+#: siglist.c:87
 msgid "Killed"
 msgstr "Bị giết"
 
-#: siglist.c:90
+#: siglist.c:91
 msgid "Bus error"
 msgstr "Lỗi bus"
 
-#: siglist.c:94
+#: siglist.c:95
 msgid "Segmentation fault"
 msgstr "Lỗi phân đoạn"
 
-#: siglist.c:98
+#: siglist.c:99
 msgid "Bad system call"
 msgstr "Lỗi lệnh gọi hệ thống"
 
-#: siglist.c:102
+#: siglist.c:103
 msgid "Broken pipe"
 msgstr "Ống dẫn hỏng"
 
-#: siglist.c:106
+#: siglist.c:107
 msgid "Alarm clock"
 msgstr "Đồng hồ báo thức"
 
-#: siglist.c:110
+#: siglist.c:111
 msgid "Terminated"
 msgstr "Bị chấm dứt"
 
-#: siglist.c:114
+#: siglist.c:115
 msgid "Urgent IO condition"
 msgstr "Điều kiện IO gấp"
 
-#: siglist.c:118
+#: siglist.c:119
 msgid "Stopped (signal)"
 msgstr "Bị dừng (tín hiệu)"
 
-#: siglist.c:126
+#: siglist.c:127
 msgid "Continue"
 msgstr "Tiếp tục"
 
-#: siglist.c:134
+#: siglist.c:135
 msgid "Child death or stop"
 msgstr "Tiến trình con đã giết hoặc dừng"
 
-#: siglist.c:138
+#: siglist.c:139
 msgid "Stopped (tty input)"
 msgstr "Bị dừng (tty nhập)"
 
-#: siglist.c:142
+#: siglist.c:143
 msgid "Stopped (tty output)"
 msgstr "Bị dừng (tty xuất)"
 
-#: siglist.c:146
+#: siglist.c:147
 msgid "I/O ready"
 msgstr "I/O sẵn sàng"
 
-#: siglist.c:150
+#: siglist.c:151
 msgid "CPU limit"
 msgstr "Giới hạn CPU"
 
-#: siglist.c:154
+#: siglist.c:155
 msgid "File limit"
 msgstr "Giới hạn tập tin"
 
-#: siglist.c:158
+#: siglist.c:159
 msgid "Alarm (virtual)"
 msgstr "Báo động (ảo)"
 
-#: siglist.c:162
+#: siglist.c:163
 msgid "Alarm (profile)"
 msgstr "Báo động (hồ sơ)"
 
-#: siglist.c:166
+#: siglist.c:167
 msgid "Window changed"
 msgstr "Cửa sổ bị thay đổi"
 
-#: siglist.c:170
+#: siglist.c:171
 msgid "Record lock"
 msgstr "Khóa bản ghi"
 
-#: siglist.c:174
+#: siglist.c:175
 msgid "User signal 1"
 msgstr "Tín hiệu người dùng 1"
 
-#: siglist.c:178
+#: siglist.c:179
 msgid "User signal 2"
 msgstr "Tín hiệu người dùng 2"
 
-#: siglist.c:182
+#: siglist.c:183
 msgid "HFT input data pending"
 msgstr "Dữ liệu nhập HFT bị hoãn"
 
-#: siglist.c:186
+#: siglist.c:187
 msgid "power failure imminent"
 msgstr "sắp bị mất điện đột ngột"
 
-#: siglist.c:190
+#: siglist.c:191
 msgid "system crash imminent"
 msgstr "hệ thống sắp sụp đổ"
 
-#: siglist.c:194
+#: siglist.c:195
 msgid "migrate process to another CPU"
 msgstr "chuyển tiến trình sang CPU khác"
 
-#: siglist.c:198
+#: siglist.c:199
 msgid "programming error"
 msgstr "lỗi lập trình"
 
-#: siglist.c:202
+#: siglist.c:203
 msgid "HFT monitor mode granted"
 msgstr "Có chế độ màn hình HFT"
 
-#: siglist.c:206
+#: siglist.c:207
 msgid "HFT monitor mode retracted"
 msgstr "Không có chế độ màn hình HFT"
 
-#: siglist.c:210
+#: siglist.c:211
 msgid "HFT sound sequence has completed"
 msgstr "Đã hoàn thành chuỗi âm thanh HFT"
 
-#: siglist.c:214
+#: siglist.c:215
 msgid "Information request"
 msgstr "yêu cầu thông tin"
 
-#: siglist.c:222 siglist.c:224
+#: siglist.c:223 siglist.c:225
 #, c-format
 msgid "Unknown Signal #%d"
 msgstr "Tín hiệu lạ #%d"
 
-#: subst.c:1476 subst.c:1666
+#: subst.c:1480 subst.c:1670
 #, c-format
 msgid "bad substitution: no closing `%s' in %s"
 msgstr "sai chỉ số phụ: không có đóng “%s” trong %s"
 
-#: subst.c:3281
+#: subst.c:3307
 #, c-format
 msgid "%s: cannot assign list to array member"
 msgstr "%s: không thể gán danh sách cho bộ phận của mảng"
 
-#: subst.c:5910 subst.c:5926
+#: subst.c:6048 subst.c:6064
 msgid "cannot make pipe for process substitution"
 msgstr "không thể tạo ống dẫn để thay thế tiến trình"
 
-#: subst.c:5985
+#: subst.c:6124
 msgid "cannot make child for process substitution"
 msgstr "không thể tạo tiến trình con để thay thế tiến trình"
 
-#: subst.c:6059
+#: subst.c:6198
 #, c-format
 msgid "cannot open named pipe %s for reading"
 msgstr "không thể mở ống dẫn đặt tên %s để đọc"
 
-#: subst.c:6061
+#: subst.c:6200
 #, c-format
 msgid "cannot open named pipe %s for writing"
 msgstr "không thể mở ống dẫn có tên %s để ghi"
 
-#: subst.c:6084
+#: subst.c:6223
 #, c-format
 msgid "cannot duplicate named pipe %s as fd %d"
 msgstr "không thể nhân đôi ống dẫn đặt tên %s thành fd %d"
 
-#: subst.c:6213
+#: subst.c:6370
 #, fuzzy
 msgid "command substitution: ignored null byte in input"
 msgstr "sai thay thế: không có \"“\" đóng trong %s"
 
-#: subst.c:6353
+#: subst.c:6533
 msgid "cannot make pipe for command substitution"
 msgstr "không thể tạo ống dẫn để thay thế lệnh"
 
-#: subst.c:6397
+#: subst.c:6580
 msgid "cannot make child for command substitution"
 msgstr "không thể tạo tiến trình con để thay thế lệnh"
 
-#: subst.c:6423
+#: subst.c:6613
 msgid "command_substitute: cannot duplicate pipe as fd 1"
 msgstr "command_substitute: không thể nhân đôi ống dẫn thành fd 1"
 
-#: subst.c:6883 subst.c:9952
+#: subst.c:7082 subst.c:10252
 #, c-format
 msgid "%s: invalid variable name for name reference"
 msgstr "%s: tên biến không hợp lệ cho một tham chiếu tên"
 
-#: subst.c:6979 subst.c:6997 subst.c:7169
+#: subst.c:7178 subst.c:7196 subst.c:7369
 #, c-format
 msgid "%s: invalid indirect expansion"
 msgstr "%s: triển khai gián tiếp không hợp lệ"
 
-#: subst.c:7013 subst.c:7177
+#: subst.c:7212 subst.c:7377
 #, c-format
 msgid "%s: invalid variable name"
 msgstr "“%s”: tên biến không hợp lệ"
 
-#: subst.c:7256
+#: subst.c:7478
 #, fuzzy, c-format
 msgid "%s: parameter not set"
 msgstr "%s: tham số null hoặc chưa được đặt"
 
-#: subst.c:7258
+#: subst.c:7480
 #, c-format
 msgid "%s: parameter null or not set"
 msgstr "%s: tham số null hoặc chưa được đặt"
 
-#: subst.c:7503 subst.c:7518
+#: subst.c:7727 subst.c:7742
 #, c-format
 msgid "%s: substring expression < 0"
 msgstr "%s: biểu thức chuỗi con < 0"
 
-#: subst.c:9281 subst.c:9302
+#: subst.c:9560 subst.c:9587
 #, c-format
 msgid "%s: bad substitution"
 msgstr "%s: thay thế sai"
 
-#: subst.c:9390
+#: subst.c:9678
 #, c-format
 msgid "$%s: cannot assign in this way"
 msgstr "$%s: không thể gán bằng cách này"
 
-#: subst.c:9814
+#: subst.c:10111
 msgid ""
 "future versions of the shell will force evaluation as an arithmetic "
 "substitution"
 msgstr ""
 "phiên bản hệ vỏ mới sẽ ép buộc ước lượng dưới dạng một hàm thay thế số học"
 
-#: subst.c:10367
+#: subst.c:10795
 #, c-format
 msgid "bad substitution: no closing \"`\" in %s"
 msgstr "sai thay thế: không có \"“\" đóng trong %s"
 
-#: subst.c:11434
+#: subst.c:11874
 #, c-format
 msgid "no match: %s"
 msgstr "không khớp: %s"
@@ -2081,21 +2091,21 @@ msgstr "cần “)”"
 msgid "`)' expected, found %s"
 msgstr "cần “)” nhưng lại nhận được %s"
 
-#: test.c:466 test.c:799
+#: test.c:469 test.c:814
 #, c-format
 msgid "%s: binary operator expected"
 msgstr "%s: cần toán tử hai ngôi"
 
-#: test.c:756 test.c:759
+#: test.c:771 test.c:774
 #, c-format
 msgid "%s: unary operator expected"
 msgstr "%s: cần toán tử một ngôi"
 
-#: test.c:881
+#: test.c:896
 msgid "missing `]'"
 msgstr "thiếu “]”"
 
-#: test.c:899
+#: test.c:914
 #, fuzzy, c-format
 msgid "syntax error: `%s' unexpected"
 msgstr "lỗi cú pháp: gặp dấu chấm phẩy “;” bất thường"
@@ -2104,17 +2114,17 @@ msgstr "lỗi cú pháp: gặp dấu chấm phẩy “;” bất thường"
 msgid "invalid signal number"
 msgstr "số thứ tự tín hiệu không hợp lệ"
 
-#: trap.c:325
+#: trap.c:323
 #, fuzzy, c-format
 msgid "trap handler: maximum trap handler level exceeded (%d)"
 msgstr "eval: vượt quá mức độ eval lồng nhau tối đa (%d)"
 
-#: trap.c:414
+#: trap.c:412
 #, c-format
 msgid "run_pending_traps: bad value in trap_list[%d]: %p"
 msgstr "run_pending_traps: giá trị sai trong danh sách trap_list[%d]: %p"
 
-#: trap.c:418
+#: trap.c:416
 #, c-format
 msgid ""
 "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
@@ -2122,89 +2132,94 @@ msgstr ""
 "run_pending_traps: bộ xử lý tín hiệu là SIG_DFL, đang gửi lại %d (%s) cho "
 "chính mình"
 
-#: trap.c:487
+#: trap.c:509
 #, c-format
 msgid "trap_handler: bad signal %d"
 msgstr "trap_handler: tín hiệu sai %d"
 
-#: variables.c:421
+#: variables.c:424
 #, c-format
 msgid "error importing function definition for `%s'"
 msgstr "gặp lỗi khi nhập vào định nghĩa hàm cho “%s”"
 
-#: variables.c:833
+#: variables.c:838
 #, c-format
 msgid "shell level (%d) too high, resetting to 1"
 msgstr "cấp hệ vỏ (%d) quá cao nên đặt lại thành 1"
 
-#: variables.c:2674
+#: variables.c:2642
 msgid "make_local_variable: no function context at current scope"
 msgstr "make_local_variable: không có ngữ cảnh hàm ở phạm vi hiện thời"
 
-#: variables.c:2693
+#: variables.c:2661
 #, c-format
 msgid "%s: variable may not be assigned value"
 msgstr "%s: không thể gán giá trị cho biến"
 
-#: variables.c:3475
+#: variables.c:2818 variables.c:2874
+#, c-format
+msgid "%s: cannot inherit value from incompatible type"
+msgstr ""
+
+#: variables.c:3459
 #, fuzzy, c-format
 msgid "%s: assigning integer to name reference"
 msgstr "%s: tên biến không hợp lệ cho một tham chiếu tên"
 
-#: variables.c:4404
+#: variables.c:4390
 msgid "all_local_variables: no function context at current scope"
 msgstr "all_local_variables: không có ngữ cảnh hàm ở phạm vi hiện thời"
 
-#: variables.c:4771
+#: variables.c:4757
 #, c-format
 msgid "%s has null exportstr"
 msgstr "%s có exportstr null"
 
-#: variables.c:4776 variables.c:4785
+#: variables.c:4762 variables.c:4771
 #, c-format
 msgid "invalid character %d in exportstr for %s"
 msgstr "sai ký tự %d trong exportstr cho %s"
 
-#: variables.c:4791
+#: variables.c:4777
 #, c-format
 msgid "no `=' in exportstr for %s"
 msgstr "không có “=” trong exportstr cho %s"
 
-#: variables.c:5331
+#: variables.c:5317
 msgid "pop_var_context: head of shell_variables not a function context"
 msgstr ""
 "pop_var_context: đầu của shell_variables (các biến hệ vỏ) không phải là ngữ "
 "cảnh hàm"
 
-#: variables.c:5344
+#: variables.c:5330
 msgid "pop_var_context: no global_variables context"
 msgstr ""
 "pop_var_context: không có ngữ cảnh global_variables (các biến toàn cục)"
 
-#: variables.c:5424
+#: variables.c:5410
 msgid "pop_scope: head of shell_variables not a temporary environment scope"
 msgstr ""
 "pop_scope: đầu của shell_variables (các biến hệ vỏ) không phải là phạm vi "
 "môi trường tạm thời"
 
-#: variables.c:6387
+#: variables.c:6400
 #, c-format
 msgid "%s: %s: cannot open as FILE"
 msgstr "%s: %s: không thể mở như là TẬP-TIN"
 
-#: variables.c:6392
+#: variables.c:6405
 #, c-format
 msgid "%s: %s: invalid value for trace file descriptor"
 msgstr "%s: %s: sai đặt giá trị cho bộ mô tả tập tin vết"
 
-#: variables.c:6437
+#: variables.c:6450
 #, c-format
 msgid "%s: %s: compatibility value out of range"
 msgstr "%s: %s: giá trị so sánh nằm ngoài phạm vi"
 
 #: version.c:46 version2.c:46
 #, fuzzy
-msgid "Copyright (C) 2020 Free Software Foundation, Inc."
+msgid "Copyright (C) 2022 Free Software Foundation, Inc."
 msgstr "Tác quyền (C) năm 2014 của Tổ chức Quỹ Phần mềm Tự do, Inc."
 
 #: version.c:47 version2.c:47
@@ -2294,12 +2309,16 @@ msgstr "command [-pVv] LỆNH [Đ.SỐ …]"
 
 #: builtins.c:78
 #, fuzzy
-msgid "declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]"
+msgid ""
+"declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] "
+"[name ...]"
 msgstr "declare [-aAfFgilnrtux] [-p] [TÊN[=GIÁ-TRỊ] …]"
 
 #: builtins.c:80
 #, fuzzy
-msgid "typeset [-aAfFgiIlnrtux] [-p] name[=value] ..."
+msgid ""
+"typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] "
+"[name ...]"
 msgstr "typeset [-aAfFgilnrtux] [-p] TÊN[=GIÁ-TRỊ] …"
 
 #: builtins.c:82
@@ -2402,7 +2421,8 @@ msgid "return [n]"
 msgstr "return [n]"
 
 #: builtins.c:142
-msgid "set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]"
+#, fuzzy
+msgid "set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]"
 msgstr "set [-abefhkmnptuvxBCHP] [-o TÊN-TÙY-CHỌN] [--] [ĐỐI-SỐ …]"
 
 #: builtins.c:144
@@ -2450,7 +2470,8 @@ msgid "type [-afptP] name [name ...]"
 msgstr "type [-afptP] TÊN [TÊN …]"
 
 #: builtins.c:171
-msgid "ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]"
+#, fuzzy
+msgid "ulimit [-SHabcdefiklmnpqrstuvxPRT] [limit]"
 msgstr "ulimit [-SHabcdefiklmnpqrstuvxPT] [GIỚI-HẠN]"
 
 #: builtins.c:174
@@ -2495,11 +2516,13 @@ msgstr ""
 "[ else CÁC;CÂU;LỆNH; ] fi"
 
 #: builtins.c:196
-msgid "while COMMANDS; do COMMANDS; done"
+#, fuzzy
+msgid "while COMMANDS; do COMMANDS-2; done"
 msgstr "while CÁC;CÂU;LỆNH; do CÁC;CÂU;LỆNH; done"
 
 #: builtins.c:198
-msgid "until COMMANDS; do COMMANDS; done"
+#, fuzzy
+msgid "until COMMANDS; do COMMANDS-2; done"
 msgstr "until CÁC;CÂU;LỆNH; do CÁC;CÂU;LỆNH; done"
 
 #: builtins.c:200
@@ -3861,7 +3884,9 @@ msgid ""
 "    word to the second NAME, and so on, with any leftover words assigned to\n"
 "    the last NAME.  Only the characters found in $IFS are recognized as "
 "word\n"
-"    delimiters.\n"
+"    delimiters. By default, the backslash character escapes delimiter "
+"characters\n"
+"    and newline.\n"
 "    \n"
 "    If no NAMEs are supplied, the line read is stored in the REPLY "
 "variable.\n"
@@ -3944,7 +3969,7 @@ msgstr ""
 "    Mã trả lại là số không, nếu không gặp kết thúc tập tin, hay chờ quá\n"
 "    lâu, hoặc đưa ra bộ mô tả tập tin sai làm đối số cho “-u”."
 
-#: builtins.c:1041
+#: builtins.c:1042
 msgid ""
 "Return from a shell function.\n"
 "    \n"
@@ -3965,7 +3990,7 @@ msgstr ""
 "    Trả lại N, hoặc bị lỗi nếu hệ vỏ không đang chạy một hàm hay văn\n"
 "    lệnh."
 
-#: builtins.c:1054
+#: builtins.c:1055
 #, fuzzy
 msgid ""
 "Set or unset values of shell options and positional parameters.\n"
@@ -4138,7 +4163,7 @@ msgstr ""
 "    Trạng thái thoát:\n"
 "    Trả lại thành công trừ phi gặp tùy chọn sai."
 
-#: builtins.c:1139
+#: builtins.c:1140
 msgid ""
 "Unset values and attributes of shell variables and functions.\n"
 "    \n"
@@ -4177,7 +4202,7 @@ msgstr ""
 "    Trạng thái thoát:\n"
 "    Trả lại thành công nếu không đưa ra tùy chọn sai hay TÊN chỉ-đọc."
 
-#: builtins.c:1161
+#: builtins.c:1162
 msgid ""
 "Set export attribute for shell variables.\n"
 "    \n"
@@ -4210,7 +4235,7 @@ msgstr ""
 "    Trạng thái thoát:\n"
 "    Trả lại thành công nếu không đưa ra tùy chọn hay TÊN sai,"
 
-#: builtins.c:1180
+#: builtins.c:1181
 msgid ""
 "Mark shell variables as unchangeable.\n"
 "    \n"
@@ -4248,7 +4273,7 @@ msgstr ""
 "    Trạng thái thoát:\n"
 "    Trả lại thành công nếu không đưa ra tùy chọn sai hay TÊN không hợp lệ."
 
-#: builtins.c:1202
+#: builtins.c:1203
 msgid ""
 "Shift positional parameters.\n"
 "    \n"
@@ -4266,7 +4291,7 @@ msgstr ""
 "    Trạng thái thoát:\n"
 "    Trả lại thành công trừ khi N âm hay lớn hơn $#."
 
-#: builtins.c:1214 builtins.c:1229
+#: builtins.c:1215 builtins.c:1230
 msgid ""
 "Execute commands from a file in the current shell.\n"
 "    \n"
@@ -4289,7 +4314,7 @@ msgstr ""
 "    Trả lại trạng thái của câu lệnh cuối cùng được thực thi trong\n"
 "    TẬP-TIN; không thành công nếu không thể đọc TẬP-TIN."
 
-#: builtins.c:1245
+#: builtins.c:1246
 msgid ""
 "Suspend shell execution.\n"
 "    \n"
@@ -4314,7 +4339,7 @@ msgstr ""
 "    Trả lại thành công trừ khi chức năng điều khiển công việc không\n"
 "    được bật hoặc gặp lỗi."
 
-#: builtins.c:1261
+#: builtins.c:1262
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -4473,7 +4498,7 @@ msgstr ""
 "    Trả lại thành công nếu BTHỨC định giá là Đúng; không thành công\n"
 "    nếu BTHỨC định giá thành Sai hay đối số được chỉ ra sai."
 
-#: builtins.c:1343
+#: builtins.c:1344
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -4485,7 +4510,7 @@ msgstr ""
 "    Lệnh này cùng chức năng lệnh tích hợp \"test\", nhưng đối số cuối\n"
 "    cùng phải là ký tự “]” để khớp với “[” ở đầu."
 
-#: builtins.c:1352
+#: builtins.c:1353
 msgid ""
 "Display process times.\n"
 "    \n"
@@ -4504,7 +4529,7 @@ msgstr ""
 "    Trạng thái thoát:\n"
 "    Lúc nào cũng thành công."
 
-#: builtins.c:1364
+#: builtins.c:1365
 msgid ""
 "Trap signals and other events.\n"
 "    \n"
@@ -4581,7 +4606,7 @@ msgstr ""
 "    Trả lại thành công trừ phi đưa ra ĐTTH sai hay tùy chọn\n"
 "    sai."
 
-#: builtins.c:1400
+#: builtins.c:1401
 msgid ""
 "Display information about command type.\n"
 "    \n"
@@ -4638,7 +4663,7 @@ msgstr ""
 "    Trả lại thành công nếu tìm thấy tất cả các TÊN; bị lỗi nếu không tìm "
 "thấy."
 
-#: builtins.c:1431
+#: builtins.c:1432
 #, fuzzy
 msgid ""
 "Modify shell resource limits.\n"
@@ -4732,7 +4757,7 @@ msgstr ""
 "    Trạng thái thoát:\n"
 "    Trả lại thành công nếu không đưa ra tùy chọn sai hay có lỗi phát sinh."
 
-#: builtins.c:1482
+#: builtins.c:1483
 msgid ""
 "Display or set file mode mask.\n"
 "    \n"
@@ -4765,7 +4790,7 @@ msgstr ""
 "    Trạng thái thoát:\n"
 "    Trả lại thành công nếu không có CHẾ_ĐỘ sai hay tùy chọn sai."
 
-#: builtins.c:1502
+#: builtins.c:1503
 #, fuzzy
 msgid ""
 "Wait for job completion and return exit status.\n"
@@ -4813,7 +4838,7 @@ msgstr ""
 "    Trả về trạng thái của ID cuối; không thành công nếu ID sai hoặc đưa\n"
 "    ra tùy chọn sai."
 
-#: builtins.c:1533
+#: builtins.c:1534
 msgid ""
 "Wait for process completion and return exit status.\n"
 "    \n"
@@ -4837,7 +4862,7 @@ msgstr ""
 "    Trả lại trạng thái của PID; không thành công nếu PID sai, hoặc nếu\n"
 "    đưa ra tùy chọn sai."
 
-#: builtins.c:1548
+#: builtins.c:1549
 msgid ""
 "Execute commands for each member in a list.\n"
 "    \n"
@@ -4860,7 +4885,7 @@ msgstr ""
 "    Trạng thái thoát:\n"
 "    Trả lại trạng thái của câu lệnh cuối cùng được chạy."
 
-#: builtins.c:1562
+#: builtins.c:1563
 msgid ""
 "Arithmetic for loop.\n"
 "    \n"
@@ -4890,7 +4915,7 @@ msgstr ""
 "    Trạng thái thoát:\n"
 "    Trả lại trạng thái của câu lệnh cuối cùng được chạy."
 
-#: builtins.c:1580
+#: builtins.c:1581
 msgid ""
 "Select words from a list and execute commands.\n"
 "    \n"
@@ -4924,7 +4949,7 @@ msgstr ""
 "    Trạng thái thoát:\n"
 "    Trả lại trạng thái của câu lệnh cuối cùng được chạy."
 
-#: builtins.c:1601
+#: builtins.c:1602
 msgid ""
 "Report time consumed by pipeline's execution.\n"
 "    \n"
@@ -4953,7 +4978,7 @@ msgstr ""
 "    Trạng thái thoát:\n"
 "    Trạng thái trả về là trạng thái trả về của ỐNG-DẪN."
 
-#: builtins.c:1618
+#: builtins.c:1619
 msgid ""
 "Execute commands based on pattern matching.\n"
 "    \n"
@@ -4971,7 +4996,7 @@ msgstr ""
 "    Trạng thái thoát:\n"
 "    Trả lại trạng thái của câu lệnh cuối cùng được chạy."
 
-#: builtins.c:1630
+#: builtins.c:1631
 msgid ""
 "Execute commands based on conditional.\n"
 "    \n"
@@ -5006,12 +5031,14 @@ msgstr ""
 "    Trạng thái thoát:\n"
 "    Trả lại trạng thái của câu lệnh cuối cùng được chạy."
 
-#: builtins.c:1647
+#: builtins.c:1648
+#, fuzzy
 msgid ""
 "Execute commands as long as a test succeeds.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `while' COMMANDS has an exit status of zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS "
+"has\n"
+"    an exit status of zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
@@ -5025,12 +5052,14 @@ msgstr ""
 "    Trạng thái thoát:\n"
 "    Trả lại trạng thái của câu lệnh cuối cùng được chạy."
 
-#: builtins.c:1659
+#: builtins.c:1660
+#, fuzzy
 msgid ""
 "Execute commands as long as a test does not succeed.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `until' COMMANDS has an exit status which is not zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS "
+"has\n"
+"    an exit status which is not zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
@@ -5044,7 +5073,7 @@ msgstr ""
 "    Trạng thái thoát:\n"
 "    Trả lại trạng thái của câu lệnh cuối cùng được chạy."
 
-#: builtins.c:1671
+#: builtins.c:1672
 #, fuzzy
 msgid ""
 "Create a coprocess named NAME.\n"
@@ -5066,7 +5095,7 @@ msgstr ""
 "    Trạng thái thoát:\n"
 "    Trả lại trạng thái thoát của câu LỆNH."
 
-#: builtins.c:1685
+#: builtins.c:1686
 msgid ""
 "Define shell function.\n"
 "    \n"
@@ -5089,7 +5118,7 @@ msgstr ""
 "    Trạng thái thoát:\n"
 "    Trả lại thành công nếu TÊN không phải chỉ đọc."
 
-#: builtins.c:1699
+#: builtins.c:1700
 msgid ""
 "Group commands as a unit.\n"
 "    \n"
@@ -5107,7 +5136,7 @@ msgstr ""
 "    Trạng thái thoát:\n"
 "    Trả lại trạng thái của câu lệnh cuối cùng được chạy."
 
-#: builtins.c:1711
+#: builtins.c:1712
 msgid ""
 "Resume job in foreground.\n"
 "    \n"
@@ -5130,7 +5159,7 @@ msgstr ""
 "    Trạng thái thoát:\n"
 "    Trả lại trạng thái của công việc đã tiếp tục lại."
 
-#: builtins.c:1726
+#: builtins.c:1727
 #, fuzzy
 msgid ""
 "Evaluate arithmetic expression.\n"
@@ -5149,7 +5178,7 @@ msgstr ""
 "    Trạng thái thoát:\n"
 "    Trả lại 1 nếu BTHỨC tính là 0; không thì trả lại 0."
 
-#: builtins.c:1738
+#: builtins.c:1739
 msgid ""
 "Execute conditional command.\n"
 "    \n"
@@ -5198,7 +5227,7 @@ msgstr ""
 "    Trạng thái thoát:\n"
 "    0 hay 1 phụ thuộc vào giá trị của BTHỨC."
 
-#: builtins.c:1764
+#: builtins.c:1765
 msgid ""
 "Common shell variable names and usage.\n"
 "    \n"
@@ -5302,7 +5331,7 @@ msgstr ""
 "    HISTIGNORE\tDanh sách mẫu cách bằng dấu hai chấm dùng để quyết định\n"
 "        \tnhững câu lệnh nào nên được lưu vào danh sách lịch sử.\n"
 
-#: builtins.c:1821
+#: builtins.c:1822
 msgid ""
 "Add directories to stack.\n"
 "    \n"
@@ -5356,7 +5385,7 @@ msgstr ""
 "    Trả lại thành công nếu không đưa ra đối số sai, cũng không sai\n"
 "    chuyển đổi thư mục."
 
-#: builtins.c:1855
+#: builtins.c:1856
 msgid ""
 "Remove directories from stack.\n"
 "    \n"
@@ -5404,7 +5433,7 @@ msgstr ""
 "    Trả lại thành công nếu không đưa ra đối số sai, cũng không sai\n"
 "    chuyển đổi thư mục."
 
-#: builtins.c:1885
+#: builtins.c:1886
 msgid ""
 "Display directory stack.\n"
 "    \n"
@@ -5457,7 +5486,7 @@ msgstr ""
 "    Trạng thái thoát:\n"
 "    Trả về thành công nếu không đưa ra tùy chọn sai hay gặp lỗi."
 
-#: builtins.c:1916
+#: builtins.c:1917
 #, fuzzy
 msgid ""
 "Set and unset shell options.\n"
@@ -5494,7 +5523,8 @@ msgstr ""
 "    Trả lại thành công nếu TÊN_TÙY_CHỌN được bật; không thành công nếu\n"
 "    đưa ra tùy chọn sai hay TÊN_TÙY_CHỌN bị tắt."
 
-#: builtins.c:1937
+#: builtins.c:1938
+#, fuzzy
 msgid ""
 "Formats and prints ARGUMENTS under control of the FORMAT.\n"
 "    \n"
@@ -5517,6 +5547,8 @@ msgid ""
 "    \n"
 "      %b\texpand backslash escape sequences in the corresponding argument\n"
 "      %q\tquote the argument in a way that can be reused as shell input\n"
+"      %Q\tlike %q, but apply any precision to the unquoted argument before\n"
+"    \t\tquoting\n"
 "      %(fmt)T\toutput the date-time string resulting from using FMT as a "
 "format\n"
 "    \t        string for strftime(3)\n"
@@ -5560,7 +5592,7 @@ msgstr ""
 "    Trả lại thành công trừ phi đưa ra tùy chọn sai hay gặp lỗi khi ghi\n"
 "    hay gán."
 
-#: builtins.c:1971
+#: builtins.c:1974
 #, fuzzy
 msgid ""
 "Specify how arguments are to be completed by Readline.\n"
@@ -5612,7 +5644,7 @@ msgstr ""
 "    Trạng thái thoát:\n"
 "    Trả lại thành công nếu không đưa ra tùy chọn sai hay gặp lỗi."
 
-#: builtins.c:2001
+#: builtins.c:2004
 msgid ""
 "Display possible completions depending on the options.\n"
 "    \n"
@@ -5633,7 +5665,7 @@ msgstr ""
 "    Trạng thái thoát:\n"
 "    Trả lại thành công nếu không đưa ra tùy chọn sai hay gặp lỗi."
 
-#: builtins.c:2016
+#: builtins.c:2019
 #, fuzzy
 msgid ""
 "Modify or display completion options.\n"
@@ -5692,7 +5724,7 @@ msgstr ""
 "    Trả lại thành công trừ phi đưa ra tùy chọn sai, hoặc TÊN có một\n"
 "    đặc tả tự hoàn thiện được xác định."
 
-#: builtins.c:2047
+#: builtins.c:2050
 msgid ""
 "Read lines from the standard input into an indexed array variable.\n"
 "    \n"
@@ -5765,7 +5797,7 @@ msgstr ""
 "    Trả lại thành công trừ phi đưa ra tùy chọn sai và MẢNG không phải\n"
 "    chỉ đọc hay không là một mảng chỉ số."
 
-#: builtins.c:2083
+#: builtins.c:2086
 msgid ""
 "Read lines from a file into an array variable.\n"
 "    \n"
@@ -5775,6 +5807,10 @@ msgstr ""
 "    \n"
 "    Giống với “mapfile”."
 
+#, c-format
+#~ msgid "%s: invalid associative array key"
+#~ msgstr "%s: khóa mảng liên kết không hợp lệ"
+
 #, fuzzy
 #~ msgid "Copyright (C) 2019 Free Software Foundation, Inc."
 #~ msgstr "Tác quyền (C) năm 2015 của Tổ chức Quỹ Phần mềm Tự do, Inc."
index 6d2dc9f92280a3857cba3b92576b27e2c04c40a1..e3171aefc5079f3bf9c1c4030a40f2366f195a21 100644 (file)
Binary files a/po/zh_CN.gmo and b/po/zh_CN.gmo differ
index 4477a81246b8efc496d31e2b3073b5cb44b5585b..1869a358df0c33857b300eebab72aff7fb888055 100644 (file)
 # liushuyu <liushuyu011@gmail.com>, 2016.
 # Mingye Wang <arthur200126@gmail.com>, 2015, 2016.
 # Boyuan Yang <073plan@gmail.com>, 2018, 2019, 2020.
+# Wenbin Lv <wenbin816@gmail.com>, 2021, 2022.
 #
-# KNOWN DEFECTS (easy fixes, tedious work; sorted by priority):
-#  0. Translation coverage when upstream sends new strings.
+# 本翻译目前采用的格式约定,和其他注意事项:
 #
-#  1. Argument lists in `help` are translated, but the `help blah` text still
-#     refers to the original name like WORDS.
-#
-#     These long helps should be changed to follow their `help` synopsis.  Use
-#     <参数> to refer to `参数' in the one-line synopsis.
-#
-#  2. Passive voice.  When used inappropriately, they sound even worse in
-#     Chinese than in English.  In fact huge amounts of `被' is what you use to
-#     spot translated text.  (You don't always need `被' for passive voice
-#     either.)
-#
-#  3. Typography.
-#     a. Capitalization.  English convensions mangle command names in help text
-#        if it's the first word of the sentense (e.g. `Getopts blah blah...').
-#        Do yourself a favor and change the names back into lowercase.
-#     b. Quotes.  Chinese has no `typewriter quote' convension, and standard
-#        “curly quotes” should be used.
-#     c. Colons.  We don't use `: ` in Chinese; use `:`.  Sometimes `:` is seen
-#        w/o a space (worse).
-#     d. Other stuff like parentheses and whitespace.  Alignment can be quite
-#        important for Feeling Good(TM).
+# 1. 冒号:冒号左边最近的分句含有中文字符时,使用中文冒号,否则使用英文冒号。
+# 2. 引号:永远使用 " ",除非被引用的字符是 " 或 ',此时保留原文(一般是 ` ')。
+# 3. 括号:括号内含有中文字符时,使用中文括号,否则使用英文括号。
+# 4. 命令帮助中,单行用法里的可替换词语(如“名称”)在完整帮助中应写成 <名称>,
+#    尖括号两边按照英文括号的原则加空格。
+# 5. 注意统一术语,不确定的术语先搜索此文件看看。新术语强烈推荐“术语在线”网站。
+# 6. 经常查看上下文(源代码)对翻译的正确率很有帮助。
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: bash 5.1\n"
+"Project-Id-Version: bash 5.2-rc1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-11-28 12:51-0500\n"
-"PO-Revision-Date: 2020-12-07 22:28-0500\n"
-"Last-Translator: Boyuan Yang <073plan@gmail.com>\n"
+"POT-Creation-Date: 2022-01-11 14:50-0500\n"
+"PO-Revision-Date: 2022-06-18 14:25+0800\n"
+"Last-Translator: Wenbin Lv <wenbin816@gmail.com>\n"
 "Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
 "Language: zh_CN\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Poedit 2.4.2\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"X-Generator: Poedit 3.1\n"
 
 #: arrayfunc.c:66
 msgid "bad array subscript"
 msgstr "数组下标不正确"
 
-#: arrayfunc.c:421 builtins/declare.def:638 variables.c:2274 variables.c:2300
-#: variables.c:3133
+#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268
+#: variables.c:3101
 #, c-format
 msgid "%s: removing nameref attribute"
-msgstr "%s正在移除名称引用属性"
+msgstr "%s正在移除名称引用属性"
 
-#: arrayfunc.c:446 builtins/declare.def:851
+#: arrayfunc.c:496 builtins/declare.def:868
 #, c-format
 msgid "%s: cannot convert indexed to associative array"
-msgstr "%s:无法将索引数组转化为关联数组"
+msgstr "%s: 无法将索引数组转换为关联数组"
 
-#: arrayfunc.c:700
-#, c-format
-msgid "%s: invalid associative array key"
-msgstr "%s:无效的关联数组键"
-
-#: arrayfunc.c:702
+#: arrayfunc.c:777
 #, c-format
 msgid "%s: cannot assign to non-numeric index"
-msgstr "%s:无法为非数字的索引赋值"
+msgstr "%s: 无法为非数值的索引赋值"
 
-#: arrayfunc.c:747
+#: arrayfunc.c:822
 #, c-format
 msgid "%s: %s: must use subscript when assigning associative array"
-msgstr "%s:%s:为关联数组赋值时必须使用下标"
+msgstr "%s: %s: 为关联数组赋值时必须使用下标"
 
-#: bashhist.c:452
+#: bashhist.c:455
 #, c-format
 msgid "%s: cannot create: %s"
-msgstr "%s:无法创建: %s"
+msgstr "%s: 无法创建:%s"
 
-#: bashline.c:4310
+#: bashline.c:4479
 msgid "bash_execute_unix_command: cannot find keymap for command"
-msgstr "bash_execute_unix_command: 无法为命令找到键映射"
+msgstr "bash_execute_unix_command: 无法找到命令的键映射"
 
-#: bashline.c:4459
+# 为了可读性,不改动外层引号
+#: bashline.c:4637
 #, c-format
 msgid "%s: first non-whitespace character is not `\"'"
-msgstr "%s:第一个非空字符不是“\"”"
+msgstr "%s: 第一个非空白字符不是 `\"'"
 
-#: bashline.c:4488
+# %c == ' 或 ",为了可读性,不改动外层引号
+#: bashline.c:4666
 #, c-format
 msgid "no closing `%c' in %s"
-msgstr "%2$s 中没有闭合的“%1$c”"
+msgstr "%2$s 中没有右 `%1$c'"
 
-#: bashline.c:4519
+#: bashline.c:4697
 #, c-format
 msgid "%s: missing colon separator"
-msgstr "%s缺少冒号分隔符"
+msgstr "%s缺少冒号分隔符"
 
-#: bashline.c:4555
-#, fuzzy, c-format
-#| msgid "`%s': cannot unbind"
+#: bashline.c:4733
+#, c-format
 msgid "`%s': cannot unbind in command keymap"
-msgstr "“%s”: 无法解除绑定"
+msgstr "\"%s\": 无法解除绑定命令键映射"
 
 #: braces.c:327
 #, c-format
@@ -124,12 +106,12 @@ msgstr "大括号展开:为 %u 个元素分配内存失败"
 #: braces.c:451
 #, c-format
 msgid "brace expansion: failed to allocate memory for `%s'"
-msgstr "大括号展开:为“%s”分配内存失败"
+msgstr "大括号展开:为 \"%s\"分配内存失败"
 
-#: builtins/alias.def:131 variables.c:1844
+#: builtins/alias.def:131 variables.c:1817
 #, c-format
 msgid "`%s': invalid alias name"
-msgstr "“%s”: 无效的别名"
+msgstr "\"%s\": 无效的别名"
 
 #: builtins/bind.def:122 builtins/bind.def:125
 msgid "line editing not enabled"
@@ -138,17 +120,17 @@ msgstr "未启用行编辑"
 #: builtins/bind.def:212
 #, c-format
 msgid "`%s': invalid keymap name"
-msgstr "“%s”: 无效的键映射名"
+msgstr "\"%s\": 无效的键映射名"
 
 #: builtins/bind.def:252
 #, c-format
 msgid "%s: cannot read: %s"
-msgstr "%s:无法读取: %s"
+msgstr "%s: 无法读取:%s"
 
 #: builtins/bind.def:328 builtins/bind.def:358
 #, c-format
 msgid "`%s': unknown function name"
-msgstr "“%s”: 未知函数名"
+msgstr "\"%s\": 未知的函数名"
 
 #: builtins/bind.def:336
 #, c-format
@@ -159,12 +141,12 @@ msgstr "%s 未与任何键绑定。\n"
 #: builtins/bind.def:340
 #, c-format
 msgid "%s can be invoked via "
-msgstr "%s å\8f¯ä»¥è¢«è°\83ç\94¨ï¼\8cé\80\9aè¿\87 "
+msgstr "%s å·²è¢«ç»\91å®\9aå\88° "
 
 #: builtins/bind.def:378 builtins/bind.def:395
 #, c-format
 msgid "`%s': cannot unbind"
-msgstr "“%s”: 无法解除绑定"
+msgstr "\"%s\": 无法解除绑定"
 
 #: builtins/break.def:77 builtins/break.def:119
 msgid "loop count"
@@ -172,23 +154,9 @@ msgstr "循环计数"
 
 #: builtins/break.def:139
 msgid "only meaningful in a `for', `while', or `until' loop"
-msgstr "仅在 `for', `while', 或者`until' 循环中有意义"
+msgstr "仅在 \"for\"、\"while\" 或者 \"until\" 循环中有意义"
 
 #: builtins/caller.def:136
-#, fuzzy
-#| msgid ""
-#| "Return the context of the current subroutine call.\n"
-#| "    \n"
-#| "    Without EXPR, returns \"$line $filename\".  With EXPR, returns\n"
-#| "    \"$line $subroutine $filename\"; this extra information can be used to\n"
-#| "    provide a stack trace.\n"
-#| "    \n"
-#| "    The value of EXPR indicates how many call frames to go back before the\n"
-#| "    current one; the top frame is frame 0.\n"
-#| "    \n"
-#| "    Exit Status:\n"
-#| "    Returns 0 unless the shell is not executing a shell function or EXPR\n"
-#| "    is invalid."
 msgid ""
 "Returns the context of the current subroutine call.\n"
 "    \n"
@@ -199,30 +167,25 @@ msgid ""
 "    The value of EXPR indicates how many call frames to go back before the\n"
 "    current one; the top frame is frame 0."
 msgstr ""
-"返回当前子调用的上下文。\n"
-"    \n"
-"    不带有 EXPR 时,返回 \"$line $filename\"。带有 EXPR 时,返回\n"
-"    \"$line $subroutine $filename\";这个额外的信息可以被用于提供\n"
-"    栈追踪。\n"
+"返回当前子例程调用的上下文。\n"
 "    \n"
-"    EXPR 的值 显示了到当前调用帧需要回去多少个调用帧;顶部帧\n"
-"    是第 0 帧。\n"
+"    不带有 <表达式> 时,返回 \"$line $filename\"。带有 <表达式> 时,\n"
+"    返回 \"$line $subroutine $filename\";这个额外的信息可以用来提供\n"
+"    栈跟踪 (stack trace)。\n"
 "    \n"
-"    退出状态:\n"
-"    除非 shell 不在执行一个 shell 函数或者 EXPR 无效,否则返回结\n"
-"    果为0。"
+"    <表达式> 的值表示从当前调用帧需要回去多少个调用帧;栈顶帧是第 0 帧。"
 
 #: builtins/cd.def:327
 msgid "HOME not set"
 msgstr "HOME 未设定"
 
-#: builtins/cd.def:335 builtins/common.c:161 test.c:901
+#: builtins/cd.def:335 builtins/common.c:161 test.c:916
 msgid "too many arguments"
 msgstr "参数太多"
 
 #: builtins/cd.def:342
 msgid "null directory"
-msgstr "空目录"
+msgstr "空目录"
 
 #: builtins/cd.def:353
 msgid "OLDPWD not set"
@@ -241,37 +204,37 @@ msgstr "警告:"
 #: builtins/common.c:148
 #, c-format
 msgid "%s: usage: "
-msgstr "%s用法:"
+msgstr "%s用法:"
 
-#: builtins/common.c:193 shell.c:516 shell.c:844
+#: builtins/common.c:193 shell.c:524 shell.c:866
 #, c-format
 msgid "%s: option requires an argument"
-msgstr "%s选项需要一个参数"
+msgstr "%s选项需要一个参数"
 
 #: builtins/common.c:200
 #, c-format
 msgid "%s: numeric argument required"
-msgstr "%s:需要数字参数"
+msgstr "%s: 需要数值参数"
 
 #: builtins/common.c:207
 #, c-format
 msgid "%s: not found"
-msgstr "%s未找到"
+msgstr "%s未找到"
 
-#: builtins/common.c:216 shell.c:857
+#: builtins/common.c:216 shell.c:879
 #, c-format
 msgid "%s: invalid option"
-msgstr "%s:无效选项"
+msgstr "%s: 无效的选项"
 
 #: builtins/common.c:223
 #, c-format
 msgid "%s: invalid option name"
-msgstr "%s无效的选项名"
+msgstr "%s无效的选项名"
 
-#: builtins/common.c:230 execute_cmd.c:2373 general.c:368 general.c:373
+#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373
 #, c-format
 msgid "`%s': not a valid identifier"
-msgstr "“%s”: 不是有效的标识符"
+msgstr "\"%s\": 不是有效的标识符"
 
 #: builtins/common.c:240
 msgid "invalid octal number"
@@ -281,237 +244,241 @@ msgstr "无效的八进制数"
 msgid "invalid hex number"
 msgstr "无效的十六进制数"
 
-#: builtins/common.c:244 expr.c:1569
+#: builtins/common.c:244 expr.c:1574
 msgid "invalid number"
-msgstr "无效数字"
+msgstr "无效数字"
 
 #: builtins/common.c:252
 #, c-format
 msgid "%s: invalid signal specification"
-msgstr "%s:无效的信号声明"
+msgstr "%s: 无效的信号说明符"
 
 #: builtins/common.c:259
 #, c-format
 msgid "`%s': not a pid or valid job spec"
-msgstr "“%s”: 不是有效的进程号或者任务声明"
+msgstr "\"%s\": 不是一个 pid 或有效的任务说明符"
 
-#: builtins/common.c:266 error.c:510
+#: builtins/common.c:266 error.c:536
 #, c-format
 msgid "%s: readonly variable"
-msgstr "%s:只读变量"
+msgstr "%s: 只读变量"
+
+#: builtins/common.c:273
+#, c-format
+msgid "%s: cannot assign"
+msgstr "%s: 无法赋值"
 
-#: builtins/common.c:274
+#: builtins/common.c:281
 #, c-format
 msgid "%s: %s out of range"
-msgstr "%s:%s 越界"
+msgstr "%s: %s超出范围"
 
-#: builtins/common.c:274 builtins/common.c:276
+#: builtins/common.c:281 builtins/common.c:283
 msgid "argument"
 msgstr "参数"
 
-#: builtins/common.c:276
+#: builtins/common.c:283
 #, c-format
 msgid "%s out of range"
-msgstr "%s 越界"
+msgstr "%s超出范围"
 
-#: builtins/common.c:284
+#: builtins/common.c:291
 #, c-format
 msgid "%s: no such job"
-msgstr "%s无此任务"
+msgstr "%s无此任务"
 
-#: builtins/common.c:292
+#: builtins/common.c:299
 #, c-format
 msgid "%s: no job control"
-msgstr "%s无任务控制"
+msgstr "%s无任务控制"
 
-#: builtins/common.c:294
+#: builtins/common.c:301
 msgid "no job control"
 msgstr "无任务控制"
 
-#: builtins/common.c:304
+#: builtins/common.c:311
 #, c-format
 msgid "%s: restricted"
-msgstr "%s:受限的"
+msgstr "%s: 受限"
 
-#: builtins/common.c:306
+#: builtins/common.c:313
 msgid "restricted"
-msgstr "受限"
+msgstr "受限"
 
-#: builtins/common.c:314
+#: builtins/common.c:321
 #, c-format
 msgid "%s: not a shell builtin"
-msgstr "%s不是 shell 内建"
+msgstr "%s不是 shell 内建"
 
-#: builtins/common.c:323
+#: builtins/common.c:330
 #, c-format
 msgid "write error: %s"
-msgstr "写错误: %s"
+msgstr "写入错误:%s"
 
-#: builtins/common.c:331
+#: builtins/common.c:338
 #, c-format
 msgid "error setting terminal attributes: %s"
-msgstr "设定终端属性时出错%s"
+msgstr "设定终端属性时出错%s"
 
-#: builtins/common.c:333
+#: builtins/common.c:340
 #, c-format
 msgid "error getting terminal attributes: %s"
-msgstr "获取终端属性时出错%s"
+msgstr "获取终端属性时出错%s"
 
-#: builtins/common.c:635
+#: builtins/common.c:642
 #, c-format
 msgid "%s: error retrieving current directory: %s: %s\n"
-msgstr "%s:获取当前目录时出错: %s:%s\n"
+msgstr "%s: 获取当前目录时出错:%s:%s\n"
 
-#: builtins/common.c:701 builtins/common.c:703
+#: builtins/common.c:708 builtins/common.c:710
 #, c-format
 msgid "%s: ambiguous job spec"
-msgstr "%s:模糊的任务声明"
+msgstr "%s: 有歧义的任务说明符"
 
-#: builtins/common.c:964
+#: builtins/common.c:971
 msgid "help not available in this version"
-msgstr "此版本内帮助不可用"
+msgstr "帮助在当前版本中不可用"
 
-#: builtins/common.c:1008 builtins/set.def:953 variables.c:3839
+#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825
 #, c-format
 msgid "%s: cannot unset: readonly %s"
-msgstr "%s:无法取消设定: 只读 %s"
+msgstr "%s: 无法取消设定:只读%s"
 
-#: builtins/common.c:1013 builtins/set.def:932 variables.c:3844
+#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830
 #, c-format
 msgid "%s: cannot unset"
-msgstr "%s无法取消设定"
+msgstr "%s无法取消设定"
 
 #: builtins/complete.def:287
 #, c-format
 msgid "%s: invalid action name"
-msgstr "%s无效的动作名"
+msgstr "%s无效的动作名"
 
-#: builtins/complete.def:486 builtins/complete.def:634
-#: builtins/complete.def:865
+#: builtins/complete.def:486 builtins/complete.def:642
+#: builtins/complete.def:873
 #, c-format
 msgid "%s: no completion specification"
-msgstr "%s:没有补全声明"
+msgstr "%s: 没有补全规约"
 
-#: builtins/complete.def:688
+#: builtins/complete.def:696
 msgid "warning: -F option may not work as you expect"
-msgstr "警告-F 选项可能不像您预期的那样工作"
+msgstr "警告-F 选项可能不像您预期的那样工作"
 
-#: builtins/complete.def:690
+#: builtins/complete.def:698
 msgid "warning: -C option may not work as you expect"
-msgstr "警告-C 选项可能不像您预期的那样工作"
+msgstr "警告-C 选项可能不像您预期的那样工作"
 
-#: builtins/complete.def:838
+#: builtins/complete.def:846
 msgid "not currently executing completion function"
-msgstr "当前未执行补全功能"
+msgstr "当前未在执行补全函数"
 
-#: builtins/declare.def:134
+#: builtins/declare.def:137
 msgid "can only be used in a function"
 msgstr "只能在函数中使用"
 
-#: builtins/declare.def:363 builtins/declare.def:756
+#: builtins/declare.def:437
+msgid "cannot use `-f' to make functions"
+msgstr "无法用 \"-f\" 生成函数"
+
+#: builtins/declare.def:464 execute_cmd.c:6132
+#, c-format
+msgid "%s: readonly function"
+msgstr "%s: 只读函数"
+
+#: builtins/declare.def:521 builtins/declare.def:804
 #, c-format
 msgid "%s: reference variable cannot be an array"
-msgstr "%s引用变量不能为数组"
+msgstr "%s引用变量不能为数组"
 
-#: builtins/declare.def:374 variables.c:3385
+#: builtins/declare.def:532 variables.c:3359
 #, c-format
 msgid "%s: nameref variable self references not allowed"
-msgstr "%s不允许名称引用变量引用自身"
+msgstr "%s不允许名称引用变量引用自身"
 
-#: builtins/declare.def:379 variables.c:2104 variables.c:3304 variables.c:3312
-#: variables.c:3382
+#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286
+#: variables.c:3356
 #, c-format
 msgid "%s: circular name reference"
-msgstr "%s:循环变量名引用"
+msgstr "%s: 循环的名称引用"
 
-#: builtins/declare.def:384 builtins/declare.def:762 builtins/declare.def:773
+#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820
 #, c-format
 msgid "`%s': invalid variable name for name reference"
-msgstr "“%s”: 无效的名称引用变量名"
-
-#: builtins/declare.def:514
-msgid "cannot use `-f' to make functions"
-msgstr "无法用 `-f' 生成函数"
-
-#: builtins/declare.def:526 execute_cmd.c:5986
-#, c-format
-msgid "%s: readonly function"
-msgstr "%s:只读函数"
+msgstr "\"%s\": 名称引用变量引用的变量名无效"
 
-#: builtins/declare.def:824
-#, c-format
-msgid "%s: quoted compound array assignment deprecated"
-msgstr "%s:引号内的复合数组赋值已被弃用"
-
-#: builtins/declare.def:838
+#: builtins/declare.def:856
 #, c-format
 msgid "%s: cannot destroy array variables in this way"
-msgstr "%s无法以这种方式销毁数组变量"
+msgstr "%s无法以这种方式销毁数组变量"
 
-#: builtins/declare.def:845 builtins/read.def:815
+#: builtins/declare.def:862 builtins/read.def:887
 #, c-format
 msgid "%s: cannot convert associative to indexed array"
-msgstr "%s:无法将关联数组转化为索引数组"
+msgstr "%s: 无法将关联数组转换为索引数组"
+
+#: builtins/declare.def:891
+#, c-format
+msgid "%s: quoted compound array assignment deprecated"
+msgstr "%s: 带引号的复合数组赋值已被弃用"
 
-#: builtins/enable.def:143 builtins/enable.def:151
+#: builtins/enable.def:145 builtins/enable.def:153
 msgid "dynamic loading not available"
 msgstr "动态加载不可用"
 
-#: builtins/enable.def:343
+#: builtins/enable.def:376
 #, c-format
 msgid "cannot open shared object %s: %s"
-msgstr "无法打开共享对象 %s:%s"
+msgstr "无法打开共享目标 %s:%s"
 
-#: builtins/enable.def:371
+#: builtins/enable.def:405
 #, c-format
 msgid "cannot find %s in shared object %s: %s"
-msgstr "无法在共享对象 %2$s 中找到 %1$s: %3$s"
+msgstr "无法在共享目标 %2$s 中找到 %1$s:%3$s"
 
-#: builtins/enable.def:388
-#, fuzzy, c-format
-#| msgid "%s: not dynamically loaded"
+#: builtins/enable.def:422
+#, c-format
 msgid "%s: dynamic builtin already loaded"
-msgstr "%sï¼\9aæ\9cªä»¥å\8a¨æ\80\81æ\96¹å¼\8få\8a è½½"
+msgstr "%s: å\8a¨æ\80\81å\86\85建已ç»\8få\8a è½½"
 
-#: builtins/enable.def:392
+#: builtins/enable.def:426
 #, c-format
 msgid "load function for %s returns failure (%d): not loaded"
-msgstr "为 %s 载入函数失败 (%d): 未载入"
+msgstr "%s 的加载函数返回失败 (%d):未加载"
 
-#: builtins/enable.def:517
+#: builtins/enable.def:551
 #, c-format
 msgid "%s: not dynamically loaded"
-msgstr "%s:未以动态方式加载"
+msgstr "%s: 未动态加载"
 
-#: builtins/enable.def:543
+#: builtins/enable.def:577
 #, c-format
 msgid "%s: cannot delete: %s"
-msgstr "%s:无法删除: %s"
+msgstr "%s: 无法删除:%s"
 
-#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5818
+#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959
 #, c-format
 msgid "%s: is a directory"
-msgstr "%s是一个目录"
+msgstr "%s是一个目录"
 
 #: builtins/evalfile.c:144
 #, c-format
 msgid "%s: not a regular file"
-msgstr "%s:不是常规文件"
+msgstr "%s: 不是普通文件"
 
 #: builtins/evalfile.c:153
 #, c-format
 msgid "%s: file is too large"
-msgstr "%s文件太大"
+msgstr "%s文件太大"
 
-#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1647
+#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673
 #, c-format
 msgid "%s: cannot execute binary file"
-msgstr "%s无法执行二进制文件"
+msgstr "%s无法执行二进制文件"
 
 #: builtins/exec.def:158 builtins/exec.def:160 builtins/exec.def:246
 #, c-format
 msgid "%s: cannot execute: %s"
-msgstr "%s:无法执行: %s"
+msgstr "%s: 无法执行:%s"
 
 #: builtins/exit.def:64
 #, c-format
@@ -520,12 +487,12 @@ msgstr "注销\n"
 
 #: builtins/exit.def:89
 msgid "not login shell: use `exit'"
-msgstr "不是登录 shell: 使用 `exit'"
+msgstr "不是登录 shell:使用 \"exit\""
 
 #: builtins/exit.def:121
 #, c-format
 msgid "There are stopped jobs.\n"
-msgstr "有停止的任务。\n"
+msgstr "æ\9c\89å·²å\81\9cæ­¢ç\9a\84ä»»å\8a¡ã\80\82\n"
 
 #: builtins/exit.def:123
 #, c-format
@@ -539,12 +506,12 @@ msgstr "未找到命令"
 #: builtins/fc.def:363 builtins/fc.def:368 builtins/fc.def:407
 #: builtins/fc.def:412
 msgid "history specification"
-msgstr "历史声明"
+msgstr "历史说明符"
 
 #: builtins/fc.def:444
 #, c-format
 msgid "%s: cannot open temp file: %s"
-msgstr "%s:无法打开临时文件: %s"
+msgstr "%s: 无法打开临时文件:%s"
 
 #: builtins/fg_bg.def:152 builtins/jobs.def:284
 msgid "current"
@@ -558,12 +525,12 @@ msgstr "在不带任务控制的情况下启动了任务 %d"
 #: builtins/getopt.c:110
 #, c-format
 msgid "%s: illegal option -- %c\n"
-msgstr "%s:非法选项 -- %c\n"
+msgstr "%s: 非法的选项 -- %c\n"
 
 #: builtins/getopt.c:111
 #, c-format
 msgid "%s: option requires an argument -- %c\n"
-msgstr "%s选项需要一个参数 -- %c\n"
+msgstr "%s选项需要一个参数 -- %c\n"
 
 #: builtins/hash.def:91
 msgid "hashing disabled"
@@ -572,7 +539,7 @@ msgstr "已禁用哈希"
 #: builtins/hash.def:139
 #, c-format
 msgid "%s: hash table empty\n"
-msgstr "%s哈希表为空\n"
+msgstr "%s哈希表为空\n"
 
 #: builtins/hash.def:267
 #, c-format
@@ -582,25 +549,27 @@ msgstr "命中\t命令\n"
 #: builtins/help.def:133
 msgid "Shell commands matching keyword `"
 msgid_plural "Shell commands matching keywords `"
-msgstr[0] "Shell 命令匹配关键字“"
+msgstr[0] "匹配关键字 \""
 
 #: builtins/help.def:135
 msgid ""
 "'\n"
 "\n"
 msgstr ""
+"\" 的 shell 命令\n"
+"\n"
 
 #: builtins/help.def:185
 #, c-format
 msgid "no help topics match `%s'.  Try `help help' or `man -k %s' or `info %s'."
-msgstr "没有与“%s”匹配的帮助主题。尝试使用“help help”、“man -k %s”或“info %s”。"
+msgstr "没有与 \"%s\" 匹配的帮助主题。尝试使用 \"help help\" 或 \"man -k %s\" 或 \"info %s\"。"
 
-#: builtins/help.def:224
+#: builtins/help.def:223
 #, c-format
 msgid "%s: cannot open: %s"
-msgstr "%s:无法打开: %s"
+msgstr "%s: 无法打开:%s"
 
-#: builtins/help.def:524
+#: builtins/help.def:523
 #, c-format
 msgid ""
 "These shell commands are defined internally.  Type `help' to see this list.\n"
@@ -611,123 +580,123 @@ msgid ""
 "A star (*) next to a name means that the command is disabled.\n"
 "\n"
 msgstr ""
-"è¿\99äº\9b shell å\91½ä»¤æ\98¯å\86\85é\83¨å®\9aä¹\89ç\9a\84ã\80\82请è¾\93å\85¥ `help' ä»¥è\8e·å\8f\96ä¸\80个列表。\n"
-"输入 `help 名称' 以得到有关函数`名称'的更多信息。\n"
-"使用 `info bash' 来获得关于 shell 的更多一般性信息。\n"
-"使用 `man -k' 或 `info' 来获取不在列表中的命令的更多信息。\n"
+"è¿\99äº\9b shell å\91½ä»¤æ\98¯å\86\85é\83¨å®\9aä¹\89ç\9a\84ã\80\82è¾\93å\85¥ \"help\" ä»¥è\8e·å\8f\96æ\9c¬列表。\n"
+"输入 \"help 名称\" 以得到有关函数 \"名称\" 的更多信息。\n"
+"使用 \"info bash\" 来获得关于 shell 的更多一般性信息。\n"
+"使用 \"man -k\" 或 \"info\" 来获取不在本列表中的命令的更多信息。\n"
 "\n"
-"名称旁边的星号(*)表示该命令被禁用。\n"
+"名称旁边的星号 (*) 表示该命令被禁用。\n"
 "\n"
 
-#: builtins/history.def:155
+#: builtins/history.def:159
 msgid "cannot use more than one of -anrw"
 msgstr "最多只能使用 -anrw 选项中的一个"
 
-#: builtins/history.def:188 builtins/history.def:198 builtins/history.def:213
-#: builtins/history.def:230 builtins/history.def:242 builtins/history.def:249
+#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215
+#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247
 msgid "history position"
 msgstr "历史位置"
 
-#: builtins/history.def:340
+#: builtins/history.def:338
 #, c-format
 msgid "%s: invalid timestamp"
-msgstr "%s:无效时间戳"
+msgstr "%s: 无效的时间戳"
 
-#: builtins/history.def:451
+#: builtins/history.def:449
 #, c-format
 msgid "%s: history expansion failed"
-msgstr "%s:历史扩展失败"
+msgstr "%s: 历史展开失败"
 
 #: builtins/inlib.def:71
 #, c-format
 msgid "%s: inlib failed"
-msgstr "%sinlib 失败"
+msgstr "%sinlib 失败"
 
 #: builtins/jobs.def:109
 msgid "no other options allowed with `-x'"
-msgstr "其他选项不能与 `-x' 同时使用"
+msgstr "其他选项不能与 \"-x\" 同时使用"
 
 #: builtins/kill.def:211
 #, c-format
 msgid "%s: arguments must be process or job IDs"
-msgstr "%s参数必须是进程或任务 ID"
+msgstr "%s参数必须是进程或任务 ID"
 
 #: builtins/kill.def:274
 msgid "Unknown error"
 msgstr "未知错误"
 
-#: builtins/let.def:97 builtins/let.def:122 expr.c:639 expr.c:657
+#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658
 msgid "expression expected"
 msgstr "需要表达式"
 
-#: builtins/mapfile.def:178
+#: builtins/mapfile.def:180
 #, c-format
 msgid "%s: not an indexed array"
-msgstr "%s不是一个索引数组"
+msgstr "%s不是一个索引数组"
 
-#: builtins/mapfile.def:271 builtins/read.def:308
+#: builtins/mapfile.def:276 builtins/read.def:336
 #, c-format
 msgid "%s: invalid file descriptor specification"
-msgstr "%s:无效的文件描述符声明"
+msgstr "%s: 指定的文件描述符无效"
 
-#: builtins/mapfile.def:279 builtins/read.def:315
+#: builtins/mapfile.def:284 builtins/read.def:343
 #, c-format
 msgid "%d: invalid file descriptor: %s"
-msgstr "%d: 无效的文件描述符%s"
+msgstr "%d: 无效的文件描述符%s"
 
-#: builtins/mapfile.def:288 builtins/mapfile.def:326
+#: builtins/mapfile.def:293 builtins/mapfile.def:331
 #, c-format
 msgid "%s: invalid line count"
-msgstr "%s无效的行数"
+msgstr "%s无效的行数"
 
-#: builtins/mapfile.def:299
+#: builtins/mapfile.def:304
 #, c-format
 msgid "%s: invalid array origin"
-msgstr "%s:无效的数组基数"
+msgstr "%s: 无效的数组起始"
 
-#: builtins/mapfile.def:316
+#: builtins/mapfile.def:321
 #, c-format
 msgid "%s: invalid callback quantum"
-msgstr "%s:无效的回调量子"
+msgstr "%s: 无效的回调间隔"
 
-#: builtins/mapfile.def:349
+#: builtins/mapfile.def:354
 msgid "empty array variable name"
-msgstr "空数组变量名"
+msgstr "空数组变量名"
 
-#: builtins/mapfile.def:370
+#: builtins/mapfile.def:375
 msgid "array variable support required"
 msgstr "需要数组变量支持"
 
-#: builtins/printf.def:419
+#: builtins/printf.def:430
 #, c-format
 msgid "`%s': missing format character"
-msgstr "“%s”: 缺少格式字符"
+msgstr "\"%s\": 缺少格式字符"
 
-#: builtins/printf.def:474
+#: builtins/printf.def:485
 #, c-format
 msgid "`%c': invalid time format specification"
-msgstr "“%c”:无效的时间格式声明"
+msgstr "\"%c\": 指定的时间格式无效"
 
-#: builtins/printf.def:676
+#: builtins/printf.def:708
 #, c-format
 msgid "`%c': invalid format character"
-msgstr "“%c”:无效格式字符"
+msgstr "\"%c\": 无效的格式字符"
 
-#: builtins/printf.def:702
+#: builtins/printf.def:734
 #, c-format
 msgid "warning: %s: %s"
-msgstr "警告: %s:%s"
+msgstr "警告:%s: %s"
 
-#: builtins/printf.def:788
+#: builtins/printf.def:822
 #, c-format
 msgid "format parsing problem: %s"
-msgstr "格式解析问题: %s"
+msgstr "格式解析出现问题:%s"
 
-#: builtins/printf.def:885
+#: builtins/printf.def:919
 msgid "missing hex digit for \\x"
-msgstr "使用了 \\x 但缺少十六进制"
+msgstr "使用了 \\x 但缺少十六进制"
 
-#: builtins/printf.def:900
+#: builtins/printf.def:934
 #, c-format
 msgid "missing unicode digit for \\%c"
 msgstr "使用了 \\%c 但缺少 unicode 数"
@@ -739,7 +708,7 @@ msgstr "无其他目录"
 #: builtins/pushd.def:360
 #, c-format
 msgid "%s: invalid argument"
-msgstr "%s:无效参数"
+msgstr "%s: 无效的参数"
 
 #: builtins/pushd.def:480
 msgid "<no current directory>"
@@ -774,24 +743,22 @@ msgid ""
 "      -N\tDisplays the Nth entry counting from the right of the list shown by\n"
 "\tdirs when invoked without options, starting with zero."
 msgstr ""
-"显示当前记住的目录列表。 目录\n"
-"    通过 `pushd' 命令加入这个列表;您可以\n"
-"    使用 `popd' 命令对列表进行遍历。\n"
-"    \n"
-"    选项:\n"
-"      -c\t删除所有元素以清除目录栈\n"
-"      -l\t不打印与家目录相关的以波浪号\n"
-"    \t为前缀的目录\n"
+"显示当前记住的目录列表。 使用 \"pushd\" 命令将目录加入这个列表;\n"
+"    使用 \"popd\" 命令逐个回到之前加入列表的目录。\n"
+"    \n"
+"    选项:\n"
+"      -c\t删除所有元素以清空目录栈\n"
+"      -l\t打印目录时,不表示为以波浪号 (~) 为前缀的,\n"
+"    \t相对于您的主目录的路径\n"
 "      -p\t每行一个条目打印目录栈\n"
-"      -v\t以栈位置为前缀,每行一个条目\n"
-"    \t打印目录栈\n"
+"      -v\t每行一个条目打印目录栈,前面加上在栈中的位置\n"
 "    \n"
-"    参数:\n"
-"      +N\t以 dirs 不带选项输出的顺序显示列表从左起第N个条目,\n"
-"    \t从 0 开始。\n"
+"    参数\n"
+"      +N\t显示 dirs 不带选项启动时显示的目录列表中左起第 N 个目录,\n"
+"    \t从开始。\n"
 "    \n"
-"      -N\t以 dirs 不带选项输出的顺序显示列表从右起第N个项目,\n"
-"\t从 0 开始。"
+"      -N\t显示 dirs 不带选项启动时显示的目录列表中右起第 N 个目录,\n"
+"    \t从零开始。"
 
 #: builtins/pushd.def:723
 msgid ""
@@ -817,27 +784,23 @@ msgid ""
 "    \n"
 "    The `dirs' builtin displays the directory stack."
 msgstr ""
-"在目录栈顶部加入一个目录,或者论询\n"
-"    目录栈,是当前工作目录成为新的栈顶\n"
-"    不带参数时,交换栈顶的两个目录。\n"
+"将目录添加到目录栈顶,或者轮转栈直到当前工作目录成为\n"
+"    新的栈顶。不带参数时,交换栈顶的两个目录。\n"
 "    \n"
 "    选项:\n"
-"      -n\t抑制增加栈中目录时通常的改变目录的操作,\n"
-"    \t从而只进行栈操作。\n"
+"      -n\t阻止添加目录至栈时通常的改变目录操作,从而仅对栈\n"
+"    \t进行操作。\n"
 "    \n"
 "    参数:\n"
-"      +N\t轮转栈使得第N个目录(`dirs' 的\n"
-"    \t输出列表中左起,从0开始)\n"
-"    \t升至栈顶。\n"
+"      +N\t轮转栈,使得第 N 个目录(\"dirs\" 显示的列表中左起,\n"
+"    \t从零开始)移动到栈顶。\n"
 "    \n"
-"      -N\t轮转栈使得第N个目录(`dirs' 的\n"
-"    \t输出列表中右起,从0开始)\n"
-"    \t升至栈顶\n"
+"      -N\t轮转栈,使得第 N 个目录(\"dirs\" 显示的列表中右起,\n"
+"    \t从零开始)移动到栈顶。\n"
 "    \n"
-"      dir\t添加目录至栈顶,并\n"
-"    \t使其成为新的当前工作目录。\n"
+"      目录\t将 <目录> 添加到栈顶,使其成为当前工作目录。\n"
 "    \n"
-"    `dirs' 内建命令显示目录栈."
+"    \"dirs\" 内建可以显示目录栈。"
 
 #: builtins/pushd.def:748
 msgid ""
@@ -859,69 +822,65 @@ msgid ""
 "    \n"
 "    The `dirs' builtin displays the directory stack."
 msgstr ""
-"从目录栈中删除条目。不带参数时,删除\n"
-"    栈顶目录并改变至新的栈顶目录。\n"
+"从目录栈中删除条目。不带参数时,删除栈顶目录,并改变目录至新的栈顶目录。\n"
 "    \n"
 "    选项:\n"
-"      -n\t抑制从栈中删除目录时通常的改变目录操作,\n"
-"    \t从而只进行栈操作。\n"
+"      -n\t阻止从栈中删除目录时通常的改变目录操作,从而仅对栈进行操作。\n"
 "    \n"
 "    参数:\n"
-"      +N\t从 `dirs' 输出的列表中,\n"
-"    \t删除左起第N个条目,计数从0开始。例如:`popd +0'\n"
-"    \t删除第一个目录,`popd +1' 删除第二个。\n"
+"      +N\t删除第 N 个目录(\"dirs\" 显示的列表中左起,从零开始)。\n"
+"    \t例如:\"popd +0\" 删除第一个目录,\"popd +1\" 删除第二个。\n"
 "    \n"
-"      -N\t从 `dirs' 输出的列表中,\n"
-"    \t删除右起第N个条目,计数从0开始,例如:`popd -0'\n"
-"    \t删除最后一个条目,`popd -1' 删除倒数第二个。\n"
+"      -N\t删除第 N 个目录(\"dirs\" 显示的列表中右起,从零开始)。\n"
+"    \t例如:\"popd -0\" 删除最后一个目录,\"popd -1\" 删除倒数第二个。\n"
 "    \n"
-"    `dirs' 内建变量显示目录栈。"
+"    \"dirs\" 内建可以显示目录栈。"
 
-#: builtins/read.def:280
+#: builtins/read.def:308
 #, c-format
 msgid "%s: invalid timeout specification"
-msgstr "%s:无效的超时声明"
+msgstr "%s: 指定的超时时间无效"
 
-#: builtins/read.def:755
+#: builtins/read.def:827
 #, c-format
 msgid "read error: %d: %s"
-msgstr "读错误: %d: %s"
+msgstr "读取错误:%d: %s"
 
 #: builtins/return.def:68
 msgid "can only `return' from a function or sourced script"
-msgstr "只能从函数或者源脚本返回(`return')"
+msgstr "只能在函数或者被 source 的脚本中使用 \"return\""
 
 #: builtins/set.def:869
 msgid "cannot simultaneously unset a function and a variable"
 msgstr "无法同时取消设定一个函数和一个变量"
 
-#: builtins/set.def:966
+#: builtins/set.def:969
 #, c-format
 msgid "%s: not an array variable"
-msgstr "%s不是数组变量"
+msgstr "%s不是数组变量"
 
 #: builtins/setattr.def:189
 #, c-format
 msgid "%s: not a function"
-msgstr "%s不是函数"
+msgstr "%s不是函数"
 
 #: builtins/setattr.def:194
 #, c-format
 msgid "%s: cannot export"
-msgstr "%s无法导出"
+msgstr "%s无法导出"
 
 #: builtins/shift.def:72 builtins/shift.def:79
 msgid "shift count"
-msgstr "ä½\8d移计æ\95°"
+msgstr "移ä½\8d次æ\95°"
 
-#: builtins/shopt.def:310
+#: builtins/shopt.def:323
 msgid "cannot set and unset shell options simultaneously"
 msgstr "无法同时设定和取消设定 shell 选项"
 
-#: builtins/shopt.def:428
+#: builtins/shopt.def:444
 #, c-format
 msgid "%s: invalid shell option name"
-msgstr "%s无效的 shell 选项名"
+msgstr "%s无效的 shell 选项名"
 
 #: builtins/source.def:128
 msgid "filename argument required"
@@ -930,7 +889,7 @@ msgstr "需要文件名参数"
 #: builtins/source.def:154
 #, c-format
 msgid "%s: file not found"
-msgstr "%s:文件未找到"
+msgstr "%s: 未找到文件"
 
 #: builtins/suspend.def:102
 msgid "cannot suspend"
@@ -943,7 +902,7 @@ msgstr "无法挂起一个登录 shell"
 #: builtins/type.def:235
 #, c-format
 msgid "%s is aliased to `%s'\n"
-msgstr "%s 是“%s”的别名\n"
+msgstr "%s 是 \"%s\" 的别名\n"
 
 #: builtins/type.def:256
 #, c-format
@@ -978,26 +937,26 @@ msgstr "%s 已被录入哈希表 (%s)\n"
 #: builtins/ulimit.def:400
 #, c-format
 msgid "%s: invalid limit argument"
-msgstr "%s:无效的 limit 参数"
+msgstr "%s: 无效的限制参数"
 
 #: builtins/ulimit.def:426
 #, c-format
 msgid "`%c': bad command"
-msgstr "“%c”:命令错误"
+msgstr "\"%c\": 错误的命令"
 
-#: builtins/ulimit.def:455
+#: builtins/ulimit.def:464
 #, c-format
 msgid "%s: cannot get limit: %s"
-msgstr "%s:无法获取 limit 值: %s"
+msgstr "%s: 无法获取限制:%s"
 
-#: builtins/ulimit.def:481
+#: builtins/ulimit.def:490
 msgid "limit"
-msgstr "limit"
+msgstr "限制"
 
-#: builtins/ulimit.def:493 builtins/ulimit.def:793
+#: builtins/ulimit.def:502 builtins/ulimit.def:802
 #, c-format
 msgid "%s: cannot modify limit: %s"
-msgstr "%s:无法修改 limit 值: %s"
+msgstr "%s: 无法修改限制:%s"
 
 #: builtins/umask.def:115
 msgid "octal number"
@@ -1006,494 +965,504 @@ msgstr "八进制数"
 #: builtins/umask.def:232
 #, c-format
 msgid "`%c': invalid symbolic mode operator"
-msgstr "“%c”:无效的符号状态运算符"
+msgstr "\"%c\": 无效的符号模式运算符"
 
 #: builtins/umask.def:287
 #, c-format
 msgid "`%c': invalid symbolic mode character"
-msgstr "“%c”:无效的符号状态字符"
+msgstr "\"%c\": 无效的符号模式字符"
 
-#: error.c:89 error.c:347 error.c:349 error.c:351
+#: error.c:89 error.c:373 error.c:375 error.c:377
 msgid " line "
-msgstr ""
+msgstr " 行 "
 
 #: error.c:164
 #, c-format
 msgid "last command: %s\n"
-msgstr "上一个命令%s\n"
+msgstr "上一个命令%s\n"
 
 #: error.c:172
 #, c-format
 msgid "Aborting..."
-msgstr "中止..."
+msgstr "正在中止..."
 
 #. TRANSLATORS: this is a prefix for informational messages.
 #: error.c:287
 #, c-format
 msgid "INFORM: "
-msgstr "报告:"
+msgstr "信息:"
 
-#: error.c:462
+#: error.c:310
+#, c-format
+msgid "DEBUG warning: "
+msgstr "调试警告:"
+
+#: error.c:488
 msgid "unknown command error"
 msgstr "未知的命令错误"
 
-#: error.c:463
+#: error.c:489
 msgid "bad command type"
 msgstr "错误的命令类型"
 
-#: error.c:464
+#: error.c:490
 msgid "bad connector"
 msgstr "错误的条件连接符"
 
-#: error.c:465
+#: error.c:491
 msgid "bad jump"
 msgstr "错误的跳转"
 
-#: error.c:503
+#: error.c:529
 #, c-format
 msgid "%s: unbound variable"
-msgstr "%s未绑定的变量"
+msgstr "%s未绑定的变量"
 
-#: eval.c:242
+#: eval.c:243
 msgid "\atimed out waiting for input: auto-logout\n"
-msgstr "\a 等待输入超时:自动注销\n"
+msgstr "\a等待输入超时:自动注销\n"
 
-#: execute_cmd.c:537
+#: execute_cmd.c:555
 #, c-format
 msgid "cannot redirect standard input from /dev/null: %s"
-msgstr "无法从 /dev/null 重定向标准输入%s"
+msgstr "无法从 /dev/null 重定向标准输入%s"
 
-#: execute_cmd.c:1297
+#: execute_cmd.c:1317
 #, c-format
 msgid "TIMEFORMAT: `%c': invalid format character"
-msgstr "时间格式: `%c': 无效的格式字符"
+msgstr "时间格式:\"%c\": 无效的格式字符"
 
-#: execute_cmd.c:2362
+#: execute_cmd.c:2391
 #, c-format
 msgid "execute_coproc: coproc [%d:%s] still exists"
 msgstr "execute_coproc: 副进程 [%d:%s] 仍然存在"
 
-#: execute_cmd.c:2486
+#: execute_cmd.c:2524
 msgid "pipe error"
 msgstr "管道错误"
 
-#: execute_cmd.c:4793
+#: execute_cmd.c:4923
 #, c-format
 msgid "eval: maximum eval nesting level exceeded (%d)"
 msgstr "eval: 超出最大 eval 嵌套层数 (%d)"
 
-#: execute_cmd.c:4805
+#: execute_cmd.c:4935
 #, c-format
 msgid "%s: maximum source nesting level exceeded (%d)"
-msgstr "%s超出最大 source 嵌套层数 (%d)"
+msgstr "%s超出最大 source 嵌套层数 (%d)"
 
-#: execute_cmd.c:4913
+#: execute_cmd.c:5043
 #, c-format
 msgid "%s: maximum function nesting level exceeded (%d)"
-msgstr "%s超出最大函数嵌套层数 (%d)"
+msgstr "%s超出最大函数嵌套层数 (%d)"
 
-#: execute_cmd.c:5467
+#: execute_cmd.c:5598
 #, c-format
 msgid "%s: restricted: cannot specify `/' in command names"
-msgstr "%s:受限的: 无法在命令名中使用 `/'"
+msgstr "%s: 受限:无法在命令名中使用 \"/\""
 
-#: execute_cmd.c:5574
+#: execute_cmd.c:5715
 #, c-format
 msgid "%s: command not found"
-msgstr "%s未找到命令"
+msgstr "%s未找到命令"
 
-#: execute_cmd.c:5816
+#: execute_cmd.c:5957
 #, c-format
 msgid "%s: %s"
-msgstr "%s%s"
+msgstr "%s%s"
 
-#: execute_cmd.c:5854
+#: execute_cmd.c:5975
+#, c-format
+msgid "%s: cannot execute: required file not found"
+msgstr "%s: 无法执行:找不到需要的文件"
+
+#: execute_cmd.c:6000
 #, c-format
 msgid "%s: %s: bad interpreter"
-msgstr "%s:%s:解释器错误"
+msgstr "%s: %s: 错误的解释器"
 
-#: execute_cmd.c:5891
+#: execute_cmd.c:6037
 #, c-format
 msgid "%s: cannot execute binary file: %s"
-msgstr "%s:无法执行二进制文件: %s"
+msgstr "%s: 无法执行二进制文件:%s"
 
-#: execute_cmd.c:5977
+#: execute_cmd.c:6123
 #, c-format
 msgid "`%s': is a special builtin"
-msgstr "“%s”: 特殊内建"
+msgstr "\"%s\": 是特殊内建"
 
-#: execute_cmd.c:6029
+#: execute_cmd.c:6175
 #, c-format
 msgid "cannot duplicate fd %d to fd %d"
 msgstr "无法复制文件描述符 %d 到文件描述符 %d"
 
 #: expr.c:263
 msgid "expression recursion level exceeded"
-msgstr "表达å¼\8fé\80\92å½\92å±\82次è¶\8aç\95\8c"
+msgstr "è\85å\87ºè¡¨è¾¾å¼\8fé\80\92å½\92å±\82æ\95°ä¸\8aé\99\90"
 
 #: expr.c:291
 msgid "recursion stack underflow"
 msgstr "递归栈下溢"
 
-#: expr.c:477
+#: expr.c:478
 msgid "syntax error in expression"
 msgstr "表达式中有语法错误"
 
-#: expr.c:521
+#: expr.c:522
 msgid "attempted assignment to non-variable"
 msgstr "尝试给非变量赋值"
 
-#: expr.c:530
+#: expr.c:531
 msgid "syntax error in variable assignment"
 msgstr "变量赋值中有语法错误"
 
-#: expr.c:544 expr.c:911
+#: expr.c:545 expr.c:912
 msgid "division by 0"
 msgstr "除以 0"
 
-#: expr.c:592
+#: expr.c:593
 msgid "bug: bad expassign token"
-msgstr "错误:表达式赋值符号错误"
+msgstr "bug: 错误的表达式赋值记号"
 
-#: expr.c:646
+#: expr.c:647
 msgid "`:' expected for conditional expression"
-msgstr "条件表达式需要 `:'"
+msgstr "条件表达式需要 \":\""
 
-#: expr.c:972
+#: expr.c:973
 msgid "exponent less than 0"
 msgstr "指数小于 0"
 
-#: expr.c:1029
+#: expr.c:1030
 msgid "identifier expected after pre-increment or pre-decrement"
-msgstr "预增符或预减符后应跟有标识符"
+msgstr "前缀自增或前缀自减运算符之后需要标识符"
 
-#: expr.c:1056
+#: expr.c:1057
 msgid "missing `)'"
-msgstr "缺少“)”"
+msgstr "缺少 \")\""
 
-#: expr.c:1107 expr.c:1487
+#: expr.c:1108 expr.c:1492
 msgid "syntax error: operand expected"
-msgstr "语法错误需要操作数"
+msgstr "语法错误需要操作数"
 
-#: expr.c:1489
+#: expr.c:1494
 msgid "syntax error: invalid arithmetic operator"
-msgstr "语法错误无效的算术运算符"
+msgstr "语法错误无效的算术运算符"
 
-#: expr.c:1513
+#: expr.c:1518
 #, c-format
 msgid "%s%s%s: %s (error token is \"%s\")"
-msgstr "%s%s%s:%s (错误符号是 \"%s\")"
+msgstr "%s%s%s: %s(错误记号是 \"%s\")"
 
-#: expr.c:1573
+#: expr.c:1578
 msgid "invalid arithmetic base"
-msgstr "无效的算术进制"
+msgstr "无效的算术底数"
 
-#: expr.c:1582
+#: expr.c:1587
 msgid "invalid integer constant"
 msgstr "无效的整数常数"
 
-#: expr.c:1598
+#: expr.c:1603
 msgid "value too great for base"
-msgstr "数值太大不可为算术进制的基"
+msgstr "值对于底数而言过大"
 
-#: expr.c:1647
+#: expr.c:1652
 #, c-format
 msgid "%s: expression error\n"
-msgstr "%s表达式错误\n"
+msgstr "%s表达式错误\n"
 
 #: general.c:70
 msgid "getcwd: cannot access parent directories"
 msgstr "getcwd: 无法访问父目录"
 
-#: input.c:99 subst.c:6069
+#: input.c:99 subst.c:6208
 #, c-format
 msgid "cannot reset nodelay mode for fd %d"
-msgstr "无法为文件描述符 %d 重置nodelay模式"
+msgstr "无法为文件描述符 %d 重置 nodelay 模式"
 
 #: input.c:266
 #, c-format
 msgid "cannot allocate new file descriptor for bash input from fd %d"
-msgstr "无法从文件描述符 %d 为 bash 的输入获取一个新的文件描述符"
+msgstr "无法从文件描述符 %d 为 bash 的输入分配一个新的文件描述符"
 
 #: input.c:274
 #, c-format
 msgid "save_bash_input: buffer already exists for new fd %d"
-msgstr "save_bash_input: 已经存在新的文件描述符 %d 的缓冲区"
+msgstr "save_bash_input: 新的文件描述符 %d 的缓冲区已存在"
 
 #: jobs.c:543
 msgid "start_pipeline: pgrp pipe"
 msgstr "start_pipeline: 进程组管道"
 
-#: jobs.c:906
+#: jobs.c:907
 #, c-format
 msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
 
-#: jobs.c:959
+#: jobs.c:960
 #, c-format
 msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
 
-#: jobs.c:1283
+#: jobs.c:1279
 #, c-format
 msgid "forked pid %d appears in running job %d"
-msgstr "叉分 (fork) 出的的进程号 %d 出现在运行中的任务 %d 中"
+msgstr "进程复制 (fork) 产生的 pid %d 出现在运行中的任务 %d 中"
 
-#: jobs.c:1402
+#: jobs.c:1397
 #, c-format
 msgid "deleting stopped job %d with process group %ld"
 msgstr "删除进程组 %2$ld 中已停止的任务 %1$d"
 
-#: jobs.c:1511
+#: jobs.c:1502
 #, c-format
 msgid "add_process: pid %5ld (%s) marked as still alive"
-msgstr "add_process: 进程号 %5ld(%s) 标注为仍活着"
+msgstr "add_process: pid %5ld (%s) 标记为仍存活"
 
-#: jobs.c:1850
+#: jobs.c:1839
 #, c-format
 msgid "describe_pid: %ld: no such pid"
-msgstr "describe_pid: %ld: 无此进程号"
+msgstr "describe_pid: %ld: 无此 pid"
 
-#: jobs.c:1865
+#: jobs.c:1854
 #, c-format
 msgid "Signal %d"
 msgstr "信号 %d"
 
-#: jobs.c:1879 jobs.c:1905
+#: jobs.c:1868 jobs.c:1894
 msgid "Done"
 msgstr "已完成"
 
-#: jobs.c:1884 siglist.c:122
+#: jobs.c:1873 siglist.c:123
 msgid "Stopped"
 msgstr "已停止"
 
-#: jobs.c:1888
+#: jobs.c:1877
 #, c-format
 msgid "Stopped(%s)"
 msgstr "已停止(%s)"
 
-#: jobs.c:1892
+#: jobs.c:1881
 msgid "Running"
 msgstr "运行中"
 
-#: jobs.c:1909
+#: jobs.c:1898
 #, c-format
 msgid "Done(%d)"
 msgstr "已完成(%d)"
 
-#: jobs.c:1911
+#: jobs.c:1900
 #, c-format
 msgid "Exit %d"
 msgstr "退出 %d"
 
-#: jobs.c:1914
+#: jobs.c:1903
 msgid "Unknown status"
 msgstr "未知状态"
 
-#: jobs.c:2001
+#: jobs.c:1990
 #, c-format
 msgid "(core dumped) "
 msgstr "(核心已转储)"
 
-#: jobs.c:2020
+#: jobs.c:2009
 #, c-format
 msgid "  (wd: %s)"
-msgstr "  (工作目录: %s)"
+msgstr " (工作目录:%s)"
 
-#: jobs.c:2259
+#: jobs.c:2250
 #, c-format
 msgid "child setpgid (%ld to %ld)"
-msgstr "子进程 setpgid (%ld 到 %ld)"
+msgstr "子进程 setpgid(%ld 到 %ld)"
 
-#: jobs.c:2617 nojobs.c:664
+#: jobs.c:2608 nojobs.c:666
 #, c-format
 msgid "wait: pid %ld is not a child of this shell"
-msgstr "wait: 进程号 %ld 不是当前 shell 的子进程"
+msgstr "wait: pid %ld 不是当前 shell 的子进程"
 
-#: jobs.c:2893
+#: jobs.c:2884
 #, c-format
 msgid "wait_for: No record of process %ld"
-msgstr "wiat_for: 没有进程 %ld 的记录"
+msgstr "wait_for: 没有进程 %ld 的记录"
 
-#: jobs.c:3236
+#: jobs.c:3223
 #, c-format
 msgid "wait_for_job: job %d is stopped"
 msgstr "wait_for_job: 任务 %d 已停止"
 
-#: jobs.c:3564
+#: jobs.c:3551
 #, c-format
 msgid "%s: no current jobs"
-msgstr "%s无当前任务"
+msgstr "%s无当前任务"
 
-#: jobs.c:3571
+#: jobs.c:3558
 #, c-format
 msgid "%s: job has terminated"
-msgstr "%s任务已经终止"
+msgstr "%s任务已经终止"
 
-#: jobs.c:3580
+#: jobs.c:3567
 #, c-format
 msgid "%s: job %d already in background"
-msgstr "%s任务 %d 已在后台"
+msgstr "%s任务 %d 已在后台"
 
-#: jobs.c:3806
+#: jobs.c:3793
 msgid "waitchld: turning on WNOHANG to avoid indefinite block"
 msgstr "waitchld: 打开 WNOHANG 以避免无限阻塞"
 
-#: jobs.c:4320
+#: jobs.c:4307
 #, c-format
 msgid "%s: line %d: "
-msgstr "%s:行 %d: "
+msgstr "%s: 第 %d 行:"
 
-#: jobs.c:4334 nojobs.c:919
+#: jobs.c:4321 nojobs.c:921
 #, c-format
 msgid " (core dumped)"
 msgstr "(核心已转储)"
 
-#: jobs.c:4346 jobs.c:4359
+#: jobs.c:4333 jobs.c:4346
 #, c-format
 msgid "(wd now: %s)\n"
-msgstr "(当前工作目录:%s)\n"
+msgstr "(当前工作目录:%s)\n"
 
-#: jobs.c:4391
+#: jobs.c:4378
 msgid "initialize_job_control: getpgrp failed"
 msgstr "initialize_job_control: getpgrp 失败"
 
-#: jobs.c:4447
+#: jobs.c:4434
 msgid "initialize_job_control: no job control in background"
 msgstr "initialize_job_control: 后台无任务控制"
 
-#: jobs.c:4463
+#: jobs.c:4450
 msgid "initialize_job_control: line discipline"
 msgstr "initialize_job_control: 行规则"
 
-#: jobs.c:4473
+#: jobs.c:4460
 msgid "initialize_job_control: setpgid"
 msgstr "initialize_job_control: setpgid"
 
-#: jobs.c:4494 jobs.c:4503
+#: jobs.c:4481 jobs.c:4490
 #, c-format
 msgid "cannot set terminal process group (%d)"
-msgstr "无法设定终端进程组(%d)"
+msgstr "无法设定终端进程组 (%d)"
 
-#: jobs.c:4508
+#: jobs.c:4495
 msgid "no job control in this shell"
 msgstr "此 shell 中无任务控制"
 
-#: lib/malloc/malloc.c:353
+#: lib/malloc/malloc.c:367
 #, c-format
 msgid "malloc: failed assertion: %s\n"
-msgstr "malloc: 断言失败%s\n"
+msgstr "malloc: 断言失败%s\n"
 
-#: lib/malloc/malloc.c:369
+#: lib/malloc/malloc.c:383
 #, c-format
 msgid ""
 "\r\n"
 "malloc: %s:%d: assertion botched\r\n"
 msgstr ""
 "\r\n"
-"malloc: %s:%d:断言已修补\r\n"
+"malloc: %s:%d: 断言已搞砸\r\n"
 
-#: lib/malloc/malloc.c:370 lib/malloc/malloc.c:933
+#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941
 msgid "unknown"
 msgstr "未知"
 
-#: lib/malloc/malloc.c:882
+#: lib/malloc/malloc.c:892
 msgid "malloc: block on free list clobbered"
-msgstr "malloc: 空闲表中的块损坏"
+msgstr "malloc: 空闲表中的块损坏"
 
-#: lib/malloc/malloc.c:972
+#: lib/malloc/malloc.c:980
 msgid "free: called with already freed block argument"
-msgstr "free调用时用了已经释放的块作为参数"
+msgstr "free调用时用了已经释放的块作为参数"
 
-#: lib/malloc/malloc.c:975
+#: lib/malloc/malloc.c:983
 msgid "free: called with unallocated block argument"
 msgstr "free: 调用时用了未分配的块作为参数"
 
-#: lib/malloc/malloc.c:994
+#: lib/malloc/malloc.c:1001
 msgid "free: underflow detected; mh_nbytes out of range"
-msgstr "free: æ£\80æµ\8bå\88°ä¸\8b溢ï¼\9bmh_nbytes è¶\8aç\95\8c"
+msgstr "free: æ£\80æµ\8bå\88°ä¸\8b溢ï¼\9bmh_nbytes è¶\85å\87ºè\8c\83å\9b´"
 
-#: lib/malloc/malloc.c:1001
+#: lib/malloc/malloc.c:1007
 msgid "free: underflow detected; magic8 corrupted"
 msgstr "free: 检测到下溢;magic8 损坏"
 
-#: lib/malloc/malloc.c:1009
+#: lib/malloc/malloc.c:1014
 msgid "free: start and end chunk sizes differ"
-msgstr "free: 其实和末尾块大小不一致"
+msgstr "free: 起始和末尾组块大小不一致"
 
-#: lib/malloc/malloc.c:1119
+#: lib/malloc/malloc.c:1176
 msgid "realloc: called with unallocated block argument"
-msgstr "realloc调用时用了未分配的块作为参数"
+msgstr "realloc调用时用了未分配的块作为参数"
 
-#: lib/malloc/malloc.c:1134
+#: lib/malloc/malloc.c:1191
 msgid "realloc: underflow detected; mh_nbytes out of range"
-msgstr "realloc: æ£\80æµ\8bå\88°ä¸\8b溢ï¼\9bmh_nbytes è¶\8aç\95\8c"
+msgstr "realloc: æ£\80æµ\8bå\88°ä¸\8b溢ï¼\9bmh_nbytes è¶\85å\87ºè\8c\83å\9b´"
 
-#: lib/malloc/malloc.c:1141
+#: lib/malloc/malloc.c:1197
 msgid "realloc: underflow detected; magic8 corrupted"
 msgstr "realloc: 检测到下溢;magic8 损坏"
 
-#: lib/malloc/malloc.c:1150
+#: lib/malloc/malloc.c:1205
 msgid "realloc: start and end chunk sizes differ"
-msgstr "realloc: 其实和末尾块大小不一致"
+msgstr "realloc: 起始和末尾组块大小不一致"
 
 #: lib/malloc/table.c:191
 #, c-format
 msgid "register_alloc: alloc table is full with FIND_ALLOC?\n"
-msgstr "register_alloc: 分配表已经充满了 FIND_ALLOC?\n"
+msgstr "register_alloc: 使用 FIND_ALLOC 时分配表已满?\n"
 
 #: lib/malloc/table.c:200
 #, c-format
 msgid "register_alloc: %p already in table as allocated?\n"
-msgstr "register_alloc: %p 在表中显示为已分配?\n"
+msgstr "register_alloc: %p å·²å\9c¨è¡¨ä¸­æ\98¾ç¤ºä¸ºå·²å\88\86é\85\8dï¼\9f\n"
 
 #: lib/malloc/table.c:253
 #, c-format
 msgid "register_free: %p already in table as free?\n"
-msgstr "register_free: %p å\9c¨è¡¨ä¸­æ\98¾ç¤ºä¸ºå·²é\87\8aæ\94¾?\n"
+msgstr "register_free: %p å·²å\9c¨è¡¨ä¸­æ\98¾ç¤ºä¸ºæ\9cªå\88\86é\85\8d?\n"
 
 #: lib/sh/fmtulong.c:102
 msgid "invalid base"
-msgstr "æ\97 æ\95\88ç\9a\84å\9fº"
+msgstr "æ\97 æ\95\88ç\9a\84åº\95æ\95°"
 
 #: lib/sh/netopen.c:168
 #, c-format
 msgid "%s: host unknown"
-msgstr "%s:未知主机"
+msgstr "%s: 未知的主机"
 
 #: lib/sh/netopen.c:175
 #, c-format
 msgid "%s: invalid service"
-msgstr "%s无效的服务"
+msgstr "%s无效的服务"
 
 #: lib/sh/netopen.c:306
 #, c-format
 msgid "%s: bad network path specification"
-msgstr "%s:错误的网络路径声明"
+msgstr "%s: 指定的网络路径无效"
 
 #: lib/sh/netopen.c:347
 msgid "network operations not supported"
 msgstr "不支持网络操作"
 
-#: locale.c:217
+#: locale.c:219
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s)"
-msgstr "setlocale:LC_ALL:无法改变区域选项 (%s)"
+msgstr "setlocale: LC_ALL: 无法改变区域设置 (%s)"
 
-#: locale.c:219
+#: locale.c:221
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s): %s"
-msgstr "setlocale:LC_ALL:无法改变区域选项 (%s):%s"
+msgstr "setlocale: LC_ALL: 无法改变区域设置 (%s):%s"
 
-#: locale.c:292
+#: locale.c:294
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s)"
-msgstr "setlocale:%s:无法改变区域选项 (%s)"
+msgstr "setlocale: %s: 无法改变区域设置 (%s)"
 
-#: locale.c:294
+#: locale.c:296
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s): %s"
-msgstr "setlocale:%s:无法改变区域选项 (%s):%s"
+msgstr "setlocale: %s: 无法改变区域设置 (%s):%s"
 
 #: mailcheck.c:439
 msgid "You have mail in $_"
@@ -1508,158 +1477,159 @@ msgstr "您在 $_ 中有新邮件"
 msgid "The mail in %s has been read\n"
 msgstr "%s 中的邮件已被读过\n"
 
-#: make_cmd.c:317
+#: make_cmd.c:314
 msgid "syntax error: arithmetic expression required"
 msgstr "语法错误:需要算术表达式"
 
-#: make_cmd.c:319
+#: make_cmd.c:316
 msgid "syntax error: `;' unexpected"
-msgstr "语法错误:需要 `;'"
+msgstr "语法错误:未预期的 \";\""
 
-#: make_cmd.c:320
+#: make_cmd.c:317
 #, c-format
 msgid "syntax error: `((%s))'"
-msgstr "语法错误:`((%s))'"
+msgstr "语法错误:\"((%s))\""
 
-#: make_cmd.c:572
+#: make_cmd.c:569
 #, c-format
 msgid "make_here_document: bad instruction type %d"
-msgstr "make_here_document错误的指令类型 %d"
+msgstr "make_here_document错误的指令类型 %d"
 
-#: make_cmd.c:657
+#: make_cmd.c:668
 #, c-format
 msgid "here-document at line %d delimited by end-of-file (wanted `%s')"
-msgstr "立即文档在第 %d 行被文件结束符分隔 (需要“%s”)"
+msgstr "立即文档在第 %d 行被文件结束符分隔(需要 \"%s\")"
 
-#: make_cmd.c:756
+#: make_cmd.c:769
 #, c-format
 msgid "make_redirection: redirection instruction `%d' out of range"
-msgstr "make_redirection:重定向指令“%d”越界"
+msgstr "make_redirection: 重定向指令 \"%d\" 超出范围"
 
-#: parse.y:2393
+#: parse.y:2428
 #, c-format
 msgid "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line truncated"
-msgstr "shell_getc:shell_input_line_size (%zu) 超过 SIZE_MAX (%lu):行被截断"
+msgstr "shell_getc: shell_input_line_size (%zu) 超过 SIZE_MAX (%lu):行已被截断"
 
-#: parse.y:2826
+#: parse.y:2921
 msgid "maximum here-document count exceeded"
-msgstr "超出最大立即文档数量"
+msgstr "超出最大立即文档计数"
 
-#: parse.y:3581 parse.y:3957 parse.y:4556
+# %c 可能为引号
+#: parse.y:3684 parse.y:4244 parse.y:6148
 #, c-format
 msgid "unexpected EOF while looking for matching `%c'"
-msgstr "寻找匹配的“%c”时遇到了未预期的文件结束符"
+msgstr "寻找匹配的 `%c' 时遇到了未预期的 EOF"
 
-#: parse.y:4696
+#: parse.y:4452
 msgid "unexpected EOF while looking for `]]'"
-msgstr "寻找“]]”时遇到了未预期的文件结束符"
+msgstr "寻找 \"]]\" 时遇到了未预期的 EOF"
 
-#: parse.y:4701
+#: parse.y:4457
 #, c-format
 msgid "syntax error in conditional expression: unexpected token `%s'"
-msgstr "条件表达式中有语法错误:未预期的符号“%s”"
+msgstr "条件表达式中有语法错误:未预期的记号 \"%s\""
 
-#: parse.y:4705
+#: parse.y:4461
 msgid "syntax error in conditional expression"
 msgstr "条件表达式中有语法错误"
 
-#: parse.y:4783
+#: parse.y:4539
 #, c-format
 msgid "unexpected token `%s', expected `)'"
-msgstr "未预期的符号“%s” ,需要“)”"
+msgstr "未预期的记号 \"%s\",需要 \")\""
 
-#: parse.y:4787
+#: parse.y:4543
 msgid "expected `)'"
-msgstr "需要“)”"
+msgstr "需要 \")\""
 
-#: parse.y:4815
+#: parse.y:4571
 #, c-format
 msgid "unexpected argument `%s' to conditional unary operator"
-msgstr "一元条件运算符使用了未预期的参数“%s”"
+msgstr "一元条件运算符使用了未预期的参数 \"%s\""
 
-#: parse.y:4819
+#: parse.y:4575
 msgid "unexpected argument to conditional unary operator"
 msgstr "一元条件运算符使用了未预期的参数"
 
-#: parse.y:4865
+#: parse.y:4621
 #, c-format
 msgid "unexpected token `%s', conditional binary operator expected"
-msgstr "未预期的符号“%s”,需要二元条件运算符"
+msgstr "未预期的记号 \"%s\",需要二元条件运算符"
 
-#: parse.y:4869
+#: parse.y:4625
 msgid "conditional binary operator expected"
 msgstr "需要二元条件运算符"
 
-#: parse.y:4891
+#: parse.y:4647
 #, c-format
 msgid "unexpected argument `%s' to conditional binary operator"
-msgstr "二元条件运算符使用了未预期的参数“%s”"
+msgstr "二元条件运算符使用了未预期的参数 \"%s\""
 
-#: parse.y:4895
+#: parse.y:4651
 msgid "unexpected argument to conditional binary operator"
 msgstr "二元条件运算符使用了未预期的参数"
 
-#: parse.y:4906
+#: parse.y:4662
 #, c-format
 msgid "unexpected token `%c' in conditional command"
-msgstr "条件命令中有未预期的符号“%c”"
+msgstr "条件命令中有未预期的记号 \"%c\""
 
-#: parse.y:4909
+#: parse.y:4665
 #, c-format
 msgid "unexpected token `%s' in conditional command"
-msgstr "条件命令中有未预期的符号“%s”"
+msgstr "条件命令中有未预期的记号 \"%s\""
 
-#: parse.y:4913
+#: parse.y:4669
 #, c-format
 msgid "unexpected token %d in conditional command"
-msgstr "条件命令中有未预期的号 %d"
+msgstr "条件命令中有未预期的号 %d"
 
-#: parse.y:6336
+#: parse.y:6118
 #, c-format
 msgid "syntax error near unexpected token `%s'"
-msgstr "未预期的符号“%s”附近有语法错误"
+msgstr "未预期的记号 \"%s\" 附近有语法错误"
 
-#: parse.y:6355
+#: parse.y:6137
 #, c-format
 msgid "syntax error near `%s'"
-msgstr "“%s”附近有语法错误"
+msgstr "\"%s\" 附近有语法错误"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error: unexpected end of file"
-msgstr "语法错误: 未预期的文件结尾"
+msgstr "语法错误:未预期的文件结束符"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error"
 msgstr "语法错误"
 
-#: parse.y:6428
+#: parse.y:6216
 #, c-format
 msgid "Use \"%s\" to leave the shell.\n"
 msgstr "使用 \"%s\" 退出 shell 。\n"
 
-#: parse.y:6602
+#: parse.y:6394
 msgid "unexpected EOF while looking for matching `)'"
-msgstr "寻找匹配的“)”时遇到了未预期的文件结束符"
+msgstr "寻找匹配的 \")\" 时遇到了未预期的 EOF"
 
 #: pcomplete.c:1132
 #, c-format
 msgid "completion: function `%s' not found"
-msgstr "补全:未找到函数 “%s”"
+msgstr "补全:未找到函数 \"%s\""
 
 #: pcomplete.c:1722
 #, c-format
 msgid "programmable_completion: %s: possible retry loop"
-msgstr "programmable_completion: %s:疑似重试循环"
+msgstr "programmable_completion: %s: 可能的重试循环"
 
 #: pcomplib.c:182
 #, c-format
 msgid "progcomp_insert: %s: NULL COMPSPEC"
-msgstr "progcomp_insert: %s:空的补全声明"
+msgstr "progcomp_insert: %s: COMPSPEC 为 NULL"
 
 #: print_cmd.c:302
 #, c-format
 msgid "print_command: bad connector `%d'"
-msgstr "print_command: 错误的条件连接符 `%d'"
+msgstr "print_command: 错误的条件连接符 \"%d\""
 
 #: print_cmd.c:375
 #, c-format
@@ -1668,102 +1638,102 @@ msgstr "xtrace_set: %d: 无效的文件描述符"
 
 #: print_cmd.c:380
 msgid "xtrace_set: NULL file pointer"
-msgstr "xtrace_set: 空的文件指针"
+msgstr "xtrace_set: 文件指针为 NULL"
 
 #: print_cmd.c:384
 #, c-format
 msgid "xtrace fd (%d) != fileno xtrace fp (%d)"
 msgstr "xtrace fd (%d) != fileno xtrace fp (%d)"
 
-#: print_cmd.c:1540
+#: print_cmd.c:1545
 #, c-format
 msgid "cprintf: `%c': invalid format character"
-msgstr "cprintf: `%c': 无效的格式字符"
+msgstr "cprintf: \"%c\": 无效的格式字符"
 
-#: redir.c:149 redir.c:197
+#: redir.c:150 redir.c:198
 msgid "file descriptor out of range"
 msgstr "文件描述符超出范围"
 
-#: redir.c:204
+#: redir.c:205
 #, c-format
 msgid "%s: ambiguous redirect"
-msgstr "%s:模糊的重定向"
+msgstr "%s: 有歧义的重定向"
 
-#: redir.c:208
+#: redir.c:209
 #, c-format
 msgid "%s: cannot overwrite existing file"
-msgstr "%s无法覆盖已存在的文件"
+msgstr "%s无法覆盖已存在的文件"
 
-#: redir.c:213
+#: redir.c:214
 #, c-format
 msgid "%s: restricted: cannot redirect output"
-msgstr "%s:受限的: 无法重定向输出"
+msgstr "%s: 受限:无法重定向输出"
 
-#: redir.c:218
+#: redir.c:219
 #, c-format
 msgid "cannot create temp file for here-document: %s"
-msgstr "无法为立即文档创建临时文件%s"
+msgstr "无法为立即文档创建临时文件%s"
 
-#: redir.c:222
+#: redir.c:223
 #, c-format
 msgid "%s: cannot assign fd to variable"
-msgstr "%s无法将文件描述符赋值给变量"
+msgstr "%s无法将文件描述符赋值给变量"
 
-#: redir.c:649
+#: redir.c:650
 msgid "/dev/(tcp|udp)/host/port not supported without networking"
 msgstr "没有网络时不支持 /dev/(tcp|udp)/host/port"
 
-#: redir.c:938 redir.c:1053 redir.c:1114 redir.c:1284
+#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303
 msgid "redirection error: cannot duplicate fd"
-msgstr "重定向错误无法复制文件描述符"
+msgstr "重定向错误无法复制文件描述符"
 
-#: shell.c:347
+#: shell.c:353
 msgid "could not find /tmp, please create!"
-msgstr "无法找到 /tmp ,请创建!"
+msgstr "无法找到 /tmp,请创建!"
 
-#: shell.c:351
+#: shell.c:357
 msgid "/tmp must be a valid directory name"
 msgstr "/tmp 必须为有效的目录名"
 
-#: shell.c:804
+#: shell.c:826
 msgid "pretty-printing mode ignored in interactive shells"
 msgstr "在交互式 shell 中将忽略美化输出模式"
 
-#: shell.c:948
+#: shell.c:972
 #, c-format
 msgid "%c%c: invalid option"
 msgstr "%c%c: 无效的选项"
 
-#: shell.c:1319
+#: shell.c:1343
 #, c-format
 msgid "cannot set uid to %d: effective uid %d"
-msgstr "无法将 uid 设为 %d有效 uid %d"
+msgstr "无法将 uid 设为 %d有效 uid %d"
 
-#: shell.c:1330
+#: shell.c:1354
 #, c-format
 msgid "cannot set gid to %d: effective gid %d"
-msgstr "无法将 gid 设为 %d有效 gid %d"
+msgstr "无法将 gid 设为 %d有效 gid %d"
 
-#: shell.c:1518
+#: shell.c:1544
 msgid "cannot start debugger; debugging mode disabled"
 msgstr "无法启动调试器;调试模式已禁用"
 
-#: shell.c:1632
+#: shell.c:1658
 #, c-format
 msgid "%s: Is a directory"
-msgstr "%s是一个目录"
+msgstr "%s是一个目录"
 
 # 这个是查看用户的 /etc/passwd 信息得到的名字。既然是用户的名字,就叫做无名氏吧。(有点想写“红领巾”来着。)
-#: shell.c:1881
+#: shell.c:1907
 msgid "I have no name!"
 msgstr "无名氏!"
 
-#: shell.c:2035
+#: shell.c:2061
 #, c-format
 msgid "GNU bash, version %s-(%s)\n"
 msgstr "GNU bash,版本 %s-(%s)\n"
 
-#: shell.c:2036
+#: shell.c:2062
 #, c-format
 msgid ""
 "Usage:\t%s [GNU long option] [option] ...\n"
@@ -1772,324 +1742,324 @@ msgstr ""
 "用法:\t%s [GNU 长选项] [选项] ...\n"
 "\t%s [GNU 长选项] [选项] 脚本文件 ...\n"
 
-#: shell.c:2038
+#: shell.c:2064
 msgid "GNU long options:\n"
-msgstr "GNU 长选项:\n"
+msgstr "GNU 长选项\n"
 
-#: shell.c:2042
+#: shell.c:2068
 msgid "Shell options:\n"
-msgstr "Shell 选项:\n"
+msgstr "Shell 选项\n"
 
-#: shell.c:2043
+#: shell.c:2069
 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n"
-msgstr "\t-irsD 或 -c <命令> 或 -O <shopt 选项>\t\t(仅适合调用)\n"
+msgstr "\t-ilrsD 或 -c <命令> 或 -O <shopt 选项>\t\t(仅适合调用)\n"
 
-#: shell.c:2062
+#: shell.c:2088
 #, c-format
 msgid "\t-%s or -o option\n"
 msgstr "\t-%s 或 -o <选项>\n"
 
-#: shell.c:2068
+#: shell.c:2094
 #, c-format
 msgid "Type `%s -c \"help set\"' for more information about shell options.\n"
-msgstr "请输入`%s -c \"help set\"' 以获得关于 shell 选项的更多信息\n"
+msgstr "请输入 `%s -c \"help set\"' 以获得关于 shell 选项的更多信息。\n"
 
-#: shell.c:2069
+#: shell.c:2095
 #, c-format
 msgid "Type `%s -c help' for more information about shell builtin commands.\n"
-msgstr "请输入 `%s -c help' 以获得关于 shell 内建命令的更多信息.\n"
+msgstr "请输入 `%s -c help' 以获得关于 shell 内建命令的更多信息\n"
 
 # 写如何报告程序错误的地方应该提到如何报告翻译问题。
-#: shell.c:2070
+#: shell.c:2096
 #, c-format
 msgid "Use the `bashbug' command to report bugs.\n"
 msgstr ""
-"请使用“bashbug”命令来报告程序错误。\n"
+"请使用 \"bashbug\" 命令来报告程序错误。\n"
 "请将翻译错误报告到 <i18n-zh@googlegroups.com>。\n"
 
-#: shell.c:2072
+#: shell.c:2098
 #, c-format
 msgid "bash home page: <http://www.gnu.org/software/bash>\n"
-msgstr "bash 页:<http://www.gnu.org/software/bash>\n"
+msgstr "bash 页:<http://www.gnu.org/software/bash>\n"
 
-#: shell.c:2073
+#: shell.c:2099
 #, c-format
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 msgstr "使用 GNU 软件的通用帮助:<http://www.gnu.org/gethelp/>\n"
 
-#: sig.c:757
+#: sig.c:765
 #, c-format
 msgid "sigprocmask: %d: invalid operation"
 msgstr "sigprocmask: %d: 无效的操作"
 
-#: siglist.c:47
+#: siglist.c:48
 msgid "Bogus signal"
 msgstr "伪信号"
 
-#: siglist.c:50
+#: siglist.c:51
 msgid "Hangup"
 msgstr "挂断"
 
-#: siglist.c:54
+#: siglist.c:55
 msgid "Interrupt"
 msgstr "中断"
 
-#: siglist.c:58
+#: siglist.c:59
 msgid "Quit"
 msgstr "退出"
 
-#: siglist.c:62
+#: siglist.c:63
 msgid "Illegal instruction"
-msgstr "非法指令"
+msgstr "非法指令"
 
-#: siglist.c:66
+#: siglist.c:67
 msgid "BPT trace/trap"
-msgstr "æ\96­ç\82¹è¿½è¸ª/陷阱"
+msgstr "æ\96­ç\82¹è·\9f踪æ\88\96陷阱"
 
-#: siglist.c:74
+#: siglist.c:75
 msgid "ABORT instruction"
-msgstr "放弃指令"
+msgstr "中止指令"
 
-#: siglist.c:78
+#: siglist.c:79
 msgid "EMT instruction"
-msgstr "模拟器陷阱指令"
+msgstr "EMT 指令"
 
-#: siglist.c:82
+#: siglist.c:83
 msgid "Floating point exception"
-msgstr "浮点异常"
+msgstr "浮点异常"
 
-#: siglist.c:86
+#: siglist.c:87
 msgid "Killed"
 msgstr "已杀死"
 
-#: siglist.c:90
+#: siglist.c:91
 msgid "Bus error"
 msgstr "总线错误"
 
-#: siglist.c:94
+#: siglist.c:95
 msgid "Segmentation fault"
 msgstr "段错误"
 
-#: siglist.c:98
+#: siglist.c:99
 msgid "Bad system call"
 msgstr "错误的系统调用"
 
-#: siglist.c:102
+#: siglist.c:103
 msgid "Broken pipe"
-msgstr "管道破裂"
+msgstr "断开的管道"
 
-#: siglist.c:106
+#: siglist.c:107
 msgid "Alarm clock"
 msgstr "闹钟"
 
-#: siglist.c:110
+#: siglist.c:111
 msgid "Terminated"
 msgstr "已终止"
 
-#: siglist.c:114
+#: siglist.c:115
 msgid "Urgent IO condition"
 msgstr "紧急 I/O 状况"
 
-#: siglist.c:118
+#: siglist.c:119
 msgid "Stopped (signal)"
-msgstr "已停止(信号)"
+msgstr "已停止(信号)"
 
-#: siglist.c:126
+#: siglist.c:127
 msgid "Continue"
 msgstr "继续"
 
-#: siglist.c:134
+#: siglist.c:135
 msgid "Child death or stop"
-msgstr "子进程已死或停止"
+msgstr "子进程已死或停止"
 
-#: siglist.c:138
+#: siglist.c:139
 msgid "Stopped (tty input)"
-msgstr "已停止(tty 输入)"
+msgstr "已停止(tty 输入)"
 
-#: siglist.c:142
+#: siglist.c:143
 msgid "Stopped (tty output)"
-msgstr "已停止(tty 输出)"
+msgstr "已停止(tty 输出)"
 
-#: siglist.c:146
+#: siglist.c:147
 msgid "I/O ready"
 msgstr "I/O 就绪"
 
-#: siglist.c:150
+#: siglist.c:151
 msgid "CPU limit"
 msgstr "CPU 限制"
 
-#: siglist.c:154
+#: siglist.c:155
 msgid "File limit"
 msgstr "文件限制"
 
-#: siglist.c:158
+#: siglist.c:159
 msgid "Alarm (virtual)"
-msgstr "报警(虚拟)"
+msgstr "闹钟(虚拟)"
 
 # Personally I treat this as something coming from alarm() by a profiler.
-#: siglist.c:162
+#: siglist.c:163
 msgid "Alarm (profile)"
-msgstr "报警(分析)"
+msgstr "闹钟(性能分析)"
 
-#: siglist.c:166
+#: siglist.c:167
 msgid "Window changed"
 msgstr "窗口已改变"
 
-#: siglist.c:170
+#: siglist.c:171
 msgid "Record lock"
 msgstr "记录锁"
 
-#: siglist.c:174
+#: siglist.c:175
 msgid "User signal 1"
-msgstr "用户信号1"
+msgstr "用户信号 1"
 
-#: siglist.c:178
+#: siglist.c:179
 msgid "User signal 2"
-msgstr "用户信号2"
+msgstr "用户信号 2"
 
-#: siglist.c:182
+#: siglist.c:183
 msgid "HFT input data pending"
-msgstr "HFT 待输入数据"
+msgstr "HFT 输入数据待处理"
 
-#: siglist.c:186
+#: siglist.c:187
 msgid "power failure imminent"
 msgstr "即将停电"
 
-#: siglist.c:190
+#: siglist.c:191
 msgid "system crash imminent"
 msgstr "系统即将崩溃"
 
-#: siglist.c:194
+#: siglist.c:195
 msgid "migrate process to another CPU"
 msgstr "迁移进程至另一个 CPU"
 
-#: siglist.c:198
+#: siglist.c:199
 msgid "programming error"
 msgstr "编程错误"
 
-#: siglist.c:202
+#: siglist.c:203
 msgid "HFT monitor mode granted"
 msgstr "已授予 HFT 监视模式"
 
-#: siglist.c:206
+#: siglist.c:207
 msgid "HFT monitor mode retracted"
 msgstr "已撤销 HFT 监视模式"
 
-#: siglist.c:210
+#: siglist.c:211
 msgid "HFT sound sequence has completed"
 msgstr "已完成 HFT 声音序列"
 
-#: siglist.c:214
+#: siglist.c:215
 msgid "Information request"
 msgstr "信息请求"
 
-#: siglist.c:222 siglist.c:224
+#: siglist.c:223 siglist.c:225
 #, c-format
 msgid "Unknown Signal #%d"
 msgstr "未知信号 #%d"
 
-#: subst.c:1476 subst.c:1666
+#: subst.c:1480 subst.c:1670
 #, c-format
 msgid "bad substitution: no closing `%s' in %s"
-msgstr "错误的替换: 在 %2$s 中没有闭合的 `%1$s'"
+msgstr "错误的替换:在 %2$s 中没有右 `%1$s'"
 
-#: subst.c:3281
+#: subst.c:3307
 #, c-format
 msgid "%s: cannot assign list to array member"
-msgstr "%s:无法将链表赋值给数组成员"
+msgstr "%s: 无法将列表赋值给数组成员"
 
-#: subst.c:5910 subst.c:5926
+#: subst.c:6048 subst.c:6064
 msgid "cannot make pipe for process substitution"
 msgstr "无法为进程替换创建管道"
 
-#: subst.c:5985
+#: subst.c:6124
 msgid "cannot make child for process substitution"
 msgstr "无法为进程替换创建子进程"
 
-#: subst.c:6059
+#: subst.c:6198
 #, c-format
 msgid "cannot open named pipe %s for reading"
-msgstr "无法打开命名管道 %s 读取"
+msgstr "无法打开命名管道 %s 进行读取"
 
-#: subst.c:6061
+#: subst.c:6200
 #, c-format
 msgid "cannot open named pipe %s for writing"
 msgstr "无法打开命名管道 %s 进行写入"
 
-#: subst.c:6084
+#: subst.c:6223
 #, c-format
 msgid "cannot duplicate named pipe %s as fd %d"
 msgstr "无法将命名管道 %s 作为文件描述符 %d 复制"
 
-#: subst.c:6213
+#: subst.c:6370
 msgid "command substitution: ignored null byte in input"
 msgstr "命令替换:忽略输入中的 null 字节"
 
-#: subst.c:6353
+#: subst.c:6533
 msgid "cannot make pipe for command substitution"
 msgstr "无法为命令替换创建管道"
 
-#: subst.c:6397
+#: subst.c:6580
 msgid "cannot make child for command substitution"
 msgstr "无法为命令替换创建子进程"
 
-#: subst.c:6423
+#: subst.c:6613
 msgid "command_substitute: cannot duplicate pipe as fd 1"
 msgstr "command_substitute: 无法将管道复制为文件描述符 1"
 
-#: subst.c:6883 subst.c:9952
+#: subst.c:7082 subst.c:10252
 #, c-format
 msgid "%s: invalid variable name for name reference"
-msgstr "%s:无效的引用变量名"
+msgstr "%s: 名称引用变量引用的变量名无效"
 
-#: subst.c:6979 subst.c:6997 subst.c:7169
+#: subst.c:7178 subst.c:7196 subst.c:7369
 #, c-format
 msgid "%s: invalid indirect expansion"
-msgstr "%s无效的间接展开"
+msgstr "%s无效的间接展开"
 
-#: subst.c:7013 subst.c:7177
+#: subst.c:7212 subst.c:7377
 #, c-format
 msgid "%s: invalid variable name"
-msgstr "%s无效的变量名"
+msgstr "%s无效的变量名"
 
-#: subst.c:7256
+#: subst.c:7478
 #, c-format
 msgid "%s: parameter not set"
-msgstr "%s参数未设置"
+msgstr "%s参数未设置"
 
-#: subst.c:7258
+#: subst.c:7480
 #, c-format
 msgid "%s: parameter null or not set"
-msgstr "%s参数为空或未设置"
+msgstr "%s参数为空或未设置"
 
-#: subst.c:7503 subst.c:7518
+#: subst.c:7727 subst.c:7742
 #, c-format
 msgid "%s: substring expression < 0"
-msgstr "%s子串表达式 < 0"
+msgstr "%s子串表达式 < 0"
 
-#: subst.c:9281 subst.c:9302
+#: subst.c:9560 subst.c:9587
 #, c-format
 msgid "%s: bad substitution"
-msgstr "%s错误的替换"
+msgstr "%s错误的替换"
 
-#: subst.c:9390
+#: subst.c:9678
 #, c-format
 msgid "$%s: cannot assign in this way"
-msgstr "$%s无法这样赋值"
+msgstr "$%s无法这样赋值"
 
-#: subst.c:9814
+#: subst.c:10111
 msgid "future versions of the shell will force evaluation as an arithmetic substitution"
-msgstr "未来版本的 shell 会强制值为算术替换"
+msgstr "未来版本的 shell 会强制值为算术替换"
 
-#: subst.c:10367
+#: subst.c:10795
 #, c-format
 msgid "bad substitution: no closing \"`\" in %s"
-msgstr "错误的替换: 在 %s 中没有闭合的 \"`\""
+msgstr "错误的替换:在 %s 中没有右 \"`\""
 
-#: subst.c:11434
+#: subst.c:11874
 #, c-format
 msgid "no match: %s"
-msgstr "无匹配%s"
+msgstr "无匹配%s"
 
 #: test.c:147
 msgid "argument expected"
@@ -2098,137 +2068,142 @@ msgstr "需要参数"
 #: test.c:156
 #, c-format
 msgid "%s: integer expression expected"
-msgstr "%s需要整数表达式"
+msgstr "%s需要整数表达式"
 
 #: test.c:265
 msgid "`)' expected"
-msgstr "需要“)”"
+msgstr "需要 \")\""
 
 #: test.c:267
 #, c-format
 msgid "`)' expected, found %s"
-msgstr "需要“)”,却找到 %s"
+msgstr "需要 \")\",却找到 %s"
 
-#: test.c:466 test.c:799
+#: test.c:469 test.c:814
 #, c-format
 msgid "%s: binary operator expected"
-msgstr "%s:需要二元表达式"
+msgstr "%s: 需要二元运算符"
 
-#: test.c:756 test.c:759
+#: test.c:771 test.c:774
 #, c-format
 msgid "%s: unary operator expected"
-msgstr "%s:需要一元表达式"
+msgstr "%s: 需要一元运算符"
 
-#: test.c:881
+#: test.c:896
 msgid "missing `]'"
-msgstr "缺少 `]'"
+msgstr "缺少 \"]\""
 
-#: test.c:899
+#: test.c:914
 #, c-format
 msgid "syntax error: `%s' unexpected"
-msgstr "语法错误:需要 `%s'"
+msgstr "语法错误:未预期的 \"%s\""
 
 #: trap.c:220
 msgid "invalid signal number"
-msgstr "无效的信号"
+msgstr "无效的信号编号"
 
-#: trap.c:325
+#: trap.c:323
 #, c-format
 msgid "trap handler: maximum trap handler level exceeded (%d)"
-msgstr "trap handler: è¶\85å\87ºæ\9c\80大ç\9a\84 trap handler å±\82次 (%d)"
+msgstr "trap handler: è¶\85å\87ºæ\9c\80大ç\9a\84 trap handler å±\82æ\95° (%d)"
 
-#: trap.c:414
+#: trap.c:412
 #, c-format
 msgid "run_pending_traps: bad value in trap_list[%d]: %p"
-msgstr "run_pending_traps: trap_list[%d] 中的错误值: %p"
+msgstr "run_pending_traps: 错误的 trap_list[%d] 值:%p"
 
-#: trap.c:418
+#: trap.c:416
 #, c-format
 msgid "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
-msgstr "run_pending_traps: 信号处理是 SIG_DFL,重新发送 %d (%s) 给自己"
+msgstr "run_pending_traps: 信号处理程序是 SIG_DFL,重新发送 %d (%s) 给自己"
 
-#: trap.c:487
+#: trap.c:509
 #, c-format
 msgid "trap_handler: bad signal %d"
 msgstr "trap_handler: 错误的信号 %d"
 
-#: variables.c:421
+#: variables.c:424
 #, c-format
 msgid "error importing function definition for `%s'"
-msgstr "“%s”函数定义导入错误"
+msgstr "导入 \"%s\" 的函数定义时出错"
 
-#: variables.c:833
+#: variables.c:838
 #, c-format
 msgid "shell level (%d) too high, resetting to 1"
-msgstr "shell å±\82次 (%d) 太高,重置为 1"
+msgstr "shell å±\82æ\95° (%d) 太高,重置为 1"
 
-#: variables.c:2674
+#: variables.c:2642
 msgid "make_local_variable: no function context at current scope"
 msgstr "make_local_variable: 当前作用域中没有函数上下文"
 
-#: variables.c:2693
+#: variables.c:2661
 #, c-format
 msgid "%s: variable may not be assigned value"
-msgstr "%s:变量不可赋值"
+msgstr "%s: 变量不可赋值"
+
+#: variables.c:2818 variables.c:2874
+#, c-format
+msgid "%s: cannot inherit value from incompatible type"
+msgstr "%s: 无法从不兼容的类型继承值"
 
-#: variables.c:3475
+#: variables.c:3459
 #, c-format
 msgid "%s: assigning integer to name reference"
-msgstr "%s将整数赋值给名称引用"
+msgstr "%s将整数赋值给名称引用"
 
-#: variables.c:4404
+#: variables.c:4390
 msgid "all_local_variables: no function context at current scope"
 msgstr "all_local_variables: 当前作用域中没有函数上下文"
 
-#: variables.c:4771
+#: variables.c:4757
 #, c-format
 msgid "%s has null exportstr"
 msgstr "%s 的 exportstr 为空"
 
-#: variables.c:4776 variables.c:4785
+#: variables.c:4762 variables.c:4771
 #, c-format
 msgid "invalid character %d in exportstr for %s"
 msgstr "%2$s 的 exportstr 中有无效的字符 %1$d"
 
-#: variables.c:4791
+#: variables.c:4777
 #, c-format
 msgid "no `=' in exportstr for %s"
-msgstr "%s 的 exportstr 中没有“=”"
+msgstr "%s 的 exportstr 中没有 \"=\""
 
-#: variables.c:5331
+#: variables.c:5317
 msgid "pop_var_context: head of shell_variables not a function context"
 msgstr "pop_var_context: shell_variables 的头部不是函数上下文"
 
-#: variables.c:5344
+#: variables.c:5330
 msgid "pop_var_context: no global_variables context"
 msgstr "pop_var_context: 没有 global_variables 上下文"
 
-#: variables.c:5424
+#: variables.c:5410
 msgid "pop_scope: head of shell_variables not a temporary environment scope"
 msgstr "pop_scope: shell_variables 的头部不是临时环境作用域"
 
-#: variables.c:6387
+#: variables.c:6400
 #, c-format
 msgid "%s: %s: cannot open as FILE"
-msgstr "%s:%s:无法作为文件打开"
+msgstr "%s: %s: 无法作为 FILE 打开"
 
-#: variables.c:6392
+#: variables.c:6405
 #, c-format
 msgid "%s: %s: invalid value for trace file descriptor"
-msgstr "%s:%s:追踪文件描述符的值无效"
+msgstr "%s: %s: 跟踪文件描述符的值无效"
 
-#: variables.c:6437
+#: variables.c:6450
 #, c-format
 msgid "%s: %s: compatibility value out of range"
-msgstr "%s:%s:兼容版本数值越界"
+msgstr "%s: %s: 兼容性的值超出范围"
 
 #: version.c:46 version2.c:46
-msgid "Copyright (C) 2020 Free Software Foundation, Inc."
-msgstr "版权所有 (C) 2020 自由软件基金会"
+msgid "Copyright (C) 2022 Free Software Foundation, Inc."
+msgstr "Copyright (C) 2022 自由软件基金会"
 
 #: version.c:47 version2.c:47
 msgid "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n"
-msgstr "许可证 GPLv3+GNU GPL 许可证第三版或者更新版本 <http://gnu.org/licenses/gpl.html>\n"
+msgstr "许可证 GPLv3+GNU GPL 许可证第三版或者更新版本 <http://gnu.org/licenses/gpl.html>\n"
 
 #: version.c:86 version2.c:86
 #, c-format
@@ -2246,22 +2221,22 @@ msgstr "在法律许可的情况下特此明示,本软件不提供任何担保
 #: xmalloc.c:93
 #, c-format
 msgid "%s: cannot allocate %lu bytes (%lu bytes allocated)"
-msgstr "%s:无法分配 %lu 字节 (已分配 %lu 字节)"
+msgstr "%s: 无法分配 %lu 字节(已分配 %lu 字节)"
 
 #: xmalloc.c:95
 #, c-format
 msgid "%s: cannot allocate %lu bytes"
-msgstr "%s无法分配 %lu 字节"
+msgstr "%s无法分配 %lu 字节"
 
 #: xmalloc.c:165
 #, c-format
 msgid "%s: %s:%d: cannot allocate %lu bytes (%lu bytes allocated)"
-msgstr "%s:%s:%d:无法分配 %lu 字节 (已分配 %lu 字节)"
+msgstr "%s: %s:%d: 无法分配 %lu 字节(已分配 %lu 字节)"
 
 #: xmalloc.c:167
 #, c-format
 msgid "%s: %s:%d: cannot allocate %lu bytes"
-msgstr "%s:%s:%d:无法分配 %lu 字节"
+msgstr "%s: %s:%d: 无法分配 %lu 字节"
 
 #: builtins.c:45
 msgid "alias [-p] [name[=value] ... ]"
@@ -2285,7 +2260,7 @@ msgstr "continue [n]"
 
 #: builtins.c:60
 msgid "builtin [shell-builtin [arg ...]]"
-msgstr "builtin [shell 内建 [参数 ...]]"
+msgstr "builtin [shell-内建 [参数 ...]]"
 
 #: builtins.c:63
 msgid "caller [expr]"
@@ -2304,16 +2279,16 @@ msgid "command [-pVv] command [arg ...]"
 msgstr "command [-pVv] 命令 [参数 ...]"
 
 #: builtins.c:78
-msgid "declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]"
-msgstr "declare [-aAfFgiIlnrtux] [-p] [名称[=值] ...]"
+msgid "declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] [name ...]"
+msgstr "declare [-aAfFgiIlnrtux] [名称[=值] ...] 或 declare -p [-aAfFilnrtux] [名称 ...]"
 
 #: builtins.c:80
-msgid "typeset [-aAfFgiIlnrtux] [-p] name[=value] ..."
-msgstr "typeset [-aAfFgiIlnrtux] [-p] 名称[=值] ..."
+msgid "typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] [name ...]"
+msgstr "typeset [-aAfFgiIlnrtux] 名称[=值] ... 或 typeset -p [-aAfFilnrtux] [名称 ...]"
 
 #: builtins.c:82
 msgid "local [option] name[=value] ..."
-msgstr "local [option] 名称[=值] ..."
+msgstr "local [选项] 名称[=值] ..."
 
 #: builtins.c:85
 msgid "echo [-neE] [arg ...]"
@@ -2349,15 +2324,15 @@ msgstr "logout [n]"
 
 #: builtins.c:105
 msgid "fc [-e ename] [-lnr] [first] [last] or fc -s [pat=rep] [command]"
-msgstr "fc [-e 编辑器名] [-lnr] [起始] [终] 或 fc -s [模式=替换串] [命令]"
+msgstr "fc [-e 编辑器名] [-lnr] [起始] [终] 或 fc -s [模式=替换串] [命令]"
 
 #: builtins.c:109
 msgid "fg [job_spec]"
-msgstr "fg [任务声明]"
+msgstr "fg [任务说明符]"
 
 #: builtins.c:113
 msgid "bg [job_spec ...]"
-msgstr "bg [任务声明 ...]"
+msgstr "bg [任务说明符 ...]"
 
 #: builtins.c:116
 msgid "hash [-lr] [-p pathname] [-dt] [name ...]"
@@ -2373,15 +2348,15 @@ msgstr "history [-c] [-d 偏移量] [n] 或 history -anrw [文件名] 或 histor
 
 #: builtins.c:127
 msgid "jobs [-lnprs] [jobspec ...] or jobs -x command [args]"
-msgstr "jobs [-lnprs] [任务声明 ...] 或 jobs -x 命令 [参数]"
+msgstr "jobs [-lnprs] [任务说明符 ...] 或 jobs -x 命令 [参数]"
 
 #: builtins.c:131
 msgid "disown [-h] [-ar] [jobspec ... | pid ...]"
-msgstr "disown [-h] [-ar] [任务声明 ... | pid ...]"
+msgstr "disown [-h] [-ar] [任务说明符 ... | pid ...]"
 
 #: builtins.c:134
 msgid "kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]"
-msgstr "kill [-s 信号声明 | -n 信号编号 | -信号声明] 进程号 | 任务声明 ... 或 kill -l [信号声明]"
+msgstr "kill [-s 信号说明符 | -n 信号编号 | -信号说明符] pid | 任务说明符 ... 或 kill -l [信号说明符]"
 
 #: builtins.c:136
 msgid "let arg [arg ...]"
@@ -2389,15 +2364,15 @@ msgstr "let 参数 [参数 ...]"
 
 #: builtins.c:138
 msgid "read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]"
-msgstr "read [-ers] [-a 数组] [-d 分隔符] [-i 缓冲区文字] [-n 读取字符数] [-N 读取字符数] [-p 提示符] [-t 超时] [-u 文件描述符] [名称 ...]"
+msgstr "read [-ers] [-a 数组] [-d 分隔符] [-i 文本] [-n 字符数] [-N 字符数] [-p 提示符] [-t 超时] [-u fd] [名称 ...]"
 
 #: builtins.c:140
 msgid "return [n]"
 msgstr "return [n]"
 
 #: builtins.c:142
-msgid "set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]"
-msgstr "set [--abefhkmnptuvxBCHP] [-o 选项名] [--] [参数 ...]"
+msgid "set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]"
+msgstr "set [-abefhkmnptuvxBCEHPT] [-o 选项名] [--] [-] [参数 ...]"
 
 #: builtins.c:144
 msgid "unset [-f] [-v] [-n] [name ...]"
@@ -2437,15 +2412,15 @@ msgstr "[ 参数... ]"
 
 #: builtins.c:166
 msgid "trap [-lp] [[arg] signal_spec ...]"
-msgstr "trap [-lp] [[参数] 信号声明 ...]"
+msgstr "trap [-lp] [[参数] 信号说明符 ...]"
 
 #: builtins.c:168
 msgid "type [-afptP] name [name ...]"
 msgstr "type [-afptP] 名称 [名称 ...]"
 
 #: builtins.c:171
-msgid "ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]"
-msgstr "ulimit [-SHabcdefiklmnpqrstuvxPT] [限制]"
+msgid "ulimit [-SHabcdefiklmnpqrstuvxPRT] [limit]"
+msgstr "ulimit [-SHabcdefiklmnpqrstuvxPRT] [限制]"
 
 #: builtins.c:174
 msgid "umask [-p] [-S] [mode]"
@@ -2453,11 +2428,11 @@ msgstr "umask [-p] [-S] [模式]"
 
 #: builtins.c:177
 msgid "wait [-fn] [-p var] [id ...]"
-msgstr "wait [-fn] [-p 变量] [编号 ...]"
+msgstr "wait [-fn] [-p 变量] [id ...]"
 
 #: builtins.c:181
 msgid "wait [pid ...]"
-msgstr "wait [进程号 ...]"
+msgstr "wait [pid ...]"
 
 #: builtins.c:184
 msgid "for NAME [in WORDS ... ] ; do COMMANDS; done"
@@ -2469,27 +2444,27 @@ msgstr "for (( 表达式1; 表达式2; 表达式3 )); do 命令; done"
 
 #: builtins.c:188
 msgid "select NAME [in WORDS ... ;] do COMMANDS; done"
-msgstr "select NAME [in 词语 ... ;] do 命令; done"
+msgstr "select 名称 [in 词语 ... ;] do 命令; done"
 
 #: builtins.c:190
 msgid "time [-p] pipeline"
-msgstr "time [-p] 管道"
+msgstr "time [-p] 流水线"
 
 #: builtins.c:192
 msgid "case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac"
-msgstr "case 词 in [模式 [| 模式]...) 命令 ;;]... esac"
+msgstr "case 词 in [模式 [| 模式]...) 命令 ;;]... esac"
 
 #: builtins.c:194
 msgid "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else COMMANDS; ] fi"
 msgstr "if 命令; then 命令; [ elif 命令; then 命令; ]... [ else 命令; ] fi"
 
 #: builtins.c:196
-msgid "while COMMANDS; do COMMANDS; done"
-msgstr "while 命令; do 命令; done"
+msgid "while COMMANDS; do COMMANDS-2; done"
+msgstr "while 命令; do 命令-2; done"
 
 #: builtins.c:198
-msgid "until COMMANDS; do COMMANDS; done"
-msgstr "until 命令; do 命令; done"
+msgid "until COMMANDS; do COMMANDS-2; done"
+msgstr "until 命令; do 命令-2; done"
 
 #: builtins.c:200
 msgid "coproc [NAME] command [redirections]"
@@ -2505,7 +2480,7 @@ msgstr "{ 命令 ; }"
 
 #: builtins.c:206
 msgid "job_spec [&]"
-msgstr "job_spec [&]"
+msgstr "任务说明符 [&]"
 
 #: builtins.c:208
 msgid "(( expression ))"
@@ -2540,16 +2515,12 @@ msgid "printf [-v var] format [arguments]"
 msgstr "printf [-v var] 格式 [参数]"
 
 #: builtins.c:231
-#, fuzzy
-#| msgid "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-W wordlist]  [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [name ...]"
 msgid "complete [-abcdefgjksuv] [-pr] [-DEI] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [name ...]"
-msgstr "complete [-abcdefgjksuv] [-pr] [-DEI] [-o 选项] [-A 动作] [-G 全局模式] [-W 词语列表]  [-F 函数] [-C 命令] [-X 过滤模式] [-P 前缀] [-S 后缀] [名称 ...]"
+msgstr "complete [-abcdefgjksuv] [-pr] [-DEI] [-o 选项] [-A 动作] [-G 全局模式] [-W 词语列表] [-F 函数] [-C 命令] [-X 过滤模式] [-P 前缀] [-S 后缀] [名称 ...]"
 
 #: builtins.c:235
-#, fuzzy
-#| msgid "compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist]  [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]"
 msgid "compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word]"
-msgstr "compgen [-abcdefgjksuv] [-o 选项]  [-A 动作] [-G 全局模式] [-W 词语列表]  [-F 函数] [-C 命令] [-X 过滤模式] [-P 前缀] [-S 后缀] [词语]"
+msgstr "compgen [-abcdefgjksuv] [-o 选项] [-A 动作] [-G 全局模式] [-W 词语列表] [-F 函数] [-C 命令] [-X 过滤模式] [-P 前缀] [-S 后缀] [词语]"
 
 #: builtins.c:239
 msgid "compopt [-o|+o option] [-DEI] [name ...]"
@@ -2557,11 +2528,11 @@ msgstr "compopt [-o|+o 选项] [-DEI] [名称 ...]"
 
 #: builtins.c:242
 msgid "mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]"
-msgstr "mapfile [-d 分隔符] [-n 计数] [-O 起始序号] [-s 计数] [-t] [-u fd] [-C 回调] [-c 量子] [数组]"
+msgstr "mapfile [-d 分隔符] [-n 计数] [-O 起始] [-s 计数] [-t] [-u fd] [-C 回调] [-c 间隔] [数组]"
 
 #: builtins.c:244
 msgid "readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]"
-msgstr "readarray [-d å®\9aç\95\8c符] [-n è®¡æ\95°] [-O èµ·å§\8båº\8få\8f·] [-s è®¡æ\95°] [-t] [-u fd] [-C å\9b\9eè°\83] [-c é\87\8få­\90] [数组]"
+msgstr "readarray [-d å\88\86é\9a\94符] [-n è®¡æ\95°] [-O èµ·å§\8b] [-s è®¡æ\95°] [-t] [-u fd] [-C å\9b\9eè°\83] [-c é\97´é\9a\94] [数组]"
 
 #: builtins.c:256
 msgid ""
@@ -2583,18 +2554,18 @@ msgid ""
 msgstr ""
 "定义或显示别名。\n"
 "    \n"
-"    不带参数时,`alias' 以可重用的格式\n"
-"    `alias 名称=值'在标准输出设备上打印别名列表。\n"
+"    不带参数时,\"alias\" 以可重用的格式 \"alias 名称=值\" 将别名列表\n"
+"    打印到标准输出。\n"
 "    \n"
-"    否则,对于每个给定值的名称定义一个别名。\n"
-"    值末尾的空格会使下一个词被检测作为别名替换展开。\n"
+"    否则,对于每一个给出了 <值> 的 <名称> 定义一个别名。如果 <值> 的\n"
+"    末尾是空格,那么在展开该别名后,还会继续检查下一个词是否可以\n"
+"    进行别名替换。\n"
 "    \n"
 "    选项:\n"
-"      -p\t以可重用的格式打印所有已定义的别名\n"
+"      -p\t以可重用的格式打印所有已定义的别名\n"
 "    \n"
 "    退出状态:\n"
-"    除非一个没有定义的名字被作为参数提供,否则 alias \n"
-"    返回值为真。"
+"    alias 返回真,除非提供了一个尚未定义别名的 <名称>。"
 
 #: builtins.c:278
 msgid ""
@@ -2605,12 +2576,12 @@ msgid ""
 "    \n"
 "    Return success unless a NAME is not an existing alias."
 msgstr ""
-"ä»\8eå\88«å\90\8då®\9aä¹\89å\88\97表中å\88 é\99¤æ¯\8fä¸\80个â\80\9cå\90\8då­\97â\80\9d。\n"
+"ä»\8eå·²å®\9aä¹\89ç\9a\84å\88«å\90\8då\88\97表中å\88 é\99¤æ¯\8fä¸\80个 <å\90\8d称>。\n"
 "    \n"
 "    选项:\n"
 "      -a\t删除所有的别名定义\n"
 "    \n"
-"    返回成功,除非“名字”不是一个已存在的别名。"
+"    返回成功,除非 <名称> 不是一个已存在的别名。"
 
 #: builtins.c:291
 msgid ""
@@ -2651,30 +2622,31 @@ msgstr ""
 "设定 Readline 键绑定和变量。\n"
 "    \n"
 "    绑定一个键序列到一个 Readline 函数或者宏,或者设定一个\n"
-"    Readline 变量。非选项参数的语法和 ~/.inputrc 文件中的等\n"
-"    同,但是必须作为一个参数被传递,\n"
-"    例如,bind '\"\\C-x\\C-r\": re-read-init-file'.\n"
+"    Readline 变量。非选项参数的语法和 ~/.inputrc 文件的语法相同,\n"
+"    但是必须以单一参数的形式传递给 bind,\n"
+"    例如,bind '\"\\C-x\\C-r\": re-read-init-file'\n"
 "    \n"
 "    选项:\n"
-"      -m  键映射      在此命令执行过程中使用指定的键映射。\n"
-"                     可被接受的键映射名字有 emacs、emacs-standard、emacs-meta、\n"
-"                     emacs-ctlx、vi、vi-move、vi-command、和 vi-insert。\n"
-"      -l             列出函数名称。\n"
-"      -P             列出函数名称和绑定。\n"
-"      -p             以可以重新用作输入的格式列出函数名称和绑定。\n"
-"      -S             列出可以启动宏的键序列以及它们的值\n"
-"      -s             以可以重新用作输入的格式列出可以启动宏的键以及它们的值。\n"
-"      -V             列出变量名成和它们的值\n"
-"      -v             以可以重新用作输入的格式列出变量的名称和它们的值\n"
-"      -q  函数名      查询指定的函数可以由哪些键启动。\n"
-"      -u  函数名      反绑定所有绑定至指定函数的键。\n"
-"      -r  键序列      取消指定键序列的绑定。\n"
-"      -f  文件名      从指定文件中读取键绑定。\n"
-"      -x  键序列:shell命令\t当指定的键序列被输入时,执行指定的 shell 命令。\n"
-"      -X             以可被重用的形式列出用 -x 绑定的键序列和命令。\n"
+"      -m  键映射         在此命令执行过程中使用指定的 <键映射>。可被接受的\n"
+"                         键映射名称有 emacs、emacs-standard、emacs-meta、\n"
+"                         emacs-ctlx、vi、vi-move、vi-command 和 vi-insert。\n"
+"      -l                 列出函数名称。\n"
+"      -P                 列出函数名称和绑定。\n"
+"      -p                 以可以重新用作输入的格式列出函数名称和绑定。\n"
+"      -S                 列出可以启动宏的键序列以及它们的值。\n"
+"      -s                 以可以重新用作输入的格式列出可以启动宏的键序列\n"
+"                         以及它们的值。\n"
+"      -V                 列出变量名称以及它们的值。\n"
+"      -v                 以可以重新用作输入的格式列出变量名称以及它们的值。\n"
+"      -q  函数名         查询指定的函数可以由哪些键启动。\n"
+"      -u  函数名         解除绑定所有绑定至指定函数的键。\n"
+"      -r  键序列         取消 <键序列> 的绑定。\n"
+"      -f  文件名         从 <文件名> 中读取键绑定。\n"
+"      -x  键序列:shell-命令\t当 <键序列> 被输入时,执行 <shell-命令>。\n"
+"      -X                 以可以重新用作输入的格式列出用 -x 绑定的键序列和命令。\n"
 "    \n"
 "    退出状态:\n"
-"    除非使用了无法辨认的选项或者错误发生,否则返回0."
+"    bind 返回 0,除非使用了无法识别的选项,或者有错误发生。"
 
 #: builtins.c:330
 msgid ""
@@ -2686,13 +2658,13 @@ msgid ""
 "    Exit Status:\n"
 "    The exit status is 0 unless N is not greater than or equal to 1."
 msgstr ""
-"退出 for、while 或 until 循环\n"
+"退出 for、while 或 until 循环\n"
 "    \n"
-"    退出一个 FOR、WHILE 或 UNTIL 循环。如果指定了N,则跳出N重\n"
-"    循环\n"
+"    退出一个 FOR、WHILE 或 UNTIL 循环。如果指定了 N,则跳出\n"
+"    从里往外数共 N 重循环。\n"
 "    \n"
 "    退出状态:\n"
-"    退出状态为0除非 N 不大于或等于 1。"
+"    退出状态为 0,除非 N 不大于等于 1。"
 
 #: builtins.c:342
 msgid ""
@@ -2706,11 +2678,11 @@ msgid ""
 msgstr ""
 "继续 for、while 或 until 循环。\n"
 "    \n"
-"    继续当前 FOR、WHILE 或 UNTIL 循环的下一步。\n"
-"    如果指定了 N, 则继续当前的第 N 重循环。\n"
+"    继续进行当前 FOR、WHILE 或 UNTIL 循环的下一次迭代。\n"
+"    如果指定了 N, 则继续进行从里往外数第 N 重循环的下一次迭代。\n"
 "    \n"
 "    退出状态:\n"
-"    退出状态为 0 除非 N 不大于或等于1。"
+"    退出状态为 0,除非 N 不大于等于 1。"
 
 #: builtins.c:354
 msgid ""
@@ -2726,13 +2698,13 @@ msgid ""
 msgstr ""
 "执行 shell 内建。\n"
 "    \n"
-"    带参数 ARGs 执行 SHELL-BUILTIN 内建,并且不做命令查询\n"
-"    在希望以 shell 函数的形式来重新实现 shell 内建,\n"
-"    å¹¶ä¸\94å¸\8cæ\9c\9bå\9c¨å\87½æ\95°ä¹\8bå\86\85æ\89§è¡\8c该 shell å\86\85建ç\9a\84æ\83\85å\86µä¸\8bæ\9c\89ç\94¨å¤\84。\n"
+"    带 <参数> 执行 <shell-内建>,并且跳过命令查找流程。在希望以 shell 函数\n"
+"    的形式重新实现 shell 内建,并且希望在该函数中执行该 shell 内建的情况下\n"
+"    å¾\88æ\9c\89ç\94¨。\n"
 "    \n"
 "    退出状态:\n"
-"    以 SHELL-BUILTIN 内建的退出状态为准,或者如果 SHELL-BUILTIN 不是一个\n"
-"    shell 内建时为假。"
+"    返回 <shell-内建> 的退出状态,或者如果 <shell-内建> 不是一个 shell 内建\n"
+"    时返回假。"
 
 #: builtins.c:369
 msgid ""
@@ -2749,18 +2721,16 @@ msgid ""
 "    Returns 0 unless the shell is not executing a shell function or EXPR\n"
 "    is invalid."
 msgstr ""
-"返回当前子调用的上下文。\n"
+"返回当前子例程调用的上下文。\n"
 "    \n"
-"    不带有 EXPR 时,返回 \"$line $filename\"。带有 EXPR 时,返回\n"
-"    \"$line $subroutine $filename\";这个额外的信息可以被用于提供\n"
-"    æ \88追踪。\n"
+"    不带有 <表达式> 时,返回 \"$line $filename\"。带有 <表达式> 时,\n"
+"    返回 \"$line $subroutine $filename\";这个额外的信息可以用来提供\n"
+"    æ \88è·\9f踪 (stack trace)。\n"
 "    \n"
-"    EXPR 的值 显示了到当前调用帧需要回去多少个调用帧;顶部帧\n"
-"    是第 0 帧。\n"
+"    <表达式> 的值表示从当前调用帧需要回去多少个调用帧;栈顶帧是第 0 帧。\n"
 "    \n"
 "    退出状态:\n"
-"    除非 shell 不在执行一个 shell 函数或者 EXPR 无效,否则返回结\n"
-"    果为0。"
+"    返回 0,除非 shell 不在执行一个 shell 函数,或者 <表达式> 无效。"
 
 #: builtins.c:387
 msgid ""
@@ -2800,27 +2770,29 @@ msgid ""
 msgstr ""
 "改变 shell 工作目录。\n"
 "    \n"
-"    改变当前目录至 DIR 目录。默认的 DIR 目录是 shell 变量 HOME\n"
-"    的值。\n"
+"    改变当前目录至 <目录>。默认的 <目录> 是 shell 变量 HOME 的值。\n"
 "    \n"
-"    变量 CDPATH 定义了含有 DIR 的目录的搜索路径,其中不同的目录名称由冒号 (:)分隔。\n"
-"    一个空的目录名称表示当前目录。如果要切换到的 DIR 由斜杠 (/) 开头,则 CDPATH\n"
-"    不会用上变量。\n"
+"    变量 CDPATH 定义了搜索含有 <目录> 的目录的搜索路径。CDPATH 中额外的\n"
+"    目录名称以冒号 (:) 隔开。空的 CDPATH 表示当前目录。如果 <目录> 以\n"
+"    斜杠 (/) 开头,则不会使用 CDPATH。\n"
 "    \n"
-"    如果路径找不到,并且 shell 选项 `cdable_vars' 被设定,则参数词被假定为一个\n"
-"    变量名。如果该变量有值,则它的值被当作 DIR 目录。\n"
+"    如果找不到目录,并且 shell 选项 \"cdable_vars\" 被设定,则假定参数是一个\n"
+"    变量名。如果该变量有值,则它的值被当作 <目录>。\n"
 "    \n"
 "    选项:\n"
-"        -L\t强制跟随符号链接: 在处理 `..' 之后解析 DIR 中的符号链接。\n"
-"        -P\t使用物理目录结构而不跟随符号链接: 在处理 `..' 之前解析 DIR 中的符号链接。\n"
-"        -e\t如果使用了 -P 参数,但不能成功确定当前工作目录时,返回非零的返回值。\n"
-"        -@\t在支持拓展属性的系统上,将一个有这些属性的文件当作有文件属性的目录。\n"
+"      -L\t强制跟随符号链接: 在处理 \"..\" 之后解析 <目录> 中的符号链接\n"
+"      -P\t使用物理目录结构而不跟随符号链接: 在处理 \"..\" 之前\n"
+"    \t\t解析 <目录> 中的符号链接\n"
+"      -e\t如果使用了 -P 选项,但无法成功确定当前工作目录时,以非零状态退出\n"
+"      -@\t在支持扩展属性的系统上,将一个具有扩展属性的文件当作\n"
+"    \t\t含有文件属性的目录。\n"
 "    \n"
-"    默认情况下跟随符号链接,如同指定 `-L'。\n"
-"    `..' 使用移除向前相邻目录名成员直到 DIR 开始或一个斜杠的方式处理。\n"
+"    默认情况下,跟随符号链接,正如指定了 \"-L\" 一样。\n"
+"    \"..\" 的处理方式是,移除路径名中的上一个组成部分,以 <目录> 的开头\n"
+"    或者斜杠为界限。\n"
 "    \n"
 "    退出状态:\n"
-"    如果目录改变,或在使用 -P 选项时 $PWD 修改成功时返回 0,否则非零。"
+"    如果目录改变,或在使用 -P 选项时 $PWD 修改成功,则返回 0;否则返回非零。"
 
 #: builtins.c:425
 msgid ""
@@ -2841,12 +2813,12 @@ msgstr ""
 "    \n"
 "    选项:\n"
 "      -L\t打印 $PWD 变量的值,如果它包含了当前的工作目录\n"
-"      -P\t打印当前的物理路径,不带有任何的符号链接\n"
+"      -P\t打印当前的物理目录,而不包含任何的符号链接\n"
 "    \n"
-"    默认情况下,`pwd' 的行为和带 `-L' 选项一致\n"
+"    默认情况下,\"pwd\" 的行为和给定了 \"-L\" 时一致。\n"
 "    \n"
 "    退出状态:\n"
-"    除非使用了无效选项或者当前目录不可读,否则返回状态为0。"
+"    返回 0,除非使用了无效的选项,或者无法读取当前目录。"
 
 #: builtins.c:442
 msgid ""
@@ -2871,7 +2843,7 @@ msgid ""
 "    Exit Status:\n"
 "    Always succeeds."
 msgstr ""
-"返回一个成功结果。\n"
+"è¿\94å\9b\9eä¸\80个æ\88\90å\8a\9fç\9a\84ç»\93æ\9e\9cã\80\82\n"
 "    \n"
 "    退出状态:\n"
 "    总是成功。"
@@ -2907,56 +2879,18 @@ msgid ""
 msgstr ""
 "执行一个简单命令或者显示命令的相关信息。\n"
 "    \n"
-"    带 ARGS 参数运行 COMMAND 命令且抑制 shell 函数查询,或显示\n"
-"    指定的 COMMAND 命令的信息。可以在存在相同名称的函数定义的\n"
-"    情况下用于启动磁盘上的命令。\n"
+"    带 <参数> 运行 <命令> 且阻止 shell 函数查找流程,或显示指定的 <命令>\n"
+"    的信息。可以在已存在同名函数的情况下用于启动磁盘上的命令。\n"
 "    \n"
 "    选项:\n"
-"      -p\t使用 PATH 变量的一个默认值以确保所有的标准工具都能被找到。\n"
-"      -v\t打印 COMMAND 命令的描述,和 `type' 内建相似\n"
-"      -V\t打印每个 COMMAND 命令的详细描述\n"
+"      -p    使用 PATH 变量的一个默认值,以确保所有的标准工具都能被找到\n"
+"      -v    打印 <命令> 的描述,和 \"type\" 内建相似\n"
+"      -V    打印每个 <命令> 的更详细的描述\n"
 "    \n"
-"    退出状态\n"
-"    返回 COMMAND 命令的返回状态,或者当找不到 COMMAND 命令时失败。"
+"    退出状态\n"
+"    返回 <命令> 的退出状态,或者当找不到 <命令> 时则返回失败。"
 
 #: builtins.c:490
-#, fuzzy
-#| msgid ""
-#| "Set variable values and attributes.\n"
-#| "    \n"
-#| "    Declare variables and give them attributes.  If no NAMEs are given,\n"
-#| "    display the attributes and values of all variables.\n"
-#| "    \n"
-#| "    Options:\n"
-#| "      -f\trestrict action or display to function names and definitions\n"
-#| "      -F\trestrict display to function names only (plus line number and\n"
-#| "    \t\tsource file when debugging)\n"
-#| "      -g\tcreate global variables when used in a shell function; otherwise\n"
-#| "    \t\tignored\n"
-#| "      -p\tdisplay the attributes and value of each NAME\n"
-#| "    \n"
-#| "    Options which set attributes:\n"
-#| "      -a\tto make NAMEs indexed arrays (if supported)\n"
-#| "      -A\tto make NAMEs associative arrays (if supported)\n"
-#| "      -i\tto make NAMEs have the `integer' attribute\n"
-#| "      -l\tto convert the value of each NAME to lower case on assignment\n"
-#| "      -n\tmake NAME a reference to the variable named by its value\n"
-#| "      -r\tto make NAMEs readonly\n"
-#| "      -t\tto make NAMEs have the `trace' attribute\n"
-#| "      -u\tto convert the value of each NAME to upper case on assignment\n"
-#| "      -x\tto make NAMEs export\n"
-#| "    \n"
-#| "    Using `+' instead of `-' turns off the given attribute.\n"
-#| "    \n"
-#| "    Variables with the integer attribute have arithmetic evaluation (see\n"
-#| "    the `let' command) performed when the variable is assigned a value.\n"
-#| "    \n"
-#| "    When used in a function, `declare' makes NAMEs local, as with the `local'\n"
-#| "    command.  The `-g' option suppresses this behavior.\n"
-#| "    \n"
-#| "    Exit Status:\n"
-#| "    Returns success unless an invalid option is supplied or a variable\n"
-#| "    assignment error occurs."
 msgid ""
 "Set variable values and attributes.\n"
 "    \n"
@@ -2996,38 +2930,38 @@ msgid ""
 "    Returns success unless an invalid option is supplied or a variable\n"
 "    assignment error occurs."
 msgstr ""
-"设定变量值和属性。\n"
+"设定变量值和属性。\n"
 "    \n"
-"    声明变量并且赋予它们属性。如果没有给定名称,\n"
+"    声明变量并且赋予它们属性。如果没有给定 <名称>,\n"
 "    则显示所有变量的属性和值。\n"
 "    \n"
 "    选项:\n"
-"      -f\t限制动作或显示为仅函数名称和定义\n"
-"      -F\t限制仅显示函数名称 (以及调试时显示行号和源文件名)\n"
-"      -g\t当用于 shell 函数内时创建全局变量; 否则忽略\n"
-"      -p\t显示每个 NAME 变量的属性和值\n"
+"      -f\t限制仅操作或显示函数的名称和定义\n"
+"      -F\t限制仅显示函数名称(以及调试时显示行号和源文件名)\n"
+"      -g\t在 shell 函数内部使用时创建全局变量;否则忽略\n"
+"      -I\t当创建局部变量时,继承上一个作用域的同名变量的属性和值\n"
+"      -p\t显示每个 <名称> 的属性和值\n"
 "    \n"
 "    设定属性的选项:\n"
-"      -a\t使 NAME 成为下标数组 (如果支持)\n"
-"      -A\t使 NAME 成为关联数组 (如果支持)\n"
-"      -i\t使 NAME 带有 `integer' (整数)属性\n"
-"      -l\t将 NAME 在赋值时转为小写\n"
-"      -n\t使 NAME 成为指向一个以其值为名称的变量的引用\n"
-"      -r\t将 NAME 变为只读\n"
-"      -t\t使 NAME 带有 `trace' (追踪)属性\n"
-"      -u\t将每个 NAME 在赋值时转为大写\n"
-"      -x\t将 NAME 导出\n"
+"      -a\t使 <名称> 成为索引数组(如果支持)\n"
+"      -A\t使 <名称> 成为关联数组(如果支持)\n"
+"      -i\t使 <名称> 带有 \"整数\" (integer) 属性\n"
+"      -l\t将 <名称> 的值在赋值时转换为小写\n"
+"      -n\t使 <名称> 成为一个对以它的值为名称的变量的引用\n"
+"      -r\t将 <名称> 变为只读\n"
+"      -t\t使 <名称> 带有 \"跟踪\" (trace) 属性\n"
+"      -u\t使 <名称> 的值在赋值时转换为大写\n"
+"      -x\t将 <名称> 导出\n"
 "    \n"
-"    用 `+' 代替 `-' 会关闭指定选项。\n"
+"    用 \"+\" 代替 \"-\" 会关闭指定的属性。\n"
 "    \n"
-"    带有整数属性的变量在赋值时将使用算术估值(见\n"
-"    `let' 命令)\n"
+"    带有 \"整数\" 属性的变量被赋值时将使用算术求值(见 \"let\" 命令)。\n"
 "    \n"
-"    在函数中使用时,`declare' 使 NAME 成为本地变量,和 `local'\n"
-"    命令一致。`-g' 选项抑制此行为。\n"
+"    在函数中使用时,\"declare\" 使 <名称> 成为局部变量,和 \"local\"\n"
+"    命令一致。\"-g\" 选项阻止此行为。\n"
 "    \n"
 "    退出状态:\n"
-"    返回成功,除非提供了无效选项或者发生变量赋值错误。"
+"    返回成功,除非使用了无效的选项,或者发生变量赋值错误。"
 
 #: builtins.c:532
 msgid ""
@@ -3035,9 +2969,9 @@ msgid ""
 "    \n"
 "    A synonym for `declare'.  See `help declare'."
 msgstr ""
-"设变量的值和属性。\n"
+"设变量的值和属性。\n"
 "    \n"
-"    `declare'  的等价形式。参见 `help declare'。"
+"    同 \"declare\"。参见 \"help declare\"。"
 
 #: builtins.c:540
 msgid ""
@@ -3053,17 +2987,18 @@ msgid ""
 "    Returns success unless an invalid option is supplied, a variable\n"
 "    assignment error occurs, or the shell is not executing a function."
 msgstr ""
-"定义本地变量。\n"
+"定义局部变量。\n"
 "    \n"
-"    创建一个以 NAME 为名称的变量,并且将 VALUE 赋值给它。\n"
-"    OPTION 选项可以是任何能被 `declare' 接受的选项。\n"
+"    创建一个名为 <名称> 的变量,并且将 <值> 赋给它。<选项> 可以是任何\n"
+"    能被 \"declare\" 接受的选项。\n"
 "    \n"
-"    本地变量只能在函数内部被使用,它们只能在定义它们的函数内\n"
-"    部以及子函数中可见。\n"
+"    局部变量只能在函数内部使用,它们只对定义它们的函数及其子函数可见。\n"
 "    \n"
 "    退出状态:\n"
-"    返回成功,除非使用了无效的选项、发生了赋值错误或者 shell 不在执行一个函数。"
+"    返回成功,除非使用了无效的选项、发生了赋值错误,或者 shell 不在\n"
+"    执行一个函数。"
 
+# 此字符串可以很好地测试各个 po 编辑器对转义字符的支持是否有 bug(手动斜眼)。poedit(至少在 <=3.0.1 版本中)对 \a 的处理存在 bug,如果你修改了这条翻译,请用纯文本编辑器检查一下 msgstr 里的 \a 前面是否是两个反斜杠。就算你用的不是 poedit,也最好检查一下所有的转义字符,看看是不是和 msgid 里的一致,如不一致请修改。
 #: builtins.c:557
 msgid ""
 "Write arguments to the standard output.\n"
@@ -3102,33 +3037,34 @@ msgid ""
 msgstr ""
 "将参数写到标准输出。\n"
 "    \n"
-"    在标准输出上,显示用空格分割的 ARG 参数后跟一个换行。\n"
+"    在标准输出上显示 <参数>,以空格隔开,后面跟一个换行。\n"
 "    \n"
 "    选项:\n"
 "      -n\t不要追加换行\n"
-"      -e\t启用下列反斜杠转义的解释\n"
-"      -E\t显式地抑制对于反斜杠转义的解释\n"
+"      -e\t启用对下列反斜杠转义字符的解释\n"
+"      -E\t显式地阻止对反斜杠转义字符的解释\n"
 "    \n"
-"    `echo' 对下列反斜杠字符进行转义:\n"
-"      \a\t警告(响铃)\n"
+"    \"echo\" 对下列反斜杠转义字符进行解释:\n"
+"      \\a\t警报(响铃)\n"
 "      \\b\t退格\n"
-"      \\c\t抑制更多的输出\n"
+"      \\c\t阻止后续的输出\n"
 "      \\e\t转义字符\n"
-"      \\f\t换页字符\n"
+"      \\E\t转义字符\n"
+"      \\f\t换页\n"
 "      \\n\t换行\n"
 "      \\r\t回车\n"
-"      \\t\t横å\90\91制表符\n"
-"      \\v\t纵向制表符\n"
+"      \\t\tæ°´å¹³制表符\n"
+"      \\v\t垂直制表符\n"
 "      \\\\\t反斜杠\n"
-"      \\0nnn\t以 NNN(八进制)为 ASCII 码的字符。NNN 可以是 0 到 3 个八进制位\n"
-"      \\xHH\t以 HH(十六进制)为值的八比特字符。HH 可以是一个或两个十六进制位\n"
-"      \\uHHHH\t以 HHHH(十六进制)为值的 Unicode 字符。HHHH 可以是一个到\n"
-"    \t\tå\9b\9b个å\8d\81å\85­è¿\9bå\88¶ä½\8d。\n"
-"      \\UHHHHHHHH 以 HHHHHHHH(十六进制)为值的 Unicode 字符。\n"
-"    \t\tHHHHHHHH 可以是一到八个十六进制位。\n"
+"      \\0nnn\tASCII 码为 NNN(八进制)的字符。NNN 可以是 0 至 3 位的八进制数。\n"
+"      \\xHH\t值为 HH(十六进制)的 8 位字符。HH 可以是一至两位的十六进制数。\n"
+"      \\uHHHH\t值为 HHHH(十六进制)的 Unicode 字符。HHHH 可以是一至四位的\n"
+"    \t\tå\8d\81å\85­è¿\9bå\88¶æ\95°。\n"
+"      \\UHHHHHHHH 值为 HHHHHHHH(十六进制)的 Unicode 字符。\n"
+"    \t\tHHHHHHHH 可以是一至八位的十六进制数。\n"
 "    \n"
 "    退出状态:\n"
-"    返回成功除非有写错误发生。"
+"    返回成功,除非有写入错误发生。"
 
 #: builtins.c:597
 msgid ""
@@ -3142,15 +3078,15 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless a write error occurs."
 msgstr ""
-"å\86\99å\8f\82æ\95°è\87³æ \87å\87\86è¾\93å\87ºè®¾å¤\87。\n"
+"å°\86å\8f\82æ\95°å\86\99å\88°æ \87å\87\86è¾\93å\87º。\n"
 "    \n"
-"    在标准输出设备上显示 ARGs 参数和一个换行。\n"
+"    在标准输出上显示 <参数>,后面跟一个换行。\n"
 "    \n"
 "    选项:\n"
-"      -n\t不加换行\n"
+"      -n\t不要追加换行\n"
 "    \n"
 "    退出状态:\n"
-"    é\99¤é\9d\9eå\86\99é\94\99误å\8f\91ç\94\9fï¼\8cå\90¦å\88\99è¿\94å\9b\9eæ\88\90å\8a\9fã\80\82"
+"    è¿\94å\9b\9eæ\88\90å\8a\9fï¼\8cé\99¤é\9d\9eæ\9c\89å\86\99å\85¥é\94\99误å\8f\91ç\94\9fã\80\82"
 
 #: builtins.c:612
 msgid ""
@@ -3180,27 +3116,26 @@ msgid ""
 msgstr ""
 "启用和禁用 shell 内建。\n"
 "    \n"
-"    启用和禁用 shell 的内建命令。禁用使您能够执行一个和内建\n"
+"    启用和禁用 shell 的内建命令。禁用命令使您能够执行和内建\n"
 "    命令同名的磁盘上的命令,而无须使用完整的路径名。\n"
 "    \n"
-"    \n"
 "    选项:\n"
-"      -a\t打印一个内建的列表,并显示其中每一个是否启用\n"
-"      -n\t禁用每一个 NAME 内建或者显示一个被禁用的内建的列表\n"
-"      -p\t以可重用的格式打印一个内建的列表\n"
-"      -s\t仅打印Posix `special'  内建的名称\n"
+"      -a\t打印内建列表,并显示其中每一个是否启用\n"
+"      -n\t禁用每一个 <名称> 或者显示被禁用的内建的列表\n"
+"      -p\t以可重用的格式打印内建列表\n"
+"      -s\t仅打印 Posix \"特殊\" 内建的名称\n"
 "    \n"
 "    控制动态加载的选项:\n"
-"      -f\t从共享对象 FILENAME 文件中加载 NAME 内建\n"
+"      -f\t从共享对象 <文件名> 中加载 <名称> 内建\n"
 "      -d\t删除以 -f 选项加载的内建\n"
 "    \n"
-"    不带选项时,每一个 NAME 内建都被启用。\n"
+"    不带选项时,启用每一个 <名称>。\n"
 "    \n"
-"    如果要使用 $PATH 中找到的 `test' 而不是 shell 内建的版本,\n"
-"    è¾\93å\85¥ `enable -n test'。\n"
+"    要使用 $PATH 中找到的 \"test\" 而不是 shell 内建的版本,\n"
+"    è¯·è¾\93å\85¥ \"enable -n test\"。\n"
 "    \n"
 "    退出状态:\n"
-"    返回成功,除非 NAME 不是一个 shell 内建或者有错误发生。"
+"    返回成功,除非 <名称> 不是一个 shell 内建,或者有错误发生。"
 
 #: builtins.c:640
 msgid ""
@@ -3214,52 +3149,12 @@ msgid ""
 msgstr ""
 "将参数作为 shell 命令执行。\n"
 "    \n"
-"    将 ARGs 合成一个字符串,用结果作为 shell 的输入,\n"
-"    并且执行得到的命令。\n"
+"    将 <参数> 组合成一个字符串,用结果作为 shell 的输入,并执行得到的命令。\n"
 "    \n"
 "    退出状态:\n"
-"    以命令的状态退出,或者在命令为空的情况下返回成功。"
+"    返回命令的退出状态,或者在命令为空的情况下返回成功。"
 
 #: builtins.c:652
-#, fuzzy
-#| msgid ""
-#| "Parse option arguments.\n"
-#| "    \n"
-#| "    Getopts is used by shell procedures to parse positional parameters\n"
-#| "    as options.\n"
-#| "    \n"
-#| "    OPTSTRING contains the option letters to be recognized; if a letter\n"
-#| "    is followed by a colon, the option is expected to have an argument,\n"
-#| "    which should be separated from it by white space.\n"
-#| "    \n"
-#| "    Each time it is invoked, getopts will place the next option in the\n"
-#| "    shell variable $name, initializing name if it does not exist, and\n"
-#| "    the index of the next argument to be processed into the shell\n"
-#| "    variable OPTIND.  OPTIND is initialized to 1 each time the shell or\n"
-#| "    a shell script is invoked.  When an option requires an argument,\n"
-#| "    getopts places that argument into the shell variable OPTARG.\n"
-#| "    \n"
-#| "    getopts reports errors in one of two ways.  If the first character\n"
-#| "    of OPTSTRING is a colon, getopts uses silent error reporting.  In\n"
-#| "    this mode, no error messages are printed.  If an invalid option is\n"
-#| "    seen, getopts places the option character found into OPTARG.  If a\n"
-#| "    required argument is not found, getopts places a ':' into NAME and\n"
-#| "    sets OPTARG to the option character found.  If getopts is not in\n"
-#| "    silent mode, and an invalid option is seen, getopts places '?' into\n"
-#| "    NAME and unsets OPTARG.  If a required argument is not found, a '?'\n"
-#| "    is placed in NAME, OPTARG is unset, and a diagnostic message is\n"
-#| "    printed.\n"
-#| "    \n"
-#| "    If the shell variable OPTERR has the value 0, getopts disables the\n"
-#| "    printing of error messages, even if the first character of\n"
-#| "    OPTSTRING is not a colon.  OPTERR has the value 1 by default.\n"
-#| "    \n"
-#| "    Getopts normally parses the positional parameters ($0 - $9), but if\n"
-#| "    more arguments are given, they are parsed instead.\n"
-#| "    \n"
-#| "    Exit Status:\n"
-#| "    Returns success if an option is found; fails if the end of options is\n"
-#| "    encountered or an error occurs."
 msgid ""
 "Parse option arguments.\n"
 "    \n"
@@ -3301,41 +3196,37 @@ msgid ""
 msgstr ""
 "解析选项参数。\n"
 "    \n"
-"    getopts 被 shell 过程用于解析可定位的参数作为选项。\n"
+"    getopts 可在 shell 过程中使用,将位置参数解析为选项。\n"
 "    \n"
 "    \n"
-"    OPTSTRING 字符串包含待识别的选项字母;如果一个字母后面跟\n"
-"    着分号,则该选项需要一个参数,而该参数应用空格与选项分开。\n"
+"    <选项字符串> 包含待识别的选项字母;如果一个字母后面跟着一个冒号,\n"
+"    则该选项需要一个参数,参数与选项之间应当用空格隔开。\n"
 "    \n"
 "    \n"
-"    每次启动时,getopts 会将下一个选项放到 shell 变量 $name\n"
-"    中,如果 name 变量不存在则先将其初始化,而下一个待处\n"
-"    理的参数序号放入 shell 变量 OPTIND 中。OPTIND 变量在每\n"
-"    次 shell 或者 shell 脚本启动时都被初始化为1。当一个选项要\n"
-"    求有一个参数时,getopts 将参数放入 shell 变量 OPTARG\n"
-"    中。\n"
+"    每次被调用时,getopts 会将下一个选项放到 shell 变量 $<名称> 中,\n"
+"    如果 <名称> 变量不存在则先将其初始化,并将下一个待处理的参数的序号\n"
+"    放入 shell 变量 OPTIND 中。OPTIND 变量在每次 shell 或者 shell 脚本\n"
+"    启动时都被初始化为 1。当一个选项要求有一个参数时,getopts 将该参数\n"
+"    放入 shell 变量 OPTARG 中。\n"
 "    \n"
-"    getopts 有两种报告错误的方法。如果 OPTSTRING 变量的第\n"
-"    一个字符是冒号,getopts 使用沉默错误报告。在这种模式\n"
-"    下,不会打印错误消息。如果看到了一个无效的选项,\n"
-"    getopts 将找到的选项字符放至 OPTARG 变量中。如果一个必\n"
-"    须的选项没有找到,getopts 放一个 ':' 到 NAME 变量中并且设\n"
-"    置 OPTARG 变量为找到的选项字符。如果 getopts 不在沉默模\n"
-"    式中,并且遇到了一个无效的选项,getopts 放置一个 '?' 到 NAME \n"
-"    变量中并且取消设定 OPTARG变量。如果必须的选项没有找到,\n"
-"    一个'?'会被放入 NAME变量中,OPTARG 将被取消设定,并且会\n"
-"    打印一个诊断信息。\n"
+"    getopts 有两种报告错误的方法。如果 <选项字符串> 的第一个字符是\n"
+"    冒号,getopts 使用沉默错误报告。在此模式下,不会打印错误消息。\n"
+"    如果遇到了一个无效的选项,getopts 将找到的选项字符放入 OPTARG\n"
+"    变量中。如果没有找到必需的参数,getopts 放置一个 \":\" 到 <名称>\n"
+"    变量中,并且将 OPTARG 变量设置为找到的选项字符。如果 getopts 不处于\n"
+"    沉默模式,并且遇到了一个无效的选项,getopts 放置 \"?\" 到 <名称> 变量\n"
+"    中并且取消设定 OPTARG 变量。如果没有找到必需的参数,一个 \"?\" 会被\n"
+"    放入 <名称> 变量中,OPTARG 将被取消设定,并且会打印一个诊断信息。\n"
 "    \n"
-"    如果 shell 变量 OPTERR 的值为0,getopts 禁用\n"
-"    错误信息的打印,即使 OPTSTRING 变量的第一个字符不是一\n"
-"    个冒号。OPTERR 的默认值为1.\n"
+"    如果 shell 变量 OPTERR 的值为 0,getopts 会禁用错误信息的打印,\n"
+"    即使 <选项字符串> 的第一个字符不是冒号。OPTERR 的默认值为 1。\n"
 "    \n"
-"    getopts 通常解析可定位的参数($0 - $9),不过如果提供了\n"
-"    更多的参数,它们反而会被解析。\n"
+"    getopts 通常解析位置参数,不过如果在 <参数> 中提供了参数,则转而\n"
+"    解析它们。\n"
 "    \n"
 "    退出状态:\n"
-"    如果一个选项被找到则返回成功;如果遇到了选项的结尾或者\n"
-"    有错误发生则返回失败。"
+"    如果找到了一个选项,则返回成功;如果遇到了选项的末尾或者有错误发生,\n"
+"    则返回失败。"
 
 #: builtins.c:694
 msgid ""
@@ -3358,20 +3249,19 @@ msgid ""
 msgstr ""
 "使用指定命令替换 shell。\n"
 "    \n"
-"    执行 COMMAND 命令,以指定的程序替换这个 shell。\n"
-"    ARGUMENTS 参数成为 COMMAND命令的参数。如果\n"
-"    没有指定COMMAND 命令,则任何的重定向在当前 shell 中生效。\n"
+"    执行 <命令>,以指定的程序替换这个 shell。以 <参数> 作为 <命令> 的参数。\n"
+"    如果没有指定 <命令>,则任何的 <重定向> 都在当前 shell 中生效。\n"
 "    \n"
 "    选项:\n"
-"      -a 名称\t作为第0个参数传递给 COMMAND 命令\n"
-"      -c\t\t在一个空环境中执行 COMMAND 命令\n"
-"      -l\t\t在COMMAND 命令的第0个参数中加一个短线\n"
+"      -a 名称\t将 <名称> 作为第 0 个参数传递给 <命令>\n"
+"      -c\t在一个空的环境中执行 <命令>\n"
+"      -l\t在 <命令> 的第 0 个参数中放置一个短横线 (-)\n"
 "    \n"
-"    如果命令不能被执行,则退出一个非交互式的 shell,除非\n"
-"   shell 选项`execfail' 已经设定。\n"
+"    如果无法执行命令,则退出一个非交互式的 shell,除非设定了 shell 选项\n"
+"    \"execfail\"。\n"
 "    \n"
 "    退出状态:\n"
-"    返回成功除非 COMMAND 命令没有找到或者出现一个重定向错误。"
+"    返回成功,除非未找到 <命令>,或者出现一个 <重定向> 错误。"
 
 #: builtins.c:715
 msgid ""
@@ -3380,10 +3270,10 @@ msgid ""
 "    Exits the shell with a status of N.  If N is omitted, the exit status\n"
 "    is that of the last command executed."
 msgstr ""
-"退出shell。\n"
+"退出 shell。\n"
 "    \n"
-"    以状态 N 退出 shell。  如果 N 被省略,则退出状态\n"
-"    为最后一个执行的命令的退出状态。"
+"    退出 shell,退出状态为 N。如果 N 被省略,则退出状态为最后一个执行的\n"
+"    命令的退出状态。"
 
 #: builtins.c:724
 msgid ""
@@ -3392,10 +3282,10 @@ msgid ""
 "    Exits a login shell with exit status N.  Returns an error if not executed\n"
 "    in a login shell."
 msgstr ""
-"退出一个登录 shell.\n"
+"退出一个登录 shell\n"
 "    \n"
-"    以状态 N 退出一个登录 shell。如果不在登录 shell 中执行,则\n"
-"    返回一个错误。"
+"    退出一个登录 shell,退出状态为 N。如果不在登录 shell 中执行,\n"
+"    返回一个错误。"
 
 #: builtins.c:734
 msgid ""
@@ -3425,27 +3315,25 @@ msgid ""
 msgstr ""
 "从历史列表中显示或者执行命令。\n"
 "    \n"
-"    fc 被用于从历史列表中列出或者重新编辑并执行命令。\n"
-"    FIRST 和 LAST 变量可以是数字用于指定范围,或者 FIRST 可以是\n"
-"    字符串,意味着以这个字符串打头的最近的一个命令。\n"
-"    \n"
+"    fc 可用于从历史列表中列出命令,或者编辑并重新执行命令。\n"
+"    <起始> 和 <终止> 可以是用来指定范围的数字,或者 <起始> 可以是\n"
+"    字符串,表示以这个字符串打头的最近的一个命令。\n"
 "    \n"
 "    选项:\n"
-"      -e ENAME\t选择使用哪个编辑器。默认的是 FCEDIT, 然后是 EDITOR,\n"
-"    \t\t然后是 vi\n"
-"      -l \t列出行而不编辑\n"
-"      -n\t列举时省略行号\n"
-"      -r\t反转行的顺序(最新行在前)\n"
+"      -e 编辑器名\t选择使用哪个编辑器。默认使用 FCEDIT,然后\n"
+"    \t\t\t是 EDITOR,然后是 vi\n"
+"      -l\t\t列出行而不编辑\n"
+"      -n\t\t列举时省略行号\n"
+"      -r\t\t反转行的顺序(新的在前)\n"
 "    \n"
-"    用 `fc -s [模式=替换 ...] [命令]' 的格式,COMMAND 命令会在 OLD=NEW\n"
-"    替换之后被重新执行。\n"
-"    \n"
-"    r='fc -s' 是一个有用的别名,这样的话输入 `r cc'会执行最后一个以 `cc'\n"
-"    开头的命令,输入 `r'会重新执行最后一个命令。\n"
+"    使用 \"fc -s [模式=替换串 ...] [命令]\" 的格式,<命令> 会在完成\n"
+"    <模式>=<替换串> 的替换之后被重新执行。\n"
 "    \n"
+"    r='fc -s' 是一个有用的别名,这样的话输入 \"r cc\" 会执行最后一个以 \"cc\"\n"
+"    开头的命令,输入 \"r\" 会重新执行最后一个命令。\n"
 "    \n"
 "    退出状态:\n"
-"    返回成功,或者执行的命令的状态;如果错误发生则返回非零。"
+"    返回成功,或者执行的命令的状态;如果有错误发生,则返回非零。"
 
 #: builtins.c:764
 msgid ""
@@ -3460,12 +3348,11 @@ msgid ""
 msgstr ""
 "将任务移至前台。\n"
 "    \n"
-"    将以 JOB_SPEC 标识的任务放至前台,使其成为\n"
-"    当前任务。如果 JOB_SPEC 不存在,shell 观念中的当前任务 \n"
-"    将被使用。\n"
+"    将以 <任务说明符> 指定的任务放至前台,使其成为当前任务。\n"
+"    如果没有给出 <任务说明符>,shell 观念中的当前任务将会被使用。\n"
 "    \n"
 "    退出状态:\n"
-"    æ\94¾è\87³å\89\8då\8f°ç\9a\84å\91½ä»¤ç\8a¶æ\80\81ï¼\8cæ\88\96è\80\85å½\93é\94\99误å\8f\91ç\94\9fæ\97¶ä¸º失败。"
+"    æ\94¾è\87³å\89\8då\8f°ç\9a\84å\91½ä»¤ç\9a\84ç\8a¶æ\80\81ï¼\8cæ\88\96è\80\85å½\93é\94\99误å\8f\91ç\94\9fæ\97¶å\88\99è¿\94å\9b\9e失败。"
 
 #: builtins.c:779
 msgid ""
@@ -3478,14 +3365,13 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless job control is not enabled or an error occurs."
 msgstr ""
-"移动任务至后台。\n"
+"将任务移至后台。\n"
 "    \n"
-"    将 JOB_SPEC 标识的任务放至后台,就像它们\n"
-"    是带 `&' 启动的一样。如果 JOB_SPEC 不存在,shell 观念中的\n"
-"    当前任务将会被使用。\n"
+"    将以 <任务说明符> 指定的任务放至后台,就像它们是带 \"&\" 启动的一样。\n"
+"    如果没有给出 <任务说明符>,shell 观念中的当前任务将会被使用。\n"
 "    \n"
 "    退出状态:\n"
-"    返回成功除非任务管理没有启用或者错误发生。"
+"    返回成功,除非任务控制没有启用,或者有错误发生。"
 
 #: builtins.c:793
 msgid ""
@@ -3511,23 +3397,23 @@ msgid ""
 msgstr ""
 "记住或显示程序位置。\n"
 "    \n"
-"    ç¡®å®\9a并记ä½\8fæ¯\8fä¸\80个ç»\99å®\9a NAME å\90\8d称ç\9a\84å\91½ä»¤ç\9a\84å®\8cæ\95´è·¯å¾\84。\n"
+"    ç¡®å®\9a并记ä½\8fæ¯\8f个å\91½ä»¤ <å\90\8d称> ç\9a\84å®\8cæ\95´è·¯å¾\84å\90\8d。\n"
 "    如果不提供参数,则显示已经记住的命令的信息。\n"
 "    \n"
 "    选项:\n"
-"      -d\t\t忘记每一个已经记住的 NAME 的位置\n"
-"      -l\t\t以可作为输入重用的格式显示\n"
-"      -p pathname\t使用 pathname 路径作为 NAME 命令的全路径\n"
-"      -r\t\t忘记所有记住的位置\n"
-"      -t\t\t打印记住的每一个 NAME 名称的位置,如果指定了多个\n"
-"    \t\tNAME 名称,则每个位置前面会加上相应的 NAME 名称\n"
-"    \t\t\n"
+"      -d\t忘记每一个 <名称> 的已经记住的位置\n"
+"      -l\t以可重新用作输入的格式显示\n"
+"      -p 路径名\t使用 <路径名> 作为 <命令> 的完整路径名\n"
+"      -r\t忘记所有已经记住的位置\n"
+"      -t\t打印每一个 <名称> 的已经记住的位置,如果指定了多个\n"
+"    \t\t<名称>,则在每个位置前面加上对应的 <名称>\n"
+"    \n"
 "    参数:\n"
-"      NAME\t\t每个 NAME 名称会在 $PATH 路径变量中被搜索,并且添加到记住的命令\n"
-"    列表中。\n"
+"      名称\t会在 $PATH 中搜索每个 <名称>,并且添加到已经记住的命令\n"
+"    \t\t列表中。\n"
 "    \n"
 "    退出状态:\n"
-"    返回成功,除非 NAME 命令没有找到或者使用了无效的选项。"
+"    返回成功,除非没有找到 <名称>,或者使用了无效的选项。"
 
 #: builtins.c:818
 msgid ""
@@ -3551,21 +3437,19 @@ msgid ""
 msgstr ""
 "显示内建命令的相关信息。\n"
 "    \n"
-"    显示内建命令的简略信息。如果指定了 PATTERN 模式,\n"
-"    给出所有匹配 PATTERN 模式的命令的详细帮助,否则打\n"
-"    印一个帮助主题列表\n"
+"    显示内建命令的简略信息。如果指定了 <模式>,给出所有匹配 <模式>\n"
+"    的命令的详细帮助,否则打印帮助主题列表。\n"
 "    \n"
 "    选项:\n"
 "      -d\t输出每个主题的简短描述\n"
-"      -m\t以伪 man 手册的格式显示使用方法\n"
-"      -s\t为每一个匹配 PATTERN 模式的主题仅显示一个用法\n"
-"    \t简介\n"
+"      -m\t以伪 man 手册的格式显示用法\n"
+"      -s\t仅对每一个匹配 <模式> 的主题输出简短的用法提要\n"
 "    \n"
 "    参数:\n"
-"      PATTERN\t指定帮助主题的模式\n"
+"      模式\t用来确定帮助主题的模式\n"
 "    \n"
 "    退出状态:\n"
-"    è¿\94å\9b\9eæ\88\90å\8a\9fï¼\8cé\99¤é\9d\9eæ\9cªæ\89¾å\88° PATTERN æ¨¡å¼\8f没æ\9c\89æ\89¾å\88°æ\88\96è\80\85使ç\94¨äº\86æ\97 æ\95\88选项。"
+"    è¿\94å\9b\9eæ\88\90å\8a\9fï¼\8cé\99¤é\9d\9e没æ\9c\89æ\89¾å\88° <模å¼\8f>ï¼\8cæ\88\96è\80\85使ç\94¨äº\86æ\97 æ\95\88ç\9a\84选项。"
 
 #: builtins.c:842
 msgid ""
@@ -3602,32 +3486,30 @@ msgid ""
 msgstr ""
 "显示或操纵历史列表。\n"
 "    \n"
-"    带行号显示历史列表,将每个被修改的条目加上 `*' 前缀。\n"
+"    带行号显示历史列表,将每个被修改的条目加上 \"*\" 前缀。\n"
 "    参数 N 会仅列出最后的 N 个条目。\n"
 "    \n"
 "    选项:\n"
-"      -c\t删除所有条目从而清空历史列表\n"
-"      -d 偏移量\t从指定位置删除历史列表。负偏移量将从历史条目末尾\n"
-"    \t\tå¼\80å§\8b计数\n"
+"      -c\t删除所有条目从而清空历史列表\n"
+"      -d 偏移量\t删除位于 <偏移量> 的历史条目。负的 <偏移量> 表示从\n"
+"    \t\tå\8e\86å\8f²å\88\97表æ\9c«å°¾å¼\80å§\8bå\80\92数\n"
 "    \n"
-"      -a\t将当前会话的历史行追加到历史文件中\n"
-"      -n\t从历史文件中读取所有未被读取的行\n"
-"    \t\t并且将它们附加到历史列表\n"
+"      -a\t将当前会话的历史追加到历史文件中\n"
+"      -n\t从历史文件中读取所有未被读取的行,并且将它们追加到历史列表\n"
 "      -r\t读取历史文件并将内容追加到历史列表中\n"
 "      -w\t将当前历史写入到历史文件中\n"
 "    \n"
-"      -p\t对每一个 ARG 参数展开历史并显示结果,而不存储到历史列表中\n"
-"      -s\t以单条记录追加 ARG 到历史列表中\n"
+"      -p\t对每一个 <参数> 执行历史展开并显示结果,而不存储到历史列表中\n"
+"      -s\t将 <参数> 作为单一条目追加到历史列表中\n"
 "    \n"
-"    如果给定了 FILENAME 文件名,则它将被作为历史文件。否则\n"
-"    如果 $HISTFILE 变量有值的话使用之,不然使用 ~/.bash_history 文件。\n"
+"    如果给定了 <文件名>,则将其用作历史文件。否则,如果 HISTFILE 变量\n"
+"    有值的话,则使用它,否则使用 ~/.bash_history 文件。\n"
 "    \n"
-"    如果 $HISTTIMEFORMAT 变量被设定并且不为空,它的值会被用于\n"
-"    strftime(3) 的格式字符串来打印与每一个显示的历史条目想关联的\n"
-"    时间戳,否则不打印时间戳。\n"
+"    如果 HISTTIMEFORMAT 变量被设定并且不为空,它的值会被用作 strftime(3)\n"
+"    的格式字符串,以打印每个显示的历史条目的时间戳。否则,不打印时间戳。\n"
 "    \n"
 "    退出状态:\n"
-"    返回成功,除非使用了无效的选项或者发生错误。"
+"    返回成功,除非使用了无效的选项,或者有错误发生。"
 
 #: builtins.c:879
 msgid ""
@@ -3654,22 +3536,22 @@ msgid ""
 msgstr ""
 "显示任务状态。\n"
 "    \n"
-"    列出活动的任务。JOBSPEC 限制仅输出指定的任务。\n"
-"    ä¸\8d带é\80\89项æ\97¶ï¼\8cæ\89\80æ\9c\89æ´»å\8a¨ä»»å\8a¡ç\9a\84ç\8a¶æ\80\81é\83½ä¼\9aæ\98¾ç¤º。\n"
+"    列出活动的任务。<任务说明符> 限制仅输出指定的任务。\n"
+"    ä¸\8d带é\80\89项æ\97¶ï¼\8cæ\98¾ç¤ºæ\89\80æ\9c\89æ´»å\8a¨ä»»å\8a¡ç\9a\84ç\8a¶æ\80\81。\n"
 "    \n"
 "    选项:\n"
-"      -l\t在正常信息基础上列出进程号\n"
-"      -n\t仅列出上次通之后改变了状态的进程\n"
-"      -p\t仅列出进程\n"
+"      -l\t在正常信息的基础上列出进程 ID\n"
+"      -n\t仅列出上次通之后改变了状态的进程\n"
+"      -p\t仅列出进程 ID\n"
 "      -r\t限制仅输出运行中的任务\n"
-"      -s\t限制仅输出停止的任务\n"
+"      -s\té\99\90å\88¶ä»\85è¾\93å\87ºå·²å\81\9cæ­¢ç\9a\84ä»»å\8a¡\n"
 "    \n"
-"    如果使用了 -x 选项,ARG 参数中的所有任务声明会被替换为该任务\n"
-"    的进程组头领的进程号,然后执行 COMMAND 命令。\n"
+"    如果使用了 -x 选项,<参数> 中的所有任务说明符会被替换为该任务\n"
+"    的进程组头领的进程 ID,然后用替换后的参数执行 <命令>。\n"
 "    \n"
 "    退出状态:\n"
 "    返回成功,除非使用了无效的选项或者有错误发生。\n"
-"    如果使用 -x 选项,则返回 COMMAND 命令的退出状态。"
+"    如果使用了 -x 选项,则返回 <命令> 的退出状态。"
 
 #: builtins.c:906
 msgid ""
@@ -3689,17 +3571,17 @@ msgid ""
 msgstr ""
 "从当前 shell 中删除任务。\n"
 "    \n"
-"    从活动任务表中删除每一个 JOBSPEC 参数。不带任何\n"
-"    JOBSPEC 参数时,shell 使用观念中的当前任务。\n"
+"    从活动任务列表中删除每一个 <任务说明符> 参数。不带任何 <任务说明符>\n"
+"    时,shell 使用它的观念中的当前任务。\n"
 "    \n"
 "    选项:\n"
-"      -a\t如果不提供 JOBSPEC 参数,则删除所有任务\n"
-"      -h\tæ \87è¯\86æ¯\8f个 JOBSPEC 任务,从而当 shell 接收到 SIGHUP\n"
+"      -a\t如果不提供 <任务说明符>,则删除所有任务\n"
+"      -h\tæ \87è®°æ¯\8f个 <ä»»å\8a¡è¯´æ\98\8e符> å¯¹åº\94ç\9a\84任务,从而当 shell 接收到 SIGHUP\n"
 "    \t\t信号时不发送 SIGHUP 给指定任务\n"
 "      -r\t仅删除运行中的任务\n"
 "    \n"
 "    退出状态:\n"
-"    返回成功除非使用了无效的选项或者 JOBSPEC 声明。"
+"    返回成功,除非使用了无效的选项或者 <任务说明符>。"
 
 #: builtins.c:925
 msgid ""
@@ -3725,21 +3607,22 @@ msgid ""
 msgstr ""
 "向一个任务发送一个信号。\n"
 "    \n"
-"    向以 PID 进程号或者 JOBSPEC 任务声明指定的进程发送一个以\n"
-"    SIGSPEC 信号声明或 SIGNUM 信号编号命名的信号。如果没有指定\n"
-"    SIGSPEC 或 SIGNUM,那么假定发送 SIGTERM 信号。\n"
+"    向以 <PID> 或者 <任务说明符> 指定的进程发送一个以 <信号说明符> 或\n"
+"    <信号编号> 指定的信号。如果没有指定 <信号说明符> 和 <信号编号>,\n"
+"    那么假定发送 SIGTERM 信号。\n"
 "    \n"
 "    选项:\n"
-"      -s sig\tSIG 是信号名称\n"
-"      -n sig\tSIG 是信号编号\n"
-"      -l\t列出信号名称;如果参数后跟 `-l'则被假设为信号编号,\n"
-"    \t\t而相应的信号名称会被列出\n"
+"      -s 信号\t<信号> 是信号名称\n"
+"      -n 信号\t<信号> 是信号编号\n"
+"      -l\t列出所有信号名称;如果 \"-l\" 后有参数,则假定它们是信号编号,\n"
+"    \t\t并列出对应的信号名称\n"
+"      -L\t同 -l\n"
 "    \n"
-"    Kill 成为 shell 内建有两个理由:它允许使用任务编号而不是进程号,\n"
-"    并且在可以创建的进程数上限达到是允许进程被杀死。\n"
+"    kill 成为 shell 内建有两个理由:它允许使用任务 ID 代替进程 ID,\n"
+"    并且在您可以创建的进程数达到上限时仍可以杀死进程。\n"
 "    \n"
 "    退出状态:\n"
-"    返回成功,除非使用了无效的选项或者有错误发生。"
+"    返回成功,除非使用了无效的选项或者有错误发生。"
 
 #: builtins.c:949
 msgid ""
@@ -3784,22 +3667,20 @@ msgid ""
 "    Exit Status:\n"
 "    If the last ARG evaluates to 0, let returns 1; let returns 0 otherwise."
 msgstr ""
-"估值算术表达式。\n"
-"    \n"
-"    将每个 ARG 参赛作为算术表达式来估值。估值的计算以定宽的整\n"
-"    数完成,不带溢出检测,不过除 0 是被置陷阱的并且会报一个错\n"
-"    误。下列操作符被按照相同的算术优先级组合。列表的顺序按照\n"
-"    优先级从高至低。\n"
+"对算术表达式进行求值。\n"
 "    \n"
+"    将每个 <参数> 作为算术表达式进行求值。求值在固定宽度的整数中完成,\n"
+"    没有溢出检测,不过除以 0 的异常会被捕获,并且会报一个错误。下面的运算符\n"
+"    列表中,同一行的运算符的优先级相等。列表按照优先级从高到低进行排序。\n"
 "    \n"
-"    \tid++, id--\t变量后置加,后置减\n"
-"    \t++id, --id\t变量前置加,前置减\n"
-"    \t-, +\t\t一元减法,一元加法\n"
-"    \t!, ~\t\t逻辑和位取反\n"
+"    \tid++, id--\t变量的后缀自增、后缀自减\n"
+"    \t++id, --id\t变量的前缀自增、前缀自减\n"
+"    \t-, +\t\t一元负号、正号\n"
+"    \t!, ~\t\t逻辑和位取反\n"
 "    \t**\t\t指数\n"
-"    \t*, /, %\t\t乘法,除法,取余数\n"
-"    \t+, -\t\tå¢\9eå\8a ï¼\8cå\87\8få°\91\n"
-"    \t<<, >>\t\t向左和向右按位移位\n"
+"    \t*, /, %\t\t乘法、除法、取余数\n"
+"    \t+, -\t\tå\8a æ³\95ã\80\81å\87\8fæ³\95\n"
+"    \t<<, >>\t\t按位左移、按位右移\n"
 "    \t<=, >=, <, >\t比较\n"
 "    \t==, !=\t\t等于,不等于\n"
 "    \t&\t\t按位与\n"
@@ -3808,18 +3689,19 @@ msgstr ""
 "    \t&&\t\t逻辑与\n"
 "    \t||\t\t逻辑或\n"
 "    \texpr ? expr : expr\n"
-"    \t\t\t条件操作符\n"
+"    \t\t\t条件运算符\n"
 "    \t=, *=, /=, %=,\n"
 "    \t+=, -=, <<=, >>=,\n"
 "    \t&=, ^=, |=\t赋值\n"
 "    \n"
-"    Shell 变量允许作为操作数。表达式中的变量的名称会被取代以值\n"
-"    (强制转换为定宽的整数)。表达式中的变量不需要打开整数属性。\n"
+"    shell 变量允许作为操作数。变量的名称会被它的值替代(强制转换为固定\n"
+"    宽度的整数)。变量不需要打开 \"整数\" 属性就可以在表达式中使用。\n"
 "    \n"
-"    操作符按照优先级进行估值。括号中的子表达式将被先估值,并可取代上述表达式规则。\n"
+"    运算符按照优先级顺序进行求值。括号中的子表达式将最先求值,\n"
+"    并可以覆盖上述优先级规则。\n"
 "    \n"
 "    退出状态:\n"
-"    如果最后一个 ARG 参数估值为 0,则 let 返回 1; 否则 let 返回 0。"
+"    如果最后一个 <参数> 求值结果为 0,则 let 返回 1; 否则 let 返回 0。"
 
 #: builtins.c:994
 msgid ""
@@ -3830,7 +3712,8 @@ msgid ""
 "    splitting, and the first word is assigned to the first NAME, the second\n"
 "    word to the second NAME, and so on, with any leftover words assigned to\n"
 "    the last NAME.  Only the characters found in $IFS are recognized as word\n"
-"    delimiters.\n"
+"    delimiters. By default, the backslash character escapes delimiter characters\n"
+"    and newline.\n"
 "    \n"
 "    If no NAMEs are supplied, the line read is stored in the REPLY variable.\n"
 "    \n"
@@ -3866,40 +3749,41 @@ msgid ""
 "    (in which case it's greater than 128), a variable assignment error occurs,\n"
 "    or an invalid file descriptor is supplied as the argument to -u."
 msgstr ""
-"从标准输入读取一行并将其分为不同的域。\n"
+"从标准输入读取一行,并将其分割为不同的字段。\n"
 "    \n"
-"    从标准输入读取单独的一行,或者如果使用了 -u 选项,从文件描述符 FD 中读取。\n"
-"    该行被分割成域,如同词语分割一样,并且第一个词被赋值给第一个 NAME 变量,第二\n"
-"    个词被赋值给第二个 NAME 变量,如此继续,直到剩下所有的词被赋值给最后一个 NAME\n"
-"    变量。只有 $IFS 变量中的字符被认作是词语分隔符。\n"
+"    从标准输入读取单独的一行,或者如果使用了 -u 选项,从文件描述符 <FD> 中\n"
+"    读取。该行会被分割成字段,如同分割词语一样,并且第一个词被赋值给第一个\n"
+"    <名称>,第二个词被赋值给第二个 <名称>,以此类推,剩下所有的词被赋值给\n"
+"    最后一个 <名称>。只有 $IFS 中的字符会被视为词语分隔符。默认情况下,\n"
+"    反斜杠字符可以转义分隔符和换行符。\n"
 "    \n"
-"    如果没有提供 NAME 变量,则读取的行被存放在 REPLY 变量中。\n"
+"    如果没有提供 <名称>,则读取的行被存放在 REPLY 变量中。\n"
 "    \n"
 "    选项:\n"
-"      -a array\t将词语赋值给 ARRAY 数组变量的序列下标成员,从零开始\n"
-"      -d delim\t持续读取直到读入 DELIM 变量中的第一个字符,而不是换行符\n"
+"      -a 数组\t将词语按顺序赋值给 <数组> 变量的各个成员,索引从零开始\n"
+"      -d 分隔符\t继续读取,直到遇到 <分隔符> 的第一个字符,而不是换行符\n"
 "      -e\t使用 Readline 获取行\n"
-"      -i text\t使用 TEXT 文本作为 Readline 的初始文字\n"
-"      -n nchars\t读取 nchars 个字符之后返回,而不是等到读取换行符。\n"
-"    \t\tä½\86æ\98¯å\88\86é\9a\94符ä»\8dç\84¶æ\9c\89æ\95\88ï¼\8cå¦\82æ\9e\9cé\81\87å\88°å\88\86é\9a\94符ä¹\8bå\89\8d读å\8f\96äº\86ä¸\8d足 nchars ä¸ªå­\97符ã\80\82\n"
-"      -N nchars\t在准确读取了 nchars 个字符之后返回,除非遇到文件结束符或者读超时,\n"
-"    \t\t任何的分隔符都被忽略\n"
-"      -p prompt\tå\9c¨å°\9dè¯\95读å\8f\96ä¹\8bå\89\8dè¾\93å\87º PROMPT æ\8f\90示符并ä¸\94ä¸\8d带\n"
-"    \t\t换行符\n"
+"      -i 文本\t使用 <文本> 作为 Readline 的初始文字\n"
+"      -n 字符数\t读取 <字符数> 个字符之后返回,而不是等到读取换行符。\n"
+"    \t\tä½\86æ\98¯å¦\82æ\9e\9c读å\8f\96äº\86ä¸\8då\88° <å­\97符æ\95°> ä¸ªå­\97符就é\81\87å\88°äº\86å\88\86é\9a\94符ï¼\8c\n"
+"    \t\t则分隔符仍然生效\n"
+"      -N 字符数\t仅在恰好读取了 <字符数> 个字符之后返回,除非遇到 EOF\n"
+"    \t\tæ\88\96è\80\85读å\8f\96è¶\85æ\97¶ã\80\82忽ç\95¥æ\89\80æ\9c\89ç\9a\84å\88\86é\9a\94符\n"
+"      -p 提示符\t在尝试进行读取之前先输出 <提示符>(不加换行)\n"
 "      -r\t不允许反斜杠转义任何字符\n"
-"      -s\t不回显终端的任何输入\n"
-"      -t timeout\t如果在 TIMEOUT 秒内没有读取一个完整的行则超时并且返回失败。\n"
-"    \t\tTMOUT 变量的值是默认的超时时间。TIMEOUT 可以是小数。\n"
-"    \t\t如果 TIMEOUT 是 0,那么仅当在指定的文件描述符上输入有效的时候,\n"
-"    \t\tread 才返回成功;否则它将立刻返回而不尝试读取任何数据。\n"
-"    \t\t如果超过了超时时间,则è¿\94å\9b\9eç\8a¶æ\80\81ç \81大äº\8e 128\n"
-"      -u fd\t从文件描述符 FD 中读取,而不是标准输入\n"
+"      -s\t不回显来自终端的输入\n"
+"      -t 超时\t如果在 <超时> 秒内没有读取一个完整的行则超时并且返回失败。\n"
+"    \t\t默认的超时时间是 TMOUT 变量的值。<超时> 可以是小数。\n"
+"    \t\t如果 <超时> 是 0,read 会立即返回而不尝试读取任何数据,\n"
+"    \t\t且仅当可以从指定的文件描述符获取输入时,才返回成功。\n"
+"    \t\t如果超过了超时时间,则é\80\80å\87ºç\8a¶æ\80\81大äº\8e 128\n"
+"      -u fd\t从文件描述符 <FD> 中读取,而不是标准输入\n"
 "    \n"
 "    退出状态:\n"
-"    返回码为零,除非遇到了文件结束符、读超时(且返回码不大于128)、\n"
-"    å\87ºç\8e°äº\86å\8f\98é\87\8fèµ\8bå\80¼é\94\99误æ\88\96è\80\85æ\97 æ\95\88ç\9a\84æ\96\87件æ\8f\8f述符ä½\9c为å\8f\82æ\95°ä¼ é\80\92ç»\99äº\86 -u é\80\89项。"
+"    返回码为零,除非遇到了文件结束符、读取超时(此时返回码大于 128)、\n"
+"    å\8f\91ç\94\9fäº\86å\8f\98é\87\8fèµ\8bå\80¼é\94\99误ï¼\8cæ\88\96è\80\85 -u é\80\89项ç\9a\84å\8f\82æ\95°ä¸­ç\9a\84æ\96\87件æ\8f\8f述符æ\97 æ\95\88。"
 
-#: builtins.c:1041
+#: builtins.c:1042
 msgid ""
 "Return from a shell function.\n"
 "    \n"
@@ -3912,14 +3796,13 @@ msgid ""
 msgstr ""
 "从一个 shell 函数返回。\n"
 "    \n"
-"    使一个函数或者被引用的脚本以指定的返回值 N 退出。\n"
-"    如果 N 被省略,则返回状态就是\n"
-"    函数或脚本中的最后一个执行的命令的状态。\n"
+"    使一个函数或者被 source 的脚本退出,返回值为 N。如果 N 被\n"
+"    省略,则返回状态为函数或脚本中最后一个被执行的命令的返回状态。\n"
 "    \n"
 "    退出状态:\n"
-"    返回 N,或者如果 shell 不在执行一个函数或引用脚本时,失败。"
+"    返回 N,或者如果 shell 不在执行一个函数或脚本时,返回失败。"
 
-#: builtins.c:1054
+#: builtins.c:1055
 msgid ""
 "Set or unset values of shell options and positional parameters.\n"
 "    \n"
@@ -4004,83 +3887,76 @@ msgid ""
 msgstr ""
 "设定或取消设定 shell 选项和位置参数的值。\n"
 "    \n"
-"    改变 shell 选项和位置参数的值,或者显示 shell 变量的\n"
-"    名称和值。\n"
+"    改变 shell 属性和位置参数的值,或者显示 shell 变量的名称和值。\n"
 "    \n"
 "    选项:\n"
-"      -a  标记修改的或者创建的变量为导出。\n"
-"      -b  立即通告任务终结。\n"
+"      -a  标记修改的或者创建的变量为导出变量。\n"
+"      -b  在任务终止时立即进行通知。\n"
 "      -e  如果一个命令以非零状态退出,则立即退出。\n"
-"      -f  禁用文件名生成(模式匹配)。\n"
-"      -h  当查询命令时记住它们的位置\n"
-"      -k  所有的赋值参数被放在命令的环境中,而不仅仅是\n"
-"          命令名称之前的参数。\n"
+"      -f  禁用文件名生成(通配符匹配)。\n"
+"      -h  查找命令时记住它们的位置。\n"
+"      -k  所有的赋值参数都会进入命令的环境,而不仅仅是命令名称\n"
+"          之前的参数。\n"
 "      -m  启用任务控制。\n"
-"      -n  读取命令但不执行\n"
+"      -n  读取命令但不执行\n"
 "      -o 选项名\n"
-"          设定与选项名对应的变量:\n"
+"          设定与 <选项名> 对应的变量:\n"
 "              allexport    与 -a 相同\n"
 "              braceexpand  与 -B 相同\n"
-"              emacs       使用 emacs 风格的行编辑界面\n"
+"              emacs        使用 emacs 风格的行编辑界面\n"
 "              errexit      与 -e 相同\n"
 "              errtrace     与 -E 相同\n"
 "              functrace    与 -T 相同\n"
 "              hashall      与 -h 相同\n"
 "              histexpand   与 -H 相同\n"
 "              history      启用命令历史\n"
-"              ignoreeof    shell 读取文件结束符时不会退出\n"
+"              ignoreeof    shell 读取到 EOF 时不会退出\n"
 "              interactive-comments\n"
-"                           允许在交互式命令中显示注释\n"
+"                           允许交互式命令中出现注释\n"
 "              keyword      与 -k 相同\n"
 "              monitor      与 -m 相同\n"
 "              noclobber    与 -C 相同\n"
 "              noexec       与 -n 相同\n"
 "              noglob       与 -f 相同\n"
-"              nolog        目前可接受但是被忽略\n"
+"              nolog        目前可接受,但会被忽略\n"
 "              notify       与 -b 相同\n"
 "              nounset      与 -u 相同\n"
 "              onecmd       与 -t 相同\n"
 "              physical     与 -P 相同\n"
-"              pipefail     管道的返回值是最后一个非零返回值的命令的返回结果,\n"
-"                           或者当所有命令都返回零是也为零。\n"
-"              posix        改变默认时和 Posix 标准不同的 bash 行为\n"
-"                           以匹配标准\n"
+"              pipefail     流水线的返回值是最后一个以非零状态退出的命令的退出\n"
+"                           状态,或者如果没有命令以非零状态退出,则返回零。\n"
+"              posix        改变 bash 中默认操作和 Posix 标准不同的行为,\n"
+"                           以符合标准\n"
 "              privileged   与 -p 相同\n"
 "              verbose      与 -v 相同\n"
 "              vi           使用 vi 风格的行编辑界面\n"
 "              xtrace       与 -x 相同\n"
-"      -p  无论何时当真实的有效的用户身份不匹配时打开。\n"
-"          禁用对 $ENV 文件的处理以及导入 shell 函数。\n"
-"          关闭此选项会导致有效的用户编号和组编号设定\n"
-"          为真实的用户编号和组编号\n"
+"      -p  只要真实用户 ID 和有效用户 ID 不匹配时就会被打开。\n"
+"          禁用对 $ENV 文件的处理以及 shell 函数的导入。关闭此选项\n"
+"          会导致有效 uid 和 gid 被设定为真实 uid 和 gid。\n"
 "      -t  读取并执行一个命令之后退出。\n"
-"      -u  替换时将为设定的变量当作错误对待。\n"
-"      -v  读取 shell 输入行时将它们打印。\n"
-"      -x  执行命令时打印它们以及参数。\n"
-"      -B  shell 将执行花括号扩展。\n"
-"      -C  设定之后禁止以重定向输出的方式覆盖常\n"
-"          规文件。\n"
-"      -E  设定之后 ERR 陷阱会被 shell 函数继承。\n"
-"      -H  启用 ! 风格的历史替换。当 shell 是交互式的\n"
-"          时候这个标识位默认打开。\n"
-"      -P  设定之后类似 cd 的会改变当前目录的命令不\n"
-"          追踪符号链接。\n"
-"      -T  设定之后 DEBUG 陷阱会被 shell 函数继承。\n"
-"      --  任何剩余的参数会被赋值给位置参数。如果没\n"
-"          有剩余的参数,位置参数不会被设置。\n"
-"      -   任何剩余的参数会被赋值给位置参数。\n"
-"          -x 和 -v 选项已关闭。\n"
-"    \n"
-"    使用 + 而不是 - 会使标志位被关闭。标志位也可以在\n"
-"    shell 被启动时使用。当前的标志位设定可以在 $- 变\n"
-"    量中找到。剩余的 ARG 参数是位置参数并且是按照\n"
-"    $1, $2, .. $n 的顺序被赋值的。如果没有给定 ARG\n"
-"    参数,则打印所有的 shell 变量。\n"
+"      -u  替换时将未设定的变量视为错误。\n"
+"      -v  读取 shell 输入行时将其打印。\n"
+"      -x  执行命令时打印命令及其参数。\n"
+"      -B  shell 会执行大括号展开。\n"
+"      -C  设定之后,禁止以重定向输出的方式覆盖普通文件。\n"
+"      -E  设定之后,ERR 陷阱会被 shell 函数继承。\n"
+"      -H  启用 ! 风格的历史替换。当 shell 是交互式的时候这个标志默认打开。\n"
+"      -P  设定之后,当执行会改变当前目录的命令,例如 cd 时,不解析符号链接。\n"
+"      -T  设定之后,DEBUG 和 RETURN 陷阱会被 shell 函数继承。\n"
+"      --  将所有剩余的参数赋值给位置参数。\n"
+"          如果没有剩余的参数,则取消设定位置参数。\n"
+"      -   将所有剩余的参数赋值给位置参数。\n"
+"          关闭 -x 和 -v 选项。\n"
+"    \n"
+"    使用 + 而不是 - 会关闭标志。标志也可以在 shell 被启动时使用。当前已设定的\n"
+"    标志可以在 $- 变量中找到。剩余的 n 个 <参数> 是位置参数,并且会被按顺序\n"
+"    赋值给 $1, $2, .. $n。如果没有给定 <参数>,则打印所有的 shell 变量。\n"
 "    \n"
 "    退出状态:\n"
-"    返回成功除非使用了无效的参数。"
+"    返回成功除非使用了无效的参数。"
 
-#: builtins.c:1139
+#: builtins.c:1140
 msgid ""
 "Unset values and attributes of shell variables and functions.\n"
 "    \n"
@@ -4102,21 +3978,23 @@ msgid ""
 msgstr ""
 "取消设定 shell 变量和函数的值和属性。\n"
 "    \n"
-"    对每一个 NAME 名称,删除对应的变量或函数。\n"
+"    对于每一个 <名称>,删除对应的变量或函数。\n"
 "    \n"
 "    选项:\n"
-"      -f\t将每个 NAME 视为函数\n"
-"      -v\t将每个 NAME 视为变量\n"
-"      -n\t将每个 NAME 视为名称引用,只取消其本身而非其指向的变量\n"
+"      -f\t将每个 <名称> 视为 shell 函数\n"
+"      -v\t将每个 <名称> 视为 shell 变量\n"
+"      -n\t将每个 <名称> 视为名称引用,并取消设定该变量本身,而不是\n"
+"    \t\t其引用的变量\n"
 "    \n"
-"    不带选项时,unset 首先尝试取消设定一个变量,如果失败,再尝试取消设定一个函数。\n"
+"    不带选项时,unset 首先尝试取消设定一个变量,如果失败,再尝试取消设定\n"
+"    一个函数。\n"
 "    \n"
-"    某些变量不可以被取消设定;参见 `readonly'。\n"
+"    某些变量不可以被取消设定;参见 \"readonly\"。\n"
 "    \n"
 "    退出状态:\n"
-"    返回成功,除非使用了无效的选项或者 NAME 名称为只读。"
+"    返回成功,除非使用了无效的选项,或者 <名称> 为只读。"
 
-#: builtins.c:1161
+#: builtins.c:1162
 msgid ""
 "Set export attribute for shell variables.\n"
 "    \n"
@@ -4133,22 +4011,22 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless an invalid option is given or NAME is invalid."
 msgstr ""
-"为 shell 变量设定导出属性。\n"
+"为 shell 变量设定 \"导出\" 属性。\n"
 "    \n"
-"    标记每个 NAME 名称为自动导出到后续命令执行的环境。如果提供了 VALUE\n"
-"    å\88\99导å\87ºå\89\8då°\86 VALUE ä½\9c为èµ\8bå\80¼。\n"
+"    标记每个 <名称>,将其自动导出到后续执行的命令的环境。\n"
+"    å¦\82æ\9e\9cæ\8f\90ä¾\9bäº\86 <å\80¼>ï¼\8cå\88\99导å\87ºå\89\8då°\86å\85¶èµ\8bå\80¼ä¸º <å\80¼>。\n"
 "    \n"
 "    选项:\n"
-"      -f\tæ\8c\87 shell 函数\n"
-"      -n\t删除每个 NAME 名称的导出属性\n"
+"      -f\tæ\89\80æ\8c\87代ç\9a\84æ\98¯ shell 函数\n"
+"      -n\t删除每个 <名称> 的 \"导出\" 属性\n"
 "      -p\t显示所有导出的变量和函数的列表\n"
 "    \n"
-"    `--' 的参数禁用进一步的选项处理。\n"
+"    参数 \"--\" 禁用后续的选项处理。\n"
 "    \n"
 "    退出状态:\n"
-"    返回成功,除非使用了无效的选项或者 NAME 名称。"
+"    返回成功,除非使用了无效的选项,或者 <名称> 无效。"
 
-#: builtins.c:1180
+#: builtins.c:1181
 msgid ""
 "Mark shell variables as unchangeable.\n"
 "    \n"
@@ -4170,21 +4048,21 @@ msgid ""
 msgstr ""
 "标记 shell 变量为不可改变。\n"
 "    \n"
-"    标记每一个 NAME 名称为只读;这些 NAME 变量的值将不可以被后续的赋值\n"
-"    æ\93\8dä½\9cæ\89\80æ\94¹å\8f\98ã\80\82å¦\82æ\9e\9cæ\8f\90ä¾\9bäº\86 VALUEï¼\8cå\88\99å\9c¨æ \87记为å\8fªè¯»ä¹\8bå\89\8då°\86 VALUE å\80¼赋给变量。\n"
+"    标记每一个 <名称> 为只读;这些 <名称> 的值将不可以被后续的赋值操作\n"
+"    æ\89\80æ\94¹å\8f\98ã\80\82å¦\82æ\9e\9cæ\8f\90ä¾\9bäº\86 <å\80¼>ï¼\8cå\88\99å\9c¨æ \87记为å\8fªè¯»ä¹\8bå\89\8då°\86 <å\80¼> 赋给变量。\n"
 "    \n"
 "    选项:\n"
-"      -a\tæ\8c\87ä¸\8bæ \87数组变量\n"
-"      -A\tæ\8c\87å\85³è\81\94æ\95°ç»\84æ \87量\n"
-"      -f\tæ\8c\87 shell 函数\n"
-"      -p\t显示只读变量或函数列表,取决于是否提供了 -f 选项\n"
+"      -a\tæ\89\80æ\8c\87代ç\9a\84æ\98¯ç´¢å¼\95数组变量\n"
+"      -A\tæ\89\80æ\8c\87代ç\9a\84æ\98¯å\85³è\81\94æ\95°ç»\84å\8f\98量\n"
+"      -f\tæ\89\80æ\8c\87代ç\9a\84æ\98¯ shell 函数\n"
+"      -p\t显示所有只读变量或者函数的列表,取决于是否提供了 -f 选项\n"
 "    \n"
-"    `--' 的参数禁用进一步的选项处理。\n"
+"    参数 \"--\" 禁用后续的选项处理。\n"
 "    \n"
 "    退出状态:\n"
-"    返回成功,除非使用了无效的选项或者 NAME 名称。"
+"    返回成功,除非使用了无效的选项,或者 <名称> 无效。"
 
-#: builtins.c:1202
+#: builtins.c:1203
 msgid ""
 "Shift positional parameters.\n"
 "    \n"
@@ -4196,13 +4074,13 @@ msgid ""
 msgstr ""
 "移位位置参数。\n"
 "    \n"
-"    重命名位置参数 $N+1、$N+2 ... 到 $1、$2 ...  如果没有给定 N,\n"
-"    则假设为1.\n"
+"    将位置参数 $N+1,$N+2 ... 重命名为 $1,$2 ...。如果没有给定 N,\n"
+"    则假定 N 为 1。\n"
 "    \n"
 "    退出状态:\n"
-"    返回成功,除非 N 为负或者大于 $#。"
+"    è¿\94å\9b\9eæ\88\90å\8a\9fï¼\8cé\99¤é\9d\9e N ä¸ºè´\9fæ\95°æ\88\96è\80\85大äº\8e $#ã\80\82"
 
-#: builtins.c:1214 builtins.c:1229
+#: builtins.c:1215 builtins.c:1230
 msgid ""
 "Execute commands from a file in the current shell.\n"
 "    \n"
@@ -4217,14 +4095,15 @@ msgid ""
 msgstr ""
 "在当前 shell 中执行一个文件中的命令。\n"
 "    \n"
-"    在当前 shell 中读取并执行 FILENAME 文件中的命令。$PATH 变量中的\n"
-"    条目被用于寻找包含 FILENAME 文件的目录。如果提供了任何的 ARGUMENTS\n"
-"    参数,则它们将成为 FILENAME 文件执行时的位置参数。\n"
+"    在当前 shell 中读取并执行 <文件名> 中的命令。将使用 $PATH 变量中的\n"
+"    条目寻找包含 <文件名> 的目录。如果提供了 <参数>,则它们将成为\n"
+"    <文件名> 执行时的位置参数。\n"
 "    \n"
 "    退出状态:\n"
-"    返回 FILENAME 文件中最后一个命令的状态;如果 FILENAME 文件不可读则失败。"
+"    返回 <文件名> 中最后一个被执行的命令的状态;如果无法读取 <文件名>,\n"
+"    则返回失败。"
 
-#: builtins.c:1245
+#: builtins.c:1246
 msgid ""
 "Suspend shell execution.\n"
 "    \n"
@@ -4237,18 +4116,18 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless job control is not enabled or an error occurs."
 msgstr ""
-"挂起 shell 执行。\n"
+"挂起 shell 执行。\n"
 "    \n"
-"    挂起 shell 的执行直到收到 SIGCONT 信号。\n"
+"    挂起此 shell 的执行,直到它收到 SIGCONT 信号。\n"
 "    登录 shell 不可以被挂起,除非强制执行。\n"
 "    \n"
 "    选项:\n"
-"      -f\t强制挂起,即使是登录 shell。\n"
+"      -f\t强å\88¶æ\8c\82èµ·ï¼\8cå\8d³ä½¿æ­¤ shell æ\98¯ç\99»å½\95 shellã\80\82\n"
 "    \n"
 "    退出状态:\n"
-"    返回成功,除非没有启用任务控制或者有错误发生。"
+"    返回成功,除非没有启用任务控制或者有错误发生。"
 
-#: builtins.c:1261
+#: builtins.c:1262
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -4328,91 +4207,95 @@ msgid ""
 "    Returns success if EXPR evaluates to true; fails if EXPR evaluates to\n"
 "    false or an invalid argument is given."
 msgstr ""
-"对条件表达式进行估值。\n"
-"    \n"
-"    根据 EXPR 表达式的估值以状态 0 (真) 或 1 (伪) 退出。\n"
-"    表达式可以是一元或者二元的。一元表达式通常用于检测\n"
-"    文件状态。同时还有字符串操作符和数字比较操作符。\n"
-"    \n"
-"    文件操作符:\n"
-"    \n"
-"      -a 文件        如果文件存在则为真。\n"
-"      -b 文件        如果文件为块特殊文件则为真。\n"
-"      -c 文件        如果文件为字符特殊文件则为真。\n"
-"      -d 文件        如果文件为目录则为真。\n"
-"      -e 文件        如果文件存在则为真。\n"
-"      -f 文件        如果文件存在且为常规文件则为真。\n"
-"      -g 文件        如果文件的组属性设置打开则为真。\n"
-"      -h 文件        如果文件为符号链接则为真。\n"
-"      -L 文件        如果文件为符号链接则为真。\n"
-"      -k 文件        如果文件的粘滞 (sticky) 位设定则为真。\n"
-"      -p 文件        如果文件为命名管道则为真。\n"
-"      -r 文件        如果文件对于您是可读的则为真。\n"
-"      -s 文件        如果文件存在且不为空则为真。\n"
-"      -S 文件        如果文件是套接字则为真。\n"
-"      -t 文件描述符   如果文件描述符在一个终端上打开则为真。\n"
-"      -u 文件        如果文件的用户数行设置打开则为真。\n"
-"      -w 文件        如果文件对您是可写的则为真\n"
-"      -x 文件        如果文件对您是可执行的则为真。\n"
-"      -O 文件        如果文件是被您所有的则为真。\n"
-"      -G 文件        如果文件被您的组所有则为真。\n"
-"      -N 文件        如果文件上次被读取之后修改过则为真。\n"
-"    \n"
-"      FILE1 -nt FILE2  如果 file1 文件新于 file2 文件则为真(根据\n"
-"                       修改日期)。\n"
-"    \n"
-"      FILE1 -ot FILE2  如果 file1 文件旧于 file2 文件则为真。\n"
-"    \n"
-"      FILE1 -ef FILE2  如果 file1 文件是 file2 文件的硬链接则为真。\n"
-"    \n"
-"    字符串操作符\n"
-"    \n"
-"      -z 字符串      如果字符串为空则为真。\n"
+"对条件表达式进行求值。\n"
 "    \n"
-"      -n 字符串\n"
-"         字符串      如果字符串不为空则为真。\n"
+"    根据 <表达式> 的求值结果,以状态 0(真)或 1(假)退出。\n"
+"    表达式可以是一元的或者二元的。一元表达式通常用于检测文件状态。\n"
+"    同时还有字符串运算符和数值比较运算符。\n"
 "    \n"
-"      STRING1 = STRING2\n"
-"                     如果 string1 和 string2 字符串相同则为真。\n"
-"      STRING1 != STRING2\n"
-"                     如果 string1 和 string2 字符串不相同则为真。\n"
-"      STRING1 < STRING2\n"
-"                     如果按字典排序 string1 在 string2 串之前则为真。\n"
-"      STRING1 > STRING2\n"
-"                     如果按字典排序 string1 在 string2 串之前则为真。\n"
+"    test 的行为取决于参数的数量。请阅读 bash 手册页以获取完整的\n"
+"    说明文档。\n"
+"    \n"
+"    文件运算符:\n"
+"    \n"
+"      -a 文件        如果 <文件> 存在则为真。\n"
+"      -b 文件        如果 <文件> 为块特殊文件则为真。\n"
+"      -c 文件        如果 <文件> 为字符特殊文件则为真。\n"
+"      -d 文件        如果 <文件> 为目录则为真。\n"
+"      -e 文件        如果 <文件> 存在则为真。\n"
+"      -f 文件        如果 <文件> 存在且为普通文件则为真。\n"
+"      -g 文件        如果 <文件> 设置了 setgid 位则为真。\n"
+"      -h 文件        如果 <文件> 为符号链接则为真。\n"
+"      -L 文件        如果 <文件> 为符号链接则为真。\n"
+"      -k 文件        如果 <文件> 设置了粘滞位 (sticky bit) 则为真。\n"
+"      -p 文件        如果 <文件> 为命名管道则为真。\n"
+"      -r 文件        如果 <文件> 对您是可读的则为真。\n"
+"      -s 文件        如果 <文件> 存在且不为空则为真。\n"
+"      -S 文件        如果 <文件> 是套接字则为真。\n"
+"      -t FD          如果文件描述符 <FD> 已在一个终端上打开则为真。\n"
+"      -u 文件        如果 <文件> 设置了 setuid 位则为真。\n"
+"      -w 文件        如果 <文件> 对您是可写的则为真。\n"
+"      -x 文件        如果 <文件> 对您是可执行的则为真。\n"
+"      -O 文件        如果 <文件> 是被您(有效 uid)所有的则为真。\n"
+"      -G 文件        如果 <文件> 是被您的组(有效 gid)所有的则为真。\n"
+"      -N 文件        如果 <文件> 上次读取之后被修改过则为真。\n"
+"    \n"
+"      文件1 -nt 文件2  如果 <文件1> 新于 <文件2> 则为真(根据修改日期)。\n"
 "    \n"
-"    其他操作符:\n"
+"      文件1 -ot 文件2  如果 <文件1> 旧于 <文件2> 则为真。\n"
 "    \n"
-"      -o 选项        如果指定 shell 选项启用则为真。\n"
-"      -v VAR         如果指定 Shell 变量 VAR 已赋值则为真。\n"
-"      -R VAR         如果指定 Shell 变量 VAR 已赋值且为名称引用则为真。\n"
-"      ! EXPR         如果表达式 expr 为假则为真。\n"
-"      EXPR1 -a EXPR2 如果 expr1 和 expr2 都为真则为真。\n"
-"      EXPR1 -o EXPR2 如果 expr1 和 expr2 有一个为真则为真。\n"
+"      文件1 -ef 文件2  如果 <文件1> 是到 <文件2> 的硬链接则为真。\n"
 "    \n"
-"      arg1 OP arg2   算术测试。OP操作符可以是 -eq、-ne、\n"
-"                     -lt、-le、-gt、或 -ge 中的一个。\n"
+"    字符串运算符:\n"
 "    \n"
-"    二元算术操作返回真,如果 ARG1 参数等于、不等于、\n"
-"    小于、小于等于、大于、或者大于等于 ARG2 参数。\n"
+"      -z 字符串      如果 <字符串> 为空则为真。\n"
+"    \n"
+"      -n 字符串\n"
+"         字符串      如果 <字符串> 不为空则为真。\n"
+"    \n"
+"      字符串1 = 字符串2\n"
+"                     如果两个字符串相等则为真。\n"
+"      字符串1 != 字符串2\n"
+"                     如果两个字符串不相等则为真。\n"
+"      字符串1 < 字符串2\n"
+"                     如果按字典序 <字符串1> 在 <字符串2> 之前则为真。\n"
+"      字符串1 > 字符串2\n"
+"                     如果按字典序 <字符串1> 在 <字符串2> 之后则为真。\n"
+"    \n"
+"    其他运算符:\n"
+"    \n"
+"      -o 选项        如果指定的 shell 选项 <选项> 启用则为真。\n"
+"      -v 变量        如果指定的 shell 变量 <变量> 已设定则为真。\n"
+"      -R 变量        如果指定的 shell 变量 <变量> 已设定且为名称引用则为真。\n"
+"      ! 表达式       如果 <表达式> 为假则为真。\n"
+"      表达式1 -a 表达式2\n"
+"                     如果 <表达式1> 和 <表达式2> 都为真则为真。\n"
+"      表达式1 -o 表达式2\n"
+"                     如果 <表达式1> 和 <表达式2> 中任何一个为真则为真。\n"
+"    \n"
+"      参数1 运算符 参数2\n"
+"                     算术测试。<运算符> 可以是 -eq、-ne、\n"
+"                     -lt、-le、-gt 或 -ge 中的一个。\n"
+"    \n"
+"    二元算术运算符返回真,如果 <参数1> 等于、不等于、小于、小于等于、\n"
+"    大于,或者大于等于 <参数2>。\n"
 "    \n"
 "    退出状态:\n"
-"    如果 EXPR 表达式估值为真则返回成功;如果 EXPR 表达式估值\n"
-"    为假或者使用了无效的参数则返回失败。"
+"    如果 <表达式> 求值结果为真则返回成功;如果 <表达式> 求值结果为假,\n"
+"    或者使用了无效的参数,则返回失败。"
 
-#: builtins.c:1343
+#: builtins.c:1344
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
 "    This is a synonym for the \"test\" builtin, but the last argument must\n"
 "    be a literal `]', to match the opening `['."
 msgstr ""
-"估值条件表达式。\n"
+"对条件表达式进行求值。\n"
 "    \n"
-"    是内建命令 \"test\" 的同义词,但是最后一个参数必须是\n"
-"    字符 `]',以匹配起始的 `['。"
+"    同 \"test\" 内建,但是最后一个参数必须是字符 \"]\",以匹配起始的 \"[\"。"
 
-#: builtins.c:1352
+#: builtins.c:1353
 msgid ""
 "Display process times.\n"
 "    \n"
@@ -4422,17 +4305,16 @@ msgid ""
 "    Exit Status:\n"
 "    Always succeeds."
 msgstr ""
-"显示进程时间\n"
+"显示进程时间\n"
 "    \n"
-"    打印 shell 及其所有子进程的累计用户空间和\n"
-"    系统空间执行时间。\n"
+"    打印此 shell 及其所有子进程的累计用户和系统时间。\n"
 "    \n"
-"    退出状态\n"
+"    退出状态\n"
 "    总是成功。"
 
 # EXIT and DEBUG should be as-is. Use before you translate, please.
 # The -signal is only an example; Read carefully.
-#: builtins.c:1364
+#: builtins.c:1365
 msgid ""
 "Trap signals and other events.\n"
 "    \n"
@@ -4466,34 +4348,36 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless a SIGSPEC is invalid or an invalid option is given."
 msgstr ""
-"对信号和其他事件设陷阱。\n"
+"为信号和其他事件设置陷阱。\n"
 "    \n"
-"    定义一个处理器,在 shell 接收到信号和其他条件下执行。\n"
+"    定义并激活当 shell 接收到信号或满足其他条件时执行的处理程序。\n"
 "    \n"
-"    ARG 参数是当 shell 接收到 SIGNAL_SPEC 信号时读取和执行的命令。\n"
-"    如果没有指定 ARG 参数 (并且只给出一个 SIGNAL_SPEC 信号) 或者\n"
-" ARG 参数为\n"
-"    `-',每一个指定的参数会被重置为原始值。如果 ARG 参数是一个空串,则每一个\n"
-"    SIGNAL_SPEC 信号会被 shell 和它启动的命令忽略。\n"
+"    <参数> 是当 shell 接收到 <信号说明符> 时读取和执行的命令。如果\n"
+"    没有指定 <参数>(并且只给出一个 <信号说明符>)或者 <参数> 为 \"-\",\n"
+"    则每一个指定的信号会被重置为原始值。如果 <参数> 是空字符串,则每一个\n"
+"    <信号说明符> 会被 shell 和它启动的命令忽略。\n"
 "    \n"
-"    如果一个 SIGNAL_SPEC 信号是 EXIT (0) ,则 ARG 命令会在 shell 退出时被\n"
-"    执行。如果一个 SIGNAL_SPEC 信号是 DEBUG,则 ARG命令会在每一个简单命\n"
-"    令之前执行。\n"
+"    如果一个 <信号说明符> 是 EXIT (0),则 <参数> 会在 shell 退出时被执行。\n"
+"    如果一个 <信号说明符> 是 DEBUG,则 <参数> 会在每一个简单命令之前执行。\n"
+"    如果一个 <信号说明符> 是 RETURN,则 <参数> 会在每一个 shell 函数或者\n"
+"    通过 . 或 source 内建执行的脚本执行结束时被执行。如果一个 <信号说明符>\n"
+"    是 ERR,则 <参数> 会在命令返回失败,并且假如启用了 -e 选项,本次失败就\n"
+"    会导致 shell 退出的情况下被执行。\n"
 "    \n"
-"    如果不提供参数,trap 打印列表显示每一个与每一个信号相关联的命令。\n"
+"    如果不提供参数,trap 打印与每一个信号相关联的命令列表。\n"
 "    \n"
 "    选项:\n"
-"      -l\tæ\89\93å\8d°ä¸\80个信å\8f·å\90\8d称和它们对应的编号的列表\n"
-"      -p\t打印与每个 SIGNAL_SPEC 信号相关联的陷阱命令\n"
+"      -l\tæ\89\93å\8d°ä¿¡å\8f·å\90\8d称以å\8f\8a和它们对应的编号的列表\n"
+"      -p\t打印与每个 <信号说明符> 相关联的陷阱命令\n"
 "    \n"
-"    每一个 SIGNAL_SPEC 信号可以是 <signal.h> 中的信号名称或者信号编号。\n"
-"    信号名称大小写敏感且可以使用 SIG 前缀。信号可用 \"kill -信号 $$\"\n"
-"    发送给 shell。\n"
+"    每一个 <信号说明符> 可以是 <signal.h> 中的信号名称或者信号编号。信号名称\n"
+"    是大小写敏感的,并且 SIG 前缀是可选的。可以使用 \"kill -信号 $$\" 给 shell\n"
+"    发送信号。\n"
 "    \n"
 "    退出状态:\n"
-"    返回成功,除非使用了无效的选项或者 SIGSPEC。"
+"    返回成功,除非使用了无效的 <信号说明符>,或者无效的选项。"
 
-#: builtins.c:1400
+#: builtins.c:1401
 msgid ""
 "Display information about command type.\n"
 "    \n"
@@ -4521,76 +4405,29 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success if all of the NAMEs are found; fails if any are not found."
 msgstr ""
-"显示命令类型的信息。\n"
+"æ\98¾ç¤ºå\85³äº\8eå\91½ä»¤ç±»å\9e\8bç\9a\84ä¿¡æ\81¯ã\80\82\n"
 "    \n"
-"    对于每一个 NAME 名称,指示如果作为命令它将如何被解释。\n"
+"    对于每一个 <名称>,指出如果作为命令名使用时,它将如何被解释。\n"
 "    \n"
 "    选项:\n"
-"      -a\t显示所有包含名称为 NAME 的可执行文件的位置;\n"
-"    \t\t包括别名、内建和函数。仅当 `-p' 选项没有使用时\n"
-"      -f\t抑制 shell 函数查询\n"
-"      -P\t为每个 NAME 名称惊醒 PATH 路径搜索,即使它是别名、\n"
-"    \t\t内建或函数,并且返回将被执行的磁盘上文件的名称。\n"
-"      -p\t返回将被执行的磁盘上文件的名称,或者当 `type -t NAME'\n"
-"    \t不返回 `file' 时,不返回任何值。\n"
-"      -t\t返回下列词中的任何一个 `alias'、`keyword'、\n"
-"    \t`function'、`builtin'、`file' 或者 `',相应地如果 NAME 是\n"
-"    \t一个别名、shell 保留字、shell 函数、shell 内建、\n"
-"    \t磁盘文件或没有找到。\n"
+"      -a\t当且仅当没有同时使用 \"-p\" 选项时,显示所有包含名为 <名称>\n"
+"    \t\t的可执行文件的位置;包括别名、内建和函数\n"
+"      -f\t阻止 shell 函数查找流程\n"
+"      -P\t强制对每个 <名称> 搜索 PATH,即使它是别名、内建或函数,\n"
+"    \t\t并且返回将被执行的磁盘上的文件的名称\n"
+"      -p\t返回将被执行的磁盘上的文件的名称,或者当 \"type -t 名称\"\n"
+"    \t\t不返回 \"file\" 时,不返回任何值\n"
+"      -t\t返回下列单词中的一个:\"alias\"、\"keyword\"、\"function\"、\n"
+"    \t\t\"builtin\"、\"file\" 或者 \"\",分别表示 <名称> 是一个别名、\n"
+"    \t\tshell 保留字、shell 函数、shell 内建、磁盘文件或者未找到\n"
 "    \n"
 "    参数:\n"
-"      NAME\t将要解析的命令。\n"
+"      名称\t需要解释的命令。\n"
 "    \n"
 "    退出状态:\n"
-"    如果所有的 NAME 命令都找到则返回成功;任何一个找不到则失败。"
-
-#: builtins.c:1431
-#, fuzzy
-#| msgid ""
-#| "Modify shell resource limits.\n"
-#| "    \n"
-#| "    Provides control over the resources available to the shell and processes\n"
-#| "    it creates, on systems that allow such control.\n"
-#| "    \n"
-#| "    Options:\n"
-#| "      -S\tuse the `soft' resource limit\n"
-#| "      -H\tuse the `hard' resource limit\n"
-#| "      -a\tall current limits are reported\n"
-#| "      -b\tthe socket buffer size\n"
-#| "      -c\tthe maximum size of core files created\n"
-#| "      -d\tthe maximum size of a process's data segment\n"
-#| "      -e\tthe maximum scheduling priority (`nice')\n"
-#| "      -f\tthe maximum size of files written by the shell and its children\n"
-#| "      -i\tthe maximum number of pending signals\n"
-#| "      -k\tthe maximum number of kqueues allocated for this process\n"
-#| "      -l\tthe maximum size a process may lock into memory\n"
-#| "      -m\tthe maximum resident set size\n"
-#| "      -n\tthe maximum number of open file descriptors\n"
-#| "      -p\tthe pipe buffer size\n"
-#| "      -q\tthe maximum number of bytes in POSIX message queues\n"
-#| "      -r\tthe maximum real-time scheduling priority\n"
-#| "      -s\tthe maximum stack size\n"
-#| "      -t\tthe maximum amount of cpu time in seconds\n"
-#| "      -u\tthe maximum number of user processes\n"
-#| "      -v\tthe size of virtual memory\n"
-#| "      -x\tthe maximum number of file locks\n"
-#| "      -P\tthe maximum number of pseudoterminals\n"
-#| "      -T\tthe maximum number of threads\n"
-#| "    \n"
-#| "    Not all options are available on all platforms.\n"
-#| "    \n"
-#| "    If LIMIT is given, it is the new value of the specified resource; the\n"
-#| "    special LIMIT values `soft', `hard', and `unlimited' stand for the\n"
-#| "    current soft limit, the current hard limit, and no limit, respectively.\n"
-#| "    Otherwise, the current value of the specified resource is printed.  If\n"
-#| "    no option is given, then -f is assumed.\n"
-#| "    \n"
-#| "    Values are in 1024-byte increments, except for -t, which is in seconds,\n"
-#| "    -p, which is in increments of 512 bytes, and -u, which is an unscaled\n"
-#| "    number of processes.\n"
-#| "    \n"
-#| "    Exit Status:\n"
-#| "    Returns success unless an invalid option is supplied or an error occurs."
+"    如果所有的 <名称> 都被找到则返回成功;任何一个未找到则失败。"
+
+#: builtins.c:1432
 msgid ""
 "Modify shell resource limits.\n"
 "    \n"
@@ -4640,47 +4477,49 @@ msgid ""
 msgstr ""
 "修改 shell 资源限制。\n"
 "    \n"
-"    在允许此类控制的系统上,提供对于 shell 及其创建的进程所可用的\n"
-"    资源的控制。\n"
+"    在允许此类控制的系统上,提供对于 shell 及其创建的进程可使用的资源的\n"
+"    控制。\n"
 "    \n"
 "    选项:\n"
-"      -S\t使用软 (`soft') 资源限制\n"
-"      -H\t使用硬 (`hard') 资源限制\n"
-"      -a\tæ\89\80æ\9c\89å½\93å\89\8dé\99\90å\88¶é\83½è¢«æ\8a¥å\91\8a\n"
-"      -b\tå¥\97æ\8e¥å­\97ç¼\93å­\98尺寸\n"
-"      -c\t创建的核文件的最大尺寸\n"
-"      -d\t一个进程的数据区的最大尺寸\n"
-"      -e\t最高的调度优先级 (`nice')\n"
-"      -f\t有 shell 及其子进程可以写的最大文件尺寸\n"
-"      -i\t最多的可以挂起的信号数\n"
+"      -S\t使用 \"软\" (soft) 资源限制\n"
+"      -H\t使用 \"硬\" (hard) 资源限制\n"
+"      -a\tæ\8a¥å\91\8aå½\93å\89\8dç\9a\84æ\89\80æ\9c\89é\99\90å\88\n"
+"      -b\tå¥\97æ\8e¥å­\97ç¼\93å\86²å\8cºå¤§å°\8f\n"
+"      -c\t创建的核心文件的最大大小\n"
+"      -d\t一个进程的数据段的最大大小\n"
+"      -e\t调度优先级 (nice) 的最大值\n"
+"      -f\tshell 及其子进程可以写的最大文件大小\n"
+"      -i\t可以挂起的最大信号数量\n"
 "      -k\t分配给此进程的最大 kqueue 数量\n"
-"      -l\tä¸\80个è¿\9bç¨\8bå\8f¯ä»¥é\94\81å®\9aç\9a\84æ\9c\80大å\86\85å­\98尺寸\n"
-"      -m\t最大的内存进驻尺寸\n"
-"      -n\tæ\9c\80å¤\9aç\9a\84æ\89\93å¼\80ç\9a\84æ\96\87件æ\8f\8f述符个数\n"
-"      -p\t管é\81\93ç¼\93å\86²å\8cºå°ºå¯¸\n"
-"      -q\tPOSIX 息队列的最大字节数\n"
+"      -l\tä¸\80个è¿\9bç¨\8bå\8f¯ä»¥é\94\81å®\9aç\9a\84æ\9c\80大å\86\85å­\98大å°\8f\n"
+"      -m\t驻留集的最大大小\n"
+"      -n\tæ\89\93å¼\80ç\9a\84æ\96\87件æ\8f\8f述符ç\9a\84æ\9c\80大个数\n"
+"      -p\t管é\81\93ç¼\93å\86²å\8cºå¤§å°\8f\n"
+"      -q\tPOSIX 息队列的最大字节数\n"
 "      -r\t实时调度的最大优先级\n"
-"      -s\tæ\9c\80大æ \88尺寸\n"
-"      -t\t最大的CPU时间,以秒为单位\n"
+"      -s\tæ\9c\80大æ \88大å°\8f\n"
+"      -t\t最大的 CPU 时间,以秒为单位\n"
 "      -u\t最大用户进程数\n"
-"      -v\t虚拟内存尺寸\n"
-"      -x\t最大的文件锁数量\n"
-"      -P\t最大伪终端数量\n"
+"      -v\t虚拟内存大小\n"
+"      -x\t文件锁的最大数量\n"
+"      -P\t伪终端的最大数量\n"
+"      -R\t实时进程阻塞前可运行的最大时间\n"
 "      -T\t最大线程数量\n"
 "    \n"
-"    并非所有选项在所有系统上可用。\n"
+"    并非所有选项在所有系统上可用。\n"
 "    \n"
-"    如果提供了 LIMIT 变量,则它为指定资源的新的值;特别的 LIMIT 值为\n"
-"    `soft'、`hard'和`unlimited',分别表示当前的软限制,硬限制和无限制。\n"
-"    否则打印指定资源的当前限制值,不带选项则假定为 -f\n"
+"    如果提供了 <限制>,则它将成为指定的资源的新的值;特殊的 <限制> 值为\n"
+"    \"soft\"、\"hard\" 和 \"unlimited\",分别表示当前的软限制、当前的硬限制,\n"
+"    以及无限制。否则,打印指定资源的当前限制值。如果未提供选项,则假定\n"
+"    为 -f。\n"
 "    \n"
-"    取值都是 1024 字节为单位,除了 -t 以秒为单位,-p 以 512 字节递增,\n"
-"    -u ä¸ºæ\97 è\8c\83å\9b´的进程数量。\n"
+"    限制值的单位都是 1024 字节,除了 -t 单位是秒,-p 单位是 512 字节,\n"
+"    -u ä¸ºæ\9cªç»\8f缩æ\94¾的进程数量。\n"
 "    \n"
 "    退出状态:\n"
-"    返回成功,除非使用了无效的选项或者错误发生。"
+"    返回成功,除非使用了无效的选项,或者有错误发生。"
 
-#: builtins.c:1482
+#: builtins.c:1483
 msgid ""
 "Display or set file mode mask.\n"
 "    \n"
@@ -4699,39 +4538,19 @@ msgid ""
 msgstr ""
 "显示或设定文件模式掩码。\n"
 "    \n"
-"    设定用户文件创建掩码为 MODE 模式。如果省略了 MODE,则\n"
-"    打印当前掩码的值。\n"
+"    设定用户文件创建掩码为 <模式>。如果省略 <模式>,则打印当前掩码的值。\n"
 "    \n"
-"    如果 MODE 模式以数字开头,则被当作八进制数解析;否则是一个\n"
-"    chmod(1) 可接的符号模式串。\n"
+"    如果 <模式> 以数字开头,则按照八进制数进行解释;否则视为一个\n"
+"    chmod(1) 可接的符号模式串。\n"
 "    \n"
 "    选项:\n"
-"      -p\t如果省略 MODE 模式,以可重用为输入的格式输入\n"
+"      -p\t如果省略 <模式>,以可重用作输入的格式输出\n"
 "      -S\t以符号形式输出,否则以八进制数格式输出\n"
 "    \n"
 "    退出状态:\n"
-"    返回成功,除非使用了无效的 MODE 模式或者选项。"
-
-#: builtins.c:1502
-#, fuzzy
-#| msgid ""
-#| "Wait for job completion and return exit status.\n"
-#| "    \n"
-#| "    Waits for each process identified by an ID, which may be a process ID or a\n"
-#| "    job specification, and reports its termination status.  If ID is not\n"
-#| "    given, waits for all currently active child processes, and the return\n"
-#| "    status is zero.  If ID is a job specification, waits for all processes\n"
-#| "    in that job's pipeline.\n"
-#| "    \n"
-#| "    If the -n option is supplied, waits for the next job to terminate and\n"
-#| "    returns its exit status.\n"
-#| "    \n"
-#| "    If the -f option is supplied, and job control is enabled, waits for the\n"
-#| "    specified ID to terminate, instead of waiting for it to change status.\n"
-#| "    \n"
-#| "    Exit Status:\n"
-#| "    Returns the status of the last ID; fails if ID is invalid or an invalid\n"
-#| "    option is given."
+"    返回成功,除非使用了无效的 <模式> 或者选项。"
+
+#: builtins.c:1503
 msgid ""
 "Wait for job completion and return exit status.\n"
 "    \n"
@@ -4760,19 +4579,26 @@ msgid ""
 msgstr ""
 "等待任务完成并返回退出状态。\n"
 "    \n"
-"    等待以 ID 编号识别的进程,其中 ID 可以是进程编号或者任务声明,\n"
-"    并报告它的终止状态。如果 ID 没有给出,则等待所有的当前活跃子\n"
-"    进程,并且返回状态为零。如果 ID 是任务声明,等待任务管道中的\n"
-"    所有进程。\n"
+"    等待以 <ID> 指定的进程,其中 <ID> 可以是进程 ID 或者任务说明符,\n"
+"    并报告它的终止状态。如果没有指定 <ID> ,则等待当前活跃的所有子\n"
+"    进程,并且返回状态为零。如果 <ID> 是任务说明符,则等待该任务的\n"
+"    æµ\81水线中ç\9a\84æ\89\80æ\9c\89è¿\9bç¨\8bã\80\82\n"
 "    \n"
-"    若给定了 -n 选项,等待下一个任务完成并返回其状态。\n"
+"    若给定了 -n 选项,从 <ID> 列表中等待单个任务完成,或者,\n"
+"    如果没有提供 <ID>,等待下一个任务完成并返回其退出状态。\n"
+"    \n"
+"    若给定了 -p 选项, 被返回退出状态的任务的进程 ID 或任务 ID 将被赋值\n"
+"    给选项的参数指定的 <变量>。该变量会首先被取消设定,然后才会进行赋值。\n"
+"    该选项只有和 -n 选项同时使用时才有用。\n"
+"    \n"
+"    若给定了 -f 选项,且启用了任务控制,则等待指定的 <ID> 终止,\n"
+"    而不是等待它改变状态。\n"
 "    \n"
-"    若给定了 -f 选项,且已启用了任务控制,则等待指定的 ID 终止\n"
-"    而非等待它改变状态。\n"
 "    退出状态:\n"
-"    返回最后一个 ID 进程的状态;如果使用了无效的 ID 或者选项则失败。"
+"    返回最后一个 <ID> 的状态;如果使用了无效的 <ID> ,或者使用了无效的\n"
+"    选项,或者给定了 -n 选项但 shell 没有尚未等待的子进程,则失败。"
 
-#: builtins.c:1533
+#: builtins.c:1534
 msgid ""
 "Wait for process completion and return exit status.\n"
 "    \n"
@@ -4786,13 +4612,13 @@ msgid ""
 msgstr ""
 "等待进程完成并且返回退出状态。\n"
 "    \n"
-"    等待指定进程并报告它的终止状态。如果没有提供 PID,则当前所有的活跃\n"
-"    子进程都会被等待,并且返回码为零。PID 必须为进程号。\n"
+"    等待以 <PID> 指定的进程并报告它的终止状态。如果没有提供 <PID>,则等待当前\n"
+"    所有活跃的子进程,并且返回码为零。<PID> 必须为进程 ID。\n"
 "    \n"
 "    退出状态:\n"
-"    返回进程 ID 的状态;如果 PID 是无效的进程号或者指定了无效的选项则失败。"
+"    返回最后一个 <PID> 的状态;如果 <PID> 无效,或者使用了无效的选项,则失败。"
 
-#: builtins.c:1548
+#: builtins.c:1549
 msgid ""
 "Execute commands for each member in a list.\n"
 "    \n"
@@ -4806,14 +4632,14 @@ msgid ""
 msgstr ""
 "为列表中的每个成员执行命令。\n"
 "    \n"
-"    “for”循环为列表中的每个成员执行一系列的命令。如果没有\n"
-"    “in <词语> ...;”则假定使用“in \"$@\"”。对于 <词语> 中的每\n"
-"     个元素,<名称> 变量被设定为该元素后执行 <命令>。\n"
+"    \"for\" 循环为列表中的每个成员执行一系列的命令。\n"
+"    如果没有 \"in 词语 ...;\" ,则假定使用 `in \"$@\"'。对于 <词语> 中的\n"
+"    每个元素,<名称> 被设定为该元素,然后执行 <命令>。\n"
 "    \n"
 "    退出状态:\n"
 "    返回最后执行的命令的状态。"
 
-#: builtins.c:1562
+#: builtins.c:1563
 msgid ""
 "Arithmetic for loop.\n"
 "    \n"
@@ -4832,18 +4658,18 @@ msgstr ""
 "算术 for 循环。\n"
 "    \n"
 "    等价于\n"
-"    \t(( EXP1 ))\n"
-"    \twhile (( EXP2 )); do\n"
-"    \t\t命令\n"
-"    \t\t(( EXP3 ))\n"
+"    \t(( 表达式1 ))\n"
+"    \twhile (( 表达式2 )); do\n"
+"    \t\t命令\n"
+"    \t\t(( 表达式3 ))\n"
 "    \tdone\n"
-"    EXP1、EXP2 和 EXP3 都是算术表达式。如果省略任何表达式,\n"
-"    则等同于使用了估值为1的表达式。\n"
+"    <表达式1>、<表达式2> 和 <表达式3> 都是算术表达式。如果省略任何表达式,\n"
+"    则等价于使用了求值结果为 1 的表达式。\n"
 "    \n"
 "    退出状态:\n"
 "    返回最后执行的命令的状态。"
 
-#: builtins.c:1580
+#: builtins.c:1581
 msgid ""
 "Select words from a list and execute commands.\n"
 "    \n"
@@ -4864,19 +4690,19 @@ msgid ""
 msgstr ""
 "从列表中选取词并且执行命令。\n"
 "    \n"
-"    <词语...> è¢«å±\95å¼\80ï¼\8cç\94\9fæ\88\90ä¸\80个è¯\8dç\9a\84å\88\97表ã\80\82å±\95å¼\80ç\9a\84è¯\8dé\9b\86å\90\88被æ\89\93å\8d°\n"
-"    在标准错误输出设备上,每个以一个数字做前缀。如果没有 `in WORDS'\n"
-"    则假定使用`in \"$@\"'。PS3提示符会被显示并且从标准输入读入一行\n"
-"    如果该行由被显示的词对应的数字组成,则 NAME 变量被设定为相应\n"
-"    ç\9a\84è¯\8dã\80\82å¦\82æ\9e\9cè¡\8c为空ï¼\8cå\88\99 WORDS å\8f\98é\87\8få\92\8cæ\8f\90示符被é\87\8dæ\96°æ\98¾ç¤ºã\80\82å¦\82æ\9e\9c读å\8f\96了\n"
-"    文件结束符,则命令完成。读入任何其他的值会导致 NAME 变量被设定\n"
-"    为空。读入的行被存放在变量 REPLY 中。COMMANDS 命令在每次选择\n"
-"    之后执行直到执行一个 break 命令。\n"
+"    <词语> è¢«å±\95å¼\80ï¼\8cç\94\9fæ\88\90ä¸\80个è¯\8d语å\88\97表ã\80\82å±\95å¼\80å\90\8eç\9a\84è¯\8d语é\9b\86å\90\88被æ\89\93å\8d°å\88°\n"
+"    标准错误,每个词语前面打印一个数字。如果没有 \"in 词语\" ,则假定\n"
+"    使用 `in \"$@\"'。然后,会显示一个 PS3 提示符,并且从标准输入读取\n"
+"    一行。如果该行是所显示的词之一所对应的数字,则 <名称> 被设定为\n"
+"    ç\9b¸åº\94ç\9a\84è¯\8dã\80\82å¦\82æ\9e\9c该è¡\8c为空ï¼\8cå\88\99ä¼\9aé\87\8dæ\96°æ\98¾ç¤º <è¯\8d语> å\92\8cæ\8f\90示符ã\80\82å¦\82æ\9e\9c读å\88°了\n"
+"    EOF,则命令完成。读入任何其他的值会导致 <名称> 变量被设定为空。\n"
+"    读入的行被存放在变量 REPLY 中。<命令> 会在每次选择之后被执行,\n"
+"    直到执行到 break 命令。\n"
 "    \n"
 "    退出状态:\n"
 "    返回最后一个执行的命令的状态。"
 
-#: builtins.c:1601
+#: builtins.c:1602
 msgid ""
 "Report time consumed by pipeline's execution.\n"
 "    \n"
@@ -4891,20 +4717,20 @@ msgid ""
 "    Exit Status:\n"
 "    The return status is the return status of PIPELINE."
 msgstr ""
-"报告管道执行的消耗时间。\n"
+"报告流水线执行消耗的时间。\n"
 "    \n"
-"    执行 PIPELINE 并且打印 PIPELINE 终结时实际时间、用户 CPU 时间和系统\n"
-"    CPU 时间的总结。\n"
+"    执行 <流水线> 并且打印 <流水线> 终止时消耗的真实时间、用户 CPU 时间\n"
+"    和系统 CPU 时间的总结。\n"
 "    \n"
 "    选项:\n"
-"      -p\t用可迁移的 POSIX 格式打印用时总结。\n"
+"      -p\t用可移植的 POSIX 格式打印用时总结。\n"
 "    \n"
-"    TIMEFORMAT 变量的值被作为输出格式。\n"
+"    使用 TIMEFORMAT 变量的值作为输出格式。\n"
 "    \n"
 "    退出状态:\n"
-"    返回状态即PIPELINE 的返回状态。"
+"    返回状态是 <流水线> 的返回状态。"
 
-#: builtins.c:1618
+#: builtins.c:1619
 msgid ""
 "Execute commands based on pattern matching.\n"
 "    \n"
@@ -4916,13 +4742,13 @@ msgid ""
 msgstr ""
 "基于模式匹配来执行命令。\n"
 "    \n"
-"    基于 PATTERN 模式匹配的词 WORD,有选择的执行 COMMANDS 命令。\n"
-"    `|' 用于分隔多个模式。\n"
+"    根据和 <词语> 匹配的 <模式> ,选择性地执行 <命令>。\n"
+"    \"|\" 用于分隔多个模式。\n"
 "    \n"
 "    退出状态:\n"
 "    返回最后一个执行的命令的状态。"
 
-#: builtins.c:1630
+#: builtins.c:1631
 msgid ""
 "Execute commands based on conditional.\n"
 "    \n"
@@ -4939,52 +4765,50 @@ msgid ""
 msgstr ""
 "根据条件执行命令。\n"
 "    \n"
-"    `if COMMANDS'列表被执行。如果退出状态为零,则执行`then COMMANDS' \n"
-"    å\88\97表ã\80\82å\90¦å\88\99æ\8c\89顺åº\8fæ\89§è¡\8cæ¯\8f个 `elif COMMANDS'å\88\97表ï¼\8c并ä¸\94å¦\82æ\9e\9cå®\83ç\9a\84é\80\80å\87ºç\8a¶æ\80\81为\n"
-"    零,则执行对应的 `then COMMANDS' 列表并且 if 命令终止。否则如果存在的\n"
-"    æ\83\85å\86µä¸\8bï¼\8cæ\89§è¡\8c `else COMMANDS'å\88\97表ã\80\82æ\95´ä¸ªç»\93æ\9e\84ç\9a\84é\80\80å\87ºç\8a¶æ\80\81æ\98¯æ\9c\80å\90\8eä¸\80个æ\89§è¡\8c\n"
-"    的命令的状态,或者如果没有条件测试为真的话,为零。\n"
+"    执行 \"if 命令\" 列表。如果退出状态为零,则执行 \"then 命令\" 列表。\n"
+"    å\90¦å\88\99æ\8c\89顺åº\8fæ\89§è¡\8cæ¯\8f个 \"elif å\91½ä»¤\" å\88\97表ï¼\8cå¦\82æ\9e\9cæ\9f\90ä¸\80个ç\9a\84é\80\80å\87ºç\8a¶æ\80\81为é\9b¶ï¼\8cå\88\99æ\89§è¡\8c\n"
+"    对应的 \"then 命令\" 列表,然后 if 命令完成。否则,执行 \"else 命令\"\n"
+"    å\88\97表ï¼\88å¦\82æ\9e\9cæ\9c\89ç\9a\84è¯\9dï¼\89ã\80\82æ\95´ä¸ªç»\93æ\9e\84ç\9a\84é\80\80å\87ºç\8a¶æ\80\81æ\98¯æ\9c\80å\90\8eä¸\80个æ\89§è¡\8cç\9a\84å\91½ä»¤ç\9a\84ç\8a¶æ\80\81ï¼\8c\n"
+"    或者如果没有一个条件的测试结果为真,则退出状态为零。\n"
 "    \n"
 "    退出状态:\n"
 "    返回最后一个执行的命令的状态。"
 
-#: builtins.c:1647
+#: builtins.c:1648
 msgid ""
 "Execute commands as long as a test succeeds.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `while' COMMANDS has an exit status of zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n"
+"    an exit status of zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
-"只要测试成功即执行命令。\n"
+"只要测试仍然成功,就执行命令。\n"
 "    \n"
-"    只要在 `while' COMMANDS 中的最终命令返回结果为0,则\n"
-"    展开并执行 COMMANDS 命令。\n"
+"    只要 <命令> 中的最后一个命令的退出状态仍然为 0,就展开并执行 <命令-2>。\n"
 "    \n"
 "    退出状态:\n"
 "    返回最后一个执行的命令的状态。"
 
-#: builtins.c:1659
+#: builtins.c:1660
 msgid ""
 "Execute commands as long as a test does not succeed.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `until' COMMANDS has an exit status which is not zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n"
+"    an exit status which is not zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
-"å½\93æµ\8bè¯\95ä¸\8då\90\8cè¿\87æ\97执行命令。\n"
+"å\8fªè¦\81æµ\8bè¯\95ä»\8dç\84¶ä¸\8dæ\88\90å\8a\9fï¼\8cå°±执行命令。\n"
 "    \n"
-"    `until' COMMANDS 命令的最终命令返回状态不为 0 时,\n"
-"    展开并执行 COMMANDS 命令。\n"
+"    只要 <命令> 中的最后一个命令的退出状态仍然不为 0,就展开并执行 <命令-2>。\n"
 "    \n"
 "    退出状态:\n"
 "    返回最后一个执行的命令的状态。"
 
-#: builtins.c:1671
+#: builtins.c:1672
 msgid ""
 "Create a coprocess named NAME.\n"
 "    \n"
@@ -4996,17 +4820,17 @@ msgid ""
 "    Exit Status:\n"
 "    The coproc command returns an exit status of 0."
 msgstr ""
-"创建一个以 NAME 为名的副进程。\n"
+"创建一个名为 <名称> 的副进程。\n"
 "    \n"
-"    异步执行 COMMANDS 命令,在执行 shell 中的数组变量 NAME\n"
-"    的 0 号和 1 号元素作为文件描述符,以一个管道连接命令\n"
-"    分别作为命令的标准输出和输入设备。\n"
-"    默认的 NAME 是 \"COPROC\"。\n"
+"    异步执行 <命令>,并将命令的标准输出和标准输入通过管道连接到执行该命令\n"
+"    的 shell 的文件描述符,再将两个文件描述符分别赋值给数组变量 <名称> 的\n"
+"    索引为 0 和 1 的元素。\n"
+"    默认的 <名称> 是 \"COPROC\"。\n"
 "    \n"
 "    退出状态:\n"
-"    副进程会返回退出状态 0。"
+"    coproc 命令返回退出状态 0。"
 
-#: builtins.c:1685
+#: builtins.c:1686
 msgid ""
 "Define shell function.\n"
 "    \n"
@@ -5020,15 +4844,14 @@ msgid ""
 msgstr ""
 "定义 shell 函数。\n"
 "    \n"
-"    创建一个以 NAME 为名的 shell 函数。当作为一个简单的命令启用时,\n"
-"    NAME 函数执行调用 shell 的上下文中的 COMMANDs 命令。当 NAME\n"
-"    被启用时,参数作为 $1...$n 被传递给函数,函数的名字储存在变量\n"
-"    $FUNCNAME 中。\n"
+"    创建一个名为 <名称> 的 shell 函数。当作为一个简单命令被调用时,\n"
+"    <名称> 在调用它的 shell 的上下文中执行 <命令>。当 <名称> 被调用时,\n"
+"    传递给函数的参数储存在 $1...$n 中,函数名储存在 $FUNCNAME 中。\n"
 "    \n"
 "    退出状态:\n"
-"    返回成功除非 NAME 为只读。"
+"    返回成功,除非 <名称> 为只读。"
 
-#: builtins.c:1699
+#: builtins.c:1700
 msgid ""
 "Group commands as a unit.\n"
 "    \n"
@@ -5040,13 +4863,12 @@ msgid ""
 msgstr ""
 "将命令组合为一个单元。\n"
 "    \n"
-"    运行组中的命令集合。这是对整个命令集合\n"
-"    做重定向的方法之一。\n"
+"    运行一个组中的命令集合。这是对整个命令集合进行重定向的方法之一。\n"
 "    \n"
 "    退出状态:\n"
 "    返回最后一个执行的命令的状态。"
 
-#: builtins.c:1711
+#: builtins.c:1712
 msgid ""
 "Resume job in foreground.\n"
 "    \n"
@@ -5059,27 +4881,17 @@ msgid ""
 "    Exit Status:\n"
 "    Returns the status of the resumed job."
 msgstr ""
-"在前台继续任务\n"
+"在前台继续任务\n"
 "    \n"
-"    对于 JOB_SPEC 参数来说和 `fg' 命令等同。继续一个\n"
-"    停止的或者后台任务。JOB_SPEC 可以指定一个任务\n"
-"    名字或任务号。在 JOB_SPEC 后加上一个 `&' 将会把\n"
-"    任务放至后台,就像任务声明被作为 `bg' 命令的参数\n"
+"    等价于向 \"fg\" 命令传递 <任务说明符> 参数。继续一个已停止的任务或\n"
+"    后台任务。<任务说明符> 可以是任务名称或任务编号。在 <任务说明符>\n"
+"    后加上一个 \"&\" 会把任务放至后台,就像该任务说明符被作为 \"bg\" 的参数\n"
 "    执行一样。\n"
 "    \n"
 "    退出状态:\n"
 "    返回被继续的任务的状态。"
 
-#: builtins.c:1726
-#, fuzzy
-#| msgid ""
-#| "Evaluate arithmetic expression.\n"
-#| "    \n"
-#| "    The EXPRESSION is evaluated according to the rules for arithmetic\n"
-#| "    evaluation.  Equivalent to \"let EXPRESSION\".\n"
-#| "    \n"
-#| "    Exit Status:\n"
-#| "    Returns 1 if EXPRESSION evaluates to 0; returns 0 otherwise."
+#: builtins.c:1727
 msgid ""
 "Evaluate arithmetic expression.\n"
 "    \n"
@@ -5089,15 +4901,14 @@ msgid ""
 "    Exit Status:\n"
 "    Returns 1 if EXPRESSION evaluates to 0; returns 0 otherwise."
 msgstr ""
-"估值算术表达式。\n"
+"对算术表达式进行求值。\n"
 "    \n"
-"    表达式按照算术法则进行估值。\n"
-"    等价于 \"let 表达式\".\n"
+"    对 <表达式> 按照算术求值的规则进行求值。等价于 \"let <表达式>\"。\n"
 "    \n"
-"    退出状态\n"
-"    如果表达式估值为0则返回 1;否则返回0。"
+"    退出状态\n"
+"    如果 <表达式> 求值结果为 0,则返回 1;否则返回 0。"
 
-#: builtins.c:1738
+#: builtins.c:1739
 msgid ""
 "Execute conditional command.\n"
 "    \n"
@@ -5123,25 +4934,26 @@ msgid ""
 msgstr ""
 "执行条件命令。\n"
 "    \n"
-"    根据条件表达式 EXPRESSION 的估值返回状态0或1。表达式按照\n"
-"    `test' 内建的相同条件组成,或者可以有下列操作符连接而成:\n"
+"    根据条件表达式 <表达式> 的求值结果返回状态 0 或 1。表达式的基本元素\n"
+"    与 \"test\" 内建相同,且可以通过下列运算符进行组合:\n"
 "    \n"
-"      ( EXPRESSION )\t返回 EXPRESSION 表达式的值\n"
-"      ! EXPRESSION\t\t如果 EXPRESSION表达式为假则为真,否则为假\n"
-"      EXPR1 && EXPR2\t如果 EXPR1 和 EXPR2 表达式均为真则为真,否则为假\n"
-"      EXPR1 || EXPR2\t如果 EXPR1 和 EXPR2 表达式中有一个为真则为真,否则为假\n"
+"      ( 表达式 )\t\t返回 <表达式> 的值\n"
+"      ! 表达式\t\t\t如果 <表达式> 为假则为真,否则为假\n"
+"      表达式1 && 表达式2\t如果 <表达式1> 和 <表达式2> 均为真则为真,\n"
+"      \t\t\t\t否则为假\n"
+"      表达式1 || 表达式2\t如果 <表达式1> 和 <表达式2> 中任何一个为真\n"
+"      \t\t\t\t则为真,否则为假\n"
 "    \n"
-"    当使用 `==' 和 `!=' 操作符时,操作符右边的字符串被用作模式并且执行一个\n"
-"    匹配。当使用 `=~' 操作符时,操作符右边的字符串被当作正则表达式来进行\n"
-"    匹配。\n"
+"    当使用 \"==\" 和 \"!=\" 运算符时,运算符右边的字符串被视为模式,进行模式匹配。\n"
+"    当使用 \"=~\" 运算符时,运算符右边的字符串被视为正则表达式来进行匹配。\n"
 "    \n"
-"    操作符 && 和 || 将不对 EXPR2 表达式进行估值,如果 EXPR1 表达式足够确定\n"
-"    整个表达式的值。\n"
+"    如果 <表达式1> 足够确定整个表达式的值,运算符 && 和 || 将不会对\n"
+"    <表达式2> 进行求值。\n"
 "    \n"
 "    退出状态:\n"
-"    根据 EXPRESSION 的值为0或1。"
+"    根据 <表达式> 的值返回 0 或 1。"
 
-#: builtins.c:1764
+#: builtins.c:1765
 msgid ""
 "Common shell variable names and usage.\n"
 "    \n"
@@ -5194,49 +5006,45 @@ msgid ""
 "    HISTIGNORE\tA colon-separated list of patterns used to decide which\n"
 "    \t\tcommands should be saved on the history list.\n"
 msgstr ""
-"常用 shell 变量名称和使用。\n"
+"常用 shell 变量名称和用法。\n"
 "    \n"
 "    BASH_VERSION\t当前 Bash 的版本信息。\n"
-"    CDPATH\t用于 `cd' 命令参数搜索的分号分隔的目录列表\n"
-"    GLOBIGNORE\t路径扩展时忽略的文件名匹配模式列表,\n"
-"    \t\t以分号分隔。\n"
-"    HISTFILE\t您的命令历史存放的文件名称。\n"
+"    CDPATH\t用于搜索 \"cd\" 的参数中的目录的,以冒号分隔的目录列表\n"
+"    GLOBIGNORE\t路径名展开时要忽略的文件名的模式列表,以冒号分隔。\n"
+"    HISTFILE\t存储您的命令历史的文件名称。\n"
 "    HISTFILESIZE\t历史文件最多可以保存的行数。\n"
 "    HISTSIZE\t一个运行的 shell 最多可以访问的历史命令行数。\n"
-"    HOME\t您的登录目录的完整路径。\n"
+"    HOME\t您的登录目录的完整路径。\n"
 "    HOSTNAME\t当前主机的主机名。\n"
-"    HOSTTYPE\t当前版本的 BASH 在其之上运行的 CPU 类型。\n"
-"    IGNOREEOF\t控制 shell 收到文件结束符作为单一输入后的\n"
-"    \t\t动作。如果设定这个变量,则它的值是 shell 退出之前在\n"
-"    \t\t一个空行上可以连续看到的文件结束符数量(默认为10)。\n"
-"    \t\t未设定时,文件结束符标志着输入的结束。\n"
+"    HOSTTYPE\t运行当前版本 BASH 的 CPU 的类型。\n"
+"    IGNOREEOF\t控制 shell 收到 EOF 作为唯一输入字符后的动作。如果\n"
+"    \t\t该变量被设定,则它的值是 shell 退出之前在一个空行上\n"
+"    \t\t可以连续读取到的 EOF 数量(默认为 10)。如果未设定,\n"
+"    \t\tEOF 标志着输入的结束。\n"
 "    MACHTYPE\t描述当前运行 Bash 的系统的字符串。\n"
-"    MAILCHECK\tBash 检测新邮件的频率,以秒为单位。\n"
-"    MAILPATH\tBash 从中检测新邮件的文件列表,以分号分隔。\n"
-"    OSTYPE\t运行 Bash 的 Unix 版本。\n"
-"    PATH\t当寻找命令时搜索的目录列表,以冒号分隔。\n"
-"    PROMPT_COMMAND\t打印每一个主提示符之前执行的命\n"
-"    \t\t令。\n"
+"    MAILCHECK\tBash 检查新邮件的频率,以秒为单位。\n"
+"    MAILPATH\tBash 从中检查新邮件的文件列表,以冒号分隔。\n"
+"    OSTYPE\t运行当前版本 Bash 的 Unix 版本。\n"
+"    PATH\t寻找命令时搜索的目录列表,以冒号分隔。\n"
+"    PROMPT_COMMAND\t每次打印主提示符之前执行的命令。\n"
 "    PS1\t\t主提示符字符串。\n"
-"    PS2\t\t提示符字符串。\n"
-"    PWD\t\t当前目录的完整路径。\n"
+"    PS2\t\t提示符字符串。\n"
+"    PWD\t\t当前目录的完整路径。\n"
 "    SHELLOPTS\t已启用的 shell 选项列表,以冒号分隔。\n"
 "    TERM\t当前终端类型的名称。\n"
-"    TIMEFORMAT\t以关键则 `time' 显示的时间统计信息的输出\n"
-"    \t\t格式。\n"
-"    auto_resume\t非空时,一个单独的命令词会首先被在当前\n"
-"    \t\t停止的任务列表中搜索。如果找到则该任务被置于前台。\n"
-"    \t\t如果值为 `exact' 则意味着命令词必须精确匹配停止任务\n"
-"    \t\t列表中的命令。如果值为 `substring' 则意味着命令词必\n"
-"    \t\t须匹配任务的一个子字符串。任何其他的值意味着命令词\n"
-"    \t\t必须是停止任务的一个前缀。\n"
+"    TIMEFORMAT\t保留字 \"time\" 显示的时间统计信息的输出格式。\n"
+"    auto_resume\t非空时,一个单独的命令词会首先被在当前已停止的\n"
+"    \t\t任务列表中搜索。如果找到,则该任务被置于前台。\n"
+"    \t\t如果值为 \"exact\" 则意味着命令词必须精确匹配已停止的\n"
+"    \t\t任务列表中的命令。如果值为 \"substring\" 则意味着命令词\n"
+"    \t\t必须匹配任务的一个子字符串。任何其他的值意味着命令词\n"
+"    \t\t必须是已停止的任务的一个前缀。\n"
 "    histchars\t控制历史展开和快速替换的字符。第一个字符是\n"
-"    \t\t历史替换字符,通常是 `!'。第二个字符是快速替换字符,\n"
-"    \t\t通常是 `^'。第三个是历史注释字符,通常是 `#'。\n"
-"    HISTIGNORE\t用于决定哪些命令被存入历史文件的模式\n"
-"    \t\t列表,以冒号分隔。\n"
+"    \t\t历史替换字符,通常是 \"!\"。第二个字符是快速替换字符,\n"
+"    \t\t通常是 \"^\"。第三个字符是历史注释字符,通常是 \"#\"。\n"
+"    HISTIGNORE\t用于决定哪些命令被存入历史文件的模式列表,以冒号分隔。\n"
 
-#: builtins.c:1821
+#: builtins.c:1822
 msgid ""
 "Add directories to stack.\n"
 "    \n"
@@ -5268,28 +5076,28 @@ msgid ""
 msgstr ""
 "将目录添加到栈中。\n"
 "    \n"
-"    将目录添加到目录栈顶,或着旋转栈直到当前工作目录成为\n"
+"    将目录添加到目录栈顶,或者轮转栈直到当前工作目录成为\n"
 "    新的栈顶。不带参数时,交换栈顶的两个目录。\n"
 "    \n"
 "    选项:\n"
-"      -n\t抑制添加目录至栈时通常的改变目录操作,从而仅对栈\n"
-"    \t进行操作。\n"
+"      -n\t阻止添加目录至栈时通常的改变目录操作,从而仅对栈\n"
+"    \t\t进行操作。\n"
 "    \n"
 "    参数:\n"
-"      +N\t旋转栈从而第 N 个目录 (`dirs' 显示的列表中左起,从零开始)\n"
-"    \t移动到栈顶。\n"
+"      +N\t轮转栈,使得第 N 个目录(\"dirs\" 显示的列表中左起,\n"
+"    \t\t从零开始)移动到栈顶。\n"
 "    \n"
-"      -N\t旋转栈从而第 N 个目录 (`dirs' 显示的列表中右起,从零开始)\n"
-"    \t移动到栈顶。\n"
+"      -N\t轮转栈,使得第 N 个目录(\"dirs\" 显示的列表中右起,\n"
+"    \t\t从零开始)移动到栈顶。\n"
 "    \n"
-"      dir\t将 DIR 目录添加到栈顶,并且使其成为当前工作目录。\n"
+"      目录\t将 <目录> 添加到栈顶,使其成为当前工作目录。\n"
 "    \n"
-"    `dirs' 内建显示目录栈。\n"
+"    \"dirs\" 内建可以显示目录栈。\n"
 "    \n"
 "    退出状态:\n"
-"    返回成功,除非使用了无效的参数或者目录转换失败。"
+"    返回成功,除非使用了无效的参数,或者改变目录失败。"
 
-#: builtins.c:1855
+#: builtins.c:1856
 msgid ""
 "Remove directories from stack.\n"
 "    \n"
@@ -5317,26 +5125,24 @@ msgid ""
 msgstr ""
 "从栈中删除目录。\n"
 "    \n"
-"    从目录栈中删除条目。不带参数时,删除栈顶目录,并改变至新的栈\n"
-"    顶目录。\n"
+"    从目录栈中删除条目。不带参数时,删除栈顶目录,并改变目录至新的栈顶目录。\n"
 "    \n"
 "    选项:\n"
-"      -n\t抑制从栈中删除目录时通常的目录变换操作,从而仅对栈\n"
-"    \t进行操作。\n"
+"      -n\t阻止从栈中删除目录时通常的改变目录操作,从而仅对栈进行操作。\n"
 "    \n"
 "    参数:\n"
-"      +N\t删除第 N 个目录 (`dirs' 显示的目录列表中左起,从零开始)。\n"
-"    \t例如:`popd +0' 删除第一个目录,`popd +1' 删除第二个。\n"
+"      +N\t删除第 N 个目录(\"dirs\" 显示的列表中左起,从零开始)。\n"
+"    \t\t例如:\"popd +0\" 删除第一个目录,\"popd +1\" 删除第二个。\n"
 "    \n"
-"      -N\t删除第 N 个目录 (`dirs' 显示的目录列表中右起,从零开始)。\n"
-"    \t例如:`popd -0' 删除最后一个目录,,`popd -1' 删除倒数第二个。\n"
+"      -N\t删除第 N 个目录(\"dirs\" 显示的列表中右起,从零开始)。\n"
+"    \t\t例如:\"popd -0\" 删除最后一个目录,\"popd -1\" 删除倒数第二个。\n"
 "    \n"
-"    `dirs' 内建显示目录栈。\n"
+"    \"dirs\" 内建可以显示目录栈。\n"
 "    \n"
 "    退出状态:\n"
-"    返回成功,除非使用了无效的参数或者目录变换失败。"
+"    返回成功,除非使用了无效的参数,或者改变目录失败。"
 
-#: builtins.c:1885
+#: builtins.c:1886
 msgid ""
 "Display directory stack.\n"
 "    \n"
@@ -5366,26 +5172,27 @@ msgid ""
 msgstr ""
 "显示目录栈。\n"
 "    \n"
-"    显示当前记住的目录列表。通过 `pushd' 命令可以将目录存入列表\n"
-"    ä¸­ï¼\9b`popd' å\91½ä»¤å\8f¯ç\94¨äº\8eé\81\8då\8e\86å¼¹å\87ºå\88\97表。\n"
+"    显示当前记住的目录列表。 使用 \"pushd\" 命令将目录加入这个列表;\n"
+"    ä½¿ç\94¨ \"popd\" å\91½ä»¤é\80\90个å\9b\9eå\88°ä¹\8bå\89\8då\8a å\85¥å\88\97表ç\9a\84ç\9b®å½\95。\n"
 "    \n"
 "    选项:\n"
 "      -c\t删除所有元素以清空目录栈\n"
-"      -l\t不打印与主目录相关的波浪号前缀的目录\n"
+"      -l\t打印目录时,不表示为以波浪号 (~) 为前缀的,\n"
+"    \t\t相对于您的主目录的路径\n"
 "      -p\t每行一个条目打印目录栈\n"
-"      -v\t每行一个条目,以栈中位置为前缀打印目录栈\n"
+"      -v\t每行一个条目打印目录栈,前面加上在栈中的位置\n"
 "    \n"
 "    参数:\n"
-"      +N\t显示 dirs 不带选项启动时显示的目录列表左起中第\n"
-"    \tN 个目录,从零开始。\n"
+"      +N\t显示 dirs 不带选项启动时显示的目录列表中左起第 N 个目录,\n"
+"    \t\t从零开始。\n"
 "    \n"
-"      -N\t显示 dirs 不带选项启动时显示的目录列表右起中第\n"
-"    \tN 个目录,从零开始。\n"
+"      -N\t显示 dirs 不带选项启动时显示的目录列表中右起第 N 个目录,\n"
+"    \t\t从零开始。\n"
 "    \n"
 "    退出状态:\n"
-"    返回成功,除非使用了无效的选项或者发生错误。"
+"    返回成功,除非使用了无效的选项,或者有错误发生。"
 
-#: builtins.c:1916
+#: builtins.c:1917
 msgid ""
 "Set and unset shell options.\n"
 "    \n"
@@ -5406,22 +5213,22 @@ msgid ""
 msgstr ""
 "设定和取消设定 shell 选项。\n"
 "    \n"
-"    改变每个 shell 选项 OPTNAME 的设定。不带参数时,\n"
-"    列出每个提供的 OPTNAME,否则列出所有 shell 选项;\n"
-"    同时标注每一个选项是否被设定。\n"
+"    改变每个 shell 选项 <选项名> 的设定。不带选项时,列出每个提供的\n"
+"    <选项名>,或者如果没有提供 <选项名> 时,列出所有 shell 选项,同时\n"
+"    标注每一个选项是否被设定。\n"
 "    \n"
 "    选项:\n"
-"      -o\t限制 OPTNAME 为定义用于`set -o' 的选项\n"
+"      -o\t限制 <选项名>,只使用可被 \"set -o\" 设置的选项\n"
 "      -p\t打印每个 shell 选项并标注它的状态。\n"
-"      -q\t抑制输出\n"
-"      -s\t启用(设定)每个 OPTNAME 选项\n"
-"      -u\t禁用(取消设定)每个 OPTNAME 选项\n"
+"      -q\t阻止输出\n"
+"      -s\t启用(设定)每个 <选项名>\n"
+"      -u\t禁用(取消设定)每个 <选项名>\n"
 "    \n"
 "    退出状态:\n"
-"    如果 OPTNAME 选项被启用则返回成功;如果是\n"
-"    无效的选项或 OPTNAME 被禁用则失败。"
+"    如果 <选项名> 被启用则返回成功;如果使用了无效的选项,或者 <选项名>\n"
+"    被禁用,则返回失败。"
 
-#: builtins.c:1937
+#: builtins.c:1938
 msgid ""
 "Formats and prints ARGUMENTS under control of the FORMAT.\n"
 "    \n"
@@ -5440,6 +5247,8 @@ msgid ""
 "    \n"
 "      %b\texpand backslash escape sequences in the corresponding argument\n"
 "      %q\tquote the argument in a way that can be reused as shell input\n"
+"      %Q\tlike %q, but apply any precision to the unquoted argument before\n"
+"    \t\tquoting\n"
 "      %(fmt)T\toutput the date-time string resulting from using FMT as a format\n"
 "    \t        string for strftime(3)\n"
 "    \n"
@@ -5452,49 +5261,31 @@ msgid ""
 "    Returns success unless an invalid option is given or a write or assignment\n"
 "    error occurs."
 msgstr ""
-"在 FORMAT 的控制下格式化并打印 ARGUMENTS 参数。\n"
+"在 <格式> 的控制下格式化并打印 <参数>。\n"
 "    \n"
 "    选项:\n"
-"      -v var\t将输出赋值给 shell 变量 VAR 而不显示在标准输出上\n"
+"      -v 变量\t将输出赋值给 shell 变量 <变量>,而不是将它显示在\n"
+"    \t\t标准输出上\n"
+"    \n"
+"    FORMAT 是包含三种类型的对象的字符串:普通字符,会被简单地复制到标准输出;\n"
+"    字符转义序列,会在转义之后复制到标准输出;格式说明符,每个都会让 shell 打印\n"
+"    下一个多余的参数。\n"
 "    \n"
-"    FORMAT 是包含三种对象的字符串:简单地被拷贝到标准输出的普通字符;\n"
-"    被变换之后拷贝到标准输入的转义字符;以及每个都会影响到下个参数的打印的格式化声明。\n"
+"    除了 printf(1) 中描述的标准格式说明符以外,printf 还可解析:\n"
 "    \n"
-"    在 printf(1) 中描述的标准控制声明之外,printf 解析:\n"
+"      %b\t展开对应参数中的反斜杠转义序列\n"
+"      %q\t以可以重新用作 shell 输入的格式给参数加上引号\n"
+"      %Q\t类似 %q,但是精度要求会在加引号之前对尚未加引号的参数生效\n"
+"      %(格式)T\t将 <格式> 作为 strftime(3) 的格式字符串,并输出产生的\n"
+"    \t        日期-时间字符串\n"
 "    \n"
-"      %b\t扩展对应参数中的反斜杠转义序列\n"
-"      %q\t以可作为 shell 输入的格式引用参数\n"
-"      %(fmt)T\t以 FMT 为供给 strftime(3) 的格式输出日期时间字符串\n"
+"    有必要时,会重新使用格式串以消耗所有参数。如果参数的数量少于格式串要求\n"
+"    的数量,则视为将零值或空字符串(视情况而定)提供给了多余的格式说明符。\n"
 "    \n"
 "    退出状态:\n"
-"    返回成功,除非使用了无效的选项或者写或赋值错误发生。"
-
-#: builtins.c:1971
-#, fuzzy
-#| msgid ""
-#| "Specify how arguments are to be completed by Readline.\n"
-#| "    \n"
-#| "    For each NAME, specify how arguments are to be completed.  If no options\n"
-#| "    are supplied, existing completion specifications are printed in a way that\n"
-#| "    allows them to be reused as input.\n"
-#| "    \n"
-#| "    Options:\n"
-#| "      -p\tprint existing completion specifications in a reusable format\n"
-#| "      -r\tremove a completion specification for each NAME, or, if no\n"
-#| "    \t\tNAMEs are supplied, all completion specifications\n"
-#| "      -D\tapply the completions and actions as the default for commands\n"
-#| "    \t\twithout any specific completion defined\n"
-#| "      -E\tapply the completions and actions to \"empty\" commands --\n"
-#| "    \t\tcompletion attempted on a blank line\n"
-#| "      -I\tapply the completions and actions to the initial (usually the\n"
-#| "    \t\tcommand) word\n"
-#| "    \n"
-#| "    When completion is attempted, the actions are applied in the order the\n"
-#| "    uppercase-letter options are listed above.  If multiple options are supplied,\n"
-#| "    the -D option takes precedence over -E, and both take precedence over -I.\n"
-#| "    \n"
-#| "    Exit Status:\n"
-#| "    Returns success unless an invalid option is supplied or an error occurs."
+"    返回成功,除非使用了无效的选项,或者发生了写入或赋值错误。"
+
+#: builtins.c:1974
 msgid ""
 "Specify how arguments are to be completed by Readline.\n"
 "    \n"
@@ -5522,25 +5313,24 @@ msgid ""
 msgstr ""
 "指定 Readline 如何补全参数。\n"
 "    \n"
-"    声明对于每一个 NAME 名称如何补全参数。如果不带选项,\n"
-"    现有的补全声明会以可以重用为输入的格式打印出来。\n"
+"    指定对于每一个 <名称> 如何补全参数。如果不带选项,现有的补全规约会以\n"
+"    可以重新用作输入的格式打印出来。\n"
 "    \n"
 "    选项:\n"
-"      -p\t以可重用的格式打印现有的补全声明。\n"
-"      -r\t对于每个 NAME 名称删除补全声明,或者如果没有提供 NAME\n"
-"    \t名称,删除所有的补全声明。\n"
-"      -D\t对于没有补全声明定义的命令,设定默认的补全动作\n"
-"      -E\t对于 \"empty\" 命令设定补全动作,—— 对于空行的补全。\n"
-"      -I\t将补全和动作应用在首单词(通常是所给命令)上\n"
+"      -p\t以可重用的格式打印现有的补全规约\n"
+"      -r\t对每一个 <名称> 删除补全规约,或者,如果没有提供 <名称> ,\n"
+"    \t\t删除所有的补全规约\n"
+"      -D\t设定默认的补全和动作,给没有定义补全规约的命令使用\n"
+"      -E\t对于 \"空\" (empty) 命令设定补全动作 -- 对于空行的补全\n"
+"      -I\t将补全和动作应用在首单词(通常是所给命令)上\n"
 "    \n"
-"    尝试补全时,按照上述大写字母选项的顺序进行动作。\n"
-"    如果给出了多个选项,-D 选项优先级高于 -E 选项,且\n"
-"    这两个选项优先级均高于 -I。\n"
+"    尝试补全时,按照上述大写字母选项的顺序进行动作。如果给出了多个选项,\n"
+"    -D 选项优先级高于 -E 选项,且这两个选项优先级均高于 -I。\n"
 "    \n"
 "    退出状态:\n"
-"    返回成功,除非使用了无效的选项或者错误发生。"
+"    返回成功,除非使用了无效的选项,或者有错误发生。"
 
-#: builtins.c:2001
+#: builtins.c:2004
 msgid ""
 "Display possible completions depending on the options.\n"
 "    \n"
@@ -5553,14 +5343,13 @@ msgid ""
 msgstr ""
 "依据选项显示可能的补全。\n"
 "    \n"
-"    意图在能产生可能的补全的 shell 函数内部使用。\n"
-"    如果提供了可选的 WORD 参数,则产生按照 WORD\n"
-"    进行的匹配。\n"
+"    设计意图是在用来生成可能的补全的 shell 函数的内部使用。\n"
+"    如果提供了可选的 <词语> 参数,则依据 <词语> 产生匹配。\n"
 "    \n"
 "    退出状态:\n"
-"    é\99¤é\9d\9e使ç\94¨äº\86æ\97 æ\95\88é\80\89项æ\88\96è\80\85é\94\99误å\8f\91ç\94\9fï¼\8cå\90¦å\88\99è¿\94å\9b\9eæ\88\90å\8a\9fã\80\82"
+"    è¿\94å\9b\9eæ\88\90å\8a\9fï¼\8cé\99¤é\9d\9e使ç\94¨äº\86æ\97 æ\95\88ç\9a\84é\80\89项ï¼\8cæ\88\96è\80\85æ\9c\89é\94\99误å\8f\91ç\94\9fã\80\82"
 
-#: builtins.c:2016
+#: builtins.c:2019
 msgid ""
 "Modify or display completion options.\n"
 "    \n"
@@ -5590,27 +5379,27 @@ msgid ""
 msgstr ""
 "修改或显示补全选项。\n"
 "    \n"
-"    修改每个 NAME 名称的补全选项,或如果没有提供 NAME 名称,执行当前的补全。\n"
-"    如果不带选项,打印每个 NAME 名称的补全选项或当前的补全声明。\n"
+"    修改每个 <名称> 的补全选项,或者如果没有提供 <名称>,修改正在执行的补全的\n"
+"    选项。如果没有提供 <选项>,打印每个 <名称> 的补全选项或者当前的补全规约。\n"
 "    \n"
 "    选项:\n"
-"    \t-o option\t为每个 NAME 名称设定补全选项 option\n"
-"    \t-D\t\t为 \"default\" å\91½ä»¤è¡¥å\85¨æ\94¹å\8f\98选项\n"
-"    \t-E\t\t为 \"empty\" å\91½ä»¤è¡¥å\85¨æ\94¹å\8f\98选项\n"
-"    \t-I\t\t为é¦\96å\8d\95è¯\8dç\9a\84è¡¥å\85¨æ\94¹å\8f\98选项\n"
+"    \t-o 选项\t\t为每个 <名称> 设定补全选项 <选项>\n"
+"    \t-D\t\tä¿®æ\94¹ \"é»\98认\" (default) å\91½ä»¤ç\9a\84è¡¥å\85¨选项\n"
+"    \t-E\t\tä¿®æ\94¹ \"空\" (empty) å\91½ä»¤ç\9a\84è¡¥å\85¨选项\n"
+"    \t-I\t\tä¿®æ\94¹é¦\96个å\8d\95è¯\8dç\9a\84è¡¥å\85¨选项\n"
 "    \n"
-"    使用 `+o' 而不是 `-o' 可以关闭指定的选项。\n"
+"    使用 \"+o\" 代替 \"-o\" 可以关闭指定的选项。\n"
 "    \n"
 "    参数:\n"
 "    \n"
-"    每个 NAME 名称都对应一个之前以通过 `complete' 内建定义了的补全声明的\n"
-"    å\91½ä»¤ã\80\82å¦\82æ\9e\9cä¸\8dæ\8f\90ä¾\9b NAME å\90\8d称ï¼\8cå½\93å\89\8dç\94\9fæ\88\90è¡¥å\85¨ç\9a\84å\87½æ\95°å¿\85é¡»è°\83ç\94¨ compopt,\n"
-"    å¹¶ä¸\94å½\93å\89\8dæ\89§è¡\8cç\9a\84è¡¥å\85¨ç\94\9fæ\88\90å\99¨选项会被修改。\n"
+"    每个 <名称> 都对应一个之前已通过 \"complete\" 内建定义了补全规约的命令。\n"
+"    å¦\82æ\9e\9c没æ\9c\89æ\8f\90ä¾\9b <å\90\8d称>ï¼\8ccompopt å¿\85é¡»ç\94±å½\93å\89\8dæ­£å\9c¨ç\94\9fæ\88\90è¡¥å\85¨ç\9a\84å\87½æ\95°è¿\9bè¡\8cè°\83ç\94¨,\n"
+"    å¹¶ä¸\94å½\93å\89\8dæ­£å\9c¨æ\89§è¡\8cç\9a\84è¡¥å\85¨ç\94\9fæ\88\90å\99¨ç\9a\84选项会被修改。\n"
 "    \n"
 "    退出状态:\n"
-"    返回成功,除非使用了无效的选项或者 NAME 名称没有定义补全声明。"
+"    返回成功,除非使用了无效的选项,或者 <名称> 没有定义补全规约。"
 
-#: builtins.c:2047
+#: builtins.c:2050
 msgid ""
 "Read lines from the standard input into an indexed array variable.\n"
 "    \n"
@@ -5644,33 +5433,34 @@ msgid ""
 "    Returns success unless an invalid option is given or ARRAY is readonly or\n"
 "    not an indexed array."
 msgstr ""
-"从标准输入读取行到下标数组变量中。\n"
+"从标准输入读取行到索引数组变量中。\n"
 "    \n"
-"    从标准输入读取行到下标数组变量 ARRAY 中,或者如果使用了 -u 选项,\n"
-"    从文件描述符 FD 中读取。MAPFILE 变量是默认的 ARRAY 变量。\n"
+"    从标准输入读取行到索引数组变量 <数组> 中,或者如果使用了 -u 选项,\n"
+"    从文件描述符 <FD> 中读取。默认的 <数组> 是 MAPFILE 变量。\n"
 "    \n"
 "    选项:\n"
-"      -d delim\t使用 DELIM 而非换行符断行\n"
-"      -n count\t最多拷贝 COUNT 行,如果 COUNT 为 0,则拷贝所有行。\n"
-"      -O origin\t从下标 ORIGIN 开始 赋值给 ARRAY 变量。默认下标是0.\n"
-"      -s count \t丢弃最先读取的 COUNT 行。\n"
-"      -t\t\t从读取的每行末尾删除一个换行符。\n"
-"      -u fd\t\t从文件描述符 FD 中读取行而不是标准输入。\n"
-"      -C callback\t每 QUANTUM 次读行之后对 CALLBACK 回调进行估值。\n"
-"      -c quantum\t定义每次调用 CALLBACK 回调之间读取的行数。\n"
+"      -d 分隔符\t使用 <分隔符> 而非换行符标志一行的结束\n"
+"      -n 计数\t最多复制 <计数> 行。如果 <计数> 为 0,则复制所有行\n"
+"      -O 起始\t从索引 <起始> 开始赋值给 <数组> 变量。默认索引是 0\n"
+"      -s 计数\t丢弃最初读取的 <计数> 行\n"
+"      -t\t从读取的每行末尾删除一个 <分隔符>(默认为换行符)\n"
+"      -u fd\t从文件描述符 <FD> 中读取行,而不是标准输入\n"
+"      -C 回调\t每读取 <间隔> 行之后对 <回调> 进行求值\n"
+"      -c 间隔\t指定每次调用 <回调> 之前读取的行数\n"
 "    \n"
 "    参数:\n"
-"      ARRAY\t\t存储数据使用的数组变量\n"
+"      数组\t存储文件数据使用的数组变量名\n"
 "    \n"
-"    如果使用了 -C 而没有 -c,默认的量子是5000。当对 CALLBACK 估值时,\n"
-"    下一个将被赋值的数组元素的下标作为额外参数被传递。\n"
+"    如果使用了 -C 而没有 -c,默认的间隔是 5000。当对 <回调> 进行求值时,\n"
+"    下一个将被赋值的数组元素的索引以及将被赋给那个元素的行会作为额外参数\n"
+"    被传递给它。\n"
 "    \n"
-"    如果没有显式指定起始下标,mapfile 将在赋值前清空 ARRAY 变量。\n"
+"    如果没有显式指定起始索引,mapfile 会在赋值前清空 <数组>。\n"
 "    \n"
 "    退出状态:\n"
-"    返回成功,除非使用了无效的选项,或者 ARRAY 变量只读或不是下标数组。"
+"    返回成功,除非使用了无效的选项,或者 <数组> 为只读或不是索引数组。"
 
-#: builtins.c:2083
+#: builtins.c:2086
 msgid ""
 "Read lines from a file into an array variable.\n"
 "    \n"
@@ -5678,7 +5468,10 @@ msgid ""
 msgstr ""
 "从一个文件中读取行到数组变量中。\n"
 "    \n"
-"    一个 `mapfile'的同义词。"
+"    同 \"mapfile\"。"
+
+#~ msgid "%s: invalid associative array key"
+#~ msgstr "%s: 无效的关联数组键"
 
 #~ msgid ""
 #~ "Returns the context of the current subroutine call.\n"
index 75d5bc104669660fe3e9a809123a74531457ea52..9dd7546f07248c44a395e1f7799c47f982dd372b 100644 (file)
Binary files a/po/zh_TW.gmo and b/po/zh_TW.gmo differ
index 665d53e0e09c8c7708857eac8f9d8b1874c2dff6..91724f83ea164f5f0c6c3e2f1c1b7fe279d0480c 100644 (file)
@@ -5,78 +5,73 @@
 # Zi-You Dai <ioppooster@gmail.com>, 2008.
 # Mingye Wang (Arthur2e5) <arthur200126@hotmail.com>, 2015.
 # Wei-Lun Chao <bluebat@member.fsf.org>, 2015.
-# Yi-Jyun Pan <pan93412@gmail.com>, 2018, 2019, 2020.
+# Yi-Jyun Pan <pan93412@gmail.com>, 2018, 2019, 2020, 2021.
 msgid ""
 msgstr ""
-"Project-Id-Version: bash 5.1\n"
+"Project-Id-Version: bash 5.2-rc1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-11-28 12:51-0500\n"
-"PO-Revision-Date: 2020-12-08 06:39+0800\n"
+"POT-Creation-Date: 2022-01-11 14:50-0500\n"
+"PO-Revision-Date: 2022-07-28 01:08+0800\n"
 "Last-Translator: Yi-Jyun Pan <pan93412@gmail.com>\n"
 "Language-Team: Chinese (traditional) <zh-l10n@lists.linux.org.tw>\n"
 "Language: zh_TW\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Bugs: Report translation errors to the Language-Team address.\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Poedit 2.4.2\n"
+"X-Bugs: Report translation errors to the Language-Team address.\n"
+"X-Generator: Poedit 3.1.1\n"
 
 #: arrayfunc.c:66
 msgid "bad array subscript"
 msgstr "陣列下標不正確"
 
-#: arrayfunc.c:421 builtins/declare.def:638 variables.c:2274 variables.c:2300
-#: variables.c:3133
+#: arrayfunc.c:471 builtins/declare.def:709 variables.c:2242 variables.c:2268
+#: variables.c:3101
 #, c-format
 msgid "%s: removing nameref attribute"
 msgstr "%s:正在移除 nameref 屬性"
 
-#: arrayfunc.c:446 builtins/declare.def:851
+#: arrayfunc.c:496 builtins/declare.def:868
 #, c-format
 msgid "%s: cannot convert indexed to associative array"
 msgstr "%s: 無法將索引陣列轉化為關聯陣列"
 
-#: arrayfunc.c:700
-#, c-format
-msgid "%s: invalid associative array key"
-msgstr "%s: 無效的關聯陣列鍵值"
-
-#: arrayfunc.c:702
+#: arrayfunc.c:777
 #, c-format
 msgid "%s: cannot assign to non-numeric index"
 msgstr "%s: 無法指派為非數字的索引"
 
-#: arrayfunc.c:747
+#: arrayfunc.c:822
 #, c-format
 msgid "%s: %s: must use subscript when assigning associative array"
 msgstr "%s: %s: 指派為關聯陣列時必須使用下標"
 
-#: bashhist.c:452
+#: bashhist.c:455
 #, c-format
 msgid "%s: cannot create: %s"
 msgstr "%s: 無法建立: %s"
 
-#: bashline.c:4310
+#: bashline.c:4479
 msgid "bash_execute_unix_command: cannot find keymap for command"
 msgstr "bash_execute_unix_command: 無法為指令找到按鍵映射"
 
-#: bashline.c:4459
+#: bashline.c:4637
 #, c-format
 msgid "%s: first non-whitespace character is not `\"'"
 msgstr "%s: 第一個非空字元不是「\"」"
 
-#: bashline.c:4488
+#: bashline.c:4666
 #, c-format
 msgid "no closing `%c' in %s"
 msgstr "%2$s 中沒有閉合的「%1$c」"
 
-#: bashline.c:4519
+#: bashline.c:4697
 #, c-format
 msgid "%s: missing colon separator"
 msgstr "%s: 缺少冒號分隔符"
 
-#: bashline.c:4555
+#: bashline.c:4733
 #, c-format
 msgid "`%s': cannot unbind in command keymap"
 msgstr "「%s」: 無法在命令按鍵映射中解除綁定"
@@ -96,7 +91,7 @@ msgstr "大括號展開:為 %u 個元素分配記憶體失敗"
 msgid "brace expansion: failed to allocate memory for `%s'"
 msgstr "大括號展開:為「%s」分配記憶體失敗"
 
-#: builtins/alias.def:131 variables.c:1844
+#: builtins/alias.def:131 variables.c:1817
 #, c-format
 msgid "`%s': invalid alias name"
 msgstr "「%s」: 無效的別名"
@@ -144,7 +139,6 @@ msgid "only meaningful in a `for', `while', or `until' loop"
 msgstr "僅在「for」,「while」, 或者「until」迴圈中有意義"
 
 #: builtins/caller.def:136
-#, fuzzy
 msgid ""
 "Returns the context of the current subroutine call.\n"
 "    \n"
@@ -158,21 +152,17 @@ msgstr ""
 "回傳目前子呼叫的語境。\n"
 "    \n"
 "    不帶有 EXPR 時,回傳「$line $filename」。帶有 EXPR 時,回傳\n"
-"    「$line $subroutine $filename」;這個額外的資訊可以被用於提供\n"
-"    堆疊追蹤。\n"
+"    「$line $subroutine $filename」;提供堆疊追蹤時可以用到這個\n"
+"  延伸資訊。\n"
 "    \n"
 "    EXPR 的值顯示了到目前呼叫框格需要回去多少個呼叫框格;頂部框格\n"
-"    是第 0 框格。\n"
-"    \n"
-"    結束狀態:\n"
-"    除非 shell 不在執行一個 shell 函數或者 EXPR 無效,否則回傳結\n"
-"    果為 0。"
+"    是第 0 框格。"
 
 #: builtins/cd.def:327
 msgid "HOME not set"
 msgstr "未設定 HOME"
 
-#: builtins/cd.def:335 builtins/common.c:161 test.c:901
+#: builtins/cd.def:335 builtins/common.c:161 test.c:916
 msgid "too many arguments"
 msgstr "太多參數"
 
@@ -199,7 +189,7 @@ msgstr "警告:"
 msgid "%s: usage: "
 msgstr "%s:用法:"
 
-#: builtins/common.c:193 shell.c:516 shell.c:844
+#: builtins/common.c:193 shell.c:524 shell.c:866
 #, c-format
 msgid "%s: option requires an argument"
 msgstr "%s:選項需要一個參數"
@@ -214,7 +204,7 @@ msgstr "%s:需要數字參數"
 msgid "%s: not found"
 msgstr "%s:沒有找到"
 
-#: builtins/common.c:216 shell.c:857
+#: builtins/common.c:216 shell.c:879
 #, c-format
 msgid "%s: invalid option"
 msgstr "%s:無效選項"
@@ -224,7 +214,7 @@ msgstr "%s:無效選項"
 msgid "%s: invalid option name"
 msgstr "%s:無效選項名稱"
 
-#: builtins/common.c:230 execute_cmd.c:2373 general.c:368 general.c:373
+#: builtins/common.c:230 execute_cmd.c:2402 general.c:368 general.c:373
 #, c-format
 msgid "`%s': not a valid identifier"
 msgstr "「%s」:不是一個有效的識別符"
@@ -237,7 +227,7 @@ msgstr "無效的八進位數字"
 msgid "invalid hex number"
 msgstr "無效的十六進位數字"
 
-#: builtins/common.c:244 expr.c:1569
+#: builtins/common.c:244 expr.c:1574
 msgid "invalid number"
 msgstr "無效數字"
 
@@ -251,88 +241,93 @@ msgstr "%s:無效的訊號規格"
 msgid "`%s': not a pid or valid job spec"
 msgstr "「%s」:不是一個 pid 或有效的工作規格"
 
-#: builtins/common.c:266 error.c:510
+#: builtins/common.c:266 error.c:536
 #, c-format
 msgid "%s: readonly variable"
 msgstr "%s:唯讀的變數"
 
-#: builtins/common.c:274
+#: builtins/common.c:273
+#, c-format
+msgid "%s: cannot assign"
+msgstr "%s:無法指定"
+
+#: builtins/common.c:281
 #, c-format
 msgid "%s: %s out of range"
 msgstr "%s:%s 超出範圍"
 
-#: builtins/common.c:274 builtins/common.c:276
+#: builtins/common.c:281 builtins/common.c:283
 msgid "argument"
 msgstr "參數"
 
-#: builtins/common.c:276
+#: builtins/common.c:283
 #, c-format
 msgid "%s out of range"
 msgstr "%s 超出範圍"
 
-#: builtins/common.c:284
+#: builtins/common.c:291
 #, c-format
 msgid "%s: no such job"
 msgstr "%s:沒有此類工作"
 
-#: builtins/common.c:292
+#: builtins/common.c:299
 #, c-format
 msgid "%s: no job control"
 msgstr "%s:沒有工作控制"
 
-#: builtins/common.c:294
+#: builtins/common.c:301
 msgid "no job control"
 msgstr "沒有工作控制"
 
-#: builtins/common.c:304
+#: builtins/common.c:311
 #, c-format
 msgid "%s: restricted"
 msgstr "%s:受限的"
 
-#: builtins/common.c:306
+#: builtins/common.c:313
 msgid "restricted"
 msgstr "受限的"
 
-#: builtins/common.c:314
+#: builtins/common.c:321
 #, c-format
 msgid "%s: not a shell builtin"
 msgstr "%s:不是一個內建 shell"
 
-#: builtins/common.c:323
+#: builtins/common.c:330
 #, c-format
 msgid "write error: %s"
 msgstr "寫入時發生錯誤:%s"
 
-#: builtins/common.c:331
+#: builtins/common.c:338
 #, c-format
 msgid "error setting terminal attributes: %s"
 msgstr "設定終端屬性時發生錯誤: %s"
 
-#: builtins/common.c:333
+#: builtins/common.c:340
 #, c-format
 msgid "error getting terminal attributes: %s"
 msgstr "取得終端屬性時發生錯誤: %s"
 
-#: builtins/common.c:635
+#: builtins/common.c:642
 #, c-format
 msgid "%s: error retrieving current directory: %s: %s\n"
 msgstr "%s:檢索目前目錄時發生錯誤:%s:%s\n"
 
-#: builtins/common.c:701 builtins/common.c:703
+#: builtins/common.c:708 builtins/common.c:710
 #, c-format
 msgid "%s: ambiguous job spec"
 msgstr "%s:模稜兩可的工作規格"
 
-#: builtins/common.c:964
+#: builtins/common.c:971
 msgid "help not available in this version"
 msgstr "這個版本沒有可用的說明"
 
-#: builtins/common.c:1008 builtins/set.def:953 variables.c:3839
+#: builtins/common.c:1038 builtins/set.def:953 variables.c:3825
 #, c-format
 msgid "%s: cannot unset: readonly %s"
 msgstr "%s: 無法取消設定: 唯讀 %s"
 
-#: builtins/common.c:1013 builtins/set.def:932 variables.c:3844
+#: builtins/common.c:1043 builtins/set.def:932 variables.c:3830
 #, c-format
 msgid "%s: cannot unset"
 msgstr "%s: 無法取消設定"
@@ -342,108 +337,108 @@ msgstr "%s: 無法取消設定"
 msgid "%s: invalid action name"
 msgstr "%s:無效的功能名稱"
 
-#: builtins/complete.def:486 builtins/complete.def:634
-#: builtins/complete.def:865
+#: builtins/complete.def:486 builtins/complete.def:642
+#: builtins/complete.def:873
 #, c-format
 msgid "%s: no completion specification"
 msgstr "%s:沒有完成的規格"
 
-#: builtins/complete.def:688
+#: builtins/complete.def:696
 msgid "warning: -F option may not work as you expect"
 msgstr "警告:-F 選項可能無法按預期工作"
 
-#: builtins/complete.def:690
+#: builtins/complete.def:698
 msgid "warning: -C option may not work as you expect"
 msgstr "警告:-C 選項可能無法按預期工作"
 
-#: builtins/complete.def:838
+#: builtins/complete.def:846
 msgid "not currently executing completion function"
-msgstr "ç\9b®å\89\8dæ\9cªå\9f·è¡\8cè£\9cå®\8c功能"
+msgstr "ç\9b®å\89\8dæ\9cªå\9f·è¡\8cè\87ªå\8b\95å®\8cæ\88\90功能"
 
-#: builtins/declare.def:134
+#: builtins/declare.def:137
 msgid "can only be used in a function"
 msgstr "只能用在函數中"
 
-#: builtins/declare.def:363 builtins/declare.def:756
+#: builtins/declare.def:437
+msgid "cannot use `-f' to make functions"
+msgstr "無法用「-f」產生函數"
+
+#: builtins/declare.def:464 execute_cmd.c:6132
+#, c-format
+msgid "%s: readonly function"
+msgstr "%s:唯讀函數"
+
+#: builtins/declare.def:521 builtins/declare.def:804
 #, c-format
 msgid "%s: reference variable cannot be an array"
 msgstr "%s: 引用變數不能為陣列"
 
-#: builtins/declare.def:374 variables.c:3385
+#: builtins/declare.def:532 variables.c:3359
 #, c-format
 msgid "%s: nameref variable self references not allowed"
 msgstr "%s: 不允許名稱引用變數引用自身"
 
-#: builtins/declare.def:379 variables.c:2104 variables.c:3304 variables.c:3312
-#: variables.c:3382
+#: builtins/declare.def:537 variables.c:2072 variables.c:3278 variables.c:3286
+#: variables.c:3356
 #, c-format
 msgid "%s: circular name reference"
 msgstr "%s: 迴圈變數名引用"
 
-#: builtins/declare.def:384 builtins/declare.def:762 builtins/declare.def:773
+#: builtins/declare.def:541 builtins/declare.def:811 builtins/declare.def:820
 #, c-format
 msgid "`%s': invalid variable name for name reference"
 msgstr "「%s」:無效的引用變數名"
 
-#: builtins/declare.def:514
-msgid "cannot use `-f' to make functions"
-msgstr "無法用「-f」產生函數"
-
-#: builtins/declare.def:526 execute_cmd.c:5986
-#, c-format
-msgid "%s: readonly function"
-msgstr "%s:唯讀函數"
-
-#: builtins/declare.def:824
-#, c-format
-msgid "%s: quoted compound array assignment deprecated"
-msgstr "%s:不建議使用引用的複合陣列指定"
-
-#: builtins/declare.def:838
+#: builtins/declare.def:856
 #, c-format
 msgid "%s: cannot destroy array variables in this way"
 msgstr "%s: 無法以這種方式銷毀陣列變數"
 
-#: builtins/declare.def:845 builtins/read.def:815
+#: builtins/declare.def:862 builtins/read.def:887
 #, c-format
 msgid "%s: cannot convert associative to indexed array"
 msgstr "%s: 無法將關聯陣列轉化為索引陣列"
 
-#: builtins/enable.def:143 builtins/enable.def:151
+#: builtins/declare.def:891
+#, c-format
+msgid "%s: quoted compound array assignment deprecated"
+msgstr "%s:不建議使用引用的複合陣列指定"
+
+#: builtins/enable.def:145 builtins/enable.def:153
 msgid "dynamic loading not available"
 msgstr "動態載入不可用"
 
-#: builtins/enable.def:343
+#: builtins/enable.def:376
 #, c-format
 msgid "cannot open shared object %s: %s"
 msgstr "無法開啟共享物件 %s: %s"
 
-#: builtins/enable.def:371
+#: builtins/enable.def:405
 #, c-format
 msgid "cannot find %s in shared object %s: %s"
 msgstr "無法在共享物件 %2$s 中找到 %1$s: %3$s"
 
-#: builtins/enable.def:388
+#: builtins/enable.def:422
 #, c-format
 msgid "%s: dynamic builtin already loaded"
 msgstr "%s: 已經載入動態內建指令"
 
-#: builtins/enable.def:392
+#: builtins/enable.def:426
 #, c-format
 msgid "load function for %s returns failure (%d): not loaded"
 msgstr "為 %s 載入函式時回傳錯誤 (%d):尚未載入"
 
-#: builtins/enable.def:517
+#: builtins/enable.def:551
 #, c-format
 msgid "%s: not dynamically loaded"
 msgstr "%s: 未以動態方式載入"
 
-#: builtins/enable.def:543
+#: builtins/enable.def:577
 #, c-format
 msgid "%s: cannot delete: %s"
 msgstr "%s: 無法刪除: %s"
 
-#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5818
+#: builtins/evalfile.c:138 builtins/hash.def:185 execute_cmd.c:5959
 #, c-format
 msgid "%s: is a directory"
 msgstr "%s: 是一個目錄"
@@ -458,7 +453,7 @@ msgstr "%s: 不是一般檔案"
 msgid "%s: file is too large"
 msgstr "%s: 檔案太大"
 
-#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1647
+#: builtins/evalfile.c:188 builtins/evalfile.c:206 shell.c:1673
 #, c-format
 msgid "%s: cannot execute binary file"
 msgstr "%s: 無法執行二進位檔案"
@@ -552,12 +547,12 @@ msgstr ""
 msgid "no help topics match `%s'.  Try `help help' or `man -k %s' or `info %s'."
 msgstr "沒有與「%s」符合的說明主題。嘗試「help help」或「man -k %s」或「info %s」。"
 
-#: builtins/help.def:224
+#: builtins/help.def:223
 #, c-format
 msgid "%s: cannot open: %s"
 msgstr "%s: 無法開啟: %s"
 
-#: builtins/help.def:524
+#: builtins/help.def:523
 #, c-format
 msgid ""
 "These shell commands are defined internally.  Type `help' to see this list.\n"
@@ -576,21 +571,21 @@ msgstr ""
 "名稱旁邊的星號(*)表示該指令被停用。\n"
 "\n"
 
-#: builtins/history.def:155
+#: builtins/history.def:159
 msgid "cannot use more than one of -anrw"
 msgstr "最多能使用 -anrw 選項之一"
 
-#: builtins/history.def:188 builtins/history.def:198 builtins/history.def:213
-#: builtins/history.def:230 builtins/history.def:242 builtins/history.def:249
+#: builtins/history.def:192 builtins/history.def:204 builtins/history.def:215
+#: builtins/history.def:228 builtins/history.def:240 builtins/history.def:247
 msgid "history position"
 msgstr "歷史記錄位置"
 
-#: builtins/history.def:340
+#: builtins/history.def:338
 #, c-format
 msgid "%s: invalid timestamp"
 msgstr "%s:無效時間戳"
 
-#: builtins/history.def:451
+#: builtins/history.def:449
 #, c-format
 msgid "%s: history expansion failed"
 msgstr "%s: 歷史記錄擴充套件失敗"
@@ -613,78 +608,78 @@ msgstr "%s: 參數必須是行程或工作 ID"
 msgid "Unknown error"
 msgstr "未知錯誤"
 
-#: builtins/let.def:97 builtins/let.def:122 expr.c:639 expr.c:657
+#: builtins/let.def:97 builtins/let.def:122 expr.c:640 expr.c:658
 msgid "expression expected"
 msgstr "需要表示式"
 
-#: builtins/mapfile.def:178
+#: builtins/mapfile.def:180
 #, c-format
 msgid "%s: not an indexed array"
 msgstr "%s: 不是一個索引陣列"
 
-#: builtins/mapfile.def:271 builtins/read.def:308
+#: builtins/mapfile.def:276 builtins/read.def:336
 #, c-format
 msgid "%s: invalid file descriptor specification"
 msgstr "%s: 無效的檔案描述符規格"
 
-#: builtins/mapfile.def:279 builtins/read.def:315
+#: builtins/mapfile.def:284 builtins/read.def:343
 #, c-format
 msgid "%d: invalid file descriptor: %s"
 msgstr "%d: 無效的檔案描述符: %s"
 
-#: builtins/mapfile.def:288 builtins/mapfile.def:326
+#: builtins/mapfile.def:293 builtins/mapfile.def:331
 #, c-format
 msgid "%s: invalid line count"
 msgstr "%s: 無效的列數"
 
-#: builtins/mapfile.def:299
+#: builtins/mapfile.def:304
 #, c-format
 msgid "%s: invalid array origin"
 msgstr "%s: 無效的陣列原點"
 
-#: builtins/mapfile.def:316
+#: builtins/mapfile.def:321
 #, c-format
 msgid "%s: invalid callback quantum"
 msgstr "%s: 無效的回呼定量"
 
-#: builtins/mapfile.def:349
+#: builtins/mapfile.def:354
 msgid "empty array variable name"
 msgstr "空陣列變數名"
 
-#: builtins/mapfile.def:370
+#: builtins/mapfile.def:375
 msgid "array variable support required"
 msgstr "需要陣列變數支援"
 
-#: builtins/printf.def:419
+#: builtins/printf.def:430
 #, c-format
 msgid "`%s': missing format character"
 msgstr "「%s」: 缺少格式字元"
 
-#: builtins/printf.def:474
+#: builtins/printf.def:485
 #, c-format
 msgid "`%c': invalid time format specification"
 msgstr "「%c」: 無效的時間格式規格"
 
-#: builtins/printf.def:676
+#: builtins/printf.def:708
 #, c-format
 msgid "`%c': invalid format character"
 msgstr "「%c」: 無效格式字元"
 
-#: builtins/printf.def:702
+#: builtins/printf.def:734
 #, c-format
 msgid "warning: %s: %s"
 msgstr "警告: %s: %s"
 
-#: builtins/printf.def:788
+#: builtins/printf.def:822
 #, c-format
 msgid "format parsing problem: %s"
 msgstr "格式解析問題: %s"
 
-#: builtins/printf.def:885
+#: builtins/printf.def:919
 msgid "missing hex digit for \\x"
 msgstr "使用了 \\x 但缺少十六進位數字"
 
-#: builtins/printf.def:900
+#: builtins/printf.def:934
 #, c-format
 msgid "missing unicode digit for \\%c"
 msgstr "使用了 \\%c 但缺少萬國碼數字"
@@ -834,12 +829,12 @@ msgstr ""
 "    \n"
 "   「dirs」內建變數顯示目錄堆疊。"
 
-#: builtins/read.def:280
+#: builtins/read.def:308
 #, c-format
 msgid "%s: invalid timeout specification"
 msgstr "%s: 無效的逾時規格"
 
-#: builtins/read.def:755
+#: builtins/read.def:827
 #, c-format
 msgid "read error: %d: %s"
 msgstr "讀取錯誤: %d: %s"
@@ -852,7 +847,7 @@ msgstr "只能從函數或者原始指令稿「return」"
 msgid "cannot simultaneously unset a function and a variable"
 msgstr "無法同時取消設定一個函數和一個變數"
 
-#: builtins/set.def:966
+#: builtins/set.def:969
 #, c-format
 msgid "%s: not an array variable"
 msgstr "%s: 不是陣列變數"
@@ -871,11 +866,11 @@ msgstr "%s:無法匯出"
 msgid "shift count"
 msgstr "位移計數"
 
-#: builtins/shopt.def:310
+#: builtins/shopt.def:323
 msgid "cannot set and unset shell options simultaneously"
 msgstr "無法同時設定和取消設定 shell 選項"
 
-#: builtins/shopt.def:428
+#: builtins/shopt.def:444
 #, c-format
 msgid "%s: invalid shell option name"
 msgstr "%s: 無效的 shell 選項名稱"
@@ -915,12 +910,12 @@ msgstr "%s 是一個函數\n"
 #: builtins/type.def:299
 #, c-format
 msgid "%s is a special shell builtin\n"
-msgstr "%s 是特別的 shell 內建物件\n"
+msgstr "%s 是特別的 shell 內建命令\n"
 
 #: builtins/type.def:301
 #, c-format
 msgid "%s is a shell builtin\n"
-msgstr "%s 是 shell 內建物件\n"
+msgstr "%s 是 shell 內建命令\n"
 
 #: builtins/type.def:323 builtins/type.def:408
 #, c-format
@@ -942,16 +937,16 @@ msgstr "%s: 無效的 limit 參數"
 msgid "`%c': bad command"
 msgstr "「%c」:不當的指令"
 
-#: builtins/ulimit.def:455
+#: builtins/ulimit.def:464
 #, c-format
 msgid "%s: cannot get limit: %s"
 msgstr "%s:不能得到 limit: %s"
 
-#: builtins/ulimit.def:481
+#: builtins/ulimit.def:490
 msgid "limit"
 msgstr "limit"
 
-#: builtins/ulimit.def:493 builtins/ulimit.def:793
+#: builtins/ulimit.def:502 builtins/ulimit.def:802
 #, c-format
 msgid "%s: cannot modify limit: %s"
 msgstr "%s:不能修改 limit: %s"
@@ -970,7 +965,7 @@ msgstr "「%c」: 無效的符號狀態運算子"
 msgid "`%c': invalid symbolic mode character"
 msgstr "「%c」: 無效的符號狀態字元"
 
-#: error.c:89 error.c:347 error.c:349 error.c:351
+#: error.c:89 error.c:373 error.c:375 error.c:377
 msgid " line "
 msgstr " 列 "
 
@@ -990,96 +985,106 @@ msgstr "中止…"
 msgid "INFORM: "
 msgstr "通知:"
 
-#: error.c:462
+#: error.c:310
+#, c-format
+msgid "DEBUG warning: "
+msgstr "除錯警告:"
+
+#: error.c:488
 msgid "unknown command error"
 msgstr "不明指令錯誤"
 
-#: error.c:463
+#: error.c:489
 msgid "bad command type"
 msgstr "不當的指令類型"
 
-#: error.c:464
+#: error.c:490
 msgid "bad connector"
 msgstr "不當的連接器"
 
-#: error.c:465
+#: error.c:491
 msgid "bad jump"
 msgstr "錯誤的跳轉"
 
-#: error.c:503
+#: error.c:529
 #, c-format
 msgid "%s: unbound variable"
 msgstr "%s: 未綁定的變數"
 
-#: eval.c:242
+#: eval.c:243
 msgid "\atimed out waiting for input: auto-logout\n"
 msgstr "\a 等待輸入逾時:自動登出\n"
 
-#: execute_cmd.c:537
+#: execute_cmd.c:555
 #, c-format
 msgid "cannot redirect standard input from /dev/null: %s"
 msgstr "無法從 /dev/null 重定向標準輸入: %s"
 
-#: execute_cmd.c:1297
+#: execute_cmd.c:1317
 #, c-format
 msgid "TIMEFORMAT: `%c': invalid format character"
 msgstr "時間格式:「%c」: 無效的格式字元"
 
-#: execute_cmd.c:2362
+#: execute_cmd.c:2391
 #, c-format
 msgid "execute_coproc: coproc [%d:%s] still exists"
 msgstr "execute_coproc:coproc [%d:%s] 仍然存在"
 
-#: execute_cmd.c:2486
+#: execute_cmd.c:2524
 msgid "pipe error"
 msgstr "管道錯誤"
 
-#: execute_cmd.c:4793
+#: execute_cmd.c:4923
 #, c-format
 msgid "eval: maximum eval nesting level exceeded (%d)"
 msgstr "eval:超出最大 eval 巢狀層數 (%d)"
 
-#: execute_cmd.c:4805
+#: execute_cmd.c:4935
 #, c-format
 msgid "%s: maximum source nesting level exceeded (%d)"
 msgstr "%s: 超出最大來源巢狀層數 (%d)"
 
-#: execute_cmd.c:4913
+#: execute_cmd.c:5043
 #, c-format
 msgid "%s: maximum function nesting level exceeded (%d)"
 msgstr "%s: 超出最大函數巢狀層數 (%d)"
 
-#: execute_cmd.c:5467
+#: execute_cmd.c:5598
 #, c-format
 msgid "%s: restricted: cannot specify `/' in command names"
 msgstr "%s: 受限的: 無法在指令名稱中使用「/」"
 
-#: execute_cmd.c:5574
+#: execute_cmd.c:5715
 #, c-format
 msgid "%s: command not found"
 msgstr "%s:指令找不到"
 
-#: execute_cmd.c:5816
+#: execute_cmd.c:5957
 #, c-format
 msgid "%s: %s"
 msgstr "%s: %s"
 
-#: execute_cmd.c:5854
+#: execute_cmd.c:5975
+#, c-format
+msgid "%s: cannot execute: required file not found"
+msgstr "%s:無法執行:找不到必須檔案"
+
+#: execute_cmd.c:6000
 #, c-format
 msgid "%s: %s: bad interpreter"
 msgstr "%s: %s: 不當的直譯器"
 
-#: execute_cmd.c:5891
+#: execute_cmd.c:6037
 #, c-format
 msgid "%s: cannot execute binary file: %s"
 msgstr "%s: 無法執行二進位檔案: %s"
 
-#: execute_cmd.c:5977
+#: execute_cmd.c:6123
 #, c-format
 msgid "`%s': is a special builtin"
 msgstr "「%s」: 特殊內建"
 
-#: execute_cmd.c:6029
+#: execute_cmd.c:6175
 #, c-format
 msgid "cannot duplicate fd %d to fd %d"
 msgstr "無法複製檔案描述符 %d 到檔案描述符 %d"
@@ -1092,68 +1097,68 @@ msgstr "表示式遞迴層次超出範圍"
 msgid "recursion stack underflow"
 msgstr "遞迴堆疊下限溢位"
 
-#: expr.c:477
+#: expr.c:478
 msgid "syntax error in expression"
 msgstr "表示式語法錯誤"
 
-#: expr.c:521
+#: expr.c:522
 msgid "attempted assignment to non-variable"
 msgstr "嘗試指派給非變數"
 
-#: expr.c:530
+#: expr.c:531
 msgid "syntax error in variable assignment"
 msgstr "變數定義語法錯誤"
 
-#: expr.c:544 expr.c:911
+#: expr.c:545 expr.c:912
 msgid "division by 0"
 msgstr "除 0"
 
-#: expr.c:592
+#: expr.c:593
 msgid "bug: bad expassign token"
 msgstr "錯誤:不當的表示式字組"
 
-#: expr.c:646
+#: expr.c:647
 msgid "`:' expected for conditional expression"
 msgstr "條件表示式需要「:」"
 
-#: expr.c:972
+#: expr.c:973
 msgid "exponent less than 0"
 msgstr "指數小於 0"
 
-#: expr.c:1029
+#: expr.c:1030
 msgid "identifier expected after pre-increment or pre-decrement"
 msgstr "預增符或預減符後應跟有識別符"
 
-#: expr.c:1056
+#: expr.c:1057
 msgid "missing `)'"
 msgstr "缺少「)」"
 
-#: expr.c:1107 expr.c:1487
+#: expr.c:1108 expr.c:1492
 msgid "syntax error: operand expected"
 msgstr "語法錯誤: 需要運算元"
 
-#: expr.c:1489
+#: expr.c:1494
 msgid "syntax error: invalid arithmetic operator"
 msgstr "語法錯誤: 無效的算術運算子"
 
-#: expr.c:1513
+#: expr.c:1518
 #, c-format
 msgid "%s%s%s: %s (error token is \"%s\")"
 msgstr "%s%s%s: %s (錯誤字組是「%s」)"
 
-#: expr.c:1573
+#: expr.c:1578
 msgid "invalid arithmetic base"
 msgstr "無效的算術進位"
 
-#: expr.c:1582
+#: expr.c:1587
 msgid "invalid integer constant"
 msgstr "無效的整數常數"
 
-#: expr.c:1598
+#: expr.c:1603
 msgid "value too great for base"
 msgstr "數值太大不可為算術進位的基底"
 
-#: expr.c:1647
+#: expr.c:1652
 #, c-format
 msgid "%s: expression error\n"
 msgstr "%s: 表示式錯誤\n"
@@ -1162,7 +1167,7 @@ msgstr "%s: 表示式錯誤\n"
 msgid "getcwd: cannot access parent directories"
 msgstr "getcwd: 無法存取上層目錄"
 
-#: input.c:99 subst.c:6069
+#: input.c:99 subst.c:6208
 #, c-format
 msgid "cannot reset nodelay mode for fd %d"
 msgstr "無法為檔案描述符 %d 重設無延遲模式"
@@ -1181,167 +1186,167 @@ msgstr "save_bash_input: 已經存在提供給新 fd %d 的緩衝區"
 msgid "start_pipeline: pgrp pipe"
 msgstr "start_pipeline: 行程群組管道"
 
-#: jobs.c:906
+#: jobs.c:907
 #, c-format
 msgid "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr "bgp_delete: LOOP: psi (%d) == storage[psi].bucket_next"
 
-#: jobs.c:959
+#: jobs.c:960
 #, c-format
 msgid "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
 msgstr "bgp_search: LOOP: psi (%d) == storage[psi].bucket_next"
 
-#: jobs.c:1283
+#: jobs.c:1279
 #, c-format
 msgid "forked pid %d appears in running job %d"
 msgstr "產生的行程識別碼 %d 顯示為執行中的工作 %d"
 
-#: jobs.c:1402
+#: jobs.c:1397
 #, c-format
 msgid "deleting stopped job %d with process group %ld"
 msgstr "刪除行程群組 %2$ld 中已停止的工作 %1$d"
 
-#: jobs.c:1511
+#: jobs.c:1502
 #, c-format
 msgid "add_process: pid %5ld (%s) marked as still alive"
 msgstr "add_process: 行程識別碼 %5ld(%s) 標註為仍活著"
 
-#: jobs.c:1850
+#: jobs.c:1839
 #, c-format
 msgid "describe_pid: %ld: no such pid"
 msgstr "describe_pid: %ld: 無此行程識別碼"
 
-#: jobs.c:1865
+#: jobs.c:1854
 #, c-format
 msgid "Signal %d"
 msgstr "訊號 %d"
 
-#: jobs.c:1879 jobs.c:1905
+#: jobs.c:1868 jobs.c:1894
 msgid "Done"
 msgstr "已完成"
 
-#: jobs.c:1884 siglist.c:122
+#: jobs.c:1873 siglist.c:123
 msgid "Stopped"
 msgstr "停止"
 
-#: jobs.c:1888
+#: jobs.c:1877
 #, c-format
 msgid "Stopped(%s)"
 msgstr "已停止(%s)"
 
-#: jobs.c:1892
+#: jobs.c:1881
 msgid "Running"
 msgstr "執行中"
 
-#: jobs.c:1909
+#: jobs.c:1898
 #, c-format
 msgid "Done(%d)"
 msgstr "已完成(%d)"
 
-#: jobs.c:1911
+#: jobs.c:1900
 #, c-format
 msgid "Exit %d"
 msgstr "結束 %d"
 
-#: jobs.c:1914
+#: jobs.c:1903
 msgid "Unknown status"
 msgstr "不明狀態"
 
-#: jobs.c:2001
+#: jobs.c:1990
 #, c-format
 msgid "(core dumped) "
 msgstr "(核心已傾印)"
 
-#: jobs.c:2020
+#: jobs.c:2009
 #, c-format
 msgid "  (wd: %s)"
 msgstr "  (工作目錄: %s)"
 
-#: jobs.c:2259
+#: jobs.c:2250
 #, c-format
 msgid "child setpgid (%ld to %ld)"
 msgstr "子行程 setpgid (%ld 到 %ld)"
 
-#: jobs.c:2617 nojobs.c:664
+#: jobs.c:2608 nojobs.c:666
 #, c-format
 msgid "wait: pid %ld is not a child of this shell"
 msgstr "wait: 行程識別碼 %ld 不是目前 shell 的子行程"
 
-#: jobs.c:2893
+#: jobs.c:2884
 #, c-format
 msgid "wait_for: No record of process %ld"
 msgstr "wiat_for: 沒有行程 %ld 的紀錄"
 
-#: jobs.c:3236
+#: jobs.c:3223
 #, c-format
 msgid "wait_for_job: job %d is stopped"
 msgstr "wait_for_job: 工作 %d 已停止"
 
-#: jobs.c:3564
+#: jobs.c:3551
 #, c-format
 msgid "%s: no current jobs"
 msgstr "%s:目前沒有工作"
 
-#: jobs.c:3571
+#: jobs.c:3558
 #, c-format
 msgid "%s: job has terminated"
 msgstr "%s: 工作已經終止"
 
-#: jobs.c:3580
+#: jobs.c:3567
 #, c-format
 msgid "%s: job %d already in background"
 msgstr "%s: 工作 %d 已在背景執行"
 
-#: jobs.c:3806
+#: jobs.c:3793
 msgid "waitchld: turning on WNOHANG to avoid indefinite block"
 msgstr "waitchld: 開啟 WNOHANG 以避免無限阻塞"
 
-#: jobs.c:4320
+#: jobs.c:4307
 #, c-format
 msgid "%s: line %d: "
 msgstr "%s: 第 %d 列:"
 
-#: jobs.c:4334 nojobs.c:919
+#: jobs.c:4321 nojobs.c:921
 #, c-format
 msgid " (core dumped)"
 msgstr " (核心已傾印)"
 
-#: jobs.c:4346 jobs.c:4359
+#: jobs.c:4333 jobs.c:4346
 #, c-format
 msgid "(wd now: %s)\n"
 msgstr "(目前工作目錄:%s)\n"
 
-#: jobs.c:4391
+#: jobs.c:4378
 msgid "initialize_job_control: getpgrp failed"
 msgstr "initialize_job_control: getpgrp 失敗"
 
-#: jobs.c:4447
+#: jobs.c:4434
 msgid "initialize_job_control: no job control in background"
 msgstr "initialize_job_control:背景中沒有工作控制"
 
-#: jobs.c:4463
+#: jobs.c:4450
 msgid "initialize_job_control: line discipline"
 msgstr "initialize_job_control: 列規律"
 
-#: jobs.c:4473
+#: jobs.c:4460
 msgid "initialize_job_control: setpgid"
 msgstr "initialize_job_control: setpgid"
 
-#: jobs.c:4494 jobs.c:4503
+#: jobs.c:4481 jobs.c:4490
 #, c-format
 msgid "cannot set terminal process group (%d)"
 msgstr "無法設定終端行程群組(%d)"
 
-#: jobs.c:4508
+#: jobs.c:4495
 msgid "no job control in this shell"
 msgstr "此 shell 中無工作控制"
 
-#: lib/malloc/malloc.c:353
+#: lib/malloc/malloc.c:367
 #, c-format
 msgid "malloc: failed assertion: %s\n"
 msgstr "malloc: 主張失敗: %s\n"
 
-#: lib/malloc/malloc.c:369
+#: lib/malloc/malloc.c:383
 #, c-format
 msgid ""
 "\r\n"
@@ -1350,47 +1355,47 @@ msgstr ""
 "\r\n"
 "malloc: %s:%d: 主張已修補\r\n"
 
-#: lib/malloc/malloc.c:370 lib/malloc/malloc.c:933
+#: lib/malloc/malloc.c:384 lib/malloc/malloc.c:941
 msgid "unknown"
 msgstr "不明"
 
-#: lib/malloc/malloc.c:882
+#: lib/malloc/malloc.c:892
 msgid "malloc: block on free list clobbered"
 msgstr "malloc: 空閒串列中的區塊損壞"
 
-#: lib/malloc/malloc.c:972
+#: lib/malloc/malloc.c:980
 msgid "free: called with already freed block argument"
 msgstr "free: 用已經釋放的區塊做為呼叫參數"
 
-#: lib/malloc/malloc.c:975
+#: lib/malloc/malloc.c:983
 msgid "free: called with unallocated block argument"
 msgstr "free: 用未分配的區塊做為呼叫參數"
 
-#: lib/malloc/malloc.c:994
+#: lib/malloc/malloc.c:1001
 msgid "free: underflow detected; mh_nbytes out of range"
 msgstr "free: 檢測到下限溢位;mh_nbytes 超出範圍"
 
-#: lib/malloc/malloc.c:1001
+#: lib/malloc/malloc.c:1007
 msgid "free: underflow detected; magic8 corrupted"
 msgstr "free: 偵測到下限溢位;magic8 損壞"
 
-#: lib/malloc/malloc.c:1009
+#: lib/malloc/malloc.c:1014
 msgid "free: start and end chunk sizes differ"
 msgstr "free: 啟始和末尾區塊大小不一致"
 
-#: lib/malloc/malloc.c:1119
+#: lib/malloc/malloc.c:1176
 msgid "realloc: called with unallocated block argument"
 msgstr "realloc: 用未分配的區塊做為呼叫參數"
 
-#: lib/malloc/malloc.c:1134
+#: lib/malloc/malloc.c:1191
 msgid "realloc: underflow detected; mh_nbytes out of range"
 msgstr "realloc: 檢測到下限溢位;mh_nbytes 超出範圍"
 
-#: lib/malloc/malloc.c:1141
+#: lib/malloc/malloc.c:1197
 msgid "realloc: underflow detected; magic8 corrupted"
 msgstr "realloc: 偵測到下限溢位;magic8 損壞"
 
-#: lib/malloc/malloc.c:1150
+#: lib/malloc/malloc.c:1205
 msgid "realloc: start and end chunk sizes differ"
 msgstr "realloc: 啟始和末尾區塊大小不一致"
 
@@ -1432,22 +1437,22 @@ msgstr "%s:不當的網路路徑規格"
 msgid "network operations not supported"
 msgstr "不支援網路操作"
 
-#: locale.c:217
+#: locale.c:219
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s)"
 msgstr "setlocale: LC_ALL: 無法變更語區選項 (%s)"
 
-#: locale.c:219
+#: locale.c:221
 #, c-format
 msgid "setlocale: LC_ALL: cannot change locale (%s): %s"
 msgstr "setlocale: LC_ALL: 無法變更語區選項 (%s): %s"
 
-#: locale.c:292
+#: locale.c:294
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s)"
 msgstr "setlocale: %s: 無法變更語區選項 (%s)"
 
-#: locale.c:294
+#: locale.c:296
 #, c-format
 msgid "setlocale: %s: cannot change locale (%s): %s"
 msgstr "setlocale: %s: 無法變更語區選項 (%s): %s"
@@ -1465,143 +1470,143 @@ msgstr "您有新郵件在 $_"
 msgid "The mail in %s has been read\n"
 msgstr "郵件在 %s 已閱讀\n"
 
-#: make_cmd.c:317
+#: make_cmd.c:314
 msgid "syntax error: arithmetic expression required"
 msgstr "語法錯誤:需要算式"
 
-#: make_cmd.c:319
+#: make_cmd.c:316
 msgid "syntax error: `;' unexpected"
 msgstr "語法錯誤:「;」意外"
 
-#: make_cmd.c:320
+#: make_cmd.c:317
 #, c-format
 msgid "syntax error: `((%s))'"
 msgstr "語法錯誤:「((%s))」"
 
-#: make_cmd.c:572
+#: make_cmd.c:569
 #, c-format
 msgid "make_here_document: bad instruction type %d"
 msgstr "make_here_document:不當的指示類型 %d"
 
-#: make_cmd.c:657
+#: make_cmd.c:668
 #, c-format
 msgid "here-document at line %d delimited by end-of-file (wanted `%s')"
 msgstr "立即檔案在第 %d 列被檔案結束符分隔 (需要「%s」)"
 
-#: make_cmd.c:756
+#: make_cmd.c:769
 #, c-format
 msgid "make_redirection: redirection instruction `%d' out of range"
 msgstr "make_redirection:重新導向指示「%d」超出範圍"
 
-#: parse.y:2393
+#: parse.y:2428
 #, c-format
 msgid "shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%lu): line truncated"
 msgstr "shell_getc: shell_input_line_size (%zu) 超過 SIZE_MAX (%lu):列被截斷"
 
-#: parse.y:2826
+#: parse.y:2921
 msgid "maximum here-document count exceeded"
 msgstr "超過此處檔案上限最大值"
 
-#: parse.y:3581 parse.y:3957 parse.y:4556
+#: parse.y:3684 parse.y:4244 parse.y:6148
 #, c-format
 msgid "unexpected EOF while looking for matching `%c'"
 msgstr "尋找符合的「%c」時遇到了未預期的檔案結束符"
 
-#: parse.y:4696
+#: parse.y:4452
 msgid "unexpected EOF while looking for `]]'"
 msgstr "尋找「]]」時遇到了未預期的檔案結束符"
 
-#: parse.y:4701
+#: parse.y:4457
 #, c-format
 msgid "syntax error in conditional expression: unexpected token `%s'"
 msgstr "條件表示式中有語法錯誤: 未預期的字組「%s」"
 
-#: parse.y:4705
+#: parse.y:4461
 msgid "syntax error in conditional expression"
 msgstr "語法錯誤,在有條件的表示式"
 
-#: parse.y:4783
+#: parse.y:4539
 #, c-format
 msgid "unexpected token `%s', expected `)'"
 msgstr "未預期的字組「%s」,需要「)」"
 
-#: parse.y:4787
+#: parse.y:4543
 msgid "expected `)'"
 msgstr "預期「)」"
 
-#: parse.y:4815
+#: parse.y:4571
 #, c-format
 msgid "unexpected argument `%s' to conditional unary operator"
 msgstr "一元條件運算子使用了未預期的參數「%s」"
 
-#: parse.y:4819
+#: parse.y:4575
 msgid "unexpected argument to conditional unary operator"
 msgstr "一元條件運算子使用了未預期的參數"
 
-#: parse.y:4865
+#: parse.y:4621
 #, c-format
 msgid "unexpected token `%s', conditional binary operator expected"
 msgstr "未預期的字組「%s」,需要二元條件運算子"
 
-#: parse.y:4869
+#: parse.y:4625
 msgid "conditional binary operator expected"
 msgstr "需要二元條件運算子"
 
-#: parse.y:4891
+#: parse.y:4647
 #, c-format
 msgid "unexpected argument `%s' to conditional binary operator"
 msgstr "二元條件運算子使用了未預期的參數「%s」"
 
-#: parse.y:4895
+#: parse.y:4651
 msgid "unexpected argument to conditional binary operator"
 msgstr "二元條件運算子使用了未預期的參數"
 
-#: parse.y:4906
+#: parse.y:4662
 #, c-format
 msgid "unexpected token `%c' in conditional command"
 msgstr "條件指令中有未預期的字組「%c」"
 
-#: parse.y:4909
+#: parse.y:4665
 #, c-format
 msgid "unexpected token `%s' in conditional command"
 msgstr "條件指令中有未預期的字組「%s」"
 
-#: parse.y:4913
+#: parse.y:4669
 #, c-format
 msgid "unexpected token %d in conditional command"
 msgstr "條件指令中有未預期的字組 %d"
 
-#: parse.y:6336
+#: parse.y:6118
 #, c-format
 msgid "syntax error near unexpected token `%s'"
 msgstr "未預期的字組「%s」附近有語法錯誤"
 
-#: parse.y:6355
+#: parse.y:6137
 #, c-format
 msgid "syntax error near `%s'"
 msgstr "「%s」附近有語法錯誤"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error: unexpected end of file"
 msgstr "語法錯誤: 未預期的檔案結尾"
 
-#: parse.y:6365
+#: parse.y:6151
 msgid "syntax error"
 msgstr "語法錯誤"
 
-#: parse.y:6428
+#: parse.y:6216
 #, c-format
 msgid "Use \"%s\" to leave the shell.\n"
 msgstr "使用「%s」結束 shell。\n"
 
-#: parse.y:6602
+#: parse.y:6394
 msgid "unexpected EOF while looking for matching `)'"
 msgstr "尋找符合的「)」時遇到了未預期的檔案結束符"
 
 #: pcomplete.c:1132
 #, c-format
 msgid "completion: function `%s' not found"
-msgstr "è£\9cå®\8c: 未找到函數「%s」"
+msgstr "è\87ªå\8b\95å®\8cæ\88\90: 未找到函數「%s」"
 
 #: pcomplete.c:1722
 #, c-format
@@ -1611,7 +1616,7 @@ msgstr "programmable_completion:%s:可能重試迴圈"
 #: pcomplib.c:182
 #, c-format
 msgid "progcomp_insert: %s: NULL COMPSPEC"
-msgstr "progcomp_insert: %s: ç©ºç\9a\84è£\9cå®\8c規格"
+msgstr "progcomp_insert: %s: ç©ºç\9a\84è\87ªå\8b\95å®\8cæ\88\90規格"
 
 #: print_cmd.c:302
 #, c-format
@@ -1632,94 +1637,94 @@ msgstr "xtrace_set: 空的檔案指標"
 msgid "xtrace fd (%d) != fileno xtrace fp (%d)"
 msgstr "xtrace fd (%d) != fileno xtrace fp (%d)"
 
-#: print_cmd.c:1540
+#: print_cmd.c:1545
 #, c-format
 msgid "cprintf: `%c': invalid format character"
 msgstr "cprintf:「%c」: 無效的格式字元"
 
-#: redir.c:149 redir.c:197
+#: redir.c:150 redir.c:198
 msgid "file descriptor out of range"
 msgstr "檔案描述符超出範圍"
 
-#: redir.c:204
+#: redir.c:205
 #, c-format
 msgid "%s: ambiguous redirect"
 msgstr "%s: 模稜兩可的重定向"
 
-#: redir.c:208
+#: redir.c:209
 #, c-format
 msgid "%s: cannot overwrite existing file"
 msgstr "%s: 無法覆寫已存在的檔案"
 
-#: redir.c:213
+#: redir.c:214
 #, c-format
 msgid "%s: restricted: cannot redirect output"
 msgstr "%s: 受限的: 無法重定向輸出"
 
-#: redir.c:218
+#: redir.c:219
 #, c-format
 msgid "cannot create temp file for here-document: %s"
 msgstr "無法為立即檔案建立暫存檔案: %s"
 
-#: redir.c:222
+#: redir.c:223
 #, c-format
 msgid "%s: cannot assign fd to variable"
 msgstr "%s: 無法將檔案描述符指派給變數"
 
-#: redir.c:649
+#: redir.c:650
 msgid "/dev/(tcp|udp)/host/port not supported without networking"
 msgstr "沒有網路時不支援 /dev/(tcp|udp)/host/port"
 
-#: redir.c:938 redir.c:1053 redir.c:1114 redir.c:1284
+#: redir.c:945 redir.c:1065 redir.c:1130 redir.c:1303
 msgid "redirection error: cannot duplicate fd"
 msgstr "重定向錯誤: 無法複製檔案描述符"
 
-#: shell.c:347
+#: shell.c:353
 msgid "could not find /tmp, please create!"
 msgstr "無法找到 /tmp,請建立"
 
-#: shell.c:351
+#: shell.c:357
 msgid "/tmp must be a valid directory name"
 msgstr "/tmp 必須為有效的目錄名稱"
 
-#: shell.c:804
+#: shell.c:826
 msgid "pretty-printing mode ignored in interactive shells"
 msgstr "已在互動式 shell 中忽略美化輸出模式"
 
-#: shell.c:948
+#: shell.c:972
 #, c-format
 msgid "%c%c: invalid option"
 msgstr "%c%c:無效選項"
 
-#: shell.c:1319
+#: shell.c:1343
 #, c-format
 msgid "cannot set uid to %d: effective uid %d"
 msgstr "無法設定 UID 至 %d:有效的 UID %d"
 
-#: shell.c:1330
+#: shell.c:1354
 #, c-format
 msgid "cannot set gid to %d: effective gid %d"
 msgstr "無法設定 GID 至 %d:有效的 GID %d"
 
-#: shell.c:1518
+#: shell.c:1544
 msgid "cannot start debugger; debugging mode disabled"
 msgstr "無法開啟偵錯器;偵錯模式已停用"
 
-#: shell.c:1632
+#: shell.c:1658
 #, c-format
 msgid "%s: Is a directory"
 msgstr "%s: 是一個目錄"
 
-#: shell.c:1881
+#: shell.c:1907
 msgid "I have no name!"
 msgstr "我沒有名字!"
 
-#: shell.c:2035
+#: shell.c:2061
 #, c-format
 msgid "GNU bash, version %s-(%s)\n"
 msgstr "GNU bash,版本 %s-(%s)\n"
 
-#: shell.c:2036
+#: shell.c:2062
 #, c-format
 msgid ""
 "Usage:\t%s [GNU long option] [option] ...\n"
@@ -1728,317 +1733,317 @@ msgstr ""
 "用法:\t%s [GNU 長選項] [選項] …\n"
 "\t%s [GNU 長選項] [選項] 指令稿檔案 …\n"
 
-#: shell.c:2038
+#: shell.c:2064
 msgid "GNU long options:\n"
 msgstr "GNU 長選項:\n"
 
-#: shell.c:2042
+#: shell.c:2068
 msgid "Shell options:\n"
 msgstr "Shell 選項:\n"
 
-#: shell.c:2043
+#: shell.c:2069
 msgid "\t-ilrsD or -c command or -O shopt_option\t\t(invocation only)\n"
 msgstr "\t-irsD 或 -c <指令> 或 -O <shopt 選項>\t\t(僅適合呼叫)\n"
 
-#: shell.c:2062
+#: shell.c:2088
 #, c-format
 msgid "\t-%s or -o option\n"
 msgstr "\t-%s or -o 選項\n"
 
-#: shell.c:2068
+#: shell.c:2094
 #, c-format
 msgid "Type `%s -c \"help set\"' for more information about shell options.\n"
 msgstr "輸入「%s -c \"help set\"」更多關於 shell 選項的訊息。\n"
 
-#: shell.c:2069
+#: shell.c:2095
 #, c-format
 msgid "Type `%s -c help' for more information about shell builtin commands.\n"
 msgstr "輸入「%s -c help」更多關於內建 shell 指令的訊息。\n"
 
-#: shell.c:2070
+#: shell.c:2096
 #, c-format
 msgid "Use the `bashbug' command to report bugs.\n"
 msgstr "使用「bashbug」指令通報程式錯誤。\n"
 
-#: shell.c:2072
+#: shell.c:2098
 #, c-format
 msgid "bash home page: <http://www.gnu.org/software/bash>\n"
 msgstr "bash 官網:<http://www.gnu.org/software/bash>\n"
 
-#: shell.c:2073
+#: shell.c:2099
 #, c-format
 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
 msgstr "GNU 軟體的常見使用說明:<http://www.gnu.org/gethelp/>\n"
 
-#: sig.c:757
+#: sig.c:765
 #, c-format
 msgid "sigprocmask: %d: invalid operation"
 msgstr "sigprocmask:%d:無效操作"
 
-#: siglist.c:47
+#: siglist.c:48
 msgid "Bogus signal"
 msgstr "偽訊號"
 
-#: siglist.c:50
+#: siglist.c:51
 msgid "Hangup"
 msgstr "掛斷"
 
-#: siglist.c:54
+#: siglist.c:55
 msgid "Interrupt"
 msgstr "中止"
 
-#: siglist.c:58
+#: siglist.c:59
 msgid "Quit"
 msgstr "結束"
 
-#: siglist.c:62
+#: siglist.c:63
 msgid "Illegal instruction"
 msgstr "無效指令"
 
-#: siglist.c:66
+#: siglist.c:67
 msgid "BPT trace/trap"
 msgstr "斷點追蹤/陷阱"
 
-#: siglist.c:74
+#: siglist.c:75
 msgid "ABORT instruction"
 msgstr "放棄指令"
 
-#: siglist.c:78
+#: siglist.c:79
 msgid "EMT instruction"
 msgstr "模擬器陷阱指令"
 
-#: siglist.c:82
+#: siglist.c:83
 msgid "Floating point exception"
 msgstr "期望浮點數"
 
-#: siglist.c:86
+#: siglist.c:87
 msgid "Killed"
 msgstr "強制結束"
 
-#: siglist.c:90
+#: siglist.c:91
 msgid "Bus error"
 msgstr "匯流排錯誤"
 
-#: siglist.c:94
+#: siglist.c:95
 msgid "Segmentation fault"
 msgstr "程式記憶體區段錯誤"
 
-#: siglist.c:98
+#: siglist.c:99
 msgid "Bad system call"
 msgstr "無效系統呼叫"
 
-#: siglist.c:102
+#: siglist.c:103
 msgid "Broken pipe"
 msgstr "管線損壞"
 
-#: siglist.c:106
+#: siglist.c:107
 msgid "Alarm clock"
 msgstr "鬧鐘"
 
-#: siglist.c:110
+#: siglist.c:111
 msgid "Terminated"
 msgstr "終止"
 
-#: siglist.c:114
+#: siglist.c:115
 msgid "Urgent IO condition"
 msgstr "緊急 I/O 狀況"
 
-#: siglist.c:118
+#: siglist.c:119
 msgid "Stopped (signal)"
 msgstr "停止(信號)"
 
-#: siglist.c:126
+#: siglist.c:127
 msgid "Continue"
 msgstr "繼續"
 
-#: siglist.c:134
+#: siglist.c:135
 msgid "Child death or stop"
 msgstr "子行程已死或者停止"
 
-#: siglist.c:138
+#: siglist.c:139
 msgid "Stopped (tty input)"
 msgstr "停止(tty 輸入)"
 
-#: siglist.c:142
+#: siglist.c:143
 msgid "Stopped (tty output)"
 msgstr "停止(tty 輸出)"
 
-#: siglist.c:146
+#: siglist.c:147
 msgid "I/O ready"
 msgstr "I/O 就緒"
 
-#: siglist.c:150
+#: siglist.c:151
 msgid "CPU limit"
 msgstr "CPU 限制"
 
-#: siglist.c:154
+#: siglist.c:155
 msgid "File limit"
 msgstr "檔案限制"
 
-#: siglist.c:158
+#: siglist.c:159
 msgid "Alarm (virtual)"
 msgstr "警報(虛擬)"
 
-#: siglist.c:162
+#: siglist.c:163
 msgid "Alarm (profile)"
 msgstr "警報(側寫)"
 
-#: siglist.c:166
+#: siglist.c:167
 msgid "Window changed"
 msgstr "已變更視窗"
 
-#: siglist.c:170
+#: siglist.c:171
 msgid "Record lock"
 msgstr "記錄鎖"
 
-#: siglist.c:174
+#: siglist.c:175
 msgid "User signal 1"
 msgstr "使用者訊號 1"
 
-#: siglist.c:178
+#: siglist.c:179
 msgid "User signal 2"
 msgstr "使用者訊號 2"
 
-#: siglist.c:182
+#: siglist.c:183
 msgid "HFT input data pending"
 msgstr "HFT 待輸入資料"
 
-#: siglist.c:186
+#: siglist.c:187
 msgid "power failure imminent"
 msgstr "即將停止電源"
 
-#: siglist.c:190
+#: siglist.c:191
 msgid "system crash imminent"
 msgstr "系統即將崩潰"
 
-#: siglist.c:194
+#: siglist.c:195
 msgid "migrate process to another CPU"
 msgstr "遷移行程至另一個 CPU"
 
-#: siglist.c:198
+#: siglist.c:199
 msgid "programming error"
 msgstr "程式設計錯誤"
 
-#: siglist.c:202
+#: siglist.c:203
 msgid "HFT monitor mode granted"
 msgstr "已授予 HFT 監視模式"
 
-#: siglist.c:206
+#: siglist.c:207
 msgid "HFT monitor mode retracted"
 msgstr "已復原 HFT 監視模式"
 
-#: siglist.c:210
+#: siglist.c:211
 msgid "HFT sound sequence has completed"
 msgstr "已完成 HFT 聲音序列"
 
-#: siglist.c:214
+#: siglist.c:215
 msgid "Information request"
 msgstr "資訊請求"
 
-#: siglist.c:222 siglist.c:224
+#: siglist.c:223 siglist.c:225
 #, c-format
 msgid "Unknown Signal #%d"
 msgstr "不明訊號 #%d"
 
-#: subst.c:1476 subst.c:1666
+#: subst.c:1480 subst.c:1670
 #, c-format
 msgid "bad substitution: no closing `%s' in %s"
 msgstr "錯誤的取代: 在 %2$s 中沒有閉合的「%1$s」"
 
-#: subst.c:3281
+#: subst.c:3307
 #, c-format
 msgid "%s: cannot assign list to array member"
 msgstr "%s: 無法將串列指派給陣列成員"
 
-#: subst.c:5910 subst.c:5926
+#: subst.c:6048 subst.c:6064
 msgid "cannot make pipe for process substitution"
 msgstr "無法為行程取代建立管道"
 
-#: subst.c:5985
+#: subst.c:6124
 msgid "cannot make child for process substitution"
 msgstr "無法為行程取代建立子行程"
 
-#: subst.c:6059
+#: subst.c:6198
 #, c-format
 msgid "cannot open named pipe %s for reading"
 msgstr "無法開啟命名管道 %s 進 readline-"
 
-#: subst.c:6061
+#: subst.c:6200
 #, c-format
 msgid "cannot open named pipe %s for writing"
 msgstr "無法開啟命名管道 %s 進行寫入"
 
-#: subst.c:6084
+#: subst.c:6223
 #, c-format
 msgid "cannot duplicate named pipe %s as fd %d"
 msgstr "無法將命名管道 %s 做為檔案描述符 %d 複製"
 
-#: subst.c:6213
+#: subst.c:6370
 msgid "command substitution: ignored null byte in input"
 msgstr "指令取代:在輸入中忽略了空位元組"
 
-#: subst.c:6353
+#: subst.c:6533
 msgid "cannot make pipe for command substitution"
 msgstr "無法為指令取代建立管道"
 
-#: subst.c:6397
+#: subst.c:6580
 msgid "cannot make child for command substitution"
 msgstr "無法為指令取代建立子行程"
 
-#: subst.c:6423
+#: subst.c:6613
 msgid "command_substitute: cannot duplicate pipe as fd 1"
 msgstr "command_substitute: 無法將管道複製為檔案描述符 1"
 
-#: subst.c:6883 subst.c:9952
+#: subst.c:7082 subst.c:10252
 #, c-format
 msgid "%s: invalid variable name for name reference"
 msgstr "%s: 無效的引用變數名"
 
-#: subst.c:6979 subst.c:6997 subst.c:7169
+#: subst.c:7178 subst.c:7196 subst.c:7369
 #, c-format
 msgid "%s: invalid indirect expansion"
 msgstr "%s: 無效的間接擴充"
 
-#: subst.c:7013 subst.c:7177
+#: subst.c:7212 subst.c:7377
 #, c-format
 msgid "%s: invalid variable name"
 msgstr "%s:無效的變數名稱"
 
-#: subst.c:7256
+#: subst.c:7478
 #, c-format
 msgid "%s: parameter not set"
 msgstr "%s:參數未設定"
 
-#: subst.c:7258
+#: subst.c:7480
 #, c-format
 msgid "%s: parameter null or not set"
 msgstr "%s: 參數為空或未設定"
 
-#: subst.c:7503 subst.c:7518
+#: subst.c:7727 subst.c:7742
 #, c-format
 msgid "%s: substring expression < 0"
 msgstr "%s: 子串表示式 < 0"
 
-#: subst.c:9281 subst.c:9302
+#: subst.c:9560 subst.c:9587
 #, c-format
 msgid "%s: bad substitution"
 msgstr "%s: 錯誤的取代"
 
-#: subst.c:9390
+#: subst.c:9678
 #, c-format
 msgid "$%s: cannot assign in this way"
 msgstr "$%s: 無法如此指派"
 
-#: subst.c:9814
+#: subst.c:10111
 msgid "future versions of the shell will force evaluation as an arithmetic substitution"
 msgstr "未來版本的 shell 會強制以算術取代求值"
 
-#: subst.c:10367
+#: subst.c:10795
 #, c-format
 msgid "bad substitution: no closing \"`\" in %s"
 msgstr "錯誤的取代: 在 %s 中沒有閉合的「`」"
 
-#: subst.c:11434
+#: subst.c:11874
 #, c-format
 msgid "no match: %s"
 msgstr "無符合: %s"
@@ -2061,21 +2066,21 @@ msgstr "需要「)」"
 msgid "`)' expected, found %s"
 msgstr "需要「)」,得到 %s"
 
-#: test.c:466 test.c:799
+#: test.c:469 test.c:814
 #, c-format
 msgid "%s: binary operator expected"
 msgstr "%s: 需要二元表示式"
 
-#: test.c:756 test.c:759
+#: test.c:771 test.c:774
 #, c-format
 msgid "%s: unary operator expected"
 msgstr "%s: 需要一元表示式"
 
-#: test.c:881
+#: test.c:896
 msgid "missing `]'"
 msgstr "缺少「]」"
 
-#: test.c:899
+#: test.c:914
 #, c-format
 msgid "syntax error: `%s' unexpected"
 msgstr "語法錯誤:非預期的「%s」"
@@ -2084,99 +2089,104 @@ msgstr "語法錯誤:非預期的「%s」"
 msgid "invalid signal number"
 msgstr "無效訊號數字"
 
-#: trap.c:325
+#: trap.c:323
 #, c-format
 msgid "trap handler: maximum trap handler level exceeded (%d)"
 msgstr "捕捉處理函式:達到最大捕捉處理函式等級 (%d)"
 
-#: trap.c:414
+#: trap.c:412
 #, c-format
 msgid "run_pending_traps: bad value in trap_list[%d]: %p"
 msgstr "run_pending_traps: trap_list[%d] 中的錯誤值: %p"
 
-#: trap.c:418
+#: trap.c:416
 #, c-format
 msgid "run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"
 msgstr "run_pending_traps:訊號處理是 SIG_DFL,resending %d (%s) to myself"
 
-#: trap.c:487
+#: trap.c:509
 #, c-format
 msgid "trap_handler: bad signal %d"
 msgstr "trap_handler:不當的訊號 %d"
 
-#: variables.c:421
+#: variables.c:424
 #, c-format
 msgid "error importing function definition for `%s'"
 msgstr "錯誤,輸入的函數定義為「%s」"
 
-#: variables.c:833
+#: variables.c:838
 #, c-format
 msgid "shell level (%d) too high, resetting to 1"
 msgstr "shell 層次 (%d) 太高,重設為 1"
 
-#: variables.c:2674
+#: variables.c:2642
 msgid "make_local_variable: no function context at current scope"
 msgstr "make_local_variable: 目前作用域中沒有函數語境"
 
-#: variables.c:2693
+#: variables.c:2661
 #, c-format
 msgid "%s: variable may not be assigned value"
 msgstr "%s: 變數不可指派值"
 
-#: variables.c:3475
+#: variables.c:2818 variables.c:2874
+#, c-format
+msgid "%s: cannot inherit value from incompatible type"
+msgstr "%s:無法從不相容的類型繼承數值"
+
+#: variables.c:3459
 #, c-format
 msgid "%s: assigning integer to name reference"
 msgstr "%s:指定數字至名稱參考"
 
-#: variables.c:4404
+#: variables.c:4390
 msgid "all_local_variables: no function context at current scope"
 msgstr "all_local_variables: 目前作用域中沒有函數語境"
 
-#: variables.c:4771
+#: variables.c:4757
 #, c-format
 msgid "%s has null exportstr"
 msgstr "%s 有空的 exportstr"
 
-#: variables.c:4776 variables.c:4785
+#: variables.c:4762 variables.c:4771
 #, c-format
 msgid "invalid character %d in exportstr for %s"
 msgstr "%2$s 的 exportstr 中有無效的字元 %1$d"
 
-#: variables.c:4791
+#: variables.c:4777
 #, c-format
 msgid "no `=' in exportstr for %s"
 msgstr "%s 的 exportstr 中沒有「=」"
 
-#: variables.c:5331
+#: variables.c:5317
 msgid "pop_var_context: head of shell_variables not a function context"
 msgstr "pop_var_context: shell_variables 的前端不是函數語境"
 
-#: variables.c:5344
+#: variables.c:5330
 msgid "pop_var_context: no global_variables context"
 msgstr "pop_var_context: 沒有 global_variables 語境"
 
-#: variables.c:5424
+#: variables.c:5410
 msgid "pop_scope: head of shell_variables not a temporary environment scope"
 msgstr "pop_scope: shell_variables 的前端不是臨時環境作用域"
 
-#: variables.c:6387
+#: variables.c:6400
 #, c-format
 msgid "%s: %s: cannot open as FILE"
 msgstr "%s: %s: 無法做為檔案開啟"
 
-#: variables.c:6392
+#: variables.c:6405
 #, c-format
 msgid "%s: %s: invalid value for trace file descriptor"
 msgstr "%s: %s: 追蹤檔案描述符的值無效"
 
-#: variables.c:6437
+#: variables.c:6450
 #, c-format
 msgid "%s: %s: compatibility value out of range"
 msgstr "%s: %s: 相容版本數值超出範圍"
 
 #: version.c:46 version2.c:46
-msgid "Copyright (C) 2020 Free Software Foundation, Inc."
-msgstr "著作權所有 (C) 2020 自由軟體基金會"
+msgid "Copyright (C) 2022 Free Software Foundation, Inc."
+msgstr "著作權所有 (C) 2022 自由軟體基金會"
 
 #: version.c:47 version2.c:47
 msgid "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n"
@@ -2237,7 +2247,7 @@ msgstr "continue [n]"
 
 #: builtins.c:60
 msgid "builtin [shell-builtin [arg ...]]"
-msgstr "builtin [shell 內建物件 [參數 …]]"
+msgstr "builtin [shell 內建命令 [參數 …]]"
 
 #: builtins.c:63
 msgid "caller [expr]"
@@ -2256,12 +2266,12 @@ msgid "command [-pVv] command [arg ...]"
 msgstr "command [-pVv] 指令 [參數 …]"
 
 #: builtins.c:78
-msgid "declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]"
-msgstr "declare [-aAfFgiIlnrtux] [-p] [名稱[=值] ...]"
+msgid "declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] [name ...]"
+msgstr "declare [-aAfFgiIlnrtux] [name[=value] ...] 或 declare -p [-aAfFilnrtux] [name ...]"
 
 #: builtins.c:80
-msgid "typeset [-aAfFgiIlnrtux] [-p] name[=value] ..."
-msgstr "typeset [-aAfFgiIlnrtux] [-p] 名稱[=值] ..."
+msgid "typeset [-aAfFgiIlnrtux] name[=value] ... or typeset -p [-aAfFilnrtux] [name ...]"
+msgstr "typeset [-aAfFgiIlnrtux] name[=value] ... 或 typeset -p [-aAfFilnrtux] [name ...]"
 
 #: builtins.c:82
 msgid "local [option] name[=value] ..."
@@ -2348,8 +2358,8 @@ msgid "return [n]"
 msgstr "return [n]"
 
 #: builtins.c:142
-msgid "set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]"
-msgstr "set [--abefhkmnptuvxBCHP] [-o 選項名] [--] [參數 …]"
+msgid "set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]"
+msgstr "set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]"
 
 #: builtins.c:144
 msgid "unset [-f] [-v] [-n] [name ...]"
@@ -2396,8 +2406,8 @@ msgid "type [-afptP] name [name ...]"
 msgstr "type [-afptP] 名稱 [名稱 …]"
 
 #: builtins.c:171
-msgid "ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]"
-msgstr "ulimit [-SHabcdefiklmnpqrstuvxPT] [limit]"
+msgid "ulimit [-SHabcdefiklmnpqrstuvxPRT] [limit]"
+msgstr "ulimit [-SHabcdefiklmnpqrstuvxPRT] [limit]"
 
 #: builtins.c:174
 msgid "umask [-p] [-S] [mode]"
@@ -2436,12 +2446,12 @@ msgid "if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]... [ else C
 msgstr "if 指令 ; then 指令 ; [ elif 指令 ; then 指令 ; ]… [ else 指令 ; ] fi"
 
 #: builtins.c:196
-msgid "while COMMANDS; do COMMANDS; done"
-msgstr "while 指令 ; do 指令 ; done"
+msgid "while COMMANDS; do COMMANDS-2; done"
+msgstr "while COMMANDS; do COMMANDS-2; done"
 
 #: builtins.c:198
-msgid "until COMMANDS; do COMMANDS; done"
-msgstr "until 指令 ; do 指令 ; done"
+msgid "until COMMANDS; do COMMANDS-2; done"
+msgstr "until COMMANDS; do COMMANDS-2; done"
 
 #: builtins.c:200
 msgid "coproc [NAME] command [redirections]"
@@ -2673,14 +2683,14 @@ msgid ""
 "    Returns the exit status of SHELL-BUILTIN, or false if SHELL-BUILTIN is\n"
 "    not a shell builtin."
 msgstr ""
-"執行 shell 內建物件。\n"
+"執行 shell 內建命令。\n"
 "    \n"
-"    帶 <參數> 執行 <shell 內建物件> 而不做指令查詢\n"
-"    在希望以 shell 函數的形式來重新實現 shell 內建物件,\n"
-"    但需要在函數之內執行該 shell 內建物件的情況下有用處。\n"
+"    帶 <參數> 執行 <shell 內建命令> 而不做指令查詢\n"
+"    在希望以 shell 函數的形式來重新實現 shell 內建命令,\n"
+"    但需要在函數之內執行該 shell 內建命令的情況下有用處。\n"
 "    \n"
 "    結束狀態:\n"
-"    以 <shell 內建物件> 的結束狀態為準,或者如果 <shell 內建物件> 不是一個 shell 內建物件時\n"
+"    以 <shell 內建命令> 的結束狀態為準,或者如果 <shell 內建命令> 不是一個 shell 內建命令時\n"
 "    回傳 false。"
 
 #: builtins.c:369
@@ -2869,43 +2879,6 @@ msgstr ""
 "    回傳 COMMAND 指令的回傳狀態,或者當找不到 COMMAND 指令時失敗。"
 
 #: builtins.c:490
-#, fuzzy
-#| msgid ""
-#| "Set variable values and attributes.\n"
-#| "    \n"
-#| "    Declare variables and give them attributes.  If no NAMEs are given,\n"
-#| "    display the attributes and values of all variables.\n"
-#| "    \n"
-#| "    Options:\n"
-#| "      -f\trestrict action or display to function names and definitions\n"
-#| "      -F\trestrict display to function names only (plus line number and\n"
-#| "    \t\tsource file when debugging)\n"
-#| "      -g\tcreate global variables when used in a shell function; otherwise\n"
-#| "    \t\tignored\n"
-#| "      -p\tdisplay the attributes and value of each NAME\n"
-#| "    \n"
-#| "    Options which set attributes:\n"
-#| "      -a\tto make NAMEs indexed arrays (if supported)\n"
-#| "      -A\tto make NAMEs associative arrays (if supported)\n"
-#| "      -i\tto make NAMEs have the `integer' attribute\n"
-#| "      -l\tto convert the value of each NAME to lower case on assignment\n"
-#| "      -n\tmake NAME a reference to the variable named by its value\n"
-#| "      -r\tto make NAMEs readonly\n"
-#| "      -t\tto make NAMEs have the `trace' attribute\n"
-#| "      -u\tto convert the value of each NAME to upper case on assignment\n"
-#| "      -x\tto make NAMEs export\n"
-#| "    \n"
-#| "    Using `+' instead of `-' turns off the given attribute.\n"
-#| "    \n"
-#| "    Variables with the integer attribute have arithmetic evaluation (see\n"
-#| "    the `let' command) performed when the variable is assigned a value.\n"
-#| "    \n"
-#| "    When used in a function, `declare' makes NAMEs local, as with the `local'\n"
-#| "    command.  The `-g' option suppresses this behavior.\n"
-#| "    \n"
-#| "    Exit Status:\n"
-#| "    Returns success unless an invalid option is supplied or a variable\n"
-#| "    assignment error occurs."
 msgid ""
 "Set variable values and attributes.\n"
 "    \n"
@@ -2947,19 +2920,21 @@ msgid ""
 msgstr ""
 "設定變數值和屬性。\n"
 "    \n"
-"    規範變數並且賦予它們屬性。如果沒用指定名稱,\n"
-"    則顯示所有變數的屬性和值。\n"
+"    宣告變數並賦予其屬性。若未指定 <名稱>,\n"
+"    則顯示所有變數的屬性和值。\n"
 "    \n"
 "    選項:\n"
 "      -f\t限制動作或顯示為只有函數名稱和定義\n"
-"      -F\t限制僅顯示函數名稱 (以及列號和原始檔名於偵錯時)\n"
-"      -g\t當用於 shell 函數內時建立全域變數 ; 否則忽略\n"
+"      -F\t限制僅顯示函數名稱(偵錯時另包含列號和原始檔名)\n"
+"      -g\t用於 shell 函數時建立全域變數 ; 否則忽略\n"
+"      -I\t如果建立的是本地變數,則繼承上個作用域中,\n"
+"    \t\t同名變數的屬性及數值。\n"
 "      -p\t顯示每個 <名稱> 變數的屬性和值\n"
 "    \n"
 "    設定屬性的選項:\n"
 "      -a\t使 <名稱> 成為索引陣列 (如果支援)\n"
 "      -A\t使 <名稱> 成為關聯陣列 (如果支援)\n"
-"      -i\t使 <名稱> 帶有「integer」(整數)屬性\n"
+"      -i\t使 <名稱> 帶有「integer」(整數)屬性\n"
 "      -l\t將每個 <名稱> 的值在指派時轉為小寫\n"
 "      -n\t使 <名稱> 成為指向一個以其值為名稱的變數引用\n"
 "      -r\t將 <名稱> 變為唯讀\n"
@@ -2967,16 +2942,15 @@ msgstr ""
 "      -u\t將每個 <名稱> 的值在指派時轉為大寫\n"
 "      -x\t將 <名稱> 匯出\n"
 "    \n"
-"    用「+」代替「-」會關閉指定選項。\n"
+"    用「+」代替「-」會關閉指定屬性。\n"
 "    \n"
-"    帶有整數屬性的變數在指派時將使用算術求值(見\n"
-"   「let」指令)\n"
+"    帶有整數屬性的變數,會在指派時執行算術求值(見「let」指令)\n"
 "    \n"
 "    在函數中使用時,「declare」使 <名稱> 成為本機變數,和「local」\n"
-"    指令一致。「-g」選項壓制這個行為\n"
+"    指令一致。「-g」選項會壓制本行為\n"
 "    \n"
 "    結束狀態:\n"
-"    回傳成功除非使用了無效選項或者發生錯誤。"
+"    回傳成功,除非使用了無效選項,或者發生錯誤。"
 
 #: builtins.c:532
 msgid ""
@@ -3127,7 +3101,7 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless NAME is not a shell builtin or an error occurs."
 msgstr ""
-"啟用和停用 shell 內建物件。\n"
+"啟用和停用 shell 內建命令。\n"
 "    \n"
 "    啟用和停用 shell 的內建指令。停用使您能夠執行一個和內建\n"
 "    指令同名磁碟上的指令,而無須使用完整的路徑名。\n"
@@ -3145,11 +3119,11 @@ msgstr ""
 "    \n"
 "    不帶選項時,每一個 <名稱> 內建都被啟用。\n"
 "    \n"
-"    如果要使用 $PATH 中找到的「test」而不是 shell 內建物件的版本,\n"
+"    如果要使用 $PATH 中找到的「test」而不是 shell 內建命令的版本,\n"
 "    輸入「enable -n test」。\n"
 "    \n"
 "    結束狀態:\n"
-"    回傳成功,除非 <名稱> 不是一個 shell 內建物件或者有錯誤發生。"
+"    回傳成功,除非 <名稱> 不是一個 shell 內建命令或者有錯誤發生。"
 
 #: builtins.c:640
 msgid ""
@@ -3170,45 +3144,6 @@ msgstr ""
 "    以指令的狀態結束,或者在指令為空的情況下回傳成功。"
 
 #: builtins.c:652
-#, fuzzy
-#| msgid ""
-#| "Parse option arguments.\n"
-#| "    \n"
-#| "    Getopts is used by shell procedures to parse positional parameters\n"
-#| "    as options.\n"
-#| "    \n"
-#| "    OPTSTRING contains the option letters to be recognized; if a letter\n"
-#| "    is followed by a colon, the option is expected to have an argument,\n"
-#| "    which should be separated from it by white space.\n"
-#| "    \n"
-#| "    Each time it is invoked, getopts will place the next option in the\n"
-#| "    shell variable $name, initializing name if it does not exist, and\n"
-#| "    the index of the next argument to be processed into the shell\n"
-#| "    variable OPTIND.  OPTIND is initialized to 1 each time the shell or\n"
-#| "    a shell script is invoked.  When an option requires an argument,\n"
-#| "    getopts places that argument into the shell variable OPTARG.\n"
-#| "    \n"
-#| "    getopts reports errors in one of two ways.  If the first character\n"
-#| "    of OPTSTRING is a colon, getopts uses silent error reporting.  In\n"
-#| "    this mode, no error messages are printed.  If an invalid option is\n"
-#| "    seen, getopts places the option character found into OPTARG.  If a\n"
-#| "    required argument is not found, getopts places a ':' into NAME and\n"
-#| "    sets OPTARG to the option character found.  If getopts is not in\n"
-#| "    silent mode, and an invalid option is seen, getopts places '?' into\n"
-#| "    NAME and unsets OPTARG.  If a required argument is not found, a '?'\n"
-#| "    is placed in NAME, OPTARG is unset, and a diagnostic message is\n"
-#| "    printed.\n"
-#| "    \n"
-#| "    If the shell variable OPTERR has the value 0, getopts disables the\n"
-#| "    printing of error messages, even if the first character of\n"
-#| "    OPTSTRING is not a colon.  OPTERR has the value 1 by default.\n"
-#| "    \n"
-#| "    Getopts normally parses the positional parameters ($0 - $9), but if\n"
-#| "    more arguments are given, they are parsed instead.\n"
-#| "    \n"
-#| "    Exit Status:\n"
-#| "    Returns success if an option is found; fails if the end of options is\n"
-#| "    encountered or an error occurs."
 msgid ""
 "Parse option arguments.\n"
 "    \n"
@@ -3250,14 +3185,12 @@ msgid ""
 msgstr ""
 "解析選項參數。\n"
 "    \n"
-"    Getopts 被 shell 過程用於解析可定位的參數做為選項。\n"
-"    \n"
-"    \n"
-"    <選項字串> 字串包含待識別的選項字母;如果一個字母後面跟\n"
-"    著分號,則該選項需要一個參數,而該參數應用空格與選項分開。\n"
+"    Getopts 被 shell 過程用來將可定位的參數解析為選項。\n"
 "    \n"
+"    <選項字串> 字串包含待識別的選項字母。如果一個字母後面跟\n"
+"    著分號,則該選項需要一個參數,這個參數應利用空格與選項分開。\n"
 "    \n"
-"    æ¯\8f次å\95\9få\8b\95時,getopts 會將下一個選項放到 shell 變數 $name\n"
+"    æ¯\8f次å\91¼å\8f«時,getopts 會將下一個選項放到 shell 變數 $name\n"
 "    中,如果 name 變數不存在則先將其初始化,而下一個待處\n"
 "    理的參數序號放入 shell 變數 OPTIND 中。OPTIND 變數在每\n"
 "    次 shell 或者 shell 指令稿啟動時都被初始化為 1。當一個選項要\n"
@@ -3265,26 +3198,24 @@ msgstr ""
 "    中。\n"
 "    \n"
 "    getopts 有兩種通報錯誤的方法。如果 <選項字串> 變數的第\n"
-"    一個字元是冒號,getopts 使用沉默錯誤通報。在這種模式\n"
-"    下,不會印發生錯誤誤訊息。如果看到了一個無效的選項,\n"
-"    getopts 將找到的選項字元放至 OPTARG 變數中。如果一個必\n"
-"    須的選項沒有找到,getopts 放一個「:」到 <名稱> 變數中並且設\n"
-"    置 OPTARG 變數為找到的選項字元。如果 getopts 不在沉默模\n"
-"    式中,並且遇到了一個無效的選項,getopts 放置一個「?」到 <名稱> \n"
-"    變數中並且取消設定 OPTARG 變數。如果必須的選項沒有找到,\n"
-"    一個「?」會被放入 <名稱> 變數中,OPTARG 將被取消設定,並且會\n"
-"    印出一個診斷資訊。\n"
-"    \n"
-"    如果 shell 變數 OPTERR 的值為 0,getopts 停用\n"
-"    錯誤資訊的印出,即使 <選項字串> 變數的第一個字元不是一\n"
-"    個冒號。OPTERR 的預設值為 1。\n"
-"    \n"
-"    Getopts 通常解析可定位的參數($0 - $9),不過如果提供了\n"
-"    更多的參數,它們反而會被解析。\n"
+"    一個字元是冒號,getopts 進入靜默錯誤回報模式。在這種模式\n"
+"    下,不會輸出錯誤訊息。若看到了無效選項,getopts 將找到的\n"
+"    選項字元放至 OPTARG 變數中。如果找不到必要引數,getopts\n"
+"    會放一個「:」到 <名稱> 變數,並將 OPTARG 設為找到的選項字元\n"
+"    。如果 getopts 不在靜默模式中,並且遇到了一個無效的選項,\n"
+"    getopts 會放置一個「?」到 <名稱> 變數,並取消設定 OPTARG。\n"
+"    如果找不到必要引數,則會在 NAME 放置「?」、取消設定 OPTARG,\n"
+"    並且會輸出診斷資訊。\n"
+"    \n"
+"    如果 shell 變數 OPTERR 的值為 0,getopts 停止輸出錯誤訊息,\n"
+"    即使 <選項字串> 變數的第一個字元不是冒號。OPTERR 的預設值為 1。\n"
+"    \n"
+"    Getopts 通常解析可定位的參數($0 - $9),不過如果提供了\n"
+"    更多的參數,會改解析這些引數。\n"
 "    \n"
 "    結束狀態:\n"
-"    如果一個選項被找到則回傳成功;如果遇到了選項的結尾或者\n"
-"    有錯誤發生則回傳失敗。"
+"    找到選項則回傳成功;如果選項提早結束,或者有錯誤發生,\n"
+"    則回傳失敗。"
 
 #: builtins.c:694
 msgid ""
@@ -3683,7 +3614,7 @@ msgstr ""
 "      -l\t列出訊號名稱;如果參數後跟「-l」則被假設為訊號編號,\n"
 "    \t而相應的訊號名稱會被列出\n"
 "    \n"
-"    Kill 成為 shell 內建物件有兩個理由:它允許使用工作編號而不是行程識別碼,\n"
+"    Kill 成為 shell 內建命令有兩個理由:它允許使用工作編號而不是行程識別碼,\n"
 "    並且在可以建立的行程數上限達到時允許行程被砍除。\n"
 "    \n"
 "    結束狀態:\n"
@@ -3778,7 +3709,8 @@ msgid ""
 "    splitting, and the first word is assigned to the first NAME, the second\n"
 "    word to the second NAME, and so on, with any leftover words assigned to\n"
 "    the last NAME.  Only the characters found in $IFS are recognized as word\n"
-"    delimiters.\n"
+"    delimiters. By default, the backslash character escapes delimiter characters\n"
+"    and newline.\n"
 "    \n"
 "    If no NAMEs are supplied, the line read is stored in the REPLY variable.\n"
 "    \n"
@@ -3814,23 +3746,23 @@ msgid ""
 "    (in which case it's greater than 128), a variable assignment error occurs,\n"
 "    or an invalid file descriptor is supplied as the argument to -u."
 msgstr ""
-"從標準輸入讀取一列並將其分為不同的區域。\n"
+"從標準輸入讀取一列並將其分為不同的區域。\n"
 "    \n"
-"    從標準輸入讀取單獨的一列,或者如果使用了 -u 選項,從檔案描述 FD 中讀取。\n"
-"    該列被分割成區域,如同字詞分割一樣,並且第一個字詞被指派給第一個 <名稱> 變數,第二\n"
-"    個字詞被指派給第二個 <名稱> 變數,如此繼續,直到剩下所有的字詞被指派給最後一個 <名稱>\n"
-"    變數。只有 $IFS 變數中的字元被認做是字詞分隔符。\n"
+"    從標準輸入讀取單獨的一列,或者如果使用了 -u 選項,從檔案描述 FD 中讀取。\n"
+"    該列會分割成區域,如同字詞分割一樣,並且第一個字詞被指派給第一個 NAME 變數,第二\n"
+"    個字詞被指派給第二個 NAME 變數,如此繼續,直到剩下所有的字詞被指派給最後一個 <名稱>\n"
+"    變數。只有 $IFS 變數中的字元被認做是字詞分隔符。預設情況下,反斜線字元會跳脫分割字元和換行。\n"
 "    \n"
-"    如果沒有提供 <名稱> 變數,則讀取的列被存放在 REPLY 變數中。\n"
+"    如果沒有提供 NAME 變數,則讀取的列會存放在 REPLY 變數中。\n"
 "    \n"
 "    選項:\n"
 "      -a array\t將字詞指派給 ARRAY 陣列變數的序列索引成員,從零開始。\n"
 "      -d delim\t持續讀取直到讀入 DELIM 變數中的第一個字元,而不是換列符\n"
 "      -e\t使用 Readline 取得列\n"
 "      -i text\t使用 TEXT 文字做為 Readline 的初始文字\n"
-"      -n nchars\t讀取 nchars 個字元之後回傳,而不是等到讀取換列符。\n"
-"    \t\t但是分隔符仍然有效,如果遇到分隔符之前讀取了不足 nchars 個字元。\n"
-"      -N nchars\t在準確讀取了 nchars 個字元之後回傳,除非遇到檔案結束符或者讀取逾時,\n"
+"      -n nchars\t讀取 NCHARS 個字元之後回傳,而不是等到讀取換列符。\n"
+"    \t\t但如果遇到分隔符之前讀取了不足 NCHARS 個字元,分隔符仍然有效。\n"
+"      -N nchars\t在準確讀取了 NCHARS 個字元之後回傳,除非遇到檔案結束符或者讀取逾時,\n"
 "    \t\t任何的分隔符都被忽略\n"
 "      -p prompt\t在嘗試讀取之前輸出 PROMPT 提示符並且不帶\n"
 "    \t\t換列符\n"
@@ -3838,16 +3770,16 @@ msgstr ""
 "      -s\t不顯示終端的任何輸入\n"
 "      -t timeout\t如果在 TIMEOUT 秒內沒有讀取一個完整的列則逾時並且回傳失敗。\n"
 "    \t\tTMOUT 變數的值是預設逾時時間。\n"
-"    \t\tTIMEOUT 可以是小數。如果 TIMEOUT 是 0,那麼僅當在指定的檔案描述符上\n"
-"    \t\t輸å\85¥æ\9c\89æ\95\88ç\9a\84æ\99\82å\80\99ï¼\8cread æ\89\8då\9b\9eå\82³æ\88\90å\8a\9fã\80\82\n"
+"    \t\tTIMEOUT 可以是小數。如果 TIMEOUT 是 0,則立即回傳而不嘗試\n"
+"    \t\tè®\80å\8f\96ä»»ä½\95è³\87æ\96\99ï¼\8cå¦\82æ\9e\9cæ\8c\87å®\9aç\9a\84æª\94æ¡\88æ\8f\8f述符æ\9c\89輸å\85¥ï¼\8cå\89\87å\9b\9eå\82³æ\88\90å\8a\9f\n"
 "    \t\t如果超過了逾時時間,則回傳狀態碼大於 128\n"
 "      -u fd\t從檔案描述符 FD 中讀取,而不是標準輸入\n"
 "    \n"
 "    結束狀態:\n"
-"    回傳碼為零,除非遇到了檔案結束符,讀取逾時,或者無效的文\n"
-"    件描述符做為參數傳遞給了 -u 選項。"
+"    回傳碼為 0,除非遇到了檔案結束符、讀取逾時,或將無效的檔案\n"
+"    描述符,作為參數傳向 -u 選項。"
 
-#: builtins.c:1041
+#: builtins.c:1042
 msgid ""
 "Return from a shell function.\n"
 "    \n"
@@ -3867,7 +3799,7 @@ msgstr ""
 "    結束狀態:\n"
 "    回傳 N,或者如果 shell 不在執行一個函數或引用指令稿時,失敗。"
 
-#: builtins.c:1054
+#: builtins.c:1055
 msgid ""
 "Set or unset values of shell options and positional parameters.\n"
 "    \n"
@@ -4026,7 +3958,7 @@ msgstr ""
 "    結束狀態:\n"
 "    回傳成功除非使用了無效的參數。"
 
-#: builtins.c:1139
+#: builtins.c:1140
 msgid ""
 "Unset values and attributes of shell variables and functions.\n"
 "    \n"
@@ -4062,7 +3994,7 @@ msgstr ""
 "    結束狀態:\n"
 "    回傳成功,除非使用了無效的選項或者 NAME 名稱為唯讀。"
 
-#: builtins.c:1161
+#: builtins.c:1162
 msgid ""
 "Set export attribute for shell variables.\n"
 "    \n"
@@ -4094,7 +4026,7 @@ msgstr ""
 "    結束狀態:\n"
 "    回傳成功,除非使用了無效的選項或者 <名稱>。"
 
-#: builtins.c:1180
+#: builtins.c:1181
 msgid ""
 "Mark shell variables as unchangeable.\n"
 "    \n"
@@ -4130,7 +4062,7 @@ msgstr ""
 "    結束狀態:\n"
 "    回傳成功,除非使用了無效的選項或者 <名稱>。"
 
-#: builtins.c:1202
+#: builtins.c:1203
 msgid ""
 "Shift positional parameters.\n"
 "    \n"
@@ -4148,7 +4080,7 @@ msgstr ""
 "    結束狀態:\n"
 "    回傳成功,除非 N 為負或者大於 $#。"
 
-#: builtins.c:1214 builtins.c:1229
+#: builtins.c:1215 builtins.c:1230
 msgid ""
 "Execute commands from a file in the current shell.\n"
 "    \n"
@@ -4170,7 +4102,7 @@ msgstr ""
 "    結束狀態:\n"
 "    回傳 <檔名> 檔案中最後一個指令的狀態;如果 <檔名> 檔案不可讀則失敗。"
 
-#: builtins.c:1245
+#: builtins.c:1246
 msgid ""
 "Suspend shell execution.\n"
 "    \n"
@@ -4194,7 +4126,7 @@ msgstr ""
 "    結束狀態:\n"
 "    回傳成功,除非沒有啟用工作控制或者有錯誤發生。"
 
-#: builtins.c:1261
+#: builtins.c:1262
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -4346,7 +4278,7 @@ msgstr ""
 "    如果 EXPR 表示式求值為真則回傳成功;如果 EXPR 表示式求值\n"
 "    為假或者使用了無效的參數則回傳失敗。"
 
-#: builtins.c:1343
+#: builtins.c:1344
 msgid ""
 "Evaluate conditional expression.\n"
 "    \n"
@@ -4358,7 +4290,7 @@ msgstr ""
 "    是內建指令「test」的同義詞,但是最後一個參數必須是\n"
 "    字元「]」,以符合起始的「[」。"
 
-#: builtins.c:1352
+#: builtins.c:1353
 msgid ""
 "Display process times.\n"
 "    \n"
@@ -4376,7 +4308,7 @@ msgstr ""
 "    結束狀態:\n"
 "    一律成功。"
 
-#: builtins.c:1364
+#: builtins.c:1365
 msgid ""
 "Trap signals and other events.\n"
 "    \n"
@@ -4437,7 +4369,7 @@ msgstr ""
 "    結束狀態:\n"
 "    回傳成功,除非使用了無效的選項或者 SIGSPEC。"
 
-#: builtins.c:1400
+#: builtins.c:1401
 msgid ""
 "Display information about command type.\n"
 "    \n"
@@ -4467,74 +4399,27 @@ msgid ""
 msgstr ""
 "顯示指令類型的資訊。\n"
 "    \n"
-"    對於每一個 <名稱>,指示如果做為指令它將如何被解釋。\n"
+"    對於每一個 NAME,指示用作指令名稱時的解釋方式。\n"
 "    \n"
 "    選項:\n"
-"      -a\t顯示æ\89\80æ\9c\89å\8c\85å\90«å\90\8d稱ç\82º <å\90\8d稱> ç\9a\84å\8f¯å\9f·è¡\8cæª\94æ¡\88ç\9a\84ä½\8dç½®ï¼\9b\n"
-"    \t包括別名、內建和函數ã\80\82å\83\85ç\95¶ã\80\8c-pã\80\8dé\81¸é \85æ²\92æ\9c\89使ç\94¨æ\99\82\n"
+"      -a\t顯示æ\89\80æ\9c\89å\8c\85å\90«å\90\8dç\82º NAME ç\9a\84å\8f¯å\9f·è¡\8cæª\94æ¡\88ç\9a\84ä½\8dç½®ã\80\82\n"
+"    \t包括別名、內建和函數ï¼\88è\8b¥ä¸\94å\94¯è\8b¥ â\80\9c-pâ\80\9d é\81¸é \85æ\9cªä½¿ç\94¨æ\99\82ï¼\89ã\80\82\n"
 "      -f\t抑制 shell 函數查詢\n"
-"      -P\t為每個 <名稱> 驚醒 PATH 路徑搜尋,即使它是別名、\n"
-"    \t內建或函數,並且回傳將被執行的磁碟上檔案的名稱。\n"
-"      -p\t回傳將被執行的磁碟上檔案的名稱,或者當「type -t <名稱>」\n"
-"    \t不回傳「file」時,不回傳任何值。\n"
-"      -t\t回傳下列詞中的任何一個「alias」、「keyword」、\n"
-"    \t「function」、「builtin」、「file」或者「」,如果 <名稱> 是相應的\n"
-"    \t一個別名、shell 保留字、shell 函數、shell 內建物件、\n"
-"    \t磁碟檔案或沒有找到。\n"
+"      -P\t為每個 NAME 強制進行 PATH 路徑搜尋,即使它是別名、\n"
+"    \t內建或函數,並回傳將被執行的磁碟檔案名稱。\n"
+"      -p\t回傳將被執行的磁碟上檔案的名稱,或者在 “type -t NAME”\n"
+"    \t回傳值不是 “file” 時,不回傳任何值。\n"
+"      -t\t回傳 “alias”、“keyword”、“function”、“builtin”、“file”\n"
+"    \t或 “”,對應到 NAME 是別名、shell 保留字、shell 函數、\n"
+"    \t內建命令、磁碟檔案或找不到檔案。\n"
 "    \n"
-"    å\8f\83數:\n"
-"      <名稱>\t將要解析的指令。\n"
+"    å¼\95數:\n"
+"      NAME\t將要解析的指令。\n"
 "    \n"
 "    結束狀態:\n"
-"    如果所有的 <名稱> 指令都找到則回傳成功;任何找不到則失敗。"
-
-#: builtins.c:1431
-#, fuzzy
-#| msgid ""
-#| "Modify shell resource limits.\n"
-#| "    \n"
-#| "    Provides control over the resources available to the shell and processes\n"
-#| "    it creates, on systems that allow such control.\n"
-#| "    \n"
-#| "    Options:\n"
-#| "      -S\tuse the `soft' resource limit\n"
-#| "      -H\tuse the `hard' resource limit\n"
-#| "      -a\tall current limits are reported\n"
-#| "      -b\tthe socket buffer size\n"
-#| "      -c\tthe maximum size of core files created\n"
-#| "      -d\tthe maximum size of a process's data segment\n"
-#| "      -e\tthe maximum scheduling priority (`nice')\n"
-#| "      -f\tthe maximum size of files written by the shell and its children\n"
-#| "      -i\tthe maximum number of pending signals\n"
-#| "      -k\tthe maximum number of kqueues allocated for this process\n"
-#| "      -l\tthe maximum size a process may lock into memory\n"
-#| "      -m\tthe maximum resident set size\n"
-#| "      -n\tthe maximum number of open file descriptors\n"
-#| "      -p\tthe pipe buffer size\n"
-#| "      -q\tthe maximum number of bytes in POSIX message queues\n"
-#| "      -r\tthe maximum real-time scheduling priority\n"
-#| "      -s\tthe maximum stack size\n"
-#| "      -t\tthe maximum amount of cpu time in seconds\n"
-#| "      -u\tthe maximum number of user processes\n"
-#| "      -v\tthe size of virtual memory\n"
-#| "      -x\tthe maximum number of file locks\n"
-#| "      -P\tthe maximum number of pseudoterminals\n"
-#| "      -T\tthe maximum number of threads\n"
-#| "    \n"
-#| "    Not all options are available on all platforms.\n"
-#| "    \n"
-#| "    If LIMIT is given, it is the new value of the specified resource; the\n"
-#| "    special LIMIT values `soft', `hard', and `unlimited' stand for the\n"
-#| "    current soft limit, the current hard limit, and no limit, respectively.\n"
-#| "    Otherwise, the current value of the specified resource is printed.  If\n"
-#| "    no option is given, then -f is assumed.\n"
-#| "    \n"
-#| "    Values are in 1024-byte increments, except for -t, which is in seconds,\n"
-#| "    -p, which is in increments of 512 bytes, and -u, which is an unscaled\n"
-#| "    number of processes.\n"
-#| "    \n"
-#| "    Exit Status:\n"
-#| "    Returns success unless an invalid option is supplied or an error occurs."
+"    若找到所有的 NAME,則回傳成功;有任何一個沒找到,則回傳失敗。"
+
+#: builtins.c:1432
 msgid ""
 "Modify shell resource limits.\n"
 "    \n"
@@ -4584,47 +4469,48 @@ msgid ""
 msgstr ""
 "修改 shell 資源限制。\n"
 "    \n"
-"    在允許此類控制的系統上,提供對於 shell 及其建立的行程所可用的\n"
-"    資源的控制。\n"
+"    在允許此類控制的系統上,提供對 shell 及其建立的行程,\n"
+"    可用資源的控制。\n"
 "    \n"
 "    選項:\n"
-"      -S\t使用軟 (「soft」) 資源限制\n"
-"      -H\t使用硬 (「hard」) 資源限制\n"
-"      -a\t所有目前限制都被通報\n"
-"      -b\té\80\9aè¨\8a端快å\8f\96尺寸\n"
-"      -c\t建立核心檔案的最大尺寸\n"
-"      -d\t一個行程的資料區最大尺寸\n"
-"      -e\t最高的排程優先順序 (「nice」)\n"
-"      -f\t有 shell 及其子行程可以寫入的最大檔案尺寸\n"
-"      -i\t最多可以暫停的號數\n"
-"      -k\t為這個進程所分配的最大 kqueues 數量\n"
-"      -l\t一個行程可鎖定的最大記憶體尺寸\n"
-"      -m\t最大的記憶體進駐尺寸\n"
-"      -n\t最多開啟的檔案描述符個數\n"
-"      -p\t管é\81\93ç·©è¡\9då\8d\80尺寸\n"
-"      -q\tPOSIX è³\87è¨\8a佇列的最大位元組數\n"
+"      -S\t使用彈性(「soft」)資源限制\n"
+"      -H\t使用固定(「hard」)資源限制\n"
+"      -a\t回報目前的所有限制\n"
+"      -b\té\80\9aè¨\8a端快å\8f\96大å°\8f\n"
+"      -c\t建立之核心檔案的最大大小\n"
+"      -d\t一個行程資料區的最大大小\n"
+"      -e\t最高的排程優先順序(「nice」)\n"
+"      -f\tshell 及其子行程可寫入的最大檔案大小\n"
+"      -i\t最多可以暫停的號數\n"
+"      -k\t為本行程分配之最大 kqueues 數量\n"
+"      -l\t一個行程可鎖定的最大記憶體尺寸\n"
+"      -m\t最大的常駐記憶體大小\n"
+"      -n\t最多可開啟之檔案描述元個數\n"
+"      -p\t管é\81\93ç·©è¡\9då\8d\80大å°\8f\n"
+"      -q\tPOSIX è¨\8aæ\81¯佇列的最大位元組數\n"
 "      -r\t即時排程的最大優先順序\n"
 "      -s\t最大堆疊尺寸\n"
-"      -P\t偽終端的最大數量\n"
-"      -t\t最大的 CPU 時間,以秒為單位\n"
+"      -t\t最多可用的 CPU 時間,以秒為單位\n"
 "      -u\t最大使用者行程數\n"
 "      -v\t虛擬記憶體尺寸\n"
 "      -x\t最大的檔案鎖數量\n"
+"      -P\t最大可開啟的偽終端數量\n"
+"      -R\t一個即時執行緒在堵塞前可執行的最長時間\n"
 "      -T\t最大執行緒數量\n"
 "    \n"
 "    並非所有選項在所有系統上可用。\n"
 "    \n"
-"    å¦\82æ\9e\9cæ\8f\90ä¾\9bäº\86 LIMIT è®\8aæ\95¸ï¼\8cå\89\87å®\83ç\82ºæ\8c\87å®\9aè³\87æº\90ç\9a\84æ\96°å\80¼ï¼\9bç\89¹å\88¥ç\9a\84 LIMIT å\80¼ç\82º\n"
-"   「soft」、「hard」和「unlimited」,分別表示目前的軟限制,硬限制和無限制。\n"
-"    否則印出指定資源的目前限制值,不帶選項則假定為 -f\n"
+"    å¦\82æ\9e\9cæ\9c\89æ\8c\87å®\9a LIMITï¼\8cå\89\87é\80\99å\80\8bè®\8aæ\95¸æ\98¯æ\8c\87å®\9aè³\87æº\90ç\9a\84æ\96°æ\95¸å\80¼ï¼\9bç\89¹æ®\8a LIMIT æ\95¸å\80¼\n"
+"   「soft」、「hard」和「unlimited」,分別表示目前的彈性限制、固定限制和\n"
+"    無限制。若未指定,則輸出指定資源的目前限制值,不傳入選項則假定為 -f\n"
 "    \n"
-"    取值都是 1024 位元組為單位,除了 -t 以秒為單位,-p 以 512 位元組遞增,\n"
-"    -u ç\82ºç\84¡å°ºåº¦的行程數量。\n"
+"    取值都是 1024 位元組為單位,除了 -t 以秒為單位、-p 以 512 位元組遞增、\n"
+"    -u ç\82ºç\84¡å\96®ä½\8d的行程數量。\n"
 "    \n"
 "    結束狀態:\n"
 "    回傳成功,除非使用了無效的選項或者錯誤發生。"
 
-#: builtins.c:1482
+#: builtins.c:1483
 msgid ""
 "Display or set file mode mask.\n"
 "    \n"
@@ -4656,26 +4542,7 @@ msgstr ""
 "    結束狀態:\n"
 "    回傳成功,除非使用了無效的 MODE 模式或者選項。"
 
-#: builtins.c:1502
-#, fuzzy
-#| msgid ""
-#| "Wait for job completion and return exit status.\n"
-#| "    \n"
-#| "    Waits for each process identified by an ID, which may be a process ID or a\n"
-#| "    job specification, and reports its termination status.  If ID is not\n"
-#| "    given, waits for all currently active child processes, and the return\n"
-#| "    status is zero.  If ID is a job specification, waits for all processes\n"
-#| "    in that job's pipeline.\n"
-#| "    \n"
-#| "    If the -n option is supplied, waits for the next job to terminate and\n"
-#| "    returns its exit status.\n"
-#| "    \n"
-#| "    If the -f option is supplied, and job control is enabled, waits for the\n"
-#| "    specified ID to terminate, instead of waiting for it to change status.\n"
-#| "    \n"
-#| "    Exit Status:\n"
-#| "    Returns the status of the last ID; fails if ID is invalid or an invalid\n"
-#| "    option is given."
+#: builtins.c:1503
 msgid ""
 "Wait for job completion and return exit status.\n"
 "    \n"
@@ -4704,20 +4571,27 @@ msgid ""
 msgstr ""
 "等待工作完成並回傳結束狀態。\n"
 "    \n"
-"    ç­\89å¾\85以 ID ç·¨è\99\9fè­\98å\88¥ç\9a\84è¡\8cç¨\8bï¼\8cå\85¶ä¸­ ID å\8f¯ä»¥æ\98¯è¡\8cç¨\8bç·¨è\99\9fæ\88\96è\80\85å·¥ä½\9cè¦\8fæ ¼ï¼\8c\n"
-"    並通報它的終止狀態。如果 ID 沒有給出,則等待所有的目前活躍子\n"
-"    行程,並且回傳狀態為零。如果 ID 是工作規格,等待工作管道中的\n"
+"    ç­\89å¾\85以 ID ç·¨è\99\9fè­\98å\88¥ç\9a\84è¡\8cç¨\8bï¼\8då\85¶ä¸­ ID å\8f¯ä»¥æ\98¯è¡\8cç¨\8bç·¨è\99\9fæ\88\96è\80\85å·¥ä½\9cè¦\8fæ ¼â\80\94\n"
+"    並回報其終止狀態。若未指定 ID,則等待所有的目前活躍子行程,\n"
+"    並設定回傳狀態為 0。如果 ID 是工作規格,則等待工作管線中的\n"
 "    所有行程。\n"
 "    \n"
-"    若指定了 -n 選項,等待下一個工作完成並回傳其狀態。\n"
+"    若指定了 -n 選項,則等待 ID 清單中的單一個工作;若未指定,則\n"
+"    等待下一個工作完成,並回傳其結束狀態。\n"
 "    \n"
-"    如果指定了 -f 選項且啟用工作管理,則等待指定 ID 終止,而非\n"
-"    等到其變更狀態。\n"
+"    如果指定了 -p 選項,則會將選項引數中命名的 VAR 變數,指定\n"
+"    為回傳結束狀態之工作的行程或工作識別子。這個變數在指定前,\n"
+"    會先進行 unset。這個僅在指定 -n 選項時有幫助。\n"
+"\n"
+"    如果指定了 -f 選項且有啟用工作管理,則等待指定 ID 終止,\n"
+"    而非等待其變更狀態。\n"
 "    \n"
 "    結束狀態:\n"
-"    回傳最後一個 ID 行程的狀態;如果使用了無效的 ID 或者選項則失敗。"
+"    回傳最後一個 ID 行程的狀態;如果 ID 或指定之選項無效;\n"
+"    或有指定 -n,shell 卻沒有要不等待 (unwaited) 的子行程,\n"
+"    則回傳失敗。"
 
-#: builtins.c:1533
+#: builtins.c:1534
 msgid ""
 "Wait for process completion and return exit status.\n"
 "    \n"
@@ -4737,7 +4611,7 @@ msgstr ""
 "    結束狀態:\n"
 "    回傳行程 ID 的狀態;如果 PID 是無效的行程識別碼或者指定了無效的選項則失敗。"
 
-#: builtins.c:1548
+#: builtins.c:1549
 msgid ""
 "Execute commands for each member in a list.\n"
 "    \n"
@@ -4758,7 +4632,7 @@ msgstr ""
 "    結束狀態:\n"
 "    回傳最後執行指令的狀態。"
 
-#: builtins.c:1562
+#: builtins.c:1563
 msgid ""
 "Arithmetic for loop.\n"
 "    \n"
@@ -4788,7 +4662,7 @@ msgstr ""
 "    結束狀態:\n"
 "    回傳最後執行指令的狀態。"
 
-#: builtins.c:1580
+#: builtins.c:1581
 msgid ""
 "Select words from a list and execute commands.\n"
 "    \n"
@@ -4821,7 +4695,7 @@ msgstr ""
 "    結束狀態:\n"
 "    回傳最後一個執行指令的狀態。"
 
-#: builtins.c:1601
+#: builtins.c:1602
 msgid ""
 "Report time consumed by pipeline's execution.\n"
 "    \n"
@@ -4849,7 +4723,7 @@ msgstr ""
 "    結束狀態:\n"
 "    回傳狀態即 PIPELINE 的回傳狀態。"
 
-#: builtins.c:1618
+#: builtins.c:1619
 msgid ""
 "Execute commands based on pattern matching.\n"
 "    \n"
@@ -4867,7 +4741,7 @@ msgstr ""
 "    結束狀態:\n"
 "    回傳最後一個執行指令的狀態。"
 
-#: builtins.c:1630
+#: builtins.c:1631
 msgid ""
 "Execute commands based on conditional.\n"
 "    \n"
@@ -4893,43 +4767,43 @@ msgstr ""
 "    結束狀態:\n"
 "    回傳最後一個執行指令的狀態。"
 
-#: builtins.c:1647
+#: builtins.c:1648
 msgid ""
 "Execute commands as long as a test succeeds.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `while' COMMANDS has an exit status of zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n"
+"    an exit status of zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
 "只要測試成功即執行指令。\n"
 "    \n"
-"    只要在「while」<指令> 中的最終指令回傳結果為 0,則\n"
-"    展開並執行 <指令>。\n"
+"    只要 COMMANDS 中的最後一條命令回傳了結束狀態碼 0,\n"
+"   便會展開並執行 COMMANDS-2。\n"
 "    \n"
 "    結束狀態:\n"
 "    回傳最後一個執行指令的狀態。"
 
-#: builtins.c:1659
+#: builtins.c:1660
 msgid ""
 "Execute commands as long as a test does not succeed.\n"
 "    \n"
-"    Expand and execute COMMANDS as long as the final command in the\n"
-"    `until' COMMANDS has an exit status which is not zero.\n"
+"    Expand and execute COMMANDS-2 as long as the final command in COMMANDS has\n"
+"    an exit status which is not zero.\n"
 "    \n"
 "    Exit Status:\n"
 "    Returns the status of the last command executed."
 msgstr ""
-"當測試不同過時執行指令。\n"
+"只要測試不成功即執行指令。\n"
 "    \n"
-"   「until」<指令> 的最終指令回傳狀態不為 0 時,\n"
-"    展開並執行 <指令>。\n"
+"    只要 COMMANDS 中的最後一條命令回傳了不是 0 的結束狀態碼,\n"
+"   便會展開並執行 COMMANDS-2。\n"
 "    \n"
 "    結束狀態:\n"
 "    回傳最後一個執行指令的狀態。"
 
-#: builtins.c:1671
+#: builtins.c:1672
 msgid ""
 "Create a coprocess named NAME.\n"
 "    \n"
@@ -4951,7 +4825,7 @@ msgstr ""
 "    結束狀態:\n"
 "    coprc 指令回傳離開代碼 0。"
 
-#: builtins.c:1685
+#: builtins.c:1686
 msgid ""
 "Define shell function.\n"
 "    \n"
@@ -4973,7 +4847,7 @@ msgstr ""
 "    結束狀態:\n"
 "    回傳成功除非 <名稱> 為唯讀。"
 
-#: builtins.c:1699
+#: builtins.c:1700
 msgid ""
 "Group commands as a unit.\n"
 "    \n"
@@ -4991,7 +4865,7 @@ msgstr ""
 "    結束狀態:\n"
 "    回傳最後一個執行指令的狀態。"
 
-#: builtins.c:1711
+#: builtins.c:1712
 msgid ""
 "Resume job in foreground.\n"
 "    \n"
@@ -5015,7 +4889,7 @@ msgstr ""
 "    結束狀態:\n"
 "    回傳被繼續的工作狀態。"
 
-#: builtins.c:1726
+#: builtins.c:1727
 msgid ""
 "Evaluate arithmetic expression.\n"
 "    \n"
@@ -5033,7 +4907,7 @@ msgstr ""
 "    結束狀態:\n"
 "    如果表示式求值為 0 則回傳 1;否則回傳 0。"
 
-#: builtins.c:1738
+#: builtins.c:1739
 msgid ""
 "Execute conditional command.\n"
 "    \n"
@@ -5077,7 +4951,7 @@ msgstr ""
 "    結束狀態:\n"
 "    根據 EXPRESSION 的值為 0 或 1。"
 
-#: builtins.c:1764
+#: builtins.c:1765
 msgid ""
 "Common shell variable names and usage.\n"
 "    \n"
@@ -5172,7 +5046,7 @@ msgstr ""
 "    HISTIGNORE\t用於決定哪些指令被存入歷史記錄檔案的模式\n"
 "    \t\t列表,以冒號分隔。\n"
 
-#: builtins.c:1821
+#: builtins.c:1822
 msgid ""
 "Add directories to stack.\n"
 "    \n"
@@ -5223,7 +5097,7 @@ msgstr ""
 "    結束狀態:\n"
 "    回傳成功,除非使用了無效的參數或者目錄變換失敗。"
 
-#: builtins.c:1855
+#: builtins.c:1856
 msgid ""
 "Remove directories from stack.\n"
 "    \n"
@@ -5270,7 +5144,7 @@ msgstr ""
 "    結束狀態:\n"
 "    回傳成功,除非使用了無效的參數或者目錄變換失敗。"
 
-#: builtins.c:1885
+#: builtins.c:1886
 msgid ""
 "Display directory stack.\n"
 "    \n"
@@ -5319,7 +5193,7 @@ msgstr ""
 "    結束狀態:\n"
 "    回傳成功,除非使用了無效的選項或者發生錯誤。"
 
-#: builtins.c:1916
+#: builtins.c:1917
 msgid ""
 "Set and unset shell options.\n"
 "    \n"
@@ -5355,7 +5229,7 @@ msgstr ""
 "    如果 <選項名稱> 選項被啟用則回傳成功;如果是\n"
 "    無效的選項或 <選項名稱> 被停用則失敗。"
 
-#: builtins.c:1937
+#: builtins.c:1938
 msgid ""
 "Formats and prints ARGUMENTS under control of the FORMAT.\n"
 "    \n"
@@ -5374,6 +5248,8 @@ msgid ""
 "    \n"
 "      %b\texpand backslash escape sequences in the corresponding argument\n"
 "      %q\tquote the argument in a way that can be reused as shell input\n"
+"      %Q\tlike %q, but apply any precision to the unquoted argument before\n"
+"    \t\tquoting\n"
 "      %(fmt)T\toutput the date-time string resulting from using FMT as a format\n"
 "    \t        string for strftime(3)\n"
 "    \n"
@@ -5386,48 +5262,28 @@ msgid ""
 "    Returns success unless an invalid option is given or a write or assignment\n"
 "    error occurs."
 msgstr ""
-"在 <格式> 的控制下格式化並印出 <參數>。\n"
+"在 FORMAT 的控制下格式化並印出 ARGUMENTS。\n"
 "    \n"
 "    選項:\n"
-"      -v var\t將輸出指派給 shell 變數 VAR 而不顯示在標準輸出上\n"
+"      -v var\t將輸出指派給 shell 變數 VAR 而非顯示在標準輸出上\n"
+"    \n"
+"    FORMAT 是包含三種物件的字元:簡單複製到標準輸出的純字元;\n"
+"    變換後複製到標準輸入的跳脫字元;以及每個都會影響到下個引數的格式化規格。\n"
 "    \n"
-"    <格式> 是包含三種物件的字串:簡單地被複製到標準輸出的普通字元;\n"
-"    被變換之後複製到標準輸入的逸出字元;以及每個都會影響到下個參數的印出格式化規格。\n"
+"    除了 printf(1) 中描述的標準格式化規格,printf 還會解析:\n"
 "    \n"
-"    在 printf(1) 中描述的標準控制規格之外,printf 解析:\n"
+"      %b\t對應引數中的反斜線跳脫序列\n"
+"      %q\t以可做為 shell 輸入的格式對引數加上引號\n"
+"      %Q\t類似 %q,但精度要求會在加引號之前,對未括住的引數生效\n"
+"      %(fmt)T\t將 FMT 用來當作 strftime(3) 的格式,輸出日期與時間字串\n"
+"    \n"
+"    必要時會重用格式以消耗掉所有引數。如果引數少於格式所需,其他的格式規範則會\n"
+"    視為 0 值或空字串(視情況而定)套用。\n"
 "    \n"
-"      %b\t擴充套件對應參數中的反斜線逸出序列\n"
-"      %q\t以可做為 shell 輸入的格式引用參數\n"
-"      %(fmt)T\t以 FMT 為提供 strftime(3) 的格式輸出日期與時間字串    \n"
 "    結束狀態:\n"
 "    回傳成功,除非使用了無效的選項或者發生寫入或指派錯誤。"
 
-#: builtins.c:1971
-#, fuzzy
-#| msgid ""
-#| "Specify how arguments are to be completed by Readline.\n"
-#| "    \n"
-#| "    For each NAME, specify how arguments are to be completed.  If no options\n"
-#| "    are supplied, existing completion specifications are printed in a way that\n"
-#| "    allows them to be reused as input.\n"
-#| "    \n"
-#| "    Options:\n"
-#| "      -p\tprint existing completion specifications in a reusable format\n"
-#| "      -r\tremove a completion specification for each NAME, or, if no\n"
-#| "    \t\tNAMEs are supplied, all completion specifications\n"
-#| "      -D\tapply the completions and actions as the default for commands\n"
-#| "    \t\twithout any specific completion defined\n"
-#| "      -E\tapply the completions and actions to \"empty\" commands --\n"
-#| "    \t\tcompletion attempted on a blank line\n"
-#| "      -I\tapply the completions and actions to the initial (usually the\n"
-#| "    \t\tcommand) word\n"
-#| "    \n"
-#| "    When completion is attempted, the actions are applied in the order the\n"
-#| "    uppercase-letter options are listed above.  If multiple options are supplied,\n"
-#| "    the -D option takes precedence over -E, and both take precedence over -I.\n"
-#| "    \n"
-#| "    Exit Status:\n"
-#| "    Returns success unless an invalid option is supplied or an error occurs."
+#: builtins.c:1974
 msgid ""
 "Specify how arguments are to be completed by Readline.\n"
 "    \n"
@@ -5453,26 +5309,26 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless an invalid option is supplied or an error occurs."
 msgstr ""
-"規範 readline 如何完成讀取參數。\n"
+"指定 readline 如何完成讀取引數。\n"
 "    \n"
-"    規格對於每一個<名稱>如何完成讀取參數。如果不帶選項,\n"
-"    ç\8f¾æ\9c\89ç\9a\84è£\9cå®\8cè¦\8fæ ¼æ\9c\83以å\8f¯ä»¥é\87\8dç\94¨ç\82ºè¼¸å\85¥ç\9a\84æ ¼å¼\8få\8d°出。\n"
+"    指定每一個 <名稱> 如何完成讀取參數。如果不指定選項,\n"
+"    ç\8f¾æ\9c\89ç\9a\84è\87ªå\8b\95å®\8cæ\88\90è¦\8fæ ¼æ\9c\83以å\8f¯ä»¥é\87\8dæ\96°ä½\9cç\82ºè¼¸å\85¥ä½¿ç\94¨ç\9a\84æ ¼å¼\8f輸出。\n"
 "    \n"
 "    選項:\n"
-"      -p\t以可重用的格式印出現有的補完規格。\n"
-"      -r\t對於每個<名稱>刪除補完規格,或者如果沒有提供<名稱>\n"
-"    \tå\90\8d稱ï¼\8cå\88ªé\99¤æ\89\80æ\9c\89ç\9a\84è£\9cå®\8c規格。\n"
-"      -D\tå°\8dæ\96¼æ²\92æ\9c\89è£\9cå®\8cè¦\8fæ ¼å®\9a義ç\9a\84æ\8c\87令ï¼\8c設å®\9aé \90設ç\9a\84è£\9cå®\8c動作\n"
-"      -E\t對於「empty」指令設定補完動作,—— 對於空列的補完。\n"
-"      -I\tå¥\97ç\94¨è£\9cå®\8cå\92\8cå\8b\95ä½\9cå\88°é¦\96å\80\8b (é\80\9a常æ\98¯æ\8c\87令) å\96®è©\9e\n"
-"    \n"
-"    嘗試補完時,按照上述大寫字母選項的順序進行動作。 如果傳入了多個選項,\n"
+"      -p\t以可重用的格式輸出現有的自動完成規格。\n"
+"      -r\t移除每個 <名稱> 的自動完成規格。若未指定 <名稱>\n"
+"    \tå\89\87移é\99¤æ\89\80æ\9c\89è\87ªå\8b\95å®\8cæ\88\90規格。\n"
+"      -D\tå°\8dæ\96¼æ²\92æ\9c\89è\87ªå\8b\95å®\8cæ\88\90è¦\8fæ ¼å®\9a義ç\9a\84å\91½ä»¤ï¼\8c設å®\9aé \90設ç\9a\84è\87ªå\8b\95å®\8cæ\88\90動作\n"
+"      -E\t對於「empty」指令——嘗試對空白列進行自動完成——套用自動完成和動作。\n"
+"      -I\tå¥\97ç\94¨è\87ªå\8b\95å®\8cæ\88\90å\92\8cå\8b\95ä½\9cå\88°é¦\96å\80\8bï¼\88é\80\9a常æ\98¯å\91½ä»¤ï¼\89å\96®å­\97\n"
+"    \n"
+"    發起自動完成嘗試時,將依上述大寫字母選項的順序進行動作。若傳入了多個選項,\n"
 "    -D 選項優先於 -E 選項,而兩者優先於 -I 選項。\n"
 "    \n"
 "    結束狀態:\n"
 "    回傳成功,除非使用了無效的選項或者錯誤發生。"
 
-#: builtins.c:2001
+#: builtins.c:2004
 msgid ""
 "Display possible completions depending on the options.\n"
 "    \n"
@@ -5483,16 +5339,16 @@ msgid ""
 "    Exit Status:\n"
 "    Returns success unless an invalid option is supplied or an error occurs."
 msgstr ""
-"ä¾\9dæ\93\9aé\81¸é \85顯示å\8f¯è\83½ç\9a\84è£\9cå®\8c。\n"
+"ä¾\9dæ\93\9aé\81¸é \85顯示å\8f¯è\83½ç\9a\84è\87ªå\8b\95å®\8cæ\88\90建議。\n"
 "    \n"
-"    æ\84\8få\9c\96å\9c¨è\83½ç\94¢ç\94\9få\8f¯è\83½ç\9a\84è£\9cå®\8c shell 函數內部使用。\n"
+"    æ\84\8få\9c\96å\9c¨è\83½ç\94¢ç\94\9få\8f¯è\83½ç\9a\84è\87ªå\8b\95å®\8cæ\88\90 shell 函數內部使用。\n"
 "    如果提供了可選的 WORD 參數,則產生按照 WORD\n"
 "    進行的符合。\n"
 "    \n"
 "    結束狀態:\n"
 "    除非使用了無效選項或者錯誤發生,否則回傳成功。"
 
-#: builtins.c:2016
+#: builtins.c:2019
 msgid ""
 "Modify or display completion options.\n"
 "    \n"
@@ -5520,29 +5376,29 @@ msgid ""
 "    Returns success unless an invalid option is supplied or NAME does not\n"
 "    have a completion specification defined."
 msgstr ""
-"ä¿®æ\94¹æ\88\96顯示è£\9cå®\8c選項。\n"
+"ä¿®æ\94¹æ\88\96顯示è\87ªå\8b\95å®\8cæ\88\90選項。\n"
 "    \n"
-"    ä¿®æ\94¹æ¯\8få\80\8b <å\90\8d稱> ç\9a\84è£\9cå®\8cé\81¸é \85ï¼\8cæ\88\96å¦\82æ\9e\9cæ²\92æ\9c\89æ\8f\90ä¾\9b <å\90\8d稱>ï¼\8cå\9f·è¡\8cç\9b®å\89\8dç\9a\84è£\9cå®\8c。\n"
-"    å¦\82æ\9e\9cä¸\8d帶é\81¸é \85ï¼\8cå\8d°å\87ºæ¯\8få\80\8b <å\90\8d稱> ç\9a\84è£\9cå®\8cé\81¸é \85æ\88\96ç\9b®å\89\8dç\9a\84è£\9cå®\8c規格。\n"
+"    ä¿®æ\94¹æ¯\8få\80\8b <å\90\8d稱> ç\9a\84è\87ªå\8b\95å®\8cæ\88\90é\81¸é \85ï¼\8cæ\88\96å¦\82æ\9e\9cæ²\92æ\9c\89æ\8f\90ä¾\9b <å\90\8d稱>ï¼\8cå\9f·è¡\8cç\9b®å\89\8dç\9a\84è\87ªå\8b\95å®\8cæ\88\90。\n"
+"    å¦\82æ\9e\9cä¸\8d帶é\81¸é \85ï¼\8cå\8d°å\87ºæ¯\8få\80\8b <å\90\8d稱> ç\9a\84è\87ªå\8b\95å®\8cæ\88\90é\81¸é \85æ\88\96ç\9b®å\89\8dç\9a\84è\87ªå\8b\95å®\8cæ\88\90規格。\n"
 "    \n"
 "    選項:\n"
-"    \t-o option\tç\82ºæ¯\8få\80\8b <å\90\8d稱> è¨­å®\9aè£\9cå®\8c選項 option\n"
-"    \t-D\t\tç\82ºã\80\8cdefaultã\80\8dæ\8c\87令è£\9cå®\8c變更選項\n"
-"    \t-E\t\tç\82ºã\80\8cemptyã\80\8dæ\8c\87令è£\9cå®\8c變更選項\n"
-"    \t-I\t\tç\82ºé¦\96å\96®è©\9eä¸\8aç\9a\84è£\9cå®\8c變更選項\n"
+"    \t-o option\tç\82ºæ¯\8få\80\8b <å\90\8d稱> è¨­å®\9aè\87ªå\8b\95å®\8cæ\88\90選項 option\n"
+"    \t-D\t\tç\82ºã\80\8cdefaultã\80\8dæ\8c\87令è\87ªå\8b\95å®\8cæ\88\90變更選項\n"
+"    \t-E\t\tç\82ºã\80\8cemptyã\80\8dæ\8c\87令è\87ªå\8b\95å®\8cæ\88\90變更選項\n"
+"    \t-I\t\tç\82ºé¦\96å\96®è©\9eä¸\8aç\9a\84è\87ªå\8b\95å®\8cæ\88\90變更選項\n"
 "    \n"
 "    使用「+o」而不是「-o」可以關閉指定的選項。\n"
 "    \n"
 "    參數:\n"
 "    \n"
-"    æ¯\8få\80\8b <å\90\8d稱> é\83½å°\8dæ\87\89ä¸\80å\80\8bä¹\8bå\89\8d以è\97\89ç\94±ã\80\8ccompleteã\80\8då\85§å»ºå®\9a義äº\86è£\9cå®\8c規格的\n"
-"    æ\8c\87令ã\80\82å¦\82æ\9e\9cä¸\8dæ\8f\90ä¾\9b <å\90\8d稱>ï¼\8cç\9b®å\89\8dç\94¢ç\94\9fè£\9cå®\8c的函數必須呼叫 compopt,\n"
-"    ä¸¦ä¸\94ç\9b®å\89\8då\9f·è¡\8cç\9a\84è£\9cå®\8c產生器選項會被修改。\n"
+"    æ¯\8få\80\8b <å\90\8d稱> é\83½å°\8dæ\87\89ä¸\80å\80\8bä¹\8bå\89\8d以è\97\89ç\94±ã\80\8ccompleteã\80\8då\85§å»ºå®\9a義äº\86è\87ªå\8b\95å®\8cæ\88\90規格的\n"
+"    æ\8c\87令ã\80\82å¦\82æ\9e\9cä¸\8dæ\8f\90ä¾\9b <å\90\8d稱>ï¼\8cç\9b®å\89\8dç\94¢ç\94\9fè\87ªå\8b\95å®\8cæ\88\90的函數必須呼叫 compopt,\n"
+"    ä¸¦ä¸\94ç\9b®å\89\8då\9f·è¡\8cç\9a\84è\87ªå\8b\95å®\8cæ\88\90產生器選項會被修改。\n"
 "    \n"
 "    結束狀態:\n"
-"    å\9b\9eå\82³æ\88\90å\8a\9fï¼\8cé\99¤é\9d\9e使ç\94¨äº\86ç\84¡æ\95\88ç\9a\84é\81¸é \85æ\88\96è\80\85 <å\90\8d稱> æ²\92æ\9c\89å®\9a義è£\9cå®\8c規格。"
+"    å\9b\9eå\82³æ\88\90å\8a\9fï¼\8cé\99¤é\9d\9e使ç\94¨äº\86ç\84¡æ\95\88ç\9a\84é\81¸é \85æ\88\96è\80\85 <å\90\8d稱> æ²\92æ\9c\89å®\9a義è\87ªå\8b\95å®\8cæ\88\90規格。"
 
-#: builtins.c:2047
+#: builtins.c:2050
 msgid ""
 "Read lines from the standard input into an indexed array variable.\n"
 "    \n"
@@ -5602,7 +5458,7 @@ msgstr ""
 "    結束狀態:\n"
 "    回傳成功,除非使用了無效的選項,或者 ARRAY 變數唯讀或不是索引陣列。"
 
-#: builtins.c:2083
+#: builtins.c:2086
 msgid ""
 "Read lines from a file into an array variable.\n"
 "    \n"
@@ -5612,6 +5468,9 @@ msgstr ""
 "    \n"
 "    一個「mapfile」的同義詞。"
 
+#~ msgid "%s: invalid associative array key"
+#~ msgstr "%s: 無效的關聯陣列鍵值"
+
 #~ msgid ""
 #~ "Returns the context of the current subroutine call.\n"
 #~ "    \n"
index 3c8c2d8fff892d82664caee0bb840d8affd5cbd4..eef9bb6a051798480205770662074cfce789cb71 100644 (file)
@@ -1,6 +1,6 @@
 /* print_command -- A way to make readable commands from a command tree. */
 
-/* Copyright (C) 1989-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2022 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -129,6 +129,7 @@ static int inside_function_def;
 static int skip_this_indent;
 static int was_heredoc;
 static int printing_connection;
+static int printing_comsub;
 static REDIRECT *deferred_heredocs;
 
 /* The depth of the group commands that we are currently printing.  This
@@ -162,6 +163,21 @@ make_command_string (command)
   return (the_printed_command);
 }
 
+/* Print a command substitution after parsing it in parse_comsub to turn it
+   back into an external representation without turning newlines into `;'.
+   Placeholder for other changes, if any are necessary. */
+char *
+print_comsub (command)
+     COMMAND *command;
+{
+  char *ret;
+
+  printing_comsub++;
+  ret = make_command_string (command);
+  printing_comsub--;
+  return ret;
+}
+
 /* The internal function.  This is the real workhorse. */
 static void
 make_command_string_internal (command)
@@ -278,25 +294,35 @@ make_command_string_internal (command)
              break;
 
            case ';':
-             if (deferred_heredocs == 0)
-               {
-                 if (was_heredoc == 0)
-                   cprintf (";");
-                 else
-                   was_heredoc = 0;
-               }
-             else
-               print_deferred_heredocs (inside_function_def ? "" : ";");
+           case '\n':                          /* special case this */
+             {
+               char c = command->value.Connection->connector;
 
-             if (inside_function_def)
-               cprintf ("\n");
-             else
-               {
-                 cprintf (" ");
-                 if (command->value.Connection->second)
-                   skip_this_indent++;
-               }
-             break;
+               s[0] = printing_comsub ? c : ';';
+               s[1] = '\0';
+
+               if (deferred_heredocs == 0)
+                 {
+                   if (was_heredoc == 0)
+                     cprintf ("%s", s);        /* inside_function_def? */
+                   else
+                     was_heredoc = 0;
+                 }
+               else
+                 /* print_deferred_heredocs special-cases `;' */
+                 print_deferred_heredocs (inside_function_def ? "" : ";");
+
+               if (inside_function_def)
+                 cprintf ("\n");
+               else
+                 {
+                   if (c == ';')
+                     cprintf (" ");
+                   if (command->value.Connection->second)
+                     skip_this_indent++;
+                 }
+               break;
+             }
 
            default:
              cprintf (_("print_command: bad connector `%d'"),
@@ -440,7 +466,10 @@ indirection_level_string ()
     change_flag ('x', FLAG_ON);
 
   if (ps4 == 0 || *ps4 == '\0')
-    return (indirection_string);
+    {
+      FREE (ps4);
+      return (indirection_string);
+    }
 
 #if defined (HANDLE_MULTIBYTE)
   ps4_len = strnlen (ps4, MB_CUR_MAX);
@@ -956,11 +985,13 @@ void
 print_simple_command (simple_command)
      SIMPLE_COM *simple_command;
 {
-  command_print_word_list (simple_command->words, " ");
+  if (simple_command->words)
+    command_print_word_list (simple_command->words, " ");
 
   if (simple_command->redirects)
     {
-      cprintf (" ");
+      if (simple_command->words)
+       cprintf (" ");
       print_redirection_list (simple_command->redirects);
     }
 }
@@ -1050,6 +1081,9 @@ print_redirection_list (redirects)
          else
            hdtail = heredocs = newredir;
        }
+#if 0
+      /* Remove this heuristic now that the command printing code doesn't
+        unconditionally put in the redirector file descriptor. */
       else if (redirects->instruction == r_duplicating_output_word && (redirects->flags & REDIR_VARASSIGN) == 0 && redirects->redirector.dest == 1)
        {
          /* Temporarily translate it as the execution code does. */
@@ -1059,6 +1093,7 @@ print_redirection_list (redirects)
          print_redirection (redirects);
          redirects->instruction = r_duplicating_output_word;
        }
+#endif
       else
        print_redirection (redirects);
 
@@ -1217,6 +1252,8 @@ print_redirection (redirect)
     case r_duplicating_input_word:
       if (redirect->rflags & REDIR_VARASSIGN)
        cprintf ("{%s}<&%s", redir_word->word, redirectee->word);
+      else if (redirector == 0)
+       cprintf ("<&%s", redirectee->word);
       else
        cprintf ("%d<&%s", redirector, redirectee->word);
       break;
@@ -1224,6 +1261,8 @@ print_redirection (redirect)
     case r_duplicating_output_word:
       if (redirect->rflags & REDIR_VARASSIGN)
        cprintf ("{%s}>&%s", redir_word->word, redirectee->word);
+      else if (redirector == 1)
+       cprintf (">&%s", redirectee->word);
       else
        cprintf ("%d>&%s", redirector, redirectee->word);
       break;
@@ -1280,6 +1319,7 @@ reset_locals ()
   indentation = 0;
   printing_connection = 0;
   deferred_heredocs = 0;
+  printing_comsub = 0;
 }
 
 static void
@@ -1351,6 +1391,7 @@ named_function_string (name, command, flags)
   old_amount = indentation_amount;
   command_string_index = was_heredoc = 0;
   deferred_heredocs = 0;
+  printing_comsub = 0;
 
   if (name && *name)
     {
diff --git a/quit.h b/quit.h
index db8a776b595d780ea1734309c283446bd7b44674..0af1d121f9a69f999da9532635f854f4b78f8e78 100644 (file)
--- a/quit.h
+++ b/quit.h
@@ -1,6 +1,6 @@
 /* quit.h -- How to handle SIGINT gracefully. */
 
-/* Copyright (C) 1993-2013 Free Software Foundation, Inc.
+/* Copyright (C) 1993-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -38,12 +38,6 @@ extern volatile sig_atomic_t terminating_signal;
     if (interrupt_state) throw_to_top_level (); \
   } while (0)
 
-#define CHECK_ALRM \
-  do { \
-    if (sigalrm_seen) \
-      sh_longjmp (alrmbuf, 1); \
-  } while (0)
-
 #define SETINTERRUPT interrupt_state = 1
 #define CLRINTERRUPT interrupt_state = 0
 
diff --git a/redir.c b/redir.c
index fa92b4d4179ca5c7dc7d30c99657e064519f17b0..8369adccbd6bc0389aa2d6cc1d493c462ca62ad3 100644 (file)
--- a/redir.c
+++ b/redir.c
@@ -1,6 +1,6 @@
 /* redir.c -- Functions to perform input and output redirection. */
 
-/* Copyright (C) 1997-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1997-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -88,6 +88,7 @@ extern int errno;
 #define SHELL_FD_BASE  10
 
 int expanding_redir;
+int varassign_redir_autoclose = 0;
 
 extern REDIRECT *redirection_undo_list;
 extern REDIRECT *exec_redirection_undo_list;
@@ -459,7 +460,10 @@ here_document_to_fd (redirectee, ri)
       return fd;
     }
 
-#if defined (HEREDOC_PIPESIZE)
+  if (shell_compatibility_level <= 50)
+    goto use_tempfile;
+
+#if HEREDOC_PIPESIZE
   /* Try to use a pipe internal to this process if the document is shorter
      than the system's pipe capacity (computed at build time). We want to
      write the entire document without write blocking. */
@@ -467,6 +471,7 @@ here_document_to_fd (redirectee, ri)
     {
       if (pipe (herepipe) < 0)
        {
+         /* XXX - goto use_tempfile; ? */
          r = errno;
          if (document != redirectee->word)
            free (document);
@@ -808,8 +813,14 @@ do_redirection_internal (redirect, flags, fnp)
       redirectee_word = redirection_expand (redirectee);
 
       /* XXX - what to do with [N]<&$w- where w is unset or null?  ksh93
-              closes N. */
-      if (redirectee_word == 0)
+              turns it into [N]<&- or [N]>&- and closes N. */
+      if ((ri == r_move_input_word || ri == r_move_output_word) && redirectee_word == 0)
+       {
+         sd = redirect->redirector;
+         rd.dest = 0;
+         new_redirect = make_redirection (sd, r_close_this, rd, 0);
+       }
+      else if (redirectee_word == 0)
        return (AMBIGUOUS_REDIRECT);
       else if (redirectee_word[0] == '-' && redirectee_word[1] == '\0')
        {
@@ -939,10 +950,15 @@ do_redirection_internal (redirect, flags, fnp)
              REDIRECTION_ERROR (redirector, r, fd);
            }
 
-         if ((flags & RX_UNDOABLE) && (redirect->rflags & REDIR_VARASSIGN) == 0)
+         if ((flags & RX_UNDOABLE) && ((redirect->rflags & REDIR_VARASSIGN) == 0 || varassign_redir_autoclose))
            {
-             /* Only setup to undo it if the thing to undo is active. */
-             if ((fd != redirector) && (fcntl (redirector, F_GETFD, 0) != -1))
+             /* Only setup to undo it if the thing to undo is active. We want
+                to autoclose if we are doing a varassign redirection and the
+                varredir_close shell option is set, and we can't test
+                redirector in this case since we just assigned it above. */             
+             if (fd != redirector && (redirect->rflags & REDIR_VARASSIGN) && varassign_redir_autoclose)
+               r = add_undo_close_redirect (redirector);             
+             else if ((fd != redirector) && (fcntl (redirector, F_GETFD, 0) != -1))
                r = add_undo_redirect (redirector, ri, -1);
              else
                r = add_undo_close_redirect (redirector);
@@ -1056,10 +1072,14 @@ do_redirection_internal (redirect, flags, fnp)
 
          if (flags & RX_ACTIVE)
            {
-             if ((flags & RX_UNDOABLE) && (redirect->rflags & REDIR_VARASSIGN) == 0)
+             if ((flags & RX_UNDOABLE) && ((redirect->rflags & REDIR_VARASSIGN) == 0 || varassign_redir_autoclose))
                {
-                 /* Only setup to undo it if the thing to undo is active. */
-                 if ((fd != redirector) && (fcntl (redirector, F_GETFD, 0) != -1))
+                 /* Only setup to undo it if the thing to undo is active.
+                    Close if the right option is set and we are doing a
+                    varassign redirection. */
+                 if (fd != redirector && (redirect->rflags & REDIR_VARASSIGN) && varassign_redir_autoclose)
+                   r = add_undo_close_redirect (redirector);         
+                 else if ((fd != redirector) && (fcntl (redirector, F_GETFD, 0) != -1))
                    r = add_undo_redirect (redirector, ri, -1);
                  else
                    r = add_undo_close_redirect (redirector);
@@ -1117,10 +1137,14 @@ do_redirection_internal (redirect, flags, fnp)
 
       if ((flags & RX_ACTIVE) && (redir_fd != redirector))
        {
-         if ((flags & RX_UNDOABLE) && (redirect->rflags & REDIR_VARASSIGN) == 0)
+         if ((flags & RX_UNDOABLE) && ((redirect->rflags & REDIR_VARASSIGN) == 0 || varassign_redir_autoclose))
            {
-             /* Only setup to undo it if the thing to undo is active. */
-             if (fcntl (redirector, F_GETFD, 0) != -1)
+             /* Only setup to undo it if the thing to undo is active.
+                Close if the right option is set and we are doing a
+                varassign redirection. */
+             if ((redirect->rflags & REDIR_VARASSIGN) && varassign_redir_autoclose)
+               r = add_undo_close_redirect (redirector);             
+             else if (fcntl (redirector, F_GETFD, 0) != -1)
                r = add_undo_redirect (redirector, ri, redir_fd);
              else
                r = add_undo_close_redirect (redirector);
@@ -1209,7 +1233,6 @@ do_redirection_internal (redirect, flags, fnp)
            }
 
          r = 0;
-         /* XXX - only if REDIR_VARASSIGN not set? */
          if (flags & RX_UNDOABLE)
            {
              if (fcntl (redirector, F_GETFD, 0) != -1)
@@ -1434,7 +1457,7 @@ redir_varassign (redir, fd)
   SHELL_VAR *v;
 
   w = redir->redirector.filename;
-  v = bind_var_to_int (w->word, fd);
+  v = bind_var_to_int (w->word, fd, 0);
   if (v == 0 || readonly_p (v) || noassign_p (v))
     return BADVAR_REDIRECT;
 
@@ -1490,7 +1513,7 @@ redir_varvalue (redir)
   /* get_variable_value handles references to array variables without
      subscripts */
   if (vr && (array_p (v) || assoc_p (v)))
-    val = get_array_value (w, 0, (int *)NULL, (arrayind_t *)0);
+    val = get_array_value (w, 0, (array_eltstate_t *)NULL);
   else
 #endif
   val = get_variable_value (v);
diff --git a/redir.h b/redir.h
index 64a3d26698707a9e62e6af29e05cc17d396c19cb..340dc1c0218477129d3f825b0a6e5928614d88a7 100644 (file)
--- a/redir.h
+++ b/redir.h
@@ -1,6 +1,6 @@
 /* redir.h - functions from redir.c. */
 
-/* Copyright (C) 1997, 2001, 2005, 2008, 2009-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1997, 2001, 2005, 2008, 2009-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -37,4 +37,7 @@ extern int do_redirections PARAMS((REDIRECT *, int));
 extern char *redirection_expand PARAMS((WORD_DESC *));
 extern int stdin_redirects PARAMS((REDIRECT *));
 
+/* in builtins/evalstring.c for now, could move later */
+extern int open_redir_file PARAMS((REDIRECT *, char **));
+
 #endif /* _REDIR_H_ */
diff --git a/shell.c b/shell.c
index ce8087f77b86555891dace28dce8e18f8c3c14f0..ee9d445d20cc0eae807800a92ecab96045262300 100644 (file)
--- a/shell.c
+++ b/shell.c
@@ -1,6 +1,6 @@
 /* shell.c -- GNU's idea of the POSIX shell specification. */
 
-/* Copyright (C) 1987-2019 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -72,6 +72,8 @@ extern int get_tty_state PARAMS((void));
 
 #if defined (USING_BASH_MALLOC) && defined (DEBUG) && !defined (DISABLE_MALLOC_WRAPPERS)
 #  include <malloc/shmalloc.h>
+#elif defined (MALLOC_DEBUG) && defined (USING_BASH_MALLOC)
+#  include <malloc/shmalloc.h>
 #endif
 
 #if defined (HISTORY)
@@ -220,8 +222,10 @@ int no_line_editing = 0;   /* non-zero -> don't do fancy line editing. */
 #else
 int no_line_editing = 1;       /* can't have line editing without readline */
 #endif
+#if defined (TRANSLATABLE_STRINGS)
 int dump_translatable_strings; /* Dump strings in $"...", don't execute. */
 int dump_po_strings;           /* Dump strings in $"..." in po format */
+#endif
 int wordexp_only = 0;          /* Do word expansion only */
 int protected_mode = 0;                /* No command substitution with --wordexp */
 
@@ -246,8 +250,10 @@ static const struct {
 #if defined (DEBUGGER)
   { "debugger", Int, &debugging_mode, (char **)0x0 },
 #endif
+#if defined (TRANSLATABLE_STRINGS)
   { "dump-po-strings", Int, &dump_po_strings, (char **)0x0 },
   { "dump-strings", Int, &dump_translatable_strings, (char **)0x0 },
+#endif
   { "help", Int, &want_initial_help, (char **)0x0 },
   { "init-file", Charp, (int *)0x0, &bashrc_file },
   { "login", Int, &make_login_shell, (char **)0x0 },
@@ -496,11 +502,13 @@ main (argc, argv, env)
 
   set_login_shell ("login_shell", login_shell != 0);
 
+#if defined (TRANSLATABLE_STRINGS)
   if (dump_po_strings)
     dump_translatable_strings = 1;
 
   if (dump_translatable_strings)
     read_but_dont_execute = 1;
+#endif
 
   if (running_setuid && privileged_mode == 0)
     disable_priv_mode ();
@@ -628,7 +636,7 @@ main (argc, argv, env)
   code = setjmp_sigs (top_level);
   if (code)
     {
-      if (code == EXITPROG || code == ERREXIT)
+      if (code == EXITPROG || code == ERREXIT || code == EXITBLTIN)
        exit_shell (last_command_exit_value);
       else
        {
@@ -694,10 +702,24 @@ main (argc, argv, env)
   /* The startup files are run with `set -e' temporarily disabled. */
   if (locally_skip_execution == 0 && running_setuid == 0)
     {
+      char *t;
+
       old_errexit_flag = exit_immediately_on_error;
       exit_immediately_on_error = 0;
 
+      /* Temporarily set $0 while running startup files, then restore it so
+        we get better error messages when trying to open script files. */
+      if (shell_script_filename)
+       {
+         t = dollar_vars[0];
+         dollar_vars[0] = exec_argv0 ? savestring (exec_argv0) : savestring (shell_script_filename);
+       }
       run_startup_files ();
+      if (shell_script_filename)
+       {
+         free (dollar_vars[0]);
+         dollar_vars[0] = t;
+       }
       exit_immediately_on_error += old_errexit_flag;
     }
 
@@ -939,7 +961,9 @@ parse_shell_options (argv, arg_start, arg_end)
              break;
 
            case 'D':
+#if defined (TRANSLATABLE_STRINGS)
              dump_translatable_strings = 1;
+#endif
              break;
 
            default:
@@ -1040,6 +1064,7 @@ subshell_exit (s)
 
   /* Do trap[0] if defined.  Allow it to override the exit status
      passed to us. */
+  last_command_exit_value = s;
   if (signal_is_trapped (0))
     s = run_exit_trap ();
 
@@ -1103,6 +1128,7 @@ run_startup_files ()
 #endif
   int sourced_login, run_by_ssh;
 
+#if 1  /* TAG:bash-5.3 andrew.gregory.8@gmail.com 2/21/2022 */
   /* get the rshd/sshd case out of the way first. */
   if (interactive_shell == 0 && no_rc == 0 && login_shell == 0 &&
       act_like_sh == 0 && command_execution_string)
@@ -1112,11 +1138,16 @@ run_startup_files ()
                   (find_variable ("SSH2_CLIENT") != (SHELL_VAR *)0);
 #else
       run_by_ssh = 0;
+#endif
 #endif
 
       /* If we were run by sshd or we think we were run by rshd, execute
         ~/.bashrc if we are a top-level shell. */
+#if 1  /* TAG:bash-5.3 */
       if ((run_by_ssh || isnetconn (fileno (stdin))) && shell_level < 2)
+#else
+      if (isnetconn (fileno (stdin) && shell_level < 2)
+#endif
        {
 #ifdef SYS_BASHRC
 #  if defined (__OPENNT)
@@ -1352,6 +1383,7 @@ run_wordexp (words)
          return last_command_exit_value = 127;
        case ERREXIT:
        case EXITPROG:
+       case EXITBLTIN:
          return last_command_exit_value;
        case DISCARD:
          return last_command_exit_value = 1;
@@ -1430,6 +1462,7 @@ run_one_command (command)
          return last_command_exit_value = 127;
        case ERREXIT:
        case EXITPROG:
+       case EXITBLTIN:
          return last_command_exit_value;
        case DISCARD:
          return last_command_exit_value = 1;
diff --git a/shell.h b/shell.h
index 8b41792fcd73257a55ba1bf8dace67df93934409..6e44bca6919284b792bcc718caf2382abace713f 100644 (file)
--- a/shell.h
+++ b/shell.h
@@ -1,6 +1,6 @@
 /* shell.h -- The data structures used by the shell */
 
-/* Copyright (C) 1993-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1993-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -85,6 +85,7 @@ extern int EOF_Reached;
 #define MATCH_QUOTED   0x020
 #define MATCH_ASSIGNRHS        0x040
 #define MATCH_STARSUB  0x080
+#define MATCH_EXPREP   0x100   /* for pattern substitution, expand replacement */
 
 /* Some needed external declarations. */
 extern char **shell_environment;
@@ -165,18 +166,20 @@ extern struct user_info current_user;
 /* Structure in which to save partial parsing state when doing things like
    PROMPT_COMMAND and bash_execute_unix_command execution. */
 
-typedef struct _sh_parser_state_t {
-
+typedef struct _sh_parser_state_t
+{
   /* parsing state */
   int parser_state;
   int *token_state;
 
   char *token;
-  int token_buffer_size;
+  size_t token_buffer_size;
+  int eof_token;
 
   /* input line state -- line number saved elsewhere */
   int input_line_terminator;
   int eof_encountered;
+  int eol_lookahead;
 
 #if defined (HANDLE_MULTIBYTE)
   /* Nothing right now for multibyte state, but might want something later. */
@@ -204,11 +207,16 @@ typedef struct _sh_parser_state_t {
   int need_here_doc;
   int here_doc_first_line;
 
+  int esacs_needed;
+  int expecting_in;
+
   /* structures affecting the parser */
+  void *pushed_strings;
   REDIRECT *redir_stack[HEREDOC_MAX];
 } sh_parser_state_t;
 
-typedef struct _sh_input_line_state_t {
+typedef struct _sh_input_line_state_t
+{
   char *input_line;
   size_t input_line_index;
   size_t input_line_size;
@@ -220,6 +228,9 @@ typedef struct _sh_input_line_state_t {
 } sh_input_line_state_t;
 
 /* Let's try declaring these here. */
+extern void shell_ungets PARAMS((char *));
+extern void rewind_input_string PARAMS((void));
+
 extern char *parser_remaining_input PARAMS((void));
 
 extern sh_parser_state_t *save_parser_state PARAMS((sh_parser_state_t *));
diff --git a/sig.c b/sig.c
index e6537d2673b5db7b3d6c43c7afbe11dd9a262b58..840d577546d9197795521e92f32b0fd5a0cb2ac9 100644 (file)
--- a/sig.c
+++ b/sig.c
@@ -1,6 +1,6 @@
 /* sig.c - interface for shell signal handlers and signal initialization. */
 
-/* Copyright (C) 1994-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1994-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
diff --git a/sig.h b/sig.h
index a564e3cd9a857314695a07014d69065cecd27f31..0217be53d9adc89e7dd516bae6ee8f1d0b87d9c8 100644 (file)
--- a/sig.h
+++ b/sig.h
@@ -1,6 +1,6 @@
 /* sig.h -- header file for signal handler definitions. */
 
-/* Copyright (C) 1994-2013 Free Software Foundation, Inc.
+/* Copyright (C) 1994-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
 #  define SIGABRT SIGIOT
 #endif
 
-#define sighandler RETSIGTYPE
-typedef RETSIGTYPE SigHandler PARAMS((int));
+#define sighandler void
+typedef void SigHandler PARAMS((int));
 
-#if defined (VOID_SIGHANDLER)
-#  define SIGRETURN(n) return
-#else
-#  define SIGRETURN(n) return(n)
-#endif /* !VOID_SIGHANDLER */
+#define SIGRETURN(n)   return
 
 /* Here is a definition for set_signal_handler () which simply expands to
    a call to signal () for non-Posix systems.  The code for set_signal_handler
index d8361dd791aad5a6e87dac8076a58e4daa02f4ed..ec706c90b26ba674ab1bf68f56d1b311ec846028 100644 (file)
--- a/siglist.c
+++ b/siglist.c
@@ -1,6 +1,6 @@
 /* siglist.c -- signal list for those machines that don't have one. */
 
-/* Copyright (C) 1989-2009 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -23,6 +23,7 @@
 #if !defined (HAVE_SYS_SIGLIST) && !defined (HAVE_UNDER_SYS_SIGLIST) && !defined (HAVE_STRSIGNAL)
 
 #include <stdio.h>
+#include "command.h"
 #include "general.h"
 #include <signal.h>
 
index 745e5363a99ab14e194248e756b0a96bb0a6d489..73304966f45be0605690744754e0326ef431e91d 100644 (file)
@@ -146,7 +146,8 @@ strsub (string, pat, rep, global)
      char *string, *pat, *rep;
      int global;
 {
-  int patlen, replen, templen, tempsize, repl, i;
+  size_t patlen, replen, templen, tempsize, i;
+  int repl;
   char *temp, *r;
 
   patlen = strlen (pat);
@@ -178,17 +179,22 @@ strsub (string, pat, rep, global)
 }
 
 /* Replace all instances of C in STRING with TEXT.  TEXT may be empty or
-   NULL.  If DO_GLOB is non-zero, we quote the replacement text for
-   globbing.  Backslash may be used to quote C. */
+   NULL.  If (FLAGS & 1) is non-zero, we quote the replacement text for
+   globbing.  Backslash may be used to quote C. If (FLAGS & 2) we allow
+   backslash to escape backslash as well. */
 char *
-strcreplace (string, c, text, do_glob)
+strcreplace (string, c, text, flags)
      char *string;
      int c;
      const char *text;
-     int do_glob;
+     int flags;
 {
   char *ret, *p, *r, *t;
-  int len, rlen, ind, tlen;
+  size_t len, rlen, ind, tlen;
+  int do_glob, escape_backslash;
+
+  do_glob = flags & 1;
+  escape_backslash = flags & 2;
 
   len = STRLEN (text);
   rlen = len + strlen (string) + 2;
@@ -225,6 +231,8 @@ strcreplace (string, c, text, do_glob)
 
       if (*p == '\\' && p[1] == c)
        p++;
+      else if (escape_backslash && *p == '\\' && p[1] == '\\')
+       p++;
 
       ind = r - ret;
       RESIZE_MALLOCED_BUFFER (ret, ind, 2, rlen, rlen);
diff --git a/subst.c b/subst.c
index 2b76256c6535618c7d991a4fd2e3752d1e6d846e..d9feabca9ec3bc0c91ea79c70a0608c391e095e8 100644 (file)
--- a/subst.c
+++ b/subst.c
@@ -4,7 +4,7 @@
 /* ``Have a little faith, there's magic in the night.  You ain't a
      beauty, but, hey, you're alright.'' */
 
-/* Copyright (C) 1987-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2022 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -45,6 +45,7 @@
 
 #include "shell.h"
 #include "parser.h"
+#include "redir.h"
 #include "flags.h"
 #include "jobs.h"
 #include "execute_cmd.h"
@@ -186,9 +187,15 @@ int allow_null_glob_expansion;
 /* Non-zero means to throw an error when globbing fails to match anything. */
 int fail_glob_expansion;
 
+/* If non-zero, perform `&' substitution on the replacement string in the
+   pattern substitution word expansion. */
+int patsub_replacement = 1;
+
 /* Extern functions and variables from different files. */
 extern struct fd_bitmap *current_fds_to_close;
 extern int wordexp_only;
+extern int singlequote_translations;
+extern int extended_quote;
 
 #if defined (JOB_CONTROL) && defined (PROCESS_SUBSTITUTION)
 extern PROCESS *last_procsub_child;
@@ -257,10 +264,11 @@ static int do_assignment_internal PARAMS((const WORD_DESC *, int));
 static char *string_extract_verbatim PARAMS((char *, size_t, int *, char *, int));
 static char *string_extract PARAMS((char *, int *, char *, int));
 static char *string_extract_double_quoted PARAMS((char *, int *, int));
-static inline char *string_extract_single_quoted PARAMS((char *, int *));
+static inline char *string_extract_single_quoted PARAMS((char *, int *, int));
 static inline int skip_single_quoted PARAMS((const char *, size_t, int, int));
 static int skip_double_quoted PARAMS((char *, size_t, int, int));
 static char *extract_delimited_string PARAMS((char *, int *, char *, char *, char *, int));
+static char *extract_heredoc_dolbrace_string PARAMS((char *, int *, int, int));
 static char *extract_dollar_brace_string PARAMS((char *, int *, int, int));
 static int skip_matched_pair PARAMS((const char *, int, int, int, int));
 
@@ -287,7 +295,7 @@ static char *parameter_list_remove_pattern PARAMS((int, char *, int, int));
 #ifdef ARRAY_VARS
 static char *array_remove_pattern PARAMS((SHELL_VAR *, char *, int, int, int));
 #endif
-static char *parameter_brace_remove_pattern PARAMS((char *, char *, int, char *, int, int, int));
+static char *parameter_brace_remove_pattern PARAMS((char *, char *, array_eltstate_t *, char *, int, int, int));
 
 static char *string_var_assignment PARAMS((SHELL_VAR *, char *));
 #if defined (ARRAY_VARS)
@@ -300,11 +308,12 @@ static char *parameter_list_transform PARAMS((int, int, int));
 #if defined ARRAY_VARS
 static char *array_transform PARAMS((int, SHELL_VAR *, int, int));
 #endif
-static char *parameter_brace_transform PARAMS((char *, char *, int, char *, int, int, int, int));
+static char *parameter_brace_transform PARAMS((char *, char *, array_eltstate_t *, char *, int, int, int, int));
 static int valid_parameter_transform PARAMS((char *));
 
 static char *process_substitute PARAMS((char *, int));
 
+static char *optimize_cat_file PARAMS((REDIRECT *, int, int, int *));
 static char *read_comsub PARAMS((int, int, int, int *));
 
 #ifdef ARRAY_VARS
@@ -315,7 +324,7 @@ static int valid_brace_expansion_word PARAMS((char *, int));
 static int chk_atstar PARAMS((char *, int, int, int *, int *));
 static int chk_arithsub PARAMS((const char *, int));
 
-static WORD_DESC *parameter_brace_expand_word PARAMS((char *, int, int, int, arrayind_t *));
+static WORD_DESC *parameter_brace_expand_word PARAMS((char *, int, int, int, array_eltstate_t *));
 static char *parameter_brace_find_indir PARAMS((char *, int, int, int));
 static WORD_DESC *parameter_brace_expand_indir PARAMS((char *, int, int, int, int *, int *));
 static WORD_DESC *parameter_brace_expand_rhs PARAMS((char *, char *, int, int, int, int *, int *));
@@ -326,18 +335,19 @@ static intmax_t parameter_brace_expand_length PARAMS((char *));
 
 static char *skiparith PARAMS((char *, int));
 static int verify_substring_values PARAMS((SHELL_VAR *, char *, char *, int, intmax_t *, intmax_t *));
-static int get_var_and_type PARAMS((char *, char *, arrayind_t, int, int, SHELL_VAR **, char **));
+static int get_var_and_type PARAMS((char *, char *, array_eltstate_t *, int, int, SHELL_VAR **, char **));
 static char *mb_substring PARAMS((char *, int, int));
-static char *parameter_brace_substring PARAMS((char *, char *, int, char *, int, int, int));
+static char *parameter_brace_substring PARAMS((char *, char *, array_eltstate_t *, char *, int, int, int));
 
 static int shouldexp_replacement PARAMS((char *));
 
 static char *pos_params_pat_subst PARAMS((char *, char *, char *, int));
 
-static char *parameter_brace_patsub PARAMS((char *, char *, int, char *, int, int, int));
+static char *expand_string_for_patsub PARAMS((char *, int));
+static char *parameter_brace_patsub PARAMS((char *, char *, array_eltstate_t *, char *, int, int, int));
 
 static char *pos_params_casemod PARAMS((char *, char *, int, int));
-static char *parameter_brace_casemod PARAMS((char *, char *, int, int, char *, int, int, int));
+static char *parameter_brace_casemod PARAMS((char *, char *, array_eltstate_t *, int, char *, int, int, int));
 
 static WORD_DESC *parameter_brace_expand PARAMS((char *, int *, int, int, int *, int *));
 static WORD_DESC *param_expand PARAMS((char *, int *, int, int *, int *, int *, int *, int));
@@ -361,6 +371,8 @@ static WORD_LIST *expand_declaration_argument PARAMS((WORD_LIST *, WORD_LIST *))
 static WORD_LIST *shell_expand_word_list PARAMS((WORD_LIST *, int));
 static WORD_LIST *expand_word_list_internal PARAMS((WORD_LIST *, int));
 
+static int do_assignment_statements PARAMS((WORD_LIST *, char *, int));
+
 /* **************************************************************** */
 /*                                                                 */
 /*                     Utility Functions                           */
@@ -436,11 +448,6 @@ dump_word_flags (flags)
       f &= ~W_EXPANDRHS;
       fprintf (stderr, "W_EXPANDRHS%s", f ? "|" : "");
     }
-  if (f & W_ITILDE)
-    {
-      f &= ~W_ITILDE;
-      fprintf (stderr, "W_ITILDE%s", f ? "|" : "");
-    }
   if (f & W_NOTILDE)
     {
       f &= ~W_NOTILDE;
@@ -461,10 +468,10 @@ dump_word_flags (flags)
       f &= ~W_NOCOMSUB;
       fprintf (stderr, "W_NOCOMSUB%s", f ? "|" : "");
     }
-  if (f & W_DOLLARSTAR)
+  if (f & W_ARRAYREF)
     {
-      f &= ~W_DOLLARSTAR;
-      fprintf (stderr, "W_DOLLARSTAR%s", f ? "|" : "");
+      f &= ~W_ARRAYREF;
+      fprintf (stderr, "W_ARRAYREF%s", f ? "|" : "");
     }
   if (f & W_DOLLARAT)
     {
@@ -733,16 +740,15 @@ unquoted_substring (substr, string)
 INLINE char *
 sub_append_string (source, target, indx, size)
      char *source, *target;
-     int *indx;
+     size_t *indx;
      size_t *size;
 {
   if (source)
     {
-      int n;
-      size_t srclen;
+      size_t n, srclen;
 
       srclen = STRLEN (source);
-      if (srclen >= (int)(*size - *indx))
+      if (srclen >= (*size - *indx))
        {
          n = srclen + *indx;
          n = (n + DEFAULT_ARRAY_SIZE) - (n % DEFAULT_ARRAY_SIZE);
@@ -766,7 +772,7 @@ char *
 sub_append_number (number, target, indx, size)
      intmax_t number;
      char *target;
-     int *indx;
+     size_t *indx;
      size_t *size;
 {
   char *temp;
@@ -1086,22 +1092,38 @@ skip_double_quoted (string, slen, sind, flags)
 /* Extract the contents of STRING as if it is enclosed in single quotes.
    SINDEX, when passed in, is the offset of the character immediately
    following the opening single quote; on exit, SINDEX is left pointing after
-   the closing single quote. */
+   the closing single quote. ALLOWESC allows the single quote to be quoted by
+   a backslash; it's not used yet. */
 static inline char *
-string_extract_single_quoted (string, sindex)
+string_extract_single_quoted (string, sindex, allowesc)
      char *string;
      int *sindex;
+     int allowesc;
 {
   register int i;
   size_t slen;
   char *t;
+  int pass_next;
   DECLARE_MBSTATE;
 
   /* Don't need slen for ADVANCE_CHAR unless multibyte chars possible. */
   slen = (MB_CUR_MAX > 1) ? strlen (string + *sindex) + *sindex : 0;
   i = *sindex;
-  while (string[i] && string[i] != '\'')
-    ADVANCE_CHAR (string, slen, i);
+  pass_next = 0;
+  while (string[i])
+    {
+      if (pass_next)
+       {
+         pass_next = 0;
+         ADVANCE_CHAR (string, slen, i);
+         continue;
+       }
+      if (allowesc && string[i] == '\\')
+       pass_next++;
+      else if (string[i] == '\'')
+        break;
+      ADVANCE_CHAR (string, slen, i);
+    }
 
   t = substring (string, *sindex, i);
 
@@ -1158,7 +1180,7 @@ string_extract_verbatim (string, slen, sindex, charlist, flags)
 
   if ((flags & SX_NOCTLESC) && charlist[0] == '\'' && charlist[1] == '\0')
     {
-      temp = string_extract_single_quoted (string, sindex);
+      temp = string_extract_single_quoted (string, sindex, 0);
       --*sindex;       /* leave *sindex at separator character */
       return temp;
     }
@@ -1497,6 +1519,285 @@ extract_delimited_string (string, sindex, opener, alt_opener, closer, flags)
   return (result);
 }
 
+/* A simplified version of extract_dollar_brace_string that exists to handle
+   $'...' and $"..." quoting in here-documents, since the here-document read
+   path doesn't. It's separate because we don't want to mess with the fast
+   common path. We already know we're going to allocate and return a new
+   string and quoted == Q_HERE_DOCUMENT. We might be able to cut it down
+   some more, but extracting strings and adding them as we go adds complexity.
+   This needs to match the logic in parse.y:parse_matched_pair so we get
+   consistent behavior between here-documents and double-quoted strings. */
+static char *
+extract_heredoc_dolbrace_string (string, sindex, quoted, flags)
+     char *string;
+     int *sindex, quoted, flags;
+{
+  register int i, c;
+  size_t slen, tlen, result_index, result_size;
+  int pass_character, nesting_level, si, dolbrace_state;
+  char *result, *t, *send;
+  DECLARE_MBSTATE;
+
+  pass_character = 0;
+  nesting_level = 1;
+  slen = strlen (string + *sindex) + *sindex;
+  send = string + slen;
+
+  result_size = slen;
+  result_index = 0;
+  result = xmalloc (result_size + 1);
+
+  /* This function isn't called if this condition is not true initially. */
+  dolbrace_state = DOLBRACE_QUOTE;
+
+  i = *sindex;
+  while (c = string[i])
+    {
+      if (pass_character)
+       {
+         pass_character = 0;
+         RESIZE_MALLOCED_BUFFER (result, result_index, locale_mb_cur_max + 1, result_size, 64);
+         COPY_CHAR_I (result, result_index, string, send, i);
+         continue;
+       }
+
+      /* CTLESCs and backslashes quote the next character. */
+      if (c == CTLESC || c == '\\')
+       {
+         pass_character++;
+         RESIZE_MALLOCED_BUFFER (result, result_index, 2, result_size, 64);
+         result[result_index++] = c;
+         i++;
+         continue;
+       }
+
+      /* The entire reason we have this separate function right here. */
+      if (c == '$' && string[i+1] == '\'')
+       {
+         char *ttrans;
+         int ttranslen;
+
+         if ((posixly_correct || extended_quote == 0) && dolbrace_state != DOLBRACE_QUOTE && dolbrace_state != DOLBRACE_QUOTE2)
+           {
+             RESIZE_MALLOCED_BUFFER (result, result_index, 3, result_size, 64);
+             result[result_index++] = '$';
+             result[result_index++] = '\'';
+             i += 2;
+             continue;
+           }
+
+         si = i + 2;
+         t = string_extract_single_quoted (string, &si, 1);    /* XXX */
+         CHECK_STRING_OVERRUN (i, si, slen, c);
+
+         tlen = si - i - 2;    /* -2 since si is one after the close quote */
+         ttrans = ansiexpand (t, 0, tlen, &ttranslen);
+         free (t);
+
+         /* needed to correctly quote any embedded single quotes. */
+         if (dolbrace_state == DOLBRACE_QUOTE || dolbrace_state == DOLBRACE_QUOTE2)
+           {
+             t = sh_single_quote (ttrans);
+             tlen = strlen (t);
+             free (ttrans);
+           }
+         else if (extended_quote) /* dolbrace_state == DOLBRACE_PARAM */
+           {
+             /* This matches what parse.y:parse_matched_pair() does */
+             t = ttrans;
+             tlen = strlen (t);
+           }
+
+         RESIZE_MALLOCED_BUFFER (result, result_index, tlen + 1, result_size, 64);
+         strncpy (result + result_index, t, tlen);
+         result_index += tlen;
+         free (t);
+         i = si;
+         continue;
+       }
+
+#if defined (TRANSLATABLE_STRINGS)
+      if (c == '$' && string[i+1] == '"')
+       {
+         char *ttrans;
+         int ttranslen;
+
+         si = i + 2;
+         t = string_extract_double_quoted (string, &si, flags);        /* XXX */
+         CHECK_STRING_OVERRUN (i, si, slen, c);
+
+         tlen = si - i - 2;    /* -2 since si is one after the close quote */
+         ttrans = locale_expand (t, 0, tlen, line_number, &ttranslen);
+         free (t);
+
+         t = singlequote_translations ? sh_single_quote (ttrans) : sh_mkdoublequoted (ttrans, ttranslen, 0);
+         tlen = strlen (t);
+         free (ttrans);
+
+         RESIZE_MALLOCED_BUFFER (result, result_index, tlen + 1, result_size, 64);
+         strncpy (result + result_index, t, tlen);
+         result_index += tlen;
+         free (t);
+         i = si;
+         continue;
+       }
+#endif /* TRANSLATABLE_STRINGS */
+
+      if (c == '$' && string[i+1] == LBRACE)
+       {
+         nesting_level++;
+         RESIZE_MALLOCED_BUFFER (result, result_index, 3, result_size, 64);
+         result[result_index++] = c;
+         result[result_index++] = string[i+1];
+         i += 2;
+         if (dolbrace_state == DOLBRACE_QUOTE || dolbrace_state == DOLBRACE_QUOTE2 || dolbrace_state == DOLBRACE_WORD)
+           dolbrace_state = DOLBRACE_PARAM;
+         continue;
+       }
+
+      if (c == RBRACE)
+       {
+         nesting_level--;
+         if (nesting_level == 0)
+           break;
+         RESIZE_MALLOCED_BUFFER (result, result_index, 2, result_size, 64);
+         result[result_index++] = c;
+         i++;
+         continue;
+       }
+
+      /* Pass the contents of old-style command substitutions through
+        verbatim. */
+      if (c == '`')
+       {
+         si = i + 1;
+         t = string_extract (string, &si, "`", flags); /* already know (flags & SX_NOALLOC) == 0) */
+         CHECK_STRING_OVERRUN (i, si, slen, c);
+
+         tlen = si - i - 1;
+         RESIZE_MALLOCED_BUFFER (result, result_index, tlen + 3, result_size, 64);
+         result[result_index++] = c;
+         strncpy (result + result_index, t, tlen);
+         result_index += tlen;
+         result[result_index++] = string[si];
+         free (t);
+         i = si + 1;
+         continue;
+       }
+
+      /* Pass the contents of new-style command substitutions and
+        arithmetic substitutions through verbatim. */
+      if (string[i] == '$' && string[i+1] == LPAREN)
+       {
+         si = i + 2;
+         t = extract_command_subst (string, &si, flags);
+         CHECK_STRING_OVERRUN (i, si, slen, c);
+
+         tlen = si - i - 1;
+         RESIZE_MALLOCED_BUFFER (result, result_index, tlen + 4, result_size, 64);
+         result[result_index++] = c;
+         result[result_index++] = LPAREN;
+         strncpy (result + result_index, t, tlen);
+         result_index += tlen;
+         result[result_index++] = string[si];
+         free (t);
+         i = si + 1;
+         continue;
+       }
+
+#if defined (PROCESS_SUBSTITUTION)
+      /* Technically this should only work at the start of a word */
+      if ((string[i] == '<' || string[i] == '>') && string[i+1] == LPAREN)
+       {
+         si = i + 2;
+         t = extract_process_subst (string, (string[i] == '<' ? "<(" : ">)"), &si, flags);
+         CHECK_STRING_OVERRUN (i, si, slen, c);
+
+         tlen = si - i - 1;
+         RESIZE_MALLOCED_BUFFER (result, result_index, tlen + 4, result_size, 64);
+         result[result_index++] = c;
+         result[result_index++] = LPAREN;
+         strncpy (result + result_index, t, tlen);
+         result_index += tlen;
+         result[result_index++] = string[si];
+         free (t);
+         i = si + 1;
+         continue;
+       }
+#endif
+
+      if (c == '\'' && posixly_correct && shell_compatibility_level > 42 && dolbrace_state != DOLBRACE_QUOTE)
+       {
+         COPY_CHAR_I (result, result_index, string, send, i);
+         continue;
+       }
+
+      /* Pass the contents of single and double-quoted strings through verbatim. */
+      if (c == '"' || c == '\'')
+       {
+         si = i + 1;
+         if (c == '"')
+           t = string_extract_double_quoted (string, &si, flags);
+         else
+           t = string_extract_single_quoted (string, &si, 0);
+         CHECK_STRING_OVERRUN (i, si, slen, c);
+
+         tlen = si - i - 2;    /* -2 since si is one after the close quote */
+         RESIZE_MALLOCED_BUFFER (result, result_index, tlen + 3, result_size, 64);
+         result[result_index++] = c;
+         strncpy (result + result_index, t, tlen);
+         result_index += tlen;
+         result[result_index++] = string[si - 1];
+         free (t);
+         i = si;
+         continue;
+       }
+
+      /* copy this character, which was not special. */
+      COPY_CHAR_I (result, result_index, string, send, i);
+
+      /* This logic must agree with parse.y:parse_matched_pair, since they
+        share the same defines. */
+      if (dolbrace_state == DOLBRACE_PARAM && c == '%' && (i - *sindex) > 1)
+       dolbrace_state = DOLBRACE_QUOTE;
+      else if (dolbrace_state == DOLBRACE_PARAM && c == '#' && (i - *sindex) > 1)
+        dolbrace_state = DOLBRACE_QUOTE;
+      else if (dolbrace_state == DOLBRACE_PARAM && c == '/' && (i - *sindex) > 1)
+        dolbrace_state = DOLBRACE_QUOTE2;      /* XXX */
+      else if (dolbrace_state == DOLBRACE_PARAM && c == '^' && (i - *sindex) > 1)
+        dolbrace_state = DOLBRACE_QUOTE;
+      else if (dolbrace_state == DOLBRACE_PARAM && c == ',' && (i - *sindex) > 1)
+        dolbrace_state = DOLBRACE_QUOTE;
+      /* This is intended to handle all of the [:]op expansions and the substring/
+        length/pattern removal/pattern substitution expansions. */
+      else if (dolbrace_state == DOLBRACE_PARAM && strchr ("#%^,~:-=?+/", c) != 0)
+       dolbrace_state = DOLBRACE_OP;
+      else if (dolbrace_state == DOLBRACE_OP && strchr ("#%^,~:-=?+/", c) == 0)
+       dolbrace_state = DOLBRACE_WORD;
+    }
+
+  if (c == 0 && nesting_level)
+    {
+      free (result);
+      if (no_longjmp_on_fatal_error == 0)
+       {                       /* { */
+         last_command_exit_value = EXECUTION_FAILURE;
+         report_error (_("bad substitution: no closing `%s' in %s"), "}", string);
+         exp_jump_to_top_level (DISCARD);
+       }
+      else
+       {
+         *sindex = i;
+         return ((char *)NULL);
+       }
+    }
+
+  *sindex = i;
+  result[result_index] = '\0';
+
+  return (result);
+}
+
 /* Extract a parameter expansion expression within ${ and } from STRING.
    Obey the Posix.2 rules for finding the ending `}': count braces while
    skipping over enclosed quoted strings and command substitutions.
@@ -1516,10 +1817,6 @@ extract_dollar_brace_string (string, sindex, quoted, flags)
   char *result, *t;
   DECLARE_MBSTATE;
 
-  pass_character = 0;
-  nesting_level = 1;
-  slen = strlen (string + *sindex) + *sindex;
-
   /* The handling of dolbrace_state needs to agree with the code in parse.y:
      parse_matched_pair().  The different initial value is to handle the
      case where this function is called to parse the word in
@@ -1528,6 +1825,13 @@ extract_dollar_brace_string (string, sindex, quoted, flags)
   if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) && (flags & SX_POSIXEXP))
     dolbrace_state = DOLBRACE_QUOTE;
 
+  if (quoted == Q_HERE_DOCUMENT && dolbrace_state == DOLBRACE_QUOTE && (flags & SX_NOALLOC) == 0)
+    return (extract_heredoc_dolbrace_string (string, sindex, quoted, flags));
+
+  pass_character = 0;
+  nesting_level = 1;
+  slen = strlen (string + *sindex) + *sindex;
+
   i = *sindex;
   while (c = string[i])
     {
@@ -1550,6 +1854,8 @@ extract_dollar_brace_string (string, sindex, quoted, flags)
        {
          nesting_level++;
          i += 2;
+         if (dolbrace_state == DOLBRACE_QUOTE || dolbrace_state == DOLBRACE_WORD)
+           dolbrace_state = DOLBRACE_PARAM;
          continue;
        }
 
@@ -1737,12 +2043,14 @@ unquote_bang (string)
 
 #define CQ_RETURN(x) do { no_longjmp_on_fatal_error = oldjmp; return (x); } while (0)
 
-/* This function assumes s[i] == open; returns with s[ret] == close; used to
-   parse array subscripts.  FLAGS & 1 means to not attempt to skip over
-   matched pairs of quotes or backquotes, or skip word expansions; it is
-   intended to be used after expansion has been performed and during final
-   assignment parsing (see arrayfunc.c:assign_compound_array_list()) or
-   during execution by a builtin which has already undergone word expansion. */
+/* When FLAGS & 2 == 0, this function assumes STRING[I] == OPEN; when
+   FLAGS & 2 != 0, it assumes STRING[I] points to one character past OPEN;
+   returns with STRING[RET] == close; used to parse array subscripts.
+   FLAGS & 1 means not to attempt to skip over matched pairs of quotes or
+   backquotes, or skip word expansions; it is intended to be used after
+   expansion has been performed and during final assignment parsing (see
+   arrayfunc.c:assign_compound_array_list()) or during execution by a builtin
+   which has already undergone word expansion. */
 static int
 skip_matched_pair (string, start, open, close, flags)
      const char *string;
@@ -1757,7 +2065,10 @@ skip_matched_pair (string, start, open, close, flags)
   oldjmp = no_longjmp_on_fatal_error;
   no_longjmp_on_fatal_error = 1;
 
-  i = start + 1;               /* skip over leading bracket */
+  /* Move to the first character after a leading OPEN. If FLAGS&2, we assume
+    that START already points to that character. If not, we need to skip over
+    it here. */
+  i = (flags & 2) ? start : start + 1;
   count = 1;
   pass_next = backq = 0;
   ss = (char *)string;
@@ -1810,7 +2121,7 @@ skip_matched_pair (string, start, open, close, flags)
                          : skip_double_quoted (ss, slen, ++i, 0);
          /* no increment, the skip functions increment past the closing quote. */
        }
-      else if ((flags&1) == 0 && c == '$' && (string[i+1] == LPAREN || string[i+1] == LBRACE))
+      else if ((flags & 1) == 0 && c == '$' && (string[i+1] == LPAREN || string[i+1] == LBRACE))
        {
          si = i + 2;
          if (string[si] == '\0')
@@ -1838,9 +2149,11 @@ skip_matched_pair (string, start, open, close, flags)
 }
 
 #if defined (ARRAY_VARS)
-/* Flags has 1 as a reserved value, since skip_matched_pair uses it for
+/* FLAGS has 1 as a reserved value, since skip_matched_pair uses it for
    skipping over quoted strings and taking the first instance of the
-   closing character. */
+   closing character. FLAGS & 2 means that STRING[START] points one
+   character past the open bracket; FLAGS & 2 == 0 means that STRING[START]
+   points to the open bracket. skip_matched_pair knows how to deal with this. */
 int
 skipsubscript (string, start, flags)
      const char *string;
@@ -1964,7 +2277,7 @@ skip_to_delim (string, start, delims, flags)
            CQ_RETURN(si);
 
          if (string[i+1] == LPAREN)
-           temp = extract_delimited_string (string, &si, "$(", "(", ")", SX_NOALLOC|SX_COMMAND); /* ) */
+           temp = extract_delimited_string (string, &si, "$(", "(", ")", SX_NOALLOC|SX_COMMAND|completeflag); /* ) */
          else
            temp = extract_dollar_brace_string (string, &si, 0, SX_NOALLOC);
          CHECK_STRING_OVERRUN (i, si, slen, c);
@@ -2176,6 +2489,21 @@ char_is_quoted (string, eindex)
   oldjmp = no_longjmp_on_fatal_error;
   no_longjmp_on_fatal_error = 1;
   i = pass_next = 0;
+
+  /* If we have an open quoted string from a previous line, see if it's
+     closed before string[eindex], so we don't interpret that close quote
+     as starting a new quoted string. */
+  if (current_command_line_count > 0 && dstack.delimiter_depth > 0)
+    {
+      c = dstack.delimiters[dstack.delimiter_depth - 1];
+      if (c == '\'')
+       i = skip_single_quoted (string, slen, 0, 0);
+      else if (c == '"')
+       i = skip_double_quoted (string, slen, 0, SX_COMPLETE);
+      if (i > eindex)
+       CQ_RETURN (1);
+    }
+
   while (i <= eindex)
     {
       c = string[i];
@@ -2275,7 +2603,7 @@ WORD_LIST *
 split_at_delims (string, slen, delims, sentinel, flags, nwp, cwp)
      char *string;
      int slen;
-     char *delims;
+     const char *delims;
      int sentinel, flags;
      int *nwp, *cwp;
 {
@@ -2292,7 +2620,7 @@ split_at_delims (string, slen, delims, sentinel, flags, nwp, cwp)
       return ((WORD_LIST *)NULL);
     }
 
-  d = (delims == 0) ? ifs_value : delims;
+  d = (delims == 0) ? ifs_value : (char *)delims;
   ifs_split = delims == 0;
 
   /* Make d2 the non-whitespace characters in delims */
@@ -3281,7 +3609,8 @@ do_assignment_internal (word, expand)
          report_error (_("%s: cannot assign list to array member"), name);
          ASSIGN_RETURN (0);
        }
-      entry = assign_array_element (name, value, aflags);
+      aflags |= ASS_ALLOWALLSUB;       /* allow a[@]=value for existing associative arrays */
+      entry = assign_array_element (name, value, aflags, (array_eltstate_t *)0);
       if (entry == 0)
        ASSIGN_RETURN (0);
     }
@@ -3576,6 +3905,104 @@ expand_assignment_string_to_string (string, quoted)
   return (expand_string_to_string_internal (string, quoted, expand_string_assignment));
 }
 
+/* Kind of like a combination of dequote_string and quote_string_for_globbing;
+   try to remove CTLESC quoting characters and convert CTLESC escaping a `&'
+   or a backslash into a backslash. The output of this function must eventually
+   be processed by strcreplace(). */
+static char *
+quote_string_for_repl (string, flags)
+     char *string;
+     int flags;
+{
+  size_t slen;
+  char *result, *t;
+  const char *s, *send;
+  DECLARE_MBSTATE;
+
+  slen = strlen (string);
+  send = string + slen;
+
+  result = (char *)xmalloc (slen * 2 + 1);
+
+  if (string[0] == CTLESC && string[1] == 0)
+    {
+      result[0] = CTLESC;
+      result[1] = '\0';
+      return (result);
+    }
+
+  /* This is awkward. We want to translate CTLESC-\ to \\ if we will
+     eventually send this string through strcreplace(), which we will do
+     only if shouldexp_replacement() determines that there is something
+     to replace. We can either make sure to escape backslashes here and
+     have shouldexp_replacement() signal that we should send the string to
+     strcreplace() if it sees an escaped backslash, or we can scan the
+     string before copying it and turn CTLESC-\ into \\ only if we encounter
+     a CTLESC-& or a &. This does the former and changes shouldexp_replacement().
+     If we double the backslashes  here, we'll get doubled backslashes in any
+     result that doesn't get passed to strcreplace(). */
+
+  for (s = string, t = result; *s; )
+    {
+      /* This function's result has to be processed by strcreplace() */
+      if (*s == CTLESC && (s[1] == '&' || s[1] == '\\'))
+        {
+          *t++ = '\\';
+          s++;
+          *t++ = *s++;
+          continue;
+        }
+      /* Dequote it */
+      if (*s == CTLESC)
+        {
+         s++;
+         if (*s == '\0')
+           break;
+        }
+      COPY_CHAR_P (t, s, send);
+    }
+
+  *t = '\0';
+  return (result);
+}
+       
+/* This does not perform word splitting on the WORD_LIST it returns and
+   it treats $* as if it were quoted. It dequotes the WORD_LIST, adds
+   backslash escapes before CTLESC-quoted backslash and `& if 
+   patsub_replacement is enabled. */
+static char *
+expand_string_for_patsub (string, quoted)
+     char *string;
+     int quoted;
+{
+  WORD_LIST *value;
+  char *ret, *t;
+
+  if (string == 0 || *string == '\0')
+    return (char *)NULL;
+
+  value = expand_string_for_pat (string, quoted, (int *)0, (int *)0);
+
+  if (value && value->word)
+    {
+      remove_quoted_nulls (value->word->word); /* XXX */
+      value->word->flags &= ~W_HASQUOTEDNULL;
+    }
+
+  if (value)
+    {
+      t = (value->next) ? string_list (value) : value->word->word;
+      ret = quote_string_for_repl (t, quoted);
+      if (t != value->word->word)
+       free (t);
+      dispose_words (value);
+    }
+  else
+    ret = (char *)NULL;
+
+  return (ret);
+}
+
 char *
 expand_arith_string (string, quoted)
      char *string;
@@ -3596,7 +4023,7 @@ expand_arith_string (string, quoted)
       if (EXP_CHAR (string[i]))
        break;
       else if (string[i] == '\'' || string[i] == '\\' || string[i] == '"')
-       saw_quote = 1;
+       saw_quote = string[i];
       ADVANCE_CHAR (string, slen, i);
     }
 
@@ -3668,7 +4095,9 @@ remove_backslashes (string)
    to the != or == operator, and should be treated as a pattern.  In
    this case, we quote the string specially for the globbing code.  If
    SPECIAL is 2, this is an rhs argument for the =~ operator, and should
-   be quoted appropriately for regcomp/regexec.  The caller is responsible
+   be quoted appropriately for regcomp/regexec.  If SPECIAL is 3, this is
+   an array subscript and should be quoted after expansion so it's only
+   expanded once (Q_ARITH). The caller is responsible
    for removing the backslashes if the unquoted word is needed later. In
    any case, since we don't perform word splitting, we need to do quoted
    null character removal. */
@@ -3686,7 +4115,8 @@ cond_expand_word (w, special)
 
   expand_no_split_dollar_star = 1;
   w->flags |= W_NOSPLIT2;
-  l = call_expand_word_internal (w, 0, 0, (int *)0, (int *)0);
+  qflags = (special == 3) ? Q_ARITH : 0;
+  l = call_expand_word_internal (w, qflags, 0, (int *)0, (int *)0);
   expand_no_split_dollar_star = 0;
   if (l)
     {
@@ -3697,6 +4127,13 @@ cond_expand_word (w, special)
          dequote_list (l);
          r = string_list (l);
        }
+      else if (special == 3)           /* arithmetic expression, Q_ARITH */
+       {
+         if (l->word)
+           word_list_remove_quoted_nulls (l);  /* for now */
+         dequote_list (l);
+         r = string_list (l);
+       }
       else
        {
          /* Need to figure out whether or not we should call dequote_escapes
@@ -3712,12 +4149,156 @@ cond_expand_word (w, special)
        }
       dispose_words (l);
     }
-  else
-    r = (char *)NULL;
+  else
+    r = (char *)NULL;
+
+  return r;
+}
+#endif
+
+/* Expand $'...' and $"..." in a string for code paths that don't do it. The
+   FLAGS argument is 1 if this function should treat CTLESC as a quote
+   character (e.g., for here-documents) or not (e.g., for shell_expand_line). */
+char *
+expand_string_dollar_quote (string, flags)
+     char *string;
+     int flags;
+{
+  size_t slen, retind, retsize;
+  int sindex, c, translen, peekc, news;
+  char *ret, *trans, *send, *t;
+  DECLARE_MBSTATE;
+
+  slen = strlen (string);
+  send = string + slen;
+  sindex = 0;
+
+  retsize = slen + 1;
+  ret = xmalloc (retsize);
+  retind = 0;
+
+  while (c = string[sindex])
+    {
+      switch (c)
+       {
+       default:
+         RESIZE_MALLOCED_BUFFER (ret, retind, locale_mb_cur_max + 1, retsize, 64);
+         COPY_CHAR_I (ret, retind, string, send, sindex);
+         break;
+
+       case '\\':
+         RESIZE_MALLOCED_BUFFER (ret, retind, locale_mb_cur_max + 2, retsize, 64);
+         ret[retind++] = string[sindex++];
+
+         if (string[sindex])
+           COPY_CHAR_I (ret, retind, string, send, sindex);
+         break;
+
+       case '\'':
+       case '"':
+         if (c == '\'')
+           news = skip_single_quoted (string, slen, ++sindex, SX_COMPLETE);
+         else
+           news = skip_double_quoted (string, slen, ++sindex, SX_COMPLETE);
+         translen = news - sindex - 1;
+         RESIZE_MALLOCED_BUFFER (ret, retind, translen + 3, retsize, 64);
+         ret[retind++] = c;
+         if (translen > 0)
+           {
+             strncpy (ret + retind, string + sindex, translen);
+             retind += translen;
+           }
+         if (news > sindex && string[news - 1] == c)
+           ret[retind++] = c;
+         sindex = news;
+         break;
+
+       case CTLESC:
+         RESIZE_MALLOCED_BUFFER (ret, retind, locale_mb_cur_max + 2, retsize, 64);
+         if (flags)
+           ret[retind++] = string[sindex++];
+         if (string[sindex])
+           COPY_CHAR_I (ret, retind, string, send, sindex);
+         break;
+
+       case '$':
+         peekc = string[++sindex];
+#if defined (TRANSLATABLE_STRINGS)
+         if (peekc != '\'' && peekc != '"')
+#else
+         if (peekc != '\'')
+#endif
+           {
+             RESIZE_MALLOCED_BUFFER (ret, retind, 2, retsize, 16);
+             ret[retind++] = c;
+             break;
+           }
+         if (string[sindex + 1] == '\0')       /* don't bother */      
+           {
+             RESIZE_MALLOCED_BUFFER (ret, retind, 3, retsize, 16);
+             ret[retind++] = c;
+             ret[retind++] = peekc;
+             sindex++;
+             break;
+           }
+         if (peekc == '\'')
+           {
+             /* SX_COMPLETE is the  equivalent of ALLOWESC here */
+             /* We overload SX_COMPLETE below */
+             news = skip_single_quoted (string, slen, ++sindex, SX_COMPLETE);
+             /* Check for unclosed string and don't bother if so */
+             if (news > sindex && string[news] == '\0' && string[news-1] != peekc)
+               {
+                 RESIZE_MALLOCED_BUFFER (ret, retind, 3, retsize, 16);
+                 ret[retind++] = c;
+                 ret[retind++] = peekc;
+                 continue;
+               }
+             t = substring (string, sindex, news - 1);
+             trans = ansiexpand (t, 0, news-sindex-1, &translen);
+             free (t);
+             t = sh_single_quote (trans);
+             sindex = news;
+           }
+#if defined (TRANSLATABLE_STRINGS)
+         else
+           {
+             news = ++sindex;
+             t = string_extract_double_quoted (string, &news, SX_COMPLETE);
+             /* Check for unclosed string and don't bother if so */
+             if (news > sindex && string[news] == '\0' && string[news-1] != peekc)
+               {
+                 RESIZE_MALLOCED_BUFFER (ret, retind, 3, retsize, 16);
+                 ret[retind++] = c;
+                 ret[retind++] = peekc;
+                 free (t);
+                 continue;
+               }
+             trans = locale_expand (t, 0, news-sindex, 0, &translen);
+             free (t);
+             if (singlequote_translations &&
+                   ((news-sindex-1) != translen || STREQN (t, trans, translen) == 0))
+               t = sh_single_quote (trans);
+             else
+               t = sh_mkdoublequoted (trans, translen, 0);
+             sindex = news;
+           }
+#endif /* TRANSLATABLE_STRINGS */
+         free (trans);
+         trans = t;
+         translen = strlen (trans);
+
+         RESIZE_MALLOCED_BUFFER (ret, retind, translen + 1, retsize, 128);
+         strcpy (ret + retind, trans);
+         retind += translen;
+         FREE (trans);
+         break;
+       }
+    }
 
-  return r;
+  ret[retind] = 0;
+  return ret;
 }
-#endif
 
 /* Call expand_word_internal to expand W and handle error returns.
    A convenience function for functions that don't want to handle
@@ -3844,7 +4425,6 @@ expand_string_assignment (string, quoted)
   return (value);
 }
 
-
 /* Expand one of the PS? prompt strings. This is a sort of combination of
    expand_string_unsplit and expand_string_internal, but returns the
    passed string when an error occurs.  Might want to trap other calls
@@ -3953,9 +4533,10 @@ expand_string_for_rhs (string, quoted, op, pflags, dollar_at_p, expanded_p)
 #else
     td.flags |= W_ASSIGNRHS|W_NOASSNTILDE;             /* expand b in ${a=b} like assignment */
 #endif
-  td.word = string;
+  td.word = savestring (string);
   tresult = call_expand_word_internal (&td, quoted, 1, dollar_at_p, expanded_p);
   expand_no_split_dollar_star = old_nosplit;
+  free (td.word);
 
   return (tresult);
 }
@@ -3977,9 +4558,10 @@ expand_string_for_pat (string, quoted, dollar_at_p, expanded_p)
   oexp = expand_no_split_dollar_star;
   expand_no_split_dollar_star = 1;
   td.flags = W_NOSPLIT2;               /* no splitting, remove "" and '' */
-  td.word = string;
+  td.word = savestring (string);
   tresult = call_expand_word_internal (&td, quoted, 1, dollar_at_p, expanded_p);
   expand_no_split_dollar_star = oexp;
+  free (td.word);
 
   return (tresult);
 }
@@ -4289,10 +4871,8 @@ dequote_string (string)
   char *result, *send;
   DECLARE_MBSTATE;
 
-#if defined (DEBUG)
   if (string[0] == CTLESC && string[1] == 0)
-    internal_inform ("dequote_string: string with bare CTLESC");
-#endif
+    internal_debug ("dequote_string: string with bare CTLESC");
 
   slen = STRLEN (string);
 
@@ -5268,9 +5848,9 @@ array_remove_pattern (var, pattern, patspec, starsub, quoted)
 #endif /* ARRAY_VARS */
 
 static char *
-parameter_brace_remove_pattern (varname, value, ind, patstr, rtype, quoted, flags)
+parameter_brace_remove_pattern (varname, value, estatep, patstr, rtype, quoted, flags)
      char *varname, *value;
-     int ind;
+     array_eltstate_t *estatep;
      char *patstr;
      int rtype, quoted, flags;
 {
@@ -5284,7 +5864,7 @@ parameter_brace_remove_pattern (varname, value, ind, patstr, rtype, quoted, flag
   oname = this_command_name;
   this_command_name = varname;
 
-  vtype = get_var_and_type (varname, value, ind, quoted, flags, &v, &val);
+  vtype = get_var_and_type (varname, value, estatep, quoted, flags, &v, &val);
   if (vtype == -1)
     {
       this_command_name = oname;
@@ -5497,7 +6077,11 @@ unlink_all_fifos ()
   for (i = 0; i < nfifo; i++)
     {
       fifo_list[i].proc = (pid_t)-1;
+#if defined (O_NONBLOCK)
       fd = open (fifo_list[i].file, O_RDWR|O_NONBLOCK);
+#else
+      fd = -1;
+#endif
       unlink_fifo (i);
       if (fd >= 0)
        close (fd);
@@ -6116,10 +6700,8 @@ process_substitute (string, open_for_read_in_child)
 
   remove_quoted_escapes (string);
 
-#if 0 /* TAG: bash-5.2 */
   startup_state = 2;   /* see if we can avoid a fork */
   parse_and_execute_level = 0;
-#endif
 
   /* Give process substitution a place to jump back to on failure,
      so we don't go back up to main (). */
@@ -6135,7 +6717,7 @@ process_substitute (string, open_for_read_in_child)
 
   if (result == ERREXIT)
     rc = last_command_exit_value;
-  else if (result == EXITPROG)
+  else if (result == EXITPROG || result == EXITBLTIN)
     rc = last_command_exit_value;
   else if (result)
     rc = EXECUTION_FAILURE;
@@ -6166,14 +6748,35 @@ process_substitute (string, open_for_read_in_child)
 /*                                */
 /***********************************/
 
+#define COMSUB_PIPEBUF 4096
+
+static char *
+optimize_cat_file (r, quoted, flags, flagp)
+     REDIRECT *r;
+     int quoted, flags, *flagp;
+{
+  char *ret;
+  int fd;
+
+  fd = open_redir_file (r, (char **)0);
+  if (fd < 0)
+    return &expand_param_error;
+
+  ret = read_comsub (fd, quoted, flags, flagp);
+  close (fd);
+
+  return ret;
+}
+
 static char *
 read_comsub (fd, quoted, flags, rflag)
      int fd, quoted, flags;
      int *rflag;
 {
-  char *istring, buf[512], *bufp;
-  int istring_index, c, tflag, skip_ctlesc, skip_ctlnul;
+  char *istring, buf[COMSUB_PIPEBUF], *bufp;
+  int c, tflag, skip_ctlesc, skip_ctlnul;
   int mb_cur_max;
+  size_t istring_index;
   size_t istring_size;
   ssize_t bufn;
   int nullbyte;
@@ -6316,15 +6919,38 @@ command_substitute (string, quoted, flags)
 
   /* Don't fork () if there is no need to.  In the case of no command to
      run, just return NULL. */
-#if 1
   for (s = string; s && *s && (shellblank (*s) || *s == '\n'); s++)
     ;
   if (s == 0 || *s == 0)
     return ((WORD_DESC *)NULL);
-#else
-  if (!string || !*string || (string[0] == '\n' && !string[1]))
-    return ((WORD_DESC *)NULL);
-#endif
+
+  if (*s == '<' && (s[1] != '<' && s[1] != '>' && s[1] != '&'))
+    {
+      COMMAND *cmd;
+
+      cmd = parse_string_to_command (string, 0);       /* XXX - flags */
+      if (cmd && can_optimize_cat_file (cmd))
+       {
+         tflag = 0;
+         istring = optimize_cat_file (cmd->value.Simple->redirects, quoted, flags, &tflag);
+         if (istring == &expand_param_error)
+           {
+             last_command_exit_value = EXECUTION_FAILURE;
+             istring = 0;
+           }
+         else
+           last_command_exit_value = EXECUTION_SUCCESS;        /* compat */
+         last_command_subst_pid = dollar_dollar_pid;
+
+         dispose_command (cmd);          
+         ret = alloc_word_desc ();
+         ret->word = istring;
+         ret->flags = tflag;
+
+         return ret;
+       }
+      dispose_command (cmd);
+    }
 
   if (wordexp_only && read_but_dont_execute)
     {
@@ -6488,6 +7114,11 @@ command_substitute (string, quoted, flags)
 
       remove_quoted_escapes (string);
 
+      /* We want to expand aliases on this pass if we are not in posix mode
+        for backwards compatibility. */
+      if (expand_aliases)
+        expand_aliases = posixly_correct == 0;
+
       startup_state = 2;       /* see if we can avoid a fork */
       parse_and_execute_level = 0;
 
@@ -6505,7 +7136,7 @@ command_substitute (string, quoted, flags)
 
       if (result == ERREXIT)
        rc = last_command_exit_value;
-      else if (result == EXITPROG)
+      else if (result == EXITPROG || result == EXITBLTIN)
        rc = last_command_exit_value;
       else if (result)
        rc = EXECUTION_FAILURE;
@@ -6627,7 +7258,7 @@ array_length_reference (s)
   if (assoc_p (var))
     {
       t[len - 1] = '\0';
-      akey = expand_assignment_string_to_string (t, 0);        /* [ */
+      akey = expand_subscript_string (t, 0);   /* [ */
       t[len - 1] = RBRACK;
       if (akey == 0 || *akey == 0)
        {
@@ -6746,24 +7377,31 @@ chk_atstar (name, quoted, pflags, quoted_dollar_atp, contains_dollar_at)
    the shell, e.g., "@", "$", "*", etc.  QUOTED, if non-zero, means that
    NAME was found inside of a double-quoted expression. */
 static WORD_DESC *
-parameter_brace_expand_word (name, var_is_special, quoted, pflags, indp)
+parameter_brace_expand_word (name, var_is_special, quoted, pflags, estatep)
      char *name;
      int var_is_special, quoted, pflags;
-     arrayind_t *indp;
+     array_eltstate_t *estatep;
 {
   WORD_DESC *ret;
   char *temp, *tt;
   intmax_t arg_index;
   SHELL_VAR *var;
-  int atype, rflags;
-  arrayind_t ind;
+  int rflags;
+  array_eltstate_t es;
 
   ret = 0;
   temp = 0;
   rflags = 0;
 
-  if (indp)
-    *indp = INTMAX_MIN;
+#if defined (ARRAY_VARS)
+  if (estatep)
+    es = *estatep;     /* structure copy */
+  else
+    {
+      init_eltstate (&es);
+      es.ind = INTMAX_MIN;
+    }
+#endif
 
   /* Handle multiple digit arguments, as in ${11}. */  
   if (legal_number (name, &arg_index))
@@ -6786,6 +7424,13 @@ parameter_brace_expand_word (name, var_is_special, quoted, pflags, indp)
 
       ret = param_expand (tt, &sindex, quoted, (int *)NULL, (int *)NULL,
                          (int *)NULL, (int *)NULL, pflags);
+
+      /* Make sure we note that we saw a quoted null string and pass the flag back
+        to the caller in addition to the value. */
+      if ((quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) && STR_DOLLAR_AT_STAR (name) &&
+         ret && ret->word && QUOTED_NULL (ret->word))
+       ret->flags |= W_HASQUOTEDNULL;
+
       free (tt);
     }
 #if defined (ARRAY_VARS)
@@ -6800,12 +7445,12 @@ expand_arrayref:
            {
              /* Only treat as double quoted if array variable */
              if (var && (array_p (var) || assoc_p (var)))
-               temp = array_value (name, quoted|Q_DOUBLE_QUOTES, AV_ASSIGNRHS, &atype, &ind);
+               temp = array_value (name, quoted|Q_DOUBLE_QUOTES, AV_ASSIGNRHS, &es);
              else              
-               temp = array_value (name, quoted, 0, &atype, &ind);
+               temp = array_value (name, quoted, 0, &es);
            }
          else
-           temp = array_value (name, quoted, 0, &atype, &ind);
+           temp = array_value (name, quoted, 0, &es);
        }
       /* Posix interp 888 */
       else if (pflags & PF_NOSPLIT2)
@@ -6816,31 +7461,38 @@ expand_arrayref:
 #else
          if (tt[0] == '@' && tt[1] == RBRACK && var && quoted == 0 && ifs_is_set && ifs_is_null == 0 && ifs_firstc != ' ')
 #endif
-           temp = array_value (name, Q_DOUBLE_QUOTES, AV_ASSIGNRHS, &atype, &ind);
+           temp = array_value (name, Q_DOUBLE_QUOTES, AV_ASSIGNRHS, &es);
          else if (tt[0] == '@' && tt[1] == RBRACK)
-           temp = array_value (name, quoted, 0, &atype, &ind);
+           temp = array_value (name, quoted, 0, &es);
          else if (tt[0] == '*' && tt[1] == RBRACK && expand_no_split_dollar_star && ifs_is_null)
-           temp = array_value (name, Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT, 0, &atype, &ind);
+           temp = array_value (name, Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT, 0, &es);
          else if (tt[0] == '*' && tt[1] == RBRACK)
-           temp = array_value (name, quoted, 0, &atype, &ind);
+           temp = array_value (name, quoted, 0, &es);
          else
-           temp = array_value (name, quoted, 0, &atype, &ind);
+           temp = array_value (name, quoted, 0, &es);
        }                 
       else if (tt[0] == '*' && tt[1] == RBRACK && expand_no_split_dollar_star && ifs_is_null)
-       temp = array_value (name, Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT, 0, &atype, &ind);
+       temp = array_value (name, Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT, 0, &es);
       else
-       temp = array_value (name, quoted, 0, &atype, &ind);
-      if (atype == 0 && temp)
+       temp = array_value (name, quoted, 0, &es);
+      if (es.subtype == 0 && temp)
        {
          temp = (*temp && (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)))
                    ? quote_string (temp)
                    : quote_escapes (temp);
          rflags |= W_ARRAYIND;
-         if (indp)
-           *indp = ind;
-       }                 
-      else if (atype == 1 && temp && QUOTED_NULL (temp) && (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)))
+         if (estatep)
+           *estatep = es;      /* structure copy */
+       }
+      /* Note that array[*] and array[@] expanded to a quoted null string by
+        returning the W_HASQUOTEDNULL flag to the caller in addition to TEMP. */
+      else if (es.subtype == 1 && temp && QUOTED_NULL (temp) && (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)))
+       rflags |= W_HASQUOTEDNULL;
+      else if (es.subtype == 2 && temp && QUOTED_NULL (temp) && (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)))
        rflags |= W_HASQUOTEDNULL;
+
+      if (estatep == 0)
+       flush_eltstate (&es);
     }
 #endif
   else if (var = find_variable (name))
@@ -7047,9 +7699,10 @@ parameter_brace_expand_rhs (name, value, op, quoted, pflags, qdollaratp, hasdoll
 {
   WORD_DESC *w;
   WORD_LIST *l, *tl;
-  char *t, *t1, *temp, *vname;
-  int l_hasdollat, sindex;
+  char *t, *t1, *temp, *vname, *newval;
+  int l_hasdollat, sindex, arrayref;
   SHELL_VAR *v;
+  array_eltstate_t es;
 
 /*itrace("parameter_brace_expand_rhs: %s:%s pflags = %d", name, value, pflags);*/
   /* If the entire expression is between double quotes, we want to treat
@@ -7194,9 +7847,15 @@ parameter_brace_expand_rhs (name, value, op, quoted, pflags, qdollaratp, hasdoll
        }
     }
     
+  arrayref = 0;
 #if defined (ARRAY_VARS)
   if (valid_array_reference (vname, 0))
-    v = assign_array_element (vname, t1, 0);
+    {
+      init_eltstate (&es);
+      v = assign_array_element (vname, t1, ASS_ALLOWALLSUB, &es);
+      arrayref = 1;
+      newval = es.value;
+    }
   else
 #endif /* ARRAY_VARS */
   v = bind_variable (vname, t1, 0);
@@ -7219,6 +7878,23 @@ parameter_brace_expand_rhs (name, value, op, quoted, pflags, qdollaratp, hasdoll
 
   stupidly_hack_special_variables (vname);
 
+  /* "In all cases, the final value of parameter shall be substituted." */
+  if (shell_compatibility_level > 51)
+    {
+      FREE (t1);
+#if defined (ARRAY_VARS)
+      if (arrayref)
+       {
+         t1 = newval;
+         flush_eltstate (&es);
+       }
+      else
+        t1 = get_variable_value (v);
+#else
+      t1 = value_cell (v);
+#endif
+    }
+
   if (vname != name)
     free (vname);
 
@@ -7228,12 +7904,11 @@ parameter_brace_expand_rhs (name, value, op, quoted, pflags, qdollaratp, hasdoll
      splitting, we want to quote the value we return appropriately, like
      the other expansions this function handles. */
   w->word = (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) ? quote_string (t1) : quote_escapes (t1);
-  /* If we have something that's non-null, that's not a quoted null string,
+  /* If we have something that's non-null, but not a quoted null string,
      and we're not going to be performing word splitting (we know we're not
      because the operator is `='), we can forget we saw a quoted null. */
   if (w->word && w->word[0] && QUOTED_NULL (w->word) == 0)
     w->flags &= ~W_SAWQUOTEDNULL;
-  free (t1);
 
   /* If we convert a null string into a quoted null, make sure the caller
      knows it. */
@@ -7427,7 +8102,7 @@ verify_substring_values (v, value, substr, vtype, e1p, e2p)
 {
   char *t, *temp1, *temp2;
   arrayind_t len;
-  int expok;
+  int expok, eflag;
 #if defined (ARRAY_VARS)
  ARRAY *a;
  HASH_TABLE *h;
@@ -7440,8 +8115,10 @@ verify_substring_values (v, value, substr, vtype, e1p, e2p)
   else
     t = (char *)0;
 
-  temp1 = expand_arith_string (substr, Q_DOUBLE_QUOTES);
-  *e1p = evalexp (temp1, 0, &expok);           /* XXX - EXP_EXPANDED? */
+  temp1 = expand_arith_string (substr, Q_DOUBLE_QUOTES|Q_ARITH);
+  eflag = (shell_compatibility_level > 51) ? 0 : EXP_EXPANDED;
+
+  *e1p = evalexp (temp1, eflag, &expok);
   free (temp1);
   if (expok == 0)
     return (0);
@@ -7496,10 +8173,10 @@ verify_substring_values (v, value, substr, vtype, e1p, e2p)
     {
       t++;
       temp2 = savestring (t);
-      temp1 = expand_arith_string (temp2, Q_DOUBLE_QUOTES);
+      temp1 = expand_arith_string (temp2, Q_DOUBLE_QUOTES|Q_ARITH);
       free (temp2);
       t[-1] = ':';
-      *e2p = evalexp (temp1, 0, &expok);       /* XXX - EXP_EXPANDED? */
+      *e2p = evalexp (temp1, eflag, &expok);
       free (temp1);
       if (expok == 0)
        return (0);
@@ -7508,7 +8185,7 @@ verify_substring_values (v, value, substr, vtype, e1p, e2p)
         from end of positional parameters? */
 #if 1
       if ((vtype == VT_ARRAYVAR || vtype == VT_POSPARMS) && *e2p < 0)
-#else /* TAG: bash-5.2 */
+#else /* XXX - postponed; this isn't really a valuable feature */
       if (vtype == VT_ARRAYVAR && *e2p < 0)
 #endif
        {
@@ -7548,15 +8225,15 @@ verify_substring_values (v, value, substr, vtype, e1p, e2p)
    by VARNAME (value of a variable or a reference to an array element).
    QUOTED is the standard description of quoting state, using Q_* defines.
    FLAGS is currently a set of flags to pass to array_value.  If IND is
-   non-null and not INTMAX_MIN, and FLAGS includes AV_USEIND, IND is
+   not INTMAX_MIN, and FLAGS includes AV_USEIND, IND is
    passed to array_value so the array index is not computed again.
    If this returns VT_VARIABLE, the caller assumes that CTLESC and CTLNUL
    characters in the value are quoted with CTLESC and takes appropriate
    steps.  For convenience, *VALP is set to the dequoted VALUE. */
 static int
-get_var_and_type (varname, value, ind, quoted, flags, varp, valp)
+get_var_and_type (varname, value, estatep, quoted, flags, varp, valp)
      char *varname, *value;
-     arrayind_t ind;
+     array_eltstate_t *estatep;
      int quoted, flags;
      SHELL_VAR **varp;
      char **valp;
@@ -7564,7 +8241,6 @@ get_var_and_type (varname, value, ind, quoted, flags, varp, valp)
   int vtype, want_indir;
   char *temp, *vname;
   SHELL_VAR *v;
-  arrayind_t lind;
 
   want_indir = *varname == '!' &&
     (legal_variable_starter ((unsigned char)varname[1]) || DIGIT (varname[1])
@@ -7594,8 +8270,11 @@ get_var_and_type (varname, value, ind, quoted, flags, varp, valp)
     {
       v = array_variable_part (vname, 0, &temp, (int *)0);
       /* If we want to signal array_value to use an already-computed index,
-        set LIND to that index */
-      lind = (ind != INTMAX_MIN && (flags & AV_USEIND)) ? ind : 0;
+        the caller will set ESTATEP->IND to that index and pass AV_USEIND in
+        FLAGS. */
+      if (estatep && (flags & AV_USEIND) == 0)
+       estatep->ind = INTMAX_MIN;
+
       if (v && invisible_p (v))
        {
          vtype = VT_ARRAYMEMBER;
@@ -7615,7 +8294,7 @@ get_var_and_type (varname, value, ind, quoted, flags, varp, valp)
          else
            {
              vtype = VT_ARRAYMEMBER;
-             *valp = array_value (vname, Q_DOUBLE_QUOTES, flags, (int *)NULL, &lind);
+             *valp = array_value (vname, Q_DOUBLE_QUOTES, flags, estatep);
            }
          *varp = v;
        }
@@ -7632,7 +8311,7 @@ get_var_and_type (varname, value, ind, quoted, flags, varp, valp)
        {
          vtype = VT_ARRAYMEMBER;
          *varp = v;
-         *valp = array_value (vname, Q_DOUBLE_QUOTES, flags, (int *)NULL, &lind);
+         *valp = array_value (vname, Q_DOUBLE_QUOTES, flags, estatep);
        }
     }
   else if ((v = find_variable (vname)) && (invisible_p (v) == 0) && (assoc_p (v) || array_p (v)))
@@ -7782,6 +8461,7 @@ string_transform (xc, v, s)
        ret = string_var_assignment (v, s);
        break;
       case 'K':
+      case 'k':
        ret = sh_quote_reusable (s, 0);
        break;
       /* Transformations that modify the variable's value */
@@ -7875,7 +8555,7 @@ array_transform (xc, var, starsub, quoted)
 {
   ARRAY *a;
   HASH_TABLE *h;
-  int itype;
+  int itype, qflags;
   char *ret;
   WORD_LIST *list;
   SHELL_VAR *v;
@@ -7902,6 +8582,23 @@ array_transform (xc, var, starsub, quoted)
   a = (v && array_p (v)) ? array_cell (v) : 0;
   h = (v && assoc_p (v)) ? assoc_cell (v) : 0;
 
+  /* XXX - for now */
+  if (xc == 'k')
+    {
+      if (v == 0)
+       return ((char *)NULL);
+      list = array_p (v) ? array_to_kvpair_list (a) : assoc_to_kvpair_list (h);
+      qflags = quoted;
+      /* If we are expanding in a context where word splitting will not be
+        performed, treat as quoted.  This changes how $* will be expanded. */
+      if (itype == '*' && expand_no_split_dollar_star && ifs_is_null)
+       qflags |= Q_DOUBLE_QUOTES;              /* Posix interp 888 */
+
+      ret = string_list_pos_params (itype, list, qflags, 0);
+      dispose_words (list);
+      return ret;
+    }
+
   list = a ? array_to_word_list (a) : (h ? assoc_to_word_list (h) : 0);
   if (list == 0)
    return ((char *)NULL);
@@ -7925,11 +8622,12 @@ valid_parameter_transform (xform)
     case 'a':          /* expand to a string with just attributes */
     case 'A':          /* expand as an assignment statement with attributes */
     case 'K':          /* expand assoc array to list of key/value pairs */
+    case 'k':          /* XXX - for now */
     case 'E':          /* expand like $'...' */
     case 'P':          /* expand like prompt string */
     case 'Q':          /* quote reusably */
     case 'U':          /* transform to uppercase */
-    case 'u':          /* tranform by capitalizing */
+    case 'u':          /* transform by capitalizing */
     case 'L':          /* transform to lowercase */
       return 1;
     default:
@@ -7938,9 +8636,9 @@ valid_parameter_transform (xform)
 }
       
 static char *
-parameter_brace_transform (varname, value, ind, xform, rtype, quoted, pflags, flags)
+parameter_brace_transform (varname, value, estatep, xform, rtype, quoted, pflags, flags)
      char *varname, *value;
-     int ind;
+     array_eltstate_t *estatep;
      char *xform;
      int rtype, quoted, pflags, flags;
 {
@@ -7955,21 +8653,19 @@ parameter_brace_transform (varname, value, ind, xform, rtype, quoted, pflags, fl
   oname = this_command_name;
   this_command_name = varname;
 
-  vtype = get_var_and_type (varname, value, ind, quoted, flags, &v, &val);
+  vtype = get_var_and_type (varname, value, estatep, quoted, flags, &v, &val);
   if (vtype == -1)
     {
       this_command_name = oname;
       return ((char *)NULL);
     }
 
-  if (valid_parameter_transform (xform) == 0)
+  if (xform[0] == 0 || valid_parameter_transform (xform) == 0)
     {
       this_command_name = oname;
-#if 0 /* TAG: bash-5.2 Martin Schulte <gnu@schrader-schulte.de> 10/2020 */
+      if (vtype == VT_VARIABLE)
+       FREE (val);
       return (interactive_shell ? &expand_param_error : &expand_param_fatal);
-#else
-      return &expand_param_error;
-#endif
     }
 
   starsub = vtype & VT_STARSUB;
@@ -8073,9 +8769,9 @@ mb_substring (string, s, e)
    VARNAME.  If VARNAME is an array variable, use the array elements. */
 
 static char *
-parameter_brace_substring (varname, value, ind, substr, quoted, pflags, flags)
+parameter_brace_substring (varname, value, estatep, substr, quoted, pflags, flags)
      char *varname, *value;
-     int ind;
+     array_eltstate_t *estatep;
      char *substr;
      int quoted, pflags, flags;
 {
@@ -8090,7 +8786,7 @@ parameter_brace_substring (varname, value, ind, substr, quoted, pflags, flags)
   oname = this_command_name;
   this_command_name = varname;
 
-  vtype = get_var_and_type (varname, value, ind, quoted, flags, &v, &val);
+  vtype = get_var_and_type (varname, value, estatep, quoted, flags, &v, &val);
   if (vtype == -1)
     {
       this_command_name = oname;
@@ -8178,23 +8874,38 @@ parameter_brace_substring (varname, value, ind, substr, quoted, pflags, flags)
 /*                                                             */
 /****************************************************************/
 
-#ifdef INCLUDE_UNUSED
 static int
 shouldexp_replacement (s)
      char *s;
 {
-  register char *p;
+  size_t slen;
+  int sindex, c;
+  DECLARE_MBSTATE;
 
-  for (p = s; p && *p; p++)
+  sindex = 0;
+  slen = STRLEN (s);
+  while (c = s[sindex])
     {
-      if (*p == '\\')
-       p++;
-      else if (*p == '&')
+      if (c == '\\')
+       {
+         sindex++;
+         if (s[sindex] == 0)
+           return 0;
+         /* We want to remove this backslash because we treat it as special
+            in this context. THIS ASSUMES THE STRING IS PROCESSED BY
+            strcreplace() OR EQUIVALENT that handles removing backslashes
+            preceding the special character. */
+         if (s[sindex] == '&')
+           return 1;
+         if (s[sindex] == '\\')
+           return 1;
+       }
+      else if (c == '&')
        return 1;
+      ADVANCE_CHAR (s, slen, sindex);
     }
   return 0;
 }
-#endif
 
 char *
 pat_subst (string, pat, rep, mflags)
@@ -8210,12 +8921,7 @@ pat_subst (string, pat, rep, mflags)
     return (savestring (""));
 
   mtype = mflags & MATCH_TYPEMASK;
-
-#if 0  /* TAG: bash-5.2? */
-  rxpand = (rep && *rep) ? shouldexp_replacement (rep) : 0;
-#else
-  rxpand = 0;
-#endif
+  rxpand = mflags & MATCH_EXPREP;
 
   /* Special cases:
    *   1.  A null pattern with mtype == MATCH_BEG means to prefix STRING
@@ -8224,37 +8930,34 @@ pat_subst (string, pat, rep, mflags)
    *       STRING and return the result.
    *   3.  A null STRING with a matching pattern means to append REP to
    *       STRING and return the result.
-   * These don't understand or process `&' in the replacement string.
+   *
+   * These process `&' in the replacement string, like `sed' does when
+   * presented with a BRE of `^' or `$'.
    */
   if ((pat == 0 || *pat == 0) && (mtype == MATCH_BEG || mtype == MATCH_END))
     {
-      replen = STRLEN (rep);
+      rstr = (mflags & MATCH_EXPREP) ? strcreplace (rep, '&', "", 2) : rep;
+      rslen = STRLEN (rstr);
       l = STRLEN (string);
-      ret = (char *)xmalloc (replen + l + 2);
-      if (replen == 0)
+      ret = (char *)xmalloc (rslen + l + 2);
+      if (rslen == 0)
        strcpy (ret, string);
       else if (mtype == MATCH_BEG)
        {
-         strcpy (ret, rep);
-         strcpy (ret + replen, string);
+         strcpy (ret, rstr);
+         strcpy (ret + rslen, string);
        }
       else
        {
          strcpy (ret, string);
-         strcpy (ret + l, rep);
+         strcpy (ret + l, rstr);
        }
+      if (rstr != rep)
+       free (rstr);
       return (ret);
     }
   else if (*string == 0 && (match_pattern (string, pat, mtype, &s, &e) != 0))
-    {
-      replen = STRLEN (rep);
-      ret = (char *)xmalloc (replen + 1);
-      if (replen == 0)
-       ret[0] = '\0';
-      else
-       strcpy (ret, rep);
-      return (ret);
-    }
+    return ((mflags & MATCH_EXPREP) ? strcreplace (rep, '&', "", 2) : savestring (rep));
 
   ret = (char *)xmalloc (rsize = 64);
   ret[0] = '\0';
@@ -8274,7 +8977,7 @@ pat_subst (string, pat, rep, mflags)
          for (x = 0; x < mlen; x++)
            mstr[x] = s[x];
          mstr[mlen] = '\0';
-         rstr = strcreplace (rep, '&', mstr, 0);
+         rstr = strcreplace (rep, '&', mstr, 2);
          free (mstr);
          rslen = strlen (rstr);
         }
@@ -8332,7 +9035,8 @@ pat_subst (string, pat, rep, mflags)
   /* Now copy the unmatched portion of the input string */
   if (str && *str)
     {
-      RESIZE_MALLOCED_BUFFER (ret, rptr, STRLEN(str) + 1, rsize, 64);
+      l = send - str + 1;
+      RESIZE_MALLOCED_BUFFER (ret, rptr, l, rsize, 64);
       strcpy (ret + rptr, str);
     }
   else
@@ -8385,9 +9089,9 @@ pos_params_pat_subst (string, pat, rep, mflags)
    and the string to substitute.  QUOTED is a flags word containing
    the type of quoting currently in effect. */
 static char *
-parameter_brace_patsub (varname, value, ind, patsub, quoted, pflags, flags)
+parameter_brace_patsub (varname, value, estatep, patsub, quoted, pflags, flags)
      char *varname, *value;
-     int ind;
+     array_eltstate_t *estatep;
      char *patsub;
      int quoted, pflags, flags;
 {
@@ -8401,7 +9105,7 @@ parameter_brace_patsub (varname, value, ind, patsub, quoted, pflags, flags)
   oname = this_command_name;
   this_command_name = varname;         /* error messages */
 
-  vtype = get_var_and_type (varname, value, ind, quoted, flags, &v, &val);
+  vtype = get_var_and_type (varname, value, estatep, quoted, flags, &v, &val);
   if (vtype == -1)
     {
       this_command_name = oname;
@@ -8456,13 +9160,22 @@ parameter_brace_patsub (varname, value, ind, patsub, quoted, pflags, flags)
         the entire expansion is double-quoted because the parser and string
         extraction functions treated quotes in the replacement string as
         special.  THIS IS NOT BACKWARDS COMPATIBLE WITH BASH-4.2. */
-      if (shell_compatibility_level > 42)
+      if (shell_compatibility_level > 42 && patsub_replacement == 0)
        rep = expand_string_if_necessary (rep, quoted & ~(Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT), expand_string_unsplit);
+      else if (shell_compatibility_level > 42 && patsub_replacement)
+       rep = expand_string_for_patsub (rep, quoted & ~(Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT));
       /* This is the bash-4.2 code. */      
       else if ((mflags & MATCH_QUOTED) == 0)
        rep = expand_string_if_necessary (rep, quoted, expand_string_unsplit);
       else
        rep = expand_string_to_string_internal (rep, quoted, expand_string_unsplit);
+
+      /* Check whether or not to replace `&' in the replacement string after
+        expanding it, since we want to treat backslashes quoting the `&'
+        consistently. */
+      if (patsub_replacement && rep && *rep && shouldexp_replacement (rep))
+       mflags |= MATCH_EXPREP;
+
     }
 
   /* ksh93 doesn't allow the match specifier to be a part of the expanded
@@ -8622,9 +9335,10 @@ pos_params_modcase (string, pat, modop, mflags)
    to perform.  QUOTED is a flags word containing the type of quoting
    currently in effect. */
 static char *
-parameter_brace_casemod (varname, value, ind, modspec, patspec, quoted, pflags, flags)
+parameter_brace_casemod (varname, value, estatep, modspec, patspec, quoted, pflags, flags)
      char *varname, *value;
-     int ind, modspec;
+     array_eltstate_t *estatep;
+     int modspec;
      char *patspec;
      int quoted, pflags, flags;
 {
@@ -8638,7 +9352,7 @@ parameter_brace_casemod (varname, value, ind, modspec, patspec, quoted, pflags,
   oname = this_command_name;
   this_command_name = varname;
 
-  vtype = get_var_and_type (varname, value, ind, quoted, flags, &v, &val);
+  vtype = get_var_and_type (varname, value, estatep, quoted, flags, &v, &val);
   if (vtype == -1)
     {
       this_command_name = oname;
@@ -8815,7 +9529,7 @@ parameter_brace_expand (string, indexp, quoted, pflags, quoted_dollar_atp, conta
   WORD_DESC *tdesc, *ret;
   int t_index, sindex, c, tflag, modspec, local_pflags, all_element_arrayref;
   intmax_t number;
-  arrayind_t ind;
+  array_eltstate_t es;
 
   temp = temp1 = value = (char *)NULL;
   var_is_set = var_is_null = var_is_special = check_nullness = 0;
@@ -8862,7 +9576,10 @@ parameter_brace_expand (string, indexp, quoted, pflags, quoted_dollar_atp, conta
   ret = 0;
   tflag = 0;
 
-  ind = INTMAX_MIN;
+#if defined (ARRAY_VARS)
+  init_eltstate (&es);
+#endif
+  es.ind = INTMAX_MIN; /* XXX */
 
   /* If the name really consists of a special variable, then make sure
      that we have the entire name.  We don't allow indirect references
@@ -9099,11 +9816,16 @@ parameter_brace_expand (string, indexp, quoted, pflags, quoted_dollar_atp, conta
         to return the index we're supposed to be using. */
       if (tdesc && tdesc->flags)
        tdesc->flags &= ~W_ARRAYIND;
+
+      /* If the indir expansion contains $@/$*, extend the special treatment
+        of the case of no positional parameters and `set -u' to it. */
+      if (contains_dollar_at && *contains_dollar_at)
+       all_element_arrayref = 1;
     }
   else
     {
       local_pflags |= PF_IGNUNBOUND|(pflags&(PF_NOSPLIT2|PF_ASSIGNRHS));
-      tdesc = parameter_brace_expand_word (name, var_is_special, quoted, local_pflags, &ind);
+      tdesc = parameter_brace_expand_word (name, var_is_special, quoted, local_pflags, &es);
     }
 
   if (tdesc == &expand_wdesc_error || tdesc == &expand_wdesc_fatal)
@@ -9119,7 +9841,7 @@ parameter_brace_expand (string, indexp, quoted, pflags, quoted_dollar_atp, conta
       dispose_word_desc (tdesc);
     }
   else
-    temp = (char  *)0;
+    temp = (char *)0;
 
   if (temp == &expand_param_error || temp == &expand_param_fatal)
     {
@@ -9200,9 +9922,12 @@ parameter_brace_expand (string, indexp, quoted, pflags, quoted_dollar_atp, conta
   /* If this is a substring spec, process it and add the result. */
   if (want_substring)
     {
-      temp1 = parameter_brace_substring (name, temp, ind, value, quoted, pflags, (tflag & W_ARRAYIND) ? AV_USEIND : 0);
+      temp1 = parameter_brace_substring (name, temp, &es, value, quoted, pflags, (tflag & W_ARRAYIND) ? AV_USEIND : 0);
       FREE (value);
       FREE (temp);
+#if defined (ARRAY_VARS)
+      flush_eltstate (&es);
+#endif
 
       if (temp1 == &expand_param_error || temp1 == &expand_param_fatal)
         {
@@ -9232,9 +9957,12 @@ parameter_brace_expand (string, indexp, quoted, pflags, quoted_dollar_atp, conta
     }
   else if (want_patsub)
     {
-      temp1 = parameter_brace_patsub (name, temp, ind, value, quoted, pflags, (tflag & W_ARRAYIND) ? AV_USEIND : 0);
+      temp1 = parameter_brace_patsub (name, temp, &es, value, quoted, pflags, (tflag & W_ARRAYIND) ? AV_USEIND : 0);
       FREE (value);
       FREE (temp);
+#if defined (ARRAY_VARS)
+      flush_eltstate (&es);
+#endif
 
       if (temp1 == &expand_param_error || temp1 == &expand_param_fatal)
         {
@@ -9258,9 +9986,12 @@ parameter_brace_expand (string, indexp, quoted, pflags, quoted_dollar_atp, conta
 #if defined (CASEMOD_EXPANSIONS)
   else if (want_casemod)
     {
-      temp1 = parameter_brace_casemod (name, temp, ind, modspec, value, quoted, pflags, (tflag & W_ARRAYIND) ? AV_USEIND : 0);
+      temp1 = parameter_brace_casemod (name, temp, &es, modspec, value, quoted, pflags, (tflag & W_ARRAYIND) ? AV_USEIND : 0);
       FREE (value);
       FREE (temp);
+#if defined (ARRAY_VARS)
+      flush_eltstate (&es);
+#endif
 
       if (temp1 == &expand_param_error || temp1 == &expand_param_fatal)
         {
@@ -9294,6 +10025,9 @@ bad_substitution:
       FREE (value);
       FREE (temp);
       free (name);
+#if defined (ARRAY_VARS)
+      flush_eltstate (&es);
+#endif
       if (shell_compatibility_level <= 43)
        return &expand_wdesc_error;
       else
@@ -9303,9 +10037,12 @@ bad_substitution:
       break;
 
     case '@':
-      temp1 = parameter_brace_transform (name, temp, ind, value, c, quoted, pflags, (tflag & W_ARRAYIND) ? AV_USEIND : 0);
+      temp1 = parameter_brace_transform (name, temp, &es, value, c, quoted, pflags, (tflag & W_ARRAYIND) ? AV_USEIND : 0);
       free (temp);
       free (value);
+#if defined (ARRAY_VARS)
+      flush_eltstate (&es);
+#endif
 
       if (temp1 == &expand_param_error || temp1 == &expand_param_fatal)
        {
@@ -9333,9 +10070,12 @@ bad_substitution:
          FREE (value);
          break;
        }
-      temp1 = parameter_brace_remove_pattern (name, temp, ind, value, c, quoted, (tflag & W_ARRAYIND) ? AV_USEIND : 0);
+      temp1 = parameter_brace_remove_pattern (name, temp, &es, value, c, quoted, (tflag & W_ARRAYIND) ? AV_USEIND : 0);
       free (temp);
       free (value);
+#if defined (ARRAY_VARS)
+      flush_eltstate (&es);
+#endif
 
       ret = alloc_word_desc ();
       ret->word = temp1;
@@ -9394,6 +10134,14 @@ bad_substitution:
        }
       else     /* VAR not set or VAR is NULL. */
        {
+         /* If we're freeing a quoted null here, we need to remember we saw
+            it so we can restore it later if needed, or the caller can note it.
+            The check against `+' doesn't really matter, since the other cases
+            don't use or return TFLAG, but it's good for clarity. */
+         if (c == '+' && temp && QUOTED_NULL (temp) &&
+             (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)))
+           tflag |= W_HASQUOTEDNULL;
+
          FREE (temp);
          temp = (char *)NULL;
          if (c == '=' && var_is_special)
@@ -9402,11 +10150,17 @@ bad_substitution:
              report_error (_("$%s: cannot assign in this way"), name);
              free (name);
              free (value);
+#if defined (ARRAY_VARS)
+             flush_eltstate (&es);
+#endif
              return &expand_wdesc_error;
            }
          else if (c == '?')
            {
              parameter_brace_expand_error (name, value, check_nullness);
+#if defined (ARRAY_VARS)
+             flush_eltstate (&es);
+#endif
              return (interactive_shell ? &expand_wdesc_error : &expand_wdesc_fatal);
            }
          else if (c != '+')
@@ -9436,6 +10190,9 @@ bad_substitution:
       break;
     }
   free (name);
+#if defined (ARRAY_VARS)
+  flush_eltstate (&es);
+#endif
 
   if (ret == 0)
     {
@@ -9458,7 +10215,7 @@ param_expand (string, sindex, quoted, expanded_something,
      int *quoted_dollar_at_p, *had_quoted_null_p, pflags;
 {
   char *temp, *temp1, uerror[3], *savecmd;
-  int zindex, t_index, expok;
+  int zindex, t_index, expok, eflag;
   unsigned char c;
   intmax_t number;
   SHELL_VAR *var;
@@ -9836,7 +10593,9 @@ arithsub:
          /* No error messages. */
          savecmd = this_command_name;
          this_command_name = (char *)NULL;
-         number = evalexp (temp1, EXP_EXPANDED, &expok);
+
+         eflag = (shell_compatibility_level > 51) ? 0 : EXP_EXPANDED;
+         number = evalexp (temp1, eflag, &expok);
          this_command_name = savecmd;
          free (temp);
          free (temp1);
@@ -9949,7 +10708,8 @@ comsub:
 #if defined (ARRAY_VARS)
          if (temp && *temp && valid_array_reference (temp, 0))
            {
-             tdesc = parameter_brace_expand_word (temp, SPECIAL_VAR (temp, 0), quoted, pflags, (arrayind_t *)NULL);
+             chk_atstar (temp, quoted, pflags, quoted_dollar_at_p, contains_dollar_at);
+             tdesc = parameter_brace_expand_word (temp, SPECIAL_VAR (temp, 0), quoted, pflags, 0);
              if (tdesc == &expand_wdesc_error || tdesc == &expand_wdesc_fatal)
                return (tdesc);
              ret = tdesc;
@@ -10004,6 +10764,116 @@ return0:
   return ret;
 }
 
+#if defined (ARRAY_VARS)
+/* Characters that need to be backslash-quoted after expanding array subscripts */
+static char abstab[256] = { '\1' };
+
+/* Run an array subscript through the appropriate word expansions. */
+char *
+expand_subscript_string (string, quoted)
+     char *string;
+     int quoted;
+{
+  WORD_DESC td;
+  WORD_LIST *tlist;
+  int oe;
+  char *ret;
+
+  if (string == 0 || *string == 0)
+    return (char *)NULL;
+
+  oe = expand_no_split_dollar_star;
+  ret = (char *)NULL;
+
+  td.flags = W_NOPROCSUB|W_NOTILDE|W_NOSPLIT2; /* XXX - W_NOCOMSUB? */
+  td.word = savestring (string);               /* in case it's freed on error */
+
+  expand_no_split_dollar_star = 1;
+  tlist = call_expand_word_internal (&td, quoted, 0, (int *)NULL, (int *)NULL);
+  expand_no_split_dollar_star = oe;
+
+  if (tlist)
+    {
+      if (tlist->word)
+       {
+         remove_quoted_nulls (tlist->word->word);
+         tlist->word->flags &= ~W_HASQUOTEDNULL;
+       }
+      dequote_list (tlist);
+      ret = string_list (tlist);
+      dispose_words (tlist);
+    }
+
+  free (td.word);
+  return (ret);
+}
+
+/* Expand the subscript in STRING, which is an array reference. To ensure we
+   only expand it once, we quote the characters that would start another
+   expansion and the bracket characters that are special to array subscripts. */
+static char *
+expand_array_subscript (string, sindex, quoted, flags)
+     char *string;
+     int *sindex;
+     int quoted, flags;
+{
+  char *ret, *exp, *t;
+  size_t slen;
+  int si, ni;
+
+  si = *sindex;
+  slen = STRLEN (string);
+
+  if (abstab[0] == '\1')
+    {
+      /* These are basically the characters that start shell expansions plus
+        the characters that delimit subscripts. */
+      memset (abstab, '\0', sizeof (abstab));
+      abstab[LBRACK] = abstab[RBRACK] = 1;
+      abstab['$'] = abstab['`'] = abstab['~'] = 1;
+      abstab['\\'] = abstab['\''] = 1;
+      abstab['"'] = 1; /* XXX */
+      /* We don't quote `@' or `*' in the subscript at all. */
+    }
+
+  /* string[si] == LBRACK */
+  ni = skipsubscript (string, si, 0);
+  /* These checks mirror the ones in valid_array_reference. The check for
+     (ni - si) == 1 checks for empty subscripts. We don't check that the
+     subscript is a separate word if we're parsing an arithmetic expression. */
+  if (ni >= slen || string[ni] != RBRACK || (ni - si) == 1 ||
+      (string[ni+1] != '\0' && (quoted & Q_ARITH) == 0))
+    {
+      /* let's check and see what fails this check */
+      INTERNAL_DEBUG (("expand_array_subscript: bad subscript string: `%s'", string+si));
+      ret = (char *)xmalloc (2);       /* badly-formed subscript */
+      ret[0] = string[si];
+      ret[1] = '\0';
+      *sindex = si + 1;
+      return ret;
+    }
+
+  /* STRING[ni] == RBRACK */
+  exp = substring (string, si+1, ni);
+  t = expand_subscript_string (exp, quoted & ~(Q_ARITH|Q_DOUBLE_QUOTES));
+  free (exp);
+  exp = sh_backslash_quote (t, abstab, 0);
+  free (t);
+
+  slen = STRLEN (exp);
+  ret = xmalloc (slen + 2 + 1);
+  ret[0] ='[';
+  strcpy (ret + 1, exp);
+  ret[slen + 1] = ']';
+  ret[slen + 2] = '\0';
+
+  free (exp);
+  *sindex = ni + 1;
+
+  return ret;
+}
+#endif
+
 void
 invalidate_cached_quoted_dollar_at ()
 {
@@ -10054,7 +10924,7 @@ expand_word_internal (word, quoted, isexp, contains_dollar_at, expanded_somethin
   size_t istring_size;
 
   /* Index into ISTRING. */
-  int istring_index;
+  size_t istring_index;
 
   /* Temporary string storage. */
   char *temp, *temp1;
@@ -10080,6 +10950,7 @@ expand_word_internal (word, quoted, isexp, contains_dollar_at, expanded_somethin
   int had_quoted_null;
   int has_quoted_ifs;          /* did we add a quoted $IFS character here? */
   int has_dollar_at, temp_has_dollar_at;
+  int internal_tilde;
   int split_on_spaces;
   int local_expanded;
   int tflag;
@@ -10095,7 +10966,9 @@ expand_word_internal (word, quoted, isexp, contains_dollar_at, expanded_somethin
 
   DECLARE_MBSTATE;
 
-  /* OK, let's see if we can optimize a common idiom: "$@" */
+  /* OK, let's see if we can optimize a common idiom: "$@". This needs to make sure
+     that all of the flags callers care about (e.g., W_HASQUOTEDNULL) are set in
+     list->flags. */
   if (STREQ (word->word, "\"$@\"") &&
       (word->flags == (W_HASDOLLAR|W_QUOTED)) &&
       dollar_vars[1])          /* XXX - check IFS here as well? */
@@ -10117,6 +10990,7 @@ expand_word_internal (word, quoted, isexp, contains_dollar_at, expanded_somethin
   quoted_dollar_at = had_quoted_null = has_dollar_at = 0;
   has_quoted_ifs = 0;
   split_on_spaces = 0;
+  internal_tilde = 0;          /* expanding =~ or :~ */
   quoted_state = UNQUOTED;
 
   string = word->word;
@@ -10181,7 +11055,7 @@ add_string:
          {
               /* XXX - technically this should only be expanded at the start
               of a word */
-           if (string[++sindex] != LPAREN || (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) || (word->flags & (W_DQUOTE|W_NOPROCSUB)))
+           if (string[++sindex] != LPAREN || (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) || (word->flags & W_NOPROCSUB))
              {
                sindex--;       /* add_character: label increments sindex */
                goto add_character;
@@ -10204,6 +11078,22 @@ add_string:
          }
 #endif /* PROCESS_SUBSTITUTION */
 
+#if defined (ARRAY_VARS)
+       case '[':               /*]*/
+         if ((quoted & Q_ARITH) == 0 || shell_compatibility_level <= 51)
+           {
+             if (isexp == 0 && (word->flags & (W_NOSPLIT|W_NOSPLIT2)) == 0 && isifs (c) && (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) == 0)
+               goto add_ifs_character;
+             else
+               goto add_character;
+           }
+         else
+           {
+             temp = expand_array_subscript (string, &sindex, quoted, word->flags);
+             goto add_string;
+           }
+#endif
+
        case '=':
          /* Posix.2 section 3.6.1 says that tildes following `=' in words
             which are not assignment statements are not expanded.  If the
@@ -10232,7 +11122,7 @@ add_string:
              assignoff == -1 && sindex > 0)
            assignoff = sindex;
          if (sindex == assignoff && string[sindex+1] == '~')   /* XXX */
-           word->flags |= W_ITILDE;
+           internal_tilde = 1;
 
          if (word->flags & W_ASSIGNARG)
            word->flags |= W_ASSIGNRHS;         /* affects $@ */
@@ -10257,7 +11147,7 @@ add_string:
          if ((word->flags & (W_ASSIGNMENT|W_ASSIGNRHS)) &&
              (posixly_correct == 0 || (word->flags & W_TILDEEXP)) &&
              string[sindex+1] == '~')
-           word->flags |= W_ITILDE;
+           internal_tilde = 1;
 
          if (isexp == 0 && (word->flags & (W_NOSPLIT|W_NOSPLIT2)) == 0 && isifs (c))
            goto add_ifs_character;
@@ -10270,11 +11160,11 @@ add_string:
             assignment statement, we don't do tilde expansion.  We don't
             do tilde expansion if quoted or in an arithmetic context. */
 
-         if ((word->flags & (W_NOTILDE|W_DQUOTE)) ||
-             (sindex > 0 && ((word->flags & W_ITILDE) == 0)) ||
+         if ((word->flags & W_NOTILDE) ||
+             (sindex > 0 && (internal_tilde == 0)) ||
              (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)))
            {
-             word->flags &= ~W_ITILDE;
+             internal_tilde = 0;
              if (isexp == 0 && (word->flags & (W_NOSPLIT|W_NOSPLIT2)) == 0 && isifs (c) && (quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) == 0)
                goto add_ifs_character;
              else
@@ -10290,7 +11180,7 @@ add_string:
 
          temp = bash_tilde_find_word (string + sindex, tflag, &t_index);
            
-         word->flags &= ~W_ITILDE;
+         internal_tilde = 0;
 
          if (temp && *temp && t_index > 0)
            {
@@ -10365,7 +11255,7 @@ add_string:
          {
            t_index = sindex++;
 
-           temp = string_extract (string, &sindex, "`", SX_REQMATCH);
+           temp = string_extract (string, &sindex, "`", (word->flags & W_COMPLETE) ? SX_COMPLETE : SX_REQMATCH);
            /* The test of sindex against t_index is to allow bare instances of
               ` to pass through, for backwards compatibility. */
            if (temp == &extract_string_error || temp == &extract_string_fatal)
@@ -10477,6 +11367,7 @@ add_twochars:
          break;
 
        case '"':
+         /* XXX - revisit this */
          if ((quoted & (Q_DOUBLE_QUOTES|Q_HERE_DOCUMENT)) && ((quoted & Q_ARITH) == 0))
            goto add_character;
 
@@ -10510,7 +11401,8 @@ add_twochars:
 
              temp_has_dollar_at = 0;   /* does this quoted (sub)string include $@? */
              /* Need to get W_HASQUOTEDNULL flag through this function. */
-             list = expand_word_internal (tword, Q_DOUBLE_QUOTES, 0, &temp_has_dollar_at, (int *)NULL);
+             /* XXX - preserve Q_ARITH here? */
+             list = expand_word_internal (tword, Q_DOUBLE_QUOTES|(quoted&Q_ARITH), 0, &temp_has_dollar_at, (int *)NULL);
              has_dollar_at += temp_has_dollar_at;
 
              if (list == &expand_word_error || list == &expand_word_fatal)
@@ -10665,7 +11557,7 @@ add_twochars:
            goto add_character;
 
          t_index = ++sindex;
-         temp = string_extract_single_quoted (string, &sindex);
+         temp = string_extract_single_quoted (string, &sindex, 0);
 
          /* If the entire STRING was surrounded by single quotes,
             then the string is wholly quoted. */
@@ -10806,7 +11698,11 @@ finished_with_string:
 
   if (*istring == '\0')
     {
+#if 0
       if (quoted_dollar_at == 0 && (had_quoted_null || quoted_state == PARTIALLY_QUOTED))
+#else
+      if (had_quoted_null || (quoted_dollar_at == 0 && quoted_state == PARTIALLY_QUOTED))
+#endif
        {
          istring[0] = CTLNUL;
          istring[1] = '\0';
@@ -10843,6 +11739,8 @@ finished_with_string:
        tword->flags |= W_NOGLOB;       /* XXX */
       if (word->flags & W_NOBRACE)
        tword->flags |= W_NOBRACE;      /* XXX */
+      if (word->flags & W_ARRAYREF)
+       tword->flags |= W_ARRAYREF;
       if (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES))
        tword->flags |= W_QUOTED;
       list = make_word_list (tword, (WORD_LIST *)NULL);
@@ -10951,6 +11849,8 @@ set_word_flags:
            tword->flags |= W_NOGLOB;
          if (word->flags & W_NOBRACE)
            tword->flags |= W_NOBRACE;
+         if (word->flags & W_ARRAYREF)
+           tword->flags |= W_ARRAYREF;
          list = make_word_list (tword, (WORD_LIST *)NULL);
        }
     }
@@ -11011,7 +11911,7 @@ string_quote_removal (string, quoted)
              break;
            }
          tindex = sindex + 1;
-         temp = string_extract_single_quoted (string, &tindex);
+         temp = string_extract_single_quoted (string, &tindex, 0);
          if (temp)
            {
              strcpy (r, temp);
@@ -11191,6 +12091,12 @@ word_list_split (list)
          w->word[0] = '\0';
          tresult = make_word_list (w, (WORD_LIST *)NULL);
        }
+#if defined (ARRAY_VARS)
+      /* pass W_ARRAYREF through for words that are not split and are
+        identical to the original word. */
+      if (tresult && tresult->next == 0 && t->next == 0 && (t->word->flags & W_ARRAYREF) && STREQ (t->word->word, tresult->word->word))
+       tresult->word->flags |= W_ARRAYREF;
+#endif
       if (result == 0)
         result = e = tresult;
       else
@@ -11767,10 +12673,13 @@ expand_declaration_argument (tlist, wcmd)
   memset (omap, '\0', sizeof (omap));
   for (l = wcmd->next; l != tlist; l = l->next)
     {
-      if (l->word->word[0] != '-')
+      int optchar;
+
+      if (l->word->word[0] != '-' && l->word->word[0] != '+')
        break;  /* non-option argument */
       if (l->word->word[0] == '-' && l->word->word[1] == '-' && l->word->word[2] == 0)
        break;  /* -- signals end of options */
+      optchar = l->word->word[0];
       for (oind = 1; l->word->word[oind]; oind++)
        switch (l->word->word[oind])
          {
@@ -11782,7 +12691,7 @@ expand_declaration_argument (tlist, wcmd)
            case 'c':
              omap[l->word->word[oind]] = 1;
              if (opti == 0)
-               opts[opti++] = '-';
+               opts[opti++] = optchar;
              break;
            default:
              break;
@@ -11937,6 +12846,87 @@ shell_expand_word_list (tlist, eflags)
   return (new_list);
 }
 
+/* Perform assignment statements optionally preceding a command name COMMAND.
+   If COMMAND == NULL, is_nullcmd usually == 1. Follow the POSIX rules for
+   variable assignment errors. */
+static int
+do_assignment_statements (varlist, command, is_nullcmd)
+     WORD_LIST *varlist;
+     char *command;
+     int is_nullcmd;
+{
+  WORD_LIST *temp_list;
+  char *savecmd;
+  sh_wassign_func_t *assign_func;
+  int is_special_builtin, is_builtin_or_func, tint;
+
+  /* If the remainder of the words expand to nothing, Posix.2 requires
+     that the variable and environment assignments affect the shell's
+     environment (do_word_assignment). */
+  assign_func = is_nullcmd ? do_word_assignment : assign_in_env;
+  tempenv_assign_error = 0;
+
+  is_builtin_or_func = command && (find_shell_builtin (command) || find_function (command));
+  /* Posix says that special builtins exit if a variable assignment error
+     occurs in an assignment preceding it. (XXX - this is old -- current Posix
+     says that any variable assignment error causes a non-interactive shell
+     to exit. See the STRICT_POSIX checks below. */
+  is_special_builtin = posixly_correct && command && find_special_builtin (command);
+
+  savecmd = this_command_name;
+  for (temp_list = varlist; temp_list; temp_list = temp_list->next)
+    {
+      this_command_name = (char *)NULL;
+      assigning_in_environment = is_nullcmd == 0;
+      tint = (*assign_func) (temp_list->word, is_builtin_or_func);
+      assigning_in_environment = 0;
+      this_command_name = savecmd;
+
+      /* Variable assignment errors in non-interactive shells running
+        in posix mode cause the shell to exit. */
+      if (tint == 0)
+       {
+         if (is_nullcmd)       /* assignment statement */
+           {
+             last_command_exit_value = EXECUTION_FAILURE;
+#if defined (STRICT_POSIX)
+             if (posixly_correct && interactive_shell == 0)
+#else
+             if (posixly_correct && interactive_shell == 0 && executing_command_builtin == 0)
+#endif
+               exp_jump_to_top_level (FORCE_EOF);
+             else
+               exp_jump_to_top_level (DISCARD);
+           }
+         /* In posix mode, assignment errors in the temporary environment
+            cause a non-interactive shell executing a special builtin to
+            exit and a non-interactive shell to otherwise jump back to the
+            top level. This is what POSIX says to do for variable assignment
+            errors, and POSIX says errors in assigning to the temporary
+            environment are treated as variable assignment errors.
+            (XXX - this is not what current POSIX says - look at the
+            STRICT_POSIX defines. */
+         else if (posixly_correct)
+           {
+             last_command_exit_value = EXECUTION_FAILURE;
+#if defined (STRICT_POSIX)
+             exp_jump_to_top_level ((interactive_shell == 0) ? FORCE_EOF : DISCARD);
+#else
+             if (interactive_shell == 0 && is_special_builtin)
+               exp_jump_to_top_level (FORCE_EOF);
+             else if (interactive_shell == 0)
+               exp_jump_to_top_level (DISCARD);        /* XXX - maybe change later */
+             else
+               exp_jump_to_top_level (DISCARD);
+#endif
+           }
+         else
+           tempenv_assign_error++;
+       }
+    }
+  return (tempenv_assign_error);
+}
+
 /* The workhorse for expand_words () and expand_words_no_vars ().
    First arg is LIST, a WORD_LIST of words.
    Second arg EFLAGS is a flags word controlling which expansions are
@@ -11956,8 +12946,6 @@ expand_word_list_internal (list, eflags)
      int eflags;
 {
   WORD_LIST *new_list, *temp_list;
-  int tint;
-  char *savecmd;
 
   tempenv_assign_error = 0;
   if (list == 0)
@@ -11970,30 +12958,11 @@ expand_word_list_internal (list, eflags)
       if (new_list == 0)
        {
          if (subst_assign_varlist)
-           {
-             /* All the words were variable assignments, so they are placed
-                into the shell's environment. */
-             for (temp_list = subst_assign_varlist; temp_list; temp_list = temp_list->next)
-               {
-                 savecmd = this_command_name;
-                 this_command_name = (char *)NULL;     /* no arithmetic errors */
-                 tint = do_word_assignment (temp_list->word, 0);
-                 this_command_name = savecmd;
-                 /* Variable assignment errors in non-interactive shells
-                    running in Posix.2 mode cause the shell to exit, unless
-                    they are being run by the `command' builtin. */
-                 if (tint == 0)
-                   {
-                     last_command_exit_value = EXECUTION_FAILURE;
-                     if (interactive_shell == 0 && posixly_correct && executing_command_builtin == 0)
-                       exp_jump_to_top_level (FORCE_EOF);
-                     else
-                       exp_jump_to_top_level (DISCARD);
-                   }
-               }
-             dispose_words (subst_assign_varlist);
-             subst_assign_varlist = (WORD_LIST *)NULL;
-           }
+           do_assignment_statements (subst_assign_varlist, (char *)NULL, 1);
+           
+         dispose_words (subst_assign_varlist);
+         subst_assign_varlist = (WORD_LIST *)NULL;
+
          return ((WORD_LIST *)NULL);
        }
     }
@@ -12027,49 +12996,7 @@ expand_word_list_internal (list, eflags)
 
   if ((eflags & WEXP_VARASSIGN) && subst_assign_varlist)
     {
-      sh_wassign_func_t *assign_func;
-      int is_special_builtin, is_builtin_or_func;
-
-      /* If the remainder of the words expand to nothing, Posix.2 requires
-        that the variable and environment assignments affect the shell's
-        environment. */
-      assign_func = new_list ? assign_in_env : do_word_assignment;
-      tempenv_assign_error = 0;
-
-      is_builtin_or_func = (new_list && new_list->word && (find_shell_builtin (new_list->word->word) || find_function (new_list->word->word)));
-      /* Posix says that special builtins exit if a variable assignment error
-        occurs in an assignment preceding it. */
-      is_special_builtin = (posixly_correct && new_list && new_list->word && find_special_builtin (new_list->word->word));
-      
-      for (temp_list = subst_assign_varlist; temp_list; temp_list = temp_list->next)
-       {
-         savecmd = this_command_name;
-         this_command_name = (char *)NULL;
-         assigning_in_environment = (assign_func == assign_in_env);
-         tint = (*assign_func) (temp_list->word, is_builtin_or_func);
-         assigning_in_environment = 0;
-         this_command_name = savecmd;
-         /* Variable assignment errors in non-interactive shells running
-            in Posix.2 mode cause the shell to exit. */
-         if (tint == 0)
-           {
-             if (assign_func == do_word_assignment)
-               {
-                 last_command_exit_value = EXECUTION_FAILURE;
-                 if (interactive_shell == 0 && posixly_correct)
-                   exp_jump_to_top_level (FORCE_EOF);
-                 else
-                   exp_jump_to_top_level (DISCARD);
-               }
-             else if (interactive_shell == 0 && is_special_builtin)
-               {
-                 last_command_exit_value = EXECUTION_FAILURE;
-                 exp_jump_to_top_level (FORCE_EOF);
-               }
-             else
-               tempenv_assign_error++;
-           }
-       }
+      do_assignment_statements (subst_assign_varlist, (new_list && new_list->word) ? new_list->word->word : (char *)NULL, new_list == 0);
 
       dispose_words (subst_assign_varlist);
       subst_assign_varlist = (WORD_LIST *)NULL;
diff --git a/subst.h b/subst.h
index 134765158db97c32733ec75323095904d19b5245..28cc920316bcd2189091b8ade7c610211455e044 100644 (file)
--- a/subst.h
+++ b/subst.h
@@ -1,6 +1,6 @@
 /* subst.h -- Names of externally visible functions in subst.c. */
 
-/* Copyright (C) 1993-2017 Free Software Foundation, Inc.
+/* Copyright (C) 1993-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -55,6 +55,8 @@
 #define ASS_NOEVAL     0x0100  /* don't evaluate value as expression */
 #define ASS_NOLONGJMP  0x0200  /* don't longjmp on fatal assignment error */
 #define ASS_NOINVIS    0x0400  /* don't resolve local invisible variables */
+#define ASS_ALLOWALLSUB        0x0800  /* allow * and @ as associative array keys */
+#define ASS_ONEWORD    0x1000  /* don't check array subscripts, assume higher level has done that */
 
 /* Flags for the string extraction functions. */
 #define SX_NOALLOC     0x0001  /* just skip; don't return substring */
@@ -69,6 +71,7 @@
 #define SX_WORD                0x0200  /* extracting word in ${param op word} */
 #define SX_COMPLETE    0x0400  /* extracting word for completion */
 #define SX_STRIPDQ     0x0800  /* strip double quotes when extracting double-quoted string */
+#define SX_NOERROR     0x1000  /* don't print parser error messages */
 
 /* Remove backslashes which are quoting backquotes from STRING.  Modifies
    STRING, and returns a pointer to it. */
@@ -143,7 +146,7 @@ extern int do_word_assignment PARAMS((WORD_DESC *, int));
    of space allocated to TARGET.  SOURCE can be NULL, in which
    case nothing happens.  Gets rid of SOURCE by free ()ing it.
    Returns TARGET in case the location has changed. */
-extern char *sub_append_string PARAMS((char *, char *, int *, size_t *));
+extern char *sub_append_string PARAMS((char *, char *, size_t *, size_t *));
 
 /* Append the textual representation of NUMBER to TARGET.
    INDEX and SIZE are as in SUB_APPEND_STRING. */
@@ -183,10 +186,14 @@ extern WORD_LIST *expand_string PARAMS((char *, int));
 extern char *expand_string_to_string PARAMS((char *, int));
 extern char *expand_string_unsplit_to_string PARAMS((char *, int));
 extern char *expand_assignment_string_to_string PARAMS((char *, int));
+extern char *expand_subscript_string PARAMS((char *, int));
 
 /* Expand an arithmetic expression string */
 extern char *expand_arith_string PARAMS((char *, int));
 
+/* Expand $'...' and $"..." in a string for code paths that do not. */
+extern char *expand_string_dollar_quote PARAMS((char *, int));
+
 /* De-quote quoted characters in STRING. */
 extern char *dequote_string PARAMS((char *));
 
@@ -308,6 +315,7 @@ extern char *cond_expand_word PARAMS((WORD_DESC *, int));
 #define SD_COMPLETE    0x100   /* skip_to_delim during completion */
 #define SD_HISTEXP     0x200   /* skip_to_delim during history expansion */
 #define SD_ARITHEXP    0x400   /* skip_to_delim during arithmetic expansion */
+#define SD_NOERROR     0x800   /* don't print error messages */
 
 extern int skip_to_delim PARAMS((char *, int, char *, int));
 
@@ -318,7 +326,7 @@ extern int skip_to_histexp PARAMS((char *, int, char *, int));
 #if defined (READLINE)
 extern int char_is_quoted PARAMS((char *, int));
 extern int unclosed_pair PARAMS((char *, int, char *));
-extern WORD_LIST *split_at_delims PARAMS((char *, int, char *, int, int, int *, int *));
+extern WORD_LIST *split_at_delims PARAMS((char *, int, const char *, int, int, int *, int *));
 #endif
 
 /* Variables used to keep track of the characters in IFS. */
index 0289e0acf2b0ddce244e06cf32d2a1d9b032d83a..f7de7ac21764c92bca7825e13c261e059b12779a 100644 (file)
@@ -9,7 +9,7 @@
 #
 # Currently only man2html is built
 #
-# Copyright (C) 1998-2018 Free Software Foundation, Inc.
+# Copyright (C) 1998-2021 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
@@ -46,9 +46,11 @@ PROFILE_FLAGS = @PROFILE_FLAGS@
 
 CFLAGS = @CFLAGS@
 CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@
+BASE_CFLAGS_FOR_BUILD = @BASE_CFLAGS_FOR_BUILD@
 CPPFLAGS = @CPPFLAGS@
 CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@
 LOCAL_CFLAGS = @LOCAL_CFLAGS@
+STYLE_CFLAGS = @STYLE_CFLAGS@
 DEFS = @DEFS@
 LOCAL_DEFS = @LOCAL_DEFS@
 
@@ -56,13 +58,13 @@ LIBS = @LIBS@
 LIBS_FOR_BUILD = ${LIBS}               # XXX
 
 LOCAL_LDFLAGS = @LOCAL_LDFLAGS@
-LDFLAGS = @LDFLAGS@ $(LOCAL_LDFLAGS) $(CFLAGS)
+LDFLAGS = @LDFLAGS@ $(LOCAL_LDFLAGS)
 LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@ $(LOCAL_LDFLAGS) $(CFLAGS_FOR_BUILD)
 
 INCLUDES = -I${BUILD_DIR} -I${topdir}
 
 BASE_CCFLAGS = ${PROFILE_FLAGS} $(DEFS) $(LOCAL_DEFS) $(SYSTEM_FLAGS) \
-         ${INCLUDES} $(LOCAL_CFLAGS)
+         ${INCLUDES} $(STYLE_CFLAGS) $(LOCAL_CFLAGS)
 
 CCFLAGS = $(BASE_CCFLAGS) $(CPPFLAGS) $(CFLAGS)
 CCFLAGS_FOR_BUILD = $(BASE_CCFLAGS) $(CPPFLAGS_FOR_BUILD) $(CFLAGS_FOR_BUILD)
@@ -77,7 +79,7 @@ OBJ1 =        man2html.o
 all: man2html$(EXEEXT)
 
 man2html$(EXEEXT): $(OBJ1)
-       $(CC_FOR_BUILD) $(CCFLAGS_FOR_BUILD) $(OBJ1) -o $@ ${LIBS_FOR_BUILD}
+       $(CC_FOR_BUILD) $(LDFLAGS_FOR_BUILD) $(OBJ1) -o $@ ${LIBS_FOR_BUILD}
 
 clean:
        $(RM) man2html$(EXEEXT) $(OBJ1)
index 01e9f01470008212985aa3a96f8bf424b01b3017..940f70654bee92a429067f5cd85f1d13ab938d51 100644 (file)
@@ -7,7 +7,7 @@
 # chet@cwru.edu and, optionally, to bash-testers@cwru.edu.
 # Other versions send mail to bug-bash@gnu.org.
 #
-# Copyright (C) 1996-2020 Free Software Foundation, Inc.
+# Copyright (C) 1996-2021 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
index d4b48c903eacb72d7ae426e406bef94d2c806863..77e14e56e4280f01edb07a43c87dcad9cf12ac73 100644 (file)
@@ -4,10 +4,10 @@
 #
 # The bug address depends on the release status of the shell.  Versions
 # with status `devel', `alpha', `beta', or `rc' mail bug reports to
-# chet@cwru.edu and, optionally, to bash-testers@cwru.edu.
+# chet.ramey@case.edu and, optionally, to bash-testers@cwru.edu.
 # Other versions send mail to bug-bash@gnu.org.
 #
-# Copyright (C) 1996-2020 Free Software Foundation, Inc.
+# Copyright (C) 1996-2021 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
@@ -102,7 +102,7 @@ esac
 BASHTESTERS="bash-testers@cwru.edu"
 
 case "$RELSTATUS" in
-alpha*|beta*|devel*|rc*)       BUGBASH=chet@cwru.edu ;;
+alpha*|beta*|devel*|rc*)       BUGBASH=chet.ramey@case.edu ;;
 *)                             BUGBASH=bug-bash@gnu.org ;;
 esac
 
@@ -132,6 +132,10 @@ if [ -z "$DEFEDITOR" ] && [ -z "$EDITOR" ]; then
                DEFEDITOR=emacs
        elif [ -x /usr/bin/xemacs ]; then
                DEFEDITOR=xemacs
+       elif [ -x /usr/bin/vim; then
+               DEFEDITOR=vim
+       elif [ -x /usr/bin/gvim; then
+               DEFEDITOR=gvim
        elif [ -x /usr/bin/nano ]; then
                DEFEDITOR=nano
        elif [ -x /usr/contrib/bin/jove ]; then
index 4f86b13467a9be60a8e593ac17031158b39905f2..ad02d46ea06bc16679608280c7b1eaefd173593e 100644 (file)
@@ -1,6 +1,6 @@
 /* bashversion.c -- Display bash version information. */
 
-/* Copyright (C) 2001-2020 Free Software Foundation, Inc.
+/* Copyright (C) 2001-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
old mode 100755 (executable)
new mode 100644 (file)
index 0fc11ed..7f76b62
@@ -1,12 +1,14 @@
 #! /bin/sh
 # Attempt to guess a canonical system name.
-#   Copyright 1992-2020 Free Software Foundation, Inc.
+#   Copyright 1992-2022 Free Software Foundation, Inc.
 
-timestamp='2020-11-07'
+# shellcheck disable=SC2006,SC2268 # see below for rationale
+
+timestamp='2022-01-09'
 
 # This 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
+# 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
@@ -27,12 +29,20 @@ timestamp='2020-11-07'
 # Originally written by Per Bothner; maintained since 2000 by Ben Elliston.
 #
 # You can get the latest version of this script from:
-# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
+# https://git.savannah.gnu.org/cgit/config.git/plain/config.guess
 #
 # Please send patches to <config-patches@gnu.org>.
 
 
-me=$(echo "$0" | sed -e 's,.*/,,')
+# The "shellcheck disable" line above the timestamp inhibits complaints
+# about features and limitations of the classic Bourne shell that were
+# superseded or lifted in POSIX.  However, this script identifies a wide
+# variety of pre-POSIX systems that do not have POSIX shells at all, and
+# even some reasonably current systems (Solaris 10 as case-in-point) still
+# have a pre-POSIX /bin/sh.
+
+
+me=`echo "$0" | sed -e 's,.*/,,'`
 
 usage="\
 Usage: $0 [OPTION]
@@ -50,7 +60,7 @@ version="\
 GNU config.guess ($timestamp)
 
 Originally written by Per Bothner.
-Copyright 1992-2020 Free Software Foundation, Inc.
+Copyright 1992-2022 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -84,6 +94,9 @@ if test $# != 0; then
   exit 1
 fi
 
+# Just in case it came from the environment.
+GUESS=
+
 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a
 # compiler to aid in system detection is discouraged as it requires
 # temporary files to be created and, as you can see below, it is a
@@ -102,8 +115,8 @@ set_cc_for_build() {
     # prevent multiple calls if $tmp is already set
     test "$tmp" && return 0
     : "${TMPDIR=/tmp}"
-    # shellcheck disable=SC2039
-    { tmp=$( (umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null) && test -n "$tmp" && test -d "$tmp" ; } ||
+    # shellcheck disable=SC2039,SC3028
+    { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
        { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } ||
        { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } ||
        { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; }
@@ -112,7 +125,7 @@ set_cc_for_build() {
        ,,)    echo "int x;" > "$dummy.c"
               for driver in cc gcc c89 c99 ; do
                   if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then
-                      CC_FOR_BUILD="$driver"
+                      CC_FOR_BUILD=$driver
                       break
                   fi
               done
@@ -131,16 +144,14 @@ if test -f /.attbin/uname ; then
        PATH=$PATH:/.attbin ; export PATH
 fi
 
-UNAME_MACHINE=$( (uname -m) 2>/dev/null) || UNAME_MACHINE=unknown
-UNAME_RELEASE=$( (uname -r) 2>/dev/null) || UNAME_RELEASE=unknown
-UNAME_SYSTEM=$( (uname -s) 2>/dev/null) || UNAME_SYSTEM=unknown
-UNAME_VERSION=$( (uname -v) 2>/dev/null) || UNAME_VERSION=unknown
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
 
-case "$UNAME_SYSTEM" in
+case $UNAME_SYSTEM in
 Linux|GNU|GNU/*)
-       # If the system lacks a compiler, then just pick glibc.
-       # We could probably try harder.
-       LIBC=gnu
+       LIBC=unknown
 
        set_cc_for_build
        cat <<-EOF > "$dummy.c"
@@ -149,22 +160,37 @@ Linux|GNU|GNU/*)
        LIBC=uclibc
        #elif defined(__dietlibc__)
        LIBC=dietlibc
+       #elif defined(__GLIBC__)
+       LIBC=gnu
        #else
        #include <stdarg.h>
+       /* First heuristic to detect musl libc.  */
        #ifdef __DEFINED_va_list
        LIBC=musl
-       #else
-       LIBC=gnu
        #endif
        #endif
        EOF
-       eval "$($CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g')"
+       cc_set_libc=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`
+       eval "$cc_set_libc"
+
+       # Second heuristic to detect musl libc.
+       if [ "$LIBC" = unknown ] &&
+          command -v ldd >/dev/null &&
+          ldd --version 2>&1 | grep -q ^musl; then
+               LIBC=musl
+       fi
+
+       # If the system lacks a compiler, then just pick glibc.
+       # We could probably try harder.
+       if [ "$LIBC" = unknown ]; then
+               LIBC=gnu
+       fi
        ;;
 esac
 
 # Note: order is significant - the case branches are not exclusive.
 
-case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
+case $UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION in
     *:NetBSD:*:*)
        # NetBSD (nbsd) targets should (where applicable) match one or
        # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
@@ -176,12 +202,11 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
        #
        # Note: NetBSD doesn't particularly care about the vendor
        # portion of the name.  We always set it to "unknown".
-       sysctl="sysctl -n hw.machine_arch"
-       UNAME_MACHINE_ARCH=$( (uname -p 2>/dev/null || \
-           "/sbin/$sysctl" 2>/dev/null || \
-           "/usr/sbin/$sysctl" 2>/dev/null || \
-           echo unknown))
-       case "$UNAME_MACHINE_ARCH" in
+       UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \
+           /sbin/sysctl -n hw.machine_arch 2>/dev/null || \
+           /usr/sbin/sysctl -n hw.machine_arch 2>/dev/null || \
+           echo unknown)`
+       case $UNAME_MACHINE_ARCH in
            aarch64eb) machine=aarch64_be-unknown ;;
            armeb) machine=armeb-unknown ;;
            arm*) machine=arm-unknown ;;
@@ -189,15 +214,15 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
            sh3eb) machine=sh-unknown ;;
            sh5el) machine=sh5le-unknown ;;
            earmv*)
-               arch=$(echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,')
-               endian=$(echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p')
-               machine="${arch}${endian}"-unknown
+               arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'`
+               endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'`
+               machine=${arch}${endian}-unknown
                ;;
-           *) machine="$UNAME_MACHINE_ARCH"-unknown ;;
+           *) machine=$UNAME_MACHINE_ARCH-unknown ;;
        esac
        # The Operating System including object format, if it has switched
        # to ELF recently (or will in the future) and ABI.
-       case "$UNAME_MACHINE_ARCH" in
+       case $UNAME_MACHINE_ARCH in
            earm*)
                os=netbsdelf
                ;;
@@ -218,10 +243,10 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
                ;;
        esac
        # Determine ABI tags.
-       case "$UNAME_MACHINE_ARCH" in
+       case $UNAME_MACHINE_ARCH in
            earm*)
                expr='s/^earmv[0-9]/-eabi/;s/eb$//'
-               abi=$(echo "$UNAME_MACHINE_ARCH" | sed -e "$expr")
+               abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"`
                ;;
        esac
        # The OS release
@@ -229,76 +254,82 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
        # thus, need a distinct triplet. However, they do not need
        # kernel version information, so it can be replaced with a
        # suitable tag, in the style of linux-gnu.
-       case "$UNAME_VERSION" in
+       case $UNAME_VERSION in
            Debian*)
                release='-gnu'
                ;;
            *)
-               release=$(echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2)
+               release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2`
                ;;
        esac
        # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
        # contains redundant information, the shorter form:
        # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
-       echo "$machine-${os}${release}${abi-}"
-       exit ;;
+       GUESS=$machine-${os}${release}${abi-}
+       ;;
     *:Bitrig:*:*)
-       UNAME_MACHINE_ARCH=$(arch | sed 's/Bitrig.//')
-       echo "$UNAME_MACHINE_ARCH"-unknown-bitrig"$UNAME_RELEASE"
-       exit ;;
+       UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
+       GUESS=$UNAME_MACHINE_ARCH-unknown-bitrig$UNAME_RELEASE
+       ;;
     *:OpenBSD:*:*)
-       UNAME_MACHINE_ARCH=$(arch | sed 's/OpenBSD.//')
-       echo "$UNAME_MACHINE_ARCH"-unknown-openbsd"$UNAME_RELEASE"
-       exit ;;
+       UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+       GUESS=$UNAME_MACHINE_ARCH-unknown-openbsd$UNAME_RELEASE
+       ;;
+    *:SecBSD:*:*)
+       UNAME_MACHINE_ARCH=`arch | sed 's/SecBSD.//'`
+       GUESS=$UNAME_MACHINE_ARCH-unknown-secbsd$UNAME_RELEASE
+       ;;
     *:LibertyBSD:*:*)
-       UNAME_MACHINE_ARCH=$(arch | sed 's/^.*BSD\.//')
-       echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE"
-       exit ;;
+       UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'`
+       GUESS=$UNAME_MACHINE_ARCH-unknown-libertybsd$UNAME_RELEASE
+       ;;
     *:MidnightBSD:*:*)
-       echo "$UNAME_MACHINE"-unknown-midnightbsd"$UNAME_RELEASE"
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-midnightbsd$UNAME_RELEASE
+       ;;
     *:ekkoBSD:*:*)
-       echo "$UNAME_MACHINE"-unknown-ekkobsd"$UNAME_RELEASE"
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-ekkobsd$UNAME_RELEASE
+       ;;
     *:SolidBSD:*:*)
-       echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE"
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-solidbsd$UNAME_RELEASE
+       ;;
     *:OS108:*:*)
-       echo "$UNAME_MACHINE"-unknown-os108_"$UNAME_RELEASE"
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-os108_$UNAME_RELEASE
+       ;;
     macppc:MirBSD:*:*)
-       echo powerpc-unknown-mirbsd"$UNAME_RELEASE"
-       exit ;;
+       GUESS=powerpc-unknown-mirbsd$UNAME_RELEASE
+       ;;
     *:MirBSD:*:*)
-       echo "$UNAME_MACHINE"-unknown-mirbsd"$UNAME_RELEASE"
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-mirbsd$UNAME_RELEASE
+       ;;
     *:Sortix:*:*)
-       echo "$UNAME_MACHINE"-unknown-sortix
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-sortix
+       ;;
     *:Twizzler:*:*)
-       echo "$UNAME_MACHINE"-unknown-twizzler
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-twizzler
+       ;;
     *:Redox:*:*)
-       echo "$UNAME_MACHINE"-unknown-redox
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-redox
+       ;;
     mips:OSF1:*.*)
-       echo mips-dec-osf1
-       exit ;;
+       GUESS=mips-dec-osf1
+       ;;
     alpha:OSF1:*:*)
+       # Reset EXIT trap before exiting to avoid spurious non-zero exit code.
+       trap '' 0
        case $UNAME_RELEASE in
        *4.0)
-               UNAME_RELEASE=$(/usr/sbin/sizer -v | awk '{print $3}')
+               UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
                ;;
        *5.*)
-               UNAME_RELEASE=$(/usr/sbin/sizer -v | awk '{print $4}')
+               UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
                ;;
        esac
        # According to Compaq, /usr/sbin/psrinfo has been available on
        # OSF/1 and Tru64 systems produced since 1995.  I hope that
        # covers most systems running today.  This code pipes the CPU
        # types through head -n 1, so we only detect the type of CPU 0.
-       ALPHA_CPU_TYPE=$(/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1)
-       case "$ALPHA_CPU_TYPE" in
+       ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+       case $ALPHA_CPU_TYPE in
            "EV4 (21064)")
                UNAME_MACHINE=alpha ;;
            "EV4.5 (21064)")
@@ -335,68 +366,69 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
        # A Tn.n version is a released field test version.
        # A Xn.n version is an unreleased experimental baselevel.
        # 1.2 uses "1.2" for uname -r.
-       echo "$UNAME_MACHINE"-dec-osf"$(echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz)"
-       # Reset EXIT trap before exiting to avoid spurious non-zero exit code.
-       exitcode=$?
-       trap '' 0
-       exit $exitcode ;;
+       OSF_REL=`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
+       GUESS=$UNAME_MACHINE-dec-osf$OSF_REL
+       ;;
     Amiga*:UNIX_System_V:4.0:*)
-       echo m68k-unknown-sysv4
-       exit ;;
+       GUESS=m68k-unknown-sysv4
+       ;;
     *:[Aa]miga[Oo][Ss]:*:*)
-       echo "$UNAME_MACHINE"-unknown-amigaos
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-amigaos
+       ;;
     *:[Mm]orph[Oo][Ss]:*:*)
-       echo "$UNAME_MACHINE"-unknown-morphos
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-morphos
+       ;;
     *:OS/390:*:*)
-       echo i370-ibm-openedition
-       exit ;;
+       GUESS=i370-ibm-openedition
+       ;;
     *:z/VM:*:*)
-       echo s390-ibm-zvmoe
-       exit ;;
+       GUESS=s390-ibm-zvmoe
+       ;;
     *:OS400:*:*)
-       echo powerpc-ibm-os400
-       exit ;;
+       GUESS=powerpc-ibm-os400
+       ;;
     arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
-       echo arm-acorn-riscix"$UNAME_RELEASE"
-       exit ;;
+       GUESS=arm-acorn-riscix$UNAME_RELEASE
+       ;;
     arm*:riscos:*:*|arm*:RISCOS:*:*)
-       echo arm-unknown-riscos
-       exit ;;
+       GUESS=arm-unknown-riscos
+       ;;
     SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
-       echo hppa1.1-hitachi-hiuxmpp
-       exit ;;
+       GUESS=hppa1.1-hitachi-hiuxmpp
+       ;;
     Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
        # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
-       if test "$( (/bin/universe) 2>/dev/null)" = att ; then
-               echo pyramid-pyramid-sysv3
-       else
-               echo pyramid-pyramid-bsd
-       fi
-       exit ;;
+       case `(/bin/universe) 2>/dev/null` in
+           att) GUESS=pyramid-pyramid-sysv3 ;;
+           *)   GUESS=pyramid-pyramid-bsd   ;;
+       esac
+       ;;
     NILE*:*:*:dcosx)
-       echo pyramid-pyramid-svr4
-       exit ;;
+       GUESS=pyramid-pyramid-svr4
+       ;;
     DRS?6000:unix:4.0:6*)
-       echo sparc-icl-nx6
-       exit ;;
+       GUESS=sparc-icl-nx6
+       ;;
     DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
-       case $(/usr/bin/uname -p) in
-           sparc) echo sparc-icl-nx7; exit ;;
-       esac ;;
+       case `/usr/bin/uname -p` in
+           sparc) GUESS=sparc-icl-nx7 ;;
+       esac
+       ;;
     s390x:SunOS:*:*)
-       echo "$UNAME_MACHINE"-ibm-solaris2"$(echo "$UNAME_RELEASE" | sed -e 's/[^.]*//')"
-       exit ;;
+       SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+       GUESS=$UNAME_MACHINE-ibm-solaris2$SUN_REL
+       ;;
     sun4H:SunOS:5.*:*)
-       echo sparc-hal-solaris2"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')"
-       exit ;;
+       SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+       GUESS=sparc-hal-solaris2$SUN_REL
+       ;;
     sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
-       echo sparc-sun-solaris2"$(echo "$UNAME_RELEASE" | sed -e 's/[^.]*//')"
-       exit ;;
+       SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+       GUESS=sparc-sun-solaris2$SUN_REL
+       ;;
     i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
-       echo i386-pc-auroraux"$UNAME_RELEASE"
-       exit ;;
+       GUESS=i386-pc-auroraux$UNAME_RELEASE
+       ;;
     i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
        set_cc_for_build
        SUN_ARCH=i386
@@ -405,47 +437,50 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
        # This test works for both compilers.
        if test "$CC_FOR_BUILD" != no_compiler_found; then
            if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
-               (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+               (CCOPTS="" $CC_FOR_BUILD -m64 -E - 2>/dev/null) | \
                grep IS_64BIT_ARCH >/dev/null
            then
                SUN_ARCH=x86_64
            fi
        fi
-       echo "$SUN_ARCH"-pc-solaris2"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')"
-       exit ;;
+       SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+       GUESS=$SUN_ARCH-pc-solaris2$SUN_REL
+       ;;
     sun4*:SunOS:6*:*)
        # According to config.sub, this is the proper way to canonicalize
        # SunOS6.  Hard to guess exactly what SunOS6 will be like, but
        # it's likely to be more like Solaris than SunOS4.
-       echo sparc-sun-solaris3"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')"
-       exit ;;
+       SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+       GUESS=sparc-sun-solaris3$SUN_REL
+       ;;
     sun4*:SunOS:*:*)
-       case "$(/usr/bin/arch -k)" in
+       case `/usr/bin/arch -k` in
            Series*|S4*)
-               UNAME_RELEASE=$(uname -v)
+               UNAME_RELEASE=`uname -v`
                ;;
        esac
        # Japanese Language versions have a version number like `4.1.3-JL'.
-       echo sparc-sun-sunos"$(echo "$UNAME_RELEASE"|sed -e 's/-/_/')"
-       exit ;;
+       SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/'`
+       GUESS=sparc-sun-sunos$SUN_REL
+       ;;
     sun3*:SunOS:*:*)
-       echo m68k-sun-sunos"$UNAME_RELEASE"
-       exit ;;
+       GUESS=m68k-sun-sunos$UNAME_RELEASE
+       ;;
     sun*:*:4.2BSD:*)
-       UNAME_RELEASE=$( (sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null)
+       UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
        test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3
-       case "$(/bin/arch)" in
+       case `/bin/arch` in
            sun3)
-               echo m68k-sun-sunos"$UNAME_RELEASE"
+               GUESS=m68k-sun-sunos$UNAME_RELEASE
                ;;
            sun4)
-               echo sparc-sun-sunos"$UNAME_RELEASE"
+               GUESS=sparc-sun-sunos$UNAME_RELEASE
                ;;
        esac
-       exit ;;
+       ;;
     aushp:SunOS:*:*)
-       echo sparc-auspex-sunos"$UNAME_RELEASE"
-       exit ;;
+       GUESS=sparc-auspex-sunos$UNAME_RELEASE
+       ;;
     # The situation for MiNT is a little confusing.  The machine name
     # can be virtually everything (everything which is not
     # "atarist" or "atariste" at least should have a processor
@@ -455,41 +490,41 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
     # MiNT.  But MiNT is downward compatible to TOS, so this should
     # be no problem.
     atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
-       echo m68k-atari-mint"$UNAME_RELEASE"
-       exit ;;
+       GUESS=m68k-atari-mint$UNAME_RELEASE
+       ;;
     atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
-       echo m68k-atari-mint"$UNAME_RELEASE"
-       exit ;;
+       GUESS=m68k-atari-mint$UNAME_RELEASE
+       ;;
     *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
-       echo m68k-atari-mint"$UNAME_RELEASE"
-       exit ;;
+       GUESS=m68k-atari-mint$UNAME_RELEASE
+       ;;
     milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
-       echo m68k-milan-mint"$UNAME_RELEASE"
-       exit ;;
+       GUESS=m68k-milan-mint$UNAME_RELEASE
+       ;;
     hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
-       echo m68k-hades-mint"$UNAME_RELEASE"
-       exit ;;
+       GUESS=m68k-hades-mint$UNAME_RELEASE
+       ;;
     *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
-       echo m68k-unknown-mint"$UNAME_RELEASE"
-       exit ;;
+       GUESS=m68k-unknown-mint$UNAME_RELEASE
+       ;;
     m68k:machten:*:*)
-       echo m68k-apple-machten"$UNAME_RELEASE"
-       exit ;;
+       GUESS=m68k-apple-machten$UNAME_RELEASE
+       ;;
     powerpc:machten:*:*)
-       echo powerpc-apple-machten"$UNAME_RELEASE"
-       exit ;;
+       GUESS=powerpc-apple-machten$UNAME_RELEASE
+       ;;
     RISC*:Mach:*:*)
-       echo mips-dec-mach_bsd4.3
-       exit ;;
+       GUESS=mips-dec-mach_bsd4.3
+       ;;
     RISC*:ULTRIX:*:*)
-       echo mips-dec-ultrix"$UNAME_RELEASE"
-       exit ;;
+       GUESS=mips-dec-ultrix$UNAME_RELEASE
+       ;;
     VAX*:ULTRIX*:*:*)
-       echo vax-dec-ultrix"$UNAME_RELEASE"
-       exit ;;
+       GUESS=vax-dec-ultrix$UNAME_RELEASE
+       ;;
     2020:CLIX:*:* | 2430:CLIX:*:*)
-       echo clipper-intergraph-clix"$UNAME_RELEASE"
-       exit ;;
+       GUESS=clipper-intergraph-clix$UNAME_RELEASE
+       ;;
     mips:*:*:UMIPS | mips:*:*:RISCos)
        set_cc_for_build
        sed 's/^        //' << EOF > "$dummy.c"
@@ -514,78 +549,79 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
        }
 EOF
        $CC_FOR_BUILD -o "$dummy" "$dummy.c" &&
-         dummyarg=$(echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p') &&
-         SYSTEM_NAME=$("$dummy" "$dummyarg") &&
+         dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+         SYSTEM_NAME=`"$dummy" "$dummyarg"` &&
            { echo "$SYSTEM_NAME"; exit; }
-       echo mips-mips-riscos"$UNAME_RELEASE"
-       exit ;;
+       GUESS=mips-mips-riscos$UNAME_RELEASE
+       ;;
     Motorola:PowerMAX_OS:*:*)
-       echo powerpc-motorola-powermax
-       exit ;;
+       GUESS=powerpc-motorola-powermax
+       ;;
     Motorola:*:4.3:PL8-*)
-       echo powerpc-harris-powermax
-       exit ;;
+       GUESS=powerpc-harris-powermax
+       ;;
     Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
-       echo powerpc-harris-powermax
-       exit ;;
+       GUESS=powerpc-harris-powermax
+       ;;
     Night_Hawk:Power_UNIX:*:*)
-       echo powerpc-harris-powerunix
-       exit ;;
+       GUESS=powerpc-harris-powerunix
+       ;;
     m88k:CX/UX:7*:*)
-       echo m88k-harris-cxux7
-       exit ;;
+       GUESS=m88k-harris-cxux7
+       ;;
     m88k:*:4*:R4*)
-       echo m88k-motorola-sysv4
-       exit ;;
+       GUESS=m88k-motorola-sysv4
+       ;;
     m88k:*:3*:R3*)
-       echo m88k-motorola-sysv3
-       exit ;;
+       GUESS=m88k-motorola-sysv3
+       ;;
     AViiON:dgux:*:*)
        # DG/UX returns AViiON for all architectures
-       UNAME_PROCESSOR=$(/usr/bin/uname -p)
+       UNAME_PROCESSOR=`/usr/bin/uname -p`
        if test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110
        then
            if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || \
               test "$TARGET_BINARY_INTERFACE"x = x
            then
-               echo m88k-dg-dgux"$UNAME_RELEASE"
+               GUESS=m88k-dg-dgux$UNAME_RELEASE
            else
-               echo m88k-dg-dguxbcs"$UNAME_RELEASE"
+               GUESS=m88k-dg-dguxbcs$UNAME_RELEASE
            fi
        else
-           echo i586-dg-dgux"$UNAME_RELEASE"
+           GUESS=i586-dg-dgux$UNAME_RELEASE
        fi
-       exit ;;
+       ;;
     M88*:DolphinOS:*:*)        # DolphinOS (SVR3)
-       echo m88k-dolphin-sysv3
-       exit ;;
+       GUESS=m88k-dolphin-sysv3
+       ;;
     M88*:*:R3*:*)
        # Delta 88k system running SVR3
-       echo m88k-motorola-sysv3
-       exit ;;
+       GUESS=m88k-motorola-sysv3
+       ;;
     XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
-       echo m88k-tektronix-sysv3
-       exit ;;
+       GUESS=m88k-tektronix-sysv3
+       ;;
     Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
-       echo m68k-tektronix-bsd
-       exit ;;
+       GUESS=m68k-tektronix-bsd
+       ;;
     *:IRIX*:*:*)
-       echo mips-sgi-irix"$(echo "$UNAME_RELEASE"|sed -e 's/-/_/g')"
-       exit ;;
+       IRIX_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/g'`
+       GUESS=mips-sgi-irix$IRIX_REL
+       ;;
     ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
-       echo romp-ibm-aix     # uname -m gives an 8 hex-code CPU id
-       exit ;;               # Note that: echo "'$(uname -s)'" gives 'AIX '
+       GUESS=romp-ibm-aix    # uname -m gives an 8 hex-code CPU id
+       ;;                    # Note that: echo "'`uname -s`'" gives 'AIX '
     i*86:AIX:*:*)
-       echo i386-ibm-aix
-       exit ;;
+       GUESS=i386-ibm-aix
+       ;;
     ia64:AIX:*:*)
        if test -x /usr/bin/oslevel ; then
-               IBM_REV=$(/usr/bin/oslevel)
+               IBM_REV=`/usr/bin/oslevel`
        else
-               IBM_REV="$UNAME_VERSION.$UNAME_RELEASE"
+               IBM_REV=$UNAME_VERSION.$UNAME_RELEASE
        fi
-       echo "$UNAME_MACHINE"-ibm-aix"$IBM_REV"
-       exit ;;
+       GUESS=$UNAME_MACHINE-ibm-aix$IBM_REV
+       ;;
     *:AIX:2:3)
        if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
                set_cc_for_build
@@ -600,68 +636,68 @@ EOF
                        exit(0);
                        }
 EOF
-               if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=$("$dummy")
+               if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"`
                then
-                       echo "$SYSTEM_NAME"
+                       GUESS=$SYSTEM_NAME
                else
-                       echo rs6000-ibm-aix3.2.5
+                       GUESS=rs6000-ibm-aix3.2.5
                fi
        elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
-               echo rs6000-ibm-aix3.2.4
+               GUESS=rs6000-ibm-aix3.2.4
        else
-               echo rs6000-ibm-aix3.2
+               GUESS=rs6000-ibm-aix3.2
        fi
-       exit ;;
+       ;;
     *:AIX:*:[4567])
-       IBM_CPU_ID=$(/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }')
+       IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
        if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then
                IBM_ARCH=rs6000
        else
                IBM_ARCH=powerpc
        fi
        if test -x /usr/bin/lslpp ; then
-               IBM_REV=$(/usr/bin/lslpp -Lqc bos.rte.libc |
-                          awk -F: '{ print $3 }' | sed s/[0-9]*$/0/)
+               IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | \
+                          awk -F: '{ print $3 }' | sed s/[0-9]*$/0/`
        else
-               IBM_REV="$UNAME_VERSION.$UNAME_RELEASE"
+               IBM_REV=$UNAME_VERSION.$UNAME_RELEASE
        fi
-       echo "$IBM_ARCH"-ibm-aix"$IBM_REV"
-       exit ;;
+       GUESS=$IBM_ARCH-ibm-aix$IBM_REV
+       ;;
     *:AIX:*:*)
-       echo rs6000-ibm-aix
-       exit ;;
+       GUESS=rs6000-ibm-aix
+       ;;
     ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*)
-       echo romp-ibm-bsd4.4
-       exit ;;
+       GUESS=romp-ibm-bsd4.4
+       ;;
     ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
-       echo romp-ibm-bsd"$UNAME_RELEASE"   # 4.3 with uname added to
-       exit ;;                             # report: romp-ibm BSD 4.3
+       GUESS=romp-ibm-bsd$UNAME_RELEASE    # 4.3 with uname added to
+       ;;                                  # report: romp-ibm BSD 4.3
     *:BOSX:*:*)
-       echo rs6000-bull-bosx
-       exit ;;
+       GUESS=rs6000-bull-bosx
+       ;;
     DPX/2?00:B.O.S.:*:*)
-       echo m68k-bull-sysv3
-       exit ;;
+       GUESS=m68k-bull-sysv3
+       ;;
     9000/[34]??:4.3bsd:1.*:*)
-       echo m68k-hp-bsd
-       exit ;;
+       GUESS=m68k-hp-bsd
+       ;;
     hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
-       echo m68k-hp-bsd4.4
-       exit ;;
+       GUESS=m68k-hp-bsd4.4
+       ;;
     9000/[34678]??:HP-UX:*:*)
-       HPUX_REV=$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//')
-       case "$UNAME_MACHINE" in
+       HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'`
+       case $UNAME_MACHINE in
            9000/31?)            HP_ARCH=m68000 ;;
            9000/[34]??)         HP_ARCH=m68k ;;
            9000/[678][0-9][0-9])
                if test -x /usr/bin/getconf; then
-                   sc_cpu_version=$(/usr/bin/getconf SC_CPU_VERSION 2>/dev/null)
-                   sc_kernel_bits=$(/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null)
-                   case "$sc_cpu_version" in
+                   sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+                   sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+                   case $sc_cpu_version in
                      523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0
                      528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1
                      532)                      # CPU_PA_RISC2_0
-                       case "$sc_kernel_bits" in
+                       case $sc_kernel_bits in
                          32) HP_ARCH=hppa2.0n ;;
                          64) HP_ARCH=hppa2.0w ;;
                          '') HP_ARCH=hppa2.0 ;;   # HP-UX 10.20
@@ -703,7 +739,7 @@ EOF
                    exit (0);
                }
 EOF
-                   (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=$("$dummy")
+                   (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"`
                    test -z "$HP_ARCH" && HP_ARCH=hppa
                fi ;;
        esac
@@ -728,12 +764,12 @@ EOF
                HP_ARCH=hppa64
            fi
        fi
-       echo "$HP_ARCH"-hp-hpux"$HPUX_REV"
-       exit ;;
+       GUESS=$HP_ARCH-hp-hpux$HPUX_REV
+       ;;
     ia64:HP-UX:*:*)
-       HPUX_REV=$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//')
-       echo ia64-hp-hpux"$HPUX_REV"
-       exit ;;
+       HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'`
+       GUESS=ia64-hp-hpux$HPUX_REV
+       ;;
     3050*:HI-UX:*:*)
        set_cc_for_build
        sed 's/^        //' << EOF > "$dummy.c"
@@ -761,38 +797,38 @@ EOF
          exit (0);
        }
 EOF
-       $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=$("$dummy") &&
+       $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` &&
                { echo "$SYSTEM_NAME"; exit; }
-       echo unknown-hitachi-hiuxwe2
-       exit ;;
+       GUESS=unknown-hitachi-hiuxwe2
+       ;;
     9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*)
-       echo hppa1.1-hp-bsd
-       exit ;;
+       GUESS=hppa1.1-hp-bsd
+       ;;
     9000/8??:4.3bsd:*:*)
-       echo hppa1.0-hp-bsd
-       exit ;;
+       GUESS=hppa1.0-hp-bsd
+       ;;
     *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
-       echo hppa1.0-hp-mpeix
-       exit ;;
+       GUESS=hppa1.0-hp-mpeix
+       ;;
     hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*)
-       echo hppa1.1-hp-osf
-       exit ;;
+       GUESS=hppa1.1-hp-osf
+       ;;
     hp8??:OSF1:*:*)
-       echo hppa1.0-hp-osf
-       exit ;;
+       GUESS=hppa1.0-hp-osf
+       ;;
     i*86:OSF1:*:*)
        if test -x /usr/sbin/sysversion ; then
-           echo "$UNAME_MACHINE"-unknown-osf1mk
+           GUESS=$UNAME_MACHINE-unknown-osf1mk
        else
-           echo "$UNAME_MACHINE"-unknown-osf1
+           GUESS=$UNAME_MACHINE-unknown-osf1
        fi
-       exit ;;
+       ;;
     parisc*:Lites*:*:*)
-       echo hppa1.1-hp-lites
-       exit ;;
+       GUESS=hppa1.1-hp-lites
+       ;;
     C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
-       echo c1-convex-bsd
-       exit ;;
+       GUESS=c1-convex-bsd
+       ;;
     C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
        if getsysinfo -f scalar_acc
        then echo c32-convex-bsd
@@ -800,17 +836,18 @@ EOF
        fi
        exit ;;
     C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
-       echo c34-convex-bsd
-       exit ;;
+       GUESS=c34-convex-bsd
+       ;;
     C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
-       echo c38-convex-bsd
-       exit ;;
+       GUESS=c38-convex-bsd
+       ;;
     C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
-       echo c4-convex-bsd
-       exit ;;
+       GUESS=c4-convex-bsd
+       ;;
     CRAY*Y-MP:*:*:*)
-       echo ymp-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
-       exit ;;
+       CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'`
+       GUESS=ymp-cray-unicos$CRAY_REL
+       ;;
     CRAY*[A-Z]90:*:*:*)
        echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \
        | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
@@ -818,114 +855,129 @@ EOF
              -e 's/\.[^.]*$/.X/'
        exit ;;
     CRAY*TS:*:*:*)
-       echo t90-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
-       exit ;;
+       CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'`
+       GUESS=t90-cray-unicos$CRAY_REL
+       ;;
     CRAY*T3E:*:*:*)
-       echo alphaev5-cray-unicosmk"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
-       exit ;;
+       CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'`
+       GUESS=alphaev5-cray-unicosmk$CRAY_REL
+       ;;
     CRAY*SV1:*:*:*)
-       echo sv1-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
-       exit ;;
+       CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'`
+       GUESS=sv1-cray-unicos$CRAY_REL
+       ;;
     *:UNICOS/mp:*:*)
-       echo craynv-cray-unicosmp"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
-       exit ;;
+       CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'`
+       GUESS=craynv-cray-unicosmp$CRAY_REL
+       ;;
     F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
-       FUJITSU_PROC=$(uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz)
-       FUJITSU_SYS=$(uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///')
-       FUJITSU_REL=$(echo "$UNAME_RELEASE" | sed -e 's/ /_/')
-       echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-       exit ;;
+       FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
+       FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
+       FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'`
+       GUESS=${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}
+       ;;
     5000:UNIX_System_V:4.*:*)
-       FUJITSU_SYS=$(uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///')
-       FUJITSU_REL=$(echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/')
-       echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-       exit ;;
+       FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
+       FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'`
+       GUESS=sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}
+       ;;
     i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
-       echo "$UNAME_MACHINE"-pc-bsdi"$UNAME_RELEASE"
-       exit ;;
+       GUESS=$UNAME_MACHINE-pc-bsdi$UNAME_RELEASE
+       ;;
     sparc*:BSD/OS:*:*)
-       echo sparc-unknown-bsdi"$UNAME_RELEASE"
-       exit ;;
+       GUESS=sparc-unknown-bsdi$UNAME_RELEASE
+       ;;
     *:BSD/OS:*:*)
-       echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE"
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-bsdi$UNAME_RELEASE
+       ;;
     arm:FreeBSD:*:*)
-       UNAME_PROCESSOR=$(uname -p)
+       UNAME_PROCESSOR=`uname -p`
        set_cc_for_build
        if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
            | grep -q __ARM_PCS_VFP
        then
-           echo "${UNAME_PROCESSOR}"-unknown-freebsd"$(echo ${UNAME_RELEASE}|sed -e 's/[-(].*//')"-gnueabi
+           FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
+           GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabi
        else
-           echo "${UNAME_PROCESSOR}"-unknown-freebsd"$(echo ${UNAME_RELEASE}|sed -e 's/[-(].*//')"-gnueabihf
+           FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
+           GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabihf
        fi
-       exit ;;
+       ;;
     *:FreeBSD:*:*)
-       UNAME_PROCESSOR=$(/usr/bin/uname -p)
-       case "$UNAME_PROCESSOR" in
+       UNAME_PROCESSOR=`/usr/bin/uname -p`
+       case $UNAME_PROCESSOR in
            amd64)
                UNAME_PROCESSOR=x86_64 ;;
            i386)
                UNAME_PROCESSOR=i586 ;;
        esac
-       echo "$UNAME_PROCESSOR"-unknown-freebsd"$(echo "$UNAME_RELEASE"|sed -e 's/[-(].*//')"
-       exit ;;
+       FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
+       GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL
+       ;;
     i*:CYGWIN*:*)
-       echo "$UNAME_MACHINE"-pc-cygwin
-       exit ;;
+       GUESS=$UNAME_MACHINE-pc-cygwin
+       ;;
     *:MINGW64*:*)
-       echo "$UNAME_MACHINE"-pc-mingw64
-       exit ;;
+       GUESS=$UNAME_MACHINE-pc-mingw64
+       ;;
     *:MINGW*:*)
-       echo "$UNAME_MACHINE"-pc-mingw32
-       exit ;;
+       GUESS=$UNAME_MACHINE-pc-mingw32
+       ;;
     *:MSYS*:*)
-       echo "$UNAME_MACHINE"-pc-msys
-       exit ;;
+       GUESS=$UNAME_MACHINE-pc-msys
+       ;;
     i*:PW*:*)
-       echo "$UNAME_MACHINE"-pc-pw32
-       exit ;;
+       GUESS=$UNAME_MACHINE-pc-pw32
+       ;;
+    *:SerenityOS:*:*)
+        GUESS=$UNAME_MACHINE-pc-serenity
+        ;;
     *:Interix*:*)
-       case "$UNAME_MACHINE" in
+       case $UNAME_MACHINE in
            x86)
-               echo i586-pc-interix"$UNAME_RELEASE"
-               exit ;;
+               GUESS=i586-pc-interix$UNAME_RELEASE
+               ;;
            authenticamd | genuineintel | EM64T)
-               echo x86_64-unknown-interix"$UNAME_RELEASE"
-               exit ;;
+               GUESS=x86_64-unknown-interix$UNAME_RELEASE
+               ;;
            IA64)
-               echo ia64-unknown-interix"$UNAME_RELEASE"
-               exit ;;
+               GUESS=ia64-unknown-interix$UNAME_RELEASE
+               ;;
        esac ;;
     i*:UWIN*:*)
-       echo "$UNAME_MACHINE"-pc-uwin
-       exit ;;
+       GUESS=$UNAME_MACHINE-pc-uwin
+       ;;
     amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
-       echo x86_64-pc-cygwin
-       exit ;;
+       GUESS=x86_64-pc-cygwin
+       ;;
     prep*:SunOS:5.*:*)
-       echo powerpcle-unknown-solaris2"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')"
-       exit ;;
+       SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+       GUESS=powerpcle-unknown-solaris2$SUN_REL
+       ;;
     *:GNU:*:*)
        # the GNU system
-       echo "$(echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,')-unknown-$LIBC$(echo "$UNAME_RELEASE"|sed -e 's,/.*$,,')"
-       exit ;;
+       GNU_ARCH=`echo "$UNAME_MACHINE" | sed -e 's,[-/].*$,,'`
+       GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's,/.*$,,'`
+       GUESS=$GNU_ARCH-unknown-$LIBC$GNU_REL
+       ;;
     *:GNU/*:*:*)
        # other systems with GNU libc and userland
-       echo "$UNAME_MACHINE-unknown-$(echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]")$(echo "$UNAME_RELEASE"|sed -e 's/[-(].*//')-$LIBC"
-       exit ;;
+       GNU_SYS=`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"`
+       GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
+       GUESS=$UNAME_MACHINE-unknown-$GNU_SYS$GNU_REL-$LIBC
+       ;;
     *:Minix:*:*)
-       echo "$UNAME_MACHINE"-unknown-minix
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-minix
+       ;;
     aarch64:Linux:*:*)
-       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+       ;;
     aarch64_be:Linux:*:*)
        UNAME_MACHINE=aarch64_be
-       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+       ;;
     alpha:Linux:*:*)
-       case $(sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null) in
+       case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null` in
          EV5)   UNAME_MACHINE=alphaev5 ;;
          EV56)  UNAME_MACHINE=alphaev56 ;;
          PCA56) UNAME_MACHINE=alphapca56 ;;
@@ -936,60 +988,63 @@ EOF
        esac
        objdump --private-headers /bin/sh | grep -q ld.so.1
        if test "$?" = 0 ; then LIBC=gnulibc1 ; fi
-       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-       exit ;;
-    arc:Linux:*:* | arceb:Linux:*:*)
-       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+       ;;
+    arc:Linux:*:* | arceb:Linux:*:* | arc32:Linux:*:* | arc64:Linux:*:*)
+       GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+       ;;
     arm*:Linux:*:*)
        set_cc_for_build
        if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
            | grep -q __ARM_EABI__
        then
-           echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+           GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
        else
            if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
                | grep -q __ARM_PCS_VFP
            then
-               echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabi
+               GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabi
            else
-               echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabihf
+               GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabihf
            fi
        fi
-       exit ;;
+       ;;
     avr32*:Linux:*:*)
-       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+       ;;
     cris:Linux:*:*)
-       echo "$UNAME_MACHINE"-axis-linux-"$LIBC"
-       exit ;;
+       GUESS=$UNAME_MACHINE-axis-linux-$LIBC
+       ;;
     crisv32:Linux:*:*)
-       echo "$UNAME_MACHINE"-axis-linux-"$LIBC"
-       exit ;;
+       GUESS=$UNAME_MACHINE-axis-linux-$LIBC
+       ;;
     e2k:Linux:*:*)
-       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+       ;;
     frv:Linux:*:*)
-       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+       ;;
     hexagon:Linux:*:*)
-       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+       ;;
     i*86:Linux:*:*)
-       echo "$UNAME_MACHINE"-pc-linux-"$LIBC"
-       exit ;;
+       GUESS=$UNAME_MACHINE-pc-linux-$LIBC
+       ;;
     ia64:Linux:*:*)
-       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+       ;;
     k1om:Linux:*:*)
-       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+       ;;
+    loongarch32:Linux:*:* | loongarch64:Linux:*:* | loongarchx32:Linux:*:*)
+       GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+       ;;
     m32r*:Linux:*:*)
-       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+       ;;
     m68*:Linux:*:*)
-       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+       ;;
     mips:Linux:*:* | mips64:Linux:*:*)
        set_cc_for_build
        IS_GLIBC=0
@@ -1034,65 +1089,66 @@ EOF
        #endif
        #endif
 EOF
-       eval "$($CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI')"
+       cc_set_vars=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'`
+       eval "$cc_set_vars"
        test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; }
        ;;
     mips64el:Linux:*:*)
-       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+       ;;
     openrisc*:Linux:*:*)
-       echo or1k-unknown-linux-"$LIBC"
-       exit ;;
+       GUESS=or1k-unknown-linux-$LIBC
+       ;;
     or32:Linux:*:* | or1k*:Linux:*:*)
-       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+       ;;
     padre:Linux:*:*)
-       echo sparc-unknown-linux-"$LIBC"
-       exit ;;
+       GUESS=sparc-unknown-linux-$LIBC
+       ;;
     parisc64:Linux:*:* | hppa64:Linux:*:*)
-       echo hppa64-unknown-linux-"$LIBC"
-       exit ;;
+       GUESS=hppa64-unknown-linux-$LIBC
+       ;;
     parisc:Linux:*:* | hppa:Linux:*:*)
        # Look for CPU level
-       case $(grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2) in
-         PA7*) echo hppa1.1-unknown-linux-"$LIBC" ;;
-         PA8*) echo hppa2.0-unknown-linux-"$LIBC" ;;
-         *)    echo hppa-unknown-linux-"$LIBC" ;;
+       case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+         PA7*) GUESS=hppa1.1-unknown-linux-$LIBC ;;
+         PA8*) GUESS=hppa2.0-unknown-linux-$LIBC ;;
+         *)    GUESS=hppa-unknown-linux-$LIBC ;;
        esac
-       exit ;;
+       ;;
     ppc64:Linux:*:*)
-       echo powerpc64-unknown-linux-"$LIBC"
-       exit ;;
+       GUESS=powerpc64-unknown-linux-$LIBC
+       ;;
     ppc:Linux:*:*)
-       echo powerpc-unknown-linux-"$LIBC"
-       exit ;;
+       GUESS=powerpc-unknown-linux-$LIBC
+       ;;
     ppc64le:Linux:*:*)
-       echo powerpc64le-unknown-linux-"$LIBC"
-       exit ;;
+       GUESS=powerpc64le-unknown-linux-$LIBC
+       ;;
     ppcle:Linux:*:*)
-       echo powerpcle-unknown-linux-"$LIBC"
-       exit ;;
-    riscv32:Linux:*:* | riscv64:Linux:*:*)
-       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-       exit ;;
+       GUESS=powerpcle-unknown-linux-$LIBC
+       ;;
+    riscv32:Linux:*:* | riscv32be:Linux:*:* | riscv64:Linux:*:* | riscv64be:Linux:*:*)
+       GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+       ;;
     s390:Linux:*:* | s390x:Linux:*:*)
-       echo "$UNAME_MACHINE"-ibm-linux-"$LIBC"
-       exit ;;
+       GUESS=$UNAME_MACHINE-ibm-linux-$LIBC
+       ;;
     sh64*:Linux:*:*)
-       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+       ;;
     sh*:Linux:*:*)
-       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+       ;;
     sparc:Linux:*:* | sparc64:Linux:*:*)
-       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+       ;;
     tile*:Linux:*:*)
-       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+       ;;
     vax:Linux:*:*)
-       echo "$UNAME_MACHINE"-dec-linux-"$LIBC"
-       exit ;;
+       GUESS=$UNAME_MACHINE-dec-linux-$LIBC
+       ;;
     x86_64:Linux:*:*)
        set_cc_for_build
        LIBCABI=$LIBC
@@ -1101,71 +1157,71 @@ EOF
                (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
                grep IS_X32 >/dev/null
            then
-               LIBCABI="$LIBC"x32
+               LIBCABI=${LIBC}x32
            fi
        fi
-       echo "$UNAME_MACHINE"-pc-linux-"$LIBCABI"
-       exit ;;
+       GUESS=$UNAME_MACHINE-pc-linux-$LIBCABI
+       ;;
     xtensa*:Linux:*:*)
-       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+       ;;
     i*86:DYNIX/ptx:4*:*)
        # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
        # earlier versions are messed up and put the nodename in both
        # sysname and nodename.
-       echo i386-sequent-sysv4
-       exit ;;
+       GUESS=i386-sequent-sysv4
+       ;;
     i*86:UNIX_SV:4.2MP:2.*)
        # Unixware is an offshoot of SVR4, but it has its own version
        # number series starting with 2...
        # I am not positive that other SVR4 systems won't match this,
        # I just have to hope.  -- rms.
        # Use sysv4.2uw... so that sysv4* matches it.
-       echo "$UNAME_MACHINE"-pc-sysv4.2uw"$UNAME_VERSION"
-       exit ;;
+       GUESS=$UNAME_MACHINE-pc-sysv4.2uw$UNAME_VERSION
+       ;;
     i*86:OS/2:*:*)
        # If we were able to find `uname', then EMX Unix compatibility
        # is probably installed.
-       echo "$UNAME_MACHINE"-pc-os2-emx
-       exit ;;
+       GUESS=$UNAME_MACHINE-pc-os2-emx
+       ;;
     i*86:XTS-300:*:STOP)
-       echo "$UNAME_MACHINE"-unknown-stop
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-stop
+       ;;
     i*86:atheos:*:*)
-       echo "$UNAME_MACHINE"-unknown-atheos
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-atheos
+       ;;
     i*86:syllable:*:*)
-       echo "$UNAME_MACHINE"-pc-syllable
-       exit ;;
+       GUESS=$UNAME_MACHINE-pc-syllable
+       ;;
     i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
-       echo i386-unknown-lynxos"$UNAME_RELEASE"
-       exit ;;
+       GUESS=i386-unknown-lynxos$UNAME_RELEASE
+       ;;
     i*86:*DOS:*:*)
-       echo "$UNAME_MACHINE"-pc-msdosdjgpp
-       exit ;;
+       GUESS=$UNAME_MACHINE-pc-msdosdjgpp
+       ;;
     i*86:*:4.*:*)
-       UNAME_REL=$(echo "$UNAME_RELEASE" | sed 's/\/MP$//')
+       UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'`
        if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
-               echo "$UNAME_MACHINE"-univel-sysv"$UNAME_REL"
+               GUESS=$UNAME_MACHINE-univel-sysv$UNAME_REL
        else
-               echo "$UNAME_MACHINE"-pc-sysv"$UNAME_REL"
+               GUESS=$UNAME_MACHINE-pc-sysv$UNAME_REL
        fi
-       exit ;;
+       ;;
     i*86:*:5:[678]*)
        # UnixWare 7.x, OpenUNIX and OpenServer 6.
-       case $(/bin/uname -X | grep "^Machine") in
+       case `/bin/uname -X | grep "^Machine"` in
            *486*)           UNAME_MACHINE=i486 ;;
            *Pentium)        UNAME_MACHINE=i586 ;;
            *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
        esac
-       echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}"
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+       ;;
     i*86:*:3.2:*)
        if test -f /usr/options/cb.name; then
-               UNAME_REL=$(sed -n 's/.*Version //p' </usr/options/cb.name)
-               echo "$UNAME_MACHINE"-pc-isc"$UNAME_REL"
+               UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+               GUESS=$UNAME_MACHINE-pc-isc$UNAME_REL
        elif /bin/uname -X 2>/dev/null >/dev/null ; then
-               UNAME_REL=$( (/bin/uname -X|grep Release|sed -e 's/.*= //'))
+               UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
                (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
                (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
                        && UNAME_MACHINE=i586
@@ -1173,11 +1229,11 @@ EOF
                        && UNAME_MACHINE=i686
                (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
                        && UNAME_MACHINE=i686
-               echo "$UNAME_MACHINE"-pc-sco"$UNAME_REL"
+               GUESS=$UNAME_MACHINE-pc-sco$UNAME_REL
        else
-               echo "$UNAME_MACHINE"-pc-sysv32
+               GUESS=$UNAME_MACHINE-pc-sysv32
        fi
-       exit ;;
+       ;;
     pc:*:*:*)
        # Left here for compatibility:
        # uname -m prints for DJGPP always 'pc', but it prints nothing about
@@ -1185,37 +1241,37 @@ EOF
        # Note: whatever this is, it MUST be the same as what config.sub
        # prints for the "djgpp" host, or else GDB configure will decide that
        # this is a cross-build.
-       echo i586-pc-msdosdjgpp
-       exit ;;
+       GUESS=i586-pc-msdosdjgpp
+       ;;
     Intel:Mach:3*:*)
-       echo i386-pc-mach3
-       exit ;;
+       GUESS=i386-pc-mach3
+       ;;
     paragon:*:*:*)
-       echo i860-intel-osf1
-       exit ;;
+       GUESS=i860-intel-osf1
+       ;;
     i860:*:4.*:*) # i860-SVR4
        if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
-         echo i860-stardent-sysv"$UNAME_RELEASE" # Stardent Vistra i860-SVR4
+         GUESS=i860-stardent-sysv$UNAME_RELEASE    # Stardent Vistra i860-SVR4
        else # Add other i860-SVR4 vendors below as they are discovered.
-         echo i860-unknown-sysv"$UNAME_RELEASE"  # Unknown i860-SVR4
+         GUESS=i860-unknown-sysv$UNAME_RELEASE     # Unknown i860-SVR4
        fi
-       exit ;;
+       ;;
     mini*:CTIX:SYS*5:*)
        # "miniframe"
-       echo m68010-convergent-sysv
-       exit ;;
+       GUESS=m68010-convergent-sysv
+       ;;
     mc68k:UNIX:SYSTEM5:3.51m)
-       echo m68k-convergent-sysv
-       exit ;;
+       GUESS=m68k-convergent-sysv
+       ;;
     M680?0:D-NIX:5.3:*)
-       echo m68k-diab-dnix
-       exit ;;
+       GUESS=m68k-diab-dnix
+       ;;
     M68*:*:R3V[5678]*:*)
        test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
     3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
        OS_REL=''
        test -r /etc/.relid \
-       && OS_REL=.$(sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid)
+       && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
          && { echo i486-ncr-sysv4.3"$OS_REL"; exit; }
        /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
@@ -1226,7 +1282,7 @@ EOF
     NCR*:*:4.2:* | MPRAS*:*:4.2:*)
        OS_REL='.3'
        test -r /etc/.relid \
-           && OS_REL=.$(sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid)
+           && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
            && { echo i486-ncr-sysv4.3"$OS_REL"; exit; }
        /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
@@ -1234,118 +1290,118 @@ EOF
        /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
            && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;;
     m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
-       echo m68k-unknown-lynxos"$UNAME_RELEASE"
-       exit ;;
+       GUESS=m68k-unknown-lynxos$UNAME_RELEASE
+       ;;
     mc68030:UNIX_System_V:4.*:*)
-       echo m68k-atari-sysv4
-       exit ;;
+       GUESS=m68k-atari-sysv4
+       ;;
     TSUNAMI:LynxOS:2.*:*)
-       echo sparc-unknown-lynxos"$UNAME_RELEASE"
-       exit ;;
+       GUESS=sparc-unknown-lynxos$UNAME_RELEASE
+       ;;
     rs6000:LynxOS:2.*:*)
-       echo rs6000-unknown-lynxos"$UNAME_RELEASE"
-       exit ;;
+       GUESS=rs6000-unknown-lynxos$UNAME_RELEASE
+       ;;
     PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
-       echo powerpc-unknown-lynxos"$UNAME_RELEASE"
-       exit ;;
+       GUESS=powerpc-unknown-lynxos$UNAME_RELEASE
+       ;;
     SM[BE]S:UNIX_SV:*:*)
-       echo mips-dde-sysv"$UNAME_RELEASE"
-       exit ;;
+       GUESS=mips-dde-sysv$UNAME_RELEASE
+       ;;
     RM*:ReliantUNIX-*:*:*)
-       echo mips-sni-sysv4
-       exit ;;
+       GUESS=mips-sni-sysv4
+       ;;
     RM*:SINIX-*:*:*)
-       echo mips-sni-sysv4
-       exit ;;
+       GUESS=mips-sni-sysv4
+       ;;
     *:SINIX-*:*:*)
        if uname -p 2>/dev/null >/dev/null ; then
-               UNAME_MACHINE=$( (uname -p) 2>/dev/null)
-               echo "$UNAME_MACHINE"-sni-sysv4
+               UNAME_MACHINE=`(uname -p) 2>/dev/null`
+               GUESS=$UNAME_MACHINE-sni-sysv4
        else
-               echo ns32k-sni-sysv
+               GUESS=ns32k-sni-sysv
        fi
-       exit ;;
+       ;;
     PENTIUM:*:4.0*:*)  # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
                        # says <Richard.M.Bartel@ccMail.Census.GOV>
-       echo i586-unisys-sysv4
-       exit ;;
+       GUESS=i586-unisys-sysv4
+       ;;
     *:UNIX_System_V:4*:FTX*)
        # From Gerald Hewes <hewes@openmarket.com>.
        # How about differentiating between stratus architectures? -djm
-       echo hppa1.1-stratus-sysv4
-       exit ;;
+       GUESS=hppa1.1-stratus-sysv4
+       ;;
     *:*:*:FTX*)
        # From seanf@swdc.stratus.com.
-       echo i860-stratus-sysv4
-       exit ;;
+       GUESS=i860-stratus-sysv4
+       ;;
     i*86:VOS:*:*)
        # From Paul.Green@stratus.com.
-       echo "$UNAME_MACHINE"-stratus-vos
-       exit ;;
+       GUESS=$UNAME_MACHINE-stratus-vos
+       ;;
     *:VOS:*:*)
        # From Paul.Green@stratus.com.
-       echo hppa1.1-stratus-vos
-       exit ;;
+       GUESS=hppa1.1-stratus-vos
+       ;;
     mc68*:A/UX:*:*)
-       echo m68k-apple-aux"$UNAME_RELEASE"
-       exit ;;
+       GUESS=m68k-apple-aux$UNAME_RELEASE
+       ;;
     news*:NEWS-OS:6*:*)
-       echo mips-sony-newsos6
-       exit ;;
+       GUESS=mips-sony-newsos6
+       ;;
     R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
        if test -d /usr/nec; then
-               echo mips-nec-sysv"$UNAME_RELEASE"
+               GUESS=mips-nec-sysv$UNAME_RELEASE
        else
-               echo mips-unknown-sysv"$UNAME_RELEASE"
+               GUESS=mips-unknown-sysv$UNAME_RELEASE
        fi
-       exit ;;
+       ;;
     BeBox:BeOS:*:*)    # BeOS running on hardware made by Be, PPC only.
-       echo powerpc-be-beos
-       exit ;;
+       GUESS=powerpc-be-beos
+       ;;
     BeMac:BeOS:*:*)    # BeOS running on Mac or Mac clone, PPC only.
-       echo powerpc-apple-beos
-       exit ;;
+       GUESS=powerpc-apple-beos
+       ;;
     BePC:BeOS:*:*)     # BeOS running on Intel PC compatible.
-       echo i586-pc-beos
-       exit ;;
+       GUESS=i586-pc-beos
+       ;;
     BePC:Haiku:*:*)    # Haiku running on Intel PC compatible.
-       echo i586-pc-haiku
-       exit ;;
+       GUESS=i586-pc-haiku
+       ;;
     x86_64:Haiku:*:*)
-       echo x86_64-unknown-haiku
-       exit ;;
+       GUESS=x86_64-unknown-haiku
+       ;;
     SX-4:SUPER-UX:*:*)
-       echo sx4-nec-superux"$UNAME_RELEASE"
-       exit ;;
+       GUESS=sx4-nec-superux$UNAME_RELEASE
+       ;;
     SX-5:SUPER-UX:*:*)
-       echo sx5-nec-superux"$UNAME_RELEASE"
-       exit ;;
+       GUESS=sx5-nec-superux$UNAME_RELEASE
+       ;;
     SX-6:SUPER-UX:*:*)
-       echo sx6-nec-superux"$UNAME_RELEASE"
-       exit ;;
+       GUESS=sx6-nec-superux$UNAME_RELEASE
+       ;;
     SX-7:SUPER-UX:*:*)
-       echo sx7-nec-superux"$UNAME_RELEASE"
-       exit ;;
+       GUESS=sx7-nec-superux$UNAME_RELEASE
+       ;;
     SX-8:SUPER-UX:*:*)
-       echo sx8-nec-superux"$UNAME_RELEASE"
-       exit ;;
+       GUESS=sx8-nec-superux$UNAME_RELEASE
+       ;;
     SX-8R:SUPER-UX:*:*)
-       echo sx8r-nec-superux"$UNAME_RELEASE"
-       exit ;;
+       GUESS=sx8r-nec-superux$UNAME_RELEASE
+       ;;
     SX-ACE:SUPER-UX:*:*)
-       echo sxace-nec-superux"$UNAME_RELEASE"
-       exit ;;
+       GUESS=sxace-nec-superux$UNAME_RELEASE
+       ;;
     Power*:Rhapsody:*:*)
-       echo powerpc-apple-rhapsody"$UNAME_RELEASE"
-       exit ;;
+       GUESS=powerpc-apple-rhapsody$UNAME_RELEASE
+       ;;
     *:Rhapsody:*:*)
-       echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE"
-       exit ;;
+       GUESS=$UNAME_MACHINE-apple-rhapsody$UNAME_RELEASE
+       ;;
     arm64:Darwin:*:*)
-       echo aarch64-apple-darwin"$UNAME_RELEASE"
-       exit ;;
+       GUESS=aarch64-apple-darwin$UNAME_RELEASE
+       ;;
     *:Darwin:*:*)
-       UNAME_PROCESSOR=$(uname -p)
+       UNAME_PROCESSOR=`uname -p`
        case $UNAME_PROCESSOR in
            unknown) UNAME_PROCESSOR=powerpc ;;
        esac
@@ -1379,109 +1435,119 @@ EOF
            # uname -m returns i386 or x86_64
            UNAME_PROCESSOR=$UNAME_MACHINE
        fi
-       echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE"
-       exit ;;
+       GUESS=$UNAME_PROCESSOR-apple-darwin$UNAME_RELEASE
+       ;;
     *:procnto*:*:* | *:QNX:[0123456789]*:*)
-       UNAME_PROCESSOR=$(uname -p)
+       UNAME_PROCESSOR=`uname -p`
        if test "$UNAME_PROCESSOR" = x86; then
                UNAME_PROCESSOR=i386
                UNAME_MACHINE=pc
        fi
-       echo "$UNAME_PROCESSOR"-"$UNAME_MACHINE"-nto-qnx"$UNAME_RELEASE"
-       exit ;;
+       GUESS=$UNAME_PROCESSOR-$UNAME_MACHINE-nto-qnx$UNAME_RELEASE
+       ;;
     *:QNX:*:4*)
-       echo i386-pc-qnx
-       exit ;;
+       GUESS=i386-pc-qnx
+       ;;
     NEO-*:NONSTOP_KERNEL:*:*)
-       echo neo-tandem-nsk"$UNAME_RELEASE"
-       exit ;;
+       GUESS=neo-tandem-nsk$UNAME_RELEASE
+       ;;
     NSE-*:NONSTOP_KERNEL:*:*)
-       echo nse-tandem-nsk"$UNAME_RELEASE"
-       exit ;;
+       GUESS=nse-tandem-nsk$UNAME_RELEASE
+       ;;
     NSR-*:NONSTOP_KERNEL:*:*)
-       echo nsr-tandem-nsk"$UNAME_RELEASE"
-       exit ;;
+       GUESS=nsr-tandem-nsk$UNAME_RELEASE
+       ;;
     NSV-*:NONSTOP_KERNEL:*:*)
-       echo nsv-tandem-nsk"$UNAME_RELEASE"
-       exit ;;
+       GUESS=nsv-tandem-nsk$UNAME_RELEASE
+       ;;
     NSX-*:NONSTOP_KERNEL:*:*)
-       echo nsx-tandem-nsk"$UNAME_RELEASE"
-       exit ;;
+       GUESS=nsx-tandem-nsk$UNAME_RELEASE
+       ;;
     *:NonStop-UX:*:*)
-       echo mips-compaq-nonstopux
-       exit ;;
+       GUESS=mips-compaq-nonstopux
+       ;;
     BS2000:POSIX*:*:*)
-       echo bs2000-siemens-sysv
-       exit ;;
+       GUESS=bs2000-siemens-sysv
+       ;;
     DS/*:UNIX_System_V:*:*)
-       echo "$UNAME_MACHINE"-"$UNAME_SYSTEM"-"$UNAME_RELEASE"
-       exit ;;
+       GUESS=$UNAME_MACHINE-$UNAME_SYSTEM-$UNAME_RELEASE
+       ;;
     *:Plan9:*:*)
        # "uname -m" is not consistent, so use $cputype instead. 386
        # is converted to i386 for consistency with other x86
        # operating systems.
-       # shellcheck disable=SC2154
-       if test "$cputype" = 386; then
+       if test "${cputype-}" = 386; then
            UNAME_MACHINE=i386
-       else
-           UNAME_MACHINE="$cputype"
+       elif test "x${cputype-}" != x; then
+           UNAME_MACHINE=$cputype
        fi
-       echo "$UNAME_MACHINE"-unknown-plan9
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-plan9
+       ;;
     *:TOPS-10:*:*)
-       echo pdp10-unknown-tops10
-       exit ;;
+       GUESS=pdp10-unknown-tops10
+       ;;
     *:TENEX:*:*)
-       echo pdp10-unknown-tenex
-       exit ;;
+       GUESS=pdp10-unknown-tenex
+       ;;
     KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
-       echo pdp10-dec-tops20
-       exit ;;
+       GUESS=pdp10-dec-tops20
+       ;;
     XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
-       echo pdp10-xkl-tops20
-       exit ;;
+       GUESS=pdp10-xkl-tops20
+       ;;
     *:TOPS-20:*:*)
-       echo pdp10-unknown-tops20
-       exit ;;
+       GUESS=pdp10-unknown-tops20
+       ;;
     *:ITS:*:*)
-       echo pdp10-unknown-its
-       exit ;;
+       GUESS=pdp10-unknown-its
+       ;;
     SEI:*:*:SEIUX)
-       echo mips-sei-seiux"$UNAME_RELEASE"
-       exit ;;
+       GUESS=mips-sei-seiux$UNAME_RELEASE
+       ;;
     *:DragonFly:*:*)
-       echo "$UNAME_MACHINE"-unknown-dragonfly"$(echo "$UNAME_RELEASE"|sed -e 's/[-(].*//')"
-       exit ;;
+       DRAGONFLY_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
+       GUESS=$UNAME_MACHINE-unknown-dragonfly$DRAGONFLY_REL
+       ;;
     *:*VMS:*:*)
-       UNAME_MACHINE=$( (uname -p) 2>/dev/null)
-       case "$UNAME_MACHINE" in
-           A*) echo alpha-dec-vms ; exit ;;
-           I*) echo ia64-dec-vms ; exit ;;
-           V*) echo vax-dec-vms ; exit ;;
+       UNAME_MACHINE=`(uname -p) 2>/dev/null`
+       case $UNAME_MACHINE in
+           A*) GUESS=alpha-dec-vms ;;
+           I*) GUESS=ia64-dec-vms ;;
+           V*) GUESS=vax-dec-vms ;;
        esac ;;
     *:XENIX:*:SysV)
-       echo i386-pc-xenix
-       exit ;;
+       GUESS=i386-pc-xenix
+       ;;
     i*86:skyos:*:*)
-       echo "$UNAME_MACHINE"-pc-skyos"$(echo "$UNAME_RELEASE" | sed -e 's/ .*$//')"
-       exit ;;
+       SKYOS_REL=`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`
+       GUESS=$UNAME_MACHINE-pc-skyos$SKYOS_REL
+       ;;
     i*86:rdos:*:*)
-       echo "$UNAME_MACHINE"-pc-rdos
-       exit ;;
-    i*86:AROS:*:*)
-       echo "$UNAME_MACHINE"-pc-aros
-       exit ;;
+       GUESS=$UNAME_MACHINE-pc-rdos
+       ;;
+    i*86:Fiwix:*:*)
+       GUESS=$UNAME_MACHINE-pc-fiwix
+       ;;
+    *:AROS:*:*)
+       GUESS=$UNAME_MACHINE-unknown-aros
+       ;;
     x86_64:VMkernel:*:*)
-       echo "$UNAME_MACHINE"-unknown-esx
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-esx
+       ;;
     amd64:Isilon\ OneFS:*:*)
-       echo x86_64-unknown-onefs
-       exit ;;
+       GUESS=x86_64-unknown-onefs
+       ;;
     *:Unleashed:*:*)
-       echo "$UNAME_MACHINE"-unknown-unleashed"$UNAME_RELEASE"
-       exit ;;
+       GUESS=$UNAME_MACHINE-unknown-unleashed$UNAME_RELEASE
+       ;;
 esac
 
+# Do we have a guess based on uname results?
+if test "x$GUESS" != x; then
+    echo "$GUESS"
+    exit
+fi
+
 # No uname command or uname output not recognized.
 set_cc_for_build
 cat > "$dummy.c" <<EOF
@@ -1521,7 +1587,7 @@ main ()
 #define __ARCHITECTURE__ "m68k"
 #endif
   int version;
-  version=$( (hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null);
+  version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
   if (version < 4)
     printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
   else
@@ -1613,7 +1679,7 @@ main ()
 }
 EOF
 
-$CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=$($dummy) &&
+$CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`"$dummy"` &&
        { echo "$SYSTEM_NAME"; exit; }
 
 # Apollos put the system type in the environment.
@@ -1621,7 +1687,7 @@ test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; }
 
 echo "$0: unable to guess system type" >&2
 
-case "$UNAME_MACHINE:$UNAME_SYSTEM" in
+case $UNAME_MACHINE:$UNAME_SYSTEM in
     mips:Linux | mips64:Linux)
        # If we got here on MIPS GNU/Linux, output extra information.
        cat >&2 <<EOF
@@ -1638,14 +1704,16 @@ This script (version $timestamp), has failed to recognize the
 operating system you are using. If your script is old, overwrite *all*
 copies of config.guess and config.sub with the latest versions from:
 
-  https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
+  https://git.savannah.gnu.org/cgit/config.git/plain/config.guess
 and
-  https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
+  https://git.savannah.gnu.org/cgit/config.git/plain/config.sub
 EOF
 
-year=$(echo $timestamp | sed 's,-.*,,')
+our_year=`echo $timestamp | sed 's,-.*,,'`
+thisyear=`date +%Y`
 # shellcheck disable=SC2003
-if test "$(expr "$(date +%Y)" - "$year")" -lt 3 ; then
+script_age=`expr "$thisyear" - "$our_year"`
+if test "$script_age" -lt 3 ; then
    cat >&2 <<EOF
 
 If $0 has already been updated, send the following data and any
@@ -1654,20 +1722,20 @@ provide the necessary information to handle your system.
 
 config.guess timestamp = $timestamp
 
-uname -m = $( (uname -m) 2>/dev/null || echo unknown)
-uname -r = $( (uname -r) 2>/dev/null || echo unknown)
-uname -s = $( (uname -s) 2>/dev/null || echo unknown)
-uname -v = $( (uname -v) 2>/dev/null || echo unknown)
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
 
-/usr/bin/uname -p = $( (/usr/bin/uname -p) 2>/dev/null)
-/bin/uname -X     = $( (/bin/uname -X) 2>/dev/null)
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
 
-hostinfo               = $( (hostinfo) 2>/dev/null)
-/bin/universe          = $( (/bin/universe) 2>/dev/null)
-/usr/bin/arch -k       = $( (/usr/bin/arch -k) 2>/dev/null)
-/bin/arch              = $( (/bin/arch) 2>/dev/null)
-/usr/bin/oslevel       = $( (/usr/bin/oslevel) 2>/dev/null)
-/usr/convex/getsysinfo = $( (/usr/convex/getsysinfo) 2>/dev/null)
+hostinfo               = `(hostinfo) 2>/dev/null`
+/bin/universe          = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch              = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
 
 UNAME_MACHINE = "$UNAME_MACHINE"
 UNAME_RELEASE = "$UNAME_RELEASE"
old mode 100755 (executable)
new mode 100644 (file)
index c874b7a..9b62e37
@@ -1,12 +1,14 @@
 #! /bin/sh
 # Configuration validation subroutine script.
-#   Copyright 1992-2020 Free Software Foundation, Inc.
+#   Copyright 1992-2021 Free Software Foundation, Inc.
 
-timestamp='2020-11-07'
+# shellcheck disable=SC2006,SC2268 # see below for rationale
+
+timestamp='2021-12-25'
 
 # This 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
+# 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
@@ -33,7 +35,7 @@ timestamp='2020-11-07'
 # Otherwise, we print the canonical config type on stdout and succeed.
 
 # You can get the latest version of this script from:
-# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
+# https://git.savannah.gnu.org/cgit/config.git/plain/config.sub
 
 # This file is supposed to be the same for all GNU packages
 # and recognize all the CPU types, system types and aliases
@@ -50,7 +52,14 @@ timestamp='2020-11-07'
 #      CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
 # It is wrong to echo any other type of specification.
 
-me=$(echo "$0" | sed -e 's,.*/,,')
+# The "shellcheck disable" line above the timestamp inhibits complaints
+# about features and limitations of the classic Bourne shell that were
+# superseded or lifted in POSIX.  However, this script identifies a wide
+# variety of pre-POSIX systems that do not have POSIX shells at all, and
+# even some reasonably current systems (Solaris 10 as case-in-point) still
+# have a pre-POSIX /bin/sh.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
 
 usage="\
 Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS
@@ -67,7 +76,7 @@ Report bugs and patches to <config-patches@gnu.org>."
 version="\
 GNU config.sub ($timestamp)
 
-Copyright 1992-2020 Free Software Foundation, Inc.
+Copyright 1992-2021 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -112,9 +121,11 @@ esac
 
 # Split fields of configuration type
 # shellcheck disable=SC2162
+saved_IFS=$IFS
 IFS="-" read field1 field2 field3 field4 <<EOF
 $1
 EOF
+IFS=$saved_IFS
 
 # Separate into logical components for further validation
 case $1 in
@@ -163,6 +174,10 @@ case $1 in
                                                basic_machine=$field1
                                                basic_os=$field2
                                                ;;
+                                       zephyr*)
+                                               basic_machine=$field1-unknown
+                                               basic_os=$field2
+                                               ;;
                                        # Manufacturers
                                        dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \
                                        | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \
@@ -769,22 +784,22 @@ case $basic_machine in
                vendor=hp
                ;;
        i*86v32)
-               cpu=$(echo "$1" | sed -e 's/86.*/86/')
+               cpu=`echo "$1" | sed -e 's/86.*/86/'`
                vendor=pc
                basic_os=sysv32
                ;;
        i*86v4*)
-               cpu=$(echo "$1" | sed -e 's/86.*/86/')
+               cpu=`echo "$1" | sed -e 's/86.*/86/'`
                vendor=pc
                basic_os=sysv4
                ;;
        i*86v)
-               cpu=$(echo "$1" | sed -e 's/86.*/86/')
+               cpu=`echo "$1" | sed -e 's/86.*/86/'`
                vendor=pc
                basic_os=sysv
                ;;
        i*86sol2)
-               cpu=$(echo "$1" | sed -e 's/86.*/86/')
+               cpu=`echo "$1" | sed -e 's/86.*/86/'`
                vendor=pc
                basic_os=solaris2
                ;;
@@ -917,14 +932,16 @@ case $basic_machine in
                ;;
        leon-*|leon[3-9]-*)
                cpu=sparc
-               vendor=$(echo "$basic_machine" | sed 's/-.*//')
+               vendor=`echo "$basic_machine" | sed 's/-.*//'`
                ;;
 
        *-*)
                # shellcheck disable=SC2162
+               saved_IFS=$IFS
                IFS="-" read cpu vendor <<EOF
 $basic_machine
 EOF
+               IFS=$saved_IFS
                ;;
        # We use `pc' rather than `unknown'
        # because (1) that's what they normally are, and
@@ -1003,6 +1020,11 @@ case $cpu-$vendor in
                ;;
 
        # Here we normalize CPU types with a missing or matching vendor
+       armh-unknown | armh-alt)
+               cpu=armv7l
+               vendor=alt
+               basic_os=${basic_os:-linux-gnueabihf}
+               ;;
        dpx20-unknown | dpx20-bull)
                cpu=rs6000
                vendor=bull
@@ -1084,7 +1106,7 @@ case $cpu-$vendor in
                cpu=mipsisa64sb1el
                ;;
        sh5e[lb]-*)
-               cpu=$(echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/')
+               cpu=`echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/'`
                ;;
        spur-*)
                cpu=spur
@@ -1102,9 +1124,9 @@ case $cpu-$vendor in
                cpu=x86_64
                ;;
        xscale-* | xscalee[bl]-*)
-               cpu=$(echo "$cpu" | sed 's/^xscale/arm/')
+               cpu=`echo "$cpu" | sed 's/^xscale/arm/'`
                ;;
-       arm64-*)
+       arm64-* | aarch64le-*)
                cpu=aarch64
                ;;
 
@@ -1165,7 +1187,7 @@ case $cpu-$vendor in
                        | alphapca5[67] | alpha64pca5[67] \
                        | am33_2.0 \
                        | amdgcn \
-                       | arc | arceb \
+                       | arc | arceb | arc32 | arc64 \
                        | arm | arm[lb]e | arme[lb] | armv* \
                        | avr | avr32 \
                        | asmjs \
@@ -1185,6 +1207,7 @@ case $cpu-$vendor in
                        | k1om \
                        | le32 | le64 \
                        | lm32 \
+                       | loongarch32 | loongarch64 | loongarchx32 \
                        | m32c | m32r | m32rle \
                        | m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k \
                        | m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x \
@@ -1203,9 +1226,13 @@ case $cpu-$vendor in
                        | mips64vr5900 | mips64vr5900el \
                        | mipsisa32 | mipsisa32el \
                        | mipsisa32r2 | mipsisa32r2el \
+                       | mipsisa32r3 | mipsisa32r3el \
+                       | mipsisa32r5 | mipsisa32r5el \
                        | mipsisa32r6 | mipsisa32r6el \
                        | mipsisa64 | mipsisa64el \
                        | mipsisa64r2 | mipsisa64r2el \
+                       | mipsisa64r3 | mipsisa64r3el \
+                       | mipsisa64r5 | mipsisa64r5el \
                        | mipsisa64r6 | mipsisa64r6el \
                        | mipsisa64sb1 | mipsisa64sb1el \
                        | mipsisa64sr71k | mipsisa64sr71kel \
@@ -1229,7 +1256,7 @@ case $cpu-$vendor in
                        | powerpc | powerpc64 | powerpc64le | powerpcle | powerpcspe \
                        | pru \
                        | pyramid \
-                       | riscv | riscv32 | riscv64 \
+                       | riscv | riscv32 | riscv32be | riscv64 | riscv64be \
                        | rl78 | romp | rs6000 | rx \
                        | s390 | s390x \
                        | score \
@@ -1241,6 +1268,7 @@ case $cpu-$vendor in
                        | sparcv8 | sparcv9 | sparcv9b | sparcv9v | sv1 | sx* \
                        | spu \
                        | tahoe \
+                       | thumbv7* \
                        | tic30 | tic4x | tic54x | tic55x | tic6x | tic80 \
                        | tron \
                        | ubicom32 \
@@ -1281,35 +1309,37 @@ esac
 if test x$basic_os != x
 then
 
-# First recognize some ad-hoc caes, or perhaps split kernel-os, or else just
+# First recognize some ad-hoc cases, or perhaps split kernel-os, or else just
 # set os.
 case $basic_os in
        gnu/linux*)
                kernel=linux
-               os=$(echo $basic_os | sed -e 's|gnu/linux|gnu|')
+               os=`echo "$basic_os" | sed -e 's|gnu/linux|gnu|'`
                ;;
        os2-emx)
                kernel=os2
-               os=$(echo $basic_os | sed -e 's|os2-emx|emx|')
+               os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'`
                ;;
        nto-qnx*)
                kernel=nto
-               os=$(echo $basic_os | sed -e 's|nto-qnx|qnx|')
+               os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'`
                ;;
        *-*)
                # shellcheck disable=SC2162
+               saved_IFS=$IFS
                IFS="-" read kernel os <<EOF
 $basic_os
 EOF
+               IFS=$saved_IFS
                ;;
        # Default OS when just kernel was specified
        nto*)
                kernel=nto
-               os=$(echo $basic_os | sed -e 's|nto|qnx|')
+               os=`echo "$basic_os" | sed -e 's|nto|qnx|'`
                ;;
        linux*)
                kernel=linux
-               os=$(echo $basic_os | sed -e 's|linux|gnu|')
+               os=`echo "$basic_os" | sed -e 's|linux|gnu|'`
                ;;
        *)
                kernel=
@@ -1330,7 +1360,7 @@ case $os in
                os=cnk
                ;;
        solaris1 | solaris1.*)
-               os=$(echo $os | sed -e 's|solaris1|sunos4|')
+               os=`echo "$os" | sed -e 's|solaris1|sunos4|'`
                ;;
        solaris)
                os=solaris2
@@ -1359,7 +1389,7 @@ case $os in
                os=sco3.2v4
                ;;
        sco3.2.[4-9]*)
-               os=$(echo $os | sed -e 's/sco3.2./sco3.2v/')
+               os=`echo "$os" | sed -e 's/sco3.2./sco3.2v/'`
                ;;
        sco*v* | scout)
                # Don't match below
@@ -1389,7 +1419,7 @@ case $os in
                os=lynxos
                ;;
        mac[0-9]*)
-               os=$(echo "$os" | sed -e 's|mac|macos|')
+               os=`echo "$os" | sed -e 's|mac|macos|'`
                ;;
        opened*)
                os=openedition
@@ -1398,10 +1428,10 @@ case $os in
                os=os400
                ;;
        sunos5*)
-               os=$(echo "$os" | sed -e 's|sunos5|solaris2|')
+               os=`echo "$os" | sed -e 's|sunos5|solaris2|'`
                ;;
        sunos6*)
-               os=$(echo "$os" | sed -e 's|sunos6|solaris3|')
+               os=`echo "$os" | sed -e 's|sunos6|solaris3|'`
                ;;
        wince*)
                os=wince
@@ -1435,7 +1465,7 @@ case $os in
                ;;
        # Preserve the version number of sinix5.
        sinix5.*)
-               os=$(echo $os | sed -e 's|sinix|sysv|')
+               os=`echo "$os" | sed -e 's|sinix|sysv|'`
                ;;
        sinix*)
                os=sysv4
@@ -1681,11 +1711,14 @@ fi
 
 # Now, validate our (potentially fixed-up) OS.
 case $os in
-       # Sometimes we do "kernel-abi", so those need to count as OSes.
-       musl* | newlib* | uclibc*)
+       # Sometimes we do "kernel-libc", so those need to count as OSes.
+       musl* | newlib* | relibc* | uclibc*)
+               ;;
+       # Likewise for "kernel-abi"
+       eabi* | gnueabi*)
                ;;
-       # Likewise for "kernel-libc"
-       eabi | eabihf | gnueabi | gnueabihf)
+       # VxWorks passes extra cpu info in the 4th filed.
+       simlinux | simwindows | spe)
                ;;
        # Now accept the basic system types.
        # The portable systems comes first.
@@ -1702,12 +1735,12 @@ case $os in
             | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \
             | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \
             | mirbsd* | netbsd* | dicos* | openedition* | ose* \
-            | bitrig* | openbsd* | solidbsd* | libertybsd* | os108* \
+            | bitrig* | openbsd* | secbsd* | solidbsd* | libertybsd* | os108* \
             | ekkobsd* | freebsd* | riscix* | lynxos* | os400* \
             | bosx* | nextstep* | cxux* | aout* | elf* | oabi* \
             | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \
             | udi* | lites* | ieee* | go32* | aux* | hcos* \
-            | chorusrdb* | cegcc* | glidix* \
+            | chorusrdb* | cegcc* | glidix* | serenity* \
             | cygwin* | msys* | pe* | moss* | proelf* | rtems* \
             | midipix* | mingw32* | mingw64* | mint* \
             | uxpv* | beos* | mpeix* | udk* | moxiebox* \
@@ -1720,7 +1753,8 @@ case $os in
             | skyos* | haiku* | rdos* | toppers* | drops* | es* \
             | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \
             | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \
-            | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx*)
+            | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx* | zephyr* \
+            | fiwix* )
                ;;
        # This one is extra strict with allowed versions
        sco3.2v2 | sco3.2v[4-9]* | sco5v6*)
@@ -1737,11 +1771,12 @@ esac
 # As a final step for OS-related things, validate the OS-kernel combination
 # (given a valid OS), if there is a kernel.
 case $kernel-$os in
-       linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* | linux-musl* | linux-uclibc* )
+       linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* \
+                  | linux-musl* | linux-relibc* | linux-uclibc* )
                ;;
        uclinux-uclibc* )
                ;;
-       -dietlibc* | -newlib* | -musl* | -uclibc* )
+       -dietlibc* | -newlib* | -musl* | -relibc* | -uclibc* )
                # These are just libc implementations, not actual OSes, and thus
                # require a kernel.
                echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2
@@ -1749,6 +1784,8 @@ case $kernel-$os in
                ;;
        kfreebsd*-gnu* | kopensolaris*-gnu*)
                ;;
+       vxworks-simlinux | vxworks-simwindows | vxworks-spe)
+               ;;
        nto-qnx*)
                ;;
        os2-emx)
index 5a3f9776e910ba0bc8e521effca06989bd984903..cd7634dfa6247f021a640e2df74f7ed843ff66ad 100755 (executable)
@@ -10,7 +10,7 @@
 # Chet Ramey
 # chet@po.cwru.edu
 
-#   Copyright (C) 1996-2019 Free Software Foundation, Inc.
+#   Copyright (C) 1996-2021 Free Software Foundation, Inc.
 #
 #   This file is part of GNU Bash, the Bourne Again SHell.
 #
@@ -123,7 +123,7 @@ sunos5*|solaris2*)
        ;;
 
 # All versions of Linux (including Gentoo/FreeBSD) or the semi-mythical GNU Hurd.
-linux*-*|gnu*-*|k*bsd*-gnu-*|freebsd*|dragonfly*)
+linux*-*|gnu*-*|k*bsd*-gnu-*|midnightbsd*|freebsd*|dragonfly*)
        SHOBJ_CFLAGS=-fPIC
        SHOBJ_LD='${CC}'
        SHOBJ_LDFLAGS='-shared -Wl,-soname,$@'
@@ -151,13 +151,13 @@ darwin*)
        darwin[1-7].*)
                SHOBJ_STATUS=unsupported
                SHOBJ_LDFLAGS='-dynamic'
-               SHLIB_XLDFLAGS='-arch_only `/usr/bin/arch` -install_name $(libdir)/`echo $@ | sed "s:\\..*::"`.$(SHLIB_MAJOR).$(SHLIB_LIBSUFF) -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -v'
+               SHLIB_XLDFLAGS='-install_name $(libdir)/`echo $@ | sed "s:\\..*::"`.$(SHLIB_MAJOR).$(SHLIB_LIBSUFF) -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -v'
                ;;
        # Darwin 8 == Mac OS X 10.4; Mac OS X 10.N == Darwin N+4
        *)
                case "${host_os}" in
                darwin[89]*|darwin1[012]*)
-                       SHOBJ_ARCHFLAGS='-arch_only `/usr/bin/arch`'
+                       SHOBJ_ARCHFLAGS=
                        ;;
                 *)     # Mac OS X 10.9 (Mavericks) and later
                        SHOBJ_ARCHFLAGS=
@@ -241,8 +241,8 @@ osf*)
 
 aix4.[2-9]*-*gcc*|aix[5-9].*-*gcc*)            # lightly tested by jik@cisco.com
        SHOBJ_CFLAGS=-fpic
-       SHOBJ_LD='ld'
-       SHOBJ_LDFLAGS='-bdynamic -bnoentry -bexpall'
+       SHOBJ_LD='${CC}'
+       SHOBJ_LDFLAGS='-Wl,-bdynamic -Wl,-bnoentry -Wl,-bexpall'
        SHOBJ_XLDFLAGS='-G'
 
        SHLIB_XLDFLAGS='-bM:SRE'
index aba4842aeea87e9eca8b0baf694bbccd6e8e16a1..84864fd7966c2cc00d9fdc856f5d1cb5408dedbe 100644 (file)
@@ -1,6 +1,6 @@
 /* signames.c -- Create an array of signal names. */
 
-/* Copyright (C) 2006-2020 Free Software Foundation, Inc.
+/* Copyright (C) 2006-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -84,9 +84,9 @@ initialize_signames ()
      names first.  This allows (for example) SIGABRT to overwrite SIGLOST. */
 
   /* POSIX 1003.1b-1993 real time signals, but take care of incomplete
-     implementations. Acoording to the standard, both, SIGRTMIN and
+     implementations. According to the standard, both SIGRTMIN and
      SIGRTMAX must be defined, SIGRTMIN must be strictly less than
-     SIGRTMAX, and the difference must be at least 7, that is, there
+     SIGRTMAX, and the difference must be at least 7; that is, there
      must be at least eight distinct real time signals. */
 
   /* The generated signal names are SIGRTMIN, SIGRTMIN+1, ...,
diff --git a/test.c b/test.c
index e2fd78b359e92804f03b5852397196c4b7f3db70..9997df149ad8452087638abd34ddd96cede82877 100644 (file)
--- a/test.c
+++ b/test.c
@@ -2,7 +2,7 @@
 
 /* Modified to run with the GNU shell Apr 25, 1988 by bfox. */
 
-/* Copyright (C) 1987-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -339,12 +339,15 @@ arithcomp (s, t, op, flags)
   intmax_t l, r;
   int expok;
 
-  if (flags & TEST_ARITHEXP)
+  if (flags & TEST_ARITHEXP)           /* conditional command */
     {
-      l = evalexp (s, EXP_EXPANDED, &expok);
+      int eflag;
+
+      eflag = (shell_compatibility_level > 51) ? 0 : EXP_EXPANDED;
+      l = evalexp (s, eflag, &expok);
       if (expok == 0)
        return (FALSE);         /* should probably longjmp here */
-      r = evalexp (t, EXP_EXPANDED, &expok);
+      r = evalexp (t, eflag, &expok);
       if (expok == 0)
        return (FALSE);         /* ditto */
     }
@@ -492,13 +495,13 @@ unary_operator ()
          if (legal_number (argv[pos], &r))
            {
              advance (0);
-             return (unary_test (op, argv[pos - 1]));
+             return (unary_test (op, argv[pos - 1], 0));
            }
          else
            return (FALSE);
        }
       else
-       return (unary_test (op, "1"));
+       return (unary_test (op, "1", 0));
     }
 
   /* All of the unary operators take an argument, so we first call
@@ -506,17 +509,19 @@ unary_operator ()
      argument, and then advances pos right past it.  This means that
      pos - 1 is the location of the argument. */
   unary_advance ();
-  return (unary_test (op, argv[pos - 1]));
+  return (unary_test (op, argv[pos - 1], 0));
 }
 
 int
-unary_test (op, arg)
+unary_test (op, arg, flags)
      char *op, *arg;
+     int flags;
 {
   intmax_t r;
   struct stat stat_buf;
   struct timespec mtime, atime;
   SHELL_VAR *v;
+  int aflags;
      
   switch (op[1])
     {
@@ -624,17 +629,27 @@ unary_test (op, arg)
 
     case 'v':
 #if defined (ARRAY_VARS)
-      if (valid_array_reference (arg, 0))
+      aflags = assoc_expand_once ? AV_NOEXPAND : 0;
+      if (valid_array_reference (arg, aflags))
        {
          char *t;
-         int rtype, ret, flags;
+         int ret;
+         array_eltstate_t es;
 
          /* Let's assume that this has already been expanded once. */
-         flags = assoc_expand_once ? AV_NOEXPAND : 0;
-         t = array_value (arg, 0, flags, &rtype, (arrayind_t *)0);
+         /* XXX - TAG:bash-5.2 fix with corresponding fix to execute_cmd.c:
+            execute_cond_node() that passes TEST_ARRAYEXP in FLAGS */
+
+         if (shell_compatibility_level > 51)
+           /* Allow associative arrays to use `test -v array[@]' to look for
+              a key named `@'. */
+           aflags |= AV_ATSTARKEYS;    /* XXX */
+         init_eltstate (&es);
+         t = get_array_value (arg, aflags|AV_ALLOWALL, &es);
          ret = t ? TRUE : FALSE;
-         if (rtype > 0)        /* subscript is * or @ */
+         if (es.subtype > 0)   /* subscript is * or @ */
            free (t);
+         flush_eltstate (&es);
          return ret;
        }
       else if (legal_number (arg, &r))         /* -v n == is $n set? */
@@ -789,6 +804,7 @@ three_arguments ()
     {
       advance (1);
       value = !two_arguments ();
+      pos = argc;
     }
   else if (argv[pos][0] == '(' && argv[pos+2][0] == ')')
     {
diff --git a/test.h b/test.h
index ea3c33e956f7afde7238ed3106685a76830a84c1..ffd79e5e0dad10af36b29cd4b13e99a3f0116e53 100644 (file)
--- a/test.h
+++ b/test.h
@@ -1,6 +1,6 @@
 /* test.h -- external interface to the conditional command code. */
 
-/* Copyright (C) 1997-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1997-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
 #define TEST_PATMATCH  0x01
 #define TEST_ARITHEXP  0x02
 #define TEST_LOCALE    0x04
+#define TEST_ARRAYEXP  0x08            /* array subscript expansion */
 
 extern int test_unop PARAMS((char *));
 extern int test_binop PARAMS((char *));
 
-extern int unary_test PARAMS((char *, char *));
+extern int unary_test PARAMS((char *, char *, int));
 extern int binary_test PARAMS((char *, char *, char *, int));
 
 extern int test_command PARAMS((int, char **));
index 9e33036b5d8f5faaf97ae271fd153404b6c99776..76f32076fb5529fbaf736cc098cd0455c4acd258 100644 (file)
@@ -2,6 +2,7 @@ alias: 0
 alias: 0
 ./alias.tests: line 38: qfoo: command not found
 quux
+hi
 bar
 value
 bar
@@ -40,3 +41,5 @@ baz
 foo
 bar
 baz
+<áa>
+<aá>
index 0280c16de76144182fca9fd3c0d0484d52174023..15eac5b176b652b2564c1fd27647d81eff6ce1e8 100644 (file)
@@ -49,8 +49,17 @@ foo bar
 
 unalias foo bar baz
 
+# post bash-5.1 problems with compound array assignment during multiline
+# alias expansion
+alias foo='a=() b=""
+for i in 1; do echo hi; done'
+foo
+
+unalias foo
+
 ${THIS_SH} ./alias1.sub
 ${THIS_SH} ./alias2.sub
 ${THIS_SH} ./alias3.sub
 ${THIS_SH} ./alias4.sub
 ${THIS_SH} ./alias5.sub
+${THIS_SH} ./alias6.sub
diff --git a/tests/alias6.sub b/tests/alias6.sub
new file mode 100644 (file)
index 0000000..d2d7daf
--- /dev/null
@@ -0,0 +1,13 @@
+# make sure aliases that end in multibyte characters don't interfere with the
+# space sentinel alias expansion adds; problem through bash-5.1
+shopt -s expand_aliases
+
+LC_ALL=en_US.UTF-8
+
+alias a1='printf "<%s>\\n" áa'
+a1
+
+alias a2='printf "<%s>\\n" aá'
+a2
+
+unalias a1 a2
index c74602e3cc1eae19f98ce6f33285c2ca602fe990..02687815dfadde2029781fb5e3b1efe2fca8f5f1 100644 (file)
@@ -259,5 +259,5 @@ efg
 42
 42
 42
-./arith.tests: line 327: 'foo' : syntax error: operand expected (error token is "'foo' ")
-./arith.tests: line 331: b[c]d: syntax error in expression (error token is "d")
+./arith.tests: line 330: 'foo' : syntax error: operand expected (error token is "'foo' ")
+./arith.tests: line 333: b[c]d: syntax error in expression (error token is "d")
index 1a3501aaad98d36e956a8ddc94e38f35890a539f..e9ab57651a5d7b68799800eb38a591b1b85a84f9 100644 (file)
@@ -322,10 +322,12 @@ printf "%u\n" $n
 echo $(( 16#$(printf "%x\n" $n) ))
 echo $(( 16#$(printf "%X\n" $n) ))
 
+# allow reserved words after an arithmetic command just because
+if ((expr)) then ((expr)) fi
+
 # these are errors
 foo=1
 echo $(( 'foo' ))
 
-
 # causes longjmp botches through bash-2.05b
 a[b[c]d]=e
old mode 100755 (executable)
new mode 100644 (file)
index 2d1c51db57a09fb20e65dc2dc1d2103451571159..62278852a6348bd9bee4024a44ebcb071468df7b 100644 (file)
@@ -67,6 +67,7 @@ declare -ar a=([1]="" [2]="bdef" [5]="hello world" [6]="test expression" [15]="t
 declare -a b=([0]="this" [1]="is" [2]="a" [3]="test" [4]="" [5]="/etc/passwd")
 declare -ar c
 declare -a d=([1]="test test")
+declare -a e=()
 declare -a f=([0]="" [1]="bdef" [2]="hello world" [3]="test" [4]="ninth element")
 ./array.tests: line 135: unset: ps1: not an array variable
 ./array.tests: line 139: declare: c: cannot destroy array variables in this way
@@ -84,6 +85,7 @@ declare -ar a=([1]="" [2]="bdef" [5]="hello world" [6]="test expression" [15]="t
 declare -a b=([0]="this" [1]="is" [2]="a" [3]="test" [4]="" [5]="/etc/passwd")
 declare -ar c
 declare -a d=([1]="test test")
+declare -a e=()
 declare -a f=([0]="" [1]="bdef" [2]="hello world" [3]="test" [4]="ninth element")
 declare -a rv=([0]="this" [1]="is" [2]="a" [3]="test" [4]="of" [5]="read" [6]="using" [7]="arrays")
 abde
@@ -381,6 +383,8 @@ strlen(4four) = 5
 1 2 0 3
 1 2 0 3
 1 2 0 3
+declare -ai arr=([0]="2" [1]="4" [2]="6")
+declare -a arr=([0]="hello" [1]="world")
 foo index 1: ok
 foo index 2: ok
 foo: implicit reference to element 0: ok
@@ -492,8 +496,8 @@ x b c
 declare -a a=([1]="2" [2]="3" [3]="4")
 abcd
 unset
-./array21.sub: line 30: typeset: a: not found
-./array21.sub: line 33: typeset: A: not found
+declare -a a=()
+declare -A A=([four]="4" [two]="2" [three]="3" [one]="1" )
 declare -a a=()
 declare -A A=()
 declare -a foo=([0]="1" [1]="(4 5 6)" [2]="3")
@@ -520,13 +524,11 @@ argv[1] = <y>
 <X> <X> <X> <X>
 ./array23.sub: line 22: $( echo >&2 foo ) : syntax error: operand expected (error token is "$( echo >&2 foo ) ")
 ./array23.sub: line 23: $( echo >&2 foo ) : syntax error: operand expected (error token is "$( echo >&2 foo ) ")
-foo
-0
-foo
-foo
-foo
-6
-./array23.sub: line 34: $( echo >&2 foo ): syntax error: operand expected (error token is "$( echo >&2 foo )")
+./array23.sub: line 24: $( echo >&2 foo ) : syntax error: operand expected (error token is "$( echo >&2 foo ) ")
+./array23.sub: line 26: $( echo >&2 foo ) : syntax error: operand expected (error token is "$( echo >&2 foo ) ")
+./array23.sub: line 30: $( echo >&2 foo ): syntax error: operand expected (error token is "$( echo >&2 foo )")
+./array23.sub: line 33: $( echo >&2 foo ): syntax error: operand expected (error token is "$( echo >&2 foo )")
+./array23.sub: line 34: $index: syntax error: operand expected (error token is "$index")
 ./array23.sub: line 35: $( echo >&2 foo ): syntax error: operand expected (error token is "$( echo >&2 foo )")
 0
 0
@@ -743,23 +745,43 @@ argv[1] = <b>
 argv[2] = <a>
 argv[1] = <b+a>
 7
-./array27.sub: line 24: a[]]=7 : syntax error: invalid arithmetic operator (error token is "]=7 ")
+7
 declare -A A=([$'\t']="2" [" "]="2" )
-./array27.sub: line 36: ((: A[]]=2 : syntax error: invalid arithmetic operator (error token is "]=2 ")
-declare -A A=([$'\t']="2" ["*"]="2" [" "]="2" ["@"]="2" )
-./array27.sub: line 45: A[]]: bad array subscript
+declare -A A=([$'\t']="2" ["*"]="2" [" "]="2" ["]"]="2" ["@"]="2" )
+declare -A A=([$'\t']="2" ["*"]="2" [" "]="2" ["]"]="2" ["@"]="2" )
+./array27.sub: line 52: read: `A[]]': not a valid identifier
 declare -A A=([$'\t']="X" ["*"]="X" [" "]="X" ["@"]="X" )
-./array27.sub: line 53: A[]]: bad array subscript
+./array27.sub: line 60: printf: `A[]]': not a valid identifier
 declare -A A=([$'\t']="X" ["*"]="X" [" "]="X" ["@"]="X" )
-./array27.sub: line 61: declare: `A[]]=X': not a valid identifier
+./array27.sub: line 68: declare: `A[]]=X': not a valid identifier
+declare -A A=(["*"]="X" ["@"]="X" )
+./array27.sub: line 76: declare: `A[]]=X': not a valid identifier
 declare -A A=(["*"]="X" ["@"]="X" )
-./array27.sub: line 69: declare: `A[]]=X': not a valid identifier
-./array27.sub: line 69: A[*]: bad array subscript
-./array27.sub: line 69: A[@]: bad array subscript
-declare -A A
 declare -a bug4=([0]="" [1]="5" [2]="" [3]="1" [4]="")
 declare -a bug=([0]="" [1]="5" [2]="" [3]="1" [4]="")
 declare -a bug2=([0]="")
 declare -a bug3=([0]="" [1]="5" [2]="" [3]="1" [4]="")
 declare -a not_bug=([0]="no" [1]="nulls")
 declare -a workaround=([0]="")
+declare -a var=([0]=$'\001\001\001\001')
+declare -A v2=([$'\001']=$'ab\001c' )
+declare -a foo=([0]=$'\001\001\001\001')
+declare -A foo=([$'\001']=$'ab\001c' )
+declare -a foo=([0]=$'\001\001\001\001')
+declare -a foo=([0]=$'\001\001\001\001')
+declare -A foo=([v]=$'\001\001\001\001' )
+declare -A foo=([v]=$'\001\001\001\001' )
+declare -A foo=([$'\001']=$'ab\001c' )
+declare -A foo=([$'\001']=$'ab\001c' )
+foo
+declare -a a=([42]="foo")
+foo
+declare -a a=([42]="foo")
+7
+declare -ai a=([42]="7")
+42
+declare -ai a=([42]="42")
+FOO
+declare -Au A=([Darwin]="FOO" )
+FOO
+declare -Au A=(["@"]="FOO" )
index ba8e2254d6cd3c82787918a4f74d68994f4efb6c..d0bb08b74466ef0e83e420faa8209c713aa7e0a3 100644 (file)
@@ -425,3 +425,5 @@ ${THIS_SH} ./array25.sub
 ${THIS_SH} ./array26.sub
 ${THIS_SH} ./array27.sub
 ${THIS_SH} ./array28.sub
+${THIS_SH} ./array29.sub
+${THIS_SH} ./array30.sub
index 47796b95cda4f26cd310231ae5c014036a6a2d98..12f5391ef0917909d89ebe724081ea5a4392daff 100644 (file)
@@ -35,3 +35,18 @@ func()
 
 func
 echo "${foo[@]}" 
+
+unset foo
+
+# test options to declare that disable attributes that affect how values
+# are expanded
+#
+# we already handle options that set attributes specially, so we should
+# handle attributes that unset those attributes specially as well
+
+unset arr
+declare -i -a arr=(1+1 2+2 3+3)
+declare -p arr 
+
+declare +i arr=(hello world)
+declare -p arr
index 44ed444ddfd5f7964b47dffdd4cc2747cca9f805..e2a1e708360ae99754daaef25375a087afed1dbf 100644 (file)
@@ -38,6 +38,13 @@ done
 
 declare -p A
 
+unset A
+declare -A A
+for k in ']' '*' '@' $'\t' ' '; do
+   A[$k]=2
+done
+declare -p A
+
 unset A
 declare -A A
 
@@ -69,4 +76,3 @@ for k in ']' '*' '@'; do
    declare "A[$k]=X"
 done
 declare -p A
-
diff --git a/tests/array29.sub b/tests/array29.sub
new file mode 100644 (file)
index 0000000..f73c2d1
--- /dev/null
@@ -0,0 +1,86 @@
+#   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/>.
+#
+# Issues with CTLESC characters in array subscripts and values. Bash-5.1 and
+# earlier didn't quote them correctly and therefore halved the number of
+# CTLESCs.
+
+declare -a var
+var=( $'\x01\x01\x01\x01' )
+declare -p var
+declare -A v2
+v2=( $'\x01' ab$'\x01'c )
+declare -p v2
+
+pv()
+{
+       local -a foo
+       foo=( "${var[@]}" )
+       declare -p foo
+}
+pv
+
+unset -f pv
+pv()
+{
+        local -A foo
+        eval foo=\( "${v2[@]@k}" \)
+        declare -p foo
+}
+pv
+
+# these are wrong through bash-5.1; there is a fix tagged for bash-5.2
+# when I uncomment that fix, these results will reflect it
+
+pv1()
+{
+       local -a foo=( "${var[@]}" )
+       declare -p foo
+}
+pv1
+
+pv2()
+{
+       local -a foo=( [0]="${var[@]}" )
+       declare -p foo
+}
+pv2
+
+pv3()
+{
+       local -A foo=( v "${var[@]}" )
+       declare -p foo
+}
+pv3
+
+pv4()
+{
+       local -A foo=( [v]="${var[@]}" )
+       declare -p foo
+}
+pv4
+
+unset -f pv3 pv4
+pv3()
+{
+       local -A foo=( $'\x01' "${v2[@]}" )
+       declare -p foo
+}
+pv3
+
+pv4()
+{
+       local -A foo=( [$'\x01']="${v2[@]}" )
+       declare -p foo
+}
+pv4
diff --git a/tests/array30.sub b/tests/array30.sub
new file mode 100644 (file)
index 0000000..14f9798
--- /dev/null
@@ -0,0 +1,46 @@
+#   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/>.
+#
+declare -a a
+a=()
+
+echo ${a[42]=foo}
+declare -p a
+
+a=()
+echo ${a[$(echo 42)]=foo}
+declare -p a
+
+unset a
+
+declare -ai a
+a=()
+echo ${a[42]=4+3}
+declare -p a
+
+a=()
+echo ${a[$(echo 42)]=42}
+declare -p a
+
+unset a
+
+declare -A A
+declare -u A
+A=()
+echo ${A[$(echo Darwin)]=foo}
+
+declare -p A
+A=()
+
+echo ${A[@]:=foo}
+declare -p A
index e9aa9172cb7d670957fb7d791971b36a27f62532..9a1662c453376e8ff7e3b05e1c74cab1fdd608c0 100644 (file)
@@ -16,25 +16,24 @@ declare -A wheat=([two]="b" [three]="c" [one]="a" [zero]="0" )
 declare -A chaff=(["hello world"]="flip" [one]="10" [zero]="5" )
 ./assoc.tests: line 51: waste: readonly variable
 ./assoc.tests: line 52: unset: waste: cannot unset: readonly variable
-./assoc.tests: line 53: chaff[*]: bad array subscript
-./assoc.tests: line 54: [*]=12: invalid associative array key
-declare -A chaff=(["hello world"]="flip" [one]="a" )
+declare -A chaff=(["*"]="12" ["hello world"]="flip" [one]="a" )
 flip
 argv[1] = <multiple>
 argv[2] = <words>
+argv[3] = <12>
+argv[4] = <flip>
+argv[5] = <a>
+argv[1] = <multiple words>
+argv[2] = <12>
 argv[3] = <flip>
 argv[4] = <a>
-argv[1] = <multiple words>
-argv[2] = <flip>
-argv[3] = <a>
 argv[1] = <multiple>
 argv[2] = <words>
-argv[3] = <flip>
-argv[4] = <a>
-argv[1] = <multiple words flip a>
+argv[3] = <12>
+argv[4] = <flip>
+argv[5] = <a>
+argv[1] = <multiple words 12 flip a>
 ./assoc.tests: line 71: declare: chaff: cannot destroy array variables in this way
-./assoc.tests: line 73: chaff[*]: bad array subscript
-./assoc.tests: line 74: [*]=12: invalid associative array key
 declare -A wheat=([six]="6" ["foo bar"]="qux qix" )
 argv[1] = <qux>
 argv[2] = <qix>
@@ -200,11 +199,7 @@ declare -A hash=([key]="value1 value2" )
 declare -A b=([")"]="" ["\""]="" ["]"]="" ["\\"]="" ["\`"]="" )
 declare -A b=(["]"]="" ["\`"]="" )
 declare -A dict=(["'"]="3" ["\""]="1" ["\\"]="4" ["\`"]="2" )
-./assoc9.sub: line 36: unset: `dict[']': not a valid identifier
-./assoc9.sub: line 36: unset: `dict["]': not a valid identifier
-./assoc9.sub: line 36: unset: `dict[\]': not a valid identifier
-./assoc9.sub: line 36: unset: `dict[`]': not a valid identifier
-declare -A dict=(["'"]="3" ["\""]="1" ["\\"]="4" ["\`"]="2" )
+declare -A dict=()
 declare -A dict=(["'"]="3" ["\""]="1" ["\\"]="4" ["\`"]="2" )
 declare -A dict=()
 4
@@ -223,6 +218,14 @@ declare -A a=(["80's"]="Depeche Mode" )
 declare -A a=(["\$(date >&2)"]="5" )
 declare -A myarray=([foo]="bleh" ["foo[bar"]="bleh" )
 foo
+declare -A assoc=(["\$var"]="value" )
+declare -A assoc=(["\$var"]="value" )
+declare -A assoc=(["\$var"]="value" )
+declare -A assoc=()
+./assoc9.sub: line 154: typeset: `foo[foo]bar]=bax': not a valid identifier
+foo]bar
+bip
+declare -A foo=(["foo]bar"]="bip" )
 ./assoc10.sub: line 14: declare: a: cannot convert indexed to associative array
 f: declare -a a
 ./assoc10.sub: line 17: declare: a: cannot convert associative to indexed array
@@ -250,11 +253,148 @@ declare -A dict=(["?"]="quest" ["*"]="star" ["'"]="squote" ["\$"]="dol" ["\""]="
 dict=( "?" "quest" "*" "star" "'" "squote" "\$" "dol" "\"" "dquote" "\\" "bslash" "@" "at" "}" "rbrace" "{" "lbrace" "\`" "bquote" )
 declare -A foo=([two]="" [one]="1" )
 foo=( two "" one "1" )
-rparen dquote rbrace bs
-declare -A a=([")"]="rparen" ["\""]="dquote" ["]"]="rbrace" ["\\"]="bs" )
-")" "rparen" "\"" "dquote" "]" "rbrace" "\\" "bs"
-declare -A a=([")"]="rparen" ["\""]="dquote" ["]"]="rbrace" ["\\"]="bs" )
-declare -A a=([")"]="rparen" ["\""]="dquote" ["]"]="rbrace" ["\\"]="bs" )
-declare -A a=([")"]="rparen" ["\""]="dquote" ["]"]="rbrace" ["\\"]="bs" )
+rparen dquote rbracket bs
+declare -A a=([")"]="rparen" ["\""]="dquote" ["]"]="rbracket" ["\\"]="bs" )
+")" "rparen" "\"" "dquote" "]" "rbracket" "\\" "bs"
+declare -A a=([")"]="rparen" ["\""]="dquote" ["]"]="rbracket" ["\\"]="bs" )
+declare -A a=([")"]="rparen" ["\""]="dquote" ["]"]="rbracket" ["\\"]="bs" )
+declare -A a=([")"]="rparen" ["\""]="dquote" ["]"]="rbracket" ["\\"]="bs" )
 declare -Arx foo=([two]="2" [three]="3" [one]="1" )
 ./assoc11.sub: line 90: foo: readonly variable
+declare -A v1=(["1 2"]="3" )
+declare -A v2=(["1 2"]="3" )
+declare -A v3=(["1 2"]="3" )
+declare -A v1=(["1 2"]="3 4 5" )
+declare -A v2=(["1 2"]="3 4 5" )
+declare -A v3=(["1 2"]="3 4 5" )
+declare -A v1=(["1 2"]="3 4 5" )
+declare -A v2=(["1 2"]="3 4 5" )
+declare -A v3=(["1 2"]="3 4 5" )
+declare -A v1=(["1 2"]="3 4 5" )
+declare -A v2=(["1 2"]="3 4 5" )
+declare -A v3=(["1 2"]="3 4 5" )
+declare -A v1=(["20 40 80"]="xtra" ["1 2"]="3 4 5" )
+declare -A v2=(["20 40 80"]="xtra" ["1 2"]="3 4 5" )
+declare -A v3=(["1 2"]="3 4 5" ["\$xtra"]="xtra" )
+declare -A v1=(["20 40 80"]="new xtra" ["1 2"]="3 4 5" )
+declare -A v2=(["20 40 80"]="new xtra" ["1 2"]="3 4 5" )
+declare -A v3=(["1 2"]="3 4 5" ["\$xtra"]="new xtra" )
+declare -A assoc=(["*"]="star" ["!"]="bang" ["@"]="at" )
+at
+star
+declare -A a=(["@"]="at" )
+./assoc13.sub: line 22: ia[@]: bad array subscript
+declare -a ia
+declare -A a=(["@"]="at2" )
+declare -A a=(["@"]="    string" )
+declare -A a=(["*"]="star2" ["@"]="at" )
+declare -A assoc=([hello]="world" ["key with spaces"]="value with spaces" [foo]="bar" [one]="1" )
+argv[1] = <world>
+argv[2] = <value with spaces>
+argv[3] = <bar>
+argv[4] = <1>
+argv[1] = <hello>
+argv[2] = <world>
+argv[3] = <key with spaces>
+argv[4] = <value with spaces>
+argv[5] = <foo>
+argv[6] = <bar>
+argv[7] = <one>
+argv[8] = <1>
+argv[1] = <world value with spaces bar 1>
+argv[1] = <hello world key with spaces value with spaces foo bar one 1>
+argv[1] = <hello>
+argv[2] = <world>
+argv[3] = <key with spaces>
+argv[4] = <value with spaces>
+argv[5] = <one>
+argv[6] = <1>
+argv[7] = <foo>
+argv[8] = <bar>
+argv[1] = <'hello'>
+argv[2] = <'world'>
+argv[3] = <'key with spaces'>
+argv[4] = <'value with spaces'>
+argv[5] = <'one'>
+argv[6] = <'1'>
+argv[7] = <'foo'>
+argv[8] = <'bar'>
+argv[1] = <'hello'>
+argv[2] = <'world'>
+argv[3] = <'key with spaces'>
+argv[4] = <'value with spaces'>
+argv[5] = <'one'>
+argv[6] = <'1'>
+argv[7] = <'foo'>
+argv[8] = <'bar'>
+declare -A clone=([hello]="world" ["key with spaces"]="value with spaces" [foo]="bar" [one]="1" )
+declare -A posparams=([hello]="world" ["key with spaces"]="value with spaces" [foo]="bar" [one]="1" )
+declare -A var=([$'\001']=$'\001\001\001\001' )
+declare -A v2=([$'\001']=$'\001\001\001\001' )
+argv[1] = <^A>
+argv[2] = <^A^A^A^A>
+declare -A foo=([$'\001']=$'\001\001\001\001' )
+declare -A var=([$'\001']=$'\001\001\001\001' )
+argv[1] = <^A>
+argv[2] = <^A^A^A^A>
+declare -A foo=([$'\001']=$'\001\001\001\001' )
+declare -A var=([$'\001']=$'\001\001\001\001' )
+argv[1] = <^A>
+argv[2] = <^A^A^A^A>
+declare -A foo=([$'\001']=$'\001\001\001\001' )
+declare -a var=([0]=$'\001\001\001\001')
+argv[1] = <$'\001\001\001\001'>
+declare -a foo=([0]=$'\001\001\001\001')
+declare -a var=([0]=$'\001\001\001\001')
+argv[1] = <$'\001\001\001\001'>
+declare -a foo=([0]=$'\001\001\001\001')
+declare -A var=([two]=$'ab\001cd' [one]=$'\001\001\001\001' )
+declare -A foo=([two]=$'ab\001cd' [one]=$'\001\001\001\001' )
+declare -A foo=([$'\001']=$'ab\001cd' )
+declare -A foo=([$'\001']=$'\001\001\001\001' )
+declare -A A=(["\$(echo Darwin ; echo stderr>&2)"]="darjeeling" [Darwin]="darjeeling" )
+stderr
+darjsharking
+darjsharking
+stderr
+darj
+darj
+stderr
+DARJEELING
+DARJEELING
+stderr
+'darjeeling'
+'darjeeling'
+stderr
+darjeel
+darjeel
+stderr
+10
+10
+stderr
+darjeeling
+darjeeling
+stderr
+set
+set
+stderr
+set
+set
+stderr
+42
+42
+declare -A A=(["]"]="rbracket" ["["]="lbracket" )
+declare -A A=()
+declare -A A=(["]"]="rbracket" ["["]="lbracket" )
+declare -A A=()
+declare -A A=(["]"]="rbracket" ["["]="lbracket" )
+declare -A A=()
+declare -A A=(["]"]="rbracket" ["["]="lbracket" )
+declare -A A=()
+declare -A A=(["]"]="rbracket" ["["]="lbracket" )
+declare -A A=()
+declare -A A=(["]"]="rbracket" ["["]="lbracket" )
+declare -A A=()
+declare -A A=(["]"]="rbracket" ["["]="lbracket" )
+declare -A A=()
+5: ok 1
index 8d5c89275f432bb35b22987c5c2ccd6a1f5323cd..c656536b5fadc5c8dba59a877dc62605455500f7 100644 (file)
@@ -47,7 +47,7 @@ declare +i chaff
 chaff[hello world]=flip
 declare -p chaff
 
-# TEST - errors
+# TEST - no longer errors
 waste[stuff]=other
 unset waste
 chaff[*]=12
@@ -244,3 +244,25 @@ ${THIS_SH} ./assoc10.sub
 
 # test assigning associative arrays using compound key/value pair assignments
 ${THIS_SH} ./assoc11.sub
+
+# more kvpair associative array assignment tests
+${THIS_SH} ./assoc12.sub
+
+# assignment to @ and *
+${THIS_SH} ./assoc13.sub
+
+# tests of the @k transformation on associative arrays
+${THIS_SH} ./assoc14.sub
+
+# tests with subscripts and values containing 0x01 (some indexed array tests too)
+${THIS_SH} ./assoc15.sub
+
+# tests with subscripts being expanded more than one in ${xxx} word expansions
+${THIS_SH} ./assoc16.sub
+
+# tests with `[' and `]' subscripts and `unset'
+${THIS_SH} ./assoc17.sub
+
+# tests with `[' and `]' subscripts and printf/read/wait builtins
+${THIS_SH} ./assoc18.sub
+
index 13111a52b14a47ccdb275a9eb1ec309cba79dafd..9d9afae95e73c1294950ba37e42c09fe5c974329 100644 (file)
@@ -69,7 +69,7 @@ foo=(one 1 two)
 declare -p foo
 echo foo=\( ${foo[@]@K} \)
 
-typeset -A a=( [\\]=bs [\"]=dquote [\)]=rparen [\]]=rbrace )
+typeset -A a=( [\\]=bs [\"]=dquote [\)]=rparen [\]]=rbracket )
 echo ${a[@]}
 declare -p a
 
diff --git a/tests/assoc12.sub b/tests/assoc12.sub
new file mode 100644 (file)
index 0000000..359dc0b
--- /dev/null
@@ -0,0 +1,74 @@
+#   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/>.
+#
+foo='1 2'
+bar='3 4 5'
+xtra='20 40 80'
+
+declare -A v1=( $foo 3 )
+declare -p v1
+
+declare -A v2=( [$foo]=3 )
+declare -p v2
+
+declare -A  v3
+v3=( $foo 3 )
+declare -p v3
+
+unset v1 v2 v3
+
+declare -A v1=( $foo $bar )
+declare -p v1
+
+declare -A v2=( [$foo]=$bar )
+declare -p v2
+
+declare -A  v3
+v3=( $foo $bar )
+declare -p v3
+
+unset v1 v2 v3
+
+declare -A v1=( "$foo" $bar )
+declare -p v1
+
+declare -A v2=( ["$foo"]=$bar )
+declare -p v2
+
+declare -A  v3
+v3=( "$foo" $bar )
+declare -p v3
+
+unset v1 v2 v3
+
+declare -A v1=( "$foo" "$bar" )
+declare -p v1
+
+declare -A v2=( ["$foo"]="$bar" )
+declare -p v2
+
+declare -A  v3
+v3=( "$foo" "$bar" )
+declare -p v3
+
+v1+=( $xtra xtra )
+v2+=( "$xtra" xtra )
+v3+=( '$xtra' xtra )
+
+declare -p v1 v2 v3
+
+v1+=( [$xtra]='new xtra' )
+v2+=( ["$xtra"]='new xtra' )
+v3+=( ['$xtra']='new xtra' )
+
+declare -p v1 v2 v3
diff --git a/tests/assoc13.sub b/tests/assoc13.sub
new file mode 100644 (file)
index 0000000..7e66972
--- /dev/null
@@ -0,0 +1,44 @@
+# assignment to @ and *
+
+declare -A assoc
+key=@
+key2=*
+
+assoc[$key]=at
+assoc[$key2]=star
+assoc[!]=bang
+declare -p assoc
+
+echo ${assoc[$key]}
+echo ${assoc[$key2]}
+unset assoc
+
+declare -A a
+
+a[@]=at
+declare -p a
+
+declare -a ia
+ia[@]=garbage
+
+declare -p ia
+
+declare a[@]=at2
+declare -p a
+
+unset a ia
+
+declare -A a
+printf -v a[@] "%10s" string
+
+declare -p a
+unset a
+
+declare -A a
+declare a[$key2]=star
+declare a[@]=at
+declare a[*]=star2
+
+declare -p a
+unset a
+
diff --git a/tests/assoc14.sub b/tests/assoc14.sub
new file mode 100644 (file)
index 0000000..95df049
--- /dev/null
@@ -0,0 +1,35 @@
+#   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/>.
+#
+
+declare -A assoc=(hello world "key with spaces" "value with spaces" one 1 foo bar)
+declare -p assoc
+
+recho "${assoc[@]}"
+recho "${assoc[@]@k}"
+
+recho "${assoc[*]}"
+recho "${assoc[*]@k}"
+
+set -- hello world "key with spaces" "value with spaces" one 1 foo bar
+recho "${@}"
+recho "${@@K}"
+recho "${@@k}"
+
+declare -A clone
+eval clone=\( "${assoc[@]@K}" \)
+declare -p clone
+
+declare -A posparams
+eval posparams=\( "${@@K}" \)
+declare -p posparams
diff --git a/tests/assoc15.sub b/tests/assoc15.sub
new file mode 100644 (file)
index 0000000..c47b153
--- /dev/null
@@ -0,0 +1,92 @@
+#   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/>.
+#
+
+# associative arrays first
+
+v=$'\x01'
+
+declare -A var foo v2
+var=( $'\x01' $'\x01\x01\x01\x01' )
+declare -p var
+v2=( $v $v$v$v$v )
+declare -p v2
+
+recho "${var[@]@k}"
+eval foo=\( "${var[@]@k}" \)
+declare -p foo
+
+var=( \ 1 \ 1\ 1\ 1\ 1 )
+declare -p var
+
+recho "${var[@]@k}"
+eval foo=\( "${var[@]@k}" \)
+declare -p foo
+
+var=( [\ 1]=\ 1\ 1\ 1\ 1 )
+declare -p var
+
+recho "${var[@]@k}"
+eval foo=\( "${var[@]@k}" \)
+declare -p foo
+
+# now indexed arrays
+unset -v var foo
+
+declare -a var
+var=( [0]=\ 1\ 1\ 1\ 1 )
+declare -p var
+
+declare -a foo
+recho "${var[@]@Q}"
+eval foo=\( "${var[@]@Q}" \)
+declare -p foo
+
+var=( \ 1\ 1\ 1\ 1 )
+declare -p var
+
+unset foo
+
+declare -a foo
+recho "${var[@]@Q}"
+eval foo=\( "${var[@]@Q}" \)
+declare -p foo
+
+# similar to array29.sub
+unset -v var foo v2
+
+declare -A var
+var=( one $'\x01\x01\x01\x01' two ab$'\001'cd )
+declare -p var
+
+pv()
+{
+       local -A foo
+       eval foo=\( "${var[@]@k}" \)
+       declare -p foo
+}
+pv
+
+pv1()
+{
+       local -A foo=( $'\x01' "${var[two]}" )
+       declare -p foo
+}
+pv1
+
+pv2()
+{
+       local -A foo=( [$'\x01']="${var[one]}" )
+       declare -p foo
+}
+pv2
diff --git a/tests/assoc16.sub b/tests/assoc16.sub
new file mode 100644 (file)
index 0000000..ae8296b
--- /dev/null
@@ -0,0 +1,56 @@
+#   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/>.
+#
+
+# bash versions up to and including bash-5.1 expanded these subscripts more
+# than once
+
+declare -A A
+
+A["Darwin"]=darjeeling
+A['$(echo Darwin ; echo stderr>&2)']=darjeeling
+
+declare -p A
+
+echo ${A[$(echo Darwin ; echo stderr>&2)]//eel/shark}
+echo ${A['$(echo Darwin ; echo stderr>&2)']//eel/shark}
+
+echo ${A[$(echo Darwin ; echo stderr>&2)]:0:4}
+echo ${A['$(echo Darwin ; echo stderr>&2)']:0:4}
+
+echo ${A[$(echo Darwin ; echo stderr>&2)]^^}
+echo ${A['$(echo Darwin ; echo stderr>&2)']^^}
+
+echo ${A[$(echo Darwin ; echo stderr>&2)]@Q}
+echo ${A['$(echo Darwin ; echo stderr>&2)']@Q}
+
+echo ${A[$(echo Darwin ; echo stderr>&2)]%ing}
+echo ${A['$(echo Darwin ; echo stderr>&2)']%ing}
+
+echo ${#A[$(echo Darwin ; echo stderr>&2)]}
+echo ${#A['$(echo Darwin ; echo stderr>&2)']}
+
+echo ${A[$(echo Darwin ; echo stderr>&2)]:-value}
+echo ${A['$(echo Darwin ; echo stderr>&2)']:-value}
+
+echo ${A[$(echo Darwin ; echo stderr>&2)]:+set}
+echo ${A['$(echo Darwin ; echo stderr>&2)']:+set}
+
+echo ${A[$(echo Darwin ; echo stderr>&2)]:+set}
+echo ${A['$(echo Darwin ; echo stderr>&2)']:+set}
+
+darjeeling=7*6
+Darwin=7*4
+
+echo $(( ${A[$(echo Darwin ; echo stderr>&2)]} ))
+echo $(( ${A['$(echo Darwin ; echo stderr>&2)']} ))
diff --git a/tests/assoc17.sub b/tests/assoc17.sub
new file mode 100644 (file)
index 0000000..a98aaa1
--- /dev/null
@@ -0,0 +1,58 @@
+#   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/>.
+#
+# test behavior with `unset' and `[' and ']' subscripts
+
+declare -A A
+rkey=']'
+lkey='['
+
+A[$rkey]=rbracket
+A[$lkey]=lbracket
+declare -p A
+
+unset A[$rkey]
+unset A[$lkey]
+declare -p A
+
+A["$rkey"]=rbracket
+A["$lkey"]=lbracket
+declare -p A
+
+unset A["$rkey"]
+unset A["$lkey"]
+declare -p A
+
+A[\]]=rbracket
+A[\[]=lbracket
+declare -p A
+
+unset A[\]]
+unset A[\[]
+declare -p A
+
+A[']']=rbracket
+A['[']=lbracket
+declare -p A
+
+unset A[']']
+unset A['[']
+declare -p A
+
+A["]"]=rbracket
+A["["]=lbracket
+declare -p A
+
+unset A["]"]
+unset A["["]
+declare -p A
diff --git a/tests/assoc18.sub b/tests/assoc18.sub
new file mode 100644 (file)
index 0000000..0597609
--- /dev/null
@@ -0,0 +1,59 @@
+#   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/>.
+#
+
+# test behavior of builtins that can take array subscript arguments, make
+# sure they work in the presence of associative arrays and `problematic' keys
+# if assoc_expand_once is set
+#
+# affected builtins: printf, read, wait
+
+declare -A A
+rkey=']'
+lkey='['
+
+shopt -s assoc_expand_once
+
+printf -v A[$rkey] rbracket
+printf -v A[$lkey] lbracket
+declare -p A
+
+unset A[$rkey]
+unset A[$lkey]
+declare -p A
+
+unset A
+declare -A A
+
+read A[$rkey] <<<rbracket
+read A[$lkey] <<<lbracket
+declare -p A
+
+unset A[$rkey]
+unset A[$lkey]
+declare -p A
+
+unset A
+declare -A A
+
+{ sleep 1 ; exit 4; } &
+{ sleep 2 ; exit 5; } & bgpid1=$!
+{ sleep 4 ; exit 6; } &
+
+wait -p A[$rkey] -n %2 %3
+case "${A[$rkey]}" in
+$bgpid1)        echo $?: ok 1;;
+*)              echo bad 1;;
+esac
+
+exit 0
index b88671873e326f7e34877298ee1f80b9136654be..f83ac6d54378140e71ef3f0392e623c67302eaea 100644 (file)
@@ -128,3 +128,32 @@ aa[$key]=foo
 echo "${aa[$key]}"
 
 [[ -v aa[$key] ]] || echo bad assoc expansion
+
+shopt -u assoc_expand_once
+
+declare -A assoc
+
+var=x123
+assoc['$var']=value
+
+declare -p assoc
+
+unset "assoc[$var]"
+declare -p assoc
+
+unset 'assoc[$var]'
+declare -p assoc
+
+shopt -s assoc_expand_once
+unset 'assoc[$var]'
+declare -p assoc
+
+typeset -A foo
+
+foo["foo]bar"]=bip
+typeset foo["foo]bar"]=bax
+
+echo ${!foo[@]}
+echo ${foo[@]}
+
+declare -p foo
index 832472f66f4dec0022888a24cfaf160f359cebdc..4f51d436cb55f7a621e3d2740e06da286979a541 100644 (file)
@@ -1,3 +1,4 @@
+1000
 a
 end-1
 a
@@ -144,11 +145,11 @@ AVAR
 foo
 declare -x foo=""
 declare -x FOO="\$\$"
-./builtins.tests: line 226: declare: FOO: not found
+./builtins.tests: line 228: declare: FOO: not found
 declare -x FOO="\$\$"
 ok
 ok
-./builtins.tests: line 258: kill: 4096: invalid signal specification
+./builtins.tests: line 260: kill: 4096: invalid signal specification
 1
 a\n\n\nb
 a
@@ -178,10 +179,16 @@ unset2
 1
 1
 1
+0
+0
+assoc A unset
+array a
 assoc A
 array a
 assoc B unset
 array b unset
+assoc B unset
+array b unset
 scalar 1
 scalar 2
 scalar 3 unset
@@ -271,4 +278,4 @@ type
 + command -p -- command -v type
 type
 + set +x
-./builtins.tests: line 282: exit: status: numeric argument required
+./builtins.tests: line 284: exit: status: numeric argument required
index 00ebc0fddd40b6152aceac42b01a8ea4f3455a99..8eee43e6e82a5ee82542aebc35fa231e60cf8496 100644 (file)
@@ -15,7 +15,9 @@
 set +p
 set +o posix
 
-ulimit -c 0 2>/dev/null
+ulimit -S -c 0 2>/dev/null
+ulimit -c -S -- 1000 2>/dev/null
+ulimit -c 2>/dev/null
 
 # check that break breaks loops
 for i in a b c; do echo $i; break; echo bad-$i; done
index d36e03a5e525b5db42076ad855c3dbee1f71af48..4fcf793ddcfde2e478b50b592ada27f262e8ce53 100644 (file)
@@ -36,15 +36,25 @@ echo ${#a[@]}
 typeset -A B
 typeset -a b
 
+echo ${#B[@]}
+echo ${#b[@]}
+
 scalar1=foo
 scalar2=
 
+# this now checks for A[@] treating @ as a valid key - post-bash-5.1
 if [ -v A[@] ]; then echo assoc A; else echo assoc A unset; fi
 if [ -v a[@] ]; then echo array a; else echo array a unset; fi
 
+if [ ${#A[@]} -gt 0 ]; then echo assoc A; else echo assoc A unset; fi
+if [ ${#a[@]} -gt 0 ]; then echo array a; else echo array a unset; fi
+
 if [ -v B[@] ]; then echo assoc B; else echo assoc B unset; fi
 if [ -v b[@] ]; then echo array b; else echo array b unset; fi
 
+if [ ${#B[@]} -gt 0 ]; then echo assoc B; else echo assoc B unset; fi
+if [ ${#b[@]} -gt 0 ]; then echo array b; else echo array b unset; fi
+
 if [ -v scalar1[@] ]; then echo scalar 1; else echo scalar 1 unset; fi
 if [ -v scalar2[@] ]; then echo scalar 2; else echo scalar 2 unset; fi
 if [ -v scalar3[@] ]; then echo scalar 3; else echo scalar 3 unset; fi
@@ -71,4 +81,3 @@ echo scalar: ${#scalar3}
 echo scalar: ${#scalar3[@]}
 
 
-
index 557bcadfb1dccf09be680e840058fafa4898c888..d33c8c5af566862b2ddbafa1d05f81e595f61f58 100644 (file)
@@ -14,6 +14,7 @@ no
 no
 no
 ok
+esac
 ok 1
 ok 2
 ok 3
index 2ffcb9063cdeea4ec745478f591624e99ceb8f8c..7ad4c683afb6fe98c5537b855d5a03404fdeb322 100644 (file)
@@ -62,6 +62,10 @@ case abc in (["$empty"]|[!a-z]*) echo yes ;; (*) echo no ;; esac
 
 case " " in ( [" "] ) echo ok;; ( * ) echo no;; esac
 
+# posix issue discovered after bash-5.1 was released
+case esac in (esac) echo esac;; esac
+case k in else|done|time|esac) for f in 1 2 3 ; do :; done esac
+
 # tests of quote removal and pattern matching
 ${THIS_SH} ./case1.sub
 ${THIS_SH} ./case2.sub
index 5bc89a055f3c6f191b1fe0673214808dc3dfa819..c8bf1dc0cca77c5dbad9a2721df38c9a9f241bb0 100644 (file)
@@ -1,41 +1,49 @@
 complete -f -X '!*.+(ps|PS)' gs
-complete -c nice
 complete -e printenv
-complete -c gdb
 complete -f -X '!*.texi*' texi2html
-complete -j -P '%' fg
 complete -g groupmod
-complete -f -X '!*.dvi' dvips
-complete -f -X '!*.texi*' texi2dvi
 complete -v -S '=' typeset
-complete -f .
 complete -c nohup
 complete -a unalias
 complete -g groupdel
 complete -A hostname telnet
-complete -v -S '=' declare
-complete -v -S '=' export
 complete -v -S '=' local
 complete -v -S '=' readonly
 complete -o bashdefault -o filenames -o nospace -F _comp_cd cd
-complete -f -X '!*.dvi' xdvi
 complete -c type
 complete -f ln
 complete -f -X '!*.+(gz|tgz)' gunzip
 complete -f -X '!*.texi*' makeinfo
-complete -u su
 complete -j -P '%' jobs
-complete -o dirnames -o filenames -o nospace -d popd
-complete -A signal trap
 complete -o dirnames -o filenames -o nospace -d pushd
 complete -f -X '!*.pdf' acroread
 complete -v unset
 complete -f -X '!*.+(ps|PS)' ghostview
-complete -j -W '$(ps -x | tail +2 | cut -c1-5)' -P '%' wait
 complete -A hostname rsh
 complete -c exec
-complete -f -X '!*.Z' zmore
 complete -A signal kill
+complete -c eval
+complete -f chown
+complete -f gzip
+complete -W '"${GROUPS[@]}"' newgrp
+complete -A shopt shopt
+complete -A hostname ftp
+complete -A hostname rlogin
+complete -v getopts
+complete -c nice
+complete -c gdb
+complete -j -P '%' fg
+complete -f -X '!*.dvi' dvips
+complete -f -X '!*.texi*' texi2dvi
+complete -f .
+complete -v -S '=' declare
+complete -v -S '=' export
+complete -f -X '!*.dvi' xdvi
+complete -u su
+complete -o dirnames -o filenames -o nospace -d popd
+complete -A signal trap
+complete -j -W '$(ps -x | tail +2 | cut -c1-5)' -P '%' wait
+complete -f -X '!*.Z' zmore
 complete -j -P '%' disown
 complete -f -X '!*.+(ps|PS)' gs
 complete -f -X '!*.+(ps|PS)' gv
@@ -45,19 +53,11 @@ complete -A stopped -P '%' bg
 complete -f cat
 complete -d mkdir
 complete -A helptopic help
-complete -c eval
-complete -f chown
 complete -v read
 complete -c -k time
 complete -f -X '!*.Z' zcat
-complete -f gzip
-complete -W '"${GROUPS[@]}"' newgrp
 complete -f -X '!*.Z' uncompress
 complete -d rmdir
-complete -A shopt shopt
-complete -A hostname ftp
 complete -f more
-complete -A hostname rlogin
-complete -v getopts
 complete -f -X '!*.+(gz|tgz)' gzcat
 ./complete.tests: line 123: complete: notthere: no completion specification
index 426779852ce8862702981c7bb153de100a5aadb2..cd5ab69231ab4cfd6a18c432fd92b832f794220d 100644 (file)
@@ -1,15 +1,17 @@
-./comsub-eof0.sub: line 1: unexpected EOF while looking for matching `)'
-./comsub-eof0.sub: line 5: syntax error: unexpected end of file
+./comsub-eof0.sub: line 5: warning: here-document at line 3 delimited by end-of-file (wanted `EOF')
+hi
 hi
 ./comsub-eof2.sub: line 2: warning: here-document at line 1 delimited by end-of-file (wanted `EOF')
 hi
-./comsub-eof3.sub: line 1: unexpected EOF while looking for matching `)'
-./comsub-eof3.sub: line 5: syntax error: unexpected end of file
-./comsub-eof4.sub: line 6: warning: here-document at line 4 delimited by end-of-file (wanted `EOF')
+./comsub-eof3.sub: line 4: warning: here-document at line 1 delimited by end-of-file (wanted `EOF')
+./comsub-eof3.sub: line 5: unexpected EOF while looking for matching `)'
+./comsub-eof4.sub: line 3: warning: here-document at line 1 delimited by end-of-file (wanted `EOF')
 contents
-./comsub-eof5.sub: line 8: warning: here-document at line 6 delimited by end-of-file (wanted `)')
+./comsub-eof5.sub: line 4: warning: here-document at line 2 delimited by end-of-file (wanted `)')
+hi
+./comsub-eof5.sub: line 9: warning: here-document at line 7 delimited by end-of-file (wanted `EOF')
 hi
-./comsub-eof5.sub: line 13: warning: here-document at line 11 delimited by end-of-file (wanted `EOF')
+./comsub-eof5.sub: line 15: warning: here-document at line 13 delimited by end-of-file (wanted `)')
 hi
-./comsub-eof6.sub: line 1: unexpected EOF while looking for matching `)'
+./comsub-eof6.sub: command substitution: line 3: unexpected EOF while looking for matching `)'
 
index 7b0775fb1dbdb4c9deb95f7f83ac3d806a48f0a3..7490faabc0786f99998c24699351b24db5885128 100644 (file)
@@ -1,3 +1,5 @@
+# it's only the space before the paren that makes this an error
+# when I fix it, it will show up here
 foo=$(cat <<EOF
 hi
 EOF )
index 3da9107efaafed52e992e46e9eb7b45ba2b153d8..4bada675e16b435a147262c43fb01d8f121ea559 100644 (file)
@@ -7,3 +7,9 @@ echo $(
 cat <<\EOF
 hi
 EOF)
+
+# this is currently an error; if I fix it it will show up here
+echo "$(
+cat <<\)
+hi
+))"
index 9aebb8482841677242a38d4ec3e7a2e5201e3d31..037f0ed218b90dbadafe98b8445e25dbbda240ec 100644 (file)
@@ -5,11 +5,14 @@ ab
 
 abcd
 abcd
+mnop
+qrst
 sh_352.26ax
 sh_352.26ay
 sh_352.25a sh_352.25b
 sh_352.27 ) ) )
 abc
+def
 here doc with )
 )
 bad' syntax
@@ -56,9 +59,8 @@ here-doc with \()
 here-doc terminated with a parenthesis
 ' # or a single back- or doublequote
 line terminated with a backslash
-./comsub-posix1.sub: command substitution: line 2: syntax error near unexpected token `)'
-./comsub-posix1.sub: command substitution: line 2: ` if x; then echo foo )'
-after
+./comsub-posix1.sub: line 1: syntax error near unexpected token `)'
+./comsub-posix1.sub: line 1: `echo $( if x; then echo foo )'
 swap32_posix is a function
 swap32_posix () 
 { 
@@ -74,5 +76,25 @@ swap32_posix ()
                 ));
     done
 }
+bash: -c: line 1: syntax error near unexpected token `done'
+bash: -c: line 1: `: $(case x in x) ;; x) done esac)'
+bash: -c: line 1: syntax error near unexpected token `done'
+bash: -c: line 1: `: $(case x in x) ;; x) done ;; esac)'
+bash: -c: line 1: syntax error near unexpected token `esac'
+bash: -c: line 1: `: $(case x in x) (esac) esac)'
+bash: -c: line 1: syntax error near unexpected token `in'
+bash: -c: line 1: `: $(case x in esac|in) foo;; esac)'
+bash: -c: line 1: syntax error near unexpected token `done'
+bash: -c: line 1: `: $(case x in x) ;; x) done)'
+case: -c: line 3: syntax error near unexpected token `esac'
+case: -c: line 3: `$( esac ; bar=foo ; echo "$bar")) echo bad 2;;'
+ok 2
+inside outside
+ok 3
+syntax-error: -c: line 2: syntax error near unexpected token `done'
+syntax-error: -c: line 2: `: $(case x in x) ;; x) done ;; esac)'
 yes
+
+
+
 ab cde
index 4fe1dfaa19304099a3532cafc27129d99cd82083..ab7cd295d7caee58809ab96a6973509ddfc88016 100644 (file)
@@ -28,6 +28,11 @@ echo $(
 echo $()
 echo ab$()cd
 echo ab$(  )cd
+echo mn$(
+)op
+echo qr$(
+
+    )st
 
 echo $(case a in (a) echo sh_352.26ax; esac )
 echo $(case a in (a) echo sh_352.26ay; esac)
@@ -42,6 +47,9 @@ echo $(
 echo abc # a comment with )
 )
 
+echo $(#a comment with )
+echo def)
+
 echo $(
 cat <<eof
 here doc with )
@@ -226,11 +234,13 @@ echo $(
 )
 
 ${THIS_SH} ./comsub-posix1.sub
-
 ${THIS_SH} ./comsub-posix2.sub
-
 ${THIS_SH} ./comsub-posix3.sub
 
+#${THIS_SH} ./comsub-posix4.sub
+${THIS_SH} ./comsub-posix5.sub
+${THIS_SH} ./comsub-posix6.sub
+
 # produced a parse error through bash-4.0-beta2
 : $(echo foo)"
 "
@@ -247,6 +257,12 @@ unset x
 : $(case a in a) echo ;; # comment
 esac)
 
+: $(case a in 
+    a)
+        echo
+    ;; # comment
+esac)
+
 # fixed after bash-4.3 released
 testing=$(
     echo test | while read line; do
@@ -257,5 +273,14 @@ testing=$(
     done
 )
 
+# sanity check for empty comsubs
+echo $()
+echo $(
+)
+
+echo $(                
+
+   )
+
 # recommended to be parsed as a nested comsub instead of arithsub
 echo $(( echo ab cde ) )
index bbcc60fb2c6904815445fd3d30373ec6c0eb5fc0..de6f473ad665826ff554229f0ff1366063edf6d2 100644 (file)
@@ -1,3 +1,3 @@
 echo $( if x; then echo foo )
 
-echo after
+echo should not see this
diff --git a/tests/comsub-posix5.sub b/tests/comsub-posix5.sub
new file mode 100644 (file)
index 0000000..f10e773
--- /dev/null
@@ -0,0 +1,70 @@
+#   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/>.
+#
+: ${THIS_SH:=./bash}
+
+# problems with recognzing `esac' after a right paren in a command substitution
+
+: $(case x in x) esac)
+: $(case x in x) ;; x) esac)
+# non-reserved word beginning with e
+: $(case x in x) ;; x) echo ;; esac)
+# reserved word beginning with e
+: $(case x in x) ;; x) eval esac ;; esac)
+
+: $(case x in x ) esac)
+: $(case x in x ) ;; x) esac)
+
+: $(case x in (x) esac)
+: $(case x in (x) ;; (x) esac)
+: $(case x in (x) ;; x) esac)
+: $(case x in (x) (echo a) esac)
+
+: $(case x in (x) (echo esac) esac)
+: $(case x in x) (echo esac) esac)
+
+# these errors should be caught sooner
+${THIS_SH} -c ': $(case x in x) ;; x) done esac)' bash
+${THIS_SH} -c ': $(case x in x) ;; x) done ;; esac)' bash
+${THIS_SH} -c ': $(case x in x) (esac) esac)' bash
+
+# these are not errors
+: $(case x in x) ;; x) eval done ;; esac)
+
+# these are just ridiculous
+: $(case x in (x) a() { echo a; } esac)
+: $(case x in (x) if :; then echo a; fi esac)
+: $(case x in (x) { echo a; } esac)
+: $(case x in (x) while false; do echo a; done esac)
+: $(case x in (x) case y in (y) echo a;; esac esac)
+: $(case x in (x) case y in (y) echo a;; esac ;; (y) foo ;;  esac)
+
+: $(case x in x) a() { echo a; } esac)
+: $(case x in x) if :; then echo a; fi esac)
+: $(case x in x) { echo a; } esac)
+: $(case x in x) while false; do echo a; done esac)
+: $(case x in x) case y in (y) echo a;; esac esac)
+: $(case x in x) case y in (y) echo a;; esac ;; y) foo ;;  esac)
+: $(case x in x) case y in y) echo a;; esac ;; y) foo ;;  esac)
+
+: $(case ni in esac)
+: $(case in in esac)
+
+: $(case x in in|esac) foo;; esac)
+: $(case esac in (esac) echo esac;; esac)
+: $(case k in else|done|time|esac) for f in 1 2 3 ; do :; done esac)
+
+# this is an error
+${THIS_SH} -c ': $(case x in esac|in) foo;; esac)' bash
+
+${THIS_SH} -c ': $(case x in x) ;; x) done)' bash
diff --git a/tests/comsub-posix6.sub b/tests/comsub-posix6.sub
new file mode 100644 (file)
index 0000000..212ad20
--- /dev/null
@@ -0,0 +1,43 @@
+: ${THIS_SH:=./bash}
+
+# comsub should not inherit PST_COMPASSIGN
+
+C=($(echo "${A[@]}" | \
+            (while read -d ' ' i; do
+                C=(${C/ ${i%% *} / })
+            done
+            echo ${C[@]})))
+
+# comsub should not inherit PST_CASEPAT
+
+${THIS_SH} -c '
+case foo in
+$( esac ; bar=foo ; echo "$bar")) echo bad 2;;
+*)     echo ok 2;;
+esac
+
+echo we should not see this' case
+
+# comsub should not inherit PST_SUBSHELL
+
+${THIS_SH} -c '( case foo in
+  ( $(echo foo | cat )) echo ok 2;;
+  *) echo bad 2;;
+  esac
+
+  echo $( echo inside ) outside )' subshell
+
+# comsub should not inherit PST_REDIRLIST
+
+${THIS_SH} -c '
+{fd}</dev/null {fd2}<$(foo=/dev/null ; echo $foo) exec
+case $fd2 in
+[0-9]*)        echo ok 3 ;;
+*)     echo bad 3 ;;
+esac' redirlist
+
+# comsub should exit on syntax error while parsing
+${THIS_SH} -c '
+: $(case x in x) ;; x) done ;; esac)
+
+echo after syntax error' syntax-error
index a329c832dcb368a1bb342d13b1b207d9bf1bec64..eae8c3b28f5877f463d68262156859304e8e0d12 100644 (file)
@@ -19,6 +19,7 @@ argv[1] = <sed> argv[2] = <-e> argv[3] = <s/[^I:]//g>
 argv[1] = <foo\^Jbar>
 argv[1] = <foobar>
 argv[1] = <foo\^Jbar>
+nested
 #esac
 a
 ok 1
@@ -55,3 +56,24 @@ d \
 g
 d \
 g
+ok 1
+ok 2
+ok 3
+ok 4
+ok 5
+ok 6
+ok 7
+ok 9
+ok 8
+ok 8 
+Mon Aug 29 20:03:02 EDT 2022
+post foo
+Mon Aug 29 20:03:02 EDT 2022
+post foo1
+Mon Aug 29 20:03:02 EDT 2022
+Mon Aug 29 20:03:02 EDT 2022 after
+7
+Mon Aug 29 20:03:02 EDT 2022
+hey after x
+./comsub6.sub: line 40: syntax error near unexpected token `)'
+./comsub6.sub: line 40: `math1)'
index 47863024874a58b4cdb49aa39c5d6da8349c8a2a..698ce30b0337aa05323d0b797e763fd5e4648b29 100644 (file)
@@ -69,7 +69,16 @@ comsub_foo_1()
   echo $(while true; do case $HOME in /*) echo abs ;; esac; done)
 }
 
+echo $(
+echo $(
+echo $(echo $( echo nested )
+)
+)
+)
+
 ${THIS_SH} ./comsub1.sub
 ${THIS_SH} ./comsub2.sub
 ${THIS_SH} ./comsub3.sub
 ${THIS_SH} ./comsub4.sub
+${THIS_SH} ./comsub5.sub
+${THIS_SH} ./comsub6.sub
diff --git a/tests/comsub5.sub b/tests/comsub5.sub
new file mode 100644 (file)
index 0000000..cc83374
--- /dev/null
@@ -0,0 +1,51 @@
+#   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/>.
+#
+
+# this is a new feature: expanding aliases when initially parsing command
+# substitutions. required by posix, so enabled in posix mode. default mode
+# stays backwards compatible.
+
+shopt -s expand_aliases
+set -o posix
+
+alias switch=case
+
+switch foo in foo) echo ok 1;; esac
+
+echo $( switch foo in foo) echo ok 2;; esac )
+echo "$( switch foo in foo) echo ok 3;; esac )"
+
+echo $( switch foo in (foo) echo ok 4;; esac )
+echo "$( switch foo in (foo) echo ok 5;; esac )"
+
+alias nest='('
+
+echo $( nest echo ok 6 ) )
+echo "$( nest echo ok 7 ) )"
+
+alias short='echo ok 8 )'
+
+alias DO='{ '
+alias DONE='}'
+got=$(DO
+echo ok 9; DONE)
+echo "$got" 
+
+echo $( short
+echo "$( short "
+
+# remember that short" won't work because you start a new quoting context
+# inside $( and the token (`short') won't be delimited by the ending double
+# quote, so there's no opportunity to perform the alias expansion that would
+# terminate the command substitution
diff --git a/tests/comsub6.sub b/tests/comsub6.sub
new file mode 100644 (file)
index 0000000..d2b02bf
--- /dev/null
@@ -0,0 +1,40 @@
+#   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/>.
+#
+DATE='Mon Aug 29 20:03:02 EDT 2022'
+shopt -s expand_aliases
+
+alias foo='echo $(echo $DATE)'
+alias foo1='echo $(echo $DATE)    '
+
+foo
+echo post foo
+
+foo1
+echo post foo1
+
+alias comsub0='echo $(echo $DATE'
+comsub0)
+comsub0                ) after
+
+alias math0='echo $(( 4+3 )'
+math0)
+
+alias x='VAR=$(echo hey)'
+x
+foo
+
+echo $VAR after x
+
+alias math1='echo $( date )'
+math1)
index 59a4a8869f1eaee0bf2f7fc6e4919d3dfbdd67fc..a72a1537eda515d1a9a75fb9a71d94fce8850ffd 100644 (file)
@@ -2,6 +2,10 @@ returns: 0
 returns: 0
 returns: 1
 returns: 0
+1
+0
+1
+0
 returns: 0
 returns: 0
 returns: 0
@@ -23,10 +27,12 @@ returns: 0
 returns: 1
 returns: 1
 returns: 0
-./cond.tests: line 114: [[: 4+: syntax error: operand expected (error token is "+")
+./cond.tests: line 122: [[: 4+: syntax error: operand expected (error token is "+")
 returns: 1
 returns: 0
 returns: 0
+returns: 0
+returns: 0
 returns: 1
 returns: 0
 returns: 0
index aa6a81047eb7c63e861e634679b20c55dcba1778..c0747e981ca00f4cea2cd8c96646a446c12fbeae 100644 (file)
@@ -33,6 +33,14 @@ echo returns: $?
 [[ ! x || x ]]
 echo returns: $?
 
+# ! toggles on and off rather than just setting an `invert result' flag
+# this differs from ksh93
+[[ ! 1 -eq 1 ]]; echo $?
+[[ ! ! 1 -eq 1 ]]; echo $?
+
+[[ ! ! ! 1 -eq 1 ]]; echo $?
+[[ ! ! ! ! 1 -eq 1 ]]; echo $?
+
 # parenthesized terms didn't work right until post-2.04
 [[ a ]]
 echo returns: $?
@@ -122,6 +130,13 @@ A=7
 [[ $IVAR -eq A ]]
 echo returns: $?
 
+[[ "$IVAR" -eq "7" ]]
+echo returns: $?
+
+A=7
+[[ "$IVAR" -eq "A" ]]
+echo returns: $?
+
 unset IVAR A
 
 # more pattern matching tests
@@ -207,6 +222,9 @@ del=$'\177'
 [[ "" == "$foo" ]] && echo ok 4
 [[ "$del" == "${foo,,}" ]] || echo ok 5
 
+# allow reserved words after a conditional command just because
+if [[ str ]] then [[ str ]] fi
+
 ${THIS_SH} ./cond-regexp1.sub
 
 ${THIS_SH} ./cond-regexp2.sub
index 200007241e87eea12c1f7e47f32156191510ed74..269136dc2121594a94062dc932c94bb7a3f73539 100644 (file)
@@ -19,7 +19,7 @@ tf ()
         i=$(( i + 1 ));
     done;
     [[ -r /dev/fd/0 && -w /dev/fd/1 ]] || echo oops > /dev/null;
-    for name in $( echo 1 2 3 );
+    for name in $(echo 1 2 3);
     do
         test -r /dev/fd/$name;
     done;
old mode 100755 (executable)
new mode 100644 (file)
index d480898..721eea1
@@ -1,3 +1,17 @@
+#   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/>.
+#
+
 # first, let's start with the basics
 
 recho "$@"
@@ -246,6 +260,11 @@ ${THIS_SH} ./dollar-at-star8.sub
 # with different values for IFS
 ${THIS_SH} ./dollar-at-star9.sub
 
+# tests for expansions of "$*" and "$@" and their array equivalents when $1 == ''
+# and we're using the POSIX word expansions
+${THIS_SH} ./dollar-at-star10.sub
+${THIS_SH} ./dollar-at-star11.sub
+
 # tests for special expansion of "$*" and "${array[*]}" when used with other
 # expansions -- bugs through bash-2.05b
 ${THIS_SH} ./dollar-star1.sub
diff --git a/tests/dollar-at-star10.sub b/tests/dollar-at-star10.sub
new file mode 100644 (file)
index 0000000..6b52b01
--- /dev/null
@@ -0,0 +1,66 @@
+# checks for array variables and positional parameter expansions losing quoted
+# null string expansions -- problem through bash-5.1
+
+set -- ''
+myvar[0]=
+a="${myvar[*]}"
+
+recho "$*"
+recho "${*}"
+
+recho "${a}"
+recho "${myvar[*]}"
+
+recho "${a:+nonnull}"
+recho "${myvar[*]:+nonnull}"
+
+a="${myvar[@]}"
+
+recho "$@"
+recho "${@}"
+
+recho "${a}"
+recho "${myvar[@]}"
+
+recho "${a:+nonnull}"
+recho "${myvar[@]:+nonnull}"
+
+# check to make sure literal CTLNULs are handled correctly
+set -- $'\x7f'
+
+recho "$@"
+recho "${@}"
+recho "${@:+nonnull}"
+
+recho "$*"
+recho "${*}"
+recho "${*:+nonnull}"
+
+shift $#
+
+# these should echo nothing
+recho "${@}"
+recho "${@:+nonnull}"
+
+unset -v a
+
+# make sure that other null expansions result in null strings where appropriate
+set -- ''
+a[0]=
+
+recho "$*"$x
+recho "${*}"$x
+
+recho "$@"$x
+recho "${@}"$x
+
+recho "${a[*]}"$x
+recho "${a[@]}"$x
+
+
+recho "$@"$x
+recho "${@}"$x
+
+recho "${a[*]}"
+recho "${a[@]}"
+
diff --git a/tests/dollar-at-star11.sub b/tests/dollar-at-star11.sub
new file mode 100644 (file)
index 0000000..b7a6ec4
--- /dev/null
@@ -0,0 +1,80 @@
+a[0]='/'
+set -- /
+
+# these should all result in the empty (null) string
+
+recho "${a[0]%?}"
+recho "${a[*]%?}"
+recho "${a[@]%?}"
+
+recho "${*%?}"
+recho "${@%?}"
+
+recho "${a[0]#?}"
+recho "${a[*]#?}"
+recho "${a[@]#?}"
+
+recho "${*#?}"
+recho "${@#?}"
+
+recho "${a[0]/\//}"
+recho "${a[*]/\//}"
+recho "${a[@]/\//}"
+
+recho "${*/\//}"
+recho "${@/\//}"
+
+recho "${a[0]:1:1}"
+# these next four will all echo /
+
+# arrays are zero-based
+recho "${a[*]:0:1}"
+recho "${a[@]:0:1}"
+# but the positional parameters start at 1
+recho "${*:1:1}"
+recho "${@:1:1}"
+
+a[0]=''
+set -- ''
+
+# arrays are zero-based
+recho "${a[*]:0:1}"
+recho "${a[@]:0:1}"
+
+recho "${*:1:1}"
+recho "${@:1:1}"
+
+# these should all result in the empty (null) string, or quoted as such
+
+recho "${a[0]@Q}"
+recho "${a[*]@Q}"
+recho "${a[@]@Q}"
+
+recho "${*@Q}"
+recho "${@@Q}"
+
+recho "${a[0]@L}"
+recho "${a[*]@L}"
+recho "${a[@]@L}"
+
+recho "${*@L}"
+recho "${@@L}"
+
+# examples from the bug report
+unset -v a
+
+a[0]='/'
+for i in "${a[@]%/}"; do recho "$i"; done
+
+a[0]=''
+for i in "${a[@]}"; do recho "$i"; done
+
+a[0]='/'
+a[1]="//"
+for i in "${a[@]%/}"; do recho "$i"; done
+
+unset -v x y
+x=('/')
+y=("${x[@]%/}")
+
+echo "${#x[@]}:${#y[@]}"
index 09910d7e316b6da545c991598df2a4bbbb2d89e7..10c5cca13fdef331f00778bbe2acedc891bb22bd 100644 (file)
@@ -399,6 +399,73 @@ argv[1] = <^?>
 argv[1] = <^?>
 argv[1] = <>
 argv[1] = <>
+argv[1] = <>
+argv[1] = <>
+argv[1] = <>
+argv[1] = <>
+argv[1] = <>
+argv[1] = <>
+argv[1] = <>
+argv[1] = <>
+argv[1] = <>
+argv[1] = <>
+argv[1] = <>
+argv[1] = <>
+argv[1] = <^?>
+argv[1] = <^?>
+argv[1] = <nonnull>
+argv[1] = <^?>
+argv[1] = <^?>
+argv[1] = <nonnull>
+argv[1] = <>
+argv[1] = <>
+argv[1] = <>
+argv[1] = <>
+argv[1] = <>
+argv[1] = <>
+argv[1] = <>
+argv[1] = <>
+argv[1] = <>
+argv[1] = <>
+argv[1] = <>
+argv[1] = <>
+argv[1] = <>
+argv[1] = <>
+argv[1] = <>
+argv[1] = <>
+argv[1] = <>
+argv[1] = <>
+argv[1] = <>
+argv[1] = <>
+argv[1] = <>
+argv[1] = <>
+argv[1] = <>
+argv[1] = <>
+argv[1] = <>
+argv[1] = <>
+argv[1] = </>
+argv[1] = </>
+argv[1] = </>
+argv[1] = </>
+argv[1] = <>
+argv[1] = <>
+argv[1] = <>
+argv[1] = <>
+argv[1] = <''>
+argv[1] = <''>
+argv[1] = <''>
+argv[1] = <''>
+argv[1] = <''>
+argv[1] = <>
+argv[1] = <>
+argv[1] = <>
+argv[1] = <>
+argv[1] = <>
+argv[1] = <>
+argv[1] = <>
+argv[1] = <>
+argv[1] = </>
+1:1
 xa|xb|xc
 xa|xb|xc
 a|b|c
index 5aefab64e76453613fc355ffdbc0abe1464c91ba..ddf69ed1c3ae64ff44d5550b57958e931836bc91 100644 (file)
@@ -50,15 +50,27 @@ unset before after
 # EPOCHSECONDS
 
 # not exact, but should work
-# could also use python -c 'import time; ts = int(time.time()); print(ts)'
-now1=$(perl -e 'print time')
+# date +%s should be portable enough now
+# then try gawk, perl, python in that order
+now1=$(date +%s 2>/dev/null) D=date
+[ -z "$now1" ] &&
+{
+       now1=$(gawk 'BEGIN { print systime(); }' 2>/dev/null) D=gawk
+       [ -z "$now1" ] && now1=$(perl -e 'print time' 2>/dev/null) D=perl
+       [ -z "$now1" ] && now1=$(python -c 'import time; ts = int(time.time()); print(ts)' 2>/dev/null) D=python
+}
 now2=$EPOCHSECONDS
 
-case $now1 in
-$now2) echo EPOCHSECONDS ok ;;
-*)     echo "current time via perl and EPOCHSECONDS possible mismatch|$now1|$now2" >&2 ;;
-esac
-unset now1 now2
+# use a window of +-1 second
+offset=1
+if [[ -z $now1 ]]; then
+       echo "cannot get current time using date/gawk/perl/python" >&2
+elif (( $now1 - $offset <= $now2 && $now2 <= $now1 + $offset )); then
+       echo EPOCHSECONDS ok
+else
+       echo "current time via $D and EPOCHSECONDS possible mismatch|$now1|$now2|offset=$offset" >&2
+fi
+unset now1 now2 D
 
 LC_ALL=C               # force decimal point to `.'
 now1=$EPOCHREALTIME
index be0c8959ac13d385503ffbd762d72f033602c89c..0bd88efb9a8fbbf3c56aa84e1a9abda0d22ab10b 100644 (file)
@@ -11,93 +11,95 @@ declare -fr func
 unset: usage: unset [-f] [-v] [-n] [name ...]
 ./errors.tests: line 55: unset: func: cannot unset: readonly function
 ./errors.tests: line 58: declare: func: readonly function
-./errors.tests: line 62: unset: XPATH: cannot unset: readonly variable
-./errors.tests: line 68: unset: cannot simultaneously unset a function and a variable
-./errors.tests: line 71: declare: -z: invalid option
-declare: usage: declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]
-./errors.tests: line 73: declare: `-z': not a valid identifier
-./errors.tests: line 74: declare: `/bin/sh': not a valid identifier
-./errors.tests: line 78: declare: cannot use `-f' to make functions
-./errors.tests: line 81: exec: -i: invalid option
+./errors.tests: line 62: declare: -a: invalid option
+./errors.tests: line 63: declare: -i: invalid option
+./errors.tests: line 67: unset: XPATH: cannot unset: readonly variable
+./errors.tests: line 73: unset: cannot simultaneously unset a function and a variable
+./errors.tests: line 76: declare: -z: invalid option
+declare: usage: declare [-aAfFgiIlnrtux] [name[=value] ...] or declare -p [-aAfFilnrtux] [name ...]
+./errors.tests: line 78: declare: `-z': not a valid identifier
+./errors.tests: line 79: declare: `/bin/sh': not a valid identifier
+./errors.tests: line 83: declare: cannot use `-f' to make functions
+./errors.tests: line 86: exec: -i: invalid option
 exec: usage: exec [-cl] [-a name] [command [argument ...]] [redirection ...]
-./errors.tests: line 85: export: XPATH: not a function
-./errors.tests: line 88: break: only meaningful in a `for', `while', or `until' loop
-./errors.tests: line 89: continue: only meaningful in a `for', `while', or `until' loop
-./errors.tests: line 92: shift: label: numeric argument required
-./errors.tests: line 97: shift: too many arguments
-./errors.tests: line 103: let: expression expected
-./errors.tests: line 106: local: can only be used in a function
-./errors.tests: line 109: logout: not login shell: use `exit'
-./errors.tests: line 112: hash: notthere: not found
-./errors.tests: line 115: hash: -v: invalid option
+./errors.tests: line 90: export: XPATH: not a function
+./errors.tests: line 93: break: only meaningful in a `for', `while', or `until' loop
+./errors.tests: line 94: continue: only meaningful in a `for', `while', or `until' loop
+./errors.tests: line 97: shift: label: numeric argument required
+./errors.tests: line 102: shift: too many arguments
+./errors.tests: line 108: let: expression expected
+./errors.tests: line 111: local: can only be used in a function
+./errors.tests: line 114: logout: not login shell: use `exit'
+./errors.tests: line 117: hash: notthere: not found
+./errors.tests: line 120: hash: -v: invalid option
 hash: usage: hash [-lr] [-p pathname] [-dt] [name ...]
-./errors.tests: line 119: hash: hashing disabled
-./errors.tests: line 122: export: `AA[4]': not a valid identifier
-./errors.tests: line 123: readonly: `AA[4]': not a valid identifier
-./errors.tests: line 126: unset: [-2]: bad array subscript
-./errors.tests: line 130: AA: readonly variable
-./errors.tests: line 134: AA: readonly variable
-./errors.tests: line 142: shift: 5: shift count out of range
-./errors.tests: line 143: shift: -2: shift count out of range
-./errors.tests: line 146: shopt: no_such_option: invalid shell option name
-./errors.tests: line 147: shopt: no_such_option: invalid shell option name
-./errors.tests: line 150: umask: 09: octal number out of range
-./errors.tests: line 151: umask: `:': invalid symbolic mode character
-./errors.tests: line 152: umask: `:': invalid symbolic mode operator
-./errors.tests: line 155: umask: -i: invalid option
+./errors.tests: line 124: hash: hashing disabled
+./errors.tests: line 127: export: `AA[4]': not a valid identifier
+./errors.tests: line 128: readonly: `AA[4]': not a valid identifier
+./errors.tests: line 131: unset: [-2]: bad array subscript
+./errors.tests: line 135: AA: readonly variable
+./errors.tests: line 139: AA: readonly variable
+./errors.tests: line 147: shift: 5: shift count out of range
+./errors.tests: line 148: shift: -2: shift count out of range
+./errors.tests: line 151: shopt: no_such_option: invalid shell option name
+./errors.tests: line 152: shopt: no_such_option: invalid shell option name
+./errors.tests: line 155: umask: 09: octal number out of range
+./errors.tests: line 156: umask: `:': invalid symbolic mode character
+./errors.tests: line 157: umask: `:': invalid symbolic mode operator
+./errors.tests: line 160: umask: -i: invalid option
 umask: usage: umask [-p] [-S] [mode]
-./errors.tests: line 159: umask: `u': invalid symbolic mode character
-./errors.tests: line 168: VAR: readonly variable
-./errors.tests: line 171: declare: VAR: readonly variable
-./errors.tests: line 172: declare: VAR: readonly variable
-./errors.tests: line 174: declare: unset: not found
-./errors.tests: line 177: VAR: readonly variable
-./errors.tests: command substitution: line 181: syntax error near unexpected token `)'
-./errors.tests: command substitution: line 181: ` for z in 1 2 3; do )'
-./errors.tests: command substitution: line 182: syntax error near unexpected token `done'
-./errors.tests: command substitution: line 182: ` for z in 1 2 3; done )'
-./errors.tests: line 184: cd: HOME not set
-./errors.tests: line 185: cd: /tmp/xyz.bash: No such file or directory
-./errors.tests: line 187: cd: OLDPWD not set
-./errors.tests: line 188: cd: /bin/sh: Not a directory
-./errors.tests: line 190: cd: /tmp/cd-notthere: No such file or directory
-./errors.tests: line 193: .: filename argument required
+./errors.tests: line 164: umask: `u': invalid symbolic mode character
+./errors.tests: line 173: VAR: readonly variable
+./errors.tests: line 176: declare: VAR: readonly variable
+./errors.tests: line 177: declare: VAR: readonly variable
+./errors.tests: line 179: declare: unset: not found
+./errors.tests: line 182: VAR: readonly variable
+comsub: -c: line 1: syntax error near unexpected token `)'
+comsub: -c: line 1: `: $( for z in 1 2 3; do )'
+comsub: -c: line 1: syntax error near unexpected token `done'
+comsub: -c: line 1: `: $( for z in 1 2 3; done )'
+./errors.tests: line 189: cd: HOME not set
+./errors.tests: line 190: cd: /tmp/xyz.bash: No such file or directory
+./errors.tests: line 192: cd: OLDPWD not set
+./errors.tests: line 193: cd: /bin/sh: Not a directory
+./errors.tests: line 195: cd: /tmp/cd-notthere: No such file or directory
+./errors.tests: line 198: .: filename argument required
 .: usage: . filename [arguments]
-./errors.tests: line 194: source: filename argument required
+./errors.tests: line 199: source: filename argument required
 source: usage: source filename [arguments]
-./errors.tests: line 197: .: -i: invalid option
+./errors.tests: line 202: .: -i: invalid option
 .: usage: . filename [arguments]
-./errors.tests: line 200: set: -q: invalid option
-set: usage: set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]
-./errors.tests: line 203: enable: sh: not a shell builtin
-./errors.tests: line 203: enable: bash: not a shell builtin
-./errors.tests: line 206: shopt: cannot set and unset shell options simultaneously
-./errors.tests: line 209: read: var: invalid timeout specification
-./errors.tests: line 212: read: `/bin/sh': not a valid identifier
-./errors.tests: line 215: VAR: readonly variable
-./errors.tests: line 218: readonly: -x: invalid option
+./errors.tests: line 205: set: -q: invalid option
+set: usage: set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]
+./errors.tests: line 208: enable: sh: not a shell builtin
+./errors.tests: line 208: enable: bash: not a shell builtin
+./errors.tests: line 211: shopt: cannot set and unset shell options simultaneously
+./errors.tests: line 214: read: var: invalid timeout specification
+./errors.tests: line 217: read: `/bin/sh': not a valid identifier
+./errors.tests: line 220: VAR: readonly variable
+./errors.tests: line 223: readonly: -x: invalid option
 readonly: usage: readonly [-aAf] [name[=value] ...] or readonly -p
-./errors.tests: line 221: eval: -i: invalid option
+./errors.tests: line 226: eval: -i: invalid option
 eval: usage: eval [arg ...]
-./errors.tests: line 222: command: -i: invalid option
+./errors.tests: line 227: command: -i: invalid option
 command: usage: command [-pVv] command [arg ...]
-./errors.tests: line 225: /bin/sh + 0: syntax error: operand expected (error token is "/bin/sh + 0")
-./errors.tests: line 226: /bin/sh + 0: syntax error: operand expected (error token is "/bin/sh + 0")
-./errors.tests: line 229: trap: NOSIG: invalid signal specification
-./errors.tests: line 232: trap: -s: invalid option
+./errors.tests: line 230: /bin/sh + 0: syntax error: operand expected (error token is "/bin/sh + 0")
+./errors.tests: line 231: /bin/sh + 0: syntax error: operand expected (error token is "/bin/sh + 0")
+./errors.tests: line 234: trap: NOSIG: invalid signal specification
+./errors.tests: line 237: trap: -s: invalid option
 trap: usage: trap [-lp] [[arg] signal_spec ...]
-./errors.tests: line 238: return: can only `return' from a function or sourced script
-./errors.tests: line 242: break: 0: loop count out of range
-./errors.tests: line 246: continue: 0: loop count out of range
-./errors.tests: line 251: builtin: bash: not a shell builtin
-./errors.tests: line 255: bg: no job control
-./errors.tests: line 256: fg: no job control
-./errors.tests: line 259: kill: -s: option requires an argument
-./errors.tests: line 261: kill: S: invalid signal specification
-./errors.tests: line 263: kill: `': not a pid or valid job spec
+./errors.tests: line 243: return: can only `return' from a function or sourced script
+./errors.tests: line 247: break: 0: loop count out of range
+./errors.tests: line 251: continue: 0: loop count out of range
+./errors.tests: line 256: builtin: bash: not a shell builtin
+./errors.tests: line 260: bg: no job control
+./errors.tests: line 261: fg: no job control
+./errors.tests: line 264: kill: -s: option requires an argument
+./errors.tests: line 266: kill: S: invalid signal specification
+./errors.tests: line 268: kill: `': not a pid or valid job spec
 kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
-./errors.tests: line 268: set: trackall: invalid option name
-./errors.tests: line 272: xx: readonly variable
+./errors.tests: line 273: set: trackall: invalid option name
+./errors.tests: line 277: xx: readonly variable
 1
 ./errors1.sub: line 14: .: -i: invalid option
 .: usage: . filename [arguments]
@@ -174,14 +176,14 @@ after non-special builtin: 0
 ./errors7.sub: line 25: x: readonly variable
 after special builtin: 0
 ./errors7.sub: line 27: x: readonly variable
+./errors7.sub: line 29: x: readonly variable
 ./errors7.sub: line 21: x: readonly variable
-./errors7.sub: line 21: notthere: command not found
-after no such command: 127
+after no such command: 1
 ./errors7.sub: line 23: x: readonly variable
-echo builtin
-after non-special builtin: 0
+after non-special builtin: 1
 ./errors7.sub: line 25: x: readonly variable
 ./errors7.sub: line 27: x: readonly variable
+./errors7.sub: line 29: x: readonly variable
 ./errors8.sub: eval: line 7: syntax error: unexpected end of file
 ok 1
 ./errors8.sub: line 8: v: readonly variable
@@ -194,7 +196,13 @@ ok 4
 ok 5
 ./errors8.sub: line 14: set: notanoption: invalid option name
 ok 6
+DEBUG
+./errors9.sub: line 6: [[: ++: syntax error: operand expected (error token is "+")
+DEBUG
+./errors9.sub: line 8: ((: -- : syntax error: operand expected (error token is "- ")
+DEBUG
+./errors9.sub: line 10: ((: -- : syntax error: operand expected (error token is "- ")
 bash: line 1: return: can only `return' from a function or sourced script
 after return
 bash: line 1: return: can only `return' from a function or sourced script
-./errors.tests: line 299: `!!': not a valid identifier
+./errors.tests: line 305: `!!': not a valid identifier
index 531b625bba094b35c3082c2dd7dfe7300293df43..0880bb556bec6b190686268791b9ab3544fb01cd 100644 (file)
@@ -57,6 +57,11 @@ unset -f func
 declare -fr func
 declare -f +r func
 
+# cannot use declare -f in combination with other attributes
+a() { echo a; }
+declare -f -a a
+declare -f -i b c
+
 XPATH=$PATH
 declare -r XPATH
 unset -v XPATH
@@ -176,9 +181,9 @@ declare -p unset
 # iteration variable in a for statement being readonly
 for VAR in 1 2 3 ; do echo $VAR; done
 
-# parser errors
-: $( for z in 1 2 3; do )
-: $( for z in 1 2 3; done )
+# parser errors; caught early so we have to run them in subshells
+${THIS_SH} -c ': $( for z in 1 2 3; do )' comsub
+${THIS_SH} -c ': $( for z in 1 2 3; done )' comsub
 
 # various `cd' errors
 ( unset HOME ; cd )
@@ -287,6 +292,7 @@ ${THIS_SH} ./errors7.sub
 ${THIS_SH} -o posix ./errors7.sub
 
 ${THIS_SH} ./errors8.sub
+${THIS_SH} ./errors9.sub
 
 ${THIS_SH} -c 'return ; echo after return' bash
 ${THIS_SH} -o posix -c 'return ; echo after return' bash
index add8782a7f4ca7d775df17bb135b1dc29ff5533c..544e3e4c1a254ba519a9e9cc2f54e2e88ea5e632 100644 (file)
@@ -26,3 +26,5 @@ echo after non-special builtin: $?
 echo after special builtin: $? )
 ( x=8 $nocmd 
 echo after assignment error: $? )
+( x=8
+echo after assignment statement error: $? )
diff --git a/tests/errors9.sub b/tests/errors9.sub
new file mode 100644 (file)
index 0000000..3a26704
--- /dev/null
@@ -0,0 +1,14 @@
+trap 'echo DEBUG' DEBUG
+
+# make sure that the right command name appears in the error messages and
+# that the DEBUG trap doesn't overwrite it
+
+[[ ++ -gt 3 ]]
+
+(( -- ))
+
+for (( -- ; ++; -- ))
+do
+       echo bogus
+done
+
index 0a249ddadbd62a058d5e5f79d2c4c4b93bca8361..ef02fbb419d5fdc4e3fe5f4b24b25a4534de9b18 100644 (file)
@@ -20,8 +20,17 @@ after exec1.sub: one two three
 126
 0
 this is bashenv
-./exec3.sub: line 3: /tmp/bash-notthere: No such file or directory
-127
+trap -- 'echo EXIT' EXIT
+trap -- '' SIGTERM
+trap -- 'echo USR1' SIGUSR1
+USR1
+./exec3.sub: line 27: /tmp/bash-notthere: No such file or directory
+./exec3.sub: after failed exec: 127
+trap -- 'echo EXIT' EXIT
+trap -- '' SIGTERM
+trap -- 'echo USR1' SIGUSR1
+USR1
+EXIT
 ./execscript: line 71: notthere: No such file or directory
 127
 ./execscript: line 74: notthere: No such file or directory
@@ -133,3 +142,31 @@ w
 x
 y
 z
+=====
+WORKS
+done
+WORKS
+a
+b
+c
+d
+a
+b
+c
+d
+e
+A
+B
+c
+d
+c
+d
+e
+x
+y
+z
+WORKS
+w
+x
+y
+z
index 3402fb95fbc4b1774aecc0fb65c091d597fbbee8..eddd33fa015939f5d366579d3da997b36e8e1092 100644 (file)
@@ -45,3 +45,20 @@ $THIS_SH -c '$binecho c && $binecho d && echo e'
 $THIS_SH -c 'trap "echo WORKS" EXIT ; $binecho x ; $binecho y ; $binecho z'
 
 ${THIS_SH} -c 'echo w ; { echo x ; $binecho y; }; $binecho z'
+
+echo =====
+
+( trap "echo WORKS && rm $TMPDIR/x$$" EXIT && touch $TMPDIR/x$$ )
+( trap "echo WORKS && rm $TMPDIR/x$$" EXIT && touch $TMPDIR/x$$ ; $binecho done )
+
+( echo a && { $binecho b && $binecho c ; } && echo d )
+( echo a && { $binecho b && $binecho c ; } && echo d ; $binecho e )
+
+( echo A && $binecho B )
+( $binecho c && echo d )
+
+( $binecho c && $binecho d && echo e )
+
+( trap "echo WORKS" EXIT ; $binecho x ; $binecho y ; $binecho z )
+
+( echo w ; { echo x ; $binecho y; }; $binecho z )
index 4f2f8e21a3b6dda5df19f736d095d23789fa0f68..81b53b72bd88340e6b8395d502ff677ae96c5bf3 100644 (file)
@@ -1,6 +1,37 @@
+#   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/>.
+#
+# test the behavior of `execfail' not exiting an interactive shell
+# added tests for changes in 10/2021 for preserving the traps across a failed
+# exec
+
 shopt -s execfail
 
+trap 'echo EXIT' EXIT 
+trap 'echo USR1' USR1
+trap '' TERM
+trap
+
+kill -s USR1 $$                # should run the trap
+
 exec /tmp/bash-notthere
+
 # make sure we're still around
-echo $?
+echo $0: after failed exec: $?
+
+trap
+kill -s USR1 $$                # should run the trap
+kill -s TERM $$                # should still be ignored
 
+# this should run the exit trap
+exit 0
index 4e88ca9b17d8e2f4dee4aa979e0c6e6e754749a8..60241a1db02fe1363cc07b8df00cfbe185c91072 100644 (file)
@@ -227,15 +227,16 @@ argv[2] = <Y>
 argv[1] = <XY^AY>
 argv[1] = <x^Ay^?z>
 argv[1] = <x^Ay^?z>
-declare -- var="x\ 1y\7fz"
+declare -- var=$'x\001y\177z'
 argv[1] = <declare>
 argv[2] = <-->
-argv[3] = <var="x^Ay^?z">
+argv[3] = <var=$'x\001y\177z'>
+var=x\001y\177z$
 declare -- var="x\001y\177z"$
 argv[1] = <$'x\001y\177z'>
 argv[1] = <x^Ay^?z>
 var=$'x\001y\177z'
-./exp8.sub: line 29: xy\7fz: syntax error: invalid arithmetic operator (error token is "\7fz")
+./exp8.sub: line 30: xy\7fz: syntax error: invalid arithmetic operator (error token is "\7fz")
 declare -a array=()
 declare -a array=([0]=$'x\001y\177z')
 argv[1] = <x^Ay^?z>
@@ -408,3 +409,11 @@ cdefg
 abcdefg
 abcde
 abcdefg
+foo
+declare -- a="foo"
+7
+declare -i a="7"
+42
+declare -- a="42"
+FOO
+declare -u A="FOO"
index 3e69db4fad60915274f40f90717a93b375211b2c..61a39d3b4c02a22c70e31ece3b4cd073432bfbff 100644 (file)
@@ -423,3 +423,4 @@ ${THIS_SH} ./exp9.sub
 ${THIS_SH} ./exp10.sub
 ${THIS_SH} ./exp11.sub
 ${THIS_SH} ./exp12.sub
+${THIS_SH} ./exp13.sub
diff --git a/tests/exp13.sub b/tests/exp13.sub
new file mode 100644 (file)
index 0000000..80e1463
--- /dev/null
@@ -0,0 +1,34 @@
+#   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/>.
+#
+unset a
+
+echo ${a:=foo}
+declare -p a
+
+unset a
+
+declare -i a
+echo ${a:=4+3}
+declare -p a
+
+unset a
+echo ${a:=42}
+declare -p a
+
+unset a
+declare -u A
+A=
+echo ${A:=foo}
+
+declare -p A
index 4c2870cafa6afabee96474bdb56286146fe14b2e..7dd5a286feb62eb9a9beb18013843335816b5b99 100644 (file)
@@ -19,7 +19,8 @@ recho $var
 declare -p var
 recho $(declare -p var)
 
-declare -p var | sed -n l
+echo "var=$var" | sed -n l
+echo "declare -- var=\"$var\"" | sed -n l
 
 recho ${var@Q}
 recho ${var@P}
index ff7fc8d91a5558357694de3c0e81dd19f4e9cd2a..890bdfa4b4b241d871f28ff32103ffad3f8e592f 100644 (file)
@@ -4,7 +4,7 @@ exportfunc ok 2
 ./exportfunc.tests: eval: line 44: syntax error: unexpected end of file
 ./exportfunc.tests: line 43: cve7169-bad2: No such file or directory
 ./exportfunc1.sub: line 14: maximum here-document count exceeded
-./exportfunc.tests: line 64: HELLO_WORLD: No such file or directory
+./exportfunc.tests: line 72: HELLO_WORLD: No such file or directory
 eval ok
 ./exportfunc3.sub: line 23: export: foo=bar: cannot export
 status: 1
index b2742d2cef73f3a32573d8f6521ea9cd4ae26509..d06b1a33b58e118892478036906c38dd77ab5f7c 100644 (file)
@@ -50,10 +50,18 @@ ${THIS_SH} ./exportfunc1.sub
 ${THIS_SH} ./exportfunc2.sub
 
 # CVE-2014-6277
+A100=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+A1000=${A100}
+
+for (( i = 0; i < 999; i++ ))
+do
+       A1000+=${A100}
+done
 
 env BASH_FUNC_foo%%="() { 000(){>0;}&000(){ 0;}<<0 0" ${THIS_SH} -c foo 2>/dev/null
-env BASH_FUNC_foo%%="() { 000(){>0;}&000(){ 0;}<<`perl -e '{print "A"x100000}'` 0" ${THIS_SH} -c foo 2>/dev/null
+env BASH_FUNC_foo%%="() { 000(){>0;}&000(){ 0;}<<${A1000} 0" ${THIS_SH} -c foo 2>/dev/null
 ${THIS_SH} -c "f(){ x(){ _;}; x(){ _;}<<a;}" 2>/dev/null
+unset A100 A1000
 
 # CVE-2014-6278
 
index 691f6879d8765936c63c8d53c2c01e4b47037c52..2974cecaf8f974abcccada768528196a5e72440c 100644 (file)
@@ -92,16 +92,16 @@ a ab
 a ab
 a ab
 a
-. ..
-. .. a.log
+*(.)
+a.log
 *(foo)
 *(foo|bar)
 a.log
 ?(foo)
 a.log
 a.log
-. ..
-. ..
+*(foo).*
+*(foo|bar).*
 a.log
 a.log
 .x .y .z
@@ -114,3 +114,71 @@ a b c
 .x .y .z a b c
 .x .y .z a b c
 *
+.b a
+.b a
+a .b
+.b
+.b
+.b a
+.b a
+a .b
+.b
+.b
+dotglob: .a .foo bar
+@(.foo)
+.foo
+!(.foo)
+.a bar
+@(.foo|*)
+.a .foo bar
+!(.foo|*)
+!(.foo|*)
+@(*)
+.a .foo bar
+!(*)
+!(*)
+.*
+. .. .a .foo
+@(.*)
+. .. .a .foo
+!(.*)
+bar
+no dotglob: .a .foo bar
+@(.foo)
+.foo
+!(.foo)
+bar
+@(.foo|*)
+.foo bar
+!(.foo|*)
+!(.foo|*)
+!(bar).foo
+!(bar).foo
+*(bar).foo
+.foo
+?(bar).foo
+.foo
+.?
+.. .a
+@(.?)
+.. .a
+!(.?)
+bar
+dotglob: .a .foo bar
+@(?|.?)
+.. .a
+@(?|.*)
+. .. .a .foo
+? .*
+? . .. .a .foo
+*
+.a .foo bar
+no dotglob: .a .foo bar
+@(?|.?)
+.. .a
+@(?|.*)
+. .. .a .foo
+? .*
+? . .. .a .foo
+*
+bar
index 4cb671a8a8b58735af4be314fcb8cc46d2db8046..7a7cf91bfb970d77719040621b8351b106ce5964 100644 (file)
@@ -380,13 +380,11 @@ shopt -u globstar
 builtin cd "$MYDIR"
 
 ${THIS_SH} ./extglob1.sub
-
 ${THIS_SH} ./extglob1a.sub
-
 ${THIS_SH} ./extglob3.sub
-
 ${THIS_SH} ./extglob4.sub
-
 ${THIS_SH} ./extglob5.sub
+${THIS_SH} ./extglob6.sub
+${THIS_SH} ./extglob7.sub
 
 exit 0
index f4a3b3745475a3af0f6ac869d252cb5988efba39..1088111f3b48de4c4b4a106875db7a4804d42d34 100644 (file)
@@ -2,6 +2,30 @@ LANG=en_US.UTF-8
 
 shopt -s extglob
 a="aaaäöü"
+a1=${a:3:3}
+
+[[ "${a}" == "${a1}" ]] || {
+       echo cond ok 1
+}
+
+case "${a//?aa}" in
+"${a1}")       echo ok 1;;
+*)             echo bad 1;;
+esac
+
+case "${a//\aaa}" in
+"${a1}")       echo ok 2;;
+*)             echo bad 2;;
+esac
+
+case "${a//aaa}" in
+"${a1}")       echo ok 3;;
+*)             echo bad 3;;
+esac
+
+case "${a//@(?aa)}" in
+"${a1}")       echo ok 4;;
+*)             echo bad 4;;
+esac
 
-echo "${a}" "${a//?aa}" "${a//\aaa}"
 exit 0 
diff --git a/tests/extglob6.sub b/tests/extglob6.sub
new file mode 100644 (file)
index 0000000..5e2aafb
--- /dev/null
@@ -0,0 +1,43 @@
+#   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/>.
+#
+# issues with ? matching "." in certain special circumstances with dotglob set
+
+shopt -s dotglob extglob
+
+DIR=$TMPDIR/extglob-$$
+mkdir $DIR
+cd $DIR
+
+touch a .b
+
+LC_COLLATE=C           # fix sort order
+
+echo @(?|.?)
+echo @(.?|?)
+echo ? .?
+
+echo .*
+echo \.*
+
+shopt -u dotglob
+
+echo @(?|.?)
+echo @(.?|?)
+echo ? .?
+
+echo .*
+echo \.*
+
+cd $OLDPWD
+rm -rf $DIR
diff --git a/tests/extglob7.sub b/tests/extglob7.sub
new file mode 100644 (file)
index 0000000..5fab9cd
--- /dev/null
@@ -0,0 +1,97 @@
+: ${TMPDIR:=/tmp}
+
+TESTDIR=$TMPDIR/glob-test-$$
+mkdir $TESTDIR || {
+       echo "$TESTDIR: cannot create" >&2
+       exit 1
+}
+cd $TESTDIR || {
+       echo "$TESTDIR: cannot cd" >&2
+       exit 1
+}
+
+LC_CTYPE=C LC_COLLATE=C
+shopt -s extglob dotglob
+shopt -u globskipdots          # XXX - backwards compatibility
+touch .foo bar .a
+
+echo dotglob: .a .foo bar
+
+echo '@(.foo)'
+echo @(.foo)
+echo '!(.foo)'
+echo !(.foo)
+
+echo '@(.foo|*)'
+echo @(.foo|*)
+echo '!(.foo|*)'
+echo !(.foo|*)
+
+echo '@(*)'
+echo @(*)
+echo '!(*)'
+echo !(*)
+
+echo '.*'
+echo .*
+echo '@(.*)'
+echo @(.*)
+echo '!(.*)'
+echo !(.*)
+
+shopt -u dotglob
+
+echo no dotglob: .a .foo bar
+
+echo '@(.foo)'
+echo @(.foo)
+echo '!(.foo)'
+echo !(.foo)
+
+echo '@(.foo|*)'
+echo @(.foo|*)
+echo '!(.foo|*)'
+echo !(.foo|*)
+
+echo '!(bar).foo'
+echo !(bar).foo
+echo '*(bar).foo'
+echo *(bar).foo
+echo '?(bar).foo'
+echo ?(bar).foo
+
+echo '.?'
+echo .?
+echo '@(.?)'
+echo @(.?)
+echo '!(.?)'
+echo !(.?)
+
+shopt -s dotglob
+echo dotglob: .a .foo bar
+
+echo '@(?|.?)'
+echo @(?|.?)
+echo '@(?|.*)'
+echo @(?|.*)
+echo '? .*'
+echo ? .*
+echo '*'
+echo *
+
+shopt -u dotglob
+echo no dotglob: .a .foo bar
+
+echo '@(?|.?)'
+echo @(?|.?)
+echo '@(?|.*)'
+echo @(?|.*)
+echo '? .*'
+echo ? .*
+echo '*'
+echo *
+
+rm -f .a bar .foo
+
+cd $OLDPWD
+rm -rf $TESTDIR
index fffe3d2b38aebdc2d01143fc1072179bc795f5b8..e35ec2b85260e17c4cd91505400fc1b4c416cc7e 100644 (file)
 #   You should have received a copy of the GNU General Public License
 #   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
+# since we look at functions below, remove all functions now 
+funcs=$(compgen -A function)
+if [ -n "$funcs" ]; then
+        unset -f $funcs
+fi
+
 a()
 {
        x=$((x - 1))
index cc8acb0cfe3646233dcafe3be185f604011973df..49b2bfe9c62bd19fb66f19c6b7814ad3a9b4dfc5 100644 (file)
@@ -15,10 +15,10 @@ set -- -a bb
 readonly OPTARG
 getopts :x x
 
-echo OPTARG = $OPTARG x = $x
+echo OPTARG = $OPTARG x = "$x"
 
 getopts x x
-echo ${OPTARG-unset} x = $x
+echo ${OPTARG-unset} x = "$x"
 
 typeset -r RO=foo
 typeset -n OPTARG=RO
index 9496690502b1799eba1c5793eff058f01324e246..723ee7b466b991608b69595f8ca592f646695600 100644 (file)
@@ -121,6 +121,10 @@ a\*b
 a\\ 1*b*
 é/*
 é/*
+a aa b bb
+.a .aa .b .bb a aa b bb
+.a .aa .b .bb
+. .. .a .aa .b .bb
 argv[1] = <a>
 argv[2] = <abc>
 argv[3] = <abd>
@@ -135,7 +139,7 @@ argv[2] = <abc>
 argv[3] = <abd>
 argv[4] = <abe>
 tmp/l1 tmp/l2 tmp/*4 tmp/l3
-./glob.tests: line 65: no match: tmp/*4
+./glob.tests: line 66: no match: tmp/*4
 argv[1] = <bdir/>
 argv[1] = <*>
 argv[1] = <a*>
index b35d7336ff693ecc871e00feaa7cb02b0551f611..02d530261513bca33d02a7beaceff36136132b2c 100644 (file)
@@ -30,6 +30,7 @@ ${THIS_SH} ./glob6.sub
 ${THIS_SH} ./glob7.sub
 ${THIS_SH} ./glob8.sub
 ${THIS_SH} ./glob9.sub
+${THIS_SH} ./glob10.sub
 
 MYDIR=$PWD     # save where we are
 
diff --git a/tests/glob10.sub b/tests/glob10.sub
new file mode 100644 (file)
index 0000000..7c14c0d
--- /dev/null
@@ -0,0 +1,32 @@
+#   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/>.
+#
+
+# test basic behavior of globskipdots
+TDIR=/tmp/dotglob-$$
+
+{ mkdir $TDIR && cd $TDIR; } || exit 1
+
+touch a b aa bb .a .b .aa .bb
+
+echo *
+shopt -s dotglob
+echo *
+
+shopt -s globskipdots
+echo .*
+shopt -u globskipdots
+echo .*
+
+cd $OLDPWD
+rm -rf $TDIR
index cabc3502361056888d3773785edd4a7c1619503a..09cb6d51fa80145362b56f38c037657f96e0a814 100644 (file)
 #
 . ./test-glue-functions
 
+# this locale causes problems all over the place
+if locale -a | grep -i '^zh_HK\.big5hkscs' >/dev/null ; then
+        :
+else
+        echo "glob2.sub: warning: you do not have the zh_HK.big5hkscs locale installed;" >&2
+        echo "glob2.sub: warning: that will cause some of these tests to fail." >&2
+fi
+
 var='ab\'
 
 case $var in
index 5735715dbff74a9f31b7f2fc49cacd60efbd20a0..a0dd623faac65490b2b726305a434734eb9468b9 100644 (file)
@@ -11,6 +11,8 @@
 #   You should have received a copy of the GNU General Public License
 #   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
+[ $UID -eq 0 ] && { echo "glob5.sub: the test suite should not be run as root" >&2 ; }
+
 ORIGD=$PWD
 : ${TMPDIR:=/var/tmp}
 
index f26ae4d65720b30fcaf6f61255bce31a5a9e6cd0..88429838c19c0c14813f77eeece0391ae75c3201 100644 (file)
@@ -12,6 +12,7 @@
 #   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
 # tests of the backslash-in-glob-patterns discussion on the austin-group ML
+[ $UID -eq 0 ] && { echo "glob6.sub: the test suite should not be run as root" >&2 ; }
 
 : ${TMPDIR:=/var/tmp}
 
index f6e53beae064dd01257847159a2c6617368f412e..cc193f66601913a941c0f9280ad9a2d3271dd0e6 100644 (file)
@@ -67,13 +67,13 @@ qux
 bar
 qux
 abc def geh
-./heredoc3.sub: line 23: warning: here-document at line 21 delimited by end-of-file (wanted `EOF')
+./heredoc3.sub: line 20: warning: here-document at line 18 delimited by end-of-file (wanted `EOF')
 = here is the text =
-./heredoc3.sub: line 29: warning: here-document at line 27 delimited by end-of-file (wanted `EOF')
+./heredoc3.sub: line 26: warning: here-document at line 24 delimited by end-of-file (wanted `EOF')
 this paren ) is not a problem
-./heredoc3.sub: line 35: warning: here-document at line 33 delimited by end-of-file (wanted `EOF')
+./heredoc3.sub: line 32: warning: here-document at line 30 delimited by end-of-file (wanted `EOF')
 these balanced parens ( ) are not a problem
-./heredoc3.sub: line 41: warning: here-document at line 39 delimited by end-of-file (wanted `EOF')
+./heredoc3.sub: line 38: warning: here-document at line 36 delimited by end-of-file (wanted `EOF')
 quoted balanced parens \( ) are not a problem either
 more text in a subshell
 some more text in a different subshell
@@ -100,7 +100,34 @@ argv[2] = <threefour>
 argv[1] = <two>
 argv[2] = <threefi>
 argv[3] = <ve>
+1: OK
+2: OK
+3: OK
+4: OK
+5: OK
+6: OK
+7: OK
+1: OK
+2: OK
+3: OK
+4: OK
+5: OK
+5: OK
+1: ${x#$'no\t'}
+2: O${x#$'no\t'O}
+3: ${x#n$'o\t'}
+4: ${x#'no     '}
+5: ${x#$pat}
+6: ${y#$'not'}
+7: ${y#'not'}
+./heredoc7.sub: line 17: warning: command substitution: 1 unterminated here-document
+foo bar
+./heredoc7.sub: line 21: after: command not found
+./heredoc7.sub: line 29: warning: here-document at line 29 delimited by end-of-file (wanted `EOF')
+./heredoc7.sub: line 29: foobar: command not found
+./heredoc7.sub: line 30: EOF: command not found
+grep: *.c: No such file or directory
 comsub here-string
-./heredoc.tests: line 149: warning: here-document at line 147 delimited by end-of-file (wanted `EOF')
+./heredoc.tests: line 156: warning: here-document at line 154 delimited by end-of-file (wanted `EOF')
 hi
 there
index 430302f5813cb89fb0a06119cbd92f725d29357a..d10a7c104cb88dd844180e5442ee5be87471a8fc 100644 (file)
@@ -137,6 +137,13 @@ ${THIS_SH} ./heredoc4.sub
 # heredoc tests that use different size documents to test pipe implementation
 ${THIS_SH} ./heredoc5.sub
 
+# test $'...' and $"..." quoted strings in here-documents
+${THIS_SH} ./heredoc6.sub
+
+# interaction between here-documents and command substitutions
+${THIS_SH} ./heredoc7.sub
+
+
 echo $(
        cat <<< "comsub here-string"
 )
diff --git a/tests/heredoc6.sub b/tests/heredoc6.sub
new file mode 100644 (file)
index 0000000..1d5fff0
--- /dev/null
@@ -0,0 +1,50 @@
+#   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/>.
+#
+
+# test $'...' and $"..." strings in here documents (problem through bash-5.1)
+
+pat=$'no\t'
+x=$'no\tOK'
+y=notOK
+
+cat <<EOF
+1: ${x#$'no\t'}
+2: O${x#$'no\t'O}
+3: ${x#n$'o\t'}
+4: ${x#'no     '}
+5: ${x#$pat}
+6: ${y#$'not'}
+7: ${y#'not'}
+EOF
+
+cat <<EOF
+1: ${x#$"no    "}
+2: ${x#n$"o    "}
+3: O${x#n$"o   "O}
+4: ${x#"no     "}
+5: ${y#$"not"}
+5: ${y#"not"}
+EOF
+
+# we don't perform dollar-quote expansion if the here-doc delimiter is quoted
+
+cat <<\EOF
+1: ${x#$'no\t'}
+2: O${x#$'no\t'O}
+3: ${x#n$'o\t'}
+4: ${x#'no     '}
+5: ${x#$pat}
+6: ${y#$'not'}
+7: ${y#'not'}
+EOF
diff --git a/tests/heredoc7.sub b/tests/heredoc7.sub
new file mode 100644 (file)
index 0000000..4119df1
--- /dev/null
@@ -0,0 +1,29 @@
+#   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/>.
+#
+
+# should characters outside a command substitution be interpreted as a delimiter
+# for a here-document started inside it?
+echo $(cat << EOF)
+foo
+bar
+EOF
+after
+
+# should characters inside a command substitution be interpreted as a delimiter
+# for a here-document started outside of it?
+
+cat <<EOF && grep $(
+ foobar
+EOF
+echo notthereanywhere) *.c
index 6f4c74c29ae278bff5853ef2efb478839e950241..c97fa4f23c8b067d0722d3e08810990a5d6e8175 100644 (file)
 #   You should have received a copy of the GNU General Public License
 #   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
+# since we look at functions below, remove all functions now
+funcs=$(compgen -A function)
+if [ -n "$funcs" ]; then
+       unset -f $funcs
+fi
+
 # basics
 read x <<<"alpha"
 echo "$x"
index 379de48b939b909a892f4ac9d15720f827b5a70e..5273de6bc85309936db10ec8e5287ff198321f1b 100644 (file)
@@ -140,9 +140,9 @@ three
 one
 two
 three
-5.1
+5.2
 echo ${BASH_VERSION%\.*}
-5.1
+5.2
         echo ${BASH_VERSION%\.*}
 a
 b
@@ -264,3 +264,36 @@ out of range 3
 12      echo out of range 3
 out of range 4
 13      fc -l 1 99
+1
+2
+3
+4
+5
+6
+    3  echo 3
+    4  echo 4
+    5  echo 5
+    6  echo 6
+    3  echo 3
+    4  echo 4
+    5  echo 5
+6
+7
+    4  echo 4
+    5  echo 5
+    6  echo 6
+    7  echo 7
+    4  echo 4
+    5  echo 5
+    6  echo 6
+7
+8
+    5  echo 5
+    6  echo 6
+9
+10
+    5  echo 5
+    6  echo 6
+    7  echo 9
+    8  echo 10
+    5  echo 10
index 53321f051d161e4cf65a25203724546c504f7ed7..5826d130411e577daa6d30d3a8803e717a35e119 100644 (file)
@@ -130,3 +130,4 @@ ${THIS_SH} ./history2.sub
 ${THIS_SH} ./history3.sub
 ${THIS_SH} ./history4.sub
 ${THIS_SH} ./history5.sub
+${THIS_SH} ./history6.sub
diff --git a/tests/history6.sub b/tests/history6.sub
new file mode 100644 (file)
index 0000000..a21d8d3
--- /dev/null
@@ -0,0 +1,55 @@
+#   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/>.
+#
+: ${TMPDIR:=/tmp}
+
+HISTFILE=${TMPDIR}/history-$$
+HISTSIZE=4
+HISTIGNORE="history*"
+
+set -o history
+
+history -c
+
+echo 1
+echo 2
+echo 3
+echo 4
+echo 5
+echo 6
+
+history
+
+history -d -1
+history
+
+echo 6
+echo 7
+
+history
+history -d -1
+history
+
+echo 7
+echo 8
+history -d -2--1
+history
+
+echo 9
+echo 10
+history
+history -d 5-7
+history
+
+unset HISTFILE
+exit 0
index c3000fc7ceeee0820f65701f77b31faabfc698ee..c4ff02c3c2777a57e86e618f401152eef978bbb9 100644 (file)
@@ -62,7 +62,7 @@ ${THIS_SH} ./intl2.sub
 # test splitting on characters instead of bytes
 ${THIS_SH} ./intl3.sub
 
-${THIS_SH} ./unicode1.sub 2>/dev/null
+${THIS_SH} ./unicode1.sub 2>/dev/null
 ${THIS_SH} ./unicode2.sub
 
 ${THIS_SH} ./unicode3.sub 2>&1
index 64961bcb9aa369a4f24566be5ef1b07684550d6a..2f3236e67874f9e706eb156b86250a8e2ab127ec 100644 (file)
@@ -1,5 +1,25 @@
+#   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/>.
+#
+# this locale causes problems all over the place
 unset LC_ALL LC_NUMERIC
-export LANG=de_DE.UTF-8
+if locale -a | grep -i '^de_DE\.UTF.*8' >/dev/null ; then
+       export LANG=de_DE.UTF-8
+else
+       echo "intl2.sub: warning: you do not have the de_DE.UTF-8 locale installed;" >&2
+       echo "intl2.sub: that will cause some of these tests to fail." >&2
+fi
+
 printf '%.4f\n' 1
 
 LANG=C printf '%.4f\n' 1
index 5d03b76b9760faa466c1613a1357873a630eb309..0510e044a0d96faa976702f744679320d5cff47e 100644 (file)
@@ -31,6 +31,8 @@ i killed it
 ./jobs5.sub: line 40: wait: %8: no such job
 2: ok 2
 2: ok 3
+127
+./jobs5.sub: line 71: declare: wpid: not found
 child1 exit status 0
 [1]+ Running sleep 20 &
 ./jobs7.sub: line 5: fg: no current jobs
index 7ecd7123a2c8a24a93d19edbbc64846b8b0e5ed6..9f1cd040858c453acc9c7af15de374f35c230b3d 100644 (file)
@@ -34,4 +34,6 @@ wait
 # the sleep is intended to give the kill time to execute before the job
 # exits
 (sleep 1 ; cat ) &
+# suppress any message about terminated process
+exec 2>/dev/null
 kill -1 %% && echo i killed it || echo could not kill it
index e6ffb44e6a945a3983256596e9e61dac31dc35eb..e348f2e2f793ca18344ee1f2eb175a2aab65d63b 100644 (file)
@@ -59,3 +59,13 @@ disown -a
 
 unset bgpid1 bgpid2 bgpid3
 unset wpid
+
+# now that we have no jobs, make sure that wait -n -p var leaves var unset
+jobs
+wait -n -p wpid
+echo $wpid $?
+
+# make sure wait -p var does something useful without the -n option
+jobs
+wait -p wpid
+declare -p wpid
index 3e76db37b52cf15488307ab4f62016081ebf19af..582365ff5f36f4f2f819f60a6bac16e1bc6fff76 100644 (file)
@@ -3,4 +3,6 @@ set -m
 sleep 20 &
 echo $(jobs)
 echo $(fg %% ; jobs)
+# suppress any message about sleep 20 being terminated
+exec 2>/dev/null
 kill %1
index cca5938d810c5951e200ae1eb316a9b8d538ac41..84e1e2ea364f6211edc373f1161cb08fda3d186f 100644 (file)
@@ -18,3 +18,5 @@ A2
 B1
 B2
 HI -- 42 -- 0 42
+x=x
+x=x
index 775e81dd2cf23f44a8ccc03bcea425bdda90c959..f9d669ddc07cf1daca35740009572be4c51f363c 100644 (file)
@@ -71,3 +71,4 @@ ${THIS_SH} ./lastpipe1.sub
 echo lastpipe1.sub returns $?
 
 ${THIS_SH} ./lastpipe2.sub
+${THIS_SH} ./lastpipe3.sub
diff --git a/tests/lastpipe3.sub b/tests/lastpipe3.sub
new file mode 100644 (file)
index 0000000..b9222b8
--- /dev/null
@@ -0,0 +1,11 @@
+# problem in bash-5.1 running lastpipe in subshell if fd 0 is closed
+
+shopt -s lastpipe
+exec 0<&-
+
+echo x | read x
+echo x=$x
+unset x
+
+echo x | cat | read x
+echo x=$x
index 143d6ddc1113b7398408af95a1d4a27257fc1a03..4452232d59dbd53822c9bea04d25e63cd66456d9 100644 (file)
@@ -151,6 +151,7 @@ a
 [27] aaa
 [28] aaa
 [29] aaa
+declare -a array=([0]="a" [1]="b" [2]="c" [3]=$'\n')
 1 2 3 4 5
 foo 0 1
 
index 01f1f2e553c72bd53b0e4d176757c9527a7d8e72..c2ea7d24d488a4ac819e4361db93e7fb1780ded4 100644 (file)
@@ -52,6 +52,11 @@ for (( i = 0 ; i < ${#E[@]} ; i++ )); do
     echo "${E[${i}]}"
 done
 
-${THIS_SH} ./mapfile1.sub
+unset -v s array
+s=$'a\xffb\xffc\xff'
+mapfile -t -d $'\xff' array <<<"$s"
+declare -p array
+unset -v s array
 
+${THIS_SH} ./mapfile1.sub
 ${THIS_SH} ./mapfile2.sub
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index 296105c96b2a773e32e7694d46df4f70284ab657..83e9ee5b86a8e970b90bdcd3e8a026e89217e379 100644 (file)
@@ -348,6 +348,10 @@ declare -a v=([1]="1")
 declare -a v=([0]="0" [1]="1")
 declare -n n="v[1]"
 declare -a v=([0]="0")
+./nameref15.sub: line 120: warning: xref: removing nameref attribute
+declare -a xref=([1]="one")
+./nameref15.sub: line 126: warning: xref: removing nameref attribute
+declare -a xref=([1]="one")
 declare -n r1="y"
 declare -n r2="x"
 ./nameref16.sub: line 25: typeset: x: not found
@@ -424,6 +428,23 @@ declare -a var=([123]="")
 declare -n ref="var[123]"
 ./nameref18.sub: line 67: declare: var[123]: not found
 declare -a var=([123]="X")
+argv[1] = <1>
+argv[2] = <2>
+argv[3] = <3>
+argv[1] = <1>
+argv[2] = <2>
+argv[3] = <3>
+argv[1] = <1>
+argv[2] = <2>
+argv[3] = <3>
+argv[1] = <1>
+argv[2] = <2>
+argv[3] = <3>
+argv[1] = <1>
+argv[2] = <2>
+argv[3] = <31>
+argv[4] = <2>
+argv[5] = <3>
 declare -n foo="bar"
 declare -- foo="bar"
 ./nameref19.sub: line 22: declare: bar: not found
@@ -440,6 +461,8 @@ declare -n foo="bar"
 declare -- bar
 declare -- foo="bar"
 declare -- bar
+8
+declare -n ivar="foo"
 declare -a v=([0]="Y")
 r: <Y>
 v: <Y>
@@ -483,3 +506,55 @@ declare -n ref="var"
 declare -ai var=([1]="0")
 declare -n ref="var"
 declare -- var="1"
+a string with spaces
+many spaces
+declare -n foo="bar[0]"
+declare -a bar=([0]=" still more spaces")
+declare -n foo="bar[0]"
+declare -a bar=([0]="spaces still more spaces")
+./nameref22.sub: line 50: declare: array: reference variable cannot be an array
+./nameref22.sub: line 53: declare: array[128]: reference variable cannot be an array
+declare -a array=([0]="one" [1]="two" [2]="three")
+declare -- array="(one two three)"
+declare -a array=([0]="one" [1]="two" [2]="three")
+./nameref22.sub: line 69: declare: `(one two three)': invalid variable name for name reference
+./nameref22.sub: line 70: declare: array: reference variable cannot be an array
+declare -a array=([0]="zero")
+./nameref22.sub: line 74: declare: array: reference variable cannot be an array
+declare -a array=([0]="one" [1]="two" [2]="three")
+./nameref22.sub: line 79: declare: array: reference variable cannot be an array
+declare -a array
+declare -ai array=([0]="one")
+declare -a array=([0]="zero")
+declare -a array=([0]="one" [1]="two" [2]="three")
+declare -ai a=([0]="5")
+declare -ai a=([0]="6")
+declare -ai a=([0]="1")
+./nameref23.sub: line 15: declare: b: not found
+declare -ai a=([0]="1")
+declare -- b="1"
+declare -ai a=([0]="1")
+declare -- b="11"
+declare -ai a=([0]="1")
+declare -- b="110"
+./nameref23.sub: line 25: declare: `1': invalid variable name for name reference
+declare -ai a=([0]="1")
+./nameref23.sub: line 27: declare: b: not found
+declare -ai a=([0]="4")
+declare -in b="a[0]"
+declare -ai a=([0]="6")
+declare -in b="a[0]"
+foo
+foo bar
+declare -a a=([0]="" [1]="foo bar")
+declare -n b="a[1]"
+foo
+foo bar
+declare -a a=([0]="" [1]="foo bar")
+declare -n b="a[1]"
+12
+16
+declare -ai a=([0]="0" [1]="16")
+12
+16
+declare -ai a=([0]="0" [1]="16")
index cce8fbd944355083b620cd1d9e8536b67cc388d7..e9a09eeb4b66f74bd7463e2519a00d467479204e 100644 (file)
@@ -115,3 +115,13 @@ v=(0 1)
 declare -n n=v[1]
 unset n
 declare -p n v
+
+declare -n xref
+declare -a xref[1]=one
+declare -p xref
+
+unset xref
+declare -n xref
+xref=array
+declare -a xref[1]=one
+declare -p xref
index a29fe379d5ae74970e33ae12eb625a37b11a17b0..7a32877f3825d3263cefeccbf05c7bbfe5216d66 100644 (file)
@@ -65,3 +65,19 @@ declare -p ref ${!ref} var
 declare +t ref
 ref=X
 declare -p ref ${!ref} var
+
+unset -n ref
+unset var
+
+arr=(1 2 3)
+
+indir='arr[@]'
+declare -n ref='arr[@]'
+
+recho "${!indir}"
+recho ${!indir}
+
+recho "$ref"
+recho $ref
+
+recho "${!indir}$ref"
index b00f68e5275f6a0a827cc006fb91b01945fc0887..d4b900e817c383503274dfa28aedb908ad366c65 100644 (file)
@@ -62,3 +62,12 @@ declare bar
 declare -p foo bar
 declare +n foo
 declare -p foo bar
+
+# but when we add the nameref attribute, we remove other attributes
+
+declare -i ivar
+ivar=4+4
+echo $ivar
+
+declare -n ivar=foo
+declare -p ivar
diff --git a/tests/nameref22.sub b/tests/nameref22.sub
new file mode 100644 (file)
index 0000000..4e44fbb
--- /dev/null
@@ -0,0 +1,97 @@
+#   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/>.
+#
+
+declare -n foo=bar
+
+declare foo='a string with spaces'
+echo $foo
+
+unset foo
+declare foo+='many spaces'
+echo $foo
+
+unset foo      # unsets bar
+unset -n foo
+
+declare -a bar
+declare -n foo='bar[0]'
+declare foo+=' still more spaces'
+
+declare -p foo bar
+unset -n foo
+unset bar
+
+declare -a bar
+declare -n foo='bar[0]'
+declare foo=spaces
+declare foo+=' still more spaces'
+
+declare -p foo bar
+
+unset -n foo
+unset bar
+
+ray=ray
+
+declare -a array
+array[0]=zero
+
+declare -n array
+unset array
+
+declare -n array[128]
+unset array
+
+declare -a array='(one two three)'
+declare -p array
+unset array
+
+declare array='(one two three)'
+declare -p array
+unset array
+
+declare -a ar$ray='(one two three)'
+declare -p ar$ray
+unset array
+
+declare -a array=(zero)
+declare -n array='(one two three)'
+declare -n array=three
+declare -p array
+unset array
+
+declare -n array=(one two three)
+declare -p array
+unset array
+
+declare -a array
+declare -n array=one
+declare -p array
+unset array
+
+array=one
+declare -i array[64];
+declare -p array
+unset array
+
+declare -a array=zero
+declare -p array
+unset array
+
+declare -a array
+declare array='(one two three)'
+declare -p array
+unset array
+
+
diff --git a/tests/nameref23.sub b/tests/nameref23.sub
new file mode 100644 (file)
index 0000000..358c381
--- /dev/null
@@ -0,0 +1,82 @@
+declare -ai a
+a[0]=4
+declare -n b='a[0]'
+
+b+=1 ; declare -p a
+
+declare b+=1 ; declare -p a
+
+unset a b
+unset -n b
+
+######
+declare -ai a=(1)
+declare -in b="a[0]"
+declare -p a b
+
+b+=1 ; declare -p a b
+b+=1 ; declare -p a b
+b+=0 ; declare -p a b
+
+unset a b
+
+#####
+declare -ai a=(1)
+declare -n b="1"
+declare -p a
+declare -np b
+
+unset a ; unset -n b
+
+#####
+declare -ai a=('4');
+declare -n b='a[0]';
+declare -ni b;         # this should maybe not be allowed, but it is for now
+declare -p a b
+
+b+=2;
+declare -p a b 
+
+unset a ; unset -n b
+
+#####
+f()
+{
+       local -a a=('' 'foo');
+        local -n b=a[1];
+        echo $b;
+        b+=\ bar;
+        echo $b;
+        declare -p a b;
+}
+f
+
+declare -a a=('' 'foo');
+declare -n b=a[1];
+echo $b;
+b+=\ bar;
+echo $b;
+declare -p a b
+
+unset a ; unset -n b
+
+unset -f f
+f()
+{
+        local -ai a=(0 12);
+        local -n b=a[1];
+        echo $b;
+        b+=4;
+        echo $b;
+        declare -p a;
+}
+f
+
+declare -ai a=(0 12);
+declare -n b=a[1];
+echo $b;
+b+=4;
+echo $b;
+declare -p a
+
+unset a ; unset -n b
index 752bba5ce0cf78b13cdafc0aa7625c8d5cf26eb0..e3dc40e17b25c3399fc3be4315cdb49d4b76efa9 100644 (file)
@@ -617,7 +617,7 @@ c Sub = 0 2 4 8
 <>
 <>
 <'ab '\''cd'\'' ef'> 
-./new-exp10.sub: line 24: ${x@C}: bad substitution
+bash: line 1: ${x@C}: bad substitution
 <'ab'> <'cd ef'> <''> <'gh'> 
 <'ab' 'cd ef' '' 'gh'> 
 <'ab'> <'cd> <ef'> <''> <'gh'> 
@@ -625,7 +625,7 @@ c Sub = 0 2 4 8
 <'ab cd'> 
 <'4'> <'ab cd'> 
 <> 
-argv[1] = <host(2)[5.1]$ >
+argv[1] = <host(2)[5.2]$ >
 <      
 >
 <' \t\n'>
@@ -648,6 +648,7 @@ i
 declare -i foo
 A
 declare -A foo
+./new-exp10.sub: line 118: ${V@}: bad substitution
 abcxxxdef
 abcÃ¥def
 ḅć
@@ -703,11 +704,21 @@ aaa bbb
 a bbb
 aaa bb
 'string'
+'string'
+'value with spaces'
 'value with spaces'
 'a b' 'c d' 'e f'
 'a b' 'c d' 'e f'
 0 "zero" 1 "one" 2 "two" 3 "three"
 0 "zero z" 1 "one o" 2 "two t" 3 "three t"
+argv[1] = <0>
+argv[2] = <zero z>
+argv[3] = <1>
+argv[4] = <one o>
+argv[5] = <2>
+argv[6] = <two t>
+argv[7] = <3>
+argv[8] = <three t>
 declare -a foo=()
 ai
 declare -ai foo
@@ -719,6 +730,65 @@ a
 a
 a
 a
+/homes/chetdefg
+/homes/chetdefg
+~defg
+defg
+defg
+defg
+$'&' $'&' $'&' $'&' $'&' $'&' $'&'
+$'a' $'b' $'c' $'d' $'e' $'f' $'g'
+a b c d e f g
+a b c d e f g 
+& & & & & & &
+& & & & & & & 
+& & & & & & &
+\& \& \& \& \& \& \&
+a a a a a a a 
+3 3 3 3 3 3 3 
+abc defg
+abc defg
+& defg
+& defg
+& defg
+\& defg
+\abc defg
+abcdefg
+&defg
+\abcdefg
+\&defg
+\&defg
+\abcdefg
+\\&defg
+&defg
+&defg
+\&defg
+\&defg
+\\&defg
+letx&yee
+letx&yee
+letxssyee
+letxssyee
+letx\&yee
+letx\&yee
+letx&yee
+letx&yee
+let\&ee
+let\\ssee
+let\ssee
+let\ssee
+let\&ee
+let\&ee
+let&ee
+let&ee
+twoone
+&twoone
+onetwo
+one&two
+two
+&two
+otwone
+&twone
 argv[1] = </>
 argv[1] = </>
 
index 079426cb5e2d25b8d758e2c0afbab26097aea3a3..c542313f12d3c8e54585a84f3a57c8f7e45098bf 100644 (file)
@@ -631,6 +631,10 @@ ${THIS_SH} ./new-exp14.sub
 # ongoing work with a/A parameter transformations and `nounset'
 ${THIS_SH} ./new-exp15.sub
 
+# pattern substitution with `&' (quoted and unquoted) in the replacement string
+${THIS_SH} ./new-exp16.sub
+
+
 # problems with stray CTLNUL in bash-4.0-alpha
 unset a
 a=/a
index bf9ebe7aac989cdba2815df2553d771fd3e7ff23..5b199d4f5c943df04542da8dc0a1b04eb1f0605f 100644 (file)
@@ -21,7 +21,9 @@ printf "<%s>" "${x@A}" ; echo
 x="ab 'cd' ef"
 printf "<%s> " "${x@Q}" ; echo 
 
-printf "<%s>" "${x@C}"
+# this needs to be run in a subshell because invalid transformation operators
+# are now treated as substitution errors, fatal in non-interactive shells
+${THIS_SH} -c 'x=abcdef ; printf "<%s>" "${x@C}"' bash
 
 # if unquoted, normal word splitting happens
 set -- ab 'cd ef' '' gh
@@ -111,3 +113,6 @@ declare -A foo
 echo ${foo@a}
 
 declare -p foo
+
+V=42
+echo ${V@}     # error
index b8bda8de5ed586863893dfa4538e3bd3c859287f..92f51ea1a4fe7f8ce7660d02cddd429bebb4a9c9 100644 (file)
@@ -1,4 +1,18 @@
-# test the other uses of the 'K' tranform operator
+#   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/>.
+#
+
+# test the other uses of the 'K' transform operator and its sibling 'k'
 # the associative array tests are performed separately, since that was the
 # original motivation for this feature
 foo=string
@@ -7,7 +21,9 @@ bar='value with spaces'
 set -- 'a b' 'c d' 'e f'
 
 echo ${foo@K}
+echo ${foo@k}
 echo ${bar@K}
+echo ${bar@k}
 
 echo ${@@K}
 echo "${@@K}"
@@ -17,3 +33,4 @@ echo ${foo[@]@K}
 
 foo=( 'zero z' 'one o' 'two t' 'three t' )
 echo ${foo[@]@K}
+recho "${foo[@]@k}"
diff --git a/tests/new-exp16.sub b/tests/new-exp16.sub
new file mode 100644 (file)
index 0000000..2ed751d
--- /dev/null
@@ -0,0 +1,120 @@
+#   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/>.
+#
+
+HOME=/homes/chet
+string=abcdefg
+set -- a b c
+
+shopt -u patsub_replacement
+
+# verify existing behavior
+echo ${string/abc/~}
+echo "${string/abc/~}"
+echo ${string/abc/"~"}
+
+echo ${string/abc/$notthere}
+echo "${string/abc/$notthere}"
+echo "${string/abc/"$notthere"}"
+
+echo ${string//?/\$\'&\' } 
+
+shopt -s patsub_replacement
+
+echo ${string//?/\$\'&\' } 
+
+echo ${string//?/& } 
+echo "${string//?/& }"
+
+echo ${string//?/\& } 
+echo "${string//?/\& }"
+echo ${string//?/"& "}
+echo ${string//?/"\& "}
+
+echo "${string//?/"a "}"
+echo "${string//?/"$# "}"
+
+echo ${string/abc/& }
+echo "${string/abc/& }"
+echo ${string/abc/"& "}
+
+echo ${string/abc/\& }
+echo "${string/abc/\& }"
+echo ${string/abc/"\& "}
+echo ${string/abc/\\& }
+
+rep='\\&'
+
+echo "${string/abc/&}"
+echo ${string/abc/\&}
+echo "${string/abc/\\&}"
+echo ${string/abc/"\\&"}
+echo "${string/abc/"\\&"}"
+echo ${string/abc/$rep}
+echo ${string/abc/"$rep"}
+
+shopt -u patsub_replacement
+
+echo "${string/abc/&}"
+echo ${string/abc/\&}
+echo "${string/abc/\\&}"
+echo "${string/abc/"\\&"}"
+echo ${string/abc/"$rep"}
+
+shopt -s patsub_replacement
+
+repl='x&y'
+r2='x\&y'
+var='letssee'
+
+pat=ss
+
+echo ${var//$pat/"$repl"}
+echo "${var//$pat/"$repl"}"
+echo ${var//$pat/$repl}
+echo "${var//$pat/$repl}"
+
+echo ${var//$pat/"$r2"}
+echo "${var//$pat/"$r2"}"
+echo ${var//$pat/$r2}
+echo "${var//$pat/$r2}"
+
+r2='\\&'
+r3='\&'
+
+echo ${var//$pat/\\\&}
+echo ${var//$pat/\\$r2}
+echo ${var//$pat/\\&}
+echo ${var//$pat/$r2}
+
+echo ${var//$pat/"\&"}
+echo ${var//$pat/"$r3"}
+echo ${var//$pat/"&"}
+echo ${var//$pat/$r3}
+
+# these cases provide the same functionality as sed when given a BRE like
+# `^' or `$', or when passed a null input line
+one=one
+null=
+
+echo ${one/#/&two}
+echo ${one/#/\&two}
+
+echo ${one/%/&two}
+echo ${one/%/\&two}
+
+echo ${null/#/&two}
+echo ${null/#/\&two}
+
+echo ${one/#?/&two}
+echo ${one/#?/\&two}
index e3ae555850db454b37e485a678c39f8dec7d6b7b..31c35c3b4cd8e9ad5e0a8364ec561308b3b3fe5a 100644 (file)
@@ -35,6 +35,10 @@ argv[1] = <hello, $world>
 ;foo
 argv[1] = <^I>
 argv[1] = <'A^IB'>
+argv[1] = <a^Ib^Ic>
+argv[1] = <$'a\tb\tc'>
+               AD
+E
 hello' world
 hello world!
 hello' world!
@@ -62,3 +66,15 @@ argv[1] = <^?>
 0000000 esc fs gs rs us del nl
 0000007
 \q
+foo
+./nquote4.sub: line 6: quux: command not found
+argv[1] = <a^A)b>
+argv[1] = <a^Ab>
+argv[1] = <^A>
+argv[1] = <\^A>
+0000000 a $ ' \ 0 1 ' b \n a 001 b \n
+0000015
+0000000 a $ ' \ 0 1 ' b \n a 001 b \n
+0000015
+0000000 A \n A \n
+0000004
index 20d6415d375fc002c79f3de1f066b7e5d4775983..e4d1a56f2598cd4f05c6ba4b67958abfac4ec392 100644 (file)
@@ -128,6 +128,15 @@ unset mytab
 recho "${mytab:-$'\t'}"
 recho "$( args $'A\tB' )"
 
+# tests for $'...' not being expanded when inside double quotes
+recho $'a\tb\tc'
+recho "$'a\tb\tc'"
+
+# tests for $'...' being expanded in command substitution, and when
+echo "$(echo $'\t\t\101\104\n\105')"
+
 ${THIS_SH} ./nquote1.sub
 ${THIS_SH} ./nquote2.sub
 ${THIS_SH} ./nquote3.sub
+${THIS_SH} ./nquote4.sub
+${THIS_SH} ./nquote5.sub
diff --git a/tests/nquote4.sub b/tests/nquote4.sub
new file mode 100644 (file)
index 0000000..0d4a495
--- /dev/null
@@ -0,0 +1,6 @@
+# make sure aliases containing new-style single quotes are expanded correctly
+
+shopt -s expand_aliases
+alias foo=$'echo foo\n\nquux\n'
+
+foo
diff --git a/tests/nquote5.sub b/tests/nquote5.sub
new file mode 100644 (file)
index 0000000..97cbadc
--- /dev/null
@@ -0,0 +1,36 @@
+#   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/>.
+#
+. test-glue-functions
+
+recho $( echo a$'\01)'b )
+recho $( echo a\ 1b )
+recho $( echo \\ 1 )
+recho $( echo \\\ 1 )
+
+LC_CTYPE=C
+od -c <<EOF | _intl_normalize_spaces
+a$'\01'b
+a\ 1b
+EOF
+
+od -c <<EOF | _intl_normalize_spaces
+${none-a$'\01'b}
+${none-a\ 1b}
+EOF
+
+V=Aa$'\01'b
+od -c <<EOF | _intl_normalize_spaces
+${V%a$'\01'b}
+${V%a\ 1b}
+EOF
index 40aea03993d1703f88dae5bc97cb31fad31caae7..5d3f734a48f375e0179cd94c55bcc239133d3391 100644 (file)
@@ -1,6 +1,4 @@
 Testing for POSIX.2 conformance
-./posix2.tests: eval: line 195: syntax error near unexpected token `esac'
-./posix2.tests: eval: line 195: `case esac in (esac) ;; *) echo "case esac test 3" ;; esac'
-./posix2.tests: eval: line 197: syntax error near unexpected token `)'
-./posix2.tests: eval: line 197: `case esac in esac) ;; *) echo "case esac test 4";; esac'
+./posix2.tests: eval: line 199: syntax error near unexpected token `)'
+./posix2.tests: eval: line 199: `case esac in esac) ;; *) echo "case esac test 4";; esac'
 All tests passed
index 9b6c0932f920eaf433dcbe9abbbc1971db88ebdf..0f5fce1538e8e95c43caf9ba6bea6d60beb4e068 100644 (file)
@@ -190,11 +190,13 @@ case esac in (foo|esac) ;; *) testfail "case esac test 1" ;; esac
 newtest
 case esac in foo|esac) ;; *) testfail "case esac test 2" ;; esac
 
-# these are supposed to be syntax errors
+# POSIX.2 grammar rule 4 problem through bash-5.1
 newtest
-eval 'case esac in (esac) ;; *) echo "case esac test 3" ;; esac'
+eval 'case esac in (esac) ;; *) testfail "case esac test 3" ;; esac'
+
+# these are supposed to be syntax errors
 newtest
-eval 'case esac in esac) ;; *) echo "case esac test 4";; esac'
+eval 'case esac in esac) ;; *) echo "case esac test 4";; esac' && testfail 'case esac test 4'
 
 if [ $exitval = 0 ]; then
     echo "All tests passed"
index e6bdbf4bd00980a0b9ef588e9d883d9c49ff44fb..7204b960a99fc39d7abd94e4f53356c86e7bc006 100644 (file)
@@ -275,14 +275,34 @@ argv[2] = <b>
 [  abc    def  ghi  jkl /  abc    def  ghi  jkl ]
 [  abc    def  ghi  jkl ]
 [  abc    def  ghi  jkl /  abc    def  ghi  jkl /  abc    def  ghi  jkl ]
-5: notOK
+1: OK
+2: $'not'
+3: OK
+4: OK
+5: tOK
 OK
 OK
-5: $'not\ttoo\nbad'
+$'not'
+OK
+tOK
+6: $'not\ttoo\nbad'
+OKa    '       b
+OKa    '       b
+7: OK
+8: OKa '       b
+9: OKa "       b
+10: OKa        "       b
+tOK
+tOK
+tOK
+tOK
+./posixexp7.sub: line 69: ${'x1'%'t'}: bad substitution
+./posixexp7.sub: line 70: ${'x1'%'t'}: bad substitution
+./posixexp7.sub: line 73: ${'x1'%'t'}: bad substitution
+./posixexp7.sub: line 74: ${'x1'%'t'}: bad substitution
 "A"
 A
 argv[1] = <"A">
 argv[1] = <A>
 argv[1] = <A>
 ./posixexp.tests: line 97: unexpected EOF while looking for matching `}'
-./posixexp.tests: line 98: syntax error: unexpected end of file
index 2e230cf855c7fd34ad8e6d760730fde5563e37db..4e3fa007c9badc183b5838dfeb6a53ddd0ccc648 100644 (file)
@@ -1,13 +1,76 @@
+#   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/>.
+#
 # test the effect of quotes on the WORD in the posix pattern removal operators
-# a here document does not behave the same as double quotes
+#
 x=notOK
+x1=not
+
 cat <<EOF
-5: ${x#$'not'}
+1: ${x#$'not'}
+2: $'not'
+3: ${x#"not"}
+4: ${x#'not'}
+5: ${x#${x1%'t'}}
 EOF
 
 echo "${x#'not'}"
 echo "${x#$'not'}"
 
+echo "$'not'"
+echo "${x#"not"}"
+echo "${x#${x1%'t'}}"
+
+cat <<EOF
+6: $'not\ttoo\nbad'
+EOF
+
+x=OK$'a\t\'\tb'
+echo OK$'a\t\'\tb'
+echo "$x"
+
+cat <<EOF
+7: ${x%$'a\t\'\tb'}
+8: ${x#$'a\t\'\tb'}
+EOF
+
+x=OK'a "       b'
+
+cat <<EOF
+9: ${x#'a      "       b'}
+10: ${x#$'a    "       b'}
+EOF
+
+x=notOK
+x1=not
+
+# extquote makes these work
+echo "${x#${$'x1'%$'t'}}"
+cat <<EOF
+${x#${$'x1'%$'t'}}
+EOF
+echo "${x#${$'x1'%'t'}}"
+cat <<EOF
+${x#${$'x1'%'t'}}
+EOF
+
+# syntax errors
+
+echo "${x#${'x1'%'t'}}"
+cat <<EOF
+${x#${'x1'%'t'}}
+EOF
+echo "${x#${'x1'%$'t'}}"
 cat <<EOF
-5: $'not\ttoo\nbad'
+${x#${'x1'%$'t'}}
 EOF
old mode 100755 (executable)
new mode 100644 (file)
index e4fb54b8be30ec6fa3fc7eb2815296ea06db9c5a..2cbbc6a6a6c55d80f7bd61af3dd2028103b4fd62 100644 (file)
@@ -24,7 +24,7 @@ printf "%s"  "$vv"
 printf -v vv "one\ctwo\n"
 printf "%s"  "$vv"
 
-# and unrecognized backslash escapes should have the backslash preserverd
+# and unrecognized backslash escapes should have the backslash preserved
 printf -v vv "4\.2\n"
 printf "%s"  "$vv"
 
index 45c48d4c401cb7863b8a9d1c21549354bcc46d28..94a2bb1095498fccb496b560163bc241e98d22c6 100644 (file)
@@ -1,6 +1,12 @@
 unset LC_ALL LC_CTYPE
-export LANG=en_US.UTF-8
 
+export LANG=C
+case $(printf %d\\n \'A) in
+65)    ;;
+*)     echo "printf2.sub: character conversion failed" >&2  ;;
+esac
+
+export LANG=en_US.UTF-8
 case $(printf %d\\n \'À) in
 192)   exit 0;;
 *)     echo "printf2.sub: multibyte character conversion failed" >&2 ; exit 2 ;;
diff --git a/tests/quotearray.right b/tests/quotearray.right
new file mode 100644 (file)
index 0000000..e689365
--- /dev/null
@@ -0,0 +1,152 @@
+declare -A assoc=(["x],b[\$(echo uname >&2)"]="1" )
+declare -A assoc=(["\$key"]="1" ["x],b[\$(echo uname >&2)"]="1" )
+declare -A assoc=(["\$key"]="1" ["x],b[\$(echo uname >&2)"]="2" )
+./quotearray.tests: line 31: ((: 'assoc[x\],b\[\$(echo uname >&2)]++' : syntax error: operand expected (error token is "'assoc[x\],b\[\$(echo uname >&2)]++' ")
+declare -A assoc=(["\$key"]="1" ["x],b[\$(echo uname >&2)"]="2" )
+./quotearray.tests: line 34: ((: 'assoc[x\],b\[\$(echo uname >&2)]'++ : syntax error: operand expected (error token is "'assoc[x\],b\[\$(echo uname >&2)]'++ ")
+declare -A assoc=(["\$key"]="1" ["x],b[\$(echo uname >&2)"]="2" )
+declare -A assoc=(["\$key"]="1" ["x],b[\$(echo uname >&2)"]="3" )
+4
+klmnopqrst
+klmnopqrst
+klmno
+klmnopqrst
+declare -A A=(["\$(echo %)"]="5" [%]="10" ["]"]="10" )
+declare -A A=(["~"]="42" )
+42
+declare -A A=(["~"]="43" )
+42
+declare -A A=(["~"]="43" ["~0"]="43" )
+12
+declare -a a=([0]="12" [1]="42")
+2
+2
+declare -Ai assoc=(["']"]="3" ["\$var"]="1" )
+105
+declare -A assoc=(["\` echo >&2 foo\`"]="42" ["\$( echo >&2 bar)"]="63" )
+./quotearray.tests: line 140: x],b[$(echo uname >&2): syntax error: invalid arithmetic operator (error token is "],b[$(echo uname >&2)")
+./quotearray.tests: line 144: x],b[$(echo uname >&2): syntax error: invalid arithmetic operator (error token is "],b[$(echo uname >&2)")
+1
+./quotearray.tests: line 147: x],b[$(echo uname >&2): syntax error: invalid arithmetic operator (error token is "],b[$(echo uname >&2)")
+1
+./quotearray.tests: line 150: x],b[$(echo uname >&2): syntax error: invalid arithmetic operator (error token is "],b[$(echo uname >&2)")
+1
+./quotearray.tests: line 153: x],b[$(echo uname >&2): syntax error: invalid arithmetic operator (error token is "],b[$(echo uname >&2)")
+1
+declare -A assoc
+0
+0
+1
+0
+0
+0
+declare -A assoc=(["\` echo >&2 foo\`"]="128" [0]="0" ["]"]="12" ["x],b[\$(echo uname >&2)"]="42" ["~"]="42" ["\$( echo 2>& date)"]="foo" )
+foo
+0
+0
+./quotearray1.sub: line 68: 0\],b\[1: syntax error: invalid arithmetic operator (error token is "\],b\[1")
+declare -a array
+0
+0
+0
+0
+1
+1
+declare -A aa=(["\$( echo 2>& date)"]="foo" )
+foo
+0
+1
+1
+./quotearray1.sub: line 113: test: aa[$(echo: binary operator expected
+2
+[[ -v assoc[a] ]]; $?=0
+[[ -v assoc["] ]]; $?=0
+declare -A assoc=(["\""]="123" [a]="123" )
+declare -A a=([1]="1" [0]="0" [" "]="11" )
+7
+7
+declare -A A=([$'\t']="2" [" "]="2" )
+declare -A A=([$'\t']="2" ["*"]="2" [" "]="2" ["]"]="2" ["@"]="2" )
+./quotearray2.sub: line 54: read: `A[]]': not a valid identifier
+declare -A A=([$'\t']="X" ["*"]="X" [" "]="X" ["@"]="X" )
+./quotearray2.sub: line 62: printf: `A[]]': not a valid identifier
+declare -A A=([$'\t']="X" ["*"]="X" [" "]="X" ["@"]="X" )
+./quotearray2.sub: line 70: declare: `A[]]=X': not a valid identifier
+declare -A A=(["*"]="X" ["@"]="X" )
+./quotearray2.sub: line 78: declare: `A[]]=X': not a valid identifier
+declare -A A=(["*"]="X" ["@"]="X" )
+./quotearray2.sub: line 89: let: assoc[x],b[$(echo: bad array subscript (error token is "b[$(echo")
+declare -A assoc
+declare -A assoc=(["\$(echo foo)"]="1" )
+0
+declare -A assoc=(["\$var"]="value" )
+declare -A assoc=(["\$var"]="value" )
+declare -A assoc=(["\$var"]="value" )
+declare -A assoc=()
+declare -A a=(["\$(echo foo)"]="1" )
+declare -A a=()
+declare -A a=(["\$(echo foo)"]="1" )
+declare -A a=(["\$(echo foo)"]="1" )
+declare -A assoc=(["!"]="bang" )
+1
+1
+declare -A assoc=(["!"]="bang" ["@"]="at" )
+declare -A assoc=(["!"]="bang" )
+declare -a array=([0]="1" [1]="2" [2]="3")
+declare -a array=()
+./quotearray3.sub: line 98: declare: array: not found
+declare -A map=(["foo\$(uname >/dev/tty)bar"]="1" )
+1
+declare -A map=()
+$(DOESNOTEXIST)
+declare -A blah=()
+declare -A assoc=(["*"]="star" ["!"]="bang" ["@"]="at" )
+declare -A assoc=(["*"]="star" ["!"]="bang" )
+declare -A assoc=(["!"]="bang" )
+./quotearray4.sub: line 41: declare: assoc: not found
+declare -A assoc=(["*"]="star" ["!"]="bang" ["@"]="at" )
+declare -A assoc=(["*"]="star" ["!"]="bang" )
+declare -A assoc=(["!"]="bang" )
+declare -A assoc=(["*"]="star" ["!"]="bang" )
+declare -A assoc=(["!"]="bang" )
+star bang at
+star bang at
+0
+0
+0
+1
+1
+declare -A assoc=(["*"]="star" ["!"]="bang" ["@"]="       key" )
+===
+1
+1
+declare -a array=([0]="1" [1]="2" [2]="3")
+1 2 3
+1 2 3
+0
+0
+./quotearray4.sub: line 115: array[@]: bad array subscript
+declare -a array=([0]="1" [1]="2" [2]="3")
+./quotearray5.sub: line 27: unset: `a[$(echo': not a valid identifier
+./quotearray5.sub: line 27: unset: `foo)]': not a valid identifier
+declare -A a=()
+declare -A a=()
+declare -A a=()
+-----
+declare -A a=(["\$(echo foo)"]="1" )
+declare -A a=()
+declare -A a=()
+declare -A a=()
+-----
+declare -A a=()
+declare -A a=()
+declare -A a=()
+----------
+declare -A a=([.]="v1" )
+declare -A a=([.]="v1" )
+-----
+declare -A a=([.]="v1" )
+declare -A a=([.]="v1" )
+-----
+declare -A a=([.]="v1" )
+declare -A a=([.]="v1" )
diff --git a/tests/quotearray.tests b/tests/quotearray.tests
new file mode 100644 (file)
index 0000000..e1ed83b
--- /dev/null
@@ -0,0 +1,164 @@
+#   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/>.
+#
+
+# a set of tests for associative arrays in arithmetic contexts
+
+declare -A assoc
+key='x],b[$(echo uname >&2)'
+
+(( assoc[$key]++ ))
+declare -p assoc
+
+(( assoc['$key']++ ))
+declare -p assoc
+
+(( assoc["$key"]++ ))
+declare -p assoc
+
+declare -A assoc
+
+(( 'assoc[$key]++' ))
+declare -p assoc
+
+(( 'assoc[$key]'++ ))
+declare -p assoc
+
+(( "assoc[$key]++" ))
+declare -p assoc
+
+unset assoc
+
+typeset -A a
+b="80's"
+
+((++a[$b]))
+
+((++a["$b"]))
+[[ $((++a[$b])) ]]
+[[ $((++a["$b"])) ]]
+
+echo ${a[$b]}
+unset a
+
+declare -A A
+
+string=abcdefghijklmnopqrstuvwxyz
+
+echo ${string:10:10}
+k1='%'
+k2='$(echo %)'
+
+A[%]=10
+A[']']=10
+A[$k2]=5
+
+k3=']'
+
+echo ${string:A[%]:A[$k1]}
+echo ${string:A[%]:A[$k2]}
+echo ${string:A[%]:A[$k3]}
+
+declare -p A
+
+unset A string key
+
+key='~'
+
+declare -A A
+A[$key]=42
+
+declare -p A
+
+echo $(( A[$key]++ ))
+declare -p A
+
+key='~0'
+A[$key]=42
+echo $(( A[$key]++ ))
+declare -p A
+
+declare -a a
+key='~-2'
+a[0]=12
+a[$key]=42
+echo $(( a[7<(4+2)] ))
+
+declare -p a
+
+unset A a key
+
+declare -A A
+declare -a a
+
+sString="devel packager's guide"
+i=2
+
+A["$sString"]=$i
+a[$i]=$sString
+
+echo "${A[${a[i]}]}"
+echo ${A["${a[i]}"]}
+
+unset A a
+
+#LANG=C
+unset var assoc
+var=\'\]
+declare -Ai assoc
+assoc[$var]=1
+assoc[$var]+=1
+((assoc['$var']++))
+((assoc[$var]++))
+typeset -p assoc
+
+unset assoc
+
+declare -A assoc
+key1='` echo >&2 foo`'
+key2='$( echo >&2 bar)'
+
+assoc[$key1]=42
+assoc[$key2]=63
+
+echo $(( assoc[$key1] + assoc[$key2] ))
+declare -p assoc
+unset assoc
+
+declare -a a
+key='x],b[$(echo uname >&2)'
+a[$key]=42
+
+expr='a[$key]'
+
+(( $expr ))
+echo $?
+
+echo $(( $expr ))
+echo $?
+
+echo $(( expr ))
+echo $?
+
+(( expr ))
+echo $?
+
+${THIS_SH} ./quotearray1.sub
+${THIS_SH} ./quotearray2.sub
+${THIS_SH} ./quotearray3.sub
+
+# behavior of builtins with array subscripts @ and *
+${THIS_SH} ./quotearray4.sub
+
+# behavior of unset with quoted and unquoted array arguments
+${THIS_SH} ./quotearray5.sub
diff --git a/tests/quotearray1.sub b/tests/quotearray1.sub
new file mode 100644 (file)
index 0000000..19741b1
--- /dev/null
@@ -0,0 +1,131 @@
+#   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/>.
+#
+
+# arithmetic operators for conditional commands and arithmetic commands
+
+declare -A assoc
+declare -a index
+
+key='x],b[$(echo uname >&2)'
+key1=']'
+key2='` echo >&2 foo`'
+key3='~'
+key4='7<(4+2)'
+key5='$( echo 2>& date)'
+key6='$(echo foo)'
+
+[[ -n assoc[$key] ]]
+declare -p assoc
+
+assoc[$key]=42
+assoc[$key1]=12
+assoc[$key2]=128
+assoc[$key3]=42
+assoc[0]=0
+
+[[ assoc[$key] -eq assoc[$key] ]]
+echo $?
+
+[[ assoc[$key] -gt assoc[$key1] ]]
+echo $?
+
+[[ assoc[$key2] -lt assoc[$key] ]]
+echo $?
+
+[[ assoc[$key] -eq assoc[$key3] ]]
+echo $?
+
+[[ index[7<(4+2)] -le assoc[0] ]]
+echo $?
+[[ index[$key4] -le assoc[0] ]]
+echo $?
+
+assoc[$key5]=foo
+declare -p assoc
+
+echo "${assoc[$key5]}"
+
+[[ -v assoc[$key5] ]]
+echo $?
+[[ -v assoc[$key] ]]
+echo $?
+
+unset assoc
+
+declare -a array
+index='0],b[1';
+((array[$index]++))
+
+declare -p array
+
+unset array
+
+declare -A assoc
+
+assoc[$key]=42
+assoc[$key4]=42
+
+[[ -v assoc[$key] ]]
+echo $?
+[[ -v assoc["$key"] ]]
+echo $?
+
+[[ -v assoc[$key4] ]]
+echo $?
+[[ -v assoc["$key4"] ]]
+echo $?
+
+[[ -v assoc['$key'] ]]
+echo $?
+[[ -v assoc['$key4'] ]]
+echo $?
+
+unset -v assoc
+
+declare -A aa
+aa[$key5]=foo
+
+declare -p aa
+echo "${aa[$key5]}"
+
+[[ -v aa[$key5] ]]
+echo $?
+
+[[ -v aa[$key] ]]
+echo $?
+
+aa[$key6]=42
+# this still performs expansion
+test -v aa["$key6"]
+echo $?
+# should be an error
+test -v aa[$key6]
+echo $?
+
+unset aa key
+
+declare -A assoc
+    
+mytest ()
+{
+        assoc["$1"]=123
+        [[ -v assoc["$1"] ]]
+        printf '[[ -v assoc[%s] ]]; $?=%s\n' "$1" "$?"
+}
+    
+mytest 'a' 
+mytest '"' 
+declare -p assoc
+unset -v assoc
+unset -f mytest
diff --git a/tests/quotearray2.sub b/tests/quotearray2.sub
new file mode 100644 (file)
index 0000000..056f8ca
--- /dev/null
@@ -0,0 +1,107 @@
+#   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/>.
+#
+
+# assoc_expand_once for builtins
+
+typeset -A a
+a[0]=0 a[1]=1
+
+let "a[\" \"]=11" ; typeset -p a ; a[0]=0
+
+unset a
+
+# tests for `problem' keys when using associative arrays and assoc_expand_once
+# deal with problems for now; this is a placeholder for if and when I fix them
+
+typeset -A a
+
+k='['
+echo $(( a[$k]=7 ))
+
+k=']'
+echo $(( a[$k]=7 ))
+
+unset a
+
+declare -A A
+
+for k in $'\t' ' '; do
+   (( A[$k]=2 ))
+done
+declare -p A
+
+for k in ']' '*' '@'; do
+   (( A[$k]=2 ))
+done
+
+declare -p A
+
+unset A
+declare -A A
+
+for k in $'\t' ' ' ']' '*' '@'; do
+   read "A[$k]" <<< X
+done
+declare -p A
+
+unset A
+declare -A A
+
+for k in $'\t' ' ' ']' '*' '@'; do
+       printf -v "A[$k]" "%s" X
+done
+declare -p A
+
+unset A
+declare -A A
+
+for k in ']' '*' '@'; do
+   declare A[$k]=X
+done
+declare -p A
+
+unset A
+declare -A A
+
+for k in ']' '*' '@'; do
+   declare "A[$k]=X"
+done
+declare -p A
+
+unset A
+
+# this isn't right yet, but changes will show up here
+shopt -s assoc_expand_once
+declare -A assoc
+key='x],b[$(echo uname >&2)'
+
+let assoc[$key]++
+declare -p assoc
+
+unset assoc
+
+typeset -A assoc
+at=@
+
+key='$(echo foo)'
+
+assoc[$key]=1
+declare -p assoc
+
+shopt -s assoc_expand_once
+test -v assoc["$key"] ; echo $?
+
+unset assoc
+shopt -u assoc_expand_once
+
diff --git a/tests/quotearray3.sub b/tests/quotearray3.sub
new file mode 100644 (file)
index 0000000..65f950d
--- /dev/null
@@ -0,0 +1,117 @@
+#   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/>.
+#
+
+# assoc_expand_once and unset builtin, which is treated specially
+
+declare -A assoc
+
+var=x123
+assoc['$var']=value
+declare -p assoc 
+
+shopt -u assoc_expand_once
+unset "assoc[$var]"
+declare -p assoc
+
+unset 'assoc[$var]'
+declare -p assoc
+
+assoc['$var']=value
+shopt -s assoc_expand_once
+unset 'assoc[$var]'
+declare -p assoc
+
+unset assoc
+shopt -u assoc_expand_once
+
+declare -A a
+a['$(echo foo)']=1
+
+unset 'a[$(echo foo)]'
+declare -p a
+
+key='$(echo foo)'
+a[$key]=1
+
+unset 'a[$key]'
+declare -p a
+
+a[$key]=1
+unset "a[$key]"
+declare -p a
+
+a[$key]=1
+unset a[$key]
+declare -p a
+
+unset a
+
+typeset -A assoc
+key=@
+
+assoc[@]=at
+assoc[!]=bang
+
+# this should only unset the element with key `@'
+unset -v assoc[$key]
+typeset -p assoc
+
+# this should check for assoc[@] and return 1
+test -v assoc[$key]
+echo $?
+
+# this should too
+[[ -v assoc[$key] ]]
+echo $?
+
+unset assoc array
+
+declare -A assoc
+declare -a array
+
+assoc=([@]=at [!]=bang)
+declare -p assoc
+
+unset assoc[@]
+declare -p assoc
+
+array=(1 2 3)
+declare -p array
+
+# right now, this still unsets the entire array
+unset array[@]
+declare -p array
+
+BASH_COMPAT=51
+unset array[@]
+declare -p array
+
+declare -A map; key='foo$(uname >/dev/tty)bar'; map[$key]=1
+declare -p map
+echo ${map["$key"]}
+
+unset map["$key"]
+declare -p map
+unset map
+
+declare -A blah
+blah['$(DOESNOTEXIST)']=broken
+for i in "${!blah[@]}"; do echo "$i"; done
+
+for i in "${!blah[@]}"; do unset blah["$i"]; done
+declare -p blah
+unset blah
+
+
+
diff --git a/tests/quotearray4.sub b/tests/quotearray4.sub
new file mode 100644 (file)
index 0000000..964aac7
--- /dev/null
@@ -0,0 +1,116 @@
+#   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/>.
+#
+
+# tests for builtins handling associative array keys `*' and `@', with some
+# indexed array tests as well (backwards compatible)
+
+# derived from test cases posted to bug-bash by myoga.murase@gmail.com
+
+declare -A assoc
+declare -a array
+
+assoc[@]=at
+assoc[*]=star
+assoc[!]=bang
+
+key=@
+
+iref='array[@]'
+aref='assoc[@]'
+
+declare -p assoc
+
+unset assoc[@]
+declare -p assoc
+
+unset assoc[*]
+declare -p assoc
+
+unset assoc
+declare -p assoc
+
+declare -A assoc
+assoc[@]=at
+assoc[*]=star
+assoc[!]=bang
+
+declare -p assoc
+
+unset assoc["$key"]
+declare -p assoc
+
+unset assoc["*"]
+declare -p assoc
+
+assoc[@]=at assoc[*]=star
+
+unset assoc['@']
+declare -p assoc
+
+unset assoc['*']
+
+declare -p assoc
+
+assoc[@]=at assoc[*]=star
+echo ${!aref}
+
+declare -n nref=$aref
+echo ${nref}
+unset -n nref
+
+# for associative arrays, test -v treats @ and * as keys
+
+test -v 'assoc[@]'
+echo $?
+test -v assoc[$key]
+echo $?
+[[ -v assoc[$key] ]]
+echo $?
+
+unset -v 'assoc[@]'
+
+test -v 'assoc[@]'
+echo $?
+[[ -v assoc[@] ]]
+echo $?
+
+assoc[@]=at
+
+printf -v assoc[@] "%10s" key
+declare -p assoc
+
+echo ===
+array=()
+test -v array[@]
+echo $?
+[[ -v array[@] ]]
+echo $?
+
+array=(1 2 3)
+declare -p array
+
+echo ${!iref}
+declare -n nref=$iref
+
+echo $nref
+unset -n nref
+
+# but for indexed arrays, test -v treats @ and * as standing for the entire array
+test -v 'array[@]'
+echo $?
+[[ -v array[@] ]]
+echo $?
+
+printf -v array[@] "%-10s" key
+declare -p array
diff --git a/tests/quotearray5.sub b/tests/quotearray5.sub
new file mode 100644 (file)
index 0000000..5366a99
--- /dev/null
@@ -0,0 +1,124 @@
+#   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/>.
+#
+
+# a set of tests for unset to try to ensure that subscripts are only expanded
+# once. Derived from tests submitted by konsolebox@gmail.com
+
+declare -A a
+key='$(echo foo)'
+
+# Here the tokens are valid array references and pass that fact to unset
+# post-expansion
+
+# This solves the surprise expansion issues.
+
+a[$key]=1
+unset -v a[$key]               # this performs normal word splitting
+unset -v a["$key"]             # prevent word splitting
+declare -p a # Displays no element
+
+a['$key']=2
+unset -v a['$key']
+declare -p a # Displays no element
+
+a["foo"]=3
+unset -v a["foo"]
+declare -p a # Displays no element
+
+echo -----
+
+# Here the tokens are "strings".  They expand and keep the
+# original behavior and allows existing scripts to not break.
+# It also allows nref or iref references to be transparently
+# referenced in it.
+
+# the quotes prevent the arguments from being recognized as valid array
+# references before word expansion. since unset doesn't know to treat
+# them specially, they're treated as in previous versions and expansion
+# is performed as part of evaluating the subscript
+
+a[$key]=1
+declare -p a
+unset 'a[$key]' # Transforms to a[$key] after expansion
+declare -p a # Displays no element
+
+a['$key']=2
+unset "a['\$key']" # Transforms to a['$key'] after expansion
+declare -p a # Displays no element
+
+a["foo"]=3
+unset 'a["foo"]' # Transforms to a["foo"] after expansion
+declare -p a # Displays no element
+
+echo -----
+
+# The update also keeps compatibility with already existing behavior of
+# unset when assoc_expand_once is enabled, but only for quoted tokens.
+
+a=()
+shopt -s assoc_expand_once
+
+a[$key]=1
+unset "a[$key]"
+declare -p a # Displays no element
+
+a['$key']=2
+unset "a[\$key]"
+declare -p a # Displays no element
+
+a["foo"]=3
+unset "a[foo]"
+declare -p a # Displays no element
+
+echo ----------
+
+# For unsetting '@' and all elements:
+
+key=@
+
+declare -A a=(@ v0 . v1)
+unset a[$key]
+declare -p a # Displays 'declare -A a=([.]="v1" )'
+
+declare -A a=(@ v0 . v1)
+unset a[@]
+declare -p a # same behavior
+
+echo -----
+
+# these are quoted strings and unset doesn't treat them specially
+
+unset a
+shopt -u assoc_expand_once
+
+declare -A a=(@ v0 . v1)
+unset 'a[$key]'
+declare -p a # Displays 'declare -A a=([.]="v1" )'
+
+declare -A a=(@ v0 . v1)
+unset 'a[@]'
+declare -p a # same behavior
+
+echo -----
+
+unset a
+shopt -s assoc_expand_once
+
+declare -A a=(@ v0 . v1)
+unset "a[$key]"                        # $key is expanded
+declare -p a # Displays 'declare -A a=([.]="v1" )'
+
+declare -A a=(@ v0 . v1)
+unset 'a[@]'
+declare -p a # same behavior
index 114408376c3ae5191b6071b72bda9a185eb4cca7..e21fcb5f2d9e2b810befc85922a9f652edaf550b 100644 (file)
@@ -30,19 +30,24 @@ argv[1] = <foo>
 argv[1] = <foo>
 argv[1] = < foo>
 a = abcdefg
+xyz
 a = xyz
 a = -xyz 123-
 a = abc
 timeout 1: ok
-
+unset or null 1
 timeout 2: ok
-
-./read2.sub: line 36: read: -3: invalid timeout specification
+unset or null 2
+timeout 3: ok
+unset or null 3
+./read2.sub: line 45: read: -3: invalid timeout specification
 1
 
+abcde
 abcde
 ./read3.sub: line 17: read: -1: invalid number
 abc
+defg
 ab
 abc
 #
@@ -64,3 +69,17 @@ FOO
 0
 0
 1
+timeout 1: ok
+unset or null 1
+timeout 2: ok
+unset or null 2
+timeout 3: ok
+unset or null 3
+timeout 4: ok
+abcde
+abcde
+
+one
+two three four
+one
+two three four
index 7384f05f470a9606e99b7eb30745340198e7a388..6132b6fe81e6c995bd530891c58aa0817a4d2114 100644 (file)
@@ -109,3 +109,9 @@ ${THIS_SH} ./read5.sub
 
 # test behavior of read -t 0
 ${THIS_SH} ./read6.sub
+
+# test behavior of readline timeouts
+${THIS_SH} ./read7.sub
+
+# test behavior of read -n and read -d on regular files
+${THIS_SH} ./read8.sub
index b3b85157d341eb84219e183f3d2674dea62f7a90..cf003986f1e999ac26bb2c252ddb1806170620d5 100644 (file)
@@ -15,6 +15,7 @@ a=7
 echo 'abcdefg|xyz' | {
        read -d '|' a 
        echo a = "${a-unset}"
+       cat -   # make sure we don't read too much
 }
 
 echo xyz 123 | {
index 41698e4686ba06791180616d2027d023cce3f71b..d35301153271522899d325180d3f97806c704366 100644 (file)
 #   You should have received a copy of the GNU General Public License
 #   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
+: ${TMPDIR:=/var/tmp}
+
 a=4
 
-read -t 2 a < /dev/tty
+read -t 1 a < /dev/tty
 estat=$?
 if [ $estat -gt 128 ]; then
        echo timeout 1: ok
 else
        echo $estat
 fi
+echo ${a:-unset or null 1}
 
-echo $a
-
-sleep 5 | read -t 1 a
+read -t 0.000001 a < /dev/tty
 estat=$?
 if [ $estat -gt 128 ]; then
        echo timeout 2: ok
 else
        echo $estat
 fi
+echo ${a:-unset or null 2}
 
-echo $a
+sleep 1 | read -t 0.25 a
+estat=$?
+if [ $estat -gt 128 ]; then
+       echo timeout 3: ok
+else
+       echo $estat
+fi
+echo ${a:-unset or null 3}
 
 read -t -3 a < /dev/tty
 echo $?
@@ -40,6 +49,24 @@ echo $a
 
 # the above should all time out
 echo abcde | {
-       read -t 2 a
+       read -t 0.5 a
        echo $a
 }
+
+read -t .0001 a <<<abcde
+echo $a
+
+# this is the original test that prompted the change to sh_timers
+cd $TMPDIR
+rm -f a.pipe
+mkfifo a.pipe
+exec 9<> a.pipe
+rm -f a.pipe
+
+for c in {0..2000}; do
+  (eval "echo {0..$c}" & read -u 9 -t 0.0001) >/dev/null
+  printf $'ok %d' "$c" >/dev/null
+done
+
+cd $OLDPWD
+rm -f $TMPDIR/a.pipe           # paranoia
index d413f7dba33cce3eb36b5190d609af2fa01968fe..8a24040138c65dc1086b9d62b697387415b2809d 100644 (file)
@@ -20,6 +20,7 @@ read -n -1
 echo abcdefg | {
        read -n 3 xyz
        echo $xyz
+       cat -   # make sure we don't read too much
 }
 
 # fewer chars than specified
diff --git a/tests/read7.sub b/tests/read7.sub
new file mode 100644 (file)
index 0000000..553070f
--- /dev/null
@@ -0,0 +1,66 @@
+#   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/>.
+#
+# test behavior of native readline timeouts
+
+# turn off bracketed paste to avoid spurious output
+bind 'set enable-bracketed-paste off' 2>/dev/null
+
+read -t 0.00001 -e var
+estat=$?
+if [ $estat -gt 128 ]; then
+       echo timeout 1: ok
+else
+       echo $estat
+fi
+echo ${var:-unset or null 1}
+
+read -e -t 0.1 var
+estat=$?
+if [ $estat -gt 128 ]; then
+       echo timeout 2: ok
+else
+       echo $estat
+fi
+echo ${var:-unset or null 2}
+
+read -e -t 1 var < /dev/tty
+estat=$?
+if [ $estat -gt 128 ]; then
+       echo timeout 3: ok
+else
+       echo $estat
+fi
+echo ${var:-unset or null 3}
+
+sleep 1 | read -t 0.25 -e a
+estat=$?
+if [ $estat -gt 128 ]; then
+       echo timeout 4: ok
+else
+       echo $estat
+fi
+
+# the above should all time out
+echo abcde | {
+       read -e -t 0.5 a
+       echo $a
+}
+
+read -e -t .0001 a <<<abcde
+echo $a
+
+set -o posix
+read -t 0.1 a </dev/tty
+echo $a
+
diff --git a/tests/read8.sub b/tests/read8.sub
new file mode 100644 (file)
index 0000000..d5b7af8
--- /dev/null
@@ -0,0 +1,15 @@
+tmpf=$TMPDIR/tmp-$$
+printf "%s\n" "one two three four" > $tmpf
+
+# make sure we rewind the input properly when reading a specific number of
+# characters or using a non-standard delimiter from a regular file
+
+exec <$tmpf
+read -n 4 input && echo "$input"
+cat -
+
+exec <$tmpf
+read -d ' ' input && echo "$input"
+cat -
+
+rm -f $tmpf
index a91974a593be1c41a1c0e6825f807229cf0fbb41..5f64049b69c88af693db3033a7022d46e276c0a8 100644 (file)
@@ -13,7 +13,7 @@
 ./rsh.tests: line 37: /tmp/restricted: restricted: cannot redirect output
 ./rsh.tests: line 42: command: -p: restricted
 ./rsh.tests: line 44: set: +r: invalid option
-set: usage: set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]
+set: usage: set [-abefhkmnptuvxBCEHPT] [-o option-name] [--] [-] [arg ...]
 ./rsh.tests: line 45: set: restricted: invalid option name
 ./rsh.tests: line 47: exec: restricted
 ./rsh.tests: after exec
index b8219b2d07ae753291467b8c9f7461fc4167dcb8..1f749239562eb213807065847aafc10daaea144d 100644 (file)
@@ -23,12 +23,12 @@ SUFFIX=`${THIS_SH} -c 'echo $(( $RANDOM + $BASHPID ))'`
 BASH_TSTOUT=${TMPDIR}/bashtst-$SUFFIX  # for now
 export BASH_TSTOUT
 
-trap 'rm -f $BASH_TSTOUT' 0 1 2 3 15
+trap 'rm -f $BASH_TSTOUT ; exit' 1 2 3 15
+trap 'rm -f $BASH_TSTOUT' 0
 
 PATH=.:$PATH   # just to get recho/zecho/printenv if not run via `make tests'
 export PATH
 
-
 # unset BASH_ENV only if it is set
 [ "${BASH_ENV+set}" = "set" ] && unset BASH_ENV
 # can't reliably do it for SHELLOPTS; SHELLOPTS is readonly in bash
index de786442bd8d472a8ae4ffe6ff41d19efcbd45db..c3ed53e60f349a30a60f57d2c6d33b76742b2b66 100644 (file)
@@ -1,5 +1,22 @@
+#   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/>.
+#
+
 echo "warning: the text of a system error message may vary between systems and" >&2
 echo "warning: produce diff output." >&2
+echo "warning: UNIX versions number signals differently." >&2
+echo "warning: If output differing only in line numbers is produced, please" >&2
+echo "warning: do not consider this a test failure." >&2
 echo "warning: if the text of the error messages concerning \`notthere' or" >&2
 echo "warning: \`/tmp/bash-notthere' not being found or \`/' being a directory" >&2
 echo "warning: produce diff output, please do not consider this a test failure" >&2
index c31d1d0a7a354dd710af5621560a4a0f9d087fd0..8234f280fc7110854c016443a32b6465f66d4e82 100644 (file)
@@ -1,8 +1,5 @@
 # See whether or not we can use `diff -a'
 ( diff -a ./intl.right ./intl.right >/dev/null 2>&1 ) && AFLAG=-a
 
-echo "warning: some of these tests will fail if you do not have UTF-8" >&2
-echo "warning: locales installed on your system." >&2
-
 ${THIS_SH} ./intl.tests > ${BASH_TSTOUT}
 diff $AFLAG ${BASH_TSTOUT} intl.right && rm -f ${BASH_TSTOUT}
index ade30b152fa11bb1828114d6e64a98760a4c07ce..0c3a2e5fb1a05cc4d3135a23c5092a6bd1e7ee80 100644 (file)
@@ -58,8 +58,8 @@ do
        run-ifs-tests|run-input-test|run-invert|run-more-exp|run-nquote) echo $x ; sh $x ;;
        run-ifs-posix|run-posix2|run-posixpat|run-posixpipe) echo $x ; sh $x ;;
        run-precedence|run-quote|run-read|run-rhs-exp|run-strip|run-tilde) echo $x ; sh $x ;;
-       run-dynvar) echo $x ; sh $x ;;
-       ;;
+       run-dynvar|run-iquote) echo $x ; sh $x ;;
+       run-type|run-comsub-eof|run-comsub-posix) echo $x ; sh $x ;;
        *)      ;;
        esac
        rm -f "$BASH_TSTOUT"
diff --git a/tests/run-quotearray b/tests/run-quotearray
new file mode 100644 (file)
index 0000000..06e5e6e
--- /dev/null
@@ -0,0 +1,2 @@
+${THIS_SH} ./quotearray.tests >${BASH_TSTOUT} 2>&1
+diff ${BASH_TSTOUT} quotearray.right && rm -f ${BASH_TSTOUT}
index 8cf46db6077b07aac074334cbdc11ecb9d27b4f0..d617c1d720c83cc9697dd2d82848348af67681bc 100644 (file)
@@ -28,6 +28,7 @@ shopt -s extquote
 shopt -u failglob
 shopt -s force_fignore
 shopt -s globasciiranges
+shopt -s globskipdots
 shopt -u globstar
 shopt -u gnu_errfmt
 shopt -u histappend
@@ -46,13 +47,16 @@ shopt -u mailwarn
 shopt -u no_empty_cmd_completion
 shopt -u nocaseglob
 shopt -u nocasematch
+shopt -u noexpand_translation
 shopt -u nullglob
+shopt -s patsub_replacement
 shopt -s progcomp
 shopt -u progcomp_alias
 shopt -s promptvars
 shopt -u restricted_shell
 shopt -u shift_verbose
 shopt -s sourcepath
+shopt -u varredir_close
 shopt -u xpg_echo
 --
 shopt -u huponexit
@@ -66,8 +70,10 @@ shopt -s expand_aliases
 shopt -s extquote
 shopt -s force_fignore
 shopt -s globasciiranges
+shopt -s globskipdots
 shopt -s hostcomplete
 shopt -s interactive_comments
+shopt -s patsub_replacement
 shopt -s progcomp
 shopt -s promptvars
 shopt -s sourcepath
@@ -108,10 +114,12 @@ shopt -u mailwarn
 shopt -u no_empty_cmd_completion
 shopt -u nocaseglob
 shopt -u nocasematch
+shopt -u noexpand_translation
 shopt -u nullglob
 shopt -u progcomp_alias
 shopt -u restricted_shell
 shopt -u shift_verbose
+shopt -u varredir_close
 shopt -u xpg_echo
 --
 autocd                 off
@@ -150,10 +158,12 @@ mailwarn          off
 no_empty_cmd_completion        off
 nocaseglob             off
 nocasematch            off
+noexpand_translation   off
 nullglob               off
 progcomp_alias         off
 restricted_shell       off
 shift_verbose          off
+varredir_close         off
 xpg_echo               off
 --
 set +o allexport
@@ -294,5 +304,9 @@ xtrace              off
 --
 ./shopt.tests: line 106: shopt: xyz1: invalid shell option name
 ./shopt.tests: line 107: shopt: xyz1: invalid option name
+28c28
+< globskipdots         off
+---
+> globskipdots         on
 expand_aliases         on
 expand_aliases         on
index 391edbbd34902184d75fc3e77cc7d8adbb64f9bd..4be22f4bbadcba480f83865cdfdec0de98009f10 100644 (file)
@@ -220,6 +220,8 @@ t ! -z "$z"
 0
 t ! -n "$z"
 1
+t ! ! "$z"
+0
 t "$zero"
 1
 t ! "$zero"
@@ -272,7 +274,7 @@ b ( 1 = 2
 2
 ./test.tests: line 26: test: too many arguments
 2
-./test.tests: line 431: [: missing `]'
+./test.tests: line 434: [: missing `]'
 2
 ./test.tests: line 26: test: (: unary operator expected
 2
index 03e2754a5d6df36b6f0d0961152c4b1fbdac81bd..df4b850956faf001999d5a33db827a2b5cae0367 100644 (file)
@@ -358,6 +358,9 @@ t ! -z "$z"
 echo 't ! -n "$z"'
 t ! -n "$z"
 
+echo 't ! ! "$z"'
+t ! ! "$z"
+
 zero=
 echo 't "$zero"'
 t "$zero"
index 374f3e6d6942340190fd736e4b9d5087e45ee413..20268a731bdfd43280c9d08d3d5f8739fbf5758e 100644 (file)
@@ -86,7 +86,9 @@ echo ~$USER
 
 cd "$wdir"
 
+# this test is incomplete; should also test assignment statements (tilde3.sub)
+echo foo=bar:~
+set -o posix
 echo foo=bar:~
-set -o posix; echo foo=bar:~
 
 exit 0
index fce04687e25265a2cfc6775f34075b25d0d55b1b..f383e3a3f8648389feb2f2031080cbaf3f1bc931 100644 (file)
@@ -22,3 +22,7 @@ HOME=~
 /usr/$x/abc
 HOME=/usr/$x/abc
 /usr/$x/abc
+foo=/home/xyz:/home/xyz
+/home/xyz:/home/xyz
+foo=~:~
+/home/xyz:/home/xyz
index cc5dba9f6cabfb764d925f270db945d5499c87d8..d2415cb35f3d8c914a019ff737bc69f86bc68410 100644 (file)
@@ -81,3 +81,5 @@ set +o posix
 eval echo $h
 eval $h
 echo $HOME
+
+$THIS_SH ./tilde3.sub
diff --git a/tests/tilde3.sub b/tests/tilde3.sub
new file mode 100644 (file)
index 0000000..c35ea50
--- /dev/null
@@ -0,0 +1,26 @@
+#   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/>.
+#
+# regression test for tilde expansion following unquoted colons in posix mode
+
+HOME=/home/xyz
+
+echo foo=~:~
+foo=~:~
+printf "%s\n" $foo
+
+set -o posix
+
+echo foo=~:~
+foo=~:~
+printf "%s\n" $foo
index f876715a048ec6e977012bf3c4820aca9ce7ce53..bbc228e850dfa08a367f3beeecf741168867eb07 100644 (file)
@@ -54,12 +54,12 @@ f ()
 foo is a function
 foo () 
 { 
-    echo $(<x1)
+    echo $(< x1)
 }
 bar is a function
 bar () 
 { 
-    echo $(<x1)
+    echo $(< x1)
 }
 foo is a function
 foo () 
index fc7428557d804450e14136cbf021f487c695896d..713ab40f03cbfe8c7fd672026f1000cba11cba5e 100644 (file)
@@ -109,7 +109,13 @@ fr_FR_ISO_8859_1=(
  [0x00fb]=$'\373' [0x00fc]=$'\374' [0x00fd]=$'\375' [0x00fe]=$'\376'   
 )
 
-TestCodePage fr_FR.ISO8859-1 fr_FR_ISO_8859_1
+# this locale causes problems all over the place
+if locale -a | grep -i '^fr_FR\.ISO8859.*1$' >/dev/null ; then
+       TestCodePage fr_FR.ISO8859-1 fr_FR_ISO_8859_1
+else
+       echo "unicode1.sub: warning: you do not have the fr_FR.ISO8859-1 locale installed;" >&2
+       echo "unicode1.sub: that will cause some of these tests to be skipped." >&2
+fi
 
 zh_TW_BIG5=(
  [0x00f6]=$'\366' [0x00f7]=$'\367' [0x00f8]=$'\370' [0x00f9]=$'\371' [0x00fa]=$'\372'
@@ -309,8 +315,14 @@ jp_JP_SHIFT_JIS=(
   [0xFF9E]=$'\xDE' #  HALFWIDTH KATAKANA VOICED SOUND MARK
   [0xFF9F]=$'\xDF' #  HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
 )
+
 #TestCodePage ja_JP.SHIFT_JIS jp_JP_SHIFT_JIS
-TestCodePage ja_JP.SJIS jp_JP_SHIFT_JIS
+if locale -a | grep -i '^ja_JP.SJIS' >/dev/null ; then
+       TestCodePage ja_JP.SJIS jp_JP_SHIFT_JIS
+else
+       echo "unicode1.sub: warning: you do not have the ja_JP.SJIS locale installed;" >&2
+       echo "unicode1.sub: that will cause some of these tests to be skipped." >&2
+fi
 
 #for ((x=1;x<1000;x++)); do printf ' [0x%04x]=%-11q' "$x" "$(printf "$(printf '\\U%08x' $x)")" ; [ $(($x%5)) = 0 ] && echo; done
 C_UTF_8=(
index 358f5dc74d2cda48b00559efd3b3659a22b74358..f6bd1b5bd4d0ee42b395a79fd9529333127bca9c 100644 (file)
@@ -168,10 +168,9 @@ after bar: var=global
 ./varenv13.sub: line 16: `var[0]': not a valid identifier
 ./varenv13.sub: line 16: `var[@]': not a valid identifier
 ./varenv13.sub: line 14: declare: var: not found
-./varenv13.sub: line 25: var[@]: bad array subscript
-declare -A var=([0]="X" )
+declare -A var=([0]="X" ["@"]="Y" )
 help
-./varenv13.sub: line 34: `var[0]': not a valid identifier
+./varenv13.sub: line 35: `var[0]': not a valid identifier
 1
 declare -A var=([0]="X" )
 declare -A var=([Y]="Y" )
@@ -265,6 +264,14 @@ ignoreeof          off
 ignoreeof              on
 10
 match 1
+trap -- 'echo trap:$FUNCNAME' EXIT
+trap:f
+trap -- 'echo trap:$FUNCNAME' EXIT
+trap:f
+trap -- 'echo trap:$FUNCNAME' EXIT
+trap:f
+trap -- 'echo trap:$FUNCNAME' EXIT
+trap:f
 a=z
 a=b
 a=z
index b058ed4ff5080ff9295067f88b44ea5b9d14f441..68c619ec767f42e2d53b1fb4fc43dda46dffc5db 100644 (file)
@@ -259,6 +259,7 @@ ${THIS_SH} ./varenv18.sub
 ${THIS_SH} ./varenv19.sub
 ${THIS_SH} ./varenv20.sub
 ${THIS_SH} ./varenv21.sub
+${THIS_SH} ./varenv22.sub
 
 # make sure variable scoping is done right
 tt() { typeset a=b;echo a=$a; };a=z;echo a=$a;tt;echo a=$a
index 1f837ec7fd2f116ec6a4fa151e84f6a30728442d..1fa7d5b376b71ba3f9b981dad1a8bc76c1f9c2ce 100644 (file)
@@ -22,6 +22,7 @@ typeset -A var
 
 f() { declare -p ${!var*}; }
 
+# this is no longer an error
 var[0]=X var[@]=Y
 f
 
diff --git a/tests/varenv22.sub b/tests/varenv22.sub
new file mode 100644 (file)
index 0000000..6d42bb5
--- /dev/null
@@ -0,0 +1,17 @@
+# test behavior of FUNCNAME in and out of parse_and_execute scenarios
+
+# in parse_and_execute
+${THIS_SH} -c 'trap "echo trap:\$FUNCNAME" EXIT ; trap ; f() { exit; } ; f' bash
+
+${THIS_SH} << \EOF
+eval "trap 'echo trap:\$FUNCNAME' EXIT ; trap; f() { exit; } ; f"
+EOF
+
+# not in parse_and_execute
+${THIS_SH} << \EOF
+trap 'echo trap:$FUNCNAME' EXIT ; trap; f() { exit; } ; f
+EOF
+
+# this has to be last
+trap 'echo trap:$FUNCNAME' EXIT ; trap; f() { exit; } ; f
+
index b2c4cc9c5a69b77e30b93a89953b3790cd8e9f52..6465595b58086b545c5ec3c6bbc9d3af0b9d5a51 100644 (file)
@@ -98,3 +98,4 @@ swizzle ()
     exec {stdin}<&${fd[0]}-;
     exec {stdout}>&${fd[1]}-
 }
+./vredir8.sub: line 12: $fd: Bad file descriptor
index ea59eecd39450416569772aadbcdbe598ac5263b..bd4cb77522cb730d8102f9f6d32ec1c52e0351e3 100644 (file)
@@ -57,5 +57,6 @@ ${THIS_SH} ./vredir5.sub
 ${THIS_SH} ./vredir6.sub
 
 ${THIS_SH} ./vredir7.sub
+${THIS_SH} ./vredir8.sub
 
 exit 0
diff --git a/tests/vredir8.sub b/tests/vredir8.sub
new file mode 100644 (file)
index 0000000..e87b45b
--- /dev/null
@@ -0,0 +1,13 @@
+# test varredir_close
+
+: {fd}<>/dev/null
+
+echo redir 1 >&$fd
+exec {fd}>&-
+
+shopt -s varredir_close
+
+: {fd}<>/dev/tty
+
+echo redir 2 >&$fd
+exec {fd}>&-
diff --git a/trap.c b/trap.c
index 1b27fb3a3a8c1918f93e30e05a3a924e31ff92cd..dd0245e6dd881fbb33afe1d5ce11448034450188 100644 (file)
--- a/trap.c
+++ b/trap.c
@@ -1,7 +1,7 @@
 /* trap.c -- Not the trap command, but useful functions for manipulating
    those objects.  The trap command is in builtins/trap.def. */
 
-/* Copyright (C) 1987-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -83,11 +83,11 @@ static void free_trap_string (int);
 static void reset_signal (int);
 static void restore_signal (int);
 static void reset_or_restore_signal_handlers (sh_resetsig_func_t *);
+static void reinit_trap (int);
 
 static void trap_if_untrapped (int, char *);
 
 /* Variables used here but defined in other files. */
-extern procenv_t alrmbuf;
 
 extern volatile int from_return_trap;
 extern int waiting_for_child;
@@ -297,11 +297,13 @@ void
 run_pending_traps ()
 {
   register int sig;
-  int old_exit_value, x;
-  int old_running;
+  int x;
+  volatile int old_exit_value, old_running;
   WORD_LIST *save_subst_varlist;
   HASH_TABLE *save_tempenv;
   sh_parser_state_t pstate;
+  volatile int save_return_catch_flag, function_code;
+  procenv_t save_return_catch;
 #if defined (ARRAY_VARS)
   ARRAY *ps;
 #endif
@@ -311,9 +313,7 @@ run_pending_traps ()
 
   if (running_trap > 0)
     {
-#if defined (DEBUG)
-      internal_warning ("run_pending_traps: recursive invocation while running trap for signal %d", running_trap-1);
-#endif
+      internal_debug ("run_pending_traps: recursive invocation while running trap for signal %d", running_trap-1);
 #if defined (SIGWINCH)
       if (running_trap == SIGWINCH+1 && pending_traps[SIGWINCH])
        return;                 /* no recursive SIGWINCH trap invocations */
@@ -343,9 +343,7 @@ run_pending_traps ()
         while (pending_traps[sig]--) instead of the if statement. */
       if (pending_traps[sig])
        {
-         if (running_trap == sig+1)
-           /*continue*/;
-
+         /* XXX - set last_command_exit_value = trap_saved_exit_value here? */
          running_trap = sig + 1;
 
          if (sig == SIGINT)
@@ -421,7 +419,6 @@ run_pending_traps ()
            }
          else
            {
-             /* XXX - should we use save_parser_state/restore_parser_state? */
              save_parser_state (&pstate);
              save_subst_varlist = subst_assign_varlist;
              subst_assign_varlist = 0;
@@ -434,7 +431,23 @@ run_pending_traps ()
              /* XXX - set pending_traps[sig] = 0 here? */
              pending_traps[sig] = 0;
              evalnest++;
-             evalstring (savestring (trap_list[sig]), "trap", SEVAL_NONINT|SEVAL_NOHIST|SEVAL_RESETLINE);
+
+             function_code = 0;
+             save_return_catch_flag = return_catch_flag;
+             if (return_catch_flag)
+               {
+                 COPY_PROCENV (return_catch, save_return_catch);
+                 function_code = setjmp_nosigs (return_catch);
+               }
+
+             if (function_code == 0)
+               x = parse_and_execute (savestring (trap_list[sig]), "trap", SEVAL_NONINT|SEVAL_NOHIST|SEVAL_RESETLINE);
+             else
+               {
+                 parse_and_execute_cleanup (sig + 1);  /* XXX - could use -1 */
+                 x = return_catch_value;
+               }
+
              evalnest--;
 #if defined (JOB_CONTROL)
              restore_pipeline (1);
@@ -443,6 +456,19 @@ run_pending_traps ()
              subst_assign_varlist = save_subst_varlist;
              restore_parser_state (&pstate);
              temporary_env = save_tempenv;
+
+             if (save_return_catch_flag)
+               {
+                 return_catch_flag = save_return_catch_flag;
+                 return_catch_value = x;
+                 COPY_PROCENV (save_return_catch, return_catch);
+                 if (function_code)
+                   {
+                     running_trap = old_running;               /* XXX */
+                     /* caller will set last_command_exit_value */
+                     sh_longjmp (return_catch, 1);
+                   }
+               }
            }
 
          pending_traps[sig] = 0;       /* XXX - move before evalstring? */
@@ -475,9 +501,7 @@ trap_handler (sig)
 
   if ((sigmodes[sig] & SIG_TRAPPED) == 0)
     {
-#if defined (DEBUG)
-      internal_warning ("trap_handler: signal %d: signal not trapped", sig);
-#endif
+      internal_debug ("trap_handler: signal %d: signal not trapped", sig);
       SIGRETURN (0);
     }
 
@@ -570,7 +594,7 @@ any_signals_trapped ()
   register int i;
 
   for (i = 1; i < NSIG; i++)
-    if (sigmodes[i] & SIG_TRAPPED)
+    if ((sigmodes[i] & SIG_TRAPPED) && (sigmodes[i] & SIG_IGNORED) == 0)
       return i;
   return -1;
 }
@@ -587,7 +611,8 @@ clear_pending_traps ()
 void
 check_signals ()
 {
-  CHECK_ALRM;          /* set by the read builtin */
+  /* Add any other shell timeouts here */
+  check_read_timeout ();       /* set by the read builtin */
   QUIT;
 }
 
@@ -981,7 +1006,7 @@ run_exit_trap ()
        }
       else if (code == ERREXIT)
        retval = last_command_exit_value;
-      else if (code == EXITPROG)
+      else if (code == EXITPROG || code == EXITBLTIN)
        retval = last_command_exit_value;
       else if (function_code != 0)
         retval = return_catch_value;
@@ -1365,6 +1390,77 @@ restore_original_signals ()
   reset_or_restore_signal_handlers (restore_signal);
 }
 
+/* Change the flags associated with signal SIG without changing the trap
+   string. The string is TRAP_LIST[SIG] if we need it. */
+static void
+reinit_trap (sig)
+     int sig;
+{
+  sigmodes[sig] |= SIG_TRAPPED;
+  if (trap_list[sig] == (char *)IGNORE_SIG)
+    sigmodes[sig] |= SIG_IGNORED;
+  else
+    sigmodes[sig] &= ~SIG_IGNORED;
+  if (sigmodes[sig] & SIG_INPROGRESS)
+    sigmodes[sig] |= SIG_CHANGED;
+}
+
+/* Undo the effects of reset_signal_handlers(), which unsets the traps but
+   leaves the trap strings in place. This understands how reset_signal_handlers
+   works. */
+void
+restore_traps ()
+{
+  char *trapstr;
+  int i;
+
+  /* Take care of the exit trap first. If TRAP_LIST[0] is non-null, the trap
+     has been set. */
+  trapstr = trap_list[EXIT_TRAP];
+  if (trapstr)
+    reinit_trap (EXIT_TRAP);
+
+  /* Then DEBUG, RETURN, and ERROR. TRAP_LIST[N] == 0 if these signals are
+     not trapped. This knows what reset_signal_handlers does for these traps */
+  trapstr = trap_list[DEBUG_TRAP];
+  if (trapstr && function_trace_mode == 0)
+    reinit_trap (DEBUG_TRAP);
+  trapstr = trap_list[RETURN_TRAP];
+  if (trapstr && function_trace_mode == 0)
+    reinit_trap (RETURN_TRAP);
+  trapstr = trap_list[ERROR_TRAP];
+  if (trapstr && error_trace_mode == 0)
+    reinit_trap (ERROR_TRAP);
+
+  /* And finally all the `real' signals. reset_signal_handlers just changes the
+     signal handler for these signals, leaving the trap value in place. We
+     intuit what to do based on that value. We assume that signals marked as
+     SIG_SPECIAL are reinitialized by initialize_signals (), so we don't
+     change the signal handler unless the signal is supposed to be ignored. */
+  for (i = 1; i < NSIG; i++)
+    {
+      trapstr = trap_list[i];
+      if (sigmodes[i] & SIG_SPECIAL)
+       {
+         if (trapstr && trapstr != (char *)DEFAULT_SIG)
+           reinit_trap (i);
+         if (trapstr == (char *)IGNORE_SIG && (sigmodes[i] & SIG_NO_TRAP) == 0)
+           set_signal_handler (i, SIG_IGN);
+       }
+      else if (trapstr == (char *)IGNORE_SIG)
+       {
+         reinit_trap (i);
+         if ((sigmodes[i] & SIG_NO_TRAP) == 0)
+           set_signal_handler (i, SIG_IGN);
+       }
+      else if (trapstr != (char *)DEFAULT_SIG)
+        /* set_signal duplicates the string argument before freeing it. */
+       set_signal (i, trapstr);
+
+      pending_traps[i] = 0;    /* XXX */
+    }
+}
+
 /* If a trap handler exists for signal SIG, then call it; otherwise just
    return failure.  Returns 1 if it called the trap handler. */
 int
@@ -1455,7 +1551,7 @@ signal_in_progress (sig)
   return (sigmodes[sig] & SIG_INPROGRESS);
 }
 
-#if 0 /* TAG: bash-5.2 */
+#if 0 /* unused */
 int
 block_trapped_signals (maskp, omaskp)
      sigset_t *maskp;
diff --git a/trap.h b/trap.h
index ef64a68030ffcb7284a7948d7d8908b7443a486e..89402a1bcbd4b60c97b659c64dd11375744e913a 100644 (file)
--- a/trap.h
+++ b/trap.h
@@ -1,6 +1,6 @@
 /* trap.h -- data structures used in the trap mechanism. */
 
-/* Copyright (C) 1993-2013 Free Software Foundation, Inc.
+/* Copyright (C) 1993-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -98,6 +98,7 @@ extern void run_return_trap PARAMS((void));
 extern void free_trap_strings PARAMS((void));
 extern void reset_signal_handlers PARAMS((void));
 extern void restore_original_signals PARAMS((void));
+extern void restore_traps PARAMS((void));
 
 extern void get_original_signal PARAMS((int));
 extern void get_all_original_signals PARAMS((void));
index 5703777fe3acc8952e241407e34d6595498ac700..ec82393d5a8709bc8e2e1e725bfc50030dfb5f23 100644 (file)
@@ -3,7 +3,7 @@
 /* I can't stand it anymore!  Please can't we just write the
    whole Unix system in lisp or something? */
 
-/* Copyright (C) 1987-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2021 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -35,7 +35,7 @@
 #  include <unistd.h>
 #endif
 
-#if STDC_HEADERS
+#if defined (HAVE_STDDEF_H)
 #  include <stddef.h>
 #endif
 
@@ -48,6 +48,7 @@
 #include "unwind_prot.h"
 #include "sig.h"
 #include "quit.h"
+#include "bashintl.h"  /* for _() */
 #include "error.h"     /* for internal_warning */
 #include "ocache.h"
 
@@ -282,7 +283,7 @@ unwind_frame_discard_internal (tag, ignore)
     }
 
   if (found == 0)
-    internal_warning ("unwind_frame_discard: %s: frame not found", tag);
+    internal_warning (_("unwind_frame_discard: %s: frame not found"), tag);
 }
 
 /* Restore the value of a variable, based on the contents of SV.
@@ -328,7 +329,7 @@ unwind_frame_run_internal (tag, ignore)
       uwpfree (elt);
     }
   if (tag && found == 0)
-    internal_warning ("unwind_frame_run: %s: frame not found", tag);
+    internal_warning (_("unwind_frame_run: %s: frame not found"), tag);
 }
 
 static void
index 73f157fb549ba5fa32e4967e6a2a34e9309b98ec..1a0c2c45c053fcce715ba2fa9095c41488994e70 100644 (file)
@@ -1,6 +1,6 @@
 /* variables.c -- Functions for hacking shell variables. */
 
-/* Copyright (C) 1987-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2022 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
 #define BASHFUNC_SUFFIX                "%%"
 #define BASHFUNC_SUFFLEN       2       /* == strlen(BASHFUNC_SUFFIX) */
 
+#if ARRAY_EXPORT
+#define BASHARRAY_PREFIX       "BASH_ARRAY_"
+#define BASHARRAY_PREFLEN      11
+#define BASHARRAY_SUFFIX       "%%"
+#define BASHARRAY_SUFFLEN      2
+
+#define BASHASSOC_PREFIX       "BASH_ASSOC_"
+#define BASHASSOC_PREFLEN      11
+#define BASHASSOC_SUFFIX       "%%"    /* needs to be the same as BASHARRAY_SUFFIX */
+#define BASHASSOC_SUFFLEN      2
+#endif
+
 /* flags for find_variable_internal */
 
 #define FV_FORCETEMPENV                0x01
@@ -199,6 +211,9 @@ static SHELL_VAR *init_dynamic_array_var PARAMS((char *, sh_var_value_func_t *,
 static SHELL_VAR *init_dynamic_assoc_var PARAMS((char *, sh_var_value_func_t *, sh_var_assign_func_t *, int));
 #endif
 
+static inline SHELL_VAR *set_int_value (SHELL_VAR *, intmax_t, int);
+static inline SHELL_VAR *set_string_value (SHELL_VAR *, const char *, int);
+
 static SHELL_VAR *assign_seconds PARAMS((SHELL_VAR *, char *, arrayind_t, char *));
 static SHELL_VAR *get_seconds PARAMS((SHELL_VAR *));
 static SHELL_VAR *init_seconds_var PARAMS((void));
@@ -315,6 +330,8 @@ static void push_func_var PARAMS((PTR_T));
 static void push_builtin_var PARAMS((PTR_T));
 static void push_exported_var PARAMS((PTR_T));
 
+static void delete_local_contexts PARAMS((VAR_CONTEXT *));
+
 /* This needs to be looked at again. */
 static inline void push_posix_tempvar_internal PARAMS((SHELL_VAR *, int));
 
@@ -429,14 +446,54 @@ initialize_shell_variables (env, privmode)
 #if defined (ARRAY_VARS)
 #  if ARRAY_EXPORT
       /* Array variables may not yet be exported. */
-      if (*string == '(' && string[1] == '[' && string[strlen (string) - 1] == ')')
+      if (STREQN (BASHARRAY_PREFIX, name, BASHARRAY_PREFLEN) &&
+         STREQN (BASHARRAY_SUFFIX, name + char_index - BASHARRAY_SUFFLEN, BASHARRAY_SUFFLEN) &&
+         *string == '(' && string[1] == '[' && string[strlen (string) - 1] == ')')
        {
+         size_t namelen;
+         char *tname;          /* desired imported array variable name */
+
+         namelen = char_index - BASHARRAY_PREFLEN - BASHARRAY_SUFFLEN;
+
+         tname = name + BASHARRAY_PREFLEN;     /* start of variable name */
+         tname[namelen] = '\0';                /* now tname == varname */
+         
          string_length = 1;
          temp_string = extract_array_assignment_list (string, &string_length);
-         temp_var = assign_array_from_string (name, temp_string, 0);
+         temp_var = assign_array_from_string (tname, temp_string, 0);
+         FREE (temp_string);
+         if (temp_var)
+           {
+             VSETATTR (temp_var, (att_exported | att_imported));
+             array_needs_making = 1;
+           }
+       }
+      else if (STREQN (BASHASSOC_PREFIX, name, BASHASSOC_PREFLEN) &&
+         STREQN (BASHASSOC_SUFFIX, name + char_index - BASHASSOC_SUFFLEN, BASHASSOC_SUFFLEN) &&
+         *string == '(' && string[1] == '[' && string[strlen (string) - 1] == ')')
+       {
+         size_t namelen;
+         char *tname;          /* desired imported assoc variable name */
+
+         namelen = char_index - BASHASSOC_PREFLEN - BASHASSOC_SUFFLEN;
+
+         tname = name + BASHASSOC_PREFLEN;     /* start of variable name */
+         tname[namelen] = '\0';                /* now tname == varname */
+
+         /* need to make sure it exists as an associative array first */
+         temp_var = find_or_make_array_variable (tname, 2);
+         if (temp_var)
+           {
+             string_length = 1;
+             temp_string = extract_array_assignment_list (string, &string_length);
+             temp_var = assign_array_var_from_string (temp_var, temp_string, 0);
+           }
          FREE (temp_string);
-         VSETATTR (temp_var, (att_exported | att_imported));
-         array_needs_making = 1;
+         if (temp_var)
+           {
+             VSETATTR (temp_var, (att_exported | att_imported));
+             array_needs_making = 1;
+           }
        }
       else
 #  endif /* ARRAY_EXPORT */
@@ -636,34 +693,11 @@ initialize_shell_variables (env, privmode)
     rl_prefer_env_winsize = 1;
 #endif /* READLINE && STRICT_POSIX */
 
-     /*
-      * 24 October 2001
-      *
-      * I'm tired of the arguing and bug reports.  Bash now leaves SSH_CLIENT
-      * and SSH2_CLIENT alone.  I'm going to rely on the shell_level check in
-      * isnetconn() to avoid running the startup files more often than wanted.
-      * That will, of course, only work if the user's login shell is bash, so
-      * I've made that behavior conditional on SSH_SOURCE_BASHRC being defined
-      * in config-top.h.
-      */
-#if 0
-  temp_var = find_variable ("SSH_CLIENT");
-  if (temp_var && imported_p (temp_var))
-    {
-      VUNSETATTR (temp_var, att_exported);
-      array_needs_making = 1;
-    }
-  temp_var = find_variable ("SSH2_CLIENT");
-  if (temp_var && imported_p (temp_var))
-    {
-      VUNSETATTR (temp_var, att_exported);
-      array_needs_making = 1;
-    }
-#endif
-
   /* Get the user's real and effective user ids. */
   uidset ();
 
+  temp_var = set_if_not ("BASH_LOADABLES_PATH", DEFAULT_LOADABLE_BUILTINS_PATH);
+
   temp_var = find_variable ("BASH_XTRACEFD");
   if (temp_var && imported_p (temp_var))
     sv_xtracefd (temp_var->name);
@@ -1273,6 +1307,39 @@ init_dynamic_assoc_var (name, getfunc, setfunc, attrs)
 }
 #endif
 
+/* Set the string value of VAR to the string representation of VALUE.
+   Right now this takes an INTMAX_T because that's what itos needs. If
+   FLAGS&1, we force the integer attribute on. */
+static inline SHELL_VAR *
+set_int_value (SHELL_VAR *var, intmax_t value, int flags)
+{
+  char *p;
+
+  p = itos (value);
+  FREE (value_cell (var));
+  var_setvalue (var, p);
+  if (flags & 1)
+    VSETATTR (var, att_integer);
+  return (var);
+}
+
+static inline SHELL_VAR *
+set_string_value (SHELL_VAR *var, const char *value, int flags)
+{
+  char *p;
+
+  if (value && *value)
+    p = savestring (value);
+  else
+    {
+      p = (char *)xmalloc (1);
+      p[0] = '\0';
+    }
+  FREE (value_cell (var));
+  var_setvalue (var, p);
+  return (var);
+}
+
 /* The value of $SECONDS.  This is the number of seconds since shell
    invocation, or, the number of seconds since the last assignment + the
    value of the last assignment. */
@@ -1295,7 +1362,7 @@ assign_seconds (self, value, unused, key)
   seconds_value_assigned = expok ? nval : 0;
   gettimeofday (&shellstart, NULL);
   shell_start_time = shellstart.tv_sec;
-  return (self);
+  return (set_int_value (self, nval, integer_p (self) != 0));
 }
 
 static SHELL_VAR *
@@ -1303,18 +1370,11 @@ get_seconds (var)
      SHELL_VAR *var;
 {
   time_t time_since_start;
-  char *p;
   struct timeval tv;
 
   gettimeofday(&tv, NULL);
   time_since_start = tv.tv_sec - shell_start_time;
-  p = itos(seconds_value_assigned + time_since_start);
-
-  FREE (value_cell (var));
-
-  VSETATTR (var, att_integer);
-  var_setvalue (var, p);
-  return (var);
+  return (set_int_value (var, seconds_value_assigned + time_since_start, 1));
 }
 
 static SHELL_VAR *
@@ -1356,7 +1416,7 @@ assign_random (self, value, unused, key)
   sbrand (seedval);
   if (subshell_environment)
     seeded_subshell = getpid ();
-  return (self);
+  return (set_int_value (self, seedval, integer_p (self) != 0));
 }
 
 int
@@ -1384,16 +1444,9 @@ get_random (var)
      SHELL_VAR *var;
 {
   int rv;
-  char *p;
 
   rv = get_random_number ();
-  p = itos (rv);
-
-  FREE (value_cell (var));
-
-  VSETATTR (var, att_integer);
-  var_setvalue (var, p);
-  return (var);
+  return (set_int_value (var, rv, 1));
 }
 
 static SHELL_VAR *
@@ -1401,16 +1454,9 @@ get_urandom (var)
      SHELL_VAR *var;
 {
   u_bits32_t rv;
-  char *p;
 
   rv = get_urandom32 ();
-  p = itos (rv);
-
-  FREE (value_cell (var));
-
-  VSETATTR (var, att_integer);
-  var_setvalue (var, p);
-  return (var);
+  return (set_int_value (var, rv, 1));
 }
 
 static SHELL_VAR *
@@ -1425,7 +1471,7 @@ assign_lineno (var, value, unused, key)
   if (value == 0 || *value == '\0' || legal_number (value, &new_value) == 0)
     new_value = 0;
   line_number = line_number_base = new_value;
-  return var;
+  return (set_int_value (var, line_number, integer_p (var) != 0));
 }
 
 /* Function which returns the current line number. */
@@ -1433,14 +1479,10 @@ static SHELL_VAR *
 get_lineno (var)
      SHELL_VAR *var;
 {
-  char *p;
   int ln;
 
   ln = executing_line_number ();
-  p = itos (ln);
-  FREE (value_cell (var));
-  var_setvalue (var, p);
-  return (var);
+  return (set_int_value (var, ln, 0));
 }
 
 static SHELL_VAR *
@@ -1462,12 +1504,7 @@ static SHELL_VAR *
 get_subshell (var)
      SHELL_VAR *var;
 {
-  char *p;
-
-  p = itos (subshell_level);
-  FREE (value_cell (var));
-  var_setvalue (var, p);
-  return (var);
+  return (set_int_value (var, subshell_level, 0));
 }
 
 static SHELL_VAR *
@@ -1475,14 +1512,9 @@ get_epochseconds (var)
      SHELL_VAR *var;
 {
   intmax_t now;
-  char *p;
 
   now = NOW;
-  p = itos (now);
-
-  FREE (value_cell (var));
-  var_setvalue (var, p);
-  return (var);
+  return (set_int_value (var, now, 0));
 }
 
 static SHELL_VAR *
@@ -1490,7 +1522,6 @@ get_epochrealtime (var)
      SHELL_VAR *var;
 {
   char buf[32];
-  char *p;
   struct timeval tv;
 
   gettimeofday (&tv, NULL);
@@ -1498,10 +1529,7 @@ get_epochrealtime (var)
                                           locale_decpoint (),
                                           (unsigned)tv.tv_usec);
 
-  p = savestring (buf);
-  FREE (value_cell (var));
-  var_setvalue (var, p);
-  return (var);
+  return (set_string_value (var, buf, 0));
 }
 
 static SHELL_VAR *
@@ -1509,27 +1537,16 @@ get_bashpid (var)
      SHELL_VAR *var;
 {
   int pid;
-  char *p;
 
   pid = getpid ();
-  p = itos (pid);
-
-  FREE (value_cell (var));
-  VSETATTR (var, att_integer); /* XXX - was also att_readonly */
-  var_setvalue (var, p);
-  return (var);
+  return (set_int_value (var, pid, 1));
 }
 
 static SHELL_VAR *
 get_bash_argv0 (var)
      SHELL_VAR *var;
 {
-  char *p;
-
-  p = savestring (dollar_vars[0]);
-  FREE (value_cell (var));
-  var_setvalue (var, p);
-  return var;
+  return (set_string_value (var, dollar_vars[0], 0));
 }
 
 static char *static_shell_name = 0;
@@ -1574,16 +1591,8 @@ get_bash_command (var)
 {
   char *p;
 
-  if (the_printed_command_except_trap)
-    p = savestring (the_printed_command_except_trap);
-  else
-    {
-      p = (char *)xmalloc (1);
-      p[0] = '\0';
-    }
-  FREE (value_cell (var));
-  var_setvalue (var, p);
-  return (var);
+  p = the_printed_command_except_trap ? the_printed_command_except_trap : "";
+  return (set_string_value (var, p, 0));
 }
 
 #if defined (HISTORY)
@@ -1591,7 +1600,6 @@ static SHELL_VAR *
 get_histcmd (var)
      SHELL_VAR *var;
 {
-  char *p;
   int n;
 
   /* Do the same adjustment here we do in parse.y:prompt_history_number,
@@ -1602,10 +1610,7 @@ get_histcmd (var)
      already been saved to history and the history number incremented.
      Right now we use EXECUTING as the determinant. */
   n = history_number () - executing;
-  p = itos (n);
-  FREE (value_cell (var));
-  var_setvalue (var, p);
-  return (var);
+  return (set_int_value (var, n, 0));
 }
 #endif
 
@@ -1619,10 +1624,7 @@ get_comp_wordbreaks (var)
   if (rl_completer_word_break_characters == 0 && bash_readline_initialized == 0)
     enable_hostname_completion (perform_hostname_completion);
 
-  FREE (value_cell (var));
-  var_setvalue (var, savestring (rl_completer_word_break_characters));
-
-  return (var);
+  return (set_string_value (var, rl_completer_word_break_characters, 0));
 }
 
 /* When this function returns, rl_completer_word_break_characters points to
@@ -1636,7 +1638,7 @@ assign_comp_wordbreaks (self, value, unused, key)
 {
   if (rl_completer_word_break_characters &&
       rl_completer_word_break_characters != rl_basic_word_break_characters)
-    free (rl_completer_word_break_characters);
+    free ((void *)rl_completer_word_break_characters);
 
   rl_completer_word_break_characters = savestring (value);
   return self;
@@ -1858,13 +1860,8 @@ get_funcname (self)
      SHELL_VAR *self;
 {
 #if ! defined (ARRAY_VARS)
-  char *t;
   if (variable_context && this_shell_function)
-    {
-      FREE (value_cell (self));
-      t = savestring (this_shell_function->name);
-      var_setvalue (self, t);
-    }
+    return (set_string_value (self, this_shell_function->name, 0));
 #endif
   return (self);
 }
@@ -2375,7 +2372,7 @@ find_global_variable (name)
 
   var = var_lookup (name, global_variables);
   if (var && nameref_p (var))
-    var = find_variable_nameref (var);
+    var = find_variable_nameref (var); /* XXX - find_global_variable_noref? */
 
   if (var == 0)
     return ((SHELL_VAR *)NULL);
@@ -2527,7 +2524,7 @@ get_variable_value (var)
 /* Return the string value of a variable.  Return NULL if the variable
    doesn't exist.  Don't cons a new string.  This is a potential memory
    leak if the variable is found in the temporary environment, but doesn't
-   leak in practice.  Since    functions and variables have separate name
+   leak in practice.  Since functions and variables have separate name
    spaces, returns NULL if var_name is a shell function only. */
 char *
 get_string_value (var_name)
@@ -2847,7 +2844,7 @@ make_local_array_variable (name, flags)
      scope and discard anything that's invalid. */
   if (localvar_inherit && assoc_p (var))
     {
-      internal_warning ("%s: cannot inherit value from incompatible type", name);
+      internal_warning (_("%s: cannot inherit value from incompatible type"), name);
       VUNSETATTR (var, att_assoc);
       dispose_variable_value (var);
       array = array_create ();
@@ -2903,7 +2900,7 @@ make_local_assoc_variable (name, flags)
      scope and discard anything that's invalid. */
   if (localvar_inherit && array_p (var))
     {
-      internal_warning ("%s: cannot inherit value from incompatible type", name);
+      internal_warning (_("%s: cannot inherit value from incompatible type"), name);
       VUNSETATTR (var, att_array);
       dispose_variable_value (var);
       hash = assoc_create (ASSOC_HASH_BUCKETS);
@@ -3136,8 +3133,14 @@ bind_variable_internal (name, value, table, hflags, aflags)
              VUNSETATTR (tentry, att_nameref);
            }
          free (tname);
-          /* XXX - should it be aflags? */
-         entry = assign_array_element (newval, make_variable_value (entry, value, aflags), aflags|ASS_NAMEREF);
+
+         /* entry == nameref variable; tentry == array variable;
+            newval == x[2]; value = bar
+            We don't need to call make_variable_value here, since
+            assign_array_element will eventually do it itself based on
+            newval and aflags. */
+
+         entry = assign_array_element (newval, value, aflags|ASS_NAMEREF, (array_eltstate_t *)0);
          if (entry == 0)
            return entry;
        }
@@ -3294,7 +3297,7 @@ bind_variable (name, value, flags)
                        return (bind_variable_internal (nv->name, value, nvc->table, 0, flags));
 #if defined (ARRAY_VARS)
                      else if (valid_array_reference (nameref_cell (nv), 0))
-                       return (assign_array_element (nameref_cell (nv), value, flags));
+                       return (assign_array_element (nameref_cell (nv), value, flags, (array_eltstate_t *)0));
                      else
 #endif
                      return (bind_variable_internal (nameref_cell (nv), value, nvc->table, 0, flags));
@@ -3427,14 +3430,24 @@ bind_int_variable (lhs, rhs, flags)
      int flags;
 {
   register SHELL_VAR *v;
-  int isint, isarr, implicitarray;
+  int isint, isarr, implicitarray, vflags, avflags;
 
   isint = isarr = implicitarray = 0;
 #if defined (ARRAY_VARS)
-  if (valid_array_reference (lhs, (flags & ASS_NOEXPAND) != 0))
+  /* Don't rely on VA_NOEXPAND being 1, set it explicitly */
+  vflags = (flags & ASS_NOEXPAND) ? VA_NOEXPAND : 0;
+  if (flags & ASS_ONEWORD)
+    vflags |= VA_ONEWORD;
+  if (valid_array_reference (lhs, vflags))
     {
       isarr = 1;
-      v = array_variable_part (lhs, (flags & ASS_NOEXPAND) != 0, (char **)0, (int *)0);
+      avflags = 0;
+      /* Common code to translate between assignment and reference flags. */
+      if (flags & ASS_NOEXPAND)
+       avflags |= AV_NOEXPAND;
+      if (flags & ASS_ONEWORD)
+       avflags |= AV_ONEWORD;
+      v = array_variable_part (lhs, avflags, (char **)0, (int *)0);
     }
   else if (legal_identifier (lhs) == 0)
     {
@@ -3457,7 +3470,7 @@ bind_int_variable (lhs, rhs, flags)
 
 #if defined (ARRAY_VARS)
   if (isarr)
-    v = assign_array_element (lhs, rhs, flags);
+    v = assign_array_element (lhs, rhs, flags, (array_eltstate_t *)0);
   else if (implicitarray)
     v = bind_array_variable (lhs, 0, rhs, 0);  /* XXX - check on flags */
   else
@@ -3478,14 +3491,15 @@ bind_int_variable (lhs, rhs, flags)
 }
 
 SHELL_VAR *
-bind_var_to_int (var, val)
+bind_var_to_int (var, val, flags)
      char *var;
      intmax_t val;
+     int flags;
 {
   char ibuf[INT_STRLEN_BOUND (intmax_t) + 1], *p;
 
   p = fmtulong (val, 10, ibuf, sizeof (ibuf), 0);
-  return (bind_int_variable (var, p, 0));
+  return (bind_int_variable (var, p, flags));
 }
 
 /* Do a function binding to a variable.  You pass the name and
@@ -3605,6 +3619,7 @@ assign_in_env (word, flags)
       if (legal_identifier (name) == 0)
        {
          sh_invalidid (name);
+         free (name);
          return (0);
        }
   
@@ -3827,6 +3842,34 @@ unbind_variable_noref (name)
   return 0;
 }
 
+int
+unbind_global_variable (name)
+     const char *name;
+{
+  SHELL_VAR *v, *nv;
+  int r;
+
+  v = var_lookup (name, global_variables);
+  /* This starts at the current scope, just like find_global_variable; should we
+     use find_global_variable_nameref here? */
+  nv = (v && nameref_p (v)) ? find_variable_nameref (v) : (SHELL_VAR *)NULL;
+
+  r = nv ? makunbound (nv->name, shell_variables) : makunbound (name, global_variables);
+  return r;
+}
+
+int
+unbind_global_variable_noref (name)
+     const char *name;
+{
+  SHELL_VAR *v;
+
+  v = var_lookup (name, global_variables);
+  if (v)
+    return makunbound (name, global_variables);
+  return 0;
+}
 int
 check_unbind_variable (name)
      const char *name;
@@ -4708,16 +4751,22 @@ flush_temporary_env ()
 /* **************************************************************** */
 
 static inline char *
-mk_env_string (name, value, isfunc)
+mk_env_string (name, value, attributes)
      const char *name, *value;
-     int isfunc;
+     int attributes;
 {
   size_t name_len, value_len;
   char *p, *q, *t;
+  int isfunc, isarray;
 
   name_len = strlen (name);
   value_len = STRLEN (value);
 
+  isfunc = attributes & att_function;
+#if defined (ARRAY_VARS) && defined (ARRAY_EXPORT)
+  isarray = attributes & (att_array|att_assoc);
+#endif
+
   /* If we are exporting a shell function, construct the encoded function
      name. */
   if (isfunc && value)
@@ -4731,6 +4780,39 @@ mk_env_string (name, value, isfunc)
       memcpy (q, BASHFUNC_SUFFIX, BASHFUNC_SUFFLEN);
       q += BASHFUNC_SUFFLEN;
     }
+#if defined (ARRAY_VARS) && defined (ARRAY_EXPORT)
+  else if (isarray && value)
+    {
+      if (attributes & att_assoc)
+       p = (char *)xmalloc (BASHASSOC_PREFLEN + name_len + BASHASSOC_SUFFLEN + value_len + 2);
+      else
+       p = (char *)xmalloc (BASHARRAY_PREFLEN + name_len + BASHARRAY_SUFFLEN + value_len + 2);
+      q = p;
+      if (attributes & att_assoc)
+       {
+         memcpy (q, BASHASSOC_PREFIX, BASHASSOC_PREFLEN);
+         q += BASHASSOC_PREFLEN;
+       }
+      else
+       {
+         memcpy (q, BASHARRAY_PREFIX, BASHARRAY_PREFLEN);
+         q += BASHARRAY_PREFLEN;
+       }
+      memcpy (q, name, name_len);
+      q += name_len;
+      /* These are actually the same currently */
+      if (attributes & att_assoc)
+        {
+         memcpy (q, BASHASSOC_SUFFIX, BASHASSOC_SUFFLEN);
+         q += BASHARRAY_SUFFLEN;
+        }
+      else
+        {
+         memcpy (q, BASHARRAY_SUFFIX, BASHARRAY_SUFFLEN);
+         q += BASHARRAY_SUFFLEN;
+        }
+    }
+#endif  
   else
     {
       p = (char *)xmalloc (2 + name_len + value_len);
@@ -4795,6 +4877,12 @@ valid_exportstr (v)
 }
 #endif
 
+#if defined (ARRAY_VARS)
+#  define USE_EXPORTSTR (value == var->exportstr && array_p (var) == 0 && assoc_p (var) == 0)
+#else
+#  define USE_EXPORTSTR (value == var->exportstr)
+#endif
+
 static char **
 make_env_array_from_var_list (vars)
      SHELL_VAR **vars;
@@ -4805,8 +4893,6 @@ make_env_array_from_var_list (vars)
 
   list = strvec_create ((1 + strvec_len ((char **)vars)));
 
-#define USE_EXPORTSTR (value == var->exportstr)
-
   for (i = 0, list_index = 0; var = vars[i]; i++)
     {
 #if defined (__CYGWIN__)
@@ -4833,11 +4919,11 @@ make_env_array_from_var_list (vars)
        continue;       /* XXX array vars cannot yet be exported */
 #  endif /* ARRAY_EXPORT */
       else if (assoc_p (var))
-#  if 0
+#  if ARRAY_EXPORT
        value = assoc_to_assign (assoc_cell (var), 0);
 #  else
        continue;       /* XXX associative array vars cannot yet be exported */
-#  endif
+#  endif /* ARRAY_EXPORT */
 #endif
       else
        value = value_cell (var);
@@ -4847,18 +4933,17 @@ make_env_array_from_var_list (vars)
          /* Gee, I'd like to get away with not using savestring() if we're
             using the cached exportstr... */
          list[list_index] = USE_EXPORTSTR ? savestring (value)
-                                          : mk_env_string (var->name, value, function_p (var));
+                                          : mk_env_string (var->name, value, var->attributes);
+
          if (USE_EXPORTSTR == 0)
            SAVE_EXPORTSTR (var, list[list_index]);
 
          list_index++;
 #undef USE_EXPORTSTR
 
-#if 0  /* not yet */
-#if defined (ARRAY_VARS)
+#if defined (ARRAY_VARS) && defined (ARRAY_EXPORT)
          if (array_p (var) || assoc_p (var))
            free (value);
-#endif
 #endif
        }
     }
@@ -5344,10 +5429,8 @@ pop_var_context ()
     internal_error (_("pop_var_context: no global_variables context"));
 }
 
-/* Delete the HASH_TABLEs for all variable contexts beginning at VCXT, and
-   all of the VAR_CONTEXTs except GLOBAL_VARIABLES. */
-void
-delete_all_contexts (vcxt)
+static void
+delete_local_contexts (vcxt)
      VAR_CONTEXT *vcxt;
 {
   VAR_CONTEXT *v, *t;
@@ -5356,12 +5439,30 @@ delete_all_contexts (vcxt)
     {
       t = v->down;
       dispose_var_context (v);
-    }    
+    }
+}
 
+/* Delete the HASH_TABLEs for all variable contexts beginning at VCXT, and
+   all of the VAR_CONTEXTs except GLOBAL_VARIABLES. */
+void
+delete_all_contexts (vcxt)
+     VAR_CONTEXT *vcxt;
+{
+  delete_local_contexts (vcxt);
   delete_all_variables (global_variables->table);
   shell_variables = global_variables;
 }
 
+/* Reset the context so we are not executing in a shell function. Only call
+   this if you are getting ready to exit the shell. */
+void
+reset_local_contexts ()
+{
+  delete_local_contexts (shell_variables);
+  shell_variables = global_variables;
+  variable_context = 0;
+}
+
 /* **************************************************************** */
 /*                                                                 */
 /*        Pushing and Popping temporary variable scopes            */
@@ -5670,7 +5771,7 @@ pop_args ()
   GET_ARRAY_FROM_VAR ("BASH_ARGV", bash_argv_v, bash_argv_a);
   GET_ARRAY_FROM_VAR ("BASH_ARGC", bash_argc_v, bash_argc_a);
 
-  ce = array_shift (bash_argc_a, 1, 0);
+  ce = array_unshift_element (bash_argc_a);
   if (ce == 0 || legal_number (element_value (ce), &i) == 0)
     i = 0;
 
@@ -6279,19 +6380,27 @@ set_pipestatus_array (ps, nproc)
   /* Fast case */
   if (array_num_elements (a) == nproc && nproc == 1)
     {
+#ifndef ALT_ARRAY_IMPLEMENTATION
       ae = element_forw (a->head);
-      free (element_value (ae));
-      set_element_value (ae, itos (ps[0]));
+#else
+      ae = a->elements[0];
+#endif
+      ARRAY_ELEMENT_REPLACE (ae, itos (ps[0]));
     }
   else if (array_num_elements (a) <= nproc)
     {
       /* modify in array_num_elements members in place, then add */
+#ifndef ALT_ARRAY_IMPLEMENTATION
       ae = a->head;
+#endif
       for (i = 0; i < array_num_elements (a); i++)
        {
+#ifndef ALT_ARRAY_IMPLEMENTATION
          ae = element_forw (ae);
-         free (element_value (ae));
-         set_element_value (ae, itos (ps[i]));
+#else
+         ae = a->elements[i];
+#endif
+         ARRAY_ELEMENT_REPLACE (ae, itos (ps[i]));
        }
       /* add any more */
       for ( ; i < nproc; i++)
@@ -6302,13 +6411,32 @@ set_pipestatus_array (ps, nproc)
     }
   else
     {
+#ifndef ALT_ARRAY_IMPLEMENTATION
       /* deleting elements.  it's faster to rebuild the array. */        
       array_flush (a);
-      for (i = 0; ps[i] != -1; i++)
+      for (i = 0; i < nproc; i++)
        {
          t = inttostr (ps[i], tbuf, sizeof (tbuf));
          array_insert (a, i, t);
        }
+#else
+      /* deleting elements. replace the first NPROC, free the rest */
+      for (i = 0; i < nproc; i++)
+       {
+         ae = a->elements[i];
+         ARRAY_ELEMENT_REPLACE (ae, itos (ps[i]));
+       }
+      for ( ; i <= array_max_index (a); i++)
+       {
+         array_dispose_element (a->elements[i]);
+         a->elements[i] = (ARRAY_ELEMENT *)NULL;
+       }
+
+      /* bookkeeping usually taken care of by array_insert */
+      set_max_index (a, nproc - 1);
+      set_first_index (a, 0);
+      set_num_elements (a, nproc);
+#endif /* ALT_ARRAY_IMPLEMENTATION */
     }
 }
 
index c73eb4e52c04b5ccda7d4f3656ba2eda6343a3de..55f497de062736a0d052d0706709115bed48b32b 100644 (file)
@@ -1,6 +1,6 @@
 /* variables.h -- data structures for shell variables. */
 
-/* Copyright (C) 1987-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2022 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -320,7 +320,7 @@ extern char *make_variable_value PARAMS((SHELL_VAR *, char *, int));
 
 extern SHELL_VAR *bind_variable_value PARAMS((SHELL_VAR *, char *, int));
 extern SHELL_VAR *bind_int_variable PARAMS((char *, char *, int));
-extern SHELL_VAR *bind_var_to_int PARAMS((char *, intmax_t));
+extern SHELL_VAR *bind_var_to_int PARAMS((char *, intmax_t, int));
 
 extern int assign_in_env PARAMS((WORD_DESC *, int));
 
@@ -328,13 +328,17 @@ extern int unbind_variable PARAMS((const char *));
 extern int check_unbind_variable PARAMS((const char *));
 extern int unbind_nameref PARAMS((const char *));
 extern int unbind_variable_noref PARAMS((const char *));
+extern int unbind_global_variable PARAMS((const char *));
+extern int unbind_global_variable_noref PARAMS((const char *));
 extern int unbind_func PARAMS((const char *));
 extern int unbind_function_def PARAMS((const char *));
 extern int delete_var PARAMS((const char *, VAR_CONTEXT *));
 extern int makunbound PARAMS((const char *, VAR_CONTEXT *));
 extern int kill_local_variable PARAMS((const char *));
+
 extern void delete_all_variables PARAMS((HASH_TABLE *));
 extern void delete_all_contexts PARAMS((VAR_CONTEXT *));
+extern void reset_local_contexts PARAMS((void));
 
 extern VAR_CONTEXT *new_var_context PARAMS((char *, int));
 extern void dispose_var_context PARAMS((VAR_CONTEXT *));
index 8c1568ae4bc94b3a003c048de18aebab796becea..94c85bd22248d263d2f760b1da55e98e6f54358c 100644 (file)
--- a/version.c
+++ b/version.c
@@ -1,6 +1,6 @@
 /* version.c -- distribution and version numbers. */
 
-/* Copyright (C) 1989-2020 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2022 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -43,7 +43,7 @@ const char * const release_status = (char *)0;
 #endif
 const char * const sccs_version = SCCSVERSION;
 
-const char * const bash_copyright = N_("Copyright (C) 2020 Free Software Foundation, Inc.");
+const char * const bash_copyright = N_("Copyright (C) 2022 Free Software Foundation, Inc.");
 const char * const bash_license = N_("License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n");
 
 /* If == 31, shell compatible with bash-3.1, == 32 with bash-3.2, and so on */
diff --git a/y.tab.c b/y.tab.c
index 78b38250bd75b72fe818506bc5fa6a74a3eea2ef..32b4c7c1dd7fd0505c700d21ed1c11469bf42f5f 100644 (file)
--- a/y.tab.c
+++ b/y.tab.c
@@ -1,8 +1,8 @@
-/* A Bison parser, made by GNU Bison 3.6.4.  */
+/* A Bison parser, made by GNU Bison 3.8.2.  */
 
 /* Bison implementation for Yacc-like parsers in C
 
-   Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation,
+   Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation,
    Inc.
 
    This program is free software: you can redistribute it and/or modify
@@ -16,7 +16,7 @@
    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/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* As a special exception, you may create a larger work that contains
    part or all of the Bison parser skeleton and distribute that work
    define necessary library symbols; they are noted "INFRINGES ON
    USER NAME SPACE" below.  */
 
-/* Identify Bison output.  */
-#define YYBISON 1
+/* Identify Bison output, and Bison version.  */
+#define YYBISON 30802
 
-/* Bison version.  */
-#define YYBISON_VERSION "3.6.4"
+/* Bison version string.  */
+#define YYBISON_VERSION "3.8.2"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
@@ -67,7 +67,7 @@
 
 
 /* First part of user prologue.  */
-#line 21 "/Users/chet/src/bash/src/parse.y"
+#line 21 "/usr/local/src/chet/src/bash/src/parse.y"
 
 #include "config.h"
 
@@ -164,11 +164,24 @@ typedef void *alias_t;
 #  define MBTEST(x)    ((x))
 #endif
 
+#define EXTEND_SHELL_INPUT_LINE_PROPERTY() \
+do { \
+    if (shell_input_line_len + 2 > shell_input_line_propsize) \
+      { \
+       shell_input_line_propsize = shell_input_line_len + 2; \
+       shell_input_line_property = (char *)xrealloc (shell_input_line_property, \
+                                   shell_input_line_propsize); \
+      } \
+} while (0)
+
 #if defined (EXTENDED_GLOB)
 extern int extended_glob;
 #endif
 
+#if defined (TRANSLATABLE_STRINGS)
 extern int dump_translatable_strings, dump_po_strings;
+extern int singlequote_translations;
+#endif /* TRANSLATABLE_STRINGS */
 
 #if !defined (errno)
 extern int errno;
@@ -194,7 +207,6 @@ static int yy_readline_unget PARAMS((int));
 
 static int yy_string_get PARAMS((void));
 static int yy_string_unget PARAMS((int));
-static void rewind_input_string PARAMS((void));
 static int yy_stream_get PARAMS((void));
 static int yy_stream_unget PARAMS((int));
 
@@ -202,11 +214,9 @@ static int shell_getc PARAMS((int));
 static void shell_ungetc PARAMS((int));
 static void discard_until PARAMS((int));
 
-#if defined (ALIAS) || defined (DPAREN_ARITHMETIC)
 static void push_string PARAMS((char *, int, alias_t *));
 static void pop_string PARAMS((void));
 static void free_string_list PARAMS((void));
-#endif
 
 static char *read_a_line PARAMS((int));
 
@@ -250,7 +260,7 @@ static void print_offending_line PARAMS((void));
 static void report_syntax_error PARAMS((char *));
 
 static void handle_eof_input_unit PARAMS((void));
-static void prompt_again PARAMS((void));
+static void prompt_again PARAMS((int));
 #if 0
 static void reset_readline_prompt PARAMS((void));
 #endif
@@ -374,7 +384,7 @@ static REDIRECTEE redir;
 static FILE *yyoutstream;
 static FILE *yyerrstream;
 
-#line 378 "y.tab.c"
+#line 388 "y.tab.c"
 
 # ifndef YY_CAST
 #  ifdef __cplusplus
@@ -464,11 +474,13 @@ extern int yydebug;
     LESS_GREATER = 301,            /* LESS_GREATER  */
     GREATER_BAR = 302,             /* GREATER_BAR  */
     BAR_AND = 303,                 /* BAR_AND  */
-    yacc_EOF = 304                 /* yacc_EOF  */
+    DOLPAREN = 304,                /* DOLPAREN  */
+    yacc_EOF = 305                 /* yacc_EOF  */
   };
   typedef enum yytokentype yytoken_kind_t;
 #endif
 /* Token kinds.  */
+#define YYEMPTY -2
 #define YYEOF 0
 #define YYerror 256
 #define YYUNDEF 257
@@ -518,13 +530,14 @@ extern int yydebug;
 #define LESS_GREATER 301
 #define GREATER_BAR 302
 #define BAR_AND 303
-#define yacc_EOF 304
+#define DOLPAREN 304
+#define yacc_EOF 305
 
 /* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 union YYSTYPE
 {
-#line 328 "/Users/chet/src/bash/src/parse.y"
+#line 338 "/usr/local/src/chet/src/bash/src/parse.y"
 
   WORD_DESC *word;             /* the word that we read. */
   int number;                  /* the number that we read. */
@@ -534,7 +547,7 @@ union YYSTYPE
   ELEMENT element;
   PATTERN_LIST *pattern;
 
-#line 538 "y.tab.c"
+#line 551 "y.tab.c"
 
 };
 typedef union YYSTYPE YYSTYPE;
@@ -545,8 +558,10 @@ typedef union YYSTYPE YYSTYPE;
 
 extern YYSTYPE yylval;
 
+
 int yyparse (void);
 
+
 #endif /* !YY_YY_Y_TAB_H_INCLUDED  */
 /* Symbol kind.  */
 enum yysymbol_kind_t
@@ -601,56 +616,57 @@ enum yysymbol_kind_t
   YYSYMBOL_LESS_GREATER = 46,              /* LESS_GREATER  */
   YYSYMBOL_GREATER_BAR = 47,               /* GREATER_BAR  */
   YYSYMBOL_BAR_AND = 48,                   /* BAR_AND  */
-  YYSYMBOL_49_ = 49,                       /* '&'  */
-  YYSYMBOL_50_ = 50,                       /* ';'  */
-  YYSYMBOL_51_n_ = 51,                     /* '\n'  */
-  YYSYMBOL_yacc_EOF = 52,                  /* yacc_EOF  */
-  YYSYMBOL_53_ = 53,                       /* '|'  */
-  YYSYMBOL_54_ = 54,                       /* '>'  */
-  YYSYMBOL_55_ = 55,                       /* '<'  */
-  YYSYMBOL_56_ = 56,                       /* '-'  */
-  YYSYMBOL_57_ = 57,                       /* '{'  */
-  YYSYMBOL_58_ = 58,                       /* '}'  */
-  YYSYMBOL_59_ = 59,                       /* '('  */
-  YYSYMBOL_60_ = 60,                       /* ')'  */
-  YYSYMBOL_YYACCEPT = 61,                  /* $accept  */
-  YYSYMBOL_inputunit = 62,                 /* inputunit  */
-  YYSYMBOL_word_list = 63,                 /* word_list  */
-  YYSYMBOL_redirection = 64,               /* redirection  */
-  YYSYMBOL_simple_command_element = 65,    /* simple_command_element  */
-  YYSYMBOL_redirection_list = 66,          /* redirection_list  */
-  YYSYMBOL_simple_command = 67,            /* simple_command  */
-  YYSYMBOL_command = 68,                   /* command  */
-  YYSYMBOL_shell_command = 69,             /* shell_command  */
-  YYSYMBOL_for_command = 70,               /* for_command  */
-  YYSYMBOL_arith_for_command = 71,         /* arith_for_command  */
-  YYSYMBOL_select_command = 72,            /* select_command  */
-  YYSYMBOL_case_command = 73,              /* case_command  */
-  YYSYMBOL_function_def = 74,              /* function_def  */
-  YYSYMBOL_function_body = 75,             /* function_body  */
-  YYSYMBOL_subshell = 76,                  /* subshell  */
-  YYSYMBOL_coproc = 77,                    /* coproc  */
-  YYSYMBOL_if_command = 78,                /* if_command  */
-  YYSYMBOL_group_command = 79,             /* group_command  */
-  YYSYMBOL_arith_command = 80,             /* arith_command  */
-  YYSYMBOL_cond_command = 81,              /* cond_command  */
-  YYSYMBOL_elif_clause = 82,               /* elif_clause  */
-  YYSYMBOL_case_clause = 83,               /* case_clause  */
-  YYSYMBOL_pattern_list = 84,              /* pattern_list  */
-  YYSYMBOL_case_clause_sequence = 85,      /* case_clause_sequence  */
-  YYSYMBOL_pattern = 86,                   /* pattern  */
-  YYSYMBOL_list = 87,                      /* list  */
-  YYSYMBOL_compound_list = 88,             /* compound_list  */
-  YYSYMBOL_list0 = 89,                     /* list0  */
-  YYSYMBOL_list1 = 90,                     /* list1  */
-  YYSYMBOL_simple_list_terminator = 91,    /* simple_list_terminator  */
-  YYSYMBOL_list_terminator = 92,           /* list_terminator  */
-  YYSYMBOL_newline_list = 93,              /* newline_list  */
-  YYSYMBOL_simple_list = 94,               /* simple_list  */
-  YYSYMBOL_simple_list1 = 95,              /* simple_list1  */
-  YYSYMBOL_pipeline_command = 96,          /* pipeline_command  */
-  YYSYMBOL_pipeline = 97,                  /* pipeline  */
-  YYSYMBOL_timespec = 98                   /* timespec  */
+  YYSYMBOL_DOLPAREN = 49,                  /* DOLPAREN  */
+  YYSYMBOL_50_ = 50,                       /* '&'  */
+  YYSYMBOL_51_ = 51,                       /* ';'  */
+  YYSYMBOL_52_n_ = 52,                     /* '\n'  */
+  YYSYMBOL_yacc_EOF = 53,                  /* yacc_EOF  */
+  YYSYMBOL_54_ = 54,                       /* '|'  */
+  YYSYMBOL_55_ = 55,                       /* '>'  */
+  YYSYMBOL_56_ = 56,                       /* '<'  */
+  YYSYMBOL_57_ = 57,                       /* '-'  */
+  YYSYMBOL_58_ = 58,                       /* '{'  */
+  YYSYMBOL_59_ = 59,                       /* '}'  */
+  YYSYMBOL_60_ = 60,                       /* '('  */
+  YYSYMBOL_61_ = 61,                       /* ')'  */
+  YYSYMBOL_YYACCEPT = 62,                  /* $accept  */
+  YYSYMBOL_inputunit = 63,                 /* inputunit  */
+  YYSYMBOL_word_list = 64,                 /* word_list  */
+  YYSYMBOL_redirection = 65,               /* redirection  */
+  YYSYMBOL_simple_command_element = 66,    /* simple_command_element  */
+  YYSYMBOL_redirection_list = 67,          /* redirection_list  */
+  YYSYMBOL_simple_command = 68,            /* simple_command  */
+  YYSYMBOL_command = 69,                   /* command  */
+  YYSYMBOL_shell_command = 70,             /* shell_command  */
+  YYSYMBOL_for_command = 71,               /* for_command  */
+  YYSYMBOL_arith_for_command = 72,         /* arith_for_command  */
+  YYSYMBOL_select_command = 73,            /* select_command  */
+  YYSYMBOL_case_command = 74,              /* case_command  */
+  YYSYMBOL_function_def = 75,              /* function_def  */
+  YYSYMBOL_function_body = 76,             /* function_body  */
+  YYSYMBOL_subshell = 77,                  /* subshell  */
+  YYSYMBOL_comsub = 78,                    /* comsub  */
+  YYSYMBOL_coproc = 79,                    /* coproc  */
+  YYSYMBOL_if_command = 80,                /* if_command  */
+  YYSYMBOL_group_command = 81,             /* group_command  */
+  YYSYMBOL_arith_command = 82,             /* arith_command  */
+  YYSYMBOL_cond_command = 83,              /* cond_command  */
+  YYSYMBOL_elif_clause = 84,               /* elif_clause  */
+  YYSYMBOL_case_clause = 85,               /* case_clause  */
+  YYSYMBOL_pattern_list = 86,              /* pattern_list  */
+  YYSYMBOL_case_clause_sequence = 87,      /* case_clause_sequence  */
+  YYSYMBOL_pattern = 88,                   /* pattern  */
+  YYSYMBOL_compound_list = 89,             /* compound_list  */
+  YYSYMBOL_list0 = 90,                     /* list0  */
+  YYSYMBOL_list1 = 91,                     /* list1  */
+  YYSYMBOL_simple_list_terminator = 92,    /* simple_list_terminator  */
+  YYSYMBOL_list_terminator = 93,           /* list_terminator  */
+  YYSYMBOL_newline_list = 94,              /* newline_list  */
+  YYSYMBOL_simple_list = 95,               /* simple_list  */
+  YYSYMBOL_simple_list1 = 96,              /* simple_list1  */
+  YYSYMBOL_pipeline_command = 97,          /* pipeline_command  */
+  YYSYMBOL_pipeline = 98,                  /* pipeline  */
+  YYSYMBOL_timespec = 99                   /* timespec  */
 };
 typedef enum yysymbol_kind_t yysymbol_kind_t;
 
@@ -694,6 +710,18 @@ typedef int_least16_t yytype_int16;
 typedef short yytype_int16;
 #endif
 
+/* Work around bug in HP-UX 11.23, which defines these macros
+   incorrectly for preprocessor constants.  This workaround can likely
+   be removed in 2023, as HPE has promised support for HP-UX 11.23
+   (aka HP-UX 11i v2) only through the end of 2022; see Table 2 of
+   <https://h20195.www2.hpe.com/V2/getpdf.aspx/4AA4-7673ENW.pdf>.  */
+#ifdef __hpux
+# undef UINT_LEAST8_MAX
+# undef UINT_LEAST16_MAX
+# define UINT_LEAST8_MAX 255
+# define UINT_LEAST16_MAX 65535
+#endif
+
 #if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__
 typedef __UINT_LEAST8_TYPE__ yytype_uint8;
 #elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \
@@ -791,17 +819,23 @@ typedef int yy_state_fast_t;
 
 /* Suppress unused-variable warnings by "using" E.  */
 #if ! defined lint || defined __GNUC__
-# define YYUSE(E) ((void) (E))
+# define YY_USE(E) ((void) (E))
 #else
-# define YYUSE(E) /* empty */
+# define YY_USE(E) /* empty */
 #endif
 
-#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
 /* Suppress an incorrect diagnostic about yylval being uninitialized.  */
-# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN                            \
+#if defined __GNUC__ && ! defined __ICC && 406 <= __GNUC__ * 100 + __GNUC_MINOR__
+# if __GNUC__ * 100 + __GNUC_MINOR__ < 407
+#  define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN                           \
+    _Pragma ("GCC diagnostic push")                                     \
+    _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")
+# else
+#  define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN                           \
     _Pragma ("GCC diagnostic push")                                     \
     _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")              \
     _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
+# endif
 # define YY_IGNORE_MAYBE_UNINITIALIZED_END      \
     _Pragma ("GCC diagnostic pop")
 #else
@@ -958,20 +992,21 @@ union yyalloc
 #endif /* !YYCOPY_NEEDED */
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  118
+#define YYFINAL  121
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   661
+#define YYLAST   740
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  61
+#define YYNTOKENS  62
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  38
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  172
+#define YYNRULES  174
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  346
+#define YYNSTATES  349
 
-#define YYMAXUTOK   304
+/* YYMAXUTOK -- Last valid token kind.  */
+#define YYMAXUTOK   305
 
 
 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
@@ -986,18 +1021,18 @@ union yyalloc
 static const yytype_int8 yytranslate[] =
 {
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-      51,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+      52,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,    49,     2,
-      59,    60,     2,     2,     2,    56,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,    50,
-      55,     2,    54,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,    50,     2,
+      60,    61,     2,     2,     2,    57,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,    51,
+      56,     2,    55,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,    57,    53,    58,     2,     2,     2,     2,
+       2,     2,     2,    58,    54,    59,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -1015,31 +1050,31 @@ static const yytype_int8 yytranslate[] =
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
       35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    52
+      45,    46,    47,    48,    49,    53
 };
 
 #if YYDEBUG
-  /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
+/* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_int16 yyrline[] =
 {
-       0,   381,   381,   392,   401,   416,   433,   443,   445,   449,
-     455,   461,   467,   473,   479,   485,   491,   497,   503,   509,
-     515,   521,   527,   533,   539,   546,   553,   560,   567,   574,
-     581,   587,   593,   599,   605,   611,   617,   623,   629,   635,
-     641,   647,   653,   659,   665,   671,   677,   683,   689,   695,
-     701,   707,   713,   721,   723,   725,   729,   733,   744,   746,
-     750,   752,   754,   770,   772,   776,   778,   780,   782,   784,
-     786,   788,   790,   792,   794,   796,   800,   805,   810,   815,
-     820,   825,   830,   835,   842,   848,   854,   860,   868,   873,
-     878,   883,   888,   893,   898,   903,   910,   915,   920,   927,
-     929,   931,   933,   937,   939,   970,   977,   982,   999,  1004,
-    1021,  1028,  1030,  1032,  1037,  1041,  1045,  1049,  1051,  1053,
-    1057,  1058,  1062,  1064,  1066,  1068,  1072,  1074,  1076,  1078,
-    1080,  1082,  1086,  1088,  1097,  1105,  1106,  1112,  1113,  1120,
-    1124,  1126,  1128,  1135,  1137,  1139,  1143,  1144,  1147,  1149,
-    1151,  1155,  1156,  1165,  1178,  1194,  1209,  1211,  1213,  1220,
-    1223,  1227,  1229,  1235,  1241,  1261,  1284,  1286,  1309,  1313,
-    1315,  1317,  1319
+       0,   395,   395,   406,   414,   423,   438,   455,   465,   467,
+     471,   477,   483,   489,   495,   501,   507,   513,   519,   525,
+     531,   537,   543,   549,   555,   561,   568,   575,   582,   589,
+     596,   603,   609,   615,   621,   627,   633,   639,   645,   651,
+     657,   663,   669,   675,   681,   687,   693,   699,   705,   711,
+     717,   723,   729,   735,   743,   745,   747,   751,   755,   766,
+     768,   772,   774,   776,   792,   794,   798,   800,   802,   804,
+     806,   808,   810,   812,   814,   816,   818,   822,   827,   832,
+     837,   842,   847,   852,   857,   864,   870,   876,   882,   890,
+     895,   900,   905,   910,   915,   920,   925,   932,   937,   942,
+     949,   951,   953,   955,   959,   961,   992,   999,  1003,  1009,
+    1014,  1031,  1036,  1053,  1060,  1062,  1064,  1069,  1073,  1077,
+    1081,  1083,  1085,  1089,  1090,  1094,  1096,  1098,  1100,  1104,
+    1106,  1108,  1110,  1112,  1114,  1118,  1120,  1129,  1135,  1141,
+    1142,  1149,  1153,  1155,  1157,  1164,  1166,  1173,  1177,  1178,
+    1181,  1183,  1185,  1189,  1190,  1199,  1214,  1232,  1249,  1251,
+    1253,  1260,  1263,  1267,  1269,  1275,  1281,  1301,  1324,  1326,
+    1349,  1353,  1355,  1357,  1359
 };
 #endif
 
@@ -1063,18 +1098,18 @@ static const char *const yytname[] =
   "AND_AND", "OR_OR", "GREATER_GREATER", "LESS_LESS", "LESS_AND",
   "LESS_LESS_LESS", "GREATER_AND", "SEMI_SEMI", "SEMI_AND",
   "SEMI_SEMI_AND", "LESS_LESS_MINUS", "AND_GREATER", "AND_GREATER_GREATER",
-  "LESS_GREATER", "GREATER_BAR", "BAR_AND", "'&'", "';'", "'\\n'",
-  "yacc_EOF", "'|'", "'>'", "'<'", "'-'", "'{'", "'}'", "'('", "')'",
-  "$accept", "inputunit", "word_list", "redirection",
+  "LESS_GREATER", "GREATER_BAR", "BAR_AND", "DOLPAREN", "'&'", "';'",
+  "'\\n'", "yacc_EOF", "'|'", "'>'", "'<'", "'-'", "'{'", "'}'", "'('",
+  "')'", "$accept", "inputunit", "word_list", "redirection",
   "simple_command_element", "redirection_list", "simple_command",
   "command", "shell_command", "for_command", "arith_for_command",
   "select_command", "case_command", "function_def", "function_body",
-  "subshell", "coproc", "if_command", "group_command", "arith_command",
-  "cond_command", "elif_clause", "case_clause", "pattern_list",
-  "case_clause_sequence", "pattern", "list", "compound_list", "list0",
-  "list1", "simple_list_terminator", "list_terminator", "newline_list",
-  "simple_list", "simple_list1", "pipeline_command", "pipeline",
-  "timespec", YY_NULLPTR
+  "subshell", "comsub", "coproc", "if_command", "group_command",
+  "arith_command", "cond_command", "elif_clause", "case_clause",
+  "pattern_list", "case_clause_sequence", "pattern", "compound_list",
+  "list0", "list1", "simple_list_terminator", "list_terminator",
+  "newline_list", "simple_list", "simple_list1", "pipeline_command",
+  "pipeline", "timespec", YY_NULLPTR
 };
 
 static const char *
@@ -1084,22 +1119,7 @@ yysymbol_name (yysymbol_kind_t yysymbol)
 }
 #endif
 
-#ifdef YYPRINT
-/* YYTOKNUM[NUM] -- (External) token number corresponding to the
-   (internal) symbol number NUM (which must be that of a token).  */
-static const yytype_int16 yytoknum[] =
-{
-       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
-     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
-     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
-     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
-     295,   296,   297,   298,   299,   300,   301,   302,   303,    38,
-      59,    10,   304,   124,    62,    60,    45,   123,   125,    40,
-      41
-};
-#endif
-
-#define YYPACT_NINF (-204)
+#define YYPACT_NINF (-152)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
@@ -1109,337 +1129,353 @@ static const yytype_int16 yytoknum[] =
 #define yytable_value_is_error(Yyn) \
   0
 
-  /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
-     STATE-NUM.  */
+/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+   STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-     313,   108,  -204,    -6,     8,     2,  -204,  -204,    10,   513,
-      17,   363,   153,   -21,  -204,   593,   606,  -204,    14,    26,
-     113,    41,   127,    72,    85,    92,    95,    98,  -204,  -204,
-     100,   105,  -204,  -204,    65,  -204,  -204,   551,  -204,   572,
-    -204,  -204,  -204,  -204,  -204,  -204,  -204,  -204,  -204,  -204,
-    -204,   146,   140,  -204,    67,   363,  -204,  -204,  -204,   133,
-     413,  -204,    93,    55,   104,   156,   161,    11,    45,   551,
-     572,   163,  -204,  -204,  -204,  -204,  -204,   167,  -204,   152,
-     208,   217,   129,   220,   150,   221,   223,   225,   233,   234,
-     238,   239,   158,   240,   162,   241,   243,   244,   252,   253,
-    -204,  -204,  -204,  -204,  -204,  -204,  -204,  -204,  -204,  -204,
-    -204,  -204,  -204,  -204,  -204,  -204,   194,   227,  -204,  -204,
-    -204,  -204,   572,  -204,  -204,  -204,  -204,  -204,   463,   463,
-    -204,  -204,  -204,  -204,  -204,  -204,  -204,    -7,  -204,    59,
-    -204,    52,  -204,  -204,  -204,  -204,    62,  -204,  -204,  -204,
-     235,   572,  -204,   572,   572,  -204,  -204,  -204,  -204,  -204,
-    -204,  -204,  -204,  -204,  -204,  -204,  -204,  -204,  -204,  -204,
-    -204,  -204,  -204,  -204,  -204,  -204,  -204,  -204,  -204,  -204,
-    -204,  -204,  -204,  -204,  -204,  -204,  -204,  -204,  -204,   413,
-     413,   191,   191,   245,   245,   203,  -204,  -204,  -204,  -204,
-    -204,  -204,    37,  -204,   176,  -204,   270,   228,    76,    79,
-    -204,   176,  -204,   278,   282,   563,  -204,   572,   572,   563,
-    -204,  -204,    67,    67,  -204,  -204,  -204,   291,   413,   413,
-     413,   413,   413,   294,   175,  -204,    28,  -204,  -204,   292,
-    -204,   187,  -204,   250,  -204,  -204,  -204,  -204,  -204,  -204,
-     295,   413,   187,  -204,   251,  -204,  -204,  -204,   563,  -204,
-     304,   314,  -204,  -204,  -204,   196,   196,   196,  -204,  -204,
-    -204,  -204,   179,    38,  -204,  -204,   296,   -28,   302,   274,
-    -204,  -204,  -204,    87,  -204,   318,   276,   322,   280,  -204,
-      -7,  -204,   111,  -204,  -204,  -204,  -204,  -204,  -204,  -204,
-    -204,    39,   319,  -204,  -204,  -204,   114,  -204,  -204,  -204,
-    -204,  -204,  -204,   115,  -204,  -204,   226,  -204,  -204,  -204,
-     413,  -204,  -204,   329,   288,  -204,  -204,   332,   297,  -204,
-    -204,  -204,   413,   338,   303,  -204,  -204,   339,   305,  -204,
-    -204,  -204,  -204,  -204,  -204,  -204
+     328,    80,  -152,   -11,    -1,     3,  -152,  -152,    15,   637,
+      -5,   433,   149,   -28,  -152,   187,   684,  -152,    18,    28,
+     130,    38,   139,    50,    52,    60,    65,    74,  -152,  -152,
+    -152,    89,   104,  -152,  -152,    97,  -152,  -152,   246,  -152,
+     670,  -152,  -152,  -152,  -152,  -152,  -152,  -152,  -152,  -152,
+    -152,  -152,  -152,   146,   211,  -152,     1,   433,  -152,  -152,
+     135,   484,  -152,    59,    61,    90,   167,   171,    10,    71,
+     246,   670,   144,  -152,  -152,  -152,  -152,  -152,   165,  -152,
+     142,   179,   192,   140,   194,   160,   227,   245,   252,   253,
+     260,   261,   262,   162,   269,   178,   270,   272,   273,   274,
+     277,  -152,  -152,  -152,  -152,  -152,  -152,  -152,  -152,  -152,
+    -152,  -152,  -152,  -152,  -152,   168,   379,  -152,  -152,   173,
+     244,  -152,  -152,  -152,  -152,   670,  -152,  -152,  -152,  -152,
+    -152,   535,   535,  -152,  -152,  -152,  -152,  -152,  -152,  -152,
+     205,  -152,    14,  -152,    36,  -152,  -152,  -152,  -152,    84,
+    -152,  -152,  -152,   249,   670,  -152,   670,   670,  -152,  -152,
+    -152,  -152,  -152,  -152,  -152,  -152,  -152,  -152,  -152,  -152,
+    -152,  -152,  -152,  -152,  -152,  -152,  -152,  -152,  -152,  -152,
+    -152,  -152,  -152,  -152,  -152,  -152,  -152,  -152,  -152,  -152,
+    -152,  -152,  -152,  -152,   484,   484,   203,   203,   586,   586,
+     145,  -152,  -152,  -152,  -152,  -152,  -152,     0,  -152,   119,
+    -152,   291,   248,    66,    88,  -152,   119,  -152,   296,   297,
+      35,  -152,   670,   670,    35,  -152,  -152,     1,     1,  -152,
+    -152,  -152,   306,   484,   484,   484,   484,   484,   305,   169,
+    -152,     7,  -152,  -152,   302,  -152,   131,  -152,   265,  -152,
+    -152,  -152,  -152,  -152,  -152,   304,   131,  -152,   266,  -152,
+    -152,  -152,    35,  -152,   313,   317,  -152,  -152,  -152,   225,
+     225,   225,  -152,  -152,  -152,  -152,   206,    25,  -152,  -152,
+     307,   -42,   319,   276,  -152,  -152,  -152,    95,  -152,   322,
+     283,   332,   284,  -152,  -152,   102,  -152,  -152,  -152,  -152,
+    -152,  -152,  -152,  -152,    45,   323,  -152,  -152,  -152,   106,
+    -152,  -152,  -152,  -152,  -152,  -152,   109,  -152,  -152,   264,
+    -152,  -152,  -152,   484,  -152,  -152,   333,   293,  -152,  -152,
+     338,   300,  -152,  -152,  -152,   484,   345,   303,  -152,  -152,
+     346,   309,  -152,  -152,  -152,  -152,  -152,  -152,  -152
 };
 
-  /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
-     Performed when YYTABLE does not specify something else to do.  Zero
-     means the default is an error.  */
+/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
+   Performed when YYTABLE does not specify something else to do.  Zero
+   means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       0,     0,   151,     0,     0,     0,   151,   151,     0,     0,
-       0,     0,   169,    53,    54,     0,     0,   115,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     3,     6,
-       0,     0,   151,   151,     0,    55,    58,    60,   168,    61,
-      65,    75,    69,    66,    63,    71,    64,    70,    72,    73,
-      74,     0,   153,   160,   161,     0,     4,     5,   135,     0,
-       0,   151,   151,     0,   151,     0,     0,     0,    53,   110,
-     106,     0,   149,   148,   150,   165,   162,   170,   171,     0,
+       0,     0,   153,     0,     0,     0,   153,   153,     0,     0,
+       0,     0,   171,    54,    55,     0,     0,   118,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   153,     4,
+       7,     0,     0,   153,   153,     0,    56,    59,    61,   170,
+      62,    66,    76,    70,    67,    64,    72,     3,    65,    71,
+      73,    74,    75,     0,   155,   162,   163,     0,     5,     6,
+       0,     0,   153,   153,     0,   153,     0,     0,     0,    54,
+     113,   109,     0,   151,   150,   152,   167,   164,   172,   173,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      15,    24,    39,    33,    48,    30,    42,    36,    45,    27,
-      51,    52,    21,    18,     9,    10,     0,     0,     1,    53,
-      59,    56,    62,   146,   147,     2,   151,   151,   154,   155,
-     151,   151,   164,   163,   151,   152,   134,   136,   145,     0,
-     151,     0,   151,   151,   151,   151,     0,   151,   151,   151,
-     151,   103,   101,   108,   107,   116,   172,   151,    17,    26,
-      41,    35,    50,    32,    44,    38,    47,    29,    23,    20,
-      13,    14,    16,    25,    40,    34,    49,    31,    43,    37,
-      46,    28,    22,    19,    11,    12,   114,   105,    57,     0,
-       0,   158,   159,     0,     0,     0,   151,   151,   151,   151,
-     151,   151,     0,   151,     0,   151,     0,     0,     0,     0,
-     151,     0,   151,     0,     0,     0,   151,   104,   109,     0,
-     156,   157,   167,   166,   151,   151,   111,     0,     0,     0,
-     138,   139,   137,     0,   120,   151,     0,   151,   151,     0,
-       7,     0,   151,     0,    86,    87,   151,   151,   151,   151,
-       0,     0,     0,   151,     0,    67,    68,   102,     0,    99,
-       0,     0,   113,   140,   141,   142,   143,   144,    98,   126,
-     128,   130,   121,     0,    96,   132,     0,     0,     0,     0,
-      76,     8,   151,     0,    77,     0,     0,     0,     0,    88,
-       0,   151,     0,    89,   100,   112,   151,   127,   129,   131,
-      97,     0,     0,   151,    78,    79,     0,   151,   151,    84,
-      85,    90,    91,     0,   151,   151,   117,   151,   133,   122,
-     123,   151,   151,     0,     0,   151,   151,     0,     0,   151,
-     119,   124,   125,     0,     0,    82,    83,     0,     0,    94,
-      95,   118,    80,    81,    92,    93
+       0,    16,    25,    40,    34,    49,    31,    43,    37,    46,
+      28,    52,    53,    22,    19,     0,     0,    10,    11,     0,
+       0,     1,    54,    60,    57,    63,   148,   149,     2,   153,
+     153,   156,   157,   153,   153,   166,   165,   153,   154,   137,
+     138,   147,     0,   153,     0,   153,   153,   153,   153,     0,
+     153,   153,   153,   153,   104,   102,   111,   110,   119,   174,
+     153,    18,    27,    42,    36,    51,    33,    45,    39,    48,
+      30,    24,    21,    14,    15,    17,    26,    41,    35,    50,
+      32,    44,    38,    47,    29,    23,    20,    12,    13,   107,
+     108,   117,   106,    58,     0,     0,   160,   161,     0,     0,
+       0,   153,   153,   153,   153,   153,   153,     0,   153,     0,
+     153,     0,     0,     0,     0,   153,     0,   153,     0,     0,
+       0,   153,   105,   112,     0,   158,   159,   169,   168,   153,
+     153,   114,     0,     0,     0,   140,   141,   139,     0,   123,
+     153,     0,   153,   153,     0,     8,     0,   153,     0,    87,
+      88,   153,   153,   153,   153,     0,     0,   153,     0,    68,
+      69,   103,     0,   100,     0,     0,   116,   142,   143,   144,
+     145,   146,    99,   129,   131,   133,   124,     0,    97,   135,
+       0,     0,     0,     0,    77,     9,   153,     0,    78,     0,
+       0,     0,     0,    89,   153,     0,    90,   101,   115,   153,
+     130,   132,   134,    98,     0,     0,   153,    79,    80,     0,
+     153,   153,    85,    86,    91,    92,     0,   153,   153,   120,
+     153,   136,   125,   126,   153,   153,     0,     0,   153,   153,
+       0,     0,   153,   122,   127,   128,     0,     0,    83,    84,
+       0,     0,    95,    96,   121,    81,    82,    93,    94
 };
 
-  /* YYPGOTO[NTERM-NUM].  */
+/* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -204,  -204,   117,   -37,   -19,   -67,   353,  -204,    -8,  -204,
-    -204,  -204,  -204,  -204,  -184,  -204,  -204,  -204,  -204,  -204,
-    -204,    53,  -204,   142,  -204,   102,  -203,    -2,  -204,   283,
-    -204,   -47,   -49,  -204,  -118,     6,    47,  -204
+    -152,  -152,   112,   -29,   -14,   -64,   360,  -152,    -8,  -152,
+    -152,  -152,  -152,  -152,  -151,  -152,  -152,  -152,  -152,  -152,
+    -152,  -152,    13,  -152,   136,  -152,    98,    -2,  -152,    30,
+    -152,   -54,   -26,  -152,  -123,     6,    78,  -152
 };
 
-  /* YYDEFGOTO[NTERM-NUM].  */
+/* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,    34,   241,    35,    36,   122,    37,    38,    39,    40,
-      41,    42,    43,    44,   152,    45,    46,    47,    48,    49,
-      50,   227,   233,   234,   235,   277,    58,   117,   136,   137,
-     125,    75,    60,    51,    52,   138,    54,    55
+       0,    35,   246,    36,    37,   125,    38,    39,    40,    41,
+      42,    43,    44,    45,   155,    46,    47,    48,    49,    50,
+      51,    52,   232,   238,   239,   240,   281,   120,   139,   140,
+     128,    76,    61,    53,    54,   141,    56,    57
 };
 
-  /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
-     positive, shift that token.  If negative, reduce the rule whose
-     number is the opposite.  If YYTABLE_NINF, syntax error.  */
+/* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
+   positive, shift that token.  If negative, reduce the rule whose
+   number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      59,    70,   121,   154,    65,    66,    53,   250,   132,   254,
-     191,   192,   139,   141,     2,   146,   144,    76,   120,     3,
-      61,     4,     5,     6,     7,   302,   196,   197,    64,    10,
-     116,   257,   303,   121,    62,   259,    67,   274,    79,    63,
-     100,    17,   198,   199,   200,   287,   288,   300,     2,    71,
-     120,   237,   101,     3,   275,     4,     5,     6,     7,   151,
-     153,   133,   149,    10,   275,   118,   203,   105,    32,   142,
-     150,   220,   221,   204,   294,    17,   210,   189,   190,   135,
-     201,   193,   194,   211,   217,   188,   218,   276,   135,   135,
-     246,   202,   302,   248,   238,   208,   209,   276,   109,   317,
-     215,   307,    32,   135,    33,    72,    73,    74,   219,   205,
-     135,   110,   143,   135,   121,   130,   121,   188,   111,   212,
-     131,   112,   337,   338,   113,   314,   114,   135,   321,   325,
-     135,   115,   195,   247,    53,    53,   249,   134,   135,   102,
-     206,   207,   103,   140,   308,   213,   214,   228,   229,   230,
-     231,   232,   236,   106,   145,   160,   107,   242,   161,    56,
-      57,   251,   135,   251,   253,   135,   135,   258,   315,   104,
-     147,   322,   326,   126,   127,   148,   164,    77,    78,   165,
-     188,   188,   155,   108,   174,   162,   273,   175,   178,   128,
-     129,   179,   156,   283,   282,    53,    53,   123,   124,   251,
-     251,   239,   240,   243,   292,   291,   166,   151,   224,   225,
-     226,   151,   157,   281,   176,   269,   270,   271,   180,   297,
-     298,   299,   260,   261,   126,   127,    72,    73,    74,   196,
-     197,   329,   225,   306,   158,   278,   279,    72,    73,    74,
-     222,   223,   313,   159,   285,   286,   163,   167,     2,   168,
-     151,   169,   186,     3,   320,     4,     5,     6,     7,   170,
-     171,     8,     9,    10,   172,   173,   177,   181,   332,   182,
-     183,    13,    14,    15,    16,    17,   251,   251,   184,   185,
-      18,    19,    20,    21,    22,   244,   245,   187,    23,    24,
-      25,    26,    27,   255,   316,   216,   135,   256,   262,    30,
-      31,   319,    32,   268,    33,   323,   324,   280,   284,   293,
-     289,   295,   327,   328,     1,   331,     2,   304,   296,   333,
-     334,     3,   275,     4,     5,     6,     7,   341,   252,     8,
-       9,    10,   305,   309,   310,    11,    12,   311,   312,    13,
-      14,    15,    16,    17,   335,   318,   336,   339,    18,    19,
-      20,    21,    22,   342,   344,   340,    23,    24,    25,    26,
-      27,   343,    69,   345,    28,    29,     2,    30,    31,   330,
-      32,     3,    33,     4,     5,     6,     7,   272,   301,     8,
-       9,    10,     0,     0,     0,    11,    12,     0,     0,    13,
-      14,    15,    16,    17,     0,     0,     0,     0,    18,    19,
-      20,    21,    22,     0,     0,     0,    23,    24,    25,    26,
-      27,     0,     0,    72,    73,    74,     2,    30,    31,     0,
-      32,     3,    33,     4,     5,     6,     7,     0,     0,     8,
+      60,    71,   116,   135,    66,    67,    55,   157,   196,   197,
+     147,   124,   305,     2,   242,    62,   278,    77,     3,   306,
+       4,     5,     6,     7,   123,    63,   115,    72,    10,    65,
+      64,   119,    80,   279,   303,   206,   142,   144,     2,   149,
+      17,    68,   124,     3,   101,     4,     5,     6,     7,   133,
+     208,   279,   138,    10,   102,   134,   123,   209,   243,   138,
+     154,   156,   152,   136,   106,    17,   138,   280,    33,   261,
+     153,   225,   226,   263,     2,   145,   110,   138,   111,     3,
+     251,     4,     5,     6,     7,   280,   112,   138,   138,    10,
+     222,   113,   223,    33,   210,    34,   193,   121,   215,   305,
+     114,    17,   253,   194,   195,   216,   320,   198,   199,   310,
+     143,   297,    73,    74,    75,   117,   317,   207,   138,   146,
+     324,   213,   214,   328,   252,   124,   220,   124,   193,    33,
+     118,    34,    58,    59,   224,   200,   138,    55,    55,   137,
+     138,   148,   217,   211,   212,   245,   254,   138,   218,   219,
+     229,   230,   231,   311,   138,   247,   103,   285,   138,   104,
+     318,   138,   257,   158,   325,   107,   163,   329,   108,   164,
+      73,    74,    75,    78,    79,   233,   234,   235,   236,   237,
+     241,   150,    73,    74,    75,   151,   167,   105,   177,   168,
+     159,   178,   286,   193,   193,   262,   109,   165,   126,   127,
+      55,    55,   294,   160,   181,   161,   244,   182,   248,   273,
+     274,   275,   154,   255,   277,   258,   154,   169,   162,   179,
+     166,   287,    81,    82,    83,    84,    85,   264,   265,   189,
+      86,   295,   191,    87,    88,   183,   129,   130,   201,   202,
+     282,   283,    89,    90,   129,   130,   300,   301,   302,   289,
+     290,   291,   292,   170,   154,   203,   204,   205,   201,   202,
+     309,   131,   132,   267,   268,   269,   270,   271,   316,   332,
+     230,   171,   122,    14,    15,    16,   227,   228,   172,   173,
+     323,    18,    19,    20,    21,    22,   174,   175,   176,    23,
+      24,    25,    26,    27,   335,   180,   184,   319,   185,   186,
+     187,    31,    32,   188,   322,   192,   249,   250,   326,   327,
+     221,   259,   260,   266,   272,   330,   331,   284,   334,   293,
+     298,   299,   336,   337,   288,   296,   340,   341,   256,     1,
+     344,     2,   333,   279,   307,   308,     3,   312,     4,     5,
+       6,     7,   313,   315,     8,     9,    10,   314,   338,   321,
+      11,    12,   339,   342,    13,    14,    15,    16,    17,   343,
+     345,   347,   346,    18,    19,    20,    21,    22,   348,    70,
+       0,    23,    24,    25,    26,    27,   276,    28,   304,     0,
+      29,    30,     2,    31,    32,     0,    33,     3,    34,     4,
+       5,     6,     7,     0,     0,     8,     9,    10,     0,     0,
+       0,    11,    12,     0,     0,    13,    14,    15,    16,    17,
+       0,     0,     0,     0,    18,    19,    20,    21,    22,     0,
+       0,     0,    23,    24,    25,    26,    27,     0,     0,     0,
+       0,   138,     0,     0,    31,    32,     2,    33,     0,    34,
+     190,     3,     0,     4,     5,     6,     7,     0,     0,     8,
        9,    10,     0,     0,     0,    11,    12,     0,     0,    13,
       14,    15,    16,    17,     0,     0,     0,     0,    18,    19,
       20,    21,    22,     0,     0,     0,    23,    24,    25,    26,
-      27,     0,     0,     0,   135,     0,     2,    30,    31,     0,
-      32,     3,    33,     4,     5,     6,     7,     0,     0,     8,
-       9,    10,     0,     0,     0,    11,    12,     0,     0,    13,
-      14,    15,    16,    17,     0,     0,     0,     0,    18,    19,
-      20,    21,    22,     0,     0,     0,    23,    24,    25,    26,
-      27,   263,   264,   265,   266,   267,     2,    30,    31,     0,
-      32,     3,    33,     4,     5,     6,     7,     0,     0,     0,
-       0,    10,     0,     0,   290,     0,     0,     0,     0,    68,
-      14,    15,    16,    17,     0,     0,     0,     0,    18,    19,
-      20,    21,    22,     0,     0,     0,    23,    24,    25,    26,
-      27,     0,     0,     0,     0,     0,     2,    30,    31,     0,
-      32,     3,    33,     4,     5,     6,     7,   119,    14,    15,
-      16,    10,     0,     0,     0,     0,    18,    19,    20,    21,
-      22,     0,     0,    17,    23,    24,    25,    26,    27,     0,
-      15,    16,     0,     0,     0,    30,    31,    18,    19,    20,
-      21,    22,     0,     0,   135,    23,    24,    25,    26,    27,
-      32,     0,    33,     0,     0,     0,    30,    31,    80,    81,
-      82,    83,    84,     0,     0,     0,    85,     0,     0,    86,
-      87,    90,    91,    92,    93,    94,     0,    88,    89,    95,
-       0,     0,    96,    97,     0,     0,     0,     0,     0,     0,
-      98,    99
+      27,     0,     0,     0,    73,    74,    75,     2,    31,    32,
+       0,    33,     3,    34,     4,     5,     6,     7,     0,     0,
+       8,     9,    10,     0,     0,     0,    11,    12,     0,     0,
+      13,    14,    15,    16,    17,     0,     0,     0,     0,    18,
+      19,    20,    21,    22,     0,     0,     0,    23,    24,    25,
+      26,    27,     0,     0,     0,     0,   138,     0,     2,    31,
+      32,     0,    33,     3,    34,     4,     5,     6,     7,     0,
+       0,     8,     9,    10,     0,     0,     0,    11,    12,     0,
+       0,    13,    14,    15,    16,    17,     0,     0,     0,     0,
+      18,    19,    20,    21,    22,     0,     0,     0,    23,    24,
+      25,    26,    27,     0,     0,     0,     0,     0,     0,     2,
+      31,    32,     0,    33,     3,    34,     4,     5,     6,     7,
+       0,     0,     8,     9,    10,     0,     0,     0,     0,     0,
+       0,     0,    13,    14,    15,    16,    17,     0,     0,     0,
+       0,    18,    19,    20,    21,    22,     0,     0,     0,    23,
+      24,    25,    26,    27,     0,     0,     0,     0,   138,     0,
+       2,    31,    32,     0,    33,     3,    34,     4,     5,     6,
+       7,     0,     0,     0,     0,    10,     0,     0,     0,     0,
+       0,     0,     0,    69,    14,    15,    16,    17,     0,     0,
+       0,     0,    18,    19,    20,    21,    22,     0,     0,     0,
+      23,    24,    25,    26,    27,     0,     0,     0,     0,     0,
+       0,     0,    31,    32,     0,    33,     0,    34,    15,    16,
+       0,     0,     0,     0,     0,    18,    19,    20,    21,    22,
+       0,     0,     0,    23,    24,    25,    26,    27,     0,    91,
+      92,    93,    94,    95,     0,    31,    32,    96,     0,     0,
+      97,    98,     0,     0,     0,     0,     0,     0,     0,    99,
+     100
 };
 
 static const yytype_int16 yycheck[] =
 {
-       2,     9,    39,    70,     6,     7,     0,   210,    55,   212,
-     128,   129,    61,    62,     3,    64,    63,    11,    37,     8,
-      26,    10,    11,    12,    13,    53,    33,    34,    26,    18,
-      32,   215,    60,    70,    26,   219,    26,     9,    59,    31,
-      26,    30,    49,    50,    51,   248,   249,     9,     3,    32,
-      69,    14,    26,     8,    26,    10,    11,    12,    13,    67,
-      68,    55,    51,    18,    26,     0,    14,    26,    57,    14,
-      59,   189,   190,    21,   258,    30,    14,   126,   127,    51,
-      21,   130,   131,    21,   151,   122,   153,    59,    51,    51,
-      14,   140,    53,    14,    57,   144,   145,    59,    26,    60,
-     149,    14,    57,    51,    59,    50,    51,    52,   157,    57,
-      51,    26,    57,    51,   151,    48,   153,   154,    26,    57,
-      53,    26,   325,   326,    26,    14,    26,    51,    14,    14,
-      51,    26,   134,    57,   128,   129,    57,     4,    51,    26,
-     142,   143,    29,    50,    57,   147,   148,   196,   197,   198,
-     199,   200,   201,    26,    50,    26,    29,   204,    29,    51,
-      52,   210,    51,   212,   211,    51,    51,   216,    57,    56,
-      14,    57,    57,    33,    34,    14,    26,    24,    25,    29,
-     217,   218,    19,    56,    26,    56,   235,    29,    26,    49,
-      50,    29,    25,   242,   241,   189,   190,    51,    52,   248,
-     249,   203,    26,   205,   253,   252,    56,   215,     5,     6,
-       7,   219,    60,    26,    56,    40,    41,    42,    56,    40,
-      41,    42,   224,   225,    33,    34,    50,    51,    52,    33,
-      34,     5,     6,   282,    26,   237,   238,    50,    51,    52,
-     193,   194,   291,    26,   246,   247,    26,    26,     3,    26,
-     258,    26,    58,     8,   303,    10,    11,    12,    13,    26,
-      26,    16,    17,    18,    26,    26,    26,    26,   317,    26,
-      26,    26,    27,    28,    29,    30,   325,   326,    26,    26,
-      35,    36,    37,    38,    39,    15,    58,    60,    43,    44,
-      45,    46,    47,    15,   296,    60,    51,    15,     7,    54,
-      55,   303,    57,     9,    59,   307,   308,    15,    58,    58,
-      15,     7,   314,   315,     1,   317,     3,    15,     4,   321,
-     322,     8,    26,    10,    11,    12,    13,   329,   211,    16,
-      17,    18,    58,    15,    58,    22,    23,    15,    58,    26,
-      27,    28,    29,    30,    15,    26,    58,    15,    35,    36,
-      37,    38,    39,    15,    15,    58,    43,    44,    45,    46,
-      47,    58,     9,    58,    51,    52,     3,    54,    55,   316,
-      57,     8,    59,    10,    11,    12,    13,   235,   276,    16,
-      17,    18,    -1,    -1,    -1,    22,    23,    -1,    -1,    26,
-      27,    28,    29,    30,    -1,    -1,    -1,    -1,    35,    36,
-      37,    38,    39,    -1,    -1,    -1,    43,    44,    45,    46,
-      47,    -1,    -1,    50,    51,    52,     3,    54,    55,    -1,
-      57,     8,    59,    10,    11,    12,    13,    -1,    -1,    16,
+       2,     9,    28,    57,     6,     7,     0,    71,   131,   132,
+      64,    40,    54,     3,    14,    26,     9,    11,     8,    61,
+      10,    11,    12,    13,    38,    26,    28,    32,    18,    26,
+      31,    33,    60,    26,     9,    21,    62,    63,     3,    65,
+      30,    26,    71,     8,    26,    10,    11,    12,    13,    48,
+      14,    26,    52,    18,    26,    54,    70,    21,    58,    52,
+      68,    69,    52,    57,    26,    30,    52,    60,    58,   220,
+      60,   194,   195,   224,     3,    14,    26,    52,    26,     8,
+      14,    10,    11,    12,    13,    60,    26,    52,    52,    18,
+     154,    26,   156,    58,    58,    60,   125,     0,    14,    54,
+      26,    30,    14,   129,   130,    21,    61,   133,   134,    14,
+      51,   262,    51,    52,    53,    26,    14,   143,    52,    58,
+      14,   147,   148,    14,    58,   154,   152,   156,   157,    58,
+      26,    60,    52,    53,   160,   137,    52,   131,   132,     4,
+      52,    51,    58,   145,   146,    26,    58,    52,   150,   151,
+       5,     6,     7,    58,    52,   209,    26,    26,    52,    29,
+      58,    52,   216,    19,    58,    26,    26,    58,    29,    29,
+      51,    52,    53,    24,    25,   201,   202,   203,   204,   205,
+     206,    14,    51,    52,    53,    14,    26,    57,    26,    29,
+      25,    29,   246,   222,   223,   221,    57,    57,    52,    53,
+     194,   195,   256,    61,    26,    26,   208,    29,   210,    40,
+      41,    42,   220,   215,   240,   217,   224,    57,    26,    57,
+      26,   247,    35,    36,    37,    38,    39,   229,   230,    61,
+      43,   257,    59,    46,    47,    57,    33,    34,    33,    34,
+     242,   243,    55,    56,    33,    34,    40,    41,    42,   251,
+     252,   253,   254,    26,   262,    50,    51,    52,    33,    34,
+     286,    50,    51,   233,   234,   235,   236,   237,   294,     5,
+       6,    26,    26,    27,    28,    29,   198,   199,    26,    26,
+     306,    35,    36,    37,    38,    39,    26,    26,    26,    43,
+      44,    45,    46,    47,   320,    26,    26,   299,    26,    26,
+      26,    55,    56,    26,   306,    61,    15,    59,   310,   311,
+      61,    15,    15,     7,     9,   317,   318,    15,   320,    15,
+       7,     4,   324,   325,    59,    59,   328,   329,   216,     1,
+     332,     3,   319,    26,    15,    59,     8,    15,    10,    11,
+      12,    13,    59,    59,    16,    17,    18,    15,    15,    26,
+      22,    23,    59,    15,    26,    27,    28,    29,    30,    59,
+      15,    15,    59,    35,    36,    37,    38,    39,    59,     9,
+      -1,    43,    44,    45,    46,    47,   240,    49,   280,    -1,
+      52,    53,     3,    55,    56,    -1,    58,     8,    60,    10,
+      11,    12,    13,    -1,    -1,    16,    17,    18,    -1,    -1,
+      -1,    22,    23,    -1,    -1,    26,    27,    28,    29,    30,
+      -1,    -1,    -1,    -1,    35,    36,    37,    38,    39,    -1,
+      -1,    -1,    43,    44,    45,    46,    47,    -1,    -1,    -1,
+      -1,    52,    -1,    -1,    55,    56,     3,    58,    -1,    60,
+      61,     8,    -1,    10,    11,    12,    13,    -1,    -1,    16,
       17,    18,    -1,    -1,    -1,    22,    23,    -1,    -1,    26,
       27,    28,    29,    30,    -1,    -1,    -1,    -1,    35,    36,
       37,    38,    39,    -1,    -1,    -1,    43,    44,    45,    46,
-      47,    -1,    -1,    -1,    51,    -1,     3,    54,    55,    -1,
-      57,     8,    59,    10,    11,    12,    13,    -1,    -1,    16,
-      17,    18,    -1,    -1,    -1,    22,    23,    -1,    -1,    26,
-      27,    28,    29,    30,    -1,    -1,    -1,    -1,    35,    36,
-      37,    38,    39,    -1,    -1,    -1,    43,    44,    45,    46,
-      47,   228,   229,   230,   231,   232,     3,    54,    55,    -1,
-      57,     8,    59,    10,    11,    12,    13,    -1,    -1,    -1,
-      -1,    18,    -1,    -1,   251,    -1,    -1,    -1,    -1,    26,
-      27,    28,    29,    30,    -1,    -1,    -1,    -1,    35,    36,
-      37,    38,    39,    -1,    -1,    -1,    43,    44,    45,    46,
-      47,    -1,    -1,    -1,    -1,    -1,     3,    54,    55,    -1,
-      57,     8,    59,    10,    11,    12,    13,    26,    27,    28,
-      29,    18,    -1,    -1,    -1,    -1,    35,    36,    37,    38,
-      39,    -1,    -1,    30,    43,    44,    45,    46,    47,    -1,
-      28,    29,    -1,    -1,    -1,    54,    55,    35,    36,    37,
-      38,    39,    -1,    -1,    51,    43,    44,    45,    46,    47,
-      57,    -1,    59,    -1,    -1,    -1,    54,    55,    35,    36,
-      37,    38,    39,    -1,    -1,    -1,    43,    -1,    -1,    46,
-      47,    35,    36,    37,    38,    39,    -1,    54,    55,    43,
-      -1,    -1,    46,    47,    -1,    -1,    -1,    -1,    -1,    -1,
-      54,    55
+      47,    -1,    -1,    -1,    51,    52,    53,     3,    55,    56,
+      -1,    58,     8,    60,    10,    11,    12,    13,    -1,    -1,
+      16,    17,    18,    -1,    -1,    -1,    22,    23,    -1,    -1,
+      26,    27,    28,    29,    30,    -1,    -1,    -1,    -1,    35,
+      36,    37,    38,    39,    -1,    -1,    -1,    43,    44,    45,
+      46,    47,    -1,    -1,    -1,    -1,    52,    -1,     3,    55,
+      56,    -1,    58,     8,    60,    10,    11,    12,    13,    -1,
+      -1,    16,    17,    18,    -1,    -1,    -1,    22,    23,    -1,
+      -1,    26,    27,    28,    29,    30,    -1,    -1,    -1,    -1,
+      35,    36,    37,    38,    39,    -1,    -1,    -1,    43,    44,
+      45,    46,    47,    -1,    -1,    -1,    -1,    -1,    -1,     3,
+      55,    56,    -1,    58,     8,    60,    10,    11,    12,    13,
+      -1,    -1,    16,    17,    18,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    26,    27,    28,    29,    30,    -1,    -1,    -1,
+      -1,    35,    36,    37,    38,    39,    -1,    -1,    -1,    43,
+      44,    45,    46,    47,    -1,    -1,    -1,    -1,    52,    -1,
+       3,    55,    56,    -1,    58,     8,    60,    10,    11,    12,
+      13,    -1,    -1,    -1,    -1,    18,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    26,    27,    28,    29,    30,    -1,    -1,
+      -1,    -1,    35,    36,    37,    38,    39,    -1,    -1,    -1,
+      43,    44,    45,    46,    47,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    55,    56,    -1,    58,    -1,    60,    28,    29,
+      -1,    -1,    -1,    -1,    -1,    35,    36,    37,    38,    39,
+      -1,    -1,    -1,    43,    44,    45,    46,    47,    -1,    35,
+      36,    37,    38,    39,    -1,    55,    56,    43,    -1,    -1,
+      46,    47,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    55,
+      56
 };
 
-  /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
-     symbol of state STATE-NUM.  */
+/* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of
+   state STATE-NUM.  */
 static const yytype_int8 yystos[] =
 {
        0,     1,     3,     8,    10,    11,    12,    13,    16,    17,
       18,    22,    23,    26,    27,    28,    29,    30,    35,    36,
-      37,    38,    39,    43,    44,    45,    46,    47,    51,    52,
-      54,    55,    57,    59,    62,    64,    65,    67,    68,    69,
-      70,    71,    72,    73,    74,    76,    77,    78,    79,    80,
-      81,    94,    95,    96,    97,    98,    51,    52,    87,    88,
-      93,    26,    26,    31,    26,    88,    88,    26,    26,    67,
-      69,    32,    50,    51,    52,    92,    96,    24,    25,    59,
-      35,    36,    37,    38,    39,    43,    46,    47,    54,    55,
-      35,    36,    37,    38,    39,    43,    46,    47,    54,    55,
-      26,    26,    26,    29,    56,    26,    26,    29,    56,    26,
-      26,    26,    26,    26,    26,    26,    88,    88,     0,    26,
-      65,    64,    66,    51,    52,    91,    33,    34,    49,    50,
-      48,    53,    92,    96,     4,    51,    89,    90,    96,    93,
-      50,    93,    14,    57,    92,    50,    93,    14,    14,    51,
-      59,    69,    75,    69,    66,    19,    25,    60,    26,    26,
-      26,    29,    56,    26,    26,    29,    56,    26,    26,    26,
-      26,    26,    26,    26,    26,    29,    56,    26,    26,    29,
-      56,    26,    26,    26,    26,    26,    58,    60,    64,    93,
-      93,    95,    95,    93,    93,    88,    33,    34,    49,    50,
-      51,    21,    93,    14,    21,    57,    88,    88,    93,    93,
-      14,    21,    57,    88,    88,    93,    60,    66,    66,    93,
-      95,    95,    97,    97,     5,     6,     7,    82,    93,    93,
-      93,    93,    93,    83,    84,    85,    93,    14,    57,    88,
-      26,    63,    92,    88,    15,    58,    14,    57,    14,    57,
-      87,    93,    63,    92,    87,    15,    15,    75,    93,    75,
-      88,    88,     7,    90,    90,    90,    90,    90,     9,    40,
-      41,    42,    84,    93,     9,    26,    59,    86,    88,    88,
-      15,    26,    92,    93,    58,    88,    88,    87,    87,    15,
-      90,    92,    93,    58,    75,     7,     4,    40,    41,    42,
-       9,    86,    53,    60,    15,    58,    93,    14,    57,    15,
-      58,    15,    58,    93,    14,    57,    88,    60,    26,    88,
-      93,    14,    57,    88,    88,    14,    57,    88,    88,     5,
-      82,    88,    93,    88,    88,    15,    58,    87,    87,    15,
-      58,    88,    15,    58,    15,    58
+      37,    38,    39,    43,    44,    45,    46,    47,    49,    52,
+      53,    55,    56,    58,    60,    63,    65,    66,    68,    69,
+      70,    71,    72,    73,    74,    75,    77,    78,    79,    80,
+      81,    82,    83,    95,    96,    97,    98,    99,    52,    53,
+      89,    94,    26,    26,    31,    26,    89,    89,    26,    26,
+      68,    70,    32,    51,    52,    53,    93,    97,    24,    25,
+      60,    35,    36,    37,    38,    39,    43,    46,    47,    55,
+      56,    35,    36,    37,    38,    39,    43,    46,    47,    55,
+      56,    26,    26,    26,    29,    57,    26,    26,    29,    57,
+      26,    26,    26,    26,    26,    89,    94,    26,    26,    89,
+      89,     0,    26,    66,    65,    67,    52,    53,    92,    33,
+      34,    50,    51,    48,    54,    93,    97,     4,    52,    90,
+      91,    97,    94,    51,    94,    14,    58,    93,    51,    94,
+      14,    14,    52,    60,    70,    76,    70,    67,    19,    25,
+      61,    26,    26,    26,    29,    57,    26,    26,    29,    57,
+      26,    26,    26,    26,    26,    26,    26,    26,    29,    57,
+      26,    26,    29,    57,    26,    26,    26,    26,    26,    61,
+      61,    59,    61,    65,    94,    94,    96,    96,    94,    94,
+      89,    33,    34,    50,    51,    52,    21,    94,    14,    21,
+      58,    89,    89,    94,    94,    14,    21,    58,    89,    89,
+      94,    61,    67,    67,    94,    96,    96,    98,    98,     5,
+       6,     7,    84,    94,    94,    94,    94,    94,    85,    86,
+      87,    94,    14,    58,    89,    26,    64,    93,    89,    15,
+      59,    14,    58,    14,    58,    89,    64,    93,    89,    15,
+      15,    76,    94,    76,    89,    89,     7,    91,    91,    91,
+      91,    91,     9,    40,    41,    42,    86,    94,     9,    26,
+      60,    88,    89,    89,    15,    26,    93,    94,    59,    89,
+      89,    89,    89,    15,    93,    94,    59,    76,     7,     4,
+      40,    41,    42,     9,    88,    54,    61,    15,    59,    94,
+      14,    58,    15,    59,    15,    59,    94,    14,    58,    89,
+      61,    26,    89,    94,    14,    58,    89,    89,    14,    58,
+      89,    89,     5,    84,    89,    94,    89,    89,    15,    59,
+      89,    89,    15,    59,    89,    15,    59,    15,    59
 };
 
-  /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+/* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM.  */
 static const yytype_int8 yyr1[] =
 {
-       0,    61,    62,    62,    62,    62,    62,    63,    63,    64,
-      64,    64,    64,    64,    64,    64,    64,    64,    64,    64,
-      64,    64,    64,    64,    64,    64,    64,    64,    64,    64,
-      64,    64,    64,    64,    64,    64,    64,    64,    64,    64,
-      64,    64,    64,    64,    64,    64,    64,    64,    64,    64,
-      64,    64,    64,    65,    65,    65,    66,    66,    67,    67,
-      68,    68,    68,    68,    68,    69,    69,    69,    69,    69,
-      69,    69,    69,    69,    69,    69,    70,    70,    70,    70,
-      70,    70,    70,    70,    71,    71,    71,    71,    72,    72,
-      72,    72,    72,    72,    72,    72,    73,    73,    73,    74,
-      74,    74,    74,    75,    75,    76,    77,    77,    77,    77,
-      77,    78,    78,    78,    79,    80,    81,    82,    82,    82,
-      83,    83,    84,    84,    84,    84,    85,    85,    85,    85,
-      85,    85,    86,    86,    87,    88,    88,    89,    89,    89,
-      90,    90,    90,    90,    90,    90,    91,    91,    92,    92,
-      92,    93,    93,    94,    94,    94,    95,    95,    95,    95,
-      95,    96,    96,    96,    96,    96,    97,    97,    97,    98,
-      98,    98,    98
+       0,    62,    63,    63,    63,    63,    63,    63,    64,    64,
+      65,    65,    65,    65,    65,    65,    65,    65,    65,    65,
+      65,    65,    65,    65,    65,    65,    65,    65,    65,    65,
+      65,    65,    65,    65,    65,    65,    65,    65,    65,    65,
+      65,    65,    65,    65,    65,    65,    65,    65,    65,    65,
+      65,    65,    65,    65,    66,    66,    66,    67,    67,    68,
+      68,    69,    69,    69,    69,    69,    70,    70,    70,    70,
+      70,    70,    70,    70,    70,    70,    70,    71,    71,    71,
+      71,    71,    71,    71,    71,    72,    72,    72,    72,    73,
+      73,    73,    73,    73,    73,    73,    73,    74,    74,    74,
+      75,    75,    75,    75,    76,    76,    77,    78,    78,    79,
+      79,    79,    79,    79,    80,    80,    80,    81,    82,    83,
+      84,    84,    84,    85,    85,    86,    86,    86,    86,    87,
+      87,    87,    87,    87,    87,    88,    88,    89,    89,    90,
+      90,    90,    91,    91,    91,    91,    91,    91,    92,    92,
+      93,    93,    93,    94,    94,    95,    95,    95,    96,    96,
+      96,    96,    96,    97,    97,    97,    97,    97,    98,    98,
+      98,    99,    99,    99,    99
 };
 
-  /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
+/* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM.  */
 static const yytype_int8 yyr2[] =
 {
-       0,     2,     2,     1,     2,     2,     1,     1,     2,     2,
-       2,     3,     3,     3,     3,     2,     3,     3,     2,     3,
+       0,     2,     2,     1,     1,     2,     2,     1,     1,     2,
+       2,     2,     3,     3,     3,     3,     2,     3,     3,     2,
+       3,     3,     2,     3,     3,     2,     3,     3,     2,     3,
        3,     2,     3,     3,     2,     3,     3,     2,     3,     3,
        2,     3,     3,     2,     3,     3,     2,     3,     3,     2,
-       3,     3,     2,     3,     3,     2,     3,     3,     2,     3,
-       3,     2,     2,     1,     1,     1,     1,     2,     1,     2,
-       1,     1,     2,     1,     1,     1,     1,     5,     5,     1,
-       1,     1,     1,     1,     1,     1,     6,     6,     7,     7,
-      10,    10,     9,     9,     7,     7,     5,     5,     6,     6,
-       7,     7,    10,    10,     9,     9,     6,     7,     6,     5,
-       6,     3,     5,     1,     2,     3,     2,     3,     3,     4,
-       2,     5,     7,     6,     3,     1,     3,     4,     6,     5,
-       1,     2,     4,     4,     5,     5,     2,     3,     2,     3,
-       2,     3,     1,     3,     2,     1,     2,     3,     3,     3,
-       4,     4,     4,     4,     4,     1,     1,     1,     1,     1,
-       1,     0,     2,     1,     2,     2,     4,     4,     3,     3,
-       1,     1,     2,     2,     2,     2,     4,     4,     1,     1,
-       2,     2,     3
+       3,     3,     2,     2,     1,     1,     1,     1,     2,     1,
+       2,     1,     1,     2,     1,     1,     1,     1,     5,     5,
+       1,     1,     1,     1,     1,     1,     1,     6,     6,     7,
+       7,    10,    10,     9,     9,     7,     7,     5,     5,     6,
+       6,     7,     7,    10,    10,     9,     9,     6,     7,     6,
+       5,     6,     3,     5,     1,     2,     3,     3,     3,     2,
+       3,     3,     4,     2,     5,     7,     6,     3,     1,     3,
+       4,     6,     5,     1,     2,     4,     4,     5,     5,     2,
+       3,     2,     3,     2,     3,     1,     3,     2,     2,     3,
+       3,     3,     4,     4,     4,     4,     4,     1,     1,     1,
+       1,     1,     1,     0,     2,     1,     2,     2,     4,     4,
+       3,     3,     1,     1,     2,     2,     2,     2,     4,     4,
+       1,     1,     2,     2,     3
 };
 
 
@@ -1451,6 +1487,7 @@ enum { YYENOMEM = -2 };
 #define YYACCEPT        goto yyacceptlab
 #define YYABORT         goto yyabortlab
 #define YYERROR         goto yyerrorlab
+#define YYNOMEM         goto yyexhaustedlab
 
 
 #define YYRECOVERING()  (!!yyerrstatus)
@@ -1491,10 +1528,7 @@ do {                                            \
     YYFPRINTF Args;                             \
 } while (0)
 
-/* This macro is provided for backward compatibility. */
-# ifndef YY_LOCATION_PRINT
-#  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
-# endif
+
 
 
 # define YY_SYMBOL_PRINT(Title, Kind, Value, Location)                    \
@@ -1518,15 +1552,11 @@ yy_symbol_value_print (FILE *yyo,
                        yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep)
 {
   FILE *yyoutput = yyo;
-  YYUSE (yyoutput);
+  YY_USE (yyoutput);
   if (!yyvaluep)
     return;
-# ifdef YYPRINT
-  if (yykind < YYNTOKENS)
-    YYPRINT (yyo, yytoknum[yykind], *yyvaluep);
-# endif
   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-  YYUSE (yykind);
+  YY_USE (yykind);
   YY_IGNORE_MAYBE_UNINITIALIZED_END
 }
 
@@ -1640,18 +1670,18 @@ static void
 yydestruct (const char *yymsg,
             yysymbol_kind_t yykind, YYSTYPE *yyvaluep)
 {
-  YYUSE (yyvaluep);
+  YY_USE (yyvaluep);
   if (!yymsg)
     yymsg = "Deleting";
   YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp);
 
   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-  YYUSE (yykind);
+  YY_USE (yykind);
   YY_IGNORE_MAYBE_UNINITIALIZED_END
 }
 
 
-/* The lookahead symbol.  */
+/* Lookahead token kind.  */
 int yychar;
 
 /* The semantic value of the lookahead symbol.  */
@@ -1669,34 +1699,30 @@ int yynerrs;
 int
 yyparse (void)
 {
-    yy_state_fast_t yystate;
+    yy_state_fast_t yystate = 0;
     /* Number of tokens to shift before error messages enabled.  */
-    int yyerrstatus;
+    int yyerrstatus = 0;
 
-    /* The stacks and their tools:
-       'yyss': related to states.
-       'yyvs': related to semantic values.
-
-       Refer to the stacks through separate pointers, to allow yyoverflow
+    /* Refer to the stacks through separate pointers, to allow yyoverflow
        to reallocate them elsewhere.  */
 
     /* Their size.  */
-    YYPTRDIFF_T yystacksize;
+    YYPTRDIFF_T yystacksize = YYINITDEPTH;
 
-    /* The state stack.  */
+    /* The state stack: array, bottom, top.  */
     yy_state_t yyssa[YYINITDEPTH];
-    yy_state_t *yyss;
-    yy_state_t *yyssp;
+    yy_state_t *yyss = yyssa;
+    yy_state_t *yyssp = yyss;
 
-    /* The semantic value stack.  */
+    /* The semantic value stack: array, bottom, top.  */
     YYSTYPE yyvsa[YYINITDEPTH];
-    YYSTYPE *yyvs;
-    YYSTYPE *yyvsp;
+    YYSTYPE *yyvs = yyvsa;
+    YYSTYPE *yyvsp = yyvs;
 
   int yyn;
   /* The return value of yyparse.  */
   int yyresult;
-  /* Lookahead token as an internal (translated) token number.  */
+  /* Lookahead symbol kind.  */
   yysymbol_kind_t yytoken = YYSYMBOL_YYEMPTY;
   /* The variables used to return semantic value and location from the
      action routines.  */
@@ -1710,18 +1736,10 @@ yyparse (void)
      Keep to zero when no symbol should be popped.  */
   int yylen = 0;
 
-  yynerrs = 0;
-  yystate = 0;
-  yyerrstatus = 0;
-
-  yystacksize = YYINITDEPTH;
-  yyssp = yyss = yyssa;
-  yyvsp = yyvs = yyvsa;
-
-
   YYDPRINTF ((stderr, "Starting parse\n"));
 
   yychar = YYEMPTY; /* Cause a token to be read.  */
+
   goto yysetstate;
 
 
@@ -1747,7 +1765,7 @@ yysetstate:
 
   if (yyss + yystacksize - 1 <= yyssp)
 #if !defined yyoverflow && !defined YYSTACK_RELOCATE
-    goto yyexhaustedlab;
+    YYNOMEM;
 #else
     {
       /* Get the current used size of the three stacks, in elements.  */
@@ -1775,7 +1793,7 @@ yysetstate:
 # else /* defined YYSTACK_RELOCATE */
       /* Extend the stack our own way.  */
       if (YYMAXDEPTH <= yystacksize)
-        goto yyexhaustedlab;
+        YYNOMEM;
       yystacksize *= 2;
       if (YYMAXDEPTH < yystacksize)
         yystacksize = YYMAXDEPTH;
@@ -1786,7 +1804,7 @@ yysetstate:
           YY_CAST (union yyalloc *,
                    YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize))));
         if (! yyptr)
-          goto yyexhaustedlab;
+          YYNOMEM;
         YYSTACK_RELOCATE (yyss_alloc, yyss);
         YYSTACK_RELOCATE (yyvs_alloc, yyvs);
 #  undef YYSTACK_RELOCATE
@@ -1808,6 +1826,7 @@ yysetstate:
     }
 #endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */
 
+
   if (yystate == YYFINAL)
     YYACCEPT;
 
@@ -1919,8 +1938,8 @@ yyreduce:
   YY_REDUCE_PRINT (yyn);
   switch (yyn)
     {
-  case 2:
-#line 382 "/Users/chet/src/bash/src/parse.y"
+  case 2: /* inputunit: simple_list simple_list_terminator  */
+#line 396 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          /* Case of regular command.  Discard the error
                             safety net,and return the command just parsed. */
@@ -1931,11 +1950,23 @@ yyreduce:
                            parser_state |= PST_EOFTOKEN;
                          YYACCEPT;
                        }
-#line 1935 "y.tab.c"
+#line 1954 "y.tab.c"
+    break;
+
+  case 3: /* inputunit: comsub  */
+#line 407 "/usr/local/src/chet/src/bash/src/parse.y"
+                        {
+                         /* This is special; look at the production and how
+                            parse_comsub sets token_to_read */
+                         global_command = (yyvsp[0].command);
+                         eof_encountered = 0;
+                         YYACCEPT;
+                       }
+#line 1966 "y.tab.c"
     break;
 
-  case 3:
-#line 393 "/Users/chet/src/bash/src/parse.y"
+  case 4: /* inputunit: '\n'  */
+#line 415 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          /* Case of regular command, but not a very
                             interesting one.  Return a NULL command. */
@@ -1944,11 +1975,11 @@ yyreduce:
                            parser_state |= PST_EOFTOKEN;
                          YYACCEPT;
                        }
-#line 1948 "y.tab.c"
+#line 1979 "y.tab.c"
     break;
 
-  case 4:
-#line 402 "/Users/chet/src/bash/src/parse.y"
+  case 5: /* inputunit: error '\n'  */
+#line 424 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          /* Error during parsing.  Return NULL command. */
                          global_command = (COMMAND *)NULL;
@@ -1963,11 +1994,11 @@ yyreduce:
                              YYABORT;
                            }
                        }
-#line 1967 "y.tab.c"
+#line 1998 "y.tab.c"
     break;
 
-  case 5:
-#line 417 "/Users/chet/src/bash/src/parse.y"
+  case 6: /* inputunit: error yacc_EOF  */
+#line 439 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          /* EOF after an error.  Do ignoreeof or not.  Really
                             only interesting in non-interactive shells */
@@ -1984,11 +2015,11 @@ yyreduce:
                              YYABORT;
                            }
                        }
-#line 1988 "y.tab.c"
+#line 2019 "y.tab.c"
     break;
 
-  case 6:
-#line 434 "/Users/chet/src/bash/src/parse.y"
+  case 7: /* inputunit: yacc_EOF  */
+#line 456 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          /* Case of EOF seen by itself.  Do ignoreeof or
                             not. */
@@ -1996,495 +2027,495 @@ yyreduce:
                          handle_eof_input_unit ();
                          YYACCEPT;
                        }
-#line 2000 "y.tab.c"
+#line 2031 "y.tab.c"
     break;
 
-  case 7:
-#line 444 "/Users/chet/src/bash/src/parse.y"
+  case 8: /* word_list: WORD  */
+#line 466 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.word_list) = make_word_list ((yyvsp[0].word), (WORD_LIST *)NULL); }
-#line 2006 "y.tab.c"
+#line 2037 "y.tab.c"
     break;
 
-  case 8:
-#line 446 "/Users/chet/src/bash/src/parse.y"
+  case 9: /* word_list: word_list WORD  */
+#line 468 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.word_list) = make_word_list ((yyvsp[0].word), (yyvsp[-1].word_list)); }
-#line 2012 "y.tab.c"
+#line 2043 "y.tab.c"
     break;
 
-  case 9:
-#line 450 "/Users/chet/src/bash/src/parse.y"
+  case 10: /* redirection: '>' WORD  */
+#line 472 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          source.dest = 1;
                          redir.filename = (yyvsp[0].word);
                          (yyval.redirect) = make_redirection (source, r_output_direction, redir, 0);
                        }
-#line 2022 "y.tab.c"
+#line 2053 "y.tab.c"
     break;
 
-  case 10:
-#line 456 "/Users/chet/src/bash/src/parse.y"
+  case 11: /* redirection: '<' WORD  */
+#line 478 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          source.dest = 0;
                          redir.filename = (yyvsp[0].word);
                          (yyval.redirect) = make_redirection (source, r_input_direction, redir, 0);
                        }
-#line 2032 "y.tab.c"
+#line 2063 "y.tab.c"
     break;
 
-  case 11:
-#line 462 "/Users/chet/src/bash/src/parse.y"
+  case 12: /* redirection: NUMBER '>' WORD  */
+#line 484 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          source.dest = (yyvsp[-2].number);
                          redir.filename = (yyvsp[0].word);
                          (yyval.redirect) = make_redirection (source, r_output_direction, redir, 0);
                        }
-#line 2042 "y.tab.c"
+#line 2073 "y.tab.c"
     break;
 
-  case 12:
-#line 468 "/Users/chet/src/bash/src/parse.y"
+  case 13: /* redirection: NUMBER '<' WORD  */
+#line 490 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          source.dest = (yyvsp[-2].number);
                          redir.filename = (yyvsp[0].word);
                          (yyval.redirect) = make_redirection (source, r_input_direction, redir, 0);
                        }
-#line 2052 "y.tab.c"
+#line 2083 "y.tab.c"
     break;
 
-  case 13:
-#line 474 "/Users/chet/src/bash/src/parse.y"
+  case 14: /* redirection: REDIR_WORD '>' WORD  */
+#line 496 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          source.filename = (yyvsp[-2].word);
                          redir.filename = (yyvsp[0].word);
                          (yyval.redirect) = make_redirection (source, r_output_direction, redir, REDIR_VARASSIGN);
                        }
-#line 2062 "y.tab.c"
+#line 2093 "y.tab.c"
     break;
 
-  case 14:
-#line 480 "/Users/chet/src/bash/src/parse.y"
+  case 15: /* redirection: REDIR_WORD '<' WORD  */
+#line 502 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          source.filename = (yyvsp[-2].word);
                          redir.filename = (yyvsp[0].word);
                          (yyval.redirect) = make_redirection (source, r_input_direction, redir, REDIR_VARASSIGN);
                        }
-#line 2072 "y.tab.c"
+#line 2103 "y.tab.c"
     break;
 
-  case 15:
-#line 486 "/Users/chet/src/bash/src/parse.y"
+  case 16: /* redirection: GREATER_GREATER WORD  */
+#line 508 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          source.dest = 1;
                          redir.filename = (yyvsp[0].word);
                          (yyval.redirect) = make_redirection (source, r_appending_to, redir, 0);
                        }
-#line 2082 "y.tab.c"
+#line 2113 "y.tab.c"
     break;
 
-  case 16:
-#line 492 "/Users/chet/src/bash/src/parse.y"
+  case 17: /* redirection: NUMBER GREATER_GREATER WORD  */
+#line 514 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          source.dest = (yyvsp[-2].number);
                          redir.filename = (yyvsp[0].word);
                          (yyval.redirect) = make_redirection (source, r_appending_to, redir, 0);
                        }
-#line 2092 "y.tab.c"
+#line 2123 "y.tab.c"
     break;
 
-  case 17:
-#line 498 "/Users/chet/src/bash/src/parse.y"
+  case 18: /* redirection: REDIR_WORD GREATER_GREATER WORD  */
+#line 520 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          source.filename = (yyvsp[-2].word);
                          redir.filename = (yyvsp[0].word);
                          (yyval.redirect) = make_redirection (source, r_appending_to, redir, REDIR_VARASSIGN);
                        }
-#line 2102 "y.tab.c"
+#line 2133 "y.tab.c"
     break;
 
-  case 18:
-#line 504 "/Users/chet/src/bash/src/parse.y"
+  case 19: /* redirection: GREATER_BAR WORD  */
+#line 526 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          source.dest = 1;
                          redir.filename = (yyvsp[0].word);
                          (yyval.redirect) = make_redirection (source, r_output_force, redir, 0);
                        }
-#line 2112 "y.tab.c"
+#line 2143 "y.tab.c"
     break;
 
-  case 19:
-#line 510 "/Users/chet/src/bash/src/parse.y"
+  case 20: /* redirection: NUMBER GREATER_BAR WORD  */
+#line 532 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          source.dest = (yyvsp[-2].number);
                          redir.filename = (yyvsp[0].word);
                          (yyval.redirect) = make_redirection (source, r_output_force, redir, 0);
                        }
-#line 2122 "y.tab.c"
+#line 2153 "y.tab.c"
     break;
 
-  case 20:
-#line 516 "/Users/chet/src/bash/src/parse.y"
+  case 21: /* redirection: REDIR_WORD GREATER_BAR WORD  */
+#line 538 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          source.filename = (yyvsp[-2].word);
                          redir.filename = (yyvsp[0].word);
                          (yyval.redirect) = make_redirection (source, r_output_force, redir, REDIR_VARASSIGN);
                        }
-#line 2132 "y.tab.c"
+#line 2163 "y.tab.c"
     break;
 
-  case 21:
-#line 522 "/Users/chet/src/bash/src/parse.y"
+  case 22: /* redirection: LESS_GREATER WORD  */
+#line 544 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          source.dest = 0;
                          redir.filename = (yyvsp[0].word);
                          (yyval.redirect) = make_redirection (source, r_input_output, redir, 0);
                        }
-#line 2142 "y.tab.c"
+#line 2173 "y.tab.c"
     break;
 
-  case 22:
-#line 528 "/Users/chet/src/bash/src/parse.y"
+  case 23: /* redirection: NUMBER LESS_GREATER WORD  */
+#line 550 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          source.dest = (yyvsp[-2].number);
                          redir.filename = (yyvsp[0].word);
                          (yyval.redirect) = make_redirection (source, r_input_output, redir, 0);
                        }
-#line 2152 "y.tab.c"
+#line 2183 "y.tab.c"
     break;
 
-  case 23:
-#line 534 "/Users/chet/src/bash/src/parse.y"
+  case 24: /* redirection: REDIR_WORD LESS_GREATER WORD  */
+#line 556 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          source.filename = (yyvsp[-2].word);
                          redir.filename = (yyvsp[0].word);
                          (yyval.redirect) = make_redirection (source, r_input_output, redir, REDIR_VARASSIGN);
                        }
-#line 2162 "y.tab.c"
+#line 2193 "y.tab.c"
     break;
 
-  case 24:
-#line 540 "/Users/chet/src/bash/src/parse.y"
+  case 25: /* redirection: LESS_LESS WORD  */
+#line 562 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          source.dest = 0;
                          redir.filename = (yyvsp[0].word);
                          (yyval.redirect) = make_redirection (source, r_reading_until, redir, 0);
                          push_heredoc ((yyval.redirect));
                        }
-#line 2173 "y.tab.c"
+#line 2204 "y.tab.c"
     break;
 
-  case 25:
-#line 547 "/Users/chet/src/bash/src/parse.y"
+  case 26: /* redirection: NUMBER LESS_LESS WORD  */
+#line 569 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          source.dest = (yyvsp[-2].number);
                          redir.filename = (yyvsp[0].word);
                          (yyval.redirect) = make_redirection (source, r_reading_until, redir, 0);
                          push_heredoc ((yyval.redirect));
                        }
-#line 2184 "y.tab.c"
+#line 2215 "y.tab.c"
     break;
 
-  case 26:
-#line 554 "/Users/chet/src/bash/src/parse.y"
+  case 27: /* redirection: REDIR_WORD LESS_LESS WORD  */
+#line 576 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          source.filename = (yyvsp[-2].word);
                          redir.filename = (yyvsp[0].word);
                          (yyval.redirect) = make_redirection (source, r_reading_until, redir, REDIR_VARASSIGN);
                          push_heredoc ((yyval.redirect));
                        }
-#line 2195 "y.tab.c"
+#line 2226 "y.tab.c"
     break;
 
-  case 27:
-#line 561 "/Users/chet/src/bash/src/parse.y"
+  case 28: /* redirection: LESS_LESS_MINUS WORD  */
+#line 583 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          source.dest = 0;
                          redir.filename = (yyvsp[0].word);
                          (yyval.redirect) = make_redirection (source, r_deblank_reading_until, redir, 0);
                          push_heredoc ((yyval.redirect));
                        }
-#line 2206 "y.tab.c"
+#line 2237 "y.tab.c"
     break;
 
-  case 28:
-#line 568 "/Users/chet/src/bash/src/parse.y"
+  case 29: /* redirection: NUMBER LESS_LESS_MINUS WORD  */
+#line 590 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          source.dest = (yyvsp[-2].number);
                          redir.filename = (yyvsp[0].word);
                          (yyval.redirect) = make_redirection (source, r_deblank_reading_until, redir, 0);
                          push_heredoc ((yyval.redirect));
                        }
-#line 2217 "y.tab.c"
+#line 2248 "y.tab.c"
     break;
 
-  case 29:
-#line 575 "/Users/chet/src/bash/src/parse.y"
+  case 30: /* redirection: REDIR_WORD LESS_LESS_MINUS WORD  */
+#line 597 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          source.filename = (yyvsp[-2].word);
                          redir.filename = (yyvsp[0].word);
                          (yyval.redirect) = make_redirection (source, r_deblank_reading_until, redir, REDIR_VARASSIGN);
                          push_heredoc ((yyval.redirect));
                        }
-#line 2228 "y.tab.c"
+#line 2259 "y.tab.c"
     break;
 
-  case 30:
-#line 582 "/Users/chet/src/bash/src/parse.y"
+  case 31: /* redirection: LESS_LESS_LESS WORD  */
+#line 604 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          source.dest = 0;
                          redir.filename = (yyvsp[0].word);
                          (yyval.redirect) = make_redirection (source, r_reading_string, redir, 0);
                        }
-#line 2238 "y.tab.c"
+#line 2269 "y.tab.c"
     break;
 
-  case 31:
-#line 588 "/Users/chet/src/bash/src/parse.y"
+  case 32: /* redirection: NUMBER LESS_LESS_LESS WORD  */
+#line 610 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          source.dest = (yyvsp[-2].number);
                          redir.filename = (yyvsp[0].word);
                          (yyval.redirect) = make_redirection (source, r_reading_string, redir, 0);
                        }
-#line 2248 "y.tab.c"
+#line 2279 "y.tab.c"
     break;
 
-  case 32:
-#line 594 "/Users/chet/src/bash/src/parse.y"
+  case 33: /* redirection: REDIR_WORD LESS_LESS_LESS WORD  */
+#line 616 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          source.filename = (yyvsp[-2].word);
                          redir.filename = (yyvsp[0].word);
                          (yyval.redirect) = make_redirection (source, r_reading_string, redir, REDIR_VARASSIGN);
                        }
-#line 2258 "y.tab.c"
+#line 2289 "y.tab.c"
     break;
 
-  case 33:
-#line 600 "/Users/chet/src/bash/src/parse.y"
+  case 34: /* redirection: LESS_AND NUMBER  */
+#line 622 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          source.dest = 0;
                          redir.dest = (yyvsp[0].number);
                          (yyval.redirect) = make_redirection (source, r_duplicating_input, redir, 0);
                        }
-#line 2268 "y.tab.c"
+#line 2299 "y.tab.c"
     break;
 
-  case 34:
-#line 606 "/Users/chet/src/bash/src/parse.y"
+  case 35: /* redirection: NUMBER LESS_AND NUMBER  */
+#line 628 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          source.dest = (yyvsp[-2].number);
                          redir.dest = (yyvsp[0].number);
                          (yyval.redirect) = make_redirection (source, r_duplicating_input, redir, 0);
                        }
-#line 2278 "y.tab.c"
+#line 2309 "y.tab.c"
     break;
 
-  case 35:
-#line 612 "/Users/chet/src/bash/src/parse.y"
+  case 36: /* redirection: REDIR_WORD LESS_AND NUMBER  */
+#line 634 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          source.filename = (yyvsp[-2].word);
                          redir.dest = (yyvsp[0].number);
                          (yyval.redirect) = make_redirection (source, r_duplicating_input, redir, REDIR_VARASSIGN);
                        }
-#line 2288 "y.tab.c"
+#line 2319 "y.tab.c"
     break;
 
-  case 36:
-#line 618 "/Users/chet/src/bash/src/parse.y"
+  case 37: /* redirection: GREATER_AND NUMBER  */
+#line 640 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          source.dest = 1;
                          redir.dest = (yyvsp[0].number);
                          (yyval.redirect) = make_redirection (source, r_duplicating_output, redir, 0);
                        }
-#line 2298 "y.tab.c"
+#line 2329 "y.tab.c"
     break;
 
-  case 37:
-#line 624 "/Users/chet/src/bash/src/parse.y"
+  case 38: /* redirection: NUMBER GREATER_AND NUMBER  */
+#line 646 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          source.dest = (yyvsp[-2].number);
                          redir.dest = (yyvsp[0].number);
                          (yyval.redirect) = make_redirection (source, r_duplicating_output, redir, 0);
                        }
-#line 2308 "y.tab.c"
+#line 2339 "y.tab.c"
     break;
 
-  case 38:
-#line 630 "/Users/chet/src/bash/src/parse.y"
+  case 39: /* redirection: REDIR_WORD GREATER_AND NUMBER  */
+#line 652 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          source.filename = (yyvsp[-2].word);
                          redir.dest = (yyvsp[0].number);
                          (yyval.redirect) = make_redirection (source, r_duplicating_output, redir, REDIR_VARASSIGN);
                        }
-#line 2318 "y.tab.c"
+#line 2349 "y.tab.c"
     break;
 
-  case 39:
-#line 636 "/Users/chet/src/bash/src/parse.y"
+  case 40: /* redirection: LESS_AND WORD  */
+#line 658 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          source.dest = 0;
                          redir.filename = (yyvsp[0].word);
                          (yyval.redirect) = make_redirection (source, r_duplicating_input_word, redir, 0);
                        }
-#line 2328 "y.tab.c"
+#line 2359 "y.tab.c"
     break;
 
-  case 40:
-#line 642 "/Users/chet/src/bash/src/parse.y"
+  case 41: /* redirection: NUMBER LESS_AND WORD  */
+#line 664 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          source.dest = (yyvsp[-2].number);
                          redir.filename = (yyvsp[0].word);
                          (yyval.redirect) = make_redirection (source, r_duplicating_input_word, redir, 0);
                        }
-#line 2338 "y.tab.c"
+#line 2369 "y.tab.c"
     break;
 
-  case 41:
-#line 648 "/Users/chet/src/bash/src/parse.y"
+  case 42: /* redirection: REDIR_WORD LESS_AND WORD  */
+#line 670 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          source.filename = (yyvsp[-2].word);
                          redir.filename = (yyvsp[0].word);
                          (yyval.redirect) = make_redirection (source, r_duplicating_input_word, redir, REDIR_VARASSIGN);
                        }
-#line 2348 "y.tab.c"
+#line 2379 "y.tab.c"
     break;
 
-  case 42:
-#line 654 "/Users/chet/src/bash/src/parse.y"
+  case 43: /* redirection: GREATER_AND WORD  */
+#line 676 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          source.dest = 1;
                          redir.filename = (yyvsp[0].word);
                          (yyval.redirect) = make_redirection (source, r_duplicating_output_word, redir, 0);
                        }
-#line 2358 "y.tab.c"
+#line 2389 "y.tab.c"
     break;
 
-  case 43:
-#line 660 "/Users/chet/src/bash/src/parse.y"
+  case 44: /* redirection: NUMBER GREATER_AND WORD  */
+#line 682 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          source.dest = (yyvsp[-2].number);
                          redir.filename = (yyvsp[0].word);
                          (yyval.redirect) = make_redirection (source, r_duplicating_output_word, redir, 0);
                        }
-#line 2368 "y.tab.c"
+#line 2399 "y.tab.c"
     break;
 
-  case 44:
-#line 666 "/Users/chet/src/bash/src/parse.y"
+  case 45: /* redirection: REDIR_WORD GREATER_AND WORD  */
+#line 688 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          source.filename = (yyvsp[-2].word);
                          redir.filename = (yyvsp[0].word);
                          (yyval.redirect) = make_redirection (source, r_duplicating_output_word, redir, REDIR_VARASSIGN);
                        }
-#line 2378 "y.tab.c"
+#line 2409 "y.tab.c"
     break;
 
-  case 45:
-#line 672 "/Users/chet/src/bash/src/parse.y"
+  case 46: /* redirection: GREATER_AND '-'  */
+#line 694 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          source.dest = 1;
                          redir.dest = 0;
                          (yyval.redirect) = make_redirection (source, r_close_this, redir, 0);
                        }
-#line 2388 "y.tab.c"
+#line 2419 "y.tab.c"
     break;
 
-  case 46:
-#line 678 "/Users/chet/src/bash/src/parse.y"
+  case 47: /* redirection: NUMBER GREATER_AND '-'  */
+#line 700 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          source.dest = (yyvsp[-2].number);
                          redir.dest = 0;
                          (yyval.redirect) = make_redirection (source, r_close_this, redir, 0);
                        }
-#line 2398 "y.tab.c"
+#line 2429 "y.tab.c"
     break;
 
-  case 47:
-#line 684 "/Users/chet/src/bash/src/parse.y"
+  case 48: /* redirection: REDIR_WORD GREATER_AND '-'  */
+#line 706 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          source.filename = (yyvsp[-2].word);
                          redir.dest = 0;
                          (yyval.redirect) = make_redirection (source, r_close_this, redir, REDIR_VARASSIGN);
                        }
-#line 2408 "y.tab.c"
+#line 2439 "y.tab.c"
     break;
 
-  case 48:
-#line 690 "/Users/chet/src/bash/src/parse.y"
+  case 49: /* redirection: LESS_AND '-'  */
+#line 712 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          source.dest = 0;
                          redir.dest = 0;
                          (yyval.redirect) = make_redirection (source, r_close_this, redir, 0);
                        }
-#line 2418 "y.tab.c"
+#line 2449 "y.tab.c"
     break;
 
-  case 49:
-#line 696 "/Users/chet/src/bash/src/parse.y"
+  case 50: /* redirection: NUMBER LESS_AND '-'  */
+#line 718 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          source.dest = (yyvsp[-2].number);
                          redir.dest = 0;
                          (yyval.redirect) = make_redirection (source, r_close_this, redir, 0);
                        }
-#line 2428 "y.tab.c"
+#line 2459 "y.tab.c"
     break;
 
-  case 50:
-#line 702 "/Users/chet/src/bash/src/parse.y"
+  case 51: /* redirection: REDIR_WORD LESS_AND '-'  */
+#line 724 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          source.filename = (yyvsp[-2].word);
                          redir.dest = 0;
                          (yyval.redirect) = make_redirection (source, r_close_this, redir, REDIR_VARASSIGN);
                        }
-#line 2438 "y.tab.c"
+#line 2469 "y.tab.c"
     break;
 
-  case 51:
-#line 708 "/Users/chet/src/bash/src/parse.y"
+  case 52: /* redirection: AND_GREATER WORD  */
+#line 730 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          source.dest = 1;
                          redir.filename = (yyvsp[0].word);
                          (yyval.redirect) = make_redirection (source, r_err_and_out, redir, 0);
                        }
-#line 2448 "y.tab.c"
+#line 2479 "y.tab.c"
     break;
 
-  case 52:
-#line 714 "/Users/chet/src/bash/src/parse.y"
+  case 53: /* redirection: AND_GREATER_GREATER WORD  */
+#line 736 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          source.dest = 1;
                          redir.filename = (yyvsp[0].word);
                          (yyval.redirect) = make_redirection (source, r_append_err_and_out, redir, 0);
                        }
-#line 2458 "y.tab.c"
+#line 2489 "y.tab.c"
     break;
 
-  case 53:
-#line 722 "/Users/chet/src/bash/src/parse.y"
+  case 54: /* simple_command_element: WORD  */
+#line 744 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.element).word = (yyvsp[0].word); (yyval.element).redirect = 0; }
-#line 2464 "y.tab.c"
+#line 2495 "y.tab.c"
     break;
 
-  case 54:
-#line 724 "/Users/chet/src/bash/src/parse.y"
+  case 55: /* simple_command_element: ASSIGNMENT_WORD  */
+#line 746 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.element).word = (yyvsp[0].word); (yyval.element).redirect = 0; }
-#line 2470 "y.tab.c"
+#line 2501 "y.tab.c"
     break;
 
-  case 55:
-#line 726 "/Users/chet/src/bash/src/parse.y"
+  case 56: /* simple_command_element: redirection  */
+#line 748 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.element).redirect = (yyvsp[0].redirect); (yyval.element).word = 0; }
-#line 2476 "y.tab.c"
+#line 2507 "y.tab.c"
     break;
 
-  case 56:
-#line 730 "/Users/chet/src/bash/src/parse.y"
+  case 57: /* redirection_list: redirection  */
+#line 752 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          (yyval.redirect) = (yyvsp[0].redirect);
                        }
-#line 2484 "y.tab.c"
+#line 2515 "y.tab.c"
     break;
 
-  case 57:
-#line 734 "/Users/chet/src/bash/src/parse.y"
+  case 58: /* redirection_list: redirection_list redirection  */
+#line 756 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          register REDIRECT *t;
 
@@ -2493,35 +2524,35 @@ yyreduce:
                          t->next = (yyvsp[0].redirect);
                          (yyval.redirect) = (yyvsp[-1].redirect);
                        }
-#line 2497 "y.tab.c"
+#line 2528 "y.tab.c"
     break;
 
-  case 58:
-#line 745 "/Users/chet/src/bash/src/parse.y"
+  case 59: /* simple_command: simple_command_element  */
+#line 767 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.command) = make_simple_command ((yyvsp[0].element), (COMMAND *)NULL); }
-#line 2503 "y.tab.c"
+#line 2534 "y.tab.c"
     break;
 
-  case 59:
-#line 747 "/Users/chet/src/bash/src/parse.y"
+  case 60: /* simple_command: simple_command simple_command_element  */
+#line 769 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.command) = make_simple_command ((yyvsp[0].element), (yyvsp[-1].command)); }
-#line 2509 "y.tab.c"
+#line 2540 "y.tab.c"
     break;
 
-  case 60:
-#line 751 "/Users/chet/src/bash/src/parse.y"
+  case 61: /* command: simple_command  */
+#line 773 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.command) = clean_simple_command ((yyvsp[0].command)); }
-#line 2515 "y.tab.c"
+#line 2546 "y.tab.c"
     break;
 
-  case 61:
-#line 753 "/Users/chet/src/bash/src/parse.y"
+  case 62: /* command: shell_command  */
+#line 775 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.command) = (yyvsp[0].command); }
-#line 2521 "y.tab.c"
+#line 2552 "y.tab.c"
     break;
 
-  case 62:
-#line 755 "/Users/chet/src/bash/src/parse.y"
+  case 63: /* command: shell_command redirection_list  */
+#line 777 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          COMMAND *tc;
 
@@ -2537,330 +2568,330 @@ yyreduce:
                            tc->redirects = (yyvsp[0].redirect);
                          (yyval.command) = (yyvsp[-1].command);
                        }
-#line 2541 "y.tab.c"
+#line 2572 "y.tab.c"
     break;
 
-  case 63:
-#line 771 "/Users/chet/src/bash/src/parse.y"
+  case 64: /* command: function_def  */
+#line 793 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.command) = (yyvsp[0].command); }
-#line 2547 "y.tab.c"
+#line 2578 "y.tab.c"
     break;
 
-  case 64:
-#line 773 "/Users/chet/src/bash/src/parse.y"
+  case 65: /* command: coproc  */
+#line 795 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.command) = (yyvsp[0].command); }
-#line 2553 "y.tab.c"
+#line 2584 "y.tab.c"
     break;
 
-  case 65:
-#line 777 "/Users/chet/src/bash/src/parse.y"
+  case 66: /* shell_command: for_command  */
+#line 799 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.command) = (yyvsp[0].command); }
-#line 2559 "y.tab.c"
+#line 2590 "y.tab.c"
     break;
 
-  case 66:
-#line 779 "/Users/chet/src/bash/src/parse.y"
+  case 67: /* shell_command: case_command  */
+#line 801 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.command) = (yyvsp[0].command); }
-#line 2565 "y.tab.c"
+#line 2596 "y.tab.c"
     break;
 
-  case 67:
-#line 781 "/Users/chet/src/bash/src/parse.y"
+  case 68: /* shell_command: WHILE compound_list DO compound_list DONE  */
+#line 803 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.command) = make_while_command ((yyvsp[-3].command), (yyvsp[-1].command)); }
-#line 2571 "y.tab.c"
+#line 2602 "y.tab.c"
     break;
 
-  case 68:
-#line 783 "/Users/chet/src/bash/src/parse.y"
+  case 69: /* shell_command: UNTIL compound_list DO compound_list DONE  */
+#line 805 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.command) = make_until_command ((yyvsp[-3].command), (yyvsp[-1].command)); }
-#line 2577 "y.tab.c"
+#line 2608 "y.tab.c"
     break;
 
-  case 69:
-#line 785 "/Users/chet/src/bash/src/parse.y"
+  case 70: /* shell_command: select_command  */
+#line 807 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.command) = (yyvsp[0].command); }
-#line 2583 "y.tab.c"
+#line 2614 "y.tab.c"
     break;
 
-  case 70:
-#line 787 "/Users/chet/src/bash/src/parse.y"
+  case 71: /* shell_command: if_command  */
+#line 809 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.command) = (yyvsp[0].command); }
-#line 2589 "y.tab.c"
+#line 2620 "y.tab.c"
     break;
 
-  case 71:
-#line 789 "/Users/chet/src/bash/src/parse.y"
+  case 72: /* shell_command: subshell  */
+#line 811 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.command) = (yyvsp[0].command); }
-#line 2595 "y.tab.c"
+#line 2626 "y.tab.c"
     break;
 
-  case 72:
-#line 791 "/Users/chet/src/bash/src/parse.y"
+  case 73: /* shell_command: group_command  */
+#line 813 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.command) = (yyvsp[0].command); }
-#line 2601 "y.tab.c"
+#line 2632 "y.tab.c"
     break;
 
-  case 73:
-#line 793 "/Users/chet/src/bash/src/parse.y"
+  case 74: /* shell_command: arith_command  */
+#line 815 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.command) = (yyvsp[0].command); }
-#line 2607 "y.tab.c"
+#line 2638 "y.tab.c"
     break;
 
-  case 74:
-#line 795 "/Users/chet/src/bash/src/parse.y"
+  case 75: /* shell_command: cond_command  */
+#line 817 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.command) = (yyvsp[0].command); }
-#line 2613 "y.tab.c"
+#line 2644 "y.tab.c"
     break;
 
-  case 75:
-#line 797 "/Users/chet/src/bash/src/parse.y"
+  case 76: /* shell_command: arith_for_command  */
+#line 819 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.command) = (yyvsp[0].command); }
-#line 2619 "y.tab.c"
+#line 2650 "y.tab.c"
     break;
 
-  case 76:
-#line 801 "/Users/chet/src/bash/src/parse.y"
+  case 77: /* for_command: FOR WORD newline_list DO compound_list DONE  */
+#line 823 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          (yyval.command) = make_for_command ((yyvsp[-4].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[-1].command), word_lineno[word_top]);
                          if (word_top > 0) word_top--;
                        }
-#line 2628 "y.tab.c"
+#line 2659 "y.tab.c"
     break;
 
-  case 77:
-#line 806 "/Users/chet/src/bash/src/parse.y"
+  case 78: /* for_command: FOR WORD newline_list '{' compound_list '}'  */
+#line 828 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          (yyval.command) = make_for_command ((yyvsp[-4].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[-1].command), word_lineno[word_top]);
                          if (word_top > 0) word_top--;
                        }
-#line 2637 "y.tab.c"
+#line 2668 "y.tab.c"
     break;
 
-  case 78:
-#line 811 "/Users/chet/src/bash/src/parse.y"
+  case 79: /* for_command: FOR WORD ';' newline_list DO compound_list DONE  */
+#line 833 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          (yyval.command) = make_for_command ((yyvsp[-5].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[-1].command), word_lineno[word_top]);
                          if (word_top > 0) word_top--;
                        }
-#line 2646 "y.tab.c"
+#line 2677 "y.tab.c"
     break;
 
-  case 79:
-#line 816 "/Users/chet/src/bash/src/parse.y"
+  case 80: /* for_command: FOR WORD ';' newline_list '{' compound_list '}'  */
+#line 838 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          (yyval.command) = make_for_command ((yyvsp[-5].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[-1].command), word_lineno[word_top]);
                          if (word_top > 0) word_top--;
                        }
-#line 2655 "y.tab.c"
+#line 2686 "y.tab.c"
     break;
 
-  case 80:
-#line 821 "/Users/chet/src/bash/src/parse.y"
+  case 81: /* for_command: FOR WORD newline_list IN word_list list_terminator newline_list DO compound_list DONE  */
+#line 843 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          (yyval.command) = make_for_command ((yyvsp[-8].word), REVERSE_LIST ((yyvsp[-5].word_list), WORD_LIST *), (yyvsp[-1].command), word_lineno[word_top]);
                          if (word_top > 0) word_top--;
                        }
-#line 2664 "y.tab.c"
+#line 2695 "y.tab.c"
     break;
 
-  case 81:
-#line 826 "/Users/chet/src/bash/src/parse.y"
+  case 82: /* for_command: FOR WORD newline_list IN word_list list_terminator newline_list '{' compound_list '}'  */
+#line 848 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          (yyval.command) = make_for_command ((yyvsp[-8].word), REVERSE_LIST ((yyvsp[-5].word_list), WORD_LIST *), (yyvsp[-1].command), word_lineno[word_top]);
                          if (word_top > 0) word_top--;
                        }
-#line 2673 "y.tab.c"
+#line 2704 "y.tab.c"
     break;
 
-  case 82:
-#line 831 "/Users/chet/src/bash/src/parse.y"
+  case 83: /* for_command: FOR WORD newline_list IN list_terminator newline_list DO compound_list DONE  */
+#line 853 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          (yyval.command) = make_for_command ((yyvsp[-7].word), (WORD_LIST *)NULL, (yyvsp[-1].command), word_lineno[word_top]);
                          if (word_top > 0) word_top--;
                        }
-#line 2682 "y.tab.c"
+#line 2713 "y.tab.c"
     break;
 
-  case 83:
-#line 836 "/Users/chet/src/bash/src/parse.y"
+  case 84: /* for_command: FOR WORD newline_list IN list_terminator newline_list '{' compound_list '}'  */
+#line 858 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          (yyval.command) = make_for_command ((yyvsp[-7].word), (WORD_LIST *)NULL, (yyvsp[-1].command), word_lineno[word_top]);
                          if (word_top > 0) word_top--;
                        }
-#line 2691 "y.tab.c"
+#line 2722 "y.tab.c"
     break;
 
-  case 84:
-#line 843 "/Users/chet/src/bash/src/parse.y"
+  case 85: /* arith_for_command: FOR ARITH_FOR_EXPRS list_terminator newline_list DO compound_list DONE  */
+#line 865 "/usr/local/src/chet/src/bash/src/parse.y"
                                 {
                                  (yyval.command) = make_arith_for_command ((yyvsp[-5].word_list), (yyvsp[-1].command), arith_for_lineno);
                                  if ((yyval.command) == 0) YYERROR;
                                  if (word_top > 0) word_top--;
                                }
-#line 2701 "y.tab.c"
+#line 2732 "y.tab.c"
     break;
 
-  case 85:
-#line 849 "/Users/chet/src/bash/src/parse.y"
+  case 86: /* arith_for_command: FOR ARITH_FOR_EXPRS list_terminator newline_list '{' compound_list '}'  */
+#line 871 "/usr/local/src/chet/src/bash/src/parse.y"
                                 {
                                  (yyval.command) = make_arith_for_command ((yyvsp[-5].word_list), (yyvsp[-1].command), arith_for_lineno);
                                  if ((yyval.command) == 0) YYERROR;
                                  if (word_top > 0) word_top--;
                                }
-#line 2711 "y.tab.c"
+#line 2742 "y.tab.c"
     break;
 
-  case 86:
-#line 855 "/Users/chet/src/bash/src/parse.y"
+  case 87: /* arith_for_command: FOR ARITH_FOR_EXPRS DO compound_list DONE  */
+#line 877 "/usr/local/src/chet/src/bash/src/parse.y"
                                 {
                                  (yyval.command) = make_arith_for_command ((yyvsp[-3].word_list), (yyvsp[-1].command), arith_for_lineno);
                                  if ((yyval.command) == 0) YYERROR;
                                  if (word_top > 0) word_top--;
                                }
-#line 2721 "y.tab.c"
+#line 2752 "y.tab.c"
     break;
 
-  case 87:
-#line 861 "/Users/chet/src/bash/src/parse.y"
+  case 88: /* arith_for_command: FOR ARITH_FOR_EXPRS '{' compound_list '}'  */
+#line 883 "/usr/local/src/chet/src/bash/src/parse.y"
                                 {
                                  (yyval.command) = make_arith_for_command ((yyvsp[-3].word_list), (yyvsp[-1].command), arith_for_lineno);
                                  if ((yyval.command) == 0) YYERROR;
                                  if (word_top > 0) word_top--;
                                }
-#line 2731 "y.tab.c"
+#line 2762 "y.tab.c"
     break;
 
-  case 88:
-#line 869 "/Users/chet/src/bash/src/parse.y"
+  case 89: /* select_command: SELECT WORD newline_list DO compound_list DONE  */
+#line 891 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          (yyval.command) = make_select_command ((yyvsp[-4].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[-1].command), word_lineno[word_top]);
                          if (word_top > 0) word_top--;
                        }
-#line 2740 "y.tab.c"
+#line 2771 "y.tab.c"
     break;
 
-  case 89:
-#line 874 "/Users/chet/src/bash/src/parse.y"
+  case 90: /* select_command: SELECT WORD newline_list '{' compound_list '}'  */
+#line 896 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          (yyval.command) = make_select_command ((yyvsp[-4].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[-1].command), word_lineno[word_top]);
                          if (word_top > 0) word_top--;
                        }
-#line 2749 "y.tab.c"
+#line 2780 "y.tab.c"
     break;
 
-  case 90:
-#line 879 "/Users/chet/src/bash/src/parse.y"
+  case 91: /* select_command: SELECT WORD ';' newline_list DO compound_list DONE  */
+#line 901 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          (yyval.command) = make_select_command ((yyvsp[-5].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[-1].command), word_lineno[word_top]);
                          if (word_top > 0) word_top--;
                        }
-#line 2758 "y.tab.c"
+#line 2789 "y.tab.c"
     break;
 
-  case 91:
-#line 884 "/Users/chet/src/bash/src/parse.y"
+  case 92: /* select_command: SELECT WORD ';' newline_list '{' compound_list '}'  */
+#line 906 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          (yyval.command) = make_select_command ((yyvsp[-5].word), add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), (yyvsp[-1].command), word_lineno[word_top]);
                          if (word_top > 0) word_top--;
                        }
-#line 2767 "y.tab.c"
+#line 2798 "y.tab.c"
     break;
 
-  case 92:
-#line 889 "/Users/chet/src/bash/src/parse.y"
+  case 93: /* select_command: SELECT WORD newline_list IN word_list list_terminator newline_list DO compound_list DONE  */
+#line 911 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          (yyval.command) = make_select_command ((yyvsp[-8].word), REVERSE_LIST ((yyvsp[-5].word_list), WORD_LIST *), (yyvsp[-1].command), word_lineno[word_top]);
                          if (word_top > 0) word_top--;
                        }
-#line 2776 "y.tab.c"
+#line 2807 "y.tab.c"
     break;
 
-  case 93:
-#line 894 "/Users/chet/src/bash/src/parse.y"
+  case 94: /* select_command: SELECT WORD newline_list IN word_list list_terminator newline_list '{' compound_list '}'  */
+#line 916 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          (yyval.command) = make_select_command ((yyvsp[-8].word), REVERSE_LIST ((yyvsp[-5].word_list), WORD_LIST *), (yyvsp[-1].command), word_lineno[word_top]);
                          if (word_top > 0) word_top--;
                        }
-#line 2785 "y.tab.c"
+#line 2816 "y.tab.c"
     break;
 
-  case 94:
-#line 899 "/Users/chet/src/bash/src/parse.y"
+  case 95: /* select_command: SELECT WORD newline_list IN list_terminator newline_list DO compound_list DONE  */
+#line 921 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          (yyval.command) = make_select_command ((yyvsp[-7].word), (WORD_LIST *)NULL, (yyvsp[-1].command), word_lineno[word_top]);
                          if (word_top > 0) word_top--;
                        }
-#line 2794 "y.tab.c"
+#line 2825 "y.tab.c"
     break;
 
-  case 95:
-#line 904 "/Users/chet/src/bash/src/parse.y"
+  case 96: /* select_command: SELECT WORD newline_list IN list_terminator newline_list '{' compound_list '}'  */
+#line 926 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          (yyval.command) = make_select_command ((yyvsp[-7].word), (WORD_LIST *)NULL, (yyvsp[-1].command), word_lineno[word_top]);
                          if (word_top > 0) word_top--;
                        }
-#line 2803 "y.tab.c"
+#line 2834 "y.tab.c"
     break;
 
-  case 96:
-#line 911 "/Users/chet/src/bash/src/parse.y"
+  case 97: /* case_command: CASE WORD newline_list IN newline_list ESAC  */
+#line 933 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          (yyval.command) = make_case_command ((yyvsp[-4].word), (PATTERN_LIST *)NULL, word_lineno[word_top]);
                          if (word_top > 0) word_top--;
                        }
-#line 2812 "y.tab.c"
+#line 2843 "y.tab.c"
     break;
 
-  case 97:
-#line 916 "/Users/chet/src/bash/src/parse.y"
+  case 98: /* case_command: CASE WORD newline_list IN case_clause_sequence newline_list ESAC  */
+#line 938 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          (yyval.command) = make_case_command ((yyvsp[-5].word), (yyvsp[-2].pattern), word_lineno[word_top]);
                          if (word_top > 0) word_top--;
                        }
-#line 2821 "y.tab.c"
+#line 2852 "y.tab.c"
     break;
 
-  case 98:
-#line 921 "/Users/chet/src/bash/src/parse.y"
+  case 99: /* case_command: CASE WORD newline_list IN case_clause ESAC  */
+#line 943 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          (yyval.command) = make_case_command ((yyvsp[-4].word), (yyvsp[-1].pattern), word_lineno[word_top]);
                          if (word_top > 0) word_top--;
                        }
-#line 2830 "y.tab.c"
+#line 2861 "y.tab.c"
     break;
 
-  case 99:
-#line 928 "/Users/chet/src/bash/src/parse.y"
+  case 100: /* function_def: WORD '(' ')' newline_list function_body  */
+#line 950 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.command) = make_function_def ((yyvsp[-4].word), (yyvsp[0].command), function_dstart, function_bstart); }
-#line 2836 "y.tab.c"
+#line 2867 "y.tab.c"
     break;
 
-  case 100:
-#line 930 "/Users/chet/src/bash/src/parse.y"
+  case 101: /* function_def: FUNCTION WORD '(' ')' newline_list function_body  */
+#line 952 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.command) = make_function_def ((yyvsp[-4].word), (yyvsp[0].command), function_dstart, function_bstart); }
-#line 2842 "y.tab.c"
+#line 2873 "y.tab.c"
     break;
 
-  case 101:
-#line 932 "/Users/chet/src/bash/src/parse.y"
+  case 102: /* function_def: FUNCTION WORD function_body  */
+#line 954 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.command) = make_function_def ((yyvsp[-1].word), (yyvsp[0].command), function_dstart, function_bstart); }
-#line 2848 "y.tab.c"
+#line 2879 "y.tab.c"
     break;
 
-  case 102:
-#line 934 "/Users/chet/src/bash/src/parse.y"
+  case 103: /* function_def: FUNCTION WORD '\n' newline_list function_body  */
+#line 956 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.command) = make_function_def ((yyvsp[-3].word), (yyvsp[0].command), function_dstart, function_bstart); }
-#line 2854 "y.tab.c"
+#line 2885 "y.tab.c"
     break;
 
-  case 103:
-#line 938 "/Users/chet/src/bash/src/parse.y"
+  case 104: /* function_body: shell_command  */
+#line 960 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.command) = (yyvsp[0].command); }
-#line 2860 "y.tab.c"
+#line 2891 "y.tab.c"
     break;
 
-  case 104:
-#line 940 "/Users/chet/src/bash/src/parse.y"
+  case 105: /* function_body: shell_command redirection_list  */
+#line 962 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          COMMAND *tc;
 
@@ -2889,29 +2920,45 @@ yyreduce:
                            tc->redirects = (yyvsp[0].redirect);
                          (yyval.command) = (yyvsp[-1].command);
                        }
-#line 2893 "y.tab.c"
+#line 2924 "y.tab.c"
     break;
 
-  case 105:
-#line 971 "/Users/chet/src/bash/src/parse.y"
+  case 106: /* subshell: '(' compound_list ')'  */
+#line 993 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          (yyval.command) = make_subshell_command ((yyvsp[-1].command));
                          (yyval.command)->flags |= CMD_WANT_SUBSHELL;
                        }
-#line 2902 "y.tab.c"
+#line 2933 "y.tab.c"
+    break;
+
+  case 107: /* comsub: DOLPAREN compound_list ')'  */
+#line 1000 "/usr/local/src/chet/src/bash/src/parse.y"
+                        {
+                         (yyval.command) = (yyvsp[-1].command);
+                       }
+#line 2941 "y.tab.c"
+    break;
+
+  case 108: /* comsub: DOLPAREN newline_list ')'  */
+#line 1004 "/usr/local/src/chet/src/bash/src/parse.y"
+                        {
+                         (yyval.command) = (COMMAND *)NULL;
+                       }
+#line 2949 "y.tab.c"
     break;
 
-  case 106:
-#line 978 "/Users/chet/src/bash/src/parse.y"
+  case 109: /* coproc: COPROC shell_command  */
+#line 1010 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          (yyval.command) = make_coproc_command ("COPROC", (yyvsp[0].command));
                          (yyval.command)->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL;
                        }
-#line 2911 "y.tab.c"
+#line 2958 "y.tab.c"
     break;
 
-  case 107:
-#line 983 "/Users/chet/src/bash/src/parse.y"
+  case 110: /* coproc: COPROC shell_command redirection_list  */
+#line 1015 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          COMMAND *tc;
 
@@ -2928,20 +2975,20 @@ yyreduce:
                          (yyval.command) = make_coproc_command ("COPROC", (yyvsp[-1].command));
                          (yyval.command)->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL;
                        }
-#line 2932 "y.tab.c"
+#line 2979 "y.tab.c"
     break;
 
-  case 108:
-#line 1000 "/Users/chet/src/bash/src/parse.y"
+  case 111: /* coproc: COPROC WORD shell_command  */
+#line 1032 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          (yyval.command) = make_coproc_command ((yyvsp[-1].word)->word, (yyvsp[0].command));
                          (yyval.command)->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL;
                        }
-#line 2941 "y.tab.c"
+#line 2988 "y.tab.c"
     break;
 
-  case 109:
-#line 1005 "/Users/chet/src/bash/src/parse.y"
+  case 112: /* coproc: COPROC WORD shell_command redirection_list  */
+#line 1037 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          COMMAND *tc;
 
@@ -2958,355 +3005,366 @@ yyreduce:
                          (yyval.command) = make_coproc_command ((yyvsp[-2].word)->word, (yyvsp[-1].command));
                          (yyval.command)->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL;
                        }
-#line 2962 "y.tab.c"
+#line 3009 "y.tab.c"
     break;
 
-  case 110:
-#line 1022 "/Users/chet/src/bash/src/parse.y"
+  case 113: /* coproc: COPROC simple_command  */
+#line 1054 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          (yyval.command) = make_coproc_command ("COPROC", clean_simple_command ((yyvsp[0].command)));
                          (yyval.command)->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL;
                        }
-#line 2971 "y.tab.c"
+#line 3018 "y.tab.c"
     break;
 
-  case 111:
-#line 1029 "/Users/chet/src/bash/src/parse.y"
+  case 114: /* if_command: IF compound_list THEN compound_list FI  */
+#line 1061 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.command) = make_if_command ((yyvsp[-3].command), (yyvsp[-1].command), (COMMAND *)NULL); }
-#line 2977 "y.tab.c"
+#line 3024 "y.tab.c"
     break;
 
-  case 112:
-#line 1031 "/Users/chet/src/bash/src/parse.y"
+  case 115: /* if_command: IF compound_list THEN compound_list ELSE compound_list FI  */
+#line 1063 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.command) = make_if_command ((yyvsp[-5].command), (yyvsp[-3].command), (yyvsp[-1].command)); }
-#line 2983 "y.tab.c"
+#line 3030 "y.tab.c"
     break;
 
-  case 113:
-#line 1033 "/Users/chet/src/bash/src/parse.y"
+  case 116: /* if_command: IF compound_list THEN compound_list elif_clause FI  */
+#line 1065 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.command) = make_if_command ((yyvsp[-4].command), (yyvsp[-2].command), (yyvsp[-1].command)); }
-#line 2989 "y.tab.c"
+#line 3036 "y.tab.c"
     break;
 
-  case 114:
-#line 1038 "/Users/chet/src/bash/src/parse.y"
+  case 117: /* group_command: '{' compound_list '}'  */
+#line 1070 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.command) = make_group_command ((yyvsp[-1].command)); }
-#line 2995 "y.tab.c"
+#line 3042 "y.tab.c"
     break;
 
-  case 115:
-#line 1042 "/Users/chet/src/bash/src/parse.y"
+  case 118: /* arith_command: ARITH_CMD  */
+#line 1074 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.command) = make_arith_command ((yyvsp[0].word_list)); }
-#line 3001 "y.tab.c"
+#line 3048 "y.tab.c"
     break;
 
-  case 116:
-#line 1046 "/Users/chet/src/bash/src/parse.y"
+  case 119: /* cond_command: COND_START COND_CMD COND_END  */
+#line 1078 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.command) = (yyvsp[-1].command); }
-#line 3007 "y.tab.c"
+#line 3054 "y.tab.c"
     break;
 
-  case 117:
-#line 1050 "/Users/chet/src/bash/src/parse.y"
+  case 120: /* elif_clause: ELIF compound_list THEN compound_list  */
+#line 1082 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.command) = make_if_command ((yyvsp[-2].command), (yyvsp[0].command), (COMMAND *)NULL); }
-#line 3013 "y.tab.c"
+#line 3060 "y.tab.c"
     break;
 
-  case 118:
-#line 1052 "/Users/chet/src/bash/src/parse.y"
+  case 121: /* elif_clause: ELIF compound_list THEN compound_list ELSE compound_list  */
+#line 1084 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.command) = make_if_command ((yyvsp[-4].command), (yyvsp[-2].command), (yyvsp[0].command)); }
-#line 3019 "y.tab.c"
+#line 3066 "y.tab.c"
     break;
 
-  case 119:
-#line 1054 "/Users/chet/src/bash/src/parse.y"
+  case 122: /* elif_clause: ELIF compound_list THEN compound_list elif_clause  */
+#line 1086 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.command) = make_if_command ((yyvsp[-3].command), (yyvsp[-1].command), (yyvsp[0].command)); }
-#line 3025 "y.tab.c"
+#line 3072 "y.tab.c"
     break;
 
-  case 121:
-#line 1059 "/Users/chet/src/bash/src/parse.y"
+  case 124: /* case_clause: case_clause_sequence pattern_list  */
+#line 1091 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyvsp[0].pattern)->next = (yyvsp[-1].pattern); (yyval.pattern) = (yyvsp[0].pattern); }
-#line 3031 "y.tab.c"
+#line 3078 "y.tab.c"
     break;
 
-  case 122:
-#line 1063 "/Users/chet/src/bash/src/parse.y"
+  case 125: /* pattern_list: newline_list pattern ')' compound_list  */
+#line 1095 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.pattern) = make_pattern_list ((yyvsp[-2].word_list), (yyvsp[0].command)); }
-#line 3037 "y.tab.c"
+#line 3084 "y.tab.c"
     break;
 
-  case 123:
-#line 1065 "/Users/chet/src/bash/src/parse.y"
+  case 126: /* pattern_list: newline_list pattern ')' newline_list  */
+#line 1097 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.pattern) = make_pattern_list ((yyvsp[-2].word_list), (COMMAND *)NULL); }
-#line 3043 "y.tab.c"
+#line 3090 "y.tab.c"
     break;
 
-  case 124:
-#line 1067 "/Users/chet/src/bash/src/parse.y"
+  case 127: /* pattern_list: newline_list '(' pattern ')' compound_list  */
+#line 1099 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.pattern) = make_pattern_list ((yyvsp[-2].word_list), (yyvsp[0].command)); }
-#line 3049 "y.tab.c"
+#line 3096 "y.tab.c"
     break;
 
-  case 125:
-#line 1069 "/Users/chet/src/bash/src/parse.y"
+  case 128: /* pattern_list: newline_list '(' pattern ')' newline_list  */
+#line 1101 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.pattern) = make_pattern_list ((yyvsp[-2].word_list), (COMMAND *)NULL); }
-#line 3055 "y.tab.c"
+#line 3102 "y.tab.c"
     break;
 
-  case 126:
-#line 1073 "/Users/chet/src/bash/src/parse.y"
+  case 129: /* case_clause_sequence: pattern_list SEMI_SEMI  */
+#line 1105 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.pattern) = (yyvsp[-1].pattern); }
-#line 3061 "y.tab.c"
+#line 3108 "y.tab.c"
     break;
 
-  case 127:
-#line 1075 "/Users/chet/src/bash/src/parse.y"
+  case 130: /* case_clause_sequence: case_clause_sequence pattern_list SEMI_SEMI  */
+#line 1107 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyvsp[-1].pattern)->next = (yyvsp[-2].pattern); (yyval.pattern) = (yyvsp[-1].pattern); }
-#line 3067 "y.tab.c"
+#line 3114 "y.tab.c"
     break;
 
-  case 128:
-#line 1077 "/Users/chet/src/bash/src/parse.y"
+  case 131: /* case_clause_sequence: pattern_list SEMI_AND  */
+#line 1109 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyvsp[-1].pattern)->flags |= CASEPAT_FALLTHROUGH; (yyval.pattern) = (yyvsp[-1].pattern); }
-#line 3073 "y.tab.c"
+#line 3120 "y.tab.c"
     break;
 
-  case 129:
-#line 1079 "/Users/chet/src/bash/src/parse.y"
+  case 132: /* case_clause_sequence: case_clause_sequence pattern_list SEMI_AND  */
+#line 1111 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyvsp[-1].pattern)->flags |= CASEPAT_FALLTHROUGH; (yyvsp[-1].pattern)->next = (yyvsp[-2].pattern); (yyval.pattern) = (yyvsp[-1].pattern); }
-#line 3079 "y.tab.c"
+#line 3126 "y.tab.c"
     break;
 
-  case 130:
-#line 1081 "/Users/chet/src/bash/src/parse.y"
+  case 133: /* case_clause_sequence: pattern_list SEMI_SEMI_AND  */
+#line 1113 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyvsp[-1].pattern)->flags |= CASEPAT_TESTNEXT; (yyval.pattern) = (yyvsp[-1].pattern); }
-#line 3085 "y.tab.c"
+#line 3132 "y.tab.c"
     break;
 
-  case 131:
-#line 1083 "/Users/chet/src/bash/src/parse.y"
+  case 134: /* case_clause_sequence: case_clause_sequence pattern_list SEMI_SEMI_AND  */
+#line 1115 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyvsp[-1].pattern)->flags |= CASEPAT_TESTNEXT; (yyvsp[-1].pattern)->next = (yyvsp[-2].pattern); (yyval.pattern) = (yyvsp[-1].pattern); }
-#line 3091 "y.tab.c"
+#line 3138 "y.tab.c"
     break;
 
-  case 132:
-#line 1087 "/Users/chet/src/bash/src/parse.y"
+  case 135: /* pattern: WORD  */
+#line 1119 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.word_list) = make_word_list ((yyvsp[0].word), (WORD_LIST *)NULL); }
-#line 3097 "y.tab.c"
+#line 3144 "y.tab.c"
     break;
 
-  case 133:
-#line 1089 "/Users/chet/src/bash/src/parse.y"
+  case 136: /* pattern: pattern '|' WORD  */
+#line 1121 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.word_list) = make_word_list ((yyvsp[0].word), (yyvsp[-2].word_list)); }
-#line 3103 "y.tab.c"
+#line 3150 "y.tab.c"
     break;
 
-  case 134:
-#line 1098 "/Users/chet/src/bash/src/parse.y"
+  case 137: /* compound_list: newline_list list0  */
+#line 1130 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          (yyval.command) = (yyvsp[0].command);
-                         if (need_here_doc)
+                         if (need_here_doc && last_read_token == '\n')
                            gather_here_documents ();
                         }
-#line 3113 "y.tab.c"
+#line 3160 "y.tab.c"
     break;
 
-  case 136:
-#line 1107 "/Users/chet/src/bash/src/parse.y"
+  case 138: /* compound_list: newline_list list1  */
+#line 1136 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          (yyval.command) = (yyvsp[0].command);
                        }
-#line 3121 "y.tab.c"
+#line 3168 "y.tab.c"
     break;
 
-  case 138:
-#line 1114 "/Users/chet/src/bash/src/parse.y"
+  case 140: /* list0: list1 '&' newline_list  */
+#line 1143 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          if ((yyvsp[-2].command)->type == cm_connection)
                            (yyval.command) = connect_async_list ((yyvsp[-2].command), (COMMAND *)NULL, '&');
                          else
                            (yyval.command) = command_connect ((yyvsp[-2].command), (COMMAND *)NULL, '&');
                        }
-#line 3132 "y.tab.c"
+#line 3179 "y.tab.c"
     break;
 
-  case 140:
-#line 1125 "/Users/chet/src/bash/src/parse.y"
+  case 142: /* list1: list1 AND_AND newline_list list1  */
+#line 1154 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.command) = command_connect ((yyvsp[-3].command), (yyvsp[0].command), AND_AND); }
-#line 3138 "y.tab.c"
+#line 3185 "y.tab.c"
     break;
 
-  case 141:
-#line 1127 "/Users/chet/src/bash/src/parse.y"
+  case 143: /* list1: list1 OR_OR newline_list list1  */
+#line 1156 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.command) = command_connect ((yyvsp[-3].command), (yyvsp[0].command), OR_OR); }
-#line 3144 "y.tab.c"
+#line 3191 "y.tab.c"
     break;
 
-  case 142:
-#line 1129 "/Users/chet/src/bash/src/parse.y"
+  case 144: /* list1: list1 '&' newline_list list1  */
+#line 1158 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          if ((yyvsp[-3].command)->type == cm_connection)
                            (yyval.command) = connect_async_list ((yyvsp[-3].command), (yyvsp[0].command), '&');
                          else
                            (yyval.command) = command_connect ((yyvsp[-3].command), (yyvsp[0].command), '&');
                        }
-#line 3155 "y.tab.c"
+#line 3202 "y.tab.c"
     break;
 
-  case 143:
-#line 1136 "/Users/chet/src/bash/src/parse.y"
+  case 145: /* list1: list1 ';' newline_list list1  */
+#line 1165 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.command) = command_connect ((yyvsp[-3].command), (yyvsp[0].command), ';'); }
-#line 3161 "y.tab.c"
+#line 3208 "y.tab.c"
     break;
 
-  case 144:
-#line 1138 "/Users/chet/src/bash/src/parse.y"
-                        { (yyval.command) = command_connect ((yyvsp[-3].command), (yyvsp[0].command), ';'); }
-#line 3167 "y.tab.c"
+  case 146: /* list1: list1 '\n' newline_list list1  */
+#line 1167 "/usr/local/src/chet/src/bash/src/parse.y"
+                        {
+                         if (parser_state & PST_CMDSUBST)
+                           (yyval.command) = command_connect ((yyvsp[-3].command), (yyvsp[0].command), '\n');
+                         else
+                           (yyval.command) = command_connect ((yyvsp[-3].command), (yyvsp[0].command), ';');
+                       }
+#line 3219 "y.tab.c"
     break;
 
-  case 145:
-#line 1140 "/Users/chet/src/bash/src/parse.y"
+  case 147: /* list1: pipeline_command  */
+#line 1174 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.command) = (yyvsp[0].command); }
-#line 3173 "y.tab.c"
+#line 3225 "y.tab.c"
     break;
 
-  case 148:
-#line 1148 "/Users/chet/src/bash/src/parse.y"
+  case 150: /* list_terminator: '\n'  */
+#line 1182 "/usr/local/src/chet/src/bash/src/parse.y"
                 { (yyval.number) = '\n'; }
-#line 3179 "y.tab.c"
+#line 3231 "y.tab.c"
     break;
 
-  case 149:
-#line 1150 "/Users/chet/src/bash/src/parse.y"
+  case 151: /* list_terminator: ';'  */
+#line 1184 "/usr/local/src/chet/src/bash/src/parse.y"
                 { (yyval.number) = ';'; }
-#line 3185 "y.tab.c"
+#line 3237 "y.tab.c"
     break;
 
-  case 150:
-#line 1152 "/Users/chet/src/bash/src/parse.y"
+  case 152: /* list_terminator: yacc_EOF  */
+#line 1186 "/usr/local/src/chet/src/bash/src/parse.y"
                 { (yyval.number) = yacc_EOF; }
-#line 3191 "y.tab.c"
+#line 3243 "y.tab.c"
     break;
 
-  case 153:
-#line 1166 "/Users/chet/src/bash/src/parse.y"
+  case 155: /* simple_list: simple_list1  */
+#line 1200 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          (yyval.command) = (yyvsp[0].command);
                          if (need_here_doc)
-                           gather_here_documents ();
+                           gather_here_documents ();   /* XXX */
                          if ((parser_state & PST_CMDSUBST) && current_token == shell_eof_token)
                            {
+INTERNAL_DEBUG (("LEGACY: parser: command substitution simple_list1 -> simple_list"));
                              global_command = (yyvsp[0].command);
                              eof_encountered = 0;
-                             rewind_input_string ();
+                             if (bash_input.type == st_string)
+                               rewind_input_string ();
                              YYACCEPT;
                            }
                        }
-#line 3208 "y.tab.c"
+#line 3262 "y.tab.c"
     break;
 
-  case 154:
-#line 1179 "/Users/chet/src/bash/src/parse.y"
+  case 156: /* simple_list: simple_list1 '&'  */
+#line 1215 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          if ((yyvsp[-1].command)->type == cm_connection)
                            (yyval.command) = connect_async_list ((yyvsp[-1].command), (COMMAND *)NULL, '&');
                          else
                            (yyval.command) = command_connect ((yyvsp[-1].command), (COMMAND *)NULL, '&');
                          if (need_here_doc)
-                           gather_here_documents ();
+                           gather_here_documents (); /* XXX */
                          if ((parser_state & PST_CMDSUBST) && current_token == shell_eof_token)
                            {
+INTERNAL_DEBUG (("LEGACY: parser: command substitution simple_list1 '&' -> simple_list"));
                              global_command = (yyvsp[-1].command);
                              eof_encountered = 0;
-                             rewind_input_string ();
+                             if (bash_input.type == st_string)
+                               rewind_input_string ();
                              YYACCEPT;
                            }
                        }
-#line 3228 "y.tab.c"
+#line 3284 "y.tab.c"
     break;
 
-  case 155:
-#line 1195 "/Users/chet/src/bash/src/parse.y"
+  case 157: /* simple_list: simple_list1 ';'  */
+#line 1233 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          (yyval.command) = (yyvsp[-1].command);
                          if (need_here_doc)
-                           gather_here_documents ();
+                           gather_here_documents ();   /* XXX */
                          if ((parser_state & PST_CMDSUBST) && current_token == shell_eof_token)
                            {
+INTERNAL_DEBUG (("LEGACY: parser: command substitution simple_list1 ';' -> simple_list"));
                              global_command = (yyvsp[-1].command);
                              eof_encountered = 0;
-                             rewind_input_string ();
+                             if (bash_input.type == st_string)
+                               rewind_input_string ();
                              YYACCEPT;
                            }
                        }
-#line 3245 "y.tab.c"
+#line 3303 "y.tab.c"
     break;
 
-  case 156:
-#line 1210 "/Users/chet/src/bash/src/parse.y"
+  case 158: /* simple_list1: simple_list1 AND_AND newline_list simple_list1  */
+#line 1250 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.command) = command_connect ((yyvsp[-3].command), (yyvsp[0].command), AND_AND); }
-#line 3251 "y.tab.c"
+#line 3309 "y.tab.c"
     break;
 
-  case 157:
-#line 1212 "/Users/chet/src/bash/src/parse.y"
+  case 159: /* simple_list1: simple_list1 OR_OR newline_list simple_list1  */
+#line 1252 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.command) = command_connect ((yyvsp[-3].command), (yyvsp[0].command), OR_OR); }
-#line 3257 "y.tab.c"
+#line 3315 "y.tab.c"
     break;
 
-  case 158:
-#line 1214 "/Users/chet/src/bash/src/parse.y"
+  case 160: /* simple_list1: simple_list1 '&' simple_list1  */
+#line 1254 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          if ((yyvsp[-2].command)->type == cm_connection)
                            (yyval.command) = connect_async_list ((yyvsp[-2].command), (yyvsp[0].command), '&');
                          else
                            (yyval.command) = command_connect ((yyvsp[-2].command), (yyvsp[0].command), '&');
                        }
-#line 3268 "y.tab.c"
+#line 3326 "y.tab.c"
     break;
 
-  case 159:
-#line 1221 "/Users/chet/src/bash/src/parse.y"
+  case 161: /* simple_list1: simple_list1 ';' simple_list1  */
+#line 1261 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.command) = command_connect ((yyvsp[-2].command), (yyvsp[0].command), ';'); }
-#line 3274 "y.tab.c"
+#line 3332 "y.tab.c"
     break;
 
-  case 160:
-#line 1224 "/Users/chet/src/bash/src/parse.y"
+  case 162: /* simple_list1: pipeline_command  */
+#line 1264 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.command) = (yyvsp[0].command); }
-#line 3280 "y.tab.c"
+#line 3338 "y.tab.c"
     break;
 
-  case 161:
-#line 1228 "/Users/chet/src/bash/src/parse.y"
+  case 163: /* pipeline_command: pipeline  */
+#line 1268 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.command) = (yyvsp[0].command); }
-#line 3286 "y.tab.c"
+#line 3344 "y.tab.c"
     break;
 
-  case 162:
-#line 1230 "/Users/chet/src/bash/src/parse.y"
+  case 164: /* pipeline_command: BANG pipeline_command  */
+#line 1270 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          if ((yyvsp[0].command))
                            (yyvsp[0].command)->flags ^= CMD_INVERT_RETURN;     /* toggle */
                          (yyval.command) = (yyvsp[0].command);
                        }
-#line 3296 "y.tab.c"
+#line 3354 "y.tab.c"
     break;
 
-  case 163:
-#line 1236 "/Users/chet/src/bash/src/parse.y"
+  case 165: /* pipeline_command: timespec pipeline_command  */
+#line 1276 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          if ((yyvsp[0].command))
                            (yyvsp[0].command)->flags |= (yyvsp[-1].number);
                          (yyval.command) = (yyvsp[0].command);
                        }
-#line 3306 "y.tab.c"
+#line 3364 "y.tab.c"
     break;
 
-  case 164:
-#line 1242 "/Users/chet/src/bash/src/parse.y"
+  case 166: /* pipeline_command: timespec list_terminator  */
+#line 1282 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          ELEMENT x;
 
@@ -3326,11 +3384,11 @@ yyreduce:
                            token_to_read = ';';
                          parser_state &= ~PST_REDIRLIST;       /* make_simple_command sets this */
                        }
-#line 3330 "y.tab.c"
+#line 3388 "y.tab.c"
     break;
 
-  case 165:
-#line 1262 "/Users/chet/src/bash/src/parse.y"
+  case 167: /* pipeline_command: BANG list_terminator  */
+#line 1302 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          ELEMENT x;
 
@@ -3351,17 +3409,17 @@ yyreduce:
                            token_to_read = ';';
                          parser_state &= ~PST_REDIRLIST;       /* make_simple_command sets this */
                        }
-#line 3355 "y.tab.c"
+#line 3413 "y.tab.c"
     break;
 
-  case 166:
-#line 1285 "/Users/chet/src/bash/src/parse.y"
+  case 168: /* pipeline: pipeline '|' newline_list pipeline  */
+#line 1325 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.command) = command_connect ((yyvsp[-3].command), (yyvsp[0].command), '|'); }
-#line 3361 "y.tab.c"
+#line 3419 "y.tab.c"
     break;
 
-  case 167:
-#line 1287 "/Users/chet/src/bash/src/parse.y"
+  case 169: /* pipeline: pipeline BAR_AND newline_list pipeline  */
+#line 1327 "/usr/local/src/chet/src/bash/src/parse.y"
                         {
                          /* Make cmd1 |& cmd2 equivalent to cmd1 2>&1 | cmd2 */
                          COMMAND *tc;
@@ -3384,41 +3442,41 @@ yyreduce:
 
                          (yyval.command) = command_connect ((yyvsp[-3].command), (yyvsp[0].command), '|');
                        }
-#line 3388 "y.tab.c"
+#line 3446 "y.tab.c"
     break;
 
-  case 168:
-#line 1310 "/Users/chet/src/bash/src/parse.y"
+  case 170: /* pipeline: command  */
+#line 1350 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.command) = (yyvsp[0].command); }
-#line 3394 "y.tab.c"
+#line 3452 "y.tab.c"
     break;
 
-  case 169:
-#line 1314 "/Users/chet/src/bash/src/parse.y"
+  case 171: /* timespec: TIME  */
+#line 1354 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.number) = CMD_TIME_PIPELINE; }
-#line 3400 "y.tab.c"
+#line 3458 "y.tab.c"
     break;
 
-  case 170:
-#line 1316 "/Users/chet/src/bash/src/parse.y"
+  case 172: /* timespec: TIME TIMEOPT  */
+#line 1356 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; }
-#line 3406 "y.tab.c"
+#line 3464 "y.tab.c"
     break;
 
-  case 171:
-#line 1318 "/Users/chet/src/bash/src/parse.y"
+  case 173: /* timespec: TIME TIMEIGN  */
+#line 1358 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; }
-#line 3412 "y.tab.c"
+#line 3470 "y.tab.c"
     break;
 
-  case 172:
-#line 1320 "/Users/chet/src/bash/src/parse.y"
+  case 174: /* timespec: TIME TIMEOPT TIMEIGN  */
+#line 1360 "/usr/local/src/chet/src/bash/src/parse.y"
                         { (yyval.number) = CMD_TIME_PIPELINE|CMD_TIME_POSIX; }
-#line 3418 "y.tab.c"
+#line 3476 "y.tab.c"
     break;
 
 
-#line 3422 "y.tab.c"
+#line 3480 "y.tab.c"
 
       default: break;
     }
@@ -3500,6 +3558,7 @@ yyerrorlab:
      label yyerrorlab therefore never appears in user code.  */
   if (0)
     YYERROR;
+  ++yynerrs;
 
   /* Do not reclaim the symbols of the rule whose action triggered
      this YYERROR.  */
@@ -3560,7 +3619,7 @@ yyerrlab1:
 `-------------------------------------*/
 yyacceptlab:
   yyresult = 0;
-  goto yyreturn;
+  goto yyreturnlab;
 
 
 /*-----------------------------------.
@@ -3568,24 +3627,22 @@ yyacceptlab:
 `-----------------------------------*/
 yyabortlab:
   yyresult = 1;
-  goto yyreturn;
+  goto yyreturnlab;
 
 
-#if !defined yyoverflow
-/*-------------------------------------------------.
-| yyexhaustedlab -- memory exhaustion comes here.  |
-`-------------------------------------------------*/
+/*-----------------------------------------------------------.
+| yyexhaustedlab -- YYNOMEM (memory exhaustion) comes here.  |
+`-----------------------------------------------------------*/
 yyexhaustedlab:
   yyerror (YY_("memory exhausted"));
   yyresult = 2;
-  /* Fall through.  */
-#endif
+  goto yyreturnlab;
 
 
-/*-----------------------------------------------------.
-| yyreturn -- parsing is finished, return the result.  |
-`-----------------------------------------------------*/
-yyreturn:
+/*----------------------------------------------------------.
+| yyreturnlab -- parsing is finished, clean up and return.  |
+`----------------------------------------------------------*/
+yyreturnlab:
   if (yychar != YYEMPTY)
     {
       /* Make sure we have latest lookahead translation.  See comments at
@@ -3612,7 +3669,7 @@ yyreturn:
   return yyresult;
 }
 
-#line 1322 "/Users/chet/src/bash/src/parse.y"
+#line 1362 "/usr/local/src/chet/src/bash/src/parse.y"
 
 
 /* Initial size to allocate for tokens, and the
@@ -3908,7 +3965,7 @@ with_input_from_string (string, name)
    That is the true input location.  Rewind bash_input.location.string by
    that number of characters, so it points to the last character actually
    consumed by the parser. */
-static void
+void
 rewind_input_string ()
 {
   int xchars;
@@ -3920,7 +3977,7 @@ rewind_input_string ()
     xchars++;
 
   /* XXX - how to reflect bash_input.location.string back to string passed to
-     parse_and_execute or xparse_dolparen?  xparse_dolparen needs to know how
+     parse_and_execute or xparse_dolparen? xparse_dolparen needs to know how
      far into the string we parsed.  parse_and_execute knows where bash_input.
      location.string is, and how far from orig_string that is -- that's the
      number of characters the command consumed. */
@@ -4117,8 +4174,6 @@ restore_token_state (ts)
  *     everything between a `;;' and the next `)' or `esac'
  */
 
-#if defined (ALIAS) || defined (DPAREN_ARITHMETIC)
-
 #define END_OF_ALIAS 0
 
 /*
@@ -4142,7 +4197,7 @@ typedef struct string_saver {
 #if defined (ALIAS)
   alias_t *expander;   /* alias that caused this line to be pushed. */
 #endif
-  size_t saved_line_size, saved_line_index;
+  size_t saved_line_size, saved_line_index, saved_line_len;
   int saved_line_terminator;
   int flags;
 } STRING_SAVER;
@@ -4168,6 +4223,7 @@ push_string (s, expand, ap)
   temp->expand_alias = expand;
   temp->saved_line = shell_input_line;
   temp->saved_line_size = shell_input_line_size;
+  temp->saved_line_len = shell_input_line_len;
   temp->saved_line_index = shell_input_line_index;
   temp->saved_line_terminator = shell_input_line_terminator;
   temp->flags = 0;
@@ -4185,7 +4241,7 @@ push_string (s, expand, ap)
 #endif
 
   shell_input_line = s;
-  shell_input_line_size = STRLEN (s);
+  shell_input_line_size = shell_input_line_len = STRLEN (s);
   shell_input_line_index = 0;
   shell_input_line_terminator = '\0';
 #if 0
@@ -4210,12 +4266,15 @@ pop_string ()
   shell_input_line = pushed_string_list->saved_line;
   shell_input_line_index = pushed_string_list->saved_line_index;
   shell_input_line_size = pushed_string_list->saved_line_size;
+  shell_input_line_len = pushed_string_list->saved_line_len;
   shell_input_line_terminator = pushed_string_list->saved_line_terminator;
 
+#if defined (ALIAS)
   if (pushed_string_list->expand_alias)
     parser_state |= PST_ALEXPNEXT;
   else
     parser_state &= ~PST_ALEXPNEXT;
+#endif
 
   t = pushed_string_list;
   pushed_string_list = pushed_string_list->next;
@@ -4249,8 +4308,6 @@ free_string_list ()
   pushed_string_list = (STRING_SAVER *)NULL;
 }
 
-#endif /* ALIAS || DPAREN_ARITHMETIC */
-
 void
 free_pushed_string_input ()
 {
@@ -4340,12 +4397,7 @@ read_a_line (remove_quoted_newline)
 
       /* Ignore null bytes in input. */
       if (c == 0)
-       {
-#if 0
-         internal_warning ("read_a_line: ignored null byte in input");
-#endif
-         continue;
-       }
+       continue;
 
       /* If there is no more input, then we return NULL. */
       if (c == EOF)
@@ -4419,8 +4471,8 @@ read_secondary_line (remove_quoted_newline)
   int n, c;
 
   prompt_string_pointer = &ps2_prompt;
-  if (SHOULD_PROMPT())
-    prompt_again ();
+  if (SHOULD_PROMPT ())
+    prompt_again (0);
   ret = read_a_line (remove_quoted_newline);
 #if defined (HISTORY)
   if (ret && remember_on_history && (parser_state & PST_HEREDOC))
@@ -4656,9 +4708,6 @@ shell_getc (remove_quoted_newline)
 
          if (c == '\0')
            {
-#if 0
-             internal_warning ("shell_getc: ignored null byte in input");
-#endif
              /* If we get EOS while parsing a string, treat it as EOF so we
                 don't just keep looping. Happens very rarely */
              if (bash_input.type == st_string)
@@ -4805,7 +4854,7 @@ shell_getc (remove_quoted_newline)
          shell_input_line_size = 0;
          prompt_string_pointer = &current_prompt_string;
          if (SHOULD_PROMPT ())
-           prompt_again ();
+           prompt_again (0);
          goto restart_read;
        }
 
@@ -4827,21 +4876,12 @@ shell_getc (remove_quoted_newline)
            shell_input_line[shell_input_line_len] = '\n';
          shell_input_line[shell_input_line_len + 1] = '\0';
 
-#if 0
-         set_line_mbstate ();          /* XXX - this is wasteful */
-#else
-#  if defined (HANDLE_MULTIBYTE)
+#if defined (HANDLE_MULTIBYTE)
          /* This is kind of an abstraction violation, but there's no need to
             go through the entire shell_input_line again with a call to
             set_line_mbstate(). */
-         if (shell_input_line_len + 2 > shell_input_line_propsize)
-           {
-             shell_input_line_propsize = shell_input_line_len + 2;
-             shell_input_line_property = (char *)xrealloc (shell_input_line_property,
-                                                           shell_input_line_propsize);
-           }
+         EXTEND_SHELL_INPUT_LINE_PROPERTY();
          shell_input_line_property[shell_input_line_len] = 1;
-#  endif
 #endif
        }
     }
@@ -4894,12 +4934,29 @@ next_alias_char:
       (current_delimiter (dstack) != '\'' && current_delimiter (dstack) != '"'))
     {
       parser_state |= PST_ENDALIAS;
+      /* We need to do this to make sure last_shell_getc_is_singlebyte returns
+        true, since we are returning a single-byte space. */
+      if (shell_input_line_index == shell_input_line_len && last_shell_getc_is_singlebyte == 0)
+       {
+#if 0
+         EXTEND_SHELL_INPUT_LINE_PROPERTY();
+         shell_input_line_property[shell_input_line_len++] = 1;
+         /* extend shell_input_line to accommodate the shell_ungetc that
+            read_token_word() will perform, since we're extending the index */
+         RESIZE_MALLOCED_BUFFER (shell_input_line, shell_input_line_index, 2, shell_input_line_size, 16);
+          shell_input_line[++shell_input_line_index] = '\0';   /* XXX */
+#else
+         shell_input_line_property[shell_input_line_index - 1] = 1;
+#endif
+       }
       return ' ';      /* END_ALIAS */
     }
 #endif
 
 pop_alias:
-  /* This case works for PSH_DPAREN as well */
+#endif /* ALIAS || DPAREN_ARITHMETIC */
+  /* This case works for PSH_DPAREN as well as the shell_ungets() case that uses
+     push_string */
   if (uc == 0 && pushed_string_list && pushed_string_list->flags != PSH_SOURCE)
     {
       parser_state &= ~PST_ENDALIAS;
@@ -4908,12 +4965,11 @@ pop_alias:
       if (uc)
        shell_input_line_index++;
     }
-#endif /* ALIAS || DPAREN_ARITHMETIC */
 
   if MBTEST(uc == '\\' && remove_quoted_newline && shell_input_line[shell_input_line_index] == '\n')
     {
        if (SHOULD_PROMPT ())
-         prompt_again ();
+         prompt_again (0);
        line_number++;
 
        /* What do we do here if we're expanding an alias whose definition
@@ -4981,6 +5037,60 @@ shell_ungetc (c)
     eol_ungetc_lookahead = c;
 }
 
+/* Push S back into shell_input_line; updating shell_input_line_index */
+void
+shell_ungets (s)
+     char *s;
+{
+  size_t slen, chars_left;
+
+  slen = strlen (s);
+
+  if (shell_input_line[shell_input_line_index] == '\0')
+    {
+      /* Easy, just overwrite shell_input_line. This is preferred because it
+        saves on set_line_mbstate () and other overhead like push_string */
+      if (shell_input_line_size <= slen)
+       RESIZE_MALLOCED_BUFFER (shell_input_line, shell_input_line_index, slen + 1, shell_input_line_size, 64);
+      strcpy (shell_input_line, s);
+      shell_input_line_index = 0;
+      shell_input_line_len = slen;
+      shell_input_line_terminator = 0;
+    }
+  else if (shell_input_line_index >= slen)
+    {
+      /* Just as easy, just back up shell_input_line_index, but it means we
+        will re-process some characters in set_line_mbstate(). Need to
+        watch pushing back newlines here. */
+      while (slen > 0)
+        shell_input_line[--shell_input_line_index] = s[--slen];
+    }
+  else if (s[slen - 1] == '\n')
+    {
+      push_string (savestring (s), 0, (alias_t *)NULL);
+      /* push_string does set_line_mbstate () */
+      return;
+    }
+  else
+    {
+      /* Harder case: pushing back input string that's longer than what we've
+        consumed from shell_input_line so far. */
+      INTERNAL_DEBUG (("shell_ungets: not at end of shell_input_line"));
+
+      chars_left = shell_input_line_len - shell_input_line_index;
+      if (shell_input_line_size <= (slen + chars_left))
+       RESIZE_MALLOCED_BUFFER (shell_input_line, shell_input_line_index, chars_left + slen + 1, shell_input_line_size, 64);
+      memmove (shell_input_line + slen, shell_input_line + shell_input_line_index, shell_input_line_len - shell_input_line_index);
+      strcpy (shell_input_line, s);
+      shell_input_line_index = 0;
+      shell_input_line_len = strlen (shell_input_line);        /* chars_left + slen? */
+    }
+
+#if defined (HANDLE_MULTIBYTE)
+  set_line_mbstate (); /* XXX */
+#endif
+}
+
 char *
 parser_remaining_input ()
 {
@@ -5054,7 +5164,7 @@ push_token (x)
 static char *token = (char *)NULL;
 
 /* Current size of the token buffer. */
-static int token_buffer_size;
+static size_t token_buffer_size;
 
 /* Command to read_token () explaining what we want it to do. */
 #define READ 0
@@ -5082,7 +5192,7 @@ yylex ()
       /* Avoid printing a prompt if we're not going to read anything, e.g.
         after resetting the parser with read_token (RESET). */
       if (token_to_read == 0 && SHOULD_PROMPT ())
-       prompt_again ();
+       prompt_again (0);
     }
 
   two_tokens_ago = token_before_that;
@@ -5092,11 +5202,16 @@ yylex ()
 
   if ((parser_state & PST_EOFTOKEN) && current_token == shell_eof_token)
     {
-      current_token = yacc_EOF;
-      if (bash_input.type == st_string)
-       rewind_input_string ();
+      /* placeholder for any special handling. */
+      return (current_token);
     }
-  parser_state &= ~PST_EOFTOKEN;       /* ??? */
+
+  if (current_token < 0)
+#if defined (YYERRCODE) && !defined (YYUNDEF)
+    current_token = YYERRCODE;
+#else
+    current_token = YYerror;
+#endif
 
   return (current_token);
 }
@@ -5187,9 +5302,12 @@ static int open_brace_count;
                break; \
              if ((parser_state & PST_CASEPAT) && last_read_token == '|' && word_token_alist[i].token == ESAC) \
                break; /* Posix grammar rule 4 */ \
-             if (word_token_alist[i].token == ESAC) \
+             if ((parser_state & PST_CASEPAT) && last_read_token == '(' && word_token_alist[i].token == ESAC) /*)*/ \
+               break; /* phantom Posix grammar rule 4 */ \
+             if (word_token_alist[i].token == ESAC) { \
                parser_state &= ~(PST_CASEPAT|PST_CASESTMT); \
-             else if (word_token_alist[i].token == CASE) \
+               esacs_needed_count--; \
+             } else if (word_token_alist[i].token == CASE) \
                parser_state |= PST_CASESTMT; \
              else if (word_token_alist[i].token == COND_END) \
                parser_state &= ~(PST_CONDCMD|PST_CONDEXPR); \
@@ -5249,8 +5367,12 @@ alias_expand_token (tokstr)
   char *expanded;
   alias_t *ap;
 
+#if 0
   if (((parser_state & PST_ALEXPNEXT) || command_token_position (last_read_token)) &&
        (parser_state & PST_CASEPAT) == 0)
+#else
+  if ((parser_state & PST_ALEXPNEXT) || assignment_acceptable (last_read_token))
+#endif
     {
       ap = find_alias (tokstr);
 
@@ -5492,7 +5614,7 @@ reset_parser ()
 
 #if defined (EXTENDED_GLOB)
   /* Reset to global value of extended glob */
-  if (parser_state & PST_EXTPAT)
+  if (parser_state & (PST_EXTPAT|PST_CMDSUBST))
     extended_glob = global_extglob;
 #endif
 
@@ -5517,6 +5639,11 @@ reset_parser ()
 
   eol_ungetc_lookahead = 0;
 
+  /* added post-bash-5.1 */
+  need_here_doc = 0;
+  redir_stack[0] = 0;
+  esacs_needed_count = expecting_in_token = 0;
+
   current_token = '\n';                /* XXX */
   last_read_token = '\n';
   token_to_read = '\n';
@@ -5594,9 +5721,7 @@ read_token (command)
      we are eval'ing a string that is an incomplete command), return EOF */
   if (character == '\0' && bash_input.type == st_string && expanding_alias() == 0)
     {
-#if defined (DEBUG)
-itrace("shell_getc: bash_input.location.string = `%s'", bash_input.location.string);
-#endif
+      INTERNAL_DEBUG (("shell_getc: bash_input.location.string = `%s'", bash_input.location.string));
       EOF_Reached = 1;
       return (yacc_EOF);
     }
@@ -5611,7 +5736,7 @@ itrace("shell_getc: bash_input.location.string = `%s'", bash_input.location.stri
       character = '\n';        /* this will take the next if statement and return. */
     }
 
-  if (character == '\n')
+  if MBTEST(character == '\n')
     {
       /* If we're about to return an unquoted newline, we can go and collect
         the text of any pending here document. */
@@ -5631,7 +5756,7 @@ itrace("shell_getc: bash_input.location.string = `%s'", bash_input.location.stri
     goto tokword;
 
   /* Shell meta-characters. */
-  if MBTEST(shellmeta (character) && ((parser_state & PST_DBLPAREN) == 0))
+  if MBTEST(shellmeta (character))
     {
 #if defined (ALIAS)
       /* Turn off alias tokenization iff this character sequence would
@@ -5652,7 +5777,7 @@ itrace("shell_getc: bash_input.location.string = `%s'", bash_input.location.stri
       else
        peek_char = shell_getc (1);
 
-      if (character == peek_char)
+      if MBTEST(character == peek_char)
        {
          switch (character)
            {
@@ -5811,6 +5936,9 @@ tokword:
 #define LEX_QUOTEDDOC  0x0400          /* here doc with quoted delim */
 #define LEX_INWORD     0x0800
 #define LEX_GTLT       0x1000
+#define LEX_CKESAC     0x2000          /* check esac after in -- for later */
+#define LEX_CASEWD     0x4000          /* word after case */
+#define LEX_PATLIST    0x8000          /* case statement pattern list */
 
 #define COMSUB_META(ch)                ((ch) == ';' || (ch) == '&' || (ch) == '|')
 
@@ -5878,8 +6006,8 @@ parse_matched_pair (qc, open, close, lenp, flags)
        }
 
       /* Possible reprompting. */
-      if (ch == '\n' && SHOULD_PROMPT ())
-       prompt_again ();
+      if MBTEST(ch == '\n' && SHOULD_PROMPT ())
+       prompt_again (0);
 
       /* Don't bother counting parens or doing anything else if in a comment
         or part of a case statement */
@@ -5889,7 +6017,7 @@ parse_matched_pair (qc, open, close, lenp, flags)
          RESIZE_MALLOCED_BUFFER (ret, retind, 1, retsize, 64);
          ret[retind++] = ch;
 
-         if (ch == '\n')
+         if MBTEST(ch == '\n')
            tflags &= ~LEX_INCOMMENT;
 
          continue;
@@ -5904,7 +6032,8 @@ parse_matched_pair (qc, open, close, lenp, flags)
       if (tflags & LEX_PASSNEXT)               /* last char was backslash */
        {
          tflags &= ~LEX_PASSNEXT;
-         if (qc != '\'' && ch == '\n') /* double-quoted \<newline> disappears. */
+         /* XXX - PST_NOEXPAND? */
+         if MBTEST(qc != '\'' && ch == '\n')   /* double-quoted \<newline> disappears. */
            {
              if (retind > 0)
                retind--;       /* swallow previously-added backslash */
@@ -6013,9 +6142,10 @@ parse_matched_pair (qc, open, close, lenp, flags)
              pop_delimiter (dstack);
              CHECK_NESTRET_ERROR ();
 
-             if MBTEST((tflags & LEX_WASDOL) && ch == '\'' && (extended_quote || (rflags & P_DQUOTE) == 0))
+             if MBTEST((tflags & LEX_WASDOL) && ch == '\'' && (extended_quote || (rflags & P_DQUOTE) == 0 || dolbrace_state == DOLBRACE_QUOTE || dolbrace_state == DOLBRACE_QUOTE2))
                {
                  /* Translate $'...' here. */
+                 /* PST_NOEXPAND */
                  ttrans = ansiexpand (nestret, 0, nestlen - 1, &ttranslen);
                  free (nestret);
 
@@ -6024,12 +6154,22 @@ parse_matched_pair (qc, open, close, lenp, flags)
                     make sure we single-quote the results of the ansi
                     expansion because quote removal should remove them later */
                  /* FLAG POSIX INTERP 221 */
-                 if ((shell_compatibility_level > 42) && (rflags & P_DQUOTE) && (dolbrace_state == DOLBRACE_QUOTE2) && (flags & P_DOLBRACE))
+                 if ((shell_compatibility_level > 42) && (rflags & P_DQUOTE) && (dolbrace_state == DOLBRACE_QUOTE2 || dolbrace_state == DOLBRACE_QUOTE) && (flags & P_DOLBRACE))
+                   {
+                     nestret = sh_single_quote (ttrans);
+                     free (ttrans);
+                     nestlen = strlen (nestret);
+                   }
+#if 0 /* TAG:bash-5.3 */
+                 /* This single-quotes PARAM in ${PARAM OP WORD} when PARAM
+                    contains a $'...' even when extended_quote is set. */
+                 else if ((rflags & P_DQUOTE) && (dolbrace_state == DOLBRACE_PARAM) && (flags & P_DOLBRACE))
                    {
                      nestret = sh_single_quote (ttrans);
                      free (ttrans);
                      nestlen = strlen (nestret);
                    }
+#endif
                  else if ((rflags & P_DQUOTE) == 0)
                    {
                      nestret = sh_single_quote (ttrans);
@@ -6038,22 +6178,41 @@ parse_matched_pair (qc, open, close, lenp, flags)
                    }
                  else
                    {
+                     /* Should we quote CTLESC here? */
                      nestret = ttrans;
                      nestlen = ttranslen;
                    }
                  retind -= 2;          /* back up before the $' */
                }
+#if defined (TRANSLATABLE_STRINGS)
              else if MBTEST((tflags & LEX_WASDOL) && ch == '"' && (extended_quote || (rflags & P_DQUOTE) == 0))
                {
                  /* Locale expand $"..." here. */
-                 ttrans = localeexpand (nestret, 0, nestlen - 1, start_lineno, &ttranslen);
+                 /* PST_NOEXPAND */
+                 ttrans = locale_expand (nestret, 0, nestlen - 1, start_lineno, &ttranslen);
                  free (nestret);
 
-                 nestret = sh_mkdoublequoted (ttrans, ttranslen, 0);
+                 /* If we're supposed to single-quote translated strings,
+                    check whether the translated result is different from
+                    the original and single-quote the string if it is. */
+                 if (singlequote_translations &&
+                       ((nestlen - 1) != ttranslen || STREQN (nestret, ttrans, ttranslen) == 0))
+                   {
+                     if ((rflags & P_DQUOTE) == 0)
+                       nestret = sh_single_quote (ttrans);
+                     else if ((rflags & P_DQUOTE) && (dolbrace_state == DOLBRACE_QUOTE2) && (flags & P_DOLBRACE))
+                       nestret = sh_single_quote (ttrans);
+                     else
+                       /* single quotes aren't special, use backslash instead */
+                       nestret = sh_backslash_quote_for_double_quotes (ttrans, 0);
+                   }
+                 else
+                   nestret = sh_mkdoublequoted (ttrans, ttranslen, 0);
                  free (ttrans);
-                 nestlen = ttranslen + 2;
+                 nestlen = strlen (nestret);
                  retind -= 2;          /* back up before the $" */
                }
+#endif /* TRANSLATABLE_STRINGS */
 
              APPEND_NESTRET ();
              FREE (nestret);
@@ -6155,11 +6314,26 @@ dump_tflags (flags)
       f &= ~LEX_CKCASE;
       fprintf (stderr, "LEX_CKCASE%s", f ? "|" : "");
     }
+  if (f & LEX_CKESAC)
+    {
+      f &= ~LEX_CKESAC;
+      fprintf (stderr, "LEX_CKESAC%s", f ? "|" : "");
+    }
   if (f & LEX_INCASE)
     {
       f &= ~LEX_INCASE;
       fprintf (stderr, "LEX_INCASE%s", f ? "|" : "");
     }
+  if (f & LEX_CASEWD)
+    {
+      f &= ~LEX_CASEWD;
+      fprintf (stderr, "LEX_CASEWD%s", f ? "|" : "");
+    }
+  if (f & LEX_PATLIST)
+    {
+      f &= ~LEX_PATLIST;
+      fprintf (stderr, "LEX_PATLIST%s", f ? "|" : "");
+    }
   if (f & LEX_INHEREDOC)
     {
       f &= ~LEX_INHEREDOC;
@@ -6191,554 +6365,172 @@ dump_tflags (flags)
 }
 #endif
 
-/* Parse a $(...) command substitution.  This is messier than I'd like, and
-   reproduces a lot more of the token-reading code than I'd like. */
+/* Parse a $(...) command substitution.  This reads input from the current
+   input stream. */
 static char *
 parse_comsub (qc, open, close, lenp, flags)
      int qc;   /* `"' if this construct is within double quotes */
      int open, close;
      int *lenp, flags;
 {
-  int count, ch, peekc, tflags, lex_rwlen, lex_wlen, lex_firstind;
-  int nestlen, ttranslen, start_lineno, orig_histexp;
-  char *ret, *nestret, *ttrans, *heredelim;
-  int retind, retsize, rflags, hdlen;
+  int peekc, r;
+  int start_lineno, local_extglob, was_extpat;
+  char *ret, *tcmd;
+  int retlen;
+  sh_parser_state_t ps;
+  STRING_SAVER *saved_strings;
+  COMMAND *saved_global, *parsed_command;
 
   /* Posix interp 217 says arithmetic expressions have precedence, so
      assume $(( introduces arithmetic expansion and parse accordingly. */
-  peekc = shell_getc (0);
-  shell_ungetc (peekc);
-  if (peekc == '(')
-    return (parse_matched_pair (qc, open, close, lenp, 0));
+  if (open == '(')             /*)*/
+    {
+      peekc = shell_getc (1);
+      shell_ungetc (peekc);
+      if (peekc == '(')                /*)*/
+       return (parse_matched_pair (qc, open, close, lenp, 0));
+    }
 
 /*itrace("parse_comsub: qc = `%c' open = %c close = %c", qc, open, close);*/
-  count = 1;
-  tflags = LEX_RESWDOK;
-#if defined (BANG_HISTORY)
-  orig_histexp = history_expansion_inhibited;
-#endif
 
-  if ((flags & P_COMMAND) && qc != '\'' && qc != '"' && (flags & P_DQUOTE) == 0)
-    tflags |= LEX_CKCASE;
-  if ((tflags & LEX_CKCASE) && (interactive == 0 || interactive_comments))
-    tflags |= LEX_CKCOMMENT;
+  /*debug_parser(1);*/
+  start_lineno = line_number;
 
-  /* RFLAGS is the set of flags we want to pass to recursive calls. */
-  rflags = (flags & P_DQUOTE);
+  save_parser_state (&ps);
 
-  ret = (char *)xmalloc (retsize = 64);
-  retind = 0;
+  was_extpat = (parser_state & PST_EXTPAT);
+
+  /* State flags we don't want to persist into command substitutions. */
+  parser_state &= ~(PST_REGEXP|PST_EXTPAT|PST_CONDCMD|PST_CONDEXPR|PST_COMPASSIGN);
+  /* Could do PST_CASESTMT too, but that also affects history. Setting
+     expecting_in_token below should take care of the parsing requirements.
+     Unsetting PST_REDIRLIST isn't strictly necessary because of how we set
+     token_to_read below, but we do it anyway. */
+  parser_state &= ~(PST_CASEPAT|PST_ALEXPNEXT|PST_SUBSHELL|PST_REDIRLIST);
+  /* State flags we want to set for this run through the parser. */
+  parser_state |= PST_CMDSUBST|PST_EOFTOKEN|PST_NOEXPAND;
+
+  /* leave pushed_string_list alone, since we might need to consume characters
+     from it to satisfy this command substitution (in some perverse case). */
+  shell_eof_token = close;
+
+  saved_global = global_command;               /* might not be necessary */
+  global_command = (COMMAND *)NULL;
+
+  /* These are reset by reset_parser() */
+  need_here_doc = 0;
+  esacs_needed_count = expecting_in_token = 0;
+
+  /* We want to expand aliases on this pass if we're in posix mode, since the
+     standard says you have to take aliases into account when looking for the
+     terminating right paren. Otherwise, we defer until execution time for
+     backwards compatibility. */
+  if (expand_aliases)
+    expand_aliases = posixly_correct != 0;
+#if defined (EXTENDED_GLOB)
+  /* If (parser_state & PST_EXTPAT), we're parsing an extended pattern for a
+     conditional command and have already set global_extglob appropriately. */
+  if (shell_compatibility_level <= 51 && was_extpat == 0)
+    {
+      local_extglob = global_extglob = extended_glob;
+      extended_glob = 1;
+    }
+#endif
 
-  start_lineno = line_number;
-  lex_rwlen = lex_wlen = 0;
+  current_token = '\n';                                /* XXX */
+  token_to_read = DOLPAREN;                    /* let's trick the parser */
 
-  heredelim = 0;
-  lex_firstind = -1;
+  r = yyparse ();
 
-  while (count)
+  if (need_here_doc > 0)
     {
-comsub_readchar:
-      ch = shell_getc (qc != '\'' && (tflags & (LEX_INCOMMENT|LEX_PASSNEXT|LEX_QUOTEDDOC)) == 0);
+      internal_warning ("command substitution: %d unterminated here-document%s", need_here_doc, (need_here_doc == 1) ? "" : "s");
+      gather_here_documents ();        /* XXX check compatibility level? */
+    }
 
-      if (ch == EOF)
-       {
-eof_error:
-#if defined (BANG_HISTORY)
-         history_expansion_inhibited = orig_histexp;
+#if defined (EXTENDED_GLOB)
+  if (shell_compatibility_level <= 51 && was_extpat == 0)
+    extended_glob = local_extglob;
 #endif
-         free (ret);
-         FREE (heredelim);
-         parser_error (start_lineno, _("unexpected EOF while looking for matching `%c'"), close);
-         EOF_Reached = 1;      /* XXX */
-         return (&matched_pair_error);
-       }
 
-      /* If we hit the end of a line and are reading the contents of a here
-        document, and it's not the same line that the document starts on,
-        check for this line being the here doc delimiter.  Otherwise, if
-        we're in a here document, mark the next character as the beginning
-        of a line. */
-      if (ch == '\n')
-       {
-         if ((tflags & LEX_HEREDELIM) && heredelim)
-           {
-             tflags &= ~LEX_HEREDELIM;
-             tflags |= LEX_INHEREDOC;
-#if defined (BANG_HISTORY)
-             history_expansion_inhibited = 1;
-#endif
-             lex_firstind = retind + 1;
-           }
-         else if (tflags & LEX_INHEREDOC)
-           {
-             int tind;
-             tind = lex_firstind;
-             while ((tflags & LEX_STRIPDOC) && ret[tind] == '\t')
-               tind++;
-             if (retind-tind == hdlen && STREQN (ret + tind, heredelim, hdlen))
-               {
-                 tflags &= ~(LEX_STRIPDOC|LEX_INHEREDOC|LEX_QUOTEDDOC);
-/*itrace("parse_comsub:%d: found here doc end `%s'", line_number, ret + tind);*/
-                 free (heredelim);
-                 heredelim = 0;
-                 lex_firstind = -1;
-#if defined (BANG_HISTORY)
-                 history_expansion_inhibited = orig_histexp;
-#endif
-               }
-             else
-               lex_firstind = retind + 1;
-           }
-       }
+  parsed_command = global_command;
 
-      /* Possible reprompting. */
-      if (ch == '\n' && SHOULD_PROMPT ())
-       prompt_again ();
+  if (EOF_Reached)
+    {
+      shell_eof_token = ps.eof_token;
+      expand_aliases = ps.expand_aliases;
 
-      /* XXX -- we currently allow here doc to be delimited by ending right
-        paren in default mode and posix mode. To change posix mode, change
-        the #if 1 to #if 0 below */
-      if ((tflags & LEX_INHEREDOC) && ch == close && count == 1)
+      /* yyparse() has already called yyerror() and reset_parser() */
+      return (&matched_pair_error);
+    }
+  else if (r != 0)
+    {
+      /* parser_error (start_lineno, _("could not parse command substitution")); */
+      /* Non-interactive shells exit on parse error in a command substitution. */
+      if (last_command_exit_value == 0)
+       last_command_exit_value = EXECUTION_FAILURE;
+      set_exit_status (last_command_exit_value);
+      if (interactive_shell == 0)
+       jump_to_top_level (FORCE_EOF);  /* This is like reader_loop() */
+      else
        {
-         int tind;
-/*itrace("parse_comsub:%d: in here doc, ch == close, retind - firstind = %d hdlen = %d retind = %d", line_number, retind-lex_firstind, hdlen, retind);*/
-         tind = lex_firstind;
-         while ((tflags & LEX_STRIPDOC) && ret[tind] == '\t')
-           tind++;
-#if 1
-         if (retind-tind == hdlen && STREQN (ret + tind, heredelim, hdlen))
-#else
-         /* Posix-mode shells require the newline after the here-document
-            delimiter. */
-         if (retind-tind == hdlen && STREQN (ret + tind, heredelim, hdlen) &&
-             posixly_correct == 0)
-#endif
-           {
-             tflags &= ~(LEX_STRIPDOC|LEX_INHEREDOC|LEX_QUOTEDDOC);
-/*itrace("parse_comsub:%d: found here doc end `%*s'", line_number, hdlen, ret + tind);*/
-             free (heredelim);
-             heredelim = 0;
-             lex_firstind = -1;
-#if defined (BANG_HISTORY)
-             history_expansion_inhibited = orig_histexp;
-#endif
-           }
+         shell_eof_token = ps.eof_token;
+         expand_aliases = ps.expand_aliases;
+
+         jump_to_top_level (DISCARD);  /* XXX - return (&matched_pair_error)? */
        }
+    }
 
-      /* Don't bother counting parens or doing anything else if in a comment or
-        here document (not exactly right for here-docs -- if we want to allow
-        recursive calls to parse_comsub to have their own here documents,
-        change the LEX_INHEREDOC to LEX_QUOTEDDOC here and uncomment the next
-        clause below.  Note that to make this work completely, we need to make
-        additional changes to allow xparse_dolparen to work right when the
-        command substitution is parsed, because read_secondary_line doesn't know
-        to recursively parse through command substitutions embedded in here-
-        documents */
-      if (tflags & (LEX_INCOMMENT|LEX_INHEREDOC))
-       {
-         /* Add this character. */
-         RESIZE_MALLOCED_BUFFER (ret, retind, 1, retsize, 64);
-         ret[retind++] = ch;
+  if (current_token != shell_eof_token)
+    {
+INTERNAL_DEBUG(("current_token (%d) != shell_eof_token (%c)", current_token, shell_eof_token));
+      token_to_read = current_token;
 
-         if ((tflags & LEX_INCOMMENT) && ch == '\n')
-           {
-/*itrace("parse_comsub:%d: lex_incomment -> 0 ch = `%c'", line_number, ch);*/
-             tflags &= ~LEX_INCOMMENT;
-           }
+      /* If we get here we can check eof_encountered and if it's 1 but the
+        previous EOF_Reached test didn't succeed, we can assume that the shell
+        is interactive and ignoreeof is set. We might want to restore the
+        parser state in this case. */
+      shell_eof_token = ps.eof_token;
+      expand_aliases = ps.expand_aliases;
 
-         continue;
-       }
-#if 0
-      /* If we're going to recursively parse a command substitution inside a
-        here-document, make sure we call parse_comsub recursively below.  See
-        above for additional caveats. */
-      if ((tflags & LEX_INHEREDOC) && ((tflags & LEX_WASDOL) == 0 || ch != '(')) /*)*/
-       {
-         /* Add this character. */
-         RESIZE_MALLOCED_BUFFER (ret, retind, 1, retsize, 64);
-         ret[retind++] = ch;
-         if MBTEST(ch == '$')
-           tflags |= LEX_WASDOL;
-         else
-           tflags &= ~LEX_WASDOL;
-       }
-#endif
+      return (&matched_pair_error);
+    }
 
-      if (tflags & LEX_PASSNEXT)               /* last char was backslash */
-       {
-/*itrace("parse_comsub:%d: lex_passnext -> 0 ch = `%c' (%d)", line_number, ch, __LINE__);*/
-         tflags &= ~LEX_PASSNEXT;
-         if (qc != '\'' && ch == '\n') /* double-quoted \<newline> disappears. */
-           {
-             if (retind > 0)
-               retind--;       /* swallow previously-added backslash */
-             continue;
-           }
+  /* We don't want to restore the old pushed string list, since we might have
+     used it to consume additional input from an alias while parsing this
+     command substitution. */
+  saved_strings = pushed_string_list;
+  restore_parser_state (&ps);
+  pushed_string_list = saved_strings;
 
-         RESIZE_MALLOCED_BUFFER (ret, retind, 2, retsize, 64);
-         if MBTEST(ch == CTLESC)
-           ret[retind++] = CTLESC;
-         ret[retind++] = ch;
-         continue;
-       }
-
-      /* If this is a shell break character, we are not in a word.  If not,
-        we either start or continue a word. */
-      if MBTEST(shellbreak (ch))
-       {
-         tflags &= ~LEX_INWORD;
-/*itrace("parse_comsub:%d: lex_inword -> 0 ch = `%c' (%d)", line_number, ch, __LINE__);*/
-       }
-      else
-       {
-         if (tflags & LEX_INWORD)
-           {
-             lex_wlen++;
-/*itrace("parse_comsub:%d: lex_inword == 1 ch = `%c' lex_wlen = %d (%d)", line_number, ch, lex_wlen, __LINE__);*/
-           }         
-         else
-           {
-/*itrace("parse_comsub:%d: lex_inword -> 1 ch = `%c' (%d)", line_number, ch, __LINE__);*/
-             tflags |= LEX_INWORD;
-             lex_wlen = 0;
-             if (tflags & LEX_RESWDOK)
-               lex_rwlen = 0;
-           }
-       }
-
-      /* Skip whitespace */
-      if MBTEST(shellblank (ch) && (tflags & LEX_HEREDELIM) == 0 && lex_rwlen == 0)
-        {
-         /* Add this character. */
-         RESIZE_MALLOCED_BUFFER (ret, retind, 1, retsize, 64);
-         ret[retind++] = ch;
-         continue;
-        }
-
-      /* Either we are looking for the start of the here-doc delimiter
-        (lex_firstind == -1) or we are reading one (lex_firstind >= 0).
-        If this character is a shell break character and we are reading
-        the delimiter, save it and note that we are now reading a here
-        document.  If we've found the start of the delimiter, note it by
-        setting lex_firstind.  Backslashes can quote shell metacharacters
-        in here-doc delimiters. */
-      if (tflags & LEX_HEREDELIM)
-       {
-         if (lex_firstind == -1 && shellbreak (ch) == 0)
-           lex_firstind = retind;
-#if 0
-         else if (heredelim && (tflags & LEX_PASSNEXT) == 0 && ch == '\n')
-           {
-             tflags |= LEX_INHEREDOC;
-             tflags &= ~LEX_HEREDELIM;
-             lex_firstind = retind + 1;
-#if defined (BANG_HISTORY)
-             history_expansion_inhibited = 1;
-#endif
-           }
-#endif
-         else if (lex_firstind >= 0 && (tflags & LEX_PASSNEXT) == 0 && shellbreak (ch))
-           {
-             if (heredelim == 0)
-               {
-                 nestret = substring (ret, lex_firstind, retind);
-                 heredelim = string_quote_removal (nestret, 0);
-                 hdlen = STRLEN(heredelim);
-/*itrace("parse_comsub:%d: found here doc delimiter `%s' (%d)", line_number, heredelim, hdlen);*/
-                 if (STREQ (heredelim, nestret) == 0)
-                   tflags |= LEX_QUOTEDDOC;
-                 free (nestret);
-               }
-             if (ch == '\n')
-               {
-                 tflags |= LEX_INHEREDOC;
-                 tflags &= ~LEX_HEREDELIM;
-                 lex_firstind = retind + 1;
-#if defined (BANG_HISTORY)
-                 history_expansion_inhibited = 1;
-#endif
-               }
-             else
-               lex_firstind = -1;
-           }
-       }
-
-      /* Meta-characters that can introduce a reserved word.  Not perfect yet. */
-      if MBTEST((tflags & LEX_RESWDOK) == 0 && (tflags & LEX_CKCASE) && (tflags & LEX_INCOMMENT) == 0 && (shellmeta(ch) || ch == '\n'))
-       {
-         /* Add this character. */
-         RESIZE_MALLOCED_BUFFER (ret, retind, 1, retsize, 64);
-         ret[retind++] = ch;
-         peekc = shell_getc (1);
-         if (ch == peekc && (ch == '&' || ch == '|' || ch == ';'))     /* two-character tokens */
-           {
-             RESIZE_MALLOCED_BUFFER (ret, retind, 1, retsize, 64);
-             ret[retind++] = peekc;
-/*itrace("parse_comsub:%d: set lex_reswordok = 1, ch = `%c'", line_number, ch);*/
-             tflags |= LEX_RESWDOK;
-             lex_rwlen = 0;
-             continue;
-           }
-         else if (ch == '\n' || COMSUB_META(ch))
-           {
-             shell_ungetc (peekc);
-/*itrace("parse_comsub:%d: set lex_reswordok = 1, ch = `%c'", line_number, ch);*/
-             tflags |= LEX_RESWDOK;
-             lex_rwlen = 0;
-             continue;
-           }
-         else if (ch == EOF)
-           goto eof_error;
-         else
-           {
-             /* `unget' the character we just added and fall through */
-             retind--;
-             shell_ungetc (peekc);
-           }
-       }
-
-      /* If we can read a reserved word, try to read one. */
-      if (tflags & LEX_RESWDOK)
-       {
-         if MBTEST(islower ((unsigned char)ch))
-           {
-             /* Add this character. */
-             RESIZE_MALLOCED_BUFFER (ret, retind, 1, retsize, 64);
-             ret[retind++] = ch;
-             lex_rwlen++;
-             continue;
-           }
-         else if MBTEST(lex_rwlen == 4 && shellbreak (ch))
-           {
-             if (STREQN (ret + retind - 4, "case", 4))
-               {
-                 tflags |= LEX_INCASE;
-                 tflags &= ~LEX_RESWDOK;
-/*itrace("parse_comsub:%d: found `case', lex_incase -> 1 lex_reswdok -> 0", line_number);*/
-               }
-             else if (STREQN (ret + retind - 4, "esac", 4))
-               {
-                 tflags &= ~LEX_INCASE;
-/*itrace("parse_comsub:%d: found `esac', lex_incase -> 0 lex_reswdok -> 1", line_number);*/
-                 tflags |= LEX_RESWDOK;
-                 lex_rwlen = 0;
-               }
-             else if (STREQN (ret + retind - 4, "done", 4) ||
-                      STREQN (ret + retind - 4, "then", 4) ||
-                      STREQN (ret + retind - 4, "else", 4) ||
-                      STREQN (ret + retind - 4, "elif", 4) ||
-                      STREQN (ret + retind - 4, "time", 4))
-               {
-                 /* these are four-character reserved words that can be
-                    followed by a reserved word; anything else turns off
-                    the reserved-word-ok flag */
-/*itrace("parse_comsub:%d: found `%.4s', lex_reswdok -> 1", line_number, ret+retind-4);*/
-                 tflags |= LEX_RESWDOK;
-                 lex_rwlen = 0;
-               }
-              else if (shellmeta (ch) == 0)
-               {
-                 tflags &= ~LEX_RESWDOK;
-/*itrace("parse_comsub:%d: found `%.4s', lex_reswdok -> 0", line_number, ret+retind-4);*/
-               }
-             else      /* can't be in a reserved word any more */
-               lex_rwlen = 0;
-           }
-         else if MBTEST((tflags & LEX_CKCOMMENT) && ch == '#' && (lex_rwlen == 0 || ((tflags & LEX_INWORD) && lex_wlen == 0)))
-           ;   /* don't modify LEX_RESWDOK if we're starting a comment */
-         /* Allow `do' followed by space, tab, or newline to preserve the
-            RESWDOK flag, but reset the reserved word length counter so we
-            can read another one. */
-         else if MBTEST(((tflags & LEX_INCASE) == 0) &&
-                         (isblank((unsigned char)ch) || ch == '\n') &&
-                         lex_rwlen == 2 &&
-                         STREQN (ret + retind - 2, "do", 2))
-           {
-/*itrace("parse_comsub:%d: lex_incase == 0 found `%c', found \"do\"", line_number, ch);*/
-             lex_rwlen = 0;
-           }
-         else if MBTEST((tflags & LEX_INCASE) && ch != '\n')
-           /* If we can read a reserved word and we're in case, we're at the
-              point where we can read a new pattern list or an esac.  We
-              handle the esac case above.  If we read a newline, we want to
-              leave LEX_RESWDOK alone.  If we read anything else, we want to
-              turn off LEX_RESWDOK, since we're going to read a pattern list. */
-           {
-             tflags &= ~LEX_RESWDOK;
-/*itrace("parse_comsub:%d: lex_incase == 1 found `%c', lex_reswordok -> 0", line_number, ch);*/
-           }
-         else if MBTEST(shellbreak (ch) == 0)
-           {
-             tflags &= ~LEX_RESWDOK;
-/*itrace("parse_comsub:%d: found `%c', lex_reswordok -> 0", line_number, ch);*/
-           }
-#if 0
-         /* If we find a space or tab but have read something and it's not
-            `do', turn off the reserved-word-ok flag */
-         else if MBTEST(isblank ((unsigned char)ch) && lex_rwlen > 0)
-           {
-             tflags &= ~LEX_RESWDOK;
-/*itrace("parse_comsub:%d: found `%c', lex_reswordok -> 0", line_number, ch);*/
-           }
-#endif
-       }
-
-      /* Might be the start of a here-doc delimiter */
-      if MBTEST((tflags & LEX_INCOMMENT) == 0 && (tflags & LEX_CKCASE) && ch == '<')
-       {
-         /* Add this character. */
-         RESIZE_MALLOCED_BUFFER (ret, retind, 1, retsize, 64);
-         ret[retind++] = ch;
-         peekc = shell_getc (1);
-         if (peekc == EOF)
-           goto eof_error;
-         if (peekc == ch)
-           {
-             RESIZE_MALLOCED_BUFFER (ret, retind, 1, retsize, 64);
-             ret[retind++] = peekc;
-             peekc = shell_getc (1);
-             if (peekc == EOF)
-               goto eof_error;
-             if (peekc == '-')
-               {
-                 RESIZE_MALLOCED_BUFFER (ret, retind, 1, retsize, 64);
-                 ret[retind++] = peekc;
-                 tflags |= LEX_STRIPDOC;
-               }
-             else
-               shell_ungetc (peekc);
-             if (peekc != '<')
-               {
-                 tflags |= LEX_HEREDELIM;
-                 lex_firstind = -1;
-               }
-             continue;
-           }
-         else
-           {
-             shell_ungetc (peekc);     /* not a here-doc, start over */
-             continue;
-           }
-       }
-      else if MBTEST((tflags & LEX_CKCOMMENT) && (tflags & LEX_INCOMMENT) == 0 && ch == '#' && (((tflags & LEX_RESWDOK) && lex_rwlen == 0) || ((tflags & LEX_INWORD) && lex_wlen == 0)))
-       {
-/*itrace("parse_comsub:%d: lex_incomment -> 1 (%d)", line_number, __LINE__);*/
-         tflags |= LEX_INCOMMENT;
-       }
-
-      if MBTEST(ch == CTLESC || ch == CTLNUL)  /* special shell escapes */
-       {
-         RESIZE_MALLOCED_BUFFER (ret, retind, 2, retsize, 64);
-         ret[retind++] = CTLESC;
-         ret[retind++] = ch;
-         continue;
-       }
-#if 0
-      else if MBTEST((tflags & LEX_INCASE) && ch == close && close == ')')
-        tflags &= ~LEX_INCASE;         /* XXX */
-#endif
-      else if MBTEST(ch == close && (tflags & LEX_INCASE) == 0)                /* ending delimiter */
-       {
-         count--;
-/*itrace("parse_comsub:%d: found close: count = %d", line_number, count);*/
-       }
-      else if MBTEST(((flags & P_FIRSTCLOSE) == 0) && (tflags & LEX_INCASE) == 0 && ch == open)        /* nested begin */
-       {
-         count++;
-/*itrace("parse_comsub:%d: found open: count = %d", line_number, count);*/
-       }
-
-      /* Add this character. */
-      RESIZE_MALLOCED_BUFFER (ret, retind, 1, retsize, 64);
-      ret[retind++] = ch;
-
-      /* If we just read the ending character, don't bother continuing. */
-      if (count == 0)
-       break;
-
-      if MBTEST(ch == '\\')                    /* backslashes */
-       tflags |= LEX_PASSNEXT;
-
-      if MBTEST(shellquote (ch))
-        {
-          /* '', ``, or "" inside $(...). */
-          push_delimiter (dstack, ch);
-          if MBTEST((tflags & LEX_WASDOL) && ch == '\'')       /* $'...' inside group */
-           nestret = parse_matched_pair (ch, ch, ch, &nestlen, P_ALLOWESC|rflags);
-         else
-           nestret = parse_matched_pair (ch, ch, ch, &nestlen, rflags);
-         pop_delimiter (dstack);
-         CHECK_NESTRET_ERROR ();
-
-         if MBTEST((tflags & LEX_WASDOL) && ch == '\'' && (extended_quote || (rflags & P_DQUOTE) == 0))
-           {
-             /* Translate $'...' here. */
-             ttrans = ansiexpand (nestret, 0, nestlen - 1, &ttranslen);
-             free (nestret);
-
-             if ((rflags & P_DQUOTE) == 0)
-               {
-                 nestret = sh_single_quote (ttrans);
-                 free (ttrans);
-                 nestlen = strlen (nestret);
-               }
-             else
-               {
-                 nestret = ttrans;
-                 nestlen = ttranslen;
-               }
-             retind -= 2;              /* back up before the $' */
-           }
-         else if MBTEST((tflags & LEX_WASDOL) && ch == '"' && (extended_quote || (rflags & P_DQUOTE) == 0))
-           {
-             /* Locale expand $"..." here. */
-             ttrans = localeexpand (nestret, 0, nestlen - 1, start_lineno, &ttranslen);
-             free (nestret);
-
-             nestret = sh_mkdoublequoted (ttrans, ttranslen, 0);
-             free (ttrans);
-             nestlen = ttranslen + 2;
-             retind -= 2;              /* back up before the $" */
-           }
-
-         APPEND_NESTRET ();
-         FREE (nestret);
-       }
-      else if MBTEST((tflags & LEX_WASDOL) && (ch == '(' || ch == '{' || ch == '['))   /* ) } ] */
-       /* check for $(), $[], or ${} inside command substitution. */
-       {
-         if ((tflags & LEX_INCASE) == 0 && open == ch) /* undo previous increment */
-           count--;
-         if (ch == '(')                /* ) */
-           nestret = parse_comsub (0, '(', ')', &nestlen, (rflags|P_COMMAND) & ~P_DQUOTE);
-         else if (ch == '{')           /* } */
-           nestret = parse_matched_pair (0, '{', '}', &nestlen, P_FIRSTCLOSE|P_DOLBRACE|rflags);
-         else if (ch == '[')           /* ] */
-           nestret = parse_matched_pair (0, '[', ']', &nestlen, rflags);
-
-         CHECK_NESTRET_ERROR ();
-         APPEND_NESTRET ();
-
-         FREE (nestret);
-       }
-      if MBTEST(ch == '$' && (tflags & LEX_WASDOL) == 0)
-       tflags |= LEX_WASDOL;
-      else
-       tflags &= ~LEX_WASDOL;
+  tcmd = print_comsub (parsed_command);                /* returns static memory */
+  retlen = strlen (tcmd);
+  if (tcmd[0] == '(')                  /* ) need a space to prevent arithmetic expansion */
+    retlen++;
+  ret = xmalloc (retlen + 2);
+  if (tcmd[0] == '(')                  /* ) */
+    {
+      ret[0] = ' ';
+      strcpy (ret + 1, tcmd);
     }
+  else
+    strcpy (ret, tcmd);
+  ret[retlen++] = ')';
+  ret[retlen] = '\0';
+
+  dispose_command (parsed_command);
+  global_command = saved_global;
 
-#if defined (BANG_HISTORY)
-  history_expansion_inhibited = orig_histexp;
-#endif
-  FREE (heredelim);
-  ret[retind] = '\0';
   if (lenp)
-    *lenp = retind;
+    *lenp = retlen;
+
 /*itrace("parse_comsub:%d: returning `%s'", line_number, ret);*/
   return ret;
 }
 
-/* Recursively call the parser to parse a $(...) command substitution. */
+/* Recursively call the parser to parse a $(...) command substitution. This is
+   called by the word expansion code and so does not have to reset as much
+   parser state before calling yyparse(). */
 char *
 xparse_dolparen (base, string, indp, flags)
      char *base;
@@ -6748,11 +6540,8 @@ xparse_dolparen (base, string, indp, flags)
 {
   sh_parser_state_t ps;
   sh_input_line_state_t ls;
-  int orig_ind, nc, sflags, orig_eof_token, start_lineno;
+  int orig_ind, nc, sflags, start_lineno;
   char *ret, *ep, *ostring;
-#if defined (ALIAS) || defined (DPAREN_ARITHMETIC)
-  STRING_SAVER *saved_pushed_strings;
-#endif
 
 /*debug_parser(1);*/
   orig_ind = *indp;
@@ -6770,41 +6559,48 @@ xparse_dolparen (base, string, indp, flags)
     }
 
 /*itrace("xparse_dolparen: size = %d shell_input_line = `%s' string=`%s'", shell_input_line_size, shell_input_line, string);*/
+
   sflags = SEVAL_NONINT|SEVAL_NOHIST|SEVAL_NOFREE;
   if (flags & SX_NOLONGJMP)
     sflags |= SEVAL_NOLONGJMP;
+
   save_parser_state (&ps);
   save_input_line_state (&ls);
-  orig_eof_token = shell_eof_token;
+
 #if defined (ALIAS) || defined (DPAREN_ARITHMETIC)
-  saved_pushed_strings = pushed_string_list;   /* separate parsing context */
   pushed_string_list = (STRING_SAVER *)NULL;
 #endif
-
   /*(*/
   parser_state |= PST_CMDSUBST|PST_EOFTOKEN;   /* allow instant ')' */ /*(*/
   shell_eof_token = ')';
+  if (flags & SX_COMPLETE)
+    parser_state |= PST_NOERROR;
+
+  /* Don't expand aliases on this pass at all. Either parse_comsub() does it
+     at parse time, in which case this string already has aliases expanded,
+     or command_substitute() does it in the child process executing the
+     command substitution and we want to defer it completely until then. The
+     old value will be restored by restore_parser_state(). */
+  expand_aliases = 0;
+#if defined (EXTENDED_GLOB)
+  global_extglob = extended_glob;              /* for reset_parser() */
+#endif
 
-  /* Should we save and restore the bison/yacc lookahead token (yychar) here?
-     Or only if it's not YYEMPTY? */
+  token_to_read = DOLPAREN;                    /* let's trick the parser */
 
-  nc = parse_string (string, "command substitution", sflags, &ep);
+  nc = parse_string (string, "command substitution", sflags, (COMMAND **)NULL, &ep);
 
+  /* Should we save and restore the bison/yacc lookahead token (yychar) here?
+     Or only if it's not YYEMPTY? */
   if (current_token == shell_eof_token)
     yyclearin;         /* might want to clear lookahead token unconditionally */
 
-  reset_parser ();
+  reset_parser ();     /* resets extended_glob too */
   /* reset_parser() clears shell_input_line and associated variables, including
      parser_state, so we want to reset things, then restore what we need. */
   restore_input_line_state (&ls);
-
-  shell_eof_token = orig_eof_token;
   restore_parser_state (&ps);
 
-#if defined (ALIAS) || defined (DPAREN_ARITHMETIC)
-  pushed_string_list = saved_pushed_strings;
-#endif
-
   token_to_read = 0;
 
   /* If parse_string returns < 0, we need to jump to top level with the
@@ -6815,17 +6611,18 @@ xparse_dolparen (base, string, indp, flags)
       clear_shell_input_line ();       /* XXX */
       if (bash_input.type != st_string)        /* paranoia */
        parser_state &= ~(PST_CMDSUBST|PST_EOFTOKEN);
-      jump_to_top_level (-nc); /* XXX */
+      if ((flags & SX_NOLONGJMP) == 0)
+       jump_to_top_level (-nc);        /* XXX */
     }
 
-  /* Need to find how many characters parse_and_execute consumed, update
+  /* Need to find how many characters parse_string() consumed, update
      *indp, if flags != 0, copy the portion of the string parsed into RET
      and return it.  If flags & 1 (SX_NOALLOC) we can return NULL. */
 
   /*(*/
   if (ep[-1] != ')')
     {
-#if DEBUG
+#if 0
       if (ep[-1] != '\n')
        itrace("xparse_dolparen:%d: ep[-1] != RPAREN (%d), ep = `%s'", line_number, ep[-1], ep);
 #endif
@@ -6837,17 +6634,18 @@ xparse_dolparen (base, string, indp, flags)
   *indp = ep - base - 1;
 
   /*((*/
-#if DEBUG
+#if 0
   if (base[*indp] != ')')
     itrace("xparse_dolparen:%d: base[%d] != RPAREN (%d), base = `%s'", line_number, *indp, base[*indp], base);
   if (*indp < orig_ind)
     itrace("xparse_dolparen:%d: *indp (%d) < orig_ind (%d), orig_string = `%s'", line_number, *indp, orig_ind, ostring);
 #endif
 
-  if (base[*indp] != ')')
+  if (base[*indp] != ')' && (flags & SX_NOLONGJMP) == 0)
     {
       /*(*/
-      parser_error (start_lineno, _("unexpected EOF while looking for matching `%c'"), ')');
+      if ((flags & SX_NOERROR) == 0)
+       parser_error (start_lineno, _("unexpected EOF while looking for matching `%c'"), ')');
       jump_to_top_level (DISCARD);
     }
 
@@ -6865,6 +6663,74 @@ xparse_dolparen (base, string, indp, flags)
   return ret;
 }
 
+/* Recursively call the parser to parse the string from a $(...) command
+   substitution to a COMMAND *. This is called from command_substitute() and
+   has the same parser state constraints as xparse_dolparen(). */
+COMMAND *
+parse_string_to_command (string, flags)
+     char *string;
+     int flags;
+{
+  sh_parser_state_t ps;
+  sh_input_line_state_t ls;
+  int nc, sflags;
+  size_t slen;
+  char *ret, *ep;
+  COMMAND *cmd;
+
+  if (*string == 0)
+    return (COMMAND *)NULL;
+
+  ep = string;
+  slen = STRLEN (string);
+
+/*itrace("parse_string_to_command: size = %d shell_input_line = `%s' string=`%s'", shell_input_line_size, shell_input_line, string);*/
+
+  sflags = SEVAL_NONINT|SEVAL_NOHIST|SEVAL_NOFREE;
+  if (flags & SX_NOLONGJMP)
+    sflags |= SEVAL_NOLONGJMP;
+
+  save_parser_state (&ps);
+  save_input_line_state (&ls);
+
+#if defined (ALIAS) || defined (DPAREN_ARITHMETIC)
+  pushed_string_list = (STRING_SAVER *)NULL;
+#endif
+  if (flags & SX_COMPLETE)
+    parser_state |= PST_NOERROR;
+
+  expand_aliases = 0;
+
+  cmd = 0;
+  nc = parse_string (string, "command substitution", sflags, &cmd, &ep);
+
+  reset_parser ();
+  /* reset_parser() clears shell_input_line and associated variables, including
+     parser_state, so we want to reset things, then restore what we need. */
+  restore_input_line_state (&ls);
+  restore_parser_state (&ps);
+
+  /* If parse_string returns < 0, we need to jump to top level with the
+     negative of the return value. We abandon the rest of this input line
+     first */
+  if (nc < 0)
+    {
+      clear_shell_input_line ();       /* XXX */
+      if ((flags & SX_NOLONGJMP) == 0)
+        jump_to_top_level (-nc);       /* XXX */
+    }
+
+  /* Need to check how many characters parse_string() consumed, make sure it's
+     the entire string. */
+  if (nc < slen)
+    {
+      dispose_command (cmd);
+      return (COMMAND *)NULL;
+    }
+
+  return cmd;
+}
+
 #if defined (DPAREN_ARITHMETIC) || defined (ARITH_FOR_COMMAND)
 /* Parse a double-paren construct.  It can be either an arithmetic
    command, an arithmetic `for' command, or a nested subshell.  Returns
@@ -6881,7 +6747,9 @@ parse_dparen (c)
 #if defined (ARITH_FOR_COMMAND)
   if (last_read_token == FOR)
     {
-      arith_for_lineno = line_number;
+      if (word_top < MAX_CASE_NEST)
+       word_top++;
+      arith_for_lineno = word_lineno[word_top] = line_number;
       cmdtyp = parse_arith_cmd (&wval, 0);
       if (cmdtyp == 1)
        {
@@ -6905,7 +6773,7 @@ parse_dparen (c)
        {
          wd = alloc_word_desc ();
          wd->word = wval;
-         wd->flags = W_QUOTED|W_NOSPLIT|W_NOGLOB|W_DQUOTE;
+         wd->flags = W_QUOTED|W_NOSPLIT|W_NOGLOB|W_NOTILDE|W_NOPROCSUB;
          yylval.word_list = make_word_list (wd, (WORD_LIST *)NULL);
          return (ARITH_CMD);
        }
@@ -7040,7 +6908,7 @@ cond_skip_newlines ()
   while ((cond_token = read_token (READ)) == '\n')
     {
       if (SHOULD_PROMPT ())
-       prompt_again ();
+       prompt_again (0);
     }
   return (cond_token);
 }
@@ -7053,7 +6921,7 @@ cond_term ()
 {
   WORD_DESC *op;
   COND_COM *term, *tleft, *tright;
-  int tok, lineno;
+  int tok, lineno, local_extglob;
   char *etext;
 
   /* Read a token.  It can be a left paren, a `!', a unary operator, or a
@@ -7122,6 +6990,7 @@ cond_term ()
       tleft = make_cond_node (COND_TERM, yylval.word, (COND_COM *)NULL, (COND_COM *)NULL);
 
       /* binop */
+      /* tok = cond_skip_newlines (); ? */
       tok = read_token (READ);
       if (tok == WORD && test_binop (yylval.word->word))
        {
@@ -7166,11 +7035,12 @@ cond_term ()
        }
 
       /* rhs */
+      local_extglob = extended_glob;
       if (parser_state & PST_EXTPAT)
        extended_glob = 1;
       tok = read_token (READ);
       if (parser_state & PST_EXTPAT)
-       extended_glob = global_extglob;
+       extended_glob = local_extglob;
       parser_state &= ~(PST_REGEXP|PST_EXTPAT);
 
       if (tok == WORD)
@@ -7326,11 +7196,18 @@ read_token_word (character)
         double-quotes, quote some things inside of double-quotes. */
       if MBTEST(character == '\\')
        {
+         if (parser_state & PST_NOEXPAND)
+           {
+             pass_next_character++;
+             quoted = 1;
+             goto got_character;
+           }
+             
          peek_char = shell_getc (0);
 
          /* Backslash-newline is ignored in all cases except
             when quoted with single quotes. */
-         if (peek_char == '\n')
+         if MBTEST(peek_char == '\n')
            {
              character = '\n';
              goto next_character;
@@ -7340,7 +7217,7 @@ read_token_word (character)
              shell_ungetc (peek_char);
 
              /* If the next character is to be quoted, note it now. */
-             if (cd == 0 || cd == '`' ||
+             if MBTEST(cd == 0 || cd == '`' ||
                  (cd == '"' && peek_char >= 0 && (sh_syntaxtab[peek_char] & CBSDQUOTE)))
                pass_next_character++;
 
@@ -7425,7 +7302,7 @@ read_token_word (character)
 
       /* If the delimiter character is not single quote, parse some of
         the shell expansions that must be read as a single word. */
-      if (shellexp (character))
+      if MBTEST(shellexp (character))
        {
          peek_char = shell_getc (1);
          /* $(...), <(...), >(...), $((...)), ${...}, and $[...] constructs */
@@ -7462,7 +7339,11 @@ read_token_word (character)
              goto next_character;
            }
          /* This handles $'...' and $"..." new-style quoted strings. */
+#if defined (TRANSLATABLE_STRINGS)
          else if MBTEST(character == '$' && (peek_char == '\'' || peek_char == '"'))
+#else
+         else if MBTEST(character == '$' && peek_char == '\'')
+#endif
            {
              int first_line;
 
@@ -7476,6 +7357,7 @@ read_token_word (character)
                return -1;
              if (peek_char == '\'')
                {
+                 /* PST_NOEXPAND */
                  ttrans = ansiexpand (ttok, 0, ttoklen - 1, &ttranslen);
                  free (ttok);
 
@@ -7487,18 +7369,27 @@ read_token_word (character)
                  ttranslen = strlen (ttok);
                  ttrans = ttok;
                }
+#if defined (TRANSLATABLE_STRINGS)
              else
                {
+                 /* PST_NOEXPAND */
                  /* Try to locale-expand the converted string. */
-                 ttrans = localeexpand (ttok, 0, ttoklen - 1, first_line, &ttranslen);
+                 ttrans = locale_expand (ttok, 0, ttoklen - 1, first_line, &ttranslen);
                  free (ttok);
 
-                 /* Add the double quotes back */
-                 ttok = sh_mkdoublequoted (ttrans, ttranslen, 0);
+                 /* Add the double quotes back (or single quotes if the user
+                    has set that option). */
+                 if (singlequote_translations &&
+                       ((ttoklen - 1) != ttranslen || STREQN (ttok, ttrans, ttranslen) == 0))
+                   ttok = sh_single_quote (ttrans);
+                 else
+                   ttok = sh_mkdoublequoted (ttrans, ttranslen, 0);
+
                  free (ttrans);
-                 ttranslen += 2;
                  ttrans = ttok;
+                 ttranslen = strlen (ttrans);
                }
+#endif /* TRANSLATABLE_STRINGS */
 
              RESIZE_MALLOCED_BUFFER (token, token_index, ttranslen + 1,
                                      token_buffer_size,
@@ -7591,7 +7482,7 @@ read_token_word (character)
        }
 
 got_character:
-      if (character == CTLESC || character == CTLNUL)
+      if MBTEST(character == CTLESC || character == CTLNUL)
        {
          RESIZE_MALLOCED_BUFFER (token, token_index, 2, token_buffer_size,
                                  TOKEN_DEFAULT_GROW_SIZE);
@@ -7609,7 +7500,7 @@ got_escaped_character:
 
     next_character:
       if (character == '\n' && SHOULD_PROMPT ())
-       prompt_again ();
+       prompt_again (0);
 
       /* We want to remove quoted newlines (that is, a \<newline> pair)
         unless we are within single quotes or pass_next_character is
@@ -7705,7 +7596,7 @@ got_token:
   yylval.word = the_word;
 
   /* should we check that quoted == 0 as well? */
-  if (token[0] == '{' && token[token_index-1] == '}' &&
+  if MBTEST(token[0] == '{' && token[token_index-1] == '}' &&
       (character == '<' || character == '>'))
     {
       /* can use token; already copied to the_word */
@@ -7767,8 +7658,10 @@ reserved_word_acceptable (toksym)
     case '{':
     case '}':          /* XXX */
     case AND_AND:
+    case ARITH_CMD:
     case BANG:
     case BAR_AND:
+    case COND_END:
     case DO:
     case DONE:
     case ELIF:
@@ -7788,6 +7681,7 @@ reserved_word_acceptable (toksym)
     case UNTIL:
     case WHILE:
     case 0:
+    case DOLPAREN:
       return 1;
     default:
 #if defined (COPROCESS_SUPPORT)
@@ -7947,8 +7841,11 @@ history_delimiting_chars (line)
        return (" ");
     }
 
+  /* Assume that by this point we are reading lines in a multi-line command.
+     If we have multiple consecutive blank lines we want to return only one
+     semicolon. */
   if (line_isblank (line))
-    return ("");
+    return (current_command_line_count > 1 && last_read_token == '\n' && token_before_that != '\n') ? "; " : "";
 
   return ("; ");
 }
@@ -7957,7 +7854,8 @@ history_delimiting_chars (line)
 /* Issue a prompt, or prepare to issue a prompt when the next character
    is read. */
 static void
-prompt_again ()
+prompt_again (force)
+     int force;
 {
   char *temp_prompt;
 
@@ -8087,7 +7985,7 @@ decode_prompt_string (string)
   int last_exit_value, last_comsub_pid;
 #if defined (PROMPT_STRING_DECODE)
   size_t result_size;
-  int result_index;
+  size_t result_index;
   int c, n, i;
   char *temp, *t_host, octal_string[4];
   struct tm *tm;  
@@ -8224,7 +8122,7 @@ decode_prompt_string (string)
                /* Make sure that expand_prompt_string is called with a
                   second argument of Q_DOUBLE_QUOTES if we use this
                   function here. */
-               temp = sh_backslash_quote_for_double_quotes (timebuf);
+               temp = sh_backslash_quote_for_double_quotes (timebuf, 0);
              else
                temp = savestring (timebuf);
              goto add_string;
@@ -8240,9 +8138,14 @@ decode_prompt_string (string)
              temp = base_pathname (shell_name);
              /* Try to quote anything the user can set in the file system */
              if (promptvars || posixly_correct)
-               temp = sh_backslash_quote_for_double_quotes (temp);
+               {
+                 char *t;
+                 t = sh_strvis (temp);
+                 temp = sh_backslash_quote_for_double_quotes (t, 0);
+                 free (t);
+               }
              else
-               temp = savestring (temp);
+               temp = sh_strvis (temp);
              goto add_string;
 
            case 'v':
@@ -8317,9 +8220,14 @@ decode_prompt_string (string)
                  /* Make sure that expand_prompt_string is called with a
                     second argument of Q_DOUBLE_QUOTES if we use this
                     function here. */
-                 temp = sh_backslash_quote_for_double_quotes (t_string);
+                 {
+                   char *t;
+                   t = sh_strvis (t_string);
+                   temp = sh_backslash_quote_for_double_quotes (t, 0);
+                   free (t);
+                 }
                else
-                 temp = savestring (t_string);
+                 temp = sh_strvis (t_string);
 
                goto add_string;
              }
@@ -8339,7 +8247,7 @@ decode_prompt_string (string)
                /* Make sure that expand_prompt_string is called with a
                   second argument of Q_DOUBLE_QUOTES if we use this
                   function here. */
-               temp = sh_backslash_quote_for_double_quotes (t_host);
+               temp = sh_backslash_quote_for_double_quotes (t_host, 0);
              else
                temp = savestring (t_host);
              free (t_host);
@@ -8494,7 +8402,8 @@ int
 yyerror (msg)
      const char *msg;
 {
-  report_syntax_error ((char *)NULL);
+  if ((parser_state & PST_NOERROR) == 0)
+    report_syntax_error ((char *)NULL);
   reset_parser ();
   return (0);
 }
@@ -8656,8 +8565,14 @@ report_syntax_error (message)
     }
   else
     {
-      msg = EOF_Reached ? _("syntax error: unexpected end of file") : _("syntax error");
-      parser_error (line_number, "%s", msg);
+      if (EOF_Reached && shell_eof_token && current_token != shell_eof_token)
+       parser_error (line_number, _("unexpected EOF while looking for matching `%c'"), shell_eof_token);
+      else
+       {
+         msg = EOF_Reached ? _("syntax error: unexpected end of file") : _("syntax error");
+         parser_error (line_number, "%s", msg);
+       }
+
       /* When the shell is interactive, this file uses EOF_Reached
         only for error reporting.  Other mechanisms are used to
         decide whether or not to exit. */
@@ -8726,7 +8641,7 @@ handle_eof_input_unit ()
              last_read_token = current_token = '\n';
              /* Reset the prompt string to be $PS1. */
              prompt_string_pointer = (char **)NULL;
-             prompt_again ();
+             prompt_again (0);
              return;
            }
        }
@@ -8765,31 +8680,26 @@ parse_string_to_word_list (s, flags, whom)
      const char *whom;
 {
   WORD_LIST *wl;
-  int tok, orig_current_token, orig_line_number, orig_input_terminator;
-  int orig_line_count;
-  int old_echo_input, old_expand_aliases, ea;
-#if defined (HISTORY)
-  int old_remember_on_history, old_history_expansion_inhibited;
-#endif
+  int tok, orig_current_token, orig_line_number;
+  int orig_parser_state;
+  sh_parser_state_t ps;
+  int ea;
+
+  orig_line_number = line_number;
+  save_parser_state (&ps);
 
 #if defined (HISTORY)
-  old_remember_on_history = remember_on_history;
-#  if defined (BANG_HISTORY)
-  old_history_expansion_inhibited = history_expansion_inhibited;
-#  endif
   bash_history_disable ();
 #endif
 
-  orig_line_number = line_number;
-  orig_line_count = current_command_line_count;
-  orig_input_terminator = shell_input_line_terminator;
-  old_echo_input = echo_input_at_read;
-  old_expand_aliases = expand_aliases;
-
   push_stream (1);
   if (ea = expanding_alias ())
     parser_save_alias ();
-  last_read_token = WORD;              /* WORD to allow reserved words here */
+
+  /* WORD to avoid parsing reserved words as themselves and just parse them as
+     WORDs. */
+  last_read_token = WORD;
+
   current_command_line_count = 0;
   echo_input_at_read = expand_aliases = 0;
 
@@ -8797,7 +8707,13 @@ parse_string_to_word_list (s, flags, whom)
   wl = (WORD_LIST *)NULL;
 
   if (flags & 1)
-    parser_state |= PST_COMPASSIGN|PST_REPARSE;
+    {
+      orig_parser_state = parser_state;                /* XXX - not needed? */
+      /* State flags we don't want to persist into compound assignments. */
+      parser_state &= ~PST_NOEXPAND;   /* parse_comsub sentinel */
+      /* State flags we want to set for this run through the tokenizer. */
+      parser_state |= PST_COMPASSIGN|PST_REPARSE;
+    }
 
   while ((tok = read_token (READ)) != yacc_EOF)
     {
@@ -8826,21 +8742,10 @@ parse_string_to_word_list (s, flags, whom)
   if (ea)
     parser_restore_alias ();
 
-#if defined (HISTORY)
-  remember_on_history = old_remember_on_history;
-#  if defined (BANG_HISTORY)
-  history_expansion_inhibited = old_history_expansion_inhibited;
-#  endif /* BANG_HISTORY */
-#endif /* HISTORY */
-
-  echo_input_at_read = old_echo_input;
-  expand_aliases = old_expand_aliases;
-
-  current_command_line_count = orig_line_count;
-  shell_input_line_terminator = orig_input_terminator;
+  restore_parser_state (&ps);
 
   if (flags & 1)
-    parser_state &= ~(PST_COMPASSIGN|PST_REPARSE);
+    parser_state = orig_parser_state;  /* XXX - not needed? */
 
   if (wl == &parse_string_error)
     {
@@ -8859,30 +8764,37 @@ parse_compound_assignment (retlenp)
      int *retlenp;
 {
   WORD_LIST *wl, *rl;
-  int tok, orig_line_number, orig_token_size, orig_last_token, assignok;
-  char *saved_token, *ret;
+  int tok, orig_line_number, assignok;
+  sh_parser_state_t ps;
+  char *ret;
 
-  saved_token = token;
-  orig_token_size = token_buffer_size;
   orig_line_number = line_number;
-  orig_last_token = last_read_token;
+  save_parser_state (&ps);
 
-  last_read_token = WORD;      /* WORD to allow reserved words here */
+  /* WORD to avoid parsing reserved words as themselves and just parse them as
+     WORDs. Plus it means we won't be in a command position and so alias
+     expansion won't happen. */
+  last_read_token = WORD;
 
   token = (char *)NULL;
   token_buffer_size = 0;
+  wl = (WORD_LIST *)NULL;      /* ( */
 
   assignok = parser_state&PST_ASSIGNOK;                /* XXX */
 
-  wl = (WORD_LIST *)NULL;      /* ( */
+  /* State flags we don't want to persist into compound assignments. */
+  parser_state &= ~(PST_NOEXPAND|PST_CONDCMD|PST_CONDEXPR|PST_REGEXP|PST_EXTPAT);
+  /* State flags we want to set for this run through the tokenizer. */
   parser_state |= PST_COMPASSIGN;
 
+  esacs_needed_count = expecting_in_token = 0;
+
   while ((tok = read_token (READ)) != ')')
     {
       if (tok == '\n')                 /* Allow newlines in compound assignments */
        {
          if (SHOULD_PROMPT ())
-           prompt_again ();
+           prompt_again (0);
          continue;
        }
       if (tok != WORD && tok != ASSIGNMENT_WORD)
@@ -8900,11 +8812,7 @@ parse_compound_assignment (retlenp)
       wl = make_word_list (yylval.word, wl);
     }
 
-  FREE (token);
-  token = saved_token;
-  token_buffer_size = orig_token_size;
-
-  parser_state &= ~PST_COMPASSIGN;
+  restore_parser_state (&ps);
 
   if (wl == &parse_string_error)
     {
@@ -8916,8 +8824,6 @@ parse_compound_assignment (retlenp)
        jump_to_top_level (DISCARD);
     }
 
-  last_read_token = orig_last_token;           /* XXX - was WORD? */
-
   if (wl)
     {
       rl = REVERSE_LIST (wl, WORD_LIST *);
@@ -8956,6 +8862,7 @@ save_parser_state (ps)
 
   ps->input_line_terminator = shell_input_line_terminator;
   ps->eof_encountered = eof_encountered;
+  ps->eol_lookahead = eol_ungetc_lookahead;
 
   ps->prompt_string_pointer = prompt_string_pointer;
 
@@ -8981,11 +8888,19 @@ save_parser_state (ps)
   ps->need_here_doc = need_here_doc;
   ps->here_doc_first_line = here_doc_first_line;
 
+  ps->esacs_needed = esacs_needed_count;
+  ps->expecting_in = expecting_in_token;
+
   if (need_here_doc == 0)
     ps->redir_stack[0] = 0;
   else
     memcpy (ps->redir_stack, redir_stack, sizeof (redir_stack[0]) * HEREDOC_MAX);
 
+#if defined (ALIAS) || defined (DPAREN_ARITHMETIC)
+  ps->pushed_strings = pushed_string_list;
+#endif
+
+  ps->eof_token = shell_eof_token;
   ps->token = token;
   ps->token_buffer_size = token_buffer_size;
   /* Force reallocation on next call to read_token_word */
@@ -9013,6 +8928,7 @@ restore_parser_state (ps)
 
   shell_input_line_terminator = ps->input_line_terminator;
   eof_encountered = ps->eof_encountered;
+  eol_ungetc_lookahead = ps->eol_lookahead;
 
   prompt_string_pointer = ps->prompt_string_pointer;
 
@@ -9038,6 +8954,9 @@ restore_parser_state (ps)
   need_here_doc = ps->need_here_doc;
   here_doc_first_line = ps->here_doc_first_line;
 
+  esacs_needed_count = ps->esacs_needed;
+  expecting_in_token = ps->expecting_in;
+
 #if 0
   for (i = 0; i < HEREDOC_MAX; i++)
     redir_stack[i] = ps->redir_stack[i];
@@ -9048,9 +8967,14 @@ restore_parser_state (ps)
     memcpy (redir_stack, ps->redir_stack, sizeof (redir_stack[0]) * HEREDOC_MAX);
 #endif
 
+#if defined (ALIAS) || defined (DPAREN_ARITHMETIC)
+  pushed_string_list = (STRING_SAVER *)ps->pushed_strings;
+#endif
+
   FREE (token);
   token = ps->token;
   token_buffer_size = ps->token_buffer_size;
+  shell_eof_token = ps->eof_token;
 }
 
 sh_input_line_state_t *
diff --git a/y.tab.h b/y.tab.h
index 41bdea08ec7af4e45a161da01014dcd872e92a64..3f3010777885e8d5e4ead4e0a74592024ead2ff1 100644 (file)
--- a/y.tab.h
+++ b/y.tab.h
@@ -1,8 +1,8 @@
-/* A Bison parser, made by GNU Bison 3.6.4.  */
+/* A Bison parser, made by GNU Bison 3.8.2.  */
 
 /* Bison interface for Yacc-like parsers in C
 
-   Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation,
+   Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation,
    Inc.
 
    This program is free software: you can redistribute it and/or modify
@@ -16,7 +16,7 @@
    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/>.  */
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
 /* As a special exception, you may create a larger work that contains
    part or all of the Bison parser skeleton and distribute that work
@@ -100,11 +100,13 @@ extern int yydebug;
     LESS_GREATER = 301,            /* LESS_GREATER  */
     GREATER_BAR = 302,             /* GREATER_BAR  */
     BAR_AND = 303,                 /* BAR_AND  */
-    yacc_EOF = 304                 /* yacc_EOF  */
+    DOLPAREN = 304,                /* DOLPAREN  */
+    yacc_EOF = 305                 /* yacc_EOF  */
   };
   typedef enum yytokentype yytoken_kind_t;
 #endif
 /* Token kinds.  */
+#define YYEMPTY -2
 #define YYEOF 0
 #define YYerror 256
 #define YYUNDEF 257
@@ -154,13 +156,14 @@ extern int yydebug;
 #define LESS_GREATER 301
 #define GREATER_BAR 302
 #define BAR_AND 303
-#define yacc_EOF 304
+#define DOLPAREN 304
+#define yacc_EOF 305
 
 /* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 union YYSTYPE
 {
-#line 328 "/Users/chet/src/bash/src/parse.y"
+#line 338 "/usr/local/src/chet/src/bash/src/parse.y"
 
   WORD_DESC *word;             /* the word that we read. */
   int number;                  /* the number that we read. */
@@ -170,7 +173,7 @@ union YYSTYPE
   ELEMENT element;
   PATTERN_LIST *pattern;
 
-#line 174 "y.tab.h"
+#line 177 "y.tab.h"
 
 };
 typedef union YYSTYPE YYSTYPE;
@@ -181,6 +184,8 @@ typedef union YYSTYPE YYSTYPE;
 
 extern YYSTYPE yylval;
 
+
 int yyparse (void);
 
+
 #endif /* !YY_YY_Y_TAB_H_INCLUDED  */